|
|
1.1 ! root 1: /* ! 2: ****************************************************************************** ! 3: * ! 4: * Module: billboard_rpc.c ! 5: * ! 6: * Description: billboard_rpc.c ! 7: * Conatins routines that handle RPC calls. ! 8: * ! 9: * Functions: ! 10: * bb_call_rpc(func_p, arg_p) ! 11: * _get_handle() ! 12: * ! 13: * Notes: ! 14: * ! 15: ****************************************************************************** ! 16: */ ! 17: /* ! 18: ****************************************************************************** ! 19: * Include Files ! 20: ****************************************************************************** ! 21: */ ! 22: #include <stdio.h> ! 23: #include <rpc/rpc.h> ! 24: #include "common.h" ! 25: #include "protocol.h" ! 26: ! 27: ! 28: /* ! 29: ****************************************************************************** ! 30: * Manifest Constants ! 31: ****************************************************************************** ! 32: */ ! 33: #define _SERVER_NAME "BB_SERVER" /* environment variable to ! 34: set the billboard server ! 35: name */ ! 36: #define _SERVER_NAME_LEN 64 ! 37: ! 38: /* ! 39: ****************************************************************************** ! 40: * Global Declarations ! 41: ****************************************************************************** ! 42: */ ! 43: CLIENT *client_handle_p; /* request client handle */ ! 44: char server_name[_SERVER_NAME_LEN]; /* name of the billboard server */ ! 45: ! 46: /* ! 47: ****************************************************************************** ! 48: * Function Declarations ! 49: ****************************************************************************** ! 50: */ ! 51: static CLIENT *_get_handle(); ! 52: char *bb_call_rpc(); ! 53: ! 54: /* ! 55: ****************************************************************************** ! 56: * ! 57: * Function: bb_call_rpc ! 58: * ! 59: * Description: ! 60: * Gets client handle and does the remote procedure call. ! 61: * ! 62: * Input: ! 63: * func_p -- address of remote procedure ! 64: * arg_p -- input arguments to the remote procedure ! 65: * ! 66: * Output: ! 67: * ! 68: * Returns: ! 69: * result of the RPC call ! 70: * ! 71: * Side Effects: ! 72: * ! 73: * Notes: ! 74: * ! 75: ****************************************************************************** ! 76: */ ! 77: char * ! 78: bb_call_rpc(func_p, arg_p) ! 79: char *(*func_p)(); ! 80: char *arg_p; ! 81: { ! 82: ! 83: /* ! 84: * gets client handle ! 85: */ ! 86: if (client_handle_p == NULL) ! 87: client_handle_p= _get_handle(); ! 88: ! 89: /* ! 90: * do the RPC call ! 91: */ ! 92: return((char *)(*func_p)(arg_p, client_handle_p)); ! 93: } ! 94: ! 95: ! 96: /* ! 97: ****************************************************************************** ! 98: * ! 99: * Function: _get_handle ! 100: * ! 101: * Description: ! 102: * Gets client handle for the RPC call. ! 103: * The server name may be specified in the environment ! 104: * variable BB_SERVER, otherwise, the user will be prompted ! 105: * for one. ! 106: * ! 107: * Input: ! 108: * ! 109: * Output: ! 110: * ! 111: * Returns: ! 112: * client handle ! 113: * ! 114: * Side Effects: ! 115: * ! 116: * Notes: ! 117: * ! 118: ****************************************************************************** ! 119: */ ! 120: static ! 121: CLIENT * ! 122: _get_handle() ! 123: { ! 124: char *server_p; ! 125: char buffer[BB_MAX_LINE_LEN]; ! 126: char *getenv(); ! 127: CLIENT *cl_handle_p; ! 128: ! 129: /* ! 130: * gets the server name from the environment variable, if not specified ! 131: * the user will be prompted ! 132: */ ! 133: if ((server_p= getenv(_SERVER_NAME)) == NULL) { ! 134: printf("Server name: "); ! 135: gets(buffer); ! 136: sscanf(buffer, "%s", server_name); ! 137: } else ! 138: strcpy(server_name, server_p); ! 139: ! 140: /* ! 141: * gets a client handle ! 142: */ ! 143: if ((cl_handle_p= clnt_create(server_name, BILLBOARD_PROG, ! 144: BILLBOARD_VERS, "tcp")) == NULL) { ! 145: clnt_pcreateerror(server_name); ! 146: exit(1); ! 147: } ! 148: ! 149: return(cl_handle_p); ! 150: } ! 151:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.