endpoint.h File Reference
`#include <gwenhywfar/inherit.h>`
`#include <gwenhywfar/tree2.h>`
`#include <gwenhywfar/inetsocket.h>`
`#include <gwenhywfar/msg.h>`
`#include <time.h>`

Go to the source code of this file.

## Macros

#define | GWEN_MSG_ENDPOINT_FLAGS_DELETE 0x80000000u
#define | GWEN_MSG_ENDPOINT_FLAGS_NOIO 0x40000000u
#define | GWEN_MSG_ENDPOINT_STATE_CONNECTED 2
#define | GWEN_MSG_ENDPOINT_STATE_CONNECTING 1
#define | GWEN_MSG_ENDPOINT_STATE_UNCONNECTED 0

## Typedefs

typedef struct GWEN_MSG_ENDPOINT | GWEN_MSG_ENDPOINT
| Object which can send and receive messages (base class).
typedef void(* | GWEN_MSG_ENDPOINT_ADDSOCKETS_FN) (GWEN_MSG_ENDPOINT *ep, GWEN_SOCKETSET *readSet, GWEN_SOCKETSET *writeSet, GWEN_SOCKETSET *xSet)
typedef void(* | GWEN_MSG_ENDPOINT_CHECKSOCKETS_FN) (GWEN_MSG_ENDPOINT *ep, GWEN_SOCKETSET *readSet, GWEN_SOCKETSET *writeSet, GWEN_SOCKETSET *xSet)

## Functions

