From f4b2816cf0a5cf9f6c8b5df85e42e1381602d163 Mon Sep 17 00:00:00 2001 From: Yu-Hsuan Lin Date: Sat, 2 May 2015 01:31:52 +0800 Subject: [PATCH] Set HostnameVerifier as an Options --- .../github/nkzawa/engineio/client/Socket.java | 4 ++++ .../nkzawa/engineio/client/Transport.java | 4 ++++ .../engineio/client/transports/WebSocket.java | 3 +++ .../engineio/client/SSLConnectionTest.java | 21 ++++++++++--------- 4 files changed, 22 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/github/nkzawa/engineio/client/Socket.java b/src/main/java/com/github/nkzawa/engineio/client/Socket.java index 4da61a6..73de492 100644 --- a/src/main/java/com/github/nkzawa/engineio/client/Socket.java +++ b/src/main/java/com/github/nkzawa/engineio/client/Socket.java @@ -10,6 +10,7 @@ import com.github.nkzawa.parseqs.ParseQS; import com.github.nkzawa.thread.EventThread; import org.json.JSONException; +import javax.net.ssl.HostnameVerifier; import javax.net.ssl.SSLContext; import java.net.URI; import java.net.URISyntaxException; @@ -121,6 +122,7 @@ public class Socket extends Emitter { private Future pingTimeoutTimer; private Future pingIntervalTimer; private SSLContext sslContext; + private HostnameVerifier hostnameVerifier; private ReadyState readyState; private ScheduledExecutorService heartbeatScheduler; @@ -197,6 +199,7 @@ public class Socket extends Emitter { opts.transports : new String[]{Polling.NAME, WebSocket.NAME})); this.policyPort = opts.policyPort != 0 ? opts.policyPort : 843; this.rememberUpgrade = opts.rememberUpgrade; + this.hostnameVerifier = opts.hostnameVerifier; } /** @@ -254,6 +257,7 @@ public class Socket extends Emitter { opts.timestampParam = this.timestampParam; opts.policyPort = this.policyPort; opts.socket = this; + opts.hostnameVerifier = this.hostnameVerifier; Transport transport; if (WebSocket.NAME.equals(name)) { diff --git a/src/main/java/com/github/nkzawa/engineio/client/Transport.java b/src/main/java/com/github/nkzawa/engineio/client/Transport.java index 8277075..2e12bad 100644 --- a/src/main/java/com/github/nkzawa/engineio/client/Transport.java +++ b/src/main/java/com/github/nkzawa/engineio/client/Transport.java @@ -6,6 +6,7 @@ import com.github.nkzawa.engineio.parser.Packet; import com.github.nkzawa.engineio.parser.Parser; import com.github.nkzawa.thread.EventThread; +import javax.net.ssl.HostnameVerifier; import javax.net.ssl.SSLContext; import java.util.Map; @@ -42,6 +43,7 @@ public abstract class Transport extends Emitter { protected String timestampParam; protected SSLContext sslContext; protected Socket socket; + protected HostnameVerifier hostnameVerifier; protected ReadyState readyState; @@ -55,6 +57,7 @@ public abstract class Transport extends Emitter { this.timestampRequests = opts.timestampRequests; this.sslContext = opts.sslContext; this.socket = opts.socket; + this.hostnameVerifier = opts.hostnameVerifier; } protected Transport onError(String msg, Exception desc) { @@ -144,6 +147,7 @@ public abstract class Transport extends Emitter { public int policyPort = -1; public Map query; public SSLContext sslContext; + public HostnameVerifier hostnameVerifier; protected Socket socket; } } 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 e33f975..a11439e 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 @@ -53,6 +53,9 @@ public class WebSocket extends Transport { SSLSocketFactory factory = sslContext.getSocketFactory();// (SSLSocketFactory) SSLSocketFactory.getDefault(); client.setSslSocketFactory(factory); } + if (this.hostnameVerifier != null) { + client.setHostnameVerifier(this.hostnameVerifier); + } Request.Builder builder = new Request.Builder().url(uri()); for (Map.Entry entry : headers.entrySet()) { builder.addHeader(entry.getKey(), entry.getValue()); diff --git a/src/test/java/com/github/nkzawa/engineio/client/SSLConnectionTest.java b/src/test/java/com/github/nkzawa/engineio/client/SSLConnectionTest.java index c4c0e5c..3ec7148 100644 --- a/src/test/java/com/github/nkzawa/engineio/client/SSLConnectionTest.java +++ b/src/test/java/com/github/nkzawa/engineio/client/SSLConnectionTest.java @@ -6,6 +6,7 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; +import javax.net.ssl.HostnameVerifier; import javax.net.ssl.KeyManagerFactory; import javax.net.ssl.SSLContext; import javax.net.ssl.TrustManagerFactory; @@ -23,15 +24,11 @@ import static org.junit.Assert.assertThat; @RunWith(JUnit4.class) public class SSLConnectionTest extends Connection { - static { - // for test on localhost - javax.net.ssl.HttpsURLConnection.setDefaultHostnameVerifier( - new javax.net.ssl.HostnameVerifier(){ - public boolean verify(String hostname, javax.net.ssl.SSLSession sslSession) { - return hostname.equals("localhost"); - } - }); - } + static HostnameVerifier hostnameVerifier = new javax.net.ssl.HostnameVerifier(){ + public boolean verify(String hostname, javax.net.ssl.SSLSession sslSession) { + return hostname.equals("localhost"); + } + }; private Socket socket; @@ -74,6 +71,7 @@ public class SSLConnectionTest extends Connection { Socket.Options opts = createOptions(); opts.sslContext = createSSLContext(); + opts.hostnameVerifier = SSLConnectionTest.hostnameVerifier; socket = new Socket(opts); socket.on(Socket.EVENT_OPEN, new Emitter.Listener() { @Override @@ -98,6 +96,7 @@ public class SSLConnectionTest extends Connection { Socket.Options opts = createOptions(); opts.sslContext = createSSLContext(); + opts.hostnameVerifier = SSLConnectionTest.hostnameVerifier; socket = new Socket(opts); socket.on(Socket.EVENT_OPEN, new Emitter.Listener() { @Override @@ -127,7 +126,9 @@ public class SSLConnectionTest extends Connection { final BlockingQueue values = new LinkedBlockingQueue(); Socket.setDefaultSSLContext(createSSLContext()); - socket = new Socket(createOptions()); + Socket.Options opts = createOptions(); + opts.hostnameVerifier = SSLConnectionTest.hostnameVerifier; + socket = new Socket(opts); socket.on(Socket.EVENT_OPEN, new Emitter.Listener() { @Override public void call(Object... args) {