#define CF_STREAMER_FAST 0x00020000 /* the consumer seems to eat the stream very fast */
#define CF_WROTE_DATA 0x00040000 /* some data were sent from this buffer */
-/* unused 0x00080000 */
-#define CF_READ_ATTACHED 0x00100000 /* the read side is attached for the first time */
+/* unused 0x00080000 - 0x00100000 */
#define CF_KERN_SPLICING 0x00200000 /* kernel splicing desired for this channel */
#define CF_READ_DONTWAIT 0x00400000 /* wake the task up after every read (eg: HTTP request) */
#define CF_AUTO_CONNECT 0x00800000 /* consumer may attempt to establish a new connection */
#define CF_ISRESP 0x80000000 /* 0 = request channel, 1 = response channel */
/* Masks which define input events for stream analysers */
-#define CF_MASK_ANALYSER (CF_READ_ATTACHED|CF_READ_EVENT|CF_READ_ERROR|CF_READ_TIMEOUT|CF_WRITE_EVENT|CF_WRITE_ERROR|CF_WAKE_ONCE)
+#define CF_MASK_ANALYSER (CF_READ_EVENT|CF_READ_ERROR|CF_READ_TIMEOUT|CF_WRITE_EVENT|CF_WRITE_ERROR|CF_WAKE_ONCE)
/* Mask for static flags which cause analysers to be woken up when they change */
#define CF_MASK_STATIC (CF_SHUTR|CF_SHUTW|CF_SHUTR_NOW|CF_SHUTW_NOW)
_(CF_WRITE_TIMEOUT, _(CF_WRITE_ERROR,
_(CF_WAKE_WRITE, _(CF_SHUTW, _(CF_SHUTW_NOW, _(CF_AUTO_CLOSE,
_(CF_STREAMER, _(CF_STREAMER_FAST, _(CF_WROTE_DATA,
- _(CF_READ_ATTACHED, _(CF_KERN_SPLICING, _(CF_READ_DONTWAIT,
+ _(CF_KERN_SPLICING, _(CF_READ_DONTWAIT,
_(CF_AUTO_CONNECT, _(CF_DONT_READ, _(CF_EXPECT_MORE,
_(CF_SEND_DONTWAIT, _(CF_NEVER_WAIT, _(CF_WAKE_ONCE, _(CF_FLT_ANALYZE,
- _(CF_EOI, _(CF_ISRESP))))))))))))))))))))))))))));
+ _(CF_EOI, _(CF_ISRESP)))))))))))))))))))))))))));
/* epilogue */
_(~0U);
return buf;
sc_set_state(s->scb, SC_ST_INI);
s->scb->flags &= SC_FL_ISBACK | SC_FL_DONT_WAKE; /* we're in the context of process_stream */
s->req.flags &= ~(CF_SHUTW|CF_SHUTW_NOW|CF_AUTO_CONNECT|CF_WRITE_ERROR|CF_STREAMER|CF_STREAMER_FAST|CF_NEVER_WAIT|CF_WROTE_DATA);
- s->res.flags &= ~(CF_SHUTR|CF_SHUTR_NOW|CF_READ_ATTACHED|CF_READ_ERROR|CF_READ_NOEXP|CF_STREAMER|CF_STREAMER_FAST|CF_WRITE_EVENT|CF_NEVER_WAIT|CF_WROTE_DATA|CF_READ_EVENT);
+ s->res.flags &= ~(CF_SHUTR|CF_SHUTR_NOW|CF_READ_ERROR|CF_READ_NOEXP|CF_STREAMER|CF_STREAMER_FAST|CF_WRITE_EVENT|CF_NEVER_WAIT|CF_WROTE_DATA|CF_READ_EVENT);
s->flags &= ~(SF_DIRECT|SF_ASSIGNED|SF_BE_ASSIGNED|SF_FORCE_PRST|SF_IGNORE_PRST);
s->flags &= ~(SF_CURR_SESS|SF_REDIRECTABLE|SF_SRV_REUSED);
s->flags &= ~(SF_ERR_MASK|SF_FINST_MASK|SF_REDISP);
s->req.buf = *input;
*input = BUF_NULL;
s->req.total = (IS_HTX_STRM(s) ? htxbuf(&s->req.buf)->data : b_data(&s->req.buf));
- s->req.flags |= (s->req.total ? CF_READ_EVENT : 0);
}
+ s->req.flags |= CF_READ_EVENT; /* Always report a read event */
s->flags &= ~SF_IGNORE;
task_wakeup(s->task, TASK_WOKEN_INIT);
s->store_count = 0;
channel_init(&s->req);
- s->req.flags |= CF_READ_ATTACHED; /* the producer is already connected */
+ s->req.flags |= CF_READ_EVENT; /* the producer is already connected */
s->req.analysers = sess->listener ? sess->listener->analysers : sess->fe->fe_req_ana;
if (IS_HTX_STRM(s)) {
s->req.buf = *input;
*input = BUF_NULL;
s->req.total = (IS_HTX_STRM(s) ? htxbuf(&s->req.buf)->data : b_data(&s->req.buf));
- s->req.flags |= (s->req.total ? CF_READ_EVENT : 0);
}
/* it is important not to call the wakeup function directly but to
rep->analysers |= strm_fe(s)->fe_rsp_ana | s->be->be_rsp_ana;
se_have_more_data(s->scb->sedesc);
- rep->flags |= CF_READ_ATTACHED; /* producer is now attached */
+ rep->flags |= CF_READ_EVENT; /* producer is now attached */
if (conn) {
/* real connections have timeouts
* if already defined, it means that a set-timeout rule has
struct channel *req = &s->req;
struct channel *res = &s->res;
- req->flags &= ~(CF_READ_EVENT|CF_READ_ATTACHED|CF_WRITE_EVENT);
- res->flags &= ~(CF_READ_EVENT|CF_READ_ATTACHED|CF_WRITE_EVENT);
+ req->flags &= ~(CF_READ_EVENT|CF_WRITE_EVENT);
+ res->flags &= ~(CF_READ_EVENT|CF_WRITE_EVENT);
s->prev_conn_state = scb->state;