|
|
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.