You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mynewt.apache.org by pa...@apache.org on 2016/09/14 20:32:56 UTC

[10/10] incubator-mynewt-core git commit: Add tinycbor and iotivity constrained to the repo.

Add tinycbor and iotivity constrained to the repo.

These are not working yet.  Need to add basic test cases for cbor
Need to add the OS support for iotivity


Project: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/commit/ece29bb3
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/ece29bb3
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/ece29bb3

Branch: refs/heads/develop
Commit: ece29bb340b4ec83b635e3a13cdca8c21d458d19
Parents: 0b82d07
Author: Paul Dietrich <pa...@yahoo.com>
Authored: Wed Sep 14 13:18:31 2016 -0700
Committer: Paul Dietrich <pa...@yahoo.com>
Committed: Wed Sep 14 13:32:32 2016 -0700

----------------------------------------------------------------------
 libs/iotivity/include/iotivity/oc_api.h         |  165 +++
 libs/iotivity/include/iotivity/oc_buffer.h      |   32 +
 .../iotivity/include/iotivity/oc_client_state.h |   88 ++
 libs/iotivity/include/iotivity/oc_constants.h   |   43 +
 libs/iotivity/include/iotivity/oc_core_res.h    |   52 +
 libs/iotivity/include/iotivity/oc_discovery.h   |   22 +
 libs/iotivity/include/iotivity/oc_helpers.h     |   78 ++
 .../include/iotivity/oc_network_events.h        |   29 +
 libs/iotivity/include/iotivity/oc_rep.h         |  228 +++
 libs/iotivity/include/iotivity/oc_ri.h          |  176 +++
 libs/iotivity/include/iotivity/oc_uuid.h        |   31 +
 libs/iotivity/pkg.yml                           |   37 +
 libs/iotivity/src/api/oc_buffer.c               |  138 ++
 libs/iotivity/src/api/oc_client_api.c           |  287 ++++
 libs/iotivity/src/api/oc_core_res.c             |  280 ++++
 libs/iotivity/src/api/oc_discovery.c            |  298 ++++
 libs/iotivity/src/api/oc_events.h               |   34 +
 libs/iotivity/src/api/oc_helpers.c              |  164 +++
 libs/iotivity/src/api/oc_main.c                 |  119 ++
 libs/iotivity/src/api/oc_network_events.c       |   57 +
 libs/iotivity/src/api/oc_rep.c                  |  301 ++++
 libs/iotivity/src/api/oc_ri.c                   | 1016 ++++++++++++++
 libs/iotivity/src/api/oc_server_api.c           |  291 ++++
 libs/iotivity/src/api/oc_uuid.c                 |  119 ++
 libs/iotivity/src/messaging/coap/coap.c         | 1186 ++++++++++++++++
 libs/iotivity/src/messaging/coap/coap.h         |  297 ++++
 libs/iotivity/src/messaging/coap/conf.h         |   71 +
 libs/iotivity/src/messaging/coap/constants.h    |  158 +++
 libs/iotivity/src/messaging/coap/engine.c       |  333 +++++
 libs/iotivity/src/messaging/coap/engine.h       |   48 +
 libs/iotivity/src/messaging/coap/observe.c      |  319 +++++
 libs/iotivity/src/messaging/coap/observe.h      |   80 ++
 libs/iotivity/src/messaging/coap/oc_coap.h      |   39 +
 libs/iotivity/src/messaging/coap/separate.c     |  152 ++
 libs/iotivity/src/messaging/coap/separate.h     |   71 +
 libs/iotivity/src/messaging/coap/transactions.c |  202 +++
 libs/iotivity/src/messaging/coap/transactions.h |   75 +
 libs/iotivity/src/port/mynewt/config.h          |   50 +
 libs/iotivity/src/port/oc_assert.h              |   42 +
 libs/iotivity/src/port/oc_clock.h               |  102 ++
 libs/iotivity/src/port/oc_connectivity.h        |   83 ++
 libs/iotivity/src/port/oc_log.h                 |   46 +
 .../iotivity/src/port/oc_network_events_mutex.h |   26 +
 libs/iotivity/src/port/oc_random.h              |   56 +
 libs/iotivity/src/port/oc_signal_main_loop.h    |   22 +
 libs/iotivity/src/port/oc_storage.h             |   27 +
 libs/iotivity/src/security/oc_acl.c             |  412 ++++++
 libs/iotivity/src/security/oc_acl.h             |   63 +
 libs/iotivity/src/security/oc_cred.c            |  200 +++
 libs/iotivity/src/security/oc_cred.h            |   40 +
 libs/iotivity/src/security/oc_doxm.c            |  128 ++
 libs/iotivity/src/security/oc_doxm.h            |   45 +
 libs/iotivity/src/security/oc_dtls.c            |  372 +++++
 libs/iotivity/src/security/oc_dtls.h            |   50 +
 libs/iotivity/src/security/oc_pstat.c           |  119 ++
 libs/iotivity/src/security/oc_pstat.h           |   39 +
 libs/iotivity/src/security/oc_store.c           |  158 +++
 libs/iotivity/src/security/oc_store.h           |   26 +
 libs/iotivity/src/security/oc_svr.c             |   51 +
 libs/iotivity/src/security/oc_svr.h             |   22 +
 libs/iotivity/src/util/oc_etimer.c              |  263 ++++
 libs/iotivity/src/util/oc_etimer.h              |  247 ++++
 libs/iotivity/src/util/oc_list.c                |  317 +++++
 libs/iotivity/src/util/oc_list.h                |  144 ++
 libs/iotivity/src/util/oc_memb.c                |  111 ++
 libs/iotivity/src/util/oc_memb.h                |  127 ++
 libs/iotivity/src/util/oc_mmem.c                |  154 +++
 libs/iotivity/src/util/oc_mmem.h                |   53 +
 libs/iotivity/src/util/oc_process.c             |  346 +++++
 libs/iotivity/src/util/oc_process.h             |  527 +++++++
 libs/iotivity/src/util/oc_timer.c               |  131 ++
 libs/iotivity/src/util/oc_timer.h               |   88 ++
 libs/iotivity/src/util/pt/lc-addrlabels.h       |   86 ++
 libs/iotivity/src/util/pt/lc-switch.h           |   79 ++
 libs/iotivity/src/util/pt/lc.h                  |  130 ++
 libs/iotivity/src/util/pt/pt-sem.h              |  233 ++++
 libs/iotivity/src/util/pt/pt.h                  |  333 +++++
 libs/tinycbor/include/tinycbor/assert_p.h       |   29 +
 libs/tinycbor/include/tinycbor/cbor.h           |  479 +++++++
 .../tinycbor/include/tinycbor/cborconstants_p.h |   52 +
 libs/tinycbor/include/tinycbor/cborjson.h       |   62 +
 .../include/tinycbor/compilersupport_p.h        |  218 +++
 .../include/tinycbor/extract_number_p.h         |   78 ++
 libs/tinycbor/include/tinycbor/math_support_p.h |   47 +
 libs/tinycbor/pkg.yml                           |   26 +
 libs/tinycbor/src/cborencoder.c                 |  629 +++++++++
 .../src/cborencoder_close_container_checked.c   |   82 ++
 libs/tinycbor/src/cborerrorstrings.c            |  165 +++
 libs/tinycbor/src/cborparser.c                  | 1293 ++++++++++++++++++
 libs/tinycbor/src/cborparser_dup_string.c       |  113 ++
 libs/tinycbor/src/cborpretty.c                  |  470 +++++++
 libs/tinycbor/src/cbortojson.c                  |  686 ++++++++++
 libs/tinycbor/src/open_memstream.c              |  117 ++
 93 files changed, 17210 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/ece29bb3/libs/iotivity/include/iotivity/oc_api.h
