You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by gn...@apache.org on 2013/07/19 07:52:24 UTC

[4/4] git commit: [SSHD-238] Improve channel closing behaviours and make sure no packets can be sent after the MSG_CHANNEL_CLOSE has been sent

[SSHD-238] Improve channel closing behaviours and make sure no packets can be sent after the MSG_CHANNEL_CLOSE has been sent

Project: http://git-wip-us.apache.org/repos/asf/mina-sshd/repo
Commit: http://git-wip-us.apache.org/repos/asf/mina-sshd/commit/833cedee
Tree: http://git-wip-us.apache.org/repos/asf/mina-sshd/tree/833cedee
Diff: http://git-wip-us.apache.org/repos/asf/mina-sshd/diff/833cedee

Branch: refs/heads/master
Commit: 833cedeefc43a4febdd93210e8857f1ab3d95e33
Parents: 9952e99
Author: Guillaume Nodet <gn...@apache.org>
Authored: Fri Jul 19 07:52:13 2013 +0200
Committer: Guillaume Nodet <gn...@apache.org>
Committed: Fri Jul 19 07:52:13 2013 +0200

----------------------------------------------------------------------
 .../agent/local/ChannelAgentForwarding.java     |  2 +-
 .../sshd/agent/unix/ChannelAgentForwarding.java |  2 +-
 .../client/channel/AbstractClientChannel.java   |  2 +-
 .../sshd/client/channel/ChannelDirectTcpip.java |  2 +-
 .../apache/sshd/client/channel/ChannelExec.java |  2 +-
 .../sshd/client/channel/ChannelSession.java     |  2 +-
 .../sshd/client/channel/ChannelShell.java       |  8 ++--
 .../sshd/client/channel/ChannelSubsystem.java   |  2 +-
 .../sshd/common/channel/AbstractChannel.java    | 47 +++++++++++++++++---
 .../common/channel/ChannelOutputStream.java     |  2 +-
 .../sshd/common/forward/TcpipClientChannel.java |  2 +-
 .../sshd/common/forward/TcpipServerChannel.java |  2 +-
 .../sshd/common/session/AbstractSession.java    |  6 +++
 .../server/channel/AbstractServerChannel.java   |  2 +-
 .../sshd/server/channel/ChannelSession.java     | 26 +++++------
 .../sshd/server/x11/X11ForwardSupport.java      |  2 +-
 16 files changed, 75 insertions(+), 36 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/833cedee/sshd-core/src/main/java/org/apache/sshd/agent/local/ChannelAgentForwarding.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/agent/local/ChannelAgentForwarding.java b/sshd-core/src/main/java/org/apache/sshd/agent/local/ChannelAgentForwarding.java
