Annotation of cci/usr/src/ucb/talk/convert.c, revision 1.1

1.1     ! root        1: 
        !             2: #include "ctl.h"
        !             3: 
        !             4: 
        !             5: #include <stdio.h>
        !             6: #include <errno.h>
        !             7: #include <sgtty.h>
        !             8: #include <sys/ioctl.h>
        !             9: 
        !            10: int    debug;
        !            11: /*---------------------------------------------
        !            12:   This module converts from local format to VAX format in which:
        !            13: 
        !            14:        - data fields are compacted. No gaps between fields.
        !            15:        - byte ordering is right to left.
        !            16: 
        !            17:  --------------------------------------------*/
        !            18: 
        !            19: /*---------------------------------------------------------
        !            20:   convert requests from net to local format. 
        !            21:   Changes should work with VAX implementations that don't do byte ordering.
        !            22:  --------------------------------------------------------*/
        !            23: /*------------------------------------------------------------
        !            24:   Convert requests from local to net format. 
        !            25:   Changes should work with VAX that don't byte order its messages.
        !            26:   ----------------------------------------------------------*/
        !            27: tonetmsg(msg, netmsg, swap)
        !            28: CTL_MSG                *msg;
        !            29: NETCTL_MSG     *netmsg;
        !            30: int            swap;
        !            31: {
        !            32: 
        !            33: 
        !            34:        netmsg->mtype = msg->ctlm_type;
        !            35:        bcopy(msg->ctlm_l_name, netmsg->ml_name, sizeof(netmsg->ml_name));
        !            36:        bcopy(msg->ctlm_r_name, netmsg->mr_name, sizeof(netmsg->mr_name));
        !            37:        bcopy((char *)&msg->ctlm_id_num, netmsg->mid_num, 
        !            38:                sizeof(netmsg->mid_num));
        !            39:        bcopy((char *)&msg->ctlm_pid, netmsg->mpid, sizeof(netmsg->mpid));
        !            40:        bcopy(msg->ctlm_r_tty, netmsg->mr_tty, sizeof(netmsg->mr_tty));
        !            41:        bcopy((char *)&msg->ctlm_addr, netmsg->maddr, sizeof(netmsg->maddr));
        !            42:        bcopy((char *)&msg->ctlm_ctl_addr, netmsg->mctl_addr, 
        !            43:                sizeof(netmsg->mctl_addr));
        !            44: 
        !            45:        if (swap)
        !            46:                swapnetmsg(netmsg);
        !            47: }
        !            48: 
        !            49: 
        !            50: /*------------------------------------------------------------
        !            51:   Convert messages from local to net format.
        !            52:   Should work with VAX versions which do not byte order messages.
        !            53:   ----------------------------------------------------------*/
        !            54: int
        !            55: frnetmsg(netmsg, msg)
        !            56: NETCTL_MSG     *netmsg;
        !            57: CTL_MSG                *msg;
        !            58: {
        !            59:        int     swapped;
        !            60: 
        !            61:        swapped = swapmsg(netmsg);
        !            62: 
        !            63:        msg->ctlm_type = netmsg->mtype ;
        !            64:        bcopy(netmsg->ml_name, msg->ctlm_l_name, sizeof(netmsg->ml_name));
        !            65:        bcopy(netmsg->mr_name, msg->ctlm_r_name, sizeof(netmsg->mr_name));
        !            66:        bcopy(netmsg->mid_num, (char *)&msg->ctlm_id_num,
        !            67:                sizeof(netmsg->mid_num));
        !            68:        bcopy(netmsg->mpid, (char *)&msg->ctlm_pid, sizeof(netmsg->mpid));
        !            69:        bcopy(netmsg->mr_tty, msg->ctlm_r_tty, sizeof(netmsg->mr_tty));
        !            70:        bcopy(netmsg->maddr, (char *)&msg->ctlm_addr, sizeof(netmsg->maddr));
        !            71:        bcopy(netmsg->mctl_addr, (char *)&msg->ctlm_ctl_addr,
        !            72:                sizeof(netmsg->mctl_addr));
        !            73: 
        !            74:        return(swapped);
        !            75: }
        !            76: /*------------------------------------------------------------
        !            77:   Convert responses from net to local format
        !            78:   Changes should work with VAX that don't byte order its messages.
        !            79:   ----------------------------------------------------------*/
        !            80: int
        !            81: frnetresp(netresp, resp)
        !            82: NETCTL_RESPONSE *netresp;
        !            83: CTL_RESPONSE   *resp;
        !            84: {
        !            85:        int     swapped;
        !            86: 
        !            87:        swapped = swapresp(netresp);
        !            88: 
        !            89:        resp->ctlr_type = netresp->rtype;
        !            90:        resp->ctlr_answer = netresp->ranswer;
        !            91:        bcopy(netresp->rid_num, (char *)&resp->ctlr_id_num, 
        !            92:                sizeof(netresp->rid_num));
        !            93:        bcopy(netresp->raddr, (char *)&resp->ctlr_addr, 
        !            94:                sizeof(netresp->raddr));
        !            95: 
        !            96:        return(swapped);
        !            97: }
        !            98: /*------------------------------------------------------------
        !            99:   Convert responses from local to net format.
        !           100:   Changes should work with VAX that don't byte order its messages
        !           101:   ----------------------------------------------------------*/
        !           102: 
        !           103: tonetresp(resp, netresp, swap)
        !           104: CTL_RESPONSE   *resp;
        !           105: NETCTL_RESPONSE        *netresp;
        !           106: int            swap;
        !           107: {
        !           108: 
        !           109:        netresp->rtype = resp->ctlr_type ;
        !           110:        netresp->ranswer = resp->ctlr_answer;
        !           111:        bcopy( (char *)&resp->ctlr_id_num, netresp->rid_num,
        !           112:                sizeof(netresp->rid_num));
        !           113:        bcopy((char *)&resp->ctlr_addr,netresp->raddr,sizeof(netresp->raddr));
        !           114: 
        !           115:        if (swap)
        !           116:                swapnetresp(netresp);
        !           117: 
        !           118: }
        !           119: 
        !           120: #define swapbyte(A,B) {                                \
        !           121:                char    t;                      \
        !           122:                t=(A);(A)=(B);(B)=t;            \
        !           123:                }
        !           124: #define swaplong(X)    {                       \
        !           125:                char    t;                      \
        !           126:                swapbyte((X)[0], (X)[3]);       \
        !           127:                swapbyte((X)[1], (X)[2]);       \
        !           128:                }
        !           129: #define        swapshort(X) {                          \
        !           130:                swapbyte((X)[0], (X)[1]);       \
        !           131:                }
        !           132: #define swapaddr(X) {                                                  \
        !           133:        swapshort((X))                          /* swap family */       \
        !           134:        /*swapshort(((char *)(X)+2))*/          /* swap port */         \
        !           135:        /*swaplong(((char *)(X)+4))*/           /* swap inet addr */    \
        !           136:        /*swaplong(((char *)(X)+8))*/           /* swap "junk" */       \
        !           137: }
        !           138: /*------------------------------------------------------------
        !           139:   swapmsg
        !           140:        perform some heuristic test to see if packet has to
        !           141:        be re-byte-ordered. If so, byte order and return 1, else
        !           142:        return 0.
        !           143:   ----------------------------------------------------------*/
        !           144: swapmsg(netmsg)
        !           145: NETCTL_MSG     *netmsg;
        !           146: {
        !           147:        union t {
        !           148:                struct  sockaddr_in     addr;
        !           149:                char    saddr[sizeof(struct sockaddr_in)];
        !           150:        } u;
        !           151: 
        !           152:        bcopy(netmsg->mctl_addr, u.saddr, sizeof(u.saddr));
        !           153:        swapaddr(u.saddr);
        !           154:        if (u.addr.sin_family == AF_INET) {
        !           155:                swapnetmsg(netmsg);
        !           156:                return(1);
        !           157:        }
        !           158:        else
        !           159:                return(0);
        !           160: }
        !           161:        
        !           162: /*------------------------------------------------------------
        !           163:   swapresp
        !           164:        perform some heuristic test to see if packet has to
        !           165:        be re-byte-ordered. If so, byte order and return 1, else
        !           166:        return 0.
        !           167:   ----------------------------------------------------------*/
        !           168: swapresp(netresp)
        !           169: NETCTL_RESPONSE        *netresp;
        !           170: {
        !           171:        union t {
        !           172:                struct  sockaddr_in     addr;
        !           173:                char    saddr[sizeof(struct sockaddr_in)];
        !           174:        } u;
        !           175: 
        !           176:        bcopy(netresp->raddr, u.saddr, sizeof(u.saddr));
        !           177:        swapaddr(u.saddr);
        !           178:        if (u.addr.sin_family == AF_INET) {
        !           179:                swapnetresp(netresp);
        !           180:                return(1);
        !           181:        }
        !           182:        else
        !           183:                return(0);
        !           184: }
        !           185: 
        !           186: /*------------------------------------------------------------
        !           187:   swapnetmsg
        !           188:   ----------------------------------------------------------*/
        !           189: swapnetmsg(netmsg)
        !           190: NETCTL_MSG *netmsg;
        !           191: {
        !           192:        char    t;              
        !           193: 
        !           194:        if (debug)
        !           195:                printf("swapnetmsg\n");
        !           196:        swaplong(netmsg->mid_num)
        !           197:        swaplong(netmsg->mpid)
        !           198:        swapaddr(netmsg->maddr)
        !           199:        swapaddr(netmsg->mctl_addr)
        !           200: }
        !           201: /*------------------------------------------------------------
        !           202:   swapnetresp
        !           203:   ----------------------------------------------------------*/
        !           204: swapnetresp(netresp)
        !           205: NETCTL_RESPONSE *netresp;
        !           206: {
        !           207:        char    t;
        !           208: 
        !           209:        swaplong(netresp->rid_num);
        !           210:        if (debug) {
        !           211:                int     i;
        !           212: 
        !           213:                printf("before swapnetresp:");
        !           214:                for (i=0; i<sizeof(netresp->raddr); i++)
        !           215:                        printf("%x ",netresp->raddr[i] & 0xff);
        !           216:                printf("\n");
        !           217:        }
        !           218:        swapaddr(netresp->raddr); 
        !           219:        if (debug) {
        !           220:                int     i;
        !           221: 
        !           222:                printf("swapnetresp:");
        !           223:                for (i=0; i<sizeof(netresp->raddr); i++)
        !           224:                        printf("%x ",netresp->raddr[i] & 0xff);
        !           225:                printf("\n");
        !           226:        }
        !           227: }

unix.superglobalmegacorp.com

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