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 2012/03/15 23:40:38 UTC
svn commit: r1301253 - in /tomcat/tc7.0.x/trunk: ./
java/org/apache/catalina/connector/ java/org/apache/catalina/util/
java/org/apache/catalina/websocket/ java/org/apache/coyote/
java/org/apache/coyote/ajp/ java/org/apache/coyote/http11/ java/org/apach...
Author: markt
Date: Thu Mar 15 22:40:37 2012
New Revision: 1301253
URL: http://svn.apache.org/viewvc?rev=1301253&view=rev
Log:
Start to merge WebSocket implementation from trunk. I'm combining commits where I can but I can't back-port in a single commit as they interleave with other commits.
Added:
tomcat/tc7.0.x/trunk/java/org/apache/catalina/util/Conversions.java
- copied unchanged from r1239047, tomcat/trunk/java/org/apache/catalina/util/Conversions.java
tomcat/tc7.0.x/trunk/java/org/apache/catalina/websocket/
- copied from r1239047, tomcat/trunk/java/org/apache/catalina/websocket/
tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/UpgradeInbound.java
- copied unchanged from r1239047, tomcat/trunk/java/org/apache/coyote/http11/UpgradeInbound.java
tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/UpgradeInputStream.java
- copied unchanged from r1239047, tomcat/trunk/java/org/apache/coyote/http11/UpgradeInputStream.java
tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/UpgradeOutbound.java
- copied unchanged from r1239047, tomcat/trunk/java/org/apache/coyote/http11/UpgradeOutbound.java
tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/UpgradeOutputStream.java
- copied unchanged from r1239047, tomcat/trunk/java/org/apache/coyote/http11/UpgradeOutputStream.java
tomcat/tc7.0.x/trunk/test/org/apache/catalina/websocket/
- copied from r1239047, tomcat/trunk/test/org/apache/catalina/websocket/
tomcat/tc7.0.x/trunk/webapps/examples/WEB-INF/classes/websocket/
- copied from r1239047, tomcat/trunk/webapps/examples/WEB-INF/classes/websocket/
tomcat/tc7.0.x/trunk/webapps/examples/websocket/
- copied from r1239047, tomcat/trunk/webapps/examples/websocket/
Modified:
tomcat/tc7.0.x/trunk/ (props changed)
tomcat/tc7.0.x/trunk/java/org/apache/catalina/connector/Request.java
tomcat/tc7.0.x/trunk/java/org/apache/catalina/connector/RequestFacade.java
tomcat/tc7.0.x/trunk/java/org/apache/coyote/AbstractProcessor.java
tomcat/tc7.0.x/trunk/java/org/apache/coyote/AbstractProtocol.java
tomcat/tc7.0.x/trunk/java/org/apache/coyote/ActionCode.java
tomcat/tc7.0.x/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java
tomcat/tc7.0.x/trunk/java/org/apache/coyote/ajp/LocalStrings.properties
tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/AbstractHttp11Processor.java
tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/AbstractInputBuffer.java
tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/InternalAprInputBuffer.java
tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/InternalNioInputBuffer.java
tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/net/AbstractEndpoint.java
tomcat/tc7.0.x/trunk/webapps/examples/WEB-INF/web.xml
tomcat/tc7.0.x/trunk/webapps/examples/index.html
Propchange: tomcat/tc7.0.x/trunk/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Thu Mar 15 22:40:37 2012
@@ -1 +1 @@
-/tomcat/trunk:1156115-1157160,1157162-1157859,1157862-1157942,1157945-1160347,1160349-1163716,1163718-1166689,1166691-1174340,1174342-1175596,1175598-1175611,1175613-1175932,1175934-1177783,1177785-1177980,1178006-1180720,1180722-1183094,1183096-1187753,1187755,1187775,1187801,1187806,1187809,1187826-1188312,1188314-1188401,1188646-1188840,1188842-1190176,1190178-1195223,1195225-1195953,1195955,1195957-1201238,1201240-1203345,1203347-1206623,1206625-1208046,1208073,1208096,1208114,1208145,1208772,1209194-1212125,1212127-1220291,1220293,1220295-1221321,1221323-1222328,1222332-1222401,1222405-1222795,1222850-1222950,1222969-1225326,1225328-1225463,1225465,1225627,1225629-1226534,1226536-1228908,1228911-1228923,1228927-1229532,1229534-1230766,1230768-1231625,1231627-1233414,1233419-1235207,1235209-1237425,1237427,1237429-1237977,1237981,1237985,1238070,1238073,1239024,1239048,1239050,1239060,1239135,1239483,1239485,1240101,1240106,1240109,1240112,1240114,1240116,1240118,1240121
,1240329,1240697,1240795,1240821,1240842,1240857,1241087,1241160,1241908-1241909,1241982,1242099,1242110,1242371,1242434,1242495,1242947,1243034,1243038,1244302,1244511,1244567,1244718-1244719,1244935-1244938,1245274,1245449,1245849,1290875,1292334,1292338,1292345-1292347,1293155,1293831-1293832,1295998,1296284,1297014-1297015,1297017,1297158,1297177,1297202,1297209,1297213,1297717,1297722,1297729,1297768,1297778,1297818,1297828,1297979,1297987,1298121,1298140,1298590,1298592,1298628-1298629,1298794,1298983-1298984,1299020,1299034,1299819,1300154-1300155,1300569,1300948
+/tomcat/trunk:1156115-1157160,1157162-1157859,1157862-1157942,1157945-1160347,1160349-1163716,1163718-1166689,1166691-1174340,1174342-1175596,1175598-1175611,1175613-1175932,1175934-1177783,1177785-1177980,1178006-1180720,1180722-1183094,1183096-1187753,1187755,1187775,1187801,1187806,1187809,1187826-1188312,1188314-1188401,1188646-1188840,1188842-1190176,1190178-1195223,1195225-1195953,1195955,1195957-1201238,1201240-1203345,1203347-1206623,1206625-1208046,1208073,1208096,1208114,1208145,1208772,1209194-1212125,1212127-1220291,1220293,1220295-1221321,1221323-1222328,1222332-1222401,1222405-1222795,1222850-1222950,1222969-1225326,1225328-1225463,1225465,1225627,1225629-1226534,1226536-1228908,1228911-1228923,1228927-1229532,1229534-1230766,1230768-1231625,1231627-1233414,1233419-1235207,1235209-1237425,1237427,1237429-1237977,1237981,1237985,1238070,1238073,1239024-1239048,1239050-1239062,1239135,1239483,1239485,1240101,1240106,1240109,1240112,1240114,1240116,1240118,1240121
,1240329,1240697,1240795,1240821,1240842,1240857,1241087,1241160,1241908-1241909,1241982,1242099,1242110,1242371,1242434,1242495,1242947,1243034,1243038,1244302,1244511,1244567,1244718-1244719,1244935-1244938,1245274,1245449,1245849,1290875,1292334,1292338,1292345-1292347,1293155,1293831-1293832,1295998,1296284,1297014-1297015,1297017,1297158,1297177,1297202,1297209,1297213,1297717,1297722,1297729,1297768,1297778,1297818,1297828,1297979,1297987,1298121,1298140,1298590,1298592,1298628-1298629,1298794,1298983-1298984,1299020,1299034,1299819,1300154-1300155,1300569,1300948
Modified: tomcat/tc7.0.x/trunk/java/org/apache/catalina/connector/Request.java
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/catalina/connector/Request.java?rev=1301253&r1=1301252&r2=1301253&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/catalina/connector/Request.java (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/catalina/connector/Request.java Thu Mar 15 22:40:37 2012
@@ -74,6 +74,7 @@ import org.apache.catalina.realm.Generic
import org.apache.catalina.util.ParameterMap;
import org.apache.catalina.util.StringParser;
import org.apache.coyote.ActionCode;
+import org.apache.coyote.http11.UpgradeInbound;
import org.apache.juli.logging.Log;
import org.apache.juli.logging.LogFactory;
import org.apache.tomcat.util.ExceptionUtils;
@@ -2802,6 +2803,21 @@ public class Request
return null;
}
+
+ // --------------------------------------------------------- Upgrade Methods
+
+ public void doUpgrade(UpgradeInbound inbound)
+ throws IOException {
+
+ coyoteRequest.action(ActionCode.UPGRADE, inbound);
+
+ // Output required by RFC2616. Protocol specific headers should have
+ // already been set.
+ response.setStatus(HttpServletResponse.SC_SWITCHING_PROTOCOLS);
+ response.flushBuffer();
+ }
+
+
// ------------------------------------------------------ Protected Methods
Modified: tomcat/tc7.0.x/trunk/java/org/apache/catalina/connector/RequestFacade.java
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/catalina/connector/RequestFacade.java?rev=1301253&r1=1301252&r2=1301253&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/catalina/connector/RequestFacade.java (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/catalina/connector/RequestFacade.java Thu Mar 15 22:40:37 2012
@@ -41,6 +41,7 @@ import javax.servlet.http.Part;
import org.apache.catalina.Globals;
import org.apache.catalina.security.SecurityUtil;
+import org.apache.coyote.http11.UpgradeInbound;
import org.apache.tomcat.util.res.StringManager;
/**
@@ -1085,4 +1086,20 @@ public class RequestFacade implements Ht
return request.getConnector().getAllowTrace();
}
+ /**
+ * Sets the response status to {@link
+ * HttpServletResponse.SC_SWITCHING_PROTOCOLS} and flushes the response.
+ * Protocol specific headers must have already been set before this method
+ * is called.
+ *
+ * @param inbound The handler for all further incoming data on the current
+ * connection.
+ *
+ * @throws IOException If the upgrade fails (e.g. if the response has
+ * already been committed.
+ */
+ public void doUpgrade(UpgradeInbound inbound)
+ throws IOException {
+ request.doUpgrade(inbound);
+ }
}
Modified: tomcat/tc7.0.x/trunk/java/org/apache/coyote/AbstractProcessor.java
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/coyote/AbstractProcessor.java?rev=1301253&r1=1301252&r2=1301253&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/coyote/AbstractProcessor.java (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/coyote/AbstractProcessor.java Thu Mar 15 22:40:37 2012
@@ -106,6 +106,8 @@ public abstract class AbstractProcessor<
protected abstract boolean isComet();
+ protected abstract boolean isUpgrade();
+
/**
* Process HTTP requests. All requests are treated as HTTP requests to start
* with although they may change type during processing.
@@ -113,7 +115,6 @@ public abstract class AbstractProcessor<
public abstract SocketState process(SocketWrapper<S> socket)
throws IOException;
-
/**
* Process in-progress Comet requests. These will start as HTTP requests.
*/
@@ -124,4 +125,10 @@ public abstract class AbstractProcessor<
* requests.
*/
public abstract SocketState asyncDispatch(SocketStatus status);
+
+ /**
+ * Processes data received on a connection that has been through an HTTP
+ * upgrade.
+ */
+ public abstract SocketState upgradeDispatch() throws IOException;
}
Modified: tomcat/tc7.0.x/trunk/java/org/apache/coyote/AbstractProtocol.java
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/coyote/AbstractProtocol.java?rev=1301253&r1=1301252&r2=1301253&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/coyote/AbstractProtocol.java (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/coyote/AbstractProtocol.java Thu Mar 15 22:40:37 2012
@@ -551,6 +551,8 @@ public abstract class AbstractProtocol i
state = processor.asyncDispatch(status);
} else if (processor.isComet()) {
state = processor.event(status);
+ } else if (processor.isUpgrade()) {
+ state = processor.upgradeDispatch();
} else {
state = processor.process(socket);
}
@@ -574,6 +576,9 @@ public abstract class AbstractProtocol i
// closed. If it works, the socket will be re-added to the
// poller
release(socket, processor, false, false);
+ } else if (state == SocketState.UPGRADE) {
+ // Need to keep the connection associated with the processor
+ longPoll(socket, processor);
} else {
// Connection closed. OK to recycle the processor.
release(socket, processor, true, false);
Modified: tomcat/tc7.0.x/trunk/java/org/apache/coyote/ActionCode.java
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/coyote/ActionCode.java?rev=1301253&r1=1301252&r2=1301253&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/coyote/ActionCode.java (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/coyote/ActionCode.java Thu Mar 15 22:40:37 2012
@@ -189,5 +189,10 @@ public enum ActionCode {
/**
* Callback to determine if async is timing out
*/
- ASYNC_IS_TIMINGOUT
+ ASYNC_IS_TIMINGOUT,
+
+ /**
+ * Callback to trigger the HTTP upgrade process.
+ */
+ UPGRADE
}
Modified: tomcat/tc7.0.x/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java?rev=1301253&r1=1301252&r2=1301253&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java Thu Mar 15 22:40:37 2012
@@ -456,6 +456,9 @@ public abstract class AbstractAjpProcess
((AtomicBoolean) param).set(asyncStateMachine.isAsync());
} else if (actionCode == ActionCode.ASYNC_IS_TIMINGOUT) {
((AtomicBoolean) param).set(asyncStateMachine.isAsyncTimingOut());
+ } else if (actionCode == ActionCode.UPGRADE) {
+ // HTTP connections only. Unsupported for AJP.
+ // NOOP
} else {
actionInternal(actionCode, param);
}
@@ -510,6 +513,15 @@ public abstract class AbstractAjpProcess
sm.getString("ajpprocessor.comet.notsupported"));
}
+
+ @Override
+ public SocketState upgradeDispatch() throws IOException {
+ // Should never reach this code but in case we do...
+ throw new IOException(
+ sm.getString("ajpprocessor.httpupgrade.notsupported"));
+ }
+
+
/**
* Recycle the processor, ready for the next request which may be on the
* same connection or a different connection.
@@ -554,6 +566,13 @@ public abstract class AbstractAjpProcess
}
+ @Override
+ protected final boolean isUpgrade() {
+ // AJP does not support HTTP upgrade
+ return false;
+ }
+
+
/**
* Get more request body data from the web server and store it in the
* internal buffer.
Modified: tomcat/tc7.0.x/trunk/java/org/apache/coyote/ajp/LocalStrings.properties
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/coyote/ajp/LocalStrings.properties?rev=1301253&r1=1301252&r2=1301253&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/coyote/ajp/LocalStrings.properties (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/coyote/ajp/LocalStrings.properties Thu Mar 15 22:40:37 2012
@@ -40,6 +40,7 @@ ajpprocessor.request.process=Error proce
ajpprocessor.certs.fail=Certificate conversion failed
ajpprocessor.socket.info=Exception getting socket information
ajpprocessor.comet.notsupported=The Comet protocol is not supported by this connector
+ajpprocessor.httpupgrade.notsupported=HTTP upgrades are not supported by this connector
ajpmessage.null=Cannot append null value
ajpmessage.overflow=Overflow error for buffer adding {0} bytes at position {1}
Modified: tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/AbstractHttp11Processor.java
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/AbstractHttp11Processor.java?rev=1301253&r1=1301252&r2=1301253&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/AbstractHttp11Processor.java (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/AbstractHttp11Processor.java Thu Mar 15 22:40:37 2012
@@ -253,6 +253,13 @@ public abstract class AbstractHttp11Proc
protected String server = null;
+ /**
+ * Listener to which data available events are passed once the associated
+ * connection has completed the HTTP upgrade process.
+ */
+ protected UpgradeInbound upgradeInbound = null;
+
+
public AbstractHttp11Processor(AbstractEndpoint endpoint) {
super(endpoint);
}
@@ -830,6 +837,15 @@ public abstract class AbstractHttp11Proc
((AtomicBoolean) param).set(asyncStateMachine.isAsync());
} else if (actionCode == ActionCode.ASYNC_IS_TIMINGOUT) {
((AtomicBoolean) param).set(asyncStateMachine.isAsyncTimingOut());
+ } else if (actionCode == ActionCode.UPGRADE) {
+ upgradeInbound = (UpgradeInbound) param;
+ upgradeInbound.setInputStream(
+ new UpgradeInputStream(getInputBuffer()));
+ upgradeInbound.setUpgradeOutbound(
+ new UpgradeOutbound(
+ new UpgradeOutputStream(getOutputBuffer())));
+ // Stop further HTTP output
+ getOutputBuffer().finished = true;
} else {
actionInternal(actionCode, param);
}
@@ -905,7 +921,7 @@ public abstract class AbstractHttp11Proc
}
while (!error && keepAlive && !comet && !isAsync() &&
- !endpoint.isPaused()) {
+ upgradeInbound == null && !endpoint.isPaused()) {
// Parsing the request header
try {
@@ -1053,6 +1069,9 @@ public abstract class AbstractHttp11Proc
return SocketState.CLOSED;
} else if (isAsync() || comet) {
return SocketState.LONG;
+ } else if (isUpgrade()) {
+ // May be data on the connection to process
+ return upgradeDispatch();
} else {
if (sendfileInProgress) {
return SocketState.SENDFILE;
@@ -1552,6 +1571,34 @@ public abstract class AbstractHttp11Proc
}
+ @Override
+ public boolean isUpgrade() {
+ return upgradeInbound != null;
+ }
+
+
+
+ @Override
+ public SocketState upgradeDispatch() throws IOException {
+ SocketState result = upgradeInbound.onData();
+ AbstractInputBuffer<S> ib = getInputBuffer();
+ while (result == SocketState.UPGRADE) {
+ // Check to see if there is more data to process
+ if (ib.available() == 0) {
+ // Read any data that might be available
+ // Note: This will block for BIO regardless
+ ib.fill(false);
+ }
+ if (ib.available() == 0) {
+ // Still no data available, exit this loop
+ break;
+ }
+ result = upgradeInbound.onData();
+ }
+ return result;
+ }
+
+
/**
* Provides a mechanism for those connector implementations (currently only
* NIO) that need to reset timeouts from Async timeouts to standard HTTP
@@ -1609,6 +1656,7 @@ public abstract class AbstractHttp11Proc
getInputBuffer().recycle();
getOutputBuffer().recycle();
asyncStateMachine.recycle();
+ upgradeInbound = null;
remoteAddr = null;
remoteHost = null;
localAddr = null;
Modified: tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/AbstractInputBuffer.java
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/AbstractInputBuffer.java?rev=1301253&r1=1301252&r2=1301253&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/AbstractInputBuffer.java (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/AbstractInputBuffer.java Thu Mar 15 22:40:37 2012
@@ -310,8 +310,23 @@ public abstract class AbstractInputBuffe
}
- // ---------------------------------------------------- InputBuffer Methods
+ /**
+ * Available bytes in the buffers (note that due to encoding, this may not
+ * correspond).
+ */
+ public int available() {
+ int result = (lastValid - pos);
+ if ((result == 0) && (lastActiveFilter >= 0)) {
+ for (int i = 0; (result == 0) && (i <= lastActiveFilter); i++) {
+ result = activeFilters[i].available();
+ }
+ }
+ return result;
+ }
+
+
+ // ---------------------------------------------------- InputBuffer Methods
/**
* Read some bytes.
Modified: tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/InternalAprInputBuffer.java
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/InternalAprInputBuffer.java?rev=1301253&r1=1301252&r2=1301253&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/InternalAprInputBuffer.java (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/InternalAprInputBuffer.java Thu Mar 15 22:40:37 2012
@@ -518,20 +518,6 @@ public class InternalAprInputBuffer exte
}
- /**
- * Available bytes (note that due to encoding, this may not correspond )
- */
- public int available() {
- int result = (lastValid - pos);
- if ((result == 0) && (lastActiveFilter >= 0)) {
- for (int i = 0; (result == 0) && (i <= lastActiveFilter); i++) {
- result = activeFilters[i].available();
- }
- }
- return result;
- }
-
-
// ---------------------------------------------------- InputBuffer Methods
Modified: tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/InternalNioInputBuffer.java
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/InternalNioInputBuffer.java?rev=1301253&r1=1301252&r2=1301253&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/InternalNioInputBuffer.java (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/InternalNioInputBuffer.java Thu Mar 15 22:40:37 2012
@@ -763,20 +763,6 @@ public class InternalNioInputBuffer exte
}
- /**
- * Available bytes (note that due to encoding, this may not correspond )
- */
- public int available() {
- int result = (lastValid - pos);
- if ((result == 0) && (lastActiveFilter >= 0)) {
- for (int i = 0; (result == 0) && (i <= lastActiveFilter); i++) {
- result = activeFilters[i].available();
- }
- }
- return result;
- }
-
-
// ------------------------------------------------------ Protected Methods
@Override
Modified: tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/net/AbstractEndpoint.java
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/net/AbstractEndpoint.java?rev=1301253&r1=1301252&r2=1301253&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/net/AbstractEndpoint.java (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/net/AbstractEndpoint.java Thu Mar 15 22:40:37 2012
@@ -55,7 +55,7 @@ public abstract class AbstractEndpoint {
public enum SocketState {
// TODO Add a new state to the AsyncStateMachine and remove
// ASYNC_END (if possible)
- OPEN, CLOSED, LONG, ASYNC_END, SENDFILE
+ OPEN, CLOSED, LONG, ASYNC_END, SENDFILE, UPGRADE
}
Modified: tomcat/tc7.0.x/trunk/webapps/examples/WEB-INF/web.xml
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/webapps/examples/WEB-INF/web.xml?rev=1301253&r1=1301252&r2=1301253&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/webapps/examples/WEB-INF/web.xml (original)
+++ tomcat/tc7.0.x/trunk/webapps/examples/WEB-INF/web.xml Thu Mar 15 22:40:37 2012
@@ -347,4 +347,22 @@
<url-pattern>/async/stockticker</url-pattern>
</servlet-mapping>
+ <!-- WebSocket Examples -->
+ <servlet>
+ <servlet-name>wsEchoStream</servlet-name>
+ <servlet-class>websocket.EchoStream</servlet-class>
+ </servlet>
+ <servlet-mapping>
+ <servlet-name>wsEchoStream</servlet-name>
+ <url-pattern>/websocket/echoStream</url-pattern>
+ </servlet-mapping>
+ <servlet>
+ <servlet-name>wsEchoMessage</servlet-name>
+ <servlet-class>websocket.EchoMessage</servlet-class>
+ </servlet>
+ <servlet-mapping>
+ <servlet-name>wsEchoMessage</servlet-name>
+ <url-pattern>/websocket/echoMessage</url-pattern>
+ </servlet-mapping>
+
</web-app>
Modified: tomcat/tc7.0.x/trunk/webapps/examples/index.html
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/webapps/examples/index.html?rev=1301253&r1=1301252&r2=1301253&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/webapps/examples/index.html (original)
+++ tomcat/tc7.0.x/trunk/webapps/examples/index.html Thu Mar 15 22:40:37 2012
@@ -25,5 +25,6 @@
<ul>
<li><a href="servlets">Servlets examples</a></li>
<li><a href="jsp">JSP Examples</a></li>
+<li><a href="websocket">WebSocket Examples</a></li>
</ul>
</BODY></HTML>
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org