G'day everybody,
While implementing Entity Capabilities (XEP-0115) on my client, I faced
2 issues with Wokkel:
- if we have a disco info request with no "to" or "from" attribute (seen
with Prosody), a KeyError exception is raised. The attached patch fix it.
- I generate the hash with the result of disco.DiscoHandler.info with no
node, and that include everything like VersionHandler's
"jabber:iq:version" feature. That was working great with Prosody and
Openfire, but not with Ejabberd (the notification for PEP was not
included). After some investigations, I realised that jabber:iq:version
feature is not added when there is a node in disco info request, and
that's the case with XEP-0115, so the features list was different to the
one used to generate the hash, and ejabberd was (silently :( ) rejecting
it; resulting in no notification for Personal Eventing Protocol.
I temporarily fixed the issue by overriding
generic.VersionHandler.getDiscoInfo and forcing the node parameter to
None, but this case should be managed in Wokkel.
I have (partially) implemented XEP-0115 in my XMPP client (Salut à Toi:
http://wiki.goffi.org/wiki/Salut_%C3%A0_Toi ), but it would be nice to
add it to Wokkel.
Last but not least, I have said a few months ago that I'd like to
improve MUC branch for mainstream inclusion, I'm still interested in
that, as my client is based on Twisted/Wokkel and I need MUC (I was just
too busy so far to contribute on it :) ), but I need the help of Ralph
Meijer or at least a Twisted guru if he is too busy to know exactly how
and what. For the moment I need to make a dirty hack in my setup.py to
use the MUC branch in my project...
Cheers
Goffi
diff -r ce13b7c6659c wokkel/disco.py
--- a/wokkel/disco.py Sun Dec 26 23:15:41 2010 +0100
+++ b/wokkel/disco.py Tue Feb 08 01:16:34 2011 +0100
@@ -445,8 +445,14 @@
@param iq: The request iq element.
@type iq: L{Element<twisted.words.xish.domish.Element>}
"""
- requestor = jid.internJID(iq["from"])
- target = jid.internJID(iq["to"])
+ try:
+ requestor = jid.internJID(iq["from"])
+ except KeyError:
+ requestor = None
+ try:
+ target = jid.internJID(iq["to"])
+ except KeyError:
+ target = None
nodeIdentifier = iq.query.getAttribute("node", '')
def toResponse(info):
_______________________________________________
Twisted-web mailing list
[email protected]
http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-web