bodewig     2003/10/24 01:31:36

  Modified:    src/main/org/apache/tools/ant/taskdefs/optional/ssh
                        AbstractSshMessage.java
  Log:
  Properly parser return codes from server.
  
  Also fixes PR: 23986
  Suggested by: Atsuhiko Yamanaka <ymnk at jcraft dot com>
  
  Revision  Changes    Path
  1.5       +37 -5     
ant/src/main/org/apache/tools/ant/taskdefs/optional/ssh/AbstractSshMessage.java
  
  Index: AbstractSshMessage.java
  ===================================================================
  RCS file: 
/home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/optional/ssh/AbstractSshMessage.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- AbstractSshMessage.java   9 Jul 2003 12:12:59 -0000       1.4
  +++ AbstractSshMessage.java   24 Oct 2003 08:31:35 -0000      1.5
  @@ -64,6 +64,8 @@
   import java.io.InputStream;
   import java.text.NumberFormat;
   
  +import org.apache.tools.ant.BuildException;
  +
   public abstract class AbstractSshMessage {
   
       private Session session;
  @@ -91,11 +93,41 @@
           out.flush();
       }
   
  -    protected void waitForAck(InputStream in) throws IOException {
  -        int b = 0;
  -        do {
  -            b = in.read();
  -        } while (b > 0);
  +    /**
  +     * Reads the response, throws a BuildException if the response
  +     * indicates an error.
  +     */
  +    protected void waitForAck(InputStream in) 
  +        throws IOException, BuildException {
  +        int b = in.read();
  +
  +        // b may be 0 for success,
  +        //          1 for error,
  +        //          2 for fatal error,
  +
  +        if (b == -1) {
  +            // didn't receive any response
  +            throw new BuildException("No response from server");
  +        } else if (b != 0) {
  +            StringBuffer sb = new StringBuffer();
  +
  +            int c = in.read();
  +            while (c > 0 && c != '\n') {
  +                sb.append((char) c);
  +                c = in.read();
  +            }
  +            
  +            if (b == 1) {
  +                throw new BuildException("server indicated an error: "
  +                                         + sb.toString());
  +            } else if (b == 2) {
  +                throw new BuildException("server indicated a fatal error: "
  +                                         + sb.toString());
  +            } else {
  +                throw new BuildException("unknown response, code " + b
  +                                         + " message: " + sb.toString());
  +            }
  +        }
       }
   
       public abstract void execute() throws IOException, JSchException;
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to