Skip to content

Commit c817af5

Browse files
author
Yu-Hsuan Lin
committed
Options for inject okhttp Call/WebSocket factory
1 parent 80535c6 commit c817af5

File tree

9 files changed

+184
-268
lines changed

9 files changed

+184
-268
lines changed

README.md

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -94,14 +94,19 @@ socket.on(Socket.EVENT_OPEN, new Emitter.Listener() {
9494
Use custom SSL settings:
9595

9696
```java
97+
OkHttpClient okHttpClient = new OkHttpClient.Builder()
98+
.hostnameVerifier(myHostnameVerifier)
99+
.sslSocketFactory(mySSLContext.getSocketFactory(), myX509TrustManager)
100+
.build();
101+
97102
// default SSLContext for all sockets
98-
Socket.setDefaultSSLContext(mySSLContext);
99-
Socket.setDefaultHostnameVerifier(myHostnameVerifier);
103+
Socket.setDefaultOkHttpWebSocketFactory(okHttpClient);
104+
Socket.setDefaultOkHttpCallFactory(okHttpClient);
100105

101106
// set as an option
102107
opts = new Socket.Options();
103-
opts.sslContext = mySSLContext;
104-
opts.hostnameVerifier = myHostnameVerifier;
108+
opts.callFactory = okHttpClient;
109+
opts.webSocketFactory = okHttpClient;
105110
socket = new Socket(opts);
106111
```
107112

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@
4949
<dependency>
5050
<groupId>com.squareup.okhttp3</groupId>
5151
<artifactId>okhttp</artifactId>
52-
<version>3.5.0</version>
52+
<version>3.7.0</version>
5353
</dependency>
5454
<dependency>
5555
<groupId>org.json</groupId>

src/main/java/io/socket/engineio/client/Socket.java

Lines changed: 41 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,31 @@
11
package io.socket.engineio.client;
22

3-
import io.socket.emitter.Emitter;
4-
import io.socket.engineio.client.transports.Polling;
5-
import io.socket.engineio.client.transports.PollingXHR;
6-
import io.socket.engineio.client.transports.WebSocket;
7-
import io.socket.engineio.parser.Packet;
8-
import io.socket.engineio.parser.Parser;
9-
import io.socket.parseqs.ParseQS;
10-
import io.socket.thread.EventThread;
113
import org.json.JSONException;
124

13-
import javax.net.ssl.HostnameVerifier;
14-
import javax.net.ssl.SSLContext;
15-
import java.net.Proxy;
165
import java.net.URI;
176
import java.net.URISyntaxException;
18-
import java.util.*;
7+
import java.util.ArrayList;
8+
import java.util.Arrays;
9+
import java.util.HashMap;
10+
import java.util.LinkedList;
11+
import java.util.List;
12+
import java.util.Map;
1913
import java.util.concurrent.Executors;
2014
import java.util.concurrent.Future;
2115
import java.util.concurrent.ScheduledExecutorService;
2216
import java.util.concurrent.TimeUnit;
2317
import java.util.logging.Logger;
2418

19+
import io.socket.emitter.Emitter;
20+
import io.socket.engineio.client.transports.Polling;
21+
import io.socket.engineio.client.transports.PollingXHR;
22+
import io.socket.engineio.client.transports.WebSocket;
23+
import io.socket.engineio.parser.Packet;
24+
import io.socket.engineio.parser.Parser;
25+
import io.socket.parseqs.ParseQS;
26+
import io.socket.thread.EventThread;
27+
import okhttp3.OkHttpClient;
28+
2529

2630
/**
2731
* The socket class for Event.IO Client.
@@ -98,8 +102,9 @@ public String toString() {
98102

99103
private static boolean priorWebsocketSuccess = false;
100104

101-
private static SSLContext defaultSSLContext;
102-
private static HostnameVerifier defaultHostnameVerifier;
105+
private static okhttp3.WebSocket.Factory defaultWebSocketFactory;
106+
private static okhttp3.Call.Factory defaultCallFactory;
107+
private static OkHttpClient defaultOkHttpClient;
103108

104109
private boolean secure;
105110
private boolean upgrade;
@@ -122,11 +127,8 @@ public String toString() {
122127
/*package*/ Transport transport;
123128
private Future pingTimeoutTimer;
124129
private Future pingIntervalTimer;
125-
private SSLContext sslContext;
126-
private HostnameVerifier hostnameVerifier;
127-
public Proxy proxy;
128-
public String proxyLogin;
129-
public String proxyPassword;
130+
private okhttp3.WebSocket.Factory webSocketFactory;
131+
private okhttp3.Call.Factory callFactory;
130132

131133
private ReadyState readyState;
132134
private ScheduledExecutorService heartbeatScheduler;
@@ -190,7 +192,6 @@ public Socket(Options opts) {
190192
opts.port = this.secure ? 443 : 80;
191193
}
192194

193-
this.sslContext = opts.sslContext != null ? opts.sslContext : defaultSSLContext;
194195
this.hostname = opts.hostname != null ? opts.hostname : "localhost";
195196
this.port = opts.port;
196197
this.query = opts.query != null ?
@@ -203,18 +204,28 @@ public Socket(Options opts) {
203204
opts.transports : new String[]{Polling.NAME, WebSocket.NAME}));
204205
this.policyPort = opts.policyPort != 0 ? opts.policyPort : 843;
205206
this.rememberUpgrade = opts.rememberUpgrade;
206-
this.hostnameVerifier = opts.hostnameVerifier != null ? opts.hostnameVerifier : defaultHostnameVerifier;
207-
this.proxy = opts.proxy;
208-
this.proxyLogin = opts.proxyLogin;
209-
this.proxyPassword = opts.proxyPassword;
207+
this.callFactory = opts.callFactory != null ? opts.callFactory : defaultCallFactory;
208+
this.webSocketFactory = opts.webSocketFactory != null ? opts.webSocketFactory : defaultWebSocketFactory;
209+
if (callFactory == null) {
210+
if (defaultOkHttpClient == null) {
211+
defaultOkHttpClient = new OkHttpClient();
212+
}
213+
callFactory = defaultOkHttpClient;
214+
}
215+
if (webSocketFactory == null) {
216+
if (defaultOkHttpClient == null) {
217+
defaultOkHttpClient = new OkHttpClient();
218+
}
219+
webSocketFactory = defaultOkHttpClient;
220+
}
210221
}
211222

