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.
 	 */