ipc.h File Reference

#include <gwenhywfar/types.h>
#include <gwenhywfar/db.h>
#include <gwenhywfar/iolayer.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 struct GWEN_IPCMANAGER GWEN_IPCMANAGER
typedef void(* GWEN_IPCMANAGER_CLIENTDOWN_FN )(GWEN_IPCMANAGER *mgr, uint32_t id, GWEN_IO_LAYER *io, void *user_data)

Functions

GWENHYWFAR_API uint32_t GWEN_IpcManager_AddClient (GWEN_IPCMANAGER *mgr, GWEN_IO_LAYER *ioBase, uint32_t mark)
GWENHYWFAR_API uint32_t GWEN_IpcManager_AddServer (GWEN_IPCMANAGER *mgr, GWEN_IO_LAYER *ioBase, uint32_t mark)
GWENHYWFAR_API void GWEN_IpcManager_Attach (GWEN_IPCMANAGER *mgr)
GWENHYWFAR_API int GWEN_IpcManager_Disconnect (GWEN_IPCMANAGER *mgr, uint32_t 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 uint32_t GWEN_IpcManager_GetClientForIoLayer (const GWEN_IPCMANAGER *mgr, const GWEN_IO_LAYER *io)
GWENHYWFAR_API GWEN_DB_NODEGWEN_IpcManager_GetInRequestData (GWEN_IPCMANAGER *mgr, uint32_t rid)
GWENHYWFAR_API GWEN_IO_LAYERGWEN_IpcManager_GetIoLayer (GWEN_IPCMANAGER *mgr, uint32_t nid)
GWENHYWFAR_API uint32_t GWEN_IpcManager_GetNextInRequest (GWEN_IPCMANAGER *mgr, uint32_t mark)
GWENHYWFAR_API GWEN_DB_NODEGWEN_IpcManager_GetResponseData (GWEN_IPCMANAGER *mgr, uint32_t rid)
GWENHYWFAR_API GWEN_IPCMANAGERGWEN_IpcManager_new ()
GWENHYWFAR_API GWEN_DB_NODEGWEN_IpcManager_PeekResponseData (GWEN_IPCMANAGER *mgr, uint32_t rid)
GWENHYWFAR_API int GWEN_IpcManager_RemoveClient (GWEN_IPCMANAGER *mgr, uint32_t nid)
GWENHYWFAR_API int GWEN_IpcManager_RemoveRequest (GWEN_IPCMANAGER *mgr, uint32_t rid, int outbound)
GWENHYWFAR_API int GWEN_IpcManager_SendRequest (GWEN_IPCMANAGER *mgr, uint32_t nid, GWEN_DB_NODE *req, uint32_t *pReqId)
GWENHYWFAR_API int GWEN_IpcManager_SendResponse (GWEN_IPCMANAGER *mgr, uint32_t rid, GWEN_DB_NODE *rsp)
GWENHYWFAR_API void GWEN_IpcManager_SetApplicationName (GWEN_IPCMANAGER *mgr, const char *name)
GWENHYWFAR_API void GWEN_IpcManager_SetClientDownFn (GWEN_IPCMANAGER *mgr, GWEN_IPCMANAGER_CLIENTDOWN_FN f, void *user_data)
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.

Referenced by GWEN_IpcManager__CheckRequests().

#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.

Referenced by GWEN_IpcManager__CheckRequests().


Typedef Documentation

Definition at line 43 of file ipc.h.

typedef void(* GWEN_IPCMANAGER_CLIENTDOWN_FN)(GWEN_IPCMANAGER *mgr, uint32_t id, GWEN_IO_LAYER *io, void *user_data)

Definition at line 47 of file ipc.h.


Function Documentation

GWENHYWFAR_API uint32_t GWEN_IpcManager_AddClient ( GWEN_IPCMANAGER mgr,
GWEN_IO_LAYER ioBase,
uint32_t  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
ioBase io layer over which the IPC is to be transfered. This module stacks some more layers on top of this: LayerPackets-LayerHttp->LayerBuffered. The given base layer MUST be neither connected nor 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

Definition at line 453 of file ipc.c.

References DBG_INFO, GWEN_Io_Layer_free(), GWEN_Io_LayerPackets_new(), GWEN_Io_Manager_RegisterLayer(), GWEN_IpcNode_new(), and GWEN_LOGDOMAIN.

GWENHYWFAR_API uint32_t GWEN_IpcManager_AddServer ( GWEN_IPCMANAGER mgr,
GWEN_IO_LAYER ioBase,
uint32_t  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
ioBase io layer over which the IPC is to be transfered. This module stacks some more layers on top of this: LayerPackets-LayerHttp->LayerBuffered. The given base layer MUST be neither connected nor 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

Definition at line 417 of file ipc.c.

References DBG_INFO, GWEN_Io_Layer_free(), GWEN_Io_Layer_ListenRecursively(), GWEN_Io_LayerPackets_new(), GWEN_Io_Manager_RegisterLayer(), GWEN_IpcNode_new(), GWEN_LOGDOMAIN, and NULL.

GWENHYWFAR_API void GWEN_IpcManager_Attach ( GWEN_IPCMANAGER mgr  ) 

Definition at line 371 of file ipc.c.

References DBG_MEM_INC.

GWENHYWFAR_API int GWEN_IpcManager_Disconnect ( GWEN_IPCMANAGER mgr,
uint32_t  nid 
)

Starts disconnecting the given client/server.

Definition at line 966 of file ipc.c.

References DBG_ERROR, GWEN_Io_Layer_DisconnectRecursively(), GWEN_IpcManager__RemoveNodeRequestMessages(), GWEN_LOGDOMAIN, and NULL.

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

Definition at line 381 of file ipc.c.

References DBG_MEM_DEC, and GWEN_FREE_OBJECT.

GWENHYWFAR_API const char* GWEN_IpcManager_GetApplicationName ( const GWEN_IPCMANAGER mgr  ) 

Definition at line 400 of file ipc.c.

GWENHYWFAR_API uint32_t GWEN_IpcManager_GetClientForIoLayer ( const GWEN_IPCMANAGER mgr,
const GWEN_IO_LAYER io 
)
GWENHYWFAR_API GWEN_DB_NODE* GWEN_IpcManager_GetInRequestData ( GWEN_IPCMANAGER mgr,
uint32_t  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:

  • nodeId: Id of the node via which this request has been received
  • msgId: id of the message
Parameters:
mgr pointer to the IPC manager object
rid request id returned by GWEN_IpcManager_GetNextInRequest

Definition at line 730 of file ipc.c.

References DBG_ERROR, and GWEN_LOGDOMAIN.

GWENHYWFAR_API GWEN_IO_LAYER* GWEN_IpcManager_GetIoLayer ( GWEN_IPCMANAGER mgr,
uint32_t  nid 
)

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

Definition at line 755 of file ipc.c.

References DBG_ERROR, and GWEN_LOGDOMAIN.

GWENHYWFAR_API uint32_t GWEN_IpcManager_GetNextInRequest ( GWEN_IPCMANAGER mgr,
uint32_t  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)

Definition at line 700 of file ipc.c.

GWENHYWFAR_API GWEN_DB_NODE* GWEN_IpcManager_GetResponseData ( GWEN_IPCMANAGER mgr,
uint32_t  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

Definition at line 826 of file ipc.c.

References DBG_ERROR, DBG_VERBOUS, GWEN_IpcMsg_free(), and GWEN_LOGDOMAIN.

GWENHYWFAR_API GWEN_IPCMANAGER* GWEN_IpcManager_new (  ) 

Definition at line 354 of file ipc.c.

References DBG_MEM_INC, and GWEN_NEW_OBJECT.

GWENHYWFAR_API GWEN_DB_NODE* GWEN_IpcManager_PeekResponseData ( GWEN_IPCMANAGER mgr,
uint32_t  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

Definition at line 795 of file ipc.c.

References DBG_DEBUG, DBG_ERROR, and GWEN_LOGDOMAIN.

GWENHYWFAR_API int GWEN_IpcManager_RemoveClient ( GWEN_IPCMANAGER mgr,
uint32_t  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.

Definition at line 530 of file ipc.c.

References DBG_DEBUG, DBG_ERROR, DBG_NOTICE, GWEN_Io_Layer_DisconnectRecursively(), GWEN_Io_Manager_UnregisterLayer(), GWEN_IO_REQUEST_FLAGS_FORCE, GWEN_IpcManager__RemoveNodeRequestMessages(), GWEN_IpcNode_free(), GWEN_LOGDOMAIN, and NULL.

GWENHYWFAR_API int GWEN_IpcManager_RemoveRequest ( GWEN_IPCMANAGER mgr,
uint32_t  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

Definition at line 673 of file ipc.c.

References DBG_ERROR, GWEN_Ipc__Request_free(), and GWEN_LOGDOMAIN.

GWENHYWFAR_API int GWEN_IpcManager_SendRequest ( GWEN_IPCMANAGER mgr,
uint32_t  nid,
GWEN_DB_NODE req,
uint32_t *  pReqId 
)

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

Definition at line 586 of file ipc.c.

References DBG_ERROR, DBG_INFO, GWEN_ERROR_NOT_FOUND, gwen_ipc__lastid, GWEN_Ipc__Request_AddRequestMsg(), GWEN_Ipc__Request_new(), GWEN_IpcManager__SendMsg(), GWEN_IpcMsg_free(), GWEN_IpcMsg_new(), and GWEN_LOGDOMAIN.

GWENHYWFAR_API int GWEN_IpcManager_SendResponse ( GWEN_IPCMANAGER mgr,
uint32_t  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

Definition at line 629 of file ipc.c.

References DBG_DEBUG, DBG_ERROR, DBG_INFO, GWEN_ERROR_NOT_FOUND, GWEN_Ipc__Request_AddResponseMsg(), GWEN_IpcManager__SendMsg(), GWEN_IpcMsg_free(), GWEN_IpcMsg_new(), and GWEN_LOGDOMAIN.

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

Definition at line 407 of file ipc.c.

GWENHYWFAR_API void GWEN_IpcManager_SetClientDownFn ( GWEN_IPCMANAGER mgr,
GWEN_IPCMANAGER_CLIENTDOWN_FN  f,
void *  user_data 
)

Definition at line 1402 of file ipc.c.

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.

Definition at line 948 of file ipc.c.

References DBG_ERROR, GWEN_IpcManager__CheckRequests(), GWEN_IpcManager__Work(), and GWEN_LOGDOMAIN.


Generated by  doxygen 1.6.2