# 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 twisted.words.xish.domish import Element
+from twisted.words.protocols.jabber.jid import internJID
from debug import LogEvent, INFO, WARN, ERROR
import disco
def sendPresence(pytrans, to, fro, show=None, status=None, priority=None, ptype=None, avatarHash=None, nickname=None, payload=[]):
# Strip the resource off any presence subscribes (as per XMPP RFC 3921 Section 5.1.6)
# Makes eJabberd behave :)
- if(ptype == "subscribe"):
- (user,host,res) = jid.parse(to)
- to = "%s@%s" % (user, host)
+ if ptype in ("subscribe", "subscribed", "unsubscribe", "unsubscribed"):
+ to = internJID(to).userhost()
+ fro = internJID(fro).userhost()
el = Element((None, "presence"))
el.attributes["to"] = to
error.attributes["type"] = etype
error.attributes["code"] = str(utils.errorCodeMap[condition])
desc = error.addElement(condition)
- desc.attributes["xmlns"] = "urn:ietf:params:xml:ns:xmpp-stanzas"
+ desc.attributes["xmlns"] = disco.XMPP_STANZAS
text = error.addElement("text")
- text.attributes["xmlns"] = "urn:ietf:params:xml:ns:xmpp-stanzas"
+ text.attributes["xmlns"] = disco.XMPP_STANZAS
text.addContent(explanation)
if(body and len(body) > 0):
b = el.addElement("body")
def sendRosterImport(self, jid, ptype, sub, name="", groups=[]):
""" Sends a special presence packet. This will work with all clients, but clients that support roster-import will give a better user experience
IMPORTANT - Only ever use this for contacts that have already been authorised on the legacy service """
- el = Element((None, "presence"))
- el.attributes["to"] = self.jabberID
- el.attributes["from"] = jid
- el.attributes["type"] = ptype
- r = el.addElement("x")
- r.attributes["xmlns"] = disco.SUBSYNC
- item = r.addElement("item")
+ x = Element((None, "x"))
+ x.attributes["xmlns"] = disco.SUBSYNC
+ item = x.addElement("item")
item.attributes["subscription"] = sub
- if(name):
+ if name:
item.attributes["name"] = unicode(name)
for group in groups:
g = item.addElement("group")
g.addContent(group)
- self.pytrans.send(el)
+ self.sendPresence(to=self.jabberID, fro=jid, ptype=ptype, payload=[x])
def onMessage(self, el):
""" Handles incoming message packets """
fro = el.getAttribute("from")
to = el.getAttribute("to")
try:
- froj = jid.JID(fro)
- toj = jid.JID(to)
+ froj = internJID(fro)
+ toj = internJID(to)
except Exception, e:
LogEvent(WARN, self.jabberID)
return
""" Handles incoming presence packets """
#LogEvent(INFO, self.jabberID)
fro = el.getAttribute("from")
- froj = jid.JID(fro)
+ froj = internJID(fro)
to = el.getAttribute("to")
- toj = jid.JID(to)
+ toj = internJID(to)
# Grab the contents of the <presence/> packet
ptype = el.getAttribute("type")
if ptype and (ptype.startswith("subscribe") or ptype.startswith("unsubscribe")):
LogEvent(INFO, self.jabberID, "Parsed subscription presence packet")
- self.subscriptionReceived(toj.userhost(), ptype)
+ self.subscriptionReceived(fro, toj.userhost(), ptype)
else:
status = None
show = None
show = child.__str__()
elif(child.name == "priority"):
priority = child.__str__()
- elif(child.defaultUri == disco.XVCARDUPDATE):
+ elif(child.uri == disco.XVCARDUPDATE):
avatarHash = " "
for child2 in child.elements():
if(child2.name == "photo"):
""" Override this method to be notified when presence is received """
pass
- def subscriptionReceived(self, source, subtype):
+ def subscriptionReceived(self, source, dest, subtype):
""" Override this method to be notified when a subscription packet is received """
pass