From c0156790e663cc20dc16ac4a73d291b165f49968 Mon Sep 17 00:00:00 2001 From: Amaury Denoyelle Date: Fri, 3 Jun 2022 15:29:07 +0200 Subject: [PATCH] MINOR: h3: add h3c pointer into h3s instance As a mirror to qcc/qcs types, add a h3c pointer into h3s struct. This should help to clean up H3 code and avoid to use qcs.qcc.ctx to retrieve the h3c instance. --- include/haproxy/mux_quic-t.h | 4 ++-- src/h3.c | 10 +++++++--- src/hq_interop.c | 2 +- src/mux_quic.c | 4 ++-- 4 files changed, 12 insertions(+), 8 deletions(-) diff --git a/include/haproxy/mux_quic-t.h b/include/haproxy/mux_quic-t.h index 51e3f88..b32d4f9 100644 --- a/include/haproxy/mux_quic-t.h +++ b/include/haproxy/mux_quic-t.h @@ -136,8 +136,8 @@ struct qcs { /* QUIC application layer operations */ struct qcc_app_ops { int (*init)(struct qcc *qcc); - int (*attach)(struct qcs *qcs); - int (*decode_qcs)(struct qcs *qcs, int fin, void *ctx); + int (*attach)(struct qcs *qcs, void *conn_ctx); + int (*decode_qcs)(struct qcs *qcs, int fin); size_t (*snd_buf)(struct stconn *sc, struct buffer *buf, size_t count, int flags); void (*detach)(struct qcs *qcs); int (*finalize)(void *ctx); diff --git a/src/h3.c b/src/h3.c index 1b8e378..b9a9fed 100644 --- a/src/h3.c +++ b/src/h3.c @@ -133,6 +133,8 @@ DECLARE_STATIC_POOL(pool_head_h3c, "h3c", sizeof(struct h3c)); #define H3_SF_UNI_NO_H3 0x00000002 /* unidirectional stream does not carry H3 frames */ struct h3s { + struct h3c *h3c; + enum h3s_t type; int demux_frame_len; int demux_frame_type; @@ -574,11 +576,11 @@ static size_t h3_parse_settings_frm(struct h3c *h3c, const struct ncbuf *rxbuf, * * Returns 0 on success else non-zero. */ -static int h3_decode_qcs(struct qcs *qcs, int fin, void *ctx) +static int h3_decode_qcs(struct qcs *qcs, int fin) { struct ncbuf *rxbuf = &qcs->rx.ncbuf; - struct h3c *h3c = ctx; struct h3s *h3s = qcs->ctx; + struct h3c *h3c = h3s->h3c; ssize_t ret; h3_debug_printf(stderr, "%s: STREAM ID: %lu\n", __func__, qcs->id); @@ -1020,7 +1022,7 @@ size_t h3_snd_buf(struct stconn *sc, struct buffer *buf, size_t count, int flags return total; } -static int h3_attach(struct qcs *qcs) +static int h3_attach(struct qcs *qcs, void *conn_ctx) { struct h3s *h3s; @@ -1031,6 +1033,8 @@ static int h3_attach(struct qcs *qcs) return 1; qcs->ctx = h3s; + h3s->h3c = conn_ctx; + h3s->demux_frame_len = 0; h3s->demux_frame_type = 0; h3s->flags = 0; diff --git a/src/hq_interop.c b/src/hq_interop.c index c9ab683..f5c0e79 100644 --- a/src/hq_interop.c +++ b/src/hq_interop.c @@ -9,7 +9,7 @@ #include #include -static int hq_interop_decode_qcs(struct qcs *qcs, int fin, void *ctx) +static int hq_interop_decode_qcs(struct qcs *qcs, int fin) { struct ncbuf *rxbuf = &qcs->rx.ncbuf; struct htx *htx; diff --git a/src/mux_quic.c b/src/mux_quic.c index 04ed1ba..84237c3 100644 --- a/src/mux_quic.c +++ b/src/mux_quic.c @@ -139,7 +139,7 @@ struct qcs *qcs_new(struct qcc *qcc, uint64_t id, enum qcs_type type) qcs->id = qcs->by_id.key = id; if (qcc->app_ops->attach) { - if (qcc->app_ops->attach(qcs)) + if (qcc->app_ops->attach(qcs, qcc->ctx)) goto err; } @@ -434,7 +434,7 @@ static int qcc_decode_qcs(struct qcc *qcc, struct qcs *qcs) { TRACE_ENTER(QMUX_EV_QCS_RECV, qcc->conn, qcs); - if (qcc->app_ops->decode_qcs(qcs, qcs->flags & QC_SF_FIN_RECV, qcc->ctx)) { + if (qcc->app_ops->decode_qcs(qcs, qcs->flags & QC_SF_FIN_RECV)) { TRACE_DEVEL("leaving on decoding error", QMUX_EV_QCS_RECV, qcc->conn, qcs); return 1; } -- 1.7.10.4