Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 0 additions & 38 deletions packages/bun-usockets/src/bsd.c
Original file line number Diff line number Diff line change
Expand Up @@ -265,44 +265,6 @@ int bsd_udp_setup_sendbuf(struct udp_sendbuf *buf, size_t bufsize, void** payloa
#endif
}

// this one is needed for knowing the destination addr of udp packet
// an udp socket can only bind to one port, and that port never changes
// this function returns ONLY the IP address, not any port
int bsd_udp_packet_buffer_local_ip(struct udp_recvbuf *msgvec, int index, char *ip) {
#if defined(_WIN32) || defined(__APPLE__)
return 0; // not supported
#else
struct msghdr *mh = &((struct mmsghdr *) msgvec)[index].msg_hdr;
for (struct cmsghdr *cmsg = CMSG_FIRSTHDR(mh); cmsg != NULL; cmsg = CMSG_NXTHDR(mh, cmsg)) {
// ipv6 or ipv4
if (cmsg->cmsg_level == IPPROTO_IP) {
#if defined(IP_PKTINFO)
if (cmsg->cmsg_type == IP_PKTINFO) {
struct in_pktinfo *pi = (struct in_pktinfo *) CMSG_DATA(cmsg);
memcpy(ip, &pi->ipi_addr, 4);
return 4;
}
#endif
#if defined(IP_RECVDSTADDR)
if (cmsg->cmsg_type == IP_RECVDSTADDR) {
memcpy(ip, (struct in_addr *) CMSG_DATA(cmsg), 4);
return 4;
}
#endif
}

if (cmsg->cmsg_level == IPPROTO_IPV6 && cmsg->cmsg_type == IPV6_PKTINFO) {
struct in6_pktinfo *pi6 = (struct in6_pktinfo *) CMSG_DATA(cmsg);
memcpy(ip, &pi6->ipi6_addr, 16);
return 16;
}
}

return 0; // no length

#endif
}

