]> git.sesse.net Git - cubemap/blobdiff - server.cpp
Add missing postcondition comment.
[cubemap] / server.cpp
index 079b629dcaa9b601b31033c3a4c55626711f7662..99a3925e13f0bca65531f82902012408e0b5556c 100644 (file)
@@ -317,6 +317,13 @@ void Server::set_backlog_size(int stream_index, size_t new_size)
        assert(stream_index >= 0 && stream_index < ssize_t(streams.size()));
        streams[stream_index]->set_backlog_size(new_size);
 }
+
+void Server::set_prebuffering_bytes(int stream_index, size_t new_amount)
+{
+       MutexLock lock(&mutex);
+       assert(stream_index >= 0 && stream_index < ssize_t(streams.size()));
+       streams[stream_index]->prebuffering_bytes = new_amount;
+}
        
 void Server::set_encoding(int stream_index, Stream::Encoding encoding)
 {
@@ -488,6 +495,7 @@ sending_header_or_error_again:
                assert(bytes_to_send <= stream->backlog_size);
                if (bytes_to_send < stream->prebuffering_bytes) {
                        // We don't have enough bytes buffered to start this client yet.
+                       // This is postcondition #3.
                        stream->put_client_to_sleep(client);
                        return;
                }
@@ -571,6 +579,18 @@ int Server::parse_request(Client *client)
                return 400;  // Bad request (empty).
        }
 
+       // Parse the headers, for logging purposes.
+       // TODO: Case-insensitivity.
+       multimap<string, string> headers = extract_headers(lines, client->remote_addr);
+       multimap<string, string>::const_iterator referer_it = headers.find("Referer");
+       if (referer_it != headers.end()) {
+               client->referer = referer_it->second;
+       }
+       multimap<string, string>::const_iterator user_agent_it = headers.find("User-Agent");
+       if (user_agent_it != headers.end()) {
+               client->user_agent = user_agent_it->second;
+       }
+
        vector<string> request_tokens = split_tokens(lines[0]);
        if (request_tokens.size() < 2) {
                return 400;  // Bad request (empty).
@@ -598,6 +618,7 @@ int Server::parse_request(Client *client)
        }
 
        client->url = request_tokens[1];
+
        client->stream = stream;
        if (setsockopt(client->sock, SOL_SOCKET, SO_MAX_PACING_RATE, &client->stream->pacing_rate, sizeof(client->stream->pacing_rate)) == -1) {
                if (client->stream->pacing_rate != ~0U) {