]> git.sesse.net Git - cubemap/blobdiff - server.cpp
Send backlog file descriptors around instead of going through the protobuf. Much...
[cubemap] / server.cpp
index e4ea647c64d05555505f3f18358f4e9b642d5370..640f10a094b717e864a6d9f8774d47bcf7fe74d7 100644 (file)
@@ -202,10 +202,10 @@ void Server::add_stream(const string &stream_id, size_t backlog_size, Stream::En
        streams.insert(make_pair(stream_id, new Stream(stream_id, backlog_size, encoding)));
 }
 
-void Server::add_stream_from_serialized(const StreamProto &stream)
+void Server::add_stream_from_serialized(const StreamProto &stream, int data_fd)
 {
        MutexLock lock(&mutex);
-       streams.insert(make_pair(stream.stream_id(), new Stream(stream)));
+       streams.insert(make_pair(stream.stream_id(), new Stream(stream, data_fd)));
 }
        
 void Server::set_backlog_size(const string &stream_id, size_t new_size)
@@ -470,16 +470,18 @@ void Server::construct_header(Client *client)
                        "\r\n" +
                        stream->stream_header;
        } else if (stream->encoding == Stream::STREAM_ENCODING_METACUBE) {
-               metacube_block_header hdr;
-               memcpy(hdr.sync, METACUBE_SYNC, sizeof(hdr.sync));
-               hdr.size = htonl(stream->stream_header.size());
-               hdr.flags = htonl(METACUBE_FLAGS_HEADER);
-
                client->header_or_error = stream->http_header +
                        "Content-encoding: metacube\r\n" +
-                       "\r\n" +
-                       string(reinterpret_cast<char *>(&hdr), sizeof(hdr)) +
-                       stream->stream_header;
+                       "\r\n";
+               if (!stream->stream_header.empty()) {
+                       metacube_block_header hdr;
+                       memcpy(hdr.sync, METACUBE_SYNC, sizeof(hdr.sync));
+                       hdr.size = htonl(stream->stream_header.size());
+                       hdr.flags = htonl(METACUBE_FLAGS_HEADER);
+                       client->header_or_error.append(
+                               string(reinterpret_cast<char *>(&hdr), sizeof(hdr)));
+               }
+               client->header_or_error.append(stream->stream_header);
        } else {
                assert(false);
        }