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.
if (!client->close_after_response) {
assert(client->stream_pos_end != Client::STREAM_POS_NO_END);
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;
// 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;
string response = stream->http_header;
if (client->stream_pos == Client::STREAM_POS_HEADER_ONLY) {
char buf[64];
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];
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) {
response.append(buf);
}
if (client->http_11) {
if (stream->encoding == Stream::STREAM_ENCODING_RAW) {
response.append("\r\n");
} else if (stream->encoding == Stream::STREAM_ENCODING_METACUBE) {
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));
if (!stream->stream_header.empty()) {
metacube2_block_header hdr;
memcpy(hdr.sync, METACUBE2_SYNC, sizeof(hdr.sync));
char error[256];
if (client->http_11 && client->close_after_response) {
snprintf(error, sizeof(error),
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),
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;
client->http_11, error_code);
}
client->header_or_short_response_holder = error;
assert(close_after_response);
response = "HTTP/1.0 200 OK\r\n";
}
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("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);
if (!allow_origin.empty()) {
response.append("Access-Control-Allow-Origin: ");
response.append(allow_origin);