gwenhywfar 5.12.0
endpoint.c File Reference
#include "msgio/endpoint_p.h"
#include <gwenhywfar/debug.h>
#include <gwenhywfar/text.h>
Include dependency graph for endpoint.c:

Go to the source code of this file.

Macros

#define GWEN_MSG_ENDPOINT_DEFAULT_MSGSIZE   1024

Functions

void GWEN_MsgEndpoint_AddFlags (GWEN_MSG_ENDPOINT *ep, uint32_t f)
void GWEN_MsgEndpoint_AddReceivedMessage (GWEN_MSG_ENDPOINT *ep, GWEN_MSG *m)
void GWEN_MsgEndpoint_AddSendMessage (GWEN_MSG_ENDPOINT *ep, GWEN_MSG *m)
void GWEN_MsgEndpoint_AddSockets (GWEN_MSG_ENDPOINT *ep, GWEN_SOCKETSET *readSet, GWEN_SOCKETSET *writeSet, GWEN_SOCKETSET *xSet)
void GWEN_MsgEndpoint_Attach (GWEN_MSG_ENDPOINT *ep)
void GWEN_MsgEndpoint_CheckSockets (GWEN_MSG_ENDPOINT *ep, GWEN_SOCKETSET *readSet, GWEN_SOCKETSET *writeSet, GWEN_SOCKETSET *xSet)
void GWEN_MsgEndpoint_ChildrenAddSockets (GWEN_MSG_ENDPOINT *ep, GWEN_SOCKETSET *readSet, GWEN_SOCKETSET *writeSet, GWEN_SOCKETSET *xSet)
void GWEN_MsgEndpoint_ChildrenCheckSockets (GWEN_MSG_ENDPOINT *ep, GWEN_SOCKETSET *readSet, GWEN_SOCKETSET *writeSet, GWEN_SOCKETSET *xSet)
void GWEN_MsgEndpoint_ChildrenIoLoop (GWEN_MSG_ENDPOINT *ep, int timeout)
void GWEN_MsgEndpoint_DelFlags (GWEN_MSG_ENDPOINT *ep, uint32_t f)
int GWEN_MsgEndpoint_DiscardInput (GWEN_MSG_ENDPOINT *ep)
void GWEN_MsgEndpoint_Disconnect (GWEN_MSG_ENDPOINT *ep)
void GWEN_MsgEndpoint_free (GWEN_MSG_ENDPOINT *ep)
GWEN_MSGGWEN_MsgEndpoint_GetCurrentlyReceivedMsg (const GWEN_MSG_ENDPOINT *ep)
int GWEN_MsgEndpoint_GetDefaultMessageSize (const GWEN_MSG_ENDPOINT *ep)
GWEN_MSGGWEN_MsgEndpoint_GetFirstReceivedMessage (const GWEN_MSG_ENDPOINT *ep)
GWEN_MSGGWEN_MsgEndpoint_GetFirstSendMessage (const GWEN_MSG_ENDPOINT *ep)
uint32_t GWEN_MsgEndpoint_GetFlags (const GWEN_MSG_ENDPOINT *ep)
int GWEN_MsgEndpoint_GetGroupId (const GWEN_MSG_ENDPOINT *ep)
const char * GWEN_MsgEndpoint_GetName (const GWEN_MSG_ENDPOINT *ep)
uint32_t GWEN_MsgEndpoint_GetNextMessageId (GWEN_MSG_ENDPOINT *ep)
GWEN_MSG_LISTGWEN_MsgEndpoint_GetReceivedMessageList (const GWEN_MSG_ENDPOINT *ep)
GWEN_MSG_LISTGWEN_MsgEndpoint_GetSendMessageList (const GWEN_MSG_ENDPOINT *ep)
GWEN_SOCKETGWEN_MsgEndpoint_GetSocket (const GWEN_MSG_ENDPOINT *ep)
int GWEN_MsgEndpoint_GetState (const GWEN_MSG_ENDPOINT *ep)
time_t GWEN_MsgEndpoint_GetTimeOfLastStateChange (const GWEN_MSG_ENDPOINT *ep)
int GWEN_MsgEndpoint_HaveMessageToSend (const GWEN_MSG_ENDPOINT *ep)
void GWEN_MsgEndpoint_IoLoop (GWEN_MSG_ENDPOINT *ep, int timeout)
GWEN_MSG_ENDPOINTGWEN_MsgEndpoint_new (const char *name, int groupId)
int GWEN_MsgEndpoint_ReadFromSocket (GWEN_MSG_ENDPOINT *ep, uint8_t *bufferPtr, uint32_t bufferLen)
void GWEN_MsgEndpoint_RemoveUnconnectedAndEmptyChildren (GWEN_MSG_ENDPOINT *ep)
GWEN_MSG_ENDPOINT_ADDSOCKETS_FN GWEN_MsgEndpoint_SetAddSocketsFn (GWEN_MSG_ENDPOINT *ep, GWEN_MSG_ENDPOINT_ADDSOCKETS_FN fn)
GWEN_MSG_ENDPOINT_CHECKSOCKETS_FN GWEN_MsgEndpoint_SetCheckSocketsFn (GWEN_MSG_ENDPOINT *ep, GWEN_MSG_ENDPOINT_CHECKSOCKETS_FN fn)
void GWEN_MsgEndpoint_SetCurrentlyReceivedMsg (GWEN_MSG_ENDPOINT *ep, GWEN_MSG *m)
void GWEN_MsgEndpoint_SetDefaultMessageSize (GWEN_MSG_ENDPOINT *ep, int i)
void GWEN_MsgEndpoint_SetFlags (GWEN_MSG_ENDPOINT *ep, uint32_t f)
void GWEN_MsgEndpoint_SetSocket (GWEN_MSG_ENDPOINT *ep, GWEN_SOCKET *sk)
void GWEN_MsgEndpoint_SetState (GWEN_MSG_ENDPOINT *ep, int m)
GWEN_MSGGWEN_MsgEndpoint_TakeFirstReceivedMessage (GWEN_MSG_ENDPOINT *ep)
int GWEN_MsgEndpoint_WriteToSocket (GWEN_MSG_ENDPOINT *ep, const uint8_t *bufferPtr, uint32_t bufferLen)

