Annotation of 43BSD/contrib/courier/lib/client.c, revision 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.