1.1 --- a/libxml2dom/xmpp.py Sat Jul 28 16:39:56 2007 +0000
1.2 +++ b/libxml2dom/xmpp.py Sat Jul 28 16:40:22 2007 +0000
1.3 @@ -57,6 +57,7 @@
1.4
1.5 XMPP_BIND_NAMESPACE = "urn:ietf:params:xml:ns:xmpp-bind"
1.6 XMPP_CLIENT_NAMESPACE = "jabber:client"
1.7 +XEP_0022_EVENT_NAMESPACE = "jabber:x:event"
1.8 XMPP_REGISTER_NAMESPACE = "jabber:iq:register"
1.9 XMPP_SASL_NAMESPACE = "urn:ietf:params:xml:ns:xmpp-sasl"
1.10 XMPP_SESSION_NAMESPACE = "urn:ietf:params:xml:ns:xmpp-session"
1.11 @@ -93,9 +94,18 @@
1.12 elif Node_namespaceURI(_node) == XMPP_CLIENT_NAMESPACE:
1.13 if Node_localName(_node) == "iq":
1.14 return XMPPIqElement(_node, self, context_node.ownerDocument)
1.15 + elif Node_localName(_node) == "message":
1.16 + return XMPPMessageElement(_node, self, context_node.ownerDocument)
1.17 + elif Node_localName(_node) == "presence":
1.18 + return XMPPPresenceElement(_node, self, context_node.ownerDocument)
1.19 else:
1.20 return XMPPClientElement(_node, self, context_node.ownerDocument)
1.21
1.22 + # Make special event elements.
1.23 +
1.24 + elif Node_namespaceURI(_node) == XEP_0022_EVENT_NAMESPACE:
1.25 + return XEP0022EventElement(_node, self, context_node.ownerDocument)
1.26 +
1.27 # Make special registration elements.
1.28
1.29 elif Node_namespaceURI(_node) == XMPP_REGISTER_NAMESPACE:
1.30 @@ -145,6 +155,7 @@
1.31 ns = {
1.32 "bind" : XMPP_BIND_NAMESPACE,
1.33 "client" : XMPP_CLIENT_NAMESPACE,
1.34 + "event": XEP_0022_EVENT_NAMESPACE,
1.35 "register" : XMPP_REGISTER_NAMESPACE,
1.36 "sasl" : XMPP_SASL_NAMESPACE,
1.37 "session" : XMPP_SESSION_NAMESPACE,
1.38 @@ -180,7 +191,6 @@
1.39 b64value = base64.encodestring("%s\x00%s\x00%s" % (jid, username, password))
1.40 text = self.ownerDocument.createTextNode(b64value)
1.41 self.appendChild(text)
1.42 -
1.43
1.44 mechanism = property(_mechanism, _setMechanism)
1.45 value = property(_value)
1.46 @@ -248,6 +258,63 @@
1.47 to = property(_to, _setTo, _delTo)
1.48 type = property(_type, _setType, _delType)
1.49
1.50 +class XMPPMessageElement(XMPPClientElement):
1.51 +
1.52 + "An XMPP message element."
1.53 +
1.54 + def _event(self):
1.55 + return self.xpath(".//event:*")[0]
1.56 +
1.57 + def _body(self):
1.58 + return self.xpath("./client:body")[0]
1.59 +
1.60 + def _setBody(self, body):
1.61 + self.appendChild(body)
1.62 +
1.63 + def _delBody(self):
1.64 + self.removeChild(self.body)
1.65 +
1.66 + def createBody(self):
1.67 + return self.ownerDocument.createElementNS(XMPP_CLIENT_NAMESPACE, "body")
1.68 +
1.69 + body = property(_body, _setBody, _delBody)
1.70 + event = property(_event)
1.71 +
1.72 +class XEP0022EventElement(XMPPNode):
1.73 +
1.74 + "An XEP-0022 event element."
1.75 +
1.76 + def _offline(self):
1.77 + return bool(self.xpath("./event:offline"))
1.78 +
1.79 + def _delivered(self):
1.80 + return bool(self.xpath("./event:delivered"))
1.81 +
1.82 + def _displayed(self):
1.83 + return bool(self.xpath("./event:displayed"))
1.84 +
1.85 + def _composing(self):
1.86 + return bool(self.xpath("./event:composing"))
1.87 +
1.88 + def _id(self):
1.89 + ids = self.xpath("./event:id")
1.90 + if ids:
1.91 + return ids[0].textContent
1.92 + else:
1.93 + return None
1.94 +
1.95 + offline = property(_offline)
1.96 + delivered = property(_delivered)
1.97 + displayed = property(_displayed)
1.98 + composing = property(_composing)
1.99 + id = property(_id)
1.100 +
1.101 +class XMPPPresenceElement(XMPPClientElement):
1.102 +
1.103 + "An XMPP presence element."
1.104 +
1.105 + pass
1.106 +
1.107 class XMPPIqElement(XMPPClientElement):
1.108
1.109 """
1.110 @@ -421,12 +488,12 @@
1.111 else:
1.112 return doc.documentElement
1.113
1.114 - def receive(self, timeout):
1.115 + def receive(self, timeout=None):
1.116
1.117 """
1.118 Wait for an incoming stanza, or as long as 'timeout' (in milliseconds),
1.119 - returning either a stanza document (fragment) or None if nothing was
1.120 - received.
1.121 + or forever if 'timeout' is omitted or set to None, returning either a
1.122 + stanza document (fragment) or None if nothing was received.
1.123 """
1.124
1.125 if self._ready(timeout):
1.126 @@ -445,6 +512,9 @@
1.127 def createMessage(self):
1.128 return self.createStanza(XMPP_CLIENT_NAMESPACE, "message")
1.129
1.130 + def createPresence(self):
1.131 + return self.createStanza(XMPP_CLIENT_NAMESPACE, "presence")
1.132 +
1.133 def createStanza(self, namespaceURI, localName):
1.134 return createXMPPStanza(namespaceURI, localName)
1.135