#ifndef WEBSOCKET_H_
#define WEBSOCKET_H_

#define WS_PORT				8080
#define WS_TIMEOUT			10
#define WS_DEBUG			LWIP_DBG_ON
#define WS_MAX_RETRIES		10
#define WS_POLL_INTERVAL	60 // WS_POLL_INTERVAL/2 seconds
#define WS_MAX_CONN			4
#define WS_BUFFER_SIZE		512

#define OP_CONT		0x00
#define OP_TEXT		0x01
#define OP_BINARY	0x02
#define OP_CLOSE	0x08
#define OP_PING		0x09
#define OP_PONG		0x0A

struct ws_state {
	bool active;
	uint8_t retries;
	struct altcp_pcb *pcb;
	struct ws_state *next;
};

#define WS_ALLOC_WS_STATE() (struct ws_state *)mem_malloc(sizeof(struct ws_state))

typedef void (* tWSHandler ) (uint8_t *data, uint16_t len);
typedef void (* tWSOpenHandler ) (struct ws_state * wss);

void ws_server_init(void);
void ws_send_all(uint8_t *data, uint16_t len);
void ws_set_receive_handler( tWSHandler ws_handler);
void ws_set_open_handler( tWSOpenHandler ws_handler);

#endif
