[SSHD-459] Make Buffer an abstract class

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

Branch: refs/heads/master
Commit: 9f0bb1bceeaa3d613fc971a70fcd86e3e20f3345
Parents: 7ccbd06
Author: Lyor Goldstein <[email protected]>
Authored: Thu May 14 03:44:36 2015 +0300
Committer: Lyor Goldstein <[email protected]>
Committed: Thu May 14 03:44:36 2015 +0300

----------------------------------------------------------------------
 .../sshd/agent/common/AbstractAgentClient.java  |  25 +-
 .../sshd/agent/common/AbstractAgentProxy.java   |  30 +-
 .../sshd/agent/local/AgentForwardedChannel.java |  10 +-
 .../agent/local/ChannelAgentForwarding.java     |  13 +-
 .../org/apache/sshd/agent/unix/AgentClient.java |  11 +-
 .../org/apache/sshd/agent/unix/AgentServer.java |   8 +-
 .../sshd/agent/unix/ChannelAgentForwarding.java |   2 +-
 .../java/org/apache/sshd/client/UserAuth.java   |   2 +-
 .../auth/UserAuthKeyboardInteractive.java       |   2 +-
 .../sshd/client/auth/UserAuthPassword.java      |   2 +-
 .../sshd/client/auth/UserAuthPublicKey.java     |  13 +-
 .../client/channel/AbstractClientChannel.java   |  29 +-
 .../sshd/client/channel/ChannelDirectTcpip.java |   2 +-
 .../apache/sshd/client/channel/ChannelExec.java |   2 +-
 .../sshd/client/channel/ChannelShell.java       |   2 +-
 .../sshd/client/channel/ChannelSubsystem.java   |   2 +-
 .../channel/PtyCapableChannelSession.java       |  15 +-
 .../org/apache/sshd/client/kex/DHGClient.java   |  19 +-
 .../org/apache/sshd/client/kex/DHGEXClient.java |  20 +-
 .../keyverifier/RequiredServerKeyVerifier.java  |   2 +-
 .../client/session/ClientConnectionService.java |   2 +-
 .../sshd/client/session/ClientSessionImpl.java  |   2 +-
 .../client/session/ClientUserAuthService.java   |   2 +-
 .../sshd/client/sftp/DefaultSftpClient.java     | 156 ++++-
 .../java/org/apache/sshd/common/Channel.java    |   2 +-
 .../org/apache/sshd/common/KeyExchange.java     |   2 +-
 .../org/apache/sshd/common/RequestHandler.java  |   2 +-
 .../java/org/apache/sshd/common/Service.java    |   2 +-
 .../java/org/apache/sshd/common/Session.java    |   2 +-
 .../sshd/common/channel/AbstractChannel.java    |  32 +-
 .../common/channel/BufferedIoOutputStream.java  |   2 +-
 .../common/channel/ChannelAsyncInputStream.java |  10 +-
 .../channel/ChannelAsyncOutputStream.java       |   2 +-
 .../common/channel/ChannelOutputStream.java     |   2 +-
 .../common/channel/ChannelPipedInputStream.java |   8 +-
 .../org/apache/sshd/common/cipher/ECCurves.java |   3 +-
 .../sshd/common/compression/Compression.java    |   2 +-
 .../common/compression/CompressionZlib.java     |   2 +-
 .../common/forward/DefaultTcpipForwarder.java   |  20 +-
 .../apache/sshd/common/forward/SocksProxy.java  |  15 +-
 .../sshd/common/forward/TcpipClientChannel.java |  13 +-
 .../sshd/common/forward/TcpipServerChannel.java |  24 +-
 .../apache/sshd/common/io/IoInputStream.java    |   2 +-
 .../apache/sshd/common/io/IoOutputStream.java   |   2 +-
 .../org/apache/sshd/common/io/IoReadFuture.java |   2 +-
 .../org/apache/sshd/common/io/IoSession.java    |   2 +-
 .../apache/sshd/common/io/mina/MinaSession.java |   2 +-
 .../apache/sshd/common/io/mina/MinaSupport.java |   2 +-
 .../apache/sshd/common/io/nio2/Nio2Session.java |   2 +-
 .../session/AbstractConnectionService.java      |   2 +-
 .../sshd/common/session/AbstractSession.java    |  55 +-
 .../sshd/common/signature/SignatureECDSA.java   |   8 +-
 .../org/apache/sshd/common/util/Buffer.java     | 577 -------------------
 .../apache/sshd/common/util/BufferUtils.java    |  73 ---
 .../apache/sshd/common/util/GenericUtils.java   |   1 +
 .../org/apache/sshd/common/util/KeyUtils.java   |   5 +-
 .../apache/sshd/common/util/buffer/Buffer.java  | 489 ++++++++++++++++
 .../common/util/buffer/BufferException.java     |  30 +
 .../sshd/common/util/buffer/BufferUtils.java    |  81 +++
 .../common/util/buffer/ByteArrayBuffer.java     | 178 ++++++
 .../util/io/LoggingFilterOutputStream.java      |   2 +-
 .../java/org/apache/sshd/server/UserAuth.java   |   2 +-
 .../sshd/server/auth/AbstractUserAuth.java      |   2 +-
 .../auth/UserAuthKeyboardInteractive.java       |   2 +-
 .../apache/sshd/server/auth/UserAuthNone.java   |   2 +-
 .../sshd/server/auth/UserAuthPassword.java      |   2 +-
 .../sshd/server/auth/UserAuthPublicKey.java     |  14 +-
 .../sshd/server/auth/gss/UserAuthGSS.java       |  14 +-
 .../server/channel/AbstractServerChannel.java   |   2 +-
 .../sshd/server/channel/AsyncDataReceiver.java  |   6 +-
 .../sshd/server/channel/ChannelSession.java     |  24 +-
 .../server/channel/PuttyRequestHandler.java     |   2 +-
 .../global/CancelTcpipForwardHandler.java       |   2 +-
 .../sshd/server/global/KeepAliveHandler.java    |   2 +-
 .../server/global/NoMoreSessionsHandler.java    |   2 +-
 .../sshd/server/global/TcpipForwardHandler.java |   2 +-
 .../org/apache/sshd/server/kex/DHGEXServer.java |  29 +-
 .../org/apache/sshd/server/kex/DHGServer.java   |  26 +-
 .../sshd/server/session/ServerSession.java      |  13 +-
 .../server/session/ServerUserAuthService.java   |   2 +-
 .../apache/sshd/server/sftp/SftpSubsystem.java  |  63 +-
 .../sshd/server/shell/ProcessShellFactory.java  |  15 +-
 .../sshd/server/x11/X11ForwardSupport.java      |  13 +-
 .../org/apache/sshd/AbstractSessionTest.java    |  23 +-
 .../org/apache/sshd/AuthenticationTest.java     |   2 +-
 .../test/java/org/apache/sshd/ClientTest.java   |  45 +-
 .../org/apache/sshd/SftpFileSystemTest.java     |   4 +-
 .../src/test/java/org/apache/sshd/SftpTest.java |  44 +-
 .../java/org/apache/sshd/WindowAdjustTest.java  |   7 +-
 .../test/java/org/apache/sshd/WindowTest.java   |  56 +-
 .../org/apache/sshd/common/util/BufferTest.java |   8 +-
 .../deprecated/ClientUserAuthServiceOld.java    |   2 +-
 .../org/apache/sshd/deprecated/UserAuth.java    |   2 +-
 .../apache/sshd/deprecated/UserAuthAgent.java   |  12 +-
 .../deprecated/UserAuthKeyboardInteractive.java |   2 +-
 .../sshd/deprecated/UserAuthPassword.java       |   2 +-
 .../sshd/deprecated/UserAuthPublicKey.java      |  12 +-
 .../sshd/server/channel/ChannelSessionTest.java |   8 +-
 .../apache/sshd/util/AsyncEchoShellFactory.java |  19 +-
 .../java/org/apache/sshd/util/BogusChannel.java |   2 +-
 100 files changed, 1522 insertions(+), 1002 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/sshd-core/src/main/java/org/apache/sshd/agent/common/AbstractAgentClient.java
----------------------------------------------------------------------
diff --git 
a/sshd-core/src/main/java/org/apache/sshd/agent/common/AbstractAgentClient.java 
b/sshd-core/src/main/java/org/apache/sshd/agent/common/AbstractAgentClient.java
index e7855d9..6f68856 100644
--- 
a/sshd-core/src/main/java/org/apache/sshd/agent/common/AbstractAgentClient.java
+++ 
b/sshd-core/src/main/java/org/apache/sshd/agent/common/AbstractAgentClient.java
@@ -18,14 +18,6 @@
  */
 package org.apache.sshd.agent.common;
 
-import java.io.IOException;
-import java.security.PublicKey;
-import java.util.List;
-
-import org.apache.sshd.agent.SshAgent;
-import org.apache.sshd.common.util.Buffer;
-import org.apache.sshd.common.util.KeyUtils;
-
 import static org.apache.sshd.agent.SshAgentConstants.SSH2_AGENTC_ADD_IDENTITY;
 import static 
org.apache.sshd.agent.SshAgentConstants.SSH2_AGENTC_REMOVE_ALL_IDENTITIES;
 import static 
org.apache.sshd.agent.SshAgentConstants.SSH2_AGENTC_REMOVE_IDENTITY;
@@ -36,9 +28,18 @@ import static 
org.apache.sshd.agent.SshAgentConstants.SSH2_AGENT_IDENTITIES_ANSW
 import static org.apache.sshd.agent.SshAgentConstants.SSH2_AGENT_SIGN_RESPONSE;
 import static org.apache.sshd.agent.SshAgentConstants.SSH_AGENT_SUCCESS;
 
