support observe option
Project: http://git-wip-us.apache.org/repos/asf/mina/repo Commit: http://git-wip-us.apache.org/repos/asf/mina/commit/dbbdf9ea Tree: http://git-wip-us.apache.org/repos/asf/mina/tree/dbbdf9ea Diff: http://git-wip-us.apache.org/repos/asf/mina/diff/dbbdf9ea Branch: refs/heads/trunk Commit: dbbdf9ea0229b7458fbdaad61c9d133ebdbef81e Parents: 79dd556 Author: jvermillard <[email protected]> Authored: Thu May 30 11:56:52 2013 +0200 Committer: jvermillard <[email protected]> Committed: Thu May 30 11:56:52 2013 +0200 ---------------------------------------------------------------------- .../java/org/apache/mina/coap/CoapOptionType.java | 2 +- .../org/apache/mina/coap/codec/CoapDecoder.java | 3 +++ .../apache/mina/coap/codec/CoapDecoderTest.java | 5 +++++ .../apache/mina/coap/codec/CoapEncoderTest.java | 6 ++++++ .../org/apache/mina/coap/codec/TestMessages.java | 11 ++++++++--- 5 files changed, 23 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/mina/blob/dbbdf9ea/coap/src/main/java/org/apache/mina/coap/CoapOptionType.java ---------------------------------------------------------------------- diff --git a/coap/src/main/java/org/apache/mina/coap/CoapOptionType.java b/coap/src/main/java/org/apache/mina/coap/CoapOptionType.java index 993ae58..aedbe31 100644 --- a/coap/src/main/java/org/apache/mina/coap/CoapOptionType.java +++ b/coap/src/main/java/org/apache/mina/coap/CoapOptionType.java @@ -25,7 +25,7 @@ package org.apache.mina.coap; * @author <a href="http://mina.apache.org">Apache MINA Project</a> */ public enum CoapOptionType { - IF_MATCH(1), URI_HOST(3), ETAG(4), IF_NONE_MATCH(5), URI_PORT(7), LOCATION_PATH(8), URI_PATH(11), + IF_MATCH(1), URI_HOST(3), ETAG(4), IF_NONE_MATCH(5), OBSERVE(6), URI_PORT(7), LOCATION_PATH(8), URI_PATH(11), CONTENT_FORMAT(12), MAX_AGE(14), URI_QUERY(15), ACCEPT(16), LOCATION_QUERY(20), PROXY_URI(35), PROXY_SCHEME(39); private final int code; http://git-wip-us.apache.org/repos/asf/mina/blob/dbbdf9ea/coap/src/main/java/org/apache/mina/coap/codec/CoapDecoder.java ---------------------------------------------------------------------- diff --git a/coap/src/main/java/org/apache/mina/coap/codec/CoapDecoder.java b/coap/src/main/java/org/apache/mina/coap/codec/CoapDecoder.java index e47e93b..603f311 100644 --- a/coap/src/main/java/org/apache/mina/coap/codec/CoapDecoder.java +++ b/coap/src/main/java/org/apache/mina/coap/codec/CoapDecoder.java @@ -112,6 +112,9 @@ public class CoapDecoder implements StatelessProtocolDecoder<ByteBuffer, CoapMes // create the option DTO CoapOptionType optType = CoapOptionType.fromCode(optionCode); + if (optType == null) { + throw new ProtocolDecoderException("unknown option code : " + optionCode); + } // LOG.debug("option type : {}", optType); // get the value http://git-wip-us.apache.org/repos/asf/mina/blob/dbbdf9ea/coap/src/test/java/org/apache/mina/coap/codec/CoapDecoderTest.java ---------------------------------------------------------------------- diff --git a/coap/src/test/java/org/apache/mina/coap/codec/CoapDecoderTest.java b/coap/src/test/java/org/apache/mina/coap/codec/CoapDecoderTest.java index 50fee84..365ca4e 100644 --- a/coap/src/test/java/org/apache/mina/coap/codec/CoapDecoderTest.java +++ b/coap/src/test/java/org/apache/mina/coap/codec/CoapDecoderTest.java @@ -54,4 +54,9 @@ public class CoapDecoderTest { Assert.assertEquals(PAYLOAD_AND_MULTIPLE_OPTION, decoder.decode(ByteBufferDumper.fromHexString(PAYLOAD_AND_MULTIPLE_OPTION_HEX), null)); } + + @Test + public void observe_message() { + Assert.assertEquals(OBSERVE, decoder.decode(ByteBufferDumper.fromHexString(OBSERVE_HEX), null)); + } } http://git-wip-us.apache.org/repos/asf/mina/blob/dbbdf9ea/coap/src/test/java/org/apache/mina/coap/codec/CoapEncoderTest.java ---------------------------------------------------------------------- diff --git a/coap/src/test/java/org/apache/mina/coap/codec/CoapEncoderTest.java b/coap/src/test/java/org/apache/mina/coap/codec/CoapEncoderTest.java index 33fd29e..1f4baf8 100644 --- a/coap/src/test/java/org/apache/mina/coap/codec/CoapEncoderTest.java +++ b/coap/src/test/java/org/apache/mina/coap/codec/CoapEncoderTest.java @@ -64,6 +64,12 @@ public class CoapEncoderTest { CoapMessage message = PAYLOAD_AND_MULTIPLE_OPTION; ByteBuffer encoded = encoder.encode(message, null); Assert.assertEquals(PAYLOAD_AND_MULTIPLE_OPTION_HEX, ByteBufferDumper.toHex(encoded)); + } + @Test + public void observe() { + CoapMessage message = OBSERVE; + ByteBuffer encoded = encoder.encode(message, null); + Assert.assertEquals(OBSERVE_HEX, ByteBufferDumper.toHex(encoded)); } } http://git-wip-us.apache.org/repos/asf/mina/blob/dbbdf9ea/coap/src/test/java/org/apache/mina/coap/codec/TestMessages.java ---------------------------------------------------------------------- diff --git a/coap/src/test/java/org/apache/mina/coap/codec/TestMessages.java b/coap/src/test/java/org/apache/mina/coap/codec/TestMessages.java index a5e1ce1..9fcc0dd 100644 --- a/coap/src/test/java/org/apache/mina/coap/codec/TestMessages.java +++ b/coap/src/test/java/org/apache/mina/coap/codec/TestMessages.java @@ -50,9 +50,14 @@ public interface TestMessages { public static final CoapMessage PAYLOAD_AND_MULTIPLE_OPTION = new CoapMessage(1, MessageType.NON_CONFIRMABLE, 1, 1234, "toto".getBytes(), new CoapOption[] { // new CoapOption(CoapOptionType.URI_PATH, "coap://blabla".getBytes()), // - new CoapOption(CoapOptionType.LOCATION_QUERY, "somewhere".getBytes()), // - new CoapOption(CoapOptionType.PROXY_URI, "http://proxyuri".getBytes()), // - new CoapOption(CoapOptionType.MAX_AGE, "bleh".getBytes()) }, new byte[] {}); + new CoapOption(CoapOptionType.LOCATION_QUERY, "somewhere".getBytes()), // + new CoapOption(CoapOptionType.PROXY_URI, "http://proxyuri".getBytes()), // + new CoapOption(CoapOptionType.MAX_AGE, "bleh".getBytes()) }, new byte[] {}); public static final String PAYLOAD_AND_MULTIPLE_OPTION_HEX = "540104D2746F746FBD00636F61703A2F2F626C61626C6134626C656869736F6D657768657265DD0202687474703A2F2F70726F7879757269";// "540104D2746F746FBD00636F61703A2F2F626C61626C6134626C656869736F6D657768657265DD02687474703A2F2F70726F7879757269"; + + public static final CoapMessage OBSERVE = new CoapMessage(1, MessageType.CONFIRMABLE, 1, 19950, new byte[] { -28, + -91 }, new CoapOption[] { new CoapOption(CoapOptionType.OBSERVE, new byte[] {}), + new CoapOption(CoapOptionType.URI_PATH, "demo".getBytes()) }, new byte[] {}); + public static final String OBSERVE_HEX = "42014DEEE4A5605464656D6F"; }
