[Twisted-Python] Jabber client, tls and iqauth
Hi! I did some searches about my problem and didn't find any thing that match in the archives. I'm trying to do a simple jabber client with the twisted framework in order to automatically send messages. The server is a prosody server, and enabled the tls and iq auth. So far, I can connect to the server, and can't login. If I'm doing a XmlStreamFactory with the basicClientFactory, I have these initializers/authenticator: Initializers [<twisted.words.protocols.jabber.xmlstream.TLSInitiatingInitializer object at 0x2c1ef50>, <twisted.words.protocols.jabber.client.IQAuthInitializer object at 0x2c1ef90>] Authenticator <twisted.words.protocols.jabber.client.BasicAuthenticator instance at 0x10f2320> And if I create a XMPPClientFactory, I have these: Initializers [<twisted.words.protocols.jabber.client.CheckVersionInitializer object at 0x2fe7f50>, <twisted.words.protocols.jabber.xmlstream.TLSInitiatingInitializer object at 0x2fe7fd0>, <twisted.words.protocols.jabber.sasl.SASLInitiatingInitializer object at 0x2ff1050>, <twisted.words.protocols.jabber.client.BindInitializer object at 0x2ff1090>, <twisted.words.protocols.jabber.client.SessionInitializer object at 0x2ff10d0>] Authenticator <twisted.words.protocols.jabber.client.XMPPAuthenticator instance at 0x2fdd320> So I look up the SEND and RECV message between the client and server, and I notice that if I do a XMPPClientFactory, it's doing a tls connection, then say it doesn't have the feature for iq auth. And if I'm doing a basicClientFactory, I don't have the tls, so when it tries to logon with iq, the server answers that it needs the tls. After noticing that, I tried to change the initializers and the authenticator in the connected function. But when I'm doing a XMPPClientFactory with a BasicAuthenticator, I don't have the tls anymore. What do I need to change in order to have the tls and after the iq auth? Thank you for your help. rkadeFR My current code: 19 class ClientXMPP(object): 20 def __init__(self, jid_user, password_user): 21 self.reactor = reactor 22 XmlStreamFactory = client.basicClientFactory(jid_user, password_user) 23 XmlStreamFactory.addBootstrap(xmlstream.STREAM_CONNECTED_EVENT, self.connected) 24 XmlStreamFactory.addBootstrap(xmlstream.STREAM_END_EVENT, self.disconnected) 25 XmlStreamFactory.addBootstrap(xmlstream.STREAM_AUTHD_EVENT, self.authenticated) 26 XmlStreamFactory.addBootstrap(xmlstream.INIT_FAILED_EVENT, self.init_failed) 27 connector = SRVConnector(reactor, 'xmpp-client', jid_user.host, XmlStreamFactory) 28 connector.connect() 29 self.finished = Deferred() 30 31 def rawDataIn(self, buf): 32 print "RECV: %s" % unicode(buf, 'utf-8').encode('ascii', 'replace') 33 34 def rawDataOut(self, buf): 35 print "SEND: %s" % unicode(buf, 'utf-8').encode('ascii', 'replace') 36 37 def connected(self, xs): 38 xs.rawDataInFn = self.rawDataIn 39 xs.rawDataOutFn = self.rawDataOut 40 print 'Connected.' 41 self.xmlstream = xs 42 # 43 print 'Initializers', xs.initializers 44 print 'Authenticator', xs.authenticator 45 print 'Am I initialized?', xs.initiating 46 # Log trafic out 47 48 def disconnected(self, xs): 49 print 'Disconnected.' 50 self.finished.callback(None) 51 52 def authenticated(self, xs): 53 print "Authenticated." 54 presence = domish.Element((None, 'presence')) 55 xs.send(presence) 56 self.reactor.callLater(5, xs.sendFooter) 57 58 def send(self, message): 59 print 'Send', message 60 61 def init_failed(self, failure): 62 print "Initialization failed. Failure:" 63 print failure 64 # self.xmlstream.sendFooter() 65 # self.xmlstream.authenticator.initializeStream()
On 2013-03-15 08:32, rakdeFR wrote:
Hi!
I did some searches about my problem and didn't find any thing that match in the archives.
I'm trying to do a simple jabber client with the twisted framework in order to automatically send messages.
The server is a prosody server, and enabled the tls and iq auth.
So far, I can connect to the server, and can't login.
Before going into the problem you might be having, are you referring to non-SASL authentication [1]? If so, that way of authenticating is obsolete since 2008 and all XMPP clients and servers are required to do SASL authentication instead. Does that Prosody server have SASL explicitly disabled? It would also be useful to have the traffic log. Be sure to redact (encoded) credentials. [1] http://xmpp.org/extensions/xep-0078.html -- ralphm
participants (2)
-
rakdeFR
-
Ralph Meijer