headers should be case insensive

This commit is contained in:
Naoyuki Kanezawa
2014-02-02 22:42:17 +09:00
parent 139dd685e4
commit 3cb02a6151
2 changed files with 10 additions and 13 deletions

View File

@@ -7,8 +7,8 @@ import com.github.nkzawa.engineio.client.EventThread;
import java.io.*; import java.io.*;
import java.net.HttpURLConnection; import java.net.HttpURLConnection;
import java.net.URL; import java.net.URL;
import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.TreeMap;
import java.util.concurrent.ExecutorService; import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors; import java.util.concurrent.Executors;
import java.util.logging.Logger; import java.util.logging.Logger;
@@ -41,10 +41,7 @@ public class PollingXHR extends Polling {
@Override @Override
public void call(Object... args) { public void call(Object... args) {
// Never execute asynchronously for support to modify headers. // Never execute asynchronously for support to modify headers.
@SuppressWarnings("unchecked") self.emit(EVENT_REQUEST_HEADERS, args[0]);
Map<String, String> headers = args.length > 0 && args[0] instanceof Map ?
(Map<String, String>)args[0] : new HashMap<String, String>();
self.emit(EVENT_REQUEST_HEADERS, headers);
} }
}).on(Request.EVENT_RESPONSE_HEADERS, new Listener() { }).on(Request.EVENT_RESPONSE_HEADERS, new Listener() {
@Override @Override
@@ -52,10 +49,7 @@ public class PollingXHR extends Polling {
EventThread.exec(new Runnable() { EventThread.exec(new Runnable() {
@Override @Override
public void run() { public void run() {
@SuppressWarnings("unchecked") self.emit(EVENT_RESPONSE_HEADERS, args[0]);
final Map<String, String> headers = args.length > 0 && args[0] instanceof Map ?
(Map<String, String>)args[0] : new HashMap<String, String>();
self.emit(EVENT_RESPONSE_HEADERS, headers);
} }
}); });
} }
@@ -161,7 +155,7 @@ public class PollingXHR extends Polling {
return; return;
} }
Map<String, String> headers = new HashMap<String, String>(); Map<String, String> headers = new TreeMap<String, String>(String.CASE_INSENSITIVE_ORDER);
if ("POST".equals(this.method)) { if ("POST".equals(this.method)) {
xhr.setDoOutput(true); xhr.setDoOutput(true);
@@ -188,8 +182,9 @@ public class PollingXHR extends Polling {
writer.flush(); writer.flush();
} }
Map<String, String> headers = new HashMap<String, String>(); Map<String, String> headers = new TreeMap<String, String>(String.CASE_INSENSITIVE_ORDER);
for (String key : xhr.getHeaderFields().keySet()) { for (String key : xhr.getHeaderFields().keySet()) {
if (key == null) continue;
headers.put(key, xhr.getHeaderField(key)); headers.put(key, xhr.getHeaderField(key));
} }
self.onResponseHeaders(headers); self.onResponseHeaders(headers);

View File

@@ -16,6 +16,7 @@ import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
import java.util.Iterator; import java.util.Iterator;
import java.util.Map; import java.util.Map;
import java.util.TreeMap;
public class WebSocket extends Transport { public class WebSocket extends Transport {
@@ -34,7 +35,7 @@ public class WebSocket extends Transport {
return; return;
} }
Map<String, String> headers = new HashMap<String, String>(); Map<String, String> headers = new TreeMap<String, String>(String.CASE_INSENSITIVE_ORDER);
this.emit(EVENT_REQUEST_HEADERS, headers); this.emit(EVENT_REQUEST_HEADERS, headers);
final WebSocket self = this; final WebSocket self = this;
@@ -45,10 +46,11 @@ public class WebSocket extends Transport {
EventThread.exec(new Runnable() { EventThread.exec(new Runnable() {
@Override @Override
public void run() { public void run() {
Map<String, String> headers = new HashMap<String, String>(); Map<String, String> headers = new TreeMap<String, String>(String.CASE_INSENSITIVE_ORDER);
Iterator<String> it = serverHandshake.iterateHttpFields(); Iterator<String> it = serverHandshake.iterateHttpFields();
while (it.hasNext()) { while (it.hasNext()) {
String field = it.next(); String field = it.next();
if (field == null) continue;
headers.put(field, serverHandshake.getFieldValue(field)); headers.put(field, serverHandshake.getFieldValue(field));
} }
self.emit(EVENT_RESPONSE_HEADERS, headers); self.emit(EVENT_RESPONSE_HEADERS, headers);