Kromek Radangel gamma spectrometer USB HID daemon and WebUI. https://git.unino.de/pvivell/radangel
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

websocket.h 2.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. #include <openssl/ssl.h>
  2. #define BUFSIZE 65536
  3. #define DBUFSIZE (BUFSIZE * 3) / 4 - 20
  4. #define SERVER_HANDSHAKE_HIXIE "HTTP/1.1 101 Web Socket Protocol Handshake\r\n\
  5. Upgrade: WebSocket\r\n\
  6. Connection: Upgrade\r\n\
  7. %sWebSocket-Origin: %s\r\n\
  8. %sWebSocket-Location: %s://%s%s\r\n\
  9. %sWebSocket-Protocol: %s\r\n\
  10. \r\n%s"
  11. #define SERVER_HANDSHAKE_HYBI "HTTP/1.1 101 Switching Protocols\r\n\
  12. Upgrade: websocket\r\n\
  13. Connection: Upgrade\r\n\
  14. Sec-WebSocket-Accept: %s\r\n\
  15. Sec-WebSocket-Protocol: %s\r\n\
  16. \r\n"
  17. #define HYBI_GUID "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"
  18. #define HYBI10_ACCEPTHDRLEN 29
  19. #define HIXIE_MD5_DIGEST_LENGTH 16
  20. #define POLICY_RESPONSE "<cross-domain-policy><allow-access-from domain=\"*\" to-ports=\"*\" /></cross-domain-policy>\n"
  21. #define OPCODE_TEXT 0x01
  22. #define OPCODE_BINARY 0x02
  23. typedef struct {
  24. char path[1024+1];
  25. char host[1024+1];
  26. char origin[1024+1];
  27. char version[1024+1];
  28. char connection[1024+1];
  29. char protocols[1024+1];
  30. char key1[1024+1];
  31. char key2[1024+1];
  32. char key3[8+1];
  33. } headers_t;
  34. typedef struct {
  35. int sockfd;
  36. SSL_CTX *ssl_ctx;
  37. SSL *ssl;
  38. int hixie;
  39. int hybi;
  40. int opcode;
  41. headers_t *headers;
  42. char *cin_buf;
  43. char *cout_buf;
  44. char *tin_buf;
  45. char *tout_buf;
  46. } ws_ctx_t;
  47. typedef struct {
  48. int verbose;
  49. char listen_host[256];
  50. int listen_port;
  51. void (*handler)(ws_ctx_t*);
  52. int handler_id;
  53. char *cert;
  54. char *key;
  55. int ssl_only;
  56. int daemon;
  57. int run_once;
  58. } settings_t;
  59. int resolve_host(struct in_addr *sin_addr, const char *hostname);
  60. ssize_t ws_recv(ws_ctx_t *ctx, void *buf, size_t len);
  61. ssize_t ws_send(ws_ctx_t *ctx, const void *buf, size_t len);
  62. /* base64.c declarations */
  63. //int b64_ntop(u_char const *src, size_t srclength, char *target, size_t targsize);
  64. //int b64_pton(char const *src, u_char *target, size_t targsize);
  65. #define gen_handler_msg(stream, ...) \
  66. if (! settings.daemon) { \
  67. fprintf(stream, " %d: ", settings.handler_id); \
  68. fprintf(stream, __VA_ARGS__); \
  69. }
  70. #define handler_msg(...) gen_handler_msg(stdout, __VA_ARGS__);
  71. #define handler_emsg(...) gen_handler_msg(stderr, __VA_ARGS__);
  72. void traffic(const char * token);
  73. int encode_hixie(u_char const *src, size_t srclength,
  74. char *target, size_t targsize);
  75. int decode_hixie(char *src, size_t srclength,
  76. u_char *target, size_t targsize,
  77. unsigned int *opcode, unsigned int *left);
  78. int encode_hybi(u_char const *src, size_t srclength,
  79. char *target, size_t targsize, unsigned int opcode);
  80. int decode_hybi(unsigned char *src, size_t srclength,
  81. u_char *target, size_t targsize,
  82. unsigned int *opcode, unsigned int *left);
  83. void start_server();