def connectionLost(self, reason): """ Clean up when the connection has been lost. When the loss of connection was initiated by the client due to a timeout, the L{_timedOut} flag will be set. When it was initiated by the client due to an error in the server greeting, L{_greetingError} will be set to the server response minus the status indicator. @type reason: L{Failure <twisted.python.failure.Failure>} @param reason: The reason the connection was terminated. """ if self.timeout > 0: self.setTimeout(None) if self._timedOut: reason = error.TimeoutError() elif self._greetingError: reason = ServerErrorResponse(self._greetingError) d = [] if self._waiting is not None: d.append(self._waiting) self._waiting = None if self._blockedQueue is not None: d.extend([deferred for (deferred, f, a) in self._blockedQueue]) self._blockedQueue = None for w in d: w.errback(reason)
def state_SHORT(self, line): """ Handle server responses for the SHORT state in which the server is expected to send a single line response. Parse the response and fire the deferred which is waiting on receipt of a complete response. Transition the state back to WAITING. @type line: L{bytes} @param line: A line received from the server. @rtype: L{bytes} @return: The next state. """ deferred, self._waiting = self._waiting, None self._unblock() code, status = _codeStatusSplit(line) if code == OK: deferred.callback(status) else: deferred.errback(ServerErrorResponse(status)) return "WAITING"
def state_LONG_INITIAL(self, line): """ Handle server responses for the LONG_INITIAL state in which the server is expected to send the first line of a multi-line response. Parse the response. On an OK response, transition the state to LONG. On an ERR response, cleanup and transition the state to WAITING. @type line: L{bytes} @param line: A line received from the server. @rtype: L{bytes} @return: The next state. """ code, status = _codeStatusSplit(line) if code == OK: return "LONG" consumer = self._consumer deferred = self._waiting self._consumer = self._waiting = self._xform = None self._unblock() deferred.errback(ServerErrorResponse(status, consumer)) return "WAITING"