diff options
| author | Roman Arutyunyan <arut@nginx.com> | 2023-05-14 12:30:11 +0400 |
|---|---|---|
| committer | Roman Arutyunyan <arut@nginx.com> | 2023-05-14 12:30:11 +0400 |
| commit | 0a3c79614521d7612b63eff4e09c25ed219fb65b (patch) | |
| tree | c2a0827a7e914aacd3b6924e233fbedbffcc319f /src/event/ngx_event_udp.c | |
| parent | 779bfcff5f7544494c7c85ac73f41a033e749528 (diff) | |
| download | nginx-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.c | 6 |
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) { |
