[master] 12fca0581 varnishncsa: Pass the -E option downstream

Dridi Boukelmoune dridi.boukelmoune at gmail.com
Mon Jan 18 16:06:08 UTC 2021


commit 12fca0581db1acf30de273c6b00ccfb5708bb0ba
Author: Dridi Boukelmoune <dridi.boukelmoune at gmail.com>
Date:   Mon Nov 23 14:53:45 2020 +0100

    varnishncsa: Pass the -E option downstream
    
    And remove [bcE]_opt handling entirely out of varnishncsa, relying on
    libvarnishapi to do this filtering. As such we can consolidate the tag
    management without backend marker fiddling.

diff --git a/bin/varnishncsa/varnishncsa.c b/bin/varnishncsa/varnishncsa.c
index 7cfa347a0..c492f770d 100644
--- a/bin/varnishncsa/varnishncsa.c
+++ b/bin/varnishncsa/varnishncsa.c
@@ -140,9 +140,6 @@ VTAILQ_HEAD(vsl_watch_head, vsl_watch);
 static struct ctx {
 	/* Options */
 	int			a_opt;
-	int			b_opt;
-	int			c_opt;
-	int			E_opt;
 	char			*w_arg;
 
 	FILE			*fo;
@@ -886,30 +883,20 @@ dispatch_f(struct VSL_data *vsl, struct VSL_transaction * const pt[],
 	enum VSL_tag_e tag;
 	const char *b, *e, *p;
 	struct watch *w;
-	int i, skip, be_mark;
+	int i, skip;
 
 	(void)vsl;
 	(void)priv;
 
-#define BACKEND_MARKER (INT_MAX / 2 + 1)
-	assert(BACKEND_MARKER >= VSL_t__MAX);
-
 	for (t = pt[0]; t != NULL; t = *++pt) {
 		CTX.gen++;
 
-		/* Consider client requests only if in client mode.
-		   Consider backend requests only if in backend mode. */
-		if (t->type == VSL_t_req && CTX.c_opt) {
+		if (t->type == VSL_t_req) {
 			CTX.side = "c";
-			be_mark = 0;
-		} else if (t->type == VSL_t_bereq && CTX.b_opt) {
+		} else if (t->type == VSL_t_bereq) {
 			CTX.side = "b";
-			be_mark = BACKEND_MARKER;
 		} else
-			continue;
-		if (t->reason == VSL_r_esi && !CTX.E_opt)
-			/* Skip ESI requests */
-			continue;
+			WRONG("unexpected");
 		CTX.hitmiss = "-";
 		CTX.handling = "-";
 		CTX.vxid = t->vxid;
@@ -924,8 +911,7 @@ dispatch_f(struct VSL_data *vsl, struct VSL_transaction * const pt[],
 			while (e > b && e[-1] == '\0')
 				e--;
 
-			switch (tag + be_mark) {
-			case SLT_HttpGarbage + BACKEND_MARKER:
+			switch (tag) {
 			case SLT_HttpGarbage:
 				skip = 1;
 				break;
@@ -935,7 +921,7 @@ dispatch_f(struct VSL_data *vsl, struct VSL_transaction * const pt[],
 				    4, &CTX.frag[F_O],
 				    0, NULL);
 				break;
-			case (SLT_BackendOpen + BACKEND_MARKER):
+			case SLT_BackendOpen:
 				frag_fields(1, b, e,
 				    3, &CTX.frag[F_h],
 				    0, NULL);
@@ -945,11 +931,11 @@ dispatch_f(struct VSL_data *vsl, struct VSL_transaction * const pt[],
 				    1, &CTX.frag[F_h],
 				    0, NULL);
 				break;
-			case (SLT_BereqMethod + BACKEND_MARKER):
+			case SLT_BereqMethod:
 			case SLT_ReqMethod:
 				frag_line(0, b, e, &CTX.frag[F_m]);
 				break;
-			case (SLT_BereqURL + BACKEND_MARKER):
+			case SLT_BereqURL:
 			case SLT_ReqURL:
 				p = memchr(b, '?', e - b);
 				if (p == NULL)
@@ -957,15 +943,15 @@ dispatch_f(struct VSL_data *vsl, struct VSL_transaction * const pt[],
 				frag_line(0, b, p, &CTX.frag[F_U]);
 				frag_line(0, p, e, &CTX.frag[F_q]);
 				break;
-			case (SLT_BereqProtocol + BACKEND_MARKER):
+			case SLT_BereqProtocol:
 			case SLT_ReqProtocol:
 				frag_line(0, b, e, &CTX.frag[F_H]);
 				break;
-			case (SLT_BerespStatus + BACKEND_MARKER):
+			case SLT_BerespStatus:
 			case SLT_RespStatus:
 				frag_line(1, b, e, &CTX.frag[F_s]);
 				break;
-			case (SLT_BereqAcct + BACKEND_MARKER):
+			case SLT_BereqAcct:
 			case SLT_ReqAcct:
 				frag_fields(0, b, e,
 				    3, &CTX.frag[F_I],
@@ -973,7 +959,6 @@ dispatch_f(struct VSL_data *vsl, struct VSL_transaction * const pt[],
 				    6, &CTX.frag[F_O],
 				    0, NULL);
 				break;
-			case (SLT_Timestamp + BACKEND_MARKER):
 			case SLT_Timestamp:
 #define ISPREFIX(a, b, c, d)	isprefix(a, strlen(a), b, c, d)
 				if (ISPREFIX("Start:", b, e, &p)) {
@@ -993,8 +978,9 @@ dispatch_f(struct VSL_data *vsl, struct VSL_transaction * const pt[],
 					    &CTX.frag[F_ttfb], 0, NULL);
 				}
 				break;
-			case (SLT_BereqHeader + BACKEND_MARKER):
+			case SLT_BereqHeader:
 			case SLT_ReqHeader:
+				process_hdr(&CTX.watch_reqhdr, b, e);
 				if (ISPREFIX("Authorization:", b, e, &p) &&
 				    ISPREFIX("basic ", p, e, &p))
 					frag_line(0, p, e,
@@ -1004,6 +990,10 @@ dispatch_f(struct VSL_data *vsl, struct VSL_transaction * const pt[],
 					    &CTX.frag[F_host]);
 #undef ISPREFIX
 				break;
+			case SLT_BerespHeader:
+			case SLT_RespHeader:
+				process_hdr(&CTX.watch_resphdr, b, e);
+				break;
 			case SLT_VCL_call:
 				if (!strcasecmp(b, "recv")) {
 					CTX.hitmiss = "-";
@@ -1032,7 +1022,6 @@ dispatch_f(struct VSL_data *vsl, struct VSL_transaction * const pt[],
 				} else if (!strcasecmp(b, "restart"))
 					skip = 1;
 				break;
-			case (SLT_VCL_Log + BACKEND_MARKER):
 			case SLT_VCL_Log:
 				VTAILQ_FOREACH(w, &CTX.watch_vcl_log, list) {
 					CHECK_OBJ_NOTNULL(w, WATCH_MAGIC);
@@ -1047,13 +1036,6 @@ dispatch_f(struct VSL_data *vsl, struct VSL_transaction * const pt[],
 				break;
 			}
 
-			if ((tag == SLT_ReqHeader && CTX.c_opt) ||
-			    (tag == SLT_BereqHeader && CTX.b_opt))
-				process_hdr(&CTX.watch_reqhdr, b, e);
-			else if ((tag == SLT_RespHeader && CTX.c_opt) ||
-			    (tag == SLT_BerespHeader && CTX.b_opt))
-				process_hdr(&CTX.watch_resphdr, b, e);
-
 			process_vsl(&CTX.watch_vsl, tag, b, e);
 		}
 		if (skip)
@@ -1098,6 +1080,7 @@ main(int argc, char * const *argv)
 {
 	signed char opt;
 	char *format = NULL;
+	int mode_opt = 0;
 
 	vut = VUT_InitProg(argc, argv, &vopt_spec);
 	AN(vut);
@@ -1119,17 +1102,11 @@ main(int argc, char * const *argv)
 			/* Append to file */
 			CTX.a_opt = 1;
 			break;
-		case 'b':
-			/* backend mode */
-			CTX.b_opt = 1;
-			break;
-		case 'c':
-			/* client mode */
-			CTX.c_opt = 1;
-			break;
-		case 'E':
-			/* show ESI */
-			CTX.E_opt = 1;
+		case 'b': /* backend mode */
+		case 'c': /* client mode */
+		case 'E': /* show ESI */
+			AN(VUT_Arg(vut, opt, NULL));
+			mode_opt = 1;
 			break;
 		case 'F':
 			if (format != NULL)
@@ -1156,19 +1133,11 @@ main(int argc, char * const *argv)
 				VUT_Usage(vut, &vopt_spec, 1);
 		}
 	}
-	/* default is client mode: */
-	if (!CTX.b_opt || CTX.E_opt)
-		CTX.c_opt = 1;
 
-	if (CTX.b_opt)
-		AN(VUT_Arg(vut, 'b', NULL));
-
-	if (CTX.c_opt)
+	/* default is client mode: */
+	if (!mode_opt)
 		AN(VUT_Arg(vut, 'c', NULL));
 
-	if (CTX.E_opt)
-		AN(VUT_Arg(vut, 'E', NULL));
-
 	if (optind != argc)
 		VUT_Usage(vut, &vopt_spec, 1);
 


More information about the varnish-commit mailing list