luat_websocket.h 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. #ifndef LUAT_WEBSOCKET_H
  2. #define LUAT_WEBSOCKET_H
  3. enum
  4. {
  5. WEBSOCKET_MSG_RELEASE = 0,
  6. WEBSOCKET_MSG_PUBLISH = 1,
  7. WEBSOCKET_MSG_TIMER_PING = 2,
  8. WEBSOCKET_MSG_CONNACK = 3,
  9. WEBSOCKET_MSG_RECONNECT = 4,
  10. WEBSOCKET_MSG_SENT = 5,
  11. WEBSOCKET_MSG_DISCONNECT = 6
  12. };
  13. #ifdef LUAT_USE_PSRAM
  14. #define WEBSOCKET_PAYLOAD_MAX (32*1024)
  15. #define WEBSOCKET_MAX_READ (16*1024)
  16. #else
  17. #define WEBSOCKET_PAYLOAD_MAX (8*1024)
  18. #define WEBSOCKET_MAX_READ (4*1024)
  19. #endif
  20. #define WEBSOCKET_RECV_BUF_LEN_MAX (WEBSOCKET_PAYLOAD_MAX + 16)
  21. typedef struct
  22. {
  23. // http_parser parser;// websocket broker
  24. network_ctrl_t *netc; // websocket netc
  25. luat_ip_addr_t ip_addr; // websocket ip
  26. char host[192]; // websocket host
  27. char uri[256];
  28. uint8_t is_tls;
  29. uint16_t remote_port; // 远程端口号
  30. uint16_t buffer_offset; // 用于标识pkg_buff当前有多少数据
  31. uint8_t pkg_buff[WEBSOCKET_RECV_BUF_LEN_MAX + 16];
  32. int websocket_cb_id; // websocket lua回调函数
  33. void* websocket_cb; /**< websocket 回调函数*/
  34. uint32_t keepalive; // 心跳时长 单位s
  35. uint8_t adapter_index; // 适配器索引号, 似乎并没有什么用
  36. uint8_t websocket_state; // websocket状态
  37. uint8_t reconnect; // websocket是否重连
  38. uint32_t reconnect_time; // websocket重连时间 单位ms
  39. void *reconnect_timer; // websocket重连定时器
  40. void *ping_timer; // websocket_ping定时器
  41. int websocket_ref; // 强制引用自身避免被GC
  42. char* headers;
  43. int frame_wait;
  44. } luat_websocket_ctrl_t;
  45. typedef struct luat_websocket_connopts
  46. {
  47. const char *url;
  48. uint16_t keepalive;
  49. uint8_t use_ipv6;
  50. } luat_websocket_connopts_t;
  51. typedef struct luat_websocket_pkg
  52. {
  53. uint8_t FIN;
  54. uint8_t OPT_CODE;
  55. uint8_t R;
  56. uint8_t mark;
  57. uint16_t plen; // 最多支持64k
  58. const char *payload;
  59. } luat_websocket_pkg_t;
  60. #define WebSocket_OP_CONTINUE 0x0 /* 0000 - continue frame */
  61. #define WebSocket_OP_TEXT 0x1 /* 0001 - text frame */
  62. #define WebSocket_OP_BINARY 0x2 /* 0010 - binary frame */
  63. #define WebSocket_OP_CLOSE 0x8 /* 1000 - close frame */
  64. #define WebSocket_OP_PING 0x9 /* 1001 - ping frame */
  65. #define WebSocket_OP_PONG 0xA /* 1010 - pong frame */
  66. typedef void (*luat_websocket_cb_t)(luat_websocket_ctrl_t *websocket_ctrl, int arg1, int arg2);
  67. int luat_websocket_connect(luat_websocket_ctrl_t *websocket_ctrl);
  68. int luat_websocket_set_cb(luat_websocket_ctrl_t *websocket_ctrl, luat_websocket_cb_t websocket_cb);
  69. int luat_websocket_send_packet(void *socket_info, const void *buf, unsigned int count);
  70. void luat_websocket_close_socket(luat_websocket_ctrl_t *websocket_ctrl);
  71. void luat_websocket_release_socket(luat_websocket_ctrl_t *websocket_ctrl);
  72. void luat_websocket_ping(luat_websocket_ctrl_t *websocket_ctrl);
  73. void luat_websocket_reconnect(luat_websocket_ctrl_t *websocket_ctrl);
  74. int luat_websocket_init(luat_websocket_ctrl_t *websocket_ctrl, int adapter_index);
  75. int luat_websocket_autoreconn(luat_websocket_ctrl_t *websocket_ctrl, uint8_t reconnect,uint32_t reconnect_time);
  76. int luat_websocket_set_connopts(luat_websocket_ctrl_t *websocket_ctrl, luat_websocket_connopts_t* opts);
  77. int luat_websocket_payload(char *buff, luat_websocket_pkg_t *pkg, size_t limit);
  78. int luat_websocket_send_frame(luat_websocket_ctrl_t *websocket_ctrl, luat_websocket_pkg_t *pkg);
  79. int luat_websocket_set_headers(luat_websocket_ctrl_t *websocket_ctrl, char *headers);
  80. #endif