From 65c64e08b3171c947c0a343f597245e57d8cfdb0 Mon Sep 17 00:00:00 2001 From: Naoyuki Kanezawa Date: Tue, 21 Jul 2015 02:29:15 +0900 Subject: [PATCH 1/2] change http header types --- .../client/transports/PollingXHR.java | 30 ++++++------------ .../engineio/client/transports/WebSocket.java | 20 +++++------- .../engineio/client/ServerConnectionTest.java | 31 ++++++++++++------- src/test/resources/server.js | 3 +- 4 files changed, 38 insertions(+), 46 deletions(-) diff --git a/src/main/java/com/github/nkzawa/engineio/client/transports/PollingXHR.java b/src/main/java/com/github/nkzawa/engineio/client/transports/PollingXHR.java index f82ef49..6eb8dcf 100644 --- a/src/main/java/com/github/nkzawa/engineio/client/transports/PollingXHR.java +++ b/src/main/java/com/github/nkzawa/engineio/client/transports/PollingXHR.java @@ -11,10 +11,7 @@ import java.io.*; import java.net.HttpURLConnection; import java.net.URL; import java.nio.ByteBuffer; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.TreeMap; +import java.util.*; import java.util.logging.Logger; public class PollingXHR extends Polling { @@ -183,16 +180,18 @@ public class PollingXHR extends Polling { } } - Map headers = new TreeMap(String.CASE_INSENSITIVE_ORDER); + Map> headers = new TreeMap>(String.CASE_INSENSITIVE_ORDER); if ("POST".equals(this.method)) { xhr.setDoOutput(true); - headers.put("Content-type", "application/octet-stream"); + headers.put("Content-type", new LinkedList(Arrays.asList("application/octet-stream"))); } self.onRequestHeaders(headers); - for (Map.Entry header : headers.entrySet()) { - xhr.setRequestProperty(header.getKey(), header.getValue()); + for (Map.Entry> header : headers.entrySet()) { + for (String v : header.getValue()){ + xhr.addRequestProperty(header.getKey(), v); + } } logger.fine(String.format("sending xhr with url %s | data %s", this.uri, this.data)); @@ -208,16 +207,7 @@ public class PollingXHR extends Polling { output.flush(); } - Map headers = new TreeMap(String.CASE_INSENSITIVE_ORDER); - - Map> xhrHeaderFields = xhr.getHeaderFields(); - if(xhrHeaderFields != null) { - for (String key : xhrHeaderFields.keySet()) { - if (key == null) continue; - headers.put(key, xhr.getHeaderField(key)); - } - } - + Map> headers = xhr.getHeaderFields(); self.onResponseHeaders(headers); final int statusCode = xhr.getResponseCode(); @@ -257,11 +247,11 @@ public class PollingXHR extends Polling { this.cleanup(); } - private void onRequestHeaders(Map headers) { + private void onRequestHeaders(Map> headers) { this.emit(EVENT_REQUEST_HEADERS, headers); } - private void onResponseHeaders(Map headers) { + private void onResponseHeaders(Map> headers) { this.emit(EVENT_RESPONSE_HEADERS, headers); } diff --git a/src/main/java/com/github/nkzawa/engineio/client/transports/WebSocket.java b/src/main/java/com/github/nkzawa/engineio/client/transports/WebSocket.java index 9adb162..7c93645 100644 --- a/src/main/java/com/github/nkzawa/engineio/client/transports/WebSocket.java +++ b/src/main/java/com/github/nkzawa/engineio/client/transports/WebSocket.java @@ -6,7 +6,6 @@ import com.github.nkzawa.engineio.parser.Packet; import com.github.nkzawa.engineio.parser.Parser; import com.github.nkzawa.parseqs.ParseQS; import com.github.nkzawa.thread.EventThread; -import com.squareup.okhttp.Headers; import com.squareup.okhttp.OkHttpClient; import com.squareup.okhttp.Request; import com.squareup.okhttp.Response; @@ -18,10 +17,7 @@ import okio.BufferedSource; import javax.net.ssl.SSLSocketFactory; import java.io.IOException; -import java.util.Date; -import java.util.HashMap; -import java.util.Map; -import java.util.TreeMap; +import java.util.*; import java.util.logging.Logger; import static com.squareup.okhttp.ws.WebSocket.PayloadType.BINARY; @@ -42,7 +38,7 @@ public class WebSocket extends Transport { } protected void doOpen() { - Map headers = new TreeMap(String.CASE_INSENSITIVE_ORDER); + Map> headers = new TreeMap>(String.CASE_INSENSITIVE_ORDER); this.emit(EVENT_REQUEST_HEADERS, headers); final WebSocket self = this; @@ -55,19 +51,17 @@ public class WebSocket extends Transport { client.setHostnameVerifier(this.hostnameVerifier); } Request.Builder builder = new Request.Builder().url(uri()); - for (Map.Entry entry : headers.entrySet()) { - builder.addHeader(entry.getKey(), entry.getValue()); + for (Map.Entry> entry : headers.entrySet()) { + for (String v : entry.getValue()) { + builder.addHeader(entry.getKey(), v); + } } final Request request = builder.build(); (wsCall = WebSocketCall.create(client, request)).enqueue(new WebSocketListener() { @Override public void onOpen(com.squareup.okhttp.ws.WebSocket webSocket, Response response) { ws = webSocket; - final Map headers = new TreeMap(String.CASE_INSENSITIVE_ORDER); - Headers responseHeaders = response.headers(); - for (int i = 0, size = responseHeaders.size(); i < size; i++) { - headers.put(responseHeaders.name(i), responseHeaders.value(i)); - } + final Map> headers = response.headers().toMultimap(); EventThread.exec(new Runnable() { @Override public void run() { diff --git a/src/test/java/com/github/nkzawa/engineio/client/ServerConnectionTest.java b/src/test/java/com/github/nkzawa/engineio/client/ServerConnectionTest.java index da7b6cc..14a6a17 100644 --- a/src/test/java/com/github/nkzawa/engineio/client/ServerConnectionTest.java +++ b/src/test/java/com/github/nkzawa/engineio/client/ServerConnectionTest.java @@ -9,6 +9,8 @@ import org.junit.runner.RunWith; import org.junit.runners.JUnit4; import java.net.URISyntaxException; +import java.util.Arrays; +import java.util.List; import java.util.Map; import java.util.concurrent.BlockingQueue; import java.util.concurrent.LinkedBlockingQueue; @@ -61,7 +63,7 @@ public class ServerConnectionTest extends Connection { }).on(Socket.EVENT_MESSAGE, new Emitter.Listener() { @Override public void call(Object... args) { - events.offer((String)args[0]); + events.offer((String) args[0]); } }); socket.open(); @@ -89,7 +91,7 @@ public class ServerConnectionTest extends Connection { HandshakeData data = (HandshakeData)args[0]; assertThat(data.sid, is(notNullValue())); assertThat(data.upgrades, is(not(emptyArray()))); - assertThat(data.pingTimeout, is(greaterThan((long)0))); + assertThat(data.pingTimeout, is(greaterThan((long) 0))); assertThat(data.pingInterval, is(greaterThan((long) 0))); socket.close(); } @@ -144,15 +146,17 @@ public class ServerConnectionTest extends Connection { @Override public void call(Object... args) { @SuppressWarnings("unchecked") - Map headers = (Map)args[0]; - headers.put("X-EngineIO", "foo"); + Map> headers = (Map>)args[0]; + headers.put("X-EngineIO", Arrays.asList("foo")); } }).on(Transport.EVENT_RESPONSE_HEADERS, new Emitter.Listener() { @Override public void call(Object... args) { @SuppressWarnings("unchecked") - Map headers = (Map)args[0]; - messages.offer(headers.get("X-EngineIO")); + Map> headers = (Map>)args[0]; + List values = headers.get("X-EngineIO"); + messages.offer(values.get(0)); + messages.offer(values.get(1)); } }); } @@ -160,7 +164,7 @@ public class ServerConnectionTest extends Connection { socket.open(); assertThat(messages.take(), is("foo")); - assertThat(messages.take(), is("foo")); + assertThat(messages.take(), is("hi")); socket.close(); } @@ -180,21 +184,24 @@ public class ServerConnectionTest extends Connection { @Override public void call(Object... args) { @SuppressWarnings("unchecked") - Map headers = (Map)args[0]; - headers.put("X-EngineIO", "foo"); + Map> headers = (Map>)args[0]; + headers.put("X-EngineIO", Arrays.asList("foo")); } }).on(Transport.EVENT_RESPONSE_HEADERS, new Emitter.Listener() { @Override public void call(Object... args) { @SuppressWarnings("unchecked") - Map headers = (Map)args[0]; - messages.offer(headers.get("X-EngineIO")); + Map> headers = (Map>)args[0]; + List values = headers.get("X-EngineIO"); + messages.offer(values.get(0)); + messages.offer(values.get(1)); } }); } }); socket.open(); + assertThat(messages.take(), is("hi")); assertThat(messages.take(), is("foo")); socket.close(); } @@ -265,7 +272,7 @@ public class ServerConnectionTest extends Connection { } }); - assertThat((String)values.take(), is(Polling.NAME)); + assertThat((String) values.take(), is(Polling.NAME)); assertThat((String)values.take(), is(not(WebSocket.NAME))); } } diff --git a/src/test/resources/server.js b/src/test/resources/server.js index f83a179..ef43dee 100644 --- a/src/test/resources/server.js +++ b/src/test/resources/server.js @@ -45,7 +45,7 @@ before(server, 'handleRequest', function(req, res) { // echo a header value var value = req.headers['x-engineio']; if (!value) return; - res.setHeader('X-EngineIO', value); + res.setHeader('X-EngineIO', ['hi', value]); }); before(server, 'handleUpgrade', function(req, socket, head) { @@ -53,6 +53,7 @@ before(server, 'handleUpgrade', function(req, socket, head) { var value = req.headers['x-engineio']; if (!value) return; this.ws.once('headers', function(headers) { + headers.push('X-EngineIO: hi'); headers.push('X-EngineIO: ' + value); }); }); From 845a4f0639c78b94a545f03e0b162d4b3ef97892 Mon Sep 17 00:00:00 2001 From: Naoyuki Kanezawa Date: Tue, 21 Jul 2015 02:31:39 +0900 Subject: [PATCH 2/2] update README --- README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 806eb51..cfd397d 100644 --- a/README.md +++ b/README.md @@ -117,17 +117,17 @@ socket.on(Socket.EVENT_TRANSPORT, new Emitter.listener() { @Override public void call(Object... args) { @SuppressWarnings("unchecked") - Map headers = (Map)args[0]; - // send cookies to server. - headers.put("Cookie", "foo=1;"); + Map> headers = (Map>)args[0]; + // send cookie value to server. + headers.put("Cookie", Arrays.asList("foo=1;")); } }).on(Transport.EVENT_RESPONSE_HEADERS, new Emitter.Listener() { @Override public void call(Object... args) { @SuppressWarnings("unchecked") - Map headers = (Map)args[0]; - // get cookies from server. - String cookie = headers.get("Set-Cookie"); + Map> headers = (Map>)args[0]; + // receive cookie value from server. + String cookie = headers.get("Set-Cookie").get(0); } }); }