MINOR: quic: set listener accept cb on parsing
Define a special accept cb for QUIC listeners to quic_session_accept().
This operation is conducted during the proto.add callback when creating
listeners.
A special care is now taken care when setting the standard callback
session_accept_fd() to not overwrite if already defined by the proto
layer.
diff --git a/include/haproxy/quic_sock.h b/include/haproxy/quic_sock.h
index 672255e..652bc41 100644
--- a/include/haproxy/quic_sock.h
+++ b/include/haproxy/quic_sock.h
@@ -33,6 +33,7 @@
#include <haproxy/connection-t.h>
#include <haproxy/listener-t.h>
+int quic_session_accept(struct connection *cli_conn);
int quic_sock_accepting_conn(const struct receiver *rx);
struct connection *quic_sock_accept_conn(struct listener *l, int *status);
void quic_sock_fd_iocb(int fd);
diff --git a/src/cfgparse.c b/src/cfgparse.c
index 77af773..6ce2f52 100644
--- a/src/cfgparse.c
+++ b/src/cfgparse.c
@@ -3901,7 +3901,12 @@
if (!listener->maxaccept)
listener->maxaccept = global.tune.maxaccept ? global.tune.maxaccept : MAX_ACCEPT;
- listener->accept = session_accept_fd;
+ /* listener->accept may already be initialized by some
+ * protocols so do not overwrite it in this case.
+ */
+ if (!listener->accept)
+ listener->accept = session_accept_fd;
+
listener->analysers |= curproxy->fe_req_ana;
listener->default_target = curproxy->default_target;
diff --git a/src/proto_quic.c b/src/proto_quic.c
index 9c2bbd6..29ae209 100644
--- a/src/proto_quic.c
+++ b/src/proto_quic.c
@@ -518,6 +518,9 @@
*/
static void quic_add_listener(struct protocol *proto, struct listener *listener)
{
+ /* custom accept callback for QUIC */
+ listener->accept = quic_session_accept;
+
MT_LIST_INIT(&listener->rx.pkts);
listener->rx.odcids = EB_ROOT_UNIQUE;
listener->rx.cids = EB_ROOT_UNIQUE;
diff --git a/src/quic_sock.c b/src/quic_sock.c
index 080853f..bb59373 100644
--- a/src/quic_sock.c
+++ b/src/quic_sock.c
@@ -107,8 +107,6 @@
cli_conn->handle.fd = l->rx.fd;
cli_conn->target = &l->obj_type;
- /* XXX Should not be there. */
- l->accept = quic_session_accept;
/* We need the xprt context before accepting (->accept()) the connection:
* we may receive packet before this connection acception.
*/