core (disco): added missing disco extensions when generating the cap hash.
This commit is contained in:
parent
3f1412f677
commit
8ae596600d
2 changed files with 33 additions and 11 deletions
|
|
@ -356,6 +356,7 @@ class Discovery(object):
|
|||
|
||||
"""
|
||||
s = []
|
||||
# identities
|
||||
byte_identities = [
|
||||
ByteIdentity(service)
|
||||
for service in services
|
||||
|
|
@ -367,6 +368,7 @@ class Discovery(object):
|
|||
for identity in byte_identities:
|
||||
s.append(str(identity))
|
||||
s.append("<")
|
||||
# features
|
||||
byte_features = [
|
||||
service.encode("utf-8")
|
||||
for service in services
|
||||
|
|
@ -376,9 +378,26 @@ class Discovery(object):
|
|||
for feature in byte_features:
|
||||
s.append(feature)
|
||||
s.append("<")
|
||||
# TODO: manage XEP-0128 data form here
|
||||
|
||||
# extensions
|
||||
ext = services.extensions.values()
|
||||
ext.sort(key=lambda f: f.formNamespace.encode('utf-8'))
|
||||
for extension in ext:
|
||||
s.append(extension.formNamespace.encode('utf-8'))
|
||||
s.append("<")
|
||||
fields = extension.fieldList
|
||||
fields.sort(key=lambda f: f.var.encode('utf-8'))
|
||||
for field in fields:
|
||||
s.append(field.var.encode('utf-8'))
|
||||
s.append("<")
|
||||
values = [v.encode('utf-8') for v in field.values]
|
||||
values.sort()
|
||||
for value in values:
|
||||
s.append(value)
|
||||
s.append("<")
|
||||
|
||||
cap_hash = b64encode(sha1("".join(s)).digest())
|
||||
log.debug(_(u"Capability hash generated: [%s]") % cap_hash)
|
||||
log.debug(_(u"Capability hash generated: [{cap_hash}]").format(cap_hash=cap_hash))
|
||||
return cap_hash
|
||||
|
||||
@defer.inlineCallbacks
|
||||
|
|
|
|||
|
|
@ -165,9 +165,10 @@ class XEP_0115_handler(XMPPHandler):
|
|||
if c_hash != "sha-1": # unknown hash method
|
||||
log.warning(
|
||||
_(
|
||||
u"Unknown hash method for entity capabilities: [%(hash_method)s] (entity: %(jid)s, node: %(node)s)"
|
||||
u"Unknown hash method for entity capabilities: [{hash_method}] "
|
||||
u"(entity: {entity_jid}, node: {node})"
|
||||
)
|
||||
% {"hash_method": c_hash, "jid": from_jid, "node": c_node}
|
||||
.format(hash_method = c_hash, entity_jid = from_jid, node = c_node)
|
||||
)
|
||||
|
||||
def cb(__):
|
||||
|
|
@ -177,14 +178,16 @@ class XEP_0115_handler(XMPPHandler):
|
|||
if computed_hash != c_ver:
|
||||
log.warning(
|
||||
_(
|
||||
u"Computed hash differ from given hash:\ngiven: [%(given_hash)s]\ncomputed: [%(computed_hash)s]\n(entity: %(jid)s, node: %(node)s)"
|
||||
u"Computed hash differ from given hash:\n"
|
||||
u"given: [{given}]\n"
|
||||
u"computed: [{computed}]\n"
|
||||
u"(entity: {entity_jid}, node: {node})"
|
||||
).format(
|
||||
given = c_ver,
|
||||
computed = computed_hash,
|
||||
entity_jid = from_jid,
|
||||
node = c_node,
|
||||
)
|
||||
% {
|
||||
"given_hash": c_ver,
|
||||
"computed_hash": computed_hash,
|
||||
"jid": from_jid,
|
||||
"node": c_node,
|
||||
}
|
||||
)
|
||||
|
||||
def eb(failure):
|
||||
|
|
|
|||
Loading…
Reference in a new issue