Skip to main content

tuwunel_api/client/admin/federation/
mod.rs

1//! Synapse admin API: federation endpoints.
2
3mod destination;
4mod destination_rooms;
5mod list_destinations;
6mod reset_connection;
7
8use ruma::{OwnedServerName, UInt};
9use synapse_admin_api::federation::Destination;
10use tuwunel_service::federation::PeerBackoff;
11
12pub(crate) use self::{
13	destination::admin_destination_details_route,
14	destination_rooms::admin_destination_rooms_route,
15	list_destinations::admin_list_destinations_route,
16	reset_connection::admin_reset_connection_route,
17};
18
19/// A healthy peer (no failure rows) keeps the all-zero destination defaults; a
20/// failing one carries its mapped retry timings.
21pub(crate) fn destination_from_backoff(
22	destination: OwnedServerName,
23	backoff: Option<PeerBackoff>,
24) -> Destination {
25	let Some(backoff) = backoff else {
26		return Destination::new(destination);
27	};
28
29	Destination {
30		retry_last_ts: millis(backoff.anchor_secs),
31		retry_interval: millis(backoff.delay_secs),
32		failure_ts: Some(millis(backoff.oldest_secs)),
33		..Destination::new(destination)
34	}
35}
36
37fn millis(secs: u64) -> UInt { UInt::new_saturating(secs.saturating_mul(1000)) }