[master] 943a0cf89 Polish
Poul-Henning Kamp
phk at FreeBSD.org
Wed Jan 16 23:12:07 UTC 2019
commit 943a0cf8943e811f19cd1efb3e03d1688cf447b5
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date: Wed Jan 16 23:11:25 2019 +0000
Polish
diff --git a/bin/varnishd/cache/cache_esi_deliver.c b/bin/varnishd/cache/cache_esi_deliver.c
index 360bd3c2b..d51df4ac8 100644
--- a/bin/varnishd/cache/cache_esi_deliver.c
+++ b/bin/varnishd/cache/cache_esi_deliver.c
@@ -538,14 +538,14 @@ ved_pretend_gzip_bytes(struct req *req, enum vdp_action act, void **priv,
return (ved_bytes(req, ecx, VDP_FLUSH, NULL, 0));
}
-static const struct vdp ved_vdp_pgz = {
+static const struct vdp ved_pretend_gz = {
.name = "PGZ",
.bytes = ved_pretend_gzip_bytes,
.fini = ved_pretend_gzip_fini,
};
/*---------------------------------------------------------------------
- * Include an object in a gzip'ed ESI object delivery
+ * Include a gzip'ed object in a gzip'ed ESI object delivery
*
* This is the interesting case: Deliver all the deflate blocks, stripping
* the "LAST" bit of the last one and padding it, as necessary, to a byte
@@ -564,8 +564,40 @@ struct ved_foo {
uint8_t tailbuf[8];
};
+static int v_matchproto_(vdp_fini_f)
+ved_gzgz_init(struct req *req, void **priv)
+{
+ ssize_t l;
+ const char *p;
+ struct ved_foo *foo;
+
+ CHECK_OBJ_NOTNULL(req, REQ_MAGIC);
+ CAST_OBJ_NOTNULL(foo, *priv, VED_FOO_MAGIC);
+
+ memset(foo->tailbuf, 0xdd, sizeof foo->tailbuf);
+
+ AN(ObjCheckFlag(req->wrk, req->objcore, OF_GZIPED));
+
+ p = ObjGetAttr(req->wrk, req->objcore, OA_GZIPBITS, &l);
+ AN(p);
+ assert(l == 32);
+ foo->start = vbe64dec(p);
+ foo->last = vbe64dec(p + 8);
+ foo->stop = vbe64dec(p + 16);
+ foo->olen = ObjGetLen(req->wrk, req->objcore);
+ assert(foo->start > 0 && foo->start < foo->olen * 8);
+ assert(foo->last > 0 && foo->last < foo->olen * 8);
+ assert(foo->stop > 0 && foo->stop < foo->olen * 8);
+ assert(foo->last >= foo->start);
+ assert(foo->last < foo->stop);
+
+ /* The start bit must be byte aligned. */
+ AZ(foo->start & 7);
+ return (0);
+}
+
static int v_matchproto_(vdp_bytes_f)
-ved_zap_bytes(struct req *req, enum vdp_action act, void **priv,
+ved_gzgz_bytes(struct req *req, enum vdp_action act, void **priv,
const void *ptr, ssize_t len)
{
struct ved_foo *foo;
@@ -706,39 +738,7 @@ ved_zap_bytes(struct req *req, enum vdp_action act, void **priv,
}
static int v_matchproto_(vdp_fini_f)
-ved_zap_init(struct req *req, void **priv)
-{
- ssize_t l;
- const char *p;
- struct ved_foo *foo;
-
- CHECK_OBJ_NOTNULL(req, REQ_MAGIC);
- CAST_OBJ_NOTNULL(foo, *priv, VED_FOO_MAGIC);
-
- memset(foo->tailbuf, 0xdd, sizeof foo->tailbuf);
-
- AN(ObjCheckFlag(req->wrk, req->objcore, OF_GZIPED));
-
- p = ObjGetAttr(req->wrk, req->objcore, OA_GZIPBITS, &l);
- AN(p);
- assert(l == 32);
- foo->start = vbe64dec(p);
- foo->last = vbe64dec(p + 8);
- foo->stop = vbe64dec(p + 16);
- foo->olen = ObjGetLen(req->wrk, req->objcore);
- assert(foo->start > 0 && foo->start < foo->olen * 8);
- assert(foo->last > 0 && foo->last < foo->olen * 8);
- assert(foo->stop > 0 && foo->stop < foo->olen * 8);
- assert(foo->last >= foo->start);
- assert(foo->last < foo->stop);
-
- /* The start bit must be byte aligned. */
- AZ(foo->start & 7);
- return (0);
-}
-
-static int v_matchproto_(vdp_fini_f)
-ved_zap_fini(struct req *req, void **priv)
+ved_gzgz_fini(struct req *req, void **priv)
{
uint32_t icrc;
uint32_t ilen;
@@ -757,11 +757,11 @@ ved_zap_fini(struct req *req, void **priv)
return (0);
}
-static const struct vdp ved_zap = {
- .name = "VZP",
- .init = ved_zap_init,
- .bytes = ved_zap_bytes,
- .fini = ved_zap_fini,
+static const struct vdp ved_gzgz = {
+ .name = "VZZ",
+ .init = ved_gzgz_init,
+ .bytes = ved_gzgz_bytes,
+ .fini = ved_gzgz_fini,
};
/*--------------------------------------------------------------------*/
@@ -814,22 +814,28 @@ ved_deliver(struct req *req, struct boc *boc, int wantbody)
i = ObjCheckFlag(req->wrk, req->objcore, OF_GZIPED);
if (ecx->isgzip && i && !(req->res_mode & RES_ESI)) {
- /* OA_GZIPBITS is not valid until BOS_FINISHED */
+ /* A gzip'ed include which is not ESI processed */
+
+ /* OA_GZIPBITS are not valid until BOS_FINISHED */
if (boc != NULL)
ObjWaitState(req->objcore, BOS_FINISHED);
+
if (req->objcore->flags & OC_F_FAILED) {
/* No way of signalling errors in the middle of
the ESI body. Omit this ESI fragment. */
return;
}
+
INIT_OBJ(foo, VED_FOO_MAGIC);
foo->ecx = ecx;
- (void)VDP_Push(req, &ved_zap, foo);
+ (void)VDP_Push(req, &ved_gzgz, foo);
+
+ } else if (ecx->isgzip && !i) {
+ /* Non-Gzip'ed include in gzip'ed parent */
+ (void)VDP_Push(req, &ved_pretend_gz, ecx);
} else {
- if (ecx->isgzip && !i)
- (void)VDP_Push(req, &ved_vdp_pgz, ecx);
- else
- (void)VDP_Push(req, &ved_ved, ecx);
+ /* Anything else goes straight through */
+ (void)VDP_Push(req, &ved_ved, ecx);
}
(void)VDP_DeliverObj(req);
(void)VDP_bytes(req, VDP_FLUSH, NULL, 0);
More information about the varnish-commit
mailing list