42 lines
1.6 KiB
C
42 lines
1.6 KiB
C
#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
|
|
|
|
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);
|
|
|
|
static struct ws_state* ws_state_alloc(void);
|
|
static void ws_state_init(struct ws_state *wss);
|
|
static void ws_state_free(struct ws_state *wss);
|
|
void ws_server_init(void);
|
|
static void ws_server_init_pcb( struct altcp_pcb *pcb, uint16_t port);
|
|
static err_t ws_accept(void *arg, struct altcp_pcb *pcb, err_t err);
|
|
static err_t ws_recv(void *arg, struct altcp_pcb *pcb, struct pbuf *p, err_t err);
|
|
static void ws_err (void *arg, err_t err);
|
|
static err_t ws_close_conn(struct altcp_pcb *pcb, struct ws_state *wss);
|
|
static err_t ws_close_or_abort_conn(struct altcp_pcb *pcb, struct ws_state *wss, uint8_t abort_conn);
|
|
static err_t ws_poll(void *arg, struct altcp_pcb *pcb);
|
|
static err_t ws_handshake(struct altcp_pcb *pcb, struct ws_state *wss, struct pbuf *p);
|
|
static err_t ws_read(struct altcp_pcb *pcb, struct ws_state *wss, struct pbuf *p);
|
|
static err_t ws_send(struct ws_state *wss, uint8_t *data, uint16_t len);
|
|
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
|