[master] 32ad286 Pick up first session step from acceptor socket.

Poul-Henning Kamp phk at FreeBSD.org
Mon Mar 23 14:41:46 CET 2015


commit 32ad28690c2d44eab6b0faa20ca5253372b172ee
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date:   Mon Mar 23 09:38:35 2015 +0000

    Pick up first session step from acceptor socket.
    
    Complain about unrecognized protocols.

diff --git a/bin/varnishd/cache/cache_acceptor.c b/bin/varnishd/cache/cache_acceptor.c
index 94e00cf..0fb6349 100644
--- a/bin/varnishd/cache/cache_acceptor.c
+++ b/bin/varnishd/cache/cache_acceptor.c
@@ -296,8 +296,6 @@ vca_make_session(struct worker *wrk, void *arg)
 	struct wrk_accept *wa;
 	struct sockaddr_storage ss;
 	struct suckaddr *sa;
-	enum sess_step first_step;
-	const char *proto_name;
 	socklen_t sl;
 	char laddr[VTCP_ADDRBUFSIZE];
 	char lport[VTCP_PORTBUFSIZE];
@@ -307,8 +305,6 @@ vca_make_session(struct worker *wrk, void *arg)
 	CHECK_OBJ_NOTNULL(wrk, WORKER_MAGIC);
 	CAST_OBJ_NOTNULL(wa, arg, WRK_ACCEPT_MAGIC);
 	pp = wa->sesspool;
-	first_step = wa->acceptlsock->first_step;
-	proto_name = wa->acceptlsock->proto_name;
 
 	/* Turn accepted socket into a session */
 	AN(wrk->aws->r);
@@ -334,6 +330,7 @@ vca_make_session(struct worker *wrk, void *arg)
 
 	sp->fd = wa->acceptsock;
 	wa->acceptsock = -1;
+	sp->sess_step = wa->acceptlsock->first_step;
 
 	assert(wa->acceptaddrlen <= vsa_suckaddr_len);
 	SES_Reserve_remote_addr(sp, &sa);
@@ -352,7 +349,7 @@ vca_make_session(struct worker *wrk, void *arg)
 
 	VTCP_name(sa, laddr, sizeof laddr, lport, sizeof lport);
 
-	VSL(SLT_Begin, sp->vxid, "sess 0 %s", proto_name);
+	VSL(SLT_Begin, sp->vxid, "sess 0 %s", wa->acceptlsock->proto_name);
 	VSL(SLT_SessOpen, sp->vxid, "%s %s %s %s %s %.6f %d",
 	    raddr, rport, wa->acceptlsock->name, laddr, lport,
 	    sp->t_open, sp->fd);
@@ -368,7 +365,6 @@ vca_make_session(struct worker *wrk, void *arg)
 	}
 	vca_tcp_opt_set(sp->fd, 0);
 
-	xxxassert(first_step == S_STP_H1NEWSESS);
 	/* SES_Proto_Sess() must be sceduled with reserved WS */
 	assert(8 == WS_Reserve(sp->ws, 8));
 	wrk->task.func = SES_Proto_Sess;
diff --git a/bin/varnishd/mgt/mgt_acceptor.c b/bin/varnishd/mgt/mgt_acceptor.c
index a04bca0..43e3430 100644
--- a/bin/varnishd/mgt/mgt_acceptor.c
+++ b/bin/varnishd/mgt/mgt_acceptor.c
@@ -175,15 +175,19 @@ MAC_Arg(const char *arg)
 		ARGV_ERR("Parse error: out of memory\n");
 	if (av[0] != NULL)
 		ARGV_ERR("%s\n", av[0]);
-	if (av[2] != NULL)
-		ARGV_ERR("XXX: not yet\n");
 
 	ALLOC_OBJ(mh, MAC_HELP_MAGIC);
 	AN(mh);
 	mh->name = av[1];
+
+	if (av[2] == NULL || !strcmp(av[2], "HTTP/1")) {
+		mh->first_step = S_STP_H1NEWSESS;
+		mh->proto_name = "HTTP/1";
+	} else {
+		ARGV_ERR("Unknown protocol '%s'\n", av[2]);
+	}
+
 	mh->err = &err;
-	mh->first_step = S_STP_H1NEWSESS;
-	mh->proto_name = "HTTP/1";
 	error = VSS_resolver(av[1], "80", mac_callback, mh, &err);
 	if (mh->good == 0 || err != NULL)
 		ARGV_ERR("Could not bind to address %s: %s\n", av[1], err);
diff --git a/bin/varnishtest/tests/c00003.vtc b/bin/varnishtest/tests/c00003.vtc
index d4ce742..2acb66b 100644
--- a/bin/varnishtest/tests/c00003.vtc
+++ b/bin/varnishtest/tests/c00003.vtc
@@ -6,5 +6,5 @@ varnishtest "Check that we fail to start if any listen address does not work"
 # All bad listen addresses
 err_shell "Could not bind to address 192.0.2.255:0" {${varnishd} -F -a "${bad_ip}:0" -b /// -n ${tmpdir} 2>&1 }
 
-# Just one bad listen addresses
-err_shell "Error: XXX: not yet" {${varnishd} -F -a "127.0.0.1:0,${bad_ip}:0" -b /// -n ${tmpdir} 2>&1 }
+# old style address list
+err_shell "Unknown protocol" {${varnishd} -F -a "127.0.0.1:0,${bad_ip}:0" -b /// -n ${tmpdir} 2>&1 }



More information about the varnish-commit mailing list