GWENHYWFAR_API void | GWEN_MsgEndpoint_AddFlags (GWEN_MSG_ENDPOINT *ep, uint32_t f)
GWENHYWFAR_API void | GWEN_MsgEndpoint_AddReceivedMessage (GWEN_MSG_ENDPOINT *ep, GWEN_MSG *m)
GWENHYWFAR_API void | GWEN_MsgEndpoint_AddSendMessage (GWEN_MSG_ENDPOINT *ep, GWEN_MSG *m)
GWENHYWFAR_API void | GWEN_MsgEndpoint_AddSockets (GWEN_MSG_ENDPOINT *ep, GWEN_SOCKETSET *readSet, GWEN_SOCKETSET *writeSet, GWEN_SOCKETSET *xSet)
GWENHYWFAR_API void | GWEN_MsgEndpoint_Attach (GWEN_MSG_ENDPOINT *ep)
GWENHYWFAR_API void | GWEN_MsgEndpoint_CheckSockets (GWEN_MSG_ENDPOINT *ep, GWEN_SOCKETSET *readSet, GWEN_SOCKETSET *writeSet, GWEN_SOCKETSET *xSet)
GWENHYWFAR_API void | GWEN_MsgEndpoint_ChildrenAddSockets (GWEN_MSG_ENDPOINT *ep, GWEN_SOCKETSET *readSet, GWEN_SOCKETSET *writeSet, GWEN_SOCKETSET *xSet)
GWENHYWFAR_API void | GWEN_MsgEndpoint_ChildrenCheckSockets (GWEN_MSG_ENDPOINT *ep, GWEN_SOCKETSET *readSet, GWEN_SOCKETSET *writeSet, GWEN_SOCKETSET *xSet)
GWENHYWFAR_API void | GWEN_MsgEndpoint_ChildrenIoLoop (GWEN_MSG_ENDPOINT *ep, int timeout)
GWENHYWFAR_API void | GWEN_MsgEndpoint_DelFlags (GWEN_MSG_ENDPOINT *ep, uint32_t f)
GWENHYWFAR_API int | GWEN_MsgEndpoint_DiscardInput (GWEN_MSG_ENDPOINT *ep)
GWENHYWFAR_API void | GWEN_MsgEndpoint_Disconnect (GWEN_MSG_ENDPOINT *ep)
GWENHYWFAR_API void | GWEN_MsgEndpoint_free (GWEN_MSG_ENDPOINT *ep)
GWENHYWFAR_API GWEN_MSG * | GWEN_MsgEndpoint_GetCurrentlyReceivedMsg (const GWEN_MSG_ENDPOINT *ep)
GWENHYWFAR_API int | GWEN_MsgEndpoint_GetDefaultMessageSize (const GWEN_MSG_ENDPOINT *ep)
GWENHYWFAR_API GWEN_MSG * | GWEN_MsgEndpoint_GetFirstReceivedMessage (const GWEN_MSG_ENDPOINT *ep)
GWENHYWFAR_API GWEN_MSG * | GWEN_MsgEndpoint_GetFirstSendMessage (const GWEN_MSG_ENDPOINT *ep)
GWENHYWFAR_API uint32_t | GWEN_MsgEndpoint_GetFlags (const GWEN_MSG_ENDPOINT *ep)
GWENHYWFAR_API int | GWEN_MsgEndpoint_GetGroupId (const GWEN_MSG_ENDPOINT *ep)
GWENHYWFAR_API const char * | GWEN_MsgEndpoint_GetName (const GWEN_MSG_ENDPOINT *ep)
GWENHYWFAR_API uint32_t | GWEN_MsgEndpoint_GetNextMessageId (GWEN_MSG_ENDPOINT *ep)
GWENHYWFAR_API GWEN_MSG_LIST * | GWEN_MsgEndpoint_GetReceivedMessageList (const GWEN_MSG_ENDPOINT *ep)
GWENHYWFAR_API GWEN_MSG_LIST * | GWEN_MsgEndpoint_GetSendMessageList (const GWEN_MSG_ENDPOINT *ep)
GWENHYWFAR_API GWEN_SOCKET * | GWEN_MsgEndpoint_GetSocket (const GWEN_MSG_ENDPOINT *ep)
GWENHYWFAR_API int | GWEN_MsgEndpoint_GetState (const GWEN_MSG_ENDPOINT *ep)
GWENHYWFAR_API time_t | GWEN_MsgEndpoint_GetTimeOfLastStateChange (const GWEN_MSG_ENDPOINT *ep)
GWENHYWFAR_API int | GWEN_MsgEndpoint_HaveMessageToSend (const GWEN_MSG_ENDPOINT *ep)
GWENHYWFAR_API void | GWEN_MsgEndpoint_IoLoop (GWEN_MSG_ENDPOINT *ep, int timeout)
GWENHYWFAR_API GWEN_MSG_ENDPOINT * | GWEN_MsgEndpoint_new (const char *name, int groupId)
GWENHYWFAR_API int | GWEN_MsgEndpoint_ReadFromSocket (GWEN_MSG_ENDPOINT *ep, uint8_t *bufferPtr, uint32_t bufferLen)
GWENHYWFAR_API void | GWEN_MsgEndpoint_RemoveUnconnectedAndEmptyChildren (GWEN_MSG_ENDPOINT *ep)
GWENHYWFAR_API GWEN_MSG_ENDPOINT_ADDSOCKETS_FN | GWEN_MsgEndpoint_SetAddSocketsFn (GWEN_MSG_ENDPOINT *ep, GWEN_MSG_ENDPOINT_ADDSOCKETS_FN fn)
GWENHYWFAR_API GWEN_MSG_ENDPOINT_CHECKSOCKETS_FN | GWEN_MsgEndpoint_SetCheckSocketsFn (GWEN_MSG_ENDPOINT *ep, GWEN_MSG_ENDPOINT_CHECKSOCKETS_FN fn)
GWENHYWFAR_API void | GWEN_MsgEndpoint_SetCurrentlyReceivedMsg (GWEN_MSG_ENDPOINT *ep, GWEN_MSG *m)
GWENHYWFAR_API void | GWEN_MsgEndpoint_SetDefaultMessageSize (GWEN_MSG_ENDPOINT *ep, int i)
GWENHYWFAR_API void | GWEN_MsgEndpoint_SetFlags (GWEN_MSG_ENDPOINT *ep, uint32_t f)
GWENHYWFAR_API void | GWEN_MsgEndpoint_SetSocket (GWEN_MSG_ENDPOINT *ep, GWEN_SOCKET *sk)
GWENHYWFAR_API void | GWEN_MsgEndpoint_SetState (GWEN_MSG_ENDPOINT *ep, int m)
GWENHYWFAR_API GWEN_MSG * | GWEN_MsgEndpoint_TakeFirstReceivedMessage (GWEN_MSG_ENDPOINT *ep)
GWENHYWFAR_API int | GWEN_MsgEndpoint_WriteToSocket (GWEN_MSG_ENDPOINT *ep, const uint8_t *bufferPtr, uint32_t bufferLen)

