diff --git a/include/haproxy/mux_quic.h b/include/haproxy/mux_quic.h index 4e588bc3e..56bbad5db 100644 --- a/include/haproxy/mux_quic.h +++ b/include/haproxy/mux_quic.h @@ -7,6 +7,7 @@ #endif #include +#include #include #include @@ -42,12 +43,26 @@ static inline enum qcs_type qcs_id_type(uint64_t id) return id & QCS_ID_TYPE_MASK; } -/* Return 1 if the stream with as ID attached to connection - * has been locally initiated, 0 if not. - */ -static inline int qc_local_stream_id(struct qcc *qcc, uint64_t id) +/* Return true if stream has been opened locally. */ +static inline int quic_stream_is_local(struct qcc *qcc, uint64_t id) { - return id & QCS_ID_SRV_INTIATOR_BIT; + return conn_is_back(qcc->conn) == !(id & QCS_ID_SRV_INTIATOR_BIT); +} + +/* Return true if stream is opened by peer. */ +static inline int quic_stream_is_remote(struct qcc *qcc, uint64_t id) +{ + return !quic_stream_is_local(qcc, id); +} + +static inline int quic_stream_is_uni(uint64_t id) +{ + return id & QCS_ID_DIR_BIT; +} + +static inline int quic_stream_is_bidi(uint64_t id) +{ + return !quic_stream_is_uni(id); } struct eb64_node *qcc_get_qcs(struct qcc *qcc, uint64_t id); diff --git a/src/mux_quic.c b/src/mux_quic.c index c16e3d2c6..7c52ac013 100644 --- a/src/mux_quic.c +++ b/src/mux_quic.c @@ -113,7 +113,7 @@ struct eb64_node *qcc_get_qcs(struct qcc *qcc, uint64_t id) strm_type = id & QCS_ID_TYPE_MASK; sub_id = id >> QCS_ID_TYPE_SHIFT; strm_node = NULL; - if (qc_local_stream_id(qcc, id)) { + if (quic_stream_is_local(qcc, id)) { /* Local streams: this stream must be already opened. */ strm_node = eb64_lookup(&qcc->streams_by_id, id); if (!strm_node) {