[Twisted-Python] M2Crypto+Twisted, part 2

Heikki Toivonen heikki at osafoundation.org
Tue Dec 7 18:46:52 MST 2004


A while back I integrated M2Crypto into Twisted, but the architecture 
was not deemed good then (it was adding more of the SSL cruft in tcp.py 
etc.).

James Knight pointed me to TLS Lite, which had achieved similar 
functionality by using ProtocolWrapper and WrappingFactory and all the 
code was outside of Twisted. (Thanks James!)

I've now got an implementation of M2Crypto + Twisted integration using 
the TLS Lite approach - no changes in Twisted required. (Client only for 
now and not yet fully cleaned up, but all the important pieces should be 
there.)

However, I've run into some problems and I am not sure if they are bugs 
in Twisted or if I am using these interfaces wrong. Maybe you can help.

The most interesting piece of the code is my TLSProtocolWrapper that 
inherits from ProtocolWrapper. See 
http://lxr.osafoundation.org/source/internal/m2crypto/M2Crypto/SSL/TwistedProtocolWrapper.py

Now, this seems to works perfectly with the echoclient samples when the 
SSL connection has no errors.

When there is an error in the SSL connection, and I call 
connectionLost(), I end up with a traceback that feels like it might be 
a Twisted bug. Or if I am not allowed to call that, how do I signal that 
I want to break the connection? Here's the traceback:

Traceback (most recent call last):
   File "twisted_ssl/real.py", line 71, in main
     reactor.run()
   File 
"c:\builds\chandler\chandler\release\bin\lib\site-packages\twisted\intern
et\default.py", line 123, in run
     self.mainLoop()
   File 
"c:\builds\chandler\chandler\release\bin\lib\site-packages\twisted\intern
et\default.py", line 134, in mainLoop
     self.doIteration(t)
   File 
"c:\builds\chandler\chandler\release\bin\lib\site-packages\twisted\intern
et\default.py", line 529, in doSelect
     _logrun(selectable, _drdw, selectable, method, dict)
--- <exception caught here> ---
   File 
"c:\builds\chandler\chandler\release\bin\lib\site-packages\twisted\python
\log.py", line 65, in callWithLogger
     return callWithContext({"system": lp}, func, *args, **kw)
   File 
"c:\builds\chandler\chandler\release\bin\lib\site-packages\twisted\python
\log.py", line 52, in callWithContext
     return context.call({ILogContext: newCtx}, func, *args, **kw)
   File 
"c:\builds\chandler\chandler\release\bin\lib\site-packages\twisted\python
\context.py", line 43, in callWithContext
     return func(*args,**kw)
   File 
"c:\builds\chandler\chandler\release\bin\lib\site-packages\twisted\intern
et\default.py", line 552, in _doReadOrWrite
     selectable.connectionLost(f)
   File 
"c:\builds\chandler\chandler\release\bin\lib\site-packages\twisted\intern
et\tcp.py", line 452, in connectionLost
     Connection.connectionLost(self, reason)
   File 
"c:\builds\chandler\chandler\release\bin\lib\site-packages\twisted\intern
et\tcp.py", line 295, in connectionLost
     protocol.connectionLost(reason)
   File 
"c:\builds\chandler\chandler\release\bin\lib\site-packages\M2Crypto\SSL\T
wistedProtocolWrapper.py", line 207, in connectionLost
     ProtocolWrapper.connectionLost(self, reason)
   File 
"c:\builds\chandler\chandler\release\bin\lib\site-packages\twisted\protoc
ols\policies.py", line 88, in connectionLost
     self.factory.unregisterProtocol(self)
   File 
"c:\builds\chandler\chandler\release\bin\lib\site-packages\twisted\protoc
ols\policies.py", line 127, in unregisterProtocol
     del self.protocols[p]
exceptions.KeyError: <twisted.internet.tcp.Client to 
('www.verisign.com', 443) a
t 10fa800>


When I try to hook this up into an IMAP4 client, it seems like my 
wrapper is getting bypassed somewhere. With debug on, I see:

MyProtocolWrapper.__init__
MyProtocolWrapper.makeConnection
MyProtocolWrapper.connectionMade

then nothing, until the connection finally times out. I haven't looked 
much into this one yet. Any guesses as to where I should be looking at? 
Or is it not possible to use the ProtocolWrapper here?

I can upload full source packages as well if anyone needs them.

-- 
   Heikki Toivonen


-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 249 bytes
Desc: OpenPGP digital signature
URL: </pipermail/twisted-python/attachments/20041207/d4c3545a/attachment.sig>


More information about the Twisted-Python mailing list