diff options
author | Paul Hawke <paul.hawke@gmail.com> | 2014-04-23 23:08:57 -0500 |
---|---|---|
committer | Paul Hawke <paul.hawke@gmail.com> | 2014-04-23 23:08:57 -0500 |
commit | c6c080a6f4377fb18fc869111714e9514c36331a (patch) | |
tree | 1ac1f8ad3486e39bd2591bd5d603dcd09de8f0e9 /websocket/src/main/java/fi/iki | |
parent | 6d3737c76afdb1c991bf8d96e3dd2cc622435f09 (diff) | |
download | nanohttpd-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.java | 4 |
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-------------------------------------- |