|
|
1.1 root 1: /****************************************************************************
2: Microsoft RPC Version 1.0
3: Copyright Microsoft Corp. 1992
4: xmit Example
5:
6: FILE: xmitp.c
7: PURPOSE: Remote procedures that are linked with the server
8: side of RPC distributed application
9: FUNCTIONS: ModifyListProc() - changes the doubly-linked list
10: Shutdown() - shuts down the server side
11: COMMENTS: Linked with xmits.c
12:
13: ****************************************************************************/
14: #include <stdlib.h>
15: #include <stdio.h>
16:
17: #include <rpc.h>
18: #include <rpcndr.h>
19: #include "xmit.h" // header file generated by MIDL compiler
20:
21:
22: /****************************************************************************
23: Function: ModifyListProc
24:
25: Parameters: pFirst : Pointer to the head of a doubly-linked list.
26:
27: Returns: none
28:
29: Purpose: Display the list passed to the function.
30: For each element in the list, add another element.
31: Display the modified list.
32:
33: Comments: This sample is meant to demonstrate a typical use of the
34: transmit_as attribute: A complex data structure is simplified
35: for transmission over the network, restored on the server,
36: then manipulated by the remote function on the server.
37: The modified data is returned to the client.
38:
39: Calls InsertNewNode(param1, param2), a utility routine
40: in xmits.c that creates a new node, assigns to it the
41: value param1, and inserts it into the list after param2.
42: ****************************************************************************/
43: DOUBLE_LINK_TYPE * InsertNewNode(short sValue, DOUBLE_LINK_TYPE * pPrevious);
44:
45: void ModifyListProc(DOUBLE_LINK_TYPE * pFirst)
46: {
47: DOUBLE_LINK_TYPE * pList = pFirst;
48: printf("ModifyListProc: Display contents of doubly linked list:\n");
49: while (pList != NULL) {
50: printf("pList @0x%x = %d, Next = 0x%x\n", pList, pList->sNumber, pList->pNext);
51: pList = pList->pNext;
52: }
53: printf("ModifyListProc: Add one node for every node in tree\n");
54: for (pList = pFirst; pList != NULL; pList = pList->pNext) {
55: pList = InsertNewNode(pList->sNumber + (short) 1, pList);
56: }
57: printf("ModifyListProc: Display modified contents of doubly linked list:\n");
58: for (pList = pFirst; pList != NULL; pList = pList->pNext)
59: printf("pList @0x%x = %d, Next = 0x%x\n", pList, pList->sNumber, pList->pNext);
60: }
61:
62: /****************************************************************************
63: Function: Shutdown
64:
65: Parameters: none
66:
67: Returns: none
68:
69: Purpose: Make the server stop listening for client applications.
70: Comments: The two NULL parameters passed to RpcServerUnregisterIf are
71: a show of brute force: they tell the function to turn
72: off all registered interfaces. See the RPC API function
73: reference for more information about these functions.
74: ****************************************************************************/
75:
76:
77: void Shutdown(void)
78: {
79: RPC_STATUS status;
80:
81: printf("Calling RpcMgmtStopServerListening\n");
82: status = RpcMgmtStopServerListening(NULL);
83: printf("RpcMgmtStopServerListening returned: 0x%x\n", status);
84: if (status) {
85: exit(2);
86: }
87:
88: printf("Calling RpcServerUnregisterIf\n");
89: status = RpcServerUnregisterIf(NULL, NULL, FALSE);
90: printf("RpcServerUnregisterIf returned 0x%x\n", status);
91: if (status) {
92: exit(2);
93: }
94: }
95:
96: /* end of file xmitp.c */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.