Author: violetagg Date: Fri Sep 9 20:18:10 2016 New Revision: 1760109 URL: http://svn.apache.org/viewvc?rev=1760109&view=rev Log: Introducing ApplicationBufferHandler - a callback interface to be able to expand the ByteBuffer provided when SocketWrapperBase.read(boolean, ByteBuffer). This is a preparation for using the new method SocketWrapperBase.read(boolean, ByteBuffer).
Added: tomcat/trunk/java/org/apache/tomcat/util/net/ApplicationBufferHandler.java (with props) Modified: tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java tomcat/trunk/java/org/apache/tomcat/util/net/Nio2Channel.java tomcat/trunk/java/org/apache/tomcat/util/net/Nio2Endpoint.java tomcat/trunk/java/org/apache/tomcat/util/net/NioChannel.java tomcat/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java tomcat/trunk/java/org/apache/tomcat/util/net/SecureNio2Channel.java tomcat/trunk/java/org/apache/tomcat/util/net/SecureNioChannel.java tomcat/trunk/java/org/apache/tomcat/util/net/SocketWrapperBase.java Added: tomcat/trunk/java/org/apache/tomcat/util/net/ApplicationBufferHandler.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/ApplicationBufferHandler.java?rev=1760109&view=auto ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/util/net/ApplicationBufferHandler.java (added) +++ tomcat/trunk/java/org/apache/tomcat/util/net/ApplicationBufferHandler.java Fri Sep 9 20:18:10 2016 @@ -0,0 +1,31 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.tomcat.util.net; + +import java.nio.ByteBuffer; + +/** + * Callback interface to be able to expand buffers when buffer overflow + * exceptions happen + */ +public interface ApplicationBufferHandler { + + public ByteBuffer getByteBuffer(); + + public void expand(int size); + +} Propchange: tomcat/trunk/java/org/apache/tomcat/util/net/ApplicationBufferHandler.java ------------------------------------------------------------------------------ svn:eol-style = native Modified: tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java?rev=1760109&r1=1760108&r2=1760109&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java (original) +++ tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java Fri Sep 9 20:18:10 2016 @@ -2783,5 +2783,11 @@ public class AprEndpoint extends Abstrac SSLSocket.setVerify(socket, SSL.SSL_CVERIFY_REQUIRE, -1); SSLSocket.renegotiate(socket); } + + + @Override + public void setAppReadBufHandler(ApplicationBufferHandler handler) { + // no-op + } } } Modified: tomcat/trunk/java/org/apache/tomcat/util/net/Nio2Channel.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/Nio2Channel.java?rev=1760109&r1=1760108&r2=1760109&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/util/net/Nio2Channel.java (original) +++ tomcat/trunk/java/org/apache/tomcat/util/net/Nio2Channel.java Fri Sep 9 20:18:10 2016 @@ -213,4 +213,12 @@ public class Nio2Channel implements Asyn return DONE; } + + private ApplicationBufferHandler appReadBufHandler; + public void setAppReadBufHandler(ApplicationBufferHandler handler) { + this.appReadBufHandler = handler; + } + protected ApplicationBufferHandler getAppReadBufHandler() { + return appReadBufHandler; + } } Modified: tomcat/trunk/java/org/apache/tomcat/util/net/Nio2Endpoint.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/Nio2Endpoint.java?rev=1760109&r1=1760108&r2=1760109&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/util/net/Nio2Endpoint.java (original) +++ tomcat/trunk/java/org/apache/tomcat/util/net/Nio2Endpoint.java Fri Sep 9 20:18:10 2016 @@ -1628,6 +1628,12 @@ public class Nio2Endpoint extends Abstra } } } + + + @Override + public void setAppReadBufHandler(ApplicationBufferHandler handler) { + getSocket().setAppReadBufHandler(handler); + } } Modified: tomcat/trunk/java/org/apache/tomcat/util/net/NioChannel.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/NioChannel.java?rev=1760109&r1=1760108&r2=1760109&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/util/net/NioChannel.java (original) +++ tomcat/trunk/java/org/apache/tomcat/util/net/NioChannel.java Fri Sep 9 20:18:10 2016 @@ -232,4 +232,13 @@ public class NioChannel implements ByteC throw new IOException(sm.getString("channel.nio.interrupted")); } } + + + private ApplicationBufferHandler appReadBufHandler; + public void setAppReadBufHandler(ApplicationBufferHandler handler) { + this.appReadBufHandler = handler; + } + protected ApplicationBufferHandler getAppReadBufHandler() { + return appReadBufHandler; + } } Modified: tomcat/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java?rev=1760109&r1=1760108&r2=1760109&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java (original) +++ tomcat/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java Fri Sep 9 20:18:10 2016 @@ -1391,6 +1391,12 @@ public class NioEndpoint extends Abstrac } } } + + + @Override + public void setAppReadBufHandler(ApplicationBufferHandler handler) { + getSocket().setAppReadBufHandler(handler); + } } Modified: tomcat/trunk/java/org/apache/tomcat/util/net/SecureNio2Channel.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/SecureNio2Channel.java?rev=1760109&r1=1760108&r2=1760109&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/util/net/SecureNio2Channel.java (original) +++ tomcat/trunk/java/org/apache/tomcat/util/net/SecureNio2Channel.java Fri Sep 9 20:18:10 2016 @@ -666,6 +666,10 @@ public class SecureNio2Channel extends N getBufHandler() .expand(sslEngine.getSession().getApplicationBufferSize()); dst = getBufHandler().getReadBuffer(); + } else if(dst == getAppReadBufHandler()) { + getAppReadBufHandler() + .expand(sslEngine.getSession().getApplicationBufferSize()); + dst = getAppReadBufHandler().getByteBuffer(); } else { // Can't expand the buffer as there is no way to signal // to the caller that the buffer has been replaced. Modified: tomcat/trunk/java/org/apache/tomcat/util/net/SecureNioChannel.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/SecureNioChannel.java?rev=1760109&r1=1760108&r2=1760109&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/util/net/SecureNioChannel.java (original) +++ tomcat/trunk/java/org/apache/tomcat/util/net/SecureNioChannel.java Fri Sep 9 20:18:10 2016 @@ -528,7 +528,8 @@ public class SecureNioChannel extends Ni @Override public int read(ByteBuffer dst) throws IOException { // Make sure we only use the ApplicationBufferHandler's buffers - if (dst != getBufHandler().getReadBuffer()) { + if (dst != getBufHandler().getReadBuffer() && (getAppReadBufHandler() == null + || dst != getAppReadBufHandler().getByteBuffer())) { throw new IllegalArgumentException(sm.getString("channel.nio.ssl.invalidBuffer")); } //are we in the middle of closing or closed? @@ -577,6 +578,10 @@ public class SecureNioChannel extends Ni // This is the normal case for this code getBufHandler().expand(sslEngine.getSession().getApplicationBufferSize()); dst = getBufHandler().getReadBuffer(); + } else if (dst == getAppReadBufHandler().getByteBuffer()) { + getAppReadBufHandler() + .expand(sslEngine.getSession().getApplicationBufferSize()); + dst = getAppReadBufHandler().getByteBuffer(); } else { // Can't expand the buffer as there is no way to signal // to the caller that the buffer has been replaced. @@ -652,16 +657,6 @@ public class SecureNioChannel extends Ni return remaining2 < remaining; } - - /** - * Callback interface to be able to expand buffers - * when buffer overflow exceptions happen - */ - public static interface ApplicationBufferHandler { - public ByteBuffer getReadBuffer(); - public ByteBuffer getWriteBuffer(); - } - @Override public boolean isHandshakeComplete() { return handshakeComplete; Modified: tomcat/trunk/java/org/apache/tomcat/util/net/SocketWrapperBase.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/SocketWrapperBase.java?rev=1760109&r1=1760108&r2=1760109&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/util/net/SocketWrapperBase.java (original) +++ tomcat/trunk/java/org/apache/tomcat/util/net/SocketWrapperBase.java Fri Sep 9 20:18:10 2016 @@ -280,6 +280,7 @@ public abstract class SocketWrapperBase< public abstract int read(boolean block, byte[] b, int off, int len) throws IOException; public abstract int read(boolean block, ByteBuffer to) throws IOException; public abstract boolean isReadyForRead() throws IOException; + public abstract void setAppReadBufHandler(ApplicationBufferHandler handler); protected int populateReadBuffer(byte[] b, int off, int len) { socketBufferHandler.configureReadBufferForRead(); --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org