mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2026-01-19 00:51:37 +01:00
MINOR: h3: define snd_buf callback and divert mux ops
This commit is contained in:
parent
7b1d3d6d3d
commit
26dfd90eb0
@ -93,5 +93,7 @@ struct h3_uqs {
|
||||
|
||||
extern const struct qcc_app_ops h3_ops;
|
||||
|
||||
size_t h3_snd_buf(struct conn_stream *cs, struct buffer *buf, size_t count, int flags);
|
||||
|
||||
#endif /* USE_QUIC */
|
||||
#endif /* _HAPROXY_H3_T_H */
|
||||
|
||||
@ -122,5 +122,7 @@ 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 */
|
||||
|
||||
47
src/h3.c
47
src/h3.c
@ -433,7 +433,54 @@ static struct buffer *get_mux_next_tx_buf(struct qcs *qcs)
|
||||
ABORT_NOW();
|
||||
|
||||
return buf;
|
||||
}
|
||||
|
||||
size_t h3_snd_buf(struct conn_stream *cs, struct buffer *buf, size_t count, int flags)
|
||||
{
|
||||
size_t total = 0;
|
||||
struct qcs *qcs = cs->ctx;
|
||||
struct htx *htx;
|
||||
enum htx_blk_type btype;
|
||||
struct htx_blk *blk;
|
||||
uint32_t bsize;
|
||||
int32_t idx;
|
||||
int ret;
|
||||
|
||||
htx = htx_from_buf(buf);
|
||||
|
||||
while (count && !htx_is_empty(htx)) {
|
||||
idx = htx_get_head(htx);
|
||||
blk = htx_get_blk(htx, idx);
|
||||
btype = htx_get_blk_type(blk);
|
||||
bsize = htx_get_blksz(blk);
|
||||
|
||||
/* Not implemented : QUIC on backend side */
|
||||
BUG_ON(btype == HTX_BLK_REQ_SL);
|
||||
|
||||
switch (btype) {
|
||||
case HTX_BLK_RES_SL:
|
||||
/* TODO HEADERS h3 frame */
|
||||
|
||||
case HTX_BLK_DATA:
|
||||
/* TODO DATA h3 frame */
|
||||
|
||||
case HTX_BLK_TLR:
|
||||
case HTX_BLK_EOT:
|
||||
/* TODO trailers */
|
||||
|
||||
default:
|
||||
htx_remove_blk(htx, blk);
|
||||
total += bsize;
|
||||
count -= bsize;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// TODO should I call the mux directly here ?
|
||||
qc_snd_buf(cs, buf, total, flags);
|
||||
|
||||
out:
|
||||
return total;
|
||||
}
|
||||
|
||||
/* Finalize the initialization of remotely initiated uni-stream <qcs>.
|
||||
|
||||
@ -1867,10 +1867,9 @@ static size_t qc_rcv_buf(struct conn_stream *cs, struct buffer *buf, size_t coun
|
||||
* <count> bytes. Returns the number of bytes effectively sent. Some status
|
||||
* flags may be updated on the conn_stream.
|
||||
*/
|
||||
static size_t qc_snd_buf(struct conn_stream *cs, struct buffer *buf, size_t count, int flags)
|
||||
size_t qc_snd_buf(struct conn_stream *cs, struct buffer *buf, size_t count, int flags)
|
||||
{
|
||||
struct qcs *qcs = cs->ctx;
|
||||
size_t total = 0;
|
||||
|
||||
TRACE_ENTER(QC_EV_QCS_SEND|QC_EV_STRM_SEND, qcs->qcc->conn, qcs);
|
||||
|
||||
@ -1880,7 +1879,7 @@ static size_t qc_snd_buf(struct conn_stream *cs, struct buffer *buf, size_t coun
|
||||
}
|
||||
|
||||
TRACE_LEAVE(QC_EV_QCS_SEND|QC_EV_STRM_SEND, qcs->qcc->conn, qcs);
|
||||
return total;
|
||||
return count;
|
||||
}
|
||||
|
||||
/* Called from the upper layer, to send data from buffer <buf> for no more than
|
||||
@ -2118,7 +2117,8 @@ static int qc_takeover(struct connection *conn, int orig_tid)
|
||||
static const struct mux_ops qc_ops = {
|
||||
.init = qc_init,
|
||||
.wake = qc_wake,
|
||||
.snd_buf = qc_snd_buf,
|
||||
//.snd_buf = qc_snd_buf,
|
||||
.snd_buf = h3_snd_buf,
|
||||
.rcv_buf = qc_rcv_buf,
|
||||
.subscribe = qc_subscribe,
|
||||
.unsubscribe = qc_unsubscribe,
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user