diff --git a/src/main/java/com/corundumstudio/socketio/JsonSupportWrapper.java b/src/main/java/com/corundumstudio/socketio/JsonSupportWrapper.java index 879e4a4..97958bb 100644 --- a/src/main/java/com/corundumstudio/socketio/JsonSupportWrapper.java +++ b/src/main/java/com/corundumstudio/socketio/JsonSupportWrapper.java @@ -73,11 +73,6 @@ class JsonSupportWrapper implements JsonSupport { delegate.removeEventMapping(namespaceName, eventName); } - @Override - public void writeJsonpValue(ByteBufOutputStream out, Object value) throws IOException { - delegate.writeJsonpValue(out, value); - } - @Override public List getArrays() { return delegate.getArrays(); diff --git a/src/main/java/com/corundumstudio/socketio/handler/EncoderHandler.java b/src/main/java/com/corundumstudio/socketio/handler/EncoderHandler.java index 8832dde..71fd72d 100644 --- a/src/main/java/com/corundumstudio/socketio/handler/EncoderHandler.java +++ b/src/main/java/com/corundumstudio/socketio/handler/EncoderHandler.java @@ -212,7 +212,7 @@ public class EncoderHandler extends ChannelOutboundHandlerAdapter { } final ByteBuf out = encoder.allocateBuffer(ctx.alloc()); - encoder.encodePacket(packet, out, ctx.alloc(), true, false); + encoder.encodePacket(packet, out, ctx.alloc(), true); WebSocketFrame res = new TextWebSocketFrame(out); if (log.isTraceEnabled()) { diff --git a/src/main/java/com/corundumstudio/socketio/protocol/JacksonJsonSupport.java b/src/main/java/com/corundumstudio/socketio/protocol/JacksonJsonSupport.java index 1730e8e..e7c2df3 100644 --- a/src/main/java/com/corundumstudio/socketio/protocol/JacksonJsonSupport.java +++ b/src/main/java/com/corundumstudio/socketio/protocol/JacksonJsonSupport.java @@ -325,7 +325,6 @@ public class JacksonJsonSupport implements JsonSupport { private final ThreadLocal namespaceClass = new ThreadLocal(); private final ThreadLocal> currentAckClass = new ThreadLocal>(); private final ObjectMapper objectMapper = new ObjectMapper(); - private final ObjectMapper jsonpObjectMapper = new ObjectMapper(); private final EventDeserializer eventDeserializer = new EventDeserializer(); private final AckArgsDeserializer ackArgsDeserializer = new AckArgsDeserializer(); @@ -334,11 +333,8 @@ public class JacksonJsonSupport implements JsonSupport { public JacksonJsonSupport(Module... modules) { if (modules != null && modules.length > 0) { objectMapper.registerModules(modules); - jsonpObjectMapper.registerModules(modules); } init(objectMapper); - init(jsonpObjectMapper); - jsonpObjectMapper.getFactory().setCharacterEscapes(new HTMLCharacterEscapes()); } protected void init(ObjectMapper objectMapper) { @@ -382,12 +378,6 @@ public class JacksonJsonSupport implements JsonSupport { objectMapper.writeValue(out, value); } - @Override - public void writeJsonpValue(ByteBufOutputStream out, Object value) throws IOException { - modifier.getSerializer().clear(); - jsonpObjectMapper.writeValue(out, value); - } - @Override public List getArrays() { return modifier.getSerializer().getArrays(); diff --git a/src/main/java/com/corundumstudio/socketio/protocol/JsonSupport.java b/src/main/java/com/corundumstudio/socketio/protocol/JsonSupport.java index 92b3d32..f9d0d48 100644 --- a/src/main/java/com/corundumstudio/socketio/protocol/JsonSupport.java +++ b/src/main/java/com/corundumstudio/socketio/protocol/JsonSupport.java @@ -31,8 +31,6 @@ import com.corundumstudio.socketio.AckCallback; */ public interface JsonSupport { - void writeJsonpValue(ByteBufOutputStream out, Object value) throws IOException; - AckArgs readAckArgs(ByteBufInputStream src, AckCallback callback) throws IOException; T readValue(String namespaceName, ByteBufInputStream src, Class valueType) throws IOException; diff --git a/src/main/java/com/corundumstudio/socketio/protocol/PacketEncoder.java b/src/main/java/com/corundumstudio/socketio/protocol/PacketEncoder.java index 1626efa..65ac0cd 100644 --- a/src/main/java/com/corundumstudio/socketio/protocol/PacketEncoder.java +++ b/src/main/java/com/corundumstudio/socketio/protocol/PacketEncoder.java @@ -33,12 +33,11 @@ import com.corundumstudio.socketio.Configuration; public class PacketEncoder { - private static final Pattern QUOTES_PATTERN = Pattern.compile("\"", Pattern.LITERAL); private static final byte[] BINARY_HEADER = "b4".getBytes(CharsetUtil.UTF_8); private static final byte[] B64_DELIMITER = new byte[] {':'}; private static final byte[] JSONP_HEAD = "___eio[".getBytes(CharsetUtil.UTF_8); - private static final byte[] JSONP_START = "](\"".getBytes(CharsetUtil.UTF_8); - private static final byte[] JSONP_END = "\");".getBytes(CharsetUtil.UTF_8); + private static final byte[] JSONP_START = "]('".getBytes(CharsetUtil.UTF_8); + private static final byte[] JSONP_END = "');".getBytes(CharsetUtil.UTF_8); private final JsonSupport jsonSupport; private final Configuration configuration; @@ -72,14 +71,9 @@ public class PacketEncoder { } ByteBuf packetBuf = allocateBuffer(allocator); - encodePacket(packet, packetBuf, allocator, true, jsonpMode); + encodePacket(packet, packetBuf, allocator, true); int packetSize = packetBuf.writerIndex(); - if (jsonpMode) { - // scan for \\\" - int count = count(packetBuf, Unpooled.copiedBuffer("\\\"", CharsetUtil.UTF_8)); - packetSize -= count; - } buf.writeBytes(toChars(packetSize)); buf.writeBytes(B64_DELIMITER); @@ -106,7 +100,7 @@ public class PacketEncoder { String packet = buf.toString(CharsetUtil.UTF_8); buf.release(); // TODO optimize - packet = QUOTES_PATTERN.matcher(packet).replaceAll("\\\\\""); + packet = packet.replace("\\", "\\\\"); packet = new String(packet.getBytes(CharsetUtil.UTF_8), CharsetUtil.ISO_8859_1); out.writeBytes(packet.getBytes(CharsetUtil.UTF_8)); @@ -121,7 +115,7 @@ public class PacketEncoder { if (packet == null || i == limit) { break; } - encodePacket(packet, buffer, allocator, false, false); + encodePacket(packet, buffer, allocator, false); i++; @@ -221,7 +215,7 @@ public class PacketEncoder { return res; } - public void encodePacket(Packet packet, ByteBuf buffer, ByteBufAllocator allocator, boolean binary, boolean jsonp) throws IOException { + public void encodePacket(Packet packet, ByteBuf buffer, ByteBufAllocator allocator, boolean binary) throws IOException { ByteBuf buf = buffer; if (!binary) { buf = allocateBuffer(allocator); @@ -239,11 +233,7 @@ public class PacketEncoder { case OPEN: { ByteBufOutputStream out = new ByteBufOutputStream(buf); - if (jsonp) { - jsonSupport.writeJsonpValue(out, packet.getData()); - } else { - jsonSupport.writeValue(out, packet.getData()); - } + jsonSupport.writeValue(out, packet.getData()); break; } @@ -267,11 +257,7 @@ public class PacketEncoder { List args = packet.getData(); values.addAll(args); ByteBufOutputStream out = new ByteBufOutputStream(encBuf); - if (jsonp) { - jsonSupport.writeJsonpValue(out, values); - } else { - jsonSupport.writeValue(out, values); - } + jsonSupport.writeValue(out, values); if (!jsonSupport.getArrays().isEmpty()) { packet.initAttachments(jsonSupport.getArrays().size()); @@ -329,16 +315,6 @@ public class PacketEncoder { } } - private int count(ByteBuf buffer, ByteBuf searchValue) { - int count = 0; - for (int i = 0; i < buffer.readableBytes(); i++) { - if (isValueFound(buffer, i, searchValue)) { - count++; - } - } - return count; - } - public static int find(ByteBuf buffer, ByteBuf searchValue) { for (int i = buffer.readerIndex(); i < buffer.readerIndex() + buffer.readableBytes(); i++) { if (isValueFound(buffer, i, searchValue)) {