text: /*
   * 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 <m.lenders@fu-berlin.de>
   */
  #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 */
  /** @} */
  