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

Reply via email to