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: [email protected]
For additional commands, e-mail: [email protected]