16#include "./endpoint_multilayer_p.h"
18#include <gwenhywfar/endpoint.h>
19#include <gwenhywfar/debug.h>
20#include <gwenhywfar/inherit.h>
23#define GWEN_ENDPOINT_MULTILAYER_NAME "multilayer"
24#define GWEN_ENDPOINT_MULTILAYER_DEFAULT_RECONNECT_TIME 5
25#define GWEN_ENDPOINT_MULTILAYER_DEFAULT_CONNECT_TIMEOUT 10
66 GWEN_ENDPOINT_MULTILAYER *xep;
85 GWEN_ENDPOINT_MULTILAYER *xep;
87 xep=(GWEN_ENDPOINT_MULTILAYER*) p;
96 GWEN_ENDPOINT_MULTILAYER *xep;
100 return xep->reconnectTimeInSeconds;
110 GWEN_ENDPOINT_MULTILAYER *xep;
114 xep->reconnectTimeInSeconds=i;
123 GWEN_ENDPOINT_MULTILAYER *xep;
127 return xep->connectTimeoutInSeconds;
137 GWEN_ENDPOINT_MULTILAYER *xep;
141 xep->connectTimeoutInSeconds=i;
150 GWEN_ENDPOINT_MULTILAYER *xep;
164 GWEN_ENDPOINT_MULTILAYER *xep;
178 GWEN_ENDPOINT_MULTILAYER *xep;
184 oldFn=xep->startConnectFn;
185 xep->startConnectFn=fn;
199 GWEN_ENDPOINT_MULTILAYER *xep;
205 oldFn=xep->checkSocketsFn;
206 xep->checkSocketsFn=fn;
251 epChild=GWEN_MsgEndpoint_Tree2_GetFirstChild(ep);
280 epChild=GWEN_MsgEndpoint_Tree2_GetFirstChild(ep);
387 epChild=GWEN_MsgEndpoint_Tree2_GetFirstChild(ep);
389 GWEN_ENDPOINT_MULTILAYER *xep;
393 if (xep->startConnectFn)
394 return xep->startConnectFn(ep, epChild);
405 GWEN_ENDPOINT_MULTILAYER *xep;
411 if (xep->checkSocketsFn)
412 xep->checkSocketsFn(ep, epChild, readSet, writeSet, xSet);
#define DBG_INFO(dbg_logger, format,...)
#define DBG_ERROR(dbg_logger, format,...)
#define DBG_DEBUG(dbg_logger, format,...)
GWEN_MSG_ENDPOINT * GWEN_MsgEndpoint_new(const char *name, int groupId)
GWEN_MSG_LIST * GWEN_MsgEndpoint_GetReceivedMessageList(const GWEN_MSG_ENDPOINT *ep)
void GWEN_MsgEndpoint_AddSockets(GWEN_MSG_ENDPOINT *ep, GWEN_SOCKETSET *readSet, GWEN_SOCKETSET *writeSet, GWEN_SOCKETSET *xSet)
time_t GWEN_MsgEndpoint_GetTimeOfLastStateChange(const GWEN_MSG_ENDPOINT *ep)
void GWEN_MsgEndpoint_SetState(GWEN_MSG_ENDPOINT *ep, int m)
void GWEN_MsgEndpoint_CheckSockets(GWEN_MSG_ENDPOINT *ep, GWEN_SOCKETSET *readSet, GWEN_SOCKETSET *writeSet, GWEN_SOCKETSET *xSet)
int GWEN_MsgEndpoint_GetState(const GWEN_MSG_ENDPOINT *ep)
GWEN_MSG_ENDPOINT_ADDSOCKETS_FN GWEN_MsgEndpoint_SetAddSocketsFn(GWEN_MSG_ENDPOINT *ep, GWEN_MSG_ENDPOINT_ADDSOCKETS_FN fn)
void GWEN_MsgEndpoint_Disconnect(GWEN_MSG_ENDPOINT *ep)
const char * GWEN_MsgEndpoint_GetName(const GWEN_MSG_ENDPOINT *ep)
GWEN_MSG_ENDPOINT_CHECKSOCKETS_FN GWEN_MsgEndpoint_SetCheckSocketsFn(GWEN_MSG_ENDPOINT *ep, GWEN_MSG_ENDPOINT_CHECKSOCKETS_FN fn)
GWEN_MSG_LIST * GWEN_MsgEndpoint_GetSendMessageList(const GWEN_MSG_ENDPOINT *ep)
struct GWEN_MSG_ENDPOINT GWEN_MSG_ENDPOINT
Object which can send and receive messages (base class).
#define GWEN_MSG_ENDPOINT_STATE_UNCONNECTED
#define GWEN_MSG_ENDPOINT_STATE_CONNECTING
#define GWEN_MSG_ENDPOINT_STATE_CONNECTED
static void _addSockets(GWEN_MSG_ENDPOINT *ep, GWEN_SOCKETSET *readSet, GWEN_SOCKETSET *writeSet, GWEN_UNUSED GWEN_SOCKETSET *xSet)
static void _checkSockets(GWEN_MSG_ENDPOINT *ep, GWEN_SOCKETSET *readSet, GWEN_SOCKETSET *writeSet, GWEN_SOCKETSET *xSet)
int GWEN_MultilayerEndpoint_GetStage(const GWEN_MSG_ENDPOINT *ep)
void GWEN_MultilayerEndpoint_SetStage(GWEN_MSG_ENDPOINT *ep, int i)
static void _moveMessagesBetweenLists(GWEN_MSG_LIST *srcList, GWEN_MSG_LIST *dstList)
#define GWEN_ENDPOINT_MULTILAYER_DEFAULT_CONNECT_TIMEOUT
#define GWEN_ENDPOINT_MULTILAYER_NAME
void GWEN_MultilayerEndpoint_SetConnectTimeoutInSeconds(GWEN_MSG_ENDPOINT *ep, int i)
GWEN_ENDPOINT_MULTILAYER_STARTCONNECT_FN GWEN_MultilayerEndpoint_SetStartConnectFn(GWEN_MSG_ENDPOINT *ep, GWEN_ENDPOINT_MULTILAYER_STARTCONNECT_FN fn)
GWEN_MSG_ENDPOINT * GWEN_MultilayerEndpoint_new(const char *name, int groupId)
static void GWENHYWFAR_CB _freeData(void *bp, void *p)
void GWEN_MultilayerEndpoint_SetReconnectTimeInSeconds(GWEN_MSG_ENDPOINT *ep, int i)
int GWEN_MultilayerEndpoint_GetConnectTimeoutInSeconds(const GWEN_MSG_ENDPOINT *ep)
int GWEN_MultilayerEndpoint_StartConnect(GWEN_MSG_ENDPOINT *ep)
static void _checkSocketsWhenConnecting(GWEN_MSG_ENDPOINT *ep, GWEN_MSG_ENDPOINT *epChild, GWEN_SOCKETSET *readSet, GWEN_SOCKETSET *writeSet, GWEN_SOCKETSET *xSet)
int GWEN_MultilayerEndpoint_GetReconnectTimeInSeconds(const GWEN_MSG_ENDPOINT *ep)
static void _addSocketsWhenConnected(GWEN_MSG_ENDPOINT *ep, GWEN_MSG_ENDPOINT *epChild, GWEN_SOCKETSET *readSet, GWEN_SOCKETSET *writeSet, GWEN_SOCKETSET *xSet)
static int _startConnect(GWEN_MSG_ENDPOINT *ep)
static void _addSocketsWhenConnecting(GWEN_MSG_ENDPOINT *ep, GWEN_MSG_ENDPOINT *epChild, GWEN_SOCKETSET *readSet, GWEN_SOCKETSET *writeSet, GWEN_SOCKETSET *xSet)
static void _checkSockets(GWEN_MSG_ENDPOINT *ep, GWEN_SOCKETSET *readSet, GWEN_SOCKETSET *writeSet, GWEN_SOCKETSET *xSet)
static void _checkForNeedToReconnect(GWEN_MSG_ENDPOINT *ep)
#define GWEN_ENDPOINT_MULTILAYER_DEFAULT_RECONNECT_TIME
static void _checkSocketsWhenConnected(GWEN_MSG_ENDPOINT *ep, GWEN_MSG_ENDPOINT *epChild, GWEN_SOCKETSET *readSet, GWEN_SOCKETSET *writeSet, GWEN_SOCKETSET *xSet)
GWEN_ENDPOINT_MULTILAYER_CHECKSOCKETS_FN GWEN_MultilayerEndpoint_SetCheckSocketsFn(GWEN_MSG_ENDPOINT *ep, GWEN_ENDPOINT_MULTILAYER_CHECKSOCKETS_FN fn)
static void _addSockets(GWEN_MSG_ENDPOINT *ep, GWEN_SOCKETSET *readSet, GWEN_SOCKETSET *writeSet, GWEN_UNUSED GWEN_SOCKETSET *xSet)
int(* GWEN_ENDPOINT_MULTILAYER_STARTCONNECT_FN)(GWEN_MSG_ENDPOINT *ep, GWEN_MSG_ENDPOINT *epChild)
void(* GWEN_ENDPOINT_MULTILAYER_CHECKSOCKETS_FN)(GWEN_MSG_ENDPOINT *ep, GWEN_MSG_ENDPOINT *epChild, GWEN_SOCKETSET *readSet, GWEN_SOCKETSET *writeSet, GWEN_SOCKETSET *xSet)
#define GWEN_ERROR_GENERIC
#define GWEN_ERROR_IN_PROGRESS
struct GWEN_SOCKETSETSTRUCT GWEN_SOCKETSET
#define GWEN_INHERIT_SETDATA(bt, t, element, data, fn)
#define GWEN_INHERIT(bt, t)
#define GWEN_INHERIT_GETDATA(bt, t, element)
GWEN_MSG * GWEN_Msg_List_First(const GWEN_MSG_LIST *l)
void GWEN_Msg_List_Del(GWEN_MSG *element)
void GWEN_Msg_List_Add(GWEN_MSG *element, GWEN_MSG_LIST *list)
#define GWEN_FREE_OBJECT(varname)
#define GWEN_NEW_OBJECT(typ, varname)
static void GWENHYWFAR_CB _freeData(GWEN_UNUSED void *bp, void *p)