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