BSD 4_3_Net_2 release
[unix-history] / usr / src / sys / tests / nfs / billboard / src / billboard_rpc.c
CommitLineData
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 */
43CLIENT *client_handle_p; /* request client handle */
44char server_name[_SERVER_NAME_LEN]; /* name of the billboard server */
45
46/*
47 ******************************************************************************
48 * Function Declarations
49 ******************************************************************************
50 */
51static CLIENT *_get_handle();
52char *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 */
77char *
78bb_call_rpc(func_p, arg_p)
79char *(*func_p)();
80char *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 */
120static
121CLIENT *
122_get_handle()
123{
124char *server_p;
125char buffer[BB_MAX_LINE_LEN];
126char *getenv();
127CLIENT *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