Annotation of cci/usr/src/ucb/talk/convert.c, revision 1.1.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.