0
0
Fork 0
mirror of https://github.com/matrix-construct/construct synced 2024-09-28 19:58:53 +02:00

modules/client/send_to_device: Move target into content.

modules/federation/sender: Adjust special cases.
This commit is contained in:
Jason Volk 2020-03-31 14:01:10 -07:00
parent 82e01fcc09
commit cec762de94
2 changed files with 22 additions and 6 deletions

View file

@ -146,13 +146,10 @@ try
json::iov event, content; json::iov event, content;
const json::iov::push push[] const json::iov::push push[]
{ {
// The federation sender considers the room_id property of an event
// as the "destination" and knows what to do if it's actually some
// some other string like the user::id we're targeting here.
{ event, { "room_id", target } },
{ event, { "type", "m.direct_to_device" } }, { event, { "type", "m.direct_to_device" } },
{ content, { "type", type } }, { content, { "type", type } },
{ content, { "sender", sender } }, { content, { "sender", sender } },
{ content, { "target", target } },
{ content, { "message_id", txnid } }, { content, { "message_id", txnid } },
{ content, { "messages", out.completed() } }, { content, { "messages", out.completed() } },
}; };
@ -160,6 +157,7 @@ try
m::vm::copts opts; m::vm::copts opts;
opts.prop_mask.reset(); opts.prop_mask.reset();
opts.prop_mask.set("origin"); opts.prop_mask.set("origin");
opts.edu = true;
opts.notify_clients = false; opts.notify_clients = false;
m::vm::eval m::vm::eval
{ {

View file

@ -145,6 +145,11 @@ send_worker()
void void
send(const m::event &event) send(const m::event &event)
{ {
const auto &type
{
json::get<"type"_>(event)
};
const auto &sender const auto &sender
{ {
json::get<"sender"_>(event) json::get<"sender"_>(event)
@ -155,6 +160,11 @@ send(const m::event &event)
json::get<"room_id"_>(event) json::get<"room_id"_>(event)
}; };
const json::object &content
{
json::get<"content"_>(event)
};
if(json::get<"depth"_>(event) == json::undefined_number) if(json::get<"depth"_>(event) == json::undefined_number)
return; return;
@ -163,8 +173,16 @@ send(const m::event &event)
return send_to_room(event, m::room::id{room_id}); return send_to_room(event, m::room::id{room_id});
// target is remote server hosting user/device // target is remote server hosting user/device
if(valid(m::id::USER, room_id)) if(type == "m.direct_to_device")
return send_to_user(event, m::user::id{room_id}); {
const json::string &target
{
content.get("target")
};
if(valid(m::id::USER, target))
return send_to_user(event, m::user::id(target));
}
// target is every remote server from every room a user is joined to. // target is every remote server from every room a user is joined to.
if(valid(m::id::USER, sender)) if(valid(m::id::USER, sender))