+ vector<string> lines = split_lines(client->request);
+ if (lines.empty()) {
+ return 400; // Bad request (empty).
+ }
+
+ vector<string> request_tokens = split_tokens(lines[0]);
+ if (request_tokens.size() < 2) {
+ return 400; // Bad request (empty).
+ }
+ if (request_tokens[0] != "GET") {
+ return 400; // Should maybe be 405 instead?
+ }
+ if (streams.count(request_tokens[1]) == 0) {
+ return 404; // Not found.
+ }
+
+ client->stream_id = request_tokens[1];
+ client->stream = find_stream(client->stream_id);
+ if (client->stream->mark_pool != NULL) {
+ client->fwmark = client->stream->mark_pool->get_mark();
+ } else {
+ client->fwmark = 0; // No mark.
+ }
+ if (setsockopt(client->sock, SOL_SOCKET, SO_MARK, &client->fwmark, sizeof(client->fwmark)) == -1) {
+ if (client->fwmark != 0) {
+ perror("setsockopt(SO_MARK)");
+ }
+ }