|
|
1.1 root 1: /****************************************************************************
2: Microsoft RPC Version 1.0 Alpha
3: October 1991
4: Hello2 Example
5:
6: FILE: hello2\client.c
7: USAGE: client <servername>
8: where <servername> is the name of the server running the
9: server side of the distributed application
10: PURPOSE: Client side of RPC distributed application hello2
11: FUNCTIONS: main() - calls remote procedure HelloProc2
12: COMMENTS:
13: This version of the distributed application that prints
14: "hello, world" on the server features a client that
15: manages its connection to the server. It uses the binding
16: handle hRpcHello that is defined in the file hello2.h.
17:
18: ****************************************************************************/
19: #include <stdio.h>
20: #include <string.h>
21: #include <stdlib.h>
22: #include <rpc.h> // RPC API functions, types
23: #include "hello2.h" // RPC data for this interface
24:
25: #define MAXPATH 300 // arbitrary large size for server, pipe path
26:
27: void main(int argc, char **argv)
28: {
29: RPC_STATUS status; // returned by RPC API function
30: char * pszRpcPort = "hello2";
31: char szServerPath[MAXPATH]; // complete path
32:
33: /* Select named pipes as the transport type and provide the */
34: /* path to the server and named pipe that is used for RPC. */
35: /* The client specifies the local pipe name in the form: */
36: /* \device\namedpipe\pipename */
37: /* The client specifies the remote pipe name in the form: */
38: /* \device\lanmanredirector\servername\pipe\pipename */
39: /* In this example, the pipename is "hello2" */
40:
41: if (argc == 2) {
42: strcpy(szServerPath, "\\device\\lanmanredirector\\");
43: strcat(szServerPath, argv[1]); // servername
44: strcat(szServerPath, "\\pipe\\");
45: strcat(szServerPath, pszRpcPort);
46: }
47: else {
48: strcpy(szServerPath, "\\device\\namedpipe\\");
49: strcat(szServerPath, pszRpcPort);
50: }
51:
52: hello2_ProtocolStack.TransportType = RPC_TRANSPORT_NAMEPIPE;
53: hello2_ProtocolStack.TransportInfo = szServerPath;
54: hello2_ProtocolStack.TransportInfoLength = \
55: strlen(szServerPath) + 1; // add 1 for terminating null
56:
57: /* Call the Microsoft RPC V1.0 Alpha API function that lets */
58: /* the client establish a connection with the server. */
59: /* NOTE: This API function will be replaced in future */
60: /* releases by the standard DCE RPC function. */
61:
62: status = RpcBindToInterface(&hello2_ProtocolStack,
63: 0L,
64: &hrpcHello);
65: if (status) {
66: printf("RpcBindToInterface returned 0x%x\n", status);
67: printf("%s length = %d\n", hello2_ProtocolStack.TransportInfo,
68: hello2_ProtocolStack.TransportInfoLength);
69: exit(2);
70: }
71:
72: HelloProc2(); // call the remote procedure
73:
74: status = RpcUnbind(hrpcHello); // remote calls done; unbind
75: if (status) {
76: printf("RpcUnbind returned 0x%x\n", status);
77: exit(2);
78: }
79: exit(0);
80: } /* end \hello2\client.c */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.