16#include "msgio/endpoint_p.h"
18#include <gwenhywfar/debug.h>
19#include <gwenhywfar/text.h>
22#define GWEN_MSG_ENDPOINT_DEFAULT_MSGSIZE 1024
40 ep->name=strdup(name?name:
"<unnamed>");
55 if (ep && ep->refCount)
68 "Deleting endpoint \"%s\" (%d msgs in recv list, %d msgs in send list)",
69 (ep->name)?(ep->name):
"<unnamed>",
92 return (ep?ep->name:
NULL);
99 return (ep?ep->groupId:0);
106 return (ep?ep->socket:
NULL);
135 ep->timeOfLastStateChange=time(
NULL);
146 return (ep?ep->timeOfLastStateChange:0);
156 return (ep?ep->flags:0);
187 return ep?ep->defaultMessageSize:0;
195 ep->defaultMessageSize=i;
202 return ep?(++(ep->lastMsgId)):0;
209 return (ep?ep->receivedMessageList:
NULL);
216 return (ep?ep->sendMessageList:
NULL);
276 return (ep?ep->currentlyReceivedMsg:
NULL);
284 ep->currentlyReceivedMsg=m;
291 if (ep && ep->addSocketsFn)
292 ep->addSocketsFn(ep, readSet, writeSet, xSet);
299 if (ep && ep->checkSocketsFn)
300 ep->checkSocketsFn(ep, readSet, writeSet, xSet);
312 epChild=GWEN_MsgEndpoint_Tree2_GetFirstChild(ep);
315 epChild=GWEN_MsgEndpoint_Tree2_GetNext(epChild);
328 epChild=GWEN_MsgEndpoint_Tree2_GetFirstChild(ep);
331 epChild=GWEN_MsgEndpoint_Tree2_GetNext(epChild);
342 epChild=GWEN_MsgEndpoint_Tree2_GetFirstChild(ep);
346 epNext=GWEN_MsgEndpoint_Tree2_GetNext(epChild);
350 GWEN_MsgEndpoint_Tree2_Unlink(epChild);
523 o=ep->checkSocketsFn;
524 ep->checkSocketsFn=fn;
#define DBG_INFO(dbg_logger, format,...)
#define DBG_DEBUG(dbg_logger, format,...)
GWEN_MSG_ENDPOINT * GWEN_MsgEndpoint_new(const char *name, int groupId)
void GWEN_MsgEndpoint_ChildrenCheckSockets(GWEN_MSG_ENDPOINT *ep, GWEN_SOCKETSET *readSet, GWEN_SOCKETSET *writeSet, GWEN_SOCKETSET *xSet)
GWEN_MSG * GWEN_MsgEndpoint_GetCurrentlyReceivedMsg(const GWEN_MSG_ENDPOINT *ep)
void GWEN_MsgEndpoint_RemoveUnconnectedAndEmptyChildren(GWEN_MSG_ENDPOINT *ep)
void GWEN_MsgEndpoint_SetDefaultMessageSize(GWEN_MSG_ENDPOINT *ep, int i)
void GWEN_MsgEndpoint_ChildrenAddSockets(GWEN_MSG_ENDPOINT *ep, GWEN_SOCKETSET *readSet, GWEN_SOCKETSET *writeSet, GWEN_SOCKETSET *xSet)
void GWEN_MsgEndpoint_IoLoop(GWEN_MSG_ENDPOINT *ep, int timeout)
void GWEN_MsgEndpoint_DelFlags(GWEN_MSG_ENDPOINT *ep, uint32_t f)
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)
GWEN_SOCKET * GWEN_MsgEndpoint_GetSocket(const GWEN_MSG_ENDPOINT *ep)
void GWEN_MsgEndpoint_SetCurrentlyReceivedMsg(GWEN_MSG_ENDPOINT *ep, GWEN_MSG *m)
void GWEN_MsgEndpoint_AddFlags(GWEN_MSG_ENDPOINT *ep, uint32_t f)
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)
int GWEN_MsgEndpoint_WriteToSocket(GWEN_MSG_ENDPOINT *ep, const uint8_t *bufferPtr, uint32_t bufferLen)
int GWEN_MsgEndpoint_GetGroupId(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)
void GWEN_MsgEndpoint_AddReceivedMessage(GWEN_MSG_ENDPOINT *ep, GWEN_MSG *m)
GWEN_MSG * GWEN_MsgEndpoint_TakeFirstReceivedMessage(GWEN_MSG_ENDPOINT *ep)
const char * GWEN_MsgEndpoint_GetName(const GWEN_MSG_ENDPOINT *ep)
int GWEN_MsgEndpoint_HaveMessageToSend(const GWEN_MSG_ENDPOINT *ep)
uint32_t GWEN_MsgEndpoint_GetNextMessageId(GWEN_MSG_ENDPOINT *ep)
void GWEN_MsgEndpoint_AddSendMessage(GWEN_MSG_ENDPOINT *ep, GWEN_MSG *m)
uint32_t GWEN_MsgEndpoint_GetFlags(const GWEN_MSG_ENDPOINT *ep)
int GWEN_MsgEndpoint_GetDefaultMessageSize(const GWEN_MSG_ENDPOINT *ep)
void GWEN_MsgEndpoint_SetSocket(GWEN_MSG_ENDPOINT *ep, GWEN_SOCKET *sk)
#define GWEN_MSG_ENDPOINT_DEFAULT_MSGSIZE
GWEN_MSG_ENDPOINT_CHECKSOCKETS_FN GWEN_MsgEndpoint_SetCheckSocketsFn(GWEN_MSG_ENDPOINT *ep, GWEN_MSG_ENDPOINT_CHECKSOCKETS_FN fn)
GWEN_MSG * GWEN_MsgEndpoint_GetFirstReceivedMessage(const GWEN_MSG_ENDPOINT *ep)
void GWEN_MsgEndpoint_ChildrenIoLoop(GWEN_MSG_ENDPOINT *ep, int timeout)
void GWEN_MsgEndpoint_Attach(GWEN_MSG_ENDPOINT *ep)
void GWEN_MsgEndpoint_SetFlags(GWEN_MSG_ENDPOINT *ep, uint32_t f)
int GWEN_MsgEndpoint_ReadFromSocket(GWEN_MSG_ENDPOINT *ep, uint8_t *bufferPtr, uint32_t bufferLen)
GWEN_MSG_LIST * GWEN_MsgEndpoint_GetSendMessageList(const GWEN_MSG_ENDPOINT *ep)
void GWEN_MsgEndpoint_free(GWEN_MSG_ENDPOINT *ep)
int GWEN_MsgEndpoint_DiscardInput(GWEN_MSG_ENDPOINT *ep)
GWEN_MSG * GWEN_MsgEndpoint_GetFirstSendMessage(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
void(* GWEN_MSG_ENDPOINT_ADDSOCKETS_FN)(GWEN_MSG_ENDPOINT *ep, GWEN_SOCKETSET *readSet, GWEN_SOCKETSET *writeSet, GWEN_SOCKETSET *xSet)
void(* GWEN_MSG_ENDPOINT_CHECKSOCKETS_FN)(GWEN_MSG_ENDPOINT *ep, GWEN_SOCKETSET *readSet, GWEN_SOCKETSET *writeSet, GWEN_SOCKETSET *xSet)
#define GWEN_ERROR_TIMEOUT
#define GWEN_ERROR_INTERRUPTED
GWENHYWFAR_API void GWEN_Socket_free(GWEN_SOCKET *sp)
GWENHYWFAR_API int GWEN_SocketSet_GetSocketCount(GWEN_SOCKETSET *ssp)
GWENHYWFAR_API int GWEN_Socket_Close(GWEN_SOCKET *sp)
GWENHYWFAR_API void GWEN_SocketSet_free(GWEN_SOCKETSET *ssp)
GWENHYWFAR_API GWEN_SOCKETSET * GWEN_SocketSet_new(void)
GWENHYWFAR_API int GWEN_Socket_Read(GWEN_SOCKET *sp, char *buffer, int *bsize)
GWENHYWFAR_API int GWEN_Socket_Select(GWEN_SOCKETSET *rs, GWEN_SOCKETSET *ws, GWEN_SOCKETSET *xs, int timeout)
GWENHYWFAR_API int GWEN_Socket_Write(GWEN_SOCKET *sp, const char *buffer, int *bsize)
struct GWEN_SOCKETSETSTRUCT GWEN_SOCKETSET
struct GWEN_SOCKET GWEN_SOCKET
#define GWEN_INHERIT_FUNCTIONS(t)
#define GWEN_INHERIT_INIT(t, element)
#define GWEN_INHERIT_FINI(t, element)
GWEN_MSG * GWEN_Msg_List_First(const GWEN_MSG_LIST *l)
uint32_t GWEN_Msg_List_GetCount(const GWEN_MSG_LIST *l)
GWEN_MSG_LIST * GWEN_Msg_List_new()
void GWEN_Msg_List_Del(GWEN_MSG *element)
void GWEN_Msg_List_free(GWEN_MSG_LIST *l)
void GWEN_Msg_List_Add(GWEN_MSG *element, GWEN_MSG_LIST *list)
#define GWEN_FREE_OBJECT(varname)
#define GWEN_NEW_OBJECT(typ, varname)
void GWEN_Msg_free(GWEN_MSG *msg)
int GWEN_Msg_RewindCurrentPos(GWEN_MSG *msg)
#define GWEN_TREE2_FUNCTIONS(t, pr)
#define GWEN_TREE2_FINI(t, element, pr)
#define GWEN_TREE2_INIT(t, element, pr)