## Macro Definition Documentation

## GWEN_MSG_ENDPOINT_FLAGS_DELETE

#define GWEN_MSG_ENDPOINT_FLAGS_DELETE 0x80000000u

Definition at line 19 of file endpoint.h.

## GWEN_MSG_ENDPOINT_FLAGS_NOIO

#define GWEN_MSG_ENDPOINT_FLAGS_NOIO 0x40000000u

Definition at line 20 of file endpoint.h.

## GWEN_MSG_ENDPOINT_STATE_CONNECTED

#define GWEN_MSG_ENDPOINT_STATE_CONNECTED 2

Definition at line 25 of file endpoint.h.

## GWEN_MSG_ENDPOINT_STATE_CONNECTING

#define GWEN_MSG_ENDPOINT_STATE_CONNECTING 1

Definition at line 24 of file endpoint.h.

## GWEN_MSG_ENDPOINT_STATE_UNCONNECTED

#define GWEN_MSG_ENDPOINT_STATE_UNCONNECTED 0

Definition at line 23 of file endpoint.h.

## Typedef Documentation

## GWEN_MSG_ENDPOINT

typedef struct GWEN_MSG_ENDPOINT GWEN_MSG_ENDPOINT

Object which can send and receive messages (base class).

Definition at line 37 of file endpoint.h.

## GWEN_MSG_ENDPOINT_ADDSOCKETS_FN

typedef void(* GWEN_MSG_ENDPOINT_ADDSOCKETS_FN) (GWEN_MSG_ENDPOINT *ep, GWEN_SOCKETSET *readSet, GWEN_SOCKETSET *writeSet, GWEN_SOCKETSET *xSet)

Definition at line 183 of file endpoint.h.

## GWEN_MSG_ENDPOINT_CHECKSOCKETS_FN

typedef void(* GWEN_MSG_ENDPOINT_CHECKSOCKETS_FN) (GWEN_MSG_ENDPOINT *ep, GWEN_SOCKETSET *readSet, GWEN_SOCKETSET *writeSet, GWEN_SOCKETSET *xSet)

Definition at line 188 of file endpoint.h.

## Function Documentation

## GWEN_MsgEndpoint_AddFlags()

GWENHYWFAR_API void GWEN_MsgEndpoint_AddFlags | ( | GWEN_MSG_ENDPOINT * | ep,
|  | uint32_t | f )

References GWENHYWFAR_API.

## GWEN_MsgEndpoint_AddReceivedMessage()

GWENHYWFAR_API void GWEN_MsgEndpoint_AddReceivedMessage | ( | GWEN_MSG_ENDPOINT * | ep,
|  | GWEN_MSG * | m )

References GWENHYWFAR_API.

## GWEN_MsgEndpoint_AddSendMessage()

GWENHYWFAR_API void GWEN_MsgEndpoint_AddSendMessage | ( | GWEN_MSG_ENDPOINT * | ep,
|  | GWEN_MSG * | m )

References GWENHYWFAR_API.

## GWEN_MsgEndpoint_AddSockets()

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

References GWENHYWFAR_API.

## GWEN_MsgEndpoint_Attach()

GWENHYWFAR_API void GWEN_MsgEndpoint_Attach | ( | GWEN_MSG_ENDPOINT * | ep | ) |

References GWENHYWFAR_API.

## GWEN_MsgEndpoint_CheckSockets()

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

References GWENHYWFAR_API.

## GWEN_MsgEndpoint_ChildrenAddSockets()

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

References GWENHYWFAR_API.

## GWEN_MsgEndpoint_ChildrenCheckSockets()

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

References GWENHYWFAR_API.

## GWEN_MsgEndpoint_ChildrenIoLoop()

GWENHYWFAR_API 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

  ep | endpoint whose direct first-level children are handles
  timeout | timeout in milliseconds for the select() system call internally used

References GWENHYWFAR_API.

## GWEN_MsgEndpoint_DelFlags()

