Annotation of 43BSDReno/contrib/isode-beta/ssap/text2spkt.c, revision 1.1.1.1

1.1       root        1: /* text2spkt.c - read/write a SPDU thru a debug filter */
                      2: 
                      3: #ifndef        lint
                      4: static char *rcsid = "$Header: /f/osi/ssap/RCS/text2spkt.c,v 7.0 89/11/23 22:25:54 mrose Rel $";
                      5: #endif
                      6: 
                      7: /* 
                      8:  * $Header: /f/osi/ssap/RCS/text2spkt.c,v 7.0 89/11/23 22:25:54 mrose Rel $
                      9:  *
                     10:  *
                     11:  * $Log:       text2spkt.c,v $
                     12:  * Revision 7.0  89/11/23  22:25:54  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 "spkt.h"
                     32: #include "logger.h"
                     33: 
                     34: 
                     35: #define        sprintc(v,b)    sprintb ((int) (v), (b))
                     36: 
                     37: /*  */
                     38: 
                     39: #define        SPDU_TYPE(e)    (void) ll_printf (lp, "%sCODE/ %s\n", rw, e)
                     40: 
                     41: #define        DMASK   "\020\01RELEASE\02USER\03PROTOCOL\04UNKNOWN"
                     42: #define        EMASK   "\020\01BEGIN\02END"
                     43: #define        OMASK   "\020\01EXTD"
                     44: #define        RMASK \
                     45:     "\020\01HALFDUPLEX\02DUPLEX\03EXPEDITED\04MINORSYNC\05MAJORSYNC\06RESYNC\07ACTIVITY\010NEGOTIATED\011CAPABILITY\012EXCEPTIONS\013TYPEDATA"
                     46: #define        SMASK   "\020\01NOEND"
                     47: #define        TMASK   "\020\01DATA\03SYNC\05ACTIVITY\07RELEASE"
                     48: #define        YMASK   "\020\01NOEXPLICIT"
                     49: 
                     50: 
                     51: 
                     52: void   spkt2text (lp, s, read)
                     53: register LLog *lp;
                     54: register struct ssapkt *s;
                     55: int    read;
                     56: {
                     57:     char   *rw = read ? "<--- " : "---> ";
                     58: 
                     59:     LLOG (lp, LLOG_ALL,
                     60:          ("dump of SPDU 0x%x, errno=0x%x mask=0x%x%s",
                     61:           s, s -> s_errno, s -> s_mask,
                     62:           s -> s_mask & SMASK_SPDU_EXPD ? " (expedited)" : ""));
                     63:     (void) ll_printf (lp, "%s(\n", rw);
                     64: 
                     65:     (void) ll_printf (lp, "%sLI/ %d\n", rw, s -> s_li);
                     66: 
                     67:     switch (s -> s_code) {
                     68:        case SPDU_CN: 
                     69:        case SPDU_AC: 
                     70:            SPDU_TYPE (s -> s_code == SPDU_CN ? "CONNECT" : "ACCEPT");
                     71:            if (s -> s_mask & SMASK_CN_REF)
                     72:                type_ref (lp, rw, &s -> s_cn_reference);
                     73:            if (s -> s_mask & SMASK_CN_OPT)
                     74:                type_bits (lp, rw, "OPTIONS", s -> s_options, CR_OPT_MASK,
                     75:                        OMASK);
                     76:            if (s -> s_mask & SMASK_CN_TSDU)
                     77:                type_tsdu (lp, rw, s -> s_tsdu_init, s -> s_tsdu_resp);
                     78:            if (s -> s_mask & SMASK_CN_VRSN)
                     79:                type_vrsn (lp, rw, s -> s_cn_version);
                     80:            if (s -> s_mask & SMASK_CN_ISN)
                     81:                type_ssn (lp, rw, "ISN", s -> s_isn);
                     82:            if (s -> s_mask & SMASK_CN_SET)
                     83:                type_settings (lp, rw, s -> s_settings);
                     84:            if (s -> s_code == SPDU_AC && (s -> s_mask & SMASK_AC_TOKEN))
                     85:                type_bits (lp, rw, "TOKENS", s -> s_ac_token, -1, TMASK);
                     86:            if (s -> s_mask & SMASK_CN_REQ)
                     87:                type_bits (lp, rw, "REQUIREMENTS", s -> s_cn_require,
                     88:                        -1, RMASK);
                     89:            if (s -> s_mask & SMASK_CN_CALLING)
                     90:                type_id (lp, "CALLING", rw, s -> s_calling, s -> s_callinglen);
                     91:            if (s -> s_mask & SMASK_CN_CALLED)
                     92:                type_id (lp, "CALLED", rw, s -> s_called, s -> s_calledlen);
                     93:            break;
                     94: 
                     95:        case SPDU_RF: 
                     96:            SPDU_TYPE ("REFUSE");
                     97:            if (s -> s_mask & SMASK_RF_REF)
                     98:                type_ref (lp, rw, &s -> s_rf_reference);
                     99:            if (s -> s_mask & SMASK_RF_DISC)
                    100:                type_bits (lp, rw, "DISCONNECT", s -> s_rf_disconnect,
                    101:                        RF_DISC_MASK, DMASK);
                    102:            if (s -> s_mask & SMASK_RF_REQ)
                    103:                type_bits (lp, rw, "REQUIREMENTS", s -> s_rf_require,
                    104:                        -1, RMASK);
                    105:            if (s -> s_mask & SMASK_RF_VRSN)
                    106:                type_vrsn (lp, rw, s -> s_rf_version);
                    107:            if (s -> s_rlen > 0) {
                    108:                type_reason (lp, rw, *s -> s_rdata & 0xff);
                    109:                if (s -> s_rlen > 1)
                    110:                    type_data (lp, "REASON", rw, s -> s_rlen - 1,
                    111:                            s -> s_rdata + 1);
                    112:            }
                    113:            break;
                    114: 
                    115:        case SPDU_FN: 
                    116:            SPDU_TYPE ("FINISH");
                    117:            if (s -> s_mask & SMASK_FN_DISC)
                    118:                type_bits (lp, rw, "DISCONNECT", s -> s_fn_disconnect,
                    119:                        FN_DISC_MASK, DMASK);
                    120:            break;
                    121: 
                    122:        case SPDU_DN: 
                    123:            SPDU_TYPE ("DISCONNECT");
                    124:            break;
                    125: 
                    126:        case SPDU_NF: 
                    127:            SPDU_TYPE ("NOT FINISHED");
                    128:            break;
                    129: 
                    130:        case SPDU_AB: 
                    131: #ifdef notdef
                    132:        case SPDU_AI:           /* aka SPDU_AB */
                    133: #endif
                    134:            if (s -> s_mask & SMASK_SPDU_AB) {
                    135:                SPDU_TYPE ("ABORT");
                    136:                if (s -> s_mask & SMASK_AB_DISC)
                    137:                    type_bits (lp, rw, "DISCONNECT", s -> s_ab_disconnect,
                    138:                            AB_DISC_MASK, DMASK);
                    139:                if (s -> s_mask & SMASK_AB_REFL)
                    140:                    type_data (lp, "REFLECT", rw, sizeof s -> s_reflect,
                    141:                            (char *) s -> s_reflect);
                    142:                break;
                    143:            }
                    144:            SPDU_TYPE ("ACTIVITY INTERRUPT");
                    145:            if (s -> s_mask & SMASK_AI_REASON)
                    146:                type_error (lp, rw, s -> s_ai_reason);
                    147:            break;
                    148: 
                    149:        case SPDU_AA: 
                    150: #ifdef notdef
                    151:        case SPDU_AIA:          /* aka SPDU_AA */
                    152: #endif
                    153:            if (s -> s_mask & SMASK_SPDU_AA)
                    154:                SPDU_TYPE ("ABORT ACCEPT");
                    155:            else
                    156:                SPDU_TYPE ("ACTIVITY INTERRUPT ACK");
                    157:            break;
                    158: 
                    159:        case SPDU_GT: 
                    160: #ifdef notdef
                    161:        case SPDU_DT:           /* aka SPDU_GT */
                    162: #endif
                    163:            if (s -> s_mask & SMASK_SPDU_GT) {
                    164:                SPDU_TYPE ("GIVE TOKENS");
                    165:                if (s -> s_mask & SMASK_GT_TOKEN)
                    166:                    type_bits (lp, rw, "TOKENS", s -> s_gt_token, -1, TMASK);
                    167:            }
                    168:            else
                    169:                SPDU_TYPE ("DATA TRANSFER");
                    170:            break;
                    171: 
                    172:        case SPDU_EX: 
                    173:            SPDU_TYPE ("EXPEDITED");
                    174:            break;
                    175: 
                    176:        case SPDU_TD: 
                    177:            SPDU_TYPE ("TYPED DATA");
                    178:            break;
                    179: 
                    180:        case SPDU_CD: 
                    181:            SPDU_TYPE ("CAPABILITY DATA");
                    182:            break;
                    183: 
                    184:        case SPDU_CDA: 
                    185:            SPDU_TYPE ("CAPABILITY DATA ACK");
                    186:            break;
                    187: 
                    188:        case SPDU_PT: 
                    189:            SPDU_TYPE ("PLEASE TOKENS");
                    190:            if (s -> s_mask & SMASK_PT_TOKEN)
                    191:                type_bits (lp, rw, "TOKENS", s -> s_pt_token, -1, TMASK);
                    192:            break;
                    193: 
                    194:        case SPDU_GTC: 
                    195:            SPDU_TYPE ("GIVE TOKENS CONFIRM");
                    196:            break;
                    197: 
                    198:        case SPDU_GTA: 
                    199:            SPDU_TYPE ("GIVE TOKENS ACK");
                    200:            break;
                    201: 
                    202:        case SPDU_MIP: 
                    203:            SPDU_TYPE ("MINOR SYNCHRONIZATION POINT");
                    204:            if (s -> s_mask & SMASK_MIP_SYNC)
                    205:                type_bits (lp, rw, "SYNC", s -> s_mip_sync, MIP_SYNC_MASK,
                    206:                        YMASK);
                    207:            if (s -> s_mask & SMASK_MIP_SERIAL)
                    208:                type_ssn (lp, rw, "SSN", s -> s_mip_serial);
                    209:            break;
                    210: 
                    211:        case SPDU_MIA: 
                    212:            SPDU_TYPE ("MINOR SYNC ACK");
                    213:            if (s -> s_mask & SMASK_MIA_SERIAL)
                    214:                type_ssn (lp, rw, "SSN", s -> s_mia_serial);
                    215:            break;
                    216: 
                    217:        case SPDU_MAP: 
                    218: #ifdef notdef
                    219:        case SPDU_AE:           /* aka SPDU_MAP */
                    220: #endif
                    221:            if ((s -> s_mask & SMASK_MAP_SYNC)
                    222:                    && (s -> s_map_sync & MAP_SYNC_NOEND)) {
                    223:                SPDU_TYPE ("MAJOR SYNCHRONIZATION POINT");
                    224:                type_bits (lp, rw, "SYNC", s -> s_map_sync, MAP_SYNC_MASK,
                    225:                        SMASK);
                    226:            }
                    227:            else
                    228:                SPDU_TYPE ("ACTIVITY END");
                    229:            if (s -> s_mask & SMASK_MAP_SERIAL)
                    230:                type_ssn (lp, rw, "SSN", s -> s_map_serial);
                    231:            break;
                    232: 
                    233:        case SPDU_MAA: 
                    234: #ifdef notdef
                    235:        case SPDU_AEA:          /* aka SPDU_MAA */
                    236: #endif
                    237:            SPDU_TYPE ("MAJOR SYNC/ACTIVITY END ACK");
                    238:            if (s -> s_mask & SMASK_MAA_SERIAL)
                    239:                type_ssn (lp, rw, "SSN", s -> s_maa_serial);
                    240:            break;
                    241: 
                    242:        case SPDU_RS: 
                    243:            SPDU_TYPE ("RESYNCHRONIZE");
                    244:            if (s -> s_mask & SMASK_RS_SET)
                    245:                type_settings (lp, rw, s -> s_rs_settings);
                    246:            if (s -> s_mask & SMASK_RS_TYPE)
                    247:                type_resync (lp, rw, s -> s_rs_type);
                    248:            if (s -> s_mask & SMASK_RS_SSN)
                    249:                type_ssn (lp, rw, "RSN", s -> s_rs_serial);
                    250:            break;
                    251: 
                    252:        case SPDU_RA: 
                    253:            SPDU_TYPE ("RESYNCHRONIZE ACK");
                    254:            if (s -> s_mask & SMASK_RA_SET)
                    255:                type_settings (lp, rw, s -> s_ra_settings);
                    256:            if (s -> s_mask & SMASK_RA_SSN)
                    257:                type_ssn (lp, rw, "RSN", s -> s_ra_serial);
                    258:            break;
                    259: 
                    260:        case SPDU_PR: 
                    261:            SPDU_TYPE ("PREPARE");
                    262:            type_prepare (lp, rw, s -> s_pr_type);
                    263:            break;
                    264: 
                    265:        case SPDU_ER: 
                    266:            SPDU_TYPE ("EXCEPTION REPORT");
                    267:            break;
                    268: 
                    269:        case SPDU_ED: 
                    270:            SPDU_TYPE ("EXCEPTION DATA");
                    271:            if (s -> s_mask & SMASK_ED_REASON)
                    272:                type_error (lp, rw, s -> s_ed_reason);
                    273:            break;
                    274: 
                    275:        case SPDU_AS: 
                    276:            SPDU_TYPE ("ACTIVITY START");
                    277:            if (s -> s_mask & SMASK_AS_ID) {
                    278:                (void) ll_printf (lp, "%s", rw);
                    279:                type_info (lp, "ID/ %d", (int) s -> s_as_id.sd_len,
                    280:                        s -> s_as_id.sd_data);
                    281:                (void) ll_printf (lp, "\n");
                    282:            }
                    283:            break;
                    284: 
                    285:        case SPDU_AR: 
                    286:            SPDU_TYPE ("ACTIVITY RESUME");
                    287:            if (s -> s_mask & SMASK_AR_REF)
                    288:                type_ref (lp, rw, &s -> s_ar_reference);
                    289:            if (s -> s_mask & SMASK_AR_OID) {
                    290:                (void) ll_printf (lp, "%s", rw);
                    291:                type_info (lp, "OLD ID/ %d", (int) s -> s_ar_oid.sd_len,
                    292:                        s -> s_ar_oid.sd_data);
                    293:                (void) ll_printf (lp, "\n");
                    294:            }
                    295:            if (s -> s_mask & SMASK_AR_SSN)
                    296:                type_ssn (lp, rw, "SSN", s -> s_ar_serial);
                    297:            if (s -> s_mask & SMASK_AR_ID) {
                    298:                (void) ll_printf (lp, "%s", rw);
                    299:                type_info (lp, "ID/ %d", (int) s -> s_ar_id.sd_len,
                    300:                        s -> s_ar_id.sd_data);
                    301:                (void) ll_printf (lp, "\n");
                    302:            }
                    303:            break;
                    304: 
                    305:        case SPDU_AD: 
                    306:            SPDU_TYPE ("ACTIVITY DISCARD");
                    307:            if (s -> s_mask & SMASK_AD_REASON)
                    308:                type_error (lp, rw, s -> s_ad_reason);
                    309:            break;
                    310: 
                    311:        case SPDU_ADA: 
                    312:            SPDU_TYPE ("ACTIVITY DISCARD ACK");
                    313:            break;
                    314: 
                    315:        default: 
                    316:            (void) ll_printf (lp, "%sCODE/ 0x%x\n", rw, s -> s_code);
                    317:            break;
                    318:     }
                    319: 
                    320:     if (s -> s_mask & SMASK_ENCLOSE)
                    321:        type_bits (lp, rw, "ENCLOSURE", s -> s_enclose, ENCL_MASK, EMASK);
                    322: 
                    323:     if (s -> s_udata)
                    324:        if (s -> s_code == SPDU_ER)
                    325:            type_data (lp, "REFLECT", rw, s -> s_ulen, s -> s_udata);
                    326:        else
                    327:            if (s -> s_mask & SMASK_UDATA_PGI)
                    328:                type_data (lp, "USER", rw, s -> s_ulen, s -> s_udata);
                    329:            else {
                    330:                (void) ll_printf (lp, "%sUSER INFO/ ", rw);
                    331:                type_info (lp, "%d", s -> s_ulen, s -> s_udata);
                    332:                (void) ll_printf (lp, "\n");
                    333:            }
                    334:     (void) ll_printf (lp, "%s)\n", rw);
                    335: 
                    336:     (void) ll_sync (lp);
                    337: }
                    338: 
                    339: /*  */
                    340: 
                    341: static type_id (lp, type, rw, selector, len)
                    342: LLog   *lp;
                    343: char   *type,
                    344:        *rw;
                    345: char   *selector;
                    346: int    len;
                    347: {
                    348:     char    buffer[BUFSIZ];
                    349: 
                    350:     buffer[explode (buffer, (u_char *) selector, len)] = NULL;
                    351: 
                    352:     (void) ll_printf (lp, "%s%s/ %d/\"%s\"\n", rw, type, len, buffer);
                    353: }
                    354: 
                    355: 
                    356: static type_ssn (lp, rw, what, ssn)
                    357: LLog   *lp;
                    358: char   *rw,
                    359:        *what;
                    360: u_long ssn;
                    361: {
                    362:     (void) ll_printf (lp, "%s%s/ %d\n", rw, what, ssn);
                    363: }
                    364: 
                    365: 
                    366: static type_bits (lp, rw, s, bits, mask, t)
                    367: LLog   *lp;
                    368: char   *rw,
                    369:        *s,
                    370:        *t;
                    371: u_char  bits,
                    372:        mask;
                    373: {
                    374:     (void) ll_printf (lp, "%s%s/ %s", rw, s, sprintc (bits & mask, t));
                    375:     if (bits & ~mask)
                    376:        (void) ll_printf (lp, ": illegal use of %s", sprintc (bits & ~mask, t));
                    377:     (void) ll_printf (lp, "\n");
                    378: }
                    379: 
                    380: 
                    381: #define dotoken(requires,shift,bit,type) \
                    382: { \
                    383:     token = (settings >> shift) & ST_MASK; \
                    384:     (void) ll_printf (lp, " %s:%s", type, token == ST_INIT_VALUE ? "initiator" \
                    385:        : token == ST_RESP_VALUE ? "responder" \
                    386:        : token == ST_CALL_VALUE ? "choice" \
                    387:        : "reserved"); \
                    388: }
                    389: 
                    390: static type_settings (lp, rw, settings)
                    391: LLog   *lp;
                    392: char   *rw;
                    393: u_char  settings;
                    394: {
                    395:     int     token;
                    396: 
                    397:     (void) ll_printf (lp, "%sSETTINGS/", rw);
                    398:     dotokens ();
                    399:     (void) ll_printf (lp, "\n");
                    400: }
                    401: 
                    402: #undef dotoken
                    403: 
                    404: 
                    405: static type_tsdu (lp, rw, init, resp)
                    406: LLog   *lp;
                    407: char   *rw;
                    408: u_short        init,
                    409:        resp;
                    410: {
                    411:     (void) ll_printf (lp, "%sTSDU/ INITIATOR: %d, RESPONDER: %d\n",
                    412:            rw, init, resp);
                    413: }
                    414: 
                    415: 
                    416: static type_ref (lp, rw, ref)
                    417: LLog   *lp;
                    418: char   *rw;
                    419: struct SSAPref *ref;
                    420: {
                    421:     (void) ll_printf (lp, "%sREFERENCE/", rw);
                    422:     if (ref -> sr_vlen)
                    423:        type_info (lp, "<CALLING %d", (int) ref -> sr_calling_len,
                    424:                ref -> sr_calling);
                    425:     else
                    426:        type_info (lp, " <USER %d", (int) ref -> sr_ulen, ref -> sr_udata);
                    427:     type_info (lp, ", COMMON %d", (int) ref -> sr_clen, ref -> sr_cdata);
                    428:     type_info (lp, ", ADDITIONAL %d", (int) ref -> sr_alen, ref -> sr_adata);
                    429:     if (ref -> sr_vlen)
                    430:        type_info (lp, ", CALLED %d", (int) ref -> sr_called_len,
                    431:                ref -> sr_called);
                    432:     (void) ll_printf (lp, ">\n");
                    433: }
                    434: 
                    435: 
                    436: static type_vrsn (lp, rw, version)
                    437: LLog   *lp;
                    438: char   *rw;
                    439: u_char version;
                    440: {
                    441:     (void) ll_printf (lp, "%sVERSION/ 0x%x\n", rw, version);
                    442: }
                    443: 
                    444: 
                    445: static type_reason (lp, rw, reason)
                    446: LLog   *lp;
                    447: char   *rw;
                    448: int    reason;
                    449: {
                    450:     (void) ll_printf (lp, "%sREASON/ 0x%x: %s\n", rw, reason,
                    451:            SErrString ((int) reason));
                    452: }
                    453: 
                    454: 
                    455: static type_prepare (lp, rw, type)
                    456: LLog   *lp;
                    457: char   *rw;
                    458: u_char  type;
                    459: {
                    460:     (void) ll_printf (lp, "%sTYPE/ ", rw);
                    461:     switch (type) {
                    462:        case PR_MAA: 
                    463:            (void) ll_printf (lp, "MAA");
                    464:            break;
                    465:        case PR_RS: 
                    466:            (void) ll_printf (lp, "RS");
                    467:            break;
                    468:        case PR_RA: 
                    469:            (void) ll_printf (lp, "RA");
                    470:            break;
                    471:        case PR_AB: 
                    472:            (void) ll_printf (lp, "AB");
                    473:            break;
                    474:        default: 
                    475:            (void) ll_printf (lp, "%d: illegal value", type);
                    476:            break;
                    477:     }
                    478:     (void) ll_printf (lp, "\n");
                    479: }
                    480: 
                    481: 
                    482: static type_error (lp, rw, reason)
                    483: LLog   *lp;
                    484: char   *rw;
                    485: u_char  reason;
                    486: {
                    487:     (void) ll_printf (lp, "%sREASON/ ", rw);
                    488:     switch (reason) {
                    489:        case SP_NOREASON: 
                    490:            (void) ll_printf (lp, "No specific reason stated");
                    491:            break;
                    492:        case SP_JEOPARDY: 
                    493:            (void) ll_printf (lp, "User receiving ability jeopardized");
                    494:            break;
                    495:        case SP_SEQUENCE: 
                    496:            (void) ll_printf (lp, "User sequence error");
                    497:            break;
                    498:        case SP_LOCAL: 
                    499:            (void) ll_printf (lp, "Local SS-user error");
                    500:            break;
                    501:        case SP_PROCEDURAL: 
                    502:            (void) ll_printf (lp, "Unrecoverable procedural error");
                    503:            break;
                    504:        case SP_DEMAND: 
                    505:            (void) ll_printf (lp, "Demand data token");
                    506:            break;
                    507:        default: 
                    508:            (void) ll_printf (lp, "%d: illegal value", reason);
                    509:            break;
                    510:     }
                    511:     (void) ll_printf (lp, "\n");
                    512: }
                    513: 
                    514: 
                    515: static type_resync (lp, rw, type)
                    516: LLog   *lp;
                    517: char   *rw;
                    518: u_char  type;
                    519: {
                    520:     (void) ll_printf (lp, "%sTYPE/ ", rw);
                    521:     switch (type) {
                    522:        case SYNC_RESTART: 
                    523:            (void) ll_printf (lp, "restart");
                    524:            break;
                    525:        case SYNC_ABANDON: 
                    526:            (void) ll_printf (lp, "abandon");
                    527:            break;
                    528:        case SYNC_SET: 
                    529:            (void) ll_printf (lp, "set");
                    530:            break;
                    531:        default: 
                    532:            (void) ll_printf (lp, "%d: illegal value", type);
                    533:            break;
                    534:     }
                    535:     (void) ll_printf (lp, "\n");
                    536: }
                    537: 
                    538: 
                    539: static type_data (lp, type, rw, len, data)
                    540: LLog   *lp;
                    541: char   *type,
                    542:        *rw,
                    543:        *data;
                    544: int    len;
                    545: {
                    546:     (void) ll_printf (lp, "%s%s DATA/ ", rw, type);
                    547:     type_info (lp, "%d", len, data);
                    548:     (void) ll_printf (lp, "\n");
                    549: }
                    550: 
                    551: 
                    552: static type_info (lp, fmt, len, data)
                    553: LLog   *lp;
                    554: char   *fmt,
                    555:        *data;
                    556: int    len;
                    557: {
                    558:     char    buffer[BUFSIZ];
                    559: 
                    560:     (void) ll_printf (lp, fmt, len);
                    561:     if (0 < len && len < sizeof buffer / 2) {
                    562:        buffer[explode (buffer, (u_char *) data, len)] = NULL;
                    563:        (void) ll_printf (lp, " %s", buffer);
                    564:     }
                    565: }
                    566: 
                    567: /*  */
                    568: 
                    569: /* ARGSUSED */
                    570: 
                    571: void   text2spkt (s)
                    572: struct ssapkt *s;
                    573: {
                    574:     /* NOT YET IMPLEMENTED */
                    575: }

unix.superglobalmegacorp.com

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