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