Macro Definition Documentation

◆ GWEN_MSG_ENDPOINT_DEFAULT_MSGSIZE

#define GWEN_MSG_ENDPOINT_DEFAULT_MSGSIZE   1024

Definition at line 22 of file endpoint.c.

Referenced by GWEN_MsgEndpoint_new().

Function Documentation

◆ GWEN_MsgEndpoint_AddFlags()

void GWEN_MsgEndpoint_AddFlags ( GWEN_MSG_ENDPOINT * ep,
uint32_t f )

Definition at line 169 of file endpoint.c.

◆ GWEN_MsgEndpoint_AddReceivedMessage()

void GWEN_MsgEndpoint_AddReceivedMessage ( GWEN_MSG_ENDPOINT * ep,
GWEN_MSG * m )

Definition at line 221 of file endpoint.c.

References GWEN_Msg_List_Add(), and GWEN_Msg_RewindCurrentPos().

Referenced by _distributeBufferContent().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GWEN_MsgEndpoint_AddSendMessage()

void GWEN_MsgEndpoint_AddSendMessage ( GWEN_MSG_ENDPOINT * ep,
GWEN_MSG * m )

Definition at line 250 of file endpoint.c.

References GWEN_Msg_List_Add(), and GWEN_Msg_RewindCurrentPos().

Here is the call graph for this function:

◆ GWEN_MsgEndpoint_AddSockets()

void GWEN_MsgEndpoint_AddSockets ( GWEN_MSG_ENDPOINT * ep,
GWEN_SOCKETSET * readSet,
GWEN_SOCKETSET * writeSet,
GWEN_SOCKETSET * xSet )

Definition at line 289 of file endpoint.c.

Referenced by _addSocketsWhenConnected(), _addSocketsWhenConnecting(), GWEN_MsgEndpoint_ChildrenAddSockets(), and GWEN_MsgEndpoint_IoLoop().

Here is the caller graph for this function:

◆ GWEN_MsgEndpoint_Attach()

void GWEN_MsgEndpoint_Attach ( GWEN_MSG_ENDPOINT * ep)

Definition at line 53 of file endpoint.c.

Referenced by GWEN_MsgRequest_SetEndpoint().

Here is the caller graph for this function:

◆ GWEN_MsgEndpoint_CheckSockets()

void GWEN_MsgEndpoint_CheckSockets ( GWEN_MSG_ENDPOINT * ep,
GWEN_SOCKETSET * readSet,
GWEN_SOCKETSET * writeSet,
GWEN_SOCKETSET * xSet )

Definition at line 297 of file endpoint.c.

