upleb.uk

Public git repos — served from a NIP-34 GRASP relay at git.upleb.uk

summaryrefslogtreecommitdiff
path: root/components/wisp_relay/ws_server.h
blob: 4fe616e119ec14885c837434c189b032aa1ec888 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#ifndef WS_SERVER_H
#define WS_SERVER_H

#include <stdint.h>
#include <stdbool.h>
#include <stddef.h>
#include "esp_http_server.h"
#include "freertos/FreeRTOS.h"
#include "freertos/semphr.h"

#define WS_MAX_CONNECTIONS     8
#define WS_MAX_FRAME_SIZE      65536
#define WS_IP_ADDR_MAX_LEN     48

typedef struct {
    int fd;
    bool active;
    uint32_t connected_at;
    uint32_t last_activity;
    char remote_ip[WS_IP_ADDR_MAX_LEN];
} ws_connection_t;

typedef struct {
    httpd_handle_t server;
    ws_connection_t connections[WS_MAX_CONNECTIONS];
    SemaphoreHandle_t lock;
    uint8_t connection_count;
} ws_server_t;

typedef void (*ws_message_cb_t)(int fd, const char *data, size_t len);
typedef void (*ws_disconnect_cb_t)(int fd);

esp_err_t ws_server_init(ws_server_t *server, uint16_t port, ws_message_cb_t on_message);
void ws_server_set_disconnect_cb(ws_disconnect_cb_t cb);
void ws_server_stop(ws_server_t *server);
bool ws_server_is_running(ws_server_t *server);
esp_err_t ws_server_send(ws_server_t *server, int fd, const char *data, size_t len);
esp_err_t ws_server_broadcast(ws_server_t *server, const char *data, size_t len);
void ws_server_close_connection(ws_server_t *server, int fd);

#endif