----------------------------------------------------------------------
diff --git a/libs/iotivity/include/iotivity/oc_api.h b/libs/iotivity/include/iotivity/oc_api.h
new file mode 100644
index 0000000..e607668
--- /dev/null
+++ b/libs/iotivity/include/iotivity/oc_api.h
@@ -0,0 +1,165 @@
+/*
+// Copyright (c) 2016 Intel Corporation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+*/
+
+#ifndef OC_API_H
+#define OC_API_H
+
+#include "messaging/coap/oc_coap.h"
+#include "oc_ri.h"
+#include "port/oc_signal_main_loop.h"
+#include "port/oc_storage.h"
+
+typedef struct
+{
+  void (*init)(void);
+
+#ifdef OC_SECURITY
+  void (*get_credentials)(void);
+#endif /* OC_SECURITY */
+
+#ifdef OC_SERVER
+  void (*register_resources)(void);
+#endif /* OC_SERVER */
+
+#ifdef OC_CLIENT
+  void (*requests_entry)(void);
+#endif /* OC_CLIENT */
+} oc_handler_t;
+
+typedef void (*oc_init_platform_cb_t)(void *data);
+typedef void (*oc_add_device_cb_t)(void *data);
+
+int oc_main_init(oc_handler_t *handler);
+
+oc_clock_time_t oc_main_poll(void);
+
+void oc_main_shutdown(void);
+
+void oc_add_device(const char *uri, const char *rt, const char *name,
+                   const char *spec_version, const char *data_model_version,
+                   oc_add_device_cb_t add_device_cb, void *data);
+
+#define oc_set_custom_device_property(prop, value)                             \
+  oc_rep_set_text_string(root, prop, value)
+
+void oc_init_platform(const char *mfg_name,
+                      oc_init_platform_cb_t init_platform_cb, void *data);
+
+#define oc_set_custom_platform_property(prop, value)                           \
+  oc_rep_set_text_string(root, prop, value)
+
+/** Server side */
+oc_resource_t *oc_new_resource(const char *uri, uint8_t num_resource_types,
+                               int device);
+void oc_resource_bind_resource_interface(oc_resource_t *resource,
+                                         uint8_t interface);
+void oc_resource_set_default_interface(oc_resource_t *resource,
+                                       oc_interface_mask_t interface);
+void oc_resource_bind_resource_type(oc_resource_t *resource, const char *type);
+
+void oc_process_baseline_interface(oc_resource_t *resource);
+
+#ifdef OC_SECURITY
+void oc_resource_make_secure(oc_resource_t *resource);
+#endif /* OC_SECURITY */
+
+void oc_resource_set_discoverable(oc_resource_t *resource);
+void oc_resource_set_observable(oc_resource_t *resource);
+void oc_resource_set_periodic_observable(oc_resource_t *resource,
+                                         uint16_t seconds);
+void oc_resource_set_request_handler(oc_resource_t *resource,
+                                     oc_method_t method,
+                                     oc_request_handler_t handler);
+bool oc_add_resource(oc_resource_t *resource);
+void oc_delete_resource(oc_resource_t *resource);
+void oc_deactivate_resource(oc_resource_t *resource);
+
+void oc_init_query_iterator(oc_request_t *request);
+int oc_interate_query(oc_request_t *request, char **key, int *key_len,
+                      char **value, int *value_len);
+int oc_get_query_value(oc_request_t *request, const char *key, char **value);
+
+void oc_send_response(oc_request_t *request, oc_status_t response_code);
+void oc_ignore_request(oc_request_t *request);
+
+void oc_indicate_separate_response(oc_request_t *request,
+                                   oc_separate_response_t *response);
+void oc_set_separate_response_buffer(oc_separate_response_t *handle);
+void oc_send_separate_response(oc_separate_response_t *handle,
+                               oc_status_t response_code);
+
+int oc_notify_observers(oc_resource_t *resource);
+
+/** Client side */
+#include "oc_client_state.h"
+
+bool oc_do_ip_discovery(const char *rt, oc_discovery_cb_t handler);
+
+bool oc_do_get(const char *uri, oc_server_handle_t *server, const char *query,
+               oc_response_handler_t handler, oc_qos_t qos);
+
+bool oc_do_delete(const char *uri, oc_server_handle_t *server,
+                  oc_response_handler_t handler, oc_qos_t qos);
+
+bool oc_init_put(const char *uri, oc_server_handle_t *server, const char *query,
+                 oc_response_handler_t handler, oc_qos_t qos);
+
+bool oc_do_put(void);
+
+bool oc_init_post(const char *uri, oc_server_handle_t *server,
+                  const char *query, oc_response_handler_t handler,
+                  oc_qos_t qos);
+
+bool oc_do_post(void);
+
+bool oc_do_observe(const char *uri, oc_server_handle_t *server,
+                   const char *query, oc_response_handler_t handler,
+                   oc_qos_t qos);
+
+bool oc_stop_observe(const char *uri, oc_server_handle_t *server);
+
+/** Common operations */
+
+void oc_set_delayed_callback(void *cb_data, oc_trigger_t callback,
+                             uint16_t seconds);
+void oc_remove_delayed_callback(void *cb_data, oc_trigger_t callback);
+
+/** API for setting handlers for interrupts */
+
+#define oc_signal_interrupt_handler(name)                                      \
+  do {                                                                         \
+    oc_process_poll(&(name##_interrupt_x));                                    \
+    oc_signal_main_loop();                                                     \
+  } while (0)
+
+#define oc_activate_interrupt_handler(name)                                    \
+  (oc_process_start(&(name##_interrupt_x), 0))
+
+#define oc_define_interrupt_handler(name)                                      \
+  void name##_interrupt_x_handler(void);                                       \
+  OC_PROCESS(name##_interrupt_x, "");                                          \
+  OC_PROCESS_THREAD(name##_interrupt_x, ev, data)                              \
+  {                                                                            \
+    OC_PROCESS_POLLHANDLER(name##_interrupt_x_handler());                      \
+    OC_PROCESS_BEGIN();                                                        \
+    while (oc_process_is_running(&(name##_interrupt_x))) {                     \
+      OC_PROCESS_YIELD();                                                      \
+    }                                                                          \
+    OC_PROCESS_END();                                                          \
+  }                                                                            \
+  void name##_interrupt_x_handler(void)
+
+#endif /* OC_API_H */

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/ece29bb3/libs/iotivity/include/iotivity/oc_buffer.h
----------------------------------------------------------------------
diff --git a/libs/iotivity/include/iotivity/oc_buffer.h b/libs/iotivity/include/iotivity/oc_buffer.h
new file mode 100644
index 0000000..55373e6
--- /dev/null
+++ b/libs/iotivity/include/iotivity/oc_buffer.h
@@ -0,0 +1,32 @@
+/*
+// Copyright (c) 2016 Intel Corporation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+*/
+
+#ifndef OC_BUFFER_H
+#define OC_BUFFER_H
+
+#include "port/oc_connectivity.h"
+#include "util/oc_process.h"
+#include <stdbool.h>
+
+OC_PROCESS_NAME(message_buffer_handler);
+oc_message_t *oc_allocate_message(void);
+void oc_message_add_ref(oc_message_t *message);
+void oc_message_unref(oc_message_t *message);
+
+void oc_recv_message(oc_message_t *message);
+void oc_send_message(oc_message_t *message);
+
+#endif /* OC_BUFFER_H */

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/ece29bb3/libs/iotivity/include/iotivity/oc_client_state.h
----------------------------------------------------------------------
diff --git a/libs/iotivity/include/iotivity/oc_client_state.h b/libs/iotivity/include/iotivity/oc_client_state.h
new file mode 100644
index 0000000..7049c32
--- /dev/null
+++ b/libs/iotivity/include/iotivity/oc_client_state.h
@@ -0,0 +1,88 @@
+/*
+// Copyright (c) 2016 Intel Corporation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+*/
+
+#ifndef OC_CLIENT_STATE_H
+#define OC_CLIENT_STATE_H
+
+#include "messaging/coap/constants.h"
+#include "oc_ri.h"
+#include <stdbool.h>
+
+typedef enum { HIGH_QOS = 0, LOW_QOS } oc_qos_t;
+
+typedef struct
+{
+  oc_rep_t *payload;
+  oc_status_t code;
+  int observe_option;
+} oc_client_response_t;
+
+typedef struct
+{
+  oc_endpoint_t endpoint;
+} oc_server_handle_t;
+
+typedef enum {
+  OC_STOP_DISCOVERY = 0,
+  OC_CONTINUE_DISCOVERY
+} oc_discovery_flags_t;
+
+typedef oc_discovery_flags_t(oc_discovery_cb_t)(const char *, const char *,
+                                                oc_string_array_t,
+                                                oc_interface_mask_t,
+                                                oc_server_handle_t *);
+
+typedef void (*oc_response_handler_t)(oc_client_response_t *);
+
+typedef struct oc_client_cb_s
+{
+  struct oc_client_cb_s *next;
+  oc_string_t uri;
+  uint8_t token[COAP_TOKEN_LEN];
+  uint8_t token_len;
+  uint16_t mid;
+
+  oc_server_handle_t server;
+
+  void *handler;
+
+  bool discovery;
+  int32_t observe_seq;
+  oc_clock_time_t timestamp;
+  oc_qos_t qos;
+  oc_method_t method;
+} oc_client_cb_t;
+
+bool oc_ri_invoke_client_cb(void *response, oc_endpoint_t *endpoint);
+
+oc_client_cb_t *oc_ri_alloc_client_cb(const char *uri,
+                                      oc_server_handle_t *server,
+                                      oc_method_t method, void *handler,
+                                      oc_qos_t qos);
+
+oc_client_cb_t *oc_ri_get_client_cb(const char *uri, oc_server_handle_t *server,
+                                    oc_method_t method);
+
+void oc_ri_remove_client_cb_by_mid(uint16_t mid);
+
+oc_discovery_flags_t oc_ri_process_discovery_payload(uint8_t *payload, int len,
+                                                     oc_discovery_cb_t *handler,
+                                                     oc_endpoint_t *endpoint);
+
+bool oc_ri_send_rst(oc_endpoint_t *endpoint, uint8_t *token, uint8_t token_len,
+                    uint16_t mid);
+
+#endif /* OC_CLIENT_STATE_H */

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/ece29bb3/libs/iotivity/include/iotivity/oc_constants.h
----------------------------------------------------------------------
diff --git a/libs/iotivity/include/iotivity/oc_constants.h b/libs/iotivity/include/iotivity/oc_constants.h
new file mode 100644
index 0000000..0413ddc
--- /dev/null
+++ b/libs/iotivity/include/iotivity/oc_constants.h
@@ -0,0 +1,43 @@
+/*
+// Copyright (c) 2016 Intel Corporation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+*/
+
+#ifndef OC_CONSTANTS_H
+#define OC_CONSTANTS_H
+
+/* OCF standard resource interfaces */
+#define OC_NUM_STD_INTERFACES (7)
+#define OC_RSRVD_IF_BASELINE "oic.if.baseline"
+#define OC_BASELINE_IF_LEN (15)
+#define OC_RSRVD_IF_LL "oic.if.ll"
+#define OC_LL_IF_LEN (9)
+#define OC_RSRVD_IF_B "oic.if.b"
+#define OC_B_IF_LEN (8)
+#define OC_RSRVD_IF_R "oic.if.r"
+#define OC_R_IF_LEN (8)
+#define OC_RSRVD_IF_RW "oic.if.rw"
+#define OC_RW_IF_LEN (9)
+#define OC_RSRVD_IF_A "oic.if.a"
+#define OC_A_IF_LEN (8)
+#define OC_RSRVD_IF_S "oic.if.s"
+#define OC_S_IF_LEN (8)
+
+/* OCF Core resource URIs */
+#define OC_RSRVD_WELL_KNOWN_URI "/oic/res"
+#define OC_MULTICAST_DISCOVERY_URI "/oic/res"
+#define OC_RSRVD_DEVICE_URI "/oic/d"
+#define OC_RSRVD_PLATFORM_URI "/oic/p"
+
+#endif /* OC_CONSTANTS_H */

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/ece29bb3/libs/iotivity/include/iotivity/oc_core_res.h
----------------------------------------------------------------------
diff --git a/libs/iotivity/include/iotivity/oc_core_res.h b/libs/iotivity/include/iotivity/oc_core_res.h
new file mode 100644
index 0000000..69e5879
--- /dev/null
+++ b/libs/iotivity/include/iotivity/oc_core_res.h
@@ -0,0 +1,52 @@
+/*
+// Copyright (c) 2016 Intel Corporation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+*/
+
+#ifndef OC_CORE_RES_H
+#define OC_CORE_RES_H
+
+#include "oc_ri.h"
+
+typedef void (*oc_core_init_platform_cb_t)(void *data);
+typedef void (*oc_core_add_device_cb_t)(void *data);
+
+oc_string_t *oc_core_init_platform(const char *mfg_name,
+                                   oc_core_init_platform_cb_t init_cb,
+                                   void *data);
+
+oc_string_t *oc_core_add_new_device(const char *uri, const char *rt,
+                                    const char *name, const char *spec_version,
+                                    const char *data_model_version,
+                                    oc_core_add_device_cb_t add_device_cb,
+                                    void *data);
+
+int oc_core_get_num_devices(void);
+
+oc_uuid_t *oc_core_get_device_id(int device);
+
+void oc_core_encode_interfaces_mask(CborEncoder *parent,
+                                    oc_interface_mask_t interface);
+
+oc_resource_t *oc_core_get_resource_by_index(int type);
+
+oc_resource_t *oc_core_get_resource_by_uri(const char *uri);
+
+void oc_core_populate_resource(
+  int type, const char *uri, const char *rt, oc_interface_mask_t interfaces,
+  oc_interface_mask_t default_interface, oc_resource_properties_t properties,
+  oc_request_handler_t get, oc_request_handler_t put, oc_request_handler_t post,
+  oc_request_handler_t delete, int device);
+
+#endif /* OC_CORE_RES_H */

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/ece29bb3/libs/iotivity/include/iotivity/oc_discovery.h
----------------------------------------------------------------------
diff --git a/libs/iotivity/include/iotivity/oc_discovery.h b/libs/iotivity/include/iotivity/oc_discovery.h
new file mode 100644
index 0000000..6fd3f29
--- /dev/null
+++ b/libs/iotivity/include/iotivity/oc_discovery.h
@@ -0,0 +1,22 @@
+/*
+// Copyright (c) 2016 Intel Corporation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+*/
+
+#ifndef OC_DISCOVERY_H
+#define OC_DISCOVERY_H
+
+void oc_create_discovery_resource(void);
+
+#endif /* OC_DISCOVERY_H */

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/ece29bb3/libs/iotivity/include/iotivity/oc_helpers.h
----------------------------------------------------------------------
diff --git a/libs/iotivity/include/iotivity/oc_helpers.h b/libs/iotivity/include/iotivity/oc_helpers.h
new file mode 100644
index 0000000..4a8cd1e
--- /dev/null
+++ b/libs/iotivity/include/iotivity/oc_helpers.h
@@ -0,0 +1,78 @@
+/*
+// Copyright (c) 2016 Intel Corporation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+*/
+
+#ifndef OC_HELPERS_H
+#define OC_HELPERS_H
+
+#include "util/oc_list.h"
+#include "util/oc_mmem.h"
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <string.h>
+
+typedef struct oc_mmem oc_handle_t, oc_string_t, oc_array_t, oc_string_array_t;
+
+#define oc_cast(block, type) ((type *)(OC_MMEM_PTR(&(block))))
+#define oc_string(ocstring) (oc_cast(ocstring, char))
+
+void oc_new_string(oc_string_t *ocstring, const char str[]);
+void oc_alloc_string(oc_string_t *ocstring, int size);
+void oc_free_string(oc_string_t *ocstring);
+void oc_concat_strings(oc_string_t *concat, const char *str1, const char *str2);
+#define oc_string_len(ocstring) ((ocstring).size ? (ocstring).size - 1 : 0)
+
+void _oc_new_array(oc_array_t *ocarray, uint8_t size, pool type);
+void _oc_free_array(oc_array_t *ocarray, pool type);
+#define oc_new_int_array(ocarray, size) (_oc_new_array(ocarray, size, INT_POOL))
+#define oc_new_bool_array(ocarray, size)                                       \
+  (_oc_new_array(ocarray, size, BYTE_POOL))
+#define oc_new_double_array(ocarray, size)                                     \
+  (_oc_new_array(ocarray, size, DOUBLE_POOL))
+#define oc_free_int_array(ocarray) (_oc_free_array(ocarray, INT_POOL))
+#define oc_free_bool_array(ocarray) (_oc_free_array(ocarray, BYTE_POOL))
+#define oc_free_double_array(ocarray) (_oc_free_array(ocarray, DOUBLE_POOL))
+#define oc_int_array_size(ocintarray) ((ocintarray).size / sizeof(int64_t))
+#define oc_bool_array_size(ocboolarray) ((ocboolarray).size / sizeof(bool))
+#define oc_double_array_size(ocdoublearray)                                    \
+  ((ocdoublearray).size / sizeof(double))
+#define oc_int_array(ocintarray) (oc_cast(ocintarray, int64_t))
+#define oc_bool_array(ocboolarray) (oc_cast(ocboolarray, bool))
+#define oc_double_array(ocdoublearray) (oc_cast(ocdoublearray, double))
+
+#define STRING_ARRAY_ITEM_MAX_LEN 24
+void _oc_alloc_string_array(oc_string_array_t *ocstringarray, uint8_t size);
+bool _oc_copy_string_to_string_array(oc_string_array_t *ocstringarray,
+                                     const char str[], uint8_t index);
+bool _oc_string_array_add_item(oc_string_array_t *ocstringarray,
+                               const char str[]);
+void oc_join_string_array(oc_string_array_t *ocstringarray,
+                          oc_string_t *ocstring);
+#define oc_new_string_array(ocstringarray, size)                               \
+  (_oc_alloc_string_array(ocstringarray, size))
+#define oc_free_string_array(ocstringarray) (oc_free_string(ocstringarray))
+#define oc_string_array_add_item(ocstringarray, str)                           \
+  (_oc_string_array_add_item(&(ocstringarray), str))
+#define oc_string_array_get_item(ocstringarray, index)                         \
+  (oc_string(ocstringarray) + index * STRING_ARRAY_ITEM_MAX_LEN)
+#define oc_string_array_set_item(ocstringarray, str, index)                    \
+  (_oc_copy_string_to_string_array(&(ocstringarray), str, index))
+#define oc_string_array_get_item_size(ocstringarray, index)                    \
+  (strlen((const char *)oc_string_array_get_item(ocstringarray, index)))
+#define oc_string_array_get_allocated_size(ocstringarray)                      \
+  ((ocstringarray).size / STRING_ARRAY_ITEM_MAX_LEN)
+
+#endif /* OC_HELPERS_H */

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/ece29bb3/libs/iotivity/include/iotivity/oc_network_events.h
----------------------------------------------------------------------
diff --git a/libs/iotivity/include/iotivity/oc_network_events.h b/libs/iotivity/include/iotivity/oc_network_events.h
new file mode 100644
index 0000000..a678666
--- /dev/null
+++ b/libs/iotivity/include/iotivity/oc_network_events.h
@@ -0,0 +1,29 @@
+/*
+// Copyright (c) 2016 Intel Corporation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+*/
+
+#ifndef OC_NETWORK_EVENTS_H
+#define OC_NETWORK_EVENTS_H
+
+#include "port/oc_network_events_mutex.h"
+#include "util/oc_process.h"
+
+OC_PROCESS_NAME(oc_network_events);
+
+typedef struct oc_message_s oc_message_t;
+
+void oc_network_event(oc_message_t *message);
+
+#endif /* OC_NETWORK_EVENTS_H */

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/ece29bb3/libs/iotivity/include/iotivity/oc_rep.h
----------------------------------------------------------------------
diff --git a/libs/iotivity/include/iotivity/oc_rep.h b/libs/iotivity/include/iotivity/oc_rep.h
new file mode 100644
index 0000000..b7a88be
--- /dev/null
+++ b/libs/iotivity/include/iotivity/oc_rep.h
@@ -0,0 +1,228 @@
+/*
+// Copyright (c) 2016 Intel Corporation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+*/
+
+#ifndef OC_REP_H
+#define OC_REP_H
+
+#include <tinycbor/cbor.h>
+#include "oc_constants.h"
+#include "oc_helpers.h"
+#include <config.h>
+#include <stdbool.h>
+#include <stdint.h>
+
+extern CborEncoder g_encoder, root_map, links_array;
+extern CborError g_err;
+
+void oc_rep_new(uint8_t *payload, int size);
+void oc_rep_reset(void);
+int oc_rep_finalize(void);
+
+#define oc_rep_object(name) &name##_map
+#define oc_rep_array(name) &name##_array
+
+#define oc_rep_set_double(object, key, value)                                  \
+  do {                                                                         \
+    g_err |= cbor_encode_text_string(&object##_map, #key, strlen(#key));       \
+    g_err |= cbor_encode_double(&object##_map, value);                         \
+  } while (0)
+
+#define oc_rep_set_int(object, key, value)                                     \
+  do {                                                                         \
+    g_err |= cbor_encode_text_string(&object##_map, #key, strlen(#key));       \
+    g_err |= cbor_encode_int(&object##_map, value);                            \
+  } while (0)
+
+#define oc_rep_set_uint(object, key, value)                                    \
+  do {                                                                         \
+    g_err |= cbor_encode_text_string(&object##_map, #key, strlen(#key));       \
+    g_err |= cbor_encode_uint(&object##_map, value);                           \
+  } while (0)
+
+#define oc_rep_set_boolean(object, key, value)                                 \
+  do {                                                                         \
+    g_err |= cbor_encode_text_string(&object##_map, #key, strlen(#key));       \
+    g_err |= cbor_encode_boolean(&object##_map, value);                        \
+  } while (0)
+
+#define oc_rep_set_text_string(object, key, value)                             \
+  do {                                                                         \
+    g_err |= cbor_encode_text_string(&object##_map, #key, strlen(#key));       \
+    g_err |= cbor_encode_text_string(&object##_map, value, strlen(value));     \
+  } while (0)
+
+#define oc_rep_set_byte_string(object, key, value)                             \
+  do {                                                                         \
+    g_err |= cbor_encode_text_string(&object##_map, #key, strlen(#key));       \
+    g_err |= cbor_encode_byte_string(&object##_map, value, strlen(value));     \
+  } while (0)
+
+#define oc_rep_start_array(parent, key)                                        \
+  do {                                                                         \
+    CborEncoder key##_array;                                                   \
+  g_err |=                                                                     \
+    cbor_encoder_create_array(&parent, &key##_array, CborIndefiniteLength)
+
+#define oc_rep_end_array(parent, key)                                          \
+  g_err |= cbor_encoder_close_container(&parent, &key##_array);                \
+  }                                                                            \
+  while (0)
+
+#define oc_rep_start_links_array()                                             \
+  g_err |=                                                                     \
+    cbor_encoder_create_array(&g_encoder, &links_array, CborIndefiniteLength)
+
+#define oc_rep_end_links_array()                                               \
+  g_err |= cbor_encoder_close_container(&g_encoder, &links_array)
+
+#define oc_rep_start_root_object()                                             \
+  g_err |= cbor_encoder_create_map(&g_encoder, &root_map, CborIndefiniteLength)
+
+#define oc_rep_end_root_object()                                               \
+  g_err |= cbor_encoder_close_container(&g_encoder, &root_map)
+
+#define oc_rep_add_byte_string(parent, value)                                  \
+  g_err |= cbor_encode_byte_string(&parent##_array, value, strlen(value))
+
+#define oc_rep_add_text_string(parent, value)                                  \
+  g_err |= cbor_encode_text_string(&parent##_array, value, strlen(value))
+
+#define oc_rep_set_key(parent, key)                                            \
+  g_err |= cbor_encode_text_string(&parent, key, strlen(key))
+
+#define oc_rep_set_array(object, key)                                          \
+  g_err |= cbor_encode_text_string(&object##_map, #key, strlen(#key));         \
+  oc_rep_start_array(object##_map, key)
+
+#define oc_rep_close_array(object, key) oc_rep_end_array(object##_map, key)
+
+#define oc_rep_start_object(parent, key)                                       \
+  do {                                                                         \
+    CborEncoder key##_map;                                                     \
+  g_err |= cbor_encoder_create_map(&parent, &key##_map, CborIndefiniteLength)
+
+#define oc_rep_end_object(parent, key)                                         \
+  g_err |= cbor_encoder_close_container(&parent, &key##_map);                  \
+  }                                                                            \
+  while (0)
+
+#define oc_rep_object_array_start_item(key)                                    \
+  oc_rep_start_object(key##_array, key)
+
+#define oc_rep_object_array_end_item(key) oc_rep_end_object(key##_array, key)
+
+#define oc_rep_set_object(object, key)                                         \
+  g_err |= cbor_encode_text_string(&object##_map, #key, strlen(#key));         \
+  oc_rep_start_object(object##_map, key)
+
+#define oc_rep_close_object(object, key) oc_rep_end_object(object##_map, key)
+
+#define oc_rep_set_int_array(object, key, values, length)                      \
+  do {                                                                         \
+    g_err |= cbor_encode_text_string(&object##_map, #key, strlen(#key));       \
+    CborEncoder key##_value_array;                                             \
+    g_err |=                                                                   \
+      cbor_encoder_create_array(&object##_map, &key##_value_array, length);    \
+    int i;                                                                     \
+    for (i = 0; i < length; i++) {                                             \
+      g_err |= cbor_encode_int(&key##_value_array, values[i]);                 \
+    }                                                                          \
+    g_err |= cbor_encoder_close_container(&object##_map, &key##_value_array);  \
+  } while (0)
+
+#define oc_rep_set_bool_array(object, key, values, length)                     \
+  do {                                                                         \
+    g_err |= cbor_encode_text_string(&object##_map, #key, strlen(#key));       \
+    CborEncoder key##_value_array;                                             \
+    g_err |=                                                                   \
+      cbor_encoder_create_array(&object##_map, &key##_value_array, length);    \
+    int i;                                                                     \
+    for (i = 0; i < length; i++) {                                             \
+      g_err |= cbor_encode_boolean(&key##_value_array, values[i]);             \
+    }                                                                          \
+    g_err |= cbor_encoder_close_container(&object##_map, &key##_value_array);  \
+  } while (0)
+
+#define oc_rep_set_double_array(object, key, values, length)                   \
+  do {                                                                         \
+    g_err |= cbor_encode_text_string(&object##_map, #key, strlen(#key));       \
+    CborEncoder key##_value_array;                                             \
+    g_err |=                                                                   \
+      cbor_encoder_create_array(&object##_map, &key##_value_array, length);    \
+    int i;                                                                     \
+    for (i = 0; i < length; i++) {                                             \
+      g_err |= cbor_encode_floating_point(&key##_value_array, CborDoubleType,  \
+                                          &values[i]);                         \
+    }                                                                          \
+    g_err |= cbor_encoder_close_container(&object##_map, &key##_value_array);  \
+  } while (0)
+
+#define oc_rep_set_string_array(object, key, values)                           \
+  do {                                                                         \
+    g_err |= cbor_encode_text_string(&object##_map, #key, strlen(#key));       \
+    CborEncoder key##_value_array;                                             \
+    g_err |=                                                                   \
+      cbor_encoder_create_array(&object##_map, &key##_value_array,             \
+                                oc_string_array_get_allocated_size(values));   \
+    int i;                                                                     \
+    for (i = 0; i < oc_string_array_get_allocated_size(values); i++) {         \
+      g_err |= cbor_encode_text_string(                                        \
+        &key##_value_array, oc_string_array_get_item(values, i),               \
+        oc_string_array_get_item_size(values, i));                             \
+    }                                                                          \
+    g_err |= cbor_encoder_close_container(&object##_map, &key##_value_array);  \
+  } while (0)
+
+typedef enum {
+  NIL = 0,
+  INT = 0x01,
+  DOUBLE = 0x02,
+  BOOL = 0x03,
+  BYTE_STRING = 0x04,
+  STRING = 0x05,
+  OBJECT = 0x06,
+  ARRAY = 0x08,
+  INT_ARRAY = 0x09,
+  DOUBLE_ARRAY = 0x0A,
+  BOOL_ARRAY = 0x0B,
+  BYTE_STRING_ARRAY = 0x0C,
+  STRING_ARRAY = 0x0D,
+  OBJECT_ARRAY = 0x0E
+} oc_rep_value_type_t;
+
+typedef struct oc_rep_s
+{
+  oc_rep_value_type_t type;
+  struct oc_rep_s *next;
+  oc_string_t name;
+  union
+  {
+    int64_t value_int;
+    bool value_boolean;
+    double value_double;
+    oc_string_t value_string;
+    oc_array_t value_array;
+    struct oc_rep_s *value_object;
+    struct oc_rep_s *value_object_array;
+  };
+} oc_rep_t;
+
+uint16_t oc_parse_rep(const uint8_t *payload, uint16_t payload_size,
+                      oc_rep_t **value_list);
+
+void oc_free_rep(oc_rep_t *rep);
+
+#endif /* OC_REP_H */

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/ece29bb3/libs/iotivity/include/iotivity/oc_ri.h
----------------------------------------------------------------------
diff --git a/libs/iotivity/include/iotivity/oc_ri.h b/libs/iotivity/include/iotivity/oc_ri.h
new file mode 100644
index 0000000..5e96656
--- /dev/null
+++ b/libs/iotivity/include/iotivity/oc_ri.h
@@ -0,0 +1,176 @@
+/*
+// Copyright (c) 2016 Intel Corporation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+*/
+
+#ifndef OC_RI_H
+#define OC_RI_H
+
+#include "config.h"
+#include "oc_rep.h"
+#include "oc_uuid.h"
+#include "port/oc_connectivity.h"
+#include "util/oc_etimer.h"
+
+typedef enum { OC_GET = 1, OC_POST, OC_PUT, OC_DELETE } oc_method_t;
+
+typedef enum {
+  OC_DISCOVERABLE = (1 << 0),
+  OC_OBSERVABLE = (1 << 1),
+  OC_ACTIVE = (1 << 2),
+  OC_SECURE = (1 << 4),
+  OC_PERIODIC = (1 << 6),
+} oc_resource_properties_t;
+
+typedef enum {
+  OC_STATUS_OK = 0,
+  OC_STATUS_CREATED,
+  OC_STATUS_CHANGED,
+  OC_STATUS_DELETED,
+  OC_STATUS_NOT_MODIFIED,
+  OC_STATUS_BAD_REQUEST,
+  OC_STATUS_UNAUTHORIZED,
+  OC_STATUS_BAD_OPTION,
+  OC_STATUS_FORBIDDEN,
+  OC_STATUS_NOT_FOUND,
+  OC_STATUS_METHOD_NOT_ALLOWED,
+  OC_STATUS_NOT_ACCEPTABLE,
+  OC_STATUS_REQUEST_ENTITY_TOO_LARGE,
+  OC_STATUS_UNSUPPORTED_MEDIA_TYPE,
+  OC_STATUS_INTERNAL_SERVER_ERROR,
+  OC_STATUS_NOT_IMPLEMENTED,
+  OC_STATUS_BAD_GATEWAY,
+  OC_STATUS_SERVICE_UNAVAILABLE,
+  OC_STATUS_GATEWAY_TIMEOUT,
+  OC_STATUS_PROXYING_NOT_SUPPORTED,
+  __NUM_OC_STATUS_CODES__,
+  OC_IGNORE
+} oc_status_t;
+
+typedef struct oc_separate_response_s oc_separate_response_t;
+
+typedef struct oc_response_buffer_s oc_response_buffer_t;
+
+typedef struct
+{
+  oc_separate_response_t *separate_response;
+  oc_response_buffer_t *response_buffer;
+} oc_response_t;
+
+typedef enum {
+  OC_IF_BASELINE = 1 << 1,
+  OC_IF_LL = 1 << 2,
+  OC_IF_B = 1 << 3,
+  OC_IF_R = 1 << 4,
+  OC_IF_RW = 1 << 5,
+  OC_IF_A = 1 << 6,
+  OC_IF_S = 1 << 7,
+} oc_interface_mask_t;
+
+typedef enum {
+  OCF_RES = 0,
+  OCF_P,
+#ifdef OC_SECURITY
+  OCF_SEC_DOXM,
+  OCF_SEC_PSTAT,
+  OCF_SEC_ACL,
+  OCF_SEC_CRED,
+#endif
+  __NUM_OC_CORE_RESOURCES__
+} oc_core_resource_t;
+
+#define NUM_OC_CORE_RESOURCES (__NUM_OC_CORE_RESOURCES__ + MAX_NUM_DEVICES)
+
+typedef struct oc_resource_s oc_resource_t;
+
+typedef struct
+{
+  oc_endpoint_t *origin;
+  oc_resource_t *resource;
+  const char *query;
+  int query_len;
+  oc_rep_t *request_payload;
+  oc_response_t *response;
+} oc_request_t;
+
+typedef void (*oc_request_handler_t)(oc_request_t *, oc_interface_mask_t);
+
+typedef struct oc_resource_s
+{
+  struct oc_resource_s *next;
+  int device;
+  oc_string_t uri;
+  oc_string_array_t types;
+  oc_interface_mask_t interfaces;
+  oc_interface_mask_t default_interface;
+  oc_resource_properties_t properties;
+  oc_request_handler_t get_handler;
+  oc_request_handler_t put_handler;
+  oc_request_handler_t post_handler;
+  oc_request_handler_t delete_handler;
+  uint16_t observe_period_seconds;
+  uint8_t num_observers;
+} oc_resource_t;
+
+typedef enum { DONE = 0, CONTINUE } oc_event_callback_retval_t;
+
+typedef oc_event_callback_retval_t (*oc_trigger_t)(void *);
+
+typedef struct oc_event_callback_s
+{
+  struct oc_event_callback_s *next;
+  struct oc_etimer timer;
+  oc_trigger_t callback;
+  void *data;
+} oc_event_callback_t;
+
+void oc_ri_init(void);
+
+void oc_ri_shutdown(void);
+
+void oc_ri_add_timed_event_callback_ticks(void *cb_data,
+                                          oc_trigger_t event_callback,
+                                          oc_clock_time_t ticks);
+
+#define oc_ri_add_timed_event_callback_seconds(cb_data, event_callback,        \
+                                               seconds)                        \
+  do {                                                                         \
+    oc_ri_add_timed_event_callback_ticks(                                      \
+      cb_data, event_callback, (oc_clock_time_t)(seconds * OC_CLOCK_SECOND));  \
+  } while (0)
+
+void oc_ri_remove_timed_event_callback(void *cb_data,
+                                       oc_trigger_t event_callback);
+
+int oc_status_code(oc_status_t key);
+
+oc_resource_t *oc_ri_get_app_resource_by_uri(const char *uri);
+
+oc_resource_t *oc_ri_get_app_resources(void);
+
+#ifdef OC_SERVER
+oc_resource_t *oc_ri_alloc_resource(void);
+bool oc_ri_add_resource(oc_resource_t *resource);
+void oc_ri_delete_resource(oc_resource_t *resource);
+#endif
+
+int oc_ri_get_query_nth_key_value(const char *query, int query_len, char **key,
+                                  int *key_len, char **value, int *value_len,
+                                  int n);
+int oc_ri_get_query_value(const char *query, int query_len, const char *key,
+                          char **value);
+
+oc_interface_mask_t oc_ri_get_interface_mask(char *iface, int if_len);
+
+#endif /* OC_RI_H */

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/ece29bb3/libs/iotivity/include/iotivity/oc_uuid.h
----------------------------------------------------------------------
diff --git a/libs/iotivity/include/iotivity/oc_uuid.h b/libs/iotivity/include/iotivity/oc_uuid.h
new file mode 100644
index 0000000..b1e5b26
--- /dev/null
+++ b/libs/iotivity/include/iotivity/oc_uuid.h
@@ -0,0 +1,31 @@
+/*
+// Copyright (c) 2016 Intel Corporation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+*/
+
+#ifndef OC_UUID_H
+#define OC_UUID_H
+
+#include <stdint.h>
+
+typedef struct
+{
+  uint8_t id[16];
+} oc_uuid_t;
+
+void oc_str_to_uuid(const char *str, oc_uuid_t *uuid);
+void oc_uuid_to_str(const oc_uuid_t *uuid, char *buffer, int buflen);
+void oc_gen_uuid(oc_uuid_t *uuid);
+
+#endif /* OC_UUID_H */

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/ece29bb3/libs/iotivity/pkg.yml
----------------------------------------------------------------------
diff --git a/libs/iotivity/pkg.yml b/libs/iotivity/pkg.yml
new file mode 100644
index 0000000..f8f9f03
--- /dev/null
+++ b/libs/iotivity/pkg.yml
@@ -0,0 +1,37 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+# 
+#  http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+pkg.name: libs/iotivity
+pkg.description: OCF contstrained iotivity stack
+pkg.author: "https://github.com/iotivity/iotivity-constrained"
+pkg.homepage: "https://www.iotivity.org/"
+pkg.keywords:
+
+pkg.deps:
+    - "@apache-mynewt-core/libs/tinycbor"
+    - "@apache-mynewt-core/libs/os"
+
+pkg.cflags: -DDEBUG=1
+        -DSECURE=0
+        -I./port/mynewt
+        -I../port/mynewt
+        -I../../port/mynewt
+        -I../include/iotivity
+        -I../../include/iotivity
+        -I../../../include/iotivity
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/ece29bb3/libs/iotivity/src/api/oc_buffer.c
----------------------------------------------------------------------
diff --git a/libs/iotivity/src/api/oc_buffer.c b/libs/iotivity/src/api/oc_buffer.c
new file mode 100644
index 0000000..e623221
--- /dev/null
+++ b/libs/iotivity/src/api/oc_buffer.c
@@ -0,0 +1,138 @@
+/*
+// Copyright (c) 2016 Intel Corporation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+*/
+
+#include "messaging/coap/engine.h"
+#include "port/oc_signal_main_loop.h"
+#include "util/oc_memb.h"
+#include <stdint.h>
+#include <stdio.h>
+
+#ifdef OC_SECURITY
+#include "security/oc_dtls.h"
+#endif
+
+#include "config.h"
+#include "oc_buffer.h"
+#include "oc_events.h"
+
+OC_PROCESS(message_buffer_handler, "OC Message Buffer Handler");
+OC_MEMB(oc_buffers_s, oc_message_t, (MAX_NUM_CONCURRENT_REQUESTS * 2));
+
+oc_message_t *
+oc_allocate_message(void)
+{
+  oc_message_t *message = (oc_message_t *)oc_memb_alloc(&oc_buffers_s);
+  if (message) {
+    message->length = 0;
+    message->next = 0;
+    message->ref_count = 1;
+    LOG("buffer: Allocated TX/RX buffer; num free: %d\n",
+        oc_memb_numfree(&oc_buffers_s));
+  } else
+    LOG("buffer: No free TX/RX buffers!\n");
+  return message;
+}
+
+void
+oc_message_add_ref(oc_message_t *message)
+{
+  if (message)
+    message->ref_count++;
+}
+
+void
+oc_message_unref(oc_message_t *message)
+{
+  if (message) {
+    message->ref_count--;
+    if (message->ref_count == 0) {
+      oc_memb_free(&oc_buffers_s, message);
+      LOG("buffer: freed TX/RX buffer; num free: %d\n",
+          oc_memb_numfree(&oc_buffers_s));
+    }
+  }
+}
+
+void
+oc_recv_message(oc_message_t *message)
+{
+  oc_process_post(&message_buffer_handler, oc_events[INBOUND_NETWORK_EVENT],
+                  message);
+}
+
+void
+oc_send_message(oc_message_t *message)
+{
+  oc_process_post(&message_buffer_handler, oc_events[OUTBOUND_NETWORK_EVENT],
+                  message);
+
+  oc_signal_main_loop();
+}
+
+OC_PROCESS_THREAD(message_buffer_handler, ev, data)
+{
+  OC_PROCESS_BEGIN();
+  LOG("Started buffer handler process\n");
+  while (1) {
+    OC_PROCESS_YIELD();
+
+    if (ev == oc_events[INBOUND_NETWORK_EVENT]) {
+#ifdef OC_SECURITY
+      uint8_t b = (uint8_t)((oc_message_t *)data)->data[0];
+      if (b > 19 && b < 64) {
+        LOG("Inbound network event: encrypted request\n");
+        oc_process_post(&oc_dtls_handler, oc_events[UDP_TO_DTLS_EVENT], data);
+      } else {
+        LOG("Inbound network event: decrypted request\n");
+        oc_process_post(&coap_engine, oc_events[INBOUND_RI_EVENT], data);
+      }
+#else
+      LOG("Inbound network event: decrypted request\n");
+      oc_process_post(&coap_engine, oc_events[INBOUND_RI_EVENT], data);
+#endif
+    } else if (ev == oc_events[OUTBOUND_NETWORK_EVENT]) {
+      oc_message_t *message = (oc_message_t *)data;
+
+#ifdef OC_CLIENT
+      if (message->endpoint.flags & MULTICAST) {
+        LOG("Outbound network event: multicast request\n");
+        oc_send_multicast_message(message);
+        oc_message_unref(message);
+      } else
+#endif
+#ifdef OC_SECURITY
+        if (message->endpoint.flags & SECURED) {
+        LOG("Outbound network event: forwarding to DTLS\n");
+
+        if (!oc_sec_dtls_connected(&message->endpoint)) {
+          LOG("Posting INIT_DTLS_CONN_EVENT\n");
+          oc_process_post(&oc_dtls_handler, oc_events[INIT_DTLS_CONN_EVENT],
+                          data);
+        } else {
+          LOG("Posting RI_TO_DTLS_EVENT\n");
+          oc_process_post(&oc_dtls_handler, oc_events[RI_TO_DTLS_EVENT], data);
+        }
+      } else
+#endif
+      {
+        LOG("Outbound network event: unicast message\n");
+        oc_send_buffer(message);
+        oc_message_unref(message);
+      }
+    }
+  }
+  OC_PROCESS_END();
+}

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/ece29bb3/libs/iotivity/src/api/oc_client_api.c
----------------------------------------------------------------------
diff --git a/libs/iotivity/src/api/oc_client_api.c b/libs/iotivity/src/api/oc_client_api.c
new file mode 100644
index 0000000..bd73da3
--- /dev/null
+++ b/libs/iotivity/src/api/oc_client_api.c
@@ -0,0 +1,287 @@
+/*
+// Copyright (c) 2016 Intel Corporation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+*/
+
+#include "messaging/coap/coap.h"
+#include "messaging/coap/transactions.h"
+#include "oc_api.h"
+
+#ifdef OC_CLIENT
+#define OC_CLIENT_CB_TIMEOUT_SECS COAP_RESPONSE_TIMEOUT
+
+static oc_message_t *message;
+static coap_transaction_t *transaction;
+coap_packet_t request[1];
+
+static bool
+dispatch_coap_request(void)
+{
+  int response_length = oc_rep_finalize();
+  if (!transaction) {
+    if (message) {
+      if (response_length) {
+        coap_set_payload(request, message->data + COAP_MAX_HEADER_SIZE,
+                         response_length);
+        coap_set_header_content_format(request, APPLICATION_CBOR);
+      }
+      message->length = coap_serialize_message(request, message->data);
+      coap_send_message(message);
+      message = 0;
+      return true;
+    }
+  } else {
+    if (response_length) {
+      coap_set_payload(request,
+                       transaction->message->data + COAP_MAX_HEADER_SIZE,
+                       response_length);
+      coap_set_header_content_format(request, APPLICATION_CBOR);
+    }
+    transaction->message->length =
+      coap_serialize_message(request, transaction->message->data);
+    coap_send_transaction(transaction);
+    transaction = 0;
+    return true;
+  }
+  return false;
+}
+
+static bool
+prepare_coap_request(oc_client_cb_t *cb, oc_string_t *query)
+{
+  coap_message_type_t type = COAP_TYPE_NON;
+
+  if (cb->qos == HIGH_QOS) {
+    type = COAP_TYPE_CON;
+    transaction = coap_new_transaction(cb->mid, &cb->server.endpoint);
+    if (!transaction)
+      return false;
+    oc_rep_new(transaction->message->data + COAP_MAX_HEADER_SIZE,
+               COAP_MAX_BLOCK_SIZE);
+  } else {
+    message = oc_allocate_message();
+    if (!message)
+      return false;
+    memcpy(&message->endpoint, &cb->server.endpoint, sizeof(oc_endpoint_t));
+    oc_rep_new(message->data + COAP_MAX_HEADER_SIZE, COAP_MAX_BLOCK_SIZE);
+  }
+
+  coap_init_message(request, type, cb->method, cb->mid);
+
+  coap_set_header_accept(request, APPLICATION_CBOR);
+
+  coap_set_token(request, cb->token, cb->token_len);
+
+  coap_set_header_uri_path(request, oc_string(cb->uri));
+
+  if (cb->observe_seq != -1)
+    coap_set_header_observe(request, cb->observe_seq);
+
+  if (query && oc_string_len(*query))
+    coap_set_header_uri_query(request, oc_string(*query));
+
+  if (cb->observe_seq == -1 && cb->qos == LOW_QOS) {
+    extern oc_event_callback_retval_t oc_ri_remove_client_cb(void *data);
+
+    oc_set_delayed_callback(cb, &oc_ri_remove_client_cb,
+                            OC_CLIENT_CB_TIMEOUT_SECS);
+  }
+
+  return true;
+}
+
+bool
+oc_do_delete(const char *uri, oc_server_handle_t *server,
+             oc_response_handler_t handler, oc_qos_t qos)
+{
+  oc_client_cb_t *cb =
+    oc_ri_alloc_client_cb(uri, server, OC_DELETE, handler, qos);
+  if (!cb)
+    return false;
+
+  bool status = false;
+
+  status = prepare_coap_request(cb, NULL);
+
+  if (status)
+    status = dispatch_coap_request();
+
+  return status;
+}
+
+bool
+oc_do_get(const char *uri, oc_server_handle_t *server, const char *query,
+          oc_response_handler_t handler, oc_qos_t qos)
+{
+  oc_client_cb_t *cb = oc_ri_alloc_client_cb(uri, server, OC_GET, handler, qos);
+  if (!cb)
+    return false;
+
+  bool status = false;
+
+  if (query && strlen(query)) {
+    oc_string_t q;
+    oc_concat_strings(&q, "?", query);
+    status = prepare_coap_request(cb, &q);
+    oc_free_string(&q);
+  } else {
+    status = prepare_coap_request(cb, NULL);
+  }
+
+  if (status)
+    status = dispatch_coap_request();
+
+  return status;
+}
+
+bool
+oc_init_put(const char *uri, oc_server_handle_t *server, const char *query,
+            oc_response_handler_t handler, oc_qos_t qos)
+{
+  oc_client_cb_t *cb = oc_ri_alloc_client_cb(uri, server, OC_PUT, handler, qos);
+  if (!cb)
+    return false;
+
+  bool status = false;
+
+  if (query && strlen(query)) {
+    oc_string_t q;
+    oc_concat_strings(&q, "?", query);
+    status = prepare_coap_request(cb, &q);
+    oc_free_string(&q);
+  } else {
+    status = prepare_coap_request(cb, NULL);
+  }
+
+  return status;
+}
+
+bool
+oc_init_post(const char *uri, oc_server_handle_t *server, const char *query,
+             oc_response_handler_t handler, oc_qos_t qos)
+{
+  oc_client_cb_t *cb =
+    oc_ri_alloc_client_cb(uri, server, OC_POST, handler, qos);
+  if (!cb)
+    return false;
+
+  bool status = false;
+
+  if (query && strlen(query)) {
+    oc_string_t q;
+    oc_concat_strings(&q, "?", query);
+    status = prepare_coap_request(cb, &q);
+    oc_free_string(&q);
+  } else {
+    status = prepare_coap_request(cb, NULL);
+  }
+
+  return status;
+}
+
+bool
+oc_do_put(void)
+{
+  return dispatch_coap_request();
+}
+
+bool
+oc_do_post(void)
+{
+  return dispatch_coap_request();
+}
+
+bool
+oc_do_observe(const char *uri, oc_server_handle_t *server, const char *query,
+              oc_response_handler_t handler, oc_qos_t qos)
+{
+  oc_client_cb_t *cb = oc_ri_alloc_client_cb(uri, server, OC_GET, handler, qos);
+  if (!cb)
+    return false;
+
+  cb->observe_seq = 0;
+
+  bool status = false;
+
+  if (query && strlen(query)) {
+    oc_string_t q;
+    oc_concat_strings(&q, "?", query);
+    status = prepare_coap_request(cb, &q);
+    oc_free_string(&q);
+  } else {
+    status = prepare_coap_request(cb, NULL);
+  }
+
+  if (status)
+    status = dispatch_coap_request();
+
+  return status;
+}
+
+bool
+oc_stop_observe(const char *uri, oc_server_handle_t *server)
+{
+  oc_client_cb_t *cb = oc_ri_get_client_cb(uri, server, OC_GET);
+
+  if (!cb)
+    return false;
+
+  cb->observe_seq = 1;
+
+  bool status = false;
+
+  status = prepare_coap_request(cb, NULL);
+
+  if (status)
+    status = dispatch_coap_request();
+
+  return status;
+}
+
+bool
+oc_do_ip_discovery(const char *rt, oc_discovery_cb_t handler)
+{
+  oc_make_ip_endpoint(mcast, IP | MULTICAST, 5683, 0xff, 0x02, 0, 0, 0, 0, 0, 0,
+                      0, 0, 0, 0, 0, 0, 0, 0xfd);
+  mcast.ipv6_addr.scope = 0;
+
+  oc_server_handle_t handle;
+  memcpy(&handle.endpoint, &mcast, sizeof(oc_endpoint_t));
+
+  oc_client_cb_t *cb =
+    oc_ri_alloc_client_cb("/oic/res", &handle, OC_GET, handler, LOW_QOS);
+
+  if (!cb)
+    return false;
+
+  cb->discovery = true;
+
+  bool status = false;
+
+  oc_string_t query;
+
+  if (rt && strlen(rt) > 0) {
+    oc_concat_strings(&query, "if=oic.if.ll&rt=", rt);
+  } else {
+    oc_new_string(&query, "if=oic.if.ll");
+  }
+  status = prepare_coap_request(cb, &query);
+  oc_free_string(&query);
+
+  if (status)
+    status = dispatch_coap_request();
+
+  return status;
+}
+#endif /* OC_CLIENT */

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/ece29bb3/libs/iotivity/src/api/oc_core_res.c
----------------------------------------------------------------------
diff --git a/libs/iotivity/src/api/oc_core_res.c b/libs/iotivity/src/api/oc_core_res.c
new file mode 100644
index 0000000..ced0f88
--- /dev/null
+++ b/libs/iotivity/src/api/oc_core_res.c
@@ -0,0 +1,280 @@
+/*
+ // Copyright (c) 2016 Intel Corporation
+ //
+ // Licensed under the Apache License, Version 2.0 (the "License");
+ // you may not use this file except in compliance with the License.
+ // You may obtain a copy of the License at
+ //
+ //      http://www.apache.org/licenses/LICENSE-2.0
+ //
+ // Unless required by applicable law or agreed to in writing, software
+ // distributed under the License is distributed on an "AS IS" BASIS,
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ // See the License for the specific language governing permissions and
+ // limitations under the License.
+ */
+
+#include "oc_core_res.h"
+#include "messaging/coap/oc_coap.h"
+#include "oc_rep.h"
+#include "oc_ri.h"
+
+#ifdef OC_SECURITY
+#include "security/oc_pstat.h"
+#endif /* OC_SECURITY */
+
+static oc_resource_t core_resources[NUM_OC_CORE_RESOURCES];
+struct oc_device_info_t
+{
+  oc_uuid_t uuid;
+  oc_string_t payload;
+} oc_device_info[MAX_NUM_DEVICES];
+static int device_count;
+static oc_string_t oc_platform_payload;
+
+void
+oc_core_encode_interfaces_mask(CborEncoder *parent,
+                               oc_interface_mask_t interface)
+{
+  oc_rep_set_key((*parent), "if");
+  oc_rep_start_array((*parent), if);
+  if (interface & OC_IF_LL) {
+    oc_rep_add_text_string(if, OC_RSRVD_IF_LL);
+  }
+  if (interface & OC_IF_B) {
+    oc_rep_add_text_string(if, OC_RSRVD_IF_B);
+  }
+  if (interface & OC_IF_R) {
+    oc_rep_add_text_string(if, OC_RSRVD_IF_R);
+  }
+  if (interface & OC_IF_RW) {
+    oc_rep_add_text_string(if, OC_RSRVD_IF_RW);
+  }
+  if (interface & OC_IF_A) {
+    oc_rep_add_text_string(if, OC_RSRVD_IF_A);
+  }
+  if (interface & OC_IF_S) {
+    oc_rep_add_text_string(if, OC_RSRVD_IF_S);
+  }
+  oc_rep_add_text_string(if, OC_RSRVD_IF_BASELINE);
+  oc_rep_end_array((*parent), if);
+}
+
+static void
+oc_core_device_handler(oc_request_t *request, oc_interface_mask_t interface)
+{
+  uint8_t *buffer = request->response->response_buffer->buffer;
+  uint16_t buffer_size = request->response->response_buffer->buffer_size;
+  int payload_size = oc_device_info[request->resource->device].payload.size;
+
+  if (buffer_size < payload_size) {
+    request->response->response_buffer->response_length = 0;
+    request->response->response_buffer->code =
+      oc_status_code(OC_STATUS_INTERNAL_SERVER_ERROR);
+    return;
+  }
+
+  switch (interface) {
+  case OC_IF_R:
+  case OC_IF_BASELINE:
+    memcpy(buffer,
+           oc_cast(oc_device_info[request->resource->device].payload, uint8_t),
+           payload_size);
+    request->response->response_buffer->response_length = payload_size;
+    request->response->response_buffer->code = oc_status_code(OC_STATUS_OK);
+    break;
+  default:
+    break;
+  }
+}
+
+int
+oc_core_get_num_devices(void)
+{
+  return device_count;
+}
+
+static int
+finalize_payload(oc_string_t *temp_buffer, oc_string_t *payload)
+{
+  oc_rep_end_root_object();
+  int size = oc_rep_finalize();
+  if (size != -1) {
+    oc_alloc_string(payload, size);
+    memcpy(oc_cast(*payload, uint8_t), oc_cast(*temp_buffer, uint8_t), size);
+    oc_free_string(temp_buffer);
+    return 1;
+  }
+
+  oc_free_string(temp_buffer);
+  return -1;
+}
+
+oc_string_t *
+oc_core_add_new_device(const char *uri, const char *rt, const char *name,
+                       const char *spec_version, const char *data_model_version,
+                       oc_core_add_device_cb_t add_device_cb, void *data)
+{
+  if (device_count == MAX_NUM_DEVICES)
+    return false;
+
+  oc_string_t temp_buffer;
+/* Once provisioned, UUID is retrieved from the credential store.
+   If not yet provisioned, a default is generated in the security
+   layer.
+*/
+#ifdef OC_SECURITY /*fix if add new devices after provisioning, need to reset  \
+                      or it will generate non-standard uuid */
+  /* where are secondary device ids persisted? */
+  if (!oc_sec_provisioned() && device_count > 0)
+    oc_gen_uuid(&oc_device_info[device_count].uuid);
+#else
+  oc_gen_uuid(&oc_device_info[device_count].uuid);
+#endif
+
+  int ocf_d = NUM_OC_CORE_RESOURCES - 1 - device_count;
+
+  /* Construct device resource */
+  oc_core_populate_resource(ocf_d, uri, rt, OC_IF_R | OC_IF_BASELINE,
+                            OC_IF_BASELINE, OC_ACTIVE | OC_DISCOVERABLE,
+                            oc_core_device_handler, 0, 0, 0, device_count);
+
+  /* Encoding device resource payload */
+  oc_alloc_string(&temp_buffer, MAX_DEVICE_PAYLOAD_SIZE);
+  oc_rep_new(oc_cast(temp_buffer, uint8_t), MAX_DEVICE_PAYLOAD_SIZE);
+
+  oc_rep_start_root_object();
+
+  oc_rep_set_string_array(root, rt, core_resources[ocf_d].types);
+  oc_core_encode_interfaces_mask(oc_rep_object(root),
+                                 core_resources[ocf_d].interfaces);
+  oc_rep_set_uint(root, p, core_resources[ocf_d].properties);
+
+  char uuid[37];
+  oc_uuid_to_str(&oc_device_info[device_count].uuid, uuid, 37);
+  oc_rep_set_text_string(root, di, uuid);
+  oc_rep_set_text_string(root, n, name);
+  oc_rep_set_text_string(root, icv, spec_version);
+  oc_rep_set_text_string(root, dmv, data_model_version);
+
+  if (add_device_cb)
+    add_device_cb(data);
+  if (!finalize_payload(&temp_buffer, &oc_device_info[device_count].payload))
+    return NULL;
+
+  return &oc_device_info[device_count++].payload;
+}
+
+void
+oc_core_platform_handler(oc_request_t *request, oc_interface_mask_t interface)
+{
+  uint8_t *buffer = request->response->response_buffer->buffer;
+  uint16_t buffer_size = request->response->response_buffer->buffer_size;
+  int payload_size = oc_platform_payload.size;
+
+  if (buffer_size < payload_size) {
+    request->response->response_buffer->response_length = 0;
+    request->response->response_buffer->code =
+      oc_status_code(OC_STATUS_INTERNAL_SERVER_ERROR);
+    return;
+  }
+
+  switch (interface) {
+  case OC_IF_R:
+  case OC_IF_BASELINE:
+    memcpy(buffer, oc_cast(oc_platform_payload, uint8_t), payload_size);
+    request->response->response_buffer->response_length = payload_size;
+    request->response->response_buffer->code = oc_status_code(OC_STATUS_OK);
+    break;
+  default:
+    break;
+  }
+}
+
+oc_string_t *
+oc_core_init_platform(const char *mfg_name, oc_core_init_platform_cb_t init_cb,
+                      void *data)
+{
+  if (oc_platform_payload.size > 0)
+    return NULL;
+
+  oc_string_t temp_buffer;
+  /* Populating resource obuject */
+  oc_core_populate_resource(OCF_P, OC_RSRVD_PLATFORM_URI, "oic.wk.p",
+                            OC_IF_R | OC_IF_BASELINE, OC_IF_BASELINE,
+                            OC_ACTIVE | OC_DISCOVERABLE,
+                            oc_core_platform_handler, 0, 0, 0, 0);
+
+  /* Encoding platform resource payload */
+  oc_alloc_string(&temp_buffer, MAX_PLATFORM_PAYLOAD_SIZE);
+  oc_rep_new(oc_cast(temp_buffer, uint8_t), MAX_PLATFORM_PAYLOAD_SIZE);
+  oc_rep_start_root_object();
+  oc_rep_set_string_array(root, rt, core_resources[OCF_P].types);
+
+  oc_core_encode_interfaces_mask(oc_rep_object(root),
+                                 core_resources[OCF_P].interfaces);
+  oc_rep_set_uint(root, p, core_resources[OCF_P].properties & ~OC_PERIODIC);
+
+  oc_uuid_t uuid; /*fix uniqueness of platform id?? */
+  oc_gen_uuid(&uuid);
+  char uuid_str[37];
+
+  oc_uuid_to_str(&uuid, uuid_str, 37);
+  oc_rep_set_text_string(root, pi, uuid_str);
+  oc_rep_set_text_string(root, mnmn, mfg_name);
+
+  if (init_cb)
+    init_cb(data);
+
+  if (!finalize_payload(&temp_buffer, &oc_platform_payload))
+    return NULL;
+
+  return &oc_platform_payload;
+}
+
+void
+oc_core_populate_resource(int type, const char *uri, const char *rt,
+                          oc_interface_mask_t interfaces,
+                          oc_interface_mask_t default_interface,
+                          oc_resource_properties_t properties,
+                          oc_request_handler_t get, oc_request_handler_t put,
+                          oc_request_handler_t post,
+                          oc_request_handler_t delete, int device)
+{
+  oc_resource_t *r = &core_resources[type];
+  r->device = device;
+  oc_new_string(&r->uri, uri);
+  r->properties = properties;
+  oc_new_string_array(&r->types, 1);
+  oc_string_array_add_item(r->types, rt);
+  r->interfaces = interfaces;
+  r->default_interface = default_interface;
+  r->get_handler = get;
+  r->put_handler = put;
+  r->post_handler = post;
+  r->delete_handler = delete;
+}
+
+oc_uuid_t *
+oc_core_get_device_id(int device)
+{
+  return &oc_device_info[device].uuid;
+}
+
+oc_resource_t *
+oc_core_get_resource_by_index(int type)
+{
+  return &core_resources[type];
+}
+
+oc_resource_t *
+oc_core_get_resource_by_uri(const char *uri)
+{
+  int i;
+  for (i = 0; i < NUM_OC_CORE_RESOURCES; i++) {
+    if (oc_string_len(core_resources[i].uri) == strlen(uri) &&
+        strncmp(uri, oc_string(core_resources[i].uri), strlen(uri)) == 0)
+      return &core_resources[i];
+  }
+  return NULL;
+}

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/ece29bb3/libs/iotivity/src/api/oc_discovery.c
----------------------------------------------------------------------
diff --git a/libs/iotivity/src/api/oc_discovery.c b/libs/iotivity/src/api/oc_discovery.c
new file mode 100644
index 0000000..34d34b8
--- /dev/null
+++ b/libs/iotivity/src/api/oc_discovery.c
@@ -0,0 +1,298 @@
+/*
+// Copyright (c) 2016 Intel Corporation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+*/
+
+#ifdef OC_CLIENT
+#include "oc_client_state.h"
+#endif /* OC_CLIENT */
+
+#include "messaging/coap/oc_coap.h"
+#include "oc_api.h"
+#include "oc_core_res.h"
+
+static bool
+filter_resource(oc_resource_t *resource, const char *rt, int rt_len,
+                CborEncoder *links)
+{
+  int i;
+  bool match = true;
+  if (rt_len > 0) {
+    match = false;
+    for (i = 0; i < oc_string_array_get_allocated_size(resource->types); i++) {
+      int size = oc_string_array_get_item_size(resource->types, i);
+      const char *t =
+        (const char *)oc_string_array_get_item(resource->types, i);
+      if (rt_len == size && strncmp(rt, t, rt_len) == 0) {
+        match = true;
+        break;
+      }
+    }
+  }
+
+  if (!match) {
+    return false;
+  }
+
+  oc_rep_start_object(*links, res);
+
+  // uri
+  oc_rep_set_text_string(res, href, oc_string(resource->uri));
+
+  // rt
+  oc_rep_set_array(res, rt);
+  for (i = 0; i < oc_string_array_get_allocated_size(resource->types); i++) {
+    int size = oc_string_array_get_item_size(resource->types, i);
+    const char *t = (const char *)oc_string_array_get_item(resource->types, i);
+    if (size > 0)
+      oc_rep_add_text_string(rt, t);
+  }
+  oc_rep_close_array(res, rt);
+
+  // if
+  oc_core_encode_interfaces_mask(oc_rep_object(res), resource->interfaces);
+
+  // p
+  oc_rep_set_object(res, p);
+  oc_rep_set_uint(p, bm, resource->properties & ~OC_PERIODIC);
+#ifdef OC_SECURITY
+  if (resource->properties & OC_SECURE) {
+    oc_rep_set_boolean(p, sec, true);
+    oc_rep_set_uint(p, port, oc_connectivity_get_dtls_port());
+  }
+#endif /* OC_SECURITY */
+
+  oc_rep_close_object(res, p);
+
+  oc_rep_end_object(*links, res);
+  return true;
+}
+
+static int
+process_device_object(CborEncoder *device, const char *uuid, const char *rt,
+                      int rt_len)
+{
+  int dev, matches = 0;
+  oc_rep_start_object(*device, links);
+  oc_rep_set_text_string(links, di, uuid);
+  oc_rep_set_array(links, links);
+
+  if (filter_resource(oc_core_get_resource_by_index(OCF_P), rt, rt_len,
+                      oc_rep_array(links)))
+    matches++;
+
+  for (dev = 0; dev < oc_core_get_num_devices(); dev++) {
+    if (filter_resource(
+          oc_core_get_resource_by_index(NUM_OC_CORE_RESOURCES - 1 - dev), rt,
+          rt_len, oc_rep_array(links)))
+      matches++;
+  }
+
+#ifdef OC_SERVER
+  oc_resource_t *resource = oc_ri_get_app_resources();
+  for (; resource; resource = resource->next) {
+
+    if (!(resource->properties & OC_DISCOVERABLE))
+      continue;
+
+    if (filter_resource(resource, rt, rt_len, oc_rep_array(links)))
+      matches++;
+  }
+#endif
+
+#ifdef OC_SECURITY
+  if (filter_resource(oc_core_get_resource_by_index(OCF_SEC_DOXM), rt, rt_len,
+                      oc_rep_array(links)))
+    matches++;
+#endif
+
+  oc_rep_close_array(links, links);
+  oc_rep_end_object(*device, links);
+
+  return matches;
+}
+
+static void
+oc_core_discovery_handler(oc_request_t *request, oc_interface_mask_t interface)
+{
+  char *rt = NULL;
+  int rt_len = 0, matches = 0;
+  if (request->query_len) {
+    rt_len =
+      oc_ri_get_query_value(request->query, request->query_len, "rt", &rt);
+  }
+
+  char uuid[37];
+  oc_uuid_to_str(oc_core_get_device_id(0), uuid, 37);
+
+  switch (interface) {
+  case OC_IF_LL: {
+    oc_rep_start_links_array();
+    matches = process_device_object(oc_rep_array(links), uuid, rt, rt_len);
+    oc_rep_end_links_array();
+  } break;
+  case OC_IF_BASELINE: {
+    oc_rep_start_root_object();
+    oc_process_baseline_interface(request->resource);
+    oc_rep_set_array(root, links);
+    matches = process_device_object(oc_rep_array(links), uuid, rt, rt_len);
+    oc_rep_close_array(root, links);
+    oc_rep_end_root_object();
+  } break;
+  default:
+    break;
+  }
+
+  int response_length = oc_rep_finalize();
+
+  if (matches && response_length) {
+    request->response->response_buffer->response_length = response_length;
+    request->response->response_buffer->code = oc_status_code(OC_STATUS_OK);
+  } else {
+    /* There were rt/if selections and there were no matches, so ignore */
+    request->response->response_buffer->code = OC_IGNORE;
+  }
+}
+
+void
+oc_create_discovery_resource(void)
+{
+  oc_core_populate_resource(OCF_RES, "/oic/res", "oic.wk.res",
+                            OC_IF_LL | OC_IF_BASELINE, OC_IF_LL, OC_ACTIVE,
+                            oc_core_discovery_handler, 0, 0, 0, 0);
+}
+
+#ifdef OC_CLIENT
+oc_discovery_flags_t
+oc_ri_process_discovery_payload(uint8_t *payload, int len,
+                                oc_discovery_cb_t *handler,
+                                oc_endpoint_t *endpoint)
+{
+  oc_discovery_flags_t ret = OC_CONTINUE_DISCOVERY;
+  oc_string_t uri;
+  uri.ptr = 0;
+  oc_string_t di;
+  di.ptr = 0;
+  bool secure = false;
+  uint16_t dtls_port = 0, default_port = endpoint->ipv6_addr.port;
+  oc_string_array_t types = {};
+  oc_interface_mask_t interfaces = 0;
+  oc_server_handle_t handle;
+  memcpy(&handle.endpoint, endpoint, sizeof(oc_endpoint_t));
+
+  oc_rep_t *array = 0, *rep;
+  int s = oc_parse_rep(payload, len, &rep);
+  if (s == 0)
+    array = rep;
+  while (array != NULL) {
+    oc_rep_t *device_map = array->value_object;
+    while (device_map != NULL) {
+      switch (device_map->type) {
+      case STRING:
+        if (oc_string_len(device_map->name) == 2 &&
+            strncmp(oc_string(device_map->name), "di", 2) == 0)
+          di = device_map->value_string;
+        break;
+      default:
+        break;
+      }
+      device_map = device_map->next;
+    }
+    device_map = array->value_object;
+    while (device_map != NULL) {
+      switch (device_map->type) {
+      case OBJECT_ARRAY: {
+        oc_rep_t *links = device_map->value_object_array;
+        while (links != NULL) {
+          switch (links->type) {
+          case OBJECT: {
+            oc_rep_t *resource_info = links->value_object;
+            while (resource_info != NULL) {
+              switch (resource_info->type) {
+              case STRING:
+                uri = resource_info->value_string;
+                break;
+              case STRING_ARRAY:
+                if (oc_string_len(resource_info->name) == 2 &&
+                    strncmp(oc_string(resource_info->name), "rt", 2) == 0)
+                  types = resource_info->value_array;
+                else {
+                  interfaces = 0;
+                  int i;
+                  for (i = 0; i < oc_string_array_get_allocated_size(
+                                    resource_info->value_array);
+                       i++) {
+                    interfaces |= oc_ri_get_interface_mask(
+                      oc_string_array_get_item(resource_info->value_array, i),
+                      oc_string_array_get_item_size(resource_info->value_array,
+                                                    i));
+                  }
+                }
+                break;
+              case OBJECT: {
+                oc_rep_t *policy_info = resource_info->value_object;
+                while (policy_info != NULL) {
+                  if (policy_info->type == INT &&
+                      oc_string_len(policy_info->name) == 4 &&
+                      strncmp(oc_string(policy_info->name), "port", 4) == 0) {
+                    dtls_port = policy_info->value_int;
+                  }
+                  if (policy_info->type == BOOL &&
+                      oc_string_len(policy_info->name) == 3 &&
+                      strncmp(oc_string(policy_info->name), "sec", 3) == 0 &&
+                      policy_info->value_boolean == true) {
+                    secure = true;
+                  }
+                  policy_info = policy_info->next;
+                }
+              } break;
+              default:
+                break;
+              }
+              resource_info = resource_info->next;
+            }
+            if (secure) {
+              handle.endpoint.ipv6_addr.port = dtls_port;
+              handle.endpoint.flags |= SECURED;
+            } else {
+              handle.endpoint.ipv6_addr.port = default_port;
+              handle.endpoint.flags &= ~SECURED;
+            }
+
+            if (handler(oc_string(di), oc_string(uri), types, interfaces,
+                        &handle) == OC_STOP_DISCOVERY) {
+              ret = OC_STOP_DISCOVERY;
+              goto done;
+            }
+            dtls_port = 0;
+            secure = false;
+          } break;
+          default:
+            break;
+          }
+          links = links->next;
+        }
+      } break;
+      default:
+        break;
+      }
+      device_map = device_map->next;
+    }
+    array = array->next;
+  }
+done:
+  oc_free_rep(rep);
+  return ret;
+}
+#endif /* OC_CLIENT */

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/ece29bb3/libs/iotivity/src/api/oc_events.h
----------------------------------------------------------------------
diff --git a/libs/iotivity/src/api/oc_events.h b/libs/iotivity/src/api/oc_events.h
new file mode 100644
index 0000000..d79c22b
--- /dev/null
+++ b/libs/iotivity/src/api/oc_events.h
@@ -0,0 +1,34 @@
+/*
+ // Copyright (c) 2016 Intel Corporation
+ //
+ // Licensed under the Apache License, Version 2.0 (the "License");
+ // you may not use this file except in compliance with the License.
+ // You may obtain a copy of the License at
+ //
+ //      http://www.apache.org/licenses/LICENSE-2.0
+ //
+ // Unless required by applicable law or agreed to in writing, software
+ // distributed under the License is distributed on an "AS IS" BASIS,
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ // See the License for the specific language governing permissions and
+ // limitations under the License.
+ */
+
+#ifndef OC_EVENTS_H
+#define OC_EVENTS_H
+
+#include "util/oc_process.h"
+
+typedef enum {
+  INBOUND_NETWORK_EVENT,
+  UDP_TO_DTLS_EVENT,
+  INIT_DTLS_CONN_EVENT,
+  RI_TO_DTLS_EVENT,
+  INBOUND_RI_EVENT,
+  OUTBOUND_NETWORK_EVENT,
+  __NUM_OC_EVENT_TYPES__
+} oc_events_t;
+
+oc_process_event_t oc_events[__NUM_OC_EVENT_TYPES__];
+
+#endif /* OC_EVENTS_H */

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/ece29bb3/libs/iotivity/src/api/oc_helpers.c
----------------------------------------------------------------------
diff --git a/libs/iotivity/src/api/oc_helpers.c b/libs/iotivity/src/api/oc_helpers.c
new file mode 100644
index 0000000..4af8eeb
--- /dev/null
+++ b/libs/iotivity/src/api/oc_helpers.c
@@ -0,0 +1,164 @@
+/*
+// Copyright (c) 2016 Intel Corporation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+*/
+
+#include "oc_helpers.h"
+#include "port/oc_assert.h"
+#include "port/oc_log.h"
+#include <stdbool.h>
+
+static bool mmem_initialized = false;
+
+static void
+oc_malloc(oc_handle_t *block, uint16_t num_bytes, pool pool_type)
+{
+  if (!mmem_initialized) {
+    oc_mmem_init();
+    mmem_initialized = true;
+  }
+  oc_assert(oc_mmem_alloc(block, num_bytes, pool_type) > 0);
+}
+
+static void
+oc_free(oc_handle_t *block, pool pool_type)
+{
+  oc_mmem_free(block, pool_type);
+  block->next = 0;
+  block->ptr = 0;
+  block->size = 0;
+}
+
+void
+oc_new_string(oc_string_t *ocstring, const char str[])
+{
+  oc_malloc(ocstring, strlen(str) + 1, BYTE_POOL);
+  memcpy(oc_string(*ocstring), (const uint8_t *)str, strlen(str));
+  memcpy(oc_string(*ocstring) + strlen(str), (const uint8_t *)"", 1);
+}
+
+void
+oc_alloc_string(oc_string_t *ocstring, int size)
+{
+  oc_malloc(ocstring, size, BYTE_POOL);
+}
+
+void
+oc_free_string(oc_string_t *ocstring)
+{
+  oc_free(ocstring, BYTE_POOL);
+}
+
+void
+oc_concat_strings(oc_string_t *concat, const char *str1, const char *str2)
+{
+  size_t len1 = strlen(str1), len2 = strlen(str2);
+  oc_alloc_string(concat, len1 + len2 + 1);
+  memcpy(oc_string(*concat), str1, len1);
+  memcpy(oc_string(*concat) + len1, str2, len2);
+  memcpy(oc_string(*concat) + len1 + len2, (const char *)"", 1);
+}
+
+void
+_oc_new_array(oc_array_t *ocarray, uint8_t size, pool type)
+{
+  switch (type) {
+  case INT_POOL:
+    oc_malloc(ocarray, size * sizeof(int64_t), INT_POOL);
+    break;
+  case BYTE_POOL:
+    oc_malloc(ocarray, size * sizeof(bool), BYTE_POOL);
+    break;
+  case DOUBLE_POOL:
+    oc_malloc(ocarray, size * sizeof(double), DOUBLE_POOL);
+    break;
+  default:
+    break;
+  }
+}
+
+void
+_oc_free_array(oc_array_t *ocarray, pool type)
+{
+  oc_free(ocarray, type);
+}
+
+void
+_oc_alloc_string_array(oc_string_array_t *ocstringarray, uint8_t size)
+{
+  oc_alloc_string(ocstringarray, size * STRING_ARRAY_ITEM_MAX_LEN);
+  int i, pos;
+  for (i = 0; i < size; i++) {
+    pos = i * STRING_ARRAY_ITEM_MAX_LEN;
+    memcpy((char *)oc_string(*ocstringarray) + pos, (const char *)"", 1);
+  }
+}
+
+bool
+_oc_copy_string_to_string_array(oc_string_array_t *ocstringarray,
+                                const char str[], uint8_t index)
+{
+  if (strlen(str) >= STRING_ARRAY_ITEM_MAX_LEN) {
+    return false;
+  }
+  uint8_t pos = index * STRING_ARRAY_ITEM_MAX_LEN;
+  memcpy(oc_string(*ocstringarray) + pos, (const uint8_t *)str, strlen(str));
+  memcpy(oc_string(*ocstringarray) + pos + strlen(str), (const uint8_t *)"", 1);
+  return true;
+}
+
+bool
+_oc_string_array_add_item(oc_string_array_t *ocstringarray, const char str[])
+{
+  bool success = false;
+  int i;
+  for (i = 0; i < oc_string_array_get_allocated_size(*ocstringarray); i++) {
+    if (strlen((const char *)oc_string_array_get_item(*ocstringarray, i)) ==
+        0) {
+      success = oc_string_array_set_item(*ocstringarray, str, i);
+      break;
+    }
+  }
+  return success;
+}
+
+void
+oc_join_string_array(oc_string_array_t *ocstringarray, oc_string_t *ocstring)
+{
+  size_t len = 0;
+  uint8_t i;
+  for (i = 0; i < oc_string_array_get_allocated_size(*ocstringarray); i++) {
+    const char *item =
+      (const char *)oc_string_array_get_item(*ocstringarray, i);
+    if (strlen(item)) {
+      len += strlen(item);
+      len++;
+    }
+  }
+  oc_alloc_string(ocstring, len);
+  len = 0;
+  for (i = 0; i < oc_string_array_get_allocated_size(*ocstringarray); i++) {
+    const char *item =
+      (const char *)oc_string_array_get_item(*ocstringarray, i);
+    if (strlen(item)) {
+      if (len > 0) {
+        oc_string(*ocstring)[len] = ' ';
+        len++;
+      }
+      strncpy((char *)oc_string(*ocstring) + len, item, strlen(item));
+      len += strlen(item);
+    }
+  }
+  strcpy((char *)oc_string(*ocstring) + len, "");
+}

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/ece29bb3/libs/iotivity/src/api/oc_main.c
----------------------------------------------------------------------
diff --git a/libs/iotivity/src/api/oc_main.c b/libs/iotivity/src/api/oc_main.c
new file mode 100644
index 0000000..9086b4e
--- /dev/null
+++ b/libs/iotivity/src/api/oc_main.c
@@ -0,0 +1,119 @@
+/*
+// Copyright (c) 2016 Intel Corporation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+*/
+
+#include <stdint.h>
+#include <stdio.h>
+
+#include "port/oc_assert.h"
+#include "port/oc_clock.h"
+#include "port/oc_connectivity.h"
+
+#include "util/oc_etimer.h"
+#include "util/oc_process.h"
+
+#include "oc_api.h"
+
+#ifdef OC_SECURITY
+#include "security/oc_dtls.h"
+#include "security/oc_store.h"
+#include "security/oc_svr.h"
+#endif /* OC_SECURITY */
+
+static bool initialized = false;
+
+int
+oc_main_init(oc_handler_t *handler)
+{
+  int ret;
+  extern int oc_stack_errno;
+
+  if (initialized == true)
+    return 0;
+
+  oc_ri_init();
+
+#ifdef OC_SECURITY
+  handler->get_credentials();
+
+  oc_sec_load_pstat();
+  oc_sec_load_doxm();
+  oc_sec_load_cred();
+
+  oc_sec_dtls_init_context();
+#endif
+
+  oc_network_event_handler_mutex_init();
+  ret = oc_connectivity_init();
+  if (ret < 0)
+    goto err;
+
+  handler->init();
+
+#ifdef OC_SERVER
+  handler->register_resources();
+#endif
+
+#ifdef OC_SECURITY
+  oc_sec_create_svr();
+  oc_sec_load_acl();
+#endif
+
+  if (oc_stack_errno != 0) {
+    ret = -oc_stack_errno;
+    goto err;
+  }
+
+  PRINT("oc_main: Stack successfully initialized\n");
+
+#ifdef OC_CLIENT
+  handler->requests_entry();
+#endif
+
+  initialized = true;
+  return 0;
+
+err:
+  oc_abort("oc_main: Error in stack initialization\n");
+  return ret;
+}
+
+oc_clock_time_t
+oc_main_poll(void)
+{
+  oc_clock_time_t ticks_until_next_event = oc_etimer_request_poll();
+  while (oc_process_run()) {
+    ticks_until_next_event = oc_etimer_request_poll();
+  }
+  return ticks_until_next_event;
+}
+
+void
+oc_main_shutdown(void)
+{
+  if (initialized == false) {
+    PRINT("tiny_ocf is not initialized\n");
+    return;
+  }
+
+  oc_connectivity_shutdown();
+  oc_ri_shutdown();
+
+#ifdef OC_SECURITY /* fix ensure this gets executed on constraied platforms */
+  oc_sec_dump_state();
+#endif
+
+  initialized = false;
+}