Referenced by _checkSocketsWhenConnected(), _checkSocketsWhenConnecting(), GWEN_MsgEndpoint_ChildrenCheckSockets(), and GWEN_MsgEndpoint_IoLoop().

Here is the caller graph for this function:

◆ GWEN_MsgEndpoint_ChildrenAddSockets()

void GWEN_MsgEndpoint_ChildrenAddSockets ( GWEN_MSG_ENDPOINT * ep,
GWEN_SOCKETSET * readSet,
GWEN_SOCKETSET * writeSet,
GWEN_SOCKETSET * xSet )

Definition at line 305 of file endpoint.c.

References GWEN_MsgEndpoint_AddSockets().

Referenced by _addSockets(), and GWEN_MsgEndpoint_ChildrenIoLoop().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GWEN_MsgEndpoint_ChildrenCheckSockets()

void GWEN_MsgEndpoint_ChildrenCheckSockets ( GWEN_MSG_ENDPOINT * ep,
GWEN_SOCKETSET * readSet,
GWEN_SOCKETSET * writeSet,
GWEN_SOCKETSET * xSet )

Definition at line 321 of file endpoint.c.

References GWEN_MsgEndpoint_CheckSockets().

Referenced by _checkSockets(), and GWEN_MsgEndpoint_ChildrenIoLoop().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GWEN_MsgEndpoint_ChildrenIoLoop()

void GWEN_MsgEndpoint_ChildrenIoLoop ( GWEN_MSG_ENDPOINT * ep,
int timeout )

Handles IO for all first-level children of the given endpoint (like GWEN_MsgEndpoint_IoLoop does for a single endpoint).

Parameters
ependpoint whose direct first-level children are handles
timeouttimeout in milliseconds for the select() system call internally used

Definition at line 392 of file endpoint.c.

References DBG_INFO, GWEN_ERROR_INTERRUPTED, GWEN_ERROR_TIMEOUT, GWEN_LOGDOMAIN, GWEN_MsgEndpoint_ChildrenAddSockets(), GWEN_MsgEndpoint_ChildrenCheckSockets(), GWEN_Socket_Select(), GWEN_SocketSet_free(), GWEN_SocketSet_GetSocketCount(), GWEN_SocketSet_new(), and NULL.

Here is the call graph for this function:

◆ GWEN_MsgEndpoint_DelFlags()

void GWEN_MsgEndpoint_DelFlags ( GWEN_MSG_ENDPOINT * ep,
uint32_t f )

Definition at line 177 of file endpoint.c.

◆ GWEN_MsgEndpoint_DiscardInput()

int GWEN_MsgEndpoint_DiscardInput ( GWEN_MSG_ENDPOINT * ep)

This function can be used to drain the file descriptor/socket from waiting data. An example is an endpoint implementation from AqHome which uses an USB serial device. When message receiption errors occur (e.g. due to collisions on the data line) the rest of data on the line needs to be discarded because it might belong the the errornous previous message.

Definition at line 460 of file endpoint.c.

References DBG_INFO, GWEN_ERROR_IO, GWEN_ERROR_TIMEOUT, GWEN_LOGDOMAIN, and GWEN_MsgEndpoint_ReadFromSocket().

Here is the call graph for this function:

◆ GWEN_MsgEndpoint_Disconnect()

void GWEN_MsgEndpoint_Disconnect ( GWEN_MSG_ENDPOINT * ep)

Definition at line 483 of file endpoint.c.

References DBG_INFO, GWEN_LOGDOMAIN, GWEN_MSG_ENDPOINT_STATE_UNCONNECTED, GWEN_MsgEndpoint_SetState(), GWEN_Socket_Close(), GWEN_Socket_free(), and NULL.

Referenced by _addSockets(), _addSocketsWhenConnected(), _addSocketsWhenConnecting(), _checkSockets(), and _checkSockets().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GWEN_MsgEndpoint_free()

void GWEN_MsgEndpoint_free ( GWEN_MSG_ENDPOINT * ep)

◆ GWEN_MsgEndpoint_GetCurrentlyReceivedMsg()

GWEN_MSG * GWEN_MsgEndpoint_GetCurrentlyReceivedMsg ( const GWEN_MSG_ENDPOINT * ep)

Definition at line 274 of file endpoint.c.

References NULL.

Referenced by _distributeBufferContent().

Here is the caller graph for this function:

◆ GWEN_MsgEndpoint_GetDefaultMessageSize()

