/*
 * 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__ */