GWENHYWFAR_API void GWEN_MsgEndpoint_DelFlags | ( | GWEN_MSG_ENDPOINT * | ep,
|  | uint32_t | f )

References GWENHYWFAR_API.

## GWEN_MsgEndpoint_DiscardInput()

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

References GWENHYWFAR_API.

## GWEN_MsgEndpoint_Disconnect()

GWENHYWFAR_API void GWEN_MsgEndpoint_Disconnect | ( | GWEN_MSG_ENDPOINT * | ep | ) |

References GWENHYWFAR_API.

## GWEN_MsgEndpoint_free()

GWENHYWFAR_API void GWEN_MsgEndpoint_free | ( | GWEN_MSG_ENDPOINT * | ep | ) |

References GWENHYWFAR_API.

## GWEN_MsgEndpoint_GetCurrentlyReceivedMsg()

GWENHYWFAR_API GWEN_MSG * GWEN_MsgEndpoint_GetCurrentlyReceivedMsg | ( | const GWEN_MSG_ENDPOINT * | ep | ) |

References GWENHYWFAR_API.

## GWEN_MsgEndpoint_GetDefaultMessageSize()

GWENHYWFAR_API int GWEN_MsgEndpoint_GetDefaultMessageSize | ( | const GWEN_MSG_ENDPOINT * | ep | ) |

References GWENHYWFAR_API.

## GWEN_MsgEndpoint_GetFirstReceivedMessage()

GWENHYWFAR_API GWEN_MSG * GWEN_MsgEndpoint_GetFirstReceivedMessage | ( | const GWEN_MSG_ENDPOINT * | ep | ) |

References GWENHYWFAR_API.

## GWEN_MsgEndpoint_GetFirstSendMessage()

GWENHYWFAR_API GWEN_MSG * GWEN_MsgEndpoint_GetFirstSendMessage | ( | const GWEN_MSG_ENDPOINT * | ep | ) |

References GWENHYWFAR_API.

## GWEN_MsgEndpoint_GetFlags()

GWENHYWFAR_API uint32_t GWEN_MsgEndpoint_GetFlags | ( | const GWEN_MSG_ENDPOINT * | ep | ) |

References GWENHYWFAR_API.

## GWEN_MsgEndpoint_GetGroupId()

GWENHYWFAR_API int GWEN_MsgEndpoint_GetGroupId | ( | const GWEN_MSG_ENDPOINT * | ep | ) |

References GWENHYWFAR_API.

## GWEN_MsgEndpoint_GetName()

GWENHYWFAR_API const char * GWEN_MsgEndpoint_GetName | ( | const GWEN_MSG_ENDPOINT * | ep | ) |

References GWENHYWFAR_API.

## GWEN_MsgEndpoint_GetNextMessageId()

GWENHYWFAR_API uint32_t GWEN_MsgEndpoint_GetNextMessageId | ( | GWEN_MSG_ENDPOINT * | ep | ) |

References GWENHYWFAR_API.

## GWEN_MsgEndpoint_GetReceivedMessageList()

GWENHYWFAR_API GWEN_MSG_LIST * GWEN_MsgEndpoint_GetReceivedMessageList | ( | const GWEN_MSG_ENDPOINT * | ep | ) |

References GWENHYWFAR_API.

## GWEN_MsgEndpoint_GetSendMessageList()

GWENHYWFAR_API GWEN_MSG_LIST * GWEN_MsgEndpoint_GetSendMessageList | ( | const GWEN_MSG_ENDPOINT * | ep | ) |

References GWENHYWFAR_API.

## GWEN_MsgEndpoint_GetSocket()

GWENHYWFAR_API GWEN_SOCKET * GWEN_MsgEndpoint_GetSocket | ( | const GWEN_MSG_ENDPOINT * | ep | ) |

References GWENHYWFAR_API.

## GWEN_MsgEndpoint_GetState()

GWENHYWFAR_API int GWEN_MsgEndpoint_GetState | ( | const GWEN_MSG_ENDPOINT * | ep | ) |

References GWENHYWFAR_API.

## GWEN_MsgEndpoint_GetTimeOfLastStateChange()

