/* * Copyright (C) 2019 Freie Universität Berlin * * This file is subject to the terms and conditions of the GNU Lesser * General Public License v2.1. See the file LICENSE in the top level * directory for more details. */ /** * @addtogroup net_sock_async_event * @{ * * @file * @brief Type definitions for asynchronous socks with @ref sys_event * * @author Martine Lenders */ #ifndef SOCK_ASYNC_CTX_H #define SOCK_ASYNC_CTX_H #include "event.h" #ifdef __cplusplus extern "C" { #endif /** * @brief Generalized callback type */ typedef union { /** * @brief anything goes */ void (*generic)(void *, sock_async_flags_t, void *); #ifdef MODULE_SOCK_DTLS sock_dtls_cb_t dtls; /**< DTLS callback */ #endif #ifdef MODULE_SOCK_IP sock_ip_cb_t ip; /**< IP callback */ #endif #ifdef MODULE_SOCK_TCP sock_tcp_cb_t tcp; /**< TCP callback */ sock_tcp_queue_cb_t tcp_queue; /**< TCP queue callback */ #endif #ifdef MODULE_SOCK_UDP sock_udp_cb_t udp; /**< UDP callback */ #endif } sock_event_cb_t; /** * @brief Event definition for context scope */ typedef struct { event_t super; /**< event structure that gets extended */ sock_event_cb_t cb; /**< callback */ void *sock; /**< generic pointer to a @ref net_sock object */ void *cb_arg; /**< callback argument */ sock_async_flags_t type; /**< types of the event */ } sock_event_t; /** * @brief Asynchronous context for @ref net_sock_async_event */ typedef struct { sock_event_t event; /**< event storage */ event_queue_t *queue; /**< event queue to post socket events to */ } sock_async_ctx_t; #ifdef __cplusplus } #endif #endif /* SOCK_ASYNC_CTX_H */ /** @} */