diff --git a/parser/docs/MQTT_V3.1_Protocol_Specific.pdf b/parser/docs/MQTT_V3.1_Protocol_Specific.pdf
deleted file mode 100644
index 932ce4a3..00000000
Binary files a/parser/docs/MQTT_V3.1_Protocol_Specific.pdf and /dev/null differ
diff --git a/parser/docs/Notes.txt b/parser/docs/Notes.txt
deleted file mode 100644
index 83887718..00000000
--- a/parser/docs/Notes.txt
+++ /dev/null
@@ -1,64 +0,0 @@
-Per Mina
- - per gestire l'inattività su una sessione usare
- acceptor.getSessionConfig().setIdleTime( IdleStatus.BOTH_IDLE, 10 );
- e
- nell'implementazione del IoHandlerAdapter ridefinire il metodo
- public void sessionIdle( IoSession session, IdleStatus status ) throws Exception
-
-
-
-Glossario:
-
- QOS: presente solo per i messaggi PUBLISH, definisce 3 livelli
- QoS0: at most once, cioe' viene notificato al piu' uno (il che' significa che
- potrebbe anche non essere notificato) equivalente a messaggi non persistenti di JMS
- QoS1: at least once, delivery equivalente ai messaggi persistenti di JMS
- Q0S2: exactly once, delivery assicurato equivalente ai messagi persistenti di JMS + DUPS_OK_ACKNOWLEDGE
-
-
- RETAIN: Usato solo per i messaggi di PUBLISH, se true dice di persistere il messaggio dopo esser stato notificato a tutti
- i sottoscritori del topic. Se in un secondo momento un cliente si sottoscrive ad un
- messaggio pubblicato con RETAIN = 1 allora anche il messaggio di notifica dovrà avere RETAIN = 1,
- altrimenti non accade nulla. I messaggi notificati al momento del PUBLISH non hanno flag RETAIN = 1
- serve solo per dire ai posteri che il messaggio che stanno ricevendo non è "live".
- Un server PUO' eliminare un messaggio marcato con RETAIN se ne arriva un'altro sullo stesso topic con lunghezza = 0 e RETAIN = 1.
-
- CLEAN SESSION: è un flag disponibile per il solo messaggio di CONNECT.
- Se = 0 allora il server DEVE memorizzare(mantenere) le sottoscrizioni del client
- dopo che si sia disconnesso. Questo prevede di continuare a salvare i messaggi
- QOS1 e QOS2 per i topic sottoscritti cosicche' possano essere consegnati quando
- il client si riconnetterà. Il server DEVE inoltre mantenere lo stato dei messaggi
- che stavano per essere consegnati prima che la connessione fosse persa.
- Questa informazione DEVE esser mantenuta finchè il client si ricconnetta.
- Se flag = 1 allora il server DEVE scartare qualsiasi informazione precedentemente
- memorizzata sul client e trattare la connessione come "pulita".
- Il server DEVE anche scartare qualunque stato qualora il client di disconnetta.
- Solitamente, un client opererà o in un modo o nell'altro. La scelta dipenderà dall'applicazione.
- Un sessione cliente pulita non riceverà informazioni vecchie e DOVRA' ri-sottoscriversi
- ogni volta che si connette. Una sessione cliente NON pulita non perderà nessun messaggio di
- tipo QoS1 o QoS2 che sia stato pubblicato mentro esso era disconnesso. I messaggi
- di tipo QoS0 NON vengono mai salvati. Un server deve fornire un meccanismo di
- amministrazione per la pulizia delle informazione salvate su di un client e
- che possa essere usata qualora si sappia che il client non si riconnetterà.
-
-
-**** CONNECT ****
- C S
-CONNECT ->
- <- CONNACK
-
-**** PUBLISH ****
-A client PUBLISH a message on a server QoS 1:
-
- C S
-PUBLISH ->
- <- PUBACK
-
-A server send a PUBLISH notification to a client QoS 1:
- S C
-PUBLISH ->
- <- PUBACK
-
-
-
-
diff --git a/parser/pom.xml b/parser/pom.xml
deleted file mode 100644
index 371f930d..00000000
--- a/parser/pom.xml
+++ /dev/null
@@ -1,85 +0,0 @@
-
-
- 4.0.0
-
- ../
-
- moquette-parent
- org.dna.mqtt
- 0.4-SNAPSHOT
-
-
- moquette-mina-parser
- jar
-
- Moquette - MINA Parser
-
-
- UTF-8
-
-
-
-
- org.apache.mina
- mina-core
- ${mina-version}
-
-
-
- org.dna.mqtt
- moquette-parser-commons
- ${project.version}
-
-
-
- org.slf4j
- slf4j-log4j12
- 1.6.4
-
-
-
- junit
- junit
- 4.8.2
- test
-
-
-
-
- org.mockito
- mockito-core
- 1.9.0
- test
-
-
-
-
-
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
-
- 1.5
- 1.5
-
-
-
-
- org.apache.maven.plugins
- maven-surefire-plugin
-
-
- org/dna/mqtt/moquette/proto/TestUtils.java
- org/dna/mqtt/moquette/proto/TestUtils$*
-
-
-
-
-
-
-
-
-
-
diff --git a/parser/src/main/java/org/dna/mqtt/commons/MessageIDGenerator.java b/parser/src/main/java/org/dna/mqtt/commons/MessageIDGenerator.java
deleted file mode 100644
index 5a36570a..00000000
--- a/parser/src/main/java/org/dna/mqtt/commons/MessageIDGenerator.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package org.dna.mqtt.commons;
-
-import java.util.concurrent.atomic.AtomicInteger;
-
-/**
- *
- * @author andrea
- */
-public class MessageIDGenerator {
- private AtomicInteger m_current;
-
- public MessageIDGenerator() {
- //NB we start at -1 because the first incAndGet has to return 0
- m_current = new AtomicInteger(-1);
- }
-
- public int next() {
- return m_current.incrementAndGet();
- }
-}
diff --git a/parser/src/main/java/org/dna/mqtt/moquette/ConnectionException.java b/parser/src/main/java/org/dna/mqtt/moquette/ConnectionException.java
deleted file mode 100644
index 3ceecde9..00000000
--- a/parser/src/main/java/org/dna/mqtt/moquette/ConnectionException.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package org.dna.mqtt.moquette;
-
-/**
- *
- * @author andrea
- */
-public class ConnectionException extends MQTTException {
-
- public ConnectionException(String msg) {
- super(msg);
- }
-
- public ConnectionException(Throwable e) {
- super(e);
- }
-}
diff --git a/parser/src/main/java/org/dna/mqtt/moquette/PublishException.java b/parser/src/main/java/org/dna/mqtt/moquette/PublishException.java
deleted file mode 100644
index 7fbde985..00000000
--- a/parser/src/main/java/org/dna/mqtt/moquette/PublishException.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package org.dna.mqtt.moquette;
-
-/**
- *
- * @author andrea
- */
-public class PublishException extends ConnectionException {
-
- public PublishException(String msg) {
- super(msg);
- }
-
- public PublishException(Throwable e) {
- super(e);
- }
-}
diff --git a/parser/src/main/java/org/dna/mqtt/moquette/SubscribeException.java b/parser/src/main/java/org/dna/mqtt/moquette/SubscribeException.java
deleted file mode 100644
index 54443a2e..00000000
--- a/parser/src/main/java/org/dna/mqtt/moquette/SubscribeException.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package org.dna.mqtt.moquette;
-
-/**
- *
- * @author andrea
- */
-public class SubscribeException extends ConnectionException {
-
- public SubscribeException(String msg) {
- super(msg);
- }
-
- public SubscribeException(Throwable e) {
- super(e);
- }
-}
diff --git a/parser/src/main/java/org/dna/mqtt/moquette/proto/ConnAckDecoder.java b/parser/src/main/java/org/dna/mqtt/moquette/proto/ConnAckDecoder.java
deleted file mode 100644
index 4c62ff50..00000000
--- a/parser/src/main/java/org/dna/mqtt/moquette/proto/ConnAckDecoder.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package org.dna.mqtt.moquette.proto;
-
-import org.apache.mina.core.buffer.IoBuffer;
-import org.apache.mina.core.session.IoSession;
-import org.apache.mina.filter.codec.ProtocolDecoderOutput;
-import org.apache.mina.filter.codec.demux.MessageDecoderResult;
-import org.dna.mqtt.moquette.proto.messages.AbstractMessage;
-import org.dna.mqtt.moquette.proto.messages.ConnAckMessage;
-
-/**
- *
- * @author andrea
- */
-public class ConnAckDecoder extends MqttDecoder {
-
- public MessageDecoderResult decodable(IoSession session, IoBuffer in) {
- return Utils.checkDecodable(AbstractMessage.CONNACK, in);
- }
-
- public MessageDecoderResult decode(IoSession session, IoBuffer in, ProtocolDecoderOutput out) throws Exception {
- //Common decoding part
- ConnAckMessage message = new ConnAckMessage();
- if (decodeCommonHeader(message, in) == NEED_DATA) {
- return NEED_DATA;
- }
- //skip reserved byte
- in.skip(1);
-
- //read return code
- message.setReturnCode(in.get());
- out.write(message);
- return OK;
- }
-
-}
diff --git a/parser/src/main/java/org/dna/mqtt/moquette/proto/ConnAckEncoder.java b/parser/src/main/java/org/dna/mqtt/moquette/proto/ConnAckEncoder.java
deleted file mode 100644
index 7c2d4028..00000000
--- a/parser/src/main/java/org/dna/mqtt/moquette/proto/ConnAckEncoder.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package org.dna.mqtt.moquette.proto;
-
-import org.apache.mina.core.buffer.IoBuffer;
-import org.apache.mina.core.session.IoSession;
-import org.apache.mina.filter.codec.ProtocolEncoderOutput;
-import org.apache.mina.filter.codec.demux.MessageEncoder;
-import org.dna.mqtt.moquette.proto.messages.AbstractMessage;
-import org.dna.mqtt.moquette.proto.messages.ConnAckMessage;
-
-/**
- *
- * @author andrea
- */
-public class ConnAckEncoder implements MessageEncoder {
-
- public void encode(IoSession session, ConnAckMessage message, ProtocolEncoderOutput out) throws Exception {
- IoBuffer buff = IoBuffer.allocate(4);
- buff.put((byte) (AbstractMessage.CONNACK << 4));
- buff.put(Utils.encodeRemainingLength(2));
- buff.put((byte) 0);
- buff.put(message.getReturnCode()).flip();
- out.write(buff);
- }
-}
diff --git a/parser/src/main/java/org/dna/mqtt/moquette/proto/ConnectDecoder.java b/parser/src/main/java/org/dna/mqtt/moquette/proto/ConnectDecoder.java
deleted file mode 100644
index 408baffb..00000000
--- a/parser/src/main/java/org/dna/mqtt/moquette/proto/ConnectDecoder.java
+++ /dev/null
@@ -1,138 +0,0 @@
-package org.dna.mqtt.moquette.proto;
-
-import org.dna.mqtt.moquette.proto.messages.AbstractMessage;
-import org.dna.mqtt.moquette.proto.messages.ConnectMessage;
-import org.apache.mina.core.buffer.IoBuffer;
-import org.apache.mina.core.session.IoSession;
-import org.apache.mina.filter.codec.ProtocolDecoderOutput;
-import org.apache.mina.filter.codec.demux.MessageDecoderResult;
-
-/**
- * Decoder for the CONNECT message
- *
- * @author andrea
- */
-public class ConnectDecoder extends MqttDecoder {
-
- public MessageDecoderResult decodable(IoSession session, IoBuffer in) {
- return Utils.checkDecodable(AbstractMessage.CONNECT, in);
- }
-
- public MessageDecoderResult decode(IoSession session, IoBuffer in, ProtocolDecoderOutput out) throws Exception {
- //Common decoding part
- ConnectMessage message = new ConnectMessage();
- if (decodeCommonHeader(message, in) == NEED_DATA) {
- return NEED_DATA;
- }
- int remainingLength = message.getRemainingLength();
- int start = in.position();
-
- //Connect specific decoding part
- //ProtocolName 8 bytes
- if (in.remaining() < 12) {
- return NEED_DATA;
- }
- byte[] encProtoName = new byte[6];
- in.skip(2); //size, is 0x06
- in.get(encProtoName);
- String protoName = new String(encProtoName, "UTF-8");
- if (!"MQIsdp".equals(protoName)) {
- return NOT_OK;
- }
- message.setProtocolName(protoName);
-
- //ProtocolVersion 1 byte (value 0x03)
- message.setProcotolVersion(in.get());
-
- //Connection flag
- byte connFlags = in.get();
- boolean cleanSession = ((connFlags & 0x02) >> 1) == 1 ? true : false;
- boolean willFlag = ((connFlags & 0x04) >> 2) == 1 ? true : false;
- byte willQos = (byte) ((connFlags & 0x18) >> 3);
- if (willQos > 2) {
- return NOT_OK; //admitted values for willqos are 0, 1, 2
- }
- boolean willRetain = ((connFlags & 0x20) >> 5) == 1 ? true : false;
- boolean passwordFlag = ((connFlags & 0x40) >> 6) == 1 ? true : false;
- boolean userFlag = ((connFlags & 0x80) >> 7) == 1 ? true : false;
- //a password is true iff user is true.
- if (!userFlag && passwordFlag) {
- return NOT_OK;
- }
- message.setCleanSession(cleanSession);
- message.setWillFlag(willFlag);
- message.setWillQos(willQos);
- message.setWillRetain(willRetain);
- message.setPasswordFlag(passwordFlag);
- message.setUserFlag(userFlag);
-
- //Keep Alive timer 2 bytes
- int keepAlive = Utils.readWord(in);
- message.setKeepAlive(keepAlive);
-
- if (remainingLength == 12) {
- out.write(message);
- return OK;
- }
-
- //Decode the ClientID
- String clientID = Utils.decodeString(in);
- if (clientID == null) {
- return NEED_DATA;
- }
- message.setClientID(clientID);
-
- //Decode willTopic
- if (willFlag) {
- String willTopic = Utils.decodeString(in);
- if (willTopic == null) {
- return NEED_DATA;
- }
- message.setWillTopic(willTopic);
- }
-
- //Decode willMessage
- if (willFlag) {
- String willMessage = Utils.decodeString(in);
- if (willMessage == null) {
- return NEED_DATA;
- }
- message.setWillMessage(willMessage);
- }
-
- //Compatibility check wieth v3.0, remaining length has precedence over
- //the user and password flags
- int readed = in.position() - start;
- if (readed == remainingLength) {
- out.write(message);
- return OK;
- }
-
- //Decode username
- if (userFlag) {
- String userName = Utils.decodeString(in);
- if (userName == null) {
- return NEED_DATA;
- }
- message.setUsername(userName);
- }
-
- readed = in.position() - start;
- if (readed == remainingLength) {
- out.write(message);
- return OK;
- }
-
- //Decode password
- if (passwordFlag) {
- String password = Utils.decodeString(in);
- if (password == null) {
- return NEED_DATA;
- }
- message.setPassword(password);
- }
-
- out.write(message);
- return OK;
- }
-}
diff --git a/parser/src/main/java/org/dna/mqtt/moquette/proto/ConnectEncoder.java b/parser/src/main/java/org/dna/mqtt/moquette/proto/ConnectEncoder.java
deleted file mode 100644
index 871957d5..00000000
--- a/parser/src/main/java/org/dna/mqtt/moquette/proto/ConnectEncoder.java
+++ /dev/null
@@ -1,72 +0,0 @@
-package org.dna.mqtt.moquette.proto;
-
-import org.dna.mqtt.moquette.proto.messages.AbstractMessage;
-import org.dna.mqtt.moquette.proto.messages.ConnectMessage;
-import org.apache.mina.core.buffer.IoBuffer;
-import org.apache.mina.core.session.IoSession;
-import org.apache.mina.filter.codec.ProtocolEncoderOutput;
-import org.apache.mina.filter.codec.demux.MessageEncoder;
-
-/**
- *
- * @author andrea
- */
-public class ConnectEncoder implements MessageEncoder {
-
- public void encode(IoSession session, ConnectMessage message, ProtocolEncoderOutput out) throws Exception {
- IoBuffer staticHeaderBuff = IoBuffer.allocate(12);
- staticHeaderBuff.put(Utils.encodeString("MQIsdp"));
-
- //version
- staticHeaderBuff.put((byte)0x03);
-
- //connection flags and Strings
- byte connectionFlags = 0;
- if (message.isCleanSession()) {
- connectionFlags |= 0x02;
- }
- if (message.isWillFlag()) {
- connectionFlags |= 0x04;
- }
- connectionFlags |= ((message.getWillQos() & 0x03) << 3);
- if (message.isWillRetain()) {
- connectionFlags |= 0x020;
- }
- if (message.isPasswordFlag()) {
- connectionFlags |= 0x040;
- }
- if (message.isUserFlag()) {
- connectionFlags |= 0x080;
- }
- staticHeaderBuff.put(connectionFlags);
-
- //Keep alive timer
- Utils.writeWord(staticHeaderBuff, message.getKeepAlive());
- staticHeaderBuff.flip();
-
- //Variable part
- IoBuffer variableHeaderBuff = IoBuffer.allocate(12).setAutoExpand(true);
- if (message.getClientID() != null) {
- variableHeaderBuff.put(Utils.encodeString(message.getClientID()));
- if (message.isWillFlag()) {
- variableHeaderBuff.put(Utils.encodeString(message.getWillTopic()));
- variableHeaderBuff.put(Utils.encodeString(message.getWillMessage()));
- }
- if (message.isUserFlag() && message.getUsername() != null) {
- variableHeaderBuff.put(Utils.encodeString(message.getUsername()));
- if (message.isPasswordFlag() && message.getPassword() != null) {
- variableHeaderBuff.put(Utils.encodeString(message.getPassword()));
- }
- }
- }
- variableHeaderBuff.flip();
-
- int variableHeaderSize = variableHeaderBuff.remaining();
- IoBuffer buff = IoBuffer.allocate(14 + variableHeaderSize);
- buff.put((byte) (AbstractMessage.CONNECT << 4));
- buff.put(Utils.encodeRemainingLength(12 + variableHeaderSize));
- buff.put(staticHeaderBuff).put(variableHeaderBuff).flip();
-
- out.write(buff);
- }
-}
diff --git a/parser/src/main/java/org/dna/mqtt/moquette/proto/DisconnectDecoder.java b/parser/src/main/java/org/dna/mqtt/moquette/proto/DisconnectDecoder.java
deleted file mode 100644
index eac4904f..00000000
--- a/parser/src/main/java/org/dna/mqtt/moquette/proto/DisconnectDecoder.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package org.dna.mqtt.moquette.proto;
-
-import org.apache.mina.core.buffer.IoBuffer;
-import org.apache.mina.core.session.IoSession;
-import org.apache.mina.filter.codec.ProtocolDecoderOutput;
-import org.apache.mina.filter.codec.demux.MessageDecoderResult;
-import org.dna.mqtt.moquette.proto.messages.AbstractMessage;
-import org.dna.mqtt.moquette.proto.messages.DisconnectMessage;
-
-/**
- *
- * @author andrea
- */
-public class DisconnectDecoder extends MqttDecoder {
-
- public MessageDecoderResult decodable(IoSession session, IoBuffer in) {
- return Utils.checkDecodable(AbstractMessage.DISCONNECT, in);
- }
-
- public MessageDecoderResult decode(IoSession session, IoBuffer in, ProtocolDecoderOutput out) throws Exception {
- //Common decoding part
- DisconnectMessage message = new DisconnectMessage();
- if (decodeCommonHeader(message, in) == NEED_DATA) {
- return NEED_DATA;
- }
- out.write(message);
- return OK;
- }
-}
diff --git a/parser/src/main/java/org/dna/mqtt/moquette/proto/DisconnectEncoder.java b/parser/src/main/java/org/dna/mqtt/moquette/proto/DisconnectEncoder.java
deleted file mode 100644
index 0c25f531..00000000
--- a/parser/src/main/java/org/dna/mqtt/moquette/proto/DisconnectEncoder.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package org.dna.mqtt.moquette.proto;
-
-import org.apache.mina.core.buffer.IoBuffer;
-import org.apache.mina.core.session.IoSession;
-import org.apache.mina.filter.codec.ProtocolEncoderOutput;
-import org.apache.mina.filter.codec.demux.MessageEncoder;
-import org.dna.mqtt.moquette.proto.messages.AbstractMessage;
-import org.dna.mqtt.moquette.proto.messages.DisconnectMessage;
-
-/**
- *
- * @author andrea
- */
-public class DisconnectEncoder implements MessageEncoder {
-
- public void encode(IoSession session, DisconnectMessage message, ProtocolEncoderOutput out) throws Exception {
- IoBuffer buff = IoBuffer.allocate(2);
- buff.put((byte) (AbstractMessage.DISCONNECT << 4)).put((byte)0).flip();
- out.write(buff);
- }
-
-}
diff --git a/parser/src/main/java/org/dna/mqtt/moquette/proto/MQTTLoggingFilter.java b/parser/src/main/java/org/dna/mqtt/moquette/proto/MQTTLoggingFilter.java
deleted file mode 100644
index 6e4faac8..00000000
--- a/parser/src/main/java/org/dna/mqtt/moquette/proto/MQTTLoggingFilter.java
+++ /dev/null
@@ -1,158 +0,0 @@
-package org.dna.mqtt.moquette.proto;
-
-import org.apache.mina.core.buffer.AbstractIoBuffer;
-import org.apache.mina.core.buffer.IoBuffer;
-import org.apache.mina.core.session.IoSession;
-import org.apache.mina.core.write.WriteRequest;
-import org.apache.mina.filter.logging.LogLevel;
-import org.apache.mina.filter.logging.LoggingFilter;
-import static org.dna.mqtt.moquette.proto.messages.AbstractMessage.*;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Apache MINA logging filter that pretty prints the header of messages
- *
- * @author andrea
- */
-public class MQTTLoggingFilter extends LoggingFilter {
-
- private final Logger log;
-
- protected static String computeLoggerName(String name) {
- return name == null ? MQTTLoggingFilter.class.getName() : name;
- }
-
- /**
- * Default Constructor.
- */
- public MQTTLoggingFilter() {
- this(LoggingFilter.class.getName());
- }
-
- /**
- * Create a new NoopFilter using a class name
- *
- * @param clazz the class which name will be used to create the logger
- */
- public MQTTLoggingFilter(Class> clazz) {
- this(clazz.getName());
- }
-
- /**
- * Create a new NoopFilter using a name
- *
- * @param name the name used to create the logger. If null, will default to
- * "NoopFilter"
- */
- public MQTTLoggingFilter(String name) {
- super(computeLoggerName(name));
- log = LoggerFactory.getLogger(getName());
- }
-
- protected String decodeCommonHeader(IoBuffer in) {
- StringBuilder sb = new StringBuilder();
-
- byte h1 = in.get();
- byte messageType = (byte) ((h1 & 0x00F0) >> 4);
- boolean dupFlag = ((byte) ((h1 & 0x0008) >> 3) == 1);
- byte qosLevel = (byte) ((h1 & 0x0006) >> 1);
- boolean retainFlag = ((byte) (h1 & 0x0001) == 1);
- int remainingLength = Utils.decodeRemainingLenght(in);
-
- sb.append("type: ").append(decodeMessageType(messageType)).append(", ");
- sb.append("dup: ").append(Boolean.toString(dupFlag)).append(", ");
- sb.append("QoS: ").append(qosLevel).append(", ");
- sb.append("retain: ").append(Boolean.toString(retainFlag));
-
- if (remainingLength != -1) {
- sb.append(", remainingLen: ").append(remainingLength);
- }
-
- in.rewind();
- return sb.toString();
- }
-
- protected String decodeMessageType(byte type) {
- switch (type) {
- case CONNECT:
- return "CONNECT";
- case CONNACK:
- return "CONNACK";
- case PUBLISH:
- return "PUBLISH";
- case PUBACK:
- return "PUBACK";
- case PUBREC:
- return "PUBREC";
- case PUBREL:
- return "PUBREL";
- case PUBCOMP:
- return "PUBCOMP";
- case SUBSCRIBE:
- return "SUBSCRIBE";
- case SUBACK:
- return "SUBACK";
- case UNSUBSCRIBE:
- return "UNSUBSCRIBE";
- case UNSUBACK:
- return "UNSUBACK";
- case PINGREQ:
- return "PINGREQ";
- case PINGRESP:
- return "PINGRESP";
- case DISCONNECT:
- return "DISCONNECT";
- default:
- return "undefined";
- }
- }
-
- @Override
- public void messageReceived(NextFilter nextFilter, IoSession session, Object message) throws Exception {
- if (message instanceof AbstractIoBuffer) {
- IoBuffer buff = (AbstractIoBuffer) message;
- log(getMessageReceivedLogLevel(), "-> RECEIVED: {}", decodeCommonHeader(buff) + "\n\t" + buff.getHexDump());
- } else {
- log(getMessageReceivedLogLevel(), "-> RECEIVED: {}", message);
- }
- nextFilter.messageReceived(session, message);
- }
-
- @Override
- public void messageSent(NextFilter nextFilter, IoSession session, WriteRequest writeRequest) throws Exception {
- Object message = writeRequest.getMessage();
- if (message instanceof AbstractIoBuffer) {
- IoBuffer buff = (AbstractIoBuffer) message;
- log(getMessageReceivedLogLevel(), "<- SENT: {}", buff.getHexDump());
- } else {
- log(getMessageReceivedLogLevel(), "<- SENT: {}", message);
- }
- nextFilter.messageSent(session, writeRequest);
- }
-
- /**
- * Copied by parent
- */
- private void log(LogLevel eventLevel, String message, Object param) {
- switch (eventLevel) {
- case TRACE:
- log.trace(message, param);
- return;
- case DEBUG:
- log.debug(message, param);
- return;
- case INFO:
- log.info(message, param);
- return;
- case WARN:
- log.warn(message, param);
- return;
- case ERROR:
- log.error(message, param);
- return;
- default:
- return;
- }
- }
-}
diff --git a/parser/src/main/java/org/dna/mqtt/moquette/proto/MessageIDDecoder.java b/parser/src/main/java/org/dna/mqtt/moquette/proto/MessageIDDecoder.java
deleted file mode 100644
index 199421fd..00000000
--- a/parser/src/main/java/org/dna/mqtt/moquette/proto/MessageIDDecoder.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package org.dna.mqtt.moquette.proto;
-
-import org.apache.mina.core.buffer.IoBuffer;
-import org.apache.mina.core.session.IoSession;
-import org.apache.mina.filter.codec.ProtocolDecoderOutput;
-import org.apache.mina.filter.codec.demux.MessageDecoderResult;
-import org.dna.mqtt.moquette.proto.messages.MessageIDMessage;
-
-/**
- *
- * @author andrea
- */
-public abstract class MessageIDDecoder extends MqttDecoder {
- protected abstract MessageIDMessage createMessage();
-
- public MessageDecoderResult decode(IoSession session, IoBuffer in, ProtocolDecoderOutput out) throws Exception {
- //Common decoding part
- MessageIDMessage message = createMessage();
- if (decodeCommonHeader(message, in) == NEED_DATA) {
- return NEED_DATA;
- }
-
- //read messageIDs
- message.setMessageID(Utils.readWord(in));
- out.write(message);
- return OK;
- }
-}
diff --git a/parser/src/main/java/org/dna/mqtt/moquette/proto/MqttDecoder.java b/parser/src/main/java/org/dna/mqtt/moquette/proto/MqttDecoder.java
deleted file mode 100644
index c56df86f..00000000
--- a/parser/src/main/java/org/dna/mqtt/moquette/proto/MqttDecoder.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package org.dna.mqtt.moquette.proto;
-
-import org.apache.mina.core.buffer.IoBuffer;
-import org.apache.mina.filter.codec.demux.MessageDecoderAdapter;
-import org.apache.mina.filter.codec.demux.MessageDecoderResult;
-import org.dna.mqtt.moquette.proto.messages.AbstractMessage;
-
-/**
- * Contains common code for all mqtt decoders.
- *
- * @author andrea
- */
-public abstract class MqttDecoder extends MessageDecoderAdapter {
-
- protected MessageDecoderResult decodeCommonHeader(AbstractMessage message, IoBuffer in) {
- //Common decoding part
- if (in.remaining() < 2) {
- return NEED_DATA;
- }
- byte h1 = in.get();
- byte messageType = (byte) ((h1 & 0x00F0) >> 4);
- boolean dupFlag = ((byte) ((h1 & 0x0008) >> 3) == 1);
- byte qosLevel = (byte) ((h1 & 0x0006) >> 1);
- boolean retainFlag = ((byte) (h1 & 0x0001) == 1);
- int remainingLength = Utils.decodeRemainingLenght(in);
- if (remainingLength == -1) {
- return NEED_DATA;
- }
-
- message.setMessageType(messageType);
- message.setDupFlag(dupFlag);
- message.setQos(AbstractMessage.QOSType.values()[qosLevel]);
- message.setRetainFlag(retainFlag);
- message.setRemainingLength(remainingLength);
- return OK;
- }
-}
diff --git a/parser/src/main/java/org/dna/mqtt/moquette/proto/PingReqDecoder.java b/parser/src/main/java/org/dna/mqtt/moquette/proto/PingReqDecoder.java
deleted file mode 100644
index 8584424d..00000000
--- a/parser/src/main/java/org/dna/mqtt/moquette/proto/PingReqDecoder.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package org.dna.mqtt.moquette.proto;
-
-import org.apache.mina.core.buffer.IoBuffer;
-import org.apache.mina.core.session.IoSession;
-import org.apache.mina.filter.codec.ProtocolDecoderOutput;
-import org.apache.mina.filter.codec.demux.MessageDecoderResult;
-import org.dna.mqtt.moquette.proto.messages.AbstractMessage;
-import org.dna.mqtt.moquette.proto.messages.PingReqMessage;
-
-/**
- *
- * @author andrea
- */
-public class PingReqDecoder extends MqttDecoder {
-
- public MessageDecoderResult decodable(IoSession session, IoBuffer in) {
- return Utils.checkDecodable(AbstractMessage.PINGREQ, in);
- }
-
- public MessageDecoderResult decode(IoSession session, IoBuffer in, ProtocolDecoderOutput out) throws Exception {
- //Common decoding part
- PingReqMessage message = new PingReqMessage();
- if (decodeCommonHeader(message, in) == NEED_DATA) {
- return NEED_DATA;
- }
- out.write(message);
- return OK;
- }
-}
diff --git a/parser/src/main/java/org/dna/mqtt/moquette/proto/PingReqEncoder.java b/parser/src/main/java/org/dna/mqtt/moquette/proto/PingReqEncoder.java
deleted file mode 100644
index b5f70862..00000000
--- a/parser/src/main/java/org/dna/mqtt/moquette/proto/PingReqEncoder.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package org.dna.mqtt.moquette.proto;
-
-import org.apache.mina.core.buffer.IoBuffer;
-import org.apache.mina.core.session.IoSession;
-import org.apache.mina.filter.codec.ProtocolEncoderOutput;
-import org.apache.mina.filter.codec.demux.MessageEncoder;
-import org.dna.mqtt.moquette.proto.messages.AbstractMessage;
-import org.dna.mqtt.moquette.proto.messages.PingReqMessage;
-
-/**
- *
- * @author andrea
- */
-public class PingReqEncoder implements MessageEncoder {
-
- public void encode(IoSession session, PingReqMessage message, ProtocolEncoderOutput out) throws Exception {
- IoBuffer buff = IoBuffer.allocate(2);
- buff.put((byte) (AbstractMessage.PINGREQ << 4)).put((byte)0).flip();
- out.write(buff);
- }
-}
diff --git a/parser/src/main/java/org/dna/mqtt/moquette/proto/PingRespDecoder.java b/parser/src/main/java/org/dna/mqtt/moquette/proto/PingRespDecoder.java
deleted file mode 100644
index bc0bef10..00000000
--- a/parser/src/main/java/org/dna/mqtt/moquette/proto/PingRespDecoder.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * To change this template, choose Tools | Templates
- * and open the template in the editor.
- */
-package org.dna.mqtt.moquette.proto;
-
-import org.apache.mina.core.buffer.IoBuffer;
-import org.apache.mina.core.session.IoSession;
-import org.apache.mina.filter.codec.ProtocolDecoderOutput;
-import org.apache.mina.filter.codec.demux.MessageDecoderResult;
-import org.dna.mqtt.moquette.proto.messages.AbstractMessage;
-import org.dna.mqtt.moquette.proto.messages.PingRespMessage;
-
-/**
- *
- * @author andrea
- */
-public class PingRespDecoder extends MqttDecoder {
-
- public MessageDecoderResult decodable(IoSession session, IoBuffer in) {
- return Utils.checkDecodable(AbstractMessage.PINGRESP, in);
- }
-
- public MessageDecoderResult decode(IoSession session, IoBuffer in, ProtocolDecoderOutput out) throws Exception {
- //Common decoding part
- PingRespMessage message = new PingRespMessage();
- if (decodeCommonHeader(message, in) == NEED_DATA) {
- return NEED_DATA;
- }
- out.write(message);
- return OK;
- }
-}
diff --git a/parser/src/main/java/org/dna/mqtt/moquette/proto/PingRespEncoder.java b/parser/src/main/java/org/dna/mqtt/moquette/proto/PingRespEncoder.java
deleted file mode 100644
index 3afedf32..00000000
--- a/parser/src/main/java/org/dna/mqtt/moquette/proto/PingRespEncoder.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package org.dna.mqtt.moquette.proto;
-
-import org.apache.mina.core.buffer.IoBuffer;
-import org.apache.mina.core.session.IoSession;
-import org.apache.mina.filter.codec.ProtocolEncoderOutput;
-import org.apache.mina.filter.codec.demux.MessageEncoder;
-import org.dna.mqtt.moquette.proto.messages.AbstractMessage;
-import org.dna.mqtt.moquette.proto.messages.PingRespMessage;
-
-/**
- *
- * @author andrea
- */
-public class PingRespEncoder implements MessageEncoder {
-
- public void encode(IoSession session, PingRespMessage message, ProtocolEncoderOutput out) throws Exception {
- IoBuffer buff = IoBuffer.allocate(2);
- buff.put((byte) (AbstractMessage.PINGRESP << 4)).put((byte)0).flip();
- out.write(buff);
- }
-}
diff --git a/parser/src/main/java/org/dna/mqtt/moquette/proto/PubAckDecoder.java b/parser/src/main/java/org/dna/mqtt/moquette/proto/PubAckDecoder.java
deleted file mode 100644
index 97e2c16c..00000000
--- a/parser/src/main/java/org/dna/mqtt/moquette/proto/PubAckDecoder.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package org.dna.mqtt.moquette.proto;
-
-import org.apache.mina.core.buffer.IoBuffer;
-import org.apache.mina.core.session.IoSession;
-import org.apache.mina.filter.codec.demux.MessageDecoderResult;
-import org.dna.mqtt.moquette.proto.messages.AbstractMessage;
-import org.dna.mqtt.moquette.proto.messages.MessageIDMessage;
-import org.dna.mqtt.moquette.proto.messages.PubAckMessage;
-
-/**
- *
- * @author andrea
- */
-public class PubAckDecoder extends MessageIDDecoder {
-
- @Override
- protected MessageIDMessage createMessage() {
- return new PubAckMessage();
- }
-
- @Override
- public MessageDecoderResult decodable(IoSession session, IoBuffer in) {
- return Utils.checkDecodable(AbstractMessage.PUBACK, in);
- }
-}
diff --git a/parser/src/main/java/org/dna/mqtt/moquette/proto/PubAckEncoder.java b/parser/src/main/java/org/dna/mqtt/moquette/proto/PubAckEncoder.java
deleted file mode 100644
index 1a2dcbfb..00000000
--- a/parser/src/main/java/org/dna/mqtt/moquette/proto/PubAckEncoder.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package org.dna.mqtt.moquette.proto;
-
-import org.apache.mina.core.buffer.IoBuffer;
-import org.apache.mina.core.session.IoSession;
-import org.apache.mina.filter.codec.ProtocolEncoderOutput;
-import org.apache.mina.filter.codec.demux.MessageEncoder;
-import org.dna.mqtt.moquette.proto.messages.AbstractMessage;
-import org.dna.mqtt.moquette.proto.messages.PubAckMessage;
-
-/**
- *
- * @author andrea
- */
-public class PubAckEncoder implements MessageEncoder {
- public void encode(IoSession session, PubAckMessage message, ProtocolEncoderOutput out) throws Exception {
- IoBuffer buff = IoBuffer.allocate(4);
- buff.put((byte) (AbstractMessage.PUBACK << 4));
- buff.put(Utils.encodeRemainingLength(2));
- Utils.writeWord(buff, message.getMessageID());
- buff.flip();
- out.write(buff);
- }
-}
diff --git a/parser/src/main/java/org/dna/mqtt/moquette/proto/PubCompDecoder.java b/parser/src/main/java/org/dna/mqtt/moquette/proto/PubCompDecoder.java
deleted file mode 100644
index bc9ac49a..00000000
--- a/parser/src/main/java/org/dna/mqtt/moquette/proto/PubCompDecoder.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package org.dna.mqtt.moquette.proto;
-
-import org.dna.mqtt.moquette.proto.messages.PubCompMessage;
-import org.apache.mina.core.buffer.IoBuffer;
-import org.apache.mina.core.session.IoSession;
-import org.apache.mina.filter.codec.demux.MessageDecoderResult;
-import org.dna.mqtt.moquette.proto.messages.AbstractMessage;
-import org.dna.mqtt.moquette.proto.messages.MessageIDMessage;
-
-/**
- *
- * @author andrea
- */
-public class PubCompDecoder extends MessageIDDecoder {
-
- @Override
- protected MessageIDMessage createMessage() {
- return new PubCompMessage();
- }
-
- @Override
- public MessageDecoderResult decodable(IoSession session, IoBuffer in) {
- return Utils.checkDecodable(AbstractMessage.PUBCOMP, in);
- }
-}
diff --git a/parser/src/main/java/org/dna/mqtt/moquette/proto/PubCompEncoder.java b/parser/src/main/java/org/dna/mqtt/moquette/proto/PubCompEncoder.java
deleted file mode 100644
index 93534271..00000000
--- a/parser/src/main/java/org/dna/mqtt/moquette/proto/PubCompEncoder.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package org.dna.mqtt.moquette.proto;
-
-import org.apache.mina.core.buffer.IoBuffer;
-import org.apache.mina.core.session.IoSession;
-import org.apache.mina.filter.codec.ProtocolEncoderOutput;
-import org.apache.mina.filter.codec.demux.MessageEncoder;
-import org.dna.mqtt.moquette.proto.messages.AbstractMessage;
-import org.dna.mqtt.moquette.proto.messages.PubCompMessage;
-
-/**
- *
- * @author andrea
- */
-public class PubCompEncoder implements MessageEncoder {
- public void encode(IoSession session, PubCompMessage message, ProtocolEncoderOutput out) throws Exception {
- IoBuffer buff = IoBuffer.allocate(4);
- buff.put((byte) (AbstractMessage.PUBCOMP << 4));
- buff.put(Utils.encodeRemainingLength(2));
- Utils.writeWord(buff, message.getMessageID());
- buff.flip();
- out.write(buff);
- }
-}
diff --git a/parser/src/main/java/org/dna/mqtt/moquette/proto/PubRecDecoder.java b/parser/src/main/java/org/dna/mqtt/moquette/proto/PubRecDecoder.java
deleted file mode 100644
index ad4d9b64..00000000
--- a/parser/src/main/java/org/dna/mqtt/moquette/proto/PubRecDecoder.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package org.dna.mqtt.moquette.proto;
-
-import org.apache.mina.core.buffer.IoBuffer;
-import org.apache.mina.core.session.IoSession;
-import org.apache.mina.filter.codec.demux.MessageDecoderResult;
-import org.dna.mqtt.moquette.proto.messages.AbstractMessage;
-import org.dna.mqtt.moquette.proto.messages.MessageIDMessage;
-import org.dna.mqtt.moquette.proto.messages.PubRecMessage;
-
-/**
- *
- * @author andrea
- */
-public class PubRecDecoder extends MessageIDDecoder {
-
- @Override
- protected MessageIDMessage createMessage() {
- return new PubRecMessage();
- }
-
- @Override
- public MessageDecoderResult decodable(IoSession session, IoBuffer in) {
- return Utils.checkDecodable(AbstractMessage.PUBREC, in);
- }
-}
diff --git a/parser/src/main/java/org/dna/mqtt/moquette/proto/PubRecEncoder.java b/parser/src/main/java/org/dna/mqtt/moquette/proto/PubRecEncoder.java
deleted file mode 100644
index ba21a527..00000000
--- a/parser/src/main/java/org/dna/mqtt/moquette/proto/PubRecEncoder.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package org.dna.mqtt.moquette.proto;
-
-import org.apache.mina.core.buffer.IoBuffer;
-import org.apache.mina.core.session.IoSession;
-import org.apache.mina.filter.codec.ProtocolEncoderOutput;
-import org.apache.mina.filter.codec.demux.MessageEncoder;
-import org.dna.mqtt.moquette.proto.messages.AbstractMessage;
-import org.dna.mqtt.moquette.proto.messages.PubRecMessage;
-
-/**
- *
- * @author andrea
- */
-public class PubRecEncoder implements MessageEncoder {
- public void encode(IoSession session, PubRecMessage message, ProtocolEncoderOutput out) throws Exception {
- IoBuffer buff = IoBuffer.allocate(4);
- buff.put((byte) (AbstractMessage.PUBREC << 4));
- buff.put(Utils.encodeRemainingLength(2));
- Utils.writeWord(buff, message.getMessageID());
- buff.flip();
- out.write(buff);
- }
-}
\ No newline at end of file
diff --git a/parser/src/main/java/org/dna/mqtt/moquette/proto/PubRelDecoder.java b/parser/src/main/java/org/dna/mqtt/moquette/proto/PubRelDecoder.java
deleted file mode 100644
index c2cb7d05..00000000
--- a/parser/src/main/java/org/dna/mqtt/moquette/proto/PubRelDecoder.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package org.dna.mqtt.moquette.proto;
-
-import org.apache.mina.core.buffer.IoBuffer;
-import org.apache.mina.core.session.IoSession;
-import org.apache.mina.filter.codec.demux.MessageDecoderResult;
-import org.dna.mqtt.moquette.proto.messages.AbstractMessage;
-import org.dna.mqtt.moquette.proto.messages.MessageIDMessage;
-import org.dna.mqtt.moquette.proto.messages.PubRelMessage;
-
-/**
- *
- * @author andrea
- */
-public class PubRelDecoder extends MessageIDDecoder {
-
- @Override
- protected MessageIDMessage createMessage() {
- return new PubRelMessage();
- }
-
- @Override
- public MessageDecoderResult decodable(IoSession session, IoBuffer in) {
- return Utils.checkDecodable(AbstractMessage.PUBREL, in);
- }
-}
-
diff --git a/parser/src/main/java/org/dna/mqtt/moquette/proto/PubRelEncoder.java b/parser/src/main/java/org/dna/mqtt/moquette/proto/PubRelEncoder.java
deleted file mode 100644
index a314f253..00000000
--- a/parser/src/main/java/org/dna/mqtt/moquette/proto/PubRelEncoder.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package org.dna.mqtt.moquette.proto;
-
-import org.apache.mina.core.buffer.IoBuffer;
-import org.apache.mina.core.session.IoSession;
-import org.apache.mina.filter.codec.ProtocolEncoderOutput;
-import org.apache.mina.filter.codec.demux.MessageEncoder;
-import org.dna.mqtt.moquette.proto.messages.AbstractMessage;
-import org.dna.mqtt.moquette.proto.messages.PubRelMessage;
-
-/**
- *
- * @author andrea
- */
-public class PubRelEncoder implements MessageEncoder {
- public void encode(IoSession session, PubRelMessage message, ProtocolEncoderOutput out) throws Exception {
- IoBuffer buff = IoBuffer.allocate(4);
- buff.put((byte) (AbstractMessage.PUBREL << 4));
- buff.put(Utils.encodeRemainingLength(2));
- Utils.writeWord(buff, message.getMessageID());
- buff.flip();
- out.write(buff);
- }
-}
\ No newline at end of file
diff --git a/parser/src/main/java/org/dna/mqtt/moquette/proto/PublishDecoder.java b/parser/src/main/java/org/dna/mqtt/moquette/proto/PublishDecoder.java
deleted file mode 100644
index e879e09f..00000000
--- a/parser/src/main/java/org/dna/mqtt/moquette/proto/PublishDecoder.java
+++ /dev/null
@@ -1,63 +0,0 @@
-package org.dna.mqtt.moquette.proto;
-
-import org.apache.mina.core.buffer.IoBuffer;
-import org.apache.mina.core.session.IoSession;
-import org.apache.mina.filter.codec.ProtocolDecoderOutput;
-import org.apache.mina.filter.codec.demux.MessageDecoderResult;
-import org.dna.mqtt.moquette.proto.messages.AbstractMessage;
-import org.dna.mqtt.moquette.proto.messages.AbstractMessage.QOSType;
-import org.dna.mqtt.moquette.proto.messages.PublishMessage;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- *
- * @author andrea
- */
-public class PublishDecoder extends MqttDecoder {
-
- private static Logger LOG = LoggerFactory.getLogger(PublishDecoder.class);
-
- public MessageDecoderResult decodable(IoSession session, IoBuffer in) {
- return Utils.checkDecodable(AbstractMessage.PUBLISH, in);
- }
-
- public MessageDecoderResult decode(IoSession session, IoBuffer in, ProtocolDecoderOutput out) throws Exception {
- LOG.debug("decode invoked with buffer " + in);
- int startPos = in.position();
-
- //Common decoding part
- PublishMessage message = new PublishMessage();
- if (decodeCommonHeader(message, in) == NEED_DATA) {
- LOG.info("decode ask for more data after " + in);
- return NEED_DATA;
- }
- int remainingLength = message.getRemainingLength();
-
- //Topic name
- String topic = Utils.decodeString(in);
- if (topic == null) {
- return NEED_DATA;
- }
- message.setTopicName(topic);
-
- if (message.getQos() == QOSType.LEAST_ONE ||
- message.getQos() == QOSType.EXACTLY_ONCE) {
- message.setMessageID(Utils.readWord(in));
- }
- int stopPos = in.position();
-
- //read the payload
- int payloadSize = remainingLength - (stopPos - startPos - 2) + (Utils.numBytesToEncode(remainingLength) - 1);
- if (in.remaining() < payloadSize) {
- return NEED_DATA;
- }
- byte[] b = new byte[payloadSize];
- in.get(b);
- message.setPayload(b);
-
- out.write(message);
- return OK;
- }
-
-}
diff --git a/parser/src/main/java/org/dna/mqtt/moquette/proto/PublishEncoder.java b/parser/src/main/java/org/dna/mqtt/moquette/proto/PublishEncoder.java
deleted file mode 100644
index b44dafa0..00000000
--- a/parser/src/main/java/org/dna/mqtt/moquette/proto/PublishEncoder.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package org.dna.mqtt.moquette.proto;
-
-import org.apache.mina.core.buffer.IoBuffer;
-import org.apache.mina.core.session.IoSession;
-import org.apache.mina.filter.codec.ProtocolEncoderOutput;
-import org.apache.mina.filter.codec.demux.MessageEncoder;
-import org.dna.mqtt.moquette.proto.messages.AbstractMessage;
-import org.dna.mqtt.moquette.proto.messages.AbstractMessage.QOSType;
-import org.dna.mqtt.moquette.proto.messages.PublishMessage;
-
-/**
- *
- * @author andrea
- */
-public class PublishEncoder implements MessageEncoder {
-
- public void encode(IoSession session, PublishMessage message, ProtocolEncoderOutput out) throws Exception {
- if (message.getQos() == QOSType.RESERVED) {
- throw new IllegalArgumentException("Found a message with RESERVED Qos");
- }
- if (message.getTopicName() == null || message.getTopicName().isEmpty()) {
- throw new IllegalArgumentException("Found a message with empty or null topic name");
- }
-
- IoBuffer variableHeaderBuff = IoBuffer.allocate(2).setAutoExpand(true);
- variableHeaderBuff.put(Utils.encodeString(message.getTopicName()));
- if (message.getQos() == QOSType.LEAST_ONE ||
- message.getQos() == QOSType.EXACTLY_ONCE ) {
- if (message.getMessageID() == null) {
- throw new IllegalArgumentException("Found a message with QOS 1 or 2 and not MessageID setted");
- }
- Utils.writeWord(variableHeaderBuff, message.getMessageID());
- }
- variableHeaderBuff.put(message.getPayload());
- variableHeaderBuff.flip();
- int variableHeaderSize = variableHeaderBuff.remaining();
-
- byte flags = Utils.encodeFlags(message);
-
- IoBuffer buff = IoBuffer.allocate(2 + variableHeaderSize).setAutoExpand(true);;
- buff.put((byte) (AbstractMessage.PUBLISH << 4 | flags));
- buff.put(Utils.encodeRemainingLength(variableHeaderSize));
- buff.put(variableHeaderBuff).flip();
-
- out.write(buff);
- }
-
-}
diff --git a/parser/src/main/java/org/dna/mqtt/moquette/proto/SubAckDecoder.java b/parser/src/main/java/org/dna/mqtt/moquette/proto/SubAckDecoder.java
deleted file mode 100644
index 1756e554..00000000
--- a/parser/src/main/java/org/dna/mqtt/moquette/proto/SubAckDecoder.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package org.dna.mqtt.moquette.proto;
-
-import org.apache.mina.core.buffer.IoBuffer;
-import org.apache.mina.core.session.IoSession;
-import org.apache.mina.filter.codec.ProtocolDecoderOutput;
-import org.apache.mina.filter.codec.demux.MessageDecoderResult;
-import org.dna.mqtt.moquette.proto.messages.AbstractMessage;
-import org.dna.mqtt.moquette.proto.messages.AbstractMessage.QOSType;
-import org.dna.mqtt.moquette.proto.messages.SubAckMessage;
-
-/**
- * QoS, DUP and RETAIN are NOT used.
- *
- * @author andrea
- */
-public class SubAckDecoder extends MqttDecoder {
-
- public MessageDecoderResult decodable(IoSession session, IoBuffer in) {
- return Utils.checkDecodable(AbstractMessage.SUBACK, in);
- }
-
- public MessageDecoderResult decode(IoSession session, IoBuffer in, ProtocolDecoderOutput out) throws Exception {
- //Common decoding part
- SubAckMessage message = new SubAckMessage();
- if (decodeCommonHeader(message, in) == NEED_DATA) {
- return NEED_DATA;
- }
- int remainingLength = message.getRemainingLength();
-
- //MessageID
- message.setMessageID(Utils.readWord(in));
- remainingLength -= 2;
-
- //Qos array
- if (in.remaining() < remainingLength ) {
- return NEED_DATA;
- }
- for (int i = 0; i < remainingLength; i++) {
- byte qos = in.get();
- message.addType(QOSType.values()[qos]);
- }
-
- out.write(message);
- return OK;
- }
-
-}
diff --git a/parser/src/main/java/org/dna/mqtt/moquette/proto/SubAckEncoder.java b/parser/src/main/java/org/dna/mqtt/moquette/proto/SubAckEncoder.java
deleted file mode 100644
index 9fdbf635..00000000
--- a/parser/src/main/java/org/dna/mqtt/moquette/proto/SubAckEncoder.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package org.dna.mqtt.moquette.proto;
-
-import org.apache.mina.core.buffer.IoBuffer;
-import org.apache.mina.core.session.IoSession;
-import org.apache.mina.filter.codec.ProtocolEncoderOutput;
-import org.apache.mina.filter.codec.demux.MessageEncoder;
-import org.dna.mqtt.moquette.proto.messages.AbstractMessage;
-import org.dna.mqtt.moquette.proto.messages.SubAckMessage;
-
-/**
- *
- * @author andrea
- */
-public class SubAckEncoder implements MessageEncoder {
-
- public void encode(IoSession session, SubAckMessage message, ProtocolEncoderOutput out) throws Exception {
- if (message.types().isEmpty()) {
- throw new IllegalArgumentException("Found a suback message with empty topics");
- }
-
- IoBuffer variableHeaderBuff = IoBuffer.allocate(4).setAutoExpand(true);
- Utils.writeWord(variableHeaderBuff, message.getMessageID());
- for (AbstractMessage.QOSType c : message.types()) {
- byte ord = (byte) c.ordinal();
- variableHeaderBuff.put((byte)c.ordinal());
- }
-
- variableHeaderBuff.flip();
- int variableHeaderSize = variableHeaderBuff.remaining();
- IoBuffer buff = IoBuffer.allocate(2 + variableHeaderSize);
-
- buff.put((byte) (AbstractMessage.SUBACK << 4 ));
- buff.put(Utils.encodeRemainingLength(variableHeaderSize));
- buff.put(variableHeaderBuff).flip();
-
- out.write(buff);
- }
-
-}
diff --git a/parser/src/main/java/org/dna/mqtt/moquette/proto/SubscribeDecoder.java b/parser/src/main/java/org/dna/mqtt/moquette/proto/SubscribeDecoder.java
deleted file mode 100644
index 536151cb..00000000
--- a/parser/src/main/java/org/dna/mqtt/moquette/proto/SubscribeDecoder.java
+++ /dev/null
@@ -1,56 +0,0 @@
-package org.dna.mqtt.moquette.proto;
-
-import java.io.UnsupportedEncodingException;
-import org.apache.mina.core.buffer.IoBuffer;
-import org.apache.mina.core.session.IoSession;
-import org.apache.mina.filter.codec.ProtocolDecoderOutput;
-import org.apache.mina.filter.codec.demux.MessageDecoderResult;
-import org.dna.mqtt.moquette.proto.messages.AbstractMessage;
-import org.dna.mqtt.moquette.proto.messages.AbstractMessage.QOSType;
-import org.dna.mqtt.moquette.proto.messages.SubscribeMessage;
-
-/**
- *
- * @author andrea
- */
-public class SubscribeDecoder extends MqttDecoder {
-
- public MessageDecoderResult decodable(IoSession session, IoBuffer in) {
- return Utils.checkDecodable(AbstractMessage.SUBSCRIBE, in);
- }
-
- public MessageDecoderResult decode(IoSession session, IoBuffer in, ProtocolDecoderOutput out) throws Exception {
- //Common decoding part
- SubscribeMessage message = new SubscribeMessage();
- if (decodeCommonHeader(message, in) == NEED_DATA) {
- return NEED_DATA;
- }
-
- //check qos level
- if (message.getQos() != QOSType.LEAST_ONE) {
- return NOT_OK;
- }
-
- int start = in.position();
- //read messageIDs
- message.setMessageID(Utils.readWord(in));
- int readed = in.position() - start;
- while (readed < message.getRemainingLength()) {
- decodeSubscription(in, message);
- readed = in.position() - start;
- }
-
- out.write(message);
- return OK;
- }
-
- /**
- * Populate the message with couple of Qos, topic
- */
- private void decodeSubscription(IoBuffer in, SubscribeMessage message) throws UnsupportedEncodingException {
- String topic = Utils.decodeString(in);
- byte qos = (byte)(in.get() & 0x03);
- message.addSubscription(new SubscribeMessage.Couple(qos, topic));
- }
-
-}
diff --git a/parser/src/main/java/org/dna/mqtt/moquette/proto/SubscribeEncoder.java b/parser/src/main/java/org/dna/mqtt/moquette/proto/SubscribeEncoder.java
deleted file mode 100644
index b22b0ec8..00000000
--- a/parser/src/main/java/org/dna/mqtt/moquette/proto/SubscribeEncoder.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package org.dna.mqtt.moquette.proto;
-
-import org.apache.mina.core.buffer.IoBuffer;
-import org.apache.mina.core.session.IoSession;
-import org.apache.mina.filter.codec.ProtocolEncoderOutput;
-import org.apache.mina.filter.codec.demux.MessageEncoder;
-import org.dna.mqtt.moquette.proto.messages.AbstractMessage;
-import org.dna.mqtt.moquette.proto.messages.AbstractMessage.QOSType;
-import org.dna.mqtt.moquette.proto.messages.SubscribeMessage;
-import org.dna.mqtt.moquette.proto.messages.SubscribeMessage.Couple;
-
-/**
- *
- * @author andrea
- */
-public class SubscribeEncoder implements MessageEncoder {
-
- public void encode(IoSession session, SubscribeMessage message, ProtocolEncoderOutput out) throws Exception {
- if (message.subscriptions().isEmpty()) {
- throw new IllegalArgumentException("Found a subscribe message with empty topics");
- }
-
- if (message.getQos() != QOSType.LEAST_ONE) {
- throw new IllegalArgumentException("Expected a message with QOS 1, found " + message.getQos());
- }
-
- IoBuffer variableHeaderBuff = IoBuffer.allocate(4).setAutoExpand(true);
- Utils.writeWord(variableHeaderBuff, message.getMessageID());
- for (Couple c : message.subscriptions()) {
- variableHeaderBuff.put(Utils.encodeString(c.getTopic()));
- variableHeaderBuff.put(c.getQos());
- }
-
- variableHeaderBuff.flip();
- int variableHeaderSize = variableHeaderBuff.remaining();
- byte flags = Utils.encodeFlags(message);
- IoBuffer buff = IoBuffer.allocate(2 + variableHeaderSize);
-
- buff.put((byte) (AbstractMessage.SUBSCRIBE << 4 | flags));
- buff.put(Utils.encodeRemainingLength(variableHeaderSize));
- buff.put(variableHeaderBuff).flip();
-
- out.write(buff);
- }
-}
diff --git a/parser/src/main/java/org/dna/mqtt/moquette/proto/UnsubAckDecoder.java b/parser/src/main/java/org/dna/mqtt/moquette/proto/UnsubAckDecoder.java
deleted file mode 100644
index 8f91bae4..00000000
--- a/parser/src/main/java/org/dna/mqtt/moquette/proto/UnsubAckDecoder.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package org.dna.mqtt.moquette.proto;
-
-import org.apache.mina.core.buffer.IoBuffer;
-import org.apache.mina.core.session.IoSession;
-import org.apache.mina.filter.codec.demux.MessageDecoderResult;
-import org.dna.mqtt.moquette.proto.messages.AbstractMessage;
-import org.dna.mqtt.moquette.proto.messages.MessageIDMessage;
-import org.dna.mqtt.moquette.proto.messages.UnsubAckMessage;
-
-/**
- *
- * @author andrea
- */
-public class UnsubAckDecoder extends MessageIDDecoder {
-
- @Override
- protected MessageIDMessage createMessage() {
- return new UnsubAckMessage();
- }
-
- @Override
- public MessageDecoderResult decodable(IoSession session, IoBuffer in) {
- return Utils.checkDecodable(AbstractMessage.UNSUBACK, in);
- }
-}
-
diff --git a/parser/src/main/java/org/dna/mqtt/moquette/proto/UnsubAckEncoder.java b/parser/src/main/java/org/dna/mqtt/moquette/proto/UnsubAckEncoder.java
deleted file mode 100644
index 0530221e..00000000
--- a/parser/src/main/java/org/dna/mqtt/moquette/proto/UnsubAckEncoder.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package org.dna.mqtt.moquette.proto;
-
-import org.apache.mina.core.buffer.IoBuffer;
-import org.apache.mina.core.session.IoSession;
-import org.apache.mina.filter.codec.ProtocolEncoderOutput;
-import org.apache.mina.filter.codec.demux.MessageEncoder;
-import org.dna.mqtt.moquette.proto.messages.AbstractMessage;
-import org.dna.mqtt.moquette.proto.messages.UnsubAckMessage;
-
-/**
- *
- * @author andrea
- */
-public class UnsubAckEncoder implements MessageEncoder {
- public void encode(IoSession session, UnsubAckMessage message, ProtocolEncoderOutput out) throws Exception {
- IoBuffer buff = IoBuffer.allocate(4);
- buff.put((byte) (AbstractMessage.UNSUBACK << 4));
- buff.put(Utils.encodeRemainingLength(2));
- Utils.writeWord(buff, message.getMessageID());
- buff.flip();
- out.write(buff);
- }
-}
\ No newline at end of file
diff --git a/parser/src/main/java/org/dna/mqtt/moquette/proto/UnsubscribeDecoder.java b/parser/src/main/java/org/dna/mqtt/moquette/proto/UnsubscribeDecoder.java
deleted file mode 100644
index 6fa8f028..00000000
--- a/parser/src/main/java/org/dna/mqtt/moquette/proto/UnsubscribeDecoder.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package org.dna.mqtt.moquette.proto;
-
-import org.apache.mina.core.buffer.IoBuffer;
-import org.apache.mina.core.session.IoSession;
-import org.apache.mina.filter.codec.ProtocolDecoderOutput;
-import org.apache.mina.filter.codec.demux.MessageDecoderResult;
-import org.dna.mqtt.moquette.proto.messages.AbstractMessage;
-import org.dna.mqtt.moquette.proto.messages.AbstractMessage.QOSType;
-import org.dna.mqtt.moquette.proto.messages.UnsubscribeMessage;
-
-/**
- *
- * @author andrea
- */
-public class UnsubscribeDecoder extends MqttDecoder {
-
- public MessageDecoderResult decodable(IoSession session, IoBuffer in) {
- return Utils.checkDecodable(AbstractMessage.UNSUBSCRIBE, in);
- }
-
- public MessageDecoderResult decode(IoSession session, IoBuffer in, ProtocolDecoderOutput out) throws Exception {
- //Common decoding part
- UnsubscribeMessage message = new UnsubscribeMessage();
- if (decodeCommonHeader(message, in) == NEED_DATA) {
- return NEED_DATA;
- }
-
- //check qos level
- if (message.getQos() != QOSType.LEAST_ONE) {
- return NOT_OK;
- }
-
- int start = in.position();
- //read messageIDs
- message.setMessageID(Utils.readWord(in));
- int readed = in.position() - start;
- while (readed < message.getRemainingLength()) {
- message.addTopic(Utils.decodeString(in));
- readed = in.position() - start;
- }
-
- out.write(message);
- return OK;
- }
-
-}
diff --git a/parser/src/main/java/org/dna/mqtt/moquette/proto/UnsubscribeEncoder.java b/parser/src/main/java/org/dna/mqtt/moquette/proto/UnsubscribeEncoder.java
deleted file mode 100644
index 4017d9eb..00000000
--- a/parser/src/main/java/org/dna/mqtt/moquette/proto/UnsubscribeEncoder.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package org.dna.mqtt.moquette.proto;
-
-import org.apache.mina.core.buffer.IoBuffer;
-import org.apache.mina.core.session.IoSession;
-import org.apache.mina.filter.codec.ProtocolEncoderOutput;
-import org.apache.mina.filter.codec.demux.MessageEncoder;
-import org.dna.mqtt.moquette.proto.messages.AbstractMessage;
-import org.dna.mqtt.moquette.proto.messages.AbstractMessage.QOSType;
-import org.dna.mqtt.moquette.proto.messages.UnsubscribeMessage;
-
-/**
- *
- * @author andrea
- */
-public class UnsubscribeEncoder implements MessageEncoder {
-
- public void encode(IoSession session, UnsubscribeMessage message, ProtocolEncoderOutput out) throws Exception {
- if (message.topics().isEmpty()) {
- throw new IllegalArgumentException("Found an unsubscribe message with empty topics");
- }
-
- if (message.getQos() != QOSType.LEAST_ONE) {
- throw new IllegalArgumentException("Expected a message with QOS 1, found " + message.getQos());
- }
-
- IoBuffer variableHeaderBuff = IoBuffer.allocate(4).setAutoExpand(true);
- Utils.writeWord(variableHeaderBuff, message.getMessageID());
- for (String topic : message.topics()) {
- variableHeaderBuff.put(Utils.encodeString(topic));
- }
-
- variableHeaderBuff.flip();
- int variableHeaderSize = variableHeaderBuff.remaining();
- byte flags = Utils.encodeFlags(message);
- IoBuffer buff = IoBuffer.allocate(2 + variableHeaderSize);
-
- buff.put((byte) (AbstractMessage.UNSUBSCRIBE << 4 | flags));
- buff.put(Utils.encodeRemainingLength(variableHeaderSize));
- buff.put(variableHeaderBuff).flip();
-
- out.write(buff);
- }
-}
diff --git a/parser/src/test/java/org/dna/mqtt/moquette/proto/ConnAckDecoderTest.java b/parser/src/test/java/org/dna/mqtt/moquette/proto/ConnAckDecoderTest.java
deleted file mode 100644
index b6c4310e..00000000
--- a/parser/src/test/java/org/dna/mqtt/moquette/proto/ConnAckDecoderTest.java
+++ /dev/null
@@ -1,67 +0,0 @@
-package org.dna.mqtt.moquette.proto;
-
-import org.apache.mina.core.buffer.IoBuffer;
-import org.apache.mina.filter.codec.demux.MessageDecoder;
-import org.apache.mina.filter.codec.demux.MessageDecoderResult;
-import org.dna.mqtt.moquette.proto.TestUtils.MockProtocolDecoderOutput;
-import org.dna.mqtt.moquette.proto.messages.AbstractMessage;
-import org.dna.mqtt.moquette.proto.messages.ConnAckMessage;
-import static org.junit.Assert.*;
-import org.junit.Before;
-import org.junit.Test;
-/**
- *
- * @author andrea
- */
-public class ConnAckDecoderTest {
- IoBuffer m_buff;
- ConnAckDecoder m_msgdec;
- MockProtocolDecoderOutput m_mockProtoDecoder;
-
- @Before
- public void setUp() {
- m_buff = IoBuffer.allocate(4);
- m_msgdec = new ConnAckDecoder();
- m_mockProtoDecoder = new MockProtocolDecoderOutput();
- }
-
- @Test
- public void testDecodable_OK() {
- m_buff.put((byte)(AbstractMessage.CONNACK << 4))
- .put((byte)0) //0 length
- .flip();
- assertEquals(MessageDecoder.OK , m_msgdec.decodable(null, m_buff));
- }
-
- @Test
- public void testDecodable_NOT_OK() {
- m_buff.put((byte)(AbstractMessage.CONNECT << 4))
- .put((byte)0) //0 length
- .flip();
- assertEquals(MessageDecoder.NOT_OK , m_msgdec.decodable(null, m_buff));
- }
-
- @Test
- public void testHeader() throws Exception {
- m_buff = IoBuffer.allocate(14);
- initHeader(m_buff);
- m_buff.flip();
-
- //Exercise
- MessageDecoderResult res = m_msgdec.decode(null, m_buff, m_mockProtoDecoder);
-
- assertNotNull(m_mockProtoDecoder.getMessage());
- assertEquals(MessageDecoder.OK, res);
- assertEquals(ConnAckMessage.CONNECTION_ACCEPTED, m_mockProtoDecoder.getMessage().getReturnCode());
- assertEquals(AbstractMessage.CONNACK, m_mockProtoDecoder.getMessage().getMessageType());
- }
-
- private void initHeader(IoBuffer buff) {
- buff.clear().put((byte)(AbstractMessage.CONNACK << 4)).put((byte)2);
- //reserved
- buff.put((byte)0);
- //return code
- buff.put(ConnAckMessage.CONNECTION_ACCEPTED);
- }
-
-}
diff --git a/parser/src/test/java/org/dna/mqtt/moquette/proto/ConnAckEncoderTest.java b/parser/src/test/java/org/dna/mqtt/moquette/proto/ConnAckEncoderTest.java
deleted file mode 100644
index 9b537892..00000000
--- a/parser/src/test/java/org/dna/mqtt/moquette/proto/ConnAckEncoderTest.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package org.dna.mqtt.moquette.proto;
-
-import org.dna.mqtt.moquette.proto.messages.ConnAckMessage;
-import org.junit.Test;
-import static org.junit.Assert.*;
-
-/**
- *
- * @author andrea
- */
-public class ConnAckEncoderTest {
-
- @Test
- public void testHeaderEncode() throws Exception {
- TestUtils.MockProtocolEncoderOutput mockProtoEncoder = new TestUtils.MockProtocolEncoderOutput();
- ConnAckEncoder encoder = new ConnAckEncoder();
- ConnAckMessage msg = new ConnAckMessage();
-
- //Exercise
- encoder.encode(null, msg, mockProtoEncoder);
-
- //Verify
- assertEquals(0x20, mockProtoEncoder.getBuffer().get()); //1 byte
- assertEquals(0x02, mockProtoEncoder.getBuffer().get()); //2 byte, length
- assertEquals(ConnAckMessage.CONNECTION_ACCEPTED, mockProtoEncoder.getBuffer().skip(1).get());
- }
-}
diff --git a/parser/src/test/java/org/dna/mqtt/moquette/proto/ConnectDecoderTest.java b/parser/src/test/java/org/dna/mqtt/moquette/proto/ConnectDecoderTest.java
deleted file mode 100644
index 583aecf6..00000000
--- a/parser/src/test/java/org/dna/mqtt/moquette/proto/ConnectDecoderTest.java
+++ /dev/null
@@ -1,190 +0,0 @@
-package org.dna.mqtt.moquette.proto;
-
-import java.io.UnsupportedEncodingException;
-import org.apache.mina.core.buffer.IoBuffer;
-import org.apache.mina.filter.codec.demux.MessageDecoder;
-import org.apache.mina.filter.codec.demux.MessageDecoderResult;
-import org.dna.mqtt.moquette.proto.TestUtils.MockProtocolDecoderOutput;
-import org.dna.mqtt.moquette.proto.messages.AbstractMessage;
-import org.dna.mqtt.moquette.proto.messages.ConnectMessage;
-import static org.junit.Assert.*;
-import org.junit.Before;
-import org.junit.Test;
-
-public class ConnectDecoderTest {
-
- IoBuffer m_buff;
- ConnectDecoder m_msgdec;
- MockProtocolDecoderOutput m_mockProtoDecoder;
-
- @Before
- public void setUp() {
- m_buff = IoBuffer.allocate(4);
- m_msgdec = new ConnectDecoder();
- m_mockProtoDecoder = new MockProtocolDecoderOutput();
- }
-
- @Test
- public void testDecodable_OK() {
- m_buff.put((byte)(AbstractMessage.CONNECT << 4))
- .put((byte)0) //0 length
- .flip();
- assertEquals(MessageDecoder.OK , m_msgdec.decodable(null, m_buff));
- }
-
- @Test
- public void testDecodable_NOT_OK() {
- m_buff.put((byte)(AbstractMessage.CONNACK << 4))
- .put((byte)0) //0 length
- .flip();
- assertEquals(MessageDecoder.NOT_OK , m_msgdec.decodable(null, m_buff));
- }
-
- @Test
- public void testDecodable_NEED_DATA() {
- m_buff = IoBuffer.allocate(0);
- assertFalse(m_buff.hasRemaining());
- assertEquals(MessageDecoder.NEED_DATA , m_msgdec.decodable(null, m_buff));
- }
-
- @Test
- public void testDecodeRemainingLenght() {
- //1 byte length
- m_buff.put((byte)0x0).flip();
- assertEquals(0, Utils.decodeRemainingLenght(m_buff));
- m_buff.clear().put((byte) 0x007F).flip();
- assertEquals(127, Utils.decodeRemainingLenght(m_buff));
-
- //2 byte length
- m_buff.clear().put((byte) 0x80).put((byte) 0x01).flip();
- assertEquals(128, Utils.decodeRemainingLenght(m_buff));
- m_buff.clear().put((byte) 0xFF).put((byte) 0x7F).flip();
- assertEquals(16383, Utils.decodeRemainingLenght(m_buff));
-
- //3 byte length
- m_buff.clear().put((byte) 0x80).put((byte) 0x80).put((byte)0x01).flip();
- assertEquals(16384, Utils.decodeRemainingLenght(m_buff));
- m_buff.clear().put((byte) 0xFF).put((byte) 0xFF).put((byte)0x7F).flip();
- assertEquals(2097151, Utils.decodeRemainingLenght(m_buff));
-
- //4 byte length
- m_buff.clear().put((byte) 0x80).put((byte) 0x80).put((byte)0x80).put((byte)0x01).flip();
- assertEquals(2097152, Utils.decodeRemainingLenght(m_buff));
- m_buff.clear().put((byte) 0xFF).put((byte) 0xFF).put((byte) 0xFF).put((byte)0x7F).flip();
- assertEquals(268435455, Utils.decodeRemainingLenght(m_buff));
- }
-
- @Test
- public void testBaseHeader() throws Exception {
- m_buff = IoBuffer.allocate(14);
- initBaseHeader(m_buff);
- m_buff.flip();
-
- //Excercise
- m_msgdec.decode(null, m_buff, m_mockProtoDecoder);
-
- //Verify
- verifyBaseHeader(m_mockProtoDecoder.getMessage());
- }
-
- @Test
- public void testBaseHeader_ClientID() throws UnsupportedEncodingException, Exception {
- m_buff = IoBuffer.allocate(40);
- initHeader(m_buff, (byte) 38);
- encodeString(m_buff, "ABCDEFGH");
- encodeString(m_buff, "Topic");
- encodeString(m_buff, "Message");
- m_buff.flip();
-
- //Excercise
- m_msgdec.decode(null, m_buff, m_mockProtoDecoder);
-
- //Verify
- verifyBaseHeader(m_mockProtoDecoder.getMessage());
- assertEquals("ABCDEFGH", m_mockProtoDecoder.getMessage().getClientID());
- assertEquals("Topic", m_mockProtoDecoder.getMessage().getWillTopic());
- assertEquals("Message", m_mockProtoDecoder.getMessage().getWillMessage());
- }
-
- @Test
- public void testBaseHeader_extra_with_user_pwd() throws UnsupportedEncodingException, Exception {
- m_buff = IoBuffer.allocate(55);
- initHeader(m_buff, (byte) 53);
- encodeString(m_buff, "ABCDEFGH");
- encodeString(m_buff, "Topic");
- encodeString(m_buff, "Message");
- encodeString(m_buff, "Fakeuser");
- encodeString(m_buff, "pwd");
- m_buff.flip();
-
- //Excercise
- m_msgdec.decode(null, m_buff, m_mockProtoDecoder);
-
- //Verify
- verifyBaseHeader(m_mockProtoDecoder.getMessage());
- assertEquals(AbstractMessage.CONNECT, m_mockProtoDecoder.getMessage().getMessageType());
- assertEquals("ABCDEFGH", m_mockProtoDecoder.getMessage().getClientID());
- assertEquals("Topic", m_mockProtoDecoder.getMessage().getWillTopic());
- assertEquals("Message", m_mockProtoDecoder.getMessage().getWillMessage());
- assertEquals("Fakeuser", m_mockProtoDecoder.getMessage().getUsername());
- assertEquals("pwd", m_mockProtoDecoder.getMessage().getPassword());
- }
-
- @Test
- public void testBadFlagUserPwd() throws UnsupportedEncodingException, Exception {
- m_buff = IoBuffer.allocate(14);
- m_buff.clear().put((byte)(AbstractMessage.CONNECT << 4)).put((byte)12);
- //Proto name
- encodeString(m_buff, "MQIsdp");
- //version
- m_buff.put((byte)3);
- //conn flags
- m_buff.put((byte)0x4E); //sets user to false and password to true
- //keepAlive
- m_buff.put((byte)0).put((byte) 0x0A);
- m_buff.flip();
-
- //Excercise
- MessageDecoderResult res = m_msgdec.decode(null, m_buff, m_mockProtoDecoder);
-
- assertNull(m_mockProtoDecoder.getMessage());
- assertEquals(MessageDecoder.NOT_OK, res);
- }
-
- /**
- * Encode and insert the given string into the given buff
- */
- private IoBuffer encodeString(IoBuffer buff, String str) throws UnsupportedEncodingException {
- buff.put(Utils.encodeString(str));
- return buff;
- }
-
- private void initBaseHeader(IoBuffer buff) throws UnsupportedEncodingException {
- initHeader(buff, (byte)0x0C);
- }
-
- private void initHeader(IoBuffer buff, byte remaingLength) throws UnsupportedEncodingException {
- buff.clear().put((byte)(AbstractMessage.CONNECT << 4)).put(remaingLength);
- //Proto name
- encodeString(buff, "MQIsdp");
- //version
- buff.put((byte)3);
- //conn flags
- buff.put((byte)0xCE);
- //keepAlive
- buff.put((byte)0).put((byte) 0x0A);
- }
-
- private void verifyBaseHeader(ConnectMessage connMessage) {
- assertNotNull(connMessage);
- assertEquals("MQIsdp", connMessage.getProtocolName());
- assertEquals(3, connMessage.getProcotolVersion());
- assertTrue(connMessage.isUserFlag());
- assertTrue(connMessage.isPasswordFlag());
- assertTrue(connMessage.isCleanSession());
- assertEquals(10, connMessage.getKeepAlive());
- assertTrue(connMessage.isWillFlag());
- assertFalse(connMessage.isWillRetain());
- assertEquals(1, connMessage.getWillQos());
- }
-}
diff --git a/parser/src/test/java/org/dna/mqtt/moquette/proto/ConnectEncoderTest.java b/parser/src/test/java/org/dna/mqtt/moquette/proto/ConnectEncoderTest.java
deleted file mode 100644
index a67d6cd4..00000000
--- a/parser/src/test/java/org/dna/mqtt/moquette/proto/ConnectEncoderTest.java
+++ /dev/null
@@ -1,147 +0,0 @@
-package org.dna.mqtt.moquette.proto;
-
-import org.dna.mqtt.moquette.proto.ConnectEncoder;
-import org.dna.mqtt.moquette.proto.Utils;
-import org.dna.mqtt.moquette.proto.messages.ConnectMessage;
-import org.junit.Before;
-import org.junit.Test;
-import static org.junit.Assert.*;
-import static org.dna.mqtt.moquette.proto.TestUtils.*;
-
-/**
- *
- * @author andrea
- */
-public class ConnectEncoderTest {
-
- ConnectEncoder m_encoder;
- TestUtils.MockProtocolEncoderOutput m_mockProtoEncoder;
-
- @Before
- public void setUp() {
- m_encoder = new ConnectEncoder();
- m_mockProtoEncoder = new TestUtils.MockProtocolEncoderOutput();
- }
-
- @Test(expected=IllegalAccessException.class)
- public void testEncodeRemainingLength_invalid_upper() throws IllegalAccessException {
- Utils.encodeRemainingLength(Utils.MAX_LENGTH_LIMIT + 1);
- }
-
- @Test(expected=IllegalAccessException.class)
- public void testEncodeRemainingLength_invalid_lower() throws IllegalAccessException {
- Utils.encodeRemainingLength(-1);
- }
-
- @Test
- public void testEncodeRemainingLenght() throws IllegalAccessException {
- //1 byte length
- verifyBuff(1, new byte[]{0}, Utils.encodeRemainingLength(0));
- verifyBuff(1, new byte[]{0x7F}, Utils.encodeRemainingLength(127));
-
- //2 byte length
- verifyBuff(2, new byte[]{(byte)0x80, 0x01}, Utils.encodeRemainingLength(128));
- verifyBuff(2, new byte[]{(byte)0xFF, 0x7F}, Utils.encodeRemainingLength(16383));
-
- //3 byte length
- verifyBuff(3, new byte[]{(byte)0x80, (byte)0x80, 0x01}, Utils.encodeRemainingLength(16384));
- verifyBuff(3, new byte[]{(byte)0xFF, (byte)0xFF, 0x7F}, Utils.encodeRemainingLength(2097151));
-
- //4 byte length
- verifyBuff(4, new byte[]{(byte)0x80, (byte)0x80, (byte)0x80, 0x01}, Utils.encodeRemainingLength(2097152));
- verifyBuff(4, new byte[]{(byte)0xFF, (byte)0xFF, (byte)0xFF, 0x7F}, Utils.encodeRemainingLength(268435455));
- }
-
- @Test
- public void testBaseHeader() throws Exception {
- ConnectMessage msg = new ConnectMessage();
- msg.setWillRetain(true);
- msg.setWillQos((byte)2);
- msg.setWillFlag(false);
- msg.setCleanSession(true);
- msg.setKeepAlive(512);
-
- //Exercise
- m_encoder.encode(null, msg, m_mockProtoEncoder);
-
- //Verify
- assertEquals(0x10, m_mockProtoEncoder.getBuffer().get()); //1 byte
- assertEquals(12, m_mockProtoEncoder.getBuffer().get()); //remaining length
- verifyString("MQIsdp", m_mockProtoEncoder.getBuffer());
- assertEquals(0x03, m_mockProtoEncoder.getBuffer().get()); //protocol version
- assertEquals(0x32, m_mockProtoEncoder.getBuffer().get()); //flags
- assertEquals(2, m_mockProtoEncoder.getBuffer().get()); //keepAliveTimer msb
- assertEquals(0, m_mockProtoEncoder.getBuffer().get()); //keepAliveTimer lsb
- }
-
- @Test
- public void testCompleteHeader() throws Exception {
- ConnectMessage msg = new ConnectMessage();
- msg.setWillRetain(true);
- msg.setWillQos((byte)2);
- msg.setWillFlag(true);
- msg.setCleanSession(true);
- msg.setKeepAlive(512);
-
- //variable part
- msg.setClientID("ABCDEF");
- msg.setWillTopic("Topic");
- msg.setWillMessage("Message");
-
- //Exercise
- m_encoder.encode(null, msg, m_mockProtoEncoder);
-
- //Verify
- assertEquals(0x10, m_mockProtoEncoder.getBuffer().get()); //1 byte
- assertEquals(36, m_mockProtoEncoder.getBuffer().get()); //remaining length
- verifyString("MQIsdp", m_mockProtoEncoder.getBuffer());
- assertEquals(0x03, m_mockProtoEncoder.getBuffer().get()); //protocol version
- assertEquals(0x36, m_mockProtoEncoder.getBuffer().get()); //flags
- assertEquals(2, m_mockProtoEncoder.getBuffer().get()); //keepAliveTimer msb
- assertEquals(0, m_mockProtoEncoder.getBuffer().get()); //keepAliveTimer lsb
-
- //Variable part
- verifyString("ABCDEF", m_mockProtoEncoder.getBuffer());
- verifyString("Topic", m_mockProtoEncoder.getBuffer());
- verifyString("Message", m_mockProtoEncoder.getBuffer());
- }
-
- @Test
- public void testCompleteHeaderWIthUser_password() throws Exception {
- ConnectMessage msg = new ConnectMessage();
- msg.setUserFlag(true);
- msg.setPasswordFlag(true);
- msg.setWillRetain(true);
- msg.setWillQos((byte)2);
- msg.setWillFlag(true);
- msg.setCleanSession(true);
- msg.setKeepAlive(512);
-
- //variable part
- msg.setClientID("ABCDEF");
- msg.setWillTopic("Topic");
- msg.setWillMessage("Message");
- msg.setUsername("Pablo");
- msg.setPassword("PBL");
-
- //Exercise
- m_encoder.encode(null, msg, m_mockProtoEncoder);
-
- //Verify
- assertEquals(0x10, m_mockProtoEncoder.getBuffer().get()); //1 byte
- assertEquals(48, m_mockProtoEncoder.getBuffer().get()); //remaining length
- verifyString("MQIsdp", m_mockProtoEncoder.getBuffer());
- assertEquals(0x03, m_mockProtoEncoder.getBuffer().get()); //protocol version
- assertEquals((byte)0xF6, (byte)m_mockProtoEncoder.getBuffer().get()); //flags
- assertEquals(2, m_mockProtoEncoder.getBuffer().get()); //keepAliveTimer msb
- assertEquals(0, m_mockProtoEncoder.getBuffer().get()); //keepAliveTimer lsb
-
- //Variable part
- verifyString("ABCDEF", m_mockProtoEncoder.getBuffer());
- verifyString("Topic", m_mockProtoEncoder.getBuffer());
- verifyString("Message", m_mockProtoEncoder.getBuffer());
- verifyString("Pablo", m_mockProtoEncoder.getBuffer());//username
- verifyString("PBL", m_mockProtoEncoder.getBuffer());//password
- }
-
-}
diff --git a/parser/src/test/java/org/dna/mqtt/moquette/proto/PubAckDecoderTest.java b/parser/src/test/java/org/dna/mqtt/moquette/proto/PubAckDecoderTest.java
deleted file mode 100644
index 3cc5a178..00000000
--- a/parser/src/test/java/org/dna/mqtt/moquette/proto/PubAckDecoderTest.java
+++ /dev/null
@@ -1,51 +0,0 @@
-package org.dna.mqtt.moquette.proto;
-
-import org.apache.mina.core.buffer.IoBuffer;
-import org.apache.mina.filter.codec.demux.MessageDecoder;
-import org.apache.mina.filter.codec.demux.MessageDecoderResult;
-import org.dna.mqtt.moquette.proto.TestUtils.MockProtocolDecoderOutput;
-import org.dna.mqtt.moquette.proto.messages.AbstractMessage;
-import org.dna.mqtt.moquette.proto.messages.PubAckMessage;
-import static org.junit.Assert.*;
-import org.junit.Before;
-import org.junit.Test;
-
-/**
- *
- * @author andrea
- */
-public class PubAckDecoderTest {
- IoBuffer m_buff;
- PubAckDecoder m_msgdec;
- MockProtocolDecoderOutput m_mockProtoDecoder;
-
- @Before
- public void setUp() {
- m_buff = IoBuffer.allocate(4);
- m_msgdec = new PubAckDecoder();
- m_mockProtoDecoder = new MockProtocolDecoderOutput();
- }
-
- @Test
- public void testHeader() throws Exception {
- m_buff = IoBuffer.allocate(14);
- int messageId = 0xAABB;
- initHeader(m_buff, messageId);
- m_buff.flip();
-
- //Exercise
- MessageDecoderResult res = m_msgdec.decode(null, m_buff, m_mockProtoDecoder);
-
- assertNotNull(m_mockProtoDecoder.getMessage());
- assertEquals(MessageDecoder.OK, res);
- assertEquals(messageId, m_mockProtoDecoder.getMessage().getMessageID().intValue());
- assertEquals(AbstractMessage.PUBACK, m_mockProtoDecoder.getMessage().getMessageType());
- }
-
- private void initHeader(IoBuffer buff, int messageID) {
- buff.clear().put((byte)(AbstractMessage.PUBACK << 4)).put((byte)2);
-
- //return code
- Utils.writeWord(buff, messageID);
- }
-}
diff --git a/parser/src/test/java/org/dna/mqtt/moquette/proto/PubAckEncoderTest.java b/parser/src/test/java/org/dna/mqtt/moquette/proto/PubAckEncoderTest.java
deleted file mode 100644
index e7aa6168..00000000
--- a/parser/src/test/java/org/dna/mqtt/moquette/proto/PubAckEncoderTest.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package org.dna.mqtt.moquette.proto;
-
-import org.dna.mqtt.moquette.proto.messages.PubAckMessage;
-import org.junit.Test;
-import static org.junit.Assert.*;
-/**
- *
- * @author andrea
- */
-public class PubAckEncoderTest {
-
- @Test
- public void testHeaderEncode() throws Exception {
- int messageID = 0xAABB;
- TestUtils.MockProtocolEncoderOutput mockProtoEncoder = new TestUtils.MockProtocolEncoderOutput();
- PubAckEncoder encoder = new PubAckEncoder();
- PubAckMessage msg = new PubAckMessage();
- msg.setMessageID(messageID);
-
- //Exercise
- encoder.encode(null, msg, mockProtoEncoder);
-
- //Verify
- assertEquals(0x40, mockProtoEncoder.getBuffer().get()); //1 byte
- assertEquals(0x02, mockProtoEncoder.getBuffer().get()); //2 byte, length
- assertEquals((byte)0xAA, mockProtoEncoder.getBuffer().get());
- assertEquals((byte)0xBB, mockProtoEncoder.getBuffer().get());
- }
-
-}
diff --git a/parser/src/test/java/org/dna/mqtt/moquette/proto/PublishDecoderTest.java b/parser/src/test/java/org/dna/mqtt/moquette/proto/PublishDecoderTest.java
deleted file mode 100644
index 153d0564..00000000
--- a/parser/src/test/java/org/dna/mqtt/moquette/proto/PublishDecoderTest.java
+++ /dev/null
@@ -1,175 +0,0 @@
-package org.dna.mqtt.moquette.proto;
-
-import org.apache.mina.core.buffer.IoBuffer;
-import org.apache.mina.filter.codec.demux.MessageDecoder;
-import org.apache.mina.filter.codec.demux.MessageDecoderResult;
-import org.dna.mqtt.moquette.proto.TestUtils.MockProtocolDecoderOutput;
-import org.dna.mqtt.moquette.proto.messages.AbstractMessage;
-import org.dna.mqtt.moquette.proto.messages.PublishMessage;
-import static org.junit.Assert.*;
-import org.junit.Before;
-import org.junit.Test;
-
-/**
- *
- * @author andrea
- */
-public class PublishDecoderTest {
-
- IoBuffer m_buff;
- PublishDecoder m_msgdec;
- MockProtocolDecoderOutput m_mockProtoDecoder;
-
- @Before
- public void setUp() {
- m_buff = IoBuffer.allocate(4);
- m_msgdec = new PublishDecoder();
- m_mockProtoDecoder = new MockProtocolDecoderOutput();
- }
-
- @Test
- public void testDecodable_OK() {
- m_buff.put((byte) (AbstractMessage.PUBLISH << 4))
- .put((byte) 0) //0 length
- .flip();
- assertEquals(MessageDecoder.OK, m_msgdec.decodable(null, m_buff));
- }
-
- @Test
- public void testHeader() throws Exception {
- m_buff = IoBuffer.allocate(14);
- initHeader(m_buff);
- m_buff.flip();
-
- //Exercise
- MessageDecoderResult res = m_msgdec.decode(null, m_buff, m_mockProtoDecoder);
-
- assertNotNull(m_mockProtoDecoder.getMessage());
- assertEquals(MessageDecoder.OK, res);
- assertEquals("Fake Topic", m_mockProtoDecoder.getMessage().getTopicName());
- assertNull(m_mockProtoDecoder.getMessage().getMessageID());
- assertEquals(AbstractMessage.PUBLISH, m_mockProtoDecoder.getMessage().getMessageType());
- }
-
- @Test
- public void testHeaderWithMessageID() throws Exception {
- m_buff = IoBuffer.allocate(14).setAutoExpand(true);
- int messageID = 123;
- initHeaderWithMessageID(m_buff, messageID);
- m_buff.flip();
-
- //Exercise
- MessageDecoderResult res = m_msgdec.decode(null, m_buff, m_mockProtoDecoder);
-
- assertNotNull(m_mockProtoDecoder.getMessage());
- assertEquals(MessageDecoder.OK, res);
- assertEquals("Fake Topic", m_mockProtoDecoder.getMessage().getTopicName());
- assertEquals(messageID, (int) m_mockProtoDecoder.getMessage().getMessageID());
- }
-
- @Test
- public void testHeaderWithMessageID_Payload() throws Exception {
- m_buff = IoBuffer.allocate(14).setAutoExpand(true);
- int messageID = 123;
- byte[] payload = new byte[]{0x0A, 0x0B, 0x0C};
- initHeaderWithMessageID_Payload(m_buff, messageID, payload);
- m_buff.flip();
-
- //Exercise
- MessageDecoderResult res = m_msgdec.decode(null, m_buff, m_mockProtoDecoder);
-
- assertNotNull(m_mockProtoDecoder.getMessage());
- assertEquals(MessageDecoder.OK, res);
- assertEquals("Fake Topic", m_mockProtoDecoder.getMessage().getTopicName());
- assertEquals(messageID, (int) m_mockProtoDecoder.getMessage().getMessageID());
- TestUtils.verifyEquals(payload, m_mockProtoDecoder.getMessage().getPayload());
- }
-
- @Test
- public void testBugOnRealCase() throws Exception {
- byte[] overallMessage = new byte[]{0x30, 0x17, //fixed header, 25 byte lenght
- 0x00, 0x06, 0x2f, 0x74, 0x6f, 0x70, 0x69, 0x63, //[/topic] string 2 len + 6 content
- 0x54, 0x65, 0x73, 0x74, 0x20, 0x6d, 0x79, // [Test my payload] encoding
- 0x20, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64};
- m_buff = IoBuffer.allocate(overallMessage.length).setAutoExpand(true);
- m_buff.put(overallMessage);
- m_buff.flip();
-
- //Exercise
- MessageDecoderResult res = m_msgdec.decode(null, m_buff, m_mockProtoDecoder);
-
- assertNotNull(m_mockProtoDecoder.getMessage());
- assertEquals(MessageDecoder.OK, res);
- }
-
- @Test
- public void testDecodeBigContent() throws Exception {
- int size = 129;
- IoBuffer payload = TestUtils.generateRandomPayload(size);
-
- IoBuffer firstPublish = generatePublishQoS0(payload);
- IoBuffer secondPublish = generatePublishQoS0(TestUtils.generateRandomPayload(size));
-
- IoBuffer doubleMessageBuf = IoBuffer.allocate(size * 2).setAutoExpand(true);
- doubleMessageBuf.put(firstPublish).put(secondPublish).flip();
-
-
- //Exercise
- MessageDecoderResult res = m_msgdec.decode(null, doubleMessageBuf, m_mockProtoDecoder);
-
- assertEquals(MessageDecoder.OK, res);
- PublishMessage pubMsg = m_mockProtoDecoder.getMessage();
- assertNotNull(pubMsg);
-
- res = m_msgdec.decode(null, doubleMessageBuf, m_mockProtoDecoder);
-
- assertNotNull(m_mockProtoDecoder.getMessage());
- assertEquals(MessageDecoder.OK, res);
-
- m_buff.flip();
- }
-
- private void initHeader(IoBuffer buff) throws IllegalAccessException {
- IoBuffer tmp = IoBuffer.allocate(4).setAutoExpand(true).put(Utils.encodeString("Fake Topic")).flip();
- buff.clear().put((byte) (AbstractMessage.PUBLISH << 4)).put(Utils.encodeRemainingLength(tmp.remaining()));
- //topic name
- buff.put(tmp);
- }
-
- private void initHeaderWithMessageID(IoBuffer buff, int messageID) throws IllegalAccessException {
- IoBuffer tmp = IoBuffer.allocate(4).setAutoExpand(true).put(Utils.encodeString("Fake Topic"));
- Utils.writeWord(tmp, messageID);
- tmp.flip();
- buff.clear().put((byte) (AbstractMessage.PUBLISH << 4 | 0x02)) //set Qos to 1
- .put(Utils.encodeRemainingLength(tmp.remaining()));
- //topic name
- buff.put(tmp);
- }
-
- private void initHeaderWithMessageID_Payload(IoBuffer buff, int messageID, byte[] payload) throws IllegalAccessException {
- IoBuffer tmp = IoBuffer.allocate(4).setAutoExpand(true).put(Utils.encodeString("Fake Topic"));
- Utils.writeWord(tmp, messageID);
- tmp.put(payload);
- tmp.flip();
- buff.clear().put((byte) (AbstractMessage.PUBLISH << 4 | 0x02)) //set Qos to 1
- .put(Utils.encodeRemainingLength(tmp.remaining()));
- //topic name
- buff.put(tmp);
- }
-
- private IoBuffer generatePublishQoS0(IoBuffer payload) throws IllegalAccessException {
- int size = payload.capacity();
- IoBuffer messageBody = IoBuffer.allocate(size).setAutoExpand(true);
- messageBody.put(Utils.encodeString("/topic"));
-
- //ONLY for QoS > 1 Utils.writeWord(messageBody, messageID);
- messageBody.put(payload).flip();
-
- IoBuffer completeMsg = IoBuffer.allocate(size).setAutoExpand(true);
- completeMsg.clear().put((byte) (AbstractMessage.PUBLISH << 4 | 0x00)) //set Qos to 0
- .put(Utils.encodeRemainingLength(messageBody.remaining()));
- completeMsg.put(messageBody).flip();
-
- return completeMsg;
- }
-}
diff --git a/parser/src/test/java/org/dna/mqtt/moquette/proto/PublishEncoderTest.java b/parser/src/test/java/org/dna/mqtt/moquette/proto/PublishEncoderTest.java
deleted file mode 100644
index e11404be..00000000
--- a/parser/src/test/java/org/dna/mqtt/moquette/proto/PublishEncoderTest.java
+++ /dev/null
@@ -1,166 +0,0 @@
-package org.dna.mqtt.moquette.proto;
-
-import org.dna.mqtt.moquette.proto.messages.AbstractMessage.QOSType;
-import org.dna.mqtt.moquette.proto.messages.PublishMessage;
-import org.junit.Before;
-import org.junit.Test;
-import static org.junit.Assert.*;
-import static org.dna.mqtt.moquette.proto.TestUtils.*;
-
-/**
- *
- * @author andrea
- */
-public class PublishEncoderTest {
-
- PublishEncoder m_encoder;
- TestUtils.MockProtocolEncoderOutput m_mockProtoEncoder;
-
- @Before
- public void setUp() {
- m_encoder = new PublishEncoder();
- m_mockProtoEncoder = new TestUtils.MockProtocolEncoderOutput();
- }
-
- @Test
- public void testEncodeWithQos_0_noMessageID() throws Exception {
- String topic = "/photos";
- PublishMessage msg = new PublishMessage();
- msg.setQos(QOSType.MOST_ONE);
- msg.setTopicName(topic);
-
- //variable part
- byte[] payload = new byte[]{0x0A, 0x0B, 0x0C};
- msg.setPayload(payload);
-
- //Exercise
- m_encoder.encode(null, msg, m_mockProtoEncoder);
-
- //Verify
- assertEquals(0x30, m_mockProtoEncoder.getBuffer().get()); //1 byte
- //(2+7) topic + 3 payload
- assertEquals(12, m_mockProtoEncoder.getBuffer().get()); //remaining length
-
- //Variable part
- verifyString(topic, m_mockProtoEncoder.getBuffer());
- verifyBuff(payload.length, payload, m_mockProtoEncoder.getBuffer());
- }
-
- @Test
- public void testEncodeWithQos_1_MessageID() throws Exception {
- String topic = "/photos";
- PublishMessage msg = new PublishMessage();
- msg.setQos(QOSType.LEAST_ONE);
- msg.setMessageID(1);
- msg.setTopicName(topic);
-
- //variable part
- byte[] payload = new byte[]{0x0A, 0x0B, 0x0C};
- msg.setPayload(payload);
-
- //Exercise
- m_encoder.encode(null, msg, m_mockProtoEncoder);
-
- //Verify
- assertEquals(0x32, m_mockProtoEncoder.getBuffer().get()); //1 byte
- //(2+7) topic + 2 messageID + 3 payload
- assertEquals(14, m_mockProtoEncoder.getBuffer().get()); //remaining length
-
- //Variable part
- verifyString(topic, m_mockProtoEncoder.getBuffer());
- assertEquals(0, m_mockProtoEncoder.getBuffer().get()); //MessageID MSB
- assertEquals(1, m_mockProtoEncoder.getBuffer().get()); //MessageID LSB
- verifyBuff(payload.length, payload, m_mockProtoEncoder.getBuffer());
- }
-
- @Test(expected = IllegalArgumentException.class)
- public void testEncodeWithQos_1_noMessageID_fail() throws Exception {
- String topic = "pictures/photos";
- PublishMessage msg = new PublishMessage();
- msg.setQos(QOSType.LEAST_ONE);
- msg.setTopicName(topic);
-
- //Exercise
- m_encoder.encode(null, msg, m_mockProtoEncoder);
- }
-
- @Test(expected = IllegalArgumentException.class)
- public void testEncode_empty_topic() throws Exception {
- PublishMessage msg = new PublishMessage();
- msg.setQos(QOSType.LEAST_ONE);
- msg.setMessageID(1);
-
- //Exercise
- m_encoder.encode(null, msg, m_mockProtoEncoder);
- }
-
- @Test(expected = IllegalArgumentException.class)
- public void testEncode_null_topic() throws Exception {
- PublishMessage msg = new PublishMessage();
- msg.setQos(QOSType.LEAST_ONE);
- msg.setMessageID(1);
- msg.setTopicName(null);
-
- //Exercise
- m_encoder.encode(null, msg, m_mockProtoEncoder);
- }
-
- @Test(expected = IllegalArgumentException.class)
- public void testEncode_qos_reserved() throws Exception {
- PublishMessage msg = new PublishMessage();
- msg.setQos(QOSType.RESERVED);
- msg.setMessageID(1);
- msg.setTopicName(null);
-
- //variable part
- byte[] payload = new byte[]{0x0A, 0x0B, 0x0C};
- msg.setPayload(payload);
-
- //Exercise
- m_encoder.encode(null, msg, m_mockProtoEncoder);
- }
-
- @Test
- public void testBugMissedMessageIDEncoding() throws Exception{
- String topic = "/topic";
- PublishMessage msg = new PublishMessage();
- msg.setQos(QOSType.MOST_ONE);
- msg.setTopicName(topic);
-
- //variable part
- byte[] payload = "Test my payload".getBytes();
- msg.setPayload(payload);
-
- //Exercise
- m_encoder.encode(null, msg, m_mockProtoEncoder);
-
- //Verify
- //2 byte header + (2+6) topic name + [2 message ID if QoQ <> 0]+ payload
- int size = m_mockProtoEncoder.getBuffer().remaining();
- assertEquals(10+payload.length, size);
- assertEquals(0x30, m_mockProtoEncoder.getBuffer().get()); //1 byte
- assertEquals(23, m_mockProtoEncoder.getBuffer().get()); //1 byte the length
- }
-
- @Test
- public void testEncodeBigMessage() throws Exception {
- byte[] payload = new byte[256];
-
- TestUtils.generateRandomPayload(256).get(payload);
-
- String topic = "/topic";
- PublishMessage msg = new PublishMessage();
- msg.setQos(QOSType.MOST_ONE);
- msg.setTopicName(topic);
-
- //variable part
- msg.setPayload(payload);
-
- //Exercise
- m_encoder.encode(null, msg, m_mockProtoEncoder);
-
- int size = m_mockProtoEncoder.getBuffer().remaining();
- assertEquals(11+payload.length, size);
- assertEquals(0x30, m_mockProtoEncoder.getBuffer().get()); //1 byte
- }
-}
diff --git a/parser/src/test/java/org/dna/mqtt/moquette/proto/SubAckDecoderTest.java b/parser/src/test/java/org/dna/mqtt/moquette/proto/SubAckDecoderTest.java
deleted file mode 100644
index 5de67eb0..00000000
--- a/parser/src/test/java/org/dna/mqtt/moquette/proto/SubAckDecoderTest.java
+++ /dev/null
@@ -1,81 +0,0 @@
-package org.dna.mqtt.moquette.proto;
-
-import java.util.List;
-import org.apache.mina.core.buffer.IoBuffer;
-import org.apache.mina.filter.codec.demux.MessageDecoder;
-import org.apache.mina.filter.codec.demux.MessageDecoderResult;
-import org.dna.mqtt.moquette.proto.TestUtils.MockProtocolDecoderOutput;
-import org.dna.mqtt.moquette.proto.messages.AbstractMessage;
-import org.dna.mqtt.moquette.proto.messages.AbstractMessage.QOSType;
-import org.dna.mqtt.moquette.proto.messages.SubAckMessage;
-import static org.junit.Assert.*;
-import org.junit.Before;
-import org.junit.Test;
-
-/**
- *
- * @author andrea
- */
-public class SubAckDecoderTest {
-
- IoBuffer m_buff;
- SubAckDecoder m_msgdec;
- MockProtocolDecoderOutput m_mockProtoDecoder;
-
- @Before
- public void setUp() {
- m_buff = IoBuffer.allocate(7);
- m_msgdec = new SubAckDecoder();
- m_mockProtoDecoder = new MockProtocolDecoderOutput();
- }
-
- @Test
- public void testBadQos() throws Exception {
- initHeaderQos(m_buff, 0xAABB, QOSType.LEAST_ONE, QOSType.MOST_ONE, QOSType.MOST_ONE);
- m_buff.flip();
-
- //Excercise
- MessageDecoderResult res = m_msgdec.decode(null, m_buff, m_mockProtoDecoder);
-
- //Verify
- assertEquals(MessageDecoderResult.OK, res);
- assertEquals(0xAABB, m_mockProtoDecoder.getMessage().getMessageID().intValue());
- List qoses = m_mockProtoDecoder.getMessage().types();
- assertEquals(3, qoses.size());
- assertEquals(QOSType.LEAST_ONE, qoses.get(0));
- assertEquals(QOSType.MOST_ONE, qoses.get(1));
- assertEquals(QOSType.MOST_ONE, qoses.get(2));
- assertEquals(AbstractMessage.SUBACK, m_mockProtoDecoder.getMessage().getMessageType());
- }
-
-
- @Test
- public void testBugBadRemainingCalculation() throws Exception {
- byte[] overallMessage = new byte[] {(byte)0x90, 0x03, //fixed header
- 0x00, 0x0A, //MSG ID
- 0x01}; //QoS array
- m_buff = IoBuffer.allocate(overallMessage.length).setAutoExpand(true);
- m_buff.put(overallMessage);
- m_buff.flip();
-
- //Exercise
- MessageDecoderResult res = m_msgdec.decode(null, m_buff, m_mockProtoDecoder);
-
- assertNotNull(m_mockProtoDecoder.getMessage());
- assertEquals(MessageDecoder.OK, res);
- SubAckMessage message = (SubAckMessage) m_mockProtoDecoder.getMessage();
- assertEquals(0x0A, message.getMessageID().intValue());
- assertEquals(1, message.types().size());
- assertEquals(AbstractMessage.QOSType.LEAST_ONE, message.types().get(0));
- }
-
- private void initHeaderQos(IoBuffer buff, int messageID, QOSType... qoss) throws IllegalAccessException {
- buff.clear().put((byte) (AbstractMessage.SUBACK << 4)).
- put(Utils.encodeRemainingLength(2 + qoss.length));
-
- Utils.writeWord(buff, messageID);
- for (QOSType qos : qoss) {
- buff.put((byte)qos.ordinal());
- }
- }
-}
diff --git a/parser/src/test/java/org/dna/mqtt/moquette/proto/SubAckEncoderTest.java b/parser/src/test/java/org/dna/mqtt/moquette/proto/SubAckEncoderTest.java
deleted file mode 100644
index 1cf00bd6..00000000
--- a/parser/src/test/java/org/dna/mqtt/moquette/proto/SubAckEncoderTest.java
+++ /dev/null
@@ -1,57 +0,0 @@
-package org.dna.mqtt.moquette.proto;
-
-import org.dna.mqtt.moquette.proto.messages.AbstractMessage;
-import org.dna.mqtt.moquette.proto.messages.AbstractMessage.QOSType;
-import org.dna.mqtt.moquette.proto.messages.SubAckMessage;
-import org.junit.Before;
-import org.junit.Test;
-import static org.junit.Assert.*;
-
-/**
- *
- * @author andrea
- */
-public class SubAckEncoderTest {
- SubAckEncoder m_encoder;
- TestUtils.MockProtocolEncoderOutput m_mockProtoEncoder;
-
- @Before
- public void setUp() {
- m_encoder = new SubAckEncoder();
- m_mockProtoEncoder = new TestUtils.MockProtocolEncoderOutput();
- }
-
- @Test(expected = IllegalArgumentException.class)
- public void testEncodeWithNoQoss() throws Exception {
- SubAckMessage msg = new SubAckMessage();
- msg.setMessageID(123);
-
- //Exercise
- m_encoder.encode(null, msg, m_mockProtoEncoder);
- }
-
- @Test
- public void testEncodeWithMultipleQos() throws Exception {
- SubAckMessage msg = new SubAckMessage();
-
- int messageID = 0xAABB;
- msg.setMessageID(messageID);
- msg.addType(QOSType.MOST_ONE);
- msg.addType(QOSType.LEAST_ONE);
- msg.addType(QOSType.EXACTLY_ONCE);
-
- //Exercise
- m_encoder.encode(null, msg, m_mockProtoEncoder);
-
- //Verify
- assertEquals((byte) (AbstractMessage.SUBACK << 4 ), m_mockProtoEncoder.getBuffer().get()); //1 byte
- assertEquals(5, m_mockProtoEncoder.getBuffer().get()); //remaining length
-
- //Variable part
- assertEquals((byte)0xAA, m_mockProtoEncoder.getBuffer().get()); //MessageID MSB
- assertEquals((byte)0xBB, m_mockProtoEncoder.getBuffer().get()); //MessageID LSB
- assertEquals((byte)QOSType.MOST_ONE.ordinal(), m_mockProtoEncoder.getBuffer().get());
- assertEquals((byte)QOSType.LEAST_ONE.ordinal(), m_mockProtoEncoder.getBuffer().get());
- assertEquals((byte)QOSType.EXACTLY_ONCE.ordinal(), m_mockProtoEncoder.getBuffer().get());
- }
-}
diff --git a/parser/src/test/java/org/dna/mqtt/moquette/proto/SubscribeDecoderTest.java b/parser/src/test/java/org/dna/mqtt/moquette/proto/SubscribeDecoderTest.java
deleted file mode 100644
index e4abe329..00000000
--- a/parser/src/test/java/org/dna/mqtt/moquette/proto/SubscribeDecoderTest.java
+++ /dev/null
@@ -1,78 +0,0 @@
-package org.dna.mqtt.moquette.proto;
-
-import org.apache.mina.core.buffer.IoBuffer;
-import org.apache.mina.filter.codec.demux.MessageDecoderResult;
-import org.dna.mqtt.moquette.proto.TestUtils.MockProtocolDecoderOutput;
-import org.dna.mqtt.moquette.proto.messages.AbstractMessage;
-import org.dna.mqtt.moquette.proto.messages.SubscribeMessage;
-import org.dna.mqtt.moquette.proto.messages.SubscribeMessage.Couple;
-import static org.junit.Assert.*;
-import org.junit.Before;
-import org.junit.Test;
-
-/**
- *
- * @author andrea
- */
-public class SubscribeDecoderTest {
-
- IoBuffer m_buff;
- SubscribeDecoder m_msgdec;
- MockProtocolDecoderOutput m_mockProtoDecoder;
-
- @Before
- public void setUp() {
- m_buff = IoBuffer.allocate(4);
- m_msgdec = new SubscribeDecoder();
- m_mockProtoDecoder = new MockProtocolDecoderOutput();
- }
-
- @Test
- public void testBadQos() throws Exception {
- m_buff = IoBuffer.allocate(2);
- initHeaderBadQos(m_buff);
- m_buff.flip();
-
- //Excercise
- MessageDecoderResult res = m_msgdec.decode(null, m_buff, m_mockProtoDecoder);
-
- //Verify
- assertEquals(MessageDecoderResult.NOT_OK, res);
- }
-
- @Test
- public void testMultiTopic() throws Exception {
- m_buff = IoBuffer.allocate(4).setAutoExpand(true);
- Couple c1 = new Couple((byte)2, "a/b");
- Couple c2 = new Couple((byte)1, "c/d/e");
- initMultiTopic(m_buff, 123, c1, c2);
- m_buff.flip();
-
- //Excercise
- MessageDecoderResult res = m_msgdec.decode(null, m_buff, m_mockProtoDecoder);
-
- //Verify
- assertEquals(MessageDecoderResult.OK, res);
- assertEquals(2, m_mockProtoDecoder.getMessage().subscriptions().size());
- assertEquals(AbstractMessage.SUBSCRIBE, m_mockProtoDecoder.getMessage().getMessageType());
- }
-
- private void initHeaderBadQos(IoBuffer buff) {
- buff.clear().put((byte)(AbstractMessage.SUBSCRIBE << 4)).put((byte)0);
- }
-
- private void initMultiTopic(IoBuffer buff, int messageID, Couple... topics) throws IllegalAccessException {
- IoBuffer topicBuffer = IoBuffer.allocate(4).setAutoExpand(true);
- Utils.writeWord(topicBuffer, messageID);
- for (Couple couple : topics) {
- topicBuffer.put(Utils.encodeString(couple.getTopic()));
- topicBuffer.put((byte)couple.getQos());
- }
- topicBuffer.flip();
-
- buff.clear().put((byte)(AbstractMessage.SUBSCRIBE << 4 | (byte)0x02))
- .put(Utils.encodeRemainingLength(topicBuffer.remaining()));
- buff.put(topicBuffer);
- }
-}
-
diff --git a/parser/src/test/java/org/dna/mqtt/moquette/proto/SubscribeEncoderTest.java b/parser/src/test/java/org/dna/mqtt/moquette/proto/SubscribeEncoderTest.java
deleted file mode 100644
index 9679fb72..00000000
--- a/parser/src/test/java/org/dna/mqtt/moquette/proto/SubscribeEncoderTest.java
+++ /dev/null
@@ -1,76 +0,0 @@
-package org.dna.mqtt.moquette.proto;
-
-import static org.dna.mqtt.moquette.proto.TestUtils.*;
-import org.dna.mqtt.moquette.proto.messages.AbstractMessage.QOSType;
-import org.dna.mqtt.moquette.proto.messages.SubscribeMessage;
-import org.dna.mqtt.moquette.proto.messages.SubscribeMessage.Couple;
-import static org.junit.Assert.*;
-import org.junit.Before;
-import org.junit.Test;
-
-/**
- *
- * @author andrea
- */
-public class SubscribeEncoderTest {
-
- SubscribeEncoder m_encoder;
- TestUtils.MockProtocolEncoderOutput m_mockProtoEncoder;
-
- @Before
- public void setUp() {
- m_encoder = new SubscribeEncoder();
- m_mockProtoEncoder = new TestUtils.MockProtocolEncoderOutput();
- }
-
- @Test
- public void testEncodeWithMultiTopic() throws Exception {
- SubscribeMessage msg = new SubscribeMessage();
- msg.setQos(QOSType.LEAST_ONE);
- msg.setMessageID(0xAABB);
-
- //variable part
- Couple c1 = new Couple((byte)1, "a/b");
- Couple c2 = new Couple((byte)0, "a/b/c");
- msg.addSubscription(c1);
- msg.addSubscription(c2);
-
- //Exercise
- m_encoder.encode(null, msg, m_mockProtoEncoder);
-
- //Verify
- assertEquals((byte)0x82, (byte)m_mockProtoEncoder.getBuffer().get()); //1 byte
- assertEquals(16, m_mockProtoEncoder.getBuffer().get()); //remaining length
-
- //verify M1ssageID
- assertEquals((byte)0xAA, m_mockProtoEncoder.getBuffer().get());
- assertEquals((byte)0xBB, m_mockProtoEncoder.getBuffer().get());
-
- //Variable part
- verifyString(c1.getTopic(), m_mockProtoEncoder.getBuffer());
- assertEquals(c1.getQos(), m_mockProtoEncoder.getBuffer().get());
- verifyString(c2.getTopic(), m_mockProtoEncoder.getBuffer());
- assertEquals(c2.getQos(), m_mockProtoEncoder.getBuffer().get());
- }
-
- @Test(expected = IllegalArgumentException.class)
- public void testEncode_empty_subscription() throws Exception {
- SubscribeMessage msg = new SubscribeMessage();
- msg.setQos(QOSType.LEAST_ONE);
- msg.setMessageID(0xAABB);
-
- //Exercise
- m_encoder.encode(null, msg, m_mockProtoEncoder);
- }
-
- @Test(expected = IllegalArgumentException.class)
- public void testEncode_badQos() throws Exception {
- SubscribeMessage msg = new SubscribeMessage();
- msg.setQos(QOSType.EXACTLY_ONCE);
- msg.setMessageID(0xAABB);
-
- //Exercise
- m_encoder.encode(null, msg, m_mockProtoEncoder);
- }
-
-}
diff --git a/parser/src/test/java/org/dna/mqtt/moquette/proto/TestUtils.java b/parser/src/test/java/org/dna/mqtt/moquette/proto/TestUtils.java
deleted file mode 100644
index 78e34225..00000000
--- a/parser/src/test/java/org/dna/mqtt/moquette/proto/TestUtils.java
+++ /dev/null
@@ -1,124 +0,0 @@
-package org.dna.mqtt.moquette.proto;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-import org.apache.mina.core.buffer.IoBuffer;
-import org.apache.mina.core.filterchain.IoFilter.NextFilter;
-import org.apache.mina.core.future.WriteFuture;
-import org.apache.mina.core.session.IoSession;
-import org.apache.mina.filter.codec.ProtocolDecoderOutput;
-import org.apache.mina.filter.codec.ProtocolEncoderOutput;
-import org.dna.mqtt.moquette.proto.messages.AbstractMessage;
-import static org.junit.Assert.*;
-
-/**
- *
- * @author andrea
- */
-public class TestUtils {
-
- static final class MockProtocolDecoderOutput implements ProtocolDecoderOutput {
-
- protected T m_connMessage;
-
- public T getMessage() {
- return m_connMessage;
- }
-
- public void write(Object message) {
- m_connMessage = (T) message;
- }
-
- public void flush(NextFilter nextFilter, IoSession session) {
- throw new UnsupportedOperationException("Not supported yet.");
- }
- }
-
-
- static final class MockProtocolEncoderOutput implements ProtocolEncoderOutput {
-
- protected IoBuffer m_buffer;
-
- public IoBuffer getBuffer() {
- return m_buffer;
- }
-
- public void write(Object buffer) {
- m_buffer = (IoBuffer) buffer;
- }
-
- public void mergeAll() {
- throw new UnsupportedOperationException("Not supported yet.");
- }
-
- public WriteFuture flush() {
- throw new UnsupportedOperationException("Not supported yet.");
- }
- }
-
- /**
- * Verify the presence of the given string starting from the current position
- * inside the buffer.
- */
- static void verifyString(String str, IoBuffer buff) throws UnsupportedEncodingException {
- IoBuffer tmpBuff = IoBuffer.allocate(2).setAutoExpand(true);
- byte[] raw = str.getBytes("UTF-8");
- Utils.writeWord(tmpBuff, raw.length);
- tmpBuff.put(raw).flip();
-
- verifyIoBuffer(tmpBuff, buff);
- }
-
- static void verifyIoBuffer(IoBuffer expected, IoBuffer found) {
- while(expected.hasRemaining()) {
- assertEquals(expected.get(), found.get());
- }
- }
-
- /**
- * Verify that the given bytes buffer of the given numBytes length is present
- * in the buff starting from the current position.
- */
- static void verifyBuff(int numBytes, byte[] bytes, IoBuffer buff) {
- assertTrue(numBytes <= buff.remaining());
- byte[] toCheck = new byte[numBytes];
- buff.get(toCheck);
-
- for (int i = 0; i < numBytes; i++) {
- assertEquals(bytes[i], toCheck[i]);
- }
- }
-
- static void verifyEquals(byte[] expected, byte[] found) {
- assertEquals(expected.length, found.length);
- for (int i = 0; i < expected.length; i++) {
- assertEquals(expected[i], found[i]);
- }
- }
-
-
- public static IoBuffer generateRandomPayload(int size) {
- IoBuffer payloadBuffer = IoBuffer.allocate(size);
- for (int i = 0; i < size; i++) {
- payloadBuffer.put((byte) (Math.random() * 255));
- }
- payloadBuffer.flip();
- return payloadBuffer;
- }
-
- public static IoBuffer loadFile(String path) throws FileNotFoundException, IOException {
- File f = new File(path);
- long size = f.length();
- byte[] payload = new byte[(int) size];
-
- FileInputStream fr = new FileInputStream(f);
- fr.read(payload);
-
- IoBuffer payloadBuffer = IoBuffer.allocate((int) size);
- payloadBuffer.put(payload).flip();
- return payloadBuffer;
- }
-}
diff --git a/parser/src/test/java/org/dna/mqtt/moquette/proto/UnsubscribeDecoderTest.java b/parser/src/test/java/org/dna/mqtt/moquette/proto/UnsubscribeDecoderTest.java
deleted file mode 100644
index 5032ce2e..00000000
--- a/parser/src/test/java/org/dna/mqtt/moquette/proto/UnsubscribeDecoderTest.java
+++ /dev/null
@@ -1,119 +0,0 @@
-package org.dna.mqtt.moquette.proto;
-
-import org.apache.mina.core.buffer.IoBuffer;
-import org.apache.mina.filter.codec.demux.MessageDecoderResult;
-import org.dna.mqtt.moquette.proto.TestUtils.MockProtocolDecoderOutput;
-import org.dna.mqtt.moquette.proto.messages.AbstractMessage;
-import org.dna.mqtt.moquette.proto.messages.UnsubscribeMessage;
-import static org.junit.Assert.*;
-import org.junit.Before;
-import org.junit.Test;
-
-/**
- *
- * @author andrea
- */
-public class UnsubscribeDecoderTest {
-
- IoBuffer m_buff;
- UnsubscribeDecoder m_msgdec;
- MockProtocolDecoderOutput m_mockProtoDecoder;
-
- @Before
- public void setUp() {
- m_buff = IoBuffer.allocate(4);
- m_msgdec = new UnsubscribeDecoder();
- m_mockProtoDecoder = new MockProtocolDecoderOutput();
- }
-
- @Test
- public void testBadQos() throws Exception {
- m_buff = IoBuffer.allocate(2);
- initHeaderBadQos(m_buff);
- m_buff.flip();
-
- //Excercise
- MessageDecoderResult res = m_msgdec.decode(null, m_buff, m_mockProtoDecoder);
-
- //Verify
- assertEquals(MessageDecoderResult.NOT_OK, res);
- }
-
- @Test
- public void testMultiTopic() throws Exception {
- m_buff = IoBuffer.allocate(4).setAutoExpand(true);
- String topic1 = "a/b";
- String topic2 = "c/d/e";
- initMultiTopic(m_buff, 123, topic1, topic2);
- m_buff.flip();
-
- //Excercise
- MessageDecoderResult res = m_msgdec.decode(null, m_buff, m_mockProtoDecoder);
-
- //Verify
- assertEquals(MessageDecoderResult.OK, res);
- assertEquals(2, m_mockProtoDecoder.getMessage().topics().size());
- assertEquals(topic1, m_mockProtoDecoder.getMessage().topics().get(0));
- assertEquals(topic2, m_mockProtoDecoder.getMessage().topics().get(1));
- assertEquals(AbstractMessage.UNSUBSCRIBE, m_mockProtoDecoder.getMessage().getMessageType());
- }
-
-
- @Test
- public void testDecodeSingleTopic_bug() throws Exception {
- //A2 0C 00 01 00 06 2F 74 6F 70 69 63 //12 byte
- byte[] overallMessage = new byte[] {(byte)0xA2, 0x0A, //fixed header
- 0x00, 0x01, //MSG ID
- 0x00, 0x06, 0x2F, 0x74, 0x6F, 0x70, 0x69, 0x63}; //"/topic" string
- m_buff = IoBuffer.allocate(overallMessage.length).setAutoExpand(true);
- m_buff.put(overallMessage);
- m_buff.flip();
-
- MessageDecoderResult res = m_msgdec.decode(null, m_buff, m_mockProtoDecoder);
-
- assertNotNull(m_mockProtoDecoder.getMessage());
- UnsubscribeMessage message = (UnsubscribeMessage) m_mockProtoDecoder.getMessage();
-// assertEquals(0x0A, message.getMessageID());
-// assertEquals(1, message.types().size());
-// assertEquals(AbstractMessage.QOSType.LEAST_ONE, message.types().get(0));
-
- }
-
-// @Test
-// public void testDecodeSingleTopic_BadFormat() throws Exception {
-// //A2 0C 00 01 00 06 2F 74 6F 70 69 63 //10 byte of content, but lenght says 12!!
-// byte[] overallMessage = new byte[] {(byte)0xA2, 0x0C, //fixed header
-// 0x00, 0x01, //MSG ID
-// 0x00, 0x06, 0x2F, 0x74, 0x6F, 0x70, 0x69, 0x63}; //"/topic" string
-// m_buff = IoBuffer.allocate(overallMessage.length).setAutoExpand(true);
-// m_buff.put(overallMessage);
-// m_buff.flip();
-//
-// MessageDecoderResult res = m_msgdec.decode(null, m_buff, m_mockProtoDecoder);
-//
-// assertNotNull(m_mockProtoDecoder.getMessage());
-// UnsubscribeMessage message = (UnsubscribeMessage) m_mockProtoDecoder.getMessage();
-//// assertEquals(0x0A, message.getMessageID());
-//// assertEquals(1, message.types().size());
-//// assertEquals(AbstractMessage.QOSType.LEAST_ONE, message.types().get(0));
-//
-// }
-
- private void initHeaderBadQos(IoBuffer buff) {
- buff.clear().put((byte)(AbstractMessage.UNSUBSCRIBE << 4)).put((byte)0);
- }
-
- private void initMultiTopic(IoBuffer buff, int messageID, String... topics) throws IllegalAccessException {
- IoBuffer topicBuffer = IoBuffer.allocate(4).setAutoExpand(true);
- Utils.writeWord(topicBuffer, messageID);
- for (String topic : topics) {
- topicBuffer.put(Utils.encodeString(topic));
- }
- topicBuffer.flip();
-
- buff.clear().put((byte)(AbstractMessage.UNSUBSCRIBE << 4 | (byte)0x02))
- .put(Utils.encodeRemainingLength(topicBuffer.remaining()));
- buff.put(topicBuffer);
- }
-}
-
diff --git a/parser/src/test/java/org/dna/mqtt/moquette/proto/UnsubscribeEncoderTest.java b/parser/src/test/java/org/dna/mqtt/moquette/proto/UnsubscribeEncoderTest.java
deleted file mode 100644
index 2d81e77a..00000000
--- a/parser/src/test/java/org/dna/mqtt/moquette/proto/UnsubscribeEncoderTest.java
+++ /dev/null
@@ -1,94 +0,0 @@
-package org.dna.mqtt.moquette.proto;
-
-import org.dna.mqtt.moquette.proto.messages.UnsubscribeMessage;
-import org.dna.mqtt.moquette.proto.messages.AbstractMessage.QOSType;
-import org.junit.Before;
-import org.junit.Test;
-import static org.junit.Assert.*;
-import static org.dna.mqtt.moquette.proto.TestUtils.*;
-
-/**
- *
- * @author andrea
- */
-public class UnsubscribeEncoderTest {
- UnsubscribeMessage m_msg;
- UnsubscribeEncoder m_encoder;
- TestUtils.MockProtocolEncoderOutput m_mockProtoEncoder;
-
- @Before
- public void setUp() {
- m_encoder = new UnsubscribeEncoder();
- m_mockProtoEncoder = new TestUtils.MockProtocolEncoderOutput();
- m_msg = new UnsubscribeMessage();
- m_msg.setMessageID(0xAABB);
- }
-
- @Test
- public void testEncodeWithSingleTopic() throws Exception {
- m_msg.setQos(QOSType.LEAST_ONE);
-
- //variable part
- String topic1 = "/topic";
- m_msg.addTopic(topic1);
-
- //Exercise
- m_encoder.encode(null, m_msg, m_mockProtoEncoder);
-
- //Verify
- assertEquals((byte)0xA2, (byte)m_mockProtoEncoder.getBuffer().get()); //1 byte
- //2 messageID + 2 length + 6 chars = 10
- assertEquals(10, m_mockProtoEncoder.getBuffer().get()); //remaining length
-
- //verify M1ssageID
- assertEquals((byte)0xAA, m_mockProtoEncoder.getBuffer().get());
- assertEquals((byte)0xBB, m_mockProtoEncoder.getBuffer().get());
-
- //Variable part
- verifyString(topic1, m_mockProtoEncoder.getBuffer());
- }
-
-
- @Test
- public void testEncodeWithMultiTopic() throws Exception {
- m_msg.setQos(QOSType.LEAST_ONE);
-
- //variable part
- String topic1 = "a/b";
- String topic2 = "a/b/c";
- m_msg.addTopic(topic1);
- m_msg.addTopic(topic2);
-
- //Exercise
- m_encoder.encode(null, m_msg, m_mockProtoEncoder);
-
- //Verify
- assertEquals((byte)0xA2, (byte)m_mockProtoEncoder.getBuffer().get()); //1 byte
- assertEquals(14, m_mockProtoEncoder.getBuffer().get()); //remaining length
-
- //verify M1ssageID
- assertEquals((byte)0xAA, m_mockProtoEncoder.getBuffer().get());
- assertEquals((byte)0xBB, m_mockProtoEncoder.getBuffer().get());
-
- //Variable part
- verifyString(topic1, m_mockProtoEncoder.getBuffer());
- verifyString(topic2, m_mockProtoEncoder.getBuffer());
- }
-
- @Test(expected = IllegalArgumentException.class)
- public void testEncode_empty_topics() throws Exception {
- m_msg.setQos(QOSType.LEAST_ONE);
-
- //Exercise
- m_encoder.encode(null, m_msg, m_mockProtoEncoder);
- }
-
- @Test(expected = IllegalArgumentException.class)
- public void testEncode_badQos() throws Exception {
- m_msg.setQos(QOSType.EXACTLY_ONCE);
-
- //Exercise
- m_encoder.encode(null, m_msg, m_mockProtoEncoder);
- }
-
-}
diff --git a/parser/src/test/java/org/dna/mqtt/moquette/proto/UtilsTests.java b/parser/src/test/java/org/dna/mqtt/moquette/proto/UtilsTests.java
deleted file mode 100644
index b9b77850..00000000
--- a/parser/src/test/java/org/dna/mqtt/moquette/proto/UtilsTests.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package org.dna.mqtt.moquette.proto;
-
-import org.dna.mqtt.moquette.proto.messages.AbstractMessage;
-import org.dna.mqtt.moquette.proto.messages.UnsubscribeMessage;
-import static org.junit.Assert.*;
-import org.junit.Test;
-
-/**
- *
- * @author andrea
- */
-public class UtilsTests {
-
- @Test
- public void testEncodeFlags() {
- UnsubscribeMessage msg = new UnsubscribeMessage();
- msg.setRetainFlag(true);
- msg.setQos(AbstractMessage.QOSType.MOST_ONE);
-
- //Exercise
- assertEquals(1, Utils.encodeFlags(msg));
- }
-
-}
-
diff --git a/parser/src/test/resources/log4j.properties b/parser/src/test/resources/log4j.properties
deleted file mode 100644
index b1dfbfbf..00000000
--- a/parser/src/test/resources/log4j.properties
+++ /dev/null
@@ -1,19 +0,0 @@
-# Set root logger level to DEBUG and its only appender to A1.
-#log4j.rootLogger=ERROR, A1
-log4j.rootLogger=INFO, A1
-#log4j.rootLogger=WARN, A1
-#log4j.logger.org.dna.mqtt.moquette.client=WARN
-#log4j.logger.org.mina=WARN
-#log4j.logger.org.dna.mqtt.moquette.server=DEBUG
-#log4j.logger.org.dna.mqtt.moquette.messaging=DEBUG
-#log4j.logger.org.dna.mqtt.moquette.proto.MQTTLoggingFilter=DEBUG
-#log4j.logger.org.dna.mqtt.moquette.proto.PublishDecoder=DEBUG
-
-log4j.logger.org.dna.mqtt.bechnmark=INFO
-
-# A1 is set to be a ConsoleAppender.
-log4j.appender.A1=org.apache.log4j.ConsoleAppender
-
-# A1 uses PatternLayout.
-log4j.appender.A1.layout=org.apache.log4j.PatternLayout
-log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c{1} %x - %m%n
\ No newline at end of file