Annotation of mstools/samples/rpc/ns/nhello/nhelloc.c, revision 1.1

1.1     ! root        1: /****************************************************************************
        !             2:                    Microsoft RPC Version 1.0
        !             3:                 Copyright Microsoft Corp. 1992
        !             4:                        nhello Example
        !             5: 
        !             6:     FILE:       nhelloc.c
        !             7:     
        !             8:     USAGE:      nhelloc  -s string
        !             9:                          -n name_service_entry_name
        !            10:                          -t name_syntax_type
        !            11: 
        !            12:     PURPOSE:    Client side of RPC distributed application
        !            13:     
        !            14:     FUNCTIONS:  main() - binds to server and calls remote procedure
        !            15:     
        !            16:     COMMENTS:
        !            17: 
        !            18: ****************************************************************************/
        !            19: 
        !            20: #include <stdlib.h>     
        !            21: #include <stdio.h>
        !            22: #include <ctype.h>
        !            23: #include "nhello.h"    // header file generated by MIDL compiler
        !            24: 
        !            25: #define PURPOSE \
        !            26: "This Microsoft RPC Version 1.0 sample program demonstrates\n\
        !            27: the use of the name service. For more information about these\n\
        !            28: RPC API functions, see the RPC programming guide and reference.\n\n"
        !            29: 
        !            30: void Usage(char * pszProgramName)
        !            31: {
        !            32:     fprintf(stderr, "%s", PURPOSE);
        !            33:     fprintf(stderr, "Usage:  %s\n", pszProgramName);
        !            34:     fprintf(stderr, " -s string\n");
        !            35:     fprintf(stderr, " -n name_service_entry_name\n");
        !            36:     fprintf(stderr, " -t name_syntax_type\n");
        !            37:     exit(1);
        !            38: }
        !            39: 
        !            40: void _CRTAPI1 main(int argc, char **argv)
        !            41: {
        !            42:     unsigned char * pszString     = "hello, world";
        !            43:     unsigned char * pszEntryName  = "/.:/nhello_sample";
        !            44:     RPC_NS_HANDLE hnsHello;
        !            45:     RPC_BINDING_HANDLE hHello;
        !            46:     unsigned long fNameSyntaxType = RPC_C_NS_SYNTAX_DEFAULT;
        !            47:     RPC_STATUS status;
        !            48:     unsigned long ulCode;
        !            49:     short fContinue = TRUE;
        !            50:     short i;
        !            51: 
        !            52:     /* allow the user to override settings with command line switches */
        !            53:     for (i = 1; i < argc; i++) {
        !            54:         if ((*argv[i] == '-') || (*argv[i] == '/')) {
        !            55:             switch (tolower(*(argv[i]+1))) {
        !            56:             case 'n':
        !            57:                 pszEntryName = argv[++i];
        !            58:                 break;
        !            59:             case 't':
        !            60:                 fNameSyntaxType = (unsigned int) atoi(argv[++i]);
        !            61:                 break;
        !            62:             case 's':
        !            63:                 pszString = argv[++i];
        !            64:                 break;
        !            65:             case 'h':
        !            66:             case '?':
        !            67:             default:
        !            68:                 Usage(argv[0]);
        !            69:             }
        !            70:         }
        !            71:         else
        !            72:             Usage(argv[0]);
        !            73:     }
        !            74:     
        !            75:     RpcTryExcept {
        !            76:         status = RpcNsBindingImportBegin(fNameSyntaxType,
        !            77:                                          pszEntryName, 
        !            78:                                          nhello_ClientIfHandle, 
        !            79:                                          NULL,
        !            80:                                          &hnsHello);
        !            81:         printf("RpcNsBindingImportBegin returned 0x%x\n", status);
        !            82:     }
        !            83:     RpcExcept(1) {
        !            84:         ulCode = RpcExceptionCode();
        !            85:         printf("RPC Runtime raised exception 0x%x\n", ulCode);
        !            86:         exit(1);
        !            87:     }
        !            88:     RpcEndExcept
        !            89: 
        !            90:     /* The loop is present because the name service may contain "stale" */
        !            91:     /* and unusable binding handlers.  This is part of the DCE design.  */
        !            92:     do {
        !            93:         status = RpcNsBindingImportNext(hnsHello,
        !            94:                                         &hHello);
        !            95:         printf("RpcNsBindingImportNext returned 0x%x\n", status);
        !            96:         if (status == RPC_S_NO_MORE_BINDINGS)
        !            97:             exit(status);
        !            98: 
        !            99:         if (status != RPC_S_OK)
        !           100:             continue;
        !           101: 
        !           102:         RpcTryExcept {
        !           103:             printf("Calling remote procedure HelloProc with string %s\n",
        !           104:                    pszString);
        !           105:             HelloProc(hHello, pszString);
        !           106:             fContinue = FALSE;
        !           107:         }
        !           108:         RpcExcept(1) {
        !           109:             fContinue = TRUE;
        !           110:         }
        !           111:         RpcEndExcept
        !           112: 
        !           113:     } while (fContinue == TRUE);
        !           114: 
        !           115:     status = RpcNsBindingImportDone(&hnsHello);
        !           116:     printf("RpcNsBindingImportDone returned 0x%x\n", status);
        !           117: 
        !           118:     RpcTryExcept {
        !           119:         Shutdown(hHello);  // Shutdown is a remote procedure
        !           120:     }
        !           121:     RpcExcept(1) {
        !           122:         ulCode = RpcExceptionCode();
        !           123:         printf("RPC runtime raised exception 0x%x\n", ulCode);
        !           124:     }
        !           125:     RpcEndExcept
        !           126: 
        !           127:     status = RpcBindingFree(&hHello);
        !           128:     printf("RpcBindingFree returned 0x%x\n", status);
        !           129: 
        !           130:     exit(0);
        !           131: 
        !           132: }  // end main()
        !           133: 
        !           134: 
        !           135: /*********************************************************************/
        !           136: /*                 MIDL allocate and free                            */
        !           137: /*********************************************************************/
        !           138: 
        !           139: void __RPC_FAR * __RPC_API midl_user_allocate(size_t len)
        !           140: {
        !           141:     return(malloc(len));
        !           142: }
        !           143: 
        !           144: void __RPC_API midl_user_free(void __RPC_FAR * ptr)
        !           145: {
        !           146:     free(ptr);
        !           147: }
        !           148: 
        !           149: /* end file nhelloc.c */

unix.superglobalmegacorp.com

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