|
|
1.1 ! root 1: /**************************************************************************** ! 2: Microsoft RPC Version 1.0 ! 3: Copyright Microsoft Corp. 1992 ! 4: usrdef Example ! 5: ! 6: FILE: usrdefc.c ! 7: USAGE: client -n network_address ! 8: -p protocol_sequence ! 9: -e endpoint ! 10: -o options ! 11: -u uuid ! 12: ! 13: PURPOSE: Client side of RPC distributed application ! 14: FUNCTIONS: main() - binds to server and calls remote procedure ! 15: COMMENTS: ! 16: ****************************************************************************/ ! 17: #include <stdio.h> ! 18: #include <string.h> ! 19: #include <stdlib.h> ! 20: #include <rpc.h> // RPC API functions, types ! 21: #include "usrdef.h" // header file generated by MIDL compiler ! 22: ! 23: unsigned char * pszStringBinding; ! 24: ! 25: void Usage(char * pszProgramName) ! 26: { ! 27: fprintf(stderr, "Usage: %s\n", pszProgramName); ! 28: fprintf(stderr, " -p protocol_sequence\n"); ! 29: fprintf(stderr, " -n network_address\n"); ! 30: fprintf(stderr, " -e endpoint\n"); ! 31: fprintf(stderr, " -o options\n"); ! 32: fprintf(stderr, " -u uuid\n"); ! 33: fprintf(stderr, " -s string\n"); ! 34: exit(1); ! 35: } ! 36: ! 37: void main(int argc, char **argv) ! 38: { ! 39: int i; ! 40: DATA_HANDLE_TYPE dhBinding; ! 41: unsigned char * pszString = "hello, world"; ! 42: ! 43: dhBinding.pszProtocolSequence = "ncacn_np"; ! 44: dhBinding.pszUuid = "12345678-1234-1234-1234-123456789ABC"; ! 45: dhBinding.pszEndpoint = "\\pipe\\usrdef"; ! 46: dhBinding.pszNetworkAddress = NULL; ! 47: dhBinding.pszOptions = NULL; ! 48: ! 49: // allow the user to override settings with command line switches ! 50: for (i = 1; i < argc; i++) { ! 51: if ((*argv[i] == '-') || (*argv[i] == '/')) { ! 52: switch (tolower(*(argv[i]+1))) { ! 53: case 'p': // protocol sequence ! 54: dhBinding.pszProtocolSequence = argv[++i]; ! 55: break; ! 56: case 'n': // network address ! 57: dhBinding.pszNetworkAddress = argv[++i]; ! 58: break; ! 59: case 'e': ! 60: dhBinding.pszEndpoint = argv[++i]; ! 61: break; ! 62: case 'o': ! 63: dhBinding.pszOptions = argv[++i]; ! 64: break; ! 65: case 'u': ! 66: dhBinding.pszUuid = argv[++i]; ! 67: break; ! 68: case 's': ! 69: pszString = argv[++i]; ! 70: break; ! 71: case 'h': ! 72: case '?': ! 73: default: ! 74: Usage(argv[0]); ! 75: } ! 76: } ! 77: else ! 78: Usage(argv[0]); ! 79: } ! 80: ! 81: printf("Calling the remote procedure 'UsrdefProc'\n"); ! 82: ! 83: UsrdefProc(dhBinding, pszString); // call the remote procedure ! 84: ! 85: printf("Calling the remote procedure 'Shutdown'\n"); ! 86: Shutdown(dhBinding); // shut down the server side ! 87: ! 88: exit(0); ! 89: } ! 90: ! 91: RPC_BINDING_HANDLE DATA_HANDLE_TYPE_bind(DATA_HANDLE_TYPE dh1) ! 92: { ! 93: RPC_STATUS status; // returned by RPC API functions ! 94: RPC_BINDING_HANDLE hBinding; ! 95: ! 96: printf("Within DATA_HANDLE_TYPE_bind function:\n"); ! 97: status = RpcStringBindingCompose(dh1.pszUuid, ! 98: dh1.pszProtocolSequence, ! 99: dh1.pszNetworkAddress, ! 100: dh1.pszEndpoint, ! 101: dh1.pszOptions, ! 102: &pszStringBinding); ! 103: printf("RpcStringBindingCompose returned 0x%x\n", status); ! 104: printf("pszStringBinding = %s\n", pszStringBinding); ! 105: if (status) ! 106: exit(2); ! 107: ! 108: status = RpcBindingFromStringBinding(pszStringBinding, ! 109: &hBinding); ! 110: printf("RpcBindingFromStringBinding returned 0x%x\n", status); ! 111: if (status) ! 112: exit(2); ! 113: ! 114: return(hBinding); ! 115: } ! 116: ! 117: void DATA_HANDLE_TYPE_unbind(DATA_HANDLE_TYPE dh1, RPC_BINDING_HANDLE h1) ! 118: { ! 119: ! 120: RPC_STATUS status; // returned by RPC API functions ! 121: ! 122: printf("Within DATA_HANDLE_TYPE_unbind function:\n"); ! 123: printf("Unbinding handle for %s\n", dh1.pszEndpoint); ! 124: ! 125: status = RpcBindingFree(&h1); // unbind ! 126: printf("RpcBindingFree returned 0x%x\n", status); ! 127: status = RpcStringFree(&pszStringBinding); // remote calls done; unbind ! 128: printf("RpcStringFree returned 0x%x\n", status); ! 129: } ! 130: ! 131: // ==================================================================== ! 132: // MIDL allocate and free ! 133: // ==================================================================== ! 134: ! 135: ! 136: void * MIDL_user_allocate(size_t len) ! 137: { ! 138: return(malloc(len)); ! 139: } ! 140: ! 141: void MIDL_user_free(void * ptr) ! 142: { ! 143: free(ptr); ! 144: } ! 145: ! 146: /* end usrdefc.c */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.