char *bsd_udp_packet_buffer_peer(struct udp_recvbuf *msgvec, int index) {
#if defined(_WIN32)
return (char *)&msgvec->addr[index];
Expand Down
20 changes: 0 additions & 20 deletions packages/bun-usockets/src/context.c
Original file line number Diff line number Diff line change
Expand Up @@ -167,10 +167,6 @@ void us_socket_group_close_all(struct us_socket_group_t *group) {
us_socket_group_close_all_ex(group, 1);
}

unsigned short us_socket_group_timestamp(struct us_socket_group_t *group) {
return group->timestamp;
}

__attribute__((always_inline)) struct us_loop_t *us_socket_group_loop(struct us_socket_group_t *group) {
return group->loop;
}
Expand All @@ -179,10 +175,6 @@ __attribute__((always_inline)) void *us_socket_group_ext(struct us_socket_group_
return group->ext;
}

struct us_socket_group_t *us_socket_group_next(struct us_socket_group_t *group) {
return group->next;
}

/* ── Link / unlink ──────────────────────────────────────────────────────── */

static inline int us_internal_group_is_empty(struct us_socket_group_t *group) {
Expand Down Expand Up @@ -468,10 +460,6 @@ void us_listen_socket_close(struct us_listen_socket_t *ls) {
/* We cannot immediately free a listen socket as we can be inside an accept loop */
}

__attribute__((always_inline)) void *us_listen_socket_ext(struct us_listen_socket_t *ls) {
return ls + 1;
}

struct us_listen_socket_t *us_socket_group_head_listen_socket(struct us_socket_group_t *group) {
return group->head_listen_sockets;
}
Expand All @@ -480,14 +468,6 @@ struct us_listen_socket_t *us_listen_socket_next(struct us_listen_socket_t *ls)
return ls->next;
}

LIBUS_SOCKET_DESCRIPTOR us_listen_socket_get_fd(struct us_listen_socket_t *ls) {
return us_poll_fd(&ls->s.p);
}

int us_listen_socket_port(struct us_listen_socket_t *ls) {
return us_socket_local_port(&ls->s);
}

struct us_socket_group_t *us_listen_socket_group(struct us_listen_socket_t *ls) {
return ls->accept_group;
}
Expand Down
11 changes: 1 addition & 10 deletions packages/bun-usockets/src/crypto/openssl.c
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,6 @@ enum {
/* SNI tree leaf — stored as the void* user in sni_tree.cpp. */
struct sni_node_t {
SSL_CTX *ctx;
void *user;
};

static _Atomic long ssl_ctx_live = 0;
Expand Down Expand Up @@ -2957,9 +2956,8 @@ int us_listen_socket_add_server_name(struct us_listen_socket_t *ls,

struct sni_node_t *node = us_malloc(sizeof(struct sni_node_t));
node->ctx = ctx;
node->user = user;
SSL_CTX_up_ref(ctx);
/* Stash userdata on the SSL_CTX too so per-socket lookup via
/* Stash userdata on the SSL_CTX so per-socket lookup via
* SSL_get_SSL_CTX works regardless of which ctx the SNI cb selected. */
us_ex_idx_ensure();
SSL_CTX_set_ex_data(ctx, us_sni_ex_idx, user);
Expand All @@ -2980,13 +2978,6 @@ void us_listen_socket_remove_server_name(struct us_listen_socket_t *ls,
sni_node_destructor(node);
}

void *us_listen_socket_find_server_name_userdata(struct us_listen_socket_t *ls,
const char *hostname_pattern) {
if (!ls->sni) return NULL;
struct sni_node_t *node = (struct sni_node_t *)sni_find(ls->sni, hostname_pattern);
return node ? node->user : NULL;
}

/* Returns the SSL_CTX registered for `hostname_pattern` via
* us_listen_socket_add_server_name, or NULL. Owned - the caller must release
* the reference. The on_server_name resolvers return owned references (the
Expand Down
4 changes: 0 additions & 4 deletions packages/bun-usockets/src/eventing/epoll_kqueue.c
Original file line number Diff line number Diff line change
Expand Up @@ -75,10 +75,6 @@ void us_poll_free(struct us_poll_t *p, struct us_loop_t *loop) {
us_free(p);
}

__attribute__((always_inline)) void *us_poll_ext(struct us_poll_t *p) {
return p + 1;
}

/* Todo: why have us_poll_create AND us_poll_init!? libuv legacy! */
void us_poll_init(struct us_poll_t *p, LIBUS_SOCKET_DESCRIPTOR fd, int poll_type) {
p->state.fd = fd;
Expand Down
1 change: 0 additions & 1 deletion packages/bun-usockets/src/internal/networking/bsd.h
Original file line number Diff line number Diff line change
Expand Up @@ -166,7 +166,6 @@ int bsd_udp_setup_sendbuf(struct udp_sendbuf *buf, size_t bufsize, void** payloa
int bsd_udp_packet_buffer_payload_length(struct udp_recvbuf *msgvec, int index);
char *bsd_udp_packet_buffer_payload(struct udp_recvbuf *msgvec, int index);
char *bsd_udp_packet_buffer_peer(struct udp_recvbuf *msgvec, int index);
int bsd_udp_packet_buffer_local_ip(struct udp_recvbuf *msgvec, int index, char *ip);
int bsd_udp_packet_buffer_truncated(struct udp_recvbuf *msgvec, int index);
// int bsd_udp_packet_buffer_ecn(struct udp_recvbuf *msgvec, int index);

Expand Down
21 changes: 0 additions & 21 deletions packages/bun-usockets/src/libusockets.h
Original file line number Diff line number Diff line change
Expand Up @@ -196,9 +196,6 @@ int us_udp_packet_buffer_payload_length(struct us_udp_packet_buffer_t *buf, int
* 0 otherwise. Backed by MSG_TRUNC in msg_hdr.msg_flags on POSIX. */
int us_udp_packet_buffer_truncated(struct us_udp_packet_buffer_t *buf, int index);

/* Copies out local (received destination) ip (4 or 16 bytes) of received packet */
int us_udp_packet_buffer_local_ip(struct us_udp_packet_buffer_t *buf, int index, char *ip);

/* Get the bound port in host byte order */
int us_udp_socket_bound_port(struct us_udp_socket_t *s);

Expand Down Expand Up @@ -357,10 +354,8 @@ void us_socket_group_close_all_ex(us_socket_group_r group, int also_listeners) n
* (see close_all_ex). */
int us_loop_close_all_groups(us_loop_r loop) nonnull_fn_decl;

unsigned short us_socket_group_timestamp(us_socket_group_r group) nonnull_fn_decl;
struct us_loop_t *us_socket_group_loop(us_socket_group_r group) nonnull_fn_decl __attribute((returns_nonnull));
void *us_socket_group_ext(us_socket_group_r group) nonnull_fn_decl;
struct us_socket_group_t *us_socket_group_next(us_socket_group_r group) nonnull_fn_decl;

/* Move an open socket between groups / kinds, optionally resizing its ext.
* Replaces us_socket_context_adopt_socket + us_create_child_socket_context.
Expand Down Expand Up @@ -404,8 +399,6 @@ int us_listen_socket_add_server_name(struct us_listen_socket_t *ls,
__attribute__((nonnull(1, 2, 3)));
void us_listen_socket_remove_server_name(struct us_listen_socket_t *ls,
const char *hostname_pattern) nonnull_fn_decl;
void *us_listen_socket_find_server_name_userdata(struct us_listen_socket_t *ls,
const char *hostname_pattern) nonnull_fn_decl;
/* Returns an owned reference; the caller must release it. */
struct ssl_ctx_st *us_listen_socket_find_server_name_ctx(struct us_listen_socket_t *ls,
const char *hostname_pattern) nonnull_fn_decl;
Expand Down Expand Up @@ -467,7 +460,6 @@ int us_connecting_socket_get_error(struct us_connecting_socket_t *c) nonnull_fn_
* returns the same getaddrinfo code, not an errno (the two namespaces overlap). */
int us_connecting_socket_get_dns_error(struct us_connecting_socket_t *c) nonnull_fn_decl;
void *us_connecting_socket_get_native_handle(struct us_connecting_socket_t *c) nonnull_fn_decl;
struct us_loop_t *us_connecting_socket_get_loop(struct us_connecting_socket_t *c) nonnull_fn_decl;
struct us_socket_group_t *us_connecting_socket_group(struct us_connecting_socket_t *c) nonnull_fn_decl;
unsigned char us_connecting_socket_kind(struct us_connecting_socket_t *c) nonnull_fn_decl;

Expand Down Expand Up @@ -594,9 +586,6 @@ void us_wakeup_loop(us_loop_r loop) nonnull_fn_decl;
/* Hook up timers in existing loop */
void us_loop_integrate(us_loop_r loop) nonnull_fn_decl;

/* Returns the loop iteration number */
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 */
Expand All @@ -618,9 +607,6 @@ 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(us_poll_r p) nonnull_fn_decl;

/* Returns the user data extension of this poll */
void *us_poll_ext(us_poll_r p) nonnull_fn_decl;

/* Get associated socket descriptor from a poll */
LIBUS_SOCKET_DESCRIPTOR us_poll_fd(us_poll_r p) nonnull_fn_decl;

Expand Down Expand Up @@ -674,7 +660,6 @@ void us_socket_shutdown(us_socket_r s) nonnull_fn_decl;
void us_socket_shutdown_read(us_socket_r s) nonnull_fn_decl;
int us_socket_is_shut_down(us_socket_r s) nonnull_fn_decl;
int us_socket_is_closed(us_socket_r s) nonnull_fn_decl;
int us_socket_is_tls(us_socket_r s) nonnull_fn_decl;
int us_socket_is_ssl_handshake_finished(us_socket_r s) nonnull_fn_decl;
int us_socket_ssl_handshake_callback_has_fired(us_socket_r s) nonnull_fn_decl;
/* TLS ciphertext bytes already sealed for this socket and reported as
Expand All @@ -690,12 +675,8 @@ int us_socket_remote_port(us_socket_r s) nonnull_fn_decl;
void us_socket_remote_address(us_socket_r s, char *nonnull_arg buf, int *nonnull_arg length) nonnull_fn_decl;
void us_socket_local_address(us_socket_r s, char *nonnull_arg buf, int *nonnull_arg length) nonnull_fn_decl;

struct us_socket_t *us_socket_detach(us_socket_r s) nonnull_fn_decl;
int us_socket_ipc_write_fd(us_socket_r s, const char *data, int length, int fd) nonnull_fn_decl;
void us_socket_sendfile_needs_more(us_socket_r s) nonnull_fn_decl;
void *us_listen_socket_ext(struct us_listen_socket_t *ls) nonnull_fn_decl;
LIBUS_SOCKET_DESCRIPTOR us_listen_socket_get_fd(struct us_listen_socket_t *ls) nonnull_fn_decl;
int us_listen_socket_port(struct us_listen_socket_t *ls) nonnull_fn_decl;
struct us_socket_group_t *us_listen_socket_group(struct us_listen_socket_t *ls) nonnull_fn_decl;
/* Walk a group's live listeners. The list is the source of truth — anything
* that caches us_listen_socket_t* across event-loop ticks (e.g. a std::vector
Expand All @@ -705,10 +686,8 @@ struct us_listen_socket_t *us_listen_socket_next(struct us_listen_socket_t *ls)
LIBUS_SOCKET_DESCRIPTOR us_socket_get_fd(us_socket_r s) nonnull_fn_decl;

/* Bun extras */
struct us_socket_t *us_socket_pair(us_socket_group_r group, unsigned char kind, int socket_ext_size, LIBUS_SOCKET_DESCRIPTOR *fds) nonnull_fn_decl;
struct us_socket_t *us_socket_from_fd(us_socket_group_r group, unsigned char kind, struct ssl_ctx_st *ssl_ctx, int socket_ext_size, LIBUS_SOCKET_DESCRIPTOR fd, int ipc)
__attribute__((nonnull(1))); /* ssl_ctx nullable */
struct us_socket_t *us_socket_open(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, us_socket_r s, const char **dest, int *port, int *is_ipv6);
unsigned int us_get_local_address_info(char *buf, us_socket_r s, const char **dest, int *port, int *is_ipv6);
Expand Down
4 changes: 0 additions & 4 deletions packages/bun-usockets/src/loop.c
Original file line number Diff line number Diff line change
Expand Up @@ -414,10 +414,6 @@ void sweep_timer_cb(struct us_internal_callback_t *cb) {
}
#endif

__attribute__((always_inline)) long long us_loop_iteration_number(struct us_loop_t *loop) {
return loop->data.iteration_nr;
}

/* These may have somewhat different meaning depending on the underlying event library */
void us_internal_loop_pre(struct us_loop_t *loop) {
loop->data.iteration_nr++;
Expand Down
1 change: 0 additions & 1 deletion packages/bun-usockets/src/node_quic_shim.c
Original file line number Diff line number Diff line change
Expand Up @@ -526,7 +526,6 @@ lsquic_engine_t *us_nq_engine_new(int is_server, int is_http,

const struct sockaddr *us_nq_spec_dest(const struct lsquic_out_spec *s) { return s->dest_sa; }
const struct sockaddr *us_nq_spec_local(const struct lsquic_out_spec *s) { return s->local_sa; }
void *us_nq_spec_peer_ctx(const struct lsquic_out_spec *s) { return s->peer_ctx; }
const struct iovec *us_nq_spec_iov(const struct lsquic_out_spec *s, size_t *n) {
*n = s->iovlen;
return s->iov;
Expand Down
27 changes: 1 addition & 26 deletions packages/bun-usockets/src/quic.c
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,6 @@ struct us_quic_socket_context_s {
* the peer until idle timeout). */
struct us_quic_socket_s *conns;

void (*on_open)(us_quic_socket_t *);
void (*on_hsk_done)(us_quic_socket_t *, int);
void (*on_goaway)(us_quic_socket_t *);
void (*on_close)(us_quic_socket_t *);
Expand Down Expand Up @@ -522,7 +521,6 @@ static lsquic_conn_ctx_t *us_quic_on_new_conn(void *if_ctx, lsquic_conn_t *conn)
us_internal_enable_sweep_timer(ctx->loop);
qs->next = ctx->conns;
ctx->conns = qs;
if (ctx->on_open) ctx->on_open(qs);
return (lsquic_conn_ctx_t *) qs;
}

Expand Down Expand Up @@ -922,7 +920,6 @@ int us_quic_listen_socket_local_address(us_quic_listen_socket_t *ls, char *buf,

#define DEF_CB(name, sig) \
void us_quic_socket_context_##name(us_quic_socket_context_t *ctx, sig) { ctx->name = cb; }
DEF_CB(on_open, void (*cb)(us_quic_socket_t *))
DEF_CB(on_hsk_done, void (*cb)(us_quic_socket_t *, int))
DEF_CB(on_goaway, void (*cb)(us_quic_socket_t *))
DEF_CB(on_close, void (*cb)(us_quic_socket_t *))
Expand Down Expand Up @@ -1022,15 +1019,6 @@ void us_quic_stream_shutdown(us_quic_stream_t *s) {
if (s->stream) lsquic_stream_shutdown(s->stream, 1);
}

/* lsquic_stream_write buffers until a full packet or shutdown; force the
* partial buffer into a packet so the peer sees streamed bytes promptly. */
void us_quic_stream_flush(us_quic_stream_t *s) {
if (s->stream) {
lsquic_stream_flush(s->stream);
s->ctx->pending_write_bytes++;
}
}

void us_quic_stream_shutdown_read(us_quic_stream_t *s) {
if (s->stream) lsquic_stream_shutdown(s->stream, 0);
}
Expand All @@ -1053,10 +1041,6 @@ void us_quic_stream_reset(us_quic_stream_t *s) {
if (s->stream) lsquic_stream_maybe_reset(s->stream, 0x10C, 1);
}

int us_quic_stream_has_unacked(us_quic_stream_t *s) {
return s->stream ? lsquic_stream_has_unacked_data(s->stream) : 0;
}

void *us_quic_stream_ext(us_quic_stream_t *s) { return s + 1; }

us_quic_socket_t *us_quic_stream_socket(us_quic_stream_t *s) {
Expand All @@ -1076,7 +1060,6 @@ const struct us_quic_header_t *us_quic_stream_header(us_quic_stream_t *s, unsign
}

void *us_quic_socket_ext(us_quic_socket_t *s) { return s + 1; }
us_quic_socket_context_t *us_quic_socket_context(us_quic_socket_t *s) { return s->ctx; }

void us_quic_socket_remote_address(us_quic_socket_t *s, char *buf, int *len, int *port, int *is_ipv6) {
const struct sockaddr *local, *peer;
Expand All @@ -1097,8 +1080,6 @@ void us_quic_socket_remote_address(us_quic_socket_t *s, char *buf, int *len, int
}
}

void us_quic_socket_close(us_quic_socket_t *s) { if (s->conn) lsquic_conn_close(s->conn); }

/* ───── client ─────
*
* lsquic only installs its own SSL_CTX_set_custom_verify when ea_get_ssl_ctx
Expand Down Expand Up @@ -1332,13 +1313,12 @@ struct us_quic_pending_connect_s {
int port;
int reject_unauthorized;
struct addrinfo_request *ai_req;
void *user;
};

int us_quic_socket_context_connect(
us_quic_socket_context_t *ctx, const char *host, int port, const char *sni,
int reject_unauthorized, us_quic_socket_t **out_qs,
struct us_quic_pending_connect_s **out_pending, void *user)
struct us_quic_pending_connect_s **out_pending)
{
*out_qs = NULL;
*out_pending = NULL;
Expand Down Expand Up @@ -1375,15 +1355,10 @@ int us_quic_socket_context_connect(
pc->port = port;
pc->reject_unauthorized = reject_unauthorized;
pc->ai_req = ai_req;
pc->user = user;
*out_pending = pc;
return 0;
}

void *us_quic_pending_connect_user(struct us_quic_pending_connect_s *pc) {
return pc->user;
}

struct addrinfo_request *us_quic_pending_connect_addrinfo(
struct us_quic_pending_connect_s *pc) { return pc->ai_req; }

Expand Down
9 changes: 1 addition & 8 deletions packages/bun-usockets/src/quic.h
Original file line number Diff line number Diff line change
Expand Up @@ -88,9 +88,8 @@ struct addrinfo_request;
int us_quic_socket_context_connect(
us_quic_socket_context_t *ctx, const char *host, int port, const char *sni,
int reject_unauthorized, us_quic_socket_t **out_qs,
struct us_quic_pending_connect_s **out_pending, void *user);
struct us_quic_pending_connect_s **out_pending);

void *us_quic_pending_connect_user(struct us_quic_pending_connect_s *pc);
struct addrinfo_request *us_quic_pending_connect_addrinfo(
struct us_quic_pending_connect_s *pc);
us_quic_socket_t *us_quic_pending_connect_resolved(
Expand All @@ -105,8 +104,6 @@ unsigned us_quic_socket_streams_avail(us_quic_socket_t *s);
int us_quic_socket_status(us_quic_socket_t *s, char *buf, unsigned int len);

/* Connection-level callbacks */
void us_quic_socket_context_on_open(us_quic_socket_context_t *ctx,
void (*on_open)(us_quic_socket_t *));
/* Fires once the TLS handshake completes (client only). ok=0 means the
* handshake failed; on_close follows shortly. */
void us_quic_socket_context_on_hsk_done(us_quic_socket_context_t *ctx,
Expand Down Expand Up @@ -140,11 +137,9 @@ int us_quic_stream_send_headers(us_quic_stream_t *s,
* header block follows separately. */
int us_quic_stream_send_informational(us_quic_stream_t *s, const char *status3);
void us_quic_stream_shutdown(us_quic_stream_t *s);
void us_quic_stream_flush(us_quic_stream_t *s);
void us_quic_stream_shutdown_read(us_quic_stream_t *s);
void us_quic_stream_close(us_quic_stream_t *s);
void us_quic_stream_reset(us_quic_stream_t *s);
int us_quic_stream_has_unacked(us_quic_stream_t *s);

void *us_quic_stream_ext(us_quic_stream_t *s);
us_quic_socket_t *us_quic_stream_socket(us_quic_stream_t *s);
Expand All @@ -163,9 +158,7 @@ const struct us_quic_header_t *us_quic_stream_header(us_quic_stream_t *s, unsign

/* Connection accessors */
void *us_quic_socket_ext(us_quic_socket_t *s);
us_quic_socket_context_t *us_quic_socket_context(us_quic_socket_t *s);
void us_quic_socket_remote_address(us_quic_socket_t *s, char *buf, int *len, int *port, int *is_ipv6);
void us_quic_socket_close(us_quic_socket_t *s);

#ifdef __cplusplus
}
Expand Down
Loading