X-Git-Url: https://git.sesse.net/?p=cubemap;a=blobdiff_plain;f=server.cpp;h=7acf501236e1ee2db9cac22db0b72a5ddf8ecf69;hp=1f5477e9baa92066bbf2d8736e27901d32d2c9eb;hb=9ec4c94b5d2071b1eacfe09f1cf99824bb8e3868;hpb=dfa828027e66f823e1cd8e444dfb96492e296b42 diff --git a/server.cpp b/server.cpp index 1f5477e..7acf501 100644 --- a/server.cpp +++ b/server.cpp @@ -384,7 +384,15 @@ sending_header_or_error_again: // but we'll start sending immediately as we get data. // This is postcondition #3. client->state = Client::SENDING_DATA; - client->stream_pos = client->stream->bytes_received; + if (client->stream_pos == size_t(-2)) { + client->stream_pos = std::min( + client->stream->bytes_received - client->stream->backlog_size, + 0); + } else { + // client->stream_pos should be -1, but it might not be, + // if we have clients from an older version. + client->stream_pos = client->stream->bytes_received; + } client->stream->put_client_to_sleep(client); return; } @@ -476,7 +484,15 @@ int Server::parse_request(Client *client) return 400; // Should maybe be 405 instead? } - map::const_iterator url_map_it = url_map.find(request_tokens[1]); + string url = request_tokens[1]; + if (url.find("?backlog") == url.size() - 8) { + client->stream_pos = -2; + url = url.substr(0, url.size() - 8); + } else { + client->stream_pos = -1; + } + + map::const_iterator url_map_it = url_map.find(url); if (url_map_it == url_map.end()) { return 404; // Not found. }