mirror of
https://github.com/oven-sh/bun
synced 2026-02-02 15:08:46 +00:00
Add nullability annotations (#13048)
This commit is contained in:
@@ -1106,8 +1106,11 @@ if(CMAKE_BUILD_TYPE STREQUAL "Debug")
|
||||
-Werror=sometimes-uninitialized
|
||||
-Werror=unused
|
||||
-Wno-unused-function
|
||||
-Wno-nullability-completeness
|
||||
-Werror
|
||||
-fsanitize=null
|
||||
)
|
||||
target_link_libraries(${bun} PRIVATE -fsanitize=null)
|
||||
else()
|
||||
target_compile_options(${bun} PUBLIC /Od /Z7)
|
||||
endif()
|
||||
@@ -1133,6 +1136,7 @@ elseif(CMAKE_BUILD_TYPE STREQUAL "Release")
|
||||
-Werror=nonnull
|
||||
-Werror=move
|
||||
-Werror=sometimes-uninitialized
|
||||
-Wno-nullability-completeness
|
||||
-Werror
|
||||
)
|
||||
else()
|
||||
|
||||
@@ -101,6 +101,9 @@ struct addrinfo_result {
|
||||
int error;
|
||||
};
|
||||
|
||||
#define us_internal_ssl_socket_context_r struct us_internal_ssl_socket_context_t *nonnull_arg
|
||||
#define us_internal_ssl_socket_r struct us_internal_ssl_socket_t *nonnull_arg
|
||||
|
||||
extern int Bun__addrinfo_get(struct us_loop_t* loop, const char* host, struct addrinfo_request** ptr);
|
||||
extern int Bun__addrinfo_set(struct addrinfo_request* ptr, struct us_connecting_socket_t* socket);
|
||||
extern void Bun__addrinfo_freeRequest(struct addrinfo_request* addrinfo_req, int error);
|
||||
@@ -110,19 +113,19 @@ extern struct addrinfo_result *Bun__addrinfo_getRequestResult(struct addrinfo_re
|
||||
/* Loop related */
|
||||
void us_internal_dispatch_ready_poll(struct us_poll_t *p, int error,
|
||||
int events);
|
||||
void us_internal_timer_sweep(struct us_loop_t *loop);
|
||||
void us_internal_free_closed_sockets(struct us_loop_t *loop);
|
||||
void us_internal_timer_sweep(us_loop_r loop);
|
||||
void us_internal_free_closed_sockets(us_loop_r loop);
|
||||
void us_internal_loop_link(struct us_loop_t *loop,
|
||||
struct us_socket_context_t *context);
|
||||
void us_internal_loop_unlink(struct us_loop_t *loop,
|
||||
struct us_socket_context_t *context);
|
||||
void us_internal_loop_data_init(struct us_loop_t *loop,
|
||||
void (*wakeup_cb)(struct us_loop_t *loop),
|
||||
void (*pre_cb)(struct us_loop_t *loop),
|
||||
void (*post_cb)(struct us_loop_t *loop));
|
||||
void us_internal_loop_data_free(struct us_loop_t *loop);
|
||||
void us_internal_loop_pre(struct us_loop_t *loop);
|
||||
void us_internal_loop_post(struct us_loop_t *loop);
|
||||
void (*wakeup_cb)(us_loop_r loop),
|
||||
void (*pre_cb)(us_loop_r loop),
|
||||
void (*post_cb)(us_loop_r loop));
|
||||
void us_internal_loop_data_free(us_loop_r loop);
|
||||
void us_internal_loop_pre(us_loop_r loop);
|
||||
void us_internal_loop_post(us_loop_r loop);
|
||||
|
||||
/* Asyncs (old) */
|
||||
struct us_internal_async *us_internal_create_async(struct us_loop_t *loop,
|
||||
@@ -139,22 +142,22 @@ int us_internal_poll_type(struct us_poll_t *p);
|
||||
void us_internal_poll_set_type(struct us_poll_t *p, int poll_type);
|
||||
|
||||
/* SSL loop data */
|
||||
void us_internal_init_loop_ssl_data(struct us_loop_t *loop);
|
||||
void us_internal_free_loop_ssl_data(struct us_loop_t *loop);
|
||||
void us_internal_init_loop_ssl_data(us_loop_r loop);
|
||||
void us_internal_free_loop_ssl_data(us_loop_r loop);
|
||||
|
||||
/* Socket context related */
|
||||
void us_internal_socket_context_link_socket(struct us_socket_context_t *context,
|
||||
struct us_socket_t *s);
|
||||
void us_internal_socket_context_link_socket(us_socket_context_r context,
|
||||
us_socket_r s);
|
||||
void us_internal_socket_context_unlink_socket(int ssl,
|
||||
struct us_socket_context_t *context, struct us_socket_t *s);
|
||||
us_socket_context_r context, us_socket_r s);
|
||||
|
||||
void us_internal_socket_after_resolve(struct us_connecting_socket_t *s);
|
||||
void us_internal_socket_after_open(struct us_socket_t *s, int error);
|
||||
void us_internal_socket_after_open(us_socket_r s, int error);
|
||||
struct us_internal_ssl_socket_t *
|
||||
us_internal_ssl_socket_close(struct us_internal_ssl_socket_t *s, int code,
|
||||
us_internal_ssl_socket_close(us_internal_ssl_socket_r s, int code,
|
||||
void *reason);
|
||||
|
||||
int us_internal_handle_dns_results(struct us_loop_t *loop);
|
||||
int us_internal_handle_dns_results(us_loop_r loop);
|
||||
|
||||
/* Sockets are polls */
|
||||
struct us_socket_t {
|
||||
@@ -248,9 +251,9 @@ struct us_listen_socket_t {
|
||||
|
||||
/* Listen sockets are keps in their own list */
|
||||
void us_internal_socket_context_link_listen_socket(
|
||||
struct us_socket_context_t *context, struct us_listen_socket_t *s);
|
||||
us_socket_context_r context, struct us_listen_socket_t *s);
|
||||
void us_internal_socket_context_unlink_listen_socket(int ssl,
|
||||
struct us_socket_context_t *context, struct us_listen_socket_t *s);
|
||||
us_socket_context_r context, struct us_listen_socket_t *s);
|
||||
|
||||
struct us_socket_context_t {
|
||||
alignas(LIBUS_EXT_ALIGNMENT) struct us_loop_t *loop;
|
||||
@@ -290,31 +293,31 @@ typedef void (*us_internal_on_handshake_t)(
|
||||
void us_internal_socket_context_free(int ssl, struct us_socket_context_t *context);
|
||||
/* SNI functions */
|
||||
void us_internal_ssl_socket_context_add_server_name(
|
||||
struct us_internal_ssl_socket_context_t *context,
|
||||
us_internal_ssl_socket_context_r context,
|
||||
const char *hostname_pattern, struct us_socket_context_options_t options,
|
||||
void *user);
|
||||
void us_bun_internal_ssl_socket_context_add_server_name(
|
||||
struct us_internal_ssl_socket_context_t *context,
|
||||
us_internal_ssl_socket_context_r context,
|
||||
const char *hostname_pattern,
|
||||
struct us_bun_socket_context_options_t options, void *user);
|
||||
void us_internal_ssl_socket_context_remove_server_name(
|
||||
struct us_internal_ssl_socket_context_t *context,
|
||||
us_internal_ssl_socket_context_r context,
|
||||
const char *hostname_pattern);
|
||||
void us_internal_ssl_socket_context_on_server_name(
|
||||
struct us_internal_ssl_socket_context_t *context,
|
||||
us_internal_ssl_socket_context_r context,
|
||||
void (*cb)(struct us_internal_ssl_socket_context_t *, const char *));
|
||||
void *
|
||||
us_internal_ssl_socket_get_sni_userdata(struct us_internal_ssl_socket_t *s);
|
||||
us_internal_ssl_socket_get_sni_userdata(us_internal_ssl_socket_r s);
|
||||
void *us_internal_ssl_socket_context_find_server_name_userdata(
|
||||
struct us_internal_ssl_socket_context_t *context,
|
||||
us_internal_ssl_socket_context_r context,
|
||||
const char *hostname_pattern);
|
||||
|
||||
void *
|
||||
us_internal_ssl_socket_get_native_handle(struct us_internal_ssl_socket_t *s);
|
||||
us_internal_ssl_socket_get_native_handle(us_internal_ssl_socket_r s);
|
||||
void *us_internal_ssl_socket_context_get_native_handle(
|
||||
struct us_internal_ssl_socket_context_t *context);
|
||||
us_internal_ssl_socket_context_r context);
|
||||
struct us_bun_verify_error_t
|
||||
us_internal_verify_error(struct us_internal_ssl_socket_t *s);
|
||||
us_internal_verify_error(us_internal_ssl_socket_r s);
|
||||
struct us_internal_ssl_socket_context_t *us_internal_create_ssl_socket_context(
|
||||
struct us_loop_t *loop, int context_ext_size,
|
||||
struct us_socket_context_options_t options);
|
||||
@@ -324,109 +327,109 @@ us_internal_bun_create_ssl_socket_context(
|
||||
struct us_bun_socket_context_options_t options);
|
||||
|
||||
void us_internal_ssl_socket_context_free(
|
||||
struct us_internal_ssl_socket_context_t *context);
|
||||
us_internal_ssl_socket_context_r context);
|
||||
void us_internal_ssl_socket_context_on_open(
|
||||
struct us_internal_ssl_socket_context_t *context,
|
||||
us_internal_ssl_socket_context_r context,
|
||||
struct us_internal_ssl_socket_t *(*on_open)(
|
||||
struct us_internal_ssl_socket_t *s, int is_client, char *ip,
|
||||
us_internal_ssl_socket_r s, int is_client, char *ip,
|
||||
int ip_length));
|
||||
|
||||
void us_internal_ssl_socket_context_on_close(
|
||||
struct us_internal_ssl_socket_context_t *context,
|
||||
us_internal_ssl_socket_context_r context,
|
||||
struct us_internal_ssl_socket_t *(*on_close)(
|
||||
struct us_internal_ssl_socket_t *s, int code, void *reason));
|
||||
us_internal_ssl_socket_r s, int code, void *reason));
|
||||
|
||||
void us_internal_ssl_socket_context_on_data(
|
||||
struct us_internal_ssl_socket_context_t *context,
|
||||
us_internal_ssl_socket_context_r context,
|
||||
struct us_internal_ssl_socket_t *(*on_data)(
|
||||
struct us_internal_ssl_socket_t *s, char *data, int length));
|
||||
us_internal_ssl_socket_r s, char *data, int length));
|
||||
|
||||
void us_internal_update_handshake(struct us_internal_ssl_socket_t *s);
|
||||
int us_internal_renegotiate(struct us_internal_ssl_socket_t *s);
|
||||
void us_internal_trigger_handshake_callback(struct us_internal_ssl_socket_t *s,
|
||||
void us_internal_update_handshake(us_internal_ssl_socket_r s);
|
||||
int us_internal_renegotiate(us_internal_ssl_socket_r s);
|
||||
void us_internal_trigger_handshake_callback(us_internal_ssl_socket_r s,
|
||||
int success);
|
||||
void us_internal_on_ssl_handshake(
|
||||
struct us_internal_ssl_socket_context_t *context,
|
||||
us_internal_ssl_socket_context_r context,
|
||||
us_internal_on_handshake_t onhandshake, void *custom_data);
|
||||
|
||||
void us_internal_ssl_socket_context_on_writable(
|
||||
struct us_internal_ssl_socket_context_t *context,
|
||||
us_internal_ssl_socket_context_r context,
|
||||
struct us_internal_ssl_socket_t *(*on_writable)(
|
||||
struct us_internal_ssl_socket_t *s));
|
||||
us_internal_ssl_socket_r s));
|
||||
|
||||
void us_internal_ssl_socket_context_on_timeout(
|
||||
struct us_internal_ssl_socket_context_t *context,
|
||||
us_internal_ssl_socket_context_r context,
|
||||
struct us_internal_ssl_socket_t *(*on_timeout)(
|
||||
struct us_internal_ssl_socket_t *s));
|
||||
us_internal_ssl_socket_r s));
|
||||
|
||||
void us_internal_ssl_socket_context_on_long_timeout(
|
||||
struct us_internal_ssl_socket_context_t *context,
|
||||
us_internal_ssl_socket_context_r context,
|
||||
struct us_internal_ssl_socket_t *(*on_timeout)(
|
||||
struct us_internal_ssl_socket_t *s));
|
||||
us_internal_ssl_socket_r s));
|
||||
|
||||
void us_internal_ssl_socket_context_on_end(
|
||||
struct us_internal_ssl_socket_context_t *context,
|
||||
us_internal_ssl_socket_context_r context,
|
||||
struct us_internal_ssl_socket_t *(*on_end)(
|
||||
struct us_internal_ssl_socket_t *s));
|
||||
us_internal_ssl_socket_r s));
|
||||
|
||||
void us_internal_ssl_socket_context_on_connect_error(
|
||||
struct us_internal_ssl_socket_context_t *context,
|
||||
us_internal_ssl_socket_context_r context,
|
||||
struct us_internal_ssl_socket_t *(*on_connect_error)(
|
||||
struct us_internal_ssl_socket_t *s, int code));
|
||||
us_internal_ssl_socket_r s, int code));
|
||||
|
||||
void us_internal_ssl_socket_context_on_socket_connect_error(
|
||||
struct us_internal_ssl_socket_context_t *context,
|
||||
us_internal_ssl_socket_context_r context,
|
||||
struct us_internal_ssl_socket_t *(*on_socket_connect_error)(
|
||||
struct us_internal_ssl_socket_t *s, int code));
|
||||
us_internal_ssl_socket_r s, int code));
|
||||
|
||||
struct us_listen_socket_t *us_internal_ssl_socket_context_listen(
|
||||
struct us_internal_ssl_socket_context_t *context, const char *host,
|
||||
us_internal_ssl_socket_context_r context, const char *host,
|
||||
int port, int options, int socket_ext_size);
|
||||
|
||||
struct us_listen_socket_t *us_internal_ssl_socket_context_listen_unix(
|
||||
struct us_internal_ssl_socket_context_t *context, const char *path,
|
||||
us_internal_ssl_socket_context_r context, const char *path,
|
||||
size_t pathlen, int options, int socket_ext_size);
|
||||
|
||||
struct us_connecting_socket_t *us_internal_ssl_socket_context_connect(
|
||||
struct us_internal_ssl_socket_context_t *context, const char *host,
|
||||
us_internal_ssl_socket_context_r context, const char *host,
|
||||
int port, int options, int socket_ext_size, int* is_resolved);
|
||||
|
||||
struct us_internal_ssl_socket_t *us_internal_ssl_socket_context_connect_unix(
|
||||
struct us_internal_ssl_socket_context_t *context, const char *server_path,
|
||||
us_internal_ssl_socket_context_r context, const char *server_path,
|
||||
size_t pathlen, int options, int socket_ext_size);
|
||||
|
||||
int us_internal_ssl_socket_write(struct us_internal_ssl_socket_t *s,
|
||||
int us_internal_ssl_socket_write(us_internal_ssl_socket_r s,
|
||||
const char *data, int length, int msg_more);
|
||||
int us_internal_ssl_socket_raw_write(struct us_internal_ssl_socket_t *s,
|
||||
int us_internal_ssl_socket_raw_write(us_internal_ssl_socket_r s,
|
||||
const char *data, int length,
|
||||
int msg_more);
|
||||
|
||||
void us_internal_ssl_socket_timeout(struct us_internal_ssl_socket_t *s,
|
||||
void us_internal_ssl_socket_timeout(us_internal_ssl_socket_r s,
|
||||
unsigned int seconds);
|
||||
void *
|
||||
us_internal_ssl_socket_context_ext(struct us_internal_ssl_socket_context_t *s);
|
||||
struct us_internal_ssl_socket_context_t *
|
||||
us_internal_ssl_socket_get_context(struct us_internal_ssl_socket_t *s);
|
||||
void *us_internal_ssl_socket_ext(struct us_internal_ssl_socket_t *s);
|
||||
us_internal_ssl_socket_get_context(us_internal_ssl_socket_r s);
|
||||
void *us_internal_ssl_socket_ext(us_internal_ssl_socket_r s);
|
||||
void *us_internal_connecting_ssl_socket_ext(struct us_connecting_socket_t *c);
|
||||
int us_internal_ssl_socket_is_shut_down(struct us_internal_ssl_socket_t *s);
|
||||
int us_internal_ssl_socket_is_closed(struct us_internal_ssl_socket_t *s);
|
||||
void us_internal_ssl_socket_shutdown(struct us_internal_ssl_socket_t *s);
|
||||
int us_internal_ssl_socket_is_shut_down(us_internal_ssl_socket_r s);
|
||||
int us_internal_ssl_socket_is_closed(us_internal_ssl_socket_r s);
|
||||
void us_internal_ssl_socket_shutdown(us_internal_ssl_socket_r s);
|
||||
|
||||
struct us_internal_ssl_socket_t *us_internal_ssl_socket_context_adopt_socket(
|
||||
struct us_internal_ssl_socket_context_t *context,
|
||||
struct us_internal_ssl_socket_t *s, int ext_size);
|
||||
us_internal_ssl_socket_context_r context,
|
||||
us_internal_ssl_socket_r s, int ext_size);
|
||||
|
||||
struct us_internal_ssl_socket_t *us_internal_ssl_socket_wrap_with_tls(
|
||||
struct us_socket_t *s, struct us_bun_socket_context_options_t options,
|
||||
us_socket_r s, struct us_bun_socket_context_options_t options,
|
||||
struct us_socket_events_t events, int socket_ext_size);
|
||||
struct us_internal_ssl_socket_context_t *
|
||||
us_internal_create_child_ssl_socket_context(
|
||||
struct us_internal_ssl_socket_context_t *context, int context_ext_size);
|
||||
us_internal_ssl_socket_context_r context, int context_ext_size);
|
||||
struct us_loop_t *us_internal_ssl_socket_context_loop(
|
||||
struct us_internal_ssl_socket_context_t *context);
|
||||
us_internal_ssl_socket_context_r context);
|
||||
struct us_internal_ssl_socket_t *
|
||||
us_internal_ssl_socket_open(struct us_internal_ssl_socket_t *s, int is_client,
|
||||
us_internal_ssl_socket_open(us_internal_ssl_socket_r s, int is_client,
|
||||
char *ip, int ip_length);
|
||||
|
||||
int us_raw_root_certs(struct us_cert_string_t **out);
|
||||
|
||||
@@ -35,6 +35,25 @@
|
||||
#ifndef LIBUSOCKETS_H
|
||||
#define LIBUSOCKETS_H
|
||||
|
||||
#ifdef BUN_DEBUG
|
||||
#define nonnull_arg _Nonnull
|
||||
#else
|
||||
#define nonnull_arg
|
||||
#endif
|
||||
|
||||
#ifdef BUN_DEBUG
|
||||
#define nonnull_fn_decl
|
||||
#else
|
||||
#ifndef nonnull_fn_decl
|
||||
#define nonnull_fn_decl __attribute__((nonnull))
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#define us_loop_r struct us_loop_t *nonnull_arg
|
||||
#define us_socket_r struct us_socket_t *nonnull_arg
|
||||
#define us_poll_r struct us_poll_t *nonnull_arg
|
||||
#define us_socket_context_r struct us_socket_context_t *nonnull_arg
|
||||
|
||||
|
||||
/* 512kb shared receive buffer */
|
||||
#define LIBUS_RECV_BUFFER_LENGTH 524288
|
||||
@@ -124,11 +143,11 @@ struct us_udp_packet_buffer_t *us_create_udp_packet_buffer();
|
||||
/* Creates a (heavy-weight) UDP socket with a user space ring buffer. Again, this one is heavy weight and
|
||||
* shoud be reused. One entire QUIC server can be implemented using only one single UDP socket so weight
|
||||
* is not a concern as is the case for TCP sockets which are 1-to-1 with TCP connections. */
|
||||
//struct us_udp_socket_t *us_create_udp_socket(struct us_loop_t *loop, void (*read_cb)(struct us_udp_socket_t *), unsigned short port);
|
||||
//struct us_udp_socket_t *us_create_udp_socket(us_loop_r loop, void (*read_cb)(struct us_udp_socket_t *), unsigned short port);
|
||||
|
||||
//struct us_udp_socket_t *us_create_udp_socket(struct us_loop_t *loop, void (*data_cb)(struct us_udp_socket_t *, struct us_udp_packet_buffer_t *, int), void (*drain_cb)(struct us_udp_socket_t *), char *host, unsigned short port);
|
||||
//struct us_udp_socket_t *us_create_udp_socket(us_loop_r loop, void (*data_cb)(struct us_udp_socket_t *, struct us_udp_packet_buffer_t *, int), void (*drain_cb)(struct us_udp_socket_t *), char *host, unsigned short port);
|
||||
|
||||
struct us_udp_socket_t *us_create_udp_socket(struct us_loop_t *loop, void (*data_cb)(struct us_udp_socket_t *, void *, int), void (*drain_cb)(struct us_udp_socket_t *), void (*close_cb)(struct us_udp_socket_t *), const char *host, unsigned short port, void *user);
|
||||
struct us_udp_socket_t *us_create_udp_socket(us_loop_r loop, void (*data_cb)(struct us_udp_socket_t *, void *, int), void (*drain_cb)(struct us_udp_socket_t *), void (*close_cb)(struct us_udp_socket_t *), const char *host, unsigned short port, void *user);
|
||||
|
||||
void us_udp_socket_close(struct us_udp_socket_t *s);
|
||||
|
||||
@@ -141,7 +160,7 @@ int us_udp_socket_bind(struct us_udp_socket_t *s, const char *hostname, unsigned
|
||||
/* Public interfaces for timers */
|
||||
|
||||
/* Create a new high precision, low performance timer. May fail and return null */
|
||||
struct us_timer_t *us_create_timer(struct us_loop_t *loop, int fallthrough, unsigned int ext_size);
|
||||
struct us_timer_t *us_create_timer(us_loop_r loop, int fallthrough, unsigned int ext_size);
|
||||
|
||||
/* Returns user data extension for this timer */
|
||||
void *us_timer_ext(struct us_timer_t *timer);
|
||||
@@ -175,17 +194,17 @@ struct us_bun_verify_error_t {
|
||||
};
|
||||
|
||||
struct us_socket_events_t {
|
||||
struct us_socket_t *(*on_open)(struct us_socket_t *, int is_client, char *ip, int ip_length);
|
||||
struct us_socket_t *(*on_data)(struct us_socket_t *, char *data, int length);
|
||||
struct us_socket_t *(*on_writable)(struct us_socket_t *);
|
||||
struct us_socket_t *(*on_close)(struct us_socket_t *, int code, void *reason);
|
||||
struct us_socket_t *(*on_open)(us_socket_r, int is_client, char *ip, int ip_length);
|
||||
struct us_socket_t *(*on_data)(us_socket_r, char *data, int length);
|
||||
struct us_socket_t *(*on_writable)(us_socket_r);
|
||||
struct us_socket_t *(*on_close)(us_socket_r, int code, void *reason);
|
||||
//void (*on_timeout)(struct us_socket_context *);
|
||||
struct us_socket_t *(*on_timeout)(struct us_socket_t *);
|
||||
struct us_socket_t *(*on_long_timeout)(struct us_socket_t *);
|
||||
struct us_socket_t *(*on_end)(struct us_socket_t *);
|
||||
struct us_socket_t *(*on_timeout)(us_socket_r);
|
||||
struct us_socket_t *(*on_long_timeout)(us_socket_r);
|
||||
struct us_socket_t *(*on_end)(us_socket_r);
|
||||
struct us_connecting_socket_t *(*on_connect_error)(struct us_connecting_socket_t *, int code);
|
||||
struct us_socket_t *(*on_connecting_socket_error)(struct us_socket_t *, int code);
|
||||
void (*on_handshake)(struct us_socket_t*, int success, struct us_bun_verify_error_t verify_error, void* custom_data);
|
||||
struct us_socket_t *(*on_connecting_socket_error)(us_socket_r, int code);
|
||||
void (*on_handshake)(us_socket_r, int success, struct us_bun_verify_error_t verify_error, void* custom_data);
|
||||
};
|
||||
|
||||
|
||||
@@ -211,70 +230,70 @@ struct us_bun_socket_context_options_t {
|
||||
};
|
||||
|
||||
/* Return 15-bit timestamp for this context */
|
||||
unsigned short us_socket_context_timestamp(int ssl, struct us_socket_context_t *context);
|
||||
unsigned short us_socket_context_timestamp(int ssl, us_socket_context_r context) nonnull_fn_decl;
|
||||
|
||||
/* Adds SNI domain and cert in asn1 format */
|
||||
void us_socket_context_add_server_name(int ssl, struct us_socket_context_t *context, const char *hostname_pattern, struct us_socket_context_options_t options, void *user);
|
||||
void us_bun_socket_context_add_server_name(int ssl, struct us_socket_context_t *context, const char *hostname_pattern, struct us_bun_socket_context_options_t options, void *user);
|
||||
void us_socket_context_remove_server_name(int ssl, struct us_socket_context_t *context, const char *hostname_pattern);
|
||||
void us_socket_context_on_server_name(int ssl, struct us_socket_context_t *context, void (*cb)(struct us_socket_context_t *, const char *hostname));
|
||||
void *us_socket_server_name_userdata(int ssl, struct us_socket_t *s);
|
||||
void *us_socket_context_find_server_name_userdata(int ssl, struct us_socket_context_t *context, const char *hostname_pattern);
|
||||
void us_socket_context_add_server_name(int ssl, us_socket_context_r context, const char *hostname_pattern, struct us_socket_context_options_t options, void *user);
|
||||
void us_bun_socket_context_add_server_name(int ssl, us_socket_context_r context, const char *hostname_pattern, struct us_bun_socket_context_options_t options, void *user);
|
||||
void us_socket_context_remove_server_name(int ssl, us_socket_context_r context, const char *hostname_pattern);
|
||||
void us_socket_context_on_server_name(int ssl, us_socket_context_r context, void (*cb)(us_socket_context_r context, const char *hostname));
|
||||
void *us_socket_server_name_userdata(int ssl, us_socket_r s);
|
||||
void *us_socket_context_find_server_name_userdata(int ssl, us_socket_context_r context, const char *hostname_pattern);
|
||||
|
||||
/* Returns the underlying SSL native handle, such as SSL_CTX or nullptr */
|
||||
void *us_socket_context_get_native_handle(int ssl, struct us_socket_context_t *context);
|
||||
void *us_socket_context_get_native_handle(int ssl, us_socket_context_r context);
|
||||
|
||||
/* A socket context holds shared callbacks and user data extension for associated sockets */
|
||||
struct us_socket_context_t *us_create_socket_context(int ssl, struct us_loop_t *loop,
|
||||
int ext_size, struct us_socket_context_options_t options);
|
||||
struct us_socket_context_t *us_create_socket_context(int ssl, us_loop_r loop,
|
||||
int ext_size, struct us_socket_context_options_t options) nonnull_fn_decl;
|
||||
struct us_socket_context_t *us_create_bun_socket_context(int ssl, struct us_loop_t *loop,
|
||||
int ext_size, struct us_bun_socket_context_options_t options);
|
||||
int ext_size, struct us_bun_socket_context_options_t options) nonnull_fn_decl;
|
||||
|
||||
/* Delete resources allocated at creation time (will call unref now and only free when ref count == 0). */
|
||||
void us_socket_context_free(int ssl, struct us_socket_context_t *context);
|
||||
void us_socket_context_ref(int ssl, struct us_socket_context_t *context);
|
||||
void us_socket_context_unref(int ssl, struct us_socket_context_t *context);
|
||||
void us_socket_context_free(int ssl, us_socket_context_r context) nonnull_fn_decl;
|
||||
void us_socket_context_ref(int ssl, us_socket_context_r context) nonnull_fn_decl;
|
||||
void us_socket_context_unref(int ssl, us_socket_context_r context) nonnull_fn_decl;
|
||||
|
||||
struct us_bun_verify_error_t us_socket_verify_error(int ssl, struct us_socket_t *context);
|
||||
/* Setters of various async callbacks */
|
||||
void us_socket_context_on_open(int ssl, struct us_socket_context_t *context,
|
||||
struct us_socket_t *(*on_open)(struct us_socket_t *s, int is_client, char *ip, int ip_length));
|
||||
void us_socket_context_on_close(int ssl, struct us_socket_context_t *context,
|
||||
struct us_socket_t *(*on_close)(struct us_socket_t *s, int code, void *reason));
|
||||
void us_socket_context_on_data(int ssl, struct us_socket_context_t *context,
|
||||
struct us_socket_t *(*on_data)(struct us_socket_t *s, char *data, int length));
|
||||
void us_socket_context_on_writable(int ssl, struct us_socket_context_t *context,
|
||||
struct us_socket_t *(*on_writable)(struct us_socket_t *s));
|
||||
void us_socket_context_on_timeout(int ssl, struct us_socket_context_t *context,
|
||||
struct us_socket_t *(*on_timeout)(struct us_socket_t *s));
|
||||
void us_socket_context_on_long_timeout(int ssl, struct us_socket_context_t *context,
|
||||
struct us_socket_t *(*on_timeout)(struct us_socket_t *s));
|
||||
void us_socket_context_on_open(int ssl, us_socket_context_r context,
|
||||
struct us_socket_t *(*on_open)(us_socket_r s, int is_client, char *ip, int ip_length));
|
||||
void us_socket_context_on_close(int ssl, us_socket_context_r context,
|
||||
struct us_socket_t *(*on_close)(us_socket_r s, int code, void *reason));
|
||||
void us_socket_context_on_data(int ssl, us_socket_context_r context,
|
||||
struct us_socket_t *(*on_data)(us_socket_r s, char *data, int length));
|
||||
void us_socket_context_on_writable(int ssl, us_socket_context_r context,
|
||||
struct us_socket_t *(*on_writable)(us_socket_r s));
|
||||
void us_socket_context_on_timeout(int ssl, us_socket_context_r context,
|
||||
struct us_socket_t *(*on_timeout)(us_socket_r s));
|
||||
void us_socket_context_on_long_timeout(int ssl, us_socket_context_r context,
|
||||
struct us_socket_t *(*on_timeout)(us_socket_r s));
|
||||
/* This one is only used for when a connecting socket fails in a late stage. */
|
||||
void us_socket_context_on_connect_error(int ssl, struct us_socket_context_t *context,
|
||||
void us_socket_context_on_connect_error(int ssl, us_socket_context_r context,
|
||||
struct us_connecting_socket_t *(*on_connect_error)(struct us_connecting_socket_t *s, int code));
|
||||
void us_socket_context_on_socket_connect_error(int ssl, struct us_socket_context_t *context,
|
||||
struct us_socket_t *(*on_connect_error)(struct us_socket_t *s, int code));
|
||||
void us_socket_context_on_socket_connect_error(int ssl, us_socket_context_r context,
|
||||
struct us_socket_t *(*on_connect_error)(us_socket_r s, int code));
|
||||
|
||||
void us_socket_context_on_handshake(int ssl, struct us_socket_context_t *context, void (*on_handshake)(struct us_socket_t *, int success, struct us_bun_verify_error_t verify_error, void* custom_data), void* custom_data);
|
||||
void us_socket_context_on_handshake(int ssl, us_socket_context_r context, void (*on_handshake)(struct us_socket_t *, int success, struct us_bun_verify_error_t verify_error, void* custom_data), void* custom_data);
|
||||
|
||||
/* Emitted when a socket has been half-closed */
|
||||
void us_socket_context_on_end(int ssl, struct us_socket_context_t *context, struct us_socket_t *(*on_end)(struct us_socket_t *s));
|
||||
void us_socket_context_on_end(int ssl, us_socket_context_r context, struct us_socket_t *(*on_end)(us_socket_r s));
|
||||
|
||||
/* Returns user data extension for this socket context */
|
||||
void *us_socket_context_ext(int ssl, struct us_socket_context_t *context);
|
||||
void *us_socket_context_ext(int ssl, us_socket_context_r context);
|
||||
|
||||
/* Closes all open sockets, including listen sockets. Does not invalidate the socket context. */
|
||||
void us_socket_context_close(int ssl, struct us_socket_context_t *context);
|
||||
void us_socket_context_close(int ssl, us_socket_context_r context);
|
||||
|
||||
/* Listen for connections. Acts as the main driving cog in a server. Will call set async callbacks. */
|
||||
struct us_listen_socket_t *us_socket_context_listen(int ssl, struct us_socket_context_t *context,
|
||||
struct us_listen_socket_t *us_socket_context_listen(int ssl, us_socket_context_r context,
|
||||
const char *host, int port, int options, int socket_ext_size);
|
||||
|
||||
struct us_listen_socket_t *us_socket_context_listen_unix(int ssl, struct us_socket_context_t *context,
|
||||
struct us_listen_socket_t *us_socket_context_listen_unix(int ssl, us_socket_context_r context,
|
||||
const char *path, size_t pathlen, int options, int socket_ext_size);
|
||||
|
||||
/* listen_socket.c/.h */
|
||||
void us_listen_socket_close(int ssl, struct us_listen_socket_t *ls);
|
||||
void us_listen_socket_close(int ssl, struct us_listen_socket_t *ls) nonnull_fn_decl;
|
||||
|
||||
/*
|
||||
Returns one of
|
||||
@@ -285,156 +304,156 @@ void us_listen_socket_close(int ssl, struct us_listen_socket_t *ls);
|
||||
This is the slow path where we must either go through DNS resolution or create multiple sockets
|
||||
per the happy eyeballs algorithm
|
||||
*/
|
||||
void *us_socket_context_connect(int ssl, struct us_socket_context_t *context,
|
||||
const char *host, int port, int options, int socket_ext_size, int *is_connecting);
|
||||
void *us_socket_context_connect(int ssl, struct us_socket_context_t * nonnull_arg context,
|
||||
const char *host, int port, int options, int socket_ext_size, int *is_connecting) __attribute__((nonnull(2)));
|
||||
|
||||
struct us_socket_t *us_socket_context_connect_unix(int ssl, struct us_socket_context_t *context,
|
||||
const char *server_path, size_t pathlen, int options, int socket_ext_size);
|
||||
struct us_socket_t *us_socket_context_connect_unix(int ssl, us_socket_context_r context,
|
||||
const char *server_path, size_t pathlen, int options, int socket_ext_size) __attribute__((nonnull(2)));
|
||||
|
||||
/* Is this socket established? Can be used to check if a connecting socket has fired the on_open event yet.
|
||||
* Can also be used to determine if a socket is a listen_socket or not, but you probably know that already. */
|
||||
int us_socket_is_established(int ssl, struct us_socket_t *s);
|
||||
int us_socket_is_established(int ssl, us_socket_r s) nonnull_fn_decl;
|
||||
|
||||
void us_connecting_socket_free(struct us_connecting_socket_t *c);
|
||||
void us_connecting_socket_free(struct us_connecting_socket_t *c) nonnull_fn_decl;
|
||||
|
||||
/* Cancel a connecting socket. Can be used together with us_socket_timeout to limit connection times.
|
||||
* Entirely destroys the socket - this function works like us_socket_close but does not trigger on_close event since
|
||||
* you never got the on_open event first. */
|
||||
void us_connecting_socket_close(int ssl, struct us_connecting_socket_t *c);
|
||||
void us_connecting_socket_close(int ssl, struct us_connecting_socket_t *c) nonnull_fn_decl;
|
||||
|
||||
/* Returns the loop for this socket context. */
|
||||
struct us_loop_t *us_socket_context_loop(int ssl, struct us_socket_context_t *context);
|
||||
struct us_loop_t *us_socket_context_loop(int ssl, us_socket_context_r context) nonnull_fn_decl __attribute((returns_nonnull));
|
||||
|
||||
/* Invalidates passed socket, returning a new resized socket which belongs to a different socket context.
|
||||
* Used mainly for "socket upgrades" such as when transitioning from HTTP to WebSocket. */
|
||||
struct us_socket_t *us_socket_context_adopt_socket(int ssl, struct us_socket_context_t *context, struct us_socket_t *s, int ext_size);
|
||||
struct us_socket_t *us_socket_context_adopt_socket(int ssl, us_socket_context_r context, us_socket_r s, int ext_size);
|
||||
|
||||
/* Create a child socket context which acts much like its own socket context with its own callbacks yet still relies on the
|
||||
* parent socket context for some shared resources. Child socket contexts should be used together with socket adoptions and nothing else. */
|
||||
struct us_socket_context_t *us_create_child_socket_context(int ssl, struct us_socket_context_t *context, int context_ext_size);
|
||||
struct us_socket_context_t *us_create_child_socket_context(int ssl, us_socket_context_r context, int context_ext_size);
|
||||
|
||||
/* Public interfaces for loops */
|
||||
|
||||
/* Returns a new event loop with user data extension */
|
||||
struct us_loop_t *us_create_loop(void *hint, void (*wakeup_cb)(struct us_loop_t *loop),
|
||||
void (*pre_cb)(struct us_loop_t *loop), void (*post_cb)(struct us_loop_t *loop), unsigned int ext_size);
|
||||
struct us_loop_t *us_create_loop(void *hint, void (*wakeup_cb)(us_loop_r loop),
|
||||
void (*pre_cb)(us_loop_r loop), void (*post_cb)(us_loop_r loop), unsigned int ext_size);
|
||||
|
||||
/* Frees the loop immediately */
|
||||
void us_loop_free(struct us_loop_t *loop);
|
||||
void us_loop_free(us_loop_r loop) nonnull_fn_decl;
|
||||
|
||||
/* Returns the loop user data extension */
|
||||
void *us_loop_ext(struct us_loop_t *loop);
|
||||
void *us_loop_ext(us_loop_r loop) nonnull_fn_decl;
|
||||
|
||||
/* Blocks the calling thread and drives the event loop until no more non-fallthrough polls are scheduled */
|
||||
void us_loop_run(struct us_loop_t *loop);
|
||||
void us_loop_run(us_loop_r loop) nonnull_fn_decl;
|
||||
|
||||
|
||||
/* Signals the loop from any thread to wake up and execute its wakeup handler from the loop's own running thread.
|
||||
* This is the only fully thread-safe function and serves as the basis for thread safety */
|
||||
void us_wakeup_loop(struct us_loop_t *loop);
|
||||
void us_wakeup_loop(us_loop_r loop) nonnull_fn_decl;
|
||||
|
||||
/* Hook up timers in existing loop */
|
||||
void us_loop_integrate(struct us_loop_t *loop);
|
||||
void us_loop_integrate(us_loop_r loop) nonnull_fn_decl;
|
||||
|
||||
/* Returns the loop iteration number */
|
||||
long long us_loop_iteration_number(struct us_loop_t *loop);
|
||||
long long us_loop_iteration_number(us_loop_r loop) nonnull_fn_decl;
|
||||
|
||||
/* Public interfaces for polls */
|
||||
|
||||
/* A fallthrough poll does not keep the loop running, it falls through */
|
||||
struct us_poll_t *us_create_poll(struct us_loop_t *loop, int fallthrough, unsigned int ext_size);
|
||||
struct us_poll_t *us_create_poll(us_loop_r loop, int fallthrough, unsigned int ext_size);
|
||||
|
||||
/* After stopping a poll you must manually free the memory */
|
||||
void us_poll_free(struct us_poll_t *p, struct us_loop_t *loop);
|
||||
void us_poll_free(us_poll_r p, struct us_loop_t *loop);
|
||||
|
||||
/* Associate this poll with a socket descriptor and poll type */
|
||||
void us_poll_init(struct us_poll_t *p, LIBUS_SOCKET_DESCRIPTOR fd, int poll_type);
|
||||
void us_poll_init(us_poll_r p, LIBUS_SOCKET_DESCRIPTOR fd, int poll_type);
|
||||
|
||||
/* Start, change and stop polling for events */
|
||||
void us_poll_start(struct us_poll_t *p, struct us_loop_t *loop, int events);
|
||||
void us_poll_change(struct us_poll_t *p, struct us_loop_t *loop, int events);
|
||||
void us_poll_stop(struct us_poll_t *p, struct us_loop_t *loop);
|
||||
void us_poll_start(us_poll_r p, us_loop_r loop, int events) nonnull_fn_decl;
|
||||
void us_poll_change(us_poll_r p, us_loop_r loop, int events) nonnull_fn_decl;
|
||||
void us_poll_stop(us_poll_r p, struct us_loop_t *loop) nonnull_fn_decl;
|
||||
|
||||
/* Return what events we are polling for */
|
||||
int us_poll_events(struct us_poll_t *p);
|
||||
int us_poll_events(us_poll_r p) nonnull_fn_decl;
|
||||
|
||||
/* Returns the user data extension of this poll */
|
||||
void *us_poll_ext(struct us_poll_t *p);
|
||||
void *us_poll_ext(us_poll_r p) nonnull_fn_decl;
|
||||
|
||||
/* Get associated socket descriptor from a poll */
|
||||
LIBUS_SOCKET_DESCRIPTOR us_poll_fd(struct us_poll_t *p);
|
||||
LIBUS_SOCKET_DESCRIPTOR us_poll_fd(us_poll_r p) nonnull_fn_decl;
|
||||
|
||||
/* Resize an active poll */
|
||||
struct us_poll_t *us_poll_resize(struct us_poll_t *p, struct us_loop_t *loop, unsigned int ext_size);
|
||||
struct us_poll_t *us_poll_resize(us_poll_r p, us_loop_r loop, unsigned int ext_size) nonnull_fn_decl;
|
||||
|
||||
/* Public interfaces for sockets */
|
||||
|
||||
/* Returns the underlying native handle for a socket, such as SSL or file descriptor.
|
||||
* In the case of file descriptor, the value of pointer is fd. */
|
||||
void *us_socket_get_native_handle(int ssl, struct us_socket_t *s);
|
||||
void *us_socket_get_native_handle(int ssl, us_socket_r s) nonnull_fn_decl;
|
||||
|
||||
/* Write up to length bytes of data. Returns actual bytes written.
|
||||
* Will call the on_writable callback of active socket context on failure to write everything off in one go.
|
||||
* Set hint msg_more if you have more immediate data to write. */
|
||||
int us_socket_write(int ssl, struct us_socket_t *s, const char *data, int length, int msg_more);
|
||||
int us_socket_write(int ssl, us_socket_r s, const char * nonnull_arg data, int length, int msg_more) nonnull_fn_decl;
|
||||
|
||||
/* Special path for non-SSL sockets. Used to send header and payload in one go. Works like us_socket_write. */
|
||||
int us_socket_write2(int ssl, struct us_socket_t *s, const char *header, int header_length, const char *payload, int payload_length);
|
||||
int us_socket_write2(int ssl, us_socket_r s, const char *header, int header_length, const char *payload, int payload_length) nonnull_fn_decl;
|
||||
|
||||
/* Set a low precision, high performance timer on a socket. A socket can only have one single active timer
|
||||
* at any given point in time. Will remove any such pre set timer */
|
||||
void us_socket_timeout(int ssl, struct us_socket_t *s, unsigned int seconds);
|
||||
void us_socket_timeout(int ssl, us_socket_r s, unsigned int seconds) nonnull_fn_decl;
|
||||
|
||||
/* Set a low precision, high performance timer on a socket. Suitable for per-minute precision. */
|
||||
void us_socket_long_timeout(int ssl, struct us_socket_t *s, unsigned int minutes);
|
||||
void us_socket_long_timeout(int ssl, us_socket_r s, unsigned int minutes) nonnull_fn_decl;
|
||||
|
||||
/* Return the user data extension of this socket */
|
||||
void *us_socket_ext(int ssl, struct us_socket_t *s);
|
||||
void *us_connecting_socket_ext(int ssl, struct us_connecting_socket_t *c);
|
||||
void *us_socket_ext(int ssl, us_socket_r s) nonnull_fn_decl;
|
||||
void *us_connecting_socket_ext(int ssl, struct us_connecting_socket_t *c) nonnull_fn_decl;
|
||||
|
||||
/* Return the socket context of this socket */
|
||||
struct us_socket_context_t *us_socket_context(int ssl, struct us_socket_t *s);
|
||||
struct us_socket_context_t *us_socket_context(int ssl, us_socket_r s) nonnull_fn_decl __attribute__((returns_nonnull));
|
||||
|
||||
/* Withdraw any msg_more status and flush any pending data */
|
||||
void us_socket_flush(int ssl, struct us_socket_t *s);
|
||||
void us_socket_flush(int ssl, us_socket_r s) nonnull_fn_decl;
|
||||
|
||||
/* Shuts down the connection by sending FIN and/or close_notify */
|
||||
void us_socket_shutdown(int ssl, struct us_socket_t *s);
|
||||
void us_socket_shutdown(int ssl, us_socket_r s) nonnull_fn_decl;
|
||||
|
||||
/* Shuts down the connection in terms of read, meaning next event loop
|
||||
* iteration will catch the socket being closed. Can be used to defer closing
|
||||
* to next event loop iteration. */
|
||||
void us_socket_shutdown_read(int ssl, struct us_socket_t *s);
|
||||
void us_socket_shutdown_read(int ssl, us_socket_r s) nonnull_fn_decl;
|
||||
|
||||
/* Returns whether the socket has been shut down or not */
|
||||
int us_socket_is_shut_down(int ssl, struct us_socket_t *s);
|
||||
int us_socket_is_shut_down(int ssl, us_socket_r s) nonnull_fn_decl;
|
||||
|
||||
/* Returns whether this socket has been closed. Only valid if memory has not yet been released. */
|
||||
int us_socket_is_closed(int ssl, struct us_socket_t *s);
|
||||
int us_socket_is_closed(int ssl, us_socket_r s) nonnull_fn_decl;
|
||||
|
||||
/* Immediately closes the socket */
|
||||
struct us_socket_t *us_socket_close(int ssl, struct us_socket_t *s, int code, void *reason);
|
||||
struct us_socket_t *us_socket_close(int ssl, us_socket_r s, int code, void *reason) __attribute__((nonnull(2)));
|
||||
|
||||
/* Returns local port or -1 on failure. */
|
||||
int us_socket_local_port(int ssl, struct us_socket_t *s);
|
||||
int us_socket_local_port(int ssl, us_socket_r s) nonnull_fn_decl;
|
||||
|
||||
/* Copy remote (IP) address of socket, or fail with zero length. */
|
||||
void us_socket_remote_address(int ssl, struct us_socket_t *s, char *buf, int *length);
|
||||
void us_socket_local_address(int ssl, struct us_socket_t *s, char *buf, int *length);
|
||||
void us_socket_remote_address(int ssl, us_socket_r s, char *nonnull_arg buf, int *nonnull_arg length) nonnull_fn_decl;
|
||||
void us_socket_local_address(int ssl, us_socket_r s, char *nonnull_arg buf, int *nonnull_arg length) nonnull_fn_decl;
|
||||
|
||||
/* Bun extras */
|
||||
struct us_socket_t *us_socket_pair(struct us_socket_context_t *ctx, int socket_ext_size, LIBUS_SOCKET_DESCRIPTOR* fds);
|
||||
struct us_socket_t *us_socket_from_fd(struct us_socket_context_t *ctx, int socket_ext_size, LIBUS_SOCKET_DESCRIPTOR fd);
|
||||
struct us_socket_t *us_socket_attach(int ssl, LIBUS_SOCKET_DESCRIPTOR client_fd, struct us_socket_context_t *ctx, int flags, int socket_ext_size);
|
||||
struct us_socket_t *us_socket_wrap_with_tls(int ssl, struct us_socket_t *s, struct us_bun_socket_context_options_t options, struct us_socket_events_t events, int socket_ext_size);
|
||||
int us_socket_raw_write(int ssl, struct us_socket_t *s, const char *data, int length, int msg_more);
|
||||
struct us_socket_t *us_socket_wrap_with_tls(int ssl, us_socket_r s, struct us_bun_socket_context_options_t options, struct us_socket_events_t events, int socket_ext_size);
|
||||
int us_socket_raw_write(int ssl, us_socket_r s, const char *data, int length, int msg_more);
|
||||
struct us_socket_t* us_socket_open(int ssl, struct us_socket_t * s, int is_client, char* ip, int ip_length);
|
||||
int us_raw_root_certs(struct us_cert_string_t**out);
|
||||
unsigned int us_get_remote_address_info(char *buf, struct us_socket_t *s, const char **dest, int *port, int *is_ipv6);
|
||||
int us_socket_get_error(int ssl, struct us_socket_t *s);
|
||||
unsigned int us_get_remote_address_info(char *buf, us_socket_r s, const char **dest, int *port, int *is_ipv6);
|
||||
int us_socket_get_error(int ssl, us_socket_r s);
|
||||
|
||||
void us_socket_ref(struct us_socket_t *s);
|
||||
void us_socket_unref(struct us_socket_t *s);
|
||||
void us_socket_ref(us_socket_r s);
|
||||
void us_socket_unref(us_socket_r s);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
@@ -399,10 +399,12 @@ extern "C" void WebWorker__dispatchExit(Zig::GlobalObject* globalObject, Worker*
|
||||
JSC::VM& vm = globalObject->vm();
|
||||
vm.setHasTerminationRequest();
|
||||
|
||||
while (!vm.hasOneRef())
|
||||
vm.deref();
|
||||
// clang-tidy is smart enough to realize that deref() leads to freeing
|
||||
// but it's not smart enough to realize that `hasOneRef()` ensures its safety
|
||||
while (!vm.hasOneRef()) // NOLINT
|
||||
vm.deref(); // NOLINT
|
||||
|
||||
vm.deref();
|
||||
vm.deref(); // NOLINT
|
||||
}
|
||||
}
|
||||
extern "C" void WebWorker__dispatchOnline(Worker* worker, Zig::GlobalObject* globalObject)
|
||||
|
||||
@@ -138,204 +138,7 @@ typedef void (*uws_get_headers_server_handler)(const char *header_name,
|
||||
size_t header_value_size,
|
||||
void *user_data);
|
||||
|
||||
// Basic HTTP
|
||||
uws_app_t *uws_create_app(int ssl,
|
||||
struct us_bun_socket_context_options_t options);
|
||||
|
||||
void uws_app_destroy(int ssl, uws_app_t *app);
|
||||
void uws_app_get(int ssl, uws_app_t *app, const char *pattern,
|
||||
uws_method_handler handler, void *user_data);
|
||||
void uws_app_post(int ssl, uws_app_t *app, const char *pattern,
|
||||
uws_method_handler handler, void *user_data);
|
||||
void uws_app_options(int ssl, uws_app_t *app, const char *pattern,
|
||||
uws_method_handler handler, void *user_data);
|
||||
void uws_app_delete(int ssl, uws_app_t *app, const char *pattern,
|
||||
uws_method_handler handler, void *user_data);
|
||||
void uws_app_patch(int ssl, uws_app_t *app, const char *pattern,
|
||||
uws_method_handler handler, void *user_data);
|
||||
void uws_app_put(int ssl, uws_app_t *app, const char *pattern,
|
||||
uws_method_handler handler, void *user_data);
|
||||
void uws_app_head(int ssl, uws_app_t *app, const char *pattern,
|
||||
uws_method_handler handler, void *user_data);
|
||||
void uws_app_connect(int ssl, uws_app_t *app, const char *pattern,
|
||||
uws_method_handler handler, void *user_data);
|
||||
void uws_app_trace(int ssl, uws_app_t *app, const char *pattern,
|
||||
uws_method_handler handler, void *user_data);
|
||||
void uws_app_any(int ssl, uws_app_t *app, const char *pattern,
|
||||
uws_method_handler handler, void *user_data);
|
||||
|
||||
void uws_app_run(int ssl, uws_app_t *);
|
||||
|
||||
void uws_app_listen(int ssl, uws_app_t *app, int port,
|
||||
uws_listen_handler handler, void *user_data);
|
||||
void uws_app_listen_with_config(int ssl, uws_app_t *app, const char *host,
|
||||
uint16_t port, int32_t options,
|
||||
uws_listen_handler handler, void *user_data);
|
||||
void uws_app_listen_domain(int ssl, uws_app_t *app, const char *domain,
|
||||
size_t pathlen, uws_listen_domain_handler handler,
|
||||
void *user_data);
|
||||
|
||||
void uws_app_listen_domain_with_options(int ssl, uws_app_t *app,
|
||||
const char *domain, size_t pathlen,
|
||||
int options,
|
||||
uws_listen_domain_handler handler,
|
||||
void *user_data);
|
||||
void uws_app_domain(int ssl, uws_app_t *app, const char *server_name);
|
||||
|
||||
bool uws_constructor_failed(int ssl, uws_app_t *app);
|
||||
|
||||
unsigned int uws_num_subscribers(int ssl, uws_app_t *app, const char *topic,
|
||||
size_t topic_length);
|
||||
bool uws_publish(int ssl, uws_app_t *app, const char *topic,
|
||||
size_t topic_length, const char *message,
|
||||
size_t message_length, uws_opcode_t opcode, bool compress);
|
||||
void *uws_get_native_handle(int ssl, uws_app_t *app);
|
||||
void uws_remove_server_name(int ssl, uws_app_t *app,
|
||||
const char *hostname_pattern);
|
||||
void uws_add_server_name(int ssl, uws_app_t *app, const char *hostname_pattern);
|
||||
void uws_add_server_name_with_options(
|
||||
int ssl, uws_app_t *app, const char *hostname_pattern,
|
||||
struct us_bun_socket_context_options_t options);
|
||||
void uws_missing_server_name(int ssl, uws_app_t *app,
|
||||
uws_missing_server_handler handler,
|
||||
void *user_data);
|
||||
void uws_filter(int ssl, uws_app_t *app, uws_filter_handler handler,
|
||||
void *user_data);
|
||||
|
||||
// WebSocket
|
||||
void uws_ws(int ssl, uws_app_t *app, void *upgradeCtx, const char *pattern,
|
||||
size_t pattern_length, size_t id,
|
||||
const uws_socket_behavior_t *behavior);
|
||||
void *uws_ws_get_user_data(int ssl, uws_websocket_t *ws);
|
||||
void uws_ws_close(int ssl, uws_websocket_t *ws);
|
||||
uws_sendstatus_t uws_ws_send(int ssl, uws_websocket_t *ws, const char *message,
|
||||
size_t length, uws_opcode_t opcode);
|
||||
uws_sendstatus_t uws_ws_send_with_options(int ssl, uws_websocket_t *ws,
|
||||
const char *message, size_t length,
|
||||
uws_opcode_t opcode, bool compress,
|
||||
bool fin);
|
||||
uws_sendstatus_t uws_ws_send_fragment(int ssl, uws_websocket_t *ws,
|
||||
const char *message, size_t length,
|
||||
bool compress);
|
||||
uws_sendstatus_t uws_ws_send_first_fragment(int ssl, uws_websocket_t *ws,
|
||||
const char *message, size_t length,
|
||||
bool compress);
|
||||
uws_sendstatus_t
|
||||
uws_ws_send_first_fragment_with_opcode(int ssl, uws_websocket_t *ws,
|
||||
const char *message, size_t length,
|
||||
uws_opcode_t opcode, bool compress);
|
||||
uws_sendstatus_t uws_ws_send_last_fragment(int ssl, uws_websocket_t *ws,
|
||||
const char *message, size_t length,
|
||||
bool compress);
|
||||
void uws_ws_end(int ssl, uws_websocket_t *ws, int code, const char *message,
|
||||
size_t length);
|
||||
void uws_ws_cork(int ssl, uws_websocket_t *ws, void (*handler)(void *user_data),
|
||||
void *user_data);
|
||||
bool uws_ws_subscribe(int ssl, uws_websocket_t *ws, const char *topic,
|
||||
size_t length);
|
||||
bool uws_ws_unsubscribe(int ssl, uws_websocket_t *ws, const char *topic,
|
||||
size_t length);
|
||||
bool uws_ws_is_subscribed(int ssl, uws_websocket_t *ws, const char *topic,
|
||||
size_t length);
|
||||
void uws_ws_iterate_topics(int ssl, uws_websocket_t *ws,
|
||||
void (*callback)(const char *topic, size_t length,
|
||||
void *user_data),
|
||||
void *user_data);
|
||||
bool uws_ws_publish(int ssl, uws_websocket_t *ws, const char *topic,
|
||||
size_t topic_length, const char *message,
|
||||
size_t message_length);
|
||||
bool uws_ws_publish_with_options(int ssl, uws_websocket_t *ws,
|
||||
const char *topic, size_t topic_length,
|
||||
const char *message, size_t message_length,
|
||||
uws_opcode_t opcode, bool compress);
|
||||
unsigned int uws_ws_get_buffered_amount(int ssl, uws_websocket_t *ws);
|
||||
size_t uws_ws_get_remote_address(int ssl, uws_websocket_t *ws,
|
||||
const char **dest);
|
||||
size_t uws_ws_get_remote_address_as_text(int ssl, uws_websocket_t *ws,
|
||||
const char **dest);
|
||||
|
||||
// Response
|
||||
void uws_res_end(int ssl, uws_res_t *res, const char *data, size_t length,
|
||||
bool close_connection);
|
||||
void uws_res_pause(int ssl, uws_res_t *res);
|
||||
void uws_res_resume(int ssl, uws_res_t *res);
|
||||
void uws_res_write_continwue(int ssl, uws_res_t *res);
|
||||
void uws_res_write_status(int ssl, uws_res_t *res, const char *status,
|
||||
size_t length);
|
||||
void uws_res_write_header(int ssl, uws_res_t *res, const char *key,
|
||||
size_t key_length, const char *value,
|
||||
size_t value_length);
|
||||
|
||||
void uws_res_write_header_int(int ssl, uws_res_t *res, const char *key,
|
||||
size_t key_length, uint64_t value);
|
||||
void uws_res_end_without_body(int ssl, uws_res_t *res, bool close_connection);
|
||||
void uws_res_end_stream(int ssl, uws_res_t *res, bool close_connection);
|
||||
bool uws_res_write(int ssl, uws_res_t *res, const char *data, size_t length);
|
||||
uint64_t uws_res_get_write_offset(int ssl, uws_res_t *res);
|
||||
bool uws_res_has_responded(int ssl, uws_res_t *res);
|
||||
void uws_res_on_writable(int ssl, uws_res_t *res,
|
||||
bool (*handler)(uws_res_t *res, uint64_t,
|
||||
void *opcional_data),
|
||||
void *user_data);
|
||||
void uws_res_on_aborted(int ssl, uws_res_t *res,
|
||||
void (*handler)(uws_res_t *res, void *opcional_data),
|
||||
void *opcional_data);
|
||||
void uws_res_on_data(int ssl, uws_res_t *res,
|
||||
void (*handler)(uws_res_t *res, const char *chunk,
|
||||
size_t chunk_length, bool is_end,
|
||||
void *opcional_data),
|
||||
void *opcional_data);
|
||||
void uws_res_upgrade(int ssl, uws_res_t *res, void *data,
|
||||
const char *sec_web_socket_key,
|
||||
size_t sec_web_socket_key_length,
|
||||
const char *sec_web_socket_protocol,
|
||||
size_t sec_web_socket_protocol_length,
|
||||
const char *sec_web_socket_extensions,
|
||||
size_t sec_web_socket_extensions_length,
|
||||
uws_socket_context_t *ws);
|
||||
|
||||
// Request
|
||||
bool uws_req_is_ancient(uws_req_t *res);
|
||||
bool uws_req_get_yield(uws_req_t *res);
|
||||
void uws_req_set_yield(uws_req_t *res, bool yield);
|
||||
size_t uws_req_get_url(uws_req_t *res, const char **dest);
|
||||
size_t uws_req_get_method(uws_req_t *res, const char **dest);
|
||||
size_t uws_req_get_header(uws_req_t *res, const char *lower_case_header,
|
||||
size_t lower_case_header_length, const char **dest);
|
||||
size_t uws_req_get_query(uws_req_t *res, const char *key, size_t key_length,
|
||||
const char **dest);
|
||||
size_t uws_req_get_parameter(uws_req_t *res, unsigned short index,
|
||||
const char **dest);
|
||||
void uws_req_for_each_header(uws_req_t *res,
|
||||
uws_get_headers_server_handler handler,
|
||||
void *user_data);
|
||||
|
||||
struct us_loop_t *uws_get_loop();
|
||||
struct us_loop_t *uws_get_loop_with_native(void *existing_native_loop);
|
||||
|
||||
void uws_loop_addPostHandler(us_loop_t *loop, void *ctx_,
|
||||
void (*cb)(void *ctx, us_loop_t *loop));
|
||||
void uws_loop_removePostHandler(us_loop_t *loop, void *key);
|
||||
void uws_loop_addPreHandler(us_loop_t *loop, void *key,
|
||||
void (*cb)(void *ctx, us_loop_t *loop));
|
||||
void uws_loop_removePreHandler(us_loop_t *loop, void *ctx_);
|
||||
void uws_loop_defer(us_loop_t *loop, void *ctx, void (*cb)(void *ctx));
|
||||
|
||||
void uws_res_write_headers(int ssl, uws_res_t *res, const StringPointer *names,
|
||||
const StringPointer *values, size_t count,
|
||||
const char *buf);
|
||||
|
||||
void *uws_res_get_native_handle(int ssl, uws_res_t *res);
|
||||
void uws_res_uncork(int ssl, uws_res_t *res);
|
||||
void us_socket_mark_needs_more_not_ssl(uws_res_t *res);
|
||||
int uws_res_state(int ssl, uws_res_t *res);
|
||||
bool uws_res_try_end(int ssl, uws_res_t *res, const char *bytes, size_t len,
|
||||
size_t total_len, bool close);
|
||||
|
||||
void uws_res_prepare_for_sendfile(int ssl, uws_res_t *res);
|
||||
void uws_res_override_write_offset(int ssl, uws_res_t *res, uint64_t offset);
|
||||
|
||||
void uws_app_close(int ssl, uws_app_t *app);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
// clang-format off
|
||||
#include "_libusockets.h"
|
||||
#include "libusockets.h"
|
||||
#include <bun-uws/src/App.h>
|
||||
#include <bun-uws/src/AsyncSocket.h>
|
||||
#include <bun-usockets/src/internal/internal.h>
|
||||
@@ -7,6 +8,8 @@
|
||||
|
||||
extern "C" const char* ares_inet_ntop(int af, const char *src, char *dst, size_t size);
|
||||
|
||||
#define uws_res_r uws_res_t* nonnull_arg
|
||||
|
||||
extern "C"
|
||||
{
|
||||
|
||||
@@ -1015,7 +1018,7 @@ extern "C"
|
||||
return value.length();
|
||||
}
|
||||
|
||||
void uws_res_end(int ssl, uws_res_t *res, const char *data, size_t length,
|
||||
void uws_res_end(int ssl, uws_res_r res, const char *data, size_t length,
|
||||
bool close_connection)
|
||||
{
|
||||
if (ssl)
|
||||
@@ -1032,7 +1035,7 @@ extern "C"
|
||||
}
|
||||
}
|
||||
|
||||
void uws_res_end_stream(int ssl, uws_res_t *res, bool close_connection)
|
||||
void uws_res_end_stream(int ssl, uws_res_r res, bool close_connection)
|
||||
{
|
||||
if (ssl)
|
||||
{
|
||||
@@ -1048,7 +1051,7 @@ extern "C"
|
||||
}
|
||||
}
|
||||
|
||||
void uws_res_pause(int ssl, uws_res_t *res)
|
||||
void uws_res_pause(int ssl, uws_res_r res)
|
||||
{
|
||||
if (ssl)
|
||||
{
|
||||
@@ -1062,7 +1065,7 @@ extern "C"
|
||||
}
|
||||
}
|
||||
|
||||
void uws_res_resume(int ssl, uws_res_t *res)
|
||||
void uws_res_resume(int ssl, uws_res_r res)
|
||||
{
|
||||
if (ssl)
|
||||
{
|
||||
@@ -1076,7 +1079,7 @@ extern "C"
|
||||
}
|
||||
}
|
||||
|
||||
void uws_res_write_continue(int ssl, uws_res_t *res)
|
||||
void uws_res_write_continue(int ssl, uws_res_r res)
|
||||
{
|
||||
if (ssl)
|
||||
{
|
||||
@@ -1090,7 +1093,7 @@ extern "C"
|
||||
}
|
||||
}
|
||||
|
||||
void uws_res_write_status(int ssl, uws_res_t *res, const char *status,
|
||||
void uws_res_write_status(int ssl, uws_res_r res, const char *status,
|
||||
size_t length)
|
||||
{
|
||||
if (ssl)
|
||||
@@ -1105,7 +1108,7 @@ extern "C"
|
||||
}
|
||||
}
|
||||
|
||||
void uws_res_write_header(int ssl, uws_res_t *res, const char *key,
|
||||
void uws_res_write_header(int ssl, uws_res_r res, const char *key,
|
||||
size_t key_length, const char *value,
|
||||
size_t value_length)
|
||||
{
|
||||
@@ -1122,7 +1125,7 @@ extern "C"
|
||||
std::string_view(value, value_length));
|
||||
}
|
||||
}
|
||||
void uws_res_write_header_int(int ssl, uws_res_t *res, const char *key,
|
||||
void uws_res_write_header_int(int ssl, uws_res_r res, const char *key,
|
||||
size_t key_length, uint64_t value)
|
||||
{
|
||||
if (ssl)
|
||||
@@ -1137,7 +1140,7 @@ extern "C"
|
||||
uwsRes->writeHeader(std::string_view(key, key_length), value);
|
||||
}
|
||||
}
|
||||
void uws_res_end_sendfile(int ssl, uws_res_t *res, uint64_t offset, bool close_connection)
|
||||
void uws_res_end_sendfile(int ssl, uws_res_r res, uint64_t offset, bool close_connection)
|
||||
{
|
||||
if (ssl)
|
||||
{
|
||||
@@ -1158,7 +1161,7 @@ extern "C"
|
||||
us_socket_timeout(0, (us_socket_t *)uwsRes, uWS::HTTP_TIMEOUT_S);
|
||||
}
|
||||
}
|
||||
void uws_res_end_without_body(int ssl, uws_res_t *res, bool close_connection)
|
||||
void uws_res_end_without_body(int ssl, uws_res_r res, bool close_connection)
|
||||
{
|
||||
if (ssl)
|
||||
{
|
||||
@@ -1204,7 +1207,9 @@ extern "C"
|
||||
}
|
||||
}
|
||||
|
||||
bool uws_res_write(int ssl, uws_res_t *res, const char *data, size_t length)
|
||||
bool uws_res_write(int ssl, uws_res_r res, const char *data, size_t length) nonnull_fn_decl;
|
||||
|
||||
bool uws_res_write(int ssl, uws_res_r res, const char *data, size_t length)
|
||||
{
|
||||
if (ssl)
|
||||
{
|
||||
@@ -1214,7 +1219,8 @@ extern "C"
|
||||
uWS::HttpResponse<false> *uwsRes = (uWS::HttpResponse<false> *)res;
|
||||
return uwsRes->write(std::string_view(data, length));
|
||||
}
|
||||
uint64_t uws_res_get_write_offset(int ssl, uws_res_t *res)
|
||||
uint64_t uws_res_get_write_offset(int ssl, uws_res_r res) nonnull_fn_decl;
|
||||
uint64_t uws_res_get_write_offset(int ssl, uws_res_r res)
|
||||
{
|
||||
if (ssl)
|
||||
{
|
||||
@@ -1225,7 +1231,8 @@ extern "C"
|
||||
return uwsRes->getWriteOffset();
|
||||
}
|
||||
|
||||
bool uws_res_has_responded(int ssl, uws_res_t *res)
|
||||
bool uws_res_has_responded(int ssl, uws_res_r res) nonnull_fn_decl;
|
||||
bool uws_res_has_responded(int ssl, uws_res_r res)
|
||||
{
|
||||
if (ssl)
|
||||
{
|
||||
@@ -1236,8 +1243,8 @@ extern "C"
|
||||
return uwsRes->hasResponded();
|
||||
}
|
||||
|
||||
void uws_res_on_writable(int ssl, uws_res_t *res,
|
||||
bool (*handler)(uws_res_t *res, uint64_t,
|
||||
void uws_res_on_writable(int ssl, uws_res_r res,
|
||||
bool (*handler)(uws_res_r res, uint64_t,
|
||||
void *opcional_data),
|
||||
void *opcional_data)
|
||||
{
|
||||
@@ -1255,7 +1262,7 @@ extern "C"
|
||||
}
|
||||
}
|
||||
|
||||
void uws_res_clear_on_writable(int ssl, uws_res_t *res) {
|
||||
void uws_res_clear_on_writable(int ssl, uws_res_r res) {
|
||||
if (ssl) {
|
||||
uWS::HttpResponse<true> *uwsRes = (uWS::HttpResponse<true> *)res;
|
||||
uwsRes->clearOnWritable();
|
||||
@@ -1265,8 +1272,8 @@ extern "C"
|
||||
}
|
||||
}
|
||||
|
||||
void uws_res_on_aborted(int ssl, uws_res_t *res,
|
||||
void (*handler)(uws_res_t *res, void *opcional_data),
|
||||
void uws_res_on_aborted(int ssl, uws_res_r res,
|
||||
void (*handler)(uws_res_r res, void *opcional_data),
|
||||
void *opcional_data)
|
||||
{
|
||||
if (ssl)
|
||||
@@ -1297,8 +1304,8 @@ extern "C"
|
||||
}
|
||||
}
|
||||
|
||||
void uws_res_on_data(int ssl, uws_res_t *res,
|
||||
void (*handler)(uws_res_t *res, const char *chunk,
|
||||
void uws_res_on_data(int ssl, uws_res_r res,
|
||||
void (*handler)(uws_res_r res, const char *chunk,
|
||||
size_t chunk_length, bool is_end,
|
||||
void *opcional_data),
|
||||
void *opcional_data)
|
||||
@@ -1359,6 +1366,9 @@ extern "C"
|
||||
return value.length();
|
||||
}
|
||||
|
||||
size_t uws_req_get_header(uws_req_t *res, const char *lower_case_header,
|
||||
size_t lower_case_header_length, const char **dest) nonnull_fn_decl;
|
||||
|
||||
size_t uws_req_get_header(uws_req_t *res, const char *lower_case_header,
|
||||
size_t lower_case_header_length, const char **dest)
|
||||
{
|
||||
@@ -1398,7 +1408,7 @@ extern "C"
|
||||
return value.length();
|
||||
}
|
||||
|
||||
void uws_res_upgrade(int ssl, uws_res_t *res, void *data,
|
||||
void uws_res_upgrade(int ssl, uws_res_r res, void *data,
|
||||
const char *sec_web_socket_key,
|
||||
size_t sec_web_socket_key_length,
|
||||
const char *sec_web_socket_protocol,
|
||||
@@ -1470,9 +1480,12 @@ extern "C"
|
||||
{ cb(ctx); });
|
||||
}
|
||||
|
||||
void uws_res_write_headers(int ssl, uws_res_t *res, const StringPointer *names,
|
||||
void uws_res_write_headers(int ssl, uws_res_r res, const StringPointer *names,
|
||||
const StringPointer *values, size_t count,
|
||||
const char *buf)
|
||||
const char *buf) nonnull_fn_decl;
|
||||
void uws_res_write_headers(int ssl, uws_res_r res, const StringPointer *names,
|
||||
const StringPointer *values, size_t count,
|
||||
const char *buf)
|
||||
{
|
||||
if (ssl)
|
||||
{
|
||||
@@ -1494,7 +1507,7 @@ extern "C"
|
||||
}
|
||||
}
|
||||
|
||||
void uws_res_uncork(int ssl, uws_res_t *res)
|
||||
void uws_res_uncork(int ssl, uws_res_r res)
|
||||
{
|
||||
if (ssl)
|
||||
{
|
||||
@@ -1508,15 +1521,15 @@ extern "C"
|
||||
}
|
||||
}
|
||||
|
||||
void us_socket_mark_needs_more_not_ssl(uws_res_t *res)
|
||||
void us_socket_mark_needs_more_not_ssl(uws_res_r res)
|
||||
{
|
||||
us_socket_t *s = (us_socket_t *)res;
|
||||
us_socket_r s = (us_socket_t *)res;
|
||||
s->context->loop->data.last_write_failed = 1;
|
||||
us_poll_change(&s->p, s->context->loop,
|
||||
LIBUS_SOCKET_READABLE | LIBUS_SOCKET_WRITABLE);
|
||||
}
|
||||
|
||||
void uws_res_override_write_offset(int ssl, uws_res_t *res, uint64_t offset)
|
||||
void uws_res_override_write_offset(int ssl, uws_res_r res, uint64_t offset)
|
||||
{
|
||||
if (ssl)
|
||||
{
|
||||
@@ -1528,7 +1541,11 @@ extern "C"
|
||||
}
|
||||
}
|
||||
|
||||
void uws_res_cork(int ssl, uws_res_t *res, void *ctx,
|
||||
__attribute__((callback (corker, ctx)))
|
||||
void uws_res_cork(int ssl, uws_res_r res, void *ctx,
|
||||
void (*corker)(void *ctx)) nonnull_fn_decl;
|
||||
|
||||
void uws_res_cork(int ssl, uws_res_r res, void *ctx,
|
||||
void (*corker)(void *ctx))
|
||||
{
|
||||
if (ssl)
|
||||
@@ -1545,7 +1562,7 @@ extern "C"
|
||||
}
|
||||
}
|
||||
|
||||
void uws_res_prepare_for_sendfile(int ssl, uws_res_t *res)
|
||||
void uws_res_prepare_for_sendfile(int ssl, uws_res_r res)
|
||||
{
|
||||
if (ssl)
|
||||
{
|
||||
@@ -1569,7 +1586,7 @@ extern "C"
|
||||
}
|
||||
}
|
||||
|
||||
bool uws_res_try_end(int ssl, uws_res_t *res, const char *bytes, size_t len,
|
||||
bool uws_res_try_end(int ssl, uws_res_r res, const char *bytes, size_t len,
|
||||
size_t total_len, bool close)
|
||||
{
|
||||
if (ssl)
|
||||
@@ -1594,7 +1611,7 @@ extern "C"
|
||||
}
|
||||
}
|
||||
|
||||
int uws_res_state(int ssl, uws_res_t *res)
|
||||
int uws_res_state(int ssl, uws_res_r res)
|
||||
{
|
||||
if (ssl)
|
||||
{
|
||||
@@ -1608,7 +1625,7 @@ extern "C"
|
||||
}
|
||||
}
|
||||
|
||||
void *uws_res_get_native_handle(int ssl, uws_res_t *res)
|
||||
void *uws_res_get_native_handle(int ssl, uws_res_r res)
|
||||
{
|
||||
if (ssl)
|
||||
{
|
||||
@@ -1622,14 +1639,14 @@ extern "C"
|
||||
}
|
||||
}
|
||||
|
||||
void us_socket_sendfile_needs_more(us_socket_t *s) {
|
||||
void us_socket_sendfile_needs_more(us_socket_r s) {
|
||||
s->context->loop->data.last_write_failed = 1;
|
||||
us_poll_change(&s->p, s->context->loop, LIBUS_SOCKET_READABLE | LIBUS_SOCKET_WRITABLE);
|
||||
}
|
||||
|
||||
// Gets the remote address and port
|
||||
// Returns 0 if failure / unix socket
|
||||
uint64_t uws_res_get_remote_address_info(uws_res_t *res, const char **dest, int *port, bool *is_ipv6)
|
||||
uint64_t uws_res_get_remote_address_info(uws_res_r res, const char **dest, int *port, bool *is_ipv6)
|
||||
{
|
||||
// This function is manual inlining + modification of
|
||||
// us_socket_remote_address
|
||||
|
||||
Reference in New Issue
Block a user