mirror of
https://github.com/matrix-construct/construct
synced 2024-11-16 15:00:51 +01:00
modules/media: Add error logging; various cleanup.
This commit is contained in:
parent
a13c11c93c
commit
bc79fabfef
4 changed files with 48 additions and 16 deletions
|
@ -127,7 +127,20 @@ get__download_local(client &client,
|
|||
sent += write_all(*client.sock, block);
|
||||
});
|
||||
|
||||
assert(sent == file_size);
|
||||
if(unlikely(read != file_size)) log::error
|
||||
{
|
||||
media_log, "File %s/%s [%s] size mismatch: expected %zu got %zu",
|
||||
server,
|
||||
file,
|
||||
string_view{room.room_id},
|
||||
file_size,
|
||||
read
|
||||
};
|
||||
|
||||
// Have to kill client here after failing content length expectation.
|
||||
if(unlikely(read != file_size))
|
||||
client.close(net::dc::RST, net::close_ignore);
|
||||
|
||||
return {};
|
||||
}
|
||||
|
||||
|
|
|
@ -16,9 +16,15 @@ IRCD_MODULE
|
|||
"11.7 :Content respository"
|
||||
};
|
||||
|
||||
decltype(media_log)
|
||||
media_log
|
||||
{
|
||||
"media"
|
||||
};
|
||||
|
||||
size_t
|
||||
write_file(const m::room &room,
|
||||
const string_view &content,
|
||||
const const_buffer &content,
|
||||
const string_view &content_type)
|
||||
{
|
||||
//TODO: TXN
|
||||
|
@ -95,7 +101,7 @@ write_file(const m::room &room,
|
|||
|
||||
size_t
|
||||
read_each_block(const m::room &room,
|
||||
const std::function<void (const string_view &)> &closure)
|
||||
const std::function<void (const const_buffer &)> &closure)
|
||||
{
|
||||
const auto lpath
|
||||
{
|
||||
|
@ -118,7 +124,7 @@ read_each_block(const m::room &room,
|
|||
};
|
||||
|
||||
size_t ret{0};
|
||||
m::room::messages it{room, 0};
|
||||
m::room::messages it{room, 1};
|
||||
for(; bool(it); ++it)
|
||||
{
|
||||
const m::event &event{*it};
|
||||
|
@ -140,7 +146,7 @@ read_each_block(const m::room &room,
|
|||
pathbuf, pathlen + copy(pathpart, hash)
|
||||
};
|
||||
|
||||
const string_view &block
|
||||
const const_buffer &block
|
||||
{
|
||||
fs::read(path, buf)
|
||||
};
|
||||
|
|
|
@ -10,6 +10,9 @@
|
|||
|
||||
using namespace ircd;
|
||||
|
||||
extern mapi::header IRCD_MODULE;
|
||||
extern log::log media_log;
|
||||
|
||||
extern "C" m::room::id
|
||||
file_room_id(m::room::id::buf &out,
|
||||
const string_view &server,
|
||||
|
@ -19,5 +22,5 @@ m::room::id::buf
|
|||
file_room_id(const string_view &server,
|
||||
const string_view &file);
|
||||
|
||||
size_t read_each_block(const m::room &, const std::function<void (const string_view &)> &);
|
||||
size_t write_file(const m::room &room, const string_view &content, const string_view &content_type);
|
||||
size_t read_each_block(const m::room &, const std::function<void (const const_buffer &)> &);
|
||||
size_t write_file(const m::room &room, const const_buffer &content, const string_view &content_type);
|
||||
|
|
|
@ -221,18 +221,15 @@ try
|
|||
content_type
|
||||
};
|
||||
|
||||
// Send it off to user first
|
||||
const resource::response response
|
||||
{
|
||||
client, remote_request.in.content, content_type
|
||||
};
|
||||
|
||||
const size_t written
|
||||
{
|
||||
write_file(room, remote_request.in.content, content_type)
|
||||
};
|
||||
|
||||
return response;
|
||||
return resource::response
|
||||
{
|
||||
client, remote_request.in.content, content_type
|
||||
};
|
||||
}
|
||||
catch(const ircd::server::unavailable &e)
|
||||
{
|
||||
|
@ -286,7 +283,7 @@ get__thumbnail_local(client &client,
|
|||
|
||||
size_t sent{0};
|
||||
const auto sink{[&client, &sent]
|
||||
(const string_view &block)
|
||||
(const const_buffer &block)
|
||||
{
|
||||
sent += client.write_all(block);
|
||||
}};
|
||||
|
@ -296,7 +293,20 @@ get__thumbnail_local(client &client,
|
|||
read_each_block(room, sink)
|
||||
};
|
||||
|
||||
assert(read == file_size);
|
||||
if(unlikely(read != file_size)) log::error
|
||||
{
|
||||
media_log, "File %s/%s [%s] size mismatch: expected %zu got %zu",
|
||||
hostname,
|
||||
mediaid,
|
||||
string_view{room.room_id},
|
||||
file_size,
|
||||
read
|
||||
};
|
||||
|
||||
// Have to kill client here after failing content length expectation.
|
||||
if(unlikely(read != file_size))
|
||||
client.close(net::dc::RST, net::close_ignore);
|
||||
|
||||
assert(read == sent);
|
||||
return response;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue