diff src/plugins/plugin_xep_0065.py @ 944:e1842ebcb2f3

core, plugin XEP-0115: discovery refactoring: - hashing algorithm of XEP-0115 has been including in core - our own hash is still calculated by XEP-0115 and can be regenerated with XEP_0115.recalculateHash - old discovery methods have been removed. Now the following methods are used: - hasFeature: tell if a feature is available for an entity - getDiscoInfos: self explaining - getDiscoItems: self explaining - findServiceEntities: return all available items of an entity which given (category, type) - findFeaturesSet: search for a set of features in entity + entity's items all these methods are asynchronous, and manage cache automatically - XEP-0115 manage in a better way hashes, and now use a trigger for presence instead of monkey patch - new FeatureNotFound exception, when we want to do something which is not available - refactored client initialisation sequence, removed client.initialized Deferred - added constant APP_URL - test_plugin_xep_0033.py has been temporarly deactivated, the time to adapt it - lot of cleaning
author Goffi <goffi@goffi.org>
date Fri, 28 Mar 2014 18:07:22 +0100
parents c6d8fc63b1db
children 132de9d487ac
line wrap: on
line diff
--- a/src/plugins/plugin_xep_0065.py	Fri Mar 28 18:07:17 2014 +0100
+++ b/src/plugins/plugin_xep_0065.py	Fri Mar 28 18:07:22 2014 +0100
@@ -787,21 +787,23 @@
                                           "File Transfer", profile_key=self.parent.profile)
 
     def connectionInitialized(self):
-        def after_init(ignore):
-            proxy_ent = self.host.memory.getServerServiceEntity("proxy", "bytestreams", profile=self.parent.profile)
-            if not proxy_ent:
-                debug(_("No proxy found on this server"))
-                return
-            iq_elt = jabber_client.IQ(self.parent.xmlstream, 'get')
-            iq_elt["to"] = proxy_ent.full()
-            iq_elt.addElement('query', NS_BS)
-            iq_elt.addCallback(self._proxyDataResult)
-            iq_elt.send()
-
         self.xmlstream.addObserver(BS_REQUEST, self.plugin_parent.streamQuery, profile=self.parent.profile)
         proxy = self.host.memory.getParamA("Proxy", "File Transfer", profile_key=self.parent.profile)
         if not proxy:
-            self.parent.client_initialized.addCallback(after_init)
+            def proxiesFound(entities):
+                try:
+                    proxy_ent = entities.pop()
+                except KeyError:
+                    info(_("No proxy found on this server"))
+                    return
+                iq_elt = jabber_client.IQ(self.parent.xmlstream, 'get')
+                iq_elt["to"] = proxy_ent.full()
+                iq_elt.addElement('query', NS_BS)
+                iq_elt.addCallback(self._proxyDataResult)
+                iq_elt.send()
+            d = self.host.findServiceEntities("proxy", "bytestreams", profile_key=self.parent.profile)
+            d.addCallback(proxiesFound)
+
 
     def getDiscoInfo(self, requestor, target, nodeIdentifier=''):
         return [disco.DiscoFeature(NS_BS)]