added option field related to accept and content version
authorJung Seungho <shonest.jung@samsung.com>
Tue, 4 Apr 2017 07:45:38 +0000 (16:45 +0900)
committerJee Hyeok Kim <jihyeok13.kim@samsung.com>
Thu, 6 Apr 2017 06:55:33 +0000 (06:55 +0000)
- added get, set accpet & content version
- added DEFAULT_VERSION_VALUE
- modified encodeOptions function in CoapEncoder

Change-Id: I5ca387a49fbf6e1eaf70cfd1e249b04d0aa3ddcf
Signed-off-by: Jung Seungho <shonest.jung@samsung.com>
Reviewed-on: https://gerrit.iotivity.org/gerrit/18473
Tested-by: jenkins-iotivity <jenkins@iotivity.org>
Reviewed-by: Minji Park <minjii.park@samsung.com>
Reviewed-by: Jee Hyeok Kim <jihyeok13.kim@samsung.com>
cloud/stack/src/main/java/org/iotivity/cloud/base/OICConstants.java
cloud/stack/src/main/java/org/iotivity/cloud/base/protocols/MessageBuilder.java
cloud/stack/src/main/java/org/iotivity/cloud/base/protocols/coap/CoapEncoder.java
cloud/stack/src/main/java/org/iotivity/cloud/base/protocols/coap/CoapMessage.java
cloud/stack/src/main/java/org/iotivity/cloud/base/protocols/coap/CoapOption.java

index a9b2744..26dbb53 100755 (executable)
 package org.iotivity.cloud.base;
 
 public class OICConstants {
+    /*
+     * OCF version 1.0.0 default value for Accept Version and Content-Format
+     * Version
+     */
+    public static final int    DEFAULT_VERSION_VALUE         = 2048;
+
     /* resource Interface for keep-alive */
     public static final String DEFAULT_INTERFACE             = "oic.if.baseline";
 
index 26b7dfe..5019829 100644 (file)
@@ -21,6 +21,7 @@
  */
 package org.iotivity.cloud.base.protocols;
 
+import org.iotivity.cloud.base.OICConstants;
 import org.iotivity.cloud.base.protocols.coap.CoapRequest;
 import org.iotivity.cloud.base.protocols.coap.CoapResponse;
 import org.iotivity.cloud.base.protocols.coap.CoapSignaling;
@@ -88,6 +89,8 @@ public class MessageBuilder {
                 }
             }
 
+            coapResponse.setVersionValue(OICConstants.DEFAULT_VERSION_VALUE);
+
             response = coapResponse;
         }
 
@@ -138,6 +141,8 @@ public class MessageBuilder {
             coapRequest.setPayload(payload);
         }
 
+        coapRequest.setVersionValue(OICConstants.DEFAULT_VERSION_VALUE);
+
         return coapRequest;
     }
 
@@ -157,6 +162,8 @@ public class MessageBuilder {
             coapRequest.setPayload(payload);
         }
 
+        coapRequest.setVersionValue(OICConstants.DEFAULT_VERSION_VALUE);
+
         return coapRequest;
     }
 
@@ -179,6 +186,8 @@ public class MessageBuilder {
             coapResponse.setPayload(payload);
         }
 
+        coapResponse.setVersionValue(OICConstants.DEFAULT_VERSION_VALUE);
+
         return coapResponse;
     }
 }
