X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;ds=sidebyside;f=httpinput.cpp;h=49501831fa7df2805eead2a172b5dab5d77a3320;hb=162161d07d8db58b69e74847e71012c775c4ecca;hp=51b4f412582bb94d512b074249d5375f94804bfb;hpb=340489a8e732519182ecbc92116e7dfa2997143c;p=cubemap diff --git a/httpinput.cpp b/httpinput.cpp index 51b4f41..4950183 100644 --- a/httpinput.cpp +++ b/httpinput.cpp @@ -4,7 +4,6 @@ #include #include #include -#include #include #include #include @@ -50,6 +49,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 +199,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 +211,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 +247,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 +454,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) {