Annotation of 43BSDTahoe/ucb/telnet/Source/utilities.c, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Copyright (c) 1988 Regents of the University of California.
                      3:  * All rights reserved.
                      4:  *
                      5:  * Redistribution and use in source and binary forms are permitted
                      6:  * provided that this notice is preserved and that due credit is given
                      7:  * to the University of California at Berkeley. The name of the University
                      8:  * may not be used to endorse or promote products derived from this
                      9:  * software without specific prior written permission. This software
                     10:  * is provided ``as is'' without express or implied warranty.
                     11:  */
                     12: 
                     13: #ifndef lint
                     14: static char sccsid[] = "@(#)utilities.c        1.5 (Berkeley) 5/15/88";
                     15: #endif /* not lint */
                     16: 
                     17: #define        TELOPTS
                     18: #include <arpa/telnet.h>
                     19: #include <sys/types.h>
                     20: 
                     21: #include <ctype.h>
                     22: 
                     23: #include "general.h"
                     24: 
                     25: #include "ring.h"
                     26: 
                     27: #include "externs.h"
                     28: 
                     29: FILE   *NetTrace = 0;          /* Not in bss, since needs to stay */
                     30: 
                     31: /*
                     32:  * upcase()
                     33:  *
                     34:  *     Upcase (in place) the argument.
                     35:  */
                     36: 
                     37: void
                     38: upcase(argument)
                     39: register char *argument;
                     40: {
                     41:     register int c;
                     42: 
                     43:     while ((c = *argument) != 0) {
                     44:        if (islower(c)) {
                     45:            *argument = toupper(c);
                     46:        }
                     47:        argument++;
                     48:     }
                     49: }
                     50: 
                     51: /*
                     52:  * SetSockOpt()
                     53:  *
                     54:  * Compensate for differences in 4.2 and 4.3 systems.
                     55:  */
                     56: 
                     57: int
                     58: SetSockOpt(fd, level, option, yesno)
                     59: int
                     60:        fd,
                     61:        level,
                     62:        option,
                     63:        yesno;
                     64: {
                     65: #ifndef        NOT43
                     66:     return setsockopt(fd, level, option,
                     67:                                (char *)&yesno, sizeof yesno);
                     68: #else  /* NOT43 */
                     69:     if (yesno == 0) {          /* Can't do that in 4.2! */
                     70:        fprintf(stderr, "Error: attempt to turn off an option 0x%x.\n",
                     71:                                option);
                     72:        return -1;
                     73:     }
                     74:     return setsockopt(fd, level, option, 0, 0);
                     75: #endif /* NOT43 */
                     76: }
                     77: 
                     78: /*
                     79:  * The following are routines used to print out debugging information.
                     80:  */
                     81: 
                     82: 
                     83: void
                     84: Dump(direction, buffer, length)
                     85: char   direction;
                     86: char   *buffer;
                     87: int    length;
                     88: {
                     89: #   define BYTES_PER_LINE      32
                     90: #   define min(x,y)    ((x<y)? x:y)
                     91:     char *pThis;
                     92:     int offset;
                     93: 
                     94:     offset = 0;
                     95: 
                     96:     while (length) {
                     97:        /* print one line */
                     98:        fprintf(NetTrace, "%c 0x%x\t", direction, offset);
                     99:        pThis = buffer;
                    100:        buffer = buffer+min(length, BYTES_PER_LINE);
                    101:        while (pThis < buffer) {
                    102:            fprintf(NetTrace, "%.2x", (*pThis)&0xff);
                    103:            pThis++;
                    104:        }
                    105:        fprintf(NetTrace, "\n");
                    106:        length -= BYTES_PER_LINE;
                    107:        offset += BYTES_PER_LINE;
                    108:        if (length < 0) {
                    109:            return;
                    110:        }
                    111:        /* find next unique line */
                    112:     }
                    113: }
                    114: 
                    115: 
                    116: /*VARARGS*/
                    117: void
                    118: printoption(direction, fmt, option, what)
                    119:        char *direction, *fmt;
                    120:        int option, what;
                    121: {
                    122:        if (!showoptions)
                    123:                return;
                    124:        fprintf(NetTrace, "%s ", direction+1);
                    125:        if (fmt == doopt)
                    126:                fmt = "do";
                    127:        else if (fmt == dont)
                    128:                fmt = "dont";
                    129:        else if (fmt == will)
                    130:                fmt = "will";
                    131:        else if (fmt == wont)
                    132:                fmt = "wont";
                    133:        else
                    134:                fmt = "???";
                    135:        if (option < (sizeof telopts/sizeof telopts[0]))
                    136:                fprintf(NetTrace, "%s %s", fmt, telopts[option]);
                    137:        else
                    138:                fprintf(NetTrace, "%s %d", fmt, option);
                    139:        if (*direction == '<') {
                    140:                fprintf(NetTrace, "\r\n");
                    141:                return;
                    142:        }
                    143:        fprintf(NetTrace, " (%s)\r\n", what ? "reply" : "don't reply");
                    144: }
                    145: 
                    146: void
                    147: printsub(direction, pointer, length)
                    148: char   *direction,             /* "<" or ">" */
                    149:        *pointer;               /* where suboption data sits */
                    150: int    length;                 /* length of suboption data */
                    151: {
                    152:     if (showoptions) {
                    153:        fprintf(NetTrace, "%s suboption ",
                    154:                                (direction[0] == '<')? "Received":"Sent");
                    155:        switch (pointer[0]) {
                    156:        case TELOPT_TTYPE:
                    157:            fprintf(NetTrace, "Terminal type ");
                    158:            switch (pointer[1]) {
                    159:            case TELQUAL_IS:
                    160:                {
                    161:                    char tmpbuf[SUBBUFSIZE];
                    162:                    int minlen = min(length, sizeof tmpbuf);
                    163: 
                    164:                    memcpy(tmpbuf, pointer+2, minlen);
                    165:                    tmpbuf[minlen-1] = 0;
                    166:                    fprintf(NetTrace, "is %s.\n", tmpbuf);
                    167:                }
                    168:                break;
                    169:            case TELQUAL_SEND:
                    170:                fprintf(NetTrace, "- request to send.\n");
                    171:                break;
                    172:            default:
                    173:                fprintf(NetTrace,
                    174:                                "- unknown qualifier %d (0x%x).\n", pointer[1]);
                    175:            }
                    176:            break;
                    177:        default:
                    178:            fprintf(NetTrace, "Unknown option %d (0x%x)\n",
                    179:                                        pointer[0], pointer[0]);
                    180:        }
                    181:     }
                    182: }

unix.superglobalmegacorp.com

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