aboutsummaryrefslogtreecommitdiff
path: root/packages/bun-usockets/src/quic.h
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <jarred@jarredsumner.com> 2023-08-28 08:38:30 -0700
committerGravatar GitHub <noreply@github.com> 2023-08-28 08:38:30 -0700
commita2ddfe6913c1884bfef6314d00cf2b708281ff79 (patch)
tree88e436313a73d2ab1426ac94be122d62fecb72bc /packages/bun-usockets/src/quic.h
parent6e4a1f2918cb4dbcc035d350d6cd9f018ea8df59 (diff)
downloadbun-a2ddfe6913c1884bfef6314d00cf2b708281ff79.tar.gz
bun-a2ddfe6913c1884bfef6314d00cf2b708281ff79.tar.zst
bun-a2ddfe6913c1884bfef6314d00cf2b708281ff79.zip
Bring uSockets & uWebSockets forks into Bun's repository (#4372)
* Move uWebSockets and uSockets forks into Bun's repository * Update Makefile * Update settings.json * Update libuwsockets.cpp * Remove backends we won't be using * Update bindings.cpp --------- Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
Diffstat (limited to 'packages/bun-usockets/src/quic.h')
-rw-r--r--packages/bun-usockets/src/quic.h68
1 files changed, 68 insertions, 0 deletions
diff --git a/packages/bun-usockets/src/quic.h b/packages/bun-usockets/src/quic.h
new file mode 100644
index 000000000..6d33d27b6
--- /dev/null
+++ b/packages/bun-usockets/src/quic.h
@@ -0,0 +1,68 @@
+#ifdef LIBUS_USE_QUIC
+
+#ifndef LIBUS_QUIC_H
+#define LIBUS_QUIC_H
+
+/* Experimental QUIC functions */
+
+#include "libusockets.h"
+
+typedef struct {
+ const char *cert_file_name;
+ const char *key_file_name;
+ const char *passphrase;
+} us_quic_socket_context_options_t;
+
+
+typedef struct {
+ /* Refers to either the shared listen socket or the client UDP socket */
+ void *udp_socket;
+} us_quic_socket_t;
+
+struct us_quic_socket_context_s;
+struct us_quic_listen_socket_s;
+struct us_quic_stream_s;
+
+typedef struct us_quic_socket_context_s us_quic_socket_context_t;
+typedef struct us_quic_listen_socket_s us_quic_listen_socket_t;
+typedef struct us_quic_stream_s us_quic_stream_t;
+
+
+void *us_quic_stream_ext(us_quic_stream_t *s);
+int us_quic_stream_write(us_quic_stream_t *s, char *data, int length);
+int us_quic_stream_shutdown(us_quic_stream_t *s);
+int us_quic_stream_shutdown_read(us_quic_stream_t *s);
+void us_quic_stream_close(us_quic_stream_t *s);
+
+int us_quic_socket_context_get_header(us_quic_socket_context_t *context, int index, char **name, int *name_length, char **value, int *value_length);
+
+
+void us_quic_socket_context_set_header(us_quic_socket_context_t *context, int index, const char *key, int key_length, const char *value, int value_length);
+void us_quic_socket_context_send_headers(us_quic_socket_context_t *context, us_quic_stream_t *s, int num, int has_body);
+
+us_quic_socket_context_t *us_create_quic_socket_context(struct us_loop_t *loop, us_quic_socket_context_options_t options, int ext_size);
+us_quic_listen_socket_t *us_quic_socket_context_listen(us_quic_socket_context_t *context, const char *host, int port, int ext_size);
+us_quic_socket_t *us_quic_socket_context_connect(us_quic_socket_context_t *context, const char *host, int port, int ext_size);
+
+void us_quic_socket_create_stream(us_quic_socket_t *s, int ext_size);
+us_quic_socket_t *us_quic_stream_socket(us_quic_stream_t *s);
+
+/* This one is ugly and is only used to make clean examples */
+int us_quic_stream_is_client(us_quic_stream_t *s);
+
+void us_quic_socket_context_on_stream_data(us_quic_socket_context_t *context, void(*on_stream_data)(us_quic_stream_t *s, char *data, int length));
+void us_quic_socket_context_on_stream_end(us_quic_socket_context_t *context, void(*on_stream_data)(us_quic_stream_t *s));
+void us_quic_socket_context_on_stream_headers(us_quic_socket_context_t *context, void(*on_stream_headers)(us_quic_stream_t *s));
+void us_quic_socket_context_on_stream_open(us_quic_socket_context_t *context, void(*on_stream_open)(us_quic_stream_t *s, int is_client));
+void us_quic_socket_context_on_stream_close(us_quic_socket_context_t *context, void(*on_stream_close)(us_quic_stream_t *s));
+void us_quic_socket_context_on_open(us_quic_socket_context_t *context, void(*on_open)(us_quic_socket_t *s, int is_client));
+void us_quic_socket_context_on_close(us_quic_socket_context_t *context, void(*on_close)(us_quic_socket_t *s));
+void us_quic_socket_context_on_stream_writable(us_quic_socket_context_t *context, void(*on_stream_writable)(us_quic_stream_t *s));
+
+
+
+void *us_quic_socket_context_ext(us_quic_socket_context_t *context);
+us_quic_socket_context_t *us_quic_socket_context(us_quic_socket_t *s);
+
+#endif
+#endif \ No newline at end of file