Annotation of 43BSDReno/sys/nfs/TEST/billboard/src/bb_server.c, revision 1.1.1.1

1.1       root        1: /*
                      2:  ******************************************************************************
                      3:  *
                      4:  * Module: bb_server.c
                      5:  *
                      6:  * Functions: 
                      7:  *         main()              - The main routine, mostly generated by rpcgen
                      8:  *         bb_server_init()    - Initialize all of the data structures.
                      9:  *         bb_get_ip()         - Get the IP address of the calling function.
                     10:  *         billboard_prog_1()  - The dispatch routine, generated by rpcgen.
                     11:  *
                     12:  *
                     13:  ******************************************************************************
                     14:  */
                     15: 
                     16: /*
                     17:  ******************************************************************************
                     18:  * Include Files
                     19:  ******************************************************************************
                     20:  */
                     21: #include <stdio.h>
                     22: #include <syslog.h>
                     23: #include <rpc/rpc.h>
                     24: #include "common.h"
                     25: #include "protocol.h"
                     26: #include "server.h"
                     27: 
                     28: static void billboard_prog_1();
                     29: char   *itoa();
                     30: 
                     31: 
                     32: 
                     33: /*************************************************************************
                     34: **                                                                     **
                     35: **  main() - The main server routine.  This was generated by rpcgen.   **
                     36: **  It was cut out of the rpcgen'ed code because there needs to be     **
                     37: **  initialization done inside of main.                                        **
                     38: **                                                                     **
                     39: *************************************************************************/
                     40: main()
                     41: {
                     42:        register SVCXPRT *transp;
                     43: 
                     44:        (void) pmap_unset(BILLBOARD_PROG, BILLBOARD_VERS);
                     45: 
                     46:        transp = svcudp_create(RPC_ANYSOCK);
                     47:        if (transp == NULL) {
                     48:                fprintf(stderr, "cannot create udp service.");
                     49:                exit(1);
                     50:        }
                     51:        if (!svc_register(transp, BILLBOARD_PROG, BILLBOARD_VERS, billboard_prog_1, IPPROTO_UDP)) {
                     52:                fprintf(stderr, "unable to register (BILLBOARD_PROG, BILLBOARD_VERS, udp).");
                     53:                exit(1);
                     54:        }
                     55: 
                     56:        transp = svctcp_create(RPC_ANYSOCK, 0, 0);
                     57:        if (transp == NULL) {
                     58:                fprintf(stderr, "cannot create tcp service.");
                     59:                exit(1);
                     60:        }
                     61:        if (!svc_register(transp, BILLBOARD_PROG, BILLBOARD_VERS, billboard_prog_1, IPPROTO_TCP)) {
                     62:                fprintf(stderr, "unable to register (BILLBOARD_PROG, BILLBOARD_VERS, tcp).");
                     63:                exit(1);
                     64:        }
                     65: 
                     66:        /*
                     67:        **  Initialize the server.  Read all of the data structures and
                     68:        **  create the files that do not exist.  
                     69:        */
                     70:        if ( bb_server_init() != BB_SUCCESS )
                     71:        {
                     72:            fprintf( stderr, "ABORTING: Unable to init server database.\n");
                     73:            return BB_FAILURE;
                     74:        }
                     75: 
                     76:        svc_run();
                     77:        fprintf(stderr, "svc_run returned");
                     78:        exit(1);
                     79:        /* NOTREACHED */
                     80: }
                     81: 
                     82: 
                     83: 
                     84: /*************************************************************************
                     85: **                                                                     **
                     86: **  bb_server_init() - Initialize the servers database structures.     **
                     87: **  Setup or create the files if they do not exist.  Most errors with  **
                     88: **  the files will cause an abort.                                     **
                     89: **                                                                     **
                     90: *************************************************************************/
                     91: int
                     92: bb_server_init()
                     93: {
                     94: 
                     95:     if ( bb_read_companies() != BB_SUCCESS )
                     96:     {
                     97:        fprintf( stderr, "Unable to read company data file.\n");
                     98:        return BB_FAILURE;
                     99:     }
                    100: 
                    101:     if ( bb_read_passwords() != BB_SUCCESS )
                    102:     {
                    103:        fprintf( stderr, "Unable to read password file.\n");
                    104:        return BB_FAILURE;
                    105:     }
                    106: 
                    107:     if ( bb_read_phases() != BB_SUCCESS )
                    108:     {
                    109:        fprintf( stderr, "Unable to read phases file.\n");
                    110:        return BB_FAILURE;
                    111:     }
                    112: 
                    113:     if ( bb_read_board() != BB_SUCCESS )
                    114:     {
                    115:        fprintf( stderr, "Unable to read board file.\n");
                    116:        return BB_FAILURE;
                    117:     }
                    118:     
                    119:     return BB_SUCCESS;
                    120: }
                    121: 
                    122: 
                    123: /*************************************************************************
                    124: **                                                                     **
                    125: **  bb_get_ip() - From the transport structure of the caller copy the  **
                    126: **  IP address into an IP structure.                                   **
                    127: **                                                                     **
                    128: *************************************************************************/
                    129: static SVCXPRT *bb_xprt;       /* The xport struct of the request.     */
                    130: 
                    131: void
                    132: bb_get_ip( ip)
                    133:   BB_ip                ip;             /* Pointer to an ip for output.         */
                    134: {
                    135:     char       line[20];       /* Just some space for an ip number.    */
                    136: 
                    137:     (void)memset( (char *)ip, (int)0, (int)BB_IP_ADDR_LEN);
                    138:     sprintf( line, "%u.", bb_xprt->xp_raddr.sin_addr.S_un.S_un_b.s_b1);
                    139:     strncpy( ip, line, 4);
                    140:     sprintf( line, "%u.", bb_xprt->xp_raddr.sin_addr.S_un.S_un_b.s_b2);
                    141:     strncat( ip, line, 4);
                    142:     sprintf( line, "%u.", bb_xprt->xp_raddr.sin_addr.S_un.S_un_b.s_b3);
                    143:     strncat( ip, line, 4);
                    144:     sprintf( line, "%u", bb_xprt->xp_raddr.sin_addr.S_un.S_un_b.s_b4);
                    145:     strncat( ip, line, 3);
                    146: }
                    147: 
                    148: 
                    149: static void
                    150: billboard_prog_1(rqstp, transp)
                    151:        struct svc_req *rqstp;
                    152:        register SVCXPRT *transp;
                    153: {
                    154:        union {
                    155:                BB_set_in bb_set_1_arg;
                    156:                BB_set_in bb_unset_1_arg;
                    157:                BB_list_in bb_alist_1_arg;
                    158:                BB_list_in bb_blist_1_arg;
                    159:                BB_list_in bb_clist_1_arg;
                    160:                BB_list_in bb_dlist_1_arg;
                    161:                BB_passwd_in bb_passwd_set_1_arg;
                    162:        } argument;
                    163:        char *result;
                    164:        bool_t (*xdr_argument)(), (*xdr_result)();
                    165:        char *(*local)();
                    166: 
                    167:        /*
                    168:        **  This was added after rpcgen.
                    169:        */
                    170:        bb_xprt = transp;
                    171: 
                    172: 
                    173:        switch (rqstp->rq_proc) {
                    174:        case NULLPROC:
                    175:                (void) svc_sendreply(transp, xdr_void, (char *)NULL);
                    176:                return;
                    177: 
                    178:        case BB_SET:
                    179:                xdr_argument = xdr_BB_set_in;
                    180:                xdr_result = xdr_BB_set_out;
                    181:                local = (char *(*)()) bb_set_1;
                    182:                break;
                    183: 
                    184:        case BB_UNSET:
                    185:                xdr_argument = xdr_BB_set_in;
                    186:                xdr_result = xdr_BB_set_out;
                    187:                local = (char *(*)()) bb_unset_1;
                    188:                break;
                    189: 
                    190:        case BB_ALIST:
                    191:                xdr_argument = xdr_BB_list_in;
                    192:                xdr_result = xdr_BB_list_out;
                    193:                local = (char *(*)()) bb_alist_1;
                    194:                break;
                    195: 
                    196:        case BB_BLIST:
                    197:                xdr_argument = xdr_BB_list_in;
                    198:                xdr_result = xdr_BB_list_out;
                    199:                local = (char *(*)()) bb_blist_1;
                    200:                break;
                    201: 
                    202:        case BB_CLIST:
                    203:                xdr_argument = xdr_BB_list_in;
                    204:                xdr_result = xdr_BB_list_out;
                    205:                local = (char *(*)()) bb_clist_1;
                    206:                break;
                    207: 
                    208:        case BB_DLIST:
                    209:                xdr_argument = xdr_BB_list_in;
                    210:                xdr_result = xdr_BB_list_out;
                    211:                local = (char *(*)()) bb_dlist_1;
                    212:                break;
                    213: 
                    214:        case BB_PASSWD_SET:
                    215:                xdr_argument = xdr_BB_passwd_in;
                    216:                xdr_result = xdr_int;
                    217:                local = (char *(*)()) bb_passwd_set_1;
                    218:                break;
                    219: 
                    220:        case BB_GRID:
                    221:                xdr_argument = xdr_void;
                    222:                xdr_result = xdr_BB_grid;
                    223:                local = (char *(*)()) bb_grid_1;
                    224:                break;
                    225: 
                    226:        default:
                    227:                svcerr_noproc(transp);
                    228:                return;
                    229:        }
                    230:        bzero((char *)&argument, sizeof(argument));
                    231:        if (!svc_getargs(transp, xdr_argument, &argument)) {
                    232:                svcerr_decode(transp);
                    233:                return;
                    234:        }
                    235:        result = (*local)(&argument, rqstp);
                    236:        if (result != NULL && !svc_sendreply(transp, xdr_result, result)) {
                    237:                svcerr_systemerr(transp);
                    238:        }
                    239:        if (!svc_freeargs(transp, xdr_argument, &argument)) {
                    240:                fprintf(stderr, "unable to free arguments");
                    241:                exit(1);
                    242:        }
                    243:        return;
                    244: }

unix.superglobalmegacorp.com

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