Annotation of 43BSDReno/sys/nfs/TEST/billboard/src/bb_server.c, revision 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.