4.4BSD/usr/src/sys/tests/nfs/billboard/src/billboard_rpc.c

Compare this file to the similar file:
Show the results in this format:

/*
 ******************************************************************************
 *
 * Module: billboard_rpc.c
 *
 * Description: billboard_rpc.c
 *		Conatins routines that handle RPC calls.
 *
 * Functions:
 *	bb_call_rpc(func_p, arg_p)
 *	_get_handle()
 *
 * Notes:
 *
 ******************************************************************************
 */
/*
 ******************************************************************************
 * Include Files
 ******************************************************************************
 */
#include <stdio.h>
#include <rpc/rpc.h>
#include "common.h"
#include "protocol.h"


/*
 ******************************************************************************
 * Manifest Constants
 ******************************************************************************
 */
#define	_SERVER_NAME		"BB_SERVER"	/* environment variable to
						   set the billboard server 
						   name */
#define	_SERVER_NAME_LEN	64

/*
 ******************************************************************************
 * Global Declarations
 ******************************************************************************
 */
CLIENT	*client_handle_p;		/* request client handle */
char	server_name[_SERVER_NAME_LEN]; 	/* name of the billboard server */

/*
 ******************************************************************************
 * Function Declarations
 ******************************************************************************
 */
static CLIENT 	*_get_handle();
char 		*bb_call_rpc();

/*
 ******************************************************************************
 *
 * Function: bb_call_rpc
 *
 * Description:
 *	Gets client handle and does the remote procedure call.
 *
 * Input:
 *	func_p -- address of remote procedure 
 *	arg_p -- input arguments to the remote procedure
 *
 * Output:
 *
 * Returns:
 *	result of the RPC call
 *
 * Side Effects:
 *
 * Notes:
 *
 ******************************************************************************
 */
char *
bb_call_rpc(func_p, arg_p)
char	*(*func_p)();
char	*arg_p;
{

	/*
	 * gets client handle
	 */
	if (client_handle_p == NULL)
		client_handle_p= _get_handle();

	/*
	 * do the RPC call
	 */
	return((char *)(*func_p)(arg_p, client_handle_p));
}


/*
 ******************************************************************************
 *
 * Function: _get_handle
 *
 * Description:
 *	Gets client handle for the RPC call.
 *	The server name may be specified in the environment      
 *	variable BB_SERVER, otherwise, the user will be prompted 
 *	for one.						
 *
 * Input:
 *
 * Output:
 *
 * Returns:
 *	client handle
 *
 * Side Effects:
 *
 * Notes:
 *
 ******************************************************************************
 */
static
CLIENT *
_get_handle()
{
char	*server_p;
char	buffer[BB_MAX_LINE_LEN];
char	*getenv();
CLIENT 	*cl_handle_p;

	/*
	 * gets the server name from the environment variable, if not specified
	 * the user will be prompted
	 */
	if ((server_p= getenv(_SERVER_NAME)) == NULL) {
		printf("Server name: ");
		gets(buffer);
		sscanf(buffer, "%s", server_name);		
	} else
		strcpy(server_name, server_p);

	/*
	 * gets a client handle
	 */
	if ((cl_handle_p= clnt_create(server_name, BILLBOARD_PROG, 
					BILLBOARD_VERS, "tcp")) == NULL) {
		clnt_pcreateerror(server_name);
		exit(1);
	}

	return(cl_handle_p);
}