From 1d285bcbfd1aa3f7911cfb98a947a37f68154428 Mon Sep 17 00:00:00 2001 From: "Steinar H. Gunderson" Date: Mon, 9 Apr 2018 20:57:15 +0200 Subject: [PATCH] Capitalize HTTP header names after dashes. 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 | 12 ++++++------ stream.cpp | 4 ++-- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/server.cpp b/server.cpp index 2f55589..40f3b48 100644 --- a/server.cpp +++ b/server.cpp @@ -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; diff --git a/stream.cpp b/stream.cpp index 07d6ae9..7ea8a95 100644 --- a/stream.cpp +++ b/stream.cpp @@ -458,9 +458,9 @@ shared_ptr 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); -- 2.39.2