]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: quic: Move quic_lstnr_dgram_dispatch() out of xprt_quic.c
authorFrédéric Lécaille <flecaille@haproxy.com>
Tue, 17 May 2022 15:23:16 +0000 (17:23 +0200)
committerFrédéric Lécaille <flecaille@haproxy.com>
Fri, 20 May 2022 14:57:12 +0000 (16:57 +0200)
Remove this function from xprt_quic.c which for now implements only
"by thread attached to a connection" code.

include/haproxy/xprt_quic.h
src/quic_sock.c
src/xprt_quic.c

index c8587b42c8fb421e146282f0d092a2bf760f02d0..9602b3a8241633607dd5378c0e71298b7cec6512 100644 (file)
@@ -1258,9 +1258,8 @@ void chunk_frm_appendf(struct buffer *buf, const struct quic_frame *frm);
 void quic_set_tls_alert(struct quic_conn *qc, int alert);
 int quic_set_app_ops(struct quic_conn *qc, const unsigned char *alpn, size_t alpn_len);
 struct task *quic_lstnr_dghdlr(struct task *t, void *ctx, unsigned int state);
-int quic_lstnr_dgram_dispatch(unsigned char *buf, size_t len, void *owner,
-                              struct sockaddr_storage *saddr,
-                              struct quic_dgram *new_dgram, struct list *dgrams);
+int quic_get_dgram_dcid(unsigned char *buf, const unsigned char *end,
+                        unsigned char **dcid, size_t *dcid_len);
 int qc_send_app_pkts(struct quic_conn *qc, int old_data, struct list *frms);
 
 void qc_notify_close(struct quic_conn *qc);
index 164993006ef86826dc36f8586d049325fe2063d2..6207af7034ad4cbc09bfb2a222b49da1b72cfbb0 100644 (file)
@@ -17,6 +17,7 @@
 
 #include <haproxy/connection.h>
 #include <haproxy/listener.h>
+#include <haproxy/proto_quic.h>
 #include <haproxy/quic_sock.h>
 #include <haproxy/session.h>
 #include <haproxy/tools.h>
@@ -217,6 +218,47 @@ struct connection *quic_sock_accept_conn(struct listener *l, int *status)
        return NULL;
 }
 
+/* Retrieve the DCID from the datagram found in <buf> and deliver it to the
+ * correct datagram handler.
+ * Return 1 if a correct datagram could be found, 0 if not.
+ */
+static int quic_lstnr_dgram_dispatch(unsigned char *buf, size_t len, void *owner,
+                                     struct sockaddr_storage *saddr,
+                                     struct quic_dgram *new_dgram, struct list *dgrams)
+{
+       struct quic_dgram *dgram;
+       unsigned char *dcid;
+       size_t dcid_len;
+       int cid_tid;
+
+       if (!len || !quic_get_dgram_dcid(buf, buf + len, &dcid, &dcid_len))
+               goto err;
+
+       dgram = new_dgram ? new_dgram : pool_alloc(pool_head_quic_dgram);
+       if (!dgram)
+               goto err;
+
+       cid_tid = quic_get_cid_tid(dcid);
+
+       /* All the members must be initialized! */
+       dgram->owner = owner;
+       dgram->buf = buf;
+       dgram->len = len;
+       dgram->dcid = dcid;
+       dgram->dcid_len = dcid_len;
+       dgram->saddr = *saddr;
+       dgram->qc = NULL;
+       LIST_APPEND(dgrams, &dgram->list);
+       MT_LIST_APPEND(&quic_dghdlrs[cid_tid].dgrams, &dgram->mt_list);
+
+       tasklet_wakeup(quic_dghdlrs[cid_tid].task);
+
+       return 1;
+
+ err:
+       return 0;
+}
+
 /* Function called on a read event from a listening socket. It tries
  * to handle as many connections as possible.
  */
index 1781f32b8288f4ff76c71be16d77a0a5a84fc468..5c9b7f2ce47900491614a2de93422322efe03789 100644 (file)
@@ -6411,8 +6411,8 @@ struct task *quic_lstnr_dghdlr(struct task *t, void *ctx, unsigned int state)
 /* Retreive the DCID from a QUIC datagram or packet with <buf> as first octet.
  * Returns 1 if succeeded, 0 if not.
  */
-static int quic_get_dgram_dcid(unsigned char *buf, const unsigned char *end,
-                               unsigned char **dcid, size_t *dcid_len)
+int quic_get_dgram_dcid(unsigned char *buf, const unsigned char *end,
+                        unsigned char **dcid, size_t *dcid_len)
 {
        int long_header;
        size_t minlen, skip;
@@ -6441,47 +6441,6 @@ static int quic_get_dgram_dcid(unsigned char *buf, const unsigned char *end,
        return 0;
 }
 
-/* Retrieve the DCID from the datagram found in <buf> and deliver it to the
- * correct datagram handler.
- * Return 1 if a correct datagram could be found, 0 if not.
- */
-int quic_lstnr_dgram_dispatch(unsigned char *buf, size_t len, void *owner,
-                              struct sockaddr_storage *saddr,
-                              struct quic_dgram *new_dgram, struct list *dgrams)
-{
-       struct quic_dgram *dgram;
-       unsigned char *dcid;
-       size_t dcid_len;
-       int cid_tid;
-
-       if (!len || !quic_get_dgram_dcid(buf, buf + len, &dcid, &dcid_len))
-               goto err;
-
-       dgram = new_dgram ? new_dgram : pool_alloc(pool_head_quic_dgram);
-       if (!dgram)
-               goto err;
-
-       cid_tid = quic_get_cid_tid(dcid);
-
-       /* All the members must be initialized! */
-       dgram->owner = owner;
-       dgram->buf = buf;
-       dgram->len = len;
-       dgram->dcid = dcid;
-       dgram->dcid_len = dcid_len;
-       dgram->saddr = *saddr;
-       dgram->qc = NULL;
-       LIST_APPEND(dgrams, &dgram->list);
-       MT_LIST_APPEND(&quic_dghdlrs[cid_tid].dgrams, &dgram->mt_list);
-
-       tasklet_wakeup(quic_dghdlrs[cid_tid].task);
-
-       return 1;
-
- err:
-       return 0;
-}
-
 /* Notify the MUX layer if alive about an imminent close of <qc>. */
 void qc_notify_close(struct quic_conn *qc)
 {