BUG_ON(sl); /* Only one start-line expected */
sl = htx_get_blk_ptr(htx, blk);
h2s->status = sl->info.res.status;
+ if (sl->flags & HTX_SL_F_XFER_LEN)
+ h2s->flags |= H2_SF_MORE_HTX_DATA;
if ((sl->flags & HTX_SL_F_BODYLESS_RESP) || h2s->status == 204 || h2s->status == 304)
h2s->flags |= H2_SF_BODYLESS_RESP;
if (h2s->status < 100 || h2s->status > 999) {
/* EOM+empty: we may need to add END_STREAM except for 1xx
* responses and tunneled response.
*/
+ h2s->flags &= ~H2_SF_MORE_HTX_DATA;
if (!(h2s->flags & H2_SF_BODY_TUNNEL) || h2s->status >= 300)
es_now = 1;
}
sl = htx_get_blk_ptr(htx, blk);
meth = htx_sl_req_meth(sl);
uri = htx_sl_req_uri(sl);
+ if (sl->flags & HTX_SL_F_XFER_LEN)
+ h2s->flags |= H2_SF_MORE_HTX_DATA;
if ((sl->flags & HTX_SL_F_BODYLESS_RESP) || sl->info.req.meth == HTTP_METH_HEAD)
h2s->flags |= H2_SF_BODYLESS_RESP;
if (unlikely(uri.len == 0)) {
/* EOM+empty: we may need to add END_STREAM (except for CONNECT
* request)
*/
+ h2s->flags &= ~H2_SF_MORE_HTX_DATA;
if (!(h2s->flags & H2_SF_BODY_TUNNEL))
es_now = 1;
}
/* EOM+empty: we may need to add END_STREAM (except for tunneled
* message)
*/
+ h2s->flags &= ~H2_SF_MORE_HTX_DATA;
if (!(h2s->flags & H2_SF_BODY_TUNNEL))
es_now = 1;
}
/* EOM+empty: we may need to add END_STREAM (except for tunneled
* message)
*/
+ h2s->flags &= ~H2_SF_MORE_HTX_DATA;
if (!(h2s->flags & H2_SF_BODY_TUNNEL))
es_now = 1;
}
if (!(htx->flags & HTX_FL_EOM) || !htx_is_unique_blk(htx, blk))
goto skip_data;
+ h2s->flags &= ~H2_SF_MORE_HTX_DATA;
/* Here, it is the last block and it is also the end of the message. So
* we can emit an empty DATA frame with the ES flag set
*/
if (!(h2s->flags & H2_SF_OUTGOING_DATA) && count)
h2s->flags |= H2_SF_OUTGOING_DATA;
- if (htx->extra && htx->extra != HTX_UNKOWN_PAYLOAD_LENGTH)
- h2s->flags |= H2_SF_MORE_HTX_DATA;
- else
- h2s->flags &= ~H2_SF_MORE_HTX_DATA;
-
if (h2s->id == 0) {
int32_t id = h2c_get_next_sid(h2s->h2c);