X-Git-Url: https://git.sesse.net/?p=cubemap;a=blobdiff_plain;f=httpinput.cpp;h=da672edc3689a14cb4707f29f060d9db73183bad;hp=51b4f412582bb94d512b074249d5375f94804bfb;hb=b9f87872a42f32818805f3c2520555f2d6e2928d;hpb=340489a8e732519182ecbc92116e7dfa2997143c diff --git a/httpinput.cpp b/httpinput.cpp index 51b4f41..da672ed 100644 --- a/httpinput.cpp +++ b/httpinput.cpp @@ -50,6 +50,13 @@ HTTPInput::HTTPInput(const InputProto &serialized) string protocol; parse_url(url, &protocol, &host, &port, &path); // Don't care if it fails. + + // Older versions stored the extra \r\n in the HTTP header. + // Strip it if we find it. + if (http_header.size() >= 4 && + memcmp(http_header.data() + http_header.size() - 4, "\r\n\r\n", 4) == 0) { + http_header.resize(http_header.size() - 2); + } } void HTTPInput::close_socket() @@ -193,6 +200,11 @@ bool HTTPInput::parse_response(const std::string &request) } } + // Set “Connection: close”. + // TODO: Make case-insensitive. + parameters.erase("Connection"); + parameters.insert(make_pair("Connection", "close")); + // Construct the new HTTP header. http_header = "HTTP/1.0 200 OK\r\n"; for (multimap::iterator it = parameters.begin(); @@ -200,10 +212,9 @@ bool HTTPInput::parse_response(const std::string &request) ++it) { http_header.append(it->first + ": " + it->second + "\r\n"); } - http_header.append("\r\n"); for (size_t i = 0; i < stream_ids.size(); ++i) { - servers->set_header(stream_ids[i], http_header); + servers->set_header(stream_ids[i], http_header, ""); } return true; @@ -237,7 +248,7 @@ void HTTPInput::do_work() response.clear(); pending_data.clear(); for (size_t i = 0; i < stream_ids.size(); ++i) { - servers->set_header(stream_ids[i], ""); + servers->set_header(stream_ids[i], "", ""); } { @@ -444,7 +455,7 @@ void HTTPInput::process_data(char *ptr, size_t bytes) if (flags & METACUBE_FLAGS_HEADER) { string header(inner_data, inner_data + size); for (size_t i = 0; i < stream_ids.size(); ++i) { - servers->set_header(stream_ids[i], http_header + header); + servers->set_header(stream_ids[i], http_header, header); } } else { for (size_t i = 0; i < stream_ids.size(); ++i) {