212-
public static void setDefaultSSLContext(SSLContext sslContext) {
213-
defaultSSLContext = sslContext;
223+
public static void setDefaultOkHttpWebSocketFactory(okhttp3.WebSocket.Factory factory) {
224+
defaultWebSocketFactory = factory;
214225
}
215226

216-
public static void setDefaultHostnameVerifier(HostnameVerifier hostnameVerifier) {
217-
defaultHostnameVerifier = hostnameVerifier;
227+
public static void setDefaultOkHttpCallFactory(okhttp3.Call.Factory factory) {
228+
defaultCallFactory = factory;
218229
}
219230

220231
/**
@@ -262,7 +273,6 @@ private Transport createTransport(String name) {
262273
}
263274

264275
Transport.Options opts = new Transport.Options();
265-
opts.sslContext = this.sslContext;
266276
opts.hostname = this.hostname;
267277
opts.port = this.port;
268278
opts.secure = this.secure;
@@ -272,10 +282,8 @@ private Transport createTransport(String name) {
272282
opts.timestampParam = this.timestampParam;
273283
opts.policyPort = this.policyPort;
274284
opts.socket = this;
275-
opts.hostnameVerifier = this.hostnameVerifier;
276-
opts.proxy = this.proxy;
277-
opts.proxyLogin = this.proxyLogin;
278-
opts.proxyPassword = this.proxyPassword;
285+
opts.callFactory = this.callFactory;
286+
opts.webSocketFactory = this.webSocketFactory;
279287

280288
Transport transport;
281289
if (WebSocket.NAME.equals(name)) {

src/main/java/io/socket/engineio/client/Transport.java

Lines changed: 10 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,15 @@
11
package io.socket.engineio.client;
22

33

4+
import java.util.Map;
5+
46
import io.socket.emitter.Emitter;
57
import io.socket.engineio.parser.Packet;
68
import io.socket.engineio.parser.Parser;
79
import io.socket.thread.EventThread;
810
import io.socket.utf8.UTF8Exception;
9-
10-
import javax.net.ssl.HostnameVerifier;
11-
import javax.net.ssl.SSLContext;
12-
import java.net.Proxy;
13-
import java.util.Map;
11+
import okhttp3.Call;
12+
import okhttp3.WebSocket;
1413

1514
public abstract class Transport extends Emitter {
1615

@@ -41,14 +40,10 @@ public String toString() {
4140
protected String path;
4241
protected String hostname;
4342
protected String timestampParam;
44-
protected SSLContext sslContext;
4543
protected Socket socket;
46-
protected HostnameVerifier hostnameVerifier;
47-
protected Proxy proxy;
48-
protected String proxyLogin;
49-
protected String proxyPassword;
50-
5144
protected ReadyState readyState;
45+
protected WebSocket.Factory webSocketFactory;
46+
protected Call.Factory callFactory;
5247

5348
public Transport(Options opts) {
5449
this.path = opts.path;
@@ -58,12 +53,9 @@ public Transport(Options opts) {
5853
this.query = opts.query;
5954
this.timestampParam = opts.timestampParam;
6055
this.timestampRequests = opts.timestampRequests;
61-
this.sslContext = opts.sslContext;
6256
this.socket = opts.socket;
63-
this.hostnameVerifier = opts.hostnameVerifier;
64-
this.proxy = opts.proxy;
65-
this.proxyLogin = opts.proxyLogin;
66-
this.proxyPassword = opts.proxyPassword;
57+
this.webSocketFactory = opts.webSocketFactory;
58+
this.callFactory = opts.callFactory;
6759
}
6860

6961
protected Transport onError(String msg, Exception desc) {
@@ -156,11 +148,8 @@ public static class Options {
156148
public int port = -1;
157149
public int policyPort = -1;
158150
public Map<String, String> query;
159-
public SSLContext sslContext;
160-
public HostnameVerifier hostnameVerifier;
161151
protected Socket socket;
162-
public Proxy proxy;
163-
public String proxyLogin;
164-
public String proxyPassword;
152+
public WebSocket.Factory webSocketFactory;
153+
public Call.Factory callFactory;
165154
}
166155
}

0 commit comments

Comments
 (0)