CLIENT.C

/*************************************************************/ 
/** **/
/** Microsoft RPC Examples **/
/** OSF DCE Sample Application **/
/** Copyright 1992 - 1998 Microsoft Corporation **/
/** **/
/*************************************************************/

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>

#include "msg.h" /* header file generated by M/IDL compiler */

#if defined(__RPC_WIN32__) || defined(__RPC_DOS__)

/*
On MS platforms we must include the dceport.h header file
which maps OSF DCE style APIs to MS style APIs.
*/

#include "dceport.h"

#else
#include <pthread.h>
#endif

#ifndef _CRTAPI1
#define _CRTAPI1
#endif

void Usage()
{
printf("Usage : client -n <server_name>\n");
printf(" -t <transport> - optional, default ncacn_ip_tcp\n");
printf(" -e <endpoint> - optional, should match server\n");
printf(" -s <message> - optional, send a different message\n");
printf(" -x - use to stop the server\n");
exit(1);
}

int _CRTAPI1
main(int argc, char *argv[])
{
unsigned32 status;
unsigned char * pszProtocolSequence = (unsigned char *)"ncacn_ip_tcp";
unsigned char * pszNetworkAddress = NULL;
unsigned char * pszEndpoint = NULL;
unsigned char * pszStringBinding = NULL;
unsigned char * pszMessage = (unsigned char *)"Hello World";
int fStopServer = 0;
int i;

printf ("Microsoft RPC Demo - OSF DCE Interop Message Client\n");

for (i = 1; i < argc; i++) {
if ((*argv[i] == '-') || (*argv[i] == '/')) {
switch (tolower(*(argv[i]+1))) {
case 'n': /* network address */
pszNetworkAddress = (unsigned char *)argv[++i];
break;
case 't': /* protocol sequence */
pszProtocolSequence = (unsigned char *)argv[++i];
break;
case 'e': /* network endpoint */
pszEndpoint = (unsigned char *)argv[++i];
break;
case 's': /* update message */
pszMessage = (unsigned char *)argv[++i];
break;
case 'x': /* stop the server */
fStopServer = 1;
break;
case 'h':
case '?':
default:
Usage();
}
}
else
Usage();
}

rpc_string_binding_compose(0, /* no object uuid */
pszProtocolSequence,
pszNetworkAddress,
pszEndpoint,
0, /* no options */
&pszStringBinding,
&status);
if (status) {
printf("rpc_string_binding_compose returned 0x%x\n", status);
return(status);
}

rpc_binding_from_string_binding(pszStringBinding,
&interop_binding_handle,
&status);
if (status) {
printf("rpc_binding_from_string_binding returned 0x%x\n", status);
return(status);
}

rpc_string_free(&pszStringBinding,&status);
if (status) {
printf("rpc_string_free returned 0x%x\n", status);
return(status);
}

TRY {
ClientMessage(pszMessage);

printf("Message sent okay\n");
if (fStopServer)
{
ShutdownServer();
printf("Server shutdown\n");
}
}
CATCH_ALL {
printf("RPC raised exception 0x%x\n", THIS_CATCH);
}
ENDTRY

rpc_binding_free(&interop_binding_handle, &status);
if (status) {
printf("rpc_binding_free returned 0x%x\n", status);
return(status);
}

return(0);
}