ipc.h File Reference

#include <gwenhywfar/types.h>
#include <gwenhywfar/db.h>
#include <gwenhywfar/netlayer.h>
#include <gwenhywfar/inherit.h>
#include <gwenhywfar/list2.h>
#include <time.h>
#include <stdio.h>

Go to the source code of this file.

Defines

Error codes
#define GWEN_IPC_ERROR_CODES   0x80000000
#define GWEN_IPC_ERROR_CONNERR   0x80000002
#define GWEN_IPC_ERROR_GENERIC   0x80000001
#define GWEN_IPC_ERROR_TIMEOUT   0x80000003

Typedefs

typedef GWEN_IPCMANAGER GWEN_IPCMANAGER

Functions

GWENHYWFAR_API GWEN_TYPE_UINT32 GWEN_IpcManager_AddClient (GWEN_IPCMANAGER *mgr, GWEN_NETLAYER *nlBase, GWEN_TYPE_UINT32 mark)
GWENHYWFAR_API GWEN_TYPE_UINT32 GWEN_IpcManager_AddServer (GWEN_IPCMANAGER *mgr, GWEN_NETLAYER *nlBase, GWEN_TYPE_UINT32 mark)
GWENHYWFAR_API void GWEN_IpcManager_Attach (GWEN_IPCMANAGER *mgr)
GWENHYWFAR_API int GWEN_IpcManager_Disconnect (GWEN_IPCMANAGER *mgr, GWEN_TYPE_UINT32 nid)
GWENHYWFAR_API void GWEN_IpcManager_Dump (GWEN_IPCMANAGER *mgr, FILE *f, int indent)
GWENHYWFAR_API void GWEN_IpcManager_free (GWEN_IPCMANAGER *mgr)
GWENHYWFAR_API const char * GWEN_IpcManager_GetApplicationName (const GWEN_IPCMANAGER *mgr)
GWENHYWFAR_API GWEN_TYPE_UINT32 GWEN_IpcManager_GetClientForNetLayer (const GWEN_IPCMANAGER *mgr, const GWEN_NETLAYER *nl)
GWENHYWFAR_API GWEN_DB_NODEGWEN_IpcManager_GetInRequestData (GWEN_IPCMANAGER *mgr, GWEN_TYPE_UINT32 rid)
GWENHYWFAR_API GWEN_NETLAYERGWEN_IpcManager_GetNetLayer (GWEN_IPCMANAGER *mgr, GWEN_TYPE_UINT32 nid)
GWENHYWFAR_API GWEN_TYPE_UINT32 GWEN_IpcManager_GetNextInRequest (GWEN_IPCMANAGER *mgr, GWEN_TYPE_UINT32 mark)
GWENHYWFAR_API GWEN_DB_NODEGWEN_IpcManager_GetResponseData (GWEN_IPCMANAGER *mgr, GWEN_TYPE_UINT32 rid)
GWENHYWFAR_API GWEN_IPCMANAGERGWEN_IpcManager_new ()
GWENHYWFAR_API GWEN_DB_NODEGWEN_IpcManager_PeekResponseData (GWEN_IPCMANAGER *mgr, GWEN_TYPE_UINT32 rid)
GWENHYWFAR_API int GWEN_IpcManager_RemoveClient (GWEN_IPCMANAGER *mgr, GWEN_TYPE_UINT32 nid)
GWENHYWFAR_API int GWEN_IpcManager_RemoveRequest (GWEN_IPCMANAGER *mgr, GWEN_TYPE_UINT32 rid, int outbound)
GWENHYWFAR_API GWEN_TYPE_UINT32 GWEN_IpcManager_SendMultiRequest (GWEN_IPCMANAGER *mgr, GWEN_TYPE_UINT32 mark, GWEN_DB_NODE *req)
GWENHYWFAR_API GWEN_TYPE_UINT32 GWEN_IpcManager_SendRequest (GWEN_IPCMANAGER *mgr, GWEN_TYPE_UINT32 nid, GWEN_DB_NODE *req)
GWENHYWFAR_API int GWEN_IpcManager_SendResponse (GWEN_IPCMANAGER *mgr, GWEN_TYPE_UINT32 rid, GWEN_DB_NODE *rsp)
GWENHYWFAR_API void GWEN_IpcManager_SetApplicationName (GWEN_IPCMANAGER *mgr, const char *name)
GWENHYWFAR_API int GWEN_IpcManager_Work (GWEN_IPCMANAGER *mgr)


