X-Git-Url: https://git.sesse.net/?p=cubemap;a=blobdiff_plain;f=stream.cpp;h=b8604012f628fcce938e5861908af82436e1e0d6;hp=17b5949172a531cae5a37eb4f8948dbf177bb4a9;hb=58d50f2d9710403ea7bddf0fb290a90777c8dd68;hpb=1e15bf9054e65adfce268578f4e474c980ef6443 diff --git a/stream.cpp b/stream.cpp index 17b5949..b860401 100644 --- a/stream.cpp +++ b/stream.cpp @@ -15,8 +15,8 @@ using namespace std; -Stream::Stream(const string &stream_id, size_t backlog_size, Encoding encoding) - : stream_id(stream_id), +Stream::Stream(const string &url, size_t backlog_size, Encoding encoding) + : url(url), encoding(encoding), data_fd(make_tempfile("")), backlog_size(backlog_size), @@ -36,7 +36,7 @@ Stream::~Stream() } Stream::Stream(const StreamProto &serialized, int data_fd) - : stream_id(serialized.stream_id()), + : url(serialized.url()), http_header(serialized.http_header()), stream_header(serialized.stream_header()), encoding(Stream::STREAM_ENCODING_RAW), // Will be changed later. @@ -71,7 +71,7 @@ StreamProto Stream::serialize() serialized.add_data_fds(data_fd); serialized.set_backlog_size(backlog_size); serialized.set_bytes_received(bytes_received); - serialized.set_stream_id(stream_id); + serialized.set_url(url); data_fd = -1; return serialized; } @@ -206,20 +206,24 @@ void Stream::add_data_deferred(const char *data, size_t bytes) hdr.flags = htonl(0); iovec iov; - iov.iov_base = new char[sizeof(hdr)]; + iov.iov_base = new char[bytes + sizeof(hdr)]; + iov.iov_len = bytes + sizeof(hdr); + memcpy(iov.iov_base, &hdr, sizeof(hdr)); - iov.iov_len = sizeof(hdr); + memcpy(reinterpret_cast(iov.iov_base) + sizeof(hdr), data, bytes); + + queued_data.push_back(iov); + } else if (encoding == Stream::STREAM_ENCODING_RAW) { + // Just add the data itself. + iovec iov; + iov.iov_base = new char[bytes]; + memcpy(iov.iov_base, data, bytes); + iov.iov_len = bytes; + queued_data.push_back(iov); } else { - assert(encoding == Stream::STREAM_ENCODING_RAW); + assert(false); } - - // Add the data itself. - iovec iov; - iov.iov_base = new char[bytes]; - memcpy(iov.iov_base, data, bytes); - iov.iov_len = bytes; - queued_data.push_back(iov); } void Stream::process_queued_data()