+
+ OIC_LOG(DEBUG, TAG, "OUT");
+}
+
+uint32_t CAGetOptionData(const uint8_t *data, uint32_t len, uint8_t *option, uint32_t buflen)
+{
+ if (0 == buflen || 0 == len)
+ {
+ OIC_LOG(ERROR, TAG, "len 0");
+ return 0;
+ }
+
+ if (NULL == data || NULL == option)
+ {
+ OIC_LOG(ERROR, TAG, "data/option NULL");
+ return 0;
+ }
+
+ if (buflen <= len)
+ {
+ OIC_LOG(ERROR, TAG, "option buffer too small");
+ return 0;
+ }
+
+ memcpy(option, data, len);
+ option[len] = '\0';
+
+ return len;
+}
+
+CAMessageType_t CAGetMessageTypeFromPduBinaryData(const void *pdu, uint32_t size)
+{
+ if (NULL == pdu)
+ {
+ OIC_LOG(ERROR, TAG, "pdu is null");
+ return CA_MSG_NONCONFIRM;
+ }
+
+ // pdu minimum size is 4 byte.
+ if (size < CA_PDU_MIN_SIZE)
+ {
+ OIC_LOG(ERROR, TAG, "min size");
+ return CA_MSG_NONCONFIRM;
+ }
+
+ coap_hdr_t *hdr = (coap_hdr_t *) pdu;
+
+ return (CAMessageType_t) hdr->type;
+}
+
+uint16_t CAGetMessageIdFromPduBinaryData(const void *pdu, uint32_t size)
+{
+ if (NULL == pdu)
+ {
+ OIC_LOG(ERROR, TAG, "pdu is null");
+ return 0;
+ }
+
+ // pdu minimum size is 4 byte.
+ if (size < CA_PDU_MIN_SIZE)
+ {
+ OIC_LOG(ERROR, TAG, "min size");
+ return 0;
+ }
+
+ coap_hdr_t *hdr = (coap_hdr_t *) pdu;
+
+ return hdr->id;
+}
+
+CAResponseResult_t CAGetCodeFromPduBinaryData(const void *pdu, uint32_t size)
+{
+ if (NULL == pdu)
+ {
+ OIC_LOG(ERROR, TAG, "pdu is null");
+ return CA_NOT_FOUND;
+ }
+
+ // pdu minimum size is 4 byte.
+ if (size < CA_PDU_MIN_SIZE)
+ {
+ OIC_LOG(ERROR, TAG, "min size");
+ return CA_NOT_FOUND;
+ }
+
+ coap_hdr_t *hdr = (coap_hdr_t *) pdu;
+
+ return (CAResponseResult_t) CA_RESPONSE_CODE(hdr->code);