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";
 }

Reply via email to