Annotation of mstools/samples/rpc/cluuid/cluuids.c, revision 1.1

1.1     ! root        1: /****************************************************************************
        !             2:                   Microsoft RPC Version 1.0
        !             3:                Copyright Microsoft Corp. 1992
        !             4:                       Cluuid Example
        !             5: 
        !             6:     FILE:       cluuids.c
        !             7: 
        !             8:     USAGE:      cluuids  -p protocol_sequence
        !             9:                          -e endpoint
        !            10:                          -m max calls
        !            11:                          -n min calls
        !            12:                          -f flag for RpcServerListen
        !            13:                          -1 client object uuid
        !            14:                          -2 manager epv uuid
        !            15: 
        !            16:     PURPOSE:    Server side of RPC distributed application hello
        !            17: 
        !            18:     FUNCTIONS:  main() - registers server as RPC server
        !            19: 
        !            20:     COMMENTS:   Print "hello, world" on the server.
        !            21:                 When you supply a type UUID, the client must
        !            22:                 supply the same UUID.
        !            23: 
        !            24: ****************************************************************************/
        !            25: 
        !            26: #include <stdio.h>
        !            27: #include <stdlib.h>
        !            28: #include <string.h>
        !            29: #include <ctype.h>
        !            30: #include "cluuid.h"    // header file generated by MIDL compiler
        !            31: 
        !            32: // the second implementation of the remote procedure
        !            33: extern void HelloProc2(unsigned char * pszString);
        !            34: 
        !            35: #define PURPOSE \
        !            36: "This Microsoft RPC Version 1.0 sample program demonstrates how\n\
        !            37: to supply multiple implementations of the remote procedure\n\
        !            38: specified in the interface. It also demonstrates how the client\n\
        !            39: selects among the implementations by providing a client object uuid.\n\n"
        !            40: 
        !            41: #define NULL_UUID_STRING "00000000-0000-0000-0000-000000000000"
        !            42: 
        !            43: void Usage(char * pszProgramName)
        !            44: {
        !            45:     fprintf(stderr, "%s", PURPOSE);
        !            46:     fprintf(stderr, "Usage:  %s\n", pszProgramName);
        !            47:     fprintf(stderr, " -p protocol_sequence\n");
        !            48:     fprintf(stderr, " -e endpoint\n");
        !            49:     fprintf(stderr, " -m maxcalls\n");
        !            50:     fprintf(stderr, " -n mincalls\n");
        !            51:     fprintf(stderr, " -f flag_wait_op\n");
        !            52:     fprintf(stderr, " -1 client uuid\n");
        !            53:     fprintf(stderr, " -2 manager uuid\n");
        !            54:     exit(1);
        !            55: }
        !            56: 
        !            57: /* main:  register the interface, start listening for clients */
        !            58: void _CRTAPI1 main(int argc, char * argv[])
        !            59: {
        !            60:     RPC_STATUS status;
        !            61:     UUID MgrTypeUuid, ClientUuid;
        !            62:     unsigned char * pszProtocolSequence = "ncacn_np";
        !            63:     unsigned char * pszSecurity         = NULL;
        !            64:     unsigned char * pszClientUuid       = NULL_UUID_STRING;
        !            65:     unsigned char * pszMgrTypeUuid      = "11111111-1111-1111-1111-111111111111";
        !            66:     unsigned char * pszEndpoint         = "\\pipe\\cluuid";
        !            67:     unsigned int    cMinCalls           = 1;
        !            68:     unsigned int    cMaxCalls           = 20;
        !            69:     unsigned int    fDontWait           = FALSE;
        !            70:     int i;
        !            71: 
        !            72:     cluuid_SERVER_EPV epv2;    // the mgr_epv for the 2nd implementation
        !            73: 
        !            74:     /* allow the user to override settings with command line switches */
        !            75:     for (i = 1; i < argc; i++) {
        !            76:         if ((*argv[i] == '-') || (*argv[i] == '/')) {
        !            77:             switch (tolower(*(argv[i]+1))) {
        !            78:             case 'p':  // protocol sequence
        !            79:                 pszProtocolSequence = argv[++i];
        !            80:                 break;
        !            81:             case 'e':
        !            82:                 pszEndpoint = argv[++i];
        !            83:                 break;
        !            84:             case 'm':
        !            85:                 cMaxCalls = (unsigned int) atoi(argv[++i]);
        !            86:                 break;
        !            87:             case 'n':
        !            88:                 cMinCalls = (unsigned int) atoi(argv[++i]);
        !            89:                 break;
        !            90:             case 'f':
        !            91:                 fDontWait = (unsigned int) atoi(argv[++i]);
        !            92:                 break;
        !            93:             case '1':
        !            94:                 pszMgrTypeUuid = argv[++i];
        !            95:                 break;
        !            96:             case '2':
        !            97:                 pszClientUuid = argv[++i];
        !            98:                 break;
        !            99:             case 'h':
        !           100:             case '?':
        !           101:             default:
        !           102:                 Usage(argv[0]);
        !           103:             }
        !           104:         }
        !           105:         else
        !           106:             Usage(argv[0]);
        !           107:     }
        !           108: 
        !           109:     status = RpcServerUseProtseqEp(pszProtocolSequence,
        !           110:                                    cMaxCalls, 
        !           111:                                    pszEndpoint,
        !           112:                                    pszSecurity);  // Security descriptor
        !           113:     printf("RpcServerUseProtseqEp returned 0x%x\n", status);
        !           114:     if (status) {
        !           115:         exit(status);
        !           116:     }
        !           117: 
        !           118:     status = UuidFromString(pszClientUuid, &ClientUuid);
        !           119:     printf("UuidFromString returned 0x%x = %d\n", status, status);
        !           120:     if (status) {
        !           121:         exit(status);
        !           122:     }
        !           123: 
        !           124:     status = UuidFromString(pszMgrTypeUuid, &MgrTypeUuid);
        !           125:     printf("UuidFromString returned 0x%x = %d\n", status, status);
        !           126:     if (status) {
        !           127:         exit(status);
        !           128:     }
        !           129:     if (strcmp (pszMgrTypeUuid, NULL_UUID_STRING) == 0) {
        !           130:         printf("Register object using non-null uuid %s\n", pszMgrTypeUuid);
        !           131:         exit(1);
        !           132:     }
        !           133: 
        !           134:     if (strcmp (pszClientUuid, NULL_UUID_STRING) == 0) {
        !           135:         printf("Register object using non-null uuid %s\n", pszMgrTypeUuid);
        !           136:         ClientUuid = MgrTypeUuid;
        !           137:     }
        !           138: 
        !           139:     RpcObjectSetType(&ClientUuid, &MgrTypeUuid);  // associate type UUID with nil UUID
        !           140:     printf("RpcObjectSetType returned 0x%x\n", status);
        !           141:     if (status) {
        !           142:         exit(status);
        !           143:     }
        !           144: 
        !           145:     status = RpcServerRegisterIf(cluuid_ServerIfHandle, // interface to register
        !           146:                                  NULL,   // MgrTypeUuid
        !           147:                                  NULL);  // MgrEpv; null means use default
        !           148:     printf("RpcServerRegisterIf returned 0x%x\n", status);
        !           149:     if (status) {
        !           150:         exit(status);
        !           151:     }
        !           152: 
        !           153:     /* register the second manager epv and associate it with the
        !           154:        specified uuid.  the second uuid must be non-null so that
        !           155:        it will not conflict with the NULL uuid already registered
        !           156:        for this interface
        !           157:     */
        !           158:     epv2.HelloProc = HelloProc2;
        !           159:     epv2.Shutdown = Shutdown;
        !           160:     status = RpcServerRegisterIf(cluuid_ServerIfHandle, // interface to register
        !           161:                                  &MgrTypeUuid,  // MgrTypeUuid
        !           162:                                  &epv2);        // 2nd manager epv
        !           163:     printf("RpcServerRegisterIf returned 0x%x\n", status);
        !           164:     if (status) {
        !           165:         exit(status);
        !           166:     }
        !           167: 
        !           168:     printf("Calling RpcServerListen\n");
        !           169:     status = RpcServerListen(cMinCalls,
        !           170:                              cMaxCalls,
        !           171:                              fDontWait);
        !           172:     printf("RpcServerListen returned: 0x%x\n", status);
        !           173:     if (status) {
        !           174:         exit(status);
        !           175:     }
        !           176: 
        !           177:     if (fDontWait) {
        !           178:         printf("Calling RpcMgmtWaitServerListen\n");
        !           179:         status = RpcMgmtWaitServerListen();  //  wait operation
        !           180:         printf("RpcMgmtWaitServerListen returned: 0x%x\n", status);
        !           181:         if (status) {
        !           182:             exit(status);
        !           183:         }    
        !           184:     }
        !           185: 
        !           186: } // end main()
        !           187: 
        !           188: 
        !           189: /*********************************************************************/
        !           190: /*                 MIDL allocate and free                            */
        !           191: /*********************************************************************/
        !           192: 
        !           193: void __RPC_FAR * __RPC_API midl_user_allocate(size_t len)
        !           194: {
        !           195:     return(malloc(len));
        !           196: }
        !           197: 
        !           198: void __RPC_API midl_user_free(void __RPC_FAR * ptr)
        !           199: {
        !           200:     free(ptr);
        !           201: }
        !           202: 
        !           203: 
        !           204: /* end file cluuids.c */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.