On Sunday 30 May 2010 10:04:37 Doron Fediuck wrote:
> 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.
> 
Anyone ?

Reply via email to