# Licensed for distribution under the GPL version 2, check COPYING for details
import utils
-if(utils.checkTwisted()):
- from twisted.xish.domish import Element
- from twisted.words.protocols.jabber import jid
-else:
- from tlib.domish import Element
- from tlib.jabber import jid
+from tlib.xmlw import Element, jid
from twisted.internet.defer import Deferred
from twisted.internet import reactor
from debug import LogEvent, INFO, WARN, ERROR
SUBSYNC = "http://jabber.org/protocol/roster-subsync"
MUC = "http://jabber.org/protocol/muc"
MUC_USER = MUC + "#user"
+FEATURE_NEG = "http://jabber.org/protocol/feature-neg"
+SI = "http://jabber.org/protocol/si"
+FT = "http://jabber.org/protocol/si/profile/file-transfer"
+S5B = "http://jabber.org/protocol/bytestreams"
+IBB = "http://jabber.org/protocol/ibb"
IQGATEWAY = "jabber:iq:gateway"
IQVERSION = "jabber:iq:version"
IQREGISTER = "jabber:iq:register"
IQROSTER = "jabber:iq:roster"
IQAVATAR = "jabber:iq:avatar"
+IQOOB = "jabber:iq:oob"
+XOOB = "jabber:x:oob"
XCONFERENCE = "jabber:x:conference"
XEVENT = "jabber:x:event"
XDELAY = "jabber:x:delay"
iqType = el.getAttribute("type")
ulang = utils.getLang(el)
try: # Stringprep
- froj = jid.JID(fro)
- to = jid.JID(to).full()
+ froj = jid.intern(fro)
+ to = jid.intern(to).full()
except Exception, e:
LogEvent(WARN, "", "Dropping IQ because of stringprep error")
if to.find('@') > 0:
searchjid = "USER"
+ elif config.compjid and to == config.compjid:
+ searchjid = config.jid
else:
searchjid = to
for (feature, handler) in self.features.get(searchjid, []):
query.attributes["xmlns"] = DISCO_INFO
searchjid = jid
- if(jid.find('@') > 0): searchjid = "USER"
+ if jid.find('@') > 0: searchjid = "USER"
+ if config.compjid and jid == config.compjid: searchjid = config.jid
# Add any identities
for (category, ctype, name) in self.identities.get(searchjid, []):
identity = query.addElement("identity")
query.attributes["xmlns"] = DISCO_ITEMS
searchjid = jid
- if(jid.find('@') > 0): searchjid = "USER"
+ if jid.find('@') > 0: searchjid = "USER"
+ if config.compjid and jid == config.compjid: searchjid = config.jid
for node in self.nodes.get(searchjid, []):
handler, name, rootnode = self.nodes[jid][node]
if rootnode:
self.pytrans.send(el)
+class DiscoRequest:
+ def __init__(self, pytrans, jid):
+ LogEvent(INFO)
+ self.pytrans, self.jid = pytrans, jid
+
+ def doDisco(self):
+ ID = self.pytrans.makeMessageID()
+ iq = Element((None, "iq"))
+ iq.attributes["to"] = self.jid
+ iq.attributes["from"] = config.jid
+ iq.attributes["type"] = "get"
+ query = iq.addElement("query")
+ query.attributes["xmlns"] = DISCO_INFO
+
+ d = self.pytrans.discovery.sendIq(iq)
+ d.addCallback(self.discoResponse)
+ d.addErrback(self.discoFail)
+ return d
+
+ def discoResponse(self, el):
+ iqType = el.getAttribute("type")
+ if iqType != "result":
+ return []
+
+ fro = el.getAttribute("from")
+
+ features = []
+
+ for child in el.elements():
+ if child.name == "query":
+ query = child
+ break
+ else:
+ return []
+
+ for child in query.elements():
+ if child.name == "feature":
+ features.append(child.getAttribute("var"))
+
+ return features
+
+ def discoFail(self):
+ return []
+
+
+