GWENHYWFAR_API time_t GWEN_MsgEndpoint_GetTimeOfLastStateChange | ( | const GWEN_MSG_ENDPOINT * | ep | ) |

References GWENHYWFAR_API.

## GWEN_MsgEndpoint_HaveMessageToSend()

GWENHYWFAR_API int GWEN_MsgEndpoint_HaveMessageToSend | ( | const GWEN_MSG_ENDPOINT * | ep | ) |

References GWENHYWFAR_API.

## GWEN_MsgEndpoint_IoLoop()

GWENHYWFAR_API void GWEN_MsgEndpoint_IoLoop | ( | GWEN_MSG_ENDPOINT * | ep,
|  | int | timeout )

Does one IO loop which internally does this:

- call GWEN_MsgEndpoint_AddSockets()
- call GWEN_Socket_Select()
- call GWEN_MsgEndpoint_CheckSockets() which handles reading and writing of messages

Parameters

  ep | endpoint to handle
  timeout | timeout in milliseconds for the GWEN_Socket_Select() call.

References GWENHYWFAR_API.

## GWEN_MsgEndpoint_new()

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

References GWENHYWFAR_API.

## GWEN_MsgEndpoint_ReadFromSocket()

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

References GWENHYWFAR_API.

## GWEN_MsgEndpoint_RemoveUnconnectedAndEmptyChildren()

GWENHYWFAR_API void GWEN_MsgEndpoint_RemoveUnconnectedAndEmptyChildren | ( | GWEN_MSG_ENDPOINT * | ep | ) |

References GWENHYWFAR_API.

## GWEN_MsgEndpoint_SetAddSocketsFn()

GWENHYWFAR_API GWEN_MSG_ENDPOINT_ADDSOCKETS_FN GWEN_MsgEndpoint_SetAddSocketsFn | ( | GWEN_MSG_ENDPOINT * | ep,
|  | GWEN_MSG_ENDPOINT_ADDSOCKETS_FN | fn )

References GWENHYWFAR_API.

## GWEN_MsgEndpoint_SetCheckSocketsFn()

GWENHYWFAR_API GWEN_MSG_ENDPOINT_CHECKSOCKETS_FN GWEN_MsgEndpoint_SetCheckSocketsFn | ( | GWEN_MSG_ENDPOINT * | ep,
|  | GWEN_MSG_ENDPOINT_CHECKSOCKETS_FN | fn )

References GWENHYWFAR_API.

## GWEN_MsgEndpoint_SetCurrentlyReceivedMsg()

GWENHYWFAR_API void GWEN_MsgEndpoint_SetCurrentlyReceivedMsg | ( | GWEN_MSG_ENDPOINT * | ep,
|  | GWEN_MSG * | m )

References GWENHYWFAR_API.

## GWEN_MsgEndpoint_SetDefaultMessageSize()

GWENHYWFAR_API void GWEN_MsgEndpoint_SetDefaultMessageSize | ( | GWEN_MSG_ENDPOINT * | ep,
|  | int | i )

References GWENHYWFAR_API.

## GWEN_MsgEndpoint_SetFlags()

GWENHYWFAR_API void GWEN_MsgEndpoint_SetFlags | ( | GWEN_MSG_ENDPOINT * | ep,
|  | uint32_t | f )

References GWENHYWFAR_API.

## GWEN_MsgEndpoint_SetSocket()

GWENHYWFAR_API void GWEN_MsgEndpoint_SetSocket | ( | GWEN_MSG_ENDPOINT * | ep,
|  | GWEN_SOCKET * | sk )

References GWENHYWFAR_API.

## GWEN_MsgEndpoint_SetState()

GWENHYWFAR_API void GWEN_MsgEndpoint_SetState | ( | GWEN_MSG_ENDPOINT * | ep,
|  | int | m )

References GWENHYWFAR_API.

## GWEN_MsgEndpoint_TakeFirstReceivedMessage()

GWENHYWFAR_API GWEN_MSG * GWEN_MsgEndpoint_TakeFirstReceivedMessage | ( | GWEN_MSG_ENDPOINT * | ep | ) |

References GWENHYWFAR_API.

## GWEN_MsgEndpoint_WriteToSocket()

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

References GWENHYWFAR_API.