On 02:22 pm, twis...@patrickmylund.com wrote: >Hi Lee, > >Here is a complete example that works with Twisted 11.0. LINEMODE >itself is enabled at connect, but it has different modes that >determine what is sent when by the client. (See section 2.2 of >http://www.faqs.org/rfcs/rfc1184.html)
You can manage this without a TelnetTransport subclass: #!/usr/bin/env python from twisted.internet.protocol import Factory from twisted.conch.telnet import ( TelnetProtocol, StatefulTelnetProtocol, TelnetTransport) from twisted.conch.telnet import DO, DONT, WILL, WONT LINEMODE = chr(34) LINEMODE_EDIT = chr(1) + chr(1) LINEMODE_TRAPSIG = chr(1) + chr(2) LINEMODE_MODEACK = chr(1) + chr(4) LINEMODE_SOFTTAB = chr(1) + chr(8) LINEMODE_LITECHO = chr(1) + chr(16) class LineModeProtocol(TelnetProtocol): def connectionMade(self): print("Connection made!") self.lines = True # Ask client to begin sub-negotation of linemode self.transport.do(LINEMODE) def connectionLost(self, reason): print("Connection lost!") def enableRemote(self, option): if option == LINEMODE: # The normal (buffered) mode self.transport.requestNegotiation( LINEMODE, LINEMODE_EDIT) return True return False def dataReceived(self, data): if self.lines: line = data.rstrip() print("data received (normal): " + line) if line == "gounbuffered": # Only trap signals locally self.transport.requestNegotiation( LINEMODE, LINEMODE_TRAPSIG) self.lines = False else: # manually buffer data here print("data received (linemode): " + data) if data == "n": # Change to edit mode self.transport.requestNegotiation( LINEMODE, LINEMODE_EDIT) self.lines = True class LineModeFactory(Factory): def buildProtocol(self, addr): return TelnetTransport(LineModeProtocol) if __name__ == '__main__': from twisted.internet import reactor port = 2222 factory = LineModeFactory() reactor.listenTCP(port, factory) reactor.run() Jean-Paul _______________________________________________ Twisted-Python mailing list Twisted-Python@twistedmatrix.com http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python