REORG/MEDIUM: stream-int: introduce si_ic/si_oc to access channels
We'll soon remove direct references to the channels from the stream
interface since everything belongs to the same session, so let's
first not dereference si->ib / si->ob anymore and use macros instead.
diff --git a/src/stream_interface.c b/src/stream_interface.c
index 9025851..8ccf78e 100644
--- a/src/stream_interface.c
+++ b/src/stream_interface.c
@@ -106,8 +106,8 @@
if (!si->err_type)
si->err_type = SI_ET_DATA_ERR;
- si->ob->flags |= CF_WRITE_ERROR;
- si->ib->flags |= CF_READ_ERROR;
+ si_oc(si)->flags |= CF_WRITE_ERROR;
+ si_ic(si)->flags |= CF_READ_ERROR;
}
/*
@@ -121,19 +121,19 @@
*/
void stream_int_retnclose(struct stream_interface *si, const struct chunk *msg)
{
- channel_auto_read(si->ib);
- channel_abort(si->ib);
- channel_auto_close(si->ib);
- channel_erase(si->ib);
- channel_truncate(si->ob);
+ channel_auto_read(si_ic(si));
+ channel_abort(si_ic(si));
+ channel_auto_close(si_ic(si));
+ channel_erase(si_ic(si));
+ channel_truncate(si_oc(si));
if (likely(msg && msg->len))
- bo_inject(si->ob, msg->str, msg->len);
+ bo_inject(si_oc(si), msg->str, msg->len);
- si->ob->wex = tick_add_ifset(now_ms, si->ob->wto);
- channel_auto_read(si->ob);
- channel_auto_close(si->ob);
- channel_shutr_now(si->ob);
+ si_oc(si)->wex = tick_add_ifset(now_ms, si_oc(si)->wto);
+ channel_auto_read(si_oc(si));
+ channel_auto_close(si_oc(si));
+ channel_shutr_now(si_oc(si));
}
/* default update function for embedded tasks, to be used at the end of the i/o handler */
@@ -143,48 +143,48 @@
DPRINTF(stderr, "%s: si=%p, si->state=%d ib->flags=%08x ob->flags=%08x\n",
__FUNCTION__,
- si, si->state, si->ib->flags, si->ob->flags);
+ si, si->state, si_ic(si)->flags, si_oc(si)->flags);
if (si->state != SI_ST_EST)
return;
- if ((si->ob->flags & (CF_SHUTW|CF_SHUTW_NOW)) == CF_SHUTW_NOW &&
- channel_is_empty(si->ob))
+ if ((si_oc(si)->flags & (CF_SHUTW|CF_SHUTW_NOW)) == CF_SHUTW_NOW &&
+ channel_is_empty(si_oc(si)))
si_shutw(si);
- if ((si->ob->flags & (CF_SHUTW|CF_SHUTW_NOW)) == 0 && channel_may_recv(si->ob))
+ if ((si_oc(si)->flags & (CF_SHUTW|CF_SHUTW_NOW)) == 0 && channel_may_recv(si_oc(si)))
si->flags |= SI_FL_WAIT_DATA;
/* we're almost sure that we need some space if the buffer is not
* empty, even if it's not full, because the applets can't fill it.
*/
- if ((si->ib->flags & (CF_SHUTR|CF_DONT_READ)) == 0 && !channel_is_empty(si->ib))
+ if ((si_ic(si)->flags & (CF_SHUTR|CF_DONT_READ)) == 0 && !channel_is_empty(si_ic(si)))
si->flags |= SI_FL_WAIT_ROOM;
- if (si->ob->flags & CF_WRITE_ACTIVITY) {
- if (tick_isset(si->ob->wex))
- si->ob->wex = tick_add_ifset(now_ms, si->ob->wto);
+ if (si_oc(si)->flags & CF_WRITE_ACTIVITY) {
+ if (tick_isset(si_oc(si)->wex))
+ si_oc(si)->wex = tick_add_ifset(now_ms, si_oc(si)->wto);
}
- if (si->ib->flags & CF_READ_ACTIVITY ||
- (si->ob->flags & CF_WRITE_ACTIVITY && !(si->flags & SI_FL_INDEP_STR))) {
- if (tick_isset(si->ib->rex))
- si->ib->rex = tick_add_ifset(now_ms, si->ib->rto);
+ if (si_ic(si)->flags & CF_READ_ACTIVITY ||
+ (si_oc(si)->flags & CF_WRITE_ACTIVITY && !(si->flags & SI_FL_INDEP_STR))) {
+ if (tick_isset(si_ic(si)->rex))
+ si_ic(si)->rex = tick_add_ifset(now_ms, si_ic(si)->rto);
}
/* save flags to detect changes */
old_flags = si->flags;
- if (likely((si->ob->flags & (CF_SHUTW|CF_WRITE_PARTIAL|CF_DONT_READ)) == CF_WRITE_PARTIAL &&
- channel_may_recv(si->ob) &&
- (si->ob->prod->flags & SI_FL_WAIT_ROOM)))
- si_chk_rcv(si->ob->prod);
+ if (likely((si_oc(si)->flags & (CF_SHUTW|CF_WRITE_PARTIAL|CF_DONT_READ)) == CF_WRITE_PARTIAL &&
+ channel_may_recv(si_oc(si)) &&
+ (si_oc(si)->prod->flags & SI_FL_WAIT_ROOM)))
+ si_chk_rcv(si_oc(si)->prod);
- if (((si->ib->flags & CF_READ_PARTIAL) && !channel_is_empty(si->ib)) &&
- (si->ib->pipe /* always try to send spliced data */ ||
- (si->ib->buf->i == 0 && (si->ib->cons->flags & SI_FL_WAIT_DATA)))) {
- si_chk_snd(si->ib->cons);
+ if (((si_ic(si)->flags & CF_READ_PARTIAL) && !channel_is_empty(si_ic(si))) &&
+ (si_ic(si)->pipe /* always try to send spliced data */ ||
+ (si_ic(si)->buf->i == 0 && (si_ic(si)->cons->flags & SI_FL_WAIT_DATA)))) {
+ si_chk_snd(si_ic(si)->cons);
/* check if the consumer has freed some space */
- if (channel_may_recv(si->ib) && !si->ib->pipe)
+ if (channel_may_recv(si_ic(si)) && !si_ic(si)->pipe)
si->flags &= ~SI_FL_WAIT_ROOM;
}
@@ -199,24 +199,24 @@
((old_flags & ~si->flags) & (SI_FL_WAIT_ROOM|SI_FL_WAIT_DATA)) ||
/* changes on the production side */
- (si->ib->flags & (CF_READ_NULL|CF_READ_ERROR)) ||
+ (si_ic(si)->flags & (CF_READ_NULL|CF_READ_ERROR)) ||
si->state != SI_ST_EST ||
(si->flags & SI_FL_ERR) ||
- ((si->ib->flags & CF_READ_PARTIAL) &&
- (!si->ib->to_forward || si->ib->cons->state != SI_ST_EST)) ||
+ ((si_ic(si)->flags & CF_READ_PARTIAL) &&
+ (!si_ic(si)->to_forward || si_ic(si)->cons->state != SI_ST_EST)) ||
/* changes on the consumption side */
- (si->ob->flags & (CF_WRITE_NULL|CF_WRITE_ERROR)) ||
- ((si->ob->flags & CF_WRITE_ACTIVITY) &&
- ((si->ob->flags & CF_SHUTW) ||
- ((si->ob->flags & CF_WAKE_WRITE) &&
- (si->ob->prod->state != SI_ST_EST ||
- (channel_is_empty(si->ob) && !si->ob->to_forward)))))) {
+ (si_oc(si)->flags & (CF_WRITE_NULL|CF_WRITE_ERROR)) ||
+ ((si_oc(si)->flags & CF_WRITE_ACTIVITY) &&
+ ((si_oc(si)->flags & CF_SHUTW) ||
+ ((si_oc(si)->flags & CF_WAKE_WRITE) &&
+ (si_oc(si)->prod->state != SI_ST_EST ||
+ (channel_is_empty(si_oc(si)) && !si_oc(si)->to_forward)))))) {
if (!(si->flags & SI_FL_DONT_WAKE) && si->owner)
task_wakeup(si->owner, TASK_WOKEN_IO);
}
- if (si->ib->flags & CF_READ_ACTIVITY)
- si->ib->flags &= ~CF_READ_DONTWAIT;
+ if (si_ic(si)->flags & CF_READ_ACTIVITY)
+ si_ic(si)->flags &= ~CF_READ_DONTWAIT;
}
/*
@@ -229,17 +229,17 @@
*/
static void stream_int_shutr(struct stream_interface *si)
{
- si->ib->flags &= ~CF_SHUTR_NOW;
- if (si->ib->flags & CF_SHUTR)
+ si_ic(si)->flags &= ~CF_SHUTR_NOW;
+ if (si_ic(si)->flags & CF_SHUTR)
return;
- si->ib->flags |= CF_SHUTR;
- si->ib->rex = TICK_ETERNITY;
+ si_ic(si)->flags |= CF_SHUTR;
+ si_ic(si)->rex = TICK_ETERNITY;
si->flags &= ~SI_FL_WAIT_ROOM;
if (si->state != SI_ST_EST && si->state != SI_ST_CON)
return;
- if (si->ob->flags & CF_SHUTW) {
+ if (si_oc(si)->flags & CF_SHUTW) {
si->state = SI_ST_DIS;
si->exp = TICK_ETERNITY;
si_applet_release(si);
@@ -263,11 +263,11 @@
*/
static void stream_int_shutw(struct stream_interface *si)
{
- si->ob->flags &= ~CF_SHUTW_NOW;
- if (si->ob->flags & CF_SHUTW)
+ si_oc(si)->flags &= ~CF_SHUTW_NOW;
+ if (si_oc(si)->flags & CF_SHUTW)
return;
- si->ob->flags |= CF_SHUTW;
- si->ob->wex = TICK_ETERNITY;
+ si_oc(si)->flags |= CF_SHUTW;
+ si_oc(si)->wex = TICK_ETERNITY;
si->flags &= ~SI_FL_WAIT_DATA;
switch (si->state) {
@@ -279,7 +279,7 @@
* no risk so we close both sides immediately.
*/
if (!(si->flags & (SI_FL_ERR | SI_FL_NOLINGER)) &&
- !(si->ib->flags & (CF_SHUTR|CF_DONT_READ)))
+ !(si_ic(si)->flags & (CF_SHUTR|CF_DONT_READ)))
return;
/* fall through */
@@ -292,9 +292,9 @@
si_applet_release(si);
default:
si->flags &= ~(SI_FL_WAIT_ROOM | SI_FL_NOLINGER);
- si->ib->flags &= ~CF_SHUTR_NOW;
- si->ib->flags |= CF_SHUTR;
- si->ib->rex = TICK_ETERNITY;
+ si_ic(si)->flags &= ~CF_SHUTR_NOW;
+ si_ic(si)->flags |= CF_SHUTR;
+ si_ic(si)->rex = TICK_ETERNITY;
si->exp = TICK_ETERNITY;
}
@@ -306,11 +306,11 @@
/* default chk_rcv function for scheduled tasks */
static void stream_int_chk_rcv(struct stream_interface *si)
{
- struct channel *ib = si->ib;
+ struct channel *ib = si_ic(si);
DPRINTF(stderr, "%s: si=%p, si->state=%d ib->flags=%08x ob->flags=%08x\n",
__FUNCTION__,
- si, si->state, si->ib->flags, si->ob->flags);
+ si, si->state, si_ic(si)->flags, si_oc(si)->flags);
if (unlikely(si->state != SI_ST_EST || (ib->flags & (CF_SHUTR|CF_DONT_READ))))
return;
@@ -330,13 +330,13 @@
/* default chk_snd function for scheduled tasks */
static void stream_int_chk_snd(struct stream_interface *si)
{
- struct channel *ob = si->ob;
+ struct channel *ob = si_oc(si);
DPRINTF(stderr, "%s: si=%p, si->state=%d ib->flags=%08x ob->flags=%08x\n",
__FUNCTION__,
- si, si->state, si->ib->flags, si->ob->flags);
+ si, si->state, si_ic(si)->flags, si_oc(si)->flags);
- if (unlikely(si->state != SI_ST_EST || (si->ob->flags & CF_SHUTW)))
+ if (unlikely(si->state != SI_ST_EST || (si_oc(si)->flags & CF_SHUTW)))
return;
if (!(si->flags & SI_FL_WAIT_DATA) || /* not waiting for data */
@@ -424,7 +424,7 @@
*/
if (conn->data == &si_conn_cb) {
struct stream_interface *si = conn->owner;
- struct connection *remote = objt_conn(si->ob->prod->end);
+ struct connection *remote = objt_conn(si_oc(si)->prod->end);
ret = make_proxy_line(trash.str, trash.size, objt_server(conn->target), remote);
}
else {
@@ -550,7 +550,7 @@
DPRINTF(stderr, "%s: si=%p, si->state=%d ib->flags=%08x ob->flags=%08x\n",
__FUNCTION__,
- si, si->state, si->ib->flags, si->ob->flags);
+ si, si->state, si_ic(si)->flags, si_oc(si)->flags);
if (conn->flags & CO_FL_ERROR)
si->flags |= SI_FL_ERR;
@@ -558,36 +558,36 @@
/* check for recent connection establishment */
if (unlikely(!(conn->flags & (CO_FL_WAIT_L4_CONN | CO_FL_WAIT_L6_CONN | CO_FL_CONNECTED)))) {
si->exp = TICK_ETERNITY;
- si->ob->flags |= CF_WRITE_NULL;
+ si_oc(si)->flags |= CF_WRITE_NULL;
}
/* process consumer side */
- if (channel_is_empty(si->ob)) {
- if (((si->ob->flags & (CF_SHUTW|CF_SHUTW_NOW)) == CF_SHUTW_NOW) &&
+ if (channel_is_empty(si_oc(si))) {
+ if (((si_oc(si)->flags & (CF_SHUTW|CF_SHUTW_NOW)) == CF_SHUTW_NOW) &&
(si->state == SI_ST_EST))
stream_int_shutw_conn(si);
__conn_data_stop_send(conn);
- si->ob->wex = TICK_ETERNITY;
+ si_oc(si)->wex = TICK_ETERNITY;
}
- if ((si->ob->flags & (CF_SHUTW|CF_SHUTW_NOW)) == 0 && channel_may_recv(si->ob))
+ if ((si_oc(si)->flags & (CF_SHUTW|CF_SHUTW_NOW)) == 0 && channel_may_recv(si_oc(si)))
si->flags |= SI_FL_WAIT_DATA;
- if (si->ob->flags & CF_WRITE_ACTIVITY) {
+ if (si_oc(si)->flags & CF_WRITE_ACTIVITY) {
/* update timeouts if we have written something */
- if ((si->ob->flags & (CF_SHUTW|CF_WRITE_PARTIAL)) == CF_WRITE_PARTIAL &&
- !channel_is_empty(si->ob))
- if (tick_isset(si->ob->wex))
- si->ob->wex = tick_add_ifset(now_ms, si->ob->wto);
+ if ((si_oc(si)->flags & (CF_SHUTW|CF_WRITE_PARTIAL)) == CF_WRITE_PARTIAL &&
+ !channel_is_empty(si_oc(si)))
+ if (tick_isset(si_oc(si)->wex))
+ si_oc(si)->wex = tick_add_ifset(now_ms, si_oc(si)->wto);
if (!(si->flags & SI_FL_INDEP_STR))
- if (tick_isset(si->ib->rex))
- si->ib->rex = tick_add_ifset(now_ms, si->ib->rto);
+ if (tick_isset(si_ic(si)->rex))
+ si_ic(si)->rex = tick_add_ifset(now_ms, si_ic(si)->rto);
- if (likely((si->ob->flags & (CF_SHUTW|CF_WRITE_PARTIAL|CF_DONT_READ)) == CF_WRITE_PARTIAL &&
- channel_may_recv(si->ob) &&
- (si->ob->prod->flags & SI_FL_WAIT_ROOM)))
- si_chk_rcv(si->ob->prod);
+ if (likely((si_oc(si)->flags & (CF_SHUTW|CF_WRITE_PARTIAL|CF_DONT_READ)) == CF_WRITE_PARTIAL &&
+ channel_may_recv(si_oc(si)) &&
+ (si_oc(si)->prod->flags & SI_FL_WAIT_ROOM)))
+ si_chk_rcv(si_oc(si)->prod);
}
/* process producer side.
@@ -597,52 +597,52 @@
* immediately afterwards once the following data is parsed (eg:
* HTTP chunking).
*/
- if (((si->ib->flags & CF_READ_PARTIAL) && !channel_is_empty(si->ib)) &&
- (si->ib->pipe /* always try to send spliced data */ ||
- (si->ib->buf->i == 0 && (si->ib->cons->flags & SI_FL_WAIT_DATA)))) {
- int last_len = si->ib->pipe ? si->ib->pipe->data : 0;
+ if (((si_ic(si)->flags & CF_READ_PARTIAL) && !channel_is_empty(si_ic(si))) &&
+ (si_ic(si)->pipe /* always try to send spliced data */ ||
+ (si_ic(si)->buf->i == 0 && (si_ic(si)->cons->flags & SI_FL_WAIT_DATA)))) {
+ int last_len = si_ic(si)->pipe ? si_ic(si)->pipe->data : 0;
- si_chk_snd(si->ib->cons);
+ si_chk_snd(si_ic(si)->cons);
/* check if the consumer has freed some space either in the
* buffer or in the pipe.
*/
- if (channel_may_recv(si->ib) &&
- (!last_len || !si->ib->pipe || si->ib->pipe->data < last_len))
+ if (channel_may_recv(si_ic(si)) &&
+ (!last_len || !si_ic(si)->pipe || si_ic(si)->pipe->data < last_len))
si->flags &= ~SI_FL_WAIT_ROOM;
}
if (si->flags & SI_FL_WAIT_ROOM) {
__conn_data_stop_recv(conn);
- si->ib->rex = TICK_ETERNITY;
+ si_ic(si)->rex = TICK_ETERNITY;
}
- else if ((si->ib->flags & (CF_SHUTR|CF_READ_PARTIAL|CF_DONT_READ)) == CF_READ_PARTIAL &&
- channel_may_recv(si->ib)) {
+ else if ((si_ic(si)->flags & (CF_SHUTR|CF_READ_PARTIAL|CF_DONT_READ)) == CF_READ_PARTIAL &&
+ channel_may_recv(si_ic(si))) {
/* we must re-enable reading if si_chk_snd() has freed some space */
__conn_data_want_recv(conn);
- if (!(si->ib->flags & CF_READ_NOEXP) && tick_isset(si->ib->rex))
- si->ib->rex = tick_add_ifset(now_ms, si->ib->rto);
+ if (!(si_ic(si)->flags & CF_READ_NOEXP) && tick_isset(si_ic(si)->rex))
+ si_ic(si)->rex = tick_add_ifset(now_ms, si_ic(si)->rto);
}
/* wake the task up only when needed */
if (/* changes on the production side */
- (si->ib->flags & (CF_READ_NULL|CF_READ_ERROR)) ||
+ (si_ic(si)->flags & (CF_READ_NULL|CF_READ_ERROR)) ||
si->state != SI_ST_EST ||
(si->flags & SI_FL_ERR) ||
- ((si->ib->flags & CF_READ_PARTIAL) &&
- (!si->ib->to_forward || si->ib->cons->state != SI_ST_EST)) ||
+ ((si_ic(si)->flags & CF_READ_PARTIAL) &&
+ (!si_ic(si)->to_forward || si_ic(si)->cons->state != SI_ST_EST)) ||
/* changes on the consumption side */
- (si->ob->flags & (CF_WRITE_NULL|CF_WRITE_ERROR)) ||
- ((si->ob->flags & CF_WRITE_ACTIVITY) &&
- ((si->ob->flags & CF_SHUTW) ||
- ((si->ob->flags & CF_WAKE_WRITE) &&
- (si->ob->prod->state != SI_ST_EST ||
- (channel_is_empty(si->ob) && !si->ob->to_forward)))))) {
+ (si_oc(si)->flags & (CF_WRITE_NULL|CF_WRITE_ERROR)) ||
+ ((si_oc(si)->flags & CF_WRITE_ACTIVITY) &&
+ ((si_oc(si)->flags & CF_SHUTW) ||
+ ((si_oc(si)->flags & CF_WAKE_WRITE) &&
+ (si_oc(si)->prod->state != SI_ST_EST ||
+ (channel_is_empty(si_oc(si)) && !si_oc(si)->to_forward)))))) {
task_wakeup(si->owner, TASK_WOKEN_IO);
}
- if (si->ib->flags & CF_READ_ACTIVITY)
- si->ib->flags &= ~CF_READ_DONTWAIT;
+ if (si_ic(si)->flags & CF_READ_ACTIVITY)
+ si_ic(si)->flags &= ~CF_READ_DONTWAIT;
session_release_buffers(si_sess(si));
return 0;
@@ -657,7 +657,7 @@
static void si_conn_send(struct connection *conn)
{
struct stream_interface *si = conn->owner;
- struct channel *chn = si->ob;
+ struct channel *chn = si_oc(si);
int ret;
if (chn->pipe && conn->xprt->snd_pipe) {
@@ -733,8 +733,8 @@
*/
void stream_int_update_conn(struct stream_interface *si)
{
- struct channel *ib = si->ib;
- struct channel *ob = si->ob;
+ struct channel *ib = si_ic(si);
+ struct channel *ob = si_oc(si);
struct connection *conn = __objt_conn(si->end);
/* Check if we need to close the read side */
@@ -812,17 +812,17 @@
{
struct connection *conn = __objt_conn(si->end);
- si->ib->flags &= ~CF_SHUTR_NOW;
- if (si->ib->flags & CF_SHUTR)
+ si_ic(si)->flags &= ~CF_SHUTR_NOW;
+ if (si_ic(si)->flags & CF_SHUTR)
return;
- si->ib->flags |= CF_SHUTR;
- si->ib->rex = TICK_ETERNITY;
+ si_ic(si)->flags |= CF_SHUTR;
+ si_ic(si)->rex = TICK_ETERNITY;
si->flags &= ~SI_FL_WAIT_ROOM;
if (si->state != SI_ST_EST && si->state != SI_ST_CON)
return;
- if (si->ob->flags & CF_SHUTW) {
+ if (si_oc(si)->flags & CF_SHUTW) {
conn_full_close(conn);
si->state = SI_ST_DIS;
si->exp = TICK_ETERNITY;
@@ -854,11 +854,11 @@
{
struct connection *conn = __objt_conn(si->end);
- si->ob->flags &= ~CF_SHUTW_NOW;
- if (si->ob->flags & CF_SHUTW)
+ si_oc(si)->flags &= ~CF_SHUTW_NOW;
+ if (si_oc(si)->flags & CF_SHUTW)
return;
- si->ob->flags |= CF_SHUTW;
- si->ob->wex = TICK_ETERNITY;
+ si_oc(si)->flags |= CF_SHUTW;
+ si_oc(si)->wex = TICK_ETERNITY;
si->flags &= ~SI_FL_WAIT_DATA;
switch (si->state) {
@@ -888,12 +888,12 @@
* closed write with pending read (eg: abortonclose while
* waiting for the server).
*/
- if (!(si->flags & SI_FL_NOHALF) || !(si->ib->flags & (CF_SHUTR|CF_DONT_READ))) {
+ if (!(si->flags & SI_FL_NOHALF) || !(si_ic(si)->flags & (CF_SHUTR|CF_DONT_READ))) {
/* We shutdown transport layer */
if (conn_ctrl_ready(conn))
shutdown(conn->t.sock.fd, SHUT_WR);
- if (!(si->ib->flags & (CF_SHUTR|CF_DONT_READ))) {
+ if (!(si_ic(si)->flags & (CF_SHUTR|CF_DONT_READ))) {
/* OK just a shutw, but we want the caller
* to disable polling on this FD if exists.
*/
@@ -918,9 +918,9 @@
/* fall through */
default:
si->flags &= ~(SI_FL_WAIT_ROOM | SI_FL_NOLINGER);
- si->ib->flags &= ~CF_SHUTR_NOW;
- si->ib->flags |= CF_SHUTR;
- si->ib->rex = TICK_ETERNITY;
+ si_ic(si)->flags &= ~CF_SHUTR_NOW;
+ si_ic(si)->flags |= CF_SHUTR;
+ si_ic(si)->rex = TICK_ETERNITY;
si->exp = TICK_ETERNITY;
}
}
@@ -933,7 +933,7 @@
*/
static void stream_int_chk_rcv_conn(struct stream_interface *si)
{
- struct channel *ib = si->ib;
+ struct channel *ib = si_ic(si);
struct connection *conn = __objt_conn(si->end);
if (unlikely(si->state > SI_ST_EST || (ib->flags & CF_SHUTR)))
@@ -963,7 +963,7 @@
*/
static void stream_int_chk_snd_conn(struct stream_interface *si)
{
- struct channel *ob = si->ob;
+ struct channel *ob = si_oc(si);
struct connection *conn = __objt_conn(si->end);
if (unlikely(si->state > SI_ST_EST || (ob->flags & CF_SHUTW)))
@@ -1037,7 +1037,7 @@
!channel_is_empty(ob))
ob->wex = tick_add_ifset(now_ms, ob->wto);
- if (tick_isset(si->ib->rex) && !(si->flags & SI_FL_INDEP_STR)) {
+ if (tick_isset(si_ic(si)->rex) && !(si->flags & SI_FL_INDEP_STR)) {
/* Note: to prevent the client from expiring read timeouts
* during writes, we refresh it. We only do this if the
* interface is not configured for "independent streams",
@@ -1046,7 +1046,7 @@
* of data which can full the socket buffers long before a
* write timeout is detected.
*/
- si->ib->rex = tick_add_ifset(now_ms, si->ib->rto);
+ si_ic(si)->rex = tick_add_ifset(now_ms, si_ic(si)->rto);
}
}
@@ -1055,7 +1055,7 @@
*/
if (likely((ob->flags & (CF_WRITE_NULL|CF_WRITE_ERROR|CF_SHUTW)) ||
((ob->flags & CF_WAKE_WRITE) &&
- ((channel_is_empty(si->ob) && !ob->to_forward) ||
+ ((channel_is_empty(si_oc(si)) && !ob->to_forward) ||
si->state != SI_ST_EST)))) {
out_wakeup:
if (!(si->flags & SI_FL_DONT_WAKE) && si->owner)
@@ -1074,7 +1074,7 @@
static void si_conn_recv_cb(struct connection *conn)
{
struct stream_interface *si = conn->owner;
- struct channel *chn = si->ib;
+ struct channel *chn = si_ic(si);
int ret, max, cur_read;
int read_poll = MAX_READ_POLL_LOOPS;
@@ -1306,7 +1306,7 @@
static void si_conn_send_cb(struct connection *conn)
{
struct stream_interface *si = conn->owner;
- struct channel *chn = si->ob;
+ struct channel *chn = si_oc(si);
if (conn->flags & CO_FL_ERROR)
return;
@@ -1337,17 +1337,17 @@
{
struct connection *conn = __objt_conn(si->end);
- si->ib->flags &= ~CF_SHUTR_NOW;
- if (si->ib->flags & CF_SHUTR)
+ si_ic(si)->flags &= ~CF_SHUTR_NOW;
+ if (si_ic(si)->flags & CF_SHUTR)
return;
- si->ib->flags |= CF_SHUTR;
- si->ib->rex = TICK_ETERNITY;
+ si_ic(si)->flags |= CF_SHUTR;
+ si_ic(si)->rex = TICK_ETERNITY;
si->flags &= ~SI_FL_WAIT_ROOM;
if (si->state != SI_ST_EST && si->state != SI_ST_CON)
return;
- if (si->ob->flags & CF_SHUTW)
+ if (si_oc(si)->flags & CF_SHUTW)
goto do_close;
if (si->flags & SI_FL_NOHALF) {
@@ -1368,13 +1368,13 @@
/* OK we completely close the socket here just as if we went through si_shut[rw]() */
conn_full_close(conn);
- si->ib->flags &= ~CF_SHUTR_NOW;
- si->ib->flags |= CF_SHUTR;
- si->ib->rex = TICK_ETERNITY;
+ si_ic(si)->flags &= ~CF_SHUTR_NOW;
+ si_ic(si)->flags |= CF_SHUTR;
+ si_ic(si)->rex = TICK_ETERNITY;
- si->ob->flags &= ~CF_SHUTW_NOW;
- si->ob->flags |= CF_SHUTW;
- si->ob->wex = TICK_ETERNITY;
+ si_oc(si)->flags &= ~CF_SHUTW_NOW;
+ si_oc(si)->flags |= CF_SHUTW;
+ si_oc(si)->wex = TICK_ETERNITY;
si->flags &= ~(SI_FL_WAIT_DATA | SI_FL_WAIT_ROOM);