"libtmcsl.a" contains functions that allows a Tsimmis client to communicate with a Tsimmis server. These functions basically simulates RPC calls by sending messages to the Tsimmis server to invoke one of the hook functions (see SSL.DOC on hook functions), then retrieves results using partial fetch protocol (see FETCH.PROTOCOL).
The set of functions provided in "libtmcsl.a" matches one to one with 5 hook functions defined in "libtmssl.a". "libtmcsl.a" is a client to "libtmcomm.a". It is possible for user not to use "libtmcsl.a". In that case, the user can make "libtmcomm.a" network calls directly to communicate with a Tsimmis server following the partial fetch protocol.
| ^
=======================|===================|=============
|| | | |
|| "libtmcomm.a" | | |
|| TM_RecvData() TM_SendData() |
|| | | |
|| | | |
||=====================|===================|============+
|| V |
|| |
|| tmInit(), tmShutdown(), |
|| tmQuery(), tmFetchRef(), tmFetchObj() |
|| |
|| "libtmcsl.a" |
|| |
+=======================================================+
Figure 1, Interaction Between "libtmcsl.a" and "libtmcomm.a"
*************
* INTERFACE *
*************
To access the 5 functions defined in "libtmcsl.a", the following
header file should be included:
tmcsl.h -- contains declaration for "libtmcsl.a" functions
* Including "tmcsl.h" automatically includes "tmconnend.h" and
"tmtypes.h".
Functions:
---------
## List of functions available in "tmcsl.h" ##
TM_Init - inits the server
TM_Shutdown - shuts down the server
TM_Query - sends a query to server
TM_FetchObj - fetches result object
TM_FetchRef - fetches result reference
TM_ConnectToServer - makes a TCP stream connection to server
## More detailed explaination ##
--
TM_Error TM_Init(TM_ConnEnd *conn, TM_Data *options, uint32 *trigger)
Sends a init comand to the server to execute the hook 'tmInit' with
option parameters in 'options'. 'conn' is the TM_ConnEnd that is
connection with the server. 'trigger' is not used right now because
this function executes synchronously.
RETURNS:
TM_NO_ERROR - no error
TM_INIT_FAILED - server failed to initialiaze
TM_ERR_MEMORY - memory problem
TM_ERR_CONNEND - bad TM_ConnEnd
TM_ERR_SEND - error during send
TM_ERR_RECV - error during receive
--
TM_Error TM_Shutdown(TM_ConnEnd *conn, TM_Data *options, uint32 *trigger)
Sends a shutdown comand to the server to execute the hook
'tmShutdown' with option parameters in 'options'. 'conn' is the
TM_ConnEnd that is connection with the server. 'trigger' is not
used right now because this function executes synchronously.
RETURNS:
TM_NO_ERROR - no error
TM_ERR_MEMORY - memory problem
TM_ERR_CONNEND - bad TM_ConnEnd
TM_ERR_SEND - error during send
TM_ERR_RECV - error during receive
--
TM_Error TM_Query(TM_ConnEnd *conn, char *query, uint32 *trigger)
Sends a query comand to the server to execute the hook 'tmQuery'.
'query' contains the query string to be executed by the server.
'conn' is the TM_ConnEnd that is connection with the server.
'trigger' is not used right now because this function executes
synchronously.
RETURNS:
TM_NO_ERROR - no error
TM_QUERY_FAILED - query failed on server
TM_ERR_MEMORY - memory problem
TM_ERR_CONNEND - bad TM_ConnEnd
TM_ERR_SEND - error during send
TM_ERR_RECV - error during receive
--
TM_Error TM_FetchObj(TM_ConnEnd *conn,
uint32 fetchType,
TM_Data *objRef,
TM_Object **result,
uint32 *trigger)
Fetches objects that are the results of the latest 'TM_Query()' call
to the server. 'fetchType' indicates how many objects to fetch.
Currently, 'fetchType' can be:
TM_FETCH_ALL - fetch all objects
TM_FETCH_ONE - fetch only one object
TM_FETCH_CHILDREN - fetch one object and its 1st level child
'objRef' points to an object reference that references the object or
root of objects being fetched. If 'objRef' is NULL, it refers (by
default) to the top most level object in the result.
'result' points to a TM_Object pointer in which object returned by
the server will be placed. This function dynamically allocates
TM_Object's as return values. After user finishes using objects
returned in 'result', user should deallocate the object by call to
"TM_FreeObject()" or "TM_FreeAllObject()".
'conn' is the TM_ConnEnd that is connection with the server.
'trigger' is not used right now because this function executes
synchronously.
RETURNS:
TM_NO_ERROR - no error
TM_FETCH_FAILED - unable to fetch result at server
TM_INVALID_REFERENCE - object reference is invalid
TM_NULL_RESULT - server returns NULL result
TM_NO_SUPPORT - fetch mode not supported by server
TM_ERR_MEMORY - memory problem
TM_ERR_CONNEND - bad TM_ConnEnd
TM_ERR_SEND - error during send
TM_ERR_RECV - error during receive
--
TM_Error TM_FetchRef(TM_ConnEnd *conn,
uint32 fetchType,
TM_Data *objRef,
TM_Object **result,
uint32 *trigger)
Fetches object references that reference result objects of the
latest 'TM_Query()' call to the server. 'fetchType' indicates how
many objects to fetch. Currently, 'fetchType' can be:
TM_FETCH_ALL - fetch all objects
TM_FETCH_ONE - fetch only one object
TM_FETCH_CHILDREN - fetch one object and its 1st level child
'objRef' points to an object reference that references the object or
root of objects whose object reference is being fetched. If
'objRef' is NULL, it refers (by default) to the top most level
object in the result.
'result' points to a TM_Object pointer in which object references
returned by the server will be placed. This function dynamically
allocates TM_Object's as return values. After user finishes using
objects returned in 'result', user should deallocate the object by
call to "TM_FreeObject()" or "TM_FreeAllObject()".
'conn' is the TM_ConnEnd that is connection with the server.
'trigger' is not used right now because this function executes
synchronously.
RETURNS:
TM_NO_ERROR - no error
TM_FETCH_FAILED - unable to fetch result at server
TM_INVALID_REFERENCE - object reference is invalid
TM_NULL_RESULT - server returns NULL result
TM_NO_SUPPORT - fetch mode not supported by server
TM_ERR_MEMORY - memory problem
TM_ERR_CONNEND - bad TM_ConnEnd
TM_ERR_SEND - error during send
TM_ERR_RECV - error during receive
--
int TM_ConnectToServer(char *hostName, int portNumber)
Makes a TCP stream connection with a Tsimmis server. 'hostName' is
the Internet name of the machine on which the server runs.
'portNumber' is the port number on which the server accepts connection.
This function does not correspond to any function on the server
side. This function is provided as a convinence so that you do not
have to write any low level network code. You can just call this
function to establish a connection with the server. Then creates a
TM_ConnEnd using the returned socket number. Then you can call any
one of the above 5 functions using the TM_ConnEnd.
For example:
int sock;
TM_ConnEnd *conn;
sock = TM_ConnecToServer("db.stanford.edu", 6666);
if (sock < 0) { printf("unable to connnect to server\n"); exit(1); } else { TM_InitConnEnd(); conn = TM_CreateConnEnd(sock); } /* do client specific stuff */ ... TM_Init(conn, NULL); ... /* client is done */ TM_DeleteConnEnd(conn); TM_ShutdownConnEnd(); close(sock); exit(0); RETURNS: <0 - unable to connect to server>=0 - socket number of a connection with server
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~