Annotation of 43BSDReno/contrib/isode-beta/tsap/str2tpkt.c, revision 1.1.1.1

1.1       root        1: /* str2tpkt.c - read/write a TPDU thru a string */
                      2: 
                      3: #ifndef        lint
                      4: static char *rcsid = "$Header: /f/osi/tsap/RCS/str2tpkt.c,v 7.1 89/12/07 01:07:28 mrose Exp $";
                      5: #endif
                      6: 
                      7: /* 
                      8:  * $Header: /f/osi/tsap/RCS/str2tpkt.c,v 7.1 89/12/07 01:07:28 mrose Exp $
                      9:  *
                     10:  *
                     11:  * $Log:       str2tpkt.c,v $
                     12:  * Revision 7.1  89/12/07  01:07:28  mrose
                     13:  * queued writes
                     14:  * 
                     15:  * Revision 7.0  89/11/23  22:30:30  mrose
                     16:  * Release 6.0
                     17:  * 
                     18:  */
                     19: 
                     20: /*
                     21:  *                               NOTICE
                     22:  *
                     23:  *    Acquisition, use, and distribution of this module and related
                     24:  *    materials are subject to the restrictions of a license agreement.
                     25:  *    Consult the Preface in the User's Manual for the full terms of
                     26:  *    this agreement.
                     27:  *
                     28:  */
                     29: 
                     30: 
                     31: /* LINTLIBRARY */
                     32: 
                     33: #include <stdio.h>
                     34: #include "tpkt.h"
                     35: #include "tailor.h"
                     36: 
                     37: 
                     38: int    readfnx (), getfnx (), writefnx (), putfnx ();
                     39: 
                     40: /*  */
                     41: 
                     42: char   *tpkt2str (t)
                     43: struct tsapkt *t;
                     44: {
                     45:     int            cc;
                     46:     char    packet[BUFSIZ];
                     47:     static char buffer[2 * sizeof packet + 1];
                     48: 
                     49:     (void) writefnx ((struct tsapblk *) NOTOK, packet, 0);
                     50:     if (tpkt2fd ((struct tsapblk *) 0, t, putfnx) == NOTOK)
                     51:        return NULLCP;
                     52: 
                     53:     cc = writefnx ((struct tsapblk *) NOTOK, NULLCP, 0);
                     54:     if (t -> t_qbuf) {
                     55:        bcopy (t -> t_qbuf -> qb_data, packet + cc, t -> t_qbuf -> qb_len);
                     56:        cc += t -> t_qbuf -> qb_len;
                     57:     }
                     58:     buffer[explode (buffer, (u_char *) packet, cc)] = NULL;
                     59: 
                     60:     DLOG (tsap_log, LLOG_PDUS,
                     61:          ("write %d bytes, \"%s\"", strlen (buffer), buffer));
                     62: 
                     63:     return buffer;
                     64: }
                     65: 
                     66: /*  */
                     67: 
                     68: struct tsapkt *str2tpkt (buffer)
                     69: char  *buffer;
                     70: {
                     71:     char    packet[BUFSIZ];
                     72:     register struct tsapkt *t;
                     73: 
                     74:     DLOG (tsap_log, LLOG_PDUS,
                     75:          ("read %d bytes, \"%s\"", strlen (buffer), buffer));
                     76: 
                     77:     (void) getfnx (NOTOK, NULLPKT, packet,
                     78:                implode ((u_char *) packet, buffer, strlen (buffer)));
                     79:     t = fd2tpkt (0, getfnx, readfnx);
                     80: 
                     81:     return t;
                     82: }
                     83: 
                     84: /*  */
                     85: 
                     86: static int  getfnx (fd, t, buffer, n)
                     87: int    fd;
                     88: register struct tsapkt *t;
                     89: char   *buffer;
                     90: int    n;
                     91: {
                     92:     static int  cc;
                     93: 
                     94:     if (fd == NOTOK) {
                     95:        (void) readfnx (NOTOK, buffer, cc = n);
                     96:        return OK;
                     97:     }
                     98: 
                     99:     t -> t_length = cc + sizeof t -> t_pkthdr;
                    100:     t -> t_vrsn = TPKT_VRSN;
                    101: 
                    102:     if (readfnx (fd, (char *) &t -> t_li, sizeof t -> t_li)
                    103:            != sizeof t -> t_li)
                    104:         return DR_LENGTH;
                    105:        
                    106:     if (readfnx (fd, (char *) &t -> t_code, sizeof t -> t_code)
                    107:            != sizeof t -> t_code)
                    108:         return DR_LENGTH;
                    109:        
                    110:     return OK;
                    111: }
                    112: 
                    113: 
                    114: static int  readfnx (fd, buffer, n)
                    115: int    fd,
                    116:        n;
                    117: char   *buffer;
                    118: {
                    119:     register int    i;
                    120:     static int  cc;
                    121:     static char *bp;
                    122: 
                    123:     if (fd == NOTOK) {
                    124:        bp = buffer, cc = n;
                    125: 
                    126:        return OK;
                    127:     }
                    128: 
                    129:     if ((i = min (cc, n)) > 0) {
                    130:        bcopy (bp, buffer, n);
                    131:        bp += i, cc -= i;
                    132:     }
                    133: 
                    134:     return i;
                    135: }
                    136: 
                    137: /*  */
                    138: 
                    139: static int  putfnx (tb, t, cp, n)
                    140: struct tsapblk *tb;
                    141: register struct tsapkt *t;
                    142: char   *cp;
                    143: int    n;
                    144: {
                    145:     register int    cc;
                    146:     register struct udvec  *uv;
                    147: 
                    148:     cc = sizeof t -> t_li;
                    149:     if (writefnx (tb, (char *) &t -> t_li, cc) != cc)
                    150:        return NOTOK;
                    151: 
                    152:     if (writefnx (tb, (char *) &t -> t_code, sizeof t -> t_code)
                    153:            != sizeof t -> t_code)
                    154:        return NOTOK;
                    155:     cc += sizeof t -> t_code;
                    156: 
                    157:     if (writefnx (tb, cp, n) != n)
                    158:        return NOTOK;
                    159:     cc += n;
                    160: 
                    161:     if (t -> t_vdata
                    162:            && writefnx (tb, t -> t_vdata, t -> t_vlen) != t -> t_vlen)
                    163:        return NOTOK;
                    164:     cc += t -> t_vlen;
                    165: 
                    166:     for (uv = t -> t_udvec; uv -> uv_base; uv++) {
                    167:        if (writefnx (tb, uv -> uv_base, uv -> uv_len) != uv -> uv_len)
                    168:            return NOTOK;
                    169:        cc += uv -> uv_len;
                    170:     }
                    171: 
                    172:     return cc;
                    173: }
                    174: 
                    175: /*  */
                    176: 
                    177: static int  writefnx (tb, buffer, n)
                    178: struct tsapblk *tb;
                    179: int    n;
                    180: char   *buffer;
                    181: {
                    182:     static int  cc;
                    183:     static char *bp;
                    184: 
                    185:     if (tb) {
                    186:        if (buffer == NULLCP)
                    187:            return cc;
                    188:        bp = buffer, cc = 0;
                    189: 
                    190:        return OK;
                    191:     }
                    192: 
                    193:     bcopy (buffer, bp, n);
                    194:     bp += n, cc += n;
                    195: 
                    196:     return n;
                    197: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.