|
|
1.1 ! root 1: /* text2tpkt.c - test utilities for use with TPDU packets */ ! 2: ! 3: #ifndef lint ! 4: static char *rcsid = "$Header: /f/osi/tsap/RCS/text2tpkt.c,v 7.0 89/11/23 22:30:31 mrose Rel $"; ! 5: #endif ! 6: ! 7: /* ! 8: * $Header: /f/osi/tsap/RCS/text2tpkt.c,v 7.0 89/11/23 22:30:31 mrose Rel $ ! 9: * ! 10: * ! 11: * $Log: text2tpkt.c,v $ ! 12: * Revision 7.0 89/11/23 22:30:31 mrose ! 13: * Release 6.0 ! 14: * ! 15: */ ! 16: ! 17: /* ! 18: * NOTICE ! 19: * ! 20: * Acquisition, use, and distribution of this module and related ! 21: * materials are subject to the restrictions of a license agreement. ! 22: * Consult the Preface in the User's Manual for the full terms of ! 23: * this agreement. ! 24: * ! 25: */ ! 26: ! 27: ! 28: /* LINTLIBRARY */ ! 29: ! 30: #include <stdio.h> ! 31: #include <ctype.h> ! 32: #include "tpkt.h" ! 33: #include "logger.h" ! 34: ! 35: /* */ ! 36: ! 37: char *fgets (), *calloc (); ! 38: ! 39: /* */ ! 40: ! 41: #define TPKT_TYPE(e) (void) ll_printf (lp, "%sCODE/ %s\n", rw, e) ! 42: ! 43: ! 44: void tpkt2text (lp, t, isread) ! 45: register LLog *lp; ! 46: register struct tsapkt *t; ! 47: int isread; ! 48: { ! 49: char *rw = isread ? "<--- " : "---> "; ! 50: register struct udvec *uv; ! 51: ! 52: LLOG (lp, LLOG_ALL, ! 53: ("dump of TPKT 0x%x, errno=0x%x version=0x%x length=%d", ! 54: t, t -> t_errno, t -> t_vrsn, t -> t_length)); ! 55: (void) ll_printf (lp, "%s(\n", rw); ! 56: ! 57: (void) ll_printf (lp, "%sLI/ %d\n", rw, t -> t_li); ! 58: if (t -> t_vdata) ! 59: type_data (lp, "VARIABLE", rw, t -> t_vlen, t -> t_vdata); ! 60: ! 61: switch (TPDU_CODE (t)) { ! 62: case TPDU_CR: ! 63: case TPDU_CC: ! 64: TPKT_TYPE (TPDU_CODE (t) == TPDU_CR ? "CONNECT REQUEST" ! 65: : "CONNECT CONFIRM"); ! 66: (void) ll_printf (lp, "%sDSTREF/ 0x%x\n", rw, ntohs (t -> t_cr.cr_dstref)); ! 67: (void) ll_printf (lp, "%sSRCREF/ 0x%x\n", rw, ntohs (t -> t_cr.cr_srcref)); ! 68: (void) ll_printf (lp, "%sCLASS/ 0x%x\n", rw, t -> t_cr.cr_class); ! 69: if (t -> t_calledlen > 0) ! 70: type_id (lp, "CALLED", rw, t -> t_called, t -> t_calledlen); ! 71: if (t -> t_callinglen > 0) ! 72: type_id (lp, "CALLING", rw, t -> t_calling, t -> t_callinglen); ! 73: if (t -> t_tpdusize) ! 74: (void) ll_printf (lp, "%sTPDUSIZE/ %d\n", rw, 1 << t -> t_tpdusize); ! 75: (void) ll_printf (lp, "%sOPTIONS/ 0x%x\n", rw, t -> t_options); ! 76: if (t -> t_alternate) ! 77: (void) ll_printf (lp, "%sALTERNATES/ 0x%x\n", rw, t -> t_alternate); ! 78: break; ! 79: ! 80: case TPDU_DR: ! 81: TPKT_TYPE ("DISCONNECT REQUEST"); ! 82: (void) ll_printf (lp, "%sDSTREF/ 0x%x\n", rw, ntohs (t -> t_dr.dr_dstref)); ! 83: (void) ll_printf (lp, "%sSRCREF/ 0x%x\n", rw, ntohs (t -> t_dr.dr_srcref)); ! 84: (void) ll_printf (lp, "%sREASON/ 0x%x: %s\n", rw, t -> t_dr.dr_reason, ! 85: TErrString ((int) t -> t_dr.dr_reason)); ! 86: break; ! 87: ! 88: case TPDU_DT: ! 89: case TPDU_ED: ! 90: TPKT_TYPE (TPDU_CODE (t) == TPDU_DT ? "DATA TRANSFER" ! 91: : "EXPEDITED DATA TRANSFER"); ! 92: (void) ll_printf (lp, "%sSEQUENCE/ %s0x%x\n", rw, ! 93: t -> t_dt.dt_nr & DT_EOT ? "<EOT>+" : "", ! 94: t -> t_dt.dt_nr & ~DT_EOT); ! 95: break; ! 96: ! 97: case TPDU_ER: ! 98: TPKT_TYPE ("ERROR"); ! 99: (void) ll_printf (lp, "%sDSTREF/ 0x%x\n", rw, ntohs (t -> t_er.er_dstref)); ! 100: (void) ll_printf (lp, "%sREJECT/ 0x%x\n", rw, t -> t_er.er_reject); ! 101: break; ! 102: ! 103: default: ! 104: (void) ll_printf (lp, "%sCODE/ 0x%x\n", rw, TPDU_CODE (t)); ! 105: break; ! 106: } ! 107: ! 108: if (t -> t_qbuf && t -> t_qbuf -> qb_data) ! 109: type_data (lp, "QBUF", rw, t -> t_qbuf -> qb_len, ! 110: t -> t_qbuf -> qb_data); ! 111: for (uv = t -> t_udvec; uv -> uv_base; uv++) ! 112: type_data (lp, "UVEC", rw, uv -> uv_len, uv -> uv_base); ! 113: (void) ll_printf (lp, "%s)\n", rw); ! 114: ! 115: (void) ll_sync (lp); ! 116: } ! 117: ! 118: /* */ ! 119: ! 120: static type_id (lp, type, rw, selector, len) ! 121: LLog *lp; ! 122: char *type, ! 123: *rw; ! 124: char *selector; ! 125: int len; ! 126: { ! 127: char buffer[BUFSIZ]; ! 128: ! 129: buffer[explode (buffer, (u_char *) selector, len)] = NULL; ! 130: ! 131: (void) ll_printf (lp, "%s%s/ %d/\"%s\"\n", rw, type, len, buffer); ! 132: } ! 133: ! 134: ! 135: static type_data (lp, type, rw, len, data) ! 136: LLog *lp; ! 137: char *type, ! 138: *rw, ! 139: *data; ! 140: int len; ! 141: { ! 142: char buffer[BUFSIZ]; ! 143: ! 144: (void) ll_printf (lp, "%s%s DATA/ %d", rw, type, len); ! 145: if (len < sizeof buffer / 2) { ! 146: buffer[explode (buffer, (u_char *) data, len)] = NULL; ! 147: (void) ll_printf (lp, " %s", buffer); ! 148: } ! 149: (void) ll_printf (lp, "\n"); ! 150: } ! 151: ! 152: /* */ ! 153: ! 154: void text2tpkt (t) ! 155: register struct tsapkt *t; ! 156: { ! 157: char buffer[80], /* Working input buffer */ ! 158: *bptr; /* Pointer to our buffer */ ! 159: int data; ! 160: ! 161: printf("Packet Length [%d]: ", data = t -> t_length); ! 162: (void) fflush(stdout); (void) fgets(buffer, sizeof buffer, stdin); ! 163: (void) sscanf(buffer, "%d", &data); ! 164: t -> t_length = data; ! 165: printf("Packet Version [%02x]: ", data = t -> t_vrsn); ! 166: (void) fflush(stdout); (void) fgets(buffer, sizeof buffer, stdin); ! 167: (void) sscanf(buffer, "%x", &data); ! 168: t -> t_vrsn = data; ! 169: printf("Packet Errno [%02x]: ", data = t -> t_errno); ! 170: (void) fflush(stdout); (void) fgets(buffer, sizeof buffer, stdin); ! 171: (void) sscanf(buffer, "%d", &data); ! 172: t -> t_errno = data; ! 173: printf("TPDU Code [%02x]: ", data = t -> t_code); ! 174: (void) fflush(stdout); bptr = fgets(buffer, sizeof buffer, stdin); ! 175: while (isspace(*bptr) && (*bptr != '\0')) ++bptr; ! 176: if (toupper(*bptr) == 'C') { ! 177: if (toupper(*(bptr + 1)) == 'R') { ! 178: data = 0xE0; ! 179: } else if (toupper(*(bptr + 1)) == 'C') { ! 180: data = 0xD0; ! 181: } else (void) sscanf(buffer, "%x", &data); ! 182: } else if (toupper(*bptr) == 'D') { ! 183: if (toupper(*(bptr + 1)) == 'R') { ! 184: data = 0x80; ! 185: } else if (toupper(*(bptr + 1)) == 'T') { ! 186: data = 0xF0; ! 187: } else (void) sscanf(buffer, "%x", &data); ! 188: } else (void) sscanf(buffer, "%x", &data); ! 189: t -> t_code = data; ! 190: switch (TPDU_CODE(t)) { ! 191: case TPDU_CR: ! 192: case TPDU_CC: ! 193: t -> t_li = TPDU_MINLEN(t, CR); ! 194: printf("TPDU Fixed Length (LI) [%02x]: ", data = t -> t_li); ! 195: (void) fflush(stdout); (void) fgets(buffer, sizeof buffer, stdin); ! 196: (void) sscanf(buffer, "%x", &data); ! 197: t -> t_li = data; ! 198: printf("Destination Reference [%04x]: ", ! 199: data = ntohs (t -> t_cr.cr_dstref)); ! 200: (void) fflush(stdout); (void) fgets(buffer, sizeof buffer, stdin); ! 201: (void) sscanf(buffer, "%x", &data); ! 202: t -> t_cr.cr_dstref = htons((u_short)data); ! 203: printf("Source Reference [%04x]: ", data = ntohs(t -> t_cr.cr_srcref)); ! 204: (void) fflush(stdout); (void) fgets(buffer, sizeof buffer, stdin); ! 205: (void) sscanf(buffer, "%x", &data); ! 206: t -> t_cr.cr_srcref = htons ((u_short)data); ! 207: printf("Class/Options [%02x]: ", data = t-> t_cr.cr_class); ! 208: (void) fflush(stdout); (void) fgets(buffer, sizeof buffer, stdin); ! 209: (void) sscanf(buffer, "%x", &data); ! 210: t -> t_cr.cr_class = data; ! 211: printf("TPDU size [%02x]: ", ! 212: data = t -> t_cr.cr_tpdusize); ! 213: (void) fflush(stdout); (void) fgets(buffer, sizeof buffer, stdin); ! 214: (void) sscanf(buffer, "%x", &data); ! 215: t -> t_cr.cr_tpdusize = data; ! 216: printf("Real Options [%02x]: ",data = ntohs(t -> t_cr.cr_options)); ! 217: (void) fflush(stdout); (void) fgets(buffer, sizeof buffer, stdin); ! 218: (void) sscanf(buffer, "%x", &data); ! 219: t -> t_cr.cr_options = htons((u_short)data); ! 220: printf("Alternate classes [%02x]: ", ! 221: data = t -> t_cr.cr_alternate); ! 222: (void) fflush(stdout); (void) fgets(buffer, sizeof buffer, stdin); ! 223: (void) sscanf(buffer, "%x", &data); ! 224: t -> t_cr.cr_alternate = data; ! 225: break; ! 226: case TPDU_DR: ! 227: t -> t_li = TPDU_MINLEN(t, DR); ! 228: printf("TPDU Fixed Length (LI) [%02x]: ", data = t -> t_li); ! 229: (void) fflush(stdout); (void) fgets(buffer, sizeof buffer, stdin); ! 230: (void) sscanf(buffer, "%x", &data); ! 231: t -> t_li = data; ! 232: printf("Destination Reference [%04x]: ", ! 233: data = ntohs(t -> t_dr.dr_dstref)); ! 234: (void) fflush(stdout); (void) fgets(buffer, sizeof buffer, stdin); ! 235: (void) sscanf(buffer, "%x", &data); ! 236: t -> t_dr.dr_dstref = htons((u_short)data); ! 237: printf("Source Reference [%04x]: ", data = ntohs(t -> t_dr.dr_srcref)); ! 238: (void) fflush(stdout); (void) fgets(buffer, sizeof buffer, stdin); ! 239: (void) sscanf(buffer, "%x", &data); ! 240: t -> t_dr.dr_srcref = htons((u_short)data); ! 241: printf("Disconnect Reason [%02x]: ", data = t-> t_dr.dr_reason); ! 242: (void) fflush(stdout); (void) fgets(buffer, sizeof buffer, stdin); ! 243: (void) sscanf(buffer, "%x", &data); ! 244: t -> t_dr.dr_reason = data; ! 245: break; ! 246: case TPDU_DT: ! 247: case TPDU_ED: ! 248: t -> t_li = TPDU_MINLEN(t, DT); ! 249: printf("TPDU Fixed Length (LI) [%02x]: ", data = t -> t_li); ! 250: (void) fflush(stdout); (void) fgets(buffer, sizeof buffer, stdin); ! 251: (void) sscanf(buffer, "%x", &data); ! 252: t -> t_li = data; ! 253: printf("EOT/Sequence [%04x]: ", data = t -> t_dt.dt_nr); ! 254: (void) fflush(stdout); (void) fgets(buffer, sizeof buffer, stdin); ! 255: (void) sscanf(buffer, "%x", &data); ! 256: t -> t_dt.dt_nr = data; ! 257: break; ! 258: case TPDU_ER: ! 259: t -> t_li = TPDU_MINLEN(t, ER); ! 260: printf("TPDU Fixed Length (LI) [%02x]: ", data = t -> t_li); ! 261: (void) fflush(stdout); (void) fgets(buffer, sizeof buffer, stdin); ! 262: (void) sscanf(buffer, "%x", &data); ! 263: t -> t_li = data; ! 264: printf("Destination Reference [%04x]: ", ! 265: data = ntohs(t -> t_er.er_dstref)); ! 266: (void) fflush(stdout); (void) fgets(buffer, sizeof buffer, stdin); ! 267: (void) sscanf(buffer, "%x", &data); ! 268: t -> t_er.er_dstref = htons((u_short)data); ! 269: printf("Reject Cause [%02x]: ", data = t-> t_er.er_reject); ! 270: (void) fflush(stdout); (void) fgets(buffer, sizeof buffer, stdin); ! 271: (void) sscanf(buffer, "%x", &data); ! 272: t -> t_er.er_reject = data; ! 273: break; ! 274: default: ! 275: t -> t_li = TPDU_MINLEN(t, CR); ! 276: printf("TPDU Fixed Length (LI) [%02x]: ", data = t -> t_li); ! 277: (void) fflush(stdout); (void) fgets(buffer, sizeof buffer, stdin); ! 278: (void) sscanf(buffer, "%x", &data); ! 279: t -> t_li = data; ! 280: printf("Octets 3-4 [%04x]: ", ! 281: data = ntohs(t -> t_cr.cr_dstref)); ! 282: (void) fflush(stdout); (void) fgets(buffer, sizeof buffer, stdin); ! 283: (void) sscanf(buffer, "%x", &data); ! 284: t -> t_cr.cr_dstref = htons((u_short)data); ! 285: printf("Octets 5-6 [%04x]: ", ! 286: data = ntohs(t -> t_cr.cr_srcref)); ! 287: (void) fflush(stdout); (void) fgets(buffer, sizeof buffer, stdin); ! 288: (void) sscanf(buffer, "%x", &data); ! 289: t -> t_cr.cr_srcref = htons((u_short)data); ! 290: printf("Octet 7 [%02x]: ", data = t-> t_cr.cr_class); ! 291: (void) fflush(stdout); (void) fgets(buffer, sizeof buffer, stdin); ! 292: (void) sscanf(buffer, "%x", &data); ! 293: t -> t_cr.cr_class = data; ! 294: break; ! 295: } ! 296: #ifdef notdef /* Dwight can fix this... */ ! 297: printf("Calling TSAP ID [%d]: ", ! 298: ntohs (t -> t_calling)); ! 299: (void) fflush(stdout); (void) fgets(buffer, sizeof buffer, stdin); ! 300: (void) sscanf(buffer, "%d", &data); ! 301: t -> t_calling = htons((u_short)data); ! 302: printf("Called TSAP ID [%d]: ", ! 303: ntohs (t -> t_called)); ! 304: (void) fflush(stdout); (void) fgets(buffer, sizeof buffer, stdin); ! 305: (void) sscanf(buffer, "%d", &data); ! 306: t -> t_called = htons((u_short)data); ! 307: #endif ! 308: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.