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)
{
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;
}
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).
}
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) {