This commit is contained in:
huxi
2025-12-03 11:12:34 +08:00
parent c23ae4f24c
commit bc195654bf
8163 changed files with 3799544 additions and 92 deletions
@@ -0,0 +1,170 @@
#ifndef WEBSOCKET_API_H
#define WEBSOCKET_API_H
#include "websocket_define.h"
#include "websocket_base64.h"
#include "websocket_sha_1.h"
#include "websocket_intlib.h"
#include "websocket_api.h"
#include "string.h"
#include "mbedtls/mbedtls_config.h"
//#include "mbedtls/platform.h"
#include "mbedtls/net.h"
//#include "mbedtls/debug.h"
//#include "mbedtls/ssl.h"
#include "mbedtls/entropy.h"
#include "mbedtls/ctr_drbg.h"
#include "mbedtls/error.h"
#include "generic/typedef.h"
#include "mbedtls/certs.h"
#include "lwip/sockets.h"
#include "lwip/inet.h"
#include "lwip/netdb.h"
#include "debug.h"
enum {
NO_MSG = 0,
ERCV_DATA_MSG,
CLIENT_SEND_DATA_MSG,
CLIENT_RECV_DATA_MSG,
SERVER_SEND_DATA_MSG,
SERVER_ERCV_DATA_MSG,
CLIENT_PING_MSG,
CLIENT_PONG_MSG,
SERVER_PING_MSG,
SERVER_PONG_MSG,
RECV_TIME_OUT_MSG,
DISCONNECT_MSG,
CONNECT_RST_MSG,
MAX_MSG = 32,
};
// websocket根据data[0]判别数据包类型 比如0x81 = 0x80 | 0x1 为一个txt类型数据包
typedef enum {
WCT_SEQ = 0x00,
WCT_TXTDATA = 0x01, // 0x1:标识一个txt类型数据包
WCT_BINDATA = 0x02, // 0x2:标识一个bin类型数据包
WCT_DISCONN = 0x08, // 0x8:标识一个断开连接类型数据包
WCT_PING = 0x09, // 0x8:标识一个断开连接类型数据包
WCT_PONG = 0x0a, // 0xA:表示一个pong类型数据包
WCT_FIN = 0x80, //fin
WCT_END = 0x10,
WCT_CLOSE_OK = 0xaa,
WCT_INIT = 0xff,
} WS_CMD_Type;
typedef struct websockets_mbedtls {
/*client*/
mbedtls_net_context server_fd;
mbedtls_entropy_context entropy;
mbedtls_ctr_drbg_context ctr_drbg;
mbedtls_ssl_context ssl;
mbedtls_ssl_config conf;
mbedtls_x509_crt cacert;
char ssl_fd;
/*server*/
u8 sll_ip_addr[16];
mbedtls_net_context client_fd;//add client fd
mbedtls_x509_crt srvcert;
mbedtls_pk_context pkey;
/* CA */
char *mbedtls_ca_buf;
int mbedtls_ca_size;
} WEBSOCKETS_MBTLS_INFO;
struct websocket_req_head {
u8 medthod[4];
u8 file[1024];
u8 host[32];
u8 version[8];
};
typedef struct websocket_struct {
void *sk_fd;
void *lst_fd;
int ping_thread_id;
int recv_thread_id;
char websocket_mode;
char websocket_recvsub;
u8 websocket_data_type;
u8 send_data_use_seq;
u16 port;
struct sockaddr_in servaddr;
struct sockaddr_in clientaddr;
u8 *ip_or_url;
const char *origin_str;
const char *user_agent_str;
u8 ip_addr[16];
u8 key[32];
u8 msg[MAX_MSG];
u8 msg_write;
u8 msg_read;
u8 *recv_buf;
u32 recv_buf_size;
u64 recv_len;
u32 recv_time_out;
u32 payload_data_len;
u32 payload_data_continue;
struct websocket_req_head req_head;
struct websockets_mbedtls websockets_mbtls_info;
u16 websocket_valid;
int (*_init)(struct websocket_struct *websocket_info);
void (*_exit)(struct websocket_struct *websocket_info);
int (*_handshack)(struct websocket_struct *websocket_info);
void (*_heart_thread)(void *param);
void (*_recv_thread)(void *param);
int (*_recv)(struct websocket_struct *websocket_info);
int (*_send)(struct websocket_struct *websocket_info, u8 *buf, int len, char type);
void (*_recv_cb)(u8 *buf, u32 len, u8 type);
int (*_exit_notify)(struct websocket_struct *websocket_info);
u8 ping_kill_flag;
u8 recv_kill_flag;
char *kill_task;
} WEBSOCKET_INFO;
typedef enum {
NOT_ESTABLISHED = 0x00,
ESTABLISHED = 0x01,
INVALID_ESTABLISHED = 0x02,
} WS_STATUS;
extern int atoi(const char *__nptr);
void websocket_msg_fifo(struct websocket_struct *websockets_info, u8 msg_value);
u8 websocket_msg_get(struct websocket_struct *websockets_info);
void websocket_msg_clear(struct websocket_struct *websockets_info);
void websockets_send_data_set_seq_packet(struct websocket_struct *websockets_info, char seq_en);
int websockets_socket_send(struct websocket_struct *websockets_info, u8 *buf, int len, char type);//通用数据发送,type自定义指定类型
/******************websockets**************************************/
int websockets_pong_heart_beat(struct websocket_struct *websockets_info, u8 *buf, u64 *len, char index);
int websockets_ping_heart_beat(struct websocket_struct *websockets_info, u8 *buf, char index);
void websockets_client_socket_heart_thread(void *param);
void websockets_client_socket_recv_thread(void *param);
void websockets_client_socket_exit(struct websocket_struct *websocket_info);
int websockets_client_socket_send(struct websocket_struct *websocket_info, u8 *buf, int len, char type);
int websockets_client_socket_recv(struct websocket_struct *websocket_info);
int webcockets_client_socket_handshack(struct websocket_struct *websocket_info);
int websockets_client_socket_init(struct websocket_struct *websocket_info);
int websockets_client_notify_disconnet_to_server(struct websocket_struct *websockets_info);//客户端往服务器发送disconnect消息
void websockets_serv_socket_heart_thread(void *param);
int websockets_serv_socket_recv(struct websocket_struct *websockets_info);
int websockets_serv_socket_send(struct websocket_struct *websockets_info, u8 *buf, int len, char type);
void websockets_serv_socket_exit(struct websocket_struct *websockets_info);
int websockets_serv_socket_hanshack(struct websocket_struct *websockets_info);
int websockets_serv_socket_init(struct websocket_struct *websockets_info);
int websockets_struct_check(int sizeof_struct);
#endif