blob: 880ac178c10667e8566ca191263da008cc38b800 [file] [log] [blame]
/*
* Copyright (c) 2017 Intel Corporation.
*
* SPDX-License-Identifier: Apache-2.0
*/
#ifndef __WEBSOCKET_H__
#define __WEBSOCKET_H__
#include <net/http.h>
#ifdef __cplusplus
extern "C" {
#endif
/**
* @brief Websocket library
* @defgroup websocket Websocket Library
* @{
*/
/** Values for flag variable in HTTP receive callback */
#define WS_FLAG_FINAL 0x00000001
#define WS_FLAG_TEXT 0x00000002
#define WS_FLAG_BINARY 0x00000004
#define WS_FLAG_CLOSE 0x00000008
#define WS_FLAG_PING 0x00000010
#define WS_FLAG_PONG 0x00000011
enum ws_opcode {
WS_OPCODE_CONTINUE = 0x00,
WS_OPCODE_DATA_TEXT = 0x01,
WS_OPCODE_DATA_BINARY = 0x02,
WS_OPCODE_CLOSE = 0x08,
WS_OPCODE_PING = 0x09,
WS_OPCODE_PONG = 0x0A,
};
/**
* @brief Send websocket msg to peer.
*
* @details The function will automatically add websocket header to the
* message.
*
* @param ctx Websocket context.
* @param payload Websocket data to send.
* @param payload_len Length of the data to be sent.
* @param opcode Operation code (text, binary, ping, pong, close)
* @param mask Mask the data, see RFC 6455 for details
* @param final Is this final message for this message send. If final == false,
* then the first message must have valid opcode and subsequent messages must
* have opcode WS_OPCODE_CONTINUE. If final == true and this is the only
* message, then opcode should have proper opcode (text or binary) set.
* @param dst Remote socket address
* @param user_send_data User specific data to this connection. This is passed
* as a parameter to sent cb after the packet has been sent.
*
* @return 0 if ok, <0 if error.
*/
int ws_send_msg(struct http_ctx *ctx, u8_t *payload, size_t payload_len,
enum ws_opcode opcode, bool mask, bool final,
const struct sockaddr *dst,
void *user_send_data);
/**
* @brief Send message to client.
*
* @details The function will automatically add websocket header to the
* message.
*
* @param ctx Websocket context.
* @param payload Websocket data to send.
* @param payload_len Length of the data to be sent.
* @param opcode Operation code (text, binary, ping ,pong ,close)
* @param final Is this final message for this data send
* @param dst Remote socket address
* @param user_send_data User specific data to this connection. This is passed
* as a parameter to sent cb after the packet has been sent.
*
* @return 0 if ok, <0 if error.
*/
static inline int ws_send_msg_to_client(struct http_ctx *ctx,
u8_t *payload,
size_t payload_len,
enum ws_opcode opcode,
bool final,
const struct sockaddr *dst,
void *user_send_data)
{
return ws_send_msg(ctx, payload, payload_len, opcode, false, final,
dst, user_send_data);
}
#ifdef __cplusplus
}
#endif
/**
* @}
*/
#endif /* __WS_H__ */