You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by lg...@apache.org on 2016/02/21 12:39:49 UTC

[2/5] mina-sshd git commit: Separate TcpipServerChannel data writing success/failure handling to different methods

Separate TcpipServerChannel data writing success/failure handling to different methods


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

Branch: refs/heads/master
Commit: d421ac4a8382b98ef2d3309aebdb4f7282dbe8f9
Parents: 845fc3c
Author: Lyor Goldstein <ly...@gmail.com>
Authored: Sun Feb 21 12:22:14 2016 +0200
Committer: Lyor Goldstein <ly...@gmail.com>
Committed: Sun Feb 21 12:22:14 2016 +0200

----------------------------------------------------------------------
 .../sshd/server/forward/TcpipServerChannel.java | 59 +++++++++++---------
 1 file changed, 34 insertions(+), 25 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/d421ac4a/sshd-core/src/main/java/org/apache/sshd/server/forward/TcpipServerChannel.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/server/forward/TcpipServerChannel.java b/sshd-core/src/main/java/org/apache/sshd/server/forward/TcpipServerChannel.java
index 4b66a24..d558d74 100644
--- a/sshd-core/src/main/java/org/apache/sshd/server/forward/TcpipServerChannel.java
+++ b/sshd-core/src/main/java/org/apache/sshd/server/forward/TcpipServerChannel.java
@@ -52,7 +52,6 @@ import org.apache.sshd.common.util.net.SshdSocketAddress;
 import org.apache.sshd.common.util.threads.ExecutorServiceCarrier;
 import org.apache.sshd.common.util.threads.ThreadUtils;
 import org.apache.sshd.server.channel.AbstractServerChannel;
-import org.apache.sshd.server.channel.ServerChannel;
 
 /**
  * TODO Add javadoc
@@ -348,35 +347,14 @@ public class TcpipServerChannel extends AbstractServerChannel {
     @Override
     protected void doWriteData(byte[] data, int off, final int len) throws IOException {
         // Make sure we copy the data as the incoming buffer may be reused
-        Buffer buf = ByteArrayBuffer.getCompactClone(data, off, len);
-        final ServerChannel channel = this;
+        final Buffer buf = ByteArrayBuffer.getCompactClone(data, off, len);
         ioSession.write(buf).addListener(new SshFutureListener<IoWriteFuture>() {
             @Override
-            @SuppressWarnings("synthetic-access")
             public void operationComplete(IoWriteFuture future) {
-                Session session = getSession();
                 if (future.isWritten()) {
-                    try {
-                        Window wLocal = getLocalWindow();
-                        wLocal.consumeAndCheck(len);
-                    } catch (IOException e) {
-                        if (log.isDebugEnabled()) {
-                            log.debug("doWriteData({}) failed ({}) to consume len={}: {}",
-                                      channel, e.getClass().getSimpleName(), len, e.getMessage());
-                        }
-                        session.exceptionCaught(e);
-                    }
+                    handleWriteDataSuccess(SshConstants.SSH_MSG_CHANNEL_DATA, buf.array(), 0, len);
                 } else {
-                    Throwable t = future.getException();
-                    if (log.isDebugEnabled()) {
-                        log.debug("doWriteData({}) failed ({}) to write len={}: {}",
-                                  channel, t.getClass().getSimpleName(), len, t.getMessage());
-                    }
-
-                    if (log.isTraceEnabled()) {
-                        log.trace("doWriteData(" + channel + ") len=" + len + " write failure details", t);
-                    }
-                    session.exceptionCaught(t);
+                    handleWriteDataFailure(SshConstants.SSH_MSG_CHANNEL_DATA, buf.array(), 0, len, future.getException());
                 }
             }
         });
@@ -386,4 +364,35 @@ public class TcpipServerChannel extends AbstractServerChannel {
     protected void doWriteExtendedData(byte[] data, int off, int len) throws IOException {
         throw new UnsupportedOperationException(type + "Tcpip channel does not support extended data");
     }
+
+    protected void handleWriteDataSuccess(byte cmd, byte[] data, int off, int len) {
+        Session session = getSession();
+        try {
+            Window wLocal = getLocalWindow();
+            wLocal.consumeAndCheck(len);
+        } catch (Throwable e) {
+            if (log.isDebugEnabled()) {
+                log.debug("handleWriteDataSuccess({})[{}] failed ({}) to consume len={}: {}",
+                          this, SshConstants.getCommandMessageName(cmd & 0xFF),
+                          e.getClass().getSimpleName(), len, e.getMessage());
+            }
+            session.exceptionCaught(e);
+        }
+    }
+
+    protected void handleWriteDataFailure(byte cmd, byte[] data, int off, int len, Throwable t) {
+        Session session = getSession();
+        if (log.isDebugEnabled()) {
+            log.debug("handleWriteDataFailure({})[{}] failed ({}) to write len={}: {}",
+                      this, SshConstants.getCommandMessageName(cmd & 0xFF),
+                      t.getClass().getSimpleName(), len, t.getMessage());
+        }
+
+        if (log.isTraceEnabled()) {
+            log.trace("doWriteData(" + this + ")[" + SshConstants.getCommandMessageName(cmd & 0xFF) + "]"
+                    + " len=" + len + " write failure details", t);
+        }
+
+        session.exceptionCaught(t);
+    }
 }