]> git.sesse.net Git - cubemap/blobdiff - httpinput.cpp
Support Metacube _output_. Required splitting HTTP headers from stream headers, which...
[cubemap] / httpinput.cpp
index 51b4f412582bb94d512b074249d5375f94804bfb..457c2160b241709b042ea473ec3a0c8803f3581e 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()
@@ -200,10 +207,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 +243,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 +450,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) {