diff --git a/src/main/java/net/schmizz/sshj/AbstractService.java b/src/main/java/net/schmizz/sshj/AbstractService.java index 8dea6d1f..0b27047f 100644 --- a/src/main/java/net/schmizz/sshj/AbstractService.java +++ b/src/main/java/net/schmizz/sshj/AbstractService.java @@ -35,13 +35,10 @@ public abstract class AbstractService protected final String name; /** Transport layer */ protected final Transport trans; - /** Timeout for blocking operations */ - protected int timeout; public AbstractService(String name, Transport trans) { this.name = name; this.trans = trans; - timeout = trans.getTimeout(); } @Override @@ -77,12 +74,6 @@ public abstract class AbstractService trans.reqService(this); } - public int getTimeout() { - return this.timeout; - } - public void setTimeout(int timeout) { - this.timeout = timeout; - } } diff --git a/src/main/java/net/schmizz/sshj/connection/Connection.java b/src/main/java/net/schmizz/sshj/connection/Connection.java index ef98811d..713ab656 100644 --- a/src/main/java/net/schmizz/sshj/connection/Connection.java +++ b/src/main/java/net/schmizz/sshj/connection/Connection.java @@ -138,16 +138,16 @@ public interface Connection { Transport getTransport(); /** - * @return the {@code timeout} in seconds that this connection uses for blocking operations and recommends to any - * {@link Channel other} {@link ForwardedChannelOpener classes} that ask for it. + * @return the {@code timeout} in milliseconds that this connection uses for blocking operations and recommends to + * any {@link Channel other} {@link ForwardedChannelOpener classes} that ask for it. */ - int getTimeout(); + int getTimeoutMs(); /** * Set the {@code timeout} this connection uses for blocking operations and recommends to any {@link Channel other} * {@link ForwardedChannelOpener classes} that ask for it. * - * @param timeout timeout in seconds + * @param timeout timeout in milliseconds */ - void setTimeout(int timeout); + void setTimeoutMs(int timeout); } \ No newline at end of file diff --git a/src/main/java/net/schmizz/sshj/connection/ConnectionImpl.java b/src/main/java/net/schmizz/sshj/connection/ConnectionImpl.java index 7e2c7e96..1005a859 100644 --- a/src/main/java/net/schmizz/sshj/connection/ConnectionImpl.java +++ b/src/main/java/net/schmizz/sshj/connection/ConnectionImpl.java @@ -54,6 +54,8 @@ public class ConnectionImpl private long windowSize = 2048 * 1024; private int maxPacketSize = 32 * 1024; + private volatile int timeoutMs; + /** * Create with an associated {@link Transport}. * @@ -61,6 +63,7 @@ public class ConnectionImpl */ public ConnectionImpl(Transport trans) { super("ssh-connection", trans); + timeoutMs = trans.getTimeout() * 1000; } @Override @@ -251,4 +254,14 @@ public class ConnectionImpl channels.clear(); } + @Override + public void setTimeoutMs(int timeoutMs) { + this.timeoutMs = timeoutMs; + } + + @Override + public int getTimeoutMs() { + return timeoutMs; + } + } \ No newline at end of file diff --git a/src/main/java/net/schmizz/sshj/connection/channel/AbstractChannel.java b/src/main/java/net/schmizz/sshj/connection/channel/AbstractChannel.java index 26a8e4d6..31672706 100644 --- a/src/main/java/net/schmizz/sshj/connection/channel/AbstractChannel.java +++ b/src/main/java/net/schmizz/sshj/connection/channel/AbstractChannel.java @@ -265,7 +265,7 @@ public abstract class AbstractChannel if (!closeEvent.inError()) throw e; } - closeEvent.await(conn.getTimeout(), TimeUnit.SECONDS); + closeEvent.await(conn.getTimeoutMs(), TimeUnit.MILLISECONDS); } } finally { openCloseLock.unlock(); diff --git a/src/main/java/net/schmizz/sshj/connection/channel/direct/AbstractDirectChannel.java b/src/main/java/net/schmizz/sshj/connection/channel/direct/AbstractDirectChannel.java index b6c5779f..09127efc 100644 --- a/src/main/java/net/schmizz/sshj/connection/channel/direct/AbstractDirectChannel.java +++ b/src/main/java/net/schmizz/sshj/connection/channel/direct/AbstractDirectChannel.java @@ -65,7 +65,7 @@ public abstract class AbstractDirectChannel public void open() throws ConnectionException, TransportException { trans.write(buildOpenReq()); - openEvent.await(conn.getTimeout(), TimeUnit.SECONDS); + openEvent.await(conn.getTimeoutMs(), TimeUnit.MILLISECONDS); } private void gotOpenConfirmation(SSHPacket buf) diff --git a/src/main/java/net/schmizz/sshj/connection/channel/direct/SessionChannel.java b/src/main/java/net/schmizz/sshj/connection/channel/direct/SessionChannel.java index d01b0f0a..f4f03280 100644 --- a/src/main/java/net/schmizz/sshj/connection/channel/direct/SessionChannel.java +++ b/src/main/java/net/schmizz/sshj/connection/channel/direct/SessionChannel.java @@ -91,7 +91,7 @@ public class SessionChannel .putUInt32(width) .putUInt32(height) .putBytes(PTYMode.encode(modes)) - ).await(conn.getTimeout(), TimeUnit.SECONDS); + ).await(conn.getTimeoutMs(), TimeUnit.MILLISECONDS); } @Override @@ -119,7 +119,7 @@ public class SessionChannel checkReuse(); log.info("Will request to exec `{}`", command); sendChannelRequest("exec", true, new Buffer.PlainBuffer().putString(command)) - .await(conn.getTimeout(), TimeUnit.SECONDS); + .await(conn.getTimeoutMs(), TimeUnit.MILLISECONDS); usedUp = true; return this; } @@ -175,14 +175,14 @@ public class SessionChannel .putString(authProto) .putString(authCookie) .putUInt32(screen) - ).await(conn.getTimeout(), TimeUnit.SECONDS); + ).await(conn.getTimeoutMs(), TimeUnit.MILLISECONDS); } @Override public void setEnvVar(String name, String value) throws ConnectionException, TransportException { sendChannelRequest("env", true, new Buffer.PlainBuffer().putString(name).putString(value)) - .await(conn.getTimeout(), TimeUnit.SECONDS); + .await(conn.getTimeoutMs(), TimeUnit.MILLISECONDS); } @Override @@ -195,7 +195,7 @@ public class SessionChannel public Shell startShell() throws ConnectionException, TransportException { checkReuse(); - sendChannelRequest("shell", true, null).await(conn.getTimeout(), TimeUnit.SECONDS); + sendChannelRequest("shell", true, null).await(conn.getTimeoutMs(), TimeUnit.MILLISECONDS); usedUp = true; return this; } @@ -206,7 +206,7 @@ public class SessionChannel checkReuse(); log.info("Will request `{}` subsystem", name); sendChannelRequest("subsystem", true, new Buffer.PlainBuffer().putString(name)) - .await(conn.getTimeout(), TimeUnit.SECONDS); + .await(conn.getTimeoutMs(), TimeUnit.MILLISECONDS); usedUp = true; return this; } diff --git a/src/main/java/net/schmizz/sshj/connection/channel/forwarded/RemotePortForwarder.java b/src/main/java/net/schmizz/sshj/connection/channel/forwarded/RemotePortForwarder.java index 5d8f1b6d..c5803b8e 100644 --- a/src/main/java/net/schmizz/sshj/connection/channel/forwarded/RemotePortForwarder.java +++ b/src/main/java/net/schmizz/sshj/connection/channel/forwarded/RemotePortForwarder.java @@ -201,7 +201,7 @@ public class RemotePortForwarder final byte[] specifics = new Buffer.PlainBuffer().putString(forward.address).putUInt32(forward.port) .getCompactData(); return conn.sendGlobalRequest(reqName, true, specifics) - .retrieve(conn.getTimeout(), TimeUnit.SECONDS); + .retrieve(conn.getTimeoutMs(), TimeUnit.MILLISECONDS); } /** @return the active forwards. */