diff --git a/libervia/backend/core/xmpp.py b/libervia/backend/core/xmpp.py index 5427bab1..e1b0e6e2 100644 --- a/libervia/backend/core/xmpp.py +++ b/libervia/backend/core/xmpp.py @@ -2268,6 +2268,25 @@ class SatPresenceProtocol(xmppim.PresenceClientProtocol): entity, C.PRESENCE_UNAVAILABLE, 0, statuses, self.parent.profile ) + def errorReceived(self, presence): + """Handle error presence. + + Cache unreachable servers to avoid future disco queries. + """ + try: + e = error.exceptionFromStanza(presence) + assert isinstance(e, error.StanzaError) + if e.condition == "remote-server-not-found": + from_jid = jid.JID(presence["from"]) + server_jid = jid.JID(from_jid.host) + self.host.memory.disco._jid_disco_cache[server_jid] = (None, time.time()) + log.debug( + f"Server {server_jid} marked as unreachable from " + "presence error" + ) + except Exception: + log.exception("Can't handle presence error") + def available(self, entity=None, show=None, statuses=None, priority=None): """Set a presence and statuses.