index 0536a52..002cb65 100644
--- a/sshd-core/src/main/java/org/apache/sshd/agent/local/ChannelAgentForwarding.java
+++ b/sshd-core/src/main/java/org/apache/sshd/agent/local/ChannelAgentForwarding.java
@@ -117,7 +117,7 @@ public class ChannelAgentForwarding extends AbstractServerChannel {
         log.info("Received channel request: {}", type);
         buffer = session.createBuffer(SshConstants.Message.SSH_MSG_CHANNEL_FAILURE, 0);
         buffer.putInt(recipient);
-        session.writePacket(buffer);
+        writePacket(buffer);
     }
 
     protected class AgentClient extends AbstractAgentClient {

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/833cedee/sshd-core/src/main/java/org/apache/sshd/agent/unix/ChannelAgentForwarding.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/agent/unix/ChannelAgentForwarding.java b/sshd-core/src/main/java/org/apache/sshd/agent/unix/ChannelAgentForwarding.java
index c88bb8f..0acbe04 100644
--- a/sshd-core/src/main/java/org/apache/sshd/agent/unix/ChannelAgentForwarding.java
+++ b/sshd-core/src/main/java/org/apache/sshd/agent/unix/ChannelAgentForwarding.java
@@ -143,7 +143,7 @@ public class ChannelAgentForwarding extends AbstractServerChannel {
         log.info("Received channel request: {}", type);
         buffer = session.createBuffer(SshConstants.Message.SSH_MSG_CHANNEL_FAILURE, 0);
         buffer.putInt(recipient);
-        session.writePacket(buffer);
+        writePacket(buffer);
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/833cedee/sshd-core/src/main/java/org/apache/sshd/client/channel/AbstractClientChannel.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/client/channel/AbstractClientChannel.java b/sshd-core/src/main/java/org/apache/sshd/client/channel/AbstractClientChannel.java
index 5ef9703..d247b0d 100644
--- a/sshd-core/src/main/java/org/apache/sshd/client/channel/AbstractClientChannel.java
+++ b/sshd-core/src/main/java/org/apache/sshd/client/channel/AbstractClientChannel.java
@@ -176,7 +176,7 @@ public abstract class AbstractClientChannel extends AbstractChannel implements C
         buffer.putInt(id);
         buffer.putInt(localWindow.getSize());
         buffer.putInt(localWindow.getPacketSize());
-        session.writePacket(buffer);
+        writePacket(buffer);
         return openFuture;
     }
 

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/833cedee/sshd-core/src/main/java/org/apache/sshd/client/channel/ChannelDirectTcpip.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/client/channel/ChannelDirectTcpip.java b/sshd-core/src/main/java/org/apache/sshd/client/channel/ChannelDirectTcpip.java
index a0438d0..83b6186 100644
--- a/sshd-core/src/main/java/org/apache/sshd/client/channel/ChannelDirectTcpip.java
+++ b/sshd-core/src/main/java/org/apache/sshd/client/channel/ChannelDirectTcpip.java
@@ -75,7 +75,7 @@ public class ChannelDirectTcpip extends AbstractClientChannel {
         buffer.putInt(remote.getPort());
         buffer.putString(local.getHostName());
         buffer.putInt(local.getPort());
-        session.writePacket(buffer);
+        writePacket(buffer);
         return openFuture;
     }
 

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/833cedee/sshd-core/src/main/java/org/apache/sshd/client/channel/ChannelExec.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/client/channel/ChannelExec.java b/sshd-core/src/main/java/org/apache/sshd/client/channel/ChannelExec.java
index 30972f3..756a854 100644
--- a/sshd-core/src/main/java/org/apache/sshd/client/channel/ChannelExec.java
+++ b/sshd-core/src/main/java/org/apache/sshd/client/channel/ChannelExec.java
@@ -45,7 +45,7 @@ public class ChannelExec extends ChannelSession {
         buffer.putString("exec");
         buffer.putBoolean(false);
         buffer.putString(command);
-        session.writePacket(buffer);
+        writePacket(buffer);
 
     }
 }

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/833cedee/sshd-core/src/main/java/org/apache/sshd/client/channel/ChannelSession.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/client/channel/ChannelSession.java b/sshd-core/src/main/java/org/apache/sshd/client/channel/ChannelSession.java
index 9e08e9c..dd05ab8 100644
--- a/sshd-core/src/main/java/org/apache/sshd/client/channel/ChannelSession.java
+++ b/sshd-core/src/main/java/org/apache/sshd/client/channel/ChannelSession.java
@@ -85,7 +85,7 @@ public class ChannelSession extends AbstractClientChannel {
                     buffer.wpos(wpos2 + len);
                     remoteWindow.waitAndConsume(len);
                     log.debug("Send SSH_MSG_CHANNEL_DATA on channel {}", id);
-                    session.writePacket(buffer);
+                    writePacket(buffer);
                 } else {
                     sendEof();
                     break;

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/833cedee/sshd-core/src/main/java/org/apache/sshd/client/channel/ChannelShell.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/client/channel/ChannelShell.java b/sshd-core/src/main/java/org/apache/sshd/client/channel/ChannelShell.java
index 117b73d..3c3fca4 100644
--- a/sshd-core/src/main/java/org/apache/sshd/client/channel/ChannelShell.java
+++ b/sshd-core/src/main/java/org/apache/sshd/client/channel/ChannelShell.java
@@ -158,7 +158,7 @@ public class ChannelShell extends ChannelSession {
             buffer.putInt(recipient);
             buffer.putString("auth-agent-req@openssh.com");
             buffer.putBoolean(false);
-            session.writePacket(buffer);
+            writePacket(buffer);
         }
 
         if (usePty) {
@@ -179,7 +179,7 @@ public class ChannelShell extends ChannelSession {
             }
             modes.putByte((byte) 0);
             buffer.putBytes(modes.getCompactData());
-            session.writePacket(buffer);
+            writePacket(buffer);
         }
 
         if (!env.isEmpty()) {
@@ -191,7 +191,7 @@ public class ChannelShell extends ChannelSession {
                 buffer.putBoolean(false);
                 buffer.putString(entry.getKey());
                 buffer.putString(entry.getValue());
-                session.writePacket(buffer);
+                writePacket(buffer);
             }
         }
 
@@ -200,7 +200,7 @@ public class ChannelShell extends ChannelSession {
         buffer.putInt(recipient);
         buffer.putString("shell");
         buffer.putBoolean(false);
-        session.writePacket(buffer);
+        writePacket(buffer);
 
     }
 

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/833cedee/sshd-core/src/main/java/org/apache/sshd/client/channel/ChannelSubsystem.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/client/channel/ChannelSubsystem.java b/sshd-core/src/main/java/org/apache/sshd/client/channel/ChannelSubsystem.java
index 5bbce8e..5833b80 100644
--- a/sshd-core/src/main/java/org/apache/sshd/client/channel/ChannelSubsystem.java
+++ b/sshd-core/src/main/java/org/apache/sshd/client/channel/ChannelSubsystem.java
@@ -45,7 +45,7 @@ public class ChannelSubsystem extends ChannelSession {
         buffer.putString("subsystem");
         buffer.putBoolean(false);
         buffer.putString(subsystem);
-        session.writePacket(buffer);
+        writePacket(buffer);
 
     }
 }

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/833cedee/sshd-core/src/main/java/org/apache/sshd/common/channel/AbstractChannel.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/common/channel/AbstractChannel.java b/sshd-core/src/main/java/org/apache/sshd/common/channel/AbstractChannel.java
index c6c4ce1..0ae6180 100644
--- a/sshd-core/src/main/java/org/apache/sshd/common/channel/AbstractChannel.java
+++ b/sshd-core/src/main/java/org/apache/sshd/common/channel/AbstractChannel.java
@@ -19,7 +19,10 @@
 package org.apache.sshd.common.channel;
 
 import java.io.IOException;
