diff --git a/libervia/backend/core/core_types.py b/libervia/backend/core/core_types.py index a2ae9c50..19d760b5 100644 --- a/libervia/backend/core/core_types.py +++ b/libervia/backend/core/core_types.py @@ -95,6 +95,8 @@ class SatXMPPEntity(ABC): discoHandler: disco.DiscoHandler messageProt: "SatMessageProtocol" identities: list[disco.DiscoIdentity] + # Fire when entity is connected + conn_deferred: defer.Deferred xmlstream: mod_xmlstream.XmlStream tor: "Tor | None" = None diff --git a/libervia/backend/plugins/plugin_xep_0115.py b/libervia/backend/plugins/plugin_xep_0115.py index 83f2c027..69cefafc 100644 --- a/libervia/backend/plugins/plugin_xep_0115.py +++ b/libervia/backend/plugins/plugin_xep_0115.py @@ -491,9 +491,13 @@ class XEP_0115_handler(XMPPHandler): # Query the caps node to get disco info (XEP-0115 ยง6.2) caps_node = f"{node}#{ver}" if node else ver log.debug(f"Querying caps node {caps_node} for server {server_jid}") - d = self.client.disco.requestInfo( + # We chain to `conn_deferred` to avoid race condition and be sure that + # we have `client.disco` set (see + # https://www.goffi.org/tickets/view/484) + d = self.client.conn_deferred + d.addCallback(lambda __: self.client.disco.requestInfo( server_jid, nodeIdentifier=caps_node - ) + )) d.addCallback(self._caps_node_cb, ver) d.addErrback(self._caps_node_eb, server_jid, ver)