Commit 989790e7 authored by Max Kellermann's avatar Max Kellermann

client/Response: add method WriteBinary()

Move code from read_stream_art().
parent 831bc711
...@@ -56,6 +56,14 @@ Response::Format(const char *fmt, ...) noexcept ...@@ -56,6 +56,14 @@ Response::Format(const char *fmt, ...) noexcept
return success; return success;
} }
bool
Response::WriteBinary(ConstBuffer<void> payload) noexcept
{
return Format("binary: %zu\n", payload.size) &&
Write(payload.data, payload.size) &&
Write("\n");
}
void void
Response::Error(enum ack code, const char *msg) noexcept Response::Error(enum ack code, const char *msg) noexcept
{ {
......
...@@ -26,6 +26,7 @@ ...@@ -26,6 +26,7 @@
#include <stddef.h> #include <stddef.h>
#include <stdarg.h> #include <stdarg.h>
template<typename T> struct ConstBuffer;
class Client; class Client;
class TagMask; class TagMask;
...@@ -76,6 +77,14 @@ public: ...@@ -76,6 +77,14 @@ public:
bool FormatV(const char *fmt, va_list args) noexcept; bool FormatV(const char *fmt, va_list args) noexcept;
bool Format(const char *fmt, ...) noexcept; bool Format(const char *fmt, ...) noexcept;
/**
* Write a binary chunk; this writes the "binary" line, the
* given chunk and the trailing newline.
*
* @return true on success
*/
bool WriteBinary(ConstBuffer<void> payload) noexcept;
void Error(enum ack code, const char *msg) noexcept; void Error(enum ack code, const char *msg) noexcept;
void FormatError(enum ack code, const char *fmt, ...) noexcept; void FormatError(enum ack code, const char *fmt, ...) noexcept;
}; };
......
...@@ -296,14 +296,8 @@ read_stream_art(Response &r, const char *uri, size_t offset) ...@@ -296,14 +296,8 @@ read_stream_art(Response &r, const char *uri, size_t offset)
read_size = is->Read(lock, &buffer, CHUNK_SIZE); read_size = is->Read(lock, &buffer, CHUNK_SIZE);
} }
r.Format("size: %" PRIoffset "\n" r.Format("size: %" PRIoffset "\n", art_file_size);
"binary: %u\n", r.WriteBinary({buffer, read_size});
art_file_size,
read_size
);
r.Write(buffer, read_size);
r.Write("\n");
return CommandResult::OK; return CommandResult::OK;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment