Capitalize HTTP header names after dashes.
authorSteinar H. Gunderson <sgunderson@bigfoot.com>
Mon, 9 Apr 2018 18:57:15 +0000 (20:57 +0200)
committerSteinar H. Gunderson <sgunderson@bigfoot.com>
Mon, 9 Apr 2018 18:58:15 +0000 (20:58 +0200)
In particular, writing Content-Length instead of Content-length fixes a
problem where VLC's HTTP client would hang forever on our responses.
This makes HLS generally work in VLC, although it still starts playing
from the start instead of from the end.

server.cpp
stream.cpp

index 2f55589..40f3b48 100644 (file)
@@ -891,7 +891,7 @@ void Server::skip_lost_data(Client *client)
                if (!client->close_after_response) {
                        assert(client->stream_pos_end != Client::STREAM_POS_NO_END);
 
-                       // We've already sent a Content-length, so we can't just skip data.
+                       // We've already sent a Content-Length, so we can't just skip data.
                        // Close the connection immediately and hope the other side
                        // is able to figure out that there was an error and it needs to skip.
                        client->close_after_response = true;
@@ -1067,11 +1067,11 @@ void Server::construct_stream_header(Client *client)
        string response = stream->http_header;
        if (client->stream_pos == Client::STREAM_POS_HEADER_ONLY) {
                char buf[64];
-               snprintf(buf, sizeof(buf), "Content-length: %zu\r\n", stream->stream_header.size());
+               snprintf(buf, sizeof(buf), "Content-Length: %zu\r\n", stream->stream_header.size());
                response.append(buf);
        } else if (client->stream_pos_end != Client::STREAM_POS_NO_END) {
                char buf[64];
-               snprintf(buf, sizeof(buf), "Content-length: %" PRIu64 "\r\n", client->stream_pos_end - client->stream_pos);
+               snprintf(buf, sizeof(buf), "Content-Length: %" PRIu64 "\r\n", client->stream_pos_end - client->stream_pos);
                response.append(buf);
        }
        if (client->http_11) {
@@ -1091,7 +1091,7 @@ void Server::construct_stream_header(Client *client)
        if (stream->encoding == Stream::STREAM_ENCODING_RAW) {
                response.append("\r\n");
        } else if (stream->encoding == Stream::STREAM_ENCODING_METACUBE) {
-               response.append("Content-encoding: metacube\r\n\r\n");
+               response.append("Content-Encoding: metacube\r\n\r\n");
                if (!stream->stream_header.empty()) {
                        metacube2_block_header hdr;
                        memcpy(hdr.sync, METACUBE2_SYNC, sizeof(hdr.sync));
@@ -1125,11 +1125,11 @@ void Server::construct_error(Client *client, int error_code)
        char error[256];
        if (client->http_11 && client->close_after_response) {
                snprintf(error, sizeof(error),
-                       "HTTP/1.1 %d Error\r\nContent-type: text/plain\r\nConnection: close\r\n\r\nSomething went wrong. Sorry.\r\n",
+                       "HTTP/1.1 %d Error\r\nContent-Type: text/plain\r\nConnection: close\r\n\r\nSomething went wrong. Sorry.\r\n",
                        error_code);
        } else {
                snprintf(error, sizeof(error),
-                       "HTTP/1.%d %d Error\r\nContent-type: text/plain\r\nContent-length: 30\r\n\r\nSomething went wrong. Sorry.\r\n",
+                       "HTTP/1.%d %d Error\r\nContent-Type: text/plain\r\nContent-Length: 30\r\n\r\nSomething went wrong. Sorry.\r\n",
                        client->http_11, error_code);
        }
        client->header_or_short_response_holder = error;
index 07d6ae9..7ea8a95 100644 (file)
@@ -458,9 +458,9 @@ shared_ptr<const string> Stream::generate_hls_playlist(bool http_11, bool close_
                assert(close_after_response);
                response = "HTTP/1.0 200 OK\r\n";
        }
-       snprintf(buf, sizeof(buf), "Content-length: %zu\r\n", playlist.size());
+       snprintf(buf, sizeof(buf), "Content-Length: %zu\r\n", playlist.size());
        response.append(buf);
-       response.append("Content-type: application/x-mpegURL\r\n");
+       response.append("Content-Type: application/x-mpegURL\r\n");
        if (!allow_origin.empty()) {
                response.append("Access-Control-Allow-Origin: ");
                response.append(allow_origin);