summaryrefslogtreecommitdiffhomepage
path: root/src/event/ngx_event_udp.c
diff options
context:
space:
mode:
authorRoman Arutyunyan <arut@nginx.com>2023-05-14 12:30:11 +0400
committerRoman Arutyunyan <arut@nginx.com>2023-05-14 12:30:11 +0400
commit0a3c79614521d7612b63eff4e09c25ed219fb65b (patch)
treec2a0827a7e914aacd3b6924e233fbedbffcc319f /src/event/ngx_event_udp.c
parent779bfcff5f7544494c7c85ac73f41a033e749528 (diff)
downloadnginx-0a3c79614521d7612b63eff4e09c25ed219fb65b.tar.gz
nginx-0a3c79614521d7612b63eff4e09c25ed219fb65b.tar.bz2
Common tree insert function for QUIC and UDP connections.
Previously, ngx_udp_rbtree_insert_value() was used for plain UDP and ngx_quic_rbtree_insert_value() was used for QUIC. Because of this it was impossible to initialize connection tree in ngx_create_listening() since this function is not aware what kind of listening it creates. Now ngx_udp_rbtree_insert_value() is used for both QUIC and UDP. To make is possible, a generic key field is added to ngx_udp_connection_t. It keeps client address for UDP and connection ID for QUIC.
Diffstat (limited to 'src/event/ngx_event_udp.c')
-rw-r--r--src/event/ngx_event_udp.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/event/ngx_event_udp.c b/src/event/ngx_event_udp.c
index ec86fdfbc..43fa621b0 100644
--- a/src/event/ngx_event_udp.c
+++ b/src/event/ngx_event_udp.c
@@ -417,8 +417,8 @@ ngx_udp_rbtree_insert_value(ngx_rbtree_node_t *temp,
udpt = (ngx_udp_connection_t *) temp;
ct = udpt->connection;
- rc = ngx_cmp_sockaddr(c->sockaddr, c->socklen,
- ct->sockaddr, ct->socklen, 1);
+ rc = ngx_memn2cmp(udp->key.data, udpt->key.data,
+ udp->key.len, udpt->key.len);
if (rc == 0 && c->listening->wildcard) {
rc = ngx_cmp_sockaddr(c->local_sockaddr, c->local_socklen,
@@ -471,6 +471,8 @@ ngx_insert_udp_connection(ngx_connection_t *c)
ngx_crc32_final(hash);
udp->node.key = hash;
+ udp->key.data = (u_char *) c->sockaddr;
+ udp->key.len = c->socklen;
cln = ngx_pool_cleanup_add(c->pool, 0);
if (cln == NULL) {