Commit faae8c1d authored by Poul-Henning Kamp's avatar Poul-Henning Kamp

Use the same iterator function prototype for obj and req.body

parent 1bbc648a
...@@ -898,8 +898,7 @@ void Req_Fail(struct req *req, enum sess_close reason); ...@@ -898,8 +898,7 @@ void Req_Fail(struct req *req, enum sess_close reason);
/* cache_req_body.c */ /* cache_req_body.c */
int VRB_Ignore(struct req *req); int VRB_Ignore(struct req *req);
ssize_t VRB_Cache(struct req *req, ssize_t maxsize); ssize_t VRB_Cache(struct req *req, ssize_t maxsize);
typedef int req_body_iter_f(void *priv, int flush, const void *ptr, ssize_t len); int VRB_Iterate(struct req *req, objiterate_f *func, void *priv);
ssize_t VRB_Iterate(struct req *req, req_body_iter_f *func, void *priv);
void VRB_Free(struct req *req); void VRB_Free(struct req *req);
/* cache_req_fsm.c [CNT] */ /* cache_req_fsm.c [CNT] */
......
...@@ -47,50 +47,25 @@ ...@@ -47,50 +47,25 @@
* return length or -1 on error * return length or -1 on error
*/ */
struct vrb_foo { int
unsigned magic; VRB_Iterate(struct req *req, objiterate_f *func, void *priv)
#define VRB_FOO_MAGIC 0x30240389
struct req *req;
void *priv;
req_body_iter_f *func;
ssize_t ll;
};
static int __match_proto__(objiterate_f)
vrb_objiterator(void *priv, int flush, const void *ptr, ssize_t len)
{
struct vrb_foo *foo;
CAST_OBJ_NOTNULL(foo, priv, VRB_FOO_MAGIC);
foo->ll += len;
return (foo->func(foo->priv, flush, ptr, len));
}
ssize_t
VRB_Iterate(struct req *req, req_body_iter_f *func, void *priv)
{ {
char buf[8192]; char buf[8192];
ssize_t l, ll = 0; ssize_t l;
int i; int i;
struct vfp_ctx *vfc; struct vfp_ctx *vfc;
enum vfp_status vfps = VFP_ERROR; enum vfp_status vfps = VFP_ERROR;
struct vrb_foo foo; int ret = 0;
CHECK_OBJ_NOTNULL(req, REQ_MAGIC); CHECK_OBJ_NOTNULL(req, REQ_MAGIC);
AN(func); AN(func);
switch(req->req_body_status) { switch(req->req_body_status) {
case REQ_BODY_CACHED: case REQ_BODY_CACHED:
INIT_OBJ(&foo, VRB_FOO_MAGIC);
foo.req = req;
foo.priv = priv;
foo.func = func;
foo.ll = 0;
if (ObjIterate(req->wrk, req->body_oc, &foo, vrb_objiterator)) if (ObjIterate(req->wrk, req->body_oc, priv, func))
return (-1); return (-1);
return (foo.ll); return (0);
case REQ_BODY_NONE: case REQ_BODY_NONE:
return (0); return (0);
case REQ_BODY_WITH_LEN: case REQ_BODY_WITH_LEN:
...@@ -137,16 +112,15 @@ VRB_Iterate(struct req *req, req_body_iter_f *func, void *priv) ...@@ -137,16 +112,15 @@ VRB_Iterate(struct req *req, req_body_iter_f *func, void *priv)
vfps = VFP_Suck(vfc, buf, &l); vfps = VFP_Suck(vfc, buf, &l);
if (vfps == VFP_ERROR) { if (vfps == VFP_ERROR) {
req->req_body_status = REQ_BODY_FAIL; req->req_body_status = REQ_BODY_FAIL;
ll = -1; ret = -1;
break; break;
} else if (l > 0) { } else if (l > 0) {
req->req_bodybytes += l; req->req_bodybytes += l;
req->acct.req_bodybytes += l; req->acct.req_bodybytes += l;
ll += l;
l = func(priv, 1, buf, l); l = func(priv, 1, buf, l);
if (l) { if (l) {
req->req_body_status = REQ_BODY_FAIL; req->req_body_status = REQ_BODY_FAIL;
ll = -1; ret = -1;
break; break;
} }
} }
...@@ -154,7 +128,7 @@ VRB_Iterate(struct req *req, req_body_iter_f *func, void *priv) ...@@ -154,7 +128,7 @@ VRB_Iterate(struct req *req, req_body_iter_f *func, void *priv)
VFP_Close(vfc); VFP_Close(vfc);
VSLb_ts_req(req, "ReqBody", VTIM_real()); VSLb_ts_req(req, "ReqBody", VTIM_real());
return (ll); return (ret);
} }
/*---------------------------------------------------------------------- /*----------------------------------------------------------------------
...@@ -163,7 +137,7 @@ VRB_Iterate(struct req *req, req_body_iter_f *func, void *priv) ...@@ -163,7 +137,7 @@ VRB_Iterate(struct req *req, req_body_iter_f *func, void *priv)
* For HTTP1 we have no such luck, and we just iterate it into oblivion. * For HTTP1 we have no such luck, and we just iterate it into oblivion.
*/ */
static int __match_proto__(req_body_iter_f) static int __match_proto__(objiterate_f)
httpq_req_body_discard(void *priv, int flush, const void *ptr, ssize_t len) httpq_req_body_discard(void *priv, int flush, const void *ptr, ssize_t len)
{ {
......
...@@ -48,7 +48,7 @@ ...@@ -48,7 +48,7 @@
* Pass the request body to the backend * Pass the request body to the backend
*/ */
static int __match_proto__(req_body_iter_f) static int __match_proto__(objiterate_f)
vbf_iter_req_body(void *priv, int flush, const void *ptr, ssize_t l) vbf_iter_req_body(void *priv, int flush, const void *ptr, ssize_t l)
{ {
struct busyobj *bo; struct busyobj *bo;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment