[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