Hello,

I have written an implementation of CommandFactory for my SSH server (by
using Mina SSHD 0.8.0) and I'm asking a small question. On my OpenSSH
client I get the output stream, only when the command exists. However,
this command is very long (and sometimes blocks ;)) and I would like to
have the output on the fly. When I use a "shell" channel, I have no problem.

Here is my implementation of the method
org.apache.sshd.server.Command::start(Environment):

public void start(final Environment env) throws IOException {

            int returnCode = 0;
            String message = null;

            PrintStream pout = new PrintStream(out, true);
            PrintStream perr = new PrintStream(err, true);
            try {
                final CommandSession session =
commandProcessor.createSession(in, pout, perr);

                session.execute(command);
            } catch (Exception e) {
                returnCode = 1;
                message = e.getMessage();
                perr.println(message);
                throw (IOException) new IOException("Unable to execute
the command").initCause(e);
            } finally {
                close(in, pout, perr);
                callback.onExit(returnCode, message);
            }
        }

The classes CommandProcessor and CommandSession are provided by Apache
Felix Gogo.

With an exec channel, I can see that the flush is performed only once
time (when exiting), in the method
org.apache.mina.core.polling.AbstractPollingIoProcessor::flush.

Do you have an idea, please, of how to enable a kind of auto-flush for
the output stream when using the exec channel ?

Cheers,
Loris

Reply via email to