+import java.io.IOException;
+import java.security.PublicKey;
+import java.util.List;
+
+import org.apache.sshd.agent.SshAgent;
+import org.apache.sshd.common.util.KeyUtils;
+import org.apache.sshd.common.util.buffer.Buffer;
+import org.apache.sshd.common.util.buffer.ByteArrayBuffer;
+
 public abstract class AbstractAgentClient {
 
-    private final Buffer buffer = new Buffer();
+    private final Buffer buffer = new ByteArrayBuffer();
     private final SshAgent agent;
 
     public AbstractAgentClient(SshAgent agent) {
@@ -56,11 +57,11 @@ public abstract class AbstractAgentClient {
         if (buffer.available() < len + 4) {
             return;
         }
-        Buffer rep = new Buffer();
+        Buffer rep = new ByteArrayBuffer();
         rep.putInt(0);
         rep.rpos(rep.wpos());
         try {
-            process(new Buffer(buffer.getBytes()), rep);
+            process(new ByteArrayBuffer(buffer.getBytes()), rep);
         } catch (Exception e) {
             rep.clear();
             rep.putInt(0);
@@ -90,7 +91,7 @@ public abstract class AbstractAgentClient {
                 PublicKey key = req.getPublicKey();
                 byte[] data = req.getBytes();
                 int flags = req.getInt();
-                Buffer sig = new Buffer();
+                Buffer sig = new ByteArrayBuffer();
                 sig.putString(KeyUtils.getKeyType(key));
                 sig.putBytes(agent.sign(key, data));
                 rep.putByte(SSH2_AGENT_SIGN_RESPONSE);

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/sshd-core/src/main/java/org/apache/sshd/agent/common/AbstractAgentProxy.java
----------------------------------------------------------------------
diff --git 
a/sshd-core/src/main/java/org/apache/sshd/agent/common/AbstractAgentProxy.java 
b/sshd-core/src/main/java/org/apache/sshd/agent/common/AbstractAgentProxy.java
index 9960c0d..7af4ee2 100644
--- 
a/sshd-core/src/main/java/org/apache/sshd/agent/common/AbstractAgentProxy.java
+++ 
b/sshd-core/src/main/java/org/apache/sshd/agent/common/AbstractAgentProxy.java
@@ -18,16 +18,6 @@
  */
 package org.apache.sshd.agent.common;
 
-import java.io.IOException;
-import java.security.KeyPair;
-import java.security.PublicKey;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.sshd.agent.SshAgent;
-import org.apache.sshd.common.SshException;
-import org.apache.sshd.common.util.Buffer;
-
 import static org.apache.sshd.agent.SshAgentConstants.SSH2_AGENTC_ADD_IDENTITY;
 import static 
org.apache.sshd.agent.SshAgentConstants.SSH2_AGENTC_REMOVE_ALL_IDENTITIES;
 import static 
org.apache.sshd.agent.SshAgentConstants.SSH2_AGENTC_REMOVE_IDENTITY;
@@ -37,8 +27,20 @@ import static 
org.apache.sshd.agent.SshAgentConstants.SSH2_AGENT_IDENTITIES_ANSW
 import static org.apache.sshd.agent.SshAgentConstants.SSH2_AGENT_SIGN_RESPONSE;
 import static org.apache.sshd.agent.SshAgentConstants.SSH_AGENT_SUCCESS;
 
+import java.io.IOException;
+import java.security.KeyPair;
+import java.security.PublicKey;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.sshd.agent.SshAgent;
+import org.apache.sshd.common.SshException;
+import org.apache.sshd.common.util.buffer.Buffer;
+import org.apache.sshd.common.util.buffer.ByteArrayBuffer;
+
 public abstract class AbstractAgentProxy implements SshAgent {
 
+    @Override
     public List<Pair<PublicKey, String>> getIdentities() throws IOException {
         Buffer buffer = createBuffer(SSH2_AGENTC_REQUEST_IDENTITIES);
         buffer = request(prepare(buffer));
@@ -58,6 +60,7 @@ public abstract class AbstractAgentProxy implements SshAgent {
         return keys;
     }
 
+    @Override
     public byte[] sign(PublicKey key, byte[] data) throws IOException {
         Buffer buffer = createBuffer(SSH2_AGENTC_SIGN_REQUEST);
         buffer.putPublicKey(key);
@@ -67,11 +70,12 @@ public abstract class AbstractAgentProxy implements 
SshAgent {
         if (buffer.getByte() != SSH2_AGENT_SIGN_RESPONSE) {
             throw new SshException("SSH agent failure");
         }
-        Buffer buf = new Buffer(buffer.getBytes());
+        Buffer buf = new ByteArrayBuffer(buffer.getBytes());
         buf.getString(); // algo
         return buf.getBytes();
     }
 
+    @Override
     public void addIdentity(KeyPair key, String comment) throws IOException {
         Buffer buffer = createBuffer(SSH2_AGENTC_ADD_IDENTITY);
         buffer.putKeyPair(key);
@@ -82,6 +86,7 @@ public abstract class AbstractAgentProxy implements SshAgent {
         }
     }
 
+    @Override
     public void removeIdentity(PublicKey key) throws IOException {
         Buffer buffer = createBuffer(SSH2_AGENTC_REMOVE_IDENTITY);
         buffer.putPublicKey(key);
@@ -91,6 +96,7 @@ public abstract class AbstractAgentProxy implements SshAgent {
         }
     }
 
+    @Override
     public void removeAllIdentities() throws IOException {
         Buffer buffer = createBuffer(SSH2_AGENTC_REMOVE_ALL_IDENTITIES);
         buffer = request(prepare(buffer));
@@ -105,7 +111,7 @@ public abstract class AbstractAgentProxy implements 
SshAgent {
     }
 
     protected Buffer createBuffer(byte cmd) {
-        Buffer buffer = new Buffer();
+        Buffer buffer = new ByteArrayBuffer();
         buffer.putInt(0);
         buffer.putByte(cmd);
         return buffer;

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/sshd-core/src/main/java/org/apache/sshd/agent/local/AgentForwardedChannel.java
----------------------------------------------------------------------
diff --git 
a/sshd-core/src/main/java/org/apache/sshd/agent/local/AgentForwardedChannel.java
 
b/sshd-core/src/main/java/org/apache/sshd/agent/local/AgentForwardedChannel.java
index 4f05443..7901af2 100644
--- 
a/sshd-core/src/main/java/org/apache/sshd/agent/local/AgentForwardedChannel.java
+++ 
b/sshd-core/src/main/java/org/apache/sshd/agent/local/AgentForwardedChannel.java
@@ -28,12 +28,13 @@ import org.apache.sshd.agent.common.AbstractAgentProxy;
 import org.apache.sshd.client.channel.AbstractClientChannel;
 import org.apache.sshd.common.SshConstants;
 import org.apache.sshd.common.channel.ChannelOutputStream;
-import org.apache.sshd.common.util.Buffer;
+import org.apache.sshd.common.util.buffer.Buffer;
+import org.apache.sshd.common.util.buffer.ByteArrayBuffer;
 
 public class AgentForwardedChannel extends AbstractClientChannel {
 
     private final Queue<Buffer> messages = new ArrayBlockingQueue<Buffer>(10);
-    private final Buffer receiveBuffer = new Buffer();
+    private final Buffer receiveBuffer = new ByteArrayBuffer();
 
     public AgentForwardedChannel() {
         super("[email protected]");
@@ -77,16 +78,17 @@ public class AgentForwardedChannel extends 
AbstractClientChannel {
         invertedIn = new ChannelOutputStream(this, remoteWindow, log, 
SshConstants.SSH_MSG_CHANNEL_DATA);
     }
 
+    @Override
     protected void doWriteData(byte[] data, int off, int len) throws 
IOException {
         Buffer message = null;
         synchronized (receiveBuffer) {
-            receiveBuffer.putBuffer(new Buffer(data, off, len));
+            receiveBuffer.putBuffer(new ByteArrayBuffer(data, off, len));
             if (receiveBuffer.available() >= 4) {
                 off = receiveBuffer.rpos();
                 len = receiveBuffer.getInt();
                 receiveBuffer.rpos(off);
                 if (receiveBuffer.available() >= 4 + len) {
-                    message = new Buffer(receiveBuffer.getBytes());
+                    message = new ByteArrayBuffer(receiveBuffer.getBytes());
                     receiveBuffer.compact();
                 }
             }

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/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 dfdf288..6691031 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
@@ -30,9 +30,9 @@ import org.apache.sshd.common.NamedFactory;
 import org.apache.sshd.common.SshConstants;
 import org.apache.sshd.common.channel.ChannelOutputStream;
 import org.apache.sshd.common.future.CloseFuture;
-import org.apache.sshd.common.future.SshFuture;
 import org.apache.sshd.common.future.SshFutureListener;
-import org.apache.sshd.common.util.Buffer;
+import org.apache.sshd.common.util.buffer.Buffer;
+import org.apache.sshd.common.util.buffer.ByteArrayBuffer;
 import org.apache.sshd.server.channel.AbstractServerChannel;
 
 /**
@@ -42,10 +42,12 @@ public class ChannelAgentForwarding extends 
AbstractServerChannel {
 
     public static class Factory implements NamedFactory<Channel> {
 
+        @Override
         public String getName() {
             return "[email protected]";
         }
 
+        @Override
         public Channel create() {
             return new ChannelAgentForwarding();
         }
@@ -62,6 +64,7 @@ public class ChannelAgentForwarding extends 
AbstractServerChannel {
     public ChannelAgentForwarding() {
     }
 
+    @Override
     protected OpenFuture doInit(Buffer buffer) {
         final OpenFuture f = new DefaultOpenFuture(this);
         try {
@@ -89,8 +92,10 @@ public class ChannelAgentForwarding extends 
AbstractServerChannel {
 //        Socket.close(handle);
     }
 
+    @Override
     public CloseFuture close(boolean immediately) {
         return super.close(immediately).addListener(new 
SshFutureListener<CloseFuture>() {
+            @Override
             public void operationComplete(CloseFuture sshFuture) {
                 closeImmediately0();
             }
@@ -103,10 +108,12 @@ public class ChannelAgentForwarding extends 
AbstractServerChannel {
 //        close(true);
     }
 
+    @Override
     protected void doWriteData(byte[] data, int off, int len) throws 
IOException {
-        client.messageReceived(new Buffer(data, off, len));
+        client.messageReceived(new ByteArrayBuffer(data, off, len));
     }
 
+    @Override
     protected void doWriteExtendedData(byte[] data, int off, int len) throws 
IOException {
         throw new UnsupportedOperationException("AgentForward channel does not 
support extended data");
     }

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/sshd-core/src/main/java/org/apache/sshd/agent/unix/AgentClient.java
----------------------------------------------------------------------
diff --git 
a/sshd-core/src/main/java/org/apache/sshd/agent/unix/AgentClient.java 
b/sshd-core/src/main/java/org/apache/sshd/agent/unix/AgentClient.java
index 87f9a26..45b33e1 100644
--- a/sshd-core/src/main/java/org/apache/sshd/agent/unix/AgentClient.java
+++ b/sshd-core/src/main/java/org/apache/sshd/agent/unix/AgentClient.java
@@ -25,7 +25,8 @@ import java.util.concurrent.ArrayBlockingQueue;
 
 import org.apache.sshd.agent.common.AbstractAgentProxy;
 import org.apache.sshd.common.SshException;
-import org.apache.sshd.common.util.Buffer;
+import org.apache.sshd.common.util.buffer.Buffer;
+import org.apache.sshd.common.util.buffer.ByteArrayBuffer;
 import org.apache.tomcat.jni.Local;
 import org.apache.tomcat.jni.Pool;
 import org.apache.tomcat.jni.Socket;
@@ -52,7 +53,7 @@ public class AgentClient extends AbstractAgentProxy 
implements Runnable {
             if (result != Status.APR_SUCCESS) {
                 throwException(result);
             }
-            receiveBuffer = new Buffer();
+            receiveBuffer = new ByteArrayBuffer();
             messages = new ArrayBlockingQueue<Buffer>(10);
             new Thread(this).start();
         } catch (IOException e) {
@@ -62,6 +63,7 @@ public class AgentClient extends AbstractAgentProxy 
implements Runnable {
         }
     }
 
+    @Override
     public void run() {
         try {
             byte[] buf = new byte[1024];
@@ -70,7 +72,7 @@ public class AgentClient extends AbstractAgentProxy 
implements Runnable {
                 if (result < Status.APR_SUCCESS) {
                     throwException(result);
                 }
-                messageReceived(new Buffer(buf, 0, result));
+                messageReceived(new ByteArrayBuffer(buf, 0, result));
             }
         } catch (Exception e) {
             if (!closed) {
@@ -94,7 +96,7 @@ public class AgentClient extends AbstractAgentProxy 
implements Runnable {
                 int len = receiveBuffer.getInt();
                 receiveBuffer.rpos(rpos);
                 if (receiveBuffer.available() >= 4 + len) {
-                    message = new Buffer(receiveBuffer.getBytes());
+                    message = new ByteArrayBuffer(receiveBuffer.getBytes());
                     receiveBuffer.compact();
                 }
             }
@@ -115,6 +117,7 @@ public class AgentClient extends AbstractAgentProxy 
implements Runnable {
         }
     }
 
+    @Override
     protected synchronized Buffer request(Buffer buffer) throws IOException {
         int wpos = buffer.wpos();
         buffer.wpos(0);

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/sshd-core/src/main/java/org/apache/sshd/agent/unix/AgentServer.java
----------------------------------------------------------------------
diff --git 
a/sshd-core/src/main/java/org/apache/sshd/agent/unix/AgentServer.java 
b/sshd-core/src/main/java/org/apache/sshd/agent/unix/AgentServer.java
index d38b0b2..4536df0 100644
--- a/sshd-core/src/main/java/org/apache/sshd/agent/unix/AgentServer.java
+++ b/sshd-core/src/main/java/org/apache/sshd/agent/unix/AgentServer.java
@@ -24,7 +24,8 @@ import java.io.IOException;
 import org.apache.sshd.agent.SshAgent;
 import org.apache.sshd.agent.common.AbstractAgentClient;
 import org.apache.sshd.agent.local.AgentImpl;
-import org.apache.sshd.common.util.Buffer;
+import org.apache.sshd.common.util.buffer.Buffer;
+import org.apache.sshd.common.util.buffer.ByteArrayBuffer;
 import org.apache.tomcat.jni.Local;
 import org.apache.tomcat.jni.Pool;
 import org.apache.tomcat.jni.Socket;
@@ -68,6 +69,7 @@ public class AgentServer implements Closeable {
             throwException(result);
         }
         thread = new Thread() {
+            @Override
             public void run() {
                 try {
                     while (true) {
@@ -100,6 +102,7 @@ public class AgentServer implements Closeable {
             new Thread(this).start();
         }
 
+        @Override
         public void run() {
             try {
                 byte[] buf = new byte[1024];
@@ -110,7 +113,7 @@ public class AgentServer implements Closeable {
                     } else if (result < Status.APR_SUCCESS) {
                         throwException(result);
                     }
-                    messageReceived(new Buffer(buf, 0, result));
+                    messageReceived(new ByteArrayBuffer(buf, 0, result));
                 }
             } catch (Exception e) {
                 e.printStackTrace();
@@ -119,6 +122,7 @@ public class AgentServer implements Closeable {
             }
         }
 
+        @Override
         protected void reply(Buffer buf) throws IOException {
             int result = Socket.send(socket, buf.array(), buf.rpos(), 
buf.available());
             if (result < Status.APR_SUCCESS) {

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/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 4f6516e..471c668 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
@@ -31,7 +31,7 @@ import org.apache.sshd.common.SshConstants;
 import org.apache.sshd.common.channel.ChannelOutputStream;
 import org.apache.sshd.common.future.CloseFuture;
 import org.apache.sshd.common.future.SshFutureListener;
-import org.apache.sshd.common.util.Buffer;
+import org.apache.sshd.common.util.buffer.Buffer;
 import org.apache.sshd.server.channel.AbstractServerChannel;
 import org.apache.tomcat.jni.Local;
 import org.apache.tomcat.jni.Pool;

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/sshd-core/src/main/java/org/apache/sshd/client/UserAuth.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/client/UserAuth.java 
b/sshd-core/src/main/java/org/apache/sshd/client/UserAuth.java
index a2e8cb7..7f864ac 100644
--- a/sshd-core/src/main/java/org/apache/sshd/client/UserAuth.java
+++ b/sshd-core/src/main/java/org/apache/sshd/client/UserAuth.java
@@ -21,7 +21,7 @@ package org.apache.sshd.client;
 import java.util.List;
 
 import org.apache.sshd.ClientSession;
-import org.apache.sshd.common.util.Buffer;
+import org.apache.sshd.common.util.buffer.Buffer;
 
 /**
  * TODO Add javadoc

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/sshd-core/src/main/java/org/apache/sshd/client/auth/UserAuthKeyboardInteractive.java
----------------------------------------------------------------------
diff --git 
a/sshd-core/src/main/java/org/apache/sshd/client/auth/UserAuthKeyboardInteractive.java
 
b/sshd-core/src/main/java/org/apache/sshd/client/auth/UserAuthKeyboardInteractive.java
index cce5bf1..c623cec 100644
--- 
a/sshd-core/src/main/java/org/apache/sshd/client/auth/UserAuthKeyboardInteractive.java
+++ 
b/sshd-core/src/main/java/org/apache/sshd/client/auth/UserAuthKeyboardInteractive.java
@@ -28,7 +28,7 @@ import org.apache.sshd.client.UserAuth;
 import org.apache.sshd.client.UserInteraction;
 import org.apache.sshd.common.NamedFactory;
 import org.apache.sshd.common.SshConstants;
-import org.apache.sshd.common.util.Buffer;
+import org.apache.sshd.common.util.buffer.Buffer;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/sshd-core/src/main/java/org/apache/sshd/client/auth/UserAuthPassword.java
----------------------------------------------------------------------
diff --git 
a/sshd-core/src/main/java/org/apache/sshd/client/auth/UserAuthPassword.java 
b/sshd-core/src/main/java/org/apache/sshd/client/auth/UserAuthPassword.java
index d1db9de..ba64d12 100644
--- a/sshd-core/src/main/java/org/apache/sshd/client/auth/UserAuthPassword.java
+++ b/sshd-core/src/main/java/org/apache/sshd/client/auth/UserAuthPassword.java
@@ -26,7 +26,7 @@ import org.apache.sshd.ClientSession;
 import org.apache.sshd.client.UserAuth;
 import org.apache.sshd.common.NamedFactory;
 import org.apache.sshd.common.SshConstants;
-import org.apache.sshd.common.util.Buffer;
+import org.apache.sshd.common.util.buffer.Buffer;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/sshd-core/src/main/java/org/apache/sshd/client/auth/UserAuthPublicKey.java
----------------------------------------------------------------------
diff --git 
a/sshd-core/src/main/java/org/apache/sshd/client/auth/UserAuthPublicKey.java 
b/sshd-core/src/main/java/org/apache/sshd/client/auth/UserAuthPublicKey.java
index d58f7be..2e228fd 100644
--- a/sshd-core/src/main/java/org/apache/sshd/client/auth/UserAuthPublicKey.java
+++ b/sshd-core/src/main/java/org/apache/sshd/client/auth/UserAuthPublicKey.java
@@ -18,6 +18,8 @@
  */
 package org.apache.sshd.client.auth;
 
+import static org.apache.sshd.common.util.KeyUtils.getKeyType;
+
 import java.io.IOException;
 import java.security.KeyPair;
 import java.security.PublicKey;
@@ -35,12 +37,11 @@ import org.apache.sshd.common.NamedFactory;
 import org.apache.sshd.common.Signature;
 import org.apache.sshd.common.SshConstants;
 import org.apache.sshd.common.session.AbstractSession;
-import org.apache.sshd.common.util.Buffer;
+import org.apache.sshd.common.util.buffer.Buffer;
+import org.apache.sshd.common.util.buffer.ByteArrayBuffer;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import static org.apache.sshd.common.util.KeyUtils.getKeyType;
-
 /**
  * TODO Add javadoc
  *
@@ -124,8 +125,8 @@ public class UserAuthPublicKey implements UserAuth {
             buffer.putString(algo);
             buffer.putPublicKey(key);
 
-            Buffer bs = new Buffer();
-            bs.putString(((AbstractSession) session).getKex().getH());
+            Buffer bs = new ByteArrayBuffer();
+            bs.putBytes(((AbstractSession) session).getKex().getH());
             bs.putByte(SshConstants.SSH_MSG_USERAUTH_REQUEST);
             bs.putString(session.getUsername());
             bs.putString(service);
@@ -135,7 +136,7 @@ public class UserAuthPublicKey implements UserAuth {
             bs.putPublicKey(key);
             byte[] sig = current.sign(bs.getCompactData());
 
-            bs = new Buffer();
+            bs = new ByteArrayBuffer();
             bs.putString(algo);
             bs.putBytes(sig);
             buffer.putBytes(bs.array(), bs.rpos(), bs.available());

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/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 5eb907d..9fff35c 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
@@ -36,8 +36,9 @@ import org.apache.sshd.common.channel.ChannelAsyncInputStream;
 import org.apache.sshd.common.channel.ChannelAsyncOutputStream;
 import org.apache.sshd.common.io.IoInputStream;
 import org.apache.sshd.common.io.IoOutputStream;
-import org.apache.sshd.common.util.Buffer;
 import org.apache.sshd.common.util.IoUtils;
+import org.apache.sshd.common.util.buffer.Buffer;
+import org.apache.sshd.common.util.buffer.ByteArrayBuffer;
 
 /**
  * TODO Add javadoc
@@ -75,26 +76,32 @@ public abstract class AbstractClientChannel extends 
AbstractChannel implements C
         addRequestHandler(new ExitSignalChannelRequestHandler());
     }
 
+    @Override
     public Streaming getStreaming() {
         return streaming;
     }
 
+    @Override
     public void setStreaming(Streaming streaming) {
         this.streaming = streaming;
     }
 
+    @Override
     public IoOutputStream getAsyncIn() {
         return asyncIn;
     }
 
+    @Override
     public IoInputStream getAsyncOut() {
         return asyncOut;
     }
 
+    @Override
     public IoInputStream getAsyncErr() {
         return asyncErr;
     }
 
+    @Override
     public OutputStream getInvertedIn() {
         return invertedIn;
     }
@@ -103,10 +110,12 @@ public abstract class AbstractClientChannel extends 
AbstractChannel implements C
         return in;
     }
 
+    @Override
     public void setIn(InputStream in) {
         this.in = in;
     }
 
+    @Override
     public InputStream getInvertedOut() {
         return invertedOut;
     }
@@ -115,10 +124,12 @@ public abstract class AbstractClientChannel extends 
AbstractChannel implements C
         return out;
     }
 
+    @Override
     public void setOut(OutputStream out) {
         this.out = out;
     }
 
+    @Override
     public InputStream getInvertedErr() {
         return invertedErr;
     }
@@ -127,6 +138,7 @@ public abstract class AbstractClientChannel extends 
AbstractChannel implements C
         return err;
     }
 
+    @Override
     public void setErr(OutputStream err) {
         this.err = err;
     }
@@ -136,6 +148,7 @@ public abstract class AbstractClientChannel extends 
AbstractChannel implements C
         return builder()
                 .when(openFuture)
                 .run(new Runnable() {
+                    @Override
                     public void run() {
                         // If the channel has not been opened yet,
                         // skip the SSH_MSG_CHANNEL_CLOSE exchange
@@ -157,6 +170,7 @@ public abstract class AbstractClientChannel extends 
AbstractChannel implements C
                 .build();
     }
 
+    @Override
     public int waitFor(int mask, long timeout) {
         long t = 0;
         synchronized (lock) {
@@ -207,6 +221,7 @@ public abstract class AbstractClientChannel extends 
AbstractChannel implements C
         }
     }
 
+    @Override
     public synchronized OpenFuture open() throws IOException {
         if (isClosing()) {
             throw new SshException("Session has been closed");
@@ -222,10 +237,12 @@ public abstract class AbstractClientChannel extends 
AbstractChannel implements C
         return openFuture;
     }
 
+    @Override
     public OpenFuture open(int recipient, int rwsize, int rmpsize, Buffer 
buffer) {
         throw new IllegalStateException();
     }
 
+    @Override
     public void handleOpenSuccess(int recipient, int rwsize, int rmpsize, 
Buffer buffer) {
         this.recipient = recipient;
         this.remoteWindow.init(rwsize, rmpsize);
@@ -244,6 +261,7 @@ public abstract class AbstractClientChannel extends 
AbstractChannel implements C
 
     protected abstract void doOpen() throws IOException;
 
+    @Override
     public void handleOpenFailure(Buffer buffer) {
         int reason = buffer.getInt();
         String msg = buffer.getString();
@@ -255,13 +273,14 @@ public abstract class AbstractClientChannel extends 
AbstractChannel implements C
         notifyStateChanged();
     }
 
+    @Override
     protected void doWriteData(byte[] data, int off, int len) throws 
IOException {
         // If we're already closing, ignore incoming data
         if (isClosing()) {
             return;
         }
         if (asyncOut != null) {
-            asyncOut.write(new Buffer(data, off, len));
+            asyncOut.write(new ByteArrayBuffer(data, off, len));
         } else if (out != null) {
             out.write(data, off, len);
             out.flush();
@@ -273,13 +292,14 @@ public abstract class AbstractClientChannel extends 
AbstractChannel implements C
         }
     }
 
+    @Override
     protected void doWriteExtendedData(byte[] data, int off, int len) throws 
IOException {
         // If we're already closing, ignore incoming data
         if (isClosing()) {
             return;
         }
         if (asyncErr != null) {
-            asyncErr.write(new Buffer(data, off, len));
+            asyncErr.write(new ByteArrayBuffer(data, off, len));
         } else if (err != null) {
             err.write(data, off, len);
             err.flush();
@@ -299,11 +319,13 @@ public abstract class AbstractClientChannel extends 
AbstractChannel implements C
         }
     }
 
+    @Override
     public Integer getExitStatus() {
         return exitStatus;
     }
 
     private class ExitStatusChannelRequestHandler implements 
RequestHandler<Channel> {
+        @Override
         public Result process(Channel channel, String request, boolean 
wantReply, Buffer buffer) throws Exception {
             if (request.equals("exit-status")) {
                 exitStatus = buffer.getInt();
@@ -315,6 +337,7 @@ public abstract class AbstractClientChannel extends 
AbstractChannel implements C
     }
 
     private class ExitSignalChannelRequestHandler implements 
RequestHandler<Channel> {
+        @Override
         public Result process(Channel channel, String request, boolean 
wantReply, Buffer buffer) throws Exception {
             if (request.equals("exit-signal")) {
                 exitSignal = buffer.getString();

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/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 453c0ef..bb3c94f 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
@@ -34,7 +34,7 @@ import 
org.apache.sshd.common.channel.ChannelAsyncOutputStream;
 import org.apache.sshd.common.channel.ChannelOutputStream;
 import org.apache.sshd.common.channel.ChannelPipedInputStream;
 import org.apache.sshd.common.channel.ChannelPipedOutputStream;
-import org.apache.sshd.common.util.Buffer;
+import org.apache.sshd.common.util.buffer.Buffer;
 
 /**
  * TODO Add javadoc

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/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 3a1f2ee..0d4dcfe 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
@@ -21,7 +21,7 @@ package org.apache.sshd.client.channel;
 import java.io.IOException;
 
 import org.apache.sshd.common.SshConstants;
-import org.apache.sshd.common.util.Buffer;
+import org.apache.sshd.common.util.buffer.Buffer;
 
 /**
  * TODO Add javadoc

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/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 355a3da..f9a1c25 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
@@ -21,7 +21,7 @@ package org.apache.sshd.client.channel;
 import java.io.IOException;
 
 import org.apache.sshd.common.SshConstants;
-import org.apache.sshd.common.util.Buffer;
+import org.apache.sshd.common.util.buffer.Buffer;
 
 /**
  * TODO Add javadoc

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/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 fd75810..1073b05 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
@@ -23,7 +23,7 @@ import java.io.IOException;
 import org.apache.sshd.common.SshConstants;
 import org.apache.sshd.common.future.CloseFuture;
 import org.apache.sshd.common.future.SshFutureListener;
-import org.apache.sshd.common.util.Buffer;
+import org.apache.sshd.common.util.buffer.Buffer;
 
 /**
  * Client channel to run a subsystem

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/sshd-core/src/main/java/org/apache/sshd/client/channel/PtyCapableChannelSession.java
----------------------------------------------------------------------
diff --git 
a/sshd-core/src/main/java/org/apache/sshd/client/channel/PtyCapableChannelSession.java
 
b/sshd-core/src/main/java/org/apache/sshd/client/channel/PtyCapableChannelSession.java
index bbcb016..2c7448b 100644
--- 
a/sshd-core/src/main/java/org/apache/sshd/client/channel/PtyCapableChannelSession.java
+++ 
b/sshd-core/src/main/java/org/apache/sshd/client/channel/PtyCapableChannelSession.java
@@ -18,17 +18,18 @@
  */
 package org.apache.sshd.client.channel;
 
-import org.apache.sshd.common.PtyMode;
-import org.apache.sshd.common.SshConstants;
-import org.apache.sshd.common.util.Buffer;
-import org.apache.sshd.common.util.OsUtils;
-import org.apache.sshd.common.util.SttySupport;
-
 import java.io.IOException;
 import java.util.HashMap;
 import java.util.LinkedHashMap;
 import java.util.Map;
 
+import org.apache.sshd.common.PtyMode;
+import org.apache.sshd.common.SshConstants;
+import org.apache.sshd.common.util.OsUtils;
+import org.apache.sshd.common.util.SttySupport;
+import org.apache.sshd.common.util.buffer.Buffer;
+import org.apache.sshd.common.util.buffer.ByteArrayBuffer;
+
 /**
  * TODO Add javadoc
  *
@@ -171,7 +172,7 @@ public class PtyCapableChannelSession extends 
ChannelSession {
             buffer.putInt(ptyLines);
             buffer.putInt(ptyHeight);
             buffer.putInt(ptyWidth);
-            Buffer modes = new Buffer();
+            Buffer modes = new ByteArrayBuffer();
             for (PtyMode mode : ptyModes.keySet()) {
                 modes.putByte((byte) mode.toInt());
                 modes.putInt(ptyModes.get(mode));

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/sshd-core/src/main/java/org/apache/sshd/client/kex/DHGClient.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/client/kex/DHGClient.java 
b/sshd-core/src/main/java/org/apache/sshd/client/kex/DHGClient.java
index 69bea58..5e98ac2 100644
--- a/sshd-core/src/main/java/org/apache/sshd/client/kex/DHGClient.java
+++ b/sshd-core/src/main/java/org/apache/sshd/client/kex/DHGClient.java
@@ -26,8 +26,9 @@ import org.apache.sshd.common.SshException;
 import org.apache.sshd.common.kex.AbstractDH;
 import org.apache.sshd.common.kex.DHFactory;
 import org.apache.sshd.common.session.AbstractSession;
-import org.apache.sshd.common.util.Buffer;
 import org.apache.sshd.common.util.KeyUtils;
+import org.apache.sshd.common.util.buffer.Buffer;
+import org.apache.sshd.common.util.buffer.ByteArrayBuffer;
 
 /**
  * Base class for DHG key exchange algorithms.
@@ -67,6 +68,7 @@ public class DHGClient extends AbstractDHClientKeyExchange {
         this.factory = factory;
     }
 
+    @Override
     public void init(AbstractSession s, byte[] V_S, byte[] V_C, byte[] I_S, 
byte[] I_C) throws Exception {
         super.init(s, V_S, V_C, I_S, I_C);
         dh = getDH();
@@ -84,6 +86,7 @@ public class DHGClient extends AbstractDHClientKeyExchange {
         return factory.create();
     }
 
+    @Override
     public boolean next(Buffer buffer) throws Exception {
         byte cmd = buffer.getByte();
         if (cmd != SshConstants.SSH_MSG_KEXDH_REPLY) {
@@ -99,19 +102,19 @@ public class DHGClient extends AbstractDHClientKeyExchange 
{
         dh.setF(f);
         K = dh.getK();
 
-        buffer = new Buffer(K_S);
+        buffer = new ByteArrayBuffer(K_S);
         serverKey = buffer.getRawPublicKey();
         final String keyAlg = KeyUtils.getKeyType(serverKey);
         if (keyAlg == null) {
             throw new SshException("Unsupported server key type");
         }
 
-        buffer = new Buffer();
-        buffer.putString(V_C);
-        buffer.putString(V_S);
-        buffer.putString(I_C);
-        buffer.putString(I_S);
-        buffer.putString(K_S);
+        buffer = new ByteArrayBuffer();
+        buffer.putBytes(V_C);
+        buffer.putBytes(V_S);
+        buffer.putBytes(I_C);
+        buffer.putBytes(I_S);
+        buffer.putBytes(K_S);
         buffer.putMPInt(e);
         buffer.putMPInt(f);
         buffer.putMPInt(K);

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/sshd-core/src/main/java/org/apache/sshd/client/kex/DHGEXClient.java
----------------------------------------------------------------------
diff --git 
a/sshd-core/src/main/java/org/apache/sshd/client/kex/DHGEXClient.java 
b/sshd-core/src/main/java/org/apache/sshd/client/kex/DHGEXClient.java
index 38fca91..b1a05f9 100644
--- a/sshd-core/src/main/java/org/apache/sshd/client/kex/DHGEXClient.java
+++ b/sshd-core/src/main/java/org/apache/sshd/client/kex/DHGEXClient.java
@@ -29,8 +29,9 @@ import org.apache.sshd.common.SshException;
 import org.apache.sshd.common.kex.AbstractDH;
 import org.apache.sshd.common.kex.DHFactory;
 import org.apache.sshd.common.session.AbstractSession;
-import org.apache.sshd.common.util.Buffer;
 import org.apache.sshd.common.util.KeyUtils;
+import org.apache.sshd.common.util.buffer.Buffer;
+import org.apache.sshd.common.util.buffer.ByteArrayBuffer;
 
 
 /**
@@ -49,10 +50,12 @@ public class DHGEXClient extends 
AbstractDHClientKeyExchange {
 
     public static final NamedFactory<KeyExchange> newFactory(final DHFactory 
delegate) {
         return new NamedFactory<KeyExchange>() {
+            @Override
             public String getName() {
                 return delegate.getName();
             }
 
+            @Override
             public KeyExchange create() {
                 return new DHGEXClient(delegate);
             }
@@ -83,6 +86,7 @@ public class DHGEXClient extends AbstractDHClientKeyExchange {
         expected = SshConstants.SSH_MSG_KEX_DH_GEX_GROUP;
     }
 
+    @Override
     public boolean next(Buffer buffer) throws Exception {
         byte cmd = buffer.getByte();
         if (cmd != expected) {
@@ -116,19 +120,19 @@ public class DHGEXClient extends 
AbstractDHClientKeyExchange {
             dh.setF(f);
             K = dh.getK();
 
-            buffer = new Buffer(K_S);
+            buffer = new ByteArrayBuffer(K_S);
             serverKey = buffer.getRawPublicKey();
             final String keyAlg = KeyUtils.getKeyType(serverKey);
             if (keyAlg == null) {
                 throw new SshException("Unsupported server key type");
             }
 
-            buffer = new Buffer();
-            buffer.putString(V_C);
-            buffer.putString(V_S);
-            buffer.putString(I_C);
-            buffer.putString(I_S);
-            buffer.putString(K_S);
+            buffer = new ByteArrayBuffer();
+            buffer.putBytes(V_C);
+            buffer.putBytes(V_S);
+            buffer.putBytes(I_C);
+            buffer.putBytes(I_S);
+            buffer.putBytes(K_S);
             buffer.putInt(min);
             buffer.putInt(prf);
             buffer.putInt(max);

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/sshd-core/src/main/java/org/apache/sshd/client/keyverifier/RequiredServerKeyVerifier.java
----------------------------------------------------------------------
diff --git 
a/sshd-core/src/main/java/org/apache/sshd/client/keyverifier/RequiredServerKeyVerifier.java
 
b/sshd-core/src/main/java/org/apache/sshd/client/keyverifier/RequiredServerKeyVerifier.java
index c3823cd..9a29f6d 100644
--- 
a/sshd-core/src/main/java/org/apache/sshd/client/keyverifier/RequiredServerKeyVerifier.java
+++ 
b/sshd-core/src/main/java/org/apache/sshd/client/keyverifier/RequiredServerKeyVerifier.java
@@ -23,7 +23,7 @@ import java.security.PublicKey;
 
 import org.apache.sshd.ClientSession;
 import org.apache.sshd.client.ServerKeyVerifier;
-import org.apache.sshd.common.util.BufferUtils;
+import org.apache.sshd.common.util.buffer.BufferUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/sshd-core/src/main/java/org/apache/sshd/client/session/ClientConnectionService.java
----------------------------------------------------------------------
diff --git 
a/sshd-core/src/main/java/org/apache/sshd/client/session/ClientConnectionService.java
 
b/sshd-core/src/main/java/org/apache/sshd/client/session/ClientConnectionService.java
index 7c03fb8..d9988f2 100644
--- 
a/sshd-core/src/main/java/org/apache/sshd/client/session/ClientConnectionService.java
+++ 
b/sshd-core/src/main/java/org/apache/sshd/client/session/ClientConnectionService.java
@@ -31,7 +31,7 @@ import org.apache.sshd.common.Session;
 import org.apache.sshd.common.SshConstants;
 import org.apache.sshd.common.SshException;
 import org.apache.sshd.common.session.AbstractConnectionService;
-import org.apache.sshd.common.util.Buffer;
+import org.apache.sshd.common.util.buffer.Buffer;
 
 /**
  * Client side <code>ssh-connection</code> service.

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/sshd-core/src/main/java/org/apache/sshd/client/session/ClientSessionImpl.java
----------------------------------------------------------------------
diff --git 
a/sshd-core/src/main/java/org/apache/sshd/client/session/ClientSessionImpl.java 
b/sshd-core/src/main/java/org/apache/sshd/client/session/ClientSessionImpl.java
index 2b3b60a..195be0c 100644
--- 
a/sshd-core/src/main/java/org/apache/sshd/client/session/ClientSessionImpl.java
+++ 
b/sshd-core/src/main/java/org/apache/sshd/client/session/ClientSessionImpl.java
@@ -60,7 +60,7 @@ import org.apache.sshd.common.scp.ScpTransferEventListener;
 import org.apache.sshd.common.session.AbstractConnectionService;
 import org.apache.sshd.common.session.AbstractSession;
 import org.apache.sshd.common.session.ConnectionService;
-import org.apache.sshd.common.util.Buffer;
+import org.apache.sshd.common.util.buffer.Buffer;
 
 /**
  * TODO Add javadoc

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/sshd-core/src/main/java/org/apache/sshd/client/session/ClientUserAuthService.java
----------------------------------------------------------------------
diff --git 
a/sshd-core/src/main/java/org/apache/sshd/client/session/ClientUserAuthService.java
 
b/sshd-core/src/main/java/org/apache/sshd/client/session/ClientUserAuthService.java
index cc1c655..3e8d64d 100644
--- 
a/sshd-core/src/main/java/org/apache/sshd/client/session/ClientUserAuthService.java
+++ 
b/sshd-core/src/main/java/org/apache/sshd/client/session/ClientUserAuthService.java
@@ -35,9 +35,9 @@ import org.apache.sshd.common.ServiceFactory;
 import org.apache.sshd.common.Session;
 import org.apache.sshd.common.SshConstants;
 import org.apache.sshd.common.SshException;
-import org.apache.sshd.common.util.Buffer;
 import org.apache.sshd.common.util.CloseableUtils;
 import org.apache.sshd.common.util.GenericUtils;
+import org.apache.sshd.common.util.buffer.Buffer;
 
 /**
  * Client side <code>ssh-auth</code> service.

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/sshd-core/src/main/java/org/apache/sshd/client/sftp/DefaultSftpClient.java
----------------------------------------------------------------------
diff --git 
a/sshd-core/src/main/java/org/apache/sshd/client/sftp/DefaultSftpClient.java 
b/sshd-core/src/main/java/org/apache/sshd/client/sftp/DefaultSftpClient.java
index 99e60af..4e5c395 100644
--- a/sshd-core/src/main/java/org/apache/sshd/client/sftp/DefaultSftpClient.java
+++ b/sshd-core/src/main/java/org/apache/sshd/client/sftp/DefaultSftpClient.java
@@ -18,6 +18,75 @@
  */
 package org.apache.sshd.client.sftp;
 
+import static org.apache.sshd.common.sftp.SftpConstants.ACE4_APPEND_DATA;
+import static org.apache.sshd.common.sftp.SftpConstants.ACE4_READ_ATTRIBUTES;
+import static org.apache.sshd.common.sftp.SftpConstants.ACE4_READ_DATA;
+import static org.apache.sshd.common.sftp.SftpConstants.ACE4_WRITE_ATTRIBUTES;
+import static org.apache.sshd.common.sftp.SftpConstants.ACE4_WRITE_DATA;
+import static org.apache.sshd.common.sftp.SftpConstants.SFTP_V3;
+import static org.apache.sshd.common.sftp.SftpConstants.SFTP_V4;
+import static org.apache.sshd.common.sftp.SftpConstants.SFTP_V5;
+import static org.apache.sshd.common.sftp.SftpConstants.SFTP_V6;
+import static 
org.apache.sshd.common.sftp.SftpConstants.SSH_FILEXFER_ATTR_ACCESSTIME;
+import static 
org.apache.sshd.common.sftp.SftpConstants.SSH_FILEXFER_ATTR_ACMODTIME;
+import static org.apache.sshd.common.sftp.SftpConstants.SSH_FILEXFER_ATTR_ALL;
+import static 
org.apache.sshd.common.sftp.SftpConstants.SSH_FILEXFER_ATTR_CREATETIME;
+import static 
org.apache.sshd.common.sftp.SftpConstants.SSH_FILEXFER_ATTR_MODIFYTIME;
+import static 
org.apache.sshd.common.sftp.SftpConstants.SSH_FILEXFER_ATTR_OWNERGROUP;
+import static 
org.apache.sshd.common.sftp.SftpConstants.SSH_FILEXFER_ATTR_PERMISSIONS;
+import static org.apache.sshd.common.sftp.SftpConstants.SSH_FILEXFER_ATTR_SIZE;
+import static 
org.apache.sshd.common.sftp.SftpConstants.SSH_FILEXFER_ATTR_SUBSECOND_TIMES;
+import static 
org.apache.sshd.common.sftp.SftpConstants.SSH_FILEXFER_ATTR_UIDGID;
+import static 
org.apache.sshd.common.sftp.SftpConstants.SSH_FILEXFER_TYPE_DIRECTORY;
+import static 
org.apache.sshd.common.sftp.SftpConstants.SSH_FILEXFER_TYPE_REGULAR;
+import static 
org.apache.sshd.common.sftp.SftpConstants.SSH_FILEXFER_TYPE_SYMLINK;
+import static org.apache.sshd.common.sftp.SftpConstants.SSH_FXF_APPEND;
+import static org.apache.sshd.common.sftp.SftpConstants.SSH_FXF_CREAT;
+import static org.apache.sshd.common.sftp.SftpConstants.SSH_FXF_CREATE_NEW;
+import static 
org.apache.sshd.common.sftp.SftpConstants.SSH_FXF_CREATE_TRUNCATE;
+import static org.apache.sshd.common.sftp.SftpConstants.SSH_FXF_EXCL;
+import static org.apache.sshd.common.sftp.SftpConstants.SSH_FXF_OPEN_EXISTING;
+import static org.apache.sshd.common.sftp.SftpConstants.SSH_FXF_OPEN_OR_CREATE;
+import static org.apache.sshd.common.sftp.SftpConstants.SSH_FXF_READ;
+import static org.apache.sshd.common.sftp.SftpConstants.SSH_FXF_TRUNC;
+import static 
org.apache.sshd.common.sftp.SftpConstants.SSH_FXF_TRUNCATE_EXISTING;
+import static org.apache.sshd.common.sftp.SftpConstants.SSH_FXF_WRITE;
+import static org.apache.sshd.common.sftp.SftpConstants.SSH_FXP_ATTRS;
+import static org.apache.sshd.common.sftp.SftpConstants.SSH_FXP_BLOCK;
+import static org.apache.sshd.common.sftp.SftpConstants.SSH_FXP_CLOSE;
+import static org.apache.sshd.common.sftp.SftpConstants.SSH_FXP_DATA;
+import static org.apache.sshd.common.sftp.SftpConstants.SSH_FXP_FSETSTAT;
+import static org.apache.sshd.common.sftp.SftpConstants.SSH_FXP_FSTAT;
+import static org.apache.sshd.common.sftp.SftpConstants.SSH_FXP_HANDLE;
+import static org.apache.sshd.common.sftp.SftpConstants.SSH_FXP_INIT;
+import static org.apache.sshd.common.sftp.SftpConstants.SSH_FXP_LINK;
+import static org.apache.sshd.common.sftp.SftpConstants.SSH_FXP_LSTAT;
+import static org.apache.sshd.common.sftp.SftpConstants.SSH_FXP_MKDIR;
+import static org.apache.sshd.common.sftp.SftpConstants.SSH_FXP_NAME;
+import static org.apache.sshd.common.sftp.SftpConstants.SSH_FXP_OPEN;
+import static org.apache.sshd.common.sftp.SftpConstants.SSH_FXP_OPENDIR;
+import static org.apache.sshd.common.sftp.SftpConstants.SSH_FXP_READ;
+import static org.apache.sshd.common.sftp.SftpConstants.SSH_FXP_READDIR;
+import static org.apache.sshd.common.sftp.SftpConstants.SSH_FXP_READLINK;
+import static org.apache.sshd.common.sftp.SftpConstants.SSH_FXP_REALPATH;
+import static org.apache.sshd.common.sftp.SftpConstants.SSH_FXP_REMOVE;
+import static org.apache.sshd.common.sftp.SftpConstants.SSH_FXP_RENAME;
+import static org.apache.sshd.common.sftp.SftpConstants.SSH_FXP_RENAME_ATOMIC;
+import static 
org.apache.sshd.common.sftp.SftpConstants.SSH_FXP_RENAME_OVERWRITE;
+import static org.apache.sshd.common.sftp.SftpConstants.SSH_FXP_RMDIR;
+import static org.apache.sshd.common.sftp.SftpConstants.SSH_FXP_SETSTAT;
+import static org.apache.sshd.common.sftp.SftpConstants.SSH_FXP_STAT;
+import static org.apache.sshd.common.sftp.SftpConstants.SSH_FXP_STATUS;
+import static org.apache.sshd.common.sftp.SftpConstants.SSH_FXP_SYMLINK;
+import static org.apache.sshd.common.sftp.SftpConstants.SSH_FXP_UNBLOCK;
+import static org.apache.sshd.common.sftp.SftpConstants.SSH_FXP_VERSION;
+import static org.apache.sshd.common.sftp.SftpConstants.SSH_FXP_WRITE;
+import static org.apache.sshd.common.sftp.SftpConstants.SSH_FX_EOF;
+import static org.apache.sshd.common.sftp.SftpConstants.SSH_FX_OK;
+import static org.apache.sshd.common.sftp.SftpConstants.S_IFDIR;
+import static org.apache.sshd.common.sftp.SftpConstants.S_IFLNK;
+import static org.apache.sshd.common.sftp.SftpConstants.S_IFREG;
+
 import java.io.ByteArrayOutputStream;
 import java.io.DataInputStream;
 import java.io.DataOutputStream;
@@ -40,9 +109,8 @@ import org.apache.sshd.client.SftpClient;
 import org.apache.sshd.client.SftpException;
 import org.apache.sshd.client.channel.ChannelSubsystem;
 import org.apache.sshd.common.SshException;
-import org.apache.sshd.common.util.Buffer;
-
-import static org.apache.sshd.common.sftp.SftpConstants.*;
+import org.apache.sshd.common.util.buffer.Buffer;
+import org.apache.sshd.common.util.buffer.ByteArrayBuffer;
 
 /**
  * @author <a href="mailto:[email protected]";>Apache MINA SSHD Project</a>
@@ -52,7 +120,7 @@ public class DefaultSftpClient implements SftpClient {
     private final ChannelSubsystem channel;
     private final Map<Integer, Buffer> messages;
     private final AtomicInteger cmdId = new AtomicInteger(100);
-    private final Buffer receiveBuffer = new Buffer();
+    private final Buffer receiveBuffer = new ByteArrayBuffer();
     private boolean closing;
     private int version;
     private final Map<String, byte[]> extensions = new HashMap<>();
@@ -78,6 +146,7 @@ public class DefaultSftpClient implements SftpClient {
             throw (IOException) new InterruptedIOException().initCause(e);
         }
         this.channel.onClose(new Runnable() {
+            @Override
             public void run() {
                 synchronized (messages) {
                     closing = true;
@@ -93,10 +162,12 @@ public class DefaultSftpClient implements SftpClient {
         return version;
     }
 
+    @Override
     public boolean isClosing() {
         return closing;
     }
 
+    @Override
     public void close() throws IOException {
         this.channel.close(false);
     }
@@ -105,7 +176,7 @@ public class DefaultSftpClient implements SftpClient {
      * Receive binary data
      */
     protected int data(byte[] buf, int start, int len) throws IOException {
-        Buffer incoming = new Buffer(buf,  start, len);
+        Buffer incoming = new ByteArrayBuffer(buf,  start, len);
         // If we already have partial data, we need to append it to the buffer 
and use it
         if (receiveBuffer.available() > 0) {
             receiveBuffer.putBuffer(incoming);
@@ -152,7 +223,7 @@ public class DefaultSftpClient implements SftpClient {
      * Process an SFTP packet
      */
     protected void process(Buffer incoming) throws IOException {
-        Buffer buffer = new Buffer();
+        Buffer buffer = new ByteArrayBuffer();
         buffer.putBuffer(incoming);
         buffer.rpos(5);
         int id = buffer.getInt();
@@ -200,7 +271,7 @@ public class DefaultSftpClient implements SftpClient {
         if (length < 5) {
             throw new IllegalArgumentException();
         }
-        Buffer buffer = new Buffer(length + 4);
+        Buffer buffer = new ByteArrayBuffer(length + 4);
         buffer.putInt(length);
         int nb = length;
         while (nb > 0) {
@@ -516,8 +587,9 @@ public class DefaultSftpClient implements SftpClient {
         }
     }
 
+    @Override
     public Handle open(String path, Collection<OpenMode> options) throws 
IOException {
-        Buffer buffer = new Buffer();
+        Buffer buffer = new ByteArrayBuffer();
         buffer.putString(path);
         if (version == SFTP_V3) {
             int mode = 0;
@@ -576,24 +648,28 @@ public class DefaultSftpClient implements SftpClient {
         return checkHandle(receive(send(SSH_FXP_OPEN, buffer)));
     }
 
+    @Override
     public void close(Handle handle) throws IOException {
-        Buffer buffer = new Buffer();
+        Buffer buffer = new ByteArrayBuffer();
         buffer.putString(handle.id);
         checkStatus(receive(send(SSH_FXP_CLOSE, buffer)));
     }
 
+    @Override
     public void remove(String path) throws IOException {
-        Buffer buffer = new Buffer();
+        Buffer buffer = new ByteArrayBuffer();
         buffer.putString(path);
         checkStatus(receive(send(SSH_FXP_REMOVE, buffer)));
     }
 
+    @Override
     public void rename(String oldPath, String newPath) throws IOException {
         rename(oldPath, newPath, new CopyMode[0]);
     }
 
+    @Override
     public void rename(String oldPath, String newPath, CopyMode... options) 
throws IOException {
-        Buffer buffer = new Buffer();
+        Buffer buffer = new ByteArrayBuffer();
         buffer.putString(oldPath);
         buffer.putString(newPath);
         if (version >= SFTP_V5) {
@@ -615,8 +691,9 @@ public class DefaultSftpClient implements SftpClient {
         checkStatus(receive(send(SSH_FXP_RENAME, buffer)));
     }
 
+    @Override
     public int read(Handle handle, long fileOffset, byte[] dst, int dstoff, 
int len) throws IOException {
-        Buffer buffer = new Buffer();
+        Buffer buffer = new ByteArrayBuffer();
         buffer.putString(handle.id);
         buffer.putLong(fileOffset);
         buffer.putInt(len);
@@ -645,6 +722,7 @@ public class DefaultSftpClient implements SftpClient {
         }
     }
 
+    @Override
     public void write(Handle handle, long fileOffset, byte[] src, int srcoff, 
int len) throws IOException {
         // do some bounds checking first
         if (fileOffset < 0 || srcoff < 0 || len < 0) {
@@ -653,15 +731,16 @@ public class DefaultSftpClient implements SftpClient {
         if (srcoff + len > src.length) {
             throw new IllegalArgumentException("cannot read bytes " + srcoff + 
" to " + (srcoff + len) + " when array is only of length " + src.length);
         }
-        Buffer buffer = new Buffer();
+        Buffer buffer = new ByteArrayBuffer();
         buffer.putString(handle.id);
         buffer.putLong(fileOffset);
         buffer.putBytes(src, srcoff, len);
         checkStatus(receive(send(SSH_FXP_WRITE, buffer)));
     }
 
+    @Override
     public void mkdir(String path) throws IOException {
-        Buffer buffer = new Buffer();
+        Buffer buffer = new ByteArrayBuffer();
         buffer.putString(path, StandardCharsets.UTF_8);
         buffer.putInt(0);
         if (version != SFTP_V3) {
@@ -670,20 +749,23 @@ public class DefaultSftpClient implements SftpClient {
         checkStatus(receive(send(SSH_FXP_MKDIR, buffer)));
     }
 
+    @Override
     public void rmdir(String path) throws IOException {
-        Buffer buffer = new Buffer();
+        Buffer buffer = new ByteArrayBuffer();
         buffer.putString(path);
         checkStatus(receive(send(SSH_FXP_RMDIR, buffer)));
     }
 
+    @Override
     public Handle openDir(String path) throws IOException {
-        Buffer buffer = new Buffer();
+        Buffer buffer = new ByteArrayBuffer();
         buffer.putString(path);
         return checkHandle(receive(send(SSH_FXP_OPENDIR, buffer)));
     }
 
+    @Override
     public DirEntry[] readDir(Handle handle) throws IOException {
-        Buffer buffer = new Buffer();
+        Buffer buffer = new ByteArrayBuffer();
         buffer.putString(handle.id);
         return checkDir(receive(send(SSH_FXP_READDIR, buffer)));
     }
@@ -715,14 +797,16 @@ public class DefaultSftpClient implements SftpClient {
         }
     }
 
+    @Override
     public String canonicalPath(String path) throws IOException {
-        Buffer buffer = new Buffer();
+        Buffer buffer = new ByteArrayBuffer();
         buffer.putString(path);
         return checkOneName(receive(send(SSH_FXP_REALPATH, buffer)));
     }
 
+    @Override
     public Attributes stat(String path) throws IOException {
-        Buffer buffer = new Buffer();
+        Buffer buffer = new ByteArrayBuffer();
         buffer.putString(path);
         if (version >= SFTP_V4) {
             buffer.putInt(SSH_FILEXFER_ATTR_ALL);
@@ -730,8 +814,9 @@ public class DefaultSftpClient implements SftpClient {
         return checkAttributes(receive(send(SSH_FXP_STAT, buffer)));
     }
 
+    @Override
     public Attributes lstat(String path) throws IOException {
-        Buffer buffer = new Buffer();
+        Buffer buffer = new ByteArrayBuffer();
         buffer.putString(path);
         if (version >= SFTP_V4) {
             buffer.putInt(SSH_FILEXFER_ATTR_ALL);
@@ -739,8 +824,9 @@ public class DefaultSftpClient implements SftpClient {
         return checkAttributes(receive(send(SSH_FXP_LSTAT, buffer)));
     }
 
+    @Override
     public Attributes stat(Handle handle) throws IOException {
-        Buffer buffer = new Buffer();
+        Buffer buffer = new ByteArrayBuffer();
         buffer.putString(handle.id);
         if (version >= SFTP_V4) {
             buffer.putInt(SSH_FILEXFER_ATTR_ALL);
@@ -748,41 +834,46 @@ public class DefaultSftpClient implements SftpClient {
         return checkAttributes(receive(send(SSH_FXP_FSTAT, buffer)));
     }
 
+    @Override
     public void setStat(String path, Attributes attributes) throws IOException 
{
-        Buffer buffer = new Buffer();
+        Buffer buffer = new ByteArrayBuffer();
         buffer.putString(path);
         writeAttributes(buffer, attributes);
         checkStatus(receive(send(SSH_FXP_SETSTAT, buffer)));
     }
 
+    @Override
     public void setStat(Handle handle, Attributes attributes) throws 
IOException {
-        Buffer buffer = new Buffer();
+        Buffer buffer = new ByteArrayBuffer();
         buffer.putString(handle.id);
         writeAttributes(buffer, attributes);
         checkStatus(receive(send(SSH_FXP_FSETSTAT, buffer)));
     }
 
+    @Override
     public String readLink(String path) throws IOException {
-        Buffer buffer = new Buffer();
+        Buffer buffer = new ByteArrayBuffer();
         buffer.putString(path);
         return checkOneName(receive(send(SSH_FXP_READLINK, buffer)));
     }
 
+    @Override
     public void symLink(String linkPath, String targetPath) throws IOException 
{
         link(linkPath, targetPath, true);
     }
 
+    @Override
     public void link(String linkPath, String targetPath, boolean symbolic) 
throws IOException {
         if (version < SFTP_V6) {
             if (!symbolic) {
                 throw new UnsupportedOperationException("Hard links are not 
supported in sftp v" + version);
             }
-            Buffer buffer = new Buffer();
+            Buffer buffer = new ByteArrayBuffer();
             buffer.putString(targetPath);
             buffer.putString(linkPath);
             checkStatus(receive(send(SSH_FXP_SYMLINK, buffer)));
         } else {
-            Buffer buffer = new Buffer();
+            Buffer buffer = new ByteArrayBuffer();
             buffer.putString(targetPath);
             buffer.putString(linkPath);
             buffer.putBoolean(symbolic);
@@ -792,7 +883,7 @@ public class DefaultSftpClient implements SftpClient {
 
     @Override
     public void lock(Handle handle, long offset, long length, int mask) throws 
IOException {
-        Buffer buffer = new Buffer();
+        Buffer buffer = new ByteArrayBuffer();
         buffer.putString(handle.id);
         buffer.putLong(offset);
         buffer.putLong(length);
@@ -802,15 +893,17 @@ public class DefaultSftpClient implements SftpClient {
 
     @Override
     public void unlock(Handle handle, long offset, long length) throws 
IOException {
-        Buffer buffer = new Buffer();
+        Buffer buffer = new ByteArrayBuffer();
         buffer.putString(handle.id);
         buffer.putLong(offset);
         buffer.putLong(length);
         checkStatus(receive(send(SSH_FXP_UNBLOCK, buffer)));
     }
 
+    @Override
     public Iterable<DirEntry> readDir(final String path) throws IOException {
         return new Iterable<DirEntry>() {
+            @Override
             public Iterator<DirEntry> iterator() {
                 return new Iterator<DirEntry>() {
                     Handle handle;
@@ -820,9 +913,11 @@ public class DefaultSftpClient implements SftpClient {
                         open();
                         load();
                     }
+                    @Override
                     public boolean hasNext() {
                         return entries != null && index < entries.length;
                     }
+                    @Override
                     public DirEntry next() {
                         DirEntry entry = entries[index++];
                         if (index >= entries.length) {
@@ -854,6 +949,7 @@ public class DefaultSftpClient implements SftpClient {
                             throw new RuntimeException(e);
                         }
                     }
+                    @Override
                     public void remove() {
                         throw new UnsupportedOperationException();
                     }
@@ -862,10 +958,12 @@ public class DefaultSftpClient implements SftpClient {
         };
     }
 
+    @Override
     public InputStream read(final String path) throws IOException {
         return read(path, EnumSet.of(OpenMode.Read));
     }
 
+    @Override
     public InputStream read(final String path, final EnumSet<OpenMode> mode) 
throws IOException {
         return new InputStream() {
             byte[] buffer = new byte[32 * 1024];
@@ -922,10 +1020,12 @@ public class DefaultSftpClient implements SftpClient {
         };
     }
 
+    @Override
     public OutputStream write(final String path) throws IOException {
         return write(path, EnumSet.of(OpenMode.Write, OpenMode.Create, 
OpenMode.Truncate));
     }
 
+    @Override
     public OutputStream write(final String path, final EnumSet<OpenMode> mode) 
throws IOException {
         return new OutputStream() {
             byte[] buffer = new byte[32 * 1024];

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/sshd-core/src/main/java/org/apache/sshd/common/Channel.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/common/Channel.java 
b/sshd-core/src/main/java/org/apache/sshd/common/Channel.java
index d0ec2b3..e353b38 100644
--- a/sshd-core/src/main/java/org/apache/sshd/common/Channel.java
+++ b/sshd-core/src/main/java/org/apache/sshd/common/Channel.java
@@ -24,7 +24,7 @@ import org.apache.sshd.client.future.OpenFuture;
 import org.apache.sshd.common.channel.Window;
 import org.apache.sshd.common.future.CloseFuture;
 import org.apache.sshd.common.session.ConnectionService;
-import org.apache.sshd.common.util.Buffer;
+import org.apache.sshd.common.util.buffer.Buffer;
 
 /**
  * TODO Add javadoc

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/sshd-core/src/main/java/org/apache/sshd/common/KeyExchange.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/common/KeyExchange.java 
b/sshd-core/src/main/java/org/apache/sshd/common/KeyExchange.java
index cd9de71..d0c3e7a 100644
--- a/sshd-core/src/main/java/org/apache/sshd/common/KeyExchange.java
+++ b/sshd-core/src/main/java/org/apache/sshd/common/KeyExchange.java
@@ -21,7 +21,7 @@ package org.apache.sshd.common;
 import java.security.PublicKey;
 
 import org.apache.sshd.common.session.AbstractSession;
-import org.apache.sshd.common.util.Buffer;
+import org.apache.sshd.common.util.buffer.Buffer;
 
 /**
  * Key exchange algorithm.

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/sshd-core/src/main/java/org/apache/sshd/common/RequestHandler.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/common/RequestHandler.java 
b/sshd-core/src/main/java/org/apache/sshd/common/RequestHandler.java
index 1a239c4..0a78f45 100644
--- a/sshd-core/src/main/java/org/apache/sshd/common/RequestHandler.java
+++ b/sshd-core/src/main/java/org/apache/sshd/common/RequestHandler.java
@@ -19,7 +19,7 @@
 package org.apache.sshd.common;
 
 import org.apache.sshd.common.session.ConnectionService;
-import org.apache.sshd.common.util.Buffer;
+import org.apache.sshd.common.util.buffer.Buffer;
 
 /**
  * A global request handler.

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/sshd-core/src/main/java/org/apache/sshd/common/Service.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/common/Service.java 
b/sshd-core/src/main/java/org/apache/sshd/common/Service.java
index 1023475..fabdac0 100644
--- a/sshd-core/src/main/java/org/apache/sshd/common/Service.java
+++ b/sshd-core/src/main/java/org/apache/sshd/common/Service.java
@@ -21,7 +21,7 @@ package org.apache.sshd.common;
 import java.io.IOException;
 
 import org.apache.sshd.common.future.CloseFuture;
-import org.apache.sshd.common.util.Buffer;
+import org.apache.sshd.common.util.buffer.Buffer;
 
 /**
  * See RFC 4253 [SSH-TRANS] and the SSH_MSG_SERVICE_REQUEST packet.  Examples 
include ssh-userauth

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/sshd-core/src/main/java/org/apache/sshd/common/Session.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/common/Session.java 
b/sshd-core/src/main/java/org/apache/sshd/common/Session.java
index 66143ec..6ec08d1 100644
--- a/sshd-core/src/main/java/org/apache/sshd/common/Session.java
+++ b/sshd-core/src/main/java/org/apache/sshd/common/Session.java
@@ -24,7 +24,7 @@ import java.util.concurrent.TimeUnit;
 import org.apache.sshd.common.future.SshFuture;
 import org.apache.sshd.common.io.IoSession;
 import org.apache.sshd.common.io.IoWriteFuture;
-import org.apache.sshd.common.util.Buffer;
+import org.apache.sshd.common.util.buffer.Buffer;
 
 /**
  * Represents an SSH session

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/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 fd2aa0f..a5c6555 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
@@ -36,9 +36,10 @@ import org.apache.sshd.common.future.DefaultCloseFuture;
 import org.apache.sshd.common.future.SshFutureListener;
 import org.apache.sshd.common.io.IoWriteFuture;
 import org.apache.sshd.common.session.ConnectionService;
-import org.apache.sshd.common.util.Buffer;
-import org.apache.sshd.common.util.BufferUtils;
 import org.apache.sshd.common.util.CloseableUtils;
+import org.apache.sshd.common.util.buffer.Buffer;
+import org.apache.sshd.common.util.buffer.BufferUtils;
+import org.apache.sshd.common.util.buffer.ByteArrayBuffer;
 
 /**
  * TODO Add javadoc
@@ -71,30 +72,38 @@ public abstract class AbstractChannel extends 
CloseableUtils.AbstractInnerClosea
         handlers.add(handler);
     }
 
+    @Override
     public int getId() {
         return id;
     }
 
+    @Override
     public int getRecipient() {
         return recipient;
     }
 
+    @Override
     public Window getLocalWindow() {
         return localWindow;
     }
 
+    @Override
     public Window getRemoteWindow() {
         return remoteWindow;
     }
 
+    @Override
     public Session getSession() {
         return session;
     }
 
+    @Override
     public void handleRequest(Buffer buffer) throws IOException {
         String req = buffer.getString();
         boolean wantReply = buffer.getBoolean();
-        log.debug("Received SSH_MSG_CHANNEL_REQUEST {} on channel {} 
(wantReply {})", new Object[] { req, this, wantReply });
+        if (log.isDebugEnabled()) {
+            log.debug("Received SSH_MSG_CHANNEL_REQUEST {} on channel {} 
(wantReply {})", new Object[] { req, this, Boolean.valueOf(wantReply) });
+        }
         for (RequestHandler<Channel> handler : handlers) {
             RequestHandler.Result result;
             try {
@@ -130,6 +139,7 @@ public abstract class AbstractChannel extends 
CloseableUtils.AbstractInnerClosea
         }
     }
 
+    @Override
     public void init(ConnectionService service, Session session, int id) {
         this.service = service;
         this.session = session;
@@ -143,6 +153,7 @@ public abstract class AbstractChannel extends 
CloseableUtils.AbstractInnerClosea
         }
     }
 
+    @Override
     public void handleClose() throws IOException {
         log.debug("Received SSH_MSG_CHANNEL_CLOSE on channel {}", this);
         if (gracefulState.compareAndSet(GracefulState.Opened, 
GracefulState.CloseReceived)) {
@@ -152,6 +163,7 @@ public abstract class AbstractChannel extends 
CloseableUtils.AbstractInnerClosea
         }
     }
 
+    @Override
     protected Closeable getInnerCloseable() {
         return new GracefulChannelCloseable();
     }
@@ -160,12 +172,15 @@ public abstract class AbstractChannel extends 
CloseableUtils.AbstractInnerClosea
 
         protected volatile boolean closing;
 
+        @Override
         public boolean isClosing() {
             return closing;
         }
+        @Override
         public boolean isClosed() {
             return gracefulFuture.isClosed();
         }
+        @Override
         public CloseFuture close(boolean immediately) {
             closing = true;
             if (immediately) {
@@ -177,6 +192,7 @@ public abstract class AbstractChannel extends 
CloseableUtils.AbstractInnerClosea
                 try {
                     long timeout = 
FactoryManagerUtils.getLongProperty(getSession(), 
FactoryManager.CHANNEL_CLOSE_TIMEOUT, DEFAULT_CHANNEL_CLOSE_TIMEOUT);
                     session.writePacket(buffer, timeout, 
TimeUnit.MILLISECONDS).addListener(new SshFutureListener<IoWriteFuture>() {
+                        @Override
                         public void operationComplete(IoWriteFuture future) {
                             if (future.isWritten()) {
                                 log.debug("Message SSH_MSG_CHANNEL_CLOSE 
written on channel {}", AbstractChannel.this);
@@ -214,9 +230,10 @@ public abstract class AbstractChannel extends 
CloseableUtils.AbstractInnerClosea
         }
     }
 
+    @Override
     public void handleData(Buffer buffer) throws IOException {
         int len = buffer.getInt();
-        if (len < 0 || len > Buffer.MAX_LEN) {
+        if (len < 0 || len > ByteArrayBuffer.MAX_LEN) {
             throw new IllegalStateException("Bad item length: " + len);
         }
         log.debug("Received SSH_MSG_CHANNEL_DATA on channel {}", this);
@@ -226,6 +243,7 @@ public abstract class AbstractChannel extends 
CloseableUtils.AbstractInnerClosea
         doWriteData(buffer.array(), buffer.rpos(), len);
     }
 
+    @Override
     public void handleExtendedData(Buffer buffer) throws IOException {
         int ex = buffer.getInt();
         // Only accept extended data for stderr
@@ -237,7 +255,7 @@ public abstract class AbstractChannel extends 
CloseableUtils.AbstractInnerClosea
             return;
         }
         int len = buffer.getInt();
-        if (len < 0 || len > Buffer.MAX_LEN) {
+        if (len < 0 || len > ByteArrayBuffer.MAX_LEN) {
             throw new IllegalStateException("Bad item length: " + len);
         }
         log.debug("Received SSH_MSG_CHANNEL_EXTENDED_DATA on channel {}", 
this);
@@ -247,18 +265,21 @@ public abstract class AbstractChannel extends 
CloseableUtils.AbstractInnerClosea
         doWriteExtendedData(buffer.array(), buffer.rpos(), len);
     }
 
+    @Override
     public void handleEof() throws IOException {
         log.debug("Received SSH_MSG_CHANNEL_EOF on channel {}", this);
         eof = true;
         notifyStateChanged();
     }
 
+    @Override
     public void handleWindowAdjust(Buffer buffer) throws IOException {
         log.debug("Received SSH_MSG_CHANNEL_WINDOW_ADJUST on channel {}", 
this);
         int window = buffer.getInt();
         remoteWindow.expand(window);
     }
 
+    @Override
     public void handleFailure() throws IOException {
         log.debug("Received SSH_MSG_CHANNEL_FAILURE on channel {}", this);
         // TODO: do something to report failed requests?
@@ -289,6 +310,7 @@ public abstract class AbstractChannel extends 
CloseableUtils.AbstractInnerClosea
         writePacket(buffer);
     }
 
+    @Override
     public String toString() {
         return getClass().getSimpleName() + "[id=" + id + ", recipient=" + 
recipient + "]";
     }

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/sshd-core/src/main/java/org/apache/sshd/common/channel/BufferedIoOutputStream.java
----------------------------------------------------------------------
diff --git 
a/sshd-core/src/main/java/org/apache/sshd/common/channel/BufferedIoOutputStream.java
 
b/sshd-core/src/main/java/org/apache/sshd/common/channel/BufferedIoOutputStream.java
index 3c342c3..b9defba 100644
--- 
a/sshd-core/src/main/java/org/apache/sshd/common/channel/BufferedIoOutputStream.java
+++ 
b/sshd-core/src/main/java/org/apache/sshd/common/channel/BufferedIoOutputStream.java
@@ -27,8 +27,8 @@ import org.apache.sshd.common.Closeable;
 import org.apache.sshd.common.future.SshFutureListener;
 import org.apache.sshd.common.io.IoOutputStream;
 import org.apache.sshd.common.io.IoWriteFuture;
-import org.apache.sshd.common.util.Buffer;
 import org.apache.sshd.common.util.CloseableUtils;
+import org.apache.sshd.common.util.buffer.Buffer;
 
 /**
  * An IoOutputStream capable of queuing write requests

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/sshd-core/src/main/java/org/apache/sshd/common/channel/ChannelAsyncInputStream.java
----------------------------------------------------------------------
diff --git 
a/sshd-core/src/main/java/org/apache/sshd/common/channel/ChannelAsyncInputStream.java
 
b/sshd-core/src/main/java/org/apache/sshd/common/channel/ChannelAsyncInputStream.java
index b7cbbb5..5a41887 100644
--- 
a/sshd-core/src/main/java/org/apache/sshd/common/channel/ChannelAsyncInputStream.java
+++ 
b/sshd-core/src/main/java/org/apache/sshd/common/channel/ChannelAsyncInputStream.java
@@ -28,14 +28,15 @@ import org.apache.sshd.common.future.DefaultSshFuture;
 import org.apache.sshd.common.io.IoInputStream;
 import org.apache.sshd.common.io.IoReadFuture;
 import org.apache.sshd.common.io.ReadPendingException;
-import org.apache.sshd.common.util.Buffer;
 import org.apache.sshd.common.util.CloseableUtils;
 import org.apache.sshd.common.util.Readable;
+import org.apache.sshd.common.util.buffer.Buffer;
+import org.apache.sshd.common.util.buffer.ByteArrayBuffer;
 
 public class ChannelAsyncInputStream extends CloseableUtils.AbstractCloseable 
implements IoInputStream {
 
     private final Channel channel;
-    private final Buffer buffer = new Buffer();
+    private final Buffer buffer = new ByteArrayBuffer();
     private IoReadFutureImpl pending;
 
     public ChannelAsyncInputStream(Channel channel) {
@@ -49,6 +50,7 @@ public class ChannelAsyncInputStream extends 
CloseableUtils.AbstractCloseable im
         doRead(true);
     }
 
+    @Override
     public IoReadFuture read(Buffer buf) {
         IoReadFutureImpl future = new IoReadFutureImpl(buf);
         if (isClosing()) {
@@ -127,10 +129,12 @@ public class ChannelAsyncInputStream extends 
CloseableUtils.AbstractCloseable im
             this.buffer = buffer;
         }
 
+        @Override
         public Buffer getBuffer() {
             return buffer;
         }
 
+        @Override
         public void verify() throws SshException {
             try {
                 await();
@@ -142,6 +146,7 @@ public class ChannelAsyncInputStream extends 
CloseableUtils.AbstractCloseable im
                 throw new SshException("Write failed", getException());
             }
         }
+        @Override
         public int getRead() {
             Object v = getValue();
             if (v instanceof RuntimeException) {
@@ -157,6 +162,7 @@ public class ChannelAsyncInputStream extends 
CloseableUtils.AbstractCloseable im
             }
         }
 
+        @Override
         public Throwable getException() {
             Object v = getValue();
             if (v instanceof Throwable) {

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/sshd-core/src/main/java/org/apache/sshd/common/channel/ChannelAsyncOutputStream.java
----------------------------------------------------------------------
diff --git 
a/sshd-core/src/main/java/org/apache/sshd/common/channel/ChannelAsyncOutputStream.java
 
b/sshd-core/src/main/java/org/apache/sshd/common/channel/ChannelAsyncOutputStream.java
index 6aabdeb..11089c9 100644
--- 
a/sshd-core/src/main/java/org/apache/sshd/common/channel/ChannelAsyncOutputStream.java
+++ 
b/sshd-core/src/main/java/org/apache/sshd/common/channel/ChannelAsyncOutputStream.java
@@ -30,8 +30,8 @@ import org.apache.sshd.common.future.SshFutureListener;
 import org.apache.sshd.common.io.IoOutputStream;
 import org.apache.sshd.common.io.IoWriteFuture;
 import org.apache.sshd.common.io.WritePendingException;
-import org.apache.sshd.common.util.Buffer;
 import org.apache.sshd.common.util.CloseableUtils;
+import org.apache.sshd.common.util.buffer.Buffer;
 
 public class ChannelAsyncOutputStream extends CloseableUtils.AbstractCloseable 
implements IoOutputStream {
 

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/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 5c3c959..19d0bb2 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
@@ -24,7 +24,7 @@ import java.io.OutputStream;
 
 import org.apache.sshd.common.SshConstants;
 import org.apache.sshd.common.SshException;
-import org.apache.sshd.common.util.Buffer;
+import org.apache.sshd.common.util.buffer.Buffer;
 import org.slf4j.Logger;
 
 /**

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/sshd-core/src/main/java/org/apache/sshd/common/channel/ChannelPipedInputStream.java
----------------------------------------------------------------------
diff --git 
a/sshd-core/src/main/java/org/apache/sshd/common/channel/ChannelPipedInputStream.java
 
b/sshd-core/src/main/java/org/apache/sshd/common/channel/ChannelPipedInputStream.java
index cb003b7..d3e5b9e 100644
--- 
a/sshd-core/src/main/java/org/apache/sshd/common/channel/ChannelPipedInputStream.java
+++ 
b/sshd-core/src/main/java/org/apache/sshd/common/channel/ChannelPipedInputStream.java
@@ -27,7 +27,8 @@ import java.util.concurrent.locks.Condition;
 import java.util.concurrent.locks.Lock;
 import java.util.concurrent.locks.ReentrantLock;
 
-import org.apache.sshd.common.util.Buffer;
+import org.apache.sshd.common.util.buffer.Buffer;
+import org.apache.sshd.common.util.buffer.ByteArrayBuffer;
 
 /**
  * TODO Add javadoc
@@ -37,7 +38,7 @@ import org.apache.sshd.common.util.Buffer;
 public class ChannelPipedInputStream extends InputStream {
 
     private final Window localWindow;
-    private final Buffer buffer = new Buffer();
+    private final Buffer buffer = new ByteArrayBuffer();
     private final byte[] b = new byte[1];
     private boolean closed;
     private boolean eofSent;
@@ -80,13 +81,14 @@ public class ChannelPipedInputStream extends InputStream {
         }
     }
 
+    @Override
     public int read() throws IOException {
         synchronized (b) {
             int l = read(b, 0, 1);
             if (l == -1) {
                 return -1;
             }
-            return ((int) b[0] & 0xff);
+            return (b[0] & 0xff);
         }
     }
 

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/9f0bb1bc/sshd-core/src/main/java/org/apache/sshd/common/cipher/ECCurves.java
----------------------------------------------------------------------
diff --git 
a/sshd-core/src/main/java/org/apache/sshd/common/cipher/ECCurves.java 
b/sshd-core/src/main/java/org/apache/sshd/common/cipher/ECCurves.java
index 14d979b..2cc250c 100644
--- a/sshd-core/src/main/java/org/apache/sshd/common/cipher/ECCurves.java
+++ b/sshd-core/src/main/java/org/apache/sshd/common/cipher/ECCurves.java
@@ -28,6 +28,7 @@ import java.util.TreeMap;
 
 import org.apache.sshd.common.Digest;
 import org.apache.sshd.common.digest.BuiltinDigests;
+import org.apache.sshd.common.util.GenericUtils;
 
 /**
  * Utilities for working with elliptic curves.
@@ -53,7 +54,7 @@ public class ECCurves {
     public static String getCurveName(ECParameterSpec params) {
         int fieldSize = getCurveSize(params);
         final String curveName = getCurveName(fieldSize);
-        if (curveName == null) {
+        if (GenericUtils.isEmpty(curveName)) {
             throw new RuntimeException("invalid curve size " + fieldSize);
         }
         return curveName;

Reply via email to