summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathan Fritz <fritzy@netflint.net>2009-07-11 19:31:20 +0000
committerNathan Fritz <fritzy@netflint.net>2009-07-11 19:31:20 +0000
commit226f719597da390057c583e6f83ba850bb4ed334 (patch)
tree2c9481536418740993f08b70043b3800e067f992
parenta1ece44368c472bb5ae61e0c4e4a244c07908a6e (diff)
downloadslixmpp-226f719597da390057c583e6f83ba850bb4ed334.tar.gz
slixmpp-226f719597da390057c583e6f83ba850bb4ed334.tar.bz2
slixmpp-226f719597da390057c583e6f83ba850bb4ed334.tar.xz
slixmpp-226f719597da390057c583e6f83ba850bb4ed334.zip
components now ignore namespaces in matching completely for server compatibility
-rwxr-xr-xsleekxmpp/componentxmpp.py8
-rw-r--r--sleekxmpp/xmlstream/matcher/xmlmask.py3
-rw-r--r--sleekxmpp/xmlstream/matcher/xpath.py18
3 files changed, 27 insertions, 2 deletions
diff --git a/sleekxmpp/componentxmpp.py b/sleekxmpp/componentxmpp.py
index 72111e3c..078a1d3f 100755
--- a/sleekxmpp/componentxmpp.py
+++ b/sleekxmpp/componentxmpp.py
@@ -22,6 +22,14 @@
from __future__ import absolute_import
from . basexmpp import basexmpp
from xml.etree import cElementTree as ET
+
+# some servers use different namespaces for components -- this is a hack, but is there for compatibility
+import xmlstream.matcher.xmlmask
+import xmlstream.matcher.xpath
+xmlstream.matcher.xmlmask.ignore_ns = True
+xmlstream.matcher.xpath.ignore_ns = True
+# ----------
+
from . xmlstream.xmlstream import XMLStream
from . xmlstream.xmlstream import RestartStream
from . xmlstream.matcher.xmlmask import MatchXMLMask
diff --git a/sleekxmpp/xmlstream/matcher/xmlmask.py b/sleekxmpp/xmlstream/matcher/xmlmask.py
index 02a644cb..30cb13bb 100644
--- a/sleekxmpp/xmlstream/matcher/xmlmask.py
+++ b/sleekxmpp/xmlstream/matcher/xmlmask.py
@@ -2,6 +2,8 @@ from . import base
from xml.etree import cElementTree
from xml.parsers.expat import ExpatError
+ignore_ns = False
+
class MatchXMLMask(base.MatcherBase):
def __init__(self, criteria):
@@ -19,6 +21,7 @@ class MatchXMLMask(base.MatcherBase):
def maskcmp(self, source, maskobj, use_ns=False, default_ns='__no_ns__'):
"""maskcmp(xmlobj, maskobj):
Compare etree xml object to etree xml object mask"""
+ use_ns = not ignore_ns
#TODO require namespaces
if source == None: #if element not found (happens during recursive check below)
return False
diff --git a/sleekxmpp/xmlstream/matcher/xpath.py b/sleekxmpp/xmlstream/matcher/xpath.py
index b141dd87..060d5df3 100644
--- a/sleekxmpp/xmlstream/matcher/xpath.py
+++ b/sleekxmpp/xmlstream/matcher/xpath.py
@@ -1,11 +1,25 @@
from . import base
from xml.etree import cElementTree
+ignore_ns = False
+
class MatchXPath(base.MatcherBase):
def match(self, xml):
x = cElementTree.Element('x')
x.append(xml)
- if x.find(self._criteria) is not None:
+ if not ignore_ns:
+ if x.find(self._criteria) is not None:
+ return True
+ return False
+ else:
+ criteria = [c.split('}')[-1] for c in self._criteria.split('/')]
+ xml = x
+ for tag in criteria:
+ children = [c.tag.split('}')[-1] for c in xml.getchildren()]
+ try:
+ idx = children.index(tag)
+ except ValueError:
+ return False
+ xml = xml.getchildren()[idx]
return True
- return False