]> git.sesse.net Git - cubemap/blobdiff - httpinput.cpp
Set Connection: close in outgoing HTTP headers.
[cubemap] / httpinput.cpp
index 51b4f412582bb94d512b074249d5375f94804bfb..da672edc3689a14cb4707f29f060d9db73183bad 100644 (file)
@@ -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<string, string>::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) {