You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@mina.apache.org by Guillaume Nodet <gn...@gmail.com> on 2009/12/15 12:56:31 UTC
Re: svn commit: r890631 - in /mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd:
client/auth/ client/channel/ client/kex/ client/session/ common/
common/channel/ common/session/ server/auth/ server/channel/ server/session/
I wonder if we should add back the createBuffer method with a single
argument that would call createBuffer(cmd, 0) for readability...
On Tue, Dec 15, 2009 at 04:56, <sp...@apache.org> wrote:
> Author: spearce
> Date: Tue Dec 15 03:56:32 2009
> New Revision: 890631
>
> URL: http://svn.apache.org/viewvc?rev=890631&view=rev
> Log:
> Allocate the next ChannelOutputStream buffer sized to last buffer
>
> If an output stream has just received a large burst of data from
> the application, its buffer will have needed to grow beyond the
> default buffer size of 512 bytes. Its quite likely that there will
> be even more data from the application, filling the next buffer
> up to approximately the same size before we are forced to trigger
> another flush. So allocate the next buffer sized to hold the last
> packet's complete length, or the data remaining if we had to split
> the buffered packet to fit into the available window space.
>
> Unfortunately most uses of createBuffer don't care about the size
> of the buffer, as they are one-shot requests which are often within
> the default size of 512 bytes. Pass in 0 for these and allow them
> to use the default 512 byte size.
>
> Modified:
> mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/client/auth/UserAuthAgent.java
> mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/client/auth/UserAuthPassword.java
> mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/client/auth/UserAuthPublicKey.java
> mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/client/channel/AbstractClientChannel.java
> mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/client/channel/ChannelAgentForwarding.java
> mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/client/channel/ChannelExec.java
> mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/client/channel/ChannelSession.java
> mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/client/channel/ChannelShell.java
> mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/client/kex/AbstractDHGClient.java
> mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/client/session/ClientSessionImpl.java
> mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/common/Session.java
> mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/common/channel/AbstractChannel.java
> mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/common/channel/ChannelOutputStream.java
> mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/common/session/AbstractSession.java
> mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/server/auth/UserAuthPublicKey.java
> mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/server/channel/AbstractServerChannel.java
> mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/server/channel/ChannelDirectTcpip.java
> mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/server/channel/ChannelSession.java
> mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/server/session/ServerSession.java
> mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/server/session/TcpipForwardSupport.java
>
> Modified: mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/client/auth/UserAuthAgent.java
> URL: http://svn.apache.org/viewvc/mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/client/auth/UserAuthAgent.java?rev=890631&r1=890630&r2=890631&view=diff
> ==============================================================================
> --- mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/client/auth/UserAuthAgent.java (original)
> +++ mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/client/auth/UserAuthAgent.java Tue Dec 15 03:56:32 2009
> @@ -63,7 +63,7 @@
> protected void sendNextKey(PublicKey key) throws IOException {
> try {
> log.info("Send SSH_MSG_USERAUTH_REQUEST for publickey");
> - Buffer buffer = session.createBuffer(SshConstants.Message.SSH_MSG_USERAUTH_REQUEST);
> + Buffer buffer = session.createBuffer(SshConstants.Message.SSH_MSG_USERAUTH_REQUEST, 0);
> int pos1 = buffer.wpos() - 1;
> buffer.putString(username);
> buffer.putString("ssh-connection");
>
> Modified: mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/client/auth/UserAuthPassword.java
> URL: http://svn.apache.org/viewvc/mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/client/auth/UserAuthPassword.java?rev=890631&r1=890630&r2=890631&view=diff
> ==============================================================================
> --- mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/client/auth/UserAuthPassword.java (original)
> +++ mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/client/auth/UserAuthPassword.java Tue Dec 15 03:56:32 2009
> @@ -38,7 +38,7 @@
>
> public UserAuthPassword(ClientSessionImpl session, String username, String password) throws IOException {
> log.info("Send SSH_MSG_USERAUTH_REQUEST for password");
> - Buffer buffer = session.createBuffer(SshConstants.Message.SSH_MSG_USERAUTH_REQUEST);
> + Buffer buffer = session.createBuffer(SshConstants.Message.SSH_MSG_USERAUTH_REQUEST, 0);
> buffer.putString(username);
> buffer.putString("ssh-connection");
> buffer.putString("password");
>
> Modified: mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/client/auth/UserAuthPublicKey.java
> URL: http://svn.apache.org/viewvc/mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/client/auth/UserAuthPublicKey.java?rev=890631&r1=890630&r2=890631&view=diff
> ==============================================================================
> --- mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/client/auth/UserAuthPublicKey.java (original)
> +++ mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/client/auth/UserAuthPublicKey.java Tue Dec 15 03:56:32 2009
> @@ -47,7 +47,7 @@
> public UserAuthPublicKey(ClientSessionImpl session, String username, KeyPair key) throws IOException {
> try {
> log.info("Send SSH_MSG_USERAUTH_REQUEST for publickey");
> - Buffer buffer = session.createBuffer(SshConstants.Message.SSH_MSG_USERAUTH_REQUEST);
> + Buffer buffer = session.createBuffer(SshConstants.Message.SSH_MSG_USERAUTH_REQUEST, 0);
> int pos1 = buffer.wpos() - 1;
> buffer.putString(username);
> buffer.putString("ssh-connection");
>
> Modified: mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/client/channel/AbstractClientChannel.java
> URL: http://svn.apache.org/viewvc/mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/client/channel/AbstractClientChannel.java?rev=890631&r1=890630&r2=890631&view=diff
> ==============================================================================
> --- mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/client/channel/AbstractClientChannel.java (original)
> +++ mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/client/channel/AbstractClientChannel.java Tue Dec 15 03:56:32 2009
> @@ -165,7 +165,7 @@
> }
> openFuture = new DefaultOpenFuture(lock);
> log.info("Send SSH_MSG_CHANNEL_OPEN on channel {}", id);
> - Buffer buffer = session.createBuffer(SshConstants.Message.SSH_MSG_CHANNEL_OPEN);
> + Buffer buffer = session.createBuffer(SshConstants.Message.SSH_MSG_CHANNEL_OPEN, 0);
> buffer.putString(type);
> buffer.putInt(id);
> buffer.putInt(localWindow.getSize());
>
> Modified: mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/client/channel/ChannelAgentForwarding.java
> URL: http://svn.apache.org/viewvc/mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/client/channel/ChannelAgentForwarding.java?rev=890631&r1=890630&r2=890631&view=diff
> ==============================================================================
> --- mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/client/channel/ChannelAgentForwarding.java (original)
> +++ mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/client/channel/ChannelAgentForwarding.java Tue Dec 15 03:56:32 2009
> @@ -173,7 +173,7 @@
> log.info("Received SSH_MSG_CHANNEL_REQUEST on channel {}", id);
> String type = buffer.getString();
> log.info("Received channel request: {}", type);
> - buffer = session.createBuffer(SshConstants.Message.SSH_MSG_CHANNEL_FAILURE);
> + buffer = session.createBuffer(SshConstants.Message.SSH_MSG_CHANNEL_FAILURE, 0);
> buffer.putInt(recipient);
> session.writePacket(buffer);
> }
>
> Modified: mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/client/channel/ChannelExec.java
> URL: http://svn.apache.org/viewvc/mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/client/channel/ChannelExec.java?rev=890631&r1=890630&r2=890631&view=diff
> ==============================================================================
> --- mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/client/channel/ChannelExec.java (original)
> +++ mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/client/channel/ChannelExec.java Tue Dec 15 03:56:32 2009
> @@ -78,7 +78,7 @@
> }
>
> log.info("Send SSH_MSG_CHANNEL_REQUEST exec");
> - buffer = session.createBuffer(SshConstants.Message.SSH_MSG_CHANNEL_REQUEST);
> + buffer = session.createBuffer(SshConstants.Message.SSH_MSG_CHANNEL_REQUEST, 0);
> buffer.putInt(recipient);
> buffer.putString("exec");
> buffer.putBoolean(false);
>
> Modified: mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/client/channel/ChannelSession.java
> URL: http://svn.apache.org/viewvc/mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/client/channel/ChannelSession.java?rev=890631&r1=890630&r2=890631&view=diff
> ==============================================================================
> --- mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/client/channel/ChannelSession.java (original)
> +++ mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/client/channel/ChannelSession.java Tue Dec 15 03:56:32 2009
> @@ -72,7 +72,7 @@
> protected void pumpInputStream() {
> try {
> while (!closeFuture.isClosed()) {
> - Buffer buffer = session.createBuffer(SshConstants.Message.SSH_MSG_CHANNEL_DATA);
> + Buffer buffer = session.createBuffer(SshConstants.Message.SSH_MSG_CHANNEL_DATA, 0);
> buffer.putInt(recipient);
> int wpos1 = buffer.wpos(); // keep buffer position to write data length later
> buffer.putInt(0);
>
> Modified: mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/client/channel/ChannelShell.java
> URL: http://svn.apache.org/viewvc/mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/client/channel/ChannelShell.java?rev=890631&r1=890630&r2=890631&view=diff
> ==============================================================================
> --- mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/client/channel/ChannelShell.java (original)
> +++ mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/client/channel/ChannelShell.java Tue Dec 15 03:56:32 2009
> @@ -139,7 +139,7 @@
>
> if (agentForwarding) {
> log.info("Send agent forwarding request");
> - buffer = session.createBuffer(SshConstants.Message.SSH_MSG_CHANNEL_REQUEST);
> + buffer = session.createBuffer(SshConstants.Message.SSH_MSG_CHANNEL_REQUEST, 0);
> buffer.putInt(recipient);
> buffer.putString("auth-agent-req@openssh.com");
> buffer.putBoolean(false);
> @@ -147,7 +147,7 @@
> }
>
> log.info("Send SSH_MSG_CHANNEL_REQUEST pty-req");
> - buffer = session.createBuffer(SshConstants.Message.SSH_MSG_CHANNEL_REQUEST);
> + buffer = session.createBuffer(SshConstants.Message.SSH_MSG_CHANNEL_REQUEST, 0);
> buffer.putInt(recipient);
> buffer.putString("pty-req");
> buffer.putBoolean(false);
> @@ -172,7 +172,7 @@
> // session.writePacket(buffer);
>
> log.info("Send SSH_MSG_CHANNEL_REQUEST shell");
> - buffer = session.createBuffer(SshConstants.Message.SSH_MSG_CHANNEL_REQUEST);
> + buffer = session.createBuffer(SshConstants.Message.SSH_MSG_CHANNEL_REQUEST, 0);
> buffer.putInt(recipient);
> buffer.putString("shell");
> buffer.putBoolean(false);
>
> Modified: mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/client/kex/AbstractDHGClient.java
> URL: http://svn.apache.org/viewvc/mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/client/kex/AbstractDHGClient.java?rev=890631&r1=890630&r2=890631&view=diff
> ==============================================================================
> --- mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/client/kex/AbstractDHGClient.java (original)
> +++ mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/client/kex/AbstractDHGClient.java Tue Dec 15 03:56:32 2009
> @@ -75,7 +75,7 @@
> e = dh.getE();
>
> log.info("Send SSH_MSG_KEXDH_INIT");
> - Buffer buffer = s.createBuffer(SshConstants.Message.SSH_MSG_KEXDH_INIT);
> + Buffer buffer = s.createBuffer(SshConstants.Message.SSH_MSG_KEXDH_INIT, 0);
> buffer.putMPInt(e);
> session.writePacket(buffer);
> }
>
> Modified: mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/client/session/ClientSessionImpl.java
> URL: http://svn.apache.org/viewvc/mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/client/session/ClientSessionImpl.java?rev=890631&r1=890630&r2=890631&view=diff
> ==============================================================================
> --- mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/client/session/ClientSessionImpl.java (original)
> +++ mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/client/session/ClientSessionImpl.java Tue Dec 15 03:56:32 2009
> @@ -375,7 +375,7 @@
>
> private void sendAuthRequest() throws Exception {
> log.info("Send SSH_MSG_SERVICE_REQUEST for ssh-userauth");
> - Buffer buffer = createBuffer(SshConstants.Message.SSH_MSG_SERVICE_REQUEST);
> + Buffer buffer = createBuffer(SshConstants.Message.SSH_MSG_SERVICE_REQUEST, 0);
> buffer.putString("ssh-userauth");
> writePacket(buffer);
> }
> @@ -389,7 +389,7 @@
> log.info("Received SSH_MSG_CHANNEL_OPEN {}", type);
>
> if (closing) {
> - Buffer buf = createBuffer(SshConstants.Message.SSH_MSG_CHANNEL_OPEN_FAILURE);
> + Buffer buf = createBuffer(SshConstants.Message.SSH_MSG_CHANNEL_OPEN_FAILURE, 0);
> buf.putInt(id);
> buf.putInt(SshConstants.SSH_OPEN_CONNECT_FAILED);
> buf.putString("SSH server is shutting down: " + type);
> @@ -400,7 +400,7 @@
>
> final Channel channel = NamedFactory.Utils.create(getFactoryManager().getChannelFactories(), type);
> if (channel == null) {
> - Buffer buf = createBuffer(SshConstants.Message.SSH_MSG_CHANNEL_OPEN_FAILURE);
> + Buffer buf = createBuffer(SshConstants.Message.SSH_MSG_CHANNEL_OPEN_FAILURE, 0);
> buf.putInt(id);
> buf.putInt(SshConstants.SSH_OPEN_UNKNOWN_CHANNEL_TYPE);
> buf.putString("Unsupported channel type: " + type);
> @@ -416,14 +416,14 @@
> public void operationComplete(OpenFuture future) {
> try {
> if (future.isOpened()) {
> - Buffer buf = createBuffer(SshConstants.Message.SSH_MSG_CHANNEL_OPEN_CONFIRMATION);
> + Buffer buf = createBuffer(SshConstants.Message.SSH_MSG_CHANNEL_OPEN_CONFIRMATION, 0);
> buf.putInt(id);
> buf.putInt(channelId);
> buf.putInt(channel.getLocalWindow().getSize());
> buf.putInt(channel.getLocalWindow().getPacketSize());
> writePacket(buf);
> } else if (future.getException() != null) {
> - Buffer buf = createBuffer(SshConstants.Message.SSH_MSG_CHANNEL_OPEN_FAILURE);
> + Buffer buf = createBuffer(SshConstants.Message.SSH_MSG_CHANNEL_OPEN_FAILURE, 0);
> buf.putInt(id);
> if (future.getException() instanceof OpenChannelException) {
> buf.putInt(((OpenChannelException)future.getException()).getReasonCode());
>
> Modified: mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/common/Session.java
> URL: http://svn.apache.org/viewvc/mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/common/Session.java?rev=890631&r1=890630&r2=890631&view=diff
> ==============================================================================
> --- mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/common/Session.java (original)
> +++ mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/common/Session.java Tue Dec 15 03:56:32 2009
> @@ -68,9 +68,10 @@
> * (5 bytes) for the packet header.
> *
> * @param cmd the SSH command
> + * @param estimatedSize estimated number of bytes the buffer will hold, 0 if unknown.
> * @return a new buffer ready for write
> */
> - Buffer createBuffer(SshConstants.Message cmd);
> + Buffer createBuffer(SshConstants.Message cmd, int estimatedSize);
>
> /**
> * Encode and send the given buffer.
>
> Modified: mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/common/channel/AbstractChannel.java
> URL: http://svn.apache.org/viewvc/mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/common/channel/AbstractChannel.java?rev=890631&r1=890630&r2=890631&view=diff
> ==============================================================================
> --- mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/common/channel/AbstractChannel.java (original)
> +++ mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/common/channel/AbstractChannel.java Tue Dec 15 03:56:32 2009
> @@ -92,7 +92,7 @@
> if (!closing) {
> closing = true;
> log.info("Send SSH_MSG_CHANNEL_CLOSE on channel {}", id);
> - Buffer buffer = session.createBuffer(SshConstants.Message.SSH_MSG_CHANNEL_CLOSE);
> + Buffer buffer = session.createBuffer(SshConstants.Message.SSH_MSG_CHANNEL_CLOSE, 0);
> buffer.putInt(recipient);
> session.writePacket(buffer);
> }
> @@ -134,7 +134,7 @@
> // Only accept extended data for stderr
> if (ex != 1) {
> log.info("Send SSH_MSG_CHANNEL_FAILURE on channel {}", id);
> - buffer = session.createBuffer(SshConstants.Message.SSH_MSG_CHANNEL_FAILURE);
> + buffer = session.createBuffer(SshConstants.Message.SSH_MSG_CHANNEL_FAILURE, 0);
> buffer.putInt(recipient);
> session.writePacket(buffer);
> return;
> @@ -175,7 +175,7 @@
>
> protected void sendEof() throws IOException {
> log.info("Send SSH_MSG_CHANNEL_EOF on channel {}", id);
> - Buffer buffer = session.createBuffer(SshConstants.Message.SSH_MSG_CHANNEL_EOF);
> + Buffer buffer = session.createBuffer(SshConstants.Message.SSH_MSG_CHANNEL_EOF, 0);
> buffer.putInt(recipient);
> session.writePacket(buffer);
> }
> @@ -188,7 +188,7 @@
>
> protected void sendWindowAdjust(int len) throws IOException {
> log.info("Send SSH_MSG_CHANNEL_WINDOW_ADJUST on channel {}", id);
> - Buffer buffer = session.createBuffer(SshConstants.Message.SSH_MSG_CHANNEL_WINDOW_ADJUST);
> + Buffer buffer = session.createBuffer(SshConstants.Message.SSH_MSG_CHANNEL_WINDOW_ADJUST, 0);
> buffer.putInt(recipient);
> buffer.putInt(len);
> session.writePacket(buffer);
>
> Modified: mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/common/channel/ChannelOutputStream.java
> URL: http://svn.apache.org/viewvc/mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/common/channel/ChannelOutputStream.java?rev=890631&r1=890630&r2=890631&view=diff
> ==============================================================================
> --- mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/common/channel/ChannelOutputStream.java (original)
> +++ mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/common/channel/ChannelOutputStream.java Tue Dec 15 03:56:32 2009
> @@ -41,6 +41,7 @@
> private Buffer buffer;
> private boolean closed;
> private int bufferLength;
> + private int lastSize;
>
> public ChannelOutputStream(AbstractChannel channel, Window remoteWindow, Logger log, SshConstants.Message cmd) {
> this.channel = channel;
> @@ -77,6 +78,7 @@
> buf.wpos(cmd == SshConstants.Message.SSH_MSG_CHANNEL_EXTENDED_DATA ? 14 : 10);
> buf.putInt(length);
> buf.wpos(buf.wpos() + length);
> + lastSize = Math.max(length, total - length);
> newBuffer();
> if (total > length) {
> buffer.putRawBytes(buf.array(), pos - (total - length), total - length);
> @@ -104,7 +106,7 @@
> }
>
> private void newBuffer() {
> - buffer = channel.getSession().createBuffer(cmd);
> + buffer = channel.getSession().createBuffer(cmd, lastSize <= 0 ? 0 : 12 + lastSize);
> buffer.putInt(channel.getRecipient());
> if (cmd == SshConstants.Message.SSH_MSG_CHANNEL_EXTENDED_DATA) {
> buffer.putInt(1);
>
> Modified: mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/common/session/AbstractSession.java
> URL: http://svn.apache.org/viewvc/mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/common/session/AbstractSession.java?rev=890631&r1=890630&r2=890631&view=diff
> ==============================================================================
> --- mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/common/session/AbstractSession.java (original)
> +++ mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/common/session/AbstractSession.java Tue Dec 15 03:56:32 2009
> @@ -336,10 +336,31 @@
> * (5 bytes) for the packet header.
> *
> * @param cmd the SSH command
> + * @param len estimated number of bytes the buffer will hold, 0 if unknown.
> * @return a new buffer ready for write
> */
> - public Buffer createBuffer(SshConstants.Message cmd) {
> - Buffer buffer = new Buffer();
> + public Buffer createBuffer(SshConstants.Message cmd, int len) {
> + Buffer buffer;
> + if (len <= 0) {
> + buffer = new Buffer();
> + } else {
> + // Since the caller claims to know how many bytes they will need
> + // increase their request to account for our headers/footers if
> + // they actually send exactly this amount.
> + //
> + int bsize = outCipherSize;
> + int oldLen = len;
> + len += 5;
> + int pad = (-len) & (bsize - 1);
> + if (pad < bsize) {
> + pad += bsize;
> + }
> + len = len + pad - 4;
> + if (outMac != null) {
> + len += outMac.getBlockSize();
> + }
> + buffer = new Buffer(new byte[Math.max(len, Buffer.DEFAULT_SIZE)], false);
> + }
> buffer.rpos(5);
> buffer.wpos(5);
> buffer.putByte(cmd.toByte());
> @@ -615,7 +636,7 @@
> * @throws IOException if an error occured sending the packet
> */
> protected byte[] sendKexInit(String[] proposal) throws IOException {
> - Buffer buffer = createBuffer(SshConstants.Message.SSH_MSG_KEXINIT);
> + Buffer buffer = createBuffer(SshConstants.Message.SSH_MSG_KEXINIT, 0);
> int p = buffer.wpos();
> buffer.wpos(p + 16);
> random.fill(buffer.array(), p, 16);
> @@ -663,7 +684,7 @@
> */
> protected void sendNewKeys() throws IOException {
> log.info("Send SSH_MSG_NEWKEYS");
> - Buffer buffer = createBuffer(SshConstants.Message.SSH_MSG_NEWKEYS);
> + Buffer buffer = createBuffer(SshConstants.Message.SSH_MSG_NEWKEYS, 0);
> writePacket(buffer);
> }
>
> @@ -810,7 +831,7 @@
> * @throws IOException if an error occured sending the packet
> */
> public void disconnect(int reason, String msg) throws IOException {
> - Buffer buffer = createBuffer(SshConstants.Message.SSH_MSG_DISCONNECT);
> + Buffer buffer = createBuffer(SshConstants.Message.SSH_MSG_DISCONNECT, 0);
> buffer.putInt(reason);
> buffer.putString(msg);
> buffer.putString("");
> @@ -830,7 +851,7 @@
> * @throws IOException if an error occured sending the packet
> */
> protected void notImplemented() throws IOException {
> - Buffer buffer = createBuffer(SshConstants.Message.SSH_MSG_UNIMPLEMENTED);
> + Buffer buffer = createBuffer(SshConstants.Message.SSH_MSG_UNIMPLEMENTED, 0);
> buffer.putInt(seqi - 1);
> writePacket(buffer);
> }
>
> Modified: mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/server/auth/UserAuthPublicKey.java
> URL: http://svn.apache.org/viewvc/mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/server/auth/UserAuthPublicKey.java?rev=890631&r1=890630&r2=890631&view=diff
> ==============================================================================
> --- mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/server/auth/UserAuthPublicKey.java (original)
> +++ mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/server/auth/UserAuthPublicKey.java Tue Dec 15 03:56:32 2009
> @@ -72,7 +72,7 @@
> return false;
> }
> if (!hasSig) {
> - Buffer buf = session.createBuffer(SshConstants.Message.SSH_MSG_USERAUTH_PK_OK);
> + Buffer buf = session.createBuffer(SshConstants.Message.SSH_MSG_USERAUTH_PK_OK, 0);
> buf.putString(alg);
> buf.putRawBytes(buffer.array(), oldPos, 4 + len);
> session.writePacket(buf);
>
> Modified: mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/server/channel/AbstractServerChannel.java
> URL: http://svn.apache.org/viewvc/mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/server/channel/AbstractServerChannel.java?rev=890631&r1=890630&r2=890631&view=diff
> ==============================================================================
> --- mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/server/channel/AbstractServerChannel.java (original)
> +++ mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/server/channel/AbstractServerChannel.java Tue Dec 15 03:56:32 2009
> @@ -60,7 +60,7 @@
> if (!exitStatusSent) {
> exitStatusSent = true;
> log.info("Send SSH_MSG_CHANNEL_REQUEST exit-status on channel {}", id);
> - Buffer buffer = session.createBuffer(SshConstants.Message.SSH_MSG_CHANNEL_REQUEST);
> + Buffer buffer = session.createBuffer(SshConstants.Message.SSH_MSG_CHANNEL_REQUEST, 0);
> buffer.putInt(recipient);
> buffer.putString("exit-status");
> buffer.putByte((byte) 0);
>
> Modified: mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/server/channel/ChannelDirectTcpip.java
> URL: http://svn.apache.org/viewvc/mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/server/channel/ChannelDirectTcpip.java?rev=890631&r1=890630&r2=890631&view=diff
> ==============================================================================
> --- mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/server/channel/ChannelDirectTcpip.java (original)
> +++ mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/server/channel/ChannelDirectTcpip.java Tue Dec 15 03:56:32 2009
> @@ -186,7 +186,7 @@
> log.info("Received SSH_MSG_CHANNEL_REQUEST on channel {}", id);
> String type = buffer.getString();
> log.info("Received channel request: {}", type);
> - buffer = session.createBuffer(SshConstants.Message.SSH_MSG_CHANNEL_FAILURE);
> + buffer = session.createBuffer(SshConstants.Message.SSH_MSG_CHANNEL_FAILURE, 0);
> buffer.putInt(recipient);
> session.writePacket(buffer);
> }
>
> Modified: mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/server/channel/ChannelSession.java
> URL: http://svn.apache.org/viewvc/mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/server/channel/ChannelSession.java?rev=890631&r1=890630&r2=890631&view=diff
> ==============================================================================
> --- mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/server/channel/ChannelSession.java (original)
> +++ mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/server/channel/ChannelSession.java Tue Dec 15 03:56:32 2009
> @@ -195,7 +195,7 @@
> String type = buffer.getString();
> log.info("Received channel request: {}", type);
> if (!handleRequest(type, buffer)) {
> - buffer = session.createBuffer(SshConstants.Message.SSH_MSG_CHANNEL_FAILURE);
> + buffer = session.createBuffer(SshConstants.Message.SSH_MSG_CHANNEL_FAILURE, 0);
> buffer.putInt(recipient);
> session.writePacket(buffer);
> }
> @@ -276,7 +276,7 @@
> addEnvVariable(name, value);
> log.debug("env for channel {}: {} = {}", new Object[] { id, name, value });
> if (wantReply) {
> - buffer = session.createBuffer(SshConstants.Message.SSH_MSG_CHANNEL_SUCCESS);
> + buffer = session.createBuffer(SshConstants.Message.SSH_MSG_CHANNEL_SUCCESS, 0);
> buffer.putInt(recipient);
> session.writePacket(buffer);
> }
> @@ -306,7 +306,7 @@
> addEnvVariable(Environment.ENV_COLUMNS, Integer.toString(tColumns));
> addEnvVariable(Environment.ENV_LINES, Integer.toString(tRows));
> if (wantReply) {
> - buffer = session.createBuffer(SshConstants.Message.SSH_MSG_CHANNEL_SUCCESS);
> + buffer = session.createBuffer(SshConstants.Message.SSH_MSG_CHANNEL_SUCCESS, 0);
> buffer.putInt(recipient);
> session.writePacket(buffer);
> }
> @@ -327,7 +327,7 @@
> e.signal(Signal.WINCH);
>
> if (wantReply) {
> - buffer = session.createBuffer(SshConstants.Message.SSH_MSG_CHANNEL_SUCCESS);
> + buffer = session.createBuffer(SshConstants.Message.SSH_MSG_CHANNEL_SUCCESS, 0);
> buffer.putInt(recipient);
> session.writePacket(buffer);
> }
> @@ -348,7 +348,7 @@
>
>
> if (wantReply) {
> - buffer = session.createBuffer(SshConstants.Message.SSH_MSG_CHANNEL_SUCCESS);
> + buffer = session.createBuffer(SshConstants.Message.SSH_MSG_CHANNEL_SUCCESS, 0);
> buffer.putInt(recipient);
> session.writePacket(buffer);
> }
> @@ -363,7 +363,7 @@
> command = ((ServerSession) session).getServerFactoryManager().getShellFactory().create();
> prepareCommand();
> if (wantReply) {
> - buffer = session.createBuffer(SshConstants.Message.SSH_MSG_CHANNEL_SUCCESS);
> + buffer = session.createBuffer(SshConstants.Message.SSH_MSG_CHANNEL_SUCCESS, 0);
> buffer.putInt(recipient);
> session.writePacket(buffer);
> }
> @@ -385,7 +385,7 @@
> }
> prepareCommand();
> if (wantReply) {
> - buffer = session.createBuffer(SshConstants.Message.SSH_MSG_CHANNEL_SUCCESS);
> + buffer = session.createBuffer(SshConstants.Message.SSH_MSG_CHANNEL_SUCCESS, 0);
> buffer.putInt(recipient);
> session.writePacket(buffer);
> }
> @@ -407,7 +407,7 @@
> }
> prepareCommand();
> if (wantReply) {
> - buffer = session.createBuffer(SshConstants.Message.SSH_MSG_CHANNEL_SUCCESS);
> + buffer = session.createBuffer(SshConstants.Message.SSH_MSG_CHANNEL_SUCCESS, 0);
> buffer.putInt(recipient);
> session.writePacket(buffer);
> }
> @@ -462,7 +462,7 @@
> addEnvVariable(SshAgent.SSH_AUTHSOCKET_ENV_NAME, Integer.toString(authSocket));
>
> if (wantReply) {
> - buffer = session.createBuffer(SshConstants.Message.SSH_MSG_CHANNEL_SUCCESS);
> + buffer = session.createBuffer(SshConstants.Message.SSH_MSG_CHANNEL_SUCCESS, 0);
> buffer.putInt(recipient);
> session.writePacket(buffer);
> }
> @@ -473,7 +473,7 @@
> boolean wantReply = buffer.getBoolean();
> // TODO: start x11 forwarding
> if (wantReply) {
> - buffer = session.createBuffer(SshConstants.Message.SSH_MSG_CHANNEL_SUCCESS);
> + buffer = session.createBuffer(SshConstants.Message.SSH_MSG_CHANNEL_SUCCESS, 0);
> buffer.putInt(recipient);
> session.writePacket(buffer);
> }
>
> Modified: mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/server/session/ServerSession.java
> URL: http://svn.apache.org/viewvc/mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/server/session/ServerSession.java?rev=890631&r1=890630&r2=890631&view=diff
> ==============================================================================
> --- mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/server/session/ServerSession.java (original)
> +++ mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/server/session/ServerSession.java Tue Dec 15 03:56:32 2009
> @@ -304,7 +304,7 @@
> private void userAuth(Buffer buffer) throws Exception {
> if (state == State.WaitingUserAuth) {
> log.info("Accepting user authentication request");
> - buffer = createBuffer(SshConstants.Message.SSH_MSG_SERVICE_ACCEPT);
> + buffer = createBuffer(SshConstants.Message.SSH_MSG_SERVICE_ACCEPT, 0);
> buffer.putString("ssh-userauth");
> writePacket(buffer);
> userAuthFactories = new ArrayList<NamedFactory<UserAuth>>(getServerFactoryManager().getUserAuthFactories());
> @@ -341,14 +341,14 @@
> log.info("Unsupported authentication method '{}'", method);
> }
> if (authed != null && authed) {
> - buffer = createBuffer(SshConstants.Message.SSH_MSG_USERAUTH_SUCCESS);
> + buffer = createBuffer(SshConstants.Message.SSH_MSG_USERAUTH_SUCCESS, 0);
> writePacket(buffer);
> state = State.Running;
> this.authed = true;
> this.username = username;
> unscheduleAuthTimer();
> } else {
> - buffer = createBuffer(SshConstants.Message.SSH_MSG_USERAUTH_FAILURE);
> + buffer = createBuffer(SshConstants.Message.SSH_MSG_USERAUTH_FAILURE, 0);
> NamedFactory.Utils.remove(userAuthFactories, "none"); // 'none' MUST NOT be listed
> buffer.putString(NamedFactory.Utils.getNames(userAuthFactories));
> buffer.putByte((byte) 0);
> @@ -370,7 +370,7 @@
> log.info("Received SSH_MSG_CHANNEL_OPEN {}", type);
>
> if (closing) {
> - Buffer buf = createBuffer(SshConstants.Message.SSH_MSG_CHANNEL_OPEN_FAILURE);
> + Buffer buf = createBuffer(SshConstants.Message.SSH_MSG_CHANNEL_OPEN_FAILURE, 0);
> buf.putInt(id);
> buf.putInt(SshConstants.SSH_OPEN_CONNECT_FAILED);
> buf.putString("SSH server is shutting down: " + type);
> @@ -379,7 +379,7 @@
> return;
> }
> if (!allowMoreSessions) {
> - Buffer buf = createBuffer(SshConstants.Message.SSH_MSG_CHANNEL_OPEN_FAILURE);
> + Buffer buf = createBuffer(SshConstants.Message.SSH_MSG_CHANNEL_OPEN_FAILURE, 0);
> buf.putInt(id);
> buf.putInt(SshConstants.SSH_OPEN_CONNECT_FAILED);
> buf.putString("additional sessions disabled");
> @@ -390,7 +390,7 @@
>
> final Channel channel = NamedFactory.Utils.create(getServerFactoryManager().getChannelFactories(), type);
> if (channel == null) {
> - Buffer buf = createBuffer(SshConstants.Message.SSH_MSG_CHANNEL_OPEN_FAILURE);
> + Buffer buf = createBuffer(SshConstants.Message.SSH_MSG_CHANNEL_OPEN_FAILURE, 0);
> buf.putInt(id);
> buf.putInt(SshConstants.SSH_OPEN_UNKNOWN_CHANNEL_TYPE);
> buf.putString("Unsupported channel type: " + type);
> @@ -406,14 +406,14 @@
> public void operationComplete(OpenFuture future) {
> try {
> if (future.isOpened()) {
> - Buffer buf = createBuffer(SshConstants.Message.SSH_MSG_CHANNEL_OPEN_CONFIRMATION);
> + Buffer buf = createBuffer(SshConstants.Message.SSH_MSG_CHANNEL_OPEN_CONFIRMATION, 0);
> buf.putInt(id);
> buf.putInt(channelId);
> buf.putInt(channel.getLocalWindow().getSize());
> buf.putInt(channel.getLocalWindow().getPacketSize());
> writePacket(buf);
> } else if (future.getException() != null) {
> - Buffer buf = createBuffer(SshConstants.Message.SSH_MSG_CHANNEL_OPEN_FAILURE);
> + Buffer buf = createBuffer(SshConstants.Message.SSH_MSG_CHANNEL_OPEN_FAILURE, 0);
> buf.putInt(id);
> if (future.getException() instanceof OpenChannelException) {
> buf.putInt(((OpenChannelException)future.getException()).getReasonCode());
> @@ -450,7 +450,7 @@
> log.error("Unknown global request: {}", req);
> }
> if (wantReply){
> - buffer = createBuffer(SshConstants.Message.SSH_MSG_REQUEST_FAILURE);
> + buffer = createBuffer(SshConstants.Message.SSH_MSG_REQUEST_FAILURE, 0);
> writePacket(buffer);
> }
> }
>
> Modified: mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/server/session/TcpipForwardSupport.java
> URL: http://svn.apache.org/viewvc/mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/server/session/TcpipForwardSupport.java?rev=890631&r1=890630&r2=890631&view=diff
> ==============================================================================
> --- mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/server/session/TcpipForwardSupport.java (original)
> +++ mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/server/session/TcpipForwardSupport.java Tue Dec 15 03:56:32 2009
> @@ -83,7 +83,7 @@
> final TcpIpForwardFilter filter = session.getServerFactoryManager().getTcpIpForwardFilter();
> if (addr == null || filter == null || !filter.canListen(addr, session)) {
> if (wantReply) {
> - buffer = session.createBuffer(SshConstants.Message.SSH_MSG_REQUEST_FAILURE);
> + buffer = session.createBuffer(SshConstants.Message.SSH_MSG_REQUEST_FAILURE, 0);
> session.writePacket(buffer);
> }
> return;
> @@ -98,7 +98,7 @@
> close();
> }
> if (wantReply) {
> - buffer = session.createBuffer(SshConstants.Message.SSH_MSG_REQUEST_FAILURE);
> + buffer = session.createBuffer(SshConstants.Message.SSH_MSG_REQUEST_FAILURE, 0);
> session.writePacket(buffer);
> }
> return;
> @@ -112,7 +112,7 @@
> }
> }
> if (wantReply){
> - buffer = session.createBuffer(SshConstants.Message.SSH_MSG_REQUEST_SUCCESS);
> + buffer = session.createBuffer(SshConstants.Message.SSH_MSG_REQUEST_SUCCESS, 0);
> buffer.putInt(port);
> session.writePacket(buffer);
> }
> @@ -125,7 +125,7 @@
> acceptor.unbind(new InetSocketAddress(address, port));
> }
> if (wantReply) {
> - buffer = session.createBuffer(SshConstants.Message.SSH_MSG_REQUEST_SUCCESS);
> + buffer = session.createBuffer(SshConstants.Message.SSH_MSG_REQUEST_SUCCESS, 0);
> session.writePacket(buffer);
> }
> }
> @@ -184,7 +184,7 @@
> }
> openFuture = new DefaultOpenFuture(lock);
> log.info("Send SSH_MSG_CHANNEL_OPEN on channel {}", id);
> - Buffer buffer = session.createBuffer(SshConstants.Message.SSH_MSG_CHANNEL_OPEN);
> + Buffer buffer = session.createBuffer(SshConstants.Message.SSH_MSG_CHANNEL_OPEN, 0);
> buffer.putString(type);
> buffer.putInt(id);
> buffer.putInt(localWindow.getSize());
>
>
>
--
Cheers,
Guillaume Nodet
------------------------
Blog: http://gnodet.blogspot.com/
------------------------
Open Source SOA
http://fusesource.com
Re: svn commit: r890631 - in /mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd:
client/auth/ client/channel/ client/kex/ client/session/ common/
common/channel/ common/session/ server/auth/ server/channel/ server/session/
Posted by Guillaume Nodet <gn...@gmail.com>.
Yeah, it's true that having multiple overrides of the same method in
an interface does not really help the use of the interface ...
On Tue, Dec 15, 2009 at 15:56, Shawn Pearce <so...@google.com> wrote:
> Guillaume Nodet <gn...@gmail.com> wrote:
>> I wonder if we should add back the createBuffer method with a single
>> argument that would call createBuffer(cmd, 0) for readability...
>
> I thought about doing that when I wrote the change... but since
> Session is an interface I wasn't too thrilled about exposing two
> different createBuffer methods in it.
>
> Its easy enough for me to change though, I can back out most of
> the patch and add the createBuffer(int) signature if that's what
> you'd prefer.
>
>> On Tue, Dec 15, 2009 at 04:56, <sp...@apache.org> wrote:
>> > Author: spearce
>> > Date: Tue Dec 15 03:56:32 2009
>> > New Revision: 890631
> ...
>> > Unfortunately most uses of createBuffer don't care about the size
>> > of the buffer, as they are one-shot requests which are often within
>> > the default size of 512 bytes. Pass in 0 for these and allow them
>> > to use the default 512 byte size.
>
--
Cheers,
Guillaume Nodet
------------------------
Blog: http://gnodet.blogspot.com/
------------------------
Open Source SOA
http://fusesource.com
Re: svn commit: r890631 - in
/mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd:
client/auth/ client/channel/ client/kex/ client/session/ common/
common/channel/ common/session/ server/auth/ server/channel/
server/session/
Posted by Shawn Pearce <so...@google.com>.
Guillaume Nodet <gn...@gmail.com> wrote:
> I wonder if we should add back the createBuffer method with a single
> argument that would call createBuffer(cmd, 0) for readability...
I thought about doing that when I wrote the change... but since
Session is an interface I wasn't too thrilled about exposing two
different createBuffer methods in it.
Its easy enough for me to change though, I can back out most of
the patch and add the createBuffer(int) signature if that's what
you'd prefer.
> On Tue, Dec 15, 2009 at 04:56, <sp...@apache.org> wrote:
> > Author: spearce
> > Date: Tue Dec 15 03:56:32 2009
> > New Revision: 890631
...
> > Unfortunately most uses of createBuffer don't care about the size
> > of the buffer, as they are one-shot requests which are often within
> > the default size of 512 bytes. Pass in 0 for these and allow them
> > to use the default 512 byte size.