From: phk Date: Sun, 15 Jun 2008 13:16:18 +0000 (+0000) Subject: Add http txresponse X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=be1b89573fa8754f03a827559270a8728bbae479;p=varnish Add http txresponse git-svn-id: svn+ssh://projects.linpro.no/svn/varnish/trunk@2681 d4fa192b-c00b-0410-8231-f00ffab90ce4 --- diff --git a/varnish-cache/bin/varnishtest/t000.vtc b/varnish-cache/bin/varnishtest/t000.vtc index 34d1777f..492873ad 100644 --- a/varnish-cache/bin/varnishtest/t000.vtc +++ b/varnish-cache/bin/varnishtest/t000.vtc @@ -5,14 +5,14 @@ server s1 -listen :9080 -repeat 2 { rxreq expect req.url == "/" - txresponse -body "0123456789" + txresp -body "0123456789" } server s1 -start client c1 -connect localhost:9080 { txreq - rxresponse + rxresp expect resp.status == 200 expect resp.length == 10 } diff --git a/varnish-cache/bin/varnishtest/vtc_http.c b/varnish-cache/bin/varnishtest/vtc_http.c index 38388f41..b233bd36 100644 --- a/varnish-cache/bin/varnishtest/vtc_http.c +++ b/varnish-cache/bin/varnishtest/vtc_http.c @@ -109,7 +109,7 @@ cmd_http_rxresp(char **av, void *priv) CAST_OBJ_NOTNULL(hp, priv, HTTP_MAGIC); AN(hp->client); - assert(!strcmp(av[0], "rxresponse")); + assert(!strcmp(av[0], "rxresp")); av++; for(; *av != NULL; av++) { @@ -120,6 +120,84 @@ cmd_http_rxresp(char **av, void *priv) hp->resp = hp->rxbuf; } +/********************************************************************** + * Transmit a response + */ + +static void +cmd_http_txresp(char **av, void *priv) +{ + struct http *hp; + struct vsb *vsb; + const char *proto = "HTTP/1.1"; + const char *status = "200"; + const char *msg = "Ok"; + const char *body = NULL; + int dohdr = 0; + const char *nl = "\r\n"; + int l; + + CAST_OBJ_NOTNULL(hp, priv, HTTP_MAGIC); + AZ(hp->client); + assert(!strcmp(av[0], "txresp")); + av++; + + vsb = vsb_new(NULL, NULL, 0, VSB_AUTOEXTEND); + + for(; *av != NULL; av++) { + if (!strcmp(*av, "-proto")) { + AZ(dohdr); + proto = av[1]; + av++; + continue; + } + if (!strcmp(*av, "-status")) { + AZ(dohdr); + status = av[1]; + av++; + continue; + } + if (!strcmp(*av, "-msg")) { + AZ(dohdr); + msg = av[1]; + av++; + continue; + } + if (!strcmp(*av, "-body")) { + body = av[1]; + av++; + continue; + } + if (!strcmp(*av, "-hdr")) { + if (dohdr == 0) { + vsb_printf(vsb, "%s %s %s%s", + proto, status, msg, nl); + dohdr = 1; + } + vsb_printf(vsb, "%s%s", av[1], nl); + av++; + continue; + } + fprintf(stderr, "Unknown http txreq spec: %s\n", *av); + exit (1); + } + if (dohdr == 0) { + vsb_printf(vsb, "%s %s %s%s", + proto, status, msg, nl); + dohdr = 1; + } + vsb_cat(vsb, nl); + if (body != NULL) { + vsb_cat(vsb, body); + vsb_cat(vsb, nl); + } + vsb_finish(vsb); + AZ(vsb_overflowed(vsb)); + l = write(hp->fd, vsb_data(vsb), vsb_len(vsb)); + assert(l == vsb_len(vsb)); + vsb_delete(vsb); +} + /********************************************************************** * Receive a request */ @@ -217,8 +295,8 @@ cmd_http_txreq(char **av, void *priv) static struct cmds http_cmds[] = { { "txreq", cmd_http_txreq }, { "rxreq", cmd_http_rxreq }, - { "txresponse", cmd_dump }, - { "rxresponse", cmd_http_rxresp }, + { "txresp", cmd_http_txresp }, + { "rxresp", cmd_http_rxresp }, { "expect", cmd_dump }, { NULL, NULL } };