X-Git-Url: https://git.sesse.net/?p=cubemap;a=blobdiff_plain;f=httpinput.cpp;h=3bee5d675fde7385fc61307ac1ad14d8648f9edc;hp=6de67b251cc4b132c75146b7a2927dda541205f3;hb=4a33511c426ae90abb261f09fda1e31e0c30ca16;hpb=9ec4c94b5d2071b1eacfe09f1cf99824bb8e3868 diff --git a/httpinput.cpp b/httpinput.cpp index 6de67b2..3bee5d6 100644 --- a/httpinput.cpp +++ b/httpinput.cpp @@ -352,7 +352,7 @@ void HTTPInput::do_work() char *ptr = static_cast( memmem(response.data(), response.size(), "\r\n\r\n", 4)); assert(ptr != NULL); - extra_data = string(ptr, &response[0] + response.size()); + extra_data = string(ptr + 4, &response[0] + response.size()); response.resize(ptr - response.data()); } @@ -458,6 +458,11 @@ void HTTPInput::process_data(char *ptr, size_t bytes) uint32_t size = ntohl(hdr->size); uint32_t flags = ntohl(hdr->flags); + if (size > 262144) { + log(WARNING, "[%s] Metacube block of %d bytes (flags=%x); corrupted header?", + url.c_str(), size, flags); + } + // See if we have the entire block. If not, wait for more data. if (pending_data.size() < sizeof(metacube_block_header) + size) { return; @@ -470,9 +475,15 @@ void HTTPInput::process_data(char *ptr, size_t bytes) for (size_t i = 0; i < stream_indices.size(); ++i) { servers->set_header(stream_indices[i], http_header, header); } - } else { + } else { + StreamStartSuitability suitable_for_stream_start; + if (flags & METACUBE_FLAGS_NOT_SUITABLE_FOR_STREAM_START) { + suitable_for_stream_start = NOT_SUITABLE_FOR_STREAM_START; + } else { + suitable_for_stream_start = SUITABLE_FOR_STREAM_START; + } for (size_t i = 0; i < stream_indices.size(); ++i) { - servers->add_data(stream_indices[i], inner_data, size); + servers->add_data(stream_indices[i], inner_data, size, suitable_for_stream_start); } }