DataMuseum.dk

Presents historical artifacts from the history of:

DKUUG/EUUG Conference tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about DKUUG/EUUG Conference tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download
Index: T t

⟦f48318102⟧ TextFile

    Length: 11751 (0x2de7)
    Types: TextFile
    Names: »text2tpkt.c«

Derivation

└─⟦2d1937cfd⟧ Bits:30007241 EUUGD22: P.P 5.0
    └─⟦dc59850a2⟧ »EurOpenD22/pp5.0/pp-5.tar.Z« 
        └─⟦e5a54fb17⟧ 
            └─⟦this⟧ »pp-5.0/Chans/x40084/text2tpkt.c« 

TextFile

/* text2tpkt.c - test utilities for use with TPDU packets */

# ifndef lint
static char Rcsid[] = "@(#)$Header: /cs/research/pp/hubris/pp-beta/Chans/x40084/RCS/text2tpkt.c,v 5.0 90/09/20 15:56:13 pp Exp Locker: pp $";
# endif

/*
 * $Header: /cs/research/pp/hubris/pp-beta/Chans/x40084/RCS/text2tpkt.c,v 5.0 90/09/20 15:56:13 pp Exp Locker: pp $
 *
 * $Log:	text2tpkt.c,v $
 * Revision 5.0  90/09/20  15:56:13  pp
 * rcsforce : 5.0 public release
 * 
 */



/*
 *				  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 <isode/tpkt.h>
#include <isode/logger.h>

/* \f

 */

char *fgets (), *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];
    char *cp;
    int i;

    (void) ll_printf (lp, "%s%s DATA/ %d ", rw, type, len);
    for (cp = data; len > 0; ) {
	i = (sizeof buffer - 1) / 2;
	if (len < i)
	    i = len;
	buffer[explode (buffer, (u_char *) cp, i)] = NULL;
	(void) ll_printf (lp, "%s", buffer);
	cp += i;
	len -= i;
    }
    (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) fgets(buffer, sizeof buffer, stdin);
    (void) sscanf(buffer, "%d", &data);
    t -> t_length = data;
    printf("Packet Version [%02x]: ", data = t -> t_vrsn);
    (void) fflush(stdout); (void) fgets(buffer, sizeof buffer, stdin);
    (void) sscanf(buffer, "%x", &data);
    t -> t_vrsn = data;
    printf("Packet Errno [%02x]: ", data = t -> t_errno);
    (void) fflush(stdout); (void) fgets(buffer, sizeof buffer, stdin);
    (void) sscanf(buffer, "%d", &data);
    t -> t_errno = data;
    printf("TPDU Code [%02x]: ", data = t -> t_code);
    (void) fflush(stdout); bptr = fgets(buffer, sizeof buffer, stdin);
    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) fgets(buffer, sizeof buffer, stdin);
            (void) sscanf(buffer, "%x", &data);
            t -> t_li = data;
            printf("Destination Reference [%04x]: ",
                data = ntohs (t -> t_cr.cr_dstref));
            (void) fflush(stdout); (void) fgets(buffer, sizeof buffer, stdin);
            (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) fgets(buffer, sizeof buffer, stdin);
            (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) fgets(buffer, sizeof buffer, stdin);
            (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) fgets(buffer, sizeof buffer, stdin);
            (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) fgets(buffer, sizeof buffer, stdin);
            (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) fgets(buffer, sizeof buffer, stdin);
            (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) fgets(buffer, sizeof buffer, stdin);
            (void) sscanf(buffer, "%x", &data);
            t -> t_li = data;
            printf("Destination Reference [%04x]: ",
                data = ntohs(t -> t_dr.dr_dstref));
            (void) fflush(stdout); (void) fgets(buffer, sizeof buffer, stdin);
            (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) fgets(buffer, sizeof buffer, stdin);
            (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) fgets(buffer, sizeof buffer, stdin);
            (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) fgets(buffer, sizeof buffer, stdin);
            (void) sscanf(buffer, "%x", &data);
            t -> t_li = data;
            printf("EOT/Sequence [%04x]: ", data = t -> t_dt.dt_nr);
            (void) fflush(stdout); (void) fgets(buffer, sizeof buffer, stdin);
            (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) fgets(buffer, sizeof buffer, stdin);
            (void) sscanf(buffer, "%x", &data);
            t -> t_li = data;
            printf("Destination Reference [%04x]: ",
                data = ntohs(t -> t_er.er_dstref));
            (void) fflush(stdout); (void) fgets(buffer, sizeof buffer, stdin);
            (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) fgets(buffer, sizeof buffer, stdin);
            (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) fgets(buffer, sizeof buffer, stdin);
            (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) fgets(buffer, sizeof buffer, stdin);
            (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) fgets(buffer, sizeof buffer, stdin);
            (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) fgets(buffer, sizeof buffer, stdin);
            (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) fgets(buffer, sizeof buffer, stdin);
    (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) fgets(buffer, sizeof buffer, stdin);
    (void) sscanf(buffer, "%d", &data);
    t -> t_called = htons((u_short)data);
#endif
}