summaryrefslogtreecommitdiff
path: root/src/inspector_socket.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/inspector_socket.h')
-rw-r--r--src/inspector_socket.h57
1 files changed, 57 insertions, 0 deletions
diff --git a/src/inspector_socket.h b/src/inspector_socket.h
new file mode 100644
index 0000000000..3e52762e71
--- /dev/null
+++ b/src/inspector_socket.h
@@ -0,0 +1,57 @@
+#ifndef SRC_INSPECTOR_SOCKET_H_
+#define SRC_INSPECTOR_SOCKET_H_
+
+#include "http_parser.h"
+#include "uv.h"
+
+enum inspector_handshake_event {
+ kInspectorHandshakeUpgrading,
+ kInspectorHandshakeUpgraded,
+ kInspectorHandshakeHttpGet,
+ kInspectorHandshakeFailed
+};
+
+struct inspector_socket_s;
+
+typedef void (*inspector_cb)(struct inspector_socket_s*, int);
+// Notifies as handshake is progressing. Returning false as a response to
+// kInspectorHandshakeUpgrading or kInspectorHandshakeHttpGet event will abort
+// the connection. inspector_write can be used from the callback.
+typedef bool (*handshake_cb)(struct inspector_socket_s*,
+ enum inspector_handshake_event state,
+ const char* path);
+
+struct http_parsing_state_s;
+struct ws_state_s;
+
+struct inspector_socket_s {
+ void* data;
+ struct http_parsing_state_s* http_parsing_state;
+ struct ws_state_s* ws_state;
+ char* buffer;
+ size_t buffer_size;
+ size_t data_len;
+ size_t last_read_end;
+ uv_tcp_t client;
+ bool ws_mode;
+ bool shutting_down;
+ bool connection_eof;
+};
+
+typedef struct inspector_socket_s inspector_socket_t;
+
+int inspector_accept(uv_stream_t* server, struct inspector_socket_s* inspector,
+ handshake_cb callback);
+
+void inspector_close(struct inspector_socket_s* inspector,
+ inspector_cb callback);
+
+// Callbacks will receive handles that has inspector in data field...
+int inspector_read_start(struct inspector_socket_s* inspector, uv_alloc_cb,
+ uv_read_cb);
+void inspector_read_stop(struct inspector_socket_s* inspector);
+void inspector_write(struct inspector_socket_s* inspector,
+ const char* data, size_t len);
+bool inspector_is_active(const struct inspector_socket_s* inspector);
+
+#endif // SRC_INSPECTOR_SOCKET_H_