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 3e81c8f..0656eda 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 @@ -7,8 +7,8 @@ import com.github.nkzawa.engineio.client.EventThread; import java.io.*; import java.net.HttpURLConnection; import java.net.URL; -import java.util.HashMap; import java.util.Map; +import java.util.TreeMap; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.logging.Logger; @@ -41,10 +41,7 @@ public class PollingXHR extends Polling { @Override public void call(Object... args) { // Never execute asynchronously for support to modify headers. - @SuppressWarnings("unchecked") - Map headers = args.length > 0 && args[0] instanceof Map ? - (Map)args[0] : new HashMap(); - self.emit(EVENT_REQUEST_HEADERS, headers); + self.emit(EVENT_REQUEST_HEADERS, args[0]); } }).on(Request.EVENT_RESPONSE_HEADERS, new Listener() { @Override @@ -52,10 +49,7 @@ public class PollingXHR extends Polling { EventThread.exec(new Runnable() { @Override public void run() { - @SuppressWarnings("unchecked") - final Map headers = args.length > 0 && args[0] instanceof Map ? - (Map)args[0] : new HashMap(); - self.emit(EVENT_RESPONSE_HEADERS, headers); + self.emit(EVENT_RESPONSE_HEADERS, args[0]); } }); } @@ -161,7 +155,7 @@ public class PollingXHR extends Polling { return; } - Map headers = new HashMap(); + Map headers = new TreeMap(String.CASE_INSENSITIVE_ORDER); if ("POST".equals(this.method)) { xhr.setDoOutput(true); @@ -188,8 +182,9 @@ public class PollingXHR extends Polling { writer.flush(); } - Map headers = new HashMap(); + Map headers = new TreeMap(String.CASE_INSENSITIVE_ORDER); for (String key : xhr.getHeaderFields().keySet()) { + if (key == null) continue; headers.put(key, xhr.getHeaderField(key)); } self.onResponseHeaders(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 17a0a63..3ebdb21 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 @@ -16,6 +16,7 @@ import java.util.Date; import java.util.HashMap; import java.util.Iterator; import java.util.Map; +import java.util.TreeMap; public class WebSocket extends Transport { @@ -34,7 +35,7 @@ public class WebSocket extends Transport { return; } - Map headers = new HashMap(); + Map headers = new TreeMap(String.CASE_INSENSITIVE_ORDER); this.emit(EVENT_REQUEST_HEADERS, headers); final WebSocket self = this; @@ -45,10 +46,11 @@ public class WebSocket extends Transport { EventThread.exec(new Runnable() { @Override public void run() { - Map headers = new HashMap(); + Map headers = new TreeMap(String.CASE_INSENSITIVE_ORDER); Iterator it = serverHandshake.iterateHttpFields(); while (it.hasNext()) { String field = it.next(); + if (field == null) continue; headers.put(field, serverHandshake.getFieldValue(field)); } self.emit(EVENT_RESPONSE_HEADERS, headers);