http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/f88168c2/libs/iotivity/src/messaging/coap/observe.c ---------------------------------------------------------------------- diff --git a/libs/iotivity/src/messaging/coap/observe.c b/libs/iotivity/src/messaging/coap/observe.c deleted file mode 100644 index 4bd1d96..0000000 --- a/libs/iotivity/src/messaging/coap/observe.c +++ /dev/null @@ -1,319 +0,0 @@ -/* - * Copyright (c) 2016 Intel Corporation - * - * Copyright (c) 2013, Institute for Pervasive Computing, ETH Zurich - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the Institute nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * This file is part of the Contiki operating system. - */ - -#include "config.h" - -#ifdef OC_SERVER - -#include "observe.h" -#include "util/oc_memb.h" -#include <stdio.h> -#include <string.h> - -#include "oc_coap.h" -#include "oc_rep.h" -#include "oc_ri.h" -/*-------------------*/ -uint64_t observe_counter = 3; -/*---------------------------------------------------------------------------*/ -OC_LIST(observers_list); -OC_MEMB(observers_memb, coap_observer_t, COAP_MAX_OBSERVERS); - -/*---------------------------------------------------------------------------*/ -/*- Internal API ------------------------------------------------------------*/ -/*---------------------------------------------------------------------------*/ -static int -add_observer(oc_resource_t *resource, oc_endpoint_t *endpoint, - const uint8_t *token, size_t token_len, const char *uri, - int uri_len) -{ - /* Remove existing observe relationship, if any. */ - int dup = coap_remove_observer_by_uri(endpoint, uri); - - coap_observer_t *o = oc_memb_alloc(&observers_memb); - - if (o) { - int max = sizeof(o->url) - 1; - if (max > uri_len) { - max = uri_len; - } - memcpy(o->url, uri, max); - o->url[max] = 0; - memcpy(&o->endpoint, endpoint, sizeof(oc_endpoint_t)); - o->token_len = token_len; - memcpy(o->token, token, token_len); - o->last_mid = 0; - o->obs_counter = observe_counter; - o->resource = resource; - resource->num_observers++; - LOG("Adding observer (%u/%u) for /%s [0x%02X%02X]\n", - oc_list_length(observers_list) + 1, COAP_MAX_OBSERVERS, o->url, - o->token[0], o->token[1]); - oc_list_add(observers_list, o); - return dup; - } - return -1; -} -/*---------------------------------------------------------------------------*/ -/*- Removal -----------------------------------------------------------------*/ -/*---------------------------------------------------------------------------*/ -void -coap_remove_observer(coap_observer_t *o) -{ - LOG("Removing observer for /%s [0x%02X%02X]\n", o->url, o->token[0], - o->token[1]); - oc_memb_free(&observers_memb, o); - oc_list_remove(observers_list, o); -} -/*---------------------------------------------------------------------------*/ -int -coap_remove_observer_by_client(oc_endpoint_t *endpoint) -{ - int removed = 0; - coap_observer_t *obs = (coap_observer_t *)oc_list_head(observers_list), *next; - - LOG("Unregistering observers for client at: "); - LOGipaddr(*endpoint); - - while (obs) { - next = obs->next; - if (memcmp(&obs->endpoint, endpoint, sizeof(oc_endpoint_t)) == 0) { - obs->resource->num_observers--; - coap_remove_observer(obs); - removed++; - } - obs = next; - } - LOG("Removed %d observers\n", removed); - return removed; -} -/*---------------------------------------------------------------------------*/ -int -coap_remove_observer_by_token(oc_endpoint_t *endpoint, uint8_t *token, - size_t token_len) -{ - int removed = 0; - coap_observer_t *obs = (coap_observer_t *)oc_list_head(observers_list); - LOG("Unregistering observers for request token 0x%02X%02X\n", token[0], - token[1]); - while (obs) { - if (memcmp(&obs->endpoint, endpoint, sizeof(oc_endpoint_t)) == 0 && - obs->token_len == token_len && - memcmp(obs->token, token, token_len) == 0) { - obs->resource->num_observers--; - coap_remove_observer(obs); - removed++; - break; - } - obs = obs->next; - } - LOG("Removed %d observers\n", removed); - return removed; -} -/*---------------------------------------------------------------------------*/ -int -coap_remove_observer_by_uri(oc_endpoint_t *endpoint, const char *uri) -{ - LOG("Unregistering observers for resource uri /%s", uri); - int removed = 0; - coap_observer_t *obs = (coap_observer_t *)oc_list_head(observers_list), *next; - - while (obs) { - next = obs->next; - if (((memcmp(&obs->endpoint, endpoint, sizeof(oc_endpoint_t)) == 0)) && - (obs->url == uri || memcmp(obs->url, uri, strlen(obs->url)) == 0)) { - obs->resource->num_observers--; - coap_remove_observer(obs); - removed++; - } - obs = next; - } - LOG("Removed %d observers\n", removed); - return removed; -} -/*---------------------------------------------------------------------------*/ -int -coap_remove_observer_by_mid(oc_endpoint_t *endpoint, uint16_t mid) -{ - int removed = 0; - coap_observer_t *obs = NULL; - LOG("Unregistering observers for request MID %u\n", mid); - - for (obs = (coap_observer_t *)oc_list_head(observers_list); obs != NULL; - obs = obs->next) { - if (memcmp(&obs->endpoint, endpoint, sizeof(*endpoint)) == 0 && - obs->last_mid == mid) { - obs->resource->num_observers--; - coap_remove_observer(obs); - removed++; - break; - } - } - LOG("Removed %d observers\n", removed); - return removed; -} -/*---------------------------------------------------------------------------*/ -/*- Notification ------------------------------------------------------------*/ -/*---------------------------------------------------------------------------*/ -int -coap_notify_observers(oc_resource_t *resource, - oc_response_buffer_t *response_buf, - oc_endpoint_t *endpoint) -{ - int num_observers = 0; - if (resource) { - if (!resource->num_observers) { - LOG("coap_notify_observers: no observers; returning\n"); - return 0; - } - num_observers = resource->num_observers; - } - uint8_t buffer[COAP_MAX_BLOCK_SIZE]; - oc_request_t request = {}; - oc_response_t response = {}; - response.separate_response = 0; - oc_response_buffer_t response_buffer; - if (!response_buf && resource && (resource->properties & OC_PERIODIC)) { - LOG("coap_notify_observers: Issue GET request to resource\n"); - /* performing GET on the resource */ - response_buffer.buffer = buffer; - response_buffer.buffer_size = COAP_MAX_BLOCK_SIZE; - response_buffer.block_offset = NULL; - response.response_buffer = &response_buffer; - request.resource = resource; - request.response = &response; - request.request_payload = NULL; - oc_rep_new(buffer, COAP_MAX_BLOCK_SIZE); - resource->get_handler(&request, resource->default_interface); - response_buf = &response_buffer; - if (response_buf->code == OC_IGNORE) { - LOG("coap_notify_observers: Resource ignored request\n"); - return num_observers; - } - } - - coap_observer_t *obs = NULL; - /* iterate over observers */ - for (obs = (coap_observer_t *)oc_list_head(observers_list); - obs && ((resource && obs->resource == resource) || - (endpoint && - memcmp(&obs->endpoint, endpoint, sizeof(oc_endpoint_t)) == 0)); - obs = obs->next) { - num_observers = obs->resource->num_observers; - if (response.separate_response != NULL && - response_buf->code == oc_status_code(OC_STATUS_OK)) { - coap_packet_t req[1]; - /* - req->block1_num = 0; - req->block1_size = 0; - req->block2_num = 0; - req->block2_size = 0; - */ - coap_init_message(req, COAP_TYPE_NON, CONTENT_2_05, 0); - memcpy(req->token, obs->token, obs->token_len); - req->token_len = obs->token_len; - LOG("Resource is SLOW; creating separate response\n"); - if (coap_separate_accept(req, response.separate_response, &obs->endpoint, - 0) == 1) - response.separate_response->active = 1; - } else { - LOG("coap_notify_observers: notifying observer\n"); - coap_transaction_t *transaction = NULL; - if (response_buf && (transaction = coap_new_transaction( - coap_get_mid(), &obs->endpoint))) { - memcpy(transaction->message->data + COAP_MAX_HEADER_SIZE, - response_buf->buffer, response_buf->response_length); - - /* update last MID for RST matching */ - obs->last_mid = transaction->mid; - - /* prepare response */ - /* build notification */ - coap_packet_t notification - [1]; /* this way the packet can be treated as pointer as usual */ - coap_init_message(notification, COAP_TYPE_NON, CONTENT_2_05, 0); - - notification->mid = transaction->mid; - if (obs->obs_counter % COAP_OBSERVE_REFRESH_INTERVAL == 0) { - LOG("coap_observe_notify: forcing CON notification to check for " - "client liveness\n"); - notification->type = COAP_TYPE_CON; - } - coap_set_payload(notification, response_buf->buffer, - response_buf->response_length); - coap_set_status_code(notification, response_buf->code); - if (notification->code < BAD_REQUEST_4_00 && - obs->resource->num_observers) { - coap_set_header_observe(notification, (obs->obs_counter)++); - observe_counter++; - } else { - coap_set_header_observe(notification, 1); - } - coap_set_token(notification, obs->token, obs->token_len); - - transaction->message->length = - coap_serialize_message(notification, transaction->message->data); - - coap_send_transaction(transaction); - } - } - } - return num_observers; -} -/*---------------------------------------------------------------------------*/ -int -coap_observe_handler(void *request, void *response, oc_resource_t *resource, - oc_endpoint_t *endpoint) -{ - coap_packet_t *const coap_req = (coap_packet_t *)request; - coap_packet_t *const coap_res = (coap_packet_t *)response; - int dup = -1; - if (coap_req->code == COAP_GET && - coap_res->code < 128) { /* GET request and response without error code */ - if (IS_OPTION(coap_req, COAP_OPTION_OBSERVE)) { - if (coap_req->observe == 0) { - dup = - add_observer(resource, endpoint, coap_req->token, coap_req->token_len, - coap_req->uri_path, coap_req->uri_path_len); - } else if (coap_req->observe == 1) { - /* remove client if it is currently observe */ - dup = coap_remove_observer_by_token(endpoint, coap_req->token, - coap_req->token_len); - } - } - } - return dup; -} -/*---------------------------------------------------------------------------*/ - -#endif /* OC_SERVER */
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/f88168c2/libs/iotivity/src/messaging/coap/observe.h ---------------------------------------------------------------------- diff --git a/libs/iotivity/src/messaging/coap/observe.h b/libs/iotivity/src/messaging/coap/observe.h deleted file mode 100644 index 31f6d59..0000000 --- a/libs/iotivity/src/messaging/coap/observe.h +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Copyright (c) 2016 Intel Corporation - * - * Copyright (c) 2013, Institute for Pervasive Computing, ETH Zurich - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the Institute nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * This file is part of the Contiki operating system. - */ - -#ifndef OBSERVE_H -#define OBSERVE_H - -#include "coap.h" -#include "transactions.h" -#include "../../util/oc_list.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/* OIC stack headers */ -#include "../../../include/iotivity/oc_ri.h" - -#define COAP_OBSERVER_URL_LEN 20 - -typedef struct coap_observer -{ - struct coap_observer *next; /* for LIST */ - - oc_resource_t *resource; - - char url[COAP_OBSERVER_URL_LEN]; - oc_endpoint_t endpoint; - uint8_t token_len; - uint8_t token[COAP_TOKEN_LEN]; - uint16_t last_mid; - - int32_t obs_counter; - - struct oc_etimer retrans_timer; - uint8_t retrans_counter; -} coap_observer_t; - -oc_list_t coap_get_observers(void); -void coap_remove_observer(coap_observer_t *o); -int coap_remove_observer_by_client(oc_endpoint_t *endpoint); -int coap_remove_observer_by_token(oc_endpoint_t *endpoint, uint8_t *token, - size_t token_len); -int coap_remove_observer_by_uri(oc_endpoint_t *endpoint, const char *uri); -int coap_remove_observer_by_mid(oc_endpoint_t *endpoint, uint16_t mid); - -int coap_notify_observers(oc_resource_t *resource, - oc_response_buffer_t *response_buf, - oc_endpoint_t *endpoint); -// int coap_notify_observers_sub(oc_resource_t *resource, const char *subpath); - -int coap_observe_handler(void *request, void *response, oc_resource_t *resource, - oc_endpoint_t *endpoint); - -#ifdef __cplusplus -} -#endif - -#endif /* OBSERVE_H */ http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/f88168c2/libs/iotivity/src/messaging/coap/oc_coap.h ---------------------------------------------------------------------- diff --git a/libs/iotivity/src/messaging/coap/oc_coap.h b/libs/iotivity/src/messaging/coap/oc_coap.h deleted file mode 100644 index a94b926..0000000 --- a/libs/iotivity/src/messaging/coap/oc_coap.h +++ /dev/null @@ -1,47 +0,0 @@ -/* -// 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_COAP_H -#define OC_COAP_H - -#include "separate.h" -#include "../../util/oc_list.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct oc_separate_response_s -{ - OC_LIST_STRUCT(requests); - int active; - uint8_t buffer[COAP_MAX_BLOCK_SIZE]; -} oc_separate_response_t; - -typedef struct oc_response_buffer_s -{ - uint8_t *buffer; - uint16_t buffer_size; - int32_t *block_offset; - uint16_t response_length; - int code; -} oc_response_buffer_t; - -#ifdef __cplusplus -} -#endif - -#endif /* OC_COAP_H */ http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/f88168c2/libs/iotivity/src/messaging/coap/separate.c ---------------------------------------------------------------------- diff --git a/libs/iotivity/src/messaging/coap/separate.c b/libs/iotivity/src/messaging/coap/separate.c deleted file mode 100644 index 5be01e7..0000000 --- a/libs/iotivity/src/messaging/coap/separate.c +++ /dev/null @@ -1,152 +0,0 @@ -/* - * Copyright (c) 2016 Intel Corporation - * - * Copyright (c) 2013, Institute for Pervasive Computing, ETH Zurich - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the Institute nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * This file is part of the Contiki operating system. - */ - -#include "config.h" - -#ifdef OC_SERVER - -#include "oc_buffer.h" -#include "separate.h" -#include "transactions.h" -#include "util/oc_memb.h" -#include <stdio.h> -#include <string.h> - -OC_MEMB(separate_requests, coap_separate_t, MAX_NUM_CONCURRENT_REQUESTS); - -/*---------------------------------------------------------------------------*/ -/*- Separate Response API ---------------------------------------------------*/ -/*---------------------------------------------------------------------------*/ -/*----------------------------------------------------------------------------*/ -/** - * \brief Initiate a separate response with an empty ACK - * \param request The request to accept - * \param separate_store A pointer to the data structure that will store the - * relevant information for the response - * - * When the server does not have enough resources left to store the information - * for a separate response or otherwise cannot execute the resource handler, - * this function will respond with 5.03 Service Unavailable. The client can - * then retry later. - */ -int -coap_separate_accept(void *request, oc_separate_response_t *separate_response, - oc_endpoint_t *endpoint, int observe) -{ - if (separate_response->active == 0) { - OC_LIST_STRUCT_INIT(separate_response, requests); - } - - coap_packet_t *const coap_req = (coap_packet_t *)request; - - for (coap_separate_t *item = oc_list_head(separate_response->requests); - item != NULL; item = oc_list_item_next(separate_response->requests)) { - if (item->token_len == coap_req->token_len && - memcmp(item->token, coap_req->token, item->token_len) == 0) { - return 0; - } - } - - coap_separate_t *separate_store = oc_memb_alloc(&separate_requests); - - if (!separate_store) - return 0; - - oc_list_add(separate_response->requests, separate_store); - - erbium_status_code = CLEAR_TRANSACTION; - /* send separate ACK for CON */ - if (coap_req->type == COAP_TYPE_CON) { - LOG("Sending ACK for separate response\n"); - coap_packet_t ack[1]; - /* ACK with empty code (0) */ - coap_init_message(ack, COAP_TYPE_ACK, 0, coap_req->mid); - if (observe < 2) { - coap_set_header_observe(ack, observe); - } - coap_set_token(ack, coap_req->token, coap_req->token_len); - oc_message_t *message = oc_allocate_message(); - if (message != NULL) { - message->endpoint.flags = IP; - memcpy(&message->endpoint, endpoint, sizeof(oc_endpoint_t)); - message->length = coap_serialize_message(ack, message->data); - coap_send_message(message); - } else { - coap_separate_clear(separate_response, separate_store); - erbium_status_code = SERVICE_UNAVAILABLE_5_03; - return 0; - } - } - memcpy(&separate_store->endpoint, endpoint, sizeof(oc_endpoint_t)); - - /* store correct response type */ - separate_store->type = COAP_TYPE_NON; - - memcpy(separate_store->token, coap_req->token, coap_req->token_len); - separate_store->token_len = coap_req->token_len; - - separate_store->block1_num = coap_req->block1_num; - separate_store->block1_size = coap_req->block1_size; - - separate_store->block2_num = coap_req->block2_num; - separate_store->block2_size = - coap_req->block2_size > 0 ? MIN(COAP_MAX_BLOCK_SIZE, coap_req->block2_size) - : COAP_MAX_BLOCK_SIZE; - - separate_store->observe = observe; - return 1; -} -/*----------------------------------------------------------------------------*/ -void -coap_separate_resume(void *response, coap_separate_t *separate_store, - uint8_t code, uint16_t mid) -{ - coap_init_message(response, separate_store->type, code, mid); - if (separate_store->token_len) { - coap_set_token(response, separate_store->token, separate_store->token_len); - } - if (separate_store->block1_size) { - coap_set_header_block1(response, separate_store->block1_num, 0, - separate_store->block1_size); - } -} -/*---------------------------------------------------------------------------*/ -void -coap_separate_clear(oc_separate_response_t *separate_response, - coap_separate_t *separate_store) -{ - oc_list_remove(separate_response->requests, separate_store); - oc_memb_free(&separate_requests, separate_store); -} - -#endif /* OC_SERVER */ http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/f88168c2/libs/iotivity/src/messaging/coap/separate.h ---------------------------------------------------------------------- diff --git a/libs/iotivity/src/messaging/coap/separate.h b/libs/iotivity/src/messaging/coap/separate.h deleted file mode 100644 index 9517ff3..0000000 --- a/libs/iotivity/src/messaging/coap/separate.h +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Copyright (c) 2016 Intel Corporation - * - * Copyright (c) 2013, Institute for Pervasive Computing, ETH Zurich - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the Institute nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * This file is part of the Contiki operating system. - */ - -#ifndef SEPARATE_H -#define SEPARATE_H - -#include "coap.h" -#include "transactions.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/* OIC stack headers */ -#include "oc_coap.h" -#include "../../../include/iotivity/oc_ri.h" - -typedef struct coap_separate -{ - struct coap_separate *next; - coap_message_type_t type; - - uint8_t token_len; - uint8_t token[COAP_TOKEN_LEN]; - - uint32_t block1_num; - uint16_t block1_size; - - uint32_t block2_num; - uint16_t block2_size; - - int32_t observe; - - oc_endpoint_t endpoint; -} coap_separate_t; - -int coap_separate_accept(void *request, - oc_separate_response_t *separate_response, - oc_endpoint_t *endpoint, int observe); -void coap_separate_resume(void *response, coap_separate_t *separate_store, - uint8_t code, uint16_t mid); -void coap_separate_clear(oc_separate_response_t *separate_response, - coap_separate_t *separate_store); - -#ifdef __cplusplus -} -#endif - -#endif /* SEPARATE_H */ http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/f88168c2/libs/iotivity/src/messaging/coap/transactions.c ---------------------------------------------------------------------- diff --git a/libs/iotivity/src/messaging/coap/transactions.c b/libs/iotivity/src/messaging/coap/transactions.c deleted file mode 100644 index 8feaa7c..0000000 --- a/libs/iotivity/src/messaging/coap/transactions.c +++ /dev/null @@ -1,202 +0,0 @@ -/* - * Copyright (c) 2016 Intel Corporation - * - * Copyright (c) 2013, Institute for Pervasive Computing, ETH Zurich - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the Institute nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * This file is part of the Contiki operating system. - */ - -#include "transactions.h" -#include "observe.h" -#include "oc_buffer.h" -#include "util/oc_list.h" -#include "util/oc_memb.h" -#include <string.h> - -#ifdef OC_CLIENT -#include "oc_client_state.h" -#endif /* OC_CLIENT */ - -#ifdef OC_SECURITY -#include "security/oc_dtls.h" -#endif - -/*---------------------------------------------------------------------------*/ -OC_MEMB(transactions_memb, coap_transaction_t, COAP_MAX_OPEN_TRANSACTIONS); -OC_LIST(transactions_list); - -static struct oc_process *transaction_handler_process = NULL; - -/*---------------------------------------------------------------------------*/ -/*- Internal API ------------------------------------------------------------*/ -/*---------------------------------------------------------------------------*/ -void -coap_register_as_transaction_handler() -{ - transaction_handler_process = OC_PROCESS_CURRENT(); -} - -coap_transaction_t * -coap_new_transaction(uint16_t mid, oc_endpoint_t *endpoint) -{ - coap_transaction_t *t = oc_memb_alloc(&transactions_memb); - if (t) { - oc_message_t *message = oc_allocate_message(); - if (message) { - LOG("Created new transaction %d %d\n", mid, (int) message->length); - t->mid = mid; - t->retrans_counter = 0; - - t->message = message; - - /* save client address */ - memcpy(&t->message->endpoint, endpoint, sizeof(oc_endpoint_t)); - - oc_list_add( - transactions_list, - t); /* list itself makes sure same element is not added twice */ - } else { - oc_memb_free(&transactions_memb, t); - t = NULL; - } - } - - return t; -} - -/*---------------------------------------------------------------------------*/ -void -coap_send_transaction(coap_transaction_t *t) -{ - LOG("Sending transaction %u\n", t->mid); - bool confirmable = false; - - confirmable = - (COAP_TYPE_CON == ((COAP_HEADER_TYPE_MASK & t->message->data[0]) >> - COAP_HEADER_TYPE_POSITION)) - ? true - : false; - - if (confirmable) { - if (t->retrans_counter < COAP_MAX_RETRANSMIT) { - /* not timed out yet */ - LOG("Keeping transaction %u\n", t->mid); - - if (t->retrans_counter == 0) { - t->retrans_timer.timer.interval = - COAP_RESPONSE_TIMEOUT_TICKS + - (oc_random_rand() % - (oc_clock_time_t)COAP_RESPONSE_TIMEOUT_BACKOFF_MASK); - LOG("Initial interval " OC_CLK_FMT "\n", t->retrans_timer.timer.interval); - } else { - t->retrans_timer.timer.interval <<= 1; /* double */ - LOG("Doubled " OC_CLK_FMT "\n", t->retrans_timer.timer.interval); - } - - OC_PROCESS_CONTEXT_BEGIN(transaction_handler_process); - oc_etimer_restart(&t->retrans_timer); /* interval updated above */ - OC_PROCESS_CONTEXT_END(transaction_handler_process); - - coap_send_message(t->message); - - oc_message_add_ref(t->message); - - t = NULL; - } else { - /* timed out */ - LOG("Timeout\n"); - -#ifdef OC_SERVER - LOG("timeout.. so removing observers\n"); - /* handle observers */ - coap_remove_observer_by_client(&t->message->endpoint); -#endif /* OC_SERVER */ - -#ifdef OC_SECURITY - if (t->message->endpoint.flags & SECURED) { - oc_sec_dtls_close_init(&t->message->endpoint); - } -#endif /* OC_SECURITY */ - -#ifdef OC_CLIENT - oc_ri_remove_client_cb_by_mid(t->mid); -#endif /* OC_CLIENT */ - - coap_clear_transaction(t); - } - } else { - coap_send_message(t->message); - oc_message_add_ref(t->message); - - coap_clear_transaction(t); - } -} -/*---------------------------------------------------------------------------*/ -void -coap_clear_transaction(coap_transaction_t *t) -{ - if (t) { - LOG("Freeing transaction %u: %p\n", t->mid, t); - - oc_etimer_stop(&t->retrans_timer); - oc_message_unref(t->message); - oc_list_remove(transactions_list, t); - oc_memb_free(&transactions_memb, t); - } -} -coap_transaction_t * -coap_get_transaction_by_mid(uint16_t mid) -{ - coap_transaction_t *t = NULL; - - for (t = (coap_transaction_t *)oc_list_head(transactions_list); t; - t = t->next) { - if (t->mid == mid) { - LOG("Found transaction for MID %u: %p\n", t->mid, t); - return t; - } - } - return NULL; -} - -/*---------------------------------------------------------------------------*/ -void -coap_check_transactions() -{ - coap_transaction_t *t = NULL; - - for (t = (coap_transaction_t *)oc_list_head(transactions_list); t; - t = t->next) { - if (oc_etimer_expired(&t->retrans_timer)) { - ++(t->retrans_counter); - LOG("Retransmitting %u (%u)\n", t->mid, t->retrans_counter); - coap_send_transaction(t); - } - } -} -/*---------------------------------------------------------------------------*/ http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/f88168c2/libs/iotivity/src/messaging/coap/transactions.h ---------------------------------------------------------------------- diff --git a/libs/iotivity/src/messaging/coap/transactions.h b/libs/iotivity/src/messaging/coap/transactions.h deleted file mode 100644 index 1bb6c33..0000000 --- a/libs/iotivity/src/messaging/coap/transactions.h +++ /dev/null @@ -1,83 +0,0 @@ -/* - * Copyright (c) 2016 Intel Corporation - * - * Copyright (c) 2013, Institute for Pervasive Computing, ETH Zurich - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the Institute nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * This file is part of the Contiki operating system. - */ - -#ifndef TRANSACTIONS_H -#define TRANSACTIONS_H - -#include "coap.h" -#include "../../util/oc_etimer.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/* - * Modulo mask (thus +1) for a random number to get the tick number for the - * random - * retransmission time between COAP_RESPONSE_TIMEOUT and - * COAP_RESPONSE_TIMEOUT*COAP_RESPONSE_RANDOM_FACTOR. - */ -#define COAP_RESPONSE_TIMEOUT_TICKS (OC_CLOCK_SECOND * COAP_RESPONSE_TIMEOUT) -#define COAP_RESPONSE_TIMEOUT_BACKOFF_MASK \ - (long)((OC_CLOCK_SECOND * COAP_RESPONSE_TIMEOUT * \ - ((float)COAP_RESPONSE_RANDOM_FACTOR - 1.0)) + \ - 0.5) + \ - 1 - -/* container for transactions with message buffer and retransmission info */ -typedef struct coap_transaction -{ - struct coap_transaction *next; /* for LIST */ - - uint16_t mid; - struct oc_etimer retrans_timer; - uint8_t retrans_counter; - oc_message_t *message; - -} coap_transaction_t; - -void coap_register_as_transaction_handler(void); - -coap_transaction_t *coap_new_transaction(uint16_t mid, oc_endpoint_t *endpoint); - -void coap_send_transaction(coap_transaction_t *t); -void coap_clear_transaction(coap_transaction_t *t); -coap_transaction_t *coap_get_transaction_by_mid(uint16_t mid); - -void coap_check_transactions(void); - -#ifdef __cplusplus -} -#endif - -#endif /* TRANSACTIONS_H */ http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/f88168c2/libs/iotivity/src/port/mynewt/abort.c ---------------------------------------------------------------------- diff --git a/libs/iotivity/src/port/mynewt/abort.c b/libs/iotivity/src/port/mynewt/abort.c deleted file mode 100644 index 0ca5329..0000000 --- a/libs/iotivity/src/port/mynewt/abort.c +++ /dev/null @@ -1,25 +0,0 @@ -/** - * 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. - */ - -#include "../oc_assert.h" -#include <assert.h> - -void abort_impl(void) { - assert(0); -} http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/f88168c2/libs/iotivity/src/port/mynewt/adaptor.c ---------------------------------------------------------------------- diff --git a/libs/iotivity/src/port/mynewt/adaptor.c b/libs/iotivity/src/port/mynewt/adaptor.c deleted file mode 100644 index 9fccc88..0000000 --- a/libs/iotivity/src/port/mynewt/adaptor.c +++ /dev/null @@ -1,231 +0,0 @@ -/** - * 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. - */ -#include <assert.h> -#include <syscfg/syscfg.h> -#include <os/os.h> -#include <os/endian.h> -#include <string.h> -#include <log/log.h> -#include "../oc_network_events_mutex.h" -#include "../oc_connectivity.h" -#include "oc_buffer.h" -#include "../oc_log.h" -#include "adaptor.h" - -struct os_eventq oc_event_q; - -/* not sure if these semaphores are necessary yet. If we are running - * all of this from one task, we may not need these */ -static struct os_mutex oc_net_mutex; - -void -oc_network_event_handler_mutex_init(void) -{ - os_error_t rc; - rc = os_mutex_init(&oc_net_mutex); - assert(rc == 0); -} - -void -oc_network_event_handler_mutex_lock(void) -{ - os_mutex_pend(&oc_net_mutex, OS_TIMEOUT_NEVER); -} - -void -oc_network_event_handler_mutex_unlock(void) -{ - os_mutex_release(&oc_net_mutex); -} - -/* need a task to process OCF messages */ -#define OC_NET_TASK_STACK_SIZE OS_STACK_ALIGN(MYNEWT_VAL(OC_TASK_STACK_SIZE)) -#define OC_NET_TASK_PRIORITY MYNEWT_VAL(OC_TASK_PRIORITY) -struct os_task oc_task; -os_stack_t *oc_stack; - -void -oc_send_buffer(oc_message_t *message) { - - switch (message->endpoint.flags) - { -#if (MYNEWT_VAL(OC_TRANSPORT_IP) == 1) - case IP: - oc_send_buffer_ip(message); - break; -#endif -#if (MYNEWT_VAL(OC_TRANSPORT_GATT) == 1) - case GATT: - oc_send_buffer_gatt(message); - break; -#endif -#if (MYNEWT_VAL(OC_TRANSPORT_SERIAL) == 1) - case SERIAL: - oc_send_buffer_serial(message); - break; -#endif - default: - ERROR("Unknown transport option %u\n", message->endpoint.flags); - oc_message_unref(message); - } -} - -void oc_send_multicast_message(oc_message_t *message) -{ - - /* send on all the transports. Don't forget to reference the message - * so it doesn't get deleted */ - -#if (MYNEWT_VAL(OC_TRANSPORT_IP) == 1) - oc_send_buffer_ip_mcast(message); -#endif - -#if (MYNEWT_VAL(OC_TRANSPORT_GATT) == 1) - /* no multicast for GATT, just send unicast */ - oc_message_add_ref(message); - oc_send_buffer_gatt(message); -#endif - -#if (MYNEWT_VAL(OC_TRANSPORT_SERIAL) == 1) - /* no multi-cast for serial. just send unicast */ - oc_message_add_ref(message); - oc_send_buffer_serial(message); -#endif -} - -/* send all the entries to the OCF stack through the same task */ -void -oc_task_handler(void *arg) { - -#if (MYNEWT_VAL(OC_TRANSPORT_GATT) == 1) - oc_connectivity_start_gatt(); -#endif - - while (1) { - struct os_callout_func *cf; - oc_message_t *pmsg; - (void) pmsg; /* to avoid unused */ - struct os_event *evt = os_eventq_get(&oc_event_q); - - switch(evt->ev_type) { -#if (MYNEWT_VAL(OC_TRANSPORT_IP) == 1) - case OC_ADATOR_EVENT_IP: - while ((pmsg = oc_attempt_rx_ip()) != NULL) { - oc_network_event(pmsg); - } - break; -#endif -#if (MYNEWT_VAL(OC_TRANSPORT_SERIAL) == 1) - case OC_ADATOR_EVENT_SERIAL: - while ((pmsg = oc_attempt_rx_serial()) != NULL) { - oc_network_event(pmsg); - } - break; -#endif -#if (MYNEWT_VAL(OC_TRANSPORT_GATT) == 1) - case OC_ADATOR_EVENT_GATT: - while ((pmsg = oc_attempt_rx_gatt()) != NULL) { - oc_network_event(pmsg); - } - break; -#endif - case OS_EVENT_T_TIMER: - cf = (struct os_callout_func *)evt; - assert(cf->cf_func); - cf->cf_func(CF_ARG(cf)); - break; - default: - ERROR("oc_task_handler: Unidentified event %d\n", evt->ev_type); - } - } -} - -static int -oc_init_task(void) { - int rc; - - os_eventq_init(&oc_event_q); - - oc_stack = (os_stack_t*) malloc(sizeof(os_stack_t)*OC_NET_TASK_STACK_SIZE); - if (NULL == oc_stack) { - ERROR("Could not malloc oc stack\n"); - return -1; - } - - rc = os_task_init(&oc_task, "oc", oc_task_handler, NULL, - OC_NET_TASK_PRIORITY, OS_WAIT_FOREVER, - oc_stack, OC_NET_TASK_STACK_SIZE); - - if (rc != 0) { - ERROR("Could not start oc task\n"); - free(oc_stack); - } - - return rc; -} - -void -oc_connectivity_shutdown(void) -{ -#if (MYNEWT_VAL(OC_TRANSPORT_IP) == 1) - oc_connectivity_shutdown_ip(); -#endif -#if (MYNEWT_VAL(OC_TRANSPORT_SERIAL) == 1) - oc_connectivity_shutdown_serial(); -#endif -#if (MYNEWT_VAL(OC_TRANSPORT_GATT) == 1) - oc_connectivity_shutdown_gatt(); -#endif -} - -int -oc_connectivity_init(void) -{ - int rc; - -#if (MYNEWT_VAL(OC_TRANSPORT_IP) == 1) - rc = oc_connectivity_init_ip(); - if (rc != 0) { - goto oc_connectivity_init_err; - } -#endif -#if (MYNEWT_VAL(OC_TRANSPORT_SERIAL) == 1) - - rc = oc_connectivity_init_serial(); - if (rc != 0) { - goto oc_connectivity_init_err; - } -#endif -#if (MYNEWT_VAL(OC_TRANSPORT_GATT) == 1) - rc = oc_connectivity_init_gatt(); - if (rc != 0) { - goto oc_connectivity_init_err; - } -#endif - rc = oc_init_task(); - if (rc != 0) { - goto oc_connectivity_init_err; - } - - return 0; - -oc_connectivity_init_err: - oc_connectivity_shutdown(); - return rc; -} http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/f88168c2/libs/iotivity/src/port/mynewt/adaptor.h ---------------------------------------------------------------------- diff --git a/libs/iotivity/src/port/mynewt/adaptor.h b/libs/iotivity/src/port/mynewt/adaptor.h deleted file mode 100644 index 89c2599..0000000 --- a/libs/iotivity/src/port/mynewt/adaptor.h +++ /dev/null @@ -1,64 +0,0 @@ -/** - * 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. - */ - -#ifndef ADAPTOR_H -#define ADAPTOR_H - -#ifdef __cplusplus -extern "C" { -#endif - -#define OC_ADATOR_EVENT_IP (OS_EVENT_T_PERUSER + 0) -#define OC_ADATOR_EVENT_SERIAL (OS_EVENT_T_PERUSER + 1) -#define OC_ADATOR_EVENT_GATT (OS_EVENT_T_PERUSER + 2) - -extern struct os_eventq oc_event_q; - - -#if (MYNEWT_VAL(OC_TRANSPORT_IP) == 1) -int oc_connectivity_init_ip(void); -void oc_connectivity_shutdown_ip(void); -void oc_send_buffer_ip(oc_message_t *message); -void oc_send_buffer_ip_mcast(oc_message_t *message); -oc_message_t *oc_attempt_rx_ip(void); -#endif - -#if (MYNEWT_VAL(OC_TRANSPORT_GATT) == 1) -int oc_connectivity_init_gatt(void); -void oc_connectivity_start_gatt(void); -void oc_connectivity_shutdown_gatt(void); -void oc_send_buffer_gatt(oc_message_t *message); -void oc_send_buffer_gatt_mcast(oc_message_t *message); -oc_message_t *oc_attempt_rx_gatt(void); - -#endif - -#if (MYNEWT_VAL(OC_TRANSPORT_SERIAL) == 1) -int oc_connectivity_init_serial(void); -void oc_connectivity_shutdown_serial(void); -void oc_send_buffer_serial(oc_message_t *message); -oc_message_t *oc_attempt_rx_serial(void); -#endif - -#ifdef __cplusplus -} -#endif - -#endif /* ADAPTOR_H */ - http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/f88168c2/libs/iotivity/src/port/mynewt/ble_adaptor.c ---------------------------------------------------------------------- diff --git a/libs/iotivity/src/port/mynewt/ble_adaptor.c b/libs/iotivity/src/port/mynewt/ble_adaptor.c deleted file mode 100644 index 1ae2f8e..0000000 --- a/libs/iotivity/src/port/mynewt/ble_adaptor.c +++ /dev/null @@ -1,509 +0,0 @@ -/** - * 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. - */ - -#include <syscfg/syscfg.h> -#if (MYNEWT_VAL(OC_TRANSPORT_GATT) == 1) -#include <assert.h> -#include <os/os.h> -#include <string.h> -#include "oc_buffer.h" -#include "../oc_log.h" -#include "adaptor.h" -#include "host/ble_hs.h" -#include "services/gap/ble_svc_gap.h" -#include "services/gatt/ble_svc_gatt.h" - - -/* a custom service for COAP over GATT */ -/* {e3f9f9c4-8a83-4055-b647-728b769745d6} */ -const uint8_t gatt_svr_svc_coap[16] = { - 0xd6, 0x45, 0x97, 0x76, 0x8b, 0x72, 0x47, 0xb6, - 0x55, 0x40, 0x83, 0x8a, 0xc4, 0xf9, 0xf9, 0xe3, -}; - -/* {e467fee6-d6bb-4956-94df-0090350631f5} */ -const uint8_t gatt_svr_chr_coap[16] = { - 0xf5, 0x31, 0x06, 0x35, 0x90, 0x00, 0xdf, 0x94, - 0x56, 0x49, 0xbb, 0xd6, 0xe6, 0xfe, 0x67, 0xe4, -}; - -/* queue to hold mbufs until we get called from oic */ -struct os_mqueue ble_coap_mq; - -static int -blecoap_gap_event(struct ble_gap_event *event, void *arg); - -#if (MYNEWT_VAL(OC_SERVER) == 1) -/* ble nmgr attr handle */ -uint16_t g_ble_coap_attr_handle; - -static int -gatt_svr_chr_access_coap(uint16_t conn_handle, uint16_t attr_handle, - struct ble_gatt_access_ctxt *ctxt, void *arg); - -static const struct ble_gatt_svc_def gatt_svr_svcs[] = { - { - /* Service: newtmgr */ - .type = BLE_GATT_SVC_TYPE_PRIMARY, - .uuid128 = (void *)gatt_svr_svc_coap, - .characteristics = (struct ble_gatt_chr_def[]) { { - /* Characteristic: Write No Rsp */ - .uuid128 = (void *)gatt_svr_chr_coap, - .access_cb = gatt_svr_chr_access_coap, - .flags = BLE_GATT_CHR_F_WRITE_NO_RSP | BLE_GATT_CHR_F_NOTIFY, - .val_handle = &g_ble_coap_attr_handle, - }, { - 0, /* No more characteristics in this service */ - } }, - }, - { - 0, /* No more services */ - }, -}; - -static int -gatt_svr_chr_access_coap(uint16_t conn_handle, uint16_t attr_handle, - struct ble_gatt_access_ctxt *ctxt, void *arg) -{ - struct os_mbuf *m; - int rc; - (void) attr_handle; /* no need to use this since we have onyl one attr - * tied to this callback */ - - switch (ctxt->op) { - case BLE_GATT_ACCESS_OP_WRITE_CHR: - m = ctxt->om; - /* stick the conn handle at the end of the frame -- we will - * pull it out later */ - rc = os_mbuf_append(m, &conn_handle, sizeof(conn_handle)); - if (rc) { - return BLE_ATT_ERR_INSUFFICIENT_RES; - } - rc = os_mqueue_put(&ble_coap_mq, &oc_event_q, m); - if (rc) { - return BLE_ATT_ERR_PREPARE_QUEUE_FULL; - } - - /* tell nimble we are keeping the mbuf */ - ctxt->om = NULL; - - break; - default: - assert(0); - return BLE_ATT_ERR_UNLIKELY; - } - return 0; -} - -static int -oc_gatt_advertise(void) -{ - struct ble_gap_adv_params adv_params; - struct ble_hs_adv_fields fields; - int rc; - - /* - * Set the advertisement data included in our advertisements: - * o Flags (indicates advertisement type and other general info). - * o Advertising tx power. - * o 128 bit UUID - */ - - memset(&fields, 0, sizeof fields); - - /* Indicate that the flags field should be included; specify a value of 0 - * to instruct the stack to fill the value in for us. - */ - fields.flags_is_present = 1; - fields.flags = 0; - - /* Indicate that the TX power level field should be included; have the - * stack fill this one automatically as well. This is done by assigning - * the special value BLE_HS_ADV_TX_PWR_LVL_AUTO. - */ - fields.tx_pwr_lvl_is_present = 1; - fields.tx_pwr_lvl = BLE_HS_ADV_TX_PWR_LVL_AUTO; - - fields.uuids128 = (void *)gatt_svr_svc_coap; - fields.num_uuids128 = 1; - fields.uuids128_is_complete = 1; - - rc = ble_gap_adv_set_fields(&fields); - if (rc != 0) { - return rc; - } - - memset(&fields, 0, sizeof fields); - fields.name = (uint8_t *)ble_svc_gap_device_name(); - fields.name_len = strlen((char *)fields.name); - fields.name_is_complete = 1; - - rc = ble_gap_adv_rsp_set_fields(&fields); - if (rc != 0) { - return rc; - } - - /* Begin advertising. */ - memset(&adv_params, 0, sizeof adv_params); - adv_params.conn_mode = BLE_GAP_CONN_MODE_UND; - adv_params.disc_mode = BLE_GAP_DISC_MODE_GEN; - rc = ble_gap_adv_start(BLE_ADDR_TYPE_PUBLIC, 0, NULL, BLE_HS_FOREVER, - &adv_params, blecoap_gap_event, NULL); - return rc; -} -#endif - -#if (MYNEWT_VAL(OC_CLIENT) == 1) -static char * -addr_str(const void *addr) -{ - static char buf[6 * 2 + 5 + 1]; - const uint8_t *u8p; - - u8p = addr; - sprintf(buf, "%02x:%02x:%02x:%02x:%02x:%02x", - u8p[5], u8p[4], u8p[3], u8p[2], u8p[1], u8p[0]); - - return buf; -} - - -/** - * Indicates whether we should tre to connect to the sender of the specified - * advertisement. The function returns a positive result if the device - * advertises connectability and support for the Alert Notification service. - */ -static int -oc_gatt_should_connect(const struct ble_gap_disc_desc *disc) -{ - int i; - - /* The device has to be advertising connectability. */ - if (disc->event_type != BLE_HCI_ADV_RPT_EVTYPE_ADV_IND && - disc->event_type != BLE_HCI_ADV_RPT_EVTYPE_DIR_IND) { - - return 0; - } - - /* The device has to advertise support for the COAP service - */ - for (i = 0; i < disc->fields->num_uuids128; i++) { - char *ptr = ((char*) disc->fields->uuids128) + 16 * i; - if (memcmp(ptr, gatt_svr_svc_coap, sizeof(gatt_svr_svc_coap)) == 0) { - return 1; - } - } - - return 0; -} - -/** - * Connects to the sender of the specified advertisement of it looks - * interesting. A device is "interesting" if it advertises connectability and - * support for the Alert Notification service. - */ -static void -oc_gatt_connect_if_interesting(const struct ble_gap_disc_desc *disc) -{ - int rc; - - /* Don't do anything if we don't care about this advertiser. */ - if (!oc_gatt_should_connect(disc)) { - return; - } - - /* Scanning must be stopped before a connection can be initiated. */ - rc = ble_gap_disc_cancel(); - if (rc != 0) { - ERROR("Failed to cancel scan; rc=%d\n", rc); - return; - } - - /* Try to connect the the advertiser. Allow 30 seconds (30000 ms) for - * timeout. - */ - rc = ble_gap_connect(BLE_ADDR_TYPE_PUBLIC, disc->addr_type, disc->addr, - 30000, NULL, blecoap_gap_event, NULL); - if (rc != 0) { - ERROR("Error: Failed to connect to device; addr_type=%d " - "addr=%s\n", disc->addr_type, addr_str(disc->addr)); - return; - } -} - - -/** - * Initiates the GAP general discovery procedure. - */ -static int -oc_gatt_scan(void) -{ - struct ble_gap_disc_params disc_params; - int rc; - - /* Tell the controller to filter duplicates; we don't want to process - * repeated advertisements from the same device. - */ - disc_params.filter_duplicates = 1; - - /** - * Perform a passive scan. I.e., don't send follow-up scan requests to - * each advertiser. - */ - disc_params.passive = 1; - - /* Use defaults for the rest of the parameters. */ - disc_params.itvl = 0; - disc_params.window = 0; - disc_params.filter_policy = 0; - disc_params.limited = 0; - - rc = ble_gap_disc(BLE_ADDR_TYPE_PUBLIC, BLE_HS_FOREVER, &disc_params, - blecoap_gap_event, NULL); - if (rc != 0) { - ERROR("Error initiating GAP discovery procedure; rc=%d\n", - rc); - } - return rc; -} - -#endif - -oc_message_t * -oc_attempt_rx_gatt(void) { - int rc; - struct os_mbuf *m = NULL; - struct os_mbuf_pkthdr *pkt; - uint16_t conn_handle; - oc_message_t *message = NULL; - - LOG("oc_transport_gatt attempt rx\n"); - - /* get an mbuf from the queue */ - m = os_mqueue_get(&ble_coap_mq); - if (NULL == m) { - ERROR("oc_transport_gatt: Woke for for receive but found no mbufs\n"); - goto rx_attempt_err; - } - - if (!OS_MBUF_IS_PKTHDR(m)) { - ERROR("oc_transport_gatt: received mbuf that wasn't a packet header\n"); - goto rx_attempt_err; - } - - pkt = OS_MBUF_PKTHDR(m); - - LOG("oc_transport_gatt rx %p-%u\n", pkt, pkt->omp_len); - /* get the conn handle from the end of the message */ - rc = os_mbuf_copydata(m, pkt->omp_len - sizeof(conn_handle), - sizeof(conn_handle), &conn_handle); - if (rc != 0) { - ERROR("Failed to retrieve conn_handle from mbuf \n"); - goto rx_attempt_err; - } - - /* trim conn_handle from the end */ - os_mbuf_adj(m, - sizeof(conn_handle)); - - message = oc_allocate_message(); - if (NULL == message) { - ERROR("Could not allocate OC message buffer\n"); - goto rx_attempt_err; - } - - if (pkt->omp_len > MAX_PAYLOAD_SIZE) { - ERROR("Message to large for OC message buffer\n"); - goto rx_attempt_err; - } - /* copy to message from mbuf chain */ - rc = os_mbuf_copydata(m, 0, pkt->omp_len, message->data); - if (rc != 0) { - ERROR("Failed to copy message from mbuf to OC message buffer \n"); - goto rx_attempt_err; - } - - os_mbuf_free_chain(m); - message->endpoint.flags = GATT; - message->endpoint.bt_addr.conn_handle = conn_handle; - message->length = pkt->omp_len; - LOG("Successfully rx length %lu\n", message->length); - return message; - - /* add the addr info to the message */ -rx_attempt_err: - if (m) { - os_mbuf_free_chain(m); - } - if (message) { - oc_message_unref(message); - } - return NULL; -} - -static int -blecoap_gap_event(struct ble_gap_event *event, void *arg) -{ - switch (event->type) { -#if (MYNEWT_VAL(OC_CLIENT) == 1) - case BLE_GAP_EVENT_DISC: - /* Try to connect to the advertiser if it looks interesting. */ - oc_gatt_connect_if_interesting(&event->disc); - return 0; -#endif - case BLE_GAP_EVENT_CONNECT: - /* A new connection was established or a connection attempt failed. */ - if (event->connect.status == 0) { - /* nothing to do here on the server */ - } - if (event->connect.status != 0) { - /* nothing to do here on the client */ - } - -#if (MYNEWT_VAL(OC_SERVER) == 1) - /* keep advertising for multiple connections */ - oc_gatt_advertise(); -#endif -#if (MYNEWT_VAL(OC_CLIENT) == 1) - /* keep scanning for new connections */ - oc_gatt_scan(); -#endif - return 0; - - case BLE_GAP_EVENT_DISCONNECT: - /* Connection terminated; resume advertising. */ -#if (MYNEWT_VAL(OC_CLIENT) == 1) - /* keep scanning for new connections */ - oc_gatt_scan(); -#endif -#if (MYNEWT_VAL(OC_SERVER) == 1) - /* resume advertising */ - oc_gatt_advertise(); -#endif - return 0; -#if (MYNEWT_VAL(OC_CLIENT) == 1) - case BLE_GAP_EVENT_NOTIFY_RX: - /* TODO queue the packet */ - return 0; -#endif - } - return 0; -} - -int -ble_coap_gatt_srv_init(struct os_eventq **out) -{ -#if (MYNEWT_VAL(OC_SERVER) == 1) - int rc; - rc = ble_gatts_count_cfg(gatt_svr_svcs); - if (rc != 0) { - return rc; - } - - rc = ble_gatts_add_svcs(gatt_svr_svcs); - if (rc != 0) { - return rc; - } -#endif - - *out = &oc_event_q; - return 0; -} - -int oc_connectivity_init_gatt(void) { - os_mqueue_init(&ble_coap_mq, NULL); - ble_coap_mq.mq_ev.ev_type = OC_ADATOR_EVENT_GATT; - return 0; -} - -void oc_connectivity_start_gatt(void) { - int rc; - rc = ble_hs_start(); - if (rc != 0) { - goto err; - } -#if (MYNEWT_VAL(OC_SERVER) == 1) - rc = oc_gatt_advertise(); - if (rc != 0) { - goto err; - } -#endif -#if (MYNEWT_VAL(OC_CLIENT) == 1) - rc = oc_gatt_scan(); - if (rc != 0) { - goto err; - } -#endif -err: - ERROR("error enabling advertisement; rc=%d\n", rc); -} - -void oc_connectivity_shutdown_gatt(void) -{ - /* there is not unregister for BLE */ -} - -void oc_send_buffer_gatt(oc_message_t *message) -{ - struct os_mbuf *m = NULL; - int rc; - - /* get a packet header */ - m = os_msys_get_pkthdr(0, 0); - if (m == NULL) { - ERROR("oc_transport_gatt: No mbuf available\n"); - goto err; - } - - /* add this data to the mbuf */ - rc = os_mbuf_append(m, message->data, message->length); - if (rc != 0) { - ERROR("oc_transport_gatt: could not append data \n"); - goto err; - } - -#if (MYNEWT_VAL(OC_CLIENT) == 1) - ERROR("send not supported on client"); -#endif - -#if (MYNEWT_VAL(OC_SERVER) == 1) - ble_gattc_notify_custom(message->endpoint.bt_addr.conn_handle, - g_ble_coap_attr_handle, m); - m = NULL; -#endif - -err: - if (m) { - os_mbuf_free_chain(m); - } - oc_message_unref(message); - return; -} - -void -oc_send_buffer_gatt_mcast(oc_message_t *message) -{ -#if (MYNEWT_VAL(OC_CLIENT) == 1) - ERROR("send not supported on client"); -#elif (MYNEWT_VAL(OC_SERVER) == 1) - oc_message_unref(message); - ERROR("oc_transport_gatt: no multicast support for server only system \n"); -#endif -} - -#endif \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/f88168c2/libs/iotivity/src/port/mynewt/clock.c ---------------------------------------------------------------------- diff --git a/libs/iotivity/src/port/mynewt/clock.c b/libs/iotivity/src/port/mynewt/clock.c deleted file mode 100644 index 51def9a..0000000 --- a/libs/iotivity/src/port/mynewt/clock.c +++ /dev/null @@ -1,41 +0,0 @@ -/** - * 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. - */ - -#include <stdint.h> -#include <os/os.h> -#include "../oc_clock.h" - -void oc_clock_init(void) -{ - /* in mynewt clock is initialized elsewhere */ -} -oc_clock_time_t oc_clock_time(void) -{ - return os_time_get(); -} - -unsigned long oc_clock_seconds(void) -{ - return os_time_get()/OS_TICKS_PER_SEC; -} - -void oc_clock_wait(oc_clock_time_t t) -{ - os_time_delay(t); -} http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/f88168c2/libs/iotivity/src/port/mynewt/config.h ---------------------------------------------------------------------- diff --git a/libs/iotivity/src/port/mynewt/config.h b/libs/iotivity/src/port/mynewt/config.h deleted file mode 100644 index 1e057b3..0000000 --- a/libs/iotivity/src/port/mynewt/config.h +++ /dev/null @@ -1,81 +0,0 @@ -#ifndef CONFIG_H -#define CONFIG_H - - -#ifdef __cplusplus -extern "C" { -#endif - -/* Time resolution */ -#include <stdint.h> -#include <os/os.h> -#include <log/log.h> -#include <syscfg/syscfg.h> - -/* rather than change all their source files, just translate the mynewt - * package defines into their defines here */ -#if (MYNEWT_VAL(OC_SERVER) == 1) -#define OC_SERVER -#endif - -#if (MYNEWT_VAL(OC_CLIENT) == 1) -#define OC_CLIENT -#endif - -#if (MYNEWT_VAL(OC_DEBUG) == 1) -#define DEBUG 1 -#endif - -extern struct log oc_log; - -typedef os_time_t oc_clock_time_t; -#define OC_CLOCK_CONF_TICKS_PER_SECOND (OS_TICKS_PER_SEC) -#ifdef ARCH_sim -#define OC_CLK_FMT "%u" -#else -#define OC_CLK_FMT "%lu" -#endif - -/* Memory pool sizes */ -#define OC_BYTES_POOL_SIZE (2048) -#define OC_INTS_POOL_SIZE (16) -#define OC_DOUBLES_POOL_SIZE (16) - -/* Server-side parameters */ -/* Maximum number of server resources */ -#define MAX_APP_RESOURCES (8) - -/* Common paramters */ -/* Maximum number of concurrent requests */ -#define MAX_NUM_CONCURRENT_REQUESTS (2) - -/* Estimated number of nodes in payload tree structure */ -#define EST_NUM_REP_OBJECTS (100) - -/* Maximum size of request/response PDUs */ -#define MAX_PAYLOAD_SIZE (612) - -/* Number of devices on the OCF platform */ -#define MAX_NUM_DEVICES (1) - -/* Platform payload size */ -#define MAX_PLATFORM_PAYLOAD_SIZE (256) - -/* Device payload size */ -#define MAX_DEVICE_PAYLOAD_SIZE (256) - -/* Security layer */ -/* Maximum number of authorized clients */ -//#define MAX_NUM_SUBJECTS (2) - -/* Maximum number of concurrent DTLS sessions */ -//#define MAX_DTLS_PEERS (1) - -/* Max inactivity timeout before tearing down DTLS connection */ -//#define DTLS_INACTIVITY_TIMEOUT (10) - -#ifdef __cplusplus -} -#endif - -#endif /* CONFIG_H */ http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/f88168c2/libs/iotivity/src/port/mynewt/ip_adaptor.c ---------------------------------------------------------------------- diff --git a/libs/iotivity/src/port/mynewt/ip_adaptor.c b/libs/iotivity/src/port/mynewt/ip_adaptor.c deleted file mode 100644 index 1bdf621..0000000 --- a/libs/iotivity/src/port/mynewt/ip_adaptor.c +++ /dev/null @@ -1,315 +0,0 @@ -/** - * 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. - */ - -#include <syscfg/syscfg.h> -#if (MYNEWT_VAL(OC_TRANSPORT_IP) == 1) -#include <assert.h> -#include <os/os.h> -#include <os/endian.h> -#include <string.h> -#include <log/log.h> -#include <mn_socket/mn_socket.h> - -#include "../oc_connectivity.h" -#include "oc_buffer.h" -#include "../oc_log.h" -#include "adaptor.h" - -struct os_event oc_sock_read_event = { - .ev_type = OC_ADATOR_EVENT_IP, -}; - -#ifdef OC_SECURITY -#error This implementation does not yet support security -#endif - - -#define COAP_PORT_UNSECURED (5683) -/* TODO use inet_pton when its available */ -const struct mn_in6_addr coap_all_nodes_v6 = { - .s_addr = {0xFF,0x02,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFD} -}; - - -/* sockets to use for coap unicast and multicast */ -struct mn_socket *ucast; - -#if (MYNEWT_VAL(OC_SERVER) == 1) -struct mn_socket *mcast; -#endif - -static void -oc_send_buffer_ip_int(oc_message_t *message, int mcast) -{ - struct mn_sockaddr_in6 to; - struct os_mbuf m; - int rc; - - LOG("oc_transport_ip attempt send buffer %lu\n", message->length); - - to.msin6_len = sizeof(to); - to.msin6_family = MN_AF_INET6; - - to.msin6_port = htons(message->endpoint.ipv6_addr.port); - memcpy(&to.msin6_addr, message->endpoint.ipv6_addr.address, - sizeof(to.msin6_addr)); - - /* put on an mbuf header to make the socket happy */ - memset(&m,0, sizeof(m)); - m.om_data = message->data; - m.om_len = message->length; - to.msin6_scope_id = message->endpoint.ipv6_addr.scope; - - if (mcast) { - struct mn_itf itf; - memset(&itf, 0, sizeof(itf)); - - while (1) { - rc = mn_itf_getnext(&itf); - if (rc) { - break; - } - - if (0 == (itf.mif_flags & MN_ITF_F_UP)) { - continue; - } - - to.msin6_scope_id = itf.mif_idx; - - rc = mn_sendto(ucast, &m, (struct mn_sockaddr *) &to); - if (rc != 0) { - ERROR("Failed sending buffer %lu on itf %d\n", - message->length, to.msin6_scope_id); - } - } - } else { - rc = mn_sendto(ucast, &m, (struct mn_sockaddr *) &to); - if (rc != 0) { - ERROR("Failed sending buffer %lu on itf %d\n", - message->length, to.msin6_scope_id); - } - } - oc_message_unref(message); -} - -void -oc_send_buffer_ip(oc_message_t *message) { - oc_send_buffer_ip_int(message, 0); -} -void -oc_send_buffer_ip_mcast(oc_message_t *message) { - oc_send_buffer_ip_int(message, 1); -} - -oc_message_t * -oc_attempt_rx_ip_sock(struct mn_socket * rxsock) { - int rc; - struct os_mbuf *m = NULL; - struct os_mbuf_pkthdr *pkt; - oc_message_t *message = NULL; - struct mn_sockaddr_in6 from; - - LOG("oc_transport_ip attempt rx from %p\n", rxsock); - - rc= mn_recvfrom(rxsock, &m, (struct mn_sockaddr *) &from); - - if ( rc != 0) { - return NULL; - } - - if (!OS_MBUF_IS_PKTHDR(m)) { - goto rx_attempt_err; - } - - pkt = OS_MBUF_PKTHDR(m); - - LOG("rx from %p %p-%u\n", rxsock, pkt, pkt->omp_len); - - message = oc_allocate_message(); - if (NULL == message) { - ERROR("Could not allocate OC message buffer\n"); - goto rx_attempt_err; - } - - if (pkt->omp_len > MAX_PAYLOAD_SIZE) { - ERROR("Message to large for OC message buffer\n"); - goto rx_attempt_err; - } - /* copy to message from mbuf chain */ - rc = os_mbuf_copydata(m, 0, pkt->omp_len, message->data); - if (rc != 0) { - ERROR("Failed to copy message from mbuf to OC message buffer \n"); - goto rx_attempt_err; - } - - os_mbuf_free_chain(m); - - message->endpoint.flags = IP; - message->length = pkt->omp_len; - memcpy(&message->endpoint.ipv6_addr.address, &from.msin6_addr, - sizeof(message->endpoint.ipv6_addr.address)); - message->endpoint.ipv6_addr.scope = from.msin6_scope_id; - message->endpoint.ipv6_addr.port = ntohs(from.msin6_port); - - LOG("Successfully rx from %p len %lu\n", rxsock, message->length); - return message; - - /* add the addr info to the message */ -rx_attempt_err: - if (m) { - os_mbuf_free_chain(m); - } - - if (message) { - oc_message_unref(message); - } - - return NULL; -} - -oc_message_t * -oc_attempt_rx_ip(void) { - oc_message_t *pmsg; - pmsg = oc_attempt_rx_ip_sock(ucast); -#if (MYNEWT_VAL(OC_SERVER) == 1) - if (pmsg == NULL ) { - pmsg = oc_attempt_rx_ip_sock(mcast); - } -#endif - return pmsg; -} - -static void oc_socks_readable(void *cb_arg, int err); - -union mn_socket_cb oc_sock_cbs = { - .socket.readable = oc_socks_readable, - .socket.writable = NULL -}; - -void -oc_socks_readable(void *cb_arg, int err) -{ - os_eventq_put(&oc_event_q, &oc_sock_read_event); -} - -void -oc_connectivity_shutdown_ip(void) -{ - LOG("OC shutdown IP\n"); - - if (ucast) { - mn_close(ucast); - } - -#if (MYNEWT_VAL(OC_SERVER) == 1) - if (mcast) { - mn_close(mcast); - } -#endif - -} - -int -oc_connectivity_init_ip(void) -{ - int rc; - struct mn_sockaddr_in6 sin; - struct mn_itf itf; - - LOG("OC transport init IP\n"); - memset(&itf, 0, sizeof(itf)); - - rc = oc_log_init(); - if ( rc != 0) { - ERROR("Could not create oc logging\n"); - return rc; } - - rc = mn_socket(&ucast, MN_PF_INET6, MN_SOCK_DGRAM, 0); - if ( rc != 0 || !ucast ) { - ERROR("Could not create oc unicast socket\n"); - return rc; - } - mn_socket_set_cbs(ucast, ucast, &oc_sock_cbs); - -#if (MYNEWT_VAL(OC_SERVER) == 1) - rc = mn_socket(&mcast, MN_PF_INET6, MN_SOCK_DGRAM, 0); - if ( rc != 0 || !mcast ) { - mn_close(ucast); - ERROR("Could not create oc multicast socket\n"); - return rc; - } - mn_socket_set_cbs(mcast, mcast, &oc_sock_cbs); -#endif - - sin.msin6_len = sizeof(sin); - sin.msin6_family = MN_AF_INET6; - sin.msin6_port = 0; - sin.msin6_flowinfo = 0; - memcpy(&sin.msin6_addr, nm_in6addr_any, sizeof(sin.msin6_addr)); - - rc = mn_bind(ucast, (struct mn_sockaddr *)&sin); - if (rc != 0) { - ERROR("Could not bind oc unicast socket\n"); - goto oc_connectivity_init_err; - } - -#if (MYNEWT_VAL(OC_SERVER) == 1) - /* Set socket option to join multicast group on all valid interfaces */ - while (1) { - struct mn_mreq join; - - rc = mn_itf_getnext(&itf); - if (rc) { - break; - } - - if (0 == (itf.mif_flags & MN_ITF_F_UP)) { - continue; - } - - join.mm_addr.v6 = coap_all_nodes_v6; - join.mm_idx = itf.mif_idx; - join.mm_family = MN_AF_INET6; - - rc = mn_setsockopt(mcast, MN_SO_LEVEL, MN_MCAST_JOIN_GROUP, &join); - if (rc != 0) { - ERROR("Could not join multicast group on %s\n", itf.mif_name); - continue; - } - - LOG("Joined Coap multicast grop on %s\n", itf.mif_name); - } - - sin.msin6_port = htons(COAP_PORT_UNSECURED); - rc = mn_bind(mcast, (struct mn_sockaddr *)&sin); - if (rc != 0) { - ERROR("Could not bind oc multicast socket\n"); - goto oc_connectivity_init_err; - } -#endif - - return 0; - -oc_connectivity_init_err: - oc_connectivity_shutdown(); - return rc; -} - -#endif \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/f88168c2/libs/iotivity/src/port/mynewt/log.c ---------------------------------------------------------------------- diff --git a/libs/iotivity/src/port/mynewt/log.c b/libs/iotivity/src/port/mynewt/log.c deleted file mode 100644 index 8c76fc9..0000000 --- a/libs/iotivity/src/port/mynewt/log.c +++ /dev/null @@ -1,43 +0,0 @@ -/** - * 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. - */ -#include <log/log.h> - -/* logging data for this module. TODO, the application should - * define the logging strategy for this module */ -#define MAX_CBMEM_BUF (600) -static uint32_t *cbmem_buf; -static struct cbmem cbmem; -struct log oc_log; - -int -oc_log_init(void) { - - log_init(); - - cbmem_buf = malloc(sizeof(uint32_t) * MAX_CBMEM_BUF); - if (cbmem_buf == NULL) { - return -1; - } - - cbmem_init(&cbmem, cbmem_buf, MAX_CBMEM_BUF); - log_register("iot", &oc_log, &log_cbmem_handler, &cbmem); - - LOG_INFO(&oc_log, LOG_MODULE_IOTIVITY, "OC Init"); - return 0; -} http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/f88168c2/libs/iotivity/src/port/mynewt/oc_loop.c ---------------------------------------------------------------------- diff --git a/libs/iotivity/src/port/mynewt/oc_loop.c b/libs/iotivity/src/port/mynewt/oc_loop.c deleted file mode 100644 index ca91812..0000000 --- a/libs/iotivity/src/port/mynewt/oc_loop.c +++ /dev/null @@ -1,26 +0,0 @@ -/** - * 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. - */ - -#include "../oc_signal_main_loop.h" - - -void oc_signal_main_loop(void) -{ - /* TODO */ -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/f88168c2/libs/iotivity/src/port/mynewt/random.c ---------------------------------------------------------------------- diff --git a/libs/iotivity/src/port/mynewt/random.c b/libs/iotivity/src/port/mynewt/random.c deleted file mode 100644 index 0fcddfb..0000000 --- a/libs/iotivity/src/port/mynewt/random.c +++ /dev/null @@ -1,31 +0,0 @@ -/** - * 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. - */ -#include "../oc_random.h" -#include <stdlib.h> - -void oc_random_init(unsigned short seed) { - srand(seed); -} - -unsigned short oc_random_rand(void) { - return rand(); -} - -void oc_random_destroy(void) { -} http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/f88168c2/libs/iotivity/src/port/mynewt/serial_adaptor.c ---------------------------------------------------------------------- diff --git a/libs/iotivity/src/port/mynewt/serial_adaptor.c b/libs/iotivity/src/port/mynewt/serial_adaptor.c deleted file mode 100644 index 892db2b..0000000 --- a/libs/iotivity/src/port/mynewt/serial_adaptor.c +++ /dev/null @@ -1,164 +0,0 @@ -/** - * 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. - */ - -#include <syscfg/syscfg.h> -#if (MYNEWT_VAL(OC_TRANSPORT_SERIAL) == 1) - -#include <assert.h> -#include <os/os.h> -#include <shell/shell.h> -#include "oc_buffer.h" -#include "../oc_log.h" -#include "adaptor.h" - - -struct os_mqueue oc_serial_mqueue; - -static int -oc_serial_in(struct os_mbuf *m, void *arg) -{ - return os_mqueue_put(&oc_serial_mqueue, &oc_event_q, m); -} - -void -oc_connectivity_shutdown_serial(void) { - shell_nlip_input_register(NULL, NULL); -} - -int -oc_connectivity_init_serial(void) { - int rc; - - rc = shell_nlip_input_register(oc_serial_in, NULL); - if (rc != 0) { - goto err; - } - - rc = os_mqueue_init(&oc_serial_mqueue, NULL); - if (rc != 0) { - goto err; - } - /* override the eventq type */ - oc_serial_mqueue.mq_ev.ev_type = OC_ADATOR_EVENT_SERIAL; - return 0; - -err: - oc_connectivity_shutdown_serial(); - return rc; -} - - -void oc_send_buffer_serial(oc_message_t *message) { - int rc; - struct os_mbuf *m; - - /* get a packet header */ - m = os_msys_get_pkthdr(0, 0); - if (m == NULL) { - ERROR("oc_transport_serial: No mbuf available\n"); - goto err; - } - - /* add this data to the mbuf */ - rc = os_mbuf_append(m, message->data, message->length); - if (rc != 0) { - - ERROR("oc_transport_serial: could not append data \n"); - goto err; - } - - /* send over the shell output */ - rc = shell_nlip_output(m); - if (rc != 0) { - ERROR("oc_transport_serial: nlip output failed \n"); - goto err; - } - - LOG("oc_transport_serial: send buffer %lu\n", message->length); - -err: - oc_message_unref(message); - return; - -} - -oc_message_t * -oc_attempt_rx_serial(void) { - int rc; - struct os_mbuf *m = NULL; - struct os_mbuf_pkthdr *pkt; - oc_message_t *message = NULL; - - LOG("oc_transport_serial attempt rx\n"); - - /* get an mbuf from the queue */ - m = os_mqueue_get(&oc_serial_mqueue); - if (NULL == m) { - ERROR("oc_transport_serial: Woke for for receive but found no mbufs\n"); - goto rx_attempt_err; - } - - if (!OS_MBUF_IS_PKTHDR(m)) { - ERROR("oc_transport_serial: received mbuf that wasn't a packet header\n"); - goto rx_attempt_err; - } - - pkt = OS_MBUF_PKTHDR(m); - - LOG("oc_transport_serial rx %p-%u\n", pkt, pkt->omp_len); - - message = oc_allocate_message(); - if (NULL == message) { - ERROR("Could not allocate OC message buffer\n"); - goto rx_attempt_err; - } - - if (pkt->omp_len > MAX_PAYLOAD_SIZE) { - ERROR("Message to large for OC message buffer\n"); - goto rx_attempt_err; - } - /* copy to message from mbuf chain */ - rc = os_mbuf_copydata(m, 0, pkt->omp_len, message->data); - if (rc != 0) { - ERROR("Failed to copy message from mbuf to OC message buffer \n"); - goto rx_attempt_err; - } - - os_mbuf_free_chain(m); - - message->endpoint.flags = SERIAL; - message->length = pkt->omp_len; - - LOG("Successfully rx length %lu\n", message->length); - return message; - - /* add the addr info to the message */ -rx_attempt_err: - if (m) { - os_mbuf_free_chain(m); - } - - if (message) { - oc_message_unref(message); - } - - return NULL; -} - -#endif http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/f88168c2/libs/iotivity/src/port/mynewt/storage.c ---------------------------------------------------------------------- diff --git a/libs/iotivity/src/port/mynewt/storage.c b/libs/iotivity/src/port/mynewt/storage.c deleted file mode 100644 index 3b77c1a..0000000 --- a/libs/iotivity/src/port/mynewt/storage.c +++ /dev/null @@ -1,38 +0,0 @@ -/** - * 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. - */ - - -#include <stddef.h> -#include <stdint.h> - -/* we will not really use storage until after we get security working */ -int oc_storage_config(const char *store) { - return -1; -} - -long oc_storage_read(const char *store, uint8_t *buf, size_t size) -{ - return -1; -} - - -long oc_storage_write(const char *store, uint8_t *buf, size_t size) -{ - return -1; -} http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/f88168c2/libs/iotivity/src/port/oc_assert.h ---------------------------------------------------------------------- diff --git a/libs/iotivity/src/port/oc_assert.h b/libs/iotivity/src/port/oc_assert.h deleted file mode 100644 index 6361c66..0000000 --- a/libs/iotivity/src/port/oc_assert.h +++ /dev/null @@ -1,50 +0,0 @@ -/* -// 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_ASSERT_H -#define OC_ASSERT_H - -#include "oc_log.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#ifdef __linux__ -#include <stdlib.h> -#define abort_impl() abort() -#else -void abort_impl(void); -#endif - -#define oc_abort(msg) \ - do { \ - LOG("\n%s:%d:%s: error: %s\nAbort.\n", __FILE__, __LINE__, __func__, msg); \ - abort_impl(); \ - } while (0) - -#define oc_assert(cond) \ - do { \ - if (!(cond)) { \ - oc_abort("Assertion (" #cond ") failed."); \ - } \ - } while (0) - -#ifdef __cplusplus -} -#endif - -#endif /* OC_ASSERT_H */