Annotation of researchv10no/cmd/uucp/xio.c, revision 1.1.1.1

1.1       root        1: /*     /sccs/src/cmd/uucp/s.xio.c
                      2:        xio.c   1.2     8/30/84 17:38:20
                      3: */
                      4: #include "uucp.h"
                      5: VERSION(@(#)xio.c      1.2);
                      6: 
                      7: #ifdef X25
                      8: 
                      9: #define XBUFSIZ 512
                     10: static jmp_buf Xfailbuf;
                     11: 
                     12: /*
                     13:  * x.25 protocol
                     14:  */
                     15: static xalarm()
                     16: {
                     17:        longjmp(Xfailbuf, 1);
                     18: }
                     19: 
                     20: static int (*xsig)();
                     21: 
                     22: /*
                     23:  * turn on protocol timer
                     24:  */
                     25: xturnon()
                     26: {
                     27:        xsig=signal(SIGALRM, xalarm);
                     28:        return(0);
                     29: }
                     30: xturnoff()
                     31: {
                     32:        (void) signal(SIGALRM, xsig);
                     33:        return(0);
                     34: }
                     35: 
                     36: /*
                     37:  * write message across x.25 link
                     38:  *     type    -> message type
                     39:  *     str     -> message body (ascii string)
                     40:  *     fn      -> x.25 file descriptor
                     41:  * return
                     42:  *     0
                     43:  */
                     44: xwrmsg(type, str, fn)
                     45: register char *str;
                     46: int fn;
                     47: char type;
                     48: {
                     49:        register char *s;
                     50:        char bufr[XBUFSIZ];
                     51: 
                     52:        bufr[0] = type;
                     53:        s = &bufr[1];
                     54:        while (*str)
                     55:                *s++ = *str++;
                     56:        *s = '\0';
                     57:        if (*(--s) == '\n')
                     58:                *s = '\0';
                     59:        (void) write(fn, bufr, strlen(bufr) + 1);
                     60:        return(0);
                     61: }
                     62: 
                     63: /*
                     64:  * read message from x.25 link
                     65:  *     str     -> message buffer
                     66:  *     fn      -> x.25 file descriptor
                     67:  * return
                     68:  *     FAIL    -> send timed out
                     69:  *     0       -> ok message in str
                     70:  */
                     71: xrdmsg(str, fn)
                     72: register char *str;
                     73: {
                     74:        register unsigned len;
                     75: 
                     76:        if(setjmp(Xfailbuf))
                     77:                return(FAIL);
                     78: 
                     79:        for (;;) {
                     80:                (void) alarm(60);
                     81:                if( (len = read(fn, str, XBUFSIZ)) == 0)
                     82:                        continue;
                     83:                str += len;
                     84:                if (*(str - 1) == '\0')
                     85:                        break;
                     86:        }
                     87:        (void) alarm(0);
                     88:        return(0);
                     89: }
                     90: 
                     91: /*
                     92:  * read data from file fp1 and write
                     93:  * on x.25 link
                     94:  *     fp1     -> file descriptor
                     95:  *     fn      -> x.25 descriptor
                     96:  * returns:
                     97:  *     FAIL    ->failure in x.25 link
                     98:  *     0       -> ok
                     99:  */
                    100: xwrdata(fp1, fn)
                    101: register FILE *fp1;
                    102: {
                    103:        register int len, ret;
                    104:        long bytes;
                    105:        char bufr[XBUFSIZ];
                    106:        char text[XBUFSIZ];
                    107:        time_t ticks;
                    108: 
                    109:        bytes = 0L;
                    110:        (void) millitick();     /* set msec timer */
                    111:        while ((len = fread(bufr, sizeof (char), XBUFSIZ, fp1)) > 0) {
                    112:                bytes += len;
                    113:                ret = write(fn, bufr, len);
                    114:                if (ret != len) {
                    115:                        return(FAIL);
                    116:                }
                    117:                if (len != XBUFSIZ)
                    118:                        break;
                    119:        }
                    120:        ret = write(fn, bufr, 0);
                    121:        ticks = millitick();
                    122:        (void) sprintf(text, "-> %ld / %ld.%.3d secs",
                    123:                bytes, ticks / 1000, ticks % 1000);
                    124:        DEBUG(4, "%s\n", text);
                    125:        syslog(text);
                    126:        return(0);
                    127: }
                    128: 
                    129: /*
                    130:  * read data from x.25 link and
                    131:  * write into file
                    132:  *     fp2     -> file descriptor
                    133:  *     fn      -> x.25 descriptor
                    134:  * returns:
                    135:  *     0       -> ok
                    136:  *     FAIL    -> failure on x.25 link
                    137:  */
                    138: xrddata(fn, fp2)
                    139: register FILE *fp2;
                    140: {
                    141:        register int len;
                    142:        long bytes;
                    143:        char text[XBUFSIZ];
                    144:        char bufr[XBUFSIZ];
                    145:        time_t ticks;
                    146: 
                    147:        bytes = 0L;
                    148:        (void) millitick();     /* set msec timer */
                    149:        for (;;) {
                    150:                len = xrdblk(bufr, XBUFSIZ, fn);
                    151:                if (len < 0) {
                    152:                        return(FAIL);
                    153:                }
                    154:                bytes += len;
                    155:                (void) fwrite(bufr, sizeof (char), len, fp2);
                    156:                if (len < XBUFSIZ)
                    157:                        break;
                    158:        }
                    159:        ticks = millitick();
                    160:        (void) sprintf(text, "<- %ld / %ld.%.3d secs",
                    161:                bytes, ticks / 1000, ticks % 1000);
                    162:        DEBUG(4, "%s\n", text);
                    163:        syslog(text);
                    164:        return(0);
                    165: }
                    166: 
                    167: /*
                    168:  * read blank from x.25 link
                    169:  * reads are timed
                    170:  *     blk     -> address of buffer
                    171:  *     len     -> size to read
                    172:  *     fn      -> x.25 descriptor
                    173:  * returns:
                    174:  *     FAIL    -> link error timeout on link
                    175:  *     i       -> # of bytes read
                    176:  */
                    177: xrdblk(blk, len,  fn)
                    178: register char *blk;
                    179: {
                    180:        register int i, ret;
                    181: 
                    182:        if(setjmp(Xfailbuf))
                    183:                return(FAIL);
                    184: 
                    185:        for (i = 0; i < len; i += ret) {
                    186:                (void) alarm(60);
                    187:                if ((ret = read(fn, blk, len - i)) < 0) {
                    188:                        (void) alarm(0);
                    189:                        return(FAIL);
                    190:                }
                    191:                blk += ret;
                    192:                if (ret == 0)
                    193:                        break;
                    194:        }
                    195:        (void) alarm(0);
                    196:        return(i);
                    197: }
                    198: #endif X25

unix.superglobalmegacorp.com

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