Changed decodable message method to force loading the complete size of a message, before starting the real decode phase
This commit is contained in:
@@ -37,7 +37,7 @@ public class Utils {
|
||||
* Decode the variable remaining lenght as defined in MQTT v3.1 specification
|
||||
* (section 2.1).
|
||||
*
|
||||
* @return the decoded length or -1 if needed more data to decode.
|
||||
* @return the decoded length or -1 if needed more data to decode the length field.
|
||||
*/
|
||||
static int decodeRemainingLenght(IoBuffer in) {
|
||||
int multiplier = 1;
|
||||
@@ -87,6 +87,17 @@ public class Utils {
|
||||
}
|
||||
byte h1 = in.get();
|
||||
byte messageType = (byte) ((h1 & 0x00F0) >> 4);
|
||||
|
||||
int remainingLength = Utils.decodeRemainingLenght(in);
|
||||
if (remainingLength == -1) {
|
||||
return MessageDecoderResult.NEED_DATA;
|
||||
}
|
||||
|
||||
//check remaining length
|
||||
if (in.remaining() < remainingLength) {
|
||||
return MessageDecoderResult.NEED_DATA;
|
||||
}
|
||||
|
||||
return messageType == type ? MessageDecoderResult.OK : MessageDecoderResult.NOT_OK;
|
||||
}
|
||||
|
||||
|
||||
@@ -27,13 +27,17 @@ public class ConnAckDecoderTest {
|
||||
|
||||
@Test
|
||||
public void testDecodable_OK() {
|
||||
m_buff.put((byte)(AbstractMessage.CONNACK << 4)).flip();
|
||||
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)).flip();
|
||||
m_buff.put((byte)(AbstractMessage.CONNECT << 4))
|
||||
.put((byte)0) //0 length
|
||||
.flip();
|
||||
assertEquals(MessageDecoder.NOT_OK , m_msgdec.decodable(null, m_buff));
|
||||
}
|
||||
|
||||
|
||||
@@ -26,13 +26,17 @@ public class ConnectDecoderTest {
|
||||
|
||||
@Test
|
||||
public void testDecodable_OK() {
|
||||
m_buff.put((byte)(AbstractMessage.CONNECT << 4)).flip();
|
||||
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)).flip();
|
||||
m_buff.put((byte)(AbstractMessage.CONNACK << 4))
|
||||
.put((byte)0) //0 length
|
||||
.flip();
|
||||
assertEquals(MessageDecoder.NOT_OK , m_msgdec.decodable(null, m_buff));
|
||||
}
|
||||
|
||||
|
||||
@@ -29,7 +29,9 @@ public class PublishDecoderTest {
|
||||
|
||||
@Test
|
||||
public void testDecodable_OK() {
|
||||
m_buff.put((byte) (AbstractMessage.PUBLISH << 4)).flip();
|
||||
m_buff.put((byte) (AbstractMessage.PUBLISH << 4))
|
||||
.put((byte)0) //0 length
|
||||
.flip();
|
||||
assertEquals(MessageDecoder.OK, m_msgdec.decodable(null, m_buff));
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user