Annotation of researchv10no/ipc/libin/in_subrs.c, revision 1.1

1.1     ! root        1: #include <ctype.h>
        !             2: #include <sys/inet/in.h>
        !             3: #include <ipc.h>
        !             4: 
        !             5: extern in_addr in_aton();
        !             6: 
        !             7: /* Get the next token in a string, returning a pointer the the byte
        !             8:  * following the token.
        !             9:  */
        !            10: char *
        !            11: in_getw(buf, w)
        !            12: char *buf, *w;
        !            13: {
        !            14:        *w = 0;
        !            15:        while(isspace(*buf)) buf++;
        !            16:        if(*buf == '\0')
        !            17:                return(0);
        !            18:        while(!isspace(*buf) && *buf)
        !            19:                *w++ = *buf++;
        !            20:        *w = 0;
        !            21:        return(buf);
        !            22: }
        !            23: 
        !            24: /* get the network that a host is on */
        !            25: in_addr
        !            26: in_netof(x)
        !            27: in_addr x;
        !            28: {
        !            29:        if(IN_CLASSC(x))
        !            30:                return(x&IN_CLASSC_NET);
        !            31:        else if(IN_CLASSB(x))
        !            32:                return(x&IN_CLASSB_NET);
        !            33:        else
        !            34:                return(x&IN_CLASSA_NET);
        !            35: }
        !            36: 
        !            37: /*
        !            38:  *  get the subnetwork that a host is on.  if the mask is not a superset
        !            39:  *  the classmask, just use the classmask.
        !            40:  */
        !            41: in_addr
        !            42: in_subnetof(x, mask)
        !            43:        in_addr x;
        !            44:        in_addr mask;
        !            45: {
        !            46:        in_addr cmask;
        !            47: 
        !            48:        if(IN_CLASSC(x))
        !            49:                cmask = IN_CLASSC_NET;
        !            50:        else if(IN_CLASSB(x))
        !            51:                cmask = IN_CLASSB_NET;
        !            52:        else
        !            53:                cmask = IN_CLASSA_NET;
        !            54:        if((cmask&mask) != cmask)
        !            55:                return x & cmask;
        !            56:        else
        !            57:                return x & mask;
        !            58: }
        !            59: 
        !            60: /*
        !            61:  *  get the ip address for `name' on same net as `naddr'
        !            62:  */
        !            63: in_addr
        !            64: in_addronnet(name, naddr, mask)
        !            65:        char *name;
        !            66:        in_addr naddr;
        !            67:        in_addr mask;
        !            68: {
        !            69:        in_addr taddr;
        !            70:        Qset *sp, *tsp;
        !            71:        Qtuple *tp;
        !            72: 
        !            73:        /*
        !            74:         *  get the subnetwork naddr is on
        !            75:         */
        !            76:        naddr = in_subnetof(naddr, mask);
        !            77: 
        !            78:        /*
        !            79:         *  if `name' is numeric, don't call the name server
        !            80:         */
        !            81:        if(*name >= '0' && *name <= '9'){
        !            82:                taddr = in_aton(name);
        !            83:                if(in_subnetof(taddr, mask)!=naddr)
        !            84:                        taddr = 0;
        !            85:                return taddr;
        !            86:        }
        !            87: 
        !            88:        /*
        !            89:         *  ask name server for a set of possibilities
        !            90:         */
        !            91:        sp = qset(name, (char *)0);
        !            92:        if (!sp)
        !            93:                return 0;
        !            94: 
        !            95:        /*  
        !            96:         *  Look for an inet address that matches the network.
        !            97:         *  If none found return 0.
        !            98:         */
        !            99:        for(tsp=sp; tsp; tsp=tsp->next) {
        !           100:                for(tp=tsp->this; tp; tp=tp->next)
        !           101:                        if(tp->type && strcmp(tp->type, "in")==0){
        !           102:                                taddr = in_aton(tp->value);
        !           103:                                if(in_subnetof(taddr, mask)==naddr){
        !           104:                                        freeQset(sp);
        !           105:                                        return taddr;
        !           106:                                }
        !           107:                        }
        !           108:        }
        !           109:        freeQset(sp);
        !           110:        return 0;
        !           111: }

unix.superglobalmegacorp.com

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