/* H1 stream descriptor */
struct h1s {
struct h1c *h1c;
- struct conn_stream *cs;
struct cs_endpoint *endp;
uint32_t flags; /* Connection flags: H1S_F_* */
chunk_appendf(&trace_buf, " h1s=%p(0x%08x)", h1s, h1s->flags);
if (h1s->endp)
chunk_appendf(&trace_buf, " endp=%p(0x%08x)", h1s->endp, h1s->endp->flags);
- if (h1s->cs)
- chunk_appendf(&trace_buf, " cs=%p(0x%08x)", h1s->cs, h1s->cs->flags);
+ if (h1s->endp && h1s->endp->cs)
+ chunk_appendf(&trace_buf, " cs=%p(0x%08x)", h1s->endp->cs, h1s->endp->cs->flags);
}
if (src->verbosity == H1_VERB_MINIMAL)
if (h1s->req.flags & H1_MF_UPG_WEBSOCKET)
h1s->endp->flags |= CS_EP_WEBSOCKET;
- h1s->cs = cs_new_from_mux(h1s->endp, h1c->conn->owner, input);
- if (!h1s->cs) {
+ if (!cs_new_from_mux(h1s->endp, h1c->conn->owner, input)) {
TRACE_ERROR("CS allocation failure", H1_EV_STRM_NEW|H1_EV_STRM_END|H1_EV_STRM_ERR, h1c->conn, h1s);
goto err;
}
h1c->flags = (h1c->flags & ~H1C_F_ST_EMBRYONIC) | H1C_F_ST_ATTACHED | H1C_F_ST_READY;
TRACE_LEAVE(H1_EV_STRM_NEW, h1c->conn, h1s);
- return h1s->cs;
+ return h1s->endp->cs;
err:
TRACE_DEVEL("leaving on error", H1_EV_STRM_NEW|H1_EV_STRM_ERR, h1c->conn, h1s);
{
TRACE_ENTER(H1_EV_STRM_NEW, h1s->h1c->conn, h1s);
- if (stream_upgrade_from_cs(h1s->cs, input) < 0) {
+ if (stream_upgrade_from_cs(h1s->endp->cs, input) < 0) {
TRACE_ERROR("stream upgrade failure", H1_EV_STRM_NEW|H1_EV_STRM_END|H1_EV_STRM_ERR, h1s->h1c->conn, h1s);
goto err;
}
h1s->h1c->flags |= H1C_F_ST_READY;
TRACE_LEAVE(H1_EV_STRM_NEW, h1s->h1c->conn, h1s);
- return h1s->cs;
+ return h1s->endp->cs;
err:
TRACE_DEVEL("leaving on error", H1_EV_STRM_NEW|H1_EV_STRM_ERR, h1s->h1c->conn, h1s);
h1s->h1c = h1c;
h1c->h1s = h1s;
h1s->sess = NULL;
- h1s->cs = NULL;
h1s->endp = NULL;
h1s->flags = H1S_F_WANT_KAL;
h1s->subs = NULL;
if (cs) {
if (cs_attach_mux(cs, h1s, h1c->conn) < 0)
goto fail;
- h1s->cs = cs;
h1s->endp = cs->endp;
}
else {
goto fail;
h1s->flags |= H1S_F_RX_BLK;
- h1s->cs = cs;
h1s->endp = cs->endp;
h1s->sess = sess;
struct proxy *other_end;
union error_snapshot_ctx ctx;
- if ((h1c->flags & H1C_F_ST_ATTACHED) && cs_strm(h1s->cs)) {
+ if ((h1c->flags & H1C_F_ST_ATTACHED) && cs_strm(h1s->endp->cs)) {
if (sess == NULL)
- sess = __cs_strm(h1s->cs)->sess;
+ sess = __cs_strm(h1s->endp->cs)->sess;
if (!(h1m->flags & H1_MF_RESP))
- other_end = __cs_strm(h1s->cs)->be;
+ other_end = __cs_strm(h1s->endp->cs)->be;
else
other_end = sess->fe;
} else
if (!(h1c->flags & H1C_F_ST_ATTACHED)) {
TRACE_DEVEL("request headers fully parsed, create and attach the CS", H1_EV_RX_DATA, h1c->conn, h1s);
- BUG_ON(h1s->cs);
+ BUG_ON(h1s->endp->cs);
if (!h1s_new_cs(h1s, buf)) {
h1c->flags |= H1C_F_ST_ERROR;
goto err;
}
else {
TRACE_DEVEL("request headers fully parsed, upgrade the inherited CS", H1_EV_RX_DATA, h1c->conn, h1s);
- BUG_ON(h1s->cs == NULL);
+ BUG_ON(h1s->endp->cs == NULL);
if (!h1s_upgrade_cs(h1s, buf)) {
h1c->flags |= H1C_F_ST_ERROR;
TRACE_ERROR("H1S upgrade failure", H1_EV_RX_DATA|H1_EV_H1S_ERR, h1c->conn, h1s);
}
}
- /* Here h1s->cs is always defined */
+ /* Here h1s->endp->cs is always defined */
if (!(h1m->flags & H1_MF_CHNK) && (h1m->state == H1_MSG_DATA || (h1m->state == H1_MSG_TUNNEL))) {
TRACE_STATE("notify the mux can use splicing", H1_EV_RX_DATA|H1_EV_RX_BODY, h1c->conn, h1s);
h1s->endp->flags |= CS_EP_MAY_SPLICE;
h1_wake_stream_for_recv(h1s);
h1_wake_stream_for_send(h1s);
}
- else if (h1s->cs && h1s->cs->data_cb->wake != NULL) {
+ else if (h1s->endp->cs && h1s->endp->cs->data_cb->wake != NULL) {
TRACE_POINT(H1_EV_STRM_WAKE, h1s->h1c->conn, h1s);
- h1s->cs->data_cb->wake(h1s->cs);
+ h1s->endp->cs->data_cb->wake(h1s->endp->cs);
}
}
struct h1s *h1s = h1c->h1s;
if (h1s)
- return h1s->cs;
+ return h1s->endp->cs;
return NULL;
}
sess = h1s->sess;
h1c = h1s->h1c;
- h1s->cs = NULL;
sess->accept_date = date;
sess->tv_accept = now;
chunk_appendf(msg, " .endp.flg=0x%08x", h1s->endp->flags);
if (!(h1s->endp->flags & CS_EP_ORPHAN))
chunk_appendf(msg, " .cs.flg=0x%08x .cs.app=%p",
- h1s->cs->flags, h1s->cs->app);
+ h1s->endp->cs->flags, h1s->endp->cs->app);
}
chunk_appendf(&trash, " .subs=%p", h1s->subs);
if (h1s->subs) {