Annotation of researchv10no/cmd/nupas/ipc/ipcopen.c, revision 1.1.1.1

1.1       root        1: #include <stdio.h>
                      2: #include <sysexits.h>
                      3: #include <string.h>
                      4: 
                      5: /*
                      6:  * globals for ipc
                      7:  */
                      8: 
                      9: int    ipcdebug = 0;
                     10: 
                     11: extern int ipcerrno;
                     12: 
                     13: extern int tcp_connect();
                     14: extern int dk_connect();
                     15: extern int mx_connect();
                     16: extern int proxy_connect();
                     17: 
                     18: extern int tcp_close();
                     19: extern int dk_close();
                     20: 
                     21: #define INETPROXY      "tcp!inet.research.att.com!402"
                     22: /* #define INETPROXY   "dk!nj/astro/inet.proxy"*/
                     23: 
                     24: #define ATTPROXY       "tcp!att-in.att.com!402"
                     25: /* #define ATTPROXY    "dk!oh/cbl/att-in.proxy"*/
                     26: 
                     27: #ifndef PROXY
                     28: #define PROXY          ATTPROXY
                     29: #endif
                     30: 
                     31: struct conntype {
                     32:        char    *prefix;
                     33:        int     (*connector)();
                     34:        int     (*closer)();
                     35:        char    *prhost;
                     36: } conntype[] = {
                     37:        {"tcp",   tcp_connect,   tcp_close,   NULL},
                     38:        {"dk",    dk_connect,    dk_close,    NULL},
                     39:        {"mx",    mx_connect,    tcp_close,   NULL},
                     40:        {"proxy", proxy_connect, NULL,        PROXY},
                     41:        {"inet",  proxy_connect, NULL,        INETPROXY},
                     42:        {"att",   proxy_connect, NULL,        ATTPROXY},
                     43:        {NULL,    NULL,          NULL,        NULL}
                     44: };
                     45: 
                     46: #define MAXFD  32              /* maximum file descriptors we handle */
                     47: int (*closelist[MAXFD])();
                     48: 
                     49: /*
                     50:  * ipcopen - determine the network and call the open processor for it.
                     51:  *     name is of the form     network!host!service
                     52:  *      param is passed on, for what it is worth.
                     53:  */
                     54: int
                     55: ipcopen(name, param)
                     56: char *name, *param;
                     57: {
                     58:        int fd;
                     59:        struct  conntype *ct;
                     60:        char buf[100];
                     61:        char *dialer = buf, *dialno;
                     62: 
                     63:        if (ipcdebug) {
                     64:                setbuf(stderr, (char *)0);
                     65:                fprintf(stderr, "ipcopen `%s` `%s`\n", name, param);
                     66:        }
                     67: 
                     68:        strncpy(buf, name, sizeof(buf));
                     69:        buf[sizeof(buf)] = '\0';
                     70:        dialno = strchr(buf, '!');
                     71:        if (dialno != NULL)
                     72:                *dialno++ = '\0';
                     73: 
                     74:        if ((*dialer) == '\0') {
                     75:                ipcseterror(EX_USAGE, "Dialer name missing", "Can't dial");
                     76:                return -1;
                     77:        }
                     78:        for (ct = conntype; ct->prefix; ct++)
                     79:                if (strcmp(ct->prefix, dialer) == 0)
                     80:                        break;
                     81:        if (ct->prefix == NULL) {
                     82:                ipcseterror(EX_USAGE, "Unknown network type", "Can't dial");
                     83:                return -1;
                     84:        }
                     85: 
                     86:        if (ipcdebug)
                     87:                fprintf(stderr, "Connecting to network %s %s\n",
                     88:                        dialer, dialno);
                     89:        if (ct->prhost == NULL) {       /*not proxy connect*/
                     90:                fd = (ct->connector)(dialno, param);
                     91:                if ((fd >= 0) && (fd <= MAXFD))
                     92:                        closelist[fd] = ct->closer;
                     93:        } else
                     94:                fd = proxy_connect(dialno, param, ct->prhost);
                     95: 
                     96:        if (ipcdebug)
                     97:                fprintf(stderr, "Ipcopen returning %d, err=%d\n",
                     98:                        fd, ipcerrno);
                     99:        return fd;
                    100: }
                    101: 
                    102: int
                    103: ipcclose(fd)
                    104: int fd;
                    105: {
                    106:        if (ipcdebug)
                    107:                fprintf(stderr, "Closing fd %d\n", fd);
                    108:        if ((fd >= 0) && (fd <= MAXFD) && (closelist[fd] != 0)) {
                    109:                int rc = (closelist[fd])(fd);
                    110:                closelist[fd] = 0;
                    111:                return rc;
                    112:        } else
                    113:                return close(fd);
                    114: }
                    115: 

unix.superglobalmegacorp.com

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