Fixed additional JSON escaps and added tests
This commit is contained in:
parent
86296df176
commit
670f95689d
5 changed files with 57 additions and 12 deletions
|
|
@ -200,6 +200,7 @@ public class MqttBroker extends ThreadedTCPNetworkServer {
|
|||
private Socket socket;
|
||||
private BinaryStructInputStream in;
|
||||
private BinaryStructOutputStream out;
|
||||
private String clientId;
|
||||
|
||||
private boolean disconnected = false;
|
||||
/** A message that should be sent in case the connection to client is abnormally disconnected */
|
||||
|
|
@ -217,6 +218,7 @@ public class MqttBroker extends ThreadedTCPNetworkServer {
|
|||
public MqttConnectionThread(MqttBroker b, Socket s) throws IOException {
|
||||
this(b);
|
||||
socket = s;
|
||||
clientId = socket.getInetAddress().toString();
|
||||
|
||||
InputStream baseInputstream = socket.getInputStream();
|
||||
if (!baseInputstream.markSupported())
|
||||
|
|
@ -352,7 +354,7 @@ public class MqttBroker extends ThreadedTCPNetworkServer {
|
|||
|
||||
// Close connection
|
||||
default:
|
||||
logger.warning("[" + socket.getInetAddress() + "] Received unknown packet type: " + packet.type + " (" + packet.getClass() + ")");
|
||||
logger.warning("[" + clientId + "] Received unknown packet type: " + packet.type + " (" + packet.getClass() + ")");
|
||||
sendWillPacket();
|
||||
/* FALLTHROUGH */
|
||||
case MqttPacketHeader.PACKET_TYPE_DISCONNECT:
|
||||
|
|
@ -367,7 +369,7 @@ public class MqttBroker extends ThreadedTCPNetworkServer {
|
|||
if (publishPacket.getFlagQoS() != 0)
|
||||
throw new UnsupportedOperationException("QoS larger then 0 not supported.");
|
||||
|
||||
logger.finer("[" + socket.getInetAddress() + "] Publishing to topic: " + publishPacket.topicName);
|
||||
logger.finer("[" + clientId + "] Publishing to topic: " + publishPacket.topicName);
|
||||
broker.publish(publishPacket.topicName, publishPacket.payload);
|
||||
}
|
||||
|
||||
|
|
@ -376,7 +378,7 @@ public class MqttBroker extends ThreadedTCPNetworkServer {
|
|||
subscribeAckPacket.packetId = subscribePacket.packetId;
|
||||
|
||||
for (MqttSubscribePayload payload : subscribePacket.payloads) {
|
||||
logger.finer("[" + socket.getInetAddress() + "] Subscribing to topic: " + payload.topicFilter);
|
||||
logger.finer("[" + clientId + "] Subscribing to topic: " + payload.topicFilter);
|
||||
broker.subscribe(payload.topicFilter, this);
|
||||
|
||||
// Prepare response
|
||||
|
|
@ -390,7 +392,7 @@ public class MqttBroker extends ThreadedTCPNetworkServer {
|
|||
|
||||
private void handleUnsubscribe(MqttPacketUnsubscribe unsubscribePacket) throws IOException {
|
||||
for (MqttUnsubscribePayload payload : unsubscribePacket.payloads) {
|
||||
logger.finer("[" + socket.getInetAddress() + "] Unsubscribing from topic: " + payload.topicFilter);
|
||||
logger.finer("[" + clientId + "] Unsubscribing from topic: " + payload.topicFilter);
|
||||
broker.unsubscribe(payload.topicFilter, this);
|
||||
}
|
||||
|
||||
|
|
@ -408,7 +410,7 @@ public class MqttBroker extends ThreadedTCPNetworkServer {
|
|||
|
||||
private void sendWillPacket() throws IOException {
|
||||
if (willPacket != null) {
|
||||
logger.fine("[" + socket.getInetAddress() + "] Publishing will packet.");
|
||||
logger.fine("[" + clientId + "] Publishing will packet.");
|
||||
sendPacket(willPacket);
|
||||
willPacket = null;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -128,15 +128,19 @@ public class JSONParser extends Parser {
|
|||
}
|
||||
end.i = CONTINUE;
|
||||
break;
|
||||
// Parse String
|
||||
// TODO: Support double backslash escaping
|
||||
// Parse quoted String
|
||||
case '\"':
|
||||
case '\'':
|
||||
root = new DataNode(DataType.String);
|
||||
StringBuilder str = new StringBuilder();
|
||||
int c2;
|
||||
while ((c2=in.read()) >= 0 && c2 != c)
|
||||
while ((c2=in.read()) >= 0 && c2 != c) {
|
||||
// Ignore the character check for next char as current char is \ escape
|
||||
if (c2 == '\\')
|
||||
c2 = in.read();
|
||||
|
||||
str.append((char) c2);
|
||||
}
|
||||
root.set(str.toString());
|
||||
break;
|
||||
// Parse unknown type
|
||||
|
|
@ -147,7 +151,10 @@ public class JSONParser extends Parser {
|
|||
end.i = END_WITH_VALUE;
|
||||
break;
|
||||
}
|
||||
tmp.append((char)c);
|
||||
if (c == '\\')
|
||||
c = in.read();
|
||||
|
||||
tmp.append((char) c);
|
||||
}
|
||||
// Check what type of type the data is
|
||||
String data = tmp.toString().trim();
|
||||
|
|
|
|||
|
|
@ -34,11 +34,11 @@ import java.io.Writer;
|
|||
import java.util.Iterator;
|
||||
|
||||
/**
|
||||
* Writes An JSONNode to an String or stream
|
||||
* Writes An JSONNode to a String or stream
|
||||
*
|
||||
* @author Ziver
|
||||
*/
|
||||
public class JSONWriter{
|
||||
public class JSONWriter {
|
||||
private PrintWriter out;
|
||||
|
||||
/**
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue