aboutsummaryrefslogtreecommitdiff
path: root/websocket/src/main/java/fi/iki
diff options
context:
space:
mode:
authorPaul Hawke <paul.hawke@gmail.com>2014-04-23 23:08:57 -0500
committerPaul Hawke <paul.hawke@gmail.com>2014-04-23 23:08:57 -0500
commitc6c080a6f4377fb18fc869111714e9514c36331a (patch)
tree1ac1f8ad3486e39bd2591bd5d603dcd09de8f0e9 /websocket/src/main/java/fi/iki
parent6d3737c76afdb1c991bf8d96e3dd2cc622435f09 (diff)
downloadnanohttpd-c6c080a6f4377fb18fc869111714e9514c36331a.tar.gz
websockets: final polish before release. Tested on IE, Chrome and Firefox
Diffstat (limited to 'websocket/src/main/java/fi/iki')
-rw-r--r--websocket/src/main/java/fi/iki/elonen/NanoWebSocketServer.java (renamed from websocket/src/main/java/fi/iki/elonen/NanoWSD.java)19
-rw-r--r--websocket/src/main/java/fi/iki/elonen/WebSocket.java4
2 files changed, 15 insertions, 8 deletions
diff --git a/websocket/src/main/java/fi/iki/elonen/NanoWSD.java b/websocket/src/main/java/fi/iki/elonen/NanoWebSocketServer.java
index 2b2933a..7a5e588 100644
--- a/websocket/src/main/java/fi/iki/elonen/NanoWSD.java
+++ b/websocket/src/main/java/fi/iki/elonen/NanoWebSocketServer.java
@@ -6,7 +6,7 @@ import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Map;
-public abstract class NanoWSD extends NanoHTTPD {
+public abstract class NanoWebSocketServer extends NanoHTTPD {
public static final String HEADER_UPGRADE = "upgrade";
public static final String HEADER_UPGRADE_VALUE = "websocket";
public static final String HEADER_CONNECTION = "connection";
@@ -19,11 +19,11 @@ public abstract class NanoWSD extends NanoHTTPD {
public final static String WEBSOCKET_KEY_MAGIC = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11";
- public NanoWSD(int port) {
+ public NanoWebSocketServer(int port) {
super(port);
}
- public NanoWSD(String hostname, int port) {
+ public NanoWebSocketServer(String hostname, int port) {
super(hostname, port);
}
@@ -32,7 +32,7 @@ public abstract class NanoWSD extends NanoHTTPD {
Map<String, String> headers = session.getHeaders();
if (isWebsocketRequested(session)) {
if (!HEADER_UPGRADE_VALUE.equalsIgnoreCase(headers.get(HEADER_UPGRADE))
- || !HEADER_CONNECTION_VALUE.equalsIgnoreCase(headers.get(HEADER_CONNECTION))) {
+ || !isWebSocketConnectionHeader(session.getHeaders())) {
return new Response(Response.Status.BAD_REQUEST, NanoHTTPD.MIME_PLAINTEXT, "Invalid Websocket handshake");
}
if (!HEADER_WEBSOCKET_VERSION_VALUE.equalsIgnoreCase(headers.get(HEADER_WEBSOCKET_VERSION))) {
@@ -61,8 +61,15 @@ public abstract class NanoWSD extends NanoHTTPD {
protected boolean isWebsocketRequested(IHTTPSession session) {
Map<String, String> headers = session.getHeaders();
- return ((HEADER_UPGRADE_VALUE.equalsIgnoreCase(headers.get(HEADER_UPGRADE)))
- && (HEADER_CONNECTION_VALUE.equalsIgnoreCase(headers.get(HEADER_CONNECTION))));
+ String upgrade = headers.get(HEADER_UPGRADE);
+ boolean isCorrectConnection = isWebSocketConnectionHeader(headers);
+ boolean isUpgrade = HEADER_UPGRADE_VALUE.equalsIgnoreCase(upgrade);
+ return (isUpgrade && isCorrectConnection);
+ }
+
+ private boolean isWebSocketConnectionHeader(Map<String, String> headers) {
+ String connection = headers.get(HEADER_CONNECTION);
+ return (connection != null && connection.toLowerCase().contains(HEADER_CONNECTION_VALUE.toLowerCase()));
}
public static String makeAcceptKey(String key) throws NoSuchAlgorithmException {
diff --git a/websocket/src/main/java/fi/iki/elonen/WebSocket.java b/websocket/src/main/java/fi/iki/elonen/WebSocket.java
index dcba8c0..84bf259 100644
--- a/websocket/src/main/java/fi/iki/elonen/WebSocket.java
+++ b/websocket/src/main/java/fi/iki/elonen/WebSocket.java
@@ -40,8 +40,8 @@ public abstract class WebSocket {
this.handshakeRequest = handshakeRequest;
this.in = handshakeRequest.getInputStream();
- handshakeResponse.addHeader(NanoWSD.HEADER_UPGRADE, NanoWSD.HEADER_UPGRADE_VALUE);
- handshakeResponse.addHeader(NanoWSD.HEADER_CONNECTION, NanoWSD.HEADER_CONNECTION_VALUE);
+ handshakeResponse.addHeader(NanoWebSocketServer.HEADER_UPGRADE, NanoWebSocketServer.HEADER_UPGRADE_VALUE);
+ handshakeResponse.addHeader(NanoWebSocketServer.HEADER_CONNECTION, NanoWebSocketServer.HEADER_CONNECTION_VALUE);
}
// --------------------------------IO--------------------------------------