|
|
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.