Welcome to mirror list, hosted at ThFree Co, Russian Federation.

dev.gajim.org/gajim/gajim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYann Leboulanger <asterix@lagaule.org>2008-08-05 02:06:54 +0400
committerYann Leboulanger <asterix@lagaule.org>2008-08-05 02:06:54 +0400
commite13c472e2c9b59ba8b5884f2f42c1869bfaf309d (patch)
treedb686504c190c24ff5b4e76c46f98a43b1c24082
parentebe0f96e5c1bc77b433bbcf3d525ea0ba742eead (diff)
implement legacy pep protocol (v1.3). Fixes #4146
-rw-r--r--src/common/caps.py62
1 files changed, 39 insertions, 23 deletions
diff --git a/src/common/caps.py b/src/common/caps.py
index 4baa1bc71..7631b2f82 100644
--- a/src/common/caps.py
+++ b/src/common/caps.py
@@ -171,14 +171,20 @@ class CapsCache(object):
''' Preload data about (node, ver, exts) caps using disco
query to jid using proper connection. Don't query if
the data is already in cache. '''
- q = self[(hash_method, hash)]
+ if hash_method == 'old':
+ q = self[(hash_method, node + '#' + hash)]
+ else:
+ q = self[(hash_method, hash)]
if q.queried==0:
# do query for bare node+hash pair
# this will create proper object
q.queried=1
- con.discoverInfo(jid, '%s#%s' % (node, hash))
-
+ if hash_method == 'old':
+ con.discoverInfo(jid)
+ else:
+ con.discoverInfo(jid, '%s#%s' % (node, hash))
+
def is_supported(self, contact, feature):
# No resource -> can't have any caps
if not contact or not contact.resource:
@@ -195,8 +201,11 @@ class CapsCache(object):
# This is the "Asterix way", after 0.12 release, I will
# likely implement a fallback to disco (could be disabled
# for mobile users who pay for traffic)
- features = self[(contact.caps_hash_method,
- contact.caps_hash)].features
+ if contact.caps_hash_method == 'old':
+ features = self[(contact.caps_hash_method, contact.caps_node + '#' + \
+ contact.caps_hash)].features
+ else:
+ features = self[(contact.caps_hash_method, contact.caps_hash)].features
if feature in features or features == []:
return True
@@ -214,8 +223,7 @@ class ConnectionCaps(object):
# for disco... so that disco will learn how to interpret
# these caps
jid = helpers.get_full_jid_from_iq(presence)
- contact = gajim.contacts.get_contact_from_full_jid(
- self.name, jid)
+ contact = gajim.contacts.get_contact_from_full_jid(self.name, jid)
if contact is None:
room_jid, nick = gajim.get_room_and_nick_from_fjid(jid)
contact = gajim.contacts.get_gc_contact(
@@ -233,8 +241,11 @@ class ConnectionCaps(object):
contact.hash_method = None
return
- hash_method, node, hash = \
- caps['hash'], caps['node'], caps['ver']
+ hash_method, node, hash = caps['hash'], caps['node'], caps['ver']
+
+ if hash_method is None and node and hash:
+ # Old XEP-115 implentation
+ hash_method = 'old'
if hash_method is None or node is None or hash is None:
# improper caps in stanza, ignoring
@@ -260,23 +271,28 @@ class ConnectionCaps(object):
return
if not contact.caps_node:
return # we didn't asked for that?
- if not node.startswith(contact.caps_node + '#'):
+ if contact.caps_hash_method != 'old' and not node.startswith(
+ contact.caps_node + '#'):
return
- node, hash = node.split('#', 1)
- computed_hash = helpers.compute_caps_hash(identities, features,
- dataforms=dataforms, hash_method=contact.caps_hash_method)
- if computed_hash != hash:
- # wrong hash, forget it
- contact.caps_node = ''
- contact.caps_hash_method = ''
- contact.caps_hash = ''
- return
-
- # if we don't have this info already...
- caps = gajim.capscache[(contact.caps_hash_method, hash)]
+ if contact.caps_hash_method != 'old':
+ node, hash = node.split('#', 1)
+ computed_hash = helpers.compute_caps_hash(identities, features,
+ dataforms=dataforms, hash_method=contact.caps_hash_method)
+ if computed_hash != hash:
+ # wrong hash, forget it
+ contact.caps_node = ''
+ contact.caps_hash_method = ''
+ contact.caps_hash = ''
+ return
+ # if we don't have this info already...
+ caps = gajim.capscache[(contact.caps_hash_method, contact.caps_hash)]
+ else:
+ # if we don't have this info already...
+ caps = gajim.capscache[(contact.caps_hash_method, contact.caps_node + \
+ '#' + contact.caps_hash)]
if caps.queried == 2:
return
caps.update(identities, features)
-# vim: se ts=3: \ No newline at end of file
+# vim: se ts=3: