MINOR: httpclient: httpclient_ended() returns 1 if the client ended

httpclient_ended() returns 1 if there is no more data to collect,
because the client received everything or the connection ended.
This commit is contained in:
William Lallemand 2021-09-21 10:58:10 +02:00
parent 518878e007
commit 1123dde6dd
3 changed files with 15 additions and 2 deletions

View File

@ -27,8 +27,11 @@ struct httpclient {
struct sockaddr_storage dst; /* destination address */
struct appctx *appctx; /* HTTPclient appctx */
void *caller; /* ptr of the caller */
unsigned int flags; /* other flags */
};
#define HTTPCLIENT_F_ENDED 0x00000001
/* States of the HTTP Client Appctx */
enum {
HTTPCLIENT_S_REQ = 0,

View File

@ -17,4 +17,10 @@ static inline int httpclient_data(struct httpclient *hc)
return b_data(&hc->res.buf);
}
/* Return 1 if the httpclient ended and won't receive any new data */
static inline int httpclient_ended(struct httpclient *hc)
{
return !!(hc->flags & HTTPCLIENT_F_ENDED);
}
#endif /* ! _HAPROXY_HTTCLIENT_H */

View File

@ -559,10 +559,12 @@ static void httpclient_applet_io_handler(struct appctx *appctx)
/* if there is no HTX data anymore and the EOM flag is
* set, leave (no body) */
if (htx_is_empty(htx) && htx->flags & HTX_FL_EOM)
if (htx_is_empty(htx) && htx->flags & HTX_FL_EOM) {
appctx->st0 = HTTPCLIENT_S_RES_END;
else
hc->flags |= HTTPCLIENT_F_ENDED;
} else {
appctx->st0 = HTTPCLIENT_S_RES_BODY;
}
}
break;
@ -648,6 +650,8 @@ static void httpclient_applet_release(struct appctx *appctx)
{
struct httpclient *hc = appctx->ctx.httpclient.ptr;
/* mark the httpclient as ended */
hc->flags |= HTTPCLIENT_F_ENDED;
/* the applet is leaving, remove the ptr so we don't try to call it
* again from the caller */
hc->appctx = NULL;