From 3a397457840454bc810b621cbf9ce16007223c32 Mon Sep 17 00:00:00 2001 From: Tatsuhiro Tsujikawa Date: Thu, 7 Jun 2012 02:29:00 +0900 Subject: [PATCH] Add via header field to SPDY upstream response --- examples/shrpx_spdy_upstream.cc | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/examples/shrpx_spdy_upstream.cc b/examples/shrpx_spdy_upstream.cc index 735d6290..7af407e0 100644 --- a/examples/shrpx_spdy_upstream.cc +++ b/examples/shrpx_spdy_upstream.cc @@ -490,8 +490,14 @@ int SpdyUpstream::on_downstream_header_complete(Downstream *downstream) LOG(INFO) << "Downstream on_downstream_header_complete"; } size_t nheader = downstream->get_response_headers().size(); - const char **nv = new const char*[nheader * 2 + 4 + 1]; + // 6 means :status, :version and possible via header field. + const char **nv = new const char*[nheader * 2 + 6 + 1]; size_t hdidx = 0; + std::string via_value; + nv[hdidx++] = ":status"; + nv[hdidx++] = http::get_status_string(downstream->get_response_http_status()); + nv[hdidx++] = ":version"; + nv[hdidx++] = "HTTP/1.1"; for(Headers::const_iterator i = downstream->get_response_headers().begin(); i != downstream->get_response_headers().end(); ++i) { if(util::strieq((*i).first.c_str(), "transfer-encoding") || @@ -499,15 +505,20 @@ int SpdyUpstream::on_downstream_header_complete(Downstream *downstream) util::strieq((*i).first.c_str(), "connection") || util:: strieq((*i).first.c_str(), "proxy-connection")) { // These are ignored + } else if(util::strieq((*i).first.c_str(), "via")) { + via_value = (*i).second; } else { nv[hdidx++] = (*i).first.c_str(); nv[hdidx++] = (*i).second.c_str(); } } - nv[hdidx++] = ":status"; - nv[hdidx++] = http::get_status_string(downstream->get_response_http_status()); - nv[hdidx++] = ":version"; - nv[hdidx++] = "HTTP/1.1"; + if(!via_value.empty()) { + via_value += ", "; + } + via_value += http::create_via_header_value(downstream->get_response_major(), + downstream->get_response_minor()); + nv[hdidx++] = "via"; + nv[hdidx++] = via_value.c_str(); nv[hdidx++] = 0; if(ENABLE_LOG) { std::stringstream ss;