int GWEN_MsgEndpoint_GetDefaultMessageSize ( const GWEN_MSG_ENDPOINT * ep)

Definition at line 185 of file endpoint.c.

Referenced by _distributeBufferContent().

Here is the caller graph for this function:

◆ GWEN_MsgEndpoint_GetFirstReceivedMessage()

GWEN_MSG * GWEN_MsgEndpoint_GetFirstReceivedMessage ( const GWEN_MSG_ENDPOINT * ep)

Definition at line 231 of file endpoint.c.

References GWEN_Msg_List_First(), and NULL.

Referenced by GWEN_MsgEndpoint_RemoveUnconnectedAndEmptyChildren(), and GWEN_MsgEndpoint_TakeFirstReceivedMessage().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GWEN_MsgEndpoint_GetFirstSendMessage()

GWEN_MSG * GWEN_MsgEndpoint_GetFirstSendMessage ( const GWEN_MSG_ENDPOINT * ep)

Definition at line 260 of file endpoint.c.

References GWEN_Msg_List_First(), and NULL.

Referenced by _writeCurrentMessage().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GWEN_MsgEndpoint_GetFlags()

uint32_t GWEN_MsgEndpoint_GetFlags ( const GWEN_MSG_ENDPOINT * ep)

Definition at line 154 of file endpoint.c.

◆ GWEN_MsgEndpoint_GetGroupId()

int GWEN_MsgEndpoint_GetGroupId ( const GWEN_MSG_ENDPOINT * ep)

Definition at line 97 of file endpoint.c.

Referenced by _distributeBufferContent().

Here is the caller graph for this function:

◆ GWEN_MsgEndpoint_GetName()

◆ GWEN_MsgEndpoint_GetNextMessageId()

uint32_t GWEN_MsgEndpoint_GetNextMessageId ( GWEN_MSG_ENDPOINT * ep)

Definition at line 200 of file endpoint.c.

◆ GWEN_MsgEndpoint_GetReceivedMessageList()

GWEN_MSG_LIST * GWEN_MsgEndpoint_GetReceivedMessageList ( const GWEN_MSG_ENDPOINT * ep)

Definition at line 207 of file endpoint.c.

References NULL.

Referenced by _checkSocketsWhenConnected().

Here is the caller graph for this function:

◆ GWEN_MsgEndpoint_GetSendMessageList()

GWEN_MSG_LIST * GWEN_MsgEndpoint_GetSendMessageList ( const GWEN_MSG_ENDPOINT * ep)

Definition at line 214 of file endpoint.c.

References NULL.

Referenced by _addSocketsWhenConnected(), and _checkSocketsWhenConnected().

Here is the caller graph for this function:

◆ GWEN_MsgEndpoint_GetSocket()

GWEN_SOCKET * GWEN_MsgEndpoint_GetSocket ( const GWEN_MSG_ENDPOINT * ep)

Definition at line 104 of file endpoint.c.

References NULL.

Referenced by _addSockets(), _addSockets(), _addSockets(), _checkSockets(), _checkSockets(), and _checkSockets().

Here is the caller graph for this function:

◆ GWEN_MsgEndpoint_GetState()

◆ GWEN_MsgEndpoint_GetTimeOfLastStateChange()

time_t GWEN_MsgEndpoint_GetTimeOfLastStateChange ( const GWEN_MSG_ENDPOINT * ep)

Definition at line 144 of file endpoint.c.

Referenced by _addSockets(), _addSocketsWhenConnecting(), and _checkForNeedToReconnect().

Here is the caller graph for this function:

◆ GWEN_MsgEndpoint_HaveMessageToSend()

int GWEN_MsgEndpoint_HaveMessageToSend ( const GWEN_MSG_ENDPOINT * ep)

Definition at line 267 of file endpoint.c.

References GWEN_Msg_List_GetCount().

Referenced by _addSockets(), and _addSockets().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GWEN_MsgEndpoint_IoLoop()

void GWEN_MsgEndpoint_IoLoop ( GWEN_MSG_ENDPOINT * ep,
int timeout )

Does one IO loop which internally does this:

Parameters
ependpoint to handle
timeouttimeout in milliseconds for the GWEN_Socket_Select() call.

Definition at line 360 of file endpoint.c.

