fix #28 enable to access http headers
This commit is contained in:
@@ -66,6 +66,11 @@ public class Manager extends Emitter {
|
|||||||
|
|
||||||
public static final String EVENT_RECONNECTING = "reconnecting";
|
public static final String EVENT_RECONNECTING = "reconnecting";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called when a new transport is created. (experimental)
|
||||||
|
*/
|
||||||
|
public static final String EVENT_TRANSPORT = Engine.EVENT_TRANSPORT;
|
||||||
|
|
||||||
/*package*/ static SSLContext defaultSSLContext;
|
/*package*/ static SSLContext defaultSSLContext;
|
||||||
|
|
||||||
/*package*/ ReadyState readyState = null;
|
/*package*/ ReadyState readyState = null;
|
||||||
@@ -221,6 +226,14 @@ public class Manager extends Emitter {
|
|||||||
|
|
||||||
Manager.this.readyState = ReadyState.OPENING;
|
Manager.this.readyState = ReadyState.OPENING;
|
||||||
|
|
||||||
|
// propagate transport event.
|
||||||
|
socket.on(Engine.EVENT_TRANSPORT, new Listener() {
|
||||||
|
@Override
|
||||||
|
public void call(Object... args) {
|
||||||
|
self.emit(Manager.EVENT_TRANSPORT, args);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
final On.Handle openSub = On.on(socket, Engine.EVENT_OPEN, new Listener() {
|
final On.Handle openSub = On.on(socket, Engine.EVENT_OPEN, new Listener() {
|
||||||
@Override
|
@Override
|
||||||
public void call(Object... objects) {
|
public void call(Object... objects) {
|
||||||
|
|||||||
@@ -1,12 +1,16 @@
|
|||||||
package com.github.nkzawa.socketio.client;
|
package com.github.nkzawa.socketio.client;
|
||||||
|
|
||||||
import com.github.nkzawa.emitter.Emitter;
|
import com.github.nkzawa.emitter.Emitter;
|
||||||
|
import com.github.nkzawa.engineio.client.Transport;
|
||||||
|
import com.github.nkzawa.engineio.client.transports.Polling;
|
||||||
|
import com.github.nkzawa.engineio.client.transports.WebSocket;
|
||||||
import org.json.JSONObject;
|
import org.json.JSONObject;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
import org.junit.runners.JUnit4;
|
import org.junit.runners.JUnit4;
|
||||||
|
|
||||||
import java.net.URISyntaxException;
|
import java.net.URISyntaxException;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.concurrent.Semaphore;
|
import java.util.concurrent.Semaphore;
|
||||||
|
|
||||||
import static org.hamcrest.CoreMatchers.*;
|
import static org.hamcrest.CoreMatchers.*;
|
||||||
@@ -262,4 +266,72 @@ public class ServerConnectionTest extends Connection {
|
|||||||
socket.connect();
|
socket.connect();
|
||||||
semaphore.acquire();
|
semaphore.acquire();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test(timeout = TIMEOUT)
|
||||||
|
public void pollingHeaders() throws URISyntaxException, InterruptedException {
|
||||||
|
final Semaphore semaphore = new Semaphore(0);
|
||||||
|
|
||||||
|
IO.Options opts = createOptions();
|
||||||
|
opts.transports = new String[] {Polling.NAME};
|
||||||
|
socket = client(opts);
|
||||||
|
socket.io().on(Manager.EVENT_TRANSPORT, new Emitter.Listener() {
|
||||||
|
@Override
|
||||||
|
public void call(Object... args) {
|
||||||
|
Transport transport = (Transport)args[0];
|
||||||
|
transport.on(Transport.EVENT_REQUEST_HEADERS, new Emitter.Listener() {
|
||||||
|
@Override
|
||||||
|
public void call(Object... args) {
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
Map<String, String> headers = (Map<String, String>)args[0];
|
||||||
|
headers.put("X-SocketIO", "hi");
|
||||||
|
}
|
||||||
|
}).on(Transport.EVENT_RESPONSE_HEADERS, new Emitter.Listener() {
|
||||||
|
@Override
|
||||||
|
public void call(Object... args) {
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
Map<String, String> headers = (Map<String, String>)args[0];
|
||||||
|
assertThat(headers.get("X-SocketIO"), is("hi"));
|
||||||
|
socket.close();
|
||||||
|
semaphore.release();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
socket.open();
|
||||||
|
semaphore.acquire();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(timeout = TIMEOUT)
|
||||||
|
public void websocketHandshakeHeaders() throws URISyntaxException, InterruptedException {
|
||||||
|
final Semaphore semaphore = new Semaphore(0);
|
||||||
|
|
||||||
|
IO.Options opts = createOptions();
|
||||||
|
opts.transports = new String[] {WebSocket.NAME};
|
||||||
|
socket = client(opts);
|
||||||
|
socket.io().on(Manager.EVENT_TRANSPORT, new Emitter.Listener() {
|
||||||
|
@Override
|
||||||
|
public void call(Object... args) {
|
||||||
|
Transport transport = (Transport)args[0];
|
||||||
|
transport.on(Transport.EVENT_REQUEST_HEADERS, new Emitter.Listener() {
|
||||||
|
@Override
|
||||||
|
public void call(Object... args) {
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
Map<String, String> headers = (Map<String, String>)args[0];
|
||||||
|
headers.put("X-SocketIO", "hi");
|
||||||
|
}
|
||||||
|
}).on(Transport.EVENT_RESPONSE_HEADERS, new Emitter.Listener() {
|
||||||
|
@Override
|
||||||
|
public void call(Object... args) {
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
Map<String, String> headers = (Map<String, String>)args[0];
|
||||||
|
assertThat(headers.get("X-SocketIO"), is("hi"));
|
||||||
|
socket.close();
|
||||||
|
semaphore.release();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
socket.open();
|
||||||
|
semaphore.acquire();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -64,6 +64,32 @@ io.of(nsp).on('connection', function(socket) {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
function before(context, name, fn) {
|
||||||
|
var method = context[name];
|
||||||
|
context[name] = function() {
|
||||||
|
fn.apply(this, arguments);
|
||||||
|
return method.apply(this, arguments);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
before(io.eio, 'handleRequest', function(req, res) {
|
||||||
|
// echo a header value
|
||||||
|
var value = req.headers['x-socketio'];
|
||||||
|
if (!value) return;
|
||||||
|
res.setHeader('X-SocketIO', value);
|
||||||
|
});
|
||||||
|
|
||||||
|
before(io.eio, 'handleUpgrade', function(req, socket, head) {
|
||||||
|
// echo a header value for websocket handshake
|
||||||
|
var value = req.headers['x-socketio'];
|
||||||
|
if (!value) return;
|
||||||
|
this.ws.once('headers', function(headers) {
|
||||||
|
headers.push('X-SocketIO: ' + value);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
server.listen(port, function() {
|
server.listen(port, function() {
|
||||||
console.log('Socket.IO server listening on port', port);
|
console.log('Socket.IO server listening on port', port);
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user