index 38c1414..265c356 100644 (file)
@@ -116,20 +116,21 @@ public class CoapEncoder extends MessageToByteEncoder<CoapMessage> {
             throws Exception {
         int preOptionNum = 0;
 
-        for (int i = 0; i < 40; i++) {
-            List<byte[]> values = coapMessage.getOption(i);
+        for (CoapOption opt : CoapOption.values()) {
+            int optionNum = opt.getvalue();
+            List<byte[]> values = coapMessage.getOption(optionNum);
             if (values != null) {
                 if (values.size() > 0) {
                     for (byte[] value : values) {
-                        writeOption(i - preOptionNum,
+                        writeOption(optionNum - preOptionNum,
                                 value != null ? value.length : 0, byteBuf,
                                 value);
-                        preOptionNum = i;
+                        preOptionNum = optionNum;
                     }
 
                 } else {
-                    writeOption(i - preOptionNum, 0, byteBuf, null);
-                    preOptionNum = i;
+                    writeOption(optionNum - preOptionNum, 0, byteBuf, null);
+                    preOptionNum = optionNum;
                 }
             }
         }
index 57bccb1..66dc578 100644 (file)
@@ -35,24 +35,28 @@ import org.iotivity.cloud.util.Bytes;
 
 public abstract class CoapMessage extends Message {
 
-    protected byte[]       mToken         = null;
-    protected int          mObserve       = -1;
+    protected byte[]       mToken          = null;
+    protected int          mObserve        = -1;
 
     // Option fields
-    protected List<byte[]> if_match       = null;
-    protected byte[]       uri_host       = null;
-    protected List<byte[]> etag           = null;
-    protected boolean      if_none_match  = false;
-    protected byte[]       uri_port       = null;
-    protected List<byte[]> location_path  = null;
-
-    protected byte[]       max_age        = null;
-    protected byte[]       accept         = null;
-    protected List<byte[]> location_query = null;
-    protected byte[]       proxy_uri      = null;
-    protected byte[]       proxy_scheme   = null;
-    protected byte[]       size1          = null;
-    protected byte[]       content_format = null;
+    protected List<byte[]> if_match        = null;
+    protected byte[]       uri_host        = null;
+    protected List<byte[]> etag            = null;
+    protected boolean      if_none_match   = false;
+    protected byte[]       uri_port        = null;
+    protected List<byte[]> location_path   = null;
+
+    protected byte[]       max_age         = null;
+    protected byte[]       accept          = null;
+    protected List<byte[]> location_query  = null;
+    protected byte[]       proxy_uri       = null;
+    protected byte[]       proxy_scheme    = null;
+    protected byte[]       size1           = null;
+    protected byte[]       content_format  = null;
+
+    // OCF spec Option fields
+    protected byte[]       accept_version  = null;
+    protected byte[]       content_version = null;
 
     public CoapMessage() {
     }
@@ -158,6 +162,17 @@ public abstract class CoapMessage extends Message {
             case 6:
                 mObserve = Bytes.bytesToInt(value);
                 break;
+
+            // ACCEPT_VERSION
+            case 2049:
+                accept_version = value;
+                break;
+
+            // CONTENT_VERSION
+            case 2053:
+                content_version = value;
+                break;
+
             default: {
                 if (optnum % 2 == 1) {
                     throw new BadOptionException(
@@ -236,6 +251,16 @@ public abstract class CoapMessage extends Message {
             case 6:
                 return mObserve != -1
                         ? Arrays.asList(Bytes.intToMax4Bytes(mObserve)) : null;
+
+            // ACCEPT_VERSION
+            case 2049:
+                return accept_version != null ? Arrays.asList(accept_version)
+                        : null;
+
+            // CONTENT_VERSION
+            case 2053:
+                return content_version != null ? Arrays.asList(content_version)
+                        : null;
         }
 
         return null;
@@ -400,7 +425,9 @@ public abstract class CoapMessage extends Message {
             return ContentFormat.NO_CONTENT;
         }
 
-        switch (content_format[0]) {
+        int contentFormat = Bytes.bytesToInt(content_format);
+
+        switch (contentFormat) {
             case 40:
                 return ContentFormat.APPLICATION_LINK_FORMAT;
 
@@ -417,6 +444,7 @@ public abstract class CoapMessage extends Message {
                 return ContentFormat.APPLICATION_JSON;
 
             case 60:
+            case 10000:
                 return ContentFormat.APPLICATION_CBOR;
         }
 
@@ -427,10 +455,41 @@ public abstract class CoapMessage extends Message {
         if (content_format == null) {
             return 0;
         } else {
-            return content_format[0];
+            return Bytes.bytesToInt(content_format);
+        }
+    }
+
+    public int getAcceptVersionValue() {
+        if (accept_version == null) {
+            return 0;
+        } else {
+            return Bytes.bytesToInt(accept_version);
         }
     }
 
+    public void setVersionValue(int value) {
+        setAcceptVersionValue(value);
+        setContentVersionValue(value);
+    }
+
+    public void setAcceptVersionValue(int value) {
+        accept_version = new byte[] { (byte) ((value >> 8) & 0xFF),
+                (byte) (value & 0xFF) };
+    }
+
+    public int getContentVersionValue() {
+        if (content_version == null) {
+            return 0;
+        } else {
+            return Bytes.bytesToInt(content_version);
+        }
+    }
+
+    public void setContentVersionValue(int value) {
+        content_version = new byte[] { (byte) ((value >> 8) & 0xFF),
+                (byte) (value & 0xFF) };
+    }
+
     @Override
     public void setLocationPath(String locationPath) {
         if (location_path == null) {
index cf523b7..6bb574f 100644 (file)
 package org.iotivity.cloud.base.protocols.coap;
 
 public enum CoapOption {
-    IF_MATCH(1), URI_HOST(3), ETAG(4), IF_NONE_MATCH(5), URI_PORT(
+    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(17), LOCATION_QUERY(
                             20), PROXY_URI(35), PROXY_SCHEME(39), SIZE1(
-                                    60), OBSERVE(6);
+                                    60), ACCEPT_VERSION(
+                                            2049), CONTENT_VERSION(2053);
 
     public static CoapOption valueOf(int option) {
         switch (option) {
@@ -77,6 +78,12 @@ public enum CoapOption {
 
             case 6:
                 return CoapOption.OBSERVE;
+
+            case 2049:
+                return CoapOption.ACCEPT_VERSION;
+
+            case 2053:
+                return CoapOption.CONTENT_VERSION;
         }
 
         throw new IllegalArgumentException("Invalid option value");