#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.
#define GWEN_IPC_ERROR_CONNERR 0x80000002 |
Definition at line 37 of file ipc.h.
Referenced by GWEN_IpcManager__CheckRequests().
#define GWEN_IPC_ERROR_TIMEOUT 0x80000003 |
Definition at line 38 of file ipc.h.
Referenced by GWEN_IpcManager__CheckRequests().
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) |
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.
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.
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 | |||
) |
Definition at line 999 of file ipc.c.
References GWEN_Ipc__Request_Dump(), GWEN_IpcNode_Dump(), and GWEN_MemoryDebug_GetObjectCount().
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 | ) |
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:
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.
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, | |
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.
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.
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.
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.
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.
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 | |||
) |
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 | ) |
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.