0
0
Fork 0
mirror of https://github.com/matrix-construct/construct synced 2024-05-29 00:03:45 +02:00

ircd:Ⓜ️:fetch: Additional legacy event_id hostpart fallback.

This commit is contained in:
Jason Volk 2020-10-29 04:47:23 -07:00
parent eaefcceefb
commit 30d4a89db9

View file

@ -385,13 +385,21 @@ ircd::m::fetch::start(request &request)
try try
{ {
assert(!request.finished); assert(!request.finished);
// Attempt the user's hint first
if(!request.started && !request.origin) if(!request.started && !request.origin)
request.origin = request.opts.hint; request.origin = request.opts.hint;
// When no user hint, use legacy event_id hostpart as hint.
if(!request.started && !request.origin)
if(proffer_remote(request, request.opts.event_id.host()))
if(select_remote(request, request.opts.event_id.host()))
return true;
if(!request.started) if(!request.started)
request.started = ircd::now<system_point>(); request.started = ircd::now<system_point>();
if(!request.origin || !proffer_remote(request, request.origin)) if(!proffer_remote(request, request.origin))
select_random_remote(request); select_random_remote(request);
for(; request.origin; select_random_remote(request)) for(; request.origin; select_random_remote(request))
@ -577,14 +585,16 @@ ircd::m::fetch::select_random_remote(request &request)
return true; return true;
// If nothing found attempt hosts from mxids // If nothing found attempt hosts from mxids
const auto room_id_host const string_view mxid[2]
{ {
request.opts.room_id.host() request.opts.event_id.host(),
request.opts.room_id.host(),
}; };
if(room_id_host && proffer_remote(request, room_id_host)) for(const auto &remote : mxid)
if(select_remote(request, room_id_host)) if(proffer_remote(request, remote))
return true; if(select_remote(request, remote))
return true;
return false; return false;
} }
@ -614,6 +624,10 @@ bool
ircd::m::fetch::proffer_remote(request &request, ircd::m::fetch::proffer_remote(request &request,
const string_view &remote) const string_view &remote)
{ {
// Case sentinel false.
if(!remote)
return false;
// Don't want to request from myself. // Don't want to request from myself.
if(my_host(remote)) if(my_host(remote))
return false; return false;