Introduction
A Remote Procedure Call (RPC) is a client API function that can call a number of special server functions, passing appropriate parameters and obtaining a suitable return value. The same client API function may be used to call all such server functions. At present, there are two such server functions. One obtains a long-term checkout (LTCO) license on the client. The other obtains the total number of floating feature seats, pool elements or consumption tokens on a given license code. Here we shall describe the general features of remote procedure calls.
Remote Procedure Calls are calls to the Zentitle Licensing Server. Similarly general functionality does not exist presently for the LAN daemon. The latter does, however, have its own implementation of LTCO licensing. See here for details.
Server-Side Implementation
Configuring License Codes
To configure the functionality of a license code for a given server function, first, choose a license code.
- Go to the manage codes page (with the icon indicated below):

- Then select one of the license codes shown by clicking the Edit Code button:

Alternatively, if you wish to configure a known license code, you can do so using the search functionality. Both methods of configuring a license code are described in the managing licenses documentation.
Once you have reached the Code Edit page for the selected license code, select the Server Functions tab as shown below.

There are two tables here, Server Functions Configuration and Server Functions Usage History. We shall describe these in turn.
Server Functions Configuration
This table provides a list of server functions enabled on the Zentitle Licensing Server.
Long-term Check-Out (LTCO) is the first of such functions to be implemented. By default, it is not enabled on any license code. You can obtain more information about this server function here.
This table displays the following information:
- An edit button which, if present, enabled you to edit the configuration of this function for that license code.
- Enabled: 'True' or 'False' according to whether or not this function has been enabled for that license code.
- Function Name: The name of the server function.
- Parameters: The values of any required server-side parameters for this function.
- Created: The date when this function was created on the server.
Server Functions Usage History
This table provides a client usage history of LTCO and any other server functions which make a deniable server request for this license code.

Successful LTCO check-outs are shown, with the corresponding computer ID. Please see here for further details here.
Configuring Profiles
Server functions can be configured for multiple license codes simultaneously using license code profiles. To do so, please go to the Code Profiles menu item on the dashboard as shown.

Select the profile you wish to modify by clicking its Edit button.

As with a license code, click the Server Functions tab to reveal the Server Functions Configuration table. This displays the configuration of server functions for this license code profile.

This table has the same column headings as on the code edit page. The server function configuration can be edited by clicking the edit button, if it exists. You will then have to save the profile to save any configuration changes.
Inheriting profile properties will cause all profile property values to be irreversibly inherited by the profile's license codes. Please ensure that this is what you require prior to performing this task.
Client-Side Implementation
Client API
There are two native C API functions used for making a remote procedure call: NSLRemoteCall and NSLRemoteCallV. These are variants of essentially the same call although we recommend, for the time being, the use of NSLRemoteCallV over NSLRemoteCall.
| Function | Parameters | Description |
|---|---|---|
int NSLRemoteCallV ( |
rpcName
A NULL terminated, UTF-8 encoded string containing the name of the remote procedure to be accessed.
rpcReturn
On success contains the return information from the RPC as a NULL terminated, UTF-8 encoded string. This may be NULL if no return is to be received from the call.
An array of pointers to NULL terminated, UTF-8 encoded strings listing the names of the variable to be passed to the RPC. The order of the names in this array MUST match the order of the values in rpcVarVals. The final entry of this array MUST be a NULL pointer.
An array of pointers to NULL terminated, UTF-8 encoded strings listing the values of the variables to be passed to the RPC. The order of the values in this array MUST match the order of the names in rpcVarNames. The final entry of this array MUST be a NULL pointer. |
Calls a remote procedure at the Zentitle server. Alternative entry to NSL's RPC using arrays of pointers to UTF-8 encoded, NULL terminated strings. The final entry in each array is REQUIRED to be a NULL pointer. Returns = 0 If the call succeeded < 0 A negative error value is returned. |
int NSLRemoteCall( |
rpcName
A NULL terminated, UTF-8 encoded string containing the name of the remote proceedure to be accessed.
rpcReturn
On success contains the return information from the RPC as a NULL terminated, UTF-8 encoded string. This may be NULL if no return is to be received from the call. ... A sequence of NULL terminated UTF-8 encoded string pairs containing first the name of the variable then the contents of the variable ie varName1, var1, varName2, var2, ... ,(char *)NULL. The sequence MUST end with a NULL pointer cast to a char *. |
Calls a remote procedure at the Zentitle server. The parameters of this function begin with the remote procedure's name (rpcName). The elipses represent the parameters for the remote function call. This argument list may be thought of as varName1, var1, varName2, var2, ... varNamen, varn, (char *) NULL. This list of arguments MUST be terminated with a null pointer and the null pointer must be cast to a char *. As many name/value pairs as needed may be passed into the function. Returns = 0 If the call succeeded < 0 A negative error value is returned. |
Wrapper Functions
Our example applications contain wrapper functions for NSLRemoteCallV in C#, VB.NET and Java.
