?? test-inet_tcp.c
字號:
tsn_val; sid[fd] = ((rdat_opt_t *) (cmd.cbuf + cmd.tpi.optdata_ind.OPT_offset))-> sid_val; break; case T_DISCON_REQ: printf (" | |<-------------|<-+------ T_DISCON_REQ \n"); break; case T_DISCON_IND: printf (" | |------------->|--+-----> T_DISCON_IND \n"); break; case T_ORDREL_REQ: printf (" | |<-------------|<-+------ T_ORDREL_REQ \n"); break; case T_ORDREL_IND: printf (" | |------------->|--+-----> T_ORDREL_IND \n"); break; default: printf (" | |?-+-----? ????%4ld???? \n", cmd.tpi.type); break; } } if (fd == fd3) { switch (cmd.tpi.type) { case T_INFO_REQ: printf (" | | |<----- T_INFO_REQ \n"); break; case T_INFO_ACK: printf (" | | |-----> T_INFO_ACK \n"); break; case T_OPTMGMT_REQ: printf (" | | |<----- T_OPTMGMT_REQ\n"); break; case T_OPTMGMT_ACK: printf (" | | |-----> T_OPTMGMT_ACK\n"); break; case T_BIND_REQ: printf (" | | |<----- T_BIND_REQ \n"); break; case T_BIND_ACK: printf (" | | |-----> T_BIND_ACK \n"); break; case T_ADDR_REQ: printf (" | | |<----- T_ADDR_REQ \n"); break; case T_ADDR_ACK: printf (" | | |-----> T_ADDR_ACK \n"); break; case T_UNBIND_REQ: printf (" | | |<----- T_UNBIND_REQ \n"); break; case T_ERROR_ACK: printf (" | | |\\----> T_ERROR_ACK \n"); printf (" | | | [%-11s]\n", err_string(cmd.tpi.error_ack.TLI_error)); break; case T_OK_ACK: printf (" | | | |\\----> T_OK_ACK \n"); break; case T_UNITDATA_REQ: printf (" | |<----------------|<----- T_UNITDATA_REQ\n"); break; case T_UNITDATA_IND: printf (" | |---------------->|-----> T_UNITDATA_IND\n"); break; case T_UDERROR_IND: printf (" | |---------------->|-----> T_UDERROR_IND \n"); break; case T_CONN_REQ: printf (" | |<----------------|<----- T_CONN_REQ \n"); break; case T_CONN_IND: printf (" | |---------------->|-----> T_CONN_IND \n"); seq[fd] = cmd.tpi.conn_ind.SEQ_number; break; case T_CONN_RES: printf (" | |<----------------|<----- T_CONN_RES \n"); break; case T_CONN_CON: printf (" | |---------------->|-----> T_CONN_CON \n"); break; case T_DATA_REQ: printf (" | |<----------------|<----- T_DATA_REQ \n"); break; case T_DATA_IND: printf (" | |---------------->|-----> T_DATA_IND \n"); break; case T_EXDATA_REQ: printf (" | |<----------------|<----- T_EXDATA_REQ \n"); break; case T_EXDATA_IND: printf (" | |---------------->|-----> T_EXDATA_IND \n"); break; case T_OPTDATA_REQ: if (cmd.tpi.optdata_req.DATA_flag & T_ODF_EX) printf (" | |<---(%03lu:-U-)----|<----- T_OPTDATA_REQ\n", opt_data.sid_val); else printf (" | |<---(%03lu:---)----|<----- T_OPTDATA_REQ\n", opt_data.sid_val); break; case T_OPTDATA_IND: if (cmd.tpi.optdata_ind.DATA_flag & T_ODF_EX) printf (" | [%010lu] |----(%03lu:-U-)--->|-----> T_OPTDATA_IND\n", (ulong) ((rdat_opt_t *) (cmd.cbuf + cmd.tpi.optdata_ind. OPT_offset))->tsn_val, (ulong) ((rdat_opt_t *) (cmd.cbuf + cmd.tpi.optdata_ind. OPT_offset))-> sid_val); else printf (" | [%010lu] |----(%03lu:%03lu)--->|-----> T_OPTDATA_IND\n", (ulong) ((rdat_opt_t *) (cmd.cbuf + cmd.tpi.optdata_ind. OPT_offset))->tsn_val, (ulong) ((rdat_opt_t *) (cmd.cbuf + cmd.tpi.optdata_ind. OPT_offset))->sid_val, (ulong) ((rdat_opt_t *) (cmd.cbuf + cmd.tpi.optdata_ind. OPT_offset))-> ssn_val); tsn[fd] = ((rdat_opt_t *) (cmd.cbuf + cmd.tpi.optdata_ind.OPT_offset))-> tsn_val; sid[fd] = ((rdat_opt_t *) (cmd.cbuf + cmd.tpi.optdata_ind.OPT_offset))-> sid_val; break; case T_DISCON_REQ: printf (" | |<----------------|<----- T_DISCON_REQ \n"); break; case T_DISCON_IND: printf (" | |---------------->|-----> T_DISCON_IND \n"); break; case T_ORDREL_REQ: printf (" | |<----------------|<----- T_ORDREL_REQ \n"); break; case T_ORDREL_IND: printf (" | |---------------->|-----> T_ORDREL_IND \n"); break; default: printf (" | | |?----? ????%4ld???? \n", cmd.tpi.type); break; } } break; } } FFLUSH(stdout);}voidprint_less(int fd){ switch (show) { case 1: switch (fd) { case 0: printf (" . . <---->| . |<----> . . \n"); printf (" . (more) . <---->| . |<----> . (more) . \n"); printf (" . . <---->| . |<----> . . \n"); break; case 3: printf (" . . <---->| . | | \n"); printf (" . (more) . <---->| . | | \n"); printf (" . . <---->| . | | \n"); break; case 4: printf (" | . |<-+-----> . . \n"); printf (" | . |<-+-----> . (more) . \n"); printf (" | . |<-+-----> . . \n"); break; case 5: printf (" | . | |<----> . . \n"); printf (" | . | |<----> . (more) . \n"); printf (" | . | |<----> . . \n"); break; } break; case 2: printf("%d-(more) ...\n", fd); break; } show = 0; return;}voidprint_more(void){ show = 1;}intget_msg(int fd, int wait){ int ret; int flags = 0; while ((ret = getmsg(fd, &ctrl, &data, &flags)) < 0) { if (ret != -1) printf("ERROR: getmsg: return value %d\n", ret); switch (errno) { default: case EPROTO: case EINVAL: printf("ERROR: getmsg: return value %d\n", ret); printf("ERROR: getmsg: [%d] %s\n", errno, strerror(errno)); exit(2); case EINTR: case ERESTART: continue; case EAGAIN: break; } break; } if (ret > 0) { printf("ERROR: getmsg: return value %d\n", ret); if (ret & (MORECTL | MOREDATA)) { if (ret & MORECTL) printf("ERROR: getmsg: our ctl buffers are too small.\n"); if (ret & MOREDATA) printf("ERROR: getmsg: our dat buffers are too small.\n"); return (FAILURE); } } if (!ret) { gettimeofday(&when, NULL); if (show) print_msg(fd); return (cmd.tpi.type); } if (!wait) { /* * printf("Nothing to get on getmsg\n"); */ return (FAILURE); } do { struct pollfd pfd[] = { {fd, POLLIN | POLLPRI, 0} }; if (!(ret = poll(pfd, 1, wait))) { /* * printf("Timeout on poll for getmsg\n"); */ return (FAILURE); } if (ret == 1 || ret == 2) { if (pfd[0].revents & (POLLIN | POLLPRI)) { flags = 0; if ((ret = getmsg(fd, &ctrl, &data, &flags)) == 0) { gettimeofday(&when, NULL); if (show) print_msg(fd); return (cmd.tpi.type); } printf("ERROR: getmsg: return value %d\n", ret); if (ret > 0) { if (ret & (MORECTL | MOREDATA)) { if (ret & MORECTL) printf ("ERROR: getmsg: our ctl buffers are too small.\n"); if (ret & MOREDATA) printf ("ERROR: getmsg: our dat buffers are too small.\n"); return (FAILURE); } } printf("ERROR: getmsg: [%d] %s\n", errno, strerror(errno)); return (FAILURE); } } if (ret == -1) { printf("ERROR: poll: [%d] %s\n", errno, strerror(errno)); return (FAILURE); } } while (1);}intexpect(int fd, int wait, int want){ int got; if ((got = get_msg(fd, wait)) == want) return (SUCCESS); else { switch (show) { case 1: switch (fd) { case 3: printf ("(%-12s)<-????X[Expected] X X \n", prim_string(want)); break; case 4: printf (" X [Expected]X--X\?\?\?\?->(%-12s)\n", prim_string(want)); break; case 5: printf (" X [Expected]X X\?\?\?\?->(%-12s)\n", prim_string(want)); break; } break; case 2: printf("%d-ERROR: Expected ", fd); print_prim(want); printf(" got "); print_prim(got); printf("\n"); break; } return (FAILURE); }}intput_msg(int fd, int band, int flags, int wait){ int ret; struct strbuf *mydata = data.len ? &data : NULL; while ((ret = putpmsg(fd, &ctrl, mydata, band, flags)) < 0) { switch (errno) { default: printf("%d-ERROR: putpmsg: [%d] %s\n", fd, errno, strerror(errno)); exit(2); break; case EINTR: case ERESTART: continue; case EAGAIN: break; } break; } if (!ret) { gettimeofday(&when, NULL); if (show) print_msg(fd); return (SUCCESS); } if (!wait) { /* * printf("Nothing put on putpmsg\n"); */ return (FAILURE); } do { int flag = band ? POLLWRNORM | POLLOUT : POLLWRBAND; struct pollfd pfd[] = { {fd, flag, 0} }; if (!(ret = poll(pfd, 1, wait))) { /* * printf("Timeout on poll for putpmsg\n"); */ return (FAILURE); } if (ret == 1 || ret == 2) { if (pfd[0].revents & (POLLOUT | POLLWRNORM | POLLWRBAND)) { if (putpmsg(fd, &ctrl, mydata, band, flags) == 0) { gettimeofday(&when, NULL); if (show) print_msg(fd); return (SUCCESS); } printf("%d-ERROR: putpmsg: [%d] %s\n", fd, errno, strerror(errno)); return (FAILURE); } } if (ret == -1) { printf("%d-ERROR: poll: [%d] %s\n", fd, errno, strerror(errno)); return (FAILURE); } } while (1);}intput_fdi(int fd, int fd2, int offset, int flags){ fdi.flags = flags; fdi.fildes = fd2; fdi.offset = offset; if (show) gettimeofday(&when, NULL); if (ioctl(fd, I_FDINSERT, &fdi) < 0) { printf("ERROR: ioctl: [%d] %s\n", errno, strerror(errno)); exit(2); } return (SUCCESS);}intinet_open(const char *name){ int fd; if ((fd = open(name, O_NONBLOCK | O_RDWR)) < 0) printf("ERROR: open: [%d] %s\n", errno, strerror(errno)); else switch (show) { case 1: switch (fd) { case 3: printf ("OPEN ----->v \n"); break; case 4: printf (" | v<-------- OPEN \n"); break; case 5: printf
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -