|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T t
Length: 10942 (0x2abe) Types: TextFile Names: »text2tpkt.c«
└─⟦3d0c2be1b⟧ Bits:30001254 ISODE-5.0 Tape └─⟦eba4602b1⟧ »./isode-5.0.tar.Z« └─⟦d3ac74d73⟧ └─⟦this⟧ »isode-5.0/tsap/text2tpkt.c«
/* text2tpkt.c - test utilities for use with TPDU packets */ #ifndef lint static char *rcsid = "$Header: /f/osi/tsap/RCS/text2tpkt.c,v 6.0 89/03/18 23:45:14 mrose Rel $"; #endif /* * $Header: /f/osi/tsap/RCS/text2tpkt.c,v 6.0 89/03/18 23:45:14 mrose Rel $ * * * $Log: text2tpkt.c,v $ * Revision 6.0 89/03/18 23:45:14 mrose * Release 5.0 * */ /* * NOTICE * * Acquisition, use, and distribution of this module and related * materials are subject to the restrictions of a license agreement. * Consult the Preface in the User's Manual for the full terms of * this agreement. * */ /* LINTLIBRARY */ #include <stdio.h> #include <ctype.h> #include "tpkt.h" #include "logger.h" /* \f */ char *gets (), *calloc (); /* \f */ #define TPKT_TYPE(e) (void) ll_printf (lp, "%sCODE/ %s\n", rw, e) void tpkt2text (lp, t, isread) register LLog *lp; register struct tsapkt *t; int isread; { char *rw = isread ? "<--- " : "---> "; register struct udvec *uv; LLOG (lp, LLOG_ALL, ("dump of TPKT 0x%x, errno=0x%x version=0x%x length=%d", t, t -> t_errno, t -> t_vrsn, t -> t_length)); (void) ll_printf (lp, "%s(\n", rw); (void) ll_printf (lp, "%sLI/ %d\n", rw, t -> t_li); if (t -> t_vdata) type_data (lp, "VARIABLE", rw, t -> t_vlen, t -> t_vdata); switch (TPDU_CODE (t)) { case TPDU_CR: case TPDU_CC: TPKT_TYPE (TPDU_CODE (t) == TPDU_CR ? "CONNECT REQUEST" : "CONNECT CONFIRM"); (void) ll_printf (lp, "%sDSTREF/ 0x%x\n", rw, ntohs (t -> t_cr.cr_dstref)); (void) ll_printf (lp, "%sSRCREF/ 0x%x\n", rw, ntohs (t -> t_cr.cr_srcref)); (void) ll_printf (lp, "%sCLASS/ 0x%x\n", rw, t -> t_cr.cr_class); if (t -> t_calledlen > 0) type_id (lp, "CALLED", rw, t -> t_called, t -> t_calledlen); if (t -> t_callinglen > 0) type_id (lp, "CALLING", rw, t -> t_calling, t -> t_callinglen); if (t -> t_tpdusize) (void) ll_printf (lp, "%sTPDUSIZE/ %d\n", rw, 1 << t -> t_tpdusize); (void) ll_printf (lp, "%sOPTIONS/ 0x%x\n", rw, t -> t_options); if (t -> t_alternate) (void) ll_printf (lp, "%sALTERNATES/ 0x%x\n", rw, t -> t_alternate); break; case TPDU_DR: TPKT_TYPE ("DISCONNECT REQUEST"); (void) ll_printf (lp, "%sDSTREF/ 0x%x\n", rw, ntohs (t -> t_dr.dr_dstref)); (void) ll_printf (lp, "%sSRCREF/ 0x%x\n", rw, ntohs (t -> t_dr.dr_srcref)); (void) ll_printf (lp, "%sREASON/ 0x%x: %s\n", rw, t -> t_dr.dr_reason, TErrString ((int) t -> t_dr.dr_reason)); break; case TPDU_DT: case TPDU_ED: TPKT_TYPE (TPDU_CODE (t) == TPDU_DT ? "DATA TRANSFER" : "EXPEDITED DATA TRANSFER"); (void) ll_printf (lp, "%sSEQUENCE/ %s0x%x\n", rw, t -> t_dt.dt_nr & DT_EOT ? "<EOT>+" : "", t -> t_dt.dt_nr & ~DT_EOT); break; case TPDU_ER: TPKT_TYPE ("ERROR"); (void) ll_printf (lp, "%sDSTREF/ 0x%x\n", rw, ntohs (t -> t_er.er_dstref)); (void) ll_printf (lp, "%sREJECT/ 0x%x\n", rw, t -> t_er.er_reject); break; default: (void) ll_printf (lp, "%sCODE/ 0x%x\n", rw, TPDU_CODE (t)); break; } if (t -> t_qbuf && t -> t_qbuf -> qb_data) type_data (lp, "QBUF", rw, t -> t_qbuf -> qb_len, t -> t_qbuf -> qb_data); for (uv = t -> t_udvec; uv -> uv_base; uv++) type_data (lp, "UVEC", rw, uv -> uv_len, uv -> uv_base); (void) ll_printf (lp, "%s)\n", rw); (void) ll_sync (lp); } /* \f */ static type_id (lp, type, rw, selector, len) LLog *lp; char *type, *rw; char *selector; int len; { char buffer[BUFSIZ]; buffer[explode (buffer, (u_char *) selector, len)] = NULL; (void) ll_printf (lp, "%s%s/ %d/\"%s\"\n", rw, type, len, buffer); } static type_data (lp, type, rw, len, data) LLog *lp; char *type, *rw, *data; int len; { char buffer[BUFSIZ]; (void) ll_printf (lp, "%s%s DATA/ %d", rw, type, len); if (len < sizeof buffer / 2) { buffer[explode (buffer, (u_char *) data, len)] = NULL; (void) ll_printf (lp, " %s", buffer); } (void) ll_printf (lp, "\n"); } /* \f */ void text2tpkt (t) register struct tsapkt *t; { char buffer[80], /* Working input buffer */ *bptr; /* Pointer to our buffer */ int data; printf("Packet Length [%d]: ", data = t -> t_length); (void) fflush(stdout); (void) gets(buffer); (void) sscanf(buffer, "%d", &data); t -> t_length = data; printf("Packet Version [%02x]: ", data = t -> t_vrsn); (void) fflush(stdout); (void) gets(buffer); (void) sscanf(buffer, "%x", &data); t -> t_vrsn = data; printf("Packet Errno [%02x]: ", data = t -> t_errno); (void) fflush(stdout); (void) gets(buffer); (void) sscanf(buffer, "%d", &data); t -> t_errno = data; printf("TPDU Code [%02x]: ", data = t -> t_code); (void) fflush(stdout); bptr = gets(buffer); while (isspace(*bptr) && (*bptr != '\0')) ++bptr; if (toupper(*bptr) == 'C') { if (toupper(*(bptr + 1)) == 'R') { data = 0xE0; } else if (toupper(*(bptr + 1)) == 'C') { data = 0xD0; } else (void) sscanf(buffer, "%x", &data); } else if (toupper(*bptr) == 'D') { if (toupper(*(bptr + 1)) == 'R') { data = 0x80; } else if (toupper(*(bptr + 1)) == 'T') { data = 0xF0; } else (void) sscanf(buffer, "%x", &data); } else (void) sscanf(buffer, "%x", &data); t -> t_code = data; switch (TPDU_CODE(t)) { case TPDU_CR: case TPDU_CC: t -> t_li = TPDU_MINLEN(t, CR); printf("TPDU Fixed Length (LI) [%02x]: ", data = t -> t_li); (void) fflush(stdout); (void) gets(buffer); (void) sscanf(buffer, "%x", &data); t -> t_li = data; printf("Destination Reference [%04x]: ", data = ntohs (t -> t_cr.cr_dstref)); (void) fflush(stdout); (void) gets(buffer); (void) sscanf(buffer, "%x", &data); t -> t_cr.cr_dstref = htons((u_short)data); printf("Source Reference [%04x]: ", data = ntohs(t -> t_cr.cr_srcref)); (void) fflush(stdout); (void) gets(buffer); (void) sscanf(buffer, "%x", &data); t -> t_cr.cr_srcref = htons ((u_short)data); printf("Class/Options [%02x]: ", data = t-> t_cr.cr_class); (void) fflush(stdout); (void) gets(buffer); (void) sscanf(buffer, "%x", &data); t -> t_cr.cr_class = data; printf("TPDU size [%02x]: ", data = t -> t_cr.cr_tpdusize); (void) fflush(stdout); (void) gets(buffer); (void) sscanf(buffer, "%x", &data); t -> t_cr.cr_tpdusize = data; printf("Real Options [%02x]: ",data = ntohs(t -> t_cr.cr_options)); (void) fflush(stdout); (void) gets(buffer); (void) sscanf(buffer, "%x", &data); t -> t_cr.cr_options = htons((u_short)data); printf("Alternate classes [%02x]: ", data = t -> t_cr.cr_alternate); (void) fflush(stdout); (void) gets(buffer); (void) sscanf(buffer, "%x", &data); t -> t_cr.cr_alternate = data; break; case TPDU_DR: t -> t_li = TPDU_MINLEN(t, DR); printf("TPDU Fixed Length (LI) [%02x]: ", data = t -> t_li); (void) fflush(stdout); (void) gets(buffer); (void) sscanf(buffer, "%x", &data); t -> t_li = data; printf("Destination Reference [%04x]: ", data = ntohs(t -> t_dr.dr_dstref)); (void) fflush(stdout); (void) gets(buffer); (void) sscanf(buffer, "%x", &data); t -> t_dr.dr_dstref = htons((u_short)data); printf("Source Reference [%04x]: ", data = ntohs(t -> t_dr.dr_srcref)); (void) fflush(stdout); (void) gets(buffer); (void) sscanf(buffer, "%x", &data); t -> t_dr.dr_srcref = htons((u_short)data); printf("Disconnect Reason [%02x]: ", data = t-> t_dr.dr_reason); (void) fflush(stdout); (void) gets(buffer); (void) sscanf(buffer, "%x", &data); t -> t_dr.dr_reason = data; break; case TPDU_DT: case TPDU_ED: t -> t_li = TPDU_MINLEN(t, DT); printf("TPDU Fixed Length (LI) [%02x]: ", data = t -> t_li); (void) fflush(stdout); (void) gets(buffer); (void) sscanf(buffer, "%x", &data); t -> t_li = data; printf("EOT/Sequence [%04x]: ", data = t -> t_dt.dt_nr); (void) fflush(stdout); (void) gets(buffer); (void) sscanf(buffer, "%x", &data); t -> t_dt.dt_nr = data; break; case TPDU_ER: t -> t_li = TPDU_MINLEN(t, ER); printf("TPDU Fixed Length (LI) [%02x]: ", data = t -> t_li); (void) fflush(stdout); (void) gets(buffer); (void) sscanf(buffer, "%x", &data); t -> t_li = data; printf("Destination Reference [%04x]: ", data = ntohs(t -> t_er.er_dstref)); (void) fflush(stdout); (void) gets(buffer); (void) sscanf(buffer, "%x", &data); t -> t_er.er_dstref = htons((u_short)data); printf("Reject Cause [%02x]: ", data = t-> t_er.er_reject); (void) fflush(stdout); (void) gets(buffer); (void) sscanf(buffer, "%x", &data); t -> t_er.er_reject = data; break; default: t -> t_li = TPDU_MINLEN(t, CR); printf("TPDU Fixed Length (LI) [%02x]: ", data = t -> t_li); (void) fflush(stdout); (void) gets(buffer); (void) sscanf(buffer, "%x", &data); t -> t_li = data; printf("Octets 3-4 [%04x]: ", data = ntohs(t -> t_cr.cr_dstref)); (void) fflush(stdout); (void) gets(buffer); (void) sscanf(buffer, "%x", &data); t -> t_cr.cr_dstref = htons((u_short)data); printf("Octets 5-6 [%04x]: ", data = ntohs(t -> t_cr.cr_srcref)); (void) fflush(stdout); (void) gets(buffer); (void) sscanf(buffer, "%x", &data); t -> t_cr.cr_srcref = htons((u_short)data); printf("Octet 7 [%02x]: ", data = t-> t_cr.cr_class); (void) fflush(stdout); (void) gets(buffer); (void) sscanf(buffer, "%x", &data); t -> t_cr.cr_class = data; break; } #ifdef notdef /* Dwight can fix this... */ printf("Calling TSAP ID [%d]: ", ntohs (t -> t_calling)); (void) fflush(stdout); (void) gets(buffer); (void) sscanf(buffer, "%d", &data); t -> t_calling = htons((u_short)data); printf("Called TSAP ID [%d]: ", ntohs (t -> t_called)); (void) fflush(stdout); (void) gets(buffer); (void) sscanf(buffer, "%d", &data); t -> t_called = htons((u_short)data); #endif }