SPRY TI-RPC for Windows Sockets A WHITE PAPER The SPRY TI-RPC (Transport Independant Remote Procedure Calls) for Windows Sockets provides a standard API for developing client and server applications that use remote procedure call technology. TI-RPC implements a standard RPC protocol, making it well-suited for distributed computing environments. The standard API and protocol supported by the TI-RPC for Windows Sockets is an implementation of the Sun Microsystems, Inc. Open Network Computing Transport Independent Remote Procedure Call (ONC+/TI-RPC) specification. ONC+/TI-RPC has received wide acceptance and is offered by a variety of vendors. Using SPRY's TI-RPC for Windows Sockets high-level API, you can develop applications that use TCP/UDP and invoke no transport functions directly. The lower levels of the API provide increasing degrees of control over transport-specific functions which you can program if required. TI-RPC for Windows Sockets will aid in the development of distributed applications. By using TI-RPC, a distributed application can take advantage of the following features: * Machine independence * Portable code * Heterogeneous environment INTERFACE The interface is for the most part, the same as on Unix machines. The differences are the following: a. You must initialize the library before using it. b. Some #include files have different names. c. No support for DES or Kerberos authentication. d. netdir is hardcoded to support UDP and TCP only. NETDIR/TLI The netdir, netconfig and netpath and tli routines are all made available to the client, in addition to the standard RPC routines. They are not a complete implementation of netdir, so use them at your own risk. IMPLEMENTATION ISSUES Because RPC contains state, steps were taken to insure that this state was always contained in the application rather than the DLL. The technique for doing this is to pass a state parameter to all stateful routines. For each stateful RPC routine, a macro is defined to call the stateless DLL routine with the parameters plus an added state parameter. This should be transparent to the caller, but will be noticable in any way in which a macro is incompatible with a function, such as in linking or passing the address of a function. You will notice that most of the routines in the DLL start with the prefix "sl", such as "slclnt_create". This means that clnt_create() was stateful. A stateless version (slcnt_create) is provided in the DLL, and a macro (clnt_create) is provided to pass the state to the stateless routine. CHANGES SINCE RELEASE 1 1. Calling conventions have been changed from C to PASCAL. Because of this change, you will have to recompile all code, MakeProcInstance() for any callback routines and insure that the callback routines are FAR PASCAL and exported. 2. The rpc_init() macro now takes an argument, which is the instance handle of the application (passed in WinMain() function). 3. A bug has been fixed with respect to timeouts. Timeouts were restricted to 32 seconds previously because they were stored in 16-bit quantities. Now, you may use very large timeouts since they are stored as 32-bit quantities. SPRY, Incorporated "Networking the Desktop" 316 Occidental Avenue South 2nd Floor Seattle, Washington 98104 For more information Phone (206) 447-0300 Fax (206) 447-9008 Internet sales@spry.com