aclk_lws_wss_client.h 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. // SPDX-License-Identifier: GPL-3.0-or-later
  2. #ifndef ACLK_LWS_WSS_CLIENT_H
  3. #define ACLK_LWS_WSS_CLIENT_H
  4. #include <libwebsockets.h>
  5. #include "libnetdata/libnetdata.h"
  6. // This is as define because ideally the ACLK at high level
  7. // can do mosqitto writes and reads only from one thread
  8. // which is cleaner implementation IMHO
  9. // in such case this mutexes are not necessarry and life
  10. // is simpler
  11. #define ACLK_LWS_MOSQUITTO_IO_CALLS_MULTITHREADED 1
  12. #define ACLK_LWS_WSS_RECV_BUFF_SIZE_BYTES (128 * 1024)
  13. #define ACLK_LWS_CALLBACK_HISTORY 10
  14. #ifdef ACLK_LWS_MOSQUITTO_IO_CALLS_MULTITHREADED
  15. #define aclk_lws_mutex_init(x) netdata_mutex_init(x)
  16. #define aclk_lws_mutex_lock(x) netdata_mutex_lock(x)
  17. #define aclk_lws_mutex_unlock(x) netdata_mutex_unlock(x)
  18. #else
  19. #define aclk_lws_mutex_init(x)
  20. #define aclk_lws_mutex_lock(x)
  21. #define aclk_lws_mutex_unlock(x)
  22. #endif
  23. struct aclk_lws_wss_engine_callbacks {
  24. void (*connection_established_callback)();
  25. void (*data_rcvd_callback)();
  26. void (*data_writable_callback)();
  27. void (*connection_closed)();
  28. };
  29. struct lws_wss_packet_buffer {
  30. unsigned char *data;
  31. size_t data_size, written;
  32. struct lws_wss_packet_buffer *next;
  33. };
  34. struct aclk_lws_wss_engine_instance {
  35. //target host/port for connection
  36. char *host;
  37. int port;
  38. //internal data
  39. struct lws_context *lws_context;
  40. struct lws *lws_wsi;
  41. #ifdef ACLK_LWS_MOSQUITTO_IO_CALLS_MULTITHREADED
  42. netdata_mutex_t write_buf_mutex;
  43. netdata_mutex_t read_buf_mutex;
  44. #endif
  45. struct lws_wss_packet_buffer *write_buffer_head;
  46. struct lws_ring *read_ringbuffer;
  47. //flags to be readed by engine user
  48. int websocket_connection_up;
  49. // currently this is by default disabled
  50. int data_to_read;
  51. int upstream_reconnect_request;
  52. int lws_callback_history[ACLK_LWS_CALLBACK_HISTORY];
  53. };
  54. void aclk_lws_wss_client_destroy();
  55. void aclk_lws_wss_destroy_context();
  56. int aclk_lws_wss_connect(char *host, int port);
  57. int aclk_lws_wss_client_write(void *buf, size_t count);
  58. int aclk_lws_wss_client_read(void *buf, size_t count);
  59. void aclk_lws_wss_service_loop();
  60. void aclk_lws_wss_mqtt_layer_disconect_notif();
  61. // Notifications inside the layer above
  62. void aclk_lws_connection_established();
  63. void aclk_lws_connection_data_received();
  64. void aclk_lws_connection_closed();
  65. void lws_wss_check_queues(size_t *write_len, size_t *write_len_bytes, size_t *read_len);
  66. void aclk_wss_set_proxy(struct lws_vhost *vhost);
  67. #define FRAGMENT_SIZE 4096
  68. #endif