diff --git a/sat/memory/disco.py b/sat/memory/disco.py index 223d92cc..4a3d95d3 100755 --- a/sat/memory/disco.py +++ b/sat/memory/disco.py @@ -84,7 +84,13 @@ class HashManager(object): def fillHashes(hashes): for hash_, xml in hashes.iteritems(): element = xml_tools.ElementParser()(xml) - self.hashes[hash_] = disco.DiscoInfo.fromElement(element) + disco_info = disco.DiscoInfo.fromElement(element) + if not disco_info.features and not disco_info.identities: + log.warning(_(u"no feature/identity found in disco element (hash: {cap_hash}), ignoring: {xml}").format( + cap_hash=hash_, xml=xml)) + else: + self.hashes[hash_] = disco_info + log.info(u"Disco hashes loaded") d = self.persistent.load() d.addCallback(fillHashes) @@ -158,10 +164,10 @@ class Discovery(object): if jid_ is None: jid_ = jid.JID(client.jid.host) try: - cap_hash = self.host.memory.getEntityData(jid_, [C.ENTITY_CAP_HASH], client.profile)[C.ENTITY_CAP_HASH] if not use_cache: # we ignore cache, so we pretend we haven't found it raise KeyError + cap_hash = self.host.memory.getEntityData(jid_, [C.ENTITY_CAP_HASH], client.profile)[C.ENTITY_CAP_HASH] except (KeyError, exceptions.UnknownEntityError): # capability hash is not available, we'll compute one def infosCb(disco_infos): diff --git a/sat/plugins/plugin_xep_0115.py b/sat/plugins/plugin_xep_0115.py index ef43b427..59589815 100755 --- a/sat/plugins/plugin_xep_0115.py +++ b/sat/plugins/plugin_xep_0115.py @@ -79,11 +79,10 @@ class XEP_0115(object): disco_infos = disco.DiscoInfo() for item in _infos: disco_infos.append(item) - disco_infos = disco.DiscoInfo() cap_hash = client._caps_hash = self.host.memory.disco.generateHash(disco_infos) - log.info("Our capability hash has been generated: [{cap_hash}]".format( + log.info(u"Our capability hash has been generated: [{cap_hash}]".format( cap_hash = cap_hash)) - log.debug("Generating capability domish.Element") + log.debug(u"Generating capability domish.Element") c_elt = domish.Element((NS_ENTITY_CAPABILITY, 'c')) c_elt['hash'] = 'sha-1' c_elt['node'] = C.APP_URL