From 9d6947a015d06851e3cfdaf2397b80cefe161896 Mon Sep 17 00:00:00 2001 From: nkzawa Date: Tue, 11 Jul 2017 21:54:48 +0900 Subject: [PATCH 1/4] bump engine.io-client --- pom.xml | 2 +- src/main/java/io/socket/client/IO.java | 11 +++-- src/main/java/io/socket/client/Manager.java | 14 +++--- .../java/io/socket/client/ExecutionTest.java | 2 +- .../io/socket/client/SSLConnectionTest.java | 45 +++++++++++++------ 5 files changed, 48 insertions(+), 26 deletions(-) diff --git a/pom.xml b/pom.xml index 92e6d4e..091ef20 100644 --- a/pom.xml +++ b/pom.xml @@ -62,7 +62,7 @@ io.socket engine.io-client - 0.8.3 + 0.8.4-SNAPSHOT org.json diff --git a/src/main/java/io/socket/client/IO.java b/src/main/java/io/socket/client/IO.java index 06912a0..bcf266d 100644 --- a/src/main/java/io/socket/client/IO.java +++ b/src/main/java/io/socket/client/IO.java @@ -2,6 +2,9 @@ package io.socket.client; import io.socket.parser.Parser; +import okhttp3.Call; +import okhttp3.OkHttpClient; +import okhttp3.WebSocket; import javax.net.ssl.HostnameVerifier; import javax.net.ssl.SSLContext; @@ -23,12 +26,12 @@ public class IO { */ public static int protocol = Parser.protocol; - public static void setDefaultSSLContext(SSLContext sslContext) { - Manager.defaultSSLContext = sslContext; + public static void setDefaultOkHttpWebSocketFactory(WebSocket.Factory factory) { + Manager.defaultWebSocketFactory = factory; } - public static void setDefaultHostnameVerifier(HostnameVerifier hostnameVerifier) { - Manager.defaultHostnameVerifier = hostnameVerifier; + public static void setDefaultOkHttpCallFactory(Call.Factory factory) { + Manager.defaultCallFactory = factory; } private IO() {} diff --git a/src/main/java/io/socket/client/Manager.java b/src/main/java/io/socket/client/Manager.java index 69a8909..e4c4651 100644 --- a/src/main/java/io/socket/client/Manager.java +++ b/src/main/java/io/socket/client/Manager.java @@ -5,6 +5,8 @@ import io.socket.emitter.Emitter; import io.socket.parser.Packet; import io.socket.parser.Parser; import io.socket.thread.EventThread; +import okhttp3.Call; +import okhttp3.WebSocket; import javax.net.ssl.HostnameVerifier; import javax.net.ssl.SSLContext; @@ -73,8 +75,8 @@ public class Manager extends Emitter { */ public static final String EVENT_TRANSPORT = Engine.EVENT_TRANSPORT; - /*package*/ static SSLContext defaultSSLContext; - /*package*/ static HostnameVerifier defaultHostnameVerifier; + /*package*/ static WebSocket.Factory defaultWebSocketFactory; + /*package*/ static Call.Factory defaultCallFactory; /*package*/ ReadyState readyState; @@ -123,11 +125,11 @@ public class Manager extends Emitter { if (opts.path == null) { opts.path = "/socket.io"; } - if (opts.sslContext == null) { - opts.sslContext = defaultSSLContext; + if (opts.webSocketFactory == null) { + opts.webSocketFactory = defaultWebSocketFactory; } - if (opts.hostnameVerifier == null) { - opts.hostnameVerifier = defaultHostnameVerifier; + if (opts.callFactory == null) { + opts.callFactory = defaultCallFactory; } this.opts = opts; this.nsps = new ConcurrentHashMap(); diff --git a/src/test/java/io/socket/client/ExecutionTest.java b/src/test/java/io/socket/client/ExecutionTest.java index d6db39a..b4bf6a7 100644 --- a/src/test/java/io/socket/client/ExecutionTest.java +++ b/src/test/java/io/socket/client/ExecutionTest.java @@ -17,7 +17,7 @@ public class ExecutionTest extends Connection { private static final Logger logger = Logger.getLogger(ExecutionTest.class.getName()); - final static int TIMEOUT = 60 * 1000; + final static int TIMEOUT = 100 * 1000; @Test(timeout = TIMEOUT) public void execConnection() throws InterruptedException, IOException { diff --git a/src/test/java/io/socket/client/SSLConnectionTest.java b/src/test/java/io/socket/client/SSLConnectionTest.java index db3daac..f0decc8 100644 --- a/src/test/java/io/socket/client/SSLConnectionTest.java +++ b/src/test/java/io/socket/client/SSLConnectionTest.java @@ -1,6 +1,7 @@ package io.socket.client; import io.socket.emitter.Emitter; +import okhttp3.OkHttpClient; import org.junit.After; import org.junit.Test; import org.junit.runner.RunWith; @@ -9,7 +10,9 @@ import org.junit.runners.JUnit4; import javax.net.ssl.HostnameVerifier; import javax.net.ssl.KeyManagerFactory; import javax.net.ssl.SSLContext; +import javax.net.ssl.SSLSession; import javax.net.ssl.TrustManagerFactory; +import javax.net.ssl.X509TrustManager; import java.io.File; import java.io.FileInputStream; import java.io.IOException; @@ -21,15 +24,20 @@ import java.util.concurrent.LinkedBlockingQueue; @RunWith(JUnit4.class) public class SSLConnectionTest extends Connection { - // for test on localhost - static HostnameVerifier hostnameVerifier = new javax.net.ssl.HostnameVerifier(){ - public boolean verify(String hostname, javax.net.ssl.SSLSession sslSession) { - return hostname.equals("localhost"); - } - }; + private static OkHttpClient sOkHttpClient; private Socket socket; + static { + try { + prepareOkHttpClient(); + } catch(GeneralSecurityException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + } + @Override String uri() { return "https://localhost:" + PORT; @@ -47,7 +55,7 @@ public class SSLConnectionTest extends Connection { return new String[] {"DEBUG=socket.io:*", "PORT=" + PORT, "SSL=1"}; } - SSLContext createSSLContext() throws GeneralSecurityException, IOException { + private static void prepareOkHttpClient() throws GeneralSecurityException, IOException { KeyStore ks = KeyStore.getInstance("JKS"); File file = new File("src/test/resources/keystore.jks"); ks.load(new FileInputStream(file), "password".toCharArray()); @@ -60,21 +68,30 @@ public class SSLConnectionTest extends Connection { SSLContext sslContext = SSLContext.getInstance("TLSv1"); sslContext.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null); - return sslContext; + + sOkHttpClient = new OkHttpClient.Builder() + .hostnameVerifier(new HostnameVerifier(){ + public boolean verify(String hostname, SSLSession sslSession) { + return hostname.equals("localhost"); + } + }) + .sslSocketFactory(sslContext.getSocketFactory(), + (X509TrustManager) tmf.getTrustManagers()[0]) + .build(); } @After public void tearDown() { - IO.setDefaultSSLContext(null); - IO.setDefaultHostnameVerifier(null); + IO.setDefaultOkHttpCallFactory(null); + IO.setDefaultOkHttpWebSocketFactory(null); } @Test(timeout = TIMEOUT) public void connect() throws Exception { final BlockingQueue values = new LinkedBlockingQueue(); IO.Options opts = createOptions(); - opts.sslContext = createSSLContext(); - opts.hostnameVerifier = hostnameVerifier; + opts.callFactory = sOkHttpClient; + opts.webSocketFactory = sOkHttpClient; socket = client(opts); socket.on(Socket.EVENT_CONNECT, new Emitter.Listener() { @Override @@ -96,8 +113,8 @@ public class SSLConnectionTest extends Connection { @Test(timeout = TIMEOUT) public void defaultSSLContext() throws Exception { final BlockingQueue values = new LinkedBlockingQueue(); - IO.setDefaultSSLContext(createSSLContext()); - IO.setDefaultHostnameVerifier(hostnameVerifier); + IO.setDefaultOkHttpWebSocketFactory(sOkHttpClient); + IO.setDefaultOkHttpCallFactory(sOkHttpClient); socket = client(); socket.on(Socket.EVENT_CONNECT, new Emitter.Listener() { @Override From 302827ae99df1bb09eaee62739293c82adc87012 Mon Sep 17 00:00:00 2001 From: nkzawa Date: Tue, 11 Jul 2017 21:57:01 +0900 Subject: [PATCH 2/4] update README --- README.md | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 922289e..a7c8718 100644 --- a/README.md +++ b/README.md @@ -125,14 +125,19 @@ socket.on("foo", new Emitter.Listener() { SSL (HTTPS, WSS) settings: ```java +OkHttpClient okHttpClient = new OkHttpClient.Builder() + .hostnameVerifier(myHostnameVerifier) + .sslSocketFactory(mySSLContext.getSocketFactory(), myX509TrustManager) + .build(); + // default settings for all sockets -IO.setDefaultSSLContext(mySSLContext); -IO.setDefaultHostnameVerifier(myHostnameVerifier); +Socket.setDefaultOkHttpWebSocketFactory(okHttpClient); +Socket.setDefaultOkHttpCallFactory(okHttpClient); // set as an option opts = new IO.Options(); -opts.sslContext = mySSLContext; -opts.hostnameVerifier = myHostnameVerifier; +opts.callFactory = okHttpClient; +opts.webSocketFactory = okHttpClient; socket = IO.socket("https://localhost", opts); ``` From 2925cdb4e36980f6819f3047e8844609a8988ccf Mon Sep 17 00:00:00 2001 From: nkzawa Date: Tue, 11 Jul 2017 22:03:56 +0900 Subject: [PATCH 3/4] bump socket.io version on test --- src/test/resources/package-lock.json | 330 +++++++++++++++++++++++++++ src/test/resources/package.json | 2 +- 2 files changed, 331 insertions(+), 1 deletion(-) create mode 100644 src/test/resources/package-lock.json diff --git a/src/test/resources/package-lock.json b/src/test/resources/package-lock.json new file mode 100644 index 0000000..4ba4286 --- /dev/null +++ b/src/test/resources/package-lock.json @@ -0,0 +1,330 @@ +{ + "requires": true, + "lockfileVersion": 1, + "dependencies": { + "arraybuffer.slice": { + "version": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.6.tgz", + "integrity": "sha1-8zshWfBTKj8xB6JywMz70a0peco=" + }, + "backo2": { + "version": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", + "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=" + }, + "better-assert": { + "version": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", + "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", + "requires": { + "callsite": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz" + } + }, + "blob": { + "version": "https://registry.npmjs.org/blob/-/blob-0.0.4.tgz", + "integrity": "sha1-vPEwUspURj8w+fx+lbmkdjCpSSE=" + }, + "callsite": { + "version": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", + "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=" + }, + "component-bind": { + "version": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", + "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=" + }, + "component-emitter": { + "version": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.1.2.tgz", + "integrity": "sha1-KWWU8nU9qmOZbSrwjRWpURbJrsM=" + }, + "component-inherit": { + "version": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", + "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=" + }, + "cookie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" + }, + "has-binary": { + "version": "https://registry.npmjs.org/has-binary/-/has-binary-0.1.7.tgz", + "integrity": "sha1-aOYesWIQyVRaClzOBqhzkS/h5ow=", + "requires": { + "isarray": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz" + } + }, + "has-cors": { + "version": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", + "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=" + }, + "indexof": { + "version": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=" + }, + "isarray": { + "version": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "object-assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz", + "integrity": "sha1-ejs9DpgGPUP0wD8uiubNUahog6A=" + }, + "object-component": { + "version": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", + "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=" + }, + "options": { + "version": "https://registry.npmjs.org/options/-/options-0.0.6.tgz", + "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=" + }, + "socket.io": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-1.7.4.tgz", + "integrity": "sha1-L37O3DORvy1cc+KR/iM+bjTU3QA=", + "requires": { + "debug": "2.3.3", + "engine.io": "1.8.4", + "has-binary": "https://registry.npmjs.org/has-binary/-/has-binary-0.1.7.tgz", + "object-assign": "4.1.0", + "socket.io-adapter": "0.5.0", + "socket.io-client": "1.7.4", + "socket.io-parser": "2.3.1" + }, + "dependencies": { + "accepts": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.3.tgz", + "integrity": "sha1-w8p0NJOGSMPg2cHjKN1otiLChMo=", + "requires": { + "mime-types": "2.1.15", + "negotiator": "0.6.1" + } + }, + "after": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", + "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=" + }, + "base64-arraybuffer": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", + "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=" + }, + "base64id": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", + "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=" + }, + "debug": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "requires": { + "ms": "0.7.2" + } + }, + "engine.io": { + "version": "1.8.4", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-1.8.4.tgz", + "integrity": "sha1-d7zhK4Dl1gQpM3/sOw2vaR68kAM=", + "requires": { + "accepts": "1.3.3", + "base64id": "1.0.0", + "cookie": "0.3.1", + "debug": "2.3.3", + "engine.io-parser": "1.3.2", + "ws": "1.1.4" + } + }, + "engine.io-client": { + "version": "1.8.4", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-1.8.4.tgz", + "integrity": "sha1-n+hd7iWFPKa6viW9KtaHEIY+kcI=", + "requires": { + "component-emitter": "1.2.1", + "component-inherit": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", + "debug": "2.3.3", + "engine.io-parser": "1.3.2", + "has-cors": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", + "indexof": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "parsejson": "0.0.3", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "ws": "1.1.2", + "xmlhttprequest-ssl": "1.5.3", + "yeast": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz" + }, + "dependencies": { + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" + }, + "ws": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.2.tgz", + "integrity": "sha1-iiRPoFJAHgjJiGz0SoUYnh/UBn8=", + "requires": { + "options": "https://registry.npmjs.org/options/-/options-0.0.6.tgz", + "ultron": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz" + } + } + } + }, + "engine.io-parser": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-1.3.2.tgz", + "integrity": "sha1-k3sHnwAH0Ik+xW1GyyILjLQ1Igo=", + "requires": { + "after": "0.8.2", + "arraybuffer.slice": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.6.tgz", + "base64-arraybuffer": "0.1.5", + "blob": "https://registry.npmjs.org/blob/-/blob-0.0.4.tgz", + "has-binary": "https://registry.npmjs.org/has-binary/-/has-binary-0.1.7.tgz", + "wtf-8": "1.0.0" + } + }, + "json3": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", + "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=" + }, + "mime-db": { + "version": "1.27.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.27.0.tgz", + "integrity": "sha1-gg9XIpa70g7CXtVeW13oaeVDbrE=" + }, + "mime-types": { + "version": "2.1.15", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.15.tgz", + "integrity": "sha1-pOv1BkCUVpI3uM9wBGd20J/JKu0=", + "requires": { + "mime-db": "1.27.0" + } + }, + "ms": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=" + }, + "negotiator": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", + "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" + }, + "parsejson": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/parsejson/-/parsejson-0.0.3.tgz", + "integrity": "sha1-q343WfIJ7OmUN5c/fQ8fZK4OZKs=", + "requires": { + "better-assert": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz" + } + }, + "parseqs": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", + "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", + "requires": { + "better-assert": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz" + } + }, + "parseuri": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", + "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", + "requires": { + "better-assert": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz" + } + }, + "socket.io-adapter": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-0.5.0.tgz", + "integrity": "sha1-y21LuL7IHhB4uZZ3+c7QBGBmu4s=", + "requires": { + "debug": "2.3.3", + "socket.io-parser": "2.3.1" + } + }, + "socket.io-client": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-1.7.4.tgz", + "integrity": "sha1-7J+CA1btme9tNX8HVtZIcXvdQoE=", + "requires": { + "backo2": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", + "component-bind": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", + "component-emitter": "1.2.1", + "debug": "2.3.3", + "engine.io-client": "1.8.4", + "has-binary": "https://registry.npmjs.org/has-binary/-/has-binary-0.1.7.tgz", + "indexof": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "object-component": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", + "parseuri": "0.0.5", + "socket.io-parser": "2.3.1", + "to-array": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz" + }, + "dependencies": { + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" + } + } + }, + "socket.io-parser": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-2.3.1.tgz", + "integrity": "sha1-3VMgJRA85Clpcya+/WQAX8/ltKA=", + "requires": { + "component-emitter": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.1.2.tgz", + "debug": "2.2.0", + "isarray": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "json3": "3.3.2" + }, + "dependencies": { + "debug": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "requires": { + "ms": "0.7.1" + } + }, + "ms": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", + "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=" + } + } + }, + "ws": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.4.tgz", + "integrity": "sha1-V/QNA2gy5fUFVmKjl8Tedu1mv2E=", + "requires": { + "options": "https://registry.npmjs.org/options/-/options-0.0.6.tgz", + "ultron": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz" + } + }, + "xmlhttprequest-ssl": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.3.tgz", + "integrity": "sha1-GFqIjATspGw+QHDZn3tJ3jUomS0=" + } + } + }, + "to-array": { + "version": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", + "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=" + }, + "ultron": { + "version": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz", + "integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=" + }, + "wtf-8": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wtf-8/-/wtf-8-1.0.0.tgz", + "integrity": "sha1-OS2LotDxw00e4tYw8V0O+2jhBIo=" + }, + "yeast": { + "version": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", + "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=" + } + } +} diff --git a/src/test/resources/package.json b/src/test/resources/package.json index 4bc29ed..9fe90df 100644 --- a/src/test/resources/package.json +++ b/src/test/resources/package.json @@ -1,6 +1,6 @@ { "private": true, "dependencies": { - "socket.io": "1.4.8" + "socket.io": "1.7.4" } } From 4811368854a8599eac0bf798ce28fa262cce210f Mon Sep 17 00:00:00 2001 From: nkzawa Date: Wed, 12 Jul 2017 01:09:11 +0900 Subject: [PATCH 4/4] send query on connecti --- src/main/java/io/socket/client/IO.java | 7 ++++++- src/main/java/io/socket/client/Manager.java | 13 +++++++++++-- src/main/java/io/socket/client/Socket.java | 14 ++++++++++++-- src/main/java/io/socket/parser/Packet.java | 1 + src/test/java/io/socket/client/SocketTest.java | 17 +++++++++++++++++ 5 files changed, 47 insertions(+), 5 deletions(-) diff --git a/src/main/java/io/socket/client/IO.java b/src/main/java/io/socket/client/IO.java index bcf266d..07aa46c 100644 --- a/src/main/java/io/socket/client/IO.java +++ b/src/main/java/io/socket/client/IO.java @@ -85,7 +85,12 @@ public class IO { io = managers.get(id); } - return io.socket(parsed.getPath()); + String query = parsed.getQuery(); + if (query != null && (opts.query == null || opts.query.isEmpty())) { + opts.query = query; + } + + return io.socket(parsed.getPath(), opts); } diff --git a/src/main/java/io/socket/client/Manager.java b/src/main/java/io/socket/client/Manager.java index e4c4651..c20e0db 100644 --- a/src/main/java/io/socket/client/Manager.java +++ b/src/main/java/io/socket/client/Manager.java @@ -418,12 +418,13 @@ public class Manager extends Emitter { * Initializes {@link Socket} instances for each namespaces. * * @param nsp namespace. + * @param opts options. * @return a socket instance for the namespace. */ - public Socket socket(String nsp) { + public Socket socket(String nsp, Options opts) { Socket socket = this.nsps.get(nsp); if (socket == null) { - socket = new Socket(this, nsp); + socket = new Socket(this, nsp, opts); Socket _socket = this.nsps.putIfAbsent(nsp, socket); if (_socket != null) { socket = _socket; @@ -447,6 +448,10 @@ public class Manager extends Emitter { return socket; } + public Socket socket(String nsp) { + return socket(nsp, null); + } + /*package*/ void destroy(Socket socket) { this.connecting.remove(socket); if (!this.connecting.isEmpty()) return; @@ -458,6 +463,10 @@ public class Manager extends Emitter { logger.fine(String.format("writing packet %s", packet)); final Manager self = this; + if (packet.query != null && !packet.query.isEmpty() && packet.type == Parser.CONNECT) { + packet.nsp += "?" + packet.query; + } + if (!self.encoding) { self.encoding = true; this.encoder.encode(packet, new Parser.Encoder.Callback() { diff --git a/src/main/java/io/socket/client/Socket.java b/src/main/java/io/socket/client/Socket.java index cd998f4..c309030 100644 --- a/src/main/java/io/socket/client/Socket.java +++ b/src/main/java/io/socket/client/Socket.java @@ -79,6 +79,7 @@ public class Socket extends Emitter { }}; /*package*/ String id; + /*package*/ String query; private volatile boolean connected; private int ids; @@ -89,9 +90,12 @@ public class Socket extends Emitter { private final Queue> receiveBuffer = new LinkedList>(); private final Queue> sendBuffer = new LinkedList>(); - public Socket(Manager io, String nsp) { + public Socket(Manager io, String nsp, Manager.Options opts) { this.io = io; this.nsp = nsp; + if (opts != null) { + this.query = opts.query; + } } private void subEvents() { @@ -268,7 +272,13 @@ public class Socket extends Emitter { logger.fine("transport is open - connecting"); if (!"/".equals(this.nsp)) { - this.packet(new Packet(Parser.CONNECT)); + if (this.query != null && !this.query.isEmpty()) { + Packet packet = new Packet(Parser.CONNECT); + packet.query = this.query; + this.packet(packet); + } else { + this.packet(new Packet(Parser.CONNECT)); + } } } diff --git a/src/main/java/io/socket/parser/Packet.java b/src/main/java/io/socket/parser/Packet.java index ae5e35b..da65f68 100644 --- a/src/main/java/io/socket/parser/Packet.java +++ b/src/main/java/io/socket/parser/Packet.java @@ -8,6 +8,7 @@ public class Packet { public String nsp; public T data; public int attachments; + public String query; public Packet() {} diff --git a/src/test/java/io/socket/client/SocketTest.java b/src/test/java/io/socket/client/SocketTest.java index 708e7cb..3006005 100644 --- a/src/test/java/io/socket/client/SocketTest.java +++ b/src/test/java/io/socket/client/SocketTest.java @@ -168,4 +168,21 @@ public class SocketTest extends Connection { socket.disconnect(); } + + @Test(timeout = TIMEOUT) + public void shouldStoreQueryStringAsAProperty() throws URISyntaxException, InterruptedException { + IO.Options opts = new IO.Options(); + opts.query = "a=b"; + Socket socket = IO.socket(this.uri() + "/abc", opts); + + Socket socket2 = IO.socket(this.uri() + "/abc?b=c&d=e"); + + IO.Options opts3 = new IO.Options(); + opts.query = "%26a=%26%3D%3Fa"; + Socket socket3 = IO.socket(this.uri() + "/abc", opts); + + assertThat(socket.query, is("a=b")); + assertThat(socket2.query, is("b=c&d=e")); + assertThat(socket3.query, is("%26a=%26%3D%3Fa")); + } }