SE_FL_DETACHED = 0x00000010, /* The endpoint is detached (no mux/no applet) */
SE_FL_ORPHAN = 0x00000020, /* The endpoint is orphan (no stream connector) */
- /* unused: 0x00000040 .. 0x00000080 */
+ SE_FL_APP_STARTED= 0x00000040, /* the application layer has really started */
+
+ /* unused: 0x00000080 */
SE_FL_SHRD = 0x00000100, /* read shut, draining extra data */
SE_FL_SHRR = 0x00000200, /* read shut, resetting extra data */
_(0);
/* flags */
_(SE_FL_T_MUX, _(SE_FL_T_APPLET, _(SE_FL_DETACHED, _(SE_FL_ORPHAN,
- _(SE_FL_SHRD, _(SE_FL_SHRR, _(SE_FL_SHWN, _(SE_FL_SHWS,
+ _(SE_FL_APP_STARTED, _(SE_FL_SHRD, _(SE_FL_SHRR, _(SE_FL_SHWN, _(SE_FL_SHWS,
_(SE_FL_NOT_FIRST, _(SE_FL_WEBSOCKET, _(SE_FL_EOI, _(SE_FL_EOS,
_(SE_FL_ERROR, _(SE_FL_ERR_PENDING, _(SE_FL_RCV_MORE,
_(SE_FL_WANT_ROOM, _(SE_FL_EXP_NO_DATA, _(SE_FL_MAY_FASTFWD_PROD, _(SE_FL_MAY_FASTFWD_CONS,
_(SE_FL_WAIT_FOR_HS, _(SE_FL_KILL_CONN, _(SE_FL_WAIT_DATA,
- _(SE_FL_WONT_CONSUME, _(SE_FL_HAVE_NO_DATA, _(SE_FL_APPLET_NEED_CONN)))))))))))))))))))))))));
+ _(SE_FL_WONT_CONSUME, _(SE_FL_HAVE_NO_DATA, _(SE_FL_APPLET_NEED_CONN))))))))))))))))))))))))));
/* epilogue */
_(~0U);
return buf;
struct htx_sl *sl = http_get_stline(htx);
struct http_hdr_ctx expect, clength;
+ /* we're starting to work with this endpoint, let's flag it */
+ if (unlikely(!sc_ep_test(hs->sc, SE_FL_APP_STARTED)))
+ sc_ep_set(hs->sc, SE_FL_APP_STARTED);
+
if (sl->flags & HTX_SL_F_VER_11)
hs->ka = 5;
if (unlikely(!sc))
return NULL;
sc->flags |= flags;
+
+ if (flags & SC_FL_ISBACK)
+ sc_ep_set(sc, SE_FL_APP_STARTED);
+
sc_ep_set(sc, SE_FL_DETACHED);
sc->app = &strm->obj_type;
return sc;
if (unlikely(!sc))
return NULL;
sc->flags = SC_FL_ISBACK;
+ sc_ep_set(sc, SE_FL_APP_STARTED);
sc_ep_set(sc, SE_FL_DETACHED);
sc->app = &check->obj_type;
return sc;
SF_ERR_KILLED));
}
+ /* we're starting to work with this endpoint, let's flag it */
+ if (unlikely(!sc_ep_test(scf, SE_FL_APP_STARTED)))
+ sc_ep_set(scf, SE_FL_APP_STARTED);
+
/* First, attempt to receive pending data from I/O layers */
sc_sync_recv(scf);
sc_sync_recv(scb);