summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAmaury Denoyelle <adenoyelle@haproxy.com>2021-11-12 16:09:29 +0100
committerAmaury Denoyelle <adenoyelle@haproxy.com>2021-11-18 10:50:58 +0100
commitabbe91e5e82374bb8bbf6e3ebba524a5e6aff99e (patch)
tree81acae04b1866d8db6c23a2d06700ef559b9c855
parentd1acaf9828d1a95bdefb73ff637e3c467a9fb7ac (diff)
downloadhaproxy-abbe91e5e82374bb8bbf6e3ebba524a5e6aff99e.tar.gz
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.
-rw-r--r--include/haproxy/mux_quic-t.h1
-rw-r--r--include/haproxy/mux_quic.h2
-rw-r--r--src/h3.c1
-rw-r--r--src/mux_quic.c9
4 files changed, 9 insertions, 4 deletions
diff --git a/include/haproxy/mux_quic-t.h b/include/haproxy/mux_quic-t.h
index b93a8a578..c05c69c30 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 332c5291a..7f3bd3c63 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 352b8c2d0..9be2a5b11 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 490335276..d870a68e2 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,