References DBG_INFO, GWEN_ERROR_INTERRUPTED, GWEN_ERROR_TIMEOUT, GWEN_LOGDOMAIN, GWEN_MsgEndpoint_AddSockets(), GWEN_MsgEndpoint_CheckSockets(), GWEN_Socket_Select(), GWEN_SocketSet_free(), GWEN_SocketSet_GetSocketCount(), GWEN_SocketSet_new(), and NULL.

Here is the call graph for this function:

◆ GWEN_MsgEndpoint_new()

GWEN_MSG_ENDPOINT * GWEN_MsgEndpoint_new ( const char * name,
int groupId )

◆ GWEN_MsgEndpoint_ReadFromSocket()

int GWEN_MsgEndpoint_ReadFromSocket ( GWEN_MSG_ENDPOINT * ep,
uint8_t * bufferPtr,
uint32_t bufferLen )

Definition at line 424 of file endpoint.c.

References DBG_DEBUG, DBG_INFO, GWEN_ERROR_INTERRUPTED, GWEN_LOGDOMAIN, GWEN_MsgEndpoint_GetName(), and GWEN_Socket_Read().

Referenced by _readCurrentMessage(), and GWEN_MsgEndpoint_DiscardInput().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GWEN_MsgEndpoint_RemoveUnconnectedAndEmptyChildren()

void GWEN_MsgEndpoint_RemoveUnconnectedAndEmptyChildren ( GWEN_MSG_ENDPOINT * ep)

◆ GWEN_MsgEndpoint_SetAddSocketsFn()

Definition at line 504 of file endpoint.c.

References NULL.

Referenced by GWEN_MsgIoEndpoint_Extend(), GWEN_MultilayerEndpoint_new(), GWEN_TcpcEndpoint_new(), and GWEN_TcpdEndpoint_new().

Here is the caller graph for this function:

◆ GWEN_MsgEndpoint_SetCheckSocketsFn()

Definition at line 518 of file endpoint.c.

References NULL.

Referenced by _freeData(), GWEN_MsgIoEndpoint_Extend(), GWEN_MultilayerEndpoint_new(), GWEN_TcpcEndpoint_new(), and GWEN_TcpdEndpoint_new().

Here is the caller graph for this function:

◆ GWEN_MsgEndpoint_SetCurrentlyReceivedMsg()

void GWEN_MsgEndpoint_SetCurrentlyReceivedMsg ( GWEN_MSG_ENDPOINT * ep,
GWEN_MSG * m )

Definition at line 281 of file endpoint.c.

Referenced by _distributeBufferContent().

Here is the caller graph for this function:

◆ GWEN_MsgEndpoint_SetDefaultMessageSize()

void GWEN_MsgEndpoint_SetDefaultMessageSize ( GWEN_MSG_ENDPOINT * ep,
int i )

Definition at line 192 of file endpoint.c.

◆ GWEN_MsgEndpoint_SetFlags()

void GWEN_MsgEndpoint_SetFlags ( GWEN_MSG_ENDPOINT * ep,
uint32_t f )

Definition at line 161 of file endpoint.c.

◆ GWEN_MsgEndpoint_SetSocket()

void GWEN_MsgEndpoint_SetSocket ( GWEN_MSG_ENDPOINT * ep,
GWEN_SOCKET * sk )

Definition at line 111 of file endpoint.c.

References GWEN_Socket_Close(), and GWEN_Socket_free().

Referenced by _startConnect(), _startListen(), and GWEN_IpcEndpoint_CreateIpcTcpServiceForSocket().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GWEN_MsgEndpoint_SetState()

void GWEN_MsgEndpoint_SetState ( GWEN_MSG_ENDPOINT * ep,
int m )

◆ GWEN_MsgEndpoint_TakeFirstReceivedMessage()

GWEN_MSG * GWEN_MsgEndpoint_TakeFirstReceivedMessage ( GWEN_MSG_ENDPOINT * ep)

Definition at line 238 of file endpoint.c.

References GWEN_Msg_List_Del(), and GWEN_MsgEndpoint_GetFirstReceivedMessage().

Here is the call graph for this function:

◆ GWEN_MsgEndpoint_WriteToSocket()

int GWEN_MsgEndpoint_WriteToSocket ( GWEN_MSG_ENDPOINT * ep,
const uint8_t * bufferPtr,
uint32_t bufferLen )

Definition at line 444 of file endpoint.c.

References GWEN_ERROR_INTERRUPTED, and GWEN_Socket_Write().

Referenced by _writeCurrentMessage().

Here is the call graph for this function:
Here is the caller graph for this function: