Hi !
I'm implementing some basic client functionality using sshd client.
I found a case where I need to implement something of this concept:
"gzip /tmp/sample.txt | ssh u...@some.host.com gunzip -c > /tmp/sample.txt"

On my implementation the code (using sshd client) is running an exec channel
of the gzip command into stdout. Then I should be able to use the stdout stream
and use it to unzip the file locally.

Here's a snip of my implementation:

           // Create the GZIP output stream
           ByteArrayOutputStream baosGZipped = new ByteArrayOutputStream ();
           GZIPOutputStream gzOut = new GZIPOutputStream(baosGZipped);

           // Open the input file
           FileInputStream src = new FileInputStream(sourceFileName);

           byte[] buf = new byte[1024];
           int len;
           while ((len = src.read(buf)) > 0) {
                    gzOut.write(buf, 0, len);
           }
           src.close();

           // Complete the GZIP file
           gzOut.finish();
           gzOut.flush();
           gzOut.close();

         //create channel
        ClientChannel channel = session.createExecChannel("gunzip -c >" + 
destFile);

        ByteArrayInputStream in = new 
ByteArrayInputStream(baosGZipped.toByteArray());
        channel.setIn(in);
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        channel.setOut(out);
        ByteArrayOutputStream err = new ByteArrayOutputStream();
        channel.setErr(err);

        //open channel
        channel.open();

        //wait close
        channel.waitFor(ClientChannel.CLOSED, 0);


What I discovered is that this will never end !!!
The problem is, that there's a pumpInputStream thread in 
(org/apache/sshd/client/channel/ChannelSession.java),
that will never end until closeFuture.isClosed. Since this does not happen, the 
unzip in the remote host doesn't end,
and the channel will never close. This prevents the client from a proper pipe 
implementation.

There should be a method to properly end this while-loop thus the remote side 
will be able to finish and close.
Can you please open a bug for this issue ?

Thanks !
Doron.

Reply via email to