|
|
1.1 ! root 1: /**************************************************************************** ! 2: Microsoft RPC Version 1.0 ! 3: Copyright Microsoft Corp. 1992 ! 4: nhello Example ! 5: ! 6: FILE: nhellos.c ! 7: ! 8: USAGE: nhellos -p protocol_sequence ! 9: -e endpoint ! 10: -m maxcalls ! 11: -n mincalls ! 12: -f flag for RpcServerListen wait ! 13: -a nhello_sample_nsi_entry_name ! 14: -t name_syntax_type ! 15: ! 16: PURPOSE: Server side of RPC distributed application nhello ! 17: ! 18: FUNCTIONS: main() - registers server as RPC server ! 19: ! 20: COMMENTS: ! 21: ! 22: ****************************************************************************/ ! 23: ! 24: #include <stdlib.h> ! 25: #include <stdio.h> ! 26: #include <ctype.h> ! 27: #include "nhello.h" // header file generated by MIDL compiler ! 28: ! 29: void Usage(char * pszProgramName) ! 30: { ! 31: fprintf(stderr, "Usage: %s\n", pszProgramName); ! 32: fprintf(stderr, " -p protocol_sequence\n"); ! 33: fprintf(stderr, " -e endpoint\n"); ! 34: fprintf(stderr, " -m maxcalls\n"); ! 35: fprintf(stderr, " -n mincalls\n"); ! 36: fprintf(stderr, " -f flag for RpcServerListen wait\n"); ! 37: fprintf(stderr, " -a nhello_sample_nsi_entry_name\n"); ! 38: fprintf(stderr, " -t name_syntax_type\n"); ! 39: exit(1); ! 40: } ! 41: ! 42: void _CRTAPI1 main(int argc, char * argv[]) ! 43: { ! 44: RPC_STATUS status; ! 45: RPC_BINDING_VECTOR * pBindingVector; ! 46: unsigned char * pszEntryName = "/.:/nhello_sample"; ! 47: unsigned char * pszEndpoint = "\\pipe\\nhello"; ! 48: unsigned char * pszProtocolSequence = "ncacn_np"; ! 49: unsigned char * pszSecurity = NULL; ! 50: unsigned int cMinCalls = 1; ! 51: unsigned int cMaxCalls = 20; ! 52: unsigned int fDontWait = FALSE; ! 53: unsigned int fNameSyntaxType = RPC_C_NS_SYNTAX_DEFAULT; ! 54: int i; ! 55: ! 56: /* allow the user to override settings with command line switches */ ! 57: for (i = 1; i < argc; i++) { ! 58: if ((*argv[i] == '-') || (*argv[i] == '/')) { ! 59: switch (tolower(*(argv[i]+1))) { ! 60: case 'p': // protocol sequence ! 61: pszProtocolSequence = argv[++i]; ! 62: break; ! 63: case 'e': ! 64: pszEndpoint = argv[++i]; ! 65: break; ! 66: case 'm': ! 67: cMaxCalls = (unsigned int) atoi(argv[++i]); ! 68: break; ! 69: case 'n': ! 70: cMinCalls = (unsigned int) atoi(argv[++i]); ! 71: break; ! 72: case 'f': ! 73: fDontWait = (unsigned int) atoi(argv[++i]); ! 74: break; ! 75: case 'a': ! 76: pszEntryName = argv[++i]; ! 77: break; ! 78: case 't': ! 79: fNameSyntaxType = (unsigned int) atoi(argv[++i]); ! 80: break; ! 81: case 'h': ! 82: case '?': ! 83: default: ! 84: Usage(argv[0]); ! 85: } ! 86: } ! 87: else ! 88: Usage(argv[0]); ! 89: } ! 90: ! 91: status = RpcServerUseProtseqEp(pszProtocolSequence, ! 92: cMaxCalls, ! 93: pszEndpoint, ! 94: pszSecurity); // Security descriptor ! 95: printf("RpcServerUseProtseqEp returned 0x%x\n", status); ! 96: if (status) { ! 97: exit(status); ! 98: } ! 99: ! 100: status = RpcServerRegisterIf(nhello_ServerIfHandle, // interface to register ! 101: NULL, // MgrTypeUuid ! 102: NULL); // MgrEpv; null means use default ! 103: printf("RpcServerRegisterIf returned 0x%x\n", status); ! 104: if (status) { ! 105: exit(status); ! 106: } ! 107: ! 108: status = RpcServerInqBindings(&pBindingVector); ! 109: printf("RpcServerInqBindings returned 0x%x\n", status); ! 110: if (status) { ! 111: exit(status); ! 112: } ! 113: ! 114: status = RpcNsBindingExport(fNameSyntaxType, // name syntax type ! 115: pszEntryName, // nsi entry name ! 116: nhello_ServerIfHandle, ! 117: pBindingVector, // set in previous call ! 118: NULL); // UUID vector ! 119: printf("RpcNsBindingExport returned 0x%x\n", status); ! 120: if (status) { ! 121: exit(status); ! 122: } ! 123: ! 124: printf("Calling RpcServerListen\n"); ! 125: status = RpcServerListen(cMinCalls, ! 126: cMaxCalls, ! 127: fDontWait); // wait flag ! 128: printf("RpcServerListen returned: 0x%x\n", status); ! 129: if (status) { ! 130: exit(status); ! 131: } ! 132: ! 133: if (fDontWait) { ! 134: printf("Calling RpcMgmtWaitServerListen\n"); ! 135: status = RpcMgmtWaitServerListen(); // wait operation ! 136: printf("RpcMgmtWaitServerListen returned: 0x%x\n", status); ! 137: if (status) { ! 138: exit(status); ! 139: } ! 140: } ! 141: ! 142: } // end main() ! 143: ! 144: ! 145: /*********************************************************************/ ! 146: /* MIDL allocate and free */ ! 147: /*********************************************************************/ ! 148: ! 149: void __RPC_FAR * __RPC_API midl_user_allocate(size_t len) ! 150: { ! 151: return(malloc(len)); ! 152: } ! 153: ! 154: void __RPC_API midl_user_free(void __RPC_FAR * ptr) ! 155: { ! 156: free(ptr); ! 157: } ! 158: ! 159: /* end file nhellos.c */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.