Provided by: libwslay-doc_1.1.1-3_all bug

NAME

       wslay_event_context_server_init - Initialize an event-based API context

SYNOPSIS

       #include <wslay/wslay.h>

       int    wslay_event_context_server_init(wslay_event_context_ptr    *ctx,    const    struct
       wslay_event_callbacks *callbacks, void *user_data)

       int    wslay_event_context_client_init(wslay_event_context_ptr    *ctx,    const    struct
       wslay_event_callbacks *callbacks, void *user_data)

       void wslay_event_context_free(wslay_event_context_ptr ctx)

DESCRIPTION

       wslay_event_context_server_init()  function  initializes  an  event-based  API context for
       WebSocket  server  use.    wslay_event_context_client_init()   function   initializes   an
       event-based  API  context for WebSocket client use.  If they return successfully, ctx will
       point to a structure which holds any  necessary  resources  needed  to  process  WebSocket
       protocol transfers.

       callbacks is a pointer to wslay_event_callbacks, which is defined as follows:

          struct wslay_event_callbacks {
              wslay_event_recv_callback                recv_callback;
              wslay_event_send_callback                send_callback;
              wslay_event_genmask_callback             genmask_callback;
              wslay_event_on_frame_recv_start_callback on_frame_recv_start_callback;
              wslay_event_on_frame_recv_chunk_callback on_frame_recv_chunk_callback;
              wslay_event_on_frame_recv_end_callback   on_frame_recv_end_callback;
              wslay_event_on_msg_recv_callback         on_msg_recv_callback;
          };

       typedef  ssize_t  (*wslay_event_recv_callback)(wslay_event_context_ptr  ctx, uint8_t *buf,
       size_t len, int flags, void *user_data)
              recv_callback is invoked by wslay_event_recv() when it wants to receive  more  data
              from peer.  The implementation of this callback function must read data at most len
              bytes from peer and store them in buf and return the number of bytes  read.   flags
              is always 0 in this version.

              If there is an error, return -1 and set error code WSLAY_ERR_CALLBACK_FAILURE using
              wslay_event_set_error().  Wslay event-based API on the whole  assumes  non-blocking
              I/O.   If  the  cause  of  error is EAGAIN or EWOULDBLOCK, set WSLAY_ERR_WOULDBLOCK
              instead. This is important because it tells wslay_event_recv()  to  stop  receiving
              further data and return.

       typedef  ssize_t  (*wslay_event_send_callback)(wslay_event_context_ptr  ctx, const uint8_t
       *data, size_t len, int flags, void *user_data)
              send_callback is invoked by wslay_event_send() when it wants to send more  data  to
              peer.   The  implementation  of  this  callback function must send data at most len
              bytes to peer and return the number of bytes sent.  flags is the bitwise OR of zero
              or more of the following flag:

              WSLAY_MSG_MORE
                     There is more data to send

              It provides some hints to tune performance and behaviour.

              If there is an error, return -1 and set error code WSLAY_ERR_CALLBACK_FAILURE using
              wslay_event_set_error().  Wslay event-based API on the whole  assumes  non-blocking
              I/O.   If  the  cause  of  error is EAGAIN or EWOULDBLOCK, set WSLAY_ERR_WOULDBLOCK
              instead. This is important because it tells wslay_event_send() to stop sending data
              and return.

       typedef  int  (*wslay_event_genmask_callback)(wslay_event_context_ptr  ctx,  uint8_t *buf,
       size_t len, void *user_data)
              genmask_callback is invoked by wslay_event_send() when it wants new  mask  key.  As
              described  in  RFC6455,  only  the traffic from WebSocket client is masked, so this
              callback function is only needed if an event-based API is initialized for WebSocket
              client  use.   The  implementation  of this callback function must fill exactly len
              bytes of data in buf and return 0 on success.  If there is an error, return -1  and
              set error code WSLAY_ERR_CALLBACK_FAILURE using wslay_event_set_error().

       typedef   void   (*wslay_event_on_frame_recv_start_callback)(wslay_event_context_ptr  ctx,
       const struct wslay_event_on_frame_recv_start_arg *arg, void *user_data)
              on_frame_recv_start_callback is invoked by  wslay_event_recv()  when  a  new  frame
              starts to be received.  This callback function is only invoked once for each frame.
              wslay_event_on_frame_recv_start_arg is defined as follows:

                 struct wslay_event_on_frame_recv_start_arg {
                     uint8_t  fin;
                     uint8_t  rsv;
                     uint8_t  opcode;
                     uint64_t payload_length;
                 };

              fin, rsv and  opcode  is  fin  bit  and  reserved  bits  and  opcode  of  a  frame.
              payload_length is a payload length of a frame.

       typedef   void   (*wslay_event_on_frame_recv_chunk_callback)(wslay_event_context_ptr  ctx,
       const struct wslay_event_on_frame_recv_chunk_arg *arg, void *user_data)
              on_frame_recv_chunk_callback is invoked by wslay_event_recv() when a chunk of frame
              payload is received.  wslay_event_on_frame_recv_chunk_arg is defined as follows:

                 struct wslay_event_on_frame_recv_chunk_arg {
                     const uint8_t *data;
                     size_t         data_length;
                 };

              data points to a chunk of payload data.  data_length is the length of a chunk.

       typedef  void  (*wslay_event_on_frame_recv_end_callback)(wslay_event_context_ptr ctx, void
       *user_data)
              on_frame_recv_end_callback  is  invoked  by  wslay_event_recv()  when  a  frame  is
              completely received.

       typedef void (*wslay_event_on_msg_recv_callback)(wslay_event_context_ptr ctx, const struct
       wslay_event_on_msg_recv_arg *arg, void *user_data)
              on_msg_recv_callback is invoked by wslay_event_recv() when a message is  completely
              received. wslay_event_on_msg_recv_arg is defined as follows:

                 struct wslay_event_on_msg_recv_arg {
                     uint8_t        rsv;
                     uint8_t        opcode;
                     const uint8_t *msg;
                     size_t         msg_length;
                     uint16_t       status_code;
                 };

              The  rsv  member  and  the  opcode  member are reserved bits and opcode of received
              message respectively.  The rsv member is constructed as follows:

                 rsv = (RSV1 << 2) | (RSV2 << 1) | RSV3

              The msg member points to the message  of  the  received  message.   The  msg_length
              member  is  the  length  of message.  If a message is close control frame, in other
              words, opcode == WSLAY_CONNECTION_CLOSE, status_code is set to the status  code  in
              the close control frame.  If no status code is included in the close control frame,
              status_code set to 0.

       user_data is an arbitrary pointer, which is directly passed to each callback functions  as
       user_data argument.

       When    initialized    event-based    API   context   ctx   is   no   longer   used,   use
       wslay_event_context_free() to free any resources allocated for ctx.

RETURN VALUE

       wslay_event_context_server_init() and wslay_event_context_client_init() returns  0  if  it
       succeeds, or one of the following negative error codes:

       WSLAY_ERR_NOMEM
              Out of memory.

SEE ALSO

       wslay_event_send(), wslay_event_recv(), wslay_event_set_error()

AUTHOR

       Tatsuhiro Tsujikawa

COPYRIGHT

       2021, 2015, Tatsuhiro Tsujikawa

@PACKAGE_VERSION@                          Nov 07, 2021        WSLAY_EVENT_CONTEXT_SERVER_INIT(3)