Index: third_party/tlslite/tlslite/integration/TLSAsyncDispatcherMixIn.py |
diff --git a/third_party/tlslite/tlslite/integration/TLSAsyncDispatcherMixIn.py b/third_party/tlslite/tlslite/integration/TLSAsyncDispatcherMixIn.py |
deleted file mode 100644 |
index fd9868ff1c4e0e4c313017ab31f1a917086709d9..0000000000000000000000000000000000000000 |
--- a/third_party/tlslite/tlslite/integration/TLSAsyncDispatcherMixIn.py |
+++ /dev/null |
@@ -1,139 +0,0 @@ |
-"""TLS Lite + asyncore.""" |
- |
- |
-import asyncore |
-from tlslite.TLSConnection import TLSConnection |
-from AsyncStateMachine import AsyncStateMachine |
- |
- |
-class TLSAsyncDispatcherMixIn(AsyncStateMachine): |
- """This class can be "mixed in" with an |
- L{asyncore.dispatcher} to add TLS support. |
- |
- This class essentially sits between the dispatcher and the select |
- loop, intercepting events and only calling the dispatcher when |
- applicable. |
- |
- In the case of handle_read(), a read operation will be activated, |
- and when it completes, the bytes will be placed in a buffer where |
- the dispatcher can retrieve them by calling recv(), and the |
- dispatcher's handle_read() will be called. |
- |
- In the case of handle_write(), the dispatcher's handle_write() will |
- be called, and when it calls send(), a write operation will be |
- activated. |
- |
- To use this class, you must combine it with an asyncore.dispatcher, |
- and pass in a handshake operation with setServerHandshakeOp(). |
- |
- Below is an example of using this class with medusa. This class is |
- mixed in with http_channel to create http_tls_channel. Note: |
- 1. the mix-in is listed first in the inheritance list |
- |
- 2. the input buffer size must be at least 16K, otherwise the |
- dispatcher might not read all the bytes from the TLS layer, |
- leaving some bytes in limbo. |
- |
- 3. IE seems to have a problem receiving a whole HTTP response in a |
- single TLS record, so HTML pages containing '\\r\\n\\r\\n' won't |
- be displayed on IE. |
- |
- Add the following text into 'start_medusa.py', in the 'HTTP Server' |
- section:: |
- |
- from tlslite.api import * |
- s = open("./serverX509Cert.pem").read() |
- x509 = X509() |
- x509.parse(s) |
- certChain = X509CertChain([x509]) |
- |
- s = open("./serverX509Key.pem").read() |
- privateKey = parsePEMKey(s, private=True) |
- |
- class http_tls_channel(TLSAsyncDispatcherMixIn, |
- http_server.http_channel): |
- ac_in_buffer_size = 16384 |
- |
- def __init__ (self, server, conn, addr): |
- http_server.http_channel.__init__(self, server, conn, addr) |
- TLSAsyncDispatcherMixIn.__init__(self, conn) |
- self.tlsConnection.ignoreAbruptClose = True |
- self.setServerHandshakeOp(certChain=certChain, |
- privateKey=privateKey) |
- |
- hs.channel_class = http_tls_channel |
- |
- If the TLS layer raises an exception, the exception will be caught |
- in asyncore.dispatcher, which will call close() on this class. The |
- TLS layer always closes the TLS connection before raising an |
- exception, so the close operation will complete right away, causing |
- asyncore.dispatcher.close() to be called, which closes the socket |
- and removes this instance from the asyncore loop. |
- |
- """ |
- |
- |
- def __init__(self, sock=None): |
- AsyncStateMachine.__init__(self) |
- |
- if sock: |
- self.tlsConnection = TLSConnection(sock) |
- |
- #Calculate the sibling I'm being mixed in with. |
- #This is necessary since we override functions |
- #like readable(), handle_read(), etc., but we |
- #also want to call the sibling's versions. |
- for cl in self.__class__.__bases__: |
- if cl != TLSAsyncDispatcherMixIn and cl != AsyncStateMachine: |
- self.siblingClass = cl |
- break |
- else: |
- raise AssertionError() |
- |
- def readable(self): |
- result = self.wantsReadEvent() |
- if result != None: |
- return result |
- return self.siblingClass.readable(self) |
- |
- def writable(self): |
- result = self.wantsWriteEvent() |
- if result != None: |
- return result |
- return self.siblingClass.writable(self) |
- |
- def handle_read(self): |
- self.inReadEvent() |
- |
- def handle_write(self): |
- self.inWriteEvent() |
- |
- def outConnectEvent(self): |
- self.siblingClass.handle_connect(self) |
- |
- def outCloseEvent(self): |
- asyncore.dispatcher.close(self) |
- |
- def outReadEvent(self, readBuffer): |
- self.readBuffer = readBuffer |
- self.siblingClass.handle_read(self) |
- |
- def outWriteEvent(self): |
- self.siblingClass.handle_write(self) |
- |
- def recv(self, bufferSize=16384): |
- if bufferSize < 16384 or self.readBuffer == None: |
- raise AssertionError() |
- returnValue = self.readBuffer |
- self.readBuffer = None |
- return returnValue |
- |
- def send(self, writeBuffer): |
- self.setWriteOp(writeBuffer) |
- return len(writeBuffer) |
- |
- def close(self): |
- if hasattr(self, "tlsConnection"): |
- self.setCloseOp() |
- else: |
- asyncore.dispatcher.close(self) |