From: Jung Seungho Date: Tue, 4 Apr 2017 07:45:38 +0000 (+0900) Subject: added option field related to accept and content version X-Git-Tag: 1.3.0~348^2^2~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=23e5253ce71320c4201d8a0b89f4d3076f03043f;p=platform%2Fupstream%2Fiotivity.git added option field related to accept and content version - added get, set accpet & content version - added DEFAULT_VERSION_VALUE - modified encodeOptions function in CoapEncoder Change-Id: I5ca387a49fbf6e1eaf70cfd1e249b04d0aa3ddcf Signed-off-by: Jung Seungho Reviewed-on: https://gerrit.iotivity.org/gerrit/18473 Tested-by: jenkins-iotivity Reviewed-by: Minji Park Reviewed-by: Jee Hyeok Kim --- diff --git a/cloud/stack/src/main/java/org/iotivity/cloud/base/OICConstants.java b/cloud/stack/src/main/java/org/iotivity/cloud/base/OICConstants.java index a9b2744..26dbb53 100755 --- a/cloud/stack/src/main/java/org/iotivity/cloud/base/OICConstants.java +++ b/cloud/stack/src/main/java/org/iotivity/cloud/base/OICConstants.java @@ -22,6 +22,12 @@ 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"; diff --git a/cloud/stack/src/main/java/org/iotivity/cloud/base/protocols/MessageBuilder.java b/cloud/stack/src/main/java/org/iotivity/cloud/base/protocols/MessageBuilder.java index 26b7dfe..5019829 100644 --- a/cloud/stack/src/main/java/org/iotivity/cloud/base/protocols/MessageBuilder.java +++ b/cloud/stack/src/main/java/org/iotivity/cloud/base/protocols/MessageBuilder.java @@ -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; } } diff --git a/cloud/stack/src/main/java/org/iotivity/cloud/base/protocols/coap/CoapEncoder.java b/cloud/stack/src/main/java/org/iotivity/cloud/base/protocols/coap/CoapEncoder.java index 38c1414..265c356 100644 --- a/cloud/stack/src/main/java/org/iotivity/cloud/base/protocols/coap/CoapEncoder.java +++ b/cloud/stack/src/main/java/org/iotivity/cloud/base/protocols/coap/CoapEncoder.java @@ -116,20 +116,21 @@ public class CoapEncoder extends MessageToByteEncoder { throws Exception { int preOptionNum = 0; - for (int i = 0; i < 40; i++) { - List values = coapMessage.getOption(i); + for (CoapOption opt : CoapOption.values()) { + int optionNum = opt.getvalue(); + List 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; } } } diff --git a/cloud/stack/src/main/java/org/iotivity/cloud/base/protocols/coap/CoapMessage.java b/cloud/stack/src/main/java/org/iotivity/cloud/base/protocols/coap/CoapMessage.java index 57bccb1..66dc578 100644 --- a/cloud/stack/src/main/java/org/iotivity/cloud/base/protocols/coap/CoapMessage.java +++ b/cloud/stack/src/main/java/org/iotivity/cloud/base/protocols/coap/CoapMessage.java @@ -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 if_match = null; - protected byte[] uri_host = null; - protected List etag = null; - protected boolean if_none_match = false; - protected byte[] uri_port = null; - protected List location_path = null; - - protected byte[] max_age = null; - protected byte[] accept = null; - protected List location_query = null; - protected byte[] proxy_uri = null; - protected byte[] proxy_scheme = null; - protected byte[] size1 = null; - protected byte[] content_format = null; + protected List if_match = null; + protected byte[] uri_host = null; + protected List etag = null; + protected boolean if_none_match = false; + protected byte[] uri_port = null; + protected List location_path = null; + + protected byte[] max_age = null; + protected byte[] accept = null; + protected List 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) { diff --git a/cloud/stack/src/main/java/org/iotivity/cloud/base/protocols/coap/CoapOption.java b/cloud/stack/src/main/java/org/iotivity/cloud/base/protocols/coap/CoapOption.java index cf523b7..6bb574f 100644 --- a/cloud/stack/src/main/java/org/iotivity/cloud/base/protocols/coap/CoapOption.java +++ b/cloud/stack/src/main/java/org/iotivity/cloud/base/protocols/coap/CoapOption.java @@ -22,11 +22,12 @@ 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");