client/Response: add method WriteBinary()

Move code from read_stream_art().
This commit is contained in:
Max Kellermann 2019-08-12 14:17:35 +02:00
parent 831bc711ca
commit 989790e7f1
3 changed files with 19 additions and 8 deletions

View File

@ -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
{ {

View File

@ -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:
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;
}; };

View File

@ -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;
} }