It looks like extReceived() is a method of SSHSession.Channel.SSHChannel <https://twistedmatrix.com/documents/8.1.0/api/twisted.conch.ssh.session.SSHSession.html#extReceived>. You can access it through the protocol's transport.
self.transport.conn.channels[0].extReceived() ~Sean On Fri, Apr 5, 2019 at 6:27 AM Sereysethy TOUCH <touch.sereyse...@gmail.com> wrote: > Hello, > > I am implementing a program using SSHCommandClientEndpoint, the program > works fine (dataReceived got calls) but when the server send an error > message (stderr..), the function extReceived in my protocol never gets > called, instead it only calls the one in the SSHChannel as I can see in the > log (got extended data 1 b': No such file or directory\n'). How to override > that? Or how to connect it to my protocol? > > I adapted the program found on Twisted website. > > Thanks, > Sethy > > from twisted.conch.endpoints import SSHCommandClientEndpoint > from twisted.internet.protocol import Factory, Protocol > from twisted.python import log > import sys > from twisted.internet.defer import Deferred > > class NoiseProtocol(Protocol): > def connectionMade(self): > print("connectionMade") > self.finished = Deferred() > self.strings = ["bif", "pow", "zot"] > self.sendNoise() > > def sendNoise(self): > if self.strings: > self.transport.write(self.strings.pop(0) + "\n") > else: > self.transport.loseConnection() > > > def dataReceived(self, data): > print("Server says:", data) > self.sendNoise() > > def extReceived(self, dataType, data): > print("extReceived") > > def connectionLost(self, reason): > self.finished.callback(None) > > command = b"cat unknownfile" > > username = b"XXXX" > password = b"XXXX" > host = b"server" > port = 22 > > endpoint = SSHCommandClientEndpoint.newConnection( > reactor, command, username, host, port, > password=password, agentEndpoint=None) > > factory = Factory() > factory.protocol = NoiseProtocol > > d = endpoint.connect(factory) > d.addCallback(lambda proto: proto.finished) > log.startLogging(sys.stdout, setStdout=0) > reactor.run() > _______________________________________________ > Twisted-Python mailing list > Twisted-Python@twistedmatrix.com > https://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python >
_______________________________________________ Twisted-Python mailing list Twisted-Python@twistedmatrix.com https://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python