streaming.h 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. // SPDX-License-Identifier: GPL-3.0-or-later
  2. #ifndef HTTPD_STREAMING_H
  3. #define HTTPD_STREAMING_H
  4. #include "aclk/mqtt_websockets/c-rbuf/cringbuffer.h"
  5. #include "h2o.h"
  6. typedef enum {
  7. STREAM_X_HTTP_1_1 = 0,
  8. STREAM_X_HTTP_1_1_DONE,
  9. STREAM_ACTIVE,
  10. STREAM_CLOSE
  11. } h2o_stream_state_t;
  12. typedef enum {
  13. HTTP_STREAM = 0,
  14. HTTP_URL,
  15. HTTP_PROTO,
  16. HTTP_USER_AGENT_KEY,
  17. HTTP_USER_AGENT_VALUE,
  18. HTTP_HDR,
  19. HTTP_DONE
  20. } http_stream_parse_state_t;
  21. typedef struct {
  22. h2o_socket_t *sock;
  23. h2o_stream_state_t state;
  24. rbuf_t rx;
  25. pthread_cond_t rx_buf_cond;
  26. pthread_mutex_t rx_buf_lock;
  27. rbuf_t tx;
  28. h2o_iovec_t tx_buf;
  29. pthread_mutex_t tx_buf_lock;
  30. http_stream_parse_state_t parse_state;
  31. char *url;
  32. char *user_agent;
  33. int shutdown;
  34. } h2o_stream_conn_t;
  35. // h2o_stream_conn_t related functions
  36. void h2o_stream_conn_t_init(h2o_stream_conn_t *conn);
  37. void h2o_stream_conn_t_destroy(h2o_stream_conn_t *conn);
  38. // streaming upgrade related functions
  39. int is_streaming_handshake(h2o_req_t *req);
  40. void stream_on_complete(void *user_data, h2o_socket_t *sock, size_t reqsize);
  41. // read and write functions to be used by streaming parser
  42. int h2o_stream_write(void *ctx, const char *data, size_t data_len);
  43. size_t h2o_stream_read(void *ctx, char *buf, size_t read_bytes);
  44. // call this periodically to check if there are any pending write requests
  45. void h2o_stream_check_pending_write_reqs(void);
  46. #endif /* HTTPD_STREAMING_H */