Commit | Line | Data |
---|---|---|
bb780e4a C |
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 |