[Twisted-Python] how to get extReceived call from SSHCommandClientEndpoint

Sereysethy TOUCH touch.sereysethy at gmail.com
Fri Apr 5 12:07:54 MDT 2019


Hi Sean,

Yes it is a method of SSHChannel, but when I read the source code, the
_CommandChannel only implements dataReceived which calls protocol's method
but it does not implement extReceived.

When you suggest to call it like that
(self.transport.conn.channels[0].extReceived()),
how do I know when extended data is received?

For now I have subclassed _CommandChannel and also SSHCommandClientEndpoint
in order to add extReceived.

Sethy

On Fri, Apr 5, 2019 at 6:35 PM Sean DiZazzo <sean.dizazzo at gmail.com> wrote:

> 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.sereysethy at 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 at twistedmatrix.com
>> https://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python
>>
> _______________________________________________
> Twisted-Python mailing list
> Twisted-Python at twistedmatrix.com
> https://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: </pipermail/twisted-python/attachments/20190405/b4b5e46d/attachment-0002.html>


More information about the Twisted-Python mailing list