Hi, I'm using SSHD 0.6.0 on Oracle JVM 1.6.0_23-b05 on Windows 7 x64. I have a custom server channel subclassing AbstractServerChannel. I'm wondering if my handling of SSH window adjustment message is correct. I'm sending a window adjustment everytime the window size decreases by half. Apparenly, some OpenSSH implementation works this way. This code is talking to another C++ process built with libssh2 1.3.0.
protected void doWriteData(byte[] p_Data, int p_Offset, int p_Length) throws IOException { // The localWindow.consumeAndCheck() send too much window adjustments. localWindow.consume(p_Length); int size = localWindow.getSize(); int maxSize = localWindow.getMaxSize(); if (size < maxSize/2) { localWindow.expand(maxSize - size); sendWindowAdjust(maxSize - size); } // Do stuff ... } Before that, I was calling localWindow.consumeAndCheck(p_Length) but I found out it sends quite a lot of these adjustment down the wire. In Window.java, we have this public void consumeAndCheck(int len) throws IOException { synchronized (lock) { size -= len; if (log.isTraceEnabled()) { log.trace("Consume " + name + " by " + len + " down to " + size); } check(maxSize); } } public void check(int maxFree) throws IOException { synchronized (lock) { if ((size < maxFree) && (maxFree - size > packetSize * 3 || size < maxFree / 2)) { if (log.isDebugEnabled()) { log.debug("Increase " + name + " by " + (maxFree - size) + " up to " + maxFree); } channel.sendWindowAdjust(maxFree - size); size = maxFree; } } } This is sending a window adjustment every 3 * packetSize, so every 96kb in my case since the packet size is 32kb. Is there a practical reason for doing this instead of sending it every half of the maximum size ? Thanks, Simon Paradis