Define Documentation

#define GWEN_IPC_ERROR_CODES   0x80000000

Definition at line 35 of file ipc.h.

#define GWEN_IPC_ERROR_CONNERR   0x80000002

Definition at line 37 of file ipc.h.

#define GWEN_IPC_ERROR_GENERIC   0x80000001

Definition at line 36 of file ipc.h.

#define GWEN_IPC_ERROR_TIMEOUT   0x80000003

Definition at line 38 of file ipc.h.


Typedef Documentation

typedef struct GWEN_IPCMANAGER GWEN_IPCMANAGER

Definition at line 43 of file ipc.h.


Function Documentation

GWENHYWFAR_API GWEN_TYPE_UINT32 GWEN_IpcManager_AddClient ( GWEN_IPCMANAGER mgr,
GWEN_NETLAYER nlBase,
GWEN_TYPE_UINT32  mark 
)

Adds a client to the IPC manager. The connection will not be established until needed.

Returns:
node id of the node created (0 on error)
Parameters:
mgr pointer to the IPC manager object
tr transport layer to be used (this MUST not be connected or in listening state)
userName if given this name will be used for HTTP authorization
passwd if given this password will be used for HTTP authorization
mark a value assigned to the new connection. This value can be used for functions GWEN_IpcManager_GetNextInRequest and GWEN_IpcManager_SendMultiRequest, it is not otherwise used by the IPC manager

GWENHYWFAR_API GWEN_TYPE_UINT32 GWEN_IpcManager_AddServer ( GWEN_IPCMANAGER mgr,
GWEN_NETLAYER nlBase,
GWEN_TYPE_UINT32  mark 
)

Adds a server to the IPC manager. The IPC manager will immediately enter listen mode on the given transport layer.

Returns:
node id of the node created (0 on error)
Parameters:
mgr pointer to the IPC manager object
tr transport layer to be used (this MUST not be connected or in listening state)
mark a value assigned to the new connection. This value can be used for functions GWEN_IpcManager_GetNextInRequest and GWEN_IpcManager_SendMultiRequest, it is not otherwise used by the IPC manager

GWENHYWFAR_API void GWEN_IpcManager_Attach ( GWEN_IPCMANAGER mgr  ) 

GWENHYWFAR_API int GWEN_IpcManager_Disconnect ( GWEN_IPCMANAGER mgr,
GWEN_TYPE_UINT32  nid 
)

Starts disconnecting the given client/server.

GWENHYWFAR_API void GWEN_IpcManager_Dump ( GWEN_IPCMANAGER mgr,
FILE *  f,
int  indent 
)

GWENHYWFAR_API void GWEN_IpcManager_free ( GWEN_IPCMANAGER mgr  ) 

GWENHYWFAR_API const char* GWEN_IpcManager_GetApplicationName ( const GWEN_IPCMANAGER mgr  ) 

GWENHYWFAR_API GWEN_TYPE_UINT32 GWEN_IpcManager_GetClientForNetLayer ( const GWEN_IPCMANAGER mgr,
const GWEN_NETLAYER nl 
)

GWENHYWFAR_API GWEN_DB_NODE* GWEN_IpcManager_GetInRequestData ( GWEN_IPCMANAGER mgr,
GWEN_TYPE_UINT32  rid 
)

Returns the GWEN_DB of the incoming request with the given id. The IPC manager remains the owner of the DB returned.

The DB returned contains a special group called IPC, which in turn contains some interesting variables:

Parameters:
mgr pointer to the IPC manager object
rid request id returned by GWEN_IpcManager_GetNextInRequest

GWENHYWFAR_API GWEN_NETLAYER* GWEN_IpcManager_GetNetLayer ( GWEN_IPCMANAGER mgr,
GWEN_TYPE_UINT32  nid 
)

Returns a pointer to the connection used by the given node.

GWENHYWFAR_API GWEN_TYPE_UINT32 GWEN_IpcManager_GetNextInRequest ( GWEN_IPCMANAGER mgr,
GWEN_TYPE_UINT32  mark 
)

