Annotation of mstools/samples/rpc/adder1/client.c, revision 1.1

1.1     ! root        1: /****************************************************************************
        !             2: 
        !             3:                        Microsoft RPC Version 1.0 Alpha
        !             4:                                 October 1991
        !             5:                                Adder1 Example
        !             6: 
        !             7:     FILE:    adder1\client.c
        !             8:     USAGE:    client <servername>
        !             9:               where  <servername> is the name of the server running the
        !            10:               server side of the distributed application
        !            11:     PURPOSE:  Client side of RPC distributed application adder1
        !            12:     FUNCTIONS:  main() - calls remote procedure AdderProc1
        !            13:     COMMENTS:
        !            14:     This version of the distributed application that adds two
        !            15:     short integers features a client that manages its connection
        !            16:     to the server. It uses the binding handle hRpcAdder1.
        !            17: 
        !            18: ****************************************************************************/
        !            19: #include <stdio.h>     // printf
        !            20: #include <string.h>    // strlen
        !            21: #include <stdlib.h>    // exit
        !            22: 
        !            23: #include <rpc.h>       // RPC API functions, types
        !            24: #include "adder1.h"    // RPC data for this interface
        !            25: 
        !            26: #define MAXPATH 300    // arbitrary large size for server, pipe path
        !            27: 
        !            28: void main(int argc, char **argv)
        !            29: {
        !            30:     RPC_STATUS status;             // returned by RPC API function
        !            31:     char * pszRpcPort = "adder1";
        !            32:     char szServerPath[MAXPATH];    // complete path
        !            33:     short sAdderResult;
        !            34: 
        !            35: 
        !            36: /*  Select named pipes as the transport type and provide the     */
        !            37: /*  path to the server and named pipe that is used for RPC.      */
        !            38: /*  The client specifies the local pipe name in the form:       */
        !            39: /*     \device\namedpipe\pipename                               */
        !            40: /*  The client specifies the remote pipe name in the form:      */
        !            41: /*     \device\lanmanredirector\servername\pipe\pipename        */
        !            42: /*  In this example, the pipename is "adder1"                    */
        !            43: 
        !            44:     if (argc == 2) {
        !            45:         strcpy(szServerPath, "\\device\\lanmanredirector\\");
        !            46:         strcat(szServerPath, argv[1]);      // servername
        !            47:         strcat(szServerPath, "\\pipe\\");
        !            48:         strcat(szServerPath, pszRpcPort);
        !            49:     }
        !            50:     else {
        !            51:         strcpy(szServerPath, "\\device\\namedpipe\\");
        !            52:         strcat(szServerPath, pszRpcPort);
        !            53:     }
        !            54: 
        !            55:     adder1_ProtocolStack.TransportType = RPC_TRANSPORT_NAMEPIPE;
        !            56: 
        !            57:     adder1_ProtocolStack.TransportInfo = szServerPath;
        !            58:     adder1_ProtocolStack.TransportInfoLength = \
        !            59:         strlen(szServerPath) + 1;  // add 1 for terminating null
        !            60: 
        !            61: /*  Call the Microsoft RPC V1.0 Alpha API function that allows     */
        !            62: /*  the client to establish a connection with the server.        */
        !            63: /*  NOTE:  This function will probably be replaced in future     */
        !            64: /*  releases by the standard DCE RPC function.                   */
        !            65: 
        !            66:     status = RpcBindToInterface(&adder1_ProtocolStack,
        !            67:                                 0L,
        !            68:                                 &hrpcAdder1);
        !            69:     if (status) {
        !            70:         printf("RpcBindToInterface returned 0x%x\n", status);
        !            71:         printf("%s length = %d\n", adder1_ProtocolStack.TransportInfo,
        !            72:             adder1_ProtocolStack.TransportInfoLength);
        !            73:     exit(2);
        !            74:     }
        !            75: 
        !            76:     sAdderResult = AdderProc1(1, 2); // call the remote procedure
        !            77:     printf("result from remote procedure = %d\n", sAdderResult);
        !            78: 
        !            79:     status = RpcUnbind(hrpcAdder1);    // remote calls complete; unbind
        !            80:     if (status) {
        !            81:         printf("RpcUnbind returned 0x%x\n", status);
        !            82:         exit(2);
        !            83:     }
        !            84:     exit(0);
        !            85: } /* end main() */
        !            86: /* end adder1\client.c */
        !            87: 

unix.superglobalmegacorp.com

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