Skip to content

Commit f8a0d48

Browse files
committed
Removed json-simple library usages
1 parent 2a60349 commit f8a0d48

3 files changed

Lines changed: 85 additions & 22 deletions

File tree

engine.io-server/src/main/java/io/socket/engineio/server/EngineIoServer.java

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
package io.socket.engineio.server;
22

3-
import io.socket.engineio.server.json.JSONObject;
43
import io.socket.engineio.server.parser.Parser;
54
import io.socket.engineio.server.transport.Polling;
65
import io.socket.engineio.server.transport.WebSocket;
6+
import io.socket.engineio.server.utils.JsonUtils;
77
import io.socket.engineio.server.utils.ParseQS;
88
import io.socket.engineio.server.utils.ServerYeast;
99

@@ -39,6 +39,8 @@ public interface HandshakeInterceptor {
3939
boolean intercept(Map<String, String> query, Map<String, List<String>> headers);
4040
}
4141

42+
private static final String ERROR_JSON = "{\"code\": %d, \"message\": \"%s\"}";
43+
4244
private final Map<String, EngineIoSocket> mClients = new ConcurrentHashMap<>();
4345
private final EngineIoServerOptions mOptions;
4446
private final HashSet<String> mAllowedCorsOrigins;
@@ -231,19 +233,17 @@ private void sendErrorMessage(HttpServletResponse response,
231233
response.setCharacterEncoding(StandardCharsets.UTF_8.name());
232234

233235
if(code != null) {
234-
final JSONObject jsonObject = new JSONObject();
235-
jsonObject.put("code", code.getCode());
236-
jsonObject.put("message", code.getMessage());
237-
238236
response.setStatus(400);
239-
response.getWriter().write(JSONObject.toJSONString(jsonObject));
237+
response.getWriter().write(String.format(
238+
ERROR_JSON,
239+
code.getCode(),
240+
JsonUtils.escape(code.getMessage())));
240241
} else {
241-
final JSONObject jsonObject = new JSONObject();
242-
jsonObject.put("code", ServerErrors.FORBIDDEN.getCode());
243-
jsonObject.put("message", ServerErrors.FORBIDDEN.getMessage());
244-
245242
response.setStatus(403);
246-
response.getWriter().write(JSONObject.toJSONString(jsonObject));
243+
response.getWriter().write(String.format(
244+
ERROR_JSON,
245+
ServerErrors.FORBIDDEN.getCode(),
246+
JsonUtils.escape(ServerErrors.FORBIDDEN.getMessage())));
247247
}
248248
}
249249

engine.io-server/src/main/java/io/socket/engineio/server/EngineIoSocket.java

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
package io.socket.engineio.server;
22

3-
import io.socket.engineio.server.json.JSONArray;
4-
import io.socket.engineio.server.json.JSONObject;
53
import io.socket.engineio.server.parser.Packet;
64
import io.socket.engineio.server.transport.Polling;
75
import io.socket.engineio.server.transport.WebSocket;
6+
import io.socket.engineio.server.utils.JsonUtils;
87

98
import javax.servlet.http.HttpServletRequest;
109
import javax.servlet.http.HttpServletResponse;
@@ -31,6 +30,10 @@ public interface SocketedListener {
3130
add(new Packet<>(Packet.NOOP));
3231
}};
3332

33+
private static final String EMPTY_UPGRADES = JsonUtils.toJson(new String[]{});
34+
private static final String WEBSOCKET_UPGRADES = JsonUtils.toJson(new String[] { WebSocket.NAME });
35+
private static final String HANDSHAKE_JSON = "{\"sid\": \"%s\", \"upgrades\": %s, \"pingInterval\": %d, \"pingTimeout\": %d}";
36+
3437
private final String mSid;
3538
private final int mProtocolVersion;
3639
private final EngineIoServer mServer;
@@ -326,17 +329,20 @@ private void clearTransport() {
326329
private void onOpen() {
327330
mReadyState = ReadyState.OPEN;
328331

329-
JSONArray upgrades = new JSONArray();
330-
upgrades.add(WebSocket.NAME);
331-
332-
JSONObject handshakePacket = new JSONObject();
333-
handshakePacket.put("sid", mSid);
334-
handshakePacket.put("upgrades", upgrades);
335-
handshakePacket.put("pingInterval", mServer.getOptions().getPingInterval());
336-
handshakePacket.put("pingTimeout", mServer.getOptions().getPingTimeout());
332+
final String upgrades;
333+
if (mTransport.getName().equals(Polling.NAME)) {
334+
upgrades = WEBSOCKET_UPGRADES;
335+
} else {
336+
upgrades = EMPTY_UPGRADES;
337+
}
337338

338339
Packet<String> openPacket = new Packet<>(Packet.OPEN);
339-
openPacket.data = JSONObject.toJSONString(handshakePacket);
340+
openPacket.data = String.format(
341+
HANDSHAKE_JSON,
342+
JsonUtils.escape(mSid),
343+
upgrades,
344+
mServer.getOptions().getPingInterval(),
345+
mServer.getOptions().getPingTimeout());
340346

341347
sendPacket(openPacket);
342348

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
package io.socket.engineio.server.utils;
2+
3+
import java.util.Arrays;
4+
import java.util.Locale;
5+
6+
public interface JsonUtils {
7+
8+
/**
9+
* Replacements for the first 255 characters
10+
*/
11+
String[] REPLACEMENTS = new String[] {
12+
"\\u0000", "\\u0001", "\\u0002", "\\u0003", "\\u0004", "\\u0005", "\\u0006", "\\u0007", "\\u0008", "\\u0009", "\\u000A", "\\u000B", "\\u000C", "\\u000D", "\\u000E", "\\u000F",
13+
"\\u0010", "\\u0011", "\\u0012", "\\u0013", "\\u0014", "\\u0015", "\\u0016", "\\u0017", "\\u0018", "\\u0019", "\\u001A", "\\u001B", "\\u001C", "\\u001D", "\\u001E", "\\u001F",
14+
null, null, "\\\"", null, null, null, null, null, null, null, null, null, null, null, null, null,
15+
null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
16+
null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
17+
null, null, null, null, null, null, null, null, null, null, null, null, "\\\\", null, null, null,
18+
null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
19+
null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
20+
};
21+
22+
String EMPTY_ARRAY = "[]";
23+
24+
static String toJson(String[] array) {
25+
if (array.length <= 0) {
26+
return EMPTY_ARRAY;
27+
}
28+
29+
return '[' +
30+
String.join(",", Arrays.stream(array).map(s -> "\"" + escape(s) + "\"").toArray(String[]::new)) +
31+
']';
32+
}
33+
34+
static String escape(String input) {
35+
if (input == null) {
36+
return null;
37+
}
38+
39+
final StringBuilder sb = new StringBuilder(input.length());
40+
for (int i = 0; i < input.length(); i++) {
41+
final char ch = input.charAt(i);
42+
if (ch < 0x80) {
43+
final String replacement = REPLACEMENTS[ch];
44+
if (replacement != null) {
45+
sb.append(replacement);
46+
continue;
47+
}
48+
} else if (ch < 0x100) {
49+
sb.append("\\u00").append(Integer.toHexString(ch).toLowerCase(Locale.ROOT));
50+
continue;
51+
}
52+
53+
sb.append(ch);
54+
}
55+
return sb.toString();
56+
}
57+
}

0 commit comments

Comments
 (0)