Skip to main content

tuwunel_api/client/admin/federation/
reset_connection.rs

1use axum::extract::State;
2use synapse_admin_api::federation::reset_connection::v1::{Request, Response};
3use tuwunel_core::{Err, Result};
4
5use crate::{Ruma, client::admin::require_admin};
6
7/// # `POST /_synapse/admin/v1/federation/destinations/{destination}/reset_connection`
8pub(crate) async fn admin_reset_connection_route(
9	State(services): State<crate::State>,
10	body: Ruma<Request>,
11) -> Result<Response> {
12	require_admin(&services, body.sender_user()).await?;
13
14	let destination = &body.destination;
15
16	if services.globals.server_is_ours(destination) {
17		return Err!(Request(NotFound("Unknown destination")));
18	}
19
20	if services
21		.sending
22		.notify_peer_alive(destination)
23		.await
24	{
25		return Ok(Response {});
26	}
27
28	let known = services
29		.state_cache
30		.server_shares_room(destination)
31		.await;
32
33	if known {
34		return Err!(Request(Unknown(
35			"The retry timing does not need to be reset for this destination."
36		)));
37	}
38
39	Err!(Request(NotFound("Unknown destination")))
40}