AUTOS.C
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:6k
源码类别:

Windows编程

开发平台:

Visual C++

  1. /****************************************************************************
  2.                    Microsoft RPC Version 2.0
  3.            Copyright Microsoft Corp. 1992, 1993, 1994- 1996
  4.                           Auto Example
  5.     FILE:       autos.c
  6.     USAGE:      autos   -p protocol_sequence
  7.                         -e endpoint
  8.                         -m maxcalls
  9.                         -n mincalls
  10.                         -f flag for RpcServerListen wait
  11.                         -a auto_sample_nsi_entry_name
  12.                         -t name_syntax_type
  13.     PURPOSE:    Server side of RPC distributed application Auto
  14.     FUNCTIONS:  main() - registers server as RPC server
  15.     COMMENTS:   This distributed application (time stamp) is implemented
  16.                 using an auto handle.  The server side of the application
  17.                 must export its binding information and make it available
  18.                 to the clients.  The auto handle requires a location
  19.                 service running on a server that is accessible to the client.
  20. ****************************************************************************/
  21. #include <stdlib.h>
  22. #include <stdio.h>
  23. #include <ctype.h>
  24. #include "auto.h"    // header file generated by MIDL compiler
  25. void Usage(char * pszProgramName)
  26. {
  27.     fprintf(stderr, "Usage:  %sn", pszProgramName);
  28.     fprintf(stderr, " -p protocol_sequencen");
  29.     fprintf(stderr, " -e endpointn");
  30.     fprintf(stderr, " -m maxcallsn");
  31.     fprintf(stderr, " -n mincallsn");
  32.     fprintf(stderr, " -f flag for RpcServerListen waitn");
  33.     fprintf(stderr, " -a auto_sample_nsi_entry_namen");
  34.     fprintf(stderr, " -t name_syntax_typen");
  35.     exit(1);
  36. }
  37. void _CRTAPI1 main(int argc, char * argv[])
  38. {
  39.     RPC_STATUS status;
  40.     RPC_BINDING_VECTOR * pBindingVector;
  41.     unsigned char * pszAutoEntryName    = "/.:/Autohandle_sample";
  42.     unsigned char * pszEndpoint         = "\pipe\auto";
  43.     unsigned char * pszProtocolSequence = "ncacn_np";
  44.     unsigned char * pszSecurity         = NULL;
  45.     unsigned int    cMinCalls           = 1;
  46.     unsigned int    cMaxCalls           = 20;
  47.     unsigned int    fDontWait           = FALSE;
  48.     unsigned int    fNameSyntaxType     = RPC_C_NS_SYNTAX_DEFAULT;
  49.     int i;
  50.     /* allow the user to override settings with command line switches */
  51.     for (i = 1; i < argc; i++) {
  52.         if ((*argv[i] == '-') || (*argv[i] == '/')) {
  53.             switch (tolower(*(argv[i]+1))) {
  54.             case 'p':  // protocol sequence
  55.                 pszProtocolSequence = argv[++i];
  56.                 break;
  57.             case 'e':
  58.                 pszEndpoint = argv[++i];
  59.                 break;
  60.             case 'm':
  61.                 cMaxCalls = (unsigned int) atoi(argv[++i]);
  62.                 break;
  63.             case 'n':
  64.                 cMinCalls = (unsigned int) atoi(argv[++i]);
  65.                 break;
  66.             case 'f':
  67.                 fDontWait = (unsigned int) atoi(argv[++i]);
  68.                 break;
  69.             case 'a':
  70.                 pszAutoEntryName = argv[++i];
  71.                 break;
  72.             case 't':
  73.                 fNameSyntaxType = (unsigned int) atoi(argv[++i]);
  74.                 break;
  75.             case 'h':
  76.             case '?':
  77.             default:
  78.                 Usage(argv[0]);
  79.             }
  80.         }
  81.         else
  82.             Usage(argv[0]);
  83.     }
  84.     status = RpcServerUseProtseqEp(pszProtocolSequence,
  85.                                    cMaxCalls,
  86.                                    pszEndpoint,
  87.                                    pszSecurity);  // Security descriptor
  88.     printf("RpcServerUseProtseqEp returned 0x%xn", status);
  89.     if (status) {
  90.         exit(status);
  91.     }
  92.     status = RpcServerRegisterIf(autoh_ServerIfHandle,  // interface to register
  93.                                  NULL,   // MgrTypeUuid
  94.                                  NULL);  // MgrEpv; null means use default
  95.     printf("RpcServerRegisterIf returned 0x%xn", status);
  96.     if (status) {
  97.         exit(status);
  98.     }
  99.     status = RpcServerInqBindings(&pBindingVector);
  100.     printf("RpcServerInqBindings returned 0x%xn", status);
  101.     if (status) {
  102.         exit(status);
  103.     }
  104.     status = RpcNsBindingExport(fNameSyntaxType,   // name syntax type
  105.                                 pszAutoEntryName,  // nsi entry name
  106.                                 autoh_ServerIfHandle,
  107.                                 pBindingVector,    // set in previous call
  108.                                 NULL);             // UUID vector
  109.     printf("RpcNsBindingExport returned 0x%xn", status);
  110.     if (status) {
  111.         exit(status);
  112.     }
  113.     printf("Calling RpcServerListenn");
  114.     status = RpcServerListen(cMinCalls,
  115.                              cMaxCalls,
  116.                              fDontWait);  // wait flag
  117.     printf("RpcServerListen returned: 0x%xn", status);
  118.     if (status) {
  119.         exit(status);
  120.     }
  121.     if (fDontWait) {
  122.         printf("Calling RpcMgmtWaitServerListenn");
  123.         status = RpcMgmtWaitServerListen();  //  wait operation
  124.         printf("RpcMgmtWaitServerListen returned: 0x%xn", status);
  125.         if (status) {
  126.             exit(status);
  127.         }
  128.     }
  129. }  // end main()
  130. /*********************************************************************/
  131. /*                 MIDL allocate and free                            */
  132. /*********************************************************************/
  133. void __RPC_FAR * __RPC_USER midl_user_allocate(size_t len)
  134. {
  135.     return(malloc(len));
  136. }
  137. void __RPC_USER midl_user_free(void __RPC_FAR * ptr)
  138. {
  139.     free(ptr);
  140. }
  141. /* end file autos.c */