| Index: third_party/tlslite/tlslite/integration/AsyncStateMachine.py
|
| diff --git a/third_party/tlslite/tlslite/integration/AsyncStateMachine.py b/third_party/tlslite/tlslite/integration/AsyncStateMachine.py
|
| deleted file mode 100644
|
| index 01c7efe688ed898bd084fce2726cabe33c3d4336..0000000000000000000000000000000000000000
|
| --- a/third_party/tlslite/tlslite/integration/AsyncStateMachine.py
|
| +++ /dev/null
|
| @@ -1,235 +0,0 @@
|
| -"""
|
| -A state machine for using TLS Lite with asynchronous I/O.
|
| -"""
|
| -
|
| -class AsyncStateMachine:
|
| - """
|
| - This is an abstract class that's used to integrate TLS Lite with
|
| - asyncore and Twisted.
|
| -
|
| - This class signals wantsReadsEvent() and wantsWriteEvent(). When
|
| - the underlying socket has become readable or writeable, the event
|
| - should be passed to this class by calling inReadEvent() or
|
| - inWriteEvent(). This class will then try to read or write through
|
| - the socket, and will update its state appropriately.
|
| -
|
| - This class will forward higher-level events to its subclass. For
|
| - example, when a complete TLS record has been received,
|
| - outReadEvent() will be called with the decrypted data.
|
| - """
|
| -
|
| - def __init__(self):
|
| - self._clear()
|
| -
|
| - def _clear(self):
|
| - #These store the various asynchronous operations (i.e.
|
| - #generators). Only one of them, at most, is ever active at a
|
| - #time.
|
| - self.handshaker = None
|
| - self.closer = None
|
| - self.reader = None
|
| - self.writer = None
|
| -
|
| - #This stores the result from the last call to the
|
| - #currently active operation. If 0 it indicates that the
|
| - #operation wants to read, if 1 it indicates that the
|
| - #operation wants to write. If None, there is no active
|
| - #operation.
|
| - self.result = None
|
| -
|
| - def _checkAssert(self, maxActive=1):
|
| - #This checks that only one operation, at most, is
|
| - #active, and that self.result is set appropriately.
|
| - activeOps = 0
|
| - if self.handshaker:
|
| - activeOps += 1
|
| - if self.closer:
|
| - activeOps += 1
|
| - if self.reader:
|
| - activeOps += 1
|
| - if self.writer:
|
| - activeOps += 1
|
| -
|
| - if self.result == None:
|
| - if activeOps != 0:
|
| - raise AssertionError()
|
| - elif self.result in (0,1):
|
| - if activeOps != 1:
|
| - raise AssertionError()
|
| - else:
|
| - raise AssertionError()
|
| - if activeOps > maxActive:
|
| - raise AssertionError()
|
| -
|
| - def wantsReadEvent(self):
|
| - """If the state machine wants to read.
|
| -
|
| - If an operation is active, this returns whether or not the
|
| - operation wants to read from the socket. If an operation is
|
| - not active, this returns None.
|
| -
|
| - @rtype: bool or None
|
| - @return: If the state machine wants to read.
|
| - """
|
| - if self.result != None:
|
| - return self.result == 0
|
| - return None
|
| -
|
| - def wantsWriteEvent(self):
|
| - """If the state machine wants to write.
|
| -
|
| - If an operation is active, this returns whether or not the
|
| - operation wants to write to the socket. If an operation is
|
| - not active, this returns None.
|
| -
|
| - @rtype: bool or None
|
| - @return: If the state machine wants to write.
|
| - """
|
| - if self.result != None:
|
| - return self.result == 1
|
| - return None
|
| -
|
| - def outConnectEvent(self):
|
| - """Called when a handshake operation completes.
|
| -
|
| - May be overridden in subclass.
|
| - """
|
| - pass
|
| -
|
| - def outCloseEvent(self):
|
| - """Called when a close operation completes.
|
| -
|
| - May be overridden in subclass.
|
| - """
|
| - pass
|
| -
|
| - def outReadEvent(self, readBuffer):
|
| - """Called when a read operation completes.
|
| -
|
| - May be overridden in subclass."""
|
| - pass
|
| -
|
| - def outWriteEvent(self):
|
| - """Called when a write operation completes.
|
| -
|
| - May be overridden in subclass."""
|
| - pass
|
| -
|
| - def inReadEvent(self):
|
| - """Tell the state machine it can read from the socket."""
|
| - try:
|
| - self._checkAssert()
|
| - if self.handshaker:
|
| - self._doHandshakeOp()
|
| - elif self.closer:
|
| - self._doCloseOp()
|
| - elif self.reader:
|
| - self._doReadOp()
|
| - elif self.writer:
|
| - self._doWriteOp()
|
| - else:
|
| - self.reader = self.tlsConnection.readAsync(16384)
|
| - self._doReadOp()
|
| - except:
|
| - self._clear()
|
| - raise
|
| -
|
| - def inWriteEvent(self):
|
| - """Tell the state machine it can write to the socket."""
|
| - try:
|
| - self._checkAssert()
|
| - if self.handshaker:
|
| - self._doHandshakeOp()
|
| - elif self.closer:
|
| - self._doCloseOp()
|
| - elif self.reader:
|
| - self._doReadOp()
|
| - elif self.writer:
|
| - self._doWriteOp()
|
| - else:
|
| - self.outWriteEvent()
|
| - except:
|
| - self._clear()
|
| - raise
|
| -
|
| - def _doHandshakeOp(self):
|
| - try:
|
| - self.result = self.handshaker.next()
|
| - except StopIteration:
|
| - self.handshaker = None
|
| - self.result = None
|
| - self.outConnectEvent()
|
| -
|
| - def _doCloseOp(self):
|
| - try:
|
| - self.result = self.closer.next()
|
| - except StopIteration:
|
| - self.closer = None
|
| - self.result = None
|
| - self.outCloseEvent()
|
| -
|
| - def _doReadOp(self):
|
| - self.result = self.reader.next()
|
| - if not self.result in (0,1):
|
| - readBuffer = self.result
|
| - self.reader = None
|
| - self.result = None
|
| - self.outReadEvent(readBuffer)
|
| -
|
| - def _doWriteOp(self):
|
| - try:
|
| - self.result = self.writer.next()
|
| - except StopIteration:
|
| - self.writer = None
|
| - self.result = None
|
| -
|
| - def setHandshakeOp(self, handshaker):
|
| - """Start a handshake operation.
|
| -
|
| - @type handshaker: generator
|
| - @param handshaker: A generator created by using one of the
|
| - asynchronous handshake functions (i.e. handshakeServerAsync, or
|
| - handshakeClientxxx(..., async=True).
|
| - """
|
| - try:
|
| - self._checkAssert(0)
|
| - self.handshaker = handshaker
|
| - self._doHandshakeOp()
|
| - except:
|
| - self._clear()
|
| - raise
|
| -
|
| - def setServerHandshakeOp(self, **args):
|
| - """Start a handshake operation.
|
| -
|
| - The arguments passed to this function will be forwarded to
|
| - L{tlslite.TLSConnection.TLSConnection.handshakeServerAsync}.
|
| - """
|
| - handshaker = self.tlsConnection.handshakeServerAsync(**args)
|
| - self.setHandshakeOp(handshaker)
|
| -
|
| - def setCloseOp(self):
|
| - """Start a close operation.
|
| - """
|
| - try:
|
| - self._checkAssert(0)
|
| - self.closer = self.tlsConnection.closeAsync()
|
| - self._doCloseOp()
|
| - except:
|
| - self._clear()
|
| - raise
|
| -
|
| - def setWriteOp(self, writeBuffer):
|
| - """Start a write operation.
|
| -
|
| - @type writeBuffer: str
|
| - @param writeBuffer: The string to transmit.
|
| - """
|
| - try:
|
| - self._checkAssert(0)
|
| - self.writer = self.tlsConnection.writeAsync(writeBuffer)
|
| - self._doWriteOp()
|
| - except:
|
| - self._clear()
|
| - raise
|
| -
|
|
|