MEDIUM: promex: Use the sedesc to report and detect end of processing

Just like for other applets, we now use the SE descriptor instead of the
channel to report error and end-of-stream.
This commit is contained in:
Christopher Faulet 2023-03-31 11:29:54 +02:00
parent df15a5d1f3
commit d4eacb3683

View File

@ -1486,7 +1486,6 @@ static int promex_parse_uri(struct appctx *appctx, struct stconn *sc)
memcpy(res->buf.area, b_head(err), b_data(err)); memcpy(res->buf.area, b_head(err), b_data(err));
res_htx = htx_from_buf(&res->buf); res_htx = htx_from_buf(&res->buf);
channel_add_input(res, res_htx->data); channel_add_input(res, res_htx->data);
appctx->st0 = PROMEX_ST_END;
return -1; return -1;
} }
@ -1539,7 +1538,8 @@ static void promex_appctx_handle_io(struct appctx *appctx)
int ret; int ret;
res_htx = htx_from_buf(&res->buf); res_htx = htx_from_buf(&res->buf);
if (unlikely(sc->state == SC_ST_DIS || sc->state == SC_ST_CLO))
if (unlikely(se_fl_test(appctx->sedesc, (SE_FL_EOS|SE_FL_ERROR|SE_FL_SHR|SE_FL_SHW))))
goto out; goto out;
/* Check if the input buffer is available. */ /* Check if the input buffer is available. */
@ -1596,9 +1596,7 @@ static void promex_appctx_handle_io(struct appctx *appctx)
__fallthrough; __fallthrough;
case PROMEX_ST_END: case PROMEX_ST_END:
if (!(res->flags & CF_SHUTR)) { se_fl_set(appctx->sedesc, SE_FL_EOS);
sc_shutr(sc);
}
} }
out: out:
@ -1612,8 +1610,7 @@ static void promex_appctx_handle_io(struct appctx *appctx)
return; return;
error: error:
sc_shutr(sc); se_fl_set(appctx->sedesc, SE_FL_ERROR);
sc_shutw(sc);
goto out; goto out;
} }