Returns the id of the next incoming request with the given mark. This request will then be taken of the list of new requests, so the next call to this function will return another request id (or 0 if there is none left). So you will have to preserve the id returned in order to use it.

Parameters:
mgr pointer to the IPC manager object
mark,0 matches any (see GWEN_IpcManager_AddServer)

GWENHYWFAR_API GWEN_DB_NODE* GWEN_IpcManager_GetResponseData ( GWEN_IPCMANAGER mgr,
GWEN_TYPE_UINT32  rid 
)

Returns the next response to the given outbound request. The data returned is taken off the list of responses, so any call to this function will return the next response (if any). The caller takes over ownership of the data returned.

Parameters:
mgr pointer to the IPC manager object
rid request id returned by GWEN_IpcManager_SendRequest or GWEN_IpcManager_SendMultiRequest

GWENHYWFAR_API GWEN_IPCMANAGER* GWEN_IpcManager_new (  ) 

GWENHYWFAR_API GWEN_DB_NODE* GWEN_IpcManager_PeekResponseData ( GWEN_IPCMANAGER mgr,
GWEN_TYPE_UINT32  rid 
)

Returns the next response to the given outbound request. The data returned is not taken off the list of responses, so the next call to this function will return the same response (if any). The caller does NOT take over ownership of the data returned.

Parameters:
mgr pointer to the IPC manager object
rid request id returned by GWEN_IpcManager_SendRequest or GWEN_IpcManager_SendMultiRequest

GWENHYWFAR_API int GWEN_IpcManager_RemoveClient ( GWEN_IPCMANAGER mgr,
GWEN_TYPE_UINT32  nid 
)

Removes a client which was previously added using GWEN_IpcManager_AddClient. This function removes all pending messages and/or requests for/from this client.

GWENHYWFAR_API int GWEN_IpcManager_RemoveRequest ( GWEN_IPCMANAGER mgr,
GWEN_TYPE_UINT32  rid,
int  outbound 
)

Removes a request.

Parameters:
mgr pointer to the IPC manager object
rid id of the request to which this is a response (as returned by GWEN_IpcManager_GetNextInRequest, GWEN_IpcManager_SendRequest or GWEN_IpcManager_SendMultiRequest)
outbound if 0 then an incoming request is to be removed, otherwise an outgoing request is to be deleted

GWENHYWFAR_API GWEN_TYPE_UINT32 GWEN_IpcManager_SendMultiRequest ( GWEN_IPCMANAGER mgr,
GWEN_TYPE_UINT32  mark,
GWEN_DB_NODE req 
)

Sends a request to any connection of the given mark.

Returns:
request id of the request created (0 on error)
Parameters:
mgr pointer to the IPC manager object
mark mark (as given to GWEN_IpcManager_AddClient or GWEN_IpcManager_AddServer), 0 matches all
req DB containing the request

GWENHYWFAR_API GWEN_TYPE_UINT32 GWEN_IpcManager_SendRequest ( GWEN_IPCMANAGER mgr,
GWEN_TYPE_UINT32  nid,
GWEN_DB_NODE req 
)

Sends a request via the given connection. It takes over the ownership of the given GWEN_DB in any case.

Returns:
request id of the request created (0 on error)
Parameters:
mgr pointer to the IPC manager object
nid value returned by GWEN_IpcManager_AddClient or by GWEN_IpcManager_GetInRequestData (in variable "ipc/nodeId");
req DB containing the request

GWENHYWFAR_API int GWEN_IpcManager_SendResponse ( GWEN_IPCMANAGER mgr,
GWEN_TYPE_UINT32  rid,
GWEN_DB_NODE rsp 
)

Sends a response to a request received.

Returns:
0 if ok, !=0 on error
Parameters:
mgr pointer to the IPC manager object
rid id of the request to which this is a response (as returned by GWEN_IpcManager_GetNextInRequest)
rsp DB containing the response

GWENHYWFAR_API void GWEN_IpcManager_SetApplicationName ( GWEN_IPCMANAGER mgr,
const char *  name 
)

GWENHYWFAR_API int GWEN_IpcManager_Work ( GWEN_IPCMANAGER mgr  ) 

Lets the IPC manager do its work. You need to call GWEN_Net2_HeartBeat before this function to catch changes in the network connections used.


Generated on Thu Nov 9 22:06:49 2006 for gwenhywfar by  doxygen 1.5.1