Annotation of 43BSD/contrib/courier/lib/client.c, revision 1.1.1.1

1.1       root        1: #ifndef lint
                      2: static char sccsid[] = "@(#)client.c   4.2 (Berkeley) 7/7/83";
                      3: #endif
                      4: 
                      5: #include <stdio.h>
                      6: #include <sys/types.h>
                      7: #include <sys/socket.h>
                      8: #include <netinet/in.h>
                      9: #include <netdb.h>
                     10: #include "courier.h"
                     11: 
                     12: #if DEBUG
                     13: int CourierClientDebuggingFlag = 0;
                     14: #endif
                     15: 
                     16: SendCallMessage(f, procedure, nwords, arguments)
                     17:        int f;
                     18:        Cardinal procedure, nwords;
                     19:        Unspecified *arguments;
                     20: {
                     21:        Cardinal p, n;
                     22: 
                     23: #if DEBUG
                     24:        if (CourierClientDebuggingFlag)
                     25:                fprintf(stderr, "[SendCallMessage %d %d]\n", procedure, nwords);
                     26: #endif
                     27:        PackCardinal(&procedure, &p, 1);
                     28:        PackCardinal(&nwords, &n, 1);
                     29:        write(f, &p, sizeof(Cardinal));
                     30:        write(f, &n, sizeof(Cardinal));
                     31:        write(f, arguments, nwords*sizeof(Unspecified));
                     32: }
                     33: 
                     34: Unspecified *
                     35: ReceiveReturnMessage(f)
                     36:        int f;
                     37: {
                     38:        Cardinal nwords, n;
                     39:        Unspecified *bp;
                     40: 
                     41:        if (ClientRead(f, &nwords, 1) == 0)
                     42:                goto eof;
                     43:        UnpackCardinal(&n, &nwords);
                     44: #if DEBUG
                     45:        if (CourierClientDebuggingFlag)
                     46:                fprintf(stderr, "[ReceiveReturnMessage %d]\n", n);
                     47: #endif
                     48:        bp = Allocate(n);
                     49:        if (ClientRead(f, bp, n) == 0)
                     50:                goto eof;
                     51:        return (bp);
                     52: eof:
                     53:        fprintf(stderr, "\n\r\7Lost connection to server.\n");
                     54:        exit(1);
                     55: }
                     56: 
                     57: static
                     58: ClientRead(f, addr, nwords)
                     59:        int f;
                     60:        char *addr;
                     61:        int nwords;
                     62: {
                     63:        register int nbytes, n;
                     64:        register char *p;
                     65: 
                     66:        for (p = addr, nbytes = 2*nwords; nbytes > 0; nbytes -= n, p += n) {
                     67:                n = read(f, p, nbytes);
                     68:                if (n <= 0)
                     69:                        return (0);
                     70:        }
                     71:        return (1);
                     72: }
                     73: 
                     74: CourierActivate(program_name, host)
                     75:        String program_name, host;
                     76: {
                     77:        struct hostent *hp;
                     78:        struct servent *srvp;
                     79:        int f;
                     80:        struct sockaddr_in sin;
                     81:        Unspecified buf[50];
                     82:        Cardinal n;
                     83:        char c;
                     84: 
                     85:        hp = gethostbyname(host);
                     86:        if (hp == 0) {
                     87:                fprintf(stderr, "%s: unknown host\n", host);
                     88:                exit(1);
                     89:        }
                     90:        srvp = getservbyname("courier", "tcp");
                     91:        if (srvp == 0) {
                     92:                fprintf(stderr, "tcp/courier: unknown service\n");
                     93:                exit(1);
                     94:        }
                     95:        f = socket(AF_INET, SOCK_STREAM, 0, 0);
                     96:        if (f < 0) {
                     97:                perror("socket");
                     98:                exit(1);
                     99:        }
                    100:        sin.sin_family = AF_INET;
                    101:        sin.sin_port = 0;
                    102:        sin.sin_addr.s_addr = 0;
                    103:        if (bind(f, (caddr_t)&sin, sizeof (sin), 0) < 0) {
                    104:                perror("bind");
                    105:                exit(1);
                    106:        }
                    107:        sin.sin_family = hp->h_addrtype;
                    108:        sin.sin_addr = *(struct in_addr *) hp->h_addr;
                    109:        sin.sin_port = srvp->s_port;
                    110:        if (connect(f, (caddr_t)&sin, sizeof(sin), 0) < 0) {
                    111:                perror(hp->h_name);
                    112:                exit(1);
                    113:        }
                    114: #if DEBUG
                    115:        if (CourierClientDebuggingFlag)
                    116:                fprintf(stderr, "[CourierActivate: connected to %s]\n", hp->h_name);
                    117: #endif
                    118:        n = PackString(&program_name, buf, 1);
                    119:        write(f, buf, n*sizeof(Unspecified));
                    120:        if (read(f, &c, 1) != 1) {
                    121:                perror(host);
                    122:                exit(1);
                    123:        }
                    124:        if (c != 0) {
                    125:                do write(fileno(stderr), &c, 1);
                    126:                while (read(f, &c, 1) == 1 && c != 0);
                    127:                exit(1);
                    128:        }
                    129: #if DEBUG
                    130:        if (CourierClientDebuggingFlag)
                    131:                fprintf(stderr, "[CourierActivate: running %s]\n", program_name);
                    132: #endif
                    133:        return (f);
                    134: }

unix.superglobalmegacorp.com

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