From abbe91e5e82374bb8bbf6e3ebba524a5e6aff99e Mon Sep 17 00:00:00 2001 From: Amaury Denoyelle Date: Fri, 12 Nov 2021 16:09:29 +0100 Subject: [PATCH] MINOR: quic: redirect app_ops snd_buf through mux This change is required to be able to use multiple app_ops layer on top of QUIC. The stream-interface will now call the mux snd_buf which is just a proxy to the app_ops snd_buf function. The architecture may be simplified in the structure to install the app_ops on the stream_interface and avoid the detour via the mux layer on the sending path. --- include/haproxy/mux_quic-t.h | 1 + include/haproxy/mux_quic.h | 2 -- src/h3.c | 1 + src/mux_quic.c | 9 +++++++-- 4 files changed, 9 insertions(+), 4 deletions(-) diff --git a/include/haproxy/mux_quic-t.h b/include/haproxy/mux_quic-t.h index b93a8a5780..c05c69c300 100644 --- a/include/haproxy/mux_quic-t.h +++ b/include/haproxy/mux_quic-t.h @@ -239,6 +239,7 @@ struct qcc_app_ops { int (*init)(struct qcc *qcc); int (*attach_ruqs)(struct qcs *qcs, void *ctx); int (*decode_qcs)(struct qcs *qcs, void *ctx); + size_t (*snd_buf)(struct conn_stream *cs, struct buffer *buf, size_t count, int flags); int (*finalize)(void *ctx); }; diff --git a/include/haproxy/mux_quic.h b/include/haproxy/mux_quic.h index 332c5291a2..7f3bd3c632 100644 --- a/include/haproxy/mux_quic.h +++ b/include/haproxy/mux_quic.h @@ -121,7 +121,5 @@ static inline void *qcs_new(struct qcc *qcc, uint64_t id) return bidi_qcs_new(qcc, id); } -size_t qc_snd_buf(struct conn_stream *cs, struct buffer *buf, size_t count, int flags); - #endif /* USE_QUIC */ #endif /* _HAPROXY_MUX_QUIC_H */ diff --git a/src/h3.c b/src/h3.c index 352b8c2d03..9be2a5b11c 100644 --- a/src/h3.c +++ b/src/h3.c @@ -820,5 +820,6 @@ const struct qcc_app_ops h3_ops = { .init = h3_init, .attach_ruqs = h3_attach_ruqs, .decode_qcs = h3_decode_qcs, + .snd_buf = h3_snd_buf, .finalize = h3_finalize, }; diff --git a/src/mux_quic.c b/src/mux_quic.c index 4903352766..d870a68e23 100644 --- a/src/mux_quic.c +++ b/src/mux_quic.c @@ -1852,6 +1852,12 @@ static int qc_show_fd(struct buffer *msg, struct connection *conn) return 0; } +static size_t qc_snd_buf(struct conn_stream *cs, struct buffer *buf, size_t count, int flags) +{ + struct qcs *qcs = cs->ctx; + return qcs->qcc->app_ops->snd_buf(cs, buf, count, flags); +} + /****************************************/ /* MUX initialization and instantiation */ /***************************************/ @@ -1860,8 +1866,7 @@ static int qc_show_fd(struct buffer *msg, struct connection *conn) static const struct mux_ops qc_ops = { .init = qc_init, .wake = qc_wake, - //.snd_buf = qc_snd_buf, - .snd_buf = h3_snd_buf, + .snd_buf = qc_snd_buf, .rcv_buf = qc_rcv_buf, .subscribe = qc_subscribe, .unsubscribe = qc_unsubscribe,