You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2014/11/04 15:34:29 UTC

svn commit: r1636588 - /tomcat/trunk/java/org/apache/coyote/spdy/SpdyProxyProtocol.java

Author: markt
Date: Tue Nov  4 14:34:29 2014
New Revision: 1636588

URL: http://svn.apache.org/r1636588
Log:
Untested (since SPDY/2 is obsolete and unsupported by current browsers) migration of SPDY proxy from BIO to NIO.

Modified:
    tomcat/trunk/java/org/apache/coyote/spdy/SpdyProxyProtocol.java

Modified: tomcat/trunk/java/org/apache/coyote/spdy/SpdyProxyProtocol.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/spdy/SpdyProxyProtocol.java?rev=1636588&r1=1636587&r2=1636588&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/spdy/SpdyProxyProtocol.java (original)
+++ tomcat/trunk/java/org/apache/coyote/spdy/SpdyProxyProtocol.java Tue Nov  4 14:34:29 2014
@@ -17,7 +17,9 @@
 package org.apache.coyote.spdy;
 
 import java.io.IOException;
-import java.net.Socket;
+import java.nio.channels.SocketChannel;
+
+import javax.net.ssl.SSLEngine;
 
 import org.apache.coyote.AbstractProtocol;
 import org.apache.coyote.ajp.Constants;
@@ -29,7 +31,8 @@ import org.apache.tomcat.spdy.SpdyContex
 import org.apache.tomcat.spdy.SpdyContext.SpdyHandler;
 import org.apache.tomcat.spdy.SpdyStream;
 import org.apache.tomcat.util.net.AbstractEndpoint.Handler;
-import org.apache.tomcat.util.net.JIoEndpoint;
+import org.apache.tomcat.util.net.NioChannel;
+import org.apache.tomcat.util.net.NioEndpoint;
 import org.apache.tomcat.util.net.SSLImplementation;
 import org.apache.tomcat.util.net.SocketStatus;
 import org.apache.tomcat.util.net.SocketWrapper;
@@ -40,7 +43,7 @@ import org.apache.tomcat.util.net.Socket
  * a reverse proxy ( apache, etc ).
  *
  * To configure:
- * <Connector port="8011" protocol="org.apache.coyote.spdy.SpdyProxyProtocol"/>
+ * <Connector port="8011" protocol="org.apache.coyote.spdy.SpdyProxyNioProtocol"/>
  *
  * To test, use
  *   chrome  --use-spdy=no-compress,no-ssl [--enable-websocket-over-spdy]
@@ -48,18 +51,23 @@ import org.apache.tomcat.util.net.Socket
  * TODO: Remote information (client ip, certs, etc ) will be sent in X- headers.
  * TODO: if spdy->spdy proxy, info about original spdy stream for pushes.
  *
+ * TODO: This proxy implementation was refactored to use NIO instead of BIO. It
+ *       is untested as SPDY/2 is now obsolete and is not supported by current
+ *       browsers. This code should be reviewed when work starts on the HTTP/2
+ *       implementation.
+ *
  */
-public class SpdyProxyProtocol extends AbstractProtocol<Socket> {
+public class SpdyProxyProtocol extends AbstractProtocol<NioChannel> {
     private static final Log log = LogFactory.getLog(SpdyProxyProtocol.class);
 
-    private final JIoEndpoint.Handler cHandler = new TomcatJioHandler();
+    private final NioEndpoint.Handler cHandler = new TomcatNioHandler();
     private SpdyContext spdyContext;
 
     private boolean compress = false;
 
     public SpdyProxyProtocol() {
-        endpoint = new JIoEndpoint();
-        ((JIoEndpoint) endpoint).setHandler(cHandler);
+        endpoint = new NioEndpoint();
+        ((NioEndpoint) endpoint).setHandler(cHandler);
         setSoLinger(Constants.DEFAULT_CONNECTION_LINGER);
         setSoTimeout(Constants.DEFAULT_CONNECTION_TIMEOUT);
         setTcpNoDelay(Constants.DEFAULT_TCP_NO_DELAY);
@@ -72,7 +80,7 @@ public class SpdyProxyProtocol extends A
 
     @Override
     protected String getNamePrefix() {
-        return "spdy2-jio";
+        return "spdy2-nio";
     }
 
     @Override
@@ -93,7 +101,7 @@ public class SpdyProxyProtocol extends A
         spdyContext.setHandler(new SpdyHandler() {
             @Override
             public void onStream(SpdyConnection con, SpdyStream ch) throws IOException {
-                SpdyProcessor<Socket> sp = new SpdyProcessor<>(con, endpoint);
+                SpdyProcessor<NioChannel> sp = new SpdyProcessor<>(con, endpoint);
                 sp.setAdapter(getAdapter());
                 sp.onSynStream(ch);
             }
@@ -110,7 +118,7 @@ public class SpdyProxyProtocol extends A
         this.compress = compress;
     }
 
-    public class TomcatJioHandler implements JIoEndpoint.Handler {
+    public class TomcatNioHandler implements NioEndpoint.Handler {
 
         @Override
         public Object getGlobal() {
@@ -122,7 +130,7 @@ public class SpdyProxyProtocol extends A
         }
 
         @Override
-        public SocketState process(SocketWrapper<Socket> socket,
+        public SocketState process(SocketWrapper<NioChannel> socket,
                 SocketStatus status) {
 
             spdyContext.getNetSupport().onAccept(socket.getSocket());
@@ -135,8 +143,18 @@ public class SpdyProxyProtocol extends A
         }
 
         @Override
-        public void beforeHandshake(SocketWrapper<Socket> socket) {
+        public void release(SocketWrapper<NioChannel> socket) {
+            // TODO Auto-generated method stub
         }
 
+        @Override
+        public void release(SocketChannel socket) {
+            // TODO Auto-generated method stub
+        }
+
+        @Override
+        public void onCreateSSLEngine(SSLEngine engine) {
+            // No SSL in proxy. Should be a NO-OP.
+        }
     }
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org