+import java.io.InterruptedIOException;
 
+import org.apache.mina.core.future.IoFutureListener;
+import org.apache.mina.core.future.WriteFuture;
 import org.apache.sshd.common.Channel;
 import org.apache.sshd.common.FactoryManager;
 import org.apache.sshd.common.Session;
@@ -51,6 +54,7 @@ public abstract class AbstractChannel implements Channel {
     protected boolean eof;
     protected final CloseFuture closeFuture = new DefaultCloseFuture(lock);
     protected boolean closing;
+    protected boolean closedByOtherSide;
 
     public int getId() {
         return id;
@@ -79,6 +83,9 @@ public abstract class AbstractChannel implements Channel {
     }
 
     public CloseFuture close(boolean immediately) {
+        if (closeFuture.isClosed()) {
+            return closeFuture;
+        }
         try {
             synchronized (lock) {
                 if (immediately) {
@@ -92,7 +99,18 @@ public abstract class AbstractChannel implements Channel {
                         log.debug("Send SSH_MSG_CHANNEL_CLOSE on channel {}", id);
                         Buffer buffer = session.createBuffer(SshConstants.Message.SSH_MSG_CHANNEL_CLOSE, 0);
                         buffer.putInt(recipient);
-                        session.writePacket(buffer);
+                        session.writePacket(buffer).addListener(new IoFutureListener<WriteFuture>() {
+                            public void operationComplete(WriteFuture future) {
+                                synchronized (lock) {
+                                    if (closedByOtherSide) {
+                                        log.debug("Message SSH_MSG_CHANNEL_CLOSE written on channel {}", id);
+                                        closeFuture.setClosed();
+                                        doClose();
+                                        lock.notifyAll();
+                                    }
+                                }
+                            }
+                        });
                     }
                 }
             }
@@ -106,15 +124,30 @@ public abstract class AbstractChannel implements Channel {
     public void handleClose() throws IOException {
         log.debug("Received SSH_MSG_CHANNEL_CLOSE on channel {}", id);
         synchronized (lock) {
-            close(false).setClosed();
-            doClose();
-            lock.notifyAll();
+            closedByOtherSide = !closing;
+            if (closedByOtherSide) {
+                close(false);
+            } else {
+                close(false).setClosed();
+                doClose();
+                lock.notifyAll();
+            }
         }
     }
 
     protected void doClose() {
     }
 
+    protected void writePacket(Buffer buffer) throws IOException {
+        synchronized (lock) {
+            if (!closing) {
+                session.writePacket(buffer);
+            } else {
+                log.debug("Discarding output packet because channel is being closed");
+            }
+        }
+    }
+
     public void handleData(Buffer buffer) throws IOException {
         int len = buffer.getInt();
         if (len < 0 || len > 32768) {
@@ -134,7 +167,7 @@ public abstract class AbstractChannel implements Channel {
             log.debug("Send SSH_MSG_CHANNEL_FAILURE on channel {}", id);
             buffer = session.createBuffer(SshConstants.Message.SSH_MSG_CHANNEL_FAILURE, 0);
             buffer.putInt(recipient);
-            session.writePacket(buffer);
+            writePacket(buffer);
             return;
         }
         int len = buffer.getInt();
@@ -175,7 +208,7 @@ public abstract class AbstractChannel implements Channel {
         log.debug("Send SSH_MSG_CHANNEL_EOF on channel {}", id);
         Buffer buffer = session.createBuffer(SshConstants.Message.SSH_MSG_CHANNEL_EOF, 0);
         buffer.putInt(recipient);
-        session.writePacket(buffer);
+        writePacket(buffer);
     }
 
     protected void configureWindow() {
@@ -189,6 +222,6 @@ public abstract class AbstractChannel implements Channel {
         Buffer buffer = session.createBuffer(SshConstants.Message.SSH_MSG_CHANNEL_WINDOW_ADJUST, 0);
         buffer.putInt(recipient);
         buffer.putInt(len);
-        session.writePacket(buffer);
+        writePacket(buffer);
     }
 }

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/833cedee/sshd-core/src/main/java/org/apache/sshd/common/channel/ChannelOutputStream.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/common/channel/ChannelOutputStream.java b/sshd-core/src/main/java/org/apache/sshd/common/channel/ChannelOutputStream.java
index 62a20be..e0441ba 100644
--- a/sshd-core/src/main/java/org/apache/sshd/common/channel/ChannelOutputStream.java
+++ b/sshd-core/src/main/java/org/apache/sshd/common/channel/ChannelOutputStream.java
@@ -129,7 +129,7 @@ public class ChannelOutputStream extends OutputStream {
                 lastSize = length;
                 remoteWindow.waitAndConsume(length);
                 log.debug("Send {} on channel {}", cmd, channel.getId());
-                channel.getSession().writePacket(buf);
+                channel.writePacket(buf);
             }
         } catch (WindowClosedException e) {
             closed = true;

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/833cedee/sshd-core/src/main/java/org/apache/sshd/common/forward/TcpipClientChannel.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/common/forward/TcpipClientChannel.java b/sshd-core/src/main/java/org/apache/sshd/common/forward/TcpipClientChannel.java
index d2fa64e..03b3070 100644
--- a/sshd-core/src/main/java/org/apache/sshd/common/forward/TcpipClientChannel.java
+++ b/sshd-core/src/main/java/org/apache/sshd/common/forward/TcpipClientChannel.java
@@ -86,7 +86,7 @@ public class TcpipClientChannel extends AbstractClientChannel {
         buffer.putInt(dst.getPort());
         buffer.putString(src.getAddress().getHostAddress());
         buffer.putInt(src.getPort());
-        session.writePacket(buffer);
+        writePacket(buffer);
         return openFuture;
     }
 

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/833cedee/sshd-core/src/main/java/org/apache/sshd/common/forward/TcpipServerChannel.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/common/forward/TcpipServerChannel.java b/sshd-core/src/main/java/org/apache/sshd/common/forward/TcpipServerChannel.java
index c709794..4c9fa28 100644
--- a/sshd-core/src/main/java/org/apache/sshd/common/forward/TcpipServerChannel.java
+++ b/sshd-core/src/main/java/org/apache/sshd/common/forward/TcpipServerChannel.java
@@ -206,6 +206,6 @@ public class TcpipServerChannel extends AbstractServerChannel {
         log.info("Received channel request: {}", type);
         buffer = session.createBuffer(SshConstants.Message.SSH_MSG_CHANNEL_FAILURE, 0);
         buffer.putInt(recipient);
-        session.writePacket(buffer);
+        writePacket(buffer);
     }
 }

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/833cedee/sshd-core/src/main/java/org/apache/sshd/common/session/AbstractSession.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/common/session/AbstractSession.java b/sshd-core/src/main/java/org/apache/sshd/common/session/AbstractSession.java
index a8c26b2..60e4b47 100644
--- a/sshd-core/src/main/java/org/apache/sshd/common/session/AbstractSession.java
+++ b/sshd-core/src/main/java/org/apache/sshd/common/session/AbstractSession.java
@@ -279,6 +279,12 @@ public abstract class AbstractSession implements Session {
      * @throws IOException
      */
     public void exceptionCaught(Throwable t) {
+        // Ignore exceptions that happen while closing
+        synchronized (lock) {
+            if (closing) {
+                return;
+            }
+        }
         log.warn("Exception caught", t);
         try {
             if (t instanceof SshException) {

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/833cedee/sshd-core/src/main/java/org/apache/sshd/server/channel/AbstractServerChannel.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/server/channel/AbstractServerChannel.java b/sshd-core/src/main/java/org/apache/sshd/server/channel/AbstractServerChannel.java
index 4ef6509..4ab0412 100644
--- a/sshd-core/src/main/java/org/apache/sshd/server/channel/AbstractServerChannel.java
+++ b/sshd-core/src/main/java/org/apache/sshd/server/channel/AbstractServerChannel.java
@@ -65,7 +65,7 @@ public abstract class AbstractServerChannel extends AbstractChannel {
             buffer.putString("exit-status");
             buffer.putByte((byte) 0);
             buffer.putInt(v);
-            session.writePacket(buffer);
+            writePacket(buffer);
         }
     }
 

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/833cedee/sshd-core/src/main/java/org/apache/sshd/server/channel/ChannelSession.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/server/channel/ChannelSession.java b/sshd-core/src/main/java/org/apache/sshd/server/channel/ChannelSession.java
index bf4ae77..b2d8b13 100644
--- a/sshd-core/src/main/java/org/apache/sshd/server/channel/ChannelSession.java
+++ b/sshd-core/src/main/java/org/apache/sshd/server/channel/ChannelSession.java
@@ -200,7 +200,7 @@ public class ChannelSession extends AbstractServerChannel {
         if (!handleRequest(type, buffer)) {
             buffer = session.createBuffer(SshConstants.Message.SSH_MSG_CHANNEL_FAILURE, 0);
             buffer.putInt(recipient);
-            session.writePacket(buffer);
+            writePacket(buffer);
         }
     }
 
@@ -277,7 +277,7 @@ public class ChannelSession extends AbstractServerChannel {
         if (wantReply) {
             buffer = session.createBuffer(SshConstants.Message.SSH_MSG_CHANNEL_SUCCESS, 0);
             buffer.putInt(recipient);
-            session.writePacket(buffer);
+            writePacket(buffer);
         }
         return true;
     }
@@ -307,7 +307,7 @@ public class ChannelSession extends AbstractServerChannel {
         if (wantReply) {
             buffer = session.createBuffer(SshConstants.Message.SSH_MSG_CHANNEL_SUCCESS, 0);
             buffer.putInt(recipient);
-            session.writePacket(buffer);
+            writePacket(buffer);
         }
         return true;
     }
@@ -328,7 +328,7 @@ public class ChannelSession extends AbstractServerChannel {
         if (wantReply) {
             buffer = session.createBuffer(SshConstants.Message.SSH_MSG_CHANNEL_SUCCESS, 0);
             buffer.putInt(recipient);
-            session.writePacket(buffer);
+            writePacket(buffer);
         }
         return true;
     }
@@ -349,7 +349,7 @@ public class ChannelSession extends AbstractServerChannel {
         if (wantReply) {
             buffer = session.createBuffer(SshConstants.Message.SSH_MSG_CHANNEL_SUCCESS, 0);
             buffer.putInt(recipient);
-            session.writePacket(buffer);
+            writePacket(buffer);
         }
         return true;
     }
@@ -364,7 +364,7 @@ public class ChannelSession extends AbstractServerChannel {
         if (wantReply) {
             buffer = session.createBuffer(SshConstants.Message.SSH_MSG_CHANNEL_SUCCESS, 0);
             buffer.putInt(recipient);
-            session.writePacket(buffer);
+            writePacket(buffer);
         }
         command.start(getEnvironment());
         return true;
@@ -390,7 +390,7 @@ public class ChannelSession extends AbstractServerChannel {
         if (wantReply) {
             buffer = session.createBuffer(SshConstants.Message.SSH_MSG_CHANNEL_SUCCESS, 0);
             buffer.putInt(recipient);
-            session.writePacket(buffer);
+            writePacket(buffer);
         }
         // Launch command
         command.start(getEnvironment());
@@ -414,7 +414,7 @@ public class ChannelSession extends AbstractServerChannel {
         if (wantReply) {
             buffer = session.createBuffer(SshConstants.Message.SSH_MSG_CHANNEL_SUCCESS, 0);
             buffer.putInt(recipient);
-            session.writePacket(buffer);
+            writePacket(buffer);
         }
         // Launch command
         command.start(getEnvironment());
@@ -492,7 +492,7 @@ public class ChannelSession extends AbstractServerChannel {
             if (wantReply) {
                 buffer = session.createBuffer(SshConstants.Message.SSH_MSG_CHANNEL_FAILURE, 0);
                 buffer.putInt(recipient);
-                session.writePacket(buffer);
+                writePacket(buffer);
             }
             return true;
         }
@@ -503,7 +503,7 @@ public class ChannelSession extends AbstractServerChannel {
         if (wantReply) {
             buffer = session.createBuffer(SshConstants.Message.SSH_MSG_CHANNEL_SUCCESS, 0);
             buffer.putInt(recipient);
-            session.writePacket(buffer);
+            writePacket(buffer);
         }
         return true;
     }
@@ -517,7 +517,7 @@ public class ChannelSession extends AbstractServerChannel {
             if (wantReply) {
                 buffer = session.createBuffer(SshConstants.Message.SSH_MSG_CHANNEL_FAILURE, 0);
                 buffer.putInt(recipient);
-                session.writePacket(buffer);
+                writePacket(buffer);
             }
             return true;
         }
@@ -528,7 +528,7 @@ public class ChannelSession extends AbstractServerChannel {
             if (wantReply) {
                 buffer = session.createBuffer(SshConstants.Message.SSH_MSG_CHANNEL_FAILURE, 0);
                 buffer.putInt(recipient);
-                session.writePacket(buffer);
+                writePacket(buffer);
             }
             return true;
         }
@@ -538,7 +538,7 @@ public class ChannelSession extends AbstractServerChannel {
         if (wantReply) {
             buffer = session.createBuffer(SshConstants.Message.SSH_MSG_CHANNEL_SUCCESS, 0);
             buffer.putInt(recipient);
-            session.writePacket(buffer);
+            writePacket(buffer);
         }
         return true;
     }

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/833cedee/sshd-core/src/main/java/org/apache/sshd/server/x11/X11ForwardSupport.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/server/x11/X11ForwardSupport.java b/sshd-core/src/main/java/org/apache/sshd/server/x11/X11ForwardSupport.java
index dac12a3..23479a3 100644
--- a/sshd-core/src/main/java/org/apache/sshd/server/x11/X11ForwardSupport.java
+++ b/sshd-core/src/main/java/org/apache/sshd/server/x11/X11ForwardSupport.java
@@ -197,7 +197,7 @@ public class X11ForwardSupport extends IoHandlerAdapter {
             buffer.putInt(localWindow.getPacketSize());
             buffer.putString(remote.getAddress().getHostAddress());
             buffer.putInt(remote.getPort());
-            session.writePacket(buffer);
+            writePacket(buffer);
             return openFuture;
         }