On Wed, Mar 3, 2010 at 1:56 PM, Werner Thie <wthie@thiengineering.ch> wrote:
Hi
Starting twistd xmpp-router and trying to connect to it with a component from the wokkel examples
""" An XMPP Ping server as an external server-side component.
This ping server assumes the domain C{'ping'}. """ import sys
from twisted.python import log from twisted.application import app, service, internet from twisted.internet import reactor
from wokkel import component from wokkel.ping import PingHandler
# Configuration parameters EXT_HOST = 'localhost' EXT_PORT = 5347 SECRET = 'secret' DOMAIN = 'ping' LOG_TRAFFIC = True
# Set up the Twisted application application = service.Application("Ping Component")
router = component.Router() pingComponent = component.Component(EXT_HOST, EXT_PORT, DOMAIN, SECRET) pingComponent.logTraffic = LOG_TRAFFIC pingComponent.setServiceParent(application)
pingHandler = PingHandler() pingHandler.setHandlerParent(pingComponent)
produces the following traceback:
2010-03-03 19:24:28+0100 [XmlStream,0,127.0.0.1] Unhandled Error Traceback (most recent call last): File "\proj\Python-2.5.2\stackless-2.5.2-r63812\Modules\pyexpat.c", line 656, in EndElement ("(N)", string_intern(self, name))) File "C:\proj\twisted\twisted\words\xish\domish.py", line 797, in _onEndElement self.ElementEvent(self.currElem) File "C:\proj\twisted\twisted\words\xish\xmlstream.py", line 107, in onElement self.dispatch(element) File "C:\proj\twisted\twisted\words\xish\utility.py", line 317, in dispatch callbacklist.callback(obj) --- <exception caught here> --- File "C:\proj\twisted\twisted\words\xish\utility.py", line 107, in callback methodwrapper(*args, **kwargs) File "C:\proj\twisted\twisted\words\xish\utility.py", line 27, in __call__ self.method(*nargs, **nkwargs) File "C:\proj\twisted\twisted\words\protocols\jabber\component.py", line 171, in onElement self.onHandshake(unicode(element)) File "C:\proj\twisted\twisted\words\protocols\jabber\component.py", line 187, in onHandshake unicode(self.secret)) File "C:\proj\twisted\twisted\words\protocols\jabber\xmlstream.py", line 52, in hashPassword raise TypeError("The session identifier must be a unicode object") exceptions.TypeError: The session identifier must be a unicode object
After some fiddling around it seems that the code at line 282 in twisted\words\protocols\jabber\xmlstream.py presets the sid of the stream to a str instead of a unicode(str). After changing line 282 from
self.xmlstream.sid = randbytes.secureRandom(8).encode('hex')
to
self.xmlstream.sid = unicode(randbytes.secureRandom(8).encode('hex'))
everything works as advertised.
Is there somebody around who could tell me what to do with this fix, I'm certainly a beginner diddling with XMPP.
Thanks a bunch, Werner
Hello Werner, I do not know anything about twisted.words, but you should file a bug report in trac: http://twistedmatrix.com/trac/report Just out of curiosity, I did look at xmlstream and the whole unicode type checking seems unnecessary considering how the values are used: input = u"%s%s" % (sid, password) Why sid and password have to be unicode objects and not just basestring beats me. -Drew