From 9ea665b48af0cbac05f1703c538f29223ab6ee6b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Erno=20T=C3=B6rmikoski?= Date: Wed, 27 May 2015 18:08:20 +0300 Subject: [PATCH 001/154] Initial CoAP service api Change-Id: If6ab46485debc3a3e46578ce4894cb4c5adf7c66 --- coap-service/coap_service_api.h | 238 ++++++++++++++++++++++++++++++++ 1 file changed, 238 insertions(+) create mode 100755 coap-service/coap_service_api.h diff --git a/coap-service/coap_service_api.h b/coap-service/coap_service_api.h new file mode 100755 index 0000000000..fbb4c7eb9b --- /dev/null +++ b/coap-service/coap_service_api.h @@ -0,0 +1,238 @@ +/* + * + * Copyright (c) 2015 ARM. All rights reserved. + * + */ + +#ifndef COAP_SERVICE_API_H_ +#define COAP_SERVICE_API_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +#include +#include + +/** + * This interface is used in sending and receiving of CoAP messages to multicast address and receive multiple responses. + */ + +// Allowed_methods +#define COAP_SERVICE_ACCESS_ALL_ALLOWED 0x0F +#define COAP_SERVICE_ACCESS_GET_ALLOWED 0x01 +#define COAP_SERVICE_ACCESS_PUT_ALLOWED 0x02 +#define COAP_SERVICE_ACCESS_POST_ALLOWED 0x04 +#define COAP_SERVICE_ACCESS_DELETE_ALLOWED 0x08 + +// Bits for service options +#define COAP_SERVICE_OPTIONS_NONE 0x00 +#define COAP_SERVICE_OPTIONS_VIRTUAL_SOCKET 0x01 +#define COAP_SERVICE_OPTIONS_SECURE 0x02 + +// Bits for request options +#define COAP_REQUEST_OPTIONS_NONE 0x00 +#define COAP_REQUEST_OPTIONS_ADDRESS_DEFAULT 0x00//!< default is not setting either short or long. +#define COAP_REQUEST_OPTIONS_ADDRESS_LONG 0x01 +#define COAP_REQUEST_OPTIONS_ADDRESS_SHORT 0x02 +#define COAP_REQUEST_OPTIONS_MULTICAST 0x04 //!< indicates that CoAP library support multicasting +#define COAP_REQUEST_OPTIONS_SECURE_BYPASS 0x08 + + +/** + * \brief Initialise server instance. + * + * Initialise CoAP services for the registered application. + * + * \param interface_id Informs registered application interface id. This parameter is passed to socket implementation. + * \param listen_port Port that Application wants to use for communicate with coap server. + * \param service_options Options of the current service. + * + * \return service_id + */ +int8_t coap_service_initialize(int8_t interface_id, uint16_t listen_port, uint8_t service_options); + +/** + * \brief Service delete + * + * Removes all data related to this instance + * + * \param service_id Id number of the current service. + */ +void coap_service_delete( int8_t service_id ); + +/** + * \brief CoAP service request callback + * + * CoAP service request message receiving and parsing function + * + * \param service_id Id number of the current service. + * \param source_address IPv6 source address. + * \param source_port Source port + * \param request_ptr Pointer to CoAP header structure. + * + * \return Status + */ +typedef int (*coap_service_request_recv_cb)(int8_t service_id, uint8_t source_address[static 16], uint16_t source_port, sn_coap_hdr_s *request_ptr); + +/** + * \brief Security service start callback + * + * Starts security service handling. + * + * \param service_id Id number of the current service. + * \param EUI64 64 bit global identifier + * + * \return Status + */ +typedef int (*coap_service_security_start_cb)(int8_t service_id, uint8_t EUI64[static 8]); + +/** + * \brief CoAP service security done callback + * + * CoAP service security done callback function. + * + * \param service_id Id number of the current service. + * \param EUI64 64 bit global identifier + * \param keyblock Security key (40 bits) + * + * \return Status + */ +typedef int (*coap_service_security_done_cb)(int8_t service_id, uint8_t EUI64[static 8], uint8_t keyblock[static 40]); + + +/** + * \brief Security service start callback + * + * Starts security service handling. + * + * \param EUI64 64 bit global identifier + * \param PSKd_ptr Pointer to PSK key. + * \param PSKd_len Lenght of PSK key. + * + * \return Status + */ +int coap_service_security_key_set(int8_t service_id, uint8_t EUI64[static 8], uint8_t *PSKd_ptr, uint8_t PSKd_len); + +/** + * \brief Service message response receive callback. + * + * Function that handles CoAP service message receiving and parsing + * + * \param msg_id Id number of the current message. + * \param response_ptr Pointer to CoAP header structure. + * + * \return Status + */ +typedef int (*coap_service_response_recv)(uint16_t msg_id, sn_coap_hdr_s *response_ptr); + +/** + * \brief Virtual socket sent callback. + * + * Sent data to virtual socket. + * + * \param service_id Id number of the current service. + * \param destination_addr_ptr Receiver IPv6 address. + * \param port Receiver port number. + * \param *data_ptr Pointer to the data. + * \param data_len Lenght of the data. + * + * \return Status + */ +typedef int (*coap_service_virtual_socket_send_cb)(int8_t service_id, uint8_t destination_addr_ptr[static 16], uint16_t port, uint8_t *data_ptr, uint16_t data_len); + +/** + * \brief Virtual socket read. + * + * Receive data from virtual socket. + * + * \param service_id Id number of the current service. + * \param source_addr_ptr Receiver IPv6 address. + * \param port Receiver port number. + * \param *data_ptr Pointer to the data + * \param data_len Lenght of the data + * + * \return ? + */ +int16_t coap_service_virtual_socket_recv(int8_t service_id, uint8_t source_addr_ptr[static 16], uint16_t port, uint8_t *data_ptr, uint16_t data_len); + +/** + * \brief Set virtual socket + * + * Sets virtual socket for CoAP services. + * + * \param service_id Id number of the current service. + * \param *send_method_ptr Callback to coap virtual socket. + * + * \return TODO + */ +int16_t coap_service_virtual_socket_set_cb(int8_t service_id, coap_service_virtual_socket_send_cb *send_method_ptr); + +/** + * \brief Register unsecure callback methods to CoAP server + * + * Register application and informs CoAP services unsecure registery callback function. + * + * \param service_id Id number of the current service. + * \param *uri Pointer to uri. + * \param uri_len Length of uri. + * \param port port that Application wants to use for communicate with coap server. + * \param allowed_method Informs method that is allowed to use (used defines described above). + * \param *request_recv_cb CoAP service request receive callback function pointer. + * + * \return TODO + */ +int16_t coap_service_register_uri(int8_t service_id, uint16_t *uri, uint16_t uri_len, uint16_t port, uint8_t allowed_method, coap_service_request_recv_cb *request_recv_cb); + +/** + * \brief Register secure callback methods to CoAP server. + * + * Register application and informs CoAP services secure registery callback functions. + * + * \param service_id Id number of the current service. + * \param *start_ptr Callback to inform security handling is started. + * \param *security_done_cb Callback to inform security handling is done. + * + * \return TODO + * + * instance id that is used to identify registery. + */ +int16_t coap_service_register_uri_secure_cb_set(int8_t service_id, coap_service_security_start_cb *start_ptr, coap_service_security_done_cb *security_done_cb); + +/** + * \brief Sends CoAP service request + * + * Build and sends CoAP service request message. + * + * \param service_id Id number of the current service. + * \param options Options defined above. + * \param addr IPv6 address. + * \param destination_port Destination port + * \param request_ptr Pointer to CoAP header structure. + * \param *request_response_cb Callback to inform result of the request. + * + * \return msg_id Id number of the current message. + */ +uint16_t coap_service_request_send(int8_t service_id, uint8_t options, uint8_t addr[static 16], uint16_t destination_port, sn_coap_hdr_s *request_ptr, coap_service_response_recv *request_response_cb); + +/** + * \brief Sends CoAP service response + * + * Build and sends CoAP service response message. + * + * \param service_id Id number of the current service. + * \param msg_id Message ID number. + * \param options Options defined above. + * \param response_ptr Pointer to CoAP header structure. + * + * \return TODO + */ +uint16_t coap_service_response_send(int8_t service_id, uint16_t msg_id, uint8_t options, sn_coap_hdr_s *response_ptr); + +#ifdef __cplusplus +} +#endif + +#endif /* COAP_SERVICE_API_H_ */ From f5e3a7deacd9afc6d74ebee73ca6b2de65324f9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Erno=20T=C3=B6rmikoski?= Date: Thu, 28 May 2015 16:44:56 +0300 Subject: [PATCH 002/154] some fixies for coap service api Change-Id: Idf04d5670193ffc15c6eb02780fe16222963c6de --- coap-service/coap_service_api.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/coap-service/coap_service_api.h b/coap-service/coap_service_api.h index fbb4c7eb9b..ca00c0a53f 100755 --- a/coap-service/coap_service_api.h +++ b/coap-service/coap_service_api.h @@ -229,7 +229,7 @@ uint16_t coap_service_request_send(int8_t service_id, uint8_t options, uint8_t a * * \return TODO */ -uint16_t coap_service_response_send(int8_t service_id, uint16_t msg_id, uint8_t options, sn_coap_hdr_s *response_ptr); +int8_t coap_service_response_send(int8_t service_id, uint8_t options, sn_coap_hdr_s *request_ptr, sn_coap_msg_code_e message_code, int32_t content_type,uint8_t * payload_ptr,uint16_t payload_len); #ifdef __cplusplus } From c558faf6da6785844a9423ddf6180eba1519d10c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Erno=20T=C3=B6rmikoski?= Date: Thu, 28 May 2015 11:06:02 +0300 Subject: [PATCH 003/154] coap_service stuff added Change-Id: I8a6f66b5c6b6d3ef3db73f8fb5bf4191963be790 --- .../CoAP_Server_unit_test_app.c | 15 +++ Makefile | 61 ++++++++++ coap-service-linux/coap_server_impl.c | 0 coap-service-mbed/coap_server_impl.c | 0 coap-service-nanomesh/coap_server_impl.c | 76 ++++++++++++ coap-service/coap_service_api.h | 88 ++++++++++---- source/coap_server.c | 113 ++++++++++++++++++ source/coap_service.c | 107 +++++++++++++++++ source/include/coap_server.h | 44 +++++++ 9 files changed, 479 insertions(+), 25 deletions(-) create mode 100644 CoAP_Server_unit_test/CoAP_Server_unit_test_app.c create mode 100644 Makefile create mode 100644 coap-service-linux/coap_server_impl.c create mode 100644 coap-service-mbed/coap_server_impl.c create mode 100644 coap-service-nanomesh/coap_server_impl.c create mode 100644 source/coap_server.c create mode 100644 source/coap_service.c create mode 100644 source/include/coap_server.h diff --git a/CoAP_Server_unit_test/CoAP_Server_unit_test_app.c b/CoAP_Server_unit_test/CoAP_Server_unit_test_app.c new file mode 100644 index 0000000000..c64c2d6728 --- /dev/null +++ b/CoAP_Server_unit_test/CoAP_Server_unit_test_app.c @@ -0,0 +1,15 @@ +#include +#include +#include "ns_types.h" +#include "coap_service_api.h" + +int main(void) { + printf("!!!CoAP Server test!!!"); /* prints !!!Hello World!!! */ + + int8_t service_id = 0; + + service_id = coap_service_initialize(0xff, 666, 0); + + return EXIT_SUCCESS; +} + diff --git a/Makefile b/Makefile new file mode 100644 index 0000000000..3081500f29 --- /dev/null +++ b/Makefile @@ -0,0 +1,61 @@ +# +# Makefile for combined CoAP Service library +# + +# Define compiler toolchain with CC or PLATFORM variables +# Example (GCC toolchains, default $CC and $AR are used) +# make +# +# OR (Cross-compile GCC toolchain) +# make PLATFORM=arm-linux-gnueabi- +# +# OR (ArmCC/Keil) +# make CC=ArmCC AR=ArmAR +# +# OR (IAR-ARM) +# make CC=iccarm + +# +# External sources from libService +# +SERVLIB_DIR := ../libService +override CFLAGS += -I$(SERVLIB_DIR)/libService/ +#override CFLAGS += -I$(SERVLIB_DIR)/libService/platform/ + +NSDLC_DIR := ../nsdl-c +override CFLAGS += -I$(NSDLC_DIR)/nsdl-c + +EVENTLOOP_DIR := ../event-loop +override CFLAGS += -I$(EVENTLOOP_DIR)/nanostack-event-loop/ +#override CFLAGS += -I$(EVENTLOOP_DIR)/event-loop/ + +#override CFLAGS += -I../libService/libService/ +#override CFLAGS += -I../nsdl-c/nsdl-c/ +#override CFLAGS += -I../event-loop/nanostack-event-loop/ + +LIB = libcoap-service.a + +SRCS := \ + source/coap_service.c \ + source/coap_server.c \ + coap-service-nanomesh/coap_server_impl.c \ + +override CFLAGS += -DVERSION='"$(VERSION)"' + + + +COAPSERVICE_DIR := ../coap-service +override CFLAGS += -I$(COAPSERVICE_DIR)/coap-service/ +override CFLAGS += -I$(COAPSERVICE_DIR)/source/include/ + +#override CFLAGS += -Isource/coap-service/source/include/ +#override CFLAGS += -Icoap-service-nanomesh/include/ + + +include ../libService/toolchain_rules.mk + +$(eval $(call generate_rules,$(LIB),$(SRCS))) + +.PHONY: release +release: + 7z a coap-service_$(VERSION).zip *.a *.lib include diff --git a/coap-service-linux/coap_server_impl.c b/coap-service-linux/coap_server_impl.c new file mode 100644 index 0000000000..e69de29bb2 diff --git a/coap-service-mbed/coap_server_impl.c b/coap-service-mbed/coap_server_impl.c new file mode 100644 index 0000000000..e69de29bb2 diff --git a/coap-service-nanomesh/coap_server_impl.c b/coap-service-nanomesh/coap_server_impl.c new file mode 100644 index 0000000000..747edfa9d5 --- /dev/null +++ b/coap-service-nanomesh/coap_server_impl.c @@ -0,0 +1,76 @@ +#include +#include "ns_types.h" +#include "eventOS_event.h" +#include "eventOS_scheduler.h" +#include "eventOS_event_timer.h" +#include "nsdynmemLIB.h" +#include "ns_list.h" +#include "coap_server_impl.h" + +#define COAP_SERVER_SERVICE_TASKLET_INIT 1 +#define COAP_SERVER_SERVICE_TIMER 2 +#define COAP_SERVER_SERVICE_TIMER_ID 1 +#define COAP_TIMER_UPDATE_PERIOD_IN_SECONDS 10 + +static int8_t coap_service_tasklet = -1; + +void coap_server_service_tasklet(arm_event_s * event); + +int8_t coap_server_start(void) +{ + int8_t ret_val = -1; + + ret_val = coap_server_service_tasklet_generated(); + + return ret_val; +} + + +static int8_t coap_server_service_tasklet_generated(void) +{ + if(coap_service_tasklet == -1) + { + //coap_service_tasklet = eventOS_event_handler_create(&coap_server_service_tasklet,COAP_SERVER_SERVICE_TASKLET_INIT); + } + + return coap_service_tasklet; +} + +void coap_server_service_tasklet(arm_event_s * event) +{ + + if(event->event_type == COAP_SERVER_SERVICE_TASKLET_INIT) + { + //We should define periodically timer service!! + //eventOS_event_timer_request(COAP_SERVER_SERVICE_TIMER_ID, COAP_SERVER_SERVICE_TIMER,coap_service_tasklet, (COAP_TIMER_UPDATE_PERIOD_IN_SECONDS *1000)); + } + else if(event->event_type == COAP_SERVER_SERVICE_TIMER) + { + //eventOS_event_timer_request(COAP_SERVER_SERVICE_TIMER_ID, COAP_SERVER_SERVICE_TIMER,coap_service_tasklet, (COAP_TIMER_UPDATE_PERIOD_IN_SECONDS *1000)); + } + +} + +uint16_t socket_open(uint16_t listen_port, coap_service_request_recv_cb *requst_recv_cb) +{ + + return 0; +} + +void *memory_allocation(uint16_t size) +{ + + + if(size) + return malloc(size); + else + return 0; +} + +void memory_free(void* ptr) +{ + + if(ptr) + free(ptr); + +} diff --git a/coap-service/coap_service_api.h b/coap-service/coap_service_api.h index ca00c0a53f..10595b2a34 100755 --- a/coap-service/coap_service_api.h +++ b/coap-service/coap_service_api.h @@ -13,8 +13,8 @@ extern "C" { #include -#include -#include +#include "ns_types.h" +#include "sn_coap_header.h" /** * This interface is used in sending and receiving of CoAP messages to multicast address and receive multiple responses. @@ -50,7 +50,7 @@ extern "C" { * \param listen_port Port that Application wants to use for communicate with coap server. * \param service_options Options of the current service. * - * \return service_id + * \return service_id / -1 for failure */ int8_t coap_service_initialize(int8_t interface_id, uint16_t listen_port, uint8_t service_options); @@ -75,7 +75,7 @@ void coap_service_delete( int8_t service_id ); * * \return Status */ -typedef int (*coap_service_request_recv_cb)(int8_t service_id, uint8_t source_address[static 16], uint16_t source_port, sn_coap_hdr_s *request_ptr); +typedef int coap_service_request_recv_cb(int8_t service_id, uint8_t source_address[static 16], uint16_t source_port, sn_coap_hdr_s *request_ptr); /** * \brief Security service start callback @@ -85,9 +85,9 @@ typedef int (*coap_service_request_recv_cb)(int8_t service_id, uint8_t source_ad * \param service_id Id number of the current service. * \param EUI64 64 bit global identifier * - * \return Status + * \return 0 for success / -1 for failure */ -typedef int (*coap_service_security_start_cb)(int8_t service_id, uint8_t EUI64[static 8]); +typedef int coap_service_security_start_cb(int8_t service_id, uint8_t EUI64[static 8]); /** * \brief CoAP service security done callback @@ -98,9 +98,9 @@ typedef int (*coap_service_security_start_cb)(int8_t service_id, uint8_t EUI64[s * \param EUI64 64 bit global identifier * \param keyblock Security key (40 bits) * - * \return Status + * \return 0 for success / -1 for failure */ -typedef int (*coap_service_security_done_cb)(int8_t service_id, uint8_t EUI64[static 8], uint8_t keyblock[static 40]); +typedef int coap_service_security_done_cb(int8_t service_id, uint8_t EUI64[static 8], uint8_t keyblock[static 40]); /** @@ -112,7 +112,7 @@ typedef int (*coap_service_security_done_cb)(int8_t service_id, uint8_t EUI64[st * \param PSKd_ptr Pointer to PSK key. * \param PSKd_len Lenght of PSK key. * - * \return Status + * \return 0 for success / -1 for failure */ int coap_service_security_key_set(int8_t service_id, uint8_t EUI64[static 8], uint8_t *PSKd_ptr, uint8_t PSKd_len); @@ -124,9 +124,9 @@ int coap_service_security_key_set(int8_t service_id, uint8_t EUI64[static 8], ui * \param msg_id Id number of the current message. * \param response_ptr Pointer to CoAP header structure. * - * \return Status + * \return 0 for success / -1 for failure */ -typedef int (*coap_service_response_recv)(uint16_t msg_id, sn_coap_hdr_s *response_ptr); +typedef int coap_service_response_recv(int8_t service_id, uint16_t msg_id, sn_coap_hdr_s *response_ptr); /** * \brief Virtual socket sent callback. @@ -139,9 +139,9 @@ typedef int (*coap_service_response_recv)(uint16_t msg_id, sn_coap_hdr_s *respon * \param *data_ptr Pointer to the data. * \param data_len Lenght of the data. * - * \return Status + * \return 0 for success / -1 for failure */ -typedef int (*coap_service_virtual_socket_send_cb)(int8_t service_id, uint8_t destination_addr_ptr[static 16], uint16_t port, uint8_t *data_ptr, uint16_t data_len); +typedef int coap_service_virtual_socket_send_cb(int8_t service_id, uint8_t destination_addr_ptr[static 16], uint16_t port, uint8_t *data_ptr, uint16_t data_len); /** * \brief Virtual socket read. @@ -154,7 +154,7 @@ typedef int (*coap_service_virtual_socket_send_cb)(int8_t service_id, uint8_t de * \param *data_ptr Pointer to the data * \param data_len Lenght of the data * - * \return ? + * \return 0 for success / -1 for failure */ int16_t coap_service_virtual_socket_recv(int8_t service_id, uint8_t source_addr_ptr[static 16], uint16_t port, uint8_t *data_ptr, uint16_t data_len); @@ -166,7 +166,7 @@ int16_t coap_service_virtual_socket_recv(int8_t service_id, uint8_t source_addr_ * \param service_id Id number of the current service. * \param *send_method_ptr Callback to coap virtual socket. * - * \return TODO + * \return 0 for success / -1 for failure */ int16_t coap_service_virtual_socket_set_cb(int8_t service_id, coap_service_virtual_socket_send_cb *send_method_ptr); @@ -176,15 +176,29 @@ int16_t coap_service_virtual_socket_set_cb(int8_t service_id, coap_service_virtu * Register application and informs CoAP services unsecure registery callback function. * * \param service_id Id number of the current service. - * \param *uri Pointer to uri. + * \param *uri_ptr Pointer to uri. * \param uri_len Length of uri. * \param port port that Application wants to use for communicate with coap server. * \param allowed_method Informs method that is allowed to use (used defines described above). * \param *request_recv_cb CoAP service request receive callback function pointer. * - * \return TODO + * \return 0 for success / -1 for failure */ -int16_t coap_service_register_uri(int8_t service_id, uint16_t *uri, uint16_t uri_len, uint16_t port, uint8_t allowed_method, coap_service_request_recv_cb *request_recv_cb); +int8_t coap_service_register_uri(int8_t service_id, uint8_t *uri_ptr, uint16_t uri_len, uint8_t allowed_method, coap_service_request_recv_cb *request_recv_cb); + +/** + * \brief Unregister unsecure callback methods to CoAP server + * + * Register application and informs CoAP services unsecure registery callback function. + * + * \param service_id Id number of the current service. + * \param *uri_ptr Pointer to uri. + * \param uri_len Length of uri. + * + * \return 0 for success / -1 for failure + */ +int8_t coap_service_unregister_uri(int8_t service_id, uint8_t *uri_ptr, uint16_t uri_len); + /** * \brief Register secure callback methods to CoAP server. @@ -195,16 +209,16 @@ int16_t coap_service_register_uri(int8_t service_id, uint16_t *uri, uint16_t uri * \param *start_ptr Callback to inform security handling is started. * \param *security_done_cb Callback to inform security handling is done. * - * \return TODO + * \return -1 for failure + * instance_id For success (is used to identify registery) * - * instance id that is used to identify registery. */ -int16_t coap_service_register_uri_secure_cb_set(int8_t service_id, coap_service_security_start_cb *start_ptr, coap_service_security_done_cb *security_done_cb); +int8_t coap_service_register_uri_secure_cb_set(int8_t service_id, coap_service_security_start_cb *start_ptr, coap_service_security_done_cb *security_done_cb); /** - * \brief Sends CoAP service request + * \brief Sends CoAP service * - * Build and sends CoAP service request message. + * Build and sends CoAP service message. * * \param service_id Id number of the current service. * \param options Options defined above. @@ -215,7 +229,30 @@ int16_t coap_service_register_uri_secure_cb_set(int8_t service_id, coap_service_ * * \return msg_id Id number of the current message. */ -uint16_t coap_service_request_send(int8_t service_id, uint8_t options, uint8_t addr[static 16], uint16_t destination_port, sn_coap_hdr_s *request_ptr, coap_service_response_recv *request_response_cb); +uint16_t coap_service_send(int8_t service_id, uint8_t options, uint8_t addr[static 16], uint16_t destination_port, sn_coap_hdr_s *request_ptr, coap_service_response_recv *request_response_cb); + +/** + * \brief Sends CoAP service request + * + * Build and sends CoAP service request message. + * + * \param service_id Id number of the current service. + * \param options Options defined above. + * \param destination_addr IPv6 address. + * \param destination_port Destination port + * \param msg_type Message type can be found from sn_coap_header. + * \param msg_code Message code can be found from sn_coap_header. + * \param *uri_ptr Pointer to uri. + * \param uri_len Length of uri. + * \param cont_type Content type can be found from sn_coap_header. + * \param payload_ptr Pointer to message content. + * \param payload_len Lenght of the message. + * \param *request_response_cb Callback to inform result of the request. + * + * \return msg_id Id number of the current message. + */ +uint16_t coap_service_request_send(int8_t service_id, uint8_t options, uint8_t destination_addr[static 16], uint16_t destination_port, uint8_t msg_type, uint8_t msg_code, uint8_t *uri_ptr, uint16_t uri_len, + uint8_t cont_type, uint8_t *payload_ptr, uint16_t payload_len, coap_service_response_recv *request_response_cb); /** * \brief Sends CoAP service response @@ -227,7 +264,8 @@ uint16_t coap_service_request_send(int8_t service_id, uint8_t options, uint8_t a * \param options Options defined above. * \param response_ptr Pointer to CoAP header structure. * - * \return TODO + * \return -1 For failure + *- 0 For success */ int8_t coap_service_response_send(int8_t service_id, uint8_t options, sn_coap_hdr_s *request_ptr, sn_coap_msg_code_e message_code, int32_t content_type,uint8_t * payload_ptr,uint16_t payload_len); diff --git a/source/coap_server.c b/source/coap_server.c new file mode 100644 index 0000000000..9bc469b70e --- /dev/null +++ b/source/coap_server.c @@ -0,0 +1,113 @@ +/* + * Copyright (c) 2015 ARM. All rights reserved. + */ + +//#include "include/coap_service_api.h" +#include "ns_types.h" +#include "ns_list.h" +#include "coap_server.h" +#include "coap_server_impl.h" + + +typedef NS_LIST_HEAD(coap_service_session_t, link) instance_list_t; +instance_list_t NS_LIST_NAME_INIT(instance_list); + +//typedef struct sn_coap_hdr_s sn_coap_hdr_s; + +/* Coap service class handlers*/ + +//void *memory_allocation(uint16_t size); + +//void memory_free(void* ptr); + +void coap_server_delete_session(int8_t service_id) +{ + + coap_service_session_t *this = coap_service_find_by_service(service_id); + + if(this) + { + + ns_list_remove(&instance_list,this); + memory_free(this); + + } + +} + +static coap_service_session_t *coap_service_search_from_list(int8_t interface_id) +{ + coap_service_session_t *this = NULL; + + /* + ns_list_foreach(coap_service_session_t,cur_ptr, &instance_list) + { + if(cur_ptr->interface_id == interface_id) + { + this = cur_ptr; + break; + } + } + */ + return this; +} + + +static coap_service_session_t *coap_service_find_by_service(int8_t service_id) +{ + coap_service_session_t *this = NULL; + /* + ns_list_foreach(coap_service_session_t,cur_ptr, &instance_list) + { + if(cur_ptr->coap_service_id == service_id) + { + this = cur_ptr; + break; + } + } + */ + return this; +} + + +/* Initialize CoAP server. + * + * TODO + * + * /param interface interface id of this instance. + * + */ +int8_t coap_server_service_init(int8_t interface_id, uint16_t listen_port, uint8_t service_options) +{ + int retVal = -1; + int8_t socketInstance; + + //allocate Socket Service + socketInstance = coap_server_start(); + + if(socketInstance < 0) + retVal = -2; + else + { + + coap_service_session_t *this = memory_allocation(sizeof(coap_service_session_t)); + if(this) + { + this->interface_id = interface_id; +// this->set_response_cb_ptr = NULL; +// ns_list_add_to_start(&instance_list, this); + retVal = 1; + } + return retVal; + + //allocate server + + } + if(socketInstance > 0) + { + //coap_service_delete(socketInstance); + } + return retVal; +} + + diff --git a/source/coap_service.c b/source/coap_service.c new file mode 100644 index 0000000000..6d7c49473a --- /dev/null +++ b/source/coap_service.c @@ -0,0 +1,107 @@ +/* + * Copyright (c) 2015 ARM. All rights reserved. + */ + +/* + * \file coap_service.c + * \brief Add short description about this file!!! + * + */ + +#include +#include +#include "ns_list.h" +#include "sn_coap_header.h" +#include "coap_service_api.h" +#include "coap_server.h" + +#include + +int8_t coap_service_initialize(int8_t interface_id, uint16_t listen_port, uint8_t service_options) +{ + int8_t retVal = -1; + + retVal = coap_server_service_init(interface_id, listen_port, service_options); + + return retVal; +} + +int8_t coap_service_register_uri(int8_t service_id, uint8_t *uri_ptr, uint16_t uri_len, uint8_t allowed_method, coap_service_request_recv_cb *request_recv_cb) +{ + return -1; +} + +int8_t coap_service_unregister_uri(int8_t service_id, uint8_t *uri_ptr, uint16_t uri_len) +{ + return -1; +} + +uint16_t coap_service_send(int8_t service_id, uint8_t options, uint8_t addr[static 16], uint16_t destination_port, sn_coap_hdr_s *request_ptr, coap_service_response_recv *request_response_cb) +{ + return -1; +} + +void coap_service_delete( int8_t service_id ) +{ + +} + +int requst_recv_cb(int8_t service_id, uint8_t source_address[static 16], uint16_t source_port, sn_coap_hdr_s *request_ptr) +{ + return -1; +} + + +int security_start_ptr(int8_t service_id, uint8_t EUI64[static 8]) +{ + return -1; +} + +int security_done_cb(int8_t service_id, uint8_t EUI64[static 8], uint8_t keyblock[static 40]) +{ + return -1; +} + +int coap_service_security_key_set(int8_t service_id, uint8_t EUI64[static 8], uint8_t *PSKd_ptr, uint8_t PSKd_len) +{ + + return -1; +} + +int requst_response_cb(uint16_t msg_id, sn_coap_hdr_s *response_ptr) +{ + + return -1; +} + +int virtual_socket_send(int8_t service_id, uint8_t destination_addr_ptr[static 16], uint16_t port, uint8_t *data_ptr, uint16_t data_len) +{ + return -1; +} + +int16_t coap_service_virtual_socket_recv(int8_t service_id, uint8_t source_addr_ptr[static 16], uint16_t port, uint8_t *data_ptr, uint16_t data_len) +{ + return -1; +} + +int16_t coap_service_virtual_socket_set_cb(int8_t service_id, coap_service_virtual_socket_send_cb *virtual_socket_send) +{ + + return -1; +} + +int8_t coap_service_register_uri_secure_cb_set(int8_t service_id, coap_service_security_start_cb *security_start_ptr, coap_service_security_done_cb *security_done_cb) +{ + return -1; +} + +uint16_t coap_service_request_send(int8_t service_id, uint8_t options, uint8_t destination_addr[static 16], uint16_t destination_port, uint8_t msg_type, uint8_t msg_code, uint8_t *uri_ptr, uint16_t uri_len, + uint8_t cont_type, uint8_t *payload_ptr, uint16_t payload_len, coap_service_response_recv *request_response_cb) +{ + return -1; +} + +int8_t coap_service_response_send(int8_t service_id, uint8_t options, sn_coap_hdr_s *request_ptr, sn_coap_msg_code_e message_code, int32_t content_type,uint8_t * payload_ptr,uint16_t payload_len) +{ + return -1; +} diff --git a/source/include/coap_server.h b/source/include/coap_server.h new file mode 100644 index 0000000000..3ee8ab54d7 --- /dev/null +++ b/source/include/coap_server.h @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2015 ARM. All rights reserved. + */ + +/* + * \file - + * \brief Add short description about this file!!! + * + */ + +#ifndef COAP_SERVER_H_ +#define COAP_SERVER_H_ + +/* Brief explain. + * + * Some explain + * + * /param param_name explain. + * + * /return TODO + */ + +#include "ns_list.h" + +typedef struct +{ + uint8_t remote_address[16]; +// management_set_response_cb *set_response_cb_ptr; +// management_get_response_cb *get_response_cb_ptr; + int8_t interface_id; + int8_t coap_service_id; + ns_list_link_t link; +} coap_service_session_t; + +void coap_server_delete_session(int8_t service_id); + +int8_t coap_server_service_init(int8_t interface_id, uint16_t listen_port, uint8_t service_options); + +static coap_service_session_t *coap_service_search_from_list(int8_t interface_id); + +static coap_service_session_t *coap_service_find_by_service(int8_t service_id); + + +#endif /* COAP_SERVER_H_ */ From 5f0d7c3d7d679ebcb9ea7e60c91f557bfdc377a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Erno=20T=C3=B6rmikoski?= Date: Wed, 3 Jun 2015 11:03:28 +0300 Subject: [PATCH 004/154] Compiling fixies for coap server code Change-Id: I7a8fa75c49f3c31d4db2d7c4d05830a678de7a2d --- source/coap_server.c | 11 ++++------- source/coap_service.c | 4 ++-- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/source/coap_server.c b/source/coap_server.c index 9bc469b70e..dfbc10d963 100644 --- a/source/coap_server.c +++ b/source/coap_server.c @@ -16,10 +16,6 @@ instance_list_t NS_LIST_NAME_INIT(instance_list); /* Coap service class handlers*/ -//void *memory_allocation(uint16_t size); - -//void memory_free(void* ptr); - void coap_server_delete_session(int8_t service_id) { @@ -28,7 +24,7 @@ void coap_server_delete_session(int8_t service_id) if(this) { - ns_list_remove(&instance_list,this); + //ns_list_remove(&instance_list,this); memory_free(this); } @@ -39,7 +35,7 @@ static coap_service_session_t *coap_service_search_from_list(int8_t interface_id { coap_service_session_t *this = NULL; - /* + /* ns_list_foreach(coap_service_session_t,cur_ptr, &instance_list) { if(cur_ptr->interface_id == interface_id) @@ -48,7 +44,8 @@ static coap_service_session_t *coap_service_search_from_list(int8_t interface_id break; } } - */ + */ + return this; } diff --git a/source/coap_service.c b/source/coap_service.c index 6d7c49473a..6534cc44d7 100644 --- a/source/coap_service.c +++ b/source/coap_service.c @@ -38,7 +38,7 @@ int8_t coap_service_unregister_uri(int8_t service_id, uint8_t *uri_ptr, uint16_t uint16_t coap_service_send(int8_t service_id, uint8_t options, uint8_t addr[static 16], uint16_t destination_port, sn_coap_hdr_s *request_ptr, coap_service_response_recv *request_response_cb) { - return -1; + return 0; } void coap_service_delete( int8_t service_id ) @@ -98,7 +98,7 @@ int8_t coap_service_register_uri_secure_cb_set(int8_t service_id, coap_service_s uint16_t coap_service_request_send(int8_t service_id, uint8_t options, uint8_t destination_addr[static 16], uint16_t destination_port, uint8_t msg_type, uint8_t msg_code, uint8_t *uri_ptr, uint16_t uri_len, uint8_t cont_type, uint8_t *payload_ptr, uint16_t payload_len, coap_service_response_recv *request_response_cb) { - return -1; + return 0; } int8_t coap_service_response_send(int8_t service_id, uint8_t options, sn_coap_hdr_s *request_ptr, sn_coap_msg_code_e message_code, int32_t content_type,uint8_t * payload_ptr,uint16_t payload_len) From c191fdea9d2e40399394d9e4ff8c46e02b00642c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Erno=20T=C3=B6rmikoski?= Date: Wed, 3 Jun 2015 14:45:45 +0300 Subject: [PATCH 005/154] Platform debend implementation file Change-Id: If72db0475395442041a3cf626269363a40806c5b --- source/include/coap_server_impl.h | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 source/include/coap_server_impl.h diff --git a/source/include/coap_server_impl.h b/source/include/coap_server_impl.h new file mode 100644 index 0000000000..707171fd48 --- /dev/null +++ b/source/include/coap_server_impl.h @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2015 ARM. All rights reserved. + */ + +/* + * \file - + * \brief Platform specifig implementation file + * + */ + +#ifndef COAP_SERVER_IMPL_H_ +#define COAP_SERVER_IMPL_H_ + +#include "ns_types.h" +#include "eventOS_event.h" +#include "coap_service_api.h" + +int8_t coap_server_start(void); + +void *memory_allocation(uint16_t size); + +void memory_free(void* ptr); + +static int8_t coap_server_service_tasklet_generated(void); + +void coap_server_service_tasklet(arm_event_s * event); + +uint16_t socket_open(uint16_t listen_port, coap_service_request_recv_cb *requst_recv_cb); + +#endif /* COAP_SERVER_IMPL_H_ */ From 5f8998ce2e626f2022d182f421ad295b2e21fa8f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Erno=20T=C3=B6rmikoski?= Date: Wed, 3 Jun 2015 16:52:24 +0300 Subject: [PATCH 006/154] modifications to make yotta work Change-Id: Iff0f837140af1a4c0f8eaa212e7761e52617bf42 --- LICENSE.txt | 10 ++++++++ coap-service-nanomesh/coap_server_impl.c | 14 ++++++++---- module.json | 29 ++++++++++++++++++++++++ source/coap_server.c | 22 ++++++++++-------- 4 files changed, 62 insertions(+), 13 deletions(-) create mode 100644 LICENSE.txt create mode 100644 module.json diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 0000000000..accdf8b846 --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,10 @@ +Copyright 2014. ARM Ltd. All rights reserved. + +Use of this software is restricted by the terms of ARM's limited use license or permitted +sublicense (the "License"). You may not use this software unless you have been expressly granted +the right to use it under the License, and in such case you must use this file in compliance with +the License. + +Unless otherwise expressly provided in the License, this software is provided on an "AS IS" +BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, and may be +revoked at any time. \ No newline at end of file diff --git a/coap-service-nanomesh/coap_server_impl.c b/coap-service-nanomesh/coap_server_impl.c index 747edfa9d5..56217b134e 100644 --- a/coap-service-nanomesh/coap_server_impl.c +++ b/coap-service-nanomesh/coap_server_impl.c @@ -1,8 +1,8 @@ #include #include "ns_types.h" -#include "eventOS_event.h" -#include "eventOS_scheduler.h" -#include "eventOS_event_timer.h" +//#include "eventOS_event.h" +//#include "eventOS_scheduler.h" +//#include "eventOS_event_timer.h" #include "nsdynmemLIB.h" #include "ns_list.h" #include "coap_server_impl.h" @@ -28,12 +28,18 @@ int8_t coap_server_start(void) static int8_t coap_server_service_tasklet_generated(void) { + int8_t ret_val; + if(coap_service_tasklet == -1) { //coap_service_tasklet = eventOS_event_handler_create(&coap_server_service_tasklet,COAP_SERVER_SERVICE_TASKLET_INIT); + ret_val = coap_service_tasklet; } - return coap_service_tasklet; + // for unit testing now setted to 1; + ret_val = 1; + + return ret_val; } void coap_server_service_tasklet(arm_event_s * event) diff --git a/module.json b/module.json new file mode 100644 index 0000000000..b6cf87359b --- /dev/null +++ b/module.json @@ -0,0 +1,29 @@ +{ + "name": "coap-service", + "version": "0.0.1", + "description": "CoAP Service library", + "keywords": [ + "coap", + "service" + ], + "author": "Erno Tormikoski ", + "repository": { + "url": "ssh://git.oulu.arm.com/home/git/repositories/nanomesh/coap-service.git", + "type": "git" + }, + "homepage": "http://git.oulu.arm.com/gitweb/?p=nanomesh/coap-service.git;a=summary", + "license": "Proprietary, all rights reserved.", + "extraIncludes": [ + "coap-service", + "nanostack-event-loop", + "source/include" + ], + "dependencies": { + "mbed": "~3.0.1", + "mbed-client-libservice": "~2.0.9", + "mbed-client": "~0.1.3", + "mbed-6lowpan-eventloop": "~0.0.8", + "mbed-6lowpan": "~0.0.9" + }, + "targetDependencies": {} +} \ No newline at end of file diff --git a/source/coap_server.c b/source/coap_server.c index dfbc10d963..8f0a256a62 100644 --- a/source/coap_server.c +++ b/source/coap_server.c @@ -5,12 +5,11 @@ //#include "include/coap_service_api.h" #include "ns_types.h" #include "ns_list.h" -#include "coap_server.h" #include "coap_server_impl.h" +#include "./include/coap_server.h" - -typedef NS_LIST_HEAD(coap_service_session_t, link) instance_list_t; -instance_list_t NS_LIST_NAME_INIT(instance_list); +//typedef NS_LIST_HEAD(coap_service_session_t, link) instance_list_t; +//instance_list_t NS_LIST_NAME_INIT(instance_list); //typedef struct sn_coap_hdr_s sn_coap_hdr_s; @@ -35,7 +34,7 @@ static coap_service_session_t *coap_service_search_from_list(int8_t interface_id { coap_service_session_t *this = NULL; - /* + /* ns_list_foreach(coap_service_session_t,cur_ptr, &instance_list) { if(cur_ptr->interface_id == interface_id) @@ -53,7 +52,8 @@ static coap_service_session_t *coap_service_search_from_list(int8_t interface_id static coap_service_session_t *coap_service_find_by_service(int8_t service_id) { coap_service_session_t *this = NULL; - /* + + /* ns_list_foreach(coap_service_session_t,cur_ptr, &instance_list) { if(cur_ptr->coap_service_id == service_id) @@ -62,7 +62,8 @@ static coap_service_session_t *coap_service_find_by_service(int8_t service_id) break; } } - */ + */ + return this; } @@ -79,6 +80,9 @@ int8_t coap_server_service_init(int8_t interface_id, uint16_t listen_port, uint8 int retVal = -1; int8_t socketInstance; + // Initialize linked list + //ns_list_init_(instance_list); + //allocate Socket Service socketInstance = coap_server_start(); @@ -92,7 +96,7 @@ int8_t coap_server_service_init(int8_t interface_id, uint16_t listen_port, uint8 { this->interface_id = interface_id; // this->set_response_cb_ptr = NULL; -// ns_list_add_to_start(&instance_list, this); + //ns_list_add_to_start(&instance_list, this); retVal = 1; } return retVal; @@ -102,7 +106,7 @@ int8_t coap_server_service_init(int8_t interface_id, uint16_t listen_port, uint8 } if(socketInstance > 0) { - //coap_service_delete(socketInstance); + coap_service_delete(socketInstance); } return retVal; } From 2483d81677db153440433e06ef44b52f79fb1ccd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Erno=20T=C3=B6rmikoski?= Date: Thu, 4 Jun 2015 09:32:41 +0300 Subject: [PATCH 007/154] uri changes: uint_8_t pointer changed to char * Change-Id: I8f71a919e410e7b2883d3405da30f0ac60097115 --- coap-service/coap_service_api.h | 17 +++++++---------- source/coap_service.c | 6 +++--- 2 files changed, 10 insertions(+), 13 deletions(-) diff --git a/coap-service/coap_service_api.h b/coap-service/coap_service_api.h index 10595b2a34..a4490ef93d 100755 --- a/coap-service/coap_service_api.h +++ b/coap-service/coap_service_api.h @@ -176,15 +176,14 @@ int16_t coap_service_virtual_socket_set_cb(int8_t service_id, coap_service_virtu * Register application and informs CoAP services unsecure registery callback function. * * \param service_id Id number of the current service. - * \param *uri_ptr Pointer to uri. - * \param uri_len Length of uri. + * \param *uri Uri address. * \param port port that Application wants to use for communicate with coap server. * \param allowed_method Informs method that is allowed to use (used defines described above). - * \param *request_recv_cb CoAP service request receive callback function pointer. + * \param *request_recv_cb CoAP service request receive callback function pointer. * * \return 0 for success / -1 for failure */ -int8_t coap_service_register_uri(int8_t service_id, uint8_t *uri_ptr, uint16_t uri_len, uint8_t allowed_method, coap_service_request_recv_cb *request_recv_cb); +int8_t coap_service_register_uri(int8_t service_id, char *uri, uint8_t allowed_method, coap_service_request_recv_cb *request_recv_cb); /** * \brief Unregister unsecure callback methods to CoAP server @@ -192,12 +191,11 @@ int8_t coap_service_register_uri(int8_t service_id, uint8_t *uri_ptr, uint16_t u * Register application and informs CoAP services unsecure registery callback function. * * \param service_id Id number of the current service. - * \param *uri_ptr Pointer to uri. - * \param uri_len Length of uri. + * \param *uri Uri address. * * \return 0 for success / -1 for failure */ -int8_t coap_service_unregister_uri(int8_t service_id, uint8_t *uri_ptr, uint16_t uri_len); +int8_t coap_service_unregister_uri(int8_t service_id, char *uri); /** @@ -242,8 +240,7 @@ uint16_t coap_service_send(int8_t service_id, uint8_t options, uint8_t addr[stat * \param destination_port Destination port * \param msg_type Message type can be found from sn_coap_header. * \param msg_code Message code can be found from sn_coap_header. - * \param *uri_ptr Pointer to uri. - * \param uri_len Length of uri. + * \param *uri Uri address. * \param cont_type Content type can be found from sn_coap_header. * \param payload_ptr Pointer to message content. * \param payload_len Lenght of the message. @@ -251,7 +248,7 @@ uint16_t coap_service_send(int8_t service_id, uint8_t options, uint8_t addr[stat * * \return msg_id Id number of the current message. */ -uint16_t coap_service_request_send(int8_t service_id, uint8_t options, uint8_t destination_addr[static 16], uint16_t destination_port, uint8_t msg_type, uint8_t msg_code, uint8_t *uri_ptr, uint16_t uri_len, +uint16_t coap_service_request_send(int8_t service_id, uint8_t options, uint8_t destination_addr[static 16], uint16_t destination_port, uint8_t msg_type, uint8_t msg_code, char *uri, uint8_t cont_type, uint8_t *payload_ptr, uint16_t payload_len, coap_service_response_recv *request_response_cb); /** diff --git a/source/coap_service.c b/source/coap_service.c index 6534cc44d7..bc0042aebb 100644 --- a/source/coap_service.c +++ b/source/coap_service.c @@ -26,12 +26,12 @@ int8_t coap_service_initialize(int8_t interface_id, uint16_t listen_port, uint8_ return retVal; } -int8_t coap_service_register_uri(int8_t service_id, uint8_t *uri_ptr, uint16_t uri_len, uint8_t allowed_method, coap_service_request_recv_cb *request_recv_cb) +int8_t coap_service_register_uri(int8_t service_id, char *uri, uint8_t allowed_method, coap_service_request_recv_cb *request_recv_cb) { return -1; } -int8_t coap_service_unregister_uri(int8_t service_id, uint8_t *uri_ptr, uint16_t uri_len) +int8_t coap_service_unregister_uri(int8_t service_id, char *uri) { return -1; } @@ -95,7 +95,7 @@ int8_t coap_service_register_uri_secure_cb_set(int8_t service_id, coap_service_s return -1; } -uint16_t coap_service_request_send(int8_t service_id, uint8_t options, uint8_t destination_addr[static 16], uint16_t destination_port, uint8_t msg_type, uint8_t msg_code, uint8_t *uri_ptr, uint16_t uri_len, +uint16_t coap_service_request_send(int8_t service_id, uint8_t options, uint8_t destination_addr[static 16], uint16_t destination_port, uint8_t msg_type, uint8_t msg_code, char *uri, uint8_t cont_type, uint8_t *payload_ptr, uint16_t payload_len, coap_service_response_recv *request_response_cb) { return 0; From 131f44be1d3c98a4e74a786dfbb4a801057efbf0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Erno=20T=C3=B6rmikoski?= Date: Thu, 4 Jun 2015 11:57:30 +0300 Subject: [PATCH 008/154] version v0.0.2 Change-Id: I39ed1a81652d1d6951e19fa63f3fe89e641ca2af --- module.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/module.json b/module.json index b6cf87359b..c14caeaf57 100644 --- a/module.json +++ b/module.json @@ -1,6 +1,6 @@ { "name": "coap-service", - "version": "0.0.1", + "version": "0.0.2", "description": "CoAP Service library", "keywords": [ "coap", @@ -14,9 +14,9 @@ "homepage": "http://git.oulu.arm.com/gitweb/?p=nanomesh/coap-service.git;a=summary", "license": "Proprietary, all rights reserved.", "extraIncludes": [ - "coap-service", - "nanostack-event-loop", - "source/include" + "coap-service", + "nanostack-event-loop", + "source/include" ], "dependencies": { "mbed": "~3.0.1", From 55b4e6d770e690aae1b99696a00d539e9d4bc71c Mon Sep 17 00:00:00 2001 From: Kevin Bracey Date: Fri, 5 Jun 2015 12:57:19 +0300 Subject: [PATCH 009/154] Add some consts to the API Change-Id: I5d74ba7adbe44dd07eebd7f0052a43e72c1b4e73 --- coap-service/coap_service_api.h | 12 ++++++------ source/coap_service.c | 12 ++++++------ 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/coap-service/coap_service_api.h b/coap-service/coap_service_api.h index a4490ef93d..7d3b483f64 100755 --- a/coap-service/coap_service_api.h +++ b/coap-service/coap_service_api.h @@ -183,7 +183,7 @@ int16_t coap_service_virtual_socket_set_cb(int8_t service_id, coap_service_virtu * * \return 0 for success / -1 for failure */ -int8_t coap_service_register_uri(int8_t service_id, char *uri, uint8_t allowed_method, coap_service_request_recv_cb *request_recv_cb); +int8_t coap_service_register_uri(int8_t service_id, const char *uri, uint8_t allowed_method, coap_service_request_recv_cb *request_recv_cb); /** * \brief Unregister unsecure callback methods to CoAP server @@ -195,7 +195,7 @@ int8_t coap_service_register_uri(int8_t service_id, char *uri, uint8_t allowed_m * * \return 0 for success / -1 for failure */ -int8_t coap_service_unregister_uri(int8_t service_id, char *uri); +int8_t coap_service_unregister_uri(int8_t service_id, const char *uri); /** @@ -227,7 +227,7 @@ int8_t coap_service_register_uri_secure_cb_set(int8_t service_id, coap_service_s * * \return msg_id Id number of the current message. */ -uint16_t coap_service_send(int8_t service_id, uint8_t options, uint8_t addr[static 16], uint16_t destination_port, sn_coap_hdr_s *request_ptr, coap_service_response_recv *request_response_cb); +uint16_t coap_service_send(int8_t service_id, uint8_t options, const uint8_t addr[static 16], uint16_t destination_port, sn_coap_hdr_s *request_ptr, coap_service_response_recv *request_response_cb); /** * \brief Sends CoAP service request @@ -248,8 +248,8 @@ uint16_t coap_service_send(int8_t service_id, uint8_t options, uint8_t addr[stat * * \return msg_id Id number of the current message. */ -uint16_t coap_service_request_send(int8_t service_id, uint8_t options, uint8_t destination_addr[static 16], uint16_t destination_port, uint8_t msg_type, uint8_t msg_code, char *uri, - uint8_t cont_type, uint8_t *payload_ptr, uint16_t payload_len, coap_service_response_recv *request_response_cb); +uint16_t coap_service_request_send(int8_t service_id, uint8_t options, const uint8_t destination_addr[static 16], uint16_t destination_port, uint8_t msg_type, uint8_t msg_code, const char *uri, + uint8_t cont_type, const uint8_t *payload_ptr, uint16_t payload_len, coap_service_response_recv *request_response_cb); /** * \brief Sends CoAP service response @@ -264,7 +264,7 @@ uint16_t coap_service_request_send(int8_t service_id, uint8_t options, uint8_t d * \return -1 For failure *- 0 For success */ -int8_t coap_service_response_send(int8_t service_id, uint8_t options, sn_coap_hdr_s *request_ptr, sn_coap_msg_code_e message_code, int32_t content_type,uint8_t * payload_ptr,uint16_t payload_len); +int8_t coap_service_response_send(int8_t service_id, uint8_t options, sn_coap_hdr_s *request_ptr, sn_coap_msg_code_e message_code, int32_t content_type, const uint8_t *payload_ptr,uint16_t payload_len); #ifdef __cplusplus } diff --git a/source/coap_service.c b/source/coap_service.c index bc0042aebb..370a4f7299 100644 --- a/source/coap_service.c +++ b/source/coap_service.c @@ -26,17 +26,17 @@ int8_t coap_service_initialize(int8_t interface_id, uint16_t listen_port, uint8_ return retVal; } -int8_t coap_service_register_uri(int8_t service_id, char *uri, uint8_t allowed_method, coap_service_request_recv_cb *request_recv_cb) +int8_t coap_service_register_uri(int8_t service_id, const char *uri, uint8_t allowed_method, coap_service_request_recv_cb *request_recv_cb) { return -1; } -int8_t coap_service_unregister_uri(int8_t service_id, char *uri) +int8_t coap_service_unregister_uri(int8_t service_id, const char *uri) { return -1; } -uint16_t coap_service_send(int8_t service_id, uint8_t options, uint8_t addr[static 16], uint16_t destination_port, sn_coap_hdr_s *request_ptr, coap_service_response_recv *request_response_cb) +uint16_t coap_service_send(int8_t service_id, uint8_t options, const uint8_t addr[static 16], uint16_t destination_port, sn_coap_hdr_s *request_ptr, coap_service_response_recv *request_response_cb) { return 0; } @@ -95,13 +95,13 @@ int8_t coap_service_register_uri_secure_cb_set(int8_t service_id, coap_service_s return -1; } -uint16_t coap_service_request_send(int8_t service_id, uint8_t options, uint8_t destination_addr[static 16], uint16_t destination_port, uint8_t msg_type, uint8_t msg_code, char *uri, - uint8_t cont_type, uint8_t *payload_ptr, uint16_t payload_len, coap_service_response_recv *request_response_cb) +uint16_t coap_service_request_send(int8_t service_id, uint8_t options, const uint8_t destination_addr[static 16], uint16_t destination_port, uint8_t msg_type, uint8_t msg_code, const char *uri, + uint8_t cont_type, const uint8_t *payload_ptr, uint16_t payload_len, coap_service_response_recv *request_response_cb) { return 0; } -int8_t coap_service_response_send(int8_t service_id, uint8_t options, sn_coap_hdr_s *request_ptr, sn_coap_msg_code_e message_code, int32_t content_type,uint8_t * payload_ptr,uint16_t payload_len) +int8_t coap_service_response_send(int8_t service_id, uint8_t options, sn_coap_hdr_s *request_ptr, sn_coap_msg_code_e message_code, int32_t content_type, const uint8_t *payload_ptr,uint16_t payload_len) { return -1; } From af0262fa1eaa21fb78c97b760760aff51d52d13d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Erno=20T=C3=B6rmikoski?= Date: Wed, 10 Jun 2015 14:25:28 +0300 Subject: [PATCH 010/154] version v0.0.3 Change-Id: If6d936fad0764415dcbe28608a26cf31934a846a --- module.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module.json b/module.json index c14caeaf57..619560d732 100644 --- a/module.json +++ b/module.json @@ -1,6 +1,6 @@ { "name": "coap-service", - "version": "0.0.2", + "version": "0.0.3", "description": "CoAP Service library", "keywords": [ "coap", From 925491e6860f776b84126772335c2f1e3fd6bbaa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tero=20J=C3=A4=C3=A4sk=C3=B6?= Date: Tue, 30 Jun 2015 19:58:26 +0300 Subject: [PATCH 011/154] ONME-1333: coap-service: add deploy_to target needed for source delivery Add a makefile target needed for adding the library binary to given tar archive, which is used by Makefile.simulator. Change-Id: I700efaf51422664d0dde249d35e7228a327454b5 --- Makefile | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Makefile b/Makefile index 3081500f29..0707ee4a45 100644 --- a/Makefile +++ b/Makefile @@ -59,3 +59,7 @@ $(eval $(call generate_rules,$(LIB),$(SRCS))) .PHONY: release release: 7z a coap-service_$(VERSION).zip *.a *.lib include + +.PHONY: deploy_to +deploy_to: all + tar --transform 's,^,coap-service/,' --append -f $(TO) *.a From b34fb79e21db84c9839855629003ad08bfc8ab0d Mon Sep 17 00:00:00 2001 From: Seppo Takalo Date: Wed, 1 Jul 2015 10:25:47 +0300 Subject: [PATCH 012/154] Create gitignore --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000..cc8856164e --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +*.a +output From 014513bca9d8b95a5cb211126369487184dd9807 Mon Sep 17 00:00:00 2001 From: Seppo Takalo Date: Wed, 8 Jul 2015 16:36:55 +0300 Subject: [PATCH 013/154] Update dependency to mbed-core instead of mbed --- module.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module.json b/module.json index 619560d732..4ee88dc147 100644 --- a/module.json +++ b/module.json @@ -19,7 +19,7 @@ "source/include" ], "dependencies": { - "mbed": "~3.0.1", + "mbed-core": "~0.1.1", "mbed-client-libservice": "~2.0.9", "mbed-client": "~0.1.3", "mbed-6lowpan-eventloop": "~0.0.8", From b048c45606a4e4255f682951a2495f1c6a0c4a2b Mon Sep 17 00:00:00 2001 From: Seppo Takalo Date: Wed, 8 Jul 2015 16:56:34 +0300 Subject: [PATCH 014/154] version v0.0.4 --- module.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module.json b/module.json index 4ee88dc147..a34104114b 100644 --- a/module.json +++ b/module.json @@ -1,6 +1,6 @@ { "name": "coap-service", - "version": "0.0.3", + "version": "0.0.4", "description": "CoAP Service library", "keywords": [ "coap", From bb97e63b7802039ae3f7e00a8bbf924c34e3ecde Mon Sep 17 00:00:00 2001 From: Seppo Takalo Date: Mon, 13 Jul 2015 15:51:05 +0300 Subject: [PATCH 015/154] Move randlib away from libservice. --- mbed-client-randlib/platform/arm_hal_random.h | 21 ++ mbed-client-randlib/randLIB.h | 109 +++++++++ module.json | 19 ++ source/randLIB.c | 212 ++++++++++++++++++ 4 files changed, 361 insertions(+) create mode 100644 mbed-client-randlib/platform/arm_hal_random.h create mode 100644 mbed-client-randlib/randLIB.h create mode 100644 module.json create mode 100644 source/randLIB.c diff --git a/mbed-client-randlib/platform/arm_hal_random.h b/mbed-client-randlib/platform/arm_hal_random.h new file mode 100644 index 0000000000..e6a92ea500 --- /dev/null +++ b/mbed-client-randlib/platform/arm_hal_random.h @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2014 ARM. All rights reserved. + */ + +#ifndef ARM_HAL_RANDOM_H_ +#define ARM_HAL_RANDOM_H_ +#ifdef __cplusplus +extern "C" { +#endif +/** + * \brief This function performs Random number driver init. + */ +extern void arm_random_module_init(void); +/** + * \brief Get random library seed value. + */ +extern uint32_t arm_random_seed_get(void); +#ifdef __cplusplus +} +#endif +#endif /* ARM_HAL_RANDOM_H_ */ diff --git a/mbed-client-randlib/randLIB.h b/mbed-client-randlib/randLIB.h new file mode 100644 index 0000000000..4a6a546867 --- /dev/null +++ b/mbed-client-randlib/randLIB.h @@ -0,0 +1,109 @@ +/* + * Copyright (c) 2014 ARM. All rights reserved. + */ + +/** + * \file randLIB.h + * \brief Pseudo Random Library API: + * + * + * \section net-boot Network Bootstrap Control API: + * - randLIB_seed_random(), Set seed for pseudo random + * - randLIB_get_8bit(), Generate 8-bit random number + * - randLIB_get_16bit(),Generate 16-bit random number + * - randLIB_get_32bit(),Generate 32-bit random number + * - randLIB_get_n_bytes_random(), Generate n-bytes random numbers + * + */ + +#ifndef RANDLIB_H_ +#define RANDLIB_H_ +#ifdef __cplusplus +extern "C" { +#endif + + +/** + * This library is made for getting random numbers for Timing needs in protocols. + * + * **not safe to use for security or cryptographic operations.** + * + */ + + +/** + * \brief Init seed for Pseudo Random. + * + * \return None + * + */ +extern void randLIB_seed_random(void); + +/** + * \brief Generate 8-bit random number. + * + * \param None + * \return 8-bit random number + * + */ +extern uint8_t randLIB_get_8bit(void); + +/** + * \brief Generate 16-bit random number. + * + * \param None + * \return 16-bit random number + * + */ +extern uint16_t randLIB_get_16bit(void); + +/** + * \brief Generate 32-bit random number. + * + * \param None + * \return 16-bit random number + * + */ +extern uint32_t randLIB_get_32bit(void); + +/** + * \brief Generate n-bytes random numbers. + * + * \param data_ptr pointer where random will be stored + * \param eight_bit_boundary how many bytes need random + * \return 0 process valid + * \return -1 Unsupported Parameters + * + */ +extern int8_t randLIB_get_n_bytes_random(uint8_t *data_ptr, uint8_t eight_bit_boundary); + +/** + * \brief Generate a random number within a range. + * + * The result is linearly distributed in the range [min..max], inclusive. + * + * \param min minimum value that can be generated + * \param max maximum value that can be generated + */ +uint16_t randLIB_get_random_in_range(uint16_t min, uint16_t max); + +/** + * \brief Randomise a base 32-bit number by a jitter factor + * + * The result is linearly distributed in the jitter range, which is expressed + * as fixed-point unsigned 1.15 values. For example, to produce a number in the + * range [0.75 * base, 1.25 * base], set min_factor to 0x6000 and max_factor to + * 0xA000. + * + * Result is clamped to 0xFFFFFFFF if it overflows. + * + * \param base The base 32-bit value + * \param min_factor The minimum value for the random factor + * \param max_factor The maximum value for the random factor + */ +uint32_t randLIB_randomise_base(uint32_t base, uint16_t min_factor, uint16_t max_factor); + +#ifdef __cplusplus +} +#endif +#endif /* RANDLIB_H_ */ diff --git a/module.json b/module.json new file mode 100644 index 0000000000..0c7262ea97 --- /dev/null +++ b/module.json @@ -0,0 +1,19 @@ +{ + "name": "mbed-client-randlib", + "version": "0.0.1", + "description": "Pseudo random library used by mbed-client and 6LoWPAN stack.", + "keywords": [], + "author": "", + "homepage": "", + "licenses": [ + { + "url": "https://spdx.org/licenses/Apache-2.0", + "type": "Apache-2.0" + } + ], + "extraIncludes": [ + "mbed-client-randlib" + ], + "dependencies": {}, + "targetDependencies": {} +} \ No newline at end of file diff --git a/source/randLIB.c b/source/randLIB.c new file mode 100644 index 0000000000..6d1bc389bf --- /dev/null +++ b/source/randLIB.c @@ -0,0 +1,212 @@ +/* + * Copyright (c) 2014 ARM. All rights reserved. + */ +#include +#include +#include +#include +#include "randLIB.h" +#include "platform/arm_hal_random.h" + +#if ((RAND_MAX+1) & RAND_MAX) != 0 +#error "RAND_MAX isn't 2^n-1 :(" +#endif + +/** + * This library is made for getting random numbers for Timing needs in protocols. + * + * **not safe to use for security or cryptographic operations.** + * + */ + + +/** + * \brief Init seed for Pseudo Random. + * + * \return None + * + */ +void randLIB_seed_random(void) +{ + uint32_t rand_seed; + arm_random_module_init(); + rand_seed = arm_random_seed_get(); + srand(rand_seed); +} + +/** + * \brief Generate 8-bit random number. + * + * \param None + * \return 8-bit random number + * + */ +uint8_t randLIB_get_8bit(void) +{ + return rand(); +} + +/** + * \brief Generate 16-bit random number. + * + * \param None + * \return 16-bit random number + * + */ +uint16_t randLIB_get_16bit(void) +{ + uint16_t ret_val; + + ret_val = rand(); +#if RAND_MAX == 0x7FFF + ret_val |= (uint16_t) rand() << 15; +#endif + + return ret_val; +} +/** + * \brief Generate 32-bit random number. + * + * \param None + * \return 32-bit random number + * + */ +uint32_t randLIB_get_32bit(void) +{ + uint32_t ret_val; + + ret_val = rand(); +#if RAND_MAX == 0x7FFF + ret_val |= (uint32_t) rand() << 15; + ret_val |= (uint32_t) rand() << 30; +#elif RAND_MAX == 0x3FFFFFFF /* IAR */ + ret_val |= (uint32_t) rand() << 30; +#elif RAND_MAX == 0x7FFFFFFF + ret_val |= (uint32_t) rand() << 31; +#else +#error "randLIB_get_32bit - odd RAND_MAX" +#endif + + return ret_val; +} + + +/** + * \brief Generate n-bytes random numbers. + * + * \param data_ptr pointer where random will be stored + * \param eight_bit_boundary how many bytes need random + * \return 0 process valid + * \return -1 Unsupported Parameters + * + */ +int8_t randLIB_get_n_bytes_random(uint8_t *data_ptr, uint8_t eight_bit_boundary) +{ + if ((data_ptr == 0) || (eight_bit_boundary == 0)) { + return -1; + } + + while (eight_bit_boundary) { + *data_ptr++ = randLIB_get_8bit(); + eight_bit_boundary--; + } + return 0; +} + +/** + * \brief Generate a random number within a range. + * + * The result is linearly distributed in the range [min..max], inclusive. + * + * \param min minimum value that can be generated + * \param max maximum value that can be generated + */ +uint16_t randLIB_get_random_in_range(uint16_t min, uint16_t max) +{ + /* This special case is potentially common, particularly in this routine's + * first user (Trickle), so worth catching immediately */ + if (min == max) { + return min; + } + + /* 16-bit arithmetic below fails in this extreme case; we can optimise it */ + if (max - min == 0xFFFF) { + return randLIB_get_16bit(); + } + + /* We get RAND_MAX+1 values from rand() in the range [0..RAND_MAX], and + * need to divvy them up into the number of values we need. And reroll any + * odd values off the end as we insist every value having equal chance. + * + * Special handling for systems where RAND_MAX is 0x7FFF; we use our + * randLIB_get_16bit() and have to be a bit more careful about + * unsigned integer overflow. (On other systems rand() returns int, + * so we can't overflow if we use unsigned int). + * + * Eg, range(1,3), RAND_MAX = 0x7FFFFFFF: + * We have 3 bands of size 0x2AAAAAAA (0x80000000/3). + * + * We roll: 0x00000000..0x2AAAAAAA9 -> 1 + * 0x2AAAAAAA..0x555555553 -> 2 + * 0x55555554..0x7FFFFFFFD -> 3 + * 0x7FFFFFFE..0x7FFFFFFFF -> reroll + * + * (Bias problem clearly pretty insignificant there, but gets worse as + * range increases). + */ + unsigned int values_needed = max + 1 - min; +#if RAND_MAX > 0xFFFF + unsigned int band_size = (RAND_MAX + 1u) / values_needed; +#elif UINT_MAX > 0xFFFF + unsigned int band_size = 0x10000u / values_needed; +#else + /* Avoid the need for long division, at the expense of fractionally + * increasing reroll chance. */ + unsigned int band_size = 0xFFFFu / values_needed; +#endif + unsigned int top_of_bands = band_size * values_needed; + unsigned int result; + do { +#if RAND_MAX > 0xFFFF + result = rand(); +#else + result = randLIB_get_16bit(); +#endif + } while (result >= top_of_bands); + + return min + (uint16_t)(result / band_size); +} + +/** + * \brief Randomise a base 32-bit number by a jitter factor + * + * The result is linearly distributed in the jitter range, which is expressed + * as fixed-point unsigned 1.15 values. For example, to produce a number in the + * range [0.75 * base, 1.25 * base], set min_factor to 0x6000 and max_factor to + * 0xA000. + * + * Result is clamped to 0xFFFFFFFF if it overflows. + * + * \param base The base 32-bit value + * \param min_factor The minimum value for the random factor + * \param max_factor The maximum value for the random factor + */ +uint32_t randLIB_randomise_base(uint32_t base, uint16_t min_factor, uint16_t max_factor) +{ + uint16_t random_factor = randLIB_get_random_in_range(min_factor, max_factor); + + /* 32x16-bit long multiplication, to get 48-bit result */ + uint32_t hi = (base >> 16) * random_factor; + uint32_t lo = (base & 0xFFFF) * random_factor; + /* Add halves, and take top 32 bits of 48-bit result */ + uint32_t res = hi + (lo >> 16); + + /* Randomisation factor is *2^15, so need to shift up 1 more bit, avoiding overflow */ + if (res & 0x80000000) { + res = 0xFFFFFFFF; + } else { + res = (res << 1) | ((lo >> 15) & 1); + } + + return res; +} From 00b21c0968996ea35ed2b806ffa6b4c93fb232be Mon Sep 17 00:00:00 2001 From: Seppo Takalo Date: Mon, 13 Jul 2015 17:43:16 +0300 Subject: [PATCH 016/154] Update build rules for NS based build. --- .gitignore | 1 + Makefile | 5 +++++ 2 files changed, 6 insertions(+) create mode 100644 .gitignore create mode 100644 Makefile diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000..77320b339f --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +output/* diff --git a/Makefile b/Makefile new file mode 100644 index 0000000000..9a40f3cd68 --- /dev/null +++ b/Makefile @@ -0,0 +1,5 @@ +SRCS := $(wildcard source/*) +LIB := librand.a +EXPORT_HEADERS := mbed-client-randlib + +include ../exported_rules.mk From 8b1d6a884bf92b9a4a8170ee1961b765cc8e6810 Mon Sep 17 00:00:00 2001 From: Seppo Takalo Date: Mon, 13 Jul 2015 17:53:16 +0300 Subject: [PATCH 017/154] version v0.0.2 --- module.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module.json b/module.json index 0c7262ea97..d33e237671 100644 --- a/module.json +++ b/module.json @@ -1,6 +1,6 @@ { "name": "mbed-client-randlib", - "version": "0.0.1", + "version": "0.0.2", "description": "Pseudo random library used by mbed-client and 6LoWPAN stack.", "keywords": [], "author": "", From f80e9e349fa08fb348c9af7c498c7063fa02faaa Mon Sep 17 00:00:00 2001 From: Seppo Takalo Date: Mon, 13 Jul 2015 18:00:07 +0300 Subject: [PATCH 018/154] Update homepage --- module.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/module.json b/module.json index d33e237671..14d6328804 100644 --- a/module.json +++ b/module.json @@ -3,8 +3,7 @@ "version": "0.0.2", "description": "Pseudo random library used by mbed-client and 6LoWPAN stack.", "keywords": [], - "author": "", - "homepage": "", + "homepage": "https://github.com/ARMmbed/mbed-client-randlib", "licenses": [ { "url": "https://spdx.org/licenses/Apache-2.0", From 0de02260b6f16a005e3b92bc6700b36230de9acc Mon Sep 17 00:00:00 2001 From: Seppo Takalo Date: Tue, 14 Jul 2015 14:17:51 +0300 Subject: [PATCH 019/154] Depend on mbed-client-libservice 3.0.0 --- module.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module.json b/module.json index a34104114b..63e86b684c 100644 --- a/module.json +++ b/module.json @@ -20,7 +20,7 @@ ], "dependencies": { "mbed-core": "~0.1.1", - "mbed-client-libservice": "~2.0.9", + "mbed-client-libservice": "~3.0.0", "mbed-client": "~0.1.3", "mbed-6lowpan-eventloop": "~0.0.8", "mbed-6lowpan": "~0.0.9" From 939685c48aba399eace93e720851c9e2e3a12902 Mon Sep 17 00:00:00 2001 From: Seppo Takalo Date: Tue, 14 Jul 2015 15:17:15 +0300 Subject: [PATCH 020/154] version v0.0.5 --- module.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module.json b/module.json index 63e86b684c..184ae2d282 100644 --- a/module.json +++ b/module.json @@ -1,6 +1,6 @@ { "name": "coap-service", - "version": "0.0.4", + "version": "0.0.5", "description": "CoAP Service library", "keywords": [ "coap", From da09926a318b5eb3aa2dc784c15d8c28d9ed97f8 Mon Sep 17 00:00:00 2001 From: Seppo Takalo Date: Tue, 14 Jul 2015 15:29:34 +0300 Subject: [PATCH 021/154] Depend on mbed-client-c --- module.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module.json b/module.json index 184ae2d282..eebebffd5b 100644 --- a/module.json +++ b/module.json @@ -21,7 +21,7 @@ "dependencies": { "mbed-core": "~0.1.1", "mbed-client-libservice": "~3.0.0", - "mbed-client": "~0.1.3", + "mbed-client-c": "~0.1.6", "mbed-6lowpan-eventloop": "~0.0.8", "mbed-6lowpan": "~0.0.9" }, From 977de5739cb5aa012a21d5b7eb2ddb7e242845b4 Mon Sep 17 00:00:00 2001 From: Seppo Takalo Date: Tue, 14 Jul 2015 15:29:43 +0300 Subject: [PATCH 022/154] version v0.0.6 --- module.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module.json b/module.json index eebebffd5b..2a4ac09028 100644 --- a/module.json +++ b/module.json @@ -1,6 +1,6 @@ { "name": "coap-service", - "version": "0.0.5", + "version": "0.0.6", "description": "CoAP Service library", "keywords": [ "coap", From efe7c9d2972defba5ce87585e9198bda554166bd Mon Sep 17 00:00:00 2001 From: Tero Heinonen Date: Mon, 3 Aug 2015 11:41:23 +0300 Subject: [PATCH 023/154] copyright and licence updates --- .../CoAP_Server_unit_test_app.c | 16 ++++++ LICENSE.txt | 12 +--- apache-2.0.txt | 56 +++++++++++++++++++ coap-service-linux/coap_server_impl.c | 16 ++++++ coap-service-mbed/coap_server_impl.c | 16 ++++++ coap-service-nanomesh/coap_server_impl.c | 16 ++++++ coap-service/coap_service_api.h | 13 ++++- module.json | 2 +- source/coap_server.c | 15 ++++- source/coap_service.c | 15 ++++- source/include/coap_server.h | 15 ++++- source/include/coap_server_impl.h | 15 ++++- 12 files changed, 191 insertions(+), 16 deletions(-) create mode 100644 apache-2.0.txt diff --git a/CoAP_Server_unit_test/CoAP_Server_unit_test_app.c b/CoAP_Server_unit_test/CoAP_Server_unit_test_app.c index c64c2d6728..f7fd55a825 100644 --- a/CoAP_Server_unit_test/CoAP_Server_unit_test_app.c +++ b/CoAP_Server_unit_test/CoAP_Server_unit_test_app.c @@ -1,3 +1,19 @@ +/* + * Copyright (c) 2015 ARM Limited. All rights reserved. + + * SPDX-License-Identifier: Apache-2.0 + * 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 #include #include "ns_types.h" diff --git a/LICENSE.txt b/LICENSE.txt index accdf8b846..97df0e645d 100644 --- a/LICENSE.txt +++ b/LICENSE.txt @@ -1,10 +1,2 @@ -Copyright 2014. ARM Ltd. All rights reserved. - -Use of this software is restricted by the terms of ARM's limited use license or permitted -sublicense (the "License"). You may not use this software unless you have been expressly granted -the right to use it under the License, and in such case you must use this file in compliance with -the License. - -Unless otherwise expressly provided in the License, this software is provided on an "AS IS" -BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, and may be -revoked at any time. \ No newline at end of file +Unless specifically indicated otherwise in a file, files are licensed +under the Apache 2.0 license, as can be found in: apache-2.0.txt \ No newline at end of file diff --git a/apache-2.0.txt b/apache-2.0.txt new file mode 100644 index 0000000000..0e4cf3ee99 --- /dev/null +++ b/apache-2.0.txt @@ -0,0 +1,56 @@ + + +Apache License + +Version 2.0, January 2004 + +http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + +"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. + +"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. + +"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + +"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. + +"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. + +"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. + +"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). + +"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. + +"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." + +"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: + + You must give any other recipients of the Work or Derivative Works a copy of this License; and + You must cause any modified files to carry prominent notices stating that You changed the files; and + You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and + If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. + + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS \ No newline at end of file diff --git a/coap-service-linux/coap_server_impl.c b/coap-service-linux/coap_server_impl.c index e69de29bb2..a8c5de2178 100644 --- a/coap-service-linux/coap_server_impl.c +++ b/coap-service-linux/coap_server_impl.c @@ -0,0 +1,16 @@ +/* + * Copyright (c) 2015 ARM Limited. All rights reserved. + + * SPDX-License-Identifier: Apache-2.0 + * 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. + */ diff --git a/coap-service-mbed/coap_server_impl.c b/coap-service-mbed/coap_server_impl.c index e69de29bb2..a8c5de2178 100644 --- a/coap-service-mbed/coap_server_impl.c +++ b/coap-service-mbed/coap_server_impl.c @@ -0,0 +1,16 @@ +/* + * Copyright (c) 2015 ARM Limited. All rights reserved. + + * SPDX-License-Identifier: Apache-2.0 + * 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. + */ diff --git a/coap-service-nanomesh/coap_server_impl.c b/coap-service-nanomesh/coap_server_impl.c index 56217b134e..d353c69f43 100644 --- a/coap-service-nanomesh/coap_server_impl.c +++ b/coap-service-nanomesh/coap_server_impl.c @@ -1,3 +1,19 @@ +/* + * Copyright (c) 2015 ARM Limited. All rights reserved. + + * SPDX-License-Identifier: Apache-2.0 + * 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 #include "ns_types.h" //#include "eventOS_event.h" diff --git a/coap-service/coap_service_api.h b/coap-service/coap_service_api.h index 7d3b483f64..6c97f00287 100755 --- a/coap-service/coap_service_api.h +++ b/coap-service/coap_service_api.h @@ -1,7 +1,18 @@ /* + * Copyright (c) 2015 ARM Limited. All rights reserved. + + * SPDX-License-Identifier: Apache-2.0 + * 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 * - * Copyright (c) 2015 ARM. All rights reserved. + * 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 COAP_SERVICE_API_H_ diff --git a/module.json b/module.json index 2a4ac09028..1337871f85 100644 --- a/module.json +++ b/module.json @@ -12,7 +12,7 @@ "type": "git" }, "homepage": "http://git.oulu.arm.com/gitweb/?p=nanomesh/coap-service.git;a=summary", - "license": "Proprietary, all rights reserved.", + "license": "Apache-2.0", "extraIncludes": [ "coap-service", "nanostack-event-loop", diff --git a/source/coap_server.c b/source/coap_server.c index 8f0a256a62..838f01de5f 100644 --- a/source/coap_server.c +++ b/source/coap_server.c @@ -1,5 +1,18 @@ /* - * Copyright (c) 2015 ARM. All rights reserved. + * Copyright (c) 2015 ARM Limited. All rights reserved. + + * SPDX-License-Identifier: Apache-2.0 + * 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 "include/coap_service_api.h" diff --git a/source/coap_service.c b/source/coap_service.c index 370a4f7299..ec2365732f 100644 --- a/source/coap_service.c +++ b/source/coap_service.c @@ -1,5 +1,18 @@ /* - * Copyright (c) 2015 ARM. All rights reserved. + * Copyright (c) 2015 ARM Limited. All rights reserved. + + * SPDX-License-Identifier: Apache-2.0 + * 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. */ /* diff --git a/source/include/coap_server.h b/source/include/coap_server.h index 3ee8ab54d7..ba32e213f8 100644 --- a/source/include/coap_server.h +++ b/source/include/coap_server.h @@ -1,5 +1,18 @@ /* - * Copyright (c) 2015 ARM. All rights reserved. + * Copyright (c) 2015 ARM Limited. All rights reserved. + + * SPDX-License-Identifier: Apache-2.0 + * 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. */ /* diff --git a/source/include/coap_server_impl.h b/source/include/coap_server_impl.h index 707171fd48..2440b6f967 100644 --- a/source/include/coap_server_impl.h +++ b/source/include/coap_server_impl.h @@ -1,5 +1,18 @@ /* - * Copyright (c) 2015 ARM. All rights reserved. + * Copyright (c) 2015 ARM Limited. All rights reserved. + + * SPDX-License-Identifier: Apache-2.0 + * 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. */ /* From a76b521de3a9507a2325c103d384f6971aa47284 Mon Sep 17 00:00:00 2001 From: Tero Heinonen Date: Mon, 3 Aug 2015 11:41:23 +0300 Subject: [PATCH 024/154] copyright and licence updates --- module.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/module.json b/module.json index 1337871f85..7aaef29277 100644 --- a/module.json +++ b/module.json @@ -8,10 +8,10 @@ ], "author": "Erno Tormikoski ", "repository": { - "url": "ssh://git.oulu.arm.com/home/git/repositories/nanomesh/coap-service.git", + "url": "git@github.com:ARMmbed/coap-service.git", "type": "git" }, - "homepage": "http://git.oulu.arm.com/gitweb/?p=nanomesh/coap-service.git;a=summary", + "homepage": "https://github.com/ARMmbed/coap-service", "license": "Apache-2.0", "extraIncludes": [ "coap-service", From 32afec7f59f3e68385ea3ae9ec3e04937ede8224 Mon Sep 17 00:00:00 2001 From: Tero Heinonen Date: Mon, 3 Aug 2015 13:53:57 +0300 Subject: [PATCH 025/154] licence and copyrights updated --- LICENSE.txt | 2 + apache-2.0.txt | 56 +++++++++++++++++++ mbed-client-randlib/platform/arm_hal_random.h | 14 ++++- mbed-client-randlib/randLIB.h | 14 ++++- module.json | 7 +-- source/randLIB.c | 14 ++++- 6 files changed, 98 insertions(+), 9 deletions(-) create mode 100644 LICENSE.txt create mode 100644 apache-2.0.txt diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 0000000000..97df0e645d --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,2 @@ +Unless specifically indicated otherwise in a file, files are licensed +under the Apache 2.0 license, as can be found in: apache-2.0.txt \ No newline at end of file diff --git a/apache-2.0.txt b/apache-2.0.txt new file mode 100644 index 0000000000..0e4cf3ee99 --- /dev/null +++ b/apache-2.0.txt @@ -0,0 +1,56 @@ + + +Apache License + +Version 2.0, January 2004 + +http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + +"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. + +"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. + +"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + +"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. + +"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. + +"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. + +"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). + +"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. + +"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." + +"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: + + You must give any other recipients of the Work or Derivative Works a copy of this License; and + You must cause any modified files to carry prominent notices stating that You changed the files; and + You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and + If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. + + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS \ No newline at end of file diff --git a/mbed-client-randlib/platform/arm_hal_random.h b/mbed-client-randlib/platform/arm_hal_random.h index e6a92ea500..744245c3da 100644 --- a/mbed-client-randlib/platform/arm_hal_random.h +++ b/mbed-client-randlib/platform/arm_hal_random.h @@ -1,5 +1,17 @@ /* - * Copyright (c) 2014 ARM. All rights reserved. + * Copyright (c) 2014-2015 ARM Limited. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 + * 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 ARM_HAL_RANDOM_H_ diff --git a/mbed-client-randlib/randLIB.h b/mbed-client-randlib/randLIB.h index 4a6a546867..f6979f042b 100644 --- a/mbed-client-randlib/randLIB.h +++ b/mbed-client-randlib/randLIB.h @@ -1,5 +1,17 @@ /* - * Copyright (c) 2014 ARM. All rights reserved. + * Copyright (c) 2014-2015 ARM Limited. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 + * 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. */ /** diff --git a/module.json b/module.json index 14d6328804..1fa80ffc32 100644 --- a/module.json +++ b/module.json @@ -4,12 +4,7 @@ "description": "Pseudo random library used by mbed-client and 6LoWPAN stack.", "keywords": [], "homepage": "https://github.com/ARMmbed/mbed-client-randlib", - "licenses": [ - { - "url": "https://spdx.org/licenses/Apache-2.0", - "type": "Apache-2.0" - } - ], + "license": "Apache-2.0", "extraIncludes": [ "mbed-client-randlib" ], diff --git a/source/randLIB.c b/source/randLIB.c index 6d1bc389bf..9767a8dae0 100644 --- a/source/randLIB.c +++ b/source/randLIB.c @@ -1,5 +1,17 @@ /* - * Copyright (c) 2014 ARM. All rights reserved. + * Copyright (c) 2014-2015 ARM Limited. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 + * 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 #include From 932bbc1464b2a324385b0f4c7eb5f60708fec5be Mon Sep 17 00:00:00 2001 From: Mika Date: Wed, 5 Aug 2015 00:09:05 -0700 Subject: [PATCH 026/154] version v0.0.7 --- module.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module.json b/module.json index 7aaef29277..0d286a4a35 100644 --- a/module.json +++ b/module.json @@ -1,6 +1,6 @@ { "name": "coap-service", - "version": "0.0.6", + "version": "0.0.7", "description": "CoAP Service library", "keywords": [ "coap", From ca17cc2984a6e9c5bab654b0b1734d4be0eb2658 Mon Sep 17 00:00:00 2001 From: Arto Kinnunen Date: Wed, 5 Aug 2015 10:53:16 +0300 Subject: [PATCH 027/154] version v0.0.3 --- module.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module.json b/module.json index 1fa80ffc32..9752487208 100644 --- a/module.json +++ b/module.json @@ -1,6 +1,6 @@ { "name": "mbed-client-randlib", - "version": "0.0.2", + "version": "0.0.3", "description": "Pseudo random library used by mbed-client and 6LoWPAN stack.", "keywords": [], "homepage": "https://github.com/ARMmbed/mbed-client-randlib", From 3cdf780996f9fcc10970f3578a238a96a90b2e44 Mon Sep 17 00:00:00 2001 From: Mika Tervonen Date: Thu, 6 Aug 2015 00:46:41 -0700 Subject: [PATCH 028/154] Removed dependency to mbed-core --- module.json | 1 - 1 file changed, 1 deletion(-) diff --git a/module.json b/module.json index 0d286a4a35..2a7a4ce6b9 100644 --- a/module.json +++ b/module.json @@ -19,7 +19,6 @@ "source/include" ], "dependencies": { - "mbed-core": "~0.1.1", "mbed-client-libservice": "~3.0.0", "mbed-client-c": "~0.1.6", "mbed-6lowpan-eventloop": "~0.0.8", From 1680cb6f4f4b74a447efe76dcdbef7c952922e04 Mon Sep 17 00:00:00 2001 From: Mika Tervonen Date: Thu, 6 Aug 2015 01:00:41 -0700 Subject: [PATCH 029/154] version v0.0.8 --- module.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module.json b/module.json index 2a7a4ce6b9..02919d5ed5 100644 --- a/module.json +++ b/module.json @@ -1,6 +1,6 @@ { "name": "coap-service", - "version": "0.0.7", + "version": "0.0.8", "description": "CoAP Service library", "keywords": [ "coap", From de1a4d3bf1a6fbbad1410d399ff118866ef6a76c Mon Sep 17 00:00:00 2001 From: Release Bot Date: Fri, 7 Aug 2015 13:35:47 +0100 Subject: [PATCH 030/154] Update module names for release. --- module.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/module.json b/module.json index 02919d5ed5..b591b51e17 100644 --- a/module.json +++ b/module.json @@ -21,8 +21,8 @@ "dependencies": { "mbed-client-libservice": "~3.0.0", "mbed-client-c": "~0.1.6", - "mbed-6lowpan-eventloop": "~0.0.8", - "mbed-6lowpan": "~0.0.9" + "sal-stack-nanostack-eventloop": "~0.0.8", + "sal-stack-nanostack": "~0.0.9" }, "targetDependencies": {} } \ No newline at end of file From a3ca8656612b3dcaaad2699d56fc9e41e370db7f Mon Sep 17 00:00:00 2001 From: Mika Tervonen Date: Mon, 10 Aug 2015 03:37:00 -0700 Subject: [PATCH 031/154] version v0.0.9 --- module.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module.json b/module.json index b591b51e17..24a79c5413 100644 --- a/module.json +++ b/module.json @@ -1,6 +1,6 @@ { "name": "coap-service", - "version": "0.0.8", + "version": "0.0.9", "description": "CoAP Service library", "keywords": [ "coap", From cd49b585811ff4f0ae6802ea502facca6678bfc2 Mon Sep 17 00:00:00 2001 From: Release Bot Date: Wed, 12 Aug 2015 18:08:12 +0100 Subject: [PATCH 032/154] Update module names for release. --- module.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module.json b/module.json index 24a79c5413..029de51f01 100644 --- a/module.json +++ b/module.json @@ -19,7 +19,7 @@ "source/include" ], "dependencies": { - "mbed-client-libservice": "~3.0.0", + "nanostack-libservice": "~3.0.0", "mbed-client-c": "~0.1.6", "sal-stack-nanostack-eventloop": "~0.0.8", "sal-stack-nanostack": "~0.0.9" From bc8c1b91c544cc75865c38010436828770e45624 Mon Sep 17 00:00:00 2001 From: Release Bot Date: Wed, 12 Aug 2015 18:08:12 +0100 Subject: [PATCH 033/154] Update module names for release. --- module.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module.json b/module.json index 9752487208..45e61b8e92 100644 --- a/module.json +++ b/module.json @@ -1,5 +1,5 @@ { - "name": "mbed-client-randlib", + "name": "nanostack-randlib", "version": "0.0.3", "description": "Pseudo random library used by mbed-client and 6LoWPAN stack.", "keywords": [], From 34bd04ca50d8348e9f58f774daf129bc2fcc086f Mon Sep 17 00:00:00 2001 From: Arto Kinnunen Date: Wed, 19 Aug 2015 12:26:34 +0300 Subject: [PATCH 034/154] Update module.json --- module.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/module.json b/module.json index 029de51f01..043354d01a 100644 --- a/module.json +++ b/module.json @@ -22,7 +22,7 @@ "nanostack-libservice": "~3.0.0", "mbed-client-c": "~0.1.6", "sal-stack-nanostack-eventloop": "~0.0.8", - "sal-stack-nanostack": "~0.0.9" + "sal-stack-nanostack": "^2.1.0" }, "targetDependencies": {} -} \ No newline at end of file +} From 246289f2172585125048c876aa4560d828a81d71 Mon Sep 17 00:00:00 2001 From: Mika Tervonen Date: Wed, 19 Aug 2015 02:48:28 -0700 Subject: [PATCH 035/154] version v0.0.10 --- module.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/module.json b/module.json index 043354d01a..71aa2fb218 100644 --- a/module.json +++ b/module.json @@ -1,6 +1,6 @@ { "name": "coap-service", - "version": "0.0.9", + "version": "0.0.10", "description": "CoAP Service library", "keywords": [ "coap", @@ -25,4 +25,4 @@ "sal-stack-nanostack": "^2.1.0" }, "targetDependencies": {} -} +} \ No newline at end of file From b1bf203b1ac32d0e1b615967729ccf951fdad46f Mon Sep 17 00:00:00 2001 From: Seppo Takalo Date: Wed, 19 Aug 2015 15:47:03 +0300 Subject: [PATCH 036/154] Modify ArmCC to lower case. --- Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 0707ee4a45..74eb7ad692 100644 --- a/Makefile +++ b/Makefile @@ -9,8 +9,8 @@ # OR (Cross-compile GCC toolchain) # make PLATFORM=arm-linux-gnueabi- # -# OR (ArmCC/Keil) -# make CC=ArmCC AR=ArmAR +# OR (armcc/Keil) +# make CC=armcc AR=ArmAR # # OR (IAR-ARM) # make CC=iccarm From c7b7fe572b88854d7920dcb2345741ed9ebbc430 Mon Sep 17 00:00:00 2001 From: Tero Heinonen Date: Thu, 20 Aug 2015 10:05:44 +0300 Subject: [PATCH 037/154] removed static-declarations from header --- source/include/coap_server.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/include/coap_server.h b/source/include/coap_server.h index ba32e213f8..98023a2e8b 100644 --- a/source/include/coap_server.h +++ b/source/include/coap_server.h @@ -49,9 +49,9 @@ void coap_server_delete_session(int8_t service_id); int8_t coap_server_service_init(int8_t interface_id, uint16_t listen_port, uint8_t service_options); -static coap_service_session_t *coap_service_search_from_list(int8_t interface_id); +coap_service_session_t *coap_service_search_from_list(int8_t interface_id); -static coap_service_session_t *coap_service_find_by_service(int8_t service_id); +coap_service_session_t *coap_service_find_by_service(int8_t service_id); #endif /* COAP_SERVER_H_ */ From 5daf5aa700bc6312e781666abca1c3f7a202d57a Mon Sep 17 00:00:00 2001 From: Seppo Takalo Date: Thu, 27 Aug 2015 10:53:03 +0300 Subject: [PATCH 038/154] version v0.0.4 --- module.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/module.json b/module.json index 45e61b8e92..457432cc3d 100644 --- a/module.json +++ b/module.json @@ -1,6 +1,6 @@ { "name": "nanostack-randlib", - "version": "0.0.3", + "version": "0.0.4", "description": "Pseudo random library used by mbed-client and 6LoWPAN stack.", "keywords": [], "homepage": "https://github.com/ARMmbed/mbed-client-randlib", @@ -10,4 +10,4 @@ ], "dependencies": {}, "targetDependencies": {} -} \ No newline at end of file +} From 55a1e16a2764ce2dc3ba206939034c9bed046a64 Mon Sep 17 00:00:00 2001 From: Bogdan Marinescu Date: Wed, 2 Sep 2015 12:31:25 +0300 Subject: [PATCH 039/154] Changed LICENSE.txt to LICENSE --- LICENSE.txt => LICENSE | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename LICENSE.txt => LICENSE (100%) diff --git a/LICENSE.txt b/LICENSE similarity index 100% rename from LICENSE.txt rename to LICENSE From 7df45948872066355dd89bf88ac79393b6127e38 Mon Sep 17 00:00:00 2001 From: Bogdan Marinescu Date: Wed, 2 Sep 2015 12:31:47 +0300 Subject: [PATCH 040/154] Changed LICENSE.txt to LICENSE --- LICENSE.txt => LICENSE | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename LICENSE.txt => LICENSE (100%) diff --git a/LICENSE.txt b/LICENSE similarity index 100% rename from LICENSE.txt rename to LICENSE From 063e365ade437d4b10f0be32312aacd55951b49b Mon Sep 17 00:00:00 2001 From: Bogdan Marinescu Date: Wed, 2 Sep 2015 16:26:35 +0300 Subject: [PATCH 041/154] version v0.0.11 --- module.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module.json b/module.json index 71aa2fb218..9501aa9e55 100644 --- a/module.json +++ b/module.json @@ -1,6 +1,6 @@ { "name": "coap-service", - "version": "0.0.10", + "version": "0.0.11", "description": "CoAP Service library", "keywords": [ "coap", From 7896d8ff1df93aacee40a334db3dba954a485026 Mon Sep 17 00:00:00 2001 From: Bogdan Marinescu Date: Wed, 2 Sep 2015 16:31:41 +0300 Subject: [PATCH 042/154] version v0.0.5 --- module.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/module.json b/module.json index 457432cc3d..8e00dc32f5 100644 --- a/module.json +++ b/module.json @@ -1,6 +1,6 @@ { "name": "nanostack-randlib", - "version": "0.0.4", + "version": "0.0.5", "description": "Pseudo random library used by mbed-client and 6LoWPAN stack.", "keywords": [], "homepage": "https://github.com/ARMmbed/mbed-client-randlib", @@ -10,4 +10,4 @@ ], "dependencies": {}, "targetDependencies": {} -} +} \ No newline at end of file From 01a5da21b6a36baf93d72ff3797720a3018e28b8 Mon Sep 17 00:00:00 2001 From: Seppo Takalo Date: Mon, 19 Oct 2015 13:54:55 +0300 Subject: [PATCH 043/154] version v1.0.0 --- module.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/module.json b/module.json index 8e00dc32f5..aabd6723d7 100644 --- a/module.json +++ b/module.json @@ -1,6 +1,6 @@ { "name": "nanostack-randlib", - "version": "0.0.5", + "version": "1.0.0", "description": "Pseudo random library used by mbed-client and 6LoWPAN stack.", "keywords": [], "homepage": "https://github.com/ARMmbed/mbed-client-randlib", @@ -10,4 +10,4 @@ ], "dependencies": {}, "targetDependencies": {} -} \ No newline at end of file +} From 686fc7dea54266af1c547a0fadf04d1a1434ddd7 Mon Sep 17 00:00:00 2001 From: Arto Kinnunen Date: Wed, 28 Oct 2015 08:50:40 +0200 Subject: [PATCH 044/154] Update dependencies and remove compiler warnings -Updated dependencies -Removed compiler warnings --- coap-service-nanomesh/coap_server_impl.c | 1 + module.json | 10 ++-- source/coap_server.c | 24 ++------- source/coap_service.c | 69 +++++++++++++++++++++--- source/include/coap_server.h | 5 -- source/include/coap_server_impl.h | 2 - 6 files changed, 74 insertions(+), 37 deletions(-) diff --git a/coap-service-nanomesh/coap_server_impl.c b/coap-service-nanomesh/coap_server_impl.c index d353c69f43..3d7310d87d 100644 --- a/coap-service-nanomesh/coap_server_impl.c +++ b/coap-service-nanomesh/coap_server_impl.c @@ -30,6 +30,7 @@ static int8_t coap_service_tasklet = -1; +static int8_t coap_server_service_tasklet_generated(void); void coap_server_service_tasklet(arm_event_s * event); int8_t coap_server_start(void) diff --git a/module.json b/module.json index 9501aa9e55..55f3889686 100644 --- a/module.json +++ b/module.json @@ -19,10 +19,10 @@ "source/include" ], "dependencies": { - "nanostack-libservice": "~3.0.0", - "mbed-client-c": "~0.1.6", - "sal-stack-nanostack-eventloop": "~0.0.8", - "sal-stack-nanostack": "^2.1.0" + "nanostack-libservice": "^3.0.0", + "mbed-client-c": "^1.1.0", + "sal-stack-nanostack-eventloop": "^1.0.0", + "sal-stack-nanostack": "^3.0.0" }, "targetDependencies": {} -} \ No newline at end of file +} diff --git a/source/coap_server.c b/source/coap_server.c index 838f01de5f..88f6c142c4 100644 --- a/source/coap_server.c +++ b/source/coap_server.c @@ -26,6 +26,8 @@ //typedef struct sn_coap_hdr_s sn_coap_hdr_s; +static coap_service_session_t *coap_service_find_by_service(int8_t service_id); + /* Coap service class handlers*/ void coap_server_delete_session(int8_t service_id) @@ -43,27 +45,9 @@ void coap_server_delete_session(int8_t service_id) } -static coap_service_session_t *coap_service_search_from_list(int8_t interface_id) -{ - coap_service_session_t *this = NULL; - - /* - ns_list_foreach(coap_service_session_t,cur_ptr, &instance_list) - { - if(cur_ptr->interface_id == interface_id) - { - this = cur_ptr; - break; - } - } - */ - - return this; -} - - static coap_service_session_t *coap_service_find_by_service(int8_t service_id) { + (void)service_id; coap_service_session_t *this = NULL; /* @@ -90,6 +74,8 @@ static coap_service_session_t *coap_service_find_by_service(int8_t service_id) */ int8_t coap_server_service_init(int8_t interface_id, uint16_t listen_port, uint8_t service_options) { + (void)listen_port; + (void)service_options; int retVal = -1; int8_t socketInstance; diff --git a/source/coap_service.c b/source/coap_service.c index ec2365732f..f2e88488e6 100644 --- a/source/coap_service.c +++ b/source/coap_service.c @@ -41,80 +41,137 @@ int8_t coap_service_initialize(int8_t interface_id, uint16_t listen_port, uint8_ int8_t coap_service_register_uri(int8_t service_id, const char *uri, uint8_t allowed_method, coap_service_request_recv_cb *request_recv_cb) { + (void)service_id; + (void)uri; + (void)allowed_method; + (void)request_recv_cb; return -1; } int8_t coap_service_unregister_uri(int8_t service_id, const char *uri) { + (void)service_id; + (void)uri; return -1; } -uint16_t coap_service_send(int8_t service_id, uint8_t options, const uint8_t addr[static 16], uint16_t destination_port, sn_coap_hdr_s *request_ptr, coap_service_response_recv *request_response_cb) +uint16_t coap_service_send(int8_t service_id, uint8_t options, const uint8_t addr[static 16], uint16_t destination_port, sn_coap_hdr_s *request_ptr, coap_service_response_recv *request_ptr2) { + (void)service_id; + (void)options; + (void)destination_port; + (void)addr; + (void)request_ptr; + (void)request_ptr2; return 0; } void coap_service_delete( int8_t service_id ) { - + (void)service_id; } int requst_recv_cb(int8_t service_id, uint8_t source_address[static 16], uint16_t source_port, sn_coap_hdr_s *request_ptr) { + (void)service_id; + (void)source_address; + (void)source_port; + (void)request_ptr; return -1; } int security_start_ptr(int8_t service_id, uint8_t EUI64[static 8]) { + (void)service_id; + (void)EUI64; return -1; } int security_done_cb(int8_t service_id, uint8_t EUI64[static 8], uint8_t keyblock[static 40]) { + (void)service_id; + (void)EUI64; + (void)keyblock; return -1; } int coap_service_security_key_set(int8_t service_id, uint8_t EUI64[static 8], uint8_t *PSKd_ptr, uint8_t PSKd_len) { - + (void)service_id; + (void)EUI64; + (void)PSKd_ptr; + (void)PSKd_len; return -1; } int requst_response_cb(uint16_t msg_id, sn_coap_hdr_s *response_ptr) { - + (void)msg_id; + (void)response_ptr; return -1; } int virtual_socket_send(int8_t service_id, uint8_t destination_addr_ptr[static 16], uint16_t port, uint8_t *data_ptr, uint16_t data_len) { - return -1; + (void)service_id; + (void)destination_addr_ptr; + (void)port; + (void)data_ptr; + (void)data_len; + return -1; } int16_t coap_service_virtual_socket_recv(int8_t service_id, uint8_t source_addr_ptr[static 16], uint16_t port, uint8_t *data_ptr, uint16_t data_len) { + (void)service_id; + (void)source_addr_ptr; + (void)port; + (void)data_ptr; + (void)data_len; return -1; } int16_t coap_service_virtual_socket_set_cb(int8_t service_id, coap_service_virtual_socket_send_cb *virtual_socket_send) { - + (void)service_id; + (void)virtual_socket_send; return -1; } int8_t coap_service_register_uri_secure_cb_set(int8_t service_id, coap_service_security_start_cb *security_start_ptr, coap_service_security_done_cb *security_done_cb) { + (void)service_id; + (void)security_start_ptr; + (void)security_done_cb; return -1; } uint16_t coap_service_request_send(int8_t service_id, uint8_t options, const uint8_t destination_addr[static 16], uint16_t destination_port, uint8_t msg_type, uint8_t msg_code, const char *uri, uint8_t cont_type, const uint8_t *payload_ptr, uint16_t payload_len, coap_service_response_recv *request_response_cb) { + (void)service_id; + (void)options; + (void)destination_addr; + (void)destination_port; + (void)msg_type; + (void)msg_code; + (void)uri; + (void)cont_type; + (void)payload_ptr; + (void)payload_len; + (void)request_response_cb; return 0; } int8_t coap_service_response_send(int8_t service_id, uint8_t options, sn_coap_hdr_s *request_ptr, sn_coap_msg_code_e message_code, int32_t content_type, const uint8_t *payload_ptr,uint16_t payload_len) { + (void)service_id; + (void)options; + (void)request_ptr; + (void)message_code; + (void)content_type; + (void)payload_ptr; + (void)payload_len; return -1; } diff --git a/source/include/coap_server.h b/source/include/coap_server.h index 98023a2e8b..1eb0222861 100644 --- a/source/include/coap_server.h +++ b/source/include/coap_server.h @@ -49,9 +49,4 @@ void coap_server_delete_session(int8_t service_id); int8_t coap_server_service_init(int8_t interface_id, uint16_t listen_port, uint8_t service_options); -coap_service_session_t *coap_service_search_from_list(int8_t interface_id); - -coap_service_session_t *coap_service_find_by_service(int8_t service_id); - - #endif /* COAP_SERVER_H_ */ diff --git a/source/include/coap_server_impl.h b/source/include/coap_server_impl.h index 2440b6f967..893c923d50 100644 --- a/source/include/coap_server_impl.h +++ b/source/include/coap_server_impl.h @@ -34,8 +34,6 @@ void *memory_allocation(uint16_t size); void memory_free(void* ptr); -static int8_t coap_server_service_tasklet_generated(void); - void coap_server_service_tasklet(arm_event_s * event); uint16_t socket_open(uint16_t listen_port, coap_service_request_recv_cb *requst_recv_cb); From 11461a7195ccf175ace4d1464d80dd5bc16f5732 Mon Sep 17 00:00:00 2001 From: Seppo Takalo Date: Fri, 6 Nov 2015 10:45:18 +0200 Subject: [PATCH 045/154] Update .gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index cc8856164e..cf68134e08 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ *.a +*.lib output From eb5aa4ef5901002217429e7325e78d8017d0847c Mon Sep 17 00:00:00 2001 From: Antti Kauppila Date: Mon, 21 Dec 2015 09:47:29 +0200 Subject: [PATCH 046/154] New CoAP service + unit tests --- .gitignore | 2 + .../CoAP_Server_unit_test_app.c | 31 - Makefile | 31 +- Makefile.test | 51 ++ coap-service-linux/coap_server_impl.c | 16 - coap-service-mbed/coap_server_impl.c | 16 - coap-service-nanomesh/coap_server_impl.c | 99 --- coap-service/coap_service_api.h | 172 ++--- junit_xsl.xslt | 101 +++ module.json | 3 +- source/coap_connection_handler.c | 679 ++++++++++++++++++ source/coap_message_handler.c | 372 ++++++++++ source/coap_security_handler.c | 396 ++++++++++ source/coap_server.c | 113 --- source/coap_service.c | 177 ----- source/coap_service_api.c | 450 ++++++++++++ source/include/coap_connection_handler.h | 48 ++ source/include/coap_message_handler.h | 67 ++ source/include/coap_security_handler.h | 73 ++ source/include/coap_server.h | 52 -- source/include/coap_server_impl.h | 41 -- test/coap-service/unittest/Makefile | 23 + test/coap-service/unittest/MakefileWorker.mk | 562 +++++++++++++++ .../unittest/coap_connection_handler/Makefile | 23 + .../coap_connection_handlertest.cpp | 62 ++ .../unittest/coap_connection_handler/main.cpp | 15 + .../test_coap_connection_handler.c | 467 ++++++++++++ .../test_coap_connection_handler.h | 36 + .../unittest/coap_message_handler/Makefile | 23 + .../coap_message_handlertest.cpp | 52 ++ .../unittest/coap_message_handler/main.cpp | 15 + .../test_coap_message_handler.c | 298 ++++++++ .../test_coap_message_handler.h | 26 + .../unittest/coap_security_handler/Makefile | 23 + .../coap_security_handlertest.cpp | 55 ++ .../unittest/coap_security_handler/main.cpp | 15 + .../test_coap_security_handler.c | 281 ++++++++ .../test_coap_security_handler.h | 33 + .../unittest/coap_service_api/Makefile | 24 + .../coap_service_api/coap_service_apitest.cpp | 72 ++ .../unittest/coap_service_api/main.cpp | 15 + .../coap_service_api/test_coap_service_api.c | 407 +++++++++++ .../coap_service_api/test_coap_service_api.h | 41 ++ .../unittest/makefile_defines.txt | 42 ++ test/coap-service/unittest/run_tests | 34 + test/coap-service/unittest/run_tests~ | 34 + .../unittest/stub/6lowpan_iphc_stub.c | 93 +++ .../unittest/stub/6lowpan_mesh_stub.c | 74 ++ .../coap-service/unittest/stub/address_stub.c | 230 ++++++ .../coap-service/unittest/stub/address_stub.h | 21 + .../unittest/stub/buffer_dyn_stub.c | 63 ++ .../stub/coap_connection_handler_stub.c | 59 ++ .../stub/coap_connection_handler_stub.h | 32 + .../unittest/stub/coap_message_handler_stub.c | 55 ++ .../unittest/stub/coap_message_handler_stub.h | 29 + .../stub/coap_security_handler_stub.c | 75 ++ .../stub/coap_security_handler_stub.h | 24 + .../unittest/stub/coap_service_api_stub.c | 63 ++ .../unittest/stub/common_functions_stub.c | 116 +++ test/coap-service/unittest/stub/cudp_stub.c | 36 + .../unittest/stub/dhcp_service_api_stub.c | 157 ++++ .../unittest/stub/eventOS_event_stub.c | 21 + .../unittest/stub/eventOS_event_stub.h | 22 + test/coap-service/unittest/stub/icmpv6_stub.c | 141 ++++ .../unittest/stub/iphc_compress_stub.c | 28 + .../unittest/stub/iphc_decompress_stub.c | 23 + .../unittest/stub/ipv6_routing_table_stub.c | 184 +++++ test/coap-service/unittest/stub/ipv6_stub.c | 99 +++ .../unittest/stub/libDHCPv6_server_stub.c | 56 ++ .../unittest/stub/libDHCPv6_stub.c | 212 ++++++ .../unittest/stub/lowpan_context_stub.c | 39 + .../unittest/stub/mac_data_poll_stub.c | 84 +++ .../unittest/stub/mac_mlme_stub.c | 221 ++++++ .../unittest/stub/mac_pairwise_key_stub.c | 78 ++ .../stub/mac_security_interface_stub.c | 106 +++ .../coap-service/unittest/stub/mbedtls_stub.c | 310 ++++++++ .../coap-service/unittest/stub/mbedtls_stub.h | 49 ++ .../unittest/stub/mle_service_stub.c | 220 ++++++ test/coap-service/unittest/stub/mle_stub.c | 342 +++++++++ test/coap-service/unittest/stub/mle_stub.h | 21 + .../coap-service/unittest/stub/mle_tlv_stub.c | 130 ++++ .../unittest/stub/multicast_stub.c | 52 ++ test/coap-service/unittest/stub/nd_proxy.c | 20 + .../unittest/stub/nd_proxy_stub.c | 56 ++ .../unittest/stub/nd_router_object_stub.c | 242 +++++++ .../unittest/stub/neighbor_cache_stub.c | 50 ++ test/coap-service/unittest/stub/net_stub.c | 279 +++++++ .../coap-service/unittest/stub/ns_list_stub.c | 9 + .../unittest/stub/ns_timer_stub.c | 57 ++ .../unittest/stub/ns_timer_stub.h | 19 + test/coap-service/unittest/stub/ns_trace.c | 10 + .../unittest/stub/ns_trace_stub.c | 202 ++++++ .../unittest/stub/nsdynmemLIB_stub.c | 48 ++ .../unittest/stub/nsdynmemLIB_stub.h | 29 + .../stub/protocol_6lowpan_bootstrap_stub.c | 162 +++++ .../stub/protocol_6lowpan_interface_stub.c | 75 ++ .../unittest/stub/protocol_6lowpan_stub.c | 145 ++++ .../unittest/stub/protocol_core_stub.c | 300 ++++++++ .../stub/protocol_interface_driver_stub.c | 14 + .../unittest/stub/protocol_ipv6_stub.c | 169 +++++ .../coap-service/unittest/stub/randLIB_stub.c | 47 ++ .../unittest/stub/routing_table_stub.c | 128 ++++ .../coap-service/unittest/stub/rpl_obj_stub.c | 392 ++++++++++ .../unittest/stub/security_lib_stub.c | 35 + test/coap-service/unittest/stub/shalib_stub.c | 58 ++ .../unittest/stub/sn_coap_builder_stub.c | 55 ++ .../unittest/stub/sn_coap_builder_stub.h | 13 + .../unittest/stub/sn_coap_parser_stub.c | 107 +++ .../unittest/stub/sn_coap_parser_stub.h | 13 + .../unittest/stub/sn_coap_protocol_stub.c | 96 +++ .../unittest/stub/sn_coap_protocol_stub.h | 18 + .../unittest/stub/socket_api_stub.c | 118 +++ .../unittest/stub/socket_api_stub.h | 31 + test/coap-service/unittest/stub/socket_stub.c | 93 +++ test/coap-service/unittest/stub/socket_stub.h | 24 + .../unittest/stub/system_timer_stub.c | 59 ++ test/coap-service/unittest/stub/tcp_stub.c | 56 ++ .../unittest/stub/thread_beacon_stub.c | 65 ++ .../unittest/stub/thread_bootstrap_stub.c | 248 +++++++ .../stub/thread_commissioning_if_stub.c | 67 ++ .../unittest/stub/thread_dhcpv6_client_stub.c | 77 ++ .../unittest/stub/thread_dynamic_reed_stub.c | 32 + .../stub/thread_host_bootstrap_stub.c | 87 +++ .../stub/thread_joiner_application_stub.c | 63 ++ .../stub/thread_management_api_stub.c | 48 ++ .../stub/thread_management_client_stub.c | 59 ++ .../unittest/stub/thread_management_if_stub.c | 305 ++++++++ .../stub/thread_management_server_stub.c | 55 ++ .../unittest/stub/thread_meshcop_lib_stub.c | 47 ++ .../unittest/stub/thread_nd_stub.c | 85 +++ .../stub/thread_network_data_lib_stub.c | 79 ++ .../stub/thread_network_data_storage_stub.c | 287 ++++++++ .../unittest/stub/thread_network_synch_stub.c | 21 + .../stub/thread_router_bootstrap_stub.c | 137 ++++ .../stub/thread_routerid_server_stub.c | 31 + .../unittest/stub/thread_routing_stub.c | 165 +++++ test/coap-service/unittest/stub/thread_stub.c | 373 ++++++++++ .../unittest/stub/thread_test_api_stub.c | 70 ++ .../coap-service/unittest/stub/timeout_stub.c | 15 + xsl_script.sh | 35 + 140 files changed, 14246 insertions(+), 667 deletions(-) delete mode 100644 CoAP_Server_unit_test/CoAP_Server_unit_test_app.c create mode 100644 Makefile.test delete mode 100644 coap-service-linux/coap_server_impl.c delete mode 100644 coap-service-mbed/coap_server_impl.c delete mode 100644 coap-service-nanomesh/coap_server_impl.c create mode 100644 junit_xsl.xslt create mode 100644 source/coap_connection_handler.c create mode 100644 source/coap_message_handler.c create mode 100644 source/coap_security_handler.c delete mode 100644 source/coap_server.c delete mode 100644 source/coap_service.c create mode 100644 source/coap_service_api.c create mode 100644 source/include/coap_connection_handler.h create mode 100644 source/include/coap_message_handler.h create mode 100644 source/include/coap_security_handler.h delete mode 100644 source/include/coap_server.h delete mode 100644 source/include/coap_server_impl.h create mode 100755 test/coap-service/unittest/Makefile create mode 100755 test/coap-service/unittest/MakefileWorker.mk create mode 100644 test/coap-service/unittest/coap_connection_handler/Makefile create mode 100644 test/coap-service/unittest/coap_connection_handler/coap_connection_handlertest.cpp create mode 100644 test/coap-service/unittest/coap_connection_handler/main.cpp create mode 100644 test/coap-service/unittest/coap_connection_handler/test_coap_connection_handler.c create mode 100644 test/coap-service/unittest/coap_connection_handler/test_coap_connection_handler.h create mode 100644 test/coap-service/unittest/coap_message_handler/Makefile create mode 100644 test/coap-service/unittest/coap_message_handler/coap_message_handlertest.cpp create mode 100644 test/coap-service/unittest/coap_message_handler/main.cpp create mode 100644 test/coap-service/unittest/coap_message_handler/test_coap_message_handler.c create mode 100644 test/coap-service/unittest/coap_message_handler/test_coap_message_handler.h create mode 100644 test/coap-service/unittest/coap_security_handler/Makefile create mode 100644 test/coap-service/unittest/coap_security_handler/coap_security_handlertest.cpp create mode 100644 test/coap-service/unittest/coap_security_handler/main.cpp create mode 100644 test/coap-service/unittest/coap_security_handler/test_coap_security_handler.c create mode 100644 test/coap-service/unittest/coap_security_handler/test_coap_security_handler.h create mode 100644 test/coap-service/unittest/coap_service_api/Makefile create mode 100644 test/coap-service/unittest/coap_service_api/coap_service_apitest.cpp create mode 100644 test/coap-service/unittest/coap_service_api/main.cpp create mode 100644 test/coap-service/unittest/coap_service_api/test_coap_service_api.c create mode 100644 test/coap-service/unittest/coap_service_api/test_coap_service_api.h create mode 100755 test/coap-service/unittest/makefile_defines.txt create mode 100755 test/coap-service/unittest/run_tests create mode 100755 test/coap-service/unittest/run_tests~ create mode 100644 test/coap-service/unittest/stub/6lowpan_iphc_stub.c create mode 100644 test/coap-service/unittest/stub/6lowpan_mesh_stub.c create mode 100644 test/coap-service/unittest/stub/address_stub.c create mode 100644 test/coap-service/unittest/stub/address_stub.h create mode 100644 test/coap-service/unittest/stub/buffer_dyn_stub.c create mode 100644 test/coap-service/unittest/stub/coap_connection_handler_stub.c create mode 100644 test/coap-service/unittest/stub/coap_connection_handler_stub.h create mode 100644 test/coap-service/unittest/stub/coap_message_handler_stub.c create mode 100644 test/coap-service/unittest/stub/coap_message_handler_stub.h create mode 100644 test/coap-service/unittest/stub/coap_security_handler_stub.c create mode 100644 test/coap-service/unittest/stub/coap_security_handler_stub.h create mode 100644 test/coap-service/unittest/stub/coap_service_api_stub.c create mode 100644 test/coap-service/unittest/stub/common_functions_stub.c create mode 100644 test/coap-service/unittest/stub/cudp_stub.c create mode 100644 test/coap-service/unittest/stub/dhcp_service_api_stub.c create mode 100644 test/coap-service/unittest/stub/eventOS_event_stub.c create mode 100644 test/coap-service/unittest/stub/eventOS_event_stub.h create mode 100644 test/coap-service/unittest/stub/icmpv6_stub.c create mode 100644 test/coap-service/unittest/stub/iphc_compress_stub.c create mode 100644 test/coap-service/unittest/stub/iphc_decompress_stub.c create mode 100644 test/coap-service/unittest/stub/ipv6_routing_table_stub.c create mode 100644 test/coap-service/unittest/stub/ipv6_stub.c create mode 100644 test/coap-service/unittest/stub/libDHCPv6_server_stub.c create mode 100644 test/coap-service/unittest/stub/libDHCPv6_stub.c create mode 100644 test/coap-service/unittest/stub/lowpan_context_stub.c create mode 100644 test/coap-service/unittest/stub/mac_data_poll_stub.c create mode 100644 test/coap-service/unittest/stub/mac_mlme_stub.c create mode 100644 test/coap-service/unittest/stub/mac_pairwise_key_stub.c create mode 100644 test/coap-service/unittest/stub/mac_security_interface_stub.c create mode 100644 test/coap-service/unittest/stub/mbedtls_stub.c create mode 100644 test/coap-service/unittest/stub/mbedtls_stub.h create mode 100644 test/coap-service/unittest/stub/mle_service_stub.c create mode 100644 test/coap-service/unittest/stub/mle_stub.c create mode 100644 test/coap-service/unittest/stub/mle_stub.h create mode 100644 test/coap-service/unittest/stub/mle_tlv_stub.c create mode 100644 test/coap-service/unittest/stub/multicast_stub.c create mode 100644 test/coap-service/unittest/stub/nd_proxy.c create mode 100644 test/coap-service/unittest/stub/nd_proxy_stub.c create mode 100644 test/coap-service/unittest/stub/nd_router_object_stub.c create mode 100644 test/coap-service/unittest/stub/neighbor_cache_stub.c create mode 100644 test/coap-service/unittest/stub/net_stub.c create mode 100644 test/coap-service/unittest/stub/ns_list_stub.c create mode 100644 test/coap-service/unittest/stub/ns_timer_stub.c create mode 100644 test/coap-service/unittest/stub/ns_timer_stub.h create mode 100644 test/coap-service/unittest/stub/ns_trace.c create mode 100644 test/coap-service/unittest/stub/ns_trace_stub.c create mode 100644 test/coap-service/unittest/stub/nsdynmemLIB_stub.c create mode 100644 test/coap-service/unittest/stub/nsdynmemLIB_stub.h create mode 100644 test/coap-service/unittest/stub/protocol_6lowpan_bootstrap_stub.c create mode 100644 test/coap-service/unittest/stub/protocol_6lowpan_interface_stub.c create mode 100644 test/coap-service/unittest/stub/protocol_6lowpan_stub.c create mode 100644 test/coap-service/unittest/stub/protocol_core_stub.c create mode 100644 test/coap-service/unittest/stub/protocol_interface_driver_stub.c create mode 100644 test/coap-service/unittest/stub/protocol_ipv6_stub.c create mode 100644 test/coap-service/unittest/stub/randLIB_stub.c create mode 100644 test/coap-service/unittest/stub/routing_table_stub.c create mode 100644 test/coap-service/unittest/stub/rpl_obj_stub.c create mode 100644 test/coap-service/unittest/stub/security_lib_stub.c create mode 100644 test/coap-service/unittest/stub/shalib_stub.c create mode 100644 test/coap-service/unittest/stub/sn_coap_builder_stub.c create mode 100644 test/coap-service/unittest/stub/sn_coap_builder_stub.h create mode 100644 test/coap-service/unittest/stub/sn_coap_parser_stub.c create mode 100644 test/coap-service/unittest/stub/sn_coap_parser_stub.h create mode 100644 test/coap-service/unittest/stub/sn_coap_protocol_stub.c create mode 100644 test/coap-service/unittest/stub/sn_coap_protocol_stub.h create mode 100644 test/coap-service/unittest/stub/socket_api_stub.c create mode 100644 test/coap-service/unittest/stub/socket_api_stub.h create mode 100644 test/coap-service/unittest/stub/socket_stub.c create mode 100644 test/coap-service/unittest/stub/socket_stub.h create mode 100644 test/coap-service/unittest/stub/system_timer_stub.c create mode 100644 test/coap-service/unittest/stub/tcp_stub.c create mode 100644 test/coap-service/unittest/stub/thread_beacon_stub.c create mode 100644 test/coap-service/unittest/stub/thread_bootstrap_stub.c create mode 100644 test/coap-service/unittest/stub/thread_commissioning_if_stub.c create mode 100644 test/coap-service/unittest/stub/thread_dhcpv6_client_stub.c create mode 100644 test/coap-service/unittest/stub/thread_dynamic_reed_stub.c create mode 100644 test/coap-service/unittest/stub/thread_host_bootstrap_stub.c create mode 100644 test/coap-service/unittest/stub/thread_joiner_application_stub.c create mode 100644 test/coap-service/unittest/stub/thread_management_api_stub.c create mode 100644 test/coap-service/unittest/stub/thread_management_client_stub.c create mode 100644 test/coap-service/unittest/stub/thread_management_if_stub.c create mode 100644 test/coap-service/unittest/stub/thread_management_server_stub.c create mode 100644 test/coap-service/unittest/stub/thread_meshcop_lib_stub.c create mode 100644 test/coap-service/unittest/stub/thread_nd_stub.c create mode 100644 test/coap-service/unittest/stub/thread_network_data_lib_stub.c create mode 100644 test/coap-service/unittest/stub/thread_network_data_storage_stub.c create mode 100644 test/coap-service/unittest/stub/thread_network_synch_stub.c create mode 100644 test/coap-service/unittest/stub/thread_router_bootstrap_stub.c create mode 100644 test/coap-service/unittest/stub/thread_routerid_server_stub.c create mode 100644 test/coap-service/unittest/stub/thread_routing_stub.c create mode 100644 test/coap-service/unittest/stub/thread_stub.c create mode 100644 test/coap-service/unittest/stub/thread_test_api_stub.c create mode 100644 test/coap-service/unittest/stub/timeout_stub.c create mode 100755 xsl_script.sh diff --git a/.gitignore b/.gitignore index cf68134e08..80fbaf0da9 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ *.a *.lib output +lcov +coverage diff --git a/CoAP_Server_unit_test/CoAP_Server_unit_test_app.c b/CoAP_Server_unit_test/CoAP_Server_unit_test_app.c deleted file mode 100644 index f7fd55a825..0000000000 --- a/CoAP_Server_unit_test/CoAP_Server_unit_test_app.c +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright (c) 2015 ARM Limited. All rights reserved. - - * SPDX-License-Identifier: Apache-2.0 - * 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 -#include -#include "ns_types.h" -#include "coap_service_api.h" - -int main(void) { - printf("!!!CoAP Server test!!!"); /* prints !!!Hello World!!! */ - - int8_t service_id = 0; - - service_id = coap_service_initialize(0xff, 666, 0); - - return EXIT_SUCCESS; -} - diff --git a/Makefile b/Makefile index 74eb7ad692..c597dbd06b 100644 --- a/Makefile +++ b/Makefile @@ -20,37 +20,32 @@ # SERVLIB_DIR := ../libService override CFLAGS += -I$(SERVLIB_DIR)/libService/ -#override CFLAGS += -I$(SERVLIB_DIR)/libService/platform/ + +NANOSTACK_DIR := ../nanostack +override CFLAGS += -I$(NANOSTACK_DIR)/nanostack/ NSDLC_DIR := ../nsdl-c override CFLAGS += -I$(NSDLC_DIR)/nsdl-c EVENTLOOP_DIR := ../event-loop override CFLAGS += -I$(EVENTLOOP_DIR)/nanostack-event-loop/ -#override CFLAGS += -I$(EVENTLOOP_DIR)/event-loop/ - -#override CFLAGS += -I../libService/libService/ -#override CFLAGS += -I../nsdl-c/nsdl-c/ -#override CFLAGS += -I../event-loop/nanostack-event-loop/ - -LIB = libcoap-service.a - -SRCS := \ - source/coap_service.c \ - source/coap_server.c \ - coap-service-nanomesh/coap_server_impl.c \ - -override CFLAGS += -DVERSION='"$(VERSION)"' - +MBEDTLS_DIR := ../mbedtls +override CFLAGS += -I$(MBEDTLS_DIR)/configs -I$(MBEDTLS_DIR) -DMBEDTLS_CONFIG_FILE='' -I$(MBEDTLS_DIR)/include COAPSERVICE_DIR := ../coap-service override CFLAGS += -I$(COAPSERVICE_DIR)/coap-service/ override CFLAGS += -I$(COAPSERVICE_DIR)/source/include/ -#override CFLAGS += -Isource/coap-service/source/include/ -#override CFLAGS += -Icoap-service-nanomesh/include/ +LIB = libcoap-service.a +SRCS := \ + source/coap_connection_handler.c \ + source/coap_message_handler.c \ + source/coap_security_handler.c \ + source/coap_service_api.c \ + +override CFLAGS += -DVERSION='"$(VERSION)"' include ../libService/toolchain_rules.mk diff --git a/Makefile.test b/Makefile.test new file mode 100644 index 0000000000..8a1c3063f7 --- /dev/null +++ b/Makefile.test @@ -0,0 +1,51 @@ +# +# Makefile.test for COAP service unit tests +# + +# List of subdirectories to build +TEST_FOLDER := ./test/ +# List of unit test directories for libraries +UNITTESTS := $(sort $(dir $(wildcard $(TEST_FOLDER)*/unittest/*))) +TESTDIRS := $(UNITTESTS:%=build-%) +CLEANTESTDIRS := $(UNITTESTS:%=clean-%) +COVERAGEFILE := ./lcov/coverage.info + +.PHONY: test +test: $(TESTDIRS) + @rm -rf ./lcov + @rm -rf ./coverage + @mkdir -p lcov + @mkdir -p lcov/results + @mkdir coverage + @find ./test -name '*.xml' | xargs cp -t ./lcov/results/ + @rm -f lcov/index.xml + @./xsl_script.sh + @cp junit_xsl.xslt lcov/. + @xsltproc -o lcov/testresults.html lcov/junit_xsl.xslt lcov/index.xml + @rm -f lcov/junit_xsl.xslt + @rm -f lcov/index.xml + @find ./ -name '*.gcno' | xargs cp --backup=numbered -t ./coverage/ + @find ./ -name '*.gcda' | xargs cp --backup=numbered -t ./coverage/ + @gcovr --object-directory ./coverage --exclude-unreachable-branches -e '.*/builds/.*' -e '.*/test/.*' -e '.*/yotta_modules/.*' -e '.*/stub/.*' -x -o ./lcov/gcovr.xml + @lcov -d test/. -c -o $(COVERAGEFILE) + @lcov -q -r $(COVERAGEFILE) "/usr*" -o $(COVERAGEFILE) + @lcov -q -r $(COVERAGEFILE) "/test*" -o $(COVERAGEFILE) + @lcov -q -r $(COVERAGEFILE) "/mbed-client-libservice*" -o $(COVERAGEFILE) + @lcov -q -r $(COVERAGEFILE) "/libService*" -o $(COVERAGEFILE) + @genhtml -q $(COVERAGEFILE) --show-details --output-directory lcov/html + @echo coap-service unit tests built + +$(TESTDIRS): + @make -C $(@:build-%=%) + +$(CLEANDIRS): + @make -C $(@:clean-%=%) clean + +$(CLEANTESTDIRS): + @make -C $(@:clean-%=%) clean + +# Extend default clean rule +clean: clean-extra + +clean-extra: $(CLEANDIRS) \ + $(CLEANTESTDIRS) diff --git a/coap-service-linux/coap_server_impl.c b/coap-service-linux/coap_server_impl.c deleted file mode 100644 index a8c5de2178..0000000000 --- a/coap-service-linux/coap_server_impl.c +++ /dev/null @@ -1,16 +0,0 @@ -/* - * Copyright (c) 2015 ARM Limited. All rights reserved. - - * SPDX-License-Identifier: Apache-2.0 - * 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. - */ diff --git a/coap-service-mbed/coap_server_impl.c b/coap-service-mbed/coap_server_impl.c deleted file mode 100644 index a8c5de2178..0000000000 --- a/coap-service-mbed/coap_server_impl.c +++ /dev/null @@ -1,16 +0,0 @@ -/* - * Copyright (c) 2015 ARM Limited. All rights reserved. - - * SPDX-License-Identifier: Apache-2.0 - * 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. - */ diff --git a/coap-service-nanomesh/coap_server_impl.c b/coap-service-nanomesh/coap_server_impl.c deleted file mode 100644 index 3d7310d87d..0000000000 --- a/coap-service-nanomesh/coap_server_impl.c +++ /dev/null @@ -1,99 +0,0 @@ -/* - * Copyright (c) 2015 ARM Limited. All rights reserved. - - * SPDX-License-Identifier: Apache-2.0 - * 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 -#include "ns_types.h" -//#include "eventOS_event.h" -//#include "eventOS_scheduler.h" -//#include "eventOS_event_timer.h" -#include "nsdynmemLIB.h" -#include "ns_list.h" -#include "coap_server_impl.h" - -#define COAP_SERVER_SERVICE_TASKLET_INIT 1 -#define COAP_SERVER_SERVICE_TIMER 2 -#define COAP_SERVER_SERVICE_TIMER_ID 1 -#define COAP_TIMER_UPDATE_PERIOD_IN_SECONDS 10 - -static int8_t coap_service_tasklet = -1; - -static int8_t coap_server_service_tasklet_generated(void); -void coap_server_service_tasklet(arm_event_s * event); - -int8_t coap_server_start(void) -{ - int8_t ret_val = -1; - - ret_val = coap_server_service_tasklet_generated(); - - return ret_val; -} - - -static int8_t coap_server_service_tasklet_generated(void) -{ - int8_t ret_val; - - if(coap_service_tasklet == -1) - { - //coap_service_tasklet = eventOS_event_handler_create(&coap_server_service_tasklet,COAP_SERVER_SERVICE_TASKLET_INIT); - ret_val = coap_service_tasklet; - } - - // for unit testing now setted to 1; - ret_val = 1; - - return ret_val; -} - -void coap_server_service_tasklet(arm_event_s * event) -{ - - if(event->event_type == COAP_SERVER_SERVICE_TASKLET_INIT) - { - //We should define periodically timer service!! - //eventOS_event_timer_request(COAP_SERVER_SERVICE_TIMER_ID, COAP_SERVER_SERVICE_TIMER,coap_service_tasklet, (COAP_TIMER_UPDATE_PERIOD_IN_SECONDS *1000)); - } - else if(event->event_type == COAP_SERVER_SERVICE_TIMER) - { - //eventOS_event_timer_request(COAP_SERVER_SERVICE_TIMER_ID, COAP_SERVER_SERVICE_TIMER,coap_service_tasklet, (COAP_TIMER_UPDATE_PERIOD_IN_SECONDS *1000)); - } - -} - -uint16_t socket_open(uint16_t listen_port, coap_service_request_recv_cb *requst_recv_cb) -{ - - return 0; -} - -void *memory_allocation(uint16_t size) -{ - - - if(size) - return malloc(size); - else - return 0; -} - -void memory_free(void* ptr) -{ - - if(ptr) - free(ptr); - -} diff --git a/coap-service/coap_service_api.h b/coap-service/coap_service_api.h index 6c97f00287..98529cc18a 100755 --- a/coap-service/coap_service_api.h +++ b/coap-service/coap_service_api.h @@ -1,18 +1,5 @@ /* * Copyright (c) 2015 ARM Limited. All rights reserved. - - * SPDX-License-Identifier: Apache-2.0 - * 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 COAP_SERVICE_API_H_ @@ -42,7 +29,10 @@ extern "C" { #define COAP_SERVICE_OPTIONS_NONE 0x00 #define COAP_SERVICE_OPTIONS_VIRTUAL_SOCKET 0x01 #define COAP_SERVICE_OPTIONS_SECURE 0x02 - +#define COAP_SERVICE_OPTIONS_EPHEMERAL_PORT 0x04 +/** Link-layer security bypass option is set*/ +#define COAP_SERVICE_OPTIONS_SECURE_BYPASS 0x80 + // Bits for request options #define COAP_REQUEST_OPTIONS_NONE 0x00 #define COAP_REQUEST_OPTIONS_ADDRESS_DEFAULT 0x00//!< default is not setting either short or long. @@ -51,28 +41,17 @@ extern "C" { #define COAP_REQUEST_OPTIONS_MULTICAST 0x04 //!< indicates that CoAP library support multicasting #define COAP_REQUEST_OPTIONS_SECURE_BYPASS 0x08 - /** - * \brief Initialise server instance. + * \brief Service message response receive callback. * - * Initialise CoAP services for the registered application. + * Function that handles CoAP service message receiving and parsing * - * \param interface_id Informs registered application interface id. This parameter is passed to socket implementation. - * \param listen_port Port that Application wants to use for communicate with coap server. - * \param service_options Options of the current service. + * \param msg_id Id number of the current message. + * \param response_ptr Pointer to CoAP header structure. * - * \return service_id / -1 for failure - */ -int8_t coap_service_initialize(int8_t interface_id, uint16_t listen_port, uint8_t service_options); - -/** - * \brief Service delete - * - * Removes all data related to this instance - * - * \param service_id Id number of the current service. - */ -void coap_service_delete( int8_t service_id ); + * \return 0 for success / -1 for failure + */ +typedef int coap_service_response_recv(int8_t service_id, uint16_t msg_id, sn_coap_hdr_s *response_ptr); /** * \brief CoAP service request callback @@ -91,14 +70,15 @@ typedef int coap_service_request_recv_cb(int8_t service_id, uint8_t source_addre /** * \brief Security service start callback * - * Starts security service handling. + * Starts security service handling and fetches device password. * * \param service_id Id number of the current service. - * \param EUI64 64 bit global identifier + * \param address Address of sender + * \param port Port of the device * - * \return 0 for success / -1 for failure + * \return 0 for success / -1 for failure */ -typedef int coap_service_security_start_cb(int8_t service_id, uint8_t EUI64[static 8]); +typedef int coap_service_security_start_cb(int8_t service_id, uint8_t address[static 16], uint16_t port, uint8_t* pw, uint8_t *pw_len); /** * \brief CoAP service security done callback @@ -106,38 +86,58 @@ typedef int coap_service_security_start_cb(int8_t service_id, uint8_t EUI64[stat * CoAP service security done callback function. * * \param service_id Id number of the current service. - * \param EUI64 64 bit global identifier + * \param address Address of sender * \param keyblock Security key (40 bits) * - * \return 0 for success / -1 for failure + * \return 0 for success / -1 for failure */ -typedef int coap_service_security_done_cb(int8_t service_id, uint8_t EUI64[static 8], uint8_t keyblock[static 40]); - +typedef int coap_service_security_done_cb(int8_t service_id, uint8_t address[static 16], uint8_t keyblock[static 40]); /** - * \brief Security service start callback + * \brief Initialise server instance. * - * Starts security service handling. + * Initialise Thread services for the registered application. * - * \param EUI64 64 bit global identifier - * \param PSKd_ptr Pointer to PSK key. - * \param PSKd_len Lenght of PSK key. + * \param interface_id Informs registered application interface id. This parameter is passed to socket implementation. + * \param listen_port Port that Application wants to use for communicate with coap server. + * \param service_options Options of the current service. + * \param *start_ptr Callback to inform security handling is started and to fetch device password. + * \param *security_done_cb Callback to inform security handling is done. * - * \return 0 for success / -1 for failure + * \return service_id / -1 for failure */ -int coap_service_security_key_set(int8_t service_id, uint8_t EUI64[static 8], uint8_t *PSKd_ptr, uint8_t PSKd_len); +extern int8_t coap_service_initialize(int8_t interface_id, uint16_t listen_port, uint8_t service_options, coap_service_security_start_cb *start_ptr, coap_service_security_done_cb *security_done_cb); /** - * \brief Service message response receive callback. + * \brief Service delete * - * Function that handles CoAP service message receiving and parsing + * Removes all data related to this instance * - * \param msg_id Id number of the current message. - * \param response_ptr Pointer to CoAP header structure. + * \param service_id Id number of the current service. + */ +extern void coap_service_delete( int8_t service_id ); + +/** + * \brief Close secure connection * - * \return 0 for success / -1 for failure - */ -typedef int coap_service_response_recv(int8_t service_id, uint16_t msg_id, sn_coap_hdr_s *response_ptr); + * Closes secure connection (if present), but leaves socket open. + * + * \param service_id Id number of the current service. + */ +extern void coap_service_close_secure_connection(int8_t service_id); + +/** + * \brief Sets password for device + * + * \param service_id Service id + * \param address Device address + * \param port Device port + * \param pw_ptr Pointer to password. + * \param pw_len Lenght of password. + * + * \return 0 for success / -1 for failure + */ +//int coap_service_security_key_set(int8_t service_id, uint8_t address[static 16], uint16_t port, uint8_t *pw_ptr, uint8_t pw_len); /** * \brief Virtual socket sent callback. @@ -150,9 +150,9 @@ typedef int coap_service_response_recv(int8_t service_id, uint16_t msg_id, sn_co * \param *data_ptr Pointer to the data. * \param data_len Lenght of the data. * - * \return 0 for success / -1 for failure + * \return 0 for success / -1 for failure */ -typedef int coap_service_virtual_socket_send_cb(int8_t service_id, uint8_t destination_addr_ptr[static 16], uint16_t port, uint8_t *data_ptr, uint16_t data_len); +typedef int coap_service_virtual_socket_send_cb(int8_t service_id, uint8_t destination_addr_ptr[static 16], uint16_t port, const uint8_t *data_ptr, uint16_t data_len); /** * \brief Virtual socket read. @@ -165,9 +165,9 @@ typedef int coap_service_virtual_socket_send_cb(int8_t service_id, uint8_t desti * \param *data_ptr Pointer to the data * \param data_len Lenght of the data * - * \return 0 for success / -1 for failure + * \return 0 for success / -1 for failure */ -int16_t coap_service_virtual_socket_recv(int8_t service_id, uint8_t source_addr_ptr[static 16], uint16_t port, uint8_t *data_ptr, uint16_t data_len); +extern int16_t coap_service_virtual_socket_recv(int8_t service_id, uint8_t source_addr_ptr[static 16], uint16_t port, uint8_t *data_ptr, uint16_t data_len); /** * \brief Set virtual socket @@ -177,9 +177,9 @@ int16_t coap_service_virtual_socket_recv(int8_t service_id, uint8_t source_addr_ * \param service_id Id number of the current service. * \param *send_method_ptr Callback to coap virtual socket. * - * \return 0 for success / -1 for failure + * \return 0 for success / -1 for failure */ -int16_t coap_service_virtual_socket_set_cb(int8_t service_id, coap_service_virtual_socket_send_cb *send_method_ptr); +extern int16_t coap_service_virtual_socket_set_cb(int8_t service_id, coap_service_virtual_socket_send_cb *send_method_ptr); /** * \brief Register unsecure callback methods to CoAP server @@ -192,9 +192,9 @@ int16_t coap_service_virtual_socket_set_cb(int8_t service_id, coap_service_virtu * \param allowed_method Informs method that is allowed to use (used defines described above). * \param *request_recv_cb CoAP service request receive callback function pointer. * - * \return 0 for success / -1 for failure + * \return 0 for success / -1 for failure */ -int8_t coap_service_register_uri(int8_t service_id, const char *uri, uint8_t allowed_method, coap_service_request_recv_cb *request_recv_cb); +extern int8_t coap_service_register_uri(int8_t service_id, const char *uri, uint8_t allowed_method, coap_service_request_recv_cb *request_recv_cb); /** * \brief Unregister unsecure callback methods to CoAP server @@ -204,41 +204,9 @@ int8_t coap_service_register_uri(int8_t service_id, const char *uri, uint8_t all * \param service_id Id number of the current service. * \param *uri Uri address. * - * \return 0 for success / -1 for failure + * \return 0 for success / -1 for failure */ -int8_t coap_service_unregister_uri(int8_t service_id, const char *uri); - - -/** - * \brief Register secure callback methods to CoAP server. - * - * Register application and informs CoAP services secure registery callback functions. - * - * \param service_id Id number of the current service. - * \param *start_ptr Callback to inform security handling is started. - * \param *security_done_cb Callback to inform security handling is done. - * - * \return -1 for failure - * instance_id For success (is used to identify registery) - * - */ -int8_t coap_service_register_uri_secure_cb_set(int8_t service_id, coap_service_security_start_cb *start_ptr, coap_service_security_done_cb *security_done_cb); - -/** - * \brief Sends CoAP service - * - * Build and sends CoAP service message. - * - * \param service_id Id number of the current service. - * \param options Options defined above. - * \param addr IPv6 address. - * \param destination_port Destination port - * \param request_ptr Pointer to CoAP header structure. - * \param *request_response_cb Callback to inform result of the request. - * - * \return msg_id Id number of the current message. - */ -uint16_t coap_service_send(int8_t service_id, uint8_t options, const uint8_t addr[static 16], uint16_t destination_port, sn_coap_hdr_s *request_ptr, coap_service_response_recv *request_response_cb); +extern int8_t coap_service_unregister_uri(int8_t service_id, const char *uri); /** * \brief Sends CoAP service request @@ -259,8 +227,8 @@ uint16_t coap_service_send(int8_t service_id, uint8_t options, const uint8_t add * * \return msg_id Id number of the current message. */ -uint16_t coap_service_request_send(int8_t service_id, uint8_t options, const uint8_t destination_addr[static 16], uint16_t destination_port, uint8_t msg_type, uint8_t msg_code, const char *uri, - uint8_t cont_type, const uint8_t *payload_ptr, uint16_t payload_len, coap_service_response_recv *request_response_cb); +extern uint16_t coap_service_request_send(int8_t service_id, uint8_t options, const uint8_t destination_addr[static 16], uint16_t destination_port, uint8_t msg_type, uint8_t msg_code, const char *uri, + uint8_t cont_type, const uint8_t *payload_ptr, uint16_t payload_len, coap_service_response_recv *request_response_cb); /** * \brief Sends CoAP service response @@ -268,14 +236,14 @@ uint16_t coap_service_request_send(int8_t service_id, uint8_t options, const uin * Build and sends CoAP service response message. * * \param service_id Id number of the current service. - * \param msg_id Message ID number. + * \param msg_id Message ID number. * \param options Options defined above. * \param response_ptr Pointer to CoAP header structure. * - * \return -1 For failure - *- 0 For success + * \return -1 For failure + *- 0 For success */ -int8_t coap_service_response_send(int8_t service_id, uint8_t options, sn_coap_hdr_s *request_ptr, sn_coap_msg_code_e message_code, int32_t content_type, const uint8_t *payload_ptr,uint16_t payload_len); +extern int8_t coap_service_response_send(int8_t service_id, uint8_t options, sn_coap_hdr_s *request_ptr, sn_coap_msg_code_e message_code, int32_t content_type, const uint8_t *payload_ptr,uint16_t payload_len); #ifdef __cplusplus } diff --git a/junit_xsl.xslt b/junit_xsl.xslt new file mode 100644 index 0000000000..7376b27f26 --- /dev/null +++ b/junit_xsl.xslt @@ -0,0 +1,101 @@ + + + + + + + + + +

+ Unittest report +

+ +

+ + Total tests run + , failures: + + + + + +

+
+ + +

+ +

+ + + + + + + + + + + +
Tests runTests failedOther errors
+
+ + + + + + + + +
Tests namePASS/FAILFailing caseReason
+
+ + + + + + + + + + + PASS + + + + + + + FAIL + + + + + + + + + + + + + + + + FAIL + + + + + + + + + + + + + +
\ No newline at end of file diff --git a/module.json b/module.json index 55f3889686..7c4c0da599 100644 --- a/module.json +++ b/module.json @@ -1,12 +1,11 @@ { "name": "coap-service", - "version": "0.0.11", + "version": "1.0.0", "description": "CoAP Service library", "keywords": [ "coap", "service" ], - "author": "Erno Tormikoski ", "repository": { "url": "git@github.com:ARMmbed/coap-service.git", "type": "git" diff --git a/source/coap_connection_handler.c b/source/coap_connection_handler.c new file mode 100644 index 0000000000..39b5b4402d --- /dev/null +++ b/source/coap_connection_handler.c @@ -0,0 +1,679 @@ +/* + * Copyright (c) 2015 ARM Limited. All rights reserved. + */ + +#include +#include "coap_connection_handler.h" +#include "coap_security_handler.h" +#include "ns_list.h" +#include "ns_trace.h" +#include "nsdynmemLIB.h" +#include "socket_api.h" +#include "net_interface.h" +#include "randLIB.h" +#include "eventOS_callback_timer.h" + +#define TRACE_GROUP "ThCH" + +typedef struct internal_socket_s { + thread_conn_handler_t *parent; + + uint16_t listen_port; + int8_t listen_socket; + + ns_address_t dest_addr; + size_t data_len; + uint8_t *data; + + bool real_socket; + uint8_t usage_counter; + bool is_secure; + + bool bypass_link_sec; + + ns_list_link_t link; +} internal_socket_t; + +static NS_LIST_DEFINE(socket_list, internal_socket_t, link); + +static void timer_cb(int8_t timer_id, uint16_t slots); +#define TIMER_FACTOR 20 /* mbedtls timer in ms, our timer in slots (50us), therefore 20 slots per ms */ +#define TIMER_STATE_CANCELLED -1 /* cancelled */ +#define TIMER_STATE_NO_EXPIRY 0 /* none of the delays is expired */ +#define TIMER_STATE_INT_EXPIRY 1 /* the intermediate delay only is expired */ +#define TIMER_STATE_FIN_EXPIRY 2 /* the final delay is expired */ +typedef struct secure_timer_s { + int8_t id; + int8_t state; + uint8_t cycles; + uint8_t cycle_count; +} secure_timer_t; + +typedef struct secure_session { + thread_security_t *sec_handler; //owned + internal_socket_t *parent; //not owned + + secure_timer_t timer; + + bool secure_done; + ns_list_link_t link; +} secure_session_t; + +static NS_LIST_DEFINE(secure_session_list, secure_session_t, link); +static int send_to_socket(int8_t socket_id, uint8_t *address_ptr, uint16_t port, const unsigned char *buf, size_t len); +static int receive_from_socket(int8_t socket_id, unsigned char *buf, size_t len); +static void start_timer(int8_t timer_id, uint32_t int_ms, uint32_t fin_ms); +static int timer_status(int8_t timer_id); + +static secure_session_t *secure_session_create(internal_socket_t *parent, uint8_t *address_ptr, uint16_t port) +{ + secure_session_t *this = ns_dyn_mem_alloc(sizeof(secure_session_t)); + if (!this || !address_ptr) { + return NULL; + } + memset(this, 0, sizeof(secure_session_t)); + + this->timer.id = eventOS_callback_timer_register(timer_cb); + if (this->timer.id == -1) { + tr_error("tasklet alloc failed"); + ns_dyn_mem_free(this); + return NULL; + } + + this->sec_handler = thread_security_create(parent->listen_socket, this->timer.id, address_ptr, port, &send_to_socket, + &receive_from_socket, &start_timer, &timer_status); + if( !this->sec_handler ){ + ns_dyn_mem_free(this); + return NULL; + } + this->parent = parent; + + this->secure_done = false; + ns_list_add_to_start(&secure_session_list, this); +// hack_save_remote_address(address_ptr, port); //TODO not bad hack + return this; +} + +static void secure_session_delete(secure_session_t *this) +{ + if (this) { + ns_list_remove(&secure_session_list, this); + if( this->sec_handler ){ + thread_security_destroy(this->sec_handler); + this->sec_handler = NULL; + } + ns_dyn_mem_free(this); + this = NULL; + } + + return; +} + +static void clear_secure_sessions(internal_socket_t *this){ + if( this ){ + ns_list_foreach_safe(secure_session_t, cur_ptr, &secure_session_list) { + if( cur_ptr->parent == this ){ + secure_session_delete(cur_ptr); + } + } + } +} + +static secure_session_t *secure_session_find_by_timer_id(int8_t timer_id) +{ + secure_session_t *this = NULL; + ns_list_foreach(secure_session_t, cur_ptr, &secure_session_list) { + if (cur_ptr->timer.id == timer_id) { + this = cur_ptr; + break; + } + } + return this; +} + +static secure_session_t *secure_session_find(internal_socket_t *parent, uint8_t *address_ptr, uint16_t port) +{ + secure_session_t *this = NULL; + ns_list_foreach(secure_session_t, cur_ptr, &secure_session_list) { + if( cur_ptr->sec_handler ){ + if (cur_ptr->parent == parent && cur_ptr->sec_handler->_remote_port == port && + memcmp(cur_ptr->sec_handler->_remote_address, address_ptr, 16) == 0) { + this = cur_ptr; + // hack_save_remote_address(address_ptr, port); + break; + } + } + } + return this; +} + + + +static void recv_sckt_msg(void *cb_res); +static void secure_recv_sckt_msg(void *cb_res); + +static internal_socket_t *int_socket_create(uint16_t listen_port, bool use_ephemeral_port, bool is_secure, bool real_socket, bool bypassSec) +{ + internal_socket_t *this = ns_dyn_mem_alloc(sizeof(internal_socket_t)); + if (!this) { + return NULL; + } + memset(this, 0, sizeof(internal_socket_t)); + + this->data_len = 0; + this->data = NULL; + + this->is_secure = is_secure; + this->usage_counter = 1; + + this->listen_port = listen_port; + this->real_socket = real_socket; + this->bypass_link_sec = bypassSec; + this->listen_socket = -1; + if( real_socket ){ + if( use_ephemeral_port ){ //socket_api creates ephemeral port if the one provided is 0 + listen_port = 0; + } + if( !is_secure ){ + this->listen_socket = socket_open(SOCKET_UDP, listen_port, recv_sckt_msg); + }else{ + this->listen_socket = socket_open(SOCKET_UDP, listen_port, secure_recv_sckt_msg); + } + // XXX API for this? May want to get clever to do recommended first query = 1 hop, retries = whole PAN + socket_setsockopt(this->listen_socket, SOCKET_IPPROTO_IPV6, SOCKET_IPV6_MULTICAST_HOPS, &(const int16_t) { + 16 + }, sizeof(int16_t)); + }else{ + this->listen_socket = -1; + } + + ns_list_add_to_start(&socket_list, this); + return this; +} + +static void int_socket_delete(internal_socket_t *this) +{ + if (this) { + this->usage_counter--; + if(this->usage_counter == 0){ + clear_secure_sessions(this); + ns_list_remove(&socket_list, this); + if( this->data ){ + ns_dyn_mem_free(this->data); + this->data = NULL; + } + ns_dyn_mem_free(this); + this = NULL; + } + } + + return; +} + +static internal_socket_t *int_socket_find_by_socket_id(int8_t id) +{ + internal_socket_t *this = NULL; + ns_list_foreach(internal_socket_t, cur_ptr, &socket_list) { + if( cur_ptr->listen_socket == id ) { + this = cur_ptr; + break; + } + } + return this; +} + +static internal_socket_t *int_socket_find(uint16_t port, bool is_secure, bool is_real_socket, bool bypassSec) +{ + internal_socket_t *this = NULL; + ns_list_foreach(internal_socket_t, cur_ptr, &socket_list) { + if( cur_ptr->listen_port == port && cur_ptr->real_socket == is_real_socket && + is_secure == cur_ptr->is_secure /*&& bypass_link_sec == bypassSec*/) { + this = cur_ptr; + break; + } + } + return this; +} + +static int send_to_socket(int8_t socket_id, uint8_t *address_ptr, uint16_t port, const unsigned char *buf, size_t len) +{ + internal_socket_t *sock = int_socket_find_by_socket_id(socket_id); + if(!sock){ + return -1; + } + if(!sock->real_socket){ + //In this case all clients will have socket_id -1 and socket will not have a real address + //so sock->dest_addr cannot be used here + int ret = sock->parent->_send_cb(sock->listen_socket, address_ptr, port, buf, len); + if( ret < 0 ) + return ret; + return len; + } + + int opt_name = SOCKET_IPV6_PREFER_SRC_6LOWPAN_SHORT; + int8_t securityLinkLayer = 1; + if( sock->bypass_link_sec ){ + securityLinkLayer = 0; + } + socket_setsockopt(sock->listen_socket, SOCKET_IPPROTO_IPV6, SOCKET_IPV6_ADDR_PREFERENCES, &opt_name, sizeof(int)); + socket_setsockopt(sock->listen_socket, SOCKET_IPPROTO_IPV6, SOCKET_LINK_LAYER_SECURITY, &securityLinkLayer, sizeof(int8_t)); + //For some reason socket_sendto returns 0 in success, while other socket impls return number of bytes sent!!! + int ret = socket_sendto(sock->listen_socket, &sock->dest_addr, (unsigned char*)buf, len); + if( ret < 0 ) + return ret; + return len; +} + +static int receive_from_socket(int8_t socket_id, unsigned char *buf, size_t len) +{ + internal_socket_t *sock = int_socket_find_by_socket_id(socket_id); + if( sock->data && sock->data_len > 0 ){ + memcpy( buf, sock->data, sock->data_len ); + int l = sock->data_len; + ns_dyn_mem_free(sock->data); + sock->data = NULL; + sock->data_len = 0; + return l; + } + return MBEDTLS_ERR_SSL_WANT_READ; +} + +/** + * Callback timer. Maybe called in interrupt context + * so keep it simple. + * TODO - might be better to use an event timer in conjunction with + * CoAP tasklet + */ +static void timer_cb(int8_t timer_id, uint16_t slots) +{ + (void)slots; /* No need to look at slots */ + + secure_session_t *sec = secure_session_find_by_timer_id(timer_id); + if( sec ){ + if (++sec->timer.cycle_count == sec->timer.cycles) { + /* We have counted the number of cycles - finish */ + sec->timer.state = TIMER_STATE_FIN_EXPIRY; + /* Stop the timer as we no longer need it */ + (void)eventOS_callback_timer_stop(sec->timer.id); /* We can ignore return; ID is valid */ + int error = coap_security_handler_continue_connecting(sec->sec_handler); + if(MBEDTLS_ERR_SSL_TIMEOUT == error) { + //TODO: How do we handle timeouts? + secure_session_delete(sec); + } + } else { + /* Intermediate expiry */ + sec->timer.state = TIMER_STATE_INT_EXPIRY; + } + } +} + +static void start_timer(int8_t timer_id, uint32_t int_ms, uint32_t fin_ms) +{ + secure_session_t *sec = secure_session_find_by_timer_id(timer_id); + if( sec ){ + if ((int_ms > 0) && (fin_ms > 0)) { + /* Note: as it stands, fin_ms is always 4 * int_ms, so cycles is always 4 but this may change */ + sec->timer.cycles = fin_ms/int_ms; + sec->timer.cycle_count = 0; + sec->timer.state = TIMER_STATE_NO_EXPIRY; + eventOS_callback_timer_start(sec->timer.id, int_ms * TIMER_FACTOR); + } else if (fin_ms == 0) { + /* fin_ms == 0 means cancel the timer */ + sec->timer.state = TIMER_STATE_CANCELLED; + (void)eventOS_callback_timer_stop(sec->timer.id); /* We can ignore return; ID will be valid */ + } + } +} + +static int timer_status(int8_t timer_id) +{ + secure_session_t *sec = secure_session_find_by_timer_id(timer_id); + if( sec ){ + return (int)sec->timer.state; + } + return TIMER_STATE_CANCELLED; +} + +static int read_data(socket_callback_t *sckt_data, internal_socket_t *sock, ns_address_t *src_address) +{ + sock->data_len = 0; + if (sckt_data->event_type == SOCKET_DATA && sckt_data->d_len > 0) { + if( sock->data ){ + ns_dyn_mem_free(sock->data); + sock->data = NULL; + } + sock->data = ns_dyn_mem_temporary_alloc(sckt_data->d_len); + if( !sock->data ){ + sock->data = NULL; + return -1; + } + sock->data_len = socket_read(sckt_data->socket_id, src_address, sock->data, sckt_data->d_len); + } + if( sock->data_len < 1){ + ns_dyn_mem_free(sock->data); + sock->data = NULL; + sock->data_len = 0; + return -1; + } + return 0; +} + +static void secure_recv_sckt_msg(void *cb_res) +{ + socket_callback_t *sckt_data = cb_res; + internal_socket_t *sock = int_socket_find_by_socket_id(sckt_data->socket_id); + ns_address_t src_address; + + if( sock && read_data(sckt_data, sock, &src_address) == 0 ){ + secure_session_t *session = secure_session_find(sock, src_address.address, src_address.identifier); + if( !session ){ + memcpy( sock->dest_addr.address, src_address.address, 16 ); + sock->dest_addr.identifier = src_address.identifier; + sock->dest_addr.type = src_address.type; + session = secure_session_create(sock, src_address.address, src_address.identifier); + } + + if( !session ){ + tr_err("secure_recv_sckt_msg session creation failed - OOM"); + return; + } + if( !session->sec_handler->_is_started ){ + uint8_t *pw = (uint8_t *)ns_dyn_mem_alloc(64); + uint8_t pw_len; + if( sock->parent->_get_password_cb && 0 == sock->parent->_get_password_cb(sock->listen_socket, src_address.address, src_address.identifier, pw, &pw_len)){ + int ret = coap_security_handler_connect(session->sec_handler, true, pw, pw_len); + //TODO: error handling + } + ns_dyn_mem_free(pw); + }else{ + if( !session->secure_done ){ + if( coap_security_handler_continue_connecting(session->sec_handler) == 0){ + session->secure_done = true; + if( sock->parent->_security_done_cb ){ + sock->parent->_security_done_cb(sock->listen_socket, src_address.address, + src_address.identifier, + session->sec_handler->_keyblk.value); + } + } + //TODO: error handling + }else{ + unsigned char *data = ns_dyn_mem_temporary_alloc(sock->data_len); + int len = 0; + len = coap_security_handler_read(session->sec_handler, data, sock->data_len); + if( len < 0 ){ + ns_dyn_mem_free(data); + if( len == MBEDTLS_ERR_SSL_PEER_CLOSE_NOTIFY ){ +// if( sock->parent->sec_conn_closed_cb ){ +// sock->parent->sec_conn_closed_cb(sock->listen_socket); + secure_session_delete( session ); +// } + } + }else{ + if( sock->parent->_recv_cb ){ + sock->parent->_recv_cb(sock->listen_socket, src_address.address, src_address.identifier, data, len); + } + ns_dyn_mem_free(data); + } + } + } + } +} + +static void recv_sckt_msg(void *cb_res) +{ + socket_callback_t *sckt_data = cb_res; + internal_socket_t *sock = int_socket_find_by_socket_id(sckt_data->socket_id); + ns_address_t src_address; + if( sock && read_data(sckt_data, sock, &src_address) == 0 ){ + if( sock->parent->_recv_cb ){ + sock->parent->_recv_cb(sock->listen_socket, src_address.address, src_address.identifier, sock->data, sock->data_len); + } + ns_dyn_mem_free(sock->data); + sock->data = NULL; + } +} + +int coap_connection_handler_virtual_recv(thread_conn_handler_t *handler, uint8_t address[static 16], uint16_t port, uint8_t *data_ptr, uint16_t data_len) +{ + if( !handler || !handler->socket ){ + return -1; + } + internal_socket_t *sock = handler->socket; + sock->data_len = data_len; + if( sock->data ){ + ns_dyn_mem_free(sock->data); + sock->data = NULL; + } + sock->data = ns_dyn_mem_temporary_alloc(data_len); + if( data_len > 0 && !sock->data ){ + return -1; + } + if( data_ptr ){ + memcpy(sock->data, data_ptr, data_len); + }else{ + if( sock->data ){ + ns_dyn_mem_free(sock->data); + sock->data = NULL; + } + } + + if( handler->socket->is_secure ){ + secure_session_t *session = secure_session_find(sock, address, port); + if( !session ){ + session = secure_session_create(sock, address, port); + } + if( !session ){ + tr_err("coap_connection_handler_virtual_recv session creation failed - OOM"); + return -1; + } + if( !session->sec_handler->_is_started ){ + uint8_t *pw = (uint8_t *)ns_dyn_mem_alloc(64); + uint8_t pw_len; + if( sock->parent->_get_password_cb && 0 == sock->parent->_get_password_cb(sock->listen_socket, address, port, pw, &pw_len)){ + int ret = coap_security_handler_connect(session->sec_handler, true, pw, pw_len); + //TODO: error handling + ns_dyn_mem_free(pw); + return 0; + }else{ + ns_dyn_mem_free(pw); + return -1; + } + }else{ + if( !session->secure_done ){ + if( coap_security_handler_continue_connecting(session->sec_handler) == 0){ + session->secure_done = true; + if( handler->_security_done_cb ){ + handler->_security_done_cb(sock->listen_socket, + address, port, + session->sec_handler->_keyblk.value); + } + return 0; + } + //TODO: error handling + }else{ + unsigned char *data = ns_dyn_mem_temporary_alloc(sock->data_len); + int len = 0; + len = coap_security_handler_read(session->sec_handler, data, sock->data_len); + if( len < 0 ){ + ns_dyn_mem_free(data); + if( len == MBEDTLS_ERR_SSL_PEER_CLOSE_NOTIFY ){ +// if( sock->parent->sec_conn_closed_cb ){ +// sock->parent->sec_conn_closed_cb(sock->listen_socket, address, port); + secure_session_delete( session ); + return 0; +// } + } + }else{ + if( sock->parent->_recv_cb ){ + sock->parent->_recv_cb(sock->listen_socket, address, port, data, len); + } + ns_dyn_mem_free(data); + data = NULL; + } + return 0; + } + } + }else{ + if( sock->parent->_recv_cb ){ + sock->parent->_recv_cb(sock->listen_socket, address, port, sock->data, sock->data_len); + } + if( sock->data ){ + ns_dyn_mem_free(sock->data); + sock->data = NULL; + } + return 0; + } + return -1; +} + +thread_conn_handler_t *connection_handler_create(receive_from_socket_cb *recv_from_cb, + send_to_socket_cb *send_to_cb, + get_pw_cb *pw_cb, + security_done_cb *done_cb ) +{ + if( recv_from_cb == NULL ){ + return NULL; + } + + thread_conn_handler_t *handler = ns_dyn_mem_alloc(sizeof(thread_conn_handler_t)); + if(!handler){ + return NULL; + } + memset(handler, 0, sizeof(thread_conn_handler_t)); + handler->socket = NULL; + handler->_recv_cb = recv_from_cb; + handler->_send_cb = send_to_cb; + +// handler->sec_conn_closed_cb = sec_conn_closed_cb; + handler->_get_password_cb = pw_cb; + handler->_security_done_cb = done_cb; + + return handler; +} + +void connection_handler_destroy(thread_conn_handler_t *handler) +{ + if(handler){ + if( handler->socket && handler->socket->is_secure){ + //If nothing is sent, there is no address to find. + //This case is handled in int_socket_delete. + secure_session_t *session = secure_session_find( handler->socket, handler->socket->dest_addr.address, + handler->socket->dest_addr.identifier); + + if( session && handler->socket->usage_counter == 1){ //Last connection + thread_security_send_close_alert( session->sec_handler ); + } + + if( session){ + secure_session_delete(session); + } + } + int_socket_delete(handler->socket); + handler->socket = NULL; + ns_dyn_mem_free(handler); + } +} + +void connection_handler_close_secure_connection( thread_conn_handler_t *handler ) +{ + if(handler){ + if( handler->socket && handler->socket->is_secure){ + secure_session_t *session = secure_session_find( handler->socket, handler->socket->dest_addr.address, + handler->socket->dest_addr.identifier); + if( session ){ + thread_security_send_close_alert( session->sec_handler ); + } + } + } +} + +int coap_connection_handler_open_connection(thread_conn_handler_t *handler, uint16_t listen_port, bool use_ephemeral_port, bool is_secure, bool is_real_socket, bool bypassSec) +{ + if( !handler ){ + return -1; + } + //virtual socket must have send callback + if( !is_real_socket && !handler->_send_cb ){ + return -1; + } + if( handler->socket ){ + int_socket_delete(handler->socket); + } + + internal_socket_t *current = !use_ephemeral_port?int_socket_find(listen_port, is_secure, is_real_socket, bypassSec):NULL; + if(!current){ + handler->socket = int_socket_create(listen_port, use_ephemeral_port, is_secure, is_real_socket, bypassSec); + if( !handler->socket ){ + return -1; + } + handler->socket->parent = handler; + }else{ + current->usage_counter++; + handler->socket = current; + //handler->parent cannot be set here! + //this will be always problematic if 2 or more secure sockets try to share a same port! + } + return 0; +} + +int coap_connection_handler_send_data(thread_conn_handler_t *handler, ns_address_t *dest_addr, uint8_t *data_ptr, uint16_t data_len, bool bypass_link_sec) +{ + if( !handler || !handler->socket || !dest_addr){ + return -1; + } + if(handler->socket->is_secure){ + handler->socket->bypass_link_sec = bypass_link_sec; + memcpy(handler->socket->dest_addr.address, dest_addr->address, 16); + handler->socket->dest_addr.identifier = dest_addr->identifier; + handler->socket->dest_addr.type = dest_addr->type; + secure_session_t *session = secure_session_find( handler->socket, dest_addr->address, dest_addr->identifier); + if( !session ){ + session = secure_session_create(handler->socket, dest_addr->address, dest_addr->identifier); + if( !session ){ + return -1; + } + memcpy( handler->socket->dest_addr.address, dest_addr->address, 16 ); + handler->socket->dest_addr.identifier = dest_addr->identifier; + handler->socket->dest_addr.type = dest_addr->type; + uint8_t *pw = (uint8_t *)ns_dyn_mem_alloc(64); + uint8_t pw_len; + if( handler->_get_password_cb && 0 == handler->_get_password_cb(handler->socket->listen_socket, dest_addr->address, dest_addr->identifier, pw, &pw_len)){ + coap_security_handler_connect(session->sec_handler, false, pw, pw_len); + ns_dyn_mem_free(pw); + return -2; + }else{ + ns_dyn_mem_free(pw); + return -1; + } + }else if( session->secure_done ){ + if( coap_security_handler_send_message(session->sec_handler, data_ptr, data_len ) > 0 ){ + return 0; + } + } + return -1; + }else{ + if( !handler->socket->real_socket && handler->_send_cb){ + return handler->_send_cb((int8_t)handler->socket->listen_socket, dest_addr->address, dest_addr->identifier, data_ptr, data_len); + } + int opt_name = SOCKET_IPV6_PREFER_SRC_6LOWPAN_SHORT; + int8_t securityLinkLayer = 1; + if( bypass_link_sec ){ + securityLinkLayer = 0; + } + socket_setsockopt(handler->socket->listen_socket, SOCKET_IPPROTO_IPV6, SOCKET_IPV6_ADDR_PREFERENCES, &opt_name, sizeof(int)); + socket_setsockopt(handler->socket->listen_socket, SOCKET_IPPROTO_IPV6, SOCKET_LINK_LAYER_SECURITY, &securityLinkLayer, sizeof(int8_t)); + return socket_sendto(handler->socket->listen_socket, dest_addr, data_ptr, data_len); + } +} + +bool coap_connection_handler_socket_belongs_to(thread_conn_handler_t *handler, int8_t socket_id) +{ + if( !handler || !handler->socket){ + return false; + } + + if( handler->socket->listen_socket == socket_id){ + return true; + } + return false; +} diff --git a/source/coap_message_handler.c b/source/coap_message_handler.c new file mode 100644 index 0000000000..19c3981c72 --- /dev/null +++ b/source/coap_message_handler.c @@ -0,0 +1,372 @@ +/* + * Copyright (c) 2015 ARM Limited. All rights reserved. + */ + +#include +#include "nsdynmemLIB.h" +#include "coap_message_handler.h" +#include "sn_coap_protocol.h" +#include "ns_types.h" +#include "ns_list.h" +#include "ns_trace.h" + +#define TRACE_GROUP "CoSA" + +static void *own_alloc(uint16_t size) +{ + if (size) { + return ns_dyn_mem_temporary_alloc(size); + } else { + return 0; + } +} + +static void own_free(void *ptr) +{ + if (ptr) { + ns_dyn_mem_free(ptr); + } +} + +static NS_LIST_DEFINE(request_list, coap_transaction_t, link); + +static coap_transaction_t *transaction_find_client(uint16_t msg_id) +{ + coap_transaction_t *this = NULL; + ns_list_foreach(coap_transaction_t, cur_ptr, &request_list) { + if (cur_ptr->msg_id == msg_id && cur_ptr->client_request) { + this = cur_ptr; + break; + } + } + return this; +} +static coap_transaction_t *transaction_find_server(uint16_t msg_id) +{ + coap_transaction_t *this = NULL; + ns_list_foreach(coap_transaction_t, cur_ptr, &request_list) { + if (cur_ptr->msg_id == msg_id && !cur_ptr->client_request) { + this = cur_ptr; + break; + } + } + return this; +} + +static coap_transaction_t *transaction_find_by_address(uint8_t *address_ptr, uint16_t port) +{ + coap_transaction_t *this = NULL; + ns_list_foreach(coap_transaction_t, cur_ptr, &request_list) { + if (cur_ptr->remote_port == port && memcmp(cur_ptr->remote_address, address_ptr, 16) == 0) { + this = cur_ptr; + break; + } + } + return this; +} + +static coap_transaction_t *transaction_create(void) +{ + coap_transaction_t *this = ns_dyn_mem_alloc(sizeof(coap_transaction_t)); + if (this) { + memset(this, 0, sizeof(coap_transaction_t)); + this->client_request = true;// default to client initiated method + ns_list_add_to_start(&request_list, this); + } + + return this; +} +static void transaction_delete(coap_transaction_t *this) +{ + if (this) { + ns_list_remove(&request_list, this); + ns_dyn_mem_free(this); + } + + return; +} + +static int8_t coap_rx_function(sn_coap_hdr_s *resp_ptr, sn_nsdl_addr_s *address_ptr, void *param) +{ + coap_transaction_t *this; + (void)address_ptr; + (void)param; + tr_warn("transaction was not handled"); + if (!resp_ptr) { + return -1; + } + //TODO: IOTCLT-294 & 295 here. + this = transaction_find_client(resp_ptr->msg_id); + if (this && this->resp_cb) { + this->resp_cb(this->service_id, resp_ptr->msg_id, NULL); + } + transaction_delete(this); + return 0; +} + +static void coap_service_build_content_format(sn_coap_hdr_s *header, sn_coap_content_format_e format); + +coap_msg_handler_t *coap_message_handler_init(void *(*used_malloc_func_ptr)(uint16_t), void (*used_free_func_ptr)(void *), + uint8_t (*used_tx_callback_ptr)(uint8_t *, uint16_t, sn_nsdl_addr_s *, void *)){ + + if ((used_malloc_func_ptr == NULL) || (used_free_func_ptr == NULL) || (used_tx_callback_ptr == NULL)) { + return NULL; + } + + coap_msg_handler_t *handle; + handle = used_malloc_func_ptr(sizeof(coap_msg_handler_t)); + if (handle == NULL) { + return NULL; + } + + memset(handle, 0, sizeof(coap_msg_handler_t)); + + handle->sn_coap_tx_callback = used_tx_callback_ptr; + + handle->sn_coap_service_free = used_free_func_ptr; + handle->sn_coap_service_malloc = used_malloc_func_ptr; + + handle->coap = sn_coap_protocol_init(used_malloc_func_ptr, used_free_func_ptr, used_tx_callback_ptr, &coap_rx_function); + if( !handle->coap ){ + used_free_func_ptr(handle); + return NULL; + } + return handle; +} + +int8_t coap_message_handler_destroy(coap_msg_handler_t *handle){ + if( !handle ){ + return -1; + } + + if( handle->coap ){ + sn_coap_protocol_destroy(handle->coap); + } + + //Destroy transactions + ns_list_foreach_safe(coap_transaction_t, cur_ptr, &request_list) { + ns_list_remove(&request_list, cur_ptr); + ns_dyn_mem_free(cur_ptr); + cur_ptr = NULL; + } + + handle->sn_coap_service_free(handle); + return 0; +} + +coap_transaction_t *coap_message_handler_find_transaction(uint8_t *address_ptr, uint16_t port) +{ + if( !address_ptr ) + return NULL; + return transaction_find_by_address( address_ptr, port ); +} + +int16_t coap_message_handler_coap_msg_process(coap_msg_handler_t *handle, int8_t socket_id, uint8_t source_addr_ptr[static 16], uint16_t port, + uint8_t *data_ptr, uint16_t data_len, int16_t (cb)(int8_t, sn_coap_hdr_s *, coap_transaction_t *)) +{ + if( !cb || !handle ){ + return -1; + } + sn_nsdl_addr_s src_addr; + sn_coap_hdr_s *coap_message; + src_addr.addr_ptr = source_addr_ptr; + src_addr.addr_len = 16; + src_addr.type = SN_NSDL_ADDRESS_TYPE_IPV6; + src_addr.port = port; + + coap_message = sn_coap_protocol_parse(handle->coap, &src_addr, data_len, data_ptr, NULL); + if (coap_message == NULL) { + tr_err("CoAP Parsing failed"); + return -1; + } + tr_debug("CoAP status:%d, type:%d, code:%d, id:%d", coap_message->coap_status, coap_message->msg_type, coap_message->msg_code, coap_message->msg_id); + /* Check, if coap itself sends response, or block receiving is ongoing... */ + if (coap_message->coap_status != COAP_STATUS_OK && coap_message->coap_status != COAP_STATUS_PARSER_BLOCKWISE_MSG_RECEIVED) { + tr_debug("CoAP library responds"); + sn_coap_parser_release_allocated_coap_msg_mem(handle->coap, coap_message); + return -1; + } + if (coap_message->msg_code > 0 && coap_message->msg_code < 32) { + + //TODO Sorry + + coap_transaction_t *transaction_ptr = transaction_create(); + if (transaction_ptr) { + + transaction_ptr->msg_id = coap_message->msg_id; + transaction_ptr->client_request = false;// this is server transaction + memcpy(transaction_ptr->remote_address, source_addr_ptr, 16); + transaction_ptr->remote_port = port; + + int ret = cb(socket_id, coap_message, transaction_ptr); + if (ret != 0) { + tr_debug("Service %d, no response expected", transaction_ptr->service_id); + sn_coap_parser_release_allocated_coap_msg_mem(handle->coap, coap_message); + transaction_delete(transaction_ptr); + return -1; + } + }else{ + //TODO: handle error case + } + } else { + //response find by MSG id + coap_transaction_t *this = transaction_find_client(coap_message->msg_id); + if (!this) { + tr_error("client transaction not found"); + sn_coap_parser_release_allocated_coap_msg_mem(handle->coap, coap_message); + return -1; + } + tr_debug("Service %d, response received", this->service_id); + if (this->resp_cb) { + this->resp_cb(this->service_id, coap_message->msg_id, coap_message); + } + sn_coap_parser_release_allocated_coap_msg_mem(handle->coap, coap_message); + transaction_delete(this); + } + return 0; + +} + +uint16_t coap_message_handler_request_send(coap_msg_handler_t *handle, int8_t service_id, uint8_t options, const uint8_t destination_addr[static 16], + uint16_t destination_port, uint8_t msg_type, uint8_t msg_code, const char *uri, + uint8_t cont_type, const uint8_t *payload_ptr, uint16_t payload_len, coap_message_handler_response_recv *request_response_cb) +{ + coap_transaction_t *transaction_ptr; + sn_coap_hdr_s request; + sn_nsdl_addr_s dst_addr; + uint16_t data_len; + uint8_t *data_ptr; + + tr_debug("Service %d, send CoAP request payload_len %d", service_id, payload_len); + transaction_ptr = transaction_create(); + + if (!uri || !transaction_ptr) { + return 0; + } + + transaction_ptr->service_id = service_id; + transaction_ptr->client_request = true; + transaction_ptr->resp_cb = request_response_cb; + transaction_ptr->options = options; + memcpy(transaction_ptr->remote_address, destination_addr, 16); + transaction_ptr->remote_port = destination_port; + memset(&request, 0, sizeof(request)); + dst_addr.addr_ptr = (uint8_t *) destination_addr; // Cast away const and trust that nsdl doesn't modify... + dst_addr.addr_len = 16; + dst_addr.type = SN_NSDL_ADDRESS_TYPE_IPV6; + dst_addr.port = destination_port; + + request.msg_type = msg_type; + request.msg_code = msg_code; + request.uri_path_ptr = (uint8_t *)uri; + request.uri_path_len = strlen(uri); + coap_service_build_content_format(&request, cont_type); + //TODO: check validity of request.content_type_ptr + + request.payload_len = payload_len; + request.payload_ptr = (uint8_t *) payload_ptr; // Cast away const and trust that nsdl doesn't modify... + data_len = sn_coap_builder_calc_needed_packet_data_size(&request); + data_ptr = own_alloc(data_len); + if(data_len > 0 && !data_ptr){ + own_free(request.content_type_ptr); + transaction_delete(transaction_ptr); + return 0; + } + sn_coap_protocol_build(handle->coap, &dst_addr, data_ptr, &request, transaction_ptr); + transaction_ptr->msg_id = request.msg_id; + handle->sn_coap_tx_callback(data_ptr, data_len, &dst_addr, transaction_ptr); + + // Free allocated data + own_free(request.content_type_ptr); + own_free(data_ptr); + if(request_response_cb == NULL){ + //No response expected + transaction_delete(transaction_ptr); + return 0; + } + return transaction_ptr->msg_id; +} + +//TODO: refactor this to use nsdl +int8_t coap_message_handler_response_send(coap_msg_handler_t *handle, int8_t service_id, uint8_t options, sn_coap_hdr_s *request_ptr, sn_coap_msg_code_e message_code, int32_t content_type, const uint8_t *payload_ptr, uint16_t payload_len) +{ + coap_transaction_t *transaction_ptr; + sn_coap_hdr_s *response; + sn_nsdl_addr_s dst_addr; + uint16_t data_len; + uint8_t *data_ptr; + (void) options; + + tr_debug("Service %d, send CoAP response", service_id); + if (!request_ptr || !handle) { + tr_error("invalid params"); + return -1; + } + + transaction_ptr = transaction_find_server(request_ptr->msg_id); + + if (!transaction_ptr) { + tr_error("response transaction not found"); + return -2; + } + dst_addr.addr_ptr = transaction_ptr->remote_address; + dst_addr.addr_len = 16; + dst_addr.type = SN_NSDL_ADDRESS_TYPE_IPV6; + dst_addr.port = transaction_ptr->remote_port; + + response = sn_coap_build_response(handle->coap, request_ptr, message_code); + if( !response ){ + return -1; + } + response->payload_len = payload_len; + response->payload_ptr = (uint8_t *) payload_ptr; // Cast away const and trust that nsdl doesn't modify... + coap_service_build_content_format(response, content_type); + + data_len = sn_coap_builder_calc_needed_packet_data_size(response); + data_ptr = own_alloc(data_len); + if (data_len > 0 && !data_ptr) { + sn_coap_parser_release_allocated_coap_msg_mem(handle->coap, response); + //TODO deallocate stuff i quess + return -1; + } + sn_coap_protocol_build(handle->coap, &dst_addr, data_ptr, response, transaction_ptr); + sn_coap_parser_release_allocated_coap_msg_mem(handle->coap, response); + handle->sn_coap_tx_callback(data_ptr, data_len, &dst_addr, transaction_ptr); + sn_coap_parser_release_allocated_coap_msg_mem(handle->coap, request_ptr); + transaction_delete(transaction_ptr); + own_free(data_ptr); + return 0; +} + +int8_t coap_message_handler_exec(coap_msg_handler_t *handle, uint32_t current_time){ + if( !handle ){ + return -1; + } + return sn_coap_protocol_exec(handle->coap, current_time); +} + +static void coap_service_build_content_format(sn_coap_hdr_s *header, sn_coap_content_format_e format) +{ + if (format == COAP_CT_NONE) { + return; + } + + /* Always alloc - CoAP library needs a non-NULL pointer to trigger writing + * of a zero-length option, and it will free the pointer later. + */ + header->content_type_ptr = own_alloc(2); + if (!header->content_type_ptr) { + return; + } + + if (format == 0) { /* text/plain */ + header->content_type_len = 0; + } else if (format <= 0xff) { + header->content_type_ptr[0] = format; + header->content_type_len = 1; + } else { + header->content_type_ptr[0] = format >> 8; + header->content_type_ptr[1] = format & 0xff; + header->content_type_len = 2; + } +} diff --git a/source/coap_security_handler.c b/source/coap_security_handler.c new file mode 100644 index 0000000000..fd8a99dadd --- /dev/null +++ b/source/coap_security_handler.c @@ -0,0 +1,396 @@ +/* + * Copyright (c) 2015 ARM Limited. All rights reserved. + */ + +#include +#include +#include + +#include "mbedtls/sha256.h" +#include "mbedtls/error.h" +#include "mbedtls/ssl_cookie.h" +#include "mbedtls/entropy_poll.h" +#include "ns_trace.h" +#include "nsdynmemLIB.h" +#include "coap_connection_handler.h" +#include "coap_security_handler.h" +#include "randLIB.h" +#include "mbedtls/ssl_ciphersuites.h" + + +const static int PSK_SUITES[] = { + MBEDTLS_TLS_ECJPAKE_WITH_AES_128_CCM_8, + 0 +}; + + +static void set_timer( void *sec_obj, uint32_t int_ms, uint32_t fin_ms ); +static int get_timer( void *sec_obj ); + +int entropy_poll( void *data, unsigned char *output, size_t len, size_t *olen ); +//Point these back to M2MConnectionHandler!!! +int f_send( void *ctx, const unsigned char *buf, size_t len ); +int f_recv(void *ctx, unsigned char *buf, size_t len); + +static int coap_security_handler_init(thread_security_t *sec){ + const char *pers = "dtls_client"; + mbedtls_ssl_init( &sec->_ssl ); + mbedtls_ssl_config_init( &sec->_conf ); + mbedtls_ctr_drbg_init( &sec->_ctr_drbg ); + mbedtls_entropy_init( &sec->_entropy ); + + memset(&sec->_cookie, 0, sizeof(simple_cookie_t)); + memset(&sec->_keyblk, 0, sizeof(key_block_t)); + + sec->_is_started = false; + + if( mbedtls_entropy_add_source( &sec->_entropy, entropy_poll, NULL, + 128, 0 ) < 0 ){ + return -1; + } + + if( ( mbedtls_ctr_drbg_seed( &sec->_ctr_drbg, mbedtls_entropy_func, &sec->_entropy, + (const unsigned char *) pers, + strlen( pers ) ) ) != 0 ) + { + return -1; + } + return 0; +} + +static void coap_security_handler_reset(thread_security_t *sec){ + mbedtls_entropy_free( &sec->_entropy ); + mbedtls_ctr_drbg_free( &sec->_ctr_drbg ); + mbedtls_ssl_config_free(&sec->_conf); + mbedtls_ssl_free(&sec->_ssl); +} + + +thread_security_t *thread_security_create(int8_t socket_id, int8_t timer_id, uint8_t *address_ptr, uint16_t port, + send_cb *send_cb, + receive_cb *receive_cb, + start_timer_cb *start_timer_cb, + timer_status_cb *timer_status_cb) +{ + if( !address_ptr || send_cb == NULL || receive_cb == NULL || start_timer_cb == NULL || timer_status_cb == NULL){ + return NULL; + } + thread_security_t *this = ns_dyn_mem_alloc(sizeof(thread_security_t)); + if( !this ){ + return NULL; + } + if( -1 == coap_security_handler_init(this) ){ + ns_dyn_mem_free(this); + return NULL; + } + this->_remote_port = port; + memcpy(this->_remote_address, address_ptr, 16); + this->_socket_id = socket_id; + this->_timer_id = timer_id; + this->_send_cb = send_cb; + this->_receive_cb = receive_cb; + this->_start_timer_cb = start_timer_cb; + this->_timer_status_cb = timer_status_cb; + + return this; +} + +void thread_security_destroy(thread_security_t *sec){ + if( sec ){ + coap_security_handler_reset(sec); + ns_dyn_mem_free(sec); + sec = NULL; + } +} + +/**** Random number functions ****/ + +/** + * Get a random array of bytes. + * Called back by mbedtls when it wants to fill a buffer with random data + * Must return 0 on success. + */ +static int get_random(void *ctx, unsigned char *buf, size_t len) +{ + static int initialised = 0; + uint32_t i; + + (void)ctx; /* No context */ + + if (!initialised) { + randLIB_seed_random(); + initialised = 1; + } + + for (i = 0; i < len; i++) { + buf[i] = (uint8_t)randLIB_get_8bit(); + } + return 0; /* Success */ +} + +/**** Cookie functions ****/ +static int simple_cookie_write(void *ctx, + unsigned char **p, unsigned char *end, + const unsigned char *info, size_t ilen) +{ + //TODO: As per RFC 6347 cookie must be stateless. This is not the case in here! + //This should be fixed if we see that dos attack would be an issue. + //this is proposed solution in RFC: Cookie = HMAC(Secret, Client-IP, Client-Parameters) + //Secret is generated here and oftenly changed to prevent statistical attack + simple_cookie_t *p_cookie = (simple_cookie_t *)ctx; + + /* Not using additional info */ + (void)info; + (void)ilen; + + if ((size_t)(end - *p) < COOKIE_SIMPLE_LEN) { + return MBEDTLS_ERR_SSL_BUFFER_TOO_SMALL; + } + + /* Use a simple random number of length COOKIE_SIMPLE_LEN bytes */ + get_random(NULL, p_cookie->value, COOKIE_SIMPLE_LEN); + memcpy(*p, p_cookie->value, COOKIE_SIMPLE_LEN); + p_cookie->len = COOKIE_SIMPLE_LEN; + *p += COOKIE_SIMPLE_LEN; + return 0; +} + +static int simple_cookie_check(void *ctx, + const unsigned char *cookie, size_t clen, + const unsigned char *info, size_t ilen) +{ + simple_cookie_t *p_cookie = (simple_cookie_t *)ctx; + + /* Not using additional info */ + (void)info; + (void)ilen; + + if ((p_cookie->len == 0) || + (clen != p_cookie->len) || + (memcmp(cookie, p_cookie->value, p_cookie->len) != 0)) { + return -1; /* This is what it is in mbedtls... */ + } + return 0; +} + +/**** Key export function ****/ + +static int export_key_block(void *ctx, + const unsigned char *kb, const unsigned char *mk, + size_t maclen, size_t keylen, size_t ivlen) +{ + key_block_t *p_key_block = (key_block_t *)ctx; + + /* Not using master key */ + (void)mk; + + /* Sanity check MAC and key lengths */ + if ((maclen != 0) || (((2 * keylen) + (2 * ivlen)) != KEY_BLOCK_LEN)) { + return -1; /* Something seriously wrong! */ + } + + /* Copy the key block we are using */ + /* No need to skip over MAC keys, MAC len must be 0 if we are here */ + memcpy(p_key_block->value, kb /* + (2 * maclen)*/, (2 * keylen) + (2 * ivlen)); + return 0; +} + +/**** Timer functions ****/ + +/** + * Set timer function. + * Called back by mbedtls when it wants to set a timer. + * Accepts an intermediate and a final delay in milliseconds + * If the final delay is 0, cancels the running timer. + * TODO - might be better to use an event timer in conjunction with + * CoAP tasklet + */ +static void set_timer(void *sec_obj, uint32_t int_ms, uint32_t fin_ms) +{ + thread_security_t *sec = (thread_security_t *)sec_obj; + if( sec->_start_timer_cb ){ + sec->_start_timer_cb( sec->_timer_id, int_ms, fin_ms); + } +} + +/** + * Get timer function. + * Called back by mbedtls when it wants to set a timer. + * Returns the state of the current timer + * TODO - might be better to use an event timer in conjunction with + * CoAP tasklet + */ +static int get_timer(void *sec_obj) +{ + thread_security_t *sec = (thread_security_t *)sec_obj; + if( sec->_timer_status_cb ){ + return sec->_timer_status_cb(sec->_timer_id); + } + return -1; +} + +int coap_security_handler_connect(thread_security_t *sec, bool is_server, const unsigned char *pw, uint8_t len){ + + if( !sec ){ + return -1; + } + int endpoint = MBEDTLS_SSL_IS_CLIENT; + if( is_server ){ + endpoint = MBEDTLS_SSL_IS_SERVER; + } + + if( ( mbedtls_ssl_config_defaults( &sec->_conf, + endpoint, + MBEDTLS_SSL_TRANSPORT_DATAGRAM, 0 ) ) != 0 ) + { + return -1; + } + + mbedtls_ssl_conf_handshake_timeout( &sec->_conf, 60000, 61000 ); + mbedtls_ssl_conf_rng( &sec->_conf, mbedtls_ctr_drbg_random, &sec->_ctr_drbg ); + //mbedtls_ssl_conf_rng(&sec->_conf, get_random, NULL); + + if( ( mbedtls_ssl_setup( &sec->_ssl, &sec->_conf ) ) != 0 ) + { + return -1; + } + + mbedtls_ssl_set_bio( &sec->_ssl, sec, + f_send, f_recv, NULL ); + + mbedtls_ssl_set_timer_cb( &sec->_ssl, sec, set_timer, + get_timer ); + + //TODO: Figure out better way!!! + //Password should never be stored in multiple places!!! + if( is_server && len > 0){ + memcpy(sec->_pw, pw, len); + sec->_pw_len = len; + } + if( mbedtls_ssl_set_hs_ecjpake_password(&sec->_ssl, pw, len) != 0 ){ + return -1; + } + mbedtls_ssl_conf_ciphersuites(&sec->_conf, PSK_SUITES); + + mbedtls_ssl_conf_dtls_cookies(&sec->_conf, simple_cookie_write, + simple_cookie_check, + &sec->_cookie); + + mbedtls_ssl_conf_export_keys_cb(&sec->_conf, + export_key_block, + &sec->_keyblk); + + sec->_is_started = true; + + int ret = mbedtls_ssl_handshake_step( &sec->_ssl ); + if( ret == 0 ){ + ret = mbedtls_ssl_handshake_step( &sec->_ssl ); + if( is_server && 0 == ret){ + ret = coap_security_handler_continue_connecting( sec ); + } + } + + if( ret >= 0){ + ret = 1; + }else + { + ret = -1; + } + return ret; +} + +int coap_security_handler_continue_connecting(thread_security_t *sec){ + int ret=-1; + while( ret != MBEDTLS_ERR_SSL_WANT_READ ){ + ret = mbedtls_ssl_handshake_step( &sec->_ssl ); + if( MBEDTLS_ERR_SSL_HELLO_VERIFY_REQUIRED == ret){ + mbedtls_ssl_session_reset(&sec->_ssl); + if( mbedtls_ssl_set_hs_ecjpake_password(&sec->_ssl, sec->_pw, sec->_pw_len) != 0 ){ + return -1; + } + return 1; + } + if(MBEDTLS_ERR_SSL_TIMEOUT == ret || + MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO == ret || + MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE == ret || + MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE_REQUEST == ret || + MBEDTLS_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE == ret || + MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO_DONE == ret || + MBEDTLS_ERR_SSL_BAD_HS_CHANGE_CIPHER_SPEC == ret || + MBEDTLS_ERR_SSL_BAD_HS_FINISHED == ret) { + return MBEDTLS_ERR_SSL_TIMEOUT; + } + if( sec->_ssl.state == MBEDTLS_SSL_HANDSHAKE_OVER ){ + + return 0; + } + } + return ret; +} + + +int coap_security_handler_send_message(thread_security_t *sec, unsigned char *message, size_t len){ + int ret=-1; + + if( sec ){ + do ret = mbedtls_ssl_write( &sec->_ssl, (unsigned char *) message, len ); + while( ret == MBEDTLS_ERR_SSL_WANT_READ || + ret == MBEDTLS_ERR_SSL_WANT_WRITE ); + } + + return ret; //bytes written +} + +int thread_security_send_close_alert(thread_security_t *sec) +{ + if( !sec ){ + return -1; + } + return mbedtls_ssl_close_notify(&sec->_ssl); + + coap_security_handler_reset(sec); + coap_security_handler_init(sec); +} + +int coap_security_handler_read(thread_security_t *sec, unsigned char* buffer, size_t len){ + int ret=-1; + + if( sec && buffer ){ + memset( buffer, 0, len ); + do ret = mbedtls_ssl_read( &sec->_ssl, buffer, len ); + while( ret == MBEDTLS_ERR_SSL_WANT_READ || + ret == MBEDTLS_ERR_SSL_WANT_WRITE ); + } + + return ret; //bytes read +} + +int f_send( void *ctx, const unsigned char *buf, size_t len){ + thread_security_t *sec = (thread_security_t *)ctx; + return sec->_send_cb(sec->_socket_id, sec->_remote_address, sec->_remote_port, buf, len); +} + +int f_recv(void *ctx, unsigned char *buf, size_t len){ + thread_security_t *sec = (thread_security_t *)ctx; + return sec->_receive_cb(sec->_socket_id, buf, len); +} + +int entropy_poll( void *ctx, unsigned char *output, size_t len, + size_t *olen ) +{ + //TODO: change to more secure random + srand(time(NULL)); + char *c = (char*)ns_dyn_mem_temporary_alloc(len); + if( !c ){ + return MBEDTLS_ERR_ENTROPY_SOURCE_FAILED; + } + memset(c, 0, len); + for(uint16_t i=0; i < len; i++){ + c[i] = rand() % 256; + } + memmove(output, c, len); + *olen = len; + + ns_dyn_mem_free(c); + return( 0 ); +} diff --git a/source/coap_server.c b/source/coap_server.c deleted file mode 100644 index 88f6c142c4..0000000000 --- a/source/coap_server.c +++ /dev/null @@ -1,113 +0,0 @@ -/* - * Copyright (c) 2015 ARM Limited. All rights reserved. - - * SPDX-License-Identifier: Apache-2.0 - * 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 "include/coap_service_api.h" -#include "ns_types.h" -#include "ns_list.h" -#include "coap_server_impl.h" -#include "./include/coap_server.h" - -//typedef NS_LIST_HEAD(coap_service_session_t, link) instance_list_t; -//instance_list_t NS_LIST_NAME_INIT(instance_list); - -//typedef struct sn_coap_hdr_s sn_coap_hdr_s; - -static coap_service_session_t *coap_service_find_by_service(int8_t service_id); - -/* Coap service class handlers*/ - -void coap_server_delete_session(int8_t service_id) -{ - - coap_service_session_t *this = coap_service_find_by_service(service_id); - - if(this) - { - - //ns_list_remove(&instance_list,this); - memory_free(this); - - } - -} - -static coap_service_session_t *coap_service_find_by_service(int8_t service_id) -{ - (void)service_id; - coap_service_session_t *this = NULL; - - /* - ns_list_foreach(coap_service_session_t,cur_ptr, &instance_list) - { - if(cur_ptr->coap_service_id == service_id) - { - this = cur_ptr; - break; - } - } - */ - - return this; -} - - -/* Initialize CoAP server. - * - * TODO - * - * /param interface interface id of this instance. - * - */ -int8_t coap_server_service_init(int8_t interface_id, uint16_t listen_port, uint8_t service_options) -{ - (void)listen_port; - (void)service_options; - int retVal = -1; - int8_t socketInstance; - - // Initialize linked list - //ns_list_init_(instance_list); - - //allocate Socket Service - socketInstance = coap_server_start(); - - if(socketInstance < 0) - retVal = -2; - else - { - - coap_service_session_t *this = memory_allocation(sizeof(coap_service_session_t)); - if(this) - { - this->interface_id = interface_id; -// this->set_response_cb_ptr = NULL; - //ns_list_add_to_start(&instance_list, this); - retVal = 1; - } - return retVal; - - //allocate server - - } - if(socketInstance > 0) - { - coap_service_delete(socketInstance); - } - return retVal; -} - - diff --git a/source/coap_service.c b/source/coap_service.c deleted file mode 100644 index f2e88488e6..0000000000 --- a/source/coap_service.c +++ /dev/null @@ -1,177 +0,0 @@ -/* - * Copyright (c) 2015 ARM Limited. All rights reserved. - - * SPDX-License-Identifier: Apache-2.0 - * 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. - */ - -/* - * \file coap_service.c - * \brief Add short description about this file!!! - * - */ - -#include -#include -#include "ns_list.h" -#include "sn_coap_header.h" -#include "coap_service_api.h" -#include "coap_server.h" - -#include - -int8_t coap_service_initialize(int8_t interface_id, uint16_t listen_port, uint8_t service_options) -{ - int8_t retVal = -1; - - retVal = coap_server_service_init(interface_id, listen_port, service_options); - - return retVal; -} - -int8_t coap_service_register_uri(int8_t service_id, const char *uri, uint8_t allowed_method, coap_service_request_recv_cb *request_recv_cb) -{ - (void)service_id; - (void)uri; - (void)allowed_method; - (void)request_recv_cb; - return -1; -} - -int8_t coap_service_unregister_uri(int8_t service_id, const char *uri) -{ - (void)service_id; - (void)uri; - return -1; -} - -uint16_t coap_service_send(int8_t service_id, uint8_t options, const uint8_t addr[static 16], uint16_t destination_port, sn_coap_hdr_s *request_ptr, coap_service_response_recv *request_ptr2) -{ - (void)service_id; - (void)options; - (void)destination_port; - (void)addr; - (void)request_ptr; - (void)request_ptr2; - return 0; -} - -void coap_service_delete( int8_t service_id ) -{ - (void)service_id; -} - -int requst_recv_cb(int8_t service_id, uint8_t source_address[static 16], uint16_t source_port, sn_coap_hdr_s *request_ptr) -{ - (void)service_id; - (void)source_address; - (void)source_port; - (void)request_ptr; - return -1; -} - - -int security_start_ptr(int8_t service_id, uint8_t EUI64[static 8]) -{ - (void)service_id; - (void)EUI64; - return -1; -} - -int security_done_cb(int8_t service_id, uint8_t EUI64[static 8], uint8_t keyblock[static 40]) -{ - (void)service_id; - (void)EUI64; - (void)keyblock; - return -1; -} - -int coap_service_security_key_set(int8_t service_id, uint8_t EUI64[static 8], uint8_t *PSKd_ptr, uint8_t PSKd_len) -{ - (void)service_id; - (void)EUI64; - (void)PSKd_ptr; - (void)PSKd_len; - return -1; -} - -int requst_response_cb(uint16_t msg_id, sn_coap_hdr_s *response_ptr) -{ - (void)msg_id; - (void)response_ptr; - return -1; -} - -int virtual_socket_send(int8_t service_id, uint8_t destination_addr_ptr[static 16], uint16_t port, uint8_t *data_ptr, uint16_t data_len) -{ - (void)service_id; - (void)destination_addr_ptr; - (void)port; - (void)data_ptr; - (void)data_len; - return -1; -} - -int16_t coap_service_virtual_socket_recv(int8_t service_id, uint8_t source_addr_ptr[static 16], uint16_t port, uint8_t *data_ptr, uint16_t data_len) -{ - (void)service_id; - (void)source_addr_ptr; - (void)port; - (void)data_ptr; - (void)data_len; - return -1; -} - -int16_t coap_service_virtual_socket_set_cb(int8_t service_id, coap_service_virtual_socket_send_cb *virtual_socket_send) -{ - (void)service_id; - (void)virtual_socket_send; - return -1; -} - -int8_t coap_service_register_uri_secure_cb_set(int8_t service_id, coap_service_security_start_cb *security_start_ptr, coap_service_security_done_cb *security_done_cb) -{ - (void)service_id; - (void)security_start_ptr; - (void)security_done_cb; - return -1; -} - -uint16_t coap_service_request_send(int8_t service_id, uint8_t options, const uint8_t destination_addr[static 16], uint16_t destination_port, uint8_t msg_type, uint8_t msg_code, const char *uri, - uint8_t cont_type, const uint8_t *payload_ptr, uint16_t payload_len, coap_service_response_recv *request_response_cb) -{ - (void)service_id; - (void)options; - (void)destination_addr; - (void)destination_port; - (void)msg_type; - (void)msg_code; - (void)uri; - (void)cont_type; - (void)payload_ptr; - (void)payload_len; - (void)request_response_cb; - return 0; -} - -int8_t coap_service_response_send(int8_t service_id, uint8_t options, sn_coap_hdr_s *request_ptr, sn_coap_msg_code_e message_code, int32_t content_type, const uint8_t *payload_ptr,uint16_t payload_len) -{ - (void)service_id; - (void)options; - (void)request_ptr; - (void)message_code; - (void)content_type; - (void)payload_ptr; - (void)payload_len; - return -1; -} diff --git a/source/coap_service_api.c b/source/coap_service_api.c new file mode 100644 index 0000000000..444187d923 --- /dev/null +++ b/source/coap_service_api.c @@ -0,0 +1,450 @@ +/* + * Copyright (c) 2015 ARM Limited. All rights reserved. + */ + + + +#include + +#include "ns_types.h" +#include "ns_list.h" +#include "ns_trace.h" +#include "nsdynmemLIB.h" +#include "sn_nsdl.h" +#include "sn_coap_header.h" +#include "coap_service_api.h" +#include "coap_message_handler.h" +#include "eventOS_event.h" +#include "eventOS_scheduler.h" +#include "eventOS_event_timer.h" +#include "common_functions.h" +#include "coap_connection_handler.h" +#include "net_interface.h" + +static int16_t coap_service_coap_msg_process(int8_t socket_id, uint8_t source_addr_ptr[static 16], uint16_t port, uint8_t *data_ptr, uint16_t data_len); +static int16_t coap_msg_process_callback(int8_t socket_id, sn_coap_hdr_s *coap_message, coap_transaction_t *transaction_ptr); + +typedef struct uri_registration { + char *uri_ptr; + uint16_t uri_len; + uint8_t allowed_method; + coap_service_request_recv_cb *request_recv_cb; + ns_list_link_t link; +} uri_registration_t; + +typedef NS_LIST_HEAD(uri_registration_t, link) uri_registration_list_t; + +typedef struct coap_service { + coap_service_security_done_cb *security_done_cb; + coap_service_security_start_cb *security_start_cb; + coap_service_virtual_socket_send_cb *virtual_socket_send_cb; + uri_registration_list_t uri_list; + thread_conn_handler_t *conn_handler; + int8_t interface_id; + int8_t service_id; + int8_t listen_socket; + uint8_t service_options; + ns_list_link_t link; +} coap_service_t; + +#define TRACE_GROUP "ThSA" + +static NS_LIST_DEFINE(instance_list, coap_service_t, link); +static int8_t tasklet_id = -1; +coap_msg_handler_t *coap_service_handle = NULL; +static uint32_t coap_ticks = 1; + +#define COAP_TICK_TIMER 0xf1 + +static uri_registration_t *uri_registration_find(coap_service_t *this, const void *uri_ptr, uint16_t uri_len) +{ + ns_list_foreach(uri_registration_t, cur_ptr, &this->uri_list) { + if (cur_ptr->uri_len == uri_len && memcmp(cur_ptr->uri_ptr, uri_ptr, uri_len) == 0) { + return cur_ptr; + } + } + return NULL; +} +static coap_service_t *service_find(int8_t service_id) +{ + coap_service_t *this = NULL; + ns_list_foreach(coap_service_t, cur_ptr, &instance_list) { + if (cur_ptr->service_id == service_id) { + this = cur_ptr; + break; + } + } + return this; +} + +static coap_service_t *service_find_by_socket(int8_t socket_id) +{ + coap_service_t *this = NULL; + ns_list_foreach(coap_service_t, cur_ptr, &instance_list) { + if( coap_connection_handler_socket_belongs_to(cur_ptr->conn_handler, socket_id) ){ + this = cur_ptr; + break; + } + } + return this; +} + +static coap_service_t *service_find_by_uri(uint8_t socket_id, uint8_t *uri_ptr, uint16_t uri_len) +{ + ns_list_foreach(coap_service_t, cur_ptr, &instance_list) { + if (coap_connection_handler_socket_belongs_to(cur_ptr->conn_handler, socket_id) && uri_registration_find(cur_ptr, uri_ptr, uri_len)) { + return cur_ptr; + } + } + return NULL; +} + + +/** + * Coap handling functions + */ +static void *own_alloc(uint16_t size) +{ + if (size) { + return ns_dyn_mem_temporary_alloc(size); + } else { + return 0; + } +} + +static void own_free(void *ptr) +{ + if (ptr) { + ns_dyn_mem_free(ptr); + } +} + +static uint8_t coap_tx_function(uint8_t *data_ptr, uint16_t data_len, sn_nsdl_addr_s *address_ptr, void *param) +{ + coap_service_t *this; + coap_transaction_t *transaction_ptr = param; + ns_address_t dest_addr; + + if (!transaction_ptr || !data_ptr) { + return 0; + } + + tr_debug("Service %d, CoAP TX Function", transaction_ptr->service_id); + + this = service_find(transaction_ptr->service_id); + if (!this) { + return 0; + } + + memcpy(&(dest_addr.address), address_ptr->addr_ptr, 16); + dest_addr.identifier = address_ptr->port; + dest_addr.type = ADDRESS_IPV6; + + if( -2 == coap_connection_handler_send_data(this->conn_handler, &dest_addr, data_ptr, data_len, (this->service_options & COAP_SERVICE_OPTIONS_SECURE_BYPASS) == COAP_SERVICE_OPTIONS_SECURE_BYPASS) ){ + transaction_ptr->data_ptr = ns_dyn_mem_alloc(data_len); + if (!transaction_ptr->data_ptr) { + tr_debug("coap tx out of memory"); + return 0; + + } + memcpy(transaction_ptr->data_ptr, data_ptr, data_len); + transaction_ptr->data_len = data_len; + } + + return 0; +} + +static void service_event_handler(arm_event_s *event) +{ + if (event->event_type == ARM_LIB_TASKLET_INIT_EVENT) { + tr_debug("service tasklet initialised"); + /*initialize coap service and listen socket*/ + eventOS_event_timer_request((uint8_t)COAP_TICK_TIMER, ARM_LIB_SYSTEM_TIMER_EVENT, tasklet_id, 1000); + } + if (event->event_type == ARM_LIB_SYSTEM_TIMER_EVENT && event->event_id == COAP_TICK_TIMER) { + coap_message_handler_exec(coap_service_handle, coap_ticks++); + eventOS_event_timer_request((uint8_t)COAP_TICK_TIMER, ARM_LIB_SYSTEM_TIMER_EVENT, tasklet_id, 1000); + } +} + +static int16_t coap_msg_process_callback(int8_t socket_id, sn_coap_hdr_s *coap_message, coap_transaction_t *transaction_ptr) +{ + coap_service_t *this; + if( !coap_message ){ + return -1; + } + // Message is request find correct handle + this = service_find_by_uri(socket_id, coap_message->uri_path_ptr, coap_message->uri_path_len); + if (!this) { + tr_warn("not registered uri %.*s", coap_message->uri_path_len, coap_message->uri_path_ptr); + return -1; + } + + uri_registration_t *uri_reg_ptr = uri_registration_find(this, coap_message->uri_path_ptr, coap_message->uri_path_len); + if (transaction_ptr && uri_reg_ptr && uri_reg_ptr->request_recv_cb) { + tr_debug("Service %d, call request recv cb uri %.*s", this->service_id, coap_message->uri_path_len, coap_message->uri_path_ptr); + + if ((this->service_options & COAP_SERVICE_OPTIONS_SECURE_BYPASS) == COAP_SERVICE_OPTIONS_SECURE_BYPASS ) {//TODO Add secure bypass option + // Service has secure bypass active TODO this is not defined in interface + // this check can be removed I think + transaction_ptr->options = COAP_REQUEST_OPTIONS_SECURE_BYPASS; + } + transaction_ptr->service_id = this->service_id; + return uri_reg_ptr->request_recv_cb(this->service_id, transaction_ptr->remote_address, transaction_ptr->remote_port, coap_message); + } + return -1; +} + +static int16_t coap_service_coap_msg_process(int8_t socket_id, uint8_t source_addr_ptr[static 16], uint16_t port, uint8_t *data_ptr, uint16_t data_len) +{ + return coap_message_handler_coap_msg_process( coap_service_handle, socket_id, source_addr_ptr, port, data_ptr, data_len, &coap_msg_process_callback); +} + +static int recv_cb(int8_t socket_id, uint8_t address[static 16], uint16_t port, unsigned char *data, int len) +{ + uint8_t *data_ptr = NULL; + uint16_t data_len = 0; + + data_ptr = own_alloc(len); + + if (!data_ptr || len < 1) { + return -1; + } + memcpy(data_ptr, data, len); + data_len = len; + tr_debug("service recv socket data len %d ", data_len); + + //parse coap message what CoAP to use + int ret = coap_service_coap_msg_process(socket_id, address, port, data_ptr, data_len); + own_free(data_ptr); + return ret; +} + +static int send_cb(int8_t socket_id, uint8_t address[static 16], uint16_t port, const unsigned char *data_ptr, int data_len) +{ + coap_service_t *this = service_find_by_socket(socket_id); + if (this && this->virtual_socket_send_cb) { + tr_debug("send to virtual socket"); + return this->virtual_socket_send_cb(this->service_id, address, port, data_ptr, data_len); + } + return -1; +} + +//static void sec_conn_closed_cb(int8_t socket_id) +//{ +// coap_service_t *this = service_find_by_socket(socket_id); + +// tr_debug("Secure socket was closed by end device"); +//} + +static void sec_done_cb(int8_t socket_id, uint8_t address[static 16], uint16_t port, uint8_t keyblock[static 40]) +{ + //TODO: this is not enough if shared socket. Inform all! + coap_service_t *this = service_find_by_socket(socket_id); + if (this && this->security_done_cb) { // secure done callback + this->security_done_cb(this->service_id, address, keyblock); + } + + //TODO refactor this away. There should be no transaction_ptr(s) before done_cb has been called + //TODO: send all unsend transactions if more than 1 + coap_transaction_t *transaction_ptr = coap_message_handler_find_transaction(address, port); + if (transaction_ptr && transaction_ptr->data_ptr) { + tr_debug("send delayed packet"); + ns_address_t dest_addr; + memcpy(dest_addr.address, address, 16); + dest_addr.identifier = port; + dest_addr.type = ADDRESS_IPV6; + + coap_connection_handler_send_data(this->conn_handler, &dest_addr, transaction_ptr->data_ptr, transaction_ptr->data_len, (this->service_options & COAP_SERVICE_OPTIONS_SECURE_BYPASS) == COAP_SERVICE_OPTIONS_SECURE_BYPASS); + ns_dyn_mem_free(transaction_ptr->data_ptr); + transaction_ptr->data_ptr = NULL; + transaction_ptr->data_len = 0; + //TODO: who deletes transaction incase no response is required + } +} + +static int get_passwd_cb(int8_t socket_id, uint8_t address[static 16], uint16_t port, uint8_t *pw_ptr, uint8_t *pw_len) +{ + coap_service_t *this = service_find_by_socket(socket_id); + if (this && this->security_start_cb) { + return this->security_start_cb(this->service_id, address, port, pw_ptr, pw_len); + } + return -1; +} + +int8_t coap_service_initialize(int8_t interface_id, uint16_t listen_port, uint8_t service_options, + coap_service_security_start_cb *start_ptr, coap_service_security_done_cb *security_done_cb) +{ + coap_service_t *this = ns_dyn_mem_alloc(sizeof(coap_service_t)); + if (!this) { + return -1; + } + memset(this, 0, sizeof(coap_service_t)); + tr_debug("service init interface %d, port %d, options %d", interface_id, listen_port, service_options); + + int8_t id = 1;// get unique id + while (service_find(id) && id < 127) { + id++; + } + this->service_id = id; + this->service_options = service_options; + + this->security_start_cb = start_ptr; + this->security_done_cb = security_done_cb; + + if (tasklet_id == -1) { + tr_debug("service tasklet init"); + tasklet_id = eventOS_event_handler_create(&service_event_handler, ARM_LIB_TASKLET_INIT_EVENT); + } + + this->conn_handler = connection_handler_create(recv_cb, send_cb/*, sec_conn_closed_cb*/, get_passwd_cb, sec_done_cb); + if(!this->conn_handler){ + ns_dyn_mem_free(this); + return -1; + } + coap_connection_handler_open_connection(this->conn_handler, listen_port, ((this->service_options & COAP_SERVICE_OPTIONS_EPHEMERAL_PORT) == COAP_SERVICE_OPTIONS_EPHEMERAL_PORT), + ((this->service_options & COAP_SERVICE_OPTIONS_SECURE) == COAP_SERVICE_OPTIONS_SECURE), + ((this->service_options & COAP_SERVICE_OPTIONS_VIRTUAL_SOCKET) != COAP_SERVICE_OPTIONS_VIRTUAL_SOCKET), + ((this->service_options & COAP_SERVICE_OPTIONS_SECURE_BYPASS) == COAP_SERVICE_OPTIONS_SECURE_BYPASS)); + + if (!coap_service_handle) { + coap_service_handle = coap_message_handler_init(&own_alloc, &own_free, &coap_tx_function); + } + if (!coap_service_handle) { + tr_error("coap service alloc failed"); + //TODO proper handling + } + + ns_list_add_to_start(&instance_list, this); + return id; +} + +void coap_service_delete(int8_t service_id) +{ + coap_service_t *this = service_find(service_id); + if (!this) { + return; + } + + //TODO: There might be an issue with shared sockets, when deleting!! + if (this->conn_handler){ + connection_handler_destroy(this->conn_handler); + this->conn_handler = NULL; + } + + //TODO clear all transactions + ns_list_foreach_safe(uri_registration_t, cur_ptr, &this->uri_list) { + ns_dyn_mem_free(cur_ptr->uri_ptr); + ns_list_remove(&this->uri_list, cur_ptr); + ns_dyn_mem_free(cur_ptr); + } + + ns_list_remove(&instance_list, this); + ns_dyn_mem_free(this); + return; +} + +void coap_service_close_secure_connection(int8_t service_id) +{ + coap_service_t *this = service_find(service_id); + if (!this) { + return; + } + if (this->conn_handler){ + connection_handler_close_secure_connection(this->conn_handler); + } +} + +int16_t coap_service_virtual_socket_recv(int8_t service_id, uint8_t source_addr_ptr[static 16], uint16_t port, uint8_t *data_ptr, uint16_t data_len) +{ + coap_service_t *this = service_find(service_id); + tr_debug("Service %d, virtual socket received", service_id); + if (!this) { + return -1; + } + return coap_connection_handler_virtual_recv(this->conn_handler, source_addr_ptr, port, data_ptr, data_len); +} + +int16_t coap_service_virtual_socket_set_cb(int8_t service_id, coap_service_virtual_socket_send_cb *send_method_ptr) +{ + coap_service_t *this = service_find(service_id); + tr_debug("register virtual socket cb"); + if (!this) { + return -1; + } + this->virtual_socket_send_cb = send_method_ptr; + return 0; +} + +int8_t coap_service_register_uri(int8_t service_id, const char *uri, uint8_t allowed_method, coap_service_request_recv_cb *request_recv_cb) +{ + coap_service_t *this = service_find(service_id); + uri_registration_t *uri_reg_ptr; + char *uri_ptr = NULL; + uint16_t uri_len; + tr_debug("Service %d, Uri registration uri: %s", service_id, uri); + if (!this || !uri) { + return -1; + } + uri_len = strlen(uri); + + uri_reg_ptr = uri_registration_find(this, uri, uri_len); + if (!uri_reg_ptr) { + uri_reg_ptr = ns_dyn_mem_alloc(sizeof(uri_registration_t)); + if( !uri_reg_ptr ){ + tr_error("Uri registration failed, OOM"); + return -2; + } + uri_reg_ptr->uri_ptr = NULL; + } else { + ns_dyn_mem_free(uri_reg_ptr->uri_ptr); + ns_list_remove(&this->uri_list, uri_reg_ptr); + } + + uri_ptr = ns_dyn_mem_alloc(uri_len); + if (!uri_ptr) { + ns_dyn_mem_free(uri_reg_ptr); + tr_error("Uri registration failed, OOM"); + return -2; + } + + uri_reg_ptr->uri_ptr = memcpy(uri_ptr, uri, uri_len); + uri_reg_ptr->uri_len = uri_len; + uri_reg_ptr->request_recv_cb = request_recv_cb; + uri_reg_ptr->allowed_method = allowed_method; + ns_list_add_to_start(&this->uri_list, uri_reg_ptr); + return 0; +} + +int8_t coap_service_unregister_uri(int8_t service_id, const char *uri) +{ + coap_service_t *this = service_find(service_id); + uri_registration_t *uri_reg_ptr; + tr_debug("Service %d, Uri unregistration uri: %s", service_id, uri); + if (!this || !uri) { + return -1; + } + + uri_reg_ptr = uri_registration_find(this, uri, strlen(uri)); + if (!uri_reg_ptr) { + return -2; + } + + ns_dyn_mem_free(uri_reg_ptr->uri_ptr); + ns_list_remove(&this->uri_list, uri_reg_ptr); + ns_dyn_mem_free(uri_reg_ptr); + + return 0; +} + +uint16_t coap_service_request_send(int8_t service_id, uint8_t options, const uint8_t destination_addr[static 16], uint16_t destination_port, uint8_t msg_type, uint8_t msg_code, const char *uri, + uint8_t cont_type, const uint8_t *payload_ptr, uint16_t payload_len, coap_service_response_recv *request_response_cb){ + //TODO: coap_service_response_recv is an ugly cast, this should be refactored away + sn_coap_hdr_s MUST NOT be exposed to users of coap-service! + //Callback would be still needed, but where to store callback? + return coap_message_handler_request_send(coap_service_handle, service_id, options, destination_addr, destination_port, msg_type, msg_code, uri, cont_type, payload_ptr, payload_len, request_response_cb); +} + +int8_t coap_service_response_send(int8_t service_id, uint8_t options, sn_coap_hdr_s *request_ptr, sn_coap_msg_code_e message_code, int32_t content_type, const uint8_t *payload_ptr,uint16_t payload_len){ + return coap_message_handler_response_send(coap_service_handle, service_id, options, request_ptr, message_code, content_type, payload_ptr, payload_len); +} + diff --git a/source/include/coap_connection_handler.h b/source/include/coap_connection_handler.h new file mode 100644 index 0000000000..dd38b6e828 --- /dev/null +++ b/source/include/coap_connection_handler.h @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2015 ARM Limited. All rights reserved. + */ + +#ifndef __COAP_CONNECTION_HANDLER_H__ +#define __COAP_CONNECTION_HANDLER_H__ + +#include +#include +#include +#include "ns_address.h" + +struct internal_socket_s; + +typedef int send_to_socket_cb(int8_t socket_id, uint8_t address[static 16], uint16_t port, const unsigned char *, int); +typedef int receive_from_socket_cb(int8_t socket_id, uint8_t address[static 16], uint16_t port, unsigned char *, int); +typedef int get_pw_cb(int8_t socket_id, uint8_t address[static 16], uint16_t port, uint8_t *pw_ptr, uint8_t *pw_len); +typedef void security_done_cb(int8_t socket_id, uint8_t address[static 16], uint16_t port, uint8_t keyblock[static 40]); + +typedef struct thread_conn_handler_s{ + struct internal_socket_s *socket; + + receive_from_socket_cb *_recv_cb; + send_to_socket_cb *_send_cb; + get_pw_cb *_get_password_cb; + security_done_cb *_security_done_cb; + +} thread_conn_handler_t; + +thread_conn_handler_t *connection_handler_create(receive_from_socket_cb *recv_from_cb, + send_to_socket_cb *send_to_cb, + get_pw_cb *pw_cb, + security_done_cb *done_cb); + +void connection_handler_destroy( thread_conn_handler_t *handler ); + +void connection_handler_close_secure_connection( thread_conn_handler_t *handler ); + +int coap_connection_handler_open_connection(thread_conn_handler_t *handler, uint16_t listen_port, bool use_ephemeral_port, bool is_secure, bool real_socket, bool bypassSec); + +//If returns -2, it means security was started and data was not send +int coap_connection_handler_send_data(thread_conn_handler_t *handler, ns_address_t *dest_addr, uint8_t *data_ptr, uint16_t data_len, bool bypass_link_sec); + +int coap_connection_handler_virtual_recv(thread_conn_handler_t *handler, uint8_t address[static 16], uint16_t port, uint8_t *data_ptr, uint16_t data_len); + +bool coap_connection_handler_socket_belongs_to(thread_conn_handler_t *handler, int8_t socket_id); + +#endif diff --git a/source/include/coap_message_handler.h b/source/include/coap_message_handler.h new file mode 100644 index 0000000000..a7170a9a15 --- /dev/null +++ b/source/include/coap_message_handler.h @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2015 ARM Limited. All rights reserved. + */ + +#ifndef __COAPPI_SERVICE_API_H__ +#define __COAPPI_SERVICE_API_H__ + +#include +#include "sn_coap_header.h" +#include "sn_nsdl.h" +#include "ns_list.h" + +/** + * \brief Service message response receive callback. + * + * Function that handles CoAP service message receiving and parsing + * + * \param msg_id Id number of the current message. + * \param response_ptr Pointer to CoAP header structure. + * + * \return 0 for success / -1 for failure + */ +typedef int coap_message_handler_response_recv(int8_t service_id, uint16_t msg_id, sn_coap_hdr_s *response_ptr); + +typedef struct coap_msg_handler_s { + void *(*sn_coap_service_malloc)(uint16_t); + void (*sn_coap_service_free)(void *); + + uint8_t (*sn_coap_tx_callback)(uint8_t *, uint16_t, sn_nsdl_addr_s *, void *); + + struct coap_s *coap; +} coap_msg_handler_t; + +typedef struct coap_transaction { + uint8_t remote_address[16]; + uint16_t remote_port; + uint16_t msg_id; + int8_t service_id; + uint8_t options; + bool client_request: 1; + uint8_t *data_ptr; + uint16_t data_len; + coap_message_handler_response_recv *resp_cb; + ns_list_link_t link; +} coap_transaction_t; + + +extern coap_msg_handler_t *coap_message_handler_init(void *(*used_malloc_func_ptr)(uint16_t), void (*used_free_func_ptr)(void *), + uint8_t (*used_tx_callback_ptr)(uint8_t *, uint16_t, sn_nsdl_addr_s *, void *)); + +extern int8_t coap_message_handler_destroy(coap_msg_handler_t *handle); + +extern coap_transaction_t *coap_message_handler_find_transaction(uint8_t *address_ptr, uint16_t port); + +extern int16_t coap_message_handler_coap_msg_process(coap_msg_handler_t *handle, int8_t socket_id, uint8_t source_addr_ptr[static 16], uint16_t port, + uint8_t *data_ptr, uint16_t data_len, int16_t (cb)(int8_t, sn_coap_hdr_s *, coap_transaction_t *)); + +extern uint16_t coap_message_handler_request_send(coap_msg_handler_t *handle, int8_t service_id, uint8_t options, const uint8_t destination_addr[static 16], + uint16_t destination_port, uint8_t msg_type, uint8_t msg_code, const char *uri, uint8_t cont_type, + const uint8_t *payload_ptr, uint16_t payload_len, coap_message_handler_response_recv *request_response_cb); + +extern int8_t coap_message_handler_response_send(coap_msg_handler_t *handle, int8_t service_id, uint8_t options, sn_coap_hdr_s *request_ptr, sn_coap_msg_code_e message_code, + int32_t content_type, const uint8_t *payload_ptr, uint16_t payload_len); + +extern int8_t coap_message_handler_exec(coap_msg_handler_t *handle, uint32_t current_time); + +#endif diff --git a/source/include/coap_security_handler.h b/source/include/coap_security_handler.h new file mode 100644 index 0000000000..12e772d25e --- /dev/null +++ b/source/include/coap_security_handler.h @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2015 ARM Limited. All rights reserved. + */ +#ifndef __COAP_SECURITY_HANDLER_H__ +#define __COAP_SECURITY_HANDLER_H__ + +#include +#include +#include +#include "mbedtls/ssl.h" +#include "mbedtls/sha256.h" +#include "mbedtls/entropy.h" +#include "mbedtls/ctr_drbg.h" + +#define COOKIE_SIMPLE_LEN 8 +typedef struct simple_cookie { + unsigned char value[COOKIE_SIMPLE_LEN]; + size_t len; +} simple_cookie_t; + +#define KEY_BLOCK_LEN 40 +typedef struct key_block { + unsigned char value[KEY_BLOCK_LEN]; +} key_block_t; + +typedef int send_cb(int8_t socket_id, uint8_t *address_ptr, uint16_t port, const unsigned char *, size_t); +typedef int receive_cb(int8_t socket_id, unsigned char *, size_t); +typedef void start_timer_cb(int8_t timer_id, uint32_t min, uint32_t fin); +typedef int timer_status_cb(int8_t timer_id); + +typedef struct thread_security_s { + + mbedtls_ssl_config _conf; + mbedtls_ssl_context _ssl; + mbedtls_ctr_drbg_context _ctr_drbg; + mbedtls_entropy_context _entropy; + bool _is_started; + simple_cookie_t _cookie; + key_block_t _keyblk; + + uint8_t _remote_address[16]; + uint16_t _remote_port; + + uint8_t _pw[64]; + uint8_t _pw_len; + + int8_t _socket_id; + int8_t _timer_id; + send_cb *_send_cb; + receive_cb *_receive_cb; + start_timer_cb *_start_timer_cb; + timer_status_cb *_timer_status_cb; +} thread_security_t; + +thread_security_t *thread_security_create(int8_t socket_id, int8_t timer_id, uint8_t *address_ptr, uint16_t port, + send_cb *send_cb, + receive_cb *receive_cb, + start_timer_cb *start_timer_cb, + timer_status_cb *timer_status_cb); + +void thread_security_destroy(thread_security_t *sec); + +int coap_security_handler_connect(thread_security_t *sec, bool is_server, const unsigned char *pw, uint8_t len); + +int coap_security_handler_continue_connecting(thread_security_t *sec); + +int coap_security_handler_send_message(thread_security_t *sec, unsigned char *message, size_t len); + +int thread_security_send_close_alert(thread_security_t *sec); + +int coap_security_handler_read(thread_security_t *sec, unsigned char* buffer, size_t len); + +#endif diff --git a/source/include/coap_server.h b/source/include/coap_server.h deleted file mode 100644 index 1eb0222861..0000000000 --- a/source/include/coap_server.h +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright (c) 2015 ARM Limited. All rights reserved. - - * SPDX-License-Identifier: Apache-2.0 - * 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. - */ - -/* - * \file - - * \brief Add short description about this file!!! - * - */ - -#ifndef COAP_SERVER_H_ -#define COAP_SERVER_H_ - -/* Brief explain. - * - * Some explain - * - * /param param_name explain. - * - * /return TODO - */ - -#include "ns_list.h" - -typedef struct -{ - uint8_t remote_address[16]; -// management_set_response_cb *set_response_cb_ptr; -// management_get_response_cb *get_response_cb_ptr; - int8_t interface_id; - int8_t coap_service_id; - ns_list_link_t link; -} coap_service_session_t; - -void coap_server_delete_session(int8_t service_id); - -int8_t coap_server_service_init(int8_t interface_id, uint16_t listen_port, uint8_t service_options); - -#endif /* COAP_SERVER_H_ */ diff --git a/source/include/coap_server_impl.h b/source/include/coap_server_impl.h deleted file mode 100644 index 893c923d50..0000000000 --- a/source/include/coap_server_impl.h +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright (c) 2015 ARM Limited. All rights reserved. - - * SPDX-License-Identifier: Apache-2.0 - * 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. - */ - -/* - * \file - - * \brief Platform specifig implementation file - * - */ - -#ifndef COAP_SERVER_IMPL_H_ -#define COAP_SERVER_IMPL_H_ - -#include "ns_types.h" -#include "eventOS_event.h" -#include "coap_service_api.h" - -int8_t coap_server_start(void); - -void *memory_allocation(uint16_t size); - -void memory_free(void* ptr); - -void coap_server_service_tasklet(arm_event_s * event); - -uint16_t socket_open(uint16_t listen_port, coap_service_request_recv_cb *requst_recv_cb); - -#endif /* COAP_SERVER_IMPL_H_ */ diff --git a/test/coap-service/unittest/Makefile b/test/coap-service/unittest/Makefile new file mode 100755 index 0000000000..4e788fc31f --- /dev/null +++ b/test/coap-service/unittest/Makefile @@ -0,0 +1,23 @@ +#scan for folders having "Makefile" in them and remove 'this' to prevent loop +ifeq ($(OS),Windows_NT) +all: +clean: +else +DIRS := $(filter-out ./, $(sort $(dir $(shell find . -name 'Makefile')))) + +all: + for dir in $(DIRS); do \ + cd $$dir; make gcov; cd ..;\ + done + +clean: + for dir in $(DIRS); do \ + cd $$dir; make clean; cd ..;\ + done + rm -rf stub/*gcov stub/*gcda stubs/*o + rm -rf results/* + rm -rf coverages/* + rm -rf results + rm -rf coverages +endif + diff --git a/test/coap-service/unittest/MakefileWorker.mk b/test/coap-service/unittest/MakefileWorker.mk new file mode 100755 index 0000000000..2096ced036 --- /dev/null +++ b/test/coap-service/unittest/MakefileWorker.mk @@ -0,0 +1,562 @@ +#--------- +# +# MakefileWorker.mk +# +# Include this helper file in your makefile +# It makes +# A static library +# A test executable +# +# See this example for parameter settings +# examples/Makefile +# +#---------- +# Inputs - these variables describe what to build +# +# INCLUDE_DIRS - Directories used to search for include files. +# This generates a -I for each directory +# SRC_DIRS - Directories containing source file to built into the library +# SRC_FILES - Specific source files to build into library. Helpful when not all code +# in a directory can be built for test (hopefully a temporary situation) +# TEST_SRC_DIRS - Directories containing unit test code build into the unit test runner +# These do not go in a library. They are explicitly included in the test runner +# TEST_SRC_FILES - Specific source files to build into the unit test runner +# These do not go in a library. They are explicitly included in the test runner +# MOCKS_SRC_DIRS - Directories containing mock source files to build into the test runner +# These do not go in a library. They are explicitly included in the test runner +#---------- +# You can adjust these variables to influence how to build the test target +# and where to put and name outputs +# See below to determine defaults +# COMPONENT_NAME - the name of the thing being built +# TEST_TARGET - name the test executable. By default it is +# $(COMPONENT_NAME)_tests +# Helpful if you want 1 > make files in the same directory with different +# executables as output. +# CPPUTEST_HOME - where CppUTest home dir found +# TARGET_PLATFORM - Influences how the outputs are generated by modifying the +# CPPUTEST_OBJS_DIR and CPPUTEST_LIB_DIR to use a sub-directory under the +# normal objs and lib directories. Also modifies where to search for the +# CPPUTEST_LIB to link against. +# CPPUTEST_OBJS_DIR - a directory where o and d files go +# CPPUTEST_LIB_DIR - a directory where libs go +# CPPUTEST_ENABLE_DEBUG - build for debug +# CPPUTEST_USE_MEM_LEAK_DETECTION - Links with overridden new and delete +# CPPUTEST_USE_STD_CPP_LIB - Set to N to keep the standard C++ library out +# of the test harness +# CPPUTEST_USE_GCOV - Turn on coverage analysis +# Clean then build with this flag set to Y, then 'make gcov' +# CPPUTEST_MAPFILE - generate a map file +# CPPUTEST_WARNINGFLAGS - overly picky by default +# OTHER_MAKEFILE_TO_INCLUDE - a hook to use this makefile to make +# other targets. Like CSlim, which is part of fitnesse +# CPPUTEST_USE_VPATH - Use Make's VPATH functionality to support user +# specification of source files and directories that aren't below +# the user's Makefile in the directory tree, like: +# SRC_DIRS += ../../lib/foo +# It defaults to N, and shouldn't be necessary except in the above case. +#---------- +# +# Other flags users can initialize to sneak in their settings +# CPPUTEST_CXXFLAGS - flags for the C++ compiler +# CPPUTEST_CPPFLAGS - flags for the C++ AND C preprocessor +# CPPUTEST_CFLAGS - flags for the C complier +# CPPUTEST_LDFLAGS - Linker flags +#---------- + +# Some behavior is weird on some platforms. Need to discover the platform. + +# Platforms +UNAME_OUTPUT = "$(shell uname -a)" +MACOSX_STR = Darwin +MINGW_STR = MINGW +CYGWIN_STR = CYGWIN +LINUX_STR = Linux +SUNOS_STR = SunOS +UNKNWOWN_OS_STR = Unknown + +# Compilers +CC_VERSION_OUTPUT ="$(shell $(CXX) -v 2>&1)" +CLANG_STR = clang +SUNSTUDIO_CXX_STR = SunStudio + +UNAME_OS = $(UNKNWOWN_OS_STR) + +ifeq ($(findstring $(MINGW_STR),$(UNAME_OUTPUT)),$(MINGW_STR)) + UNAME_OS = $(MINGW_STR) +endif + +ifeq ($(findstring $(CYGWIN_STR),$(UNAME_OUTPUT)),$(CYGWIN_STR)) + UNAME_OS = $(CYGWIN_STR) +endif + +ifeq ($(findstring $(LINUX_STR),$(UNAME_OUTPUT)),$(LINUX_STR)) + UNAME_OS = $(LINUX_STR) +endif + +ifeq ($(findstring $(MACOSX_STR),$(UNAME_OUTPUT)),$(MACOSX_STR)) + UNAME_OS = $(MACOSX_STR) +#lion has a problem with the 'v' part of -a + UNAME_OUTPUT = "$(shell uname -pmnrs)" +endif + +ifeq ($(findstring $(SUNOS_STR),$(UNAME_OUTPUT)),$(SUNOS_STR)) + UNAME_OS = $(SUNOS_STR) + + SUNSTUDIO_CXX_ERR_STR = CC -flags +ifeq ($(findstring $(SUNSTUDIO_CXX_ERR_STR),$(CC_VERSION_OUTPUT)),$(SUNSTUDIO_CXX_ERR_STR)) + CC_VERSION_OUTPUT ="$(shell $(CXX) -V 2>&1)" + COMPILER_NAME = $(SUNSTUDIO_CXX_STR) +endif +endif + +ifeq ($(findstring $(CLANG_STR),$(CC_VERSION_OUTPUT)),$(CLANG_STR)) + COMPILER_NAME = $(CLANG_STR) +endif + +#Kludge for mingw, it does not have cc.exe, but gcc.exe will do +ifeq ($(UNAME_OS),$(MINGW_STR)) + CC := gcc +endif + +#And another kludge. Exception handling in gcc 4.6.2 is broken when linking the +# Standard C++ library as a shared library. Unbelievable. +ifeq ($(UNAME_OS),$(MINGW_STR)) + CPPUTEST_LDFLAGS += -static +endif +ifeq ($(UNAME_OS),$(CYGWIN_STR)) + CPPUTEST_LDFLAGS += -static +endif + + +#Kludge for MacOsX gcc compiler on Darwin9 who can't handle pendantic +ifeq ($(UNAME_OS),$(MACOSX_STR)) +ifeq ($(findstring Version 9,$(UNAME_OUTPUT)),Version 9) + CPPUTEST_PEDANTIC_ERRORS = N +endif +endif + +ifndef COMPONENT_NAME + COMPONENT_NAME = name_this_in_the_makefile +endif + +# Debug on by default +ifndef CPPUTEST_ENABLE_DEBUG + CPPUTEST_ENABLE_DEBUG = Y +endif + +# new and delete for memory leak detection on by default +ifndef CPPUTEST_USE_MEM_LEAK_DETECTION + CPPUTEST_USE_MEM_LEAK_DETECTION = Y +endif + +# Use the standard C library +ifndef CPPUTEST_USE_STD_C_LIB + CPPUTEST_USE_STD_C_LIB = Y +endif + +# Use the standard C++ library +ifndef CPPUTEST_USE_STD_CPP_LIB + CPPUTEST_USE_STD_CPP_LIB = Y +endif + +# Use gcov, off by default +ifndef CPPUTEST_USE_GCOV + CPPUTEST_USE_GCOV = N +endif + +ifndef CPPUTEST_PEDANTIC_ERRORS + CPPUTEST_PEDANTIC_ERRORS = Y +endif + +# Default warnings +ifndef CPPUTEST_WARNINGFLAGS + CPPUTEST_WARNINGFLAGS = -Wall -Wextra -Wshadow -Wswitch-default -Wswitch-enum -Wconversion +ifeq ($(CPPUTEST_PEDANTIC_ERRORS), Y) +# CPPUTEST_WARNINGFLAGS += -pedantic-errors + CPPUTEST_WARNINGFLAGS += -pedantic +endif +ifeq ($(UNAME_OS),$(LINUX_STR)) + CPPUTEST_WARNINGFLAGS += -Wsign-conversion +endif + CPPUTEST_CXX_WARNINGFLAGS = -Woverloaded-virtual + CPPUTEST_C_WARNINGFLAGS = -Wstrict-prototypes +endif + +#Wonderful extra compiler warnings with clang +ifeq ($(COMPILER_NAME),$(CLANG_STR)) +# -Wno-disabled-macro-expansion -> Have to disable the macro expansion warning as the operator new overload warns on that. +# -Wno-padded -> I sort-of like this warning but if there is a bool at the end of the class, it seems impossible to remove it! (except by making padding explicit) +# -Wno-global-constructors Wno-exit-time-destructors -> Great warnings, but in CppUTest it is impossible to avoid as the automatic test registration depends on the global ctor and dtor +# -Wno-weak-vtables -> The TEST_GROUP macro declares a class and will automatically inline its methods. Thats ok as they are only in one translation unit. Unfortunately, the warning can't detect that, so it must be disabled. + CPPUTEST_CXX_WARNINGFLAGS += -Weverything -Wno-disabled-macro-expansion -Wno-padded -Wno-global-constructors -Wno-exit-time-destructors -Wno-weak-vtables + CPPUTEST_C_WARNINGFLAGS += -Weverything -Wno-padded +endif + +# Uhm. Maybe put some warning flags for SunStudio here? +ifeq ($(COMPILER_NAME),$(SUNSTUDIO_CXX_STR)) + CPPUTEST_CXX_WARNINGFLAGS = + CPPUTEST_C_WARNINGFLAGS = +endif + +# Default dir for temporary files (d, o) +ifndef CPPUTEST_OBJS_DIR +ifndef TARGET_PLATFORM + CPPUTEST_OBJS_DIR = objs +else + CPPUTEST_OBJS_DIR = objs/$(TARGET_PLATFORM) +endif +endif + +# Default dir for the outout library +ifndef CPPUTEST_LIB_DIR +ifndef TARGET_PLATFORM + CPPUTEST_LIB_DIR = lib +else + CPPUTEST_LIB_DIR = lib/$(TARGET_PLATFORM) +endif +endif + +# No map by default +ifndef CPPUTEST_MAP_FILE + CPPUTEST_MAP_FILE = N +endif + +# No extentions is default +ifndef CPPUTEST_USE_EXTENSIONS + CPPUTEST_USE_EXTENSIONS = N +endif + +# No VPATH is default +ifndef CPPUTEST_USE_VPATH + CPPUTEST_USE_VPATH := N +endif +# Make empty, instead of 'N', for usage in $(if ) conditionals +ifneq ($(CPPUTEST_USE_VPATH), Y) + CPPUTEST_USE_VPATH := +endif + +ifndef TARGET_PLATFORM +#CPPUTEST_LIB_LINK_DIR = $(CPPUTEST_HOME)/lib +CPPUTEST_LIB_LINK_DIR = /usr/lib/x86_64-linux-gnu +else +CPPUTEST_LIB_LINK_DIR = $(CPPUTEST_HOME)/lib/$(TARGET_PLATFORM) +endif + +# -------------------------------------- +# derived flags in the following area +# -------------------------------------- + +# Without the C library, we'll need to disable the C++ library and ... +ifeq ($(CPPUTEST_USE_STD_C_LIB), N) + CPPUTEST_USE_STD_CPP_LIB = N + CPPUTEST_USE_MEM_LEAK_DETECTION = N + CPPUTEST_CPPFLAGS += -DCPPUTEST_STD_C_LIB_DISABLED + CPPUTEST_CPPFLAGS += -nostdinc +endif + +CPPUTEST_CPPFLAGS += -DCPPUTEST_COMPILATION + +ifeq ($(CPPUTEST_USE_MEM_LEAK_DETECTION), N) + CPPUTEST_CPPFLAGS += -DCPPUTEST_MEM_LEAK_DETECTION_DISABLED +else + ifndef CPPUTEST_MEMLEAK_DETECTOR_NEW_MACRO_FILE + CPPUTEST_MEMLEAK_DETECTOR_NEW_MACRO_FILE = -include $(CPPUTEST_HOME)/include/CppUTest/MemoryLeakDetectorNewMacros.h + endif + ifndef CPPUTEST_MEMLEAK_DETECTOR_MALLOC_MACRO_FILE + CPPUTEST_MEMLEAK_DETECTOR_MALLOC_MACRO_FILE = -include $(CPPUTEST_HOME)/include/CppUTest/MemoryLeakDetectorMallocMacros.h + endif +endif + +ifeq ($(CPPUTEST_ENABLE_DEBUG), Y) + CPPUTEST_CXXFLAGS += -g + CPPUTEST_CFLAGS += -g + CPPUTEST_LDFLAGS += -g +endif + +ifeq ($(CPPUTEST_USE_STD_CPP_LIB), N) + CPPUTEST_CPPFLAGS += -DCPPUTEST_STD_CPP_LIB_DISABLED +ifeq ($(CPPUTEST_USE_STD_C_LIB), Y) + CPPUTEST_CXXFLAGS += -nostdinc++ +endif +endif + +ifdef $(GMOCK_HOME) + GTEST_HOME = $(GMOCK_HOME)/gtest + CPPUTEST_CPPFLAGS += -I$(GMOCK_HOME)/include + GMOCK_LIBRARY = $(GMOCK_HOME)/lib/.libs/libgmock.a + LD_LIBRARIES += $(GMOCK_LIBRARY) + CPPUTEST_CPPFLAGS += -DINCLUDE_GTEST_TESTS + CPPUTEST_WARNINGFLAGS = + CPPUTEST_CPPFLAGS += -I$(GTEST_HOME)/include -I$(GTEST_HOME) + GTEST_LIBRARY = $(GTEST_HOME)/lib/.libs/libgtest.a + LD_LIBRARIES += $(GTEST_LIBRARY) +endif + + +ifeq ($(CPPUTEST_USE_GCOV), Y) + CPPUTEST_CXXFLAGS += -fprofile-arcs -ftest-coverage + CPPUTEST_CFLAGS += -fprofile-arcs -ftest-coverage +endif + +CPPUTEST_CXXFLAGS += $(CPPUTEST_WARNINGFLAGS) $(CPPUTEST_CXX_WARNINGFLAGS) +CPPUTEST_CPPFLAGS += $(CPPUTEST_WARNINGFLAGS) +CPPUTEST_CXXFLAGS += $(CPPUTEST_MEMLEAK_DETECTOR_NEW_MACRO_FILE) +CPPUTEST_CPPFLAGS += $(CPPUTEST_MEMLEAK_DETECTOR_MALLOC_MACRO_FILE) +CPPUTEST_CFLAGS += $(CPPUTEST_C_WARNINGFLAGS) + +TARGET_MAP = $(COMPONENT_NAME).map.txt +ifeq ($(CPPUTEST_MAP_FILE), Y) + CPPUTEST_LDFLAGS += -Wl,-map,$(TARGET_MAP) +endif + +# Link with CppUTest lib +CPPUTEST_LIB = $(CPPUTEST_LIB_LINK_DIR)/libCppUTest.a + +ifeq ($(CPPUTEST_USE_EXTENSIONS), Y) +CPPUTEST_LIB += $(CPPUTEST_LIB_LINK_DIR)/libCppUTestExt.a +endif + +ifdef CPPUTEST_STATIC_REALTIME + LD_LIBRARIES += -lrt +endif + +TARGET_LIB = \ + $(CPPUTEST_LIB_DIR)/lib$(COMPONENT_NAME).a + +ifndef TEST_TARGET + ifndef TARGET_PLATFORM + TEST_TARGET = $(COMPONENT_NAME)_tests + else + TEST_TARGET = $(COMPONENT_NAME)_$(TARGET_PLATFORM)_tests + endif +endif + +#Helper Functions +get_src_from_dir = $(wildcard $1/*.cpp) $(wildcard $1/*.cc) $(wildcard $1/*.c) +get_dirs_from_dirspec = $(wildcard $1) +get_src_from_dir_list = $(foreach dir, $1, $(call get_src_from_dir,$(dir))) +__src_to = $(subst .c,$1, $(subst .cc,$1, $(subst .cpp,$1,$(if $(CPPUTEST_USE_VPATH),$(notdir $2),$2)))) +src_to = $(addprefix $(CPPUTEST_OBJS_DIR)/,$(call __src_to,$1,$2)) +src_to_o = $(call src_to,.o,$1) +src_to_d = $(call src_to,.d,$1) +src_to_gcda = $(call src_to,.gcda,$1) +src_to_gcno = $(call src_to,.gcno,$1) +time = $(shell date +%s) +delta_t = $(eval minus, $1, $2) +debug_print_list = $(foreach word,$1,echo " $(word)";) echo; + +#Derived +STUFF_TO_CLEAN += $(TEST_TARGET) $(TEST_TARGET).exe $(TARGET_LIB) $(TARGET_MAP) + +SRC += $(call get_src_from_dir_list, $(SRC_DIRS)) $(SRC_FILES) +OBJ = $(call src_to_o,$(SRC)) + +STUFF_TO_CLEAN += $(OBJ) + +TEST_SRC += $(call get_src_from_dir_list, $(TEST_SRC_DIRS)) $(TEST_SRC_FILES) +TEST_OBJS = $(call src_to_o,$(TEST_SRC)) +STUFF_TO_CLEAN += $(TEST_OBJS) + + +MOCKS_SRC += $(call get_src_from_dir_list, $(MOCKS_SRC_DIRS)) +MOCKS_OBJS = $(call src_to_o,$(MOCKS_SRC)) +STUFF_TO_CLEAN += $(MOCKS_OBJS) + +ALL_SRC = $(SRC) $(TEST_SRC) $(MOCKS_SRC) + +# If we're using VPATH +ifeq ($(CPPUTEST_USE_VPATH), Y) +# gather all the source directories and add them + VPATH += $(sort $(dir $(ALL_SRC))) +# Add the component name to the objs dir path, to differentiate between same-name objects + CPPUTEST_OBJS_DIR := $(addsuffix /$(COMPONENT_NAME),$(CPPUTEST_OBJS_DIR)) +endif + +#Test coverage with gcov +GCOV_OUTPUT = gcov_output.txt +GCOV_REPORT = gcov_report.txt +GCOV_ERROR = gcov_error.txt +GCOV_GCDA_FILES = $(call src_to_gcda, $(ALL_SRC)) +GCOV_GCNO_FILES = $(call src_to_gcno, $(ALL_SRC)) +TEST_OUTPUT = $(TEST_TARGET).txt +STUFF_TO_CLEAN += \ + $(GCOV_OUTPUT)\ + $(GCOV_REPORT)\ + $(GCOV_REPORT).html\ + $(GCOV_ERROR)\ + $(GCOV_GCDA_FILES)\ + $(GCOV_GCNO_FILES)\ + $(TEST_OUTPUT) + +#The gcda files for gcov need to be deleted before each run +#To avoid annoying messages. +GCOV_CLEAN = $(SILENCE)rm -f $(GCOV_GCDA_FILES) $(GCOV_OUTPUT) $(GCOV_REPORT) $(GCOV_ERROR) +RUN_TEST_TARGET = $(SILENCE) $(GCOV_CLEAN) ; echo "Running $(TEST_TARGET)"; ./$(TEST_TARGET) $(CPPUTEST_EXE_FLAGS) -ojunit + +ifeq ($(CPPUTEST_USE_GCOV), Y) + + ifeq ($(COMPILER_NAME),$(CLANG_STR)) + LD_LIBRARIES += --coverage + else + LD_LIBRARIES += -lgcov + endif +endif + + +INCLUDES_DIRS_EXPANDED = $(call get_dirs_from_dirspec, $(INCLUDE_DIRS)) +INCLUDES += $(foreach dir, $(INCLUDES_DIRS_EXPANDED), -I$(dir)) +MOCK_DIRS_EXPANDED = $(call get_dirs_from_dirspec, $(MOCKS_SRC_DIRS)) +INCLUDES += $(foreach dir, $(MOCK_DIRS_EXPANDED), -I$(dir)) + +CPPUTEST_CPPFLAGS += $(INCLUDES) $(CPPUTESTFLAGS) + +DEP_FILES = $(call src_to_d, $(ALL_SRC)) +STUFF_TO_CLEAN += $(DEP_FILES) $(PRODUCTION_CODE_START) $(PRODUCTION_CODE_END) +STUFF_TO_CLEAN += $(STDLIB_CODE_START) $(MAP_FILE) cpputest_*.xml junit_run_output + +# We'll use the CPPUTEST_CFLAGS etc so that you can override AND add to the CppUTest flags +CFLAGS = $(CPPUTEST_CFLAGS) $(CPPUTEST_ADDITIONAL_CFLAGS) +CPPFLAGS = $(CPPUTEST_CPPFLAGS) $(CPPUTEST_ADDITIONAL_CPPFLAGS) +CXXFLAGS = $(CPPUTEST_CXXFLAGS) $(CPPUTEST_ADDITIONAL_CXXFLAGS) +LDFLAGS = $(CPPUTEST_LDFLAGS) $(CPPUTEST_ADDITIONAL_LDFLAGS) + +# Don't consider creating the archive a warning condition that does STDERR output +ARFLAGS := $(ARFLAGS)c + +DEP_FLAGS=-MMD -MP + +# Some macros for programs to be overridden. For some reason, these are not in Make defaults +RANLIB = ranlib + +# Targets + +.PHONY: all +all: start $(TEST_TARGET) + $(RUN_TEST_TARGET) + +.PHONY: start +start: $(TEST_TARGET) + $(SILENCE)START_TIME=$(call time) + +.PHONY: all_no_tests +all_no_tests: $(TEST_TARGET) + +.PHONY: flags +flags: + @echo + @echo "OS ${UNAME_OS}" + @echo "Compile C and C++ source with CPPFLAGS:" + @$(call debug_print_list,$(CPPFLAGS)) + @echo "Compile C++ source with CXXFLAGS:" + @$(call debug_print_list,$(CXXFLAGS)) + @echo "Compile C source with CFLAGS:" + @$(call debug_print_list,$(CFLAGS)) + @echo "Link with LDFLAGS:" + @$(call debug_print_list,$(LDFLAGS)) + @echo "Link with LD_LIBRARIES:" + @$(call debug_print_list,$(LD_LIBRARIES)) + @echo "Create libraries with ARFLAGS:" + @$(call debug_print_list,$(ARFLAGS)) + +TEST_DEPS = $(TEST_OBJS) $(MOCKS_OBJS) $(PRODUCTION_CODE_START) $(TARGET_LIB) $(USER_LIBS) $(PRODUCTION_CODE_END) $(CPPUTEST_LIB) $(STDLIB_CODE_START) +test-deps: $(TEST_DEPS) + +$(TEST_TARGET): $(TEST_DEPS) + @echo Linking $@ + $(SILENCE)$(CXX) -o $@ $^ $(LD_LIBRARIES) $(LDFLAGS) + +$(TARGET_LIB): $(OBJ) + @echo Building archive $@ + $(SILENCE)mkdir -p $(dir $@) + $(SILENCE)$(AR) $(ARFLAGS) $@ $^ + $(SILENCE)$(RANLIB) $@ + +test: $(TEST_TARGET) + $(RUN_TEST_TARGET) | tee $(TEST_OUTPUT) + +vtest: $(TEST_TARGET) + $(RUN_TEST_TARGET) -v | tee $(TEST_OUTPUT) + +$(CPPUTEST_OBJS_DIR)/%.o: %.cc + @echo compiling $(notdir $<) + $(SILENCE)mkdir -p $(dir $@) + $(SILENCE)$(COMPILE.cpp) $(DEP_FLAGS) $(OUTPUT_OPTION) $< + +$(CPPUTEST_OBJS_DIR)/%.o: %.cpp + @echo compiling $(notdir $<) + $(SILENCE)mkdir -p $(dir $@) + $(SILENCE)$(COMPILE.cpp) $(DEP_FLAGS) $(OUTPUT_OPTION) $< + +$(CPPUTEST_OBJS_DIR)/%.o: %.c + @echo compiling $(notdir $<) + $(SILENCE)mkdir -p $(dir $@) + $(SILENCE)$(COMPILE.c) $(DEP_FLAGS) $(OUTPUT_OPTION) $< + +ifneq "$(MAKECMDGOALS)" "clean" +-include $(DEP_FILES) +endif + +.PHONY: clean +clean: + @echo Making clean + $(SILENCE)$(RM) $(STUFF_TO_CLEAN) + $(SILENCE)rm -rf gcov objs #$(CPPUTEST_OBJS_DIR) + $(SILENCE)rm -rf $(CPPUTEST_LIB_DIR) + $(SILENCE)find . -name "*.gcno" | xargs rm -f + $(SILENCE)find . -name "*.gcda" | xargs rm -f + +#realclean gets rid of all gcov, o and d files in the directory tree +#not just the ones made by this makefile +.PHONY: realclean +realclean: clean + $(SILENCE)rm -rf gcov + $(SILENCE)find . -name "*.gdcno" | xargs rm -f + $(SILENCE)find . -name "*.[do]" | xargs rm -f + +gcov: test +ifeq ($(CPPUTEST_USE_VPATH), Y) + $(SILENCE)gcov --object-directory $(CPPUTEST_OBJS_DIR) $(SRC) >> $(GCOV_OUTPUT) 2>> $(GCOV_ERROR) +else + $(SILENCE)for d in $(SRC_DIRS) ; do \ + gcov --object-directory $(CPPUTEST_OBJS_DIR)/$$d $$d/*.c $$d/*.cpp >> $(GCOV_OUTPUT) 2>>$(GCOV_ERROR) ; \ + done + $(SILENCE)for f in $(SRC_FILES) ; do \ + gcov --object-directory $(CPPUTEST_OBJS_DIR)/$$f $$f >> $(GCOV_OUTPUT) 2>>$(GCOV_ERROR) ; \ + done +endif +# $(CPPUTEST_HOME)/scripts/filterGcov.sh $(GCOV_OUTPUT) $(GCOV_ERROR) $(GCOV_REPORT) $(TEST_OUTPUT) + /usr/share/cpputest/scripts/filterGcov.sh $(GCOV_OUTPUT) $(GCOV_ERROR) $(GCOV_REPORT) $(TEST_OUTPUT) + $(SILENCE)cat $(GCOV_REPORT) + $(SILENCE)mkdir -p gcov + $(SILENCE)mv *.gcov gcov + $(SILENCE)mv gcov_* gcov + @echo "See gcov directory for details" + +.PHONEY: format +format: + $(CPPUTEST_HOME)/scripts/reformat.sh $(PROJECT_HOME_DIR) + +.PHONEY: debug +debug: + @echo + @echo "Target Source files:" + @$(call debug_print_list,$(SRC)) + @echo "Target Object files:" + @$(call debug_print_list,$(OBJ)) + @echo "Test Source files:" + @$(call debug_print_list,$(TEST_SRC)) + @echo "Test Object files:" + @$(call debug_print_list,$(TEST_OBJS)) + @echo "Mock Source files:" + @$(call debug_print_list,$(MOCKS_SRC)) + @echo "Mock Object files:" + @$(call debug_print_list,$(MOCKS_OBJS)) + @echo "All Input Dependency files:" + @$(call debug_print_list,$(DEP_FILES)) + @echo Stuff to clean: + @$(call debug_print_list,$(STUFF_TO_CLEAN)) + @echo Includes: + @$(call debug_print_list,$(INCLUDES)) + +-include $(OTHER_MAKEFILE_TO_INCLUDE) diff --git a/test/coap-service/unittest/coap_connection_handler/Makefile b/test/coap-service/unittest/coap_connection_handler/Makefile new file mode 100644 index 0000000000..d934974d1f --- /dev/null +++ b/test/coap-service/unittest/coap_connection_handler/Makefile @@ -0,0 +1,23 @@ +include ../makefile_defines.txt + +COMPONENT_NAME = coap_connection_handler_unit + +#This must be changed manually +SRC_FILES = \ + ../../../../source/coap_connection_handler.c + +TEST_SRC_FILES = \ + main.cpp \ + coap_connection_handlertest.cpp \ + test_coap_connection_handler.c \ + ../stub/ns_trace_stub.c \ + ../stub/ns_list_stub.c \ + ../stub/ns_timer_stub.c \ + ../stub/nsdynmemLIB_stub.c \ + ../stub/socket_api_stub.c \ + ../stub/coap_security_handler_stub.c \ + +include ../MakefileWorker.mk + +CPPUTESTFLAGS += -DFEA_TRACE_SUPPORT + diff --git a/test/coap-service/unittest/coap_connection_handler/coap_connection_handlertest.cpp b/test/coap-service/unittest/coap_connection_handler/coap_connection_handlertest.cpp new file mode 100644 index 0000000000..383d42b6b8 --- /dev/null +++ b/test/coap-service/unittest/coap_connection_handler/coap_connection_handlertest.cpp @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2015 ARM. All rights reserved. + */ +#include "CppUTest/TestHarness.h" +#include "test_coap_connection_handler.h" + +TEST_GROUP(coap_connection_handler) +{ + void setup() + { + } + + void teardown() + { + } +}; + +TEST(coap_connection_handler, test_connection_handler_create) +{ + CHECK(test_connection_handler_create()); +} + +TEST(coap_connection_handler, test_connection_handler_destroy) +{ + CHECK(test_connection_handler_destroy()); +} + +TEST(coap_connection_handler, test_coap_connection_handler_open_connection) +{ + CHECK(test_coap_connection_handler_open_connection()); +} + +TEST(coap_connection_handler, test_coap_connection_handler_send_data) +{ + CHECK(test_coap_connection_handler_send_data()); +} + +TEST(coap_connection_handler, test_coap_connection_handler_virtual_recv) +{ + CHECK(test_coap_connection_handler_virtual_recv()); +} + +TEST(coap_connection_handler, test_coap_connection_handler_socket_belongs_to) +{ + CHECK(test_coap_connection_handler_socket_belongs_to()); +} + +TEST(coap_connection_handler, test_timer_callbacks) +{ + CHECK(test_timer_callbacks()); +} + +TEST(coap_connection_handler, test_socket_api_callbacks) +{ + CHECK(test_socket_api_callbacks()); +} + +TEST(coap_connection_handler, test_security_callbacks) +{ + CHECK(test_security_callbacks()); +} + diff --git a/test/coap-service/unittest/coap_connection_handler/main.cpp b/test/coap-service/unittest/coap_connection_handler/main.cpp new file mode 100644 index 0000000000..c04ec8b369 --- /dev/null +++ b/test/coap-service/unittest/coap_connection_handler/main.cpp @@ -0,0 +1,15 @@ +/* + * Copyright (c) 2015 ARM. All rights reserved. + */ + +#include "CppUTest/CommandLineTestRunner.h" +#include "CppUTest/TestPlugin.h" +#include "CppUTest/TestRegistry.h" +#include "CppUTestExt/MockSupportPlugin.h" +int main(int ac, char** av) +{ + return CommandLineTestRunner::RunAllTests(ac, av); +} + +IMPORT_TEST_GROUP(coap_connection_handler); + diff --git a/test/coap-service/unittest/coap_connection_handler/test_coap_connection_handler.c b/test/coap-service/unittest/coap_connection_handler/test_coap_connection_handler.c new file mode 100644 index 0000000000..8a226d88e8 --- /dev/null +++ b/test/coap-service/unittest/coap_connection_handler/test_coap_connection_handler.c @@ -0,0 +1,467 @@ +/* + * Copyright (c) 2015 ARM. All rights reserved. + */ +#include "test_coap_connection_handler.h" +#include +#include +#include "nsdynmemLIB_stub.h" +#include "mbedtls/ssl.h" +#include "coap_connection_handler.h" +#include "coap_security_handler_stub.h" +#include "ns_timer_stub.h" +#include "socket_api.h" +#include "socket_api_stub.h" +#include "net_interface.h" + +int send_to_sock_cb(int8_t socket_id, uint8_t address, uint16_t port, const unsigned char *a, int b) +{ + return 1; +} + +int receive_from_sock_cb(int8_t socket_id, uint8_t address, uint16_t port, unsigned char *a, int b) +{ + return 1; +} + +int get_passwd_cb(int8_t socket_id, uint8_t address, uint16_t port, uint8_t *pw_ptr, uint8_t *pw_len) +{ + return 0; +} + +void sec_done_cb(int8_t socket_id, uint8_t address[static 16], uint16_t port, uint8_t keyblock[static 40]) +{ + return 1; +} + +bool test_connection_handler_create() +{ + coap_security_handler_stub.counter = -1; + if( NULL != connection_handler_create(NULL, NULL, NULL, NULL) ) + return false; + + if( NULL != connection_handler_create(&receive_from_sock_cb, NULL, NULL, NULL) ) + return false; + + nsdynmemlib_stub.returnCounter = 1; + thread_conn_handler_t *handler = connection_handler_create(&receive_from_sock_cb, NULL, NULL, NULL); + if( NULL == handler ) + return false; + ns_dyn_mem_free(handler); + return true; +} + +bool test_connection_handler_destroy() +{ + coap_security_handler_stub.counter = -1; + nsdynmemlib_stub.returnCounter = 1; + thread_conn_handler_t *handler = connection_handler_create(&receive_from_sock_cb, NULL, NULL, NULL); + + connection_handler_destroy(handler); + return true; +} + +bool test_coap_connection_handler_open_connection() +{ + coap_security_handler_stub.counter = -1; + nsdynmemlib_stub.returnCounter = 1; + thread_conn_handler_t *handler = connection_handler_create(&receive_from_sock_cb, NULL, NULL, NULL); + + if( -1 != coap_connection_handler_open_connection(NULL, 0,false,false,false,false) ) + return false; + + if( -1 != coap_connection_handler_open_connection(handler, 0,false,false,false,false) ) + return false; + + ns_dyn_mem_free(handler); + nsdynmemlib_stub.returnCounter = 1; + handler = connection_handler_create(&receive_from_sock_cb, &send_to_sock_cb, NULL, NULL); + if( -1 != coap_connection_handler_open_connection(handler, 0,true,true,true,false) ) + return false; + + nsdynmemlib_stub.returnCounter = 2; + if( 0 != coap_connection_handler_open_connection(handler, 0,true,true,true,false) ) + return false; + + nsdynmemlib_stub.returnCounter = 1; + if( 0 != coap_connection_handler_open_connection(handler, 22,false,true,true,true) ) + return false; + + //open second one + nsdynmemlib_stub.returnCounter = 1; + thread_conn_handler_t *handler2 = connection_handler_create(&receive_from_sock_cb, &send_to_sock_cb, NULL, NULL); + nsdynmemlib_stub.returnCounter = 1; + if( 0 != coap_connection_handler_open_connection(handler2, 22,false,true,true,true) ) + return false; + + if( 0 != coap_connection_handler_open_connection(handler, 23,false,false,false,false) ) + return false; + + connection_handler_destroy(handler2); + connection_handler_destroy(handler); + return true; +} + +bool test_coap_connection_handler_send_data() +{ + coap_security_handler_stub.counter = -1; + if( -1 != coap_connection_handler_send_data(NULL, NULL, NULL, 0, false)) + return false; + + ns_address_t addr; + memset(addr.address, 1, 16); + addr.identifier = 22; + + nsdynmemlib_stub.returnCounter = 1; + thread_conn_handler_t *handler = connection_handler_create(&receive_from_sock_cb, &send_to_sock_cb, NULL, NULL); + nsdynmemlib_stub.returnCounter = 1; + if( 0 != coap_connection_handler_open_connection(handler, 22,false,true,false,false) ) + return false; + + if( -1 != coap_connection_handler_send_data(handler, &addr, NULL, 0, true)) + return false; + + connection_handler_destroy(handler); + + coap_security_handler_stub.sec_obj = (thread_security_t *)malloc(sizeof(thread_security_t)); + memset(coap_security_handler_stub.sec_obj, 0, sizeof(thread_security_t)); + coap_security_handler_stub.sec_obj->_remote_port = 22; + memset(coap_security_handler_stub.sec_obj->_remote_address, 1, 16 ); + + nsdynmemlib_stub.returnCounter = 1; + handler = connection_handler_create(&receive_from_sock_cb, &send_to_sock_cb, NULL, NULL); + nsdynmemlib_stub.returnCounter = 3; + if( 0 != coap_connection_handler_open_connection(handler, 22,false,true,false,false) ) + return false; + + if( -1 != coap_connection_handler_send_data(handler, &addr, NULL, 0, true)) + return false; + + if( -1 != coap_connection_handler_send_data(handler, &addr, NULL, 0, true)) + return false; + + connection_handler_destroy(handler); + + free(coap_security_handler_stub.sec_obj); + coap_security_handler_stub.sec_obj = NULL; + + //NON SECURE HERE --> + nsdynmemlib_stub.returnCounter = 1; + handler = connection_handler_create(&receive_from_sock_cb, &send_to_sock_cb, NULL, NULL); + nsdynmemlib_stub.returnCounter = 1; + if( 0 != coap_connection_handler_open_connection(handler, 22,false,false,false,false) ) + return false; + + + if( 1 != coap_connection_handler_send_data(handler, &addr, NULL, 0, true)) + return false; + connection_handler_destroy(handler); + + nsdynmemlib_stub.returnCounter = 1; + handler = connection_handler_create(&receive_from_sock_cb, &send_to_sock_cb, NULL, NULL); + nsdynmemlib_stub.returnCounter = 1; + if( 0 != coap_connection_handler_open_connection(handler, 22,false,false,true,false) ) + return false; + + socket_api_stub.int8_value = 7; + if( 7 != coap_connection_handler_send_data(handler, &addr, NULL, 0, true)) + return false; + connection_handler_destroy(handler); + + //<-- NON SECURE HERE + + return true; +} + +bool test_coap_connection_handler_virtual_recv() +{ + coap_security_handler_stub.counter = -1; + uint8_t buf[16]; + memset(&buf, 1, 16); + if( -1 != coap_connection_handler_virtual_recv(NULL,buf, 12, NULL, 0) ) + return false; + + nsdynmemlib_stub.returnCounter = 1; + thread_conn_handler_t *handler = connection_handler_create(&receive_from_sock_cb, &send_to_sock_cb, NULL, NULL); + nsdynmemlib_stub.returnCounter = 1; + if( 0 != coap_connection_handler_open_connection(handler, 22,false,true,true,false) ) + return false; + + if( -1 != coap_connection_handler_virtual_recv(handler,buf, 12, NULL, 0) ) + return false; + + nsdynmemlib_stub.returnCounter = 1; + if( -1 != coap_connection_handler_virtual_recv(handler,buf, 12, NULL, 0) ) + return false; + + ns_timer_stub.int8_value = 0; + nsdynmemlib_stub.returnCounter = 3; + if( -1 != coap_connection_handler_virtual_recv(handler,buf, 12, &buf, 1) ) + return false; + + //handler->socket->data still in memory + coap_security_handler_stub.sec_obj = (thread_security_t *)malloc(sizeof(thread_security_t)); + memset(coap_security_handler_stub.sec_obj, 0, sizeof(thread_security_t)); + coap_security_handler_stub.sec_obj->_remote_port = 55; + memset(coap_security_handler_stub.sec_obj->_remote_address, 4, 16 ); + + ns_timer_stub.int8_value = -1; + nsdynmemlib_stub.returnCounter = 3; + if( -1 != coap_connection_handler_virtual_recv(handler,buf, 12, &buf, 1) ) + return false; + + ns_timer_stub.int8_value = 0; + nsdynmemlib_stub.returnCounter = 3; + if( -1 != coap_connection_handler_virtual_recv(handler,buf, 12, &buf, 1) ) + return false; + + connection_handler_destroy(handler); + + nsdynmemlib_stub.returnCounter = 1; + thread_conn_handler_t *handler2 = connection_handler_create(&receive_from_sock_cb, &send_to_sock_cb, &get_passwd_cb, &sec_done_cb); + nsdynmemlib_stub.returnCounter = 1; + if( 0 != coap_connection_handler_open_connection(handler2, 24,false,true,true,false) ) + return false; + + nsdynmemlib_stub.returnCounter = 3; + if( 0 != coap_connection_handler_virtual_recv(handler2,buf, 12, &buf, 1) ) + return false; + + nsdynmemlib_stub.returnCounter = 1; + coap_security_handler_stub.sec_obj->_remote_port = 12; + memset(coap_security_handler_stub.sec_obj->_remote_address, 1, 16 ); + if( 0 != coap_connection_handler_virtual_recv(handler2,buf, 12, &buf, 1) ) + return false; + + nsdynmemlib_stub.returnCounter = 1; + if( 0 != coap_connection_handler_virtual_recv(handler2,buf, 12, &buf, 1) ) + return false; + + nsdynmemlib_stub.returnCounter = 1; + coap_security_handler_stub.int_value = MBEDTLS_ERR_SSL_PEER_CLOSE_NOTIFY; + if( 0 != coap_connection_handler_virtual_recv(handler2,buf, 12, &buf, 1) ) + return false; + + connection_handler_destroy(handler2); + + free(coap_security_handler_stub.sec_obj); + coap_security_handler_stub.sec_obj = NULL; + + nsdynmemlib_stub.returnCounter = 1; + thread_conn_handler_t *handler3 = connection_handler_create(&receive_from_sock_cb, &send_to_sock_cb, &get_passwd_cb, &sec_done_cb); + nsdynmemlib_stub.returnCounter = 1; + if( 0 != coap_connection_handler_open_connection(handler3, 26,false,false,true,false) ) + return false; + + nsdynmemlib_stub.returnCounter = 3; + if( 0 != coap_connection_handler_virtual_recv(handler3,buf, 12, &buf, 1) ) + return false; + + connection_handler_destroy(handler3); + + return true; +} + +bool test_coap_connection_handler_socket_belongs_to() +{ + coap_security_handler_stub.counter = -1; + if( false != coap_connection_handler_socket_belongs_to(NULL, 2) ) + return false; + + socket_api_stub.int8_value = 0; + nsdynmemlib_stub.returnCounter = 1; + thread_conn_handler_t *handler = connection_handler_create(&receive_from_sock_cb, &send_to_sock_cb, NULL, NULL); + nsdynmemlib_stub.returnCounter = 1; + if( 0 != coap_connection_handler_open_connection(handler, 22,false,true,true,false) ) + return false; + + if( true != coap_connection_handler_socket_belongs_to(handler, 0) ) + return false; + + if( false != coap_connection_handler_socket_belongs_to(handler, 3) ) + return false; + connection_handler_destroy(handler); + + nsdynmemlib_stub.returnCounter = 0; + return true; +} + +bool test_timer_callbacks() +{ + coap_security_handler_stub.counter = -1; + uint8_t buf[16]; + memset(&buf, 1, 16); + + nsdynmemlib_stub.returnCounter = 1; + thread_conn_handler_t *handler = connection_handler_create(&receive_from_sock_cb, &send_to_sock_cb, NULL, NULL); + nsdynmemlib_stub.returnCounter = 1; + if( 0 != coap_connection_handler_open_connection(handler, 22,false,true,true,false) ) + return false; + + //handler->socket->data still in memory + coap_security_handler_stub.sec_obj = (thread_security_t *)malloc(sizeof(thread_security_t)); + memset(coap_security_handler_stub.sec_obj, 0, sizeof(thread_security_t)); + coap_security_handler_stub.sec_obj->_remote_port = 55; + memset(coap_security_handler_stub.sec_obj->_remote_address, 4, 16 ); + coap_security_handler_stub.sec_obj->_timer_id = 5; + + ns_timer_stub.int8_value = 0; + nsdynmemlib_stub.returnCounter = 3; + ns_timer_stub.int8_value = 5; + if( -1 != coap_connection_handler_virtual_recv(handler,buf, 12, &buf, 1) ) + return false; + + //Note next tests will affect ns_timer test (cycle & cycle_count + if( coap_security_handler_stub.start_timer_cb ){ + coap_security_handler_stub.start_timer_cb(5, 0, 0); + + coap_security_handler_stub.start_timer_cb(5, 1, 2); + } + + if( coap_security_handler_stub.timer_status_cb ){ + if( -1 != coap_security_handler_stub.timer_status_cb(4) ) + return false; + + if( 0 != coap_security_handler_stub.timer_status_cb(5) ) + return false; + } + + if( ns_timer_stub.cb ){ + ns_timer_stub.cb(4, 0); + + ns_timer_stub.cb(5, 0); + + coap_security_handler_stub.int_value = MBEDTLS_ERR_SSL_TIMEOUT; + + ns_timer_stub.cb(5, 0); + coap_security_handler_stub.int_value = 0; + } + + connection_handler_destroy(handler); + free(coap_security_handler_stub.sec_obj); + coap_security_handler_stub.sec_obj = NULL; + return true; +} + +bool test_socket_api_callbacks() +{ + coap_security_handler_stub.counter = -1; + uint8_t buf[16]; + memset(&buf, 1, 16); + + socket_callback_t *sckt_data = (socket_callback_t *)malloc(sizeof(socket_callback_t)); + memset(sckt_data, 0, sizeof(socket_callback_t)); + + coap_security_handler_stub.sec_obj = (thread_security_t *)malloc(sizeof(thread_security_t)); + memset(coap_security_handler_stub.sec_obj, 0, sizeof(thread_security_t)); + + socket_api_stub.int8_value = 0; + nsdynmemlib_stub.returnCounter = 1; + thread_conn_handler_t *handler = connection_handler_create(&receive_from_sock_cb, &send_to_sock_cb, NULL, NULL); + nsdynmemlib_stub.returnCounter = 1; + if( 0 != coap_connection_handler_open_connection(handler, 22,false,false,true,false) ) + return false; + + if( socket_api_stub.recv_cb ){ + sckt_data->event_type = SOCKET_DATA; + sckt_data->d_len = 1; + socket_api_stub.int8_value = -1; + socket_api_stub.recv_cb(sckt_data); + + nsdynmemlib_stub.returnCounter = 1; + socket_api_stub.recv_cb(sckt_data); + + nsdynmemlib_stub.returnCounter = 1; + socket_api_stub.int8_value = 1; + socket_api_stub.recv_cb(sckt_data); + } + + connection_handler_destroy(handler); + + nsdynmemlib_stub.returnCounter = 1; + thread_conn_handler_t *handler2 = connection_handler_create(&receive_from_sock_cb, &send_to_sock_cb, &get_passwd_cb, &sec_done_cb); + nsdynmemlib_stub.returnCounter = 1; + if( 0 != coap_connection_handler_open_connection(handler2, 22,false,true,true,false) ) + return false; + + if( socket_api_stub.recv_cb ){ + nsdynmemlib_stub.returnCounter = 1; + socket_api_stub.int8_value = 1; + sckt_data->socket_id = 1; + socket_api_stub.recv_cb(sckt_data); + + nsdynmemlib_stub.returnCounter = 2; + socket_api_stub.int8_value = 1; + sckt_data->socket_id = 1; + socket_api_stub.recv_cb(sckt_data); + + nsdynmemlib_stub.returnCounter = 1; + socket_api_stub.int8_value = 1; + sckt_data->socket_id = 1; + socket_api_stub.recv_cb(sckt_data); + + coap_security_handler_stub.int_value = 4; + nsdynmemlib_stub.returnCounter = 1; + socket_api_stub.int8_value = 1; + sckt_data->socket_id = 1; + socket_api_stub.recv_cb(sckt_data); + + coap_security_handler_stub.int_value = MBEDTLS_ERR_SSL_PEER_CLOSE_NOTIFY; + nsdynmemlib_stub.returnCounter = 1; + socket_api_stub.int8_value = 1; + sckt_data->socket_id = 1; + socket_api_stub.recv_cb(sckt_data); + } + + connection_handler_destroy(handler2); + + free(coap_security_handler_stub.sec_obj); + coap_security_handler_stub.sec_obj = NULL; + + free(sckt_data); + sckt_data = NULL; + return true; +} + +bool test_security_callbacks() +{ + coap_security_handler_stub.counter = -1; + uint8_t buf[16]; + memset(&buf, 1, 16); + + socket_callback_t *sckt_data = (socket_callback_t *)malloc(sizeof(socket_callback_t)); + memset(sckt_data, 0, sizeof(socket_callback_t)); + + coap_security_handler_stub.sec_obj = (thread_security_t *)malloc(sizeof(thread_security_t)); + memset(coap_security_handler_stub.sec_obj, 0, sizeof(thread_security_t)); + + nsdynmemlib_stub.returnCounter = 1; + thread_conn_handler_t *handler = connection_handler_create(&receive_from_sock_cb, &send_to_sock_cb, NULL, NULL); + nsdynmemlib_stub.returnCounter = 1; + if( 0 != coap_connection_handler_open_connection(handler, 22,false,true,true,false) ) + return false; + + if( socket_api_stub.recv_cb ){ + sckt_data->event_type = SOCKET_DATA; + sckt_data->d_len = 1; + nsdynmemlib_stub.returnCounter = 2; + socket_api_stub.int8_value = 1; + sckt_data->socket_id = 0; + socket_api_stub.recv_cb(sckt_data); + } + + if( coap_security_handler_stub.send_cb ){ + coap_security_handler_stub.send_cb(0, buf, 22, &buf, 16); + } + if( coap_security_handler_stub.receive_cb ){ + coap_security_handler_stub.receive_cb(0, &buf, 16); + } + + connection_handler_destroy(handler); + + free(coap_security_handler_stub.sec_obj); + coap_security_handler_stub.sec_obj = NULL; + + free(sckt_data); + sckt_data = NULL; + return true; +} diff --git a/test/coap-service/unittest/coap_connection_handler/test_coap_connection_handler.h b/test/coap-service/unittest/coap_connection_handler/test_coap_connection_handler.h new file mode 100644 index 0000000000..7398a2e276 --- /dev/null +++ b/test/coap-service/unittest/coap_connection_handler/test_coap_connection_handler.h @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2015 ARM. All rights reserved. + */ +#ifndef TEST_COAP_CONNECTION_HANDLER_H +#define TEST_COAP_CONNECTION_HANDLER_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +bool test_connection_handler_create(); + +bool test_connection_handler_destroy(); + +bool test_coap_connection_handler_open_connection(); + +bool test_coap_connection_handler_send_data(); + +bool test_coap_connection_handler_virtual_recv(); + +bool test_coap_connection_handler_socket_belongs_to(); + +bool test_timer_callbacks(); + +bool test_socket_api_callbacks(); + +bool test_security_callbacks(); + +#ifdef __cplusplus +} +#endif + +#endif // TEST_COAP_CONNECTION_HANDLER_H + diff --git a/test/coap-service/unittest/coap_message_handler/Makefile b/test/coap-service/unittest/coap_message_handler/Makefile new file mode 100644 index 0000000000..8ca92aaf85 --- /dev/null +++ b/test/coap-service/unittest/coap_message_handler/Makefile @@ -0,0 +1,23 @@ +include ../makefile_defines.txt + +COMPONENT_NAME = coap_message_handler_unit + +#This must be changed manually +SRC_FILES = \ + ../../../../source/coap_message_handler.c + +TEST_SRC_FILES = \ + main.cpp \ + coap_message_handlertest.cpp \ + test_coap_message_handler.c \ + ../stub/ns_trace_stub.c \ + ../stub/sn_coap_protocol_stub.c \ + ../stub/sn_coap_parser_stub.c \ + ../stub/sn_coap_builder_stub.c \ + ../stub/nsdynmemLIB_stub.c \ + ../stub/ns_list_stub.c \ + +include ../MakefileWorker.mk + +CPPUTESTFLAGS += -DFEA_TRACE_SUPPORT + diff --git a/test/coap-service/unittest/coap_message_handler/coap_message_handlertest.cpp b/test/coap-service/unittest/coap_message_handler/coap_message_handlertest.cpp new file mode 100644 index 0000000000..e36d92667d --- /dev/null +++ b/test/coap-service/unittest/coap_message_handler/coap_message_handlertest.cpp @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2015 ARM. All rights reserved. + */ +#include "CppUTest/TestHarness.h" +#include "test_coap_message_handler.h" + +TEST_GROUP(coap_message_handler) +{ + void setup() + { + } + + void teardown() + { + } +}; + +TEST(coap_message_handler, test_coap_message_handler_init) +{ + CHECK(test_coap_message_handler_init()); +} + +TEST(coap_message_handler, test_coap_message_handler_destroy) +{ + CHECK(test_coap_message_handler_destroy()); +} + +TEST(coap_message_handler, test_coap_message_handler_find_transaction) +{ + CHECK(test_coap_message_handler_find_transaction()); +} + +TEST(coap_message_handler, test_coap_message_handler_coap_msg_process) +{ + CHECK(test_coap_message_handler_coap_msg_process()); +} + +TEST(coap_message_handler, test_coap_message_handler_request_send) +{ + CHECK(test_coap_message_handler_request_send()); +} + +TEST(coap_message_handler, test_coap_message_handler_response_send) +{ + CHECK(test_coap_message_handler_response_send()); +} + +TEST(coap_message_handler, test_coap_message_handler_exec) +{ + CHECK(test_coap_message_handler_exec()); +} + diff --git a/test/coap-service/unittest/coap_message_handler/main.cpp b/test/coap-service/unittest/coap_message_handler/main.cpp new file mode 100644 index 0000000000..f042e6bdeb --- /dev/null +++ b/test/coap-service/unittest/coap_message_handler/main.cpp @@ -0,0 +1,15 @@ +/* + * Copyright (c) 2015 ARM. All rights reserved. + */ + +#include "CppUTest/CommandLineTestRunner.h" +#include "CppUTest/TestPlugin.h" +#include "CppUTest/TestRegistry.h" +#include "CppUTestExt/MockSupportPlugin.h" +int main(int ac, char** av) +{ + return CommandLineTestRunner::RunAllTests(ac, av); +} + +IMPORT_TEST_GROUP(coap_message_handler); + diff --git a/test/coap-service/unittest/coap_message_handler/test_coap_message_handler.c b/test/coap-service/unittest/coap_message_handler/test_coap_message_handler.c new file mode 100644 index 0000000000..126e05aa68 --- /dev/null +++ b/test/coap-service/unittest/coap_message_handler/test_coap_message_handler.c @@ -0,0 +1,298 @@ +/* + * Copyright (c) 2015 ARM. All rights reserved. + */ +#include "test_coap_message_handler.h" +#include +#include "coap_message_handler.h" +#include "sn_coap_protocol_stub.h" +#include "nsdynmemLIB_stub.h" +#include "sn_coap_builder_stub.h" +#include "sn_coap_parser_stub.h" + +int retCounter = 0; +int retValue = 0; + +static void *own_alloc(uint16_t size) +{ + if( retCounter > 0 ){ + retCounter--; + return malloc(size); + } + return NULL; +} + +static void own_free(void *ptr) +{ + if (ptr) { + free(ptr); + } +} + +static uint8_t coap_tx_function(uint8_t *data_ptr, uint16_t data_len, sn_nsdl_addr_s *address_ptr, void *param) +{ + return 0; +} + +int resp_recv(int8_t service_id, uint16_t msg_id, sn_coap_hdr_s *response_ptr){ + return retValue; +} + +int16_t process_cb(int8_t a, sn_coap_hdr_s *b, coap_transaction_t *c) +{ + +} + +bool test_coap_message_handler_init() +{ + if( NULL != coap_message_handler_init(NULL, NULL, NULL) ) + return false; + if( NULL != coap_message_handler_init(&own_alloc, NULL, NULL) ) + return false; + if( NULL != coap_message_handler_init(&own_alloc, &own_free, NULL) ) + return false; + if( NULL != coap_message_handler_init(&own_alloc, &own_free, &coap_tx_function) ) + return false; + retCounter = 1; + sn_coap_protocol_stub.expectedCoap = NULL; + if( NULL != coap_message_handler_init(&own_alloc, &own_free, &coap_tx_function) ) + return false; + retCounter = 1; + sn_coap_protocol_stub.expectedCoap = (struct coap_s*)malloc(sizeof(struct coap_s)); + memset(sn_coap_protocol_stub.expectedCoap, 0, sizeof(struct coap_s)); + coap_msg_handler_t *handle = coap_message_handler_init(&own_alloc, &own_free, &coap_tx_function); + if( NULL == handle ) + return false; + free(sn_coap_protocol_stub.expectedCoap); + sn_coap_protocol_stub.expectedCoap = NULL; + free(handle); + return true; +} + +bool test_coap_message_handler_destroy() +{ + if( -1 != coap_message_handler_destroy(NULL) ) + return false; + retCounter = 1; + sn_coap_protocol_stub.expectedCoap = (struct coap_s*)malloc(sizeof(struct coap_s)); + memset(sn_coap_protocol_stub.expectedCoap, 0, sizeof(struct coap_s)); + coap_msg_handler_t *handle = coap_message_handler_init(&own_alloc, &own_free, &coap_tx_function); + + if( 0 != coap_message_handler_destroy(handle) ) + return false; + + free(sn_coap_protocol_stub.expectedCoap); + return true; +} + +bool test_coap_message_handler_find_transaction() +{ + if( NULL != coap_message_handler_find_transaction(NULL, 0)) + return false; + retCounter = 1; + sn_coap_protocol_stub.expectedCoap = (struct coap_s*)malloc(sizeof(struct coap_s)); + memset(sn_coap_protocol_stub.expectedCoap, 0, sizeof(struct coap_s)); + coap_msg_handler_t *handle = coap_message_handler_init(&own_alloc, &own_free, &coap_tx_function); + + uint8_t buf[16]; + memset(&buf, 1, 16); + char uri[3]; + uri[0] = "r"; + uri[1] = "s"; + uri[2] = "\0"; + + sn_coap_builder_stub.expectedUint16 = 1; + nsdynmemlib_stub.returnCounter = 3; + if( 2 != coap_message_handler_request_send(handle, 3, 0, buf, 24, 1, 2, &uri, 4, NULL, 0, &resp_recv)) + return false; + + if( NULL == coap_message_handler_find_transaction(&buf, 24)) + return false; + + free(sn_coap_protocol_stub.expectedCoap); + sn_coap_protocol_stub.expectedCoap = NULL; + coap_message_handler_destroy(handle); + return true; +} + +bool test_coap_message_handler_coap_msg_process() +{ + uint8_t buf[16]; + memset(&buf, 1, 16); + if( -1 != coap_message_handler_coap_msg_process(NULL, 0, buf, 22, NULL, 0, NULL)) + return false; + + retCounter = 1; + sn_coap_protocol_stub.expectedCoap = (struct coap_s*)malloc(sizeof(struct coap_s)); + memset(sn_coap_protocol_stub.expectedCoap, 0, sizeof(struct coap_s)); + coap_msg_handler_t *handle = coap_message_handler_init(&own_alloc, &own_free, &coap_tx_function); + + sn_coap_protocol_stub.expectedHeader = NULL; + if( -1 != coap_message_handler_coap_msg_process(handle, 0, buf, 22, NULL, 0, process_cb)) + return false; + + sn_coap_protocol_stub.expectedHeader = (sn_coap_hdr_s *)malloc(sizeof(sn_coap_hdr_s)); + memset(sn_coap_protocol_stub.expectedHeader, 0, sizeof(sn_coap_hdr_s)); + sn_coap_protocol_stub.expectedHeader->coap_status = 66; + if( -1 != coap_message_handler_coap_msg_process(handle, 0, buf, 22, NULL, 0, process_cb)) + return false; + + sn_coap_protocol_stub.expectedHeader = (sn_coap_hdr_s *)malloc(sizeof(sn_coap_hdr_s)); + memset(sn_coap_protocol_stub.expectedHeader, 0, sizeof(sn_coap_hdr_s)); + sn_coap_protocol_stub.expectedHeader->coap_status = COAP_STATUS_OK; + sn_coap_protocol_stub.expectedHeader->msg_code = 1; + retValue = -1; + if( 0 != coap_message_handler_coap_msg_process(handle, 0, buf, 22, NULL, 0, process_cb)) + return false; + + nsdynmemlib_stub.returnCounter = 1; + if( -1 != coap_message_handler_coap_msg_process(handle, 0, buf, 22, NULL, 0, process_cb)) + return false; + + sn_coap_protocol_stub.expectedHeader = (sn_coap_hdr_s *)malloc(sizeof(sn_coap_hdr_s)); + memset(sn_coap_protocol_stub.expectedHeader, 0, sizeof(sn_coap_hdr_s)); + sn_coap_protocol_stub.expectedHeader->coap_status = COAP_STATUS_OK; + sn_coap_protocol_stub.expectedHeader->msg_code = 333; + + if( -1 != coap_message_handler_coap_msg_process(handle, 0, buf, 22, NULL, 0, process_cb)) + return false; + + sn_coap_protocol_stub.expectedHeader = (sn_coap_hdr_s *)malloc(sizeof(sn_coap_hdr_s)); + memset(sn_coap_protocol_stub.expectedHeader, 0, sizeof(sn_coap_hdr_s)); + sn_coap_protocol_stub.expectedHeader->coap_status = COAP_STATUS_OK; + sn_coap_protocol_stub.expectedHeader->msg_code = 333; + + char uri[3]; + uri[0] = "r"; + uri[1] = "s"; + uri[2] = "\0"; + + sn_coap_builder_stub.expectedUint16 = 1; + nsdynmemlib_stub.returnCounter = 3; + if( 2 != coap_message_handler_request_send(handle, 3, 0, buf, 24, 1, 2, &uri, 4, NULL, 0, &resp_recv)) + return false; + + sn_coap_protocol_stub.expectedHeader->msg_id = 2; + if( 0 != coap_message_handler_coap_msg_process(handle, 0, buf, 22, NULL, 0, process_cb)) + return false; + +// free(sn_coap_protocol_stub.expectedHeader); +// sn_coap_protocol_stub.expectedHeader = NULL; + free(sn_coap_protocol_stub.expectedCoap); + sn_coap_protocol_stub.expectedCoap = NULL; + coap_message_handler_destroy(handle); + return true; +} + +bool test_coap_message_handler_request_send() +{ + retCounter = 1; + sn_coap_protocol_stub.expectedCoap = (struct coap_s*)malloc(sizeof(struct coap_s)); + memset(sn_coap_protocol_stub.expectedCoap, 0, sizeof(struct coap_s)); + coap_msg_handler_t *handle = coap_message_handler_init(&own_alloc, &own_free, &coap_tx_function); + + uint8_t buf[16]; + memset(&buf, 1, 16); + char uri[3]; + uri[0] = "r"; + uri[1] = "s"; + uri[2] = "\0"; + if( 0 != coap_message_handler_request_send(handle, 3, 0, buf, 24, 1, 2, &uri, 4, NULL, 0, NULL)) + return false; + + sn_coap_builder_stub.expectedUint16 = 1; + nsdynmemlib_stub.returnCounter = 1; + if( 0 != coap_message_handler_request_send(handle, 3, 0, buf, 24, 1, 2, &uri, 4, NULL, 0, NULL)) + return false; + + sn_coap_builder_stub.expectedUint16 = 1; + nsdynmemlib_stub.returnCounter = 3; + if( 0 != coap_message_handler_request_send(handle, 3, 0, buf, 24, 1, 2, &uri, 4, NULL, 0, NULL)) + return false; + + sn_coap_builder_stub.expectedUint16 = 1; + nsdynmemlib_stub.returnCounter = 3; + if( 0 != coap_message_handler_request_send(handle, 3, 0, buf, 24, 1, 2, &uri, 4, NULL, 0, NULL)) + return false; + + sn_coap_builder_stub.expectedUint16 = 1; + nsdynmemlib_stub.returnCounter = 3; + if( 2 != coap_message_handler_request_send(handle, 3, 0, buf, 24, 1, 2, &uri, 4, NULL, 0, &resp_recv)) + return false; + + free(sn_coap_protocol_stub.expectedCoap); + sn_coap_protocol_stub.expectedCoap = NULL; + coap_message_handler_destroy(handle); + return true; +} + +bool test_coap_message_handler_response_send() +{ + if( -1 != coap_message_handler_response_send(NULL, 2, 0, NULL, 1,3,NULL, 0)) + return false; + + retCounter = 1; + sn_coap_protocol_stub.expectedCoap = (struct coap_s*)malloc(sizeof(struct coap_s)); + memset(sn_coap_protocol_stub.expectedCoap, 0, sizeof(struct coap_s)); + coap_msg_handler_t *handle = coap_message_handler_init(&own_alloc, &own_free, &coap_tx_function); + sn_coap_hdr_s *header = (sn_coap_hdr_s *)malloc(sizeof(sn_coap_hdr_s)); + memset(header, 0, sizeof(sn_coap_hdr_s)); + + if( -2 != coap_message_handler_response_send(handle, 2, 0, header, 1,3,NULL, 0)) + return false; + + uint8_t buf[16]; + memset(&buf, 1, 16); + char uri[3]; + uri[0] = "r"; + uri[1] = "s"; + uri[2] = "\0"; + sn_coap_builder_stub.expectedUint16 = 1; + nsdynmemlib_stub.returnCounter = 3; + if( 2 != coap_message_handler_request_send(handle, 3, 0, buf, 24, 1, 2, &uri, 4, NULL, 0, &resp_recv)) + return false; + + header->msg_id = 2; + sn_coap_builder_stub.expectedUint16 = 2; + coap_transaction_t * tx = coap_message_handler_find_transaction(&buf, 24); + if( tx ){ + tx->client_request = false; + } + sn_coap_builder_stub.expectedHeader = NULL; + if( -1 != coap_message_handler_response_send(handle, 2, 0, header, 1,3,NULL, 0)) + return false; + + sn_coap_builder_stub.expectedHeader = (sn_coap_hdr_s *)malloc(sizeof(sn_coap_hdr_s)); + memset(sn_coap_builder_stub.expectedHeader, 0, sizeof(sn_coap_hdr_s)); + nsdynmemlib_stub.returnCounter = 1; + if( -1 != coap_message_handler_response_send(handle, 2, 0, header, 1,3,NULL, 0)) + return false; + + sn_coap_builder_stub.expectedHeader = (sn_coap_hdr_s *)malloc(sizeof(sn_coap_hdr_s)); + memset(sn_coap_builder_stub.expectedHeader, 0, sizeof(sn_coap_hdr_s)); + nsdynmemlib_stub.returnCounter = 2; + if( 0 != coap_message_handler_response_send(handle, 2, 0, header, 1,3,NULL, 0)) + return false; + +// free(header); + free(sn_coap_protocol_stub.expectedCoap); + sn_coap_protocol_stub.expectedCoap = NULL; + coap_message_handler_destroy(handle); + return true; +} + +bool test_coap_message_handler_exec() +{ + if( -1 != coap_message_handler_exec(NULL, 0)) + return false; + retCounter = 1; + sn_coap_protocol_stub.expectedCoap = (struct coap_s*)malloc(sizeof(struct coap_s)); + memset(sn_coap_protocol_stub.expectedCoap, 0, sizeof(struct coap_s)); + coap_msg_handler_t *handle = coap_message_handler_init(&own_alloc, &own_free, &coap_tx_function); + if( 0 != coap_message_handler_exec(handle, 0)) + return false; + + free(sn_coap_protocol_stub.expectedCoap); + sn_coap_protocol_stub.expectedCoap = NULL; + coap_message_handler_destroy(handle); + return true; +} diff --git a/test/coap-service/unittest/coap_message_handler/test_coap_message_handler.h b/test/coap-service/unittest/coap_message_handler/test_coap_message_handler.h new file mode 100644 index 0000000000..2b850a0afa --- /dev/null +++ b/test/coap-service/unittest/coap_message_handler/test_coap_message_handler.h @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2015 ARM. All rights reserved. + */ +#ifndef TEST_COAP_MESSAGE_HANDLER_H +#define TEST_COAP_MESSAGE_HANDLER_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +bool test_coap_message_handler_init(); +bool test_coap_message_handler_destroy(); +bool test_coap_message_handler_find_transaction(); +bool test_coap_message_handler_coap_msg_process(); +bool test_coap_message_handler_request_send(); +bool test_coap_message_handler_response_send(); +bool test_coap_message_handler_exec(); + +#ifdef __cplusplus +} +#endif + +#endif // TEST_COAP_MESSAGE_HANDLER_H + diff --git a/test/coap-service/unittest/coap_security_handler/Makefile b/test/coap-service/unittest/coap_security_handler/Makefile new file mode 100644 index 0000000000..6923474bbd --- /dev/null +++ b/test/coap-service/unittest/coap_security_handler/Makefile @@ -0,0 +1,23 @@ +include ../makefile_defines.txt + +COMPONENT_NAME = coap_security_handler_unit + +#This must be changed manually +SRC_FILES = \ + ../../../../source/coap_security_handler.c + +TEST_SRC_FILES = \ + main.cpp \ + coap_security_handlertest.cpp \ + test_coap_security_handler.c \ + ../stub/ns_trace_stub.c \ + ../stub/ns_list_stub.c \ + ../stub/ns_timer_stub.c \ + ../stub/mbedtls_stub.c \ + ../stub/randLIB_stub.c \ + ../stub/nsdynmemLIB_stub.c \ + +include ../MakefileWorker.mk + +CPPUTESTFLAGS += -DFEA_TRACE_SUPPORT + diff --git a/test/coap-service/unittest/coap_security_handler/coap_security_handlertest.cpp b/test/coap-service/unittest/coap_security_handler/coap_security_handlertest.cpp new file mode 100644 index 0000000000..a649a0fb96 --- /dev/null +++ b/test/coap-service/unittest/coap_security_handler/coap_security_handlertest.cpp @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2015 ARM. All rights reserved. + */ +#include "CppUTest/TestHarness.h" +#include "test_coap_security_handler.h" +#include "mbedtls_stub.h" +#include "nsdynmemLIB_stub.h" + +TEST_GROUP(coap_security_handler) +{ + void setup() + { + nsdynmemlib_stub.returnCounter = 0; + mbedtls_stub.useCounter = false; + } + + void teardown() + { + } +}; + +TEST(coap_security_handler, test_thread_security_create) +{ + CHECK(test_thread_security_create()); +} + +TEST(coap_security_handler, test_thread_security_destroy) +{ + CHECK(test_thread_security_destroy()); +} + +TEST(coap_security_handler, test_coap_security_handler_connect) +{ + CHECK(test_coap_security_handler_connect()); +} + +TEST(coap_security_handler, test_coap_security_handler_continue_connecting) +{ + CHECK(test_coap_security_handler_continue_connecting()); +} + +TEST(coap_security_handler, test_coap_security_handler_send_message) +{ + CHECK(test_coap_security_handler_send_message()); +} + +TEST(coap_security_handler, test_thread_security_send_close_alert) +{ + CHECK(test_thread_security_send_close_alert()); +} + +TEST(coap_security_handler, test_coap_security_handler_read) +{ + CHECK(test_coap_security_handler_read()); +} diff --git a/test/coap-service/unittest/coap_security_handler/main.cpp b/test/coap-service/unittest/coap_security_handler/main.cpp new file mode 100644 index 0000000000..e657503fd1 --- /dev/null +++ b/test/coap-service/unittest/coap_security_handler/main.cpp @@ -0,0 +1,15 @@ +/* + * Copyright (c) 2015 ARM. All rights reserved. + */ + +#include "CppUTest/CommandLineTestRunner.h" +#include "CppUTest/TestPlugin.h" +#include "CppUTest/TestRegistry.h" +#include "CppUTestExt/MockSupportPlugin.h" +int main(int ac, char** av) +{ + return CommandLineTestRunner::RunAllTests(ac, av); +} + +IMPORT_TEST_GROUP(coap_security_handler); + diff --git a/test/coap-service/unittest/coap_security_handler/test_coap_security_handler.c b/test/coap-service/unittest/coap_security_handler/test_coap_security_handler.c new file mode 100644 index 0000000000..7bf1b2c6a0 --- /dev/null +++ b/test/coap-service/unittest/coap_security_handler/test_coap_security_handler.c @@ -0,0 +1,281 @@ +/* + * Copyright (c) 2015 ARM. All rights reserved. + */ +#include "test_coap_security_handler.h" +#include "coap_security_handler.h" +#include +#include "nsdynmemLIB_stub.h" +#include "mbedtls_stub.h" +#include "mbedtls/ssl.h" + +static int send_to_socket(int8_t socket_id, uint8_t *address_ptr, uint16_t port, const unsigned char *buf, size_t len) +{ + +} + +static int receive_from_socket(int8_t socket_id, unsigned char *buf, size_t len) +{ + +} + +static void start_timer_callback(int8_t timer_id, uint32_t int_ms, uint32_t fin_ms) +{ + +} + +static int timer_status_callback(int8_t timer_id) +{ + +} + +bool test_thread_security_create() +{ + uint8_t buf[16]; + if( NULL != thread_security_create(1,2,&buf,12,&send_to_socket, &receive_from_socket, &start_timer_callback, NULL) ) + return false; + + if( NULL != thread_security_create(1,2,&buf,12,&send_to_socket, &receive_from_socket, &start_timer_callback, &timer_status_callback) ) + return false; + + nsdynmemlib_stub.returnCounter = 1; + mbedtls_stub.expected_int = -1; + if( NULL != thread_security_create(1,2,&buf,12,&send_to_socket, &receive_from_socket, &start_timer_callback, &timer_status_callback) ) + return false; + + mbedtls_stub.expected_int = 0; + nsdynmemlib_stub.returnCounter = 2; + mbedtls_stub.crt_expected_int = -1; + if( NULL != thread_security_create(1,2,&buf,12,&send_to_socket, &receive_from_socket, &start_timer_callback, &timer_status_callback) ) + return false; + + nsdynmemlib_stub.returnCounter = 2; + mbedtls_stub.crt_expected_int = 0; + thread_security_t *handle = thread_security_create(1,2,&buf,12,&send_to_socket, &receive_from_socket, &start_timer_callback, &timer_status_callback); + if( NULL == handle ) + return false; + + ns_dyn_mem_free(handle); + + return true; +} + +bool test_thread_security_destroy() +{ + uint8_t buf[16]; + nsdynmemlib_stub.returnCounter = 2; + mbedtls_stub.crt_expected_int = 0; + thread_security_t *handle = thread_security_create(1,2,&buf,12,&send_to_socket, &receive_from_socket, &start_timer_callback, &timer_status_callback); + if( NULL == handle ) + return false; + + thread_security_destroy(handle); + return true; +} + +bool test_coap_security_handler_connect() +{ + uint8_t buf[16]; + nsdynmemlib_stub.returnCounter = 2; + mbedtls_stub.crt_expected_int = 0; + thread_security_t *handle = thread_security_create(1,2,&buf,12,&send_to_socket, &receive_from_socket, &start_timer_callback, &timer_status_callback); + if( NULL == handle ) + return false; + + if( -1 != coap_security_handler_connect(NULL, true, "pwd", 3) ) + return false; + mbedtls_stub.useCounter = true; + mbedtls_stub.counter = 0; + mbedtls_stub.retArray[0] = -1; + mbedtls_stub.retArray[1] = -1; + mbedtls_stub.retArray[2] = -1; + mbedtls_stub.retArray[3] = -1; + mbedtls_stub.retArray[4] = -1; + mbedtls_stub.retArray[5] = MBEDTLS_ERR_SSL_HELLO_VERIFY_REQUIRED; + mbedtls_stub.retArray[6] = -1; + mbedtls_stub.retArray[7] = -1; + + if( -1 != coap_security_handler_connect(handle, true, "pwd", 3) ) + return false; + + mbedtls_stub.counter = 0; + mbedtls_stub.retArray[0] = 0; + if( -1 != coap_security_handler_connect(handle, true, "pwd", 3) ) + return false; + + mbedtls_stub.counter = 0; +// mbedtls_stub.retArray[0] = 0; + mbedtls_stub.retArray[1] = 0; + if( -1 != coap_security_handler_connect(handle, true, "pwd", 3) ) + return false; + + simple_cookie_t c; + mbedtls_stub.cookie_obj = &c; + memset(&mbedtls_stub.cookie_value, 1, 8); + mbedtls_stub.cookie_len = 2; + mbedtls_stub.counter = 0; +// mbedtls_stub.retArray[0] = 0; +// mbedtls_stub.retArray[1] = 0; + mbedtls_stub.retArray[2] = 0; + if( -1 != coap_security_handler_connect(handle, true, "pwd", 3) ) + return false; + + c.len = 8; + memset(&c.value, 1, 8); + mbedtls_stub.cookie_obj = &c; + memset(&mbedtls_stub.cookie_value, 1, 8); + + mbedtls_stub.cookie_len = 8; + mbedtls_stub.counter = 0; +// mbedtls_stub.retArray[0] = 0; +// mbedtls_stub.retArray[1] = 0; +// mbedtls_stub.retArray[2] = 0; + mbedtls_stub.retArray[3] = 0; + if( -1 != coap_security_handler_connect(handle, true, "pwd", 3) ) + return false; + + mbedtls_stub.counter = 0; +// mbedtls_stub.retArray[0] = 0; +// mbedtls_stub.retArray[1] = 0; +// mbedtls_stub.retArray[2] = 0; +// mbedtls_stub.retArray[3] = 0; + mbedtls_stub.retArray[4] = 0; + if( -1 != coap_security_handler_connect(handle, true, "pwd", 3) ) + return false; + + mbedtls_stub.counter = 0; +// mbedtls_stub.retArray[0] = 0; +// mbedtls_stub.retArray[1] = 0; +// mbedtls_stub.retArray[2] = 0; +// mbedtls_stub.retArray[3] = 0; +// mbedtls_stub.retArray[4] = 0; + mbedtls_stub.retArray[6] = 0; + mbedtls_stub.retArray[7] = 0; + if( 1 != coap_security_handler_connect(handle, true, "pwd", 3) ) + return false; + + mbedtls_stub.counter = 0; + mbedtls_stub.retArray[5] = MBEDTLS_ERR_SSL_BAD_HS_FINISHED; + + if( -1 != coap_security_handler_connect(handle, true, "pwd", 3) ) + return false; + + mbedtls_stub.counter = 0; + mbedtls_stub.retArray[5] = HANDSHAKE_FINISHED_VALUE; + + if( 1 != coap_security_handler_connect(handle, true, "pwd", 3) ) + return false; + + thread_security_destroy(handle); + return true; +} + +bool test_coap_security_handler_continue_connecting() +{ + uint8_t buf[16]; + nsdynmemlib_stub.returnCounter = 2; + mbedtls_stub.crt_expected_int = 0; + thread_security_t *handle = thread_security_create(1,2,&buf,12,&send_to_socket, &receive_from_socket, &start_timer_callback, &timer_status_callback); + if( NULL == handle ) + return false; + + mbedtls_stub.useCounter = true; + mbedtls_stub.counter = 0; + mbedtls_stub.retArray[0] = MBEDTLS_ERR_SSL_HELLO_VERIFY_REQUIRED; + mbedtls_stub.retArray[1] = -1; + mbedtls_stub.retArray[2] = -1; + + if( -1 != coap_security_handler_continue_connecting(handle) ) + return false; + + mbedtls_stub.counter = 0; + mbedtls_stub.retArray[0] = MBEDTLS_ERR_SSL_HELLO_VERIFY_REQUIRED; + mbedtls_stub.retArray[1] = 0; + mbedtls_stub.retArray[2] = 0; + + if( 1 != coap_security_handler_continue_connecting(handle) ) + return false; + + mbedtls_stub.counter = 0; + mbedtls_stub.retArray[0] = MBEDTLS_ERR_SSL_BAD_HS_FINISHED; + + if( MBEDTLS_ERR_SSL_TIMEOUT != coap_security_handler_continue_connecting(handle) ) + return false; + + mbedtls_stub.counter = 0; + mbedtls_stub.retArray[0] = MBEDTLS_ERR_SSL_WANT_READ; + + if( MBEDTLS_ERR_SSL_WANT_READ != coap_security_handler_continue_connecting(handle) ) + return false; + + mbedtls_stub.counter = 0; + mbedtls_stub.retArray[0] = HANDSHAKE_FINISHED_VALUE; + + if( 0 != coap_security_handler_continue_connecting(handle) ) + return false; + + thread_security_destroy(handle); + return true; +} + +bool test_coap_security_handler_send_message() +{ + uint8_t buf[16]; + nsdynmemlib_stub.returnCounter = 2; + mbedtls_stub.crt_expected_int = 0; + thread_security_t *handle = thread_security_create(1,2,&buf,12,&send_to_socket, &receive_from_socket, &start_timer_callback, &timer_status_callback); + if( NULL == handle ) + return false; + + if( -1 != coap_security_handler_send_message(NULL, NULL, 0)) + return false; + + mbedtls_stub.expected_int = 6; + unsigned char cbuf[6]; + if( 6 != coap_security_handler_send_message(handle, &cbuf, 6)) + return false; + + thread_security_destroy(handle); + return true; +} + +bool test_thread_security_send_close_alert() +{ + uint8_t buf[16]; + nsdynmemlib_stub.returnCounter = 2; + mbedtls_stub.crt_expected_int = 0; + thread_security_t *handle = thread_security_create(1,2,&buf,12,&send_to_socket, &receive_from_socket, &start_timer_callback, &timer_status_callback); + if( NULL == handle ) + return false; + + if( -1 != thread_security_send_close_alert(NULL)) + return false; + + mbedtls_stub.expected_int = 0; + if( 0 != thread_security_send_close_alert(handle)) + return false; + + thread_security_destroy(handle); + return true; +} + +bool test_coap_security_handler_read() +{ + uint8_t buf[16]; + nsdynmemlib_stub.returnCounter = 2; + mbedtls_stub.crt_expected_int = 0; + thread_security_t *handle = thread_security_create(1,2,&buf,12,&send_to_socket, &receive_from_socket, &start_timer_callback, &timer_status_callback); + if( NULL == handle ) + return false; + + if( -1 != coap_security_handler_read(NULL, NULL, 0)) + return false; + + mbedtls_stub.expected_int = 6; + unsigned char cbuf[6]; + if( 6 != coap_security_handler_read(handle, &cbuf, 6)) + return false; + + thread_security_destroy(handle); + return true; +} + diff --git a/test/coap-service/unittest/coap_security_handler/test_coap_security_handler.h b/test/coap-service/unittest/coap_security_handler/test_coap_security_handler.h new file mode 100644 index 0000000000..d0a4e45380 --- /dev/null +++ b/test/coap-service/unittest/coap_security_handler/test_coap_security_handler.h @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2015 ARM. All rights reserved. + */ +#ifndef TEST_COAP_SECURITY_HANDLER_H +#define TEST_COAP_SECURITY_HANDLER_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include + +bool test_thread_security_create(); + +bool test_thread_security_destroy(); + +bool test_coap_security_handler_connect(); + +bool test_coap_security_handler_continue_connecting(); + +bool test_coap_security_handler_send_message(); + +bool test_thread_security_send_close_alert(); + +bool test_coap_security_handler_read(); + +#ifdef __cplusplus +} +#endif + +#endif // TEST_COAP_SECURITY_HANDLER_H + diff --git a/test/coap-service/unittest/coap_service_api/Makefile b/test/coap-service/unittest/coap_service_api/Makefile new file mode 100644 index 0000000000..130b44429f --- /dev/null +++ b/test/coap-service/unittest/coap_service_api/Makefile @@ -0,0 +1,24 @@ +include ../makefile_defines.txt + +COMPONENT_NAME = coap_service_api_unit + +#This must be changed manually +SRC_FILES = \ + ../../../../source/coap_service_api.c + +TEST_SRC_FILES = \ + main.cpp \ + coap_service_apitest.cpp \ + test_coap_service_api.c \ + ../stub/ns_trace_stub.c \ + ../stub/ns_list_stub.c \ + ../stub/system_timer_stub.c \ + ../stub/nsdynmemLIB_stub.c \ + ../stub/eventOS_event_stub.c \ + ../stub/coap_connection_handler_stub.c \ + ../stub/coap_message_handler_stub.c \ + +include ../MakefileWorker.mk + +CPPUTESTFLAGS += -DFEA_TRACE_SUPPORT + diff --git a/test/coap-service/unittest/coap_service_api/coap_service_apitest.cpp b/test/coap-service/unittest/coap_service_api/coap_service_apitest.cpp new file mode 100644 index 0000000000..9054de6313 --- /dev/null +++ b/test/coap-service/unittest/coap_service_api/coap_service_apitest.cpp @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2015 ARM. All rights reserved. + */ +#include "CppUTest/TestHarness.h" +#include "test_coap_service_api.h" + +TEST_GROUP(coap_service_api) +{ + void setup() + { + } + + void teardown() + { + } +}; + +TEST(coap_service_api, test_coap_service_initialize) +{ + CHECK(test_coap_service_initialize()); +} + +TEST(coap_service_api, test_coap_service_delete) +{ + CHECK(test_coap_service_delete()); +} + +TEST(coap_service_api, test_coap_service_virtual_socket_recv) +{ + CHECK(test_coap_service_virtual_socket_recv()); +} + +TEST(coap_service_api, test_coap_service_virtual_socket_set_cb) +{ + CHECK(test_coap_service_virtual_socket_set_cb()); +} + +TEST(coap_service_api, test_coap_service_register_uri) +{ + CHECK(test_coap_service_register_uri()); +} + +TEST(coap_service_api, test_coap_service_unregister_uri) +{ + CHECK(test_coap_service_unregister_uri()); +} + +TEST(coap_service_api, test_coap_service_request_send) +{ + CHECK(test_coap_service_request_send()); +} + +TEST(coap_service_api, test_coap_service_response_send) +{ + CHECK(test_coap_service_response_send()); +} + +TEST(coap_service_api, test_coap_callbacks) +{ + CHECK(test_coap_callbacks()); +} + +TEST(coap_service_api, test_eventOS_callbacks) +{ + CHECK(test_eventOS_callbacks()); +} + +TEST(coap_service_api, test_conn_handler_callbacks) +{ + CHECK(test_conn_handler_callbacks()); +} + diff --git a/test/coap-service/unittest/coap_service_api/main.cpp b/test/coap-service/unittest/coap_service_api/main.cpp new file mode 100644 index 0000000000..e050cec95f --- /dev/null +++ b/test/coap-service/unittest/coap_service_api/main.cpp @@ -0,0 +1,15 @@ +/* + * Copyright (c) 2015 ARM. All rights reserved. + */ + +#include "CppUTest/CommandLineTestRunner.h" +#include "CppUTest/TestPlugin.h" +#include "CppUTest/TestRegistry.h" +#include "CppUTestExt/MockSupportPlugin.h" +int main(int ac, char** av) +{ + return CommandLineTestRunner::RunAllTests(ac, av); +} + +IMPORT_TEST_GROUP(coap_service_api); + diff --git a/test/coap-service/unittest/coap_service_api/test_coap_service_api.c b/test/coap-service/unittest/coap_service_api/test_coap_service_api.c new file mode 100644 index 0000000000..a9130a37a4 --- /dev/null +++ b/test/coap-service/unittest/coap_service_api/test_coap_service_api.c @@ -0,0 +1,407 @@ +/* + * Copyright (c) 2015 ARM. All rights reserved. + */ +#include "test_coap_service_api.h" +#include +#include "coap_service_api.h" +#include "nsdynmemLIB_stub.h" +#include "coap_connection_handler_stub.h" +#include "coap_message_handler_stub.h" +#include "eventOS_event_stub.h" +#include "eventOS_event.h" +#include "net_interface.h" + +int sec_done_cb(int8_t service_id, uint8_t address[static 16], uint8_t keyblock[static 40]){ + return 2; +} + +int sec_start_cb(int8_t service_id, uint8_t address[static 16], uint16_t port, uint8_t* pw, uint8_t *pw_len) +{ + return 2; +} + +int request_recv_cb(int8_t service_id, uint8_t source_address[static 16], uint16_t source_port, sn_coap_hdr_s *request_ptr) +{ + return 2; +} + +int virtual_sock_send_cb(int8_t service_id, uint8_t destination_addr_ptr[static 16], uint16_t port, const uint8_t *data_ptr, uint16_t data_len) +{ + return 2; +} + +bool test_coap_service_initialize() +{ + if( -1 != coap_service_initialize(1, 2, 0, NULL, NULL )) + return false; + + nsdynmemlib_stub.returnCounter = 1; + thread_conn_handler_stub.handler_obj = NULL; + if( -1 != coap_service_initialize(1, 2, 0, NULL, NULL )) + return false; + + thread_conn_handler_stub.handler_obj = (thread_conn_handler_t*)malloc(sizeof(thread_conn_handler_t)); + memset(thread_conn_handler_stub.handler_obj, 0, sizeof(thread_conn_handler_t)); + nsdynmemlib_stub.returnCounter = 1; + coap_message_handler_stub.coap_ptr = NULL; + + if( 1 != coap_service_initialize(1, 2, 0, NULL, NULL )) + return false; + + nsdynmemlib_stub.returnCounter = 1; + if( 2 != coap_service_initialize(3, 4, 0, NULL, NULL )) + return false; + + coap_service_delete(2); + coap_service_delete(1); + + free( thread_conn_handler_stub.handler_obj ); + thread_conn_handler_stub.handler_obj = NULL; + return true; +} + +bool test_coap_service_delete() +{ + coap_service_delete(1); + + thread_conn_handler_stub.handler_obj = (thread_conn_handler_t*)malloc(sizeof(thread_conn_handler_t)); + memset(thread_conn_handler_stub.handler_obj, 0, sizeof(thread_conn_handler_t)); + nsdynmemlib_stub.returnCounter = 1; + coap_message_handler_stub.coap_ptr = NULL; + + if( 1 != coap_service_initialize(1, 2, 0, NULL, NULL )) + return false; + + coap_service_delete(1); + + free( thread_conn_handler_stub.handler_obj ); + thread_conn_handler_stub.handler_obj = NULL; + + return true; +} + +bool test_coap_service_virtual_socket_recv() +{ + uint8_t buf[16]; + if( -1 != coap_service_virtual_socket_recv(1, &buf, 10, NULL, 0) ) + return false; + + thread_conn_handler_stub.handler_obj = (thread_conn_handler_t*)malloc(sizeof(thread_conn_handler_t)); + memset(thread_conn_handler_stub.handler_obj, 0, sizeof(thread_conn_handler_t)); + nsdynmemlib_stub.returnCounter = 1; + coap_message_handler_stub.coap_ptr = NULL; + + if( 1 != coap_service_initialize(1, 2, 0, NULL, NULL )) + return false; + + thread_conn_handler_stub.int_value = 5; + if( 5 != coap_service_virtual_socket_recv(1, &buf, 10, NULL, 0) ) + return false; + + coap_service_delete(1); + + free( thread_conn_handler_stub.handler_obj ); + thread_conn_handler_stub.handler_obj = NULL; + + thread_conn_handler_stub.int_value = 0; + + return true; +} + +bool test_coap_service_virtual_socket_set_cb() +{ + if( -1 != coap_service_virtual_socket_set_cb(1, NULL) ) + return false; + + thread_conn_handler_stub.handler_obj = (thread_conn_handler_t*)malloc(sizeof(thread_conn_handler_t)); + memset(thread_conn_handler_stub.handler_obj, 0, sizeof(thread_conn_handler_t)); + nsdynmemlib_stub.returnCounter = 1; + coap_message_handler_stub.coap_ptr = NULL; + + if( 1 != coap_service_initialize(1, 2, 0, NULL, NULL )) + return false; + + if( 0 != coap_service_virtual_socket_set_cb(1, NULL) ) + return false; + + coap_service_delete(1); + + free( thread_conn_handler_stub.handler_obj ); + thread_conn_handler_stub.handler_obj = NULL; + + return true; +} + +bool test_coap_service_register_uri() +{ + if( -1 != coap_service_register_uri(1, "as", 1, &request_recv_cb)) + return false; + + thread_conn_handler_stub.handler_obj = (thread_conn_handler_t*)malloc(sizeof(thread_conn_handler_t)); + memset(thread_conn_handler_stub.handler_obj, 0, sizeof(thread_conn_handler_t)); + nsdynmemlib_stub.returnCounter = 1; + coap_message_handler_stub.coap_ptr = NULL; + + if( 1 != coap_service_initialize(1, 2, 0, NULL, NULL )) + return false; + + if( -2 != coap_service_register_uri(1, "as", 1, &request_recv_cb) ) + return false; + + nsdynmemlib_stub.returnCounter = 1; + if( -2 != coap_service_register_uri(1, "as", 1, &request_recv_cb) ) + return false; + + nsdynmemlib_stub.returnCounter = 2; + if( 0 != coap_service_register_uri(1, "as", 1, &request_recv_cb) ) + return false; + + coap_service_delete(1); + + free( thread_conn_handler_stub.handler_obj ); + thread_conn_handler_stub.handler_obj = NULL; + + return true; +} + +bool test_coap_service_unregister_uri() +{ + if( -1 != coap_service_unregister_uri(1, "as")) + return false; + + thread_conn_handler_stub.handler_obj = (thread_conn_handler_t*)malloc(sizeof(thread_conn_handler_t)); + memset(thread_conn_handler_stub.handler_obj, 0, sizeof(thread_conn_handler_t)); + nsdynmemlib_stub.returnCounter = 1; + coap_message_handler_stub.coap_ptr = NULL; + + if( 1 != coap_service_initialize(1, 2, 0, NULL, NULL )) + return false; + + nsdynmemlib_stub.returnCounter = 2; + if( 0 != coap_service_register_uri(1, "as", 1, &request_recv_cb) ) + return false; + + if( -2 != coap_service_unregister_uri(1, "ts") ) + return false; + + if( 0 != coap_service_unregister_uri(1, "as") ) + return false; + + coap_service_delete(1); + + free( thread_conn_handler_stub.handler_obj ); + thread_conn_handler_stub.handler_obj = NULL; + + return true; +} + +bool test_coap_service_request_send() +{ + uint8_t buf[16]; + coap_message_handler_stub.uint16_value = 6; + if( 6 != coap_service_request_send(0,0,&buf,0,0,0,NULL, 0,NULL,0,NULL)) + return false; + return true; +} + +bool test_coap_service_response_send() +{ + uint8_t buf[16]; + coap_message_handler_stub.int8_value = 6; + if( 6 != coap_service_response_send(0,0,NULL, 65, 0,NULL, 0)) + return false; + return true; +} + +bool test_coap_callbacks() +{ + thread_conn_handler_stub.handler_obj = (thread_conn_handler_t*)malloc(sizeof(thread_conn_handler_t)); + memset(thread_conn_handler_stub.handler_obj, 0, sizeof(thread_conn_handler_t)); + nsdynmemlib_stub.returnCounter = 1; + coap_message_handler_stub.coap_ptr = (coap_msg_handler_t *)malloc(sizeof(coap_msg_handler_t)); + memset(coap_message_handler_stub.coap_ptr, 0, sizeof(coap_msg_handler_t)); + + if( 1 != coap_service_initialize(1, 2, 0, NULL, NULL )) + return false; + + if( 0 != coap_message_handler_stub.coap_ptr->sn_coap_service_malloc(0)) + return false; + + nsdynmemlib_stub.returnCounter = 1; + void *handle = coap_message_handler_stub.coap_ptr->sn_coap_service_malloc(5); + if( 0 == handle ) + return false; + + coap_message_handler_stub.coap_ptr->sn_coap_service_free(handle); + + //coap_tx_function + uint8_t data[14]; + memset(&data, 3, 14); + sn_nsdl_addr_s addr; + addr.addr_len = 2; + addr.port = 4; + addr.addr_ptr = &data; + if( 0 != coap_message_handler_stub.coap_ptr->sn_coap_tx_callback(NULL, 0, &addr, NULL)) + return false; + + coap_transaction_t *tr = (coap_transaction_t *)malloc(sizeof(coap_transaction_t)); + memset(tr, 0, sizeof(coap_transaction_t)); + + if( 0 != coap_message_handler_stub.coap_ptr->sn_coap_tx_callback(&data, 0, &addr, tr)) + return false; + + tr->service_id = 1; + thread_conn_handler_stub.int_value = -2; + if( 0 != coap_message_handler_stub.coap_ptr->sn_coap_tx_callback(&data, 0, &addr, tr)) + return false; + + nsdynmemlib_stub.returnCounter = 1; + if( 0 != coap_message_handler_stub.coap_ptr->sn_coap_tx_callback(&data, 2, &addr, tr)) + return false; + + free(tr->data_ptr); + free(tr); + + coap_service_delete(1); + + free( coap_message_handler_stub.coap_ptr ); + coap_message_handler_stub.coap_ptr = NULL; + + free( thread_conn_handler_stub.handler_obj ); + thread_conn_handler_stub.handler_obj = NULL; + + return true; +} + +#define COAP_TICK_TIMER 0xf1 //MUST BE SAME AS IN coap_service_api.c +bool test_eventOS_callbacks() +{ + thread_conn_handler_stub.handler_obj = (thread_conn_handler_t*)malloc(sizeof(thread_conn_handler_t)); + memset(thread_conn_handler_stub.handler_obj, 0, sizeof(thread_conn_handler_t)); + nsdynmemlib_stub.returnCounter = 1; + if( 1 != coap_service_initialize(1, 2, 0, NULL, NULL )) + return false; + + if( eventOs_event_stub.event_ptr ){ + arm_event_s event; + event.event_type = ARM_LIB_TASKLET_INIT_EVENT; + eventOs_event_stub.event_ptr(&event); + + event.event_type = ARM_LIB_SYSTEM_TIMER_EVENT; + event.event_id = COAP_TICK_TIMER; + eventOs_event_stub.event_ptr(&event); + } + + coap_service_delete(1); + free( thread_conn_handler_stub.handler_obj ); + thread_conn_handler_stub.handler_obj = NULL; + return true; +} + +bool test_conn_handler_callbacks() +{ + uint8_t buf[16]; + thread_conn_handler_stub.handler_obj = (thread_conn_handler_t*)malloc(sizeof(thread_conn_handler_t)); + memset(thread_conn_handler_stub.handler_obj, 0, sizeof(thread_conn_handler_t)); + nsdynmemlib_stub.returnCounter = 1; + if( 1 != coap_service_initialize(1, 2, COAP_SERVICE_OPTIONS_SECURE_BYPASS, &sec_start_cb, &sec_done_cb )) + return false; + + if( thread_conn_handler_stub.send_to_sock_cb ){ + thread_conn_handler_stub.bool_value = true; + coap_service_virtual_socket_set_cb(1, &virtual_sock_send_cb); + if( 2 != thread_conn_handler_stub.send_to_sock_cb(1, buf, 12, NULL, 0)) + return false; + thread_conn_handler_stub.bool_value = false; + if( -1 != thread_conn_handler_stub.send_to_sock_cb(1, buf, 12, NULL, 0)) + return false; + } + + if( thread_conn_handler_stub.receive_from_sock_cb ){ + coap_message_handler_stub.int16_value = 2; + if( -1 != thread_conn_handler_stub.receive_from_sock_cb(1, buf, 12, NULL, 0)) + return false; + + nsdynmemlib_stub.returnCounter = 1; + uint8_t * ptr = ns_dyn_mem_alloc(5); + memset(ptr, 3, 5); + nsdynmemlib_stub.returnCounter = 1; + if( 2 != thread_conn_handler_stub.receive_from_sock_cb(1, buf, 12, ptr, 5)) + return false; + ns_dyn_mem_free(ptr); + coap_message_handler_stub.int16_value = 0; + + //This could be moved to own test function, + //but thread_conn_handler_stub.receive_from_sock_cb must be called successfully + if( coap_message_handler_stub.cb ){ + if( -1 != coap_message_handler_stub.cb(1, NULL, NULL) ) + return false; + + sn_coap_hdr_s * coap = (sn_coap_hdr_s *)malloc(sizeof(sn_coap_hdr_s)); + memset(coap, 0, sizeof(sn_coap_hdr_s)); + + uint8_t uri[2] = "as"; + coap->uri_path_ptr = &uri; + coap->uri_path_len=2; + + if( -1 != coap_message_handler_stub.cb(1, coap, NULL) ) + return false; + + thread_conn_handler_stub.bool_value = true; + nsdynmemlib_stub.returnCounter = 2; + if( 0 != coap_service_register_uri(1, "as", 1, &request_recv_cb) ) + return false; + + if( -1 != coap_message_handler_stub.cb(1, coap, NULL) ) + return false; + + coap_transaction_t *tr = (coap_transaction_t *)malloc(sizeof(coap_transaction_t)); + memset(tr, 0, sizeof(coap_transaction_t)); + + if( 2 != coap_message_handler_stub.cb(1, coap, tr) ) + return false; + + free(tr); + tr = NULL; + + thread_conn_handler_stub.bool_value = false; + free(coap); + coap = NULL; + } + } + + if(thread_conn_handler_stub.get_passwd_cb){ + thread_conn_handler_stub.bool_value = true; + if( 2 != thread_conn_handler_stub.get_passwd_cb(1, buf, 12, NULL, 0)) + return false; + thread_conn_handler_stub.bool_value = false; + if( -1 != thread_conn_handler_stub.get_passwd_cb(1, buf, 12, NULL, 0)) + return false; + } + + if(thread_conn_handler_stub.sec_done_cb){ + uint8_t block[40]; + thread_conn_handler_stub.bool_value = true; + + coap_transaction_t *tr = (coap_transaction_t *)malloc(sizeof(coap_transaction_t)); + memset(tr, 0, sizeof(coap_transaction_t)); + nsdynmemlib_stub.returnCounter = 1; + tr->data_ptr = ns_dyn_mem_alloc(1); + tr->data_len = 1; + coap_message_handler_stub.coap_tx_ptr = tr; + + thread_conn_handler_stub.sec_done_cb(1, buf, 12, block); + + free(tr); + coap_message_handler_stub.coap_tx_ptr = NULL; + + thread_conn_handler_stub.bool_value = false; + + } + + coap_service_delete(1); + free( thread_conn_handler_stub.handler_obj ); + thread_conn_handler_stub.handler_obj = NULL; + + return true; +} diff --git a/test/coap-service/unittest/coap_service_api/test_coap_service_api.h b/test/coap-service/unittest/coap_service_api/test_coap_service_api.h new file mode 100644 index 0000000000..2897c9a89b --- /dev/null +++ b/test/coap-service/unittest/coap_service_api/test_coap_service_api.h @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2015 ARM. All rights reserved. + */ +#ifndef TEST_COAP_SERVICE_API_H +#define TEST_COAP_SERVICE_API_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +bool test_coap_service_initialize(); + +bool test_coap_service_delete(); + +bool test_coap_service_virtual_socket_recv(); + +bool test_coap_service_virtual_socket_set_cb(); + +bool test_coap_service_register_uri(); + +bool test_coap_service_unregister_uri(); + +bool test_coap_service_request_send(); + +bool test_coap_service_response_send(); + +bool test_coap_callbacks(); + +bool test_eventOS_callbacks(); + +bool test_conn_handler_callbacks(); + + +#ifdef __cplusplus +} +#endif + +#endif // TEST_COAP_SERVICE_API_H + diff --git a/test/coap-service/unittest/makefile_defines.txt b/test/coap-service/unittest/makefile_defines.txt new file mode 100755 index 0000000000..4225393d5c --- /dev/null +++ b/test/coap-service/unittest/makefile_defines.txt @@ -0,0 +1,42 @@ +#--- Inputs ----# +CPPUTEST_HOME = /usr +CPPUTEST_USE_EXTENSIONS = Y +CPPUTEST_USE_VPATH = Y +CPPUTEST_USE_GCOV = Y +CPP_PLATFORM = gcc + +INCLUDE_DIRS =\ + .\ + ../stub\ + ../../../../../nanostack/source/6LoWPAN/Thread/\ + ../../../../../nanostack/source/6LoWPAN/Mesh/\ + ../../../../../nanostack/source/6LoWPAN/RPL/\ + ../../../../../nanostack/source/\ + ../../../../../nanostack/source/Core/include/\ + ../../../../../nanostack/source/Common_Protocols/\ + ../../../../../nanostack/source/Security/Common/\ + ../../../../../nanostack/source/Service_Libs/etx/\ + ../../../../../nanostack/source/MLE/\ + ../../../../../nanostack/nanostack/\ + ../../../../../coap-service/coap-service/\ + ../../../../../coap-service/source/include/\ + ../../../../../libService/libService/\ + ../../../../../libService/exported-libs/mbed-client-libservice/mbed-client-libservice/\ + ../../../../../libService/exported-libs/mbed-client-randlib/mbed-client-randlib/\ + ../../../../../coap-service/coap-service/\ + ../../../../../nsdl-c/nsdl-c/\ + ../../../../../nsdl-c/source/libCoap/src/include/\ + ../../../../../event-loop/nanostack-event-loop/\ + ../../../../../event-loop/source/ \ + ../../../../../mbedtls/include/ \ + ../../../../../mbedtls/include/mbedtls/ \ + /usr/include\ + $(CPPUTEST_HOME)/include\ + +CPPUTESTFLAGS = -D__thumb2__ -w +CPPUTEST_CFLAGS += -std=gnu99 + +#if you need to use -std=c++11 or c++0x you need to uncomment this +#CPPUTESTFLAGS += -DCPPUTEST_STD_CPP_LIB_DISABLED +#CPPUTEST_CXXFLAGS += -std=gnu++0x + diff --git a/test/coap-service/unittest/run_tests b/test/coap-service/unittest/run_tests new file mode 100755 index 0000000000..f34b3b8d05 --- /dev/null +++ b/test/coap-service/unittest/run_tests @@ -0,0 +1,34 @@ +#!/bin/bash +echo +echo Build Coap-service unit tests +echo + +# Remember to add new test folder to Makefile +make clean +make all + +echo +echo Create results +echo +mkdir results +find ./ -name '*.xml' | xargs cp -t ./results/ + +echo +echo Create coverage document +echo +mkdir coverages +cd coverages + +lcov -q -d ../. -c -o app.info +lcov -q -r app.info "/test*" -o app.info +lcov -q -r app.info "/usr*" -o app.info +lcov -q -r app.info "/libService*" -o app.info +genhtml -q --no-branch-coverage app.info +cd .. +echo +echo +echo +echo Have a nice bug hunt! +echo +echo +echo diff --git a/test/coap-service/unittest/run_tests~ b/test/coap-service/unittest/run_tests~ new file mode 100755 index 0000000000..f34b3b8d05 --- /dev/null +++ b/test/coap-service/unittest/run_tests~ @@ -0,0 +1,34 @@ +#!/bin/bash +echo +echo Build Coap-service unit tests +echo + +# Remember to add new test folder to Makefile +make clean +make all + +echo +echo Create results +echo +mkdir results +find ./ -name '*.xml' | xargs cp -t ./results/ + +echo +echo Create coverage document +echo +mkdir coverages +cd coverages + +lcov -q -d ../. -c -o app.info +lcov -q -r app.info "/test*" -o app.info +lcov -q -r app.info "/usr*" -o app.info +lcov -q -r app.info "/libService*" -o app.info +genhtml -q --no-branch-coverage app.info +cd .. +echo +echo +echo +echo Have a nice bug hunt! +echo +echo +echo diff --git a/test/coap-service/unittest/stub/6lowpan_iphc_stub.c b/test/coap-service/unittest/stub/6lowpan_iphc_stub.c new file mode 100644 index 0000000000..062be99b7e --- /dev/null +++ b/test/coap-service/unittest/stub/6lowpan_iphc_stub.c @@ -0,0 +1,93 @@ +/* + * Copyright (c) 2013-2015 ARM Limited. All rights reserved. + */ + +#include "config.h" +#define HAVE_CIPV6 + +#ifdef HAVE_CIPV6 +#include "ns_types.h" +#include "string.h" +#include "ns_trace.h" +#include "Core/include/socket.h" +#include "Common_Protocols/ipv6.h" +#include "Common_Protocols/icmpv6.h" +#include "6LoWPAN/IPHC_Decode/cipv6.h" +#include "6LoWPAN/Fragmentation/cipv6_fragmenter.h" +#include "6LoWPAN/ND/icmp.h" +#include "NWK_INTERFACE/Include/protocol.h" +#include "ipv6_stack/protocol_ipv6.h" +#include "6LoWPAN/IPHC_Decode/cudp.h" +#include "6LoWPAN/IPHC_Decode/iphc_compress.h" +#include "6LoWPAN/IPHC_Decode/iphc_decompress.h" +#include "6LoWPAN/Mesh/mesh.h" +#include "6LoWPAN/Thread/thread.h" + +#ifdef HAVE_RPL +#include "6LoWPAN/RPL/rpl.h" +#include "6LoWPAN/RPL/rpl_obj.h" +#endif + +#define TRACE_GROUP "iphc" + +#include "MulticastTrigle/multicast.h" +#include "6LoWPAN/ND/nd_router_object.h" +#include "6LoWPAN/Bootstraps/protocol_6lowpan.h" +#include "MAC/IEEE802_15_4/mac_indirect_data.h" +#include "MAC/IEEE802_15_4/mac_mlme.h" +#include "nwk_stats_api.h" +#include "NWK_INTERFACE/Include/protocol_stats.h" +#include "common_functions.h" + +typedef struct ip_src_addr_t { + addrtype_t addr_type; /*!< Type of address */ + uint8_t address[8]; /*!< Source or destination address */ +} ip_src_addr_t; + + +NS_LARGE uint8_t ip_hc[2]; +NS_LARGE route_info_entry_t route_info_entry; +NS_LARGE uint8_t flow_len; +NS_LARGE uint8_t flow_ctrl[4]; + +void cipv6_set_next_hop(buffer_t *buf); +uint8_t cipv6_forward_rl_check(void); +buffer_t *cipv6_reallocate_ip_headers(buffer_t *buf, uint8_t type, forward_dest_t dest); + + +buffer_t *cipv6_check_link_layer_length(buffer_t *buf) +{ + return NULL; +} + +void cipv6_set_next_hop(buffer_t *buf) +{ +} + +uint8_t cipv6_forward_rl_check(void) +{ + return 0; +} + +buffer_t *cipv6_reallocate_ip_headers(buffer_t *buf, uint8_t type, forward_dest_t dest) +{ + return NULL; +} + +buffer_t *cipv6_down(buffer_t *buf) +{ + return NULL; +} + +buffer_t *lowpan_down(buffer_t *buf) +{ + return NULL; +} + +buffer_t *cipv6_up(buffer_t *buf) +{ + return NULL; +} + +#endif /* HAVE_CIPV6 */ + diff --git a/test/coap-service/unittest/stub/6lowpan_mesh_stub.c b/test/coap-service/unittest/stub/6lowpan_mesh_stub.c new file mode 100644 index 0000000000..3c83002267 --- /dev/null +++ b/test/coap-service/unittest/stub/6lowpan_mesh_stub.c @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2014-2015 ARM Limited. All rights reserved. + */ + +#include "config.h" +#include +#include "ns_types.h" +#define HAVE_DEBUG 1 +#include "buffer.h" +#include "ns_list.h" +//#include "platform/ns_debug.h" +#include "common_functions.h" +#include "NWK_INTERFACE/Include/protocol.h" +#include "MAC/IEEE802_15_4/mac_mlme.h" +#include "NWK_INTERFACE/Include/protocol_stats.h" +#include "6LoWPAN/IPHC_Decode/cipv6.h" +#include "MAC/IEEE802_15_4/mac_indirect_data.h" +#include "mesh.h" + +void debug(const char *msg) +{ +} + +protocol_interface_info_entry_t *protocol_stack_interface_info_get(nwk_interface_id nwk_id) +{ + return NULL; +} + +extern COMMON_FUNCTIONS_FN uint16_t common_read_16_bit(const uint8_t data_buf[__static 2]); +extern COMMON_FUNCTIONS_FN uint8_t *common_write_16_bit(uint16_t value, uint8_t ptr[__static 2]); +extern COMMON_FUNCTIONS_FN uint8_t *common_write_16_bit_inverse(uint16_t value, uint8_t ptr[__static 2]); + +bool nwk_interface_compare_mac_address(protocol_interface_info_entry_t *cur, uint_fast8_t addrlen, const uint8_t addr[]) +{ + return false; +} + +uint8_t addr_check_broadcast(const address_t addr, addrtype_t addr_type) +{ + return 0; +} + +#ifndef HAVE_DEBUG +uint8_t *buffer_corrupt_check(buffer_t *buf) +{ + return NULL; +} +#endif + +bool mac_mlme_write_our_addr(struct protocol_interface_info_entry *cur, sockaddr_t *sockaddr) +{ +} + +mac_direct_check_res_e mac_indirect_data_check(struct buffer *buf) +{ + mac_direct_check_res_e res = {0}; + return res; +} + +void protocol_stats_update(nwk_stats_type_t type, uint16_t update_val) +{ +} + +#if 0 +buffer_t *buffer_headroom(buffer_t *buf, uint16_t size) +{ + return NULL; +} +#endif + +buffer_t *cipv6_check_link_layer_length(buffer_t *buf) +{ + return NULL; +} diff --git a/test/coap-service/unittest/stub/address_stub.c b/test/coap-service/unittest/stub/address_stub.c new file mode 100644 index 0000000000..b55d9a70b1 --- /dev/null +++ b/test/coap-service/unittest/stub/address_stub.c @@ -0,0 +1,230 @@ +/* + * Copyright (c) 2008, 2010-2015 ARM Limited. All rights reserved. + */ +/** + * \file address.c + * \brief Utility functions concernig addresses + * + * This file contains all the utility functions that can be used to + * check, manipulate etc. addresses. + */ +#include "config.h" +#include "ns_types.h" +#include "ip6string.h" +#include "ns_trace.h" +#include "randLIB.h" +#include "string.h" +#include "nsdynmemLIB.h" +#include "socket_api.h" +#include "NWK_INTERFACE/Include/protocol.h" +#include "Common_Protocols/ipv6.h" +#include "Common_Protocols/icmpv6.h" +#include "6LoWPAN/Thread/thread.h" +#include "common_functions.h" + +#include "address_stub.h" + +#define TRACE_GROUP_ADDRESS "addr" + +#define ADDR_SHORT_MULTICAST_MAX 10 +#define ADDR_MAX_DYNAMIC_MULTICAST_ADDRESSES 100 + +address_stub_def address_stub; + +typedef struct addr_policy_table_entry_t { + uint8_t prefix[16]; + uint8_t prefix_len; + uint8_t precedence; + uint8_t label; + ns_list_link_t link; +} addr_policy_table_entry_t; + +static NS_LIST_DEFINE(addr_policy_table, addr_policy_table_entry_t, link); + +uint32_t addr_preferences_default = SOCKET_IPV6_PREFER_SRC_TMP | SOCKET_IPV6_PREFER_SRC_6LOWPAN_SHORT; + +const uint8_t ADDR_LINK_LOCAL_PREFIX[8] = { 0xfe, 0x80 }; +const uint8_t ADDR_SHORT_ADR_SUFFIC[6] = { 0x00, 0x00, 0x00, 0xff, 0xfe, 0x00}; + +const uint8_t ADDR_MULTICAST_SOLICITED[13] = { 0xff, 0x02, [11] = 0x01, 0xff}; +const uint8_t ADDR_LINK_LOCAL_ALL_NODES[16] = { 0xff, 0x02, [15] = 0x01 }; +const uint8_t ADDR_LINK_LOCAL_ALL_ROUTERS[16] = { 0xff, 0x02, [15] = 0x02 }; +const uint8_t ADDR_MULTICAST_ALL_DHCPV6_SERVER[16] = { 0xff, 0x03, [13] = 0x01, 0x00, 0x03 }; +const uint8_t ADDR_ALL_DHCP_RELAY_AGENTS_AND_SERVERS[16] = { 0xff, 0x02, [13] = 0x01, 0x00, 0x02 }; + +const uint8_t ADDR_MULTICAST_SITEPREFIX[15] = { 0xff, 0x05 }; +const uint8_t ADDR_MULTICAST_SUBPREFIX[15] = { 0xff, 0x03 }; +const uint8_t ADDR_IPV4_MAPPED_PREFIX[12] = { [10] = 0xff, 0xff }; +const uint8_t ADDR_LOOPBACK[16] = { [15] = 1 }; +const uint8_t ADDR_UNSPECIFIED[16] = { 0 }; +#define ADDR_IPV4_COMPATIBLE ADDR_LOOPBACK /* First 96 bits match...*/ + + +uint8_t addr_len_from_type(addrtype_t addr_type) +{ + return 0; +} + +uint8_t addr_check_broadcast(const address_t addr, addrtype_t addr_type) +{ + address_stub.expectedUint8ptr = &addr; + address_stub.expectedUint8 = addr_type; + + return address_stub.returnUint8; +} + +bool addr_is_ipv6_link_local(const uint8_t addr[__static 16]) +{ + return false; +} + +/* Scope(A), as defined in RFC 6724 plus RFC 4007 */ +uint_fast8_t addr_ipv6_scope(const uint8_t addr[__static 16], const protocol_interface_info_entry_t *interface) +{ + return 0; +} + +void address_module_init(void) +{ +} + +void addr_multicast_list_init(void) +{ +} + +uint8_t addr_multicast_list_allocate(const uint8_t *ptr, uint8_t relay_allocate) +{ + return -1; +} + +uint8_t addr_multicast_list_free(const uint8_t *ptr) +{ + return 1; +} + +uint8_t addr_multicast_list_check(const uint8_t *ptr, bool rx_adr, protocol_interface_info_entry_t *cur_interface) +{ + return -1; +} + +int_fast8_t addr_policy_table_add_entry(const uint8_t *prefix, uint8_t len, uint8_t precedence, uint8_t label) +{ + return -1; +} + +int_fast8_t addr_policy_table_delete_entry(const uint8_t *prefix, uint8_t len) +{ + return -1; +} + +void addr_policy_table_print(void) +{ +} + +if_address_entry_t *addr_get_entry(const protocol_interface_info_entry_t *interface, const uint8_t addr[__static 16]) +{ + return NULL; +} + +bool addr_is_assigned_to_interface(const protocol_interface_info_entry_t *interface, const uint8_t addr[__static 16]) +{ + return false; +} + +bool addr_is_tentative_for_interface(const protocol_interface_info_entry_t *interface, const uint8_t addr[__static 16]) +{ + return false; +} + +/* RFC 6724 Default source address selection */ +const uint8_t *addr_select_source(protocol_interface_info_entry_t *interface, const uint8_t dest[__static 16], uint32_t addr_preferences) +{ + return NULL; +} + +const uint8_t *addr_select_with_prefix(protocol_interface_info_entry_t *cur, const uint8_t *prefix, uint8_t prefix_len, uint32_t addr_preferences) +{ + return NULL; +} + +void addr_timer(protocol_interface_info_entry_t *cur, uint_fast16_t ticks) +{ +} + +if_address_entry_t *addr_add(protocol_interface_info_entry_t *cur, const uint8_t address[__static 16], uint_fast8_t prefix_len, if_address_source_t source, uint32_t valid_lifetime, uint32_t preferred_lifetime, bool skip_dad) +{ + return NULL; +} + +int_fast8_t addr_delete(protocol_interface_info_entry_t *cur, const uint8_t address[__static 16]) +{ + return -1; +} + +void addr_delete_matching(protocol_interface_info_entry_t *cur, const uint8_t *prefix, uint8_t prefix_len, if_address_source_t source) +{ +} + +void addr_duplicate_detected(struct protocol_interface_info_entry *interface, const uint8_t addr[__static 16]) +{ +} + +void memswap(uint8_t *restrict a, uint8_t *restrict b, uint_fast8_t len) +{ +} + +bool addr_ipv6_equal(const uint8_t a[__static 16], const uint8_t b[__static 16]) +{ + return false; +} + +bool addr_iid_matches_eui64(const uint8_t iid[__static 8], const uint8_t eui64[__static 8]) +{ + return false; +} + +bool addr_iid_matches_lowpan_short(const uint8_t iid[__static 8], uint16_t short_addr) +{ + return false; +} + +uint8_t *addr_ipv6_write_from_lowpan_short(uint8_t dst[__static 16], const uint8_t prefix[__static 8], uint16_t short_addr) +{ + return NULL; +} + +bool addr_iid_from_outer(uint8_t iid_out[__static 8], const sockaddr_t *addr_in) +{ + return false; +} + + +int addr_interface_set_ll64(protocol_interface_info_entry_t *cur, if_address_callback_fn *cb) +{ + return -1; +} + +int8_t addr_interface_get_ll_address(protocol_interface_info_entry_t *cur, uint8_t *address_ptr, uint8_t address_type) +{ + return -1; +} + +int8_t addr_interface_get_any_gp_address(protocol_interface_info_entry_t *cur, uint8_t *address_ptr, uint8_t address_type) +{ + return -1; +} + +int8_t addr_interface_gp_prefix_compare(protocol_interface_info_entry_t *cur, const uint8_t *prefix) +{ + return -1; +} + +int8_t addr_interface_address_compare(protocol_interface_info_entry_t *cur, const uint8_t *addr) +{ + return -1; +} + +int8_t addr_interface_select_source(protocol_interface_info_entry_t *cur, uint8_t *src_ptr, const uint8_t *dest, uint32_t addr_preferences) +{ + return -1; +} diff --git a/test/coap-service/unittest/stub/address_stub.h b/test/coap-service/unittest/stub/address_stub.h new file mode 100644 index 0000000000..c57bbb6cd8 --- /dev/null +++ b/test/coap-service/unittest/stub/address_stub.h @@ -0,0 +1,21 @@ +#ifndef __ADDRESS_STUB_H__ +#define __ADDRESS_STUB_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct { + uint8_t expectedUint8; + uint16_t expectedUint16; + uint8_t *expectedUint8ptr; + uint8_t returnUint8; +} address_stub_def; + +extern address_stub_def address_stub; + +#ifdef __cplusplus +} +#endif + +#endif // __ADDRESS_STUB_H__ diff --git a/test/coap-service/unittest/stub/buffer_dyn_stub.c b/test/coap-service/unittest/stub/buffer_dyn_stub.c new file mode 100644 index 0000000000..036745dde2 --- /dev/null +++ b/test/coap-service/unittest/stub/buffer_dyn_stub.c @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2011-2015 ARM Limited. All rights reserved. + */ + +#include "config.h" +#include "string.h" +#include "ns_types.h" +#include "nsdynmemLIB.h" +#include "Core/include/address.h" +#include "Core/include/buffer.h" +#include "platform/ns_debug.h" +#include "platform/arm_hal_interrupt.h" +#include "NWK_INTERFACE/Include/protocol_stats.h" +#include "ip_fsc.h" + + +uint8_t *(buffer_corrupt_check)(buffer_t *buf) +{ + return 0; +} + + +buffer_t *buffer_get(uint16_t size) +{ + return NULL; +} + +buffer_t *buffer_headroom(buffer_t *buf, uint16_t size) +{ + return NULL; +} + +buffer_t *buffer_free_route(buffer_t *buf) +{ + return NULL; +} + +buffer_t *buffer_free(buffer_t *buf) +{ + return NULL; +} + +buffer_t *buffer_free_list(buffer_t *b) +{ + return NULL; +} + + +void buffer_data_add(buffer_t *buf, const uint8_t *data_ptr, uint16_t data_len) +{ + return; +} + + +buffer_t *buffer_clone(buffer_t *buf) +{ + return NULL; +} + +uint16_t buffer_ipv6_fcf(const buffer_t *buf, uint8_t next_header) +{ + return 0; +} diff --git a/test/coap-service/unittest/stub/coap_connection_handler_stub.c b/test/coap-service/unittest/stub/coap_connection_handler_stub.c new file mode 100644 index 0000000000..03c2cf8237 --- /dev/null +++ b/test/coap-service/unittest/stub/coap_connection_handler_stub.c @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2015 ARM Limited. All rights reserved. + */ + +#include +#include "coap_connection_handler.h" +#include "coap_security_handler.h" +#include "ns_list.h" +#include "ns_trace.h" +#include "nsdynmemLIB.h" +#include "socket_api.h" +#include "net_interface.h" +#include "randLIB.h" +#include "eventOS_callback_timer.h" +#include "coap_connection_handler_stub.h" + +thread_conn_handler_stub_def thread_conn_handler_stub; + +int coap_connection_handler_virtual_recv(thread_conn_handler_t *handler, uint8_t address[static 16], uint16_t port, uint8_t *data_ptr, uint16_t data_len) +{ + return thread_conn_handler_stub.int_value; +} + +thread_conn_handler_t *connection_handler_create(int (*recv_cb)(int8_t socket_id, uint8_t address[static 16], uint16_t port, unsigned char *, int), + int (*send_cb)(int8_t socket_id, uint8_t address[static 16], uint16_t port, const unsigned char *, int), + int (*pw_cb)(int8_t socket_id, uint8_t address[static 16], uint16_t port, uint8_t *pw_ptr, uint8_t *pw_len), + void(*done_cb)(int8_t socket_id, uint8_t address[static 16], uint16_t port, uint8_t keyblock[static KEY_BLOCK_LEN]) ) +{ + thread_conn_handler_stub.send_to_sock_cb = send_cb; + thread_conn_handler_stub.receive_from_sock_cb = recv_cb; + thread_conn_handler_stub.get_passwd_cb = pw_cb; + thread_conn_handler_stub.sec_done_cb = done_cb; + return thread_conn_handler_stub.handler_obj; +} + +void connection_handler_destroy(thread_conn_handler_t *handler) +{ + +} + +void connection_handler_close_secure_connection( thread_conn_handler_t *handler ) +{ + +} + +int coap_connection_handler_open_connection(thread_conn_handler_t *handler, uint16_t listen_port, bool use_ephemeral_port, bool is_secure, bool is_real_socket, bool bypassSec) +{ + return thread_conn_handler_stub.int_value; +} + +int coap_connection_handler_send_data(thread_conn_handler_t *handler, ns_address_t *dest_addr, uint8_t *data_ptr, uint16_t data_len, bool bypass_link_sec) +{ + return thread_conn_handler_stub.int_value; +} + +bool coap_connection_handler_socket_belongs_to(thread_conn_handler_t *handler, int8_t socket_id) +{ + return thread_conn_handler_stub.bool_value; +} diff --git a/test/coap-service/unittest/stub/coap_connection_handler_stub.h b/test/coap-service/unittest/stub/coap_connection_handler_stub.h new file mode 100644 index 0000000000..1211f2d52e --- /dev/null +++ b/test/coap-service/unittest/stub/coap_connection_handler_stub.h @@ -0,0 +1,32 @@ +#ifndef __COAP_CONNECTION_HANDLER_STUB_H__ +#define __COAP_CONNECTION_HANDLER_STUB_H__ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#include "coap_connection_handler.h" + +typedef struct { + int int_value; + bool bool_value; + thread_conn_handler_t *handler_obj; + + int (*send_to_sock_cb)(int8_t socket_id, uint8_t address[static 16], uint16_t port, const unsigned char *, int); + int (*receive_from_sock_cb)(int8_t socket_id, uint8_t address[static 16], uint16_t port, unsigned char *, int); + int (*get_passwd_cb)(int8_t socket_id, uint8_t address[static 16], uint16_t port, uint8_t *pw_ptr, uint8_t *pw_len); + void (*sec_done_cb)(int8_t socket_id, uint8_t address[static 16], uint16_t port, uint8_t keyblock[static 40]); + +} thread_conn_handler_stub_def; + +extern thread_conn_handler_stub_def thread_conn_handler_stub; + +#ifdef __cplusplus +} +#endif + + +#endif diff --git a/test/coap-service/unittest/stub/coap_message_handler_stub.c b/test/coap-service/unittest/stub/coap_message_handler_stub.c new file mode 100644 index 0000000000..1890237e9f --- /dev/null +++ b/test/coap-service/unittest/stub/coap_message_handler_stub.c @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2015 ARM Limited. All rights reserved. + */ + +#include "coap_message_handler_stub.h" + +coap_message_handler_stub_def coap_message_handler_stub; + +coap_msg_handler_t *coap_message_handler_init(void *(*used_malloc_func_ptr)(uint16_t), void (*used_free_func_ptr)(void *), + uint8_t (*used_tx_callback_ptr)(uint8_t *, uint16_t, sn_nsdl_addr_s *, void *)) +{ + if(coap_message_handler_stub.coap_ptr){ + coap_message_handler_stub.coap_ptr->sn_coap_service_malloc = used_malloc_func_ptr; + coap_message_handler_stub.coap_ptr->sn_coap_service_free = used_free_func_ptr; + coap_message_handler_stub.coap_ptr->sn_coap_tx_callback = used_tx_callback_ptr; + } + return coap_message_handler_stub.coap_ptr; +} + +int8_t coap_message_handler_destroy(coap_msg_handler_t *handle) +{ + return coap_message_handler_stub.int8_value; +} + +coap_transaction_t *coap_message_handler_find_transaction(uint8_t *address_ptr, uint16_t port) +{ + return coap_message_handler_stub.coap_tx_ptr; +} + +int16_t coap_message_handler_coap_msg_process(coap_msg_handler_t *handle, int8_t socket_id, uint8_t source_addr_ptr[static 16], uint16_t port, + uint8_t *data_ptr, uint16_t data_len, int16_t (cb)(int8_t, sn_coap_hdr_s *, coap_transaction_t *)) +{ + coap_message_handler_stub.cb = cb; + return coap_message_handler_stub.int16_value; +} + +uint16_t coap_message_handler_request_send(coap_msg_handler_t *handle, int8_t service_id, uint8_t options, const uint8_t destination_addr[static 16], + uint16_t destination_port, uint8_t msg_type, uint8_t msg_code, const char *uri, uint8_t cont_type, + const uint8_t *payload_ptr, uint16_t payload_len, coap_message_handler_response_recv *request_response_cb) +{ + return coap_message_handler_stub.uint16_value; +} + +int8_t coap_message_handler_response_send(coap_msg_handler_t *handle, int8_t service_id, uint8_t options, sn_coap_hdr_s *request_ptr, sn_coap_msg_code_e message_code, + int32_t content_type, const uint8_t *payload_ptr, uint16_t payload_len) +{ + return coap_message_handler_stub.int8_value; +} + +int8_t coap_message_handler_exec(coap_msg_handler_t *handle, uint32_t current_time) +{ + return coap_message_handler_stub.int8_value; +} + + diff --git a/test/coap-service/unittest/stub/coap_message_handler_stub.h b/test/coap-service/unittest/stub/coap_message_handler_stub.h new file mode 100644 index 0000000000..6e0b74fd55 --- /dev/null +++ b/test/coap-service/unittest/stub/coap_message_handler_stub.h @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2015 ARM Limited. All rights reserved. + */ +#ifndef __COAP_MESSAGE_HANDLER_STUB_H__ +#define __COAP_MESSAGE_HANDLER_STUB_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include "coap_message_handler.h" + +typedef struct { + int8_t int8_value; + int16_t int16_value; + uint16_t uint16_value; + coap_msg_handler_t *coap_ptr; + coap_transaction_t *coap_tx_ptr; + int16_t (*cb)(int8_t, sn_coap_hdr_s *, coap_transaction_t *); +} coap_message_handler_stub_def; + +extern coap_message_handler_stub_def coap_message_handler_stub; + +#ifdef __cplusplus +} +#endif + +#endif // __COAP_MESSAGE_HANDLER_STUB_H__ diff --git a/test/coap-service/unittest/stub/coap_security_handler_stub.c b/test/coap-service/unittest/stub/coap_security_handler_stub.c new file mode 100644 index 0000000000..dd5cb3b69e --- /dev/null +++ b/test/coap-service/unittest/stub/coap_security_handler_stub.c @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2015 ARM Limited. All rights reserved. + */ + +#include +#include +#include +#include "ns_trace.h" +#include "nsdynmemLIB.h" +#include "coap_connection_handler.h" +#include "randLIB.h" +#include "coap_security_handler_stub.h" + +thread_sec_def coap_security_handler_stub; + +thread_security_t *thread_security_create(int8_t socket_id, int8_t timer_id, uint8_t *address_ptr, uint16_t port, + int (*send_cb)(int8_t socket_id, uint8_t *address_ptr, uint16_t port, const unsigned char *, size_t), + int (*receive_cb)(int8_t socket_id, unsigned char *, size_t), + void (*start_timer_cb)(int8_t timer_id, uint32_t min, uint32_t fin), + int (*timer_status_cb)(int8_t timer_id)) +{ + coap_security_handler_stub.send_cb = send_cb; + coap_security_handler_stub.receive_cb = receive_cb; + coap_security_handler_stub.start_timer_cb = start_timer_cb; + coap_security_handler_stub.timer_status_cb = timer_status_cb; + return coap_security_handler_stub.sec_obj; +} + +void thread_security_destroy(thread_security_t *sec) +{ + +} + +int coap_security_handler_connect(thread_security_t *sec, bool is_server, const unsigned char *pw, uint8_t len) +{ + sec->_is_started = true; + if( coap_security_handler_stub.counter >= 0){ + return coap_security_handler_stub.values[coap_security_handler_stub.counter--]; + } + return coap_security_handler_stub.int_value; +} + +int coap_security_handler_continue_connecting(thread_security_t *sec) +{ + if( coap_security_handler_stub.counter >= 0){ + return coap_security_handler_stub.values[coap_security_handler_stub.counter--]; + } + + return coap_security_handler_stub.int_value; +} + + +int coap_security_handler_send_message(thread_security_t *sec, unsigned char *message, size_t len) +{ + if( coap_security_handler_stub.counter >= 0){ + return coap_security_handler_stub.values[coap_security_handler_stub.counter--]; + } + return coap_security_handler_stub.int_value; +} + +int thread_security_send_close_alert(thread_security_t *sec) +{ + if( coap_security_handler_stub.counter >= 0){ + return coap_security_handler_stub.values[coap_security_handler_stub.counter--]; + } + return coap_security_handler_stub.int_value; +} + +int coap_security_handler_read(thread_security_t *sec, unsigned char* buffer, size_t len) +{ + if( coap_security_handler_stub.counter >= 0){ + return coap_security_handler_stub.values[coap_security_handler_stub.counter--]; + } + return coap_security_handler_stub.int_value; +} diff --git a/test/coap-service/unittest/stub/coap_security_handler_stub.h b/test/coap-service/unittest/stub/coap_security_handler_stub.h new file mode 100644 index 0000000000..83a4f7b0b2 --- /dev/null +++ b/test/coap-service/unittest/stub/coap_security_handler_stub.h @@ -0,0 +1,24 @@ +/* + * Copyright (c) 2015 ARM Limited. All rights reserved. + */ +#ifndef __COAP_SECURITY_HANDLER_STUB_H__ +#define __COAP_SECURITY_HANDLER_STUB_H__ + +#include +#include "coap_security_handler.h" + +typedef struct tsh{ + thread_security_t *sec_obj; + int int_value; + int counter; + int values[10]; + + int (*send_cb)(int8_t socket_id, uint8_t *address_ptr, uint16_t port, const unsigned char *, size_t); + int (*receive_cb)(int8_t socket_id, unsigned char *, size_t); + void (*start_timer_cb)(int8_t timer_id, uint32_t min, uint32_t fin); + int (*timer_status_cb)(int8_t timer_id); +} thread_sec_def; + +extern thread_sec_def coap_security_handler_stub; + +#endif //__COAP_SECURITY_HANDLER_STUB_H__ diff --git a/test/coap-service/unittest/stub/coap_service_api_stub.c b/test/coap-service/unittest/stub/coap_service_api_stub.c new file mode 100644 index 0000000000..7b4f372b0c --- /dev/null +++ b/test/coap-service/unittest/stub/coap_service_api_stub.c @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2015 ARM Limited. All rights reserved. + */ + + +#include "config.h" +#ifdef HAVE_THREAD +#include + +#include "ns_types.h" +#include "ns_list.h" +#include "ns_trace.h" +#include "nsdynmemLIB.h" +#include "sn_nsdl.h" +#include "sn_coap_header.h" +#include "coap_service_api.h" +#include "coap_message_handler.h" +#include "eventOS_event.h" +#include "eventOS_scheduler.h" +#include "eventOS_event_timer.h" +#include "common_functions.h" +#include "net_interface.h" + +int8_t coap_service_initialize(int8_t interface_id, uint16_t listen_port, uint8_t service_options, + coap_service_security_start_cb *start_ptr, coap_service_security_done_cb *security_done_cb) +{ + return 0; +} + +void coap_service_delete(int8_t service_id) +{ +} + +int16_t coap_service_virtual_socket_recv(int8_t service_id, uint8_t source_addr_ptr[static 16], uint16_t port, uint8_t *data_ptr, uint16_t data_len) +{ + return 0; +} + +int16_t coap_service_virtual_socket_set_cb(int8_t service_id, coap_service_virtual_socket_send_cb *send_method_ptr) +{ + return 0; +} + +int8_t coap_service_register_uri(int8_t service_id, const char *uri, uint8_t allowed_method, coap_service_request_recv_cb *request_recv_cb) +{ + return 0; +} + +int8_t coap_service_unregister_uri(int8_t service_id, const char *uri) +{ + return 0; +} + +uint16_t coap_service_request_send(int8_t service_id, uint8_t options, const uint8_t destination_addr[static 16], uint16_t destination_port, uint8_t msg_type, uint8_t msg_code, const char *uri, + uint8_t cont_type, const uint8_t *payload_ptr, uint16_t payload_len, coap_message_handler_response_recv *request_response_cb){ + return 0; +} + +int8_t coap_service_response_send(int8_t service_id, uint8_t options, sn_coap_hdr_s *request_ptr, sn_coap_msg_code_e message_code, int32_t content_type, const uint8_t *payload_ptr,uint16_t payload_len){ + return 0; +} + +#endif diff --git a/test/coap-service/unittest/stub/common_functions_stub.c b/test/coap-service/unittest/stub/common_functions_stub.c new file mode 100644 index 0000000000..4e30823ce2 --- /dev/null +++ b/test/coap-service/unittest/stub/common_functions_stub.c @@ -0,0 +1,116 @@ +/* + * Copyright (c) 2014-2015 ARM Limited. All rights reserved. + */ +#include +#include +#include + +#include "ns_types.h" +//#include "common_functions.h" +#define COMMON_FUNCTIONS_FN + +#include + +bool bitsequal(const uint8_t *a, const uint8_t *b, uint_fast8_t bits) +{ + return true; +} + +uint8_t *bitcopy(uint8_t *restrict dst, const uint8_t *restrict src, uint_fast8_t bits) +{ + return NULL; +} + +COMMON_FUNCTIONS_FN uint8_t *common_write_64_bit(uint64_t value, uint8_t ptr[__static 8]) +{ + return NULL; +} + +COMMON_FUNCTIONS_FN uint64_t common_read_64_bit(const uint8_t data_buf[__static 8]) +{ + return 0; +} + +COMMON_FUNCTIONS_FN uint8_t *common_write_32_bit(uint32_t value, uint8_t ptr[__static 4]) +{ + return NULL; +} + +COMMON_FUNCTIONS_FN uint32_t common_read_32_bit(const uint8_t data_buf[__static 4]) +{ + return 0; +} + +COMMON_FUNCTIONS_FN uint8_t *common_write_32_bit_inverse(uint32_t value, uint8_t ptr[__static 4]) +{ + return NULL; +} + +COMMON_FUNCTIONS_FN uint32_t common_read_32_bit_inverse(const uint8_t data_buf[__static 4]) +{ + return 0; +} + +COMMON_FUNCTIONS_FN uint8_t *common_write_24_bit(uint_fast24_t value, uint8_t ptr[__static 3]) +{ + return NULL; +} + +COMMON_FUNCTIONS_FN uint_fast24_t common_read_24_bit(const uint8_t data_buf[__static 3]) +{ + return 0; +} + +COMMON_FUNCTIONS_FN uint8_t *common_write_16_bit(uint16_t value, uint8_t ptr[__static 2]) +{ + return NULL; +} + +COMMON_FUNCTIONS_FN uint16_t common_read_16_bit(const uint8_t data_buf[__static 2]) +{ + return 0; +} + +COMMON_FUNCTIONS_FN uint8_t *common_write_16_bit_inverse(uint16_t value, uint8_t ptr[__static 2]) +{ + return NULL; +} + +COMMON_FUNCTIONS_FN uint_fast8_t common_count_bits(uint8_t byte) +{ + return 0; +} + +COMMON_FUNCTIONS_FN uint_fast8_t common_count_leading_zeros(uint8_t byte) +{ + return 0; +} + +COMMON_FUNCTIONS_FN bool common_serial_number_greater_8(uint8_t s1, uint8_t s2) +{ + return false; +} + +COMMON_FUNCTIONS_FN bool common_serial_number_greater_16(uint16_t s1, uint16_t s2) +{ + return false; +} + +COMMON_FUNCTIONS_FN bool common_serial_number_greater_32(uint32_t s1, uint32_t s2) +{ + return false; +} + +COMMON_FUNCTIONS_FN bool bit_test(const uint8_t *bitset, uint_fast8_t bit) +{ + return false; +} + +COMMON_FUNCTIONS_FN void bit_set(uint8_t *bitset, uint_fast8_t bit) +{ +} + +COMMON_FUNCTIONS_FN void bit_clear(uint8_t *bitset, uint_fast8_t bit) +{ + +} diff --git a/test/coap-service/unittest/stub/cudp_stub.c b/test/coap-service/unittest/stub/cudp_stub.c new file mode 100644 index 0000000000..08f76aa92c --- /dev/null +++ b/test/coap-service/unittest/stub/cudp_stub.c @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2013-2015 ARM Limited. All rights reserved. + */ +/** + * \file cudp.c + * \brief This file contains UDP layer decode, compress. + */ +#include "config.h" +#include "ns_types.h" +//#include "Core/include/address.h" +#include "Core/include/buffer.h" +//#include "string.h" +//#include "Core/include/routing_table.h" +//#include "6LoWPAN/IPHC_Decode/cipv6.h" +//#include "6LoWPAN/IPHC_Decode/cudp.h" +//#include "Common_Protocols/udp.h" +//#include "6LoWPAN/Bootstraps/network_lib.h" +//#include "common_functions.h" + +buffer_t *parse_udp_header(buffer_t *buf) +{ + return NULL; +} + +buffer_t *cudp_compres_header(buffer_t *buf) +{ + return NULL; +} + +buffer_t *cudp_decode_to_full(buffer_t *buf) +{ + return NULL; +} + + + diff --git a/test/coap-service/unittest/stub/dhcp_service_api_stub.c b/test/coap-service/unittest/stub/dhcp_service_api_stub.c new file mode 100644 index 0000000000..7f1637be8e --- /dev/null +++ b/test/coap-service/unittest/stub/dhcp_service_api_stub.c @@ -0,0 +1,157 @@ +/* + * Copyright (c) 2013-2015 ARM Limited. All rights reserved. + */ + +#include +#include +#include +#include "eventOS_event.h" +#include "eventOS_scheduler.h" +#include "eventOS_event_timer.h" +#include "nsdynmemLIB.h" +#include "ns_list.h" +#include "randLIB.h" +#include "socket_api.h" +#include "net_interface.h" +#include "common_functions.h" +#include "libDHCPv6/libDHCPv6.h" +#include "NWK_INTERFACE/Include/protocol.h" // just for protocol_core_monotonic_time + +#include "dhcp_service_api.h" + +#define TRACE_GROUP "dhcp" + +#define MAX_SERVERS 20 + +/* Fixed-point randomisation limits for randlib_randomise_base() - RFC 3315 + * says RAND is uniformly distributed between -0.1 and +0.1 + */ +#define RAND1_LOW 0x7333 // 1 - 0.1; minimum for "1+RAND" +#define RAND1_HIGH 0x8CCD // 1 + 0.1; maximum for "1+RAND" + +typedef struct { + dhcp_service_receive_req_cb *recv_req_cb; + uint16_t instance_id; + int8_t interface_id; + ns_list_link_t link; +} server_instance_t; +typedef NS_LIST_HEAD(server_instance_t, link) server_instance_list_t; + +typedef struct { + ns_address_t addr; + dhcp_service_receive_resp_cb *recv_resp_cb; + uint16_t instance_id; + int8_t interface_id; + int8_t socket; + uint8_t options; + void *client_obj_ptr; + uint32_t msg_tr_id; + uint32_t message_tr_id; + uint32_t first_transmit_time; + uint16_t timeout; + uint16_t timeout_init; + uint16_t timeout_max; + uint8_t retrans_max; + uint8_t retrans; + uint8_t *msg_ptr; + uint16_t msg_len; + ns_list_link_t link; +} msg_tr_t; +typedef NS_LIST_HEAD(msg_tr_t, link) tr_list_t; + +typedef struct { + ns_address_t src_address; + server_instance_list_t srv_list; + tr_list_t tr_list; + int8_t dhcp_server_socket; + int8_t dhcp_client_socket; + int8_t dhcpv6_socket_service_tasklet; +} dhcp_service_class_t; + +#define DHCPV6_SOCKET_SERVICE_TASKLET_INIT 1 +#define DHCPV6_SOCKET_SERVICE_TIMER 2 + +#define DHCPV6_SOCKET_SERVICE_TIMER_ID 1 + +#define DHCPV6_SOCKET_TIMER_UPDATE_PERIOD_IN_MS 100 + +dhcp_service_class_t *dhcp_service = NULL; + +void dhcp_service_send_message(msg_tr_t *msg_tr_ptr); + +void DHCPv6_socket_service_tasklet(arm_event_s *event) +{ +} + +bool dhcp_service_allocate(void) +{ + return false; +} + +msg_tr_t *dhcp_tr_find(uint32_t msg_tr_id) +{ + return NULL; +} + +msg_tr_t *dhcp_tr_create(void) +{ + return NULL; +} + +void dhcp_tr_delete(msg_tr_t *msg_ptr) +{ +} + +void dhcp_tr_set_retry_timers(msg_tr_t *msg_ptr, uint8_t msg_type) +{ +} + +server_instance_t *dhcp_service_client_find(uint16_t instance_id) +{ + return NULL; +} + +void recv_dhcp_server_msg(void *cb_res) +{ +} + +void recv_dhcp_client_msg(void *cb_res) +{ +} + +uint16_t dhcp_service_init(int8_t interface_id, dhcp_service_receive_req_cb *receive_req_cb) +{ + return 0; +} + +void dhcp_service_delete(uint16_t instance) +{ +} + +int dhcp_service_send_resp(uint32_t msg_tr_id, uint8_t options, uint8_t *msg_ptr, uint16_t msg_len) +{ + return 0; +} + +uint32_t dhcp_service_send_req(uint16_t instance_id, uint8_t options, void *ptr, const uint8_t addr[static 16], uint8_t *msg_ptr, uint16_t msg_len, dhcp_service_receive_resp_cb *receive_resp_cb) +{ + return 0; +} + +void dhcp_service_set_retry_timers(uint32_t msg_tr_id, uint16_t timeout_init, uint16_t timeout_max, uint8_t retrans_max) +{ +} + +void dhcp_service_req_remove(uint32_t msg_tr_id) +{ +} + +void dhcp_service_send_message(msg_tr_t *msg_tr_ptr) +{ +} + +bool dhcp_service_timer_tick(uint16_t ticks) +{ + return false; +} + diff --git a/test/coap-service/unittest/stub/eventOS_event_stub.c b/test/coap-service/unittest/stub/eventOS_event_stub.c new file mode 100644 index 0000000000..e70337ebe2 --- /dev/null +++ b/test/coap-service/unittest/stub/eventOS_event_stub.c @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2015 ARM Limited. All rights reserved. + */ + +#include +#include "ns_types.h" +#include "eventOS_event.h" +#include "eventOS_event_stub.h" + +eventOs_event_stub_def eventOs_event_stub; + +int8_t eventOS_event_send(arm_event_s *event) +{ + return eventOs_event_stub.int8_value; +} + +int8_t eventOS_event_handler_create(void (*handler_func_ptr)(arm_event_s *), uint8_t init_event_type) +{ + eventOs_event_stub.event_ptr = handler_func_ptr; + return eventOs_event_stub.int8_value; +} diff --git a/test/coap-service/unittest/stub/eventOS_event_stub.h b/test/coap-service/unittest/stub/eventOS_event_stub.h new file mode 100644 index 0000000000..603fda58af --- /dev/null +++ b/test/coap-service/unittest/stub/eventOS_event_stub.h @@ -0,0 +1,22 @@ +#ifndef __EVENTOS_EVENT_STUB_H__ +#define __EVENTOS_EVENT_STUB_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include "eventOS_event.h" + +typedef struct { + void (*event_ptr)(arm_event_s *); + int8_t int8_value; +} eventOs_event_stub_def; + +extern eventOs_event_stub_def eventOs_event_stub; + +#ifdef __cplusplus +} +#endif + +#endif // __EVENTOS_EVENT_STUB_H__ diff --git a/test/coap-service/unittest/stub/icmpv6_stub.c b/test/coap-service/unittest/stub/icmpv6_stub.c new file mode 100644 index 0000000000..9d567f6c43 --- /dev/null +++ b/test/coap-service/unittest/stub/icmpv6_stub.c @@ -0,0 +1,141 @@ +/* + * Copyright (c) 2013-2015 ARM Limited. All rights reserved. + */ +#include "config.h" +#include "ns_types.h" +#include "string.h" +#include "ns_trace.h" +#include "NWK_INTERFACE/Include/protocol.h" +#ifdef HAVE_RPL +#include "6LoWPAN/RPL/rpl.h" +#endif +#include "6LoWPAN/ND/icmp.h" +#include "Common_Protocols/icmpv6.h" +#include "Common_Protocols/icmpv6_prefix.h" +#include "Common_Protocols/icmpv6_radv.h" +#include "Common_Protocols/ipv6.h" +#include "ipv6_stack/protocol_ipv6.h" +#include "ip_fsc.h" +#include "ipv6_stack/ipv6_routing_table.h" +#ifdef NVM_BORDER_ROUTER +#include "br_list_nvm_api.h" +#endif +#include "Service_Libs/whiteboard/whiteboard.h" +#include "NWK_INTERFACE/Include/protocol_stats.h" +#include "common_functions.h" +#include "6LoWPAN/ND/nd_router_object.h" +#include "6LoWPAN/Bootstraps/protocol_6lowpan.h" + +#define TRACE_GROUP_ICMPTv6 "icmp" + +buffer_t *icmpv6_error(buffer_t *buf, protocol_interface_info_entry_t *cur, uint8_t type, uint8_t code, uint32_t aux) +{ + return NULL; +} + +#ifndef NO_IPV6_PMTUD + +buffer_t *icmpv6_packet_too_big_handler(buffer_t *buf) +{ + return NULL; +} +#endif + +buffer_t *icmpv6_echo_request_handler(buffer_t *buf) +{ + return NULL; +} + +buffer_t *icmpv6_ns_handler(buffer_t *buf) +{ + return NULL; +} + +int icmpv6_slaac_prefix_update(struct protocol_interface_info_entry *cur, uint8_t *prefix_ptr, uint8_t prefix_len, uint32_t valid_lifetime, uint32_t preferred_lifetime) +{ + return 0; +} + +if_address_entry_t *icmpv6_slaac_address_add(protocol_interface_info_entry_t *cur, uint8_t *prefix_ptr, uint8_t prefix_len, uint32_t valid_lifetime, uint32_t preferred_lifetime, bool skip_dad, slaac_src_e slaac_src) +{ + return NULL; +} + +buffer_t *icmpv6_up(buffer_t *buf) +{ + return NULL; +} + +buffer_t *icmpv6_down(buffer_t *buf) +{ + return NULL; +} + +buffer_t *icmpv6_build_rs(protocol_interface_info_entry_t *cur, const uint8_t *dest) +{ + return NULL; +} + +uint8_t *icmpv6_write_icmp_lla(protocol_interface_info_entry_t *cur, uint8_t *dptr, uint8_t icmp_opt) +{ + return NULL; +} + +/* + * Write either an ICMPv6 Prefix Information Option for a Router Advertisement + * (RFC4861+6275), or an RPL Prefix Information Option (RFC6550). + * Same payload, different type/len. + */ +uint8_t *icmpv6_write_prefix_option(const prefix_list_t *prefixes, uint8_t *dptr, uint8_t rpl_prefix, protocol_interface_info_entry_t *cur) +{ + return NULL; +} + +buffer_t *icmpv6_build_ns(protocol_interface_info_entry_t *cur, const uint8_t target_addr[16], const uint8_t *prompting_src_addr, bool unicast, bool unspecified_source, const aro_t *aro) +{ + return NULL; +} + +void icmpv6_build_echo_req(protocol_interface_info_entry_t *cur, const uint8_t target_addr[16]) +{ +} + +buffer_t *icmpv6_build_dad(protocol_interface_info_entry_t *cur, buffer_t *buf, uint8_t type, const uint8_t dest_addr[16], const uint8_t eui64[8], const uint8_t reg_addr[16], uint8_t status, uint16_t lifetime) +{ + return NULL; +} + +buffer_t *icmpv6_build_na(buffer_t *buf, bool solicited, bool override, const uint8_t target[static 16], const aro_t *aro) +{ + return NULL; +} + +buffer_t *icmpv6_na_handler(buffer_t *buf) +{ + return NULL; +} + +buffer_t *icmpv6_build_mld(protocol_interface_info_entry_t *cur, buffer_t *buf, uint8_t type, uint16_t max_response_delay, const uint8_t address[static 16]) +{ + return NULL; +} + +bool icmpv6_options_well_formed(const uint8_t *dptr, uint_fast16_t dlen) +{ + return false; +} + +bool icmpv6_options_well_formed_in_buffer(const buffer_t *buf, uint16_t offset) +{ + return false; +} + +const uint8_t *icmpv6_find_option(const uint8_t *dptr, uint_fast16_t dlen, uint8_t option, uint8_t optlen) +{ + return NULL; +} + +const uint8_t *icmpv6_find_option_in_buffer(const buffer_t *buf, uint_fast16_t offset, uint8_t option, uint8_t optlen) +{ + return NULL; +} diff --git a/test/coap-service/unittest/stub/iphc_compress_stub.c b/test/coap-service/unittest/stub/iphc_compress_stub.c new file mode 100644 index 0000000000..a9d9eba74a --- /dev/null +++ b/test/coap-service/unittest/stub/iphc_compress_stub.c @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2014-2015 ARM Limited. All rights reserved. + */ +#include "ns_list.h" +#include "common_functions.h" +#include "platform/ns_debug.h" +#include "nsdynmemLIB.h" +#include +#include "NWK_INTERFACE/Include/protocol.h" +#include "Common_Protocols/ipv6.h" +#include "6LoWPAN/IPHC_Decode/cipv6.h" + +typedef struct iphc_compress_state { + protocol_interface_info_entry_t *const interface; + const uint8_t *in; + uint8_t *out; + uint16_t len; + uint16_t out_space; + uint16_t consumed; + uint16_t produced; + const uint8_t *outer_src_iid; + const uint8_t *outer_dst_iid; +} iphc_compress_state_t; + +buffer_t *iphc_compress(protocol_interface_info_entry_t *cur, buffer_t *buf, uint16_t hc_space) +{ + return NULL; +} diff --git a/test/coap-service/unittest/stub/iphc_decompress_stub.c b/test/coap-service/unittest/stub/iphc_decompress_stub.c new file mode 100644 index 0000000000..88f14f13f1 --- /dev/null +++ b/test/coap-service/unittest/stub/iphc_decompress_stub.c @@ -0,0 +1,23 @@ +/* + * Copyright (c) 2014-2015 ARM Limited. All rights reserved. + */ +#include "ns_trace.h" +#include "common_functions.h" +#include "nsdynmemLIB.h" +#include +#include "NWK_INTERFACE/Include/protocol.h" +#include "6LoWPAN/IPHC_Decode/cipv6.h" +#include "Common_Protocols/ipv6.h" +#include "6LoWPAN/IPHC_Decode/iphc_decompress.h" + +#define TRACE_GROUP_IPHC_DECOMPRESS "iphc" + +uint8_t iphc_header_scan(buffer_t *buf, uint16_t *uncompressed_size) +{ + return 0; +} + +buffer_t *iphc_decompress(protocol_interface_info_entry_t *cur, buffer_t *buf) +{ + return NULL; +} diff --git a/test/coap-service/unittest/stub/ipv6_routing_table_stub.c b/test/coap-service/unittest/stub/ipv6_routing_table_stub.c new file mode 100644 index 0000000000..1f90b4f455 --- /dev/null +++ b/test/coap-service/unittest/stub/ipv6_routing_table_stub.c @@ -0,0 +1,184 @@ +/* + * Copyright (c) 2012-2015 ARM Limited. All rights reserved. + */ +/* + * ipv6_routing_table.c + * + * Implements IPv6 Neighbour Cache (RFC 4861), Destination Cache (RFC 4861), + * and Routing Table (RFC 4191, incorporating the RFC 4861 Prefix List) + */ +#include "config.h" +#include "ns_types.h" +#include "common_functions.h" +#include "ip6string.h" +#include "randLIB.h" +#include "ns_trace.h" +#include "string.h" +#include "net_interface.h" +#include "Core/include/address.h" +#include "ipv6_stack/ipv6_routing_table.h" +#include "Common_Protocols/icmpv6.h" +#include "ipv6_stack/protocol_ipv6.h" +#include "nsdynmemLIB.h" + +#ifndef HAVE_DEBUG +#define TRACE_LEVEL_DEBUG 0 +#endif +#define TRACE_GROUP "rout" + +#define NCACHE_MAX_LONG_TERM 8 +#define NCACHE_MAX_SHORT_TERM 32 + +#define DCACHE_MAX_LONG_TERM 16 +#define DCACHE_MAX_SHORT_TERM 64 + +#define NCACHE_GC_PERIOD 20 +#define DCACHE_GC_PERIOD 20 + +#define NCACHE_GC_AGE 600 +#define DCACHE_GC_AGE 30 + +void ipv6_router_gone(ipv6_neighbour_cache_t *cache, ipv6_neighbour_t *entry) +{ +} + + +void ipv6_neighbour_cache_init(ipv6_neighbour_cache_t *cache, int8_t interface_id) +{ +} + +void ipv6_neighbour_cache_flush(ipv6_neighbour_cache_t *cache) +{ +} + + +ipv6_neighbour_t *ipv6_neighbour_lookup(ipv6_neighbour_cache_t *cache, const uint8_t *address) +{ + return NULL; +} + +void ipv6_neighbour_entry_remove(ipv6_neighbour_cache_t *cache, ipv6_neighbour_t *entry) +{ +} + +ipv6_neighbour_t *ipv6_neighbour_lookup_or_create(ipv6_neighbour_cache_t *cache, const uint8_t *address/*, bool tentative*/) +{ + return NULL; +} + +ipv6_neighbour_t *ipv6_neighbour_lookup_or_create_by_interface_id(int8_t interface_id, const uint8_t *address/*, bool tentative*/) +{ + return NULL; +} + +ipv6_neighbour_t *ipv6_neighbour_used(ipv6_neighbour_cache_t *cache, ipv6_neighbour_t *entry) +{ + return NULL; +} + +void ipv6_neighbour_invalidate_ll_addr(ipv6_neighbour_cache_t *cache, addrtype_t ll_type, const uint8_t *ll_address) +{ +} + +void ipv6_neighbour_set_state(ipv6_neighbour_cache_t *cache, ipv6_neighbour_t *entry, ip_neighbour_cache_state_t state) +{ +} + +/* Called when LL address information is received other than in an NA (NS source, RS source, RA source, Redirect target) */ +void ipv6_neighbour_entry_update_unsolicited(ipv6_neighbour_cache_t *cache, ipv6_neighbour_t *entry, addrtype_t type, const uint8_t *ll_address/*, bool tentative*/) +{ +} + +ipv6_neighbour_t *ipv6_neighbour_update_unsolicited(ipv6_neighbour_cache_t *cache, const uint8_t *ip_address, addrtype_t type, const uint8_t *ll_address/*, bool tentative*/) +{ + return NULL; +} + +void ipv6_neighbour_update_from_na(ipv6_neighbour_cache_t *cache, ipv6_neighbour_t *entry, uint8_t flags, addrtype_t ll_type, const uint8_t *ll_address) +{ +} + +void ipv6_neighbour_reachability_confirmation(const uint8_t ip_address[__static 16], int8_t interface_id) +{ +} + +void ipv6_neighbour_cache_print(const ipv6_neighbour_cache_t *cache, uint8_t dlevel) +{ +} + + + +void ipv6_neighbour_cache_slow_timer(ipv6_neighbour_cache_t *cache, uint8_t seconds) +{ +} + +void ipv6_neighbour_cache_fast_timer(ipv6_neighbour_cache_t *cache, uint16_t ticks) +{ +} + +void ipv6_destination_cache_print(uint8_t dlevel) +{ +} + +ipv6_destination_t *ipv6_destination_lookup_or_create(const uint8_t *address, int8_t interface_id) +{ + return NULL; +} + +void ipv6_destination_redirect(const uint8_t *dest_addr, const uint8_t *sender_addr, const uint8_t *redirect_addr, int8_t interface_id, addrtype_t ll_type, const uint8_t *ll_address) +{ +} + +void ipv6_destination_release(ipv6_destination_t *dest) +{ +} + +void ipv6_destination_cache_timer(uint8_t seconds) +{ +} + +void ipv6_route_table_print(uint8_t dlevel) +{ +} + +ipv6_route_t *ipv6_route_choose_next_hop(const uint8_t *dest, int8_t interface_id, ipv6_route_predicate_fn_t *predicate) +{ + return NULL; +} + +ipv6_route_t *ipv6_route_lookup_with_info(const uint8_t *prefix, uint8_t prefix_len, int8_t interface_id, const uint8_t *next_hop, ipv6_route_src_t source, void *info, int_fast16_t src_id) +{ + return NULL; +} + +ipv6_route_t *ipv6_route_add(const uint8_t *prefix, uint8_t prefix_len, int8_t interface_id, const uint8_t *next_hop, ipv6_route_src_t source, uint32_t lifetime, int_fast8_t pref) +{ + return NULL; +} + +ipv6_route_t *ipv6_route_add_with_info(const uint8_t *prefix, uint8_t prefix_len, int8_t interface_id, const uint8_t *next_hop, ipv6_route_src_t source, void *info, uint8_t source_id, uint32_t lifetime, int_fast8_t pref) +{ + return NULL; +} + +int_fast8_t ipv6_route_delete(const uint8_t *prefix, uint8_t prefix_len, int8_t interface_id, const uint8_t *next_hop, ipv6_route_src_t source) +{ + return -1; +} + +int_fast8_t ipv6_route_delete_with_info(const uint8_t *prefix, uint8_t prefix_len, int8_t interface_id, const uint8_t *next_hop, ipv6_route_src_t source, void *info, int_fast16_t source_id) +{ + return -1; +} + +void ipv6_route_table_remove_interface(int8_t interface_id) +{ +} + +void ipv6_route_table_remove_info(int8_t interface_id, ipv6_route_src_t source, void *info) +{ +} + +void ipv6_route_table_ttl_update(uint16_t seconds) +{ +} diff --git a/test/coap-service/unittest/stub/ipv6_stub.c b/test/coap-service/unittest/stub/ipv6_stub.c new file mode 100644 index 0000000000..bc8f03714c --- /dev/null +++ b/test/coap-service/unittest/stub/ipv6_stub.c @@ -0,0 +1,99 @@ +/* + * Copyright (c) 2013-2015 ARM Limited. All rights reserved. + */ + +#include "config.h" +#define _HAVE_IPV6 + +#ifdef _HAVE_IPV6 + +#include "ns_types.h" +#include "string.h" +#include "nsdynmemLIB.h" +#include "Core/include/socket.h" +#include "ns_trace.h" +#include "NWK_INTERFACE/Include/protocol.h" +#include "NWK_INTERFACE/Include/protocol_stats.h" +#include "Common_Protocols/ipv6.h" +#include "Common_Protocols/ipv6_fragmentation.h" +#include "ipv6_stack/protocol_ipv6.h" +#include "ipv6_stack/ipv6_routing_table.h" +#include "Common_Protocols/icmpv6.h" +//#include "6LoWPAN/Bootstraps/network_lib.h" +//#include "6LoWPAN/Bootstraps/protocol_6lowpan.h" +#ifdef HAVE_RPL +#include "6LoWPAN/IPHC_Decode/cipv6.h" +#include "6LoWPAN/RPL/rpl.h" +#endif +#ifdef NVM_BORDER_ROUTER +#include "br_list_nvm_api.h" +#endif +#include "Service_Libs/whiteboard/whiteboard.h" +#include "common_functions.h" + +#define TRACE_GROUP_IPv6 "ipv6" + +const uint8_t MC_SITE[16] = {0xff, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfb}; +const uint8_t MC_LOCAL[16] = {0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfb}; + +bool ipv6_new_layers_for_unicast; +bool ipv6_new_layers_for_lowpan_multicast; +bool ipv6_new_layers_for_ethernet_multicast; + +bool ipv6_use_new_layers(buffer_t *buf, bool multicast) +{ + return false; +} + +buffer_routing_info_t *ipv6_buffer_route(buffer_t *buf) +{ + return NULL; +} + +buffer_t *ipv6_down(buffer_t *buf) +{ + return NULL; +} + +buffer_t *ipv6_up(buffer_t *buf) +{ + return NULL; +} + +uint16_t ipv6_header_size_required(buffer_t *buf) +{ + return 0; +} + +uint16_t ipv6_max_unfragmented_payload(buffer_t *buf, uint16_t mtu_limit) +{ + return 0; +} + +uint16_t ipv6_mtu(buffer_t *buf) +{ + return 0; +} + +buffer_t *ipv6_down_new(buffer_t *buf) +{ + return NULL; +} + +buffer_t *ipv6_forwarding_down(buffer_t *buf) +{ + return NULL; +} + +buffer_t *ipv6_consider_forwarding_received_packet(buffer_t *buf, protocol_interface_info_entry_t *cur, const sockaddr_t *ll_src) +{ + return NULL; +} + +buffer_t *ipv6_forwarding_up(buffer_t *buf) +{ + return NULL; +} + +#endif /* _HAVE_IPV6 */ + diff --git a/test/coap-service/unittest/stub/libDHCPv6_server_stub.c b/test/coap-service/unittest/stub/libDHCPv6_server_stub.c new file mode 100644 index 0000000000..1e6b5effce --- /dev/null +++ b/test/coap-service/unittest/stub/libDHCPv6_server_stub.c @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2014-2015 ARM Limited. All rights reserved. + */ + + +#include +#include +#include +#include "libDHCPv6/libDHCPv6_server.h" +#include "libDHCPv6/libDHCPv6.h" +#include "common_functions.h" +#include "platform/ns_debug.h" + +void libdhcpv6_gua_servers_time_update(uint32_t timeUpdateInSeconds) +{ +} + +dhcpv6_gua_server_entry_s *libdhcpv6_server_data_get_by_prefix_and_interfaceid(int8_t interfaceId, const uint8_t *prefixPtr) +{ + return NULL; +} + +dhcpv6_gua_server_entry_s *libdhcpv6_server_data_get_by_prefix_and_socketinstance(uint16_t socketInstance, uint8_t *prefixPtr) +{ + return NULL; +} + + +dhcpv6_gua_server_entry_s *libdhcpv6_gua_server_allocate(uint8_t *prefix, int8_t interfaceId, uint8_t *serverDUID, uint16_t serverDUIDType, dhcp_address_prefer_timeout_cb *prefered_timeout_cb) +{ + return NULL; +} + +void libdhcpv6_gua_server_free_by_prefix_and_interfaceid(uint8_t *prefix, int8_t interfaceId) +{ +} + +void libdhcpv6_gua_server_free_by_interfaceid(int8_t interfaceId) +{ +} + +dhcpv6_alloacted_address_entry_t *libdhcpv6_address_entry_allocate(uint32_t validLifetime) +{ + return NULL; +} + +dhcpv6_alloacted_address_entry_t *libdhcpv6_address_get_from_allocated_list(dhcpv6_gua_server_entry_s *serverInfo, const uint8_t *address) +{ + return NULL; +} + +dhcpv6_alloacted_address_entry_t *libdhcpv6_address_allocated_list_scan(dhcpv6_gua_server_entry_s *serverInfo, uint8_t *linkId, uint16_t linkType, uint32_t iaID, uint32_t T0, uint32_t T1, bool allocateNew) +{ + return NULL; +} + diff --git a/test/coap-service/unittest/stub/libDHCPv6_stub.c b/test/coap-service/unittest/stub/libDHCPv6_stub.c new file mode 100644 index 0000000000..b653563ec6 --- /dev/null +++ b/test/coap-service/unittest/stub/libDHCPv6_stub.c @@ -0,0 +1,212 @@ +/* + * Copyright (c) 2014-2015 ARM Limited. All rights reserved. + */ + +#include "config.h" +#include +#include +#include "common_functions.h" +#include "libDHCPv6/libDHCPv6.h" +#include "randLIB.h" +#include "nsdynmemLIB.h" + + + +uint32_t libdhcpv6_txid_get(void) +{ + return 0; +} + +uint32_t libdhcpv6_renew_time_define(dhcpv6_client_server_data_t *addresInfo) +{ + return 0; +} + +dhcpv6_client_server_data_t *libdhcvp6_nontemporalAddress_server_data_allocate(int8_t interfaceId, uint8_t instanceId, uint8_t *duiId, uint16_t duiLinkType, uint8_t *nonTemporalPrefix, uint8_t *serverIPv6Address) +{ + return NULL; +} + +void libdhcvp6_nontemporalAddress_server_data_free(dhcpv6_client_server_data_t *removedEntry) +{ +} + +dhcpv6_client_server_data_t *libdhcpv6_nonTemporal_entry_get_by_instance(uint8_t instanceId) +{ + return NULL; +} +uint8_t libdhcpv6_nonTemporal_entry_get_unique_instance_id(void) +{ + return 0; +} + +dhcpv6_client_server_data_t *libdhcpv6_nonTemporal_entry_get_by_iaid(uint32_t iaId) +{ + return NULL; +} + +dhcpv6_client_server_data_t *libdhcpv6_nonTemporal_entry_get_by_transactionId(uint32_t txId) +{ + return NULL; +} + +dhcpv6_client_server_data_t *libdhcpv6_nonTemporal_entry_get_by_prefix(int8_t interfaceId, uint8_t *prefix) +{ + return NULL; +} + +uint16_t libdhcpv6_duid_option_size(uint16_t linkType) +{ + return 0; +} + +uint16_t libdhcpv6_client_data_option_size(uint16_t linkType) +{ + return 0; +} + +uint16_t libdhcvp6_request_option_size(uint8_t optionCnt) +{ + return 0; +} + +uint16_t libdhcpv6_non_temporal_address_size(bool addressDefined) +{ + return 0; +} + +int libdhcpv6_message_malformed_check(uint8_t *ptr, uint16_t data_len) +{ + return 0; +} + +uint8_t *libdhcpv6_header_write(uint8_t *ptr, uint8_t msgType, uint32_t transActionId) +{ + return NULL; +} + +uint8_t *libdhcpv6_elapsed_time_option_write(uint8_t *ptr, uint16_t elapsedTime) +{ + return NULL; +} + +uint8_t *libdhcpv6_rapid_commit_option_write(uint8_t *ptr) +{ + return NULL; +} + +uint8_t *libdhcvp6_vendor_specific_option_write(uint8_t *ptr, uint8_t *data, uint16_t dataLength) +{ + return NULL; +} + +uint8_t *libdhcvp6_request_option_write(uint8_t *ptr, uint8_t optionCnt, uint16_t *optionPtr) +{ + return NULL; +} + +uint8_t *libdhcpv6_duid_option_write(uint8_t *ptr, uint16_t duidRole, const dhcp_link_options_params_t *duid) +{ + return NULL; +} + +uint8_t *libdhcpv6_prefix_delegation_info_option_write(uint8_t *ptr, uint32_t iaId) +{ + return NULL; +} + +uint8_t *libdhcpv6_identity_association_option_write(uint8_t *ptr, uint32_t iaID, uint32_t TimerT1, uint32_t TimerT2, bool withAddress) +{ + return NULL; +} + +uint8_t *libdhcpv6_ia_address_option_write(uint8_t *ptr, const uint8_t *addressPtr, uint32_t preferredValidLifeTime, uint32_t validLifeTime) +{ + return NULL; +} + +uint8_t *libdhcpv6_status_code_write(uint8_t *ptr, uint16_t statusCode) +{ + return NULL; +} + +uint8_t *libdhcpv6_client_last_transaction_time_option_write(uint8_t *ptr, uint32_t last_transaction_Time) +{ + return NULL; +} + +int libdhcpv6_message_option_discover(uint8_t *ptr, uint16_t data_len, uint16_t discovered_type, dhcp_options_msg_t *option_info) +{ + return -1; +} + +int libdhcpv6_compare_DUID(dhcp_link_options_params_t *targetId, dhcp_link_options_params_t *parsedId) +{ + return -1; +} + +int libdhcpv6_reply_message_option_validate(dhcp_link_options_params_t *clientId, dhcp_link_options_params_t *serverId, dhcp_ia_non_temporal_params_t *dhcp_ia_non_temporal_params, uint8_t *ptr, uint16_t data_length) +{ + return 0; +} + +int libdhcpv6_advertisment_message_option_validate(dhcp_link_options_params_t *clientId, dhcp_link_options_params_t *serverId, dhcp_ia_non_temporal_params_t *dhcp_ia_non_temporal_params, uint8_t *ptr, uint16_t data_length) +{ + return 0; +} + +int libdhcpv6_renew_message_options_validate(uint8_t *ptr, uint16_t data_length, dhcp_link_options_params_t *clientLinkData, dhcp_link_options_params_t *serverLinkData, dhcp_ia_non_temporal_params_t *dhcp_ia_non_temporal_params) +{ + return 0; +} + +int libdhcpv6_solication_message_options_validate(uint8_t *ptr, uint16_t data_length, dhcp_link_options_params_t *clientLink, dhcp_ia_non_temporal_params_t *dhcp_ia_non_temporal_params) +{ + return 0; +} + +bool libdhcpv6_time_elapsed_option_at_packet(uint8_t *ptr, uint16_t length) +{ + return false; +} + +bool libdhcpv6_rapid_commit_option_at_packet(uint8_t *ptr, uint16_t length) +{ + return false; +} + +int libdhcpv6_get_duid_by_selected_type_id_opt(uint8_t *ptr, uint16_t data_length, uint16_t type , dhcp_link_options_params_t *params) +{ + return -1; +} + +int libdhcpv6_get_IA_address(uint8_t *ptr, uint16_t data_length, dhcp_ia_non_temporal_params_t *params) +{ + return -1; +} + +uint16_t libdhcpv6_address_request_message_len(uint16_t clientLinkType, uint16_t serverLinkType, uint8_t requstOptionCnt) +{ + return 0; +} + +uint16_t libdhcpv6_address_reply_message_len(uint16_t clientLinkType, uint16_t serverLinkType, uint16_t vendorDataLen, bool rapidCommon, bool status) +{ + return 0; +} + +uint8_t *libdhcpv6_generic_nontemporal_address_message_write(uint8_t *ptr, dhcpv6_solication_base_packet_s *packet, dhcpv6_ia_non_temporal_address_s *nonTemporalAddress, dhcp_link_options_params_t *serverLink) +{ + return NULL; +} + +uint8_t *libdhcpv6_reply_message_write(uint8_t *ptr, dhcpv6_reply_packet_s *replyPacket, dhcpv6_ia_non_temporal_address_s *nonTemporalAddress, dhcpv6_vendor_data_packet_s *vendorData) +{ + return NULL; +} + +uint16_t libdhcpv6_solication_message_length(uint16_t clientLinkType, bool addressDefined, uint8_t requestOptionCount) +{ + return 0; +} + diff --git a/test/coap-service/unittest/stub/lowpan_context_stub.c b/test/coap-service/unittest/stub/lowpan_context_stub.c new file mode 100644 index 0000000000..7e20e97e5f --- /dev/null +++ b/test/coap-service/unittest/stub/lowpan_context_stub.c @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2015 ARM Limited. All rights reserved. + */ + +#include "config.h" +#include "string.h" +#include "ns_types.h" +#include "ns_trace.h" +#include "nsdynmemLIB.h" +#include "ns_list.h" +#include "6LoWPAN/IPHC_Decode/lowpan_context.h" +#include "common_functions.h" + +#define TRACE_GROUP_LOWPAN_CONTEXT "lCon" + +lowpan_context_t *lowpan_contex_get_by_id(lowpan_context_list_t *list, uint8_t id) +{ + return NULL; +} + +lowpan_context_t *lowpan_context_get_by_address(lowpan_context_list_t *list, const uint8_t *ipv6Address) +{ + return NULL; +} + + +int_fast8_t lowpan_context_update(lowpan_context_list_t *list, uint8_t cid_flags, uint16_t lifetime, const uint8_t *prefix, uint_fast8_t len) +{ + return 0; +} + +void lowpan_context_list_free(lowpan_context_list_t *list) +{ +} + +void lowpan_context_timer(lowpan_context_list_t *list, uint_fast16_t ticks) +{ +} + diff --git a/test/coap-service/unittest/stub/mac_data_poll_stub.c b/test/coap-service/unittest/stub/mac_data_poll_stub.c new file mode 100644 index 0000000000..c0d561ae91 --- /dev/null +++ b/test/coap-service/unittest/stub/mac_data_poll_stub.c @@ -0,0 +1,84 @@ +/* + * Copyright (c) 2015 ARM Limited. All rights reserved. + */ + +#include +#include "NWK_INTERFACE/Include/protocol.h" +#include "MAC/IEEE802_15_4/mac_data_poll.h" + + + +nwk_rfd_poll_setups_s *mac_data_poll_get_polling_info(struct protocol_interface_info_entry *cur) +{ + return NULL; +} + +void mac_data_poll_polltimer_set(struct protocol_interface_rf_mac_setup *rf_mac_setup, uint32_t slots) +{ + +} + +void mac_data_poll_init_protocol_poll(struct protocol_interface_info_entry *cur, uint8_t set_protocol_poll_active) +{ + +} + +uint32_t mac_data_poll_host_poll_time_max(struct protocol_interface_info_entry *cur) +{ + return 0; +} + +void mac_data_poll_protocol_poll_mode_decrement(struct protocol_interface_info_entry *cur) +{ + +} + +void mac_data_poll_protocol_poll_mode_disable(struct protocol_interface_info_entry *cur, uint8_t re_req) +{ + +} + +void mac_data_poll_enable_check(struct protocol_interface_info_entry *cur) +{ + +} + +int8_t mac_data_poll_host_mode_get(struct protocol_interface_info_entry *cur, net_host_mode_t *mode) +{ + return 0; +} + +void mac_data_poll_poll_done(void *cur, mac_event_t result, uint8_t *addr, addrtype_t type) +{ + +} + +void mac_data_poll_cb_run(struct protocol_interface_info_entry *cur) +{ + +} + +int8_t mac_data_poll_host_mode_set(struct protocol_interface_info_entry *cur, net_host_mode_t mode, uint32_t poll_time) +{ + return 0; +} + +void mac_data_poll_init(struct protocol_interface_info_entry *cur) +{ + +} + +void mac_data_poll_radio_disable_check(struct protocol_interface_info_entry *cur) +{ + +} + +uint32_t mac_data_poll_get_max_sleep_period(struct protocol_interface_info_entry *cur) +{ + return 0; +} + +uint32_t mac_data_poll_host_timeout(protocol_interface_info_entry_t *cur) +{ + return 0; +} diff --git a/test/coap-service/unittest/stub/mac_mlme_stub.c b/test/coap-service/unittest/stub/mac_mlme_stub.c new file mode 100644 index 0000000000..f76075c001 --- /dev/null +++ b/test/coap-service/unittest/stub/mac_mlme_stub.c @@ -0,0 +1,221 @@ +/* + * Copyright (c) 2015 ARM Limited. All rights reserved. + */ + +#include "config.h" +#include +#include "ns_types.h" +#include "eventOS_event.h" +#include "eventOS_scheduler.h" +#include "eventOS_callback_timer.h" +#include "ns_trace.h" +#include "nsdynmemLIB.h" +#include "NWK_INTERFACE/Include/protocol.h" +#include "NWK_INTERFACE/Include/protocol_timer.h" +#include "MAC/IEEE802_15_4/mac_data_interface.h" +#include "MAC/IEEE802_15_4/mac_data_poll.h" +#include "MAC/IEEE802_15_4/mac_indirect_data.h" +#include "MAC/IEEE802_15_4/mac_security_interface.h" +#include "MAC/IEEE802_15_4/mac_mlme.h" +#include "MAC/IEEE802_15_4/mac_timer.h" +#include "platform/arm_hal_interrupt.h" +#include "6LoWPAN/Thread/thread.h" +#include "6LoWPAN/Thread/thread_bootstrap.h" +#include "common_functions.h" + +int8_t mac_mlme_scan_requet(mac_scan_type_t type, protocol_interface_info_entry_t *interface_ptr) +{ + return -1; +} + +void mac_mlme_energy_scan(void (*passed_fptr)(uint8_t *), protocol_interface_info_entry_t *cur) +{ +} + +int8_t mac_mlme_active_scan_req(struct protocol_interface_info_entry *cur, channel_list_s *scan_list, void (*passed_fptr)(uint8_t *)) +{ + return -1; +} + +void mac_mlme_active_scan(void (*passed_fptr)(uint8_t *), protocol_interface_info_entry_t *cur) +{ +} + +void mac_mlme_free_scan_confirm(nwk_scan_params_s *params) +{ +} + + +void mac_mlme_start_req(mlme_start_t *s, protocol_interface_info_entry_t *cur) +{ +} + +void mac_mlme_cmd_frame_handle(buffer_t *buf) +{ +} + +void mac_mlme_active_scan_response_timer_start(void *interface) +{ +} + +void mac_mlme_timers_disbale(protocol_interface_rf_mac_setup_s *rf_ptr) +{ +} + +void mac_mlme_message_handler(arm_event_s *event) +{ +} + +void mac_mlme_event_cb(uint8_t event) +{ +} + +void mac_mlme_timer_cb(int8_t timer_id, uint16_t slots) +{ +} + +void mac_mlme_free_sacn_temporary_data(protocol_interface_rf_mac_setup_s *rf_mac_setup) +{ +} + +nwk_pan_descriptor_t *mac_mlme_free_pan_descriptions(nwk_pan_descriptor_t *nwk_cur_active) +{ + return NULL; +} + +int mac_mlme_data_base_allocate(protocol_interface_info_entry_t *entry) +{ + return -1; +} + +int8_t mac_mlme_nwk_id_filter_set(const uint8_t *nw_id, nwk_filter_params_s *filter) +{ + return -1; +} + +uint8_t mac_mlme_set_new_sqn(protocol_interface_rf_mac_setup_s *rf_setup) +{ + return 0; +} + +int8_t mac_mlme_set_panid(protocol_interface_info_entry_t *cur, uint16_t pan_id) +{ + return -1; +} + +int8_t mac_mlme_set_mac16(protocol_interface_info_entry_t *cur, uint16_t mac16) +{ + return -1; +} + +int8_t mac_mlme_reset_mac16(protocol_interface_info_entry_t *cur) +{ + return -1; +} + +void mac_mlme_write_mac64(protocol_interface_info_entry_t *cur, uint8_t *addrPtr) +{ +} + +bool mac_mlme_write_mac16(struct protocol_interface_rf_mac_setup *rf_setup, uint8_t *addrPtr) +{ + return false; +} + +bool mac_mlme_write_panid(struct protocol_interface_rf_mac_setup *rf_setup, uint8_t *addrPtr) +{ + return false; +} + +uint16_t mac_mlme_get_panid(protocol_interface_rf_mac_setup_s *rf_setup) +{ + return 0; +} + +uint16_t mac_mlme_get_mac16(protocol_interface_rf_mac_setup_s *rf_setup) +{ + return 0; +} + +void mac_mlme_soft_set_mac16(protocol_interface_rf_mac_setup_s *rf_setup, uint16_t shotAddress) +{ +} + +bool mac_mlme_write_our_addr(struct protocol_interface_info_entry *cur, sockaddr_t *sockaddr) +{ + return false; +} + + +void mac_mlme_write_mac64_by_interface_type(nwk_interface_id nwk_id, uint8_t *addrPtr) +{ +} + +int mac_mlme_beacon_notify(nwk_pan_descriptor_t *description, struct nwk_scan_params *scan_params) +{ +} + +uint8_t *mac_mlme_beacon_payload_allocate(protocol_interface_rf_mac_setup_s *rf_mac_setup, uint8_t len) +{ + return 0; +} + +uint8_t *mac_mlme_beacon_palyaod_ptr_get(protocol_interface_rf_mac_setup_s *rf_mac_setup) +{ + return NULL; +} + +nwk_pan_descriptor_t *mac_mlme_select_best_lqi(nwk_pan_descriptor_t *list) +{ + return NULL; +} + +void mac_mlme_drop_selected_from_the_scanresult(nwk_scan_params_s *scanParams, nwk_pan_descriptor_t *selected) +{ +} + +void mac_mlme_scan_confirmation_handle(mlme_scan_conf_t *r, protocol_interface_info_entry_t *cur_interface) +{ +} + +void mac_mlme_mac_halt(protocol_interface_info_entry_t *cur) +{ +} + +void mac_mle_mac_radio_enable(protocol_interface_info_entry_t *cur) +{ +} + +void mac_mlme_mac_wake_up(protocol_interface_info_entry_t *cur) +{ +} + + +int8_t mac_mlme_rf_disable(protocol_interface_info_entry_t *cur) +{ + return -1; +} + +void mac_mlme_rf_receiver_enable(protocol_interface_info_entry_t *cur) +{ +} + +int8_t mac_mlme_rf_channel_set(protocol_interface_info_entry_t *cur, uint8_t new_channel) +{ + return -1; +} + +int8_t mac_mlme_set_cordinator_address(protocol_interface_rf_mac_setup_s *rf_mac_setup, addrtype_t adr_type, uint8_t *adr_ptr) +{ + return -1; +} + +int8_t mac_mlme_get_cordinator_address(protocol_interface_rf_mac_setup_s *rf_mac_setup, addrtype_t *adr_type, uint8_t *adr_ptr) +{ + return -1; +} + +nwk_scan_params_s *mac_mlme_get_scan_params(protocol_interface_info_entry_t *interface) +{ + return NULL; +} diff --git a/test/coap-service/unittest/stub/mac_pairwise_key_stub.c b/test/coap-service/unittest/stub/mac_pairwise_key_stub.c new file mode 100644 index 0000000000..692320310d --- /dev/null +++ b/test/coap-service/unittest/stub/mac_pairwise_key_stub.c @@ -0,0 +1,78 @@ +/* + * Copyright (c) 2015 ARM Limited. All rights reserved. + */ + + +#include "config.h" +#include +#include "ns_types.h" +#include "ns_trace.h" +#include "nsdynmemLIB.h" +#include "Core/include/address.h" +#include "MAC/IEEE802_15_4/mac_pairwise_key.h" + +#define TRACE_GROUP "mPKe" + +typedef NS_LIST_HEAD(mac_pairwise_key_entry_t, link) mac_pairwise_key_list_t; + +typedef struct mac_pairwise_interface_entry { + int8_t interfaceId; + mac_pairwise_key_list_t keyList; + ns_list_link_t link; /*!< List link entry */ +} mac_pairwise_interface_entry_t; + +mac_pairwise_interface_entry_t *mac_pairwise_key_list_allocate(int8_t interfaceId) +{ + return NULL; +} + +mac_pairwise_key_entry_t *mac_pairwise_key_entry_allocate(const uint8_t *eui64) +{ + return NULL; +} + +mac_pairwise_key_entry_t *mac_pairwise_key_entry_get(mac_pairwise_key_list_t *list, const uint8_t *eui64, bool Allocate) +{ + return NULL; +} + +mac_pairwise_interface_entry_t *mac_pairwise_key_main_class(int8_t interfaceId, bool Allocate) +{ + return NULL; +} + + + +int mac_pairwise_key_add(int8_t interface_id, uint32_t valid_life_time, const uint8_t eui64[static 8], const uint8_t key[static 16]) +{ + return 0; + +} + +int mac_pairwise_key_del(int8_t interface_id, const uint8_t eui64[static 8]) +{ + return 0; +} + + +int mac_pairwise_key_flush_list(int8_t interface_id) +{ + return 0; +} + + +mac_pairwise_key_entry_t *mac_pairwise_key_get_key(int8_t interface_id, const uint8_t *address, uint16_t panId, uint8_t addressType) +{ + return NULL; +} + +bool mac_pairwise_key_framecounter_validation(mac_pairwise_key_entry_t *keyEntry, uint32_t frameCounter) +{ + return false; +} + +void mac_pairwise_key_framecounter_update(mac_pairwise_key_entry_t *keyEntry, uint32_t frameCounter) +{ +} + + diff --git a/test/coap-service/unittest/stub/mac_security_interface_stub.c b/test/coap-service/unittest/stub/mac_security_interface_stub.c new file mode 100644 index 0000000000..0fab0aaa85 --- /dev/null +++ b/test/coap-service/unittest/stub/mac_security_interface_stub.c @@ -0,0 +1,106 @@ +/* + * Copyright (c) 2015 ARM Limited. All rights reserved. + */ + +#include "config.h" +#include "ns_types.h" +#include "eventOS_event.h" +#include "string.h" +#include "ns_trace.h" +#include "NWK_INTERFACE/Include/protocol.h" +#include "ccmLIB.h" +#include "MAC/IEEE802_15_4/mac_security_interface.h" +#include "NWK_INTERFACE/Include/protocol_stats.h" +#include "common_functions.h" +#include "6LoWPAN/Thread/thread.h" +#include "6LoWPAN/Thread/thread_management_internal.h" +#ifndef NO_MLE +#include "MLE/mle.h" +#endif + +#define TRACE_GROUP_MAC_SECURITY "mSec" + +int8_t mac_security_interface_link_frame_counter_reset(int8_t interface_id) +{ + return -1; +} + +int8_t mac_security_interface_link_security_level_set(int8_t interface_id , uint8_t sec_level) +{ + return -1; +} +uint8_t mac_security_interface_link_security_level_get_by_ptr(int8_t interface_id) +{ + return 0; +} + +int8_t mac_security_interface_link_frame_conter_read(int8_t interface_id, uint32_t *seq_ptr, uint8_t update_to_next) +{ + return -1; +} + +int8_t mac_securityinterface_trig_pending_key(int8_t interface_id) +{ + return -1; +} + +uint8_t *mac_security_interface_link_security_key_get_by_id(int8_t interface_id, uint8_t key_id) +{ + return NULL; +} + +int8_t mac_security_interface_key_update_trig(int8_t interface_id) +{ + return -1; +} + +int8_t mac_security_interface_mac_key_update(int8_t interface_id, uint8_t *key, uint8_t id, bool primary, uint8_t auth_cnt) +{ + return -1; +} + +uint8_t mac_security_interface_security_aux_header_len(int8_t interface_id) +{ + return 0; +} + +uint8_t mac_security_interface_current_security_key_id_get(int8_t interface_id) +{ + return 0; +} + +int8_t mac_security_interface_security_key_reset(int8_t interface_id) +{ + return -1; +} + +uint8_t mac_security_interface_aux_security_header_size(uint8_t keyIdMode) +{ + return 0; +} + +void mac_security_interface_aux_ccm_nonce_set(uint8_t *noncePtr, uint8_t *mac64, uint32_t securityFrameCounter, uint8_t securityLevel) +{ +} + +uint8_t *mac_security_interface_aux_security_header_write(uint8_t *ptr, const mac_aux_security_header_t *auxHeader) +{ + return NULL; +} + +/* Compare two security levels, as per 802.15.4-2011 7.4.1.1 */ +/* Returns true if sec1 is at least as secure as sec2 */ +bool mac_security_interface_security_level_compare(uint8_t sec1, uint8_t sec2) +{ + return false; +} + +buffer_t *mac_security_interface_aux_header_parse(buffer_t *b, mac_aux_security_header_t *auxSecHeader) +{ + return NULL; +} + +uint8_t mac_security_interface_link_security_level_get(int8_t interface_id) +{ + return 0; +} diff --git a/test/coap-service/unittest/stub/mbedtls_stub.c b/test/coap-service/unittest/stub/mbedtls_stub.c new file mode 100644 index 0000000000..ab5afa27ba --- /dev/null +++ b/test/coap-service/unittest/stub/mbedtls_stub.c @@ -0,0 +1,310 @@ +/* + * Copyright (c) 2015 ARM Limited. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 + * 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 "mbedtls_stub.h" + +mbedtls_stub_def mbedtls_stub; + +//From ssl.h +int mbedtls_ssl_handshake_step( mbedtls_ssl_context *ssl ) +{ + if( mbedtls_stub.useCounter ){ + if( mbedtls_stub.retArray[mbedtls_stub.counter] == HANDSHAKE_FINISHED_VALUE){ + ssl->state = MBEDTLS_SSL_HANDSHAKE_OVER; + } + return mbedtls_stub.retArray[mbedtls_stub.counter++]; + } + return mbedtls_stub.expected_int; +} + +int mbedtls_ssl_close_notify( mbedtls_ssl_context *a ) +{ + if( mbedtls_stub.useCounter ){ + return mbedtls_stub.retArray[mbedtls_stub.counter++]; + } + return mbedtls_stub.expected_int; +} + +void mbedtls_ssl_init( mbedtls_ssl_context *a ){ + +} + +void mbedtls_ssl_config_init( mbedtls_ssl_config *a ){ + +} + +void mbedtls_ssl_conf_handshake_timeout( mbedtls_ssl_config *a, uint32_t b, uint32_t c) +{ + +} + +void mbedtls_ssl_free( mbedtls_ssl_context *a ){ + +} + +int mbedtls_ssl_conf_own_cert( mbedtls_ssl_config *a, + mbedtls_x509_crt *b, + mbedtls_pk_context *c ){ + if( mbedtls_stub.useCounter ){ + return mbedtls_stub.retArray[mbedtls_stub.counter++]; + } + return mbedtls_stub.expected_int; +} + +void mbedtls_ssl_conf_authmode( mbedtls_ssl_config *a, int c ){ + +} + +void mbedtls_ssl_conf_ca_chain( mbedtls_ssl_config *a, + mbedtls_x509_crt *b, + mbedtls_x509_crl *c ){ + +} + +int mbedtls_ssl_conf_psk( mbedtls_ssl_config *a, + const unsigned char *b, size_t c, + const unsigned char *d, size_t e ){ + if( mbedtls_stub.useCounter ){ + return mbedtls_stub.retArray[mbedtls_stub.counter++]; + } + return mbedtls_stub.expected_int; +} + +int mbedtls_ssl_config_defaults( mbedtls_ssl_config *a, + int b, int c, int d){ + if( mbedtls_stub.useCounter ){ + return mbedtls_stub.retArray[mbedtls_stub.counter++]; + } + return mbedtls_stub.expected_int; +} + +void mbedtls_ssl_conf_rng( mbedtls_ssl_config *a, + int (*f_rng)(void *, unsigned char *, size_t), + void *b ){ + +} + +void mbedtls_ssl_conf_ciphersuites( mbedtls_ssl_config *a, + const int *b) +{ + +} + +int mbedtls_ssl_setup( mbedtls_ssl_context *a, + const mbedtls_ssl_config *b ){ + if( mbedtls_stub.useCounter ){ + return mbedtls_stub.retArray[mbedtls_stub.counter++]; + } + return mbedtls_stub.expected_int; +} + +void mbedtls_ssl_set_bio( mbedtls_ssl_context *ssl, + void *p_bio, + int (*f_send)(void *, const unsigned char *, size_t), + int (*f_recv)(void *, unsigned char *, size_t), + int (*f_recv_timeout)(void *, unsigned char *, size_t, uint32_t) ){ + if( p_bio != NULL ){ + if( f_send ) + f_send( p_bio, NULL, 0 ); + if( f_recv ) + f_recv( p_bio, NULL, 0 ); + if( f_recv_timeout ) + f_recv_timeout( p_bio, NULL, 0, 0 ); + } +} + +void mbedtls_ssl_set_timer_cb( mbedtls_ssl_context *a, + void *ctx, + void (*f_set_timer)(void *, uint32_t int_ms, uint32_t fin_ms), + int (*f_get_timer)(void *) ){ + f_set_timer(ctx, 1, 2); + f_get_timer(ctx); + if(mbedtls_stub.invalidate_timer){ + f_set_timer(ctx, 0, 0); + } + f_get_timer(ctx); +} + +int mbedtls_ssl_handshake( mbedtls_ssl_context *ssl ){ + if( mbedtls_stub.useCounter ){ + return mbedtls_stub.retArray[mbedtls_stub.counter++]; + } + return mbedtls_stub.expected_int; +} + +uint32_t mbedtls_ssl_get_verify_result( const mbedtls_ssl_context *a ){ + return mbedtls_stub.uint32_value; +} + +int mbedtls_ssl_read( mbedtls_ssl_context *a, unsigned char *b, size_t c){ + if( mbedtls_stub.useCounter ){ + return mbedtls_stub.retArray[mbedtls_stub.counter++]; + } + return mbedtls_stub.expected_int; +} + +int mbedtls_ssl_write( mbedtls_ssl_context *a, const unsigned char *b, size_t c ){ + if( mbedtls_stub.useCounter ){ + return mbedtls_stub.retArray[mbedtls_stub.counter++]; + } + return mbedtls_stub.expected_int; +} + + + +//From crt_drbg.h +int mbedtls_ctr_drbg_seed( mbedtls_ctr_drbg_context *a, + int (*f_entropy)(void *, unsigned char *, size_t), + void *b, + const unsigned char *c, + size_t d ){ + return mbedtls_stub.crt_expected_int; +} + +void mbedtls_ctr_drbg_init( mbedtls_ctr_drbg_context *a ){ + +} + +void mbedtls_ctr_drbg_free( mbedtls_ctr_drbg_context *a ){ + +} + +int mbedtls_ctr_drbg_random_with_add( void *a, + unsigned char *b, size_t c, + const unsigned char *d, size_t e ){ + return mbedtls_stub.crt_expected_int; +} + +int mbedtls_ctr_drbg_random( void *p_rng, + unsigned char *output, size_t output_len ){ + return mbedtls_stub.crt_expected_int; +} + +//From x509_crt.h +void mbedtls_x509_crt_init( mbedtls_x509_crt *a ){ + +} + +void mbedtls_x509_crt_free( mbedtls_x509_crt *a ){ + +} + +int mbedtls_x509_crt_parse( mbedtls_x509_crt *a, const unsigned char *b, size_t c ){ + if( mbedtls_stub.useCounter ){ + return mbedtls_stub.retArray[mbedtls_stub.counter++]; + } + return mbedtls_stub.expected_int; +} + +//From entropy.h +void mbedtls_entropy_init( mbedtls_entropy_context *a ){ + +} + +void mbedtls_entropy_free( mbedtls_entropy_context *ctx ){ + +} + +int mbedtls_entropy_func( void *a, unsigned char *b, size_t c ){ + if( mbedtls_stub.useCounter ){ + return mbedtls_stub.retArray[mbedtls_stub.counter++]; + } + return mbedtls_stub.expected_int; +} + +int mbedtls_entropy_add_source( mbedtls_entropy_context *a, + mbedtls_entropy_f_source_ptr f_source, void *b, + size_t c, int d ){ + unsigned char buf[2]; + size_t len; + f_source(NULL, buf, 1, &len); + + if( mbedtls_stub.useCounter ){ + return mbedtls_stub.retArray[mbedtls_stub.counter++]; + } + return mbedtls_stub.expected_int; +} + +//From pk.h +int mbedtls_pk_parse_key( mbedtls_pk_context *a, + const unsigned char *b, size_t c, + const unsigned char *d, size_t e ){ + if( mbedtls_stub.useCounter ){ + return mbedtls_stub.retArray[mbedtls_stub.counter++]; + } + return mbedtls_stub.expected_int; +} + +void mbedtls_pk_init( mbedtls_pk_context *ctx ) +{ + +} + +void mbedtls_pk_free( mbedtls_pk_context *ctx ) +{ + +} + +void mbedtls_ssl_config_free( mbedtls_ssl_config *a) +{ + +} + +int mbedtls_ssl_set_hs_ecjpake_password( mbedtls_ssl_context *ssl, + const unsigned char *pw, + size_t pw_len ) +{ + if( mbedtls_stub.useCounter ){ + return mbedtls_stub.retArray[mbedtls_stub.counter++]; + } + return mbedtls_stub.expected_int; +} + +void mbedtls_ssl_conf_dtls_cookies( mbedtls_ssl_config *conf, + mbedtls_ssl_cookie_write_t *f_cookie_write, + mbedtls_ssl_cookie_check_t *f_cookie_check, + void *p_cookie ) +{ + if( mbedtls_stub.cookie_obj && f_cookie_check && mbedtls_stub.cookie_len > 0 ){ + f_cookie_check(mbedtls_stub.cookie_obj, &mbedtls_stub.cookie_value, mbedtls_stub.cookie_len, NULL, 0); + } + if( mbedtls_stub.cookie_obj && f_cookie_write && mbedtls_stub.cookie_len > 0 ){ + unsigned char out[16]; + unsigned char *ptr = &out; + f_cookie_write(mbedtls_stub.cookie_obj, &ptr, ptr+mbedtls_stub.cookie_len, NULL, 0); + } +} + +void mbedtls_ssl_conf_export_keys_cb( mbedtls_ssl_config *conf, + mbedtls_ssl_export_keys_t *f_export_keys, + void *p_export_keys ) +{ + if( f_export_keys && p_export_keys){ + unsigned char value[40]; + memset(&value, 1, 40); + f_export_keys(p_export_keys, &value, "", 0, 0,0); //failure case + + f_export_keys(p_export_keys, &value, "", 0, 20,0); //success case + } +} + +int mbedtls_ssl_session_reset( mbedtls_ssl_context *ssl ) +{ + if( mbedtls_stub.useCounter ){ + return mbedtls_stub.retArray[mbedtls_stub.counter++]; + } + return mbedtls_stub.expected_int; +} diff --git a/test/coap-service/unittest/stub/mbedtls_stub.h b/test/coap-service/unittest/stub/mbedtls_stub.h new file mode 100644 index 0000000000..a0afdd3dda --- /dev/null +++ b/test/coap-service/unittest/stub/mbedtls_stub.h @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2015 ARM Limited. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 + * 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 MBEDTLS_STUB_H +#define MBEDTLS_STUB_H + +#define MBEDTLS_SSL_EXPORT_KEYS + +#include +#include +#include "mbedtls/ssl.h" +#include "mbedtls/ctr_drbg.h" +#include "mbedtls/x509_crt.h" +#include "mbedtls/sha256.h" +#include "mbedtls/entropy.h" +#include "mbedtls/pk.h" + + + +#define HANDSHAKE_FINISHED_VALUE 8888 + +typedef struct { + int crt_expected_int; + bool useCounter; + int counter; + int retArray[20]; + int expected_int; + uint32_t uint32_value; + bool invalidate_timer; + void *cookie_obj; + unsigned char cookie_value[8]; + size_t cookie_len; +} mbedtls_stub_def; + +extern mbedtls_stub_def mbedtls_stub; + +#endif // MBEDTLS_STUB_H diff --git a/test/coap-service/unittest/stub/mle_service_stub.c b/test/coap-service/unittest/stub/mle_service_stub.c new file mode 100644 index 0000000000..0e516a4082 --- /dev/null +++ b/test/coap-service/unittest/stub/mle_service_stub.c @@ -0,0 +1,220 @@ +/* + * Copyright (c) 2015 ARM Limited. All rights reserved. + */ + +#include "config.h" +#include +#include +#include "ns_trace.h" +#include "eventOS_event.h" +#include "eventOS_scheduler.h" +#include "eventOS_event_timer.h" +#include "nsdynmemLIB.h" +#include "ns_list.h" +#include "randLIB.h" +#include "socket_api.h" +#include "Core/include/socket.h" +#include "net_interface.h" +#include "common_functions.h" +#include "NWK_INTERFACE/Include/protocol.h" // just for protocol_core_monotonic_time +#include "MAC/IEEE802_15_4/mac_security_interface.h" +#include "Service_Libs/mle_service/mle_service_api.h" +#include "Service_Libs/mle_service/mle_service_security.h" +#include "Service_Libs/mle_service/mle_service_buffer.h" +#include "Service_Libs/mle_service/mle_service_interface.h" +#include "MLE/mle.h" +#include "MLE/mle_tlv.h" + +#define TRACE_GROUP "mleS" + +/* Fixed-point randomisation limits for randlib_randomise_base() - RFC 3315 + * says RAND is uniformly distributed between -0.1 and +0.1 + */ +#define MLE_RAND_LOW 0x7333 // 1 - 0.1; minimum for "1+RAND" +#define MLE_RAND_HIGH 0x8CCD // 1 + 0.1; maximum for "1+RAND" + +typedef struct { + int8_t mle_socket; + int8_t mle_socket_service_tasklet; + uint8_t mle_adata[46]; + uint8_t mle_adata_length; +} mle_service_class_t; + + + +/** + * MLE service transaction timeout and retry handling + */ +bool mle_service_timer_tick(uint16_t ticks) +{ + return false; + +} + +int mle_service_interface_register(int8_t interface_id, mle_service_receive_cb *receive_cb, uint8_t *mac64, uint8_t challengeLength) +{ + return 0; +} + +bool mle_service_interface_registeration_validate(int8_t interface_id) +{ + return false; +} + + +int mle_service_interface_receiver_handler_update(int8_t interface_id, mle_service_receive_cb *receive_cb) +{ + return 0; +} + +void mle_service_interface_unregister(int8_t interface_id) +{ +} + +void mle_service_interface_tx_queue_clean(int8_t interface_id) +{ +} + +uint16_t mle_service_msg_allocate(int8_t interface_id, uint16_t data_length, bool challengeAllocate, uint8_t type) +{ + return 0; +} + +uint8_t * mle_service_get_data_pointer(uint16_t msgId) +{ + return NULL; +} + +uint8_t * mle_service_get_payload_start_point(uint16_t msgId) +{ + return NULL; +} + +uint16_t mle_service_get_payload_length(uint16_t msgId) +{ + return 0; +} + +int mle_service_update_length(uint16_t msgId, uint16_t tail_length) +{ + return 0; +} + +int mle_service_update_length_by_ptr(uint16_t msgId, uint8_t *data_end_ptr) +{ + return 0; +} + +int mle_service_msg_update_security_params(uint16_t msgId, uint8_t security_level, uint8_t key_id_mode, uint32_t keysequence) +{ + return 0; +} + +int mle_service_set_packet_callback(uint16_t msgId, mle_service_message_timeout_cb *cb) +{ + return 0; +} + +int mle_service_set_msg_response_true(uint16_t msgId) +{ + return 0; +} + +uint8_t * mle_service_get_msg_destination_address_pointer(uint16_t msgId) +{ + return 0; +} + +int mle_service_set_msg_destination_address(uint16_t msgId, const uint8_t *dstAddress) +{ + return 0; +} + +int mle_service_msg_free(uint16_t msgId) +{ + return 0; +} + +bool mle_service_transaction_buffer_get_for_response(uint8_t *responseData, uint8_t length, uint16_t *msgId) +{ + return false; +} + +int mle_service_message_tail_get(uint16_t msgId, uint16_t tail_length) +{ + return 0; +} + +int mle_service_set_msg_timeout_parameters(uint16_t msgId, mle_message_timeout_params_t *timeout_params) +{ + return 0; +} + +int mle_service_send_message(uint16_t msgId) +{ + return 0; +} + +int mle_service_security_init(int8_t interfaceId, uint8_t security_level, uint32_t security_frame_counter, mle_service_key_request_by_counter_cb * key_counter_req, mle_service_security_notify_cb *notify) +{ + return 0; +} + +bool mle_service_security_set_frame_counter(int8_t interfaceId, uint32_t frame_counter) +{ + return false; +} + +uint8_t * mle_service_security_default_key_get(int8_t interfaceId) +{ + return 0; +} + +uint8_t mle_service_security_default_key_id_get(int8_t interfaceId) +{ + return 0; +} + +uint8_t * mle_service_security_next_key_get(int8_t interfaceId) +{ + return 0; +} + +uint8_t mle_service_security_next_key_id_get(int8_t interfaceId) +{ + return 0; +} + +uint8_t mle_service_security_level_get(int8_t interfaceId) +{ + return 0; +} + +bool mle_service_security_key_trig(int8_t interfaceId, uint8_t keyId) +{ + return false; + +} + +bool mle_service_security_set_security_key(int8_t interfaceId, uint8_t * security_key, uint8_t keyId, bool primary) +{ + return false; +} + + +int mle_service_reject_message_build(int8_t interfaceId, uint8_t *dstIpv6) +{ + + uint16_t buf_id = mle_service_msg_allocate(interfaceId, 32, false, MLE_COMMAND_REJECT); + if (buf_id == 0) { + return -1; + } + tr_debug("MLE Reject MSG Build"); + //SET Destination address + mle_service_set_msg_destination_address(buf_id, dstIpv6); + mle_service_send_message(buf_id); + + return 0; + + +} diff --git a/test/coap-service/unittest/stub/mle_stub.c b/test/coap-service/unittest/stub/mle_stub.c new file mode 100644 index 0000000000..3abf044d58 --- /dev/null +++ b/test/coap-service/unittest/stub/mle_stub.c @@ -0,0 +1,342 @@ +/* + * Copyright (c) 2013-2015 ARM Limited. All rights reserved. + */ + +#include "config.h" +#include "MLE/mle.h" + +#ifndef NO_MLE + +#include "ns_types.h" +#include "eventOS_event.h" +#include "eventOS_event_timer.h" +#include "socket_api.h" +#include "Core/include/socket.h" +#include "nsdynmemLIB.h" +#include "ns_trace.h" +#include "string.h" +#include "NWK_INTERFACE/Include/protocol.h" +#include "Common_Protocols/udp.h" +#include "MAC/IEEE802_15_4/mac_security_interface.h" +#include "MAC/IEEE802_15_4/mac_data_poll.h" +#include "MAC/IEEE802_15_4/mac_mlme.h" +#include "shalib.h" +#include "randLIB.h" +#ifdef NVM_BORDER_ROUTER +#include "br_list_nvm_api.h" +#endif +#include "6LoWPAN/Thread/thread_network_data_storage.h" +#include "6LoWPAN/Thread/thread_routing.h" +#include "thread_management_if.h" +#include "6LoWPAN/Thread/thread_management_internal.h" +#include "6LoWPAN/Thread/thread.h" +#include "6LoWPAN/Thread/thread_nd.h" +#include "6LoWPAN/Thread/thread_bootstrap.h" +#include "6LoWPAN/Thread/thread_joiner_application.h" +#include +#include "6LoWPAN/Bootstraps/protocol_6lowpan.h" +#include "6LoWPAN/Bootstraps/protocol_6lowpan_bootstrap.h" +#include "platform/arm_hal_interrupt.h" +#include "platform/topo_trace.h" +#include "common_functions.h" +#include "MLE/mle_tlv.h" +#include "NWK_INTERFACE/Include/protocol_timer.h" +#include "Common_Protocols/ipv6.h" + +#include "mle_stub.h" + +#define MLE_UNICAST_CHALLENGE_TIMEOUT 20 + +#define TRACE_GROUP "mle" + +mle_stub_def mle_stub; + +typedef enum { + ARM_MLE_INIT = 0, + ARM_MLE_TTL_TIMER +} arm_mle_event_id_e; + + +/** + * Generic Type/Length beader, no value + */ +typedef struct { + uint8_t type; + uint8_t length; +} mle_tlv_tl; + +/** + * Source address structure + */ +typedef struct { + uint8_t type; + uint8_t length; + uint8_t src_address[2]; +} mle_tlv_src_address_s; + +/** + * Mode structure + */ +typedef struct { + uint8_t type; + uint8_t length; + uint8_t mode; +} mle_tlv_mode_s; + +/** + * Timeout structure + */ +typedef struct { + uint8_t type; + uint8_t length; + uint8_t timeout; +} mle_tlv_timeout_s; + +/** + * Link layer frame counter structure + */ +typedef struct { + uint8_t type; + uint8_t length; + uint8_t ll_frm_counter[4]; +} mle_tlv_ll_frame_counter_s; + +/** + * MLE frame counter structure + */ +typedef struct { + uint8_t type; + uint8_t length; + uint8_t mle_frm_counter[4]; +} mle_tlv_mle_frame_counter_s; + +typedef union { + uint8_t *u8ptr; + mle_tlv_tl *tl; + mle_tlv_src_address_s *src_address; + mle_tlv_mode_s *mode; + mle_tlv_timeout_s *timeout; + mle_tlv_ll_frame_counter_s *ll_frm_counter; + mle_tlv_mle_frame_counter_s *mle_frm_counter; +} tlv_value_ptr_u; + +void mle_table_ttl(uint16_t ticks, protocol_interface_info_entry_t *cur_interface); + +NS_LARGE uint8_t mle_update_timer = 0; + +typedef struct { + uint8_t queu_update_event; + uint8_t active_params; + uint16_t pan_id; /*!< PAN-ID */ + uint32_t pan_time; + uint8_t channel; /*!< Channel */ + uint32_t chan_time; + uint8_t allow_join; /*!< Permit Join */ + uint32_t allow_time; + uint8_t *beacon_payload; + uint8_t beacon_payload_len; + uint32_t beacon_payload_delay; +} mle_nwk_param_t; + +/* removes child id when becoming router*/ +int thread_clear_child_id_by_address(protocol_interface_info_entry_t *cur, mle_neigh_table_entry_t *entry_temp); + +void mle_entry_rm(mle_neigh_table_entry_t *entry); + +#ifdef NVM_BORDER_ROUTER +uint16_t (*mle_nvm_storage_cb)(br_nvm_update_process_t) = 0; + +int8_t mle_nvm_callback_set(uint16_t (*passed_fptr)(br_nvm_update_process_t), uint8_t *nvm_static_buffer) +{ +} + + +int8_t mle_entry_store_from_nvm(const uint8_t *nvm_data) +{ + return -1; +} + + +void mle_nvm_update(mle_neigh_table_entry_t *entry, br_nvm_update_process_t event) +{ +} + +#endif + +void mle_set_max_allow_join_time(uint16_t new_max_allow_join_time) +{ +} + +int8_t arm_mle_prepare_update(int8_t nwk_id, uint8_t type, uint32_t time, uint16_t value) +{ + return 0; +} + +int8_t arm_mle_update_beacon_payload(int8_t nwk_id, uint8_t *optional_fields_data, uint8_t optional_fields_len, uint32_t delay) +{ + return 0; +} + +uint8_t mle_update_process(uint8_t event) +{ + return 0; +} + +void mle_init(void) +{ +} + +void mle_event_handler(arm_event_s *event) +{ +} + +void protocol_core_mle_init(void) +{ +} + +void mle_entry_frame_counter_update(mle_neigh_table_entry_t *entry_temp, uint32_t counter, uint8_t keyId) +{ + +} +uint8_t mle_mode_get_by_interface_ptr(protocol_interface_info_entry_t *cur) +{ + return 0; +} + +uint8_t mle_challenge(uint8_t *addr, protocol_interface_info_entry_t *cur) +{ + return 1; +} + +int mle_child_update_generation(uint8_t *parentAddress, struct protocol_interface_info_entry *cur, uint8_t mode) +{ + return 0; +} + +int8_t mle_host_link_configuration(bool rx_on_idle, protocol_interface_info_entry_t *cur) +{ + return -1; +} + +uint8_t mle_router_synch(protocol_interface_info_entry_t *cur, const uint8_t *destAddress) +{ + return 1; +} + +uint8_t mle_neigh_advertise(protocol_interface_info_entry_t *cur) +{ + return 1; +} + +uint8_t mle_reed_advertise (protocol_interface_info_entry_t *cur) +{ + return 0; +} + +int mle_attach_parent_request_build(protocol_interface_info_entry_t *cur, uint8_t scanMask) +{ + return -1; +} + + +uint8_t *mle_linkquality_write(uint8_t *buffer) +{ + return NULL; +} + +int mle_attach_parent_response_build(protocol_interface_info_entry_t *cur, sockaddr_t *dstAddress, uint8_t *challenge, uint8_t chalLen, uint8_t linkMargin) +{ + return -1; +} +void mle_network_data_push_to_sleep_child(protocol_interface_info_entry_t *cur, bool stableDataUpdate) +{ +} + +void mle_multicast_push_to_sleep_child(protocol_interface_info_entry_t *cur, buffer_t *buf) +{ + +} + +int mle_network_data_propagation(protocol_interface_info_entry_t *cur, uint8_t *childUnicastAddress, bool fullList) +{ +} + +void mle_entry_timeout_update(mle_neigh_table_entry_t *entry_temp, uint32_t timeout_tlv) +{ +} + +void mle_neigh_entry_update_by_mle_tlv_list(mle_neigh_table_entry_t *entry_temp, uint8_t *tlv_ptr, uint16_t tlv_length, uint8_t lqi, uint8_t keyId) +{ +} + +uint8_t mle_indirect_check(const uint8_t *ptr, addrtype_t type) +{ + return 0; +} + +static mle_neigh_table_entry_t *mle_entry_scan_long(const uint8_t *address) +{ + return NULL; +} + +static mle_neigh_table_entry_t *mle_entry_scan_short(uint16_t address) +{ + return NULL; +} + +void mle_key_synch_request(mle_neigh_table_entry_t *info) +{ +} + +mle_neigh_table_entry_t *mle_table_rpl_advert(void) +{ + return NULL; +} + +void mle_entry_rm(mle_neigh_table_entry_t *entry) +{ +} + +void mle_table_ttl(uint16_t ticks, protocol_interface_info_entry_t *cur_interface) +{ +} + +mle_neigh_table_entry_t *mle_refresh_entry_timeout(int8_t interfaceId, const uint8_t *addressPtr, addrtype_t addressType, bool dataPollConfirmation) +{ + return NULL; +} + +mle_neigh_table_entry_t *mle_entry_get_by_link_address(const uint8_t *address, addrtype_t type) +{ + mle_stub.expectedUint8ptr = address; + mle_stub.expectedUint8 = type; + + return mle_stub.mle_neigh_table_entry_ptr; +} + +mle_neigh_table_list_t *mle_list_get(void) +{ + return NULL; +} + +uint8_t mle_thread_end_device_synch_to_router(protocol_interface_info_entry_t *cur, uint8_t *router_ll64) +{ + return 0; +} + +uint8_t mle_thread_end_device_synch(protocol_interface_info_entry_t *cur) +{ + return 0; +} + +uint8_t *mle_general_write_source_address(uint8_t *ptr, protocol_interface_info_entry_t *cur) +{ + return 0; +} + +void mle_tables_frame_counter_state_reset_for_nw_key(uint8_t keyId) +{ + +} + +#endif /* NO_MLE */ diff --git a/test/coap-service/unittest/stub/mle_stub.h b/test/coap-service/unittest/stub/mle_stub.h new file mode 100644 index 0000000000..d096aa9842 --- /dev/null +++ b/test/coap-service/unittest/stub/mle_stub.h @@ -0,0 +1,21 @@ +#ifndef __MLE_STUB_H__ +#define __MLE_STUB_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct { + uint8_t expectedUint8; + uint16_t expectedUint16; + uint8_t *expectedUint8ptr; + mle_neigh_table_entry_t *mle_neigh_table_entry_ptr; +} mle_stub_def; + +extern mle_stub_def mle_stub; + +#ifdef __cplusplus +} +#endif + +#endif // __MLE_STUB_H__ diff --git a/test/coap-service/unittest/stub/mle_tlv_stub.c b/test/coap-service/unittest/stub/mle_tlv_stub.c new file mode 100644 index 0000000000..23bb990ad9 --- /dev/null +++ b/test/coap-service/unittest/stub/mle_tlv_stub.c @@ -0,0 +1,130 @@ +/* + * Copyright (c) 2014-2015 ARM Limited. All rights reserved. + */ +#include "config.h" +#include "platform/ns_debug.h" +#include "string.h" +#include "MLE/mle.h" +#include "MLE/mle_tlv.h" +#include "common_functions.h" + +int mle_message_malformed_check(uint8_t *ptr, uint16_t data_len) +{ + return 0; +} + +int mle_tlv_option_discover(uint8_t *ptr, uint16_t data_len, mle_tlv_type_t discovered_type, mle_tlv_info_t *option_info) +{ + return -1; +} + +int mle_validate_advertisment_message(uint8_t *ptr, uint16_t data_len) +{ + return 0; +} + +int mle_validate_router_link_accept_request_message(uint8_t *ptr, uint16_t data_len) +{ + return 0; +} + +int mle_validate_router_link_accept_message(uint8_t *ptr, uint16_t data_len) +{ + return 0; +} + +bool mle_tlv_type_requested(uint8_t reqType, uint8_t *ptr, uint16_t data_len) +{ + return false; +} + +bool mle_tlv_read_8_bit_tlv(mle_tlv_type_t reqType, uint8_t *ptr, uint16_t data_len, uint8_t *buffer) +{ + return false; +} + +bool mle_tlv_read_16_bit_tlv(mle_tlv_type_t reqType, uint8_t *ptr, uint16_t data_len, uint16_t *buffer) +{ + return false; +} + +bool mle_tlv_read_32_bit_tlv(mle_tlv_type_t reqType, uint8_t *ptr, uint16_t data_len, uint32_t *buffer) +{ + return false; +} + +bool mle_tlv_read_tlv(mle_tlv_type_t reqType, uint8_t *ptr, uint16_t data_len, mle_tlv_info_t *tlv_info) +{ + return false; +} + +int mle_validate_child_keep_alive_message(uint8_t *ptr, uint16_t data_len) +{ + return 0; +} + +int mle_validate_child_update_message(uint8_t *ptr, uint16_t data_len) +{ + return 0; +} + +uint8_t *mle_tlv_write_response(uint8_t *ptr, uint8_t *response_ptr, uint8_t responseLen) +{ + return NULL; +} + +uint8_t *mle_tlv_write_source_address(uint8_t *ptr, uint16_t shortAddress) +{ + return NULL; +} + +uint8_t *mle_tlv_write_short_address(uint8_t *ptr, uint16_t shortAddress) +{ + return NULL; +} + +uint8_t *mle_tlv_write_mode(uint8_t *ptr, uint8_t mode) +{ + return NULL; +} + +uint8_t *mle_tlv_write_timeout(uint8_t *ptr, uint32_t timeOut) +{ + return NULL; +} + +uint8_t *mle_tlv_write_holdtime(uint8_t *ptr, uint16_t holdTime) +{ + return NULL; +} + +uint8_t *mle_tlv_write_challenge(uint8_t *ptr, uint8_t *challengePtr, uint8_t challenLen) +{ + return NULL; +} + +uint8_t *mle_tlv_write_link_layer_framecount(uint8_t *ptr, uint32_t frameCount) +{ + return NULL; +} + +uint8_t *mle_tlv_write_scan_mask(uint8_t *ptr, uint8_t scanMask) +{ + return NULL; +} + +uint8_t *mle_tlv_req_tlv(uint8_t *ptr, uint8_t *mle_req_tlv_list, uint8_t req_list_len) +{ + return NULL; +} +uint8_t *mle_tlv_rssi_tlv(uint8_t *ptr, uint8_t linkMargin) +{ + return NULL; +} + +uint8_t *mle_tlv_write_version(uint8_t *ptr, uint16_t version) +{ + return NULL; +} + + diff --git a/test/coap-service/unittest/stub/multicast_stub.c b/test/coap-service/unittest/stub/multicast_stub.c new file mode 100644 index 0000000000..8080088303 --- /dev/null +++ b/test/coap-service/unittest/stub/multicast_stub.c @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2013-2015 ARM Limited. All rights reserved. + */ +#include "config.h" +#include "ns_types.h" +#include "eventOS_event.h" +#include "nsdynmemLIB.h" +#include "ns_trace.h" +#include "Core/include/socket.h" +#include "string.h" +#include "NWK_INTERFACE/Include/protocol.h" +#include "Common_Protocols/ipv6.h" +#include "MulticastTrigle/multicast.h" +#include "MAC/IEEE802_15_4/mac_mlme.h" +#include "6LoWPAN/Bootstraps/network_lib.h" +#include "common_functions.h" +#include "NWK_INTERFACE/Include/protocol_timer.h" + +void multicast_push(buffer_t *buf) +{ + +} + +void multicast_init(void) +{ + +} + +void multicast_handle_time_event(uint16_t ticksUpdate) +{ + +} + +int multicast_sleepy_unicast_address_register(uint8_t * multicast_address, multicast_forward_to_sleepy *handler) +{ + return 0; +} + +void multicast_set_parameters(uint8_t i_min, uint8_t i_max, uint8_t k, uint8_t timer_expirations, uint8_t window_expiration) +{ + +} + +uint8_t multicast_add_address(const uint8_t *address_ptr, uint8_t use_trickle) +{ + return 0; +} + +uint8_t multicast_free_address(uint8_t *address_ptr) +{ + return 0; +} diff --git a/test/coap-service/unittest/stub/nd_proxy.c b/test/coap-service/unittest/stub/nd_proxy.c new file mode 100644 index 0000000000..b4986c0224 --- /dev/null +++ b/test/coap-service/unittest/stub/nd_proxy.c @@ -0,0 +1,20 @@ +/* + * Copyright (c) 2013-2015 ARM Limited. All rights reserved. + */ +#include "config.h" +#include "ns_types.h" + +int nd_proxy_downstream_interface_unregister(int8_t interface_id) +{ + return 0; +} + +bool nd_proxy_enabled_for_upstream(int8_t interface_id) +{ + return false; +} + +bool nd_proxy_upstream_route_onlink(int8_t downstream_id, uint8_t *address) +{ + return false; +} diff --git a/test/coap-service/unittest/stub/nd_proxy_stub.c b/test/coap-service/unittest/stub/nd_proxy_stub.c new file mode 100644 index 0000000000..e87d3e2fc9 --- /dev/null +++ b/test/coap-service/unittest/stub/nd_proxy_stub.c @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2015 ARM. All rights reserved. + */ + +#include "config.h" +#ifdef HAVE_ND_PROXY +#include "ns_types.h" +#include "common_functions.h" +#include "ns_trace.h" +#include "string.h" +#include "nsdynmemLIB.h" +#include "ns_list.h" +#include "Service_Libs/nd_proxy/nd_proxy.h" + + +int nd_proxy_downstream_interface_register(int8_t interface_id, nd_proxy_req_cb *nd_proxy_req, bridge_state_update_cb * bridge_state_update) +{ + return 0; +} + +int nd_proxy_downstream_interface_unregister(int8_t interface_id) +{ + return 0; +} + +int nd_proxy_upstream_interface_register(int8_t interface_id, nd_proxy_req_cb *route_validation_req) +{ + return 0; +} + +int nd_proxy_upstream_interface_unregister(int8_t interface_id) +{ + return 0; +} + +bool nd_proxy_enabled_for_downstream(int8_t interface_id) +{ + return false; +} + +bool nd_proxy_enabled_for_upstream(int8_t interface_id) +{ + return false; +} + +bool nd_proxy_target_address_validation(int8_t upstream_id, uint8_t *address, int8_t *downstream_id_ptr) +{ + return false; +} + +bool nd_proxy_upstream_route_onlink(int8_t downstream_id, uint8_t *address) +{ + return false; +} +#endif /* HAVE_ND_PROXY */ + diff --git a/test/coap-service/unittest/stub/nd_router_object_stub.c b/test/coap-service/unittest/stub/nd_router_object_stub.c new file mode 100644 index 0000000000..5ddeb9acdd --- /dev/null +++ b/test/coap-service/unittest/stub/nd_router_object_stub.c @@ -0,0 +1,242 @@ +/* + * Copyright (c) 2013-2015 ARM Limited. All rights reserved. + */ +#include "config.h" +#include "ns_types.h" +#include "string.h" +#include "nsdynmemLIB.h" +#include "ns_trace.h" +#include "NWK_INTERFACE/Include/protocol.h" +#include "MAC/IEEE802_15_4/mac_data_poll.h" +#include "MAC/IEEE802_15_4/mac_mlme.h" +#include "Common_Protocols/icmpv6.h" +#include "Common_Protocols/icmpv6_prefix.h" +#include "Common_Protocols/icmpv6_radv.h" +#include "randLIB.h" +#ifdef HAVE_RPL +#include "6LoWPAN/RPL/rpl.h" +#include "6LoWPAN/RPL/rpl_obj.h" +#else +/* This sort of thing should be handled in rpl.h itself */ +#define rpl_object_poisons() 0 +#endif +#include "6LoWPAN/IPHC_Decode/cipv6.h" +#include "6LoWPAN/ND/nd_router_object.h" +#include "6LoWPAN/Bootstraps/network_lib.h" +#include "6LoWPAN/Bootstraps/protocol_6lowpan.h" +#include "6LoWPAN/Bootstraps/protocol_6lowpan_bootstrap.h" +#ifdef WHITEBOARD +#ifdef NVM_BORDER_ROUTER +#include "br_list_nvm_api.h" +#endif +#include "Service_Libs/whiteboard/whiteboard.h" +#endif +#include "common_functions.h" + +#define TRACE_GROUP_LOWPAN_ND "loND" + +void icmp_nd_router_object_release(nd_router_t *router_object); +uint8_t icmp_nd_router_prefix_ttl_update(nd_router_t *nd_router_object, protocol_interface_info_entry_t *cur_interface); + +uint8_t nd_rs_build(nd_router_t *cur, protocol_interface_info_entry_t *cur_interface); +bool icmp_nd_compare_to_def_next_hop(nd_router_next_hop *hop, sockaddr_t *adr); +void icmp_nd_router_context_ttl_update(nd_router_t *nd_router_object); +extern void nd_border_router_setup_refresh(nwk_interface_id id, bool fresh_abro); + +uint8_t nd_base_tick = 1; + +int8_t nd_set_br(nd_router_t *br) +{ + return -1; +} + +bool nd_object_active(void) +{ + return false; +} + +void icmp_nd_routers_init(void) +{ +} + + +void icmp_nd_set_nd_def_router_address(uint8_t *ptr, nd_router_t *cur) +{ + +} + +void nd_ns_trig(nd_router_t *router_object, protocol_interface_info_entry_t *cur) +{ + +} + +void nd_router_base_init(nd_router_t *new_entry) +{ + +} + +nd_router_t *icmp_nd_router_object_get(const uint8_t *border_router, nwk_interface_id nwk_id) +{ + return NULL; +} + +void icmp_nd_router_object_reset(nd_router_t *router_object) +{ + +} + +int8_t icmp_nd_router_prefix_proxy_update(uint8_t *dptr, nd_router_setup_t *nd_router_object) +{ + return -1; +} + +uint8_t icmp_nd_router_prefix_valid(nd_router_t *nd_router_object) +{ + return 0; +} + +uint8_t icmp_nd_router_prefix_ttl_update(nd_router_t *nd_router_object, protocol_interface_info_entry_t *cur_interface) +{ + return 0; +} + +int8_t icmp_nd_router_prefix_update(uint8_t *dptr, nd_router_t *nd_router_object, protocol_interface_info_entry_t *cur_interface) +{ + return 0; +} + +void icmp_nd_router_context_ttl_update(nd_router_t *nd_router_object) +{ + +} + +int8_t icmp_nd_router_context_update(const uint8_t *dptr, nd_router_t *router_object) +{ + return -1; +} + +void icmp_nd_router_object_release(nd_router_t *router_object) +{ +} + + +void icmp_nd_border_router_release(nd_router_t *router_object) +{ +} + + + +void gp_address_list_free(gp_ipv6_address_list_t *list) +{ +} + +void icmp_nd_prefixs_parse(buffer_t *buf, nd_router_t *nd_router_object, protocol_interface_info_entry_t *cur_interface) +{ + +} + + +void icmp_nd_set_next_hop(nd_router_next_hop *hop, sockaddr_t *adr) +{ + +} + +bool icmp_nd_compare_to_def_next_hop(nd_router_next_hop *hop, sockaddr_t *adr) +{ + return false; +} + +uint8_t nd_rs_build(nd_router_t *cur, protocol_interface_info_entry_t *cur_interface) +{ + return 0; +} + +uint8_t nd_ns_build(nd_router_t *cur, protocol_interface_info_entry_t *cur_interface, uint8_t *address_ptr) +{ + return 0; +} + +buffer_t *nd_dar_parse(buffer_t *buf, protocol_interface_info_entry_t *cur_interface) +{ + return NULL; +} + +bool nd_ns_aro_handler(protocol_interface_info_entry_t *cur_interface, const uint8_t *aro_opt, const uint8_t *slla_opt, const uint8_t *src_addr, aro_t *aro_out) +{ + return false; +} + +buffer_t *nd_dac_handler(buffer_t *buf, protocol_interface_info_entry_t *cur) +{ + return NULL; +} + +static void nd_ns_forward_timer_reset(uint8_t *root_adr) +{ + +} + +bool nd_ra_process_abro(protocol_interface_info_entry_t *cur, buffer_t *buf, const uint8_t *dptr, uint8_t ra_flags, uint16_t router_lifetime) +{ + return false; +} + +void nd_ra_process_lowpan_context_option(protocol_interface_info_entry_t *cur, const uint8_t *opt) +{ +} + +void nd_ra_build_by_abro(const uint8_t *abro, const uint8_t *dest, protocol_interface_info_entry_t *cur_interface) +{ +} + +void nd_trigger_ras_from_rs(const uint8_t *unicast_adr, protocol_interface_info_entry_t *cur_interface) +{ +} + +void nd_na_aro_handler(protocol_interface_info_entry_t *cur_interface, const uint8_t *dptr, const uint8_t *dst_addr) +{ +} + +void gp_address_add_to_end(gp_ipv6_address_list_t *list, const uint8_t address[__static 16]) +{ +} + +void nd_object_timer(struct protocol_interface_info_entry *cur_interface, uint16_t ticks_update) +{ +} + +ipv6_ra_timing_t *nd_ra_timing(const uint8_t abro[16]) +{ + return NULL; +} + +uint32_t nd_object_time_to_next_nd_reg(void) +{ + return 0; +} + + +void nd_object_timer_balance(uint16_t sleep_time, protocol_interface_info_entry_t *cur_interface) +{ +} + +uint8_t nd_prefix_dst_check(uint8_t *ptr) +{ + return 0; +} + +int8_t nd_parent_loose_indcate(uint8_t *neighbor_address, protocol_interface_info_entry_t *cur_interface) +{ + return -1; +} + +nd_router_t *nd_get_object_by_nwk_id(nwk_interface_id nwk_id) +{ + return NULL; +} + +nd_router_t *nd_get_pana_address(void) +{ + return NULL; +} + diff --git a/test/coap-service/unittest/stub/neighbor_cache_stub.c b/test/coap-service/unittest/stub/neighbor_cache_stub.c new file mode 100644 index 0000000000..5b32a124f3 --- /dev/null +++ b/test/coap-service/unittest/stub/neighbor_cache_stub.c @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2014-2015 ARM Limited. All rights reserved. + */ +#include "config.h" +#include "ns_types.h" +#include "common_functions.h" +#include "platform/ns_debug.h" +#include "string.h" +#include "nsdynmemLIB.h" +#include "Service_Libs/Neighbor_cache/neighbor_table_definition.h" + +void neighbor_cache_init(neigh_cache_s *neigh_cache) +{ +} + +int neighbor_cache_flush(neigh_cache_s *neigh_cache) +{ + return 0; +} + + +neigh_cache_entry_s *neighbor_cache_entry_get(neigh_cache_s *neigh_cache, neighbor_address_type_e address_type, const void *address_ptr) +{ + return NULL; +} + +neigh_cache_entry_s *neighbor_cache_entry_create(neigh_cache_s *neigh_cache, const uint8_t address_ptr[8]) +{ + return NULL; +} + +int8_t neighbor_cache_entry_delete(neigh_cache_s *neigh_cache, neighbor_address_type_e address_type, const void *address_ptr) +{ + return 0; +} + +neigh_cache_entry_s *neighbor_cache_entry_delete_by_entry_pointer(neigh_cache_s *neigh_cache, neigh_cache_entry_s *entry) +{ + return NULL; +} + +int neighbor_cache_ttl_update(neigh_cache_s *neigh_cache, uint16_t ticks) +{ + return 0; +} + +neigh_cache_entry_s *neighbor_cache_entry_get_timed_out(neigh_cache_s *neigh_cache) +{ + return NULL; +} diff --git a/test/coap-service/unittest/stub/net_stub.c b/test/coap-service/unittest/stub/net_stub.c new file mode 100644 index 0000000000..7f6ba92a79 --- /dev/null +++ b/test/coap-service/unittest/stub/net_stub.c @@ -0,0 +1,279 @@ +/* + * Copyright (c) 2014-2015 ARM Limited. All rights reserved. + */ +/** + * \file net.c + * \brief Network API for library model + * + * The network API functions for library model + */ +#include "config.h" +#include "ns_types.h" +#include "eventOS_scheduler.h" +#include "string.h" +#include "ns_trace.h" +#include "socket_api.h" +#include "nsdynmemLIB.h" +#include "NWK_INTERFACE/Include/protocol.h" +#include "NWK_INTERFACE/Include/protocol_interface_driver.h" +#ifdef HAVE_RPL +#include "6LoWPAN/RPL/rpl.h" +#endif +#include "ccmLIB.h" +#include "MAC/IEEE802_15_4/mac_data_interface.h" +#include "MAC/IEEE802_15_4/mac_security_interface.h" +#include "MAC/IEEE802_15_4/mac_data_poll.h" +#include "MAC/IEEE802_15_4/mac_mlme.h" +#include "6LoWPAN/Bootstraps/network_lib.h" +#include "6LoWPAN/Bootstraps/protocol_6lowpan.h" +#include "6LoWPAN/Bootstraps/protocol_6lowpan_bootstrap.h" +#include "6LoWPAN/ND/nd_router_object.h" +#ifndef NO_MLE +#include "MLE/mle.h" +#endif + +#ifdef ECC +#include "libX509_V3.h" +#include "ecc.h" +#endif +#include "platform/arm_hal_interrupt.h" +#include "common_functions.h" +#include "MulticastTrigle/multicast.h" +#ifdef NVM_BORDER_ROUTER +#include "br_list_nvm_api.h" +#endif +#include "Service_Libs/whiteboard/whiteboard.h" +#include "net_pana_parameters_api.h" +#ifdef PANA +#include "Security/PANA/pana.h" +#include "Security/PANA/pana_internal_api.h" +#endif +#include "nwk_stats_api.h" +#include "NWK_INTERFACE/Include/protocol_stats.h" +#include "Security/Common/sec_lib_definitions.h" +#include "ipv6_stack/protocol_ipv6.h" +#include "ipv6_stack/ipv6_routing_table.h" +#include "net_thread_test.h" +#include "6LoWPAN/Thread/thread.h" +#include "6LoWPAN/Thread/thread_routing.h" +#include "BorderRouter/border_router.h" + +int8_t arm_network_processor_up(protocol_interface_info_entry_t *cur) +{ + return 0; +} + +int8_t arm_net_energy_scan(int8_t interface_id, channel_list_s *scan_list, void (*passed_fptr)(uint8_t *), uint8_t energy_tresshold) +{ + return 0; +} + +int8_t arm_net_nwk_scan(int8_t interface_id, channel_list_s *scan_list, void (*passed_fptr)(uint8_t *), uint8_t scan_level) +{ + return 0; +} + +nwk_pan_descriptor_t *arm_net_get_scanned_nwk_list(int8_t interface_id) +{ + return NULL; +} + +uint16_t arm_net_get_nwk_pan_id_filter(int8_t nwk_interface_id) +{ + return 0; +} + +int8_t arm_nwk_param_read(int8_t interface_id, link_layer_setups_s *network_params) +{ + return 0; +} + +int8_t arm_nwk_mac_address_read(int8_t interface_id, link_layer_address_s *mac_params) +{ + return 0; +} + +int8_t arm_nwk_nd_address_read(int8_t interface_id, network_layer_address_s *nd_params) +{ + return 0; +} + +int16_t arm_net_get_current_channel(int8_t nwk_interface_id) +{ + return 0; +} + +void arm_net_host_enter_sleep_state_set(int8_t nwk_interface_id, uint8_t state) +{ +} + + +void net_get_version_information(uint8_t *ptr) +{ +} + +int8_t arm_nwk_6lowpan_gp_address_mode(int8_t nwk_interface_id, net_6lowpan_gp_address_mode_e mode, uint16_t short_address_base, uint8_t define_new_short_address_at_DAD) +{ + return 0; +} + +int8_t arm_net_address_get(int8_t nwk_interface_id, net_address_t addr_id, uint8_t *address) +{ + return 0; +} + +int8_t arm_net_interface_address_list_size(int8_t nwk_interface_id, uint16_t *address_count) +{ + return 0; +} + +int8_t arm_net_address_list_get(int8_t nwk_interface_id, uint8_t address_buf_size, uint8_t *address_buffer, int *writed_address_count) +{ + return 0; +} + +int8_t arm_nwk_interface_init(net_interface_type_e type, uint8_t phy_driver_id, char *interface_name_ptr) +{ + return 0; +} + +int8_t arm_nwk_interface_network_driver_set(int8_t nwk_interface_id, int8_t tun_driver_id, channel_list_s *nwk_channel_list, network_driver_setup_s *link_setup) +{ + return 0; +} + +int8_t arm_nwk_interface_up(int8_t nwk_interface_id) +{ + return 0; +} + +int8_t arm_nwk_interface_down(int8_t nwk_interface_id) +{ + return 0; +} + +int8_t arm_pana_client_key_pull(int8_t nwk_interface_id) +{ + return 0; +} + +int8_t arm_nwk_link_layer_security_mode(int8_t nwk_interface_id, net_6lowpan_link_layer_sec_mode_e mode, uint8_t sec_level, net_link_layer_psk_security_info_s *psk_key_info) +{ + return 0; +} + +int8_t arm_network_certificate_chain_set(arm_certificate_chain_entry_s *chain_info) +{ + return 0; +} + +int8_t arm_network_key_get(int8_t interface_id, ns_keys_t *key) +{ + return 0; +} + +int8_t arm_pana_server_library_init(int8_t nwk_interface_id, net_tls_cipher_e cipher_mode, uint8_t *key_material, uint32_t time_period_before_activate_key) +{ + return 0; +} + +int8_t arm_pana_activate_new_key(int8_t nwk_interface_id) +{ + return 0; +} + +int8_t arm_pana_server_key_update(int8_t nwk_interface_id, uint8_t *network_key_material) +{ + return 0; +} + +int8_t net_pana_parameter_set(const pana_lib_parameters_s *parameter_ptr) +{ + return 0; +} + +int8_t net_pana_parameter_read(pana_lib_parameters_s *parameter_ptr) +{ + return 0; +} + + +int8_t arm_pana_client_library_init(int8_t nwk_interface_id, net_tls_cipher_e cipher_mode, uint32_t psk_key_id) +{ + return 0; +} + + +int8_t arm_nwk_interface_configure_ipv6_bootstrap_set(int8_t nwk_interface_id, net_ipv6_mode_e bootstrap_mode, uint8_t *ipv6_prefix_pointer) +{ + return 0; +} + +int8_t arm_nwk_interface_configure_6lowpan_bootstrap_set(int8_t nwk_interface_id, net_6lowpan_mode_e bootstrap_mode, net_6lowpan_mode_extension_e net_6lowpan_mode_extension) +{ + return 0; +} + + +int8_t arm_nwk_6lowpan_link_scan_parameter_set(int8_t nwk_interface_id, uint8_t scan_time) +{ + return 0; +} + +int8_t arm_nwk_6lowpan_link_panid_filter_for_nwk_scan(int8_t nwk_interface_id, uint16_t pan_id_filter) +{ + return 0; +} + +int8_t arm_nwk_6lowpan_link_nwk_id_filter_for_nwk_scan(int8_t nwk_interface_id, const uint8_t *nwk_id_filter) +{ + return 0; +} + +int8_t arm_nwk_6lowpan_link_protocol_id_filter_for_nwk_scan(int8_t nwk_interface_id, uint8_t protocol_ID) +{ + return 0; +} + +int8_t net_init_core(void) +{ + return 0; +} + +int8_t arm_nwk_host_mode_set(int8_t nwk_interface_id, net_host_mode_t mode, uint32_t poll_time) +{ + return 0; +} + +int8_t arm_nwk_host_mode_get(int8_t nwk_interface_id, net_host_mode_t *mode) +{ + return 0; +} + +int8_t net_nvm_data_clean(int8_t interface_id) +{ + return 0; +} + +int8_t net_nvm_data_load(uint8_t *data_buffer, int8_t interface_id) +{ + return 0; +} + +int8_t net_pana_client_session_nvm_data_load(uint8_t *data_buffer, uint8_t *session_address, int8_t interface_id) +{ + return 0; +} + +int8_t net_read_persistent_data(uint8_t *data_buffer, int8_t interface_id) +{ + return 0; +} + +void arm_print_routing_table(void) +{ +} + +void arm_ncache_flush(void) +{ +} diff --git a/test/coap-service/unittest/stub/ns_list_stub.c b/test/coap-service/unittest/stub/ns_list_stub.c new file mode 100644 index 0000000000..2283f0f909 --- /dev/null +++ b/test/coap-service/unittest/stub/ns_list_stub.c @@ -0,0 +1,9 @@ +/* + * Copyright (c) 2015 ARM Limited. All rights reserved. + */ + +#define NS_LIST_FN extern + +#include "ns_list.h" + + diff --git a/test/coap-service/unittest/stub/ns_timer_stub.c b/test/coap-service/unittest/stub/ns_timer_stub.c new file mode 100644 index 0000000000..40ba9fd692 --- /dev/null +++ b/test/coap-service/unittest/stub/ns_timer_stub.c @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2014-2015 ARM Limited. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 + * 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 "ns_types.h" +#include "ns_list.h" +#include "ns_timer.h" +#include "ns_timer_stub.h" +#include "eventOS_callback_timer.h" +#include "platform/arm_hal_interrupt.h" +#include "platform/arm_hal_timer.h" +#include "nsdynmemLIB.h" + +ns_timer_stub_def ns_timer_stub; + +int8_t ns_timer_init(void) +{ + return ns_timer_stub.int8_value; +} + +int8_t eventOS_callback_timer_register(void (*timer_interrupt_handler)(int8_t, uint16_t)) +{ + ns_timer_stub.cb = timer_interrupt_handler; + return ns_timer_stub.int8_value; +} + +int8_t eventOS_callback_timer_unregister(int8_t ns_timer_id) +{ + return ns_timer_stub.int8_value; +} + + +int8_t ns_timer_sleep(void) +{ + return ns_timer_stub.int8_value; +} + +int8_t eventOS_callback_timer_start(int8_t ns_timer_id, uint16_t slots) +{ + return ns_timer_stub.int8_value; +} + +int8_t eventOS_callback_timer_stop(int8_t ns_timer_id) +{ + return ns_timer_stub.int8_value; +} diff --git a/test/coap-service/unittest/stub/ns_timer_stub.h b/test/coap-service/unittest/stub/ns_timer_stub.h new file mode 100644 index 0000000000..5f970d793a --- /dev/null +++ b/test/coap-service/unittest/stub/ns_timer_stub.h @@ -0,0 +1,19 @@ +#ifndef __NS_TIMER_STUB_H__ +#define __NS_TIMER_STUB_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct { + int8_t int8_value; + void (*cb)(int8_t, uint16_t); +} ns_timer_stub_def; + +extern ns_timer_stub_def ns_timer_stub; + +#ifdef __cplusplus +} +#endif + +#endif // __NS_TIMER_STUB_H__ diff --git a/test/coap-service/unittest/stub/ns_trace.c b/test/coap-service/unittest/stub/ns_trace.c new file mode 100644 index 0000000000..7e0737f8e9 --- /dev/null +++ b/test/coap-service/unittest/stub/ns_trace.c @@ -0,0 +1,10 @@ +/* + * Copyright (c) 2013-2015 ARM Limited. All rights reserved. + */ +#include "config.h" +#include "ns_types.h" +void tracef(uint8_t dlevel, const char *grp, const char *fmt, ...) +{ + +} + diff --git a/test/coap-service/unittest/stub/ns_trace_stub.c b/test/coap-service/unittest/stub/ns_trace_stub.c new file mode 100644 index 0000000000..1c45fd401e --- /dev/null +++ b/test/coap-service/unittest/stub/ns_trace_stub.c @@ -0,0 +1,202 @@ +/* + * Copyright (c) 2014-2015 ARM Limited. All rights reserved. + */ +#include +#include +#include +#include + +#include "ns_trace.h" +#include "ip6string.h" +#include "common_functions.h" + +#if defined(_WIN32) || defined(__unix__) || defined(__unix) || defined(unix) +#ifndef MEM_ALLOC +#define MEM_ALLOC malloc +#endif +#ifndef MEM_FREE +#define MEM_FREE free +#endif +#else +#include "nsdynmemLIB.h" +#ifndef MEM_ALLOC +#define MEM_ALLOC ns_dyn_mem_alloc +#endif +#ifndef MEM_FREE +#define MEM_FREE ns_dyn_mem_free +#endif +#endif + +#define VT100_COLOR_ERROR "\x1b[31m" +#define VT100_COLOR_WARN "\x1b[33m" +#define VT100_COLOR_INFO "\x1b[39m" +#define VT100_COLOR_DEBUG "\x1b[90m" + +/** default max trace line size in bytes */ +#define DEFAULT_TRACE_LINE_LENGTH 1024 +/** default max temporary buffer size in bytes, used in + trace_ipv6, trace_array and trace_strn */ +#define DEFAULT_TRACE_TMP_LINE_LEN 128 +/** default max filters (include/exclude) length in bytes */ +#define DEFAULT_TRACE_FILTER_LENGTH 24 + +static void default_print(const char *str); + +typedef struct { + /** trace configuration bits */ + uint8_t trace_config; + /** exclude filters list, related group name */ + char *filters_exclude; + /** include filters list, related group name */ + char *filters_include; + /** Filters length */ + int filters_length; + /** trace line */ + char *line; + /** trace line length */ + int line_length; + /** temporary data */ + char *tmp_data; + /** temporary data array length */ + int tmp_data_length; + /** temporary data pointer */ + char *tmp_data_ptr; + + /** prefix function, which can be used to put time to the trace line */ + char *(*prefix_f)(size_t); + /** suffix function, which can be used to some string to the end of trace line */ + char *(*suffix_f)(void); + /** print out function. Can be redirect to flash for example. */ + void (*printf)(const char *); + /** print out function for TRACE_LEVEL_CMD */ + void (*cmd_printf)(const char *); +} trace_s; + +static trace_s m_trace = { + .filters_exclude = 0, + .filters_include = 0, + .line = 0, + .tmp_data = 0, + .prefix_f = 0, + .suffix_f = 0, + .printf = 0, + .cmd_printf = 0 +}; + +int trace_init(void) +{ + return 0; +} +void trace_free(void) +{ + +} + +void set_trace_config(uint8_t config) +{ + +} +uint8_t get_trace_config(void) +{ + return 0; +} +void set_trace_prefix_function(char *(*pref_f)(size_t)) +{ +} + +void set_trace_suffix_function(char *(*suffix_f)(void)) +{ +} + +void set_trace_print_function(void (*printf)(const char *)) +{ +} + +void set_trace_cmdprint_function(void (*printf)(const char *)) +{ +} + +void set_trace_exclude_filters(char *filters) +{ +} +const char *get_trace_exclude_filters(void) +{ + return NULL; +} + +const char *get_trace_include_filters(void) +{ + return NULL; +} + +void set_trace_include_filters(char *filters) +{ +} + +static int8_t trace_skip(int8_t dlevel, const char *grp) +{ + return 0; +} + +static void default_print(const char *str) +{ +} + +void tracef(uint8_t dlevel, const char *grp, const char *fmt, ...) +{ + +} +const char *trace_last(void) +{ + return ""; +} + +/* Helping functions */ +#define tmp_data_left() m_trace.tmp_data_length-(m_trace.tmp_data_ptr-m_trace.tmp_data) +char *trace_ipv6(const void *addr_ptr) +{ + return ""; +} + +char *trace_ipv6_prefix(const uint8_t *prefix, uint8_t prefix_len) +{ + return ""; +} + +char *trace_array(const uint8_t *buf, uint16_t len) +{ + return ""; +} + +// rest of debug print functions will be obsolete and will be overridden with new trace interface.. +void debugf(const char *fmt, ...) +{ +} + +void debug(const char *s) +{ +} + +void debug_put(char c) +{ +} + +void debug_hex(uint8_t x) +{ +} + +void debug_int(int i) +{ +} + +void printf_array(const void *buf , uint16_t len) +{ +} + +void printf_ipv6_address(const void *addr_ptr) +{ +} + +void printf_string(const void *ptr, uint16_t len) +{ +} diff --git a/test/coap-service/unittest/stub/nsdynmemLIB_stub.c b/test/coap-service/unittest/stub/nsdynmemLIB_stub.c new file mode 100644 index 0000000000..092c798bcb --- /dev/null +++ b/test/coap-service/unittest/stub/nsdynmemLIB_stub.c @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2014-2015 ARM Limited. All rights reserved. + */ +#include "nsdynmemLIB_stub.h" +#include +#include +#include +#include "platform/arm_hal_interrupt.h" +#ifdef STANDARD_MALLOC +#include +#endif + +nsdynmemlib_stub_data_t nsdynmemlib_stub; + +void ns_dyn_mem_init(uint8_t *heap, uint16_t h_size, void (*passed_fptr)(heap_fail_t), mem_stat_t *info_ptr) +{ +} + +void *ns_dyn_mem_alloc(int16_t alloc_size) +{ + if (nsdynmemlib_stub.returnCounter > 0) + { + nsdynmemlib_stub.returnCounter--; + return malloc(alloc_size); + } + else + { + return(nsdynmemlib_stub.expectedPointer); + } +} + +void *ns_dyn_mem_temporary_alloc(int16_t alloc_size) +{ + if (nsdynmemlib_stub.returnCounter > 0) + { + nsdynmemlib_stub.returnCounter--; + return malloc(alloc_size); + } + else + { + return(nsdynmemlib_stub.expectedPointer); + } +} + +void ns_dyn_mem_free(void *block) +{ + free(block); +} diff --git a/test/coap-service/unittest/stub/nsdynmemLIB_stub.h b/test/coap-service/unittest/stub/nsdynmemLIB_stub.h new file mode 100644 index 0000000000..d0838b038e --- /dev/null +++ b/test/coap-service/unittest/stub/nsdynmemLIB_stub.h @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2015 ARM Limited. All rights reserved. + */ +#ifndef __NSDYNMEMLIB_STUB_H__ +#define __NSDYNMEMLIB_STUB_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +#include "stdint.h" + +typedef struct { + uint8_t returnCounter; + void* expectedPointer; +} nsdynmemlib_stub_data_t; + +extern nsdynmemlib_stub_data_t nsdynmemlib_stub; + + +void *ns_dyn_mem_alloc(int16_t alloc_size); +void *ns_dyn_mem_temporary_alloc(int16_t alloc_size); +void ns_dyn_mem_free(void *block); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/test/coap-service/unittest/stub/protocol_6lowpan_bootstrap_stub.c b/test/coap-service/unittest/stub/protocol_6lowpan_bootstrap_stub.c new file mode 100644 index 0000000000..6d5fa59e22 --- /dev/null +++ b/test/coap-service/unittest/stub/protocol_6lowpan_bootstrap_stub.c @@ -0,0 +1,162 @@ +/* + * Copyright (c) 2015 ARM Limited. All rights reserved. + */ + +/* + * \file protocol_6lowpan_bootstrap.c + * + */ +#include "config.h" +#include "string.h" +#include "ns_types.h" +#include "ns_trace.h" +#include "nsdynmemLIB.h" +#include "NWK_INTERFACE/Include/protocol.h" +#include "Common_Protocols/icmpv6.h" +#include "Common_Protocols/icmpv6_radv.h" +#include "Common_Protocols/udp.h" +#include "6LoWPAN/Bootstraps/network_lib.h" +#include "6LoWPAN/Bootstraps/protocol_6lowpan.h" +#include "6LoWPAN/Bootstraps/protocol_6lowpan_interface.h" +#include "MAC/IEEE802_15_4/mac_security_interface.h" +#include "MAC/IEEE802_15_4/mac_data_poll.h" +#include "MAC/IEEE802_15_4/mac_mlme.h" +#ifdef HAVE_RPL +#include "6LoWPAN/RPL/rpl.h" +#include "6LoWPAN/RPL/rpl_obj.h" +#else +/* This sort of thing should be handled in rpl.h itself */ +#define rpl_object_poisons() 0 +#endif +#ifndef NO_MLE +#include "MLE/mle.h" +//#include "MLE/mle_challenge_data.h" +#endif +#ifdef ECC +#include "libX509_V3.h" +#include "ecc.h" +#endif +#ifndef NO_TCP +#ifndef NO_TLS +#include "ccmLIB.h" +#include "shalib.h" +#include "Security/TLS/tls_lib.h" +#include "Security/Common/sec_lib.h" +#include "net_nvm_api.h" +#include "Security/PANA/pana.h" +#include "Security/PANA/pana_internal_api.h" +#endif +#include "Common_Protocols/tcp.h" +#endif +#include "6LoWPAN/ND/nd_router_object.h" +#include "common_functions.h" + +#define TRACE_GROUP_LOWPAN_BOOT "6Bo" + +int8_t arm_6lowpan_bootsrap_down(protocol_interface_info_entry_t *cur) +{ + return -1; +} + +int8_t arm_6lowpan_bootstrap_up(protocol_interface_info_entry_t *cur) +{ + return -1; +} + +void arm_6lowpan_bootstrap_init(protocol_interface_info_entry_t *cur) +{ +} + +void nwk_6lowpan_router_scan_state(protocol_interface_info_entry_t *cur) +{ +} + +void nwk_6lowpan_bootstrap_ready(protocol_interface_info_entry_t *cur) +{ +} + +void protocol_6lowpan_rpl_external_advertisment(protocol_interface_info_entry_t *cur_interface , rpl_dodag_t *cur) +{ +} + +void protocol_6lowpan_link_advertise_handle(nd_router_t *cur, protocol_interface_info_entry_t *cur_interface, uint16_t tick) +{ +} + +uint8_t nwk_bootstrap_icmp_rpl_dis_msg_tx(protocol_interface_info_entry_t *cur) +{ + return 0; +} + +void protocol_6lowpan_bootstrap_nd_ready(protocol_interface_info_entry_t *cur_interface, nd_router_t *cur) +{ +} + +void nwk_6lowpan_rpl_router_discover(protocol_interface_info_entry_t *cur) +{ +} + +void nwk_6lowpan_rpl_router_result_check(protocol_interface_info_entry_t *cur) +{ +} + + +void nwk_6lowpan_nd_address_registartion_ready(protocol_interface_info_entry_t *cur) +{ +} + +#ifdef PANA +void nwk_6lowpan_pana_key_pull(protocol_interface_info_entry_t *cur) +{ +} +#endif + +#ifndef NO_MLE + +#ifdef PANA +void nwk_6lowpan_bootsrap_pana_authentication_cb(bool processSuccesfully, protocol_interface_info_entry_t *cur) +{ + +} + +#endif + +#endif + +void nwk_6lowpan_network_authentication_fail(protocol_interface_info_entry_t *cur) +{ +} + +void nwk_6lowpan_network_authentication_done(protocol_interface_info_entry_t *cur) +{ +} + +void protocol_6lowpan_mac_scan_confirm(uint8_t *data) +{ +} + +void protocol_6lowpan_bootstrap(protocol_interface_info_entry_t *cur) +{ +} + +void protocol_6lowpan_mac_clean_mac16(protocol_interface_info_entry_t *interface) +{ +} + +void protocol_6lowpan_nd_borderrouter_connection_down(protocol_interface_info_entry_t *interface) +{ +} + +void protocol_6lowpan_bootstrap_re_start(protocol_interface_info_entry_t *interface) +{ +} + +uint8_t *protocol_6lowpan_nd_border_router_address_get(nwk_interface_id nwk_id) +{ + return NULL; +} + +uint8_t protocol_6lowpan_rf_link_scalability_from_lqi(uint8_t lqi) +{ + return 0; +} diff --git a/test/coap-service/unittest/stub/protocol_6lowpan_interface_stub.c b/test/coap-service/unittest/stub/protocol_6lowpan_interface_stub.c new file mode 100644 index 0000000000..88b1b0e753 --- /dev/null +++ b/test/coap-service/unittest/stub/protocol_6lowpan_interface_stub.c @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2015 ARM Limited. All rights reserved. + */ + +/* + * \file protocol_6lowpan_interface.c + * \brief Add short description about this file!!! + * + */ +#include "config.h" +#include "string.h" +#include "ns_types.h" +#include "eventOS_event.h" +#include "eventOS_scheduler.h" +#include "ns_trace.h" +#include "nsdynmemLIB.h" +#include "NWK_INTERFACE/Include/protocol.h" +#include "Common_Protocols/udp.h" +#include "6LoWPAN/ND/icmp.h" +#include "Common_Protocols/ipv6.h" +#include "Common_Protocols/icmpv6.h" +#include "Common_Protocols/icmpv6_radv.h" +#include "Core/include/routing_table.h" +#include "6LoWPAN/Bootstraps/network_lib.h" +#include "6LoWPAN/Bootstraps/protocol_6lowpan.h" +#include "6LoWPAN/Bootstraps/protocol_6lowpan_bootstrap.h" +#include "MAC/IEEE802_15_4/mac_security_interface.h" +#include "MAC/IEEE802_15_4/mac_mlme.h" +#ifdef HAVE_RPL +#include "6LoWPAN/RPL/rpl.h" +#include "6LoWPAN/RPL/rpl_obj.h" +#endif +#include "6LoWPAN/IPHC_Decode/cipv6.h" +#include "6LoWPAN/Fragmentation/cipv6_fragmenter.h" +#ifndef NO_MLE +#include "MLE/mle.h" +//#include "MLE/mle_challenge_data.h" +#endif +#include "6LoWPAN/Mesh/mesh.h" +#include "6LoWPAN/Thread/thread.h" +#ifdef ECC +#include "libX509_V3.h" +#include "ecc.h" +#endif +#ifndef NO_TCP +#ifndef NO_TLS +#include "ccmLIB.h" +#include "shalib.h" +#include "Security/TLS/tls_lib.h" +#include "Security/Common/sec_lib.h" +#include "net_nvm_api.h" +#include "Security/PANA/pana.h" +#include "Security/PANA/pana_internal_api.h" +#endif +#include "Common_Protocols/tcp.h" +#endif +#include "MulticastTrigle/multicast.h" +#include "NAP/nap_config.h" +#include "NWK_INTERFACE/Include/protocol_interface_driver.h" + +#include "6LoWPAN/ND/nd_router_object.h" +#include "platform/arm_hal_interrupt.h" +#include "common_functions.h" +#include "NWK_INTERFACE/Include/protocol_interface_driver.h" + + +int8_t nwk_6lowpan_up(protocol_interface_info_entry_t *cur) +{ + return 0; +} + +int8_t nwk_6lowpan_down(protocol_interface_info_entry_t *cur) +{ + return 0; +} diff --git a/test/coap-service/unittest/stub/protocol_6lowpan_stub.c b/test/coap-service/unittest/stub/protocol_6lowpan_stub.c new file mode 100644 index 0000000000..6b4c7348f6 --- /dev/null +++ b/test/coap-service/unittest/stub/protocol_6lowpan_stub.c @@ -0,0 +1,145 @@ +/* + * Copyright (c) 2013-2015 ARM Limited. All rights reserved. + */ + +#include "config.h" +#include "string.h" +#include "ns_types.h" +#include "eventOS_event.h" +#include "eventOS_scheduler.h" +#include "ns_trace.h" +#include "nsdynmemLIB.h" +#include "Core/include/socket.h" +#include "NWK_INTERFACE/Include/protocol.h" +#include "Common_Protocols/udp.h" +#include "Common_Protocols/ipv6.h" +#include "Common_Protocols/icmpv6.h" +#include "6LoWPAN/Bootstraps/protocol_6lowpan.h" +#include "MAC/IEEE802_15_4/mac_data_interface.h" +#include "MAC/IEEE802_15_4/mac_mlme.h" +#ifdef HAVE_RPL +#include "6LoWPAN/RPL/rpl.h" +#include "6LoWPAN/RPL/rpl_obj.h" +#else +/* This sort of thing should be handled in rpl.h itself */ +#define rpl_object_poisons() 0 +#endif +#include "6LoWPAN/IPHC_Decode/cipv6.h" +#include "6LoWPAN/Fragmentation/cipv6_fragmenter.h" +#ifndef NO_MLE +#include "MLE/mle.h" +//#include "MLE/mle_challenge_data.h" +#endif +#include "6LoWPAN/Mesh/mesh.h" +#include "6LoWPAN/Thread/thread.h" +#ifdef ECC +#include "libX509_V3.h" +#include "ecc.h" +#endif +#ifndef NO_TCP +#ifndef NO_TLS +#include "ccmLIB.h" +#include "shalib.h" +#include "Security/TLS/tls_lib.h" +#include "Security/Common/sec_lib.h" +#include "net_nvm_api.h" +#include "Security/PANA/pana.h" +#include "Security/PANA/pana_internal_api.h" +#endif +#include "Common_Protocols/tcp.h" +#endif +#include "NAP/nap_config.h" +#include "randLIB.h" +#include "6LoWPAN/ND/nd_router_object.h" +#include "common_functions.h" +#include "NWK_INTERFACE/Include/protocol_interface_driver.h" + +#define TRACE_GROUP_LOWPAN "6lo" +#ifdef NO_TCP +buffer_t *tcp_up(buffer_t *buf); +buffer_t *tcp_down(buffer_t *buf); + +buffer_t *tcp_up(buffer_t *buf) +{ + return buffer_free(buf); +} +buffer_t *tcp_down(buffer_t *buf) +{ + return buffer_free(buf); +} +#endif + +#ifdef NO_TLS +#define sec_timer_handle() +#endif + +void protocol_init(void) +{ +} + +void protocol_6lowpan_stack(buffer_t *b) +{ +} + +uint8_t protocol_6lowpan_llao_write(protocol_interface_info_entry_t *cur, uint8_t *opt_out, uint8_t opt_type) +{ + return 0; +} + +uint8_t protocol_6lowpan_llao_parse(protocol_interface_info_entry_t *cur, const uint8_t *opt_in, sockaddr_t *ll_addr_out) +{ + return 0; +} + +void protocol_6lowpan_register_handlers(protocol_interface_info_entry_t *cur) +{ +} + +void protocol_6lowpan_release_short_link_address_from_neighcache(protocol_interface_info_entry_t *cur, uint16_t shortAddress) +{ +} + +void protocol_6lowpan_release_long_link_address_from_neighcache(protocol_interface_info_entry_t *cur, uint8_t *mac64) +{ +} + +void protocol_6lowpan_priority_neigh_rm_callback(uint8_t *nwk_suffic, protocol_interface_info_entry_t *cur) +{ +} + +void protocol_6lowpan_neighbor_priority_update(protocol_interface_info_entry_t *cur, uint8_t *removed_priority, uint8_t *updated_priority) +{ +} + +int8_t protocol_6lowpan_neighbor_address_state_synch(protocol_interface_info_entry_t *cur, const uint8_t eui64[8], const uint8_t iid[8]) +{ + return 0; +} + +int8_t protocol_6lowpan_neighbor_remove(protocol_interface_info_entry_t *cur, uint8_t *address_ptr, addrtype_t type) +{ + return 0; +} + +int8_t protocol_6lowpan_neighbor_address_validate(route_info_entry_t *info, protocol_interface_info_entry_t *cur) +{ + return 0; +} + +void protocol_6lowpan_allocate_mac16(protocol_interface_info_entry_t *cur) +{ +} + +void protocol_6lowpan_interface_common_init(protocol_interface_info_entry_t *cur) +{ +} + +int8_t protocol_6lowpan_interface_compare_cordinator_netid(protocol_interface_info_entry_t *cur, uint8_t *adr_ptr) +{ + return 0; +} + +int8_t protocol_6lowpan_interface_get_link_local_cordinator_address(protocol_interface_info_entry_t *cur, uint8_t *adr_ptr) +{ + return 0; +} diff --git a/test/coap-service/unittest/stub/protocol_core_stub.c b/test/coap-service/unittest/stub/protocol_core_stub.c new file mode 100644 index 0000000000..cd2279a8a4 --- /dev/null +++ b/test/coap-service/unittest/stub/protocol_core_stub.c @@ -0,0 +1,300 @@ +/* + * Copyright (c) 2014-2015 ARM Limited. All rights reserved. + */ + +#include "config.h" +#include "string.h" +#include "ns_types.h" +#include "eventOS_event.h" +#include "eventOS_scheduler.h" +#include "eventOS_callback_timer.h" +#include "ns_trace.h" +#include "nsdynmemLIB.h" +#include "Core/include/socket.h" +#include "NWK_INTERFACE/Include/protocol.h" +#include "NWK_INTERFACE/Include/protocol_timer.h" +#include "NWK_INTERFACE/Include/protocol_interface_driver.h" +#include "MAC/IEEE802_15_4/mac_data_interface.h" +#include "MAC/IEEE802_15_4/mac_data_poll.h" +#include "MAC/IEEE802_15_4/mac_mlme.h" +#include "platform/arm_hal_interrupt.h" +#include "6LoWPAN/Fragmentation/cipv6_fragmenter.h" +#ifndef NO_MLE +#include "MLE/mle.h" +#endif +#include "6LoWPAN/Bootstraps/protocol_6lowpan.h" +#include "6LoWPAN/Bootstraps/protocol_6lowpan_bootstrap.h" +#include "NWK_INTERFACE/Include/protocol_stats.h" +#include "NWK_INTERFACE/Include/protocol_timer.h" +#include "common_functions.h" +#include "randLIB.h" +#include "platform/arm_hal_phy.h" +#include "platform/arm_hal_interrupt.h" +#ifdef ECC +#include "libX509_V3.h" +#include "ecc.h" +#endif +#ifndef NO_TLS +#include "shalib.h" +#include "Security/TLS/tls_lib.h" +#include "Security/Common/sec_lib.h" +#include "net_nvm_api.h" +#include "net_pana_parameters_api.h" +#include "Security/PANA/pana.h" +#include "Security/PANA/pana_internal_api.h" +#else +#define sec_timer_handle() +#endif +#include "Common_Protocols/ipv6.h" +#include "Common_Protocols/ipv6_fragmentation.h" +#include "Common_Protocols/icmpv6_radv.h" +#include "Common_Protocols/udp.h" +#include "6LoWPAN/ND/nd_router_object.h" +#include "6LoWPAN/RPL/rpl_definition.h" +#ifdef HAVE_RPL +#include "6LoWPAN/RPL/rpl.h" +#include "6LoWPAN/RPL/rpl_obj.h" +#endif +#include "NAP/nap_config.h" +#include "libDHCPv6/libDHCPv6.h" +#include "6LoWPAN/Thread/thread.h" +#include "6LoWPAN/Thread/thread_bootstrap.h" +#include "6LoWPAN/Thread/thread_routing.h" +#include "6LoWPAN/Thread/thread_management_internal.h" +#ifdef IPV6_STACK +#include "ipv6_stack/protocol_ipv6.h" +#endif +#ifdef WHITEBOARD +#ifdef NVM_BORDER_ROUTER +#include "br_list_nvm_api.h" +#endif +#include "Service_Libs/whiteboard/whiteboard.h" +#endif + +#include "MulticastTrigle/multicast.h" + +static protocol_interface_info_entry_t stub_protocol_interface_info_entry; + +#define TRACE_GROUP_CORE "core" + +#ifndef SEC_LIB_X_100MS_COUNTER +#define SEC_LIB_X_100MS_COUNTER 1 +#endif +uint32_t protocol_core_monotonic_time; + +typedef struct { + uint8_t core_timer_ticks; + uint8_t core_timer_event; + uint16_t core_security_ticks_counter; + uint8_t nd_ttl_timer; +} lowpan_core_timer_structures_s; + +void core_timer_event_handle(uint16_t ticksUpdate); + +#ifndef IPV6_STACK +#define ipv6_core_timer_event_handle(x,y) +#define ipv6_core_slow_timer_event_handle(x) +#endif + +uint32_t event_idle_dummy(uint8_t result, uint32_t s_time) +{ + return 0; +} + + +int8_t protocol_read_tasklet_id(void) +{ + return -1; +} + +uint8_t check_power_state(uint8_t mode) +{ + return 0; +} + + +void set_power_state(uint8_t mode) +{ +} + +void clear_power_state(uint8_t mode) +{ +} + +protocol_interface_info_entry_t *nwk_interface_get_pointer_by_timer_id(int8_t id, arm_nwk_timer_id_e type) +{ + return NULL; +} + +void timer_ifs_interrupt(int8_t timer_id, uint16_t slots) +{ +} + +void protocol_root_tasklet(arm_event_s *event) +{ +} +void protocol_core_security_tick_update(uint16_t tick_update) +{ +} + +void nwk_bootsrap_timer(protocol_interface_info_entry_t *cur) +{ +} + +uint8_t nwk_border_router_active(nwk_interface_id nwk_id) +{ + return 0; +} + +void core_timer_event_handle(uint16_t ticksUpdate) +{ +} + +void protocol_core_cb(uint16_t ticksUpdate) +{ +} + + +void protocol_core_init(void) +{ +} + +void protocol_core_interface_info_reset(protocol_interface_info_entry_t *entry) +{ +} + +void bootsrap_next_state_kick(icmp_state_t new_state, protocol_interface_info_entry_t *cur) +{ +} + +uint32_t protocol_stack_interface_set_reachable_time(protocol_interface_info_entry_t *cur, uint32_t base_reachable_time) +{ + return 0; +} +protocol_interface_info_entry_t *nwk_interface_get_ipv6_ptr(void) +{ + return NULL; +} + +void nwk_interface_print_neigh_cache(uint8_t dlevel) +{ +} + +void nwk_interface_flush_neigh_cache(void) +{ +} + +void ipv6_prefix_on_link_update(uint8_t *address) +{ +} + +void ipv6_prefix_on_link_remove(uint8_t *address) +{ +} + +protocol_interface_info_entry_t *protocol_stack_interface_info_get(nwk_interface_id nwk_id) +{ + return &stub_protocol_interface_info_entry; +} + +protocol_interface_info_entry_t *protocol_stack_interface_info_get_by_id(int8_t nwk_id) +{ + return NULL; +} + +protocol_interface_info_entry_t *protocol_stack_interface_info_get_by_bootstrap_id(int8_t id) +{ + return NULL; +} + +protocol_interface_info_entry_t *protocol_stack_interface_info_get_by_device_id(int8_t nwk_id) +{ + return NULL; +} + +protocol_interface_info_entry_t *protocol_stack_interface_info_get_by_tun_device_id(int8_t nwk_id) +{ + return NULL; +} + + + +protocol_interface_info_entry_t *protocol_stack_interface_sleep_possibility(void) +{ + return NULL; +} + +uint8_t nwk_bootsrap_ready(protocol_interface_info_entry_t *cur) +{ + return 0; +} + +int8_t nwk_interface_MAC_MTU_allocate(protocol_interface_info_entry_t *cur) +{ + return 0; +} + +protocol_interface_info_entry_t *protocol_stack_interface_generate(nwk_interface_id nwk_id, int8_t driver_id) +{ + return NULL; +} + +void nwk_interface_link_layer_key_synch_lost_check(protocol_interface_info_entry_t *cur, uint8_t key_id) +{ +} + +bool nwk_interface_compare_mac_address(protocol_interface_info_entry_t *cur, uint_fast8_t addrlen, const uint8_t *addr) +{ + return 0; +} + +int nwk_lowpan_routing_check(buffer_t *buf) +{ + return 0; +} + +int8_t nwk_interface_solication_address_check(protocol_interface_info_entry_t *cur_interface, const uint8_t address_ptr[__static 16]) +{ + return 0; +} + +int protocol_stack_interface_check_prefix_extension_support(int8_t nwk_id, uint8_t *prefix) +{ + return -1; +} + +void protocol_stack_pointer_clear(nwk_interface_id if_id) +{ +} + +int8_t protocol_stack_pointer_check(nwk_interface_id if_id) +{ + return 0; +} + +uint8_t protocol_too_busy(void) +{ + return 0; +} + +void protocol_push(buffer_t *buf) +{ +} + +void nwk_bootsrap_state_update(arm_nwk_interface_status_type_e posted_event, protocol_interface_info_entry_t *cur) +{ +} + +void net_bootsrap_cb_run(uint8_t event) +{ +} + +void protocol_core_dhcpv6_allocated_address_remove(protocol_interface_info_entry_t *cur, uint8_t *guaPrefix) +{ +} + +int8_t protcol_interface_address_compare(protocol_interface_info_entry_t *cur, const uint8_t *addr) +{ + return -1; +} + diff --git a/test/coap-service/unittest/stub/protocol_interface_driver_stub.c b/test/coap-service/unittest/stub/protocol_interface_driver_stub.c new file mode 100644 index 0000000000..9e1177c53c --- /dev/null +++ b/test/coap-service/unittest/stub/protocol_interface_driver_stub.c @@ -0,0 +1,14 @@ +/* + * Copyright (c) 2014-2015 ARM Limited. All rights reserved. + */ +#include "config.h" +#include "string.h" +#include "ns_types.h" +#include "NWK_INTERFACE/Include/protocol.h" +#include "NWK_INTERFACE/Include/protocol_interface_driver.h" +#include "nsdynmemLIB.h" + +arm_device_driver_list_s *arm_net_phy_driver_pointer(int8_t id) +{ + return NULL; +} diff --git a/test/coap-service/unittest/stub/protocol_ipv6_stub.c b/test/coap-service/unittest/stub/protocol_ipv6_stub.c new file mode 100644 index 0000000000..33328130ce --- /dev/null +++ b/test/coap-service/unittest/stub/protocol_ipv6_stub.c @@ -0,0 +1,169 @@ +/* + * Copyright (c) 2012-2015 ARM Limited. All rights reserved. + */ +#include "config.h" +#include "string.h" +#include "ns_types.h" +#include "ns_list.h" +#include "ns_trace.h" +#include "nsdynmemLIB.h" +#include "Core/include/socket.h" +#include "NWK_INTERFACE/Include/protocol.h" +#include "Common_Protocols/ipv6.h" +#include "6LoWPAN/ND/icmp.h" +#include "Common_Protocols/icmpv6.h" +#include "Common_Protocols/ipv6_resolution.h" +#include "Common_Protocols/icmpv6_prefix.h" +#include "Common_Protocols/icmpv6_radv.h" +#include "Common_Protocols/udp.h" +#ifndef NO_TLS +#ifdef ECC +#include "libX509_V3.h" +#include "ecc.h" +#endif +#include "shalib.h" +#include "Security/TLS/tls_lib.h" +#include "Security/Common/sec_lib.h" +#endif + +#include "6LoWPAN/ND/nd_router_object.h" // for gp_address_ functions - better place? +#include "ipv6_stack/ipv6_routing_table.h" +#include "ipv6_stack/protocol_ipv6.h" +#ifndef NO_TCP +#include "Common_Protocols/tcp.h" +#endif +#ifdef NVM_BORDER_ROUTER +#include "br_list_nvm_api.h" +#endif +#include "Service_Libs/whiteboard/whiteboard.h" +#include "platform/arm_hal_interrupt.h" +#include "common_functions.h" +#include "randLIB.h" + +typedef struct ipv6_interface_prefix_on_link_t { + uint8_t prefix[16]; /*!< destination address */ + uint8_t prefix_len; + uint32_t prefix_valid_ttl; + ns_list_link_t link; +} ipv6_interface_prefix_on_link_t; + +typedef struct ipv6_interface_route_on_link_t { + uint8_t prefix[16]; /*!< destination address */ + uint8_t prefix_len; + uint8_t routePrefer; + uint32_t prefix_valid_ttl; + ns_list_link_t link; +} ipv6_interface_route_on_link_t; + +#define WB_UPDATE_PERIOD_SECONDS 23 + +#define ROUTER_SOL_MAX_COUNTER 4 + +#define TRACE_GROUP_PROTOCOL_IPv6 "ip6s" + +int ipv6_generate_static_gp_setup(protocol_interface_info_entry_t *cur) +{ + return -1; +} + +int ipv6_generate_ula_prefix(protocol_interface_info_entry_t *cur) +{ + return -1; +} + +int ipv6_prefix_router_flag_activate(uint8_t *ipv6_address) +{ + return -1; +} + +buffer_t *ethernet_header_build_push(buffer_t *buf, uint16_t ethernet_type, int8_t *status) +{ + return NULL; +} + +buffer_t *ethernet_down(buffer_t *buf) +{ + return NULL; +} + +void ipv6_stack_prefix_on_link_update(protocol_interface_info_entry_t *cur, uint8_t *address) +{ +} + +void ipv6_stack_route_advert_update(uint8_t *address, uint8_t prefixLength, uint8_t routePrefer) +{ +} + +void ipv6_stack_prefix_on_link_remove(protocol_interface_info_entry_t *cur, uint8_t *address) +{ +} + +void ipv6_stack_route_advert_remove(uint8_t *address, uint8_t prefixLength) +{ +} + +void ipv6_prefix_online_list_free(void) +{ +} + +void ipv6_rote_advert_list_free(void) +{ +} + +void ipv6_core_slow_timer_event_handle(struct protocol_interface_info_entry *cur) +{ +} + +void ipv6_core_timer_event_handle(protocol_interface_info_entry_t *cur, const uint8_t event) +{ +} + +int ipv6_prefix_register(uint8_t *prefix_64, uint32_t lifetime, uint32_t prefer_lifetime) +{ + return -1; +} + + +int8_t ipv6_interface_up(protocol_interface_info_entry_t *cur) +{ + return -1; +} + +int8_t ipv6_interface_down(protocol_interface_info_entry_t *cur) +{ + return -1; +} + + +#ifdef RADV_TX +void ipv6_nd_ra_advert(protocol_interface_info_entry_t *cur, const uint8_t *dest) +{ +} +#endif + +void ipv6_interface_resolve_send_ns(ipv6_neighbour_cache_t *cache, ipv6_neighbour_t *entry, bool unicast, uint_fast8_t seq) +{ +} + + + +void ipv6_trigger_resolve_query(protocol_interface_info_entry_t *cur_interface, buffer_t *buf, ipv6_neighbour_t *n) +{ +} + +void ipv6_send_queued(ipv6_neighbour_t *entry) +{ +} + +void ipv6_interface_resolution_failed(ipv6_neighbour_cache_t *cache, ipv6_neighbour_t *entry) +{ +} + +ipv6_neighbour_cache_t *ipv6_neighbour_cache_by_interface_id(int8_t interface_id) +{ + return NULL; +} + +void ipv6_interface_slaac_handler(protocol_interface_info_entry_t *cur, uint8_t *slaacPrefix, uint8_t prefixLen, uint32_t validLifeTime, uint32_t preferredLifeTime) +{ +} diff --git a/test/coap-service/unittest/stub/randLIB_stub.c b/test/coap-service/unittest/stub/randLIB_stub.c new file mode 100644 index 0000000000..ac55243027 --- /dev/null +++ b/test/coap-service/unittest/stub/randLIB_stub.c @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2014-2015 ARM Limited. All rights reserved. + */ +#include +#include +#include +#include +#include "randLIB.h" +#include "platform/arm_hal_random.h" + +#if ((RAND_MAX+1) & RAND_MAX) != 0 +#error "RAND_MAX isn't 2^n-1 :(" +#endif + +void randLIB_seed_random(void) +{ +} + +uint8_t randLIB_get_8bit(void) +{ + return 0; +} + +uint16_t randLIB_get_16bit(void) +{ + return 0; +} + +uint32_t randLIB_get_32bit(void) +{ + return 0; +} + +int8_t randLIB_get_n_bytes_random(uint8_t *data_ptr, uint8_t eight_bit_boundary) +{ + return 0; +} + +uint16_t randLIB_get_random_in_range(uint16_t min, uint16_t max) +{ + return 0; +} + +uint32_t randLIB_randomise_base(uint32_t base, uint16_t min_factor, uint16_t max_factor) +{ + return 0; +} diff --git a/test/coap-service/unittest/stub/routing_table_stub.c b/test/coap-service/unittest/stub/routing_table_stub.c new file mode 100644 index 0000000000..345b73625a --- /dev/null +++ b/test/coap-service/unittest/stub/routing_table_stub.c @@ -0,0 +1,128 @@ +/* + * Copyright (c) 2011-2015 ARM Limited. All rights reserved. + */ +#include "config.h" +#include "ns_types.h" +#include "ns_trace.h" +#include "string.h" +#include "Core/include/address.h" +#include "Core/include/buffer.h" +#include "Core/include/socket.h" +#include "Core/include/routing_table.h" +#include "nsdynmemLIB.h" +#include "Common_Protocols/ipv6.h" +#ifdef NVM_BORDER_ROUTER +#include "br_list_nvm_api.h" +#endif +#include "common_functions.h" + +#define TRACE_GROUP_ROUTING_TABLE "crou" + +#if ADDRESS_SIZE == 8 +#if MAX_HOP_CNT > 30 +#error "DO not set MAX_HOP_CNT over 30 reason by 8-bit size resolution" +#endif +#endif + +source_route_t *get_generated_src_route(void) +{ + return NULL; +} + +#ifdef NVM_BORDER_ROUTER +uint16_t (*route_nvm_storage_cb)(br_nvm_update_process_t) = 0; + +int8_t route_nvm_callback_set(uint16_t (*passed_fptr)(br_nvm_update_process_t), uint8_t *nvm_static_buffer) +{ + return -1; +} + +int8_t route_entry_store_from_nvm(const uint8_t *nvm_data) +{ + return -1; +} + +#endif +void route_nvm_update(route_table_entry_t *entry) +{ +} + +void route_nvm_remove(route_table_entry_t *entry) +{ +} + +void gen_route_del(route_table_entry_t *cur) +{ +} + +uint8_t gen_source_route(route_info_entry_t *info) +{ + return 0; +} + +uint8_t *gen_source_route_set(uint8_t *ptr) +{ + return NULL; +} + +route_table_entry_t *gen_route_entry_get(const uint8_t address[16]) +{ + return NULL; +} + +route_table_entry_t *gen_route_entry_get_by_iid(const uint8_t address[8]) +{ + return NULL; +} + +void gen_routing_table_init(void) +{ +} + +route_table_entry_t *gen_table_update(const uint8_t addr[16]) +{ + return NULL; +} + + +int8_t gen_source_route_allocate(uint8_t alloc) +{ + return -1; +} + + + +int8_t gen_route_exist_check(const uint8_t ipv6_address_ptr[16]) +{ + return -1; +} + + + +void gen_route_detect(route_info_entry_t *info, uint8_t forward_info) +{ +} + + +void gen_routing_ttl_update(uint8_t id) +{ +} + +void gen_routing_ttl_set_low_by_repair(uint8_t id) +{ +} + +void gen_route_remove_by_rpl_instance(uint8_t id) +{ +} + + +void gen_neighbor_ttl_update(uint8_t ttl) +{ +} + +void routing_table_print(void) +{ +} + + diff --git a/test/coap-service/unittest/stub/rpl_obj_stub.c b/test/coap-service/unittest/stub/rpl_obj_stub.c new file mode 100644 index 0000000000..95acfc9b39 --- /dev/null +++ b/test/coap-service/unittest/stub/rpl_obj_stub.c @@ -0,0 +1,392 @@ +/* + * Copyright (c) 2013-2015 ARM Limited. All rights reserved. + */ +#include "config.h" +#include +#include "ns_types.h" + +#ifdef HAVE_RPL +#include "nsdynmemLIB.h" +#include "NWK_INTERFACE/Include/protocol.h" +#include "ns_trace.h" +#include "ip6string.h" +#include "Core/include/routing_table.h" +#include "6LoWPAN/IPHC_Decode/cipv6.h" +#include "Common_Protocols/icmpv6.h" +#include "Common_Protocols/icmpv6_prefix.h" +#include "6LoWPAN/RPL/rpl.h" +#include "6LoWPAN/RPL/rpl_obj.h" +#include "net_rpl.h" +#include "6LoWPAN/ND/nd_router_object.h" +#include "6LoWPAN/Bootstraps/network_lib.h" +#include "6LoWPAN/Bootstraps/protocol_6lowpan.h" +#include "6LoWPAN/Bootstraps/protocol_6lowpan_bootstrap.h" +#include "randLIB.h" +#include "nwk_stats_api.h" +#include "NWK_INTERFACE/Include/protocol_stats.h" +#ifdef IPV6_STACK +#include "Common_Protocols/ipv6.h" +#endif +#ifdef NVM_BORDER_ROUTER +#include "br_list_nvm_api.h" +#endif + +#include "common_functions.h" + +#define TRACE_GROUP_RPL_OBJ "rplo" + +const uint8_t ADDR_LINK_LOCAL_ALL_RPL_NODES[16] = { 0xff, 0x02, [15] = 0x1a }; + +void rpl_dodag_base_init(rpl_dodag_t *new_entry); + +int8_t rpl_prefix_update(uint8_t *dptr, rpl_dodag_t *rpl_object); +static void rpl_route_list_free(route_list_t *list); +void rpl_object_release(rpl_dodag_t *router_object); +void rpl_router_object_reset(rpl_dodag_t *router_object); +//uint8_t rpl_metric_parse(buffer_t *buf); +void rpl_dodag_config_update(uint8_t *dptr, dodag_config_t *dodag_conf); +rpl_dodag_t *icmp_rpl_router_object_get(uint8_t *dodag_id, uint8_t instance_id, uint16_t rank); +rpl_dodag_t *icmp_rpl_router_object_get_by_intance(uint8_t instance_id); +uint8_t rpl_dis_build(rpl_dodag_t *cur); +uint8_t rpl_dio_tx(rpl_dodag_t *cur, uint8_t *address , protocol_interface_info_entry_t *cur_interface); +uint8_t rpl_dao_tx(rpl_dodag_t *cur, protocol_interface_info_entry_t *cur_interface); +void rpl_set_trigle_timer(rpl_dodag_t *cur , uint8_t active); +void rpl_unicast_response_allocate(rpl_dodag_t *router, uint8_t *address); +void rpl_object_print(void); +void rpl_obj_update_rank_hop(rpl_dodag_t *temp); +int8_t rpl_route_prefix_update(uint8_t len, const uint8_t *dptr, uint8_t instance_id); +void rpl_route_prefix_remove_by_rpl_instance(uint8_t id); +rpl_dodag_t *rpl_root_get_by_intance_id(uint8_t instace_id); + +#ifdef NVM_BORDER_ROUTER + +uint16_t (*rpl_nvm_storage_cb)(br_rpl_nvm_update_process_t) = 0; + +int8_t rpl_nvm_callback_set(uint16_t (*passed_fptr)(br_rpl_nvm_update_process_t), uint8_t *nvm_static_buffer) +{ + return -1; +} + +int8_t rpl_nvm_base_reload(const uint8_t *nvm_data, int8_t interface_id) +{ + return -1; +} + +int8_t rpl_prefix_store_from_nvm(const uint8_t *nvm_data, uint8_t instance_id) +{ + return -1; +} + +int8_t rpl_route_store_from_nvm(const uint8_t *nvm_data, uint8_t instance_id) +{ + return -1; +} + + + +#endif + +int8_t rpl_root_dodag_poiso_ready(uint8_t instace_id) +{ + return -1; +} + +int8_t arm_nwk_6lowpan_rpl_dodag_dao_trig(int8_t nwk_interface_id) +{ + return -1; +} + +int8_t arm_nwk_6lowpan_rpl_dodag_version_increment(int8_t nwk_interface_id) +{ + return -1; +} + +uint8_t rpl_routers_active(void) +{ + return 0; +} + +int8_t rpl_root_active(rpl_dodag_t *compare_ptr) +{ + return -1; +} + +int8_t arm_nwk_6lowpan_rpl_dodag_start(int8_t interface_id) +{ + return -1; +} + +int8_t arm_nwk_6lowpan_rpl_dodag_init(int8_t interface_id, const uint8_t *dodag_id, const dodag_config_t *config, uint8_t instace_id, uint8_t flags) +{ + return -1; +} + +int8_t rpl_root_setup_refresh(uint8_t instance_id) +{ + return -1; +} + +rpl_dodag_t *rpl_root_get_by_intance_id(uint8_t instance_id) +{ + return NULL; +} + +int8_t arm_nwk_6lowpan_rpl_dodag_poison(int8_t nwk_interface_id) +{ + return -1; +} + +int8_t arm_nwk_6lowpan_rpl_dodag_remove(int8_t interface_id) +{ + return -1; +} + + +void rpl_routers_init(void) +{ +} + +void rpl_obj_change_parent(rpl_dodag_t *temp) +{ +} + +void rpl_obj_update_rank_hop(rpl_dodag_t *temp) +{ +} + + +void rpl_obj_dao_trig(rpl_dodag_t *cur) +{ +} + +void rpl_object_release(rpl_dodag_t *router_object) +{ +} + +void rpl_router_object_reset(rpl_dodag_t *router_object) +{ +} + +rpl_dodag_t *icmp_rpl_router_object_get_by_intance(uint8_t instance_id) +{ + return NULL; +} + +void rpl_dodag_base_init(rpl_dodag_t *new_entry) +{ +} + +rpl_dodag_t *icmp_rpl_router_object_get(uint8_t *dodag_id, uint8_t instance_id, uint16_t rank) +{ + return NULL; +} + +void rpl_unicast_response_allocate(rpl_dodag_t *router, uint8_t *address) +{ +} + +void rpl_dis_handler(buffer_t *buf, bool multicast_dst) +{ +} + +buffer_t *rpl_dao_parse(buffer_t *buf) +{ + return NULL; +} + +void rpl_dao_ack_parse(uint8_t *dptr, uint16_t length, nwk_interface_id nwk_id) +{ +} + +void rpl_dio_parse(buffer_t *buf) +{ +} + +int8_t arm_nwk_6lowpan_rpl_dodag_prefix_update(int8_t nwk_interface_id, uint8_t *prefix_ptr, uint8_t prefix_len, uint8_t flags, uint32_t lifetime) +{ + return -1; +} + +int8_t rpl_prefix_update(uint8_t *dptr, rpl_dodag_t *rpl_object) +{ + return -1; +} + + +int8_t arm_nwk_6lowpan_rpl_dodag_route_update(int8_t nwk_interface_id, uint8_t *route_ptr, uint8_t prefix_len, uint8_t flags, uint32_t lifetime) +{ + return -1; +} + +rpl_dodag_t *rpl_route_longest_matches_prefix(const uint8_t *address) +{ + return NULL; +} + +void rpl_route_prefix_remove_by_rpl_instance(uint8_t id) +{ +} + +int8_t rpl_route_prefix_update(uint8_t len, const uint8_t *dptr, uint8_t instance_id) +{ + return -1; +} + +route_entry_t *rpl_root_route_update(const uint8_t *dptr, rpl_dodag_proxy_t *rpl_object) +{ + return NULL; +} + +void rpl_dodag_config_update(uint8_t *dptr, dodag_config_t *dodag_conf) +{ +} + +uint8_t rpl_dodag_object_heared(void) +{ + return 0; +} + +void rpl_dodag_root_dao_repair(void) +{ +} + + +rpl_dodag_t *rpl_dodag_root_get(nwk_interface_id nwk_id) +{ + return NULL; +} + +uint8_t rpl_dodag_cnt(void) +{ + return 0; +} + +void rpl_dodag_dao_external_timer_trig(void) +{ +} + +void rpl_router_prefix_ttl_update(rpl_dodag_t *router_object) +{ +} + +void rpl_route_prefix_route_ttl_update(uint8_t intance_id) +{ + +} + +uint16_t rpl_route_prefix_route_length(uint8_t intance_id) +{ + return 0; +} + +uint8_t *rpl_route_prefix_route_set(uint8_t *dptr , uint8_t intance_id) +{ + return NULL; +} + +void rpl_object_timer_second_update(nwk_interface_id nwk_id) +{ + +} + +void rpl_object_timer(uint8_t ticks, protocol_interface_info_entry_t *cur_interface) +{ + +} + +uint8_t rpl_object_poisons(void) +{ + return 0; +} + +void rpl_object_timer_balance(uint16_t sleep_time) +{ + +} + +uint8_t rpl_dis_build(rpl_dodag_t *cur) +{ + return 0; +} + + +uint8_t rpl_dao_tx(rpl_dodag_t *cur, protocol_interface_info_entry_t *cur_interface) +{ + return 0; +} + +uint8_t rpl_poison_req(rpl_dodag_t *cur) +{ + return 0; +} + +uint8_t rpl_host_dao_tx(rpl_dodag_t *cur, uint8_t *adr_ptr, uint8_t short_address_type) +{ + return 0; +} + +void rpl_set_trigle_timer(rpl_dodag_t *cur , uint8_t active) +{ +} + +//extern void get_suffics(uint8_t *ptr); +uint8_t rpl_dio_tx(rpl_dodag_t *cur, uint8_t *address , protocol_interface_info_entry_t *cur_interface) +{ + return 0; +} + + +uint8_t rpl_routeloop_check(rpl_loopdetect_t *loop) +{ + return 0; +} + +rpl_dodag_t *rpl_route(const uint8_t *addr, uint8_t id/*, route_info_entry_t * response*/) +{ + return NULL; +} + +rpl_dodag_t *rpl_route_by_prefix(const uint8_t *addr, bool root_is_valid) +{ + return NULL; +} + +uint8_t rpl_prefix_adr_valid_check(uint8_t *addr) +{ + return 0; +} + +uint8_t rpl_get_router_address(uint8_t *addr) +{ + return 0; +} + +uint8_t rpl_compare_parent(uint8_t *addr, rpl_dodag_t **response) +{ + return 0; +} + +void rpl_parent_remove(uint8_t *addr, protocol_interface_info_entry_t *cur_interface) +{ +} + +void rpl_object_print(void) +{ +} + +uint8_t rpl_instance_list_read(uint8_t *cache_ptr, uint8_t cache_size) +{ + return 0; +} + +uint8_t rpl_read_dodag_info(rpl_dodag_info_t *dodag_ptr, uint8_t instance_id) +{ + return 0; +} + +bool rpl_root_rank(rpl_dodag_t *cur) +{ + return false; +} + +#endif diff --git a/test/coap-service/unittest/stub/security_lib_stub.c b/test/coap-service/unittest/stub/security_lib_stub.c new file mode 100644 index 0000000000..ec78c0e316 --- /dev/null +++ b/test/coap-service/unittest/stub/security_lib_stub.c @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2013-2015 ARM Limited. All rights reserved. + */ +#include "config.h" +#include "ns_types.h" +#include "ns_trace.h" +#include "string.h" +#include "eventOS_event.h" +#include "ccmLIB.h" +#include "nsdynmemLIB.h" +#include "Core/include/socket.h" +#include "NWK_INTERFACE/Include/protocol.h" +#include "shalib.h" +#include "randLIB.h" +#ifdef ECC +#include "libX509_V3.h" +#include "ecc.h" +#endif +#include "Security/TLS/tls_lib.h" +#include "Security/Common/sec_lib.h" +#include "net_nvm_api.h" +#include "Security/PANA/pana_nvm.h" +#include "Security/PANA/pana.h" +#include "Security/PANA/pana_internal_api.h" +#include "common_functions.h" + +sec_suite_t *sec_suite_tls_session_get_by_socket_address(sockaddr_t *add, uint8_t request_by_server, int8_t socket_id) +{ + return NULL; +} + +int8_t sec_suite_set_chipher_suite_list(int8_t socket_id, uint8_t security_suites) +{ + return -1; +} diff --git a/test/coap-service/unittest/stub/shalib_stub.c b/test/coap-service/unittest/stub/shalib_stub.c new file mode 100644 index 0000000000..7aa1b9e39a --- /dev/null +++ b/test/coap-service/unittest/stub/shalib_stub.c @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2015 ARM Limited. All rights reserved. + */ + +#include +#include "shalib.h" + +void SHALIB_init_sha256(void) +{ + +} + +void SHALIB_push_data_sha256(uint8_t *data, uint16_t len) +{ + +} + +void SHALIB_finish_sha256(uint8_t *buffer, uint8_t len) +{ + +} + +void SHALIB_SHA256_HASH(uint8_t *data_ptr, uint16_t data_len, uint8_t *buffer) +{ + +} + + +void sha_resume_regs(sha256_temp_t *ptr) +{ + +} + +void sha_save_regs(sha256_temp_t *ptr) +{ + +} + +void SHALIB_init_HMAC(uint8_t *secret, uint8_t sec_len) +{ + +} + +void SHALIB_finish_HMAC(uint8_t *buffer, uint8_t len) +{ + +} + +prf_sec_param_t *shalib_prf_param_get(void) +{ + return NULL; +} + +void shalib_prf_calc(void) +{ + +} + diff --git a/test/coap-service/unittest/stub/sn_coap_builder_stub.c b/test/coap-service/unittest/stub/sn_coap_builder_stub.c new file mode 100644 index 0000000000..38e5288283 --- /dev/null +++ b/test/coap-service/unittest/stub/sn_coap_builder_stub.c @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2011-2015 ARM Limited. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 + * 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. + */ + +/** + * \file sn_coap_builder.c + * + * \brief CoAP Message builder + * + * Functionality: Builds CoAP message + * + */ + +/* * * * * * * * * * * * * * */ +/* * * * INCLUDE FILES * * * */ +/* * * * * * * * * * * * * * */ + +#include "ns_types.h" +#include "sn_coap_header.h" +#include "sn_coap_builder_stub.h" + +sn_coap_builder_stub_def sn_coap_builder_stub; + +sn_coap_hdr_s *sn_coap_build_response(struct coap_s *handle, sn_coap_hdr_s *coap_packet_ptr, uint8_t msg_code) +{ + return sn_coap_builder_stub.expectedHeader; +} + +int16_t sn_coap_builder(uint8_t *dst_packet_data_ptr, sn_coap_hdr_s *src_coap_msg_ptr) +{ + return sn_coap_builder_stub.expectedInt16; +} + +uint16_t sn_coap_builder_calc_needed_packet_data_size(sn_coap_hdr_s *src_coap_msg_ptr) +{ + return sn_coap_builder_stub.expectedUint16; +} + +int16_t sn_coap_builder_options_build_add_zero_length_option(uint8_t **dst_packet_data_pptr, uint8_t option_length, uint8_t option_exist, sn_coap_option_numbers_e option_number) +{ + return sn_coap_builder_stub.expectedInt16; +} + diff --git a/test/coap-service/unittest/stub/sn_coap_builder_stub.h b/test/coap-service/unittest/stub/sn_coap_builder_stub.h new file mode 100644 index 0000000000..6ca30584d2 --- /dev/null +++ b/test/coap-service/unittest/stub/sn_coap_builder_stub.h @@ -0,0 +1,13 @@ + +#ifndef __SN_COAP_BUILDER_STUB_H__ +#define __SN_COAP_BUILDER_STUB_H__ + +typedef struct { + int16_t expectedInt16; + uint16_t expectedUint16; + sn_coap_hdr_s *expectedHeader; +} sn_coap_builder_stub_def; + +extern sn_coap_builder_stub_def sn_coap_builder_stub; + +#endif //__SN_COAP_BUILDER_STUB_H__ diff --git a/test/coap-service/unittest/stub/sn_coap_parser_stub.c b/test/coap-service/unittest/stub/sn_coap_parser_stub.c new file mode 100644 index 0000000000..6d9e73383b --- /dev/null +++ b/test/coap-service/unittest/stub/sn_coap_parser_stub.c @@ -0,0 +1,107 @@ +/* + * Copyright (c) 2011-2015 ARM Limited. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 + * 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. + */ + +/** + *\file sn_coap_parser.c + * + * \brief CoAP Header parser + * + * Functionality: Parses CoAP Header + * + */ + +#include "ns_types.h" +#include "sn_nsdl.h" +#include "sn_coap_protocol.h" +#include "sn_coap_parser_stub.h" + +sn_coap_parser_def sn_coap_parser_stub; + +sn_coap_hdr_s *sn_coap_parser(struct coap_s *handle, uint16_t packet_data_len, uint8_t *packet_data_ptr, coap_version_e *coap_version_ptr) +{ + return sn_coap_parser_stub.expectedHeader; +} + +void sn_coap_parser_release_allocated_coap_msg_mem(struct coap_s *handle, sn_coap_hdr_s *freed_coap_msg_ptr) +{ + if (freed_coap_msg_ptr != NULL) { + if (freed_coap_msg_ptr->uri_path_ptr != NULL) { + free(freed_coap_msg_ptr->uri_path_ptr); + } + + if (freed_coap_msg_ptr->token_ptr != NULL) { + free(freed_coap_msg_ptr->token_ptr); + } + + if (freed_coap_msg_ptr->content_type_ptr != NULL) { + free(freed_coap_msg_ptr->content_type_ptr); + } + + if (freed_coap_msg_ptr->options_list_ptr != NULL) { + if (freed_coap_msg_ptr->options_list_ptr->max_age_ptr != NULL) { + free(freed_coap_msg_ptr->options_list_ptr->max_age_ptr); + } + + if (freed_coap_msg_ptr->options_list_ptr->proxy_uri_ptr != NULL) { + free(freed_coap_msg_ptr->options_list_ptr->proxy_uri_ptr); + } + + if (freed_coap_msg_ptr->options_list_ptr->etag_ptr != NULL) { + free(freed_coap_msg_ptr->options_list_ptr->etag_ptr); + } + + if (freed_coap_msg_ptr->options_list_ptr->uri_host_ptr != NULL) { + free(freed_coap_msg_ptr->options_list_ptr->uri_host_ptr); + } + + if (freed_coap_msg_ptr->options_list_ptr->location_path_ptr != NULL) { + free(freed_coap_msg_ptr->options_list_ptr->location_path_ptr); + } + + if (freed_coap_msg_ptr->options_list_ptr->uri_port_ptr != NULL) { + free(freed_coap_msg_ptr->options_list_ptr->uri_port_ptr); + } + + if (freed_coap_msg_ptr->options_list_ptr->location_query_ptr != NULL) { + free(freed_coap_msg_ptr->options_list_ptr->location_query_ptr); + } + + if (freed_coap_msg_ptr->options_list_ptr->observe_ptr != NULL) { + free(freed_coap_msg_ptr->options_list_ptr->observe_ptr); + } + + if (freed_coap_msg_ptr->options_list_ptr->uri_query_ptr != NULL) { + free(freed_coap_msg_ptr->options_list_ptr->uri_query_ptr); + } + + if (freed_coap_msg_ptr->options_list_ptr->block2_ptr != NULL) { + free(freed_coap_msg_ptr->options_list_ptr->block2_ptr); + } + + if (freed_coap_msg_ptr->options_list_ptr->block1_ptr != NULL) { + free(freed_coap_msg_ptr->options_list_ptr->block1_ptr); + } + if (freed_coap_msg_ptr->options_list_ptr->accept_ptr != NULL) { + free(freed_coap_msg_ptr->options_list_ptr->accept_ptr); + } + + free(freed_coap_msg_ptr->options_list_ptr); + } + + free(freed_coap_msg_ptr); + freed_coap_msg_ptr = NULL; + } +} diff --git a/test/coap-service/unittest/stub/sn_coap_parser_stub.h b/test/coap-service/unittest/stub/sn_coap_parser_stub.h new file mode 100644 index 0000000000..eb6f13b162 --- /dev/null +++ b/test/coap-service/unittest/stub/sn_coap_parser_stub.h @@ -0,0 +1,13 @@ + +#ifndef __SN_COAP_PARSER_STUB_H__ +#define __SN_COAP_PARSER_STUB_H__ + +#include "sn_coap_header.h" + +typedef struct { + sn_coap_hdr_s *expectedHeader; +} sn_coap_parser_def; + +extern sn_coap_parser_def sn_coap_parser_stub; + +#endif //__SN_COAP_PARSER_STUB_H__ diff --git a/test/coap-service/unittest/stub/sn_coap_protocol_stub.c b/test/coap-service/unittest/stub/sn_coap_protocol_stub.c new file mode 100644 index 0000000000..6687e41142 --- /dev/null +++ b/test/coap-service/unittest/stub/sn_coap_protocol_stub.c @@ -0,0 +1,96 @@ +/* + * Copyright (c) 2011-2015 ARM. All rights reserved. + */ + + +#include +#include /* For libary malloc() */ +#include /* For memset() and memcpy() */ +#ifdef __linux__ +#include +#endif + +#include "ns_types.h" +#include "sn_nsdl.h" +#include "sn_coap_protocol.h" +#include "sn_coap_header_internal.h" +#include "sn_coap_protocol_internal.h" +#include "sn_coap_protocol_stub.h" + +uint16_t sn_coap_block_data_size = 0; + +uint8_t sn_coap_resending_queue_msgs = 0; +uint8_t sn_coap_resending_queue_bytes = 0; +uint8_t sn_coap_resending_count = 0; +uint8_t sn_coap_resending_intervall = 0; + +uint8_t sn_coap_duplication_buffer_size = 0; + +sn_coap_protocol_stub_def sn_coap_protocol_stub; + +int8_t sn_coap_protocol_destroy(struct coap_s *handle) +{ + return sn_coap_protocol_stub.expectedInt8; +} + +struct coap_s *sn_coap_protocol_init(void *(*used_malloc_func_ptr)(uint16_t), void (*used_free_func_ptr)(void *), + uint8_t (*used_tx_callback_ptr)(uint8_t *, uint16_t, sn_nsdl_addr_s *, void *), + int8_t (*used_rx_callback_ptr)(sn_coap_hdr_s *, sn_nsdl_addr_s *, void *param)) +{ + if( sn_coap_protocol_stub.expectedCoap ){ + sn_coap_protocol_stub.expectedCoap->sn_coap_protocol_free = used_free_func_ptr; + sn_coap_protocol_stub.expectedCoap->sn_coap_protocol_malloc = used_malloc_func_ptr; + sn_coap_protocol_stub.expectedCoap->sn_coap_rx_callback = used_rx_callback_ptr; + sn_coap_protocol_stub.expectedCoap->sn_coap_tx_callback = used_tx_callback_ptr; + } + return sn_coap_protocol_stub.expectedCoap; +} + +int8_t sn_coap_protocol_set_block_size(uint16_t block_size) +{ + return sn_coap_protocol_stub.expectedInt8; +} + +int8_t sn_coap_protocol_set_duplicate_buffer_size(uint8_t message_count) +{ + return sn_coap_protocol_stub.expectedInt8; +} + +int8_t sn_coap_protocol_set_retransmission_parameters(uint8_t resending_count, uint8_t resending_intervall) +{ + return sn_coap_protocol_stub.expectedInt8; +} + +int8_t sn_coap_protocol_set_retransmission_buffer(uint8_t buffer_size_messages, uint16_t buffer_size_bytes) +{ + return sn_coap_protocol_stub.expectedInt8; +} + +void sn_coap_protocol_clear_retransmission_buffer(struct coap_s *handle) +{ +} + + +int16_t sn_coap_protocol_build(struct coap_s *handle, sn_nsdl_addr_s *dst_addr_ptr, + uint8_t *dst_packet_data_ptr, sn_coap_hdr_s *src_coap_msg_ptr, void *param) +{ + //TODO: check if needed here + src_coap_msg_ptr->msg_id = 2; + return sn_coap_protocol_stub.expectedInt16; +} + +sn_coap_hdr_s *sn_coap_protocol_parse(struct coap_s *handle, sn_nsdl_addr_s *src_addr_ptr, uint16_t packet_data_len, uint8_t *packet_data_ptr, void *param) +{ + return sn_coap_protocol_stub.expectedHeader; +} + +int8_t sn_coap_protocol_exec(struct coap_s *handle, uint32_t current_time) +{ + return sn_coap_protocol_stub.expectedInt8; +} + +coap_send_msg_s *sn_coap_protocol_allocate_mem_for_msg(struct coap_s *handle, sn_nsdl_addr_s *dst_addr_ptr, uint16_t packet_data_len) +{ + return sn_coap_protocol_stub.expectedSendMsg; +} + diff --git a/test/coap-service/unittest/stub/sn_coap_protocol_stub.h b/test/coap-service/unittest/stub/sn_coap_protocol_stub.h new file mode 100644 index 0000000000..73f10d6987 --- /dev/null +++ b/test/coap-service/unittest/stub/sn_coap_protocol_stub.h @@ -0,0 +1,18 @@ + +#ifndef __SN_COAP_PROTOCOL_STUB_H__ +#define __SN_COAP_PROTOCOL_STUB_H__ + +#include "sn_coap_header_internal.h" +#include "sn_coap_protocol_internal.h" + +typedef struct { + int8_t expectedInt8; + int16_t expectedInt16; + struct coap_s *expectedCoap; + sn_coap_hdr_s *expectedHeader; + coap_send_msg_s *expectedSendMsg; +} sn_coap_protocol_stub_def; + +extern sn_coap_protocol_stub_def sn_coap_protocol_stub; + +#endif //__SN_COAP_PROTOCOL_STUB_H__ diff --git a/test/coap-service/unittest/stub/socket_api_stub.c b/test/coap-service/unittest/stub/socket_api_stub.c new file mode 100644 index 0000000000..62304deb1b --- /dev/null +++ b/test/coap-service/unittest/stub/socket_api_stub.c @@ -0,0 +1,118 @@ +/* + * Copyright (c) 2015 ARM Limited. All rights reserved. + */ +#include "socket_api.h" +#include "socket_api_stub.h" + +socket_api_stub_data_t socket_api_stub; + +int8_t socket_raw_open(void (*passed_fptr)(void *)) +{ + if( socket_api_stub.counter >= 0){ + return socket_api_stub.values[socket_api_stub.counter--]; + } + + return socket_api_stub.int8_value; +} +int8_t socket_open(uint8_t protocol, uint16_t identifier, void (*passed_fptr)(void *)) +{ + socket_api_stub.recv_cb = passed_fptr; + if( socket_api_stub.counter >= 0){ + return socket_api_stub.values[socket_api_stub.counter--]; + } + + return socket_api_stub.int8_value; +} + +int8_t socket_free(int8_t socket) +{ + if( socket_api_stub.counter >= 0){ + return socket_api_stub.values[socket_api_stub.counter--]; + } + + return socket_api_stub.int8_value; +} +int8_t socket_listen(int8_t socket) +{ + if( socket_api_stub.counter >= 0){ + return socket_api_stub.values[socket_api_stub.counter--]; + } + + return socket_api_stub.int8_value; +} +int8_t socket_connect(int8_t socket, ns_address_t *address, uint8_t randomly_take_src_number) +{ + if( socket_api_stub.counter >= 0){ + return socket_api_stub.values[socket_api_stub.counter--]; + } + + return socket_api_stub.int8_value; +} +int8_t socket_bind(int8_t socket, const ns_address_t *address) +{ + if( socket_api_stub.counter >= 0){ + return socket_api_stub.values[socket_api_stub.counter--]; + } + + return socket_api_stub.int8_value; +} +int8_t socket_close(int8_t socket, ns_address_t *address) +{ + if( socket_api_stub.counter >= 0){ + return socket_api_stub.values[socket_api_stub.counter--]; + } + + return socket_api_stub.int8_value; +} +int8_t socket_send(int8_t socket, uint8_t *buffer, uint16_t length) +{ + if( socket_api_stub.counter >= 0){ + return socket_api_stub.values[socket_api_stub.counter--]; + } + + return socket_api_stub.int8_value; +} +int16_t socket_read(int8_t socket, ns_address_t *address, uint8_t *buffer, uint16_t length) +{ + if( address ){ + memset(&address->address, 0, 16); + address->identifier = 0; + } + if( socket_api_stub.counter >= 0){ + return socket_api_stub.values[socket_api_stub.counter--]; + } + + return socket_api_stub.int8_value; +} +int8_t socket_sendto(int8_t socket, ns_address_t *address, uint8_t *buffer, uint16_t length) +{ + if( socket_api_stub.counter >= 0){ + return socket_api_stub.values[socket_api_stub.counter--]; + } + + return socket_api_stub.int8_value; +} +int8_t socket_read_session_address(int8_t socket, ns_address_t *address) +{ + if( socket_api_stub.counter >= 0){ + return socket_api_stub.values[socket_api_stub.counter--]; + } + + return socket_api_stub.int8_value; +} +int8_t socket_setsockopt(int8_t socket, uint8_t level, uint8_t opt_name, const void *opt_value, uint16_t opt_len) +{ + if( socket_api_stub.counter >= 0){ + return socket_api_stub.values[socket_api_stub.counter--]; + } + + return socket_api_stub.int8_value; +} +int8_t socket_getsockopt(int8_t socket, uint8_t level, uint8_t opt_name, void *opt_value, uint16_t *opt_len) +{ + if( socket_api_stub.counter >= 0){ + return socket_api_stub.values[socket_api_stub.counter--]; + } + + return socket_api_stub.int8_value; +} diff --git a/test/coap-service/unittest/stub/socket_api_stub.h b/test/coap-service/unittest/stub/socket_api_stub.h new file mode 100644 index 0000000000..195d5eb86f --- /dev/null +++ b/test/coap-service/unittest/stub/socket_api_stub.h @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2015 ARM Limited. All rights reserved. + */ +#ifndef __SOCKET_API_STUB_H__ +#define __SOCKET_API_STUB_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +#include "stdint.h" + +typedef struct { + void (*recv_cb)(void *); + int8_t int8_value; + int counter; + int values[10]; +} socket_api_stub_data_t; + +extern socket_api_stub_data_t socket_api_stub; + +#ifdef __cplusplus +} +#endif + +#endif //__SOCKET_API_STUB_H__ + + + + + diff --git a/test/coap-service/unittest/stub/socket_stub.c b/test/coap-service/unittest/stub/socket_stub.c new file mode 100644 index 0000000000..f67c261bde --- /dev/null +++ b/test/coap-service/unittest/stub/socket_stub.c @@ -0,0 +1,93 @@ +/* + * Copyright (c) 2015 ARM Limited. All rights reserved. + */ +#include +#include +#include "socket.h" +#include "ns_error_types.h" +#include "buffer.h" +#include "socket.h" +#include "sec_lib_definitions.h" +#include "tcp.h" +#include "socket_stub.h" + +NS_LARGE socket_t socket_instance[SOCKETS_MAX] = {0}; +socket_stub_data_t socket_stub_data = { + 0, // socket_id + eOK // err code +}; + +inet_pcb_t inet_pcb[SOCKETS_MAX]; + +static buffer_t stub_socket_buffer = {0}; + +socket_stub_data_t *socket_stub_get_test_data(void) +{ + socket_stub_clear_sockets(); + socket_stub_data.socket_id = 0; + socket_stub_data.err = eOK; + return &socket_stub_data; +} + +void socket_stub_clear_sockets() +{ + int i; + for (i = 0; i < SOCKETS_MAX; i++) { + memset(&socket_instance[i], 0, sizeof(socket_t)); + memset(&inet_pcb[i], 0, sizeof(inet_pcb_t)); + } +} + +void socket_init(void) +{ +} + +error_t socket_release(int8_t sid) +{ + return socket_stub_data.err; +} + +error_t socket_port_validate(uint16_t port, uint8_t socket_type) +{ + return socket_stub_data.err; +} + +error_t socket_create(int8_t *sid, uint16_t port, uint8_t type, void (*passed_fptr)(void *), uint8_t buffer_type) +{ + if (eOK == socket_stub_data.err) { + *sid = socket_stub_data.socket_id; + socket_instance[socket_stub_data.socket_id].type = type; + socket_instance[socket_stub_data.socket_id].fptr = passed_fptr; + socket_instance[socket_stub_data.socket_id].inet_pcb = &inet_pcb[socket_stub_data.socket_id]; + } + return socket_stub_data.err; +} + +int8_t socket_buffer_sendto(int8_t sid, buffer_t *buf) +{ + return 0; +} + +buffer_t *socket_buffer_read(int8_t sid) +{ + return &stub_socket_buffer; +} + +void *socket_event_session_read(int8_t sid) +{ + return NULL; +} + +void socket_set_buffer_hop_limit(int8_t sid, buffer_t *buf) +{ +} + +struct protocol_interface_info_entry *socket_interface_determine(int8_t socket_id, buffer_t *buf) { + return NULL; +} + +buffer_t *socket_tx_buffer_check(buffer_t *buf, uint8_t status) +{ + return NULL; +} + diff --git a/test/coap-service/unittest/stub/socket_stub.h b/test/coap-service/unittest/stub/socket_stub.h new file mode 100644 index 0000000000..f5ce0e2b36 --- /dev/null +++ b/test/coap-service/unittest/stub/socket_stub.h @@ -0,0 +1,24 @@ +/* + * Copyright (c) 2015 ARM Limited. All rights reserved. + */ +#ifndef __SOCKET_STUB_H__ +#define __SOCKET_STUB_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +#include "stdint.h" + +typedef struct { + uint8_t socket_id; // socket id returned when socket created + error_t err; // socket error returned by the socket call +} socket_stub_data_t; + +socket_stub_data_t *socket_stub_get_test_data(void); + +#ifdef __cplusplus +} +#endif + +#endif //__SOCKET_STUB_H__ diff --git a/test/coap-service/unittest/stub/system_timer_stub.c b/test/coap-service/unittest/stub/system_timer_stub.c new file mode 100644 index 0000000000..2cb47185d9 --- /dev/null +++ b/test/coap-service/unittest/stub/system_timer_stub.c @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2014-2015 ARM Limited. All rights reserved. + */ +#include "ns_types.h" +#include "timer_sys.h" +#include "platform/arm_hal_interrupt.h" +#include "platform/ns_debug.h" +#include "ns_timer.h" +#include "nsdynmemLIB.h" +#include "eventOS_event.h" +#include "eventOS_callback_timer.h" + +#ifndef ST_MAX +#define ST_MAX 6 +#endif + +#define TIMER_SYS_TICK_PERIOD 100 + +void timer_sys_init(void) +{ +} + +void timer_sys_disable(void) +{ + +} + +int8_t timer_sys_wakeup(void) +{ + return 0; +} + +uint32_t timer_get_runtime_ticks(void) // only used in dev_stats_internal.c +{ + return 0; +} + + + +int8_t eventOS_event_timer_request(uint8_t snmessage, uint8_t event_type, int8_t tasklet_id, uint32_t time) +{ + return -1; +} + +int8_t eventOS_event_timer_cancel(uint8_t snmessage, int8_t tasklet_id) +{ + return -1; +} + + +uint32_t eventOS_event_timer_shortest_active_timer(void) +{ + return 0; +} + +void system_timer_tick_update(uint32_t ticks) +{ +} + diff --git a/test/coap-service/unittest/stub/tcp_stub.c b/test/coap-service/unittest/stub/tcp_stub.c new file mode 100644 index 0000000000..7b29a331a6 --- /dev/null +++ b/test/coap-service/unittest/stub/tcp_stub.c @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2015 ARM Limited. All rights reserved. + */ +#include +#include +#include "net_interface.h" +#include "buffer.h" +#include "sec_lib_definitions.h" +#include "tcp.h" + +static tcp_session_t stub_tcp_session; + +void tcp_segment_init(tcp_session_t *tcp_info, buffer_t *buf) +{ +} + +tcp_error tcp_close(tcp_session_t *tcp_session, uint8_t close_tls) +{ + return TCP_ERROR_NO_ERROR; +} + +tcp_session_t *tcp_session_ptr_allocate(uint8_t socket_id) +{ + + return &stub_tcp_session; +} + +tcp_session_t *tcp_session_ptr_get(sockaddr_t *addr_ptr, uint8_t socket_id) +{ + return &stub_tcp_session; +} + +int8_t tcp_session_removed(tcp_session_t *cur) +{ + return 0; +} + +tcp_error tcp_socket_connect(tcp_session_t *tcp_session, sockaddr_t *dst_addr) +{ + return TCP_ERROR_NO_ERROR; +} + +int8_t tcp_socket_tx_check(tcp_session_t *tcp_info) +{ + return 0; +} + +buffer_t *tcp_tls_encrypt(buffer_t *buf, uint8_t socket_id) +{ + return NULL; +} + +tcp_error tcp_socket_close(tcp_session_t *tcp_session) { + return TCP_ERROR_NO_ERROR; +} + diff --git a/test/coap-service/unittest/stub/thread_beacon_stub.c b/test/coap-service/unittest/stub/thread_beacon_stub.c new file mode 100644 index 0000000000..374e479a3c --- /dev/null +++ b/test/coap-service/unittest/stub/thread_beacon_stub.c @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2015 ARM. All rights reserved. + */ + +#include "config.h" + +#include "thread_beacon.h" +#include "thread_config.h" +#include "common_functions.h" +#include "thread_meshcop_lib.h" +#include +#include "ns_trace.h" +/*service lib includes */ +#include "Service_Libs/utils/crc.h" +#define TRACE_GROUP "Tbcn" + +#define THREAD_BEACON_VERSION_SHIFT 4 +#define THREAD_BEACON_JOINING_PERMITTED_BIT 0x01 +#define THREAD_BEACON_NATIVE_COMMISSIONER_BIT 0x08 + +int thread_beacon_get_protocol(uint8_t *data_ptr, uint8_t data_len) +{ + return 0; +} +int thread_beacon_get_protocol_version(uint8_t *data_ptr, uint8_t data_len) +{ + return 0; +} +uint16_t thread_beacon_get_joiner_port(uint8_t *data_ptr, uint8_t data_len) +{ + return 0; +} + +uint16_t thread_beacon_get_commissioning_port(uint8_t *data_ptr, uint8_t data_len) +{ + return 0; +} +bool thread_beacon_native_commissioning_allowed(uint8_t *data_ptr, uint8_t data_len) +{ + return false; +} +bool thread_beacon_joining_permitted(uint8_t *data_ptr, uint8_t data_len) +{ + return false; +} + +int thread_beacon_get_name(uint8_t *data_ptr, uint8_t data_len, uint8_t *result_ptr) +{ + return 16; +} +int thread_beacon_get_xpanid(uint8_t *data_ptr, uint8_t data_len, uint8_t *result_ptr) +{ + return 8; +} +uint8_t *thread_beacon_get_steering_data(uint8_t *data_ptr, uint8_t data_len,uint8_t *result_length) +{ + return NULL; +} + + +uint8_t *thread_beacon_calculate_bloom_filter(uint8_t *bloom_filter_ptr,uint8_t bloom_filter_length, uint8_t *joiner_id_ptr, int joiner_id_length) +{ + return NULL; +} + diff --git a/test/coap-service/unittest/stub/thread_bootstrap_stub.c b/test/coap-service/unittest/stub/thread_bootstrap_stub.c new file mode 100644 index 0000000000..0d9ea54bea --- /dev/null +++ b/test/coap-service/unittest/stub/thread_bootstrap_stub.c @@ -0,0 +1,248 @@ +/* + * Copyright (c) 2014-2015 ARM Limited. All rights reserved. + */ + +/* + * \file thread_bootstrap.c + * \brief Add short description about this file!!! + * + */ +#include "config.h" +#include +#include +#include +#include "eventOS_event.h" +#include "eventOS_event_timer.h" +#include "randLIB.h" +#include "common_functions.h" +#include "NWK_INTERFACE/Include/protocol.h" +#include "net_thread_test.h" +#include "libDHCPv6/libDHCPv6.h" +#include "libDHCPv6/libDHCPv6_server.h" +#include "ns_trace.h" +#include "6LoWPAN/Bootstraps/protocol_6lowpan.h" +#include "6LoWPAN/Thread/thread.h" +#include "6LoWPAN/Thread/thread_routing.h" +#include "6LoWPAN/Thread/thread_nd.h" +#include "6LoWPAN/Thread/thread_bootstrap.h" +#include "6LoWPAN/Thread/thread_routerid_server.h" +#include "6LoWPAN/Thread/thread_management_internal.h" +#include "6LoWPAN/Thread/thread_dynamic_reed.h" +#include "6LoWPAN/Thread/thread_joiner_application.h" +#include "MAC/IEEE802_15_4/mac_data_interface.h" +#include "MAC/IEEE802_15_4/mac_security_interface.h" +#include "MAC/IEEE802_15_4/mac_data_poll.h" +#include "MAC/IEEE802_15_4/mac_mlme.h" +#include "thread_management_if.h" +#include "Common_Protocols/ipv6.h" +#include "Common_Protocols/icmpv6.h" +#include "Common_Protocols/icmpv6_radv.h" +#include "MLE/mle.h" +#include "dhcp_service_api.h" +#include "thread_dhcpv6_client.h" + + +#define TRACE_GROUP "thbs" + +void threa_ula_address_generate_and_push_to_stack(protocol_interface_info_entry_t *cur); +int thread_bootstrap_reset(protocol_interface_info_entry_t *cur); +static void thread_mle_challenge_trig(int8_t interface_id, uint8_t *LinkId); + +void thread_bootstrap_attached_active_router(protocol_interface_info_entry_t *cur); +void thread_attach_router_id_request(protocol_interface_info_entry_t *cur); +void thread_bootstrap_attached_finish(protocol_interface_info_entry_t *cur); +void thread_bootstrap_child_id_handler(protocol_interface_info_entry_t *cur); +void thread_attach_router_id_release_done(protocol_interface_info_entry_t *cur); +void thread_attach_router_id_release(protocol_interface_info_entry_t *cur); + +int8_t nwk_thread_host_control(protocol_interface_info_entry_t *cur, net_host_mode_t mode) +{ + return 0; +} + +int thread_link_configuration_activate(protocol_interface_info_entry_t *cur, link_configuration_s *linkConfiguration) +{ + return 0; +} + +void thread_interface_init(protocol_interface_info_entry_t *cur) +{ +} + +void thread_tasklet(arm_event_s *event) +{ +} + +int thread_bootstrap_tasklet_init(protocol_interface_info_entry_t *cur) +{ + return 0; +} + +void thread_clean_old_16_bit_address_based_addresses(protocol_interface_info_entry_t *cur) +{ +} + + +void thread_bootstrap_ready(protocol_interface_info_entry_t *cur) +{ +} + +int thread_leader_configure_init(protocol_interface_info_entry_t *cur) +{ + return 0; +} + +int thread_bootstrap_attach_start(int8_t nwk_interface_id, thread_bootsrap_state_type_e state) +{ + return 0; +} + +void thread_bootstrap_leader_data_free(thread_info_t *thread_info, int8_t bootstrap) +{ +} + +void thread_bootsrap_generate_thread_partitition(int8_t interface_id, bool newPartition) +{ +} + +void thread_bootstrap_generate_leader_and_link(int8_t interface_id) +{ +} + +void thread_bootstrap_connection_error(int8_t interface_id, nwk_connect_error_types errorType, uint8_t *LinkId) +{ +} + +void thread_bootsrap_router_id_cb(int8_t interface_id, uint8_t *ml16_address, uint8_t router_id, const uint8_t *router_mask_ptr) +{ +} + +void thread_interface_up(protocol_interface_info_entry_t *cur) +{ +} + +int thread_bootstrap_reset(protocol_interface_info_entry_t *cur) +{ + return 0; +} + +void thread_network_attach_start(protocol_interface_info_entry_t *cur) +{ +} + +void threa_ula_address_generate_and_push_to_stack(protocol_interface_info_entry_t *cur) +{ +} + +void thread_bootstrap_attached_ready(protocol_interface_info_entry_t *cur) +{ +} + +void thread_bootstrap_attached_downgrade_router(protocol_interface_info_entry_t *cur) +{ +} + +void thread_bootstrap_attched_upgrade_reed(protocol_interface_info_entry_t *cur) +{ +} + +void thread_bootstrap_attched_active_router(protocol_interface_info_entry_t *cur) +{ +} + +void thread_bootstrap_router_id_release_ready(protocol_interface_info_entry_t *cur) +{ +} + +void thread_bootstrap_router_id_get_fail(protocol_interface_info_entry_t *cur) +{ +} + +int8_t thread_bootstrap_child_id_request(protocol_interface_info_entry_t *cur) +{ + return 0; +} + +void thread_bootstrap_child_id_handler(protocol_interface_info_entry_t *cur) +{ +} + +void thread_bootstrap_attached_active_router(protocol_interface_info_entry_t *cur) +{ +} + +void thread_bootstrap_attached_finish(protocol_interface_info_entry_t *cur) +{ +} + +void thread_attach_router_id_release(protocol_interface_info_entry_t *cur) +{ +} + + +void thread_attach_router_id_release_done(protocol_interface_info_entry_t *cur) +{ +} + +void thread_attach_router_id_request(protocol_interface_info_entry_t *cur) +{ +} + +bool thread_bootstrap_trig_reed_upgrade(protocol_interface_info_entry_t *cur) +{ + return false; +} + +bool thread_bootstrap_trig_router_downgrade(protocol_interface_info_entry_t *cur) +{ + return false; +} + +void thread_parent_scan(protocol_interface_info_entry_t *cur) +{ +} + +int thread_set_link_for_commission(protocol_interface_info_entry_t *interface, nwk_pan_descriptor_t *best) +{ + return 0; +} + +void thread_mac_active_scan_response(uint8_t *data) +{ +} + +void thread_bootstrap_state_machine(protocol_interface_info_entry_t *cur) +{ +} + +void thread_bootstrap_stop(protocol_interface_info_entry_t *cur) +{ +} + +void thread_bootstrap_address_register(protocol_interface_info_entry_t *cur) +{ +} + +void thread_bootstrap_child_update_trig(protocol_interface_info_entry_t *cur) +{ +} + +void thread_bootstrap_global_leader_data(thread_info_t *thread_info) +{ + +} + +bool thread_tlv_request(int8_t interface_id, uint8_t *address, uint8_t *req_tlv, uint8_t req_len) +{ + return false; +} + +int thread_router_mle_advertise(struct protocol_interface_info_entry *cur) +{ + return 0; +} + +uint8_t *thread_leader_data_tlv_write(uint8_t *ptr, struct thread_leader_data_s *leader_data) +{ + return NULL; +} diff --git a/test/coap-service/unittest/stub/thread_commissioning_if_stub.c b/test/coap-service/unittest/stub/thread_commissioning_if_stub.c new file mode 100644 index 0000000000..b89aedd1d3 --- /dev/null +++ b/test/coap-service/unittest/stub/thread_commissioning_if_stub.c @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2014-2015 ARM Limited. All rights reserved. + */ +#include "ns_types.h" +#include +#include +#include +#include +#include "ns_trace.h" +#include "Core/include/buffer.h" +#include "common_functions.h" +#include "NWK_INTERFACE/Include/protocol.h" +#include "6LoWPAN/Thread/thread.h" +#include "6LoWPAN/Thread/thread_management_internal.h" +#include "6LoWPAN/Thread/thread_joiner_application.h" +#include "MAC/IEEE802_15_4/mac_pairwise_key.h" +#include "MAC/IEEE802_15_4/mac_security_interface.h" + +#include "net_interface.h" // TODO remove when fixing properly +#include "thread_commissioning_if.h" +#include "randLIB.h" + +#define TRACE_GROUP "thrC" + +int thread_commissioning_if_steering_data_set(int8_t interface_id, uint8_t *buf_ptr, uint16_t length) +{ + return 0; +} + +int thread_commissioning_if_register(int8_t interface_id, uint8_t border_router_address[static 16], uint8_t *commissioner_id_ptr, uint16_t commissioner_id_len, uint16_t *session_id) +{ + return 0; +} + +bool thread_commissioning_if_session_refresh(int8_t interface_id, uint16_t session_id) +{ + return true; +} + +int thread_commissioning_if_pairwise_key_add(int8_t interface_id, uint32_t valid_life_time, uint8_t eui64[8], uint8_t key[16]) +{ + return 0; +} + +int thread_commissioning_if_pairwise_key_delete_all(int8_t interface_id) +{ + return 0; +} + +int thread_commissioning_if_border_router_locator_get(int8_t interface_id, uint8_t *address_ptr) +{ + return 0; +} + +int thread_commissioning_if_enable_security(int8_t interface_id) +{ + return 0; +} + +char* thread_commissioning_if_commissioner_id_get(int8_t interface_id) +{ + return NULL; +} +bool thread_commissioning_if_unregister(int8_t interface_id, uint16_t session_id) +{ + return true; +} diff --git a/test/coap-service/unittest/stub/thread_dhcpv6_client_stub.c b/test/coap-service/unittest/stub/thread_dhcpv6_client_stub.c new file mode 100644 index 0000000000..c0c0d26a8b --- /dev/null +++ b/test/coap-service/unittest/stub/thread_dhcpv6_client_stub.c @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2013-2015 ARM Limited. All rights reserved. + */ + +#include +#include +#include +#include "nsdynmemLIB.h" +#include "ns_list.h" +#include "common_functions.h" + + +#include "dhcp_service_api.h" +#include "thread_dhcpv6_client.h" +#include "libDHCPv6/libDHCPv6.h" +#include "NWK_INTERFACE/Include/protocol.h" +#include "6LoWPAN/Thread/thread.h" +#include "6LoWPAN/Thread/thread_bootstrap.h" + + +typedef struct { + thread_dhcp_client_global_adress_cb *global_address_cb; + uint16_t service_instance; + uint8_t libDhcp_instance; + int8_t interface; +} thread_dhcp_client_class_t; + +thread_dhcp_client_class_t dhcp_client; + +extern uint8_t *dhcpv6_vendor_code_parse_thread_router_id(uint8_t *ptr, uint16_t data_length); +void thread_dhcpv6_client_set_address(int8_t interface_id, dhcpv6_client_server_data_t *srv_data_ptr); + + +void thread_dhcp_client_init(int8_t interface) +{ +} + +void thread_dhcp_client_delete(int8_t interface) +{ +} + +void thread_dhcpv6_client_send_error_cb(dhcpv6_client_server_data_t *srv_data_ptr) +{ +} + + +/* solication responce received for either global address or routter id assignment */ +int dhcp_solicit_resp_cb(uint16_t instance_id, void *ptr, uint8_t msg_name, uint8_t *msg_ptr, uint16_t msg_len) +{ + return 0; +} + +int thread_dhcp_client_get_global_address(int8_t interface, uint8_t dhcp_addr[__static 16], uint8_t prefix[__static 16], uint8_t mac64[__static 8], thread_dhcp_client_global_adress_cb *error_cb) +{ + return 0; +} + +void thread_dhcp_client_global_address_renew(int8_t interface) +{ +} + +void thread_dhcp_client_global_address_delete(int8_t interface, uint8_t dhcp_addr[static 16], uint8_t prefix[static 16]) +{ +} + +void thread_dhcpv6_renew(protocol_interface_info_entry_t *interface, if_address_entry_t *addr, if_address_callback_t reason) +{ +} + +void thread_dhcpv6_client_set_address(int8_t interface_id, dhcpv6_client_server_data_t *srv_data_ptr) +{ +} + +uint8_t *dhcpv6_vendor_code_parse_thread_router_id(uint8_t *ptr, uint16_t data_length) +{ + return NULL; +} diff --git a/test/coap-service/unittest/stub/thread_dynamic_reed_stub.c b/test/coap-service/unittest/stub/thread_dynamic_reed_stub.c new file mode 100644 index 0000000000..7b18368432 --- /dev/null +++ b/test/coap-service/unittest/stub/thread_dynamic_reed_stub.c @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2015 ARM Limited. All rights reserved. + */ + +/* + * \file thread_dynamic_reed.c + * + */ +#include "config.h" +#include "string.h" +#include "ns_types.h" +#include "ns_trace.h" +#include "6LoWPAN/Thread/thread_dynamic_reed.h" + +bool thread_dynamic_reed_upgrade(uint8_t activeRouterCnt, uint8_t routerUpgradeThreshold) +{ + return false; +} + +bool thread_dynamic_reed_downgrade(uint8_t childCount, uint8_t goodLinkCount, uint8_t activeRouterCnt, bool possibleDefaultRouter, uint8_t routerDowngradeThreshold, uint8_t minNeighborsThreshold) +{ + return false; +} + +void thread_dynamic_reed_initialize(thread_router_select_t *routerSelect) +{ +} + +uint32_t thread_dynamic_reed_timeout_calculate(thread_router_select_t *routerSelect) +{ + return 0; +} diff --git a/test/coap-service/unittest/stub/thread_host_bootstrap_stub.c b/test/coap-service/unittest/stub/thread_host_bootstrap_stub.c new file mode 100644 index 0000000000..ae639a379f --- /dev/null +++ b/test/coap-service/unittest/stub/thread_host_bootstrap_stub.c @@ -0,0 +1,87 @@ +/* + * Copyright (c) 2015 ARM Limited. All rights reserved. + */ + +/* + * \file thread_host_bootstrap.c + * \brief Add short description about this file!!! + * + */ + +#include "config.h" +#include +#include +#include +#include "eventOS_event.h" +#include "eventOS_event_timer.h" +#include "randLIB.h" +#include "shalib.h" +#include "common_functions.h" +#include "NWK_INTERFACE/Include/protocol.h" +#include "net_thread_test.h" +#include "ns_trace.h" +#include "6LoWPAN/Bootstraps/protocol_6lowpan.h" +#include "6LoWPAN/Thread/thread.h" +#include "6LoWPAN/Thread/thread_routing.h" +#include "6LoWPAN/Thread/thread_nd.h" +#include "6LoWPAN/Thread/thread_bootstrap.h" +#include "6LoWPAN/Thread/thread_host_bootstrap.h" +#include "6LoWPAN/Thread/thread_management_internal.h" +#include "6LoWPAN/Thread/thread_network_synch.h" +#include "6LoWPAN/Thread/thread_joiner_application.h" +#include "6LoWPAN/Thread/thread_management_internal.h" +#include "6LoWPAN/Thread/thread_management_client.h" +#include "6LoWPAN/Thread/thread_network_data_lib.h" +#include "MAC/IEEE802_15_4/mac_data_interface.h" +#include "MAC/IEEE802_15_4/mac_data_poll.h" +#include "MAC/IEEE802_15_4/mac_security_interface.h" +#include "MAC/IEEE802_15_4/mac_data_poll.h" +#include "MAC/IEEE802_15_4/mac_mlme.h" +#include "thread_management_if.h" +#include "Common_Protocols/ipv6.h" +#include "MLE/mle.h" +#include "MLE/mle_tlv.h" +#include "thread_config.h" +#include "Service_Libs/mle_service/mle_service_api.h" + +#define TRACE_GROUP "tebs" + + + +void thread_child_set_default_route(protocol_interface_info_entry_t *cur) +{ + +} + +void thread_network_attach_start(protocol_interface_info_entry_t *cur) +{ + +} + + +void thread_bootstrap_end_device_synch_finish(protocol_interface_info_entry_t *cur) +{ + +} + + +void thread_mle_parent_discover_receive_cb(int8_t interface_id, mle_message_t *mle_msg, mac_aux_security_header_t *security_headers) +{ + +} + +void thread_mle_connected_host_receive_cb(int8_t interface_id, mle_message_t *mle_msg, mac_aux_security_header_t *security_headers) +{ + +} + + +void thread_endevice_synch_start(protocol_interface_info_entry_t *cur) +{ +} + +int8_t thread_bootstrap_child_update(protocol_interface_info_entry_t *cur) +{ + return 0; +} + diff --git a/test/coap-service/unittest/stub/thread_joiner_application_stub.c b/test/coap-service/unittest/stub/thread_joiner_application_stub.c new file mode 100644 index 0000000000..4e122a3c11 --- /dev/null +++ b/test/coap-service/unittest/stub/thread_joiner_application_stub.c @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2014-2015 ARM Limited. All rights reserved. + */ + + +#include +#include "ns_list.h" +#include "ns_trace.h" +#include "nsdynmemLIB.h" +#include "common_functions.h" +#include "thread_tmfcop_lib.h" +#include "shalib.h" + +#include "thread_management_if.h" +#include "thread_config.h" +#include "thread_meshcop_lib.h" +#include "thread_commissioning_if.h" +#include "thread_joiner_application.h" + +#define TRACE_GROUP TRACE_GROUP_THREAD_JOINER_APPLICATION + +link_configuration_s *link_configuration_create(void) +{ + return NULL; +} + +void link_configuration_delete(link_configuration_s *this) +{ +} + +void link_configuration_copy(link_configuration_s *this, link_configuration_s *configuration_ptr) +{ +} + +int thread_joiner_application_init(int8_t interface_id, device_configuration_s *device_configuration_ptr, struct link_configuration *static_configuration_ptr) +{ + return 0; +} + +void thread_joiner_application_deinit(int8_t interface_id) +{ +} + +link_configuration_s *thread_joiner_application_get_config(int8_t interface_id) +{ + return NULL; +} + +int joiner_application_security_done_cb(int8_t service_id, uint8_t IID[8], uint8_t keyblock[40]) +{ + return 0; +} + +int thread_joiner_application_finalisation_cb(int8_t service_id, uint16_t msg_id, sn_coap_hdr_s *response_ptr) +{ + return 0; +} + +int thread_joiner_application_commission_start(int8_t interface_id, uint8_t parent_address[16], uint16_t port, uint16_t panid, uint8_t xpanid[8], uint8_t channel, thread_joiner_application_commission_done_cb *done_cb) +{ + return 0; +} + diff --git a/test/coap-service/unittest/stub/thread_management_api_stub.c b/test/coap-service/unittest/stub/thread_management_api_stub.c new file mode 100644 index 0000000000..87800d801a --- /dev/null +++ b/test/coap-service/unittest/stub/thread_management_api_stub.c @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2015 ARM Limited. All rights reserved. + */ + +#include +#include "thread_management_api.h" +#include "ns_types.h" +#include "sn_coap_header.h" + +int thread_management_recv_set_response_cb(int8_t service_id, uint16_t msg_id, sn_coap_hdr_s *response_ptr) +{ + return 0; +} + +int thread_management_recv_get_response_cb(int8_t service_id, uint16_t msg_id, sn_coap_hdr_s *response_ptr) +{ + return 0; +} + +int thread_management_register(int8_t interface_id) +{ + return 0; +} + +int thread_management_unregister(int8_t interface_id) +{ + return 0; +} + +int thread_management_set_security_policy(int8_t interface_id, uint8_t options, uint16_t rotation_time, management_set_response_cb *cb_ptr) +{ + return 0; +} + +int thread_management_set_steering_data(int8_t interface_id, uint8_t *steering_data_ptr, uint8_t steering_data_len, management_set_response_cb *cb_ptr) +{ + return 0; +} + +int thread_management_set_commissioning_data_timestamp(int8_t interface_id, uint64_t time, management_set_response_cb *cb_ptr) +{ + return 0; +} + +int thread_management_get(int8_t instance_id, uint8_t *fields_ptr, uint8_t fields_count, uint8_t dst_addr[static 16], management_get_response_cb *cb_ptr) +{ + return 0; +} diff --git a/test/coap-service/unittest/stub/thread_management_client_stub.c b/test/coap-service/unittest/stub/thread_management_client_stub.c new file mode 100644 index 0000000000..be78b503ec --- /dev/null +++ b/test/coap-service/unittest/stub/thread_management_client_stub.c @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2014-2015 ARM Limited. All rights reserved. + */ + + +#include +#include "ns_list.h" +#include "ns_trace.h" +#include "nsdynmemLIB.h" +#include "thread_tmfcop_lib.h" + +#include "thread_config.h" +#include "thread_management_if.h" +#include "6LoWPAN/Thread/thread_management_client.h" + +#define TRACE_GROUP TRACE_GROUP_THREAD_MANAGEMENT_CLIENT + +typedef struct thread_management { + thread_management_client_router_id_cb *router_id_cb_ptr; + thread_management_client_network_data_set_cb *network_data_set_cb_ptr; + int8_t interface_id; + int8_t coap_service_id; + ns_list_link_t link; +} thread_management_t; + + +void thread_management_client_init(int8_t interface_id) +{ +} + +void thread_management_client_delete(int8_t interface_id) +{ +} + +int thread_management_client_router_id_get(int8_t interface_id, uint8_t mac[8], uint16_t router_id, thread_management_client_router_id_cb *id_cb) +{ + return 0; +} + +int thread_management_client_router_id_release(int8_t interface_id, uint8_t mac[8], uint16_t router_id, thread_management_client_router_id_cb *id_cb) +{ + return 0; +} + +int thread_management_client_network_data_register(int8_t interface_id, uint8_t *data_ptr, uint16_t data_len, thread_management_client_network_data_set_cb *set_cb) +{ + return 0; +} + +int8_t thread_management_query_network_parameters(int8_t interface_id, uint8_t *dst_address) +{ + return 0; +} + +int8_t thread_management_send_set_network_parameters(int8_t interface_id) +{ + return 0; +} + diff --git a/test/coap-service/unittest/stub/thread_management_if_stub.c b/test/coap-service/unittest/stub/thread_management_if_stub.c new file mode 100644 index 0000000000..c328ec49d4 --- /dev/null +++ b/test/coap-service/unittest/stub/thread_management_if_stub.c @@ -0,0 +1,305 @@ +/* + * Copyright (c) 2014-2015 ARM Limited. All rights reserved. + */ +#include +#include +#include "ns_types.h" +#include +//#include "eventOS_event.h" +#include +#include +#include "ns_trace.h" +#include "Core/include/buffer.h" +#include "common_functions.h" +#include "NWK_INTERFACE/Include/protocol.h" +#include "6LoWPAN/Thread/thread.h" +#include "6LoWPAN/Thread/thread_bootstrap.h" +#include "6LoWPAN/Thread/thread_routing.h" +#include "6LoWPAN/Thread/thread_network_data_lib.h" +#include "6LoWPAN/Thread/thread_network_data_storage.h" +#include "6LoWPAN/Thread/thread_nd.h" +#include "6LoWPAN/Thread/thread_dhcpv6_client.h" +#include "6LoWPAN/Thread/thread_routerid_server.h" +#include "6LoWPAN/Thread/thread_management_internal.h" +#include "6LoWPAN/Thread/thread_joiner_application.h" +#include "MLE/mle.h" +#include "thread_management_if.h" +//#include "thread_tmf_data_if.h" +#include "thread_commissioning_if.h" +#include "shalib.h" +#include "Common_Protocols/icmpv6.h" +#include "libDHCPv6/libDHCPv6.h" +#include "libDHCPv6/libDHCPv6_server.h" +#include "DHCPv6_Server/DHCPv6_server_service.h" +#include "MAC/IEEE802_15_4/mac_security_interface.h" + +void arm_thread_private_ula_prefix_set(protocol_interface_info_entry_t *cur, const uint8_t *ula_prefix) +{ +} + +int thread_tmf_service_commision_request(int8_t commissioning_handler_id, int8_t interfaceId, uint8_t *parentLLAddressPtr) +{ + return 0; +} + +int thread_tmf_service_commision_relay_control(int8_t interfaceId, int8_t commissioning_handler_id, uint8_t *borderRouterLocator, bool enableService) +{ + return 0; +} + +int thread_management_router_select_threshold_values_set( + int8_t interface_id, + uint8_t upGradeThreshold, + uint8_t downGradeThreshold) +{ + return 0; +} + +int thread_management_node_init( + int8_t interface_id, + channel_list_s *channel_list, + device_configuration_s *device_configuration, + link_configuration_s *static_configuration) +{ + return 0; +} + + +int thread_management_get_ml16_address(int8_t interface_id, uint8_t *address_ptr) +{ + return 0; +} + +int thread_management_get_ml_prefix(int8_t interface_id, uint8_t *prefix_ptr) +{ + return 0; +} + +int thread_management_get_ml_prefix_112(int8_t interface_id, uint8_t *prefix_ptr) +{ + return 0; +} + +int thread_management_get_leader_address(int8_t interface_id, uint8_t *address_ptr) +{ + return 0; +} + +link_configuration_s *thread_management_configuration_get(int8_t interface_id) +{ + return NULL; +} + +int thread_management_security_material_set(int8_t nwk_interface_id, bool enableSecurity, uint8_t *thrMasterKey, uint32_t thrKeySequenceCounter, uint32_t thrKeyRotation) +{ + return 0; +} + +int thread_commision_data_handler(uint8_t *thrMasterKey, uint32_t thrKeySequenceCounter, uint32_t thrKeyRotation, uint8_t *meshLocalPrefix) +{ + return 0; +} + +int thread_management_commission_data_set(int8_t nwk_interface_id) +{ + return 0; +} + +int thread_management_joiner_attach_start(int8_t nwk_interface_id) +{ + return 0; +} + +uint8_t *thread_management_key_request(int8_t nwk_interface_id, uint8_t keyId, bool linkLayerKey) +{ + return NULL; +} + +uint8_t *thread_management_key_request_with_sequence(int8_t nwk_interface_id, uint8_t keyId, uint32_t keySequnce) +{ + return NULL; +} + +void thread_management_key_synch_req(int8_t nwk_interface_id, uint32_t keySequnce, bool acceptAnyCounter) +{ +} + +void thread_history_key_material_push(thread_info_t *thread_info, uint8_t *macKeyPtr, uint8_t *mleKeyPtr, uint8_t keyId) +{ +} + +void thread_security_trig_pending_key(protocol_interface_info_entry_t *cur) +{ +} + +void thread_security_next_key_generate(protocol_interface_info_entry_t *cur, uint8_t *masterKey, uint32_t keySequence) +{ +} + +int thread_management_increment_key_sequence_counter(int8_t nwk_interface_id) +{ + return 0; +} + +int thread_management_key_sequence_counter_update(int8_t nwk_interface_id, uint32_t thrKeySequenceCounter) +{ + return 0; +} + +int thread_management_add_route(int8_t interface_id, uint8_t *route_prefix_ptr, uint8_t prefix_length, bool stable_service) +{ + return 0; +} + +int thread_management_del_route(int8_t interface_id, uint8_t *route_prefix_ptr, uint8_t prefix_length) +{ + return 0; + +} + +int thread_management_add_dhcpv6_server(int8_t interface_id, uint8_t *prefix_ptr, uint8_t prefix_length, bool stable_service) +{ + return 0; +} + +int thread_management_del_dhcpv6_server(int8_t interface_id, uint8_t *prefix_ptr, uint8_t prefix_length) +{ + return 0; +} + +int thread_management_add_contexts(int8_t interface_id, uint8_t *prefix_ptr, uint8_t prefix_length, uint8_t cid, bool compress_supported) +{ + return 0; +} + +int thread_management_read_leader_ula(int8_t interface_id, uint8_t *address_buffer) +{ + return 0; +} + +int thread_management_if_beacon_payload_generate(protocol_interface_info_entry_t *cur, const link_configuration_s *linkConfiguration) +{ + return 0; +} + +int thread_management_network_data_tlv_push(protocol_interface_info_entry_t *cur, uint8_t *data_pointer, uint8_t length) +{ + return 0; +} + +int thread_management_network_data_analyze_trig(protocol_interface_info_entry_t *cur) +{ + return 0; +} + +int thread_management_network_data_register(int8_t interface_id, uint8_t *network_data_ptr, uint8_t *network_data_length, uint16_t routerId) +{ + return 0; +} + +int thread_management_publish_local_services(int8_t interface_id) +{ + return 0; +} + +int thread_management_delete_local_services(int8_t interface_id) +{ + return 0; +} + +int thread_management_remove_router_by_id(int8_t interface_id, uint8_t routerId) +{ + return 0; +} + +int thread_management_print_network_data(int8_t interface_id) +{ + return 0; +} + +int thread_on_mesh_slaac_server_add(int8_t interface_id, uint8_t *prefix_ptr, uint8_t prefix_length, bool stableData) +{ + return 0; +} + +int thread_on_mesh_slaac_delete(int8_t interface_id, uint8_t *prefix_ptr, uint8_t prefix_length) +{ + return 0; +} + +int thread_dhcpv6_server_add(int8_t interface_id, uint8_t *prefix_ptr, uint32_t max_client_cnt, bool stableData) +{ + return 0; +} + +int thread_dhcpv6_server_set_lifetime(int8_t interface_id, uint8_t *prefix_ptr, uint32_t valid_lifetime) +{ + return 0; +} + +int thread_dhcpv6_server_set_max_client(int8_t interface_id, uint8_t *prefix_ptr, uint32_t max_client_count) +{ + return 0; +} + +int thread_dhcpv6_server_set_anonymous_addressing(int8_t interface_id, uint8_t *prefix_ptr, bool anonymous) +{ + return 0; +} + +int thread_dhcpv6_server_delete(int8_t interface_id, uint8_t *prefix_ptr) +{ + return 0; +} + +uint16_t thread_management_get_my_sht_addr(int8_t interface_id) +{ + return 0; +} + +int thread_management_get_my_iid16(int8_t interface_id, uint8_t *iidPtr) +{ + return 0; +} + +int thread_management_get_my_ml_prefix(int8_t interface_id, uint8_t *prefix) +{ + return 0; +} + +/* Get my mesh local prefix /112 */ +int thread_management_get_my_ml_prefix_112(int8_t interface_id, uint8_t *prefix) +{ + return 0; +} + +int thread_management_get_my_ml16(int8_t interface_id, uint8_t *addressPtr) +{ + return 0; +} + + +int thread_management_get_current_keysequence(int8_t interface_id, uint32_t *sequencePtr) +{ + return 0; +} + +int thread_management_native_commissioner_get_connection_info(int8_t interface_id, uint8_t *address_ptr, uint16_t *port, uint8_t *PSKc_ptr) +{ + return 0; +} + +void thread_key_get(uint8_t *key, uint8_t *key_material_buf, uint32_t key_sequence_counter) +{ + +} + +int thread_management_key_sets_calc(protocol_interface_info_entry_t *cur, link_configuration_s *linkConfiguration, uint32_t thrKeySequenceCounter) +{ + return 0; +} + +void thread_security_update_from_mac(protocol_interface_info_entry_t *cur) +{ + +} diff --git a/test/coap-service/unittest/stub/thread_management_server_stub.c b/test/coap-service/unittest/stub/thread_management_server_stub.c new file mode 100644 index 0000000000..7e6b3d3b4d --- /dev/null +++ b/test/coap-service/unittest/stub/thread_management_server_stub.c @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2014-2015 ARM Limited. All rights reserved. + */ + + +#include "config.h" +#include +#include +#include +#include +#include "nsdynmemLIB.h" +#include "common_functions.h" +#include "6LoWPAN/Thread/thread_management_server.h" + +#define TRACE_GROUP "TMFs" + +#include "net_interface.h" +#include "socket_api.h" +#include "thread_config.h" +#include "thread_tmfcop_lib.h" +#include "thread_meshcop_lib.h" +#include "thread_management_if.h" +#include "thread_commissioning_if.h" +//#include "thread_tmf_data_if.h" + +int thread_management_server_init(int8_t interface_id, uint8_t *PSKd_ptr, uint8_t PSKd_len) +{ + return 0; +} + +void thread_management_server_delete(int8_t interface_id) +{ +} + +int thread_management_server_leader_init(int8_t interface_id, thread_management_server_rid_assign_cb *assign_cb, thread_management_server_rid_release_cb *release_cb) +{ + return 0; +} + +void thread_management_server_leader_deinit(int8_t interface_id) +{ +} + +void joiner_router_recv_commission_msg(void *cb_res) +{ +} + +int thread_management_server_joiner_router_init(int8_t interface_id, uint16_t *joiner_port) +{ + return 0; +} + +void thread_management_server_joiner_router_deinit(int8_t interface_id) +{ +} diff --git a/test/coap-service/unittest/stub/thread_meshcop_lib_stub.c b/test/coap-service/unittest/stub/thread_meshcop_lib_stub.c new file mode 100644 index 0000000000..853814e2a5 --- /dev/null +++ b/test/coap-service/unittest/stub/thread_meshcop_lib_stub.c @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2015 ARM Limited. All rights reserved. + */ + +#include "thread_meshcop_lib.h" +#include "common_functions.h" +#include + +uint8_t *thread_meshcop_tlv_data_write(uint8_t *ptr, uint8_t type, uint16_t length, const uint8_t *data) +{ + return NULL; +} + +uint8_t *thread_meshcop_tlv_data_write_uint8(uint8_t *ptr, uint8_t type, uint8_t data) +{ + return NULL; +} + +uint8_t *thread_meshcop_tlv_data_write_uint16(uint8_t *ptr, uint8_t type, uint16_t data) +{ + return NULL; +} +uint8_t *thread_meshcop_tlv_data_write_uint32(uint8_t *ptr, uint8_t type, uint32_t data) +{ + return NULL; +} + +uint16_t thread_meshcop_tlv_find(const uint8_t *ptr, uint16_t length, uint8_t type, uint8_t **result_ptr) +{ + return 0; + +} + +uint8_t thread_meshcop_tlv_data_get_uint8(const uint8_t *ptr, uint16_t length, uint8_t type, uint8_t *data_ptr) +{ + return 0; +} + +uint8_t thread_meshcop_tlv_data_get_uint16(const uint8_t *ptr, uint16_t length, uint8_t type, uint16_t *data_ptr) +{ + return 0; +} + +uint8_t thread_meshcop_tlv_data_get_uint32(const uint8_t *ptr, uint16_t length, uint8_t type, uint32_t *data_ptr) +{ + return 0; +} diff --git a/test/coap-service/unittest/stub/thread_nd_stub.c b/test/coap-service/unittest/stub/thread_nd_stub.c new file mode 100644 index 0000000000..cdf674edfb --- /dev/null +++ b/test/coap-service/unittest/stub/thread_nd_stub.c @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2014-2015 ARM Limited. All rights reserved. + */ + +/* + * \file thread_nd.c + * \brief Add short description about this file!!! + * + */ + +#include "config.h" +#include +#include +#include +#include "eventOS_event.h" +#include "common_functions.h" +#include "socket_api.h" +#include "Core/include/socket.h" +#include "NWK_INTERFACE/Include/protocol.h" +#include "Common_Protocols/ipv6.h" +#include "6LoWPAN/Bootstraps/protocol_6lowpan.h" +#include "net_thread_test.h" +#include "libDHCPv6/libDHCPv6.h" +#include "randLIB.h" +#include "ns_trace.h" +#include "6LoWPAN/Thread/thread.h" +#include "6LoWPAN/Thread/thread_routing.h" +#include "6LoWPAN/Thread/thread_nd.h" +#include "6LoWPAN/Thread/thread_resolution_client.h" +#include "6LoWPAN/Thread/thread_resolution_server.h" +#include "Common_Protocols/icmpv6.h" +#include "MLE/mle.h" +#include "dhcp_service_api.h" + +#define TRACE_GROUP "thdn" + +static thread_resolution_server_addr_query_cb thread_nd_address_query_lookup; + +void thread_nd_service_delete(int8_t interfaceId) +{ +} + +int thread_nd_service_activate(int8_t interfaceId) +{ + return 0; +} + +int thread_nd_service_disable(int8_t interfaceId) +{ + return 0; +} + +bool thread_nd_ns_transmit(protocol_interface_info_entry_t *cur, ipv6_neighbour_t *entry, bool unicast, uint8_t seq) +{ + return false; +} + +void thread_nd_flush_neighbour_cache_for_short_addr(protocol_interface_info_entry_t *cur, uint16_t flushee, bool children) +{ +} + +buffer_t *thread_nd_snoop(protocol_interface_info_entry_t *cur, buffer_t *buf, const sockaddr_t *ll_src, bool *bounce) +{ + return NULL; +} + +buffer_t *thread_nd_special_forwarding(protocol_interface_info_entry_t *cur, buffer_t *buf, const sockaddr_t *ll_src, bool *bounce) +{ + return NULL; +} + +buffer_t *thread_nd_icmp_handler(protocol_interface_info_entry_t *cur, buffer_t *buf, bool *bounce) +{ + return NULL; +} + +int thread_nd_address_registration(protocol_interface_info_entry_t *cur, const uint8_t *ipv6Address, uint16_t mac16, uint16_t panId, const uint8_t *mac64) +{ + return 0; +} + +int thread_nd_map_anycast_address(protocol_interface_info_entry_t *cur, uint16_t *addr16) +{ + return -1; +} diff --git a/test/coap-service/unittest/stub/thread_network_data_lib_stub.c b/test/coap-service/unittest/stub/thread_network_data_lib_stub.c new file mode 100644 index 0000000000..af9431b4b2 --- /dev/null +++ b/test/coap-service/unittest/stub/thread_network_data_lib_stub.c @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2014-2015 ARM Limited. All rights reserved. + */ +/* + * \file thread_network_data_lib.c + * \brief Add short description about this file!!! + * + */ +#include +#include +#include +#include "NWK_INTERFACE/Include/protocol.h" +#include "6LoWPAN/Thread/thread_network_data_lib.h" +#include "common_functions.h" +#include "ns_trace.h" + +#define TRACE_GROUP "tndl" + +uint8_t prefixBits_to_bytes(uint8_t prefixLenInBits) +{ + return 0; +} + +int thread_network_data_malformed_check(uint8_t *network_data_ptr, uint8_t network_data_length) +{ + return 0; +} + +int thread_network_data_sub_tlv_malformed_check(uint8_t *network_data_ptr, uint8_t network_data_length) +{ + return 0; +} + + +uint8_t *thread_nd_commission_data_write_steering_data(uint8_t *ptr, const uint8_t *steeringData, uint8_t length) +{ + return NULL; +} + +uint8_t *thread_nd_commission_data_write_commissioner_id(uint8_t *ptr, char *commissioner_id_ptr) +{ + return NULL; +} + +uint8_t *thread_nd_commission_data_write_security_policy(uint8_t *ptr, uint8_t policy) +{ + return NULL; +} + +uint8_t *thread_nd_commission_data_write_timestamp(uint8_t *ptr, uint8_t *timestamp, uint16_t tick) +{ + return NULL; +} + +uint8_t *thread_nd_commission_data_write_session_id(uint8_t *ptr, uint16_t id) +{ + return NULL; +} + +uint8_t *thread_nd_commission_data_write_network_name(uint8_t *ptr, uint8_t *name) +{ + return NULL; +} + +uint8_t *thread_nd_commission_data_write_border_router_locator(uint8_t *ptr, uint8_t *locatorML16) +{ + return NULL; +} + +uint8_t *thread_nd_commission_data_write_commissioning_credentials(uint8_t *ptr, char *crendentials, uint8_t length) +{ + return NULL; +} + +uint8_t *thread_nd_network_data_write_border_router_or_router_info(uint8_t *ptr, uint16_t routerId, uint8_t flags, bool reservedBytes) +{ + return NULL; +} + diff --git a/test/coap-service/unittest/stub/thread_network_data_storage_stub.c b/test/coap-service/unittest/stub/thread_network_data_storage_stub.c new file mode 100644 index 0000000000..7bb9bab4bf --- /dev/null +++ b/test/coap-service/unittest/stub/thread_network_data_storage_stub.c @@ -0,0 +1,287 @@ +/* + * Copyright (c) 2014-2015 ARM Limited. All rights reserved. + */ + +/* + * \file thread_network_data_storage.c + * \brief Add short description about this file!!! + * + */ + +#include +#include +#include +#include "NWK_INTERFACE/Include/protocol.h" +#include "common_functions.h" +#include "ns_trace.h" +#include "ip6string.h" +#include "6LoWPAN/Thread/thread.h" +#include "6LoWPAN/Thread/thread_network_data_lib.h" +#include "6LoWPAN/Thread/thread_network_data_storage.h" +#include "6LoWPAN/Thread/thread_dhcpv6_client.h" +#include "libDHCPv6/libDHCPv6_server.h" +#include "DHCPv6_Server/DHCPv6_server_service.h" + +#define TRACE_GROUP "thrd" + +void thread_nd_network_data_print(thread_network_data_cache_entry_t *networkData, uint16_t routerId) +{ +} + +uint8_t thread_nd_server_external_route_list_size(thread_network_server_data_list_t *list, bool stable) +{ + return 0; +} + +uint8_t thread_nd_border_routerserver_list_size(thread_network_server_data_list_t *list, bool stable) +{ + return 0; +} + +uint8_t thread_nd_context_list_size(thread_data_context_list_t *list, bool stable) +{ + return 0; +} + +uint8_t *thread_nd_context_list_write(thread_data_context_list_t *list, uint8_t *dataPtr, bool stableData) +{ + return NULL; +} + +uint8_t *thread_nd_server_list_write(thread_network_server_data_list_t *list, uint8_t *dataPtr, uint8_t type, bool stable) +{ + return NULL; +} + +uint8_t thread_nd_prefix_based_on_list_entry_size(thread_network_service_entry_t *entry, bool fullList) +{ + return 0; +} + +int thread_nd_local_data_length_updated(thread_network_data_cache_entry_t *networkDataList) +{ + return 0; +} + + +thread_network_local_data_entry_t *thread_local_service_list_allocate(thread_prefix_tlv_t *prefixTlv) +{ + return NULL; +} + +thread_network_service_entry_t *thread_prefix_service_list_allocate(thread_prefix_tlv_t *prefixTlv) +{ + return NULL; +} + +thread_network_server_data_entry_t *thread_server_list_allocate(thread_border_router_tlv_entry_t *service) +{ + return NULL; +} + +thread_network_data_context_entry_t *thread_context_service_list_allocate(uint8_t contextLength, uint8_t cid, bool compersioEnabled) +{ + return NULL; +} + +int thread_nd_verify_contex_id_is_free(thread_network_data_cache_entry_t *list, uint8_t *prefixPtr, thread_network_local_data_context_entry_t *context) +{ + return 0; +} + +thread_network_local_data_entry_t *thread_get_local_prefix_entry(thread_network_local_data_list_t *list, thread_prefix_tlv_t *prefixTlv) +{ + return NULL; +} + +thread_network_local_data_entry_t *thread_get_local_prefix_list(thread_network_local_data_list_t *list, thread_prefix_tlv_t *prefixTlv) +{ + return NULL; +} + +thread_network_service_entry_t *thread_get_main_prefix_entry(thread_network_servive_list_t *list, thread_prefix_tlv_t *prefixTlv) +{ + return NULL; +} + +thread_network_service_entry_t *thread_get_main_prefix_list(thread_network_servive_list_t *list, thread_prefix_tlv_t *prefixTlv) +{ + return NULL; +} + +thread_network_server_data_entry_t *thread_search_server_list(thread_network_server_data_list_t *list, uint8_t routerId) +{ + return NULL; +} + +thread_network_server_data_entry_t *thread_get_server_list(thread_network_server_data_list_t *list, thread_border_router_tlv_entry_t *service) +{ + return NULL; +} + + +uint8_t thread_get_context_id_by_length(thread_data_context_list_t *list, uint8_t contextLength) +{ + return 0; +} + +thread_network_data_context_entry_t *thread_get_context_by_id(thread_data_context_list_t *list, uint8_t cid) +{ + return NULL; +} + +thread_network_data_context_entry_t *thread_get_main_context_list(thread_data_context_list_t *list, thread_network_local_data_context_entry_t *context) +{ + return NULL; +} + +void thread_server_list_free(thread_network_server_data_list_t *listPtr) +{ +} + +int threah_server_context_delete_mark(thread_data_context_list_t *listPtr) +{ + return 0; +} + +int threah_server_data_delete_mark_by_router_id(thread_network_server_data_list_t *listPtr, uint16_t routerID, bool subSet) +{ + return 0; +} + +int threah_server_context_clean(thread_network_data_cache_entry_t *cachePtr, thread_data_context_list_t *listPtr, thread_network_service_entry_t *prefixEntry) +{ + return 0; +} + + +void threah_server_data_clean_by_router_id(thread_network_data_cache_entry_t *cachePtr, thread_network_server_data_list_t *listPtr, thread_network_service_entry_t *prefixEntry, bool routeInfo, protocol_interface_info_entry_t *curInterface) +{ +} + +void thread_context_service_list_free(thread_data_context_list_t *listPtr) +{ +} +void thread_network_data_base_init(thread_network_data_cache_entry_t *cachePtr) +{ +} + +void thread_network_local_server_data_base_init(thread_network_local_data_cache_entry_t *cachePtr) +{ +} + +void thread_network_data_router_id_mark_delete(thread_network_data_cache_entry_t *cachePtr, uint16_t routerID, bool subSet) +{ +} + +void thread_network_data_router_id_free(thread_network_data_cache_entry_t *cachePtr, bool subSet, protocol_interface_info_entry_t *curInterface) +{ +} + +void thread_network_data_context_re_use_timer_update(thread_network_data_cache_entry_t *cachePtr, uint32_t ticks) +{ + +} + +void thread_network_data_free_and_clean(thread_network_data_cache_entry_t *cachePtr) +{ +} + +void thread_network_local_data_free_and_clean(thread_network_local_data_cache_entry_t *cachePtr, int8_t interface_id) +{ +} + +int thread_nd_local_list_add_route(thread_network_data_cache_entry_t *networkDataList, thread_prefix_tlv_t *prefixTlv, thread_border_router_tlv_entry_t *route) +{ + return 0; +} + +int thread_nd_local_list_add_on_mesh_prefix(thread_network_data_cache_entry_t *networkDataList, thread_prefix_tlv_t *prefixTlv, thread_border_router_tlv_entry_t *service) +{ + return 0; +} + +int thread_nd_local_list_del_on_mesh_server(thread_network_data_cache_entry_t *networkDataList, thread_prefix_tlv_t *prefixTlv, thread_border_router_tlv_entry_t *service) +{ + return 0; +} + +int thread_local_server_list_add_on_mesh_server(thread_network_local_data_cache_entry_t *networkDataList, thread_prefix_tlv_t *prefixTlv, thread_border_router_tlv_entry_t *service) +{ + return 0; +} + +int thread_local_server_list_del_on_mesh_server(thread_network_local_data_cache_entry_t *networkDataList, thread_prefix_tlv_t *prefixTlv, bool slaacService) +{ + return 0; +} + +int thread_local_server_add_route(thread_network_local_data_cache_entry_t *networkDataList, thread_prefix_tlv_t *prefixTlv, thread_border_router_tlv_entry_t *route) +{ + return 0; +} + +int thread_local_server_del_route(thread_network_local_data_cache_entry_t *networkDataList, thread_prefix_tlv_t *prefixTlv) +{ + return 0; +} + +uint8_t thread_nd_context_id_allocate(thread_network_data_cache_entry_t *networkDataList, thread_network_local_data_cache_entry_t *localDataList, uint8_t *prefixPtr, uint8_t prefixLength) +{ + return 0; +} + +int thread_nd_local_list_add_contexts(thread_network_data_cache_entry_t *networkDataList, thread_prefix_tlv_t *prefixTlv, thread_network_local_data_context_entry_t *context) +{ + return 0; +} + +uint8_t thread_server_prefix_length(thread_network_local_data_entry_t *cur) +{ + return 0; +} + +uint16_t thread_nd_own_service_list_data_size(thread_network_local_data_cache_entry_t *serverDataList) +{ + return 0; +} + +uint8_t * thread_nd_own_service_list_data_write(thread_network_local_data_cache_entry_t *serverDataList, uint8_t *ptr, uint16_t routerID) +{ + return NULL; +} + +uint16_t thread_nd_data_size(thread_network_data_cache_entry_t *networkDataList, bool fullList) +{ + return 0; +} + +int thread_nd_commission_data_len_update(thread_network_data_cache_entry_t *networkDataList, link_configuration_s *linkConfiguration, thread_commissioner_t *registered_commissioner) +{ + return 0; +} + +uint8_t thread_nd_commission_data_length_size(link_configuration_s *linkConfiguration, thread_commissioner_t *registered_commissioner) +{ + return 0; +} + +uint8_t *thread_nd_commission_data_write(uint8_t *ptr, link_configuration_s *linkConfiguration, thread_commissioner_t *registered_commissioner) +{ + return NULL; +} + +bool thread_check_network_data_prefix_stable_boolean(thread_network_service_entry_t *dataList) +{ + return false; +} + +uint8_t *thread_nd_generate_from_local_data_list(thread_network_data_cache_entry_t *networkDataList, link_configuration_s *linkConfiguration, thread_commissioner_t *registered_commissioner, uint8_t *ptr, bool fullList) +{ + return NULL; +} + +uint8_t *thread_nd_generate_from_local_data_list_to_sleepy_child(thread_network_data_cache_entry_t *networkDataList, struct link_configuration *linkConfiguration, struct thread_commissioner *registered_commissioner, uint8_t *ptr, bool fullList) +{ + return NULL; +} diff --git a/test/coap-service/unittest/stub/thread_network_synch_stub.c b/test/coap-service/unittest/stub/thread_network_synch_stub.c new file mode 100644 index 0000000000..0d15993ac5 --- /dev/null +++ b/test/coap-service/unittest/stub/thread_network_synch_stub.c @@ -0,0 +1,21 @@ +#include + +int thread_network_synch_data_store(int8_t interface_id) +{ + return 0; +} + +int thread_network_synch_start(int8_t interface_id) +{ + return 0; +} + +int thread_network_synch_data_free(int8_t interface_id) +{ + return 0; +} + +uint16_t thread_network_synch_get_strored_mac16(int8_t interface_id) +{ + return 0; +} diff --git a/test/coap-service/unittest/stub/thread_router_bootstrap_stub.c b/test/coap-service/unittest/stub/thread_router_bootstrap_stub.c new file mode 100644 index 0000000000..0cb9f81eed --- /dev/null +++ b/test/coap-service/unittest/stub/thread_router_bootstrap_stub.c @@ -0,0 +1,137 @@ +/* + * Copyright (c) 2015 ARM Limited. All rights reserved. + */ + +/* + * \file thread_router_bootstrap.c + * \brief Add short description about this file!!! + * + */ +#include "config.h" +#include +#include +#include +#include "eventOS_event.h" +#include "eventOS_event_timer.h" +#include "randLIB.h" +#include "shalib.h" +#include "common_functions.h" +#include "NWK_INTERFACE/Include/protocol.h" +#include "MulticastTrigle/multicast.h" +#include "net_thread_test.h" +#include "ns_trace.h" +#include "6LoWPAN/Bootstraps/protocol_6lowpan.h" +#include "6LoWPAN/Thread/thread.h" +#include "6LoWPAN/Thread/thread_routing.h" +#include "6LoWPAN/Thread/thread_nd.h" +#include "6LoWPAN/Thread/thread_bootstrap.h" +#include "6LoWPAN/Thread/thread_router_bootstrap.h" +#include "6LoWPAN/Thread/thread_routerid_server.h" +#include "6LoWPAN/Thread/thread_management_internal.h" +#include "6LoWPAN/Thread/thread_network_synch.h" +#include "6LoWPAN/Thread/thread_dynamic_reed.h" +#include "6LoWPAN/Thread/thread_joiner_application.h" +#include "6LoWPAN/Thread/thread_management_client.h" +#include "6LoWPAN/Thread/thread_management_server.h" +#include "6LoWPAN/Thread/thread_beacon.h" +#include "6LoWPAN/Thread/thread_network_data_lib.h" +#include "MAC/IEEE802_15_4/mac_data_interface.h" +#include "MAC/IEEE802_15_4/mac_data_poll.h" +#include "MAC/IEEE802_15_4/mac_security_interface.h" +#include "MAC/IEEE802_15_4/mac_data_poll.h" +#include "MAC/IEEE802_15_4/mac_mlme.h" +#include "thread_management_if.h" +#include "Common_Protocols/ipv6.h" +#include "Common_Protocols/icmpv6.h" +#include "Common_Protocols/icmpv6_radv.h" +#include "MLE/mle.h" +#include "MLE/mle_tlv.h" +#include "thread_config.h" +#include "multicast_api.h" +#include "Service_Libs/nd_proxy/nd_proxy.h" +#include "Service_Libs/mle_service/mle_service_api.h" +#include "thread_dhcpv6_client.h" + +#define TRACE_GROUP "trbs" + +int thread_router_mle_advertise(protocol_interface_info_entry_t *cur) +{ + return 0; +} + +int thread_reed_advertise (protocol_interface_info_entry_t *cur) +{ + return 0; +} + +void thread_set_meshlocal_route(protocol_interface_info_entry_t *cur) +{ +} + +uint8_t *thread_write_route_option(protocol_interface_info_entry_t *cur, uint8_t *ptr) +{ + return 0; +} + + +void thread_multicast_forward_to_child(void *buf) +{ +} + +void thread_attach_router_id_request(protocol_interface_info_entry_t *cur) +{ +} + +void thread_bootstrap_child_id_handler(protocol_interface_info_entry_t *cur) +{ +} + +void thread_mle_connected_reed_receive_cb(int8_t interface_id, mle_message_t *mle_msg, mac_aux_security_header_t *security_headers) +{ +} + + +void thread_reed_synch_start(protocol_interface_info_entry_t *cur) +{ +} + +bool thread_bootstrap_trig_router_downgrade(protocol_interface_info_entry_t *cur) +{ + return false; +} + +bool thread_bootstrap_trig_reed_upgrade(protocol_interface_info_entry_t *cur) +{ + return false; +} + +void thread_bootstrap_child_id_reject(protocol_interface_info_entry_t *cur) +{ +} + +void thread_bootstrap_attached_active_router(protocol_interface_info_entry_t *cur) +{ +} + +void thread_bootstrap_router_synch_finish(protocol_interface_info_entry_t *cur) +{ +} + +void thread_bootsrap_generate_thread_partitition(int8_t interface_id, bool newPartition) +{ +} + +void thread_attach_router_id_release(protocol_interface_info_entry_t *cur) +{ +} + +void thread_bootstrap_leader_data_free(thread_info_t *thread_info, int8_t bootstrap) +{ +} + +void thread_bootstrap_global_leader_data(thread_info_t *thread_info) +{ + +} + + diff --git a/test/coap-service/unittest/stub/thread_routerid_server_stub.c b/test/coap-service/unittest/stub/thread_routerid_server_stub.c new file mode 100644 index 0000000000..bc5271a62f --- /dev/null +++ b/test/coap-service/unittest/stub/thread_routerid_server_stub.c @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2014-2015 ARM Limited. All rights reserved. + */ + +/** + * \file thread_routerid_server.c + * + */ +#include "config.h" +#include +#include +#include +#include "common_functions.h" +#include "libDHCPv6/libDHCPv6.h" +#include "randLIB.h" +#include "nsdynmemLIB.h" +#include "NWK_INTERFACE/Include/protocol.h" +#include "6LoWPAN/Thread/thread.h" +#include "6LoWPAN/Thread/thread_routerid_server.h" + +#define TRACE_GROUP "thid" + +int thread_routerid_assign_cb(int8_t interface_id, const uint8_t mac[8], uint8_t router_id_mask_out[9], uint16_t *router_id) +{ + return -1; +} + +int thread_routerid_release_cb(int8_t interface_id, uint8_t mac[8], uint16_t router_id) +{ + return -1; +} diff --git a/test/coap-service/unittest/stub/thread_routing_stub.c b/test/coap-service/unittest/stub/thread_routing_stub.c new file mode 100644 index 0000000000..de96783a1f --- /dev/null +++ b/test/coap-service/unittest/stub/thread_routing_stub.c @@ -0,0 +1,165 @@ +/* + * Copyright (c) 2014-2015 ARM Limited. All rights reserved. + */ + +#include "config.h" +#include +#include +#include +#include + +#ifndef UINT_FAST4_MAX +typedef uint_fast8_t uint_fast4_t; +#define UINT_FAST4_MAX UINT_FAST8_MAX +#endif + +#define THREAD_ROUTING_FN extern + +#include +#include "ns_trace.h" +#include "common_functions.h" +#include "NWK_INTERFACE/Include/protocol.h" +#include "MLE/mle.h" +#include "6LoWPAN/Mesh/mesh.h" +#include "6LoWPAN/Thread/thread.h" +#include "6LoWPAN/Thread/thread_nd.h" +#include "6LoWPAN/Thread/thread_routing.h" + +#define TRACE_GROUP "trou" + +/* MLE Route Data bit assignments (draft-kelsey-thread-routing-00) */ +#define ROUTE_DATA_OUT_MASK 0xC0 +#define ROUTE_DATA_OUT_SHIFT 6 +#define ROUTE_DATA_IN_MASK 0x30 +#define ROUTE_DATA_IN_SHIFT 4 +#define ROUTE_DATA_COST_MASK 0x0F + +#define MAX_ROUTE_COST 0x0F + +typedef uint_fast4_t route_cost_t; +#define THREAD_COST_INFINITE 0 + +#define MAX_LINK_AGE 100*10 /* 100 seconds */ + +#define LINK_AGE_STATIC 0xFFFF /* Magic number to indicate "never expire" */ + + +bool router_id_sequence_is_greater(const thread_routing_info_t *routing, uint8_t seq) +{ + return false; +} + +#define LINK_QUALITY_HYSTERESIS (1 << THREAD_LINK_MARGIN_SCALING) /* 1dB */ + +thread_link_quality_t link_margin_to_quality(thread_link_margin_t margin) +{ + return QUALITY_BAD; +} + +bool thread_i_am_router(const protocol_interface_info_entry_t *cur) +{ + return false; +} + +void thread_routing_update_id_set(protocol_interface_info_entry_t *cur, uint8_t seq, const uint8_t *id_mask) +{ +} + +int_fast8_t thread_routing_update_link_margin(protocol_interface_info_entry_t *cur, + uint16_t sender, + uint8_t link_margin_db, + uint8_t outgoing_link_margin_db) +{ + return 0; +} + +int_fast8_t thread_routing_add_link(protocol_interface_info_entry_t *cur, + uint16_t sender, uint8_t link_margin_db, + uint8_t id_seq, + const uint8_t *id_mask, + const uint8_t *route_data, + bool is_static) +{ + return 0; +} + +int_fast8_t thread_routing_remove_link(protocol_interface_info_entry_t *cur, + uint16_t sender) +{ + return 0; +} + +uint8_t thread_routing_get_route_data_size(protocol_interface_info_entry_t *cur) +{ + return 0; +} + +uint_fast8_t thread_routing_cost_get_by_router_id(thread_routing_info_t *routing , uint8_t routerId) +{ + return 0; +} + +void thread_routing_get_mask_by_current_data(thread_routing_info_t *routing, uint8_t *id_mask) +{ +} + +int_fast8_t thread_routing_get_route_data(protocol_interface_info_entry_t *cur, + uint8_t *id_seq, + uint8_t *id_mask, + uint8_t *data, + uint8_t *len_out) +{ + return 0; +} + +void thread_routing_init(thread_routing_info_t *routing) +{ +} + +void thread_routing_free(thread_routing_info_t *routing) +{ +} + +void thread_routing_activate(thread_routing_info_t *routing) +{ +} + +void thread_routing_deactivate(thread_routing_info_t *routing) +{ +} + +/* ticks is in 100ms units, I think */ +/* Return true if we want to send an MLE advertisement */ +bool thread_routing_timer(thread_info_t *thread, uint8_t ticks) +{ + return false; +} + +void thread_routing_set_mesh_callbacks(protocol_interface_info_entry_t *cur) +{ +} + +uint_fast8_t thread_routing_count_neighbours_with_quality_or_better(thread_routing_info_t *routing, thread_link_quality_t quality) +{ + return 0; +} + +uint_fast8_t thread_routing_count_active_routers(thread_routing_info_t *routing) +{ + return 0; +} + +uint_fast8_t thread_routing_count_active_routers_from_mask(const uint8_t *id_mask) +{ + return 0; +} + +uint_fast8_t thread_routing_sum_rx_path_cost_and_link_cost(uint8_t inMargim, uint8_t outMargin, uint8_t pathCost) +{ + return 0; +} + +void thread_routing_reset(thread_routing_info_t *routing) +{ + +} diff --git a/test/coap-service/unittest/stub/thread_stub.c b/test/coap-service/unittest/stub/thread_stub.c new file mode 100644 index 0000000000..49a3c7cf93 --- /dev/null +++ b/test/coap-service/unittest/stub/thread_stub.c @@ -0,0 +1,373 @@ +/* + * Copyright (c) 2014-2015 ARM Limited. All rights reserved. + */ +#include "config.h" +#include +#include +#include +#include "eventOS_event.h" +#include "randLIB.h" +#include "common_functions.h" + +#include "NWK_INTERFACE/Include/protocol.h" +#include "net_thread_test.h" +#include "libDHCPv6/libDHCPv6.h" +#include "libDHCPv6/libDHCPv6_server.h" +#include "ns_trace.h" +#include "6LoWPAN/Bootstraps/protocol_6lowpan.h" +#include "6LoWPAN/Bootstraps/protocol_6lowpan_interface.h" +#include "6LoWPAN/Thread/thread.h" +#include "6LoWPAN/Thread/thread_routing.h" +#include "6LoWPAN/Thread/thread_dhcpv6_client.h" +#include "6LoWPAN/Thread/thread_bootstrap.h" +#include "6LoWPAN/Thread/thread_nd.h" +#include "6LoWPAN/Thread/thread_network_data_lib.h" +#include "6LoWPAN/Thread/thread_joiner_application.h" +#include "Common_Protocols/ipv6.h" +#include "Common_Protocols/icmpv6.h" +#include "MLE/mle.h" +#include "MLE/mle_tlv.h" + +#define TRACE_GROUP "thrd" + +#define ID_MASK_UPDATE_MIN (10 * 10) /* 1 minute */ +#define LEADER_DATA_UPDATE_MIN (10 * 10) /* 10 seconds */ + +void thread_leader_private_data_clean(thread_leader_info_t *private); +thread_leader_data_t *thread_leader_data_generate(void); +thread_leader_info_t *thread_allocate_and_init_leader_private_data(void); +thread_parent_info_t *thread_parent_data_allocate(thread_info_t *info); +int thread_leader_router_id_deallocate(const uint8_t *eui64, protocol_interface_info_entry_t *cur); + +int thread_proxy_state_update(int8_t caller_interface_id , int8_t handler_interface_id, bool status) +{ + +} + +void thread_anycast_address_policy_update(const uint8_t *meshLocalPrefix, bool addPolicy) +{ + +} + +int8_t thread_bootstrap_up(protocol_interface_info_entry_t *cur) +{ + return -1; +} + +int8_t thread_bootstrap_down(protocol_interface_info_entry_t *cur) +{ + return -1; +} + +int thread_leader_data_base_allocate(protocol_interface_info_entry_t *cur) +{ + return 0; +} + +bool thread_addr_is_mesh_local(const uint8_t *addr, const protocol_interface_info_entry_t *cur) +{ + return false; +} + +bool thread_addr_is_mesh_local_16(const uint8_t *addr, const protocol_interface_info_entry_t *cur) +{ + return false; +} + +bool thread_addr_is_mesh_local_64(const uint8_t *addr, const protocol_interface_info_entry_t *cur) +{ + return false; +} + +void thread_leader_data_initialize(thread_leader_data_t *leader_data, uint8_t routerId) +{ +} + +void thread_leader_private_routemask_init(thread_leader_info_t *leader_info) +{ +} + +void thread_leader_private_routemask_init_by_last_partition(thread_leader_info_t *leader_info, uint8_t *lastValidRouteMask, uint8_t leaderId) +{ +} + +void thread_router_child_info_init(thread_child_info_t *child_info) +{ +} + +bool thread_leader_data_parse(uint8_t *ptr, uint16_t dataLength, thread_leader_data_t *leaderDataBuf) +{ + return false; +} + +bool thread_connectivity_tlv_parse(uint8_t *ptr, uint16_t dataLength, thread_connectivity_t *connectivityTlv) +{ + return false; +} + + + +thread_leader_data_t *thread_leader_data_generate(void) +{ + return NULL; +} + +thread_leader_data_t *thread_leader_data_allocate(thread_info_t *info) +{ + return NULL; +} + +thread_parent_info_t *thread_parent_data_allocate(thread_info_t *info) +{ + return NULL; +} + +int thread_leader_ul16_address_get(thread_info_t *thread_info, uint8_t *address_ptr) +{ + return -1; +} + +void thread_leader_setup_delete(link_configuration_s *leader_setup_ptr) +{ +} + +bool thread_leader_commissioner_create(thread_info_t *thread_info) +{ + return false; +} + +void thread_leader_commissioner_free(thread_info_t *thread_info) +{ +} + + +void thread_data_base_init(thread_info_t *thread_info, int8_t interfaceId) +{ +} + + +int thread_info_allocate_and_init(protocol_interface_info_entry_t *cur) +{ + return -1; +} + +void thread_child_info_free(thread_info_t *thread_info) +{ +} + +void thread_info_deallocate(protocol_interface_info_entry_t *cur) +{ +} + +int thread_leader_route_mask_update(thread_leader_info_t *info, uint8_t router_id, bool setActive) +{ + return -1; +} + +/* Called by thread_routing.c as a result of updates to routing table - allows + * leader to monitor a router being available (having a finite route cost). + */ +void thread_leader_router_state_changed(thread_leader_info_t *info, uint8_t router_id, bool available, int8_t interface_id) +{ +} + +int thread_validate_own_routeid_from_new_mask(const uint8_t *master_router_id_mask, uint8_t router_id) +{ + return -1; +} + + + + +void thread_leader_allocate_router_id_by_allocated_id(thread_leader_info_t *info, uint8_t router_id, const uint8_t *eui64) +{ +} + +int thread_generate_leasequery(int8_t interfaceID, uint8_t *addressRequested) +{ + return -1; +} + +thread_leader_info_t *thread_allocate_and_init_leader_private_data(void) +{ + return NULL; +} + +thread_child_info_t *thread_router_child_info_allocate_and_init(void) +{ + return NULL; +} + + + +void thread_child_id_request_info_init(thread_pending_child_id_req_t *child_info) +{ +} + +thread_pending_child_id_req_t *thread_child_id_request_allocate(void) +{ + return NULL; +} + +void thread_child_id_request_entry_clean(protocol_interface_info_entry_t *cur) +{ +} + +thread_pending_child_id_req_t *thread_child_id_request_entry_get(protocol_interface_info_entry_t *cur, uint8_t *euid64) +{ + return NULL; +} + +thread_pending_child_id_req_t *thread_child_id_request_entry_get_from_the_list(protocol_interface_info_entry_t *cur) +{ + return NULL; +} + +void thread_child_id_request_entry_remove(protocol_interface_info_entry_t *cur, thread_pending_child_id_req_t *entry) +{ +} + +int thread_init(protocol_interface_info_entry_t *cur) +{ + return 0; +} + +int thread_route_tlv_push(protocol_interface_info_entry_t *cur, uint8_t *route_tlv, uint8_t route_len, uint8_t linkMargin, uint16_t shortAddress) +{ + return 0; +} + +void thread_leader_update_id_set(protocol_interface_info_entry_t *cur) +{ +} + +int thread_routerid_request_handler(int8_t interfaceId, const uint8_t *clientId, thread_router_id_response_t *router_id_response, bool reNew) +{ + return -1; +} + + +int thread_routerid_release_handler(int8_t interfaceId, uint8_t *clientId) +{ + return -1; +} + +void thread_leader_router_id_valid_lifetime_update(protocol_interface_info_entry_t *cur, uint32_t tickUpdate) +{ +} + +int thread_leader_router_id_deallocate(const uint8_t *eui64, protocol_interface_info_entry_t *cur) +{ + return -1; +} + +int thread_leader_router_id_allocate(const uint8_t *eui64, protocol_interface_info_entry_t *cur, thread_router_id_response_t *reponse, bool renew) +{ + return -1; +} + +int thread_discover_mode_active(protocol_interface_info_entry_t *cur) +{ + return -1; +} + +int thread_attach_mode_active(protocol_interface_info_entry_t *cur) +{ + return -1; +} + +int thread_attach_ready(protocol_interface_info_entry_t *cur) +{ + return -1; +} + +bool thread_attach_active_router(protocol_interface_info_entry_t *cur) +{ + return -1; +} + +int thread_router_ready(protocol_interface_info_entry_t *cur) +{ + return -1; +} + +bool thread_scan_mask_validation(protocol_interface_info_entry_t *cur, uint8_t mask) +{ + return false; +} + +int thread_route_ready_to_leader(protocol_interface_info_entry_t *cur) +{ + return -1; +} + +void thread_leader_private_data_clean(thread_leader_info_t *pr) +{ +} + +bool thread_route_possible_add(thread_attach_device_mode_e threadMode) +{ + return false; +} + +bool thread_on_mesh_route_possible_add(thread_attach_device_mode_e threadMode) +{ + return false; +} + +bool thread_on_mesh_address_valid(thread_network_server_data_entry_t *curRoute) +{ + return false; +} + +void thread_dhcp_client_gua_error_cb(int8_t interface, uint8_t dhcp_addr[static 16], uint8_t prefix[static 16], bool register_status) +{ +} + + +void thread_network_data_service_learn(protocol_interface_info_entry_t *cur) +{ +} + +void thread_seconds_timer(protocol_interface_info_entry_t *cur, uint32_t ticks) +{ +} + +void thread_timer(protocol_interface_info_entry_t *cur, uint8_t ticks) +{ +} + +void thread_network_data_update(protocol_interface_info_entry_t *cur) +{ +} + +bool thread_insist_that_mesh_isnt_a_link(const protocol_interface_info_entry_t *cur) +{ + return false; +} + +/* If it's a 16-bit src address, only pass it if it's on the list */ +bool thread_test_addr_filter(const buffer_t *buf, const protocol_interface_info_entry_t *cur) +{ + return false; +} + +uint8_t *thread_beacon_create_payload(const link_configuration_s *leader_link_setup,thread_commissioner_t *registered_commissioner, uint8_t *return_length) +{ + return NULL; +} + +uint8_t thread_beacon_indication(uint8_t *ptr, uint8_t len, protocol_interface_info_entry_t *cur) +{ + return 0; +} + +void thread_network_data_request_disable_trig(protocol_interface_info_entry_t *cur) +{ + +} + +void thread_network_data_request_trig(protocol_interface_info_entry_t *cur, uint8_t *requestDstAddress, bool delaydTrig) +{ + +} diff --git a/test/coap-service/unittest/stub/thread_test_api_stub.c b/test/coap-service/unittest/stub/thread_test_api_stub.c new file mode 100644 index 0000000000..d3672a5ae2 --- /dev/null +++ b/test/coap-service/unittest/stub/thread_test_api_stub.c @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2014-2015 ARM Limited. All rights reserved. + */ +#include "config.h" +#include +#include +#include +#include + +#include "ns_trace.h" +#include "common_functions.h" +#include "NWK_INTERFACE/Include/protocol.h" +#include "6LoWPAN/Thread/thread.h" +#include "6LoWPAN/Thread/thread_routing.h" +#include "MAC/IEEE802_15_4/mac_security_interface.h" + +#define TRACE_GROUP "tapi" + +int_fast8_t arm_nwk_6lowpan_thread_test_router_id_push( + int8_t interface_id, + const uint8_t *euid64, + uint8_t router_id) +{ + return 0; +} + +int_fast8_t arm_nwk_6lowpan_thread_test_add_neighbour( + int8_t interface_id, + uint16_t neighbour_short_addr, + uint_fast8_t link_margin_db, + uint8_t id_sequence, + const uint8_t *id_mask, + const uint8_t *route_data) +{ + return 0; +} + +int_fast8_t arm_nwk_6lowpan_thread_test_remove_neighbour( + int8_t interface_id, + uint16_t neighbour_short_addr) +{ + return 0; + +} + +int_fast8_t arm_nwk_6lowpan_thread_test_set_addr_filter( + int8_t interface_id, + uint8_t num_short_addrs, + const uint16_t valid_short_addrs[num_short_addrs], + uint8_t num_long_addrs, + const uint8_t valid_long_addrs[num_long_addrs][8]) +{ + return 0; +} + +int_fast8_t arm_nwk_6lowpan_thread_adjust_link_margins( + int8_t interface_id, + int8_t adjustment) +{ + return 0; +} + +void arm_nwk_6lowpan_thread_test_print_routing_database(int8_t interface_id) +{ +} + +int8_t arm_nwk_key_update_trig(int8_t interface_id) +{ + return 0; +} diff --git a/test/coap-service/unittest/stub/timeout_stub.c b/test/coap-service/unittest/stub/timeout_stub.c new file mode 100644 index 0000000000..7738efe05e --- /dev/null +++ b/test/coap-service/unittest/stub/timeout_stub.c @@ -0,0 +1,15 @@ +//todo:is this right place, or should this be located to event-loop modules stubs? + + +#include "ns_types.h" +#include "eventOS_event_timer.h" + +timeout_t *eventOS_timeout_ms(void (*callback)(void *), uint32_t ms, void *arg) +{ + return NULL; +} + +void eventOS_timeout_cancel(timeout_t *t) +{ + +} diff --git a/xsl_script.sh b/xsl_script.sh new file mode 100755 index 0000000000..d5320b42b8 --- /dev/null +++ b/xsl_script.sh @@ -0,0 +1,35 @@ +#!/bin/bash + +# Copyright (c) 2015 ARM Limited. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 +# 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. + +echo +echo "Creating report" +echo + +echo ' + +' >> lcov/index.xml + +for f in lcov/results/*.xml +do +name=${f##*/} +echo ''>> lcov/index.xml +done + +echo '' >> lcov/index.xml + +echo +echo "Report created to lcov/index.xml (outputs html)" +echo \ No newline at end of file From b95d5be08059a5fbe2d41bed2236aad87c8e0be4 Mon Sep 17 00:00:00 2001 From: Antti Kauppila Date: Mon, 21 Dec 2015 11:56:04 +0200 Subject: [PATCH 047/154] Merged token handling + updated unit tests --- source/coap_message_handler.c | 36 +++++++++++++++---- source/include/coap_message_handler.h | 5 +-- .../unittest/coap_message_handler/Makefile | 1 + .../test_coap_message_handler.c | 8 +++-- .../coap-service/unittest/stub/randLIB_stub.c | 5 +++ 5 files changed, 44 insertions(+), 11 deletions(-) diff --git a/source/coap_message_handler.c b/source/coap_message_handler.c index 19c3981c72..fee2c12834 100644 --- a/source/coap_message_handler.c +++ b/source/coap_message_handler.c @@ -9,6 +9,7 @@ #include "ns_types.h" #include "ns_list.h" #include "ns_trace.h" +#include "randLIB.h" #define TRACE_GROUP "CoSA" @@ -41,6 +42,19 @@ static coap_transaction_t *transaction_find_client(uint16_t msg_id) } return this; } + +static coap_transaction_t *transaction_find_client_by_token(uint8_t token[4]) +{ + coap_transaction_t *this = NULL; + ns_list_foreach(coap_transaction_t, cur_ptr, &request_list) { + if (memcmp(cur_ptr->token,token,4) == 0 && cur_ptr->client_request) { + this = cur_ptr; + break; + } + } + return this; +} + static coap_transaction_t *transaction_find_server(uint16_t msg_id) { coap_transaction_t *this = NULL; @@ -88,15 +102,16 @@ static void transaction_delete(coap_transaction_t *this) static int8_t coap_rx_function(sn_coap_hdr_s *resp_ptr, sn_nsdl_addr_s *address_ptr, void *param) { - coap_transaction_t *this; + coap_transaction_t *this = NULL; (void)address_ptr; (void)param; tr_warn("transaction was not handled"); if (!resp_ptr) { return -1; } - //TODO: IOTCLT-294 & 295 here. - this = transaction_find_client(resp_ptr->msg_id); + if( resp_ptr->token_ptr ){ + this = transaction_find_client_by_token(resp_ptr->token_ptr); + } if (this && this->resp_cb) { this->resp_cb(this->service_id, resp_ptr->msg_id, NULL); } @@ -210,7 +225,10 @@ int16_t coap_message_handler_coap_msg_process(coap_msg_handler_t *handle, int8_t } } else { //response find by MSG id - coap_transaction_t *this = transaction_find_client(coap_message->msg_id); + coap_transaction_t *this = NULL; + if( coap_message->token_ptr ){ + this = transaction_find_client_by_token(coap_message->token_ptr); + } if (!this) { tr_error("client transaction not found"); sn_coap_parser_release_allocated_coap_msg_mem(handle->coap, coap_message); @@ -234,6 +252,7 @@ uint16_t coap_message_handler_request_send(coap_msg_handler_t *handle, int8_t se coap_transaction_t *transaction_ptr; sn_coap_hdr_s request; sn_nsdl_addr_s dst_addr; + uint8_t token[4]; uint16_t data_len; uint8_t *data_ptr; @@ -261,7 +280,13 @@ uint16_t coap_message_handler_request_send(coap_msg_handler_t *handle, int8_t se request.uri_path_ptr = (uint8_t *)uri; request.uri_path_len = strlen(uri); coap_service_build_content_format(&request, cont_type); - //TODO: check validity of request.content_type_ptr + + do{ + randLIB_get_n_bytes_random(token,4); + }while(transaction_find_client_by_token(token)); + memcpy(transaction_ptr->token,token,4); + request.token_ptr = transaction_ptr->token; + request.token_len = 4; request.payload_len = payload_len; request.payload_ptr = (uint8_t *) payload_ptr; // Cast away const and trust that nsdl doesn't modify... @@ -281,7 +306,6 @@ uint16_t coap_message_handler_request_send(coap_msg_handler_t *handle, int8_t se own_free(data_ptr); if(request_response_cb == NULL){ //No response expected - transaction_delete(transaction_ptr); return 0; } return transaction_ptr->msg_id; diff --git a/source/include/coap_message_handler.h b/source/include/coap_message_handler.h index a7170a9a15..7ab67f2966 100644 --- a/source/include/coap_message_handler.h +++ b/source/include/coap_message_handler.h @@ -2,8 +2,8 @@ * Copyright (c) 2015 ARM Limited. All rights reserved. */ -#ifndef __COAPPI_SERVICE_API_H__ -#define __COAPPI_SERVICE_API_H__ +#ifndef __COAP_MESSAGE_HANDLER_H__ +#define __COAP_MESSAGE_HANDLER_H__ #include #include "sn_coap_header.h" @@ -34,6 +34,7 @@ typedef struct coap_msg_handler_s { typedef struct coap_transaction { uint8_t remote_address[16]; uint16_t remote_port; + uint8_t token[4]; uint16_t msg_id; int8_t service_id; uint8_t options; diff --git a/test/coap-service/unittest/coap_message_handler/Makefile b/test/coap-service/unittest/coap_message_handler/Makefile index 8ca92aaf85..312b8c7ec7 100644 --- a/test/coap-service/unittest/coap_message_handler/Makefile +++ b/test/coap-service/unittest/coap_message_handler/Makefile @@ -16,6 +16,7 @@ TEST_SRC_FILES = \ ../stub/sn_coap_builder_stub.c \ ../stub/nsdynmemLIB_stub.c \ ../stub/ns_list_stub.c \ + ../stub/randLIB_stub.c \ include ../MakefileWorker.mk diff --git a/test/coap-service/unittest/coap_message_handler/test_coap_message_handler.c b/test/coap-service/unittest/coap_message_handler/test_coap_message_handler.c index 126e05aa68..827fdc7b60 100644 --- a/test/coap-service/unittest/coap_message_handler/test_coap_message_handler.c +++ b/test/coap-service/unittest/coap_message_handler/test_coap_message_handler.c @@ -172,11 +172,13 @@ bool test_coap_message_handler_coap_msg_process() return false; sn_coap_protocol_stub.expectedHeader->msg_id = 2; - if( 0 != coap_message_handler_coap_msg_process(handle, 0, buf, 22, NULL, 0, process_cb)) +// sn_coap_protocol_stub.expectedHeader->token_ptr = (uint8_t*)malloc(4); +// memset(sn_coap_protocol_stub.expectedHeader->token_ptr, 1, 4); + if( -1 != coap_message_handler_coap_msg_process(handle, 0, buf, 22, NULL, 0, process_cb)) return false; -// free(sn_coap_protocol_stub.expectedHeader); -// sn_coap_protocol_stub.expectedHeader = NULL; +// free(sn_coap_protocol_stub.expectedHeader->token_ptr); + free(sn_coap_protocol_stub.expectedCoap); sn_coap_protocol_stub.expectedCoap = NULL; coap_message_handler_destroy(handle); diff --git a/test/coap-service/unittest/stub/randLIB_stub.c b/test/coap-service/unittest/stub/randLIB_stub.c index ac55243027..5d9f15ff25 100644 --- a/test/coap-service/unittest/stub/randLIB_stub.c +++ b/test/coap-service/unittest/stub/randLIB_stub.c @@ -12,6 +12,8 @@ #error "RAND_MAX isn't 2^n-1 :(" #endif +int counter = 1; + void randLIB_seed_random(void) { } @@ -33,6 +35,9 @@ uint32_t randLIB_get_32bit(void) int8_t randLIB_get_n_bytes_random(uint8_t *data_ptr, uint8_t eight_bit_boundary) { + if(data_ptr && eight_bit_boundary > 0){ + data_ptr[0] = counter++%255; + } return 0; } From 9a043c3b5071823787ab9281b872f65613eab3d4 Mon Sep 17 00:00:00 2001 From: Antti Kauppila Date: Tue, 22 Dec 2015 10:32:31 +0200 Subject: [PATCH 048/154] enabled unit tests --- module.json | 3 ++- run_unit_tests.sh | 23 +++++++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) create mode 100755 run_unit_tests.sh diff --git a/module.json b/module.json index 7c4c0da599..7208e9d57f 100644 --- a/module.json +++ b/module.json @@ -21,7 +21,8 @@ "nanostack-libservice": "^3.0.0", "mbed-client-c": "^1.1.0", "sal-stack-nanostack-eventloop": "^1.0.0", - "sal-stack-nanostack": "^3.0.0" + "sal-stack-nanostack": "^3.0.0", + "mbedtls": "^2.0.0" }, "targetDependencies": {} } diff --git a/run_unit_tests.sh b/run_unit_tests.sh new file mode 100755 index 0000000000..0fed9ad320 --- /dev/null +++ b/run_unit_tests.sh @@ -0,0 +1,23 @@ +#!/bin/bash +# Copyright (c) 2015 ARM Limited. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 +# 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. + +echo +echo "Build coap service unit tests" +echo + +yt target x86-linux-native +yt up +make -f Makefile.test test +make -f Makefile.test test clean From 488a05bc5f732726059efa840ade15ba21a0910c Mon Sep 17 00:00:00 2001 From: Antti Kauppila Date: Tue, 22 Dec 2015 14:48:27 +0200 Subject: [PATCH 049/154] Small fixes --- .gitignore | 6 ++++++ module.json | 1 - source/coap_security_handler.c | 3 ++- .../unittest/stub/thread_management_server_stub.c | 2 +- 4 files changed, 9 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index 80fbaf0da9..ea0c29b5cf 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,9 @@ output lcov coverage +.yotta.json +.yotta_ignore +build/ +yotta_modules/ +yotta_targets/ + diff --git a/module.json b/module.json index 7208e9d57f..0fe1bbb866 100644 --- a/module.json +++ b/module.json @@ -20,7 +20,6 @@ "dependencies": { "nanostack-libservice": "^3.0.0", "mbed-client-c": "^1.1.0", - "sal-stack-nanostack-eventloop": "^1.0.0", "sal-stack-nanostack": "^3.0.0", "mbedtls": "^2.0.0" }, diff --git a/source/coap_security_handler.c b/source/coap_security_handler.c index fd8a99dadd..b7bf166299 100644 --- a/source/coap_security_handler.c +++ b/source/coap_security_handler.c @@ -18,7 +18,7 @@ #include "mbedtls/ssl_ciphersuites.h" -const static int PSK_SUITES[] = { +const int PSK_SUITES[] = { MBEDTLS_TLS_ECJPAKE_WITH_AES_128_CCM_8, 0 }; @@ -267,6 +267,7 @@ int coap_security_handler_connect(thread_security_t *sec, bool is_server, const memcpy(sec->_pw, pw, len); sec->_pw_len = len; } + if( mbedtls_ssl_set_hs_ecjpake_password(&sec->_ssl, pw, len) != 0 ){ return -1; } diff --git a/test/coap-service/unittest/stub/thread_management_server_stub.c b/test/coap-service/unittest/stub/thread_management_server_stub.c index 7e6b3d3b4d..78b942420f 100644 --- a/test/coap-service/unittest/stub/thread_management_server_stub.c +++ b/test/coap-service/unittest/stub/thread_management_server_stub.c @@ -23,7 +23,7 @@ #include "thread_commissioning_if.h" //#include "thread_tmf_data_if.h" -int thread_management_server_init(int8_t interface_id, uint8_t *PSKd_ptr, uint8_t PSKd_len) +int thread_management_server_init(int8_t interface_id) { return 0; } From 177bde087e1831870bbcfd843e72b9d19dde5f03 Mon Sep 17 00:00:00 2001 From: Antti Kauppila Date: Tue, 22 Dec 2015 16:46:24 +0200 Subject: [PATCH 050/154] Fix yotta build by overriding custom cmake flags --- source/include/config-thread.h | 94 ++++++++++++++++++++++++++++++++++ source/override_flags.cmake | 1 + 2 files changed, 95 insertions(+) create mode 100755 source/include/config-thread.h create mode 100644 source/override_flags.cmake diff --git a/source/include/config-thread.h b/source/include/config-thread.h new file mode 100755 index 0000000000..e694b75ed1 --- /dev/null +++ b/source/include/config-thread.h @@ -0,0 +1,94 @@ +/* + * Minimal configuration for using TLS as part of Thread + * + * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved + * SPDX-License-Identifier: Apache-2.0 + * + * 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. + * + * This file is part of mbed TLS (https://tls.mbed.org) + */ + +/* + * Minimal configuration for using TLS a part of Thread + * http://threadgroup.org/ + * + * Distinguishing features: + * - no RSA or classic DH, fully based on ECC + * - no X.509 + * - support for experimental EC J-PAKE key exchange + * + * See README.txt for usage instructions. + */ + +#ifndef MBEDTLS_CONFIG_H +#define MBEDTLS_CONFIG_H + +/* System support */ +#define MBEDTLS_HAVE_ASM + +/* mbed TLS feature support */ +#define MBEDTLS_AES_ROM_TABLES +#define MBEDTLS_ECP_DP_SECP256R1_ENABLED +#define MBEDTLS_ECP_NIST_OPTIM +#define MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED +#define MBEDTLS_SSL_MAX_FRAGMENT_LENGTH +#define MBEDTLS_SSL_PROTO_TLS1_2 +#define MBEDTLS_SSL_PROTO_DTLS +#define MBEDTLS_SSL_DTLS_ANTI_REPLAY +#define MBEDTLS_SSL_DTLS_HELLO_VERIFY +#define MBEDTLS_SSL_EXPORT_KEYS + +/* mbed TLS modules */ +#define MBEDTLS_AES_C +#define MBEDTLS_ASN1_PARSE_C +#define MBEDTLS_ASN1_WRITE_C +#define MBEDTLS_BIGNUM_C +#define MBEDTLS_CCM_C +#define MBEDTLS_CIPHER_C +#define MBEDTLS_CTR_DRBG_C +#define MBEDTLS_ECJPAKE_C +#define MBEDTLS_ECP_C +#define MBEDTLS_ENTROPY_C +#define MBEDTLS_HMAC_DRBG_C +#define MBEDTLS_MD_C +#define MBEDTLS_OID_C +#define MBEDTLS_PK_C +#define MBEDTLS_PK_PARSE_C +#define MBEDTLS_SHA256_C +#define MBEDTLS_SSL_COOKIE_C +#define MBEDTLS_SSL_CLI_C +#define MBEDTLS_SSL_SRV_C +#define MBEDTLS_SSL_TLS_C + +/* For tests using ssl-opt.sh */ +//#define MBEDTLS_NET_C +//#define MBEDTLS_TIMING_C + +/* Save RAM at the expense of ROM */ +#define MBEDTLS_AES_ROM_TABLES + +/* Save RAM by adjusting to our exact needs */ +#define MBEDTLS_ECP_MAX_BITS 256 +#define MBEDTLS_MPI_MAX_SIZE 32 // 256 bits is 32 bytes + +/* Save ROM and a few bytes of RAM by specifying our own ciphersuite list */ +#define MBEDTLS_SSL_CIPHERSUITES MBEDTLS_TLS_ECJPAKE_WITH_AES_128_CCM_8 + +#if defined(TARGET_LIKE_MBED) +#include "mbedtls/target_config.h" +#endif + +#include "mbedtls/check_config.h" + +#endif /* MBEDTLS_CONFIG_H */ diff --git a/source/override_flags.cmake b/source/override_flags.cmake new file mode 100644 index 0000000000..bf252babee --- /dev/null +++ b/source/override_flags.cmake @@ -0,0 +1 @@ +set_target_properties(coap-service PROPERTIES COMPILE_FLAGS "-DMBEDTLS_CONFIG_FILE=''") From 42e3dcb2ab0dbdf355e13c283a5d99d9813b5ca7 Mon Sep 17 00:00:00 2001 From: Antti Kauppila Date: Tue, 22 Dec 2015 16:53:03 +0200 Subject: [PATCH 051/154] Updated yotta_ignore --- .gitignore | 1 - .yotta_ignore | 4 ++++ 2 files changed, 4 insertions(+), 1 deletion(-) create mode 100644 .yotta_ignore diff --git a/.gitignore b/.gitignore index ea0c29b5cf..f42f4600c9 100644 --- a/.gitignore +++ b/.gitignore @@ -4,7 +4,6 @@ output lcov coverage .yotta.json -.yotta_ignore build/ yotta_modules/ yotta_targets/ diff --git a/.yotta_ignore b/.yotta_ignore new file mode 100644 index 0000000000..ab97c1af02 --- /dev/null +++ b/.yotta_ignore @@ -0,0 +1,4 @@ +unittest/* +test/* +doxygen/* + From b2798653492a948c0590d7438ed81301d34e911a Mon Sep 17 00:00:00 2001 From: Antti Kauppila Date: Wed, 23 Dec 2015 09:25:55 +0200 Subject: [PATCH 052/154] Enabled timing to get strong entropy source --- source/include/config-thread.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/include/config-thread.h b/source/include/config-thread.h index e694b75ed1..74896a801b 100755 --- a/source/include/config-thread.h +++ b/source/include/config-thread.h @@ -73,7 +73,7 @@ /* For tests using ssl-opt.sh */ //#define MBEDTLS_NET_C -//#define MBEDTLS_TIMING_C +#define MBEDTLS_TIMING_C /* Save RAM at the expense of ROM */ #define MBEDTLS_AES_ROM_TABLES From 1fb3daf3460b66f4005c8490b36653dd44109231 Mon Sep 17 00:00:00 2001 From: Antti Kauppila Date: Wed, 23 Dec 2015 10:07:24 +0200 Subject: [PATCH 053/154] Added support for closing a secure connection by giving address and port --- coap-service/coap_service_api.h | 3 +- source/coap_connection_handler.c | 37 ++++++++++++++----- source/coap_security_handler.c | 4 +- source/coap_service_api.c | 6 +-- source/include/coap_connection_handler.h | 2 +- source/include/config-thread.h | 2 +- .../stub/coap_connection_handler_stub.c | 2 +- 7 files changed, 38 insertions(+), 18 deletions(-) diff --git a/coap-service/coap_service_api.h b/coap-service/coap_service_api.h index 98529cc18a..cf4058439c 100755 --- a/coap-service/coap_service_api.h +++ b/coap-service/coap_service_api.h @@ -13,6 +13,7 @@ extern "C" { #include "ns_types.h" #include "sn_coap_header.h" +#include "ns_address.h" /** * This interface is used in sending and receiving of CoAP messages to multicast address and receive multiple responses. @@ -124,7 +125,7 @@ extern void coap_service_delete( int8_t service_id ); * * \param service_id Id number of the current service. */ -extern void coap_service_close_secure_connection(int8_t service_id); +extern void coap_service_close_secure_connection(int8_t service_id, ns_address_t *dest_addr); /** * \brief Sets password for device diff --git a/source/coap_connection_handler.c b/source/coap_connection_handler.c index 39b5b4402d..a51aac7405 100644 --- a/source/coap_connection_handler.c +++ b/source/coap_connection_handler.c @@ -131,6 +131,20 @@ static secure_session_t *secure_session_find_by_timer_id(int8_t timer_id) return this; } +static secure_session_t *secure_session_find_by_parent(internal_socket_t *parent) +{ + secure_session_t *this = NULL; + ns_list_foreach(secure_session_t, cur_ptr, &secure_session_list) { + if( cur_ptr->sec_handler ){ + if (cur_ptr->parent == parent ) { + this = cur_ptr; + break; + } + } + } + return this; +} + static secure_session_t *secure_session_find(internal_socket_t *parent, uint8_t *address_ptr, uint16_t port) { secure_session_t *this = NULL; @@ -258,6 +272,7 @@ static int send_to_socket(int8_t socket_id, uint8_t *address_ptr, uint16_t port, socket_setsockopt(sock->listen_socket, SOCKET_IPPROTO_IPV6, SOCKET_IPV6_ADDR_PREFERENCES, &opt_name, sizeof(int)); socket_setsockopt(sock->listen_socket, SOCKET_IPPROTO_IPV6, SOCKET_LINK_LAYER_SECURITY, &securityLinkLayer, sizeof(int8_t)); //For some reason socket_sendto returns 0 in success, while other socket impls return number of bytes sent!!! + //TODO: check if address_ptr is valid and use that instead if it is int ret = socket_sendto(sock->listen_socket, &sock->dest_addr, (unsigned char*)buf, len); if( ret < 0 ) return ret; @@ -557,15 +572,17 @@ void connection_handler_destroy(thread_conn_handler_t *handler) if( handler->socket && handler->socket->is_secure){ //If nothing is sent, there is no address to find. //This case is handled in int_socket_delete. - secure_session_t *session = secure_session_find( handler->socket, handler->socket->dest_addr.address, - handler->socket->dest_addr.identifier); + secure_session_t *session = secure_session_find_by_parent( handler->socket); - if( session && handler->socket->usage_counter == 1){ //Last connection - thread_security_send_close_alert( session->sec_handler ); - } + while(session != NULL ){ + if( session && handler->socket->usage_counter == 1){ //Last connection + thread_security_send_close_alert( session->sec_handler ); + } - if( session){ - secure_session_delete(session); + if( session){ + secure_session_delete(session); + } + session = secure_session_find_by_parent( handler->socket); } } int_socket_delete(handler->socket); @@ -574,12 +591,12 @@ void connection_handler_destroy(thread_conn_handler_t *handler) } } -void connection_handler_close_secure_connection( thread_conn_handler_t *handler ) +void connection_handler_close_secure_connection( thread_conn_handler_t *handler, ns_address_t *dest_addr ) { if(handler){ if( handler->socket && handler->socket->is_secure){ - secure_session_t *session = secure_session_find( handler->socket, handler->socket->dest_addr.address, - handler->socket->dest_addr.identifier); + secure_session_t *session = secure_session_find( handler->socket, dest_addr->address, + dest_addr->identifier); if( session ){ thread_security_send_close_alert( session->sec_handler ); } diff --git a/source/coap_security_handler.c b/source/coap_security_handler.c index b7bf166299..878d32afe8 100644 --- a/source/coap_security_handler.c +++ b/source/coap_security_handler.c @@ -44,8 +44,10 @@ static int coap_security_handler_init(thread_security_t *sec){ sec->_is_started = false; + //TODO: Must have at least 1 strong entropy source, otherwise DTLS will fail. + //This is NOT strong even we say it is! if( mbedtls_entropy_add_source( &sec->_entropy, entropy_poll, NULL, - 128, 0 ) < 0 ){ + 128, 1 ) < 0 ){ return -1; } diff --git a/source/coap_service_api.c b/source/coap_service_api.c index 444187d923..650861a013 100644 --- a/source/coap_service_api.c +++ b/source/coap_service_api.c @@ -344,14 +344,14 @@ void coap_service_delete(int8_t service_id) return; } -void coap_service_close_secure_connection(int8_t service_id) +void coap_service_close_secure_connection(int8_t service_id, ns_address_t *dest_addr) { coap_service_t *this = service_find(service_id); - if (!this) { + if (!this || !dest_addr) { return; } if (this->conn_handler){ - connection_handler_close_secure_connection(this->conn_handler); + connection_handler_close_secure_connection(this->conn_handler, dest_addr); } } diff --git a/source/include/coap_connection_handler.h b/source/include/coap_connection_handler.h index dd38b6e828..0bb7b9aafb 100644 --- a/source/include/coap_connection_handler.h +++ b/source/include/coap_connection_handler.h @@ -34,7 +34,7 @@ thread_conn_handler_t *connection_handler_create(receive_from_socket_cb *recv_fr void connection_handler_destroy( thread_conn_handler_t *handler ); -void connection_handler_close_secure_connection( thread_conn_handler_t *handler ); +void connection_handler_close_secure_connection(thread_conn_handler_t *handler, ns_address_t *dest_addr); int coap_connection_handler_open_connection(thread_conn_handler_t *handler, uint16_t listen_port, bool use_ephemeral_port, bool is_secure, bool real_socket, bool bypassSec); diff --git a/source/include/config-thread.h b/source/include/config-thread.h index 74896a801b..e694b75ed1 100755 --- a/source/include/config-thread.h +++ b/source/include/config-thread.h @@ -73,7 +73,7 @@ /* For tests using ssl-opt.sh */ //#define MBEDTLS_NET_C -#define MBEDTLS_TIMING_C +//#define MBEDTLS_TIMING_C /* Save RAM at the expense of ROM */ #define MBEDTLS_AES_ROM_TABLES diff --git a/test/coap-service/unittest/stub/coap_connection_handler_stub.c b/test/coap-service/unittest/stub/coap_connection_handler_stub.c index 03c2cf8237..93cb26bbb5 100644 --- a/test/coap-service/unittest/stub/coap_connection_handler_stub.c +++ b/test/coap-service/unittest/stub/coap_connection_handler_stub.c @@ -38,7 +38,7 @@ void connection_handler_destroy(thread_conn_handler_t *handler) } -void connection_handler_close_secure_connection( thread_conn_handler_t *handler ) +void connection_handler_close_secure_connection( thread_conn_handler_t *handler, ns_address_t *dest_addr ) { } From e384cf7622c53666e5a017e16ccac5c5aef36511 Mon Sep 17 00:00:00 2001 From: Antti Kauppila Date: Wed, 23 Dec 2015 10:25:46 +0200 Subject: [PATCH 054/154] Fixed unit tests --- test/coap-service/unittest/stub/sn_coap_protocol_stub.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/coap-service/unittest/stub/sn_coap_protocol_stub.c b/test/coap-service/unittest/stub/sn_coap_protocol_stub.c index 6687e41142..c7379c2da6 100644 --- a/test/coap-service/unittest/stub/sn_coap_protocol_stub.c +++ b/test/coap-service/unittest/stub/sn_coap_protocol_stub.c @@ -46,22 +46,22 @@ struct coap_s *sn_coap_protocol_init(void *(*used_malloc_func_ptr)(uint16_t), vo return sn_coap_protocol_stub.expectedCoap; } -int8_t sn_coap_protocol_set_block_size(uint16_t block_size) +int8_t sn_coap_protocol_set_block_size(struct coap_s *handle, uint16_t block_size) { return sn_coap_protocol_stub.expectedInt8; } -int8_t sn_coap_protocol_set_duplicate_buffer_size(uint8_t message_count) +int8_t sn_coap_protocol_set_duplicate_buffer_size(struct coap_s *handle, uint8_t size) { return sn_coap_protocol_stub.expectedInt8; } -int8_t sn_coap_protocol_set_retransmission_parameters(uint8_t resending_count, uint8_t resending_intervall) +int8_t sn_coap_protocol_set_retransmission_parameters(struct coap_s *handle, uint8_t resending_count, uint8_t resending_intervall) { return sn_coap_protocol_stub.expectedInt8; } -int8_t sn_coap_protocol_set_retransmission_buffer(uint8_t buffer_size_messages, uint16_t buffer_size_bytes) +int8_t sn_coap_protocol_set_retransmission_buffer(struct coap_s *handle, uint8_t buffer_size_messages, uint16_t buffer_size_bytes) { return sn_coap_protocol_stub.expectedInt8; } From 0a6ec9db932db2bf4a75437c7dfe1727dc04a5e1 Mon Sep 17 00:00:00 2001 From: Antti Kauppila Date: Wed, 23 Dec 2015 11:19:38 +0200 Subject: [PATCH 055/154] Fixed yotta based unit tests, cleaned useless stubs --- module.json | 2 +- source/coap_connection_handler.c | 1 - .../unittest/makefile_defines.txt | 24 +- .../unittest/stub/6lowpan_iphc_stub.c | 93 ----- .../unittest/stub/6lowpan_mesh_stub.c | 74 ---- .../coap-service/unittest/stub/address_stub.c | 230 ---------- .../coap-service/unittest/stub/address_stub.h | 21 - .../unittest/stub/buffer_dyn_stub.c | 63 --- .../stub/coap_connection_handler_stub.c | 1 - .../stub/coap_security_handler_stub.c | 1 - .../unittest/stub/common_functions_stub.c | 116 ------ test/coap-service/unittest/stub/cudp_stub.c | 36 -- .../unittest/stub/dhcp_service_api_stub.c | 157 ------- test/coap-service/unittest/stub/icmpv6_stub.c | 141 ------- .../unittest/stub/iphc_compress_stub.c | 28 -- .../unittest/stub/iphc_decompress_stub.c | 23 - .../unittest/stub/ipv6_routing_table_stub.c | 184 -------- test/coap-service/unittest/stub/ipv6_stub.c | 99 ----- .../unittest/stub/libDHCPv6_server_stub.c | 56 --- .../unittest/stub/libDHCPv6_stub.c | 212 ---------- .../unittest/stub/lowpan_context_stub.c | 39 -- .../unittest/stub/mac_data_poll_stub.c | 84 ---- .../unittest/stub/mac_mlme_stub.c | 221 ---------- .../unittest/stub/mac_pairwise_key_stub.c | 78 ---- .../stub/mac_security_interface_stub.c | 106 ----- .../unittest/stub/mle_service_stub.c | 220 ---------- test/coap-service/unittest/stub/mle_stub.c | 342 --------------- test/coap-service/unittest/stub/mle_stub.h | 21 - .../coap-service/unittest/stub/mle_tlv_stub.c | 130 ------ .../unittest/stub/multicast_stub.c | 52 --- test/coap-service/unittest/stub/nd_proxy.c | 20 - .../unittest/stub/nd_proxy_stub.c | 56 --- .../unittest/stub/nd_router_object_stub.c | 242 ----------- .../unittest/stub/neighbor_cache_stub.c | 50 --- test/coap-service/unittest/stub/net_stub.c | 279 ------------- .../stub/protocol_6lowpan_bootstrap_stub.c | 162 -------- .../stub/protocol_6lowpan_interface_stub.c | 75 ---- .../unittest/stub/protocol_6lowpan_stub.c | 145 ------- .../unittest/stub/protocol_core_stub.c | 300 -------------- .../stub/protocol_interface_driver_stub.c | 14 - .../unittest/stub/protocol_ipv6_stub.c | 169 -------- .../unittest/stub/routing_table_stub.c | 128 ------ .../coap-service/unittest/stub/rpl_obj_stub.c | 392 ------------------ .../unittest/stub/security_lib_stub.c | 35 -- test/coap-service/unittest/stub/shalib_stub.c | 58 --- test/coap-service/unittest/stub/socket_stub.c | 93 ----- test/coap-service/unittest/stub/socket_stub.h | 24 -- .../unittest/stub/system_timer_stub.c | 1 - test/coap-service/unittest/stub/tcp_stub.c | 56 --- .../unittest/stub/thread_beacon_stub.c | 65 --- .../unittest/stub/thread_bootstrap_stub.c | 248 ----------- .../stub/thread_commissioning_if_stub.c | 67 --- .../unittest/stub/thread_dhcpv6_client_stub.c | 77 ---- .../unittest/stub/thread_dynamic_reed_stub.c | 32 -- .../stub/thread_host_bootstrap_stub.c | 87 ---- .../stub/thread_joiner_application_stub.c | 63 --- .../stub/thread_management_api_stub.c | 48 --- .../stub/thread_management_client_stub.c | 59 --- .../unittest/stub/thread_management_if_stub.c | 305 -------------- .../stub/thread_management_server_stub.c | 55 --- .../unittest/stub/thread_meshcop_lib_stub.c | 47 --- .../unittest/stub/thread_nd_stub.c | 85 ---- .../stub/thread_network_data_lib_stub.c | 79 ---- .../stub/thread_network_data_storage_stub.c | 287 ------------- .../unittest/stub/thread_network_synch_stub.c | 21 - .../stub/thread_router_bootstrap_stub.c | 137 ------ .../stub/thread_routerid_server_stub.c | 31 -- .../unittest/stub/thread_routing_stub.c | 165 -------- test/coap-service/unittest/stub/thread_stub.c | 373 ----------------- .../unittest/stub/thread_test_api_stub.c | 70 ---- .../coap-service/unittest/stub/timeout_stub.c | 15 - 71 files changed, 11 insertions(+), 7559 deletions(-) delete mode 100644 test/coap-service/unittest/stub/6lowpan_iphc_stub.c delete mode 100644 test/coap-service/unittest/stub/6lowpan_mesh_stub.c delete mode 100644 test/coap-service/unittest/stub/address_stub.c delete mode 100644 test/coap-service/unittest/stub/address_stub.h delete mode 100644 test/coap-service/unittest/stub/buffer_dyn_stub.c delete mode 100644 test/coap-service/unittest/stub/common_functions_stub.c delete mode 100644 test/coap-service/unittest/stub/cudp_stub.c delete mode 100644 test/coap-service/unittest/stub/dhcp_service_api_stub.c delete mode 100644 test/coap-service/unittest/stub/icmpv6_stub.c delete mode 100644 test/coap-service/unittest/stub/iphc_compress_stub.c delete mode 100644 test/coap-service/unittest/stub/iphc_decompress_stub.c delete mode 100644 test/coap-service/unittest/stub/ipv6_routing_table_stub.c delete mode 100644 test/coap-service/unittest/stub/ipv6_stub.c delete mode 100644 test/coap-service/unittest/stub/libDHCPv6_server_stub.c delete mode 100644 test/coap-service/unittest/stub/libDHCPv6_stub.c delete mode 100644 test/coap-service/unittest/stub/lowpan_context_stub.c delete mode 100644 test/coap-service/unittest/stub/mac_data_poll_stub.c delete mode 100644 test/coap-service/unittest/stub/mac_mlme_stub.c delete mode 100644 test/coap-service/unittest/stub/mac_pairwise_key_stub.c delete mode 100644 test/coap-service/unittest/stub/mac_security_interface_stub.c delete mode 100644 test/coap-service/unittest/stub/mle_service_stub.c delete mode 100644 test/coap-service/unittest/stub/mle_stub.c delete mode 100644 test/coap-service/unittest/stub/mle_stub.h delete mode 100644 test/coap-service/unittest/stub/mle_tlv_stub.c delete mode 100644 test/coap-service/unittest/stub/multicast_stub.c delete mode 100644 test/coap-service/unittest/stub/nd_proxy.c delete mode 100644 test/coap-service/unittest/stub/nd_proxy_stub.c delete mode 100644 test/coap-service/unittest/stub/nd_router_object_stub.c delete mode 100644 test/coap-service/unittest/stub/neighbor_cache_stub.c delete mode 100644 test/coap-service/unittest/stub/net_stub.c delete mode 100644 test/coap-service/unittest/stub/protocol_6lowpan_bootstrap_stub.c delete mode 100644 test/coap-service/unittest/stub/protocol_6lowpan_interface_stub.c delete mode 100644 test/coap-service/unittest/stub/protocol_6lowpan_stub.c delete mode 100644 test/coap-service/unittest/stub/protocol_core_stub.c delete mode 100644 test/coap-service/unittest/stub/protocol_interface_driver_stub.c delete mode 100644 test/coap-service/unittest/stub/protocol_ipv6_stub.c delete mode 100644 test/coap-service/unittest/stub/routing_table_stub.c delete mode 100644 test/coap-service/unittest/stub/rpl_obj_stub.c delete mode 100644 test/coap-service/unittest/stub/security_lib_stub.c delete mode 100644 test/coap-service/unittest/stub/shalib_stub.c delete mode 100644 test/coap-service/unittest/stub/socket_stub.c delete mode 100644 test/coap-service/unittest/stub/socket_stub.h delete mode 100644 test/coap-service/unittest/stub/tcp_stub.c delete mode 100644 test/coap-service/unittest/stub/thread_beacon_stub.c delete mode 100644 test/coap-service/unittest/stub/thread_bootstrap_stub.c delete mode 100644 test/coap-service/unittest/stub/thread_commissioning_if_stub.c delete mode 100644 test/coap-service/unittest/stub/thread_dhcpv6_client_stub.c delete mode 100644 test/coap-service/unittest/stub/thread_dynamic_reed_stub.c delete mode 100644 test/coap-service/unittest/stub/thread_host_bootstrap_stub.c delete mode 100644 test/coap-service/unittest/stub/thread_joiner_application_stub.c delete mode 100644 test/coap-service/unittest/stub/thread_management_api_stub.c delete mode 100644 test/coap-service/unittest/stub/thread_management_client_stub.c delete mode 100644 test/coap-service/unittest/stub/thread_management_if_stub.c delete mode 100644 test/coap-service/unittest/stub/thread_management_server_stub.c delete mode 100644 test/coap-service/unittest/stub/thread_meshcop_lib_stub.c delete mode 100644 test/coap-service/unittest/stub/thread_nd_stub.c delete mode 100644 test/coap-service/unittest/stub/thread_network_data_lib_stub.c delete mode 100644 test/coap-service/unittest/stub/thread_network_data_storage_stub.c delete mode 100644 test/coap-service/unittest/stub/thread_network_synch_stub.c delete mode 100644 test/coap-service/unittest/stub/thread_router_bootstrap_stub.c delete mode 100644 test/coap-service/unittest/stub/thread_routerid_server_stub.c delete mode 100644 test/coap-service/unittest/stub/thread_routing_stub.c delete mode 100644 test/coap-service/unittest/stub/thread_stub.c delete mode 100644 test/coap-service/unittest/stub/thread_test_api_stub.c delete mode 100644 test/coap-service/unittest/stub/timeout_stub.c diff --git a/module.json b/module.json index 0fe1bbb866..702e61b8b5 100644 --- a/module.json +++ b/module.json @@ -19,7 +19,7 @@ ], "dependencies": { "nanostack-libservice": "^3.0.0", - "mbed-client-c": "^1.1.0", + "mbed-client-c": "^2.0.0", "sal-stack-nanostack": "^3.0.0", "mbedtls": "^2.0.0" }, diff --git a/source/coap_connection_handler.c b/source/coap_connection_handler.c index a51aac7405..f137af7bc5 100644 --- a/source/coap_connection_handler.c +++ b/source/coap_connection_handler.c @@ -10,7 +10,6 @@ #include "nsdynmemLIB.h" #include "socket_api.h" #include "net_interface.h" -#include "randLIB.h" #include "eventOS_callback_timer.h" #define TRACE_GROUP "ThCH" diff --git a/test/coap-service/unittest/makefile_defines.txt b/test/coap-service/unittest/makefile_defines.txt index 4225393d5c..7a8d1642a1 100755 --- a/test/coap-service/unittest/makefile_defines.txt +++ b/test/coap-service/unittest/makefile_defines.txt @@ -8,22 +8,18 @@ CPP_PLATFORM = gcc INCLUDE_DIRS =\ .\ ../stub\ - ../../../../../nanostack/source/6LoWPAN/Thread/\ - ../../../../../nanostack/source/6LoWPAN/Mesh/\ - ../../../../../nanostack/source/6LoWPAN/RPL/\ - ../../../../../nanostack/source/\ - ../../../../../nanostack/source/Core/include/\ - ../../../../../nanostack/source/Common_Protocols/\ - ../../../../../nanostack/source/Security/Common/\ - ../../../../../nanostack/source/Service_Libs/etx/\ - ../../../../../nanostack/source/MLE/\ + ../../../../coap-service/\ + ../../../../source/include/\ + ../../../../yotta_modules/mbedtls/ \ + ../../../../yotta_modules/sal-stack-nanostack/nanostack/ \ + ../../../../yotta_modules/nanostack-randlib/mbed-client-randlib/ \ + ../../../../yotta_modules/nanostack-libservice/mbed-client-libservice/ \ + ../../../../yotta_modules/mbed-client-c/nsdl-c/ \ + ../../../../yotta_modules/mbed-client-c/source/libCoap/src/include/ \ + ../../../../yotta_modules/sal-stack-nanostack-eventloop/nanostack-event-loop/ \ + ../../../../yotta_modules/sal-stack-nanostack-eventloop/source/ \ ../../../../../nanostack/nanostack/\ - ../../../../../coap-service/coap-service/\ - ../../../../../coap-service/source/include/\ ../../../../../libService/libService/\ - ../../../../../libService/exported-libs/mbed-client-libservice/mbed-client-libservice/\ - ../../../../../libService/exported-libs/mbed-client-randlib/mbed-client-randlib/\ - ../../../../../coap-service/coap-service/\ ../../../../../nsdl-c/nsdl-c/\ ../../../../../nsdl-c/source/libCoap/src/include/\ ../../../../../event-loop/nanostack-event-loop/\ diff --git a/test/coap-service/unittest/stub/6lowpan_iphc_stub.c b/test/coap-service/unittest/stub/6lowpan_iphc_stub.c deleted file mode 100644 index 062be99b7e..0000000000 --- a/test/coap-service/unittest/stub/6lowpan_iphc_stub.c +++ /dev/null @@ -1,93 +0,0 @@ -/* - * Copyright (c) 2013-2015 ARM Limited. All rights reserved. - */ - -#include "config.h" -#define HAVE_CIPV6 - -#ifdef HAVE_CIPV6 -#include "ns_types.h" -#include "string.h" -#include "ns_trace.h" -#include "Core/include/socket.h" -#include "Common_Protocols/ipv6.h" -#include "Common_Protocols/icmpv6.h" -#include "6LoWPAN/IPHC_Decode/cipv6.h" -#include "6LoWPAN/Fragmentation/cipv6_fragmenter.h" -#include "6LoWPAN/ND/icmp.h" -#include "NWK_INTERFACE/Include/protocol.h" -#include "ipv6_stack/protocol_ipv6.h" -#include "6LoWPAN/IPHC_Decode/cudp.h" -#include "6LoWPAN/IPHC_Decode/iphc_compress.h" -#include "6LoWPAN/IPHC_Decode/iphc_decompress.h" -#include "6LoWPAN/Mesh/mesh.h" -#include "6LoWPAN/Thread/thread.h" - -#ifdef HAVE_RPL -#include "6LoWPAN/RPL/rpl.h" -#include "6LoWPAN/RPL/rpl_obj.h" -#endif - -#define TRACE_GROUP "iphc" - -#include "MulticastTrigle/multicast.h" -#include "6LoWPAN/ND/nd_router_object.h" -#include "6LoWPAN/Bootstraps/protocol_6lowpan.h" -#include "MAC/IEEE802_15_4/mac_indirect_data.h" -#include "MAC/IEEE802_15_4/mac_mlme.h" -#include "nwk_stats_api.h" -#include "NWK_INTERFACE/Include/protocol_stats.h" -#include "common_functions.h" - -typedef struct ip_src_addr_t { - addrtype_t addr_type; /*!< Type of address */ - uint8_t address[8]; /*!< Source or destination address */ -} ip_src_addr_t; - - -NS_LARGE uint8_t ip_hc[2]; -NS_LARGE route_info_entry_t route_info_entry; -NS_LARGE uint8_t flow_len; -NS_LARGE uint8_t flow_ctrl[4]; - -void cipv6_set_next_hop(buffer_t *buf); -uint8_t cipv6_forward_rl_check(void); -buffer_t *cipv6_reallocate_ip_headers(buffer_t *buf, uint8_t type, forward_dest_t dest); - - -buffer_t *cipv6_check_link_layer_length(buffer_t *buf) -{ - return NULL; -} - -void cipv6_set_next_hop(buffer_t *buf) -{ -} - -uint8_t cipv6_forward_rl_check(void) -{ - return 0; -} - -buffer_t *cipv6_reallocate_ip_headers(buffer_t *buf, uint8_t type, forward_dest_t dest) -{ - return NULL; -} - -buffer_t *cipv6_down(buffer_t *buf) -{ - return NULL; -} - -buffer_t *lowpan_down(buffer_t *buf) -{ - return NULL; -} - -buffer_t *cipv6_up(buffer_t *buf) -{ - return NULL; -} - -#endif /* HAVE_CIPV6 */ - diff --git a/test/coap-service/unittest/stub/6lowpan_mesh_stub.c b/test/coap-service/unittest/stub/6lowpan_mesh_stub.c deleted file mode 100644 index 3c83002267..0000000000 --- a/test/coap-service/unittest/stub/6lowpan_mesh_stub.c +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright (c) 2014-2015 ARM Limited. All rights reserved. - */ - -#include "config.h" -#include -#include "ns_types.h" -#define HAVE_DEBUG 1 -#include "buffer.h" -#include "ns_list.h" -//#include "platform/ns_debug.h" -#include "common_functions.h" -#include "NWK_INTERFACE/Include/protocol.h" -#include "MAC/IEEE802_15_4/mac_mlme.h" -#include "NWK_INTERFACE/Include/protocol_stats.h" -#include "6LoWPAN/IPHC_Decode/cipv6.h" -#include "MAC/IEEE802_15_4/mac_indirect_data.h" -#include "mesh.h" - -void debug(const char *msg) -{ -} - -protocol_interface_info_entry_t *protocol_stack_interface_info_get(nwk_interface_id nwk_id) -{ - return NULL; -} - -extern COMMON_FUNCTIONS_FN uint16_t common_read_16_bit(const uint8_t data_buf[__static 2]); -extern COMMON_FUNCTIONS_FN uint8_t *common_write_16_bit(uint16_t value, uint8_t ptr[__static 2]); -extern COMMON_FUNCTIONS_FN uint8_t *common_write_16_bit_inverse(uint16_t value, uint8_t ptr[__static 2]); - -bool nwk_interface_compare_mac_address(protocol_interface_info_entry_t *cur, uint_fast8_t addrlen, const uint8_t addr[]) -{ - return false; -} - -uint8_t addr_check_broadcast(const address_t addr, addrtype_t addr_type) -{ - return 0; -} - -#ifndef HAVE_DEBUG -uint8_t *buffer_corrupt_check(buffer_t *buf) -{ - return NULL; -} -#endif - -bool mac_mlme_write_our_addr(struct protocol_interface_info_entry *cur, sockaddr_t *sockaddr) -{ -} - -mac_direct_check_res_e mac_indirect_data_check(struct buffer *buf) -{ - mac_direct_check_res_e res = {0}; - return res; -} - -void protocol_stats_update(nwk_stats_type_t type, uint16_t update_val) -{ -} - -#if 0 -buffer_t *buffer_headroom(buffer_t *buf, uint16_t size) -{ - return NULL; -} -#endif - -buffer_t *cipv6_check_link_layer_length(buffer_t *buf) -{ - return NULL; -} diff --git a/test/coap-service/unittest/stub/address_stub.c b/test/coap-service/unittest/stub/address_stub.c deleted file mode 100644 index b55d9a70b1..0000000000 --- a/test/coap-service/unittest/stub/address_stub.c +++ /dev/null @@ -1,230 +0,0 @@ -/* - * Copyright (c) 2008, 2010-2015 ARM Limited. All rights reserved. - */ -/** - * \file address.c - * \brief Utility functions concernig addresses - * - * This file contains all the utility functions that can be used to - * check, manipulate etc. addresses. - */ -#include "config.h" -#include "ns_types.h" -#include "ip6string.h" -#include "ns_trace.h" -#include "randLIB.h" -#include "string.h" -#include "nsdynmemLIB.h" -#include "socket_api.h" -#include "NWK_INTERFACE/Include/protocol.h" -#include "Common_Protocols/ipv6.h" -#include "Common_Protocols/icmpv6.h" -#include "6LoWPAN/Thread/thread.h" -#include "common_functions.h" - -#include "address_stub.h" - -#define TRACE_GROUP_ADDRESS "addr" - -#define ADDR_SHORT_MULTICAST_MAX 10 -#define ADDR_MAX_DYNAMIC_MULTICAST_ADDRESSES 100 - -address_stub_def address_stub; - -typedef struct addr_policy_table_entry_t { - uint8_t prefix[16]; - uint8_t prefix_len; - uint8_t precedence; - uint8_t label; - ns_list_link_t link; -} addr_policy_table_entry_t; - -static NS_LIST_DEFINE(addr_policy_table, addr_policy_table_entry_t, link); - -uint32_t addr_preferences_default = SOCKET_IPV6_PREFER_SRC_TMP | SOCKET_IPV6_PREFER_SRC_6LOWPAN_SHORT; - -const uint8_t ADDR_LINK_LOCAL_PREFIX[8] = { 0xfe, 0x80 }; -const uint8_t ADDR_SHORT_ADR_SUFFIC[6] = { 0x00, 0x00, 0x00, 0xff, 0xfe, 0x00}; - -const uint8_t ADDR_MULTICAST_SOLICITED[13] = { 0xff, 0x02, [11] = 0x01, 0xff}; -const uint8_t ADDR_LINK_LOCAL_ALL_NODES[16] = { 0xff, 0x02, [15] = 0x01 }; -const uint8_t ADDR_LINK_LOCAL_ALL_ROUTERS[16] = { 0xff, 0x02, [15] = 0x02 }; -const uint8_t ADDR_MULTICAST_ALL_DHCPV6_SERVER[16] = { 0xff, 0x03, [13] = 0x01, 0x00, 0x03 }; -const uint8_t ADDR_ALL_DHCP_RELAY_AGENTS_AND_SERVERS[16] = { 0xff, 0x02, [13] = 0x01, 0x00, 0x02 }; - -const uint8_t ADDR_MULTICAST_SITEPREFIX[15] = { 0xff, 0x05 }; -const uint8_t ADDR_MULTICAST_SUBPREFIX[15] = { 0xff, 0x03 }; -const uint8_t ADDR_IPV4_MAPPED_PREFIX[12] = { [10] = 0xff, 0xff }; -const uint8_t ADDR_LOOPBACK[16] = { [15] = 1 }; -const uint8_t ADDR_UNSPECIFIED[16] = { 0 }; -#define ADDR_IPV4_COMPATIBLE ADDR_LOOPBACK /* First 96 bits match...*/ - - -uint8_t addr_len_from_type(addrtype_t addr_type) -{ - return 0; -} - -uint8_t addr_check_broadcast(const address_t addr, addrtype_t addr_type) -{ - address_stub.expectedUint8ptr = &addr; - address_stub.expectedUint8 = addr_type; - - return address_stub.returnUint8; -} - -bool addr_is_ipv6_link_local(const uint8_t addr[__static 16]) -{ - return false; -} - -/* Scope(A), as defined in RFC 6724 plus RFC 4007 */ -uint_fast8_t addr_ipv6_scope(const uint8_t addr[__static 16], const protocol_interface_info_entry_t *interface) -{ - return 0; -} - -void address_module_init(void) -{ -} - -void addr_multicast_list_init(void) -{ -} - -uint8_t addr_multicast_list_allocate(const uint8_t *ptr, uint8_t relay_allocate) -{ - return -1; -} - -uint8_t addr_multicast_list_free(const uint8_t *ptr) -{ - return 1; -} - -uint8_t addr_multicast_list_check(const uint8_t *ptr, bool rx_adr, protocol_interface_info_entry_t *cur_interface) -{ - return -1; -} - -int_fast8_t addr_policy_table_add_entry(const uint8_t *prefix, uint8_t len, uint8_t precedence, uint8_t label) -{ - return -1; -} - -int_fast8_t addr_policy_table_delete_entry(const uint8_t *prefix, uint8_t len) -{ - return -1; -} - -void addr_policy_table_print(void) -{ -} - -if_address_entry_t *addr_get_entry(const protocol_interface_info_entry_t *interface, const uint8_t addr[__static 16]) -{ - return NULL; -} - -bool addr_is_assigned_to_interface(const protocol_interface_info_entry_t *interface, const uint8_t addr[__static 16]) -{ - return false; -} - -bool addr_is_tentative_for_interface(const protocol_interface_info_entry_t *interface, const uint8_t addr[__static 16]) -{ - return false; -} - -/* RFC 6724 Default source address selection */ -const uint8_t *addr_select_source(protocol_interface_info_entry_t *interface, const uint8_t dest[__static 16], uint32_t addr_preferences) -{ - return NULL; -} - -const uint8_t *addr_select_with_prefix(protocol_interface_info_entry_t *cur, const uint8_t *prefix, uint8_t prefix_len, uint32_t addr_preferences) -{ - return NULL; -} - -void addr_timer(protocol_interface_info_entry_t *cur, uint_fast16_t ticks) -{ -} - -if_address_entry_t *addr_add(protocol_interface_info_entry_t *cur, const uint8_t address[__static 16], uint_fast8_t prefix_len, if_address_source_t source, uint32_t valid_lifetime, uint32_t preferred_lifetime, bool skip_dad) -{ - return NULL; -} - -int_fast8_t addr_delete(protocol_interface_info_entry_t *cur, const uint8_t address[__static 16]) -{ - return -1; -} - -void addr_delete_matching(protocol_interface_info_entry_t *cur, const uint8_t *prefix, uint8_t prefix_len, if_address_source_t source) -{ -} - -void addr_duplicate_detected(struct protocol_interface_info_entry *interface, const uint8_t addr[__static 16]) -{ -} - -void memswap(uint8_t *restrict a, uint8_t *restrict b, uint_fast8_t len) -{ -} - -bool addr_ipv6_equal(const uint8_t a[__static 16], const uint8_t b[__static 16]) -{ - return false; -} - -bool addr_iid_matches_eui64(const uint8_t iid[__static 8], const uint8_t eui64[__static 8]) -{ - return false; -} - -bool addr_iid_matches_lowpan_short(const uint8_t iid[__static 8], uint16_t short_addr) -{ - return false; -} - -uint8_t *addr_ipv6_write_from_lowpan_short(uint8_t dst[__static 16], const uint8_t prefix[__static 8], uint16_t short_addr) -{ - return NULL; -} - -bool addr_iid_from_outer(uint8_t iid_out[__static 8], const sockaddr_t *addr_in) -{ - return false; -} - - -int addr_interface_set_ll64(protocol_interface_info_entry_t *cur, if_address_callback_fn *cb) -{ - return -1; -} - -int8_t addr_interface_get_ll_address(protocol_interface_info_entry_t *cur, uint8_t *address_ptr, uint8_t address_type) -{ - return -1; -} - -int8_t addr_interface_get_any_gp_address(protocol_interface_info_entry_t *cur, uint8_t *address_ptr, uint8_t address_type) -{ - return -1; -} - -int8_t addr_interface_gp_prefix_compare(protocol_interface_info_entry_t *cur, const uint8_t *prefix) -{ - return -1; -} - -int8_t addr_interface_address_compare(protocol_interface_info_entry_t *cur, const uint8_t *addr) -{ - return -1; -} - -int8_t addr_interface_select_source(protocol_interface_info_entry_t *cur, uint8_t *src_ptr, const uint8_t *dest, uint32_t addr_preferences) -{ - return -1; -} diff --git a/test/coap-service/unittest/stub/address_stub.h b/test/coap-service/unittest/stub/address_stub.h deleted file mode 100644 index c57bbb6cd8..0000000000 --- a/test/coap-service/unittest/stub/address_stub.h +++ /dev/null @@ -1,21 +0,0 @@ -#ifndef __ADDRESS_STUB_H__ -#define __ADDRESS_STUB_H__ - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct { - uint8_t expectedUint8; - uint16_t expectedUint16; - uint8_t *expectedUint8ptr; - uint8_t returnUint8; -} address_stub_def; - -extern address_stub_def address_stub; - -#ifdef __cplusplus -} -#endif - -#endif // __ADDRESS_STUB_H__ diff --git a/test/coap-service/unittest/stub/buffer_dyn_stub.c b/test/coap-service/unittest/stub/buffer_dyn_stub.c deleted file mode 100644 index 036745dde2..0000000000 --- a/test/coap-service/unittest/stub/buffer_dyn_stub.c +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright (c) 2011-2015 ARM Limited. All rights reserved. - */ - -#include "config.h" -#include "string.h" -#include "ns_types.h" -#include "nsdynmemLIB.h" -#include "Core/include/address.h" -#include "Core/include/buffer.h" -#include "platform/ns_debug.h" -#include "platform/arm_hal_interrupt.h" -#include "NWK_INTERFACE/Include/protocol_stats.h" -#include "ip_fsc.h" - - -uint8_t *(buffer_corrupt_check)(buffer_t *buf) -{ - return 0; -} - - -buffer_t *buffer_get(uint16_t size) -{ - return NULL; -} - -buffer_t *buffer_headroom(buffer_t *buf, uint16_t size) -{ - return NULL; -} - -buffer_t *buffer_free_route(buffer_t *buf) -{ - return NULL; -} - -buffer_t *buffer_free(buffer_t *buf) -{ - return NULL; -} - -buffer_t *buffer_free_list(buffer_t *b) -{ - return NULL; -} - - -void buffer_data_add(buffer_t *buf, const uint8_t *data_ptr, uint16_t data_len) -{ - return; -} - - -buffer_t *buffer_clone(buffer_t *buf) -{ - return NULL; -} - -uint16_t buffer_ipv6_fcf(const buffer_t *buf, uint8_t next_header) -{ - return 0; -} diff --git a/test/coap-service/unittest/stub/coap_connection_handler_stub.c b/test/coap-service/unittest/stub/coap_connection_handler_stub.c index 93cb26bbb5..7390587ad8 100644 --- a/test/coap-service/unittest/stub/coap_connection_handler_stub.c +++ b/test/coap-service/unittest/stub/coap_connection_handler_stub.c @@ -10,7 +10,6 @@ #include "nsdynmemLIB.h" #include "socket_api.h" #include "net_interface.h" -#include "randLIB.h" #include "eventOS_callback_timer.h" #include "coap_connection_handler_stub.h" diff --git a/test/coap-service/unittest/stub/coap_security_handler_stub.c b/test/coap-service/unittest/stub/coap_security_handler_stub.c index dd5cb3b69e..bcf29c61f5 100644 --- a/test/coap-service/unittest/stub/coap_security_handler_stub.c +++ b/test/coap-service/unittest/stub/coap_security_handler_stub.c @@ -8,7 +8,6 @@ #include "ns_trace.h" #include "nsdynmemLIB.h" #include "coap_connection_handler.h" -#include "randLIB.h" #include "coap_security_handler_stub.h" thread_sec_def coap_security_handler_stub; diff --git a/test/coap-service/unittest/stub/common_functions_stub.c b/test/coap-service/unittest/stub/common_functions_stub.c deleted file mode 100644 index 4e30823ce2..0000000000 --- a/test/coap-service/unittest/stub/common_functions_stub.c +++ /dev/null @@ -1,116 +0,0 @@ -/* - * Copyright (c) 2014-2015 ARM Limited. All rights reserved. - */ -#include -#include -#include - -#include "ns_types.h" -//#include "common_functions.h" -#define COMMON_FUNCTIONS_FN - -#include - -bool bitsequal(const uint8_t *a, const uint8_t *b, uint_fast8_t bits) -{ - return true; -} - -uint8_t *bitcopy(uint8_t *restrict dst, const uint8_t *restrict src, uint_fast8_t bits) -{ - return NULL; -} - -COMMON_FUNCTIONS_FN uint8_t *common_write_64_bit(uint64_t value, uint8_t ptr[__static 8]) -{ - return NULL; -} - -COMMON_FUNCTIONS_FN uint64_t common_read_64_bit(const uint8_t data_buf[__static 8]) -{ - return 0; -} - -COMMON_FUNCTIONS_FN uint8_t *common_write_32_bit(uint32_t value, uint8_t ptr[__static 4]) -{ - return NULL; -} - -COMMON_FUNCTIONS_FN uint32_t common_read_32_bit(const uint8_t data_buf[__static 4]) -{ - return 0; -} - -COMMON_FUNCTIONS_FN uint8_t *common_write_32_bit_inverse(uint32_t value, uint8_t ptr[__static 4]) -{ - return NULL; -} - -COMMON_FUNCTIONS_FN uint32_t common_read_32_bit_inverse(const uint8_t data_buf[__static 4]) -{ - return 0; -} - -COMMON_FUNCTIONS_FN uint8_t *common_write_24_bit(uint_fast24_t value, uint8_t ptr[__static 3]) -{ - return NULL; -} - -COMMON_FUNCTIONS_FN uint_fast24_t common_read_24_bit(const uint8_t data_buf[__static 3]) -{ - return 0; -} - -COMMON_FUNCTIONS_FN uint8_t *common_write_16_bit(uint16_t value, uint8_t ptr[__static 2]) -{ - return NULL; -} - -COMMON_FUNCTIONS_FN uint16_t common_read_16_bit(const uint8_t data_buf[__static 2]) -{ - return 0; -} - -COMMON_FUNCTIONS_FN uint8_t *common_write_16_bit_inverse(uint16_t value, uint8_t ptr[__static 2]) -{ - return NULL; -} - -COMMON_FUNCTIONS_FN uint_fast8_t common_count_bits(uint8_t byte) -{ - return 0; -} - -COMMON_FUNCTIONS_FN uint_fast8_t common_count_leading_zeros(uint8_t byte) -{ - return 0; -} - -COMMON_FUNCTIONS_FN bool common_serial_number_greater_8(uint8_t s1, uint8_t s2) -{ - return false; -} - -COMMON_FUNCTIONS_FN bool common_serial_number_greater_16(uint16_t s1, uint16_t s2) -{ - return false; -} - -COMMON_FUNCTIONS_FN bool common_serial_number_greater_32(uint32_t s1, uint32_t s2) -{ - return false; -} - -COMMON_FUNCTIONS_FN bool bit_test(const uint8_t *bitset, uint_fast8_t bit) -{ - return false; -} - -COMMON_FUNCTIONS_FN void bit_set(uint8_t *bitset, uint_fast8_t bit) -{ -} - -COMMON_FUNCTIONS_FN void bit_clear(uint8_t *bitset, uint_fast8_t bit) -{ - -} diff --git a/test/coap-service/unittest/stub/cudp_stub.c b/test/coap-service/unittest/stub/cudp_stub.c deleted file mode 100644 index 08f76aa92c..0000000000 --- a/test/coap-service/unittest/stub/cudp_stub.c +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright (c) 2013-2015 ARM Limited. All rights reserved. - */ -/** - * \file cudp.c - * \brief This file contains UDP layer decode, compress. - */ -#include "config.h" -#include "ns_types.h" -//#include "Core/include/address.h" -#include "Core/include/buffer.h" -//#include "string.h" -//#include "Core/include/routing_table.h" -//#include "6LoWPAN/IPHC_Decode/cipv6.h" -//#include "6LoWPAN/IPHC_Decode/cudp.h" -//#include "Common_Protocols/udp.h" -//#include "6LoWPAN/Bootstraps/network_lib.h" -//#include "common_functions.h" - -buffer_t *parse_udp_header(buffer_t *buf) -{ - return NULL; -} - -buffer_t *cudp_compres_header(buffer_t *buf) -{ - return NULL; -} - -buffer_t *cudp_decode_to_full(buffer_t *buf) -{ - return NULL; -} - - - diff --git a/test/coap-service/unittest/stub/dhcp_service_api_stub.c b/test/coap-service/unittest/stub/dhcp_service_api_stub.c deleted file mode 100644 index 7f1637be8e..0000000000 --- a/test/coap-service/unittest/stub/dhcp_service_api_stub.c +++ /dev/null @@ -1,157 +0,0 @@ -/* - * Copyright (c) 2013-2015 ARM Limited. All rights reserved. - */ - -#include -#include -#include -#include "eventOS_event.h" -#include "eventOS_scheduler.h" -#include "eventOS_event_timer.h" -#include "nsdynmemLIB.h" -#include "ns_list.h" -#include "randLIB.h" -#include "socket_api.h" -#include "net_interface.h" -#include "common_functions.h" -#include "libDHCPv6/libDHCPv6.h" -#include "NWK_INTERFACE/Include/protocol.h" // just for protocol_core_monotonic_time - -#include "dhcp_service_api.h" - -#define TRACE_GROUP "dhcp" - -#define MAX_SERVERS 20 - -/* Fixed-point randomisation limits for randlib_randomise_base() - RFC 3315 - * says RAND is uniformly distributed between -0.1 and +0.1 - */ -#define RAND1_LOW 0x7333 // 1 - 0.1; minimum for "1+RAND" -#define RAND1_HIGH 0x8CCD // 1 + 0.1; maximum for "1+RAND" - -typedef struct { - dhcp_service_receive_req_cb *recv_req_cb; - uint16_t instance_id; - int8_t interface_id; - ns_list_link_t link; -} server_instance_t; -typedef NS_LIST_HEAD(server_instance_t, link) server_instance_list_t; - -typedef struct { - ns_address_t addr; - dhcp_service_receive_resp_cb *recv_resp_cb; - uint16_t instance_id; - int8_t interface_id; - int8_t socket; - uint8_t options; - void *client_obj_ptr; - uint32_t msg_tr_id; - uint32_t message_tr_id; - uint32_t first_transmit_time; - uint16_t timeout; - uint16_t timeout_init; - uint16_t timeout_max; - uint8_t retrans_max; - uint8_t retrans; - uint8_t *msg_ptr; - uint16_t msg_len; - ns_list_link_t link; -} msg_tr_t; -typedef NS_LIST_HEAD(msg_tr_t, link) tr_list_t; - -typedef struct { - ns_address_t src_address; - server_instance_list_t srv_list; - tr_list_t tr_list; - int8_t dhcp_server_socket; - int8_t dhcp_client_socket; - int8_t dhcpv6_socket_service_tasklet; -} dhcp_service_class_t; - -#define DHCPV6_SOCKET_SERVICE_TASKLET_INIT 1 -#define DHCPV6_SOCKET_SERVICE_TIMER 2 - -#define DHCPV6_SOCKET_SERVICE_TIMER_ID 1 - -#define DHCPV6_SOCKET_TIMER_UPDATE_PERIOD_IN_MS 100 - -dhcp_service_class_t *dhcp_service = NULL; - -void dhcp_service_send_message(msg_tr_t *msg_tr_ptr); - -void DHCPv6_socket_service_tasklet(arm_event_s *event) -{ -} - -bool dhcp_service_allocate(void) -{ - return false; -} - -msg_tr_t *dhcp_tr_find(uint32_t msg_tr_id) -{ - return NULL; -} - -msg_tr_t *dhcp_tr_create(void) -{ - return NULL; -} - -void dhcp_tr_delete(msg_tr_t *msg_ptr) -{ -} - -void dhcp_tr_set_retry_timers(msg_tr_t *msg_ptr, uint8_t msg_type) -{ -} - -server_instance_t *dhcp_service_client_find(uint16_t instance_id) -{ - return NULL; -} - -void recv_dhcp_server_msg(void *cb_res) -{ -} - -void recv_dhcp_client_msg(void *cb_res) -{ -} - -uint16_t dhcp_service_init(int8_t interface_id, dhcp_service_receive_req_cb *receive_req_cb) -{ - return 0; -} - -void dhcp_service_delete(uint16_t instance) -{ -} - -int dhcp_service_send_resp(uint32_t msg_tr_id, uint8_t options, uint8_t *msg_ptr, uint16_t msg_len) -{ - return 0; -} - -uint32_t dhcp_service_send_req(uint16_t instance_id, uint8_t options, void *ptr, const uint8_t addr[static 16], uint8_t *msg_ptr, uint16_t msg_len, dhcp_service_receive_resp_cb *receive_resp_cb) -{ - return 0; -} - -void dhcp_service_set_retry_timers(uint32_t msg_tr_id, uint16_t timeout_init, uint16_t timeout_max, uint8_t retrans_max) -{ -} - -void dhcp_service_req_remove(uint32_t msg_tr_id) -{ -} - -void dhcp_service_send_message(msg_tr_t *msg_tr_ptr) -{ -} - -bool dhcp_service_timer_tick(uint16_t ticks) -{ - return false; -} - diff --git a/test/coap-service/unittest/stub/icmpv6_stub.c b/test/coap-service/unittest/stub/icmpv6_stub.c deleted file mode 100644 index 9d567f6c43..0000000000 --- a/test/coap-service/unittest/stub/icmpv6_stub.c +++ /dev/null @@ -1,141 +0,0 @@ -/* - * Copyright (c) 2013-2015 ARM Limited. All rights reserved. - */ -#include "config.h" -#include "ns_types.h" -#include "string.h" -#include "ns_trace.h" -#include "NWK_INTERFACE/Include/protocol.h" -#ifdef HAVE_RPL -#include "6LoWPAN/RPL/rpl.h" -#endif -#include "6LoWPAN/ND/icmp.h" -#include "Common_Protocols/icmpv6.h" -#include "Common_Protocols/icmpv6_prefix.h" -#include "Common_Protocols/icmpv6_radv.h" -#include "Common_Protocols/ipv6.h" -#include "ipv6_stack/protocol_ipv6.h" -#include "ip_fsc.h" -#include "ipv6_stack/ipv6_routing_table.h" -#ifdef NVM_BORDER_ROUTER -#include "br_list_nvm_api.h" -#endif -#include "Service_Libs/whiteboard/whiteboard.h" -#include "NWK_INTERFACE/Include/protocol_stats.h" -#include "common_functions.h" -#include "6LoWPAN/ND/nd_router_object.h" -#include "6LoWPAN/Bootstraps/protocol_6lowpan.h" - -#define TRACE_GROUP_ICMPTv6 "icmp" - -buffer_t *icmpv6_error(buffer_t *buf, protocol_interface_info_entry_t *cur, uint8_t type, uint8_t code, uint32_t aux) -{ - return NULL; -} - -#ifndef NO_IPV6_PMTUD - -buffer_t *icmpv6_packet_too_big_handler(buffer_t *buf) -{ - return NULL; -} -#endif - -buffer_t *icmpv6_echo_request_handler(buffer_t *buf) -{ - return NULL; -} - -buffer_t *icmpv6_ns_handler(buffer_t *buf) -{ - return NULL; -} - -int icmpv6_slaac_prefix_update(struct protocol_interface_info_entry *cur, uint8_t *prefix_ptr, uint8_t prefix_len, uint32_t valid_lifetime, uint32_t preferred_lifetime) -{ - return 0; -} - -if_address_entry_t *icmpv6_slaac_address_add(protocol_interface_info_entry_t *cur, uint8_t *prefix_ptr, uint8_t prefix_len, uint32_t valid_lifetime, uint32_t preferred_lifetime, bool skip_dad, slaac_src_e slaac_src) -{ - return NULL; -} - -buffer_t *icmpv6_up(buffer_t *buf) -{ - return NULL; -} - -buffer_t *icmpv6_down(buffer_t *buf) -{ - return NULL; -} - -buffer_t *icmpv6_build_rs(protocol_interface_info_entry_t *cur, const uint8_t *dest) -{ - return NULL; -} - -uint8_t *icmpv6_write_icmp_lla(protocol_interface_info_entry_t *cur, uint8_t *dptr, uint8_t icmp_opt) -{ - return NULL; -} - -/* - * Write either an ICMPv6 Prefix Information Option for a Router Advertisement - * (RFC4861+6275), or an RPL Prefix Information Option (RFC6550). - * Same payload, different type/len. - */ -uint8_t *icmpv6_write_prefix_option(const prefix_list_t *prefixes, uint8_t *dptr, uint8_t rpl_prefix, protocol_interface_info_entry_t *cur) -{ - return NULL; -} - -buffer_t *icmpv6_build_ns(protocol_interface_info_entry_t *cur, const uint8_t target_addr[16], const uint8_t *prompting_src_addr, bool unicast, bool unspecified_source, const aro_t *aro) -{ - return NULL; -} - -void icmpv6_build_echo_req(protocol_interface_info_entry_t *cur, const uint8_t target_addr[16]) -{ -} - -buffer_t *icmpv6_build_dad(protocol_interface_info_entry_t *cur, buffer_t *buf, uint8_t type, const uint8_t dest_addr[16], const uint8_t eui64[8], const uint8_t reg_addr[16], uint8_t status, uint16_t lifetime) -{ - return NULL; -} - -buffer_t *icmpv6_build_na(buffer_t *buf, bool solicited, bool override, const uint8_t target[static 16], const aro_t *aro) -{ - return NULL; -} - -buffer_t *icmpv6_na_handler(buffer_t *buf) -{ - return NULL; -} - -buffer_t *icmpv6_build_mld(protocol_interface_info_entry_t *cur, buffer_t *buf, uint8_t type, uint16_t max_response_delay, const uint8_t address[static 16]) -{ - return NULL; -} - -bool icmpv6_options_well_formed(const uint8_t *dptr, uint_fast16_t dlen) -{ - return false; -} - -bool icmpv6_options_well_formed_in_buffer(const buffer_t *buf, uint16_t offset) -{ - return false; -} - -const uint8_t *icmpv6_find_option(const uint8_t *dptr, uint_fast16_t dlen, uint8_t option, uint8_t optlen) -{ - return NULL; -} - -const uint8_t *icmpv6_find_option_in_buffer(const buffer_t *buf, uint_fast16_t offset, uint8_t option, uint8_t optlen) -{ - return NULL; -} diff --git a/test/coap-service/unittest/stub/iphc_compress_stub.c b/test/coap-service/unittest/stub/iphc_compress_stub.c deleted file mode 100644 index a9d9eba74a..0000000000 --- a/test/coap-service/unittest/stub/iphc_compress_stub.c +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright (c) 2014-2015 ARM Limited. All rights reserved. - */ -#include "ns_list.h" -#include "common_functions.h" -#include "platform/ns_debug.h" -#include "nsdynmemLIB.h" -#include -#include "NWK_INTERFACE/Include/protocol.h" -#include "Common_Protocols/ipv6.h" -#include "6LoWPAN/IPHC_Decode/cipv6.h" - -typedef struct iphc_compress_state { - protocol_interface_info_entry_t *const interface; - const uint8_t *in; - uint8_t *out; - uint16_t len; - uint16_t out_space; - uint16_t consumed; - uint16_t produced; - const uint8_t *outer_src_iid; - const uint8_t *outer_dst_iid; -} iphc_compress_state_t; - -buffer_t *iphc_compress(protocol_interface_info_entry_t *cur, buffer_t *buf, uint16_t hc_space) -{ - return NULL; -} diff --git a/test/coap-service/unittest/stub/iphc_decompress_stub.c b/test/coap-service/unittest/stub/iphc_decompress_stub.c deleted file mode 100644 index 88f14f13f1..0000000000 --- a/test/coap-service/unittest/stub/iphc_decompress_stub.c +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright (c) 2014-2015 ARM Limited. All rights reserved. - */ -#include "ns_trace.h" -#include "common_functions.h" -#include "nsdynmemLIB.h" -#include -#include "NWK_INTERFACE/Include/protocol.h" -#include "6LoWPAN/IPHC_Decode/cipv6.h" -#include "Common_Protocols/ipv6.h" -#include "6LoWPAN/IPHC_Decode/iphc_decompress.h" - -#define TRACE_GROUP_IPHC_DECOMPRESS "iphc" - -uint8_t iphc_header_scan(buffer_t *buf, uint16_t *uncompressed_size) -{ - return 0; -} - -buffer_t *iphc_decompress(protocol_interface_info_entry_t *cur, buffer_t *buf) -{ - return NULL; -} diff --git a/test/coap-service/unittest/stub/ipv6_routing_table_stub.c b/test/coap-service/unittest/stub/ipv6_routing_table_stub.c deleted file mode 100644 index 1f90b4f455..0000000000 --- a/test/coap-service/unittest/stub/ipv6_routing_table_stub.c +++ /dev/null @@ -1,184 +0,0 @@ -/* - * Copyright (c) 2012-2015 ARM Limited. All rights reserved. - */ -/* - * ipv6_routing_table.c - * - * Implements IPv6 Neighbour Cache (RFC 4861), Destination Cache (RFC 4861), - * and Routing Table (RFC 4191, incorporating the RFC 4861 Prefix List) - */ -#include "config.h" -#include "ns_types.h" -#include "common_functions.h" -#include "ip6string.h" -#include "randLIB.h" -#include "ns_trace.h" -#include "string.h" -#include "net_interface.h" -#include "Core/include/address.h" -#include "ipv6_stack/ipv6_routing_table.h" -#include "Common_Protocols/icmpv6.h" -#include "ipv6_stack/protocol_ipv6.h" -#include "nsdynmemLIB.h" - -#ifndef HAVE_DEBUG -#define TRACE_LEVEL_DEBUG 0 -#endif -#define TRACE_GROUP "rout" - -#define NCACHE_MAX_LONG_TERM 8 -#define NCACHE_MAX_SHORT_TERM 32 - -#define DCACHE_MAX_LONG_TERM 16 -#define DCACHE_MAX_SHORT_TERM 64 - -#define NCACHE_GC_PERIOD 20 -#define DCACHE_GC_PERIOD 20 - -#define NCACHE_GC_AGE 600 -#define DCACHE_GC_AGE 30 - -void ipv6_router_gone(ipv6_neighbour_cache_t *cache, ipv6_neighbour_t *entry) -{ -} - - -void ipv6_neighbour_cache_init(ipv6_neighbour_cache_t *cache, int8_t interface_id) -{ -} - -void ipv6_neighbour_cache_flush(ipv6_neighbour_cache_t *cache) -{ -} - - -ipv6_neighbour_t *ipv6_neighbour_lookup(ipv6_neighbour_cache_t *cache, const uint8_t *address) -{ - return NULL; -} - -void ipv6_neighbour_entry_remove(ipv6_neighbour_cache_t *cache, ipv6_neighbour_t *entry) -{ -} - -ipv6_neighbour_t *ipv6_neighbour_lookup_or_create(ipv6_neighbour_cache_t *cache, const uint8_t *address/*, bool tentative*/) -{ - return NULL; -} - -ipv6_neighbour_t *ipv6_neighbour_lookup_or_create_by_interface_id(int8_t interface_id, const uint8_t *address/*, bool tentative*/) -{ - return NULL; -} - -ipv6_neighbour_t *ipv6_neighbour_used(ipv6_neighbour_cache_t *cache, ipv6_neighbour_t *entry) -{ - return NULL; -} - -void ipv6_neighbour_invalidate_ll_addr(ipv6_neighbour_cache_t *cache, addrtype_t ll_type, const uint8_t *ll_address) -{ -} - -void ipv6_neighbour_set_state(ipv6_neighbour_cache_t *cache, ipv6_neighbour_t *entry, ip_neighbour_cache_state_t state) -{ -} - -/* Called when LL address information is received other than in an NA (NS source, RS source, RA source, Redirect target) */ -void ipv6_neighbour_entry_update_unsolicited(ipv6_neighbour_cache_t *cache, ipv6_neighbour_t *entry, addrtype_t type, const uint8_t *ll_address/*, bool tentative*/) -{ -} - -ipv6_neighbour_t *ipv6_neighbour_update_unsolicited(ipv6_neighbour_cache_t *cache, const uint8_t *ip_address, addrtype_t type, const uint8_t *ll_address/*, bool tentative*/) -{ - return NULL; -} - -void ipv6_neighbour_update_from_na(ipv6_neighbour_cache_t *cache, ipv6_neighbour_t *entry, uint8_t flags, addrtype_t ll_type, const uint8_t *ll_address) -{ -} - -void ipv6_neighbour_reachability_confirmation(const uint8_t ip_address[__static 16], int8_t interface_id) -{ -} - -void ipv6_neighbour_cache_print(const ipv6_neighbour_cache_t *cache, uint8_t dlevel) -{ -} - - - -void ipv6_neighbour_cache_slow_timer(ipv6_neighbour_cache_t *cache, uint8_t seconds) -{ -} - -void ipv6_neighbour_cache_fast_timer(ipv6_neighbour_cache_t *cache, uint16_t ticks) -{ -} - -void ipv6_destination_cache_print(uint8_t dlevel) -{ -} - -ipv6_destination_t *ipv6_destination_lookup_or_create(const uint8_t *address, int8_t interface_id) -{ - return NULL; -} - -void ipv6_destination_redirect(const uint8_t *dest_addr, const uint8_t *sender_addr, const uint8_t *redirect_addr, int8_t interface_id, addrtype_t ll_type, const uint8_t *ll_address) -{ -} - -void ipv6_destination_release(ipv6_destination_t *dest) -{ -} - -void ipv6_destination_cache_timer(uint8_t seconds) -{ -} - -void ipv6_route_table_print(uint8_t dlevel) -{ -} - -ipv6_route_t *ipv6_route_choose_next_hop(const uint8_t *dest, int8_t interface_id, ipv6_route_predicate_fn_t *predicate) -{ - return NULL; -} - -ipv6_route_t *ipv6_route_lookup_with_info(const uint8_t *prefix, uint8_t prefix_len, int8_t interface_id, const uint8_t *next_hop, ipv6_route_src_t source, void *info, int_fast16_t src_id) -{ - return NULL; -} - -ipv6_route_t *ipv6_route_add(const uint8_t *prefix, uint8_t prefix_len, int8_t interface_id, const uint8_t *next_hop, ipv6_route_src_t source, uint32_t lifetime, int_fast8_t pref) -{ - return NULL; -} - -ipv6_route_t *ipv6_route_add_with_info(const uint8_t *prefix, uint8_t prefix_len, int8_t interface_id, const uint8_t *next_hop, ipv6_route_src_t source, void *info, uint8_t source_id, uint32_t lifetime, int_fast8_t pref) -{ - return NULL; -} - -int_fast8_t ipv6_route_delete(const uint8_t *prefix, uint8_t prefix_len, int8_t interface_id, const uint8_t *next_hop, ipv6_route_src_t source) -{ - return -1; -} - -int_fast8_t ipv6_route_delete_with_info(const uint8_t *prefix, uint8_t prefix_len, int8_t interface_id, const uint8_t *next_hop, ipv6_route_src_t source, void *info, int_fast16_t source_id) -{ - return -1; -} - -void ipv6_route_table_remove_interface(int8_t interface_id) -{ -} - -void ipv6_route_table_remove_info(int8_t interface_id, ipv6_route_src_t source, void *info) -{ -} - -void ipv6_route_table_ttl_update(uint16_t seconds) -{ -} diff --git a/test/coap-service/unittest/stub/ipv6_stub.c b/test/coap-service/unittest/stub/ipv6_stub.c deleted file mode 100644 index bc8f03714c..0000000000 --- a/test/coap-service/unittest/stub/ipv6_stub.c +++ /dev/null @@ -1,99 +0,0 @@ -/* - * Copyright (c) 2013-2015 ARM Limited. All rights reserved. - */ - -#include "config.h" -#define _HAVE_IPV6 - -#ifdef _HAVE_IPV6 - -#include "ns_types.h" -#include "string.h" -#include "nsdynmemLIB.h" -#include "Core/include/socket.h" -#include "ns_trace.h" -#include "NWK_INTERFACE/Include/protocol.h" -#include "NWK_INTERFACE/Include/protocol_stats.h" -#include "Common_Protocols/ipv6.h" -#include "Common_Protocols/ipv6_fragmentation.h" -#include "ipv6_stack/protocol_ipv6.h" -#include "ipv6_stack/ipv6_routing_table.h" -#include "Common_Protocols/icmpv6.h" -//#include "6LoWPAN/Bootstraps/network_lib.h" -//#include "6LoWPAN/Bootstraps/protocol_6lowpan.h" -#ifdef HAVE_RPL -#include "6LoWPAN/IPHC_Decode/cipv6.h" -#include "6LoWPAN/RPL/rpl.h" -#endif -#ifdef NVM_BORDER_ROUTER -#include "br_list_nvm_api.h" -#endif -#include "Service_Libs/whiteboard/whiteboard.h" -#include "common_functions.h" - -#define TRACE_GROUP_IPv6 "ipv6" - -const uint8_t MC_SITE[16] = {0xff, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfb}; -const uint8_t MC_LOCAL[16] = {0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfb}; - -bool ipv6_new_layers_for_unicast; -bool ipv6_new_layers_for_lowpan_multicast; -bool ipv6_new_layers_for_ethernet_multicast; - -bool ipv6_use_new_layers(buffer_t *buf, bool multicast) -{ - return false; -} - -buffer_routing_info_t *ipv6_buffer_route(buffer_t *buf) -{ - return NULL; -} - -buffer_t *ipv6_down(buffer_t *buf) -{ - return NULL; -} - -buffer_t *ipv6_up(buffer_t *buf) -{ - return NULL; -} - -uint16_t ipv6_header_size_required(buffer_t *buf) -{ - return 0; -} - -uint16_t ipv6_max_unfragmented_payload(buffer_t *buf, uint16_t mtu_limit) -{ - return 0; -} - -uint16_t ipv6_mtu(buffer_t *buf) -{ - return 0; -} - -buffer_t *ipv6_down_new(buffer_t *buf) -{ - return NULL; -} - -buffer_t *ipv6_forwarding_down(buffer_t *buf) -{ - return NULL; -} - -buffer_t *ipv6_consider_forwarding_received_packet(buffer_t *buf, protocol_interface_info_entry_t *cur, const sockaddr_t *ll_src) -{ - return NULL; -} - -buffer_t *ipv6_forwarding_up(buffer_t *buf) -{ - return NULL; -} - -#endif /* _HAVE_IPV6 */ - diff --git a/test/coap-service/unittest/stub/libDHCPv6_server_stub.c b/test/coap-service/unittest/stub/libDHCPv6_server_stub.c deleted file mode 100644 index 1e6b5effce..0000000000 --- a/test/coap-service/unittest/stub/libDHCPv6_server_stub.c +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright (c) 2014-2015 ARM Limited. All rights reserved. - */ - - -#include -#include -#include -#include "libDHCPv6/libDHCPv6_server.h" -#include "libDHCPv6/libDHCPv6.h" -#include "common_functions.h" -#include "platform/ns_debug.h" - -void libdhcpv6_gua_servers_time_update(uint32_t timeUpdateInSeconds) -{ -} - -dhcpv6_gua_server_entry_s *libdhcpv6_server_data_get_by_prefix_and_interfaceid(int8_t interfaceId, const uint8_t *prefixPtr) -{ - return NULL; -} - -dhcpv6_gua_server_entry_s *libdhcpv6_server_data_get_by_prefix_and_socketinstance(uint16_t socketInstance, uint8_t *prefixPtr) -{ - return NULL; -} - - -dhcpv6_gua_server_entry_s *libdhcpv6_gua_server_allocate(uint8_t *prefix, int8_t interfaceId, uint8_t *serverDUID, uint16_t serverDUIDType, dhcp_address_prefer_timeout_cb *prefered_timeout_cb) -{ - return NULL; -} - -void libdhcpv6_gua_server_free_by_prefix_and_interfaceid(uint8_t *prefix, int8_t interfaceId) -{ -} - -void libdhcpv6_gua_server_free_by_interfaceid(int8_t interfaceId) -{ -} - -dhcpv6_alloacted_address_entry_t *libdhcpv6_address_entry_allocate(uint32_t validLifetime) -{ - return NULL; -} - -dhcpv6_alloacted_address_entry_t *libdhcpv6_address_get_from_allocated_list(dhcpv6_gua_server_entry_s *serverInfo, const uint8_t *address) -{ - return NULL; -} - -dhcpv6_alloacted_address_entry_t *libdhcpv6_address_allocated_list_scan(dhcpv6_gua_server_entry_s *serverInfo, uint8_t *linkId, uint16_t linkType, uint32_t iaID, uint32_t T0, uint32_t T1, bool allocateNew) -{ - return NULL; -} - diff --git a/test/coap-service/unittest/stub/libDHCPv6_stub.c b/test/coap-service/unittest/stub/libDHCPv6_stub.c deleted file mode 100644 index b653563ec6..0000000000 --- a/test/coap-service/unittest/stub/libDHCPv6_stub.c +++ /dev/null @@ -1,212 +0,0 @@ -/* - * Copyright (c) 2014-2015 ARM Limited. All rights reserved. - */ - -#include "config.h" -#include -#include -#include "common_functions.h" -#include "libDHCPv6/libDHCPv6.h" -#include "randLIB.h" -#include "nsdynmemLIB.h" - - - -uint32_t libdhcpv6_txid_get(void) -{ - return 0; -} - -uint32_t libdhcpv6_renew_time_define(dhcpv6_client_server_data_t *addresInfo) -{ - return 0; -} - -dhcpv6_client_server_data_t *libdhcvp6_nontemporalAddress_server_data_allocate(int8_t interfaceId, uint8_t instanceId, uint8_t *duiId, uint16_t duiLinkType, uint8_t *nonTemporalPrefix, uint8_t *serverIPv6Address) -{ - return NULL; -} - -void libdhcvp6_nontemporalAddress_server_data_free(dhcpv6_client_server_data_t *removedEntry) -{ -} - -dhcpv6_client_server_data_t *libdhcpv6_nonTemporal_entry_get_by_instance(uint8_t instanceId) -{ - return NULL; -} -uint8_t libdhcpv6_nonTemporal_entry_get_unique_instance_id(void) -{ - return 0; -} - -dhcpv6_client_server_data_t *libdhcpv6_nonTemporal_entry_get_by_iaid(uint32_t iaId) -{ - return NULL; -} - -dhcpv6_client_server_data_t *libdhcpv6_nonTemporal_entry_get_by_transactionId(uint32_t txId) -{ - return NULL; -} - -dhcpv6_client_server_data_t *libdhcpv6_nonTemporal_entry_get_by_prefix(int8_t interfaceId, uint8_t *prefix) -{ - return NULL; -} - -uint16_t libdhcpv6_duid_option_size(uint16_t linkType) -{ - return 0; -} - -uint16_t libdhcpv6_client_data_option_size(uint16_t linkType) -{ - return 0; -} - -uint16_t libdhcvp6_request_option_size(uint8_t optionCnt) -{ - return 0; -} - -uint16_t libdhcpv6_non_temporal_address_size(bool addressDefined) -{ - return 0; -} - -int libdhcpv6_message_malformed_check(uint8_t *ptr, uint16_t data_len) -{ - return 0; -} - -uint8_t *libdhcpv6_header_write(uint8_t *ptr, uint8_t msgType, uint32_t transActionId) -{ - return NULL; -} - -uint8_t *libdhcpv6_elapsed_time_option_write(uint8_t *ptr, uint16_t elapsedTime) -{ - return NULL; -} - -uint8_t *libdhcpv6_rapid_commit_option_write(uint8_t *ptr) -{ - return NULL; -} - -uint8_t *libdhcvp6_vendor_specific_option_write(uint8_t *ptr, uint8_t *data, uint16_t dataLength) -{ - return NULL; -} - -uint8_t *libdhcvp6_request_option_write(uint8_t *ptr, uint8_t optionCnt, uint16_t *optionPtr) -{ - return NULL; -} - -uint8_t *libdhcpv6_duid_option_write(uint8_t *ptr, uint16_t duidRole, const dhcp_link_options_params_t *duid) -{ - return NULL; -} - -uint8_t *libdhcpv6_prefix_delegation_info_option_write(uint8_t *ptr, uint32_t iaId) -{ - return NULL; -} - -uint8_t *libdhcpv6_identity_association_option_write(uint8_t *ptr, uint32_t iaID, uint32_t TimerT1, uint32_t TimerT2, bool withAddress) -{ - return NULL; -} - -uint8_t *libdhcpv6_ia_address_option_write(uint8_t *ptr, const uint8_t *addressPtr, uint32_t preferredValidLifeTime, uint32_t validLifeTime) -{ - return NULL; -} - -uint8_t *libdhcpv6_status_code_write(uint8_t *ptr, uint16_t statusCode) -{ - return NULL; -} - -uint8_t *libdhcpv6_client_last_transaction_time_option_write(uint8_t *ptr, uint32_t last_transaction_Time) -{ - return NULL; -} - -int libdhcpv6_message_option_discover(uint8_t *ptr, uint16_t data_len, uint16_t discovered_type, dhcp_options_msg_t *option_info) -{ - return -1; -} - -int libdhcpv6_compare_DUID(dhcp_link_options_params_t *targetId, dhcp_link_options_params_t *parsedId) -{ - return -1; -} - -int libdhcpv6_reply_message_option_validate(dhcp_link_options_params_t *clientId, dhcp_link_options_params_t *serverId, dhcp_ia_non_temporal_params_t *dhcp_ia_non_temporal_params, uint8_t *ptr, uint16_t data_length) -{ - return 0; -} - -int libdhcpv6_advertisment_message_option_validate(dhcp_link_options_params_t *clientId, dhcp_link_options_params_t *serverId, dhcp_ia_non_temporal_params_t *dhcp_ia_non_temporal_params, uint8_t *ptr, uint16_t data_length) -{ - return 0; -} - -int libdhcpv6_renew_message_options_validate(uint8_t *ptr, uint16_t data_length, dhcp_link_options_params_t *clientLinkData, dhcp_link_options_params_t *serverLinkData, dhcp_ia_non_temporal_params_t *dhcp_ia_non_temporal_params) -{ - return 0; -} - -int libdhcpv6_solication_message_options_validate(uint8_t *ptr, uint16_t data_length, dhcp_link_options_params_t *clientLink, dhcp_ia_non_temporal_params_t *dhcp_ia_non_temporal_params) -{ - return 0; -} - -bool libdhcpv6_time_elapsed_option_at_packet(uint8_t *ptr, uint16_t length) -{ - return false; -} - -bool libdhcpv6_rapid_commit_option_at_packet(uint8_t *ptr, uint16_t length) -{ - return false; -} - -int libdhcpv6_get_duid_by_selected_type_id_opt(uint8_t *ptr, uint16_t data_length, uint16_t type , dhcp_link_options_params_t *params) -{ - return -1; -} - -int libdhcpv6_get_IA_address(uint8_t *ptr, uint16_t data_length, dhcp_ia_non_temporal_params_t *params) -{ - return -1; -} - -uint16_t libdhcpv6_address_request_message_len(uint16_t clientLinkType, uint16_t serverLinkType, uint8_t requstOptionCnt) -{ - return 0; -} - -uint16_t libdhcpv6_address_reply_message_len(uint16_t clientLinkType, uint16_t serverLinkType, uint16_t vendorDataLen, bool rapidCommon, bool status) -{ - return 0; -} - -uint8_t *libdhcpv6_generic_nontemporal_address_message_write(uint8_t *ptr, dhcpv6_solication_base_packet_s *packet, dhcpv6_ia_non_temporal_address_s *nonTemporalAddress, dhcp_link_options_params_t *serverLink) -{ - return NULL; -} - -uint8_t *libdhcpv6_reply_message_write(uint8_t *ptr, dhcpv6_reply_packet_s *replyPacket, dhcpv6_ia_non_temporal_address_s *nonTemporalAddress, dhcpv6_vendor_data_packet_s *vendorData) -{ - return NULL; -} - -uint16_t libdhcpv6_solication_message_length(uint16_t clientLinkType, bool addressDefined, uint8_t requestOptionCount) -{ - return 0; -} - diff --git a/test/coap-service/unittest/stub/lowpan_context_stub.c b/test/coap-service/unittest/stub/lowpan_context_stub.c deleted file mode 100644 index 7e20e97e5f..0000000000 --- a/test/coap-service/unittest/stub/lowpan_context_stub.c +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright (c) 2015 ARM Limited. All rights reserved. - */ - -#include "config.h" -#include "string.h" -#include "ns_types.h" -#include "ns_trace.h" -#include "nsdynmemLIB.h" -#include "ns_list.h" -#include "6LoWPAN/IPHC_Decode/lowpan_context.h" -#include "common_functions.h" - -#define TRACE_GROUP_LOWPAN_CONTEXT "lCon" - -lowpan_context_t *lowpan_contex_get_by_id(lowpan_context_list_t *list, uint8_t id) -{ - return NULL; -} - -lowpan_context_t *lowpan_context_get_by_address(lowpan_context_list_t *list, const uint8_t *ipv6Address) -{ - return NULL; -} - - -int_fast8_t lowpan_context_update(lowpan_context_list_t *list, uint8_t cid_flags, uint16_t lifetime, const uint8_t *prefix, uint_fast8_t len) -{ - return 0; -} - -void lowpan_context_list_free(lowpan_context_list_t *list) -{ -} - -void lowpan_context_timer(lowpan_context_list_t *list, uint_fast16_t ticks) -{ -} - diff --git a/test/coap-service/unittest/stub/mac_data_poll_stub.c b/test/coap-service/unittest/stub/mac_data_poll_stub.c deleted file mode 100644 index c0d561ae91..0000000000 --- a/test/coap-service/unittest/stub/mac_data_poll_stub.c +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Copyright (c) 2015 ARM Limited. All rights reserved. - */ - -#include -#include "NWK_INTERFACE/Include/protocol.h" -#include "MAC/IEEE802_15_4/mac_data_poll.h" - - - -nwk_rfd_poll_setups_s *mac_data_poll_get_polling_info(struct protocol_interface_info_entry *cur) -{ - return NULL; -} - -void mac_data_poll_polltimer_set(struct protocol_interface_rf_mac_setup *rf_mac_setup, uint32_t slots) -{ - -} - -void mac_data_poll_init_protocol_poll(struct protocol_interface_info_entry *cur, uint8_t set_protocol_poll_active) -{ - -} - -uint32_t mac_data_poll_host_poll_time_max(struct protocol_interface_info_entry *cur) -{ - return 0; -} - -void mac_data_poll_protocol_poll_mode_decrement(struct protocol_interface_info_entry *cur) -{ - -} - -void mac_data_poll_protocol_poll_mode_disable(struct protocol_interface_info_entry *cur, uint8_t re_req) -{ - -} - -void mac_data_poll_enable_check(struct protocol_interface_info_entry *cur) -{ - -} - -int8_t mac_data_poll_host_mode_get(struct protocol_interface_info_entry *cur, net_host_mode_t *mode) -{ - return 0; -} - -void mac_data_poll_poll_done(void *cur, mac_event_t result, uint8_t *addr, addrtype_t type) -{ - -} - -void mac_data_poll_cb_run(struct protocol_interface_info_entry *cur) -{ - -} - -int8_t mac_data_poll_host_mode_set(struct protocol_interface_info_entry *cur, net_host_mode_t mode, uint32_t poll_time) -{ - return 0; -} - -void mac_data_poll_init(struct protocol_interface_info_entry *cur) -{ - -} - -void mac_data_poll_radio_disable_check(struct protocol_interface_info_entry *cur) -{ - -} - -uint32_t mac_data_poll_get_max_sleep_period(struct protocol_interface_info_entry *cur) -{ - return 0; -} - -uint32_t mac_data_poll_host_timeout(protocol_interface_info_entry_t *cur) -{ - return 0; -} diff --git a/test/coap-service/unittest/stub/mac_mlme_stub.c b/test/coap-service/unittest/stub/mac_mlme_stub.c deleted file mode 100644 index f76075c001..0000000000 --- a/test/coap-service/unittest/stub/mac_mlme_stub.c +++ /dev/null @@ -1,221 +0,0 @@ -/* - * Copyright (c) 2015 ARM Limited. All rights reserved. - */ - -#include "config.h" -#include -#include "ns_types.h" -#include "eventOS_event.h" -#include "eventOS_scheduler.h" -#include "eventOS_callback_timer.h" -#include "ns_trace.h" -#include "nsdynmemLIB.h" -#include "NWK_INTERFACE/Include/protocol.h" -#include "NWK_INTERFACE/Include/protocol_timer.h" -#include "MAC/IEEE802_15_4/mac_data_interface.h" -#include "MAC/IEEE802_15_4/mac_data_poll.h" -#include "MAC/IEEE802_15_4/mac_indirect_data.h" -#include "MAC/IEEE802_15_4/mac_security_interface.h" -#include "MAC/IEEE802_15_4/mac_mlme.h" -#include "MAC/IEEE802_15_4/mac_timer.h" -#include "platform/arm_hal_interrupt.h" -#include "6LoWPAN/Thread/thread.h" -#include "6LoWPAN/Thread/thread_bootstrap.h" -#include "common_functions.h" - -int8_t mac_mlme_scan_requet(mac_scan_type_t type, protocol_interface_info_entry_t *interface_ptr) -{ - return -1; -} - -void mac_mlme_energy_scan(void (*passed_fptr)(uint8_t *), protocol_interface_info_entry_t *cur) -{ -} - -int8_t mac_mlme_active_scan_req(struct protocol_interface_info_entry *cur, channel_list_s *scan_list, void (*passed_fptr)(uint8_t *)) -{ - return -1; -} - -void mac_mlme_active_scan(void (*passed_fptr)(uint8_t *), protocol_interface_info_entry_t *cur) -{ -} - -void mac_mlme_free_scan_confirm(nwk_scan_params_s *params) -{ -} - - -void mac_mlme_start_req(mlme_start_t *s, protocol_interface_info_entry_t *cur) -{ -} - -void mac_mlme_cmd_frame_handle(buffer_t *buf) -{ -} - -void mac_mlme_active_scan_response_timer_start(void *interface) -{ -} - -void mac_mlme_timers_disbale(protocol_interface_rf_mac_setup_s *rf_ptr) -{ -} - -void mac_mlme_message_handler(arm_event_s *event) -{ -} - -void mac_mlme_event_cb(uint8_t event) -{ -} - -void mac_mlme_timer_cb(int8_t timer_id, uint16_t slots) -{ -} - -void mac_mlme_free_sacn_temporary_data(protocol_interface_rf_mac_setup_s *rf_mac_setup) -{ -} - -nwk_pan_descriptor_t *mac_mlme_free_pan_descriptions(nwk_pan_descriptor_t *nwk_cur_active) -{ - return NULL; -} - -int mac_mlme_data_base_allocate(protocol_interface_info_entry_t *entry) -{ - return -1; -} - -int8_t mac_mlme_nwk_id_filter_set(const uint8_t *nw_id, nwk_filter_params_s *filter) -{ - return -1; -} - -uint8_t mac_mlme_set_new_sqn(protocol_interface_rf_mac_setup_s *rf_setup) -{ - return 0; -} - -int8_t mac_mlme_set_panid(protocol_interface_info_entry_t *cur, uint16_t pan_id) -{ - return -1; -} - -int8_t mac_mlme_set_mac16(protocol_interface_info_entry_t *cur, uint16_t mac16) -{ - return -1; -} - -int8_t mac_mlme_reset_mac16(protocol_interface_info_entry_t *cur) -{ - return -1; -} - -void mac_mlme_write_mac64(protocol_interface_info_entry_t *cur, uint8_t *addrPtr) -{ -} - -bool mac_mlme_write_mac16(struct protocol_interface_rf_mac_setup *rf_setup, uint8_t *addrPtr) -{ - return false; -} - -bool mac_mlme_write_panid(struct protocol_interface_rf_mac_setup *rf_setup, uint8_t *addrPtr) -{ - return false; -} - -uint16_t mac_mlme_get_panid(protocol_interface_rf_mac_setup_s *rf_setup) -{ - return 0; -} - -uint16_t mac_mlme_get_mac16(protocol_interface_rf_mac_setup_s *rf_setup) -{ - return 0; -} - -void mac_mlme_soft_set_mac16(protocol_interface_rf_mac_setup_s *rf_setup, uint16_t shotAddress) -{ -} - -bool mac_mlme_write_our_addr(struct protocol_interface_info_entry *cur, sockaddr_t *sockaddr) -{ - return false; -} - - -void mac_mlme_write_mac64_by_interface_type(nwk_interface_id nwk_id, uint8_t *addrPtr) -{ -} - -int mac_mlme_beacon_notify(nwk_pan_descriptor_t *description, struct nwk_scan_params *scan_params) -{ -} - -uint8_t *mac_mlme_beacon_payload_allocate(protocol_interface_rf_mac_setup_s *rf_mac_setup, uint8_t len) -{ - return 0; -} - -uint8_t *mac_mlme_beacon_palyaod_ptr_get(protocol_interface_rf_mac_setup_s *rf_mac_setup) -{ - return NULL; -} - -nwk_pan_descriptor_t *mac_mlme_select_best_lqi(nwk_pan_descriptor_t *list) -{ - return NULL; -} - -void mac_mlme_drop_selected_from_the_scanresult(nwk_scan_params_s *scanParams, nwk_pan_descriptor_t *selected) -{ -} - -void mac_mlme_scan_confirmation_handle(mlme_scan_conf_t *r, protocol_interface_info_entry_t *cur_interface) -{ -} - -void mac_mlme_mac_halt(protocol_interface_info_entry_t *cur) -{ -} - -void mac_mle_mac_radio_enable(protocol_interface_info_entry_t *cur) -{ -} - -void mac_mlme_mac_wake_up(protocol_interface_info_entry_t *cur) -{ -} - - -int8_t mac_mlme_rf_disable(protocol_interface_info_entry_t *cur) -{ - return -1; -} - -void mac_mlme_rf_receiver_enable(protocol_interface_info_entry_t *cur) -{ -} - -int8_t mac_mlme_rf_channel_set(protocol_interface_info_entry_t *cur, uint8_t new_channel) -{ - return -1; -} - -int8_t mac_mlme_set_cordinator_address(protocol_interface_rf_mac_setup_s *rf_mac_setup, addrtype_t adr_type, uint8_t *adr_ptr) -{ - return -1; -} - -int8_t mac_mlme_get_cordinator_address(protocol_interface_rf_mac_setup_s *rf_mac_setup, addrtype_t *adr_type, uint8_t *adr_ptr) -{ - return -1; -} - -nwk_scan_params_s *mac_mlme_get_scan_params(protocol_interface_info_entry_t *interface) -{ - return NULL; -} diff --git a/test/coap-service/unittest/stub/mac_pairwise_key_stub.c b/test/coap-service/unittest/stub/mac_pairwise_key_stub.c deleted file mode 100644 index 692320310d..0000000000 --- a/test/coap-service/unittest/stub/mac_pairwise_key_stub.c +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Copyright (c) 2015 ARM Limited. All rights reserved. - */ - - -#include "config.h" -#include -#include "ns_types.h" -#include "ns_trace.h" -#include "nsdynmemLIB.h" -#include "Core/include/address.h" -#include "MAC/IEEE802_15_4/mac_pairwise_key.h" - -#define TRACE_GROUP "mPKe" - -typedef NS_LIST_HEAD(mac_pairwise_key_entry_t, link) mac_pairwise_key_list_t; - -typedef struct mac_pairwise_interface_entry { - int8_t interfaceId; - mac_pairwise_key_list_t keyList; - ns_list_link_t link; /*!< List link entry */ -} mac_pairwise_interface_entry_t; - -mac_pairwise_interface_entry_t *mac_pairwise_key_list_allocate(int8_t interfaceId) -{ - return NULL; -} - -mac_pairwise_key_entry_t *mac_pairwise_key_entry_allocate(const uint8_t *eui64) -{ - return NULL; -} - -mac_pairwise_key_entry_t *mac_pairwise_key_entry_get(mac_pairwise_key_list_t *list, const uint8_t *eui64, bool Allocate) -{ - return NULL; -} - -mac_pairwise_interface_entry_t *mac_pairwise_key_main_class(int8_t interfaceId, bool Allocate) -{ - return NULL; -} - - - -int mac_pairwise_key_add(int8_t interface_id, uint32_t valid_life_time, const uint8_t eui64[static 8], const uint8_t key[static 16]) -{ - return 0; - -} - -int mac_pairwise_key_del(int8_t interface_id, const uint8_t eui64[static 8]) -{ - return 0; -} - - -int mac_pairwise_key_flush_list(int8_t interface_id) -{ - return 0; -} - - -mac_pairwise_key_entry_t *mac_pairwise_key_get_key(int8_t interface_id, const uint8_t *address, uint16_t panId, uint8_t addressType) -{ - return NULL; -} - -bool mac_pairwise_key_framecounter_validation(mac_pairwise_key_entry_t *keyEntry, uint32_t frameCounter) -{ - return false; -} - -void mac_pairwise_key_framecounter_update(mac_pairwise_key_entry_t *keyEntry, uint32_t frameCounter) -{ -} - - diff --git a/test/coap-service/unittest/stub/mac_security_interface_stub.c b/test/coap-service/unittest/stub/mac_security_interface_stub.c deleted file mode 100644 index 0fab0aaa85..0000000000 --- a/test/coap-service/unittest/stub/mac_security_interface_stub.c +++ /dev/null @@ -1,106 +0,0 @@ -/* - * Copyright (c) 2015 ARM Limited. All rights reserved. - */ - -#include "config.h" -#include "ns_types.h" -#include "eventOS_event.h" -#include "string.h" -#include "ns_trace.h" -#include "NWK_INTERFACE/Include/protocol.h" -#include "ccmLIB.h" -#include "MAC/IEEE802_15_4/mac_security_interface.h" -#include "NWK_INTERFACE/Include/protocol_stats.h" -#include "common_functions.h" -#include "6LoWPAN/Thread/thread.h" -#include "6LoWPAN/Thread/thread_management_internal.h" -#ifndef NO_MLE -#include "MLE/mle.h" -#endif - -#define TRACE_GROUP_MAC_SECURITY "mSec" - -int8_t mac_security_interface_link_frame_counter_reset(int8_t interface_id) -{ - return -1; -} - -int8_t mac_security_interface_link_security_level_set(int8_t interface_id , uint8_t sec_level) -{ - return -1; -} -uint8_t mac_security_interface_link_security_level_get_by_ptr(int8_t interface_id) -{ - return 0; -} - -int8_t mac_security_interface_link_frame_conter_read(int8_t interface_id, uint32_t *seq_ptr, uint8_t update_to_next) -{ - return -1; -} - -int8_t mac_securityinterface_trig_pending_key(int8_t interface_id) -{ - return -1; -} - -uint8_t *mac_security_interface_link_security_key_get_by_id(int8_t interface_id, uint8_t key_id) -{ - return NULL; -} - -int8_t mac_security_interface_key_update_trig(int8_t interface_id) -{ - return -1; -} - -int8_t mac_security_interface_mac_key_update(int8_t interface_id, uint8_t *key, uint8_t id, bool primary, uint8_t auth_cnt) -{ - return -1; -} - -uint8_t mac_security_interface_security_aux_header_len(int8_t interface_id) -{ - return 0; -} - -uint8_t mac_security_interface_current_security_key_id_get(int8_t interface_id) -{ - return 0; -} - -int8_t mac_security_interface_security_key_reset(int8_t interface_id) -{ - return -1; -} - -uint8_t mac_security_interface_aux_security_header_size(uint8_t keyIdMode) -{ - return 0; -} - -void mac_security_interface_aux_ccm_nonce_set(uint8_t *noncePtr, uint8_t *mac64, uint32_t securityFrameCounter, uint8_t securityLevel) -{ -} - -uint8_t *mac_security_interface_aux_security_header_write(uint8_t *ptr, const mac_aux_security_header_t *auxHeader) -{ - return NULL; -} - -/* Compare two security levels, as per 802.15.4-2011 7.4.1.1 */ -/* Returns true if sec1 is at least as secure as sec2 */ -bool mac_security_interface_security_level_compare(uint8_t sec1, uint8_t sec2) -{ - return false; -} - -buffer_t *mac_security_interface_aux_header_parse(buffer_t *b, mac_aux_security_header_t *auxSecHeader) -{ - return NULL; -} - -uint8_t mac_security_interface_link_security_level_get(int8_t interface_id) -{ - return 0; -} diff --git a/test/coap-service/unittest/stub/mle_service_stub.c b/test/coap-service/unittest/stub/mle_service_stub.c deleted file mode 100644 index 0e516a4082..0000000000 --- a/test/coap-service/unittest/stub/mle_service_stub.c +++ /dev/null @@ -1,220 +0,0 @@ -/* - * Copyright (c) 2015 ARM Limited. All rights reserved. - */ - -#include "config.h" -#include -#include -#include "ns_trace.h" -#include "eventOS_event.h" -#include "eventOS_scheduler.h" -#include "eventOS_event_timer.h" -#include "nsdynmemLIB.h" -#include "ns_list.h" -#include "randLIB.h" -#include "socket_api.h" -#include "Core/include/socket.h" -#include "net_interface.h" -#include "common_functions.h" -#include "NWK_INTERFACE/Include/protocol.h" // just for protocol_core_monotonic_time -#include "MAC/IEEE802_15_4/mac_security_interface.h" -#include "Service_Libs/mle_service/mle_service_api.h" -#include "Service_Libs/mle_service/mle_service_security.h" -#include "Service_Libs/mle_service/mle_service_buffer.h" -#include "Service_Libs/mle_service/mle_service_interface.h" -#include "MLE/mle.h" -#include "MLE/mle_tlv.h" - -#define TRACE_GROUP "mleS" - -/* Fixed-point randomisation limits for randlib_randomise_base() - RFC 3315 - * says RAND is uniformly distributed between -0.1 and +0.1 - */ -#define MLE_RAND_LOW 0x7333 // 1 - 0.1; minimum for "1+RAND" -#define MLE_RAND_HIGH 0x8CCD // 1 + 0.1; maximum for "1+RAND" - -typedef struct { - int8_t mle_socket; - int8_t mle_socket_service_tasklet; - uint8_t mle_adata[46]; - uint8_t mle_adata_length; -} mle_service_class_t; - - - -/** - * MLE service transaction timeout and retry handling - */ -bool mle_service_timer_tick(uint16_t ticks) -{ - return false; - -} - -int mle_service_interface_register(int8_t interface_id, mle_service_receive_cb *receive_cb, uint8_t *mac64, uint8_t challengeLength) -{ - return 0; -} - -bool mle_service_interface_registeration_validate(int8_t interface_id) -{ - return false; -} - - -int mle_service_interface_receiver_handler_update(int8_t interface_id, mle_service_receive_cb *receive_cb) -{ - return 0; -} - -void mle_service_interface_unregister(int8_t interface_id) -{ -} - -void mle_service_interface_tx_queue_clean(int8_t interface_id) -{ -} - -uint16_t mle_service_msg_allocate(int8_t interface_id, uint16_t data_length, bool challengeAllocate, uint8_t type) -{ - return 0; -} - -uint8_t * mle_service_get_data_pointer(uint16_t msgId) -{ - return NULL; -} - -uint8_t * mle_service_get_payload_start_point(uint16_t msgId) -{ - return NULL; -} - -uint16_t mle_service_get_payload_length(uint16_t msgId) -{ - return 0; -} - -int mle_service_update_length(uint16_t msgId, uint16_t tail_length) -{ - return 0; -} - -int mle_service_update_length_by_ptr(uint16_t msgId, uint8_t *data_end_ptr) -{ - return 0; -} - -int mle_service_msg_update_security_params(uint16_t msgId, uint8_t security_level, uint8_t key_id_mode, uint32_t keysequence) -{ - return 0; -} - -int mle_service_set_packet_callback(uint16_t msgId, mle_service_message_timeout_cb *cb) -{ - return 0; -} - -int mle_service_set_msg_response_true(uint16_t msgId) -{ - return 0; -} - -uint8_t * mle_service_get_msg_destination_address_pointer(uint16_t msgId) -{ - return 0; -} - -int mle_service_set_msg_destination_address(uint16_t msgId, const uint8_t *dstAddress) -{ - return 0; -} - -int mle_service_msg_free(uint16_t msgId) -{ - return 0; -} - -bool mle_service_transaction_buffer_get_for_response(uint8_t *responseData, uint8_t length, uint16_t *msgId) -{ - return false; -} - -int mle_service_message_tail_get(uint16_t msgId, uint16_t tail_length) -{ - return 0; -} - -int mle_service_set_msg_timeout_parameters(uint16_t msgId, mle_message_timeout_params_t *timeout_params) -{ - return 0; -} - -int mle_service_send_message(uint16_t msgId) -{ - return 0; -} - -int mle_service_security_init(int8_t interfaceId, uint8_t security_level, uint32_t security_frame_counter, mle_service_key_request_by_counter_cb * key_counter_req, mle_service_security_notify_cb *notify) -{ - return 0; -} - -bool mle_service_security_set_frame_counter(int8_t interfaceId, uint32_t frame_counter) -{ - return false; -} - -uint8_t * mle_service_security_default_key_get(int8_t interfaceId) -{ - return 0; -} - -uint8_t mle_service_security_default_key_id_get(int8_t interfaceId) -{ - return 0; -} - -uint8_t * mle_service_security_next_key_get(int8_t interfaceId) -{ - return 0; -} - -uint8_t mle_service_security_next_key_id_get(int8_t interfaceId) -{ - return 0; -} - -uint8_t mle_service_security_level_get(int8_t interfaceId) -{ - return 0; -} - -bool mle_service_security_key_trig(int8_t interfaceId, uint8_t keyId) -{ - return false; - -} - -bool mle_service_security_set_security_key(int8_t interfaceId, uint8_t * security_key, uint8_t keyId, bool primary) -{ - return false; -} - - -int mle_service_reject_message_build(int8_t interfaceId, uint8_t *dstIpv6) -{ - - uint16_t buf_id = mle_service_msg_allocate(interfaceId, 32, false, MLE_COMMAND_REJECT); - if (buf_id == 0) { - return -1; - } - tr_debug("MLE Reject MSG Build"); - //SET Destination address - mle_service_set_msg_destination_address(buf_id, dstIpv6); - mle_service_send_message(buf_id); - - return 0; - - -} diff --git a/test/coap-service/unittest/stub/mle_stub.c b/test/coap-service/unittest/stub/mle_stub.c deleted file mode 100644 index 3abf044d58..0000000000 --- a/test/coap-service/unittest/stub/mle_stub.c +++ /dev/null @@ -1,342 +0,0 @@ -/* - * Copyright (c) 2013-2015 ARM Limited. All rights reserved. - */ - -#include "config.h" -#include "MLE/mle.h" - -#ifndef NO_MLE - -#include "ns_types.h" -#include "eventOS_event.h" -#include "eventOS_event_timer.h" -#include "socket_api.h" -#include "Core/include/socket.h" -#include "nsdynmemLIB.h" -#include "ns_trace.h" -#include "string.h" -#include "NWK_INTERFACE/Include/protocol.h" -#include "Common_Protocols/udp.h" -#include "MAC/IEEE802_15_4/mac_security_interface.h" -#include "MAC/IEEE802_15_4/mac_data_poll.h" -#include "MAC/IEEE802_15_4/mac_mlme.h" -#include "shalib.h" -#include "randLIB.h" -#ifdef NVM_BORDER_ROUTER -#include "br_list_nvm_api.h" -#endif -#include "6LoWPAN/Thread/thread_network_data_storage.h" -#include "6LoWPAN/Thread/thread_routing.h" -#include "thread_management_if.h" -#include "6LoWPAN/Thread/thread_management_internal.h" -#include "6LoWPAN/Thread/thread.h" -#include "6LoWPAN/Thread/thread_nd.h" -#include "6LoWPAN/Thread/thread_bootstrap.h" -#include "6LoWPAN/Thread/thread_joiner_application.h" -#include -#include "6LoWPAN/Bootstraps/protocol_6lowpan.h" -#include "6LoWPAN/Bootstraps/protocol_6lowpan_bootstrap.h" -#include "platform/arm_hal_interrupt.h" -#include "platform/topo_trace.h" -#include "common_functions.h" -#include "MLE/mle_tlv.h" -#include "NWK_INTERFACE/Include/protocol_timer.h" -#include "Common_Protocols/ipv6.h" - -#include "mle_stub.h" - -#define MLE_UNICAST_CHALLENGE_TIMEOUT 20 - -#define TRACE_GROUP "mle" - -mle_stub_def mle_stub; - -typedef enum { - ARM_MLE_INIT = 0, - ARM_MLE_TTL_TIMER -} arm_mle_event_id_e; - - -/** - * Generic Type/Length beader, no value - */ -typedef struct { - uint8_t type; - uint8_t length; -} mle_tlv_tl; - -/** - * Source address structure - */ -typedef struct { - uint8_t type; - uint8_t length; - uint8_t src_address[2]; -} mle_tlv_src_address_s; - -/** - * Mode structure - */ -typedef struct { - uint8_t type; - uint8_t length; - uint8_t mode; -} mle_tlv_mode_s; - -/** - * Timeout structure - */ -typedef struct { - uint8_t type; - uint8_t length; - uint8_t timeout; -} mle_tlv_timeout_s; - -/** - * Link layer frame counter structure - */ -typedef struct { - uint8_t type; - uint8_t length; - uint8_t ll_frm_counter[4]; -} mle_tlv_ll_frame_counter_s; - -/** - * MLE frame counter structure - */ -typedef struct { - uint8_t type; - uint8_t length; - uint8_t mle_frm_counter[4]; -} mle_tlv_mle_frame_counter_s; - -typedef union { - uint8_t *u8ptr; - mle_tlv_tl *tl; - mle_tlv_src_address_s *src_address; - mle_tlv_mode_s *mode; - mle_tlv_timeout_s *timeout; - mle_tlv_ll_frame_counter_s *ll_frm_counter; - mle_tlv_mle_frame_counter_s *mle_frm_counter; -} tlv_value_ptr_u; - -void mle_table_ttl(uint16_t ticks, protocol_interface_info_entry_t *cur_interface); - -NS_LARGE uint8_t mle_update_timer = 0; - -typedef struct { - uint8_t queu_update_event; - uint8_t active_params; - uint16_t pan_id; /*!< PAN-ID */ - uint32_t pan_time; - uint8_t channel; /*!< Channel */ - uint32_t chan_time; - uint8_t allow_join; /*!< Permit Join */ - uint32_t allow_time; - uint8_t *beacon_payload; - uint8_t beacon_payload_len; - uint32_t beacon_payload_delay; -} mle_nwk_param_t; - -/* removes child id when becoming router*/ -int thread_clear_child_id_by_address(protocol_interface_info_entry_t *cur, mle_neigh_table_entry_t *entry_temp); - -void mle_entry_rm(mle_neigh_table_entry_t *entry); - -#ifdef NVM_BORDER_ROUTER -uint16_t (*mle_nvm_storage_cb)(br_nvm_update_process_t) = 0; - -int8_t mle_nvm_callback_set(uint16_t (*passed_fptr)(br_nvm_update_process_t), uint8_t *nvm_static_buffer) -{ -} - - -int8_t mle_entry_store_from_nvm(const uint8_t *nvm_data) -{ - return -1; -} - - -void mle_nvm_update(mle_neigh_table_entry_t *entry, br_nvm_update_process_t event) -{ -} - -#endif - -void mle_set_max_allow_join_time(uint16_t new_max_allow_join_time) -{ -} - -int8_t arm_mle_prepare_update(int8_t nwk_id, uint8_t type, uint32_t time, uint16_t value) -{ - return 0; -} - -int8_t arm_mle_update_beacon_payload(int8_t nwk_id, uint8_t *optional_fields_data, uint8_t optional_fields_len, uint32_t delay) -{ - return 0; -} - -uint8_t mle_update_process(uint8_t event) -{ - return 0; -} - -void mle_init(void) -{ -} - -void mle_event_handler(arm_event_s *event) -{ -} - -void protocol_core_mle_init(void) -{ -} - -void mle_entry_frame_counter_update(mle_neigh_table_entry_t *entry_temp, uint32_t counter, uint8_t keyId) -{ - -} -uint8_t mle_mode_get_by_interface_ptr(protocol_interface_info_entry_t *cur) -{ - return 0; -} - -uint8_t mle_challenge(uint8_t *addr, protocol_interface_info_entry_t *cur) -{ - return 1; -} - -int mle_child_update_generation(uint8_t *parentAddress, struct protocol_interface_info_entry *cur, uint8_t mode) -{ - return 0; -} - -int8_t mle_host_link_configuration(bool rx_on_idle, protocol_interface_info_entry_t *cur) -{ - return -1; -} - -uint8_t mle_router_synch(protocol_interface_info_entry_t *cur, const uint8_t *destAddress) -{ - return 1; -} - -uint8_t mle_neigh_advertise(protocol_interface_info_entry_t *cur) -{ - return 1; -} - -uint8_t mle_reed_advertise (protocol_interface_info_entry_t *cur) -{ - return 0; -} - -int mle_attach_parent_request_build(protocol_interface_info_entry_t *cur, uint8_t scanMask) -{ - return -1; -} - - -uint8_t *mle_linkquality_write(uint8_t *buffer) -{ - return NULL; -} - -int mle_attach_parent_response_build(protocol_interface_info_entry_t *cur, sockaddr_t *dstAddress, uint8_t *challenge, uint8_t chalLen, uint8_t linkMargin) -{ - return -1; -} -void mle_network_data_push_to_sleep_child(protocol_interface_info_entry_t *cur, bool stableDataUpdate) -{ -} - -void mle_multicast_push_to_sleep_child(protocol_interface_info_entry_t *cur, buffer_t *buf) -{ - -} - -int mle_network_data_propagation(protocol_interface_info_entry_t *cur, uint8_t *childUnicastAddress, bool fullList) -{ -} - -void mle_entry_timeout_update(mle_neigh_table_entry_t *entry_temp, uint32_t timeout_tlv) -{ -} - -void mle_neigh_entry_update_by_mle_tlv_list(mle_neigh_table_entry_t *entry_temp, uint8_t *tlv_ptr, uint16_t tlv_length, uint8_t lqi, uint8_t keyId) -{ -} - -uint8_t mle_indirect_check(const uint8_t *ptr, addrtype_t type) -{ - return 0; -} - -static mle_neigh_table_entry_t *mle_entry_scan_long(const uint8_t *address) -{ - return NULL; -} - -static mle_neigh_table_entry_t *mle_entry_scan_short(uint16_t address) -{ - return NULL; -} - -void mle_key_synch_request(mle_neigh_table_entry_t *info) -{ -} - -mle_neigh_table_entry_t *mle_table_rpl_advert(void) -{ - return NULL; -} - -void mle_entry_rm(mle_neigh_table_entry_t *entry) -{ -} - -void mle_table_ttl(uint16_t ticks, protocol_interface_info_entry_t *cur_interface) -{ -} - -mle_neigh_table_entry_t *mle_refresh_entry_timeout(int8_t interfaceId, const uint8_t *addressPtr, addrtype_t addressType, bool dataPollConfirmation) -{ - return NULL; -} - -mle_neigh_table_entry_t *mle_entry_get_by_link_address(const uint8_t *address, addrtype_t type) -{ - mle_stub.expectedUint8ptr = address; - mle_stub.expectedUint8 = type; - - return mle_stub.mle_neigh_table_entry_ptr; -} - -mle_neigh_table_list_t *mle_list_get(void) -{ - return NULL; -} - -uint8_t mle_thread_end_device_synch_to_router(protocol_interface_info_entry_t *cur, uint8_t *router_ll64) -{ - return 0; -} - -uint8_t mle_thread_end_device_synch(protocol_interface_info_entry_t *cur) -{ - return 0; -} - -uint8_t *mle_general_write_source_address(uint8_t *ptr, protocol_interface_info_entry_t *cur) -{ - return 0; -} - -void mle_tables_frame_counter_state_reset_for_nw_key(uint8_t keyId) -{ - -} - -#endif /* NO_MLE */ diff --git a/test/coap-service/unittest/stub/mle_stub.h b/test/coap-service/unittest/stub/mle_stub.h deleted file mode 100644 index d096aa9842..0000000000 --- a/test/coap-service/unittest/stub/mle_stub.h +++ /dev/null @@ -1,21 +0,0 @@ -#ifndef __MLE_STUB_H__ -#define __MLE_STUB_H__ - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct { - uint8_t expectedUint8; - uint16_t expectedUint16; - uint8_t *expectedUint8ptr; - mle_neigh_table_entry_t *mle_neigh_table_entry_ptr; -} mle_stub_def; - -extern mle_stub_def mle_stub; - -#ifdef __cplusplus -} -#endif - -#endif // __MLE_STUB_H__ diff --git a/test/coap-service/unittest/stub/mle_tlv_stub.c b/test/coap-service/unittest/stub/mle_tlv_stub.c deleted file mode 100644 index 23bb990ad9..0000000000 --- a/test/coap-service/unittest/stub/mle_tlv_stub.c +++ /dev/null @@ -1,130 +0,0 @@ -/* - * Copyright (c) 2014-2015 ARM Limited. All rights reserved. - */ -#include "config.h" -#include "platform/ns_debug.h" -#include "string.h" -#include "MLE/mle.h" -#include "MLE/mle_tlv.h" -#include "common_functions.h" - -int mle_message_malformed_check(uint8_t *ptr, uint16_t data_len) -{ - return 0; -} - -int mle_tlv_option_discover(uint8_t *ptr, uint16_t data_len, mle_tlv_type_t discovered_type, mle_tlv_info_t *option_info) -{ - return -1; -} - -int mle_validate_advertisment_message(uint8_t *ptr, uint16_t data_len) -{ - return 0; -} - -int mle_validate_router_link_accept_request_message(uint8_t *ptr, uint16_t data_len) -{ - return 0; -} - -int mle_validate_router_link_accept_message(uint8_t *ptr, uint16_t data_len) -{ - return 0; -} - -bool mle_tlv_type_requested(uint8_t reqType, uint8_t *ptr, uint16_t data_len) -{ - return false; -} - -bool mle_tlv_read_8_bit_tlv(mle_tlv_type_t reqType, uint8_t *ptr, uint16_t data_len, uint8_t *buffer) -{ - return false; -} - -bool mle_tlv_read_16_bit_tlv(mle_tlv_type_t reqType, uint8_t *ptr, uint16_t data_len, uint16_t *buffer) -{ - return false; -} - -bool mle_tlv_read_32_bit_tlv(mle_tlv_type_t reqType, uint8_t *ptr, uint16_t data_len, uint32_t *buffer) -{ - return false; -} - -bool mle_tlv_read_tlv(mle_tlv_type_t reqType, uint8_t *ptr, uint16_t data_len, mle_tlv_info_t *tlv_info) -{ - return false; -} - -int mle_validate_child_keep_alive_message(uint8_t *ptr, uint16_t data_len) -{ - return 0; -} - -int mle_validate_child_update_message(uint8_t *ptr, uint16_t data_len) -{ - return 0; -} - -uint8_t *mle_tlv_write_response(uint8_t *ptr, uint8_t *response_ptr, uint8_t responseLen) -{ - return NULL; -} - -uint8_t *mle_tlv_write_source_address(uint8_t *ptr, uint16_t shortAddress) -{ - return NULL; -} - -uint8_t *mle_tlv_write_short_address(uint8_t *ptr, uint16_t shortAddress) -{ - return NULL; -} - -uint8_t *mle_tlv_write_mode(uint8_t *ptr, uint8_t mode) -{ - return NULL; -} - -uint8_t *mle_tlv_write_timeout(uint8_t *ptr, uint32_t timeOut) -{ - return NULL; -} - -uint8_t *mle_tlv_write_holdtime(uint8_t *ptr, uint16_t holdTime) -{ - return NULL; -} - -uint8_t *mle_tlv_write_challenge(uint8_t *ptr, uint8_t *challengePtr, uint8_t challenLen) -{ - return NULL; -} - -uint8_t *mle_tlv_write_link_layer_framecount(uint8_t *ptr, uint32_t frameCount) -{ - return NULL; -} - -uint8_t *mle_tlv_write_scan_mask(uint8_t *ptr, uint8_t scanMask) -{ - return NULL; -} - -uint8_t *mle_tlv_req_tlv(uint8_t *ptr, uint8_t *mle_req_tlv_list, uint8_t req_list_len) -{ - return NULL; -} -uint8_t *mle_tlv_rssi_tlv(uint8_t *ptr, uint8_t linkMargin) -{ - return NULL; -} - -uint8_t *mle_tlv_write_version(uint8_t *ptr, uint16_t version) -{ - return NULL; -} - - diff --git a/test/coap-service/unittest/stub/multicast_stub.c b/test/coap-service/unittest/stub/multicast_stub.c deleted file mode 100644 index 8080088303..0000000000 --- a/test/coap-service/unittest/stub/multicast_stub.c +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright (c) 2013-2015 ARM Limited. All rights reserved. - */ -#include "config.h" -#include "ns_types.h" -#include "eventOS_event.h" -#include "nsdynmemLIB.h" -#include "ns_trace.h" -#include "Core/include/socket.h" -#include "string.h" -#include "NWK_INTERFACE/Include/protocol.h" -#include "Common_Protocols/ipv6.h" -#include "MulticastTrigle/multicast.h" -#include "MAC/IEEE802_15_4/mac_mlme.h" -#include "6LoWPAN/Bootstraps/network_lib.h" -#include "common_functions.h" -#include "NWK_INTERFACE/Include/protocol_timer.h" - -void multicast_push(buffer_t *buf) -{ - -} - -void multicast_init(void) -{ - -} - -void multicast_handle_time_event(uint16_t ticksUpdate) -{ - -} - -int multicast_sleepy_unicast_address_register(uint8_t * multicast_address, multicast_forward_to_sleepy *handler) -{ - return 0; -} - -void multicast_set_parameters(uint8_t i_min, uint8_t i_max, uint8_t k, uint8_t timer_expirations, uint8_t window_expiration) -{ - -} - -uint8_t multicast_add_address(const uint8_t *address_ptr, uint8_t use_trickle) -{ - return 0; -} - -uint8_t multicast_free_address(uint8_t *address_ptr) -{ - return 0; -} diff --git a/test/coap-service/unittest/stub/nd_proxy.c b/test/coap-service/unittest/stub/nd_proxy.c deleted file mode 100644 index b4986c0224..0000000000 --- a/test/coap-service/unittest/stub/nd_proxy.c +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright (c) 2013-2015 ARM Limited. All rights reserved. - */ -#include "config.h" -#include "ns_types.h" - -int nd_proxy_downstream_interface_unregister(int8_t interface_id) -{ - return 0; -} - -bool nd_proxy_enabled_for_upstream(int8_t interface_id) -{ - return false; -} - -bool nd_proxy_upstream_route_onlink(int8_t downstream_id, uint8_t *address) -{ - return false; -} diff --git a/test/coap-service/unittest/stub/nd_proxy_stub.c b/test/coap-service/unittest/stub/nd_proxy_stub.c deleted file mode 100644 index e87d3e2fc9..0000000000 --- a/test/coap-service/unittest/stub/nd_proxy_stub.c +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright (c) 2015 ARM. All rights reserved. - */ - -#include "config.h" -#ifdef HAVE_ND_PROXY -#include "ns_types.h" -#include "common_functions.h" -#include "ns_trace.h" -#include "string.h" -#include "nsdynmemLIB.h" -#include "ns_list.h" -#include "Service_Libs/nd_proxy/nd_proxy.h" - - -int nd_proxy_downstream_interface_register(int8_t interface_id, nd_proxy_req_cb *nd_proxy_req, bridge_state_update_cb * bridge_state_update) -{ - return 0; -} - -int nd_proxy_downstream_interface_unregister(int8_t interface_id) -{ - return 0; -} - -int nd_proxy_upstream_interface_register(int8_t interface_id, nd_proxy_req_cb *route_validation_req) -{ - return 0; -} - -int nd_proxy_upstream_interface_unregister(int8_t interface_id) -{ - return 0; -} - -bool nd_proxy_enabled_for_downstream(int8_t interface_id) -{ - return false; -} - -bool nd_proxy_enabled_for_upstream(int8_t interface_id) -{ - return false; -} - -bool nd_proxy_target_address_validation(int8_t upstream_id, uint8_t *address, int8_t *downstream_id_ptr) -{ - return false; -} - -bool nd_proxy_upstream_route_onlink(int8_t downstream_id, uint8_t *address) -{ - return false; -} -#endif /* HAVE_ND_PROXY */ - diff --git a/test/coap-service/unittest/stub/nd_router_object_stub.c b/test/coap-service/unittest/stub/nd_router_object_stub.c deleted file mode 100644 index 5ddeb9acdd..0000000000 --- a/test/coap-service/unittest/stub/nd_router_object_stub.c +++ /dev/null @@ -1,242 +0,0 @@ -/* - * Copyright (c) 2013-2015 ARM Limited. All rights reserved. - */ -#include "config.h" -#include "ns_types.h" -#include "string.h" -#include "nsdynmemLIB.h" -#include "ns_trace.h" -#include "NWK_INTERFACE/Include/protocol.h" -#include "MAC/IEEE802_15_4/mac_data_poll.h" -#include "MAC/IEEE802_15_4/mac_mlme.h" -#include "Common_Protocols/icmpv6.h" -#include "Common_Protocols/icmpv6_prefix.h" -#include "Common_Protocols/icmpv6_radv.h" -#include "randLIB.h" -#ifdef HAVE_RPL -#include "6LoWPAN/RPL/rpl.h" -#include "6LoWPAN/RPL/rpl_obj.h" -#else -/* This sort of thing should be handled in rpl.h itself */ -#define rpl_object_poisons() 0 -#endif -#include "6LoWPAN/IPHC_Decode/cipv6.h" -#include "6LoWPAN/ND/nd_router_object.h" -#include "6LoWPAN/Bootstraps/network_lib.h" -#include "6LoWPAN/Bootstraps/protocol_6lowpan.h" -#include "6LoWPAN/Bootstraps/protocol_6lowpan_bootstrap.h" -#ifdef WHITEBOARD -#ifdef NVM_BORDER_ROUTER -#include "br_list_nvm_api.h" -#endif -#include "Service_Libs/whiteboard/whiteboard.h" -#endif -#include "common_functions.h" - -#define TRACE_GROUP_LOWPAN_ND "loND" - -void icmp_nd_router_object_release(nd_router_t *router_object); -uint8_t icmp_nd_router_prefix_ttl_update(nd_router_t *nd_router_object, protocol_interface_info_entry_t *cur_interface); - -uint8_t nd_rs_build(nd_router_t *cur, protocol_interface_info_entry_t *cur_interface); -bool icmp_nd_compare_to_def_next_hop(nd_router_next_hop *hop, sockaddr_t *adr); -void icmp_nd_router_context_ttl_update(nd_router_t *nd_router_object); -extern void nd_border_router_setup_refresh(nwk_interface_id id, bool fresh_abro); - -uint8_t nd_base_tick = 1; - -int8_t nd_set_br(nd_router_t *br) -{ - return -1; -} - -bool nd_object_active(void) -{ - return false; -} - -void icmp_nd_routers_init(void) -{ -} - - -void icmp_nd_set_nd_def_router_address(uint8_t *ptr, nd_router_t *cur) -{ - -} - -void nd_ns_trig(nd_router_t *router_object, protocol_interface_info_entry_t *cur) -{ - -} - -void nd_router_base_init(nd_router_t *new_entry) -{ - -} - -nd_router_t *icmp_nd_router_object_get(const uint8_t *border_router, nwk_interface_id nwk_id) -{ - return NULL; -} - -void icmp_nd_router_object_reset(nd_router_t *router_object) -{ - -} - -int8_t icmp_nd_router_prefix_proxy_update(uint8_t *dptr, nd_router_setup_t *nd_router_object) -{ - return -1; -} - -uint8_t icmp_nd_router_prefix_valid(nd_router_t *nd_router_object) -{ - return 0; -} - -uint8_t icmp_nd_router_prefix_ttl_update(nd_router_t *nd_router_object, protocol_interface_info_entry_t *cur_interface) -{ - return 0; -} - -int8_t icmp_nd_router_prefix_update(uint8_t *dptr, nd_router_t *nd_router_object, protocol_interface_info_entry_t *cur_interface) -{ - return 0; -} - -void icmp_nd_router_context_ttl_update(nd_router_t *nd_router_object) -{ - -} - -int8_t icmp_nd_router_context_update(const uint8_t *dptr, nd_router_t *router_object) -{ - return -1; -} - -void icmp_nd_router_object_release(nd_router_t *router_object) -{ -} - - -void icmp_nd_border_router_release(nd_router_t *router_object) -{ -} - - - -void gp_address_list_free(gp_ipv6_address_list_t *list) -{ -} - -void icmp_nd_prefixs_parse(buffer_t *buf, nd_router_t *nd_router_object, protocol_interface_info_entry_t *cur_interface) -{ - -} - - -void icmp_nd_set_next_hop(nd_router_next_hop *hop, sockaddr_t *adr) -{ - -} - -bool icmp_nd_compare_to_def_next_hop(nd_router_next_hop *hop, sockaddr_t *adr) -{ - return false; -} - -uint8_t nd_rs_build(nd_router_t *cur, protocol_interface_info_entry_t *cur_interface) -{ - return 0; -} - -uint8_t nd_ns_build(nd_router_t *cur, protocol_interface_info_entry_t *cur_interface, uint8_t *address_ptr) -{ - return 0; -} - -buffer_t *nd_dar_parse(buffer_t *buf, protocol_interface_info_entry_t *cur_interface) -{ - return NULL; -} - -bool nd_ns_aro_handler(protocol_interface_info_entry_t *cur_interface, const uint8_t *aro_opt, const uint8_t *slla_opt, const uint8_t *src_addr, aro_t *aro_out) -{ - return false; -} - -buffer_t *nd_dac_handler(buffer_t *buf, protocol_interface_info_entry_t *cur) -{ - return NULL; -} - -static void nd_ns_forward_timer_reset(uint8_t *root_adr) -{ - -} - -bool nd_ra_process_abro(protocol_interface_info_entry_t *cur, buffer_t *buf, const uint8_t *dptr, uint8_t ra_flags, uint16_t router_lifetime) -{ - return false; -} - -void nd_ra_process_lowpan_context_option(protocol_interface_info_entry_t *cur, const uint8_t *opt) -{ -} - -void nd_ra_build_by_abro(const uint8_t *abro, const uint8_t *dest, protocol_interface_info_entry_t *cur_interface) -{ -} - -void nd_trigger_ras_from_rs(const uint8_t *unicast_adr, protocol_interface_info_entry_t *cur_interface) -{ -} - -void nd_na_aro_handler(protocol_interface_info_entry_t *cur_interface, const uint8_t *dptr, const uint8_t *dst_addr) -{ -} - -void gp_address_add_to_end(gp_ipv6_address_list_t *list, const uint8_t address[__static 16]) -{ -} - -void nd_object_timer(struct protocol_interface_info_entry *cur_interface, uint16_t ticks_update) -{ -} - -ipv6_ra_timing_t *nd_ra_timing(const uint8_t abro[16]) -{ - return NULL; -} - -uint32_t nd_object_time_to_next_nd_reg(void) -{ - return 0; -} - - -void nd_object_timer_balance(uint16_t sleep_time, protocol_interface_info_entry_t *cur_interface) -{ -} - -uint8_t nd_prefix_dst_check(uint8_t *ptr) -{ - return 0; -} - -int8_t nd_parent_loose_indcate(uint8_t *neighbor_address, protocol_interface_info_entry_t *cur_interface) -{ - return -1; -} - -nd_router_t *nd_get_object_by_nwk_id(nwk_interface_id nwk_id) -{ - return NULL; -} - -nd_router_t *nd_get_pana_address(void) -{ - return NULL; -} - diff --git a/test/coap-service/unittest/stub/neighbor_cache_stub.c b/test/coap-service/unittest/stub/neighbor_cache_stub.c deleted file mode 100644 index 5b32a124f3..0000000000 --- a/test/coap-service/unittest/stub/neighbor_cache_stub.c +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright (c) 2014-2015 ARM Limited. All rights reserved. - */ -#include "config.h" -#include "ns_types.h" -#include "common_functions.h" -#include "platform/ns_debug.h" -#include "string.h" -#include "nsdynmemLIB.h" -#include "Service_Libs/Neighbor_cache/neighbor_table_definition.h" - -void neighbor_cache_init(neigh_cache_s *neigh_cache) -{ -} - -int neighbor_cache_flush(neigh_cache_s *neigh_cache) -{ - return 0; -} - - -neigh_cache_entry_s *neighbor_cache_entry_get(neigh_cache_s *neigh_cache, neighbor_address_type_e address_type, const void *address_ptr) -{ - return NULL; -} - -neigh_cache_entry_s *neighbor_cache_entry_create(neigh_cache_s *neigh_cache, const uint8_t address_ptr[8]) -{ - return NULL; -} - -int8_t neighbor_cache_entry_delete(neigh_cache_s *neigh_cache, neighbor_address_type_e address_type, const void *address_ptr) -{ - return 0; -} - -neigh_cache_entry_s *neighbor_cache_entry_delete_by_entry_pointer(neigh_cache_s *neigh_cache, neigh_cache_entry_s *entry) -{ - return NULL; -} - -int neighbor_cache_ttl_update(neigh_cache_s *neigh_cache, uint16_t ticks) -{ - return 0; -} - -neigh_cache_entry_s *neighbor_cache_entry_get_timed_out(neigh_cache_s *neigh_cache) -{ - return NULL; -} diff --git a/test/coap-service/unittest/stub/net_stub.c b/test/coap-service/unittest/stub/net_stub.c deleted file mode 100644 index 7f6ba92a79..0000000000 --- a/test/coap-service/unittest/stub/net_stub.c +++ /dev/null @@ -1,279 +0,0 @@ -/* - * Copyright (c) 2014-2015 ARM Limited. All rights reserved. - */ -/** - * \file net.c - * \brief Network API for library model - * - * The network API functions for library model - */ -#include "config.h" -#include "ns_types.h" -#include "eventOS_scheduler.h" -#include "string.h" -#include "ns_trace.h" -#include "socket_api.h" -#include "nsdynmemLIB.h" -#include "NWK_INTERFACE/Include/protocol.h" -#include "NWK_INTERFACE/Include/protocol_interface_driver.h" -#ifdef HAVE_RPL -#include "6LoWPAN/RPL/rpl.h" -#endif -#include "ccmLIB.h" -#include "MAC/IEEE802_15_4/mac_data_interface.h" -#include "MAC/IEEE802_15_4/mac_security_interface.h" -#include "MAC/IEEE802_15_4/mac_data_poll.h" -#include "MAC/IEEE802_15_4/mac_mlme.h" -#include "6LoWPAN/Bootstraps/network_lib.h" -#include "6LoWPAN/Bootstraps/protocol_6lowpan.h" -#include "6LoWPAN/Bootstraps/protocol_6lowpan_bootstrap.h" -#include "6LoWPAN/ND/nd_router_object.h" -#ifndef NO_MLE -#include "MLE/mle.h" -#endif - -#ifdef ECC -#include "libX509_V3.h" -#include "ecc.h" -#endif -#include "platform/arm_hal_interrupt.h" -#include "common_functions.h" -#include "MulticastTrigle/multicast.h" -#ifdef NVM_BORDER_ROUTER -#include "br_list_nvm_api.h" -#endif -#include "Service_Libs/whiteboard/whiteboard.h" -#include "net_pana_parameters_api.h" -#ifdef PANA -#include "Security/PANA/pana.h" -#include "Security/PANA/pana_internal_api.h" -#endif -#include "nwk_stats_api.h" -#include "NWK_INTERFACE/Include/protocol_stats.h" -#include "Security/Common/sec_lib_definitions.h" -#include "ipv6_stack/protocol_ipv6.h" -#include "ipv6_stack/ipv6_routing_table.h" -#include "net_thread_test.h" -#include "6LoWPAN/Thread/thread.h" -#include "6LoWPAN/Thread/thread_routing.h" -#include "BorderRouter/border_router.h" - -int8_t arm_network_processor_up(protocol_interface_info_entry_t *cur) -{ - return 0; -} - -int8_t arm_net_energy_scan(int8_t interface_id, channel_list_s *scan_list, void (*passed_fptr)(uint8_t *), uint8_t energy_tresshold) -{ - return 0; -} - -int8_t arm_net_nwk_scan(int8_t interface_id, channel_list_s *scan_list, void (*passed_fptr)(uint8_t *), uint8_t scan_level) -{ - return 0; -} - -nwk_pan_descriptor_t *arm_net_get_scanned_nwk_list(int8_t interface_id) -{ - return NULL; -} - -uint16_t arm_net_get_nwk_pan_id_filter(int8_t nwk_interface_id) -{ - return 0; -} - -int8_t arm_nwk_param_read(int8_t interface_id, link_layer_setups_s *network_params) -{ - return 0; -} - -int8_t arm_nwk_mac_address_read(int8_t interface_id, link_layer_address_s *mac_params) -{ - return 0; -} - -int8_t arm_nwk_nd_address_read(int8_t interface_id, network_layer_address_s *nd_params) -{ - return 0; -} - -int16_t arm_net_get_current_channel(int8_t nwk_interface_id) -{ - return 0; -} - -void arm_net_host_enter_sleep_state_set(int8_t nwk_interface_id, uint8_t state) -{ -} - - -void net_get_version_information(uint8_t *ptr) -{ -} - -int8_t arm_nwk_6lowpan_gp_address_mode(int8_t nwk_interface_id, net_6lowpan_gp_address_mode_e mode, uint16_t short_address_base, uint8_t define_new_short_address_at_DAD) -{ - return 0; -} - -int8_t arm_net_address_get(int8_t nwk_interface_id, net_address_t addr_id, uint8_t *address) -{ - return 0; -} - -int8_t arm_net_interface_address_list_size(int8_t nwk_interface_id, uint16_t *address_count) -{ - return 0; -} - -int8_t arm_net_address_list_get(int8_t nwk_interface_id, uint8_t address_buf_size, uint8_t *address_buffer, int *writed_address_count) -{ - return 0; -} - -int8_t arm_nwk_interface_init(net_interface_type_e type, uint8_t phy_driver_id, char *interface_name_ptr) -{ - return 0; -} - -int8_t arm_nwk_interface_network_driver_set(int8_t nwk_interface_id, int8_t tun_driver_id, channel_list_s *nwk_channel_list, network_driver_setup_s *link_setup) -{ - return 0; -} - -int8_t arm_nwk_interface_up(int8_t nwk_interface_id) -{ - return 0; -} - -int8_t arm_nwk_interface_down(int8_t nwk_interface_id) -{ - return 0; -} - -int8_t arm_pana_client_key_pull(int8_t nwk_interface_id) -{ - return 0; -} - -int8_t arm_nwk_link_layer_security_mode(int8_t nwk_interface_id, net_6lowpan_link_layer_sec_mode_e mode, uint8_t sec_level, net_link_layer_psk_security_info_s *psk_key_info) -{ - return 0; -} - -int8_t arm_network_certificate_chain_set(arm_certificate_chain_entry_s *chain_info) -{ - return 0; -} - -int8_t arm_network_key_get(int8_t interface_id, ns_keys_t *key) -{ - return 0; -} - -int8_t arm_pana_server_library_init(int8_t nwk_interface_id, net_tls_cipher_e cipher_mode, uint8_t *key_material, uint32_t time_period_before_activate_key) -{ - return 0; -} - -int8_t arm_pana_activate_new_key(int8_t nwk_interface_id) -{ - return 0; -} - -int8_t arm_pana_server_key_update(int8_t nwk_interface_id, uint8_t *network_key_material) -{ - return 0; -} - -int8_t net_pana_parameter_set(const pana_lib_parameters_s *parameter_ptr) -{ - return 0; -} - -int8_t net_pana_parameter_read(pana_lib_parameters_s *parameter_ptr) -{ - return 0; -} - - -int8_t arm_pana_client_library_init(int8_t nwk_interface_id, net_tls_cipher_e cipher_mode, uint32_t psk_key_id) -{ - return 0; -} - - -int8_t arm_nwk_interface_configure_ipv6_bootstrap_set(int8_t nwk_interface_id, net_ipv6_mode_e bootstrap_mode, uint8_t *ipv6_prefix_pointer) -{ - return 0; -} - -int8_t arm_nwk_interface_configure_6lowpan_bootstrap_set(int8_t nwk_interface_id, net_6lowpan_mode_e bootstrap_mode, net_6lowpan_mode_extension_e net_6lowpan_mode_extension) -{ - return 0; -} - - -int8_t arm_nwk_6lowpan_link_scan_parameter_set(int8_t nwk_interface_id, uint8_t scan_time) -{ - return 0; -} - -int8_t arm_nwk_6lowpan_link_panid_filter_for_nwk_scan(int8_t nwk_interface_id, uint16_t pan_id_filter) -{ - return 0; -} - -int8_t arm_nwk_6lowpan_link_nwk_id_filter_for_nwk_scan(int8_t nwk_interface_id, const uint8_t *nwk_id_filter) -{ - return 0; -} - -int8_t arm_nwk_6lowpan_link_protocol_id_filter_for_nwk_scan(int8_t nwk_interface_id, uint8_t protocol_ID) -{ - return 0; -} - -int8_t net_init_core(void) -{ - return 0; -} - -int8_t arm_nwk_host_mode_set(int8_t nwk_interface_id, net_host_mode_t mode, uint32_t poll_time) -{ - return 0; -} - -int8_t arm_nwk_host_mode_get(int8_t nwk_interface_id, net_host_mode_t *mode) -{ - return 0; -} - -int8_t net_nvm_data_clean(int8_t interface_id) -{ - return 0; -} - -int8_t net_nvm_data_load(uint8_t *data_buffer, int8_t interface_id) -{ - return 0; -} - -int8_t net_pana_client_session_nvm_data_load(uint8_t *data_buffer, uint8_t *session_address, int8_t interface_id) -{ - return 0; -} - -int8_t net_read_persistent_data(uint8_t *data_buffer, int8_t interface_id) -{ - return 0; -} - -void arm_print_routing_table(void) -{ -} - -void arm_ncache_flush(void) -{ -} diff --git a/test/coap-service/unittest/stub/protocol_6lowpan_bootstrap_stub.c b/test/coap-service/unittest/stub/protocol_6lowpan_bootstrap_stub.c deleted file mode 100644 index 6d5fa59e22..0000000000 --- a/test/coap-service/unittest/stub/protocol_6lowpan_bootstrap_stub.c +++ /dev/null @@ -1,162 +0,0 @@ -/* - * Copyright (c) 2015 ARM Limited. All rights reserved. - */ - -/* - * \file protocol_6lowpan_bootstrap.c - * - */ -#include "config.h" -#include "string.h" -#include "ns_types.h" -#include "ns_trace.h" -#include "nsdynmemLIB.h" -#include "NWK_INTERFACE/Include/protocol.h" -#include "Common_Protocols/icmpv6.h" -#include "Common_Protocols/icmpv6_radv.h" -#include "Common_Protocols/udp.h" -#include "6LoWPAN/Bootstraps/network_lib.h" -#include "6LoWPAN/Bootstraps/protocol_6lowpan.h" -#include "6LoWPAN/Bootstraps/protocol_6lowpan_interface.h" -#include "MAC/IEEE802_15_4/mac_security_interface.h" -#include "MAC/IEEE802_15_4/mac_data_poll.h" -#include "MAC/IEEE802_15_4/mac_mlme.h" -#ifdef HAVE_RPL -#include "6LoWPAN/RPL/rpl.h" -#include "6LoWPAN/RPL/rpl_obj.h" -#else -/* This sort of thing should be handled in rpl.h itself */ -#define rpl_object_poisons() 0 -#endif -#ifndef NO_MLE -#include "MLE/mle.h" -//#include "MLE/mle_challenge_data.h" -#endif -#ifdef ECC -#include "libX509_V3.h" -#include "ecc.h" -#endif -#ifndef NO_TCP -#ifndef NO_TLS -#include "ccmLIB.h" -#include "shalib.h" -#include "Security/TLS/tls_lib.h" -#include "Security/Common/sec_lib.h" -#include "net_nvm_api.h" -#include "Security/PANA/pana.h" -#include "Security/PANA/pana_internal_api.h" -#endif -#include "Common_Protocols/tcp.h" -#endif -#include "6LoWPAN/ND/nd_router_object.h" -#include "common_functions.h" - -#define TRACE_GROUP_LOWPAN_BOOT "6Bo" - -int8_t arm_6lowpan_bootsrap_down(protocol_interface_info_entry_t *cur) -{ - return -1; -} - -int8_t arm_6lowpan_bootstrap_up(protocol_interface_info_entry_t *cur) -{ - return -1; -} - -void arm_6lowpan_bootstrap_init(protocol_interface_info_entry_t *cur) -{ -} - -void nwk_6lowpan_router_scan_state(protocol_interface_info_entry_t *cur) -{ -} - -void nwk_6lowpan_bootstrap_ready(protocol_interface_info_entry_t *cur) -{ -} - -void protocol_6lowpan_rpl_external_advertisment(protocol_interface_info_entry_t *cur_interface , rpl_dodag_t *cur) -{ -} - -void protocol_6lowpan_link_advertise_handle(nd_router_t *cur, protocol_interface_info_entry_t *cur_interface, uint16_t tick) -{ -} - -uint8_t nwk_bootstrap_icmp_rpl_dis_msg_tx(protocol_interface_info_entry_t *cur) -{ - return 0; -} - -void protocol_6lowpan_bootstrap_nd_ready(protocol_interface_info_entry_t *cur_interface, nd_router_t *cur) -{ -} - -void nwk_6lowpan_rpl_router_discover(protocol_interface_info_entry_t *cur) -{ -} - -void nwk_6lowpan_rpl_router_result_check(protocol_interface_info_entry_t *cur) -{ -} - - -void nwk_6lowpan_nd_address_registartion_ready(protocol_interface_info_entry_t *cur) -{ -} - -#ifdef PANA -void nwk_6lowpan_pana_key_pull(protocol_interface_info_entry_t *cur) -{ -} -#endif - -#ifndef NO_MLE - -#ifdef PANA -void nwk_6lowpan_bootsrap_pana_authentication_cb(bool processSuccesfully, protocol_interface_info_entry_t *cur) -{ - -} - -#endif - -#endif - -void nwk_6lowpan_network_authentication_fail(protocol_interface_info_entry_t *cur) -{ -} - -void nwk_6lowpan_network_authentication_done(protocol_interface_info_entry_t *cur) -{ -} - -void protocol_6lowpan_mac_scan_confirm(uint8_t *data) -{ -} - -void protocol_6lowpan_bootstrap(protocol_interface_info_entry_t *cur) -{ -} - -void protocol_6lowpan_mac_clean_mac16(protocol_interface_info_entry_t *interface) -{ -} - -void protocol_6lowpan_nd_borderrouter_connection_down(protocol_interface_info_entry_t *interface) -{ -} - -void protocol_6lowpan_bootstrap_re_start(protocol_interface_info_entry_t *interface) -{ -} - -uint8_t *protocol_6lowpan_nd_border_router_address_get(nwk_interface_id nwk_id) -{ - return NULL; -} - -uint8_t protocol_6lowpan_rf_link_scalability_from_lqi(uint8_t lqi) -{ - return 0; -} diff --git a/test/coap-service/unittest/stub/protocol_6lowpan_interface_stub.c b/test/coap-service/unittest/stub/protocol_6lowpan_interface_stub.c deleted file mode 100644 index 88b1b0e753..0000000000 --- a/test/coap-service/unittest/stub/protocol_6lowpan_interface_stub.c +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright (c) 2015 ARM Limited. All rights reserved. - */ - -/* - * \file protocol_6lowpan_interface.c - * \brief Add short description about this file!!! - * - */ -#include "config.h" -#include "string.h" -#include "ns_types.h" -#include "eventOS_event.h" -#include "eventOS_scheduler.h" -#include "ns_trace.h" -#include "nsdynmemLIB.h" -#include "NWK_INTERFACE/Include/protocol.h" -#include "Common_Protocols/udp.h" -#include "6LoWPAN/ND/icmp.h" -#include "Common_Protocols/ipv6.h" -#include "Common_Protocols/icmpv6.h" -#include "Common_Protocols/icmpv6_radv.h" -#include "Core/include/routing_table.h" -#include "6LoWPAN/Bootstraps/network_lib.h" -#include "6LoWPAN/Bootstraps/protocol_6lowpan.h" -#include "6LoWPAN/Bootstraps/protocol_6lowpan_bootstrap.h" -#include "MAC/IEEE802_15_4/mac_security_interface.h" -#include "MAC/IEEE802_15_4/mac_mlme.h" -#ifdef HAVE_RPL -#include "6LoWPAN/RPL/rpl.h" -#include "6LoWPAN/RPL/rpl_obj.h" -#endif -#include "6LoWPAN/IPHC_Decode/cipv6.h" -#include "6LoWPAN/Fragmentation/cipv6_fragmenter.h" -#ifndef NO_MLE -#include "MLE/mle.h" -//#include "MLE/mle_challenge_data.h" -#endif -#include "6LoWPAN/Mesh/mesh.h" -#include "6LoWPAN/Thread/thread.h" -#ifdef ECC -#include "libX509_V3.h" -#include "ecc.h" -#endif -#ifndef NO_TCP -#ifndef NO_TLS -#include "ccmLIB.h" -#include "shalib.h" -#include "Security/TLS/tls_lib.h" -#include "Security/Common/sec_lib.h" -#include "net_nvm_api.h" -#include "Security/PANA/pana.h" -#include "Security/PANA/pana_internal_api.h" -#endif -#include "Common_Protocols/tcp.h" -#endif -#include "MulticastTrigle/multicast.h" -#include "NAP/nap_config.h" -#include "NWK_INTERFACE/Include/protocol_interface_driver.h" - -#include "6LoWPAN/ND/nd_router_object.h" -#include "platform/arm_hal_interrupt.h" -#include "common_functions.h" -#include "NWK_INTERFACE/Include/protocol_interface_driver.h" - - -int8_t nwk_6lowpan_up(protocol_interface_info_entry_t *cur) -{ - return 0; -} - -int8_t nwk_6lowpan_down(protocol_interface_info_entry_t *cur) -{ - return 0; -} diff --git a/test/coap-service/unittest/stub/protocol_6lowpan_stub.c b/test/coap-service/unittest/stub/protocol_6lowpan_stub.c deleted file mode 100644 index 6b4c7348f6..0000000000 --- a/test/coap-service/unittest/stub/protocol_6lowpan_stub.c +++ /dev/null @@ -1,145 +0,0 @@ -/* - * Copyright (c) 2013-2015 ARM Limited. All rights reserved. - */ - -#include "config.h" -#include "string.h" -#include "ns_types.h" -#include "eventOS_event.h" -#include "eventOS_scheduler.h" -#include "ns_trace.h" -#include "nsdynmemLIB.h" -#include "Core/include/socket.h" -#include "NWK_INTERFACE/Include/protocol.h" -#include "Common_Protocols/udp.h" -#include "Common_Protocols/ipv6.h" -#include "Common_Protocols/icmpv6.h" -#include "6LoWPAN/Bootstraps/protocol_6lowpan.h" -#include "MAC/IEEE802_15_4/mac_data_interface.h" -#include "MAC/IEEE802_15_4/mac_mlme.h" -#ifdef HAVE_RPL -#include "6LoWPAN/RPL/rpl.h" -#include "6LoWPAN/RPL/rpl_obj.h" -#else -/* This sort of thing should be handled in rpl.h itself */ -#define rpl_object_poisons() 0 -#endif -#include "6LoWPAN/IPHC_Decode/cipv6.h" -#include "6LoWPAN/Fragmentation/cipv6_fragmenter.h" -#ifndef NO_MLE -#include "MLE/mle.h" -//#include "MLE/mle_challenge_data.h" -#endif -#include "6LoWPAN/Mesh/mesh.h" -#include "6LoWPAN/Thread/thread.h" -#ifdef ECC -#include "libX509_V3.h" -#include "ecc.h" -#endif -#ifndef NO_TCP -#ifndef NO_TLS -#include "ccmLIB.h" -#include "shalib.h" -#include "Security/TLS/tls_lib.h" -#include "Security/Common/sec_lib.h" -#include "net_nvm_api.h" -#include "Security/PANA/pana.h" -#include "Security/PANA/pana_internal_api.h" -#endif -#include "Common_Protocols/tcp.h" -#endif -#include "NAP/nap_config.h" -#include "randLIB.h" -#include "6LoWPAN/ND/nd_router_object.h" -#include "common_functions.h" -#include "NWK_INTERFACE/Include/protocol_interface_driver.h" - -#define TRACE_GROUP_LOWPAN "6lo" -#ifdef NO_TCP -buffer_t *tcp_up(buffer_t *buf); -buffer_t *tcp_down(buffer_t *buf); - -buffer_t *tcp_up(buffer_t *buf) -{ - return buffer_free(buf); -} -buffer_t *tcp_down(buffer_t *buf) -{ - return buffer_free(buf); -} -#endif - -#ifdef NO_TLS -#define sec_timer_handle() -#endif - -void protocol_init(void) -{ -} - -void protocol_6lowpan_stack(buffer_t *b) -{ -} - -uint8_t protocol_6lowpan_llao_write(protocol_interface_info_entry_t *cur, uint8_t *opt_out, uint8_t opt_type) -{ - return 0; -} - -uint8_t protocol_6lowpan_llao_parse(protocol_interface_info_entry_t *cur, const uint8_t *opt_in, sockaddr_t *ll_addr_out) -{ - return 0; -} - -void protocol_6lowpan_register_handlers(protocol_interface_info_entry_t *cur) -{ -} - -void protocol_6lowpan_release_short_link_address_from_neighcache(protocol_interface_info_entry_t *cur, uint16_t shortAddress) -{ -} - -void protocol_6lowpan_release_long_link_address_from_neighcache(protocol_interface_info_entry_t *cur, uint8_t *mac64) -{ -} - -void protocol_6lowpan_priority_neigh_rm_callback(uint8_t *nwk_suffic, protocol_interface_info_entry_t *cur) -{ -} - -void protocol_6lowpan_neighbor_priority_update(protocol_interface_info_entry_t *cur, uint8_t *removed_priority, uint8_t *updated_priority) -{ -} - -int8_t protocol_6lowpan_neighbor_address_state_synch(protocol_interface_info_entry_t *cur, const uint8_t eui64[8], const uint8_t iid[8]) -{ - return 0; -} - -int8_t protocol_6lowpan_neighbor_remove(protocol_interface_info_entry_t *cur, uint8_t *address_ptr, addrtype_t type) -{ - return 0; -} - -int8_t protocol_6lowpan_neighbor_address_validate(route_info_entry_t *info, protocol_interface_info_entry_t *cur) -{ - return 0; -} - -void protocol_6lowpan_allocate_mac16(protocol_interface_info_entry_t *cur) -{ -} - -void protocol_6lowpan_interface_common_init(protocol_interface_info_entry_t *cur) -{ -} - -int8_t protocol_6lowpan_interface_compare_cordinator_netid(protocol_interface_info_entry_t *cur, uint8_t *adr_ptr) -{ - return 0; -} - -int8_t protocol_6lowpan_interface_get_link_local_cordinator_address(protocol_interface_info_entry_t *cur, uint8_t *adr_ptr) -{ - return 0; -} diff --git a/test/coap-service/unittest/stub/protocol_core_stub.c b/test/coap-service/unittest/stub/protocol_core_stub.c deleted file mode 100644 index cd2279a8a4..0000000000 --- a/test/coap-service/unittest/stub/protocol_core_stub.c +++ /dev/null @@ -1,300 +0,0 @@ -/* - * Copyright (c) 2014-2015 ARM Limited. All rights reserved. - */ - -#include "config.h" -#include "string.h" -#include "ns_types.h" -#include "eventOS_event.h" -#include "eventOS_scheduler.h" -#include "eventOS_callback_timer.h" -#include "ns_trace.h" -#include "nsdynmemLIB.h" -#include "Core/include/socket.h" -#include "NWK_INTERFACE/Include/protocol.h" -#include "NWK_INTERFACE/Include/protocol_timer.h" -#include "NWK_INTERFACE/Include/protocol_interface_driver.h" -#include "MAC/IEEE802_15_4/mac_data_interface.h" -#include "MAC/IEEE802_15_4/mac_data_poll.h" -#include "MAC/IEEE802_15_4/mac_mlme.h" -#include "platform/arm_hal_interrupt.h" -#include "6LoWPAN/Fragmentation/cipv6_fragmenter.h" -#ifndef NO_MLE -#include "MLE/mle.h" -#endif -#include "6LoWPAN/Bootstraps/protocol_6lowpan.h" -#include "6LoWPAN/Bootstraps/protocol_6lowpan_bootstrap.h" -#include "NWK_INTERFACE/Include/protocol_stats.h" -#include "NWK_INTERFACE/Include/protocol_timer.h" -#include "common_functions.h" -#include "randLIB.h" -#include "platform/arm_hal_phy.h" -#include "platform/arm_hal_interrupt.h" -#ifdef ECC -#include "libX509_V3.h" -#include "ecc.h" -#endif -#ifndef NO_TLS -#include "shalib.h" -#include "Security/TLS/tls_lib.h" -#include "Security/Common/sec_lib.h" -#include "net_nvm_api.h" -#include "net_pana_parameters_api.h" -#include "Security/PANA/pana.h" -#include "Security/PANA/pana_internal_api.h" -#else -#define sec_timer_handle() -#endif -#include "Common_Protocols/ipv6.h" -#include "Common_Protocols/ipv6_fragmentation.h" -#include "Common_Protocols/icmpv6_radv.h" -#include "Common_Protocols/udp.h" -#include "6LoWPAN/ND/nd_router_object.h" -#include "6LoWPAN/RPL/rpl_definition.h" -#ifdef HAVE_RPL -#include "6LoWPAN/RPL/rpl.h" -#include "6LoWPAN/RPL/rpl_obj.h" -#endif -#include "NAP/nap_config.h" -#include "libDHCPv6/libDHCPv6.h" -#include "6LoWPAN/Thread/thread.h" -#include "6LoWPAN/Thread/thread_bootstrap.h" -#include "6LoWPAN/Thread/thread_routing.h" -#include "6LoWPAN/Thread/thread_management_internal.h" -#ifdef IPV6_STACK -#include "ipv6_stack/protocol_ipv6.h" -#endif -#ifdef WHITEBOARD -#ifdef NVM_BORDER_ROUTER -#include "br_list_nvm_api.h" -#endif -#include "Service_Libs/whiteboard/whiteboard.h" -#endif - -#include "MulticastTrigle/multicast.h" - -static protocol_interface_info_entry_t stub_protocol_interface_info_entry; - -#define TRACE_GROUP_CORE "core" - -#ifndef SEC_LIB_X_100MS_COUNTER -#define SEC_LIB_X_100MS_COUNTER 1 -#endif -uint32_t protocol_core_monotonic_time; - -typedef struct { - uint8_t core_timer_ticks; - uint8_t core_timer_event; - uint16_t core_security_ticks_counter; - uint8_t nd_ttl_timer; -} lowpan_core_timer_structures_s; - -void core_timer_event_handle(uint16_t ticksUpdate); - -#ifndef IPV6_STACK -#define ipv6_core_timer_event_handle(x,y) -#define ipv6_core_slow_timer_event_handle(x) -#endif - -uint32_t event_idle_dummy(uint8_t result, uint32_t s_time) -{ - return 0; -} - - -int8_t protocol_read_tasklet_id(void) -{ - return -1; -} - -uint8_t check_power_state(uint8_t mode) -{ - return 0; -} - - -void set_power_state(uint8_t mode) -{ -} - -void clear_power_state(uint8_t mode) -{ -} - -protocol_interface_info_entry_t *nwk_interface_get_pointer_by_timer_id(int8_t id, arm_nwk_timer_id_e type) -{ - return NULL; -} - -void timer_ifs_interrupt(int8_t timer_id, uint16_t slots) -{ -} - -void protocol_root_tasklet(arm_event_s *event) -{ -} -void protocol_core_security_tick_update(uint16_t tick_update) -{ -} - -void nwk_bootsrap_timer(protocol_interface_info_entry_t *cur) -{ -} - -uint8_t nwk_border_router_active(nwk_interface_id nwk_id) -{ - return 0; -} - -void core_timer_event_handle(uint16_t ticksUpdate) -{ -} - -void protocol_core_cb(uint16_t ticksUpdate) -{ -} - - -void protocol_core_init(void) -{ -} - -void protocol_core_interface_info_reset(protocol_interface_info_entry_t *entry) -{ -} - -void bootsrap_next_state_kick(icmp_state_t new_state, protocol_interface_info_entry_t *cur) -{ -} - -uint32_t protocol_stack_interface_set_reachable_time(protocol_interface_info_entry_t *cur, uint32_t base_reachable_time) -{ - return 0; -} -protocol_interface_info_entry_t *nwk_interface_get_ipv6_ptr(void) -{ - return NULL; -} - -void nwk_interface_print_neigh_cache(uint8_t dlevel) -{ -} - -void nwk_interface_flush_neigh_cache(void) -{ -} - -void ipv6_prefix_on_link_update(uint8_t *address) -{ -} - -void ipv6_prefix_on_link_remove(uint8_t *address) -{ -} - -protocol_interface_info_entry_t *protocol_stack_interface_info_get(nwk_interface_id nwk_id) -{ - return &stub_protocol_interface_info_entry; -} - -protocol_interface_info_entry_t *protocol_stack_interface_info_get_by_id(int8_t nwk_id) -{ - return NULL; -} - -protocol_interface_info_entry_t *protocol_stack_interface_info_get_by_bootstrap_id(int8_t id) -{ - return NULL; -} - -protocol_interface_info_entry_t *protocol_stack_interface_info_get_by_device_id(int8_t nwk_id) -{ - return NULL; -} - -protocol_interface_info_entry_t *protocol_stack_interface_info_get_by_tun_device_id(int8_t nwk_id) -{ - return NULL; -} - - - -protocol_interface_info_entry_t *protocol_stack_interface_sleep_possibility(void) -{ - return NULL; -} - -uint8_t nwk_bootsrap_ready(protocol_interface_info_entry_t *cur) -{ - return 0; -} - -int8_t nwk_interface_MAC_MTU_allocate(protocol_interface_info_entry_t *cur) -{ - return 0; -} - -protocol_interface_info_entry_t *protocol_stack_interface_generate(nwk_interface_id nwk_id, int8_t driver_id) -{ - return NULL; -} - -void nwk_interface_link_layer_key_synch_lost_check(protocol_interface_info_entry_t *cur, uint8_t key_id) -{ -} - -bool nwk_interface_compare_mac_address(protocol_interface_info_entry_t *cur, uint_fast8_t addrlen, const uint8_t *addr) -{ - return 0; -} - -int nwk_lowpan_routing_check(buffer_t *buf) -{ - return 0; -} - -int8_t nwk_interface_solication_address_check(protocol_interface_info_entry_t *cur_interface, const uint8_t address_ptr[__static 16]) -{ - return 0; -} - -int protocol_stack_interface_check_prefix_extension_support(int8_t nwk_id, uint8_t *prefix) -{ - return -1; -} - -void protocol_stack_pointer_clear(nwk_interface_id if_id) -{ -} - -int8_t protocol_stack_pointer_check(nwk_interface_id if_id) -{ - return 0; -} - -uint8_t protocol_too_busy(void) -{ - return 0; -} - -void protocol_push(buffer_t *buf) -{ -} - -void nwk_bootsrap_state_update(arm_nwk_interface_status_type_e posted_event, protocol_interface_info_entry_t *cur) -{ -} - -void net_bootsrap_cb_run(uint8_t event) -{ -} - -void protocol_core_dhcpv6_allocated_address_remove(protocol_interface_info_entry_t *cur, uint8_t *guaPrefix) -{ -} - -int8_t protcol_interface_address_compare(protocol_interface_info_entry_t *cur, const uint8_t *addr) -{ - return -1; -} - diff --git a/test/coap-service/unittest/stub/protocol_interface_driver_stub.c b/test/coap-service/unittest/stub/protocol_interface_driver_stub.c deleted file mode 100644 index 9e1177c53c..0000000000 --- a/test/coap-service/unittest/stub/protocol_interface_driver_stub.c +++ /dev/null @@ -1,14 +0,0 @@ -/* - * Copyright (c) 2014-2015 ARM Limited. All rights reserved. - */ -#include "config.h" -#include "string.h" -#include "ns_types.h" -#include "NWK_INTERFACE/Include/protocol.h" -#include "NWK_INTERFACE/Include/protocol_interface_driver.h" -#include "nsdynmemLIB.h" - -arm_device_driver_list_s *arm_net_phy_driver_pointer(int8_t id) -{ - return NULL; -} diff --git a/test/coap-service/unittest/stub/protocol_ipv6_stub.c b/test/coap-service/unittest/stub/protocol_ipv6_stub.c deleted file mode 100644 index 33328130ce..0000000000 --- a/test/coap-service/unittest/stub/protocol_ipv6_stub.c +++ /dev/null @@ -1,169 +0,0 @@ -/* - * Copyright (c) 2012-2015 ARM Limited. All rights reserved. - */ -#include "config.h" -#include "string.h" -#include "ns_types.h" -#include "ns_list.h" -#include "ns_trace.h" -#include "nsdynmemLIB.h" -#include "Core/include/socket.h" -#include "NWK_INTERFACE/Include/protocol.h" -#include "Common_Protocols/ipv6.h" -#include "6LoWPAN/ND/icmp.h" -#include "Common_Protocols/icmpv6.h" -#include "Common_Protocols/ipv6_resolution.h" -#include "Common_Protocols/icmpv6_prefix.h" -#include "Common_Protocols/icmpv6_radv.h" -#include "Common_Protocols/udp.h" -#ifndef NO_TLS -#ifdef ECC -#include "libX509_V3.h" -#include "ecc.h" -#endif -#include "shalib.h" -#include "Security/TLS/tls_lib.h" -#include "Security/Common/sec_lib.h" -#endif - -#include "6LoWPAN/ND/nd_router_object.h" // for gp_address_ functions - better place? -#include "ipv6_stack/ipv6_routing_table.h" -#include "ipv6_stack/protocol_ipv6.h" -#ifndef NO_TCP -#include "Common_Protocols/tcp.h" -#endif -#ifdef NVM_BORDER_ROUTER -#include "br_list_nvm_api.h" -#endif -#include "Service_Libs/whiteboard/whiteboard.h" -#include "platform/arm_hal_interrupt.h" -#include "common_functions.h" -#include "randLIB.h" - -typedef struct ipv6_interface_prefix_on_link_t { - uint8_t prefix[16]; /*!< destination address */ - uint8_t prefix_len; - uint32_t prefix_valid_ttl; - ns_list_link_t link; -} ipv6_interface_prefix_on_link_t; - -typedef struct ipv6_interface_route_on_link_t { - uint8_t prefix[16]; /*!< destination address */ - uint8_t prefix_len; - uint8_t routePrefer; - uint32_t prefix_valid_ttl; - ns_list_link_t link; -} ipv6_interface_route_on_link_t; - -#define WB_UPDATE_PERIOD_SECONDS 23 - -#define ROUTER_SOL_MAX_COUNTER 4 - -#define TRACE_GROUP_PROTOCOL_IPv6 "ip6s" - -int ipv6_generate_static_gp_setup(protocol_interface_info_entry_t *cur) -{ - return -1; -} - -int ipv6_generate_ula_prefix(protocol_interface_info_entry_t *cur) -{ - return -1; -} - -int ipv6_prefix_router_flag_activate(uint8_t *ipv6_address) -{ - return -1; -} - -buffer_t *ethernet_header_build_push(buffer_t *buf, uint16_t ethernet_type, int8_t *status) -{ - return NULL; -} - -buffer_t *ethernet_down(buffer_t *buf) -{ - return NULL; -} - -void ipv6_stack_prefix_on_link_update(protocol_interface_info_entry_t *cur, uint8_t *address) -{ -} - -void ipv6_stack_route_advert_update(uint8_t *address, uint8_t prefixLength, uint8_t routePrefer) -{ -} - -void ipv6_stack_prefix_on_link_remove(protocol_interface_info_entry_t *cur, uint8_t *address) -{ -} - -void ipv6_stack_route_advert_remove(uint8_t *address, uint8_t prefixLength) -{ -} - -void ipv6_prefix_online_list_free(void) -{ -} - -void ipv6_rote_advert_list_free(void) -{ -} - -void ipv6_core_slow_timer_event_handle(struct protocol_interface_info_entry *cur) -{ -} - -void ipv6_core_timer_event_handle(protocol_interface_info_entry_t *cur, const uint8_t event) -{ -} - -int ipv6_prefix_register(uint8_t *prefix_64, uint32_t lifetime, uint32_t prefer_lifetime) -{ - return -1; -} - - -int8_t ipv6_interface_up(protocol_interface_info_entry_t *cur) -{ - return -1; -} - -int8_t ipv6_interface_down(protocol_interface_info_entry_t *cur) -{ - return -1; -} - - -#ifdef RADV_TX -void ipv6_nd_ra_advert(protocol_interface_info_entry_t *cur, const uint8_t *dest) -{ -} -#endif - -void ipv6_interface_resolve_send_ns(ipv6_neighbour_cache_t *cache, ipv6_neighbour_t *entry, bool unicast, uint_fast8_t seq) -{ -} - - - -void ipv6_trigger_resolve_query(protocol_interface_info_entry_t *cur_interface, buffer_t *buf, ipv6_neighbour_t *n) -{ -} - -void ipv6_send_queued(ipv6_neighbour_t *entry) -{ -} - -void ipv6_interface_resolution_failed(ipv6_neighbour_cache_t *cache, ipv6_neighbour_t *entry) -{ -} - -ipv6_neighbour_cache_t *ipv6_neighbour_cache_by_interface_id(int8_t interface_id) -{ - return NULL; -} - -void ipv6_interface_slaac_handler(protocol_interface_info_entry_t *cur, uint8_t *slaacPrefix, uint8_t prefixLen, uint32_t validLifeTime, uint32_t preferredLifeTime) -{ -} diff --git a/test/coap-service/unittest/stub/routing_table_stub.c b/test/coap-service/unittest/stub/routing_table_stub.c deleted file mode 100644 index 345b73625a..0000000000 --- a/test/coap-service/unittest/stub/routing_table_stub.c +++ /dev/null @@ -1,128 +0,0 @@ -/* - * Copyright (c) 2011-2015 ARM Limited. All rights reserved. - */ -#include "config.h" -#include "ns_types.h" -#include "ns_trace.h" -#include "string.h" -#include "Core/include/address.h" -#include "Core/include/buffer.h" -#include "Core/include/socket.h" -#include "Core/include/routing_table.h" -#include "nsdynmemLIB.h" -#include "Common_Protocols/ipv6.h" -#ifdef NVM_BORDER_ROUTER -#include "br_list_nvm_api.h" -#endif -#include "common_functions.h" - -#define TRACE_GROUP_ROUTING_TABLE "crou" - -#if ADDRESS_SIZE == 8 -#if MAX_HOP_CNT > 30 -#error "DO not set MAX_HOP_CNT over 30 reason by 8-bit size resolution" -#endif -#endif - -source_route_t *get_generated_src_route(void) -{ - return NULL; -} - -#ifdef NVM_BORDER_ROUTER -uint16_t (*route_nvm_storage_cb)(br_nvm_update_process_t) = 0; - -int8_t route_nvm_callback_set(uint16_t (*passed_fptr)(br_nvm_update_process_t), uint8_t *nvm_static_buffer) -{ - return -1; -} - -int8_t route_entry_store_from_nvm(const uint8_t *nvm_data) -{ - return -1; -} - -#endif -void route_nvm_update(route_table_entry_t *entry) -{ -} - -void route_nvm_remove(route_table_entry_t *entry) -{ -} - -void gen_route_del(route_table_entry_t *cur) -{ -} - -uint8_t gen_source_route(route_info_entry_t *info) -{ - return 0; -} - -uint8_t *gen_source_route_set(uint8_t *ptr) -{ - return NULL; -} - -route_table_entry_t *gen_route_entry_get(const uint8_t address[16]) -{ - return NULL; -} - -route_table_entry_t *gen_route_entry_get_by_iid(const uint8_t address[8]) -{ - return NULL; -} - -void gen_routing_table_init(void) -{ -} - -route_table_entry_t *gen_table_update(const uint8_t addr[16]) -{ - return NULL; -} - - -int8_t gen_source_route_allocate(uint8_t alloc) -{ - return -1; -} - - - -int8_t gen_route_exist_check(const uint8_t ipv6_address_ptr[16]) -{ - return -1; -} - - - -void gen_route_detect(route_info_entry_t *info, uint8_t forward_info) -{ -} - - -void gen_routing_ttl_update(uint8_t id) -{ -} - -void gen_routing_ttl_set_low_by_repair(uint8_t id) -{ -} - -void gen_route_remove_by_rpl_instance(uint8_t id) -{ -} - - -void gen_neighbor_ttl_update(uint8_t ttl) -{ -} - -void routing_table_print(void) -{ -} - - diff --git a/test/coap-service/unittest/stub/rpl_obj_stub.c b/test/coap-service/unittest/stub/rpl_obj_stub.c deleted file mode 100644 index 95acfc9b39..0000000000 --- a/test/coap-service/unittest/stub/rpl_obj_stub.c +++ /dev/null @@ -1,392 +0,0 @@ -/* - * Copyright (c) 2013-2015 ARM Limited. All rights reserved. - */ -#include "config.h" -#include -#include "ns_types.h" - -#ifdef HAVE_RPL -#include "nsdynmemLIB.h" -#include "NWK_INTERFACE/Include/protocol.h" -#include "ns_trace.h" -#include "ip6string.h" -#include "Core/include/routing_table.h" -#include "6LoWPAN/IPHC_Decode/cipv6.h" -#include "Common_Protocols/icmpv6.h" -#include "Common_Protocols/icmpv6_prefix.h" -#include "6LoWPAN/RPL/rpl.h" -#include "6LoWPAN/RPL/rpl_obj.h" -#include "net_rpl.h" -#include "6LoWPAN/ND/nd_router_object.h" -#include "6LoWPAN/Bootstraps/network_lib.h" -#include "6LoWPAN/Bootstraps/protocol_6lowpan.h" -#include "6LoWPAN/Bootstraps/protocol_6lowpan_bootstrap.h" -#include "randLIB.h" -#include "nwk_stats_api.h" -#include "NWK_INTERFACE/Include/protocol_stats.h" -#ifdef IPV6_STACK -#include "Common_Protocols/ipv6.h" -#endif -#ifdef NVM_BORDER_ROUTER -#include "br_list_nvm_api.h" -#endif - -#include "common_functions.h" - -#define TRACE_GROUP_RPL_OBJ "rplo" - -const uint8_t ADDR_LINK_LOCAL_ALL_RPL_NODES[16] = { 0xff, 0x02, [15] = 0x1a }; - -void rpl_dodag_base_init(rpl_dodag_t *new_entry); - -int8_t rpl_prefix_update(uint8_t *dptr, rpl_dodag_t *rpl_object); -static void rpl_route_list_free(route_list_t *list); -void rpl_object_release(rpl_dodag_t *router_object); -void rpl_router_object_reset(rpl_dodag_t *router_object); -//uint8_t rpl_metric_parse(buffer_t *buf); -void rpl_dodag_config_update(uint8_t *dptr, dodag_config_t *dodag_conf); -rpl_dodag_t *icmp_rpl_router_object_get(uint8_t *dodag_id, uint8_t instance_id, uint16_t rank); -rpl_dodag_t *icmp_rpl_router_object_get_by_intance(uint8_t instance_id); -uint8_t rpl_dis_build(rpl_dodag_t *cur); -uint8_t rpl_dio_tx(rpl_dodag_t *cur, uint8_t *address , protocol_interface_info_entry_t *cur_interface); -uint8_t rpl_dao_tx(rpl_dodag_t *cur, protocol_interface_info_entry_t *cur_interface); -void rpl_set_trigle_timer(rpl_dodag_t *cur , uint8_t active); -void rpl_unicast_response_allocate(rpl_dodag_t *router, uint8_t *address); -void rpl_object_print(void); -void rpl_obj_update_rank_hop(rpl_dodag_t *temp); -int8_t rpl_route_prefix_update(uint8_t len, const uint8_t *dptr, uint8_t instance_id); -void rpl_route_prefix_remove_by_rpl_instance(uint8_t id); -rpl_dodag_t *rpl_root_get_by_intance_id(uint8_t instace_id); - -#ifdef NVM_BORDER_ROUTER - -uint16_t (*rpl_nvm_storage_cb)(br_rpl_nvm_update_process_t) = 0; - -int8_t rpl_nvm_callback_set(uint16_t (*passed_fptr)(br_rpl_nvm_update_process_t), uint8_t *nvm_static_buffer) -{ - return -1; -} - -int8_t rpl_nvm_base_reload(const uint8_t *nvm_data, int8_t interface_id) -{ - return -1; -} - -int8_t rpl_prefix_store_from_nvm(const uint8_t *nvm_data, uint8_t instance_id) -{ - return -1; -} - -int8_t rpl_route_store_from_nvm(const uint8_t *nvm_data, uint8_t instance_id) -{ - return -1; -} - - - -#endif - -int8_t rpl_root_dodag_poiso_ready(uint8_t instace_id) -{ - return -1; -} - -int8_t arm_nwk_6lowpan_rpl_dodag_dao_trig(int8_t nwk_interface_id) -{ - return -1; -} - -int8_t arm_nwk_6lowpan_rpl_dodag_version_increment(int8_t nwk_interface_id) -{ - return -1; -} - -uint8_t rpl_routers_active(void) -{ - return 0; -} - -int8_t rpl_root_active(rpl_dodag_t *compare_ptr) -{ - return -1; -} - -int8_t arm_nwk_6lowpan_rpl_dodag_start(int8_t interface_id) -{ - return -1; -} - -int8_t arm_nwk_6lowpan_rpl_dodag_init(int8_t interface_id, const uint8_t *dodag_id, const dodag_config_t *config, uint8_t instace_id, uint8_t flags) -{ - return -1; -} - -int8_t rpl_root_setup_refresh(uint8_t instance_id) -{ - return -1; -} - -rpl_dodag_t *rpl_root_get_by_intance_id(uint8_t instance_id) -{ - return NULL; -} - -int8_t arm_nwk_6lowpan_rpl_dodag_poison(int8_t nwk_interface_id) -{ - return -1; -} - -int8_t arm_nwk_6lowpan_rpl_dodag_remove(int8_t interface_id) -{ - return -1; -} - - -void rpl_routers_init(void) -{ -} - -void rpl_obj_change_parent(rpl_dodag_t *temp) -{ -} - -void rpl_obj_update_rank_hop(rpl_dodag_t *temp) -{ -} - - -void rpl_obj_dao_trig(rpl_dodag_t *cur) -{ -} - -void rpl_object_release(rpl_dodag_t *router_object) -{ -} - -void rpl_router_object_reset(rpl_dodag_t *router_object) -{ -} - -rpl_dodag_t *icmp_rpl_router_object_get_by_intance(uint8_t instance_id) -{ - return NULL; -} - -void rpl_dodag_base_init(rpl_dodag_t *new_entry) -{ -} - -rpl_dodag_t *icmp_rpl_router_object_get(uint8_t *dodag_id, uint8_t instance_id, uint16_t rank) -{ - return NULL; -} - -void rpl_unicast_response_allocate(rpl_dodag_t *router, uint8_t *address) -{ -} - -void rpl_dis_handler(buffer_t *buf, bool multicast_dst) -{ -} - -buffer_t *rpl_dao_parse(buffer_t *buf) -{ - return NULL; -} - -void rpl_dao_ack_parse(uint8_t *dptr, uint16_t length, nwk_interface_id nwk_id) -{ -} - -void rpl_dio_parse(buffer_t *buf) -{ -} - -int8_t arm_nwk_6lowpan_rpl_dodag_prefix_update(int8_t nwk_interface_id, uint8_t *prefix_ptr, uint8_t prefix_len, uint8_t flags, uint32_t lifetime) -{ - return -1; -} - -int8_t rpl_prefix_update(uint8_t *dptr, rpl_dodag_t *rpl_object) -{ - return -1; -} - - -int8_t arm_nwk_6lowpan_rpl_dodag_route_update(int8_t nwk_interface_id, uint8_t *route_ptr, uint8_t prefix_len, uint8_t flags, uint32_t lifetime) -{ - return -1; -} - -rpl_dodag_t *rpl_route_longest_matches_prefix(const uint8_t *address) -{ - return NULL; -} - -void rpl_route_prefix_remove_by_rpl_instance(uint8_t id) -{ -} - -int8_t rpl_route_prefix_update(uint8_t len, const uint8_t *dptr, uint8_t instance_id) -{ - return -1; -} - -route_entry_t *rpl_root_route_update(const uint8_t *dptr, rpl_dodag_proxy_t *rpl_object) -{ - return NULL; -} - -void rpl_dodag_config_update(uint8_t *dptr, dodag_config_t *dodag_conf) -{ -} - -uint8_t rpl_dodag_object_heared(void) -{ - return 0; -} - -void rpl_dodag_root_dao_repair(void) -{ -} - - -rpl_dodag_t *rpl_dodag_root_get(nwk_interface_id nwk_id) -{ - return NULL; -} - -uint8_t rpl_dodag_cnt(void) -{ - return 0; -} - -void rpl_dodag_dao_external_timer_trig(void) -{ -} - -void rpl_router_prefix_ttl_update(rpl_dodag_t *router_object) -{ -} - -void rpl_route_prefix_route_ttl_update(uint8_t intance_id) -{ - -} - -uint16_t rpl_route_prefix_route_length(uint8_t intance_id) -{ - return 0; -} - -uint8_t *rpl_route_prefix_route_set(uint8_t *dptr , uint8_t intance_id) -{ - return NULL; -} - -void rpl_object_timer_second_update(nwk_interface_id nwk_id) -{ - -} - -void rpl_object_timer(uint8_t ticks, protocol_interface_info_entry_t *cur_interface) -{ - -} - -uint8_t rpl_object_poisons(void) -{ - return 0; -} - -void rpl_object_timer_balance(uint16_t sleep_time) -{ - -} - -uint8_t rpl_dis_build(rpl_dodag_t *cur) -{ - return 0; -} - - -uint8_t rpl_dao_tx(rpl_dodag_t *cur, protocol_interface_info_entry_t *cur_interface) -{ - return 0; -} - -uint8_t rpl_poison_req(rpl_dodag_t *cur) -{ - return 0; -} - -uint8_t rpl_host_dao_tx(rpl_dodag_t *cur, uint8_t *adr_ptr, uint8_t short_address_type) -{ - return 0; -} - -void rpl_set_trigle_timer(rpl_dodag_t *cur , uint8_t active) -{ -} - -//extern void get_suffics(uint8_t *ptr); -uint8_t rpl_dio_tx(rpl_dodag_t *cur, uint8_t *address , protocol_interface_info_entry_t *cur_interface) -{ - return 0; -} - - -uint8_t rpl_routeloop_check(rpl_loopdetect_t *loop) -{ - return 0; -} - -rpl_dodag_t *rpl_route(const uint8_t *addr, uint8_t id/*, route_info_entry_t * response*/) -{ - return NULL; -} - -rpl_dodag_t *rpl_route_by_prefix(const uint8_t *addr, bool root_is_valid) -{ - return NULL; -} - -uint8_t rpl_prefix_adr_valid_check(uint8_t *addr) -{ - return 0; -} - -uint8_t rpl_get_router_address(uint8_t *addr) -{ - return 0; -} - -uint8_t rpl_compare_parent(uint8_t *addr, rpl_dodag_t **response) -{ - return 0; -} - -void rpl_parent_remove(uint8_t *addr, protocol_interface_info_entry_t *cur_interface) -{ -} - -void rpl_object_print(void) -{ -} - -uint8_t rpl_instance_list_read(uint8_t *cache_ptr, uint8_t cache_size) -{ - return 0; -} - -uint8_t rpl_read_dodag_info(rpl_dodag_info_t *dodag_ptr, uint8_t instance_id) -{ - return 0; -} - -bool rpl_root_rank(rpl_dodag_t *cur) -{ - return false; -} - -#endif diff --git a/test/coap-service/unittest/stub/security_lib_stub.c b/test/coap-service/unittest/stub/security_lib_stub.c deleted file mode 100644 index ec78c0e316..0000000000 --- a/test/coap-service/unittest/stub/security_lib_stub.c +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright (c) 2013-2015 ARM Limited. All rights reserved. - */ -#include "config.h" -#include "ns_types.h" -#include "ns_trace.h" -#include "string.h" -#include "eventOS_event.h" -#include "ccmLIB.h" -#include "nsdynmemLIB.h" -#include "Core/include/socket.h" -#include "NWK_INTERFACE/Include/protocol.h" -#include "shalib.h" -#include "randLIB.h" -#ifdef ECC -#include "libX509_V3.h" -#include "ecc.h" -#endif -#include "Security/TLS/tls_lib.h" -#include "Security/Common/sec_lib.h" -#include "net_nvm_api.h" -#include "Security/PANA/pana_nvm.h" -#include "Security/PANA/pana.h" -#include "Security/PANA/pana_internal_api.h" -#include "common_functions.h" - -sec_suite_t *sec_suite_tls_session_get_by_socket_address(sockaddr_t *add, uint8_t request_by_server, int8_t socket_id) -{ - return NULL; -} - -int8_t sec_suite_set_chipher_suite_list(int8_t socket_id, uint8_t security_suites) -{ - return -1; -} diff --git a/test/coap-service/unittest/stub/shalib_stub.c b/test/coap-service/unittest/stub/shalib_stub.c deleted file mode 100644 index 7aa1b9e39a..0000000000 --- a/test/coap-service/unittest/stub/shalib_stub.c +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright (c) 2015 ARM Limited. All rights reserved. - */ - -#include -#include "shalib.h" - -void SHALIB_init_sha256(void) -{ - -} - -void SHALIB_push_data_sha256(uint8_t *data, uint16_t len) -{ - -} - -void SHALIB_finish_sha256(uint8_t *buffer, uint8_t len) -{ - -} - -void SHALIB_SHA256_HASH(uint8_t *data_ptr, uint16_t data_len, uint8_t *buffer) -{ - -} - - -void sha_resume_regs(sha256_temp_t *ptr) -{ - -} - -void sha_save_regs(sha256_temp_t *ptr) -{ - -} - -void SHALIB_init_HMAC(uint8_t *secret, uint8_t sec_len) -{ - -} - -void SHALIB_finish_HMAC(uint8_t *buffer, uint8_t len) -{ - -} - -prf_sec_param_t *shalib_prf_param_get(void) -{ - return NULL; -} - -void shalib_prf_calc(void) -{ - -} - diff --git a/test/coap-service/unittest/stub/socket_stub.c b/test/coap-service/unittest/stub/socket_stub.c deleted file mode 100644 index f67c261bde..0000000000 --- a/test/coap-service/unittest/stub/socket_stub.c +++ /dev/null @@ -1,93 +0,0 @@ -/* - * Copyright (c) 2015 ARM Limited. All rights reserved. - */ -#include -#include -#include "socket.h" -#include "ns_error_types.h" -#include "buffer.h" -#include "socket.h" -#include "sec_lib_definitions.h" -#include "tcp.h" -#include "socket_stub.h" - -NS_LARGE socket_t socket_instance[SOCKETS_MAX] = {0}; -socket_stub_data_t socket_stub_data = { - 0, // socket_id - eOK // err code -}; - -inet_pcb_t inet_pcb[SOCKETS_MAX]; - -static buffer_t stub_socket_buffer = {0}; - -socket_stub_data_t *socket_stub_get_test_data(void) -{ - socket_stub_clear_sockets(); - socket_stub_data.socket_id = 0; - socket_stub_data.err = eOK; - return &socket_stub_data; -} - -void socket_stub_clear_sockets() -{ - int i; - for (i = 0; i < SOCKETS_MAX; i++) { - memset(&socket_instance[i], 0, sizeof(socket_t)); - memset(&inet_pcb[i], 0, sizeof(inet_pcb_t)); - } -} - -void socket_init(void) -{ -} - -error_t socket_release(int8_t sid) -{ - return socket_stub_data.err; -} - -error_t socket_port_validate(uint16_t port, uint8_t socket_type) -{ - return socket_stub_data.err; -} - -error_t socket_create(int8_t *sid, uint16_t port, uint8_t type, void (*passed_fptr)(void *), uint8_t buffer_type) -{ - if (eOK == socket_stub_data.err) { - *sid = socket_stub_data.socket_id; - socket_instance[socket_stub_data.socket_id].type = type; - socket_instance[socket_stub_data.socket_id].fptr = passed_fptr; - socket_instance[socket_stub_data.socket_id].inet_pcb = &inet_pcb[socket_stub_data.socket_id]; - } - return socket_stub_data.err; -} - -int8_t socket_buffer_sendto(int8_t sid, buffer_t *buf) -{ - return 0; -} - -buffer_t *socket_buffer_read(int8_t sid) -{ - return &stub_socket_buffer; -} - -void *socket_event_session_read(int8_t sid) -{ - return NULL; -} - -void socket_set_buffer_hop_limit(int8_t sid, buffer_t *buf) -{ -} - -struct protocol_interface_info_entry *socket_interface_determine(int8_t socket_id, buffer_t *buf) { - return NULL; -} - -buffer_t *socket_tx_buffer_check(buffer_t *buf, uint8_t status) -{ - return NULL; -} - diff --git a/test/coap-service/unittest/stub/socket_stub.h b/test/coap-service/unittest/stub/socket_stub.h deleted file mode 100644 index f5ce0e2b36..0000000000 --- a/test/coap-service/unittest/stub/socket_stub.h +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright (c) 2015 ARM Limited. All rights reserved. - */ -#ifndef __SOCKET_STUB_H__ -#define __SOCKET_STUB_H__ - -#ifdef __cplusplus -extern "C" { -#endif - -#include "stdint.h" - -typedef struct { - uint8_t socket_id; // socket id returned when socket created - error_t err; // socket error returned by the socket call -} socket_stub_data_t; - -socket_stub_data_t *socket_stub_get_test_data(void); - -#ifdef __cplusplus -} -#endif - -#endif //__SOCKET_STUB_H__ diff --git a/test/coap-service/unittest/stub/system_timer_stub.c b/test/coap-service/unittest/stub/system_timer_stub.c index 2cb47185d9..e3bccd921b 100644 --- a/test/coap-service/unittest/stub/system_timer_stub.c +++ b/test/coap-service/unittest/stub/system_timer_stub.c @@ -4,7 +4,6 @@ #include "ns_types.h" #include "timer_sys.h" #include "platform/arm_hal_interrupt.h" -#include "platform/ns_debug.h" #include "ns_timer.h" #include "nsdynmemLIB.h" #include "eventOS_event.h" diff --git a/test/coap-service/unittest/stub/tcp_stub.c b/test/coap-service/unittest/stub/tcp_stub.c deleted file mode 100644 index 7b29a331a6..0000000000 --- a/test/coap-service/unittest/stub/tcp_stub.c +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright (c) 2015 ARM Limited. All rights reserved. - */ -#include -#include -#include "net_interface.h" -#include "buffer.h" -#include "sec_lib_definitions.h" -#include "tcp.h" - -static tcp_session_t stub_tcp_session; - -void tcp_segment_init(tcp_session_t *tcp_info, buffer_t *buf) -{ -} - -tcp_error tcp_close(tcp_session_t *tcp_session, uint8_t close_tls) -{ - return TCP_ERROR_NO_ERROR; -} - -tcp_session_t *tcp_session_ptr_allocate(uint8_t socket_id) -{ - - return &stub_tcp_session; -} - -tcp_session_t *tcp_session_ptr_get(sockaddr_t *addr_ptr, uint8_t socket_id) -{ - return &stub_tcp_session; -} - -int8_t tcp_session_removed(tcp_session_t *cur) -{ - return 0; -} - -tcp_error tcp_socket_connect(tcp_session_t *tcp_session, sockaddr_t *dst_addr) -{ - return TCP_ERROR_NO_ERROR; -} - -int8_t tcp_socket_tx_check(tcp_session_t *tcp_info) -{ - return 0; -} - -buffer_t *tcp_tls_encrypt(buffer_t *buf, uint8_t socket_id) -{ - return NULL; -} - -tcp_error tcp_socket_close(tcp_session_t *tcp_session) { - return TCP_ERROR_NO_ERROR; -} - diff --git a/test/coap-service/unittest/stub/thread_beacon_stub.c b/test/coap-service/unittest/stub/thread_beacon_stub.c deleted file mode 100644 index 374e479a3c..0000000000 --- a/test/coap-service/unittest/stub/thread_beacon_stub.c +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright (c) 2015 ARM. All rights reserved. - */ - -#include "config.h" - -#include "thread_beacon.h" -#include "thread_config.h" -#include "common_functions.h" -#include "thread_meshcop_lib.h" -#include -#include "ns_trace.h" -/*service lib includes */ -#include "Service_Libs/utils/crc.h" -#define TRACE_GROUP "Tbcn" - -#define THREAD_BEACON_VERSION_SHIFT 4 -#define THREAD_BEACON_JOINING_PERMITTED_BIT 0x01 -#define THREAD_BEACON_NATIVE_COMMISSIONER_BIT 0x08 - -int thread_beacon_get_protocol(uint8_t *data_ptr, uint8_t data_len) -{ - return 0; -} -int thread_beacon_get_protocol_version(uint8_t *data_ptr, uint8_t data_len) -{ - return 0; -} -uint16_t thread_beacon_get_joiner_port(uint8_t *data_ptr, uint8_t data_len) -{ - return 0; -} - -uint16_t thread_beacon_get_commissioning_port(uint8_t *data_ptr, uint8_t data_len) -{ - return 0; -} -bool thread_beacon_native_commissioning_allowed(uint8_t *data_ptr, uint8_t data_len) -{ - return false; -} -bool thread_beacon_joining_permitted(uint8_t *data_ptr, uint8_t data_len) -{ - return false; -} - -int thread_beacon_get_name(uint8_t *data_ptr, uint8_t data_len, uint8_t *result_ptr) -{ - return 16; -} -int thread_beacon_get_xpanid(uint8_t *data_ptr, uint8_t data_len, uint8_t *result_ptr) -{ - return 8; -} -uint8_t *thread_beacon_get_steering_data(uint8_t *data_ptr, uint8_t data_len,uint8_t *result_length) -{ - return NULL; -} - - -uint8_t *thread_beacon_calculate_bloom_filter(uint8_t *bloom_filter_ptr,uint8_t bloom_filter_length, uint8_t *joiner_id_ptr, int joiner_id_length) -{ - return NULL; -} - diff --git a/test/coap-service/unittest/stub/thread_bootstrap_stub.c b/test/coap-service/unittest/stub/thread_bootstrap_stub.c deleted file mode 100644 index 0d9ea54bea..0000000000 --- a/test/coap-service/unittest/stub/thread_bootstrap_stub.c +++ /dev/null @@ -1,248 +0,0 @@ -/* - * Copyright (c) 2014-2015 ARM Limited. All rights reserved. - */ - -/* - * \file thread_bootstrap.c - * \brief Add short description about this file!!! - * - */ -#include "config.h" -#include -#include -#include -#include "eventOS_event.h" -#include "eventOS_event_timer.h" -#include "randLIB.h" -#include "common_functions.h" -#include "NWK_INTERFACE/Include/protocol.h" -#include "net_thread_test.h" -#include "libDHCPv6/libDHCPv6.h" -#include "libDHCPv6/libDHCPv6_server.h" -#include "ns_trace.h" -#include "6LoWPAN/Bootstraps/protocol_6lowpan.h" -#include "6LoWPAN/Thread/thread.h" -#include "6LoWPAN/Thread/thread_routing.h" -#include "6LoWPAN/Thread/thread_nd.h" -#include "6LoWPAN/Thread/thread_bootstrap.h" -#include "6LoWPAN/Thread/thread_routerid_server.h" -#include "6LoWPAN/Thread/thread_management_internal.h" -#include "6LoWPAN/Thread/thread_dynamic_reed.h" -#include "6LoWPAN/Thread/thread_joiner_application.h" -#include "MAC/IEEE802_15_4/mac_data_interface.h" -#include "MAC/IEEE802_15_4/mac_security_interface.h" -#include "MAC/IEEE802_15_4/mac_data_poll.h" -#include "MAC/IEEE802_15_4/mac_mlme.h" -#include "thread_management_if.h" -#include "Common_Protocols/ipv6.h" -#include "Common_Protocols/icmpv6.h" -#include "Common_Protocols/icmpv6_radv.h" -#include "MLE/mle.h" -#include "dhcp_service_api.h" -#include "thread_dhcpv6_client.h" - - -#define TRACE_GROUP "thbs" - -void threa_ula_address_generate_and_push_to_stack(protocol_interface_info_entry_t *cur); -int thread_bootstrap_reset(protocol_interface_info_entry_t *cur); -static void thread_mle_challenge_trig(int8_t interface_id, uint8_t *LinkId); - -void thread_bootstrap_attached_active_router(protocol_interface_info_entry_t *cur); -void thread_attach_router_id_request(protocol_interface_info_entry_t *cur); -void thread_bootstrap_attached_finish(protocol_interface_info_entry_t *cur); -void thread_bootstrap_child_id_handler(protocol_interface_info_entry_t *cur); -void thread_attach_router_id_release_done(protocol_interface_info_entry_t *cur); -void thread_attach_router_id_release(protocol_interface_info_entry_t *cur); - -int8_t nwk_thread_host_control(protocol_interface_info_entry_t *cur, net_host_mode_t mode) -{ - return 0; -} - -int thread_link_configuration_activate(protocol_interface_info_entry_t *cur, link_configuration_s *linkConfiguration) -{ - return 0; -} - -void thread_interface_init(protocol_interface_info_entry_t *cur) -{ -} - -void thread_tasklet(arm_event_s *event) -{ -} - -int thread_bootstrap_tasklet_init(protocol_interface_info_entry_t *cur) -{ - return 0; -} - -void thread_clean_old_16_bit_address_based_addresses(protocol_interface_info_entry_t *cur) -{ -} - - -void thread_bootstrap_ready(protocol_interface_info_entry_t *cur) -{ -} - -int thread_leader_configure_init(protocol_interface_info_entry_t *cur) -{ - return 0; -} - -int thread_bootstrap_attach_start(int8_t nwk_interface_id, thread_bootsrap_state_type_e state) -{ - return 0; -} - -void thread_bootstrap_leader_data_free(thread_info_t *thread_info, int8_t bootstrap) -{ -} - -void thread_bootsrap_generate_thread_partitition(int8_t interface_id, bool newPartition) -{ -} - -void thread_bootstrap_generate_leader_and_link(int8_t interface_id) -{ -} - -void thread_bootstrap_connection_error(int8_t interface_id, nwk_connect_error_types errorType, uint8_t *LinkId) -{ -} - -void thread_bootsrap_router_id_cb(int8_t interface_id, uint8_t *ml16_address, uint8_t router_id, const uint8_t *router_mask_ptr) -{ -} - -void thread_interface_up(protocol_interface_info_entry_t *cur) -{ -} - -int thread_bootstrap_reset(protocol_interface_info_entry_t *cur) -{ - return 0; -} - -void thread_network_attach_start(protocol_interface_info_entry_t *cur) -{ -} - -void threa_ula_address_generate_and_push_to_stack(protocol_interface_info_entry_t *cur) -{ -} - -void thread_bootstrap_attached_ready(protocol_interface_info_entry_t *cur) -{ -} - -void thread_bootstrap_attached_downgrade_router(protocol_interface_info_entry_t *cur) -{ -} - -void thread_bootstrap_attched_upgrade_reed(protocol_interface_info_entry_t *cur) -{ -} - -void thread_bootstrap_attched_active_router(protocol_interface_info_entry_t *cur) -{ -} - -void thread_bootstrap_router_id_release_ready(protocol_interface_info_entry_t *cur) -{ -} - -void thread_bootstrap_router_id_get_fail(protocol_interface_info_entry_t *cur) -{ -} - -int8_t thread_bootstrap_child_id_request(protocol_interface_info_entry_t *cur) -{ - return 0; -} - -void thread_bootstrap_child_id_handler(protocol_interface_info_entry_t *cur) -{ -} - -void thread_bootstrap_attached_active_router(protocol_interface_info_entry_t *cur) -{ -} - -void thread_bootstrap_attached_finish(protocol_interface_info_entry_t *cur) -{ -} - -void thread_attach_router_id_release(protocol_interface_info_entry_t *cur) -{ -} - - -void thread_attach_router_id_release_done(protocol_interface_info_entry_t *cur) -{ -} - -void thread_attach_router_id_request(protocol_interface_info_entry_t *cur) -{ -} - -bool thread_bootstrap_trig_reed_upgrade(protocol_interface_info_entry_t *cur) -{ - return false; -} - -bool thread_bootstrap_trig_router_downgrade(protocol_interface_info_entry_t *cur) -{ - return false; -} - -void thread_parent_scan(protocol_interface_info_entry_t *cur) -{ -} - -int thread_set_link_for_commission(protocol_interface_info_entry_t *interface, nwk_pan_descriptor_t *best) -{ - return 0; -} - -void thread_mac_active_scan_response(uint8_t *data) -{ -} - -void thread_bootstrap_state_machine(protocol_interface_info_entry_t *cur) -{ -} - -void thread_bootstrap_stop(protocol_interface_info_entry_t *cur) -{ -} - -void thread_bootstrap_address_register(protocol_interface_info_entry_t *cur) -{ -} - -void thread_bootstrap_child_update_trig(protocol_interface_info_entry_t *cur) -{ -} - -void thread_bootstrap_global_leader_data(thread_info_t *thread_info) -{ - -} - -bool thread_tlv_request(int8_t interface_id, uint8_t *address, uint8_t *req_tlv, uint8_t req_len) -{ - return false; -} - -int thread_router_mle_advertise(struct protocol_interface_info_entry *cur) -{ - return 0; -} - -uint8_t *thread_leader_data_tlv_write(uint8_t *ptr, struct thread_leader_data_s *leader_data) -{ - return NULL; -} diff --git a/test/coap-service/unittest/stub/thread_commissioning_if_stub.c b/test/coap-service/unittest/stub/thread_commissioning_if_stub.c deleted file mode 100644 index b89aedd1d3..0000000000 --- a/test/coap-service/unittest/stub/thread_commissioning_if_stub.c +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright (c) 2014-2015 ARM Limited. All rights reserved. - */ -#include "ns_types.h" -#include -#include -#include -#include -#include "ns_trace.h" -#include "Core/include/buffer.h" -#include "common_functions.h" -#include "NWK_INTERFACE/Include/protocol.h" -#include "6LoWPAN/Thread/thread.h" -#include "6LoWPAN/Thread/thread_management_internal.h" -#include "6LoWPAN/Thread/thread_joiner_application.h" -#include "MAC/IEEE802_15_4/mac_pairwise_key.h" -#include "MAC/IEEE802_15_4/mac_security_interface.h" - -#include "net_interface.h" // TODO remove when fixing properly -#include "thread_commissioning_if.h" -#include "randLIB.h" - -#define TRACE_GROUP "thrC" - -int thread_commissioning_if_steering_data_set(int8_t interface_id, uint8_t *buf_ptr, uint16_t length) -{ - return 0; -} - -int thread_commissioning_if_register(int8_t interface_id, uint8_t border_router_address[static 16], uint8_t *commissioner_id_ptr, uint16_t commissioner_id_len, uint16_t *session_id) -{ - return 0; -} - -bool thread_commissioning_if_session_refresh(int8_t interface_id, uint16_t session_id) -{ - return true; -} - -int thread_commissioning_if_pairwise_key_add(int8_t interface_id, uint32_t valid_life_time, uint8_t eui64[8], uint8_t key[16]) -{ - return 0; -} - -int thread_commissioning_if_pairwise_key_delete_all(int8_t interface_id) -{ - return 0; -} - -int thread_commissioning_if_border_router_locator_get(int8_t interface_id, uint8_t *address_ptr) -{ - return 0; -} - -int thread_commissioning_if_enable_security(int8_t interface_id) -{ - return 0; -} - -char* thread_commissioning_if_commissioner_id_get(int8_t interface_id) -{ - return NULL; -} -bool thread_commissioning_if_unregister(int8_t interface_id, uint16_t session_id) -{ - return true; -} diff --git a/test/coap-service/unittest/stub/thread_dhcpv6_client_stub.c b/test/coap-service/unittest/stub/thread_dhcpv6_client_stub.c deleted file mode 100644 index c0c0d26a8b..0000000000 --- a/test/coap-service/unittest/stub/thread_dhcpv6_client_stub.c +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright (c) 2013-2015 ARM Limited. All rights reserved. - */ - -#include -#include -#include -#include "nsdynmemLIB.h" -#include "ns_list.h" -#include "common_functions.h" - - -#include "dhcp_service_api.h" -#include "thread_dhcpv6_client.h" -#include "libDHCPv6/libDHCPv6.h" -#include "NWK_INTERFACE/Include/protocol.h" -#include "6LoWPAN/Thread/thread.h" -#include "6LoWPAN/Thread/thread_bootstrap.h" - - -typedef struct { - thread_dhcp_client_global_adress_cb *global_address_cb; - uint16_t service_instance; - uint8_t libDhcp_instance; - int8_t interface; -} thread_dhcp_client_class_t; - -thread_dhcp_client_class_t dhcp_client; - -extern uint8_t *dhcpv6_vendor_code_parse_thread_router_id(uint8_t *ptr, uint16_t data_length); -void thread_dhcpv6_client_set_address(int8_t interface_id, dhcpv6_client_server_data_t *srv_data_ptr); - - -void thread_dhcp_client_init(int8_t interface) -{ -} - -void thread_dhcp_client_delete(int8_t interface) -{ -} - -void thread_dhcpv6_client_send_error_cb(dhcpv6_client_server_data_t *srv_data_ptr) -{ -} - - -/* solication responce received for either global address or routter id assignment */ -int dhcp_solicit_resp_cb(uint16_t instance_id, void *ptr, uint8_t msg_name, uint8_t *msg_ptr, uint16_t msg_len) -{ - return 0; -} - -int thread_dhcp_client_get_global_address(int8_t interface, uint8_t dhcp_addr[__static 16], uint8_t prefix[__static 16], uint8_t mac64[__static 8], thread_dhcp_client_global_adress_cb *error_cb) -{ - return 0; -} - -void thread_dhcp_client_global_address_renew(int8_t interface) -{ -} - -void thread_dhcp_client_global_address_delete(int8_t interface, uint8_t dhcp_addr[static 16], uint8_t prefix[static 16]) -{ -} - -void thread_dhcpv6_renew(protocol_interface_info_entry_t *interface, if_address_entry_t *addr, if_address_callback_t reason) -{ -} - -void thread_dhcpv6_client_set_address(int8_t interface_id, dhcpv6_client_server_data_t *srv_data_ptr) -{ -} - -uint8_t *dhcpv6_vendor_code_parse_thread_router_id(uint8_t *ptr, uint16_t data_length) -{ - return NULL; -} diff --git a/test/coap-service/unittest/stub/thread_dynamic_reed_stub.c b/test/coap-service/unittest/stub/thread_dynamic_reed_stub.c deleted file mode 100644 index 7b18368432..0000000000 --- a/test/coap-service/unittest/stub/thread_dynamic_reed_stub.c +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright (c) 2015 ARM Limited. All rights reserved. - */ - -/* - * \file thread_dynamic_reed.c - * - */ -#include "config.h" -#include "string.h" -#include "ns_types.h" -#include "ns_trace.h" -#include "6LoWPAN/Thread/thread_dynamic_reed.h" - -bool thread_dynamic_reed_upgrade(uint8_t activeRouterCnt, uint8_t routerUpgradeThreshold) -{ - return false; -} - -bool thread_dynamic_reed_downgrade(uint8_t childCount, uint8_t goodLinkCount, uint8_t activeRouterCnt, bool possibleDefaultRouter, uint8_t routerDowngradeThreshold, uint8_t minNeighborsThreshold) -{ - return false; -} - -void thread_dynamic_reed_initialize(thread_router_select_t *routerSelect) -{ -} - -uint32_t thread_dynamic_reed_timeout_calculate(thread_router_select_t *routerSelect) -{ - return 0; -} diff --git a/test/coap-service/unittest/stub/thread_host_bootstrap_stub.c b/test/coap-service/unittest/stub/thread_host_bootstrap_stub.c deleted file mode 100644 index ae639a379f..0000000000 --- a/test/coap-service/unittest/stub/thread_host_bootstrap_stub.c +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Copyright (c) 2015 ARM Limited. All rights reserved. - */ - -/* - * \file thread_host_bootstrap.c - * \brief Add short description about this file!!! - * - */ - -#include "config.h" -#include -#include -#include -#include "eventOS_event.h" -#include "eventOS_event_timer.h" -#include "randLIB.h" -#include "shalib.h" -#include "common_functions.h" -#include "NWK_INTERFACE/Include/protocol.h" -#include "net_thread_test.h" -#include "ns_trace.h" -#include "6LoWPAN/Bootstraps/protocol_6lowpan.h" -#include "6LoWPAN/Thread/thread.h" -#include "6LoWPAN/Thread/thread_routing.h" -#include "6LoWPAN/Thread/thread_nd.h" -#include "6LoWPAN/Thread/thread_bootstrap.h" -#include "6LoWPAN/Thread/thread_host_bootstrap.h" -#include "6LoWPAN/Thread/thread_management_internal.h" -#include "6LoWPAN/Thread/thread_network_synch.h" -#include "6LoWPAN/Thread/thread_joiner_application.h" -#include "6LoWPAN/Thread/thread_management_internal.h" -#include "6LoWPAN/Thread/thread_management_client.h" -#include "6LoWPAN/Thread/thread_network_data_lib.h" -#include "MAC/IEEE802_15_4/mac_data_interface.h" -#include "MAC/IEEE802_15_4/mac_data_poll.h" -#include "MAC/IEEE802_15_4/mac_security_interface.h" -#include "MAC/IEEE802_15_4/mac_data_poll.h" -#include "MAC/IEEE802_15_4/mac_mlme.h" -#include "thread_management_if.h" -#include "Common_Protocols/ipv6.h" -#include "MLE/mle.h" -#include "MLE/mle_tlv.h" -#include "thread_config.h" -#include "Service_Libs/mle_service/mle_service_api.h" - -#define TRACE_GROUP "tebs" - - - -void thread_child_set_default_route(protocol_interface_info_entry_t *cur) -{ - -} - -void thread_network_attach_start(protocol_interface_info_entry_t *cur) -{ - -} - - -void thread_bootstrap_end_device_synch_finish(protocol_interface_info_entry_t *cur) -{ - -} - - -void thread_mle_parent_discover_receive_cb(int8_t interface_id, mle_message_t *mle_msg, mac_aux_security_header_t *security_headers) -{ - -} - -void thread_mle_connected_host_receive_cb(int8_t interface_id, mle_message_t *mle_msg, mac_aux_security_header_t *security_headers) -{ - -} - - -void thread_endevice_synch_start(protocol_interface_info_entry_t *cur) -{ -} - -int8_t thread_bootstrap_child_update(protocol_interface_info_entry_t *cur) -{ - return 0; -} - diff --git a/test/coap-service/unittest/stub/thread_joiner_application_stub.c b/test/coap-service/unittest/stub/thread_joiner_application_stub.c deleted file mode 100644 index 4e122a3c11..0000000000 --- a/test/coap-service/unittest/stub/thread_joiner_application_stub.c +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright (c) 2014-2015 ARM Limited. All rights reserved. - */ - - -#include -#include "ns_list.h" -#include "ns_trace.h" -#include "nsdynmemLIB.h" -#include "common_functions.h" -#include "thread_tmfcop_lib.h" -#include "shalib.h" - -#include "thread_management_if.h" -#include "thread_config.h" -#include "thread_meshcop_lib.h" -#include "thread_commissioning_if.h" -#include "thread_joiner_application.h" - -#define TRACE_GROUP TRACE_GROUP_THREAD_JOINER_APPLICATION - -link_configuration_s *link_configuration_create(void) -{ - return NULL; -} - -void link_configuration_delete(link_configuration_s *this) -{ -} - -void link_configuration_copy(link_configuration_s *this, link_configuration_s *configuration_ptr) -{ -} - -int thread_joiner_application_init(int8_t interface_id, device_configuration_s *device_configuration_ptr, struct link_configuration *static_configuration_ptr) -{ - return 0; -} - -void thread_joiner_application_deinit(int8_t interface_id) -{ -} - -link_configuration_s *thread_joiner_application_get_config(int8_t interface_id) -{ - return NULL; -} - -int joiner_application_security_done_cb(int8_t service_id, uint8_t IID[8], uint8_t keyblock[40]) -{ - return 0; -} - -int thread_joiner_application_finalisation_cb(int8_t service_id, uint16_t msg_id, sn_coap_hdr_s *response_ptr) -{ - return 0; -} - -int thread_joiner_application_commission_start(int8_t interface_id, uint8_t parent_address[16], uint16_t port, uint16_t panid, uint8_t xpanid[8], uint8_t channel, thread_joiner_application_commission_done_cb *done_cb) -{ - return 0; -} - diff --git a/test/coap-service/unittest/stub/thread_management_api_stub.c b/test/coap-service/unittest/stub/thread_management_api_stub.c deleted file mode 100644 index 87800d801a..0000000000 --- a/test/coap-service/unittest/stub/thread_management_api_stub.c +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright (c) 2015 ARM Limited. All rights reserved. - */ - -#include -#include "thread_management_api.h" -#include "ns_types.h" -#include "sn_coap_header.h" - -int thread_management_recv_set_response_cb(int8_t service_id, uint16_t msg_id, sn_coap_hdr_s *response_ptr) -{ - return 0; -} - -int thread_management_recv_get_response_cb(int8_t service_id, uint16_t msg_id, sn_coap_hdr_s *response_ptr) -{ - return 0; -} - -int thread_management_register(int8_t interface_id) -{ - return 0; -} - -int thread_management_unregister(int8_t interface_id) -{ - return 0; -} - -int thread_management_set_security_policy(int8_t interface_id, uint8_t options, uint16_t rotation_time, management_set_response_cb *cb_ptr) -{ - return 0; -} - -int thread_management_set_steering_data(int8_t interface_id, uint8_t *steering_data_ptr, uint8_t steering_data_len, management_set_response_cb *cb_ptr) -{ - return 0; -} - -int thread_management_set_commissioning_data_timestamp(int8_t interface_id, uint64_t time, management_set_response_cb *cb_ptr) -{ - return 0; -} - -int thread_management_get(int8_t instance_id, uint8_t *fields_ptr, uint8_t fields_count, uint8_t dst_addr[static 16], management_get_response_cb *cb_ptr) -{ - return 0; -} diff --git a/test/coap-service/unittest/stub/thread_management_client_stub.c b/test/coap-service/unittest/stub/thread_management_client_stub.c deleted file mode 100644 index be78b503ec..0000000000 --- a/test/coap-service/unittest/stub/thread_management_client_stub.c +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright (c) 2014-2015 ARM Limited. All rights reserved. - */ - - -#include -#include "ns_list.h" -#include "ns_trace.h" -#include "nsdynmemLIB.h" -#include "thread_tmfcop_lib.h" - -#include "thread_config.h" -#include "thread_management_if.h" -#include "6LoWPAN/Thread/thread_management_client.h" - -#define TRACE_GROUP TRACE_GROUP_THREAD_MANAGEMENT_CLIENT - -typedef struct thread_management { - thread_management_client_router_id_cb *router_id_cb_ptr; - thread_management_client_network_data_set_cb *network_data_set_cb_ptr; - int8_t interface_id; - int8_t coap_service_id; - ns_list_link_t link; -} thread_management_t; - - -void thread_management_client_init(int8_t interface_id) -{ -} - -void thread_management_client_delete(int8_t interface_id) -{ -} - -int thread_management_client_router_id_get(int8_t interface_id, uint8_t mac[8], uint16_t router_id, thread_management_client_router_id_cb *id_cb) -{ - return 0; -} - -int thread_management_client_router_id_release(int8_t interface_id, uint8_t mac[8], uint16_t router_id, thread_management_client_router_id_cb *id_cb) -{ - return 0; -} - -int thread_management_client_network_data_register(int8_t interface_id, uint8_t *data_ptr, uint16_t data_len, thread_management_client_network_data_set_cb *set_cb) -{ - return 0; -} - -int8_t thread_management_query_network_parameters(int8_t interface_id, uint8_t *dst_address) -{ - return 0; -} - -int8_t thread_management_send_set_network_parameters(int8_t interface_id) -{ - return 0; -} - diff --git a/test/coap-service/unittest/stub/thread_management_if_stub.c b/test/coap-service/unittest/stub/thread_management_if_stub.c deleted file mode 100644 index c328ec49d4..0000000000 --- a/test/coap-service/unittest/stub/thread_management_if_stub.c +++ /dev/null @@ -1,305 +0,0 @@ -/* - * Copyright (c) 2014-2015 ARM Limited. All rights reserved. - */ -#include -#include -#include "ns_types.h" -#include -//#include "eventOS_event.h" -#include -#include -#include "ns_trace.h" -#include "Core/include/buffer.h" -#include "common_functions.h" -#include "NWK_INTERFACE/Include/protocol.h" -#include "6LoWPAN/Thread/thread.h" -#include "6LoWPAN/Thread/thread_bootstrap.h" -#include "6LoWPAN/Thread/thread_routing.h" -#include "6LoWPAN/Thread/thread_network_data_lib.h" -#include "6LoWPAN/Thread/thread_network_data_storage.h" -#include "6LoWPAN/Thread/thread_nd.h" -#include "6LoWPAN/Thread/thread_dhcpv6_client.h" -#include "6LoWPAN/Thread/thread_routerid_server.h" -#include "6LoWPAN/Thread/thread_management_internal.h" -#include "6LoWPAN/Thread/thread_joiner_application.h" -#include "MLE/mle.h" -#include "thread_management_if.h" -//#include "thread_tmf_data_if.h" -#include "thread_commissioning_if.h" -#include "shalib.h" -#include "Common_Protocols/icmpv6.h" -#include "libDHCPv6/libDHCPv6.h" -#include "libDHCPv6/libDHCPv6_server.h" -#include "DHCPv6_Server/DHCPv6_server_service.h" -#include "MAC/IEEE802_15_4/mac_security_interface.h" - -void arm_thread_private_ula_prefix_set(protocol_interface_info_entry_t *cur, const uint8_t *ula_prefix) -{ -} - -int thread_tmf_service_commision_request(int8_t commissioning_handler_id, int8_t interfaceId, uint8_t *parentLLAddressPtr) -{ - return 0; -} - -int thread_tmf_service_commision_relay_control(int8_t interfaceId, int8_t commissioning_handler_id, uint8_t *borderRouterLocator, bool enableService) -{ - return 0; -} - -int thread_management_router_select_threshold_values_set( - int8_t interface_id, - uint8_t upGradeThreshold, - uint8_t downGradeThreshold) -{ - return 0; -} - -int thread_management_node_init( - int8_t interface_id, - channel_list_s *channel_list, - device_configuration_s *device_configuration, - link_configuration_s *static_configuration) -{ - return 0; -} - - -int thread_management_get_ml16_address(int8_t interface_id, uint8_t *address_ptr) -{ - return 0; -} - -int thread_management_get_ml_prefix(int8_t interface_id, uint8_t *prefix_ptr) -{ - return 0; -} - -int thread_management_get_ml_prefix_112(int8_t interface_id, uint8_t *prefix_ptr) -{ - return 0; -} - -int thread_management_get_leader_address(int8_t interface_id, uint8_t *address_ptr) -{ - return 0; -} - -link_configuration_s *thread_management_configuration_get(int8_t interface_id) -{ - return NULL; -} - -int thread_management_security_material_set(int8_t nwk_interface_id, bool enableSecurity, uint8_t *thrMasterKey, uint32_t thrKeySequenceCounter, uint32_t thrKeyRotation) -{ - return 0; -} - -int thread_commision_data_handler(uint8_t *thrMasterKey, uint32_t thrKeySequenceCounter, uint32_t thrKeyRotation, uint8_t *meshLocalPrefix) -{ - return 0; -} - -int thread_management_commission_data_set(int8_t nwk_interface_id) -{ - return 0; -} - -int thread_management_joiner_attach_start(int8_t nwk_interface_id) -{ - return 0; -} - -uint8_t *thread_management_key_request(int8_t nwk_interface_id, uint8_t keyId, bool linkLayerKey) -{ - return NULL; -} - -uint8_t *thread_management_key_request_with_sequence(int8_t nwk_interface_id, uint8_t keyId, uint32_t keySequnce) -{ - return NULL; -} - -void thread_management_key_synch_req(int8_t nwk_interface_id, uint32_t keySequnce, bool acceptAnyCounter) -{ -} - -void thread_history_key_material_push(thread_info_t *thread_info, uint8_t *macKeyPtr, uint8_t *mleKeyPtr, uint8_t keyId) -{ -} - -void thread_security_trig_pending_key(protocol_interface_info_entry_t *cur) -{ -} - -void thread_security_next_key_generate(protocol_interface_info_entry_t *cur, uint8_t *masterKey, uint32_t keySequence) -{ -} - -int thread_management_increment_key_sequence_counter(int8_t nwk_interface_id) -{ - return 0; -} - -int thread_management_key_sequence_counter_update(int8_t nwk_interface_id, uint32_t thrKeySequenceCounter) -{ - return 0; -} - -int thread_management_add_route(int8_t interface_id, uint8_t *route_prefix_ptr, uint8_t prefix_length, bool stable_service) -{ - return 0; -} - -int thread_management_del_route(int8_t interface_id, uint8_t *route_prefix_ptr, uint8_t prefix_length) -{ - return 0; - -} - -int thread_management_add_dhcpv6_server(int8_t interface_id, uint8_t *prefix_ptr, uint8_t prefix_length, bool stable_service) -{ - return 0; -} - -int thread_management_del_dhcpv6_server(int8_t interface_id, uint8_t *prefix_ptr, uint8_t prefix_length) -{ - return 0; -} - -int thread_management_add_contexts(int8_t interface_id, uint8_t *prefix_ptr, uint8_t prefix_length, uint8_t cid, bool compress_supported) -{ - return 0; -} - -int thread_management_read_leader_ula(int8_t interface_id, uint8_t *address_buffer) -{ - return 0; -} - -int thread_management_if_beacon_payload_generate(protocol_interface_info_entry_t *cur, const link_configuration_s *linkConfiguration) -{ - return 0; -} - -int thread_management_network_data_tlv_push(protocol_interface_info_entry_t *cur, uint8_t *data_pointer, uint8_t length) -{ - return 0; -} - -int thread_management_network_data_analyze_trig(protocol_interface_info_entry_t *cur) -{ - return 0; -} - -int thread_management_network_data_register(int8_t interface_id, uint8_t *network_data_ptr, uint8_t *network_data_length, uint16_t routerId) -{ - return 0; -} - -int thread_management_publish_local_services(int8_t interface_id) -{ - return 0; -} - -int thread_management_delete_local_services(int8_t interface_id) -{ - return 0; -} - -int thread_management_remove_router_by_id(int8_t interface_id, uint8_t routerId) -{ - return 0; -} - -int thread_management_print_network_data(int8_t interface_id) -{ - return 0; -} - -int thread_on_mesh_slaac_server_add(int8_t interface_id, uint8_t *prefix_ptr, uint8_t prefix_length, bool stableData) -{ - return 0; -} - -int thread_on_mesh_slaac_delete(int8_t interface_id, uint8_t *prefix_ptr, uint8_t prefix_length) -{ - return 0; -} - -int thread_dhcpv6_server_add(int8_t interface_id, uint8_t *prefix_ptr, uint32_t max_client_cnt, bool stableData) -{ - return 0; -} - -int thread_dhcpv6_server_set_lifetime(int8_t interface_id, uint8_t *prefix_ptr, uint32_t valid_lifetime) -{ - return 0; -} - -int thread_dhcpv6_server_set_max_client(int8_t interface_id, uint8_t *prefix_ptr, uint32_t max_client_count) -{ - return 0; -} - -int thread_dhcpv6_server_set_anonymous_addressing(int8_t interface_id, uint8_t *prefix_ptr, bool anonymous) -{ - return 0; -} - -int thread_dhcpv6_server_delete(int8_t interface_id, uint8_t *prefix_ptr) -{ - return 0; -} - -uint16_t thread_management_get_my_sht_addr(int8_t interface_id) -{ - return 0; -} - -int thread_management_get_my_iid16(int8_t interface_id, uint8_t *iidPtr) -{ - return 0; -} - -int thread_management_get_my_ml_prefix(int8_t interface_id, uint8_t *prefix) -{ - return 0; -} - -/* Get my mesh local prefix /112 */ -int thread_management_get_my_ml_prefix_112(int8_t interface_id, uint8_t *prefix) -{ - return 0; -} - -int thread_management_get_my_ml16(int8_t interface_id, uint8_t *addressPtr) -{ - return 0; -} - - -int thread_management_get_current_keysequence(int8_t interface_id, uint32_t *sequencePtr) -{ - return 0; -} - -int thread_management_native_commissioner_get_connection_info(int8_t interface_id, uint8_t *address_ptr, uint16_t *port, uint8_t *PSKc_ptr) -{ - return 0; -} - -void thread_key_get(uint8_t *key, uint8_t *key_material_buf, uint32_t key_sequence_counter) -{ - -} - -int thread_management_key_sets_calc(protocol_interface_info_entry_t *cur, link_configuration_s *linkConfiguration, uint32_t thrKeySequenceCounter) -{ - return 0; -} - -void thread_security_update_from_mac(protocol_interface_info_entry_t *cur) -{ - -} diff --git a/test/coap-service/unittest/stub/thread_management_server_stub.c b/test/coap-service/unittest/stub/thread_management_server_stub.c deleted file mode 100644 index 78b942420f..0000000000 --- a/test/coap-service/unittest/stub/thread_management_server_stub.c +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright (c) 2014-2015 ARM Limited. All rights reserved. - */ - - -#include "config.h" -#include -#include -#include -#include -#include "nsdynmemLIB.h" -#include "common_functions.h" -#include "6LoWPAN/Thread/thread_management_server.h" - -#define TRACE_GROUP "TMFs" - -#include "net_interface.h" -#include "socket_api.h" -#include "thread_config.h" -#include "thread_tmfcop_lib.h" -#include "thread_meshcop_lib.h" -#include "thread_management_if.h" -#include "thread_commissioning_if.h" -//#include "thread_tmf_data_if.h" - -int thread_management_server_init(int8_t interface_id) -{ - return 0; -} - -void thread_management_server_delete(int8_t interface_id) -{ -} - -int thread_management_server_leader_init(int8_t interface_id, thread_management_server_rid_assign_cb *assign_cb, thread_management_server_rid_release_cb *release_cb) -{ - return 0; -} - -void thread_management_server_leader_deinit(int8_t interface_id) -{ -} - -void joiner_router_recv_commission_msg(void *cb_res) -{ -} - -int thread_management_server_joiner_router_init(int8_t interface_id, uint16_t *joiner_port) -{ - return 0; -} - -void thread_management_server_joiner_router_deinit(int8_t interface_id) -{ -} diff --git a/test/coap-service/unittest/stub/thread_meshcop_lib_stub.c b/test/coap-service/unittest/stub/thread_meshcop_lib_stub.c deleted file mode 100644 index 853814e2a5..0000000000 --- a/test/coap-service/unittest/stub/thread_meshcop_lib_stub.c +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (c) 2015 ARM Limited. All rights reserved. - */ - -#include "thread_meshcop_lib.h" -#include "common_functions.h" -#include - -uint8_t *thread_meshcop_tlv_data_write(uint8_t *ptr, uint8_t type, uint16_t length, const uint8_t *data) -{ - return NULL; -} - -uint8_t *thread_meshcop_tlv_data_write_uint8(uint8_t *ptr, uint8_t type, uint8_t data) -{ - return NULL; -} - -uint8_t *thread_meshcop_tlv_data_write_uint16(uint8_t *ptr, uint8_t type, uint16_t data) -{ - return NULL; -} -uint8_t *thread_meshcop_tlv_data_write_uint32(uint8_t *ptr, uint8_t type, uint32_t data) -{ - return NULL; -} - -uint16_t thread_meshcop_tlv_find(const uint8_t *ptr, uint16_t length, uint8_t type, uint8_t **result_ptr) -{ - return 0; - -} - -uint8_t thread_meshcop_tlv_data_get_uint8(const uint8_t *ptr, uint16_t length, uint8_t type, uint8_t *data_ptr) -{ - return 0; -} - -uint8_t thread_meshcop_tlv_data_get_uint16(const uint8_t *ptr, uint16_t length, uint8_t type, uint16_t *data_ptr) -{ - return 0; -} - -uint8_t thread_meshcop_tlv_data_get_uint32(const uint8_t *ptr, uint16_t length, uint8_t type, uint32_t *data_ptr) -{ - return 0; -} diff --git a/test/coap-service/unittest/stub/thread_nd_stub.c b/test/coap-service/unittest/stub/thread_nd_stub.c deleted file mode 100644 index cdf674edfb..0000000000 --- a/test/coap-service/unittest/stub/thread_nd_stub.c +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Copyright (c) 2014-2015 ARM Limited. All rights reserved. - */ - -/* - * \file thread_nd.c - * \brief Add short description about this file!!! - * - */ - -#include "config.h" -#include -#include -#include -#include "eventOS_event.h" -#include "common_functions.h" -#include "socket_api.h" -#include "Core/include/socket.h" -#include "NWK_INTERFACE/Include/protocol.h" -#include "Common_Protocols/ipv6.h" -#include "6LoWPAN/Bootstraps/protocol_6lowpan.h" -#include "net_thread_test.h" -#include "libDHCPv6/libDHCPv6.h" -#include "randLIB.h" -#include "ns_trace.h" -#include "6LoWPAN/Thread/thread.h" -#include "6LoWPAN/Thread/thread_routing.h" -#include "6LoWPAN/Thread/thread_nd.h" -#include "6LoWPAN/Thread/thread_resolution_client.h" -#include "6LoWPAN/Thread/thread_resolution_server.h" -#include "Common_Protocols/icmpv6.h" -#include "MLE/mle.h" -#include "dhcp_service_api.h" - -#define TRACE_GROUP "thdn" - -static thread_resolution_server_addr_query_cb thread_nd_address_query_lookup; - -void thread_nd_service_delete(int8_t interfaceId) -{ -} - -int thread_nd_service_activate(int8_t interfaceId) -{ - return 0; -} - -int thread_nd_service_disable(int8_t interfaceId) -{ - return 0; -} - -bool thread_nd_ns_transmit(protocol_interface_info_entry_t *cur, ipv6_neighbour_t *entry, bool unicast, uint8_t seq) -{ - return false; -} - -void thread_nd_flush_neighbour_cache_for_short_addr(protocol_interface_info_entry_t *cur, uint16_t flushee, bool children) -{ -} - -buffer_t *thread_nd_snoop(protocol_interface_info_entry_t *cur, buffer_t *buf, const sockaddr_t *ll_src, bool *bounce) -{ - return NULL; -} - -buffer_t *thread_nd_special_forwarding(protocol_interface_info_entry_t *cur, buffer_t *buf, const sockaddr_t *ll_src, bool *bounce) -{ - return NULL; -} - -buffer_t *thread_nd_icmp_handler(protocol_interface_info_entry_t *cur, buffer_t *buf, bool *bounce) -{ - return NULL; -} - -int thread_nd_address_registration(protocol_interface_info_entry_t *cur, const uint8_t *ipv6Address, uint16_t mac16, uint16_t panId, const uint8_t *mac64) -{ - return 0; -} - -int thread_nd_map_anycast_address(protocol_interface_info_entry_t *cur, uint16_t *addr16) -{ - return -1; -} diff --git a/test/coap-service/unittest/stub/thread_network_data_lib_stub.c b/test/coap-service/unittest/stub/thread_network_data_lib_stub.c deleted file mode 100644 index af9431b4b2..0000000000 --- a/test/coap-service/unittest/stub/thread_network_data_lib_stub.c +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Copyright (c) 2014-2015 ARM Limited. All rights reserved. - */ -/* - * \file thread_network_data_lib.c - * \brief Add short description about this file!!! - * - */ -#include -#include -#include -#include "NWK_INTERFACE/Include/protocol.h" -#include "6LoWPAN/Thread/thread_network_data_lib.h" -#include "common_functions.h" -#include "ns_trace.h" - -#define TRACE_GROUP "tndl" - -uint8_t prefixBits_to_bytes(uint8_t prefixLenInBits) -{ - return 0; -} - -int thread_network_data_malformed_check(uint8_t *network_data_ptr, uint8_t network_data_length) -{ - return 0; -} - -int thread_network_data_sub_tlv_malformed_check(uint8_t *network_data_ptr, uint8_t network_data_length) -{ - return 0; -} - - -uint8_t *thread_nd_commission_data_write_steering_data(uint8_t *ptr, const uint8_t *steeringData, uint8_t length) -{ - return NULL; -} - -uint8_t *thread_nd_commission_data_write_commissioner_id(uint8_t *ptr, char *commissioner_id_ptr) -{ - return NULL; -} - -uint8_t *thread_nd_commission_data_write_security_policy(uint8_t *ptr, uint8_t policy) -{ - return NULL; -} - -uint8_t *thread_nd_commission_data_write_timestamp(uint8_t *ptr, uint8_t *timestamp, uint16_t tick) -{ - return NULL; -} - -uint8_t *thread_nd_commission_data_write_session_id(uint8_t *ptr, uint16_t id) -{ - return NULL; -} - -uint8_t *thread_nd_commission_data_write_network_name(uint8_t *ptr, uint8_t *name) -{ - return NULL; -} - -uint8_t *thread_nd_commission_data_write_border_router_locator(uint8_t *ptr, uint8_t *locatorML16) -{ - return NULL; -} - -uint8_t *thread_nd_commission_data_write_commissioning_credentials(uint8_t *ptr, char *crendentials, uint8_t length) -{ - return NULL; -} - -uint8_t *thread_nd_network_data_write_border_router_or_router_info(uint8_t *ptr, uint16_t routerId, uint8_t flags, bool reservedBytes) -{ - return NULL; -} - diff --git a/test/coap-service/unittest/stub/thread_network_data_storage_stub.c b/test/coap-service/unittest/stub/thread_network_data_storage_stub.c deleted file mode 100644 index 7bb9bab4bf..0000000000 --- a/test/coap-service/unittest/stub/thread_network_data_storage_stub.c +++ /dev/null @@ -1,287 +0,0 @@ -/* - * Copyright (c) 2014-2015 ARM Limited. All rights reserved. - */ - -/* - * \file thread_network_data_storage.c - * \brief Add short description about this file!!! - * - */ - -#include -#include -#include -#include "NWK_INTERFACE/Include/protocol.h" -#include "common_functions.h" -#include "ns_trace.h" -#include "ip6string.h" -#include "6LoWPAN/Thread/thread.h" -#include "6LoWPAN/Thread/thread_network_data_lib.h" -#include "6LoWPAN/Thread/thread_network_data_storage.h" -#include "6LoWPAN/Thread/thread_dhcpv6_client.h" -#include "libDHCPv6/libDHCPv6_server.h" -#include "DHCPv6_Server/DHCPv6_server_service.h" - -#define TRACE_GROUP "thrd" - -void thread_nd_network_data_print(thread_network_data_cache_entry_t *networkData, uint16_t routerId) -{ -} - -uint8_t thread_nd_server_external_route_list_size(thread_network_server_data_list_t *list, bool stable) -{ - return 0; -} - -uint8_t thread_nd_border_routerserver_list_size(thread_network_server_data_list_t *list, bool stable) -{ - return 0; -} - -uint8_t thread_nd_context_list_size(thread_data_context_list_t *list, bool stable) -{ - return 0; -} - -uint8_t *thread_nd_context_list_write(thread_data_context_list_t *list, uint8_t *dataPtr, bool stableData) -{ - return NULL; -} - -uint8_t *thread_nd_server_list_write(thread_network_server_data_list_t *list, uint8_t *dataPtr, uint8_t type, bool stable) -{ - return NULL; -} - -uint8_t thread_nd_prefix_based_on_list_entry_size(thread_network_service_entry_t *entry, bool fullList) -{ - return 0; -} - -int thread_nd_local_data_length_updated(thread_network_data_cache_entry_t *networkDataList) -{ - return 0; -} - - -thread_network_local_data_entry_t *thread_local_service_list_allocate(thread_prefix_tlv_t *prefixTlv) -{ - return NULL; -} - -thread_network_service_entry_t *thread_prefix_service_list_allocate(thread_prefix_tlv_t *prefixTlv) -{ - return NULL; -} - -thread_network_server_data_entry_t *thread_server_list_allocate(thread_border_router_tlv_entry_t *service) -{ - return NULL; -} - -thread_network_data_context_entry_t *thread_context_service_list_allocate(uint8_t contextLength, uint8_t cid, bool compersioEnabled) -{ - return NULL; -} - -int thread_nd_verify_contex_id_is_free(thread_network_data_cache_entry_t *list, uint8_t *prefixPtr, thread_network_local_data_context_entry_t *context) -{ - return 0; -} - -thread_network_local_data_entry_t *thread_get_local_prefix_entry(thread_network_local_data_list_t *list, thread_prefix_tlv_t *prefixTlv) -{ - return NULL; -} - -thread_network_local_data_entry_t *thread_get_local_prefix_list(thread_network_local_data_list_t *list, thread_prefix_tlv_t *prefixTlv) -{ - return NULL; -} - -thread_network_service_entry_t *thread_get_main_prefix_entry(thread_network_servive_list_t *list, thread_prefix_tlv_t *prefixTlv) -{ - return NULL; -} - -thread_network_service_entry_t *thread_get_main_prefix_list(thread_network_servive_list_t *list, thread_prefix_tlv_t *prefixTlv) -{ - return NULL; -} - -thread_network_server_data_entry_t *thread_search_server_list(thread_network_server_data_list_t *list, uint8_t routerId) -{ - return NULL; -} - -thread_network_server_data_entry_t *thread_get_server_list(thread_network_server_data_list_t *list, thread_border_router_tlv_entry_t *service) -{ - return NULL; -} - - -uint8_t thread_get_context_id_by_length(thread_data_context_list_t *list, uint8_t contextLength) -{ - return 0; -} - -thread_network_data_context_entry_t *thread_get_context_by_id(thread_data_context_list_t *list, uint8_t cid) -{ - return NULL; -} - -thread_network_data_context_entry_t *thread_get_main_context_list(thread_data_context_list_t *list, thread_network_local_data_context_entry_t *context) -{ - return NULL; -} - -void thread_server_list_free(thread_network_server_data_list_t *listPtr) -{ -} - -int threah_server_context_delete_mark(thread_data_context_list_t *listPtr) -{ - return 0; -} - -int threah_server_data_delete_mark_by_router_id(thread_network_server_data_list_t *listPtr, uint16_t routerID, bool subSet) -{ - return 0; -} - -int threah_server_context_clean(thread_network_data_cache_entry_t *cachePtr, thread_data_context_list_t *listPtr, thread_network_service_entry_t *prefixEntry) -{ - return 0; -} - - -void threah_server_data_clean_by_router_id(thread_network_data_cache_entry_t *cachePtr, thread_network_server_data_list_t *listPtr, thread_network_service_entry_t *prefixEntry, bool routeInfo, protocol_interface_info_entry_t *curInterface) -{ -} - -void thread_context_service_list_free(thread_data_context_list_t *listPtr) -{ -} -void thread_network_data_base_init(thread_network_data_cache_entry_t *cachePtr) -{ -} - -void thread_network_local_server_data_base_init(thread_network_local_data_cache_entry_t *cachePtr) -{ -} - -void thread_network_data_router_id_mark_delete(thread_network_data_cache_entry_t *cachePtr, uint16_t routerID, bool subSet) -{ -} - -void thread_network_data_router_id_free(thread_network_data_cache_entry_t *cachePtr, bool subSet, protocol_interface_info_entry_t *curInterface) -{ -} - -void thread_network_data_context_re_use_timer_update(thread_network_data_cache_entry_t *cachePtr, uint32_t ticks) -{ - -} - -void thread_network_data_free_and_clean(thread_network_data_cache_entry_t *cachePtr) -{ -} - -void thread_network_local_data_free_and_clean(thread_network_local_data_cache_entry_t *cachePtr, int8_t interface_id) -{ -} - -int thread_nd_local_list_add_route(thread_network_data_cache_entry_t *networkDataList, thread_prefix_tlv_t *prefixTlv, thread_border_router_tlv_entry_t *route) -{ - return 0; -} - -int thread_nd_local_list_add_on_mesh_prefix(thread_network_data_cache_entry_t *networkDataList, thread_prefix_tlv_t *prefixTlv, thread_border_router_tlv_entry_t *service) -{ - return 0; -} - -int thread_nd_local_list_del_on_mesh_server(thread_network_data_cache_entry_t *networkDataList, thread_prefix_tlv_t *prefixTlv, thread_border_router_tlv_entry_t *service) -{ - return 0; -} - -int thread_local_server_list_add_on_mesh_server(thread_network_local_data_cache_entry_t *networkDataList, thread_prefix_tlv_t *prefixTlv, thread_border_router_tlv_entry_t *service) -{ - return 0; -} - -int thread_local_server_list_del_on_mesh_server(thread_network_local_data_cache_entry_t *networkDataList, thread_prefix_tlv_t *prefixTlv, bool slaacService) -{ - return 0; -} - -int thread_local_server_add_route(thread_network_local_data_cache_entry_t *networkDataList, thread_prefix_tlv_t *prefixTlv, thread_border_router_tlv_entry_t *route) -{ - return 0; -} - -int thread_local_server_del_route(thread_network_local_data_cache_entry_t *networkDataList, thread_prefix_tlv_t *prefixTlv) -{ - return 0; -} - -uint8_t thread_nd_context_id_allocate(thread_network_data_cache_entry_t *networkDataList, thread_network_local_data_cache_entry_t *localDataList, uint8_t *prefixPtr, uint8_t prefixLength) -{ - return 0; -} - -int thread_nd_local_list_add_contexts(thread_network_data_cache_entry_t *networkDataList, thread_prefix_tlv_t *prefixTlv, thread_network_local_data_context_entry_t *context) -{ - return 0; -} - -uint8_t thread_server_prefix_length(thread_network_local_data_entry_t *cur) -{ - return 0; -} - -uint16_t thread_nd_own_service_list_data_size(thread_network_local_data_cache_entry_t *serverDataList) -{ - return 0; -} - -uint8_t * thread_nd_own_service_list_data_write(thread_network_local_data_cache_entry_t *serverDataList, uint8_t *ptr, uint16_t routerID) -{ - return NULL; -} - -uint16_t thread_nd_data_size(thread_network_data_cache_entry_t *networkDataList, bool fullList) -{ - return 0; -} - -int thread_nd_commission_data_len_update(thread_network_data_cache_entry_t *networkDataList, link_configuration_s *linkConfiguration, thread_commissioner_t *registered_commissioner) -{ - return 0; -} - -uint8_t thread_nd_commission_data_length_size(link_configuration_s *linkConfiguration, thread_commissioner_t *registered_commissioner) -{ - return 0; -} - -uint8_t *thread_nd_commission_data_write(uint8_t *ptr, link_configuration_s *linkConfiguration, thread_commissioner_t *registered_commissioner) -{ - return NULL; -} - -bool thread_check_network_data_prefix_stable_boolean(thread_network_service_entry_t *dataList) -{ - return false; -} - -uint8_t *thread_nd_generate_from_local_data_list(thread_network_data_cache_entry_t *networkDataList, link_configuration_s *linkConfiguration, thread_commissioner_t *registered_commissioner, uint8_t *ptr, bool fullList) -{ - return NULL; -} - -uint8_t *thread_nd_generate_from_local_data_list_to_sleepy_child(thread_network_data_cache_entry_t *networkDataList, struct link_configuration *linkConfiguration, struct thread_commissioner *registered_commissioner, uint8_t *ptr, bool fullList) -{ - return NULL; -} diff --git a/test/coap-service/unittest/stub/thread_network_synch_stub.c b/test/coap-service/unittest/stub/thread_network_synch_stub.c deleted file mode 100644 index 0d15993ac5..0000000000 --- a/test/coap-service/unittest/stub/thread_network_synch_stub.c +++ /dev/null @@ -1,21 +0,0 @@ -#include - -int thread_network_synch_data_store(int8_t interface_id) -{ - return 0; -} - -int thread_network_synch_start(int8_t interface_id) -{ - return 0; -} - -int thread_network_synch_data_free(int8_t interface_id) -{ - return 0; -} - -uint16_t thread_network_synch_get_strored_mac16(int8_t interface_id) -{ - return 0; -} diff --git a/test/coap-service/unittest/stub/thread_router_bootstrap_stub.c b/test/coap-service/unittest/stub/thread_router_bootstrap_stub.c deleted file mode 100644 index 0cb9f81eed..0000000000 --- a/test/coap-service/unittest/stub/thread_router_bootstrap_stub.c +++ /dev/null @@ -1,137 +0,0 @@ -/* - * Copyright (c) 2015 ARM Limited. All rights reserved. - */ - -/* - * \file thread_router_bootstrap.c - * \brief Add short description about this file!!! - * - */ -#include "config.h" -#include -#include -#include -#include "eventOS_event.h" -#include "eventOS_event_timer.h" -#include "randLIB.h" -#include "shalib.h" -#include "common_functions.h" -#include "NWK_INTERFACE/Include/protocol.h" -#include "MulticastTrigle/multicast.h" -#include "net_thread_test.h" -#include "ns_trace.h" -#include "6LoWPAN/Bootstraps/protocol_6lowpan.h" -#include "6LoWPAN/Thread/thread.h" -#include "6LoWPAN/Thread/thread_routing.h" -#include "6LoWPAN/Thread/thread_nd.h" -#include "6LoWPAN/Thread/thread_bootstrap.h" -#include "6LoWPAN/Thread/thread_router_bootstrap.h" -#include "6LoWPAN/Thread/thread_routerid_server.h" -#include "6LoWPAN/Thread/thread_management_internal.h" -#include "6LoWPAN/Thread/thread_network_synch.h" -#include "6LoWPAN/Thread/thread_dynamic_reed.h" -#include "6LoWPAN/Thread/thread_joiner_application.h" -#include "6LoWPAN/Thread/thread_management_client.h" -#include "6LoWPAN/Thread/thread_management_server.h" -#include "6LoWPAN/Thread/thread_beacon.h" -#include "6LoWPAN/Thread/thread_network_data_lib.h" -#include "MAC/IEEE802_15_4/mac_data_interface.h" -#include "MAC/IEEE802_15_4/mac_data_poll.h" -#include "MAC/IEEE802_15_4/mac_security_interface.h" -#include "MAC/IEEE802_15_4/mac_data_poll.h" -#include "MAC/IEEE802_15_4/mac_mlme.h" -#include "thread_management_if.h" -#include "Common_Protocols/ipv6.h" -#include "Common_Protocols/icmpv6.h" -#include "Common_Protocols/icmpv6_radv.h" -#include "MLE/mle.h" -#include "MLE/mle_tlv.h" -#include "thread_config.h" -#include "multicast_api.h" -#include "Service_Libs/nd_proxy/nd_proxy.h" -#include "Service_Libs/mle_service/mle_service_api.h" -#include "thread_dhcpv6_client.h" - -#define TRACE_GROUP "trbs" - -int thread_router_mle_advertise(protocol_interface_info_entry_t *cur) -{ - return 0; -} - -int thread_reed_advertise (protocol_interface_info_entry_t *cur) -{ - return 0; -} - -void thread_set_meshlocal_route(protocol_interface_info_entry_t *cur) -{ -} - -uint8_t *thread_write_route_option(protocol_interface_info_entry_t *cur, uint8_t *ptr) -{ - return 0; -} - - -void thread_multicast_forward_to_child(void *buf) -{ -} - -void thread_attach_router_id_request(protocol_interface_info_entry_t *cur) -{ -} - -void thread_bootstrap_child_id_handler(protocol_interface_info_entry_t *cur) -{ -} - -void thread_mle_connected_reed_receive_cb(int8_t interface_id, mle_message_t *mle_msg, mac_aux_security_header_t *security_headers) -{ -} - - -void thread_reed_synch_start(protocol_interface_info_entry_t *cur) -{ -} - -bool thread_bootstrap_trig_router_downgrade(protocol_interface_info_entry_t *cur) -{ - return false; -} - -bool thread_bootstrap_trig_reed_upgrade(protocol_interface_info_entry_t *cur) -{ - return false; -} - -void thread_bootstrap_child_id_reject(protocol_interface_info_entry_t *cur) -{ -} - -void thread_bootstrap_attached_active_router(protocol_interface_info_entry_t *cur) -{ -} - -void thread_bootstrap_router_synch_finish(protocol_interface_info_entry_t *cur) -{ -} - -void thread_bootsrap_generate_thread_partitition(int8_t interface_id, bool newPartition) -{ -} - -void thread_attach_router_id_release(protocol_interface_info_entry_t *cur) -{ -} - -void thread_bootstrap_leader_data_free(thread_info_t *thread_info, int8_t bootstrap) -{ -} - -void thread_bootstrap_global_leader_data(thread_info_t *thread_info) -{ - -} - - diff --git a/test/coap-service/unittest/stub/thread_routerid_server_stub.c b/test/coap-service/unittest/stub/thread_routerid_server_stub.c deleted file mode 100644 index bc5271a62f..0000000000 --- a/test/coap-service/unittest/stub/thread_routerid_server_stub.c +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright (c) 2014-2015 ARM Limited. All rights reserved. - */ - -/** - * \file thread_routerid_server.c - * - */ -#include "config.h" -#include -#include -#include -#include "common_functions.h" -#include "libDHCPv6/libDHCPv6.h" -#include "randLIB.h" -#include "nsdynmemLIB.h" -#include "NWK_INTERFACE/Include/protocol.h" -#include "6LoWPAN/Thread/thread.h" -#include "6LoWPAN/Thread/thread_routerid_server.h" - -#define TRACE_GROUP "thid" - -int thread_routerid_assign_cb(int8_t interface_id, const uint8_t mac[8], uint8_t router_id_mask_out[9], uint16_t *router_id) -{ - return -1; -} - -int thread_routerid_release_cb(int8_t interface_id, uint8_t mac[8], uint16_t router_id) -{ - return -1; -} diff --git a/test/coap-service/unittest/stub/thread_routing_stub.c b/test/coap-service/unittest/stub/thread_routing_stub.c deleted file mode 100644 index de96783a1f..0000000000 --- a/test/coap-service/unittest/stub/thread_routing_stub.c +++ /dev/null @@ -1,165 +0,0 @@ -/* - * Copyright (c) 2014-2015 ARM Limited. All rights reserved. - */ - -#include "config.h" -#include -#include -#include -#include - -#ifndef UINT_FAST4_MAX -typedef uint_fast8_t uint_fast4_t; -#define UINT_FAST4_MAX UINT_FAST8_MAX -#endif - -#define THREAD_ROUTING_FN extern - -#include -#include "ns_trace.h" -#include "common_functions.h" -#include "NWK_INTERFACE/Include/protocol.h" -#include "MLE/mle.h" -#include "6LoWPAN/Mesh/mesh.h" -#include "6LoWPAN/Thread/thread.h" -#include "6LoWPAN/Thread/thread_nd.h" -#include "6LoWPAN/Thread/thread_routing.h" - -#define TRACE_GROUP "trou" - -/* MLE Route Data bit assignments (draft-kelsey-thread-routing-00) */ -#define ROUTE_DATA_OUT_MASK 0xC0 -#define ROUTE_DATA_OUT_SHIFT 6 -#define ROUTE_DATA_IN_MASK 0x30 -#define ROUTE_DATA_IN_SHIFT 4 -#define ROUTE_DATA_COST_MASK 0x0F - -#define MAX_ROUTE_COST 0x0F - -typedef uint_fast4_t route_cost_t; -#define THREAD_COST_INFINITE 0 - -#define MAX_LINK_AGE 100*10 /* 100 seconds */ - -#define LINK_AGE_STATIC 0xFFFF /* Magic number to indicate "never expire" */ - - -bool router_id_sequence_is_greater(const thread_routing_info_t *routing, uint8_t seq) -{ - return false; -} - -#define LINK_QUALITY_HYSTERESIS (1 << THREAD_LINK_MARGIN_SCALING) /* 1dB */ - -thread_link_quality_t link_margin_to_quality(thread_link_margin_t margin) -{ - return QUALITY_BAD; -} - -bool thread_i_am_router(const protocol_interface_info_entry_t *cur) -{ - return false; -} - -void thread_routing_update_id_set(protocol_interface_info_entry_t *cur, uint8_t seq, const uint8_t *id_mask) -{ -} - -int_fast8_t thread_routing_update_link_margin(protocol_interface_info_entry_t *cur, - uint16_t sender, - uint8_t link_margin_db, - uint8_t outgoing_link_margin_db) -{ - return 0; -} - -int_fast8_t thread_routing_add_link(protocol_interface_info_entry_t *cur, - uint16_t sender, uint8_t link_margin_db, - uint8_t id_seq, - const uint8_t *id_mask, - const uint8_t *route_data, - bool is_static) -{ - return 0; -} - -int_fast8_t thread_routing_remove_link(protocol_interface_info_entry_t *cur, - uint16_t sender) -{ - return 0; -} - -uint8_t thread_routing_get_route_data_size(protocol_interface_info_entry_t *cur) -{ - return 0; -} - -uint_fast8_t thread_routing_cost_get_by_router_id(thread_routing_info_t *routing , uint8_t routerId) -{ - return 0; -} - -void thread_routing_get_mask_by_current_data(thread_routing_info_t *routing, uint8_t *id_mask) -{ -} - -int_fast8_t thread_routing_get_route_data(protocol_interface_info_entry_t *cur, - uint8_t *id_seq, - uint8_t *id_mask, - uint8_t *data, - uint8_t *len_out) -{ - return 0; -} - -void thread_routing_init(thread_routing_info_t *routing) -{ -} - -void thread_routing_free(thread_routing_info_t *routing) -{ -} - -void thread_routing_activate(thread_routing_info_t *routing) -{ -} - -void thread_routing_deactivate(thread_routing_info_t *routing) -{ -} - -/* ticks is in 100ms units, I think */ -/* Return true if we want to send an MLE advertisement */ -bool thread_routing_timer(thread_info_t *thread, uint8_t ticks) -{ - return false; -} - -void thread_routing_set_mesh_callbacks(protocol_interface_info_entry_t *cur) -{ -} - -uint_fast8_t thread_routing_count_neighbours_with_quality_or_better(thread_routing_info_t *routing, thread_link_quality_t quality) -{ - return 0; -} - -uint_fast8_t thread_routing_count_active_routers(thread_routing_info_t *routing) -{ - return 0; -} - -uint_fast8_t thread_routing_count_active_routers_from_mask(const uint8_t *id_mask) -{ - return 0; -} - -uint_fast8_t thread_routing_sum_rx_path_cost_and_link_cost(uint8_t inMargim, uint8_t outMargin, uint8_t pathCost) -{ - return 0; -} - -void thread_routing_reset(thread_routing_info_t *routing) -{ - -} diff --git a/test/coap-service/unittest/stub/thread_stub.c b/test/coap-service/unittest/stub/thread_stub.c deleted file mode 100644 index 49a3c7cf93..0000000000 --- a/test/coap-service/unittest/stub/thread_stub.c +++ /dev/null @@ -1,373 +0,0 @@ -/* - * Copyright (c) 2014-2015 ARM Limited. All rights reserved. - */ -#include "config.h" -#include -#include -#include -#include "eventOS_event.h" -#include "randLIB.h" -#include "common_functions.h" - -#include "NWK_INTERFACE/Include/protocol.h" -#include "net_thread_test.h" -#include "libDHCPv6/libDHCPv6.h" -#include "libDHCPv6/libDHCPv6_server.h" -#include "ns_trace.h" -#include "6LoWPAN/Bootstraps/protocol_6lowpan.h" -#include "6LoWPAN/Bootstraps/protocol_6lowpan_interface.h" -#include "6LoWPAN/Thread/thread.h" -#include "6LoWPAN/Thread/thread_routing.h" -#include "6LoWPAN/Thread/thread_dhcpv6_client.h" -#include "6LoWPAN/Thread/thread_bootstrap.h" -#include "6LoWPAN/Thread/thread_nd.h" -#include "6LoWPAN/Thread/thread_network_data_lib.h" -#include "6LoWPAN/Thread/thread_joiner_application.h" -#include "Common_Protocols/ipv6.h" -#include "Common_Protocols/icmpv6.h" -#include "MLE/mle.h" -#include "MLE/mle_tlv.h" - -#define TRACE_GROUP "thrd" - -#define ID_MASK_UPDATE_MIN (10 * 10) /* 1 minute */ -#define LEADER_DATA_UPDATE_MIN (10 * 10) /* 10 seconds */ - -void thread_leader_private_data_clean(thread_leader_info_t *private); -thread_leader_data_t *thread_leader_data_generate(void); -thread_leader_info_t *thread_allocate_and_init_leader_private_data(void); -thread_parent_info_t *thread_parent_data_allocate(thread_info_t *info); -int thread_leader_router_id_deallocate(const uint8_t *eui64, protocol_interface_info_entry_t *cur); - -int thread_proxy_state_update(int8_t caller_interface_id , int8_t handler_interface_id, bool status) -{ - -} - -void thread_anycast_address_policy_update(const uint8_t *meshLocalPrefix, bool addPolicy) -{ - -} - -int8_t thread_bootstrap_up(protocol_interface_info_entry_t *cur) -{ - return -1; -} - -int8_t thread_bootstrap_down(protocol_interface_info_entry_t *cur) -{ - return -1; -} - -int thread_leader_data_base_allocate(protocol_interface_info_entry_t *cur) -{ - return 0; -} - -bool thread_addr_is_mesh_local(const uint8_t *addr, const protocol_interface_info_entry_t *cur) -{ - return false; -} - -bool thread_addr_is_mesh_local_16(const uint8_t *addr, const protocol_interface_info_entry_t *cur) -{ - return false; -} - -bool thread_addr_is_mesh_local_64(const uint8_t *addr, const protocol_interface_info_entry_t *cur) -{ - return false; -} - -void thread_leader_data_initialize(thread_leader_data_t *leader_data, uint8_t routerId) -{ -} - -void thread_leader_private_routemask_init(thread_leader_info_t *leader_info) -{ -} - -void thread_leader_private_routemask_init_by_last_partition(thread_leader_info_t *leader_info, uint8_t *lastValidRouteMask, uint8_t leaderId) -{ -} - -void thread_router_child_info_init(thread_child_info_t *child_info) -{ -} - -bool thread_leader_data_parse(uint8_t *ptr, uint16_t dataLength, thread_leader_data_t *leaderDataBuf) -{ - return false; -} - -bool thread_connectivity_tlv_parse(uint8_t *ptr, uint16_t dataLength, thread_connectivity_t *connectivityTlv) -{ - return false; -} - - - -thread_leader_data_t *thread_leader_data_generate(void) -{ - return NULL; -} - -thread_leader_data_t *thread_leader_data_allocate(thread_info_t *info) -{ - return NULL; -} - -thread_parent_info_t *thread_parent_data_allocate(thread_info_t *info) -{ - return NULL; -} - -int thread_leader_ul16_address_get(thread_info_t *thread_info, uint8_t *address_ptr) -{ - return -1; -} - -void thread_leader_setup_delete(link_configuration_s *leader_setup_ptr) -{ -} - -bool thread_leader_commissioner_create(thread_info_t *thread_info) -{ - return false; -} - -void thread_leader_commissioner_free(thread_info_t *thread_info) -{ -} - - -void thread_data_base_init(thread_info_t *thread_info, int8_t interfaceId) -{ -} - - -int thread_info_allocate_and_init(protocol_interface_info_entry_t *cur) -{ - return -1; -} - -void thread_child_info_free(thread_info_t *thread_info) -{ -} - -void thread_info_deallocate(protocol_interface_info_entry_t *cur) -{ -} - -int thread_leader_route_mask_update(thread_leader_info_t *info, uint8_t router_id, bool setActive) -{ - return -1; -} - -/* Called by thread_routing.c as a result of updates to routing table - allows - * leader to monitor a router being available (having a finite route cost). - */ -void thread_leader_router_state_changed(thread_leader_info_t *info, uint8_t router_id, bool available, int8_t interface_id) -{ -} - -int thread_validate_own_routeid_from_new_mask(const uint8_t *master_router_id_mask, uint8_t router_id) -{ - return -1; -} - - - - -void thread_leader_allocate_router_id_by_allocated_id(thread_leader_info_t *info, uint8_t router_id, const uint8_t *eui64) -{ -} - -int thread_generate_leasequery(int8_t interfaceID, uint8_t *addressRequested) -{ - return -1; -} - -thread_leader_info_t *thread_allocate_and_init_leader_private_data(void) -{ - return NULL; -} - -thread_child_info_t *thread_router_child_info_allocate_and_init(void) -{ - return NULL; -} - - - -void thread_child_id_request_info_init(thread_pending_child_id_req_t *child_info) -{ -} - -thread_pending_child_id_req_t *thread_child_id_request_allocate(void) -{ - return NULL; -} - -void thread_child_id_request_entry_clean(protocol_interface_info_entry_t *cur) -{ -} - -thread_pending_child_id_req_t *thread_child_id_request_entry_get(protocol_interface_info_entry_t *cur, uint8_t *euid64) -{ - return NULL; -} - -thread_pending_child_id_req_t *thread_child_id_request_entry_get_from_the_list(protocol_interface_info_entry_t *cur) -{ - return NULL; -} - -void thread_child_id_request_entry_remove(protocol_interface_info_entry_t *cur, thread_pending_child_id_req_t *entry) -{ -} - -int thread_init(protocol_interface_info_entry_t *cur) -{ - return 0; -} - -int thread_route_tlv_push(protocol_interface_info_entry_t *cur, uint8_t *route_tlv, uint8_t route_len, uint8_t linkMargin, uint16_t shortAddress) -{ - return 0; -} - -void thread_leader_update_id_set(protocol_interface_info_entry_t *cur) -{ -} - -int thread_routerid_request_handler(int8_t interfaceId, const uint8_t *clientId, thread_router_id_response_t *router_id_response, bool reNew) -{ - return -1; -} - - -int thread_routerid_release_handler(int8_t interfaceId, uint8_t *clientId) -{ - return -1; -} - -void thread_leader_router_id_valid_lifetime_update(protocol_interface_info_entry_t *cur, uint32_t tickUpdate) -{ -} - -int thread_leader_router_id_deallocate(const uint8_t *eui64, protocol_interface_info_entry_t *cur) -{ - return -1; -} - -int thread_leader_router_id_allocate(const uint8_t *eui64, protocol_interface_info_entry_t *cur, thread_router_id_response_t *reponse, bool renew) -{ - return -1; -} - -int thread_discover_mode_active(protocol_interface_info_entry_t *cur) -{ - return -1; -} - -int thread_attach_mode_active(protocol_interface_info_entry_t *cur) -{ - return -1; -} - -int thread_attach_ready(protocol_interface_info_entry_t *cur) -{ - return -1; -} - -bool thread_attach_active_router(protocol_interface_info_entry_t *cur) -{ - return -1; -} - -int thread_router_ready(protocol_interface_info_entry_t *cur) -{ - return -1; -} - -bool thread_scan_mask_validation(protocol_interface_info_entry_t *cur, uint8_t mask) -{ - return false; -} - -int thread_route_ready_to_leader(protocol_interface_info_entry_t *cur) -{ - return -1; -} - -void thread_leader_private_data_clean(thread_leader_info_t *pr) -{ -} - -bool thread_route_possible_add(thread_attach_device_mode_e threadMode) -{ - return false; -} - -bool thread_on_mesh_route_possible_add(thread_attach_device_mode_e threadMode) -{ - return false; -} - -bool thread_on_mesh_address_valid(thread_network_server_data_entry_t *curRoute) -{ - return false; -} - -void thread_dhcp_client_gua_error_cb(int8_t interface, uint8_t dhcp_addr[static 16], uint8_t prefix[static 16], bool register_status) -{ -} - - -void thread_network_data_service_learn(protocol_interface_info_entry_t *cur) -{ -} - -void thread_seconds_timer(protocol_interface_info_entry_t *cur, uint32_t ticks) -{ -} - -void thread_timer(protocol_interface_info_entry_t *cur, uint8_t ticks) -{ -} - -void thread_network_data_update(protocol_interface_info_entry_t *cur) -{ -} - -bool thread_insist_that_mesh_isnt_a_link(const protocol_interface_info_entry_t *cur) -{ - return false; -} - -/* If it's a 16-bit src address, only pass it if it's on the list */ -bool thread_test_addr_filter(const buffer_t *buf, const protocol_interface_info_entry_t *cur) -{ - return false; -} - -uint8_t *thread_beacon_create_payload(const link_configuration_s *leader_link_setup,thread_commissioner_t *registered_commissioner, uint8_t *return_length) -{ - return NULL; -} - -uint8_t thread_beacon_indication(uint8_t *ptr, uint8_t len, protocol_interface_info_entry_t *cur) -{ - return 0; -} - -void thread_network_data_request_disable_trig(protocol_interface_info_entry_t *cur) -{ - -} - -void thread_network_data_request_trig(protocol_interface_info_entry_t *cur, uint8_t *requestDstAddress, bool delaydTrig) -{ - -} diff --git a/test/coap-service/unittest/stub/thread_test_api_stub.c b/test/coap-service/unittest/stub/thread_test_api_stub.c deleted file mode 100644 index d3672a5ae2..0000000000 --- a/test/coap-service/unittest/stub/thread_test_api_stub.c +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright (c) 2014-2015 ARM Limited. All rights reserved. - */ -#include "config.h" -#include -#include -#include -#include - -#include "ns_trace.h" -#include "common_functions.h" -#include "NWK_INTERFACE/Include/protocol.h" -#include "6LoWPAN/Thread/thread.h" -#include "6LoWPAN/Thread/thread_routing.h" -#include "MAC/IEEE802_15_4/mac_security_interface.h" - -#define TRACE_GROUP "tapi" - -int_fast8_t arm_nwk_6lowpan_thread_test_router_id_push( - int8_t interface_id, - const uint8_t *euid64, - uint8_t router_id) -{ - return 0; -} - -int_fast8_t arm_nwk_6lowpan_thread_test_add_neighbour( - int8_t interface_id, - uint16_t neighbour_short_addr, - uint_fast8_t link_margin_db, - uint8_t id_sequence, - const uint8_t *id_mask, - const uint8_t *route_data) -{ - return 0; -} - -int_fast8_t arm_nwk_6lowpan_thread_test_remove_neighbour( - int8_t interface_id, - uint16_t neighbour_short_addr) -{ - return 0; - -} - -int_fast8_t arm_nwk_6lowpan_thread_test_set_addr_filter( - int8_t interface_id, - uint8_t num_short_addrs, - const uint16_t valid_short_addrs[num_short_addrs], - uint8_t num_long_addrs, - const uint8_t valid_long_addrs[num_long_addrs][8]) -{ - return 0; -} - -int_fast8_t arm_nwk_6lowpan_thread_adjust_link_margins( - int8_t interface_id, - int8_t adjustment) -{ - return 0; -} - -void arm_nwk_6lowpan_thread_test_print_routing_database(int8_t interface_id) -{ -} - -int8_t arm_nwk_key_update_trig(int8_t interface_id) -{ - return 0; -} diff --git a/test/coap-service/unittest/stub/timeout_stub.c b/test/coap-service/unittest/stub/timeout_stub.c deleted file mode 100644 index 7738efe05e..0000000000 --- a/test/coap-service/unittest/stub/timeout_stub.c +++ /dev/null @@ -1,15 +0,0 @@ -//todo:is this right place, or should this be located to event-loop modules stubs? - - -#include "ns_types.h" -#include "eventOS_event_timer.h" - -timeout_t *eventOS_timeout_ms(void (*callback)(void *), uint32_t ms, void *arg) -{ - return NULL; -} - -void eventOS_timeout_cancel(timeout_t *t) -{ - -} From 0f5b75ba2e38bf407dc997d5928b4a14336573bd Mon Sep 17 00:00:00 2001 From: Antti Kauppila Date: Wed, 23 Dec 2015 11:29:20 +0200 Subject: [PATCH 056/154] downgraded mbed-client-c to work with nanostack --- module.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module.json b/module.json index 702e61b8b5..0fe1bbb866 100644 --- a/module.json +++ b/module.json @@ -19,7 +19,7 @@ ], "dependencies": { "nanostack-libservice": "^3.0.0", - "mbed-client-c": "^2.0.0", + "mbed-client-c": "^1.1.0", "sal-stack-nanostack": "^3.0.0", "mbedtls": "^2.0.0" }, From edece2228ee4d2fd74ecc2f1bc0f085381301997 Mon Sep 17 00:00:00 2001 From: Antti Kauppila Date: Wed, 23 Dec 2015 11:39:05 +0200 Subject: [PATCH 057/154] Stub fixed to reflect mbed-client-c 1.x version --- test/coap-service/unittest/stub/sn_coap_protocol_stub.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/coap-service/unittest/stub/sn_coap_protocol_stub.c b/test/coap-service/unittest/stub/sn_coap_protocol_stub.c index c7379c2da6..ee5bac8f63 100644 --- a/test/coap-service/unittest/stub/sn_coap_protocol_stub.c +++ b/test/coap-service/unittest/stub/sn_coap_protocol_stub.c @@ -46,22 +46,22 @@ struct coap_s *sn_coap_protocol_init(void *(*used_malloc_func_ptr)(uint16_t), vo return sn_coap_protocol_stub.expectedCoap; } -int8_t sn_coap_protocol_set_block_size(struct coap_s *handle, uint16_t block_size) +int8_t sn_coap_protocol_set_block_size(uint16_t block_size) { return sn_coap_protocol_stub.expectedInt8; } -int8_t sn_coap_protocol_set_duplicate_buffer_size(struct coap_s *handle, uint8_t size) +int8_t sn_coap_protocol_set_duplicate_buffer_size(uint8_t size) { return sn_coap_protocol_stub.expectedInt8; } -int8_t sn_coap_protocol_set_retransmission_parameters(struct coap_s *handle, uint8_t resending_count, uint8_t resending_intervall) +int8_t sn_coap_protocol_set_retransmission_parameters(uint8_t resending_count, uint8_t resending_intervall) { return sn_coap_protocol_stub.expectedInt8; } -int8_t sn_coap_protocol_set_retransmission_buffer(struct coap_s *handle, uint8_t buffer_size_messages, uint16_t buffer_size_bytes) +int8_t sn_coap_protocol_set_retransmission_buffer(uint8_t buffer_size_messages, uint16_t buffer_size_bytes) { return sn_coap_protocol_stub.expectedInt8; } From e154420b8a1728fda9827fea7808406d55f483be Mon Sep 17 00:00:00 2001 From: Tero Heinonen Date: Mon, 4 Jan 2016 09:42:48 +0200 Subject: [PATCH 058/154] added missing header --- source/coap_security_handler.c | 1 + 1 file changed, 1 insertion(+) diff --git a/source/coap_security_handler.c b/source/coap_security_handler.c index 878d32afe8..c3b891d813 100644 --- a/source/coap_security_handler.c +++ b/source/coap_security_handler.c @@ -10,6 +10,7 @@ #include "mbedtls/error.h" #include "mbedtls/ssl_cookie.h" #include "mbedtls/entropy_poll.h" +#include "mbedtls/ssl.h" #include "ns_trace.h" #include "nsdynmemLIB.h" #include "coap_connection_handler.h" From 518fb25bb7f098afbaa2bfff997940332e17a864 Mon Sep 17 00:00:00 2001 From: Tero Heinonen Date: Mon, 4 Jan 2016 09:53:52 +0200 Subject: [PATCH 059/154] Replaced srand & rand with randlib functions. Functionality is same, but now it works in different platforms. --- source/coap_security_handler.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/coap_security_handler.c b/source/coap_security_handler.c index c3b891d813..148aaac957 100644 --- a/source/coap_security_handler.c +++ b/source/coap_security_handler.c @@ -383,14 +383,14 @@ int entropy_poll( void *ctx, unsigned char *output, size_t len, size_t *olen ) { //TODO: change to more secure random - srand(time(NULL)); + randLIB_seed_random(); char *c = (char*)ns_dyn_mem_temporary_alloc(len); if( !c ){ return MBEDTLS_ERR_ENTROPY_SOURCE_FAILED; } memset(c, 0, len); for(uint16_t i=0; i < len; i++){ - c[i] = rand() % 256; + c[i] = (char)randLIB_get_8bit; } memmove(output, c, len); *olen = len; From 6c6e6726309fd04b52d87cf7d3225623dc1dd4ee Mon Sep 17 00:00:00 2001 From: Tero Heinonen Date: Mon, 11 Jan 2016 13:24:21 +0200 Subject: [PATCH 060/154] MbedTLS config file fixing, small refactoring. --- source/coap_connection_handler.c | 7 +- source/coap_security_handler.c | 30 ++++---- source/include/coap_security_handler.h | 19 +++--- source/include/config-thread.h | 94 -------------------------- source/override_flags.cmake | 1 - 5 files changed, 32 insertions(+), 119 deletions(-) delete mode 100755 source/include/config-thread.h delete mode 100644 source/override_flags.cmake diff --git a/source/coap_connection_handler.c b/source/coap_connection_handler.c index f137af7bc5..226fbeb2b4 100644 --- a/source/coap_connection_handler.c +++ b/source/coap_connection_handler.c @@ -49,7 +49,7 @@ typedef struct secure_timer_s { } secure_timer_t; typedef struct secure_session { - thread_security_t *sec_handler; //owned + coap_security_t *sec_handler; //owned internal_socket_t *parent; //not owned secure_timer_t timer; @@ -652,12 +652,17 @@ int coap_connection_handler_send_data(thread_conn_handler_t *handler, ns_address handler->socket->dest_addr.identifier = dest_addr->identifier; handler->socket->dest_addr.type = dest_addr->type; uint8_t *pw = (uint8_t *)ns_dyn_mem_alloc(64); + if(!pw){ + //todo: free secure session? + return -1; + } uint8_t pw_len; if( handler->_get_password_cb && 0 == handler->_get_password_cb(handler->socket->listen_socket, dest_addr->address, dest_addr->identifier, pw, &pw_len)){ coap_security_handler_connect(session->sec_handler, false, pw, pw_len); ns_dyn_mem_free(pw); return -2; }else{ + //free secure session? ns_dyn_mem_free(pw); return -1; } diff --git a/source/coap_security_handler.c b/source/coap_security_handler.c index 148aaac957..c57e9b117a 100644 --- a/source/coap_security_handler.c +++ b/source/coap_security_handler.c @@ -33,7 +33,7 @@ int entropy_poll( void *data, unsigned char *output, size_t len, size_t *olen ); int f_send( void *ctx, const unsigned char *buf, size_t len ); int f_recv(void *ctx, unsigned char *buf, size_t len); -static int coap_security_handler_init(thread_security_t *sec){ +static int coap_security_handler_init(coap_security_t *sec){ const char *pers = "dtls_client"; mbedtls_ssl_init( &sec->_ssl ); mbedtls_ssl_config_init( &sec->_conf ); @@ -61,7 +61,7 @@ static int coap_security_handler_init(thread_security_t *sec){ return 0; } -static void coap_security_handler_reset(thread_security_t *sec){ +static void coap_security_handler_reset(coap_security_t *sec){ mbedtls_entropy_free( &sec->_entropy ); mbedtls_ctr_drbg_free( &sec->_ctr_drbg ); mbedtls_ssl_config_free(&sec->_conf); @@ -69,7 +69,7 @@ static void coap_security_handler_reset(thread_security_t *sec){ } -thread_security_t *thread_security_create(int8_t socket_id, int8_t timer_id, uint8_t *address_ptr, uint16_t port, +coap_security_t *thread_security_create(int8_t socket_id, int8_t timer_id, uint8_t *address_ptr, uint16_t port, send_cb *send_cb, receive_cb *receive_cb, start_timer_cb *start_timer_cb, @@ -78,7 +78,7 @@ thread_security_t *thread_security_create(int8_t socket_id, int8_t timer_id, uin if( !address_ptr || send_cb == NULL || receive_cb == NULL || start_timer_cb == NULL || timer_status_cb == NULL){ return NULL; } - thread_security_t *this = ns_dyn_mem_alloc(sizeof(thread_security_t)); + coap_security_t *this = ns_dyn_mem_alloc(sizeof(coap_security_t)); if( !this ){ return NULL; } @@ -88,6 +88,8 @@ thread_security_t *thread_security_create(int8_t socket_id, int8_t timer_id, uin } this->_remote_port = port; memcpy(this->_remote_address, address_ptr, 16); + memset(this->_pw, 0, 64); + this->_pw_len = 0; this->_socket_id = socket_id; this->_timer_id = timer_id; this->_send_cb = send_cb; @@ -98,7 +100,7 @@ thread_security_t *thread_security_create(int8_t socket_id, int8_t timer_id, uin return this; } -void thread_security_destroy(thread_security_t *sec){ +void thread_security_destroy(coap_security_t *sec){ if( sec ){ coap_security_handler_reset(sec); ns_dyn_mem_free(sec); @@ -210,7 +212,7 @@ static int export_key_block(void *ctx, */ static void set_timer(void *sec_obj, uint32_t int_ms, uint32_t fin_ms) { - thread_security_t *sec = (thread_security_t *)sec_obj; + coap_security_t *sec = (coap_security_t *)sec_obj; if( sec->_start_timer_cb ){ sec->_start_timer_cb( sec->_timer_id, int_ms, fin_ms); } @@ -225,14 +227,14 @@ static void set_timer(void *sec_obj, uint32_t int_ms, uint32_t fin_ms) */ static int get_timer(void *sec_obj) { - thread_security_t *sec = (thread_security_t *)sec_obj; + coap_security_t *sec = (coap_security_t *)sec_obj; if( sec->_timer_status_cb ){ return sec->_timer_status_cb(sec->_timer_id); } return -1; } -int coap_security_handler_connect(thread_security_t *sec, bool is_server, const unsigned char *pw, uint8_t len){ +int coap_security_handler_connect(coap_security_t *sec, bool is_server, const unsigned char *pw, uint8_t len){ if( !sec ){ return -1; @@ -303,7 +305,7 @@ int coap_security_handler_connect(thread_security_t *sec, bool is_server, const return ret; } -int coap_security_handler_continue_connecting(thread_security_t *sec){ +int coap_security_handler_continue_connecting(coap_security_t *sec){ int ret=-1; while( ret != MBEDTLS_ERR_SSL_WANT_READ ){ ret = mbedtls_ssl_handshake_step( &sec->_ssl ); @@ -333,7 +335,7 @@ int coap_security_handler_continue_connecting(thread_security_t *sec){ } -int coap_security_handler_send_message(thread_security_t *sec, unsigned char *message, size_t len){ +int coap_security_handler_send_message(coap_security_t *sec, unsigned char *message, size_t len){ int ret=-1; if( sec ){ @@ -345,7 +347,7 @@ int coap_security_handler_send_message(thread_security_t *sec, unsigned char *me return ret; //bytes written } -int thread_security_send_close_alert(thread_security_t *sec) +int thread_security_send_close_alert(coap_security_t *sec) { if( !sec ){ return -1; @@ -356,7 +358,7 @@ int thread_security_send_close_alert(thread_security_t *sec) coap_security_handler_init(sec); } -int coap_security_handler_read(thread_security_t *sec, unsigned char* buffer, size_t len){ +int coap_security_handler_read(coap_security_t *sec, unsigned char* buffer, size_t len){ int ret=-1; if( sec && buffer ){ @@ -370,12 +372,12 @@ int coap_security_handler_read(thread_security_t *sec, unsigned char* buffer, si } int f_send( void *ctx, const unsigned char *buf, size_t len){ - thread_security_t *sec = (thread_security_t *)ctx; + coap_security_t *sec = (coap_security_t *)ctx; return sec->_send_cb(sec->_socket_id, sec->_remote_address, sec->_remote_port, buf, len); } int f_recv(void *ctx, unsigned char *buf, size_t len){ - thread_security_t *sec = (thread_security_t *)ctx; + coap_security_t *sec = (coap_security_t *)ctx; return sec->_receive_cb(sec->_socket_id, buf, len); } diff --git a/source/include/coap_security_handler.h b/source/include/coap_security_handler.h index 12e772d25e..865d96bf63 100644 --- a/source/include/coap_security_handler.h +++ b/source/include/coap_security_handler.h @@ -29,9 +29,9 @@ typedef void start_timer_cb(int8_t timer_id, uint32_t min, uint32_t fin); typedef int timer_status_cb(int8_t timer_id); typedef struct thread_security_s { - mbedtls_ssl_config _conf; mbedtls_ssl_context _ssl; + mbedtls_ctr_drbg_context _ctr_drbg; mbedtls_entropy_context _entropy; bool _is_started; @@ -50,24 +50,25 @@ typedef struct thread_security_s { receive_cb *_receive_cb; start_timer_cb *_start_timer_cb; timer_status_cb *_timer_status_cb; -} thread_security_t; -thread_security_t *thread_security_create(int8_t socket_id, int8_t timer_id, uint8_t *address_ptr, uint16_t port, +} coap_security_t; + +coap_security_t *thread_security_create(int8_t socket_id, int8_t timer_id, uint8_t *address_ptr, uint16_t port, send_cb *send_cb, receive_cb *receive_cb, start_timer_cb *start_timer_cb, timer_status_cb *timer_status_cb); -void thread_security_destroy(thread_security_t *sec); +void thread_security_destroy(coap_security_t *sec); -int coap_security_handler_connect(thread_security_t *sec, bool is_server, const unsigned char *pw, uint8_t len); +int coap_security_handler_connect(coap_security_t *sec, bool is_server, const unsigned char *pw, uint8_t len); -int coap_security_handler_continue_connecting(thread_security_t *sec); +int coap_security_handler_continue_connecting(coap_security_t *sec); -int coap_security_handler_send_message(thread_security_t *sec, unsigned char *message, size_t len); +int coap_security_handler_send_message(coap_security_t *sec, unsigned char *message, size_t len); -int thread_security_send_close_alert(thread_security_t *sec); +int thread_security_send_close_alert(coap_security_t *sec); -int coap_security_handler_read(thread_security_t *sec, unsigned char* buffer, size_t len); +int coap_security_handler_read(coap_security_t *sec, unsigned char* buffer, size_t len); #endif diff --git a/source/include/config-thread.h b/source/include/config-thread.h deleted file mode 100755 index e694b75ed1..0000000000 --- a/source/include/config-thread.h +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Minimal configuration for using TLS as part of Thread - * - * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved - * SPDX-License-Identifier: Apache-2.0 - * - * 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. - * - * This file is part of mbed TLS (https://tls.mbed.org) - */ - -/* - * Minimal configuration for using TLS a part of Thread - * http://threadgroup.org/ - * - * Distinguishing features: - * - no RSA or classic DH, fully based on ECC - * - no X.509 - * - support for experimental EC J-PAKE key exchange - * - * See README.txt for usage instructions. - */ - -#ifndef MBEDTLS_CONFIG_H -#define MBEDTLS_CONFIG_H - -/* System support */ -#define MBEDTLS_HAVE_ASM - -/* mbed TLS feature support */ -#define MBEDTLS_AES_ROM_TABLES -#define MBEDTLS_ECP_DP_SECP256R1_ENABLED -#define MBEDTLS_ECP_NIST_OPTIM -#define MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED -#define MBEDTLS_SSL_MAX_FRAGMENT_LENGTH -#define MBEDTLS_SSL_PROTO_TLS1_2 -#define MBEDTLS_SSL_PROTO_DTLS -#define MBEDTLS_SSL_DTLS_ANTI_REPLAY -#define MBEDTLS_SSL_DTLS_HELLO_VERIFY -#define MBEDTLS_SSL_EXPORT_KEYS - -/* mbed TLS modules */ -#define MBEDTLS_AES_C -#define MBEDTLS_ASN1_PARSE_C -#define MBEDTLS_ASN1_WRITE_C -#define MBEDTLS_BIGNUM_C -#define MBEDTLS_CCM_C -#define MBEDTLS_CIPHER_C -#define MBEDTLS_CTR_DRBG_C -#define MBEDTLS_ECJPAKE_C -#define MBEDTLS_ECP_C -#define MBEDTLS_ENTROPY_C -#define MBEDTLS_HMAC_DRBG_C -#define MBEDTLS_MD_C -#define MBEDTLS_OID_C -#define MBEDTLS_PK_C -#define MBEDTLS_PK_PARSE_C -#define MBEDTLS_SHA256_C -#define MBEDTLS_SSL_COOKIE_C -#define MBEDTLS_SSL_CLI_C -#define MBEDTLS_SSL_SRV_C -#define MBEDTLS_SSL_TLS_C - -/* For tests using ssl-opt.sh */ -//#define MBEDTLS_NET_C -//#define MBEDTLS_TIMING_C - -/* Save RAM at the expense of ROM */ -#define MBEDTLS_AES_ROM_TABLES - -/* Save RAM by adjusting to our exact needs */ -#define MBEDTLS_ECP_MAX_BITS 256 -#define MBEDTLS_MPI_MAX_SIZE 32 // 256 bits is 32 bytes - -/* Save ROM and a few bytes of RAM by specifying our own ciphersuite list */ -#define MBEDTLS_SSL_CIPHERSUITES MBEDTLS_TLS_ECJPAKE_WITH_AES_128_CCM_8 - -#if defined(TARGET_LIKE_MBED) -#include "mbedtls/target_config.h" -#endif - -#include "mbedtls/check_config.h" - -#endif /* MBEDTLS_CONFIG_H */ diff --git a/source/override_flags.cmake b/source/override_flags.cmake deleted file mode 100644 index bf252babee..0000000000 --- a/source/override_flags.cmake +++ /dev/null @@ -1 +0,0 @@ -set_target_properties(coap-service PROPERTIES COMPILE_FLAGS "-DMBEDTLS_CONFIG_FILE=''") From 685e08d7d5e800738f483eb6cd1f1ea035e9728e Mon Sep 17 00:00:00 2001 From: Tero Heinonen Date: Tue, 12 Jan 2016 09:59:15 +0200 Subject: [PATCH 061/154] Warnings cleaned. --- coap-service/coap_service_api.h | 2 +- source/coap_message_handler.c | 18 +++--------------- source/coap_security_handler.c | 11 +++++++---- source/coap_service_api.c | 2 +- source/include/coap_message_handler.h | 2 +- 5 files changed, 13 insertions(+), 22 deletions(-) diff --git a/coap-service/coap_service_api.h b/coap-service/coap_service_api.h index cf4058439c..aa8a4fcf15 100755 --- a/coap-service/coap_service_api.h +++ b/coap-service/coap_service_api.h @@ -228,7 +228,7 @@ extern int8_t coap_service_unregister_uri(int8_t service_id, const char *uri); * * \return msg_id Id number of the current message. */ -extern uint16_t coap_service_request_send(int8_t service_id, uint8_t options, const uint8_t destination_addr[static 16], uint16_t destination_port, uint8_t msg_type, uint8_t msg_code, const char *uri, +extern uint16_t coap_service_request_send(int8_t service_id, uint8_t options, const uint8_t destination_addr[static 16], uint16_t destination_port, sn_coap_msg_type_e msg_type, sn_coap_msg_code_e msg_code, const char *uri, uint8_t cont_type, const uint8_t *payload_ptr, uint16_t payload_len, coap_service_response_recv *request_response_cb); /** diff --git a/source/coap_message_handler.c b/source/coap_message_handler.c index fee2c12834..0f9d976310 100644 --- a/source/coap_message_handler.c +++ b/source/coap_message_handler.c @@ -31,18 +31,6 @@ static void own_free(void *ptr) static NS_LIST_DEFINE(request_list, coap_transaction_t, link); -static coap_transaction_t *transaction_find_client(uint16_t msg_id) -{ - coap_transaction_t *this = NULL; - ns_list_foreach(coap_transaction_t, cur_ptr, &request_list) { - if (cur_ptr->msg_id == msg_id && cur_ptr->client_request) { - this = cur_ptr; - break; - } - } - return this; -} - static coap_transaction_t *transaction_find_client_by_token(uint8_t token[4]) { coap_transaction_t *this = NULL; @@ -246,7 +234,7 @@ int16_t coap_message_handler_coap_msg_process(coap_msg_handler_t *handle, int8_t } uint16_t coap_message_handler_request_send(coap_msg_handler_t *handle, int8_t service_id, uint8_t options, const uint8_t destination_addr[static 16], - uint16_t destination_port, uint8_t msg_type, uint8_t msg_code, const char *uri, + uint16_t destination_port, sn_coap_msg_type_e msg_type, sn_coap_msg_code_e msg_code, const char *uri, uint8_t cont_type, const uint8_t *payload_ptr, uint16_t payload_len, coap_message_handler_response_recv *request_response_cb) { coap_transaction_t *transaction_ptr; @@ -279,7 +267,7 @@ uint16_t coap_message_handler_request_send(coap_msg_handler_t *handle, int8_t se request.msg_code = msg_code; request.uri_path_ptr = (uint8_t *)uri; request.uri_path_len = strlen(uri); - coap_service_build_content_format(&request, cont_type); + coap_service_build_content_format(&request, (sn_coap_content_format_e)cont_type); do{ randLIB_get_n_bytes_random(token,4); @@ -344,7 +332,7 @@ int8_t coap_message_handler_response_send(coap_msg_handler_t *handle, int8_t ser } response->payload_len = payload_len; response->payload_ptr = (uint8_t *) payload_ptr; // Cast away const and trust that nsdl doesn't modify... - coap_service_build_content_format(response, content_type); + coap_service_build_content_format(response, (sn_coap_content_format_e)content_type); data_len = sn_coap_builder_calc_needed_packet_data_size(response); data_ptr = own_alloc(data_len); diff --git a/source/coap_security_handler.c b/source/coap_security_handler.c index c57e9b117a..032b367d81 100644 --- a/source/coap_security_handler.c +++ b/source/coap_security_handler.c @@ -352,10 +352,13 @@ int thread_security_send_close_alert(coap_security_t *sec) if( !sec ){ return -1; } - return mbedtls_ssl_close_notify(&sec->_ssl); - coap_security_handler_reset(sec); - coap_security_handler_init(sec); + if(!mbedtls_ssl_close_notify(&sec->_ssl)){ + coap_security_handler_reset(sec); + coap_security_handler_init(sec); + return 0; + } + return -1; } int coap_security_handler_read(coap_security_t *sec, unsigned char* buffer, size_t len){ @@ -392,7 +395,7 @@ int entropy_poll( void *ctx, unsigned char *output, size_t len, } memset(c, 0, len); for(uint16_t i=0; i < len; i++){ - c[i] = (char)randLIB_get_8bit; + *(c + 1) = (char)randLIB_get_8bit(); } memmove(output, c, len); *olen = len; diff --git a/source/coap_service_api.c b/source/coap_service_api.c index 650861a013..1c341783bc 100644 --- a/source/coap_service_api.c +++ b/source/coap_service_api.c @@ -437,7 +437,7 @@ int8_t coap_service_unregister_uri(int8_t service_id, const char *uri) return 0; } -uint16_t coap_service_request_send(int8_t service_id, uint8_t options, const uint8_t destination_addr[static 16], uint16_t destination_port, uint8_t msg_type, uint8_t msg_code, const char *uri, +uint16_t coap_service_request_send(int8_t service_id, uint8_t options, const uint8_t destination_addr[static 16], uint16_t destination_port, sn_coap_msg_type_e msg_type, sn_coap_msg_code_e msg_code, const char *uri, uint8_t cont_type, const uint8_t *payload_ptr, uint16_t payload_len, coap_service_response_recv *request_response_cb){ //TODO: coap_service_response_recv is an ugly cast, this should be refactored away + sn_coap_hdr_s MUST NOT be exposed to users of coap-service! //Callback would be still needed, but where to store callback? diff --git a/source/include/coap_message_handler.h b/source/include/coap_message_handler.h index 7ab67f2966..f5633d261f 100644 --- a/source/include/coap_message_handler.h +++ b/source/include/coap_message_handler.h @@ -57,7 +57,7 @@ extern int16_t coap_message_handler_coap_msg_process(coap_msg_handler_t *handle, uint8_t *data_ptr, uint16_t data_len, int16_t (cb)(int8_t, sn_coap_hdr_s *, coap_transaction_t *)); extern uint16_t coap_message_handler_request_send(coap_msg_handler_t *handle, int8_t service_id, uint8_t options, const uint8_t destination_addr[static 16], - uint16_t destination_port, uint8_t msg_type, uint8_t msg_code, const char *uri, uint8_t cont_type, + uint16_t destination_port, sn_coap_msg_type_e msg_type, sn_coap_msg_code_e msg_code, const char *uri, uint8_t cont_type, const uint8_t *payload_ptr, uint16_t payload_len, coap_message_handler_response_recv *request_response_cb); extern int8_t coap_message_handler_response_send(coap_msg_handler_t *handle, int8_t service_id, uint8_t options, sn_coap_hdr_s *request_ptr, sn_coap_msg_code_e message_code, From 20fa54967803d64c7abb94c067ae3a06ea4f476d Mon Sep 17 00:00:00 2001 From: Tero Heinonen Date: Tue, 12 Jan 2016 11:39:15 +0200 Subject: [PATCH 062/154] Unused variables removed. --- source/coap_connection_handler.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/coap_connection_handler.c b/source/coap_connection_handler.c index 226fbeb2b4..d7229d4887 100644 --- a/source/coap_connection_handler.c +++ b/source/coap_connection_handler.c @@ -395,7 +395,7 @@ static void secure_recv_sckt_msg(void *cb_res) uint8_t *pw = (uint8_t *)ns_dyn_mem_alloc(64); uint8_t pw_len; if( sock->parent->_get_password_cb && 0 == sock->parent->_get_password_cb(sock->listen_socket, src_address.address, src_address.identifier, pw, &pw_len)){ - int ret = coap_security_handler_connect(session->sec_handler, true, pw, pw_len); + coap_security_handler_connect(session->sec_handler, true, pw, pw_len); //TODO: error handling } ns_dyn_mem_free(pw); @@ -484,7 +484,7 @@ int coap_connection_handler_virtual_recv(thread_conn_handler_t *handler, uint8_t uint8_t *pw = (uint8_t *)ns_dyn_mem_alloc(64); uint8_t pw_len; if( sock->parent->_get_password_cb && 0 == sock->parent->_get_password_cb(sock->listen_socket, address, port, pw, &pw_len)){ - int ret = coap_security_handler_connect(session->sec_handler, true, pw, pw_len); + coap_security_handler_connect(session->sec_handler, true, pw, pw_len); //TODO: error handling ns_dyn_mem_free(pw); return 0; From 1620eb40618da195075b718fed988d7178c0857b Mon Sep 17 00:00:00 2001 From: Tero Heinonen Date: Tue, 12 Jan 2016 16:35:38 +0200 Subject: [PATCH 063/154] Stubs fixed --- test/coap-service/unittest/stub/coap_message_handler_stub.c | 2 +- test/coap-service/unittest/stub/coap_service_api_stub.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/test/coap-service/unittest/stub/coap_message_handler_stub.c b/test/coap-service/unittest/stub/coap_message_handler_stub.c index 1890237e9f..6a33ca3570 100644 --- a/test/coap-service/unittest/stub/coap_message_handler_stub.c +++ b/test/coap-service/unittest/stub/coap_message_handler_stub.c @@ -35,7 +35,7 @@ int16_t coap_message_handler_coap_msg_process(coap_msg_handler_t *handle, int8_t } uint16_t coap_message_handler_request_send(coap_msg_handler_t *handle, int8_t service_id, uint8_t options, const uint8_t destination_addr[static 16], - uint16_t destination_port, uint8_t msg_type, uint8_t msg_code, const char *uri, uint8_t cont_type, + uint16_t destination_port, sn_coap_msg_type_e msg_type, sn_coap_msg_code_e msg_code, const char *uri, uint8_t cont_type, const uint8_t *payload_ptr, uint16_t payload_len, coap_message_handler_response_recv *request_response_cb) { return coap_message_handler_stub.uint16_value; diff --git a/test/coap-service/unittest/stub/coap_service_api_stub.c b/test/coap-service/unittest/stub/coap_service_api_stub.c index 7b4f372b0c..4131668323 100644 --- a/test/coap-service/unittest/stub/coap_service_api_stub.c +++ b/test/coap-service/unittest/stub/coap_service_api_stub.c @@ -51,7 +51,7 @@ int8_t coap_service_unregister_uri(int8_t service_id, const char *uri) return 0; } -uint16_t coap_service_request_send(int8_t service_id, uint8_t options, const uint8_t destination_addr[static 16], uint16_t destination_port, uint8_t msg_type, uint8_t msg_code, const char *uri, +uint16_t coap_service_request_send(int8_t service_id, uint8_t options, const uint8_t destination_addr[static 16], uint16_t destination_port, sn_coap_msg_type_e msg_type, sn_coap_msg_code_e msg_code, const char *uri, uint8_t cont_type, const uint8_t *payload_ptr, uint16_t payload_len, coap_message_handler_response_recv *request_response_cb){ return 0; } From f7148c717076260b188b37c5574202e9b36a495d Mon Sep 17 00:00:00 2001 From: Tero Heinonen Date: Wed, 13 Jan 2016 08:38:05 +0200 Subject: [PATCH 064/154] unittests fixed --- .../test_coap_connection_handler.c | 20 +++++++++---------- .../test_coap_security_handler.c | 16 +++++++-------- .../stub/coap_security_handler_stub.c | 14 ++++++------- .../stub/coap_security_handler_stub.h | 2 +- 4 files changed, 26 insertions(+), 26 deletions(-) diff --git a/test/coap-service/unittest/coap_connection_handler/test_coap_connection_handler.c b/test/coap-service/unittest/coap_connection_handler/test_coap_connection_handler.c index 8a226d88e8..6819cebecd 100644 --- a/test/coap-service/unittest/coap_connection_handler/test_coap_connection_handler.c +++ b/test/coap-service/unittest/coap_connection_handler/test_coap_connection_handler.c @@ -122,8 +122,8 @@ bool test_coap_connection_handler_send_data() connection_handler_destroy(handler); - coap_security_handler_stub.sec_obj = (thread_security_t *)malloc(sizeof(thread_security_t)); - memset(coap_security_handler_stub.sec_obj, 0, sizeof(thread_security_t)); + coap_security_handler_stub.sec_obj = (coap_security_t *)malloc(sizeof(coap_security_t)); + memset(coap_security_handler_stub.sec_obj, 0, sizeof(coap_security_t)); coap_security_handler_stub.sec_obj->_remote_port = 22; memset(coap_security_handler_stub.sec_obj->_remote_address, 1, 16 ); @@ -199,8 +199,8 @@ bool test_coap_connection_handler_virtual_recv() return false; //handler->socket->data still in memory - coap_security_handler_stub.sec_obj = (thread_security_t *)malloc(sizeof(thread_security_t)); - memset(coap_security_handler_stub.sec_obj, 0, sizeof(thread_security_t)); + coap_security_handler_stub.sec_obj = (coap_security_t *)malloc(sizeof(coap_security_t)); + memset(coap_security_handler_stub.sec_obj, 0, sizeof(coap_security_t)); coap_security_handler_stub.sec_obj->_remote_port = 55; memset(coap_security_handler_stub.sec_obj->_remote_address, 4, 16 ); @@ -298,8 +298,8 @@ bool test_timer_callbacks() return false; //handler->socket->data still in memory - coap_security_handler_stub.sec_obj = (thread_security_t *)malloc(sizeof(thread_security_t)); - memset(coap_security_handler_stub.sec_obj, 0, sizeof(thread_security_t)); + coap_security_handler_stub.sec_obj = (coap_security_t *)malloc(sizeof(coap_security_t)); + memset(coap_security_handler_stub.sec_obj, 0, sizeof(coap_security_t)); coap_security_handler_stub.sec_obj->_remote_port = 55; memset(coap_security_handler_stub.sec_obj->_remote_address, 4, 16 ); coap_security_handler_stub.sec_obj->_timer_id = 5; @@ -351,8 +351,8 @@ bool test_socket_api_callbacks() socket_callback_t *sckt_data = (socket_callback_t *)malloc(sizeof(socket_callback_t)); memset(sckt_data, 0, sizeof(socket_callback_t)); - coap_security_handler_stub.sec_obj = (thread_security_t *)malloc(sizeof(thread_security_t)); - memset(coap_security_handler_stub.sec_obj, 0, sizeof(thread_security_t)); + coap_security_handler_stub.sec_obj = (coap_security_t *)malloc(sizeof(coap_security_t)); + memset(coap_security_handler_stub.sec_obj, 0, sizeof(coap_security_t)); socket_api_stub.int8_value = 0; nsdynmemlib_stub.returnCounter = 1; @@ -431,8 +431,8 @@ bool test_security_callbacks() socket_callback_t *sckt_data = (socket_callback_t *)malloc(sizeof(socket_callback_t)); memset(sckt_data, 0, sizeof(socket_callback_t)); - coap_security_handler_stub.sec_obj = (thread_security_t *)malloc(sizeof(thread_security_t)); - memset(coap_security_handler_stub.sec_obj, 0, sizeof(thread_security_t)); + coap_security_handler_stub.sec_obj = (coap_security_t *)malloc(sizeof(coap_security_t)); + memset(coap_security_handler_stub.sec_obj, 0, sizeof(coap_security_t)); nsdynmemlib_stub.returnCounter = 1; thread_conn_handler_t *handler = connection_handler_create(&receive_from_sock_cb, &send_to_sock_cb, NULL, NULL); diff --git a/test/coap-service/unittest/coap_security_handler/test_coap_security_handler.c b/test/coap-service/unittest/coap_security_handler/test_coap_security_handler.c index 7bf1b2c6a0..1036ee626f 100644 --- a/test/coap-service/unittest/coap_security_handler/test_coap_security_handler.c +++ b/test/coap-service/unittest/coap_security_handler/test_coap_security_handler.c @@ -50,11 +50,11 @@ bool test_thread_security_create() nsdynmemlib_stub.returnCounter = 2; mbedtls_stub.crt_expected_int = 0; - thread_security_t *handle = thread_security_create(1,2,&buf,12,&send_to_socket, &receive_from_socket, &start_timer_callback, &timer_status_callback); + coap_security_t *handle = thread_security_create(1,2,&buf,12,&send_to_socket, &receive_from_socket, &start_timer_callback, &timer_status_callback); if( NULL == handle ) return false; - ns_dyn_mem_free(handle); + thread_security_destroy(handle); return true; } @@ -64,7 +64,7 @@ bool test_thread_security_destroy() uint8_t buf[16]; nsdynmemlib_stub.returnCounter = 2; mbedtls_stub.crt_expected_int = 0; - thread_security_t *handle = thread_security_create(1,2,&buf,12,&send_to_socket, &receive_from_socket, &start_timer_callback, &timer_status_callback); + coap_security_t *handle = thread_security_create(1,2,&buf,12,&send_to_socket, &receive_from_socket, &start_timer_callback, &timer_status_callback); if( NULL == handle ) return false; @@ -77,7 +77,7 @@ bool test_coap_security_handler_connect() uint8_t buf[16]; nsdynmemlib_stub.returnCounter = 2; mbedtls_stub.crt_expected_int = 0; - thread_security_t *handle = thread_security_create(1,2,&buf,12,&send_to_socket, &receive_from_socket, &start_timer_callback, &timer_status_callback); + coap_security_t *handle = thread_security_create(1,2,&buf,12,&send_to_socket, &receive_from_socket, &start_timer_callback, &timer_status_callback); if( NULL == handle ) return false; @@ -174,7 +174,7 @@ bool test_coap_security_handler_continue_connecting() uint8_t buf[16]; nsdynmemlib_stub.returnCounter = 2; mbedtls_stub.crt_expected_int = 0; - thread_security_t *handle = thread_security_create(1,2,&buf,12,&send_to_socket, &receive_from_socket, &start_timer_callback, &timer_status_callback); + coap_security_t *handle = thread_security_create(1,2,&buf,12,&send_to_socket, &receive_from_socket, &start_timer_callback, &timer_status_callback); if( NULL == handle ) return false; @@ -222,7 +222,7 @@ bool test_coap_security_handler_send_message() uint8_t buf[16]; nsdynmemlib_stub.returnCounter = 2; mbedtls_stub.crt_expected_int = 0; - thread_security_t *handle = thread_security_create(1,2,&buf,12,&send_to_socket, &receive_from_socket, &start_timer_callback, &timer_status_callback); + coap_security_t *handle = thread_security_create(1,2,&buf,12,&send_to_socket, &receive_from_socket, &start_timer_callback, &timer_status_callback); if( NULL == handle ) return false; @@ -243,7 +243,7 @@ bool test_thread_security_send_close_alert() uint8_t buf[16]; nsdynmemlib_stub.returnCounter = 2; mbedtls_stub.crt_expected_int = 0; - thread_security_t *handle = thread_security_create(1,2,&buf,12,&send_to_socket, &receive_from_socket, &start_timer_callback, &timer_status_callback); + coap_security_t *handle = thread_security_create(1,2,&buf,12,&send_to_socket, &receive_from_socket, &start_timer_callback, &timer_status_callback); if( NULL == handle ) return false; @@ -263,7 +263,7 @@ bool test_coap_security_handler_read() uint8_t buf[16]; nsdynmemlib_stub.returnCounter = 2; mbedtls_stub.crt_expected_int = 0; - thread_security_t *handle = thread_security_create(1,2,&buf,12,&send_to_socket, &receive_from_socket, &start_timer_callback, &timer_status_callback); + coap_security_t *handle = thread_security_create(1,2,&buf,12,&send_to_socket, &receive_from_socket, &start_timer_callback, &timer_status_callback); if( NULL == handle ) return false; diff --git a/test/coap-service/unittest/stub/coap_security_handler_stub.c b/test/coap-service/unittest/stub/coap_security_handler_stub.c index bcf29c61f5..517fffdd98 100644 --- a/test/coap-service/unittest/stub/coap_security_handler_stub.c +++ b/test/coap-service/unittest/stub/coap_security_handler_stub.c @@ -12,7 +12,7 @@ thread_sec_def coap_security_handler_stub; -thread_security_t *thread_security_create(int8_t socket_id, int8_t timer_id, uint8_t *address_ptr, uint16_t port, +coap_security_t *thread_security_create(int8_t socket_id, int8_t timer_id, uint8_t *address_ptr, uint16_t port, int (*send_cb)(int8_t socket_id, uint8_t *address_ptr, uint16_t port, const unsigned char *, size_t), int (*receive_cb)(int8_t socket_id, unsigned char *, size_t), void (*start_timer_cb)(int8_t timer_id, uint32_t min, uint32_t fin), @@ -25,12 +25,12 @@ thread_security_t *thread_security_create(int8_t socket_id, int8_t timer_id, uin return coap_security_handler_stub.sec_obj; } -void thread_security_destroy(thread_security_t *sec) +void thread_security_destroy(coap_security_t *sec) { } -int coap_security_handler_connect(thread_security_t *sec, bool is_server, const unsigned char *pw, uint8_t len) +int coap_security_handler_connect(coap_security_t *sec, bool is_server, const unsigned char *pw, uint8_t len) { sec->_is_started = true; if( coap_security_handler_stub.counter >= 0){ @@ -39,7 +39,7 @@ int coap_security_handler_connect(thread_security_t *sec, bool is_server, const return coap_security_handler_stub.int_value; } -int coap_security_handler_continue_connecting(thread_security_t *sec) +int coap_security_handler_continue_connecting(coap_security_t *sec) { if( coap_security_handler_stub.counter >= 0){ return coap_security_handler_stub.values[coap_security_handler_stub.counter--]; @@ -49,7 +49,7 @@ int coap_security_handler_continue_connecting(thread_security_t *sec) } -int coap_security_handler_send_message(thread_security_t *sec, unsigned char *message, size_t len) +int coap_security_handler_send_message(coap_security_t *sec, unsigned char *message, size_t len) { if( coap_security_handler_stub.counter >= 0){ return coap_security_handler_stub.values[coap_security_handler_stub.counter--]; @@ -57,7 +57,7 @@ int coap_security_handler_send_message(thread_security_t *sec, unsigned char *me return coap_security_handler_stub.int_value; } -int thread_security_send_close_alert(thread_security_t *sec) +int thread_security_send_close_alert(coap_security_t *sec) { if( coap_security_handler_stub.counter >= 0){ return coap_security_handler_stub.values[coap_security_handler_stub.counter--]; @@ -65,7 +65,7 @@ int thread_security_send_close_alert(thread_security_t *sec) return coap_security_handler_stub.int_value; } -int coap_security_handler_read(thread_security_t *sec, unsigned char* buffer, size_t len) +int coap_security_handler_read(coap_security_t *sec, unsigned char* buffer, size_t len) { if( coap_security_handler_stub.counter >= 0){ return coap_security_handler_stub.values[coap_security_handler_stub.counter--]; diff --git a/test/coap-service/unittest/stub/coap_security_handler_stub.h b/test/coap-service/unittest/stub/coap_security_handler_stub.h index 83a4f7b0b2..f31a1bf42e 100644 --- a/test/coap-service/unittest/stub/coap_security_handler_stub.h +++ b/test/coap-service/unittest/stub/coap_security_handler_stub.h @@ -8,7 +8,7 @@ #include "coap_security_handler.h" typedef struct tsh{ - thread_security_t *sec_obj; + coap_security_t *sec_obj; int int_value; int counter; int values[10]; From c330fa884cc2d11e0b1806af4c52027cefaed04f Mon Sep 17 00:00:00 2001 From: Seppo Takalo Date: Thu, 14 Jan 2016 11:00:29 +0200 Subject: [PATCH 065/154] Update copyright headers. --- apache-2.0.txt | 2 +- coap-service/coap_service_api.h | 16 +++++++++++++++- source/coap_connection_handler.c | 2 +- source/coap_message_handler.c | 2 +- source/coap_security_handler.c | 2 +- source/coap_service_api.c | 2 +- source/include/coap_connection_handler.h | 16 +++++++++++++++- source/include/coap_message_handler.h | 16 +++++++++++++++- source/include/coap_security_handler.h | 16 +++++++++++++++- .../test_coap_connection_handler.c | 2 +- .../test_coap_connection_handler.h | 16 +++++++++++++++- .../test_coap_message_handler.c | 2 +- .../test_coap_message_handler.h | 16 +++++++++++++++- .../test_coap_security_handler.c | 2 +- .../test_coap_security_handler.h | 16 +++++++++++++++- .../coap_service_api/test_coap_service_api.c | 2 +- .../coap_service_api/test_coap_service_api.h | 16 +++++++++++++++- .../stub/coap_connection_handler_stub.c | 2 +- .../stub/coap_connection_handler_stub.h | 17 +++++++++++++++++ .../unittest/stub/coap_message_handler_stub.c | 2 +- .../unittest/stub/coap_message_handler_stub.h | 16 +++++++++++++++- .../unittest/stub/coap_security_handler_stub.c | 2 +- .../unittest/stub/coap_security_handler_stub.h | 16 +++++++++++++++- .../unittest/stub/coap_service_api_stub.c | 2 +- .../unittest/stub/eventOS_event_stub.c | 2 +- .../unittest/stub/eventOS_event_stub.h | 17 +++++++++++++++++ test/coap-service/unittest/stub/mbedtls_stub.c | 14 +------------- test/coap-service/unittest/stub/mbedtls_stub.h | 8 +++++--- test/coap-service/unittest/stub/ns_list_stub.c | 2 +- test/coap-service/unittest/stub/ns_timer_stub.c | 14 +------------- test/coap-service/unittest/stub/ns_timer_stub.h | 17 +++++++++++++++++ test/coap-service/unittest/stub/ns_trace.c | 2 +- test/coap-service/unittest/stub/ns_trace_stub.c | 2 +- .../unittest/stub/nsdynmemLIB_stub.c | 2 +- .../unittest/stub/nsdynmemLIB_stub.h | 16 +++++++++++++++- test/coap-service/unittest/stub/randLIB_stub.c | 2 +- .../unittest/stub/sn_coap_builder_stub.c | 14 +------------- .../unittest/stub/sn_coap_builder_stub.h | 17 +++++++++++++++++ .../unittest/stub/sn_coap_parser_stub.c | 14 +------------- .../unittest/stub/sn_coap_parser_stub.h | 17 +++++++++++++++++ .../unittest/stub/sn_coap_protocol_stub.c | 2 +- .../unittest/stub/sn_coap_protocol_stub.h | 17 +++++++++++++++++ .../unittest/stub/socket_api_stub.c | 2 +- .../unittest/stub/socket_api_stub.h | 16 +++++++++++++++- .../unittest/stub/system_timer_stub.c | 2 +- 45 files changed, 313 insertions(+), 89 deletions(-) mode change 100755 => 100644 coap-service/coap_service_api.h diff --git a/apache-2.0.txt b/apache-2.0.txt index 0e4cf3ee99..a2fecaf5f8 100644 --- a/apache-2.0.txt +++ b/apache-2.0.txt @@ -53,4 +53,4 @@ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. -END OF TERMS AND CONDITIONS \ No newline at end of file +END OF TERMS AND CONDITIONS diff --git a/coap-service/coap_service_api.h b/coap-service/coap_service_api.h old mode 100755 new mode 100644 index aa8a4fcf15..83560cfaee --- a/coap-service/coap_service_api.h +++ b/coap-service/coap_service_api.h @@ -1,5 +1,19 @@ /* - * Copyright (c) 2015 ARM Limited. All rights reserved. + * Copyright (c) 2015-2016 ARM Limited. All Rights Reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * 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 COAP_SERVICE_API_H_ diff --git a/source/coap_connection_handler.c b/source/coap_connection_handler.c index d7229d4887..6eb5f35dce 100644 --- a/source/coap_connection_handler.c +++ b/source/coap_connection_handler.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015 ARM Limited. All rights reserved. + * Copyright (c) 2015-2016 ARM Limited. All Rights Reserved. */ #include diff --git a/source/coap_message_handler.c b/source/coap_message_handler.c index 0f9d976310..c629821145 100644 --- a/source/coap_message_handler.c +++ b/source/coap_message_handler.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015 ARM Limited. All rights reserved. + * Copyright (c) 2015-2016 ARM Limited. All Rights Reserved. */ #include diff --git a/source/coap_security_handler.c b/source/coap_security_handler.c index 032b367d81..f23110eae7 100644 --- a/source/coap_security_handler.c +++ b/source/coap_security_handler.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015 ARM Limited. All rights reserved. + * Copyright (c) 2015-2016 ARM Limited. All Rights Reserved. */ #include diff --git a/source/coap_service_api.c b/source/coap_service_api.c index 1c341783bc..4b1394b2a4 100644 --- a/source/coap_service_api.c +++ b/source/coap_service_api.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015 ARM Limited. All rights reserved. + * Copyright (c) 2015-2016 ARM Limited. All Rights Reserved. */ diff --git a/source/include/coap_connection_handler.h b/source/include/coap_connection_handler.h index 0bb7b9aafb..8d01f46eef 100644 --- a/source/include/coap_connection_handler.h +++ b/source/include/coap_connection_handler.h @@ -1,5 +1,19 @@ /* - * Copyright (c) 2015 ARM Limited. All rights reserved. + * Copyright (c) 2015 ARM Limited. All Rights Reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * 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 __COAP_CONNECTION_HANDLER_H__ diff --git a/source/include/coap_message_handler.h b/source/include/coap_message_handler.h index f5633d261f..05ac03fbd9 100644 --- a/source/include/coap_message_handler.h +++ b/source/include/coap_message_handler.h @@ -1,5 +1,19 @@ /* - * Copyright (c) 2015 ARM Limited. All rights reserved. + * Copyright (c) 2015-2016 ARM Limited. All Rights Reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * 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 __COAP_MESSAGE_HANDLER_H__ diff --git a/source/include/coap_security_handler.h b/source/include/coap_security_handler.h index 865d96bf63..2b8ae49fc7 100644 --- a/source/include/coap_security_handler.h +++ b/source/include/coap_security_handler.h @@ -1,5 +1,19 @@ /* - * Copyright (c) 2015 ARM Limited. All rights reserved. + * Copyright (c) 2015-2016 ARM Limited. All Rights Reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * 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 __COAP_SECURITY_HANDLER_H__ #define __COAP_SECURITY_HANDLER_H__ diff --git a/test/coap-service/unittest/coap_connection_handler/test_coap_connection_handler.c b/test/coap-service/unittest/coap_connection_handler/test_coap_connection_handler.c index 6819cebecd..35c2090c23 100644 --- a/test/coap-service/unittest/coap_connection_handler/test_coap_connection_handler.c +++ b/test/coap-service/unittest/coap_connection_handler/test_coap_connection_handler.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015 ARM. All rights reserved. + * Copyright (c) 2015-2016 ARM Limited. All Rights Reserved. */ #include "test_coap_connection_handler.h" #include diff --git a/test/coap-service/unittest/coap_connection_handler/test_coap_connection_handler.h b/test/coap-service/unittest/coap_connection_handler/test_coap_connection_handler.h index 7398a2e276..f13725af58 100644 --- a/test/coap-service/unittest/coap_connection_handler/test_coap_connection_handler.h +++ b/test/coap-service/unittest/coap_connection_handler/test_coap_connection_handler.h @@ -1,5 +1,19 @@ /* - * Copyright (c) 2015 ARM. All rights reserved. + * Copyright (c) 2015 ARM Limited. All Rights Reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * 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 TEST_COAP_CONNECTION_HANDLER_H #define TEST_COAP_CONNECTION_HANDLER_H diff --git a/test/coap-service/unittest/coap_message_handler/test_coap_message_handler.c b/test/coap-service/unittest/coap_message_handler/test_coap_message_handler.c index 827fdc7b60..9210150458 100644 --- a/test/coap-service/unittest/coap_message_handler/test_coap_message_handler.c +++ b/test/coap-service/unittest/coap_message_handler/test_coap_message_handler.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015 ARM. All rights reserved. + * Copyright (c) 2015 ARM Limited. All Rights Reserved. */ #include "test_coap_message_handler.h" #include diff --git a/test/coap-service/unittest/coap_message_handler/test_coap_message_handler.h b/test/coap-service/unittest/coap_message_handler/test_coap_message_handler.h index 2b850a0afa..93a18f1ccd 100644 --- a/test/coap-service/unittest/coap_message_handler/test_coap_message_handler.h +++ b/test/coap-service/unittest/coap_message_handler/test_coap_message_handler.h @@ -1,5 +1,19 @@ /* - * Copyright (c) 2015 ARM. All rights reserved. + * Copyright (c) 2015 ARM Limited. All Rights Reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * 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 TEST_COAP_MESSAGE_HANDLER_H #define TEST_COAP_MESSAGE_HANDLER_H diff --git a/test/coap-service/unittest/coap_security_handler/test_coap_security_handler.c b/test/coap-service/unittest/coap_security_handler/test_coap_security_handler.c index 1036ee626f..b3ac5a495e 100644 --- a/test/coap-service/unittest/coap_security_handler/test_coap_security_handler.c +++ b/test/coap-service/unittest/coap_security_handler/test_coap_security_handler.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015 ARM. All rights reserved. + * Copyright (c) 2015-2016 ARM Limited. All Rights Reserved. */ #include "test_coap_security_handler.h" #include "coap_security_handler.h" diff --git a/test/coap-service/unittest/coap_security_handler/test_coap_security_handler.h b/test/coap-service/unittest/coap_security_handler/test_coap_security_handler.h index d0a4e45380..1b06bed343 100644 --- a/test/coap-service/unittest/coap_security_handler/test_coap_security_handler.h +++ b/test/coap-service/unittest/coap_security_handler/test_coap_security_handler.h @@ -1,5 +1,19 @@ /* - * Copyright (c) 2015 ARM. All rights reserved. + * Copyright (c) 2015 ARM Limited. All Rights Reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * 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 TEST_COAP_SECURITY_HANDLER_H #define TEST_COAP_SECURITY_HANDLER_H diff --git a/test/coap-service/unittest/coap_service_api/test_coap_service_api.c b/test/coap-service/unittest/coap_service_api/test_coap_service_api.c index a9130a37a4..7c91ec085d 100644 --- a/test/coap-service/unittest/coap_service_api/test_coap_service_api.c +++ b/test/coap-service/unittest/coap_service_api/test_coap_service_api.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015 ARM. All rights reserved. + * Copyright (c) 2015 ARM Limited. All Rights Reserved. */ #include "test_coap_service_api.h" #include diff --git a/test/coap-service/unittest/coap_service_api/test_coap_service_api.h b/test/coap-service/unittest/coap_service_api/test_coap_service_api.h index 2897c9a89b..94916476c3 100644 --- a/test/coap-service/unittest/coap_service_api/test_coap_service_api.h +++ b/test/coap-service/unittest/coap_service_api/test_coap_service_api.h @@ -1,5 +1,19 @@ /* - * Copyright (c) 2015 ARM. All rights reserved. + * Copyright (c) 2015 ARM Limited. All Rights Reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * 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 TEST_COAP_SERVICE_API_H #define TEST_COAP_SERVICE_API_H diff --git a/test/coap-service/unittest/stub/coap_connection_handler_stub.c b/test/coap-service/unittest/stub/coap_connection_handler_stub.c index 7390587ad8..43e72d49e4 100644 --- a/test/coap-service/unittest/stub/coap_connection_handler_stub.c +++ b/test/coap-service/unittest/stub/coap_connection_handler_stub.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015 ARM Limited. All rights reserved. + * Copyright (c) 2015 ARM Limited. All Rights Reserved. */ #include diff --git a/test/coap-service/unittest/stub/coap_connection_handler_stub.h b/test/coap-service/unittest/stub/coap_connection_handler_stub.h index 1211f2d52e..61caf71744 100644 --- a/test/coap-service/unittest/stub/coap_connection_handler_stub.h +++ b/test/coap-service/unittest/stub/coap_connection_handler_stub.h @@ -1,3 +1,20 @@ +/* + * Copyright (c) 2015 ARM Limited. All Rights Reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * 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 __COAP_CONNECTION_HANDLER_STUB_H__ #define __COAP_CONNECTION_HANDLER_STUB_H__ diff --git a/test/coap-service/unittest/stub/coap_message_handler_stub.c b/test/coap-service/unittest/stub/coap_message_handler_stub.c index 6a33ca3570..a79a267996 100644 --- a/test/coap-service/unittest/stub/coap_message_handler_stub.c +++ b/test/coap-service/unittest/stub/coap_message_handler_stub.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015 ARM Limited. All rights reserved. + * Copyright (c) 2015-2016 ARM Limited. All Rights Reserved. */ #include "coap_message_handler_stub.h" diff --git a/test/coap-service/unittest/stub/coap_message_handler_stub.h b/test/coap-service/unittest/stub/coap_message_handler_stub.h index 6e0b74fd55..c8c37d142c 100644 --- a/test/coap-service/unittest/stub/coap_message_handler_stub.h +++ b/test/coap-service/unittest/stub/coap_message_handler_stub.h @@ -1,5 +1,19 @@ /* - * Copyright (c) 2015 ARM Limited. All rights reserved. + * Copyright (c) 2015 ARM Limited. All Rights Reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * 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 __COAP_MESSAGE_HANDLER_STUB_H__ #define __COAP_MESSAGE_HANDLER_STUB_H__ diff --git a/test/coap-service/unittest/stub/coap_security_handler_stub.c b/test/coap-service/unittest/stub/coap_security_handler_stub.c index 517fffdd98..1b87ef23c4 100644 --- a/test/coap-service/unittest/stub/coap_security_handler_stub.c +++ b/test/coap-service/unittest/stub/coap_security_handler_stub.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015 ARM Limited. All rights reserved. + * Copyright (c) 2015-2016 ARM Limited. All Rights Reserved. */ #include diff --git a/test/coap-service/unittest/stub/coap_security_handler_stub.h b/test/coap-service/unittest/stub/coap_security_handler_stub.h index f31a1bf42e..2316ffff7d 100644 --- a/test/coap-service/unittest/stub/coap_security_handler_stub.h +++ b/test/coap-service/unittest/stub/coap_security_handler_stub.h @@ -1,5 +1,19 @@ /* - * Copyright (c) 2015 ARM Limited. All rights reserved. + * Copyright (c) 2015-2016 ARM Limited. All Rights Reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * 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 __COAP_SECURITY_HANDLER_STUB_H__ #define __COAP_SECURITY_HANDLER_STUB_H__ diff --git a/test/coap-service/unittest/stub/coap_service_api_stub.c b/test/coap-service/unittest/stub/coap_service_api_stub.c index 4131668323..3624937022 100644 --- a/test/coap-service/unittest/stub/coap_service_api_stub.c +++ b/test/coap-service/unittest/stub/coap_service_api_stub.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015 ARM Limited. All rights reserved. + * Copyright (c) 2015-2016 ARM Limited. All Rights Reserved. */ diff --git a/test/coap-service/unittest/stub/eventOS_event_stub.c b/test/coap-service/unittest/stub/eventOS_event_stub.c index e70337ebe2..b050d35078 100644 --- a/test/coap-service/unittest/stub/eventOS_event_stub.c +++ b/test/coap-service/unittest/stub/eventOS_event_stub.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015 ARM Limited. All rights reserved. + * Copyright (c) 2015 ARM Limited. All Rights Reserved. */ #include diff --git a/test/coap-service/unittest/stub/eventOS_event_stub.h b/test/coap-service/unittest/stub/eventOS_event_stub.h index 603fda58af..fb2a9fc83f 100644 --- a/test/coap-service/unittest/stub/eventOS_event_stub.h +++ b/test/coap-service/unittest/stub/eventOS_event_stub.h @@ -1,3 +1,20 @@ +/* + * Copyright (c) 2015 ARM Limited. All Rights Reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * 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 __EVENTOS_EVENT_STUB_H__ #define __EVENTOS_EVENT_STUB_H__ diff --git a/test/coap-service/unittest/stub/mbedtls_stub.c b/test/coap-service/unittest/stub/mbedtls_stub.c index ab5afa27ba..806df9a6ba 100644 --- a/test/coap-service/unittest/stub/mbedtls_stub.c +++ b/test/coap-service/unittest/stub/mbedtls_stub.c @@ -1,17 +1,5 @@ /* - * Copyright (c) 2015 ARM Limited. All rights reserved. - * SPDX-License-Identifier: Apache-2.0 - * 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. + * Copyright (c) 2015 ARM Limited. All Rights Reserved. */ #include "mbedtls_stub.h" diff --git a/test/coap-service/unittest/stub/mbedtls_stub.h b/test/coap-service/unittest/stub/mbedtls_stub.h index a0afdd3dda..0c28668131 100644 --- a/test/coap-service/unittest/stub/mbedtls_stub.h +++ b/test/coap-service/unittest/stub/mbedtls_stub.h @@ -1,14 +1,16 @@ /* - * Copyright (c) 2015 ARM Limited. All rights reserved. + * Copyright (c) 2015 ARM Limited. All Rights Reserved. + * * SPDX-License-Identifier: Apache-2.0 - * Licensed under the Apache License, Version 2.0 (the License); you may + * + * 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 + * 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. diff --git a/test/coap-service/unittest/stub/ns_list_stub.c b/test/coap-service/unittest/stub/ns_list_stub.c index 2283f0f909..2d5e650d96 100644 --- a/test/coap-service/unittest/stub/ns_list_stub.c +++ b/test/coap-service/unittest/stub/ns_list_stub.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015 ARM Limited. All rights reserved. + * Copyright (c) 2015 ARM Limited. All Rights Reserved. */ #define NS_LIST_FN extern diff --git a/test/coap-service/unittest/stub/ns_timer_stub.c b/test/coap-service/unittest/stub/ns_timer_stub.c index 40ba9fd692..f543d941b0 100644 --- a/test/coap-service/unittest/stub/ns_timer_stub.c +++ b/test/coap-service/unittest/stub/ns_timer_stub.c @@ -1,17 +1,5 @@ /* - * Copyright (c) 2014-2015 ARM Limited. All rights reserved. - * SPDX-License-Identifier: Apache-2.0 - * 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. + * Copyright (c) 2014-2015 ARM Limited. All Rights Reserved. */ #include "ns_types.h" #include "ns_list.h" diff --git a/test/coap-service/unittest/stub/ns_timer_stub.h b/test/coap-service/unittest/stub/ns_timer_stub.h index 5f970d793a..5db49ded5b 100644 --- a/test/coap-service/unittest/stub/ns_timer_stub.h +++ b/test/coap-service/unittest/stub/ns_timer_stub.h @@ -1,3 +1,20 @@ +/* + * Copyright (c) 2015 ARM Limited. All Rights Reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * 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 __NS_TIMER_STUB_H__ #define __NS_TIMER_STUB_H__ diff --git a/test/coap-service/unittest/stub/ns_trace.c b/test/coap-service/unittest/stub/ns_trace.c index 7e0737f8e9..e9aa39dfbe 100644 --- a/test/coap-service/unittest/stub/ns_trace.c +++ b/test/coap-service/unittest/stub/ns_trace.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013-2015 ARM Limited. All rights reserved. + * Copyright (c) 2013-2015 ARM Limited. All Rights Reserved. */ #include "config.h" #include "ns_types.h" diff --git a/test/coap-service/unittest/stub/ns_trace_stub.c b/test/coap-service/unittest/stub/ns_trace_stub.c index 1c45fd401e..8fa73e0aa0 100644 --- a/test/coap-service/unittest/stub/ns_trace_stub.c +++ b/test/coap-service/unittest/stub/ns_trace_stub.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2015 ARM Limited. All rights reserved. + * Copyright (c) 2014-2015 ARM Limited. All Rights Reserved. */ #include #include diff --git a/test/coap-service/unittest/stub/nsdynmemLIB_stub.c b/test/coap-service/unittest/stub/nsdynmemLIB_stub.c index 092c798bcb..429c7e2337 100644 --- a/test/coap-service/unittest/stub/nsdynmemLIB_stub.c +++ b/test/coap-service/unittest/stub/nsdynmemLIB_stub.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2015 ARM Limited. All rights reserved. + * Copyright (c) 2014-2015 ARM Limited. All Rights Reserved. */ #include "nsdynmemLIB_stub.h" #include diff --git a/test/coap-service/unittest/stub/nsdynmemLIB_stub.h b/test/coap-service/unittest/stub/nsdynmemLIB_stub.h index d0838b038e..46e5fc0e43 100644 --- a/test/coap-service/unittest/stub/nsdynmemLIB_stub.h +++ b/test/coap-service/unittest/stub/nsdynmemLIB_stub.h @@ -1,5 +1,19 @@ /* - * Copyright (c) 2015 ARM Limited. All rights reserved. + * Copyright (c) 2015 ARM Limited. All Rights Reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * 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 __NSDYNMEMLIB_STUB_H__ #define __NSDYNMEMLIB_STUB_H__ diff --git a/test/coap-service/unittest/stub/randLIB_stub.c b/test/coap-service/unittest/stub/randLIB_stub.c index 5d9f15ff25..2b4ae0acab 100644 --- a/test/coap-service/unittest/stub/randLIB_stub.c +++ b/test/coap-service/unittest/stub/randLIB_stub.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2015 ARM Limited. All rights reserved. + * Copyright (c) 2014-2015 ARM Limited. All Rights Reserved. */ #include #include diff --git a/test/coap-service/unittest/stub/sn_coap_builder_stub.c b/test/coap-service/unittest/stub/sn_coap_builder_stub.c index 38e5288283..1d30a79cbc 100644 --- a/test/coap-service/unittest/stub/sn_coap_builder_stub.c +++ b/test/coap-service/unittest/stub/sn_coap_builder_stub.c @@ -1,17 +1,5 @@ /* - * Copyright (c) 2011-2015 ARM Limited. All rights reserved. - * SPDX-License-Identifier: Apache-2.0 - * 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. + * Copyright (c) 2011-2015 ARM Limited. All Rights Reserved. */ /** diff --git a/test/coap-service/unittest/stub/sn_coap_builder_stub.h b/test/coap-service/unittest/stub/sn_coap_builder_stub.h index 6ca30584d2..7ddc9c1944 100644 --- a/test/coap-service/unittest/stub/sn_coap_builder_stub.h +++ b/test/coap-service/unittest/stub/sn_coap_builder_stub.h @@ -1,3 +1,20 @@ +/* + * Copyright (c) 2015 ARM Limited. All Rights Reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * 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 __SN_COAP_BUILDER_STUB_H__ #define __SN_COAP_BUILDER_STUB_H__ diff --git a/test/coap-service/unittest/stub/sn_coap_parser_stub.c b/test/coap-service/unittest/stub/sn_coap_parser_stub.c index 6d9e73383b..327b74998e 100644 --- a/test/coap-service/unittest/stub/sn_coap_parser_stub.c +++ b/test/coap-service/unittest/stub/sn_coap_parser_stub.c @@ -1,17 +1,5 @@ /* - * Copyright (c) 2011-2015 ARM Limited. All rights reserved. - * SPDX-License-Identifier: Apache-2.0 - * 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. + * Copyright (c) 2011-2015 ARM Limited. All Rights Reserved. */ /** diff --git a/test/coap-service/unittest/stub/sn_coap_parser_stub.h b/test/coap-service/unittest/stub/sn_coap_parser_stub.h index eb6f13b162..72be957164 100644 --- a/test/coap-service/unittest/stub/sn_coap_parser_stub.h +++ b/test/coap-service/unittest/stub/sn_coap_parser_stub.h @@ -1,3 +1,20 @@ +/* + * Copyright (c) 2015 ARM Limited. All Rights Reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * 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 __SN_COAP_PARSER_STUB_H__ #define __SN_COAP_PARSER_STUB_H__ diff --git a/test/coap-service/unittest/stub/sn_coap_protocol_stub.c b/test/coap-service/unittest/stub/sn_coap_protocol_stub.c index ee5bac8f63..f72a233a43 100644 --- a/test/coap-service/unittest/stub/sn_coap_protocol_stub.c +++ b/test/coap-service/unittest/stub/sn_coap_protocol_stub.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011-2015 ARM. All rights reserved. + * Copyright (c) 2011-2015 ARM Limited. All Rights Reserved. */ diff --git a/test/coap-service/unittest/stub/sn_coap_protocol_stub.h b/test/coap-service/unittest/stub/sn_coap_protocol_stub.h index 73f10d6987..0f8a67260d 100644 --- a/test/coap-service/unittest/stub/sn_coap_protocol_stub.h +++ b/test/coap-service/unittest/stub/sn_coap_protocol_stub.h @@ -1,3 +1,20 @@ +/* + * Copyright (c) 2015 ARM Limited. All Rights Reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * 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 __SN_COAP_PROTOCOL_STUB_H__ #define __SN_COAP_PROTOCOL_STUB_H__ diff --git a/test/coap-service/unittest/stub/socket_api_stub.c b/test/coap-service/unittest/stub/socket_api_stub.c index 62304deb1b..685f27d77f 100644 --- a/test/coap-service/unittest/stub/socket_api_stub.c +++ b/test/coap-service/unittest/stub/socket_api_stub.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015 ARM Limited. All rights reserved. + * Copyright (c) 2015 ARM Limited. All Rights Reserved. */ #include "socket_api.h" #include "socket_api_stub.h" diff --git a/test/coap-service/unittest/stub/socket_api_stub.h b/test/coap-service/unittest/stub/socket_api_stub.h index 195d5eb86f..bc7dacf4a1 100644 --- a/test/coap-service/unittest/stub/socket_api_stub.h +++ b/test/coap-service/unittest/stub/socket_api_stub.h @@ -1,5 +1,19 @@ /* - * Copyright (c) 2015 ARM Limited. All rights reserved. + * Copyright (c) 2015 ARM Limited. All Rights Reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * 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 __SOCKET_API_STUB_H__ #define __SOCKET_API_STUB_H__ diff --git a/test/coap-service/unittest/stub/system_timer_stub.c b/test/coap-service/unittest/stub/system_timer_stub.c index e3bccd921b..7de1ab64f9 100644 --- a/test/coap-service/unittest/stub/system_timer_stub.c +++ b/test/coap-service/unittest/stub/system_timer_stub.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2015 ARM Limited. All rights reserved. + * Copyright (c) 2014-2015 ARM Limited. All Rights Reserved. */ #include "ns_types.h" #include "timer_sys.h" From 52f3738b82d769689e0f3e2047edb86294019e93 Mon Sep 17 00:00:00 2001 From: Seppo Takalo Date: Thu, 14 Jan 2016 11:01:28 +0200 Subject: [PATCH 066/154] version v1.0.1 --- module.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module.json b/module.json index 0fe1bbb866..93b3ec2439 100644 --- a/module.json +++ b/module.json @@ -1,6 +1,6 @@ { "name": "coap-service", - "version": "1.0.0", + "version": "1.0.1", "description": "CoAP Service library", "keywords": [ "coap", From cbb678f25bec95d5a9e37697392a6182d6c7cf05 Mon Sep 17 00:00:00 2001 From: Tero Heinonen Date: Mon, 18 Jan 2016 15:23:20 +0200 Subject: [PATCH 067/154] random fix version v1.0.2 --- module.json | 2 +- source/coap_security_handler.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/module.json b/module.json index 93b3ec2439..7af482c764 100644 --- a/module.json +++ b/module.json @@ -1,6 +1,6 @@ { "name": "coap-service", - "version": "1.0.1", + "version": "1.0.2", "description": "CoAP Service library", "keywords": [ "coap", diff --git a/source/coap_security_handler.c b/source/coap_security_handler.c index f23110eae7..fd03b1537a 100644 --- a/source/coap_security_handler.c +++ b/source/coap_security_handler.c @@ -395,7 +395,7 @@ int entropy_poll( void *ctx, unsigned char *output, size_t len, } memset(c, 0, len); for(uint16_t i=0; i < len; i++){ - *(c + 1) = (char)randLIB_get_8bit(); + *(c + i) = (char)randLIB_get_8bit(); } memmove(output, c, len); *olen = len; From a32c3614b437d065e4115e6d3decc5e1e2a2203b Mon Sep 17 00:00:00 2001 From: Antti Kauppila Date: Wed, 20 Jan 2016 11:45:25 +0200 Subject: [PATCH 068/154] Combined security stuff from mbed-client --- source/coap_connection_handler.c | 32 +- source/coap_security_handler.c | 280 ++++++++++++++---- source/include/coap_security_handler.h | 47 ++- .../test_coap_connection_handler.c | 20 +- .../unittest/coap_security_handler/Makefile | 2 +- .../test_coap_security_handler.c | 46 +-- test/coap-service/unittest/run_tests | 1 + .../stub/coap_security_handler_stub.c | 14 +- .../stub/coap_security_handler_stub.h | 2 +- 9 files changed, 331 insertions(+), 113 deletions(-) diff --git a/source/coap_connection_handler.c b/source/coap_connection_handler.c index 6eb5f35dce..201b8f0c81 100644 --- a/source/coap_connection_handler.c +++ b/source/coap_connection_handler.c @@ -49,7 +49,7 @@ typedef struct secure_timer_s { } secure_timer_t; typedef struct secure_session { - coap_security_t *sec_handler; //owned + thread_security_t *sec_handler; //owned internal_socket_t *parent; //not owned secure_timer_t timer; @@ -79,8 +79,13 @@ static secure_session_t *secure_session_create(internal_socket_t *parent, uint8_ return NULL; } - this->sec_handler = thread_security_create(parent->listen_socket, this->timer.id, address_ptr, port, &send_to_socket, - &receive_from_socket, &start_timer, &timer_status); + SecureConnectionMode mode = PSK; +#if defined(MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED) + mode = ECJPAKE; +#endif + + this->sec_handler = thread_security_create(parent->listen_socket, this->timer.id, address_ptr, port, mode, + &send_to_socket, &receive_from_socket, &start_timer, &timer_status); if( !this->sec_handler ){ ns_dyn_mem_free(this); return NULL; @@ -318,6 +323,9 @@ static void timer_cb(int8_t timer_id, uint16_t slots) /* Intermediate expiry */ sec->timer.state = TIMER_STATE_INT_EXPIRY; } + //TODO: In case of DTLS and count == 1 || 4 we must call continue connecting of security so + //that mbedtls can handle timeout logic: resending etc... + //Not done, because timer should be refactored to be platform specific! } } @@ -395,7 +403,11 @@ static void secure_recv_sckt_msg(void *cb_res) uint8_t *pw = (uint8_t *)ns_dyn_mem_alloc(64); uint8_t pw_len; if( sock->parent->_get_password_cb && 0 == sock->parent->_get_password_cb(sock->listen_socket, src_address.address, src_address.identifier, pw, &pw_len)){ - coap_security_handler_connect(session->sec_handler, true, pw, pw_len); + //TODO: get_password_cb should support certs and PSK also + thread_keys_t keys; + keys._priv = pw; + keys._priv_len = pw_len; + coap_security_handler_connect_non_blocking(session->sec_handler, true, DTLS, keys); //TODO: error handling } ns_dyn_mem_free(pw); @@ -484,7 +496,11 @@ int coap_connection_handler_virtual_recv(thread_conn_handler_t *handler, uint8_t uint8_t *pw = (uint8_t *)ns_dyn_mem_alloc(64); uint8_t pw_len; if( sock->parent->_get_password_cb && 0 == sock->parent->_get_password_cb(sock->listen_socket, address, port, pw, &pw_len)){ - coap_security_handler_connect(session->sec_handler, true, pw, pw_len); + //TODO: get_password_cb should support certs and PSK also + thread_keys_t keys; + keys._priv = pw; + keys._priv_len = pw_len; + coap_security_handler_connect_non_blocking(session->sec_handler, true, DTLS, keys); //TODO: error handling ns_dyn_mem_free(pw); return 0; @@ -658,7 +674,11 @@ int coap_connection_handler_send_data(thread_conn_handler_t *handler, ns_address } uint8_t pw_len; if( handler->_get_password_cb && 0 == handler->_get_password_cb(handler->socket->listen_socket, dest_addr->address, dest_addr->identifier, pw, &pw_len)){ - coap_security_handler_connect(session->sec_handler, false, pw, pw_len); + //TODO: get_password_cb should support certs and PSK also + thread_keys_t keys; + keys._priv = pw; + keys._priv_len = pw_len; + coap_security_handler_connect_non_blocking(session->sec_handler, false, DTLS, keys); ns_dyn_mem_free(pw); return -2; }else{ diff --git a/source/coap_security_handler.c b/source/coap_security_handler.c index fd03b1537a..909c7bd1b9 100644 --- a/source/coap_security_handler.c +++ b/source/coap_security_handler.c @@ -18,28 +18,43 @@ #include "randLIB.h" #include "mbedtls/ssl_ciphersuites.h" - -const int PSK_SUITES[] = { +#if defined(MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED) +const int ECJPAKE_SUITES[] = { MBEDTLS_TLS_ECJPAKE_WITH_AES_128_CCM_8, 0 }; +#endif + +const static int PSK_SUITES[] = { + MBEDTLS_TLS_PSK_WITH_AES_128_CBC_SHA256, + MBEDTLS_TLS_PSK_WITH_AES_256_CCM_8, + MBEDTLS_TLS_PSK_WITH_AES_128_CCM_8, + 0 +}; static void set_timer( void *sec_obj, uint32_t int_ms, uint32_t fin_ms ); static int get_timer( void *sec_obj ); +static int coap_security_handler_configure_keys( thread_security_t *sec, thread_keys_t keys ); int entropy_poll( void *data, unsigned char *output, size_t len, size_t *olen ); //Point these back to M2MConnectionHandler!!! int f_send( void *ctx, const unsigned char *buf, size_t len ); int f_recv(void *ctx, unsigned char *buf, size_t len); -static int coap_security_handler_init(coap_security_t *sec){ +static int coap_security_handler_init(thread_security_t *sec){ const char *pers = "dtls_client"; mbedtls_ssl_init( &sec->_ssl ); mbedtls_ssl_config_init( &sec->_conf ); mbedtls_ctr_drbg_init( &sec->_ctr_drbg ); mbedtls_entropy_init( &sec->_entropy ); +#if defined(MBEDTLS_X509_CRT_PARSE_C) + mbedtls_x509_crt_init( &sec->_cacert ); + mbedtls_x509_crt_init( &sec->_owncert ); +#endif + mbedtls_pk_init( &sec->_pkey ); + memset(&sec->_cookie, 0, sizeof(simple_cookie_t)); memset(&sec->_keyblk, 0, sizeof(key_block_t)); @@ -61,7 +76,14 @@ static int coap_security_handler_init(coap_security_t *sec){ return 0; } -static void coap_security_handler_reset(coap_security_t *sec){ +static void coap_security_handler_reset(thread_security_t *sec){ +#if defined(MBEDTLS_X509_CRT_PARSE_C) + mbedtls_x509_crt_free(&sec->_cacert); + mbedtls_x509_crt_free(&sec->_owncert); +#endif + + mbedtls_pk_free(&sec->_pkey); + mbedtls_entropy_free( &sec->_entropy ); mbedtls_ctr_drbg_free( &sec->_ctr_drbg ); mbedtls_ssl_config_free(&sec->_conf); @@ -69,7 +91,7 @@ static void coap_security_handler_reset(coap_security_t *sec){ } -coap_security_t *thread_security_create(int8_t socket_id, int8_t timer_id, uint8_t *address_ptr, uint16_t port, +thread_security_t *thread_security_create(int8_t socket_id, int8_t timer_id, uint8_t *address_ptr, uint16_t port, SecureConnectionMode mode, send_cb *send_cb, receive_cb *receive_cb, start_timer_cb *start_timer_cb, @@ -78,7 +100,7 @@ coap_security_t *thread_security_create(int8_t socket_id, int8_t timer_id, uint8 if( !address_ptr || send_cb == NULL || receive_cb == NULL || start_timer_cb == NULL || timer_status_cb == NULL){ return NULL; } - coap_security_t *this = ns_dyn_mem_alloc(sizeof(coap_security_t)); + thread_security_t *this = ns_dyn_mem_alloc(sizeof(thread_security_t)); if( !this ){ return NULL; } @@ -88,6 +110,7 @@ coap_security_t *thread_security_create(int8_t socket_id, int8_t timer_id, uint8 } this->_remote_port = port; memcpy(this->_remote_address, address_ptr, 16); + this->_conn_mode = mode; memset(this->_pw, 0, 64); this->_pw_len = 0; this->_socket_id = socket_id; @@ -100,7 +123,7 @@ coap_security_t *thread_security_create(int8_t socket_id, int8_t timer_id, uint8 return this; } -void thread_security_destroy(coap_security_t *sec){ +void thread_security_destroy(thread_security_t *sec){ if( sec ){ coap_security_handler_reset(sec); ns_dyn_mem_free(sec); @@ -200,60 +223,165 @@ static int export_key_block(void *ctx, return 0; } -/**** Timer functions ****/ - -/** - * Set timer function. - * Called back by mbedtls when it wants to set a timer. - * Accepts an intermediate and a final delay in milliseconds - * If the final delay is 0, cancels the running timer. - * TODO - might be better to use an event timer in conjunction with - * CoAP tasklet - */ -static void set_timer(void *sec_obj, uint32_t int_ms, uint32_t fin_ms) +int coap_security_handler_configure_keys( thread_security_t *sec, thread_keys_t keys ) { - coap_security_t *sec = (coap_security_t *)sec_obj; - if( sec->_start_timer_cb ){ - sec->_start_timer_cb( sec->_timer_id, int_ms, fin_ms); + int ret = -1; + switch( sec->_conn_mode ){ + case Certificate:{ +#if defined(MBEDTLS_X509_CRT_PARSE_C) + if( mbedtls_x509_crt_parse( &sec->_cacert, keys._server_cert, + keys._server_cert_len ) < 0 ){ + break; + } + if( mbedtls_x509_crt_parse( &sec->_owncert, keys._pub_cert_or_identifier, + keys._pub_len ) < 0 ){ + break; + } + if( mbedtls_pk_parse_key(&sec->_pkey, keys._priv, keys._priv_len, NULL, 0) < 0){ + break; + } + //TODO: If needed in server mode, this won't work + if( 0 != mbedtls_ssl_conf_own_cert(&sec->_conf, &sec->_owncert, &sec->_pkey) ){ + break; + } + //TODO: use MBEDTLS_SSL_VERIFY_REQUIRED instead of optional + mbedtls_ssl_conf_authmode( &sec->_conf, MBEDTLS_SSL_VERIFY_OPTIONAL ); + mbedtls_ssl_conf_ca_chain( &sec->_conf, &sec->_cacert, NULL ); + ret = 0; +#endif + break; + } + case PSK: { +#if defined(MBEDTLS_KEY_EXCHANGE__SOME__PSK_ENABLED) + if( 0 != mbedtls_ssl_conf_psk(&sec->_conf, keys._priv, keys._priv_len, keys._pub_cert_or_identifier, keys._pub_len) ){ + break; + } + mbedtls_ssl_conf_ciphersuites(&sec->_conf, PSK_SUITES); + ret = 0; +#endif + break; + } + case ECJPAKE: { +#if defined(MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED) + if( mbedtls_ssl_set_hs_ecjpake_password(&sec->_ssl, keys._priv, keys._priv_len) != 0 ){ + return -1; + } + mbedtls_ssl_conf_ciphersuites(&sec->_conf, ECJPAKE_SUITES); + + //NOTE: If thread starts supporting PSK in other modes, then this will be needed! + mbedtls_ssl_conf_export_keys_cb(&sec->_conf, + export_key_block, + &sec->_keyblk); + ret = 0; +#endif + break; + } + + default: + break; } + return ret; } -/** - * Get timer function. - * Called back by mbedtls when it wants to set a timer. - * Returns the state of the current timer - * TODO - might be better to use an event timer in conjunction with - * CoAP tasklet - */ -static int get_timer(void *sec_obj) -{ - coap_security_t *sec = (coap_security_t *)sec_obj; - if( sec->_timer_status_cb ){ - return sec->_timer_status_cb(sec->_timer_id); - } - return -1; -} - -int coap_security_handler_connect(coap_security_t *sec, bool is_server, const unsigned char *pw, uint8_t len){ +int coap_security_handler_connect(thread_security_t *sec, bool is_server, SecureSocketMode sock_mode, thread_keys_t keys){ + int ret = -1; if( !sec ){ - return -1; + return ret; } + sec->_is_blocking = true; + int endpoint = MBEDTLS_SSL_IS_CLIENT; if( is_server ){ endpoint = MBEDTLS_SSL_IS_SERVER; } + int mode = MBEDTLS_SSL_TRANSPORT_DATAGRAM; + if( sock_mode == TLS ){ + mode = MBEDTLS_SSL_TRANSPORT_STREAM; + } + if( ( mbedtls_ssl_config_defaults( &sec->_conf, endpoint, - MBEDTLS_SSL_TRANSPORT_DATAGRAM, 0 ) ) != 0 ) + mode, 0 ) ) != 0 ) { return -1; } - mbedtls_ssl_conf_handshake_timeout( &sec->_conf, 60000, 61000 ); + mbedtls_ssl_set_bio( &sec->_ssl, sec, + f_send, f_recv, NULL ); + + mbedtls_ssl_set_timer_cb( &sec->_ssl, sec, set_timer, + get_timer ); + + if( coap_security_handler_configure_keys( sec, keys ) != 0 ){ + return -1; + } + + //TODO: Only needed for server type? + mbedtls_ssl_conf_dtls_cookies(&sec->_conf, simple_cookie_write, + simple_cookie_check, + &sec->_cookie); + + sec->_is_started = true; + + do { + ret = mbedtls_ssl_handshake_step( &sec->_ssl ); + if( ret == MBEDTLS_ERR_SSL_HELLO_VERIFY_REQUIRED ){ //cookie check failed + if( is_server ){ + mbedtls_ssl_session_reset(&sec->_ssl); +#if defined(MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED) + if( mbedtls_ssl_set_hs_ecjpake_password(&sec->_ssl, keys._priv, keys._priv_len) != 0 ){ + return -1; + } +#endif + ret = MBEDTLS_ERR_SSL_WANT_READ; //needed to keep doing + }else{ + ret = -1; + } + } + }while( ret == MBEDTLS_ERR_SSL_WANT_READ || + ret == MBEDTLS_ERR_SSL_WANT_WRITE ); + + if( ret != 0){ + ret = -1; + }else{ + if( mbedtls_ssl_get_verify_result( &sec->_ssl ) != 0 ) + { + ret = -1; + } + } + + return ret; +} + +int coap_security_handler_connect_non_blocking(thread_security_t *sec, bool is_server, SecureSocketMode sock_mode, thread_keys_t keys){ + + if( !sec ){ + return -1; + } + sec->_is_blocking = false; + + int endpoint = MBEDTLS_SSL_IS_CLIENT; + if( is_server ){ + endpoint = MBEDTLS_SSL_IS_SERVER; + } + + int mode = MBEDTLS_SSL_TRANSPORT_DATAGRAM; + if( sock_mode == TLS ){ + mode = MBEDTLS_SSL_TRANSPORT_STREAM; + } + + if( ( mbedtls_ssl_config_defaults( &sec->_conf, + endpoint, + mode, 0 ) ) != 0 ) + { + return -1; + } + + //TODO: This should probably be modifiable by service??? + mbedtls_ssl_conf_handshake_timeout( &sec->_conf, 10000, 29000 ); mbedtls_ssl_conf_rng( &sec->_conf, mbedtls_ctr_drbg_random, &sec->_ctr_drbg ); - //mbedtls_ssl_conf_rng(&sec->_conf, get_random, NULL); if( ( mbedtls_ssl_setup( &sec->_ssl, &sec->_conf ) ) != 0 ) { @@ -266,26 +394,24 @@ int coap_security_handler_connect(coap_security_t *sec, bool is_server, const un mbedtls_ssl_set_timer_cb( &sec->_ssl, sec, set_timer, get_timer ); +#if defined(MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED) //TODO: Figure out better way!!! //Password should never be stored in multiple places!!! - if( is_server && len > 0){ - memcpy(sec->_pw, pw, len); - sec->_pw_len = len; + if( is_server && keys._priv_len > 0){ + memcpy(sec->_pw, keys._priv, keys._priv_len); + sec->_pw_len = keys._priv_len; } +#endif - if( mbedtls_ssl_set_hs_ecjpake_password(&sec->_ssl, pw, len) != 0 ){ + if( coap_security_handler_configure_keys( sec, keys ) != 0 ){ return -1; } - mbedtls_ssl_conf_ciphersuites(&sec->_conf, PSK_SUITES); + //Only needed for server type? mbedtls_ssl_conf_dtls_cookies(&sec->_conf, simple_cookie_write, simple_cookie_check, &sec->_cookie); - mbedtls_ssl_conf_export_keys_cb(&sec->_conf, - export_key_block, - &sec->_keyblk); - sec->_is_started = true; int ret = mbedtls_ssl_handshake_step( &sec->_ssl ); @@ -298,22 +424,24 @@ int coap_security_handler_connect(coap_security_t *sec, bool is_server, const un if( ret >= 0){ ret = 1; - }else - { + }else{ ret = -1; } return ret; } -int coap_security_handler_continue_connecting(coap_security_t *sec){ +int coap_security_handler_continue_connecting(thread_security_t *sec){ int ret=-1; while( ret != MBEDTLS_ERR_SSL_WANT_READ ){ ret = mbedtls_ssl_handshake_step( &sec->_ssl ); + if( MBEDTLS_ERR_SSL_HELLO_VERIFY_REQUIRED == ret){ mbedtls_ssl_session_reset(&sec->_ssl); +#if defined(MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED) if( mbedtls_ssl_set_hs_ecjpake_password(&sec->_ssl, sec->_pw, sec->_pw_len) != 0 ){ return -1; } +#endif return 1; } if(MBEDTLS_ERR_SSL_TIMEOUT == ret || @@ -335,7 +463,7 @@ int coap_security_handler_continue_connecting(coap_security_t *sec){ } -int coap_security_handler_send_message(coap_security_t *sec, unsigned char *message, size_t len){ +int coap_security_handler_send_message(thread_security_t *sec, unsigned char *message, size_t len){ int ret=-1; if( sec ){ @@ -347,7 +475,7 @@ int coap_security_handler_send_message(coap_security_t *sec, unsigned char *mess return ret; //bytes written } -int thread_security_send_close_alert(coap_security_t *sec) +int thread_security_send_close_alert(thread_security_t *sec) { if( !sec ){ return -1; @@ -361,7 +489,7 @@ int thread_security_send_close_alert(coap_security_t *sec) return -1; } -int coap_security_handler_read(coap_security_t *sec, unsigned char* buffer, size_t len){ +int coap_security_handler_read(thread_security_t *sec, unsigned char* buffer, size_t len){ int ret=-1; if( sec && buffer ){ @@ -374,13 +502,47 @@ int coap_security_handler_read(coap_security_t *sec, unsigned char* buffer, size return ret; //bytes read } +/**** Timer functions ****/ + +/** + * Set timer function. + * Called back by mbedtls when it wants to set a timer. + * Accepts an intermediate and a final delay in milliseconds + * If the final delay is 0, cancels the running timer. + * TODO - might be better to use an event timer in conjunction with + * CoAP tasklet + */ +static void set_timer(void *sec_obj, uint32_t int_ms, uint32_t fin_ms) +{ + thread_security_t *sec = (thread_security_t *)sec_obj; + if( sec->_start_timer_cb ){ + sec->_start_timer_cb( sec->_timer_id, int_ms, fin_ms); + } +} + +/** + * Get timer function. + * Called back by mbedtls when it wants to get a timer state. + * Returns the state of the current timer + * TODO - might be better to use an event timer in conjunction with + * CoAP tasklet + */ +static int get_timer(void *sec_obj) +{ + thread_security_t *sec = (thread_security_t *)sec_obj; + if( sec->_timer_status_cb ){ + return sec->_timer_status_cb(sec->_timer_id); + } + return -1; +} + int f_send( void *ctx, const unsigned char *buf, size_t len){ - coap_security_t *sec = (coap_security_t *)ctx; + thread_security_t *sec = (thread_security_t *)ctx; return sec->_send_cb(sec->_socket_id, sec->_remote_address, sec->_remote_port, buf, len); } int f_recv(void *ctx, unsigned char *buf, size_t len){ - coap_security_t *sec = (coap_security_t *)ctx; + thread_security_t *sec = (thread_security_t *)ctx; return sec->_receive_cb(sec->_socket_id, buf, len); } diff --git a/source/include/coap_security_handler.h b/source/include/coap_security_handler.h index 2b8ae49fc7..d5369a174d 100644 --- a/source/include/coap_security_handler.h +++ b/source/include/coap_security_handler.h @@ -42,6 +42,26 @@ typedef int receive_cb(int8_t socket_id, unsigned char *, size_t); typedef void start_timer_cb(int8_t timer_id, uint32_t min, uint32_t fin); typedef int timer_status_cb(int8_t timer_id); +typedef enum { + DTLS = 0, + TLS = 1 +}SecureSocketMode; + +typedef enum { + Certificate, + PSK, + ECJPAKE +}SecureConnectionMode; + +typedef struct { + unsigned char *_server_cert; + uint8_t _server_cert_len; + unsigned char *_pub_cert_or_identifier; + uint8_t _pub_len; + unsigned char *_priv; + uint8_t _priv_len; +} thread_keys_t; + typedef struct thread_security_s { mbedtls_ssl_config _conf; mbedtls_ssl_context _ssl; @@ -52,12 +72,20 @@ typedef struct thread_security_s { simple_cookie_t _cookie; key_block_t _keyblk; + SecureConnectionMode _conn_mode; +#if defined(MBEDTLS_X509_CRT_PARSE_C) + mbedtls_x509_crt _cacert; + mbedtls_x509_crt _owncert; +#endif + mbedtls_pk_context _pkey; + uint8_t _remote_address[16]; uint16_t _remote_port; uint8_t _pw[64]; uint8_t _pw_len; + bool _is_blocking; int8_t _socket_id; int8_t _timer_id; send_cb *_send_cb; @@ -65,24 +93,27 @@ typedef struct thread_security_s { start_timer_cb *_start_timer_cb; timer_status_cb *_timer_status_cb; -} coap_security_t; +} thread_security_t; -coap_security_t *thread_security_create(int8_t socket_id, int8_t timer_id, uint8_t *address_ptr, uint16_t port, +thread_security_t *thread_security_create(int8_t socket_id, int8_t timer_id, uint8_t *address_ptr, uint16_t port, + SecureConnectionMode mode, send_cb *send_cb, receive_cb *receive_cb, start_timer_cb *start_timer_cb, timer_status_cb *timer_status_cb); -void thread_security_destroy(coap_security_t *sec); +void thread_security_destroy(thread_security_t *sec); -int coap_security_handler_connect(coap_security_t *sec, bool is_server, const unsigned char *pw, uint8_t len); +int coap_security_handler_connect(thread_security_t *sec, bool is_server, SecureSocketMode sock_mode, thread_keys_t keys); -int coap_security_handler_continue_connecting(coap_security_t *sec); +int coap_security_handler_connect_non_blocking(thread_security_t *sec, bool is_server, SecureSocketMode sock_mode, thread_keys_t keys); -int coap_security_handler_send_message(coap_security_t *sec, unsigned char *message, size_t len); +int coap_security_handler_continue_connecting(thread_security_t *sec); -int thread_security_send_close_alert(coap_security_t *sec); +int coap_security_handler_send_message(thread_security_t *sec, unsigned char *message, size_t len); -int coap_security_handler_read(coap_security_t *sec, unsigned char* buffer, size_t len); +int thread_security_send_close_alert(thread_security_t *sec); + +int coap_security_handler_read(thread_security_t *sec, unsigned char* buffer, size_t len); #endif diff --git a/test/coap-service/unittest/coap_connection_handler/test_coap_connection_handler.c b/test/coap-service/unittest/coap_connection_handler/test_coap_connection_handler.c index 35c2090c23..f749f80f03 100644 --- a/test/coap-service/unittest/coap_connection_handler/test_coap_connection_handler.c +++ b/test/coap-service/unittest/coap_connection_handler/test_coap_connection_handler.c @@ -122,8 +122,8 @@ bool test_coap_connection_handler_send_data() connection_handler_destroy(handler); - coap_security_handler_stub.sec_obj = (coap_security_t *)malloc(sizeof(coap_security_t)); - memset(coap_security_handler_stub.sec_obj, 0, sizeof(coap_security_t)); + coap_security_handler_stub.sec_obj = (thread_security_t *)malloc(sizeof(thread_security_t)); + memset(coap_security_handler_stub.sec_obj, 0, sizeof(thread_security_t)); coap_security_handler_stub.sec_obj->_remote_port = 22; memset(coap_security_handler_stub.sec_obj->_remote_address, 1, 16 ); @@ -199,8 +199,8 @@ bool test_coap_connection_handler_virtual_recv() return false; //handler->socket->data still in memory - coap_security_handler_stub.sec_obj = (coap_security_t *)malloc(sizeof(coap_security_t)); - memset(coap_security_handler_stub.sec_obj, 0, sizeof(coap_security_t)); + coap_security_handler_stub.sec_obj = (thread_security_t *)malloc(sizeof(thread_security_t)); + memset(coap_security_handler_stub.sec_obj, 0, sizeof(thread_security_t)); coap_security_handler_stub.sec_obj->_remote_port = 55; memset(coap_security_handler_stub.sec_obj->_remote_address, 4, 16 ); @@ -298,8 +298,8 @@ bool test_timer_callbacks() return false; //handler->socket->data still in memory - coap_security_handler_stub.sec_obj = (coap_security_t *)malloc(sizeof(coap_security_t)); - memset(coap_security_handler_stub.sec_obj, 0, sizeof(coap_security_t)); + coap_security_handler_stub.sec_obj = (thread_security_t *)malloc(sizeof(thread_security_t)); + memset(coap_security_handler_stub.sec_obj, 0, sizeof(thread_security_t)); coap_security_handler_stub.sec_obj->_remote_port = 55; memset(coap_security_handler_stub.sec_obj->_remote_address, 4, 16 ); coap_security_handler_stub.sec_obj->_timer_id = 5; @@ -351,8 +351,8 @@ bool test_socket_api_callbacks() socket_callback_t *sckt_data = (socket_callback_t *)malloc(sizeof(socket_callback_t)); memset(sckt_data, 0, sizeof(socket_callback_t)); - coap_security_handler_stub.sec_obj = (coap_security_t *)malloc(sizeof(coap_security_t)); - memset(coap_security_handler_stub.sec_obj, 0, sizeof(coap_security_t)); + coap_security_handler_stub.sec_obj = (thread_security_t *)malloc(sizeof(thread_security_t)); + memset(coap_security_handler_stub.sec_obj, 0, sizeof(thread_security_t)); socket_api_stub.int8_value = 0; nsdynmemlib_stub.returnCounter = 1; @@ -431,8 +431,8 @@ bool test_security_callbacks() socket_callback_t *sckt_data = (socket_callback_t *)malloc(sizeof(socket_callback_t)); memset(sckt_data, 0, sizeof(socket_callback_t)); - coap_security_handler_stub.sec_obj = (coap_security_t *)malloc(sizeof(coap_security_t)); - memset(coap_security_handler_stub.sec_obj, 0, sizeof(coap_security_t)); + coap_security_handler_stub.sec_obj = (thread_security_t *)malloc(sizeof(thread_security_t)); + memset(coap_security_handler_stub.sec_obj, 0, sizeof(thread_security_t)); nsdynmemlib_stub.returnCounter = 1; thread_conn_handler_t *handler = connection_handler_create(&receive_from_sock_cb, &send_to_sock_cb, NULL, NULL); diff --git a/test/coap-service/unittest/coap_security_handler/Makefile b/test/coap-service/unittest/coap_security_handler/Makefile index 6923474bbd..6f5d7218a2 100644 --- a/test/coap-service/unittest/coap_security_handler/Makefile +++ b/test/coap-service/unittest/coap_security_handler/Makefile @@ -19,5 +19,5 @@ TEST_SRC_FILES = \ include ../MakefileWorker.mk -CPPUTESTFLAGS += -DFEA_TRACE_SUPPORT +CPPUTESTFLAGS += -DFEA_TRACE_SUPPORT -DMBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED -DMBEDTLS_ECJPAKE_C -DMBEDTLS_SHA256_C -DMBEDTLS_ECP_DP_SECP256R1_ENABLED diff --git a/test/coap-service/unittest/coap_security_handler/test_coap_security_handler.c b/test/coap-service/unittest/coap_security_handler/test_coap_security_handler.c index b3ac5a495e..9e5f18bf8c 100644 --- a/test/coap-service/unittest/coap_security_handler/test_coap_security_handler.c +++ b/test/coap-service/unittest/coap_security_handler/test_coap_security_handler.c @@ -31,26 +31,26 @@ static int timer_status_callback(int8_t timer_id) bool test_thread_security_create() { uint8_t buf[16]; - if( NULL != thread_security_create(1,2,&buf,12,&send_to_socket, &receive_from_socket, &start_timer_callback, NULL) ) + if( NULL != thread_security_create(1,2,&buf,12,ECJPAKE,&send_to_socket, &receive_from_socket, &start_timer_callback, NULL) ) return false; - if( NULL != thread_security_create(1,2,&buf,12,&send_to_socket, &receive_from_socket, &start_timer_callback, &timer_status_callback) ) + if( NULL != thread_security_create(1,2,&buf,12,ECJPAKE,&send_to_socket, &receive_from_socket, &start_timer_callback, &timer_status_callback) ) return false; nsdynmemlib_stub.returnCounter = 1; mbedtls_stub.expected_int = -1; - if( NULL != thread_security_create(1,2,&buf,12,&send_to_socket, &receive_from_socket, &start_timer_callback, &timer_status_callback) ) + if( NULL != thread_security_create(1,2,&buf,12,ECJPAKE,&send_to_socket, &receive_from_socket, &start_timer_callback, &timer_status_callback) ) return false; mbedtls_stub.expected_int = 0; nsdynmemlib_stub.returnCounter = 2; mbedtls_stub.crt_expected_int = -1; - if( NULL != thread_security_create(1,2,&buf,12,&send_to_socket, &receive_from_socket, &start_timer_callback, &timer_status_callback) ) + if( NULL != thread_security_create(1,2,&buf,12,ECJPAKE,&send_to_socket, &receive_from_socket, &start_timer_callback, &timer_status_callback) ) return false; nsdynmemlib_stub.returnCounter = 2; mbedtls_stub.crt_expected_int = 0; - coap_security_t *handle = thread_security_create(1,2,&buf,12,&send_to_socket, &receive_from_socket, &start_timer_callback, &timer_status_callback); + thread_security_t *handle = thread_security_create(1,2,&buf,12,ECJPAKE,&send_to_socket, &receive_from_socket, &start_timer_callback, &timer_status_callback); if( NULL == handle ) return false; @@ -64,7 +64,7 @@ bool test_thread_security_destroy() uint8_t buf[16]; nsdynmemlib_stub.returnCounter = 2; mbedtls_stub.crt_expected_int = 0; - coap_security_t *handle = thread_security_create(1,2,&buf,12,&send_to_socket, &receive_from_socket, &start_timer_callback, &timer_status_callback); + thread_security_t *handle = thread_security_create(1,2,&buf,12,ECJPAKE,&send_to_socket, &receive_from_socket, &start_timer_callback, &timer_status_callback); if( NULL == handle ) return false; @@ -77,11 +77,15 @@ bool test_coap_security_handler_connect() uint8_t buf[16]; nsdynmemlib_stub.returnCounter = 2; mbedtls_stub.crt_expected_int = 0; - coap_security_t *handle = thread_security_create(1,2,&buf,12,&send_to_socket, &receive_from_socket, &start_timer_callback, &timer_status_callback); + thread_security_t *handle = thread_security_create(1,2,&buf,12,ECJPAKE,&send_to_socket, &receive_from_socket, &start_timer_callback, &timer_status_callback); if( NULL == handle ) return false; - if( -1 != coap_security_handler_connect(NULL, true, "pwd", 3) ) + unsigned char pw = "pwd"; + thread_keys_t keys; + keys._priv = &pw; + keys._priv_len = 3; + if( -1 != coap_security_handler_connect_non_blocking(NULL, true, DTLS, keys) ) return false; mbedtls_stub.useCounter = true; mbedtls_stub.counter = 0; @@ -94,18 +98,18 @@ bool test_coap_security_handler_connect() mbedtls_stub.retArray[6] = -1; mbedtls_stub.retArray[7] = -1; - if( -1 != coap_security_handler_connect(handle, true, "pwd", 3) ) + if( -1 != coap_security_handler_connect_non_blocking(handle, true, DTLS, keys) ) return false; mbedtls_stub.counter = 0; mbedtls_stub.retArray[0] = 0; - if( -1 != coap_security_handler_connect(handle, true, "pwd", 3) ) + if( -1 != coap_security_handler_connect_non_blocking(handle, true, DTLS, keys) ) return false; mbedtls_stub.counter = 0; // mbedtls_stub.retArray[0] = 0; mbedtls_stub.retArray[1] = 0; - if( -1 != coap_security_handler_connect(handle, true, "pwd", 3) ) + if( -1 != coap_security_handler_connect_non_blocking(handle, true, DTLS, keys) ) return false; simple_cookie_t c; @@ -116,7 +120,7 @@ bool test_coap_security_handler_connect() // mbedtls_stub.retArray[0] = 0; // mbedtls_stub.retArray[1] = 0; mbedtls_stub.retArray[2] = 0; - if( -1 != coap_security_handler_connect(handle, true, "pwd", 3) ) + if( -1 != coap_security_handler_connect_non_blocking(handle, true, DTLS, keys) ) return false; c.len = 8; @@ -130,7 +134,7 @@ bool test_coap_security_handler_connect() // mbedtls_stub.retArray[1] = 0; // mbedtls_stub.retArray[2] = 0; mbedtls_stub.retArray[3] = 0; - if( -1 != coap_security_handler_connect(handle, true, "pwd", 3) ) + if( -1 != coap_security_handler_connect_non_blocking(handle, true, DTLS, keys) ) return false; mbedtls_stub.counter = 0; @@ -139,7 +143,7 @@ bool test_coap_security_handler_connect() // mbedtls_stub.retArray[2] = 0; // mbedtls_stub.retArray[3] = 0; mbedtls_stub.retArray[4] = 0; - if( -1 != coap_security_handler_connect(handle, true, "pwd", 3) ) + if( -1 != coap_security_handler_connect_non_blocking(handle, true, DTLS, keys) ) return false; mbedtls_stub.counter = 0; @@ -150,19 +154,19 @@ bool test_coap_security_handler_connect() // mbedtls_stub.retArray[4] = 0; mbedtls_stub.retArray[6] = 0; mbedtls_stub.retArray[7] = 0; - if( 1 != coap_security_handler_connect(handle, true, "pwd", 3) ) + if( 1 != coap_security_handler_connect_non_blocking(handle, true, DTLS, keys) ) return false; mbedtls_stub.counter = 0; mbedtls_stub.retArray[5] = MBEDTLS_ERR_SSL_BAD_HS_FINISHED; - if( -1 != coap_security_handler_connect(handle, true, "pwd", 3) ) + if( -1 != coap_security_handler_connect_non_blocking(handle, true, DTLS, keys) ) return false; mbedtls_stub.counter = 0; mbedtls_stub.retArray[5] = HANDSHAKE_FINISHED_VALUE; - if( 1 != coap_security_handler_connect(handle, true, "pwd", 3) ) + if( 1 != coap_security_handler_connect_non_blocking(handle, true, DTLS, keys) ) return false; thread_security_destroy(handle); @@ -174,7 +178,7 @@ bool test_coap_security_handler_continue_connecting() uint8_t buf[16]; nsdynmemlib_stub.returnCounter = 2; mbedtls_stub.crt_expected_int = 0; - coap_security_t *handle = thread_security_create(1,2,&buf,12,&send_to_socket, &receive_from_socket, &start_timer_callback, &timer_status_callback); + thread_security_t *handle = thread_security_create(1,2,&buf,12,ECJPAKE,&send_to_socket, &receive_from_socket, &start_timer_callback, &timer_status_callback); if( NULL == handle ) return false; @@ -222,7 +226,7 @@ bool test_coap_security_handler_send_message() uint8_t buf[16]; nsdynmemlib_stub.returnCounter = 2; mbedtls_stub.crt_expected_int = 0; - coap_security_t *handle = thread_security_create(1,2,&buf,12,&send_to_socket, &receive_from_socket, &start_timer_callback, &timer_status_callback); + thread_security_t *handle = thread_security_create(1,2,&buf,12,ECJPAKE,&send_to_socket, &receive_from_socket, &start_timer_callback, &timer_status_callback); if( NULL == handle ) return false; @@ -243,7 +247,7 @@ bool test_thread_security_send_close_alert() uint8_t buf[16]; nsdynmemlib_stub.returnCounter = 2; mbedtls_stub.crt_expected_int = 0; - coap_security_t *handle = thread_security_create(1,2,&buf,12,&send_to_socket, &receive_from_socket, &start_timer_callback, &timer_status_callback); + thread_security_t *handle = thread_security_create(1,2,&buf,12,ECJPAKE,&send_to_socket, &receive_from_socket, &start_timer_callback, &timer_status_callback); if( NULL == handle ) return false; @@ -263,7 +267,7 @@ bool test_coap_security_handler_read() uint8_t buf[16]; nsdynmemlib_stub.returnCounter = 2; mbedtls_stub.crt_expected_int = 0; - coap_security_t *handle = thread_security_create(1,2,&buf,12,&send_to_socket, &receive_from_socket, &start_timer_callback, &timer_status_callback); + thread_security_t *handle = thread_security_create(1,2,&buf,12,ECJPAKE,&send_to_socket, &receive_from_socket, &start_timer_callback, &timer_status_callback); if( NULL == handle ) return false; diff --git a/test/coap-service/unittest/run_tests b/test/coap-service/unittest/run_tests index f34b3b8d05..ce3fc0c170 100755 --- a/test/coap-service/unittest/run_tests +++ b/test/coap-service/unittest/run_tests @@ -23,6 +23,7 @@ lcov -q -d ../. -c -o app.info lcov -q -r app.info "/test*" -o app.info lcov -q -r app.info "/usr*" -o app.info lcov -q -r app.info "/libService*" -o app.info +lcov -q -r app.info "/yotta_modules*" -o app.info genhtml -q --no-branch-coverage app.info cd .. echo diff --git a/test/coap-service/unittest/stub/coap_security_handler_stub.c b/test/coap-service/unittest/stub/coap_security_handler_stub.c index 1b87ef23c4..55c378c3da 100644 --- a/test/coap-service/unittest/stub/coap_security_handler_stub.c +++ b/test/coap-service/unittest/stub/coap_security_handler_stub.c @@ -12,7 +12,7 @@ thread_sec_def coap_security_handler_stub; -coap_security_t *thread_security_create(int8_t socket_id, int8_t timer_id, uint8_t *address_ptr, uint16_t port, +thread_security_t *thread_security_create(int8_t socket_id, int8_t timer_id, uint8_t *address_ptr, uint16_t port, SecureConnectionMode mode, int (*send_cb)(int8_t socket_id, uint8_t *address_ptr, uint16_t port, const unsigned char *, size_t), int (*receive_cb)(int8_t socket_id, unsigned char *, size_t), void (*start_timer_cb)(int8_t timer_id, uint32_t min, uint32_t fin), @@ -25,12 +25,12 @@ coap_security_t *thread_security_create(int8_t socket_id, int8_t timer_id, uint8 return coap_security_handler_stub.sec_obj; } -void thread_security_destroy(coap_security_t *sec) +void thread_security_destroy(thread_security_t *sec) { } -int coap_security_handler_connect(coap_security_t *sec, bool is_server, const unsigned char *pw, uint8_t len) +int coap_security_handler_connect_non_blocking(thread_security_t *sec, bool is_server, SecureSocketMode sock_mode, thread_keys_t keys) { sec->_is_started = true; if( coap_security_handler_stub.counter >= 0){ @@ -39,7 +39,7 @@ int coap_security_handler_connect(coap_security_t *sec, bool is_server, const un return coap_security_handler_stub.int_value; } -int coap_security_handler_continue_connecting(coap_security_t *sec) +int coap_security_handler_continue_connecting(thread_security_t *sec) { if( coap_security_handler_stub.counter >= 0){ return coap_security_handler_stub.values[coap_security_handler_stub.counter--]; @@ -49,7 +49,7 @@ int coap_security_handler_continue_connecting(coap_security_t *sec) } -int coap_security_handler_send_message(coap_security_t *sec, unsigned char *message, size_t len) +int coap_security_handler_send_message(thread_security_t *sec, unsigned char *message, size_t len) { if( coap_security_handler_stub.counter >= 0){ return coap_security_handler_stub.values[coap_security_handler_stub.counter--]; @@ -57,7 +57,7 @@ int coap_security_handler_send_message(coap_security_t *sec, unsigned char *mess return coap_security_handler_stub.int_value; } -int thread_security_send_close_alert(coap_security_t *sec) +int thread_security_send_close_alert(thread_security_t *sec) { if( coap_security_handler_stub.counter >= 0){ return coap_security_handler_stub.values[coap_security_handler_stub.counter--]; @@ -65,7 +65,7 @@ int thread_security_send_close_alert(coap_security_t *sec) return coap_security_handler_stub.int_value; } -int coap_security_handler_read(coap_security_t *sec, unsigned char* buffer, size_t len) +int coap_security_handler_read(thread_security_t *sec, unsigned char* buffer, size_t len) { if( coap_security_handler_stub.counter >= 0){ return coap_security_handler_stub.values[coap_security_handler_stub.counter--]; diff --git a/test/coap-service/unittest/stub/coap_security_handler_stub.h b/test/coap-service/unittest/stub/coap_security_handler_stub.h index 2316ffff7d..603ee2d568 100644 --- a/test/coap-service/unittest/stub/coap_security_handler_stub.h +++ b/test/coap-service/unittest/stub/coap_security_handler_stub.h @@ -22,7 +22,7 @@ #include "coap_security_handler.h" typedef struct tsh{ - coap_security_t *sec_obj; + thread_security_t *sec_obj; int int_value; int counter; int values[10]; From 267c1861dd219e3f11aa7be1c75a1409bf12f1fb Mon Sep 17 00:00:00 2001 From: Antti Kauppila Date: Wed, 20 Jan 2016 11:50:24 +0200 Subject: [PATCH 069/154] Cleanup --- source/coap_connection_handler.c | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/source/coap_connection_handler.c b/source/coap_connection_handler.c index 201b8f0c81..419986547c 100644 --- a/source/coap_connection_handler.c +++ b/source/coap_connection_handler.c @@ -79,12 +79,7 @@ static secure_session_t *secure_session_create(internal_socket_t *parent, uint8_ return NULL; } - SecureConnectionMode mode = PSK; -#if defined(MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED) - mode = ECJPAKE; -#endif - - this->sec_handler = thread_security_create(parent->listen_socket, this->timer.id, address_ptr, port, mode, + this->sec_handler = thread_security_create(parent->listen_socket, this->timer.id, address_ptr, port, ECJPAKE, &send_to_socket, &receive_from_socket, &start_timer, &timer_status); if( !this->sec_handler ){ ns_dyn_mem_free(this); From 3034b1a7c760766d1a4e0669f3c0f0b376bd353a Mon Sep 17 00:00:00 2001 From: Antti Kauppila Date: Wed, 20 Jan 2016 13:50:13 +0200 Subject: [PATCH 070/154] Some naming refactored correctly --- source/coap_connection_handler.c | 36 +++++++-------- source/coap_security_handler.c | 34 +++++++------- source/coap_service_api.c | 2 +- source/include/coap_connection_handler.h | 19 ++++---- source/include/coap_security_handler.h | 22 ++++----- .../test_coap_connection_handler.c | 46 +++++++++---------- .../test_coap_security_handler.c | 42 ++++++++--------- .../coap_service_api/test_coap_service_api.c | 36 +++++++-------- .../stub/coap_connection_handler_stub.c | 14 +++--- .../stub/coap_connection_handler_stub.h | 2 +- .../stub/coap_security_handler_stub.c | 14 +++--- .../stub/coap_security_handler_stub.h | 2 +- .../unittest/stub/sn_coap_protocol_stub.c | 8 ++-- 13 files changed, 138 insertions(+), 139 deletions(-) diff --git a/source/coap_connection_handler.c b/source/coap_connection_handler.c index 419986547c..6a0255176c 100644 --- a/source/coap_connection_handler.c +++ b/source/coap_connection_handler.c @@ -15,7 +15,7 @@ #define TRACE_GROUP "ThCH" typedef struct internal_socket_s { - thread_conn_handler_t *parent; + coap_conn_handler_t *parent; uint16_t listen_port; int8_t listen_socket; @@ -49,7 +49,7 @@ typedef struct secure_timer_s { } secure_timer_t; typedef struct secure_session { - thread_security_t *sec_handler; //owned + coap_security_t *sec_handler; //owned internal_socket_t *parent; //not owned secure_timer_t timer; @@ -79,7 +79,7 @@ static secure_session_t *secure_session_create(internal_socket_t *parent, uint8_ return NULL; } - this->sec_handler = thread_security_create(parent->listen_socket, this->timer.id, address_ptr, port, ECJPAKE, + this->sec_handler = coap_security_create(parent->listen_socket, this->timer.id, address_ptr, port, ECJPAKE, &send_to_socket, &receive_from_socket, &start_timer, &timer_status); if( !this->sec_handler ){ ns_dyn_mem_free(this); @@ -98,7 +98,7 @@ static void secure_session_delete(secure_session_t *this) if (this) { ns_list_remove(&secure_session_list, this); if( this->sec_handler ){ - thread_security_destroy(this->sec_handler); + coap_security_destroy(this->sec_handler); this->sec_handler = NULL; } ns_dyn_mem_free(this); @@ -399,7 +399,7 @@ static void secure_recv_sckt_msg(void *cb_res) uint8_t pw_len; if( sock->parent->_get_password_cb && 0 == sock->parent->_get_password_cb(sock->listen_socket, src_address.address, src_address.identifier, pw, &pw_len)){ //TODO: get_password_cb should support certs and PSK also - thread_keys_t keys; + coap_security_keys_t keys; keys._priv = pw; keys._priv_len = pw_len; coap_security_handler_connect_non_blocking(session->sec_handler, true, DTLS, keys); @@ -454,7 +454,7 @@ static void recv_sckt_msg(void *cb_res) } } -int coap_connection_handler_virtual_recv(thread_conn_handler_t *handler, uint8_t address[static 16], uint16_t port, uint8_t *data_ptr, uint16_t data_len) +int coap_connection_handler_virtual_recv(coap_conn_handler_t *handler, uint8_t address[static 16], uint16_t port, uint8_t *data_ptr, uint16_t data_len) { if( !handler || !handler->socket ){ return -1; @@ -492,7 +492,7 @@ int coap_connection_handler_virtual_recv(thread_conn_handler_t *handler, uint8_t uint8_t pw_len; if( sock->parent->_get_password_cb && 0 == sock->parent->_get_password_cb(sock->listen_socket, address, port, pw, &pw_len)){ //TODO: get_password_cb should support certs and PSK also - thread_keys_t keys; + coap_security_keys_t keys; keys._priv = pw; keys._priv_len = pw_len; coap_security_handler_connect_non_blocking(session->sec_handler, true, DTLS, keys); @@ -551,7 +551,7 @@ int coap_connection_handler_virtual_recv(thread_conn_handler_t *handler, uint8_t return -1; } -thread_conn_handler_t *connection_handler_create(receive_from_socket_cb *recv_from_cb, +coap_conn_handler_t *connection_handler_create(receive_from_socket_cb *recv_from_cb, send_to_socket_cb *send_to_cb, get_pw_cb *pw_cb, security_done_cb *done_cb ) @@ -560,11 +560,11 @@ thread_conn_handler_t *connection_handler_create(receive_from_socket_cb *recv_fr return NULL; } - thread_conn_handler_t *handler = ns_dyn_mem_alloc(sizeof(thread_conn_handler_t)); + coap_conn_handler_t *handler = ns_dyn_mem_alloc(sizeof(coap_conn_handler_t)); if(!handler){ return NULL; } - memset(handler, 0, sizeof(thread_conn_handler_t)); + memset(handler, 0, sizeof(coap_conn_handler_t)); handler->socket = NULL; handler->_recv_cb = recv_from_cb; handler->_send_cb = send_to_cb; @@ -576,7 +576,7 @@ thread_conn_handler_t *connection_handler_create(receive_from_socket_cb *recv_fr return handler; } -void connection_handler_destroy(thread_conn_handler_t *handler) +void connection_handler_destroy(coap_conn_handler_t *handler) { if(handler){ if( handler->socket && handler->socket->is_secure){ @@ -586,7 +586,7 @@ void connection_handler_destroy(thread_conn_handler_t *handler) while(session != NULL ){ if( session && handler->socket->usage_counter == 1){ //Last connection - thread_security_send_close_alert( session->sec_handler ); + coap_security_send_close_alert( session->sec_handler ); } if( session){ @@ -601,20 +601,20 @@ void connection_handler_destroy(thread_conn_handler_t *handler) } } -void connection_handler_close_secure_connection( thread_conn_handler_t *handler, ns_address_t *dest_addr ) +void connection_handler_close_secure_connection( coap_conn_handler_t *handler, ns_address_t *dest_addr ) { if(handler){ if( handler->socket && handler->socket->is_secure){ secure_session_t *session = secure_session_find( handler->socket, dest_addr->address, dest_addr->identifier); if( session ){ - thread_security_send_close_alert( session->sec_handler ); + coap_security_send_close_alert( session->sec_handler ); } } } } -int coap_connection_handler_open_connection(thread_conn_handler_t *handler, uint16_t listen_port, bool use_ephemeral_port, bool is_secure, bool is_real_socket, bool bypassSec) +int coap_connection_handler_open_connection(coap_conn_handler_t *handler, uint16_t listen_port, bool use_ephemeral_port, bool is_secure, bool is_real_socket, bool bypassSec) { if( !handler ){ return -1; @@ -643,7 +643,7 @@ int coap_connection_handler_open_connection(thread_conn_handler_t *handler, uint return 0; } -int coap_connection_handler_send_data(thread_conn_handler_t *handler, ns_address_t *dest_addr, uint8_t *data_ptr, uint16_t data_len, bool bypass_link_sec) +int coap_connection_handler_send_data(coap_conn_handler_t *handler, ns_address_t *dest_addr, uint8_t *data_ptr, uint16_t data_len, bool bypass_link_sec) { if( !handler || !handler->socket || !dest_addr){ return -1; @@ -670,7 +670,7 @@ int coap_connection_handler_send_data(thread_conn_handler_t *handler, ns_address uint8_t pw_len; if( handler->_get_password_cb && 0 == handler->_get_password_cb(handler->socket->listen_socket, dest_addr->address, dest_addr->identifier, pw, &pw_len)){ //TODO: get_password_cb should support certs and PSK also - thread_keys_t keys; + coap_security_keys_t keys; keys._priv = pw; keys._priv_len = pw_len; coap_security_handler_connect_non_blocking(session->sec_handler, false, DTLS, keys); @@ -702,7 +702,7 @@ int coap_connection_handler_send_data(thread_conn_handler_t *handler, ns_address } } -bool coap_connection_handler_socket_belongs_to(thread_conn_handler_t *handler, int8_t socket_id) +bool coap_connection_handler_socket_belongs_to(coap_conn_handler_t *handler, int8_t socket_id) { if( !handler || !handler->socket){ return false; diff --git a/source/coap_security_handler.c b/source/coap_security_handler.c index 909c7bd1b9..871d6919fd 100644 --- a/source/coap_security_handler.c +++ b/source/coap_security_handler.c @@ -35,14 +35,14 @@ const static int PSK_SUITES[] = { static void set_timer( void *sec_obj, uint32_t int_ms, uint32_t fin_ms ); static int get_timer( void *sec_obj ); -static int coap_security_handler_configure_keys( thread_security_t *sec, thread_keys_t keys ); +static int coap_security_handler_configure_keys( coap_security_t *sec, coap_security_keys_t keys ); int entropy_poll( void *data, unsigned char *output, size_t len, size_t *olen ); //Point these back to M2MConnectionHandler!!! int f_send( void *ctx, const unsigned char *buf, size_t len ); int f_recv(void *ctx, unsigned char *buf, size_t len); -static int coap_security_handler_init(thread_security_t *sec){ +static int coap_security_handler_init(coap_security_t *sec){ const char *pers = "dtls_client"; mbedtls_ssl_init( &sec->_ssl ); mbedtls_ssl_config_init( &sec->_conf ); @@ -76,7 +76,7 @@ static int coap_security_handler_init(thread_security_t *sec){ return 0; } -static void coap_security_handler_reset(thread_security_t *sec){ +static void coap_security_handler_reset(coap_security_t *sec){ #if defined(MBEDTLS_X509_CRT_PARSE_C) mbedtls_x509_crt_free(&sec->_cacert); mbedtls_x509_crt_free(&sec->_owncert); @@ -91,7 +91,7 @@ static void coap_security_handler_reset(thread_security_t *sec){ } -thread_security_t *thread_security_create(int8_t socket_id, int8_t timer_id, uint8_t *address_ptr, uint16_t port, SecureConnectionMode mode, +coap_security_t *coap_security_create(int8_t socket_id, int8_t timer_id, uint8_t *address_ptr, uint16_t port, SecureConnectionMode mode, send_cb *send_cb, receive_cb *receive_cb, start_timer_cb *start_timer_cb, @@ -100,7 +100,7 @@ thread_security_t *thread_security_create(int8_t socket_id, int8_t timer_id, uin if( !address_ptr || send_cb == NULL || receive_cb == NULL || start_timer_cb == NULL || timer_status_cb == NULL){ return NULL; } - thread_security_t *this = ns_dyn_mem_alloc(sizeof(thread_security_t)); + coap_security_t *this = ns_dyn_mem_alloc(sizeof(coap_security_t)); if( !this ){ return NULL; } @@ -123,7 +123,7 @@ thread_security_t *thread_security_create(int8_t socket_id, int8_t timer_id, uin return this; } -void thread_security_destroy(thread_security_t *sec){ +void coap_security_destroy(coap_security_t *sec){ if( sec ){ coap_security_handler_reset(sec); ns_dyn_mem_free(sec); @@ -223,7 +223,7 @@ static int export_key_block(void *ctx, return 0; } -int coap_security_handler_configure_keys( thread_security_t *sec, thread_keys_t keys ) +int coap_security_handler_configure_keys( coap_security_t *sec, coap_security_keys_t keys ) { int ret = -1; switch( sec->_conn_mode ){ @@ -283,7 +283,7 @@ int coap_security_handler_configure_keys( thread_security_t *sec, thread_keys_t return ret; } -int coap_security_handler_connect(thread_security_t *sec, bool is_server, SecureSocketMode sock_mode, thread_keys_t keys){ +int coap_security_handler_connect(coap_security_t *sec, bool is_server, SecureSocketMode sock_mode, coap_security_keys_t keys){ int ret = -1; if( !sec ){ @@ -355,7 +355,7 @@ int coap_security_handler_connect(thread_security_t *sec, bool is_server, Secure return ret; } -int coap_security_handler_connect_non_blocking(thread_security_t *sec, bool is_server, SecureSocketMode sock_mode, thread_keys_t keys){ +int coap_security_handler_connect_non_blocking(coap_security_t *sec, bool is_server, SecureSocketMode sock_mode, coap_security_keys_t keys){ if( !sec ){ return -1; @@ -430,7 +430,7 @@ int coap_security_handler_connect_non_blocking(thread_security_t *sec, bool is_s return ret; } -int coap_security_handler_continue_connecting(thread_security_t *sec){ +int coap_security_handler_continue_connecting(coap_security_t *sec){ int ret=-1; while( ret != MBEDTLS_ERR_SSL_WANT_READ ){ ret = mbedtls_ssl_handshake_step( &sec->_ssl ); @@ -463,7 +463,7 @@ int coap_security_handler_continue_connecting(thread_security_t *sec){ } -int coap_security_handler_send_message(thread_security_t *sec, unsigned char *message, size_t len){ +int coap_security_handler_send_message(coap_security_t *sec, unsigned char *message, size_t len){ int ret=-1; if( sec ){ @@ -475,7 +475,7 @@ int coap_security_handler_send_message(thread_security_t *sec, unsigned char *me return ret; //bytes written } -int thread_security_send_close_alert(thread_security_t *sec) +int coap_security_send_close_alert(coap_security_t *sec) { if( !sec ){ return -1; @@ -489,7 +489,7 @@ int thread_security_send_close_alert(thread_security_t *sec) return -1; } -int coap_security_handler_read(thread_security_t *sec, unsigned char* buffer, size_t len){ +int coap_security_handler_read(coap_security_t *sec, unsigned char* buffer, size_t len){ int ret=-1; if( sec && buffer ){ @@ -514,7 +514,7 @@ int coap_security_handler_read(thread_security_t *sec, unsigned char* buffer, si */ static void set_timer(void *sec_obj, uint32_t int_ms, uint32_t fin_ms) { - thread_security_t *sec = (thread_security_t *)sec_obj; + coap_security_t *sec = (coap_security_t *)sec_obj; if( sec->_start_timer_cb ){ sec->_start_timer_cb( sec->_timer_id, int_ms, fin_ms); } @@ -529,7 +529,7 @@ static void set_timer(void *sec_obj, uint32_t int_ms, uint32_t fin_ms) */ static int get_timer(void *sec_obj) { - thread_security_t *sec = (thread_security_t *)sec_obj; + coap_security_t *sec = (coap_security_t *)sec_obj; if( sec->_timer_status_cb ){ return sec->_timer_status_cb(sec->_timer_id); } @@ -537,12 +537,12 @@ static int get_timer(void *sec_obj) } int f_send( void *ctx, const unsigned char *buf, size_t len){ - thread_security_t *sec = (thread_security_t *)ctx; + coap_security_t *sec = (coap_security_t *)ctx; return sec->_send_cb(sec->_socket_id, sec->_remote_address, sec->_remote_port, buf, len); } int f_recv(void *ctx, unsigned char *buf, size_t len){ - thread_security_t *sec = (thread_security_t *)ctx; + coap_security_t *sec = (coap_security_t *)ctx; return sec->_receive_cb(sec->_socket_id, buf, len); } diff --git a/source/coap_service_api.c b/source/coap_service_api.c index 4b1394b2a4..00cdf5b360 100644 --- a/source/coap_service_api.c +++ b/source/coap_service_api.c @@ -39,7 +39,7 @@ typedef struct coap_service { coap_service_security_start_cb *security_start_cb; coap_service_virtual_socket_send_cb *virtual_socket_send_cb; uri_registration_list_t uri_list; - thread_conn_handler_t *conn_handler; + coap_conn_handler_t *conn_handler; int8_t interface_id; int8_t service_id; int8_t listen_socket; diff --git a/source/include/coap_connection_handler.h b/source/include/coap_connection_handler.h index 8d01f46eef..e0fb99d164 100644 --- a/source/include/coap_connection_handler.h +++ b/source/include/coap_connection_handler.h @@ -31,32 +31,31 @@ typedef int receive_from_socket_cb(int8_t socket_id, uint8_t address[static 16], typedef int get_pw_cb(int8_t socket_id, uint8_t address[static 16], uint16_t port, uint8_t *pw_ptr, uint8_t *pw_len); typedef void security_done_cb(int8_t socket_id, uint8_t address[static 16], uint16_t port, uint8_t keyblock[static 40]); -typedef struct thread_conn_handler_s{ +typedef struct coap_conn_handler_s{ struct internal_socket_s *socket; receive_from_socket_cb *_recv_cb; send_to_socket_cb *_send_cb; get_pw_cb *_get_password_cb; security_done_cb *_security_done_cb; +} coap_conn_handler_t; -} thread_conn_handler_t; - -thread_conn_handler_t *connection_handler_create(receive_from_socket_cb *recv_from_cb, +coap_conn_handler_t *connection_handler_create(receive_from_socket_cb *recv_from_cb, send_to_socket_cb *send_to_cb, get_pw_cb *pw_cb, security_done_cb *done_cb); -void connection_handler_destroy( thread_conn_handler_t *handler ); +void connection_handler_destroy( coap_conn_handler_t *handler ); -void connection_handler_close_secure_connection(thread_conn_handler_t *handler, ns_address_t *dest_addr); +void connection_handler_close_secure_connection(coap_conn_handler_t *handler, ns_address_t *dest_addr); -int coap_connection_handler_open_connection(thread_conn_handler_t *handler, uint16_t listen_port, bool use_ephemeral_port, bool is_secure, bool real_socket, bool bypassSec); +int coap_connection_handler_open_connection(coap_conn_handler_t *handler, uint16_t listen_port, bool use_ephemeral_port, bool is_secure, bool real_socket, bool bypassSec); //If returns -2, it means security was started and data was not send -int coap_connection_handler_send_data(thread_conn_handler_t *handler, ns_address_t *dest_addr, uint8_t *data_ptr, uint16_t data_len, bool bypass_link_sec); +int coap_connection_handler_send_data(coap_conn_handler_t *handler, ns_address_t *dest_addr, uint8_t *data_ptr, uint16_t data_len, bool bypass_link_sec); -int coap_connection_handler_virtual_recv(thread_conn_handler_t *handler, uint8_t address[static 16], uint16_t port, uint8_t *data_ptr, uint16_t data_len); +int coap_connection_handler_virtual_recv(coap_conn_handler_t *handler, uint8_t address[static 16], uint16_t port, uint8_t *data_ptr, uint16_t data_len); -bool coap_connection_handler_socket_belongs_to(thread_conn_handler_t *handler, int8_t socket_id); +bool coap_connection_handler_socket_belongs_to(coap_conn_handler_t *handler, int8_t socket_id); #endif diff --git a/source/include/coap_security_handler.h b/source/include/coap_security_handler.h index d5369a174d..609ae426ba 100644 --- a/source/include/coap_security_handler.h +++ b/source/include/coap_security_handler.h @@ -60,9 +60,9 @@ typedef struct { uint8_t _pub_len; unsigned char *_priv; uint8_t _priv_len; -} thread_keys_t; +} coap_security_keys_t; -typedef struct thread_security_s { +typedef struct coap_security_s { mbedtls_ssl_config _conf; mbedtls_ssl_context _ssl; @@ -93,27 +93,27 @@ typedef struct thread_security_s { start_timer_cb *_start_timer_cb; timer_status_cb *_timer_status_cb; -} thread_security_t; +} coap_security_t; -thread_security_t *thread_security_create(int8_t socket_id, int8_t timer_id, uint8_t *address_ptr, uint16_t port, +coap_security_t *coap_security_create(int8_t socket_id, int8_t timer_id, uint8_t *address_ptr, uint16_t port, SecureConnectionMode mode, send_cb *send_cb, receive_cb *receive_cb, start_timer_cb *start_timer_cb, timer_status_cb *timer_status_cb); -void thread_security_destroy(thread_security_t *sec); +void coap_security_destroy(coap_security_t *sec); -int coap_security_handler_connect(thread_security_t *sec, bool is_server, SecureSocketMode sock_mode, thread_keys_t keys); +int coap_security_handler_connect(coap_security_t *sec, bool is_server, SecureSocketMode sock_mode, coap_security_keys_t keys); -int coap_security_handler_connect_non_blocking(thread_security_t *sec, bool is_server, SecureSocketMode sock_mode, thread_keys_t keys); +int coap_security_handler_connect_non_blocking(coap_security_t *sec, bool is_server, SecureSocketMode sock_mode, coap_security_keys_t keys); -int coap_security_handler_continue_connecting(thread_security_t *sec); +int coap_security_handler_continue_connecting(coap_security_t *sec); -int coap_security_handler_send_message(thread_security_t *sec, unsigned char *message, size_t len); +int coap_security_handler_send_message(coap_security_t *sec, unsigned char *message, size_t len); -int thread_security_send_close_alert(thread_security_t *sec); +int coap_security_send_close_alert(coap_security_t *sec); -int coap_security_handler_read(thread_security_t *sec, unsigned char* buffer, size_t len); +int coap_security_handler_read(coap_security_t *sec, unsigned char* buffer, size_t len); #endif diff --git a/test/coap-service/unittest/coap_connection_handler/test_coap_connection_handler.c b/test/coap-service/unittest/coap_connection_handler/test_coap_connection_handler.c index f749f80f03..8a90d196fa 100644 --- a/test/coap-service/unittest/coap_connection_handler/test_coap_connection_handler.c +++ b/test/coap-service/unittest/coap_connection_handler/test_coap_connection_handler.c @@ -43,7 +43,7 @@ bool test_connection_handler_create() return false; nsdynmemlib_stub.returnCounter = 1; - thread_conn_handler_t *handler = connection_handler_create(&receive_from_sock_cb, NULL, NULL, NULL); + coap_conn_handler_t *handler = connection_handler_create(&receive_from_sock_cb, NULL, NULL, NULL); if( NULL == handler ) return false; ns_dyn_mem_free(handler); @@ -54,7 +54,7 @@ bool test_connection_handler_destroy() { coap_security_handler_stub.counter = -1; nsdynmemlib_stub.returnCounter = 1; - thread_conn_handler_t *handler = connection_handler_create(&receive_from_sock_cb, NULL, NULL, NULL); + coap_conn_handler_t *handler = connection_handler_create(&receive_from_sock_cb, NULL, NULL, NULL); connection_handler_destroy(handler); return true; @@ -64,7 +64,7 @@ bool test_coap_connection_handler_open_connection() { coap_security_handler_stub.counter = -1; nsdynmemlib_stub.returnCounter = 1; - thread_conn_handler_t *handler = connection_handler_create(&receive_from_sock_cb, NULL, NULL, NULL); + coap_conn_handler_t *handler = connection_handler_create(&receive_from_sock_cb, NULL, NULL, NULL); if( -1 != coap_connection_handler_open_connection(NULL, 0,false,false,false,false) ) return false; @@ -88,7 +88,7 @@ bool test_coap_connection_handler_open_connection() //open second one nsdynmemlib_stub.returnCounter = 1; - thread_conn_handler_t *handler2 = connection_handler_create(&receive_from_sock_cb, &send_to_sock_cb, NULL, NULL); + coap_conn_handler_t *handler2 = connection_handler_create(&receive_from_sock_cb, &send_to_sock_cb, NULL, NULL); nsdynmemlib_stub.returnCounter = 1; if( 0 != coap_connection_handler_open_connection(handler2, 22,false,true,true,true) ) return false; @@ -112,7 +112,7 @@ bool test_coap_connection_handler_send_data() addr.identifier = 22; nsdynmemlib_stub.returnCounter = 1; - thread_conn_handler_t *handler = connection_handler_create(&receive_from_sock_cb, &send_to_sock_cb, NULL, NULL); + coap_conn_handler_t *handler = connection_handler_create(&receive_from_sock_cb, &send_to_sock_cb, NULL, NULL); nsdynmemlib_stub.returnCounter = 1; if( 0 != coap_connection_handler_open_connection(handler, 22,false,true,false,false) ) return false; @@ -122,8 +122,8 @@ bool test_coap_connection_handler_send_data() connection_handler_destroy(handler); - coap_security_handler_stub.sec_obj = (thread_security_t *)malloc(sizeof(thread_security_t)); - memset(coap_security_handler_stub.sec_obj, 0, sizeof(thread_security_t)); + coap_security_handler_stub.sec_obj = (coap_security_t *)malloc(sizeof(coap_security_t)); + memset(coap_security_handler_stub.sec_obj, 0, sizeof(coap_security_t)); coap_security_handler_stub.sec_obj->_remote_port = 22; memset(coap_security_handler_stub.sec_obj->_remote_address, 1, 16 ); @@ -181,7 +181,7 @@ bool test_coap_connection_handler_virtual_recv() return false; nsdynmemlib_stub.returnCounter = 1; - thread_conn_handler_t *handler = connection_handler_create(&receive_from_sock_cb, &send_to_sock_cb, NULL, NULL); + coap_conn_handler_t *handler = connection_handler_create(&receive_from_sock_cb, &send_to_sock_cb, NULL, NULL); nsdynmemlib_stub.returnCounter = 1; if( 0 != coap_connection_handler_open_connection(handler, 22,false,true,true,false) ) return false; @@ -199,8 +199,8 @@ bool test_coap_connection_handler_virtual_recv() return false; //handler->socket->data still in memory - coap_security_handler_stub.sec_obj = (thread_security_t *)malloc(sizeof(thread_security_t)); - memset(coap_security_handler_stub.sec_obj, 0, sizeof(thread_security_t)); + coap_security_handler_stub.sec_obj = (coap_security_t *)malloc(sizeof(coap_security_t)); + memset(coap_security_handler_stub.sec_obj, 0, sizeof(coap_security_t)); coap_security_handler_stub.sec_obj->_remote_port = 55; memset(coap_security_handler_stub.sec_obj->_remote_address, 4, 16 ); @@ -217,7 +217,7 @@ bool test_coap_connection_handler_virtual_recv() connection_handler_destroy(handler); nsdynmemlib_stub.returnCounter = 1; - thread_conn_handler_t *handler2 = connection_handler_create(&receive_from_sock_cb, &send_to_sock_cb, &get_passwd_cb, &sec_done_cb); + coap_conn_handler_t *handler2 = connection_handler_create(&receive_from_sock_cb, &send_to_sock_cb, &get_passwd_cb, &sec_done_cb); nsdynmemlib_stub.returnCounter = 1; if( 0 != coap_connection_handler_open_connection(handler2, 24,false,true,true,false) ) return false; @@ -247,7 +247,7 @@ bool test_coap_connection_handler_virtual_recv() coap_security_handler_stub.sec_obj = NULL; nsdynmemlib_stub.returnCounter = 1; - thread_conn_handler_t *handler3 = connection_handler_create(&receive_from_sock_cb, &send_to_sock_cb, &get_passwd_cb, &sec_done_cb); + coap_conn_handler_t *handler3 = connection_handler_create(&receive_from_sock_cb, &send_to_sock_cb, &get_passwd_cb, &sec_done_cb); nsdynmemlib_stub.returnCounter = 1; if( 0 != coap_connection_handler_open_connection(handler3, 26,false,false,true,false) ) return false; @@ -269,7 +269,7 @@ bool test_coap_connection_handler_socket_belongs_to() socket_api_stub.int8_value = 0; nsdynmemlib_stub.returnCounter = 1; - thread_conn_handler_t *handler = connection_handler_create(&receive_from_sock_cb, &send_to_sock_cb, NULL, NULL); + coap_conn_handler_t *handler = connection_handler_create(&receive_from_sock_cb, &send_to_sock_cb, NULL, NULL); nsdynmemlib_stub.returnCounter = 1; if( 0 != coap_connection_handler_open_connection(handler, 22,false,true,true,false) ) return false; @@ -292,14 +292,14 @@ bool test_timer_callbacks() memset(&buf, 1, 16); nsdynmemlib_stub.returnCounter = 1; - thread_conn_handler_t *handler = connection_handler_create(&receive_from_sock_cb, &send_to_sock_cb, NULL, NULL); + coap_conn_handler_t *handler = connection_handler_create(&receive_from_sock_cb, &send_to_sock_cb, NULL, NULL); nsdynmemlib_stub.returnCounter = 1; if( 0 != coap_connection_handler_open_connection(handler, 22,false,true,true,false) ) return false; //handler->socket->data still in memory - coap_security_handler_stub.sec_obj = (thread_security_t *)malloc(sizeof(thread_security_t)); - memset(coap_security_handler_stub.sec_obj, 0, sizeof(thread_security_t)); + coap_security_handler_stub.sec_obj = (coap_security_t *)malloc(sizeof(coap_security_t)); + memset(coap_security_handler_stub.sec_obj, 0, sizeof(coap_security_t)); coap_security_handler_stub.sec_obj->_remote_port = 55; memset(coap_security_handler_stub.sec_obj->_remote_address, 4, 16 ); coap_security_handler_stub.sec_obj->_timer_id = 5; @@ -351,12 +351,12 @@ bool test_socket_api_callbacks() socket_callback_t *sckt_data = (socket_callback_t *)malloc(sizeof(socket_callback_t)); memset(sckt_data, 0, sizeof(socket_callback_t)); - coap_security_handler_stub.sec_obj = (thread_security_t *)malloc(sizeof(thread_security_t)); - memset(coap_security_handler_stub.sec_obj, 0, sizeof(thread_security_t)); + coap_security_handler_stub.sec_obj = (coap_security_t *)malloc(sizeof(coap_security_t)); + memset(coap_security_handler_stub.sec_obj, 0, sizeof(coap_security_t)); socket_api_stub.int8_value = 0; nsdynmemlib_stub.returnCounter = 1; - thread_conn_handler_t *handler = connection_handler_create(&receive_from_sock_cb, &send_to_sock_cb, NULL, NULL); + coap_conn_handler_t *handler = connection_handler_create(&receive_from_sock_cb, &send_to_sock_cb, NULL, NULL); nsdynmemlib_stub.returnCounter = 1; if( 0 != coap_connection_handler_open_connection(handler, 22,false,false,true,false) ) return false; @@ -378,7 +378,7 @@ bool test_socket_api_callbacks() connection_handler_destroy(handler); nsdynmemlib_stub.returnCounter = 1; - thread_conn_handler_t *handler2 = connection_handler_create(&receive_from_sock_cb, &send_to_sock_cb, &get_passwd_cb, &sec_done_cb); + coap_conn_handler_t *handler2 = connection_handler_create(&receive_from_sock_cb, &send_to_sock_cb, &get_passwd_cb, &sec_done_cb); nsdynmemlib_stub.returnCounter = 1; if( 0 != coap_connection_handler_open_connection(handler2, 22,false,true,true,false) ) return false; @@ -431,11 +431,11 @@ bool test_security_callbacks() socket_callback_t *sckt_data = (socket_callback_t *)malloc(sizeof(socket_callback_t)); memset(sckt_data, 0, sizeof(socket_callback_t)); - coap_security_handler_stub.sec_obj = (thread_security_t *)malloc(sizeof(thread_security_t)); - memset(coap_security_handler_stub.sec_obj, 0, sizeof(thread_security_t)); + coap_security_handler_stub.sec_obj = (coap_security_t *)malloc(sizeof(coap_security_t)); + memset(coap_security_handler_stub.sec_obj, 0, sizeof(coap_security_t)); nsdynmemlib_stub.returnCounter = 1; - thread_conn_handler_t *handler = connection_handler_create(&receive_from_sock_cb, &send_to_sock_cb, NULL, NULL); + coap_conn_handler_t *handler = connection_handler_create(&receive_from_sock_cb, &send_to_sock_cb, NULL, NULL); nsdynmemlib_stub.returnCounter = 1; if( 0 != coap_connection_handler_open_connection(handler, 22,false,true,true,false) ) return false; diff --git a/test/coap-service/unittest/coap_security_handler/test_coap_security_handler.c b/test/coap-service/unittest/coap_security_handler/test_coap_security_handler.c index 9e5f18bf8c..76bfb7d62c 100644 --- a/test/coap-service/unittest/coap_security_handler/test_coap_security_handler.c +++ b/test/coap-service/unittest/coap_security_handler/test_coap_security_handler.c @@ -31,30 +31,30 @@ static int timer_status_callback(int8_t timer_id) bool test_thread_security_create() { uint8_t buf[16]; - if( NULL != thread_security_create(1,2,&buf,12,ECJPAKE,&send_to_socket, &receive_from_socket, &start_timer_callback, NULL) ) + if( NULL != coap_security_create(1,2,&buf,12,ECJPAKE,&send_to_socket, &receive_from_socket, &start_timer_callback, NULL) ) return false; - if( NULL != thread_security_create(1,2,&buf,12,ECJPAKE,&send_to_socket, &receive_from_socket, &start_timer_callback, &timer_status_callback) ) + if( NULL != coap_security_create(1,2,&buf,12,ECJPAKE,&send_to_socket, &receive_from_socket, &start_timer_callback, &timer_status_callback) ) return false; nsdynmemlib_stub.returnCounter = 1; mbedtls_stub.expected_int = -1; - if( NULL != thread_security_create(1,2,&buf,12,ECJPAKE,&send_to_socket, &receive_from_socket, &start_timer_callback, &timer_status_callback) ) + if( NULL != coap_security_create(1,2,&buf,12,ECJPAKE,&send_to_socket, &receive_from_socket, &start_timer_callback, &timer_status_callback) ) return false; mbedtls_stub.expected_int = 0; nsdynmemlib_stub.returnCounter = 2; mbedtls_stub.crt_expected_int = -1; - if( NULL != thread_security_create(1,2,&buf,12,ECJPAKE,&send_to_socket, &receive_from_socket, &start_timer_callback, &timer_status_callback) ) + if( NULL != coap_security_create(1,2,&buf,12,ECJPAKE,&send_to_socket, &receive_from_socket, &start_timer_callback, &timer_status_callback) ) return false; nsdynmemlib_stub.returnCounter = 2; mbedtls_stub.crt_expected_int = 0; - thread_security_t *handle = thread_security_create(1,2,&buf,12,ECJPAKE,&send_to_socket, &receive_from_socket, &start_timer_callback, &timer_status_callback); + coap_security_t *handle = coap_security_create(1,2,&buf,12,ECJPAKE,&send_to_socket, &receive_from_socket, &start_timer_callback, &timer_status_callback); if( NULL == handle ) return false; - thread_security_destroy(handle); + coap_security_destroy(handle); return true; } @@ -64,11 +64,11 @@ bool test_thread_security_destroy() uint8_t buf[16]; nsdynmemlib_stub.returnCounter = 2; mbedtls_stub.crt_expected_int = 0; - thread_security_t *handle = thread_security_create(1,2,&buf,12,ECJPAKE,&send_to_socket, &receive_from_socket, &start_timer_callback, &timer_status_callback); + coap_security_t *handle = coap_security_create(1,2,&buf,12,ECJPAKE,&send_to_socket, &receive_from_socket, &start_timer_callback, &timer_status_callback); if( NULL == handle ) return false; - thread_security_destroy(handle); + coap_security_destroy(handle); return true; } @@ -77,12 +77,12 @@ bool test_coap_security_handler_connect() uint8_t buf[16]; nsdynmemlib_stub.returnCounter = 2; mbedtls_stub.crt_expected_int = 0; - thread_security_t *handle = thread_security_create(1,2,&buf,12,ECJPAKE,&send_to_socket, &receive_from_socket, &start_timer_callback, &timer_status_callback); + coap_security_t *handle = coap_security_create(1,2,&buf,12,ECJPAKE,&send_to_socket, &receive_from_socket, &start_timer_callback, &timer_status_callback); if( NULL == handle ) return false; unsigned char pw = "pwd"; - thread_keys_t keys; + coap_security_keys_t keys; keys._priv = &pw; keys._priv_len = 3; if( -1 != coap_security_handler_connect_non_blocking(NULL, true, DTLS, keys) ) @@ -169,7 +169,7 @@ bool test_coap_security_handler_connect() if( 1 != coap_security_handler_connect_non_blocking(handle, true, DTLS, keys) ) return false; - thread_security_destroy(handle); + coap_security_destroy(handle); return true; } @@ -178,7 +178,7 @@ bool test_coap_security_handler_continue_connecting() uint8_t buf[16]; nsdynmemlib_stub.returnCounter = 2; mbedtls_stub.crt_expected_int = 0; - thread_security_t *handle = thread_security_create(1,2,&buf,12,ECJPAKE,&send_to_socket, &receive_from_socket, &start_timer_callback, &timer_status_callback); + coap_security_t *handle = coap_security_create(1,2,&buf,12,ECJPAKE,&send_to_socket, &receive_from_socket, &start_timer_callback, &timer_status_callback); if( NULL == handle ) return false; @@ -217,7 +217,7 @@ bool test_coap_security_handler_continue_connecting() if( 0 != coap_security_handler_continue_connecting(handle) ) return false; - thread_security_destroy(handle); + coap_security_destroy(handle); return true; } @@ -226,7 +226,7 @@ bool test_coap_security_handler_send_message() uint8_t buf[16]; nsdynmemlib_stub.returnCounter = 2; mbedtls_stub.crt_expected_int = 0; - thread_security_t *handle = thread_security_create(1,2,&buf,12,ECJPAKE,&send_to_socket, &receive_from_socket, &start_timer_callback, &timer_status_callback); + coap_security_t *handle = coap_security_create(1,2,&buf,12,ECJPAKE,&send_to_socket, &receive_from_socket, &start_timer_callback, &timer_status_callback); if( NULL == handle ) return false; @@ -238,7 +238,7 @@ bool test_coap_security_handler_send_message() if( 6 != coap_security_handler_send_message(handle, &cbuf, 6)) return false; - thread_security_destroy(handle); + coap_security_destroy(handle); return true; } @@ -247,18 +247,18 @@ bool test_thread_security_send_close_alert() uint8_t buf[16]; nsdynmemlib_stub.returnCounter = 2; mbedtls_stub.crt_expected_int = 0; - thread_security_t *handle = thread_security_create(1,2,&buf,12,ECJPAKE,&send_to_socket, &receive_from_socket, &start_timer_callback, &timer_status_callback); + coap_security_t *handle = coap_security_create(1,2,&buf,12,ECJPAKE,&send_to_socket, &receive_from_socket, &start_timer_callback, &timer_status_callback); if( NULL == handle ) return false; - if( -1 != thread_security_send_close_alert(NULL)) + if( -1 != coap_security_send_close_alert(NULL)) return false; mbedtls_stub.expected_int = 0; - if( 0 != thread_security_send_close_alert(handle)) + if( 0 != coap_security_send_close_alert(handle)) return false; - thread_security_destroy(handle); + coap_security_destroy(handle); return true; } @@ -267,7 +267,7 @@ bool test_coap_security_handler_read() uint8_t buf[16]; nsdynmemlib_stub.returnCounter = 2; mbedtls_stub.crt_expected_int = 0; - thread_security_t *handle = thread_security_create(1,2,&buf,12,ECJPAKE,&send_to_socket, &receive_from_socket, &start_timer_callback, &timer_status_callback); + coap_security_t *handle = coap_security_create(1,2,&buf,12,ECJPAKE,&send_to_socket, &receive_from_socket, &start_timer_callback, &timer_status_callback); if( NULL == handle ) return false; @@ -279,7 +279,7 @@ bool test_coap_security_handler_read() if( 6 != coap_security_handler_read(handle, &cbuf, 6)) return false; - thread_security_destroy(handle); + coap_security_destroy(handle); return true; } diff --git a/test/coap-service/unittest/coap_service_api/test_coap_service_api.c b/test/coap-service/unittest/coap_service_api/test_coap_service_api.c index 7c91ec085d..331e2501b6 100644 --- a/test/coap-service/unittest/coap_service_api/test_coap_service_api.c +++ b/test/coap-service/unittest/coap_service_api/test_coap_service_api.c @@ -40,8 +40,8 @@ bool test_coap_service_initialize() if( -1 != coap_service_initialize(1, 2, 0, NULL, NULL )) return false; - thread_conn_handler_stub.handler_obj = (thread_conn_handler_t*)malloc(sizeof(thread_conn_handler_t)); - memset(thread_conn_handler_stub.handler_obj, 0, sizeof(thread_conn_handler_t)); + thread_conn_handler_stub.handler_obj = (coap_conn_handler_t*)malloc(sizeof(coap_conn_handler_t)); + memset(thread_conn_handler_stub.handler_obj, 0, sizeof(coap_conn_handler_t)); nsdynmemlib_stub.returnCounter = 1; coap_message_handler_stub.coap_ptr = NULL; @@ -64,8 +64,8 @@ bool test_coap_service_delete() { coap_service_delete(1); - thread_conn_handler_stub.handler_obj = (thread_conn_handler_t*)malloc(sizeof(thread_conn_handler_t)); - memset(thread_conn_handler_stub.handler_obj, 0, sizeof(thread_conn_handler_t)); + thread_conn_handler_stub.handler_obj = (coap_conn_handler_t*)malloc(sizeof(coap_conn_handler_t)); + memset(thread_conn_handler_stub.handler_obj, 0, sizeof(coap_conn_handler_t)); nsdynmemlib_stub.returnCounter = 1; coap_message_handler_stub.coap_ptr = NULL; @@ -86,8 +86,8 @@ bool test_coap_service_virtual_socket_recv() if( -1 != coap_service_virtual_socket_recv(1, &buf, 10, NULL, 0) ) return false; - thread_conn_handler_stub.handler_obj = (thread_conn_handler_t*)malloc(sizeof(thread_conn_handler_t)); - memset(thread_conn_handler_stub.handler_obj, 0, sizeof(thread_conn_handler_t)); + thread_conn_handler_stub.handler_obj = (coap_conn_handler_t*)malloc(sizeof(coap_conn_handler_t)); + memset(thread_conn_handler_stub.handler_obj, 0, sizeof(coap_conn_handler_t)); nsdynmemlib_stub.returnCounter = 1; coap_message_handler_stub.coap_ptr = NULL; @@ -113,8 +113,8 @@ bool test_coap_service_virtual_socket_set_cb() if( -1 != coap_service_virtual_socket_set_cb(1, NULL) ) return false; - thread_conn_handler_stub.handler_obj = (thread_conn_handler_t*)malloc(sizeof(thread_conn_handler_t)); - memset(thread_conn_handler_stub.handler_obj, 0, sizeof(thread_conn_handler_t)); + thread_conn_handler_stub.handler_obj = (coap_conn_handler_t*)malloc(sizeof(coap_conn_handler_t)); + memset(thread_conn_handler_stub.handler_obj, 0, sizeof(coap_conn_handler_t)); nsdynmemlib_stub.returnCounter = 1; coap_message_handler_stub.coap_ptr = NULL; @@ -137,8 +137,8 @@ bool test_coap_service_register_uri() if( -1 != coap_service_register_uri(1, "as", 1, &request_recv_cb)) return false; - thread_conn_handler_stub.handler_obj = (thread_conn_handler_t*)malloc(sizeof(thread_conn_handler_t)); - memset(thread_conn_handler_stub.handler_obj, 0, sizeof(thread_conn_handler_t)); + thread_conn_handler_stub.handler_obj = (coap_conn_handler_t*)malloc(sizeof(coap_conn_handler_t)); + memset(thread_conn_handler_stub.handler_obj, 0, sizeof(coap_conn_handler_t)); nsdynmemlib_stub.returnCounter = 1; coap_message_handler_stub.coap_ptr = NULL; @@ -169,8 +169,8 @@ bool test_coap_service_unregister_uri() if( -1 != coap_service_unregister_uri(1, "as")) return false; - thread_conn_handler_stub.handler_obj = (thread_conn_handler_t*)malloc(sizeof(thread_conn_handler_t)); - memset(thread_conn_handler_stub.handler_obj, 0, sizeof(thread_conn_handler_t)); + thread_conn_handler_stub.handler_obj = (coap_conn_handler_t*)malloc(sizeof(coap_conn_handler_t)); + memset(thread_conn_handler_stub.handler_obj, 0, sizeof(coap_conn_handler_t)); nsdynmemlib_stub.returnCounter = 1; coap_message_handler_stub.coap_ptr = NULL; @@ -215,8 +215,8 @@ bool test_coap_service_response_send() bool test_coap_callbacks() { - thread_conn_handler_stub.handler_obj = (thread_conn_handler_t*)malloc(sizeof(thread_conn_handler_t)); - memset(thread_conn_handler_stub.handler_obj, 0, sizeof(thread_conn_handler_t)); + thread_conn_handler_stub.handler_obj = (coap_conn_handler_t*)malloc(sizeof(coap_conn_handler_t)); + memset(thread_conn_handler_stub.handler_obj, 0, sizeof(coap_conn_handler_t)); nsdynmemlib_stub.returnCounter = 1; coap_message_handler_stub.coap_ptr = (coap_msg_handler_t *)malloc(sizeof(coap_msg_handler_t)); memset(coap_message_handler_stub.coap_ptr, 0, sizeof(coap_msg_handler_t)); @@ -276,8 +276,8 @@ bool test_coap_callbacks() #define COAP_TICK_TIMER 0xf1 //MUST BE SAME AS IN coap_service_api.c bool test_eventOS_callbacks() { - thread_conn_handler_stub.handler_obj = (thread_conn_handler_t*)malloc(sizeof(thread_conn_handler_t)); - memset(thread_conn_handler_stub.handler_obj, 0, sizeof(thread_conn_handler_t)); + thread_conn_handler_stub.handler_obj = (coap_conn_handler_t*)malloc(sizeof(coap_conn_handler_t)); + memset(thread_conn_handler_stub.handler_obj, 0, sizeof(coap_conn_handler_t)); nsdynmemlib_stub.returnCounter = 1; if( 1 != coap_service_initialize(1, 2, 0, NULL, NULL )) return false; @@ -301,8 +301,8 @@ bool test_eventOS_callbacks() bool test_conn_handler_callbacks() { uint8_t buf[16]; - thread_conn_handler_stub.handler_obj = (thread_conn_handler_t*)malloc(sizeof(thread_conn_handler_t)); - memset(thread_conn_handler_stub.handler_obj, 0, sizeof(thread_conn_handler_t)); + thread_conn_handler_stub.handler_obj = (coap_conn_handler_t*)malloc(sizeof(coap_conn_handler_t)); + memset(thread_conn_handler_stub.handler_obj, 0, sizeof(coap_conn_handler_t)); nsdynmemlib_stub.returnCounter = 1; if( 1 != coap_service_initialize(1, 2, COAP_SERVICE_OPTIONS_SECURE_BYPASS, &sec_start_cb, &sec_done_cb )) return false; diff --git a/test/coap-service/unittest/stub/coap_connection_handler_stub.c b/test/coap-service/unittest/stub/coap_connection_handler_stub.c index 43e72d49e4..6f63b5867d 100644 --- a/test/coap-service/unittest/stub/coap_connection_handler_stub.c +++ b/test/coap-service/unittest/stub/coap_connection_handler_stub.c @@ -15,12 +15,12 @@ thread_conn_handler_stub_def thread_conn_handler_stub; -int coap_connection_handler_virtual_recv(thread_conn_handler_t *handler, uint8_t address[static 16], uint16_t port, uint8_t *data_ptr, uint16_t data_len) +int coap_connection_handler_virtual_recv(coap_conn_handler_t *handler, uint8_t address[static 16], uint16_t port, uint8_t *data_ptr, uint16_t data_len) { return thread_conn_handler_stub.int_value; } -thread_conn_handler_t *connection_handler_create(int (*recv_cb)(int8_t socket_id, uint8_t address[static 16], uint16_t port, unsigned char *, int), +coap_conn_handler_t *connection_handler_create(int (*recv_cb)(int8_t socket_id, uint8_t address[static 16], uint16_t port, unsigned char *, int), int (*send_cb)(int8_t socket_id, uint8_t address[static 16], uint16_t port, const unsigned char *, int), int (*pw_cb)(int8_t socket_id, uint8_t address[static 16], uint16_t port, uint8_t *pw_ptr, uint8_t *pw_len), void(*done_cb)(int8_t socket_id, uint8_t address[static 16], uint16_t port, uint8_t keyblock[static KEY_BLOCK_LEN]) ) @@ -32,27 +32,27 @@ thread_conn_handler_t *connection_handler_create(int (*recv_cb)(int8_t socket_id return thread_conn_handler_stub.handler_obj; } -void connection_handler_destroy(thread_conn_handler_t *handler) +void connection_handler_destroy(coap_conn_handler_t *handler) { } -void connection_handler_close_secure_connection( thread_conn_handler_t *handler, ns_address_t *dest_addr ) +void connection_handler_close_secure_connection( coap_conn_handler_t *handler, ns_address_t *dest_addr ) { } -int coap_connection_handler_open_connection(thread_conn_handler_t *handler, uint16_t listen_port, bool use_ephemeral_port, bool is_secure, bool is_real_socket, bool bypassSec) +int coap_connection_handler_open_connection(coap_conn_handler_t *handler, uint16_t listen_port, bool use_ephemeral_port, bool is_secure, bool is_real_socket, bool bypassSec) { return thread_conn_handler_stub.int_value; } -int coap_connection_handler_send_data(thread_conn_handler_t *handler, ns_address_t *dest_addr, uint8_t *data_ptr, uint16_t data_len, bool bypass_link_sec) +int coap_connection_handler_send_data(coap_conn_handler_t *handler, ns_address_t *dest_addr, uint8_t *data_ptr, uint16_t data_len, bool bypass_link_sec) { return thread_conn_handler_stub.int_value; } -bool coap_connection_handler_socket_belongs_to(thread_conn_handler_t *handler, int8_t socket_id) +bool coap_connection_handler_socket_belongs_to(coap_conn_handler_t *handler, int8_t socket_id) { return thread_conn_handler_stub.bool_value; } diff --git a/test/coap-service/unittest/stub/coap_connection_handler_stub.h b/test/coap-service/unittest/stub/coap_connection_handler_stub.h index 61caf71744..5d24c67859 100644 --- a/test/coap-service/unittest/stub/coap_connection_handler_stub.h +++ b/test/coap-service/unittest/stub/coap_connection_handler_stub.h @@ -30,7 +30,7 @@ extern "C" { typedef struct { int int_value; bool bool_value; - thread_conn_handler_t *handler_obj; + coap_conn_handler_t *handler_obj; int (*send_to_sock_cb)(int8_t socket_id, uint8_t address[static 16], uint16_t port, const unsigned char *, int); int (*receive_from_sock_cb)(int8_t socket_id, uint8_t address[static 16], uint16_t port, unsigned char *, int); diff --git a/test/coap-service/unittest/stub/coap_security_handler_stub.c b/test/coap-service/unittest/stub/coap_security_handler_stub.c index 55c378c3da..ba94d493ef 100644 --- a/test/coap-service/unittest/stub/coap_security_handler_stub.c +++ b/test/coap-service/unittest/stub/coap_security_handler_stub.c @@ -12,7 +12,7 @@ thread_sec_def coap_security_handler_stub; -thread_security_t *thread_security_create(int8_t socket_id, int8_t timer_id, uint8_t *address_ptr, uint16_t port, SecureConnectionMode mode, +coap_security_t *coap_security_create(int8_t socket_id, int8_t timer_id, uint8_t *address_ptr, uint16_t port, SecureConnectionMode mode, int (*send_cb)(int8_t socket_id, uint8_t *address_ptr, uint16_t port, const unsigned char *, size_t), int (*receive_cb)(int8_t socket_id, unsigned char *, size_t), void (*start_timer_cb)(int8_t timer_id, uint32_t min, uint32_t fin), @@ -25,12 +25,12 @@ thread_security_t *thread_security_create(int8_t socket_id, int8_t timer_id, uin return coap_security_handler_stub.sec_obj; } -void thread_security_destroy(thread_security_t *sec) +void coap_security_destroy(coap_security_t *sec) { } -int coap_security_handler_connect_non_blocking(thread_security_t *sec, bool is_server, SecureSocketMode sock_mode, thread_keys_t keys) +int coap_security_handler_connect_non_blocking(coap_security_t *sec, bool is_server, SecureSocketMode sock_mode, coap_security_keys_t keys) { sec->_is_started = true; if( coap_security_handler_stub.counter >= 0){ @@ -39,7 +39,7 @@ int coap_security_handler_connect_non_blocking(thread_security_t *sec, bool is_s return coap_security_handler_stub.int_value; } -int coap_security_handler_continue_connecting(thread_security_t *sec) +int coap_security_handler_continue_connecting(coap_security_t *sec) { if( coap_security_handler_stub.counter >= 0){ return coap_security_handler_stub.values[coap_security_handler_stub.counter--]; @@ -49,7 +49,7 @@ int coap_security_handler_continue_connecting(thread_security_t *sec) } -int coap_security_handler_send_message(thread_security_t *sec, unsigned char *message, size_t len) +int coap_security_handler_send_message(coap_security_t *sec, unsigned char *message, size_t len) { if( coap_security_handler_stub.counter >= 0){ return coap_security_handler_stub.values[coap_security_handler_stub.counter--]; @@ -57,7 +57,7 @@ int coap_security_handler_send_message(thread_security_t *sec, unsigned char *me return coap_security_handler_stub.int_value; } -int thread_security_send_close_alert(thread_security_t *sec) +int coap_security_send_close_alert(coap_security_t *sec) { if( coap_security_handler_stub.counter >= 0){ return coap_security_handler_stub.values[coap_security_handler_stub.counter--]; @@ -65,7 +65,7 @@ int thread_security_send_close_alert(thread_security_t *sec) return coap_security_handler_stub.int_value; } -int coap_security_handler_read(thread_security_t *sec, unsigned char* buffer, size_t len) +int coap_security_handler_read(coap_security_t *sec, unsigned char* buffer, size_t len) { if( coap_security_handler_stub.counter >= 0){ return coap_security_handler_stub.values[coap_security_handler_stub.counter--]; diff --git a/test/coap-service/unittest/stub/coap_security_handler_stub.h b/test/coap-service/unittest/stub/coap_security_handler_stub.h index 603ee2d568..2316ffff7d 100644 --- a/test/coap-service/unittest/stub/coap_security_handler_stub.h +++ b/test/coap-service/unittest/stub/coap_security_handler_stub.h @@ -22,7 +22,7 @@ #include "coap_security_handler.h" typedef struct tsh{ - thread_security_t *sec_obj; + coap_security_t *sec_obj; int int_value; int counter; int values[10]; diff --git a/test/coap-service/unittest/stub/sn_coap_protocol_stub.c b/test/coap-service/unittest/stub/sn_coap_protocol_stub.c index f72a233a43..69d0fd4efc 100644 --- a/test/coap-service/unittest/stub/sn_coap_protocol_stub.c +++ b/test/coap-service/unittest/stub/sn_coap_protocol_stub.c @@ -46,22 +46,22 @@ struct coap_s *sn_coap_protocol_init(void *(*used_malloc_func_ptr)(uint16_t), vo return sn_coap_protocol_stub.expectedCoap; } -int8_t sn_coap_protocol_set_block_size(uint16_t block_size) +int8_t sn_coap_protocol_set_block_size(struct coap_s *handle, uint16_t block_size) { return sn_coap_protocol_stub.expectedInt8; } -int8_t sn_coap_protocol_set_duplicate_buffer_size(uint8_t size) +int8_t sn_coap_protocol_set_duplicate_buffer_size(struct coap_s *handle, uint8_t size) { return sn_coap_protocol_stub.expectedInt8; } -int8_t sn_coap_protocol_set_retransmission_parameters(uint8_t resending_count, uint8_t resending_intervall) +int8_t sn_coap_protocol_set_retransmission_parameters(struct coap_s *handle, uint8_t resending_count, uint8_t resending_intervall) { return sn_coap_protocol_stub.expectedInt8; } -int8_t sn_coap_protocol_set_retransmission_buffer(uint8_t buffer_size_messages, uint16_t buffer_size_bytes) +int8_t sn_coap_protocol_set_retransmission_buffer(struct coap_s *handle, uint8_t buffer_size_messages, uint16_t buffer_size_bytes) { return sn_coap_protocol_stub.expectedInt8; } From 13621490c0714bbb784ead2ee9e9307e6e6b3ae5 Mon Sep 17 00:00:00 2001 From: Antti Kauppila Date: Wed, 20 Jan 2016 15:59:13 +0200 Subject: [PATCH 071/154] Fixed unit tests to work with yotta (make does not work) --- test/coap-service/unittest/stub/sn_coap_protocol_stub.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/test/coap-service/unittest/stub/sn_coap_protocol_stub.c b/test/coap-service/unittest/stub/sn_coap_protocol_stub.c index 69d0fd4efc..5b6ae411f0 100644 --- a/test/coap-service/unittest/stub/sn_coap_protocol_stub.c +++ b/test/coap-service/unittest/stub/sn_coap_protocol_stub.c @@ -46,22 +46,23 @@ struct coap_s *sn_coap_protocol_init(void *(*used_malloc_func_ptr)(uint16_t), vo return sn_coap_protocol_stub.expectedCoap; } -int8_t sn_coap_protocol_set_block_size(struct coap_s *handle, uint16_t block_size) +//Yotta is not yet updated to use mbed-client-c 2.x version(git is), so do not modify these 4 yet to contain handle +int8_t sn_coap_protocol_set_block_size(uint16_t block_size) { return sn_coap_protocol_stub.expectedInt8; } -int8_t sn_coap_protocol_set_duplicate_buffer_size(struct coap_s *handle, uint8_t size) +int8_t sn_coap_protocol_set_duplicate_buffer_size(uint8_t size) { return sn_coap_protocol_stub.expectedInt8; } -int8_t sn_coap_protocol_set_retransmission_parameters(struct coap_s *handle, uint8_t resending_count, uint8_t resending_intervall) +int8_t sn_coap_protocol_set_retransmission_parameters(uint8_t resending_count, uint8_t resending_intervall) { return sn_coap_protocol_stub.expectedInt8; } -int8_t sn_coap_protocol_set_retransmission_buffer(struct coap_s *handle, uint8_t buffer_size_messages, uint16_t buffer_size_bytes) +int8_t sn_coap_protocol_set_retransmission_buffer(uint8_t buffer_size_messages, uint16_t buffer_size_bytes) { return sn_coap_protocol_stub.expectedInt8; } From 90c1b3495a7ef691e5ed1493ebb9d641bdb11fe5 Mon Sep 17 00:00:00 2001 From: Antti Kauppila Date: Wed, 27 Jan 2016 09:58:45 +0200 Subject: [PATCH 072/154] Valgrind errors fixed --- source/coap_security_handler.c | 1 + .../unittest/coap_security_handler/test_coap_security_handler.c | 1 + test/coap-service/unittest/stub/nsdynmemLIB_stub.c | 2 -- 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/source/coap_security_handler.c b/source/coap_security_handler.c index 871d6919fd..eff09a5f47 100644 --- a/source/coap_security_handler.c +++ b/source/coap_security_handler.c @@ -104,6 +104,7 @@ coap_security_t *coap_security_create(int8_t socket_id, int8_t timer_id, uint8_t if( !this ){ return NULL; } + memset(this, 0, sizeof(coap_security_t)); if( -1 == coap_security_handler_init(this) ){ ns_dyn_mem_free(this); return NULL; diff --git a/test/coap-service/unittest/coap_security_handler/test_coap_security_handler.c b/test/coap-service/unittest/coap_security_handler/test_coap_security_handler.c index 76bfb7d62c..466faf23f3 100644 --- a/test/coap-service/unittest/coap_security_handler/test_coap_security_handler.c +++ b/test/coap-service/unittest/coap_security_handler/test_coap_security_handler.c @@ -113,6 +113,7 @@ bool test_coap_security_handler_connect() return false; simple_cookie_t c; + memset(&c, 0, sizeof(simple_cookie_t)); mbedtls_stub.cookie_obj = &c; memset(&mbedtls_stub.cookie_value, 1, 8); mbedtls_stub.cookie_len = 2; diff --git a/test/coap-service/unittest/stub/nsdynmemLIB_stub.c b/test/coap-service/unittest/stub/nsdynmemLIB_stub.c index 429c7e2337..e3f16f2e6e 100644 --- a/test/coap-service/unittest/stub/nsdynmemLIB_stub.c +++ b/test/coap-service/unittest/stub/nsdynmemLIB_stub.c @@ -6,9 +6,7 @@ #include #include #include "platform/arm_hal_interrupt.h" -#ifdef STANDARD_MALLOC #include -#endif nsdynmemlib_stub_data_t nsdynmemlib_stub; From 379442e2c5bdfcc6ce96479e8ca89969907b7678 Mon Sep 17 00:00:00 2001 From: Antti Kauppila Date: Thu, 28 Jan 2016 13:21:05 +0200 Subject: [PATCH 073/154] version v1.0.3 --- module.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module.json b/module.json index 7af482c764..9982180906 100644 --- a/module.json +++ b/module.json @@ -1,6 +1,6 @@ { "name": "coap-service", - "version": "1.0.2", + "version": "1.0.3", "description": "CoAP Service library", "keywords": [ "coap", From 55fcb85fc74bfc751181682c591bc5be3fdeb40d Mon Sep 17 00:00:00 2001 From: Mika Tervonen Date: Mon, 25 Jan 2016 03:45:31 -0800 Subject: [PATCH 074/154] Coap service security fixes --- source/coap_security_handler.c | 5 ++++- test/coap-service/unittest/stub/mbedtls_stub.c | 7 +++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/source/coap_security_handler.c b/source/coap_security_handler.c index eff09a5f47..1a342a05a3 100644 --- a/source/coap_security_handler.c +++ b/source/coap_security_handler.c @@ -205,7 +205,7 @@ static int simple_cookie_check(void *ctx, /**** Key export function ****/ static int export_key_block(void *ctx, - const unsigned char *kb, const unsigned char *mk, + const unsigned char *mk, const unsigned char *kb, size_t maclen, size_t keylen, size_t ivlen) { key_block_t *p_key_block = (key_block_t *)ctx; @@ -413,6 +413,9 @@ int coap_security_handler_connect_non_blocking(coap_security_t *sec, bool is_ser simple_cookie_check, &sec->_cookie); + mbedtls_ssl_conf_min_version(&sec->_conf, MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MAJOR_VERSION_3); + mbedtls_ssl_conf_max_version(&sec->_conf, MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MAJOR_VERSION_3); + sec->_is_started = true; int ret = mbedtls_ssl_handshake_step( &sec->_ssl ); diff --git a/test/coap-service/unittest/stub/mbedtls_stub.c b/test/coap-service/unittest/stub/mbedtls_stub.c index 806df9a6ba..79e0b6f188 100644 --- a/test/coap-service/unittest/stub/mbedtls_stub.c +++ b/test/coap-service/unittest/stub/mbedtls_stub.c @@ -28,6 +28,13 @@ int mbedtls_ssl_close_notify( mbedtls_ssl_context *a ) void mbedtls_ssl_init( mbedtls_ssl_context *a ){ +} +void mbedtls_ssl_conf_min_version( mbedtls_ssl_config *conf, int major, int minor ){ + +} + +void mbedtls_ssl_conf_max_version( mbedtls_ssl_config *conf, int major, int minor ){ + } void mbedtls_ssl_config_init( mbedtls_ssl_config *a ){ From 120293c03b63a22b20b7aa64092e16a2d2678559 Mon Sep 17 00:00:00 2001 From: Mika Tervonen Date: Fri, 29 Jan 2016 00:08:36 -0800 Subject: [PATCH 075/154] Remove Nanostack dependency from service api --- coap-service/coap_service_api.h | 2 +- source/coap_connection_handler.c | 22 +++---------------- source/coap_message_handler.c | 3 +++ source/coap_service_api.c | 6 ++--- source/include/coap_connection_handler.h | 2 +- .../stub/coap_connection_handler_stub.c | 3 +-- 6 files changed, 12 insertions(+), 26 deletions(-) diff --git a/coap-service/coap_service_api.h b/coap-service/coap_service_api.h index 83560cfaee..9e1c92d516 100644 --- a/coap-service/coap_service_api.h +++ b/coap-service/coap_service_api.h @@ -139,7 +139,7 @@ extern void coap_service_delete( int8_t service_id ); * * \param service_id Id number of the current service. */ -extern void coap_service_close_secure_connection(int8_t service_id, ns_address_t *dest_addr); +extern void coap_service_close_secure_connection(int8_t service_id, uint8_t destination_addr_ptr[static 16], uint16_t port); /** * \brief Sets password for device diff --git a/source/coap_connection_handler.c b/source/coap_connection_handler.c index 6a0255176c..ecb421a1d5 100644 --- a/source/coap_connection_handler.c +++ b/source/coap_connection_handler.c @@ -112,6 +112,7 @@ static void clear_secure_sessions(internal_socket_t *this){ if( this ){ ns_list_foreach_safe(secure_session_t, cur_ptr, &secure_session_list) { if( cur_ptr->parent == this ){ + coap_security_send_close_alert( cur_ptr->sec_handler ); secure_session_delete(cur_ptr); } } @@ -579,34 +580,17 @@ coap_conn_handler_t *connection_handler_create(receive_from_socket_cb *recv_from void connection_handler_destroy(coap_conn_handler_t *handler) { if(handler){ - if( handler->socket && handler->socket->is_secure){ - //If nothing is sent, there is no address to find. - //This case is handled in int_socket_delete. - secure_session_t *session = secure_session_find_by_parent( handler->socket); - - while(session != NULL ){ - if( session && handler->socket->usage_counter == 1){ //Last connection - coap_security_send_close_alert( session->sec_handler ); - } - - if( session){ - secure_session_delete(session); - } - session = secure_session_find_by_parent( handler->socket); - } - } int_socket_delete(handler->socket); handler->socket = NULL; ns_dyn_mem_free(handler); } } -void connection_handler_close_secure_connection( coap_conn_handler_t *handler, ns_address_t *dest_addr ) +void connection_handler_close_secure_connection( coap_conn_handler_t *handler, uint8_t destination_addr_ptr[static 16], uint16_t port ) { if(handler){ if( handler->socket && handler->socket->is_secure){ - secure_session_t *session = secure_session_find( handler->socket, dest_addr->address, - dest_addr->identifier); + secure_session_t *session = secure_session_find( handler->socket, destination_addr_ptr, port); if( session ){ coap_security_send_close_alert( session->sec_handler ); } diff --git a/source/coap_message_handler.c b/source/coap_message_handler.c index c629821145..20277706c9 100644 --- a/source/coap_message_handler.c +++ b/source/coap_message_handler.c @@ -82,6 +82,9 @@ static void transaction_delete(coap_transaction_t *this) { if (this) { ns_list_remove(&request_list, this); + if(this->data_ptr){ + ns_dyn_mem_free(this->data_ptr); + } ns_dyn_mem_free(this); } diff --git a/source/coap_service_api.c b/source/coap_service_api.c index 00cdf5b360..27ac19998c 100644 --- a/source/coap_service_api.c +++ b/source/coap_service_api.c @@ -344,14 +344,14 @@ void coap_service_delete(int8_t service_id) return; } -void coap_service_close_secure_connection(int8_t service_id, ns_address_t *dest_addr) +extern void coap_service_close_secure_connection(int8_t service_id, uint8_t destination_addr_ptr[static 16], uint16_t port) { coap_service_t *this = service_find(service_id); - if (!this || !dest_addr) { + if (!this || !destination_addr_ptr) { return; } if (this->conn_handler){ - connection_handler_close_secure_connection(this->conn_handler, dest_addr); + connection_handler_close_secure_connection(this->conn_handler, destination_addr_ptr, port); } } diff --git a/source/include/coap_connection_handler.h b/source/include/coap_connection_handler.h index e0fb99d164..a378bbf87b 100644 --- a/source/include/coap_connection_handler.h +++ b/source/include/coap_connection_handler.h @@ -47,7 +47,7 @@ coap_conn_handler_t *connection_handler_create(receive_from_socket_cb *recv_from void connection_handler_destroy( coap_conn_handler_t *handler ); -void connection_handler_close_secure_connection(coap_conn_handler_t *handler, ns_address_t *dest_addr); +void connection_handler_close_secure_connection( coap_conn_handler_t *handler, uint8_t destination_addr_ptr[static 16], uint16_t port ); int coap_connection_handler_open_connection(coap_conn_handler_t *handler, uint16_t listen_port, bool use_ephemeral_port, bool is_secure, bool real_socket, bool bypassSec); diff --git a/test/coap-service/unittest/stub/coap_connection_handler_stub.c b/test/coap-service/unittest/stub/coap_connection_handler_stub.c index 6f63b5867d..0f7e1e8c29 100644 --- a/test/coap-service/unittest/stub/coap_connection_handler_stub.c +++ b/test/coap-service/unittest/stub/coap_connection_handler_stub.c @@ -36,8 +36,7 @@ void connection_handler_destroy(coap_conn_handler_t *handler) { } - -void connection_handler_close_secure_connection( coap_conn_handler_t *handler, ns_address_t *dest_addr ) +void connection_handler_close_secure_connection( coap_conn_handler_t *handler, uint8_t destination_addr_ptr[static 16], uint16_t port ) { } From e84adfd5a715ddd5b3910f10503e71becb9a3b81 Mon Sep 17 00:00:00 2001 From: Mika Tervonen Date: Mon, 1 Feb 2016 22:59:28 -0800 Subject: [PATCH 076/154] version v1.1.0 --- module.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module.json b/module.json index 9982180906..b6f33ba6f7 100644 --- a/module.json +++ b/module.json @@ -1,6 +1,6 @@ { "name": "coap-service", - "version": "1.0.3", + "version": "1.1.0", "description": "CoAP Service library", "keywords": [ "coap", From ad31757f5ff2b399d5da1c62deeb204729be78f9 Mon Sep 17 00:00:00 2001 From: Deepak Venugopal Date: Wed, 3 Feb 2016 05:01:28 -0800 Subject: [PATCH 077/154] added a missing call to socket free --- source/coap_connection_handler.c | 1 + 1 file changed, 1 insertion(+) diff --git a/source/coap_connection_handler.c b/source/coap_connection_handler.c index ecb421a1d5..d275b05d55 100644 --- a/source/coap_connection_handler.c +++ b/source/coap_connection_handler.c @@ -211,6 +211,7 @@ static void int_socket_delete(internal_socket_t *this) this->usage_counter--; if(this->usage_counter == 0){ clear_secure_sessions(this); + socket_free(this->listen_socket); ns_list_remove(&socket_list, this); if( this->data ){ ns_dyn_mem_free(this->data); From c8794b84f95241da815cab1930468ddfdba17c93 Mon Sep 17 00:00:00 2001 From: Tero Heinonen Date: Thu, 4 Feb 2016 12:28:19 +0200 Subject: [PATCH 078/154] Check for return status when opening socket unittests fixed and added test to new lines. --- source/coap_connection_handler.c | 5 +++++ source/coap_service_api.c | 8 ++++++-- .../coap_service_api/test_coap_service_api.c | 13 ++++++++++++- 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/source/coap_connection_handler.c b/source/coap_connection_handler.c index d275b05d55..691bc25e63 100644 --- a/source/coap_connection_handler.c +++ b/source/coap_connection_handler.c @@ -193,6 +193,11 @@ static internal_socket_t *int_socket_create(uint16_t listen_port, bool use_ephem }else{ this->listen_socket = socket_open(SOCKET_UDP, listen_port, secure_recv_sckt_msg); } + // Socket create failed + if(this->listen_socket < 0){ + ns_dyn_mem_free(this); + return NULL; + } // XXX API for this? May want to get clever to do recommended first query = 1 hop, retries = whole PAN socket_setsockopt(this->listen_socket, SOCKET_IPPROTO_IPV6, SOCKET_IPV6_MULTICAST_HOPS, &(const int16_t) { 16 diff --git a/source/coap_service_api.c b/source/coap_service_api.c index 27ac19998c..5eda0af1f9 100644 --- a/source/coap_service_api.c +++ b/source/coap_service_api.c @@ -302,10 +302,14 @@ int8_t coap_service_initialize(int8_t interface_id, uint16_t listen_port, uint8_ ns_dyn_mem_free(this); return -1; } - coap_connection_handler_open_connection(this->conn_handler, listen_port, ((this->service_options & COAP_SERVICE_OPTIONS_EPHEMERAL_PORT) == COAP_SERVICE_OPTIONS_EPHEMERAL_PORT), + if (0 > coap_connection_handler_open_connection(this->conn_handler, listen_port, ((this->service_options & COAP_SERVICE_OPTIONS_EPHEMERAL_PORT) == COAP_SERVICE_OPTIONS_EPHEMERAL_PORT), ((this->service_options & COAP_SERVICE_OPTIONS_SECURE) == COAP_SERVICE_OPTIONS_SECURE), ((this->service_options & COAP_SERVICE_OPTIONS_VIRTUAL_SOCKET) != COAP_SERVICE_OPTIONS_VIRTUAL_SOCKET), - ((this->service_options & COAP_SERVICE_OPTIONS_SECURE_BYPASS) == COAP_SERVICE_OPTIONS_SECURE_BYPASS)); + ((this->service_options & COAP_SERVICE_OPTIONS_SECURE_BYPASS) == COAP_SERVICE_OPTIONS_SECURE_BYPASS))){ + ns_dyn_mem_free(this->conn_handler); + ns_dyn_mem_free(this); + return -1; + } if (!coap_service_handle) { coap_service_handle = coap_message_handler_init(&own_alloc, &own_free, &coap_tx_function); diff --git a/test/coap-service/unittest/coap_service_api/test_coap_service_api.c b/test/coap-service/unittest/coap_service_api/test_coap_service_api.c index 331e2501b6..3d41dc42f8 100644 --- a/test/coap-service/unittest/coap_service_api/test_coap_service_api.c +++ b/test/coap-service/unittest/coap_service_api/test_coap_service_api.c @@ -35,6 +35,7 @@ bool test_coap_service_initialize() if( -1 != coap_service_initialize(1, 2, 0, NULL, NULL )) return false; + nsdynmemlib_stub.returnCounter = 1; thread_conn_handler_stub.handler_obj = NULL; if( -1 != coap_service_initialize(1, 2, 0, NULL, NULL )) @@ -42,9 +43,18 @@ bool test_coap_service_initialize() thread_conn_handler_stub.handler_obj = (coap_conn_handler_t*)malloc(sizeof(coap_conn_handler_t)); memset(thread_conn_handler_stub.handler_obj, 0, sizeof(coap_conn_handler_t)); - nsdynmemlib_stub.returnCounter = 1; coap_message_handler_stub.coap_ptr = NULL; + nsdynmemlib_stub.returnCounter = 1; + thread_conn_handler_stub.int_value = -1; + if( -1 != coap_service_initialize(1, 2, 0, NULL, NULL )) + return false; + + thread_conn_handler_stub.handler_obj = (coap_conn_handler_t*)malloc(sizeof(coap_conn_handler_t)); + memset(thread_conn_handler_stub.handler_obj, 0, sizeof(coap_conn_handler_t)); + nsdynmemlib_stub.returnCounter = 1; + thread_conn_handler_stub.int_value = 0; + if( 1 != coap_service_initialize(1, 2, 0, NULL, NULL )) return false; @@ -173,6 +183,7 @@ bool test_coap_service_unregister_uri() memset(thread_conn_handler_stub.handler_obj, 0, sizeof(coap_conn_handler_t)); nsdynmemlib_stub.returnCounter = 1; coap_message_handler_stub.coap_ptr = NULL; + thread_conn_handler_stub.int_value = 0; if( 1 != coap_service_initialize(1, 2, 0, NULL, NULL )) return false; From fbdfa62dbe82bda069b5e04d58bf77ce0f0829ad Mon Sep 17 00:00:00 2001 From: Tero Heinonen Date: Fri, 5 Feb 2016 11:33:07 +0200 Subject: [PATCH 079/154] version v1.1.1 --- module.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module.json b/module.json index b6f33ba6f7..93d05b9936 100644 --- a/module.json +++ b/module.json @@ -1,6 +1,6 @@ { "name": "coap-service", - "version": "1.1.0", + "version": "1.1.1", "description": "CoAP Service library", "keywords": [ "coap", From c00a0f8956349af41849d8dc84f96fa513d3fb35 Mon Sep 17 00:00:00 2001 From: Antti Kauppila Date: Sat, 6 Feb 2016 11:51:31 +0200 Subject: [PATCH 080/154] Updated mbec-client-c version & unit tests --- .gitignore | 2 +- module.json | 2 +- test/coap-service/unittest/run_tests~ | 34 ------------------- .../unittest/stub/sn_coap_protocol_stub.c | 9 +++-- 4 files changed, 6 insertions(+), 41 deletions(-) delete mode 100755 test/coap-service/unittest/run_tests~ diff --git a/.gitignore b/.gitignore index f42f4600c9..7da85016ee 100644 --- a/.gitignore +++ b/.gitignore @@ -7,4 +7,4 @@ coverage build/ yotta_modules/ yotta_targets/ - +upload.tar.gz diff --git a/module.json b/module.json index 93d05b9936..370c5c6cd1 100644 --- a/module.json +++ b/module.json @@ -19,7 +19,7 @@ ], "dependencies": { "nanostack-libservice": "^3.0.0", - "mbed-client-c": "^1.1.0", + "mbed-client-c": "^2.0.0", "sal-stack-nanostack": "^3.0.0", "mbedtls": "^2.0.0" }, diff --git a/test/coap-service/unittest/run_tests~ b/test/coap-service/unittest/run_tests~ deleted file mode 100755 index f34b3b8d05..0000000000 --- a/test/coap-service/unittest/run_tests~ +++ /dev/null @@ -1,34 +0,0 @@ -#!/bin/bash -echo -echo Build Coap-service unit tests -echo - -# Remember to add new test folder to Makefile -make clean -make all - -echo -echo Create results -echo -mkdir results -find ./ -name '*.xml' | xargs cp -t ./results/ - -echo -echo Create coverage document -echo -mkdir coverages -cd coverages - -lcov -q -d ../. -c -o app.info -lcov -q -r app.info "/test*" -o app.info -lcov -q -r app.info "/usr*" -o app.info -lcov -q -r app.info "/libService*" -o app.info -genhtml -q --no-branch-coverage app.info -cd .. -echo -echo -echo -echo Have a nice bug hunt! -echo -echo -echo diff --git a/test/coap-service/unittest/stub/sn_coap_protocol_stub.c b/test/coap-service/unittest/stub/sn_coap_protocol_stub.c index 5b6ae411f0..69d0fd4efc 100644 --- a/test/coap-service/unittest/stub/sn_coap_protocol_stub.c +++ b/test/coap-service/unittest/stub/sn_coap_protocol_stub.c @@ -46,23 +46,22 @@ struct coap_s *sn_coap_protocol_init(void *(*used_malloc_func_ptr)(uint16_t), vo return sn_coap_protocol_stub.expectedCoap; } -//Yotta is not yet updated to use mbed-client-c 2.x version(git is), so do not modify these 4 yet to contain handle -int8_t sn_coap_protocol_set_block_size(uint16_t block_size) +int8_t sn_coap_protocol_set_block_size(struct coap_s *handle, uint16_t block_size) { return sn_coap_protocol_stub.expectedInt8; } -int8_t sn_coap_protocol_set_duplicate_buffer_size(uint8_t size) +int8_t sn_coap_protocol_set_duplicate_buffer_size(struct coap_s *handle, uint8_t size) { return sn_coap_protocol_stub.expectedInt8; } -int8_t sn_coap_protocol_set_retransmission_parameters(uint8_t resending_count, uint8_t resending_intervall) +int8_t sn_coap_protocol_set_retransmission_parameters(struct coap_s *handle, uint8_t resending_count, uint8_t resending_intervall) { return sn_coap_protocol_stub.expectedInt8; } -int8_t sn_coap_protocol_set_retransmission_buffer(uint8_t buffer_size_messages, uint16_t buffer_size_bytes) +int8_t sn_coap_protocol_set_retransmission_buffer(struct coap_s *handle, uint8_t buffer_size_messages, uint16_t buffer_size_bytes) { return sn_coap_protocol_stub.expectedInt8; } From 3bfc457c7ff251983e373aafc67834dbef004b55 Mon Sep 17 00:00:00 2001 From: Antti Kauppila Date: Sat, 6 Feb 2016 13:07:51 +0200 Subject: [PATCH 081/154] Update coap_security_handler.c --- source/coap_security_handler.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/source/coap_security_handler.c b/source/coap_security_handler.c index 1a342a05a3..6a06c47282 100644 --- a/source/coap_security_handler.c +++ b/source/coap_security_handler.c @@ -60,10 +60,8 @@ static int coap_security_handler_init(coap_security_t *sec){ sec->_is_started = false; - //TODO: Must have at least 1 strong entropy source, otherwise DTLS will fail. - //This is NOT strong even we say it is! if( mbedtls_entropy_add_source( &sec->_entropy, entropy_poll, NULL, - 128, 1 ) < 0 ){ + 128, 0 ) < 0 ){ return -1; } From d7dca8aa8bc92c5432060873aac8c31cade23f9a Mon Sep 17 00:00:00 2001 From: Antti Kauppila Date: Tue, 9 Feb 2016 13:38:04 +0200 Subject: [PATCH 082/154] version v1.1.2 --- module.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module.json b/module.json index 370c5c6cd1..79ea04dac3 100644 --- a/module.json +++ b/module.json @@ -1,6 +1,6 @@ { "name": "coap-service", - "version": "1.1.1", + "version": "1.1.2", "description": "CoAP Service library", "keywords": [ "coap", From cf1de559027ce688b35ebb1a1779944aa2ec31fb Mon Sep 17 00:00:00 2001 From: Tero Heinonen Date: Wed, 10 Feb 2016 11:20:35 +0200 Subject: [PATCH 083/154] CoAP service refactoring: - mbedtls timer implementation changed to use event timer. - Connection handler to return all error cases --- source/coap_connection_handler.c | 142 +++++++++++++++++-------------- source/coap_security_handler.c | 24 +++--- 2 files changed, 90 insertions(+), 76 deletions(-) diff --git a/source/coap_connection_handler.c b/source/coap_connection_handler.c index 691bc25e63..ea6e770ec9 100644 --- a/source/coap_connection_handler.c +++ b/source/coap_connection_handler.c @@ -10,7 +10,7 @@ #include "nsdynmemLIB.h" #include "socket_api.h" #include "net_interface.h" -#include "eventOS_callback_timer.h" +#include "eventOS_event_timer.h" #define TRACE_GROUP "ThCH" @@ -35,17 +35,19 @@ typedef struct internal_socket_s { static NS_LIST_DEFINE(socket_list, internal_socket_t, link); -static void timer_cb(int8_t timer_id, uint16_t slots); -#define TIMER_FACTOR 20 /* mbedtls timer in ms, our timer in slots (50us), therefore 20 slots per ms */ +static void timer_cb(void* param); + #define TIMER_STATE_CANCELLED -1 /* cancelled */ #define TIMER_STATE_NO_EXPIRY 0 /* none of the delays is expired */ #define TIMER_STATE_INT_EXPIRY 1 /* the intermediate delay only is expired */ #define TIMER_STATE_FIN_EXPIRY 2 /* the final delay is expired */ + typedef struct secure_timer_s { - int8_t id; + uint8_t id; + timeout_t *timer; int8_t state; - uint8_t cycles; - uint8_t cycle_count; + uint32_t fin_ms; + uint32_t int_ms; } secure_timer_t; typedef struct secure_session { @@ -64,6 +66,18 @@ static int receive_from_socket(int8_t socket_id, unsigned char *buf, size_t len) static void start_timer(int8_t timer_id, uint32_t int_ms, uint32_t fin_ms); static int timer_status(int8_t timer_id); +static secure_session_t *secure_session_find_by_timer_id(int8_t timer_id) +{ + secure_session_t *this = NULL; + ns_list_foreach(secure_session_t, cur_ptr, &secure_session_list) { + if (cur_ptr->timer.id == timer_id) { + this = cur_ptr; + break; + } + } + return this; +} + static secure_session_t *secure_session_create(internal_socket_t *parent, uint8_t *address_ptr, uint16_t port) { secure_session_t *this = ns_dyn_mem_alloc(sizeof(secure_session_t)); @@ -72,12 +86,15 @@ static secure_session_t *secure_session_create(internal_socket_t *parent, uint8_ } memset(this, 0, sizeof(secure_session_t)); - this->timer.id = eventOS_callback_timer_register(timer_cb); - if (this->timer.id == -1) { - tr_error("tasklet alloc failed"); - ns_dyn_mem_free(this); - return NULL; + uint8_t timer_id = 1; + + while(secure_session_find_by_timer_id(timer_id)){ + if(timer_id == 0xff){ + return NULL; + } + timer_id++; } + this->timer.id = timer_id; this->sec_handler = coap_security_create(parent->listen_socket, this->timer.id, address_ptr, port, ECJPAKE, &send_to_socket, &receive_from_socket, &start_timer, &timer_status); @@ -101,6 +118,9 @@ static void secure_session_delete(secure_session_t *this) coap_security_destroy(this->sec_handler); this->sec_handler = NULL; } + if(this->timer.timer){ + eventOS_timeout_cancel(this->timer.timer); + } ns_dyn_mem_free(this); this = NULL; } @@ -119,32 +139,6 @@ static void clear_secure_sessions(internal_socket_t *this){ } } -static secure_session_t *secure_session_find_by_timer_id(int8_t timer_id) -{ - secure_session_t *this = NULL; - ns_list_foreach(secure_session_t, cur_ptr, &secure_session_list) { - if (cur_ptr->timer.id == timer_id) { - this = cur_ptr; - break; - } - } - return this; -} - -static secure_session_t *secure_session_find_by_parent(internal_socket_t *parent) -{ - secure_session_t *this = NULL; - ns_list_foreach(secure_session_t, cur_ptr, &secure_session_list) { - if( cur_ptr->sec_handler ){ - if (cur_ptr->parent == parent ) { - this = cur_ptr; - break; - } - } - } - return this; -} - static secure_session_t *secure_session_find(internal_socket_t *parent, uint8_t *address_ptr, uint16_t port) { secure_session_t *this = NULL; @@ -305,29 +299,36 @@ static int receive_from_socket(int8_t socket_id, unsigned char *buf, size_t len) * TODO - might be better to use an event timer in conjunction with * CoAP tasklet */ -static void timer_cb(int8_t timer_id, uint16_t slots) +static void timer_cb(void *param) { - (void)slots; /* No need to look at slots */ - - secure_session_t *sec = secure_session_find_by_timer_id(timer_id); + secure_session_t *sec = param; if( sec ){ - if (++sec->timer.cycle_count == sec->timer.cycles) { - /* We have counted the number of cycles - finish */ - sec->timer.state = TIMER_STATE_FIN_EXPIRY; - /* Stop the timer as we no longer need it */ - (void)eventOS_callback_timer_stop(sec->timer.id); /* We can ignore return; ID is valid */ + if(sec->timer.fin_ms > sec->timer.int_ms){ + /* Intermediate expiry */ + sec->timer.fin_ms -= sec->timer.int_ms; + sec->timer.state = TIMER_STATE_INT_EXPIRY; + int error = coap_security_handler_continue_connecting(sec->sec_handler); + if(MBEDTLS_ERR_SSL_TIMEOUT == error) { + //TODO: How do we handle timeouts? + secure_session_delete(sec); + } + else{ + sec->timer.timer = eventOS_timeout_ms(timer_cb, sec->timer.int_ms, (void*)sec); + } + } + else{ + /* We have counted the number of cycles - finish */ + eventOS_timeout_cancel(sec->timer.timer); + sec->timer.fin_ms = 0; + sec->timer.int_ms = 0; + sec->timer.timer = NULL; + sec->timer.state = TIMER_STATE_FIN_EXPIRY; int error = coap_security_handler_continue_connecting(sec->sec_handler); if(MBEDTLS_ERR_SSL_TIMEOUT == error) { //TODO: How do we handle timeouts? secure_session_delete(sec); } - } else { - /* Intermediate expiry */ - sec->timer.state = TIMER_STATE_INT_EXPIRY; } - //TODO: In case of DTLS and count == 1 || 4 we must call continue connecting of security so - //that mbedtls can handle timeout logic: resending etc... - //Not done, because timer should be refactored to be platform specific! } } @@ -336,15 +337,20 @@ static void start_timer(int8_t timer_id, uint32_t int_ms, uint32_t fin_ms) secure_session_t *sec = secure_session_find_by_timer_id(timer_id); if( sec ){ if ((int_ms > 0) && (fin_ms > 0)) { - /* Note: as it stands, fin_ms is always 4 * int_ms, so cycles is always 4 but this may change */ - sec->timer.cycles = fin_ms/int_ms; - sec->timer.cycle_count = 0; + sec->timer.int_ms = int_ms; + sec->timer.fin_ms = fin_ms; sec->timer.state = TIMER_STATE_NO_EXPIRY; - eventOS_callback_timer_start(sec->timer.id, int_ms * TIMER_FACTOR); + if(sec->timer.timer){ + eventOS_timeout_cancel(sec->timer.timer); + } + sec->timer.timer = eventOS_timeout_ms(timer_cb, int_ms, sec); } else if (fin_ms == 0) { /* fin_ms == 0 means cancel the timer */ sec->timer.state = TIMER_STATE_CANCELLED; - (void)eventOS_callback_timer_stop(sec->timer.id); /* We can ignore return; ID will be valid */ + eventOS_timeout_cancel(sec->timer.timer); + sec->timer.fin_ms = 0; + sec->timer.int_ms = 0; + sec->timer.timer = NULL; } } } @@ -390,17 +396,20 @@ static void secure_recv_sckt_msg(void *cb_res) if( sock && read_data(sckt_data, sock, &src_address) == 0 ){ secure_session_t *session = secure_session_find(sock, src_address.address, src_address.identifier); + + // Create session if( !session ){ memcpy( sock->dest_addr.address, src_address.address, 16 ); sock->dest_addr.identifier = src_address.identifier; sock->dest_addr.type = src_address.type; session = secure_session_create(sock, src_address.address, src_address.identifier); } - if( !session ){ tr_err("secure_recv_sckt_msg session creation failed - OOM"); return; } + + // Start handshake if( !session->sec_handler->_is_started ){ uint8_t *pw = (uint8_t *)ns_dyn_mem_alloc(64); uint8_t pw_len; @@ -414,8 +423,13 @@ static void secure_recv_sckt_msg(void *cb_res) } ns_dyn_mem_free(pw); }else{ + //Continue handshake if( !session->secure_done ){ - if( coap_security_handler_continue_connecting(session->sec_handler) == 0){ + int ret = coap_security_handler_continue_connecting(session->sec_handler); + // Handshake done + if(ret == 0){ + eventOS_timeout_cancel(session->timer.timer); + session->timer.timer = NULL; session->secure_done = true; if( sock->parent->_security_done_cb ){ sock->parent->_security_done_cb(sock->listen_socket, src_address.address, @@ -423,7 +437,12 @@ static void secure_recv_sckt_msg(void *cb_res) session->sec_handler->_keyblk.value); } } - //TODO: error handling + else if (ret < 0){ + // error handling + // TODO: here we also should clear CoAP retransmission buffer and inform that CoAP request sending is failed. + secure_session_delete(session); + } + //Session valid }else{ unsigned char *data = ns_dyn_mem_temporary_alloc(sock->data_len); int len = 0; @@ -431,10 +450,7 @@ static void secure_recv_sckt_msg(void *cb_res) if( len < 0 ){ ns_dyn_mem_free(data); if( len == MBEDTLS_ERR_SSL_PEER_CLOSE_NOTIFY ){ -// if( sock->parent->sec_conn_closed_cb ){ -// sock->parent->sec_conn_closed_cb(sock->listen_socket); secure_session_delete( session ); -// } } }else{ if( sock->parent->_recv_cb ){ diff --git a/source/coap_security_handler.c b/source/coap_security_handler.c index 6a06c47282..f5304c9a29 100644 --- a/source/coap_security_handler.c +++ b/source/coap_security_handler.c @@ -433,7 +433,8 @@ int coap_security_handler_connect_non_blocking(coap_security_t *sec, bool is_ser } int coap_security_handler_continue_connecting(coap_security_t *sec){ - int ret=-1; + int ret = -1; + while( ret != MBEDTLS_ERR_SSL_WANT_READ ){ ret = mbedtls_ssl_handshake_step( &sec->_ssl ); @@ -446,22 +447,20 @@ int coap_security_handler_continue_connecting(coap_security_t *sec){ #endif return 1; } - if(MBEDTLS_ERR_SSL_TIMEOUT == ret || - MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO == ret || - MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE == ret || - MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE_REQUEST == ret || - MBEDTLS_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE == ret || - MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO_DONE == ret || - MBEDTLS_ERR_SSL_BAD_HS_CHANGE_CIPHER_SPEC == ret || - MBEDTLS_ERR_SSL_BAD_HS_FINISHED == ret) { - return MBEDTLS_ERR_SSL_TIMEOUT; + else if(ret && (ret != MBEDTLS_ERR_SSL_WANT_READ && ret != MBEDTLS_ERR_SSL_WANT_WRITE)){ + return ret; } - if( sec->_ssl.state == MBEDTLS_SSL_HANDSHAKE_OVER ){ + if( sec->_ssl.state == MBEDTLS_SSL_HANDSHAKE_OVER ){ return 0; } } - return ret; + + if(ret == MBEDTLS_ERR_SSL_WANT_READ || ret == MBEDTLS_ERR_SSL_WANT_WRITE){ + return 1; + } + + return -1; } @@ -500,7 +499,6 @@ int coap_security_handler_read(coap_security_t *sec, unsigned char* buffer, size while( ret == MBEDTLS_ERR_SSL_WANT_READ || ret == MBEDTLS_ERR_SSL_WANT_WRITE ); } - return ret; //bytes read } From 45daf83135b25f7b87294026da3314ed86220f8d Mon Sep 17 00:00:00 2001 From: Tero Heinonen Date: Wed, 10 Feb 2016 13:02:03 +0200 Subject: [PATCH 084/154] unittests fixed --- source/coap_connection_handler.c | 1 + .../unittest/coap_connection_handler/Makefile | 1 + .../test_coap_connection_handler.c | 7 ++++--- .../test_coap_security_handler.c | 6 +++--- test/coap-service/unittest/stub/mbedtls_stub.c | 7 ++++++- test/coap-service/unittest/stub/mbedtls_stub.h | 1 + test/coap-service/unittest/stub/timeout_stub.c | 18 ++++++++++++++++++ 7 files changed, 34 insertions(+), 7 deletions(-) create mode 100644 test/coap-service/unittest/stub/timeout_stub.c diff --git a/source/coap_connection_handler.c b/source/coap_connection_handler.c index ea6e770ec9..0618193e6a 100644 --- a/source/coap_connection_handler.c +++ b/source/coap_connection_handler.c @@ -90,6 +90,7 @@ static secure_session_t *secure_session_create(internal_socket_t *parent, uint8_ while(secure_session_find_by_timer_id(timer_id)){ if(timer_id == 0xff){ + ns_dyn_mem_free(this); return NULL; } timer_id++; diff --git a/test/coap-service/unittest/coap_connection_handler/Makefile b/test/coap-service/unittest/coap_connection_handler/Makefile index d934974d1f..5fcf10453e 100644 --- a/test/coap-service/unittest/coap_connection_handler/Makefile +++ b/test/coap-service/unittest/coap_connection_handler/Makefile @@ -13,6 +13,7 @@ TEST_SRC_FILES = \ ../stub/ns_trace_stub.c \ ../stub/ns_list_stub.c \ ../stub/ns_timer_stub.c \ + ../stub/timeout_stub.c \ ../stub/nsdynmemLIB_stub.c \ ../stub/socket_api_stub.c \ ../stub/coap_security_handler_stub.c \ diff --git a/test/coap-service/unittest/coap_connection_handler/test_coap_connection_handler.c b/test/coap-service/unittest/coap_connection_handler/test_coap_connection_handler.c index 8a90d196fa..2542496c19 100644 --- a/test/coap-service/unittest/coap_connection_handler/test_coap_connection_handler.c +++ b/test/coap-service/unittest/coap_connection_handler/test_coap_connection_handler.c @@ -227,6 +227,7 @@ bool test_coap_connection_handler_virtual_recv() return false; nsdynmemlib_stub.returnCounter = 1; + coap_security_handler_stub.int_value = 0; coap_security_handler_stub.sec_obj->_remote_port = 12; memset(coap_security_handler_stub.sec_obj->_remote_address, 1, 16 ); if( 0 != coap_connection_handler_virtual_recv(handler2,buf, 12, &buf, 1) ) @@ -312,16 +313,16 @@ bool test_timer_callbacks() //Note next tests will affect ns_timer test (cycle & cycle_count if( coap_security_handler_stub.start_timer_cb ){ - coap_security_handler_stub.start_timer_cb(5, 0, 0); + coap_security_handler_stub.start_timer_cb(1, 0, 0); - coap_security_handler_stub.start_timer_cb(5, 1, 2); + coap_security_handler_stub.start_timer_cb(1, 1, 2); } if( coap_security_handler_stub.timer_status_cb ){ if( -1 != coap_security_handler_stub.timer_status_cb(4) ) return false; - if( 0 != coap_security_handler_stub.timer_status_cb(5) ) + if( 0 != coap_security_handler_stub.timer_status_cb(1) ) return false; } diff --git a/test/coap-service/unittest/coap_security_handler/test_coap_security_handler.c b/test/coap-service/unittest/coap_security_handler/test_coap_security_handler.c index 466faf23f3..36d06bb4f6 100644 --- a/test/coap-service/unittest/coap_security_handler/test_coap_security_handler.c +++ b/test/coap-service/unittest/coap_security_handler/test_coap_security_handler.c @@ -203,17 +203,17 @@ bool test_coap_security_handler_continue_connecting() mbedtls_stub.counter = 0; mbedtls_stub.retArray[0] = MBEDTLS_ERR_SSL_BAD_HS_FINISHED; - if( MBEDTLS_ERR_SSL_TIMEOUT != coap_security_handler_continue_connecting(handle) ) + if( MBEDTLS_ERR_SSL_BAD_HS_FINISHED != coap_security_handler_continue_connecting(handle) ) return false; mbedtls_stub.counter = 0; mbedtls_stub.retArray[0] = MBEDTLS_ERR_SSL_WANT_READ; - if( MBEDTLS_ERR_SSL_WANT_READ != coap_security_handler_continue_connecting(handle) ) + if( 1 != coap_security_handler_continue_connecting(handle) ) return false; mbedtls_stub.counter = 0; - mbedtls_stub.retArray[0] = HANDSHAKE_FINISHED_VALUE; + mbedtls_stub.retArray[0] = HANDSHAKE_FINISHED_VALUE_RETURN_ZERO; if( 0 != coap_security_handler_continue_connecting(handle) ) return false; diff --git a/test/coap-service/unittest/stub/mbedtls_stub.c b/test/coap-service/unittest/stub/mbedtls_stub.c index 79e0b6f188..d6d88e6acb 100644 --- a/test/coap-service/unittest/stub/mbedtls_stub.c +++ b/test/coap-service/unittest/stub/mbedtls_stub.c @@ -10,8 +10,13 @@ mbedtls_stub_def mbedtls_stub; int mbedtls_ssl_handshake_step( mbedtls_ssl_context *ssl ) { if( mbedtls_stub.useCounter ){ - if( mbedtls_stub.retArray[mbedtls_stub.counter] == HANDSHAKE_FINISHED_VALUE){ + + if( mbedtls_stub.retArray[mbedtls_stub.counter] == HANDSHAKE_FINISHED_VALUE || + mbedtls_stub.retArray[mbedtls_stub.counter] == HANDSHAKE_FINISHED_VALUE_RETURN_ZERO){ + ssl->state = MBEDTLS_SSL_HANDSHAKE_OVER; + if(mbedtls_stub.retArray[mbedtls_stub.counter] == HANDSHAKE_FINISHED_VALUE_RETURN_ZERO) + return 0; } return mbedtls_stub.retArray[mbedtls_stub.counter++]; } diff --git a/test/coap-service/unittest/stub/mbedtls_stub.h b/test/coap-service/unittest/stub/mbedtls_stub.h index 0c28668131..297f6f7cfb 100644 --- a/test/coap-service/unittest/stub/mbedtls_stub.h +++ b/test/coap-service/unittest/stub/mbedtls_stub.h @@ -32,6 +32,7 @@ #define HANDSHAKE_FINISHED_VALUE 8888 +#define HANDSHAKE_FINISHED_VALUE_RETURN_ZERO 8889 typedef struct { int crt_expected_int; diff --git a/test/coap-service/unittest/stub/timeout_stub.c b/test/coap-service/unittest/stub/timeout_stub.c new file mode 100644 index 0000000000..36bf074305 --- /dev/null +++ b/test/coap-service/unittest/stub/timeout_stub.c @@ -0,0 +1,18 @@ +#include "eventOS_event_timer.h" + +// Timeout structure, already typedefed to timeout_t +struct timeout_entry_t { + uint8_t id; +}; + +static timeout_t timeout_stub; + +timeout_t *eventOS_timeout_ms(void (*callback)(void *), uint32_t ms, void *arg) +{ + return &timeout_stub; +} + +void eventOS_timeout_cancel(timeout_t *t) +{ + +} From 6dd666a4554e9855127a1b17f49bf4fbee1dd9b5 Mon Sep 17 00:00:00 2001 From: Tero Heinonen Date: Thu, 11 Feb 2016 13:23:08 +0200 Subject: [PATCH 085/154] Virtual socket error handling fixed. Entropy fix reverted to make yotta build working. This must be fixed properly later. --- source/coap_connection_handler.c | 9 ++++++++- source/coap_security_handler.c | 4 +++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/source/coap_connection_handler.c b/source/coap_connection_handler.c index 0618193e6a..f8298fbf4b 100644 --- a/source/coap_connection_handler.c +++ b/source/coap_connection_handler.c @@ -529,7 +529,8 @@ int coap_connection_handler_virtual_recv(coap_conn_handler_t *handler, uint8_t a } }else{ if( !session->secure_done ){ - if( coap_security_handler_continue_connecting(session->sec_handler) == 0){ + int ret = coap_security_handler_continue_connecting(session->sec_handler); + if(ret == 0){ session->secure_done = true; if( handler->_security_done_cb ){ handler->_security_done_cb(sock->listen_socket, @@ -538,6 +539,12 @@ int coap_connection_handler_virtual_recv(coap_conn_handler_t *handler, uint8_t a } return 0; } + else if(ret < 0) + { + // error handling + // TODO: here we also should clear CoAP retransmission buffer and inform that CoAP request sending is failed. + secure_session_delete(session); + } //TODO: error handling }else{ unsigned char *data = ns_dyn_mem_temporary_alloc(sock->data_len); diff --git a/source/coap_security_handler.c b/source/coap_security_handler.c index f5304c9a29..3834030a6d 100644 --- a/source/coap_security_handler.c +++ b/source/coap_security_handler.c @@ -60,8 +60,10 @@ static int coap_security_handler_init(coap_security_t *sec){ sec->_is_started = false; + //TODO: Must have at least 1 strong entropy source, otherwise DTLS will fail. + //This is NOT strong even we say it is! if( mbedtls_entropy_add_source( &sec->_entropy, entropy_poll, NULL, - 128, 0 ) < 0 ){ + 128, 1 ) < 0 ){ return -1; } From 8fea37aeb1a7f36586d2ae8899bdaea7ffb2b8ec Mon Sep 17 00:00:00 2001 From: Tero Heinonen Date: Fri, 12 Feb 2016 09:52:39 +0200 Subject: [PATCH 086/154] version v1.2.0 --- module.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module.json b/module.json index 79ea04dac3..fc26a2e2f1 100644 --- a/module.json +++ b/module.json @@ -1,6 +1,6 @@ { "name": "coap-service", - "version": "1.1.2", + "version": "1.2.0", "description": "CoAP Service library", "keywords": [ "coap", From 74744cca5189437fd543a9b4b7dea5ca4907ca53 Mon Sep 17 00:00:00 2001 From: Tero Heinonen Date: Fri, 12 Feb 2016 14:52:16 +0200 Subject: [PATCH 087/154] Close and clear session when error received after connection is established. --- source/coap_connection_handler.c | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/source/coap_connection_handler.c b/source/coap_connection_handler.c index f8298fbf4b..2b0cbe1306 100644 --- a/source/coap_connection_handler.c +++ b/source/coap_connection_handler.c @@ -450,9 +450,7 @@ static void secure_recv_sckt_msg(void *cb_res) len = coap_security_handler_read(session->sec_handler, data, sock->data_len); if( len < 0 ){ ns_dyn_mem_free(data); - if( len == MBEDTLS_ERR_SSL_PEER_CLOSE_NOTIFY ){ - secure_session_delete( session ); - } + secure_session_delete( session ); }else{ if( sock->parent->_recv_cb ){ sock->parent->_recv_cb(sock->listen_socket, src_address.address, src_address.identifier, data, len); @@ -552,13 +550,8 @@ int coap_connection_handler_virtual_recv(coap_conn_handler_t *handler, uint8_t a len = coap_security_handler_read(session->sec_handler, data, sock->data_len); if( len < 0 ){ ns_dyn_mem_free(data); - if( len == MBEDTLS_ERR_SSL_PEER_CLOSE_NOTIFY ){ -// if( sock->parent->sec_conn_closed_cb ){ -// sock->parent->sec_conn_closed_cb(sock->listen_socket, address, port); - secure_session_delete( session ); - return 0; -// } - } + secure_session_delete( session ); + return 0; }else{ if( sock->parent->_recv_cb ){ sock->parent->_recv_cb(sock->listen_socket, address, port, data, len); From a2588b622d2763e3a6eda9f164501aa9e59e7e34 Mon Sep 17 00:00:00 2001 From: Tero Heinonen Date: Wed, 17 Feb 2016 12:50:09 +0200 Subject: [PATCH 088/154] version v1.2.1 --- module.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module.json b/module.json index fc26a2e2f1..dbd64cc7e6 100644 --- a/module.json +++ b/module.json @@ -1,6 +1,6 @@ { "name": "coap-service", - "version": "1.2.0", + "version": "1.2.1", "description": "CoAP Service library", "keywords": [ "coap", From f5f70e2d8b293107784f1c087268aea68a3e2a13 Mon Sep 17 00:00:00 2001 From: Tero Heinonen Date: Thu, 18 Feb 2016 20:12:25 +0200 Subject: [PATCH 089/154] API for changing DTLS handshake message timeouts. --- coap-service/coap_service_api.h | 1 + source/coap_connection_handler.c | 22 ++++++++++++++++--- source/coap_security_handler.c | 12 +++++++--- source/coap_service_api.c | 12 ++++++++++ source/include/coap_connection_handler.h | 2 ++ source/include/coap_security_handler.h | 2 +- .../test_coap_security_handler.c | 20 ++++++++--------- .../stub/coap_connection_handler_stub.c | 5 +++++ .../stub/coap_security_handler_stub.c | 2 +- 9 files changed, 60 insertions(+), 18 deletions(-) diff --git a/coap-service/coap_service_api.h b/coap-service/coap_service_api.h index 9e1c92d516..f5bc321d4b 100644 --- a/coap-service/coap_service_api.h +++ b/coap-service/coap_service_api.h @@ -260,6 +260,7 @@ extern uint16_t coap_service_request_send(int8_t service_id, uint8_t options, co */ extern int8_t coap_service_response_send(int8_t service_id, uint8_t options, sn_coap_hdr_s *request_ptr, sn_coap_msg_code_e message_code, int32_t content_type, const uint8_t *payload_ptr,uint16_t payload_len); +extern int8_t coap_service_set_handshake_timeout(int8_t service_id, uint32_t min, uint32_t max); #ifdef __cplusplus } #endif diff --git a/source/coap_connection_handler.c b/source/coap_connection_handler.c index 2b0cbe1306..58aa611f05 100644 --- a/source/coap_connection_handler.c +++ b/source/coap_connection_handler.c @@ -17,6 +17,9 @@ typedef struct internal_socket_s { coap_conn_handler_t *parent; + uint32_t timeout_min; + uint32_t timeout_max; + uint16_t listen_port; int8_t listen_socket; @@ -239,6 +242,8 @@ static internal_socket_t *int_socket_find_by_socket_id(int8_t id) static internal_socket_t *int_socket_find(uint16_t port, bool is_secure, bool is_real_socket, bool bypassSec) { + (void) bypassSec; + internal_socket_t *this = NULL; ns_list_foreach(internal_socket_t, cur_ptr, &socket_list) { if( cur_ptr->listen_port == port && cur_ptr->real_socket == is_real_socket && @@ -419,7 +424,7 @@ static void secure_recv_sckt_msg(void *cb_res) coap_security_keys_t keys; keys._priv = pw; keys._priv_len = pw_len; - coap_security_handler_connect_non_blocking(session->sec_handler, true, DTLS, keys); + coap_security_handler_connect_non_blocking(session->sec_handler, true, DTLS, keys, sock->timeout_min, sock->timeout_max); //TODO: error handling } ns_dyn_mem_free(pw); @@ -517,7 +522,7 @@ int coap_connection_handler_virtual_recv(coap_conn_handler_t *handler, uint8_t a coap_security_keys_t keys; keys._priv = pw; keys._priv_len = pw_len; - coap_security_handler_connect_non_blocking(session->sec_handler, true, DTLS, keys); + coap_security_handler_connect_non_blocking(session->sec_handler, true, DTLS, keys, handler->socket->timeout_min, handler->socket->timeout_max); //TODO: error handling ns_dyn_mem_free(pw); return 0; @@ -680,7 +685,7 @@ int coap_connection_handler_send_data(coap_conn_handler_t *handler, ns_address_t coap_security_keys_t keys; keys._priv = pw; keys._priv_len = pw_len; - coap_security_handler_connect_non_blocking(session->sec_handler, false, DTLS, keys); + coap_security_handler_connect_non_blocking(session->sec_handler, false, DTLS, keys, handler->socket->timeout_min, handler->socket->timeout_max); ns_dyn_mem_free(pw); return -2; }else{ @@ -720,3 +725,14 @@ bool coap_connection_handler_socket_belongs_to(coap_conn_handler_t *handler, int } return false; } + +int8_t coap_connection_handler_set_timeout(coap_conn_handler_t *handler, uint32_t min, uint32_t max) +{ + if(!handler || !handler->socket){ + return -1; + } + handler->socket->timeout_max = max; + handler->socket->timeout_min = min; + + return 0; +} diff --git a/source/coap_security_handler.c b/source/coap_security_handler.c index 3834030a6d..de2f58ddb3 100644 --- a/source/coap_security_handler.c +++ b/source/coap_security_handler.c @@ -356,7 +356,8 @@ int coap_security_handler_connect(coap_security_t *sec, bool is_server, SecureSo return ret; } -int coap_security_handler_connect_non_blocking(coap_security_t *sec, bool is_server, SecureSocketMode sock_mode, coap_security_keys_t keys){ +int coap_security_handler_connect_non_blocking(coap_security_t *sec, bool is_server, SecureSocketMode sock_mode, coap_security_keys_t keys, uint32_t timeout_min, uint32_t timeout_max) +{ if( !sec ){ return -1; @@ -380,8 +381,13 @@ int coap_security_handler_connect_non_blocking(coap_security_t *sec, bool is_ser return -1; } - //TODO: This should probably be modifiable by service??? - mbedtls_ssl_conf_handshake_timeout( &sec->_conf, 10000, 29000 ); + if(!timeout_max && !timeout_min){ + mbedtls_ssl_conf_handshake_timeout( &sec->_conf, 10000, 29000 ); + } + else{ + mbedtls_ssl_conf_handshake_timeout( &sec->_conf, timeout_min, timeout_max ); + } + mbedtls_ssl_conf_rng( &sec->_conf, mbedtls_ctr_drbg_random, &sec->_ctr_drbg ); if( ( mbedtls_ssl_setup( &sec->_ssl, &sec->_conf ) ) != 0 ) diff --git a/source/coap_service_api.c b/source/coap_service_api.c index 5eda0af1f9..c6cd34620d 100644 --- a/source/coap_service_api.c +++ b/source/coap_service_api.c @@ -275,6 +275,8 @@ static int get_passwd_cb(int8_t socket_id, uint8_t address[static 16], uint16_t int8_t coap_service_initialize(int8_t interface_id, uint16_t listen_port, uint8_t service_options, coap_service_security_start_cb *start_ptr, coap_service_security_done_cb *security_done_cb) { + (void) interface_id; + coap_service_t *this = ns_dyn_mem_alloc(sizeof(coap_service_t)); if (!this) { return -1; @@ -320,6 +322,7 @@ int8_t coap_service_initialize(int8_t interface_id, uint16_t listen_port, uint8_ } ns_list_add_to_start(&instance_list, this); + return id; } @@ -452,3 +455,12 @@ int8_t coap_service_response_send(int8_t service_id, uint8_t options, sn_coap_hd return coap_message_handler_response_send(coap_service_handle, service_id, options, request_ptr, message_code, content_type, payload_ptr, payload_len); } +int8_t coap_service_set_handshake_timeout(int8_t service_id, uint32_t min, uint32_t max) +{ + coap_service_t *this = service_find(service_id); + if(!this){ + return -1; + } + + return coap_connection_handler_set_timeout(this->conn_handler, min, max); +} diff --git a/source/include/coap_connection_handler.h b/source/include/coap_connection_handler.h index a378bbf87b..1efca984e1 100644 --- a/source/include/coap_connection_handler.h +++ b/source/include/coap_connection_handler.h @@ -58,4 +58,6 @@ int coap_connection_handler_virtual_recv(coap_conn_handler_t *handler, uint8_t a bool coap_connection_handler_socket_belongs_to(coap_conn_handler_t *handler, int8_t socket_id); +int8_t coap_connection_handler_set_timeout(coap_conn_handler_t *handler, uint32_t min, uint32_t max); + #endif diff --git a/source/include/coap_security_handler.h b/source/include/coap_security_handler.h index 609ae426ba..0b8f533f12 100644 --- a/source/include/coap_security_handler.h +++ b/source/include/coap_security_handler.h @@ -106,7 +106,7 @@ void coap_security_destroy(coap_security_t *sec); int coap_security_handler_connect(coap_security_t *sec, bool is_server, SecureSocketMode sock_mode, coap_security_keys_t keys); -int coap_security_handler_connect_non_blocking(coap_security_t *sec, bool is_server, SecureSocketMode sock_mode, coap_security_keys_t keys); +int coap_security_handler_connect_non_blocking(coap_security_t *sec, bool is_server, SecureSocketMode sock_mode, coap_security_keys_t keys, uint32_t timeout_min, uint32_t timeout_max); int coap_security_handler_continue_connecting(coap_security_t *sec); diff --git a/test/coap-service/unittest/coap_security_handler/test_coap_security_handler.c b/test/coap-service/unittest/coap_security_handler/test_coap_security_handler.c index 36d06bb4f6..6585a9ed4c 100644 --- a/test/coap-service/unittest/coap_security_handler/test_coap_security_handler.c +++ b/test/coap-service/unittest/coap_security_handler/test_coap_security_handler.c @@ -85,7 +85,7 @@ bool test_coap_security_handler_connect() coap_security_keys_t keys; keys._priv = &pw; keys._priv_len = 3; - if( -1 != coap_security_handler_connect_non_blocking(NULL, true, DTLS, keys) ) + if( -1 != coap_security_handler_connect_non_blocking(NULL, true, DTLS, keys, 0, 1) ) return false; mbedtls_stub.useCounter = true; mbedtls_stub.counter = 0; @@ -98,18 +98,18 @@ bool test_coap_security_handler_connect() mbedtls_stub.retArray[6] = -1; mbedtls_stub.retArray[7] = -1; - if( -1 != coap_security_handler_connect_non_blocking(handle, true, DTLS, keys) ) + if( -1 != coap_security_handler_connect_non_blocking(handle, true, DTLS, keys, 0, 1) ) return false; mbedtls_stub.counter = 0; mbedtls_stub.retArray[0] = 0; - if( -1 != coap_security_handler_connect_non_blocking(handle, true, DTLS, keys) ) + if( -1 != coap_security_handler_connect_non_blocking(handle, true, DTLS, keys, 0, 1) ) return false; mbedtls_stub.counter = 0; // mbedtls_stub.retArray[0] = 0; mbedtls_stub.retArray[1] = 0; - if( -1 != coap_security_handler_connect_non_blocking(handle, true, DTLS, keys) ) + if( -1 != coap_security_handler_connect_non_blocking(handle, true, DTLS, keys, 0, 1) ) return false; simple_cookie_t c; @@ -121,7 +121,7 @@ bool test_coap_security_handler_connect() // mbedtls_stub.retArray[0] = 0; // mbedtls_stub.retArray[1] = 0; mbedtls_stub.retArray[2] = 0; - if( -1 != coap_security_handler_connect_non_blocking(handle, true, DTLS, keys) ) + if( -1 != coap_security_handler_connect_non_blocking(handle, true, DTLS, keys, 0, 1) ) return false; c.len = 8; @@ -135,7 +135,7 @@ bool test_coap_security_handler_connect() // mbedtls_stub.retArray[1] = 0; // mbedtls_stub.retArray[2] = 0; mbedtls_stub.retArray[3] = 0; - if( -1 != coap_security_handler_connect_non_blocking(handle, true, DTLS, keys) ) + if( -1 != coap_security_handler_connect_non_blocking(handle, true, DTLS, keys, 0, 1) ) return false; mbedtls_stub.counter = 0; @@ -144,7 +144,7 @@ bool test_coap_security_handler_connect() // mbedtls_stub.retArray[2] = 0; // mbedtls_stub.retArray[3] = 0; mbedtls_stub.retArray[4] = 0; - if( -1 != coap_security_handler_connect_non_blocking(handle, true, DTLS, keys) ) + if( -1 != coap_security_handler_connect_non_blocking(handle, true, DTLS, keys, 0, 1) ) return false; mbedtls_stub.counter = 0; @@ -155,19 +155,19 @@ bool test_coap_security_handler_connect() // mbedtls_stub.retArray[4] = 0; mbedtls_stub.retArray[6] = 0; mbedtls_stub.retArray[7] = 0; - if( 1 != coap_security_handler_connect_non_blocking(handle, true, DTLS, keys) ) + if( 1 != coap_security_handler_connect_non_blocking(handle, true, DTLS, keys, 0, 1) ) return false; mbedtls_stub.counter = 0; mbedtls_stub.retArray[5] = MBEDTLS_ERR_SSL_BAD_HS_FINISHED; - if( -1 != coap_security_handler_connect_non_blocking(handle, true, DTLS, keys) ) + if( -1 != coap_security_handler_connect_non_blocking(handle, true, DTLS, keys, 0, 1) ) return false; mbedtls_stub.counter = 0; mbedtls_stub.retArray[5] = HANDSHAKE_FINISHED_VALUE; - if( 1 != coap_security_handler_connect_non_blocking(handle, true, DTLS, keys) ) + if( 1 != coap_security_handler_connect_non_blocking(handle, true, DTLS, keys, 0, 1) ) return false; coap_security_destroy(handle); diff --git a/test/coap-service/unittest/stub/coap_connection_handler_stub.c b/test/coap-service/unittest/stub/coap_connection_handler_stub.c index 0f7e1e8c29..ec082117b4 100644 --- a/test/coap-service/unittest/stub/coap_connection_handler_stub.c +++ b/test/coap-service/unittest/stub/coap_connection_handler_stub.c @@ -55,3 +55,8 @@ bool coap_connection_handler_socket_belongs_to(coap_conn_handler_t *handler, int { return thread_conn_handler_stub.bool_value; } + +int8_t coap_connection_handler_set_timeout(coap_conn_handler_t *handler, uint32_t min, uint32_t max) +{ + return 0; +} diff --git a/test/coap-service/unittest/stub/coap_security_handler_stub.c b/test/coap-service/unittest/stub/coap_security_handler_stub.c index ba94d493ef..1583dc0aa7 100644 --- a/test/coap-service/unittest/stub/coap_security_handler_stub.c +++ b/test/coap-service/unittest/stub/coap_security_handler_stub.c @@ -30,7 +30,7 @@ void coap_security_destroy(coap_security_t *sec) } -int coap_security_handler_connect_non_blocking(coap_security_t *sec, bool is_server, SecureSocketMode sock_mode, coap_security_keys_t keys) +int coap_security_handler_connect_non_blocking(coap_security_t *sec, bool is_server, SecureSocketMode sock_mode, coap_security_keys_t keys, uint32_t timeout_min, uint32_t timeout_max) { sec->_is_started = true; if( coap_security_handler_stub.counter >= 0){ From 9c17c50c4c6eded7b32a8b1f4b0e672988e14167 Mon Sep 17 00:00:00 2001 From: Seppo Takalo Date: Mon, 22 Feb 2016 19:07:52 +0200 Subject: [PATCH 090/154] Depend on major 4 of nanostack --- module.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module.json b/module.json index dbd64cc7e6..ba9cb295b9 100644 --- a/module.json +++ b/module.json @@ -20,7 +20,7 @@ "dependencies": { "nanostack-libservice": "^3.0.0", "mbed-client-c": "^2.0.0", - "sal-stack-nanostack": "^3.0.0", + "sal-stack-nanostack": "^4.0.0", "mbedtls": "^2.0.0" }, "targetDependencies": {} From f430289ac690e8746b5435b4b724f32a9add7c41 Mon Sep 17 00:00:00 2001 From: Seppo Takalo Date: Mon, 22 Feb 2016 19:07:58 +0200 Subject: [PATCH 091/154] version v2.0.0 --- module.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module.json b/module.json index ba9cb295b9..31cc3fb0cb 100644 --- a/module.json +++ b/module.json @@ -1,6 +1,6 @@ { "name": "coap-service", - "version": "1.2.1", + "version": "2.0.0", "description": "CoAP Service library", "keywords": [ "coap", From edb443a05cafeefd7421974a96313de0eecdffd6 Mon Sep 17 00:00:00 2001 From: Seppo Takalo Date: Mon, 22 Feb 2016 19:35:07 +0200 Subject: [PATCH 092/154] version v2.0.1 --- module.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module.json b/module.json index 31cc3fb0cb..def7d2697e 100644 --- a/module.json +++ b/module.json @@ -1,6 +1,6 @@ { "name": "coap-service", - "version": "2.0.0", + "version": "2.0.1", "description": "CoAP Service library", "keywords": [ "coap", From cacfb34bdca4330a1e99c719ac0d1e3252a02d42 Mon Sep 17 00:00:00 2001 From: Tero Heinonen Date: Thu, 25 Feb 2016 17:53:24 +0200 Subject: [PATCH 093/154] Defines for default timeout values --- source/coap_security_handler.c | 2 +- source/include/coap_security_handler.h | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/source/coap_security_handler.c b/source/coap_security_handler.c index de2f58ddb3..10adf41e0f 100644 --- a/source/coap_security_handler.c +++ b/source/coap_security_handler.c @@ -382,7 +382,7 @@ int coap_security_handler_connect_non_blocking(coap_security_t *sec, bool is_ser } if(!timeout_max && !timeout_min){ - mbedtls_ssl_conf_handshake_timeout( &sec->_conf, 10000, 29000 ); + mbedtls_ssl_conf_handshake_timeout( &sec->_conf, DTLS_HANDSHAKE_TIMEOUT_MIN, DTLS_HANDSHAKE_TIMEOUT_MAX ); } else{ mbedtls_ssl_conf_handshake_timeout( &sec->_conf, timeout_min, timeout_max ); diff --git a/source/include/coap_security_handler.h b/source/include/coap_security_handler.h index 0b8f533f12..87f9b480b0 100644 --- a/source/include/coap_security_handler.h +++ b/source/include/coap_security_handler.h @@ -42,6 +42,9 @@ typedef int receive_cb(int8_t socket_id, unsigned char *, size_t); typedef void start_timer_cb(int8_t timer_id, uint32_t min, uint32_t fin); typedef int timer_status_cb(int8_t timer_id); +#define DTLS_HANDSHAKE_TIMEOUT_MIN 25000 +#define DTLS_HANDSHAKE_TIMEOUT_MAX 125000 + typedef enum { DTLS = 0, TLS = 1 From 61a9bb8da456de86b78dc0e3e9d1c502967b10e8 Mon Sep 17 00:00:00 2001 From: Tero Heinonen Date: Fri, 26 Feb 2016 08:50:35 +0200 Subject: [PATCH 094/154] version v2.0.2 --- module.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module.json b/module.json index def7d2697e..b423371bac 100644 --- a/module.json +++ b/module.json @@ -1,6 +1,6 @@ { "name": "coap-service", - "version": "2.0.1", + "version": "2.0.2", "description": "CoAP Service library", "keywords": [ "coap", From ba4e77d73d0bdef638c5b69806548625d3de5424 Mon Sep 17 00:00:00 2001 From: Tero Heinonen Date: Wed, 2 Mar 2016 20:30:57 +0200 Subject: [PATCH 095/154] Do not remove secure session when sending close alert. --- source/coap_security_handler.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/source/coap_security_handler.c b/source/coap_security_handler.c index 10adf41e0f..7d8700ae6f 100644 --- a/source/coap_security_handler.c +++ b/source/coap_security_handler.c @@ -491,8 +491,6 @@ int coap_security_send_close_alert(coap_security_t *sec) } if(!mbedtls_ssl_close_notify(&sec->_ssl)){ - coap_security_handler_reset(sec); - coap_security_handler_init(sec); return 0; } return -1; From e21c1392ad953381dd2b87e832ba985b829fb826 Mon Sep 17 00:00:00 2001 From: Seppo Takalo Date: Thu, 10 Mar 2016 13:36:50 +0200 Subject: [PATCH 096/154] Add missing copyright header --- test/coap-service/unittest/stub/timeout_stub.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/test/coap-service/unittest/stub/timeout_stub.c b/test/coap-service/unittest/stub/timeout_stub.c index 36bf074305..dfda619110 100644 --- a/test/coap-service/unittest/stub/timeout_stub.c +++ b/test/coap-service/unittest/stub/timeout_stub.c @@ -1,4 +1,8 @@ -#include "eventOS_event_timer.h" +/* + * Copyright (c) 2016 ARM Limited. All Rights Reserved. + */ + + #include "eventOS_event_timer.h" // Timeout structure, already typedefed to timeout_t struct timeout_entry_t { From 451d773f5f178cea8c58f5c3dac0aa0fa340c977 Mon Sep 17 00:00:00 2001 From: Tero Heinonen Date: Wed, 9 Mar 2016 11:05:36 +0200 Subject: [PATCH 097/154] Timer to remove secure sessions after alert is sent but not received. --- source/coap_connection_handler.c | 140 +++++++++++++----- source/coap_service_api.c | 17 ++- source/include/coap_connection_handler.h | 8 + source/include/coap_service_api_internal.h | 25 ++++ .../unittest/coap_connection_handler/Makefile | 3 +- .../test_coap_connection_handler.c | 28 ++-- .../stub/coap_connection_handler_stub.c | 5 + .../unittest/stub/coap_service_api_stub.c | 8 +- 8 files changed, 169 insertions(+), 65 deletions(-) create mode 100644 source/include/coap_service_api_internal.h diff --git a/source/coap_connection_handler.c b/source/coap_connection_handler.c index 58aa611f05..893dedc3c7 100644 --- a/source/coap_connection_handler.c +++ b/source/coap_connection_handler.c @@ -11,9 +11,16 @@ #include "socket_api.h" #include "net_interface.h" #include "eventOS_event_timer.h" +#include "coap_service_api_internal.h" #define TRACE_GROUP "ThCH" +typedef enum session_state_e { + SECURE_SESSION_HANDSHAKE_ONGOING = 0, + SECURE_SESSION_OK, + SECURE_SESSION_ALERT_SENT +}session_state_t; + typedef struct internal_socket_s { coap_conn_handler_t *parent; @@ -59,7 +66,8 @@ typedef struct secure_session { secure_timer_t timer; - bool secure_done; + session_state_t session_state; + uint32_t session_start_timestamp; ns_list_link_t link; } secure_session_t; @@ -81,10 +89,49 @@ static secure_session_t *secure_session_find_by_timer_id(int8_t timer_id) return this; } +static void secure_session_delete(secure_session_t *this) +{ + if (this) { + ns_list_remove(&secure_session_list, this); + if( this->sec_handler ){ + coap_security_destroy(this->sec_handler); + this->sec_handler = NULL; + } + if(this->timer.timer){ + eventOS_timeout_cancel(this->timer.timer); + } + ns_dyn_mem_free(this); + this = NULL; + } + + return; +} + static secure_session_t *secure_session_create(internal_socket_t *parent, uint8_t *address_ptr, uint16_t port) { + if(!address_ptr){ + return NULL; + } + + if(MAX_SECURE_SESSION_COUNT <= ns_list_count(&secure_session_list)){ + // Seek & destroy oldest session where close notify have been sent + secure_session_t *to_be_removed = NULL; + ns_list_foreach(secure_session_t, cur_ptr, &secure_session_list) { + if(cur_ptr->session_state == SECURE_SESSION_ALERT_SENT){ + if(!to_be_removed || cur_ptr->session_start_timestamp < to_be_removed->session_start_timestamp){ + to_be_removed = cur_ptr; + } + } + } + if(!to_be_removed){ + return NULL; + } + + secure_session_delete(to_be_removed); + } + secure_session_t *this = ns_dyn_mem_alloc(sizeof(secure_session_t)); - if (!this || !address_ptr) { + if (!this) { return NULL; } memset(this, 0, sizeof(secure_session_t)); @@ -108,29 +155,12 @@ static secure_session_t *secure_session_create(internal_socket_t *parent, uint8_ } this->parent = parent; - this->secure_done = false; + this->session_state = SECURE_SESSION_HANDSHAKE_ONGOING; ns_list_add_to_start(&secure_session_list, this); -// hack_save_remote_address(address_ptr, port); //TODO not bad hack + return this; } -static void secure_session_delete(secure_session_t *this) -{ - if (this) { - ns_list_remove(&secure_session_list, this); - if( this->sec_handler ){ - coap_security_destroy(this->sec_handler); - this->sec_handler = NULL; - } - if(this->timer.timer){ - eventOS_timeout_cancel(this->timer.timer); - } - ns_dyn_mem_free(this); - this = NULL; - } - - return; -} static void clear_secure_sessions(internal_socket_t *this){ if( this ){ @@ -220,12 +250,12 @@ static void int_socket_delete(internal_socket_t *this) ns_dyn_mem_free(this->data); this->data = NULL; } + if(this->parent){ + ns_dyn_mem_free(this->parent); + } ns_dyn_mem_free(this); - this = NULL; } } - - return; } static internal_socket_t *int_socket_find_by_socket_id(int8_t id) @@ -414,7 +444,7 @@ static void secure_recv_sckt_msg(void *cb_res) tr_err("secure_recv_sckt_msg session creation failed - OOM"); return; } - + session->session_start_timestamp = coap_service_get_internal_timer_ticks(); // Start handshake if( !session->sec_handler->_is_started ){ uint8_t *pw = (uint8_t *)ns_dyn_mem_alloc(64); @@ -430,13 +460,13 @@ static void secure_recv_sckt_msg(void *cb_res) ns_dyn_mem_free(pw); }else{ //Continue handshake - if( !session->secure_done ){ + if(session->session_state == SECURE_SESSION_HANDSHAKE_ONGOING){ int ret = coap_security_handler_continue_connecting(session->sec_handler); // Handshake done if(ret == 0){ eventOS_timeout_cancel(session->timer.timer); session->timer.timer = NULL; - session->secure_done = true; + session->session_state = SECURE_SESSION_OK; if( sock->parent->_security_done_cb ){ sock->parent->_security_done_cb(sock->listen_socket, src_address.address, src_address.identifier, @@ -473,7 +503,7 @@ static void recv_sckt_msg(void *cb_res) internal_socket_t *sock = int_socket_find_by_socket_id(sckt_data->socket_id); ns_address_t src_address; if( sock && read_data(sckt_data, sock, &src_address) == 0 ){ - if( sock->parent->_recv_cb ){ + if(sock->parent && sock->parent->_recv_cb){ sock->parent->_recv_cb(sock->listen_socket, src_address.address, src_address.identifier, sock->data, sock->data_len); } ns_dyn_mem_free(sock->data); @@ -514,6 +544,9 @@ int coap_connection_handler_virtual_recv(coap_conn_handler_t *handler, uint8_t a tr_err("coap_connection_handler_virtual_recv session creation failed - OOM"); return -1; } + + session->session_start_timestamp = coap_service_get_internal_timer_ticks(); + if( !session->sec_handler->_is_started ){ uint8_t *pw = (uint8_t *)ns_dyn_mem_alloc(64); uint8_t pw_len; @@ -531,10 +564,10 @@ int coap_connection_handler_virtual_recv(coap_conn_handler_t *handler, uint8_t a return -1; } }else{ - if( !session->secure_done ){ + if(session->session_state == SECURE_SESSION_HANDSHAKE_ONGOING){ int ret = coap_security_handler_continue_connecting(session->sec_handler); if(ret == 0){ - session->secure_done = true; + session->session_state = SECURE_SESSION_OK; if( handler->_security_done_cb ){ handler->_security_done_cb(sock->listen_socket, address, port, @@ -598,19 +631,16 @@ coap_conn_handler_t *connection_handler_create(receive_from_socket_cb *recv_from handler->_recv_cb = recv_from_cb; handler->_send_cb = send_to_cb; -// handler->sec_conn_closed_cb = sec_conn_closed_cb; handler->_get_password_cb = pw_cb; handler->_security_done_cb = done_cb; return handler; } - void connection_handler_destroy(coap_conn_handler_t *handler) { if(handler){ - int_socket_delete(handler->socket); - handler->socket = NULL; - ns_dyn_mem_free(handler); + int_socket_delete(handler->socket); + ns_dyn_mem_free(handler); } } @@ -621,6 +651,8 @@ void connection_handler_close_secure_connection( coap_conn_handler_t *handler, u secure_session_t *session = secure_session_find( handler->socket, destination_addr_ptr, port); if( session ){ coap_security_send_close_alert( session->sec_handler ); + session->session_state = SECURE_SESSION_ALERT_SENT; + session->session_start_timestamp = coap_service_get_internal_timer_ticks(); } } } @@ -642,15 +674,18 @@ int coap_connection_handler_open_connection(coap_conn_handler_t *handler, uint16 internal_socket_t *current = !use_ephemeral_port?int_socket_find(listen_port, is_secure, is_real_socket, bypassSec):NULL; if(!current){ handler->socket = int_socket_create(listen_port, use_ephemeral_port, is_secure, is_real_socket, bypassSec); - if( !handler->socket ){ + if(!handler->socket){ return -1; } - handler->socket->parent = handler; + handler->socket->parent = ns_dyn_mem_alloc(sizeof(coap_conn_handler_t)); + if(!handler->socket->parent){ + int_socket_delete(handler->socket); + return -1; + } + *handler->socket->parent = *handler; }else{ current->usage_counter++; handler->socket = current; - //handler->parent cannot be set here! - //this will be always problematic if 2 or more secure sockets try to share a same port! } return 0; } @@ -665,12 +700,13 @@ int coap_connection_handler_send_data(coap_conn_handler_t *handler, ns_address_t memcpy(handler->socket->dest_addr.address, dest_addr->address, 16); handler->socket->dest_addr.identifier = dest_addr->identifier; handler->socket->dest_addr.type = dest_addr->type; - secure_session_t *session = secure_session_find( handler->socket, dest_addr->address, dest_addr->identifier); + secure_session_t *session = secure_session_find(handler->socket, dest_addr->address, dest_addr->identifier); if( !session ){ session = secure_session_create(handler->socket, dest_addr->address, dest_addr->identifier); if( !session ){ return -1; } + session->session_start_timestamp = coap_service_get_internal_timer_ticks(); memcpy( handler->socket->dest_addr.address, dest_addr->address, 16 ); handler->socket->dest_addr.identifier = dest_addr->identifier; handler->socket->dest_addr.type = dest_addr->type; @@ -693,8 +729,9 @@ int coap_connection_handler_send_data(coap_conn_handler_t *handler, ns_address_t ns_dyn_mem_free(pw); return -1; } - }else if( session->secure_done ){ + }else if( session->session_state == SECURE_SESSION_OK ){ if( coap_security_handler_send_message(session->sec_handler, data_ptr, data_len ) > 0 ){ + session->session_start_timestamp = coap_service_get_internal_timer_ticks(); return 0; } } @@ -736,3 +773,24 @@ int8_t coap_connection_handler_set_timeout(coap_conn_handler_t *handler, uint32_ return 0; } + +/* No need to call every second - call rather like every minute (SECURE_SESSION_CLEAN_INTERVAL sets this) */ +void coap_connection_handler_exec(uint32_t time) +{ + if(ns_list_count(&secure_session_list)){ + // Seek & destroy old sessions where close notify have been sent + ns_list_foreach(secure_session_t, cur_ptr, &secure_session_list) { + if(cur_ptr->session_state == SECURE_SESSION_ALERT_SENT || + cur_ptr->session_state == SECURE_SESSION_HANDSHAKE_ONGOING){ + if((cur_ptr->session_start_timestamp + CLOSED_SECURE_SESSION_TIMEOUT) <= time){ + secure_session_delete(cur_ptr); + } + } + if(cur_ptr->session_state == SECURE_SESSION_OK){ + if((cur_ptr->session_start_timestamp + OPEN_SECURE_SESSION_TIMEOUT) <= time){ + secure_session_delete(cur_ptr); + } + } + } + } +} diff --git a/source/coap_service_api.c b/source/coap_service_api.c index c6cd34620d..ef33f1171b 100644 --- a/source/coap_service_api.c +++ b/source/coap_service_api.c @@ -20,6 +20,7 @@ #include "common_functions.h" #include "coap_connection_handler.h" #include "net_interface.h" +#include "coap_service_api_internal.h" static int16_t coap_service_coap_msg_process(int8_t socket_id, uint8_t source_addr_ptr[static 16], uint16_t port, uint8_t *data_ptr, uint16_t data_len); static int16_t coap_msg_process_callback(int8_t socket_id, sn_coap_hdr_s *coap_message, coap_transaction_t *transaction_ptr); @@ -159,12 +160,14 @@ static void service_event_handler(arm_event_s *event) if (event->event_type == ARM_LIB_TASKLET_INIT_EVENT) { tr_debug("service tasklet initialised"); /*initialize coap service and listen socket*/ - eventOS_event_timer_request((uint8_t)COAP_TICK_TIMER, ARM_LIB_SYSTEM_TIMER_EVENT, tasklet_id, 1000); } if (event->event_type == ARM_LIB_SYSTEM_TIMER_EVENT && event->event_id == COAP_TICK_TIMER) { coap_message_handler_exec(coap_service_handle, coap_ticks++); - eventOS_event_timer_request((uint8_t)COAP_TICK_TIMER, ARM_LIB_SYSTEM_TIMER_EVENT, tasklet_id, 1000); + if(coap_ticks && !coap_ticks % SECURE_SESSION_CLEAN_INTERVAL){ + coap_connection_handler_exec(coap_ticks); + } } + eventOS_event_timer_request((uint8_t)COAP_TICK_TIMER, ARM_LIB_SYSTEM_TIMER_EVENT, tasklet_id, 1000); } static int16_t coap_msg_process_callback(int8_t socket_id, sn_coap_hdr_s *coap_message, coap_transaction_t *transaction_ptr) @@ -299,11 +302,12 @@ int8_t coap_service_initialize(int8_t interface_id, uint16_t listen_port, uint8_ tasklet_id = eventOS_event_handler_create(&service_event_handler, ARM_LIB_TASKLET_INIT_EVENT); } - this->conn_handler = connection_handler_create(recv_cb, send_cb/*, sec_conn_closed_cb*/, get_passwd_cb, sec_done_cb); + this->conn_handler = connection_handler_create(recv_cb, send_cb, get_passwd_cb, sec_done_cb); if(!this->conn_handler){ ns_dyn_mem_free(this); return -1; } + if (0 > coap_connection_handler_open_connection(this->conn_handler, listen_port, ((this->service_options & COAP_SERVICE_OPTIONS_EPHEMERAL_PORT) == COAP_SERVICE_OPTIONS_EPHEMERAL_PORT), ((this->service_options & COAP_SERVICE_OPTIONS_SECURE) == COAP_SERVICE_OPTIONS_SECURE), ((this->service_options & COAP_SERVICE_OPTIONS_VIRTUAL_SOCKET) != COAP_SERVICE_OPTIONS_VIRTUAL_SOCKET), @@ -333,10 +337,8 @@ void coap_service_delete(int8_t service_id) return; } - //TODO: There might be an issue with shared sockets, when deleting!! if (this->conn_handler){ connection_handler_destroy(this->conn_handler); - this->conn_handler = NULL; } //TODO clear all transactions @@ -464,3 +466,8 @@ int8_t coap_service_set_handshake_timeout(int8_t service_id, uint32_t min, uint3 return coap_connection_handler_set_timeout(this->conn_handler, min, max); } + +uint32_t coap_service_get_internal_timer_ticks(void) +{ + return coap_ticks; +} diff --git a/source/include/coap_connection_handler.h b/source/include/coap_connection_handler.h index 1efca984e1..b866c609dd 100644 --- a/source/include/coap_connection_handler.h +++ b/source/include/coap_connection_handler.h @@ -23,6 +23,12 @@ #include #include #include "ns_address.h" +#include "coap_service_api_internal.h" + +#define MAX_SECURE_SESSION_COUNT 3 +#define CLOSED_SECURE_SESSION_TIMEOUT 3600 // Seconds +#define OPEN_SECURE_SESSION_TIMEOUT 18000 // Seconds +#define SECURE_SESSION_CLEAN_INTERVAL 60 // Seconds struct internal_socket_s; @@ -60,4 +66,6 @@ bool coap_connection_handler_socket_belongs_to(coap_conn_handler_t *handler, int int8_t coap_connection_handler_set_timeout(coap_conn_handler_t *handler, uint32_t min, uint32_t max); +void coap_connection_handler_exec(uint32_t time); + #endif diff --git a/source/include/coap_service_api_internal.h b/source/include/coap_service_api_internal.h new file mode 100644 index 0000000000..bface30bf5 --- /dev/null +++ b/source/include/coap_service_api_internal.h @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2016 ARM Limited. All Rights Reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * 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 __COAP_SERVICE_API_INTERNAL_H__ +#define __COAP_SERVICE_API_INTERNAL_H__ + + +uint32_t coap_service_get_internal_timer_ticks(void); + +#endif diff --git a/test/coap-service/unittest/coap_connection_handler/Makefile b/test/coap-service/unittest/coap_connection_handler/Makefile index 5fcf10453e..3884361113 100644 --- a/test/coap-service/unittest/coap_connection_handler/Makefile +++ b/test/coap-service/unittest/coap_connection_handler/Makefile @@ -17,8 +17,9 @@ TEST_SRC_FILES = \ ../stub/nsdynmemLIB_stub.c \ ../stub/socket_api_stub.c \ ../stub/coap_security_handler_stub.c \ + ../stub/coap_service_api_stub.c \ include ../MakefileWorker.mk -CPPUTESTFLAGS += -DFEA_TRACE_SUPPORT +CPPUTESTFLAGS += -DFEA_TRACE_SUPPORT -DHAVE_THREAD diff --git a/test/coap-service/unittest/coap_connection_handler/test_coap_connection_handler.c b/test/coap-service/unittest/coap_connection_handler/test_coap_connection_handler.c index 2542496c19..8072af50c2 100644 --- a/test/coap-service/unittest/coap_connection_handler/test_coap_connection_handler.c +++ b/test/coap-service/unittest/coap_connection_handler/test_coap_connection_handler.c @@ -82,14 +82,14 @@ bool test_coap_connection_handler_open_connection() if( 0 != coap_connection_handler_open_connection(handler, 0,true,true,true,false) ) return false; - nsdynmemlib_stub.returnCounter = 1; + nsdynmemlib_stub.returnCounter = 2; if( 0 != coap_connection_handler_open_connection(handler, 22,false,true,true,true) ) return false; //open second one nsdynmemlib_stub.returnCounter = 1; coap_conn_handler_t *handler2 = connection_handler_create(&receive_from_sock_cb, &send_to_sock_cb, NULL, NULL); - nsdynmemlib_stub.returnCounter = 1; + nsdynmemlib_stub.returnCounter = 2; if( 0 != coap_connection_handler_open_connection(handler2, 22,false,true,true,true) ) return false; @@ -113,7 +113,7 @@ bool test_coap_connection_handler_send_data() nsdynmemlib_stub.returnCounter = 1; coap_conn_handler_t *handler = connection_handler_create(&receive_from_sock_cb, &send_to_sock_cb, NULL, NULL); - nsdynmemlib_stub.returnCounter = 1; + nsdynmemlib_stub.returnCounter = 2; if( 0 != coap_connection_handler_open_connection(handler, 22,false,true,false,false) ) return false; @@ -129,7 +129,7 @@ bool test_coap_connection_handler_send_data() nsdynmemlib_stub.returnCounter = 1; handler = connection_handler_create(&receive_from_sock_cb, &send_to_sock_cb, NULL, NULL); - nsdynmemlib_stub.returnCounter = 3; + nsdynmemlib_stub.returnCounter = 4; if( 0 != coap_connection_handler_open_connection(handler, 22,false,true,false,false) ) return false; @@ -147,7 +147,7 @@ bool test_coap_connection_handler_send_data() //NON SECURE HERE --> nsdynmemlib_stub.returnCounter = 1; handler = connection_handler_create(&receive_from_sock_cb, &send_to_sock_cb, NULL, NULL); - nsdynmemlib_stub.returnCounter = 1; + nsdynmemlib_stub.returnCounter = 2; if( 0 != coap_connection_handler_open_connection(handler, 22,false,false,false,false) ) return false; @@ -158,7 +158,7 @@ bool test_coap_connection_handler_send_data() nsdynmemlib_stub.returnCounter = 1; handler = connection_handler_create(&receive_from_sock_cb, &send_to_sock_cb, NULL, NULL); - nsdynmemlib_stub.returnCounter = 1; + nsdynmemlib_stub.returnCounter = 2; if( 0 != coap_connection_handler_open_connection(handler, 22,false,false,true,false) ) return false; @@ -182,7 +182,7 @@ bool test_coap_connection_handler_virtual_recv() nsdynmemlib_stub.returnCounter = 1; coap_conn_handler_t *handler = connection_handler_create(&receive_from_sock_cb, &send_to_sock_cb, NULL, NULL); - nsdynmemlib_stub.returnCounter = 1; + nsdynmemlib_stub.returnCounter = 2; if( 0 != coap_connection_handler_open_connection(handler, 22,false,true,true,false) ) return false; @@ -218,7 +218,7 @@ bool test_coap_connection_handler_virtual_recv() nsdynmemlib_stub.returnCounter = 1; coap_conn_handler_t *handler2 = connection_handler_create(&receive_from_sock_cb, &send_to_sock_cb, &get_passwd_cb, &sec_done_cb); - nsdynmemlib_stub.returnCounter = 1; + nsdynmemlib_stub.returnCounter = 2; if( 0 != coap_connection_handler_open_connection(handler2, 24,false,true,true,false) ) return false; @@ -249,7 +249,7 @@ bool test_coap_connection_handler_virtual_recv() nsdynmemlib_stub.returnCounter = 1; coap_conn_handler_t *handler3 = connection_handler_create(&receive_from_sock_cb, &send_to_sock_cb, &get_passwd_cb, &sec_done_cb); - nsdynmemlib_stub.returnCounter = 1; + nsdynmemlib_stub.returnCounter = 2; if( 0 != coap_connection_handler_open_connection(handler3, 26,false,false,true,false) ) return false; @@ -271,7 +271,7 @@ bool test_coap_connection_handler_socket_belongs_to() socket_api_stub.int8_value = 0; nsdynmemlib_stub.returnCounter = 1; coap_conn_handler_t *handler = connection_handler_create(&receive_from_sock_cb, &send_to_sock_cb, NULL, NULL); - nsdynmemlib_stub.returnCounter = 1; + nsdynmemlib_stub.returnCounter = 2; if( 0 != coap_connection_handler_open_connection(handler, 22,false,true,true,false) ) return false; @@ -294,7 +294,7 @@ bool test_timer_callbacks() nsdynmemlib_stub.returnCounter = 1; coap_conn_handler_t *handler = connection_handler_create(&receive_from_sock_cb, &send_to_sock_cb, NULL, NULL); - nsdynmemlib_stub.returnCounter = 1; + nsdynmemlib_stub.returnCounter = 2; if( 0 != coap_connection_handler_open_connection(handler, 22,false,true,true,false) ) return false; @@ -358,7 +358,7 @@ bool test_socket_api_callbacks() socket_api_stub.int8_value = 0; nsdynmemlib_stub.returnCounter = 1; coap_conn_handler_t *handler = connection_handler_create(&receive_from_sock_cb, &send_to_sock_cb, NULL, NULL); - nsdynmemlib_stub.returnCounter = 1; + nsdynmemlib_stub.returnCounter = 2; if( 0 != coap_connection_handler_open_connection(handler, 22,false,false,true,false) ) return false; @@ -380,7 +380,7 @@ bool test_socket_api_callbacks() nsdynmemlib_stub.returnCounter = 1; coap_conn_handler_t *handler2 = connection_handler_create(&receive_from_sock_cb, &send_to_sock_cb, &get_passwd_cb, &sec_done_cb); - nsdynmemlib_stub.returnCounter = 1; + nsdynmemlib_stub.returnCounter = 2; if( 0 != coap_connection_handler_open_connection(handler2, 22,false,true,true,false) ) return false; @@ -437,7 +437,7 @@ bool test_security_callbacks() nsdynmemlib_stub.returnCounter = 1; coap_conn_handler_t *handler = connection_handler_create(&receive_from_sock_cb, &send_to_sock_cb, NULL, NULL); - nsdynmemlib_stub.returnCounter = 1; + nsdynmemlib_stub.returnCounter = 2; if( 0 != coap_connection_handler_open_connection(handler, 22,false,true,true,false) ) return false; diff --git a/test/coap-service/unittest/stub/coap_connection_handler_stub.c b/test/coap-service/unittest/stub/coap_connection_handler_stub.c index ec082117b4..83e6ce7828 100644 --- a/test/coap-service/unittest/stub/coap_connection_handler_stub.c +++ b/test/coap-service/unittest/stub/coap_connection_handler_stub.c @@ -60,3 +60,8 @@ int8_t coap_connection_handler_set_timeout(coap_conn_handler_t *handler, uint32_ { return 0; } + +void coap_connection_handler_exec(uint32_t time) +{ + +} diff --git a/test/coap-service/unittest/stub/coap_service_api_stub.c b/test/coap-service/unittest/stub/coap_service_api_stub.c index 3624937022..c4a586d647 100644 --- a/test/coap-service/unittest/stub/coap_service_api_stub.c +++ b/test/coap-service/unittest/stub/coap_service_api_stub.c @@ -2,9 +2,6 @@ * Copyright (c) 2015-2016 ARM Limited. All Rights Reserved. */ - -#include "config.h" -#ifdef HAVE_THREAD #include #include "ns_types.h" @@ -60,4 +57,7 @@ int8_t coap_service_response_send(int8_t service_id, uint8_t options, sn_coap_hd return 0; } -#endif +uint32_t coap_service_get_internal_timer_ticks(void) +{ + return 1; +} From 52fa5e613e2fc34e6315eb8eebb569d6b997cb0d Mon Sep 17 00:00:00 2001 From: Tero Heinonen Date: Mon, 14 Mar 2016 12:13:36 +0200 Subject: [PATCH 098/154] Renamed session_start_timestamp to last_contact_time. Renamed SECURE_SESSION_ALERT_SENT to SECURE_SESSION_CLOSED. --- source/coap_connection_handler.c | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/source/coap_connection_handler.c b/source/coap_connection_handler.c index 893dedc3c7..03d0b68e5f 100644 --- a/source/coap_connection_handler.c +++ b/source/coap_connection_handler.c @@ -18,7 +18,7 @@ typedef enum session_state_e { SECURE_SESSION_HANDSHAKE_ONGOING = 0, SECURE_SESSION_OK, - SECURE_SESSION_ALERT_SENT + SECURE_SESSION_CLOSED }session_state_t; typedef struct internal_socket_s { @@ -67,7 +67,7 @@ typedef struct secure_session { secure_timer_t timer; session_state_t session_state; - uint32_t session_start_timestamp; + uint32_t last_contact_time; ns_list_link_t link; } secure_session_t; @@ -117,8 +117,8 @@ static secure_session_t *secure_session_create(internal_socket_t *parent, uint8_ // Seek & destroy oldest session where close notify have been sent secure_session_t *to_be_removed = NULL; ns_list_foreach(secure_session_t, cur_ptr, &secure_session_list) { - if(cur_ptr->session_state == SECURE_SESSION_ALERT_SENT){ - if(!to_be_removed || cur_ptr->session_start_timestamp < to_be_removed->session_start_timestamp){ + if(cur_ptr->session_state == SECURE_SESSION_CLOSED){ + if(!to_be_removed || cur_ptr->last_contact_time < to_be_removed->last_contact_time){ to_be_removed = cur_ptr; } } @@ -444,7 +444,7 @@ static void secure_recv_sckt_msg(void *cb_res) tr_err("secure_recv_sckt_msg session creation failed - OOM"); return; } - session->session_start_timestamp = coap_service_get_internal_timer_ticks(); + session->last_contact_time = coap_service_get_internal_timer_ticks(); // Start handshake if( !session->sec_handler->_is_started ){ uint8_t *pw = (uint8_t *)ns_dyn_mem_alloc(64); @@ -545,7 +545,7 @@ int coap_connection_handler_virtual_recv(coap_conn_handler_t *handler, uint8_t a return -1; } - session->session_start_timestamp = coap_service_get_internal_timer_ticks(); + session->last_contact_time = coap_service_get_internal_timer_ticks(); if( !session->sec_handler->_is_started ){ uint8_t *pw = (uint8_t *)ns_dyn_mem_alloc(64); @@ -651,8 +651,8 @@ void connection_handler_close_secure_connection( coap_conn_handler_t *handler, u secure_session_t *session = secure_session_find( handler->socket, destination_addr_ptr, port); if( session ){ coap_security_send_close_alert( session->sec_handler ); - session->session_state = SECURE_SESSION_ALERT_SENT; - session->session_start_timestamp = coap_service_get_internal_timer_ticks(); + session->session_state = SECURE_SESSION_CLOSED; + session->last_contact_time = coap_service_get_internal_timer_ticks(); } } } @@ -706,7 +706,7 @@ int coap_connection_handler_send_data(coap_conn_handler_t *handler, ns_address_t if( !session ){ return -1; } - session->session_start_timestamp = coap_service_get_internal_timer_ticks(); + session->last_contact_time = coap_service_get_internal_timer_ticks(); memcpy( handler->socket->dest_addr.address, dest_addr->address, 16 ); handler->socket->dest_addr.identifier = dest_addr->identifier; handler->socket->dest_addr.type = dest_addr->type; @@ -731,7 +731,7 @@ int coap_connection_handler_send_data(coap_conn_handler_t *handler, ns_address_t } }else if( session->session_state == SECURE_SESSION_OK ){ if( coap_security_handler_send_message(session->sec_handler, data_ptr, data_len ) > 0 ){ - session->session_start_timestamp = coap_service_get_internal_timer_ticks(); + session->last_contact_time = coap_service_get_internal_timer_ticks(); return 0; } } @@ -780,14 +780,14 @@ void coap_connection_handler_exec(uint32_t time) if(ns_list_count(&secure_session_list)){ // Seek & destroy old sessions where close notify have been sent ns_list_foreach(secure_session_t, cur_ptr, &secure_session_list) { - if(cur_ptr->session_state == SECURE_SESSION_ALERT_SENT || + if(cur_ptr->session_state == SECURE_SESSION_CLOSED || cur_ptr->session_state == SECURE_SESSION_HANDSHAKE_ONGOING){ - if((cur_ptr->session_start_timestamp + CLOSED_SECURE_SESSION_TIMEOUT) <= time){ + if((cur_ptr->last_contact_time + CLOSED_SECURE_SESSION_TIMEOUT) <= time){ secure_session_delete(cur_ptr); } } if(cur_ptr->session_state == SECURE_SESSION_OK){ - if((cur_ptr->session_start_timestamp + OPEN_SECURE_SESSION_TIMEOUT) <= time){ + if((cur_ptr->last_contact_time + OPEN_SECURE_SESSION_TIMEOUT) <= time){ secure_session_delete(cur_ptr); } } From db2e77fd976d3e692e516159d10ad83574dc062c Mon Sep 17 00:00:00 2001 From: Tero Heinonen Date: Mon, 14 Mar 2016 14:04:58 +0200 Subject: [PATCH 099/154] version v2.1.0 --- module.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module.json b/module.json index b423371bac..0a7d128f54 100644 --- a/module.json +++ b/module.json @@ -1,6 +1,6 @@ { "name": "coap-service", - "version": "2.0.2", + "version": "2.1.0", "description": "CoAP Service library", "keywords": [ "coap", From 0e87ec889244ca4b81c375eaf6de42cbc2988257 Mon Sep 17 00:00:00 2001 From: Bogdan Marinescu Date: Wed, 23 Mar 2016 21:25:00 +0200 Subject: [PATCH 100/154] version v2.2.0 --- module.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module.json b/module.json index 0a7d128f54..bd76bc9ada 100644 --- a/module.json +++ b/module.json @@ -1,6 +1,6 @@ { "name": "coap-service", - "version": "2.1.0", + "version": "2.2.0", "description": "CoAP Service library", "keywords": [ "coap", From eb42545448ea30fda3581a65da23101b13f4c541 Mon Sep 17 00:00:00 2001 From: Bogdan Marinescu Date: Wed, 23 Mar 2016 21:26:20 +0200 Subject: [PATCH 101/154] version v1.1.0 --- module.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module.json b/module.json index aabd6723d7..9aa2146560 100644 --- a/module.json +++ b/module.json @@ -1,6 +1,6 @@ { "name": "nanostack-randlib", - "version": "1.0.0", + "version": "1.1.0", "description": "Pseudo random library used by mbed-client and 6LoWPAN stack.", "keywords": [], "homepage": "https://github.com/ARMmbed/mbed-client-randlib", From 9752d7c5f7f37031d121f50210b28fa2fbb888d5 Mon Sep 17 00:00:00 2001 From: Seppo Takalo Date: Wed, 30 Mar 2016 14:23:47 +0300 Subject: [PATCH 102/154] Limit the number of mbed_ssl_read() in while loop. --- source/coap_security_handler.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/source/coap_security_handler.c b/source/coap_security_handler.c index 7d8700ae6f..a45c357bcf 100644 --- a/source/coap_security_handler.c +++ b/source/coap_security_handler.c @@ -498,12 +498,15 @@ int coap_security_send_close_alert(coap_security_t *sec) int coap_security_handler_read(coap_security_t *sec, unsigned char* buffer, size_t len){ int ret=-1; + int max_loops = 100; if( sec && buffer ){ memset( buffer, 0, len ); - do ret = mbedtls_ssl_read( &sec->_ssl, buffer, len ); - while( ret == MBEDTLS_ERR_SSL_WANT_READ || - ret == MBEDTLS_ERR_SSL_WANT_WRITE ); + do { + ret = mbedtls_ssl_read( &sec->_ssl, buffer, len ); + } while( (ret == MBEDTLS_ERR_SSL_WANT_READ || + ret == MBEDTLS_ERR_SSL_WANT_WRITE) + && --max_loops); } return ret; //bytes read } From db7abad295590f854b0f10231e76872ed49320a9 Mon Sep 17 00:00:00 2001 From: Seppo Takalo Date: Wed, 6 Apr 2016 14:21:02 +0300 Subject: [PATCH 103/154] Use /dev/urandom on Linux. --- Makefile | 4 ++ linux/randLIB.c | 168 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 172 insertions(+) create mode 100644 linux/randLIB.c diff --git a/Makefile b/Makefile index 9a40f3cd68..04c7958073 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,8 @@ +ifeq ($(shell uname -s),Linux) +SRCS := $(wildcard linux/*) +else SRCS := $(wildcard source/*) +endif LIB := librand.a EXPORT_HEADERS := mbed-client-randlib diff --git a/linux/randLIB.c b/linux/randLIB.c new file mode 100644 index 0000000000..654d9e7f82 --- /dev/null +++ b/linux/randLIB.c @@ -0,0 +1,168 @@ +/* + * Copyright (c) 2014-2015 ARM Limited. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 + * 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 +#include +#include +#include +#include +#include +#include "randLIB.h" + +/** + * \brief Init seed for Pseudo Random. + * On a Linux, this does nothing. + * + * \return None + * + */ +void randLIB_seed_random(void) +{ +} + +/** + * \brief Generate 8-bit random number. + * + * \param None + * \return 8-bit random number + * + */ +uint8_t randLIB_get_8bit(void) +{ + uint8_t ret_val; + randLIB_get_n_bytes_random(&ret_val, 1); + return ret_val; +} + +/** + * \brief Generate 16-bit random number. + * + * \param None + * \return 16-bit random number + * + */ +uint16_t randLIB_get_16bit(void) +{ + uint16_t ret_val; + + randLIB_get_n_bytes_random((uint8_t*)&ret_val, 2); + return ret_val; +} +/** + * \brief Generate 32-bit random number. + * + * \param None + * \return 32-bit random number + * + */ +uint32_t randLIB_get_32bit(void) +{ + uint32_t ret_val; + randLIB_get_n_bytes_random((uint8_t*)&ret_val, 4); + return ret_val; +} + + +/** + * \brief Generate n-bytes random numbers. + * + * \param data_ptr pointer where random will be stored + * \param eight_bit_boundary how many bytes need random + * \return 0 process valid + * \return -1 Unsupported Parameters or failed to get random data. + * + */ +int8_t randLIB_get_n_bytes_random(uint8_t *data_ptr, uint8_t eight_bit_boundary) +{ + if ((data_ptr == 0) || (eight_bit_boundary == 0)) { + return -1; + } + + int fd = open("/dev/urandom", O_RDONLY); + if (fd != -1) { + size_t len = read(fd, data_ptr, eight_bit_boundary); + close(fd); + if (len == eight_bit_boundary) + return 0; + } + + return -1; +} + +/** + * \brief Generate a random number within a range. + * + * The result is linearly distributed in the range [min..max], inclusive. + * + * \param min minimum value that can be generated + * \param max maximum value that can be generated + */ +uint16_t randLIB_get_random_in_range(uint16_t min, uint16_t max) +{ + /* This special case is potentially common, particularly in this routine's + * first user (Trickle), so worth catching immediately */ + if (min == max) { + return min; + } + + /* 16-bit arithmetic below fails in this extreme case; we can optimise it */ + if (max - min == 0xFFFF) { + return randLIB_get_16bit(); + } + + unsigned int values_needed = max + 1 - min; + unsigned int band_size = 0x10000u / values_needed; + unsigned int top_of_bands = band_size * values_needed; + unsigned int result; + do { + result = randLIB_get_16bit(); + } while (result >= top_of_bands); + + return min + (uint16_t)(result / band_size); +} + +/** + * \brief Randomise a base 32-bit number by a jitter factor + * + * The result is linearly distributed in the jitter range, which is expressed + * as fixed-point unsigned 1.15 values. For example, to produce a number in the + * range [0.75 * base, 1.25 * base], set min_factor to 0x6000 and max_factor to + * 0xA000. + * + * Result is clamped to 0xFFFFFFFF if it overflows. + * + * \param base The base 32-bit value + * \param min_factor The minimum value for the random factor + * \param max_factor The maximum value for the random factor + */ +uint32_t randLIB_randomise_base(uint32_t base, uint16_t min_factor, uint16_t max_factor) +{ + uint16_t random_factor = randLIB_get_random_in_range(min_factor, max_factor); + + /* 32x16-bit long multiplication, to get 48-bit result */ + uint32_t hi = (base >> 16) * random_factor; + uint32_t lo = (base & 0xFFFF) * random_factor; + /* Add halves, and take top 32 bits of 48-bit result */ + uint32_t res = hi + (lo >> 16); + + /* Randomisation factor is *2^15, so need to shift up 1 more bit, avoiding overflow */ + if (res & 0x80000000) { + res = 0xFFFFFFFF; + } else { + res = (res << 1) | ((lo >> 15) & 1); + } + + return res; +} From 8bb0f54ae9e60475bf57fb7edfa6fa450c8e232b Mon Sep 17 00:00:00 2001 From: Seppo Takalo Date: Thu, 7 Apr 2016 17:05:50 +0300 Subject: [PATCH 104/154] Fix checking if we are compiling for Linux. --- Makefile | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 04c7958073..ddfb89a003 100644 --- a/Makefile +++ b/Makefile @@ -1,8 +1,15 @@ -ifeq ($(shell uname -s),Linux) + +# Check if we are compiling for Linux using GCC +ifneq (,$(findstring gcc,$(CC))) +TARGET_IS_LINUX := $(shell $(CC) -dM -E - < /dev/null | grep __linux >/dev/null && echo "yes" || echo "no") +endif + +ifeq (yes,$(TARGET_IS_LINUX)) SRCS := $(wildcard linux/*) else SRCS := $(wildcard source/*) endif + LIB := librand.a EXPORT_HEADERS := mbed-client-randlib From 41e5a9bdc6f37c2bdf7e2d0654f7723934b56d9f Mon Sep 17 00:00:00 2001 From: Kevin Bracey Date: Thu, 7 Apr 2016 15:18:57 +0100 Subject: [PATCH 105/154] Add include to header --- mbed-client-randlib/randLIB.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/mbed-client-randlib/randLIB.h b/mbed-client-randlib/randLIB.h index f6979f042b..665b3deaf0 100644 --- a/mbed-client-randlib/randLIB.h +++ b/mbed-client-randlib/randLIB.h @@ -30,11 +30,13 @@ #ifndef RANDLIB_H_ #define RANDLIB_H_ + +#include + #ifdef __cplusplus extern "C" { #endif - /** * This library is made for getting random numbers for Timing needs in protocols. * From d536b9cb96ee6bce7b24165dd2b3edbf33a9f740 Mon Sep 17 00:00:00 2001 From: Antti Kauppila Date: Tue, 3 May 2016 11:46:52 +0300 Subject: [PATCH 106/154] updated Nanostack dependency --- module.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module.json b/module.json index bd76bc9ada..7e2ab2d598 100644 --- a/module.json +++ b/module.json @@ -20,7 +20,7 @@ "dependencies": { "nanostack-libservice": "^3.0.0", "mbed-client-c": "^2.0.0", - "sal-stack-nanostack": "^4.0.0", + "sal-stack-nanostack": "^5.0.0", "mbedtls": "^2.0.0" }, "targetDependencies": {} From 61d21d72f6a9f13c94fd9807ef46f642f25e4523 Mon Sep 17 00:00:00 2001 From: Antti Kauppila Date: Tue, 3 May 2016 11:47:33 +0300 Subject: [PATCH 107/154] version v3.0.0 --- module.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module.json b/module.json index 7e2ab2d598..e16d62b26f 100644 --- a/module.json +++ b/module.json @@ -1,6 +1,6 @@ { "name": "coap-service", - "version": "2.2.0", + "version": "3.0.0", "description": "CoAP Service library", "keywords": [ "coap", From 565638c3fe0c9a10ee376df29915d1258b134402 Mon Sep 17 00:00:00 2001 From: Tero Heinonen Date: Fri, 13 May 2016 14:47:54 +0300 Subject: [PATCH 108/154] Changed DTLS_HANDSHAKE_TIMEOUT_MAX 125s -> 201s (#22) --- source/include/coap_security_handler.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/include/coap_security_handler.h b/source/include/coap_security_handler.h index 87f9b480b0..bd6d6ba81e 100644 --- a/source/include/coap_security_handler.h +++ b/source/include/coap_security_handler.h @@ -43,7 +43,7 @@ typedef void start_timer_cb(int8_t timer_id, uint32_t min, uint32_t fin); typedef int timer_status_cb(int8_t timer_id); #define DTLS_HANDSHAKE_TIMEOUT_MIN 25000 -#define DTLS_HANDSHAKE_TIMEOUT_MAX 125000 +#define DTLS_HANDSHAKE_TIMEOUT_MAX 201000 typedef enum { DTLS = 0, From 77d8232f900f0ca16406eb8a00e046e004f45579 Mon Sep 17 00:00:00 2001 From: Antti Kauppila Date: Fri, 20 May 2016 16:28:35 +0300 Subject: [PATCH 109/154] randlib unit tested --- test/mbed-client-randlib/unittest/Makefile | 23 + .../unittest/MakefileWorker.mk | 562 ++++++++++++++++++ .../unittest/makefile_defines.txt | 18 + .../unittest/randlib/Makefile | 18 + .../unittest/randlib/main.cpp | 15 + .../unittest/randlib/randlibtest.cpp | 51 ++ .../unittest/randlib/test_randlib.c | 96 +++ .../unittest/randlib/test_randlib.h | 33 + test/mbed-client-randlib/unittest/run_tests | 43 ++ .../unittest/stubs/random_stub.c | 15 + 10 files changed, 874 insertions(+) create mode 100755 test/mbed-client-randlib/unittest/Makefile create mode 100755 test/mbed-client-randlib/unittest/MakefileWorker.mk create mode 100755 test/mbed-client-randlib/unittest/makefile_defines.txt create mode 100644 test/mbed-client-randlib/unittest/randlib/Makefile create mode 100644 test/mbed-client-randlib/unittest/randlib/main.cpp create mode 100644 test/mbed-client-randlib/unittest/randlib/randlibtest.cpp create mode 100644 test/mbed-client-randlib/unittest/randlib/test_randlib.c create mode 100644 test/mbed-client-randlib/unittest/randlib/test_randlib.h create mode 100755 test/mbed-client-randlib/unittest/run_tests create mode 100644 test/mbed-client-randlib/unittest/stubs/random_stub.c diff --git a/test/mbed-client-randlib/unittest/Makefile b/test/mbed-client-randlib/unittest/Makefile new file mode 100755 index 0000000000..b353517548 --- /dev/null +++ b/test/mbed-client-randlib/unittest/Makefile @@ -0,0 +1,23 @@ +#scan for folders having "Makefile" in them and remove 'this' to prevent loop +ifeq ($(OS),Windows_NT) +all: +clean: +else +DIRS := $(filter-out ./, $(sort $(dir $(shell find . -name 'Makefile')))) + +all: + for dir in $(DIRS); do \ + cd $$dir; make gcov; cd ..;\ + done + +clean: + for dir in $(DIRS); do \ + cd $$dir; make clean; cd ..;\ + done + rm -rf ../source/*gcov ../source/*gcda ../source/*o + rm -rf stubs/*gcov stubs/*gcda stubs/*o + rm -rf results/* + rm -rf coverages/* + rm -rf results + rm -rf coverages +endif diff --git a/test/mbed-client-randlib/unittest/MakefileWorker.mk b/test/mbed-client-randlib/unittest/MakefileWorker.mk new file mode 100755 index 0000000000..2096ced036 --- /dev/null +++ b/test/mbed-client-randlib/unittest/MakefileWorker.mk @@ -0,0 +1,562 @@ +#--------- +# +# MakefileWorker.mk +# +# Include this helper file in your makefile +# It makes +# A static library +# A test executable +# +# See this example for parameter settings +# examples/Makefile +# +#---------- +# Inputs - these variables describe what to build +# +# INCLUDE_DIRS - Directories used to search for include files. +# This generates a -I for each directory +# SRC_DIRS - Directories containing source file to built into the library +# SRC_FILES - Specific source files to build into library. Helpful when not all code +# in a directory can be built for test (hopefully a temporary situation) +# TEST_SRC_DIRS - Directories containing unit test code build into the unit test runner +# These do not go in a library. They are explicitly included in the test runner +# TEST_SRC_FILES - Specific source files to build into the unit test runner +# These do not go in a library. They are explicitly included in the test runner +# MOCKS_SRC_DIRS - Directories containing mock source files to build into the test runner +# These do not go in a library. They are explicitly included in the test runner +#---------- +# You can adjust these variables to influence how to build the test target +# and where to put and name outputs +# See below to determine defaults +# COMPONENT_NAME - the name of the thing being built +# TEST_TARGET - name the test executable. By default it is +# $(COMPONENT_NAME)_tests +# Helpful if you want 1 > make files in the same directory with different +# executables as output. +# CPPUTEST_HOME - where CppUTest home dir found +# TARGET_PLATFORM - Influences how the outputs are generated by modifying the +# CPPUTEST_OBJS_DIR and CPPUTEST_LIB_DIR to use a sub-directory under the +# normal objs and lib directories. Also modifies where to search for the +# CPPUTEST_LIB to link against. +# CPPUTEST_OBJS_DIR - a directory where o and d files go +# CPPUTEST_LIB_DIR - a directory where libs go +# CPPUTEST_ENABLE_DEBUG - build for debug +# CPPUTEST_USE_MEM_LEAK_DETECTION - Links with overridden new and delete +# CPPUTEST_USE_STD_CPP_LIB - Set to N to keep the standard C++ library out +# of the test harness +# CPPUTEST_USE_GCOV - Turn on coverage analysis +# Clean then build with this flag set to Y, then 'make gcov' +# CPPUTEST_MAPFILE - generate a map file +# CPPUTEST_WARNINGFLAGS - overly picky by default +# OTHER_MAKEFILE_TO_INCLUDE - a hook to use this makefile to make +# other targets. Like CSlim, which is part of fitnesse +# CPPUTEST_USE_VPATH - Use Make's VPATH functionality to support user +# specification of source files and directories that aren't below +# the user's Makefile in the directory tree, like: +# SRC_DIRS += ../../lib/foo +# It defaults to N, and shouldn't be necessary except in the above case. +#---------- +# +# Other flags users can initialize to sneak in their settings +# CPPUTEST_CXXFLAGS - flags for the C++ compiler +# CPPUTEST_CPPFLAGS - flags for the C++ AND C preprocessor +# CPPUTEST_CFLAGS - flags for the C complier +# CPPUTEST_LDFLAGS - Linker flags +#---------- + +# Some behavior is weird on some platforms. Need to discover the platform. + +# Platforms +UNAME_OUTPUT = "$(shell uname -a)" +MACOSX_STR = Darwin +MINGW_STR = MINGW +CYGWIN_STR = CYGWIN +LINUX_STR = Linux +SUNOS_STR = SunOS +UNKNWOWN_OS_STR = Unknown + +# Compilers +CC_VERSION_OUTPUT ="$(shell $(CXX) -v 2>&1)" +CLANG_STR = clang +SUNSTUDIO_CXX_STR = SunStudio + +UNAME_OS = $(UNKNWOWN_OS_STR) + +ifeq ($(findstring $(MINGW_STR),$(UNAME_OUTPUT)),$(MINGW_STR)) + UNAME_OS = $(MINGW_STR) +endif + +ifeq ($(findstring $(CYGWIN_STR),$(UNAME_OUTPUT)),$(CYGWIN_STR)) + UNAME_OS = $(CYGWIN_STR) +endif + +ifeq ($(findstring $(LINUX_STR),$(UNAME_OUTPUT)),$(LINUX_STR)) + UNAME_OS = $(LINUX_STR) +endif + +ifeq ($(findstring $(MACOSX_STR),$(UNAME_OUTPUT)),$(MACOSX_STR)) + UNAME_OS = $(MACOSX_STR) +#lion has a problem with the 'v' part of -a + UNAME_OUTPUT = "$(shell uname -pmnrs)" +endif + +ifeq ($(findstring $(SUNOS_STR),$(UNAME_OUTPUT)),$(SUNOS_STR)) + UNAME_OS = $(SUNOS_STR) + + SUNSTUDIO_CXX_ERR_STR = CC -flags +ifeq ($(findstring $(SUNSTUDIO_CXX_ERR_STR),$(CC_VERSION_OUTPUT)),$(SUNSTUDIO_CXX_ERR_STR)) + CC_VERSION_OUTPUT ="$(shell $(CXX) -V 2>&1)" + COMPILER_NAME = $(SUNSTUDIO_CXX_STR) +endif +endif + +ifeq ($(findstring $(CLANG_STR),$(CC_VERSION_OUTPUT)),$(CLANG_STR)) + COMPILER_NAME = $(CLANG_STR) +endif + +#Kludge for mingw, it does not have cc.exe, but gcc.exe will do +ifeq ($(UNAME_OS),$(MINGW_STR)) + CC := gcc +endif + +#And another kludge. Exception handling in gcc 4.6.2 is broken when linking the +# Standard C++ library as a shared library. Unbelievable. +ifeq ($(UNAME_OS),$(MINGW_STR)) + CPPUTEST_LDFLAGS += -static +endif +ifeq ($(UNAME_OS),$(CYGWIN_STR)) + CPPUTEST_LDFLAGS += -static +endif + + +#Kludge for MacOsX gcc compiler on Darwin9 who can't handle pendantic +ifeq ($(UNAME_OS),$(MACOSX_STR)) +ifeq ($(findstring Version 9,$(UNAME_OUTPUT)),Version 9) + CPPUTEST_PEDANTIC_ERRORS = N +endif +endif + +ifndef COMPONENT_NAME + COMPONENT_NAME = name_this_in_the_makefile +endif + +# Debug on by default +ifndef CPPUTEST_ENABLE_DEBUG + CPPUTEST_ENABLE_DEBUG = Y +endif + +# new and delete for memory leak detection on by default +ifndef CPPUTEST_USE_MEM_LEAK_DETECTION + CPPUTEST_USE_MEM_LEAK_DETECTION = Y +endif + +# Use the standard C library +ifndef CPPUTEST_USE_STD_C_LIB + CPPUTEST_USE_STD_C_LIB = Y +endif + +# Use the standard C++ library +ifndef CPPUTEST_USE_STD_CPP_LIB + CPPUTEST_USE_STD_CPP_LIB = Y +endif + +# Use gcov, off by default +ifndef CPPUTEST_USE_GCOV + CPPUTEST_USE_GCOV = N +endif + +ifndef CPPUTEST_PEDANTIC_ERRORS + CPPUTEST_PEDANTIC_ERRORS = Y +endif + +# Default warnings +ifndef CPPUTEST_WARNINGFLAGS + CPPUTEST_WARNINGFLAGS = -Wall -Wextra -Wshadow -Wswitch-default -Wswitch-enum -Wconversion +ifeq ($(CPPUTEST_PEDANTIC_ERRORS), Y) +# CPPUTEST_WARNINGFLAGS += -pedantic-errors + CPPUTEST_WARNINGFLAGS += -pedantic +endif +ifeq ($(UNAME_OS),$(LINUX_STR)) + CPPUTEST_WARNINGFLAGS += -Wsign-conversion +endif + CPPUTEST_CXX_WARNINGFLAGS = -Woverloaded-virtual + CPPUTEST_C_WARNINGFLAGS = -Wstrict-prototypes +endif + +#Wonderful extra compiler warnings with clang +ifeq ($(COMPILER_NAME),$(CLANG_STR)) +# -Wno-disabled-macro-expansion -> Have to disable the macro expansion warning as the operator new overload warns on that. +# -Wno-padded -> I sort-of like this warning but if there is a bool at the end of the class, it seems impossible to remove it! (except by making padding explicit) +# -Wno-global-constructors Wno-exit-time-destructors -> Great warnings, but in CppUTest it is impossible to avoid as the automatic test registration depends on the global ctor and dtor +# -Wno-weak-vtables -> The TEST_GROUP macro declares a class and will automatically inline its methods. Thats ok as they are only in one translation unit. Unfortunately, the warning can't detect that, so it must be disabled. + CPPUTEST_CXX_WARNINGFLAGS += -Weverything -Wno-disabled-macro-expansion -Wno-padded -Wno-global-constructors -Wno-exit-time-destructors -Wno-weak-vtables + CPPUTEST_C_WARNINGFLAGS += -Weverything -Wno-padded +endif + +# Uhm. Maybe put some warning flags for SunStudio here? +ifeq ($(COMPILER_NAME),$(SUNSTUDIO_CXX_STR)) + CPPUTEST_CXX_WARNINGFLAGS = + CPPUTEST_C_WARNINGFLAGS = +endif + +# Default dir for temporary files (d, o) +ifndef CPPUTEST_OBJS_DIR +ifndef TARGET_PLATFORM + CPPUTEST_OBJS_DIR = objs +else + CPPUTEST_OBJS_DIR = objs/$(TARGET_PLATFORM) +endif +endif + +# Default dir for the outout library +ifndef CPPUTEST_LIB_DIR +ifndef TARGET_PLATFORM + CPPUTEST_LIB_DIR = lib +else + CPPUTEST_LIB_DIR = lib/$(TARGET_PLATFORM) +endif +endif + +# No map by default +ifndef CPPUTEST_MAP_FILE + CPPUTEST_MAP_FILE = N +endif + +# No extentions is default +ifndef CPPUTEST_USE_EXTENSIONS + CPPUTEST_USE_EXTENSIONS = N +endif + +# No VPATH is default +ifndef CPPUTEST_USE_VPATH + CPPUTEST_USE_VPATH := N +endif +# Make empty, instead of 'N', for usage in $(if ) conditionals +ifneq ($(CPPUTEST_USE_VPATH), Y) + CPPUTEST_USE_VPATH := +endif + +ifndef TARGET_PLATFORM +#CPPUTEST_LIB_LINK_DIR = $(CPPUTEST_HOME)/lib +CPPUTEST_LIB_LINK_DIR = /usr/lib/x86_64-linux-gnu +else +CPPUTEST_LIB_LINK_DIR = $(CPPUTEST_HOME)/lib/$(TARGET_PLATFORM) +endif + +# -------------------------------------- +# derived flags in the following area +# -------------------------------------- + +# Without the C library, we'll need to disable the C++ library and ... +ifeq ($(CPPUTEST_USE_STD_C_LIB), N) + CPPUTEST_USE_STD_CPP_LIB = N + CPPUTEST_USE_MEM_LEAK_DETECTION = N + CPPUTEST_CPPFLAGS += -DCPPUTEST_STD_C_LIB_DISABLED + CPPUTEST_CPPFLAGS += -nostdinc +endif + +CPPUTEST_CPPFLAGS += -DCPPUTEST_COMPILATION + +ifeq ($(CPPUTEST_USE_MEM_LEAK_DETECTION), N) + CPPUTEST_CPPFLAGS += -DCPPUTEST_MEM_LEAK_DETECTION_DISABLED +else + ifndef CPPUTEST_MEMLEAK_DETECTOR_NEW_MACRO_FILE + CPPUTEST_MEMLEAK_DETECTOR_NEW_MACRO_FILE = -include $(CPPUTEST_HOME)/include/CppUTest/MemoryLeakDetectorNewMacros.h + endif + ifndef CPPUTEST_MEMLEAK_DETECTOR_MALLOC_MACRO_FILE + CPPUTEST_MEMLEAK_DETECTOR_MALLOC_MACRO_FILE = -include $(CPPUTEST_HOME)/include/CppUTest/MemoryLeakDetectorMallocMacros.h + endif +endif + +ifeq ($(CPPUTEST_ENABLE_DEBUG), Y) + CPPUTEST_CXXFLAGS += -g + CPPUTEST_CFLAGS += -g + CPPUTEST_LDFLAGS += -g +endif + +ifeq ($(CPPUTEST_USE_STD_CPP_LIB), N) + CPPUTEST_CPPFLAGS += -DCPPUTEST_STD_CPP_LIB_DISABLED +ifeq ($(CPPUTEST_USE_STD_C_LIB), Y) + CPPUTEST_CXXFLAGS += -nostdinc++ +endif +endif + +ifdef $(GMOCK_HOME) + GTEST_HOME = $(GMOCK_HOME)/gtest + CPPUTEST_CPPFLAGS += -I$(GMOCK_HOME)/include + GMOCK_LIBRARY = $(GMOCK_HOME)/lib/.libs/libgmock.a + LD_LIBRARIES += $(GMOCK_LIBRARY) + CPPUTEST_CPPFLAGS += -DINCLUDE_GTEST_TESTS + CPPUTEST_WARNINGFLAGS = + CPPUTEST_CPPFLAGS += -I$(GTEST_HOME)/include -I$(GTEST_HOME) + GTEST_LIBRARY = $(GTEST_HOME)/lib/.libs/libgtest.a + LD_LIBRARIES += $(GTEST_LIBRARY) +endif + + +ifeq ($(CPPUTEST_USE_GCOV), Y) + CPPUTEST_CXXFLAGS += -fprofile-arcs -ftest-coverage + CPPUTEST_CFLAGS += -fprofile-arcs -ftest-coverage +endif + +CPPUTEST_CXXFLAGS += $(CPPUTEST_WARNINGFLAGS) $(CPPUTEST_CXX_WARNINGFLAGS) +CPPUTEST_CPPFLAGS += $(CPPUTEST_WARNINGFLAGS) +CPPUTEST_CXXFLAGS += $(CPPUTEST_MEMLEAK_DETECTOR_NEW_MACRO_FILE) +CPPUTEST_CPPFLAGS += $(CPPUTEST_MEMLEAK_DETECTOR_MALLOC_MACRO_FILE) +CPPUTEST_CFLAGS += $(CPPUTEST_C_WARNINGFLAGS) + +TARGET_MAP = $(COMPONENT_NAME).map.txt +ifeq ($(CPPUTEST_MAP_FILE), Y) + CPPUTEST_LDFLAGS += -Wl,-map,$(TARGET_MAP) +endif + +# Link with CppUTest lib +CPPUTEST_LIB = $(CPPUTEST_LIB_LINK_DIR)/libCppUTest.a + +ifeq ($(CPPUTEST_USE_EXTENSIONS), Y) +CPPUTEST_LIB += $(CPPUTEST_LIB_LINK_DIR)/libCppUTestExt.a +endif + +ifdef CPPUTEST_STATIC_REALTIME + LD_LIBRARIES += -lrt +endif + +TARGET_LIB = \ + $(CPPUTEST_LIB_DIR)/lib$(COMPONENT_NAME).a + +ifndef TEST_TARGET + ifndef TARGET_PLATFORM + TEST_TARGET = $(COMPONENT_NAME)_tests + else + TEST_TARGET = $(COMPONENT_NAME)_$(TARGET_PLATFORM)_tests + endif +endif + +#Helper Functions +get_src_from_dir = $(wildcard $1/*.cpp) $(wildcard $1/*.cc) $(wildcard $1/*.c) +get_dirs_from_dirspec = $(wildcard $1) +get_src_from_dir_list = $(foreach dir, $1, $(call get_src_from_dir,$(dir))) +__src_to = $(subst .c,$1, $(subst .cc,$1, $(subst .cpp,$1,$(if $(CPPUTEST_USE_VPATH),$(notdir $2),$2)))) +src_to = $(addprefix $(CPPUTEST_OBJS_DIR)/,$(call __src_to,$1,$2)) +src_to_o = $(call src_to,.o,$1) +src_to_d = $(call src_to,.d,$1) +src_to_gcda = $(call src_to,.gcda,$1) +src_to_gcno = $(call src_to,.gcno,$1) +time = $(shell date +%s) +delta_t = $(eval minus, $1, $2) +debug_print_list = $(foreach word,$1,echo " $(word)";) echo; + +#Derived +STUFF_TO_CLEAN += $(TEST_TARGET) $(TEST_TARGET).exe $(TARGET_LIB) $(TARGET_MAP) + +SRC += $(call get_src_from_dir_list, $(SRC_DIRS)) $(SRC_FILES) +OBJ = $(call src_to_o,$(SRC)) + +STUFF_TO_CLEAN += $(OBJ) + +TEST_SRC += $(call get_src_from_dir_list, $(TEST_SRC_DIRS)) $(TEST_SRC_FILES) +TEST_OBJS = $(call src_to_o,$(TEST_SRC)) +STUFF_TO_CLEAN += $(TEST_OBJS) + + +MOCKS_SRC += $(call get_src_from_dir_list, $(MOCKS_SRC_DIRS)) +MOCKS_OBJS = $(call src_to_o,$(MOCKS_SRC)) +STUFF_TO_CLEAN += $(MOCKS_OBJS) + +ALL_SRC = $(SRC) $(TEST_SRC) $(MOCKS_SRC) + +# If we're using VPATH +ifeq ($(CPPUTEST_USE_VPATH), Y) +# gather all the source directories and add them + VPATH += $(sort $(dir $(ALL_SRC))) +# Add the component name to the objs dir path, to differentiate between same-name objects + CPPUTEST_OBJS_DIR := $(addsuffix /$(COMPONENT_NAME),$(CPPUTEST_OBJS_DIR)) +endif + +#Test coverage with gcov +GCOV_OUTPUT = gcov_output.txt +GCOV_REPORT = gcov_report.txt +GCOV_ERROR = gcov_error.txt +GCOV_GCDA_FILES = $(call src_to_gcda, $(ALL_SRC)) +GCOV_GCNO_FILES = $(call src_to_gcno, $(ALL_SRC)) +TEST_OUTPUT = $(TEST_TARGET).txt +STUFF_TO_CLEAN += \ + $(GCOV_OUTPUT)\ + $(GCOV_REPORT)\ + $(GCOV_REPORT).html\ + $(GCOV_ERROR)\ + $(GCOV_GCDA_FILES)\ + $(GCOV_GCNO_FILES)\ + $(TEST_OUTPUT) + +#The gcda files for gcov need to be deleted before each run +#To avoid annoying messages. +GCOV_CLEAN = $(SILENCE)rm -f $(GCOV_GCDA_FILES) $(GCOV_OUTPUT) $(GCOV_REPORT) $(GCOV_ERROR) +RUN_TEST_TARGET = $(SILENCE) $(GCOV_CLEAN) ; echo "Running $(TEST_TARGET)"; ./$(TEST_TARGET) $(CPPUTEST_EXE_FLAGS) -ojunit + +ifeq ($(CPPUTEST_USE_GCOV), Y) + + ifeq ($(COMPILER_NAME),$(CLANG_STR)) + LD_LIBRARIES += --coverage + else + LD_LIBRARIES += -lgcov + endif +endif + + +INCLUDES_DIRS_EXPANDED = $(call get_dirs_from_dirspec, $(INCLUDE_DIRS)) +INCLUDES += $(foreach dir, $(INCLUDES_DIRS_EXPANDED), -I$(dir)) +MOCK_DIRS_EXPANDED = $(call get_dirs_from_dirspec, $(MOCKS_SRC_DIRS)) +INCLUDES += $(foreach dir, $(MOCK_DIRS_EXPANDED), -I$(dir)) + +CPPUTEST_CPPFLAGS += $(INCLUDES) $(CPPUTESTFLAGS) + +DEP_FILES = $(call src_to_d, $(ALL_SRC)) +STUFF_TO_CLEAN += $(DEP_FILES) $(PRODUCTION_CODE_START) $(PRODUCTION_CODE_END) +STUFF_TO_CLEAN += $(STDLIB_CODE_START) $(MAP_FILE) cpputest_*.xml junit_run_output + +# We'll use the CPPUTEST_CFLAGS etc so that you can override AND add to the CppUTest flags +CFLAGS = $(CPPUTEST_CFLAGS) $(CPPUTEST_ADDITIONAL_CFLAGS) +CPPFLAGS = $(CPPUTEST_CPPFLAGS) $(CPPUTEST_ADDITIONAL_CPPFLAGS) +CXXFLAGS = $(CPPUTEST_CXXFLAGS) $(CPPUTEST_ADDITIONAL_CXXFLAGS) +LDFLAGS = $(CPPUTEST_LDFLAGS) $(CPPUTEST_ADDITIONAL_LDFLAGS) + +# Don't consider creating the archive a warning condition that does STDERR output +ARFLAGS := $(ARFLAGS)c + +DEP_FLAGS=-MMD -MP + +# Some macros for programs to be overridden. For some reason, these are not in Make defaults +RANLIB = ranlib + +# Targets + +.PHONY: all +all: start $(TEST_TARGET) + $(RUN_TEST_TARGET) + +.PHONY: start +start: $(TEST_TARGET) + $(SILENCE)START_TIME=$(call time) + +.PHONY: all_no_tests +all_no_tests: $(TEST_TARGET) + +.PHONY: flags +flags: + @echo + @echo "OS ${UNAME_OS}" + @echo "Compile C and C++ source with CPPFLAGS:" + @$(call debug_print_list,$(CPPFLAGS)) + @echo "Compile C++ source with CXXFLAGS:" + @$(call debug_print_list,$(CXXFLAGS)) + @echo "Compile C source with CFLAGS:" + @$(call debug_print_list,$(CFLAGS)) + @echo "Link with LDFLAGS:" + @$(call debug_print_list,$(LDFLAGS)) + @echo "Link with LD_LIBRARIES:" + @$(call debug_print_list,$(LD_LIBRARIES)) + @echo "Create libraries with ARFLAGS:" + @$(call debug_print_list,$(ARFLAGS)) + +TEST_DEPS = $(TEST_OBJS) $(MOCKS_OBJS) $(PRODUCTION_CODE_START) $(TARGET_LIB) $(USER_LIBS) $(PRODUCTION_CODE_END) $(CPPUTEST_LIB) $(STDLIB_CODE_START) +test-deps: $(TEST_DEPS) + +$(TEST_TARGET): $(TEST_DEPS) + @echo Linking $@ + $(SILENCE)$(CXX) -o $@ $^ $(LD_LIBRARIES) $(LDFLAGS) + +$(TARGET_LIB): $(OBJ) + @echo Building archive $@ + $(SILENCE)mkdir -p $(dir $@) + $(SILENCE)$(AR) $(ARFLAGS) $@ $^ + $(SILENCE)$(RANLIB) $@ + +test: $(TEST_TARGET) + $(RUN_TEST_TARGET) | tee $(TEST_OUTPUT) + +vtest: $(TEST_TARGET) + $(RUN_TEST_TARGET) -v | tee $(TEST_OUTPUT) + +$(CPPUTEST_OBJS_DIR)/%.o: %.cc + @echo compiling $(notdir $<) + $(SILENCE)mkdir -p $(dir $@) + $(SILENCE)$(COMPILE.cpp) $(DEP_FLAGS) $(OUTPUT_OPTION) $< + +$(CPPUTEST_OBJS_DIR)/%.o: %.cpp + @echo compiling $(notdir $<) + $(SILENCE)mkdir -p $(dir $@) + $(SILENCE)$(COMPILE.cpp) $(DEP_FLAGS) $(OUTPUT_OPTION) $< + +$(CPPUTEST_OBJS_DIR)/%.o: %.c + @echo compiling $(notdir $<) + $(SILENCE)mkdir -p $(dir $@) + $(SILENCE)$(COMPILE.c) $(DEP_FLAGS) $(OUTPUT_OPTION) $< + +ifneq "$(MAKECMDGOALS)" "clean" +-include $(DEP_FILES) +endif + +.PHONY: clean +clean: + @echo Making clean + $(SILENCE)$(RM) $(STUFF_TO_CLEAN) + $(SILENCE)rm -rf gcov objs #$(CPPUTEST_OBJS_DIR) + $(SILENCE)rm -rf $(CPPUTEST_LIB_DIR) + $(SILENCE)find . -name "*.gcno" | xargs rm -f + $(SILENCE)find . -name "*.gcda" | xargs rm -f + +#realclean gets rid of all gcov, o and d files in the directory tree +#not just the ones made by this makefile +.PHONY: realclean +realclean: clean + $(SILENCE)rm -rf gcov + $(SILENCE)find . -name "*.gdcno" | xargs rm -f + $(SILENCE)find . -name "*.[do]" | xargs rm -f + +gcov: test +ifeq ($(CPPUTEST_USE_VPATH), Y) + $(SILENCE)gcov --object-directory $(CPPUTEST_OBJS_DIR) $(SRC) >> $(GCOV_OUTPUT) 2>> $(GCOV_ERROR) +else + $(SILENCE)for d in $(SRC_DIRS) ; do \ + gcov --object-directory $(CPPUTEST_OBJS_DIR)/$$d $$d/*.c $$d/*.cpp >> $(GCOV_OUTPUT) 2>>$(GCOV_ERROR) ; \ + done + $(SILENCE)for f in $(SRC_FILES) ; do \ + gcov --object-directory $(CPPUTEST_OBJS_DIR)/$$f $$f >> $(GCOV_OUTPUT) 2>>$(GCOV_ERROR) ; \ + done +endif +# $(CPPUTEST_HOME)/scripts/filterGcov.sh $(GCOV_OUTPUT) $(GCOV_ERROR) $(GCOV_REPORT) $(TEST_OUTPUT) + /usr/share/cpputest/scripts/filterGcov.sh $(GCOV_OUTPUT) $(GCOV_ERROR) $(GCOV_REPORT) $(TEST_OUTPUT) + $(SILENCE)cat $(GCOV_REPORT) + $(SILENCE)mkdir -p gcov + $(SILENCE)mv *.gcov gcov + $(SILENCE)mv gcov_* gcov + @echo "See gcov directory for details" + +.PHONEY: format +format: + $(CPPUTEST_HOME)/scripts/reformat.sh $(PROJECT_HOME_DIR) + +.PHONEY: debug +debug: + @echo + @echo "Target Source files:" + @$(call debug_print_list,$(SRC)) + @echo "Target Object files:" + @$(call debug_print_list,$(OBJ)) + @echo "Test Source files:" + @$(call debug_print_list,$(TEST_SRC)) + @echo "Test Object files:" + @$(call debug_print_list,$(TEST_OBJS)) + @echo "Mock Source files:" + @$(call debug_print_list,$(MOCKS_SRC)) + @echo "Mock Object files:" + @$(call debug_print_list,$(MOCKS_OBJS)) + @echo "All Input Dependency files:" + @$(call debug_print_list,$(DEP_FILES)) + @echo Stuff to clean: + @$(call debug_print_list,$(STUFF_TO_CLEAN)) + @echo Includes: + @$(call debug_print_list,$(INCLUDES)) + +-include $(OTHER_MAKEFILE_TO_INCLUDE) diff --git a/test/mbed-client-randlib/unittest/makefile_defines.txt b/test/mbed-client-randlib/unittest/makefile_defines.txt new file mode 100755 index 0000000000..18691ee543 --- /dev/null +++ b/test/mbed-client-randlib/unittest/makefile_defines.txt @@ -0,0 +1,18 @@ +#--- Inputs ----# +CPPUTEST_HOME = /usr +CPPUTEST_USE_EXTENSIONS = Y +CPPUTEST_USE_VPATH = Y +CPPUTEST_USE_GCOV = Y +CPP_PLATFORM = gcc +INCLUDE_DIRS =\ + .\ + ../common\ + ../stubs\ + ../../../..\ + ../../../../source\ + ../../../../mbed-client-randlib\ + /usr/include\ + $(CPPUTEST_HOME)/include\ + +CPPUTESTFLAGS = -D__thumb2__ -w +CPPUTEST_CFLAGS += -std=gnu99 diff --git a/test/mbed-client-randlib/unittest/randlib/Makefile b/test/mbed-client-randlib/unittest/randlib/Makefile new file mode 100644 index 0000000000..e161b0165f --- /dev/null +++ b/test/mbed-client-randlib/unittest/randlib/Makefile @@ -0,0 +1,18 @@ +include ../makefile_defines.txt + +COMPONENT_NAME = randLIB_unit + +#This must be changed manually +SRC_FILES = \ + ../../../../source/randLIB.c + +TEST_SRC_FILES = \ + main.cpp \ + randlibtest.cpp \ + test_randlib.c \ + ../stubs/random_stub.c \ + +include ../MakefileWorker.mk + +CPPUTESTFLAGS += -DFEA_TRACE_SUPPORT + diff --git a/test/mbed-client-randlib/unittest/randlib/main.cpp b/test/mbed-client-randlib/unittest/randlib/main.cpp new file mode 100644 index 0000000000..d76b2f9173 --- /dev/null +++ b/test/mbed-client-randlib/unittest/randlib/main.cpp @@ -0,0 +1,15 @@ +/* + * Copyright (c) 2015 ARM. All rights reserved. + */ + +#include "CppUTest/CommandLineTestRunner.h" +#include "CppUTest/TestPlugin.h" +#include "CppUTest/TestRegistry.h" +#include "CppUTestExt/MockSupportPlugin.h" +int main(int ac, char** av) +{ + return CommandLineTestRunner::RunAllTests(ac, av); +} + +IMPORT_TEST_GROUP(randLIB); + diff --git a/test/mbed-client-randlib/unittest/randlib/randlibtest.cpp b/test/mbed-client-randlib/unittest/randlib/randlibtest.cpp new file mode 100644 index 0000000000..79d2159684 --- /dev/null +++ b/test/mbed-client-randlib/unittest/randlib/randlibtest.cpp @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2016 ARM. All rights reserved. + */ +#include "CppUTest/TestHarness.h" +#include "test_randlib.h" + +TEST_GROUP(randLIB) +{ + void setup() + { + } + + void teardown() + { + } +}; + +TEST(randLIB, test_randLIB_seed_random) +{ + CHECK(test_randLIB_seed_random()); +} + +TEST(randLIB, test_randLIB_get_8bit) +{ + CHECK(test_randLIB_get_8bit()); +} + +TEST(randLIB, test_randLIB_get_16bit) +{ + CHECK(test_randLIB_get_16bit()); +} + +TEST(randLIB, test_randLIB_get_32bit) +{ + CHECK(test_randLIB_get_32bit()); +} + +TEST(randLIB, test_randLIB_get_n_bytes_random) +{ + CHECK(test_randLIB_get_n_bytes_random()); +} + +TEST(randLIB, test_randLIB_get_random_in_range) +{ + CHECK(test_randLIB_get_random_in_range()); +} + +TEST(randLIB, test_randLIB_randomise_base) +{ + CHECK(test_randLIB_randomise_base()); +} diff --git a/test/mbed-client-randlib/unittest/randlib/test_randlib.c b/test/mbed-client-randlib/unittest/randlib/test_randlib.c new file mode 100644 index 0000000000..5be796e9e2 --- /dev/null +++ b/test/mbed-client-randlib/unittest/randlib/test_randlib.c @@ -0,0 +1,96 @@ +/* + * Copyright (c) 2016 ARM. All rights reserved. + */ +#include "test_randlib.h" +#include +#include + +bool test_randLIB_seed_random() +{ + randLIB_seed_random(); + return true; +} + +bool test_randLIB_get_8bit() +{ + randLIB_seed_random(); + uint8_t test = randLIB_get_8bit(); + if( test == 0 ) { + test = randLIB_get_8bit(); + if( test == 0 ) { + return false; + } + } + return true; +} + +bool test_randLIB_get_16bit() +{ + randLIB_seed_random(); + uint16_t test = randLIB_get_16bit(); + if( test == 0 ) { + test = randLIB_get_16bit(); + if( test == 0 ) { + return false; + } + } + return true; +} + +bool test_randLIB_get_32bit() +{ + randLIB_seed_random(); + uint32_t test = randLIB_get_32bit(); + if( test == 0 ) { + test = randLIB_get_32bit(); + if( test == 0 ) { + return false; + } + } + return true; +} + +bool test_randLIB_get_n_bytes_random() +{ + int8_t ret = randLIB_get_n_bytes_random(NULL, 0); + if( ret != -1){ + return false; + } + + uint8_t dat[5]; + ret = randLIB_get_n_bytes_random(&dat, 5); + if( ret != 0){ + return false; + } + return true; +} + +bool test_randLIB_get_random_in_range() +{ + uint16_t ret = randLIB_get_random_in_range(2, 2); + if( ret != 2 ){ + return false; + } + + ret = randLIB_get_random_in_range(2, 3); + if( ret != 2 && ret != 3){ + return false; + } + + ret = randLIB_get_random_in_range(0, 0xFFFF); + + return true; +} + +bool test_randLIB_randomise_base() +{ + uint32_t ret = randLIB_randomise_base(0,0,0); + if( ret ){ + return false; + } + ret = randLIB_randomise_base(0xffff0000,0x8888,0x8888); + if( ret != 0xffffffff ){ + return false; + } + return true; +} diff --git a/test/mbed-client-randlib/unittest/randlib/test_randlib.h b/test/mbed-client-randlib/unittest/randlib/test_randlib.h new file mode 100644 index 0000000000..f83d7d60fe --- /dev/null +++ b/test/mbed-client-randlib/unittest/randlib/test_randlib.h @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2016 ARM. All rights reserved. + */ +#ifndef TEST_RANDLIB_H +#define TEST_RANDLIB_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +bool test_randLIB_seed_random(); + +bool test_randLIB_get_8bit(); + +bool test_randLIB_get_16bit(); + +bool test_randLIB_get_32bit(); + +bool test_randLIB_get_n_bytes_random(); + +bool test_randLIB_get_random_in_range(); + +bool test_randLIB_randomise_base(); + + +#ifdef __cplusplus +} +#endif + +#endif // TEST_RANDLIB_H + diff --git a/test/mbed-client-randlib/unittest/run_tests b/test/mbed-client-randlib/unittest/run_tests new file mode 100755 index 0000000000..87f2f504e6 --- /dev/null +++ b/test/mbed-client-randlib/unittest/run_tests @@ -0,0 +1,43 @@ +#!/bin/bash +echo +echo Build mbed client randlib unit tests +echo + +# Remember to add new test folder to Makefile +make clean +make all + +echo +echo Create results +echo +mkdir results + +find ./ -name '*.xml' | xargs cp -t ./results/ + +echo +echo Create coverage document +echo +mkdir coverages +cd coverages + +#copy the .gcda & .gcno for all test projects (no need to modify +#cp ../../../source/*.gc* . +#find ../ -name '*.gcda' | xargs cp -t . +#find ../ -name '*.gcno' | xargs cp -t . +#find . -name "test*" -type f -delete +#find . -name "*test*" -type f -delete +#find . -name "*stub*" -type f -delete +#rm -rf main.* + +lcov -q -d ../. -c -o app.info +lcov -q -r app.info "/test*" -o app.info +lcov -q -r app.info "/usr*" -o app.info +genhtml --no-branch-coverage app.info +cd .. +echo +echo +echo +echo Have a nice bug hunt! +echo +echo +echo diff --git a/test/mbed-client-randlib/unittest/stubs/random_stub.c b/test/mbed-client-randlib/unittest/stubs/random_stub.c new file mode 100644 index 0000000000..773bb07d69 --- /dev/null +++ b/test/mbed-client-randlib/unittest/stubs/random_stub.c @@ -0,0 +1,15 @@ +/* + * Copyright (c) 2016, ARM Limited, All Rights Reserved + */ +#include "inttypes.h" + + +void arm_random_module_init(void) +{ + +} + +uint32_t arm_random_seed_get(void) +{ + return 4; +} From 9bb7b055deff367ac34cc3a95895ba6d4ddf8abe Mon Sep 17 00:00:00 2001 From: Seppo Takalo Date: Tue, 24 May 2016 14:00:20 +0300 Subject: [PATCH 110/154] Implement unittests for Linux --- .../unittest/randlib/test_randlib.c | 1 + .../unittest/randlib_linux/Makefile | 20 ++++++ .../unittest/randlib_linux/main.cpp | 14 ++++ .../unittest/randlib_linux/randlibtest.cpp | 69 +++++++++++++++++++ .../unittest/stubs/open_stub.c | 24 +++++++ 5 files changed, 128 insertions(+) create mode 100644 test/mbed-client-randlib/unittest/randlib_linux/Makefile create mode 100644 test/mbed-client-randlib/unittest/randlib_linux/main.cpp create mode 100644 test/mbed-client-randlib/unittest/randlib_linux/randlibtest.cpp create mode 100644 test/mbed-client-randlib/unittest/stubs/open_stub.c diff --git a/test/mbed-client-randlib/unittest/randlib/test_randlib.c b/test/mbed-client-randlib/unittest/randlib/test_randlib.c index 5be796e9e2..a8187d8262 100644 --- a/test/mbed-client-randlib/unittest/randlib/test_randlib.c +++ b/test/mbed-client-randlib/unittest/randlib/test_randlib.c @@ -4,6 +4,7 @@ #include "test_randlib.h" #include #include +#include "randLIB.h" bool test_randLIB_seed_random() { diff --git a/test/mbed-client-randlib/unittest/randlib_linux/Makefile b/test/mbed-client-randlib/unittest/randlib_linux/Makefile new file mode 100644 index 0000000000..e0af3a8615 --- /dev/null +++ b/test/mbed-client-randlib/unittest/randlib_linux/Makefile @@ -0,0 +1,20 @@ +include ../makefile_defines.txt + +COMPONENT_NAME = randLIB_linux_unit + +#This must be changed manually +SRC_FILES = \ + ../../../../linux/randLIB.c + +TEST_SRC_FILES = \ + main.cpp \ + randlibtest.cpp \ + ../randlib/test_randlib.c \ + ../stubs/random_stub.c \ + ../stubs/open_stub.c \ + +include ../MakefileWorker.mk + +CPPUTESTFLAGS += -DFEA_TRACE_SUPPORT + +CPPUTEST_LDFLAGS = -Wl,--wrap,open diff --git a/test/mbed-client-randlib/unittest/randlib_linux/main.cpp b/test/mbed-client-randlib/unittest/randlib_linux/main.cpp new file mode 100644 index 0000000000..25a4c3b6d0 --- /dev/null +++ b/test/mbed-client-randlib/unittest/randlib_linux/main.cpp @@ -0,0 +1,14 @@ +/* + * Copyright (c) 2015 ARM. All rights reserved. + */ + +#include "CppUTest/CommandLineTestRunner.h" +#include "CppUTest/TestPlugin.h" +#include "CppUTest/TestRegistry.h" +#include "CppUTestExt/MockSupportPlugin.h" +int main(int ac, char** av) +{ + return CommandLineTestRunner::RunAllTests(ac, av); +} + +IMPORT_TEST_GROUP(randLIB_linux); diff --git a/test/mbed-client-randlib/unittest/randlib_linux/randlibtest.cpp b/test/mbed-client-randlib/unittest/randlib_linux/randlibtest.cpp new file mode 100644 index 0000000000..b0a1399257 --- /dev/null +++ b/test/mbed-client-randlib/unittest/randlib_linux/randlibtest.cpp @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2016 ARM. All rights reserved. + */ +#include "CppUTest/TestHarness.h" +#include "../randlib/test_randlib.h" +#include "randLIB.h" + +TEST_GROUP(randLIB_linux) +{ + void setup() + { + } + + void teardown() + { + } +}; + +extern bool allow_open; + +TEST(randLIB_linux, test_randLIB_seed_random) +{ + allow_open = true; + CHECK(test_randLIB_seed_random()); +} + +TEST(randLIB_linux, test_randLIB_get_8bit) +{ + allow_open = true; + CHECK(test_randLIB_get_8bit()); +} + +TEST(randLIB_linux, test_randLIB_get_16bit) +{ + allow_open = true; + CHECK(test_randLIB_get_16bit()); +} + +TEST(randLIB_linux, test_randLIB_get_32bit) +{ + allow_open = true; + CHECK(test_randLIB_get_32bit()); +} + +TEST(randLIB_linux, test_randLIB_get_n_bytes_random) +{ + allow_open = true; + CHECK(test_randLIB_get_n_bytes_random()); +} + +TEST(randLIB_linux, test_randLIB_get_random_in_range) +{ + allow_open = true; + CHECK(test_randLIB_get_random_in_range()); +} + +TEST(randLIB_linux, test_randLIB_randomise_base) +{ + allow_open = true; + CHECK(test_randLIB_randomise_base()); +} + +TEST(randLIB_linux, test_fail_to_open) +{ + uint8_t buf[4]; + allow_open = false; + CHECK(-1 == randLIB_get_n_bytes_random(buf, 4)); + allow_open = true; +} diff --git a/test/mbed-client-randlib/unittest/stubs/open_stub.c b/test/mbed-client-randlib/unittest/stubs/open_stub.c new file mode 100644 index 0000000000..588c12096e --- /dev/null +++ b/test/mbed-client-randlib/unittest/stubs/open_stub.c @@ -0,0 +1,24 @@ +#include +#include +#include +#include +#include + +bool allow_open = true; +int __real_open(const char *path, int flags, ...); +int __wrap_open(const char *path, int flags, ...) +{ + if (allow_open) { + if (flags & O_CREAT) { + va_list vl; + va_start(vl,flags); + mode_t mode = va_arg(vl, mode_t); + va_end(vl); + return __real_open(path, flags, mode); + } else { + return __real_open(path, flags); + } + } else { + return -1; + } +} From dbd41baef243b3bfc9001f82a262d55138a38d6e Mon Sep 17 00:00:00 2001 From: Seppo Takalo Date: Tue, 24 May 2016 14:00:32 +0300 Subject: [PATCH 111/154] Fix file permissions. --- test/mbed-client-randlib/unittest/Makefile | 0 test/mbed-client-randlib/unittest/MakefileWorker.mk | 0 test/mbed-client-randlib/unittest/makefile_defines.txt | 0 3 files changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 test/mbed-client-randlib/unittest/Makefile mode change 100755 => 100644 test/mbed-client-randlib/unittest/MakefileWorker.mk mode change 100755 => 100644 test/mbed-client-randlib/unittest/makefile_defines.txt diff --git a/test/mbed-client-randlib/unittest/Makefile b/test/mbed-client-randlib/unittest/Makefile old mode 100755 new mode 100644 diff --git a/test/mbed-client-randlib/unittest/MakefileWorker.mk b/test/mbed-client-randlib/unittest/MakefileWorker.mk old mode 100755 new mode 100644 diff --git a/test/mbed-client-randlib/unittest/makefile_defines.txt b/test/mbed-client-randlib/unittest/makefile_defines.txt old mode 100755 new mode 100644 From 80f5c491dd4d7c8e30b94eb575cdb402e9a17e83 Mon Sep 17 00:00:00 2001 From: Kevin Bracey Date: Tue, 24 May 2016 18:12:53 +0300 Subject: [PATCH 112/154] Ignore test and linux folders in mbed classic build --- .mbedignore | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 .mbedignore diff --git a/.mbedignore b/.mbedignore new file mode 100644 index 0000000000..ba4eb1b31d --- /dev/null +++ b/.mbedignore @@ -0,0 +1,2 @@ +linux/* +test/* From eae41d1df943af415af8f8cd61abc7bd915ddc6c Mon Sep 17 00:00:00 2001 From: Seppo Takalo Date: Wed, 25 May 2016 12:13:47 +0300 Subject: [PATCH 113/154] Ignore test folder from mbed builds --- .mbedignore | 1 + 1 file changed, 1 insertion(+) create mode 100644 .mbedignore diff --git a/.mbedignore b/.mbedignore new file mode 100644 index 0000000000..ab1cfb4ef2 --- /dev/null +++ b/.mbedignore @@ -0,0 +1 @@ +test/* From 2be763fa66d060fede47688d741ffc48b19ca6fa Mon Sep 17 00:00:00 2001 From: Tero Heinonen Date: Wed, 8 Jun 2016 09:58:33 +0300 Subject: [PATCH 114/154] Modified coap response callback, added parameters (#23) * Modified coap response callback, added parameters for source address and source port. * version v4.0.0 --- coap-service/coap_service_api.h | 4 +++- module.json | 2 +- source/coap_message_handler.c | 4 ++-- source/include/coap_message_handler.h | 2 +- 4 files changed, 7 insertions(+), 5 deletions(-) diff --git a/coap-service/coap_service_api.h b/coap-service/coap_service_api.h index f5bc321d4b..c1f9063c00 100644 --- a/coap-service/coap_service_api.h +++ b/coap-service/coap_service_api.h @@ -62,11 +62,13 @@ extern "C" { * Function that handles CoAP service message receiving and parsing * * \param msg_id Id number of the current message. + * \param source_address IPv6 source address. + * \param source_port Source port * \param response_ptr Pointer to CoAP header structure. * * \return 0 for success / -1 for failure */ -typedef int coap_service_response_recv(int8_t service_id, uint16_t msg_id, sn_coap_hdr_s *response_ptr); +typedef int coap_service_response_recv(int8_t service_id, uint8_t source_address[static 16], uint16_t source_port, sn_coap_hdr_s *response_ptr); /** * \brief CoAP service request callback diff --git a/module.json b/module.json index e16d62b26f..da6ecbe4b5 100644 --- a/module.json +++ b/module.json @@ -1,6 +1,6 @@ { "name": "coap-service", - "version": "3.0.0", + "version": "4.0.0", "description": "CoAP Service library", "keywords": [ "coap", diff --git a/source/coap_message_handler.c b/source/coap_message_handler.c index 20277706c9..fabbd57d7e 100644 --- a/source/coap_message_handler.c +++ b/source/coap_message_handler.c @@ -104,7 +104,7 @@ static int8_t coap_rx_function(sn_coap_hdr_s *resp_ptr, sn_nsdl_addr_s *address_ this = transaction_find_client_by_token(resp_ptr->token_ptr); } if (this && this->resp_cb) { - this->resp_cb(this->service_id, resp_ptr->msg_id, NULL); + this->resp_cb(this->service_id, address_ptr->addr_ptr, address_ptr->port, NULL); } transaction_delete(this); return 0; @@ -227,7 +227,7 @@ int16_t coap_message_handler_coap_msg_process(coap_msg_handler_t *handle, int8_t } tr_debug("Service %d, response received", this->service_id); if (this->resp_cb) { - this->resp_cb(this->service_id, coap_message->msg_id, coap_message); + this->resp_cb(this->service_id, source_addr_ptr, port, coap_message); } sn_coap_parser_release_allocated_coap_msg_mem(handle->coap, coap_message); transaction_delete(this); diff --git a/source/include/coap_message_handler.h b/source/include/coap_message_handler.h index 05ac03fbd9..5fe422315a 100644 --- a/source/include/coap_message_handler.h +++ b/source/include/coap_message_handler.h @@ -34,7 +34,7 @@ * * \return 0 for success / -1 for failure */ -typedef int coap_message_handler_response_recv(int8_t service_id, uint16_t msg_id, sn_coap_hdr_s *response_ptr); +typedef int coap_message_handler_response_recv(int8_t service_id, uint8_t source_address[static 16], uint16_t source_port, sn_coap_hdr_s *response_ptr); typedef struct coap_msg_handler_s { void *(*sn_coap_service_malloc)(uint16_t); From dd16e419d6f1fc0e45b49f253445859d79e4c213 Mon Sep 17 00:00:00 2001 From: Simon Butcher Date: Wed, 8 Jun 2016 10:24:15 +0100 Subject: [PATCH 115/154] Fixes coap-service for development head of mbed TLS This change allows the mbed TLS type mbedtls_timer_t to be defined, required for the upstream version of mbed TLS (> version 2.2.1). --- source/coap_security_handler.c | 1 + source/include/coap_security_handler.h | 1 + 2 files changed, 2 insertions(+) diff --git a/source/coap_security_handler.c b/source/coap_security_handler.c index a45c357bcf..e239857111 100644 --- a/source/coap_security_handler.c +++ b/source/coap_security_handler.c @@ -8,6 +8,7 @@ #include "mbedtls/sha256.h" #include "mbedtls/error.h" +#include "mbedtls/platform.h" #include "mbedtls/ssl_cookie.h" #include "mbedtls/entropy_poll.h" #include "mbedtls/ssl.h" diff --git a/source/include/coap_security_handler.h b/source/include/coap_security_handler.h index bd6d6ba81e..e43c74bb7d 100644 --- a/source/include/coap_security_handler.h +++ b/source/include/coap_security_handler.h @@ -21,6 +21,7 @@ #include #include #include +#include "mbedtls/platform.h" #include "mbedtls/ssl.h" #include "mbedtls/sha256.h" #include "mbedtls/entropy.h" From f903edb347d9dfe5fb9d89ea5f1b6af7a4a3930f Mon Sep 17 00:00:00 2001 From: Mika Tervonen Date: Thu, 16 Jun 2016 14:46:47 +0300 Subject: [PATCH 116/154] Check validity of transaction pointer when sending data --- source/coap_message_handler.c | 10 ++++++++++ source/coap_service_api.c | 6 +++--- source/include/coap_message_handler.h | 2 ++ 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/source/coap_message_handler.c b/source/coap_message_handler.c index fabbd57d7e..bcdb99eb45 100644 --- a/source/coap_message_handler.c +++ b/source/coap_message_handler.c @@ -160,6 +160,16 @@ int8_t coap_message_handler_destroy(coap_msg_handler_t *handle){ return 0; } +coap_transaction_t *coap_message_handler_transaction_valid(coap_transaction_t *tr_ptr) +{ + ns_list_foreach(coap_transaction_t, cur_ptr, &request_list) { + if (cur_ptr == tr_ptr) { + return tr_ptr; + } + } + return NULL; +} + coap_transaction_t *coap_message_handler_find_transaction(uint8_t *address_ptr, uint16_t port) { if( !address_ptr ) diff --git a/source/coap_service_api.c b/source/coap_service_api.c index ef33f1171b..b4d78e6eb6 100644 --- a/source/coap_service_api.c +++ b/source/coap_service_api.c @@ -123,18 +123,18 @@ static void own_free(void *ptr) static uint8_t coap_tx_function(uint8_t *data_ptr, uint16_t data_len, sn_nsdl_addr_s *address_ptr, void *param) { coap_service_t *this; - coap_transaction_t *transaction_ptr = param; + coap_transaction_t *transaction_ptr = coap_message_handler_transaction_valid(param); ns_address_t dest_addr; if (!transaction_ptr || !data_ptr) { - return 0; + return -1; } tr_debug("Service %d, CoAP TX Function", transaction_ptr->service_id); this = service_find(transaction_ptr->service_id); if (!this) { - return 0; + return -1; } memcpy(&(dest_addr.address), address_ptr->addr_ptr, 16); diff --git a/source/include/coap_message_handler.h b/source/include/coap_message_handler.h index 5fe422315a..f12e3f03f7 100644 --- a/source/include/coap_message_handler.h +++ b/source/include/coap_message_handler.h @@ -65,6 +65,8 @@ extern coap_msg_handler_t *coap_message_handler_init(void *(*used_malloc_func_pt extern int8_t coap_message_handler_destroy(coap_msg_handler_t *handle); +extern coap_transaction_t *coap_message_handler_transaction_valid(coap_transaction_t *tr_ptr); + extern coap_transaction_t *coap_message_handler_find_transaction(uint8_t *address_ptr, uint16_t port); extern int16_t coap_message_handler_coap_msg_process(coap_msg_handler_t *handle, int8_t socket_id, uint8_t source_addr_ptr[static 16], uint16_t port, From cef04e5df265932436fcfb523e36a38bbf5ccb7f Mon Sep 17 00:00:00 2001 From: Arto Kinnunen Date: Wed, 22 Jun 2016 14:45:39 +0300 Subject: [PATCH 117/154] Update unit tests (#26) Build unit tests in Jenkins when PR created/changed. --- .../unittest/coap_connection_handler/Makefile | 2 +- .../unittest/coap_message_handler/Makefile | 6 +- .../unittest/coap_security_handler/Makefile | 2 +- .../unittest/coap_service_api/Makefile | 6 +- .../coap_service_api/test_coap_service_api.c | 8 +- .../unittest/makefile_defines.txt | 2 + .../unittest/stub/coap_message_handler_stub.c | 5 + .../unittest/stub/mbed_trace_stub.c | 116 ++++++++++ test/coap-service/unittest/stub/ns_trace.c | 10 - .../unittest/stub/ns_trace_stub.c | 202 ------------------ 10 files changed, 135 insertions(+), 224 deletions(-) create mode 100644 test/coap-service/unittest/stub/mbed_trace_stub.c delete mode 100644 test/coap-service/unittest/stub/ns_trace.c delete mode 100644 test/coap-service/unittest/stub/ns_trace_stub.c diff --git a/test/coap-service/unittest/coap_connection_handler/Makefile b/test/coap-service/unittest/coap_connection_handler/Makefile index 3884361113..4fbe7a72a8 100644 --- a/test/coap-service/unittest/coap_connection_handler/Makefile +++ b/test/coap-service/unittest/coap_connection_handler/Makefile @@ -10,7 +10,7 @@ TEST_SRC_FILES = \ main.cpp \ coap_connection_handlertest.cpp \ test_coap_connection_handler.c \ - ../stub/ns_trace_stub.c \ + ../stub/mbed_trace_stub.c \ ../stub/ns_list_stub.c \ ../stub/ns_timer_stub.c \ ../stub/timeout_stub.c \ diff --git a/test/coap-service/unittest/coap_message_handler/Makefile b/test/coap-service/unittest/coap_message_handler/Makefile index 312b8c7ec7..40699d2700 100644 --- a/test/coap-service/unittest/coap_message_handler/Makefile +++ b/test/coap-service/unittest/coap_message_handler/Makefile @@ -8,9 +8,9 @@ SRC_FILES = \ TEST_SRC_FILES = \ main.cpp \ - coap_message_handlertest.cpp \ - test_coap_message_handler.c \ - ../stub/ns_trace_stub.c \ + coap_message_handlertest.cpp \ + test_coap_message_handler.c \ + ../stub/mbed_trace_stub.c \ ../stub/sn_coap_protocol_stub.c \ ../stub/sn_coap_parser_stub.c \ ../stub/sn_coap_builder_stub.c \ diff --git a/test/coap-service/unittest/coap_security_handler/Makefile b/test/coap-service/unittest/coap_security_handler/Makefile index 6f5d7218a2..ee1b27252c 100644 --- a/test/coap-service/unittest/coap_security_handler/Makefile +++ b/test/coap-service/unittest/coap_security_handler/Makefile @@ -10,7 +10,7 @@ TEST_SRC_FILES = \ main.cpp \ coap_security_handlertest.cpp \ test_coap_security_handler.c \ - ../stub/ns_trace_stub.c \ + ../stub/mbed_trace_stub.c \ ../stub/ns_list_stub.c \ ../stub/ns_timer_stub.c \ ../stub/mbedtls_stub.c \ diff --git a/test/coap-service/unittest/coap_service_api/Makefile b/test/coap-service/unittest/coap_service_api/Makefile index 130b44429f..fd04d6ac48 100644 --- a/test/coap-service/unittest/coap_service_api/Makefile +++ b/test/coap-service/unittest/coap_service_api/Makefile @@ -8,9 +8,9 @@ SRC_FILES = \ TEST_SRC_FILES = \ main.cpp \ - coap_service_apitest.cpp \ - test_coap_service_api.c \ - ../stub/ns_trace_stub.c \ + coap_service_apitest.cpp \ + test_coap_service_api.c \ + ../stub/mbed_trace_stub.c \ ../stub/ns_list_stub.c \ ../stub/system_timer_stub.c \ ../stub/nsdynmemLIB_stub.c \ diff --git a/test/coap-service/unittest/coap_service_api/test_coap_service_api.c b/test/coap-service/unittest/coap_service_api/test_coap_service_api.c index 3d41dc42f8..5cc5f380d2 100644 --- a/test/coap-service/unittest/coap_service_api/test_coap_service_api.c +++ b/test/coap-service/unittest/coap_service_api/test_coap_service_api.c @@ -252,22 +252,22 @@ bool test_coap_callbacks() addr.addr_len = 2; addr.port = 4; addr.addr_ptr = &data; - if( 0 != coap_message_handler_stub.coap_ptr->sn_coap_tx_callback(NULL, 0, &addr, NULL)) + if( 255 != coap_message_handler_stub.coap_ptr->sn_coap_tx_callback(NULL, 0, &addr, NULL)) return false; coap_transaction_t *tr = (coap_transaction_t *)malloc(sizeof(coap_transaction_t)); memset(tr, 0, sizeof(coap_transaction_t)); - if( 0 != coap_message_handler_stub.coap_ptr->sn_coap_tx_callback(&data, 0, &addr, tr)) + if( 255 != coap_message_handler_stub.coap_ptr->sn_coap_tx_callback(&data, 0, &addr, tr)) return false; tr->service_id = 1; thread_conn_handler_stub.int_value = -2; - if( 0 != coap_message_handler_stub.coap_ptr->sn_coap_tx_callback(&data, 0, &addr, tr)) + if( 255 != coap_message_handler_stub.coap_ptr->sn_coap_tx_callback(&data, 0, &addr, tr)) return false; nsdynmemlib_stub.returnCounter = 1; - if( 0 != coap_message_handler_stub.coap_ptr->sn_coap_tx_callback(&data, 2, &addr, tr)) + if( 255 != coap_message_handler_stub.coap_ptr->sn_coap_tx_callback(&data, 2, &addr, tr)) return false; free(tr->data_ptr); diff --git a/test/coap-service/unittest/makefile_defines.txt b/test/coap-service/unittest/makefile_defines.txt index 7a8d1642a1..9991a6eaaf 100755 --- a/test/coap-service/unittest/makefile_defines.txt +++ b/test/coap-service/unittest/makefile_defines.txt @@ -13,11 +13,13 @@ INCLUDE_DIRS =\ ../../../../yotta_modules/mbedtls/ \ ../../../../yotta_modules/sal-stack-nanostack/nanostack/ \ ../../../../yotta_modules/nanostack-randlib/mbed-client-randlib/ \ + ../../../../yotta_modules/nanostack-libservice/ \ ../../../../yotta_modules/nanostack-libservice/mbed-client-libservice/ \ ../../../../yotta_modules/mbed-client-c/nsdl-c/ \ ../../../../yotta_modules/mbed-client-c/source/libCoap/src/include/ \ ../../../../yotta_modules/sal-stack-nanostack-eventloop/nanostack-event-loop/ \ ../../../../yotta_modules/sal-stack-nanostack-eventloop/source/ \ + ../../../../yotta_modules/mbed-trace/ \ ../../../../../nanostack/nanostack/\ ../../../../../libService/libService/\ ../../../../../nsdl-c/nsdl-c/\ diff --git a/test/coap-service/unittest/stub/coap_message_handler_stub.c b/test/coap-service/unittest/stub/coap_message_handler_stub.c index a79a267996..4be9a3e869 100644 --- a/test/coap-service/unittest/stub/coap_message_handler_stub.c +++ b/test/coap-service/unittest/stub/coap_message_handler_stub.c @@ -22,6 +22,11 @@ int8_t coap_message_handler_destroy(coap_msg_handler_t *handle) return coap_message_handler_stub.int8_value; } +coap_transaction_t *coap_message_handler_transaction_valid(coap_transaction_t *tr_ptr) +{ + return coap_message_handler_stub.coap_ptr; +} + coap_transaction_t *coap_message_handler_find_transaction(uint8_t *address_ptr, uint16_t port) { return coap_message_handler_stub.coap_tx_ptr; diff --git a/test/coap-service/unittest/stub/mbed_trace_stub.c b/test/coap-service/unittest/stub/mbed_trace_stub.c new file mode 100644 index 0000000000..04b1fc7e34 --- /dev/null +++ b/test/coap-service/unittest/stub/mbed_trace_stub.c @@ -0,0 +1,116 @@ +/* + * Copyright (c) 2014-2015 ARM Limited. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 + * 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 +#include +#include +#include + +#ifndef YOTTA_CFG_MBED_TRACE +#define YOTTA_CFG_MBED_TRACE +#define YOTTA_CFG_MBED_TRACE_FEA_IPV6 1 +#endif + +#include "mbed-trace/mbed_trace.h" +#if YOTTA_CFG_MBED_TRACE_FEA_IPV6 == 1 +#include "mbed-client-libservice/ip6string.h" +#include "mbed-client-libservice/common_functions.h" +#endif + + +int mbed_trace_init(void) +{ + return 0; +} +void mbed_trace_free(void) +{ +} + +void mbed_trace_buffer_sizes(int lineLength, int tmpLength) +{ +} + +void mbed_trace_config_set(uint8_t config) +{ +} + +uint8_t mbed_trace_config_get(void) +{ + return 0; +} + +void mbed_trace_prefix_function_set(char *(*pref_f)(size_t)) +{ +} + +void mbed_trace_suffix_function_set(char *(*suffix_f)(void)) +{ +} + +void mbed_trace_print_function_set(void (*printf)(const char *)) +{ +} + +void mbed_trace_cmdprint_function_set(void (*printf)(const char *)) +{ +} + +void mbed_trace_exclude_filters_set(char *filters) +{ + +} + +const char *mbed_trace_exclude_filters_get(void) +{ + return NULL; +} + +const char *mbed_trace_include_filters_get(void) +{ + return NULL; +} + +void mbed_trace_include_filters_set(char *filters) +{ + +} + +void mbed_tracef(uint8_t dlevel, const char *grp, const char *fmt, ...) +{ +} + +const char *mbed_trace_last(void) +{ + return NULL; +} + +/* Helping functions */ +#define tmp_data_left() m_trace.tmp_data_length-(m_trace.tmp_data_ptr-m_trace.tmp_data) +#if YOTTA_CFG_MBED_TRACE_FEA_IPV6 == 1 +char *mbed_trace_ipv6(const void *addr_ptr) +{ + return NULL; +} + +char *mbed_trace_ipv6_prefix(const uint8_t *prefix, uint8_t prefix_len) +{ + return NULL; +} +#endif //YOTTA_CFG_MBED_TRACE_FEA_IPV6 + +char *mbed_trace_array(const uint8_t *buf, uint16_t len) +{ + return NULL; +} diff --git a/test/coap-service/unittest/stub/ns_trace.c b/test/coap-service/unittest/stub/ns_trace.c deleted file mode 100644 index e9aa39dfbe..0000000000 --- a/test/coap-service/unittest/stub/ns_trace.c +++ /dev/null @@ -1,10 +0,0 @@ -/* - * Copyright (c) 2013-2015 ARM Limited. All Rights Reserved. - */ -#include "config.h" -#include "ns_types.h" -void tracef(uint8_t dlevel, const char *grp, const char *fmt, ...) -{ - -} - diff --git a/test/coap-service/unittest/stub/ns_trace_stub.c b/test/coap-service/unittest/stub/ns_trace_stub.c deleted file mode 100644 index 8fa73e0aa0..0000000000 --- a/test/coap-service/unittest/stub/ns_trace_stub.c +++ /dev/null @@ -1,202 +0,0 @@ -/* - * Copyright (c) 2014-2015 ARM Limited. All Rights Reserved. - */ -#include -#include -#include -#include - -#include "ns_trace.h" -#include "ip6string.h" -#include "common_functions.h" - -#if defined(_WIN32) || defined(__unix__) || defined(__unix) || defined(unix) -#ifndef MEM_ALLOC -#define MEM_ALLOC malloc -#endif -#ifndef MEM_FREE -#define MEM_FREE free -#endif -#else -#include "nsdynmemLIB.h" -#ifndef MEM_ALLOC -#define MEM_ALLOC ns_dyn_mem_alloc -#endif -#ifndef MEM_FREE -#define MEM_FREE ns_dyn_mem_free -#endif -#endif - -#define VT100_COLOR_ERROR "\x1b[31m" -#define VT100_COLOR_WARN "\x1b[33m" -#define VT100_COLOR_INFO "\x1b[39m" -#define VT100_COLOR_DEBUG "\x1b[90m" - -/** default max trace line size in bytes */ -#define DEFAULT_TRACE_LINE_LENGTH 1024 -/** default max temporary buffer size in bytes, used in - trace_ipv6, trace_array and trace_strn */ -#define DEFAULT_TRACE_TMP_LINE_LEN 128 -/** default max filters (include/exclude) length in bytes */ -#define DEFAULT_TRACE_FILTER_LENGTH 24 - -static void default_print(const char *str); - -typedef struct { - /** trace configuration bits */ - uint8_t trace_config; - /** exclude filters list, related group name */ - char *filters_exclude; - /** include filters list, related group name */ - char *filters_include; - /** Filters length */ - int filters_length; - /** trace line */ - char *line; - /** trace line length */ - int line_length; - /** temporary data */ - char *tmp_data; - /** temporary data array length */ - int tmp_data_length; - /** temporary data pointer */ - char *tmp_data_ptr; - - /** prefix function, which can be used to put time to the trace line */ - char *(*prefix_f)(size_t); - /** suffix function, which can be used to some string to the end of trace line */ - char *(*suffix_f)(void); - /** print out function. Can be redirect to flash for example. */ - void (*printf)(const char *); - /** print out function for TRACE_LEVEL_CMD */ - void (*cmd_printf)(const char *); -} trace_s; - -static trace_s m_trace = { - .filters_exclude = 0, - .filters_include = 0, - .line = 0, - .tmp_data = 0, - .prefix_f = 0, - .suffix_f = 0, - .printf = 0, - .cmd_printf = 0 -}; - -int trace_init(void) -{ - return 0; -} -void trace_free(void) -{ - -} - -void set_trace_config(uint8_t config) -{ - -} -uint8_t get_trace_config(void) -{ - return 0; -} -void set_trace_prefix_function(char *(*pref_f)(size_t)) -{ -} - -void set_trace_suffix_function(char *(*suffix_f)(void)) -{ -} - -void set_trace_print_function(void (*printf)(const char *)) -{ -} - -void set_trace_cmdprint_function(void (*printf)(const char *)) -{ -} - -void set_trace_exclude_filters(char *filters) -{ -} -const char *get_trace_exclude_filters(void) -{ - return NULL; -} - -const char *get_trace_include_filters(void) -{ - return NULL; -} - -void set_trace_include_filters(char *filters) -{ -} - -static int8_t trace_skip(int8_t dlevel, const char *grp) -{ - return 0; -} - -static void default_print(const char *str) -{ -} - -void tracef(uint8_t dlevel, const char *grp, const char *fmt, ...) -{ - -} -const char *trace_last(void) -{ - return ""; -} - -/* Helping functions */ -#define tmp_data_left() m_trace.tmp_data_length-(m_trace.tmp_data_ptr-m_trace.tmp_data) -char *trace_ipv6(const void *addr_ptr) -{ - return ""; -} - -char *trace_ipv6_prefix(const uint8_t *prefix, uint8_t prefix_len) -{ - return ""; -} - -char *trace_array(const uint8_t *buf, uint16_t len) -{ - return ""; -} - -// rest of debug print functions will be obsolete and will be overridden with new trace interface.. -void debugf(const char *fmt, ...) -{ -} - -void debug(const char *s) -{ -} - -void debug_put(char c) -{ -} - -void debug_hex(uint8_t x) -{ -} - -void debug_int(int i) -{ -} - -void printf_array(const void *buf , uint16_t len) -{ -} - -void printf_ipv6_address(const void *addr_ptr) -{ -} - -void printf_string(const void *ptr, uint16_t len) -{ -} From 18102ed27cc1dafcf63f515211054ce930d55ca2 Mon Sep 17 00:00:00 2001 From: Seppo Takalo Date: Tue, 28 Jun 2016 10:03:29 +0300 Subject: [PATCH 118/154] version v4.0.1 --- module.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module.json b/module.json index da6ecbe4b5..1491beb176 100644 --- a/module.json +++ b/module.json @@ -1,6 +1,6 @@ { "name": "coap-service", - "version": "4.0.0", + "version": "4.0.1", "description": "CoAP Service library", "keywords": [ "coap", From ae0579f17378e443a925ded2968530016bae6a35 Mon Sep 17 00:00:00 2001 From: Arto Kinnunen Date: Tue, 28 Jun 2016 10:45:30 +0300 Subject: [PATCH 119/154] Update content_type to sn_coap_content_format_e (#27) -Update content_type to be sn_coap_content_format_e instead of uint8_t to avoid type conversion (bugs). -Fix compiler warnings --- coap-service/coap_service_api.h | 8 ++++---- source/coap_connection_handler.c | 1 + source/coap_message_handler.c | 9 +++++---- source/coap_security_handler.c | 6 ++++-- source/coap_service_api.c | 14 +++++++------- source/include/coap_message_handler.h | 4 ++-- .../unittest/stub/coap_message_handler_stub.c | 10 ++++------ .../unittest/stub/coap_service_api_stub.c | 9 +++++---- 8 files changed, 32 insertions(+), 29 deletions(-) diff --git a/coap-service/coap_service_api.h b/coap-service/coap_service_api.h index c1f9063c00..9924d1f311 100644 --- a/coap-service/coap_service_api.h +++ b/coap-service/coap_service_api.h @@ -119,11 +119,11 @@ typedef int coap_service_security_done_cb(int8_t service_id, uint8_t address[sta * \param listen_port Port that Application wants to use for communicate with coap server. * \param service_options Options of the current service. * \param *start_ptr Callback to inform security handling is started and to fetch device password. - * \param *security_done_cb Callback to inform security handling is done. + * \param *coap_security_done_cb Callback to inform security handling is done. * * \return service_id / -1 for failure */ -extern int8_t coap_service_initialize(int8_t interface_id, uint16_t listen_port, uint8_t service_options, coap_service_security_start_cb *start_ptr, coap_service_security_done_cb *security_done_cb); +extern int8_t coap_service_initialize(int8_t interface_id, uint16_t listen_port, uint8_t service_options, coap_service_security_start_cb *start_ptr, coap_service_security_done_cb *coap_security_done_cb); /** * \brief Service delete @@ -245,7 +245,7 @@ extern int8_t coap_service_unregister_uri(int8_t service_id, const char *uri); * \return msg_id Id number of the current message. */ extern uint16_t coap_service_request_send(int8_t service_id, uint8_t options, const uint8_t destination_addr[static 16], uint16_t destination_port, sn_coap_msg_type_e msg_type, sn_coap_msg_code_e msg_code, const char *uri, - uint8_t cont_type, const uint8_t *payload_ptr, uint16_t payload_len, coap_service_response_recv *request_response_cb); + sn_coap_content_format_e cont_type, const uint8_t *payload_ptr, uint16_t payload_len, coap_service_response_recv *request_response_cb); /** * \brief Sends CoAP service response @@ -260,7 +260,7 @@ extern uint16_t coap_service_request_send(int8_t service_id, uint8_t options, co * \return -1 For failure *- 0 For success */ -extern int8_t coap_service_response_send(int8_t service_id, uint8_t options, sn_coap_hdr_s *request_ptr, sn_coap_msg_code_e message_code, int32_t content_type, const uint8_t *payload_ptr,uint16_t payload_len); +extern int8_t coap_service_response_send(int8_t service_id, uint8_t options, sn_coap_hdr_s *request_ptr, sn_coap_msg_code_e message_code, sn_coap_content_format_e content_type, const uint8_t *payload_ptr,uint16_t payload_len); extern int8_t coap_service_set_handshake_timeout(int8_t service_id, uint32_t min, uint32_t max); #ifdef __cplusplus diff --git a/source/coap_connection_handler.c b/source/coap_connection_handler.c index 03d0b68e5f..4bbe7d0856 100644 --- a/source/coap_connection_handler.c +++ b/source/coap_connection_handler.c @@ -317,6 +317,7 @@ static int send_to_socket(int8_t socket_id, uint8_t *address_ptr, uint16_t port, static int receive_from_socket(int8_t socket_id, unsigned char *buf, size_t len) { + (void)len; internal_socket_t *sock = int_socket_find_by_socket_id(socket_id); if( sock->data && sock->data_len > 0 ){ memcpy( buf, sock->data, sock->data_len ); diff --git a/source/coap_message_handler.c b/source/coap_message_handler.c index bcdb99eb45..613547c8d2 100644 --- a/source/coap_message_handler.c +++ b/source/coap_message_handler.c @@ -248,7 +248,7 @@ int16_t coap_message_handler_coap_msg_process(coap_msg_handler_t *handle, int8_t uint16_t coap_message_handler_request_send(coap_msg_handler_t *handle, int8_t service_id, uint8_t options, const uint8_t destination_addr[static 16], uint16_t destination_port, sn_coap_msg_type_e msg_type, sn_coap_msg_code_e msg_code, const char *uri, - uint8_t cont_type, const uint8_t *payload_ptr, uint16_t payload_len, coap_message_handler_response_recv *request_response_cb) + sn_coap_content_format_e cont_type, const uint8_t *payload_ptr, uint16_t payload_len, coap_message_handler_response_recv *request_response_cb) { coap_transaction_t *transaction_ptr; sn_coap_hdr_s request; @@ -280,7 +280,7 @@ uint16_t coap_message_handler_request_send(coap_msg_handler_t *handle, int8_t se request.msg_code = msg_code; request.uri_path_ptr = (uint8_t *)uri; request.uri_path_len = strlen(uri); - coap_service_build_content_format(&request, (sn_coap_content_format_e)cont_type); + coap_service_build_content_format(&request, cont_type); do{ randLIB_get_n_bytes_random(token,4); @@ -313,7 +313,7 @@ uint16_t coap_message_handler_request_send(coap_msg_handler_t *handle, int8_t se } //TODO: refactor this to use nsdl -int8_t coap_message_handler_response_send(coap_msg_handler_t *handle, int8_t service_id, uint8_t options, sn_coap_hdr_s *request_ptr, sn_coap_msg_code_e message_code, int32_t content_type, const uint8_t *payload_ptr, uint16_t payload_len) +int8_t coap_message_handler_response_send(coap_msg_handler_t *handle, int8_t service_id, uint8_t options, sn_coap_hdr_s *request_ptr, sn_coap_msg_code_e message_code, sn_coap_content_format_e content_type, const uint8_t *payload_ptr, uint16_t payload_len) { coap_transaction_t *transaction_ptr; sn_coap_hdr_s *response; @@ -321,6 +321,7 @@ int8_t coap_message_handler_response_send(coap_msg_handler_t *handle, int8_t ser uint16_t data_len; uint8_t *data_ptr; (void) options; + (void)service_id; tr_debug("Service %d, send CoAP response", service_id); if (!request_ptr || !handle) { @@ -345,7 +346,7 @@ int8_t coap_message_handler_response_send(coap_msg_handler_t *handle, int8_t ser } response->payload_len = payload_len; response->payload_ptr = (uint8_t *) payload_ptr; // Cast away const and trust that nsdl doesn't modify... - coap_service_build_content_format(response, (sn_coap_content_format_e)content_type); + coap_service_build_content_format(response, content_type); data_len = sn_coap_builder_calc_needed_packet_data_size(response); data_ptr = own_alloc(data_len); diff --git a/source/coap_security_handler.c b/source/coap_security_handler.c index e239857111..b235bea406 100644 --- a/source/coap_security_handler.c +++ b/source/coap_security_handler.c @@ -26,7 +26,7 @@ const int ECJPAKE_SUITES[] = { }; #endif -const static int PSK_SUITES[] = { +static const int PSK_SUITES[] = { MBEDTLS_TLS_PSK_WITH_AES_128_CBC_SHA256, MBEDTLS_TLS_PSK_WITH_AES_256_CCM_8, MBEDTLS_TLS_PSK_WITH_AES_128_CCM_8, @@ -204,7 +204,7 @@ static int simple_cookie_check(void *ctx, } /**** Key export function ****/ - +#if defined(MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED) static int export_key_block(void *ctx, const unsigned char *mk, const unsigned char *kb, size_t maclen, size_t keylen, size_t ivlen) @@ -224,6 +224,7 @@ static int export_key_block(void *ctx, memcpy(p_key_block->value, kb /* + (2 * maclen)*/, (2 * keylen) + (2 * ivlen)); return 0; } +#endif int coap_security_handler_configure_keys( coap_security_t *sec, coap_security_keys_t keys ) { @@ -559,6 +560,7 @@ int f_recv(void *ctx, unsigned char *buf, size_t len){ int entropy_poll( void *ctx, unsigned char *output, size_t len, size_t *olen ) { + (void)ctx; //TODO: change to more secure random randLIB_seed_random(); char *c = (char*)ns_dyn_mem_temporary_alloc(len); diff --git a/source/coap_service_api.c b/source/coap_service_api.c index b4d78e6eb6..ed5063ac4e 100644 --- a/source/coap_service_api.c +++ b/source/coap_service_api.c @@ -36,7 +36,7 @@ typedef struct uri_registration { typedef NS_LIST_HEAD(uri_registration_t, link) uri_registration_list_t; typedef struct coap_service { - coap_service_security_done_cb *security_done_cb; + coap_service_security_done_cb *coap_security_done_cb; coap_service_security_start_cb *security_start_cb; coap_service_virtual_socket_send_cb *virtual_socket_send_cb; uri_registration_list_t uri_list; @@ -244,8 +244,8 @@ static void sec_done_cb(int8_t socket_id, uint8_t address[static 16], uint16_t p { //TODO: this is not enough if shared socket. Inform all! coap_service_t *this = service_find_by_socket(socket_id); - if (this && this->security_done_cb) { // secure done callback - this->security_done_cb(this->service_id, address, keyblock); + if (this && this->coap_security_done_cb) { // secure done callback + this->coap_security_done_cb(this->service_id, address, keyblock); } //TODO refactor this away. There should be no transaction_ptr(s) before done_cb has been called @@ -276,7 +276,7 @@ static int get_passwd_cb(int8_t socket_id, uint8_t address[static 16], uint16_t } int8_t coap_service_initialize(int8_t interface_id, uint16_t listen_port, uint8_t service_options, - coap_service_security_start_cb *start_ptr, coap_service_security_done_cb *security_done_cb) + coap_service_security_start_cb *start_ptr, coap_service_security_done_cb *coap_security_done_cb) { (void) interface_id; @@ -295,7 +295,7 @@ int8_t coap_service_initialize(int8_t interface_id, uint16_t listen_port, uint8_ this->service_options = service_options; this->security_start_cb = start_ptr; - this->security_done_cb = security_done_cb; + this->coap_security_done_cb = coap_security_done_cb; if (tasklet_id == -1) { tr_debug("service tasklet init"); @@ -447,13 +447,13 @@ int8_t coap_service_unregister_uri(int8_t service_id, const char *uri) } uint16_t coap_service_request_send(int8_t service_id, uint8_t options, const uint8_t destination_addr[static 16], uint16_t destination_port, sn_coap_msg_type_e msg_type, sn_coap_msg_code_e msg_code, const char *uri, - uint8_t cont_type, const uint8_t *payload_ptr, uint16_t payload_len, coap_service_response_recv *request_response_cb){ + sn_coap_content_format_e cont_type, const uint8_t *payload_ptr, uint16_t payload_len, coap_service_response_recv *request_response_cb){ //TODO: coap_service_response_recv is an ugly cast, this should be refactored away + sn_coap_hdr_s MUST NOT be exposed to users of coap-service! //Callback would be still needed, but where to store callback? return coap_message_handler_request_send(coap_service_handle, service_id, options, destination_addr, destination_port, msg_type, msg_code, uri, cont_type, payload_ptr, payload_len, request_response_cb); } -int8_t coap_service_response_send(int8_t service_id, uint8_t options, sn_coap_hdr_s *request_ptr, sn_coap_msg_code_e message_code, int32_t content_type, const uint8_t *payload_ptr,uint16_t payload_len){ +int8_t coap_service_response_send(int8_t service_id, uint8_t options, sn_coap_hdr_s *request_ptr, sn_coap_msg_code_e message_code, sn_coap_content_format_e content_type, const uint8_t *payload_ptr,uint16_t payload_len){ return coap_message_handler_response_send(coap_service_handle, service_id, options, request_ptr, message_code, content_type, payload_ptr, payload_len); } diff --git a/source/include/coap_message_handler.h b/source/include/coap_message_handler.h index f12e3f03f7..20a75d6cc7 100644 --- a/source/include/coap_message_handler.h +++ b/source/include/coap_message_handler.h @@ -73,11 +73,11 @@ extern int16_t coap_message_handler_coap_msg_process(coap_msg_handler_t *handle, uint8_t *data_ptr, uint16_t data_len, int16_t (cb)(int8_t, sn_coap_hdr_s *, coap_transaction_t *)); extern uint16_t coap_message_handler_request_send(coap_msg_handler_t *handle, int8_t service_id, uint8_t options, const uint8_t destination_addr[static 16], - uint16_t destination_port, sn_coap_msg_type_e msg_type, sn_coap_msg_code_e msg_code, const char *uri, uint8_t cont_type, + uint16_t destination_port, sn_coap_msg_type_e msg_type, sn_coap_msg_code_e msg_code, const char *uri, sn_coap_content_format_e cont_type, const uint8_t *payload_ptr, uint16_t payload_len, coap_message_handler_response_recv *request_response_cb); extern int8_t coap_message_handler_response_send(coap_msg_handler_t *handle, int8_t service_id, uint8_t options, sn_coap_hdr_s *request_ptr, sn_coap_msg_code_e message_code, - int32_t content_type, const uint8_t *payload_ptr, uint16_t payload_len); + sn_coap_content_format_e content_type, const uint8_t *payload_ptr, uint16_t payload_len); extern int8_t coap_message_handler_exec(coap_msg_handler_t *handle, uint32_t current_time); diff --git a/test/coap-service/unittest/stub/coap_message_handler_stub.c b/test/coap-service/unittest/stub/coap_message_handler_stub.c index 4be9a3e869..68f2b66912 100644 --- a/test/coap-service/unittest/stub/coap_message_handler_stub.c +++ b/test/coap-service/unittest/stub/coap_message_handler_stub.c @@ -39,15 +39,14 @@ int16_t coap_message_handler_coap_msg_process(coap_msg_handler_t *handle, int8_t return coap_message_handler_stub.int16_value; } -uint16_t coap_message_handler_request_send(coap_msg_handler_t *handle, int8_t service_id, uint8_t options, const uint8_t destination_addr[static 16], - uint16_t destination_port, sn_coap_msg_type_e msg_type, sn_coap_msg_code_e msg_code, const char *uri, uint8_t cont_type, - const uint8_t *payload_ptr, uint16_t payload_len, coap_message_handler_response_recv *request_response_cb) +uint16_t coap_message_handler_request_send(coap_msg_handler_t *handle, int8_t service_id, uint8_t options, + const uint8_t destination_addr[static 16], uint16_t destination_port, sn_coap_msg_type_e msg_type, sn_coap_msg_code_e msg_code, + const char *uri, sn_coap_content_format_e cont_type, const uint8_t *payload_ptr, uint16_t payload_len, coap_message_handler_response_recv *request_response_cb) { return coap_message_handler_stub.uint16_value; } -int8_t coap_message_handler_response_send(coap_msg_handler_t *handle, int8_t service_id, uint8_t options, sn_coap_hdr_s *request_ptr, sn_coap_msg_code_e message_code, - int32_t content_type, const uint8_t *payload_ptr, uint16_t payload_len) +int8_t coap_message_handler_response_send(coap_msg_handler_t *handle, int8_t service_id, uint8_t options, sn_coap_hdr_s *request_ptr, sn_coap_msg_code_e message_code,sn_coap_content_format_e content_type, const uint8_t *payload_ptr, uint16_t payload_len) { return coap_message_handler_stub.int8_value; } @@ -57,4 +56,3 @@ int8_t coap_message_handler_exec(coap_msg_handler_t *handle, uint32_t current_ti return coap_message_handler_stub.int8_value; } - diff --git a/test/coap-service/unittest/stub/coap_service_api_stub.c b/test/coap-service/unittest/stub/coap_service_api_stub.c index c4a586d647..cdd1d2698d 100644 --- a/test/coap-service/unittest/stub/coap_service_api_stub.c +++ b/test/coap-service/unittest/stub/coap_service_api_stub.c @@ -19,7 +19,7 @@ #include "net_interface.h" int8_t coap_service_initialize(int8_t interface_id, uint16_t listen_port, uint8_t service_options, - coap_service_security_start_cb *start_ptr, coap_service_security_done_cb *security_done_cb) + coap_service_security_start_cb *start_ptr, coap_service_security_done_cb *coap_security_done_cb) { return 0; } @@ -48,12 +48,13 @@ int8_t coap_service_unregister_uri(int8_t service_id, const char *uri) return 0; } -uint16_t coap_service_request_send(int8_t service_id, uint8_t options, const uint8_t destination_addr[static 16], uint16_t destination_port, sn_coap_msg_type_e msg_type, sn_coap_msg_code_e msg_code, const char *uri, - uint8_t cont_type, const uint8_t *payload_ptr, uint16_t payload_len, coap_message_handler_response_recv *request_response_cb){ +uint16_t coap_service_request_send(int8_t service_id, uint8_t options, const uint8_t destination_addr[static 16], uint16_t destination_port, sn_coap_msg_type_e msg_type, sn_coap_msg_code_e msg_code, const char *uri, sn_coap_content_format_e cont_type, const uint8_t *payload_ptr, uint16_t payload_len, coap_service_response_recv *request_response_cb) +{ return 0; } -int8_t coap_service_response_send(int8_t service_id, uint8_t options, sn_coap_hdr_s *request_ptr, sn_coap_msg_code_e message_code, int32_t content_type, const uint8_t *payload_ptr,uint16_t payload_len){ +int8_t coap_service_response_send(int8_t service_id, uint8_t options, sn_coap_hdr_s *request_ptr, sn_coap_msg_code_e message_code, sn_coap_content_format_e content_type, const uint8_t *payload_ptr,uint16_t payload_len) +{ return 0; } From a37a6cace9887666db0599dcb40bb45f7670b7a9 Mon Sep 17 00:00:00 2001 From: Seppo Takalo Date: Tue, 28 Jun 2016 11:15:54 +0300 Subject: [PATCH 120/154] Include mbedtls/platform.h in test code also. --- .../coap_connection_handler/test_coap_connection_handler.c | 1 + test/coap-service/unittest/stub/mbedtls_stub.h | 1 + 2 files changed, 2 insertions(+) diff --git a/test/coap-service/unittest/coap_connection_handler/test_coap_connection_handler.c b/test/coap-service/unittest/coap_connection_handler/test_coap_connection_handler.c index 8072af50c2..6c26a8db09 100644 --- a/test/coap-service/unittest/coap_connection_handler/test_coap_connection_handler.c +++ b/test/coap-service/unittest/coap_connection_handler/test_coap_connection_handler.c @@ -5,6 +5,7 @@ #include #include #include "nsdynmemLIB_stub.h" +#include "mbedtls/platform.h" #include "mbedtls/ssl.h" #include "coap_connection_handler.h" #include "coap_security_handler_stub.h" diff --git a/test/coap-service/unittest/stub/mbedtls_stub.h b/test/coap-service/unittest/stub/mbedtls_stub.h index 297f6f7cfb..52402bd74f 100644 --- a/test/coap-service/unittest/stub/mbedtls_stub.h +++ b/test/coap-service/unittest/stub/mbedtls_stub.h @@ -22,6 +22,7 @@ #include #include +#include "mbedtls/platform.h" #include "mbedtls/ssl.h" #include "mbedtls/ctr_drbg.h" #include "mbedtls/x509_crt.h" From 36436c895932a36c0a09400c460b613c0554fc65 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tommi=20K=C3=A4sm=C3=A4?= Date: Thu, 14 Jul 2016 03:11:58 -0700 Subject: [PATCH 121/154] Define a value for YOTTA_CFG_MBED_TRACE flag. (#29) --- test/coap-service/unittest/stub/mbed_trace_stub.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/coap-service/unittest/stub/mbed_trace_stub.c b/test/coap-service/unittest/stub/mbed_trace_stub.c index 04b1fc7e34..34dae55225 100644 --- a/test/coap-service/unittest/stub/mbed_trace_stub.c +++ b/test/coap-service/unittest/stub/mbed_trace_stub.c @@ -19,7 +19,7 @@ #include #ifndef YOTTA_CFG_MBED_TRACE -#define YOTTA_CFG_MBED_TRACE +#define YOTTA_CFG_MBED_TRACE 1 #define YOTTA_CFG_MBED_TRACE_FEA_IPV6 1 #endif From 70447c3e35426be19fb1885aaa85e645f2ee144d Mon Sep 17 00:00:00 2001 From: Tero Heinonen Date: Wed, 17 Aug 2016 14:30:36 +0300 Subject: [PATCH 122/154] Set link layer security when opening socket. (#30) --- source/coap_connection_handler.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/source/coap_connection_handler.c b/source/coap_connection_handler.c index 4bbe7d0856..96baa165ea 100644 --- a/source/coap_connection_handler.c +++ b/source/coap_connection_handler.c @@ -226,6 +226,11 @@ static internal_socket_t *int_socket_create(uint16_t listen_port, bool use_ephem ns_dyn_mem_free(this); return NULL; } + + socket_setsockopt(this->listen_socket, SOCKET_IPPROTO_IPV6, SOCKET_LINK_LAYER_SECURITY, &(const int8_t) { + bypassSec ? 0 : 1 + }, sizeof(int8_t)); + // XXX API for this? May want to get clever to do recommended first query = 1 hop, retries = whole PAN socket_setsockopt(this->listen_socket, SOCKET_IPPROTO_IPV6, SOCKET_IPV6_MULTICAST_HOPS, &(const int16_t) { 16 From 73d5163e4ef07ee10b494290761cf977ae6a6f28 Mon Sep 17 00:00:00 2001 From: Antti Kauppila Date: Thu, 8 Sep 2016 18:13:26 +0300 Subject: [PATCH 123/154] New CoAP changes updated to this library Unittests updated also --- source/coap_message_handler.c | 37 +++++++------------ .../test_coap_message_handler.c | 9 +++-- .../unittest/stub/coap_message_handler_stub.h | 1 + .../unittest/stub/sn_coap_parser_stub.c | 27 -------------- 4 files changed, 20 insertions(+), 54 deletions(-) diff --git a/source/coap_message_handler.c b/source/coap_message_handler.c index 613547c8d2..843fd10b1d 100644 --- a/source/coap_message_handler.c +++ b/source/coap_message_handler.c @@ -294,7 +294,6 @@ uint16_t coap_message_handler_request_send(coap_msg_handler_t *handle, int8_t se data_len = sn_coap_builder_calc_needed_packet_data_size(&request); data_ptr = own_alloc(data_len); if(data_len > 0 && !data_ptr){ - own_free(request.content_type_ptr); transaction_delete(transaction_ptr); return 0; } @@ -303,7 +302,6 @@ uint16_t coap_message_handler_request_send(coap_msg_handler_t *handle, int8_t se handle->sn_coap_tx_callback(data_ptr, data_len, &dst_addr, transaction_ptr); // Free allocated data - own_free(request.content_type_ptr); own_free(data_ptr); if(request_response_cb == NULL){ //No response expected @@ -373,26 +371,19 @@ int8_t coap_message_handler_exec(coap_msg_handler_t *handle, uint32_t current_ti static void coap_service_build_content_format(sn_coap_hdr_s *header, sn_coap_content_format_e format) { - if (format == COAP_CT_NONE) { - return; - } + header->content_format = format; - /* Always alloc - CoAP library needs a non-NULL pointer to trigger writing - * of a zero-length option, and it will free the pointer later. - */ - header->content_type_ptr = own_alloc(2); - if (!header->content_type_ptr) { - return; - } - - if (format == 0) { /* text/plain */ - header->content_type_len = 0; - } else if (format <= 0xff) { - header->content_type_ptr[0] = format; - header->content_type_len = 1; - } else { - header->content_type_ptr[0] = format >> 8; - header->content_type_ptr[1] = format & 0xff; - header->content_type_len = 2; - } +// if (format == COAP_CT_NONE) { +// return; +// } +// if (format == 0) { /* text/plain */ +// header->content_type_len = 0; +// } else if (format <= 0xff) { +// header->content_type_ptr[0] = format; +// header->content_type_len = 1; +// } else { +// header->content_type_ptr[0] = format >> 8; +// header->content_type_ptr[1] = format & 0xff; +// header->content_type_len = 2; +// } } diff --git a/test/coap-service/unittest/coap_message_handler/test_coap_message_handler.c b/test/coap-service/unittest/coap_message_handler/test_coap_message_handler.c index 9210150458..bfb3c20cec 100644 --- a/test/coap-service/unittest/coap_message_handler/test_coap_message_handler.c +++ b/test/coap-service/unittest/coap_message_handler/test_coap_message_handler.c @@ -39,7 +39,7 @@ int resp_recv(int8_t service_id, uint16_t msg_id, sn_coap_hdr_s *response_ptr){ int16_t process_cb(int8_t a, sn_coap_hdr_s *b, coap_transaction_t *c) { - + return retValue; } bool test_coap_message_handler_init() @@ -140,11 +140,12 @@ bool test_coap_message_handler_coap_msg_process() memset(sn_coap_protocol_stub.expectedHeader, 0, sizeof(sn_coap_hdr_s)); sn_coap_protocol_stub.expectedHeader->coap_status = COAP_STATUS_OK; sn_coap_protocol_stub.expectedHeader->msg_code = 1; - retValue = -1; + retValue = 0; if( 0 != coap_message_handler_coap_msg_process(handle, 0, buf, 22, NULL, 0, process_cb)) return false; nsdynmemlib_stub.returnCounter = 1; + retValue = -1; if( -1 != coap_message_handler_coap_msg_process(handle, 0, buf, 22, NULL, 0, process_cb)) return false; @@ -265,13 +266,13 @@ bool test_coap_message_handler_response_send() sn_coap_builder_stub.expectedHeader = (sn_coap_hdr_s *)malloc(sizeof(sn_coap_hdr_s)); memset(sn_coap_builder_stub.expectedHeader, 0, sizeof(sn_coap_hdr_s)); - nsdynmemlib_stub.returnCounter = 1; + nsdynmemlib_stub.returnCounter = 0; if( -1 != coap_message_handler_response_send(handle, 2, 0, header, 1,3,NULL, 0)) return false; sn_coap_builder_stub.expectedHeader = (sn_coap_hdr_s *)malloc(sizeof(sn_coap_hdr_s)); memset(sn_coap_builder_stub.expectedHeader, 0, sizeof(sn_coap_hdr_s)); - nsdynmemlib_stub.returnCounter = 2; + nsdynmemlib_stub.returnCounter = 1; if( 0 != coap_message_handler_response_send(handle, 2, 0, header, 1,3,NULL, 0)) return false; diff --git a/test/coap-service/unittest/stub/coap_message_handler_stub.h b/test/coap-service/unittest/stub/coap_message_handler_stub.h index c8c37d142c..5cbb974160 100644 --- a/test/coap-service/unittest/stub/coap_message_handler_stub.h +++ b/test/coap-service/unittest/stub/coap_message_handler_stub.h @@ -23,6 +23,7 @@ extern "C" { #endif #include +#include #include "coap_message_handler.h" typedef struct { diff --git a/test/coap-service/unittest/stub/sn_coap_parser_stub.c b/test/coap-service/unittest/stub/sn_coap_parser_stub.c index 327b74998e..d177012671 100644 --- a/test/coap-service/unittest/stub/sn_coap_parser_stub.c +++ b/test/coap-service/unittest/stub/sn_coap_parser_stub.c @@ -34,15 +34,7 @@ void sn_coap_parser_release_allocated_coap_msg_mem(struct coap_s *handle, sn_coa free(freed_coap_msg_ptr->token_ptr); } - if (freed_coap_msg_ptr->content_type_ptr != NULL) { - free(freed_coap_msg_ptr->content_type_ptr); - } - if (freed_coap_msg_ptr->options_list_ptr != NULL) { - if (freed_coap_msg_ptr->options_list_ptr->max_age_ptr != NULL) { - free(freed_coap_msg_ptr->options_list_ptr->max_age_ptr); - } - if (freed_coap_msg_ptr->options_list_ptr->proxy_uri_ptr != NULL) { free(freed_coap_msg_ptr->options_list_ptr->proxy_uri_ptr); } @@ -59,33 +51,14 @@ void sn_coap_parser_release_allocated_coap_msg_mem(struct coap_s *handle, sn_coa free(freed_coap_msg_ptr->options_list_ptr->location_path_ptr); } - if (freed_coap_msg_ptr->options_list_ptr->uri_port_ptr != NULL) { - free(freed_coap_msg_ptr->options_list_ptr->uri_port_ptr); - } - if (freed_coap_msg_ptr->options_list_ptr->location_query_ptr != NULL) { free(freed_coap_msg_ptr->options_list_ptr->location_query_ptr); } - if (freed_coap_msg_ptr->options_list_ptr->observe_ptr != NULL) { - free(freed_coap_msg_ptr->options_list_ptr->observe_ptr); - } - if (freed_coap_msg_ptr->options_list_ptr->uri_query_ptr != NULL) { free(freed_coap_msg_ptr->options_list_ptr->uri_query_ptr); } - if (freed_coap_msg_ptr->options_list_ptr->block2_ptr != NULL) { - free(freed_coap_msg_ptr->options_list_ptr->block2_ptr); - } - - if (freed_coap_msg_ptr->options_list_ptr->block1_ptr != NULL) { - free(freed_coap_msg_ptr->options_list_ptr->block1_ptr); - } - if (freed_coap_msg_ptr->options_list_ptr->accept_ptr != NULL) { - free(freed_coap_msg_ptr->options_list_ptr->accept_ptr); - } - free(freed_coap_msg_ptr->options_list_ptr); } From bc636c0621f0a895e62b6dc23ecd7a261f18ed7e Mon Sep 17 00:00:00 2001 From: Antti Kauppila Date: Thu, 15 Sep 2016 10:42:29 +0300 Subject: [PATCH 124/154] mbed-client-c version updated --- module.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module.json b/module.json index 1491beb176..5dc629ed8c 100644 --- a/module.json +++ b/module.json @@ -19,7 +19,7 @@ ], "dependencies": { "nanostack-libservice": "^3.0.0", - "mbed-client-c": "^2.0.0", + "mbed-client-c": "^3.0.0", "sal-stack-nanostack": "^5.0.0", "mbedtls": "^2.0.0" }, From 4769b274ece0989cc43de614171bd20cca0b0a27 Mon Sep 17 00:00:00 2001 From: Antti Kauppila Date: Thu, 15 Sep 2016 15:18:55 +0300 Subject: [PATCH 125/154] version v4.0.2 --- module.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module.json b/module.json index 5dc629ed8c..952b5ff558 100644 --- a/module.json +++ b/module.json @@ -1,6 +1,6 @@ { "name": "coap-service", - "version": "4.0.1", + "version": "4.0.2", "description": "CoAP Service library", "keywords": [ "coap", From 0fcd1d4254ca30c2d96ef51a5df513912b5fb133 Mon Sep 17 00:00:00 2001 From: Antti Kauppila Date: Thu, 15 Sep 2016 15:21:03 +0300 Subject: [PATCH 126/154] version v4.0.3 --- module.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module.json b/module.json index 952b5ff558..06a5aa0e15 100644 --- a/module.json +++ b/module.json @@ -1,6 +1,6 @@ { "name": "coap-service", - "version": "4.0.2", + "version": "4.0.3", "description": "CoAP Service library", "keywords": [ "coap", From 301458ae8ddd5a730b55751aca0ed8df31dd136a Mon Sep 17 00:00:00 2001 From: Arto Kinnunen Date: Mon, 19 Sep 2016 11:21:32 +0300 Subject: [PATCH 127/154] Add mbedtls flag to SSL server spesific function (#33) Flag function mbedtls_ssl_conf_dtls_cookies with MBEDTLS_SSL_SRV_C to enable SSL server disabling that can save flash ~3,2kB. --- source/coap_security_handler.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/source/coap_security_handler.c b/source/coap_security_handler.c index b235bea406..a33b50a5cc 100644 --- a/source/coap_security_handler.c +++ b/source/coap_security_handler.c @@ -321,10 +321,11 @@ int coap_security_handler_connect(coap_security_t *sec, bool is_server, SecureSo return -1; } - //TODO: Only needed for server type? +#ifdef MBEDTLS_SSL_SRV_C mbedtls_ssl_conf_dtls_cookies(&sec->_conf, simple_cookie_write, simple_cookie_check, &sec->_cookie); +#endif sec->_is_started = true; @@ -416,10 +417,11 @@ int coap_security_handler_connect_non_blocking(coap_security_t *sec, bool is_ser return -1; } - //Only needed for server type? +#ifdef MBEDTLS_SSL_SRV_C mbedtls_ssl_conf_dtls_cookies(&sec->_conf, simple_cookie_write, simple_cookie_check, &sec->_cookie); +#endif mbedtls_ssl_conf_min_version(&sec->_conf, MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MAJOR_VERSION_3); mbedtls_ssl_conf_max_version(&sec->_conf, MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MAJOR_VERSION_3); From 0e4af1a4d216f8621e662ede6d75a5589ac16778 Mon Sep 17 00:00:00 2001 From: Tero Heinonen Date: Tue, 4 Oct 2016 09:42:29 +0300 Subject: [PATCH 128/154] Send 4.04 if URI is not found (#34) If coap service library receives confirmable request to URI that is not registered, it must send response COAP_MSG_CODE_RESPONSE_NOT_FOUND. --- source/coap_message_handler.c | 10 +++++----- source/coap_service_api.c | 20 +++++++++++++++++--- source/include/coap_service_api_internal.h | 2 ++ 3 files changed, 24 insertions(+), 8 deletions(-) diff --git a/source/coap_message_handler.c b/source/coap_message_handler.c index 843fd10b1d..ca0288c671 100644 --- a/source/coap_message_handler.c +++ b/source/coap_message_handler.c @@ -4,6 +4,7 @@ #include #include "nsdynmemLIB.h" +#include "coap_service_api_internal.h" #include "coap_message_handler.h" #include "sn_coap_protocol.h" #include "ns_types.h" @@ -202,13 +203,11 @@ int16_t coap_message_handler_coap_msg_process(coap_msg_handler_t *handle, int8_t sn_coap_parser_release_allocated_coap_msg_mem(handle->coap, coap_message); return -1; } + /* Request received */ if (coap_message->msg_code > 0 && coap_message->msg_code < 32) { - - //TODO Sorry - coap_transaction_t *transaction_ptr = transaction_create(); if (transaction_ptr) { - + transaction_ptr->service_id = coap_service_id_find_by_socket(socket_id); transaction_ptr->msg_id = coap_message->msg_id; transaction_ptr->client_request = false;// this is server transaction memcpy(transaction_ptr->remote_address, source_addr_ptr, 16); @@ -224,8 +223,8 @@ int16_t coap_message_handler_coap_msg_process(coap_msg_handler_t *handle, int8_t }else{ //TODO: handle error case } + /* Response received */ } else { - //response find by MSG id coap_transaction_t *this = NULL; if( coap_message->token_ptr ){ this = transaction_find_client_by_token(coap_message->token_ptr); @@ -242,6 +241,7 @@ int16_t coap_message_handler_coap_msg_process(coap_msg_handler_t *handle, int8_t sn_coap_parser_release_allocated_coap_msg_mem(handle->coap, coap_message); transaction_delete(this); } + return 0; } diff --git a/source/coap_service_api.c b/source/coap_service_api.c index ed5063ac4e..b682974bdf 100644 --- a/source/coap_service_api.c +++ b/source/coap_service_api.c @@ -21,6 +21,7 @@ #include "coap_connection_handler.h" #include "net_interface.h" #include "coap_service_api_internal.h" +#include "coap_message_handler.h" static int16_t coap_service_coap_msg_process(int8_t socket_id, uint8_t source_addr_ptr[static 16], uint16_t port, uint8_t *data_ptr, uint16_t data_len); static int16_t coap_msg_process_callback(int8_t socket_id, sn_coap_hdr_s *coap_message, coap_transaction_t *transaction_ptr); @@ -130,7 +131,7 @@ static uint8_t coap_tx_function(uint8_t *data_ptr, uint16_t data_len, sn_nsdl_ad return -1; } - tr_debug("Service %d, CoAP TX Function", transaction_ptr->service_id); + tr_debug("Service %d, CoAP TX Function - mid: %d", transaction_ptr->service_id, common_read_16_bit(data_ptr + 2)); this = service_find(transaction_ptr->service_id); if (!this) { @@ -176,10 +177,16 @@ static int16_t coap_msg_process_callback(int8_t socket_id, sn_coap_hdr_s *coap_m if( !coap_message ){ return -1; } - // Message is request find correct handle + + // Message is request, find correct handle this = service_find_by_uri(socket_id, coap_message->uri_path_ptr, coap_message->uri_path_len); if (!this) { - tr_warn("not registered uri %.*s", coap_message->uri_path_len, coap_message->uri_path_ptr); + tr_debug("not registered uri %.*s", coap_message->uri_path_len, coap_message->uri_path_ptr); + if (coap_message->msg_type == COAP_MSG_TYPE_CONFIRMABLE) { + coap_message_handler_response_send(coap_service_handle, transaction_ptr->service_id, COAP_SERVICE_OPTIONS_NONE, coap_message, + COAP_MSG_CODE_RESPONSE_NOT_FOUND, COAP_CT_NONE, NULL, 0); + return 0; + } return -1; } @@ -471,3 +478,10 @@ uint32_t coap_service_get_internal_timer_ticks(void) { return coap_ticks; } + +uint16_t coap_service_id_find_by_socket(int8_t socket_id) +{ + coap_service_t *this = service_find_by_socket(socket_id); + + return this ? this->service_id:0; +} diff --git a/source/include/coap_service_api_internal.h b/source/include/coap_service_api_internal.h index bface30bf5..76275a7ce1 100644 --- a/source/include/coap_service_api_internal.h +++ b/source/include/coap_service_api_internal.h @@ -22,4 +22,6 @@ uint32_t coap_service_get_internal_timer_ticks(void); +uint16_t coap_service_id_find_by_socket(int8_t socket_id); + #endif From 07d72229def927e4e469a47aa70834d219711be2 Mon Sep 17 00:00:00 2001 From: Tero Heinonen Date: Wed, 5 Oct 2016 09:38:47 +0300 Subject: [PATCH 129/154] Fix unittests (#35) Adding missing stubs, and added check for nullpointer to coap message process callback. --- source/coap_service_api.c | 2 +- .../unittest/coap_message_handler/Makefile | 1 + .../coap-service/unittest/coap_service_api/Makefile | 1 + .../unittest/stub/coap_service_api_stub.c | 5 +++++ .../unittest/stub/common_functions_stub.c | 13 +++++++++++++ 5 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 test/coap-service/unittest/stub/common_functions_stub.c diff --git a/source/coap_service_api.c b/source/coap_service_api.c index b682974bdf..c48e9deccb 100644 --- a/source/coap_service_api.c +++ b/source/coap_service_api.c @@ -174,7 +174,7 @@ static void service_event_handler(arm_event_s *event) static int16_t coap_msg_process_callback(int8_t socket_id, sn_coap_hdr_s *coap_message, coap_transaction_t *transaction_ptr) { coap_service_t *this; - if( !coap_message ){ + if (!coap_message || !transaction_ptr) { return -1; } diff --git a/test/coap-service/unittest/coap_message_handler/Makefile b/test/coap-service/unittest/coap_message_handler/Makefile index 40699d2700..4b9be7f780 100644 --- a/test/coap-service/unittest/coap_message_handler/Makefile +++ b/test/coap-service/unittest/coap_message_handler/Makefile @@ -17,6 +17,7 @@ TEST_SRC_FILES = \ ../stub/nsdynmemLIB_stub.c \ ../stub/ns_list_stub.c \ ../stub/randLIB_stub.c \ + ../stub/coap_service_api_stub.c include ../MakefileWorker.mk diff --git a/test/coap-service/unittest/coap_service_api/Makefile b/test/coap-service/unittest/coap_service_api/Makefile index fd04d6ac48..e0ba84a4fb 100644 --- a/test/coap-service/unittest/coap_service_api/Makefile +++ b/test/coap-service/unittest/coap_service_api/Makefile @@ -17,6 +17,7 @@ TEST_SRC_FILES = \ ../stub/eventOS_event_stub.c \ ../stub/coap_connection_handler_stub.c \ ../stub/coap_message_handler_stub.c \ + ../stub/common_functions_stub.c include ../MakefileWorker.mk diff --git a/test/coap-service/unittest/stub/coap_service_api_stub.c b/test/coap-service/unittest/stub/coap_service_api_stub.c index cdd1d2698d..45bba92764 100644 --- a/test/coap-service/unittest/stub/coap_service_api_stub.c +++ b/test/coap-service/unittest/stub/coap_service_api_stub.c @@ -62,3 +62,8 @@ uint32_t coap_service_get_internal_timer_ticks(void) { return 1; } + +uint16_t coap_service_id_find_by_socket(int8_t socket_id) +{ + return 1; +} diff --git a/test/coap-service/unittest/stub/common_functions_stub.c b/test/coap-service/unittest/stub/common_functions_stub.c new file mode 100644 index 0000000000..e984d79612 --- /dev/null +++ b/test/coap-service/unittest/stub/common_functions_stub.c @@ -0,0 +1,13 @@ +/* + * Copyright (c) 2016 ARM Limited. All rights reserved. + */ +#include +#include +#include + +#include "ns_types.h" + +uint16_t common_read_16_bit(const uint8_t data_buf[__static 2]) +{ + return 0; +} From b3419e058aa4fdba48fa23af98066ad7315beca5 Mon Sep 17 00:00:00 2001 From: Tero Heinonen Date: Tue, 11 Oct 2016 09:30:17 +0300 Subject: [PATCH 130/154] Fix session lost issue (#36) This fixes unstability issues. Still need to refactor coap_security_handler_read()-function to work as specified in mbedTLS documentation. This commit should be treated as a temporary fix. --- source/coap_connection_handler.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/source/coap_connection_handler.c b/source/coap_connection_handler.c index 96baa165ea..c1d51711e1 100644 --- a/source/coap_connection_handler.c +++ b/source/coap_connection_handler.c @@ -490,8 +490,11 @@ static void secure_recv_sckt_msg(void *cb_res) int len = 0; len = coap_security_handler_read(session->sec_handler, data, sock->data_len); if( len < 0 ){ + if (len != MBEDTLS_ERR_SSL_WANT_READ && len != MBEDTLS_ERR_SSL_WANT_WRITE && + len != MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE) { + secure_session_delete(session); + } ns_dyn_mem_free(data); - secure_session_delete( session ); }else{ if( sock->parent->_recv_cb ){ sock->parent->_recv_cb(sock->listen_socket, src_address.address, src_address.identifier, data, len); @@ -593,11 +596,14 @@ int coap_connection_handler_virtual_recv(coap_conn_handler_t *handler, uint8_t a int len = 0; len = coap_security_handler_read(session->sec_handler, data, sock->data_len); if( len < 0 ){ + if (len != MBEDTLS_ERR_SSL_WANT_READ && len != MBEDTLS_ERR_SSL_WANT_WRITE && + len != MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE) { + secure_session_delete(session); + } ns_dyn_mem_free(data); - secure_session_delete( session ); return 0; - }else{ - if( sock->parent->_recv_cb ){ + } else { + if (sock->parent->_recv_cb) { sock->parent->_recv_cb(sock->listen_socket, address, port, data, len); } ns_dyn_mem_free(data); From fce09a935bbf657def7096dc558a7856d19927b9 Mon Sep 17 00:00:00 2001 From: Kevin Bracey Date: Mon, 17 Oct 2016 09:20:26 +0100 Subject: [PATCH 131/154] Add local pseudo-RNG to randLIB Rather than using system rand(), provide our own pseudo-RNG. Generator used is "xoroshiro128+", which has 16 bytes of state and 2^128-1 period. Main advantage is that we can now seed with up to 128 bits of entropy, rather than the 32 bits srand() limited us to. We also can be assured of the quality of the algorithm. As the core generator is 64-bit, we now provide a get 64-bit function, and others are based on this. Incorporate Linux's /dev/urandom use into the main source file. --- mbed-client-randlib/platform/arm_hal_random.h | 4 + mbed-client-randlib/randLIB.h | 36 ++- source/randLIB.c | 282 ++++++++++-------- .../unittest/randlib/Makefile | 2 +- .../unittest/randlib/randlibtest.cpp | 5 + .../unittest/randlib/test_randlib.c | 108 ++++++- .../unittest/randlib/test_randlib.h | 2 + .../unittest/stubs/random_stub.c | 16 +- 8 files changed, 320 insertions(+), 135 deletions(-) diff --git a/mbed-client-randlib/platform/arm_hal_random.h b/mbed-client-randlib/platform/arm_hal_random.h index 744245c3da..337486dedd 100644 --- a/mbed-client-randlib/platform/arm_hal_random.h +++ b/mbed-client-randlib/platform/arm_hal_random.h @@ -25,6 +25,10 @@ extern "C" { extern void arm_random_module_init(void); /** * \brief Get random library seed value. + * + * This function should return as random a value as possible, using + * hardware sources. Repeated calls should return different values if + * at all possible. */ extern uint32_t arm_random_seed_get(void); #ifdef __cplusplus diff --git a/mbed-client-randlib/randLIB.h b/mbed-client-randlib/randLIB.h index 665b3deaf0..a58af013c8 100644 --- a/mbed-client-randlib/randLIB.h +++ b/mbed-client-randlib/randLIB.h @@ -48,11 +48,23 @@ extern "C" { /** * \brief Init seed for Pseudo Random. * + * Makes call(s) to the platform's arm_random_seed_get() to seed the + * pseudo-random generator. + * * \return None * */ extern void randLIB_seed_random(void); +/** + * \brief Update seed for pseudo-random generator + * + * Adds seed information to existing generator, to perturb the + * sequence. + * \param seed 64 bits of data to add to the seed. + */ +extern void randLIB_add_seed(uint64_t seed); + /** * \brief Generate 8-bit random number. * @@ -75,21 +87,29 @@ extern uint16_t randLIB_get_16bit(void); * \brief Generate 32-bit random number. * * \param None - * \return 16-bit random number + * \return 32-bit random number * */ extern uint32_t randLIB_get_32bit(void); +/** + * \brief Generate 64-bit random number. + * + * \param None + * \return 64-bit random number + * + */ +extern uint64_t randLIB_get_64bit(void); + /** * \brief Generate n-bytes random numbers. * * \param data_ptr pointer where random will be stored - * \param eight_bit_boundary how many bytes need random - * \return 0 process valid - * \return -1 Unsupported Parameters + * \param count how many bytes need random * + * \return data_ptr */ -extern int8_t randLIB_get_n_bytes_random(uint8_t *data_ptr, uint8_t eight_bit_boundary); +extern void *randLIB_get_n_bytes_random(void *data_ptr, uint8_t count); /** * \brief Generate a random number within a range. @@ -117,6 +137,12 @@ uint16_t randLIB_get_random_in_range(uint16_t min, uint16_t max); */ uint32_t randLIB_randomise_base(uint32_t base, uint16_t min_factor, uint16_t max_factor); +#ifdef RANDLIB_PRNG +/* \internal Reset the PRNG state to zero (invalid) */ +void randLIB_reset(void); +#endif + + #ifdef __cplusplus } #endif diff --git a/source/randLIB.c b/source/randLIB.c index 9767a8dae0..34901c51ae 100644 --- a/source/randLIB.c +++ b/source/randLIB.c @@ -14,125 +14,171 @@ * limitations under the License. */ #include -#include -#include #include #include "randLIB.h" #include "platform/arm_hal_random.h" -#if ((RAND_MAX+1) & RAND_MAX) != 0 -#error "RAND_MAX isn't 2^n-1 :(" -#endif - /** - * This library is made for getting random numbers for Timing needs in protocols. + * This library is made for getting random numbers for timing needs in + * protocols, plus to generate dynamic ports, random IDs etc. * * **not safe to use for security or cryptographic operations.** * + * Base implementation is a pseudo-RNG, but may also use a system RNG. + * Replay of sequence by reseeding is not possible. + * + * Base pseudo-RNG is the xoroshiro128+ generator by Marsaglia, Blackman and + * Vigna: + * + * http://xoroshiro.di.unimi.it/ + * + * Certainly not the fastest for 32-bit or smaller platforms, but speed + * is not critical. None of the long operations in the core are actually hard, + * unlike the divisions and multiplies in the utility functions below, where we + * do try to keep the operations narrow. */ +/* On some platforms, read from a system RNG, rather than use our own */ +/* RANDLIB_PRNG disables this and forces use of the PRNG (useful for test only?) */ +#ifndef RANDLIB_PRNG +#ifdef __linux +#define RANDOM_DEVICE "/dev/urandom" +#endif +#endif // RANDLIB_PRNG + +/* RAM usage - 16 bytes of state (or a FILE * pointer and underlying FILE, which + * will include a buffer) */ +#ifdef RANDOM_DEVICE +#include +static FILE *random_file; +#else +static uint64_t state[2]; +#endif + +#ifdef RANDLIB_PRNG +void randLIB_reset(void) +{ + state[0] = 0; + state[1] = 0; +} +#endif + +#ifndef RANDOM_DEVICE +static inline uint64_t rol(uint64_t n, int bits) +{ + return (n << bits) | (n >> (64 - bits)); +} + +/* Lower-quality generator used only for initial seeding, if platform + * isn't returning multiple seeds itself. Multiplies are rather heavy + * for lower-end platforms, but this is initialisation only. + */ +static uint64_t splitmix64(uint64_t *seed) +{ + uint64_t z = (*seed += UINT64_C(0x9E3779B97F4A7C15)); + z = (z ^ (z >> 30)) * UINT64_C(0xBF58476D1CE4E5B9); + z = (z ^ (z >> 27)) * UINT64_C(0x94D049BB133111EB); + return z ^ (z >> 31); +} +#endif -/** - * \brief Init seed for Pseudo Random. - * - * \return None - * - */ void randLIB_seed_random(void) { - uint32_t rand_seed; +#ifdef RANDOM_DEVICE + if (!random_file) { + random_file = fopen(RANDOM_DEVICE, "rb"); + } +#else arm_random_module_init(); - rand_seed = arm_random_seed_get(); - srand(rand_seed); + + /* We exclusive-OR with the current state, in case they make this call + * multiple times. We don't want to potentially lose entropy. + */ + + /* Spell out expressions so we get known ordering of 4 seed calls */ + uint64_t s = (uint64_t) arm_random_seed_get() << 32; + state[0] ^= ( s | arm_random_seed_get()); + + s = (uint64_t) arm_random_seed_get() << 32; + state[1] ^= s | arm_random_seed_get(); + + /* This check serves to both to stir the state if the platform is returning + * constant seeding values, and to avoid the illegal all-zero state. + */ + if (state[0] == state[1]) { + uint64_t seed = state[0]; + state[0] = splitmix64(&seed); + state[1] = splitmix64(&seed); + } +#endif +} + +void randLIB_add_seed(uint64_t seed) +{ +#ifndef RANDOM_DEVICE + state[1] += seed; +#endif } -/** - * \brief Generate 8-bit random number. - * - * \param None - * \return 8-bit random number - * - */ uint8_t randLIB_get_8bit(void) { - return rand(); + uint64_t r = randLIB_get_64bit(); + return (uint8_t) (r >> 56); } -/** - * \brief Generate 16-bit random number. - * - * \param None - * \return 16-bit random number - * - */ uint16_t randLIB_get_16bit(void) { - uint16_t ret_val; - - ret_val = rand(); -#if RAND_MAX == 0x7FFF - ret_val |= (uint16_t) rand() << 15; -#endif - - return ret_val; + uint64_t r = randLIB_get_64bit(); + return (uint16_t) (r >> 48); } -/** - * \brief Generate 32-bit random number. - * - * \param None - * \return 32-bit random number - * - */ + uint32_t randLIB_get_32bit(void) { - uint32_t ret_val; - - ret_val = rand(); -#if RAND_MAX == 0x7FFF - ret_val |= (uint32_t) rand() << 15; - ret_val |= (uint32_t) rand() << 30; -#elif RAND_MAX == 0x3FFFFFFF /* IAR */ - ret_val |= (uint32_t) rand() << 30; -#elif RAND_MAX == 0x7FFFFFFF - ret_val |= (uint32_t) rand() << 31; -#else -#error "randLIB_get_32bit - odd RAND_MAX" -#endif - - return ret_val; + uint64_t r = randLIB_get_64bit(); + return (uint32_t) (r >> 32); } -/** - * \brief Generate n-bytes random numbers. - * - * \param data_ptr pointer where random will be stored - * \param eight_bit_boundary how many bytes need random - * \return 0 process valid - * \return -1 Unsupported Parameters - * - */ -int8_t randLIB_get_n_bytes_random(uint8_t *data_ptr, uint8_t eight_bit_boundary) +uint64_t randLIB_get_64bit(void) { - if ((data_ptr == 0) || (eight_bit_boundary == 0)) { - return -1; +#ifdef RANDOM_DEVICE + if (!random_file) { + return 0; } + uint64_t result; + if (fread(&result, 1, sizeof result, random_file) != 1) { + result = 0; + } + return result; +#else + const uint64_t s0 = state[0]; + uint64_t s1 = state[1]; + const uint64_t result = s0 + s1; - while (eight_bit_boundary) { - *data_ptr++ = randLIB_get_8bit(); - eight_bit_boundary--; - } - return 0; + s1 ^= s0; + state[0] = rol(s0, 55) ^ s1 ^ (s1 << 14); + state[1] = rol(s1, 36); + + return result; +#endif +} + +void *randLIB_get_n_bytes_random(void *ptr, uint8_t count) +{ + uint8_t *data_ptr = ptr; + uint64_t r = 0; + for (uint_fast8_t i = 0; i < count; i++) { + /* Take 8 bytes at a time */ + if (i % 8 == 0) { + r = randLIB_get_64bit(); + } else { + r >>= 8; + } + data_ptr[i] = (uint8_t) r; + } + return data_ptr; } -/** - * \brief Generate a random number within a range. - * - * The result is linearly distributed in the range [min..max], inclusive. - * - * \param min minimum value that can be generated - * \param max maximum value that can be generated - */ uint16_t randLIB_get_random_in_range(uint16_t min, uint16_t max) { /* This special case is potentially common, particularly in this routine's @@ -141,46 +187,52 @@ uint16_t randLIB_get_random_in_range(uint16_t min, uint16_t max) return min; } +#if UINT_MAX >= 0xFFFFFFFF + const unsigned int rand_max = 0xFFFFFFFFu; // will use rand32 +#else + const unsigned int rand_max = 0xFFFFu; // will use rand16 + /* 16-bit arithmetic below fails in this extreme case; we can optimise it */ if (max - min == 0xFFFF) { return randLIB_get_16bit(); } +#endif - /* We get RAND_MAX+1 values from rand() in the range [0..RAND_MAX], and + /* We get rand_max values from rand16 or 32() in the range [0..rand_max-1], and * need to divvy them up into the number of values we need. And reroll any * odd values off the end as we insist every value having equal chance. * - * Special handling for systems where RAND_MAX is 0x7FFF; we use our - * randLIB_get_16bit() and have to be a bit more careful about - * unsigned integer overflow. (On other systems rand() returns int, - * so we can't overflow if we use unsigned int). + * Using the range [0..rand_max-1] saves long division on the band + * calculation - it means rand_max ends up always being rerolled. * - * Eg, range(1,3), RAND_MAX = 0x7FFFFFFF: - * We have 3 bands of size 0x2AAAAAAA (0x80000000/3). + * Eg, range(1,2), rand_max = 0xFFFF: + * We have 2 bands of size 0x7FFF (0xFFFF/2). * - * We roll: 0x00000000..0x2AAAAAAA9 -> 1 - * 0x2AAAAAAA..0x555555553 -> 2 - * 0x55555554..0x7FFFFFFFD -> 3 - * 0x7FFFFFFE..0x7FFFFFFFF -> reroll + * We roll: 0x0000..0x7FFE -> 1 + * 0x7FFF..0xFFFD -> 2 + * 0xFFFE..0xFFFF -> reroll + * (calculating band size as 0x10000/2 would have avoided the reroll cases) + * + * Eg, range(1,3), rand_max = 0xFFFFFFFF: + * We have 3 bands of size 0x55555555 (0xFFFFFFFF/3). + * + * We roll: 0x00000000..0x555555554 -> 1 + * 0x55555555..0xAAAAAAAA9 -> 2 + * 0xAAAAAAAA..0xFFFFFFFFE -> 3 + * 0xFFFFFFFF -> reroll * * (Bias problem clearly pretty insignificant there, but gets worse as * range increases). */ - unsigned int values_needed = max + 1 - min; -#if RAND_MAX > 0xFFFF - unsigned int band_size = (RAND_MAX + 1u) / values_needed; -#elif UINT_MAX > 0xFFFF - unsigned int band_size = 0x10000u / values_needed; -#else + const unsigned int values_needed = max + 1 - min; /* Avoid the need for long division, at the expense of fractionally * increasing reroll chance. */ - unsigned int band_size = 0xFFFFu / values_needed; -#endif - unsigned int top_of_bands = band_size * values_needed; + const unsigned int band_size = rand_max / values_needed; + const unsigned int top_of_bands = band_size * values_needed; unsigned int result; do { -#if RAND_MAX > 0xFFFF - result = rand(); +#if UINT_MAX > 0xFFFF + result = randLIB_get_32bit(); #else result = randLIB_get_16bit(); #endif @@ -189,20 +241,6 @@ uint16_t randLIB_get_random_in_range(uint16_t min, uint16_t max) return min + (uint16_t)(result / band_size); } -/** - * \brief Randomise a base 32-bit number by a jitter factor - * - * The result is linearly distributed in the jitter range, which is expressed - * as fixed-point unsigned 1.15 values. For example, to produce a number in the - * range [0.75 * base, 1.25 * base], set min_factor to 0x6000 and max_factor to - * 0xA000. - * - * Result is clamped to 0xFFFFFFFF if it overflows. - * - * \param base The base 32-bit value - * \param min_factor The minimum value for the random factor - * \param max_factor The maximum value for the random factor - */ uint32_t randLIB_randomise_base(uint32_t base, uint16_t min_factor, uint16_t max_factor) { uint16_t random_factor = randLIB_get_random_in_range(min_factor, max_factor); diff --git a/test/mbed-client-randlib/unittest/randlib/Makefile b/test/mbed-client-randlib/unittest/randlib/Makefile index e161b0165f..12d97840f6 100644 --- a/test/mbed-client-randlib/unittest/randlib/Makefile +++ b/test/mbed-client-randlib/unittest/randlib/Makefile @@ -14,5 +14,5 @@ TEST_SRC_FILES = \ include ../MakefileWorker.mk -CPPUTESTFLAGS += -DFEA_TRACE_SUPPORT +CPPUTESTFLAGS += -DFEA_TRACE_SUPPORT -DRANDLIB_PRNG diff --git a/test/mbed-client-randlib/unittest/randlib/randlibtest.cpp b/test/mbed-client-randlib/unittest/randlib/randlibtest.cpp index 79d2159684..67b3cb59a0 100644 --- a/test/mbed-client-randlib/unittest/randlib/randlibtest.cpp +++ b/test/mbed-client-randlib/unittest/randlib/randlibtest.cpp @@ -35,6 +35,11 @@ TEST(randLIB, test_randLIB_get_32bit) CHECK(test_randLIB_get_32bit()); } +TEST(randLIB, test_randLIB_get_64bit) +{ + CHECK(test_randLIB_get_64bit()); +} + TEST(randLIB, test_randLIB_get_n_bytes_random) { CHECK(test_randLIB_get_n_bytes_random()); diff --git a/test/mbed-client-randlib/unittest/randlib/test_randlib.c b/test/mbed-client-randlib/unittest/randlib/test_randlib.c index a8187d8262..0fc3138a12 100644 --- a/test/mbed-client-randlib/unittest/randlib/test_randlib.c +++ b/test/mbed-client-randlib/unittest/randlib/test_randlib.c @@ -8,12 +8,14 @@ bool test_randLIB_seed_random() { + randLIB_reset(); randLIB_seed_random(); return true; } bool test_randLIB_get_8bit() { + randLIB_reset(); randLIB_seed_random(); uint8_t test = randLIB_get_8bit(); if( test == 0 ) { @@ -27,6 +29,7 @@ bool test_randLIB_get_8bit() bool test_randLIB_get_16bit() { + randLIB_reset(); randLIB_seed_random(); uint16_t test = randLIB_get_16bit(); if( test == 0 ) { @@ -40,6 +43,7 @@ bool test_randLIB_get_16bit() bool test_randLIB_get_32bit() { + randLIB_reset(); randLIB_seed_random(); uint32_t test = randLIB_get_32bit(); if( test == 0 ) { @@ -51,23 +55,114 @@ bool test_randLIB_get_32bit() return true; } +static bool test_output(uint32_t seed, bool seed_inc, const uint64_t expected[8]) +{ + random_stub_set_seed(seed, seed_inc); + randLIB_reset(); + randLIB_seed_random(); + for (int i = 0; i < 8; i++) { + if (randLIB_get_64bit() != expected[i]) { + return false; + } + } + + return true; +} + +bool test_randLIB_get_64bit() +{ + /* Initial 8 xoroshiro128+ values with initial seed of + * (0x0000000100000002, 0x00000003000000004). + */ + static const uint64_t expected1234[] = { + UINT64_C(0x0000000400000006), + UINT64_C(0x0100806200818026), + UINT64_C(0x2a30826271904706), + UINT64_C(0x918d7ea50109290d), + UINT64_C(0x5dcbd701c1e1c64c), + UINT64_C(0xaa129b152055f299), + UINT64_C(0x4c95c2b1e1038a4d), + UINT64_C(0x6479e7a3a75d865a) + }; + + if (!test_output(1, true, expected1234)) { + goto fail; + } + + /* If passed all zero seeds, seeding should detect this + * and use splitmix64 to create the actual seed + * (0xe220a8397b1dcdaf, 0x6e789e6aa1b965f4), + * and produce this output: + */ + static const uint64_t expected0000[] = { + UINT64_C(0x509946a41cd733a3), + UINT64_C(0x00885667b1934bfa), + UINT64_C(0x1061f9ad258fd5d5), + UINT64_C(0x3f8be44897a4317c), + UINT64_C(0x60da683bea50e6ab), + UINT64_C(0xd6b52f5379de1de0), + UINT64_C(0x2608bc9fedc5b750), + UINT64_C(0xb9fac9c7ec9de02a) + }; + + if (!test_output(0, false, expected0000)) { + goto fail; + } + + /* If passed all "4" seeds, seeding should detect this + * and use splitmix64 to create the actual seed + * (0x03910b0aab9b37e5, 0x0b309ab13d42b2a6), + * and produce this output: + */ + static const uint64_t expected4444[] = { + UINT64_C(0x0ec1a5bbe8ddea8b), + UINT64_C(0x0be710b8fcf5a491), + UINT64_C(0xb21127f7159348b4), + UINT64_C(0xdf31900d21f92182), + UINT64_C(0xd5a797507d94daa9), + UINT64_C(0x66a1c5a4fb04be3d), + UINT64_C(0x259e5385f48353be), + UINT64_C(0x5d3e3286cd4eae19) + }; + + if (!test_output(4, false, expected4444)) { + goto fail; + } + + /* Last test used constant seed of 4, which is the default */ + return true; + +fail: + /* Put back the default seed of 4 (other tests might rely on it) */ + random_stub_set_seed(4, false); + return false; +} + bool test_randLIB_get_n_bytes_random() { - int8_t ret = randLIB_get_n_bytes_random(NULL, 0); - if( ret != -1){ + randLIB_reset(); + randLIB_seed_random(); + + uint8_t dat[5]; + void *ret = randLIB_get_n_bytes_random(dat, 5); + if(ret != dat){ return false; } - uint8_t dat[5]; - ret = randLIB_get_n_bytes_random(&dat, 5); - if( ret != 0){ + uint8_t dat2[5]; + randLIB_get_n_bytes_random(dat2, 5); + if (memcmp(dat, dat2, 5) == 0) { return false; } + return true; } bool test_randLIB_get_random_in_range() { + randLIB_reset(); + randLIB_seed_random(); + uint16_t ret = randLIB_get_random_in_range(2, 2); if( ret != 2 ){ return false; @@ -85,6 +180,9 @@ bool test_randLIB_get_random_in_range() bool test_randLIB_randomise_base() { + randLIB_reset(); + randLIB_seed_random(); + uint32_t ret = randLIB_randomise_base(0,0,0); if( ret ){ return false; diff --git a/test/mbed-client-randlib/unittest/randlib/test_randlib.h b/test/mbed-client-randlib/unittest/randlib/test_randlib.h index f83d7d60fe..a1949e6d05 100644 --- a/test/mbed-client-randlib/unittest/randlib/test_randlib.h +++ b/test/mbed-client-randlib/unittest/randlib/test_randlib.h @@ -18,6 +18,8 @@ bool test_randLIB_get_16bit(); bool test_randLIB_get_32bit(); +bool test_randLIB_get_64bit(); + bool test_randLIB_get_n_bytes_random(); bool test_randLIB_get_random_in_range(); diff --git a/test/mbed-client-randlib/unittest/stubs/random_stub.c b/test/mbed-client-randlib/unittest/stubs/random_stub.c index 773bb07d69..f480385da8 100644 --- a/test/mbed-client-randlib/unittest/stubs/random_stub.c +++ b/test/mbed-client-randlib/unittest/stubs/random_stub.c @@ -1,8 +1,10 @@ /* * Copyright (c) 2016, ARM Limited, All Rights Reserved */ -#include "inttypes.h" +#include "random_stub.h" +static uint32_t seed_value = 4; +static bool seed_inc = false; void arm_random_module_init(void) { @@ -11,5 +13,15 @@ void arm_random_module_init(void) uint32_t arm_random_seed_get(void) { - return 4; + uint32_t result = seed_value; + if (seed_inc) { + ++seed_value; + } + return result; +} + +void random_stub_set_seed(uint32_t value, bool increment) +{ + seed_value = value; + seed_inc = increment; } From 4691a58a4cc9d32d967c70d7bf2957d4027e922d Mon Sep 17 00:00:00 2001 From: Kevin Bracey Date: Mon, 17 Oct 2016 09:23:18 +0100 Subject: [PATCH 132/154] Remove separate Linux implementation Linux /dev/urandom implementation now folded into main file. Main file can be forced to use own pseudo-RNG by defining RANDLIB_PRNG - used for unit tests, and could maybe also be used on simulator. --- Makefile | 11 -- linux/randLIB.c | 168 ------------------ .../unittest/randlib_linux/Makefile | 20 --- .../unittest/randlib_linux/main.cpp | 14 -- .../unittest/randlib_linux/randlibtest.cpp | 69 ------- 5 files changed, 282 deletions(-) delete mode 100644 linux/randLIB.c delete mode 100644 test/mbed-client-randlib/unittest/randlib_linux/Makefile delete mode 100644 test/mbed-client-randlib/unittest/randlib_linux/main.cpp delete mode 100644 test/mbed-client-randlib/unittest/randlib_linux/randlibtest.cpp diff --git a/Makefile b/Makefile index ddfb89a003..9a40f3cd68 100644 --- a/Makefile +++ b/Makefile @@ -1,15 +1,4 @@ - -# Check if we are compiling for Linux using GCC -ifneq (,$(findstring gcc,$(CC))) -TARGET_IS_LINUX := $(shell $(CC) -dM -E - < /dev/null | grep __linux >/dev/null && echo "yes" || echo "no") -endif - -ifeq (yes,$(TARGET_IS_LINUX)) -SRCS := $(wildcard linux/*) -else SRCS := $(wildcard source/*) -endif - LIB := librand.a EXPORT_HEADERS := mbed-client-randlib diff --git a/linux/randLIB.c b/linux/randLIB.c deleted file mode 100644 index 654d9e7f82..0000000000 --- a/linux/randLIB.c +++ /dev/null @@ -1,168 +0,0 @@ -/* - * Copyright (c) 2014-2015 ARM Limited. All rights reserved. - * SPDX-License-Identifier: Apache-2.0 - * 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 -#include -#include -#include -#include -#include -#include "randLIB.h" - -/** - * \brief Init seed for Pseudo Random. - * On a Linux, this does nothing. - * - * \return None - * - */ -void randLIB_seed_random(void) -{ -} - -/** - * \brief Generate 8-bit random number. - * - * \param None - * \return 8-bit random number - * - */ -uint8_t randLIB_get_8bit(void) -{ - uint8_t ret_val; - randLIB_get_n_bytes_random(&ret_val, 1); - return ret_val; -} - -/** - * \brief Generate 16-bit random number. - * - * \param None - * \return 16-bit random number - * - */ -uint16_t randLIB_get_16bit(void) -{ - uint16_t ret_val; - - randLIB_get_n_bytes_random((uint8_t*)&ret_val, 2); - return ret_val; -} -/** - * \brief Generate 32-bit random number. - * - * \param None - * \return 32-bit random number - * - */ -uint32_t randLIB_get_32bit(void) -{ - uint32_t ret_val; - randLIB_get_n_bytes_random((uint8_t*)&ret_val, 4); - return ret_val; -} - - -/** - * \brief Generate n-bytes random numbers. - * - * \param data_ptr pointer where random will be stored - * \param eight_bit_boundary how many bytes need random - * \return 0 process valid - * \return -1 Unsupported Parameters or failed to get random data. - * - */ -int8_t randLIB_get_n_bytes_random(uint8_t *data_ptr, uint8_t eight_bit_boundary) -{ - if ((data_ptr == 0) || (eight_bit_boundary == 0)) { - return -1; - } - - int fd = open("/dev/urandom", O_RDONLY); - if (fd != -1) { - size_t len = read(fd, data_ptr, eight_bit_boundary); - close(fd); - if (len == eight_bit_boundary) - return 0; - } - - return -1; -} - -/** - * \brief Generate a random number within a range. - * - * The result is linearly distributed in the range [min..max], inclusive. - * - * \param min minimum value that can be generated - * \param max maximum value that can be generated - */ -uint16_t randLIB_get_random_in_range(uint16_t min, uint16_t max) -{ - /* This special case is potentially common, particularly in this routine's - * first user (Trickle), so worth catching immediately */ - if (min == max) { - return min; - } - - /* 16-bit arithmetic below fails in this extreme case; we can optimise it */ - if (max - min == 0xFFFF) { - return randLIB_get_16bit(); - } - - unsigned int values_needed = max + 1 - min; - unsigned int band_size = 0x10000u / values_needed; - unsigned int top_of_bands = band_size * values_needed; - unsigned int result; - do { - result = randLIB_get_16bit(); - } while (result >= top_of_bands); - - return min + (uint16_t)(result / band_size); -} - -/** - * \brief Randomise a base 32-bit number by a jitter factor - * - * The result is linearly distributed in the jitter range, which is expressed - * as fixed-point unsigned 1.15 values. For example, to produce a number in the - * range [0.75 * base, 1.25 * base], set min_factor to 0x6000 and max_factor to - * 0xA000. - * - * Result is clamped to 0xFFFFFFFF if it overflows. - * - * \param base The base 32-bit value - * \param min_factor The minimum value for the random factor - * \param max_factor The maximum value for the random factor - */ -uint32_t randLIB_randomise_base(uint32_t base, uint16_t min_factor, uint16_t max_factor) -{ - uint16_t random_factor = randLIB_get_random_in_range(min_factor, max_factor); - - /* 32x16-bit long multiplication, to get 48-bit result */ - uint32_t hi = (base >> 16) * random_factor; - uint32_t lo = (base & 0xFFFF) * random_factor; - /* Add halves, and take top 32 bits of 48-bit result */ - uint32_t res = hi + (lo >> 16); - - /* Randomisation factor is *2^15, so need to shift up 1 more bit, avoiding overflow */ - if (res & 0x80000000) { - res = 0xFFFFFFFF; - } else { - res = (res << 1) | ((lo >> 15) & 1); - } - - return res; -} diff --git a/test/mbed-client-randlib/unittest/randlib_linux/Makefile b/test/mbed-client-randlib/unittest/randlib_linux/Makefile deleted file mode 100644 index e0af3a8615..0000000000 --- a/test/mbed-client-randlib/unittest/randlib_linux/Makefile +++ /dev/null @@ -1,20 +0,0 @@ -include ../makefile_defines.txt - -COMPONENT_NAME = randLIB_linux_unit - -#This must be changed manually -SRC_FILES = \ - ../../../../linux/randLIB.c - -TEST_SRC_FILES = \ - main.cpp \ - randlibtest.cpp \ - ../randlib/test_randlib.c \ - ../stubs/random_stub.c \ - ../stubs/open_stub.c \ - -include ../MakefileWorker.mk - -CPPUTESTFLAGS += -DFEA_TRACE_SUPPORT - -CPPUTEST_LDFLAGS = -Wl,--wrap,open diff --git a/test/mbed-client-randlib/unittest/randlib_linux/main.cpp b/test/mbed-client-randlib/unittest/randlib_linux/main.cpp deleted file mode 100644 index 25a4c3b6d0..0000000000 --- a/test/mbed-client-randlib/unittest/randlib_linux/main.cpp +++ /dev/null @@ -1,14 +0,0 @@ -/* - * Copyright (c) 2015 ARM. All rights reserved. - */ - -#include "CppUTest/CommandLineTestRunner.h" -#include "CppUTest/TestPlugin.h" -#include "CppUTest/TestRegistry.h" -#include "CppUTestExt/MockSupportPlugin.h" -int main(int ac, char** av) -{ - return CommandLineTestRunner::RunAllTests(ac, av); -} - -IMPORT_TEST_GROUP(randLIB_linux); diff --git a/test/mbed-client-randlib/unittest/randlib_linux/randlibtest.cpp b/test/mbed-client-randlib/unittest/randlib_linux/randlibtest.cpp deleted file mode 100644 index b0a1399257..0000000000 --- a/test/mbed-client-randlib/unittest/randlib_linux/randlibtest.cpp +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Copyright (c) 2016 ARM. All rights reserved. - */ -#include "CppUTest/TestHarness.h" -#include "../randlib/test_randlib.h" -#include "randLIB.h" - -TEST_GROUP(randLIB_linux) -{ - void setup() - { - } - - void teardown() - { - } -}; - -extern bool allow_open; - -TEST(randLIB_linux, test_randLIB_seed_random) -{ - allow_open = true; - CHECK(test_randLIB_seed_random()); -} - -TEST(randLIB_linux, test_randLIB_get_8bit) -{ - allow_open = true; - CHECK(test_randLIB_get_8bit()); -} - -TEST(randLIB_linux, test_randLIB_get_16bit) -{ - allow_open = true; - CHECK(test_randLIB_get_16bit()); -} - -TEST(randLIB_linux, test_randLIB_get_32bit) -{ - allow_open = true; - CHECK(test_randLIB_get_32bit()); -} - -TEST(randLIB_linux, test_randLIB_get_n_bytes_random) -{ - allow_open = true; - CHECK(test_randLIB_get_n_bytes_random()); -} - -TEST(randLIB_linux, test_randLIB_get_random_in_range) -{ - allow_open = true; - CHECK(test_randLIB_get_random_in_range()); -} - -TEST(randLIB_linux, test_randLIB_randomise_base) -{ - allow_open = true; - CHECK(test_randLIB_randomise_base()); -} - -TEST(randLIB_linux, test_fail_to_open) -{ - uint8_t buf[4]; - allow_open = false; - CHECK(-1 == randLIB_get_n_bytes_random(buf, 4)); - allow_open = true; -} From 9c88fcd984fd4da166ec303cf7bd9005769a9f36 Mon Sep 17 00:00:00 2001 From: Tero Heinonen Date: Tue, 18 Oct 2016 11:55:54 +0300 Subject: [PATCH 133/154] Delete transactions that are not supposed to get reply (#37) * Delete transactions that are not supposed to get reply When sending non-confirmable request that is not supposed to get reply, it must be deleted after sending. Also some general code-cleaning included. * Remove outdated transactions from queue If transaction does not get response, it will be deleted from queue. --- source/coap_message_handler.c | 40 ++++++------------- source/coap_service_api.c | 16 +++----- source/include/coap_message_handler.h | 12 ++++-- .../unittest/stub/coap_message_handler_stub.c | 5 +++ 4 files changed, 33 insertions(+), 40 deletions(-) diff --git a/source/coap_message_handler.c b/source/coap_message_handler.c index ca0288c671..6c3dfd9893 100644 --- a/source/coap_message_handler.c +++ b/source/coap_message_handler.c @@ -74,12 +74,13 @@ static coap_transaction_t *transaction_create(void) if (this) { memset(this, 0, sizeof(coap_transaction_t)); this->client_request = true;// default to client initiated method + this->create_time = coap_service_get_internal_timer_ticks(); ns_list_add_to_start(&request_list, this); } return this; } -static void transaction_delete(coap_transaction_t *this) +void transaction_delete(coap_transaction_t *this) { if (this) { ns_list_remove(&request_list, this); @@ -111,8 +112,6 @@ static int8_t coap_rx_function(sn_coap_hdr_s *resp_ptr, sn_nsdl_addr_s *address_ return 0; } -static void coap_service_build_content_format(sn_coap_hdr_s *header, sn_coap_content_format_e format); - coap_msg_handler_t *coap_message_handler_init(void *(*used_malloc_func_ptr)(uint16_t), void (*used_free_func_ptr)(void *), uint8_t (*used_tx_callback_ptr)(uint8_t *, uint16_t, sn_nsdl_addr_s *, void *)){ @@ -280,7 +279,7 @@ uint16_t coap_message_handler_request_send(coap_msg_handler_t *handle, int8_t se request.msg_code = msg_code; request.uri_path_ptr = (uint8_t *)uri; request.uri_path_len = strlen(uri); - coap_service_build_content_format(&request, cont_type); + request.content_format = cont_type; do{ randLIB_get_n_bytes_random(token,4); @@ -310,7 +309,6 @@ uint16_t coap_message_handler_request_send(coap_msg_handler_t *handle, int8_t se return transaction_ptr->msg_id; } -//TODO: refactor this to use nsdl int8_t coap_message_handler_response_send(coap_msg_handler_t *handle, int8_t service_id, uint8_t options, sn_coap_hdr_s *request_ptr, sn_coap_msg_code_e message_code, sn_coap_content_format_e content_type, const uint8_t *payload_ptr, uint16_t payload_len) { coap_transaction_t *transaction_ptr; @@ -344,46 +342,34 @@ int8_t coap_message_handler_response_send(coap_msg_handler_t *handle, int8_t ser } response->payload_len = payload_len; response->payload_ptr = (uint8_t *) payload_ptr; // Cast away const and trust that nsdl doesn't modify... - coap_service_build_content_format(response, content_type); + response->content_format = content_type; data_len = sn_coap_builder_calc_needed_packet_data_size(response); data_ptr = own_alloc(data_len); if (data_len > 0 && !data_ptr) { sn_coap_parser_release_allocated_coap_msg_mem(handle->coap, response); - //TODO deallocate stuff i quess return -1; } sn_coap_protocol_build(handle->coap, &dst_addr, data_ptr, response, transaction_ptr); sn_coap_parser_release_allocated_coap_msg_mem(handle->coap, response); handle->sn_coap_tx_callback(data_ptr, data_len, &dst_addr, transaction_ptr); sn_coap_parser_release_allocated_coap_msg_mem(handle->coap, request_ptr); - transaction_delete(transaction_ptr); own_free(data_ptr); return 0; } int8_t coap_message_handler_exec(coap_msg_handler_t *handle, uint32_t current_time){ + if( !handle ){ return -1; } + + // Remove outdated transactions from queue + ns_list_foreach_safe(coap_transaction_t, transaction, &request_list) { + if ((transaction->create_time + TRANSACTION_LIFETIME) < current_time) { + transaction_delete(transaction); + } + } + return sn_coap_protocol_exec(handle->coap, current_time); } - -static void coap_service_build_content_format(sn_coap_hdr_s *header, sn_coap_content_format_e format) -{ - header->content_format = format; - -// if (format == COAP_CT_NONE) { -// return; -// } -// if (format == 0) { /* text/plain */ -// header->content_type_len = 0; -// } else if (format <= 0xff) { -// header->content_type_ptr[0] = format; -// header->content_type_len = 1; -// } else { -// header->content_type_ptr[0] = format >> 8; -// header->content_type_ptr[1] = format & 0xff; -// header->content_type_len = 2; -// } -} diff --git a/source/coap_service_api.c b/source/coap_service_api.c index c48e9deccb..8177a301ff 100644 --- a/source/coap_service_api.c +++ b/source/coap_service_api.c @@ -151,6 +151,8 @@ static uint8_t coap_tx_function(uint8_t *data_ptr, uint16_t data_len, sn_nsdl_ad } memcpy(transaction_ptr->data_ptr, data_ptr, data_len); transaction_ptr->data_len = data_len; + } else if (transaction_ptr->resp_cb == NULL ){ + transaction_delete(transaction_ptr); } return 0; @@ -191,7 +193,7 @@ static int16_t coap_msg_process_callback(int8_t socket_id, sn_coap_hdr_s *coap_m } uri_registration_t *uri_reg_ptr = uri_registration_find(this, coap_message->uri_path_ptr, coap_message->uri_path_len); - if (transaction_ptr && uri_reg_ptr && uri_reg_ptr->request_recv_cb) { + if (uri_reg_ptr && uri_reg_ptr->request_recv_cb) { tr_debug("Service %d, call request recv cb uri %.*s", this->service_id, coap_message->uri_path_len, coap_message->uri_path_ptr); if ((this->service_options & COAP_SERVICE_OPTIONS_SECURE_BYPASS) == COAP_SERVICE_OPTIONS_SECURE_BYPASS ) {//TODO Add secure bypass option @@ -240,13 +242,6 @@ static int send_cb(int8_t socket_id, uint8_t address[static 16], uint16_t port, return -1; } -//static void sec_conn_closed_cb(int8_t socket_id) -//{ -// coap_service_t *this = service_find_by_socket(socket_id); - -// tr_debug("Secure socket was closed by end device"); -//} - static void sec_done_cb(int8_t socket_id, uint8_t address[static 16], uint16_t port, uint8_t keyblock[static 40]) { //TODO: this is not enough if shared socket. Inform all! @@ -255,7 +250,6 @@ static void sec_done_cb(int8_t socket_id, uint8_t address[static 16], uint16_t p this->coap_security_done_cb(this->service_id, address, keyblock); } - //TODO refactor this away. There should be no transaction_ptr(s) before done_cb has been called //TODO: send all unsend transactions if more than 1 coap_transaction_t *transaction_ptr = coap_message_handler_find_transaction(address, port); if (transaction_ptr && transaction_ptr->data_ptr) { @@ -269,7 +263,9 @@ static void sec_done_cb(int8_t socket_id, uint8_t address[static 16], uint16_t p ns_dyn_mem_free(transaction_ptr->data_ptr); transaction_ptr->data_ptr = NULL; transaction_ptr->data_len = 0; - //TODO: who deletes transaction incase no response is required + if (transaction_ptr->resp_cb == NULL) { + transaction_delete(transaction_ptr); + } } } diff --git a/source/include/coap_message_handler.h b/source/include/coap_message_handler.h index 20a75d6cc7..7120762446 100644 --- a/source/include/coap_message_handler.h +++ b/source/include/coap_message_handler.h @@ -24,6 +24,8 @@ #include "sn_nsdl.h" #include "ns_list.h" +#define TRANSACTION_LIFETIME 180 + /** * \brief Service message response receive callback. * @@ -47,14 +49,16 @@ typedef struct coap_msg_handler_s { typedef struct coap_transaction { uint8_t remote_address[16]; - uint16_t remote_port; uint8_t token[4]; + uint32_t create_time; + uint16_t remote_port; uint16_t msg_id; + uint16_t data_len; int8_t service_id; uint8_t options; - bool client_request: 1; uint8_t *data_ptr; - uint16_t data_len; + bool client_request: 1; + coap_message_handler_response_recv *resp_cb; ns_list_link_t link; } coap_transaction_t; @@ -81,4 +85,6 @@ extern int8_t coap_message_handler_response_send(coap_msg_handler_t *handle, int extern int8_t coap_message_handler_exec(coap_msg_handler_t *handle, uint32_t current_time); +extern void transaction_delete(coap_transaction_t *this); + #endif diff --git a/test/coap-service/unittest/stub/coap_message_handler_stub.c b/test/coap-service/unittest/stub/coap_message_handler_stub.c index 68f2b66912..36ab9a8661 100644 --- a/test/coap-service/unittest/stub/coap_message_handler_stub.c +++ b/test/coap-service/unittest/stub/coap_message_handler_stub.c @@ -17,6 +17,11 @@ coap_msg_handler_t *coap_message_handler_init(void *(*used_malloc_func_ptr)(uint return coap_message_handler_stub.coap_ptr; } +void transaction_delete(coap_transaction_t *this) +{ + +} + int8_t coap_message_handler_destroy(coap_msg_handler_t *handle) { return coap_message_handler_stub.int8_value; From c1634ba5a0a7d50d855a2a2a85f5382de4e85cdf Mon Sep 17 00:00:00 2001 From: Kevin Bracey Date: Tue, 18 Oct 2016 12:07:00 +0100 Subject: [PATCH 134/154] Allow splitmix64 code to be avoided Potentially allow platforms with known-good seed generation to avoid the code overhead of splitmix64. Not actually activating, as I don't believe we have any such platforms yet... --- source/randLIB.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/source/randLIB.c b/source/randLIB.c index 34901c51ae..a6feca7a01 100644 --- a/source/randLIB.c +++ b/source/randLIB.c @@ -69,6 +69,7 @@ static inline uint64_t rol(uint64_t n, int bits) return (n << bits) | (n >> (64 - bits)); } +#ifndef RANDLIB_ASSUME_GOOD_SEED /* Lower-quality generator used only for initial seeding, if platform * isn't returning multiple seeds itself. Multiplies are rather heavy * for lower-end platforms, but this is initialisation only. @@ -80,7 +81,8 @@ static uint64_t splitmix64(uint64_t *seed) z = (z ^ (z >> 27)) * UINT64_C(0x94D049BB133111EB); return z ^ (z >> 31); } -#endif +#endif // RANDLIB_ASSUME_GOOD_SEED +#endif // RANDOM_DEVICE void randLIB_seed_random(void) { @@ -102,6 +104,14 @@ void randLIB_seed_random(void) s = (uint64_t) arm_random_seed_get() << 32; state[1] ^= s | arm_random_seed_get(); +#ifdef RANDLIB_ASSUME_GOOD_SEED + /* Can avoid significant code overhead of splitmix64(), but we do still + * have to check for the theoretically possible illegal case of all-zero. + */ + if (state[0] == 0 && state[1] == 0) { + state[1] = 1; + } +#else /* This check serves to both to stir the state if the platform is returning * constant seeding values, and to avoid the illegal all-zero state. */ @@ -110,7 +120,8 @@ void randLIB_seed_random(void) state[0] = splitmix64(&seed); state[1] = splitmix64(&seed); } -#endif +#endif // RANDLIB_ASSUME_GOOD_SEED +#endif // RANDOM_DEVICE } void randLIB_add_seed(uint64_t seed) From 9a00890fde9827564b0bcd222e90d46e5a204798 Mon Sep 17 00:00:00 2001 From: Kevin Bracey Date: Wed, 19 Oct 2016 08:05:50 +0100 Subject: [PATCH 135/154] Fix DEVICE_RANDOM fread call size and nitems parameters were the wrong way around, so the call did not return 1 as expected, meaning DEVICE_RANDOM functionality failed. --- source/randLIB.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/randLIB.c b/source/randLIB.c index a6feca7a01..0777f2719e 100644 --- a/source/randLIB.c +++ b/source/randLIB.c @@ -157,7 +157,7 @@ uint64_t randLIB_get_64bit(void) return 0; } uint64_t result; - if (fread(&result, 1, sizeof result, random_file) != 1) { + if (fread(&result, sizeof result, 1, random_file) != 1) { result = 0; } return result; From c78a2b5c8f8936e2d65fd8c750dc090a01d144e6 Mon Sep 17 00:00:00 2001 From: Kevin Bracey Date: Fri, 21 Oct 2016 08:01:54 +0100 Subject: [PATCH 136/154] Mix input to randLIB_add_seed calls Don't just xor in the 64-bit number given, splitmix64 it across the entire state. Also, make sure we don't accidentally set the state to all-zero. RANDLIB_ASSUME_GOOD_SEED dropped - we now assume splitmix64 will be present for the seed additions. (Note that add_seed will be somewhat slow on platforms like MSP430 with slow multipliers - don't call it too much.) --- source/randLIB.c | 25 +++++++------------ .../unittest/randlib/test_randlib.c | 18 ++++++------- 2 files changed, 18 insertions(+), 25 deletions(-) diff --git a/source/randLIB.c b/source/randLIB.c index 0777f2719e..21c6a58c3c 100644 --- a/source/randLIB.c +++ b/source/randLIB.c @@ -69,7 +69,6 @@ static inline uint64_t rol(uint64_t n, int bits) return (n << bits) | (n >> (64 - bits)); } -#ifndef RANDLIB_ASSUME_GOOD_SEED /* Lower-quality generator used only for initial seeding, if platform * isn't returning multiple seeds itself. Multiplies are rather heavy * for lower-end platforms, but this is initialisation only. @@ -81,7 +80,6 @@ static uint64_t splitmix64(uint64_t *seed) z = (z ^ (z >> 27)) * UINT64_C(0x94D049BB133111EB); return z ^ (z >> 31); } -#endif // RANDLIB_ASSUME_GOOD_SEED #endif // RANDOM_DEVICE void randLIB_seed_random(void) @@ -94,7 +92,8 @@ void randLIB_seed_random(void) arm_random_module_init(); /* We exclusive-OR with the current state, in case they make this call - * multiple times. We don't want to potentially lose entropy. + * multiple times,or in case someone has called randLIB_add_seed before + * this. We don't want to potentially lose entropy. */ /* Spell out expressions so we get known ordering of 4 seed calls */ @@ -104,30 +103,24 @@ void randLIB_seed_random(void) s = (uint64_t) arm_random_seed_get() << 32; state[1] ^= s | arm_random_seed_get(); -#ifdef RANDLIB_ASSUME_GOOD_SEED - /* Can avoid significant code overhead of splitmix64(), but we do still - * have to check for the theoretically possible illegal case of all-zero. - */ - if (state[0] == 0 && state[1] == 0) { - state[1] = 1; - } -#else /* This check serves to both to stir the state if the platform is returning * constant seeding values, and to avoid the illegal all-zero state. */ if (state[0] == state[1]) { - uint64_t seed = state[0]; - state[0] = splitmix64(&seed); - state[1] = splitmix64(&seed); + randLIB_add_seed(state[0]); } -#endif // RANDLIB_ASSUME_GOOD_SEED #endif // RANDOM_DEVICE } void randLIB_add_seed(uint64_t seed) { #ifndef RANDOM_DEVICE - state[1] += seed; + state[0] ^= splitmix64(&seed); + state[1] ^= splitmix64(&seed); + /* This is absolutely necessary, but I challenge you to add it to line coverage */ + if (state[1] == 0 && state[0] == 0) { + state[0] = 1; + } #endif } diff --git a/test/mbed-client-randlib/unittest/randlib/test_randlib.c b/test/mbed-client-randlib/unittest/randlib/test_randlib.c index 0fc3138a12..d918d59108 100644 --- a/test/mbed-client-randlib/unittest/randlib/test_randlib.c +++ b/test/mbed-client-randlib/unittest/randlib/test_randlib.c @@ -111,18 +111,18 @@ bool test_randLIB_get_64bit() /* If passed all "4" seeds, seeding should detect this * and use splitmix64 to create the actual seed - * (0x03910b0aab9b37e5, 0x0b309ab13d42b2a6), + * (0x03910b0eab9b37e1, 0x0b309ab53d42b2a2), * and produce this output: */ static const uint64_t expected4444[] = { - UINT64_C(0x0ec1a5bbe8ddea8b), - UINT64_C(0x0be710b8fcf5a491), - UINT64_C(0xb21127f7159348b4), - UINT64_C(0xdf31900d21f92182), - UINT64_C(0xd5a797507d94daa9), - UINT64_C(0x66a1c5a4fb04be3d), - UINT64_C(0x259e5385f48353be), - UINT64_C(0x5d3e3286cd4eae19) + UINT64_C(0x0ec1a5c3e8ddea83), + UINT64_C(0x09e710b8faf5a491), + UINT64_C(0xd4102776f79448b4), + UINT64_C(0x5d61988b60091900), + UINT64_C(0xf6c8a72a9c72cb4b), + UINT64_C(0xb06923e0cf0f2fb1), + UINT64_C(0x24bbed475153f573), + UINT64_C(0xfff0b4bd08c5581f), }; if (!test_output(4, false, expected4444)) { From 26cdd3904f3042c21155a39e940fafb266af20d2 Mon Sep 17 00:00:00 2001 From: Seppo Takalo Date: Mon, 24 Oct 2016 10:44:35 +0300 Subject: [PATCH 137/154] version v1.2.0 --- module.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module.json b/module.json index 9aa2146560..863baaa504 100644 --- a/module.json +++ b/module.json @@ -1,6 +1,6 @@ { "name": "nanostack-randlib", - "version": "1.1.0", + "version": "1.2.0", "description": "Pseudo random library used by mbed-client and 6LoWPAN stack.", "keywords": [], "homepage": "https://github.com/ARMmbed/mbed-client-randlib", From 9dfc6f970cf3e9dd3171861a656eaa74d611a6cf Mon Sep 17 00:00:00 2001 From: Tero Heinonen Date: Mon, 24 Oct 2016 11:58:53 +0300 Subject: [PATCH 138/154] Support for setting source address to socket (#40) When receiving data, destination (own) address is stored and given to socket when sending reply to make sure respone comes always from same address where request was sent. This commit supports only real socket to real socket messages, not virtual socket, or DTLS handshake messages. --- source/coap_connection_handler.c | 267 ++++++++++++------ source/coap_message_handler.c | 13 +- source/coap_security_handler.c | 25 +- source/coap_service_api.c | 28 +- source/include/coap_connection_handler.h | 6 +- source/include/coap_message_handler.h | 3 +- source/include/coap_security_handler.h | 4 +- .../test_coap_connection_handler.c | 12 +- .../unittest/coap_message_handler/Makefile | 3 +- .../test_coap_message_handler.c | 15 +- .../unittest/coap_security_handler/Makefile | 1 + .../coap_service_api/test_coap_service_api.c | 4 +- .../stub/coap_connection_handler_stub.c | 6 +- .../stub/coap_connection_handler_stub.h | 4 +- .../unittest/stub/coap_message_handler_stub.c | 4 +- .../stub/coap_security_handler_stub.c | 5 +- .../stub/coap_security_handler_stub.h | 2 +- .../coap-service/unittest/stub/randLIB_stub.c | 8 +- .../unittest/stub/socket_api_stub.c | 20 ++ 19 files changed, 272 insertions(+), 158 deletions(-) diff --git a/source/coap_connection_handler.c b/source/coap_connection_handler.c index c1d51711e1..94770b83a5 100644 --- a/source/coap_connection_handler.c +++ b/source/coap_connection_handler.c @@ -31,7 +31,7 @@ typedef struct internal_socket_s { int8_t listen_socket; ns_address_t dest_addr; - size_t data_len; + int16_t data_len; uint8_t *data; bool real_socket; @@ -72,7 +72,7 @@ typedef struct secure_session { } secure_session_t; static NS_LIST_DEFINE(secure_session_list, secure_session_t, link); -static int send_to_socket(int8_t socket_id, uint8_t *address_ptr, uint16_t port, const unsigned char *buf, size_t len); +static int send_to_socket(int8_t socket_id, const uint8_t *address_ptr, uint16_t port, const uint8_t source_addr[static 16], const void *buf, size_t len); static int receive_from_socket(int8_t socket_id, unsigned char *buf, size_t len); static void start_timer(int8_t timer_id, uint32_t int_ms, uint32_t fin_ms); static int timer_status(int8_t timer_id); @@ -107,7 +107,7 @@ static void secure_session_delete(secure_session_t *this) return; } -static secure_session_t *secure_session_create(internal_socket_t *parent, uint8_t *address_ptr, uint16_t port) +static secure_session_t *secure_session_create(internal_socket_t *parent, const uint8_t *address_ptr, uint16_t port) { if(!address_ptr){ return NULL; @@ -173,7 +173,7 @@ static void clear_secure_sessions(internal_socket_t *this){ } } -static secure_session_t *secure_session_find(internal_socket_t *parent, uint8_t *address_ptr, uint16_t port) +static secure_session_t *secure_session_find(internal_socket_t *parent, const uint8_t *address_ptr, uint16_t port) { secure_session_t *this = NULL; ns_list_foreach(secure_session_t, cur_ptr, &secure_session_list) { @@ -227,14 +227,14 @@ static internal_socket_t *int_socket_create(uint16_t listen_port, bool use_ephem return NULL; } - socket_setsockopt(this->listen_socket, SOCKET_IPPROTO_IPV6, SOCKET_LINK_LAYER_SECURITY, &(const int8_t) { - bypassSec ? 0 : 1 - }, sizeof(int8_t)); + socket_setsockopt(this->listen_socket, SOCKET_IPPROTO_IPV6, SOCKET_LINK_LAYER_SECURITY, &(const int8_t) {bypassSec ? 0 : 1}, sizeof(int8_t)); // XXX API for this? May want to get clever to do recommended first query = 1 hop, retries = whole PAN - socket_setsockopt(this->listen_socket, SOCKET_IPPROTO_IPV6, SOCKET_IPV6_MULTICAST_HOPS, &(const int16_t) { - 16 - }, sizeof(int16_t)); + socket_setsockopt(this->listen_socket, SOCKET_IPPROTO_IPV6, SOCKET_IPV6_MULTICAST_HOPS, &(const int16_t) {16}, sizeof(int16_t)); + + // Set socket option to receive packet info + socket_setsockopt(this->listen_socket, SOCKET_IPPROTO_IPV6, SOCKET_IPV6_RECVPKTINFO, &(const bool) {1}, sizeof(bool)); + }else{ this->listen_socket = -1; } @@ -290,15 +290,53 @@ static internal_socket_t *int_socket_find(uint16_t port, bool is_secure, bool is return this; } -static int send_to_socket(int8_t socket_id, uint8_t *address_ptr, uint16_t port, const unsigned char *buf, size_t len) +static int8_t send_to_real_socket(int8_t socket_id, const ns_address_t *address, const uint8_t source_address[static 16], const void *buffer, uint16_t length) +{ + ns_iovec_t msg_iov; + ns_msghdr_t msghdr; + + msghdr.msg_name = (void*)address; + msghdr.msg_namelen = sizeof(ns_address_t); + msghdr.msg_iov = &msg_iov; + msghdr.msg_iovlen = 1; + msghdr.flags = 0; + + if (memcmp(source_address, ns_in6addr_any, 16)) { + uint8_t ancillary_databuffer[NS_CMSG_SPACE(sizeof(ns_in6_pktinfo_t))]; + ns_cmsghdr_t *cmsg; + ns_in6_pktinfo_t *pktinfo; + + tr_debug("send from source address %s", trace_array(source_address, 16)); + msghdr.msg_control = ancillary_databuffer; + msghdr.msg_controllen = sizeof(ancillary_databuffer); + + cmsg = NS_CMSG_FIRSTHDR(&msghdr); + cmsg->cmsg_type = SOCKET_IPV6_PKTINFO; + cmsg->cmsg_level = SOCKET_IPPROTO_IPV6; + cmsg->cmsg_len = NS_CMSG_LEN(sizeof(ns_in6_pktinfo_t)); + + pktinfo = (ns_in6_pktinfo_t*)NS_CMSG_DATA(cmsg); + pktinfo->ipi6_ifindex = 0; + memcpy(pktinfo->ipi6_addr, source_address, 16); + } else { + msghdr.msg_control = NULL; + msghdr.msg_controllen = 0; + } + + msg_iov.iov_base = (void *)buffer; + msg_iov.iov_len = length; + + return socket_sendmsg(socket_id, &msghdr, 0); +} + +static int send_to_socket(int8_t socket_id, const uint8_t *address_ptr, uint16_t port, const uint8_t source_addr[static 16], const void *buf, size_t len) { internal_socket_t *sock = int_socket_find_by_socket_id(socket_id); if(!sock){ return -1; } if(!sock->real_socket){ - //In this case all clients will have socket_id -1 and socket will not have a real address - //so sock->dest_addr cannot be used here + // Send to virtual socket cb int ret = sock->parent->_send_cb(sock->listen_socket, address_ptr, port, buf, len); if( ret < 0 ) return ret; @@ -307,16 +345,18 @@ static int send_to_socket(int8_t socket_id, uint8_t *address_ptr, uint16_t port, int opt_name = SOCKET_IPV6_PREFER_SRC_6LOWPAN_SHORT; int8_t securityLinkLayer = 1; - if( sock->bypass_link_sec ){ + if (sock->bypass_link_sec) { securityLinkLayer = 0; } socket_setsockopt(sock->listen_socket, SOCKET_IPPROTO_IPV6, SOCKET_IPV6_ADDR_PREFERENCES, &opt_name, sizeof(int)); socket_setsockopt(sock->listen_socket, SOCKET_IPPROTO_IPV6, SOCKET_LINK_LAYER_SECURITY, &securityLinkLayer, sizeof(int8_t)); //For some reason socket_sendto returns 0 in success, while other socket impls return number of bytes sent!!! //TODO: check if address_ptr is valid and use that instead if it is - int ret = socket_sendto(sock->listen_socket, &sock->dest_addr, (unsigned char*)buf, len); - if( ret < 0 ) + + int8_t ret = send_to_real_socket(sock->listen_socket, &sock->dest_addr, source_addr, buf, len); + if (ret < 0) { return ret; + } return len; } @@ -324,7 +364,7 @@ static int receive_from_socket(int8_t socket_id, unsigned char *buf, size_t len) { (void)len; internal_socket_t *sock = int_socket_find_by_socket_id(socket_id); - if( sock->data && sock->data_len > 0 ){ + if (sock->data && sock->data_len > 0) { memcpy( buf, sock->data, sock->data_len ); int l = sock->data_len; ns_dyn_mem_free(sock->data); @@ -406,28 +446,71 @@ static int timer_status(int8_t timer_id) return TIMER_STATE_CANCELLED; } -static int read_data(socket_callback_t *sckt_data, internal_socket_t *sock, ns_address_t *src_address) +static int read_data(socket_callback_t *sckt_data, internal_socket_t *sock, ns_address_t *src_address, uint8_t dst_address[static 16]) { sock->data_len = 0; if (sckt_data->event_type == SOCKET_DATA && sckt_data->d_len > 0) { - if( sock->data ){ + uint8_t ancillary_databuffer[NS_CMSG_SPACE(sizeof(ns_in6_pktinfo_t))]; + ns_iovec_t msg_iov; + ns_msghdr_t msghdr; + ns_in6_pktinfo_t *pkt = NULL; + + if (sock->data) { ns_dyn_mem_free(sock->data); sock->data = NULL; } + sock->data = ns_dyn_mem_temporary_alloc(sckt_data->d_len); - if( !sock->data ){ + if (!sock->data) { sock->data = NULL; return -1; } - sock->data_len = socket_read(sckt_data->socket_id, src_address, sock->data, sckt_data->d_len); - } - if( sock->data_len < 1){ - ns_dyn_mem_free(sock->data); - sock->data = NULL; - sock->data_len = 0; - return -1; + + msghdr.msg_name = src_address; + msghdr.msg_namelen = sizeof(ns_address_t); + msghdr.msg_iov = &msg_iov; + msghdr.msg_iovlen = 1; + msghdr.msg_control = ancillary_databuffer; + msghdr.msg_controllen = sizeof(ancillary_databuffer); + msghdr.flags = 0; + + msg_iov.iov_base = sock->data; + msg_iov.iov_len = sckt_data->d_len; + + sock->data_len = socket_recvmsg(sckt_data->socket_id, &msghdr, 0); + + if (sock->data_len > 0) { + ns_cmsghdr_t *cmsg = NS_CMSG_FIRSTHDR(&msghdr); + + while (cmsg) { + switch (cmsg->cmsg_type) { + case SOCKET_IPV6_PKTINFO: + pkt = (ns_in6_pktinfo_t*)NS_CMSG_DATA(cmsg); + break; + default: + break; + } + cmsg = NS_CMSG_NXTHDR(&msghdr, cmsg); + } + if (pkt) { + memcpy(dst_address, pkt->ipi6_addr, 16); + } else { + goto return_failure; + } + } else { + goto return_failure; + } } + return 0; + +return_failure: + ns_dyn_mem_free(sock->data); + sock->data = NULL; + sock->data_len = 0; + return -1; + + } static void secure_recv_sckt_msg(void *cb_res) @@ -435,24 +518,25 @@ static void secure_recv_sckt_msg(void *cb_res) socket_callback_t *sckt_data = cb_res; internal_socket_t *sock = int_socket_find_by_socket_id(sckt_data->socket_id); ns_address_t src_address; + uint8_t dst_address[16]; - if( sock && read_data(sckt_data, sock, &src_address) == 0 ){ + if (sock && read_data(sckt_data, sock, &src_address, dst_address) == 0) { secure_session_t *session = secure_session_find(sock, src_address.address, src_address.identifier); // Create session - if( !session ){ + if (!session) { memcpy( sock->dest_addr.address, src_address.address, 16 ); sock->dest_addr.identifier = src_address.identifier; sock->dest_addr.type = src_address.type; session = secure_session_create(sock, src_address.address, src_address.identifier); } - if( !session ){ + if (!session) { tr_err("secure_recv_sckt_msg session creation failed - OOM"); return; } session->last_contact_time = coap_service_get_internal_timer_ticks(); // Start handshake - if( !session->sec_handler->_is_started ){ + if (!session->sec_handler->_is_started) { uint8_t *pw = (uint8_t *)ns_dyn_mem_alloc(64); uint8_t pw_len; if( sock->parent->_get_password_cb && 0 == sock->parent->_get_password_cb(sock->listen_socket, src_address.address, src_address.identifier, pw, &pw_len)){ @@ -464,12 +548,12 @@ static void secure_recv_sckt_msg(void *cb_res) //TODO: error handling } ns_dyn_mem_free(pw); - }else{ + } else { //Continue handshake - if(session->session_state == SECURE_SESSION_HANDSHAKE_ONGOING){ + if (session->session_state == SECURE_SESSION_HANDSHAKE_ONGOING) { int ret = coap_security_handler_continue_connecting(session->sec_handler); // Handshake done - if(ret == 0){ + if (ret == 0) { eventOS_timeout_cancel(session->timer.timer); session->timer.timer = NULL; session->session_state = SECURE_SESSION_OK; @@ -478,14 +562,13 @@ static void secure_recv_sckt_msg(void *cb_res) src_address.identifier, session->sec_handler->_keyblk.value); } - } - else if (ret < 0){ + } else if (ret < 0){ // error handling // TODO: here we also should clear CoAP retransmission buffer and inform that CoAP request sending is failed. secure_session_delete(session); } //Session valid - }else{ + } else { unsigned char *data = ns_dyn_mem_temporary_alloc(sock->data_len); int len = 0; len = coap_security_handler_read(session->sec_handler, data, sock->data_len); @@ -495,9 +578,9 @@ static void secure_recv_sckt_msg(void *cb_res) secure_session_delete(session); } ns_dyn_mem_free(data); - }else{ - if( sock->parent->_recv_cb ){ - sock->parent->_recv_cb(sock->listen_socket, src_address.address, src_address.identifier, data, len); + } else { + if (sock->parent->_recv_cb) { + sock->parent->_recv_cb(sock->listen_socket, src_address.address, src_address.identifier, dst_address, data, len); } ns_dyn_mem_free(data); } @@ -511,9 +594,11 @@ static void recv_sckt_msg(void *cb_res) socket_callback_t *sckt_data = cb_res; internal_socket_t *sock = int_socket_find_by_socket_id(sckt_data->socket_id); ns_address_t src_address; - if( sock && read_data(sckt_data, sock, &src_address) == 0 ){ - if(sock->parent && sock->parent->_recv_cb){ - sock->parent->_recv_cb(sock->listen_socket, src_address.address, src_address.identifier, sock->data, sock->data_len); + uint8_t dst_address[16]; + + if (sock && read_data(sckt_data, sock, &src_address, dst_address) == 0) { + if (sock->parent && sock->parent->_recv_cb) { + sock->parent->_recv_cb(sock->listen_socket, src_address.address, src_address.identifier, dst_address, sock->data, sock->data_len); } ns_dyn_mem_free(sock->data); sock->data = NULL; @@ -522,44 +607,44 @@ static void recv_sckt_msg(void *cb_res) int coap_connection_handler_virtual_recv(coap_conn_handler_t *handler, uint8_t address[static 16], uint16_t port, uint8_t *data_ptr, uint16_t data_len) { - if( !handler || !handler->socket ){ + if(!handler || !handler->socket) { return -1; } internal_socket_t *sock = handler->socket; sock->data_len = data_len; - if( sock->data ){ + if (sock->data) { ns_dyn_mem_free(sock->data); sock->data = NULL; } sock->data = ns_dyn_mem_temporary_alloc(data_len); - if( data_len > 0 && !sock->data ){ + if (data_len > 0 && !sock->data) { return -1; } - if( data_ptr ){ + if (data_ptr) { memcpy(sock->data, data_ptr, data_len); - }else{ - if( sock->data ){ + } else { + if (sock->data) { ns_dyn_mem_free(sock->data); sock->data = NULL; } } - if( handler->socket->is_secure ){ + if (handler->socket->is_secure) { secure_session_t *session = secure_session_find(sock, address, port); - if( !session ){ + if (!session) { session = secure_session_create(sock, address, port); } - if( !session ){ + if (!session) { tr_err("coap_connection_handler_virtual_recv session creation failed - OOM"); return -1; } session->last_contact_time = coap_service_get_internal_timer_ticks(); - if( !session->sec_handler->_is_started ){ + if (!session->sec_handler->_is_started) { uint8_t *pw = (uint8_t *)ns_dyn_mem_alloc(64); uint8_t pw_len; - if( sock->parent->_get_password_cb && 0 == sock->parent->_get_password_cb(sock->listen_socket, address, port, pw, &pw_len)){ + if (sock->parent->_get_password_cb && 0 == sock->parent->_get_password_cb(sock->listen_socket, address, port, pw, &pw_len)) { //TODO: get_password_cb should support certs and PSK also coap_security_keys_t keys; keys._priv = pw; @@ -568,12 +653,12 @@ int coap_connection_handler_virtual_recv(coap_conn_handler_t *handler, uint8_t a //TODO: error handling ns_dyn_mem_free(pw); return 0; - }else{ + } else { ns_dyn_mem_free(pw); return -1; } - }else{ - if(session->session_state == SECURE_SESSION_HANDSHAKE_ONGOING){ + } else { + if (session->session_state == SECURE_SESSION_HANDSHAKE_ONGOING) { int ret = coap_security_handler_continue_connecting(session->sec_handler); if(ret == 0){ session->session_state = SECURE_SESSION_OK; @@ -584,18 +669,17 @@ int coap_connection_handler_virtual_recv(coap_conn_handler_t *handler, uint8_t a } return 0; } - else if(ret < 0) - { + else if (ret < 0) { // error handling // TODO: here we also should clear CoAP retransmission buffer and inform that CoAP request sending is failed. secure_session_delete(session); } //TODO: error handling - }else{ + } else { unsigned char *data = ns_dyn_mem_temporary_alloc(sock->data_len); int len = 0; len = coap_security_handler_read(session->sec_handler, data, sock->data_len); - if( len < 0 ){ + if (len < 0) { if (len != MBEDTLS_ERR_SSL_WANT_READ && len != MBEDTLS_ERR_SSL_WANT_WRITE && len != MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE) { secure_session_delete(session); @@ -604,7 +688,7 @@ int coap_connection_handler_virtual_recv(coap_conn_handler_t *handler, uint8_t a return 0; } else { if (sock->parent->_recv_cb) { - sock->parent->_recv_cb(sock->listen_socket, address, port, data, len); + sock->parent->_recv_cb(sock->listen_socket, address, port, ns_in6addr_any, data, len); } ns_dyn_mem_free(data); data = NULL; @@ -612,11 +696,12 @@ int coap_connection_handler_virtual_recv(coap_conn_handler_t *handler, uint8_t a return 0; } } - }else{ - if( sock->parent->_recv_cb ){ - sock->parent->_recv_cb(sock->listen_socket, address, port, sock->data, sock->data_len); + } else { + /* unsecure*/ + if (sock->parent->_recv_cb) { + sock->parent->_recv_cb(sock->listen_socket, address, port, ns_in6addr_any, sock->data, sock->data_len); } - if( sock->data ){ + if (sock->data) { ns_dyn_mem_free(sock->data); sock->data = NULL; } @@ -630,7 +715,7 @@ coap_conn_handler_t *connection_handler_create(receive_from_socket_cb *recv_from get_pw_cb *pw_cb, security_done_cb *done_cb ) { - if( recv_from_cb == NULL ){ + if(recv_from_cb == NULL) { return NULL; } @@ -658,10 +743,10 @@ void connection_handler_destroy(coap_conn_handler_t *handler) void connection_handler_close_secure_connection( coap_conn_handler_t *handler, uint8_t destination_addr_ptr[static 16], uint16_t port ) { - if(handler){ - if( handler->socket && handler->socket->is_secure){ + if (handler) { + if (handler->socket && handler->socket->is_secure) { secure_session_t *session = secure_session_find( handler->socket, destination_addr_ptr, port); - if( session ){ + if (session) { coap_security_send_close_alert( session->sec_handler ); session->session_state = SECURE_SESSION_CLOSED; session->last_contact_time = coap_service_get_internal_timer_ticks(); @@ -672,50 +757,50 @@ void connection_handler_close_secure_connection( coap_conn_handler_t *handler, u int coap_connection_handler_open_connection(coap_conn_handler_t *handler, uint16_t listen_port, bool use_ephemeral_port, bool is_secure, bool is_real_socket, bool bypassSec) { - if( !handler ){ + if (!handler) { return -1; } //virtual socket must have send callback - if( !is_real_socket && !handler->_send_cb ){ + if (!is_real_socket && !handler->_send_cb) { return -1; } - if( handler->socket ){ + if (handler->socket) { int_socket_delete(handler->socket); } internal_socket_t *current = !use_ephemeral_port?int_socket_find(listen_port, is_secure, is_real_socket, bypassSec):NULL; - if(!current){ + if (!current) { handler->socket = int_socket_create(listen_port, use_ephemeral_port, is_secure, is_real_socket, bypassSec); - if(!handler->socket){ + if (!handler->socket) { return -1; } handler->socket->parent = ns_dyn_mem_alloc(sizeof(coap_conn_handler_t)); - if(!handler->socket->parent){ + if (!handler->socket->parent) { int_socket_delete(handler->socket); return -1; } *handler->socket->parent = *handler; - }else{ + } else { current->usage_counter++; handler->socket = current; } return 0; } -int coap_connection_handler_send_data(coap_conn_handler_t *handler, ns_address_t *dest_addr, uint8_t *data_ptr, uint16_t data_len, bool bypass_link_sec) +int coap_connection_handler_send_data(coap_conn_handler_t *handler, const ns_address_t *dest_addr, const uint8_t src_address[static 16], uint8_t *data_ptr, uint16_t data_len, bool bypass_link_sec) { - if( !handler || !handler->socket || !dest_addr){ + if (!handler || !handler->socket || !dest_addr) { return -1; } - if(handler->socket->is_secure){ + if (handler->socket->is_secure) { handler->socket->bypass_link_sec = bypass_link_sec; memcpy(handler->socket->dest_addr.address, dest_addr->address, 16); handler->socket->dest_addr.identifier = dest_addr->identifier; handler->socket->dest_addr.type = dest_addr->type; secure_session_t *session = secure_session_find(handler->socket, dest_addr->address, dest_addr->identifier); - if( !session ){ + if (!session) { session = secure_session_create(handler->socket, dest_addr->address, dest_addr->identifier); - if( !session ){ + if (!session) { return -1; } session->last_contact_time = coap_service_get_internal_timer_ticks(); @@ -723,12 +808,12 @@ int coap_connection_handler_send_data(coap_conn_handler_t *handler, ns_address_t handler->socket->dest_addr.identifier = dest_addr->identifier; handler->socket->dest_addr.type = dest_addr->type; uint8_t *pw = (uint8_t *)ns_dyn_mem_alloc(64); - if(!pw){ + if (!pw) { //todo: free secure session? return -1; } uint8_t pw_len; - if( handler->_get_password_cb && 0 == handler->_get_password_cb(handler->socket->listen_socket, dest_addr->address, dest_addr->identifier, pw, &pw_len)){ + if (handler->_get_password_cb && 0 == handler->_get_password_cb(handler->socket->listen_socket, (uint8_t*)dest_addr->address, dest_addr->identifier, pw, &pw_len)) { //TODO: get_password_cb should support certs and PSK also coap_security_keys_t keys; keys._priv = pw; @@ -736,30 +821,32 @@ int coap_connection_handler_send_data(coap_conn_handler_t *handler, ns_address_t coap_security_handler_connect_non_blocking(session->sec_handler, false, DTLS, keys, handler->socket->timeout_min, handler->socket->timeout_max); ns_dyn_mem_free(pw); return -2; - }else{ + } else { //free secure session? ns_dyn_mem_free(pw); return -1; } - }else if( session->session_state == SECURE_SESSION_OK ){ - if( coap_security_handler_send_message(session->sec_handler, data_ptr, data_len ) > 0 ){ + } else if (session->session_state == SECURE_SESSION_OK) { + if (coap_security_handler_send_message(session->sec_handler, data_ptr, data_len ) > 0 ) { session->last_contact_time = coap_service_get_internal_timer_ticks(); return 0; } } return -1; }else{ - if( !handler->socket->real_socket && handler->_send_cb){ + if (!handler->socket->real_socket && handler->_send_cb) { return handler->_send_cb((int8_t)handler->socket->listen_socket, dest_addr->address, dest_addr->identifier, data_ptr, data_len); } int opt_name = SOCKET_IPV6_PREFER_SRC_6LOWPAN_SHORT; int8_t securityLinkLayer = 1; - if( bypass_link_sec ){ + if (bypass_link_sec) { securityLinkLayer = 0; } + socket_setsockopt(handler->socket->listen_socket, SOCKET_IPPROTO_IPV6, SOCKET_IPV6_ADDR_PREFERENCES, &opt_name, sizeof(int)); socket_setsockopt(handler->socket->listen_socket, SOCKET_IPPROTO_IPV6, SOCKET_LINK_LAYER_SECURITY, &securityLinkLayer, sizeof(int8_t)); - return socket_sendto(handler->socket->listen_socket, dest_addr, data_ptr, data_len); + + return send_to_real_socket(handler->socket->listen_socket, dest_addr, src_address, data_ptr, data_len); } } diff --git a/source/coap_message_handler.c b/source/coap_message_handler.c index 6c3dfd9893..6fbb3f8ea3 100644 --- a/source/coap_message_handler.c +++ b/source/coap_message_handler.c @@ -177,15 +177,15 @@ coap_transaction_t *coap_message_handler_find_transaction(uint8_t *address_ptr, return transaction_find_by_address( address_ptr, port ); } -int16_t coap_message_handler_coap_msg_process(coap_msg_handler_t *handle, int8_t socket_id, uint8_t source_addr_ptr[static 16], uint16_t port, +int16_t coap_message_handler_coap_msg_process(coap_msg_handler_t *handle, int8_t socket_id, const uint8_t source_addr_ptr[static 16], uint16_t port, const uint8_t dst_addr_ptr[static 16], uint8_t *data_ptr, uint16_t data_len, int16_t (cb)(int8_t, sn_coap_hdr_s *, coap_transaction_t *)) { - if( !cb || !handle ){ + if (!cb || !handle) { return -1; } sn_nsdl_addr_s src_addr; sn_coap_hdr_s *coap_message; - src_addr.addr_ptr = source_addr_ptr; + src_addr.addr_ptr = (uint8_t *)source_addr_ptr; src_addr.addr_len = 16; src_addr.type = SN_NSDL_ADDRESS_TYPE_IPV6; src_addr.port = port; @@ -209,6 +209,7 @@ int16_t coap_message_handler_coap_msg_process(coap_msg_handler_t *handle, int8_t transaction_ptr->service_id = coap_service_id_find_by_socket(socket_id); transaction_ptr->msg_id = coap_message->msg_id; transaction_ptr->client_request = false;// this is server transaction + memcpy(transaction_ptr->local_address, dst_addr_ptr, 16); memcpy(transaction_ptr->remote_address, source_addr_ptr, 16); transaction_ptr->remote_port = port; @@ -219,13 +220,13 @@ int16_t coap_message_handler_coap_msg_process(coap_msg_handler_t *handle, int8_t transaction_delete(transaction_ptr); return -1; } - }else{ + } else { //TODO: handle error case } /* Response received */ } else { coap_transaction_t *this = NULL; - if( coap_message->token_ptr ){ + if (coap_message->token_ptr) { this = transaction_find_client_by_token(coap_message->token_ptr); } if (!this) { @@ -235,7 +236,7 @@ int16_t coap_message_handler_coap_msg_process(coap_msg_handler_t *handle, int8_t } tr_debug("Service %d, response received", this->service_id); if (this->resp_cb) { - this->resp_cb(this->service_id, source_addr_ptr, port, coap_message); + this->resp_cb(this->service_id, (uint8_t *)source_addr_ptr, port, coap_message); } sn_coap_parser_release_allocated_coap_msg_mem(handle->coap, coap_message); transaction_delete(this); diff --git a/source/coap_security_handler.c b/source/coap_security_handler.c index a33b50a5cc..959b0fd0cc 100644 --- a/source/coap_security_handler.c +++ b/source/coap_security_handler.c @@ -18,6 +18,7 @@ #include "coap_security_handler.h" #include "randLIB.h" #include "mbedtls/ssl_ciphersuites.h" +#include "socket_api.h" #if defined(MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED) const int ECJPAKE_SUITES[] = { @@ -92,13 +93,13 @@ static void coap_security_handler_reset(coap_security_t *sec){ } -coap_security_t *coap_security_create(int8_t socket_id, int8_t timer_id, uint8_t *address_ptr, uint16_t port, SecureConnectionMode mode, - send_cb *send_cb, - receive_cb *receive_cb, - start_timer_cb *start_timer_cb, - timer_status_cb *timer_status_cb) +coap_security_t *coap_security_create(int8_t socket_id, int8_t timer_id, const uint8_t *address_ptr, uint16_t port, SecureConnectionMode mode, + send_cb *socket_cb, + receive_cb *receive_data_cb, + start_timer_cb *timer_start_cb, + timer_status_cb *timer_stat_cb) { - if( !address_ptr || send_cb == NULL || receive_cb == NULL || start_timer_cb == NULL || timer_status_cb == NULL){ + if (!address_ptr || socket_cb == NULL || receive_data_cb == NULL || timer_start_cb == NULL || timer_stat_cb == NULL) { return NULL; } coap_security_t *this = ns_dyn_mem_alloc(sizeof(coap_security_t)); @@ -106,7 +107,7 @@ coap_security_t *coap_security_create(int8_t socket_id, int8_t timer_id, uint8_t return NULL; } memset(this, 0, sizeof(coap_security_t)); - if( -1 == coap_security_handler_init(this) ){ + if (-1 == coap_security_handler_init(this)) { ns_dyn_mem_free(this); return NULL; } @@ -117,10 +118,10 @@ coap_security_t *coap_security_create(int8_t socket_id, int8_t timer_id, uint8_t this->_pw_len = 0; this->_socket_id = socket_id; this->_timer_id = timer_id; - this->_send_cb = send_cb; - this->_receive_cb = receive_cb; - this->_start_timer_cb = start_timer_cb; - this->_timer_status_cb = timer_status_cb; + this->_send_cb = socket_cb; + this->_receive_cb = receive_data_cb; + this->_start_timer_cb = timer_start_cb; + this->_timer_status_cb = timer_stat_cb; return this; } @@ -551,7 +552,7 @@ static int get_timer(void *sec_obj) int f_send( void *ctx, const unsigned char *buf, size_t len){ coap_security_t *sec = (coap_security_t *)ctx; - return sec->_send_cb(sec->_socket_id, sec->_remote_address, sec->_remote_port, buf, len); + return sec->_send_cb(sec->_socket_id, sec->_remote_address, sec->_remote_port, ns_in6addr_any, buf, len); } int f_recv(void *ctx, unsigned char *buf, size_t len){ diff --git a/source/coap_service_api.c b/source/coap_service_api.c index 8177a301ff..d6c330202b 100644 --- a/source/coap_service_api.c +++ b/source/coap_service_api.c @@ -23,7 +23,6 @@ #include "coap_service_api_internal.h" #include "coap_message_handler.h" -static int16_t coap_service_coap_msg_process(int8_t socket_id, uint8_t source_addr_ptr[static 16], uint16_t port, uint8_t *data_ptr, uint16_t data_len); static int16_t coap_msg_process_callback(int8_t socket_id, sn_coap_hdr_s *coap_message, coap_transaction_t *transaction_ptr); typedef struct uri_registration { @@ -142,7 +141,8 @@ static uint8_t coap_tx_function(uint8_t *data_ptr, uint16_t data_len, sn_nsdl_ad dest_addr.identifier = address_ptr->port; dest_addr.type = ADDRESS_IPV6; - if( -2 == coap_connection_handler_send_data(this->conn_handler, &dest_addr, data_ptr, data_len, (this->service_options & COAP_SERVICE_OPTIONS_SECURE_BYPASS) == COAP_SERVICE_OPTIONS_SECURE_BYPASS) ){ + if (-2 == coap_connection_handler_send_data(this->conn_handler, &dest_addr, transaction_ptr->local_address, + data_ptr, data_len, (this->service_options & COAP_SERVICE_OPTIONS_SECURE_BYPASS) == COAP_SERVICE_OPTIONS_SECURE_BYPASS)) { transaction_ptr->data_ptr = ns_dyn_mem_alloc(data_len); if (!transaction_ptr->data_ptr) { tr_debug("coap tx out of memory"); @@ -151,7 +151,7 @@ static uint8_t coap_tx_function(uint8_t *data_ptr, uint16_t data_len, sn_nsdl_ad } memcpy(transaction_ptr->data_ptr, data_ptr, data_len); transaction_ptr->data_len = data_len; - } else if (transaction_ptr->resp_cb == NULL ){ + } else if (transaction_ptr->resp_cb == NULL ) { transaction_delete(transaction_ptr); } @@ -207,19 +207,18 @@ static int16_t coap_msg_process_callback(int8_t socket_id, sn_coap_hdr_s *coap_m return -1; } -static int16_t coap_service_coap_msg_process(int8_t socket_id, uint8_t source_addr_ptr[static 16], uint16_t port, uint8_t *data_ptr, uint16_t data_len) -{ - return coap_message_handler_coap_msg_process( coap_service_handle, socket_id, source_addr_ptr, port, data_ptr, data_len, &coap_msg_process_callback); -} - -static int recv_cb(int8_t socket_id, uint8_t address[static 16], uint16_t port, unsigned char *data, int len) +static int recv_cb(int8_t socket_id, uint8_t src_address[static 16], uint16_t port, const uint8_t dst_address[static 16], unsigned char *data, int len) { uint8_t *data_ptr = NULL; uint16_t data_len = 0; + if (!data || !len) { + return -1; + } + data_ptr = own_alloc(len); - if (!data_ptr || len < 1) { + if (!data_ptr) { return -1; } memcpy(data_ptr, data, len); @@ -227,17 +226,17 @@ static int recv_cb(int8_t socket_id, uint8_t address[static 16], uint16_t port, tr_debug("service recv socket data len %d ", data_len); //parse coap message what CoAP to use - int ret = coap_service_coap_msg_process(socket_id, address, port, data_ptr, data_len); + int ret = coap_message_handler_coap_msg_process(coap_service_handle, socket_id, src_address, port, dst_address, data_ptr, data_len, &coap_msg_process_callback); own_free(data_ptr); return ret; } -static int send_cb(int8_t socket_id, uint8_t address[static 16], uint16_t port, const unsigned char *data_ptr, int data_len) +static int send_cb(int8_t socket_id, const uint8_t address[static 16], uint16_t port, const void *data_ptr, int data_len) { coap_service_t *this = service_find_by_socket(socket_id); if (this && this->virtual_socket_send_cb) { tr_debug("send to virtual socket"); - return this->virtual_socket_send_cb(this->service_id, address, port, data_ptr, data_len); + return this->virtual_socket_send_cb(this->service_id, (uint8_t*)address, port, data_ptr, data_len); } return -1; } @@ -259,7 +258,8 @@ static void sec_done_cb(int8_t socket_id, uint8_t address[static 16], uint16_t p dest_addr.identifier = port; dest_addr.type = ADDRESS_IPV6; - coap_connection_handler_send_data(this->conn_handler, &dest_addr, transaction_ptr->data_ptr, transaction_ptr->data_len, (this->service_options & COAP_SERVICE_OPTIONS_SECURE_BYPASS) == COAP_SERVICE_OPTIONS_SECURE_BYPASS); + coap_connection_handler_send_data(this->conn_handler, &dest_addr, transaction_ptr->local_address, + transaction_ptr->data_ptr, transaction_ptr->data_len, (this->service_options & COAP_SERVICE_OPTIONS_SECURE_BYPASS) == COAP_SERVICE_OPTIONS_SECURE_BYPASS); ns_dyn_mem_free(transaction_ptr->data_ptr); transaction_ptr->data_ptr = NULL; transaction_ptr->data_len = 0; diff --git a/source/include/coap_connection_handler.h b/source/include/coap_connection_handler.h index b866c609dd..d5ed73e252 100644 --- a/source/include/coap_connection_handler.h +++ b/source/include/coap_connection_handler.h @@ -32,8 +32,8 @@ struct internal_socket_s; -typedef int send_to_socket_cb(int8_t socket_id, uint8_t address[static 16], uint16_t port, const unsigned char *, int); -typedef int receive_from_socket_cb(int8_t socket_id, uint8_t address[static 16], uint16_t port, unsigned char *, int); +typedef int send_to_socket_cb(int8_t socket_id, const uint8_t address[static 16], uint16_t port, const void *, int); +typedef int receive_from_socket_cb(int8_t socket_id, uint8_t src_address[static 16], uint16_t port, const uint8_t dst_address[static 16], unsigned char *, int); typedef int get_pw_cb(int8_t socket_id, uint8_t address[static 16], uint16_t port, uint8_t *pw_ptr, uint8_t *pw_len); typedef void security_done_cb(int8_t socket_id, uint8_t address[static 16], uint16_t port, uint8_t keyblock[static 40]); @@ -58,7 +58,7 @@ void connection_handler_close_secure_connection( coap_conn_handler_t *handler, u int coap_connection_handler_open_connection(coap_conn_handler_t *handler, uint16_t listen_port, bool use_ephemeral_port, bool is_secure, bool real_socket, bool bypassSec); //If returns -2, it means security was started and data was not send -int coap_connection_handler_send_data(coap_conn_handler_t *handler, ns_address_t *dest_addr, uint8_t *data_ptr, uint16_t data_len, bool bypass_link_sec); +int coap_connection_handler_send_data(coap_conn_handler_t *handler, const ns_address_t *dest_addr, const uint8_t src_address[static 16], uint8_t *data_ptr, uint16_t data_len, bool bypass_link_sec); int coap_connection_handler_virtual_recv(coap_conn_handler_t *handler, uint8_t address[static 16], uint16_t port, uint8_t *data_ptr, uint16_t data_len); diff --git a/source/include/coap_message_handler.h b/source/include/coap_message_handler.h index 7120762446..a6c751b9bd 100644 --- a/source/include/coap_message_handler.h +++ b/source/include/coap_message_handler.h @@ -49,6 +49,7 @@ typedef struct coap_msg_handler_s { typedef struct coap_transaction { uint8_t remote_address[16]; + uint8_t local_address[16]; uint8_t token[4]; uint32_t create_time; uint16_t remote_port; @@ -73,7 +74,7 @@ extern coap_transaction_t *coap_message_handler_transaction_valid(coap_transacti extern coap_transaction_t *coap_message_handler_find_transaction(uint8_t *address_ptr, uint16_t port); -extern int16_t coap_message_handler_coap_msg_process(coap_msg_handler_t *handle, int8_t socket_id, uint8_t source_addr_ptr[static 16], uint16_t port, +extern int16_t coap_message_handler_coap_msg_process(coap_msg_handler_t *handle, int8_t socket_id, const uint8_t source_addr_ptr[static 16], uint16_t port, const uint8_t dst_addr_ptr[static 16], uint8_t *data_ptr, uint16_t data_len, int16_t (cb)(int8_t, sn_coap_hdr_s *, coap_transaction_t *)); extern uint16_t coap_message_handler_request_send(coap_msg_handler_t *handle, int8_t service_id, uint8_t options, const uint8_t destination_addr[static 16], diff --git a/source/include/coap_security_handler.h b/source/include/coap_security_handler.h index e43c74bb7d..e5a7ad0008 100644 --- a/source/include/coap_security_handler.h +++ b/source/include/coap_security_handler.h @@ -38,7 +38,7 @@ typedef struct key_block { unsigned char value[KEY_BLOCK_LEN]; } key_block_t; -typedef int send_cb(int8_t socket_id, uint8_t *address_ptr, uint16_t port, const unsigned char *, size_t); +typedef int send_cb(int8_t socket_id, const uint8_t *address_ptr, uint16_t port, const uint8_t source_addr[static 16], const void *, size_t); typedef int receive_cb(int8_t socket_id, unsigned char *, size_t); typedef void start_timer_cb(int8_t timer_id, uint32_t min, uint32_t fin); typedef int timer_status_cb(int8_t timer_id); @@ -99,7 +99,7 @@ typedef struct coap_security_s { } coap_security_t; -coap_security_t *coap_security_create(int8_t socket_id, int8_t timer_id, uint8_t *address_ptr, uint16_t port, +coap_security_t *coap_security_create(int8_t socket_id, int8_t timer_id, const uint8_t *address_ptr, uint16_t port, SecureConnectionMode mode, send_cb *send_cb, receive_cb *receive_cb, diff --git a/test/coap-service/unittest/coap_connection_handler/test_coap_connection_handler.c b/test/coap-service/unittest/coap_connection_handler/test_coap_connection_handler.c index 6c26a8db09..73ce1c08ff 100644 --- a/test/coap-service/unittest/coap_connection_handler/test_coap_connection_handler.c +++ b/test/coap-service/unittest/coap_connection_handler/test_coap_connection_handler.c @@ -105,7 +105,7 @@ bool test_coap_connection_handler_open_connection() bool test_coap_connection_handler_send_data() { coap_security_handler_stub.counter = -1; - if( -1 != coap_connection_handler_send_data(NULL, NULL, NULL, 0, false)) + if( -1 != coap_connection_handler_send_data(NULL, NULL, ns_in6addr_any, NULL, 0, false)) return false; ns_address_t addr; @@ -118,7 +118,7 @@ bool test_coap_connection_handler_send_data() if( 0 != coap_connection_handler_open_connection(handler, 22,false,true,false,false) ) return false; - if( -1 != coap_connection_handler_send_data(handler, &addr, NULL, 0, true)) + if( -1 != coap_connection_handler_send_data(handler, &addr, ns_in6addr_any, NULL, 0, true)) return false; connection_handler_destroy(handler); @@ -134,10 +134,10 @@ bool test_coap_connection_handler_send_data() if( 0 != coap_connection_handler_open_connection(handler, 22,false,true,false,false) ) return false; - if( -1 != coap_connection_handler_send_data(handler, &addr, NULL, 0, true)) + if( -1 != coap_connection_handler_send_data(handler, &addr, ns_in6addr_any, NULL, 0, true)) return false; - if( -1 != coap_connection_handler_send_data(handler, &addr, NULL, 0, true)) + if( -1 != coap_connection_handler_send_data(handler, &addr, ns_in6addr_any, NULL, 0, true)) return false; connection_handler_destroy(handler); @@ -153,7 +153,7 @@ bool test_coap_connection_handler_send_data() return false; - if( 1 != coap_connection_handler_send_data(handler, &addr, NULL, 0, true)) + if( 1 != coap_connection_handler_send_data(handler, &addr, ns_in6addr_any, NULL, 0, true)) return false; connection_handler_destroy(handler); @@ -164,7 +164,7 @@ bool test_coap_connection_handler_send_data() return false; socket_api_stub.int8_value = 7; - if( 7 != coap_connection_handler_send_data(handler, &addr, NULL, 0, true)) + if( 7 != coap_connection_handler_send_data(handler, &addr, ns_in6addr_any, NULL, 0, true)) return false; connection_handler_destroy(handler); diff --git a/test/coap-service/unittest/coap_message_handler/Makefile b/test/coap-service/unittest/coap_message_handler/Makefile index 4b9be7f780..f089fc1ebb 100644 --- a/test/coap-service/unittest/coap_message_handler/Makefile +++ b/test/coap-service/unittest/coap_message_handler/Makefile @@ -17,7 +17,8 @@ TEST_SRC_FILES = \ ../stub/nsdynmemLIB_stub.c \ ../stub/ns_list_stub.c \ ../stub/randLIB_stub.c \ - ../stub/coap_service_api_stub.c + ../stub/coap_service_api_stub.c \ + ../stub/socket_api_stub.c \ include ../MakefileWorker.mk diff --git a/test/coap-service/unittest/coap_message_handler/test_coap_message_handler.c b/test/coap-service/unittest/coap_message_handler/test_coap_message_handler.c index bfb3c20cec..510c103315 100644 --- a/test/coap-service/unittest/coap_message_handler/test_coap_message_handler.c +++ b/test/coap-service/unittest/coap_message_handler/test_coap_message_handler.c @@ -8,6 +8,7 @@ #include "nsdynmemLIB_stub.h" #include "sn_coap_builder_stub.h" #include "sn_coap_parser_stub.h" +#include "socket_api.h" int retCounter = 0; int retValue = 0; @@ -118,7 +119,7 @@ bool test_coap_message_handler_coap_msg_process() { uint8_t buf[16]; memset(&buf, 1, 16); - if( -1 != coap_message_handler_coap_msg_process(NULL, 0, buf, 22, NULL, 0, NULL)) + if( -1 != coap_message_handler_coap_msg_process(NULL, 0, buf, 22, ns_in6addr_any, NULL, 0, NULL)) return false; retCounter = 1; @@ -127,13 +128,13 @@ bool test_coap_message_handler_coap_msg_process() coap_msg_handler_t *handle = coap_message_handler_init(&own_alloc, &own_free, &coap_tx_function); sn_coap_protocol_stub.expectedHeader = NULL; - if( -1 != coap_message_handler_coap_msg_process(handle, 0, buf, 22, NULL, 0, process_cb)) + if( -1 != coap_message_handler_coap_msg_process(handle, 0, buf, 22, ns_in6addr_any, NULL, 0, process_cb)) return false; sn_coap_protocol_stub.expectedHeader = (sn_coap_hdr_s *)malloc(sizeof(sn_coap_hdr_s)); memset(sn_coap_protocol_stub.expectedHeader, 0, sizeof(sn_coap_hdr_s)); sn_coap_protocol_stub.expectedHeader->coap_status = 66; - if( -1 != coap_message_handler_coap_msg_process(handle, 0, buf, 22, NULL, 0, process_cb)) + if( -1 != coap_message_handler_coap_msg_process(handle, 0, buf, 22, ns_in6addr_any, NULL, 0, process_cb)) return false; sn_coap_protocol_stub.expectedHeader = (sn_coap_hdr_s *)malloc(sizeof(sn_coap_hdr_s)); @@ -141,12 +142,12 @@ bool test_coap_message_handler_coap_msg_process() sn_coap_protocol_stub.expectedHeader->coap_status = COAP_STATUS_OK; sn_coap_protocol_stub.expectedHeader->msg_code = 1; retValue = 0; - if( 0 != coap_message_handler_coap_msg_process(handle, 0, buf, 22, NULL, 0, process_cb)) + if( 0 != coap_message_handler_coap_msg_process(handle, 0, buf, 22, ns_in6addr_any, NULL, 0, process_cb)) return false; nsdynmemlib_stub.returnCounter = 1; retValue = -1; - if( -1 != coap_message_handler_coap_msg_process(handle, 0, buf, 22, NULL, 0, process_cb)) + if( -1 != coap_message_handler_coap_msg_process(handle, 0, buf, 22, ns_in6addr_any, NULL, 0, process_cb)) return false; sn_coap_protocol_stub.expectedHeader = (sn_coap_hdr_s *)malloc(sizeof(sn_coap_hdr_s)); @@ -154,7 +155,7 @@ bool test_coap_message_handler_coap_msg_process() sn_coap_protocol_stub.expectedHeader->coap_status = COAP_STATUS_OK; sn_coap_protocol_stub.expectedHeader->msg_code = 333; - if( -1 != coap_message_handler_coap_msg_process(handle, 0, buf, 22, NULL, 0, process_cb)) + if( -1 != coap_message_handler_coap_msg_process(handle, 0, buf, 22, ns_in6addr_any, NULL, 0, process_cb)) return false; sn_coap_protocol_stub.expectedHeader = (sn_coap_hdr_s *)malloc(sizeof(sn_coap_hdr_s)); @@ -175,7 +176,7 @@ bool test_coap_message_handler_coap_msg_process() sn_coap_protocol_stub.expectedHeader->msg_id = 2; // sn_coap_protocol_stub.expectedHeader->token_ptr = (uint8_t*)malloc(4); // memset(sn_coap_protocol_stub.expectedHeader->token_ptr, 1, 4); - if( -1 != coap_message_handler_coap_msg_process(handle, 0, buf, 22, NULL, 0, process_cb)) + if( -1 != coap_message_handler_coap_msg_process(handle, 0, buf, 22, ns_in6addr_any, NULL, 0, process_cb)) return false; // free(sn_coap_protocol_stub.expectedHeader->token_ptr); diff --git a/test/coap-service/unittest/coap_security_handler/Makefile b/test/coap-service/unittest/coap_security_handler/Makefile index ee1b27252c..ecec16e0bf 100644 --- a/test/coap-service/unittest/coap_security_handler/Makefile +++ b/test/coap-service/unittest/coap_security_handler/Makefile @@ -16,6 +16,7 @@ TEST_SRC_FILES = \ ../stub/mbedtls_stub.c \ ../stub/randLIB_stub.c \ ../stub/nsdynmemLIB_stub.c \ + ../stub/socket_api_stub.c \ include ../MakefileWorker.mk diff --git a/test/coap-service/unittest/coap_service_api/test_coap_service_api.c b/test/coap-service/unittest/coap_service_api/test_coap_service_api.c index 5cc5f380d2..f1937770dc 100644 --- a/test/coap-service/unittest/coap_service_api/test_coap_service_api.c +++ b/test/coap-service/unittest/coap_service_api/test_coap_service_api.c @@ -330,14 +330,14 @@ bool test_conn_handler_callbacks() if( thread_conn_handler_stub.receive_from_sock_cb ){ coap_message_handler_stub.int16_value = 2; - if( -1 != thread_conn_handler_stub.receive_from_sock_cb(1, buf, 12, NULL, 0)) + if( -1 != thread_conn_handler_stub.receive_from_sock_cb(1, buf, 12, NULL, NULL, 0)) return false; nsdynmemlib_stub.returnCounter = 1; uint8_t * ptr = ns_dyn_mem_alloc(5); memset(ptr, 3, 5); nsdynmemlib_stub.returnCounter = 1; - if( 2 != thread_conn_handler_stub.receive_from_sock_cb(1, buf, 12, ptr, 5)) + if( 2 != thread_conn_handler_stub.receive_from_sock_cb(1, buf, 12, NULL, ptr, 5)) return false; ns_dyn_mem_free(ptr); coap_message_handler_stub.int16_value = 0; diff --git a/test/coap-service/unittest/stub/coap_connection_handler_stub.c b/test/coap-service/unittest/stub/coap_connection_handler_stub.c index 83e6ce7828..0d0ae063d3 100644 --- a/test/coap-service/unittest/stub/coap_connection_handler_stub.c +++ b/test/coap-service/unittest/stub/coap_connection_handler_stub.c @@ -20,8 +20,8 @@ int coap_connection_handler_virtual_recv(coap_conn_handler_t *handler, uint8_t a return thread_conn_handler_stub.int_value; } -coap_conn_handler_t *connection_handler_create(int (*recv_cb)(int8_t socket_id, uint8_t address[static 16], uint16_t port, unsigned char *, int), - int (*send_cb)(int8_t socket_id, uint8_t address[static 16], uint16_t port, const unsigned char *, int), +coap_conn_handler_t *connection_handler_create(int (*recv_cb)(int8_t socket_id, uint8_t src_address[static 16], uint16_t port, const uint8_t dst_address[static 16], unsigned char *, int), + int (*send_cb)(int8_t socket_id, uint8_t const address[static 16], uint16_t port, const void *, int), int (*pw_cb)(int8_t socket_id, uint8_t address[static 16], uint16_t port, uint8_t *pw_ptr, uint8_t *pw_len), void(*done_cb)(int8_t socket_id, uint8_t address[static 16], uint16_t port, uint8_t keyblock[static KEY_BLOCK_LEN]) ) { @@ -46,7 +46,7 @@ int coap_connection_handler_open_connection(coap_conn_handler_t *handler, uint16 return thread_conn_handler_stub.int_value; } -int coap_connection_handler_send_data(coap_conn_handler_t *handler, ns_address_t *dest_addr, uint8_t *data_ptr, uint16_t data_len, bool bypass_link_sec) +int coap_connection_handler_send_data(coap_conn_handler_t *handler, const ns_address_t *dest_addr, const uint8_t dst_address[static 16], uint8_t *data_ptr, uint16_t data_len, bool bypass_link_sec) { return thread_conn_handler_stub.int_value; } diff --git a/test/coap-service/unittest/stub/coap_connection_handler_stub.h b/test/coap-service/unittest/stub/coap_connection_handler_stub.h index 5d24c67859..7a575bbd21 100644 --- a/test/coap-service/unittest/stub/coap_connection_handler_stub.h +++ b/test/coap-service/unittest/stub/coap_connection_handler_stub.h @@ -32,8 +32,8 @@ typedef struct { bool bool_value; coap_conn_handler_t *handler_obj; - int (*send_to_sock_cb)(int8_t socket_id, uint8_t address[static 16], uint16_t port, const unsigned char *, int); - int (*receive_from_sock_cb)(int8_t socket_id, uint8_t address[static 16], uint16_t port, unsigned char *, int); + int (*send_to_sock_cb)(int8_t socket_id, uint8_t address[static 16], uint16_t port, const void *, int); + int (*receive_from_sock_cb)(int8_t socket_id, uint8_t src_address[static 16], uint16_t port, const uint8_t dst_address[static 16], unsigned char *data, int len); int (*get_passwd_cb)(int8_t socket_id, uint8_t address[static 16], uint16_t port, uint8_t *pw_ptr, uint8_t *pw_len); void (*sec_done_cb)(int8_t socket_id, uint8_t address[static 16], uint16_t port, uint8_t keyblock[static 40]); diff --git a/test/coap-service/unittest/stub/coap_message_handler_stub.c b/test/coap-service/unittest/stub/coap_message_handler_stub.c index 36ab9a8661..5df5410d71 100644 --- a/test/coap-service/unittest/stub/coap_message_handler_stub.c +++ b/test/coap-service/unittest/stub/coap_message_handler_stub.c @@ -37,8 +37,8 @@ coap_transaction_t *coap_message_handler_find_transaction(uint8_t *address_ptr, return coap_message_handler_stub.coap_tx_ptr; } -int16_t coap_message_handler_coap_msg_process(coap_msg_handler_t *handle, int8_t socket_id, uint8_t source_addr_ptr[static 16], uint16_t port, - uint8_t *data_ptr, uint16_t data_len, int16_t (cb)(int8_t, sn_coap_hdr_s *, coap_transaction_t *)) +int16_t coap_message_handler_coap_msg_process(coap_msg_handler_t *handle, int8_t socket_id, const uint8_t source_addr_ptr[static 16], uint16_t port, const uint8_t dst_addr_ptr[static 16], + uint8_t *data_ptr, uint16_t data_len, int16_t (cb)(int8_t, sn_coap_hdr_s *, coap_transaction_t *)) { coap_message_handler_stub.cb = cb; return coap_message_handler_stub.int16_value; diff --git a/test/coap-service/unittest/stub/coap_security_handler_stub.c b/test/coap-service/unittest/stub/coap_security_handler_stub.c index 1583dc0aa7..2958b4d453 100644 --- a/test/coap-service/unittest/stub/coap_security_handler_stub.c +++ b/test/coap-service/unittest/stub/coap_security_handler_stub.c @@ -12,8 +12,9 @@ thread_sec_def coap_security_handler_stub; -coap_security_t *coap_security_create(int8_t socket_id, int8_t timer_id, uint8_t *address_ptr, uint16_t port, SecureConnectionMode mode, - int (*send_cb)(int8_t socket_id, uint8_t *address_ptr, uint16_t port, const unsigned char *, size_t), +coap_security_t *coap_security_create(int8_t socket_id, int8_t timer_id, const uint8_t *address_ptr, uint16_t port, + SecureConnectionMode mode, + int (*send_cb)(int8_t socket_id, const uint8_t *address_ptr, uint16_t port, const uint8_t source_addr[static 16], const void *, size_t), int (*receive_cb)(int8_t socket_id, unsigned char *, size_t), void (*start_timer_cb)(int8_t timer_id, uint32_t min, uint32_t fin), int (*timer_status_cb)(int8_t timer_id)) diff --git a/test/coap-service/unittest/stub/coap_security_handler_stub.h b/test/coap-service/unittest/stub/coap_security_handler_stub.h index 2316ffff7d..ab43dab8db 100644 --- a/test/coap-service/unittest/stub/coap_security_handler_stub.h +++ b/test/coap-service/unittest/stub/coap_security_handler_stub.h @@ -27,7 +27,7 @@ typedef struct tsh{ int counter; int values[10]; - int (*send_cb)(int8_t socket_id, uint8_t *address_ptr, uint16_t port, const unsigned char *, size_t); + int (*send_cb)(int8_t socket_id, const uint8_t *address_ptr, uint16_t port, const void *, size_t); int (*receive_cb)(int8_t socket_id, unsigned char *, size_t); void (*start_timer_cb)(int8_t timer_id, uint32_t min, uint32_t fin); int (*timer_status_cb)(int8_t timer_id); diff --git a/test/coap-service/unittest/stub/randLIB_stub.c b/test/coap-service/unittest/stub/randLIB_stub.c index 2b4ae0acab..29f22e1086 100644 --- a/test/coap-service/unittest/stub/randLIB_stub.c +++ b/test/coap-service/unittest/stub/randLIB_stub.c @@ -33,12 +33,12 @@ uint32_t randLIB_get_32bit(void) return 0; } -int8_t randLIB_get_n_bytes_random(uint8_t *data_ptr, uint8_t eight_bit_boundary) +void *randLIB_get_n_bytes_random(void *data_ptr, uint8_t count) { - if(data_ptr && eight_bit_boundary > 0){ - data_ptr[0] = counter++%255; + if(data_ptr && count > 0){ + *((int*)data_ptr) = counter++%255; } - return 0; + return data_ptr; } uint16_t randLIB_get_random_in_range(uint16_t min, uint16_t max) diff --git a/test/coap-service/unittest/stub/socket_api_stub.c b/test/coap-service/unittest/stub/socket_api_stub.c index 685f27d77f..5df8519fbe 100644 --- a/test/coap-service/unittest/stub/socket_api_stub.c +++ b/test/coap-service/unittest/stub/socket_api_stub.c @@ -5,6 +5,7 @@ #include "socket_api_stub.h" socket_api_stub_data_t socket_api_stub; +const uint8_t ns_in6addr_any[16] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; int8_t socket_raw_open(void (*passed_fptr)(void *)) { @@ -116,3 +117,22 @@ int8_t socket_getsockopt(int8_t socket, uint8_t level, uint8_t opt_name, void *o return socket_api_stub.int8_value; } + +int8_t socket_sendmsg(int8_t socket, const ns_msghdr_t *msg, int flags) +{ + if( socket_api_stub.counter >= 0){ + return socket_api_stub.values[socket_api_stub.counter--]; + } + + return socket_api_stub.int8_value; +} + +int16_t socket_recvmsg(int8_t socket, ns_msghdr_t *msg, int flags) +{ + return -1; +} + +ns_cmsghdr_t *NS_CMSG_NXTHDR(const ns_msghdr_t *msgh, const ns_cmsghdr_t *cmsg) +{ + return NULL; +} From ac8ddafffd2ba9ae59a6f9a271de3e0e06f5b6b5 Mon Sep 17 00:00:00 2001 From: Kevin Bracey Date: Thu, 20 Oct 2016 10:54:03 +0100 Subject: [PATCH 139/154] Restructure connection and security Make connection handler deal with all addressing, and hide the internals of security handler. Will allow security handler code to be stubbed out if mbed TLS is not available. --- source/coap_connection_handler.c | 34 +++++++------ source/coap_security_handler.c | 50 +++++++++++++++++-- source/include/coap_security_handler.h | 41 +++------------ .../test_coap_connection_handler.c | 24 ++------- .../test_coap_security_handler.c | 31 +++++------- .../unittest/makefile_defines.txt | 2 +- .../stub/coap_security_handler_stub.c | 25 ++++++++-- .../stub/coap_security_handler_stub.h | 2 + 8 files changed, 114 insertions(+), 95 deletions(-) diff --git a/source/coap_connection_handler.c b/source/coap_connection_handler.c index 94770b83a5..2d607a22c3 100644 --- a/source/coap_connection_handler.c +++ b/source/coap_connection_handler.c @@ -64,6 +64,9 @@ typedef struct secure_session { coap_security_t *sec_handler; //owned internal_socket_t *parent; //not owned + uint8_t remote_address[16]; + uint16_t remote_port; + secure_timer_t timer; session_state_t session_state; @@ -72,7 +75,7 @@ typedef struct secure_session { } secure_session_t; static NS_LIST_DEFINE(secure_session_list, secure_session_t, link); -static int send_to_socket(int8_t socket_id, const uint8_t *address_ptr, uint16_t port, const uint8_t source_addr[static 16], const void *buf, size_t len); +static int send_to_socket(int8_t socket_id, void *handle, const void *buf, size_t len); static int receive_from_socket(int8_t socket_id, unsigned char *buf, size_t len); static void start_timer(int8_t timer_id, uint32_t int_ms, uint32_t fin_ms); static int timer_status(int8_t timer_id); @@ -146,8 +149,10 @@ static secure_session_t *secure_session_create(internal_socket_t *parent, const timer_id++; } this->timer.id = timer_id; + memcpy(this->remote_address, address_ptr, 16); + this->remote_port = port; - this->sec_handler = coap_security_create(parent->listen_socket, this->timer.id, address_ptr, port, ECJPAKE, + this->sec_handler = coap_security_create(parent->listen_socket, this->timer.id, this, ECJPAKE, &send_to_socket, &receive_from_socket, &start_timer, &timer_status); if( !this->sec_handler ){ ns_dyn_mem_free(this); @@ -178,8 +183,8 @@ static secure_session_t *secure_session_find(internal_socket_t *parent, const ui secure_session_t *this = NULL; ns_list_foreach(secure_session_t, cur_ptr, &secure_session_list) { if( cur_ptr->sec_handler ){ - if (cur_ptr->parent == parent && cur_ptr->sec_handler->_remote_port == port && - memcmp(cur_ptr->sec_handler->_remote_address, address_ptr, 16) == 0) { + if (cur_ptr->parent == parent && cur_ptr->remote_port == port && + memcmp(cur_ptr->remote_address, address_ptr, 16) == 0) { this = cur_ptr; // hack_save_remote_address(address_ptr, port); break; @@ -329,15 +334,16 @@ static int8_t send_to_real_socket(int8_t socket_id, const ns_address_t *address, return socket_sendmsg(socket_id, &msghdr, 0); } -static int send_to_socket(int8_t socket_id, const uint8_t *address_ptr, uint16_t port, const uint8_t source_addr[static 16], const void *buf, size_t len) +static int send_to_socket(int8_t socket_id, void *handle, const void *buf, size_t len) { + secure_session_t *session = handle; internal_socket_t *sock = int_socket_find_by_socket_id(socket_id); if(!sock){ return -1; } if(!sock->real_socket){ // Send to virtual socket cb - int ret = sock->parent->_send_cb(sock->listen_socket, address_ptr, port, buf, len); + int ret = sock->parent->_send_cb(sock->listen_socket, session->remote_address, session->remote_port, buf, len); if( ret < 0 ) return ret; return len; @@ -353,7 +359,7 @@ static int send_to_socket(int8_t socket_id, const uint8_t *address_ptr, uint16_t //For some reason socket_sendto returns 0 in success, while other socket impls return number of bytes sent!!! //TODO: check if address_ptr is valid and use that instead if it is - int8_t ret = send_to_real_socket(sock->listen_socket, &sock->dest_addr, source_addr, buf, len); + int8_t ret = send_to_real_socket(sock->listen_socket, &sock->dest_addr, session->remote_address, buf, len); if (ret < 0) { return ret; } @@ -536,8 +542,8 @@ static void secure_recv_sckt_msg(void *cb_res) } session->last_contact_time = coap_service_get_internal_timer_ticks(); // Start handshake - if (!session->sec_handler->_is_started) { - uint8_t *pw = (uint8_t *)ns_dyn_mem_alloc(64); + if (!coap_security_handler_is_started(session->sec_handler) ){ + uint8_t *pw = ns_dyn_mem_alloc(64); uint8_t pw_len; if( sock->parent->_get_password_cb && 0 == sock->parent->_get_password_cb(sock->listen_socket, src_address.address, src_address.identifier, pw, &pw_len)){ //TODO: get_password_cb should support certs and PSK also @@ -560,7 +566,7 @@ static void secure_recv_sckt_msg(void *cb_res) if( sock->parent->_security_done_cb ){ sock->parent->_security_done_cb(sock->listen_socket, src_address.address, src_address.identifier, - session->sec_handler->_keyblk.value); + (void *)coap_security_handler_keyblock(session->sec_handler)); } } else if (ret < 0){ // error handling @@ -641,8 +647,8 @@ int coap_connection_handler_virtual_recv(coap_conn_handler_t *handler, uint8_t a session->last_contact_time = coap_service_get_internal_timer_ticks(); - if (!session->sec_handler->_is_started) { - uint8_t *pw = (uint8_t *)ns_dyn_mem_alloc(64); + if (!coap_security_handler_is_started(session->sec_handler)) { + uint8_t *pw = ns_dyn_mem_alloc(64); uint8_t pw_len; if (sock->parent->_get_password_cb && 0 == sock->parent->_get_password_cb(sock->listen_socket, address, port, pw, &pw_len)) { //TODO: get_password_cb should support certs and PSK also @@ -665,7 +671,7 @@ int coap_connection_handler_virtual_recv(coap_conn_handler_t *handler, uint8_t a if( handler->_security_done_cb ){ handler->_security_done_cb(sock->listen_socket, address, port, - session->sec_handler->_keyblk.value); + (void *)coap_security_handler_keyblock(session->sec_handler)); } return 0; } @@ -807,7 +813,7 @@ int coap_connection_handler_send_data(coap_conn_handler_t *handler, const ns_add memcpy( handler->socket->dest_addr.address, dest_addr->address, 16 ); handler->socket->dest_addr.identifier = dest_addr->identifier; handler->socket->dest_addr.type = dest_addr->type; - uint8_t *pw = (uint8_t *)ns_dyn_mem_alloc(64); + uint8_t *pw = ns_dyn_mem_alloc(64); if (!pw) { //todo: free secure session? return -1; diff --git a/source/coap_security_handler.c b/source/coap_security_handler.c index 959b0fd0cc..6ba14ce466 100644 --- a/source/coap_security_handler.c +++ b/source/coap_security_handler.c @@ -20,6 +20,37 @@ #include "mbedtls/ssl_ciphersuites.h" #include "socket_api.h" +struct coap_security_s { + mbedtls_ssl_config _conf; + mbedtls_ssl_context _ssl; + + mbedtls_ctr_drbg_context _ctr_drbg; + mbedtls_entropy_context _entropy; + bool _is_started; + simple_cookie_t _cookie; + key_block_t _keyblk; + + SecureConnectionMode _conn_mode; +#if defined(MBEDTLS_X509_CRT_PARSE_C) + mbedtls_x509_crt _cacert; + mbedtls_x509_crt _owncert; +#endif + mbedtls_pk_context _pkey; + + uint8_t _pw[64]; + uint8_t _pw_len; + + bool _is_blocking; + int8_t _socket_id; + int8_t _timer_id; + void *_handle; + send_cb *_send_cb; + receive_cb *_receive_cb; + start_timer_cb *_start_timer_cb; + timer_status_cb *_timer_status_cb; + +}; + #if defined(MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED) const int ECJPAKE_SUITES[] = { MBEDTLS_TLS_ECJPAKE_WITH_AES_128_CCM_8, @@ -78,6 +109,16 @@ static int coap_security_handler_init(coap_security_t *sec){ return 0; } +bool coap_security_handler_is_started(const coap_security_t *sec) +{ + return sec->_is_started; +} + +const void *coap_security_handler_keyblock(const coap_security_t *sec) +{ + return sec->_keyblk.value; +} + static void coap_security_handler_reset(coap_security_t *sec){ #if defined(MBEDTLS_X509_CRT_PARSE_C) mbedtls_x509_crt_free(&sec->_cacert); @@ -93,13 +134,13 @@ static void coap_security_handler_reset(coap_security_t *sec){ } -coap_security_t *coap_security_create(int8_t socket_id, int8_t timer_id, const uint8_t *address_ptr, uint16_t port, SecureConnectionMode mode, +coap_security_t *coap_security_create(int8_t socket_id, int8_t timer_id, void *handle, SecureConnectionMode mode, send_cb *socket_cb, receive_cb *receive_data_cb, start_timer_cb *timer_start_cb, timer_status_cb *timer_stat_cb) { - if (!address_ptr || socket_cb == NULL || receive_data_cb == NULL || timer_start_cb == NULL || timer_stat_cb == NULL) { + if (socket_cb == NULL || receive_data_cb == NULL || timer_start_cb == NULL || timer_stat_cb == NULL) { return NULL; } coap_security_t *this = ns_dyn_mem_alloc(sizeof(coap_security_t)); @@ -111,8 +152,7 @@ coap_security_t *coap_security_create(int8_t socket_id, int8_t timer_id, const u ns_dyn_mem_free(this); return NULL; } - this->_remote_port = port; - memcpy(this->_remote_address, address_ptr, 16); + this->_handle = handle; this->_conn_mode = mode; memset(this->_pw, 0, 64); this->_pw_len = 0; @@ -552,7 +592,7 @@ static int get_timer(void *sec_obj) int f_send( void *ctx, const unsigned char *buf, size_t len){ coap_security_t *sec = (coap_security_t *)ctx; - return sec->_send_cb(sec->_socket_id, sec->_remote_address, sec->_remote_port, ns_in6addr_any, buf, len); + return sec->_send_cb(sec->_socket_id, sec->_handle, buf, len); } int f_recv(void *ctx, unsigned char *buf, size_t len){ diff --git a/source/include/coap_security_handler.h b/source/include/coap_security_handler.h index e5a7ad0008..044f82f52c 100644 --- a/source/include/coap_security_handler.h +++ b/source/include/coap_security_handler.h @@ -38,7 +38,7 @@ typedef struct key_block { unsigned char value[KEY_BLOCK_LEN]; } key_block_t; -typedef int send_cb(int8_t socket_id, const uint8_t *address_ptr, uint16_t port, const uint8_t source_addr[static 16], const void *, size_t); +typedef int send_cb(int8_t socket_id, void *handle, const void *buf, size_t); typedef int receive_cb(int8_t socket_id, unsigned char *, size_t); typedef void start_timer_cb(int8_t timer_id, uint32_t min, uint32_t fin); typedef int timer_status_cb(int8_t timer_id); @@ -66,40 +66,9 @@ typedef struct { uint8_t _priv_len; } coap_security_keys_t; -typedef struct coap_security_s { - mbedtls_ssl_config _conf; - mbedtls_ssl_context _ssl; +typedef struct coap_security_s coap_security_t; - mbedtls_ctr_drbg_context _ctr_drbg; - mbedtls_entropy_context _entropy; - bool _is_started; - simple_cookie_t _cookie; - key_block_t _keyblk; - - SecureConnectionMode _conn_mode; -#if defined(MBEDTLS_X509_CRT_PARSE_C) - mbedtls_x509_crt _cacert; - mbedtls_x509_crt _owncert; -#endif - mbedtls_pk_context _pkey; - - uint8_t _remote_address[16]; - uint16_t _remote_port; - - uint8_t _pw[64]; - uint8_t _pw_len; - - bool _is_blocking; - int8_t _socket_id; - int8_t _timer_id; - send_cb *_send_cb; - receive_cb *_receive_cb; - start_timer_cb *_start_timer_cb; - timer_status_cb *_timer_status_cb; - -} coap_security_t; - -coap_security_t *coap_security_create(int8_t socket_id, int8_t timer_id, const uint8_t *address_ptr, uint16_t port, +coap_security_t *coap_security_create(int8_t socket_id, int8_t timer_id, void *handle, SecureConnectionMode mode, send_cb *send_cb, receive_cb *receive_cb, @@ -120,4 +89,8 @@ int coap_security_send_close_alert(coap_security_t *sec); int coap_security_handler_read(coap_security_t *sec, unsigned char* buffer, size_t len); +bool coap_security_handler_is_started(const coap_security_t *sec); + +const void *coap_security_handler_keyblock(const coap_security_t *sec); + #endif diff --git a/test/coap-service/unittest/coap_connection_handler/test_coap_connection_handler.c b/test/coap-service/unittest/coap_connection_handler/test_coap_connection_handler.c index 73ce1c08ff..98225a201e 100644 --- a/test/coap-service/unittest/coap_connection_handler/test_coap_connection_handler.c +++ b/test/coap-service/unittest/coap_connection_handler/test_coap_connection_handler.c @@ -123,10 +123,7 @@ bool test_coap_connection_handler_send_data() connection_handler_destroy(handler); - coap_security_handler_stub.sec_obj = (coap_security_t *)malloc(sizeof(coap_security_t)); - memset(coap_security_handler_stub.sec_obj, 0, sizeof(coap_security_t)); - coap_security_handler_stub.sec_obj->_remote_port = 22; - memset(coap_security_handler_stub.sec_obj->_remote_address, 1, 16 ); + coap_security_handler_stub.sec_obj = coap_security_handler_stub_alloc(); nsdynmemlib_stub.returnCounter = 1; handler = connection_handler_create(&receive_from_sock_cb, &send_to_sock_cb, NULL, NULL); @@ -200,10 +197,7 @@ bool test_coap_connection_handler_virtual_recv() return false; //handler->socket->data still in memory - coap_security_handler_stub.sec_obj = (coap_security_t *)malloc(sizeof(coap_security_t)); - memset(coap_security_handler_stub.sec_obj, 0, sizeof(coap_security_t)); - coap_security_handler_stub.sec_obj->_remote_port = 55; - memset(coap_security_handler_stub.sec_obj->_remote_address, 4, 16 ); + coap_security_handler_stub.sec_obj = coap_security_handler_stub_alloc(); ns_timer_stub.int8_value = -1; nsdynmemlib_stub.returnCounter = 3; @@ -229,8 +223,6 @@ bool test_coap_connection_handler_virtual_recv() nsdynmemlib_stub.returnCounter = 1; coap_security_handler_stub.int_value = 0; - coap_security_handler_stub.sec_obj->_remote_port = 12; - memset(coap_security_handler_stub.sec_obj->_remote_address, 1, 16 ); if( 0 != coap_connection_handler_virtual_recv(handler2,buf, 12, &buf, 1) ) return false; @@ -300,11 +292,7 @@ bool test_timer_callbacks() return false; //handler->socket->data still in memory - coap_security_handler_stub.sec_obj = (coap_security_t *)malloc(sizeof(coap_security_t)); - memset(coap_security_handler_stub.sec_obj, 0, sizeof(coap_security_t)); - coap_security_handler_stub.sec_obj->_remote_port = 55; - memset(coap_security_handler_stub.sec_obj->_remote_address, 4, 16 ); - coap_security_handler_stub.sec_obj->_timer_id = 5; + coap_security_handler_stub.sec_obj = coap_security_handler_stub_alloc(); ns_timer_stub.int8_value = 0; nsdynmemlib_stub.returnCounter = 3; @@ -353,8 +341,7 @@ bool test_socket_api_callbacks() socket_callback_t *sckt_data = (socket_callback_t *)malloc(sizeof(socket_callback_t)); memset(sckt_data, 0, sizeof(socket_callback_t)); - coap_security_handler_stub.sec_obj = (coap_security_t *)malloc(sizeof(coap_security_t)); - memset(coap_security_handler_stub.sec_obj, 0, sizeof(coap_security_t)); + coap_security_handler_stub.sec_obj = coap_security_handler_stub_alloc(); socket_api_stub.int8_value = 0; nsdynmemlib_stub.returnCounter = 1; @@ -433,8 +420,7 @@ bool test_security_callbacks() socket_callback_t *sckt_data = (socket_callback_t *)malloc(sizeof(socket_callback_t)); memset(sckt_data, 0, sizeof(socket_callback_t)); - coap_security_handler_stub.sec_obj = (coap_security_t *)malloc(sizeof(coap_security_t)); - memset(coap_security_handler_stub.sec_obj, 0, sizeof(coap_security_t)); + coap_security_handler_stub.sec_obj = coap_security_handler_stub_alloc(); nsdynmemlib_stub.returnCounter = 1; coap_conn_handler_t *handler = connection_handler_create(&receive_from_sock_cb, &send_to_sock_cb, NULL, NULL); diff --git a/test/coap-service/unittest/coap_security_handler/test_coap_security_handler.c b/test/coap-service/unittest/coap_security_handler/test_coap_security_handler.c index 6585a9ed4c..9d777ca242 100644 --- a/test/coap-service/unittest/coap_security_handler/test_coap_security_handler.c +++ b/test/coap-service/unittest/coap_security_handler/test_coap_security_handler.c @@ -8,7 +8,7 @@ #include "mbedtls_stub.h" #include "mbedtls/ssl.h" -static int send_to_socket(int8_t socket_id, uint8_t *address_ptr, uint16_t port, const unsigned char *buf, size_t len) +static int send_to_socket(int8_t socket_id, void *handle, const unsigned char *buf, size_t len) { } @@ -30,27 +30,26 @@ static int timer_status_callback(int8_t timer_id) bool test_thread_security_create() { - uint8_t buf[16]; - if( NULL != coap_security_create(1,2,&buf,12,ECJPAKE,&send_to_socket, &receive_from_socket, &start_timer_callback, NULL) ) + if( NULL != coap_security_create(1,2,NULL,ECJPAKE,&send_to_socket, &receive_from_socket, &start_timer_callback, NULL) ) return false; - if( NULL != coap_security_create(1,2,&buf,12,ECJPAKE,&send_to_socket, &receive_from_socket, &start_timer_callback, &timer_status_callback) ) + if( NULL != coap_security_create(1,2,NULL,ECJPAKE,&send_to_socket, &receive_from_socket, &start_timer_callback, &timer_status_callback) ) return false; nsdynmemlib_stub.returnCounter = 1; mbedtls_stub.expected_int = -1; - if( NULL != coap_security_create(1,2,&buf,12,ECJPAKE,&send_to_socket, &receive_from_socket, &start_timer_callback, &timer_status_callback) ) + if( NULL != coap_security_create(1,2,NULL,ECJPAKE,&send_to_socket, &receive_from_socket, &start_timer_callback, &timer_status_callback) ) return false; mbedtls_stub.expected_int = 0; nsdynmemlib_stub.returnCounter = 2; mbedtls_stub.crt_expected_int = -1; - if( NULL != coap_security_create(1,2,&buf,12,ECJPAKE,&send_to_socket, &receive_from_socket, &start_timer_callback, &timer_status_callback) ) + if( NULL != coap_security_create(1,2,NULL,ECJPAKE,&send_to_socket, &receive_from_socket, &start_timer_callback, &timer_status_callback) ) return false; nsdynmemlib_stub.returnCounter = 2; mbedtls_stub.crt_expected_int = 0; - coap_security_t *handle = coap_security_create(1,2,&buf,12,ECJPAKE,&send_to_socket, &receive_from_socket, &start_timer_callback, &timer_status_callback); + coap_security_t *handle = coap_security_create(1,2,NULL,ECJPAKE,&send_to_socket, &receive_from_socket, &start_timer_callback, &timer_status_callback); if( NULL == handle ) return false; @@ -61,10 +60,9 @@ bool test_thread_security_create() bool test_thread_security_destroy() { - uint8_t buf[16]; nsdynmemlib_stub.returnCounter = 2; mbedtls_stub.crt_expected_int = 0; - coap_security_t *handle = coap_security_create(1,2,&buf,12,ECJPAKE,&send_to_socket, &receive_from_socket, &start_timer_callback, &timer_status_callback); + coap_security_t *handle = coap_security_create(1,2,NULL,ECJPAKE,&send_to_socket, &receive_from_socket, &start_timer_callback, &timer_status_callback); if( NULL == handle ) return false; @@ -74,10 +72,9 @@ bool test_thread_security_destroy() bool test_coap_security_handler_connect() { - uint8_t buf[16]; nsdynmemlib_stub.returnCounter = 2; mbedtls_stub.crt_expected_int = 0; - coap_security_t *handle = coap_security_create(1,2,&buf,12,ECJPAKE,&send_to_socket, &receive_from_socket, &start_timer_callback, &timer_status_callback); + coap_security_t *handle = coap_security_create(1,2,NULL,ECJPAKE,&send_to_socket, &receive_from_socket, &start_timer_callback, &timer_status_callback); if( NULL == handle ) return false; @@ -176,10 +173,9 @@ bool test_coap_security_handler_connect() bool test_coap_security_handler_continue_connecting() { - uint8_t buf[16]; nsdynmemlib_stub.returnCounter = 2; mbedtls_stub.crt_expected_int = 0; - coap_security_t *handle = coap_security_create(1,2,&buf,12,ECJPAKE,&send_to_socket, &receive_from_socket, &start_timer_callback, &timer_status_callback); + coap_security_t *handle = coap_security_create(1,2,NULL,ECJPAKE,&send_to_socket, &receive_from_socket, &start_timer_callback, &timer_status_callback); if( NULL == handle ) return false; @@ -224,10 +220,9 @@ bool test_coap_security_handler_continue_connecting() bool test_coap_security_handler_send_message() { - uint8_t buf[16]; nsdynmemlib_stub.returnCounter = 2; mbedtls_stub.crt_expected_int = 0; - coap_security_t *handle = coap_security_create(1,2,&buf,12,ECJPAKE,&send_to_socket, &receive_from_socket, &start_timer_callback, &timer_status_callback); + coap_security_t *handle = coap_security_create(1,2,NULL,ECJPAKE,&send_to_socket, &receive_from_socket, &start_timer_callback, &timer_status_callback); if( NULL == handle ) return false; @@ -245,10 +240,9 @@ bool test_coap_security_handler_send_message() bool test_thread_security_send_close_alert() { - uint8_t buf[16]; nsdynmemlib_stub.returnCounter = 2; mbedtls_stub.crt_expected_int = 0; - coap_security_t *handle = coap_security_create(1,2,&buf,12,ECJPAKE,&send_to_socket, &receive_from_socket, &start_timer_callback, &timer_status_callback); + coap_security_t *handle = coap_security_create(1,2,NULL,ECJPAKE,&send_to_socket, &receive_from_socket, &start_timer_callback, &timer_status_callback); if( NULL == handle ) return false; @@ -265,10 +259,9 @@ bool test_thread_security_send_close_alert() bool test_coap_security_handler_read() { - uint8_t buf[16]; nsdynmemlib_stub.returnCounter = 2; mbedtls_stub.crt_expected_int = 0; - coap_security_t *handle = coap_security_create(1,2,&buf,12,ECJPAKE,&send_to_socket, &receive_from_socket, &start_timer_callback, &timer_status_callback); + coap_security_t *handle = coap_security_create(1,2,NULL,ECJPAKE,&send_to_socket, &receive_from_socket, &start_timer_callback, &timer_status_callback); if( NULL == handle ) return false; diff --git a/test/coap-service/unittest/makefile_defines.txt b/test/coap-service/unittest/makefile_defines.txt index 9991a6eaaf..b3346512cb 100755 --- a/test/coap-service/unittest/makefile_defines.txt +++ b/test/coap-service/unittest/makefile_defines.txt @@ -32,7 +32,7 @@ INCLUDE_DIRS =\ $(CPPUTEST_HOME)/include\ CPPUTESTFLAGS = -D__thumb2__ -w -CPPUTEST_CFLAGS += -std=gnu99 +CPPUTEST_CFLAGS += -std=gnu99 -DNS_USE_EXTERNAL_MBED_TLS #if you need to use -std=c++11 or c++0x you need to uncomment this #CPPUTESTFLAGS += -DCPPUTEST_STD_CPP_LIB_DISABLED diff --git a/test/coap-service/unittest/stub/coap_security_handler_stub.c b/test/coap-service/unittest/stub/coap_security_handler_stub.c index 2958b4d453..3e68d37706 100644 --- a/test/coap-service/unittest/stub/coap_security_handler_stub.c +++ b/test/coap-service/unittest/stub/coap_security_handler_stub.c @@ -12,9 +12,12 @@ thread_sec_def coap_security_handler_stub; -coap_security_t *coap_security_create(int8_t socket_id, int8_t timer_id, const uint8_t *address_ptr, uint16_t port, - SecureConnectionMode mode, - int (*send_cb)(int8_t socket_id, const uint8_t *address_ptr, uint16_t port, const uint8_t source_addr[static 16], const void *, size_t), +struct coap_security_s { + bool _is_started; +}; + +coap_security_t *coap_security_create(int8_t socket_id, int8_t timer_id, void *handle, SecureConnectionMode mode, + int (*send_cb)(int8_t socket_id, void *handle, const void *, size_t), int (*receive_cb)(int8_t socket_id, unsigned char *, size_t), void (*start_timer_cb)(int8_t timer_id, uint32_t min, uint32_t fin), int (*timer_status_cb)(int8_t timer_id)) @@ -26,6 +29,12 @@ coap_security_t *coap_security_create(int8_t socket_id, int8_t timer_id, const u return coap_security_handler_stub.sec_obj; } +coap_security_t *coap_security_handler_stub_alloc(void) +{ + return calloc(1, sizeof(coap_security_t)); +} + + void coap_security_destroy(coap_security_t *sec) { @@ -73,3 +82,13 @@ int coap_security_handler_read(coap_security_t *sec, unsigned char* buffer, size } return coap_security_handler_stub.int_value; } + +bool coap_security_handler_is_started(const coap_security_t *sec) +{ + return sec->_is_started; +} + +const void *coap_security_handler_keyblock(const coap_security_t *sec) +{ + return NULL; +} diff --git a/test/coap-service/unittest/stub/coap_security_handler_stub.h b/test/coap-service/unittest/stub/coap_security_handler_stub.h index ab43dab8db..cbd0f7a132 100644 --- a/test/coap-service/unittest/stub/coap_security_handler_stub.h +++ b/test/coap-service/unittest/stub/coap_security_handler_stub.h @@ -35,4 +35,6 @@ typedef struct tsh{ extern thread_sec_def coap_security_handler_stub; +coap_security_t *coap_security_handler_stub_alloc(void); + #endif //__COAP_SECURITY_HANDLER_STUB_H__ From e6b2d21d1db1d4ba2cdcf5a3ff8bf933a30aa475 Mon Sep 17 00:00:00 2001 From: Kevin Bracey Date: Thu, 20 Oct 2016 09:03:26 +0100 Subject: [PATCH 140/154] Allow build without SSL NS_USE_EXTERNAL_MBED_TLS now controls whether we attempt to include mbedTLS header files at all, and after including them, we check whether SSL/TLS is enabled. If not, we provide non-secure operation only. --- source/coap_connection_handler.c | 4 +++ source/coap_security_handler.c | 14 ++++++++--- source/include/coap_security_handler.h | 34 +++++++++++++++++++++++--- 3 files changed, 44 insertions(+), 8 deletions(-) diff --git a/source/coap_connection_handler.c b/source/coap_connection_handler.c index 2d607a22c3..702e4f0398 100644 --- a/source/coap_connection_handler.c +++ b/source/coap_connection_handler.c @@ -224,7 +224,11 @@ static internal_socket_t *int_socket_create(uint16_t listen_port, bool use_ephem if( !is_secure ){ this->listen_socket = socket_open(SOCKET_UDP, listen_port, recv_sckt_msg); }else{ +#ifdef COAP_SECURITY_AVAILABLE this->listen_socket = socket_open(SOCKET_UDP, listen_port, secure_recv_sckt_msg); +#else + tr_err("Secure CoAP unavailable - SSL library not configured, possibly due to lack of entropy source"); +#endif } // Socket create failed if(this->listen_socket < 0){ diff --git a/source/coap_security_handler.c b/source/coap_security_handler.c index 6ba14ce466..5b4326a3bc 100644 --- a/source/coap_security_handler.c +++ b/source/coap_security_handler.c @@ -6,19 +6,23 @@ #include #include +#include "coap_security_handler.h" + +#ifdef COAP_SECURITY_AVAILABLE + #include "mbedtls/sha256.h" #include "mbedtls/error.h" #include "mbedtls/platform.h" #include "mbedtls/ssl_cookie.h" +#include "mbedtls/entropy.h" #include "mbedtls/entropy_poll.h" -#include "mbedtls/ssl.h" +#include "mbedtls/ctr_drbg.h" +#include "mbedtls/ssl_ciphersuites.h" + #include "ns_trace.h" #include "nsdynmemLIB.h" #include "coap_connection_handler.h" -#include "coap_security_handler.h" #include "randLIB.h" -#include "mbedtls/ssl_ciphersuites.h" -#include "socket_api.h" struct coap_security_s { mbedtls_ssl_config _conf; @@ -620,3 +624,5 @@ int entropy_poll( void *ctx, unsigned char *output, size_t len, ns_dyn_mem_free(c); return( 0 ); } + +#endif // COAP_SECURITY_AVAILABLE diff --git a/source/include/coap_security_handler.h b/source/include/coap_security_handler.h index 044f82f52c..a2c8bfcb24 100644 --- a/source/include/coap_security_handler.h +++ b/source/include/coap_security_handler.h @@ -21,11 +21,13 @@ #include #include #include -#include "mbedtls/platform.h" + +#ifdef NS_USE_EXTERNAL_MBED_TLS #include "mbedtls/ssl.h" -#include "mbedtls/sha256.h" -#include "mbedtls/entropy.h" -#include "mbedtls/ctr_drbg.h" +#ifdef MBEDTLS_SSL_TLS_C +#define COAP_SECURITY_AVAILABLE +#endif +#endif #define COOKIE_SIMPLE_LEN 8 typedef struct simple_cookie { @@ -68,6 +70,8 @@ typedef struct { typedef struct coap_security_s coap_security_t; +#ifdef COAP_SECURITY_AVAILABLE + coap_security_t *coap_security_create(int8_t socket_id, int8_t timer_id, void *handle, SecureConnectionMode mode, send_cb *send_cb, @@ -93,4 +97,26 @@ bool coap_security_handler_is_started(const coap_security_t *sec); const void *coap_security_handler_keyblock(const coap_security_t *sec); +#else + +/* Dummy definitions, including needed error codes */ +#define MBEDTLS_ERR_SSL_TIMEOUT (-1) +#define MBEDTLS_ERR_SSL_WANT_READ (-2) +#define MBEDTLS_ERR_SSL_WANT_WRITE (-3) +#define MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE (-4) + +#define coap_security_create(socket_id, timer_id, handle, \ + mode, send_cb, receive_cb, start_timer_cb, timer_status_cb) ((coap_security_t *) 0) +#define coap_security_destroy(sec) ((void) 0) +#define coap_security_handler_connect(sec, is_server, sock_mode, keys) (-1) +#define coap_security_handler_connect_non_blocking(sec, is_server, sock_mode, keys, timeout_min, timeout_max) (-1) +#define coap_security_handler_continue_connecting(sec) (-1) +#define coap_security_handler_send_message(sec, message, len) (-1) +#define coap_security_send_close_alert(sec) (-1) +#define coap_security_handler_read(sec, buffer, len) (-1) +#define coap_security_handler_is_started(sec) false +#define coap_security_handler_keyblock(sec) ((void *) 0) + +#endif /* COAP_SECURITY_AVAILABLE */ + #endif From b4b504122396da3c5b60fd031352ea8e04ec3177 Mon Sep 17 00:00:00 2001 From: Arto Kinnunen Date: Wed, 26 Oct 2016 11:10:58 +0300 Subject: [PATCH 141/154] Update unittest script (#42) --- run_unit_tests.sh | 2 -- 1 file changed, 2 deletions(-) diff --git a/run_unit_tests.sh b/run_unit_tests.sh index 0fed9ad320..b29b0a963e 100755 --- a/run_unit_tests.sh +++ b/run_unit_tests.sh @@ -17,7 +17,5 @@ echo echo "Build coap service unit tests" echo -yt target x86-linux-native -yt up make -f Makefile.test test make -f Makefile.test test clean From 115aa3eee2d508a2c09abbff2ed364c706ed8df7 Mon Sep 17 00:00:00 2001 From: Tero Heinonen Date: Thu, 27 Oct 2016 09:42:59 +0300 Subject: [PATCH 142/154] Delete all transactions when secure session is closed (#41) When handshake fails, or DTLS session is closed, all transactions must be removed from coap protocol retransmission queue. Otherwise coap retransmission will start new handshake. --- source/coap_connection_handler.c | 2 ++ source/coap_message_handler.c | 11 +++++++++++ source/include/coap_message_handler.h | 2 ++ source/include/coap_service_api_internal.h | 4 ++++ .../unittest/coap_connection_handler/Makefile | 1 + .../unittest/stub/coap_message_handler_stub.c | 4 ++++ .../unittest/stub/coap_service_api_stub.c | 2 ++ .../unittest/stub/sn_coap_protocol_stub.c | 4 ++++ 8 files changed, 30 insertions(+) diff --git a/source/coap_connection_handler.c b/source/coap_connection_handler.c index 702e4f0398..8361dcb199 100644 --- a/source/coap_connection_handler.c +++ b/source/coap_connection_handler.c @@ -95,6 +95,7 @@ static secure_session_t *secure_session_find_by_timer_id(int8_t timer_id) static void secure_session_delete(secure_session_t *this) { if (this) { + transactions_delete_all(this->parent->dest_addr.address, this->parent->dest_addr.identifier); ns_list_remove(&secure_session_list, this); if( this->sec_handler ){ coap_security_destroy(this->sec_handler); @@ -529,6 +530,7 @@ static void secure_recv_sckt_msg(void *cb_res) internal_socket_t *sock = int_socket_find_by_socket_id(sckt_data->socket_id); ns_address_t src_address; uint8_t dst_address[16]; + memset(&src_address, 0, sizeof(ns_address_t)); if (sock && read_data(sckt_data, sock, &src_address, dst_address) == 0) { secure_session_t *session = secure_session_find(sock, src_address.address, src_address.identifier); diff --git a/source/coap_message_handler.c b/source/coap_message_handler.c index 6fbb3f8ea3..e44965d8f7 100644 --- a/source/coap_message_handler.c +++ b/source/coap_message_handler.c @@ -93,6 +93,17 @@ void transaction_delete(coap_transaction_t *this) return; } +void transactions_delete_all(uint8_t *address_ptr, uint16_t port) +{ + coap_transaction_t *transaction = transaction_find_by_address(address_ptr, port); + + while (transaction) { + sn_coap_protocol_delete_retransmission(coap_service_handle->coap, transaction->msg_id); + transaction_delete(transaction); + transaction = transaction_find_by_address(address_ptr, port); + } +} + static int8_t coap_rx_function(sn_coap_hdr_s *resp_ptr, sn_nsdl_addr_s *address_ptr, void *param) { coap_transaction_t *this = NULL; diff --git a/source/include/coap_message_handler.h b/source/include/coap_message_handler.h index a6c751b9bd..2637ee201e 100644 --- a/source/include/coap_message_handler.h +++ b/source/include/coap_message_handler.h @@ -88,4 +88,6 @@ extern int8_t coap_message_handler_exec(coap_msg_handler_t *handle, uint32_t cur extern void transaction_delete(coap_transaction_t *this); +extern void transactions_delete_all(uint8_t *address_ptr, uint16_t port); + #endif diff --git a/source/include/coap_service_api_internal.h b/source/include/coap_service_api_internal.h index 76275a7ce1..19d7d50fc3 100644 --- a/source/include/coap_service_api_internal.h +++ b/source/include/coap_service_api_internal.h @@ -19,6 +19,10 @@ #ifndef __COAP_SERVICE_API_INTERNAL_H__ #define __COAP_SERVICE_API_INTERNAL_H__ +#include "coap_message_handler.h" + + +extern coap_msg_handler_t *coap_service_handle; uint32_t coap_service_get_internal_timer_ticks(void); diff --git a/test/coap-service/unittest/coap_connection_handler/Makefile b/test/coap-service/unittest/coap_connection_handler/Makefile index 4fbe7a72a8..729ee1c443 100644 --- a/test/coap-service/unittest/coap_connection_handler/Makefile +++ b/test/coap-service/unittest/coap_connection_handler/Makefile @@ -18,6 +18,7 @@ TEST_SRC_FILES = \ ../stub/socket_api_stub.c \ ../stub/coap_security_handler_stub.c \ ../stub/coap_service_api_stub.c \ + ../stub/coap_message_handler_stub.c \ include ../MakefileWorker.mk diff --git a/test/coap-service/unittest/stub/coap_message_handler_stub.c b/test/coap-service/unittest/stub/coap_message_handler_stub.c index 5df5410d71..00652259f0 100644 --- a/test/coap-service/unittest/stub/coap_message_handler_stub.c +++ b/test/coap-service/unittest/stub/coap_message_handler_stub.c @@ -22,6 +22,10 @@ void transaction_delete(coap_transaction_t *this) } +void transactions_delete_all(uint8_t *address_ptr, uint16_t port) +{ + +} int8_t coap_message_handler_destroy(coap_msg_handler_t *handle) { return coap_message_handler_stub.int8_value; diff --git a/test/coap-service/unittest/stub/coap_service_api_stub.c b/test/coap-service/unittest/stub/coap_service_api_stub.c index 45bba92764..ba728df32c 100644 --- a/test/coap-service/unittest/stub/coap_service_api_stub.c +++ b/test/coap-service/unittest/stub/coap_service_api_stub.c @@ -18,6 +18,8 @@ #include "common_functions.h" #include "net_interface.h" +coap_msg_handler_t *coap_service_handle = NULL; + int8_t coap_service_initialize(int8_t interface_id, uint16_t listen_port, uint8_t service_options, coap_service_security_start_cb *start_ptr, coap_service_security_done_cb *coap_security_done_cb) { diff --git a/test/coap-service/unittest/stub/sn_coap_protocol_stub.c b/test/coap-service/unittest/stub/sn_coap_protocol_stub.c index 69d0fd4efc..86e4d7f097 100644 --- a/test/coap-service/unittest/stub/sn_coap_protocol_stub.c +++ b/test/coap-service/unittest/stub/sn_coap_protocol_stub.c @@ -94,3 +94,7 @@ coap_send_msg_s *sn_coap_protocol_allocate_mem_for_msg(struct coap_s *handle, sn return sn_coap_protocol_stub.expectedSendMsg; } +int8_t sn_coap_protocol_delete_retransmission(struct coap_s *handle, uint16_t msg_id) +{ + return 0; +} From 6d263723c140ed986a7597f3a091768fa06912aa Mon Sep 17 00:00:00 2001 From: Kevin Bracey Date: Thu, 27 Oct 2016 17:50:36 +0300 Subject: [PATCH 143/154] Fix secure operation; some name and logical tidies Secure sending code was passing the remote address as the source address, bizarrely. This records the local address last used as the destination for incoming packets and uses that. Other fix-ups: * dest_addr (ie remote address) removed from internal_socket_t; this isn't safe, as one socket talks to multiple remote peers. Use address in secure_session_t instead. * Some renaming: listen_socket->socket, send/receive callbacks, remote_address+remote_port -> remote_host --- source/coap_connection_handler.c | 106 +++++++++++++++---------------- 1 file changed, 51 insertions(+), 55 deletions(-) diff --git a/source/coap_connection_handler.c b/source/coap_connection_handler.c index 8361dcb199..19b36ae125 100644 --- a/source/coap_connection_handler.c +++ b/source/coap_connection_handler.c @@ -27,13 +27,12 @@ typedef struct internal_socket_s { uint32_t timeout_min; uint32_t timeout_max; - uint16_t listen_port; - int8_t listen_socket; + uint16_t listen_port; // 0 for ephemeral-port sockets - ns_address_t dest_addr; int16_t data_len; uint8_t *data; + int8_t socket; bool real_socket; uint8_t usage_counter; bool is_secure; @@ -64,8 +63,9 @@ typedef struct secure_session { coap_security_t *sec_handler; //owned internal_socket_t *parent; //not owned - uint8_t remote_address[16]; - uint16_t remote_port; + ns_address_t remote_host; + uint8_t local_address[16]; + // local port is fixed by socket secure_timer_t timer; @@ -75,8 +75,8 @@ typedef struct secure_session { } secure_session_t; static NS_LIST_DEFINE(secure_session_list, secure_session_t, link); -static int send_to_socket(int8_t socket_id, void *handle, const void *buf, size_t len); -static int receive_from_socket(int8_t socket_id, unsigned char *buf, size_t len); +static int secure_session_sendto(int8_t socket_id, void *handle, const void *buf, size_t len); +static int secure_session_recvfrom(int8_t socket_id, unsigned char *buf, size_t len); static void start_timer(int8_t timer_id, uint32_t int_ms, uint32_t fin_ms); static int timer_status(int8_t timer_id); @@ -95,7 +95,7 @@ static secure_session_t *secure_session_find_by_timer_id(int8_t timer_id) static void secure_session_delete(secure_session_t *this) { if (this) { - transactions_delete_all(this->parent->dest_addr.address, this->parent->dest_addr.identifier); + transactions_delete_all(this->remote_host.address, this->remote_host.identifier); ns_list_remove(&secure_session_list, this); if( this->sec_handler ){ coap_security_destroy(this->sec_handler); @@ -150,11 +150,12 @@ static secure_session_t *secure_session_create(internal_socket_t *parent, const timer_id++; } this->timer.id = timer_id; - memcpy(this->remote_address, address_ptr, 16); - this->remote_port = port; + this->remote_host.type = ADDRESS_IPV6; + memcpy(this->remote_host.address, address_ptr, 16); + this->remote_host.identifier = port; - this->sec_handler = coap_security_create(parent->listen_socket, this->timer.id, this, ECJPAKE, - &send_to_socket, &receive_from_socket, &start_timer, &timer_status); + this->sec_handler = coap_security_create(parent->socket, this->timer.id, this, ECJPAKE, + &secure_session_sendto, &secure_session_recvfrom, &start_timer, &timer_status); if( !this->sec_handler ){ ns_dyn_mem_free(this); return NULL; @@ -184,10 +185,9 @@ static secure_session_t *secure_session_find(internal_socket_t *parent, const ui secure_session_t *this = NULL; ns_list_foreach(secure_session_t, cur_ptr, &secure_session_list) { if( cur_ptr->sec_handler ){ - if (cur_ptr->parent == parent && cur_ptr->remote_port == port && - memcmp(cur_ptr->remote_address, address_ptr, 16) == 0) { + if (cur_ptr->parent == parent && cur_ptr->remote_host.identifier == port && + memcmp(cur_ptr->remote_host.address, address_ptr, 16) == 0) { this = cur_ptr; - // hack_save_remote_address(address_ptr, port); break; } } @@ -217,36 +217,36 @@ static internal_socket_t *int_socket_create(uint16_t listen_port, bool use_ephem this->listen_port = listen_port; this->real_socket = real_socket; this->bypass_link_sec = bypassSec; - this->listen_socket = -1; + this->socket = -1; if( real_socket ){ if( use_ephemeral_port ){ //socket_api creates ephemeral port if the one provided is 0 listen_port = 0; } if( !is_secure ){ - this->listen_socket = socket_open(SOCKET_UDP, listen_port, recv_sckt_msg); + this->socket = socket_open(SOCKET_UDP, listen_port, recv_sckt_msg); }else{ #ifdef COAP_SECURITY_AVAILABLE - this->listen_socket = socket_open(SOCKET_UDP, listen_port, secure_recv_sckt_msg); + this->socket = socket_open(SOCKET_UDP, listen_port, secure_recv_sckt_msg); #else tr_err("Secure CoAP unavailable - SSL library not configured, possibly due to lack of entropy source"); #endif } // Socket create failed - if(this->listen_socket < 0){ + if(this->socket < 0){ ns_dyn_mem_free(this); return NULL; } - socket_setsockopt(this->listen_socket, SOCKET_IPPROTO_IPV6, SOCKET_LINK_LAYER_SECURITY, &(const int8_t) {bypassSec ? 0 : 1}, sizeof(int8_t)); + socket_setsockopt(this->socket, SOCKET_IPPROTO_IPV6, SOCKET_LINK_LAYER_SECURITY, &(const int8_t) {bypassSec ? 0 : 1}, sizeof(int8_t)); // XXX API for this? May want to get clever to do recommended first query = 1 hop, retries = whole PAN - socket_setsockopt(this->listen_socket, SOCKET_IPPROTO_IPV6, SOCKET_IPV6_MULTICAST_HOPS, &(const int16_t) {16}, sizeof(int16_t)); + socket_setsockopt(this->socket, SOCKET_IPPROTO_IPV6, SOCKET_IPV6_MULTICAST_HOPS, &(const int16_t) {16}, sizeof(int16_t)); // Set socket option to receive packet info - socket_setsockopt(this->listen_socket, SOCKET_IPPROTO_IPV6, SOCKET_IPV6_RECVPKTINFO, &(const bool) {1}, sizeof(bool)); + socket_setsockopt(this->socket, SOCKET_IPPROTO_IPV6, SOCKET_IPV6_RECVPKTINFO, &(const bool) {1}, sizeof(bool)); }else{ - this->listen_socket = -1; + this->socket = -1; } ns_list_add_to_start(&socket_list, this); @@ -259,7 +259,7 @@ static void int_socket_delete(internal_socket_t *this) this->usage_counter--; if(this->usage_counter == 0){ clear_secure_sessions(this); - socket_free(this->listen_socket); + socket_free(this->socket); ns_list_remove(&socket_list, this); if( this->data ){ ns_dyn_mem_free(this->data); @@ -277,7 +277,7 @@ static internal_socket_t *int_socket_find_by_socket_id(int8_t id) { internal_socket_t *this = NULL; ns_list_foreach(internal_socket_t, cur_ptr, &socket_list) { - if( cur_ptr->listen_socket == id ) { + if( cur_ptr->socket == id ) { this = cur_ptr; break; } @@ -339,7 +339,7 @@ static int8_t send_to_real_socket(int8_t socket_id, const ns_address_t *address, return socket_sendmsg(socket_id, &msghdr, 0); } -static int send_to_socket(int8_t socket_id, void *handle, const void *buf, size_t len) +static int secure_session_sendto(int8_t socket_id, void *handle, const void *buf, size_t len) { secure_session_t *session = handle; internal_socket_t *sock = int_socket_find_by_socket_id(socket_id); @@ -348,7 +348,7 @@ static int send_to_socket(int8_t socket_id, void *handle, const void *buf, size_ } if(!sock->real_socket){ // Send to virtual socket cb - int ret = sock->parent->_send_cb(sock->listen_socket, session->remote_address, session->remote_port, buf, len); + int ret = sock->parent->_send_cb(sock->socket, session->remote_host.address, session->remote_host.identifier, buf, len); if( ret < 0 ) return ret; return len; @@ -359,19 +359,19 @@ static int send_to_socket(int8_t socket_id, void *handle, const void *buf, size_ if (sock->bypass_link_sec) { securityLinkLayer = 0; } - socket_setsockopt(sock->listen_socket, SOCKET_IPPROTO_IPV6, SOCKET_IPV6_ADDR_PREFERENCES, &opt_name, sizeof(int)); - socket_setsockopt(sock->listen_socket, SOCKET_IPPROTO_IPV6, SOCKET_LINK_LAYER_SECURITY, &securityLinkLayer, sizeof(int8_t)); + socket_setsockopt(sock->socket, SOCKET_IPPROTO_IPV6, SOCKET_IPV6_ADDR_PREFERENCES, &opt_name, sizeof(int)); + socket_setsockopt(sock->socket, SOCKET_IPPROTO_IPV6, SOCKET_LINK_LAYER_SECURITY, &securityLinkLayer, sizeof(int8_t)); //For some reason socket_sendto returns 0 in success, while other socket impls return number of bytes sent!!! //TODO: check if address_ptr is valid and use that instead if it is - int8_t ret = send_to_real_socket(sock->listen_socket, &sock->dest_addr, session->remote_address, buf, len); + int8_t ret = send_to_real_socket(sock->socket, &session->remote_host, session->local_address, buf, len); if (ret < 0) { return ret; } return len; } -static int receive_from_socket(int8_t socket_id, unsigned char *buf, size_t len) +static int secure_session_recvfrom(int8_t socket_id, unsigned char *buf, size_t len) { (void)len; internal_socket_t *sock = int_socket_find_by_socket_id(socket_id); @@ -537,21 +537,23 @@ static void secure_recv_sckt_msg(void *cb_res) // Create session if (!session) { - memcpy( sock->dest_addr.address, src_address.address, 16 ); - sock->dest_addr.identifier = src_address.identifier; - sock->dest_addr.type = src_address.type; session = secure_session_create(sock, src_address.address, src_address.identifier); } if (!session) { tr_err("secure_recv_sckt_msg session creation failed - OOM"); return; } + // Record the destination. We are not strict on local address - all + // session_find calls match only on remote address and port. But we + // record the last-used destination address to use it as the source of + // outgoing packets. + memcpy(session->local_address, dst_address, 16); session->last_contact_time = coap_service_get_internal_timer_ticks(); // Start handshake if (!coap_security_handler_is_started(session->sec_handler) ){ uint8_t *pw = ns_dyn_mem_alloc(64); uint8_t pw_len; - if( sock->parent->_get_password_cb && 0 == sock->parent->_get_password_cb(sock->listen_socket, src_address.address, src_address.identifier, pw, &pw_len)){ + if( sock->parent->_get_password_cb && 0 == sock->parent->_get_password_cb(sock->socket, src_address.address, src_address.identifier, pw, &pw_len)){ //TODO: get_password_cb should support certs and PSK also coap_security_keys_t keys; keys._priv = pw; @@ -570,7 +572,7 @@ static void secure_recv_sckt_msg(void *cb_res) session->timer.timer = NULL; session->session_state = SECURE_SESSION_OK; if( sock->parent->_security_done_cb ){ - sock->parent->_security_done_cb(sock->listen_socket, src_address.address, + sock->parent->_security_done_cb(sock->socket, src_address.address, src_address.identifier, (void *)coap_security_handler_keyblock(session->sec_handler)); } @@ -592,7 +594,7 @@ static void secure_recv_sckt_msg(void *cb_res) ns_dyn_mem_free(data); } else { if (sock->parent->_recv_cb) { - sock->parent->_recv_cb(sock->listen_socket, src_address.address, src_address.identifier, dst_address, data, len); + sock->parent->_recv_cb(sock->socket, src_address.address, src_address.identifier, dst_address, data, len); } ns_dyn_mem_free(data); } @@ -610,7 +612,7 @@ static void recv_sckt_msg(void *cb_res) if (sock && read_data(sckt_data, sock, &src_address, dst_address) == 0) { if (sock->parent && sock->parent->_recv_cb) { - sock->parent->_recv_cb(sock->listen_socket, src_address.address, src_address.identifier, dst_address, sock->data, sock->data_len); + sock->parent->_recv_cb(sock->socket, src_address.address, src_address.identifier, dst_address, sock->data, sock->data_len); } ns_dyn_mem_free(sock->data); sock->data = NULL; @@ -656,7 +658,7 @@ int coap_connection_handler_virtual_recv(coap_conn_handler_t *handler, uint8_t a if (!coap_security_handler_is_started(session->sec_handler)) { uint8_t *pw = ns_dyn_mem_alloc(64); uint8_t pw_len; - if (sock->parent->_get_password_cb && 0 == sock->parent->_get_password_cb(sock->listen_socket, address, port, pw, &pw_len)) { + if (sock->parent->_get_password_cb && 0 == sock->parent->_get_password_cb(sock->socket, address, port, pw, &pw_len)) { //TODO: get_password_cb should support certs and PSK also coap_security_keys_t keys; keys._priv = pw; @@ -675,7 +677,7 @@ int coap_connection_handler_virtual_recv(coap_conn_handler_t *handler, uint8_t a if(ret == 0){ session->session_state = SECURE_SESSION_OK; if( handler->_security_done_cb ){ - handler->_security_done_cb(sock->listen_socket, + handler->_security_done_cb(sock->socket, address, port, (void *)coap_security_handler_keyblock(session->sec_handler)); } @@ -700,7 +702,7 @@ int coap_connection_handler_virtual_recv(coap_conn_handler_t *handler, uint8_t a return 0; } else { if (sock->parent->_recv_cb) { - sock->parent->_recv_cb(sock->listen_socket, address, port, ns_in6addr_any, data, len); + sock->parent->_recv_cb(sock->socket, address, port, ns_in6addr_any, data, len); } ns_dyn_mem_free(data); data = NULL; @@ -711,7 +713,7 @@ int coap_connection_handler_virtual_recv(coap_conn_handler_t *handler, uint8_t a } else { /* unsecure*/ if (sock->parent->_recv_cb) { - sock->parent->_recv_cb(sock->listen_socket, address, port, ns_in6addr_any, sock->data, sock->data_len); + sock->parent->_recv_cb(sock->socket, address, port, ns_in6addr_any, sock->data, sock->data_len); } if (sock->data) { ns_dyn_mem_free(sock->data); @@ -757,7 +759,7 @@ void connection_handler_close_secure_connection( coap_conn_handler_t *handler, u { if (handler) { if (handler->socket && handler->socket->is_secure) { - secure_session_t *session = secure_session_find( handler->socket, destination_addr_ptr, port); + secure_session_t *session = secure_session_find( handler->socket, destination_addr_ptr, port ); if (session) { coap_security_send_close_alert( session->sec_handler ); session->session_state = SECURE_SESSION_CLOSED; @@ -806,9 +808,6 @@ int coap_connection_handler_send_data(coap_conn_handler_t *handler, const ns_add } if (handler->socket->is_secure) { handler->socket->bypass_link_sec = bypass_link_sec; - memcpy(handler->socket->dest_addr.address, dest_addr->address, 16); - handler->socket->dest_addr.identifier = dest_addr->identifier; - handler->socket->dest_addr.type = dest_addr->type; secure_session_t *session = secure_session_find(handler->socket, dest_addr->address, dest_addr->identifier); if (!session) { session = secure_session_create(handler->socket, dest_addr->address, dest_addr->identifier); @@ -816,16 +815,13 @@ int coap_connection_handler_send_data(coap_conn_handler_t *handler, const ns_add return -1; } session->last_contact_time = coap_service_get_internal_timer_ticks(); - memcpy( handler->socket->dest_addr.address, dest_addr->address, 16 ); - handler->socket->dest_addr.identifier = dest_addr->identifier; - handler->socket->dest_addr.type = dest_addr->type; uint8_t *pw = ns_dyn_mem_alloc(64); if (!pw) { //todo: free secure session? return -1; } uint8_t pw_len; - if (handler->_get_password_cb && 0 == handler->_get_password_cb(handler->socket->listen_socket, (uint8_t*)dest_addr->address, dest_addr->identifier, pw, &pw_len)) { + if (handler->_get_password_cb && 0 == handler->_get_password_cb(handler->socket->socket, (uint8_t*)dest_addr->address, dest_addr->identifier, pw, &pw_len)) { //TODO: get_password_cb should support certs and PSK also coap_security_keys_t keys; keys._priv = pw; @@ -847,7 +843,7 @@ int coap_connection_handler_send_data(coap_conn_handler_t *handler, const ns_add return -1; }else{ if (!handler->socket->real_socket && handler->_send_cb) { - return handler->_send_cb((int8_t)handler->socket->listen_socket, dest_addr->address, dest_addr->identifier, data_ptr, data_len); + return handler->_send_cb((int8_t)handler->socket->socket, dest_addr->address, dest_addr->identifier, data_ptr, data_len); } int opt_name = SOCKET_IPV6_PREFER_SRC_6LOWPAN_SHORT; int8_t securityLinkLayer = 1; @@ -855,10 +851,10 @@ int coap_connection_handler_send_data(coap_conn_handler_t *handler, const ns_add securityLinkLayer = 0; } - socket_setsockopt(handler->socket->listen_socket, SOCKET_IPPROTO_IPV6, SOCKET_IPV6_ADDR_PREFERENCES, &opt_name, sizeof(int)); - socket_setsockopt(handler->socket->listen_socket, SOCKET_IPPROTO_IPV6, SOCKET_LINK_LAYER_SECURITY, &securityLinkLayer, sizeof(int8_t)); + socket_setsockopt(handler->socket->socket, SOCKET_IPPROTO_IPV6, SOCKET_IPV6_ADDR_PREFERENCES, &opt_name, sizeof(int)); + socket_setsockopt(handler->socket->socket, SOCKET_IPPROTO_IPV6, SOCKET_LINK_LAYER_SECURITY, &securityLinkLayer, sizeof(int8_t)); - return send_to_real_socket(handler->socket->listen_socket, dest_addr, src_address, data_ptr, data_len); + return send_to_real_socket(handler->socket->socket, dest_addr, src_address, data_ptr, data_len); } } @@ -868,7 +864,7 @@ bool coap_connection_handler_socket_belongs_to(coap_conn_handler_t *handler, int return false; } - if( handler->socket->listen_socket == socket_id){ + if( handler->socket->socket == socket_id){ return true; } return false; From c8d66be284a98a6473401c33d83b572f86ea96c6 Mon Sep 17 00:00:00 2001 From: Arto Kinnunen Date: Mon, 31 Oct 2016 10:27:02 +0200 Subject: [PATCH 144/154] Remove mbedtls configuration from Makefile (#45) -Do not define mbedtls configuration in Makefile as the same makefile is used in target builds. --- Makefile | 3 --- 1 file changed, 3 deletions(-) diff --git a/Makefile b/Makefile index c597dbd06b..b392f24e7d 100644 --- a/Makefile +++ b/Makefile @@ -30,9 +30,6 @@ override CFLAGS += -I$(NSDLC_DIR)/nsdl-c EVENTLOOP_DIR := ../event-loop override CFLAGS += -I$(EVENTLOOP_DIR)/nanostack-event-loop/ -MBEDTLS_DIR := ../mbedtls -override CFLAGS += -I$(MBEDTLS_DIR)/configs -I$(MBEDTLS_DIR) -DMBEDTLS_CONFIG_FILE='' -I$(MBEDTLS_DIR)/include - COAPSERVICE_DIR := ../coap-service override CFLAGS += -I$(COAPSERVICE_DIR)/coap-service/ override CFLAGS += -I$(COAPSERVICE_DIR)/source/include/ From 57615121aace89ace0910b424cc43d6a7f4a7593 Mon Sep 17 00:00:00 2001 From: Hasnain Virk Date: Tue, 1 Nov 2016 09:02:46 +0200 Subject: [PATCH 145/154] Addding backlog parameter to socket_listen * As part of patch-2 for socket API update, we need to add 2nd parameter of socket_listen() API. --- test/coap-service/unittest/stub/socket_api_stub.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/coap-service/unittest/stub/socket_api_stub.c b/test/coap-service/unittest/stub/socket_api_stub.c index 5df8519fbe..c73c0e69ac 100644 --- a/test/coap-service/unittest/stub/socket_api_stub.c +++ b/test/coap-service/unittest/stub/socket_api_stub.c @@ -33,7 +33,7 @@ int8_t socket_free(int8_t socket) return socket_api_stub.int8_value; } -int8_t socket_listen(int8_t socket) +int8_t socket_listen(int8_t socket, uint8_t backlog) { if( socket_api_stub.counter >= 0){ return socket_api_stub.values[socket_api_stub.counter--]; From 7f5370e0bffac2c9e53b20bf2e02c10a4f758651 Mon Sep 17 00:00:00 2001 From: Tero Heinonen Date: Tue, 1 Nov 2016 11:07:59 +0200 Subject: [PATCH 146/154] Use default local address, if request is from multicast address (#46) * Use default local address, if request is from multicast address If response to multicast request is sent, local address must be set to default. * Fix unit tests Fixed socket_listen stub. --- source/coap_connection_handler.c | 4 ++++ source/coap_message_handler.c | 3 ++- test/coap-service/unittest/stub/socket_api_stub.c | 2 +- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/source/coap_connection_handler.c b/source/coap_connection_handler.c index 19b36ae125..6b3babc615 100644 --- a/source/coap_connection_handler.c +++ b/source/coap_connection_handler.c @@ -533,6 +533,10 @@ static void secure_recv_sckt_msg(void *cb_res) memset(&src_address, 0, sizeof(ns_address_t)); if (sock && read_data(sckt_data, sock, &src_address, dst_address) == 0) { + /* If received from multicast address, reject */ + if (*(dst_address) == 0xFF) { + return; + } secure_session_t *session = secure_session_find(sock, src_address.address, src_address.identifier); // Create session diff --git a/source/coap_message_handler.c b/source/coap_message_handler.c index e44965d8f7..e1d399e335 100644 --- a/source/coap_message_handler.c +++ b/source/coap_message_handler.c @@ -7,6 +7,7 @@ #include "coap_service_api_internal.h" #include "coap_message_handler.h" #include "sn_coap_protocol.h" +#include "socket_api.h" #include "ns_types.h" #include "ns_list.h" #include "ns_trace.h" @@ -220,7 +221,7 @@ int16_t coap_message_handler_coap_msg_process(coap_msg_handler_t *handle, int8_t transaction_ptr->service_id = coap_service_id_find_by_socket(socket_id); transaction_ptr->msg_id = coap_message->msg_id; transaction_ptr->client_request = false;// this is server transaction - memcpy(transaction_ptr->local_address, dst_addr_ptr, 16); + memcpy(transaction_ptr->local_address, *(dst_addr_ptr) == 0xFF ? ns_in6addr_any : dst_addr_ptr, 16); memcpy(transaction_ptr->remote_address, source_addr_ptr, 16); transaction_ptr->remote_port = port; diff --git a/test/coap-service/unittest/stub/socket_api_stub.c b/test/coap-service/unittest/stub/socket_api_stub.c index c73c0e69ac..18bc9ba437 100644 --- a/test/coap-service/unittest/stub/socket_api_stub.c +++ b/test/coap-service/unittest/stub/socket_api_stub.c @@ -33,7 +33,7 @@ int8_t socket_free(int8_t socket) return socket_api_stub.int8_value; } -int8_t socket_listen(int8_t socket, uint8_t backlog) +int8_t socket_listen(int8_t socket, ...) { if( socket_api_stub.counter >= 0){ return socket_api_stub.values[socket_api_stub.counter--]; From ff5bc03fd7674d28b71be05cffe84c03124d590d Mon Sep 17 00:00:00 2001 From: Hasnain Virk Date: Tue, 1 Nov 2016 16:49:39 +0200 Subject: [PATCH 147/154] Using socket_close() instead of socket_free() * Pertaining to new socket API changes, socket_free is deprecated. * socket_close() is used from now on. * Fixing stubs too. --- source/coap_connection_handler.c | 2 +- test/coap-service/unittest/stub/socket_api_stub.c | 11 ++--------- 2 files changed, 3 insertions(+), 10 deletions(-) diff --git a/source/coap_connection_handler.c b/source/coap_connection_handler.c index 6b3babc615..d7a63f3925 100644 --- a/source/coap_connection_handler.c +++ b/source/coap_connection_handler.c @@ -259,7 +259,7 @@ static void int_socket_delete(internal_socket_t *this) this->usage_counter--; if(this->usage_counter == 0){ clear_secure_sessions(this); - socket_free(this->socket); + socket_close(this->socket); ns_list_remove(&socket_list, this); if( this->data ){ ns_dyn_mem_free(this->data); diff --git a/test/coap-service/unittest/stub/socket_api_stub.c b/test/coap-service/unittest/stub/socket_api_stub.c index 18bc9ba437..521a9c204d 100644 --- a/test/coap-service/unittest/stub/socket_api_stub.c +++ b/test/coap-service/unittest/stub/socket_api_stub.c @@ -25,7 +25,7 @@ int8_t socket_open(uint8_t protocol, uint16_t identifier, void (*passed_fptr)(vo return socket_api_stub.int8_value; } -int8_t socket_free(int8_t socket) +int8_t socket_close(int8_t socket) { if( socket_api_stub.counter >= 0){ return socket_api_stub.values[socket_api_stub.counter--]; @@ -33,7 +33,7 @@ int8_t socket_free(int8_t socket) return socket_api_stub.int8_value; } -int8_t socket_listen(int8_t socket, ...) +int8_t socket_listen(int8_t socket, uint8_t backlog) { if( socket_api_stub.counter >= 0){ return socket_api_stub.values[socket_api_stub.counter--]; @@ -57,14 +57,7 @@ int8_t socket_bind(int8_t socket, const ns_address_t *address) return socket_api_stub.int8_value; } -int8_t socket_close(int8_t socket, ns_address_t *address) -{ - if( socket_api_stub.counter >= 0){ - return socket_api_stub.values[socket_api_stub.counter--]; - } - return socket_api_stub.int8_value; -} int8_t socket_send(int8_t socket, uint8_t *buffer, uint16_t length) { if( socket_api_stub.counter >= 0){ From ae4d9dbadac6928ae419b8d03edcc274aa9e68da Mon Sep 17 00:00:00 2001 From: Tero Heinonen Date: Wed, 2 Nov 2016 12:10:19 +0200 Subject: [PATCH 148/154] Call transaction callback when transactions are deleted (#48) When secure session is deleted, transaction callback must be called to inform request sender that response is not going to be received. --- source/coap_connection_handler.c | 4 ++-- source/coap_message_handler.c | 3 +++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/source/coap_connection_handler.c b/source/coap_connection_handler.c index d7a63f3925..e6e4664d84 100644 --- a/source/coap_connection_handler.c +++ b/source/coap_connection_handler.c @@ -95,8 +95,8 @@ static secure_session_t *secure_session_find_by_timer_id(int8_t timer_id) static void secure_session_delete(secure_session_t *this) { if (this) { - transactions_delete_all(this->remote_host.address, this->remote_host.identifier); ns_list_remove(&secure_session_list, this); + transactions_delete_all(this->remote_host.address, this->remote_host.identifier); if( this->sec_handler ){ coap_security_destroy(this->sec_handler); this->sec_handler = NULL; @@ -529,7 +529,7 @@ static void secure_recv_sckt_msg(void *cb_res) socket_callback_t *sckt_data = cb_res; internal_socket_t *sock = int_socket_find_by_socket_id(sckt_data->socket_id); ns_address_t src_address; - uint8_t dst_address[16]; + uint8_t dst_address[16] = {0}; memset(&src_address, 0, sizeof(ns_address_t)); if (sock && read_data(sckt_data, sock, &src_address, dst_address) == 0) { diff --git a/source/coap_message_handler.c b/source/coap_message_handler.c index e1d399e335..5a5ee64e86 100644 --- a/source/coap_message_handler.c +++ b/source/coap_message_handler.c @@ -99,6 +99,9 @@ void transactions_delete_all(uint8_t *address_ptr, uint16_t port) coap_transaction_t *transaction = transaction_find_by_address(address_ptr, port); while (transaction) { + if (transaction->resp_cb) { + transaction->resp_cb(transaction->service_id, address_ptr, port, NULL); + } sn_coap_protocol_delete_retransmission(coap_service_handle->coap, transaction->msg_id); transaction_delete(transaction); transaction = transaction_find_by_address(address_ptr, port); From a1982c1de752c50410d975a03f505a69972539f5 Mon Sep 17 00:00:00 2001 From: Tero Heinonen Date: Thu, 3 Nov 2016 15:23:19 +0200 Subject: [PATCH 149/154] Remove transaction from list before callback call (#50) In some callbacks, secure session might be removed and transactions been freed. That leads to double freeing, and reading from freed pointer. Transaction is now removed from list before calling callback to avoid that. --- source/coap_message_handler.c | 35 ++++++++++++++++++++++++++--------- 1 file changed, 26 insertions(+), 9 deletions(-) diff --git a/source/coap_message_handler.c b/source/coap_message_handler.c index 5a5ee64e86..c4162b8fb1 100644 --- a/source/coap_message_handler.c +++ b/source/coap_message_handler.c @@ -81,14 +81,24 @@ static coap_transaction_t *transaction_create(void) return this; } + +static void transaction_free(coap_transaction_t *this) +{ + if (!this) { + return; + } + + if (this->data_ptr) { + ns_dyn_mem_free(this->data_ptr); + } + ns_dyn_mem_free(this); +} + void transaction_delete(coap_transaction_t *this) { if (this) { ns_list_remove(&request_list, this); - if(this->data_ptr){ - ns_dyn_mem_free(this->data_ptr); - } - ns_dyn_mem_free(this); + transaction_free(this); } return; @@ -99,11 +109,12 @@ void transactions_delete_all(uint8_t *address_ptr, uint16_t port) coap_transaction_t *transaction = transaction_find_by_address(address_ptr, port); while (transaction) { + ns_list_remove(&request_list, transaction); if (transaction->resp_cb) { transaction->resp_cb(transaction->service_id, address_ptr, port, NULL); } sn_coap_protocol_delete_retransmission(coap_service_handle->coap, transaction->msg_id); - transaction_delete(transaction); + transaction_free(transaction); transaction = transaction_find_by_address(address_ptr, port); } } @@ -113,17 +124,22 @@ static int8_t coap_rx_function(sn_coap_hdr_s *resp_ptr, sn_nsdl_addr_s *address_ coap_transaction_t *this = NULL; (void)address_ptr; (void)param; - tr_warn("transaction was not handled"); + tr_warn("transaction was not handled %d", resp_ptr->msg_id); if (!resp_ptr) { return -1; } if( resp_ptr->token_ptr ){ this = transaction_find_client_by_token(resp_ptr->token_ptr); } - if (this && this->resp_cb) { + if (!this) { + return 0; + } + + ns_list_remove(&request_list, this); + if (this->resp_cb) { this->resp_cb(this->service_id, address_ptr->addr_ptr, address_ptr->port, NULL); } - transaction_delete(this); + transaction_free(this); return 0; } @@ -250,11 +266,12 @@ int16_t coap_message_handler_coap_msg_process(coap_msg_handler_t *handle, int8_t return -1; } tr_debug("Service %d, response received", this->service_id); + ns_list_remove(&request_list, this); if (this->resp_cb) { this->resp_cb(this->service_id, (uint8_t *)source_addr_ptr, port, coap_message); } sn_coap_parser_release_allocated_coap_msg_mem(handle->coap, coap_message); - transaction_delete(this); + transaction_free(this); } return 0; From 6aedb5aeb79584582e8abdd89f28e81b892dfba4 Mon Sep 17 00:00:00 2001 From: Seppo Takalo Date: Wed, 9 Nov 2016 15:10:38 +0200 Subject: [PATCH 150/154] Remove Randlib --- .../mbed-client-randlib/.gitignore | 1 - .../mbed-client-randlib/.mbedignore | 2 - .../mbed-client-randlib/LICENSE | 2 - .../mbed-client-randlib/apache-2.0.txt | 56 -- .../mbed-client-randlib/linux/randLIB.c | 168 ------ .../platform/arm_hal_random.h | 33 - .../mbed-client-randlib/randLIB.h | 123 ---- .../mbed-client-randlib/module.json | 13 - .../mbed-client-randlib/source/randLIB.c | 224 ------- .../unittest/MakefileWorker.mk | 562 ------------------ .../unittest/makefile_defines.txt | 18 - .../unittest/randlib/main.cpp | 15 - .../unittest/randlib/randlibtest.cpp | 51 -- .../unittest/randlib/test_randlib.c | 97 --- .../unittest/randlib/test_randlib.h | 33 - .../unittest/randlib_linux/main.cpp | 14 - .../unittest/randlib_linux/randlibtest.cpp | 69 --- .../mbed-client-randlib/unittest/run_tests | 43 -- .../unittest/stubs/open_stub.c | 24 - .../unittest/stubs/random_stub.c | 15 - 20 files changed, 1563 deletions(-) delete mode 100644 features/FEATURE_COMMON_PAL/mbed-client-randlib/.gitignore delete mode 100644 features/FEATURE_COMMON_PAL/mbed-client-randlib/.mbedignore delete mode 100644 features/FEATURE_COMMON_PAL/mbed-client-randlib/LICENSE delete mode 100644 features/FEATURE_COMMON_PAL/mbed-client-randlib/apache-2.0.txt delete mode 100644 features/FEATURE_COMMON_PAL/mbed-client-randlib/linux/randLIB.c delete mode 100644 features/FEATURE_COMMON_PAL/mbed-client-randlib/mbed-client-randlib/platform/arm_hal_random.h delete mode 100644 features/FEATURE_COMMON_PAL/mbed-client-randlib/mbed-client-randlib/randLIB.h delete mode 100644 features/FEATURE_COMMON_PAL/mbed-client-randlib/module.json delete mode 100644 features/FEATURE_COMMON_PAL/mbed-client-randlib/source/randLIB.c delete mode 100644 features/FEATURE_COMMON_PAL/mbed-client-randlib/test/mbed-client-randlib/unittest/MakefileWorker.mk delete mode 100644 features/FEATURE_COMMON_PAL/mbed-client-randlib/test/mbed-client-randlib/unittest/makefile_defines.txt delete mode 100644 features/FEATURE_COMMON_PAL/mbed-client-randlib/test/mbed-client-randlib/unittest/randlib/main.cpp delete mode 100644 features/FEATURE_COMMON_PAL/mbed-client-randlib/test/mbed-client-randlib/unittest/randlib/randlibtest.cpp delete mode 100644 features/FEATURE_COMMON_PAL/mbed-client-randlib/test/mbed-client-randlib/unittest/randlib/test_randlib.c delete mode 100644 features/FEATURE_COMMON_PAL/mbed-client-randlib/test/mbed-client-randlib/unittest/randlib/test_randlib.h delete mode 100644 features/FEATURE_COMMON_PAL/mbed-client-randlib/test/mbed-client-randlib/unittest/randlib_linux/main.cpp delete mode 100644 features/FEATURE_COMMON_PAL/mbed-client-randlib/test/mbed-client-randlib/unittest/randlib_linux/randlibtest.cpp delete mode 100644 features/FEATURE_COMMON_PAL/mbed-client-randlib/test/mbed-client-randlib/unittest/run_tests delete mode 100644 features/FEATURE_COMMON_PAL/mbed-client-randlib/test/mbed-client-randlib/unittest/stubs/open_stub.c delete mode 100644 features/FEATURE_COMMON_PAL/mbed-client-randlib/test/mbed-client-randlib/unittest/stubs/random_stub.c diff --git a/features/FEATURE_COMMON_PAL/mbed-client-randlib/.gitignore b/features/FEATURE_COMMON_PAL/mbed-client-randlib/.gitignore deleted file mode 100644 index 77320b339f..0000000000 --- a/features/FEATURE_COMMON_PAL/mbed-client-randlib/.gitignore +++ /dev/null @@ -1 +0,0 @@ -output/* diff --git a/features/FEATURE_COMMON_PAL/mbed-client-randlib/.mbedignore b/features/FEATURE_COMMON_PAL/mbed-client-randlib/.mbedignore deleted file mode 100644 index ba4eb1b31d..0000000000 --- a/features/FEATURE_COMMON_PAL/mbed-client-randlib/.mbedignore +++ /dev/null @@ -1,2 +0,0 @@ -linux/* -test/* diff --git a/features/FEATURE_COMMON_PAL/mbed-client-randlib/LICENSE b/features/FEATURE_COMMON_PAL/mbed-client-randlib/LICENSE deleted file mode 100644 index 97df0e645d..0000000000 --- a/features/FEATURE_COMMON_PAL/mbed-client-randlib/LICENSE +++ /dev/null @@ -1,2 +0,0 @@ -Unless specifically indicated otherwise in a file, files are licensed -under the Apache 2.0 license, as can be found in: apache-2.0.txt \ No newline at end of file diff --git a/features/FEATURE_COMMON_PAL/mbed-client-randlib/apache-2.0.txt b/features/FEATURE_COMMON_PAL/mbed-client-randlib/apache-2.0.txt deleted file mode 100644 index 0e4cf3ee99..0000000000 --- a/features/FEATURE_COMMON_PAL/mbed-client-randlib/apache-2.0.txt +++ /dev/null @@ -1,56 +0,0 @@ - - -Apache License - -Version 2.0, January 2004 - -http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - -"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - -"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - -"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - -"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - -"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - -"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - -"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - -"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - -"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - -"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - - You must give any other recipients of the Work or Derivative Works a copy of this License; and - You must cause any modified files to carry prominent notices stating that You changed the files; and - You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - - You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS \ No newline at end of file diff --git a/features/FEATURE_COMMON_PAL/mbed-client-randlib/linux/randLIB.c b/features/FEATURE_COMMON_PAL/mbed-client-randlib/linux/randLIB.c deleted file mode 100644 index 654d9e7f82..0000000000 --- a/features/FEATURE_COMMON_PAL/mbed-client-randlib/linux/randLIB.c +++ /dev/null @@ -1,168 +0,0 @@ -/* - * Copyright (c) 2014-2015 ARM Limited. All rights reserved. - * SPDX-License-Identifier: Apache-2.0 - * 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 -#include -#include -#include -#include -#include -#include "randLIB.h" - -/** - * \brief Init seed for Pseudo Random. - * On a Linux, this does nothing. - * - * \return None - * - */ -void randLIB_seed_random(void) -{ -} - -/** - * \brief Generate 8-bit random number. - * - * \param None - * \return 8-bit random number - * - */ -uint8_t randLIB_get_8bit(void) -{ - uint8_t ret_val; - randLIB_get_n_bytes_random(&ret_val, 1); - return ret_val; -} - -/** - * \brief Generate 16-bit random number. - * - * \param None - * \return 16-bit random number - * - */ -uint16_t randLIB_get_16bit(void) -{ - uint16_t ret_val; - - randLIB_get_n_bytes_random((uint8_t*)&ret_val, 2); - return ret_val; -} -/** - * \brief Generate 32-bit random number. - * - * \param None - * \return 32-bit random number - * - */ -uint32_t randLIB_get_32bit(void) -{ - uint32_t ret_val; - randLIB_get_n_bytes_random((uint8_t*)&ret_val, 4); - return ret_val; -} - - -/** - * \brief Generate n-bytes random numbers. - * - * \param data_ptr pointer where random will be stored - * \param eight_bit_boundary how many bytes need random - * \return 0 process valid - * \return -1 Unsupported Parameters or failed to get random data. - * - */ -int8_t randLIB_get_n_bytes_random(uint8_t *data_ptr, uint8_t eight_bit_boundary) -{ - if ((data_ptr == 0) || (eight_bit_boundary == 0)) { - return -1; - } - - int fd = open("/dev/urandom", O_RDONLY); - if (fd != -1) { - size_t len = read(fd, data_ptr, eight_bit_boundary); - close(fd); - if (len == eight_bit_boundary) - return 0; - } - - return -1; -} - -/** - * \brief Generate a random number within a range. - * - * The result is linearly distributed in the range [min..max], inclusive. - * - * \param min minimum value that can be generated - * \param max maximum value that can be generated - */ -uint16_t randLIB_get_random_in_range(uint16_t min, uint16_t max) -{ - /* This special case is potentially common, particularly in this routine's - * first user (Trickle), so worth catching immediately */ - if (min == max) { - return min; - } - - /* 16-bit arithmetic below fails in this extreme case; we can optimise it */ - if (max - min == 0xFFFF) { - return randLIB_get_16bit(); - } - - unsigned int values_needed = max + 1 - min; - unsigned int band_size = 0x10000u / values_needed; - unsigned int top_of_bands = band_size * values_needed; - unsigned int result; - do { - result = randLIB_get_16bit(); - } while (result >= top_of_bands); - - return min + (uint16_t)(result / band_size); -} - -/** - * \brief Randomise a base 32-bit number by a jitter factor - * - * The result is linearly distributed in the jitter range, which is expressed - * as fixed-point unsigned 1.15 values. For example, to produce a number in the - * range [0.75 * base, 1.25 * base], set min_factor to 0x6000 and max_factor to - * 0xA000. - * - * Result is clamped to 0xFFFFFFFF if it overflows. - * - * \param base The base 32-bit value - * \param min_factor The minimum value for the random factor - * \param max_factor The maximum value for the random factor - */ -uint32_t randLIB_randomise_base(uint32_t base, uint16_t min_factor, uint16_t max_factor) -{ - uint16_t random_factor = randLIB_get_random_in_range(min_factor, max_factor); - - /* 32x16-bit long multiplication, to get 48-bit result */ - uint32_t hi = (base >> 16) * random_factor; - uint32_t lo = (base & 0xFFFF) * random_factor; - /* Add halves, and take top 32 bits of 48-bit result */ - uint32_t res = hi + (lo >> 16); - - /* Randomisation factor is *2^15, so need to shift up 1 more bit, avoiding overflow */ - if (res & 0x80000000) { - res = 0xFFFFFFFF; - } else { - res = (res << 1) | ((lo >> 15) & 1); - } - - return res; -} diff --git a/features/FEATURE_COMMON_PAL/mbed-client-randlib/mbed-client-randlib/platform/arm_hal_random.h b/features/FEATURE_COMMON_PAL/mbed-client-randlib/mbed-client-randlib/platform/arm_hal_random.h deleted file mode 100644 index 744245c3da..0000000000 --- a/features/FEATURE_COMMON_PAL/mbed-client-randlib/mbed-client-randlib/platform/arm_hal_random.h +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright (c) 2014-2015 ARM Limited. All rights reserved. - * SPDX-License-Identifier: Apache-2.0 - * 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 ARM_HAL_RANDOM_H_ -#define ARM_HAL_RANDOM_H_ -#ifdef __cplusplus -extern "C" { -#endif -/** - * \brief This function performs Random number driver init. - */ -extern void arm_random_module_init(void); -/** - * \brief Get random library seed value. - */ -extern uint32_t arm_random_seed_get(void); -#ifdef __cplusplus -} -#endif -#endif /* ARM_HAL_RANDOM_H_ */ diff --git a/features/FEATURE_COMMON_PAL/mbed-client-randlib/mbed-client-randlib/randLIB.h b/features/FEATURE_COMMON_PAL/mbed-client-randlib/mbed-client-randlib/randLIB.h deleted file mode 100644 index 665b3deaf0..0000000000 --- a/features/FEATURE_COMMON_PAL/mbed-client-randlib/mbed-client-randlib/randLIB.h +++ /dev/null @@ -1,123 +0,0 @@ -/* - * Copyright (c) 2014-2015 ARM Limited. All rights reserved. - * SPDX-License-Identifier: Apache-2.0 - * 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. - */ - -/** - * \file randLIB.h - * \brief Pseudo Random Library API: - * - * - * \section net-boot Network Bootstrap Control API: - * - randLIB_seed_random(), Set seed for pseudo random - * - randLIB_get_8bit(), Generate 8-bit random number - * - randLIB_get_16bit(),Generate 16-bit random number - * - randLIB_get_32bit(),Generate 32-bit random number - * - randLIB_get_n_bytes_random(), Generate n-bytes random numbers - * - */ - -#ifndef RANDLIB_H_ -#define RANDLIB_H_ - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * This library is made for getting random numbers for Timing needs in protocols. - * - * **not safe to use for security or cryptographic operations.** - * - */ - - -/** - * \brief Init seed for Pseudo Random. - * - * \return None - * - */ -extern void randLIB_seed_random(void); - -/** - * \brief Generate 8-bit random number. - * - * \param None - * \return 8-bit random number - * - */ -extern uint8_t randLIB_get_8bit(void); - -/** - * \brief Generate 16-bit random number. - * - * \param None - * \return 16-bit random number - * - */ -extern uint16_t randLIB_get_16bit(void); - -/** - * \brief Generate 32-bit random number. - * - * \param None - * \return 16-bit random number - * - */ -extern uint32_t randLIB_get_32bit(void); - -/** - * \brief Generate n-bytes random numbers. - * - * \param data_ptr pointer where random will be stored - * \param eight_bit_boundary how many bytes need random - * \return 0 process valid - * \return -1 Unsupported Parameters - * - */ -extern int8_t randLIB_get_n_bytes_random(uint8_t *data_ptr, uint8_t eight_bit_boundary); - -/** - * \brief Generate a random number within a range. - * - * The result is linearly distributed in the range [min..max], inclusive. - * - * \param min minimum value that can be generated - * \param max maximum value that can be generated - */ -uint16_t randLIB_get_random_in_range(uint16_t min, uint16_t max); - -/** - * \brief Randomise a base 32-bit number by a jitter factor - * - * The result is linearly distributed in the jitter range, which is expressed - * as fixed-point unsigned 1.15 values. For example, to produce a number in the - * range [0.75 * base, 1.25 * base], set min_factor to 0x6000 and max_factor to - * 0xA000. - * - * Result is clamped to 0xFFFFFFFF if it overflows. - * - * \param base The base 32-bit value - * \param min_factor The minimum value for the random factor - * \param max_factor The maximum value for the random factor - */ -uint32_t randLIB_randomise_base(uint32_t base, uint16_t min_factor, uint16_t max_factor); - -#ifdef __cplusplus -} -#endif -#endif /* RANDLIB_H_ */ diff --git a/features/FEATURE_COMMON_PAL/mbed-client-randlib/module.json b/features/FEATURE_COMMON_PAL/mbed-client-randlib/module.json deleted file mode 100644 index 9aa2146560..0000000000 --- a/features/FEATURE_COMMON_PAL/mbed-client-randlib/module.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "name": "nanostack-randlib", - "version": "1.1.0", - "description": "Pseudo random library used by mbed-client and 6LoWPAN stack.", - "keywords": [], - "homepage": "https://github.com/ARMmbed/mbed-client-randlib", - "license": "Apache-2.0", - "extraIncludes": [ - "mbed-client-randlib" - ], - "dependencies": {}, - "targetDependencies": {} -} diff --git a/features/FEATURE_COMMON_PAL/mbed-client-randlib/source/randLIB.c b/features/FEATURE_COMMON_PAL/mbed-client-randlib/source/randLIB.c deleted file mode 100644 index 9767a8dae0..0000000000 --- a/features/FEATURE_COMMON_PAL/mbed-client-randlib/source/randLIB.c +++ /dev/null @@ -1,224 +0,0 @@ -/* - * Copyright (c) 2014-2015 ARM Limited. All rights reserved. - * SPDX-License-Identifier: Apache-2.0 - * 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 -#include -#include -#include -#include "randLIB.h" -#include "platform/arm_hal_random.h" - -#if ((RAND_MAX+1) & RAND_MAX) != 0 -#error "RAND_MAX isn't 2^n-1 :(" -#endif - -/** - * This library is made for getting random numbers for Timing needs in protocols. - * - * **not safe to use for security or cryptographic operations.** - * - */ - - -/** - * \brief Init seed for Pseudo Random. - * - * \return None - * - */ -void randLIB_seed_random(void) -{ - uint32_t rand_seed; - arm_random_module_init(); - rand_seed = arm_random_seed_get(); - srand(rand_seed); -} - -/** - * \brief Generate 8-bit random number. - * - * \param None - * \return 8-bit random number - * - */ -uint8_t randLIB_get_8bit(void) -{ - return rand(); -} - -/** - * \brief Generate 16-bit random number. - * - * \param None - * \return 16-bit random number - * - */ -uint16_t randLIB_get_16bit(void) -{ - uint16_t ret_val; - - ret_val = rand(); -#if RAND_MAX == 0x7FFF - ret_val |= (uint16_t) rand() << 15; -#endif - - return ret_val; -} -/** - * \brief Generate 32-bit random number. - * - * \param None - * \return 32-bit random number - * - */ -uint32_t randLIB_get_32bit(void) -{ - uint32_t ret_val; - - ret_val = rand(); -#if RAND_MAX == 0x7FFF - ret_val |= (uint32_t) rand() << 15; - ret_val |= (uint32_t) rand() << 30; -#elif RAND_MAX == 0x3FFFFFFF /* IAR */ - ret_val |= (uint32_t) rand() << 30; -#elif RAND_MAX == 0x7FFFFFFF - ret_val |= (uint32_t) rand() << 31; -#else -#error "randLIB_get_32bit - odd RAND_MAX" -#endif - - return ret_val; -} - - -/** - * \brief Generate n-bytes random numbers. - * - * \param data_ptr pointer where random will be stored - * \param eight_bit_boundary how many bytes need random - * \return 0 process valid - * \return -1 Unsupported Parameters - * - */ -int8_t randLIB_get_n_bytes_random(uint8_t *data_ptr, uint8_t eight_bit_boundary) -{ - if ((data_ptr == 0) || (eight_bit_boundary == 0)) { - return -1; - } - - while (eight_bit_boundary) { - *data_ptr++ = randLIB_get_8bit(); - eight_bit_boundary--; - } - return 0; -} - -/** - * \brief Generate a random number within a range. - * - * The result is linearly distributed in the range [min..max], inclusive. - * - * \param min minimum value that can be generated - * \param max maximum value that can be generated - */ -uint16_t randLIB_get_random_in_range(uint16_t min, uint16_t max) -{ - /* This special case is potentially common, particularly in this routine's - * first user (Trickle), so worth catching immediately */ - if (min == max) { - return min; - } - - /* 16-bit arithmetic below fails in this extreme case; we can optimise it */ - if (max - min == 0xFFFF) { - return randLIB_get_16bit(); - } - - /* We get RAND_MAX+1 values from rand() in the range [0..RAND_MAX], and - * need to divvy them up into the number of values we need. And reroll any - * odd values off the end as we insist every value having equal chance. - * - * Special handling for systems where RAND_MAX is 0x7FFF; we use our - * randLIB_get_16bit() and have to be a bit more careful about - * unsigned integer overflow. (On other systems rand() returns int, - * so we can't overflow if we use unsigned int). - * - * Eg, range(1,3), RAND_MAX = 0x7FFFFFFF: - * We have 3 bands of size 0x2AAAAAAA (0x80000000/3). - * - * We roll: 0x00000000..0x2AAAAAAA9 -> 1 - * 0x2AAAAAAA..0x555555553 -> 2 - * 0x55555554..0x7FFFFFFFD -> 3 - * 0x7FFFFFFE..0x7FFFFFFFF -> reroll - * - * (Bias problem clearly pretty insignificant there, but gets worse as - * range increases). - */ - unsigned int values_needed = max + 1 - min; -#if RAND_MAX > 0xFFFF - unsigned int band_size = (RAND_MAX + 1u) / values_needed; -#elif UINT_MAX > 0xFFFF - unsigned int band_size = 0x10000u / values_needed; -#else - /* Avoid the need for long division, at the expense of fractionally - * increasing reroll chance. */ - unsigned int band_size = 0xFFFFu / values_needed; -#endif - unsigned int top_of_bands = band_size * values_needed; - unsigned int result; - do { -#if RAND_MAX > 0xFFFF - result = rand(); -#else - result = randLIB_get_16bit(); -#endif - } while (result >= top_of_bands); - - return min + (uint16_t)(result / band_size); -} - -/** - * \brief Randomise a base 32-bit number by a jitter factor - * - * The result is linearly distributed in the jitter range, which is expressed - * as fixed-point unsigned 1.15 values. For example, to produce a number in the - * range [0.75 * base, 1.25 * base], set min_factor to 0x6000 and max_factor to - * 0xA000. - * - * Result is clamped to 0xFFFFFFFF if it overflows. - * - * \param base The base 32-bit value - * \param min_factor The minimum value for the random factor - * \param max_factor The maximum value for the random factor - */ -uint32_t randLIB_randomise_base(uint32_t base, uint16_t min_factor, uint16_t max_factor) -{ - uint16_t random_factor = randLIB_get_random_in_range(min_factor, max_factor); - - /* 32x16-bit long multiplication, to get 48-bit result */ - uint32_t hi = (base >> 16) * random_factor; - uint32_t lo = (base & 0xFFFF) * random_factor; - /* Add halves, and take top 32 bits of 48-bit result */ - uint32_t res = hi + (lo >> 16); - - /* Randomisation factor is *2^15, so need to shift up 1 more bit, avoiding overflow */ - if (res & 0x80000000) { - res = 0xFFFFFFFF; - } else { - res = (res << 1) | ((lo >> 15) & 1); - } - - return res; -} diff --git a/features/FEATURE_COMMON_PAL/mbed-client-randlib/test/mbed-client-randlib/unittest/MakefileWorker.mk b/features/FEATURE_COMMON_PAL/mbed-client-randlib/test/mbed-client-randlib/unittest/MakefileWorker.mk deleted file mode 100644 index 2096ced036..0000000000 --- a/features/FEATURE_COMMON_PAL/mbed-client-randlib/test/mbed-client-randlib/unittest/MakefileWorker.mk +++ /dev/null @@ -1,562 +0,0 @@ -#--------- -# -# MakefileWorker.mk -# -# Include this helper file in your makefile -# It makes -# A static library -# A test executable -# -# See this example for parameter settings -# examples/Makefile -# -#---------- -# Inputs - these variables describe what to build -# -# INCLUDE_DIRS - Directories used to search for include files. -# This generates a -I for each directory -# SRC_DIRS - Directories containing source file to built into the library -# SRC_FILES - Specific source files to build into library. Helpful when not all code -# in a directory can be built for test (hopefully a temporary situation) -# TEST_SRC_DIRS - Directories containing unit test code build into the unit test runner -# These do not go in a library. They are explicitly included in the test runner -# TEST_SRC_FILES - Specific source files to build into the unit test runner -# These do not go in a library. They are explicitly included in the test runner -# MOCKS_SRC_DIRS - Directories containing mock source files to build into the test runner -# These do not go in a library. They are explicitly included in the test runner -#---------- -# You can adjust these variables to influence how to build the test target -# and where to put and name outputs -# See below to determine defaults -# COMPONENT_NAME - the name of the thing being built -# TEST_TARGET - name the test executable. By default it is -# $(COMPONENT_NAME)_tests -# Helpful if you want 1 > make files in the same directory with different -# executables as output. -# CPPUTEST_HOME - where CppUTest home dir found -# TARGET_PLATFORM - Influences how the outputs are generated by modifying the -# CPPUTEST_OBJS_DIR and CPPUTEST_LIB_DIR to use a sub-directory under the -# normal objs and lib directories. Also modifies where to search for the -# CPPUTEST_LIB to link against. -# CPPUTEST_OBJS_DIR - a directory where o and d files go -# CPPUTEST_LIB_DIR - a directory where libs go -# CPPUTEST_ENABLE_DEBUG - build for debug -# CPPUTEST_USE_MEM_LEAK_DETECTION - Links with overridden new and delete -# CPPUTEST_USE_STD_CPP_LIB - Set to N to keep the standard C++ library out -# of the test harness -# CPPUTEST_USE_GCOV - Turn on coverage analysis -# Clean then build with this flag set to Y, then 'make gcov' -# CPPUTEST_MAPFILE - generate a map file -# CPPUTEST_WARNINGFLAGS - overly picky by default -# OTHER_MAKEFILE_TO_INCLUDE - a hook to use this makefile to make -# other targets. Like CSlim, which is part of fitnesse -# CPPUTEST_USE_VPATH - Use Make's VPATH functionality to support user -# specification of source files and directories that aren't below -# the user's Makefile in the directory tree, like: -# SRC_DIRS += ../../lib/foo -# It defaults to N, and shouldn't be necessary except in the above case. -#---------- -# -# Other flags users can initialize to sneak in their settings -# CPPUTEST_CXXFLAGS - flags for the C++ compiler -# CPPUTEST_CPPFLAGS - flags for the C++ AND C preprocessor -# CPPUTEST_CFLAGS - flags for the C complier -# CPPUTEST_LDFLAGS - Linker flags -#---------- - -# Some behavior is weird on some platforms. Need to discover the platform. - -# Platforms -UNAME_OUTPUT = "$(shell uname -a)" -MACOSX_STR = Darwin -MINGW_STR = MINGW -CYGWIN_STR = CYGWIN -LINUX_STR = Linux -SUNOS_STR = SunOS -UNKNWOWN_OS_STR = Unknown - -# Compilers -CC_VERSION_OUTPUT ="$(shell $(CXX) -v 2>&1)" -CLANG_STR = clang -SUNSTUDIO_CXX_STR = SunStudio - -UNAME_OS = $(UNKNWOWN_OS_STR) - -ifeq ($(findstring $(MINGW_STR),$(UNAME_OUTPUT)),$(MINGW_STR)) - UNAME_OS = $(MINGW_STR) -endif - -ifeq ($(findstring $(CYGWIN_STR),$(UNAME_OUTPUT)),$(CYGWIN_STR)) - UNAME_OS = $(CYGWIN_STR) -endif - -ifeq ($(findstring $(LINUX_STR),$(UNAME_OUTPUT)),$(LINUX_STR)) - UNAME_OS = $(LINUX_STR) -endif - -ifeq ($(findstring $(MACOSX_STR),$(UNAME_OUTPUT)),$(MACOSX_STR)) - UNAME_OS = $(MACOSX_STR) -#lion has a problem with the 'v' part of -a - UNAME_OUTPUT = "$(shell uname -pmnrs)" -endif - -ifeq ($(findstring $(SUNOS_STR),$(UNAME_OUTPUT)),$(SUNOS_STR)) - UNAME_OS = $(SUNOS_STR) - - SUNSTUDIO_CXX_ERR_STR = CC -flags -ifeq ($(findstring $(SUNSTUDIO_CXX_ERR_STR),$(CC_VERSION_OUTPUT)),$(SUNSTUDIO_CXX_ERR_STR)) - CC_VERSION_OUTPUT ="$(shell $(CXX) -V 2>&1)" - COMPILER_NAME = $(SUNSTUDIO_CXX_STR) -endif -endif - -ifeq ($(findstring $(CLANG_STR),$(CC_VERSION_OUTPUT)),$(CLANG_STR)) - COMPILER_NAME = $(CLANG_STR) -endif - -#Kludge for mingw, it does not have cc.exe, but gcc.exe will do -ifeq ($(UNAME_OS),$(MINGW_STR)) - CC := gcc -endif - -#And another kludge. Exception handling in gcc 4.6.2 is broken when linking the -# Standard C++ library as a shared library. Unbelievable. -ifeq ($(UNAME_OS),$(MINGW_STR)) - CPPUTEST_LDFLAGS += -static -endif -ifeq ($(UNAME_OS),$(CYGWIN_STR)) - CPPUTEST_LDFLAGS += -static -endif - - -#Kludge for MacOsX gcc compiler on Darwin9 who can't handle pendantic -ifeq ($(UNAME_OS),$(MACOSX_STR)) -ifeq ($(findstring Version 9,$(UNAME_OUTPUT)),Version 9) - CPPUTEST_PEDANTIC_ERRORS = N -endif -endif - -ifndef COMPONENT_NAME - COMPONENT_NAME = name_this_in_the_makefile -endif - -# Debug on by default -ifndef CPPUTEST_ENABLE_DEBUG - CPPUTEST_ENABLE_DEBUG = Y -endif - -# new and delete for memory leak detection on by default -ifndef CPPUTEST_USE_MEM_LEAK_DETECTION - CPPUTEST_USE_MEM_LEAK_DETECTION = Y -endif - -# Use the standard C library -ifndef CPPUTEST_USE_STD_C_LIB - CPPUTEST_USE_STD_C_LIB = Y -endif - -# Use the standard C++ library -ifndef CPPUTEST_USE_STD_CPP_LIB - CPPUTEST_USE_STD_CPP_LIB = Y -endif - -# Use gcov, off by default -ifndef CPPUTEST_USE_GCOV - CPPUTEST_USE_GCOV = N -endif - -ifndef CPPUTEST_PEDANTIC_ERRORS - CPPUTEST_PEDANTIC_ERRORS = Y -endif - -# Default warnings -ifndef CPPUTEST_WARNINGFLAGS - CPPUTEST_WARNINGFLAGS = -Wall -Wextra -Wshadow -Wswitch-default -Wswitch-enum -Wconversion -ifeq ($(CPPUTEST_PEDANTIC_ERRORS), Y) -# CPPUTEST_WARNINGFLAGS += -pedantic-errors - CPPUTEST_WARNINGFLAGS += -pedantic -endif -ifeq ($(UNAME_OS),$(LINUX_STR)) - CPPUTEST_WARNINGFLAGS += -Wsign-conversion -endif - CPPUTEST_CXX_WARNINGFLAGS = -Woverloaded-virtual - CPPUTEST_C_WARNINGFLAGS = -Wstrict-prototypes -endif - -#Wonderful extra compiler warnings with clang -ifeq ($(COMPILER_NAME),$(CLANG_STR)) -# -Wno-disabled-macro-expansion -> Have to disable the macro expansion warning as the operator new overload warns on that. -# -Wno-padded -> I sort-of like this warning but if there is a bool at the end of the class, it seems impossible to remove it! (except by making padding explicit) -# -Wno-global-constructors Wno-exit-time-destructors -> Great warnings, but in CppUTest it is impossible to avoid as the automatic test registration depends on the global ctor and dtor -# -Wno-weak-vtables -> The TEST_GROUP macro declares a class and will automatically inline its methods. Thats ok as they are only in one translation unit. Unfortunately, the warning can't detect that, so it must be disabled. - CPPUTEST_CXX_WARNINGFLAGS += -Weverything -Wno-disabled-macro-expansion -Wno-padded -Wno-global-constructors -Wno-exit-time-destructors -Wno-weak-vtables - CPPUTEST_C_WARNINGFLAGS += -Weverything -Wno-padded -endif - -# Uhm. Maybe put some warning flags for SunStudio here? -ifeq ($(COMPILER_NAME),$(SUNSTUDIO_CXX_STR)) - CPPUTEST_CXX_WARNINGFLAGS = - CPPUTEST_C_WARNINGFLAGS = -endif - -# Default dir for temporary files (d, o) -ifndef CPPUTEST_OBJS_DIR -ifndef TARGET_PLATFORM - CPPUTEST_OBJS_DIR = objs -else - CPPUTEST_OBJS_DIR = objs/$(TARGET_PLATFORM) -endif -endif - -# Default dir for the outout library -ifndef CPPUTEST_LIB_DIR -ifndef TARGET_PLATFORM - CPPUTEST_LIB_DIR = lib -else - CPPUTEST_LIB_DIR = lib/$(TARGET_PLATFORM) -endif -endif - -# No map by default -ifndef CPPUTEST_MAP_FILE - CPPUTEST_MAP_FILE = N -endif - -# No extentions is default -ifndef CPPUTEST_USE_EXTENSIONS - CPPUTEST_USE_EXTENSIONS = N -endif - -# No VPATH is default -ifndef CPPUTEST_USE_VPATH - CPPUTEST_USE_VPATH := N -endif -# Make empty, instead of 'N', for usage in $(if ) conditionals -ifneq ($(CPPUTEST_USE_VPATH), Y) - CPPUTEST_USE_VPATH := -endif - -ifndef TARGET_PLATFORM -#CPPUTEST_LIB_LINK_DIR = $(CPPUTEST_HOME)/lib -CPPUTEST_LIB_LINK_DIR = /usr/lib/x86_64-linux-gnu -else -CPPUTEST_LIB_LINK_DIR = $(CPPUTEST_HOME)/lib/$(TARGET_PLATFORM) -endif - -# -------------------------------------- -# derived flags in the following area -# -------------------------------------- - -# Without the C library, we'll need to disable the C++ library and ... -ifeq ($(CPPUTEST_USE_STD_C_LIB), N) - CPPUTEST_USE_STD_CPP_LIB = N - CPPUTEST_USE_MEM_LEAK_DETECTION = N - CPPUTEST_CPPFLAGS += -DCPPUTEST_STD_C_LIB_DISABLED - CPPUTEST_CPPFLAGS += -nostdinc -endif - -CPPUTEST_CPPFLAGS += -DCPPUTEST_COMPILATION - -ifeq ($(CPPUTEST_USE_MEM_LEAK_DETECTION), N) - CPPUTEST_CPPFLAGS += -DCPPUTEST_MEM_LEAK_DETECTION_DISABLED -else - ifndef CPPUTEST_MEMLEAK_DETECTOR_NEW_MACRO_FILE - CPPUTEST_MEMLEAK_DETECTOR_NEW_MACRO_FILE = -include $(CPPUTEST_HOME)/include/CppUTest/MemoryLeakDetectorNewMacros.h - endif - ifndef CPPUTEST_MEMLEAK_DETECTOR_MALLOC_MACRO_FILE - CPPUTEST_MEMLEAK_DETECTOR_MALLOC_MACRO_FILE = -include $(CPPUTEST_HOME)/include/CppUTest/MemoryLeakDetectorMallocMacros.h - endif -endif - -ifeq ($(CPPUTEST_ENABLE_DEBUG), Y) - CPPUTEST_CXXFLAGS += -g - CPPUTEST_CFLAGS += -g - CPPUTEST_LDFLAGS += -g -endif - -ifeq ($(CPPUTEST_USE_STD_CPP_LIB), N) - CPPUTEST_CPPFLAGS += -DCPPUTEST_STD_CPP_LIB_DISABLED -ifeq ($(CPPUTEST_USE_STD_C_LIB), Y) - CPPUTEST_CXXFLAGS += -nostdinc++ -endif -endif - -ifdef $(GMOCK_HOME) - GTEST_HOME = $(GMOCK_HOME)/gtest - CPPUTEST_CPPFLAGS += -I$(GMOCK_HOME)/include - GMOCK_LIBRARY = $(GMOCK_HOME)/lib/.libs/libgmock.a - LD_LIBRARIES += $(GMOCK_LIBRARY) - CPPUTEST_CPPFLAGS += -DINCLUDE_GTEST_TESTS - CPPUTEST_WARNINGFLAGS = - CPPUTEST_CPPFLAGS += -I$(GTEST_HOME)/include -I$(GTEST_HOME) - GTEST_LIBRARY = $(GTEST_HOME)/lib/.libs/libgtest.a - LD_LIBRARIES += $(GTEST_LIBRARY) -endif - - -ifeq ($(CPPUTEST_USE_GCOV), Y) - CPPUTEST_CXXFLAGS += -fprofile-arcs -ftest-coverage - CPPUTEST_CFLAGS += -fprofile-arcs -ftest-coverage -endif - -CPPUTEST_CXXFLAGS += $(CPPUTEST_WARNINGFLAGS) $(CPPUTEST_CXX_WARNINGFLAGS) -CPPUTEST_CPPFLAGS += $(CPPUTEST_WARNINGFLAGS) -CPPUTEST_CXXFLAGS += $(CPPUTEST_MEMLEAK_DETECTOR_NEW_MACRO_FILE) -CPPUTEST_CPPFLAGS += $(CPPUTEST_MEMLEAK_DETECTOR_MALLOC_MACRO_FILE) -CPPUTEST_CFLAGS += $(CPPUTEST_C_WARNINGFLAGS) - -TARGET_MAP = $(COMPONENT_NAME).map.txt -ifeq ($(CPPUTEST_MAP_FILE), Y) - CPPUTEST_LDFLAGS += -Wl,-map,$(TARGET_MAP) -endif - -# Link with CppUTest lib -CPPUTEST_LIB = $(CPPUTEST_LIB_LINK_DIR)/libCppUTest.a - -ifeq ($(CPPUTEST_USE_EXTENSIONS), Y) -CPPUTEST_LIB += $(CPPUTEST_LIB_LINK_DIR)/libCppUTestExt.a -endif - -ifdef CPPUTEST_STATIC_REALTIME - LD_LIBRARIES += -lrt -endif - -TARGET_LIB = \ - $(CPPUTEST_LIB_DIR)/lib$(COMPONENT_NAME).a - -ifndef TEST_TARGET - ifndef TARGET_PLATFORM - TEST_TARGET = $(COMPONENT_NAME)_tests - else - TEST_TARGET = $(COMPONENT_NAME)_$(TARGET_PLATFORM)_tests - endif -endif - -#Helper Functions -get_src_from_dir = $(wildcard $1/*.cpp) $(wildcard $1/*.cc) $(wildcard $1/*.c) -get_dirs_from_dirspec = $(wildcard $1) -get_src_from_dir_list = $(foreach dir, $1, $(call get_src_from_dir,$(dir))) -__src_to = $(subst .c,$1, $(subst .cc,$1, $(subst .cpp,$1,$(if $(CPPUTEST_USE_VPATH),$(notdir $2),$2)))) -src_to = $(addprefix $(CPPUTEST_OBJS_DIR)/,$(call __src_to,$1,$2)) -src_to_o = $(call src_to,.o,$1) -src_to_d = $(call src_to,.d,$1) -src_to_gcda = $(call src_to,.gcda,$1) -src_to_gcno = $(call src_to,.gcno,$1) -time = $(shell date +%s) -delta_t = $(eval minus, $1, $2) -debug_print_list = $(foreach word,$1,echo " $(word)";) echo; - -#Derived -STUFF_TO_CLEAN += $(TEST_TARGET) $(TEST_TARGET).exe $(TARGET_LIB) $(TARGET_MAP) - -SRC += $(call get_src_from_dir_list, $(SRC_DIRS)) $(SRC_FILES) -OBJ = $(call src_to_o,$(SRC)) - -STUFF_TO_CLEAN += $(OBJ) - -TEST_SRC += $(call get_src_from_dir_list, $(TEST_SRC_DIRS)) $(TEST_SRC_FILES) -TEST_OBJS = $(call src_to_o,$(TEST_SRC)) -STUFF_TO_CLEAN += $(TEST_OBJS) - - -MOCKS_SRC += $(call get_src_from_dir_list, $(MOCKS_SRC_DIRS)) -MOCKS_OBJS = $(call src_to_o,$(MOCKS_SRC)) -STUFF_TO_CLEAN += $(MOCKS_OBJS) - -ALL_SRC = $(SRC) $(TEST_SRC) $(MOCKS_SRC) - -# If we're using VPATH -ifeq ($(CPPUTEST_USE_VPATH), Y) -# gather all the source directories and add them - VPATH += $(sort $(dir $(ALL_SRC))) -# Add the component name to the objs dir path, to differentiate between same-name objects - CPPUTEST_OBJS_DIR := $(addsuffix /$(COMPONENT_NAME),$(CPPUTEST_OBJS_DIR)) -endif - -#Test coverage with gcov -GCOV_OUTPUT = gcov_output.txt -GCOV_REPORT = gcov_report.txt -GCOV_ERROR = gcov_error.txt -GCOV_GCDA_FILES = $(call src_to_gcda, $(ALL_SRC)) -GCOV_GCNO_FILES = $(call src_to_gcno, $(ALL_SRC)) -TEST_OUTPUT = $(TEST_TARGET).txt -STUFF_TO_CLEAN += \ - $(GCOV_OUTPUT)\ - $(GCOV_REPORT)\ - $(GCOV_REPORT).html\ - $(GCOV_ERROR)\ - $(GCOV_GCDA_FILES)\ - $(GCOV_GCNO_FILES)\ - $(TEST_OUTPUT) - -#The gcda files for gcov need to be deleted before each run -#To avoid annoying messages. -GCOV_CLEAN = $(SILENCE)rm -f $(GCOV_GCDA_FILES) $(GCOV_OUTPUT) $(GCOV_REPORT) $(GCOV_ERROR) -RUN_TEST_TARGET = $(SILENCE) $(GCOV_CLEAN) ; echo "Running $(TEST_TARGET)"; ./$(TEST_TARGET) $(CPPUTEST_EXE_FLAGS) -ojunit - -ifeq ($(CPPUTEST_USE_GCOV), Y) - - ifeq ($(COMPILER_NAME),$(CLANG_STR)) - LD_LIBRARIES += --coverage - else - LD_LIBRARIES += -lgcov - endif -endif - - -INCLUDES_DIRS_EXPANDED = $(call get_dirs_from_dirspec, $(INCLUDE_DIRS)) -INCLUDES += $(foreach dir, $(INCLUDES_DIRS_EXPANDED), -I$(dir)) -MOCK_DIRS_EXPANDED = $(call get_dirs_from_dirspec, $(MOCKS_SRC_DIRS)) -INCLUDES += $(foreach dir, $(MOCK_DIRS_EXPANDED), -I$(dir)) - -CPPUTEST_CPPFLAGS += $(INCLUDES) $(CPPUTESTFLAGS) - -DEP_FILES = $(call src_to_d, $(ALL_SRC)) -STUFF_TO_CLEAN += $(DEP_FILES) $(PRODUCTION_CODE_START) $(PRODUCTION_CODE_END) -STUFF_TO_CLEAN += $(STDLIB_CODE_START) $(MAP_FILE) cpputest_*.xml junit_run_output - -# We'll use the CPPUTEST_CFLAGS etc so that you can override AND add to the CppUTest flags -CFLAGS = $(CPPUTEST_CFLAGS) $(CPPUTEST_ADDITIONAL_CFLAGS) -CPPFLAGS = $(CPPUTEST_CPPFLAGS) $(CPPUTEST_ADDITIONAL_CPPFLAGS) -CXXFLAGS = $(CPPUTEST_CXXFLAGS) $(CPPUTEST_ADDITIONAL_CXXFLAGS) -LDFLAGS = $(CPPUTEST_LDFLAGS) $(CPPUTEST_ADDITIONAL_LDFLAGS) - -# Don't consider creating the archive a warning condition that does STDERR output -ARFLAGS := $(ARFLAGS)c - -DEP_FLAGS=-MMD -MP - -# Some macros for programs to be overridden. For some reason, these are not in Make defaults -RANLIB = ranlib - -# Targets - -.PHONY: all -all: start $(TEST_TARGET) - $(RUN_TEST_TARGET) - -.PHONY: start -start: $(TEST_TARGET) - $(SILENCE)START_TIME=$(call time) - -.PHONY: all_no_tests -all_no_tests: $(TEST_TARGET) - -.PHONY: flags -flags: - @echo - @echo "OS ${UNAME_OS}" - @echo "Compile C and C++ source with CPPFLAGS:" - @$(call debug_print_list,$(CPPFLAGS)) - @echo "Compile C++ source with CXXFLAGS:" - @$(call debug_print_list,$(CXXFLAGS)) - @echo "Compile C source with CFLAGS:" - @$(call debug_print_list,$(CFLAGS)) - @echo "Link with LDFLAGS:" - @$(call debug_print_list,$(LDFLAGS)) - @echo "Link with LD_LIBRARIES:" - @$(call debug_print_list,$(LD_LIBRARIES)) - @echo "Create libraries with ARFLAGS:" - @$(call debug_print_list,$(ARFLAGS)) - -TEST_DEPS = $(TEST_OBJS) $(MOCKS_OBJS) $(PRODUCTION_CODE_START) $(TARGET_LIB) $(USER_LIBS) $(PRODUCTION_CODE_END) $(CPPUTEST_LIB) $(STDLIB_CODE_START) -test-deps: $(TEST_DEPS) - -$(TEST_TARGET): $(TEST_DEPS) - @echo Linking $@ - $(SILENCE)$(CXX) -o $@ $^ $(LD_LIBRARIES) $(LDFLAGS) - -$(TARGET_LIB): $(OBJ) - @echo Building archive $@ - $(SILENCE)mkdir -p $(dir $@) - $(SILENCE)$(AR) $(ARFLAGS) $@ $^ - $(SILENCE)$(RANLIB) $@ - -test: $(TEST_TARGET) - $(RUN_TEST_TARGET) | tee $(TEST_OUTPUT) - -vtest: $(TEST_TARGET) - $(RUN_TEST_TARGET) -v | tee $(TEST_OUTPUT) - -$(CPPUTEST_OBJS_DIR)/%.o: %.cc - @echo compiling $(notdir $<) - $(SILENCE)mkdir -p $(dir $@) - $(SILENCE)$(COMPILE.cpp) $(DEP_FLAGS) $(OUTPUT_OPTION) $< - -$(CPPUTEST_OBJS_DIR)/%.o: %.cpp - @echo compiling $(notdir $<) - $(SILENCE)mkdir -p $(dir $@) - $(SILENCE)$(COMPILE.cpp) $(DEP_FLAGS) $(OUTPUT_OPTION) $< - -$(CPPUTEST_OBJS_DIR)/%.o: %.c - @echo compiling $(notdir $<) - $(SILENCE)mkdir -p $(dir $@) - $(SILENCE)$(COMPILE.c) $(DEP_FLAGS) $(OUTPUT_OPTION) $< - -ifneq "$(MAKECMDGOALS)" "clean" --include $(DEP_FILES) -endif - -.PHONY: clean -clean: - @echo Making clean - $(SILENCE)$(RM) $(STUFF_TO_CLEAN) - $(SILENCE)rm -rf gcov objs #$(CPPUTEST_OBJS_DIR) - $(SILENCE)rm -rf $(CPPUTEST_LIB_DIR) - $(SILENCE)find . -name "*.gcno" | xargs rm -f - $(SILENCE)find . -name "*.gcda" | xargs rm -f - -#realclean gets rid of all gcov, o and d files in the directory tree -#not just the ones made by this makefile -.PHONY: realclean -realclean: clean - $(SILENCE)rm -rf gcov - $(SILENCE)find . -name "*.gdcno" | xargs rm -f - $(SILENCE)find . -name "*.[do]" | xargs rm -f - -gcov: test -ifeq ($(CPPUTEST_USE_VPATH), Y) - $(SILENCE)gcov --object-directory $(CPPUTEST_OBJS_DIR) $(SRC) >> $(GCOV_OUTPUT) 2>> $(GCOV_ERROR) -else - $(SILENCE)for d in $(SRC_DIRS) ; do \ - gcov --object-directory $(CPPUTEST_OBJS_DIR)/$$d $$d/*.c $$d/*.cpp >> $(GCOV_OUTPUT) 2>>$(GCOV_ERROR) ; \ - done - $(SILENCE)for f in $(SRC_FILES) ; do \ - gcov --object-directory $(CPPUTEST_OBJS_DIR)/$$f $$f >> $(GCOV_OUTPUT) 2>>$(GCOV_ERROR) ; \ - done -endif -# $(CPPUTEST_HOME)/scripts/filterGcov.sh $(GCOV_OUTPUT) $(GCOV_ERROR) $(GCOV_REPORT) $(TEST_OUTPUT) - /usr/share/cpputest/scripts/filterGcov.sh $(GCOV_OUTPUT) $(GCOV_ERROR) $(GCOV_REPORT) $(TEST_OUTPUT) - $(SILENCE)cat $(GCOV_REPORT) - $(SILENCE)mkdir -p gcov - $(SILENCE)mv *.gcov gcov - $(SILENCE)mv gcov_* gcov - @echo "See gcov directory for details" - -.PHONEY: format -format: - $(CPPUTEST_HOME)/scripts/reformat.sh $(PROJECT_HOME_DIR) - -.PHONEY: debug -debug: - @echo - @echo "Target Source files:" - @$(call debug_print_list,$(SRC)) - @echo "Target Object files:" - @$(call debug_print_list,$(OBJ)) - @echo "Test Source files:" - @$(call debug_print_list,$(TEST_SRC)) - @echo "Test Object files:" - @$(call debug_print_list,$(TEST_OBJS)) - @echo "Mock Source files:" - @$(call debug_print_list,$(MOCKS_SRC)) - @echo "Mock Object files:" - @$(call debug_print_list,$(MOCKS_OBJS)) - @echo "All Input Dependency files:" - @$(call debug_print_list,$(DEP_FILES)) - @echo Stuff to clean: - @$(call debug_print_list,$(STUFF_TO_CLEAN)) - @echo Includes: - @$(call debug_print_list,$(INCLUDES)) - --include $(OTHER_MAKEFILE_TO_INCLUDE) diff --git a/features/FEATURE_COMMON_PAL/mbed-client-randlib/test/mbed-client-randlib/unittest/makefile_defines.txt b/features/FEATURE_COMMON_PAL/mbed-client-randlib/test/mbed-client-randlib/unittest/makefile_defines.txt deleted file mode 100644 index 18691ee543..0000000000 --- a/features/FEATURE_COMMON_PAL/mbed-client-randlib/test/mbed-client-randlib/unittest/makefile_defines.txt +++ /dev/null @@ -1,18 +0,0 @@ -#--- Inputs ----# -CPPUTEST_HOME = /usr -CPPUTEST_USE_EXTENSIONS = Y -CPPUTEST_USE_VPATH = Y -CPPUTEST_USE_GCOV = Y -CPP_PLATFORM = gcc -INCLUDE_DIRS =\ - .\ - ../common\ - ../stubs\ - ../../../..\ - ../../../../source\ - ../../../../mbed-client-randlib\ - /usr/include\ - $(CPPUTEST_HOME)/include\ - -CPPUTESTFLAGS = -D__thumb2__ -w -CPPUTEST_CFLAGS += -std=gnu99 diff --git a/features/FEATURE_COMMON_PAL/mbed-client-randlib/test/mbed-client-randlib/unittest/randlib/main.cpp b/features/FEATURE_COMMON_PAL/mbed-client-randlib/test/mbed-client-randlib/unittest/randlib/main.cpp deleted file mode 100644 index d76b2f9173..0000000000 --- a/features/FEATURE_COMMON_PAL/mbed-client-randlib/test/mbed-client-randlib/unittest/randlib/main.cpp +++ /dev/null @@ -1,15 +0,0 @@ -/* - * Copyright (c) 2015 ARM. All rights reserved. - */ - -#include "CppUTest/CommandLineTestRunner.h" -#include "CppUTest/TestPlugin.h" -#include "CppUTest/TestRegistry.h" -#include "CppUTestExt/MockSupportPlugin.h" -int main(int ac, char** av) -{ - return CommandLineTestRunner::RunAllTests(ac, av); -} - -IMPORT_TEST_GROUP(randLIB); - diff --git a/features/FEATURE_COMMON_PAL/mbed-client-randlib/test/mbed-client-randlib/unittest/randlib/randlibtest.cpp b/features/FEATURE_COMMON_PAL/mbed-client-randlib/test/mbed-client-randlib/unittest/randlib/randlibtest.cpp deleted file mode 100644 index 79d2159684..0000000000 --- a/features/FEATURE_COMMON_PAL/mbed-client-randlib/test/mbed-client-randlib/unittest/randlib/randlibtest.cpp +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright (c) 2016 ARM. All rights reserved. - */ -#include "CppUTest/TestHarness.h" -#include "test_randlib.h" - -TEST_GROUP(randLIB) -{ - void setup() - { - } - - void teardown() - { - } -}; - -TEST(randLIB, test_randLIB_seed_random) -{ - CHECK(test_randLIB_seed_random()); -} - -TEST(randLIB, test_randLIB_get_8bit) -{ - CHECK(test_randLIB_get_8bit()); -} - -TEST(randLIB, test_randLIB_get_16bit) -{ - CHECK(test_randLIB_get_16bit()); -} - -TEST(randLIB, test_randLIB_get_32bit) -{ - CHECK(test_randLIB_get_32bit()); -} - -TEST(randLIB, test_randLIB_get_n_bytes_random) -{ - CHECK(test_randLIB_get_n_bytes_random()); -} - -TEST(randLIB, test_randLIB_get_random_in_range) -{ - CHECK(test_randLIB_get_random_in_range()); -} - -TEST(randLIB, test_randLIB_randomise_base) -{ - CHECK(test_randLIB_randomise_base()); -} diff --git a/features/FEATURE_COMMON_PAL/mbed-client-randlib/test/mbed-client-randlib/unittest/randlib/test_randlib.c b/features/FEATURE_COMMON_PAL/mbed-client-randlib/test/mbed-client-randlib/unittest/randlib/test_randlib.c deleted file mode 100644 index a8187d8262..0000000000 --- a/features/FEATURE_COMMON_PAL/mbed-client-randlib/test/mbed-client-randlib/unittest/randlib/test_randlib.c +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Copyright (c) 2016 ARM. All rights reserved. - */ -#include "test_randlib.h" -#include -#include -#include "randLIB.h" - -bool test_randLIB_seed_random() -{ - randLIB_seed_random(); - return true; -} - -bool test_randLIB_get_8bit() -{ - randLIB_seed_random(); - uint8_t test = randLIB_get_8bit(); - if( test == 0 ) { - test = randLIB_get_8bit(); - if( test == 0 ) { - return false; - } - } - return true; -} - -bool test_randLIB_get_16bit() -{ - randLIB_seed_random(); - uint16_t test = randLIB_get_16bit(); - if( test == 0 ) { - test = randLIB_get_16bit(); - if( test == 0 ) { - return false; - } - } - return true; -} - -bool test_randLIB_get_32bit() -{ - randLIB_seed_random(); - uint32_t test = randLIB_get_32bit(); - if( test == 0 ) { - test = randLIB_get_32bit(); - if( test == 0 ) { - return false; - } - } - return true; -} - -bool test_randLIB_get_n_bytes_random() -{ - int8_t ret = randLIB_get_n_bytes_random(NULL, 0); - if( ret != -1){ - return false; - } - - uint8_t dat[5]; - ret = randLIB_get_n_bytes_random(&dat, 5); - if( ret != 0){ - return false; - } - return true; -} - -bool test_randLIB_get_random_in_range() -{ - uint16_t ret = randLIB_get_random_in_range(2, 2); - if( ret != 2 ){ - return false; - } - - ret = randLIB_get_random_in_range(2, 3); - if( ret != 2 && ret != 3){ - return false; - } - - ret = randLIB_get_random_in_range(0, 0xFFFF); - - return true; -} - -bool test_randLIB_randomise_base() -{ - uint32_t ret = randLIB_randomise_base(0,0,0); - if( ret ){ - return false; - } - ret = randLIB_randomise_base(0xffff0000,0x8888,0x8888); - if( ret != 0xffffffff ){ - return false; - } - return true; -} diff --git a/features/FEATURE_COMMON_PAL/mbed-client-randlib/test/mbed-client-randlib/unittest/randlib/test_randlib.h b/features/FEATURE_COMMON_PAL/mbed-client-randlib/test/mbed-client-randlib/unittest/randlib/test_randlib.h deleted file mode 100644 index f83d7d60fe..0000000000 --- a/features/FEATURE_COMMON_PAL/mbed-client-randlib/test/mbed-client-randlib/unittest/randlib/test_randlib.h +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright (c) 2016 ARM. All rights reserved. - */ -#ifndef TEST_RANDLIB_H -#define TEST_RANDLIB_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include - -bool test_randLIB_seed_random(); - -bool test_randLIB_get_8bit(); - -bool test_randLIB_get_16bit(); - -bool test_randLIB_get_32bit(); - -bool test_randLIB_get_n_bytes_random(); - -bool test_randLIB_get_random_in_range(); - -bool test_randLIB_randomise_base(); - - -#ifdef __cplusplus -} -#endif - -#endif // TEST_RANDLIB_H - diff --git a/features/FEATURE_COMMON_PAL/mbed-client-randlib/test/mbed-client-randlib/unittest/randlib_linux/main.cpp b/features/FEATURE_COMMON_PAL/mbed-client-randlib/test/mbed-client-randlib/unittest/randlib_linux/main.cpp deleted file mode 100644 index 25a4c3b6d0..0000000000 --- a/features/FEATURE_COMMON_PAL/mbed-client-randlib/test/mbed-client-randlib/unittest/randlib_linux/main.cpp +++ /dev/null @@ -1,14 +0,0 @@ -/* - * Copyright (c) 2015 ARM. All rights reserved. - */ - -#include "CppUTest/CommandLineTestRunner.h" -#include "CppUTest/TestPlugin.h" -#include "CppUTest/TestRegistry.h" -#include "CppUTestExt/MockSupportPlugin.h" -int main(int ac, char** av) -{ - return CommandLineTestRunner::RunAllTests(ac, av); -} - -IMPORT_TEST_GROUP(randLIB_linux); diff --git a/features/FEATURE_COMMON_PAL/mbed-client-randlib/test/mbed-client-randlib/unittest/randlib_linux/randlibtest.cpp b/features/FEATURE_COMMON_PAL/mbed-client-randlib/test/mbed-client-randlib/unittest/randlib_linux/randlibtest.cpp deleted file mode 100644 index b0a1399257..0000000000 --- a/features/FEATURE_COMMON_PAL/mbed-client-randlib/test/mbed-client-randlib/unittest/randlib_linux/randlibtest.cpp +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Copyright (c) 2016 ARM. All rights reserved. - */ -#include "CppUTest/TestHarness.h" -#include "../randlib/test_randlib.h" -#include "randLIB.h" - -TEST_GROUP(randLIB_linux) -{ - void setup() - { - } - - void teardown() - { - } -}; - -extern bool allow_open; - -TEST(randLIB_linux, test_randLIB_seed_random) -{ - allow_open = true; - CHECK(test_randLIB_seed_random()); -} - -TEST(randLIB_linux, test_randLIB_get_8bit) -{ - allow_open = true; - CHECK(test_randLIB_get_8bit()); -} - -TEST(randLIB_linux, test_randLIB_get_16bit) -{ - allow_open = true; - CHECK(test_randLIB_get_16bit()); -} - -TEST(randLIB_linux, test_randLIB_get_32bit) -{ - allow_open = true; - CHECK(test_randLIB_get_32bit()); -} - -TEST(randLIB_linux, test_randLIB_get_n_bytes_random) -{ - allow_open = true; - CHECK(test_randLIB_get_n_bytes_random()); -} - -TEST(randLIB_linux, test_randLIB_get_random_in_range) -{ - allow_open = true; - CHECK(test_randLIB_get_random_in_range()); -} - -TEST(randLIB_linux, test_randLIB_randomise_base) -{ - allow_open = true; - CHECK(test_randLIB_randomise_base()); -} - -TEST(randLIB_linux, test_fail_to_open) -{ - uint8_t buf[4]; - allow_open = false; - CHECK(-1 == randLIB_get_n_bytes_random(buf, 4)); - allow_open = true; -} diff --git a/features/FEATURE_COMMON_PAL/mbed-client-randlib/test/mbed-client-randlib/unittest/run_tests b/features/FEATURE_COMMON_PAL/mbed-client-randlib/test/mbed-client-randlib/unittest/run_tests deleted file mode 100644 index 87f2f504e6..0000000000 --- a/features/FEATURE_COMMON_PAL/mbed-client-randlib/test/mbed-client-randlib/unittest/run_tests +++ /dev/null @@ -1,43 +0,0 @@ -#!/bin/bash -echo -echo Build mbed client randlib unit tests -echo - -# Remember to add new test folder to Makefile -make clean -make all - -echo -echo Create results -echo -mkdir results - -find ./ -name '*.xml' | xargs cp -t ./results/ - -echo -echo Create coverage document -echo -mkdir coverages -cd coverages - -#copy the .gcda & .gcno for all test projects (no need to modify -#cp ../../../source/*.gc* . -#find ../ -name '*.gcda' | xargs cp -t . -#find ../ -name '*.gcno' | xargs cp -t . -#find . -name "test*" -type f -delete -#find . -name "*test*" -type f -delete -#find . -name "*stub*" -type f -delete -#rm -rf main.* - -lcov -q -d ../. -c -o app.info -lcov -q -r app.info "/test*" -o app.info -lcov -q -r app.info "/usr*" -o app.info -genhtml --no-branch-coverage app.info -cd .. -echo -echo -echo -echo Have a nice bug hunt! -echo -echo -echo diff --git a/features/FEATURE_COMMON_PAL/mbed-client-randlib/test/mbed-client-randlib/unittest/stubs/open_stub.c b/features/FEATURE_COMMON_PAL/mbed-client-randlib/test/mbed-client-randlib/unittest/stubs/open_stub.c deleted file mode 100644 index 588c12096e..0000000000 --- a/features/FEATURE_COMMON_PAL/mbed-client-randlib/test/mbed-client-randlib/unittest/stubs/open_stub.c +++ /dev/null @@ -1,24 +0,0 @@ -#include -#include -#include -#include -#include - -bool allow_open = true; -int __real_open(const char *path, int flags, ...); -int __wrap_open(const char *path, int flags, ...) -{ - if (allow_open) { - if (flags & O_CREAT) { - va_list vl; - va_start(vl,flags); - mode_t mode = va_arg(vl, mode_t); - va_end(vl); - return __real_open(path, flags, mode); - } else { - return __real_open(path, flags); - } - } else { - return -1; - } -} diff --git a/features/FEATURE_COMMON_PAL/mbed-client-randlib/test/mbed-client-randlib/unittest/stubs/random_stub.c b/features/FEATURE_COMMON_PAL/mbed-client-randlib/test/mbed-client-randlib/unittest/stubs/random_stub.c deleted file mode 100644 index 773bb07d69..0000000000 --- a/features/FEATURE_COMMON_PAL/mbed-client-randlib/test/mbed-client-randlib/unittest/stubs/random_stub.c +++ /dev/null @@ -1,15 +0,0 @@ -/* - * Copyright (c) 2016, ARM Limited, All Rights Reserved - */ -#include "inttypes.h" - - -void arm_random_module_init(void) -{ - -} - -uint32_t arm_random_seed_get(void) -{ - return 4; -} From c0adb069c976ecfdb19b5edfdf3bce430eb394ea Mon Sep 17 00:00:00 2001 From: Seppo Takalo Date: Wed, 9 Nov 2016 15:26:30 +0200 Subject: [PATCH 151/154] Remove coap-service --- .../FEATURE_NANOSTACK/coap-service/.gitignore | 10 - .../coap-service/.mbedignore | 1 - .../coap-service/.yotta_ignore | 4 - .../FEATURE_NANOSTACK/coap-service/LICENSE | 2 - .../coap-service/Makefile.test | 51 -- .../coap-service/apache-2.0.txt | 56 -- .../coap-service/coap_service_api.h | 270 ------ .../coap-service/junit_xsl.xslt | 101 --- .../coap-service/module.json | 27 - .../coap-service/run_unit_tests.sh | 23 - .../source/coap_connection_handler.c | 802 ------------------ .../source/coap_message_handler.c | 389 --------- .../source/coap_security_handler.c | 581 ------------- .../coap-service/source/coap_service_api.c | 473 ----------- .../source/include/coap_connection_handler.h | 71 -- .../source/include/coap_message_handler.h | 84 -- .../source/include/coap_security_handler.h | 123 --- .../include/coap_service_api_internal.h | 25 - .../coap-service/unittest/MakefileWorker.mk | 562 ------------ .../coap_connection_handlertest.cpp | 62 -- .../unittest/coap_connection_handler/main.cpp | 15 - .../test_coap_connection_handler.c | 469 ---------- .../test_coap_connection_handler.h | 50 -- .../coap_message_handlertest.cpp | 52 -- .../unittest/coap_message_handler/main.cpp | 15 - .../test_coap_message_handler.c | 301 ------- .../test_coap_message_handler.h | 40 - .../coap_security_handlertest.cpp | 55 -- .../unittest/coap_security_handler/main.cpp | 15 - .../test_coap_security_handler.c | 286 ------- .../test_coap_security_handler.h | 47 - .../coap_service_api/coap_service_apitest.cpp | 72 -- .../unittest/coap_service_api/main.cpp | 15 - .../coap_service_api/test_coap_service_api.c | 418 --------- .../coap_service_api/test_coap_service_api.h | 55 -- .../unittest/makefile_defines.txt | 40 - .../test/coap-service/unittest/run_tests | 35 - .../stub/coap_connection_handler_stub.c | 67 -- .../stub/coap_connection_handler_stub.h | 49 -- .../unittest/stub/coap_message_handler_stub.c | 58 -- .../unittest/stub/coap_message_handler_stub.h | 44 - .../stub/coap_security_handler_stub.c | 74 -- .../stub/coap_security_handler_stub.h | 38 - .../unittest/stub/coap_service_api_stub.c | 64 -- .../unittest/stub/eventOS_event_stub.c | 21 - .../unittest/stub/eventOS_event_stub.h | 39 - .../unittest/stub/mbed_trace_stub.c | 116 --- .../coap-service/unittest/stub/mbedtls_stub.c | 310 ------- .../coap-service/unittest/stub/mbedtls_stub.h | 53 -- .../coap-service/unittest/stub/ns_list_stub.c | 9 - .../unittest/stub/ns_timer_stub.c | 45 - .../unittest/stub/ns_timer_stub.h | 36 - .../unittest/stub/nsdynmemLIB_stub.c | 46 - .../unittest/stub/nsdynmemLIB_stub.h | 43 - .../coap-service/unittest/stub/randLIB_stub.c | 52 -- .../unittest/stub/sn_coap_builder_stub.c | 43 - .../unittest/stub/sn_coap_builder_stub.h | 30 - .../unittest/stub/sn_coap_parser_stub.c | 68 -- .../unittest/stub/sn_coap_parser_stub.h | 30 - .../unittest/stub/sn_coap_protocol_stub.c | 96 --- .../unittest/stub/sn_coap_protocol_stub.h | 35 - .../unittest/stub/socket_api_stub.c | 118 --- .../unittest/stub/socket_api_stub.h | 45 - .../unittest/stub/system_timer_stub.c | 58 -- .../coap-service/unittest/stub/timeout_stub.c | 22 - .../coap-service/xsl_script.sh | 35 - 66 files changed, 7441 deletions(-) delete mode 100644 features/nanostack/FEATURE_NANOSTACK/coap-service/.gitignore delete mode 100644 features/nanostack/FEATURE_NANOSTACK/coap-service/.mbedignore delete mode 100644 features/nanostack/FEATURE_NANOSTACK/coap-service/.yotta_ignore delete mode 100644 features/nanostack/FEATURE_NANOSTACK/coap-service/LICENSE delete mode 100644 features/nanostack/FEATURE_NANOSTACK/coap-service/Makefile.test delete mode 100644 features/nanostack/FEATURE_NANOSTACK/coap-service/apache-2.0.txt delete mode 100644 features/nanostack/FEATURE_NANOSTACK/coap-service/coap-service/coap_service_api.h delete mode 100644 features/nanostack/FEATURE_NANOSTACK/coap-service/junit_xsl.xslt delete mode 100644 features/nanostack/FEATURE_NANOSTACK/coap-service/module.json delete mode 100644 features/nanostack/FEATURE_NANOSTACK/coap-service/run_unit_tests.sh delete mode 100644 features/nanostack/FEATURE_NANOSTACK/coap-service/source/coap_connection_handler.c delete mode 100644 features/nanostack/FEATURE_NANOSTACK/coap-service/source/coap_message_handler.c delete mode 100644 features/nanostack/FEATURE_NANOSTACK/coap-service/source/coap_security_handler.c delete mode 100644 features/nanostack/FEATURE_NANOSTACK/coap-service/source/coap_service_api.c delete mode 100644 features/nanostack/FEATURE_NANOSTACK/coap-service/source/include/coap_connection_handler.h delete mode 100644 features/nanostack/FEATURE_NANOSTACK/coap-service/source/include/coap_message_handler.h delete mode 100644 features/nanostack/FEATURE_NANOSTACK/coap-service/source/include/coap_security_handler.h delete mode 100644 features/nanostack/FEATURE_NANOSTACK/coap-service/source/include/coap_service_api_internal.h delete mode 100644 features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/MakefileWorker.mk delete mode 100644 features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/coap_connection_handler/coap_connection_handlertest.cpp delete mode 100644 features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/coap_connection_handler/main.cpp delete mode 100644 features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/coap_connection_handler/test_coap_connection_handler.c delete mode 100644 features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/coap_connection_handler/test_coap_connection_handler.h delete mode 100644 features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/coap_message_handler/coap_message_handlertest.cpp delete mode 100644 features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/coap_message_handler/main.cpp delete mode 100644 features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/coap_message_handler/test_coap_message_handler.c delete mode 100644 features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/coap_message_handler/test_coap_message_handler.h delete mode 100644 features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/coap_security_handler/coap_security_handlertest.cpp delete mode 100644 features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/coap_security_handler/main.cpp delete mode 100644 features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/coap_security_handler/test_coap_security_handler.c delete mode 100644 features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/coap_security_handler/test_coap_security_handler.h delete mode 100644 features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/coap_service_api/coap_service_apitest.cpp delete mode 100644 features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/coap_service_api/main.cpp delete mode 100644 features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/coap_service_api/test_coap_service_api.c delete mode 100644 features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/coap_service_api/test_coap_service_api.h delete mode 100644 features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/makefile_defines.txt delete mode 100755 features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/run_tests delete mode 100644 features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/coap_connection_handler_stub.c delete mode 100644 features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/coap_connection_handler_stub.h delete mode 100644 features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/coap_message_handler_stub.c delete mode 100644 features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/coap_message_handler_stub.h delete mode 100644 features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/coap_security_handler_stub.c delete mode 100644 features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/coap_security_handler_stub.h delete mode 100644 features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/coap_service_api_stub.c delete mode 100644 features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/eventOS_event_stub.c delete mode 100644 features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/eventOS_event_stub.h delete mode 100644 features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/mbed_trace_stub.c delete mode 100644 features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/mbedtls_stub.c delete mode 100644 features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/mbedtls_stub.h delete mode 100644 features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/ns_list_stub.c delete mode 100644 features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/ns_timer_stub.c delete mode 100644 features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/ns_timer_stub.h delete mode 100644 features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/nsdynmemLIB_stub.c delete mode 100644 features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/nsdynmemLIB_stub.h delete mode 100644 features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/randLIB_stub.c delete mode 100644 features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/sn_coap_builder_stub.c delete mode 100644 features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/sn_coap_builder_stub.h delete mode 100644 features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/sn_coap_parser_stub.c delete mode 100644 features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/sn_coap_parser_stub.h delete mode 100644 features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/sn_coap_protocol_stub.c delete mode 100644 features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/sn_coap_protocol_stub.h delete mode 100644 features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/socket_api_stub.c delete mode 100644 features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/socket_api_stub.h delete mode 100644 features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/system_timer_stub.c delete mode 100644 features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/timeout_stub.c delete mode 100755 features/nanostack/FEATURE_NANOSTACK/coap-service/xsl_script.sh diff --git a/features/nanostack/FEATURE_NANOSTACK/coap-service/.gitignore b/features/nanostack/FEATURE_NANOSTACK/coap-service/.gitignore deleted file mode 100644 index 7da85016ee..0000000000 --- a/features/nanostack/FEATURE_NANOSTACK/coap-service/.gitignore +++ /dev/null @@ -1,10 +0,0 @@ -*.a -*.lib -output -lcov -coverage -.yotta.json -build/ -yotta_modules/ -yotta_targets/ -upload.tar.gz diff --git a/features/nanostack/FEATURE_NANOSTACK/coap-service/.mbedignore b/features/nanostack/FEATURE_NANOSTACK/coap-service/.mbedignore deleted file mode 100644 index ab1cfb4ef2..0000000000 --- a/features/nanostack/FEATURE_NANOSTACK/coap-service/.mbedignore +++ /dev/null @@ -1 +0,0 @@ -test/* diff --git a/features/nanostack/FEATURE_NANOSTACK/coap-service/.yotta_ignore b/features/nanostack/FEATURE_NANOSTACK/coap-service/.yotta_ignore deleted file mode 100644 index ab97c1af02..0000000000 --- a/features/nanostack/FEATURE_NANOSTACK/coap-service/.yotta_ignore +++ /dev/null @@ -1,4 +0,0 @@ -unittest/* -test/* -doxygen/* - diff --git a/features/nanostack/FEATURE_NANOSTACK/coap-service/LICENSE b/features/nanostack/FEATURE_NANOSTACK/coap-service/LICENSE deleted file mode 100644 index 97df0e645d..0000000000 --- a/features/nanostack/FEATURE_NANOSTACK/coap-service/LICENSE +++ /dev/null @@ -1,2 +0,0 @@ -Unless specifically indicated otherwise in a file, files are licensed -under the Apache 2.0 license, as can be found in: apache-2.0.txt \ No newline at end of file diff --git a/features/nanostack/FEATURE_NANOSTACK/coap-service/Makefile.test b/features/nanostack/FEATURE_NANOSTACK/coap-service/Makefile.test deleted file mode 100644 index 8a1c3063f7..0000000000 --- a/features/nanostack/FEATURE_NANOSTACK/coap-service/Makefile.test +++ /dev/null @@ -1,51 +0,0 @@ -# -# Makefile.test for COAP service unit tests -# - -# List of subdirectories to build -TEST_FOLDER := ./test/ -# List of unit test directories for libraries -UNITTESTS := $(sort $(dir $(wildcard $(TEST_FOLDER)*/unittest/*))) -TESTDIRS := $(UNITTESTS:%=build-%) -CLEANTESTDIRS := $(UNITTESTS:%=clean-%) -COVERAGEFILE := ./lcov/coverage.info - -.PHONY: test -test: $(TESTDIRS) - @rm -rf ./lcov - @rm -rf ./coverage - @mkdir -p lcov - @mkdir -p lcov/results - @mkdir coverage - @find ./test -name '*.xml' | xargs cp -t ./lcov/results/ - @rm -f lcov/index.xml - @./xsl_script.sh - @cp junit_xsl.xslt lcov/. - @xsltproc -o lcov/testresults.html lcov/junit_xsl.xslt lcov/index.xml - @rm -f lcov/junit_xsl.xslt - @rm -f lcov/index.xml - @find ./ -name '*.gcno' | xargs cp --backup=numbered -t ./coverage/ - @find ./ -name '*.gcda' | xargs cp --backup=numbered -t ./coverage/ - @gcovr --object-directory ./coverage --exclude-unreachable-branches -e '.*/builds/.*' -e '.*/test/.*' -e '.*/yotta_modules/.*' -e '.*/stub/.*' -x -o ./lcov/gcovr.xml - @lcov -d test/. -c -o $(COVERAGEFILE) - @lcov -q -r $(COVERAGEFILE) "/usr*" -o $(COVERAGEFILE) - @lcov -q -r $(COVERAGEFILE) "/test*" -o $(COVERAGEFILE) - @lcov -q -r $(COVERAGEFILE) "/mbed-client-libservice*" -o $(COVERAGEFILE) - @lcov -q -r $(COVERAGEFILE) "/libService*" -o $(COVERAGEFILE) - @genhtml -q $(COVERAGEFILE) --show-details --output-directory lcov/html - @echo coap-service unit tests built - -$(TESTDIRS): - @make -C $(@:build-%=%) - -$(CLEANDIRS): - @make -C $(@:clean-%=%) clean - -$(CLEANTESTDIRS): - @make -C $(@:clean-%=%) clean - -# Extend default clean rule -clean: clean-extra - -clean-extra: $(CLEANDIRS) \ - $(CLEANTESTDIRS) diff --git a/features/nanostack/FEATURE_NANOSTACK/coap-service/apache-2.0.txt b/features/nanostack/FEATURE_NANOSTACK/coap-service/apache-2.0.txt deleted file mode 100644 index a2fecaf5f8..0000000000 --- a/features/nanostack/FEATURE_NANOSTACK/coap-service/apache-2.0.txt +++ /dev/null @@ -1,56 +0,0 @@ - - -Apache License - -Version 2.0, January 2004 - -http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - -"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - -"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - -"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - -"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - -"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - -"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - -"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - -"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - -"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - -"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - - You must give any other recipients of the Work or Derivative Works a copy of this License; and - You must cause any modified files to carry prominent notices stating that You changed the files; and - You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - - You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS diff --git a/features/nanostack/FEATURE_NANOSTACK/coap-service/coap-service/coap_service_api.h b/features/nanostack/FEATURE_NANOSTACK/coap-service/coap-service/coap_service_api.h deleted file mode 100644 index 9924d1f311..0000000000 --- a/features/nanostack/FEATURE_NANOSTACK/coap-service/coap-service/coap_service_api.h +++ /dev/null @@ -1,270 +0,0 @@ -/* - * Copyright (c) 2015-2016 ARM Limited. All Rights Reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * 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 COAP_SERVICE_API_H_ -#define COAP_SERVICE_API_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -#include - -#include "ns_types.h" -#include "sn_coap_header.h" -#include "ns_address.h" - -/** - * This interface is used in sending and receiving of CoAP messages to multicast address and receive multiple responses. - */ - -// Allowed_methods -#define COAP_SERVICE_ACCESS_ALL_ALLOWED 0x0F -#define COAP_SERVICE_ACCESS_GET_ALLOWED 0x01 -#define COAP_SERVICE_ACCESS_PUT_ALLOWED 0x02 -#define COAP_SERVICE_ACCESS_POST_ALLOWED 0x04 -#define COAP_SERVICE_ACCESS_DELETE_ALLOWED 0x08 - -// Bits for service options -#define COAP_SERVICE_OPTIONS_NONE 0x00 -#define COAP_SERVICE_OPTIONS_VIRTUAL_SOCKET 0x01 -#define COAP_SERVICE_OPTIONS_SECURE 0x02 -#define COAP_SERVICE_OPTIONS_EPHEMERAL_PORT 0x04 -/** Link-layer security bypass option is set*/ -#define COAP_SERVICE_OPTIONS_SECURE_BYPASS 0x80 - -// Bits for request options -#define COAP_REQUEST_OPTIONS_NONE 0x00 -#define COAP_REQUEST_OPTIONS_ADDRESS_DEFAULT 0x00//!< default is not setting either short or long. -#define COAP_REQUEST_OPTIONS_ADDRESS_LONG 0x01 -#define COAP_REQUEST_OPTIONS_ADDRESS_SHORT 0x02 -#define COAP_REQUEST_OPTIONS_MULTICAST 0x04 //!< indicates that CoAP library support multicasting -#define COAP_REQUEST_OPTIONS_SECURE_BYPASS 0x08 - -/** - * \brief Service message response receive callback. - * - * Function that handles CoAP service message receiving and parsing - * - * \param msg_id Id number of the current message. - * \param source_address IPv6 source address. - * \param source_port Source port - * \param response_ptr Pointer to CoAP header structure. - * - * \return 0 for success / -1 for failure - */ -typedef int coap_service_response_recv(int8_t service_id, uint8_t source_address[static 16], uint16_t source_port, sn_coap_hdr_s *response_ptr); - -/** - * \brief CoAP service request callback - * - * CoAP service request message receiving and parsing function - * - * \param service_id Id number of the current service. - * \param source_address IPv6 source address. - * \param source_port Source port - * \param request_ptr Pointer to CoAP header structure. - * - * \return Status - */ -typedef int coap_service_request_recv_cb(int8_t service_id, uint8_t source_address[static 16], uint16_t source_port, sn_coap_hdr_s *request_ptr); - -/** - * \brief Security service start callback - * - * Starts security service handling and fetches device password. - * - * \param service_id Id number of the current service. - * \param address Address of sender - * \param port Port of the device - * - * \return 0 for success / -1 for failure - */ -typedef int coap_service_security_start_cb(int8_t service_id, uint8_t address[static 16], uint16_t port, uint8_t* pw, uint8_t *pw_len); - -/** - * \brief CoAP service security done callback - * - * CoAP service security done callback function. - * - * \param service_id Id number of the current service. - * \param address Address of sender - * \param keyblock Security key (40 bits) - * - * \return 0 for success / -1 for failure - */ -typedef int coap_service_security_done_cb(int8_t service_id, uint8_t address[static 16], uint8_t keyblock[static 40]); - -/** - * \brief Initialise server instance. - * - * Initialise Thread services for the registered application. - * - * \param interface_id Informs registered application interface id. This parameter is passed to socket implementation. - * \param listen_port Port that Application wants to use for communicate with coap server. - * \param service_options Options of the current service. - * \param *start_ptr Callback to inform security handling is started and to fetch device password. - * \param *coap_security_done_cb Callback to inform security handling is done. - * - * \return service_id / -1 for failure - */ -extern int8_t coap_service_initialize(int8_t interface_id, uint16_t listen_port, uint8_t service_options, coap_service_security_start_cb *start_ptr, coap_service_security_done_cb *coap_security_done_cb); - -/** - * \brief Service delete - * - * Removes all data related to this instance - * - * \param service_id Id number of the current service. - */ -extern void coap_service_delete( int8_t service_id ); - -/** - * \brief Close secure connection - * - * Closes secure connection (if present), but leaves socket open. - * - * \param service_id Id number of the current service. - */ -extern void coap_service_close_secure_connection(int8_t service_id, uint8_t destination_addr_ptr[static 16], uint16_t port); - -/** - * \brief Sets password for device - * - * \param service_id Service id - * \param address Device address - * \param port Device port - * \param pw_ptr Pointer to password. - * \param pw_len Lenght of password. - * - * \return 0 for success / -1 for failure - */ -//int coap_service_security_key_set(int8_t service_id, uint8_t address[static 16], uint16_t port, uint8_t *pw_ptr, uint8_t pw_len); - -/** - * \brief Virtual socket sent callback. - * - * Sent data to virtual socket. - * - * \param service_id Id number of the current service. - * \param destination_addr_ptr Receiver IPv6 address. - * \param port Receiver port number. - * \param *data_ptr Pointer to the data. - * \param data_len Lenght of the data. - * - * \return 0 for success / -1 for failure - */ -typedef int coap_service_virtual_socket_send_cb(int8_t service_id, uint8_t destination_addr_ptr[static 16], uint16_t port, const uint8_t *data_ptr, uint16_t data_len); - -/** - * \brief Virtual socket read. - * - * Receive data from virtual socket. - * - * \param service_id Id number of the current service. - * \param source_addr_ptr Receiver IPv6 address. - * \param port Receiver port number. - * \param *data_ptr Pointer to the data - * \param data_len Lenght of the data - * - * \return 0 for success / -1 for failure - */ -extern int16_t coap_service_virtual_socket_recv(int8_t service_id, uint8_t source_addr_ptr[static 16], uint16_t port, uint8_t *data_ptr, uint16_t data_len); - -/** - * \brief Set virtual socket - * - * Sets virtual socket for CoAP services. - * - * \param service_id Id number of the current service. - * \param *send_method_ptr Callback to coap virtual socket. - * - * \return 0 for success / -1 for failure - */ -extern int16_t coap_service_virtual_socket_set_cb(int8_t service_id, coap_service_virtual_socket_send_cb *send_method_ptr); - -/** - * \brief Register unsecure callback methods to CoAP server - * - * Register application and informs CoAP services unsecure registery callback function. - * - * \param service_id Id number of the current service. - * \param *uri Uri address. - * \param port port that Application wants to use for communicate with coap server. - * \param allowed_method Informs method that is allowed to use (used defines described above). - * \param *request_recv_cb CoAP service request receive callback function pointer. - * - * \return 0 for success / -1 for failure - */ -extern int8_t coap_service_register_uri(int8_t service_id, const char *uri, uint8_t allowed_method, coap_service_request_recv_cb *request_recv_cb); - -/** - * \brief Unregister unsecure callback methods to CoAP server - * - * Register application and informs CoAP services unsecure registery callback function. - * - * \param service_id Id number of the current service. - * \param *uri Uri address. - * - * \return 0 for success / -1 for failure - */ -extern int8_t coap_service_unregister_uri(int8_t service_id, const char *uri); - -/** - * \brief Sends CoAP service request - * - * Build and sends CoAP service request message. - * - * \param service_id Id number of the current service. - * \param options Options defined above. - * \param destination_addr IPv6 address. - * \param destination_port Destination port - * \param msg_type Message type can be found from sn_coap_header. - * \param msg_code Message code can be found from sn_coap_header. - * \param *uri Uri address. - * \param cont_type Content type can be found from sn_coap_header. - * \param payload_ptr Pointer to message content. - * \param payload_len Lenght of the message. - * \param *request_response_cb Callback to inform result of the request. - * - * \return msg_id Id number of the current message. - */ -extern uint16_t coap_service_request_send(int8_t service_id, uint8_t options, const uint8_t destination_addr[static 16], uint16_t destination_port, sn_coap_msg_type_e msg_type, sn_coap_msg_code_e msg_code, const char *uri, - sn_coap_content_format_e cont_type, const uint8_t *payload_ptr, uint16_t payload_len, coap_service_response_recv *request_response_cb); - -/** - * \brief Sends CoAP service response - * - * Build and sends CoAP service response message. - * - * \param service_id Id number of the current service. - * \param msg_id Message ID number. - * \param options Options defined above. - * \param response_ptr Pointer to CoAP header structure. - * - * \return -1 For failure - *- 0 For success - */ -extern int8_t coap_service_response_send(int8_t service_id, uint8_t options, sn_coap_hdr_s *request_ptr, sn_coap_msg_code_e message_code, sn_coap_content_format_e content_type, const uint8_t *payload_ptr,uint16_t payload_len); - -extern int8_t coap_service_set_handshake_timeout(int8_t service_id, uint32_t min, uint32_t max); -#ifdef __cplusplus -} -#endif - -#endif /* COAP_SERVICE_API_H_ */ diff --git a/features/nanostack/FEATURE_NANOSTACK/coap-service/junit_xsl.xslt b/features/nanostack/FEATURE_NANOSTACK/coap-service/junit_xsl.xslt deleted file mode 100644 index 7376b27f26..0000000000 --- a/features/nanostack/FEATURE_NANOSTACK/coap-service/junit_xsl.xslt +++ /dev/null @@ -1,101 +0,0 @@ - - - - - - - - - -

- Unittest report -

- -

- - Total tests run - , failures: - - - - - -

-
- - -

- -

- - - - - - - - - - - -
Tests runTests failedOther errors
-
- - - - - - - - -
Tests namePASS/FAILFailing caseReason
-
- - - - - - - - - - - PASS - - - - - - - FAIL - - - - - - - - - - - - - - - - FAIL - - - - - - - - - - - - - -
\ No newline at end of file diff --git a/features/nanostack/FEATURE_NANOSTACK/coap-service/module.json b/features/nanostack/FEATURE_NANOSTACK/coap-service/module.json deleted file mode 100644 index 06a5aa0e15..0000000000 --- a/features/nanostack/FEATURE_NANOSTACK/coap-service/module.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "name": "coap-service", - "version": "4.0.3", - "description": "CoAP Service library", - "keywords": [ - "coap", - "service" - ], - "repository": { - "url": "git@github.com:ARMmbed/coap-service.git", - "type": "git" - }, - "homepage": "https://github.com/ARMmbed/coap-service", - "license": "Apache-2.0", - "extraIncludes": [ - "coap-service", - "nanostack-event-loop", - "source/include" - ], - "dependencies": { - "nanostack-libservice": "^3.0.0", - "mbed-client-c": "^3.0.0", - "sal-stack-nanostack": "^5.0.0", - "mbedtls": "^2.0.0" - }, - "targetDependencies": {} -} diff --git a/features/nanostack/FEATURE_NANOSTACK/coap-service/run_unit_tests.sh b/features/nanostack/FEATURE_NANOSTACK/coap-service/run_unit_tests.sh deleted file mode 100644 index 0fed9ad320..0000000000 --- a/features/nanostack/FEATURE_NANOSTACK/coap-service/run_unit_tests.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/bash -# Copyright (c) 2015 ARM Limited. All rights reserved. -# SPDX-License-Identifier: Apache-2.0 -# 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. - -echo -echo "Build coap service unit tests" -echo - -yt target x86-linux-native -yt up -make -f Makefile.test test -make -f Makefile.test test clean diff --git a/features/nanostack/FEATURE_NANOSTACK/coap-service/source/coap_connection_handler.c b/features/nanostack/FEATURE_NANOSTACK/coap-service/source/coap_connection_handler.c deleted file mode 100644 index 96baa165ea..0000000000 --- a/features/nanostack/FEATURE_NANOSTACK/coap-service/source/coap_connection_handler.c +++ /dev/null @@ -1,802 +0,0 @@ -/* - * Copyright (c) 2015-2016 ARM Limited. All Rights Reserved. - */ - -#include -#include "coap_connection_handler.h" -#include "coap_security_handler.h" -#include "ns_list.h" -#include "ns_trace.h" -#include "nsdynmemLIB.h" -#include "socket_api.h" -#include "net_interface.h" -#include "eventOS_event_timer.h" -#include "coap_service_api_internal.h" - -#define TRACE_GROUP "ThCH" - -typedef enum session_state_e { - SECURE_SESSION_HANDSHAKE_ONGOING = 0, - SECURE_SESSION_OK, - SECURE_SESSION_CLOSED -}session_state_t; - -typedef struct internal_socket_s { - coap_conn_handler_t *parent; - - uint32_t timeout_min; - uint32_t timeout_max; - - uint16_t listen_port; - int8_t listen_socket; - - ns_address_t dest_addr; - size_t data_len; - uint8_t *data; - - bool real_socket; - uint8_t usage_counter; - bool is_secure; - - bool bypass_link_sec; - - ns_list_link_t link; -} internal_socket_t; - -static NS_LIST_DEFINE(socket_list, internal_socket_t, link); - -static void timer_cb(void* param); - -#define TIMER_STATE_CANCELLED -1 /* cancelled */ -#define TIMER_STATE_NO_EXPIRY 0 /* none of the delays is expired */ -#define TIMER_STATE_INT_EXPIRY 1 /* the intermediate delay only is expired */ -#define TIMER_STATE_FIN_EXPIRY 2 /* the final delay is expired */ - -typedef struct secure_timer_s { - uint8_t id; - timeout_t *timer; - int8_t state; - uint32_t fin_ms; - uint32_t int_ms; -} secure_timer_t; - -typedef struct secure_session { - coap_security_t *sec_handler; //owned - internal_socket_t *parent; //not owned - - secure_timer_t timer; - - session_state_t session_state; - uint32_t last_contact_time; - ns_list_link_t link; -} secure_session_t; - -static NS_LIST_DEFINE(secure_session_list, secure_session_t, link); -static int send_to_socket(int8_t socket_id, uint8_t *address_ptr, uint16_t port, const unsigned char *buf, size_t len); -static int receive_from_socket(int8_t socket_id, unsigned char *buf, size_t len); -static void start_timer(int8_t timer_id, uint32_t int_ms, uint32_t fin_ms); -static int timer_status(int8_t timer_id); - -static secure_session_t *secure_session_find_by_timer_id(int8_t timer_id) -{ - secure_session_t *this = NULL; - ns_list_foreach(secure_session_t, cur_ptr, &secure_session_list) { - if (cur_ptr->timer.id == timer_id) { - this = cur_ptr; - break; - } - } - return this; -} - -static void secure_session_delete(secure_session_t *this) -{ - if (this) { - ns_list_remove(&secure_session_list, this); - if( this->sec_handler ){ - coap_security_destroy(this->sec_handler); - this->sec_handler = NULL; - } - if(this->timer.timer){ - eventOS_timeout_cancel(this->timer.timer); - } - ns_dyn_mem_free(this); - this = NULL; - } - - return; -} - -static secure_session_t *secure_session_create(internal_socket_t *parent, uint8_t *address_ptr, uint16_t port) -{ - if(!address_ptr){ - return NULL; - } - - if(MAX_SECURE_SESSION_COUNT <= ns_list_count(&secure_session_list)){ - // Seek & destroy oldest session where close notify have been sent - secure_session_t *to_be_removed = NULL; - ns_list_foreach(secure_session_t, cur_ptr, &secure_session_list) { - if(cur_ptr->session_state == SECURE_SESSION_CLOSED){ - if(!to_be_removed || cur_ptr->last_contact_time < to_be_removed->last_contact_time){ - to_be_removed = cur_ptr; - } - } - } - if(!to_be_removed){ - return NULL; - } - - secure_session_delete(to_be_removed); - } - - secure_session_t *this = ns_dyn_mem_alloc(sizeof(secure_session_t)); - if (!this) { - return NULL; - } - memset(this, 0, sizeof(secure_session_t)); - - uint8_t timer_id = 1; - - while(secure_session_find_by_timer_id(timer_id)){ - if(timer_id == 0xff){ - ns_dyn_mem_free(this); - return NULL; - } - timer_id++; - } - this->timer.id = timer_id; - - this->sec_handler = coap_security_create(parent->listen_socket, this->timer.id, address_ptr, port, ECJPAKE, - &send_to_socket, &receive_from_socket, &start_timer, &timer_status); - if( !this->sec_handler ){ - ns_dyn_mem_free(this); - return NULL; - } - this->parent = parent; - - this->session_state = SECURE_SESSION_HANDSHAKE_ONGOING; - ns_list_add_to_start(&secure_session_list, this); - - return this; -} - - -static void clear_secure_sessions(internal_socket_t *this){ - if( this ){ - ns_list_foreach_safe(secure_session_t, cur_ptr, &secure_session_list) { - if( cur_ptr->parent == this ){ - coap_security_send_close_alert( cur_ptr->sec_handler ); - secure_session_delete(cur_ptr); - } - } - } -} - -static secure_session_t *secure_session_find(internal_socket_t *parent, uint8_t *address_ptr, uint16_t port) -{ - secure_session_t *this = NULL; - ns_list_foreach(secure_session_t, cur_ptr, &secure_session_list) { - if( cur_ptr->sec_handler ){ - if (cur_ptr->parent == parent && cur_ptr->sec_handler->_remote_port == port && - memcmp(cur_ptr->sec_handler->_remote_address, address_ptr, 16) == 0) { - this = cur_ptr; - // hack_save_remote_address(address_ptr, port); - break; - } - } - } - return this; -} - - - -static void recv_sckt_msg(void *cb_res); -static void secure_recv_sckt_msg(void *cb_res); - -static internal_socket_t *int_socket_create(uint16_t listen_port, bool use_ephemeral_port, bool is_secure, bool real_socket, bool bypassSec) -{ - internal_socket_t *this = ns_dyn_mem_alloc(sizeof(internal_socket_t)); - if (!this) { - return NULL; - } - memset(this, 0, sizeof(internal_socket_t)); - - this->data_len = 0; - this->data = NULL; - - this->is_secure = is_secure; - this->usage_counter = 1; - - this->listen_port = listen_port; - this->real_socket = real_socket; - this->bypass_link_sec = bypassSec; - this->listen_socket = -1; - if( real_socket ){ - if( use_ephemeral_port ){ //socket_api creates ephemeral port if the one provided is 0 - listen_port = 0; - } - if( !is_secure ){ - this->listen_socket = socket_open(SOCKET_UDP, listen_port, recv_sckt_msg); - }else{ - this->listen_socket = socket_open(SOCKET_UDP, listen_port, secure_recv_sckt_msg); - } - // Socket create failed - if(this->listen_socket < 0){ - ns_dyn_mem_free(this); - return NULL; - } - - socket_setsockopt(this->listen_socket, SOCKET_IPPROTO_IPV6, SOCKET_LINK_LAYER_SECURITY, &(const int8_t) { - bypassSec ? 0 : 1 - }, sizeof(int8_t)); - - // XXX API for this? May want to get clever to do recommended first query = 1 hop, retries = whole PAN - socket_setsockopt(this->listen_socket, SOCKET_IPPROTO_IPV6, SOCKET_IPV6_MULTICAST_HOPS, &(const int16_t) { - 16 - }, sizeof(int16_t)); - }else{ - this->listen_socket = -1; - } - - ns_list_add_to_start(&socket_list, this); - return this; -} - -static void int_socket_delete(internal_socket_t *this) -{ - if (this) { - this->usage_counter--; - if(this->usage_counter == 0){ - clear_secure_sessions(this); - socket_free(this->listen_socket); - ns_list_remove(&socket_list, this); - if( this->data ){ - ns_dyn_mem_free(this->data); - this->data = NULL; - } - if(this->parent){ - ns_dyn_mem_free(this->parent); - } - ns_dyn_mem_free(this); - } - } -} - -static internal_socket_t *int_socket_find_by_socket_id(int8_t id) -{ - internal_socket_t *this = NULL; - ns_list_foreach(internal_socket_t, cur_ptr, &socket_list) { - if( cur_ptr->listen_socket == id ) { - this = cur_ptr; - break; - } - } - return this; -} - -static internal_socket_t *int_socket_find(uint16_t port, bool is_secure, bool is_real_socket, bool bypassSec) -{ - (void) bypassSec; - - internal_socket_t *this = NULL; - ns_list_foreach(internal_socket_t, cur_ptr, &socket_list) { - if( cur_ptr->listen_port == port && cur_ptr->real_socket == is_real_socket && - is_secure == cur_ptr->is_secure /*&& bypass_link_sec == bypassSec*/) { - this = cur_ptr; - break; - } - } - return this; -} - -static int send_to_socket(int8_t socket_id, uint8_t *address_ptr, uint16_t port, const unsigned char *buf, size_t len) -{ - internal_socket_t *sock = int_socket_find_by_socket_id(socket_id); - if(!sock){ - return -1; - } - if(!sock->real_socket){ - //In this case all clients will have socket_id -1 and socket will not have a real address - //so sock->dest_addr cannot be used here - int ret = sock->parent->_send_cb(sock->listen_socket, address_ptr, port, buf, len); - if( ret < 0 ) - return ret; - return len; - } - - int opt_name = SOCKET_IPV6_PREFER_SRC_6LOWPAN_SHORT; - int8_t securityLinkLayer = 1; - if( sock->bypass_link_sec ){ - securityLinkLayer = 0; - } - socket_setsockopt(sock->listen_socket, SOCKET_IPPROTO_IPV6, SOCKET_IPV6_ADDR_PREFERENCES, &opt_name, sizeof(int)); - socket_setsockopt(sock->listen_socket, SOCKET_IPPROTO_IPV6, SOCKET_LINK_LAYER_SECURITY, &securityLinkLayer, sizeof(int8_t)); - //For some reason socket_sendto returns 0 in success, while other socket impls return number of bytes sent!!! - //TODO: check if address_ptr is valid and use that instead if it is - int ret = socket_sendto(sock->listen_socket, &sock->dest_addr, (unsigned char*)buf, len); - if( ret < 0 ) - return ret; - return len; -} - -static int receive_from_socket(int8_t socket_id, unsigned char *buf, size_t len) -{ - (void)len; - internal_socket_t *sock = int_socket_find_by_socket_id(socket_id); - if( sock->data && sock->data_len > 0 ){ - memcpy( buf, sock->data, sock->data_len ); - int l = sock->data_len; - ns_dyn_mem_free(sock->data); - sock->data = NULL; - sock->data_len = 0; - return l; - } - return MBEDTLS_ERR_SSL_WANT_READ; -} - -/** - * Callback timer. Maybe called in interrupt context - * so keep it simple. - * TODO - might be better to use an event timer in conjunction with - * CoAP tasklet - */ -static void timer_cb(void *param) -{ - secure_session_t *sec = param; - if( sec ){ - if(sec->timer.fin_ms > sec->timer.int_ms){ - /* Intermediate expiry */ - sec->timer.fin_ms -= sec->timer.int_ms; - sec->timer.state = TIMER_STATE_INT_EXPIRY; - int error = coap_security_handler_continue_connecting(sec->sec_handler); - if(MBEDTLS_ERR_SSL_TIMEOUT == error) { - //TODO: How do we handle timeouts? - secure_session_delete(sec); - } - else{ - sec->timer.timer = eventOS_timeout_ms(timer_cb, sec->timer.int_ms, (void*)sec); - } - } - else{ - /* We have counted the number of cycles - finish */ - eventOS_timeout_cancel(sec->timer.timer); - sec->timer.fin_ms = 0; - sec->timer.int_ms = 0; - sec->timer.timer = NULL; - sec->timer.state = TIMER_STATE_FIN_EXPIRY; - int error = coap_security_handler_continue_connecting(sec->sec_handler); - if(MBEDTLS_ERR_SSL_TIMEOUT == error) { - //TODO: How do we handle timeouts? - secure_session_delete(sec); - } - } - } -} - -static void start_timer(int8_t timer_id, uint32_t int_ms, uint32_t fin_ms) -{ - secure_session_t *sec = secure_session_find_by_timer_id(timer_id); - if( sec ){ - if ((int_ms > 0) && (fin_ms > 0)) { - sec->timer.int_ms = int_ms; - sec->timer.fin_ms = fin_ms; - sec->timer.state = TIMER_STATE_NO_EXPIRY; - if(sec->timer.timer){ - eventOS_timeout_cancel(sec->timer.timer); - } - sec->timer.timer = eventOS_timeout_ms(timer_cb, int_ms, sec); - } else if (fin_ms == 0) { - /* fin_ms == 0 means cancel the timer */ - sec->timer.state = TIMER_STATE_CANCELLED; - eventOS_timeout_cancel(sec->timer.timer); - sec->timer.fin_ms = 0; - sec->timer.int_ms = 0; - sec->timer.timer = NULL; - } - } -} - -static int timer_status(int8_t timer_id) -{ - secure_session_t *sec = secure_session_find_by_timer_id(timer_id); - if( sec ){ - return (int)sec->timer.state; - } - return TIMER_STATE_CANCELLED; -} - -static int read_data(socket_callback_t *sckt_data, internal_socket_t *sock, ns_address_t *src_address) -{ - sock->data_len = 0; - if (sckt_data->event_type == SOCKET_DATA && sckt_data->d_len > 0) { - if( sock->data ){ - ns_dyn_mem_free(sock->data); - sock->data = NULL; - } - sock->data = ns_dyn_mem_temporary_alloc(sckt_data->d_len); - if( !sock->data ){ - sock->data = NULL; - return -1; - } - sock->data_len = socket_read(sckt_data->socket_id, src_address, sock->data, sckt_data->d_len); - } - if( sock->data_len < 1){ - ns_dyn_mem_free(sock->data); - sock->data = NULL; - sock->data_len = 0; - return -1; - } - return 0; -} - -static void secure_recv_sckt_msg(void *cb_res) -{ - socket_callback_t *sckt_data = cb_res; - internal_socket_t *sock = int_socket_find_by_socket_id(sckt_data->socket_id); - ns_address_t src_address; - - if( sock && read_data(sckt_data, sock, &src_address) == 0 ){ - secure_session_t *session = secure_session_find(sock, src_address.address, src_address.identifier); - - // Create session - if( !session ){ - memcpy( sock->dest_addr.address, src_address.address, 16 ); - sock->dest_addr.identifier = src_address.identifier; - sock->dest_addr.type = src_address.type; - session = secure_session_create(sock, src_address.address, src_address.identifier); - } - if( !session ){ - tr_err("secure_recv_sckt_msg session creation failed - OOM"); - return; - } - session->last_contact_time = coap_service_get_internal_timer_ticks(); - // Start handshake - if( !session->sec_handler->_is_started ){ - uint8_t *pw = (uint8_t *)ns_dyn_mem_alloc(64); - uint8_t pw_len; - if( sock->parent->_get_password_cb && 0 == sock->parent->_get_password_cb(sock->listen_socket, src_address.address, src_address.identifier, pw, &pw_len)){ - //TODO: get_password_cb should support certs and PSK also - coap_security_keys_t keys; - keys._priv = pw; - keys._priv_len = pw_len; - coap_security_handler_connect_non_blocking(session->sec_handler, true, DTLS, keys, sock->timeout_min, sock->timeout_max); - //TODO: error handling - } - ns_dyn_mem_free(pw); - }else{ - //Continue handshake - if(session->session_state == SECURE_SESSION_HANDSHAKE_ONGOING){ - int ret = coap_security_handler_continue_connecting(session->sec_handler); - // Handshake done - if(ret == 0){ - eventOS_timeout_cancel(session->timer.timer); - session->timer.timer = NULL; - session->session_state = SECURE_SESSION_OK; - if( sock->parent->_security_done_cb ){ - sock->parent->_security_done_cb(sock->listen_socket, src_address.address, - src_address.identifier, - session->sec_handler->_keyblk.value); - } - } - else if (ret < 0){ - // error handling - // TODO: here we also should clear CoAP retransmission buffer and inform that CoAP request sending is failed. - secure_session_delete(session); - } - //Session valid - }else{ - unsigned char *data = ns_dyn_mem_temporary_alloc(sock->data_len); - int len = 0; - len = coap_security_handler_read(session->sec_handler, data, sock->data_len); - if( len < 0 ){ - ns_dyn_mem_free(data); - secure_session_delete( session ); - }else{ - if( sock->parent->_recv_cb ){ - sock->parent->_recv_cb(sock->listen_socket, src_address.address, src_address.identifier, data, len); - } - ns_dyn_mem_free(data); - } - } - } - } -} - -static void recv_sckt_msg(void *cb_res) -{ - socket_callback_t *sckt_data = cb_res; - internal_socket_t *sock = int_socket_find_by_socket_id(sckt_data->socket_id); - ns_address_t src_address; - if( sock && read_data(sckt_data, sock, &src_address) == 0 ){ - if(sock->parent && sock->parent->_recv_cb){ - sock->parent->_recv_cb(sock->listen_socket, src_address.address, src_address.identifier, sock->data, sock->data_len); - } - ns_dyn_mem_free(sock->data); - sock->data = NULL; - } -} - -int coap_connection_handler_virtual_recv(coap_conn_handler_t *handler, uint8_t address[static 16], uint16_t port, uint8_t *data_ptr, uint16_t data_len) -{ - if( !handler || !handler->socket ){ - return -1; - } - internal_socket_t *sock = handler->socket; - sock->data_len = data_len; - if( sock->data ){ - ns_dyn_mem_free(sock->data); - sock->data = NULL; - } - sock->data = ns_dyn_mem_temporary_alloc(data_len); - if( data_len > 0 && !sock->data ){ - return -1; - } - if( data_ptr ){ - memcpy(sock->data, data_ptr, data_len); - }else{ - if( sock->data ){ - ns_dyn_mem_free(sock->data); - sock->data = NULL; - } - } - - if( handler->socket->is_secure ){ - secure_session_t *session = secure_session_find(sock, address, port); - if( !session ){ - session = secure_session_create(sock, address, port); - } - if( !session ){ - tr_err("coap_connection_handler_virtual_recv session creation failed - OOM"); - return -1; - } - - session->last_contact_time = coap_service_get_internal_timer_ticks(); - - if( !session->sec_handler->_is_started ){ - uint8_t *pw = (uint8_t *)ns_dyn_mem_alloc(64); - uint8_t pw_len; - if( sock->parent->_get_password_cb && 0 == sock->parent->_get_password_cb(sock->listen_socket, address, port, pw, &pw_len)){ - //TODO: get_password_cb should support certs and PSK also - coap_security_keys_t keys; - keys._priv = pw; - keys._priv_len = pw_len; - coap_security_handler_connect_non_blocking(session->sec_handler, true, DTLS, keys, handler->socket->timeout_min, handler->socket->timeout_max); - //TODO: error handling - ns_dyn_mem_free(pw); - return 0; - }else{ - ns_dyn_mem_free(pw); - return -1; - } - }else{ - if(session->session_state == SECURE_SESSION_HANDSHAKE_ONGOING){ - int ret = coap_security_handler_continue_connecting(session->sec_handler); - if(ret == 0){ - session->session_state = SECURE_SESSION_OK; - if( handler->_security_done_cb ){ - handler->_security_done_cb(sock->listen_socket, - address, port, - session->sec_handler->_keyblk.value); - } - return 0; - } - else if(ret < 0) - { - // error handling - // TODO: here we also should clear CoAP retransmission buffer and inform that CoAP request sending is failed. - secure_session_delete(session); - } - //TODO: error handling - }else{ - unsigned char *data = ns_dyn_mem_temporary_alloc(sock->data_len); - int len = 0; - len = coap_security_handler_read(session->sec_handler, data, sock->data_len); - if( len < 0 ){ - ns_dyn_mem_free(data); - secure_session_delete( session ); - return 0; - }else{ - if( sock->parent->_recv_cb ){ - sock->parent->_recv_cb(sock->listen_socket, address, port, data, len); - } - ns_dyn_mem_free(data); - data = NULL; - } - return 0; - } - } - }else{ - if( sock->parent->_recv_cb ){ - sock->parent->_recv_cb(sock->listen_socket, address, port, sock->data, sock->data_len); - } - if( sock->data ){ - ns_dyn_mem_free(sock->data); - sock->data = NULL; - } - return 0; - } - return -1; -} - -coap_conn_handler_t *connection_handler_create(receive_from_socket_cb *recv_from_cb, - send_to_socket_cb *send_to_cb, - get_pw_cb *pw_cb, - security_done_cb *done_cb ) -{ - if( recv_from_cb == NULL ){ - return NULL; - } - - coap_conn_handler_t *handler = ns_dyn_mem_alloc(sizeof(coap_conn_handler_t)); - if(!handler){ - return NULL; - } - memset(handler, 0, sizeof(coap_conn_handler_t)); - handler->socket = NULL; - handler->_recv_cb = recv_from_cb; - handler->_send_cb = send_to_cb; - - handler->_get_password_cb = pw_cb; - handler->_security_done_cb = done_cb; - - return handler; -} -void connection_handler_destroy(coap_conn_handler_t *handler) -{ - if(handler){ - int_socket_delete(handler->socket); - ns_dyn_mem_free(handler); - } -} - -void connection_handler_close_secure_connection( coap_conn_handler_t *handler, uint8_t destination_addr_ptr[static 16], uint16_t port ) -{ - if(handler){ - if( handler->socket && handler->socket->is_secure){ - secure_session_t *session = secure_session_find( handler->socket, destination_addr_ptr, port); - if( session ){ - coap_security_send_close_alert( session->sec_handler ); - session->session_state = SECURE_SESSION_CLOSED; - session->last_contact_time = coap_service_get_internal_timer_ticks(); - } - } - } -} - -int coap_connection_handler_open_connection(coap_conn_handler_t *handler, uint16_t listen_port, bool use_ephemeral_port, bool is_secure, bool is_real_socket, bool bypassSec) -{ - if( !handler ){ - return -1; - } - //virtual socket must have send callback - if( !is_real_socket && !handler->_send_cb ){ - return -1; - } - if( handler->socket ){ - int_socket_delete(handler->socket); - } - - internal_socket_t *current = !use_ephemeral_port?int_socket_find(listen_port, is_secure, is_real_socket, bypassSec):NULL; - if(!current){ - handler->socket = int_socket_create(listen_port, use_ephemeral_port, is_secure, is_real_socket, bypassSec); - if(!handler->socket){ - return -1; - } - handler->socket->parent = ns_dyn_mem_alloc(sizeof(coap_conn_handler_t)); - if(!handler->socket->parent){ - int_socket_delete(handler->socket); - return -1; - } - *handler->socket->parent = *handler; - }else{ - current->usage_counter++; - handler->socket = current; - } - return 0; -} - -int coap_connection_handler_send_data(coap_conn_handler_t *handler, ns_address_t *dest_addr, uint8_t *data_ptr, uint16_t data_len, bool bypass_link_sec) -{ - if( !handler || !handler->socket || !dest_addr){ - return -1; - } - if(handler->socket->is_secure){ - handler->socket->bypass_link_sec = bypass_link_sec; - memcpy(handler->socket->dest_addr.address, dest_addr->address, 16); - handler->socket->dest_addr.identifier = dest_addr->identifier; - handler->socket->dest_addr.type = dest_addr->type; - secure_session_t *session = secure_session_find(handler->socket, dest_addr->address, dest_addr->identifier); - if( !session ){ - session = secure_session_create(handler->socket, dest_addr->address, dest_addr->identifier); - if( !session ){ - return -1; - } - session->last_contact_time = coap_service_get_internal_timer_ticks(); - memcpy( handler->socket->dest_addr.address, dest_addr->address, 16 ); - handler->socket->dest_addr.identifier = dest_addr->identifier; - handler->socket->dest_addr.type = dest_addr->type; - uint8_t *pw = (uint8_t *)ns_dyn_mem_alloc(64); - if(!pw){ - //todo: free secure session? - return -1; - } - uint8_t pw_len; - if( handler->_get_password_cb && 0 == handler->_get_password_cb(handler->socket->listen_socket, dest_addr->address, dest_addr->identifier, pw, &pw_len)){ - //TODO: get_password_cb should support certs and PSK also - coap_security_keys_t keys; - keys._priv = pw; - keys._priv_len = pw_len; - coap_security_handler_connect_non_blocking(session->sec_handler, false, DTLS, keys, handler->socket->timeout_min, handler->socket->timeout_max); - ns_dyn_mem_free(pw); - return -2; - }else{ - //free secure session? - ns_dyn_mem_free(pw); - return -1; - } - }else if( session->session_state == SECURE_SESSION_OK ){ - if( coap_security_handler_send_message(session->sec_handler, data_ptr, data_len ) > 0 ){ - session->last_contact_time = coap_service_get_internal_timer_ticks(); - return 0; - } - } - return -1; - }else{ - if( !handler->socket->real_socket && handler->_send_cb){ - return handler->_send_cb((int8_t)handler->socket->listen_socket, dest_addr->address, dest_addr->identifier, data_ptr, data_len); - } - int opt_name = SOCKET_IPV6_PREFER_SRC_6LOWPAN_SHORT; - int8_t securityLinkLayer = 1; - if( bypass_link_sec ){ - securityLinkLayer = 0; - } - socket_setsockopt(handler->socket->listen_socket, SOCKET_IPPROTO_IPV6, SOCKET_IPV6_ADDR_PREFERENCES, &opt_name, sizeof(int)); - socket_setsockopt(handler->socket->listen_socket, SOCKET_IPPROTO_IPV6, SOCKET_LINK_LAYER_SECURITY, &securityLinkLayer, sizeof(int8_t)); - return socket_sendto(handler->socket->listen_socket, dest_addr, data_ptr, data_len); - } -} - -bool coap_connection_handler_socket_belongs_to(coap_conn_handler_t *handler, int8_t socket_id) -{ - if( !handler || !handler->socket){ - return false; - } - - if( handler->socket->listen_socket == socket_id){ - return true; - } - return false; -} - -int8_t coap_connection_handler_set_timeout(coap_conn_handler_t *handler, uint32_t min, uint32_t max) -{ - if(!handler || !handler->socket){ - return -1; - } - handler->socket->timeout_max = max; - handler->socket->timeout_min = min; - - return 0; -} - -/* No need to call every second - call rather like every minute (SECURE_SESSION_CLEAN_INTERVAL sets this) */ -void coap_connection_handler_exec(uint32_t time) -{ - if(ns_list_count(&secure_session_list)){ - // Seek & destroy old sessions where close notify have been sent - ns_list_foreach(secure_session_t, cur_ptr, &secure_session_list) { - if(cur_ptr->session_state == SECURE_SESSION_CLOSED || - cur_ptr->session_state == SECURE_SESSION_HANDSHAKE_ONGOING){ - if((cur_ptr->last_contact_time + CLOSED_SECURE_SESSION_TIMEOUT) <= time){ - secure_session_delete(cur_ptr); - } - } - if(cur_ptr->session_state == SECURE_SESSION_OK){ - if((cur_ptr->last_contact_time + OPEN_SECURE_SESSION_TIMEOUT) <= time){ - secure_session_delete(cur_ptr); - } - } - } - } -} diff --git a/features/nanostack/FEATURE_NANOSTACK/coap-service/source/coap_message_handler.c b/features/nanostack/FEATURE_NANOSTACK/coap-service/source/coap_message_handler.c deleted file mode 100644 index 843fd10b1d..0000000000 --- a/features/nanostack/FEATURE_NANOSTACK/coap-service/source/coap_message_handler.c +++ /dev/null @@ -1,389 +0,0 @@ -/* - * Copyright (c) 2015-2016 ARM Limited. All Rights Reserved. - */ - -#include -#include "nsdynmemLIB.h" -#include "coap_message_handler.h" -#include "sn_coap_protocol.h" -#include "ns_types.h" -#include "ns_list.h" -#include "ns_trace.h" -#include "randLIB.h" - -#define TRACE_GROUP "CoSA" - -static void *own_alloc(uint16_t size) -{ - if (size) { - return ns_dyn_mem_temporary_alloc(size); - } else { - return 0; - } -} - -static void own_free(void *ptr) -{ - if (ptr) { - ns_dyn_mem_free(ptr); - } -} - -static NS_LIST_DEFINE(request_list, coap_transaction_t, link); - -static coap_transaction_t *transaction_find_client_by_token(uint8_t token[4]) -{ - coap_transaction_t *this = NULL; - ns_list_foreach(coap_transaction_t, cur_ptr, &request_list) { - if (memcmp(cur_ptr->token,token,4) == 0 && cur_ptr->client_request) { - this = cur_ptr; - break; - } - } - return this; -} - -static coap_transaction_t *transaction_find_server(uint16_t msg_id) -{ - coap_transaction_t *this = NULL; - ns_list_foreach(coap_transaction_t, cur_ptr, &request_list) { - if (cur_ptr->msg_id == msg_id && !cur_ptr->client_request) { - this = cur_ptr; - break; - } - } - return this; -} - -static coap_transaction_t *transaction_find_by_address(uint8_t *address_ptr, uint16_t port) -{ - coap_transaction_t *this = NULL; - ns_list_foreach(coap_transaction_t, cur_ptr, &request_list) { - if (cur_ptr->remote_port == port && memcmp(cur_ptr->remote_address, address_ptr, 16) == 0) { - this = cur_ptr; - break; - } - } - return this; -} - -static coap_transaction_t *transaction_create(void) -{ - coap_transaction_t *this = ns_dyn_mem_alloc(sizeof(coap_transaction_t)); - if (this) { - memset(this, 0, sizeof(coap_transaction_t)); - this->client_request = true;// default to client initiated method - ns_list_add_to_start(&request_list, this); - } - - return this; -} -static void transaction_delete(coap_transaction_t *this) -{ - if (this) { - ns_list_remove(&request_list, this); - if(this->data_ptr){ - ns_dyn_mem_free(this->data_ptr); - } - ns_dyn_mem_free(this); - } - - return; -} - -static int8_t coap_rx_function(sn_coap_hdr_s *resp_ptr, sn_nsdl_addr_s *address_ptr, void *param) -{ - coap_transaction_t *this = NULL; - (void)address_ptr; - (void)param; - tr_warn("transaction was not handled"); - if (!resp_ptr) { - return -1; - } - if( resp_ptr->token_ptr ){ - this = transaction_find_client_by_token(resp_ptr->token_ptr); - } - if (this && this->resp_cb) { - this->resp_cb(this->service_id, address_ptr->addr_ptr, address_ptr->port, NULL); - } - transaction_delete(this); - return 0; -} - -static void coap_service_build_content_format(sn_coap_hdr_s *header, sn_coap_content_format_e format); - -coap_msg_handler_t *coap_message_handler_init(void *(*used_malloc_func_ptr)(uint16_t), void (*used_free_func_ptr)(void *), - uint8_t (*used_tx_callback_ptr)(uint8_t *, uint16_t, sn_nsdl_addr_s *, void *)){ - - if ((used_malloc_func_ptr == NULL) || (used_free_func_ptr == NULL) || (used_tx_callback_ptr == NULL)) { - return NULL; - } - - coap_msg_handler_t *handle; - handle = used_malloc_func_ptr(sizeof(coap_msg_handler_t)); - if (handle == NULL) { - return NULL; - } - - memset(handle, 0, sizeof(coap_msg_handler_t)); - - handle->sn_coap_tx_callback = used_tx_callback_ptr; - - handle->sn_coap_service_free = used_free_func_ptr; - handle->sn_coap_service_malloc = used_malloc_func_ptr; - - handle->coap = sn_coap_protocol_init(used_malloc_func_ptr, used_free_func_ptr, used_tx_callback_ptr, &coap_rx_function); - if( !handle->coap ){ - used_free_func_ptr(handle); - return NULL; - } - return handle; -} - -int8_t coap_message_handler_destroy(coap_msg_handler_t *handle){ - if( !handle ){ - return -1; - } - - if( handle->coap ){ - sn_coap_protocol_destroy(handle->coap); - } - - //Destroy transactions - ns_list_foreach_safe(coap_transaction_t, cur_ptr, &request_list) { - ns_list_remove(&request_list, cur_ptr); - ns_dyn_mem_free(cur_ptr); - cur_ptr = NULL; - } - - handle->sn_coap_service_free(handle); - return 0; -} - -coap_transaction_t *coap_message_handler_transaction_valid(coap_transaction_t *tr_ptr) -{ - ns_list_foreach(coap_transaction_t, cur_ptr, &request_list) { - if (cur_ptr == tr_ptr) { - return tr_ptr; - } - } - return NULL; -} - -coap_transaction_t *coap_message_handler_find_transaction(uint8_t *address_ptr, uint16_t port) -{ - if( !address_ptr ) - return NULL; - return transaction_find_by_address( address_ptr, port ); -} - -int16_t coap_message_handler_coap_msg_process(coap_msg_handler_t *handle, int8_t socket_id, uint8_t source_addr_ptr[static 16], uint16_t port, - uint8_t *data_ptr, uint16_t data_len, int16_t (cb)(int8_t, sn_coap_hdr_s *, coap_transaction_t *)) -{ - if( !cb || !handle ){ - return -1; - } - sn_nsdl_addr_s src_addr; - sn_coap_hdr_s *coap_message; - src_addr.addr_ptr = source_addr_ptr; - src_addr.addr_len = 16; - src_addr.type = SN_NSDL_ADDRESS_TYPE_IPV6; - src_addr.port = port; - - coap_message = sn_coap_protocol_parse(handle->coap, &src_addr, data_len, data_ptr, NULL); - if (coap_message == NULL) { - tr_err("CoAP Parsing failed"); - return -1; - } - tr_debug("CoAP status:%d, type:%d, code:%d, id:%d", coap_message->coap_status, coap_message->msg_type, coap_message->msg_code, coap_message->msg_id); - /* Check, if coap itself sends response, or block receiving is ongoing... */ - if (coap_message->coap_status != COAP_STATUS_OK && coap_message->coap_status != COAP_STATUS_PARSER_BLOCKWISE_MSG_RECEIVED) { - tr_debug("CoAP library responds"); - sn_coap_parser_release_allocated_coap_msg_mem(handle->coap, coap_message); - return -1; - } - if (coap_message->msg_code > 0 && coap_message->msg_code < 32) { - - //TODO Sorry - - coap_transaction_t *transaction_ptr = transaction_create(); - if (transaction_ptr) { - - transaction_ptr->msg_id = coap_message->msg_id; - transaction_ptr->client_request = false;// this is server transaction - memcpy(transaction_ptr->remote_address, source_addr_ptr, 16); - transaction_ptr->remote_port = port; - - int ret = cb(socket_id, coap_message, transaction_ptr); - if (ret != 0) { - tr_debug("Service %d, no response expected", transaction_ptr->service_id); - sn_coap_parser_release_allocated_coap_msg_mem(handle->coap, coap_message); - transaction_delete(transaction_ptr); - return -1; - } - }else{ - //TODO: handle error case - } - } else { - //response find by MSG id - coap_transaction_t *this = NULL; - if( coap_message->token_ptr ){ - this = transaction_find_client_by_token(coap_message->token_ptr); - } - if (!this) { - tr_error("client transaction not found"); - sn_coap_parser_release_allocated_coap_msg_mem(handle->coap, coap_message); - return -1; - } - tr_debug("Service %d, response received", this->service_id); - if (this->resp_cb) { - this->resp_cb(this->service_id, source_addr_ptr, port, coap_message); - } - sn_coap_parser_release_allocated_coap_msg_mem(handle->coap, coap_message); - transaction_delete(this); - } - return 0; - -} - -uint16_t coap_message_handler_request_send(coap_msg_handler_t *handle, int8_t service_id, uint8_t options, const uint8_t destination_addr[static 16], - uint16_t destination_port, sn_coap_msg_type_e msg_type, sn_coap_msg_code_e msg_code, const char *uri, - sn_coap_content_format_e cont_type, const uint8_t *payload_ptr, uint16_t payload_len, coap_message_handler_response_recv *request_response_cb) -{ - coap_transaction_t *transaction_ptr; - sn_coap_hdr_s request; - sn_nsdl_addr_s dst_addr; - uint8_t token[4]; - uint16_t data_len; - uint8_t *data_ptr; - - tr_debug("Service %d, send CoAP request payload_len %d", service_id, payload_len); - transaction_ptr = transaction_create(); - - if (!uri || !transaction_ptr) { - return 0; - } - - transaction_ptr->service_id = service_id; - transaction_ptr->client_request = true; - transaction_ptr->resp_cb = request_response_cb; - transaction_ptr->options = options; - memcpy(transaction_ptr->remote_address, destination_addr, 16); - transaction_ptr->remote_port = destination_port; - memset(&request, 0, sizeof(request)); - dst_addr.addr_ptr = (uint8_t *) destination_addr; // Cast away const and trust that nsdl doesn't modify... - dst_addr.addr_len = 16; - dst_addr.type = SN_NSDL_ADDRESS_TYPE_IPV6; - dst_addr.port = destination_port; - - request.msg_type = msg_type; - request.msg_code = msg_code; - request.uri_path_ptr = (uint8_t *)uri; - request.uri_path_len = strlen(uri); - coap_service_build_content_format(&request, cont_type); - - do{ - randLIB_get_n_bytes_random(token,4); - }while(transaction_find_client_by_token(token)); - memcpy(transaction_ptr->token,token,4); - request.token_ptr = transaction_ptr->token; - request.token_len = 4; - - request.payload_len = payload_len; - request.payload_ptr = (uint8_t *) payload_ptr; // Cast away const and trust that nsdl doesn't modify... - data_len = sn_coap_builder_calc_needed_packet_data_size(&request); - data_ptr = own_alloc(data_len); - if(data_len > 0 && !data_ptr){ - transaction_delete(transaction_ptr); - return 0; - } - sn_coap_protocol_build(handle->coap, &dst_addr, data_ptr, &request, transaction_ptr); - transaction_ptr->msg_id = request.msg_id; - handle->sn_coap_tx_callback(data_ptr, data_len, &dst_addr, transaction_ptr); - - // Free allocated data - own_free(data_ptr); - if(request_response_cb == NULL){ - //No response expected - return 0; - } - return transaction_ptr->msg_id; -} - -//TODO: refactor this to use nsdl -int8_t coap_message_handler_response_send(coap_msg_handler_t *handle, int8_t service_id, uint8_t options, sn_coap_hdr_s *request_ptr, sn_coap_msg_code_e message_code, sn_coap_content_format_e content_type, const uint8_t *payload_ptr, uint16_t payload_len) -{ - coap_transaction_t *transaction_ptr; - sn_coap_hdr_s *response; - sn_nsdl_addr_s dst_addr; - uint16_t data_len; - uint8_t *data_ptr; - (void) options; - (void)service_id; - - tr_debug("Service %d, send CoAP response", service_id); - if (!request_ptr || !handle) { - tr_error("invalid params"); - return -1; - } - - transaction_ptr = transaction_find_server(request_ptr->msg_id); - - if (!transaction_ptr) { - tr_error("response transaction not found"); - return -2; - } - dst_addr.addr_ptr = transaction_ptr->remote_address; - dst_addr.addr_len = 16; - dst_addr.type = SN_NSDL_ADDRESS_TYPE_IPV6; - dst_addr.port = transaction_ptr->remote_port; - - response = sn_coap_build_response(handle->coap, request_ptr, message_code); - if( !response ){ - return -1; - } - response->payload_len = payload_len; - response->payload_ptr = (uint8_t *) payload_ptr; // Cast away const and trust that nsdl doesn't modify... - coap_service_build_content_format(response, content_type); - - data_len = sn_coap_builder_calc_needed_packet_data_size(response); - data_ptr = own_alloc(data_len); - if (data_len > 0 && !data_ptr) { - sn_coap_parser_release_allocated_coap_msg_mem(handle->coap, response); - //TODO deallocate stuff i quess - return -1; - } - sn_coap_protocol_build(handle->coap, &dst_addr, data_ptr, response, transaction_ptr); - sn_coap_parser_release_allocated_coap_msg_mem(handle->coap, response); - handle->sn_coap_tx_callback(data_ptr, data_len, &dst_addr, transaction_ptr); - sn_coap_parser_release_allocated_coap_msg_mem(handle->coap, request_ptr); - transaction_delete(transaction_ptr); - own_free(data_ptr); - return 0; -} - -int8_t coap_message_handler_exec(coap_msg_handler_t *handle, uint32_t current_time){ - if( !handle ){ - return -1; - } - return sn_coap_protocol_exec(handle->coap, current_time); -} - -static void coap_service_build_content_format(sn_coap_hdr_s *header, sn_coap_content_format_e format) -{ - header->content_format = format; - -// if (format == COAP_CT_NONE) { -// return; -// } -// if (format == 0) { /* text/plain */ -// header->content_type_len = 0; -// } else if (format <= 0xff) { -// header->content_type_ptr[0] = format; -// header->content_type_len = 1; -// } else { -// header->content_type_ptr[0] = format >> 8; -// header->content_type_ptr[1] = format & 0xff; -// header->content_type_len = 2; -// } -} diff --git a/features/nanostack/FEATURE_NANOSTACK/coap-service/source/coap_security_handler.c b/features/nanostack/FEATURE_NANOSTACK/coap-service/source/coap_security_handler.c deleted file mode 100644 index a33b50a5cc..0000000000 --- a/features/nanostack/FEATURE_NANOSTACK/coap-service/source/coap_security_handler.c +++ /dev/null @@ -1,581 +0,0 @@ -/* - * Copyright (c) 2015-2016 ARM Limited. All Rights Reserved. - */ - -#include -#include -#include - -#include "mbedtls/sha256.h" -#include "mbedtls/error.h" -#include "mbedtls/platform.h" -#include "mbedtls/ssl_cookie.h" -#include "mbedtls/entropy_poll.h" -#include "mbedtls/ssl.h" -#include "ns_trace.h" -#include "nsdynmemLIB.h" -#include "coap_connection_handler.h" -#include "coap_security_handler.h" -#include "randLIB.h" -#include "mbedtls/ssl_ciphersuites.h" - -#if defined(MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED) -const int ECJPAKE_SUITES[] = { - MBEDTLS_TLS_ECJPAKE_WITH_AES_128_CCM_8, - 0 -}; -#endif - -static const int PSK_SUITES[] = { - MBEDTLS_TLS_PSK_WITH_AES_128_CBC_SHA256, - MBEDTLS_TLS_PSK_WITH_AES_256_CCM_8, - MBEDTLS_TLS_PSK_WITH_AES_128_CCM_8, - 0 -}; - - -static void set_timer( void *sec_obj, uint32_t int_ms, uint32_t fin_ms ); -static int get_timer( void *sec_obj ); -static int coap_security_handler_configure_keys( coap_security_t *sec, coap_security_keys_t keys ); - -int entropy_poll( void *data, unsigned char *output, size_t len, size_t *olen ); -//Point these back to M2MConnectionHandler!!! -int f_send( void *ctx, const unsigned char *buf, size_t len ); -int f_recv(void *ctx, unsigned char *buf, size_t len); - -static int coap_security_handler_init(coap_security_t *sec){ - const char *pers = "dtls_client"; - mbedtls_ssl_init( &sec->_ssl ); - mbedtls_ssl_config_init( &sec->_conf ); - mbedtls_ctr_drbg_init( &sec->_ctr_drbg ); - mbedtls_entropy_init( &sec->_entropy ); - -#if defined(MBEDTLS_X509_CRT_PARSE_C) - mbedtls_x509_crt_init( &sec->_cacert ); - mbedtls_x509_crt_init( &sec->_owncert ); -#endif - mbedtls_pk_init( &sec->_pkey ); - - memset(&sec->_cookie, 0, sizeof(simple_cookie_t)); - memset(&sec->_keyblk, 0, sizeof(key_block_t)); - - sec->_is_started = false; - - //TODO: Must have at least 1 strong entropy source, otherwise DTLS will fail. - //This is NOT strong even we say it is! - if( mbedtls_entropy_add_source( &sec->_entropy, entropy_poll, NULL, - 128, 1 ) < 0 ){ - return -1; - } - - if( ( mbedtls_ctr_drbg_seed( &sec->_ctr_drbg, mbedtls_entropy_func, &sec->_entropy, - (const unsigned char *) pers, - strlen( pers ) ) ) != 0 ) - { - return -1; - } - return 0; -} - -static void coap_security_handler_reset(coap_security_t *sec){ -#if defined(MBEDTLS_X509_CRT_PARSE_C) - mbedtls_x509_crt_free(&sec->_cacert); - mbedtls_x509_crt_free(&sec->_owncert); -#endif - - mbedtls_pk_free(&sec->_pkey); - - mbedtls_entropy_free( &sec->_entropy ); - mbedtls_ctr_drbg_free( &sec->_ctr_drbg ); - mbedtls_ssl_config_free(&sec->_conf); - mbedtls_ssl_free(&sec->_ssl); -} - - -coap_security_t *coap_security_create(int8_t socket_id, int8_t timer_id, uint8_t *address_ptr, uint16_t port, SecureConnectionMode mode, - send_cb *send_cb, - receive_cb *receive_cb, - start_timer_cb *start_timer_cb, - timer_status_cb *timer_status_cb) -{ - if( !address_ptr || send_cb == NULL || receive_cb == NULL || start_timer_cb == NULL || timer_status_cb == NULL){ - return NULL; - } - coap_security_t *this = ns_dyn_mem_alloc(sizeof(coap_security_t)); - if( !this ){ - return NULL; - } - memset(this, 0, sizeof(coap_security_t)); - if( -1 == coap_security_handler_init(this) ){ - ns_dyn_mem_free(this); - return NULL; - } - this->_remote_port = port; - memcpy(this->_remote_address, address_ptr, 16); - this->_conn_mode = mode; - memset(this->_pw, 0, 64); - this->_pw_len = 0; - this->_socket_id = socket_id; - this->_timer_id = timer_id; - this->_send_cb = send_cb; - this->_receive_cb = receive_cb; - this->_start_timer_cb = start_timer_cb; - this->_timer_status_cb = timer_status_cb; - - return this; -} - -void coap_security_destroy(coap_security_t *sec){ - if( sec ){ - coap_security_handler_reset(sec); - ns_dyn_mem_free(sec); - sec = NULL; - } -} - -/**** Random number functions ****/ - -/** - * Get a random array of bytes. - * Called back by mbedtls when it wants to fill a buffer with random data - * Must return 0 on success. - */ -static int get_random(void *ctx, unsigned char *buf, size_t len) -{ - static int initialised = 0; - uint32_t i; - - (void)ctx; /* No context */ - - if (!initialised) { - randLIB_seed_random(); - initialised = 1; - } - - for (i = 0; i < len; i++) { - buf[i] = (uint8_t)randLIB_get_8bit(); - } - return 0; /* Success */ -} - -/**** Cookie functions ****/ -static int simple_cookie_write(void *ctx, - unsigned char **p, unsigned char *end, - const unsigned char *info, size_t ilen) -{ - //TODO: As per RFC 6347 cookie must be stateless. This is not the case in here! - //This should be fixed if we see that dos attack would be an issue. - //this is proposed solution in RFC: Cookie = HMAC(Secret, Client-IP, Client-Parameters) - //Secret is generated here and oftenly changed to prevent statistical attack - simple_cookie_t *p_cookie = (simple_cookie_t *)ctx; - - /* Not using additional info */ - (void)info; - (void)ilen; - - if ((size_t)(end - *p) < COOKIE_SIMPLE_LEN) { - return MBEDTLS_ERR_SSL_BUFFER_TOO_SMALL; - } - - /* Use a simple random number of length COOKIE_SIMPLE_LEN bytes */ - get_random(NULL, p_cookie->value, COOKIE_SIMPLE_LEN); - memcpy(*p, p_cookie->value, COOKIE_SIMPLE_LEN); - p_cookie->len = COOKIE_SIMPLE_LEN; - *p += COOKIE_SIMPLE_LEN; - return 0; -} - -static int simple_cookie_check(void *ctx, - const unsigned char *cookie, size_t clen, - const unsigned char *info, size_t ilen) -{ - simple_cookie_t *p_cookie = (simple_cookie_t *)ctx; - - /* Not using additional info */ - (void)info; - (void)ilen; - - if ((p_cookie->len == 0) || - (clen != p_cookie->len) || - (memcmp(cookie, p_cookie->value, p_cookie->len) != 0)) { - return -1; /* This is what it is in mbedtls... */ - } - return 0; -} - -/**** Key export function ****/ -#if defined(MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED) -static int export_key_block(void *ctx, - const unsigned char *mk, const unsigned char *kb, - size_t maclen, size_t keylen, size_t ivlen) -{ - key_block_t *p_key_block = (key_block_t *)ctx; - - /* Not using master key */ - (void)mk; - - /* Sanity check MAC and key lengths */ - if ((maclen != 0) || (((2 * keylen) + (2 * ivlen)) != KEY_BLOCK_LEN)) { - return -1; /* Something seriously wrong! */ - } - - /* Copy the key block we are using */ - /* No need to skip over MAC keys, MAC len must be 0 if we are here */ - memcpy(p_key_block->value, kb /* + (2 * maclen)*/, (2 * keylen) + (2 * ivlen)); - return 0; -} -#endif - -int coap_security_handler_configure_keys( coap_security_t *sec, coap_security_keys_t keys ) -{ - int ret = -1; - switch( sec->_conn_mode ){ - case Certificate:{ -#if defined(MBEDTLS_X509_CRT_PARSE_C) - if( mbedtls_x509_crt_parse( &sec->_cacert, keys._server_cert, - keys._server_cert_len ) < 0 ){ - break; - } - if( mbedtls_x509_crt_parse( &sec->_owncert, keys._pub_cert_or_identifier, - keys._pub_len ) < 0 ){ - break; - } - if( mbedtls_pk_parse_key(&sec->_pkey, keys._priv, keys._priv_len, NULL, 0) < 0){ - break; - } - //TODO: If needed in server mode, this won't work - if( 0 != mbedtls_ssl_conf_own_cert(&sec->_conf, &sec->_owncert, &sec->_pkey) ){ - break; - } - //TODO: use MBEDTLS_SSL_VERIFY_REQUIRED instead of optional - mbedtls_ssl_conf_authmode( &sec->_conf, MBEDTLS_SSL_VERIFY_OPTIONAL ); - mbedtls_ssl_conf_ca_chain( &sec->_conf, &sec->_cacert, NULL ); - ret = 0; -#endif - break; - } - case PSK: { -#if defined(MBEDTLS_KEY_EXCHANGE__SOME__PSK_ENABLED) - if( 0 != mbedtls_ssl_conf_psk(&sec->_conf, keys._priv, keys._priv_len, keys._pub_cert_or_identifier, keys._pub_len) ){ - break; - } - mbedtls_ssl_conf_ciphersuites(&sec->_conf, PSK_SUITES); - ret = 0; -#endif - break; - } - case ECJPAKE: { -#if defined(MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED) - if( mbedtls_ssl_set_hs_ecjpake_password(&sec->_ssl, keys._priv, keys._priv_len) != 0 ){ - return -1; - } - mbedtls_ssl_conf_ciphersuites(&sec->_conf, ECJPAKE_SUITES); - - //NOTE: If thread starts supporting PSK in other modes, then this will be needed! - mbedtls_ssl_conf_export_keys_cb(&sec->_conf, - export_key_block, - &sec->_keyblk); - ret = 0; -#endif - break; - } - - default: - break; - } - return ret; -} - -int coap_security_handler_connect(coap_security_t *sec, bool is_server, SecureSocketMode sock_mode, coap_security_keys_t keys){ - int ret = -1; - - if( !sec ){ - return ret; - } - sec->_is_blocking = true; - - int endpoint = MBEDTLS_SSL_IS_CLIENT; - if( is_server ){ - endpoint = MBEDTLS_SSL_IS_SERVER; - } - - int mode = MBEDTLS_SSL_TRANSPORT_DATAGRAM; - if( sock_mode == TLS ){ - mode = MBEDTLS_SSL_TRANSPORT_STREAM; - } - - if( ( mbedtls_ssl_config_defaults( &sec->_conf, - endpoint, - mode, 0 ) ) != 0 ) - { - return -1; - } - - mbedtls_ssl_set_bio( &sec->_ssl, sec, - f_send, f_recv, NULL ); - - mbedtls_ssl_set_timer_cb( &sec->_ssl, sec, set_timer, - get_timer ); - - if( coap_security_handler_configure_keys( sec, keys ) != 0 ){ - return -1; - } - -#ifdef MBEDTLS_SSL_SRV_C - mbedtls_ssl_conf_dtls_cookies(&sec->_conf, simple_cookie_write, - simple_cookie_check, - &sec->_cookie); -#endif - - sec->_is_started = true; - - do { - ret = mbedtls_ssl_handshake_step( &sec->_ssl ); - if( ret == MBEDTLS_ERR_SSL_HELLO_VERIFY_REQUIRED ){ //cookie check failed - if( is_server ){ - mbedtls_ssl_session_reset(&sec->_ssl); -#if defined(MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED) - if( mbedtls_ssl_set_hs_ecjpake_password(&sec->_ssl, keys._priv, keys._priv_len) != 0 ){ - return -1; - } -#endif - ret = MBEDTLS_ERR_SSL_WANT_READ; //needed to keep doing - }else{ - ret = -1; - } - } - }while( ret == MBEDTLS_ERR_SSL_WANT_READ || - ret == MBEDTLS_ERR_SSL_WANT_WRITE ); - - if( ret != 0){ - ret = -1; - }else{ - if( mbedtls_ssl_get_verify_result( &sec->_ssl ) != 0 ) - { - ret = -1; - } - } - - return ret; -} - -int coap_security_handler_connect_non_blocking(coap_security_t *sec, bool is_server, SecureSocketMode sock_mode, coap_security_keys_t keys, uint32_t timeout_min, uint32_t timeout_max) -{ - - if( !sec ){ - return -1; - } - sec->_is_blocking = false; - - int endpoint = MBEDTLS_SSL_IS_CLIENT; - if( is_server ){ - endpoint = MBEDTLS_SSL_IS_SERVER; - } - - int mode = MBEDTLS_SSL_TRANSPORT_DATAGRAM; - if( sock_mode == TLS ){ - mode = MBEDTLS_SSL_TRANSPORT_STREAM; - } - - if( ( mbedtls_ssl_config_defaults( &sec->_conf, - endpoint, - mode, 0 ) ) != 0 ) - { - return -1; - } - - if(!timeout_max && !timeout_min){ - mbedtls_ssl_conf_handshake_timeout( &sec->_conf, DTLS_HANDSHAKE_TIMEOUT_MIN, DTLS_HANDSHAKE_TIMEOUT_MAX ); - } - else{ - mbedtls_ssl_conf_handshake_timeout( &sec->_conf, timeout_min, timeout_max ); - } - - mbedtls_ssl_conf_rng( &sec->_conf, mbedtls_ctr_drbg_random, &sec->_ctr_drbg ); - - if( ( mbedtls_ssl_setup( &sec->_ssl, &sec->_conf ) ) != 0 ) - { - return -1; - } - - mbedtls_ssl_set_bio( &sec->_ssl, sec, - f_send, f_recv, NULL ); - - mbedtls_ssl_set_timer_cb( &sec->_ssl, sec, set_timer, - get_timer ); - -#if defined(MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED) - //TODO: Figure out better way!!! - //Password should never be stored in multiple places!!! - if( is_server && keys._priv_len > 0){ - memcpy(sec->_pw, keys._priv, keys._priv_len); - sec->_pw_len = keys._priv_len; - } -#endif - - if( coap_security_handler_configure_keys( sec, keys ) != 0 ){ - return -1; - } - -#ifdef MBEDTLS_SSL_SRV_C - mbedtls_ssl_conf_dtls_cookies(&sec->_conf, simple_cookie_write, - simple_cookie_check, - &sec->_cookie); -#endif - - mbedtls_ssl_conf_min_version(&sec->_conf, MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MAJOR_VERSION_3); - mbedtls_ssl_conf_max_version(&sec->_conf, MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MAJOR_VERSION_3); - - sec->_is_started = true; - - int ret = mbedtls_ssl_handshake_step( &sec->_ssl ); - if( ret == 0 ){ - ret = mbedtls_ssl_handshake_step( &sec->_ssl ); - if( is_server && 0 == ret){ - ret = coap_security_handler_continue_connecting( sec ); - } - } - - if( ret >= 0){ - ret = 1; - }else{ - ret = -1; - } - return ret; -} - -int coap_security_handler_continue_connecting(coap_security_t *sec){ - int ret = -1; - - while( ret != MBEDTLS_ERR_SSL_WANT_READ ){ - ret = mbedtls_ssl_handshake_step( &sec->_ssl ); - - if( MBEDTLS_ERR_SSL_HELLO_VERIFY_REQUIRED == ret){ - mbedtls_ssl_session_reset(&sec->_ssl); -#if defined(MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED) - if( mbedtls_ssl_set_hs_ecjpake_password(&sec->_ssl, sec->_pw, sec->_pw_len) != 0 ){ - return -1; - } -#endif - return 1; - } - else if(ret && (ret != MBEDTLS_ERR_SSL_WANT_READ && ret != MBEDTLS_ERR_SSL_WANT_WRITE)){ - return ret; - } - - if( sec->_ssl.state == MBEDTLS_SSL_HANDSHAKE_OVER ){ - return 0; - } - } - - if(ret == MBEDTLS_ERR_SSL_WANT_READ || ret == MBEDTLS_ERR_SSL_WANT_WRITE){ - return 1; - } - - return -1; -} - - -int coap_security_handler_send_message(coap_security_t *sec, unsigned char *message, size_t len){ - int ret=-1; - - if( sec ){ - do ret = mbedtls_ssl_write( &sec->_ssl, (unsigned char *) message, len ); - while( ret == MBEDTLS_ERR_SSL_WANT_READ || - ret == MBEDTLS_ERR_SSL_WANT_WRITE ); - } - - return ret; //bytes written -} - -int coap_security_send_close_alert(coap_security_t *sec) -{ - if( !sec ){ - return -1; - } - - if(!mbedtls_ssl_close_notify(&sec->_ssl)){ - return 0; - } - return -1; -} - -int coap_security_handler_read(coap_security_t *sec, unsigned char* buffer, size_t len){ - int ret=-1; - int max_loops = 100; - - if( sec && buffer ){ - memset( buffer, 0, len ); - do { - ret = mbedtls_ssl_read( &sec->_ssl, buffer, len ); - } while( (ret == MBEDTLS_ERR_SSL_WANT_READ || - ret == MBEDTLS_ERR_SSL_WANT_WRITE) - && --max_loops); - } - return ret; //bytes read -} - -/**** Timer functions ****/ - -/** - * Set timer function. - * Called back by mbedtls when it wants to set a timer. - * Accepts an intermediate and a final delay in milliseconds - * If the final delay is 0, cancels the running timer. - * TODO - might be better to use an event timer in conjunction with - * CoAP tasklet - */ -static void set_timer(void *sec_obj, uint32_t int_ms, uint32_t fin_ms) -{ - coap_security_t *sec = (coap_security_t *)sec_obj; - if( sec->_start_timer_cb ){ - sec->_start_timer_cb( sec->_timer_id, int_ms, fin_ms); - } -} - -/** - * Get timer function. - * Called back by mbedtls when it wants to get a timer state. - * Returns the state of the current timer - * TODO - might be better to use an event timer in conjunction with - * CoAP tasklet - */ -static int get_timer(void *sec_obj) -{ - coap_security_t *sec = (coap_security_t *)sec_obj; - if( sec->_timer_status_cb ){ - return sec->_timer_status_cb(sec->_timer_id); - } - return -1; -} - -int f_send( void *ctx, const unsigned char *buf, size_t len){ - coap_security_t *sec = (coap_security_t *)ctx; - return sec->_send_cb(sec->_socket_id, sec->_remote_address, sec->_remote_port, buf, len); -} - -int f_recv(void *ctx, unsigned char *buf, size_t len){ - coap_security_t *sec = (coap_security_t *)ctx; - return sec->_receive_cb(sec->_socket_id, buf, len); -} - -int entropy_poll( void *ctx, unsigned char *output, size_t len, - size_t *olen ) -{ - (void)ctx; - //TODO: change to more secure random - randLIB_seed_random(); - char *c = (char*)ns_dyn_mem_temporary_alloc(len); - if( !c ){ - return MBEDTLS_ERR_ENTROPY_SOURCE_FAILED; - } - memset(c, 0, len); - for(uint16_t i=0; i < len; i++){ - *(c + i) = (char)randLIB_get_8bit(); - } - memmove(output, c, len); - *olen = len; - - ns_dyn_mem_free(c); - return( 0 ); -} diff --git a/features/nanostack/FEATURE_NANOSTACK/coap-service/source/coap_service_api.c b/features/nanostack/FEATURE_NANOSTACK/coap-service/source/coap_service_api.c deleted file mode 100644 index ed5063ac4e..0000000000 --- a/features/nanostack/FEATURE_NANOSTACK/coap-service/source/coap_service_api.c +++ /dev/null @@ -1,473 +0,0 @@ -/* - * Copyright (c) 2015-2016 ARM Limited. All Rights Reserved. - */ - - - -#include - -#include "ns_types.h" -#include "ns_list.h" -#include "ns_trace.h" -#include "nsdynmemLIB.h" -#include "sn_nsdl.h" -#include "sn_coap_header.h" -#include "coap_service_api.h" -#include "coap_message_handler.h" -#include "eventOS_event.h" -#include "eventOS_scheduler.h" -#include "eventOS_event_timer.h" -#include "common_functions.h" -#include "coap_connection_handler.h" -#include "net_interface.h" -#include "coap_service_api_internal.h" - -static int16_t coap_service_coap_msg_process(int8_t socket_id, uint8_t source_addr_ptr[static 16], uint16_t port, uint8_t *data_ptr, uint16_t data_len); -static int16_t coap_msg_process_callback(int8_t socket_id, sn_coap_hdr_s *coap_message, coap_transaction_t *transaction_ptr); - -typedef struct uri_registration { - char *uri_ptr; - uint16_t uri_len; - uint8_t allowed_method; - coap_service_request_recv_cb *request_recv_cb; - ns_list_link_t link; -} uri_registration_t; - -typedef NS_LIST_HEAD(uri_registration_t, link) uri_registration_list_t; - -typedef struct coap_service { - coap_service_security_done_cb *coap_security_done_cb; - coap_service_security_start_cb *security_start_cb; - coap_service_virtual_socket_send_cb *virtual_socket_send_cb; - uri_registration_list_t uri_list; - coap_conn_handler_t *conn_handler; - int8_t interface_id; - int8_t service_id; - int8_t listen_socket; - uint8_t service_options; - ns_list_link_t link; -} coap_service_t; - -#define TRACE_GROUP "ThSA" - -static NS_LIST_DEFINE(instance_list, coap_service_t, link); -static int8_t tasklet_id = -1; -coap_msg_handler_t *coap_service_handle = NULL; -static uint32_t coap_ticks = 1; - -#define COAP_TICK_TIMER 0xf1 - -static uri_registration_t *uri_registration_find(coap_service_t *this, const void *uri_ptr, uint16_t uri_len) -{ - ns_list_foreach(uri_registration_t, cur_ptr, &this->uri_list) { - if (cur_ptr->uri_len == uri_len && memcmp(cur_ptr->uri_ptr, uri_ptr, uri_len) == 0) { - return cur_ptr; - } - } - return NULL; -} -static coap_service_t *service_find(int8_t service_id) -{ - coap_service_t *this = NULL; - ns_list_foreach(coap_service_t, cur_ptr, &instance_list) { - if (cur_ptr->service_id == service_id) { - this = cur_ptr; - break; - } - } - return this; -} - -static coap_service_t *service_find_by_socket(int8_t socket_id) -{ - coap_service_t *this = NULL; - ns_list_foreach(coap_service_t, cur_ptr, &instance_list) { - if( coap_connection_handler_socket_belongs_to(cur_ptr->conn_handler, socket_id) ){ - this = cur_ptr; - break; - } - } - return this; -} - -static coap_service_t *service_find_by_uri(uint8_t socket_id, uint8_t *uri_ptr, uint16_t uri_len) -{ - ns_list_foreach(coap_service_t, cur_ptr, &instance_list) { - if (coap_connection_handler_socket_belongs_to(cur_ptr->conn_handler, socket_id) && uri_registration_find(cur_ptr, uri_ptr, uri_len)) { - return cur_ptr; - } - } - return NULL; -} - - -/** - * Coap handling functions - */ -static void *own_alloc(uint16_t size) -{ - if (size) { - return ns_dyn_mem_temporary_alloc(size); - } else { - return 0; - } -} - -static void own_free(void *ptr) -{ - if (ptr) { - ns_dyn_mem_free(ptr); - } -} - -static uint8_t coap_tx_function(uint8_t *data_ptr, uint16_t data_len, sn_nsdl_addr_s *address_ptr, void *param) -{ - coap_service_t *this; - coap_transaction_t *transaction_ptr = coap_message_handler_transaction_valid(param); - ns_address_t dest_addr; - - if (!transaction_ptr || !data_ptr) { - return -1; - } - - tr_debug("Service %d, CoAP TX Function", transaction_ptr->service_id); - - this = service_find(transaction_ptr->service_id); - if (!this) { - return -1; - } - - memcpy(&(dest_addr.address), address_ptr->addr_ptr, 16); - dest_addr.identifier = address_ptr->port; - dest_addr.type = ADDRESS_IPV6; - - if( -2 == coap_connection_handler_send_data(this->conn_handler, &dest_addr, data_ptr, data_len, (this->service_options & COAP_SERVICE_OPTIONS_SECURE_BYPASS) == COAP_SERVICE_OPTIONS_SECURE_BYPASS) ){ - transaction_ptr->data_ptr = ns_dyn_mem_alloc(data_len); - if (!transaction_ptr->data_ptr) { - tr_debug("coap tx out of memory"); - return 0; - - } - memcpy(transaction_ptr->data_ptr, data_ptr, data_len); - transaction_ptr->data_len = data_len; - } - - return 0; -} - -static void service_event_handler(arm_event_s *event) -{ - if (event->event_type == ARM_LIB_TASKLET_INIT_EVENT) { - tr_debug("service tasklet initialised"); - /*initialize coap service and listen socket*/ - } - if (event->event_type == ARM_LIB_SYSTEM_TIMER_EVENT && event->event_id == COAP_TICK_TIMER) { - coap_message_handler_exec(coap_service_handle, coap_ticks++); - if(coap_ticks && !coap_ticks % SECURE_SESSION_CLEAN_INTERVAL){ - coap_connection_handler_exec(coap_ticks); - } - } - eventOS_event_timer_request((uint8_t)COAP_TICK_TIMER, ARM_LIB_SYSTEM_TIMER_EVENT, tasklet_id, 1000); -} - -static int16_t coap_msg_process_callback(int8_t socket_id, sn_coap_hdr_s *coap_message, coap_transaction_t *transaction_ptr) -{ - coap_service_t *this; - if( !coap_message ){ - return -1; - } - // Message is request find correct handle - this = service_find_by_uri(socket_id, coap_message->uri_path_ptr, coap_message->uri_path_len); - if (!this) { - tr_warn("not registered uri %.*s", coap_message->uri_path_len, coap_message->uri_path_ptr); - return -1; - } - - uri_registration_t *uri_reg_ptr = uri_registration_find(this, coap_message->uri_path_ptr, coap_message->uri_path_len); - if (transaction_ptr && uri_reg_ptr && uri_reg_ptr->request_recv_cb) { - tr_debug("Service %d, call request recv cb uri %.*s", this->service_id, coap_message->uri_path_len, coap_message->uri_path_ptr); - - if ((this->service_options & COAP_SERVICE_OPTIONS_SECURE_BYPASS) == COAP_SERVICE_OPTIONS_SECURE_BYPASS ) {//TODO Add secure bypass option - // Service has secure bypass active TODO this is not defined in interface - // this check can be removed I think - transaction_ptr->options = COAP_REQUEST_OPTIONS_SECURE_BYPASS; - } - transaction_ptr->service_id = this->service_id; - return uri_reg_ptr->request_recv_cb(this->service_id, transaction_ptr->remote_address, transaction_ptr->remote_port, coap_message); - } - return -1; -} - -static int16_t coap_service_coap_msg_process(int8_t socket_id, uint8_t source_addr_ptr[static 16], uint16_t port, uint8_t *data_ptr, uint16_t data_len) -{ - return coap_message_handler_coap_msg_process( coap_service_handle, socket_id, source_addr_ptr, port, data_ptr, data_len, &coap_msg_process_callback); -} - -static int recv_cb(int8_t socket_id, uint8_t address[static 16], uint16_t port, unsigned char *data, int len) -{ - uint8_t *data_ptr = NULL; - uint16_t data_len = 0; - - data_ptr = own_alloc(len); - - if (!data_ptr || len < 1) { - return -1; - } - memcpy(data_ptr, data, len); - data_len = len; - tr_debug("service recv socket data len %d ", data_len); - - //parse coap message what CoAP to use - int ret = coap_service_coap_msg_process(socket_id, address, port, data_ptr, data_len); - own_free(data_ptr); - return ret; -} - -static int send_cb(int8_t socket_id, uint8_t address[static 16], uint16_t port, const unsigned char *data_ptr, int data_len) -{ - coap_service_t *this = service_find_by_socket(socket_id); - if (this && this->virtual_socket_send_cb) { - tr_debug("send to virtual socket"); - return this->virtual_socket_send_cb(this->service_id, address, port, data_ptr, data_len); - } - return -1; -} - -//static void sec_conn_closed_cb(int8_t socket_id) -//{ -// coap_service_t *this = service_find_by_socket(socket_id); - -// tr_debug("Secure socket was closed by end device"); -//} - -static void sec_done_cb(int8_t socket_id, uint8_t address[static 16], uint16_t port, uint8_t keyblock[static 40]) -{ - //TODO: this is not enough if shared socket. Inform all! - coap_service_t *this = service_find_by_socket(socket_id); - if (this && this->coap_security_done_cb) { // secure done callback - this->coap_security_done_cb(this->service_id, address, keyblock); - } - - //TODO refactor this away. There should be no transaction_ptr(s) before done_cb has been called - //TODO: send all unsend transactions if more than 1 - coap_transaction_t *transaction_ptr = coap_message_handler_find_transaction(address, port); - if (transaction_ptr && transaction_ptr->data_ptr) { - tr_debug("send delayed packet"); - ns_address_t dest_addr; - memcpy(dest_addr.address, address, 16); - dest_addr.identifier = port; - dest_addr.type = ADDRESS_IPV6; - - coap_connection_handler_send_data(this->conn_handler, &dest_addr, transaction_ptr->data_ptr, transaction_ptr->data_len, (this->service_options & COAP_SERVICE_OPTIONS_SECURE_BYPASS) == COAP_SERVICE_OPTIONS_SECURE_BYPASS); - ns_dyn_mem_free(transaction_ptr->data_ptr); - transaction_ptr->data_ptr = NULL; - transaction_ptr->data_len = 0; - //TODO: who deletes transaction incase no response is required - } -} - -static int get_passwd_cb(int8_t socket_id, uint8_t address[static 16], uint16_t port, uint8_t *pw_ptr, uint8_t *pw_len) -{ - coap_service_t *this = service_find_by_socket(socket_id); - if (this && this->security_start_cb) { - return this->security_start_cb(this->service_id, address, port, pw_ptr, pw_len); - } - return -1; -} - -int8_t coap_service_initialize(int8_t interface_id, uint16_t listen_port, uint8_t service_options, - coap_service_security_start_cb *start_ptr, coap_service_security_done_cb *coap_security_done_cb) -{ - (void) interface_id; - - coap_service_t *this = ns_dyn_mem_alloc(sizeof(coap_service_t)); - if (!this) { - return -1; - } - memset(this, 0, sizeof(coap_service_t)); - tr_debug("service init interface %d, port %d, options %d", interface_id, listen_port, service_options); - - int8_t id = 1;// get unique id - while (service_find(id) && id < 127) { - id++; - } - this->service_id = id; - this->service_options = service_options; - - this->security_start_cb = start_ptr; - this->coap_security_done_cb = coap_security_done_cb; - - if (tasklet_id == -1) { - tr_debug("service tasklet init"); - tasklet_id = eventOS_event_handler_create(&service_event_handler, ARM_LIB_TASKLET_INIT_EVENT); - } - - this->conn_handler = connection_handler_create(recv_cb, send_cb, get_passwd_cb, sec_done_cb); - if(!this->conn_handler){ - ns_dyn_mem_free(this); - return -1; - } - - if (0 > coap_connection_handler_open_connection(this->conn_handler, listen_port, ((this->service_options & COAP_SERVICE_OPTIONS_EPHEMERAL_PORT) == COAP_SERVICE_OPTIONS_EPHEMERAL_PORT), - ((this->service_options & COAP_SERVICE_OPTIONS_SECURE) == COAP_SERVICE_OPTIONS_SECURE), - ((this->service_options & COAP_SERVICE_OPTIONS_VIRTUAL_SOCKET) != COAP_SERVICE_OPTIONS_VIRTUAL_SOCKET), - ((this->service_options & COAP_SERVICE_OPTIONS_SECURE_BYPASS) == COAP_SERVICE_OPTIONS_SECURE_BYPASS))){ - ns_dyn_mem_free(this->conn_handler); - ns_dyn_mem_free(this); - return -1; - } - - if (!coap_service_handle) { - coap_service_handle = coap_message_handler_init(&own_alloc, &own_free, &coap_tx_function); - } - if (!coap_service_handle) { - tr_error("coap service alloc failed"); - //TODO proper handling - } - - ns_list_add_to_start(&instance_list, this); - - return id; -} - -void coap_service_delete(int8_t service_id) -{ - coap_service_t *this = service_find(service_id); - if (!this) { - return; - } - - if (this->conn_handler){ - connection_handler_destroy(this->conn_handler); - } - - //TODO clear all transactions - ns_list_foreach_safe(uri_registration_t, cur_ptr, &this->uri_list) { - ns_dyn_mem_free(cur_ptr->uri_ptr); - ns_list_remove(&this->uri_list, cur_ptr); - ns_dyn_mem_free(cur_ptr); - } - - ns_list_remove(&instance_list, this); - ns_dyn_mem_free(this); - return; -} - -extern void coap_service_close_secure_connection(int8_t service_id, uint8_t destination_addr_ptr[static 16], uint16_t port) -{ - coap_service_t *this = service_find(service_id); - if (!this || !destination_addr_ptr) { - return; - } - if (this->conn_handler){ - connection_handler_close_secure_connection(this->conn_handler, destination_addr_ptr, port); - } -} - -int16_t coap_service_virtual_socket_recv(int8_t service_id, uint8_t source_addr_ptr[static 16], uint16_t port, uint8_t *data_ptr, uint16_t data_len) -{ - coap_service_t *this = service_find(service_id); - tr_debug("Service %d, virtual socket received", service_id); - if (!this) { - return -1; - } - return coap_connection_handler_virtual_recv(this->conn_handler, source_addr_ptr, port, data_ptr, data_len); -} - -int16_t coap_service_virtual_socket_set_cb(int8_t service_id, coap_service_virtual_socket_send_cb *send_method_ptr) -{ - coap_service_t *this = service_find(service_id); - tr_debug("register virtual socket cb"); - if (!this) { - return -1; - } - this->virtual_socket_send_cb = send_method_ptr; - return 0; -} - -int8_t coap_service_register_uri(int8_t service_id, const char *uri, uint8_t allowed_method, coap_service_request_recv_cb *request_recv_cb) -{ - coap_service_t *this = service_find(service_id); - uri_registration_t *uri_reg_ptr; - char *uri_ptr = NULL; - uint16_t uri_len; - tr_debug("Service %d, Uri registration uri: %s", service_id, uri); - if (!this || !uri) { - return -1; - } - uri_len = strlen(uri); - - uri_reg_ptr = uri_registration_find(this, uri, uri_len); - if (!uri_reg_ptr) { - uri_reg_ptr = ns_dyn_mem_alloc(sizeof(uri_registration_t)); - if( !uri_reg_ptr ){ - tr_error("Uri registration failed, OOM"); - return -2; - } - uri_reg_ptr->uri_ptr = NULL; - } else { - ns_dyn_mem_free(uri_reg_ptr->uri_ptr); - ns_list_remove(&this->uri_list, uri_reg_ptr); - } - - uri_ptr = ns_dyn_mem_alloc(uri_len); - if (!uri_ptr) { - ns_dyn_mem_free(uri_reg_ptr); - tr_error("Uri registration failed, OOM"); - return -2; - } - - uri_reg_ptr->uri_ptr = memcpy(uri_ptr, uri, uri_len); - uri_reg_ptr->uri_len = uri_len; - uri_reg_ptr->request_recv_cb = request_recv_cb; - uri_reg_ptr->allowed_method = allowed_method; - ns_list_add_to_start(&this->uri_list, uri_reg_ptr); - return 0; -} - -int8_t coap_service_unregister_uri(int8_t service_id, const char *uri) -{ - coap_service_t *this = service_find(service_id); - uri_registration_t *uri_reg_ptr; - tr_debug("Service %d, Uri unregistration uri: %s", service_id, uri); - if (!this || !uri) { - return -1; - } - - uri_reg_ptr = uri_registration_find(this, uri, strlen(uri)); - if (!uri_reg_ptr) { - return -2; - } - - ns_dyn_mem_free(uri_reg_ptr->uri_ptr); - ns_list_remove(&this->uri_list, uri_reg_ptr); - ns_dyn_mem_free(uri_reg_ptr); - - return 0; -} - -uint16_t coap_service_request_send(int8_t service_id, uint8_t options, const uint8_t destination_addr[static 16], uint16_t destination_port, sn_coap_msg_type_e msg_type, sn_coap_msg_code_e msg_code, const char *uri, - sn_coap_content_format_e cont_type, const uint8_t *payload_ptr, uint16_t payload_len, coap_service_response_recv *request_response_cb){ - //TODO: coap_service_response_recv is an ugly cast, this should be refactored away + sn_coap_hdr_s MUST NOT be exposed to users of coap-service! - //Callback would be still needed, but where to store callback? - return coap_message_handler_request_send(coap_service_handle, service_id, options, destination_addr, destination_port, msg_type, msg_code, uri, cont_type, payload_ptr, payload_len, request_response_cb); -} - -int8_t coap_service_response_send(int8_t service_id, uint8_t options, sn_coap_hdr_s *request_ptr, sn_coap_msg_code_e message_code, sn_coap_content_format_e content_type, const uint8_t *payload_ptr,uint16_t payload_len){ - return coap_message_handler_response_send(coap_service_handle, service_id, options, request_ptr, message_code, content_type, payload_ptr, payload_len); -} - -int8_t coap_service_set_handshake_timeout(int8_t service_id, uint32_t min, uint32_t max) -{ - coap_service_t *this = service_find(service_id); - if(!this){ - return -1; - } - - return coap_connection_handler_set_timeout(this->conn_handler, min, max); -} - -uint32_t coap_service_get_internal_timer_ticks(void) -{ - return coap_ticks; -} diff --git a/features/nanostack/FEATURE_NANOSTACK/coap-service/source/include/coap_connection_handler.h b/features/nanostack/FEATURE_NANOSTACK/coap-service/source/include/coap_connection_handler.h deleted file mode 100644 index b866c609dd..0000000000 --- a/features/nanostack/FEATURE_NANOSTACK/coap-service/source/include/coap_connection_handler.h +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright (c) 2015 ARM Limited. All Rights Reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * 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 __COAP_CONNECTION_HANDLER_H__ -#define __COAP_CONNECTION_HANDLER_H__ - -#include -#include -#include -#include "ns_address.h" -#include "coap_service_api_internal.h" - -#define MAX_SECURE_SESSION_COUNT 3 -#define CLOSED_SECURE_SESSION_TIMEOUT 3600 // Seconds -#define OPEN_SECURE_SESSION_TIMEOUT 18000 // Seconds -#define SECURE_SESSION_CLEAN_INTERVAL 60 // Seconds - -struct internal_socket_s; - -typedef int send_to_socket_cb(int8_t socket_id, uint8_t address[static 16], uint16_t port, const unsigned char *, int); -typedef int receive_from_socket_cb(int8_t socket_id, uint8_t address[static 16], uint16_t port, unsigned char *, int); -typedef int get_pw_cb(int8_t socket_id, uint8_t address[static 16], uint16_t port, uint8_t *pw_ptr, uint8_t *pw_len); -typedef void security_done_cb(int8_t socket_id, uint8_t address[static 16], uint16_t port, uint8_t keyblock[static 40]); - -typedef struct coap_conn_handler_s{ - struct internal_socket_s *socket; - - receive_from_socket_cb *_recv_cb; - send_to_socket_cb *_send_cb; - get_pw_cb *_get_password_cb; - security_done_cb *_security_done_cb; -} coap_conn_handler_t; - -coap_conn_handler_t *connection_handler_create(receive_from_socket_cb *recv_from_cb, - send_to_socket_cb *send_to_cb, - get_pw_cb *pw_cb, - security_done_cb *done_cb); - -void connection_handler_destroy( coap_conn_handler_t *handler ); - -void connection_handler_close_secure_connection( coap_conn_handler_t *handler, uint8_t destination_addr_ptr[static 16], uint16_t port ); - -int coap_connection_handler_open_connection(coap_conn_handler_t *handler, uint16_t listen_port, bool use_ephemeral_port, bool is_secure, bool real_socket, bool bypassSec); - -//If returns -2, it means security was started and data was not send -int coap_connection_handler_send_data(coap_conn_handler_t *handler, ns_address_t *dest_addr, uint8_t *data_ptr, uint16_t data_len, bool bypass_link_sec); - -int coap_connection_handler_virtual_recv(coap_conn_handler_t *handler, uint8_t address[static 16], uint16_t port, uint8_t *data_ptr, uint16_t data_len); - -bool coap_connection_handler_socket_belongs_to(coap_conn_handler_t *handler, int8_t socket_id); - -int8_t coap_connection_handler_set_timeout(coap_conn_handler_t *handler, uint32_t min, uint32_t max); - -void coap_connection_handler_exec(uint32_t time); - -#endif diff --git a/features/nanostack/FEATURE_NANOSTACK/coap-service/source/include/coap_message_handler.h b/features/nanostack/FEATURE_NANOSTACK/coap-service/source/include/coap_message_handler.h deleted file mode 100644 index 20a75d6cc7..0000000000 --- a/features/nanostack/FEATURE_NANOSTACK/coap-service/source/include/coap_message_handler.h +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Copyright (c) 2015-2016 ARM Limited. All Rights Reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * 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 __COAP_MESSAGE_HANDLER_H__ -#define __COAP_MESSAGE_HANDLER_H__ - -#include -#include "sn_coap_header.h" -#include "sn_nsdl.h" -#include "ns_list.h" - -/** - * \brief Service message response receive callback. - * - * Function that handles CoAP service message receiving and parsing - * - * \param msg_id Id number of the current message. - * \param response_ptr Pointer to CoAP header structure. - * - * \return 0 for success / -1 for failure - */ -typedef int coap_message_handler_response_recv(int8_t service_id, uint8_t source_address[static 16], uint16_t source_port, sn_coap_hdr_s *response_ptr); - -typedef struct coap_msg_handler_s { - void *(*sn_coap_service_malloc)(uint16_t); - void (*sn_coap_service_free)(void *); - - uint8_t (*sn_coap_tx_callback)(uint8_t *, uint16_t, sn_nsdl_addr_s *, void *); - - struct coap_s *coap; -} coap_msg_handler_t; - -typedef struct coap_transaction { - uint8_t remote_address[16]; - uint16_t remote_port; - uint8_t token[4]; - uint16_t msg_id; - int8_t service_id; - uint8_t options; - bool client_request: 1; - uint8_t *data_ptr; - uint16_t data_len; - coap_message_handler_response_recv *resp_cb; - ns_list_link_t link; -} coap_transaction_t; - - -extern coap_msg_handler_t *coap_message_handler_init(void *(*used_malloc_func_ptr)(uint16_t), void (*used_free_func_ptr)(void *), - uint8_t (*used_tx_callback_ptr)(uint8_t *, uint16_t, sn_nsdl_addr_s *, void *)); - -extern int8_t coap_message_handler_destroy(coap_msg_handler_t *handle); - -extern coap_transaction_t *coap_message_handler_transaction_valid(coap_transaction_t *tr_ptr); - -extern coap_transaction_t *coap_message_handler_find_transaction(uint8_t *address_ptr, uint16_t port); - -extern int16_t coap_message_handler_coap_msg_process(coap_msg_handler_t *handle, int8_t socket_id, uint8_t source_addr_ptr[static 16], uint16_t port, - uint8_t *data_ptr, uint16_t data_len, int16_t (cb)(int8_t, sn_coap_hdr_s *, coap_transaction_t *)); - -extern uint16_t coap_message_handler_request_send(coap_msg_handler_t *handle, int8_t service_id, uint8_t options, const uint8_t destination_addr[static 16], - uint16_t destination_port, sn_coap_msg_type_e msg_type, sn_coap_msg_code_e msg_code, const char *uri, sn_coap_content_format_e cont_type, - const uint8_t *payload_ptr, uint16_t payload_len, coap_message_handler_response_recv *request_response_cb); - -extern int8_t coap_message_handler_response_send(coap_msg_handler_t *handle, int8_t service_id, uint8_t options, sn_coap_hdr_s *request_ptr, sn_coap_msg_code_e message_code, - sn_coap_content_format_e content_type, const uint8_t *payload_ptr, uint16_t payload_len); - -extern int8_t coap_message_handler_exec(coap_msg_handler_t *handle, uint32_t current_time); - -#endif diff --git a/features/nanostack/FEATURE_NANOSTACK/coap-service/source/include/coap_security_handler.h b/features/nanostack/FEATURE_NANOSTACK/coap-service/source/include/coap_security_handler.h deleted file mode 100644 index e43c74bb7d..0000000000 --- a/features/nanostack/FEATURE_NANOSTACK/coap-service/source/include/coap_security_handler.h +++ /dev/null @@ -1,123 +0,0 @@ -/* - * Copyright (c) 2015-2016 ARM Limited. All Rights Reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * 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 __COAP_SECURITY_HANDLER_H__ -#define __COAP_SECURITY_HANDLER_H__ - -#include -#include -#include -#include "mbedtls/platform.h" -#include "mbedtls/ssl.h" -#include "mbedtls/sha256.h" -#include "mbedtls/entropy.h" -#include "mbedtls/ctr_drbg.h" - -#define COOKIE_SIMPLE_LEN 8 -typedef struct simple_cookie { - unsigned char value[COOKIE_SIMPLE_LEN]; - size_t len; -} simple_cookie_t; - -#define KEY_BLOCK_LEN 40 -typedef struct key_block { - unsigned char value[KEY_BLOCK_LEN]; -} key_block_t; - -typedef int send_cb(int8_t socket_id, uint8_t *address_ptr, uint16_t port, const unsigned char *, size_t); -typedef int receive_cb(int8_t socket_id, unsigned char *, size_t); -typedef void start_timer_cb(int8_t timer_id, uint32_t min, uint32_t fin); -typedef int timer_status_cb(int8_t timer_id); - -#define DTLS_HANDSHAKE_TIMEOUT_MIN 25000 -#define DTLS_HANDSHAKE_TIMEOUT_MAX 201000 - -typedef enum { - DTLS = 0, - TLS = 1 -}SecureSocketMode; - -typedef enum { - Certificate, - PSK, - ECJPAKE -}SecureConnectionMode; - -typedef struct { - unsigned char *_server_cert; - uint8_t _server_cert_len; - unsigned char *_pub_cert_or_identifier; - uint8_t _pub_len; - unsigned char *_priv; - uint8_t _priv_len; -} coap_security_keys_t; - -typedef struct coap_security_s { - mbedtls_ssl_config _conf; - mbedtls_ssl_context _ssl; - - mbedtls_ctr_drbg_context _ctr_drbg; - mbedtls_entropy_context _entropy; - bool _is_started; - simple_cookie_t _cookie; - key_block_t _keyblk; - - SecureConnectionMode _conn_mode; -#if defined(MBEDTLS_X509_CRT_PARSE_C) - mbedtls_x509_crt _cacert; - mbedtls_x509_crt _owncert; -#endif - mbedtls_pk_context _pkey; - - uint8_t _remote_address[16]; - uint16_t _remote_port; - - uint8_t _pw[64]; - uint8_t _pw_len; - - bool _is_blocking; - int8_t _socket_id; - int8_t _timer_id; - send_cb *_send_cb; - receive_cb *_receive_cb; - start_timer_cb *_start_timer_cb; - timer_status_cb *_timer_status_cb; - -} coap_security_t; - -coap_security_t *coap_security_create(int8_t socket_id, int8_t timer_id, uint8_t *address_ptr, uint16_t port, - SecureConnectionMode mode, - send_cb *send_cb, - receive_cb *receive_cb, - start_timer_cb *start_timer_cb, - timer_status_cb *timer_status_cb); - -void coap_security_destroy(coap_security_t *sec); - -int coap_security_handler_connect(coap_security_t *sec, bool is_server, SecureSocketMode sock_mode, coap_security_keys_t keys); - -int coap_security_handler_connect_non_blocking(coap_security_t *sec, bool is_server, SecureSocketMode sock_mode, coap_security_keys_t keys, uint32_t timeout_min, uint32_t timeout_max); - -int coap_security_handler_continue_connecting(coap_security_t *sec); - -int coap_security_handler_send_message(coap_security_t *sec, unsigned char *message, size_t len); - -int coap_security_send_close_alert(coap_security_t *sec); - -int coap_security_handler_read(coap_security_t *sec, unsigned char* buffer, size_t len); - -#endif diff --git a/features/nanostack/FEATURE_NANOSTACK/coap-service/source/include/coap_service_api_internal.h b/features/nanostack/FEATURE_NANOSTACK/coap-service/source/include/coap_service_api_internal.h deleted file mode 100644 index bface30bf5..0000000000 --- a/features/nanostack/FEATURE_NANOSTACK/coap-service/source/include/coap_service_api_internal.h +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright (c) 2016 ARM Limited. All Rights Reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * 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 __COAP_SERVICE_API_INTERNAL_H__ -#define __COAP_SERVICE_API_INTERNAL_H__ - - -uint32_t coap_service_get_internal_timer_ticks(void); - -#endif diff --git a/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/MakefileWorker.mk b/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/MakefileWorker.mk deleted file mode 100644 index 2096ced036..0000000000 --- a/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/MakefileWorker.mk +++ /dev/null @@ -1,562 +0,0 @@ -#--------- -# -# MakefileWorker.mk -# -# Include this helper file in your makefile -# It makes -# A static library -# A test executable -# -# See this example for parameter settings -# examples/Makefile -# -#---------- -# Inputs - these variables describe what to build -# -# INCLUDE_DIRS - Directories used to search for include files. -# This generates a -I for each directory -# SRC_DIRS - Directories containing source file to built into the library -# SRC_FILES - Specific source files to build into library. Helpful when not all code -# in a directory can be built for test (hopefully a temporary situation) -# TEST_SRC_DIRS - Directories containing unit test code build into the unit test runner -# These do not go in a library. They are explicitly included in the test runner -# TEST_SRC_FILES - Specific source files to build into the unit test runner -# These do not go in a library. They are explicitly included in the test runner -# MOCKS_SRC_DIRS - Directories containing mock source files to build into the test runner -# These do not go in a library. They are explicitly included in the test runner -#---------- -# You can adjust these variables to influence how to build the test target -# and where to put and name outputs -# See below to determine defaults -# COMPONENT_NAME - the name of the thing being built -# TEST_TARGET - name the test executable. By default it is -# $(COMPONENT_NAME)_tests -# Helpful if you want 1 > make files in the same directory with different -# executables as output. -# CPPUTEST_HOME - where CppUTest home dir found -# TARGET_PLATFORM - Influences how the outputs are generated by modifying the -# CPPUTEST_OBJS_DIR and CPPUTEST_LIB_DIR to use a sub-directory under the -# normal objs and lib directories. Also modifies where to search for the -# CPPUTEST_LIB to link against. -# CPPUTEST_OBJS_DIR - a directory where o and d files go -# CPPUTEST_LIB_DIR - a directory where libs go -# CPPUTEST_ENABLE_DEBUG - build for debug -# CPPUTEST_USE_MEM_LEAK_DETECTION - Links with overridden new and delete -# CPPUTEST_USE_STD_CPP_LIB - Set to N to keep the standard C++ library out -# of the test harness -# CPPUTEST_USE_GCOV - Turn on coverage analysis -# Clean then build with this flag set to Y, then 'make gcov' -# CPPUTEST_MAPFILE - generate a map file -# CPPUTEST_WARNINGFLAGS - overly picky by default -# OTHER_MAKEFILE_TO_INCLUDE - a hook to use this makefile to make -# other targets. Like CSlim, which is part of fitnesse -# CPPUTEST_USE_VPATH - Use Make's VPATH functionality to support user -# specification of source files and directories that aren't below -# the user's Makefile in the directory tree, like: -# SRC_DIRS += ../../lib/foo -# It defaults to N, and shouldn't be necessary except in the above case. -#---------- -# -# Other flags users can initialize to sneak in their settings -# CPPUTEST_CXXFLAGS - flags for the C++ compiler -# CPPUTEST_CPPFLAGS - flags for the C++ AND C preprocessor -# CPPUTEST_CFLAGS - flags for the C complier -# CPPUTEST_LDFLAGS - Linker flags -#---------- - -# Some behavior is weird on some platforms. Need to discover the platform. - -# Platforms -UNAME_OUTPUT = "$(shell uname -a)" -MACOSX_STR = Darwin -MINGW_STR = MINGW -CYGWIN_STR = CYGWIN -LINUX_STR = Linux -SUNOS_STR = SunOS -UNKNWOWN_OS_STR = Unknown - -# Compilers -CC_VERSION_OUTPUT ="$(shell $(CXX) -v 2>&1)" -CLANG_STR = clang -SUNSTUDIO_CXX_STR = SunStudio - -UNAME_OS = $(UNKNWOWN_OS_STR) - -ifeq ($(findstring $(MINGW_STR),$(UNAME_OUTPUT)),$(MINGW_STR)) - UNAME_OS = $(MINGW_STR) -endif - -ifeq ($(findstring $(CYGWIN_STR),$(UNAME_OUTPUT)),$(CYGWIN_STR)) - UNAME_OS = $(CYGWIN_STR) -endif - -ifeq ($(findstring $(LINUX_STR),$(UNAME_OUTPUT)),$(LINUX_STR)) - UNAME_OS = $(LINUX_STR) -endif - -ifeq ($(findstring $(MACOSX_STR),$(UNAME_OUTPUT)),$(MACOSX_STR)) - UNAME_OS = $(MACOSX_STR) -#lion has a problem with the 'v' part of -a - UNAME_OUTPUT = "$(shell uname -pmnrs)" -endif - -ifeq ($(findstring $(SUNOS_STR),$(UNAME_OUTPUT)),$(SUNOS_STR)) - UNAME_OS = $(SUNOS_STR) - - SUNSTUDIO_CXX_ERR_STR = CC -flags -ifeq ($(findstring $(SUNSTUDIO_CXX_ERR_STR),$(CC_VERSION_OUTPUT)),$(SUNSTUDIO_CXX_ERR_STR)) - CC_VERSION_OUTPUT ="$(shell $(CXX) -V 2>&1)" - COMPILER_NAME = $(SUNSTUDIO_CXX_STR) -endif -endif - -ifeq ($(findstring $(CLANG_STR),$(CC_VERSION_OUTPUT)),$(CLANG_STR)) - COMPILER_NAME = $(CLANG_STR) -endif - -#Kludge for mingw, it does not have cc.exe, but gcc.exe will do -ifeq ($(UNAME_OS),$(MINGW_STR)) - CC := gcc -endif - -#And another kludge. Exception handling in gcc 4.6.2 is broken when linking the -# Standard C++ library as a shared library. Unbelievable. -ifeq ($(UNAME_OS),$(MINGW_STR)) - CPPUTEST_LDFLAGS += -static -endif -ifeq ($(UNAME_OS),$(CYGWIN_STR)) - CPPUTEST_LDFLAGS += -static -endif - - -#Kludge for MacOsX gcc compiler on Darwin9 who can't handle pendantic -ifeq ($(UNAME_OS),$(MACOSX_STR)) -ifeq ($(findstring Version 9,$(UNAME_OUTPUT)),Version 9) - CPPUTEST_PEDANTIC_ERRORS = N -endif -endif - -ifndef COMPONENT_NAME - COMPONENT_NAME = name_this_in_the_makefile -endif - -# Debug on by default -ifndef CPPUTEST_ENABLE_DEBUG - CPPUTEST_ENABLE_DEBUG = Y -endif - -# new and delete for memory leak detection on by default -ifndef CPPUTEST_USE_MEM_LEAK_DETECTION - CPPUTEST_USE_MEM_LEAK_DETECTION = Y -endif - -# Use the standard C library -ifndef CPPUTEST_USE_STD_C_LIB - CPPUTEST_USE_STD_C_LIB = Y -endif - -# Use the standard C++ library -ifndef CPPUTEST_USE_STD_CPP_LIB - CPPUTEST_USE_STD_CPP_LIB = Y -endif - -# Use gcov, off by default -ifndef CPPUTEST_USE_GCOV - CPPUTEST_USE_GCOV = N -endif - -ifndef CPPUTEST_PEDANTIC_ERRORS - CPPUTEST_PEDANTIC_ERRORS = Y -endif - -# Default warnings -ifndef CPPUTEST_WARNINGFLAGS - CPPUTEST_WARNINGFLAGS = -Wall -Wextra -Wshadow -Wswitch-default -Wswitch-enum -Wconversion -ifeq ($(CPPUTEST_PEDANTIC_ERRORS), Y) -# CPPUTEST_WARNINGFLAGS += -pedantic-errors - CPPUTEST_WARNINGFLAGS += -pedantic -endif -ifeq ($(UNAME_OS),$(LINUX_STR)) - CPPUTEST_WARNINGFLAGS += -Wsign-conversion -endif - CPPUTEST_CXX_WARNINGFLAGS = -Woverloaded-virtual - CPPUTEST_C_WARNINGFLAGS = -Wstrict-prototypes -endif - -#Wonderful extra compiler warnings with clang -ifeq ($(COMPILER_NAME),$(CLANG_STR)) -# -Wno-disabled-macro-expansion -> Have to disable the macro expansion warning as the operator new overload warns on that. -# -Wno-padded -> I sort-of like this warning but if there is a bool at the end of the class, it seems impossible to remove it! (except by making padding explicit) -# -Wno-global-constructors Wno-exit-time-destructors -> Great warnings, but in CppUTest it is impossible to avoid as the automatic test registration depends on the global ctor and dtor -# -Wno-weak-vtables -> The TEST_GROUP macro declares a class and will automatically inline its methods. Thats ok as they are only in one translation unit. Unfortunately, the warning can't detect that, so it must be disabled. - CPPUTEST_CXX_WARNINGFLAGS += -Weverything -Wno-disabled-macro-expansion -Wno-padded -Wno-global-constructors -Wno-exit-time-destructors -Wno-weak-vtables - CPPUTEST_C_WARNINGFLAGS += -Weverything -Wno-padded -endif - -# Uhm. Maybe put some warning flags for SunStudio here? -ifeq ($(COMPILER_NAME),$(SUNSTUDIO_CXX_STR)) - CPPUTEST_CXX_WARNINGFLAGS = - CPPUTEST_C_WARNINGFLAGS = -endif - -# Default dir for temporary files (d, o) -ifndef CPPUTEST_OBJS_DIR -ifndef TARGET_PLATFORM - CPPUTEST_OBJS_DIR = objs -else - CPPUTEST_OBJS_DIR = objs/$(TARGET_PLATFORM) -endif -endif - -# Default dir for the outout library -ifndef CPPUTEST_LIB_DIR -ifndef TARGET_PLATFORM - CPPUTEST_LIB_DIR = lib -else - CPPUTEST_LIB_DIR = lib/$(TARGET_PLATFORM) -endif -endif - -# No map by default -ifndef CPPUTEST_MAP_FILE - CPPUTEST_MAP_FILE = N -endif - -# No extentions is default -ifndef CPPUTEST_USE_EXTENSIONS - CPPUTEST_USE_EXTENSIONS = N -endif - -# No VPATH is default -ifndef CPPUTEST_USE_VPATH - CPPUTEST_USE_VPATH := N -endif -# Make empty, instead of 'N', for usage in $(if ) conditionals -ifneq ($(CPPUTEST_USE_VPATH), Y) - CPPUTEST_USE_VPATH := -endif - -ifndef TARGET_PLATFORM -#CPPUTEST_LIB_LINK_DIR = $(CPPUTEST_HOME)/lib -CPPUTEST_LIB_LINK_DIR = /usr/lib/x86_64-linux-gnu -else -CPPUTEST_LIB_LINK_DIR = $(CPPUTEST_HOME)/lib/$(TARGET_PLATFORM) -endif - -# -------------------------------------- -# derived flags in the following area -# -------------------------------------- - -# Without the C library, we'll need to disable the C++ library and ... -ifeq ($(CPPUTEST_USE_STD_C_LIB), N) - CPPUTEST_USE_STD_CPP_LIB = N - CPPUTEST_USE_MEM_LEAK_DETECTION = N - CPPUTEST_CPPFLAGS += -DCPPUTEST_STD_C_LIB_DISABLED - CPPUTEST_CPPFLAGS += -nostdinc -endif - -CPPUTEST_CPPFLAGS += -DCPPUTEST_COMPILATION - -ifeq ($(CPPUTEST_USE_MEM_LEAK_DETECTION), N) - CPPUTEST_CPPFLAGS += -DCPPUTEST_MEM_LEAK_DETECTION_DISABLED -else - ifndef CPPUTEST_MEMLEAK_DETECTOR_NEW_MACRO_FILE - CPPUTEST_MEMLEAK_DETECTOR_NEW_MACRO_FILE = -include $(CPPUTEST_HOME)/include/CppUTest/MemoryLeakDetectorNewMacros.h - endif - ifndef CPPUTEST_MEMLEAK_DETECTOR_MALLOC_MACRO_FILE - CPPUTEST_MEMLEAK_DETECTOR_MALLOC_MACRO_FILE = -include $(CPPUTEST_HOME)/include/CppUTest/MemoryLeakDetectorMallocMacros.h - endif -endif - -ifeq ($(CPPUTEST_ENABLE_DEBUG), Y) - CPPUTEST_CXXFLAGS += -g - CPPUTEST_CFLAGS += -g - CPPUTEST_LDFLAGS += -g -endif - -ifeq ($(CPPUTEST_USE_STD_CPP_LIB), N) - CPPUTEST_CPPFLAGS += -DCPPUTEST_STD_CPP_LIB_DISABLED -ifeq ($(CPPUTEST_USE_STD_C_LIB), Y) - CPPUTEST_CXXFLAGS += -nostdinc++ -endif -endif - -ifdef $(GMOCK_HOME) - GTEST_HOME = $(GMOCK_HOME)/gtest - CPPUTEST_CPPFLAGS += -I$(GMOCK_HOME)/include - GMOCK_LIBRARY = $(GMOCK_HOME)/lib/.libs/libgmock.a - LD_LIBRARIES += $(GMOCK_LIBRARY) - CPPUTEST_CPPFLAGS += -DINCLUDE_GTEST_TESTS - CPPUTEST_WARNINGFLAGS = - CPPUTEST_CPPFLAGS += -I$(GTEST_HOME)/include -I$(GTEST_HOME) - GTEST_LIBRARY = $(GTEST_HOME)/lib/.libs/libgtest.a - LD_LIBRARIES += $(GTEST_LIBRARY) -endif - - -ifeq ($(CPPUTEST_USE_GCOV), Y) - CPPUTEST_CXXFLAGS += -fprofile-arcs -ftest-coverage - CPPUTEST_CFLAGS += -fprofile-arcs -ftest-coverage -endif - -CPPUTEST_CXXFLAGS += $(CPPUTEST_WARNINGFLAGS) $(CPPUTEST_CXX_WARNINGFLAGS) -CPPUTEST_CPPFLAGS += $(CPPUTEST_WARNINGFLAGS) -CPPUTEST_CXXFLAGS += $(CPPUTEST_MEMLEAK_DETECTOR_NEW_MACRO_FILE) -CPPUTEST_CPPFLAGS += $(CPPUTEST_MEMLEAK_DETECTOR_MALLOC_MACRO_FILE) -CPPUTEST_CFLAGS += $(CPPUTEST_C_WARNINGFLAGS) - -TARGET_MAP = $(COMPONENT_NAME).map.txt -ifeq ($(CPPUTEST_MAP_FILE), Y) - CPPUTEST_LDFLAGS += -Wl,-map,$(TARGET_MAP) -endif - -# Link with CppUTest lib -CPPUTEST_LIB = $(CPPUTEST_LIB_LINK_DIR)/libCppUTest.a - -ifeq ($(CPPUTEST_USE_EXTENSIONS), Y) -CPPUTEST_LIB += $(CPPUTEST_LIB_LINK_DIR)/libCppUTestExt.a -endif - -ifdef CPPUTEST_STATIC_REALTIME - LD_LIBRARIES += -lrt -endif - -TARGET_LIB = \ - $(CPPUTEST_LIB_DIR)/lib$(COMPONENT_NAME).a - -ifndef TEST_TARGET - ifndef TARGET_PLATFORM - TEST_TARGET = $(COMPONENT_NAME)_tests - else - TEST_TARGET = $(COMPONENT_NAME)_$(TARGET_PLATFORM)_tests - endif -endif - -#Helper Functions -get_src_from_dir = $(wildcard $1/*.cpp) $(wildcard $1/*.cc) $(wildcard $1/*.c) -get_dirs_from_dirspec = $(wildcard $1) -get_src_from_dir_list = $(foreach dir, $1, $(call get_src_from_dir,$(dir))) -__src_to = $(subst .c,$1, $(subst .cc,$1, $(subst .cpp,$1,$(if $(CPPUTEST_USE_VPATH),$(notdir $2),$2)))) -src_to = $(addprefix $(CPPUTEST_OBJS_DIR)/,$(call __src_to,$1,$2)) -src_to_o = $(call src_to,.o,$1) -src_to_d = $(call src_to,.d,$1) -src_to_gcda = $(call src_to,.gcda,$1) -src_to_gcno = $(call src_to,.gcno,$1) -time = $(shell date +%s) -delta_t = $(eval minus, $1, $2) -debug_print_list = $(foreach word,$1,echo " $(word)";) echo; - -#Derived -STUFF_TO_CLEAN += $(TEST_TARGET) $(TEST_TARGET).exe $(TARGET_LIB) $(TARGET_MAP) - -SRC += $(call get_src_from_dir_list, $(SRC_DIRS)) $(SRC_FILES) -OBJ = $(call src_to_o,$(SRC)) - -STUFF_TO_CLEAN += $(OBJ) - -TEST_SRC += $(call get_src_from_dir_list, $(TEST_SRC_DIRS)) $(TEST_SRC_FILES) -TEST_OBJS = $(call src_to_o,$(TEST_SRC)) -STUFF_TO_CLEAN += $(TEST_OBJS) - - -MOCKS_SRC += $(call get_src_from_dir_list, $(MOCKS_SRC_DIRS)) -MOCKS_OBJS = $(call src_to_o,$(MOCKS_SRC)) -STUFF_TO_CLEAN += $(MOCKS_OBJS) - -ALL_SRC = $(SRC) $(TEST_SRC) $(MOCKS_SRC) - -# If we're using VPATH -ifeq ($(CPPUTEST_USE_VPATH), Y) -# gather all the source directories and add them - VPATH += $(sort $(dir $(ALL_SRC))) -# Add the component name to the objs dir path, to differentiate between same-name objects - CPPUTEST_OBJS_DIR := $(addsuffix /$(COMPONENT_NAME),$(CPPUTEST_OBJS_DIR)) -endif - -#Test coverage with gcov -GCOV_OUTPUT = gcov_output.txt -GCOV_REPORT = gcov_report.txt -GCOV_ERROR = gcov_error.txt -GCOV_GCDA_FILES = $(call src_to_gcda, $(ALL_SRC)) -GCOV_GCNO_FILES = $(call src_to_gcno, $(ALL_SRC)) -TEST_OUTPUT = $(TEST_TARGET).txt -STUFF_TO_CLEAN += \ - $(GCOV_OUTPUT)\ - $(GCOV_REPORT)\ - $(GCOV_REPORT).html\ - $(GCOV_ERROR)\ - $(GCOV_GCDA_FILES)\ - $(GCOV_GCNO_FILES)\ - $(TEST_OUTPUT) - -#The gcda files for gcov need to be deleted before each run -#To avoid annoying messages. -GCOV_CLEAN = $(SILENCE)rm -f $(GCOV_GCDA_FILES) $(GCOV_OUTPUT) $(GCOV_REPORT) $(GCOV_ERROR) -RUN_TEST_TARGET = $(SILENCE) $(GCOV_CLEAN) ; echo "Running $(TEST_TARGET)"; ./$(TEST_TARGET) $(CPPUTEST_EXE_FLAGS) -ojunit - -ifeq ($(CPPUTEST_USE_GCOV), Y) - - ifeq ($(COMPILER_NAME),$(CLANG_STR)) - LD_LIBRARIES += --coverage - else - LD_LIBRARIES += -lgcov - endif -endif - - -INCLUDES_DIRS_EXPANDED = $(call get_dirs_from_dirspec, $(INCLUDE_DIRS)) -INCLUDES += $(foreach dir, $(INCLUDES_DIRS_EXPANDED), -I$(dir)) -MOCK_DIRS_EXPANDED = $(call get_dirs_from_dirspec, $(MOCKS_SRC_DIRS)) -INCLUDES += $(foreach dir, $(MOCK_DIRS_EXPANDED), -I$(dir)) - -CPPUTEST_CPPFLAGS += $(INCLUDES) $(CPPUTESTFLAGS) - -DEP_FILES = $(call src_to_d, $(ALL_SRC)) -STUFF_TO_CLEAN += $(DEP_FILES) $(PRODUCTION_CODE_START) $(PRODUCTION_CODE_END) -STUFF_TO_CLEAN += $(STDLIB_CODE_START) $(MAP_FILE) cpputest_*.xml junit_run_output - -# We'll use the CPPUTEST_CFLAGS etc so that you can override AND add to the CppUTest flags -CFLAGS = $(CPPUTEST_CFLAGS) $(CPPUTEST_ADDITIONAL_CFLAGS) -CPPFLAGS = $(CPPUTEST_CPPFLAGS) $(CPPUTEST_ADDITIONAL_CPPFLAGS) -CXXFLAGS = $(CPPUTEST_CXXFLAGS) $(CPPUTEST_ADDITIONAL_CXXFLAGS) -LDFLAGS = $(CPPUTEST_LDFLAGS) $(CPPUTEST_ADDITIONAL_LDFLAGS) - -# Don't consider creating the archive a warning condition that does STDERR output -ARFLAGS := $(ARFLAGS)c - -DEP_FLAGS=-MMD -MP - -# Some macros for programs to be overridden. For some reason, these are not in Make defaults -RANLIB = ranlib - -# Targets - -.PHONY: all -all: start $(TEST_TARGET) - $(RUN_TEST_TARGET) - -.PHONY: start -start: $(TEST_TARGET) - $(SILENCE)START_TIME=$(call time) - -.PHONY: all_no_tests -all_no_tests: $(TEST_TARGET) - -.PHONY: flags -flags: - @echo - @echo "OS ${UNAME_OS}" - @echo "Compile C and C++ source with CPPFLAGS:" - @$(call debug_print_list,$(CPPFLAGS)) - @echo "Compile C++ source with CXXFLAGS:" - @$(call debug_print_list,$(CXXFLAGS)) - @echo "Compile C source with CFLAGS:" - @$(call debug_print_list,$(CFLAGS)) - @echo "Link with LDFLAGS:" - @$(call debug_print_list,$(LDFLAGS)) - @echo "Link with LD_LIBRARIES:" - @$(call debug_print_list,$(LD_LIBRARIES)) - @echo "Create libraries with ARFLAGS:" - @$(call debug_print_list,$(ARFLAGS)) - -TEST_DEPS = $(TEST_OBJS) $(MOCKS_OBJS) $(PRODUCTION_CODE_START) $(TARGET_LIB) $(USER_LIBS) $(PRODUCTION_CODE_END) $(CPPUTEST_LIB) $(STDLIB_CODE_START) -test-deps: $(TEST_DEPS) - -$(TEST_TARGET): $(TEST_DEPS) - @echo Linking $@ - $(SILENCE)$(CXX) -o $@ $^ $(LD_LIBRARIES) $(LDFLAGS) - -$(TARGET_LIB): $(OBJ) - @echo Building archive $@ - $(SILENCE)mkdir -p $(dir $@) - $(SILENCE)$(AR) $(ARFLAGS) $@ $^ - $(SILENCE)$(RANLIB) $@ - -test: $(TEST_TARGET) - $(RUN_TEST_TARGET) | tee $(TEST_OUTPUT) - -vtest: $(TEST_TARGET) - $(RUN_TEST_TARGET) -v | tee $(TEST_OUTPUT) - -$(CPPUTEST_OBJS_DIR)/%.o: %.cc - @echo compiling $(notdir $<) - $(SILENCE)mkdir -p $(dir $@) - $(SILENCE)$(COMPILE.cpp) $(DEP_FLAGS) $(OUTPUT_OPTION) $< - -$(CPPUTEST_OBJS_DIR)/%.o: %.cpp - @echo compiling $(notdir $<) - $(SILENCE)mkdir -p $(dir $@) - $(SILENCE)$(COMPILE.cpp) $(DEP_FLAGS) $(OUTPUT_OPTION) $< - -$(CPPUTEST_OBJS_DIR)/%.o: %.c - @echo compiling $(notdir $<) - $(SILENCE)mkdir -p $(dir $@) - $(SILENCE)$(COMPILE.c) $(DEP_FLAGS) $(OUTPUT_OPTION) $< - -ifneq "$(MAKECMDGOALS)" "clean" --include $(DEP_FILES) -endif - -.PHONY: clean -clean: - @echo Making clean - $(SILENCE)$(RM) $(STUFF_TO_CLEAN) - $(SILENCE)rm -rf gcov objs #$(CPPUTEST_OBJS_DIR) - $(SILENCE)rm -rf $(CPPUTEST_LIB_DIR) - $(SILENCE)find . -name "*.gcno" | xargs rm -f - $(SILENCE)find . -name "*.gcda" | xargs rm -f - -#realclean gets rid of all gcov, o and d files in the directory tree -#not just the ones made by this makefile -.PHONY: realclean -realclean: clean - $(SILENCE)rm -rf gcov - $(SILENCE)find . -name "*.gdcno" | xargs rm -f - $(SILENCE)find . -name "*.[do]" | xargs rm -f - -gcov: test -ifeq ($(CPPUTEST_USE_VPATH), Y) - $(SILENCE)gcov --object-directory $(CPPUTEST_OBJS_DIR) $(SRC) >> $(GCOV_OUTPUT) 2>> $(GCOV_ERROR) -else - $(SILENCE)for d in $(SRC_DIRS) ; do \ - gcov --object-directory $(CPPUTEST_OBJS_DIR)/$$d $$d/*.c $$d/*.cpp >> $(GCOV_OUTPUT) 2>>$(GCOV_ERROR) ; \ - done - $(SILENCE)for f in $(SRC_FILES) ; do \ - gcov --object-directory $(CPPUTEST_OBJS_DIR)/$$f $$f >> $(GCOV_OUTPUT) 2>>$(GCOV_ERROR) ; \ - done -endif -# $(CPPUTEST_HOME)/scripts/filterGcov.sh $(GCOV_OUTPUT) $(GCOV_ERROR) $(GCOV_REPORT) $(TEST_OUTPUT) - /usr/share/cpputest/scripts/filterGcov.sh $(GCOV_OUTPUT) $(GCOV_ERROR) $(GCOV_REPORT) $(TEST_OUTPUT) - $(SILENCE)cat $(GCOV_REPORT) - $(SILENCE)mkdir -p gcov - $(SILENCE)mv *.gcov gcov - $(SILENCE)mv gcov_* gcov - @echo "See gcov directory for details" - -.PHONEY: format -format: - $(CPPUTEST_HOME)/scripts/reformat.sh $(PROJECT_HOME_DIR) - -.PHONEY: debug -debug: - @echo - @echo "Target Source files:" - @$(call debug_print_list,$(SRC)) - @echo "Target Object files:" - @$(call debug_print_list,$(OBJ)) - @echo "Test Source files:" - @$(call debug_print_list,$(TEST_SRC)) - @echo "Test Object files:" - @$(call debug_print_list,$(TEST_OBJS)) - @echo "Mock Source files:" - @$(call debug_print_list,$(MOCKS_SRC)) - @echo "Mock Object files:" - @$(call debug_print_list,$(MOCKS_OBJS)) - @echo "All Input Dependency files:" - @$(call debug_print_list,$(DEP_FILES)) - @echo Stuff to clean: - @$(call debug_print_list,$(STUFF_TO_CLEAN)) - @echo Includes: - @$(call debug_print_list,$(INCLUDES)) - --include $(OTHER_MAKEFILE_TO_INCLUDE) diff --git a/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/coap_connection_handler/coap_connection_handlertest.cpp b/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/coap_connection_handler/coap_connection_handlertest.cpp deleted file mode 100644 index 383d42b6b8..0000000000 --- a/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/coap_connection_handler/coap_connection_handlertest.cpp +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright (c) 2015 ARM. All rights reserved. - */ -#include "CppUTest/TestHarness.h" -#include "test_coap_connection_handler.h" - -TEST_GROUP(coap_connection_handler) -{ - void setup() - { - } - - void teardown() - { - } -}; - -TEST(coap_connection_handler, test_connection_handler_create) -{ - CHECK(test_connection_handler_create()); -} - -TEST(coap_connection_handler, test_connection_handler_destroy) -{ - CHECK(test_connection_handler_destroy()); -} - -TEST(coap_connection_handler, test_coap_connection_handler_open_connection) -{ - CHECK(test_coap_connection_handler_open_connection()); -} - -TEST(coap_connection_handler, test_coap_connection_handler_send_data) -{ - CHECK(test_coap_connection_handler_send_data()); -} - -TEST(coap_connection_handler, test_coap_connection_handler_virtual_recv) -{ - CHECK(test_coap_connection_handler_virtual_recv()); -} - -TEST(coap_connection_handler, test_coap_connection_handler_socket_belongs_to) -{ - CHECK(test_coap_connection_handler_socket_belongs_to()); -} - -TEST(coap_connection_handler, test_timer_callbacks) -{ - CHECK(test_timer_callbacks()); -} - -TEST(coap_connection_handler, test_socket_api_callbacks) -{ - CHECK(test_socket_api_callbacks()); -} - -TEST(coap_connection_handler, test_security_callbacks) -{ - CHECK(test_security_callbacks()); -} - diff --git a/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/coap_connection_handler/main.cpp b/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/coap_connection_handler/main.cpp deleted file mode 100644 index c04ec8b369..0000000000 --- a/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/coap_connection_handler/main.cpp +++ /dev/null @@ -1,15 +0,0 @@ -/* - * Copyright (c) 2015 ARM. All rights reserved. - */ - -#include "CppUTest/CommandLineTestRunner.h" -#include "CppUTest/TestPlugin.h" -#include "CppUTest/TestRegistry.h" -#include "CppUTestExt/MockSupportPlugin.h" -int main(int ac, char** av) -{ - return CommandLineTestRunner::RunAllTests(ac, av); -} - -IMPORT_TEST_GROUP(coap_connection_handler); - diff --git a/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/coap_connection_handler/test_coap_connection_handler.c b/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/coap_connection_handler/test_coap_connection_handler.c deleted file mode 100644 index 6c26a8db09..0000000000 --- a/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/coap_connection_handler/test_coap_connection_handler.c +++ /dev/null @@ -1,469 +0,0 @@ -/* - * Copyright (c) 2015-2016 ARM Limited. All Rights Reserved. - */ -#include "test_coap_connection_handler.h" -#include -#include -#include "nsdynmemLIB_stub.h" -#include "mbedtls/platform.h" -#include "mbedtls/ssl.h" -#include "coap_connection_handler.h" -#include "coap_security_handler_stub.h" -#include "ns_timer_stub.h" -#include "socket_api.h" -#include "socket_api_stub.h" -#include "net_interface.h" - -int send_to_sock_cb(int8_t socket_id, uint8_t address, uint16_t port, const unsigned char *a, int b) -{ - return 1; -} - -int receive_from_sock_cb(int8_t socket_id, uint8_t address, uint16_t port, unsigned char *a, int b) -{ - return 1; -} - -int get_passwd_cb(int8_t socket_id, uint8_t address, uint16_t port, uint8_t *pw_ptr, uint8_t *pw_len) -{ - return 0; -} - -void sec_done_cb(int8_t socket_id, uint8_t address[static 16], uint16_t port, uint8_t keyblock[static 40]) -{ - return 1; -} - -bool test_connection_handler_create() -{ - coap_security_handler_stub.counter = -1; - if( NULL != connection_handler_create(NULL, NULL, NULL, NULL) ) - return false; - - if( NULL != connection_handler_create(&receive_from_sock_cb, NULL, NULL, NULL) ) - return false; - - nsdynmemlib_stub.returnCounter = 1; - coap_conn_handler_t *handler = connection_handler_create(&receive_from_sock_cb, NULL, NULL, NULL); - if( NULL == handler ) - return false; - ns_dyn_mem_free(handler); - return true; -} - -bool test_connection_handler_destroy() -{ - coap_security_handler_stub.counter = -1; - nsdynmemlib_stub.returnCounter = 1; - coap_conn_handler_t *handler = connection_handler_create(&receive_from_sock_cb, NULL, NULL, NULL); - - connection_handler_destroy(handler); - return true; -} - -bool test_coap_connection_handler_open_connection() -{ - coap_security_handler_stub.counter = -1; - nsdynmemlib_stub.returnCounter = 1; - coap_conn_handler_t *handler = connection_handler_create(&receive_from_sock_cb, NULL, NULL, NULL); - - if( -1 != coap_connection_handler_open_connection(NULL, 0,false,false,false,false) ) - return false; - - if( -1 != coap_connection_handler_open_connection(handler, 0,false,false,false,false) ) - return false; - - ns_dyn_mem_free(handler); - nsdynmemlib_stub.returnCounter = 1; - handler = connection_handler_create(&receive_from_sock_cb, &send_to_sock_cb, NULL, NULL); - if( -1 != coap_connection_handler_open_connection(handler, 0,true,true,true,false) ) - return false; - - nsdynmemlib_stub.returnCounter = 2; - if( 0 != coap_connection_handler_open_connection(handler, 0,true,true,true,false) ) - return false; - - nsdynmemlib_stub.returnCounter = 2; - if( 0 != coap_connection_handler_open_connection(handler, 22,false,true,true,true) ) - return false; - - //open second one - nsdynmemlib_stub.returnCounter = 1; - coap_conn_handler_t *handler2 = connection_handler_create(&receive_from_sock_cb, &send_to_sock_cb, NULL, NULL); - nsdynmemlib_stub.returnCounter = 2; - if( 0 != coap_connection_handler_open_connection(handler2, 22,false,true,true,true) ) - return false; - - if( 0 != coap_connection_handler_open_connection(handler, 23,false,false,false,false) ) - return false; - - connection_handler_destroy(handler2); - connection_handler_destroy(handler); - return true; -} - -bool test_coap_connection_handler_send_data() -{ - coap_security_handler_stub.counter = -1; - if( -1 != coap_connection_handler_send_data(NULL, NULL, NULL, 0, false)) - return false; - - ns_address_t addr; - memset(addr.address, 1, 16); - addr.identifier = 22; - - nsdynmemlib_stub.returnCounter = 1; - coap_conn_handler_t *handler = connection_handler_create(&receive_from_sock_cb, &send_to_sock_cb, NULL, NULL); - nsdynmemlib_stub.returnCounter = 2; - if( 0 != coap_connection_handler_open_connection(handler, 22,false,true,false,false) ) - return false; - - if( -1 != coap_connection_handler_send_data(handler, &addr, NULL, 0, true)) - return false; - - connection_handler_destroy(handler); - - coap_security_handler_stub.sec_obj = (coap_security_t *)malloc(sizeof(coap_security_t)); - memset(coap_security_handler_stub.sec_obj, 0, sizeof(coap_security_t)); - coap_security_handler_stub.sec_obj->_remote_port = 22; - memset(coap_security_handler_stub.sec_obj->_remote_address, 1, 16 ); - - nsdynmemlib_stub.returnCounter = 1; - handler = connection_handler_create(&receive_from_sock_cb, &send_to_sock_cb, NULL, NULL); - nsdynmemlib_stub.returnCounter = 4; - if( 0 != coap_connection_handler_open_connection(handler, 22,false,true,false,false) ) - return false; - - if( -1 != coap_connection_handler_send_data(handler, &addr, NULL, 0, true)) - return false; - - if( -1 != coap_connection_handler_send_data(handler, &addr, NULL, 0, true)) - return false; - - connection_handler_destroy(handler); - - free(coap_security_handler_stub.sec_obj); - coap_security_handler_stub.sec_obj = NULL; - - //NON SECURE HERE --> - nsdynmemlib_stub.returnCounter = 1; - handler = connection_handler_create(&receive_from_sock_cb, &send_to_sock_cb, NULL, NULL); - nsdynmemlib_stub.returnCounter = 2; - if( 0 != coap_connection_handler_open_connection(handler, 22,false,false,false,false) ) - return false; - - - if( 1 != coap_connection_handler_send_data(handler, &addr, NULL, 0, true)) - return false; - connection_handler_destroy(handler); - - nsdynmemlib_stub.returnCounter = 1; - handler = connection_handler_create(&receive_from_sock_cb, &send_to_sock_cb, NULL, NULL); - nsdynmemlib_stub.returnCounter = 2; - if( 0 != coap_connection_handler_open_connection(handler, 22,false,false,true,false) ) - return false; - - socket_api_stub.int8_value = 7; - if( 7 != coap_connection_handler_send_data(handler, &addr, NULL, 0, true)) - return false; - connection_handler_destroy(handler); - - //<-- NON SECURE HERE - - return true; -} - -bool test_coap_connection_handler_virtual_recv() -{ - coap_security_handler_stub.counter = -1; - uint8_t buf[16]; - memset(&buf, 1, 16); - if( -1 != coap_connection_handler_virtual_recv(NULL,buf, 12, NULL, 0) ) - return false; - - nsdynmemlib_stub.returnCounter = 1; - coap_conn_handler_t *handler = connection_handler_create(&receive_from_sock_cb, &send_to_sock_cb, NULL, NULL); - nsdynmemlib_stub.returnCounter = 2; - if( 0 != coap_connection_handler_open_connection(handler, 22,false,true,true,false) ) - return false; - - if( -1 != coap_connection_handler_virtual_recv(handler,buf, 12, NULL, 0) ) - return false; - - nsdynmemlib_stub.returnCounter = 1; - if( -1 != coap_connection_handler_virtual_recv(handler,buf, 12, NULL, 0) ) - return false; - - ns_timer_stub.int8_value = 0; - nsdynmemlib_stub.returnCounter = 3; - if( -1 != coap_connection_handler_virtual_recv(handler,buf, 12, &buf, 1) ) - return false; - - //handler->socket->data still in memory - coap_security_handler_stub.sec_obj = (coap_security_t *)malloc(sizeof(coap_security_t)); - memset(coap_security_handler_stub.sec_obj, 0, sizeof(coap_security_t)); - coap_security_handler_stub.sec_obj->_remote_port = 55; - memset(coap_security_handler_stub.sec_obj->_remote_address, 4, 16 ); - - ns_timer_stub.int8_value = -1; - nsdynmemlib_stub.returnCounter = 3; - if( -1 != coap_connection_handler_virtual_recv(handler,buf, 12, &buf, 1) ) - return false; - - ns_timer_stub.int8_value = 0; - nsdynmemlib_stub.returnCounter = 3; - if( -1 != coap_connection_handler_virtual_recv(handler,buf, 12, &buf, 1) ) - return false; - - connection_handler_destroy(handler); - - nsdynmemlib_stub.returnCounter = 1; - coap_conn_handler_t *handler2 = connection_handler_create(&receive_from_sock_cb, &send_to_sock_cb, &get_passwd_cb, &sec_done_cb); - nsdynmemlib_stub.returnCounter = 2; - if( 0 != coap_connection_handler_open_connection(handler2, 24,false,true,true,false) ) - return false; - - nsdynmemlib_stub.returnCounter = 3; - if( 0 != coap_connection_handler_virtual_recv(handler2,buf, 12, &buf, 1) ) - return false; - - nsdynmemlib_stub.returnCounter = 1; - coap_security_handler_stub.int_value = 0; - coap_security_handler_stub.sec_obj->_remote_port = 12; - memset(coap_security_handler_stub.sec_obj->_remote_address, 1, 16 ); - if( 0 != coap_connection_handler_virtual_recv(handler2,buf, 12, &buf, 1) ) - return false; - - nsdynmemlib_stub.returnCounter = 1; - if( 0 != coap_connection_handler_virtual_recv(handler2,buf, 12, &buf, 1) ) - return false; - - nsdynmemlib_stub.returnCounter = 1; - coap_security_handler_stub.int_value = MBEDTLS_ERR_SSL_PEER_CLOSE_NOTIFY; - if( 0 != coap_connection_handler_virtual_recv(handler2,buf, 12, &buf, 1) ) - return false; - - connection_handler_destroy(handler2); - - free(coap_security_handler_stub.sec_obj); - coap_security_handler_stub.sec_obj = NULL; - - nsdynmemlib_stub.returnCounter = 1; - coap_conn_handler_t *handler3 = connection_handler_create(&receive_from_sock_cb, &send_to_sock_cb, &get_passwd_cb, &sec_done_cb); - nsdynmemlib_stub.returnCounter = 2; - if( 0 != coap_connection_handler_open_connection(handler3, 26,false,false,true,false) ) - return false; - - nsdynmemlib_stub.returnCounter = 3; - if( 0 != coap_connection_handler_virtual_recv(handler3,buf, 12, &buf, 1) ) - return false; - - connection_handler_destroy(handler3); - - return true; -} - -bool test_coap_connection_handler_socket_belongs_to() -{ - coap_security_handler_stub.counter = -1; - if( false != coap_connection_handler_socket_belongs_to(NULL, 2) ) - return false; - - socket_api_stub.int8_value = 0; - nsdynmemlib_stub.returnCounter = 1; - coap_conn_handler_t *handler = connection_handler_create(&receive_from_sock_cb, &send_to_sock_cb, NULL, NULL); - nsdynmemlib_stub.returnCounter = 2; - if( 0 != coap_connection_handler_open_connection(handler, 22,false,true,true,false) ) - return false; - - if( true != coap_connection_handler_socket_belongs_to(handler, 0) ) - return false; - - if( false != coap_connection_handler_socket_belongs_to(handler, 3) ) - return false; - connection_handler_destroy(handler); - - nsdynmemlib_stub.returnCounter = 0; - return true; -} - -bool test_timer_callbacks() -{ - coap_security_handler_stub.counter = -1; - uint8_t buf[16]; - memset(&buf, 1, 16); - - nsdynmemlib_stub.returnCounter = 1; - coap_conn_handler_t *handler = connection_handler_create(&receive_from_sock_cb, &send_to_sock_cb, NULL, NULL); - nsdynmemlib_stub.returnCounter = 2; - if( 0 != coap_connection_handler_open_connection(handler, 22,false,true,true,false) ) - return false; - - //handler->socket->data still in memory - coap_security_handler_stub.sec_obj = (coap_security_t *)malloc(sizeof(coap_security_t)); - memset(coap_security_handler_stub.sec_obj, 0, sizeof(coap_security_t)); - coap_security_handler_stub.sec_obj->_remote_port = 55; - memset(coap_security_handler_stub.sec_obj->_remote_address, 4, 16 ); - coap_security_handler_stub.sec_obj->_timer_id = 5; - - ns_timer_stub.int8_value = 0; - nsdynmemlib_stub.returnCounter = 3; - ns_timer_stub.int8_value = 5; - if( -1 != coap_connection_handler_virtual_recv(handler,buf, 12, &buf, 1) ) - return false; - - //Note next tests will affect ns_timer test (cycle & cycle_count - if( coap_security_handler_stub.start_timer_cb ){ - coap_security_handler_stub.start_timer_cb(1, 0, 0); - - coap_security_handler_stub.start_timer_cb(1, 1, 2); - } - - if( coap_security_handler_stub.timer_status_cb ){ - if( -1 != coap_security_handler_stub.timer_status_cb(4) ) - return false; - - if( 0 != coap_security_handler_stub.timer_status_cb(1) ) - return false; - } - - if( ns_timer_stub.cb ){ - ns_timer_stub.cb(4, 0); - - ns_timer_stub.cb(5, 0); - - coap_security_handler_stub.int_value = MBEDTLS_ERR_SSL_TIMEOUT; - - ns_timer_stub.cb(5, 0); - coap_security_handler_stub.int_value = 0; - } - - connection_handler_destroy(handler); - free(coap_security_handler_stub.sec_obj); - coap_security_handler_stub.sec_obj = NULL; - return true; -} - -bool test_socket_api_callbacks() -{ - coap_security_handler_stub.counter = -1; - uint8_t buf[16]; - memset(&buf, 1, 16); - - socket_callback_t *sckt_data = (socket_callback_t *)malloc(sizeof(socket_callback_t)); - memset(sckt_data, 0, sizeof(socket_callback_t)); - - coap_security_handler_stub.sec_obj = (coap_security_t *)malloc(sizeof(coap_security_t)); - memset(coap_security_handler_stub.sec_obj, 0, sizeof(coap_security_t)); - - socket_api_stub.int8_value = 0; - nsdynmemlib_stub.returnCounter = 1; - coap_conn_handler_t *handler = connection_handler_create(&receive_from_sock_cb, &send_to_sock_cb, NULL, NULL); - nsdynmemlib_stub.returnCounter = 2; - if( 0 != coap_connection_handler_open_connection(handler, 22,false,false,true,false) ) - return false; - - if( socket_api_stub.recv_cb ){ - sckt_data->event_type = SOCKET_DATA; - sckt_data->d_len = 1; - socket_api_stub.int8_value = -1; - socket_api_stub.recv_cb(sckt_data); - - nsdynmemlib_stub.returnCounter = 1; - socket_api_stub.recv_cb(sckt_data); - - nsdynmemlib_stub.returnCounter = 1; - socket_api_stub.int8_value = 1; - socket_api_stub.recv_cb(sckt_data); - } - - connection_handler_destroy(handler); - - nsdynmemlib_stub.returnCounter = 1; - coap_conn_handler_t *handler2 = connection_handler_create(&receive_from_sock_cb, &send_to_sock_cb, &get_passwd_cb, &sec_done_cb); - nsdynmemlib_stub.returnCounter = 2; - if( 0 != coap_connection_handler_open_connection(handler2, 22,false,true,true,false) ) - return false; - - if( socket_api_stub.recv_cb ){ - nsdynmemlib_stub.returnCounter = 1; - socket_api_stub.int8_value = 1; - sckt_data->socket_id = 1; - socket_api_stub.recv_cb(sckt_data); - - nsdynmemlib_stub.returnCounter = 2; - socket_api_stub.int8_value = 1; - sckt_data->socket_id = 1; - socket_api_stub.recv_cb(sckt_data); - - nsdynmemlib_stub.returnCounter = 1; - socket_api_stub.int8_value = 1; - sckt_data->socket_id = 1; - socket_api_stub.recv_cb(sckt_data); - - coap_security_handler_stub.int_value = 4; - nsdynmemlib_stub.returnCounter = 1; - socket_api_stub.int8_value = 1; - sckt_data->socket_id = 1; - socket_api_stub.recv_cb(sckt_data); - - coap_security_handler_stub.int_value = MBEDTLS_ERR_SSL_PEER_CLOSE_NOTIFY; - nsdynmemlib_stub.returnCounter = 1; - socket_api_stub.int8_value = 1; - sckt_data->socket_id = 1; - socket_api_stub.recv_cb(sckt_data); - } - - connection_handler_destroy(handler2); - - free(coap_security_handler_stub.sec_obj); - coap_security_handler_stub.sec_obj = NULL; - - free(sckt_data); - sckt_data = NULL; - return true; -} - -bool test_security_callbacks() -{ - coap_security_handler_stub.counter = -1; - uint8_t buf[16]; - memset(&buf, 1, 16); - - socket_callback_t *sckt_data = (socket_callback_t *)malloc(sizeof(socket_callback_t)); - memset(sckt_data, 0, sizeof(socket_callback_t)); - - coap_security_handler_stub.sec_obj = (coap_security_t *)malloc(sizeof(coap_security_t)); - memset(coap_security_handler_stub.sec_obj, 0, sizeof(coap_security_t)); - - nsdynmemlib_stub.returnCounter = 1; - coap_conn_handler_t *handler = connection_handler_create(&receive_from_sock_cb, &send_to_sock_cb, NULL, NULL); - nsdynmemlib_stub.returnCounter = 2; - if( 0 != coap_connection_handler_open_connection(handler, 22,false,true,true,false) ) - return false; - - if( socket_api_stub.recv_cb ){ - sckt_data->event_type = SOCKET_DATA; - sckt_data->d_len = 1; - nsdynmemlib_stub.returnCounter = 2; - socket_api_stub.int8_value = 1; - sckt_data->socket_id = 0; - socket_api_stub.recv_cb(sckt_data); - } - - if( coap_security_handler_stub.send_cb ){ - coap_security_handler_stub.send_cb(0, buf, 22, &buf, 16); - } - if( coap_security_handler_stub.receive_cb ){ - coap_security_handler_stub.receive_cb(0, &buf, 16); - } - - connection_handler_destroy(handler); - - free(coap_security_handler_stub.sec_obj); - coap_security_handler_stub.sec_obj = NULL; - - free(sckt_data); - sckt_data = NULL; - return true; -} diff --git a/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/coap_connection_handler/test_coap_connection_handler.h b/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/coap_connection_handler/test_coap_connection_handler.h deleted file mode 100644 index f13725af58..0000000000 --- a/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/coap_connection_handler/test_coap_connection_handler.h +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright (c) 2015 ARM Limited. All Rights Reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * 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 TEST_COAP_CONNECTION_HANDLER_H -#define TEST_COAP_CONNECTION_HANDLER_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include - -bool test_connection_handler_create(); - -bool test_connection_handler_destroy(); - -bool test_coap_connection_handler_open_connection(); - -bool test_coap_connection_handler_send_data(); - -bool test_coap_connection_handler_virtual_recv(); - -bool test_coap_connection_handler_socket_belongs_to(); - -bool test_timer_callbacks(); - -bool test_socket_api_callbacks(); - -bool test_security_callbacks(); - -#ifdef __cplusplus -} -#endif - -#endif // TEST_COAP_CONNECTION_HANDLER_H - diff --git a/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/coap_message_handler/coap_message_handlertest.cpp b/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/coap_message_handler/coap_message_handlertest.cpp deleted file mode 100644 index e36d92667d..0000000000 --- a/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/coap_message_handler/coap_message_handlertest.cpp +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright (c) 2015 ARM. All rights reserved. - */ -#include "CppUTest/TestHarness.h" -#include "test_coap_message_handler.h" - -TEST_GROUP(coap_message_handler) -{ - void setup() - { - } - - void teardown() - { - } -}; - -TEST(coap_message_handler, test_coap_message_handler_init) -{ - CHECK(test_coap_message_handler_init()); -} - -TEST(coap_message_handler, test_coap_message_handler_destroy) -{ - CHECK(test_coap_message_handler_destroy()); -} - -TEST(coap_message_handler, test_coap_message_handler_find_transaction) -{ - CHECK(test_coap_message_handler_find_transaction()); -} - -TEST(coap_message_handler, test_coap_message_handler_coap_msg_process) -{ - CHECK(test_coap_message_handler_coap_msg_process()); -} - -TEST(coap_message_handler, test_coap_message_handler_request_send) -{ - CHECK(test_coap_message_handler_request_send()); -} - -TEST(coap_message_handler, test_coap_message_handler_response_send) -{ - CHECK(test_coap_message_handler_response_send()); -} - -TEST(coap_message_handler, test_coap_message_handler_exec) -{ - CHECK(test_coap_message_handler_exec()); -} - diff --git a/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/coap_message_handler/main.cpp b/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/coap_message_handler/main.cpp deleted file mode 100644 index f042e6bdeb..0000000000 --- a/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/coap_message_handler/main.cpp +++ /dev/null @@ -1,15 +0,0 @@ -/* - * Copyright (c) 2015 ARM. All rights reserved. - */ - -#include "CppUTest/CommandLineTestRunner.h" -#include "CppUTest/TestPlugin.h" -#include "CppUTest/TestRegistry.h" -#include "CppUTestExt/MockSupportPlugin.h" -int main(int ac, char** av) -{ - return CommandLineTestRunner::RunAllTests(ac, av); -} - -IMPORT_TEST_GROUP(coap_message_handler); - diff --git a/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/coap_message_handler/test_coap_message_handler.c b/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/coap_message_handler/test_coap_message_handler.c deleted file mode 100644 index bfb3c20cec..0000000000 --- a/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/coap_message_handler/test_coap_message_handler.c +++ /dev/null @@ -1,301 +0,0 @@ -/* - * Copyright (c) 2015 ARM Limited. All Rights Reserved. - */ -#include "test_coap_message_handler.h" -#include -#include "coap_message_handler.h" -#include "sn_coap_protocol_stub.h" -#include "nsdynmemLIB_stub.h" -#include "sn_coap_builder_stub.h" -#include "sn_coap_parser_stub.h" - -int retCounter = 0; -int retValue = 0; - -static void *own_alloc(uint16_t size) -{ - if( retCounter > 0 ){ - retCounter--; - return malloc(size); - } - return NULL; -} - -static void own_free(void *ptr) -{ - if (ptr) { - free(ptr); - } -} - -static uint8_t coap_tx_function(uint8_t *data_ptr, uint16_t data_len, sn_nsdl_addr_s *address_ptr, void *param) -{ - return 0; -} - -int resp_recv(int8_t service_id, uint16_t msg_id, sn_coap_hdr_s *response_ptr){ - return retValue; -} - -int16_t process_cb(int8_t a, sn_coap_hdr_s *b, coap_transaction_t *c) -{ - return retValue; -} - -bool test_coap_message_handler_init() -{ - if( NULL != coap_message_handler_init(NULL, NULL, NULL) ) - return false; - if( NULL != coap_message_handler_init(&own_alloc, NULL, NULL) ) - return false; - if( NULL != coap_message_handler_init(&own_alloc, &own_free, NULL) ) - return false; - if( NULL != coap_message_handler_init(&own_alloc, &own_free, &coap_tx_function) ) - return false; - retCounter = 1; - sn_coap_protocol_stub.expectedCoap = NULL; - if( NULL != coap_message_handler_init(&own_alloc, &own_free, &coap_tx_function) ) - return false; - retCounter = 1; - sn_coap_protocol_stub.expectedCoap = (struct coap_s*)malloc(sizeof(struct coap_s)); - memset(sn_coap_protocol_stub.expectedCoap, 0, sizeof(struct coap_s)); - coap_msg_handler_t *handle = coap_message_handler_init(&own_alloc, &own_free, &coap_tx_function); - if( NULL == handle ) - return false; - free(sn_coap_protocol_stub.expectedCoap); - sn_coap_protocol_stub.expectedCoap = NULL; - free(handle); - return true; -} - -bool test_coap_message_handler_destroy() -{ - if( -1 != coap_message_handler_destroy(NULL) ) - return false; - retCounter = 1; - sn_coap_protocol_stub.expectedCoap = (struct coap_s*)malloc(sizeof(struct coap_s)); - memset(sn_coap_protocol_stub.expectedCoap, 0, sizeof(struct coap_s)); - coap_msg_handler_t *handle = coap_message_handler_init(&own_alloc, &own_free, &coap_tx_function); - - if( 0 != coap_message_handler_destroy(handle) ) - return false; - - free(sn_coap_protocol_stub.expectedCoap); - return true; -} - -bool test_coap_message_handler_find_transaction() -{ - if( NULL != coap_message_handler_find_transaction(NULL, 0)) - return false; - retCounter = 1; - sn_coap_protocol_stub.expectedCoap = (struct coap_s*)malloc(sizeof(struct coap_s)); - memset(sn_coap_protocol_stub.expectedCoap, 0, sizeof(struct coap_s)); - coap_msg_handler_t *handle = coap_message_handler_init(&own_alloc, &own_free, &coap_tx_function); - - uint8_t buf[16]; - memset(&buf, 1, 16); - char uri[3]; - uri[0] = "r"; - uri[1] = "s"; - uri[2] = "\0"; - - sn_coap_builder_stub.expectedUint16 = 1; - nsdynmemlib_stub.returnCounter = 3; - if( 2 != coap_message_handler_request_send(handle, 3, 0, buf, 24, 1, 2, &uri, 4, NULL, 0, &resp_recv)) - return false; - - if( NULL == coap_message_handler_find_transaction(&buf, 24)) - return false; - - free(sn_coap_protocol_stub.expectedCoap); - sn_coap_protocol_stub.expectedCoap = NULL; - coap_message_handler_destroy(handle); - return true; -} - -bool test_coap_message_handler_coap_msg_process() -{ - uint8_t buf[16]; - memset(&buf, 1, 16); - if( -1 != coap_message_handler_coap_msg_process(NULL, 0, buf, 22, NULL, 0, NULL)) - return false; - - retCounter = 1; - sn_coap_protocol_stub.expectedCoap = (struct coap_s*)malloc(sizeof(struct coap_s)); - memset(sn_coap_protocol_stub.expectedCoap, 0, sizeof(struct coap_s)); - coap_msg_handler_t *handle = coap_message_handler_init(&own_alloc, &own_free, &coap_tx_function); - - sn_coap_protocol_stub.expectedHeader = NULL; - if( -1 != coap_message_handler_coap_msg_process(handle, 0, buf, 22, NULL, 0, process_cb)) - return false; - - sn_coap_protocol_stub.expectedHeader = (sn_coap_hdr_s *)malloc(sizeof(sn_coap_hdr_s)); - memset(sn_coap_protocol_stub.expectedHeader, 0, sizeof(sn_coap_hdr_s)); - sn_coap_protocol_stub.expectedHeader->coap_status = 66; - if( -1 != coap_message_handler_coap_msg_process(handle, 0, buf, 22, NULL, 0, process_cb)) - return false; - - sn_coap_protocol_stub.expectedHeader = (sn_coap_hdr_s *)malloc(sizeof(sn_coap_hdr_s)); - memset(sn_coap_protocol_stub.expectedHeader, 0, sizeof(sn_coap_hdr_s)); - sn_coap_protocol_stub.expectedHeader->coap_status = COAP_STATUS_OK; - sn_coap_protocol_stub.expectedHeader->msg_code = 1; - retValue = 0; - if( 0 != coap_message_handler_coap_msg_process(handle, 0, buf, 22, NULL, 0, process_cb)) - return false; - - nsdynmemlib_stub.returnCounter = 1; - retValue = -1; - if( -1 != coap_message_handler_coap_msg_process(handle, 0, buf, 22, NULL, 0, process_cb)) - return false; - - sn_coap_protocol_stub.expectedHeader = (sn_coap_hdr_s *)malloc(sizeof(sn_coap_hdr_s)); - memset(sn_coap_protocol_stub.expectedHeader, 0, sizeof(sn_coap_hdr_s)); - sn_coap_protocol_stub.expectedHeader->coap_status = COAP_STATUS_OK; - sn_coap_protocol_stub.expectedHeader->msg_code = 333; - - if( -1 != coap_message_handler_coap_msg_process(handle, 0, buf, 22, NULL, 0, process_cb)) - return false; - - sn_coap_protocol_stub.expectedHeader = (sn_coap_hdr_s *)malloc(sizeof(sn_coap_hdr_s)); - memset(sn_coap_protocol_stub.expectedHeader, 0, sizeof(sn_coap_hdr_s)); - sn_coap_protocol_stub.expectedHeader->coap_status = COAP_STATUS_OK; - sn_coap_protocol_stub.expectedHeader->msg_code = 333; - - char uri[3]; - uri[0] = "r"; - uri[1] = "s"; - uri[2] = "\0"; - - sn_coap_builder_stub.expectedUint16 = 1; - nsdynmemlib_stub.returnCounter = 3; - if( 2 != coap_message_handler_request_send(handle, 3, 0, buf, 24, 1, 2, &uri, 4, NULL, 0, &resp_recv)) - return false; - - sn_coap_protocol_stub.expectedHeader->msg_id = 2; -// sn_coap_protocol_stub.expectedHeader->token_ptr = (uint8_t*)malloc(4); -// memset(sn_coap_protocol_stub.expectedHeader->token_ptr, 1, 4); - if( -1 != coap_message_handler_coap_msg_process(handle, 0, buf, 22, NULL, 0, process_cb)) - return false; - -// free(sn_coap_protocol_stub.expectedHeader->token_ptr); - - free(sn_coap_protocol_stub.expectedCoap); - sn_coap_protocol_stub.expectedCoap = NULL; - coap_message_handler_destroy(handle); - return true; -} - -bool test_coap_message_handler_request_send() -{ - retCounter = 1; - sn_coap_protocol_stub.expectedCoap = (struct coap_s*)malloc(sizeof(struct coap_s)); - memset(sn_coap_protocol_stub.expectedCoap, 0, sizeof(struct coap_s)); - coap_msg_handler_t *handle = coap_message_handler_init(&own_alloc, &own_free, &coap_tx_function); - - uint8_t buf[16]; - memset(&buf, 1, 16); - char uri[3]; - uri[0] = "r"; - uri[1] = "s"; - uri[2] = "\0"; - if( 0 != coap_message_handler_request_send(handle, 3, 0, buf, 24, 1, 2, &uri, 4, NULL, 0, NULL)) - return false; - - sn_coap_builder_stub.expectedUint16 = 1; - nsdynmemlib_stub.returnCounter = 1; - if( 0 != coap_message_handler_request_send(handle, 3, 0, buf, 24, 1, 2, &uri, 4, NULL, 0, NULL)) - return false; - - sn_coap_builder_stub.expectedUint16 = 1; - nsdynmemlib_stub.returnCounter = 3; - if( 0 != coap_message_handler_request_send(handle, 3, 0, buf, 24, 1, 2, &uri, 4, NULL, 0, NULL)) - return false; - - sn_coap_builder_stub.expectedUint16 = 1; - nsdynmemlib_stub.returnCounter = 3; - if( 0 != coap_message_handler_request_send(handle, 3, 0, buf, 24, 1, 2, &uri, 4, NULL, 0, NULL)) - return false; - - sn_coap_builder_stub.expectedUint16 = 1; - nsdynmemlib_stub.returnCounter = 3; - if( 2 != coap_message_handler_request_send(handle, 3, 0, buf, 24, 1, 2, &uri, 4, NULL, 0, &resp_recv)) - return false; - - free(sn_coap_protocol_stub.expectedCoap); - sn_coap_protocol_stub.expectedCoap = NULL; - coap_message_handler_destroy(handle); - return true; -} - -bool test_coap_message_handler_response_send() -{ - if( -1 != coap_message_handler_response_send(NULL, 2, 0, NULL, 1,3,NULL, 0)) - return false; - - retCounter = 1; - sn_coap_protocol_stub.expectedCoap = (struct coap_s*)malloc(sizeof(struct coap_s)); - memset(sn_coap_protocol_stub.expectedCoap, 0, sizeof(struct coap_s)); - coap_msg_handler_t *handle = coap_message_handler_init(&own_alloc, &own_free, &coap_tx_function); - sn_coap_hdr_s *header = (sn_coap_hdr_s *)malloc(sizeof(sn_coap_hdr_s)); - memset(header, 0, sizeof(sn_coap_hdr_s)); - - if( -2 != coap_message_handler_response_send(handle, 2, 0, header, 1,3,NULL, 0)) - return false; - - uint8_t buf[16]; - memset(&buf, 1, 16); - char uri[3]; - uri[0] = "r"; - uri[1] = "s"; - uri[2] = "\0"; - sn_coap_builder_stub.expectedUint16 = 1; - nsdynmemlib_stub.returnCounter = 3; - if( 2 != coap_message_handler_request_send(handle, 3, 0, buf, 24, 1, 2, &uri, 4, NULL, 0, &resp_recv)) - return false; - - header->msg_id = 2; - sn_coap_builder_stub.expectedUint16 = 2; - coap_transaction_t * tx = coap_message_handler_find_transaction(&buf, 24); - if( tx ){ - tx->client_request = false; - } - sn_coap_builder_stub.expectedHeader = NULL; - if( -1 != coap_message_handler_response_send(handle, 2, 0, header, 1,3,NULL, 0)) - return false; - - sn_coap_builder_stub.expectedHeader = (sn_coap_hdr_s *)malloc(sizeof(sn_coap_hdr_s)); - memset(sn_coap_builder_stub.expectedHeader, 0, sizeof(sn_coap_hdr_s)); - nsdynmemlib_stub.returnCounter = 0; - if( -1 != coap_message_handler_response_send(handle, 2, 0, header, 1,3,NULL, 0)) - return false; - - sn_coap_builder_stub.expectedHeader = (sn_coap_hdr_s *)malloc(sizeof(sn_coap_hdr_s)); - memset(sn_coap_builder_stub.expectedHeader, 0, sizeof(sn_coap_hdr_s)); - nsdynmemlib_stub.returnCounter = 1; - if( 0 != coap_message_handler_response_send(handle, 2, 0, header, 1,3,NULL, 0)) - return false; - -// free(header); - free(sn_coap_protocol_stub.expectedCoap); - sn_coap_protocol_stub.expectedCoap = NULL; - coap_message_handler_destroy(handle); - return true; -} - -bool test_coap_message_handler_exec() -{ - if( -1 != coap_message_handler_exec(NULL, 0)) - return false; - retCounter = 1; - sn_coap_protocol_stub.expectedCoap = (struct coap_s*)malloc(sizeof(struct coap_s)); - memset(sn_coap_protocol_stub.expectedCoap, 0, sizeof(struct coap_s)); - coap_msg_handler_t *handle = coap_message_handler_init(&own_alloc, &own_free, &coap_tx_function); - if( 0 != coap_message_handler_exec(handle, 0)) - return false; - - free(sn_coap_protocol_stub.expectedCoap); - sn_coap_protocol_stub.expectedCoap = NULL; - coap_message_handler_destroy(handle); - return true; -} diff --git a/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/coap_message_handler/test_coap_message_handler.h b/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/coap_message_handler/test_coap_message_handler.h deleted file mode 100644 index 93a18f1ccd..0000000000 --- a/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/coap_message_handler/test_coap_message_handler.h +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright (c) 2015 ARM Limited. All Rights Reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * 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 TEST_COAP_MESSAGE_HANDLER_H -#define TEST_COAP_MESSAGE_HANDLER_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include - -bool test_coap_message_handler_init(); -bool test_coap_message_handler_destroy(); -bool test_coap_message_handler_find_transaction(); -bool test_coap_message_handler_coap_msg_process(); -bool test_coap_message_handler_request_send(); -bool test_coap_message_handler_response_send(); -bool test_coap_message_handler_exec(); - -#ifdef __cplusplus -} -#endif - -#endif // TEST_COAP_MESSAGE_HANDLER_H - diff --git a/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/coap_security_handler/coap_security_handlertest.cpp b/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/coap_security_handler/coap_security_handlertest.cpp deleted file mode 100644 index a649a0fb96..0000000000 --- a/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/coap_security_handler/coap_security_handlertest.cpp +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright (c) 2015 ARM. All rights reserved. - */ -#include "CppUTest/TestHarness.h" -#include "test_coap_security_handler.h" -#include "mbedtls_stub.h" -#include "nsdynmemLIB_stub.h" - -TEST_GROUP(coap_security_handler) -{ - void setup() - { - nsdynmemlib_stub.returnCounter = 0; - mbedtls_stub.useCounter = false; - } - - void teardown() - { - } -}; - -TEST(coap_security_handler, test_thread_security_create) -{ - CHECK(test_thread_security_create()); -} - -TEST(coap_security_handler, test_thread_security_destroy) -{ - CHECK(test_thread_security_destroy()); -} - -TEST(coap_security_handler, test_coap_security_handler_connect) -{ - CHECK(test_coap_security_handler_connect()); -} - -TEST(coap_security_handler, test_coap_security_handler_continue_connecting) -{ - CHECK(test_coap_security_handler_continue_connecting()); -} - -TEST(coap_security_handler, test_coap_security_handler_send_message) -{ - CHECK(test_coap_security_handler_send_message()); -} - -TEST(coap_security_handler, test_thread_security_send_close_alert) -{ - CHECK(test_thread_security_send_close_alert()); -} - -TEST(coap_security_handler, test_coap_security_handler_read) -{ - CHECK(test_coap_security_handler_read()); -} diff --git a/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/coap_security_handler/main.cpp b/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/coap_security_handler/main.cpp deleted file mode 100644 index e657503fd1..0000000000 --- a/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/coap_security_handler/main.cpp +++ /dev/null @@ -1,15 +0,0 @@ -/* - * Copyright (c) 2015 ARM. All rights reserved. - */ - -#include "CppUTest/CommandLineTestRunner.h" -#include "CppUTest/TestPlugin.h" -#include "CppUTest/TestRegistry.h" -#include "CppUTestExt/MockSupportPlugin.h" -int main(int ac, char** av) -{ - return CommandLineTestRunner::RunAllTests(ac, av); -} - -IMPORT_TEST_GROUP(coap_security_handler); - diff --git a/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/coap_security_handler/test_coap_security_handler.c b/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/coap_security_handler/test_coap_security_handler.c deleted file mode 100644 index 6585a9ed4c..0000000000 --- a/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/coap_security_handler/test_coap_security_handler.c +++ /dev/null @@ -1,286 +0,0 @@ -/* - * Copyright (c) 2015-2016 ARM Limited. All Rights Reserved. - */ -#include "test_coap_security_handler.h" -#include "coap_security_handler.h" -#include -#include "nsdynmemLIB_stub.h" -#include "mbedtls_stub.h" -#include "mbedtls/ssl.h" - -static int send_to_socket(int8_t socket_id, uint8_t *address_ptr, uint16_t port, const unsigned char *buf, size_t len) -{ - -} - -static int receive_from_socket(int8_t socket_id, unsigned char *buf, size_t len) -{ - -} - -static void start_timer_callback(int8_t timer_id, uint32_t int_ms, uint32_t fin_ms) -{ - -} - -static int timer_status_callback(int8_t timer_id) -{ - -} - -bool test_thread_security_create() -{ - uint8_t buf[16]; - if( NULL != coap_security_create(1,2,&buf,12,ECJPAKE,&send_to_socket, &receive_from_socket, &start_timer_callback, NULL) ) - return false; - - if( NULL != coap_security_create(1,2,&buf,12,ECJPAKE,&send_to_socket, &receive_from_socket, &start_timer_callback, &timer_status_callback) ) - return false; - - nsdynmemlib_stub.returnCounter = 1; - mbedtls_stub.expected_int = -1; - if( NULL != coap_security_create(1,2,&buf,12,ECJPAKE,&send_to_socket, &receive_from_socket, &start_timer_callback, &timer_status_callback) ) - return false; - - mbedtls_stub.expected_int = 0; - nsdynmemlib_stub.returnCounter = 2; - mbedtls_stub.crt_expected_int = -1; - if( NULL != coap_security_create(1,2,&buf,12,ECJPAKE,&send_to_socket, &receive_from_socket, &start_timer_callback, &timer_status_callback) ) - return false; - - nsdynmemlib_stub.returnCounter = 2; - mbedtls_stub.crt_expected_int = 0; - coap_security_t *handle = coap_security_create(1,2,&buf,12,ECJPAKE,&send_to_socket, &receive_from_socket, &start_timer_callback, &timer_status_callback); - if( NULL == handle ) - return false; - - coap_security_destroy(handle); - - return true; -} - -bool test_thread_security_destroy() -{ - uint8_t buf[16]; - nsdynmemlib_stub.returnCounter = 2; - mbedtls_stub.crt_expected_int = 0; - coap_security_t *handle = coap_security_create(1,2,&buf,12,ECJPAKE,&send_to_socket, &receive_from_socket, &start_timer_callback, &timer_status_callback); - if( NULL == handle ) - return false; - - coap_security_destroy(handle); - return true; -} - -bool test_coap_security_handler_connect() -{ - uint8_t buf[16]; - nsdynmemlib_stub.returnCounter = 2; - mbedtls_stub.crt_expected_int = 0; - coap_security_t *handle = coap_security_create(1,2,&buf,12,ECJPAKE,&send_to_socket, &receive_from_socket, &start_timer_callback, &timer_status_callback); - if( NULL == handle ) - return false; - - unsigned char pw = "pwd"; - coap_security_keys_t keys; - keys._priv = &pw; - keys._priv_len = 3; - if( -1 != coap_security_handler_connect_non_blocking(NULL, true, DTLS, keys, 0, 1) ) - return false; - mbedtls_stub.useCounter = true; - mbedtls_stub.counter = 0; - mbedtls_stub.retArray[0] = -1; - mbedtls_stub.retArray[1] = -1; - mbedtls_stub.retArray[2] = -1; - mbedtls_stub.retArray[3] = -1; - mbedtls_stub.retArray[4] = -1; - mbedtls_stub.retArray[5] = MBEDTLS_ERR_SSL_HELLO_VERIFY_REQUIRED; - mbedtls_stub.retArray[6] = -1; - mbedtls_stub.retArray[7] = -1; - - if( -1 != coap_security_handler_connect_non_blocking(handle, true, DTLS, keys, 0, 1) ) - return false; - - mbedtls_stub.counter = 0; - mbedtls_stub.retArray[0] = 0; - if( -1 != coap_security_handler_connect_non_blocking(handle, true, DTLS, keys, 0, 1) ) - return false; - - mbedtls_stub.counter = 0; -// mbedtls_stub.retArray[0] = 0; - mbedtls_stub.retArray[1] = 0; - if( -1 != coap_security_handler_connect_non_blocking(handle, true, DTLS, keys, 0, 1) ) - return false; - - simple_cookie_t c; - memset(&c, 0, sizeof(simple_cookie_t)); - mbedtls_stub.cookie_obj = &c; - memset(&mbedtls_stub.cookie_value, 1, 8); - mbedtls_stub.cookie_len = 2; - mbedtls_stub.counter = 0; -// mbedtls_stub.retArray[0] = 0; -// mbedtls_stub.retArray[1] = 0; - mbedtls_stub.retArray[2] = 0; - if( -1 != coap_security_handler_connect_non_blocking(handle, true, DTLS, keys, 0, 1) ) - return false; - - c.len = 8; - memset(&c.value, 1, 8); - mbedtls_stub.cookie_obj = &c; - memset(&mbedtls_stub.cookie_value, 1, 8); - - mbedtls_stub.cookie_len = 8; - mbedtls_stub.counter = 0; -// mbedtls_stub.retArray[0] = 0; -// mbedtls_stub.retArray[1] = 0; -// mbedtls_stub.retArray[2] = 0; - mbedtls_stub.retArray[3] = 0; - if( -1 != coap_security_handler_connect_non_blocking(handle, true, DTLS, keys, 0, 1) ) - return false; - - mbedtls_stub.counter = 0; -// mbedtls_stub.retArray[0] = 0; -// mbedtls_stub.retArray[1] = 0; -// mbedtls_stub.retArray[2] = 0; -// mbedtls_stub.retArray[3] = 0; - mbedtls_stub.retArray[4] = 0; - if( -1 != coap_security_handler_connect_non_blocking(handle, true, DTLS, keys, 0, 1) ) - return false; - - mbedtls_stub.counter = 0; -// mbedtls_stub.retArray[0] = 0; -// mbedtls_stub.retArray[1] = 0; -// mbedtls_stub.retArray[2] = 0; -// mbedtls_stub.retArray[3] = 0; -// mbedtls_stub.retArray[4] = 0; - mbedtls_stub.retArray[6] = 0; - mbedtls_stub.retArray[7] = 0; - if( 1 != coap_security_handler_connect_non_blocking(handle, true, DTLS, keys, 0, 1) ) - return false; - - mbedtls_stub.counter = 0; - mbedtls_stub.retArray[5] = MBEDTLS_ERR_SSL_BAD_HS_FINISHED; - - if( -1 != coap_security_handler_connect_non_blocking(handle, true, DTLS, keys, 0, 1) ) - return false; - - mbedtls_stub.counter = 0; - mbedtls_stub.retArray[5] = HANDSHAKE_FINISHED_VALUE; - - if( 1 != coap_security_handler_connect_non_blocking(handle, true, DTLS, keys, 0, 1) ) - return false; - - coap_security_destroy(handle); - return true; -} - -bool test_coap_security_handler_continue_connecting() -{ - uint8_t buf[16]; - nsdynmemlib_stub.returnCounter = 2; - mbedtls_stub.crt_expected_int = 0; - coap_security_t *handle = coap_security_create(1,2,&buf,12,ECJPAKE,&send_to_socket, &receive_from_socket, &start_timer_callback, &timer_status_callback); - if( NULL == handle ) - return false; - - mbedtls_stub.useCounter = true; - mbedtls_stub.counter = 0; - mbedtls_stub.retArray[0] = MBEDTLS_ERR_SSL_HELLO_VERIFY_REQUIRED; - mbedtls_stub.retArray[1] = -1; - mbedtls_stub.retArray[2] = -1; - - if( -1 != coap_security_handler_continue_connecting(handle) ) - return false; - - mbedtls_stub.counter = 0; - mbedtls_stub.retArray[0] = MBEDTLS_ERR_SSL_HELLO_VERIFY_REQUIRED; - mbedtls_stub.retArray[1] = 0; - mbedtls_stub.retArray[2] = 0; - - if( 1 != coap_security_handler_continue_connecting(handle) ) - return false; - - mbedtls_stub.counter = 0; - mbedtls_stub.retArray[0] = MBEDTLS_ERR_SSL_BAD_HS_FINISHED; - - if( MBEDTLS_ERR_SSL_BAD_HS_FINISHED != coap_security_handler_continue_connecting(handle) ) - return false; - - mbedtls_stub.counter = 0; - mbedtls_stub.retArray[0] = MBEDTLS_ERR_SSL_WANT_READ; - - if( 1 != coap_security_handler_continue_connecting(handle) ) - return false; - - mbedtls_stub.counter = 0; - mbedtls_stub.retArray[0] = HANDSHAKE_FINISHED_VALUE_RETURN_ZERO; - - if( 0 != coap_security_handler_continue_connecting(handle) ) - return false; - - coap_security_destroy(handle); - return true; -} - -bool test_coap_security_handler_send_message() -{ - uint8_t buf[16]; - nsdynmemlib_stub.returnCounter = 2; - mbedtls_stub.crt_expected_int = 0; - coap_security_t *handle = coap_security_create(1,2,&buf,12,ECJPAKE,&send_to_socket, &receive_from_socket, &start_timer_callback, &timer_status_callback); - if( NULL == handle ) - return false; - - if( -1 != coap_security_handler_send_message(NULL, NULL, 0)) - return false; - - mbedtls_stub.expected_int = 6; - unsigned char cbuf[6]; - if( 6 != coap_security_handler_send_message(handle, &cbuf, 6)) - return false; - - coap_security_destroy(handle); - return true; -} - -bool test_thread_security_send_close_alert() -{ - uint8_t buf[16]; - nsdynmemlib_stub.returnCounter = 2; - mbedtls_stub.crt_expected_int = 0; - coap_security_t *handle = coap_security_create(1,2,&buf,12,ECJPAKE,&send_to_socket, &receive_from_socket, &start_timer_callback, &timer_status_callback); - if( NULL == handle ) - return false; - - if( -1 != coap_security_send_close_alert(NULL)) - return false; - - mbedtls_stub.expected_int = 0; - if( 0 != coap_security_send_close_alert(handle)) - return false; - - coap_security_destroy(handle); - return true; -} - -bool test_coap_security_handler_read() -{ - uint8_t buf[16]; - nsdynmemlib_stub.returnCounter = 2; - mbedtls_stub.crt_expected_int = 0; - coap_security_t *handle = coap_security_create(1,2,&buf,12,ECJPAKE,&send_to_socket, &receive_from_socket, &start_timer_callback, &timer_status_callback); - if( NULL == handle ) - return false; - - if( -1 != coap_security_handler_read(NULL, NULL, 0)) - return false; - - mbedtls_stub.expected_int = 6; - unsigned char cbuf[6]; - if( 6 != coap_security_handler_read(handle, &cbuf, 6)) - return false; - - coap_security_destroy(handle); - return true; -} - diff --git a/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/coap_security_handler/test_coap_security_handler.h b/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/coap_security_handler/test_coap_security_handler.h deleted file mode 100644 index 1b06bed343..0000000000 --- a/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/coap_security_handler/test_coap_security_handler.h +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (c) 2015 ARM Limited. All Rights Reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * 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 TEST_COAP_SECURITY_HANDLER_H -#define TEST_COAP_SECURITY_HANDLER_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include -#include - -bool test_thread_security_create(); - -bool test_thread_security_destroy(); - -bool test_coap_security_handler_connect(); - -bool test_coap_security_handler_continue_connecting(); - -bool test_coap_security_handler_send_message(); - -bool test_thread_security_send_close_alert(); - -bool test_coap_security_handler_read(); - -#ifdef __cplusplus -} -#endif - -#endif // TEST_COAP_SECURITY_HANDLER_H - diff --git a/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/coap_service_api/coap_service_apitest.cpp b/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/coap_service_api/coap_service_apitest.cpp deleted file mode 100644 index 9054de6313..0000000000 --- a/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/coap_service_api/coap_service_apitest.cpp +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright (c) 2015 ARM. All rights reserved. - */ -#include "CppUTest/TestHarness.h" -#include "test_coap_service_api.h" - -TEST_GROUP(coap_service_api) -{ - void setup() - { - } - - void teardown() - { - } -}; - -TEST(coap_service_api, test_coap_service_initialize) -{ - CHECK(test_coap_service_initialize()); -} - -TEST(coap_service_api, test_coap_service_delete) -{ - CHECK(test_coap_service_delete()); -} - -TEST(coap_service_api, test_coap_service_virtual_socket_recv) -{ - CHECK(test_coap_service_virtual_socket_recv()); -} - -TEST(coap_service_api, test_coap_service_virtual_socket_set_cb) -{ - CHECK(test_coap_service_virtual_socket_set_cb()); -} - -TEST(coap_service_api, test_coap_service_register_uri) -{ - CHECK(test_coap_service_register_uri()); -} - -TEST(coap_service_api, test_coap_service_unregister_uri) -{ - CHECK(test_coap_service_unregister_uri()); -} - -TEST(coap_service_api, test_coap_service_request_send) -{ - CHECK(test_coap_service_request_send()); -} - -TEST(coap_service_api, test_coap_service_response_send) -{ - CHECK(test_coap_service_response_send()); -} - -TEST(coap_service_api, test_coap_callbacks) -{ - CHECK(test_coap_callbacks()); -} - -TEST(coap_service_api, test_eventOS_callbacks) -{ - CHECK(test_eventOS_callbacks()); -} - -TEST(coap_service_api, test_conn_handler_callbacks) -{ - CHECK(test_conn_handler_callbacks()); -} - diff --git a/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/coap_service_api/main.cpp b/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/coap_service_api/main.cpp deleted file mode 100644 index e050cec95f..0000000000 --- a/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/coap_service_api/main.cpp +++ /dev/null @@ -1,15 +0,0 @@ -/* - * Copyright (c) 2015 ARM. All rights reserved. - */ - -#include "CppUTest/CommandLineTestRunner.h" -#include "CppUTest/TestPlugin.h" -#include "CppUTest/TestRegistry.h" -#include "CppUTestExt/MockSupportPlugin.h" -int main(int ac, char** av) -{ - return CommandLineTestRunner::RunAllTests(ac, av); -} - -IMPORT_TEST_GROUP(coap_service_api); - diff --git a/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/coap_service_api/test_coap_service_api.c b/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/coap_service_api/test_coap_service_api.c deleted file mode 100644 index 5cc5f380d2..0000000000 --- a/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/coap_service_api/test_coap_service_api.c +++ /dev/null @@ -1,418 +0,0 @@ -/* - * Copyright (c) 2015 ARM Limited. All Rights Reserved. - */ -#include "test_coap_service_api.h" -#include -#include "coap_service_api.h" -#include "nsdynmemLIB_stub.h" -#include "coap_connection_handler_stub.h" -#include "coap_message_handler_stub.h" -#include "eventOS_event_stub.h" -#include "eventOS_event.h" -#include "net_interface.h" - -int sec_done_cb(int8_t service_id, uint8_t address[static 16], uint8_t keyblock[static 40]){ - return 2; -} - -int sec_start_cb(int8_t service_id, uint8_t address[static 16], uint16_t port, uint8_t* pw, uint8_t *pw_len) -{ - return 2; -} - -int request_recv_cb(int8_t service_id, uint8_t source_address[static 16], uint16_t source_port, sn_coap_hdr_s *request_ptr) -{ - return 2; -} - -int virtual_sock_send_cb(int8_t service_id, uint8_t destination_addr_ptr[static 16], uint16_t port, const uint8_t *data_ptr, uint16_t data_len) -{ - return 2; -} - -bool test_coap_service_initialize() -{ - if( -1 != coap_service_initialize(1, 2, 0, NULL, NULL )) - return false; - - - nsdynmemlib_stub.returnCounter = 1; - thread_conn_handler_stub.handler_obj = NULL; - if( -1 != coap_service_initialize(1, 2, 0, NULL, NULL )) - return false; - - thread_conn_handler_stub.handler_obj = (coap_conn_handler_t*)malloc(sizeof(coap_conn_handler_t)); - memset(thread_conn_handler_stub.handler_obj, 0, sizeof(coap_conn_handler_t)); - coap_message_handler_stub.coap_ptr = NULL; - - nsdynmemlib_stub.returnCounter = 1; - thread_conn_handler_stub.int_value = -1; - if( -1 != coap_service_initialize(1, 2, 0, NULL, NULL )) - return false; - - thread_conn_handler_stub.handler_obj = (coap_conn_handler_t*)malloc(sizeof(coap_conn_handler_t)); - memset(thread_conn_handler_stub.handler_obj, 0, sizeof(coap_conn_handler_t)); - nsdynmemlib_stub.returnCounter = 1; - thread_conn_handler_stub.int_value = 0; - - if( 1 != coap_service_initialize(1, 2, 0, NULL, NULL )) - return false; - - nsdynmemlib_stub.returnCounter = 1; - if( 2 != coap_service_initialize(3, 4, 0, NULL, NULL )) - return false; - - coap_service_delete(2); - coap_service_delete(1); - - free( thread_conn_handler_stub.handler_obj ); - thread_conn_handler_stub.handler_obj = NULL; - return true; -} - -bool test_coap_service_delete() -{ - coap_service_delete(1); - - thread_conn_handler_stub.handler_obj = (coap_conn_handler_t*)malloc(sizeof(coap_conn_handler_t)); - memset(thread_conn_handler_stub.handler_obj, 0, sizeof(coap_conn_handler_t)); - nsdynmemlib_stub.returnCounter = 1; - coap_message_handler_stub.coap_ptr = NULL; - - if( 1 != coap_service_initialize(1, 2, 0, NULL, NULL )) - return false; - - coap_service_delete(1); - - free( thread_conn_handler_stub.handler_obj ); - thread_conn_handler_stub.handler_obj = NULL; - - return true; -} - -bool test_coap_service_virtual_socket_recv() -{ - uint8_t buf[16]; - if( -1 != coap_service_virtual_socket_recv(1, &buf, 10, NULL, 0) ) - return false; - - thread_conn_handler_stub.handler_obj = (coap_conn_handler_t*)malloc(sizeof(coap_conn_handler_t)); - memset(thread_conn_handler_stub.handler_obj, 0, sizeof(coap_conn_handler_t)); - nsdynmemlib_stub.returnCounter = 1; - coap_message_handler_stub.coap_ptr = NULL; - - if( 1 != coap_service_initialize(1, 2, 0, NULL, NULL )) - return false; - - thread_conn_handler_stub.int_value = 5; - if( 5 != coap_service_virtual_socket_recv(1, &buf, 10, NULL, 0) ) - return false; - - coap_service_delete(1); - - free( thread_conn_handler_stub.handler_obj ); - thread_conn_handler_stub.handler_obj = NULL; - - thread_conn_handler_stub.int_value = 0; - - return true; -} - -bool test_coap_service_virtual_socket_set_cb() -{ - if( -1 != coap_service_virtual_socket_set_cb(1, NULL) ) - return false; - - thread_conn_handler_stub.handler_obj = (coap_conn_handler_t*)malloc(sizeof(coap_conn_handler_t)); - memset(thread_conn_handler_stub.handler_obj, 0, sizeof(coap_conn_handler_t)); - nsdynmemlib_stub.returnCounter = 1; - coap_message_handler_stub.coap_ptr = NULL; - - if( 1 != coap_service_initialize(1, 2, 0, NULL, NULL )) - return false; - - if( 0 != coap_service_virtual_socket_set_cb(1, NULL) ) - return false; - - coap_service_delete(1); - - free( thread_conn_handler_stub.handler_obj ); - thread_conn_handler_stub.handler_obj = NULL; - - return true; -} - -bool test_coap_service_register_uri() -{ - if( -1 != coap_service_register_uri(1, "as", 1, &request_recv_cb)) - return false; - - thread_conn_handler_stub.handler_obj = (coap_conn_handler_t*)malloc(sizeof(coap_conn_handler_t)); - memset(thread_conn_handler_stub.handler_obj, 0, sizeof(coap_conn_handler_t)); - nsdynmemlib_stub.returnCounter = 1; - coap_message_handler_stub.coap_ptr = NULL; - - if( 1 != coap_service_initialize(1, 2, 0, NULL, NULL )) - return false; - - if( -2 != coap_service_register_uri(1, "as", 1, &request_recv_cb) ) - return false; - - nsdynmemlib_stub.returnCounter = 1; - if( -2 != coap_service_register_uri(1, "as", 1, &request_recv_cb) ) - return false; - - nsdynmemlib_stub.returnCounter = 2; - if( 0 != coap_service_register_uri(1, "as", 1, &request_recv_cb) ) - return false; - - coap_service_delete(1); - - free( thread_conn_handler_stub.handler_obj ); - thread_conn_handler_stub.handler_obj = NULL; - - return true; -} - -bool test_coap_service_unregister_uri() -{ - if( -1 != coap_service_unregister_uri(1, "as")) - return false; - - thread_conn_handler_stub.handler_obj = (coap_conn_handler_t*)malloc(sizeof(coap_conn_handler_t)); - memset(thread_conn_handler_stub.handler_obj, 0, sizeof(coap_conn_handler_t)); - nsdynmemlib_stub.returnCounter = 1; - coap_message_handler_stub.coap_ptr = NULL; - thread_conn_handler_stub.int_value = 0; - - if( 1 != coap_service_initialize(1, 2, 0, NULL, NULL )) - return false; - - nsdynmemlib_stub.returnCounter = 2; - if( 0 != coap_service_register_uri(1, "as", 1, &request_recv_cb) ) - return false; - - if( -2 != coap_service_unregister_uri(1, "ts") ) - return false; - - if( 0 != coap_service_unregister_uri(1, "as") ) - return false; - - coap_service_delete(1); - - free( thread_conn_handler_stub.handler_obj ); - thread_conn_handler_stub.handler_obj = NULL; - - return true; -} - -bool test_coap_service_request_send() -{ - uint8_t buf[16]; - coap_message_handler_stub.uint16_value = 6; - if( 6 != coap_service_request_send(0,0,&buf,0,0,0,NULL, 0,NULL,0,NULL)) - return false; - return true; -} - -bool test_coap_service_response_send() -{ - uint8_t buf[16]; - coap_message_handler_stub.int8_value = 6; - if( 6 != coap_service_response_send(0,0,NULL, 65, 0,NULL, 0)) - return false; - return true; -} - -bool test_coap_callbacks() -{ - thread_conn_handler_stub.handler_obj = (coap_conn_handler_t*)malloc(sizeof(coap_conn_handler_t)); - memset(thread_conn_handler_stub.handler_obj, 0, sizeof(coap_conn_handler_t)); - nsdynmemlib_stub.returnCounter = 1; - coap_message_handler_stub.coap_ptr = (coap_msg_handler_t *)malloc(sizeof(coap_msg_handler_t)); - memset(coap_message_handler_stub.coap_ptr, 0, sizeof(coap_msg_handler_t)); - - if( 1 != coap_service_initialize(1, 2, 0, NULL, NULL )) - return false; - - if( 0 != coap_message_handler_stub.coap_ptr->sn_coap_service_malloc(0)) - return false; - - nsdynmemlib_stub.returnCounter = 1; - void *handle = coap_message_handler_stub.coap_ptr->sn_coap_service_malloc(5); - if( 0 == handle ) - return false; - - coap_message_handler_stub.coap_ptr->sn_coap_service_free(handle); - - //coap_tx_function - uint8_t data[14]; - memset(&data, 3, 14); - sn_nsdl_addr_s addr; - addr.addr_len = 2; - addr.port = 4; - addr.addr_ptr = &data; - if( 255 != coap_message_handler_stub.coap_ptr->sn_coap_tx_callback(NULL, 0, &addr, NULL)) - return false; - - coap_transaction_t *tr = (coap_transaction_t *)malloc(sizeof(coap_transaction_t)); - memset(tr, 0, sizeof(coap_transaction_t)); - - if( 255 != coap_message_handler_stub.coap_ptr->sn_coap_tx_callback(&data, 0, &addr, tr)) - return false; - - tr->service_id = 1; - thread_conn_handler_stub.int_value = -2; - if( 255 != coap_message_handler_stub.coap_ptr->sn_coap_tx_callback(&data, 0, &addr, tr)) - return false; - - nsdynmemlib_stub.returnCounter = 1; - if( 255 != coap_message_handler_stub.coap_ptr->sn_coap_tx_callback(&data, 2, &addr, tr)) - return false; - - free(tr->data_ptr); - free(tr); - - coap_service_delete(1); - - free( coap_message_handler_stub.coap_ptr ); - coap_message_handler_stub.coap_ptr = NULL; - - free( thread_conn_handler_stub.handler_obj ); - thread_conn_handler_stub.handler_obj = NULL; - - return true; -} - -#define COAP_TICK_TIMER 0xf1 //MUST BE SAME AS IN coap_service_api.c -bool test_eventOS_callbacks() -{ - thread_conn_handler_stub.handler_obj = (coap_conn_handler_t*)malloc(sizeof(coap_conn_handler_t)); - memset(thread_conn_handler_stub.handler_obj, 0, sizeof(coap_conn_handler_t)); - nsdynmemlib_stub.returnCounter = 1; - if( 1 != coap_service_initialize(1, 2, 0, NULL, NULL )) - return false; - - if( eventOs_event_stub.event_ptr ){ - arm_event_s event; - event.event_type = ARM_LIB_TASKLET_INIT_EVENT; - eventOs_event_stub.event_ptr(&event); - - event.event_type = ARM_LIB_SYSTEM_TIMER_EVENT; - event.event_id = COAP_TICK_TIMER; - eventOs_event_stub.event_ptr(&event); - } - - coap_service_delete(1); - free( thread_conn_handler_stub.handler_obj ); - thread_conn_handler_stub.handler_obj = NULL; - return true; -} - -bool test_conn_handler_callbacks() -{ - uint8_t buf[16]; - thread_conn_handler_stub.handler_obj = (coap_conn_handler_t*)malloc(sizeof(coap_conn_handler_t)); - memset(thread_conn_handler_stub.handler_obj, 0, sizeof(coap_conn_handler_t)); - nsdynmemlib_stub.returnCounter = 1; - if( 1 != coap_service_initialize(1, 2, COAP_SERVICE_OPTIONS_SECURE_BYPASS, &sec_start_cb, &sec_done_cb )) - return false; - - if( thread_conn_handler_stub.send_to_sock_cb ){ - thread_conn_handler_stub.bool_value = true; - coap_service_virtual_socket_set_cb(1, &virtual_sock_send_cb); - if( 2 != thread_conn_handler_stub.send_to_sock_cb(1, buf, 12, NULL, 0)) - return false; - thread_conn_handler_stub.bool_value = false; - if( -1 != thread_conn_handler_stub.send_to_sock_cb(1, buf, 12, NULL, 0)) - return false; - } - - if( thread_conn_handler_stub.receive_from_sock_cb ){ - coap_message_handler_stub.int16_value = 2; - if( -1 != thread_conn_handler_stub.receive_from_sock_cb(1, buf, 12, NULL, 0)) - return false; - - nsdynmemlib_stub.returnCounter = 1; - uint8_t * ptr = ns_dyn_mem_alloc(5); - memset(ptr, 3, 5); - nsdynmemlib_stub.returnCounter = 1; - if( 2 != thread_conn_handler_stub.receive_from_sock_cb(1, buf, 12, ptr, 5)) - return false; - ns_dyn_mem_free(ptr); - coap_message_handler_stub.int16_value = 0; - - //This could be moved to own test function, - //but thread_conn_handler_stub.receive_from_sock_cb must be called successfully - if( coap_message_handler_stub.cb ){ - if( -1 != coap_message_handler_stub.cb(1, NULL, NULL) ) - return false; - - sn_coap_hdr_s * coap = (sn_coap_hdr_s *)malloc(sizeof(sn_coap_hdr_s)); - memset(coap, 0, sizeof(sn_coap_hdr_s)); - - uint8_t uri[2] = "as"; - coap->uri_path_ptr = &uri; - coap->uri_path_len=2; - - if( -1 != coap_message_handler_stub.cb(1, coap, NULL) ) - return false; - - thread_conn_handler_stub.bool_value = true; - nsdynmemlib_stub.returnCounter = 2; - if( 0 != coap_service_register_uri(1, "as", 1, &request_recv_cb) ) - return false; - - if( -1 != coap_message_handler_stub.cb(1, coap, NULL) ) - return false; - - coap_transaction_t *tr = (coap_transaction_t *)malloc(sizeof(coap_transaction_t)); - memset(tr, 0, sizeof(coap_transaction_t)); - - if( 2 != coap_message_handler_stub.cb(1, coap, tr) ) - return false; - - free(tr); - tr = NULL; - - thread_conn_handler_stub.bool_value = false; - free(coap); - coap = NULL; - } - } - - if(thread_conn_handler_stub.get_passwd_cb){ - thread_conn_handler_stub.bool_value = true; - if( 2 != thread_conn_handler_stub.get_passwd_cb(1, buf, 12, NULL, 0)) - return false; - thread_conn_handler_stub.bool_value = false; - if( -1 != thread_conn_handler_stub.get_passwd_cb(1, buf, 12, NULL, 0)) - return false; - } - - if(thread_conn_handler_stub.sec_done_cb){ - uint8_t block[40]; - thread_conn_handler_stub.bool_value = true; - - coap_transaction_t *tr = (coap_transaction_t *)malloc(sizeof(coap_transaction_t)); - memset(tr, 0, sizeof(coap_transaction_t)); - nsdynmemlib_stub.returnCounter = 1; - tr->data_ptr = ns_dyn_mem_alloc(1); - tr->data_len = 1; - coap_message_handler_stub.coap_tx_ptr = tr; - - thread_conn_handler_stub.sec_done_cb(1, buf, 12, block); - - free(tr); - coap_message_handler_stub.coap_tx_ptr = NULL; - - thread_conn_handler_stub.bool_value = false; - - } - - coap_service_delete(1); - free( thread_conn_handler_stub.handler_obj ); - thread_conn_handler_stub.handler_obj = NULL; - - return true; -} diff --git a/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/coap_service_api/test_coap_service_api.h b/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/coap_service_api/test_coap_service_api.h deleted file mode 100644 index 94916476c3..0000000000 --- a/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/coap_service_api/test_coap_service_api.h +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright (c) 2015 ARM Limited. All Rights Reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * 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 TEST_COAP_SERVICE_API_H -#define TEST_COAP_SERVICE_API_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include - -bool test_coap_service_initialize(); - -bool test_coap_service_delete(); - -bool test_coap_service_virtual_socket_recv(); - -bool test_coap_service_virtual_socket_set_cb(); - -bool test_coap_service_register_uri(); - -bool test_coap_service_unregister_uri(); - -bool test_coap_service_request_send(); - -bool test_coap_service_response_send(); - -bool test_coap_callbacks(); - -bool test_eventOS_callbacks(); - -bool test_conn_handler_callbacks(); - - -#ifdef __cplusplus -} -#endif - -#endif // TEST_COAP_SERVICE_API_H - diff --git a/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/makefile_defines.txt b/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/makefile_defines.txt deleted file mode 100644 index 9991a6eaaf..0000000000 --- a/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/makefile_defines.txt +++ /dev/null @@ -1,40 +0,0 @@ -#--- Inputs ----# -CPPUTEST_HOME = /usr -CPPUTEST_USE_EXTENSIONS = Y -CPPUTEST_USE_VPATH = Y -CPPUTEST_USE_GCOV = Y -CPP_PLATFORM = gcc - -INCLUDE_DIRS =\ - .\ - ../stub\ - ../../../../coap-service/\ - ../../../../source/include/\ - ../../../../yotta_modules/mbedtls/ \ - ../../../../yotta_modules/sal-stack-nanostack/nanostack/ \ - ../../../../yotta_modules/nanostack-randlib/mbed-client-randlib/ \ - ../../../../yotta_modules/nanostack-libservice/ \ - ../../../../yotta_modules/nanostack-libservice/mbed-client-libservice/ \ - ../../../../yotta_modules/mbed-client-c/nsdl-c/ \ - ../../../../yotta_modules/mbed-client-c/source/libCoap/src/include/ \ - ../../../../yotta_modules/sal-stack-nanostack-eventloop/nanostack-event-loop/ \ - ../../../../yotta_modules/sal-stack-nanostack-eventloop/source/ \ - ../../../../yotta_modules/mbed-trace/ \ - ../../../../../nanostack/nanostack/\ - ../../../../../libService/libService/\ - ../../../../../nsdl-c/nsdl-c/\ - ../../../../../nsdl-c/source/libCoap/src/include/\ - ../../../../../event-loop/nanostack-event-loop/\ - ../../../../../event-loop/source/ \ - ../../../../../mbedtls/include/ \ - ../../../../../mbedtls/include/mbedtls/ \ - /usr/include\ - $(CPPUTEST_HOME)/include\ - -CPPUTESTFLAGS = -D__thumb2__ -w -CPPUTEST_CFLAGS += -std=gnu99 - -#if you need to use -std=c++11 or c++0x you need to uncomment this -#CPPUTESTFLAGS += -DCPPUTEST_STD_CPP_LIB_DISABLED -#CPPUTEST_CXXFLAGS += -std=gnu++0x - diff --git a/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/run_tests b/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/run_tests deleted file mode 100755 index ce3fc0c170..0000000000 --- a/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/run_tests +++ /dev/null @@ -1,35 +0,0 @@ -#!/bin/bash -echo -echo Build Coap-service unit tests -echo - -# Remember to add new test folder to Makefile -make clean -make all - -echo -echo Create results -echo -mkdir results -find ./ -name '*.xml' | xargs cp -t ./results/ - -echo -echo Create coverage document -echo -mkdir coverages -cd coverages - -lcov -q -d ../. -c -o app.info -lcov -q -r app.info "/test*" -o app.info -lcov -q -r app.info "/usr*" -o app.info -lcov -q -r app.info "/libService*" -o app.info -lcov -q -r app.info "/yotta_modules*" -o app.info -genhtml -q --no-branch-coverage app.info -cd .. -echo -echo -echo -echo Have a nice bug hunt! -echo -echo -echo diff --git a/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/coap_connection_handler_stub.c b/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/coap_connection_handler_stub.c deleted file mode 100644 index 83e6ce7828..0000000000 --- a/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/coap_connection_handler_stub.c +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright (c) 2015 ARM Limited. All Rights Reserved. - */ - -#include -#include "coap_connection_handler.h" -#include "coap_security_handler.h" -#include "ns_list.h" -#include "ns_trace.h" -#include "nsdynmemLIB.h" -#include "socket_api.h" -#include "net_interface.h" -#include "eventOS_callback_timer.h" -#include "coap_connection_handler_stub.h" - -thread_conn_handler_stub_def thread_conn_handler_stub; - -int coap_connection_handler_virtual_recv(coap_conn_handler_t *handler, uint8_t address[static 16], uint16_t port, uint8_t *data_ptr, uint16_t data_len) -{ - return thread_conn_handler_stub.int_value; -} - -coap_conn_handler_t *connection_handler_create(int (*recv_cb)(int8_t socket_id, uint8_t address[static 16], uint16_t port, unsigned char *, int), - int (*send_cb)(int8_t socket_id, uint8_t address[static 16], uint16_t port, const unsigned char *, int), - int (*pw_cb)(int8_t socket_id, uint8_t address[static 16], uint16_t port, uint8_t *pw_ptr, uint8_t *pw_len), - void(*done_cb)(int8_t socket_id, uint8_t address[static 16], uint16_t port, uint8_t keyblock[static KEY_BLOCK_LEN]) ) -{ - thread_conn_handler_stub.send_to_sock_cb = send_cb; - thread_conn_handler_stub.receive_from_sock_cb = recv_cb; - thread_conn_handler_stub.get_passwd_cb = pw_cb; - thread_conn_handler_stub.sec_done_cb = done_cb; - return thread_conn_handler_stub.handler_obj; -} - -void connection_handler_destroy(coap_conn_handler_t *handler) -{ - -} -void connection_handler_close_secure_connection( coap_conn_handler_t *handler, uint8_t destination_addr_ptr[static 16], uint16_t port ) -{ - -} - -int coap_connection_handler_open_connection(coap_conn_handler_t *handler, uint16_t listen_port, bool use_ephemeral_port, bool is_secure, bool is_real_socket, bool bypassSec) -{ - return thread_conn_handler_stub.int_value; -} - -int coap_connection_handler_send_data(coap_conn_handler_t *handler, ns_address_t *dest_addr, uint8_t *data_ptr, uint16_t data_len, bool bypass_link_sec) -{ - return thread_conn_handler_stub.int_value; -} - -bool coap_connection_handler_socket_belongs_to(coap_conn_handler_t *handler, int8_t socket_id) -{ - return thread_conn_handler_stub.bool_value; -} - -int8_t coap_connection_handler_set_timeout(coap_conn_handler_t *handler, uint32_t min, uint32_t max) -{ - return 0; -} - -void coap_connection_handler_exec(uint32_t time) -{ - -} diff --git a/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/coap_connection_handler_stub.h b/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/coap_connection_handler_stub.h deleted file mode 100644 index 5d24c67859..0000000000 --- a/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/coap_connection_handler_stub.h +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (c) 2015 ARM Limited. All Rights Reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * 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 __COAP_CONNECTION_HANDLER_STUB_H__ -#define __COAP_CONNECTION_HANDLER_STUB_H__ - -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -#include "coap_connection_handler.h" - -typedef struct { - int int_value; - bool bool_value; - coap_conn_handler_t *handler_obj; - - int (*send_to_sock_cb)(int8_t socket_id, uint8_t address[static 16], uint16_t port, const unsigned char *, int); - int (*receive_from_sock_cb)(int8_t socket_id, uint8_t address[static 16], uint16_t port, unsigned char *, int); - int (*get_passwd_cb)(int8_t socket_id, uint8_t address[static 16], uint16_t port, uint8_t *pw_ptr, uint8_t *pw_len); - void (*sec_done_cb)(int8_t socket_id, uint8_t address[static 16], uint16_t port, uint8_t keyblock[static 40]); - -} thread_conn_handler_stub_def; - -extern thread_conn_handler_stub_def thread_conn_handler_stub; - -#ifdef __cplusplus -} -#endif - - -#endif diff --git a/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/coap_message_handler_stub.c b/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/coap_message_handler_stub.c deleted file mode 100644 index 68f2b66912..0000000000 --- a/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/coap_message_handler_stub.c +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright (c) 2015-2016 ARM Limited. All Rights Reserved. - */ - -#include "coap_message_handler_stub.h" - -coap_message_handler_stub_def coap_message_handler_stub; - -coap_msg_handler_t *coap_message_handler_init(void *(*used_malloc_func_ptr)(uint16_t), void (*used_free_func_ptr)(void *), - uint8_t (*used_tx_callback_ptr)(uint8_t *, uint16_t, sn_nsdl_addr_s *, void *)) -{ - if(coap_message_handler_stub.coap_ptr){ - coap_message_handler_stub.coap_ptr->sn_coap_service_malloc = used_malloc_func_ptr; - coap_message_handler_stub.coap_ptr->sn_coap_service_free = used_free_func_ptr; - coap_message_handler_stub.coap_ptr->sn_coap_tx_callback = used_tx_callback_ptr; - } - return coap_message_handler_stub.coap_ptr; -} - -int8_t coap_message_handler_destroy(coap_msg_handler_t *handle) -{ - return coap_message_handler_stub.int8_value; -} - -coap_transaction_t *coap_message_handler_transaction_valid(coap_transaction_t *tr_ptr) -{ - return coap_message_handler_stub.coap_ptr; -} - -coap_transaction_t *coap_message_handler_find_transaction(uint8_t *address_ptr, uint16_t port) -{ - return coap_message_handler_stub.coap_tx_ptr; -} - -int16_t coap_message_handler_coap_msg_process(coap_msg_handler_t *handle, int8_t socket_id, uint8_t source_addr_ptr[static 16], uint16_t port, - uint8_t *data_ptr, uint16_t data_len, int16_t (cb)(int8_t, sn_coap_hdr_s *, coap_transaction_t *)) -{ - coap_message_handler_stub.cb = cb; - return coap_message_handler_stub.int16_value; -} - -uint16_t coap_message_handler_request_send(coap_msg_handler_t *handle, int8_t service_id, uint8_t options, - const uint8_t destination_addr[static 16], uint16_t destination_port, sn_coap_msg_type_e msg_type, sn_coap_msg_code_e msg_code, - const char *uri, sn_coap_content_format_e cont_type, const uint8_t *payload_ptr, uint16_t payload_len, coap_message_handler_response_recv *request_response_cb) -{ - return coap_message_handler_stub.uint16_value; -} - -int8_t coap_message_handler_response_send(coap_msg_handler_t *handle, int8_t service_id, uint8_t options, sn_coap_hdr_s *request_ptr, sn_coap_msg_code_e message_code,sn_coap_content_format_e content_type, const uint8_t *payload_ptr, uint16_t payload_len) -{ - return coap_message_handler_stub.int8_value; -} - -int8_t coap_message_handler_exec(coap_msg_handler_t *handle, uint32_t current_time) -{ - return coap_message_handler_stub.int8_value; -} - diff --git a/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/coap_message_handler_stub.h b/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/coap_message_handler_stub.h deleted file mode 100644 index 5cbb974160..0000000000 --- a/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/coap_message_handler_stub.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (c) 2015 ARM Limited. All Rights Reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * 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 __COAP_MESSAGE_HANDLER_STUB_H__ -#define __COAP_MESSAGE_HANDLER_STUB_H__ - -#ifdef __cplusplus -extern "C" { -#endif - -#include -#include -#include "coap_message_handler.h" - -typedef struct { - int8_t int8_value; - int16_t int16_value; - uint16_t uint16_value; - coap_msg_handler_t *coap_ptr; - coap_transaction_t *coap_tx_ptr; - int16_t (*cb)(int8_t, sn_coap_hdr_s *, coap_transaction_t *); -} coap_message_handler_stub_def; - -extern coap_message_handler_stub_def coap_message_handler_stub; - -#ifdef __cplusplus -} -#endif - -#endif // __COAP_MESSAGE_HANDLER_STUB_H__ diff --git a/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/coap_security_handler_stub.c b/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/coap_security_handler_stub.c deleted file mode 100644 index 1583dc0aa7..0000000000 --- a/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/coap_security_handler_stub.c +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright (c) 2015-2016 ARM Limited. All Rights Reserved. - */ - -#include -#include -#include -#include "ns_trace.h" -#include "nsdynmemLIB.h" -#include "coap_connection_handler.h" -#include "coap_security_handler_stub.h" - -thread_sec_def coap_security_handler_stub; - -coap_security_t *coap_security_create(int8_t socket_id, int8_t timer_id, uint8_t *address_ptr, uint16_t port, SecureConnectionMode mode, - int (*send_cb)(int8_t socket_id, uint8_t *address_ptr, uint16_t port, const unsigned char *, size_t), - int (*receive_cb)(int8_t socket_id, unsigned char *, size_t), - void (*start_timer_cb)(int8_t timer_id, uint32_t min, uint32_t fin), - int (*timer_status_cb)(int8_t timer_id)) -{ - coap_security_handler_stub.send_cb = send_cb; - coap_security_handler_stub.receive_cb = receive_cb; - coap_security_handler_stub.start_timer_cb = start_timer_cb; - coap_security_handler_stub.timer_status_cb = timer_status_cb; - return coap_security_handler_stub.sec_obj; -} - -void coap_security_destroy(coap_security_t *sec) -{ - -} - -int coap_security_handler_connect_non_blocking(coap_security_t *sec, bool is_server, SecureSocketMode sock_mode, coap_security_keys_t keys, uint32_t timeout_min, uint32_t timeout_max) -{ - sec->_is_started = true; - if( coap_security_handler_stub.counter >= 0){ - return coap_security_handler_stub.values[coap_security_handler_stub.counter--]; - } - return coap_security_handler_stub.int_value; -} - -int coap_security_handler_continue_connecting(coap_security_t *sec) -{ - if( coap_security_handler_stub.counter >= 0){ - return coap_security_handler_stub.values[coap_security_handler_stub.counter--]; - } - - return coap_security_handler_stub.int_value; -} - - -int coap_security_handler_send_message(coap_security_t *sec, unsigned char *message, size_t len) -{ - if( coap_security_handler_stub.counter >= 0){ - return coap_security_handler_stub.values[coap_security_handler_stub.counter--]; - } - return coap_security_handler_stub.int_value; -} - -int coap_security_send_close_alert(coap_security_t *sec) -{ - if( coap_security_handler_stub.counter >= 0){ - return coap_security_handler_stub.values[coap_security_handler_stub.counter--]; - } - return coap_security_handler_stub.int_value; -} - -int coap_security_handler_read(coap_security_t *sec, unsigned char* buffer, size_t len) -{ - if( coap_security_handler_stub.counter >= 0){ - return coap_security_handler_stub.values[coap_security_handler_stub.counter--]; - } - return coap_security_handler_stub.int_value; -} diff --git a/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/coap_security_handler_stub.h b/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/coap_security_handler_stub.h deleted file mode 100644 index 2316ffff7d..0000000000 --- a/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/coap_security_handler_stub.h +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright (c) 2015-2016 ARM Limited. All Rights Reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * 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 __COAP_SECURITY_HANDLER_STUB_H__ -#define __COAP_SECURITY_HANDLER_STUB_H__ - -#include -#include "coap_security_handler.h" - -typedef struct tsh{ - coap_security_t *sec_obj; - int int_value; - int counter; - int values[10]; - - int (*send_cb)(int8_t socket_id, uint8_t *address_ptr, uint16_t port, const unsigned char *, size_t); - int (*receive_cb)(int8_t socket_id, unsigned char *, size_t); - void (*start_timer_cb)(int8_t timer_id, uint32_t min, uint32_t fin); - int (*timer_status_cb)(int8_t timer_id); -} thread_sec_def; - -extern thread_sec_def coap_security_handler_stub; - -#endif //__COAP_SECURITY_HANDLER_STUB_H__ diff --git a/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/coap_service_api_stub.c b/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/coap_service_api_stub.c deleted file mode 100644 index cdd1d2698d..0000000000 --- a/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/coap_service_api_stub.c +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright (c) 2015-2016 ARM Limited. All Rights Reserved. - */ - -#include - -#include "ns_types.h" -#include "ns_list.h" -#include "ns_trace.h" -#include "nsdynmemLIB.h" -#include "sn_nsdl.h" -#include "sn_coap_header.h" -#include "coap_service_api.h" -#include "coap_message_handler.h" -#include "eventOS_event.h" -#include "eventOS_scheduler.h" -#include "eventOS_event_timer.h" -#include "common_functions.h" -#include "net_interface.h" - -int8_t coap_service_initialize(int8_t interface_id, uint16_t listen_port, uint8_t service_options, - coap_service_security_start_cb *start_ptr, coap_service_security_done_cb *coap_security_done_cb) -{ - return 0; -} - -void coap_service_delete(int8_t service_id) -{ -} - -int16_t coap_service_virtual_socket_recv(int8_t service_id, uint8_t source_addr_ptr[static 16], uint16_t port, uint8_t *data_ptr, uint16_t data_len) -{ - return 0; -} - -int16_t coap_service_virtual_socket_set_cb(int8_t service_id, coap_service_virtual_socket_send_cb *send_method_ptr) -{ - return 0; -} - -int8_t coap_service_register_uri(int8_t service_id, const char *uri, uint8_t allowed_method, coap_service_request_recv_cb *request_recv_cb) -{ - return 0; -} - -int8_t coap_service_unregister_uri(int8_t service_id, const char *uri) -{ - return 0; -} - -uint16_t coap_service_request_send(int8_t service_id, uint8_t options, const uint8_t destination_addr[static 16], uint16_t destination_port, sn_coap_msg_type_e msg_type, sn_coap_msg_code_e msg_code, const char *uri, sn_coap_content_format_e cont_type, const uint8_t *payload_ptr, uint16_t payload_len, coap_service_response_recv *request_response_cb) -{ - return 0; -} - -int8_t coap_service_response_send(int8_t service_id, uint8_t options, sn_coap_hdr_s *request_ptr, sn_coap_msg_code_e message_code, sn_coap_content_format_e content_type, const uint8_t *payload_ptr,uint16_t payload_len) -{ - return 0; -} - -uint32_t coap_service_get_internal_timer_ticks(void) -{ - return 1; -} diff --git a/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/eventOS_event_stub.c b/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/eventOS_event_stub.c deleted file mode 100644 index b050d35078..0000000000 --- a/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/eventOS_event_stub.c +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Copyright (c) 2015 ARM Limited. All Rights Reserved. - */ - -#include -#include "ns_types.h" -#include "eventOS_event.h" -#include "eventOS_event_stub.h" - -eventOs_event_stub_def eventOs_event_stub; - -int8_t eventOS_event_send(arm_event_s *event) -{ - return eventOs_event_stub.int8_value; -} - -int8_t eventOS_event_handler_create(void (*handler_func_ptr)(arm_event_s *), uint8_t init_event_type) -{ - eventOs_event_stub.event_ptr = handler_func_ptr; - return eventOs_event_stub.int8_value; -} diff --git a/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/eventOS_event_stub.h b/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/eventOS_event_stub.h deleted file mode 100644 index fb2a9fc83f..0000000000 --- a/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/eventOS_event_stub.h +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright (c) 2015 ARM Limited. All Rights Reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * 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 __EVENTOS_EVENT_STUB_H__ -#define __EVENTOS_EVENT_STUB_H__ - -#ifdef __cplusplus -extern "C" { -#endif - -#include -#include "eventOS_event.h" - -typedef struct { - void (*event_ptr)(arm_event_s *); - int8_t int8_value; -} eventOs_event_stub_def; - -extern eventOs_event_stub_def eventOs_event_stub; - -#ifdef __cplusplus -} -#endif - -#endif // __EVENTOS_EVENT_STUB_H__ diff --git a/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/mbed_trace_stub.c b/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/mbed_trace_stub.c deleted file mode 100644 index 34dae55225..0000000000 --- a/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/mbed_trace_stub.c +++ /dev/null @@ -1,116 +0,0 @@ -/* - * Copyright (c) 2014-2015 ARM Limited. All rights reserved. - * SPDX-License-Identifier: Apache-2.0 - * 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 -#include -#include -#include - -#ifndef YOTTA_CFG_MBED_TRACE -#define YOTTA_CFG_MBED_TRACE 1 -#define YOTTA_CFG_MBED_TRACE_FEA_IPV6 1 -#endif - -#include "mbed-trace/mbed_trace.h" -#if YOTTA_CFG_MBED_TRACE_FEA_IPV6 == 1 -#include "mbed-client-libservice/ip6string.h" -#include "mbed-client-libservice/common_functions.h" -#endif - - -int mbed_trace_init(void) -{ - return 0; -} -void mbed_trace_free(void) -{ -} - -void mbed_trace_buffer_sizes(int lineLength, int tmpLength) -{ -} - -void mbed_trace_config_set(uint8_t config) -{ -} - -uint8_t mbed_trace_config_get(void) -{ - return 0; -} - -void mbed_trace_prefix_function_set(char *(*pref_f)(size_t)) -{ -} - -void mbed_trace_suffix_function_set(char *(*suffix_f)(void)) -{ -} - -void mbed_trace_print_function_set(void (*printf)(const char *)) -{ -} - -void mbed_trace_cmdprint_function_set(void (*printf)(const char *)) -{ -} - -void mbed_trace_exclude_filters_set(char *filters) -{ - -} - -const char *mbed_trace_exclude_filters_get(void) -{ - return NULL; -} - -const char *mbed_trace_include_filters_get(void) -{ - return NULL; -} - -void mbed_trace_include_filters_set(char *filters) -{ - -} - -void mbed_tracef(uint8_t dlevel, const char *grp, const char *fmt, ...) -{ -} - -const char *mbed_trace_last(void) -{ - return NULL; -} - -/* Helping functions */ -#define tmp_data_left() m_trace.tmp_data_length-(m_trace.tmp_data_ptr-m_trace.tmp_data) -#if YOTTA_CFG_MBED_TRACE_FEA_IPV6 == 1 -char *mbed_trace_ipv6(const void *addr_ptr) -{ - return NULL; -} - -char *mbed_trace_ipv6_prefix(const uint8_t *prefix, uint8_t prefix_len) -{ - return NULL; -} -#endif //YOTTA_CFG_MBED_TRACE_FEA_IPV6 - -char *mbed_trace_array(const uint8_t *buf, uint16_t len) -{ - return NULL; -} diff --git a/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/mbedtls_stub.c b/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/mbedtls_stub.c deleted file mode 100644 index d6d88e6acb..0000000000 --- a/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/mbedtls_stub.c +++ /dev/null @@ -1,310 +0,0 @@ -/* - * Copyright (c) 2015 ARM Limited. All Rights Reserved. - */ - -#include "mbedtls_stub.h" - -mbedtls_stub_def mbedtls_stub; - -//From ssl.h -int mbedtls_ssl_handshake_step( mbedtls_ssl_context *ssl ) -{ - if( mbedtls_stub.useCounter ){ - - if( mbedtls_stub.retArray[mbedtls_stub.counter] == HANDSHAKE_FINISHED_VALUE || - mbedtls_stub.retArray[mbedtls_stub.counter] == HANDSHAKE_FINISHED_VALUE_RETURN_ZERO){ - - ssl->state = MBEDTLS_SSL_HANDSHAKE_OVER; - if(mbedtls_stub.retArray[mbedtls_stub.counter] == HANDSHAKE_FINISHED_VALUE_RETURN_ZERO) - return 0; - } - return mbedtls_stub.retArray[mbedtls_stub.counter++]; - } - return mbedtls_stub.expected_int; -} - -int mbedtls_ssl_close_notify( mbedtls_ssl_context *a ) -{ - if( mbedtls_stub.useCounter ){ - return mbedtls_stub.retArray[mbedtls_stub.counter++]; - } - return mbedtls_stub.expected_int; -} - -void mbedtls_ssl_init( mbedtls_ssl_context *a ){ - -} -void mbedtls_ssl_conf_min_version( mbedtls_ssl_config *conf, int major, int minor ){ - -} - -void mbedtls_ssl_conf_max_version( mbedtls_ssl_config *conf, int major, int minor ){ - -} - -void mbedtls_ssl_config_init( mbedtls_ssl_config *a ){ - -} - -void mbedtls_ssl_conf_handshake_timeout( mbedtls_ssl_config *a, uint32_t b, uint32_t c) -{ - -} - -void mbedtls_ssl_free( mbedtls_ssl_context *a ){ - -} - -int mbedtls_ssl_conf_own_cert( mbedtls_ssl_config *a, - mbedtls_x509_crt *b, - mbedtls_pk_context *c ){ - if( mbedtls_stub.useCounter ){ - return mbedtls_stub.retArray[mbedtls_stub.counter++]; - } - return mbedtls_stub.expected_int; -} - -void mbedtls_ssl_conf_authmode( mbedtls_ssl_config *a, int c ){ - -} - -void mbedtls_ssl_conf_ca_chain( mbedtls_ssl_config *a, - mbedtls_x509_crt *b, - mbedtls_x509_crl *c ){ - -} - -int mbedtls_ssl_conf_psk( mbedtls_ssl_config *a, - const unsigned char *b, size_t c, - const unsigned char *d, size_t e ){ - if( mbedtls_stub.useCounter ){ - return mbedtls_stub.retArray[mbedtls_stub.counter++]; - } - return mbedtls_stub.expected_int; -} - -int mbedtls_ssl_config_defaults( mbedtls_ssl_config *a, - int b, int c, int d){ - if( mbedtls_stub.useCounter ){ - return mbedtls_stub.retArray[mbedtls_stub.counter++]; - } - return mbedtls_stub.expected_int; -} - -void mbedtls_ssl_conf_rng( mbedtls_ssl_config *a, - int (*f_rng)(void *, unsigned char *, size_t), - void *b ){ - -} - -void mbedtls_ssl_conf_ciphersuites( mbedtls_ssl_config *a, - const int *b) -{ - -} - -int mbedtls_ssl_setup( mbedtls_ssl_context *a, - const mbedtls_ssl_config *b ){ - if( mbedtls_stub.useCounter ){ - return mbedtls_stub.retArray[mbedtls_stub.counter++]; - } - return mbedtls_stub.expected_int; -} - -void mbedtls_ssl_set_bio( mbedtls_ssl_context *ssl, - void *p_bio, - int (*f_send)(void *, const unsigned char *, size_t), - int (*f_recv)(void *, unsigned char *, size_t), - int (*f_recv_timeout)(void *, unsigned char *, size_t, uint32_t) ){ - if( p_bio != NULL ){ - if( f_send ) - f_send( p_bio, NULL, 0 ); - if( f_recv ) - f_recv( p_bio, NULL, 0 ); - if( f_recv_timeout ) - f_recv_timeout( p_bio, NULL, 0, 0 ); - } -} - -void mbedtls_ssl_set_timer_cb( mbedtls_ssl_context *a, - void *ctx, - void (*f_set_timer)(void *, uint32_t int_ms, uint32_t fin_ms), - int (*f_get_timer)(void *) ){ - f_set_timer(ctx, 1, 2); - f_get_timer(ctx); - if(mbedtls_stub.invalidate_timer){ - f_set_timer(ctx, 0, 0); - } - f_get_timer(ctx); -} - -int mbedtls_ssl_handshake( mbedtls_ssl_context *ssl ){ - if( mbedtls_stub.useCounter ){ - return mbedtls_stub.retArray[mbedtls_stub.counter++]; - } - return mbedtls_stub.expected_int; -} - -uint32_t mbedtls_ssl_get_verify_result( const mbedtls_ssl_context *a ){ - return mbedtls_stub.uint32_value; -} - -int mbedtls_ssl_read( mbedtls_ssl_context *a, unsigned char *b, size_t c){ - if( mbedtls_stub.useCounter ){ - return mbedtls_stub.retArray[mbedtls_stub.counter++]; - } - return mbedtls_stub.expected_int; -} - -int mbedtls_ssl_write( mbedtls_ssl_context *a, const unsigned char *b, size_t c ){ - if( mbedtls_stub.useCounter ){ - return mbedtls_stub.retArray[mbedtls_stub.counter++]; - } - return mbedtls_stub.expected_int; -} - - - -//From crt_drbg.h -int mbedtls_ctr_drbg_seed( mbedtls_ctr_drbg_context *a, - int (*f_entropy)(void *, unsigned char *, size_t), - void *b, - const unsigned char *c, - size_t d ){ - return mbedtls_stub.crt_expected_int; -} - -void mbedtls_ctr_drbg_init( mbedtls_ctr_drbg_context *a ){ - -} - -void mbedtls_ctr_drbg_free( mbedtls_ctr_drbg_context *a ){ - -} - -int mbedtls_ctr_drbg_random_with_add( void *a, - unsigned char *b, size_t c, - const unsigned char *d, size_t e ){ - return mbedtls_stub.crt_expected_int; -} - -int mbedtls_ctr_drbg_random( void *p_rng, - unsigned char *output, size_t output_len ){ - return mbedtls_stub.crt_expected_int; -} - -//From x509_crt.h -void mbedtls_x509_crt_init( mbedtls_x509_crt *a ){ - -} - -void mbedtls_x509_crt_free( mbedtls_x509_crt *a ){ - -} - -int mbedtls_x509_crt_parse( mbedtls_x509_crt *a, const unsigned char *b, size_t c ){ - if( mbedtls_stub.useCounter ){ - return mbedtls_stub.retArray[mbedtls_stub.counter++]; - } - return mbedtls_stub.expected_int; -} - -//From entropy.h -void mbedtls_entropy_init( mbedtls_entropy_context *a ){ - -} - -void mbedtls_entropy_free( mbedtls_entropy_context *ctx ){ - -} - -int mbedtls_entropy_func( void *a, unsigned char *b, size_t c ){ - if( mbedtls_stub.useCounter ){ - return mbedtls_stub.retArray[mbedtls_stub.counter++]; - } - return mbedtls_stub.expected_int; -} - -int mbedtls_entropy_add_source( mbedtls_entropy_context *a, - mbedtls_entropy_f_source_ptr f_source, void *b, - size_t c, int d ){ - unsigned char buf[2]; - size_t len; - f_source(NULL, buf, 1, &len); - - if( mbedtls_stub.useCounter ){ - return mbedtls_stub.retArray[mbedtls_stub.counter++]; - } - return mbedtls_stub.expected_int; -} - -//From pk.h -int mbedtls_pk_parse_key( mbedtls_pk_context *a, - const unsigned char *b, size_t c, - const unsigned char *d, size_t e ){ - if( mbedtls_stub.useCounter ){ - return mbedtls_stub.retArray[mbedtls_stub.counter++]; - } - return mbedtls_stub.expected_int; -} - -void mbedtls_pk_init( mbedtls_pk_context *ctx ) -{ - -} - -void mbedtls_pk_free( mbedtls_pk_context *ctx ) -{ - -} - -void mbedtls_ssl_config_free( mbedtls_ssl_config *a) -{ - -} - -int mbedtls_ssl_set_hs_ecjpake_password( mbedtls_ssl_context *ssl, - const unsigned char *pw, - size_t pw_len ) -{ - if( mbedtls_stub.useCounter ){ - return mbedtls_stub.retArray[mbedtls_stub.counter++]; - } - return mbedtls_stub.expected_int; -} - -void mbedtls_ssl_conf_dtls_cookies( mbedtls_ssl_config *conf, - mbedtls_ssl_cookie_write_t *f_cookie_write, - mbedtls_ssl_cookie_check_t *f_cookie_check, - void *p_cookie ) -{ - if( mbedtls_stub.cookie_obj && f_cookie_check && mbedtls_stub.cookie_len > 0 ){ - f_cookie_check(mbedtls_stub.cookie_obj, &mbedtls_stub.cookie_value, mbedtls_stub.cookie_len, NULL, 0); - } - if( mbedtls_stub.cookie_obj && f_cookie_write && mbedtls_stub.cookie_len > 0 ){ - unsigned char out[16]; - unsigned char *ptr = &out; - f_cookie_write(mbedtls_stub.cookie_obj, &ptr, ptr+mbedtls_stub.cookie_len, NULL, 0); - } -} - -void mbedtls_ssl_conf_export_keys_cb( mbedtls_ssl_config *conf, - mbedtls_ssl_export_keys_t *f_export_keys, - void *p_export_keys ) -{ - if( f_export_keys && p_export_keys){ - unsigned char value[40]; - memset(&value, 1, 40); - f_export_keys(p_export_keys, &value, "", 0, 0,0); //failure case - - f_export_keys(p_export_keys, &value, "", 0, 20,0); //success case - } -} - -int mbedtls_ssl_session_reset( mbedtls_ssl_context *ssl ) -{ - if( mbedtls_stub.useCounter ){ - return mbedtls_stub.retArray[mbedtls_stub.counter++]; - } - return mbedtls_stub.expected_int; -} diff --git a/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/mbedtls_stub.h b/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/mbedtls_stub.h deleted file mode 100644 index 52402bd74f..0000000000 --- a/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/mbedtls_stub.h +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright (c) 2015 ARM Limited. All Rights Reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * 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 MBEDTLS_STUB_H -#define MBEDTLS_STUB_H - -#define MBEDTLS_SSL_EXPORT_KEYS - -#include -#include -#include "mbedtls/platform.h" -#include "mbedtls/ssl.h" -#include "mbedtls/ctr_drbg.h" -#include "mbedtls/x509_crt.h" -#include "mbedtls/sha256.h" -#include "mbedtls/entropy.h" -#include "mbedtls/pk.h" - - - -#define HANDSHAKE_FINISHED_VALUE 8888 -#define HANDSHAKE_FINISHED_VALUE_RETURN_ZERO 8889 - -typedef struct { - int crt_expected_int; - bool useCounter; - int counter; - int retArray[20]; - int expected_int; - uint32_t uint32_value; - bool invalidate_timer; - void *cookie_obj; - unsigned char cookie_value[8]; - size_t cookie_len; -} mbedtls_stub_def; - -extern mbedtls_stub_def mbedtls_stub; - -#endif // MBEDTLS_STUB_H diff --git a/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/ns_list_stub.c b/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/ns_list_stub.c deleted file mode 100644 index 2d5e650d96..0000000000 --- a/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/ns_list_stub.c +++ /dev/null @@ -1,9 +0,0 @@ -/* - * Copyright (c) 2015 ARM Limited. All Rights Reserved. - */ - -#define NS_LIST_FN extern - -#include "ns_list.h" - - diff --git a/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/ns_timer_stub.c b/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/ns_timer_stub.c deleted file mode 100644 index f543d941b0..0000000000 --- a/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/ns_timer_stub.c +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (c) 2014-2015 ARM Limited. All Rights Reserved. - */ -#include "ns_types.h" -#include "ns_list.h" -#include "ns_timer.h" -#include "ns_timer_stub.h" -#include "eventOS_callback_timer.h" -#include "platform/arm_hal_interrupt.h" -#include "platform/arm_hal_timer.h" -#include "nsdynmemLIB.h" - -ns_timer_stub_def ns_timer_stub; - -int8_t ns_timer_init(void) -{ - return ns_timer_stub.int8_value; -} - -int8_t eventOS_callback_timer_register(void (*timer_interrupt_handler)(int8_t, uint16_t)) -{ - ns_timer_stub.cb = timer_interrupt_handler; - return ns_timer_stub.int8_value; -} - -int8_t eventOS_callback_timer_unregister(int8_t ns_timer_id) -{ - return ns_timer_stub.int8_value; -} - - -int8_t ns_timer_sleep(void) -{ - return ns_timer_stub.int8_value; -} - -int8_t eventOS_callback_timer_start(int8_t ns_timer_id, uint16_t slots) -{ - return ns_timer_stub.int8_value; -} - -int8_t eventOS_callback_timer_stop(int8_t ns_timer_id) -{ - return ns_timer_stub.int8_value; -} diff --git a/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/ns_timer_stub.h b/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/ns_timer_stub.h deleted file mode 100644 index 5db49ded5b..0000000000 --- a/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/ns_timer_stub.h +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright (c) 2015 ARM Limited. All Rights Reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * 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 __NS_TIMER_STUB_H__ -#define __NS_TIMER_STUB_H__ - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct { - int8_t int8_value; - void (*cb)(int8_t, uint16_t); -} ns_timer_stub_def; - -extern ns_timer_stub_def ns_timer_stub; - -#ifdef __cplusplus -} -#endif - -#endif // __NS_TIMER_STUB_H__ diff --git a/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/nsdynmemLIB_stub.c b/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/nsdynmemLIB_stub.c deleted file mode 100644 index e3f16f2e6e..0000000000 --- a/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/nsdynmemLIB_stub.c +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright (c) 2014-2015 ARM Limited. All Rights Reserved. - */ -#include "nsdynmemLIB_stub.h" -#include -#include -#include -#include "platform/arm_hal_interrupt.h" -#include - -nsdynmemlib_stub_data_t nsdynmemlib_stub; - -void ns_dyn_mem_init(uint8_t *heap, uint16_t h_size, void (*passed_fptr)(heap_fail_t), mem_stat_t *info_ptr) -{ -} - -void *ns_dyn_mem_alloc(int16_t alloc_size) -{ - if (nsdynmemlib_stub.returnCounter > 0) - { - nsdynmemlib_stub.returnCounter--; - return malloc(alloc_size); - } - else - { - return(nsdynmemlib_stub.expectedPointer); - } -} - -void *ns_dyn_mem_temporary_alloc(int16_t alloc_size) -{ - if (nsdynmemlib_stub.returnCounter > 0) - { - nsdynmemlib_stub.returnCounter--; - return malloc(alloc_size); - } - else - { - return(nsdynmemlib_stub.expectedPointer); - } -} - -void ns_dyn_mem_free(void *block) -{ - free(block); -} diff --git a/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/nsdynmemLIB_stub.h b/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/nsdynmemLIB_stub.h deleted file mode 100644 index 46e5fc0e43..0000000000 --- a/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/nsdynmemLIB_stub.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright (c) 2015 ARM Limited. All Rights Reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * 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 __NSDYNMEMLIB_STUB_H__ -#define __NSDYNMEMLIB_STUB_H__ - -#ifdef __cplusplus -extern "C" { -#endif - -#include "stdint.h" - -typedef struct { - uint8_t returnCounter; - void* expectedPointer; -} nsdynmemlib_stub_data_t; - -extern nsdynmemlib_stub_data_t nsdynmemlib_stub; - - -void *ns_dyn_mem_alloc(int16_t alloc_size); -void *ns_dyn_mem_temporary_alloc(int16_t alloc_size); -void ns_dyn_mem_free(void *block); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/randLIB_stub.c b/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/randLIB_stub.c deleted file mode 100644 index 2b4ae0acab..0000000000 --- a/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/randLIB_stub.c +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright (c) 2014-2015 ARM Limited. All Rights Reserved. - */ -#include -#include -#include -#include -#include "randLIB.h" -#include "platform/arm_hal_random.h" - -#if ((RAND_MAX+1) & RAND_MAX) != 0 -#error "RAND_MAX isn't 2^n-1 :(" -#endif - -int counter = 1; - -void randLIB_seed_random(void) -{ -} - -uint8_t randLIB_get_8bit(void) -{ - return 0; -} - -uint16_t randLIB_get_16bit(void) -{ - return 0; -} - -uint32_t randLIB_get_32bit(void) -{ - return 0; -} - -int8_t randLIB_get_n_bytes_random(uint8_t *data_ptr, uint8_t eight_bit_boundary) -{ - if(data_ptr && eight_bit_boundary > 0){ - data_ptr[0] = counter++%255; - } - return 0; -} - -uint16_t randLIB_get_random_in_range(uint16_t min, uint16_t max) -{ - return 0; -} - -uint32_t randLIB_randomise_base(uint32_t base, uint16_t min_factor, uint16_t max_factor) -{ - return 0; -} diff --git a/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/sn_coap_builder_stub.c b/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/sn_coap_builder_stub.c deleted file mode 100644 index 1d30a79cbc..0000000000 --- a/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/sn_coap_builder_stub.c +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright (c) 2011-2015 ARM Limited. All Rights Reserved. - */ - -/** - * \file sn_coap_builder.c - * - * \brief CoAP Message builder - * - * Functionality: Builds CoAP message - * - */ - -/* * * * * * * * * * * * * * */ -/* * * * INCLUDE FILES * * * */ -/* * * * * * * * * * * * * * */ - -#include "ns_types.h" -#include "sn_coap_header.h" -#include "sn_coap_builder_stub.h" - -sn_coap_builder_stub_def sn_coap_builder_stub; - -sn_coap_hdr_s *sn_coap_build_response(struct coap_s *handle, sn_coap_hdr_s *coap_packet_ptr, uint8_t msg_code) -{ - return sn_coap_builder_stub.expectedHeader; -} - -int16_t sn_coap_builder(uint8_t *dst_packet_data_ptr, sn_coap_hdr_s *src_coap_msg_ptr) -{ - return sn_coap_builder_stub.expectedInt16; -} - -uint16_t sn_coap_builder_calc_needed_packet_data_size(sn_coap_hdr_s *src_coap_msg_ptr) -{ - return sn_coap_builder_stub.expectedUint16; -} - -int16_t sn_coap_builder_options_build_add_zero_length_option(uint8_t **dst_packet_data_pptr, uint8_t option_length, uint8_t option_exist, sn_coap_option_numbers_e option_number) -{ - return sn_coap_builder_stub.expectedInt16; -} - diff --git a/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/sn_coap_builder_stub.h b/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/sn_coap_builder_stub.h deleted file mode 100644 index 7ddc9c1944..0000000000 --- a/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/sn_coap_builder_stub.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright (c) 2015 ARM Limited. All Rights Reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * 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 __SN_COAP_BUILDER_STUB_H__ -#define __SN_COAP_BUILDER_STUB_H__ - -typedef struct { - int16_t expectedInt16; - uint16_t expectedUint16; - sn_coap_hdr_s *expectedHeader; -} sn_coap_builder_stub_def; - -extern sn_coap_builder_stub_def sn_coap_builder_stub; - -#endif //__SN_COAP_BUILDER_STUB_H__ diff --git a/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/sn_coap_parser_stub.c b/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/sn_coap_parser_stub.c deleted file mode 100644 index d177012671..0000000000 --- a/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/sn_coap_parser_stub.c +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright (c) 2011-2015 ARM Limited. All Rights Reserved. - */ - -/** - *\file sn_coap_parser.c - * - * \brief CoAP Header parser - * - * Functionality: Parses CoAP Header - * - */ - -#include "ns_types.h" -#include "sn_nsdl.h" -#include "sn_coap_protocol.h" -#include "sn_coap_parser_stub.h" - -sn_coap_parser_def sn_coap_parser_stub; - -sn_coap_hdr_s *sn_coap_parser(struct coap_s *handle, uint16_t packet_data_len, uint8_t *packet_data_ptr, coap_version_e *coap_version_ptr) -{ - return sn_coap_parser_stub.expectedHeader; -} - -void sn_coap_parser_release_allocated_coap_msg_mem(struct coap_s *handle, sn_coap_hdr_s *freed_coap_msg_ptr) -{ - if (freed_coap_msg_ptr != NULL) { - if (freed_coap_msg_ptr->uri_path_ptr != NULL) { - free(freed_coap_msg_ptr->uri_path_ptr); - } - - if (freed_coap_msg_ptr->token_ptr != NULL) { - free(freed_coap_msg_ptr->token_ptr); - } - - if (freed_coap_msg_ptr->options_list_ptr != NULL) { - if (freed_coap_msg_ptr->options_list_ptr->proxy_uri_ptr != NULL) { - free(freed_coap_msg_ptr->options_list_ptr->proxy_uri_ptr); - } - - if (freed_coap_msg_ptr->options_list_ptr->etag_ptr != NULL) { - free(freed_coap_msg_ptr->options_list_ptr->etag_ptr); - } - - if (freed_coap_msg_ptr->options_list_ptr->uri_host_ptr != NULL) { - free(freed_coap_msg_ptr->options_list_ptr->uri_host_ptr); - } - - if (freed_coap_msg_ptr->options_list_ptr->location_path_ptr != NULL) { - free(freed_coap_msg_ptr->options_list_ptr->location_path_ptr); - } - - if (freed_coap_msg_ptr->options_list_ptr->location_query_ptr != NULL) { - free(freed_coap_msg_ptr->options_list_ptr->location_query_ptr); - } - - if (freed_coap_msg_ptr->options_list_ptr->uri_query_ptr != NULL) { - free(freed_coap_msg_ptr->options_list_ptr->uri_query_ptr); - } - - free(freed_coap_msg_ptr->options_list_ptr); - } - - free(freed_coap_msg_ptr); - freed_coap_msg_ptr = NULL; - } -} diff --git a/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/sn_coap_parser_stub.h b/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/sn_coap_parser_stub.h deleted file mode 100644 index 72be957164..0000000000 --- a/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/sn_coap_parser_stub.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright (c) 2015 ARM Limited. All Rights Reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * 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 __SN_COAP_PARSER_STUB_H__ -#define __SN_COAP_PARSER_STUB_H__ - -#include "sn_coap_header.h" - -typedef struct { - sn_coap_hdr_s *expectedHeader; -} sn_coap_parser_def; - -extern sn_coap_parser_def sn_coap_parser_stub; - -#endif //__SN_COAP_PARSER_STUB_H__ diff --git a/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/sn_coap_protocol_stub.c b/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/sn_coap_protocol_stub.c deleted file mode 100644 index 69d0fd4efc..0000000000 --- a/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/sn_coap_protocol_stub.c +++ /dev/null @@ -1,96 +0,0 @@ -/* - * Copyright (c) 2011-2015 ARM Limited. All Rights Reserved. - */ - - -#include -#include /* For libary malloc() */ -#include /* For memset() and memcpy() */ -#ifdef __linux__ -#include -#endif - -#include "ns_types.h" -#include "sn_nsdl.h" -#include "sn_coap_protocol.h" -#include "sn_coap_header_internal.h" -#include "sn_coap_protocol_internal.h" -#include "sn_coap_protocol_stub.h" - -uint16_t sn_coap_block_data_size = 0; - -uint8_t sn_coap_resending_queue_msgs = 0; -uint8_t sn_coap_resending_queue_bytes = 0; -uint8_t sn_coap_resending_count = 0; -uint8_t sn_coap_resending_intervall = 0; - -uint8_t sn_coap_duplication_buffer_size = 0; - -sn_coap_protocol_stub_def sn_coap_protocol_stub; - -int8_t sn_coap_protocol_destroy(struct coap_s *handle) -{ - return sn_coap_protocol_stub.expectedInt8; -} - -struct coap_s *sn_coap_protocol_init(void *(*used_malloc_func_ptr)(uint16_t), void (*used_free_func_ptr)(void *), - uint8_t (*used_tx_callback_ptr)(uint8_t *, uint16_t, sn_nsdl_addr_s *, void *), - int8_t (*used_rx_callback_ptr)(sn_coap_hdr_s *, sn_nsdl_addr_s *, void *param)) -{ - if( sn_coap_protocol_stub.expectedCoap ){ - sn_coap_protocol_stub.expectedCoap->sn_coap_protocol_free = used_free_func_ptr; - sn_coap_protocol_stub.expectedCoap->sn_coap_protocol_malloc = used_malloc_func_ptr; - sn_coap_protocol_stub.expectedCoap->sn_coap_rx_callback = used_rx_callback_ptr; - sn_coap_protocol_stub.expectedCoap->sn_coap_tx_callback = used_tx_callback_ptr; - } - return sn_coap_protocol_stub.expectedCoap; -} - -int8_t sn_coap_protocol_set_block_size(struct coap_s *handle, uint16_t block_size) -{ - return sn_coap_protocol_stub.expectedInt8; -} - -int8_t sn_coap_protocol_set_duplicate_buffer_size(struct coap_s *handle, uint8_t size) -{ - return sn_coap_protocol_stub.expectedInt8; -} - -int8_t sn_coap_protocol_set_retransmission_parameters(struct coap_s *handle, uint8_t resending_count, uint8_t resending_intervall) -{ - return sn_coap_protocol_stub.expectedInt8; -} - -int8_t sn_coap_protocol_set_retransmission_buffer(struct coap_s *handle, uint8_t buffer_size_messages, uint16_t buffer_size_bytes) -{ - return sn_coap_protocol_stub.expectedInt8; -} - -void sn_coap_protocol_clear_retransmission_buffer(struct coap_s *handle) -{ -} - - -int16_t sn_coap_protocol_build(struct coap_s *handle, sn_nsdl_addr_s *dst_addr_ptr, - uint8_t *dst_packet_data_ptr, sn_coap_hdr_s *src_coap_msg_ptr, void *param) -{ - //TODO: check if needed here - src_coap_msg_ptr->msg_id = 2; - return sn_coap_protocol_stub.expectedInt16; -} - -sn_coap_hdr_s *sn_coap_protocol_parse(struct coap_s *handle, sn_nsdl_addr_s *src_addr_ptr, uint16_t packet_data_len, uint8_t *packet_data_ptr, void *param) -{ - return sn_coap_protocol_stub.expectedHeader; -} - -int8_t sn_coap_protocol_exec(struct coap_s *handle, uint32_t current_time) -{ - return sn_coap_protocol_stub.expectedInt8; -} - -coap_send_msg_s *sn_coap_protocol_allocate_mem_for_msg(struct coap_s *handle, sn_nsdl_addr_s *dst_addr_ptr, uint16_t packet_data_len) -{ - return sn_coap_protocol_stub.expectedSendMsg; -} - diff --git a/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/sn_coap_protocol_stub.h b/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/sn_coap_protocol_stub.h deleted file mode 100644 index 0f8a67260d..0000000000 --- a/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/sn_coap_protocol_stub.h +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright (c) 2015 ARM Limited. All Rights Reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * 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 __SN_COAP_PROTOCOL_STUB_H__ -#define __SN_COAP_PROTOCOL_STUB_H__ - -#include "sn_coap_header_internal.h" -#include "sn_coap_protocol_internal.h" - -typedef struct { - int8_t expectedInt8; - int16_t expectedInt16; - struct coap_s *expectedCoap; - sn_coap_hdr_s *expectedHeader; - coap_send_msg_s *expectedSendMsg; -} sn_coap_protocol_stub_def; - -extern sn_coap_protocol_stub_def sn_coap_protocol_stub; - -#endif //__SN_COAP_PROTOCOL_STUB_H__ diff --git a/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/socket_api_stub.c b/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/socket_api_stub.c deleted file mode 100644 index 685f27d77f..0000000000 --- a/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/socket_api_stub.c +++ /dev/null @@ -1,118 +0,0 @@ -/* - * Copyright (c) 2015 ARM Limited. All Rights Reserved. - */ -#include "socket_api.h" -#include "socket_api_stub.h" - -socket_api_stub_data_t socket_api_stub; - -int8_t socket_raw_open(void (*passed_fptr)(void *)) -{ - if( socket_api_stub.counter >= 0){ - return socket_api_stub.values[socket_api_stub.counter--]; - } - - return socket_api_stub.int8_value; -} -int8_t socket_open(uint8_t protocol, uint16_t identifier, void (*passed_fptr)(void *)) -{ - socket_api_stub.recv_cb = passed_fptr; - if( socket_api_stub.counter >= 0){ - return socket_api_stub.values[socket_api_stub.counter--]; - } - - return socket_api_stub.int8_value; -} - -int8_t socket_free(int8_t socket) -{ - if( socket_api_stub.counter >= 0){ - return socket_api_stub.values[socket_api_stub.counter--]; - } - - return socket_api_stub.int8_value; -} -int8_t socket_listen(int8_t socket) -{ - if( socket_api_stub.counter >= 0){ - return socket_api_stub.values[socket_api_stub.counter--]; - } - - return socket_api_stub.int8_value; -} -int8_t socket_connect(int8_t socket, ns_address_t *address, uint8_t randomly_take_src_number) -{ - if( socket_api_stub.counter >= 0){ - return socket_api_stub.values[socket_api_stub.counter--]; - } - - return socket_api_stub.int8_value; -} -int8_t socket_bind(int8_t socket, const ns_address_t *address) -{ - if( socket_api_stub.counter >= 0){ - return socket_api_stub.values[socket_api_stub.counter--]; - } - - return socket_api_stub.int8_value; -} -int8_t socket_close(int8_t socket, ns_address_t *address) -{ - if( socket_api_stub.counter >= 0){ - return socket_api_stub.values[socket_api_stub.counter--]; - } - - return socket_api_stub.int8_value; -} -int8_t socket_send(int8_t socket, uint8_t *buffer, uint16_t length) -{ - if( socket_api_stub.counter >= 0){ - return socket_api_stub.values[socket_api_stub.counter--]; - } - - return socket_api_stub.int8_value; -} -int16_t socket_read(int8_t socket, ns_address_t *address, uint8_t *buffer, uint16_t length) -{ - if( address ){ - memset(&address->address, 0, 16); - address->identifier = 0; - } - if( socket_api_stub.counter >= 0){ - return socket_api_stub.values[socket_api_stub.counter--]; - } - - return socket_api_stub.int8_value; -} -int8_t socket_sendto(int8_t socket, ns_address_t *address, uint8_t *buffer, uint16_t length) -{ - if( socket_api_stub.counter >= 0){ - return socket_api_stub.values[socket_api_stub.counter--]; - } - - return socket_api_stub.int8_value; -} -int8_t socket_read_session_address(int8_t socket, ns_address_t *address) -{ - if( socket_api_stub.counter >= 0){ - return socket_api_stub.values[socket_api_stub.counter--]; - } - - return socket_api_stub.int8_value; -} -int8_t socket_setsockopt(int8_t socket, uint8_t level, uint8_t opt_name, const void *opt_value, uint16_t opt_len) -{ - if( socket_api_stub.counter >= 0){ - return socket_api_stub.values[socket_api_stub.counter--]; - } - - return socket_api_stub.int8_value; -} -int8_t socket_getsockopt(int8_t socket, uint8_t level, uint8_t opt_name, void *opt_value, uint16_t *opt_len) -{ - if( socket_api_stub.counter >= 0){ - return socket_api_stub.values[socket_api_stub.counter--]; - } - - return socket_api_stub.int8_value; -} diff --git a/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/socket_api_stub.h b/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/socket_api_stub.h deleted file mode 100644 index bc7dacf4a1..0000000000 --- a/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/socket_api_stub.h +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (c) 2015 ARM Limited. All Rights Reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * 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 __SOCKET_API_STUB_H__ -#define __SOCKET_API_STUB_H__ - -#ifdef __cplusplus -extern "C" { -#endif - -#include "stdint.h" - -typedef struct { - void (*recv_cb)(void *); - int8_t int8_value; - int counter; - int values[10]; -} socket_api_stub_data_t; - -extern socket_api_stub_data_t socket_api_stub; - -#ifdef __cplusplus -} -#endif - -#endif //__SOCKET_API_STUB_H__ - - - - - diff --git a/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/system_timer_stub.c b/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/system_timer_stub.c deleted file mode 100644 index 7de1ab64f9..0000000000 --- a/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/system_timer_stub.c +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright (c) 2014-2015 ARM Limited. All Rights Reserved. - */ -#include "ns_types.h" -#include "timer_sys.h" -#include "platform/arm_hal_interrupt.h" -#include "ns_timer.h" -#include "nsdynmemLIB.h" -#include "eventOS_event.h" -#include "eventOS_callback_timer.h" - -#ifndef ST_MAX -#define ST_MAX 6 -#endif - -#define TIMER_SYS_TICK_PERIOD 100 - -void timer_sys_init(void) -{ -} - -void timer_sys_disable(void) -{ - -} - -int8_t timer_sys_wakeup(void) -{ - return 0; -} - -uint32_t timer_get_runtime_ticks(void) // only used in dev_stats_internal.c -{ - return 0; -} - - - -int8_t eventOS_event_timer_request(uint8_t snmessage, uint8_t event_type, int8_t tasklet_id, uint32_t time) -{ - return -1; -} - -int8_t eventOS_event_timer_cancel(uint8_t snmessage, int8_t tasklet_id) -{ - return -1; -} - - -uint32_t eventOS_event_timer_shortest_active_timer(void) -{ - return 0; -} - -void system_timer_tick_update(uint32_t ticks) -{ -} - diff --git a/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/timeout_stub.c b/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/timeout_stub.c deleted file mode 100644 index dfda619110..0000000000 --- a/features/nanostack/FEATURE_NANOSTACK/coap-service/test/coap-service/unittest/stub/timeout_stub.c +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Copyright (c) 2016 ARM Limited. All Rights Reserved. - */ - - #include "eventOS_event_timer.h" - -// Timeout structure, already typedefed to timeout_t -struct timeout_entry_t { - uint8_t id; -}; - -static timeout_t timeout_stub; - -timeout_t *eventOS_timeout_ms(void (*callback)(void *), uint32_t ms, void *arg) -{ - return &timeout_stub; -} - -void eventOS_timeout_cancel(timeout_t *t) -{ - -} diff --git a/features/nanostack/FEATURE_NANOSTACK/coap-service/xsl_script.sh b/features/nanostack/FEATURE_NANOSTACK/coap-service/xsl_script.sh deleted file mode 100755 index d5320b42b8..0000000000 --- a/features/nanostack/FEATURE_NANOSTACK/coap-service/xsl_script.sh +++ /dev/null @@ -1,35 +0,0 @@ -#!/bin/bash - -# Copyright (c) 2015 ARM Limited. All rights reserved. -# SPDX-License-Identifier: Apache-2.0 -# 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. - -echo -echo "Creating report" -echo - -echo ' - -' >> lcov/index.xml - -for f in lcov/results/*.xml -do -name=${f##*/} -echo ''>> lcov/index.xml -done - -echo '' >> lcov/index.xml - -echo -echo "Report created to lcov/index.xml (outputs html)" -echo \ No newline at end of file From e27c7840d7bdfc13bc478e5d415aee613206588c Mon Sep 17 00:00:00 2001 From: Seppo Takalo Date: Wed, 9 Nov 2016 15:34:58 +0200 Subject: [PATCH 152/154] Don't clone coap-service, it's subtree now --- features/nanostack/FEATURE_NANOSTACK/clone_nanostack.sh | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/features/nanostack/FEATURE_NANOSTACK/clone_nanostack.sh b/features/nanostack/FEATURE_NANOSTACK/clone_nanostack.sh index 79eed7479f..5fe85ebe0a 100755 --- a/features/nanostack/FEATURE_NANOSTACK/clone_nanostack.sh +++ b/features/nanostack/FEATURE_NANOSTACK/clone_nanostack.sh @@ -28,12 +28,10 @@ # * Same order. Each line should have maching pair in same index at other array REPOSITORIES=( git@github.com:ARMmbed/sal-stack-nanostack.git - git@github.com:ARMmbed/coap-service.git ) DIRECTORIES=( sal-stack-nanostack - coap-service ) # Exit immediately on fail, thread unset variables as error @@ -87,7 +85,7 @@ copy_nanostack_binaries() { clean_nanostack_binaries() { for binaries in ../FEATURE_*; do if [ "$binaries" != "../FEATURE_NANOSTACK" ]; then - rm -rf $binaries + rm -rf $binaries fi done } From cbb300db9c614e4a2eb91b593c5f90de14962db8 Mon Sep 17 00:00:00 2001 From: Seppo Takalo Date: Wed, 9 Nov 2016 15:42:41 +0200 Subject: [PATCH 153/154] Nanostack v5.0.7 --- ...ck_armcc_Cortex-M0_lowpan_border_router.ar | Bin 754922 -> 759044 bytes ...ck_armcc_Cortex-M3_lowpan_border_router.ar | Bin 749306 -> 752868 bytes ...ck_armcc_Cortex-M3_lowpan_border_router.ar | Bin 749306 -> 752868 bytes ...-eabi-gcc_Cortex-M0_lowpan_border_router.a | Bin 602086 -> 604336 bytes ...-eabi-gcc_Cortex-M3_lowpan_border_router.a | Bin 592366 -> 594564 bytes ...-eabi-gcc_Cortex-M3_lowpan_border_router.a | Bin 592366 -> 594564 bytes ...ck_iccarm_Cortex-M0_lowpan_border_router.a | Bin 1424584 -> 1426212 bytes ...ck_iccarm_Cortex-M3_lowpan_border_router.a | Bin 1396364 -> 1398112 bytes ...ck_iccarm_Cortex-M3_lowpan_border_router.a | Bin 1396364 -> 1398112 bytes ...ibnanostack_armcc_Cortex-M0_lowpan_host.ar | Bin 517696 -> 521288 bytes ...ibnanostack_armcc_Cortex-M3_lowpan_host.ar | Bin 512860 -> 515796 bytes ...ibnanostack_armcc_Cortex-M3_lowpan_host.ar | Bin 512860 -> 515796 bytes ..._arm-none-eabi-gcc_Cortex-M0_lowpan_host.a | Bin 378984 -> 380828 bytes ..._arm-none-eabi-gcc_Cortex-M3_lowpan_host.a | Bin 371468 -> 373220 bytes ..._arm-none-eabi-gcc_Cortex-M3_lowpan_host.a | Bin 371468 -> 373220 bytes ...ibnanostack_iccarm_Cortex-M0_lowpan_host.a | Bin 928996 -> 929704 bytes ...ibnanostack_iccarm_Cortex-M3_lowpan_host.a | Bin 920258 -> 920596 bytes ...ibnanostack_iccarm_Cortex-M3_lowpan_host.a | Bin 920258 -> 920596 bytes ...nanostack_armcc_Cortex-M0_lowpan_router.ar | Bin 634480 -> 638366 bytes ...nanostack_armcc_Cortex-M3_lowpan_router.ar | Bin 629898 -> 633240 bytes ...nanostack_armcc_Cortex-M3_lowpan_router.ar | Bin 629898 -> 633240 bytes ...rm-none-eabi-gcc_Cortex-M0_lowpan_router.a | Bin 491786 -> 493828 bytes ...rm-none-eabi-gcc_Cortex-M3_lowpan_router.a | Bin 483298 -> 485248 bytes ...rm-none-eabi-gcc_Cortex-M3_lowpan_router.a | Bin 483298 -> 485248 bytes ...nanostack_iccarm_Cortex-M0_lowpan_router.a | Bin 1179236 -> 1180296 bytes ...nanostack_iccarm_Cortex-M3_lowpan_router.a | Bin 1163244 -> 1164678 bytes ...nanostack_iccarm_Cortex-M3_lowpan_router.a | Bin 1163244 -> 1164678 bytes .../FEATURE_NANOSTACK/clone_nanostack.sh | 6 +- .../sal-stack-nanostack/docs/03_N_usage.md | 2 +- .../sal-stack-nanostack/docs/05_reference.md | 2 + .../docs/11_API_sockets.md | 30 +- .../docs/12_API_network.md | 4 +- .../sal-stack-nanostack/docs/15_API_debug.md | 21 ++ .../docs/16_API_porting.md | 45 +-- .../docs/img/NanostackRfPhy.plantuml.txt | 28 ++ .../docs/img/NanostackRfPhy.png | Bin 0 -> 27907 bytes .../docs/quick_start_build.md | 4 +- .../sal-stack-nanostack/mbed_lib.json | 2 +- .../sal-stack-nanostack/nanostack/mlme.h | 2 + .../nanostack/net_interface.h | 28 +- .../nanostack/net_thread_test.h | 11 + .../nanostack/ns_address.h | 2 +- .../nanostack/nwk_stats_api.h | 14 + .../nanostack/socket_api.h | 308 +++++++++++++++--- .../nanostack/thread_management_if.h | 18 + ...anostack_armcc_Cortex-M0_nanostack_full.ar | Bin 1083540 -> 1096008 bytes ...anostack_armcc_Cortex-M3_nanostack_full.ar | Bin 1074658 -> 1086522 bytes ...anostack_armcc_Cortex-M3_nanostack_full.ar | Bin 1074658 -> 1086522 bytes ...m-none-eabi-gcc_Cortex-M0_nanostack_full.a | Bin 904806 -> 914974 bytes ...m-none-eabi-gcc_Cortex-M3_nanostack_full.a | Bin 890790 -> 900790 bytes ...m-none-eabi-gcc_Cortex-M3_nanostack_full.a | Bin 890790 -> 900790 bytes ...anostack_iccarm_Cortex-M0_nanostack_full.a | Bin 2066074 -> 2082630 bytes ...anostack_iccarm_Cortex-M3_nanostack_full.a | Bin 2015518 -> 2031768 bytes ...anostack_iccarm_Cortex-M3_nanostack_full.a | Bin 2015518 -> 2031768 bytes ...ck_armcc_Cortex-M0_thread_border_router.ar | Bin 798438 -> 808658 bytes ...ck_armcc_Cortex-M3_thread_border_router.ar | Bin 790166 -> 799560 bytes ...ck_armcc_Cortex-M3_thread_border_router.ar | Bin 790166 -> 799560 bytes ...-eabi-gcc_Cortex-M0_thread_border_router.a | Bin 611266 -> 618864 bytes ...-eabi-gcc_Cortex-M3_thread_border_router.a | Bin 599610 -> 606984 bytes ...-eabi-gcc_Cortex-M3_thread_border_router.a | Bin 599610 -> 606984 bytes ...ck_iccarm_Cortex-M0_thread_border_router.a | Bin 1450834 -> 1462516 bytes ...ck_iccarm_Cortex-M3_thread_border_router.a | Bin 1435626 -> 1446824 bytes ...ck_iccarm_Cortex-M3_thread_border_router.a | Bin 1435626 -> 1446824 bytes ...stack_armcc_Cortex-M0_thread_end_device.ar | Bin 675786 -> 679932 bytes ...stack_armcc_Cortex-M3_thread_end_device.ar | Bin 668606 -> 671928 bytes ...stack_armcc_Cortex-M3_thread_end_device.ar | Bin 668606 -> 671928 bytes ...one-eabi-gcc_Cortex-M0_thread_end_device.a | Bin 503982 -> 506912 bytes ...one-eabi-gcc_Cortex-M3_thread_end_device.a | Bin 494462 -> 497348 bytes ...one-eabi-gcc_Cortex-M3_thread_end_device.a | Bin 494462 -> 497348 bytes ...stack_iccarm_Cortex-M0_thread_end_device.a | Bin 1228126 -> 1230332 bytes ...stack_iccarm_Cortex-M3_thread_end_device.a | Bin 1215590 -> 1217344 bytes ...stack_iccarm_Cortex-M3_thread_end_device.a | Bin 1215590 -> 1217344 bytes ...nanostack_armcc_Cortex-M0_thread_router.ar | Bin 756386 -> 775072 bytes ...nanostack_armcc_Cortex-M3_thread_router.ar | Bin 748746 -> 766396 bytes ...nanostack_armcc_Cortex-M3_thread_router.ar | Bin 748746 -> 766396 bytes ...rm-none-eabi-gcc_Cortex-M0_thread_router.a | Bin 576770 -> 591504 bytes ...rm-none-eabi-gcc_Cortex-M3_thread_router.a | Bin 565782 -> 580232 bytes ...rm-none-eabi-gcc_Cortex-M3_thread_router.a | Bin 565782 -> 580232 bytes ...nanostack_iccarm_Cortex-M0_thread_router.a | Bin 1372756 -> 1400414 bytes ...nanostack_iccarm_Cortex-M3_thread_router.a | Bin 1358306 -> 1385454 bytes ...nanostack_iccarm_Cortex-M3_thread_router.a | Bin 1358306 -> 1385454 bytes 81 files changed, 410 insertions(+), 117 deletions(-) mode change 100644 => 100755 features/nanostack/FEATURE_LOWPAN_BORDER_ROUTER/TOOLCHAIN_ARM/TARGET_LIKE_CORTEX_M0/libnanostack_armcc_Cortex-M0_lowpan_border_router.ar mode change 100644 => 100755 features/nanostack/FEATURE_LOWPAN_BORDER_ROUTER/TOOLCHAIN_ARM/TARGET_M3/libnanostack_armcc_Cortex-M3_lowpan_border_router.ar mode change 100644 => 100755 features/nanostack/FEATURE_LOWPAN_BORDER_ROUTER/TOOLCHAIN_ARM/TARGET_RTOS_M4_M7/libnanostack_armcc_Cortex-M3_lowpan_border_router.ar mode change 100644 => 100755 features/nanostack/FEATURE_LOWPAN_BORDER_ROUTER/TOOLCHAIN_GCC/TARGET_LIKE_CORTEX_M0/libnanostack_arm-none-eabi-gcc_Cortex-M0_lowpan_border_router.a mode change 100644 => 100755 features/nanostack/FEATURE_LOWPAN_BORDER_ROUTER/TOOLCHAIN_GCC/TARGET_M3/libnanostack_arm-none-eabi-gcc_Cortex-M3_lowpan_border_router.a mode change 100644 => 100755 features/nanostack/FEATURE_LOWPAN_BORDER_ROUTER/TOOLCHAIN_GCC/TARGET_RTOS_M4_M7/libnanostack_arm-none-eabi-gcc_Cortex-M3_lowpan_border_router.a mode change 100644 => 100755 features/nanostack/FEATURE_LOWPAN_BORDER_ROUTER/TOOLCHAIN_IAR/TARGET_LIKE_CORTEX_M0/libnanostack_iccarm_Cortex-M0_lowpan_border_router.a mode change 100644 => 100755 features/nanostack/FEATURE_LOWPAN_BORDER_ROUTER/TOOLCHAIN_IAR/TARGET_M3/libnanostack_iccarm_Cortex-M3_lowpan_border_router.a mode change 100644 => 100755 features/nanostack/FEATURE_LOWPAN_BORDER_ROUTER/TOOLCHAIN_IAR/TARGET_RTOS_M4_M7/libnanostack_iccarm_Cortex-M3_lowpan_border_router.a mode change 100644 => 100755 features/nanostack/FEATURE_LOWPAN_HOST/TOOLCHAIN_ARM/TARGET_LIKE_CORTEX_M0/libnanostack_armcc_Cortex-M0_lowpan_host.ar mode change 100644 => 100755 features/nanostack/FEATURE_LOWPAN_HOST/TOOLCHAIN_ARM/TARGET_M3/libnanostack_armcc_Cortex-M3_lowpan_host.ar mode change 100644 => 100755 features/nanostack/FEATURE_LOWPAN_HOST/TOOLCHAIN_ARM/TARGET_RTOS_M4_M7/libnanostack_armcc_Cortex-M3_lowpan_host.ar mode change 100644 => 100755 features/nanostack/FEATURE_LOWPAN_HOST/TOOLCHAIN_GCC/TARGET_LIKE_CORTEX_M0/libnanostack_arm-none-eabi-gcc_Cortex-M0_lowpan_host.a mode change 100644 => 100755 features/nanostack/FEATURE_LOWPAN_HOST/TOOLCHAIN_GCC/TARGET_M3/libnanostack_arm-none-eabi-gcc_Cortex-M3_lowpan_host.a mode change 100644 => 100755 features/nanostack/FEATURE_LOWPAN_HOST/TOOLCHAIN_GCC/TARGET_RTOS_M4_M7/libnanostack_arm-none-eabi-gcc_Cortex-M3_lowpan_host.a mode change 100644 => 100755 features/nanostack/FEATURE_LOWPAN_HOST/TOOLCHAIN_IAR/TARGET_LIKE_CORTEX_M0/libnanostack_iccarm_Cortex-M0_lowpan_host.a mode change 100644 => 100755 features/nanostack/FEATURE_LOWPAN_HOST/TOOLCHAIN_IAR/TARGET_M3/libnanostack_iccarm_Cortex-M3_lowpan_host.a mode change 100644 => 100755 features/nanostack/FEATURE_LOWPAN_HOST/TOOLCHAIN_IAR/TARGET_RTOS_M4_M7/libnanostack_iccarm_Cortex-M3_lowpan_host.a mode change 100644 => 100755 features/nanostack/FEATURE_LOWPAN_ROUTER/TOOLCHAIN_ARM/TARGET_LIKE_CORTEX_M0/libnanostack_armcc_Cortex-M0_lowpan_router.ar mode change 100644 => 100755 features/nanostack/FEATURE_LOWPAN_ROUTER/TOOLCHAIN_ARM/TARGET_M3/libnanostack_armcc_Cortex-M3_lowpan_router.ar mode change 100644 => 100755 features/nanostack/FEATURE_LOWPAN_ROUTER/TOOLCHAIN_ARM/TARGET_RTOS_M4_M7/libnanostack_armcc_Cortex-M3_lowpan_router.ar mode change 100644 => 100755 features/nanostack/FEATURE_LOWPAN_ROUTER/TOOLCHAIN_GCC/TARGET_LIKE_CORTEX_M0/libnanostack_arm-none-eabi-gcc_Cortex-M0_lowpan_router.a mode change 100644 => 100755 features/nanostack/FEATURE_LOWPAN_ROUTER/TOOLCHAIN_GCC/TARGET_M3/libnanostack_arm-none-eabi-gcc_Cortex-M3_lowpan_router.a mode change 100644 => 100755 features/nanostack/FEATURE_LOWPAN_ROUTER/TOOLCHAIN_GCC/TARGET_RTOS_M4_M7/libnanostack_arm-none-eabi-gcc_Cortex-M3_lowpan_router.a mode change 100644 => 100755 features/nanostack/FEATURE_LOWPAN_ROUTER/TOOLCHAIN_IAR/TARGET_LIKE_CORTEX_M0/libnanostack_iccarm_Cortex-M0_lowpan_router.a mode change 100644 => 100755 features/nanostack/FEATURE_LOWPAN_ROUTER/TOOLCHAIN_IAR/TARGET_M3/libnanostack_iccarm_Cortex-M3_lowpan_router.a mode change 100644 => 100755 features/nanostack/FEATURE_LOWPAN_ROUTER/TOOLCHAIN_IAR/TARGET_RTOS_M4_M7/libnanostack_iccarm_Cortex-M3_lowpan_router.a create mode 100644 features/nanostack/FEATURE_NANOSTACK/sal-stack-nanostack/docs/img/NanostackRfPhy.plantuml.txt create mode 100644 features/nanostack/FEATURE_NANOSTACK/sal-stack-nanostack/docs/img/NanostackRfPhy.png mode change 100644 => 100755 features/nanostack/FEATURE_NANOSTACK_FULL/TOOLCHAIN_ARM/TARGET_LIKE_CORTEX_M0/libnanostack_armcc_Cortex-M0_nanostack_full.ar mode change 100644 => 100755 features/nanostack/FEATURE_NANOSTACK_FULL/TOOLCHAIN_ARM/TARGET_M3/libnanostack_armcc_Cortex-M3_nanostack_full.ar mode change 100644 => 100755 features/nanostack/FEATURE_NANOSTACK_FULL/TOOLCHAIN_ARM/TARGET_RTOS_M4_M7/libnanostack_armcc_Cortex-M3_nanostack_full.ar mode change 100644 => 100755 features/nanostack/FEATURE_NANOSTACK_FULL/TOOLCHAIN_GCC/TARGET_LIKE_CORTEX_M0/libnanostack_arm-none-eabi-gcc_Cortex-M0_nanostack_full.a mode change 100644 => 100755 features/nanostack/FEATURE_NANOSTACK_FULL/TOOLCHAIN_GCC/TARGET_M3/libnanostack_arm-none-eabi-gcc_Cortex-M3_nanostack_full.a mode change 100644 => 100755 features/nanostack/FEATURE_NANOSTACK_FULL/TOOLCHAIN_GCC/TARGET_RTOS_M4_M7/libnanostack_arm-none-eabi-gcc_Cortex-M3_nanostack_full.a mode change 100644 => 100755 features/nanostack/FEATURE_NANOSTACK_FULL/TOOLCHAIN_IAR/TARGET_LIKE_CORTEX_M0/libnanostack_iccarm_Cortex-M0_nanostack_full.a mode change 100644 => 100755 features/nanostack/FEATURE_NANOSTACK_FULL/TOOLCHAIN_IAR/TARGET_M3/libnanostack_iccarm_Cortex-M3_nanostack_full.a mode change 100644 => 100755 features/nanostack/FEATURE_NANOSTACK_FULL/TOOLCHAIN_IAR/TARGET_RTOS_M4_M7/libnanostack_iccarm_Cortex-M3_nanostack_full.a mode change 100644 => 100755 features/nanostack/FEATURE_THREAD_BORDER_ROUTER/TOOLCHAIN_ARM/TARGET_LIKE_CORTEX_M0/libnanostack_armcc_Cortex-M0_thread_border_router.ar mode change 100644 => 100755 features/nanostack/FEATURE_THREAD_BORDER_ROUTER/TOOLCHAIN_ARM/TARGET_M3/libnanostack_armcc_Cortex-M3_thread_border_router.ar mode change 100644 => 100755 features/nanostack/FEATURE_THREAD_BORDER_ROUTER/TOOLCHAIN_ARM/TARGET_RTOS_M4_M7/libnanostack_armcc_Cortex-M3_thread_border_router.ar mode change 100644 => 100755 features/nanostack/FEATURE_THREAD_BORDER_ROUTER/TOOLCHAIN_GCC/TARGET_LIKE_CORTEX_M0/libnanostack_arm-none-eabi-gcc_Cortex-M0_thread_border_router.a mode change 100644 => 100755 features/nanostack/FEATURE_THREAD_BORDER_ROUTER/TOOLCHAIN_GCC/TARGET_M3/libnanostack_arm-none-eabi-gcc_Cortex-M3_thread_border_router.a mode change 100644 => 100755 features/nanostack/FEATURE_THREAD_BORDER_ROUTER/TOOLCHAIN_GCC/TARGET_RTOS_M4_M7/libnanostack_arm-none-eabi-gcc_Cortex-M3_thread_border_router.a mode change 100644 => 100755 features/nanostack/FEATURE_THREAD_BORDER_ROUTER/TOOLCHAIN_IAR/TARGET_LIKE_CORTEX_M0/libnanostack_iccarm_Cortex-M0_thread_border_router.a mode change 100644 => 100755 features/nanostack/FEATURE_THREAD_BORDER_ROUTER/TOOLCHAIN_IAR/TARGET_M3/libnanostack_iccarm_Cortex-M3_thread_border_router.a mode change 100644 => 100755 features/nanostack/FEATURE_THREAD_BORDER_ROUTER/TOOLCHAIN_IAR/TARGET_RTOS_M4_M7/libnanostack_iccarm_Cortex-M3_thread_border_router.a mode change 100644 => 100755 features/nanostack/FEATURE_THREAD_END_DEVICE/TOOLCHAIN_ARM/TARGET_LIKE_CORTEX_M0/libnanostack_armcc_Cortex-M0_thread_end_device.ar mode change 100644 => 100755 features/nanostack/FEATURE_THREAD_END_DEVICE/TOOLCHAIN_ARM/TARGET_M3/libnanostack_armcc_Cortex-M3_thread_end_device.ar mode change 100644 => 100755 features/nanostack/FEATURE_THREAD_END_DEVICE/TOOLCHAIN_ARM/TARGET_RTOS_M4_M7/libnanostack_armcc_Cortex-M3_thread_end_device.ar mode change 100644 => 100755 features/nanostack/FEATURE_THREAD_END_DEVICE/TOOLCHAIN_GCC/TARGET_LIKE_CORTEX_M0/libnanostack_arm-none-eabi-gcc_Cortex-M0_thread_end_device.a mode change 100644 => 100755 features/nanostack/FEATURE_THREAD_END_DEVICE/TOOLCHAIN_GCC/TARGET_M3/libnanostack_arm-none-eabi-gcc_Cortex-M3_thread_end_device.a mode change 100644 => 100755 features/nanostack/FEATURE_THREAD_END_DEVICE/TOOLCHAIN_GCC/TARGET_RTOS_M4_M7/libnanostack_arm-none-eabi-gcc_Cortex-M3_thread_end_device.a mode change 100644 => 100755 features/nanostack/FEATURE_THREAD_END_DEVICE/TOOLCHAIN_IAR/TARGET_LIKE_CORTEX_M0/libnanostack_iccarm_Cortex-M0_thread_end_device.a mode change 100644 => 100755 features/nanostack/FEATURE_THREAD_END_DEVICE/TOOLCHAIN_IAR/TARGET_M3/libnanostack_iccarm_Cortex-M3_thread_end_device.a mode change 100644 => 100755 features/nanostack/FEATURE_THREAD_END_DEVICE/TOOLCHAIN_IAR/TARGET_RTOS_M4_M7/libnanostack_iccarm_Cortex-M3_thread_end_device.a mode change 100644 => 100755 features/nanostack/FEATURE_THREAD_ROUTER/TOOLCHAIN_ARM/TARGET_LIKE_CORTEX_M0/libnanostack_armcc_Cortex-M0_thread_router.ar mode change 100644 => 100755 features/nanostack/FEATURE_THREAD_ROUTER/TOOLCHAIN_ARM/TARGET_M3/libnanostack_armcc_Cortex-M3_thread_router.ar mode change 100644 => 100755 features/nanostack/FEATURE_THREAD_ROUTER/TOOLCHAIN_ARM/TARGET_RTOS_M4_M7/libnanostack_armcc_Cortex-M3_thread_router.ar mode change 100644 => 100755 features/nanostack/FEATURE_THREAD_ROUTER/TOOLCHAIN_GCC/TARGET_LIKE_CORTEX_M0/libnanostack_arm-none-eabi-gcc_Cortex-M0_thread_router.a mode change 100644 => 100755 features/nanostack/FEATURE_THREAD_ROUTER/TOOLCHAIN_GCC/TARGET_M3/libnanostack_arm-none-eabi-gcc_Cortex-M3_thread_router.a mode change 100644 => 100755 features/nanostack/FEATURE_THREAD_ROUTER/TOOLCHAIN_GCC/TARGET_RTOS_M4_M7/libnanostack_arm-none-eabi-gcc_Cortex-M3_thread_router.a mode change 100644 => 100755 features/nanostack/FEATURE_THREAD_ROUTER/TOOLCHAIN_IAR/TARGET_LIKE_CORTEX_M0/libnanostack_iccarm_Cortex-M0_thread_router.a mode change 100644 => 100755 features/nanostack/FEATURE_THREAD_ROUTER/TOOLCHAIN_IAR/TARGET_M3/libnanostack_iccarm_Cortex-M3_thread_router.a mode change 100644 => 100755 features/nanostack/FEATURE_THREAD_ROUTER/TOOLCHAIN_IAR/TARGET_RTOS_M4_M7/libnanostack_iccarm_Cortex-M3_thread_router.a diff --git a/features/nanostack/FEATURE_LOWPAN_BORDER_ROUTER/TOOLCHAIN_ARM/TARGET_LIKE_CORTEX_M0/libnanostack_armcc_Cortex-M0_lowpan_border_router.ar b/features/nanostack/FEATURE_LOWPAN_BORDER_ROUTER/TOOLCHAIN_ARM/TARGET_LIKE_CORTEX_M0/libnanostack_armcc_Cortex-M0_lowpan_border_router.ar old mode 100644 new mode 100755 index e877b3d6a4ddd9bd3a071275f17dbba1d6224783..d7dec0f57244a646beea361631934f833b7ebe81 GIT binary patch delta 111129 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 JgY|CG{{e;e$i4so delta 106580 zcmc$H349bq+J05{+__002MP2{fJ}fu!eu~?Ndf~wKrTU1G~rA*!=-^lC*cwz#z2$` zs2E06KvWJP=o&YutHQcEQE(B(?YKbj26Y8j#sBm6R1n?uTlaJK{|&#&(@)*UTUBoz z-K^Z%?W48bs`~kQW%SYLm*-&2`~qXY8}-ZP-ByfUY0ivg>^B#}+dF@srZ{o@9!$@gGgNmnm18_AfK#zhQj;jYx;1 zQ2)$KdY&miGrpf&`~zS75mWw|xoaL%e!KDgCnEXhaU31Xlz(Y_S9tp7b*B86je6B^ zcG-CF?4v)wWXAVl>i^dGCL!|w!BoA^R2U!qG0bDjn0lqzeS)d~ZF8!fkEy5H1Az!q|JjHiJ-|%=mht@?0p1?S zOfBXwW0~nnb9NLnU1`3kV5VPVeDGve7yh3a-~ZRd2RfMfr^feli(lrG+c5M0WD1Tj z^S^C;zYys5H<`J`RD8tD{~L2?5;OlR2Xng;di6d>_f2H)NW-;rpGid)`=h5(Ii*+%>v`=8R9-EnM@ZR5Oe7`b+iSIMp zf5Z5GOQiR#X13pGe7`k<-x%Kan@jN9GT{4dRcP;ig#9Mt`>hfDn(zz8GJA_D-^lD_ z)>;hXYkBxTLf_?_{Er!UZ1-}SqA*r4ISH|}b0f!7^A^-o( z;9sBE+-F%xi&^4jAtj%+nCjPK6ZdV8{hJ~tJ9t;I;vU{gj6ST`MR)ph?J286R62Nq zxZ$wUsaj94iSWZpoOsgCHKEVp4)M@EJWOn{^GJj4d!lWn%RYVaE&217-ZHbOnh%WI z*Kc4xuYPS%qL?_-6kDC<@ryfdF}D_*XPDYnf8_Z@Sv+5~KWd7rKA#m+y&=2xzV6u{ zMXECvPOnZH7h4@aE==stHz%4FPS2lKT{Ui=DCbJ+>XU`GeVxZ22@!`E^00kc-dR-? zHd^BM^_jNVBEq8_)`vfv)k&Nz;vL1!0ek$u(d(bGh;I+uWA_cJskV!vxsGHp5`Xsf z^FL>)-nAoaU-FLcqAk7p^yr)3Q;cz0WB2v1-^F=p^@q=YZ02Tuw4wT)-%sUl?i=xR>a6+{e$&3W zXHT2jzwLiFH&UZioZe^yBkN1|hkIkZX0OF{ta`zx-TB(;t)GtcMedJgp#g_?QzH3h zZgYUU`0NczR1TlYwa9t~^Gkl#|HMx)d^p0hf(?qQ^V#I?na$kaG(PCRU*;#WzG#0N zujXPMTix_&POIvDpS9*?)rUVzR+zc^v(F0n;_8W?&*YQ#{r>X|t}s@8?wl4|w6Jjg z!otN%wHb5rXKGXDOwV7a<Z~Ktyr6pW*KN%;;G@N*J(gJWSv-z69(n)jJzuxw zbE^OJbqY_c{@d4g`u5w|<)4Y2|6%VHoH5Rx0$+UD2WRBI`U+0&XRhGn{`D1{+`m>^ zEP~;SOqaRONT9RrvW1aA3uDaAb|M1$;k1jX__s}RibG}QpK%M@BHbyBiUQpE6K-cQ zS8&FB=YP0>cA+07z!Buz%b6i=Wq$#`kuz2dcLg>tg1-fxE%_Gk)`;U)$(MrP1wKXc zso>4X?Ig*Eg42%*5amK2G{}sFxmk5PZDkZy~b-P^cFFJHh9I@0RX&f+wNY!`Z}O6|RL){8+_y_M?QN zjZn3d5TNBpeE1c-75LRZ<6TALtETo*rk`1VA~Mcd+KYl`l*p)BRCvpeqNo(-CtBN! zbK`hq)U=j5#i0$z!uT6u>vq9CeUdqnPY_Sks%?8yv3pS+$sZ+| z^fUfLizATS&sS%B(7yVn@Bd_<%2*^U9eLF~E?vcER?oULG=3T^5P@SbW1)nD(BOmx z)kiM1x6fc~7_sU5zPRM)zG5`71MT~O#Dj!5%|1a0Ik+h8Lm>u^F^sh#%wnu7AzFC^ z;RLiK;Vq0UBh(n%Ksb!CM+rwV_7Wk&en1M4GkIAJzpV+j%PR>GSZ zt02s0>>%M3#*PwR#n}6VHzH!faTrP%vY#U?N3?LMJ9Bny2B1$sfyaO_SRxSi4jXz@d#cknqbXiL`DRU6pWTW+mB@hB5UcyXdx^yOh|DV%|t4Hm+AMv$x_`D+)IYZw&7Wz9@!Yql{G^XRcIlrZ=chs3+ALddgd=JZ`zdKIx=s zhj}|+&#DT%ImgGtpA9F_r3cS43<+U2Tz{_s0i;U%;C^4FA>`kq#A;$u)vDdTC z)&P{9MiH67Yoos!nOeY7ZBSh_BUzXCym&Ez_YOJbSM-nlO#j+{NvLgkPRM7ul$kNj zpZY%%W7_ho!cH0%>CKwATk}bAUt8|v$3$IQo)LA}aAEG`M$KzWx42#w-@sb^oqwN5 zOXR&H_W2)?I#Fr;0l!}?NaWY3kNNKrzfa^TQ4brTZP33Oa%}Y%_OB8b5)ro$@k#vZ zwpD(Ip;2-}x9eMQcx`?{dA8+bwSTIZpTyhqY2uzFp3-sr_!-m3u{Hi{WlEzo&*TQ{ zkbtwoyi+d-*6={_ZW14PQ*5B0*XgwxmBziSyD5-a$;|v1*O;zo%r)C-rSZzB{stC|mRB+NXMqEHzouSIn98QL;{}|b7oWH1Sv*%{X#6_fDDKp_ z)3R2v@=8+qPyCRmO`0yWZC@sx=EPM&aM zPKn#QJKbdDjk!BE#_I>I>y9y3OR1Q9RUl6m`mV++?2{8vreM^0XRI~MVm)@yYCamK zxhE)_sHE44Jx-nm4OQq!h^N*TqdXVnc!<`d1lrtU#EkL6vy@?Xp~Nv%7GMfJft zHV3}&pO!y6_UU#$O^H@50xsxB4fDL0$P!wZNYv*3!d7e};IgEAJjQO3GeZV1(Z#BGP!0 zI>MhIx~K7R7S?#H?$gBsY5bFsfA?RKIc}wCy=sdTEw705edgu?jP-hmTsxfGZ}r}} z`z!w!GMmbdVE^pzE$gMtVQyRFm;R5%8{PP-s6YD;OHZ1&1H}HgnBJWaP!IbLh)25f zRP{ywjc`!s)A(;UB3dhXTKxv9wi zKKd`U)Y-X|L{7mhZ-}#Is7YVoj}^`yykp3`++fSh^@oTtJ$Q64-Z;yDQvX=TG?P1O zs5bt3ZAO0K91N4JD^!??`Lm~Mqx0wGYg3kL+4JWwUbHa3h}AvWgI99?jVSEFogwyP z!6?r`8ghE^!jR+sw{jJ2to~rY9ALccAZLUXh3yi9ZC_vR@fHM#0`3T|-;k<^D@ORYAq z5AQM3SSWf`7de{T$_W~}f(ytZN41?49kurlpP3Vgl|;k6Ar7N@EzF z!UF~V!Q#_CylvY#{{GUF)7#c4*yqhf`z@?fV7^GcieJ}n(lA!Q+#vy%H`Gb#2Fpr| z)?n(~$O9Iz-dI<~gtfPmACH-ZBhP!U;_e>VeyeVC@`W39a*1$T-pcW-GD)r_)>oi` zsX>jl%wMv&fYlAm$BNACNI|1iuKE2X3@}6 zRJPfx_0o#VtdYku#rJ)oMD!5Oe*Cden=IPJdJM{M_TytMNy|{WtmxvE=2fQE>YYj@ z&x$UB0$}{sh^#E$w)GjP08r|T#Rb`a0-i`KXR|Ge)bRD$82vVity$1A^j2bPlerCc ze44T_4>bs$&D-*iL=yQ)7rnEgZ#bZDBp`f@SU`>w#N7ld#g1$!G;Ks9vEAa+Y=pmF zgyjI*i8O-EVq^}FRSqVItYmWn|GOy9;cd;=Lk-y}>O&o|NlIc+BhHGxV))i7YQ~8#T=hbrwmsw0Du1 z3v1<+TRio$wM|{Emz%h+RhW@2{Ne20c*aVhI0k>5tp^_row$XQyM6^H_wT3@j9)PP zcd$>B$}}UlJ5fl7~CuQdUA)M z^*Q;Uhv$wkJtQBA=ZP@gByZOm3;R@*JWeL~J;dRADH#;OS@7171F9_I&x2=>gh;*# zJeTA|@*?oZ!6!)W1?MC+lJ^2n0|yxKg~yD8@W6tEh!UXEJVHVvJ-i5hnnXwPhrp*x z`62(Sz!!iomhO|uzqs!jzQ{*I4DFiqLj|tI*nu^l!4tuo<=8^*7f|7!(%2&1-vd8{ zXj*nbUIfoThEGWMhrm~%5;rKp_{za!Q6Zb9`*iR z5&wM-9K3>6Nv#n*%bAte|X9EXuO zP&tK65kkJ!5u%o=2-C0uL5NzfC7g%;OE@3fd5BxdU~Dwpgb>N^2+>C2D6L};IvpV*>_CXB97PC!lL+DORzeh{jBpTR8wp=U zGZG>L&q;oia5L7pgvn^eOZ0%8+0cxR9MmEqB6Jas!u}xPE@%scNN@@vGDLFWcmfF% z`cYy+WUz+tAWBMD$Jq1I{%yi%kRD+cV{XW)!*>?VL=WB2DG3q53_^G)lenGm5ytis z4#5@*;R2LEA_*dea}c6tVhE98>WPkYY#RWn>Fy=G7TW-XXu1HloUu8C_hA?!EJB+~_k)DX7&{{QMZ)DM9mWsG zpD_&*o^UU&6c58wh-6D8qF$O_O$BiC`VK!j%q(JyJL zbW~%=mDq_8?&BrSllF@VYak2KzCvOZ;RsCG(tR5t3iu@98H|X8=!PG(qyE1Mo55r; z45~LF5>na&??X)xBBC~guy03r4-_oPGYL^+gC!qDcr!9e_zq@d!Yxn*2pdq7gb=<5 z2$7M!?R|K-jj+;?f5L~+{)6cO{dgfEs<>3* zYQj5^W5UHyFr@vH5)VrE*9jM4{Ytn4lNsSIWB_9djU#;sUxm(02=^(3D99ZK`Y<-r z1KPWa5CI>M9<~u8=LZQfJ-q@EBmP(+A+|1^*i?ux;N5?V<}5fCDS8wg9$gwlSO zUR@@OU6) z?0UjJ7;*`FW11#JflBMvPv^0!ud4;T9rOr75^l+dNj^vNBFWcCzE1L5$+t=Voa7CX z(*Z5Te^zpvHOT3V3h7}xM_P0UTChyX`%6Ar^6`@ANj^>TGRap;zD@G&l0PSTgXFJC z9xym$>y)%OD?NNCIkN?8B#sazNR+&nkbJb{( z77fzFYmx^fKP&ksbz^4nj}!PhF<=!oKN>{-D(t7cga*AwtiRiy%*Ts8u(4d<6>?)2 zH%D+6ze(`b*c>Y89Xx_sF2;cJ*ThnQeb-=2xe>UzP@UhbiNmY;k;|7`o{X`^*6q2I z_XxdgwWYr$PAK>CvAk4VcQ3yhu>M~DR~{jj+{YgSByHr=`R#QpHu7<}fg^6YU+pNq z6Z}~oQCC;PUy2CE)GLGT(zG%6&A6(ECK_FeTl`@=uU8`j(PGsO-ab~| zQ>7QK-JYmc4bk@uQ>0C8ao!@6HXuo@>Zk7-#xL9I3sZDfGh|L{-HnaKs6fHe22p|t z?ahrpXg|PWli0D7ckg}oFq4ZTd0xb{La*(%kSfi~^!uAyrz=&olgZqc0M{&4D~7R@ ztm1T6lpg82Q-nRvx{XqTZh2bO3k}6-4++xhgAhP;M38*?E-YJ70l15KmqolJy!K- zW@Ub`VQW%xgtt4xB7MZ7f;#B0IsDJ$25(vQ5Cfj#?d@+j>zd~Ve$Vek;ZwYKj<|fn z5iHEbdP^6zu_^I!BeN|D@|J|#FW=i@$J}QF>z#b{MREEmzQ|gd9u{Y+StD-Q&4(u4 z=D%5{df24D+ zydT|NtT=5syNjG&wMKN>!!skc2e`!^p`<1R5ZzI`n7fDPCfEWtw>1z6VPcxCh;JHJ zv{S!FuhKW@b%8w`2a+a@=_;I zQ927AE!J2!rN!A28unVNSPjOF2?zL1saN?&pE1|;AKqYV=e|8)-jr**EtN1T)fecO zS`@IP&JTom=jrpsUk>nN18jPz9-&9+9sSRoajiCQ$|#D|Q*xcFnKPp(OsBuD)mA+@ zcWt6-Fbys0T>XP{K~ZYkQt?9_@6OkY?gx2%x0RkX2C}#N8kmqFm}5y?;(#D(|*T~=AXkv5d3l0Xo61Q_>sR3UKa8rC-*g1aB{yG_EY!Q!hhuC zK1*zRj^D$t6RGuloYTl7cB+KR*agZjhXJnyw^LT@9<1jV6yHaPgf?~3;qLHYktcDK z#1|yG6u4uu8b}C#rG%KO-j@6_rIf zB}|5HO&Eja4Ph6wJ0X_I8wlZVCn3Teko+~tk4yfUr|JB7T+-;i|=jfou7Ap3T zO>`@)AVlMAQ>@5aWe(-93jRlEZAV)LwYJa17*L)mmJ)0iTLEU;0`Z8(O6YyKb3`@; zunAre;vb5v*Wk5TloyA@in7Iy`utWMufPw zCbsZa0s9p!KEP`R&*`n7ElDrRELIUdvxsZv-RJ5HiqneF6`HZzh}2ZGRXq3(Z#$-Zw+XXy=oSX8Q>kIl zPC^5o+>jY@_B4x!Qk^B%=YPLHCHn$BKUY|9DR zWGjl)vf3&&_Be;34W8YbDqcCkyYQLf%M<(=9xk4Em&f~h`ul7RDnliD?^;%%R<)`r zON^*WH!6aAYuCCn%d_V;8v5#D^$FhF^ptr!CZqdURfdlMr1_-yybHfTWt!jVW~>sGbb@Uu^9D2T2s2cbuuaNlPn>-RiK4Q}6BoWIH@-aE6nMzLwa)oI zU%-7A_J?{kZ{_Z_m8I#SRkk>5m0sD#>q%I(*PUj13wNQ4ncd=60#^?Y?KfC|64wv9 zdDHh&d{%Zfbmo{0n{gS0x%+`RIOQDDbW-f4SVY-CX6^ZmD8H z_i!v!Ot`O?RlzFCvpb4pop*Fcp*P0)W2LHQ)nolJ@;P|vD5%SR+$`ql+!Y>LV~gu+ zsA_>`=r;#-{;d*@aozZ>=1@<#7?hwUnCX=8gmJ!~HV1Qd8R$>W_j95Plnp;scs{{& zJC+X3`9R@0#bbS#>5Ly;VYMOdpIn^CiJqlQ2u2{i{RlIWTFZ}K8klwkr-Su;@DZjK zADoeU@fDohC)s>Idbsh52)!&-}xWjxPo(LV)fu;g*_Wa$F;jau#dyOkbDdH zoiKE-nB3O`tC7YD>AnJdZZBDH704^u5&@uhvgbcq`YHRue42=_K2^n=eN zQcEh)m|h8^unT5_YNlXzy`C(fJj9S5hk2Z?@zY%Yy2Mk2h`1A}U6`L~JIsN3Ka&vp zLop!|w4h=syq6FKSVPzWd$okI*i4rABw=e(&#*5`5z#J_1M1aRgqWx=5hg>YATN}@5h9P&Qp6i1KPCBD$-k2va$@*T zB!qvhZo!BA4PJNS$NWBCefybMWu;Aw`c`rAgLDfzwmNVo68g)SPoZZ-pu(Yf^m23v zMa|@)$c>zIM9k94oonE14U$aF2w zt=n8J+?F1qTU>L*i|4sBBJ!A8)A#a9@1Qt;o=2OXY__>>6!tH8GaoF@f5D@L?Mq%9 z&0S3Qxby;+oR!#=rxXGn8v{nkoboC$NcwJK!0P2BJ` zAA)Ln=xg3X<BR&+ zc&Y4o-Mqi^PMn_=_kGK!4tSo#1~T&u#APVOCHW5U6pE0<2<`%So+6Zd4e%S$`#Y?f z->IAa9U3k_6v3&-bS6ZH=p%74A$p!M6hPn)O8ZwO8p}lZr?&zq+$BQ9(+bJc5TOym zzE)&i;_ZFAkqZX|@Tf#%;Rn%MM;#sB@~A^6%XJqzsn z#yb@l2(pO-M-if*77>zY6Gr2@(PnzU$kRaB5mh9S_MK@#_%@*vRVn$!x~L!cRVG~3 z%T<+R>C zIC>$~y$w6N?RlPf0+vc3Qrx`S+==VrdkQrHxjh){h~Y8x4ndrlVOFAo?^qfOg*c^e zQ1gFI95O3g)d9F2I^Cj-28fNhPJNa(+Jeba!AYBU`@^u10rFw3vyC`K7qQ85qFc#G&ERnEaNYV zldw^i*n`#AE=q~Iyj?zTxjLb4U6hh6YqY0m`VKFd{K=&p>D*GsPTdq+_w-1mA6{TJ zn~yfseK|^bI{eDFT2aSXXRerVC{v;eZ506f-A2~-0p52IO5+ccak%`4%guHzH=$sOye)pGN(T+{(7(C zZ2i37FTHVN*<$zEGeCiu#x0%rsF=-=sMCW8%(Dcpi+j4=N}<#%|=sLK{532!y! zZc&D+VSgK`qE5M%x8f`R1@YikrFX=~{tsnyoNoSdf4OMdszfJ-9N*17ncK6i?{cFM zeZB0y;HKrJdJ*GSmf1_wukzaC%C5RtC;W;XIj-CKu=1@b<JQKGvZHADecXE41mx67_Ipx3=5+~)NUo(jv2y88F!6$W5nDkZrF`x zs1!@V%r2;kJp^BCir$!SH<>AiA_OfPoTh{mzl-)TUxTR#9!83P!ZYrsQivEYm)78kb9 z?@`)E1)!y)E{#jVyMf1rbFXrv?^Uuhes~oYV_q3)UXmw*kAi98X!Qq&BAc-inHT1kIEUPsGomAs(j2ko**$ zuR|rjD*Yb;{|0r}U-GBHd)J-Zr(DZ@n@Bbgj)wg@JpUEOE4jdPDv5{WcY!aJ;z9oJ z0B;6=PP)$opG-m^`E}rrgCmnh{9fXiBTq^9o_4Gg?t%6}o68ho1Uw{@bVv{Mrgaj@ zgyg5duOXq3{LkQPNhl;g1ilA+nB;rF%_IeqSA#zYPEtVW`7pY$LnH>$VkSI%41PxP zao~+oC@27(KEG2p`G68_^EKd^u3x+dG&U-cdD^%vCB&j<4UjIZognNAJJb~2^NJxH zhSrccO4?76xRMY$QWfD%xGO|>En1gwGDMtk8EWn;dVr`{(46$P8V?j9n2zH}(by$3Zp-QT5Lgj%Dlv!ik8G@OtbFNwmZS z?IR_|NpumSp!6nzqY&+HT)jmE%g6#%xLkUCKziIuSb$9r!kK78X@7=r4B8R{74_?M z!VwtM2;*^2`9aA8k{^})oaA3g9%%}u7eg3tT6D08n^iujZs{w^g)r=i zEjWg)taAxsV3E0#nJy}4i9L5J9ZX5+P$FZtDcM|r$F3skZ6!JE-ehzqd+@#fM3J!u zI;=@dejAI(r+bTT3$QwWPCNl>-j#{(h!{I&ytViqHn_^Qb*VL0^#8MR`8!Cr-Re+}#3S`9G8Py$U<( zwQE>a{!(T>Y&jeO&57G`9Jf@R%hd`zak<6`TiISaZfrc9)UcOTQAGC54&(K1Z7HkD z^gf(4__7V1+5Ne3H;&R$0!{v7GLfeX+UZ*HEN|q3ykfp%^a3SAydS2pDXXL_{pGU+MA@qS|{PTlMQoSz4Z3SRen5{vTcWo$(S1yjOA(mPlO91#QFQ6?5< z1h@~MmB86hhxT3cvUJZJ#d$b~xjO{3Zmu^yY1&&^vsh}oK-sJeYh=0|Z^=`th`%w; z8C;~A-RfHmue@4ugu?F2@P^)R*&K9XIK=6Xn=*9V^SR(Bu)yOY>x9xexh16atrh-R zvid2GOZCZKDiPbr>ux`xq;lRzJoYYftBP0NRX()xst@ntWn9#~r*!1Y#L4%RG_!)& z{_{n|Nu{Gb#5-(OWY2i7M+`WLqpeh(rTmaHPFKYIlS+J+YE*nWZdKWg_jb8F+qANf zMqZQVV)u>ZkX5WPzwqNHU3PP4Wit67UII&;@-9NSC&0 zG9`aBd6Eii+dAsxKjyu*(U3@VJp4kkA%FsHny^5h*3?@(G!(~CQV9!Zk5xfcQ0w5P3VR?L)aZPC+&@6HKa$k$$hl@ zUqcS5$N=F`)CeK^_ijQ=iO))Wl@J=_n}mIkAOzLng&szT42&j(`}KtVpr#NGgKQ9L zkOjhAXqtqOZhQg>%b07Skdeg@L`;~5brm7n%mSgMh}%fKo^TL)0^!x@h=iSy0O4q? zA_%*pMhTse4MN0gT)*lM86%GP=(4xN1C^Q1m}zzJ8Cf95Ul0z%@`A7nsu&%gG{{gw zbf@=#3YMxmA=KGZgjlxHU_m$2E)t?@>5?GTgt6F%vY$X4%6n(R0gwekG}Xd%dVq%- z!Yn9I5}%Z4T>J`0j=_}>EZpiko>Njn_)#(PTbxYT#DZ_3#)O85c}^uo90K7Z#D@eA zh^X(N(rknBe9kxzSNSJw@&sOxD%^$nZ)DWKl2UW;oqVGcE)uNLziYP|ZIzEj-gQ0pdk*1PMY^aZ*} zf6zTPu*E&6aT31#5j;&a=|gmzE}y-9<dcJoS11@5Ftf z>g4EB+^S|(413tP2dp#gV*L}s9Hx$GUz(|}*1Q=dS~_2}prm~9U|iDnX!K`wA|EdHg{wEJz5IzHDncEA+PO9YcfW?{Vorp*&Y~eAYqPi*p}G*F zZKT>4KCX+zrJjr8wn#Ol^}aK~51^RXH^xO^bTV|K?BXVu47G zLiju}Bud>1Pt8$k`;NgZlM5Gn z5X9kV_4d}G{>ZJtkN*Tigg_PBUN<>LEi?1i#ryF%oPGfdj4IlfZEGGIjRm-H4h?B* zruFrEA}Ykz*8B+`H;6IbkT_FoJdti-j>O`#lmbPExiK@*kJhV!x&sNSmpjuDXYj|_ zSLk!kUBSipiHQq1s2ld}cZK8jy*x`G)+sYret{B9$OLy77wJnePNM>Lz# zZ2KajuYy0~Pl1o4a!5{tW>nqCc50b@%ydl3=&ZEdzljio_AJ6%FfS4=#n?(X5@RbN zW|4!0#Te`f=U_-8oGrJOV(Z$u)hXOZJI1uUT1kjuWg8)enIk|NKR+YH@b!0zHsp_n zu{MOT??8w|`w=d}4lf}xX}rHY3OXEd#8X9h9VTl+gnKlIzToZ&A~1GO;P4tbAc3QV z7+{Uv6hwHII3oNy7?AZq1JEYOFhV3yOo(u0ga}tfi1>_66U;Q*B|kujjL>%<9M@rx zepNcWO^A$~B1A$YF*Ja0AVfq8T9B6biG;B4Oo$A42tC-$AjAMXLt-)EZSp;2Ov--Z zm>~`jB7?6ICSodipB~!7VAQAA0NW6v#EEtBUDSb>&jE4MGp=q)KlKCK%YO zY|CW@_5xc%-%`pr}TzSYZ&6-3@j zvNhrDhv4-};^_;9<)*K(ud%_GyHsrPss$ml^z?+)dtF|)v$KdAs?O)owuh?8;cWwX z>mHl6JA2nVk2T|R+U}uh2Nl!Ng5g%$(ZE>_o}zh$z?a`*&5y!nv^al_HCm)!qekMA ze%3W=dtN2-32qYQ1mB6R0COf(v+&E;Crm=S&SVn$HR>>Y6eo3r>cc_bjuC3I4>PRM zM+>3*K}aqi6ifua3!K(0)Q1OvU%>Nb$-98l6|mPNw}4NEsg?W`+`b2g3SoqQ6TC0w z2}toB1mahB%}BM7`&QzSRO4DgH+m@{rs3lfjk9yi<%Wvg8TuMRlNv_nGo%y@BZPR3 zl{kwqRI1b%9t;&4Lkp!!L&&RyPQ*{BL8XdBR_U5V0wEO0u7r@?VT6&`a3h2kFo6)- z%{)RRP)3N1tsz8)Xe~w=dVmladQ_sJVk6^k5(j=wh>RJxLgJv}(i)E7EC*0vbrC$(8!zB zwhBJ7U6`k?g6-#dYBMhpf6iC0JP%%?suFvat7-j`&_RuLI+O+;sDGI0&p&*~ z|FYbJ_@WRxgBK@Jfz~}(hb~@rFTdCDjqh#M#jH?AD9Bs>D)md1PohKDwtxj|(M7h2 z^=r|c_CmPE2CosB#2?n8e6NX530$Ie1-j6!Xrul{K=WQa&I#WBD6LRC;B!-3E7U>Q zU1+LMqvuXSL?qLl;0xp2<FDxY1@bAv63GHH^aOt`HOg_Rqh1IAH{Pr z;utS^3HWVw`FE)~+(&jKpwkE;utkIrV48F3LSKz^r!fN(&R!sd`n`n3ELQ3jL7>| zi4R)$B2Zk4!d^mes+`C<%x&fV1esveofML%qs-m5;$%j%BZ3pJGFek0WL z#bU`u$bD$t){VG|1KU3c2+D23T%&Gk9sZ_0;nlc1_vU#^lbZ^z&#}jyjV~2@YSe2Y z{KLw#=`(RV&+M#pdv6yZn;@uVqRS>VKBVHz`TZ5U9W~{Z=vAAL2*PYq{|dNovw9dn zudt$!Km36IwpQdH7E#x(Kylv;4`Oq7JF9U z`^Ehq!md%aD1S(ODk@%jBQ@|aTC|JEs#SZ2(T)H~`dzRx*Ok|*C5o>I6;2Jlk`R)z zjt~;Hg%Az)G$91zGeR`{MM885ainC!4on+FM@A6{x^|X3J?n|?SOP-6(O}SXT zw#U04*d={`l-1j-pqE~Y&3Gk1K5D0Gc(xkP+Ei69pPxUK?DJrIv5}(t{%JMmI!f*I z?1R}C8ehQeJ6bnAH!R$1Du~d@Wp}otQL8AdSc6w)B3*@va)kwT>(p%4^;5hlQdF;b zi;w}U_eq3f9ZdyMdbGH2zv@&@%@zmutC@7^71XCqb9$A6{uv)kWu18-Y8unC@=SRt zUao0Z6)$2PJ5G6IrIEq>AGEY|ZN-3v(^m~x^vKldQ#(#Qz3R+jT8duUZ=Frwyu4WX zOrseasz;0ZxvUr)ceKp%;TXeAUo655IHQD;QL2t51ci%w% zT@~@mvwOdjl~B32m)LqhjrZ9W%~;W0$6&pgm1HGGEmGYv?=1FDZP{esgt}j-1*`lY zD)CbN0{;!tCqB!%>Qa5)U1jlkE37&xr1^L8%@uLWv!6fCw`6*s!P^`5IHtLmXtNvE zon3iBbFWU*UJzH+sZkg|a_iLgVOvZ2qL$Y0Axi4hj=q+pFX2O~p7e4b#|^8Gn-8K` z2UlOJ=Tn(8Yem+ouCA!@m+-Aij>-sGme3x%BX14zJLMj`V(hWMc(>Z&R1WK64h;0S zl`d9&SV@D$axBZ=M%rlJ;O9UuLJ+jxU6PlXyu8aD0Xi6{Ev42Wc??T=Wn!?U3QEeX zV&FmbgInA>>xB1x-tD&VTmQFm@!nKQ#}j#mn*M7Av!LX2r_EEa=*+5%^&efnrFK!w zd`7+6_a$;wzMG}^j3`aa9_Z%P`lK(T+tESMG^b?hJf)AWY>ITztL&6brRIC5r^3CQ zYv~J%N@83#PthXH8(b}XSek|p9Y^Cc!qnydkgK>naSa7A$!wjzlHm>K+prI!q2`s_ zqFpkvq<$Xg!i%J2q1J%AUci}sXu zMRGCPker>vv_5X^#WWOj^j?`*l;-K}zAb&332&6CZb!fjY^B%wH{rTuccTH&6s>hD z%JQ&Z(Jer~e}k-WR^vfkZ1-6M9-D`47oR_?#`>ZIBo+>@9r+Fkm{aY?mDI=pPYn+o zk}b*tyaP4-I)ACWl&N<3x)~o#UHGLTR0_h|mf<7=ZEtp)->L8~lnI9G3i8NtF4$Na z8B`SAEwNG0v2^&xXT0iPW+c@SGKF)!lFw6EC)M5Yon`(!8Bw=|Bp^}0V&pREOZ;PH zsDhGALsYsgx>!%)C*rHwS<7o@n^LSrwX-AfS!qwAk1DNpwq;4}?5(A=y;VDV<+QD{ zZMU0{-0(z}+&Y69w?}EPoObzRwiJS6IJGX(@5YeYxOMgg&9=IwcV3n2iKD8nogE*b zZkcP#W#zZk8smh!B-ZIkEcdt<-L-e>svCX&6q(z}{*LnLVtq?rKGob(20H69dt<%$ zA7Fyg-A)U{xOT)*_6sV4(%4nYn#`{wnf$?d69kEM4-1^F+<~Exo9v@7i(aU-z2j@$A^*iK7CQn2-X4mK+ckd+PKB}i>Dj! zp^NN#^&{Vlm1UK27-g%nmB!(PV-pqqn!@D?o8yM(zq%^k&EK?W`0|)GY!%aH;*-Ct z=9s)JEhNA?Jvz-@k&ijUj!$ZTEhVa>{x|=ZxCnc(`7G))CeT!gx7^;m;Qvgz>y@>u zKfK$MP`i2|if3`6(}_*bt6{$L{!`M+uBi-ST7*f!>|HZE)XUu2|72jwE8L#lrxB7i zn{|S;xx)i_chPH_P3zWVv&I=KH1AfUnI4^bW>vRE@y3kVE^z1`wm!{izlpCm#0740 zAo4Bhw#bd%Xl|sjtV-j?ZUv2d=3`{fk8dOzY^)Tc!1OLt>Hx4tJNp*4Y?C z+gFWP4pA(D?s|>?R^434(jo$nOyf9R?-g)sIg?FY(gWr$-2(Udr^$TW)x?&1tg**f zO;$-T&t`VIF+$hZS&Sp+SN2ABw*~sjy>v5E0<31}qNB~h0af+pSLo~L{}))}A8nUW zPH7VFHK=jwI{#2{p+U{C7Zg$^@dXc&aY#*?+(ln@`7;t4Ms202ovsu$Rr)K}CfN7J zq{g01MQh-d&bwG@>%d3&oO3HWy2oq4TE_5_4VI8&@h+vv;&Lo3EX++T%vbeu&Zbq& zxpi7rqFd}Zq_z#2I*d}(Fu=r!H((KM4NUU4eAbz12lNB_zPdp#VAmxIbHWmmbqe6G zbb8l`kQdaXq^J{L`@i`~YhS8AhuwIl)lU0L)W4`E@z2G(FG4@KXE)PAs_a!Z+?LSr zdT8*2Ds(5}W}F3htjR}%;{)3pxjDo|j|llUgJF%YWW zxBai7t1@FP&z<2$GcWt=4lIlC3Tj+1yJuH!OVq^eFR4*Ji`=fTR%uH=tYr2(+4jn5 zNp{rdGuh@7NBjq5+l>2bL;UvDorZ*yIg+O?dur-E91K z5!M%9@IQuXFc~)tOf`}2X#tw1AIr+(1s(LPa81rYaPmoID3aB+@)&a*J_1`LO zJK%FWg*Ra^Z0-a`2$_-8-Z=|9=jx0q`_ypr4o^EQ7c zvl!2ttFoQPTP1AR%WmGFq`Kf>eg}Ddr*CmtJ6l|45mZ|DUmMjLkG0FO^ku3$UJf_u z%eeb!U_r@RYy2?=?IBJV{!#J`h300H`@P2CE4;r?45@mrc_X^f{Fk98&;5WZF(S|k zYP55frKUW4USPfdYLqN^|3gLV%m|Fq@AdbQrR}*)!Hi>q!l`!I5a3XsU9 zile4>Wk`*_QbqEiHQYtj-11o+led-Alg@7oej7mZM&NAbZvRPNQ)-H~K4OumHX%ndM-y!|3^Z5@ot2OudN%K>yG8Ps~2P>whqLR#< zqD6^%5Q7;j-)q)zQ$Cm`rUchgwdvW3m4_MDz8jOudJ8K^|l-@sE~K zzi}FwMcpmC{J#xQX8PzqHrtOi*(E@-qt?Vb%X6UDUT#FI*WrW1j~>ScY{spwF8WM= zL-Q{lpih0mJvx zr|;AlcdyRF+^RNObe1ZL|EPuz#upr{d9y=~(JCCDfY9=$ra4VD!>$X)u3%xv8mCXi zW|;o}=z16UsEYG_{G8o$Hk**kh9o3`KsFab5)w$bMnK(MSQ6weP*jwJo6AKA5Hvtw z14Rso7z7!#YC}Xti;7elwZ;ZZEh^OwDpEzev`EnUwZSVY!vA^Z%tG4F@4p|ybDo(w zGjrz5IcMgb_kG6-(FVTG+aHEGJ4SSerxkfOekQ&|cY<1AOY|}O7j~%*1o!nb9C16^ z-f{|ez&;Z;f6^?oF<^Hltg~D4O)M_S-&XK((vAE{94)@0Q)E)7V}x9&T!*7a=wCjL z(iHjY=@5;>Y&}FlyWMHhHD8(BpihGUr9@^%GsY}t)=OF$-YgeK(_V)N#;a5NNqY0Y z0rJBmw)Nev2)CT#FvPy*>IevbEJ1E}NLrquy-ct4S8+HFrPCq4{cdgsV6AqrLQY6x zj@w1rAN8JoYLb7C;{Qj*YO#Ht&UpIt4e?LF`GZ7BvulR- zq2iQA*)_i@eK;`ze{>~qn@V7XoWDF?akikYnHtr87{rSp&*+jKtIApoIMe#@M`_|E z^ppiS&Q$yp@cVGQiQJC_Zz3QLXB4RfFM!_wK0@&(@Vmj?ir)kN1o)kbuLSP}`Py8B zu|T?N^5ZWgn4g5>`|!u^!1(KN{CE6OQBQ8?mkTnQ9atqu1V_VYk0@>j?}cvLtT=_% zt?b5%cYy2c%!*UkUCJ)4D)bld1!%6DRs4(Ke+EbAo-b?k6avE0jhCwg0(=d-wc_i+ zfuoD(5c^0)HlR^)$Z_dw-l$%l}Jmx^s4+6Mw& zBa9YbeF*tN3FNdWBmynH90gFTOs*{8PVFU!p!0yj*NF&s;bu|gNjhx+PA9(}W&}i} z-vXq^XZ9+le?{Rjg7=$A!pq5V#j{oT5+cf79p<+VHmQK!DnT0&1)d=e zK*lOO4}F>yDPhWR3hSQh{$L)F&%3`iti$#iKS&1-l5XjR|%F`Rs0u3l*8N0eEo}g zfQ;4=vDmPcI0oyqia$eyc7$~9g>(V(Jg9#V!M`95LMJ8;M8@bpR21aW7?GQ+P))9< zLg^F?=k2uO{c`gJCODu@c#Vh}N=q&@{V8&sa1qF+EW;lQX&|C=ZY82=XW(r>{kyqD z6kJQ}iV173lFy`^bv>R z@m2T$5$T&%{2z#DQE7mM@Ndb{(n+yEKfYt>JiyZB03w=pH4zCL6+THsg`QJ*M1{+} z4REii8O8K8v|`1mIz&E&i1^!x=nLyqc%woZT=^q1v2@9R0;uw+h$JNDnmo;RsU$j# zh;-7>3K{#rc`La00h@jsKF%y~pTg&e$nUt~9}$t?CB>zg64H=!OiSejNI$DkChbbIIM1ds=XR7eoiZ3K$N$yGFSY@_^^xr0mg`e0b zg!40K!^Jm=R$WiL=6yv^5^Z7Ism;OoOd@!;_ywnn>`(3W6;!-n*f=86 z%vGEpHgYZ_GoFeU@SM?_l=mAkAn7Fp%UW^ zOVE?8Wjm@HNrWVZRmYGzsVI6@VcV<pq~(vf5sR29q7_Rt>UlZzMt*A z?T4FR6VLt(h1HGXHy7<6rrucLl-i|IKPt;z=fSKbJg8?;|J0FwgV_Fy{hF+z3imY= zd}Rx#1^ap3!(Xb^vL|9YOuO<{r)8H1wEWQl5q-(tr*}v(1-nn~uBh|WHI(F^TwjuV zG7Z9}RifgOeRyu-l`6t97CL73dUC+l^GXEqv2%jMP68 zreO?D_*;2B?0~TFfbH?VIrR7e)0_F&Q8C^y9@ife=M7^FJYipB8hxQYGs`rF+wa2u zj1QScsx9h_c*TSeceePKY24BGheKLcn0F{7%LReDg}s7la5AiA_h=7EAfvNg?bkAC zU)%<4_?9CkIUttm9qiWhduX8czy&7+VUsc>%*al$xt%=^ADkpbYdb!(_Vc@6YNk5N zMSK_>SG&dbc>B(l{|htjGJ8Al2o}fP^ zx zI9*OASlTGDHpb{@euQ8MVUbw3iNi6d>=f}y3^F^2EpCm}gj|>0szU0!@w9UA8gY6Z zw7VN44Fl$G`7Ssp;!byYRyLRwyWo%^%5e4`fiFrWP72jG9>>h&VT3zHT8t5AHsdf$ zZ2#O5Cyu&|I{)@?#H$}?iQBqx&W`Q{=WE3J!J92O8!f~cPtA)EXZ%ZDIOF$T$-p}Q zzh;$8aD)vde^!E8G-HS}el{u{;w)fm7tZ*jUHE@rKsRj@;`ze>Oyef=YZTugIVMk` z0JJEg9sk3_w3X_FY#Hy=mMRX4^tv|Vzj!z8vnyB26z4C~)d7DP8zZ%;{RteSH_8+= z%&JYS(c_3j{yDYv;MOtGsoeq2By3gknILSi5HAO3<(Y=@Lvers)fJur?(V`Pm{9%v zx)v@+#hk_-L?9JyK1S6(M0MvY{ucOe(8N5C@vneC4$en|d@nBrKQ?i!&91FgoRx~T zg=tm)#U0uW;A{y;OY-MQ54dI7(;qAz23^-eb z>HiFVW0!bp*v#p|1^5bZ8tTdu)**n+$-h|mcbftp`o&_5O@D#BC0Y36G?gkotWbz^ zqB9;G;~E)H`yLkPQ~WG0_iY^4EB-g|Uy$JdlrK+s839yfnnAI*vPtxW$8_(*W} zGgkNw@bQso|Ij`A0|MqC0UsSE_$~Mv@GQmGgYN+kD!vqaJ$h)U0>1+P6Zj|UJGdQ_nn^1DW$+upD;56@`0v4M6<-bB zACE{M#VK2<0IyM;{izi^SMen9d~R!)rviS)y^OAR zyjw&}$f&+Z!;#mRZVe{rL{w<3i9X8$>hK7&X}1tjP$Llq9V9NsN0G=A@YJ%P*+h>L zz5tuZ(K+`KGckKq>4GZ!3x%0@${8<(FhHN50qLlz!fiwpuwNlJgkiH0NPU^uX(a7v?68#)C-21^VanU_L6Ka3gUcbb^U%A$%mF zhrU8Y3mhRLgOkKXc!G&Y_XY8GJfV2)FntLT>7`#Eq@Sz8t5tX%aWwA#79M!f)I?m# z>qK-8n)*e|gCQ&t6_oyc)}asJy~G0Yh{$*Z5d}$??|d4_k&l!HAzvx|Spd-k!@;>k z5P@6v25|}Qf5_3#Sq30O>GORo-Ys~!up&K)$T*9Lg6QvOKGKyd**;%a zDgLVBClx=X_&LSDRNU#X&W{AnW{tR{zznmA;2y=x6rZVhrQ$V;(}JGqw<_MKc!7rS zLDm4-mLR^`V=NVaEV0E1SHJMwmgVWjWLw1T^J->QEm<||_Uaw_bt6Q~b!Oa-nCl|M zxF2lcE#3MWrC~cdKZ>^6C3;V`T&WB$OdHf8IvHJy*WQ+D?j!Xkbd+8P@PE7jLa78sx8i;D+Rjkbs zcYF$2!cK7>=h&X>CEi(NWJO&-3KzbncztMnr9OYSGZVcBjT&W132Sq#0dJIOf8Izn z8$msybpQk_0daZ&iVx=D!IP@~j_Q0(d&;stHxq|n5f)YtG(y6{0`b^*TcSRA$91i_ z`VjHAfkvABz2?7*^8<~9z9*XBQ|i^1I@0fNEYVMHFERgqqWPUGp-r$W>0e+Z_pTdW zBwhC#TCUWEeYafqRix;Z)XJz6RRzYNbo$s_Zchu|@utIB8l2bn9y2)7`^V(&`3?J8}xFr_Q1U*gO1k~I%N^2mK;Eqg+_9}x`G0!XR4?5 zmbzY+xGm3{5xlRt`bxg3Vo#wl6qZ*X78;L2(zJ4rF&OalAme(#=Y!C6bs}o8k>;u! z{B}}t$^!>2+jeJbi)XMAZ-+0QAT zChE6|!r{2L4I*|p;$M@@JcsxhR!$yq$8e(*c9$;N3T1!8rrXRXhQFGdRADvOMPfCmSXop#&EY@i`LA zPzlZfi(3vCLA>UF2gh9gIzhxYjA?1J6M;;)aF9tvJilQS_zxgrtTT*=bkg1uD5n#^ z2`c@aL`dm25EJpbA>xYo4P!aa5b3()B_5!FHWhJ{=vLDTJXBwiCqdyt#a|?bV{yXO3TF^e!5ShfKt#d2h^WXh#rbK92=9*xk~~lbm>4cfvoa(cVn+hJFyvxz zGA8&fzl<<43>XZjU2kOA@(eNIpgjv-ukW}XPv<1Oy$s7~)>ItUiuMPv5^xLya5wW8 zd(t9Ov8P#-2Wh$F*d~g9Z_gCxKM(I`uEJ&9CH+~$tY_J57z??}O^0~PV?>3lH{pR9 z{<4Nx{<4ZTrsFQ5lMIoN4e3dwb^+Em&gs=-{Mgzn!RsEa%fLV_Nl-mGSQ4(tnBk5@T@HiHbwj;WG-n4P#m=BZGm8*|jN!5!LCn zW2^74zpwh;itrh4m!}jojJfQ7s?rTrK0f|b5dZ7=__XZWzfLGGEt~-{Oitgx`eYN; zV0?BhbtBg&hp*Zk79|ds7;!@jXSh+sQYEpkXx?S3fs;9+|lPZ;FDzZqNQiyy>&Qapv>>$Wees@-0lGh1{ngHAVTJ>m{mZ9Z4KdM-> zr+QUI(ly z+{r~ysvkbKd++YP@L=55UzeEec^SXKDvjQ*WBFkU3j2n3QDX+kG!Zh5L#45`_j9|@ zX_)G3f4d9G3JztC)6%PIvu>zJaph0V~+)-wJ){XASzr+SUzTRTGALct(m-$p%c&oV98EoeLxUVD0(miF}Q$`yN7 zoL-SV$LZx3P`dl)4x9VOj*pwek%mtoZ;$3S9%?IfR)5_5o>Ddb0#+xc_fzqv*C@m; zhCh4p8EF-XV~pO=of|p^pRpFPXpE88?fLQz3-kqT3+#=*6Jm_f0z>SHo18Pb*{ z_Lm#k;nmo|hyC?t@z7Y~7FaQ@KLD-xzL8$++W4N`JEM7k%4R^2$wpRWdB-GO@Og%5 zutK`9imP`z{%qMJ+Xn@|ala9~7P|G30n5mOhIu*4#E1_1w7$_nefQym);HYL!U9Uu zka1bxmqrgi?P>0=3jDraqg0P@z8H&y|);2kwe+7fr|2 zed6|3LaY1d^jMF+Ttkm3*c3YJf-lRfEvlTa?RF2-))cIOE!3I=HSV=qcDF!sa9Z=t z>XPj!bYM`&-cav#T<}$;Y*=W$Ua=t28!FPSbZgLJKr>&<9}oy`+XM5Or?+YcVb5_Y z=iY{r%umXj$0()HkP@-xzSKIpxmXopLlI@o*D0pu8v*ywkX_qVKQ#rgKG2}lukWTg z+T|Y-E?ve32(Zh5<=v1d7+*%idTFqjHNoiBbMO@t4VqXOfy1jbDDRrE5)qvfjPlZ6 z<(kh3_DhSH{&0yi;DJ)=h4w_)99X>*mRzk6`_Ef4w`S=G+@b|bYUVAUUo~f*=EAJ! z#?fQk6-#QwUndxS9W@XP;BmisqR~g}jJI!ZiJD}5ri->gwp`J8YxqntX`wkxG(HgC zUEJI=!j(*sFLzin?zV5D0w)FlQm9%cif_bM1KqZUUG!L5qKLo^Ti}U=1pm@N1Ucxj#sd0aX3ETQ{h^J z{?dyL3?eesxd(vMFylB70~)!0IRTts@#46(S5!_z`EEem08us7h|4*E!%2Aa{nvtQ zaonA@Mr-q^&}C}k(WzKxU2TfjrW)zyE=(^f#WJYsiVIVXNV$1uBbP9HnVT?3DG+;Z z!~pjXICP8R@o+GLqftA~e;a3Z$G`EOKQAs!CS8yeyi z350%dTrYj+y^R1L{fvC16rkUt9t!ea;GB@K(o#9rfq*r9DpUqP;C}xRe5~UC1UK=Q zsrX-UoP)nC#p%jqBL4Vfuz&|~{A>ITP@LMl)cEBi!T1^+>u5EIsQofvJ_5K<#~Lxg zRB!=asW`nBaA(*?#fO96gMLBT1Jlz}WDB@kaUJ|a@K6iV6-68$5f#q`qPygC($C7^ z6$IRXUb;mkcoO^r@X!_R66fvVsqg|Z`2%~ZICrc^N@H#oh0PrD8XQ(~PO3 z3a$GlsNYK6+J;R|m)Lm=NEq#29MqeXjn=+Pc~6gsoj)S11|6FxB9 z>+#=#x1paqWTsK+XZvxB*6WDZ;PXhl7BXQX0*@#>qi`(Rm*Go@BOvA@j)xG7=z$EF zh^bP5Sc*v@D#AI}6yiv%$PnF-pb|@QZ{%DHCvwhAUxS^*G|W1Q5Xo*rJ4ck@z7WCr zqOhUa&Jodtsc4HuVXaePyaA3`>UBU0wabZpEwLSa=CEh8qDzR^LR`0>2k2Jkh&SL( zq7sZiXQ0g3t8lu)*$Q_8=Vz-WoibF6;b_UPh^6>GpmWeCR~9h``4G{I?;=mQ8uvx3lv1m?8}H=+%n?z=*dK+TdZ&^5&3Y&8Bq-N zRN_QjC~-0bot)5Mz{`r36A_0)jrx5-A}0K2h=}V{{9BYS1EiQ930&y4Opr$eFHoE> zdvd;A81GYjvEmyQZ%~|~4W@5We81uc6n|B5OI(i(-&X-ARRSrdM+O%ZH}EttLnjgG z;}w@;d+-9qhp6~+#m6aLtvE#>Jik$K|4tR~q6&CP@so;6aXn7pI-fOv`8<(7 z$4C~x&IzB{^4c6@r!JPwGp@DOENyvV9u%;ms+TUWnRRE?;stYICoZ0yZyXjWL3_fE zf-{L?j1OYtKl_XmqVWtyd~N+9%>8tMu~N!~=XMicZE>VSb+a%A!&^b-4(tMD@6r( zGeqrZ|2Q?Ay0&a#rzPk;kZko;r)Ym$Pj$QmdO#N+8Mbt}5ArI@o6Bj4v}Rc%X6l66 zJn16(4kPD^m(lC)Fp_PB!=!@dtJk+|xWmYdNKOrot;kEyEA(Obe(CZ8WgE7@J4qbA z%jgw*Ytz0l>Gz)AQU%-#e<|=jgJ1|y!)uNHad8;4H^q zWNUM<9?zAiuQl35)hgo}$3>Y!99U&cis@+9f}PDjsnLD5h*@n+yX9ZaS+FUyoOaXR z9d@j>7&KP@tNE0gtb}G)XPQ4mh-Fl3IqbH3&tCDkX;(JDXPe(q=LN){RvQV!U#M^$ z3Qvt_a3$3rbk@hijd^^Lvz{03YCSc!UW=VnJ?10exIsLkCz+GHZqaQGgwfl@uhwAF zeMsE5#^^Wjz}U$%wVZ!p!$Ozz${wc02D0EhU|L{BxwF9ZO$=7bt(_~Yk9Ir>@1y@( zV=U5d6cg)=!BO7wLGa;c>9v-M`|Hr4qr~s(jLG^<;+HyO!BA*n<|PEOW;fODD~Sp` zQLVdeZ~{>A_zlgy)CJw3wt9r0Qiv3`2Y(a%re()kBMtMMbw)Kdg)HGCiG4?*>+{Xa0c{@s%D{1woZtZDzD{n@?$Hy?C5Rd%eT+AW zwOf(Z*U{p!twx`O4Or>Li(8)0bGRamZ91{hWAa?iZ(zgsmpA@u+kuA>gA4h4Uwnrg z%t)NpQ~bCUdYD-_bc;PVMPScJ9CqJP^?f4t7heX$J~&Cg?>;H8e->a~Ky1yb8JZnwqb5TB~zc~MjmEe7Xth!?7Oyv`9HCLP}Mj_?t{^@nL;ND!$4$hrL% z8-yK~yc4_t$4o;W1jjg1RUl0JD|1pms*pB=XMoSdA18Z_;26iqo=NTp7vOst%m8k` zH4@F0t4^Rn)iiVxkK)DPvoIKBC77N%K}-2$D$ebE@x;lw8RMhC=YjJA$bZDS>%r3% ze+T?=@FY3BLW18R;ExD+MkUwjGQ?eO=q((gJTF-ivTt|`F`;2;LVED=4~(@t5EzL@G;=iRs2No zN5SVSo(pcrO^!z;m>>F~mWUR`Yee#Y;W!6>{yY_M8010x4N?3d9KVS_kK%XXI2@T| zDt;4qKKNUTbLj8`xKHr}@cVJqM-=}KmEo>xq4Xbs_vSuu=Tw515MV}JUGUolek=Gs zbp>^dM-Ox=J_kGseIV2#Uhp(<-g91YCiu1BC{uE_#%OS4DLJQQ6Qj`nZWX|t6!sv& z6jcBgK(ue7ug{{9(B7CZNnQ-z4?I-f zK=3h(5fHj3Q3$vRBwd}*fsEIHmnqJzH2wsRNv+KAIq)CB%N38srJ?SszzFS8#D{*I zZa*N-@5JPCI2T;ebcbQRVUSBeR{v1KHZy-&JEECG#Oi_~aI7CMZ$QtaAo3}>oiq-({A z-T1E7i0=V~)o3pCR8IaV(xTvi$|>B-t&F%DZ!yK|Bp2R?jN$s7V%h8Z|eajY^TP z7hgSW^z>iA2bDUFQUh=-njH@s_0@(Dc|8i{PJd|F+sGHAMnvSbg;TRJw01?zap_k-!mUogfWGao^>ZfQ6W7GaTKgk%$VtP8@`ZG7%Mx zj0RqhF9Hz-O3lGM2vNupPdiacgQUhFnpApYNBjwf*Q3q*;7O)N-(n&PkeYo{AQ~V? zh9`-r0EZgf0D|_QG(0^(#5?E+5u*kp7T6CDD3Iq#`_3H5M#$0nMZ_wl(62`ZEjLvgMnu0FMI5JTQ;BHFEySf5 zqygDNokXC!EJ$C1!NMDph)piic?{NCs12LR!H$` z#WyP6pm>wwdt3g#$Jk;M`SXmhmeqTW^l&&sfAm=>`?QI}&qBN62-;$|HAjCAg3==* z_Bn(`q6$yTP%(+Y*gu@X+{LcJQrjrU$K})E_i6AA!f@92aLO%@YbF4vT>g+nQl7=c`v&?gBtJL+LA!+vZn z6<-^DB0|=tElVyMr(IX%4bmiZ$TdT(t+@A!hoa1>H8`YXyfX+-=fPsX zEe8gdD$ImWr0SOUTxOVlV;c4<;fi~@w1G@+*Ye$7LoVfWJvugMl@S#v@*OA%#~L)W z4y5Fu$mdBZs>H%($DJv(_x!Z|jucz|2iQ~kLs8Y;Oo+~ar#pMb2(ONbazap~bT{+j zY}+mOUGy-ixfjDcb)k5$yZNa8gBToV{tjlY|A;e}!rS-6c=I&$!3q=1LVbytlVJA8 zob!G%k2suQCMQoW$07s#`MRg~^d`#-%?%pRa>x?jB$(r!T5#yZBJbZm6DfPcdx`;j z!=3;C|LyEyZq#d9k`vA2VbTlF0kOV+M4WI}hKEyRILuN~8z2f&&0Z#DaVeHB^SQ#8 zYC?e!A(Ha?%s27O> zx0z@zL<~UM>J2cVmDnm+IHoL`x9BQkA;pzMw*!-&OB#x?U?kIVID_# zmWZtkPcm@yjI6uaj4LjZhqjNx#pHCer|HDkdyo}70*3?SZU)i?J z_CTcA)nN3A!pmI#`1S9xu}0uTML zsOr}oT>?1q{yz*3LO&hXL-TbDTuwODkPw-@%5#nLsL%}^N{wrJ!H8WWOrauAR+9m!K za2g7xt9SvPil=UX;%mUigX5p&qUaU`Oaz;)5{vuo z=eXJmKE#UCPslv*I>iryp9Wv9_;&Cc`CNm`RoF!cfCuj@8QcWk4ql>8CZMc~h0}P4@{UmYZ_r=v>B3Ke-!D0aPAuRE0z{VtPl5lo3$F!# zstYd%e;zzjRk#QEd*GoK`UOwGkKoU!_z%Dz#~-d(miHu%KgQn`V^YpC=%gvsq!cHO z1P^r@Zi)5+IP#Pk&~EePF8p2a!{B);{$=q01NSQaIQU?+O1k2d4ozb#h3*Mop#lLD zR03}P_8GWG@$13+;yy1?JPZ7H;5`(N20sjrZX+xB18(16z!5C@Y4E>+qfU|sz(0)C z#$HKq7y+RlC&w@R58wAc{E`3Rt3}@&d``+*M(3EnwZXfWJTuJZ=Q4Z5 zeK7MP;u^mqjz{(ITrgZtT7i=km-`liKSDkc<8y^C5-V`NO2>6&#`jSuO$HG^lN{&M zngh$n&|X#nuM@}NLh*cX*K>++xEZ;JcrPAO;#O!V5I142M2vcz!4n zpcV})#8EPhCZ)+B!f77O$s*NvB7ErPw4R{4vvlCJ05eo_Wb{7qMqH8N>1bElp%oAj zFSi$*f*VghAEvLw8VJdVt6@|{#Ejm7J53y<&_lcfQzoK+8H7|kz&oj$h^b61v0jtw z$($o`9XVn>CTGN7qoPDi-kONDkVz4zVe&^r#XcfpX#6E{GFmj;3hz!ti)9kgVtGKn z4U@J49N4C#>4-Rq3)QxJ&}2ZaA1^1Og|;d#7pzgxKgoeE^j%^BaUou3iZ3Uk4>S^S zE1x0GfWVuGIo&IAL3^gMIot-DKt^nVSdQ3;2|MutG$nDn5)!O{=^ptcO$!n?VwOo< zt`@ja5x(X)IZPo|;{8j+6%QjKegbh8bPBrR{xjfC1}sFA6VW*uh(25~5osPHBHe2$ z{4FA;#b2p#s?n3@5s{7`239~yD5~&{C7+GHLae~Rfp|OeE$6{f%(sbCF^(kOf~Fzf zkCp+>FGI_aV}2}MT>(#$-)W5?Y&f1NMh`Oo>Tkk#fh+lYiMW$;;T*h8ak*X&eoAq< zZVoQj&5=F@Pe0Fh6T!6hET4G;>3IQ1J^Y{vy!N47mpkGe{zW^F>NNMDa3b6l{P?!3N@`TmxLnHNZW1!LkBn zL~x(tixsa|T*@;L->CRb6~9mM{SLR4L7NIVq7s}`{FFoVskV(5zwPN9)bhkIGd@hr zvl|KG?6u}78ozZhiff6#&Rp%>QGYgGuf&dUP)p#BNVc6(;;Ukqtn3!&y_gUFF$Nt) z3OshWJ6!m*7LVa9F%|D-u|3n70k1mS8B&=|RRp-B$}sf<~sCd zsVh7DczpV#(znNMOnQ8k-rv^#FZ{0uoY+0WHG_hIpikdQ-}cU+E_WE97CCc1?Q?E) zuQH%^?S_?x3kD||Jj)wUf$x7j-rX{`vUEdIBizqtwg-ILR@!s~l;V4@c3aTqM`qQn z8aAyMyXD#Pij^_zk+H?4o0B#}m0AxZq3ZI|v73k!8+KsV59Dikm}f<;%kW<~guOkm)qAS92kM-G zR=D?ulG5Wz53JI1Q(!&OQxEQLh-r;B9&uLE2tTgAebMhXW?V)@7IqvNUT$81IlIFFx zjN8{iLx*TDmQ`S!;mUz+MEc~?>&9+P+JlAK4(_d+_}r$E9Qy2CYs&FoGSeH_(U_-pR=kW%=Q7V>%|Tob$0A- zlLkv++O>f%eeOl;Q_O%T#nFDD98OZ;^^I5KoW)vhTB=K?Zd4|(F-p75v{ogR=rfSKw11~*{@)47+Zji zyr_en)z`tqO-anEdQ0U-J?Ov_pY5HAy+WeAI{L-cUJSKl+!*I&OJk4t_Z4Q z2fEXO6veQ8RRP`+yu+9|?|!p15jIlY0uDH{cgh#tGh;U;b>d00!vZH2uenQSzx7pa z)%@9Ev=u3Myuwsn4}v^g&wtLciO@j{Sa9W5Hrz;W*uz%S2G42(qXR=>yc4aAattjd zVE685-mP@GX2{3<7`(;rR3YzmSQa@pZr%i6eCK^z7Up>6rZy0CVh0rKfibjFya76W zBjjd6G~{u^u*dO`-dGIdk}$c$K{nnEd=p%?7t(h>jV-6r)Sd72xzcGt!#$}rc?MFi z>}nviZ|h4Xw)e8{eaT-Eb3A1G5{1`9&Dq7xKBZmtgM4KyI%~b_H23_oorhAq=A(AJ zH+e+|kT+Y7r4a?4V9QEnQY{RlIJB<81WM+%B zm1MWS?R$8kt@Pp9u8cQ*CyO_fZkc_mBLdaz#XP2$q}X$N9A|aPR|Gore3uNhWk<@e zh81sggauh~Jp&%DWmkkC!Gm-Y*WUK>Pdp(nTVDP1~uo_pT% zF-z7@5G<#xv%iwOLZYY$w?{l49~S__u1Uf^|B z>+S);hSfi!#oPsLYuvmIi_(K{`7+(E+ZK9V^_~=0yT|RSKZ@5=w{|B!?9PC-jg*Gn z&ja-Z+A3sIzrbsAN8n_9y(Iqu8P+e<8W(sCcY4Ey673UreR_kkfpZtNGNotDYqHq- zHLrC1a3~QQ%4u2gLCZAlzJskL-A}?Ot*|&LSAA*p-JWEkrlq(UY;3Azz)H$&Q0YbNC*on@|5&c=Pi&WnR@>_w1GP=i_x>vwY=}IZ&RR zi*UZ_g{PPKn0Rc8*{x;T6!S6Nrd<-j+im$G@7In|nPOGAGoM<*H8`J!UFO}!Ci^`w?JAC2K3$!b#B=cDoS~8O_5S;C zH1q#)hBXLTeZRq9iY^=aQMB&q z!r5uB1*d_F_0#2)YUY(RR(x9*&hw9U;XI#O|6R{7xyt>r07_lDCfMJFGlQ?Xa2D`= z7tVNU=XX6n#3*hlLOg%*_@h!@zTz&)Au;Z!0&tfQ?af2F(%^y#tEfidlXkBx`gX(1YU%((T=)b zT%zH(x@*_9Fg2QS4^Egn()UwfSgD2N?`su7gg(0(Nz z_l7>f`w(#gWi-sVh&W1i#O+PUw%E4TvMr z89I4@DRvTWpbh<%qLYYXOH@MJre<=Sc#xQ3c?62UnENAgROlSB3=&v$7V=6WT2%V{ z#|3O42g==Xfs}AC9W^r|sEhcM3W$IJfnMTLh@)}EL|n;r3Z<>mFvxny^U;Jvv`hmL zE%z`H8BM< zKce_a#ZM`ILGg=E#{?Ty0%guDtOZLJ)a=+=oGA{?H)6!PS!RNGc^(X(|M3sJ5IW}>J;e_=7gjYQuF@PT-Jy$r zY_ms-wUy=^F?^6cPQ3AGSWoerI(xKmR+%v(tIC{bEXOcHJX>XE?#Q|^ItIo%^RyL~ zEC>@xQG8S%AO_4f2a3Zi@bMpwZ}{5l+Kz`JfUpj_*s)CPMI1yOWEkl z2_}Yrvuf_B7BBP(6XMTmKNfBa+ z-PS{RMuxl0sS$YAMXZ75@`d<7%ao^){MV8AicqQ*Cz|f2({*qg)2E0imo3cP1%6Q+ zwqrBqoza%QHpJ!FSLwXn*2~ruEusxu7BpVkWAuJe2A*?1-!7!+DVCMkdxh7;;fcaK zr<;iVPtTRLm_+MPo^d19`ol&D`bf1z0*v# z7Y!dK+S6^>qH3p^7Pfw^2DO{REt_|m_d$rc_Lsid9`{PoN0>>`?zNj8Z^mSMDm2K- zR*EuVb~@YYv`omKvRg*&Ham3(Xcowzhs}rWwgYQh-g(pv*ur)kfV`^lNAYfxS(@-w z^Z!*?f{@xUPfW4qN!nE66aDs>g@v~E28SmmCeYxhKvYFcNm5wu=#v#%n@r?+&$Tl% zsi5bkgV|}eeH_Tfi--1@y;E|a9F$lXSzv#r`}WvIMs$BDR*riYc*T)D=78v!o%+-9 zG9=-^$TQ;79`kHQeRF6dvhO-PatcmQ85_oN-UBhjM_O9F2z%Td8B<-MrEi(8<+?uR zo}Ej@_R4Gy)?7v&G$yn**Wfap-aL-EKF&XYDv^K;7g1y=I0{@5m2|m-d~zdeLjpfcUE2FJ_fVN!3GIs%bp_tdVPPMf_Pu315MytD)7%_mgH$rxs|Q&L z_=1pmW_$nE^2Af-DWlMhUd&$>o|h4LT@}Zzx;jWNiJNbGC~ghDa`IOhg?FY{-!Cjl zyt5y=F#+%)*8IT0Gd5jX;@m9yJPUQBI}wm4H}%q+#q?**)MV!jw*Lh;(O%pCzo#HT#miRbNMsn#<9pJ@2+g5NLm4>-i$>6m4R@z0sg zgj~FcQ;;YB_@f!oezEX5b4z*>pI7SIFFh*X$%LmLw{wlUSqBz2Q65r`|w!Gq7!EZs`cq-#>2fs_THTkc=9|sSmF9rXw zOFYLD^p1=#wLCu-JRcmRJ;`;4*7EoZ=4TH7F!T{FosJ?_sfETlSQS^{XNiL_SV!$5 zJQ$-9i%~MM4DVCoSPUqL7!=+~#K7TUVj8A&L|kSY5v}(Y(T%Y*F&%?~uXuod!>w=V zG>l3?Tx8B7rlJEA5$+*k5IByA3Qr}DgZ4PF2xBkee7v)XsPMx?jOmUNuR;C_v(OCW z(idtb28AUIz*tN=MMX_-BL_+qX=LyUIq(Z&7KXdT5{&Y3H4Kj?_Qi7m(Ze8GdB_!trAAu&1;P552JS?B~rjIXna7?mz0qJkTV zxWn6s6R?a=M8*e*6}WQZ?Z}^qayp4f_dRhUme0@^Z)LoEbo>+z^CE_c& zjfl_TE+Q(lkLbk?Hbk8N8WAs)e-dv%fka$LWXtETn2EYyF7~3;#^Kw`7UG0}!*IFi z3tq4IMiu{v;!TRbsQ62YA5)z32t;+={|+O7QMnr|ffSf&cdCgOxqihC5Fs`w1W zs}-+NyixI;itktafa1p#4=64t9Js(v$b)>>@vhXcrwJ{r=PrQ)SEz`u&*Op$h?d)Lj)ef^)!s0vTS<8c07YIY! z%nTYdbeM>p5|J%>zinqNg`S*Ww6-`~v9cKeUbzlfy)Gtqtl`_*g?m=nz+Xde#~ zp9IX2S-00bwet3r1z3=X4ZPp{uKFCFC~v9{*1PMhtU79hx83ymiw;3621|B&F1C2} z)(^4eUK22KZx1XAj`fAtcCVe1(=!lxsx&7rV4Nz>NePtXM73uH$79dt$vIAZdZ*{4 z24?2;4%`ZFNtbit+3b~LA{QLzjD$7V18Sf8^t)^`^cERwuMt!cBr#Y#w|wgGDhC0I4| z1YUA`Zql+x1w8O+cTK=uy8;6tH$FR~ zy|T7Sj;*Ya?ChRhLef_|bGx@!`Rc?k?Pi)o|2uE4a342&*goqJqmG*|B|o`x{>qo! z8Vc_w3wH+Gb!}l-2@_H8nIroQ57<#31A~~jEBjdgJIxxHxLU=e_syx@Ef(mQtHR&z z5Vh}_CtCKtZ%(&4(VJvH61ES`VKx*$;zRRQTlHFT;X`wqPZA{;--h0FDt=Kx&`2mK>l}(GH z(i%%Ej40T^Uud1<{W$EKKtrjX7H;<>F*Z!bdXk#vSc{Xv_3nmrZ<|pc;~He?!&fc3 zj1{f|e_ch&hA{1eiG6Kh`UhCOE%gAQVqF@A?qDsaj#vwuu0Y`(teicqX;F9>i^5oFc+bnIoeUnj`mEo7uM9 zg%mZPm<28SJ~87A=oE0PRWlv06s2-a1CXD@9{7_o>D*+$91rS03D-aII`@jx&)MRr z&23xg6vh99hV>&(3DNq76eoX_FVo=m z>Q9$D&xS;_6b&*y6R%_IXT?)VF2osM+l7A*eh%Z4uJJy8F60lI(@en6x%JbvPVmr= z4zog=%2;9NFVF1~Pu1?x;1~vL_-MJuSoc?d$BBv4ex9AbK z<7VO(@71%sON!Tkk7lDQJ{$bE;5!wc z06v&^09-iFnv4DQIO5RvVYF)oVh1U{8GItDyI=8I@SnlQDLxT=3_2wSO!EA`;ETXR z=ZAqm3O+-{(~|c)aF)#SxY2Ge>J@rbz#kD%#SV*0XM!iesYcBXOTGpC{x1A3@W;W~ zVHsZu{wRB?;&hbs1N*At8Q?dv!zvyN{!|o3z?4KW1MbATlzmqv_>YKv(@1UE-(jw_ z`Egby!Z}=Y6cOpp5htOOpd4!KN;xp%n-xDuM7a(O zvp8PuNyNxImv|$l1VBHB-cuNGEo3G{WK^&40TnJ)gb^;~!8q|9h8JRBs?uE~qM}K- zP}&3zA`ZbVRmfo)x8AHIqSJ6igL978<@O`U_$>yY_naW2#<^%hRwN7eni-Z5!OInw zHn8Ax72irki_xft`lY*xsF0NBqNScw@vjrFL3t|OJ97IGBzT_zkhgzI?5+gBB})E_ zf=bYVId|Ag#86+#X;ER?;qXcth;f+25X;fIiDPkvM4We4;kQJzTpx7Uh%x9>R2XD} zxkO}CPecuAnZtXS+-0cVqe@-ASW-Y$&-{kxERkV z`6%T|3i&#ahArfe=K=0Lt#&vWDN$HXMAOUdLx7Y8at?8`3SUi}i~@**&@#jd%)V8) z)X+uzS@Kf6NQjtk%DrQOefWgA@tD%uha&Im6v}Nx&_uV9k4C2?PRHa!VGXe#W?Og! zSpm5_2rAG(j+T6lh!#3Q9EV8`5iRr;F+tPZQ5Mf4a*?4x9$@uCVL7oodMOc|s*#93 zBKLsB;elTcg`Xv#wHYYl|ja%*V z%faV*9T5c_C-z4tBq9SjVMX8QiARS84D}F%4_H-uZe5t6M^&xvM6S6oeRIs=_#S6sbp3b^m$&Tb5 zlWvP>dGWm2!y(T905iGcKR|ga`+`|2qAr-dS{7X}U(k2>&nD<@QTP+2&r`cgZBcUu zy3m#;hIDX+Oixa4w!|r8@d& z9HwG-P~`m2e6j9UTTgM|XEP=wrki7}4i+*Nhd46O;;kn$1~w#J4{iLvJ{J88>Z8hF=yB_=FjgO-Rr*WNB(iE#w< zd&Ipi$H?CL+F$7Jccs2o&Z$|=8G2a!3rYF~*G7yjz`!|7%|5>Eux04!`^Hf9 zEi{8ge9P!qN1PG64Q*)sbh%~uu9gJ}j<@yjjR<7d-qLbyqT_oOxk6{1jtEO?$zS1kAR-ik)rRDjPuDu~ucX=j zogHexg+qt!@U&*zzDyR=w>kE~CC24#j{f$qn!geG_d|Ce!5i%jv!vBpM&Pq5W4C*D z#O})3?sW%BlAzkgHm+R2{~-pix+1ZLcIb!Y>F~d0&CINHLxNebil%OAK#KJ(ckLgP z^K3Y;mxBKEj|<%7RCp^$yF3AhS2HzKfm*sP*snV4&UCK^jiC=vDHkd=Y4$7Sp#tCT z(9w6^gfDJcHOLVRug!Znw1jFBWUIJ8n&!8gf7`ZIA0(vt{H&@t^IEm$Av}(+@ZXi|ieal!#t|A?aG0 z$JZ+;PCekr92n|E#HHn~*7_Mxy3YQ&z2P92I1KLuw`V3Nc~04yw~GZk9DcoAe7?gm zGB(^a-yhLjswQpW!C_+PPRAG+F|Xa}xCd{v7UMyO$F9FF^>xII-SCaa75X7kVt-t$ z-|a{=xkR5t3tyYfCW3>p5LX?rJ8fk)@!Mp3k6jNroF)ffQ!FQ4ZoI&SO)jj~0Ai7tZ+k7@mdV zZ&2s6E_P0-6lXlAV8^eV%aHT_%YRk@yhzT$o&#qPMp}|T*yRLW!&a-{Op8yuoKj5# z$LC+F#c+yM3VuI0zQ8h`pA$Q7UWwvy;LoE{Y!MqhUtPux`YQsOR04jNKEd(p_~Sg{ zWANXi#372m0sbC1GhqDh!T;Tb?*bo<0=KAmZu0jo_!PydmXU_PEOI|G;3kh_@W+nC z413^sJO1$gl>9PIejXe{2FdxIw&N-=I+Oe@@SDJ+75^Rh?ckvTw}8J4o~`05!B2zp z0;*WxNCf=Y<%D!_-p6!xf)o4>aNbj<{|Z;T3LJwY$?4-N^rMTR!(F*3{x=q?T_><) zFTDXrer~!%V|QrV>>W?N9v&T~w$2$i2d1`;YljDFI-VGK4vx=9+BRtS>}dR_3tkEH zA9GCg7g_5yRKMUY;pn!U2vSYNAhnK&+C4+WknR;CMpZ|Nc-x#%;b(~$nz2LCl*~aK zii;v*=$1}IdD$ww4Cv=t!c+#JK)D4a3Y<@l6RK6h2Z*RZ6A=Z-IUzE7i5vyJrqUfz z_`XU<`!L3{g?U~UT9dj$9O{wZj2?WcoKSIQetclncgIFRSnKvqNK;51bM2wZb zAm(G(O&o+jbWG0maf12X3940s z8pRtF->Udt#rG+GOmVsTg952<$ozsT{!7K>Y7pX`xPgq1B!;06Qmnv$6uY=IFyeZ# z>aRAh_)m!~Ts(8s7B3#2*e$1}{&7c@T|Bj1kK1u2Oe5{EVZYqYNYaMqPZ0AoKk=_+PLzP_B(fN^zQIV{|=>9lMIBbxRZ% zo^iy5hIv#oF@_8;DBz&ZzZX3azbm#~-T2v|c~j7q6a8LE?dCq457wt_FLAy{IrZkA zU`bj|C$!3|$0T{V<&2g&v-)!1-qka)^^RFvrq0+?68_$UB}V(q>fY5eD&5|K*6?1N z4{FI;&X?`weF|DH9_rzZ@tPuPzauH7R(~ig*sZoA<#*iqCesc(vbKX8O1?Yk_Ffdl z`yHdB^jc4CxDE36dfi>epaijZzoQO|M`_PGZiwn^4bRp;*4>?08|Z9V^{nGo-BrA5 zq1SRr>+{0zRjcqk=-Ab=?s>-(Iyaqgh)JJ>my5Rjwv@qmNaVMGEx}_v92k0B-PIv9 zZkUU3$TASON~#{4O(0p~(hC^nyz&1P_8#C-RD0O?%=Xy?*bqVz2xL8?K+FY%4#vixbopAD4UD9xUwS8i5!fo3_j{}=+Ukaixz!GX3*cOTrFm9(m78(f6>-p|gl9 zD&jJcm)q)rTq-UO!5-A`39J7)Xht4(x>);OdDMUGEoP_bIQ+ZvT)ccBhO^JavX6Mt zzm^R&>jYGZQRxl~!KZ>V^nH9*JgSW>Un1JLz zLp=&VCK~w}sPDvYg5>W&{V9HoI-2iP0Pu*1oxv$OGvdA(_}m!&7yM!GKhh`q2K?TL`+<1D$Iy5t#=`61FUNSmu0sQO zq!U#Ko+ZQvE5hLxlMZ$*UzY13*7Vd5a1-XpErJVj2;=6A>@! zN6ZlAt(;xN<{7wl<^n=!LeuyY5r**y0l7;&f7Y2S95bD6Q8?4-((0taCQ)$CnVfe( zQubizPH+FKrPbndB%IYxde^1nn={t}}03b~Z)K-Dl%1i5WkcbHs&2rv-bw^_iXxaJE;BtTAU< zhoUmi7YX}qSyqZc+zy#i*g=pjZrE?j(RWSC37#L3>t?VG$}-*H;sj5!_;$aoX{5>E z4R+@4g)-!6tKJ$NW9N4mCeqUwNuBbMDP^zo^EgVxAu$a2x%nu&H)Ui79jd zE6=|-R1Qwx^Q~C@immgYa5?VS>Js)=_}r6uuULG+C#563MOebOG<3=QxXi4N>Twhf z2YM}@_lF(w#pgS^XJCm_4JAxg!qdG@?=kWBE4Jx=OwfCJVwt=(Hn(~6YnEEDLT}3J z6g|M!F;ri*vcz<}phb0_<=vGfX~$|>R_CQ2uSb}&^!0niUGHrjej@O!95(;9|KQRx zTch`F%W^#nA@1C0ZdUDj|J=?JQ$u)hQCfJeu~LrnwO)Pp;g3-6dd1rPeR&=zH!-Ao zluU2Ing!*{-deC`nRB7KUbAaW%z5SpV~W9$d4`pIcervzsWsD_ajm(`TwO)eqO|(z zoa)Cb6?b@Uy%>4GmhN9zddE)0Xj_YKTezqNYPtCO>ZDM(>VQ2xRIjhmE4eN3Qg6Zf z|KBT@hgOCkujcpKLN^cFx_HLo4JED7hC`UUK83I({J2+L@3b~~pFuR`X(2Q2fU;n_ z;Jge=xFo|A?&8l-!kHQBN`~%yZGH9Ra9P@sU0df?4Eua>M_h9Ebcu3I%{e=_D8G6+ z>cs{nr)<~;G~nlJ6T{o9>Z=v^S5@ZlqqWy7kKzDUO^JHEuH@Hu`PKEc{O-tCE1lD# zpOYM7pj>*Ot`3#hdeD}7!}P_qC5i8<8Ab%ud%2ktvJ>>Z6ZKx3jy%Un-_KS;rc?(z z4w5T%^|hw^YfF@mW}d4!*HX`@JYwD@vxUrem-Z)>Iz-|jTS2xxG!F+_dHCCiE7$&} zfv#aU61($z5gjq^kPX7sUbVTCS_LxXGJVAGw>_=IJBMr;YIE`ZAzP~16=){nUbW>W zS1g?GbMxA}j0|JC7jt5Gf-_#VRhqCJ$GgU!@xmLnDXMyj>&?lc9v4v+*ibjzf!c&~ zEYUMmC5csRDpufEi~53UHpAoa+a#WU)0W(Zv(8&UW$$1-SJ-ELYh4MpgTOFuA$QwR-I zmU7a?s-%NQ9v*h$;GjJ;-1u>lhF~HkFLWT!9)-dBhHVA z7;(16chQ`U7#Dna(2C|~i7?m4+%V6@_fVga%gF*x7V<^IiST!fG{1w0586!3#8_Tm zpGE)eFg1{^PY{!gJjk&l$J`t%pC=}wQAf=4OZ2fdUND9{AF~rg3~|>>a|+XD062d~ ze-8jD_~S4U{xWg6t8%v@y1ZjMDY7d~y@KP9+VadoG}xL1|I=W*tnwNX^^C~KK<6CS zkGL?gd+>3TRo*(HLKNeBXj>_w$rZh9#Ol*&!Ax9MT?J)|ah9RzIZHykhG@iB@XgKj z(Vq1J)K%hCe@B+d*I2AMYtG>Y>##WWB--u@G5LM?{~AVw_vj}LtfTN9SLBas2{+G~ z#|?XtqXyWkx4dy&s;NsM?;BCK1>1aJTg97jpE-dF>Z17H30p6-k~K-heQbNN*p{69RB5jF?9`{qz8*8n)A+S+zI@O2 zAy1Y+DH?rZ8|1fnOt;U=_jbc>j&_Yaogm7h4R&8u_pF+&@4Uo;@nW|rW*f{f!G3>t3;cswg^4utfd}>Qq$BLPs+HOlN3l-}2 z&SYrgo-7$4?I|6v5r2Ma8-i>w_@ph}s)bSlnc~5dwpK|^jKvF_@Ljscs&o#;!Fg9P z{iLn4*n7&>K^#44>u)N5N;LV*))KP@?LV_kh7{JjKeN@u%_`q8(>3$hOq@U#sbQ?S zcmor~;IJ(tX-w(q+l%tc4o|)vHw4|MZuEIfl@(%H7$F!Sj)ZMl34H=xWUKV;sdUbzglwqkw2SEYC5qB%bc|9#^oVdWdq1rPZRiQZt*%3~2y(Q8$4D%_dZH&ioKL+0y;dD=N zYLff)7i>nWEj9EPL>QYZD_?-80zWpjml@x97|pyw@ps9o$B{I*B}5)G+|P;OY zj;bEE{Z^$nH26XMu_?{~X8`#Tnz9p|_G!+R zSAgSvdVtCA0%s)h1IQPGqpi{RVd=s+Z-xd&kkO4<1HjR!=uu1uox!gGXAF@y0`CuX zisa0IW1)@=)jtHk6&y{qZvScUN1)~h()~(=^dQtd5dXTyov`pLKB0xQFbAB=43QU% z2hRh)Lz)+Xa}6Y7-WmK=@PX1i4cv|-iEzrr90EQ@nuo!+f_K3C^#Ht14O!wD!pFe( zu*6FTcY!y^@=kN!aPegf&jMFv`KS4BP-o!hmF~ZQx(2^U47~)kz;8F+uLocQ$Pjq) zU&-fyQ~q(}3rfMS2S=N)+joJl1@9~Qj|j}0;MtOY0sb|3spM~icSW-8l>A}v&%w)P zNR8W}F$@{6o#bbb<(a9BBylJ+U>>+h%$4$?n7TRS4$V(?`^Kk&R1D!brrW;#RGdyt^Efqkry$( z(CfU4*IdP~R9S}oxmWqij#uQNf7w@Y?Vr4<@;$OwU`y^b z9vJ|+fZM(F&h<^mapXC&lf4psUGkgdg4y+$AS9nC`u%82_AkW7J<{n|-63M~@LA#{ zbb*Ow#%vM=O`agX4&6Xv8}xvQOR(xhyd8BBzMMT>u3S>2XFjn6!62ft8BWB&VGMB@ zdd5KU-jB9ae=Pz*O*A0-B-#Q5f;=0gjaZFcheUijS4OxuPhUfWr>)6RL^}|{2NGd_ z7I7RVvxq*dKoM`mf&~#p?g8RmSjqyLoTJ3-pKP7A(HLhSmpE?|kNWL`d@+}HbXl21FUCzo z#8U?%%nOMr=r9l$W90^D8jkpLpyD;n#}`v$9wL%hiD3b84kDB|TQM&FL`}rqnx;kw z7*M~|mAD8WK*Wo=*`6={gUEnsK)kpy5ic$$&c*1Jhyh)dhE&x@cGSp2&L9rKP?HFY z|0N=a;AT)gXQU8o6~#?NPU2->eBmr<{wxt~;0r`FGx~1L8OYw`u=fpd3X%#{EVrFD zE2RP&-G~UWzDpApz2xQCLr6qG*frvpQ(iT(o`@LPM#OJ#Q2W)^<cKYD*A*AGI|S z*&T5p{+SN;^x%Vk+Im}p=P%oaI!y8LVtofob1~Fmk2e*?8;8*=9d?&GP}Df=Io8_7 z$dJ(yo%)ezpf2}RZWCJzanQa3w@RvYB15z1m>xZ=d>7|6mx!8eYci>B2oxXbYahhKF-84%)ojp2Tv&D|9Htn1eX}YTR4uJu zv1;u-8$~l$Ed(u9yY^T3iu`F6-iql(DHW4l`|EIxL!H+J<^l_Wg}l(64qbBShk&jb zFuw_offc~I888QifT5dQvtT*}rof6Ru99%k7RPxk#d+sKVtO zop{8f*7%n}Bl2*}u_T7G*Kr$ozla5JntNk7%@;)780Jx948!J1GYd31WZ+U$c(J32$ssBrazeN>oGBvTZFgCB z;>`oahP$;a^(QXIByX(ynD>TlO~k@`WfL`l+j~(X>0g{^h@jYK(d!2*w{T!nE*51P zxzT8O;T0+rYz)v3YgQwEP)REq4{O>sgH=?o$6;FuO^8;{p}+${dRYM``hZ~;P@i@L0+QM zvc&$r3hj#n?BCPwKzm0(lR@?}c#|H^gf}-1viDJwf)5U|=XW!zPslP@Z2uar_b;)( zYEqj9YnIvb%xY8dbTxc!8oaf}{;^42EXr2cSE=!$VTC``*O;^)A63FXJ^D-F zcTxPbeZD6__fdt2&G^uXQf&0toRd*JMhOoLo3X^?^0d?sGvcIvh<3~kIT@v6Sw)9n zH^*H(R>^GN%H-#P ze!0hPcOV)s?ziu?sVBu#ui0B#DTBTpcTpy$?nJIhK`vvVM9I^icHqq@xWU>Fst(3o zDeNv~>qqO>Lv;sM{q2bzSpvr4=R%=mJwe_9zh>YrATv6jZ17y;9N|#0<#l^<>NM)W zByyQ+nr;u1y5i{T7&5#kzJskKN=c)i5mOBOl|tjtUT-Mh62%@hxjDbVg1$!VH#B!{ z?DR`>6(U*QuqRsw!c^Z0t4|n^p$htvv0L9<;L;UUvqsEtA8IV8V*@w z_h0Z0$Dq%!@JD_U+zpJx+9hy)dqn0Q?XAGC9TbcUa+-7MCBhkZ<>2_tNL-nfYvaYv z9te%T8)FSj8MBcXK>WOEPfsXEuP9b~xVQvuQ*9&hAISeRZD}NmTjOZvNmzSLPd~`) zn0**Ye*sm|XgzHQqH@j_1>-Qe=M%3Swr6Gj0v(0~uhdiZ5;$KHNkzyLJ6fc+z(B6` z5fqfCM2{o(ENe*uY#4cD0+ep!ilZgsUq{f}fhEF;0XAfmR3h8%m#qz|B^rxB08 z1Mj3~4^vu_s7y6ASNn;6Zy}v_h)INYVmV>G*h2V0yz-X4t^YOFs`6ordN78wX?lg6 z;nyEkp?R#_Kblvv#fmX!mpH;{9#22?$8bOH3is(v(fm2^o1tzY`TgJ+$3~~1)`8y-&hkS0e()zH*JttO zLE}YeFqvs#8u)&w8B^q(_V6Fd(gTp)Qf@Q1-8?te!i-U^QTLbrbo{OK6Z zN?;E-ilZ@$_Zl=Bpuuv(7ycXkIC$iX?gjr5Jo3d=;B2hf#i9Khz_|kmsigA~@Uh_0 zP7?TZ@Yd42DL8ik@l2}j;12|KLyQFuzBr>2aS#N52R!28o#2#@=$0N%1?N`miINWj zzaDvtd4>VxEgW3p>>)W$!zw(~+8poKE&PZgb2l_rNZtURfPT+Od^J5d0RBB29BKXp zcq*EZNPu`Iyghg%25tfG58grAF9M$lo-KKMa9+Oaze8&9B9a8eKf<8Dkmq-k@QY-c z2B_QMmn+SAXAdrVizX2-Ai4#=Txrg6IBzZTNPZL4@8g##Ij1ati%1$Sc>w$(DuvOKuK*v!22k>u;M2j^OODM0 z%CE9HWD@iQzbu&dp!8Hl7Ej+c^Z7PSE>>U9=2G$v z;J1ShMN#AnSj66B<0;MAaCJon*(Uigi+E$N*1CY_Kq3z(Pt&gAyjUdi&^%6T#gwe+ zd$V|Jg`>5)A981K$?x4F^)5`!{&mjkg7mb%&tVIo8#Aj3+-Dbg=-MVGVhu@+xST#bVpKn83d5ikCLhyb6F{10LoY9f?n?xXB0aSRawo<_tAmlN?p z`h?pZ@Q2)wke#6dA=A%A!y~S$aptZC5$2ghnCla7_)`7mBE*o7`e^tmdV?`kOI(hP zoWzHX2{|Wf6HdSp4@rAm2IT33*72NNMg7Ko?mYNCiHIm%K!isth-;8m#6{TSL0pHq zOX5OgER3Ln7`<*7-4F z1)4*|9w+L%5%0v9lehw*uc@5MN%vKqmy}7Ev=7 z`)=QZ5@JRBTUs_kt*Ad2(3;oi7Z=;+w#4MTwz2WKOpL6axrmuzUuS$Ksx_O)*ofoY ze?!l@6II&`W16Q$U(D)@kw4h8Ouv+iPHh}5MBNW|c@(>wz)szi;Qk-%4|Iu43S-tG zHMppa1=Ab_T9c(+ ziqpPadFNr2(jE%#o4`)ebv3DOcv%y4d<;7`>~*Y$opXB~cbXD- zd-AKL2io+`FIiLQakgD5ZhzTv3v7MT{_R$&U_&1uJ)L5 z8M9S+CG=t7Md^yZ7B4AFE0*><2>(ZpID8HQ++7^_$YB}(Q26ygJ*@9IcQ~*`I?MG{ zV~aR=g&sSaG@cN?M=T&k?;4=(6OG7?=ld}=s(`omn8L)eUXms3>WiPBcKkvCf zjp%jUaZS@x>y&WEaIUXeW>J34stiwkil~KfGWB}#zvGS^ZSEJwj;CA2<>QWw#M07g zJ@^>kh00nN&s!QO5g9K!60Ho>U@_!`Bdb;SFRCr(_YG&Azfd!blh+2%5o=F4Zs?p4 z%J3<9O+q&e-&tkFOkF!qQWqR(fS|4X+Uhtn_7B(2d?tK6Jo(fc;m^V!h=PwDgPV_@ zGsit_^6bU#5tUPCyC=`0Eat_ESo5)Cc4G0(H&3lx;GRA8HeAy)fBy72vla2{$Bu=) zp7+(3G-<%r_{=o9{Y}Ze27=67nX{t2d&sx!5-yhcBXCJZ_Pyc1#66!lZc{%M_D>x> ztzQI`x}##ir;e`b7veVP;1cZTK6Tuzy;+81Uig$ZM9Y(oQR*%+=cJ=$($2tAnO%&p zcJ1%C=UMT{Nk`{KkLi2byp{bRjqFkJ@kvKk($enh@>PBPD7Jtke&)DQog?Od=D1zG zQGEZIBR#bg%TB9XJH{}sxf?%asN1LF<>?|P>?lY?vFXX3*#paMWvjv$!rzA11#b-_ zYh@VOHBVj=WcT#CQV@YKEd~b35F9qW$N%Pi?6f@wuZv;GWMN z$?9$5iO(I~n=I|AARn3Tu3mRgueHAZ9JR*4;QTWPuBiUP;p=<^+w&cnI}3~$JOp6_ z6}rzB#T2U0W6SLcLf56McLkHrI_AWin%YF|4~|UhdQ|om`jnXMB$Q6Gm`o{Z=li2M z&`-=?TZAsEE;o0VX!)Z9)3wmpYzR18S&Zh)m~8t5N?m}ODYHb>{fN%|6!9FbA40#Y zoj%3)4OG_}(|`TMWtg?NV~{bDFG=*TSJ7^z>1`KgkOm1qWCHLObL%7zdZ31@m153M z3;=Z28Bzk445pXQ{p7%f*HF6kS!8{xvgtSAHu#6;UVnZV%qdt?e5rmXi8ZqnAFF>> zhhU$d9ji?vXZ4dd6%{So%#-l1UX8b@dEw|3Iz#Acy=vV061fIoEOMV_*yN|I>jv944gX9A|vW)Rg=vcoyP< zTMp?zZ$O@kq?{zpAL8W0t4w97aR)4X%e0n!26%s@G_-UNMuOidQ=T4P1O6iT+$}BCfq%Q_Ud`OXpN2lK z^8@%Tu^;gVL>}=we3aCmO+5ermoQo+?n8p1JLSBD z0X7kd+m85eL{vT%@VFll9!wzO1q&puA>suO5Km%%ywrb>2>ahi{ul8TbmW<%px=*( z4;e^=ekt)cblA}oGKd=ROIGQltE zLc9-Cfs*@(2>3kWI~aBn_hT?eL_hmqM7VpLScI__5xP>& z`T+3@?6D#u=?)W*LbhG8ABwLq?4$-lc82%{qF&-J5-&-#q1Zd$L@6VNP(Kr4zXOqZ zf_Mg_N8*1l$3i@asu9S%vYB`o0Y-*ro~iOvQHD_+@ganmh|E$;goE`!M&W(LdW`yr zh=G@gh=D(d_)^PmR{fl!Nr&3=O8q zLqw#>P9mcIHDWGC_&|;>h?Pit;wy-HAoIeeV1ZkEw*|I8S^MB3+4!=UTRU9HJ3I6pQpT+v z#QNjvmDGCmv=y_>_uqXjzRmiI5DY-nu)DX#eKCL)3&k3E~;0= z22#g3@ls!{t%hNaGOh)tr1fnP)py`?Y~tv1mQ0*HD7Xf12-mU?!b@+}S)v9yrnesw zol2d_DYNF^IBWV%5pmYh3vauLn$~eCmL5F|dgzB_(nPC%+UxdThEDc6y+4aD`)LEz z&qc@nTIb~BrRqG@qZNFl_kdM-rNVn+et+#6|DjS>ekFuoA1IB_bmf;+7kdwtX}&Uy zT(lXN(93h@DaYMMF(ZG}PgsWxqBO|I?-?gjIXMx};!%i=s#a)KcpQEx_cx&JhY4iVV!?Jl%YEjD~ z_;6d52Ui)|k3AUpmvo`HDYDCN$U}axthOYf;laRKX;{PEWw#%&=Y}2#tdx4HyIFW- zctct1g4&X%4VweiQXd%+cB}18-@gYJ)*3y2liM=D8SWA`Wf=aOJ#~Qv((FI2pJ{!0 z*E73bNK-oRaWp`-erSE*R&lXNOCPx=Fg5A}ww`*{1SU)F_B?p5YgKLF2FWe%@6MUs z-<6N~z^XAh`Y#yMcO&&dZ=zRC+alMOYO`W$uL6x&7H{;;S8vT^8aY@W2#@Uj# z7zP{s&**^Ewcq0Y8L`~hW6Dq~tsb@2?|LyRz(=|>D+?I&--*>pq3W@Da47;p}n#=O^kz1lj^h&@e&J?vSHY< zz&m2=KrLBY+Vfy)bGM`N4RLUwme}UyXu+gg%;jL%7m3!b>x*z@jn;3M_>)CZ_z9WV2?EZfZfich2H&7r4urATy(UQ8;VfO#SQTu>9 z;z$=1o+54@tlenN3oGK(04>qB&w}+wv#^zFnW96fmeM5mrpWPidx!$}8wP7_GVGzB z0zXK96kQZ!cB}XdBYMo9i-E7jvQn)THswE9s@rm;N0ds9o zy6)pS9M~<@Sx`S8@wJUPd~4dbyY`hdyt}W&8hSnOl&FDo|1+gZ8^zaIR)0#JWAoB{ zOP%Ug>-wD5TCCq?xqo1awNvT4+e$O49EED-lr$q)d&;(gRXSW%@@?1@0W-~vc-c#w3hw_fi&r8a;?|rNb#p# z-W4oqb8PiFQ#d}{%l-Aad4Xoq#%+NFsrupEZGpy8o#&3zqb4r2IG{;A*U;2}+h;2q zu*BuQ5VoHhH2Y?Gr|g`0s7w^*PuwFrz?Z7mI}4^(p^ow38npR7_qF5n+9^0=sP?Sd zgt6g9Jh?IPb^#YeW#`@&O6hnp)ZTNZ z{FDsJf5WE(C#8B?t*KLSC>%Hu31+|NcUde*+_m%igr67w5!%RvErA+oCC6<= zOTJv38lk289p@aIZRakaRa>~{PZk}GejJ}0ZXSr8(+v;98#e&rfx6~R%>&~l+ z)*8KNH4RNE@9HV+GFiUpO5ySaCPwt!t!3ew$HJ8vEnTfYx~_awS!oxe6`QFSuNT)B z)lL^%E3`!WkaDwUT$jP(w$N zk>}2Y(N~iF5%}R8Ym=3bqeb;Si6zm|V2Z5b7pae?;- zXEXGy<3MGzcm40{A@<_ffU`=+WuYUb%4igg3>1r$j=!QfoGpJ_dLY7Q$`6-i%lKr0 zC<%R5{#scFspCSCu<1o&Z>c#;!PV5oK4bFK=J~fs9<2?|dbNCeS)sIUgalH;&R!`W z`vUc%X0(=i!~OD|M(J>dc9!2;HdH#qVqqvXoE1(DKV5!L*~F->wc&~KwPgz=H_C=J z94KEI)w|?=?2G!q9pcx~T86*XS@r&bQ5o_M)PlsIBX<+=PXt zJh!h}MSGqn@8wWEKJP}^IkBU2QlWQF3ULv-l4Hkla#Kc4<-xSIx((HH*=^j?9_>fu zqIL?eXGfxXmy%w+%U8X1{qk;FDid(0d)24{dF@J>ICvde(xu|F>$JIQ8!>W>HfU5! z89l~nY&x-cJb@&s8;{yeSzB#v#>SdWb=s=%>M*7ijUL{Vd2=e=vI{t5>SFhxam=)$ z(I~BDQ`WB1=-R31#6iF5SnXQv3}!1U8)Gg)%pI%U;>RHdw|nlE`Y*hBo_a68-RL9a zdh+o7k&arC+r1#)7mu;TY`y=L@5_&>&7ObZ)_Ehg`4!C|BG|ay{vN#pGrK_b=4YsL zl}>7C-Bu-h&(^wbuX$^{?hJK-+o?CtX3zS-ojCQUr6#VyLc|rnte(|@DslHXt&Mqh zV7AyZPV1%359kqHH%a_DPRq(#hXi$a9EHjQj65TWo21P3IWh}9ll6ogCaxK;tsPt} z)6e)mH_qs*o@-E)BQlJxNDpwAHbGaTnAAO(tkLeewex zWjEc}Gj9oZ3FJwgd=IXzQEr_)e*rq-^QYcCZz}uF!$ukX?R~+?6SSu-V(CMwqumY_ z^L_aJ<1)VD#6_lQ#+BJ=Oiw&x%oJkV+WLzblSiUvrIU=h9)|F6>GxlYl z6qCJLvb8Pdst58-))`Q>)q_CSI0W^)S8Hkg!HJ0oeH(au9A*}xcY=3X19}Gn^bdJ9 zxD(tw*rb1Aw*Gw>;5XH!{q~rwWm+xCm}t^J!1@Z5`l5w;UTm0*7j;O%Oop-2Q43|Q zs9B0N8keZS=bC0iR(WKLbkgIPHfRgqBj5aA@Lyu28XRhAOzFcH{rL!dnt1+BoJV{F z0ggP}Ld-2mR~}WlAAB9km+`3jmZjH_77aK^cs2n*WA!DY;*N z!QsTHhW>(m&8~2IuqzU9#R$NG)PI`yi+niDH^DxiM)>in@b!|@3knXXm7I1Uk406I zVl*fzz#%y@2E4N>-$%ce+@>4@-+(W?3Fcfwc?0}a8NuZL20zXSmgWyj_Y6>i$*fxa2PI zBzVY3r8!=q?*L|L(YFwDr`}*#=q)XL23`Zsh@gX`;H$tHh2%kS3QlISlGlUtLUI;w z^3~vDQGDyA`C{;2S)8T$H1O9Eh%R`)?tl`8euc&k>7X0u_ema-$np&ueg$n(j8E*6%yA; zWVK6wb`lw*M7%fTmj?RYR#^CoJP$chT4-tq&ro!^IrJcx9NFGOL_j7G+at>nv#|6= z^dJeP`4)+f6W#JKJKP;5AB6NjNd+8SAPz)MbN~@D{mvk~uq`=IKfR6^8ZJ4-*HHf^ zB4U6`%H*3QVhvj7Jfu$j-4fp*A^`6h=r`_^#|wFsi(^>VlEB{dtHd&`d(VtpFj?rM)X5bEj12H zi=Rk-hByQPlKc-MJmQ%YdQc*fXI#kF5W8VzT=J)gXhrrB$D^Y!F-+`=dI4>&pAPj+ zwQaHE6B^{hiPs}-i5bXTQeVHd7v{VrkNP`^@L0da7y2ipy)zOoNVK5H(cfGkV|XaB z94k2brd&idyF9c&$>>CVZ!A1+PL3#b6A_?^(%dJpN+NHIW?DZ*L{jV`B8~S+eu9Xk z)c453|L@4*?;kFtKcm=|0E9s^BDh=fE)w-kv@q8%Hv-;7eFSi}G_N8efc3;OWG-SU zPIwRzQz7C6EN~Oy{ws+W^i8?&h-W`2o350IG@e9+#c4zYXrAQUd`t7qlD{VLCy9*{ zVU9e|fe817#O7!@iCqzJVjB$nh%on8Q-KiH5fP9r(qOm5Fpz0>hKMvfFZoaemZjt{ zkO4YRMB`<`j~?rrdEsx0G4sCVTpeb zk@hZpCDT5Ih_ug?yoiXjuOPzx7$W?=i8uu5KU*3s)iqF_CD*qR!@(}e4@o>sL;ydK z{EWn}r2Zd7#72u`Al$blq9W@@MBXSRB5#Z)`Vrz8Qe%O{Y9btLmV6r#QMs3hy8ndK zKP~YG;&oU7Cl(!xic|wfOB^S$iikY%9*{3QE%65;UU-R!_wjl_zAvQ(w_o6eMbv=7P-!rl z2nQ3TzEA2`NnA-Bh5!?XBaaZ_zFwN2miQGBjoKeX#Atj=AOhx=*t;dmKQhlyY5={` zz(+(TS|IsSVn4iyh|Kgj5gzU$A}wE%_y-YR#<3=Qg7L&r$O}ZgIGYIbcEky2TT-OP zI3S~TA`wx&Ph6a*{jc2t6%-}zH6o0|l2Z^6xneTREvDdC^EHn;!N;Br9LyrZ!V1Z2 zCFfv-=G!Ev{8sYal7}RJPx7$jXCS-aHMM{6$U<#}DLAo8``985ybFQ+!^Ehl z4yd`!J1fI;z@&up!$k$?xShy_)N1n*ciXN5%=6Y(-8oOq^3M9$k}|+MrP}0xOPc=K zwri1j-s;*)ckw8-t>RYhbB*caado|vnWt|d*g6Y(dDA_OLXGF2nx*8~N<-7#p6l#k zuGnc%w9Oo(2((3bcAuLeMm(Yo?3$gDerCX3J6m~@F`wBgH~yH?2|KSk zJ3f*P9?Ydhi#!!ohIx@FUt3wfpyh-^z^D@B!x{mfD1D-a!knN`gzm=)r|y zihHI{ZJRO%g3V8SSNffpyj4pswN#q1ff>>t^5RaM4V;$V7@ipa3Fj`mr+aFvRkva@ z)ghthV-b4Obf5aPV@#&U$Sn{GePFBBBHi?~MP>ozzUfzG3dP+)Gzw^=5}zOH#XkE4 z`B{xZF9ddo`2j5}xFw*uP3GM4Tyb!lmLp0Z(^{k25$CsQUdM0xJ!(G>6SE)Fn&)6! z3vz}A5wP~qx20+uwF)^jl%!v&ZLGike$HB1B<2dN*PITV69*sDlBZ;bja+1;yn$C=ymnA7cDl@fN>(wx6{ z%HNjLu#LiPD#g&pwZ9-?wd@I``eHHn3GG+4kC?t4S*t{>-mdZZ$BWywk$|`-HQr+- zDxTD`)vDnAPik|_lV3rFTbx*RMH2U*#CfJe#@uYYVm#f%GSsaHxg8qDmI<`pPkKM_Ny^Z>Gt91sHt@Rn*TF&UEs}NQ44C=rV2R3wyzn{_8 ziuz|Yhn1s?wz^0K>o_Ri5DjZA&BUkAYE9JEqUJfy*dlx`ZX7rDh}U;oL)a+|M7QTO z*T$jP&^-}0a93NAnyl_LjH;j0x~aJAZMvY=NHyfRWruv@t9#9!K!%^&nOJqE! zHM3Bqn@)+U7DQDmqN+{0isDGNK_x{^?1QqmnCv$tx1rby^vR-PE8@{Eq9+sGhn@}Y z(BIQRSHUM!H#3r#Z#GML5kr!MHTSY0lADgwvc+EIH;4p}~WFQbUOc z=R-d!O2Q^N^(Y{ABNFAxbMf+g$&r0wYEdS{m~+~<7dXwj;Kym*RPg>#7eZ6NUhYqX zh9aq0aA<*J!|t+xkiQImqbwlg_knY!wMcq+J2($rx0ZY?_-gPSl2i0VcN;Pddq8lX zO^&2MPftOchN)<1jDW^8>EIkP`5u{ebnq5>hbu!f%oecDET2BFO4|hDc~G%e57tp$q$rw!LmUQ z9|j*5W1kZo{Hloi>%eaSN559L-yQt<81qE%7j=$aH9h1D*qpv8~Q~f%gKB1c-tiioqG>w0|B3%fPGgeqG~#(D)k~KS{m^ zoTvP|NxmMu4N5}f1(fp86FibctZXR-AQEFOz^{wpzu9r{B8I;Uz7X6WaX`rpcg0w^ z5B%O3UJ3pfcq9*u0N)SZTLzGFFDPapl0*u4BX}OMf69gr07tm=58e&l(So?x;XSyi7%i&TBAR)<~E*3!IfvBXg*@3U%2DXRA#S1pbL4aCVuD7_w1sY9B zvAEPnL`F|Xx_X0na*GQ2y%Qi&;YYFc0|=}={2e6J)^CJ_TG!h)TmX3=`EMo(LE94())<09-ktPz?hOa z1k(vbjLg3xB4af}jm>3-4#c7Gp9uQ{C7%NH^Tn0a7>0RAB40opjM3ArxKwp`Kg2&A;nF4PBlCF;u*$n0nI+aT|PMI;N)=B1We5M10s&lD|Z(LBJ&z zAyYbMV}4X$HkgK}rUo4F)>)?;QB6c~-9|*z?_#g~n{XDGpx_&KTN8YzBEvL`(~uMh#1Uzaq{;OcD_Qe`{EF-ieBe2n$8T8CaJf zEsT#4%{#(x_O0 zv?szsZ{kcOiNsk%MCCdnrjj-hmt*FJH~}vv-h@0tM0?>zJH)A|Tq4X1B@QS0kTk^U zSYFWe;b1!z$hEtOQ!oWYycvQdh&N)MQsN0>IlhPpk9oHM=QDGO;Jt}ck(82;AtKW) zm;3;bN%R^Kv2vK`$5h`XX(1l16~DYWaS1|BL_NS+cFsYu>!#-oVl^@=5v5`!5vAZE z;w^{~A_8=P2={Lhk+f%|{&}hY8_>@exscO&o+OvZ7fbX=98R2rsFQpW5%s||$!8Pi zV;)lS5gs0r$Z3A2 z)n7!UT}trh0~mLv)}kik`r|qx^mj_WTXa99jnybgo5rQ$-b30dzZ=yKX*LnI`$}FU z`9#URk}s9KTJlYjZqoEvB8{bAAlHLYjsTvT?X9f){ak>mq)es4eL zGSOs2T&l=_UCT8sm?I7x#a-jeXR2wzdtTR$TQ>erWQbjFX&#Zj&E^z620}(gySKGE zYw%=9>t@+leYTmJCJO$rCW>&P(`Bk?Du(Yex3!K&(ZGCWf85%$6E&g3n7G^v+D8o; z=T*JeiffK*sp=3h_PEwcY(B2dR&#~@1op(X79CG$t^CQQN)9)$DY+@3W~D{Gio#~$ zW`X9>i4isD`4Y=V#j}=JHVi19VhOKqS-h%v)@rlz{`SFcxQYweuyqf&xHUl3eR$xl z6@82EQSv@-_~cw64yrJK-@o$A$1BCTj$?|cExxGY)rklMpUFY8wHC# z*1j=|&@j8hT8K=K%gS&?d(wZQYyrDyk#t#Nyh`dO<8rdyC<~E?Bk1R2IES9kf|o}1 zRAswVqv67U)}jQWX2t-QdsePI7cXbV*yjLOi!sLl*RNbeSkOUOWN;P-RzVg}Cx=YUtgE0lBm+;
mYmy2xDP2?@z!88|9RoxcW5 zMj$fDyTQUUQ1pVvCTU?6kdgu;Ax3McoCCi}nvWN_=>p~O6wZaT62F|%`U85L*4pLu zgDs~UB}ig`h;Zl|OES>9Bl0QFsx(-08ksyb7v?6UWCtS37PAa_Uvcnr?J429O|ytw zJJ}p!-m6x(SbIjBjnbaK@dc5xvHCuT7=J_?OvT0`kt6DlXgxtJ!K|~|GLtT^XNt%` z@y3C}i;2!0OdP9UVq%S3JY-={fpWBdmnM!9E~eo_sLVrRTOg%5*y?AkaY9t<*=F`+OV3_i++uDc zYi@J&6!83`0=T^Ah*)cL4rxC;)WWkmjT4*}r8MN8`KIl1W2Iwe!;7izyw=C88HbB6 z+KN+Jx(^mVEmXTR-JBPCRAkwmdFuUQ7$EpByYnSgeJeOjbB-{pJ9M!TrVEOADc;!v zhqI7j^|``IRhP4Bl}B; zwsbP=4H1(wan5&#ICZxTd!3VAZbo%Eh&M%P2w~XPnqs=(GnX6gn*?+&qC>$&v>#>vh6Umw#QHID2%WAx{)qdg`;C zWA@{-1V85Gf$~OhH`ILAh?jdivl4!R(t@8GKR$nm@1bqwHbRG}864MAbm`-4i%ADt_E3+lD_&BBjaau4uV{1_7Q z$AEw0$H0@{2gDxAd`C$0FyO%;u_~{GY-jbZGr{viN#Kr zx?3cyMPB#*X|iCBC@$X0-JUo_pXJDA%9Itd23XHlJg1LvfuQwWPJ|> z4PN5DXX|LB;uNEAx);jkMtM34zy$~2mN=tbQ+1y+HQ0K9vzIldJf#E|mO7V2t`Eo; zv+ppc1RG!L92RNO3Itm;Q;)72`|r;))yE6xD(67))y>W_@%`=2$HmV1&bW>FFIj@$ zOmW^|7RMgMZQIj*&JN-+pEJ?_?`YM|+;Z{q&KS;m`KcJr>b++S=N9$WF`U&qw;v;l z6vTv{(>_Ptg{X*f?k+|H9^rmnTrx66L_^^{^2h^GJ{}y?MN!@pyiE*G0&gF~FXHV5 z;E}BV26*=v{vbGpsnS2cs?32#|EPwll!LP@M!p~id`Jvu4j383KZAN~4Brhk`=$~1 z8=$^9hR=qYy*b@H1%&2-O zb2h8~u-=ox61`r#$Io*nMmtKAdLyUxo9ApKufM^*4W~UNIQ@3#m^f((H=kP3!TNNi z({rWI)p`^5ahGgxE|l50o8Uz{)^6Pj^Nl{2+CerRlmD({WJ$D~3afRr4#pk#C9N zbieH?&U!8KcKWwdZ1Fi${eLot$%iF}1NSQr#IMJ2mK=W!XUUls!&!1T(<9m;l@l9xXY3L=l_F z*pf3Ad|`}(Uf^sdnR<-URPdS@&aUFB82&NTcgOJmK)o@BZ-e@N$$QbmyFea^vB1zi z7Q>66emaJ;Xg{wP?HB5u7}tC>6J>kvR_Al3;HquT<0kb5qga1q6l=DSva#Vd|9YcX ze}ZD|73y{rYfd#^Fp6~tw7l0Ft;{MYv&5+(a=#YthIn|pvt6WI2aj%dZg50enCCmi zr3RNj@6@bO^Yt${Z;h}5G5dt`PvPC~Y!Zy$?;K?@+{vn7*+J(kj%ZZ?cYo@wjd=EL z^sq*}?etorhPpSM6XG1f7emeoSM)oj#{C&g`oMW@R4WLpH$_uB1r`jyJ{avPHg( zI^x^EoM!}r+bGz=8FxeU9lGs%8^=xhr~8Cvan1jsBd+Gx`(LP z6wxR3?R>eiU}VHI@c zx#+)qtJFZj!|N={=oky!+Q2%Ae(=YI{*K_ZyAMAWFm^BYL!BwP4V(=w>uj2zN0q|M zyhsdznE5oPVs=M43O2RK>N9X4&9(%i`{`M=dlK dT1xO=cg3x?MYYhYNEIW#wB!Y+tc$C6{C^^wH*f#| diff --git a/features/nanostack/FEATURE_LOWPAN_BORDER_ROUTER/TOOLCHAIN_ARM/TARGET_M3/libnanostack_armcc_Cortex-M3_lowpan_border_router.ar b/features/nanostack/FEATURE_LOWPAN_BORDER_ROUTER/TOOLCHAIN_ARM/TARGET_M3/libnanostack_armcc_Cortex-M3_lowpan_border_router.ar old mode 100644 new mode 100755 index 33811dddf71326cfb1fe26ef63b727966e68c8dd..68530cb729479198d6257cad6d095c5d4f500c6b GIT binary patch delta 108861 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 C{SaXQ delta 105048 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 diff --git a/features/nanostack/FEATURE_LOWPAN_BORDER_ROUTER/TOOLCHAIN_ARM/TARGET_RTOS_M4_M7/libnanostack_armcc_Cortex-M3_lowpan_border_router.ar b/features/nanostack/FEATURE_LOWPAN_BORDER_ROUTER/TOOLCHAIN_ARM/TARGET_RTOS_M4_M7/libnanostack_armcc_Cortex-M3_lowpan_border_router.ar old mode 100644 new mode 100755 index 33811dddf71326cfb1fe26ef63b727966e68c8dd..68530cb729479198d6257cad6d095c5d4f500c6b GIT binary patch delta 108861 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 C{SaXQ delta 105048 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 diff --git a/features/nanostack/FEATURE_LOWPAN_BORDER_ROUTER/TOOLCHAIN_GCC/TARGET_LIKE_CORTEX_M0/libnanostack_arm-none-eabi-gcc_Cortex-M0_lowpan_border_router.a b/features/nanostack/FEATURE_LOWPAN_BORDER_ROUTER/TOOLCHAIN_GCC/TARGET_LIKE_CORTEX_M0/libnanostack_arm-none-eabi-gcc_Cortex-M0_lowpan_border_router.a old mode 100644 new mode 100755 index 96663b6c680a52bfb945193cef3e8f7b832a4ed8..f555ad50dbd0cb64ac11bbd1076e1e56d86cbd89 GIT binary patch delta 97410 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 C-7D|_ delta 94471 zcmc$n2Y6If8u!n+cV;q~v`GQdnam_4WD-a+2`#80K}zVzvNSai&_GZpfI7k8&=(Oy z8Rd`!k)nuL76TY8C<^xS&7kg5)E$C~1zjvFR`~w!y(c*G?Ye!xd7hKseNXTG-t77! z^TR)7u1WD0_bTdJP*QBO71-z(`qySFF6mp?OVh8iFlKy&vBxLLmG|HEfZX$G&*`eRGvgPl`ooO>HPy6^@uqcN`os9IH8lQ(pKL^#?@eUsXST&y-(Ls%0@#z4WI; zrEF(vsIq;-)c>;bs$(Bx7u1#QO#R;~@Bcc$i^B6F#jE@M^J?RIrv4|C_aE`(={TnT zmz4KE=JD6%O#SB-%Kz^;GNiS#3(C=t8A4S~Gc$y$o}HQDA65OIW`_P=`t$!$dH)xI z*WStue?xiymVu_f^h;*=HMMFxGyHqXt9!5kMbM$PzQPRuih5%wGyK!a`%gIf2C4l! z%BZ}+exagvGUKl)Z>V9~E6muT96gxv*HjVglDZ5543A^RE7mdNRqy@N%KJAR&3l9y z|66KdXJ*uux8vb&b1hQ!UsK+H)AMJpV#W^j{B~yiYwEQpnDK8Z@5Kg3?9BK-RNj9i zFjM^Z?4MF4?acI#DepgO@xNpbY_jG0^Qrli& zrq<=m^vw4Eg+lqihQR*6Deqqi{M<@r`d=yU|0iWS>QA#+*uSE@|B9o3(~UXyFzZm>j)#AlUAHpx#j0B+Gyh}C`%8<3 zS26S7Q~eR(uc?8(nEBV#SVZoE!unqmu4-lGi`DcOnE9VobLKPiKcl?=h~@d)nfY%i z@2$-I&!}ZcREYA13cq-6e43g6`wHd%*8*v>F!Nti_g~M{pfd?^*b7ncLT~aHx3t6W;A}7M^=+hZ43~JazZDE^jNMw$7C9vn5B1 z0aZ#09`b$He3{_ulNKu$)|tY0`;)KA2%jZ#Y)Uwy4x1eU3ZyYu_ss`x&>w2u(` zRI4xJvdO*;myJ-X=gjaOyX>r}Sz<`=eN`5x%)7zYb3kWt!&^$+?t%gLSmUpmGh+su zdqZ_C{F^;488#eXL7~& z;K3$igpCC)zM+Q(@PysBAF@U30T+pkbY$DhhyM`P5tG;-3|-Vdg@wLnj&)alOxyj* zu}3&J>~4DJ1J!HY8^KsE4=`IqaBXTbqhMLiS--(vP*CBCuc&Zyn|1%M+wxtorMr&t zt2G82bDI1~te~*cv$&$tJ-POqQ);C;)T$-Sy8pnSD;Q(xD*pI}pUC99eRU_Y6j#{p z4JRfmUEFhK-Y{q8yn5R;v!`BbtDZe$>KxnD*|Wuor+BLv-QPHF_qXrw;@%&PaIXD0 zO8^ZfDKgHw;Bk70Oy)HqGMOI;k;(i}h^)B}gQoV={hu8oLtEU_S&i5ocWR~T?FKOp zp)Np-9)RkQx8wQ$K=qR5Z{oS*XT`&3kc|j+I-bdW%7qv(M&>1uXF_$B=Ho9iuY>G0 zF|U?<@?h;n7Pdk5K@~|4Ub)EpDCFm%hD-CP3rW-?&=Ybj)D&q>S#TXx4=HcMGonC$ zbO(=W8b8ZVLvDe>VV9P|Qx}=Xn034Kmr~sABDvp1@`Q`zn;{R4#Ghz5rW|PYm7IQ+ z7w+btJ!SZRI-Gdli(fcIRFz`Zdz@>&+^cwT7RM|-8OtLUFjh${WNaD{88?gQVr&kv zn6df962=x2QL?Luy&1cc*oU#L#J-H}BEp|T#D0vuMl8i49t@guC%lzeaLB5drO#aw~BtV=qYgYmnT1OY|CG zh>pO5d`~9AVh`dl#)c3P({V)9(K(VUh{%yu#F0n|aTH@4LCS&6lJ^ovBVaNgi}O?> zdY(TJ$1(N}m}~hBV?Rm@3PlD6W+L>bfXW1TOzhz+Kb!5H%-At9MU(iEi0GNoj4jZQ zBSOD`cr{~}5)sWo#3~dFNYNWDxsLP)A^#=)#2JizO@uq@;K)8h3neClUUE=`2g=}a z#B24QjxzKnl4mlulvs;=AWmfL3F38nk4FXf2FW)t_7M^ObPm(yOycE?l}T1gP6x?d zO&A-fmE1xyfCrn2H!}7Z@g~MTB;Je^5Yb>vX3&EGi1o;9;#?-itTU&HT}|A>C-}yE z=Lk~c9o|Lk+QO~IRpdl$2^bvOW3BJeqYi#nY)MqIm21L9kC&8g z{9bWM3(pSU5RN2L$l{A$#;(Q*u}HbdIH<(?Ui&^?9}Y`=j~?z~Eb3iQ(n~y>ZOqx- z{fFC(Hgo2%)Z<=9d89vr`CTbB%o*lqImSS80S#$3c9)+&W>qTDH^2V*)5tO+s)_a!ldYvUkq_Mjomkz0eI z*T1%02{31R;F2J7Ci)ZDHG>L^Gd;!S27fBkpQ52#0KKOwNU!7R53Al;wY{7jjb~$P zkDZ!Q+g!`?xPNOk3(l%as7huN!m2k^7Z**e7Vj8&Cf_HxiRYWv*d2|BnJ6}K8@Gzz zKr2%G)So?fDty-&jLKq_iBC-RFlSePbaqTP!_H?CA4}wdt)Eq6Y%**(fA%ZE!}y#0 zMe%kRUlOs{u`naIF@-0Wg^Ox4ck#(WnEA^J|3OR(=X3arZEuJ3o}Bk=Ge&T)k^f07 zvvQY9u^053>*>RM6{e#2in(seBKyh{H944nWPR6*l#O(yc#emuZyCg= zaF{YQ?B$p%Jjz<0alm|_m9JrIqna~VA9n7nP4tcBGZ6kgvAlc4geJu3&S{t<2h&63R@k2b*$`rXob{LXYeHo5 zZ)1o|{%y9(X$b{D7T&+e!kG}6%!Bdxqy6*jsCjV?9GMN{L$k&jCJ|P-pVO)qz=2amw znePda$^5Ahnao)h{h^;8VRM!!oTJ8z*L(8PqGv*CI5|ELB9r5+kkpWQH;3l9ZA1Z| ztndYG4;1m93J(`Yi!o}<6yYVjYupwz)6uX?llwnMGWLa4^ef@#V$ik0x6KDHzKOt zQSk6Wv%Lj!DdbzF{4(Un#n8U|YUM9>v9m8vACQ4;r|y7~@yAY#^@W@x+KI@aTq1I&fQSh9Bf=gHuN1Ke6kgb0slpjS{acS!x0h-0XmMfqFaLj*|UPZ$P?K~yRtQv3$-1S$&=4o?#W>IShL z0iYpTPNGf_Vcv&$H(CereFQ-KfU&Ej`K^+xi1%P4!AlPxV*M-)_7IT+hot-p@gV8~ zdL7Ft#!`tNAt2(%Sa%XX!A=Gd5tu|=kFqBsK?^1Cl;)2~9wHuNtndgutktJPl$Gy8 z*0NOcwB#Aduf@j`(ao3zpTrZq&m(3Dx`RZ?OpsDAocIi~fb>x&v!qOOCnXo{l4O+4 zcH(DPR}w!*Yak*e?-9|ld`bK>rbwN1IgtqSOwemNgPuuhj3lDRnnHwr4e<+fAjFs9 zG4V^3S!bPg;#XK<6JfuM2#=>r&L$#fZj$o7L`3LmBJ7{;jM__;B)yC7u$YJd%7~{i zlo8?J8X{7-nYbOzi->^VA%4wRI}v60IS~<{$s!fOw~{|f(kMat21#?GST~t>^JYS( z2u&iwUk?%Sc#ilGS_|=E6fF_{GmMLtNAyXj(uy$?GWlzjOduLCc1qIRlH?(vgA&DvABVJSiJSeG%ArWdgF%u;~R5=?*#0p~qu^&=E#129g z(S?){hoZ_5TM!{)U-U;rzqOPBch)A<+wirBY)DXfbiNhlm(HMcl^NE5tC) zj!6CYB~KI0oP9$K=PVhCu)KlsAEW^DBnu>qCC7o52+pnty%f-5(f~IRw_t8ZL=V_b zLOZCt@D5Q|j-M@?*q1(c=FI`pEjR(tI}YPuN2sp2VC~>aUP&BpzdIgEZet zM8s%eL;gM_xl3}7PA~K0fkwl2Vj5@P64Nye1?dG{3!KlEl3eIOGXlpqst~L%fus7c^B%3xz)gZ&Na}MEWSBga1ZUR`YIrf~c$J*~SU5WDprGVGig#3mra5d`x&% z#7^hgO20hX`^^?pA@JGaHbQ^#=yaajaT5B)d~;IU_tSZaIpiobQH;2b?^YX%l7xCa z&x(miQ-YTIaMxiLwl0@7wDrE8cj0`27*h)DsL9P8z2_J-E+%Xv)O>N-Bf(h*5IIX3hu=+(z};8+fSO_Vh7?u9R7fBEG~ zEgDTWZL1N>LI0r>%=Tit!*j6Gfb-#Q3k*F}|Fe}(!|oojx`C${A8D_0JT89UfWR6> z!~#Cl7=L2*h}B}^0^U7rO7O$f2>ViT+XCLzI5Ze;zePN}fTvxS7p(T2clHeMmMdph zrzt)be0V0y&-Od9FaDjswmv=exalu%JL}7wUmmg7H<$l8@Iac`u3&eV4v#+)QMd91 z{2Oumt^5b>Y5Sd*KcEcxcCX3|EYFqbAzP@x_Q|ef_qEpx_ zBei|^(p$DCHS{{~j0=2M>To+*5IggtVKML4cZA=;YOpmtIn4N$gSlNPE0QhK+}qsU znYGuhLVYV%b+DYMfbJ@3b=t6|a^sN#@$O>Yy)3TMDudIrG9h^0ankLm%RruLSuCk^ zUDw*7$8xY$Z&#LoOS|Mlmhh$F(@$(`d~DI74hy2 zX4LY8cK^R?U+7R8C$spnC6)0N>hdqd<4d_S>&^BvcFzb)nJu@IpP>lDn!>fZmc5`R z6&lnnvj$yg9iq+ZC=hd;x<9s zB`f$a&X={_b{jWx9@(~fB`;CE{Z%G^T-!LP3X$Vs@{;kF=I@8dWd613m*$4BpJg&1 zZuwcZ;&DZY409Jd@=Fc28Kai|(;mTs_5%*IRuRN^qxkQ^vUCzYf>oQRE@(ZueU3hDH+3DUw8$(ulm z&{kqDW3=UM!Gv!g(TTO5H24 z5P-G^)I%?Dr6+oA=u^z;@R9fyu>d=hM5KiFh)6#u`8jC8T-%HaLH;EW?MOMX2onjS z3sWp&F%~#PFH)!-Lc+lT(m)FR#1aHV?1hyGvA15+D8O$a6B%k6F&U(QHxMxo*UlO< zF&8sKhQB$)G^~1w{gAW7Qp|cmFJ;96(g0s0_D2fBb$O5EYm)CvT2bF{K+kMMxXY95 zMTGltAVq8fF$d$OlDa?WO)PeQmn&?mtmnGEp7rSpht*hSX2@R zph$@2NU=0$w2g)cL=s`&My$a4U+UAg9O+*r<%S59KY6%G8azitmc2!U!*(gBM?$t? zX+wnhMj|{)N82QO)Mk}|Skn=a;vGb!^dZSzl6xfgNj@d=n|Rm&zZ7XxjgFZu(NJhq z-H3y*RYXLv{fQ{Ka-x&E0zH^<;*KWXqD+VuBe!rnpCU#yVur>*?{Bom8d$~vPj z`W}{hi$4P6uqR-)mwIj!&u`-y>bc+|@$ok9H8sqC9oB6^imY?g#D%=?vu-d!HsL~OA88S!N5MNR1?j7VXR{~+08{RUh z-r$G}i;Lkw-W<=A{4l>cU-7g2sDL>rR^G=WV|Yt)`l*1L!LlMMj<+h}zWcaSoV$-- z8nv`?nVcaYMPlf7-aY?(V)TPWZgZg`n2)coo@uK&e|F=!?kw)Xur<2gwwc_XSV;P7 z!~@&;em+-Rdp{1vXNZ>j`R+({s5ZB-b-_t{+ms!=it|FT{{jAkS6y>EHnO?zjmB@1 zA8XC-VLJM1VoXK@COEfOR5`i7cV$GdAay+s`>m-_{lor()(nUS+N{r^E1b=RZA_!NPXvrf2+WOZda#KAzdaGEOEoxN56v2c_JW!#-VP ze6V(E*n_{XdSp@e#WNQ_IQ9J5X`=c;s?2Q^mO_xu)~^&e+wR_y%{ z8J!&a0P+xNe>miPBL)j8lY1Lv{inOn3z5lu9{T%Gb59tHxu8K78qE4k;oWhD?DdcE zJ;r*tNN9Wf5$;gDkHG?s8b>7QNSWkhBKFY6O8I&zuan$N#6HM}l9h-txqFESca&-c zqs4ITfN)Xl)bImymQ9`&)5Yy}gYOvxO{c{B{d{v$NZ*|9S~ zg#G7;4(tpNGchhp{dQs&HglwYff;f)tn!H21JHYF4;T$3XA=>?93mVxfE1C1l1n95 z=nT25vx@HO7?(z2b|=?Xa|_3b z8fxb|&S6;)V74y76E*!<1hW>JUE8LfsH*kYY82l|%{F(OKYJ(aed<41lgz9xb5Z-$ zlT}7^0%!Iv+oi5u()e8Cp~S_B4Mh#bCdSv@Ssr$nIqaS^HXv6GL@eaCXM!w?x8#&; z%}o8Q)mP3BUs-7i+B{t|R7U-S$v>&mV4I}%F3k3TINHYRd8xQ!AC|c>m60O+ah_uB zl~}+U3arToS}9~KVG17SiAla)h6gvLg<(aZ=Y%mGcad;Q=_)bxaUSn&(E5>WjW%{= z(tXRR*RZj|6+{D;G?$-P(pa>@^hitc63r|F=barrj~duoxoxPy<~(73_~#YW*M6Iw zWmvTShqqWngzsddWe0UVk-lw>*7fuh<%_-R{Mlq=81n`aPQ-MJ#$dn#-v=X_!m`XB zl|5K-#yK-knHsT9wMTiPHsqG67%WC-l&40mQ{7P;hL+P)M6%4m&d4-QU^5?yilp!ip(Mu<_KFn3hb5ZI5{;2jJN<}phR zo~!yJS|%aj6i{_0aV z;Vu~q<~ics5lxg6+-~+*%c7bM{xPXhYophdW*CFfYbez#kk+A|Sa+T?JP_4l%KBxb z!-IN)qMFk@lsC1h$F0bxmRzPFpOg(r_@sn3)hg+l8@?2CNd$K#>6vtmZvrUdGQ$B0$O@tKG)a&C#%p!C zt@tUvk5iwrpQm`2qQlmI9J3azcS7Xukk>+{Lwy>)&`q)(=&1FdF4I-d4w>BV3X#cv zjY%4JxJSRM|FnR#Tj65e)4W^Z!y!JCPmhGiDnz&n7&>ml{9ASaL|* z{R}p89z`t7ZTp|WmWp>L?9$Nm8Zl&OJ4Z66&)7=T^s(irv4>=(NDN2)ewFz?hkaHMnmeA`(l9IXDg0Wv9LzgvKV) zKmqRnwFpV>lH3y}8b=y?`yM`0t?UcaRuIMl3}p-Tq3pCcaS%I*8oCG?#qeBs2wE$( zA&h?~7C};WMe8G2o(MoRz7~PI7}^MySXk_`h5QPOdw0AFl8fQ2sGzXOCZ64H$Pw2) z&qsK_-5ZSwabcN(bz)t$%FJ?x_!rMSIFl}gzB!cztE-Z$vWG31dT=VsR|8btbJ*oU z2d3Ro{^WX7)5`L&BgbYgnflyRYn8$hi;hh-2U}+T`P7oB)inpFCSrpp(N$d)lTpM> zEtWF1uA+Wv+U*tb6;^xavUP(JeHGSzz6w`GMcsNw3%jy{Wf-gUR%L4L%k(E^iwd&* z2)|8hc`WBZK(QHc4VEIK*viVkZS%dr)06>d3i8LbTPTqsG7eZ7-B8zmx_SQ)nanqe zFJ9tvG45#>T13xBFf-oxGPZo8U=e!}+BKJh;3XpPGXM0tA$X+4<18Z9pMD~m&@o~H zPDzOH_!}ZlW@*x=prml9rZEpBcU04f+N2NmHcIn*B_AS+!24mvRBiY!U+htbaU5!> zM+9ok4*tH_GR&N(F`V;kCZE?!V#1kIob1+^eW;>N+9uU8CDo=7}TScDI)tJCB z|LMY>Yh+o6lMiATNM-9=#k@krqhLq#bfIEU3OfDBawhn@WIK~+MMPJUOWn*lD&Q&3 zOWKA|Qj}K{?P)Eo)?$;-#^Tf3Y{g1Y;dcn$Tj}fV$z~)qlsG+}-lvkn9@*`Fvi^Ix zXi0P}jByxtq$KuDGZdQbxX<02Dz#Cl_ZXW-_tsZS#`IMGL0k-{i`k`~{DK3CaPz?A zM6*3fYq4SJk%8`bw?^GydHDR<@wmC%9na)XSi0)hnvi(Bw_-J{XLpshz1~~7PEEHS z!9C#87QV4O;++V#vi|k@IAv$z%O109UF*OCF{MgdcdRYz}A`o+3a8dSG?a9i0xWrD%m zfObRUBlf1Ww@Co}^tYhsQnCKS(K#M|19=tLVgE>oc|G($L%Vtn0~wj4X|iC5c_ZW# zkf}X)xX)CWxc?Gkl2;2H4)vezcyx$N=2Jps^1LcUCiBf9GMVoPk;&YOAx;13{wMq_ z57JUk`?sMM(5qgM$%FSpWD4L+h)m`WiJ=b|Q?#_4M!%u|^sv4Tk+rynOb5uTr$S^h zr!umRV7^Oqt0GxklDNtnLM~NL?-hMAu^dC2$9MBP>4+Cdr;T(pPoQ} zhQFTX_m<_bi18ERFBsW%+463d{?jpDv5l&cGG zL>0)CZm+}scoXCf+lwGS51FPTbdeVCfU|%o8K?X{_HpEUq;&QLW(Lo<{bihTPo%dP zRxQR8a zS%n4wB7R=&cBZly8A=8Scp9+{Rf>poQ}0U&X&|Cx7D{TjG!bFyeaZYekV@K5L`lC# zg!_+(h%oiSW=1@Kvr!_G~8spc2hg>|PoS z$nYFU_jjYw*;Am&M0l1*d>+S8L=?bCqCm|d!rm(43mCPCFXFgP>K`J$g#05ugqk7s z&k*77IpQJI2uq^&z;cO5T`wX$9!*?_9a`dQ+=`X@n~2Exol<^^_%Z^L@)08Zd5`G9 z2`cdw{Vpf@YeT0;%ptxy0qZh)cnu{)d>u7{_=Y}=QOT`S|NHgC^ zL{4tjWU+OYk{eDV9qBRg?kweg#gMEmxlMg~!&p79v(#9}^Np>~)H~>*Epwu2Yf}SCMv<_Ey`n z>y!n2#N9#Ft7_Y6Dm$dT)yV?B;FYszD{6Ic(=5Ej9=JW|T2Z^Www5`~eygpba-g=h z&0)pb&he+3zS(wJ<)yd~q;!eD%HOxL_fWI89B!-03-+#biTWFqjFO&}x3LY0H1%K7 znu9YiN4=q$`P8OT)?f38W(@+g0lO}EB!!u$qXc4fAf zeidu`ir~dw>NfR=VO{Hb@8(avEW=gt>CHGJTUw`lp4L;#@$A5%0u|d7S^lnhjw6@# z$T&J_7Owe<)pHa_eDo2v-qNDtwN3r54a<2;ygWzAh$;3{X}P4^Lh;=k<+8X4xfjT3 zBSI)}*EVvlQpEX5v1p#+>T)ge%6f!5Y^?fbidYUa*%J$@#jEp_-xkjGm)7q{b-KeG z^=Y+ktDP*!eT^K0e^BM%p^8?J>DpgY`ebp%jY@Z3A{N}JWOphE^sLO6MLj&IW(^JU ztij^(8dTyF3_gfUwG=_gurX4D~1#KX&w zwaqrnNzl3&Hi6_%w?8~YCi4RrI`yCQFGMEu&@D-fUSrv8jENl%$ifaxsybv?U{8g} zWIiEW8Y4nvK0QPxbJm8NHcL3azU{sSC57V+sAm@_J-tsNp0re?xz(5panfg}Ga>he zLN}(F3p~FJHAu>b@J#QjUM1zTkgtP0TFO1}O!G;Gywd!qXZf>&c-39paH}!~uQ)w> ztFoHUXdB~IZV2~k-zX@-unTu|yQG2G3w*Q3b*=b}}_ff$~M$brqo zeh8R&Ic^*gdtwnqg#B-cgE9P}Bq-8evBu^0(6)1VH6hoGU1MMQ|m8oGi++$Z@hNS~QtXlL}92@7#NW1We= zMa~gvd?upD7)V4}k0wsi+p97eGdajg9*UZXT$~q<8g99gv4vz2Tq(Jk*aHzGA_a$u z-4Ow-h?Hp5G4aLiN{eE)h;ug^9pced7-0Jgeutuegh7AKHui`0BC(~v$-%D|WA4D% z{BDFkHaCbZ5b;TYmjUA$bRv25<%J{>-KbpH$)p=E#zI$#t4QAnpV6ocvK=^K(j% zr{v*&pK?%zg$M3bu5>hD-%Dwk&cr^9&1&5up_A_Z^52yvZs`JO6WT8f}~mX{W2!G_1#mJ z6YhVq^6`#iyNqaUm{mmhW~IctqTPw_EinJm_Dk4gY|k!t7W)&AEOfHKp!V=1930=S z!2Hd2-Lu2(i!`%k(0duL6zIAyw%-QbTj1h%U{?DIm_8w0Jl=k{=F2Ahy{f$hCJ#%K zhuTZ67p@{3)?gwM*essitaS3;)oy6vuH)Y0rm(kAvK!LmMH=Q`(O$|rxe}TFWe9TO zh0Y{o%z5}+kLM|PrWDO>kId-E05veXa@J65!L{vAHd=f?G)9)Tv_|+WEk7nU6gxa- zAAKZi)*xGkp=E4hoM&m<#4SoVj}M$MW4ae=;uAM+#Ta+6&A3hZEf2rGQf2%uw*ERX z<6g9&o#N4Zl`gJLL3}C<(Ld(3R2;im;373u(Dh&^t#XZkt6{&m4YWcmyH9bdbNrWz z-S;Vuo>vDQw=n0#fCCe;@qvy^9;fM!3{+z${CHU9+a3Bt#Gmd}2B3~*+^1YtU^XJoxU^hNHqrBrF8W*OKkZa{8e%*4#b{sSVHlqgm;7F- z<#&q*ey?0@%!faBil|+9@!+X1OjgdsmUu(g*vl}Ybo^*`GEx|?3G14%_#*8)FOv7+ zb2p~={7{!>L*?^YyZE?|QXbh{XXn|6~@I~vA-LGR(v5Um}AVO$tQG6t^U!~(`95#eq&u@JK; zVi7iEi5T&A5HaG>X_tbL@eIirdwwKhR+ONCbm_MrJ;35XA_Am+FPbjVi2x0`$B39M zog>17NSgJ)1MN#t2sjfmy|kAjNjpCzYiH6FL9&n8)O;e`EhNI-8qiAtY5QT|4l+PW z=@6b$x(6hWXn&0OA?ah96=?v=FccF9=+i3FUrzEsz=1k+RuH zbAiFwXGJ|yhRFT0N@Oi$%Gz1P;aKDok);cX$f;)H2t=5O6g@&jirylQ#54`02>&Q) zquJ9K>{1XBF>SVm9GPN5`I86J$N(O=rG>4;QP{Z!X_E395gz&_zbA7{PE4q*u8+p<|nAuslS{E|5p(UQT})0fjr(Isa@>O#rlgZ zz~W0pcx=HAG+pxVM?}E%Jq6+<$!mxcuti8jz$=Jw-$+D4))QfWkK_x)Q7HfKrG_~Y z8VD#AqzKt0Gl^)wImD^x4~Ww+0hQ+CL5kRHB63Fiz5*h!i)5tyX(9rCg@`ggB4z4V zEnXNz(*p%eL`*Y53aEzU>F|(v4RVAC4_+W5hdv?BKrJU;i{%w2sYLp&f|fJHJXC7Q zTZuD~^-^vIy_7{;Nn;kun3#{XG!Zd>jaZAd0dY1W6$4&}B5vKu% za%v3`mGVv^6|Lk`AVv5z5efJ)hT6XywH3WMMI@Doh-4Dc)6vICNPh?sDWmToP>SXg z-3WkKhsrA1N}PkNCc+=>a|d(Laghx7)>v>JDlZWcw$Wz{D2AEPAm&K+Cku$-eBww{ zCL$uThUmm7O+=CHBo4<>1`(^G$T;vO_(Qw_9S-qkbT~x#w~*+;il2xa-lu)W09ld~ z4~=?cDG@QHjczJyI$k8Xm53}qKt#arNd3==^U-rAfQVoXNC}xO>6WB@Y|__0A^_eA znKszH+Qu{L_`ksAR?;<5s_0>MC6FJv%C}@ zl8gX05erd?K}zW^$vu)!NwOYu>#v(Pbs9Kt&OA}I&K#|MWluTKMcaKjUj zUw0AbT5-3ji`Wz}bTiV&1zyzFb;^@?p$fNF6ztd0r}dQAinMDhQB#uTIvD+OcTv}Z zPmw(&(hmN-1B-hjNp060RAydy!C}lYW1^wZg=)26 z&Y9AO`J?R2v2%Q1mO147**T*0HKlOCTD+6EraU~5%VJ!cic(g@u9%p7TPsattCl+1 zT5VQu^w$nzwkGZBE9qJ)Nk6Wpu*OxlMm+qQ@_Qa3u6$jo=Ih#?eO)=uy+LG?{^Qzh z_0t_9Du#)Y{?pBABGw_3dFU+*^eEbm#ZYqtGO0r*^T-ex?x+3Y7Cu?{`j-}d zaqW@JcVYgc|MUo+4w1?HOo&VoJR=?*XHF73JF6D4*{>|*ZjljCQZhb+Ss4`V*}VYf zBVh$nJ_24Tt_mOI!mBj zA=2h4ZC`99W}~YjB36$P(S;q5)TX1|FoS^Cv`=Ctl7Apg2DP^Ud!qf3j988%W}qu1 z(g41Z9*WRK5nbqfiD=M&Am*T}B9>s*2huktK9W35bRd_A2-t>5Q$%SROA#$5BBGZ{ zP9q{g9?7l5Zs=-g+DaZgL`2MABLjGJn24U?J)%t>+D5#q#2Sq~ z(_*6=L^bvZqV$)AbC}gWH8oYVv@6{+EJZQ6M{Uf=W%;hB>n6I@zD;gd3GbWke$Sm= zH?b~He9(@@8YPCFR348lujgs;hQ;;hNtDBh2kRq6{QJruu`%`O`^sgp4Mi^Zn|0J5 zgr!^X4eqG6(hqQxLc5HX9B#^G{_`hLLoz(Q&n8`oD_i}A??YuoY-FL;uKEmFXy+WWDxw`+#$)8yUD!-BgT4fe0F z(er*XyOTSbKP+G-Eb$}TZu>;}B%$Mi-+` z3&f8y29LKEuziDB&R_f~L3vh$8XjF4eV0*n80fv`y*cUug-5o1tf+5t?{qXe{ik1` zp4TCwMPnRe2SQ|w(CnoUnat@5h5pmsmxah=-XCou)O>h|40Dwgs6W5Y6P^UC^H&EUE*EB$8A5E)ZZ!IDX>77 zK`DJS+arg>*^+Ka4E)+<(v?I^C3X=LF`psA{Q;2N9g=*7^f5Y~A;P`^(Iw^*VW08? z_Hh9~e_;J3E6G9{+A1*}(+eUT&Leh3z(gAk{H6R75jp-A5%x|KGth>Km~@$tk#usP zExsK%F(5e;lX_y7SZPs{3y0vDBCoB((T_YuX6PT@(Co+#4Q{n#4kXGdUbm<%c+2LC zOvNFrCZj=&JIXV8jo??S**fIS*BW#uZQ4seUB%S9Vc00Pke&Wwz%ksErXFaQc=vAA zA$Db(4ZK_qq9yrC*-MmJ0HNhLDv+l)$}hQ7K4!N0!h#P;GtERhOJj6^ptg1-s`(y?XZ& zi}smw#9oJ5ksohQa4a5wMMYBOn~BNV)p5LnF}1zcF}w3nx=0>Bodt(gC0E4{J6Y`z zS()k$%As1ZK2x<1Jz2|r@s5+@pDgbi*j$S-(NBHV=4#u8XIpg@o(=vbH&j=X+1XR% zafi3H@HSTSmS?F~4vri)I5o8fpMCR_r@PB70sG3@mCfZQys&xUJ~=v@_iIm|vN8IM z0@@4vcCU%%N12hs(rQ>f+=?w(YMSy{tvHaS+W0_mB1?66`xhqHIHtE(Q_!(U(Zs6M zDpb-eZqLWIbJn!`mQwWAJ0>&761;fos+yYSp0O;g?!M|7)mhaaEch0`5eX6PI=T=*{v-|qJz8JM{~Ji1VDCH09q)yeD=Wesze)OZJiWzhXFTI7`6&!} z>~1@^AJIjjV{^N4oGnMB>WvSGjnGXe?9{r+vGBJEBI}Nxv7MsAIS8#e2+wsLH6JiWV8w5gX(z zrw|KW2k&>d)sTzRid=pq!fgybtJQ{z^bG?Jw$cZ}-++7a50|j_<{%?P|L$tCH{NZs zh1xyPYDLZbRN6hWHwwdDSnaZ1Pc;6}m{&+05%(=#rQU8}%37A+D=>4=D~p=(D)6g| zY6rb{TLJEuEYwyj#&mlCM|e#so=K?|_mH8gGydq1O8p;hP@70|+iFp!_VaqHW`PC4 zj&}Xcsmr8A#ZkSiPJGo}&FXt{)yi`7v1zyCm1_Umq^9!lcUlvtEeQ|uO>{Of?RL^r z-ra;3maCVPvd0_Ig(fnG^G1glldGnn_q#3^BlK3S*r=D7_)ms; z>dZTO`N%;?L7`To&@tF^P!TrQt|_pFP#5vXJTdWXE+5Y6a8=nB(L! zr+Z3}TIpE7W2MzzvDo0qV5(cMmMnWqZ2^m5F*oXITs6Hi6=y`+iIIKezVa}?DCiw?K?%5vRSTlKQ& z$`-9`qb~Sl3WmlpxQzNy$~Xrytqf|s%)Eu559%!X*97eL@pTje%jxEKp*|+Kw!XUc zIs2>j=jN_FxRj|5^+wT{r`kD=e)H7$!H#L?_TOHMy6;Q~9Bf?Jn1Wh3WF}rc4V0(y zU~}@~#LB6!E=zRsBPP6u*u^ny8MB#!RvZ0`7Yc`?8C&-^iKu+FQ2G20QI@YJqQm zt#`~0oF=BbyRn>JF8E*$)DB9zMQOn*%(uqo(CVZUfxPv$%k#!5s_AF<<_Sfe>GiRRP;&l19)UxjKrIPc;puLvmnq;3& zb{zhsVCPCBUJWy&>rJ>Y-gF7-X)ML36=KmuVzlznbHbEk_VbM_@9DsLdjySi;^iJ{ ztoP5S&T75%Ib^v7(?TkSt|0xWA;<4sJl?>rsEEOoqq&~vCIpVxb0^;V`ME&si^rot z>|@LEqI3iES!FI5f#3%CGxA-kZ{ql2sh#`@ zj$su7VI4zQ%%5-~4IiUQ38d6d4r6acop`xb4s7YM0n-UnMsO8Xz-L>-n6*0#{1ogk zWr4FnwWX`u&|+-9Z@RBM!tbOa*M@)N(S?-@Y&5NQSI>uP5vM=N#7k>z#Cmc?}k>zrZ)v?n`*R!7C$pzGu^ z=GZnpQIK(AZHL+m^(++aU#MtEd9J(Ako1pn z(P8$rC!O+?pS?Zx=yj&%mc$2_-*Su5_v9_c<~ZLEx5WFpI+Du_T6dLWuN`Dr(~_9(F|@3&RD7SV z%D`7LYFAoq%;(ZdBK%IP7q>W%w9~|3H7ZH!OqMrPR*u)(b5LLj`XnMfKVWE4u#50q zyAvn*h4^l2nAVW#TLSyq_4yFJ*52A~wTCrPanrZFK3$blXl>;w9=eWXr z`9*P_t4F4wtH&peZPnUG-NIVv@_-VkLPyU}7+YGxl((28%-1h?<)} zAEly?>VMIfLoBkTxI7%gdq>B}-)0V%+l9C>zpZ^JE+)h@rn+X%|xqFLF%7402Tt+lHBB z%k3wZs*VVJfC&S)V__G-bU!h}fK%Io59nHv=bVF22is_rg=$3C1BU)0FZxRhH zan9nvW1}8JciC5~WmPlxRPHKI4d}Ut!2Je%l&&;rYRO=FGCC4L(Ka}2%%#m%!Z#fW zD(H^4dn^0O8HVY^y_Kr-tiLbY2JgxGPeI2lQ?su;)891G(6Z@5wi#NiPD|jE#s?c| z4OPgRD(U~PoI4-B$)dSn-F)T7qeZOaBCSbYs4ZZlPsBQm&B^6>*9Bv;g09Y6J#%+C zJN!~`(a;rIeWPzRkY|{qcQdx+6uHVT@yC1WM;-0@XnFjRbceCYYD+3hD2;a;)-FKg z$!?g#j<1PUFYBn!wLyb31-C?OwtN(?S`mS@voT}ipfJad##ndtvZa@s{5R+c_rkf- z?TX;+3;8f2IP1dm%u4sEcuyFzl)Lan1_aU(#I^?RvA9%PX8wlzWlZlpLKMG1;*n>x7Fs=<6ph(*`Vq)Xclw_diJuw-XK** z)@|ET9;~c<^;D9>&>UaJ?MW!T!Ii}_5Cxx1(yJob4nx(|-4FI-!h!CkCCvQxC6zhS zw!R&)0t0Z4idrom>y1n9RpQ;=Y8Nm0ZpFVC!uN=k3%y251c+8XE~cp)QB|4b(MIzk}KiwGZlb zsJEa#FyOlfr}6LuR18{37pR_4^y>WpsL@bYL(LOSebkKj@FxAfyB>#5n7`~3ulG?m zsdFoax6SISK4%(3J5%}(YZpAc79v|9)4sd@)6GLqE69AsMdo*kv|VaS7I{TG>H1H< z=tDc?9Wt3O75mH7p0V^+QmA&G_=&XX5=E%?E^)~KwP&FlTQ{NFt3qUo58b~EHSZ%X zX+4@2GurxXXe<=ye4G*7)quDeKHev!QXB6+*YqS*}8iLXt101t~3JxyKP z`V3MZ<>JjDYKHh|usTItJw%-+V)rO%B5|ntqTrS4V8loau2etvYNukCBU#8NI`jDi zv_Pg-Npd=98G`mt9E$8BB9Ew5Dk!g2#6J3|7}?)J=9kL7WALz)-ywUL)dVHALoqr< z`$%g1NES!PJM#!YI}L*e+G*HGc^X!M@ul}+l8E7v#j+K|Y!0AXG{Xf9jpi+haNQOtti3qTn2z#GM*^1go_Nlj_ zh-i1aKpV+$uYJo4a*i~o9@Qf59`BOp~P3w>vku2qaigVj<_yc)w1aUw335n=uf5dmu7&jhu9 zZ!;bdL_?+q(1VEjQ%uCY4(j8n;+GK-aqZvUfOJiZ?Mf&YCGdX~S1ehFzNhX0@Kn_4ImmG+Y0LmeYfRK;`0zn7? zBtUS2f<#3Y2-=W%aH$~ZV$_Yg;G*cRtNhm)!QBAjHiC->x?a1Yu<(Dcy9UN|ev{X) zzN+f#>gwt`zWQpfKn`h8xv(>_9B-uHqlpMNjfh8OsbPUz_Bkt{StsOMh?RJAy`6A^ z3)d3yOz$Hiz!u^h%wrQV5q3nl)95bck*Hz#%;Si2kpo1yTNXJ{hG>zKcbZSc4PbXS zi;osKR-o51)d`Q2g~L>VGX$0jwDh*dA!opuuxE(4@CyPD5s`qmiSuwVOcIcfBqE3A z2ySg(gPhw-J_^tOWuDxMNi!m{%-V(q0dJ242U@$x08a^S633#75I8i-_E$@sjvOQ+ z2X+9N1A7GS6?j14K@0KxU*-w2=v5&&B=Cs9w*|f{@R&fKz!L(00W!g9U4b*P?t)l` z93aAdiok^eA0T=mc#inoi zrU6-4a|Mnf;zq}I<9moZoosouwJN3>Ws_7-$ll&)MLD_dRoMWGKdIQYG~bYQM<1PQ zqUEN7KSvwxb|o@|^n0D_UzG>qjZf(DKgQx!A$|1G{R4UyowyaqL3{yFe@KHZZ7iMJ z82q2Hxdk>Jv^!LxbAf%x9lFaHc!vtxord=gm5WGD-=W?G7%~Nuk9nVZrW1*_>(-d_GCNOh;t9BJ8h6Wf(8x@z9JMgAl+6Pi%`nPQ?Rdb!*pI+&e z2-|8~WPjh1Uh|~Xk@KajiN14|^_;P^@w(maaY<>nzy@ofZ~weq^CZ|dl`?L|4~X$k z_AuVR93s)@UoO|y7u7cx_G`~NzCYoVcQ;}}hu0@34T}iRZ!S#syUomcsdqlcGSZ|d zqimiUn-(@^=+LShr#0eJR9IB-Bm*Q53yaQwvQYA+O6TW4cOgx>dbn-xJoTWXKMgQC z66MXxmi|5|wV#wwGID+u#vP@s?mk{m%8c{}rY<|Dg&F^>L9YDE__;>SZ@Y7`IzsoF z__W!FY(0z5gLonYDfl!6%Y!=>l$UmpR|Ij&HwAG%>#ac?@|luGSL?775E;Z7!PX$o zQ+|Q$!`{BH3MDqcDXI(NiAK&FX#O4vc7m50d^7CBzU0y%&P&qxbFiGMy#Y=+w^9pm zUXm)l0Zuu;IROrNp|z)4z=0n4@diRXQ+_dsQ~s@yUZ?i=a;G%=uy1`q5U01A zAkJvogE-~qgE-|2@WrqXJ0EI-IOQ=>zmj*BTtNxx<%oFn}qL7v~qWXw;S>my@!|UNLS$52QF3x{w6p+A68--z>k9mx??n) z_(c%s3W;mrF5&-W@E&;9X@b8GJ_3A@;9r0*0~gmDWQ|W8hC{ya5RE4C|G@DrvJ${C ziy?T{%y;HaG58o``)YMj)OTx`Sh8wKAE9*ZZKB{81mjYXX;!I^yCaUiC2eg22&hX?F;EXoF*`#N7BUdf?L*QG2$|dZU6DA-9tic*I9FG4F5XS)zo)*PTQ~t)O9kNNi0QNlaT^s+Zv5kt94RO zUW~pQIa(Peu^j(o8>u);`FQe5gd@&DO-gsfQ$?JMUJu<7Zj*4|CHUJ!FIpd#_EeS7 znu5nd#STzKtVX^P7udaBUhn|8avMIo0$(QLLhSjomwbqb1RMkM!j_>PU1ktZ*^wDuaG0X*1{z4(YO}lqqPXeM?E4&!`G4N zSxZDZ8wG9y@_zU_hAl?M5|Q!kL?pwB*MsS1-`2||83S-a!DwO)8Z!bdLqFgP$&oQD zg}c?W1-EvyhkTcCw-zpezb^d$S-5{F_$PvY4rBtpg;I#bJF&XHNMS#eLM9|1NDtG< zm!YC2B1h_ldjk=7yjI{g%8^6Q5${1)K;U`eY;K74@6w}zk*vGTx5A^7~FviiT5EQ;{A98#I-1^#QEsz6W8I{6CvkbEMX0> z=|seZ*@|Goy-uDWh3pvy`Bj7hlofpn;i_lP2l4K4^fUA z`x~(uy)fb&EMg%p!1H%S-~AkM0x^ zclIyh0=u=t>cNRG66M{AkS7x%XKROYt4Hm{NtF;-J>*AGJ&-?!XG=6Nra;_=mYm?v z34B?g)pOpC1d-zcK4LRe)`^?!))6nLb+P501;zlqyrbT9cmm&LAs8!gwm`Oi zi@-g^^=SVQ=c6JdBFov1qJM52%PcnqhDAbNh7T?gIXjjczcR&aSXo(10p8Ddg@+%B zkh5V$c`lFvi;2rIP(?(96~sNF>%IaxMvibhh_f&}NPHG!3qU3anPI(#5t327QGG#q zH_EmS>`cSw!$|s_>e0EiYl2abs(6%b{fvdbQ+w+!e8D1(sM)&5I&HOja63F&q|Ofa zRig|N`CX&n7p;f!Eu58`VyqQ4`oVrkqNOh1i7T4&QS>8_g1hW)+}>Vj)*CNwQhNt9 zLC;peYC>M#plrAC;>{sx)bVC7ZuMq0J*obt!IpxMme}9Ybn02WEIzvG`BqGUm2%Fj z-uTOAbzt^1sMvTUEx8JlMKQTy!=}~rUayx8Xp4%q!$)x22y!ftf$qM?=h))zs2V2#{vhi}Q z)1AY)1pB~djyTy6#PN)+b;`l=u}01?E#Alu*E$1y25#y|(4l5g{*exA402AOm3w*rr+7JAB@GQZ(2Kyv5?y*dPDb5j#hZYYNQ_Bm?C9tnG&v(<-~y#T+F%RMmplRavpGoY<*T-~D%kX=UJ(`vb~?P)b3wxaq!7qIeijIEI+ zvJ|mmQvPXmMC|P9-B1mbeNE-EsgHRWI{JEv8yW_?jnrq<@{s?tu5X-rR-KI@y9nvc zR_NcShn$3g%3`mGv!@y3DJoh$?km@+s>lt}qvqQ76*6{nqPl{TmhGEt{@^JwsfO3p zm+??Jb^Lv`#Wf&L6dLB~5}%8d_MKltVdJ@;_?0!pM_0*rV5FHL)NQF9^%Jy0 z_gWf+4k^RTg3i=XXqW8X_~}M!mZ=%i$B&tx(k6Bt4eUhK#7T9zyId2DH3!t_DV_&3 zlg`mK-+L}y2q?EmR3PXd;vZ8yN~BHey$JWVq)2LZOUGTI$<0${W=|-bP@vSwo1-K- zd2%CLbiYeO{dsb6Zwk%=G ze7juAi6QwmD3pyHx-7R>4CBt zFBEiy%14FU4Gj`0wQt^M>)cXe4Kwn`3vzE6o5F`qi`%E{W$7X#>KXk9 z!})u4K+^5JkagI48X|ueb}Mq2XV?-%LmIV zf;i<3K|Bn6LlCEYQxKkU5FN)~(b_F*T0z4`!W1m}Y|BjD7web~2^fVw}xDW|?b zfHVA9)p#;rjk|^C98j|l`&#U|2RP;Ikq0>A3f6I<{Bfga0kl$hO4DlgA)*T6lSvbO;g_F*d;2 z#%c%B_h`ZYZA>`g=w;-0(ITU;Q?qmj+#7{#P}AyndwCn+%IB63jFP^;#_=Y;YxTm{ zli+~^{TJ!?;CJE|fgi7Utb_d14*Z)A{OYf{*IMmYiBgz`$QhygdWl2{g4@mDkKo7r zpnNROsp1pxPpzB7_ywAw^*H|mzv03^{idQ62jnk+2aZT)9JOpFz{3F9==VFldlcKS zfrAM!(PNRL?^=gk;@6L9;Gjp~pqH-Tu_*0mr`h)ao(EnlI2&hygZ`=C`84E@{Z$C(vvF@VQD<{8$^Bo;{RR_Mpcn~HKu(VtCG<^ZPav#2`ZZnKm z)ktIhYw9yi6GmhuUF=??$-W68?xzkWqEN7GtbGq&~o!zt>?k+sK`%bTf9%z#8P)hcVo4l{r4^6x<#s z<(a9}G#W)5gGqTHwq-S*dW~35|Qvm zBJP6U75cLVgW=B4gyO{szX$Z_Cc;A+kO~-<$`f*g-3-ci(0!^fPc;n@kxxfGN<{X2 zNW_hNDexO2ax52#kfXVrBtJzD<>>Jd@ysLe{t;co zDvXa4D=^$d9EGw##GTTHEs>u#K8iXbZ$zLq>I>d1{P7bxKs=`FT=tS`kfXnHvI6cG)Gu^ z6iR3(djwAFbzPBScqddT$Tx(QZm~z;hGUdqy|Ml6zz7^v9un19b#RWY@$hzDTi845 zdtu)0qxat0z2tE$c~12?lDmzOt$hu{-O1?tR*hskUEU{pm-{-yFYPBvnV~+nB=1Yg zraUHD-nVOt6SCxo&pzY;?y3IAg-!>v53ff(6*yRTu@&(Wem`OPv9#HW+xV?d?G!r0 z>_7e$tenm=?)IsZiV{8O>)n@W=8K;AU$D?1GFhaekL>XldhR>tIy_gnF_ zm}Rsr4vqFYbWF@XMwDNT5BcE2Rdm(cvi)j`9Qz)w{5^hgsMT`u8;Rdt_$@T<{!rZq zJ(eEF)q%3t7kaWd7OaTG5o$U zzWax|TE1i~YR6#UN#pr;^xo|yejEtuhu_uC;`e*}Uc!&crtjkSH~dcEcM3lP zKN=o<8bAAxW#nJmq*Lmv*lz1%^=G9m@}Fvq>WyK+vku$1Mph6ngu50Y#Apy;yiRfk zamr~=%|2}T$RJKR?WP6Gvw}F}3f`x6pQn2iHx2aZ=Dp96j;_zA)9 z2k(pgV_3?c2ERFoQ+0P-XEb)xgoiV5SOyO%iXGsRu_juJ_HIW6dxe)oy!QpjQ)V0E z91K1Qe5FX!c<}#&aHx>a1$Q8e+=AZ&-UmEG@GamIz+Hmx0iOq+A~=+Tlch)CaJz80 z2oGn#hYKExN;9@i|3b|QFj63rs8*vxXb&m%@q<4<+njB$`-?dWl$xcE@C%Ac9hX^NDNm z{u1vNvx11wGH193A1=CAi^;!A^y-Db{}REk2=2sFCbz5_BAz(GEvtsO(KK*nG9Fu& zb%Jqr3yqEcQIowB>3I$=PP`jmPa+~aNJQ#GPy)g>+OI4dG6~?kOE(dbrwANOgxu1- z1@hIUoD+uh{{}E@E7~=fXJfpUsw{J5107K4KNkWPP=5A16CbqSaYoPx&I@cHBH~Q~ zX_1hR&$2*>3%F7Kn9F?k8IFbp8SY-XKZ<4o5jWUMT#EJqC*0VU{2OsL8o?;Ae6E&C zE8Mq|BLFK4Uig5(gG5~TRU$5QNVp#n__n}zi72PP06A5fi1Ny*(!s=$NKq+InsJ9f zE33$H2drGkS&0xW%~d3%RPYKS5>(Z;`6mqi%L|Nxr$aoUDOq?5cy}WV`EA{;!4rn~ zF-Hjb&Yv+6a1bt!(r{y z?F0SRrfjM1bqt(F*5pc$VCm_G#l?$rrDKb^iC}oo$j;8%$cWLk@6|@a&RJvaHn_rV z3EY-MhBYoZRhuV0p66u^4pYDEj?iQ&q~CY z46QKWV5~88SKGe++RTtZNZJBxOBtj+eBC;{ZQmwmNcLb$v-DV2+b>1hGirV}F_7HD zr%L0oknXgj>ql~y(+4#QpOS@Pe=*b?Y8H7FtnN$3E{s;o#*|@(pyqI!d$hJvk=u=y zV(n3RcUw-0c3M$-T{b$8*ZL_vFSq?>yf#hu#^6EPhdqFl5X2iG2;N=~PXZgJ*uFV{ zM0rf;4Nkc$h*Lh2j@DtvKQ@Rrps_Bo{c0b!hsi-49)6{|$*>1H$YW4R*@qpTsuTg< zfD_h9_F>CeHwAcugraJ-g)JA`Lw+aQF7}zp+6OXB@jO38>*HlJ=p+34!6QFJkK$a# zOCKkAD|k=v1i?Q59|Hc6;GcsZ1+Ni21m_&;$rZd0c;G;NBV~hELN4O-O0Yd}{h){0 z;A`OFH#ld4*z*k>l+(V_pCIpzbIP9r{|tPv;D74ipKE;r2g7q%CU8Vbs3_P&?uo(? zh_Ihga6ygkd&7?;Er*vPc=;C`c};eX0|(=L(^!@x_wxSS!I?!c9mR_66$VQO4;&0O z9=sazK+-G0cZ1_oZ26zp!T-JB`ypQ_i(CJ-+$(+XYX@sAEck-q2pl+=fc_o$9UXXO z2fnrgrwQp;ycc$YjZc5CcO7#XZb{eOU=5Q(aqyZc;ORl~f)4T-;M9S28n2ay#P{WT zKKfw(HFfa%9C$&H{7vI5%&&XL1UY@tA;{0*6N2R3aUM9BI$rtCAbDvA`3CSZ{8HeT zN#Yu&b@=rb{F_j``GJEGcEzi`A0BoI51HWO@C!WiNjP7JU$&4_q2o9XOXZ1rA;p z^Pblaaw>WS4)WVN@R{I23opIa8mQm^>pKM44bGLB$?(J*f31W3Bk&I(FBWpP`2q(M zprCq;h1*!1GknbT>XI#ce46v%Pzeu#7BRa3JHh9R0JXmgKr3DA1|s9AAQp}vJ1LC! zhYsE%(R>RWOh=y%oEpzb2tygePXNye;&VIrUk_dYxhMc#r6=Jq=7xjx`?l1(v~tz> z=Q=g4>)h)qyR*tFDxl)Kq^-GBD-HKn;Bwrry@80*`#7-=TCc=3w8?-9^7=jU410cq z7Ebd~_mI~T`=X6Ug!>!Bei)A=q6l&xgeF)`AmceNkngEc<0;! zfM_Y=B48spBY0Kd2_j1O=Yn@fMH6;EdL+bksQ!uTkzisYT2sUak#OQeDAdGsEi$}^kaQ++s1@u*`uuO)b!-fy#bc_b9t@tW|AJ=bmU}={IPNN5{wkrye&s6 zC7o>(=u5L~6X^AwQT>G>c2sexq7&xAN5puuRukHq?0@x82Mrk5^rutlQ>XTTPf5~I zOW{aE7KTbSuzeUYHeGUC#>B%*6r9N!4*#}7#qTWfG<|N1v1;GyEkQpEN6jm5w|2?OK+IE% zdX&UlcD_9RQ&n9zNEu1KQ!649lf6DUBM#bIoqdtxN*=08sD`O58AgvYEftl3p%lq< z&6Cn>9W7OwS~#^p9<1YXim6_|BrnK=H`EC?6obna6-B_BQwt1>b@E%Cxx{cElqq0^ zull~MnyLg0C!boXMSAVz{`896bhNb-OqF%XEVe@Twn9spMLwy2fu$i9k~jhj4?}%N zH{?jw_eq{A>EPS~hoK-VVpBo$4R@=^&>9nq%-pMKYvt{3j4d+mfIgINhPV|k z?#eDXyt8<5R{+@fJlg8Octw}Y-?Yc{9#xby_L~L5*ux(S=y=&s72E zA7LZuQkCuHwC_??Km+ab3oLEANam%(OdOA&Ua1}>ZHlk!f+S98kAaFqby3#X^RC@U z+88AAR^K_CjcWf_RoWQw5Yq~T{+gcn8{evgSV{I~!%C_3oL9kSDT+6M zq$;nvIRWcx^FsVt-V)1hne~EYms3?!@&CHMDM88uL8T^I3Uv9aA5vdfg6bl#M%h0P zs)AE{T92*8EhUsmo*ZHROG`}lg{0_diM|9gUA%@z6V%gMV)xUuTJA`RGJ9o9hyV|P z5mZ04WG(EIri7SU3hch7Aft@02f+{x3`ZW6H^F@B76~>1_t4hUiY}Sb$)~LMYx4MI zv0vf+Qhah|g6~oDVpTbce==;PMGhK&{n5wywf!&?D$-iML4UsbKBZY|NtbNJ)HNpe z=&kehpGTF$g5m=44(skEUem51v_uDnu!a|F?xDhP;9T=nOXX2Yo9X+iYKYW4pZB3+ zOFC58#W_OT_jc1RR$AgXPSZ8Y%}3YAcqSG7*M-*uhN!x(IJ)*HkNN;>0vMdzE;Tcj zVGl*7(tKftG{FOdzNJ>h;E`Up46?$Go>fxa(hpS`Qhc?#y?jnUJ#nbySw;g~J&U^4 z{BeT>(`3r=VNg%hK1>o%K`|E9Y4Kirh7N_zI%@Err4P*}RE;cwnxya58_m`(u&{T| zM1|xx&GdB1_fIpX_ne}|V>ZUNt&samzJHh@8Iu25vs1g8QRCBKPdCS>WK8qDZ)zF! zJ{_`$&3DZIWpsngk&*AalF%RRzV{5;hgCXlJ0%*!QZU%R3{w#r_62qsx~jCA75OUpTM* z;$X_(uWDW^xhvqK6vLLhoQf*Wk@wH#KV0Bt?hx_354Tgxzqp|F9qW&)ii}XD==@u) zgoVaNro3CVW`0!Br{03iMQdjNpuAvN3gU#lXE8|N$e4eoqNDSBx3feUhG7a@DEDy(Gl{P6sS zq%m4}QPb=vtqN6fd$C0=K53k##p9M_^hmE=yLJ_S*M52>5nprX6J0V_v`hV#`_j{w z`}s{De%oc&<16H>8o!<~)fe5aWMun7@Vu-1r>o?B{qZdtWvY0>TE;B+pIS7+b-Ai# z{s{9*MyxNiJtU*h=g62Cka(-&t8-B-LVZ^=MhnMbE9HIRHL_=bDes%U^5+ZkzLu3) z=BXj*g-(7u!)rW}(XU=hEU|OJYN9bat{)RC%PQQnm(7_|S?gX}yKG@O zG^{G5CFRuxP_SLrP9}&aF#tDxDZ(JXNnnx@yas;ejyzs zQ~o2mz4l>WfE(fkIOXhx1~|jt7>tCrZ#^#wJy`uh&)6MWU5=d|1 z#@U@(bf=Ht^r~>mF&6(1O0SoS^~k6)xKn$yUC0(0-;Gmx8CO;*kzJmGtP&4#hb=Su zH)!2D>3B*X3(p@I-*rLGMSiA6dJ7QAS;(k!&g({l2M#8W!#RP2oNB9qgZ%amoGP#X z!xLvQW_*h~$k+Xv8{SAQD(UrKJ6hZL1YhKW5p|mq-E$pE4mZ_cybj#pY7~q}!DEfG zHJW?O+{%TOwRn?f)s`)+SakQSnnkrsrIZS3(rra0w@jWjX=2f=i3Q_F-ZpO5?YB*w z9MGr~s`P=OwOLE=u4$SzqNnlB8ZFL9KBUGN7uIOqy3AX+WNF#L^6Sc%BW_i@8N&{% z;YQAV+AZD6P<_}Mns&7^3tF2MhHtv+GU{JbJB2K%Tv)Mm(WBFq1mo}bX= z9!9o^@Xxx8a%;62x_aJ76a)&W%|xXBCviS;5Z+HBMkQFuG2mLF8y6C2ttx{*E)U?K z;wMCeABx0t`=vtSFuM|DxEbKYQet0>rtHEA@7NktyxGQ9r@UDdw;ey1GP=O-i!cP)!!6ZNNH@Feu&f1yrULuY{&V)dYgclRN2snc$ zc;HKkNEs)qINZ5W@NL8~VwAENgMq^R4I=KG>YU7K2`?)X5=kth7R zBC8nV%jIPK2z?nl(=a_B(c*~I-vY-M;S)XHxc#c)RNe|RURaN<_dbOClbrg0tU`{& zCTiGKy@zq+suHRE)81NLztmlVIytx33XQ}d8K)n^jh!oxdJMwN`6je*gpJbRw~ zvqtSPhds|ez`(YAJ=(Ty(k_PwX5L@?S$4Hyq2V{zO*+~8vghR7lxwW{OGuiWZhZNS zmh8A6tC}?bQ6u_UZC{wSS#3I9kHV1I_UC7{`xKXw93ttGx_arLrXqFO@363bi%Uw% zmfB`Mr|so*vEzXD?-V7;Q-}4zA*Z`clQLIhUxlK~W$c}ZUc0*swEWrai`wLoz9QJnodaP6FgeTAzaS&7Z*q)m~b!nyYh_Y4Ltjw&!G_?PrPxGp{ z#fk1eR(wo!nPz_~x#boZ`L-4W%CK;L=cjg$N3r(%p7^QU@@`&SRo*HoL-9>>NWL+j zPIpZ2BBPVC6I~V6M?=#C&i>}p*NWRjoY_XsOIlB_+7y$2TJjXB1J}1k7k2U~?)}C4 ztp1$pnNhT(bv+C%_xN-~+@D(e#yXPcjmoU+zBf8Qy!P=?YF+5crlRm7wWc~jY09h{ zoT}7K51HQOW9hk~a;WwE7h7?4a9o!?4RP4 z(&j(49(USWG{Vw5Rg>hF@B<^zBpoPumM&QpG4QlAJU>qItVrXQE=8Wj zc~XzOPS3?knr-%cyZs2{WV0b}W%R!CWuDd95+0=y|FRYvD{niu^rcnLKH#a*TRi1T z%Wi7}pj~HWqvU0+=q7s)gk;HF6PcSPsg}9)C9Bl!m-C15nt0@YSpo|Umc~%X}S29DfW6*C(nhSOR&Ba4Rre~RR@gVKT z=-J2}9i$}tL2Bk#;w;Wgu1o5<#j&M}Ey-I|QyPzjujv>yzV_45pSgvR(#&C(|6bBe zrE5!)G<}|eb+EQxY#458)hk-8_qJbR&kmGsk|GB7xGD6xA!5L(c2(%U4?}((cju47 z_t|4YHeS1Q;~Iaw)Na}`Ev<{sfui@O`GMI3U!b0-tg?VN<40ZAJAm?b;Wtro`3{*2 zix-L;x6?+0^e-Cy|DYwwvyBOV(0&WMP5b_!_3t9L^ttDG43xpRG*%(X#)UsBTlT2(z zu+xjPLVoWA4#KZ~_ zErT7xUsrzb(4??t?eKkUBuDri0zVh{4RN^rJ%l_=isbieB*skIo;arcUiMluF^K35 z&bZu#_Bt_5Ot`>3j1wgI-gPCSX)&A#cUm&xjaWL1Sr~UA?~flUPR;;P&4-h4)C}fl zY%&r4>xmg?YY{WqB;g4HV$9Imi1=M%Uo1T#;=)&nObDJmKde+O=4yasfw@HFP$>~j zky>IYnjAzVY=@8^BqH8pLe8?Kc+ey^XO^Ngp`|h{_Mdw z{RzL;M^A@Ci?!3Q{5EZq^ilF`vn0yabZeF?gu0GLLX0O@I+NuToy83%a7SP z*njTq+iIF2AJ=v#y}A15+_3z&mbs)(=3A>J_lJ&9bS35NZMRrj`wP4IB8)Ysv~JGNmPQwCaWxegkDt;;yUwkSE;_d? z#{6{khmNQdy`|apBL+zsPM>k*lr{jBT+V52u6)keep>4jes1+#w;lFe+xw@rak4zj zh&`j-ft3V{&S;hLQRAaC+MV9NnyAhFe>PR=)jU@f&ySczFrgs%51A2lVJnwpg<){< zmaN{s#aW$wgUpp#F~0h&uD%>I27AstXO6DRkj7Y(3m=B;a@=&nWt+JeQxWx9 zvVTvuWWJEimdZP3mNa&Nr?JV2uXm$4rYg<&(uS14E8Us3a^`xmF*HpgX6@$X-{-JFrdkxspRVpf!I3eGo~#pYemfV`G9 z%C8{AG-*G#tt#4IbHDl3(lusuek|f(b3-<(m##1~mo7Jzj6VJ)Rk7a2Nm-qIj`otQ zg}&Rf2Eu&iwV$s2TxH&oHODtStFOP@%p1F}VSk;Ryt7a~*;FK%jJBxC8Fp%(y5CiE zXN{CG!553h^QK$JVT?A$zdWleBHl4DzACeHq}jRdPQ;(yE@gG`jmpyfnbO$2_{PZt zUndV85DvW~MYEPi~5@d#NzZXLL5T?wt}a$zmIZaZ5dn98>EN zciittK7fVo-SeA@5{o{(uqx|E|MLU?c0qC*rKVOFzk3;)FL<=^c%G<#TdC){NGuvK*?WiM1HDm30bmC^1QUn*!!vW@-6r*B59?jLz;Zk z;5yBEep=#>SlNRe#_EQ$kz1oQrk6zLs}1|=is~M6$RD|q!%bK6U$N^$Q;~CMbWu^; zU(ab?&ASbsC;N~&Z7%Hy;{Cuirx4?tM0rFI-vHhTJR8Unz1_f@!F_^T;X^^JLxd0F zkb9*C=u`xIV3#GptqAaK32-X`L7Z|os`_9#=iURH^1YpJaE5<1i1(9F{aitnYaezB zV^9MII3qZ3l+ncHC(p~tZF|1Z>J)i{(eol&BRi2*3*dpD>zDC~#TLC-^xEw~+`wAl ze2LCTu*+C|QOk@{3^0H=Qs|}RVmLy$Hw%1@2=_OL2=^WlCFKMW z;Vuyo51+r1W%T<=i}N;E=g2;RR1l;e4OwX2l)xE4wmTLQ(OzgIq9ygDz!!+PhP75= zA_fTX;Cb`siMaV`cn-{z1w>?m)vhQ*Vf+If5a1B;Hk4!{zP4P)z=RAZB48mA{$>*q z0oOI~X73@wpVf{4S|-Cwp&?243cE1!Mh<`z*}fpsAexeecEyMEIM8liFrw~Vz;S28 ziF1(4#JRX*VilGt5YfVVk2nunM?~Bq3pFEV3z(=0Oan6hMk2z!K}7r~h;jW<@OXj< zJ_j=3MH_FZs3_k?+AAF2b;FmXqk?bmcR#~)*uk9`7O>9y=qdQzzhZs7m6KhKZ<=8R zWVGSGs`OC~rdl6wEG>8q-*h?4IQvWByA2c2aZXoT`ejXt2n+$d+3s+uH{}j)I&vxv z#%0b9aYh@B4t>;^D;@vZ3-f+f{~UdmOrwWWACX#K&%Gi=UmuY;&T3}Xs!~UO7d1^iW4m8&TjkWd z$(?Ha$*Vi9C|S|C;zP%LU&?Z+Q@^smLRS83venbu7A*H$eO0wN#>WS~F4t5kt zJi4r3&G`#jw|>#r9eAU>MeSDS==aMzj5VF~ z>ZJcD7+!=ctL7vbD?rs7QwBr9yR~)dtiL4B=Qb^2D5*~pp#f!$mEzTDB}d8sSja8I zsBq_kOS%^l!N&`34UHn6Z^#kPRUr>UD(OE#Gd6CQZ!)}FoCQsv_`0J*%l+&17}U0} z8sAmJrqg62X^`Fru(Jhk#bjeK*-^_HmwpW1##qB@%8#1yw!A(E9%Q{PN>*p%jcZExwuY{Hj5@iO6tO?P(Hf=Nf*)-wOQVRICLmSQY8 z7roL_+IeDkbUldCs2*`S1(k~phwntkrcHJzTg@jt-m8+JvL;zqNI$ga&>>CN=CXInL+mY8VBbM*Mm zk(S!bj@h0X1!GUfpgDR!J@S=nKRs(Ko}(v)?YUYy&#qt$_Y)4+FpBQK3VRpO4SM7% zMq^F3uOkmf!sytwpYDM~@r|sx;r`PrJtTQ^0%TQf;d7bfe;Pfj^zHH%qpeEsCEsWK zqe@?b?_J3}{qD%9|KXeD)3O=gwV%TN*Y@r_U6K3eVE8j0t^QE#+->i!7iv07;;V{E zrM`-69*rzVgU-s@miMJ1XJ1we@2e=0( zR2L6$G!La8gE-}U8|=dl-yXy%PeWl1mS+cX$i2Us_T~jx+5-U?K`BaifKy%(#3?@! z#3^qN;*>j4sO`f}U_=o2NabjR201W-!9ko6yc@(R_XTmvsWxsO_65u!PI-c{xw{(w zSRYL@HZ0WlU}0X)B7E#=3Uf5Xti1|Q4e@h>CWXbht8pjw24`)S3jVT?KL8#$SliJ8 zXW$^`qJzLe{v!BEgrACYUJunC+KJ+zhw~i*`~seX2QeNp25=#9G}b#s@FCzIfd{JB znczQw*9!SEaIRuoD)=Vwli;Y0toWW&Q1M-WLvP{mS9s`zjAL_?7yQ!L8Hv%&6eM~G zoC6udZ)M#2gfGycJ3xNpcHJAr7;4gHh5P_Eg~xd0NwsdY6+*c2Qz{or1k(o3WR#>9l0)|ywOlxwLoYI@epD3#JXsblnD_@hNPL|rH~v=SD7j@~U9+nR z)+FV;I}=0eb{1ap%O1&;+Wxsx|3s1N+TK{L50bIruU#@TfGAK>zTkzxMfeR8{7&H0 z_@xM51Nb!Rfd3shPsfXX50LU#fz)vcT<;_}YKqQMsqpY6u&=SktM~F2 zp|p1u&Z!7ZC(_QfUz;_49p8=VS0I7ZexPOHKy{l5Ufx#Lpf@RVS0d6d3?sA({JTKphvhz4 zV7ovCVcBXQO2h@41%5BkYR$uaDPM2IYgGeoF?(+AkQXQ$RAb?Lda};Zk}A91e#Ew? zYe5fVQ!>`XA2HUf#jDZZHl=&J;Rg#T#j72u7>OQiU0-7)tqZim1{f38=`MA^kX$y3 zlmlIi$JXfwy+y@EqFHb+MuKb6SkN*%qd&F;XVXIxu&jA$-psmQbqe?(<;mDTw5r&@ z7yGpKzR8+Oq#|@T-~Dw@6^6AxRTy#nDNLq8Nj&e|V!K~D$^0eGn=$&#w--*uH)M?b z_?ruC5ow9H`Z71h>*>Zj59md5j1jtC9~k8@cVHa)5L!o28T9NfZ8N5?*Pnn*)-Js( zN~BFRD}<>(sElJ-LDTL=%-fxmnp@)VHh6Y7JllwZ?`yE4Nc2q|w|m8xbxnmmk4qUn z{JTokjd6PCkMinD@{4?bnDro z6}uN-SUfG;QMX~#zB;M@D&K}%{#4*CY%c8L-`^nWIm|(2~Q~5wc>PLbD{hAYsPdq6f$+TZaG!C z8HJpD4u(t5)yR(*UvQSRSR=W)$&N9q)eP0m=EBEB64qmb`Xi%^mmkz;%KeP!hxA9< zc0Q!5vT<#RTwuKVrx2HMqZgf5NaP3;R86g58GVit3jOdAA>k*P0Jp2z(3_5 zqxc3ms2^{82Byt?Z8ENfzLb0uYrGtJ7!0e^3FK_8NWcYWH8QYIB~C#-)amjcl2+2`*-?d zvT0+c{TdH6!W{; zbU^EZ?SD2~XxWb+cQ$J{$oF3&F4!G`nE_DMJX0yF<5klKei88v2Z944=oaF0U(CMU;>^8@3(1Dfv$Zr^H+Lbm00*ghrMxs;%s|sDI9Yn+6QZ9g;ne`bRD;XW(GVsK?|A zBpk=DR>XPH9;ir;93xvVdYAEeb<64!V$Zh@sFC_cqXEE$JXNEX)UcA6KgwBB1xsb> z*613Cr>RCC7F}z^Y}1=N|8!WQNpiPb;+j%(Yg^iO{XJEd+J1OkFHz*@+D1I3_f?dp z%SQfFutf5}PJN4RtgUrM-Zj}u5dX8gE-}r(ZsP2TfR1kQ%+?xEtV< z9|_{T0C&={4?DAGMBL!?UvZtM*&g1#?qH{w3v}(nmSYMorxrbkC!W)*yM7lGJ7fDE zD#;Y~-H#!f$;P<-`t-Zbz?~0-ABLMz6wl(Eagwtm|8)?r0{yUt>I*jv9a~xSA^eO9 z;?zK{1P^qpIGnNyJW(=U_`TA-|0wWK_z8rs15X7HJd?fPB)HDBXGNcm(Ltrx zgd!&rBM#=j-d^pZ? zP)X$rzO;jX+EiE!d6tmx1AhYi`kT|y0?yyy;Xm+jOa%D6Lxi0m3mnV?PX|7>1HTLW zO}xs1vc$v$4u;=A)3t$v4!b&dc(VgP-huxcoQ7a(5SBScYdV30@eS|5M}gD&Og3cn zUlrNG!vk&ITJ>RaTiHu`H4?|maX>1KSYqci74SxbD`QYc5K*viC*q~4qQ7y_A|sAR z`%G}FD-ZY2g})z(2&bX^64@>x_6BkSelT$=GKUQk3OK361aR_*31CBn7u-lbT{OZ` zE_RXMWjDfU?D}1D+yEOU%1jLX5fQGPh>^LE1)2iS6K5fzL@(};t#u}#Gv1c4GQ85n z*?5(Sg?G4gwm0OE4AwupE> z2Z$@gpy)~@h(mqj6wVzZh(lg@jVeGl!K*2n$=^x1BfUagT3N}H7YHc za2a1%6G}A^7v3xIbs`dw=mc)XvnS3)0*FiikqICo0bdf4fNzPo@GrzianVrVW2ozh zaQD*Wmz6?+Y~nG6Gl&M7tHf<+SrND6^&>V*lC^%M1=Rxi<0yng+);zT9Y7j1`BGpE z-gC>q3DC*`^0nxaPUgu@ynez%EfLRdFA;ZqgosjpjJOA{7ZLBTNyHs~4rGKEiAaED zjT@L2ZikymdMUzv^c2j!+T9c1TPDueOB^A0^bI*@O((z zkHSklfW8qC3A##r9%Uy2_yS%x;&XW2h}9UNCE^B05-Wa>zAsO3XH$r{Gd5~@!BT+> z>HZ>gj)<-3BMaV2#4|iZ#D%%bBg6Rwena<{Q4Jb>kD{-vS%zXlcBCR^oqc8O$d&Xq z=6x|$e(zDWHx{)l2Gyxb{g&N74l&-Ohh?^@7};q=y#o)_k1I89eg_?7Ct3@JQTdL3 zeLuem2QkaL?;VU)2Bw4QVoZ3;nThF5`EiWxXCKr1c{f0XfPG$j6Rz7!q*tikDEYUW zy|AGEG1HR8#3%R8=$AWa=*WVS^4li;cKWQj)r*!aU**03fkz(NusN<#&W&qmFsD_? zxzkFg&70u5vuuUg4Axv42Nqja%hl1jr%D%^&GX<|Hs3r2_mgFFyk^{dc$hugoCdse z_Dr*RK0M5xW}X6`njNC!_QOeQW=Tc;@yY;}dMp(*<}poHXEr6U1#BuGsp|Y2546=ZB7lm|yPo#+qfA zs7dqdjZNQv=P-Ws>nTQ$5B0w!lKN&70H&4Z{6~+z54* zn@`+OSK*2;PVd|k7G3LUtQz%Ejr?fa#S{AbVRm^NXl*v9=M2mplx^&M#+lZJox*OC z<#=PrS$#}=v^5MPxsy$|wY4N}#ur(fBt=)n8Bd(mQ|0Kkqi6NidQ?4htx}S!N7W5z zacQyfb*aXL3wpXYA}?WR_w6ppULu69nLlAbuBmx4?+MGRzGqmSHt@8A)@Dvi`*|=;1=_{S{#f_bvQ>4N_gt>4zUOjdT-bB>e09&T2WR(;4f8MG)${oBRS$k@oqx65 zBZcODvV16p-A^q~mj3u)crN{@%~=DEFL(FWjh`>*7oZ1s_H+HNPBA^}u{x%#W+RL# zZ8b{1!0>y$@w+edd4Qk4(8mCZzSPrYhjI6p*zr8XT1ED^;=c*o9sYBx>Ksk0R$s$g z_m^|Sq#2kOz`C%Lht9dAH#T0`xF??PpeBvN`p=kXvpM1CDZAC(AuudP7GYq6o2MQB-_8X z`27pXQt0*&%g%_7Rd>aHiyLRZ(xdZM7UxJ#tE9!A3-%=Wqs|TXIGW=MvwU*Wm_j>v zNMfpQnUQ`Gr7y&|?V{ezt6R~2J^##wPDzWWoVd^_+1V1ly?Ki5KD8ta+k!L~O8zg- zqP#RaL^5EY+m|HSe)PmR|F30Xe)~2YEz+jZ#Uo(CiI4Z)vySE)VX$!EEGBz~LqH9b z*Uu(N^hAq4cHm)X5@w5_`_I0*@#l@5J)v=-t%F^zAzQOG%y@1vlD^ix$)$`3LFL3` ze|QVb(=+lCN z$scQ7Sh{gxqu`tCnMTbUsb4q0!wkEgEt2n&`Q!CW?A#KvO=9sw@>f z!YsowoyC$hDXph3+p=UQB}iKL?V+84AF5Q5DvBSi9kl^Bsg+t(K+W}E&0x}HU6&6HL( zOa8d5c!~G3fzlhX^@H;2>ISZk#f!Qk3zf%LD|+MYW}V@ZbSoF~F%$9I;z{Chgta8( zJAIcozK*>H<6EOMPn~fM9Dr-wcs0XOez5oYHFjUHg0rBTsmCdJHC$`FuN{{K=?GnJ^xxvW!4wYzw*?E8by)L(- zi8GingPAdU;xga-Q7K9HZ=C4rT9+t&<>JS~Bk?;>H|T-b)AEwV+4z(&>#}>kv=~;7 zyju1Ti=`~x=N@XmV%d@_J5#F9I}-Q#10rKvoTv-c3M)(xdGQr!Mf)6)v2 zuaBdOkDWghTR)(zPD=KsD<`8f|8pk!|NHt9@F+acl5+Gy&vnP`bkc0r)SQFGN zfG}YRipV0eB{)EkNdOHH9Rw9nh(Oc=f*1r9K@{RL2%_MwpWd4&D&le{z(p>g7r9>1 zU&Q~M?wVxa`Twt#ssvCVPFItD%yr&|J-UFwJJM)&E4E<8| z!ws^7IOPL__`~2EgE-}lL7ehn^%;~mUoCekF;OtpFCzkuAWjb+iwaVQvFdkgx=lUh z+xM6C8&w@7)~dE-b(`3u+R%E7?^N53DJgJ|&a&R?IfU+SZ*UBlbpADXKXJVYj;|>eW8^}_km`GB@4U44E3pD& zGWORo`b{UoT_JI>92a1zk3J5-Q0yU^Z&D^H8+bDdGZKb@@&XYNI6y=M-X~&^_!-e7 zPo>1z?Tobdi?sI;9+6uEHV`qU+a(5FXY+c;qn{u8l-%mrh_Na8HVpTPPh%WHL~u_N z5gf+_Jm&Ka;&u!oh>MV&k{>7Tz&AhSDW?-|Cq9GcB4UJAOPqn{BR+?rVI6NURNF|z z$n0q%Mp9oA5g^w|bDqLM+>NOnB8GUmMA#opg#BT}7ciAX+=GCLFJfkghzHn0gn#E zu@Y5OSAPbk7DG2ZZ^PSl)BgtgPin=A5`~H8aMO2PMHqC=n?_z|sK&~MCsH~6vgX`nj-ClPxrqId@>5uV0>RQeZ?wg%g&3gYt9@UFz+= zudlaF4uO7&emB`pn$@np*iu`x3Z664Hs6$Gt~b}=Y&yNQG_5n1vN-RW_7Dfx|MZ`n zgQFyx<8gc%RZS>gd@KGw+BUiC#L*N_7@e-4RhWnQr}3`a#EoNY6TK#V{fgDk_#SC8 zx`C#K-NozzMCfrhp)=E|IXT6&*^+0^9Xr0C3r7*AhAVWT^tQJ|`jy_{&6!HF!=7iH zbF`nb#p2W_`VF0UJ;AuVR#yfRyfs>b^E zjkUep!Mg*6*0_v~9#o(b;CTHg1G}_yyn>V=L7Z}T*Q@0VgE-~(=&R+uf;i++%EllA z2JiwlcJjO7r&+4z3%|p*(WZup=gVz3sWsx~a@&oMZ?uKy564^o5Mqi68@-*G4E_gr zpxs#nZbo@V<Y2=D%(@4 zZ@>auti}5ZUX!7(p@AV*VqTf}7`_S(p$w;0=L<7@}h?iC$B3^3ah-fEf z5z+2FK)e+VH_%jyhD@Tap$B}g!Nptm*lgYdm>niRh_BZ`zGZJfwxB^aUUplt_Ldy! z{sIy5CL$X6H;IVvaVh_Wco^{}9>I(uvV#p_7!fZ|7F@<>u*5>3mj=se;a$8%iQ923 z5%C_B0b&gjMDkxGk3lvu0@=j(Q3E7a0!?UMJVg3S^Y_ruN_>+De?K9@-!Hpj2|Ycy zEDgHgEgJeU+9@K;b0ywPgo8Vzyi%HPk$9Q-p;5IMfsWBe1j2O`Jr>(?ZyS#L(2r0( ziLlFB#z=0F*eG#_#GMk~1~Ss8hb zexfK9i*j;mZCl%R(O^n6*7wu1w)K|4F07&fu=C_@TW*MHK(4Rl7292MgH2zdi>4f~ znc8#-VaryG4;yUWmOE*Tbx6J`M{SG4FzNHv3G`KKeV0zyMmhtNVy)$Bv^8&FU+juJ zay(5P>|1NoBBEjIsYFdxIopL#jWzu$Vxv5vsp(1|u`fyMYVMewBtA;gUWcbElC`0L zkCL?_KnI7G0qEz@?tveB92%4ycJv)d(V$9ajacv0Dj>b&)Otf%RQGP$s}XC^-krXZ zhWC)_xN<4^_gZnTo0bV_ba(9~*!`fp_8eT!@1b=Cd$5Q0JXltmMtxGZrD=;{vn5Si z05&vTTLd_muDzty=6nm zD#rHI{zPoYWNMfXto5zzrL9y$YWpR-bCm*jt%&ZUJp+#q_0je~IyXzZRW;Y<)QWeq zwWXc!%{>`o!FZuIPxEKFYki|~v=&qHin_P!R_^^Q?wyzoO|^MScgu!2#r(LX;mP7T zpDE6KQP5Xg&^6IzZCE!=#o58hqaXhG;rF4jpe0ef(-*PmB>w2D#fOKwY_c1G4@Dep zrT5c@Au99xX;TrEzxUISN66Ry+8;=V&j)Bv#nuk6WIOZ;^wv6KnC7puq&Q+K#Ulf? zDmeOcp!SuD!EU=XV^}Gz`F_mTZlR||gS9&W&kxq_g{!pdwHwv0YjU!c%a^8LtzMQA zUXZ%VQlD2^>sxw*_Lu5ieWFl5VdATkbBBF0I)3TP`pPxS6Fkf3)01l2hok>}+X8(i z|BKf5NA0e$;-po*BY-jViW75&SsEgjZZ_P&#gY@M(~S8zOQzD?;NPjQyXBlr*@-|0 zKxr9uLP_0?(_DLgljr`I_`Ohzx-tKR>VLuYYwHW6_h6>Y*bB9LRHl2<5-dJ!&OD*! zPpVc@bCgNb!yV7+Q+TG7blr1CC0>*kX*Xd;xV}j1on|?ajf0N|DG4Z{SN>Y=;>6eE zt-0=hxuYu8yhn;dTcXOBl-?_TDAKxnzi(9$(?fnU&w_5AmM};$`5idV!8l#mikNS0 zHS16ROlzDn2lEM^X`PSW>6#{2W-oA$z;0fpCnmY_<2*)=JlNV$Gu6deSQqvgk3cE5 zWLm$rI3{D7gHc-6I>}XLxEG6xQE4i~wqjJ1Ny1mG-PozemAujcuK1d8$GPfEVJ^|C z`uyRKb?x`hy!Q%E`a(>VmWwiNHN^0|-|T+gy?O4##ZF9p@9>KqC0gH{@fx;K;&(58 z&*9f|RYa4L;r!<7xo6z>7bmu;IbYALw=Di*>5}f5cQ=P*E)>=wT1G~r|A=dn|6lId z@=1Q995RRvew%)H+4rpn^&$}2azIQSqD4n7Lu&DvEJ;h7@9`roTULlihG_BQ7PUU_ z+94CEz`e`8dFEMnTzOCb%X4?R>x&~Wm)SKh0ViR{%AT!~?r3JdSvOVc`G$?c&3s@K zomS!60H0nzEq)rJ#e{TjHG<3%orh}Clha$34e_BXT^;>-m1o@(6V_w$Jf}RdwI0){ zagg2biVs~ZBNFOw%a3Em!y$*8x5{VWbBt|WrWY&D5S5C54Ar`u=eTAFZJ3rkV5V#0 zh|YTCOx-8>P3a%BDBZW$Whv`UvpmE$izkL^xh0uDm{K#{P#A#es<2!>&&f5J z%N;+|TkiTI-G2n700V6$c(G2X9c@3%c{apE{Pu~7H)-*M`Stlx81phWG+2gwVWjzg zPNylo1{BmVqtBk6gV{ZdIgbAGbbICg$7!+SCM{L#GQyG++l(&rOTipANvT2k&jc-&KpPeLrfIsBpZi{Q_IqnEC84MU2EAtJw0OGuLl3Xx42R}sG9o^7$64Rr8!Lf`}ro`rDdk1{Ms8`xi8TT>;wD?p-Y@5@jl-( zk7{??yx-zEDL*6eSK#F?s6Ml4sAa$*aXc@W{x7UCCJ z5+Lz?iN_==C?lbFz+a##M)fKQys;>XgZLRnAVf@$q)Y52F`M`~=5r(;C~+{+jMSHW zh{WL%M@lS{I8NdO9WisY0XK~KMxv%FTZ!kEL}L zO8rsd@5Y;ma=)~9p60Vv<^K@5ZLb)3C*E>EMlhQkDLR-~iEVjAx2m{^i8z&k_@km! zdwKJ3Ob`>{V28veiF|`Gh1^7VyadRIEhD0uHqtysg?b>v{Y8n&5O7pWzQO4JI`R;d zC1Mp)g4m2!Yd>%PixmaLxoXgm?~@_=kk8r?gVScwvRQLlc~p5u`&qU)UM8_YOSATZ zaesa2XPtrD-!Mn0IZcyB>%%|ON284y#c%7|#($SZr!5$-d?Na7(d0qgE8XmE!yeMcaGT5WKqn{hl`cwBmN5Eds0h`SH9kfLo?1MI13t@&?EVFo8Q@& z`$Q(VCW>>gpuQwRwxYFnxrU40ThSqXscB}-vkBM)3e7!(M=6;jn$;}pu>x0y>=jqw zfS79ibN2ujy^Lt--zHO2d*k$g_@zFok7Lq^Bm;*4}z<-Ov#a>#5}+AeWR$(@~)-@Glsk?PTVY9|xE^E!Gvk1cgO`xfRU zdTQJ$XyVFai*%{8W_nGW>EW0t`1CL)BEub#uE-I8jYrocPf;B>e9zOx-`N!=BWse6 z(y{Hl28%P?5rV-UJ2Q&ox3)*wc^C(gAhNOeeTyHyT`2F1PK{com!A@8-JEi=&Y_%u zs^bXH<^(mbp^5#-6A#7eQYFRIv8>Apq{+y7N@u~F-Zabn^&tp)J!ZTdLf`n2X$!$ro^T5_k_?8dxU zy)*1oYK4?6ep)-3#vQ|WpDD%oAv>HX^&U0PTvbxl2@7#NIks#@BUP;2t~m=2r!H`3 z)D)uE`bP}Zy<|kR*c`Upm?~@bB+tewB{fEgtyTwZ_8j+2sybdZvARR{=4y+7XX+%6 zl6ov*vqyZtT}#EGCF%~w&=3(*Ia#%R zGef&qo%9$AlzzjGP@eYAU<22sSF^`hF>#UQn(WRJd!Ex`y%{OH>N0RlchNG{q4d}l zQ`5IsEW>stwpKYu#3jzEdbY};xTax0@ut-38P#PuiMgSA;yV>nY6mPlQt@-3#J!n2 z$x|L5lfT(hI{3N#q^jc>tDe`l)t;-{Rc9&aJfb0P4_46B_A6Z$7kbX4Hth23?Ut9c zOx+YRoJnL)$#+{EpRevv^7;MdK{UY@He4-Y-cGI5dKwQiMI73xt%$u4^jv@9KFowU zXZ)OE;`7=qx7Fsp85>#i;;5X&o*q}tD%9lVF}sIvXj)zz-nL@vN+OobBwiMLsLW3oMj>X@mBrpht{pax(j2qrsl^*?_F9vJ_nE3rH$2= z{BWqxPfYMnX?sykXdR@Rj`o+1o+z&0tz940fJGM3 z&4ci&d~*8aB~du6ahO=UTZ_&sa%IbRLX`hTSML!W{5N3UB3-fjdyc%m?IBW>0$IQ^ z9G%2hyS2nlpPtTX6UPem1ug!jQ~ne^T)R`*99N=j*mv68&=r#sdrsqPl1z@fR+;(~ zL1UO(uaBWYiPAxLd%^j*Xx*ztjqQ(wX2mE3mf<%QKc43C2!7Au$0g+d!0#-6+;bm| zcW*EJ2H`gmzXkX`h~HNH__l2l@4cY?uD&eZ+M^Za9Dpe=hVU-#zrl}7yt(&j=S3}fcG!uAxQ3?fBQYs->`d!*%7K`g{zfr)>Z)R}MHYjGw&%9UVz4pj zi7n0#{y)XwfH?S~);;;<=7-umxEFahc}YrUO3U0;%U#KcfLHwWqLvZy=no|cYD<3h zdYS7uWpae@`?j~ySHbl9uK_ZuuTx~sqUsQk7fHK_eg&nBBc+|kd~O>ZtT9GAu9y;`F8htrvD(TyIJ z;mSl4HF=3q4Kfju17q!0IP3;ntarT}M=@Q+67unBN1IEQko^C(gfyYc+5X01qpKH| z!fQ&)ZOAv45H7jD7r)KSNBrKy?;rS`!7orcn8!_G&_3uLUO5We)R5T7?`z5myurdo~X zU@=R;J+JqDIWKEjYGRk1j`|DmnYzVpPJgE-+Eb_NS`#x%JBoW>(Y8ZFPRgs=+^mta z=T{&~eKmk7H;_iE`^*`t2=?W-qMBcXVGMo_bXq(y{E8 zQb&n(r%!8urr7=04nG;E+YWy#0YT8 zKe4rQM!+A$DR0+YWVl}?Cz3FZGh+BHXEF54u)sZB0ZtFNH6g$mKur**{8$jD{6Y|? ze0V7S>6hU@)!yn?I+BbQP6Z5P5(e*DrF_2_bdSs}OGm?LAho%s$G8ly)&+6Kg-dpV zK{xSUlXL9kuTfq;47m9g%aH1ckX)Wp>;-5#f zq#x z(fx=SBBF@qX|{zW=_%(Z;+P73EVGR!^TPutKMvvq zyo4opNt`9IM&bhodX;s!F-^pJCt?Xk0}{7LY?R0Y2q=F+;wuvOOMFA(VTs(+NBbX2 z{1wR4{ktIlh<%8+V&bP*zdQw4we?#37~u&aVnMw5D^gDF-Fi$g#Aj13n`zD zwFyM{|11&i*{;$4Kp<0K7|_cb7A6Yrpa2fs#2Hw`N1TcFMw&lNgh!7N5dpSybk|5k z1a?T&bw9zM_h}FAj}pO;6XE_85$@3rV&V@TTz~;R;1+FS7u0Sp!*mc4LH#H;V1M$P zQIn;)eiWMF^bD)RMP}^WYJ2BwA=`&aXV&ADT`agNRCwjR1f=g;1m|{c2FP8DdW5C>*Q9&>C~|oGzBK<#nzKv62!Bh2 zd%uBR<&-qwwr&c}OAN#7l#5cXBi5iS5ErAm67M$pAf}~gZo%pCB%0#^W)V@?HWOzf zMJ4}`2zTES?=`w8rV`}8z8#VQLqHGp?U3*=6z^|(cpVWQmJyM3OC)b3!owyaJk)nR z!kxbB5&j*9IUk6Nnd$Fw+Jk@k?#E>am)v_l0^|*{;Ig#99uXbdC3cjU4y3&aL}ryl zk3@ZyGtAjzqWi}rZX_ZCTO@CkxC7{=#hudNT_P+dbut3zK}3MLl24GhOrowC1_ACT zM`?ebSc*bQL`r=x?VTb%h{8x*juZ_8uE2{Z4E3LySX?xKM-zxh(n{h(NNQ=mT=I32 z`z4+s!v1fPcR^o|{v=6sNt`56UpKuH`$8q(*tr)R;0bp~gIz=f%uXW<)qWyU=ndj3 z5!s?`@ODJ!h-Tpusmp*|UsH|12ZHnEHJpf4xLM*PB3@qQl0QInBfE%*gTAI3?)Q=d z^|jT&cgYc_X2X1p;+GcAOT0*&kG4O;aM)AgV2Q;2XNRxA0JKt|?!A|iQK^6*H*yuZXU;wj}Ktd89MkOFlLfI$Y zieeBMg&SmzgNQ60Ohmx9ORSXUHIhFhah=2`hzR&;$^Rztdx;k%+RlWfDIj-i%d%lK)CX zmYcc)5qKC8?o%b|s|~^XlOrz0()?xvy~-WZpqz-TTq5}@iCZP^Ai{%PMA&O0B6UBL zh`m>OD)%9xW)>1}#mf}Phb|)`5ynYAK}S*ig_h-oc%d||A>xHmD>=tJ6I(_NFvgUVtfK&3oUKH>oA(mok-m}< z=qE=27bS8{F6A91az8Eua!8&|tV4nm5#Y^4_*)5NdUzx*#6DKmnbF-$Pn&9D#C^X* zsZwu**HPad{(>0$m4@x%`NsC}SHw0@+beK9&|3c{_K%+zRh3ZBFgeNi7G}>!0XNn{ zt`W13VJ-|y0in}eu5rXN_GsU+W7<<~ni=n32kniIozSx6GRVN*-Q0nF`--Zg)^s)7 z7xsf@=Q_3MGg@Ycq{NeTF)7yild-j8)ER9M7W%C`gU@D>Id;D#HDo8}yUd#wED6g| z{E9PkA-+WT-a4brrw3VQF}SG}W6o+*qPSEr4?DD4>pXcOagLbPO|{~!vzq8|Yr;A2 z+P#)_ot5jv^mAJDt(I&PX3i|xDcS#7eK>~S2e^1iX?dmfoOiO8-~6&$O;Pg(DyI7X zuBOa0!&oSU??KmR=j~~V@mNzscW2-T1>I$OI6fL##HZ&pr?=hE-cmiMLqkMZtS6%5 zL{CKMCVbtncX!~+)4>tO$})#yY3Qj;j*V3kvu(!G{?wV?X$iL!hULz@XI~6GpIP%4 z6k4V#cS!B_7H4Cf)8kyUyVMagbNR^!F0QW4-ltCp|7Z201hcn(d!2dn=P@TA;*%&X z@A<=1vk}Z7W%GE4J}0K)Igk3!c$L%=Z9-?0lYww`*T;Tq>N&4z15f@BX;yPh8&vEm zumDZi)EMS8)nkX->P2&`^$QZd@!B>~^`t#@pknM}%nU22&g{6f+M5}AuzK#W*S+!H zKdTECC>e8`tql%kVvIwdezPP^Z+;LF9EvrJw#WA)wbJ7lfdk%?*z6aRdh($|UQ@%5 zF}8*&@eIbD7+1)Epn}u0U`|}_<1RdVdIF&-(FQ?fP>hJFwAXkr0@f%SB14ZX;bL+apCUmC$TT2^cS#RBt zklE{)1&h)$ko`(#kLFP$XS%zitSFhzmRx-rTuYiZt!wjNPBq2s8K!?-su2hOttFS< zfR%B^2Qsx=d2yxR_zrDJy3}IaDe04;IL@AGo`wQ>pFO*z+N$gF>@#MmJFdptGxlrM zk>xV2Q#bSx-7jd#-ZV_M8y@ER@irYF*~7B?*O|RZ`%Y`)CLh3n<gG}_sp+a2UR`n+jmKeHu=u~u5D4hADYpKDXM~YUOA;1wmHk#8Mj=TXk3Oo+uqLK z#_gRL5@79-?w$hk~aA1OB^%|>_6Tsw(=ikXaJtV93xqFIU?ffT%kbd#AWje1JvS~xUKzwGXSY3A zPAyLXPWg@?POo^> zT;QTSL$rijqI%Cm8hel@v@+`&EB9Q(A2SXTJoBnK+{+Vs0~fvf&ow+8^F)D*a!&q! zhwNdBGOQWk=fKgO(fK-XGqNYZ`2i~)e6*CG1`k~D&jjs#t=YEZoSUpzI1PI&D)hG! zoQJUWket&>0{j!nUlkQEnUdA-g*w(0)t23i;dSE359TQEObna@o{hG_Twb(N4L%og z-ZQW#z?XufC#v&T!Pf`5|NAxWFMw|fl1H>v7{kv&8up8AgM~@b!)dVaN05VM*Eo0@ zoIA||5q|d?IcsQ#AUTwT-)xHVM!~3?3}OM?4hZ6F!6$>`Pk*MT>9@T2+y}1VoHPnt zlwSgW9SMukiS9nFtxg)xIFd*5eHvupPFQFKr$0>82d;6@2>vg~hfDbf;5jHpNs|8z zJ_Z~s*mU=y$nC(z2=xG;g38ku_w>K;+9UZYU|~HhL`n;5z_)`3it5YY`@jRaehfTt z(dX8UQAY2kb^Jr0|tF52uHOyc_@HLm_jT{mCnQ2Q)P{lfKqL`Z*oci*uv z`>!TnbA-K7^=?27(U07g_%~ud%x@9#afmgDoAR$nuFt9V#-JAkohN8h>mm=f{!rpk zVxiGgnTjwk2X0D(KN5eD_#4rJk{O0)=26?%5lfIH#36X~17ShwON0jlB@QMcGKEBB zm_8|sgl5}C`x}9w!!U{^-h@dY;&3_lig5hoBQTmJy3oAnN5o|#U=(Z4f89WYMb4q} z$(Bf5BXNhs7lAl{-VLx_mrXyQ1d(PhBXz!_k<#5t71T@4Zb@+3^+USbxeq<~&d zWUzkme8aOuya}%mCnJv$TaKg4iFcqoK!m(jqJ99x3{2LNm!q+i=K56Vo%r;QQp`zQ zPJ!|yIBv-$b|WIi^E)E{=^;;mBTggE$BY9JG4&G>Q%fhH2Pr|k3uS_c6ws$M!S5!o z!X%tTb~Bg~FG$ptRW86cSIQC23F6%-oSl&WG|=ZZ;X!Vg!OJAxPV9qeX(A$`Yp+BE zuhN3u8#9iSFF}$L5z&i8`1>mn_Ssuwg!73ozkvwzkzU*|@5+dX@i>VSB$fjiu!mTS zSz*cbDNmR;Nq&I13{xnQe@q;NDI>{`6IbBLB|l3U%7~9;bR^N7@vpyR(v*)U#RXKFwV=kmm_0PPN|Y-dGInWAn-i)cO+i>#Z%FU7h8y zAkuGAhULCoY&!-e&NXUxsBre|ze)2q#Fwm$sxhUi-J`JjdH+r7#;LStlhT0@NYoW>Pmn8eRB7S)_E>-XS1fKvO3&GxNNTuNw)V9KkdPJ51uJji*KOA-c5Bs2Fq--=C*lYw1d^)_u_}PK$ky^ z``7X7CON<3e;360-Cji>b)l611s=GNn@at@`Y7L5DfV$DF|M0^qqqG#_bj7fWobbJ zq@T7|1|%O(j#hV$#B~z)OZ=9YY%Dqmb)eNDPeFvyRiV3{5{FBiA+ZK~Sab^yO9QTI zr3bqtZF*$!T4PLK805cQ8BEow|Y@>rPk=t|a80Me9U+H)`8~s;PIO ze71+7a_0e2bX-mAL~V`Xu*L!yW2l*OYv{p>ZL2I@#7AlNfZ9x+$>IAw&Hk`F=2EXi z(Z0q$_Dk~Ej=o~w?`n*BU~XUG`4kH3p@#OGtTD}|oH%`1o+W8SvsKB4+VA7G&%(?b zl&pf5^|8qr1HVm9jesKX4w%PE66f;mvF6O?XrUF@lLv%jS-$$U>YQAB@_|BU&zclv za|zU|di-n3*L-G+%=;`XT|dp~=D)1|HLV`L;8>Fa`&2dF_g#T~tg3DmS=ZaA zsPlbmueaB$UJkvC%g|@Xl@bAt?#xx{7LXG9sm8%_W_W;89uvgren=3fe0UIt99mw3 z3}~S;h|_~LVqT#+z8`N72Z?Bviy@3lRVZiS32@345m9KL8S)11Sc4xC({Hdw^yN5YMI&I;O&Z0(`n({1J@|U?fl`h=O3Ft;oK;E{ zDMj{I>aT1ZBC?9@t5LVgVB3U(<^i%^{f(Fk4%;+m{UUOqG|ltjV`vXl2O!PYNMw?b z>-7eRg|E83a$-+Kxli&s$(23}7S9v6ZLnkIP@`I@ZWK8KaUdtoC80*yPei97_B0Xx zq}d|QZ!vcvP~(LG5qR_%8xjawY6 zg!iUSt1`t)|HQkd(knOo@esC^$R{=LPc&nkt#x^8d( z6!);dE`2HHPPSL6Px`)_Z2v*+Hyj~y!Y36tgu&|<^b`RpGcHx>j++tqv22(`>>c)- z)GgxBjpq2FblDLZWn6~K@E}e(j~@?~vls<9<&9$79rl+}&|_#DxbDXN+8}-e_uE9( zRC`uL1YFxeS*)XQkE3v=+Q%5m<3i(&=ipltT`OJt>+X6=GvW}G`4!uH97Ux;W)G$*TP#G#q?t3Fs+%I(SK_Agj5zM?zrzqXyt z!H$#f)_L|P+R8Iu`l9GPHB)q}z%=)Vb@slZW~tpJmTk1}6-kfVi+%fR?cr(#mza%3 z92rk$V?S{8C)+qrd7l!*9|WHn#CL*YEYW8Ff57Jl@k`)~#I}d+QNFVK?0>4h`OEB& zsG_;T-bG!)?QTv?;N`r8$`6>O!~JB5BIkc_$a4weHB|qYXDve-Hw$$Ix{eOKMw~`t zc>RjD#!%cZtg*hkR@h%}JJ00EajfFp`JT0x&$G(@S6h0~*te$6zOv1P2b1`+AF~e# zB(mOYn)>OTQMBayg#9Bu?RhFzzY&?CL64b$$1DxvH-HBxD?1{=$$B4naI!uR z9-OT2g9j(;N${X#O;t1`!J?o5si_qoiQDp_L_ptla>a5Ov+@SAcN=(p5I+RIDTp5f ze=3My0)HlmbMZP~2m$}NoNk|yy*nH1@2d58JgdDN{#?CD^k}p%S6?%7_^gq`0Os&n zq37^KBZp_;1!ClI$QmRnYk^&)IL*mcD(RXfj%;gtkqbTFEKl2)24^r1ta;WR*OqTa zPQGfNp!$04wtuAtj5P;bA*_7bsP*I)*KD;0a~naKF^o-yW4E)dac8c2c>~-lC7uK z-tU7_OE=%)Z-40sXvvQDAwKQl>L#AE_L*w^`~#Y=?o3ch1!P%mVgLLl+T24w;xkwv zM|3-vFW8+|o8U>ts=l@VwI7$y+)q$ByzhZa_Oi}7T~R(pSlh=tdEgI%V-%skze>TM z1aFqSLbNQiB&(Z56;%5cy$k6)lwCGJeA|5k{xvuUD&+iF5V*o|^Beejyry^Hp7L&sa}GB8|J`o)SHIuyynJ|{@3Zgw z8Nc?lU-(%2ngn;BUcLMDayo4`{KFIc*JkU{D?7W7s$XDX%($Piee7SWw_7n5td9T4 z*uPWme`n#>%mcNI{Z8fny&jNzJ}FjH#X}jtQr-I_)qTDSn|Arzmk^Pq{wVa9Hq1?a6 z@o#cF`AsJNwQ~Reh6{!=@jt1&HB7Xq18yr52Yy8z>Bq!>SADyciC<9)OJs_h{_1Q_|KI4q&?bjnQn81bAy_4MVTNGUel;`vCgq03?uq|*%Kg6?ctH^} zT%p`oYWyboo_@^mYpMdd`rDNI*DWr2lo?voDg^r9QTul=!@pGSUo-rTW+(4whJUBN ziDrgib>S&yAmwg(`4t*N^VlU7@f0)uno2szjHEJhn6XzSGhWk*8HWx1m&*NXhX2xR zVj?sCG0Oe_do=AZGyW&){&$)2zpdQA$MJ7)`=<|>u|?I!GUJuX9jvhj<@Q_ED@&O1 z4^Zwu!jnsW{JfkQ{{v;RwRbc8`9D2pzb^tP|No{3A#*-p zzhAlk2v2^+kKOB72&smVntBEA!O9&h{2#o#FN@886@hc@S;!x#%*s|4q}-Zd$z$gK zj%pjt%>Pc=%*^~Rl^cegihf=79LvmCs)3cve5D#v!_5Dwa^GlW=Kl$GYdJIjD>Zo} zGwaIT^75-JTF1=4Mcoa1|CvJh|7Q+<-TwWF%=}-er6`*JN^Np4VdhPLkg7e*%uQ$i zGv)qQ4!%S)`Cm}O|IJk60R{{>7Y~ zR;6(I3|U)Zh;28iuyAT=8Jjhuumm2?Dw&y<$;SyS(t z0wYiDsJkMrA3brRXxdRN)ZITH(K%)YCP;wr;p zMauSfZ#72WIeU6pap9y{i2jV3_fDEQrTDHp>ff1stud3rn0V);!ilrWCY8-%r88%g z%_y8PT@xqXJF~cK>MzFit&28xko`UiF)Oo*?~{=qhQ!K(k3t5>gpWg#74sQ zY{a?cpEyJlPYtyxzAqdK-b|hmFHPc#r|zXSN*i00XV}XFcw+s7FZ;t=qElbl_(e#I zAWOHH<7Br3yfZ&oUw`aRJlw2Q2D&+!&ET7I=9T*5_v#dPpWWdu3T;Q7p=eXxY8bcO zJN3*fN~rJs5alRK?X1Ry^k}9q-2Q04jiR6dD#nR6; z*1(S9H!F(&B5$)dUG<&Zf3kcKbjgR%&~(*TZtFAn-*|*byvtKB_k`=7Xi`E^&A7eRgqilRxuF1g&?%{D+|J5(>-!b_K1V2zNEL*1mC z8!n|yi$F)nSy1D2^Fq8o2<6n}4S3%RwL_O*!F$VNW%BHH5j9YlTXZx(+g%~|xI!Kc zc@h*(0o6p^;~DV98$7!{?8|iq&zY|?JEvP{r9d9c*cc)rHkLSqu?fVXj1_?tvFSQX ziNlZ+WImj+EyQaXdz5$`az@vGSC`u(Ofd@n5JiS(=$TILF^oM4(Q+eN6A|(WU1n$k zma#||5z(=M6nuM~V@ZDk(n-9Pu}wte2Q?+jc*fq;^{FY5{`b1R6}6h|cLm*KkVhKG zsL8}hj8Qj08Mv6_LZpv46&X#u0U1fWL+cJG!+j(dBLE`&>4BkF)~B4m*BE8qUAng^&}bW1w=!UJZVU-ITEFARD5Y&&NUNjP{K#QewNp3wsI!l+ z|LesY`QUYxH5bAejSWVO4a{Ft$vSp(4ZSv_h}kW5D|2~M!oF*KXX;i3x-qNY+}hCS z33T%%PmP0eEu5wdMkb_Pm!I%d1hEF5=8nJ&o|47;d~TtFYCg2 zhnVc2`qU}+nH~JNBR|AvwktEkd_SMxApaT82ev`doD1rW8`E7Wc9vd$2-aK z5xiKuZ<4P?@b3Iec_D&l^V?-+Yo3&9ZQZItr13Q76KO0}th_Q}|CA-Ixrg`kUTn>K z8rl^7>?lfDD*8U0tGv%rorw8FIV2k1jh1txdEdC>7d}7bD2go_i+CO?YE#GiDl<9a zc*OhHX#Rerdn{_LV4R`CvMyoxqduG^gZ+Z!8&RA4L#B?F?B5Uhb;yb6rdr%LhHI`F z%*p+yK{END7;(9|ErPjq9nKzshpDhY&8fx1eyuNeFf>Ts1^dGw8-ncjK}*mcEdtjD z$rORgAekb#(ApBdo&$%ku<&k>Odf1%qj}$w!gqsYGH(@qxw$n+Ci5OaGDV;d?qTSU zRs`iiGFhk!lF5USG^0@;Ern%4vT7cCx%t>2nar{6u0NW4_rV|yvT!&^rU<+lB$N54 zK{AkOo<3pQ4-VwYW==Oyk{~(R4YQgc4f3E>D*mXC=0ReROy*8S6v~O+Ap`iJV?HY92^SL zpcK6sB$Ih!`^!COA0(4`X^>3r%iCjyogurnF}IRk9XvMbk)Rlng>7lFbZtn6x5~kL z2!55;Rs}^DdgR)kiU>I-FXU+k-fX~XL*u5)t!&vugl)q z2)Y6mX`V-RUyEYwRe47?Oka{-GW`T8z6o{->X=%+0!pokL758^gVvO%#By^_v8#Dl0{Wd1VB zRp(aXTa0~1d<2tc;_Hl=5fx$@v6e9x5#d}IxH1(>@Lk)UHbKOi=ujrnv9 z11gN=ZEYkH22>=H5%YZFv*^8ui0D`%B07zTh?WzdV{9q0iLw2}=MhmNQhJVvhzSfx zYEBdPqHKt6#4w&-V39^NieZkGDt_`s^{F zZ)5{C(4k@~4+Z(m*ksAPburJ4-~0TSbD$FhwT9 zgZ9MZm~Io_V=R~WK6**w2bixDKST}?KSF;_gu54rt1(^>KW6L$q7OwAiSj24Xe7+C z0U&;YIzT*uoFKwHN9Rc5Ce#7qNeno;ei;!tuuzwm5*u*!mG~(FB>n>d5Bvx@jP3@pTIIdlvk;6?`She#QDQ0F0?hlwvCr**ke z=LaCg*MMGzN{r?vQ~)#w5g909(nkT@PQK}^OtEUxAkIkT|RvDOYSn6k9&=JOU;LuqQ>lfG&#oJ^Ug5fObcG9Bm*# zFNjeqv}UTey@*)M-bVZp^?>*jI$Pq;jIAOf9SR4w9Z&!A{r`45xaq? za5i0+%ZOMG+($HW_9*c$$YIb;0qn;M@u1E_I(?uegtN0mcx*x-#P-B3XfZ@|SyPBx zwJ9k1Qwo__rn6k&;x-~o&(M3~!jxg&8UV^?}C=rocW0e=o~SEt8-*>m!6`z?*m$}WtK;Ty)i`Cqq#EKt8wcuTXYL=>HL7W z4}FO)n{ALcqLU_WKr)W``8{M`cTVt{m*oMMf@9bfapUdP1ORn>WtPItJ4Y6Fytb}aW}h-Ug9~s zowy0jjELc-l9<5RYGNX1TZl=VJxN@FIg!p6iEwv_h=_bZL|K2Wn}1Im1TA z)Abk1HWPSncXR~m=R254U_4AlU5-LWn~dOkC4hpnYl%qbWFpd?jJlqTe7KK@=q%CY z9yZ9Z=OV&<9TBbFgpwuwV??;W78#w4nz9wqhIwmtkX~T03h_$bhMmT%WW_w?c5G77 zZX-{W8*k;E#GCE4t;RQD%ivl0X&c$~8(}q)D72l&kG|$s?7#KB4Ymh3WX(6Cqj<(4 zOK0>A9*+sVeM=4hEXkw;$Idd#`c5aS&_kw=+ZwAL;##mS00 z`1WB-t3`9U5|(#MQbyjYK!t5(fLEGNi}b^1EapAUNQhs~Ul|Zv50?wSO|a9JjFj(} zelPqNLo9nkvxTqq982~^W^AtT78hY#k{1I^QTCu4=PyQ@MbmGGOf3Y=ZS`|=oXT?sF+v_xDx zgp2$hhj54G_-I-5&c>~qWz@IO&^c?@DDrS4;grnTx;Ej*v-+7`-g`o>? z+@4<~>+ZoSY?Exdhu_E_mYwe9L%2`QxR$m)*+~LT~mNo0YJzwApP7xWg@N&vS$q5C_t*D`Z}NpSw_=Z1 zQzrDC+cEE=!_-`1ifl63?WIQpKIi+@@s`P@+e`P&Q~W7Pq2H~XEd5~~?_|H*%iy!fe5DIqWxs4{q7dWT+ext z($}?WSE|d{oToP+2u2QO%vz4<3ofU4GdFO7!d>KXNUWWonwrNG@b{z_&+RQz# z_Vo-1hv@Zaz-~LYtBWtK!jRFkQOPhg$M7^cxRR#|o6kF~lD~ixWp9Tn$UNFRWFa4< zxDN@YKj=yE_EnIK2|inGyxjb`Aeqb$nJzb{6GZLdjLchEev!$4XOIl@Z1&9M8mwRV z^=_A6N zj@Cp+>{${!VOj-}cP<6QHj8?+))~_=k~1)M);ZFk$(x7{c~oFJxQu7`r7 z6V4oBHu8Yj1M>(X!c@=2V1EnAJ<&T8dtv@S?5$M<@}JJhh;QorjLhRPLA@&kFIQp3 zLqsn4iSST82gAfO(G2-&?1d2fV*XD=E^P`0`(d_A?61`*3c!kTr$j~*A;;=W)M+Ck z2ip@nxiOif7mO=ihy#!!(2|3*E#g1~K+Hu}hk*$2CL+wY5fRZ{M3^7c) z*q21)80|ih|7M-7bl!$m5TA^x^)!@qvJ=x~lnL=1940&I=#X1wmWSI-eyj#76;J7R zX(BH|8_)CLOXx30hbEHS2t~1jM_IBO!UXAA%`^1DuBR+W z5pnXv)!65(keO?E-!>JDXV3VOjhykNb);{h$yXDokaO4YOql;^4WHW9sDwA=Ep6{_ zZF(lx+;pac!Qa|ok@mHGG;G|vmS-C0j-1#~;r-KE{;uItFutEejL7aK)nRq4{PRY> zxf}Ov4&*tFu2!yyEguGQDuu`6Vj0Z8s4@%#U5(jf;Ou>eDhV%FN9?)BUW^&}q$zw7=i=R+ZvhA+6iN(r6))j#+H5boc z|5JM1fq>0+Adu$t`y<}9hcj$8GPzv>AJ7hzz*e%D7jv20Q00-eth(MgyQ5Ya`1{g;VY zm{6o?KbIkLL<13hl$n@_O*_zn-aZ$RA^X?roIs>~42rcta;NJo)v4aUfP(-H8(7hp zXn24}t%x>s|HM>u_qu)tF%1Fg`c*_b`aU9tjcq!2>3o?OmyQ99Uf}RukRozS=Lb4z zToRG$eTz@E`xd4h=tswLwbzUdReMdLv7L6?A{IkemUi1>NT}LlJ|C(rdsu6_Zo$8j z!=J*cryoX+Xe8yGr&N2jZrPIiu~;aTr=H@y!>1e-{t(f#$dJLleMUN- z<^%b7dFRvUt%ms0T>a(xr*T2B&_`8|rB9NtK8=OSXY%yZJT817+I1W{1~R)!Mn1#i z+H~>tEOHcWFDNNGS&&_1&Ti#vEBimgJBV?0-rJwy1-!Vhn6G7?t6j|gNf9+e&(CID z@r&_&QgpS8H=7k}x57!E6qJ_NZ;97)@ zE`-}@(kE;eMW6b{^No*GXSh=HD!P%*_G+6eDep10&0&%s5LVJPsFzHJVBH2C8-IFZ z`~uYmbqd-Y!q~mr^S2K(*t&e8Jd^68%N>+)?z4?2tI_R-+Vd*1Lp zB+VZ50yUO3VQVj*PeekQKW6^*F7&46(Dke{^Z!_BTBnpN{($gjlr;@XG6joCcf0XZcw7xW7?Qdo)B8-AE79v=8d|^hS7;;H;l$6nraf@O>3-oMksAc zyZA(=xxwmEnt8;LfX$cOz?uc#VtqN~JTn#^z=WA=OzW6xBi6^tNjJ8^v_UgTZWswa zqskHd#&L<}Ri+KU$RQhIQ=;NuJ`-XaSIYgeUp=?lf3dOQ|8o(#F)}T_G*r&0=l$KL zjm8~3+k^q9>?g{+@z37rV|M22Vh<}dt0Pg2NO^r1?<|@*H?QPP?MkCgRRvh3dBZChBS$5^ zzstO`O(}B>I2-b;c?0iDQF?z@yVCDYZCC3F6?L0D^M(z%#>R;JR>K5_Ce$TgOW$qr zh31E#&X6wYMf`kGtE6hDzQFs!b9@hXZ$+O;oq9)fiNhW0K4s zfm{~k{xJH_7IX4%2WGe}GA)nx2gzi<+{7?nQy(qBJ@Vr7d_cD&LH>|Cy0)i1nzfCl zUt}`hBxiWBsBbGTdU=ZJ077Y{$i{BwcHXP^@Td6oFT)P?=h%=_mls7u$oCP^|5G}t z|6fN$x4nsoDQN-1rS5w%d?ZqOgjIHV0ZW!QNe^AUx(-5*{1wS|3<1RUut#G?2h44W zkm-(~1&QvXGns}8*k4YB->Zq8(Dm!`4qbkRn2zmoP+$qUUt<_MsB0Vwk^bJs4dQT! ztgRPzBf5L0b@xBQ1o!KNMy+9DZ z26p z7&K>dAklWm83os?KUOB6S=?sC*>*E04>Gv^e1^r`amLVQ(A`Ga`9)lT*yp|FMRe^0 z%_s!z!R91hqJ!kNkm<^y_GsogK{AEbKXDzr@E!VoUYX)r41II#53R693`0 zxA1B~6*@-57Uow(xc;7qnFHO3703*#IYcLDL2Q=jTt$REwH3kqQQh7SmFhVB6jyg5 zO|%{^XX-fY<66OJY$rcjVThEDL)dv7Eab?4hIHaW8-WiS-3W9{^Z4P_;}pp_l|GoYg_gy zd(rm*-iYt{H_?|Y!`oPIVrwy0aN(UDDR#8%4faxf?wcr*m0v7l0VR6%@I17)6YnFp zr-*+}t?2RmF4{(`9o*&Zspa&%WY)U|+uuoZq%>JGx0ds!oOI!f&1}ZoOSn>d zj1CwQw&&*J?}etmMS~{g&MjInY5j$8r*dyU`>a9AB(kim6`mEJSMt%WEx6h^RQ1&0 zvejwhyUith+FOV=`#JwfzTpr{-6NLO8eB_Vi;Ug=MVSYdFMY*nVQRu9r7|<9rM;A55AbQA`szp+-Gc#G%2UK z{pmm}=M90-0o`0j0~A!4|7#^i8_{F z&aZy%bX7|D2M^A9Zw|VO(>%?b-6mj6T(xV(=T4TVMqa6P%BP*;;h0s7Hr~_nssa_v zo;UOUTaxliXD*HN7IqVzY0Gg%cQIb@`@CQD5ZQwJy-B^r6Pzc?SNn+6@E_2&Q!rA{ zjjHwXOdm1)s%qyHdu8AuXH8%^?$KKDY07eE=8nc(l(mMxxu$9?r(%WfbIfAPvxD-xp*) z2XY;v*C;e|^j_@qAoFU-UqH?STimA$EMl}r3$P0ux5yO0wLvm@NJ}>D(IPM*NG9`w zAer263X;kE(IA=3WAWoh`lCf45ksu@XaUfW+ai+(bi=W$n=t7#$>&xw|$pAVwa%6Ro40AW5>+``DCSYr^MJ5lX z1j!Vkj~1b=L9%L2GY<99%-03UWd0OpE!sooZuMH!B@MEWPIEZ*(L8Vl$z)y> zBvS;-f@CsZ7bKJUrXZQj{XufH8ybNi4YH6&^9A+MA}}^cCiAi&nF1&elF58ikWA)V zgJd$lAI(&Ia2QV()&*&hg{OjKGOrDi$^7denat_ZkM?L~+y`A$i%jN2gJg1l?JsgK z^#iQRUo_N?Wl4}s9xM-%$%8k&?p!f~r)Hu(w}(u3G;hHBC@3mkk_+)ZNq#d(WJNxP z*K%F^0N#^iR-Q=V#c~87xIvcYiEDVOd=_Hl95i8cuc{w^M)O`NKh6_b-R7cUV#i(8 z9t10NL_*1?pe8|n19Ep=z6bJ8a=>7bHR=G`V;5cfTWEg~B!|FBTQs-pb@L?1g^+L1 zALY4G{w!3C+PAt$QR_pL&d~yx1bK$bnR|v zk#iuoI2#Q45y%1E{8q^8W!5n9P~?0R9JNo1{)3p1uJHbKnCR5X-323or4Y*x;uLM< z5jUY`KqeNE{#4voBi^o!G<2c!Q!+=Pd{6p!U>1(jv=kvKpeWV`3^J#Ifk*>@xD!o) zc$anz1^aIF{F;R+#Jh1-3nY&=5NBa+MMT72AeL$!J$V>_q6q$|(}Xg$%*JsO@g7tO z;=Sm#h;z_1blOmMmitk*DhrT8dZ|Fnh;Z-%u?!tJ(TxB>3NR5Bh9aV#HGwzja)Hhw zVim4J65+0zxIj+08Rs~N=W`Ir8yY8w^pzq7H>3M7*|G*z3$@X*7CEnz#uthJ z{hTUs3F)sxRUxj&VI6S;?h_L?Ve=H#mTsIS61U*6k645|dOFK=K2CfXIY~qddNT~A zK`}9)0Z`0xiCb|3Nkqh^>-sZ^NEr=mREKMb$f?ytL~xzXO*#*O6oJ1H;cq((aCC*d zI}!Rf5Vs?uZhAq=D~XRH0FXScA;RO;I{!lEaH!tMo{1hc0x~@APJ9645pglx5g*6! zKwN^XC&J#BI=>~NEqqVB2jy=-izSDN#3xXuL^Q62M0m7~hyc_Z)6hSr%K_ay0$mrG z+lcUIC=mgU)p;9nhc={Bf@&cXpCjId@~0cnq_JP;K_YVCkS-tA833s}vPFVBvGYW{ z51+UapF$lWB1_ea&uft&thp^uL!bBzdJW>UxB^bB#qE4z9m+qp4PKUMa|#N$3uLhi zIYIge;0EGzs1rn_jOG?(Z#oeXFV(5uLq^1CZb9ZxfmCFBh_kdg1=&AK=3rtp^xb|UPY_=~|3=)0>0euLKRR$C+|%5IA~2MQfUea! zQs)?*G)Hlh#ie+$pw`o*gycgcBj%s#{FVrh&FwVWboL@5qWy^Iu*MSM?snaLx~@-? z8S=N1co*sx@g@{aJCr}YEY~$^bgtG(lN@q*5TuUeEg~ZF9uWblH<*#-))>t^kqC43 zCi6=uI+9;T531{L(OFBRqKTpQe-MWxqya|7g4K+5B`!yQK!k^-I_D7&A;P-6m3S{A zrpqUEeo1@{Jst7S7(+3}3XE_4bmr*H>#x7ibc=Fgq)xh~Oj$KnmnZ0?Ys+MB3Q>{! zZxw0oa$WC!oisC}TzgX|(!-JqP^`pBAcn1EM4G<*PcB2^Q6ZC&$P5&7GP-~z$c*Gy z(Dx8`z%L|%%nOL9Z*=uK`BgL+_@8{3$?I+tkBG)NZO^J-FSG!&tce$CMngP4_ffCT zy;#Pr;@xXxV;S}lyT#L9Ry%py9D~_2@2_T4H`x17$l9kv(nLg(r}nQMMMaXfo%O*r zs~S6o*J6jYu@z%sNWpl|L+28BrJP$JT2AA8%YyU97}33_cA&Jx`%Qr;Niu{)aQ?WWZR1Esff~b3*+oq0jGPp6;&E*a%V7{eR7* zyNh{-xuI>=uWU6GA3KGOqp)SPaTIo;Dc6NL3q=eM_j(IO2NBoZM>*N4iSn^;eM*-O#|C8DkB^&nLVh<@*khuO z;nJXotub%xjtFWyO)UK#>9}2VXwA}lG?MEcs_X6Y*4stjsEGX5Y95d9Uvx(K$hCa@ zc7gd~gZHi5h2R~Y)yr-Nm0bbr%KVR4*5J!*Mf>rM2!?XqD!;n}+cPs|N)ZZwg4I>*rGr7BA8Eo_5qB5?Q zk9G<^AxI{39~!szXy!CmZIQ{m5{tLUj9aVV$0?MV! z&*D7`5hee~oGx`Of_%L$(~pY019i1*xLcHn@KD)hCYDQkz58a0;i1V<$TPa@MJoYV<9>9S>g6}|JL=^(@LMwLgsCJtPWq*cC}J<#egb>rE*-HCW(UNpF#XWk zav5$U$yXzLh<%YQL>vgIzaNo~nIOrj7`ljQ828T6OFsmJEKz?sgLn-V5ySx)y@@$m zfz!={v5<)cq@Rf)iI|I7JaG`_!o(~jNH@12&n$y6lo62$Hxc1(xvGzGZwI{~h6i;E zRC6c*`l$)xm!uB|-I3A6Yl(v~x)Tu)j^b4PCv|-qPRL%D5D+=3E?b7f9?2b%`^0Mz z9?^|}U!xbK;BUn1uuw$JBZunEITUp|$q1+y5%w#INa+?LQuG3G1jaKW?7dCwt}kb@ zF~igK)n&^_R2|e*N|*t3(~DWx$Oq{+F-8(cGd7Mm1}P=psIPBO7nhQJGZs)p6b&^6 zfks+O?1B^$kqd{&d_1mP==AA4OYDlTH$w3#HN`xQ)-Ro@&A?#<%9@DWcwBxwPiz!p zE!vIrKJsC==p>d~v@;-$+TomOIh=IIc@bS-dofJCjFH(&`aUvr;>mPA7g~UEQ!Qdo zR$~gc$&V{VhDrNPC)s+wh?nz6DxLWlIeNYroEfe5lH034seV2F!Cjp?k2qeQZOO56q60jJhX4!aMw)%gQGfE{^dc@KIG*5`f__&NBP}@ z;^xsdmywPkMqmhOh;3#{XBS%=+kg=)O&j-&E`!}ZTV4pa4bzV;kXn`=?^~=5H#S$_ zxeEhboUq|s80hZIv)kpvOGSU=*oRB8X@t9l%fzVgWLMb3n*+|;1A!hjM!9U6NOmhD z{5cV}yoG@YHrzSix-c-#R~e|N?c=iJdx8AY5nsloEiIiNP->1Ld9MUQZN~xzFx;jz zM~aYUt1>cRn7fWLY3_xlu!Ko{PwG*cl$h%MPlDsE=~g86`~kOtrkP#?rthkuZnQT^yAjFtA=S&VChrk{A!%_+$LqUDDA^; zK)_Xc@Q+mYws2IEw7k^3(Mj_I6{Rfow$k;b$5A~{H4+w4nsD%zkWei9J|u2NP@adx zRlt#l#C9cA#Cd1chy|$Gy}Hl2h>MjQD(&h;9^)#^EQUQ+xjJy0b6f~NT9?1U*O1V# zOUcUlc0=WM^~A6vie$WVZD5}B>QodCCK!~~p>?`Sz=OKqpt?n+tb5!voPS8WdT z!+bQy|8mu8I9=@M+SvA3CFZA-t4zl@II~LNZ%x(Q6Z65TRf}Nvo~q7zg?i$|gU}7H z3O)7!XslWS(>toPVAr46486HkTkv;L)kc_%tD13Qwf@b5$(2*D$Xiy6A(6M|PrdAR z;RIQ?TC@qN*lIW(W~}hO0fF;X^5ZokHLPnRwW*}W@cb|twpOIZw(_xto|vMzpfFL# z)iK7VLdmXch0U7$&hvpP=fk=2#~u%iDUI=YXRZ~wJZwh3;^Go>rph~IgA~KMjd;ei zanN4ldJ~QlDa%YXEPcS)Jm{J>cre!+}j7 z_2Lnpe#6u$#WSZCmf5DvoKeb#4Z3cmZE9iB4BO19ch88A}^WHO=+v=*7n zKgHnDB9r-#K{Cwov-}vff-TTp?G~9ln1WrK7MVOK3zEtFE1E*8j~2l|kgP@^`U>+P zIhlKqe!kZro$7So^MkTLO4&C?+lLr&D?!H^fp@!P}!Et&aq^U8OW1F z%tGHL!oIpS3;(F%kbU~z1$47scp(Ss7A!2jNHQF%Td=ocQiYmB^JA(}ZhnAH1;6S1vE zEI4PHGW${YlP5z(hn~2eBB_SmHD!kXV8&M_r&@btmyQ z>>Yt_iW#*fN^ubpWjdXRoG8_~3Zxyf{dPno zES-o1xrlIAK%9YaB2oVIGLJM$u`xu1M_Y+^WByBo2k#MQYK@vA=7&r?tJ53>b3`nc zcrBK5L`2{wq5}yeq9{s<`8enxmeE!%%AbC0&VZdN@*tf!8 z3kT)+IRu@5BlbrMh;!gaI}ib?JEZsF#FJzMKpURqZX0nfwtR{ABL|3gqx`?5m)lWG zi8n&UKq2MHM5MeI5iu_yR$y10*c(MgL;wqkSeC9L&O^H=B3Iug_CV1Qd*K@#VkJ6y z;(RpYSg?x4qo37spo>nY&K`36F46m%Z_ytmBgel+Kaz~45B=5&$q{JgL^@beiN=#W z897Xxf{ckIef8E`pIB`Nu?uQKqe;E>Ha%8b@o3anJkt^KpY;__cD%ac*%mKrdYU`& zZt9K1WAgNKST33EGJ3b@9JJPn^G?_;Cbj&cZEx)wy0ee=!?9KwvQIn|QteEpyE=07 zJ`tC((y2hGaSHz_!R&=+21nuQjx97FS9Y9HMYz7>-1c2%cU;|Z%CGi`wZ>5w*9NNP z1N+6@;n!TmuSpgq6eYy34LsyE9uSed?Xy4A_3qJ)%#K;Ht(z--=*9Dxzq}}hXV6h3sS`#`zN)D2-In2N5XC>eC>pp)7B^t-ywdyE z2Jv_9K89wkJsckhV>_uu#0ZCmbJ>+hGLOY*s6Co_@D)ii&%46>#~_)^4MKOW`7hX; zvh};h1Q&%xKcT5TT3l#rq(vt4PlIIg>+>L)%+KP`--~Y}ZwtYXqRQTq~(05U3!e!@oF&%3wzk65wDdy!l z^XDk{MG0Id%#F`u%}M;_Gi~tWy}OTMUnE-I`!_K-e4%=^(BvAsm#4P%zWz6n&0{K@ z@u8-S9KWHeyl00zmbNf(D|R)EvduAZvoTyTJ(J{}aSXR(;m3pTVNd&hS^u8M;&bK6 z_e3|Wc-p?NE_|+gUu;jUQ2rVJ*kZG9d$l2ruJ^xkIuswvar?tqCYgLZHQF2bff(9y zN4Jl}9o;yYdYw5#ZublO$Tq{Hud}&WR%}C(y83arSj{iLaC)Mc*>mgKb`SBrzsu>` zF@&Xm)~Minmv|R8_&uqvzWR413axK)&}TJx`%k8N0}Px*4Ojugs`l^J-t2#Te9K zez8H@*bGyL`Tg>Np9FoE`|MAbdVxMPrpL*b#u+oD{b#Y)Smmq=%$J}1EC!+7bhs!6 zM?V>!Fk5;riaI`TO|i0*niW^ppvmpziUZQ$xpHII-c5n()CYT9pBsN5 zV69xWtJj0#v{|Xo9dLf^v-_%t4{r7L;)Ih$*XKRIOF8{gq%081gh}&kX?~|z5SVA% zSH1dzu=d5?(L7u3mpqE}eyDz-I=%14_>H@+&Wp2DVQYlh5k>3Cf{W+3{giWVpVG(G zcQNxZTd2NifGWZ8f!TUjAT^ifXr&8#F*&&nB+K&FN0S=h z_J3#WDDu@WTC~Gvxy7xRNhjx=v7>1m?Du7I`Z;5oSQ8>^peGDwSr8i9366ab!~2+V zpoR*IVT{Ge)_Xz{jbV&E%VpzVaDM$-gwk67oS~20Y6y+<;L>@A zj#F-zN7^bkyJK9T!xM|j>Q-NfcJ9OX=k}%bxkh|8*;(I3G}pDC{>>?yD{z2nO<=dl z)!Nl+IBTC&R8hA^brTBPn6j#)MC@MP0hg^j5fGzAh)Hvldi*$u9S!3 zSDsmWr*A0DUF8$)6uY}{N^T%0CA2OdNgY?fIwTfw`@%q$bL!*{izxmh&aR!cb<*|) zQ)fT6Xkno1$bS?*Ryeh=!{Uy!ZLU(?dkTUc^X@?v@hSKq|9ESh9%~=6;b@kb4=B}+ zx>orXT`vqD;%DKY*s3UQ|3#KvXUaERvaZ1TFnER@noWYbAIb`k4K94_+(=Pc4aZw2 zDfs;p{3j1W**kf5fz9q(eId%0T0!RjzDURi+hRK+kU(j*9#9YgtL?z&R&~H+4IYYs z42e~SsJ|%_;fit5Pl!(pIs}=}sJIMiL#mVjcXX${c{A;I=ML7k+f!XAAx5!@-K*_b z=J^!$SmAUTew182SRn2!bEqd7E^_C*=rD`tSURww?=#|ZNu|2x zGr6q$RtLH|$0aHbGyz-G@%;SZdVsgjE-0Z=zOvEd7-hkreD^@zny_zQL|P1OtE=-L z3zG50>axX^c;8q3eYGRclRIcd=zEU3mzRx-Tc686+#Db3JGsn}7vdXK_v$j^X|vdn zt9*EC!qdA>E?~aFuE{0)s^4Bd0^baOyYPJ4;y`pw_r>x;rY)qof-eqa+P+^Am-p== zlW4Ax0}~WSo0IoPr!GeMp^-Qj<4g-(j=VQP$#l2Go+7ueIw|h}9SAL84PWay6~^&` zXJ8>qeQCk`MToK$>22t<8^5!3Axf>`lsCA0a@=YgmOo5AM)H+lWj?#~zvvi;26c=B z@~^p7&mU@#)EucbYI$T|+~>f_66PpqOk0W{v*6>Z3~AKV(p+d}`Khlg$lNm>TS{MCQVGoQr)R{l7C+{WjC=|^+&+l&KdcA~o?%TM%ctLKTrl}=I z>rO7S*G*orA=l8r-1d_T^!~+uve3SmvX4r0V~F8sVTHkAJGK_zW;4|P1fSXU*N0YK z$Sj}+Lw07M$Xx#IZvgsIyXWvbp6Rt&GVIJz}{QWB?svu5y3F3Hf}3oGpPaXzDiH?_@g-w5>rzq+Vozong=HJu>C4lsV>{ieg zqOB1_qtnC>T-40r>ETUp&*2%CCT3$b9wg}XU3v#qduzb(1AY8xwJG#|np%_A5!1Y# z{LTF0Jie$k@7|&sY9pPQNGcO(n*b znmvObn-bbsqK@CjhbXjyP_S@AC{EZ>rOA*ST_xo$J!JN zQyT0xnk+}-@NU8|va^_H@0=uje*4Kq+otT4%TkqM;|etFYIz}5dFbxX@9tLg09tyN?7!I+}FzDjXfaF{<1vx`;w?Beut!v=emuoq64O;uO>DYz`B zVPnGFlVz*0kI5aa8gT2akY;b&%C;{U>>E_U9J#o8AzBY;qS;qvplv0&tHgURUz}gG z9@vEO#1iT^(6q{g+mv#Cd!>`Rt}-uwfZi$!E9lg_y3&BZ%PJN8y{?L5UuJVH8?!(wBtF5>CQ-g&Fd_V5(HTZhwx19gRWIca8dO*Xj=w1|T_i~m|+sHGP zH_R&M_Vv3~H}GDf*WO%%?A!srE7&PNNiUd7+ zc*o>~xsL|YYfrW>Gi-b`kg?T+DI8DRUe@x;Un3(sDsk>!_}!&H z{3P#EwQ@&TTL1GmU*WWUxf#d1ySn-| zM6e9!=kupZT`7aYx7s>df)gaPkSLZt#OcRmG+xRHnjXbsFs$dFROP} zZ^$(@t;m01SdJP{Zgg*p#W^k#;J$w5iQ{&Y9@wz9X;|Sm6{IR;kI}Y^~b*|9oT5v7mM~|ZtRtxriY{5G+OAR z5inBCrU*=rvZOm*N#I-M#&o5Fdwb#LK(sU6wFonNiY2r4@@?JsSYfvQ33(Q-aD0WT zXTg%5s;UDV2sH|7GSmX7ZBWlay$(fN0iQs94s{+X4Ar;|lmn^S&&TT`-5b1 zPuu6(qunUzhh(+LWS;kn+)lkSL7#yITPTv-yD3@S=m(pEwS#|dio&JqlfmY-Qt6H< zQaQE^g0)u%$>gkG=;h{D-rxwnPOBy-$UeFMivFmNmK}8N-Xg=u&4vbPkOyOeWOC~Z z*X?7Elgxu}Y^VWPFE^*}ZL~+r&uDCUw#ekZG)T74jg0-#>amUY`fMegXX0Ey-A+xs zRIJ+PpLWQ*q5A3OeevEbxA#y6xM!mT$LiW!p?w5$xh~g1Zh0u8Z$lo863xRq?b@EY z!kkWP9)!71H#c6Y9a=POSIAxIbN6DT;;`<3?hbcDQMUvz8uDz&E%Ck$avfxvnNtKx zuki3*$eG9|iY%Egf!rVRSl#}{E9}35pCWujiEz`l(;C#B>AJgbAam4(mUu8EYB1y_ zx;g!N+7ZZ$bvX%g%R^z);4>QKy9@6W56U#!%o?f7w?V!U@^c6W=7QZJe|XH0lDg^& zf1bEPeqGL8ACi*x1+?il4SoAg-uthxW-@pidtsYW*7Z@wc)lJLA{RZOL`&mU%3OKk zJDx5puTnmh>oyqU`lO0tqk>&>)H-2@^;_Kv21aoS2XR5ds7RW;g`oG7z9S)I~uTZxYlI6+uD8 z)mMP3$K}YA0}Z?7f?~X8xiup#Bz+x z6QNx~i>-7Qx>LYs$ngrrhC&s%v6Qn;VZ^wD9V7fT&_##uq@YFO6^T@~qWm|BH0ni8 zbwVO-#4{@mCn7?lh`8Z+i8F|Z&@5u5)XhRl_@#TVc6k3xl3UurgA;Qa#5{N);=*{8 ziA14f1Cy8V5VM?S96(iUpk-AjmT%Ah%O`^hWbeI%+j3o$@*hXTs#EueU zCB{n>`}j;p=K!1$75n(i#OywKF~&Eg``;ygBasGk>Ay2A^m2`JG7-7hDFtG`9t0%z z>4C>X()~?|A4!dHarN|wTBM4aijDg*1>}R zMqY(71`P+w*`Q$3#Y&`d7P(zw4~eM~(^4BCtM)^9I~c&N?hPtr`S4<%fbeFMTzLi#;D}k=w1q3Se0f z7Xbuu2Jl7@r<}#Uby(N4_z!T(Q&DUOIIm9+;$kQ?GsuA+xDlOoSSj#z5U2dRAkG`K zL9uTgRs^`wT!2$f>j%MndJw1GbfqxJfft+#;*_5W;*?KEJzyQy4GV)f<*6~2Zrh>? z?Lzycpo$C_`1YVAEcXKM%5d%uG#o7EFgJiUYLH%js<@F-*#G#Z4w2AsVD zhvaL)7lQYfoUQr&LH^mA|J2-DrHzZZicD1}y@lxLHJQIwp+7qZd0~un&WH06aBAK# zHpSo{fyYYD#_7c%z83sCxLwM3f+ynDr%V1kcmenz$v*&J4xT0X=elB3j+)QT(Grue zx$+GYIk9M^_QM-ynlc_4;J2CI&e7(%{twPQr1KYW#yHcBF3x4}BJdh1k3@<33HT<- z`+yfA%)sO1gD(N^CFPaie**6-`3CU7!KgeJf^YSGoCQ+*eR%j8{3Zw)PwF)U4qosd za6UU&5h!1uw+an74E0$+e{z&Q&%@}EM@Q}eVLNkbhO8Or>!1!eOWm6gt1u&{V; zSucQh`e74WOzc8b2iqUO8y2B&+)P3I{domQE2YqhPT2&+(=?Bu>?0F z;(6GeB#xJIYWC3oEFhnMKCud;(L}tU$B1}Bln?m+Xp5=|a_QpCOz zvm}m}SS*qKQTpRTZ{l`|j{tdt14Kkf^iP4Je+v8y{UJhM5fLH3^dB99<~5fh^g>o; z(hLSNpiCm3^j3*N#|SAk13cn>eESl&6VVE0tBNW4ndDzdT!WlX_a`KJfeatp-HV9o zt}u8&%*3K)1SE_u0okkNg*zp(@xTj@6Gx#TN%#8{YcVq1^>DZ&!eT8lFpC`Sg+MMr zSVKg3b;Md|ND^^h*WaYWbd=j%Do{m)=Klub3Jfg}XJIJ<5vlc(l>eQGfJLVi5fYtJ z+*ouw6J#y;#5l|M}8gY$GxY@4u7|5QuGW5i_@h&#~OAnwFkDB?zRuYoQG%w`Rrh|Lw^ zb|6=62%}9%iC4&x5^Swd{vmNJa=k>c?JWvk9VIhUf~^+%+amb^;(UCLMEGkaqWZiR zt>lQ#9+wO;z;D9v1>lCW!+}VNgGlm(B`Dd6h`>K3zJ>r29>WjUB|L7XuFzhyrN>zP zrQ^L&(ubJ#C@onnGzYk#($}00Cv#qumI57U7hRU&!bZ!Y@!dZe(Q1G5BRJdAJ6QUA zdplSv<1Oiy0v|VbJa7j*yJbI{u{aq{e(8t8vh93Ona|&Yy8U`hHscN1SZ!l`uG11@`rsCY@XA)xC%}iy57ue77mY+n$U(xH6AE{M=S$un z{7>Kx$(`UIfe)8_8aM~Zk;}yOmEalR7_tzYjfaOlmFu-Qo9ipMQ7ig;Vpmif?l*X0wtpuQz`vj+R=Zw5KARAMy|{zbzD;d2rJ;kqn~FSr30 zpYTSaC4(^np}vhA%xMp5#-1Z0f<7Vw{+@^cf0FLkh>2*>At9(Qo=mi(z9!;22eG~N zig=$aa9i7QJOKr`U^)>2a~6&$M#>QpA2}irixedGAR?e_Vn+<}N_R2P-4i7ec`Amn za9sjYq(68t6 zC~0BG6nk}^_~GSh1;@K-1@7p{Ia!TxJq9P`uOEK+p=aq9Z8Ekd{c)B1i?6j7TlmNa zZqLucEG$M0vhax>%Mo^=>c0+EhK=dia}6-1_Lgy#IlsjIIyvs}wyTEF4oR*ptTleM zUA`I{z9a^7xsTVj@jh8@Ur<)0^ekS`v*_^!zfRV%Y2dEBvZ63w@uDZz+ZR2t`te0{ zja7D;qwBOs(=%U=7>iY4R~5UGqz;-=9PiYcLb06e+V#}xoS&}WZ><>Hw=NT!R;F#M zmg?GD`QMAN&gwjsPl|(kmVDu_avM%3j25}`#$Ea4epQqquhJeta%`@Mw` zuX~(+djEgjIeQz`fbZ22h7EF6E?oiz-(F^vJe_7J8P`{LE z+f!(FM)L`N*`_U34|o>VYZYpEcf=lfR~c+x+^+S$71fWR(NG?1-_UqfafJB_uo2dY za$8fqzn3H2clc@#C{!9y3a~b7tn;ry89WubxaQqEv=_P@sPtddp_OZ?)N%ILWf!KGPhqP3zLBfBttDp_LNZQn(fd!FD0~ zY5A$O^Yv_uckb+=0Q9Og^K+_e{aVQzr%5`SZn!BE4;i4s=E#c>YWVC z?nByNfhw<3Sz`EXcFm{s#ulGTHbbwC+cJ$%Yzi6@BE6mmzKfq?eza4oaQ!@P6?PP> z7fK8v&aj3P4s0S5g1Lhby(T4PgYCx$|)Okd(o;Sr|MTDC&$NRz}m>PUD+dqUgoFJ zY|zp^KTAs_pZcT6BQOybmMHbB_C8zNC+)tbZ)??IVQD4J{B9k^#l_io7AG4@+WJmV z)A^S>wY%nYsk@C!9oxd@$p;HYBH$0MHZ2zVrAlhYV@e85nov1fNjr6Hm-BXC+Ip@L zJL!IQy_&JN5nl+3g`;lck{&)#%3g85d{sxbvr*Ma(|o%dulG@Yd=?6DMUF)HF>w6> z_l~Q2bOH8lvANQeA0LHf5i1d+q=)Uo!v~Ejq+6tPl}O?~PD^piaBjMId5M~q;lj?^a5(Z(w2>|Cr!*f)b(T=e?uOkK7cHXD;|LKz zM#WxdLQ~O(`i8g-8?!^bL-I3ZKA6{{8~MKIx^Uoas5a<{$FQ*#RA zKNfA5)lT00OK%{Wjt0%yJ3mQ=(ns8-qjwsV{SYyAqASR--Rm%7SF#F8UaiZg@wwai zE-x8Up{6;SzTC1OxdVu@OD-!=>78NUX^z_k^{0GT#j^~|Jy2OP zD`k1)>qAFpI){r7ue#y2*+ubz@*?xd;QWC%ZeueZy!iiZZ)e!1^J|`OpoU`(bemBE zIGzxSxqUasHSWo_efrGC`fTI#RA-V)+(@xId`i!MKWMcVi!UlY@40A$O_PZ);_GzW zlGeFt|CTSed<@NDt#8NAzobT@od$iT*?GRgu4n8=lXki&!LOvuyhy#@A5*4XoY!I) zgDwuK_!Pg1vd~eEVGDIp=v%*X((|ee+_h^ac z);(IRHfOzZ%3T=RlHmxU3tr+;EWQSAsYL=z&J5by#u^ zI0ZQ6&joSbfcjz9VTDg!umGo=t9->VO1>>UL^^=eL&qS_8*p65IxKls5T_iAH*e9c zw>dbpmDeCnuako~Z#6xLQ(hOuDc=>uDZdcJDR23mTW>QKEm-TY;_3+E;s!yS0c;QA zl&_$pIIP6uxJH0e#Bq%Pr+?8I6AosrM{RHZ?J@08uQ%XuD}KyLs$z(2wk{}Op03B1 z!aGCzPIzDVv3kesY5g0V0o(B-XSathGzjO&;vax>N&hnG|7wzD`3%&8xh~A-1=}_P9 ztHhY0a6W=xrVM7J`O&b@MAr&9UBWL+I#Z#WTDmEKP^Rg%wb z<^LgY>RYm1#|YK8lE3^1j&U<88J)%j+42JFA$P)el`c7-W(4?P$vffZ3&9_eJRLl6 z@Ck>4$KYcKq`+A45#WIbCWj_lCtCr_J9w> z$5ILz{eRrb|2M688$4X#V0av*4ji;st~lYa0|746O|Mt$Jfbql1LgBuajH=T4$7%c z6*$PBH~(B6l4uV9BsALWzh8T!P4&F_H8V@*Eu33ZHov}Vc#nwcc@;dLd0$!mvEf}i zRFvYZW+rWW&6Fb3IG`Oe-#MVwnQvyP@%3T1r^*x|_TItgUU2np3%B;>?_}6Z2-?F?rIc+&j&r zgPOyfbx<2*-geOlHP7x++ae!`Pk>|1%-XgIvfKdP4Nm))%yCp`T1tfD8v29(?c{iQ zFA=BUqr-dR@JL4@uFnM0eZ6$wB;D&IZw9*PffXpXuzpVBAtC~z5+Vco8<6u3=ZM8t zg~|wgO*#C1N1Tp`YKchd$0Tw>gd?!85$B@AMx2O&9wIcfev`<0lusB&M2b>@j~FenFOdFOpVD8Z zOA5q92|UiC2SjA8L@_af8!Pw@dE+)f##~r;WkBS304mDxMz>02ElYn@Kw3OnPn==Z zuJr!~Ij(oT&68z#$3*0?W+IY|)hq+R=!ppUJBfo(VDnwxO1uvvR73=HC$Su3Ys3f8 zc9-r{BV;Cx$9K*M+9md|(50kGhjb#|-FP5Vpqz-;GoR>2AwgV;Cjc^HkCBhZP#6&r z&{3sElp!+{kyo6Nz%{sz2>uEY{)Cp^gBS}ZUyB=j$CGtEl)ll3TPiSV$6 z_>i0s*?`ZEd?WGzMg|!Xp`8Z|BdkE4tUGf*=Tr$Td+ zI1>><2JD_N8!<#?Gii|dozi#waQ>agsg+lu{@&^)L8Ap98gWZ#V zncuz;m=+l7Fr!!6uzde!Yx({e&$Jh{_aZ`b4?D^m*B>@Fd$cZQ)@v{)P`tq$^_mvn zCv4QgyyT7l+7JpnQ2EKlHixQ@u0uiujy*VM2jZyt@M~J4Yw#T}mn;1S-B53GG_bR2 zcsa;WFjDnCU-`qum&%{a?&N)@@>@9o)qC^@g}p|1E9CaX-_u$P0t&!8GJgN;)A2L@T)ou@uyn0}^|6=A*SmQaW zy%@gVuhy|s`6qMro7#)8l#_7`p!M_~*~8yUUl+F<8}ivjBc z*b~8hLd$kVqp0E09@rJXWc+&LmxiAMzfAnH@GHP?B7SUSRp7T6zX$MJh2JLpcHwsf zKeqTz;m0ZXX8it%-v#_0$L|1sFXCq%cs$rG8F5m3RgJKxR#nU@v-e!s$8+@^tf4gT z2+<~c?s#8YW*gBFU!}Z4D0RdJ@oWfg#m5&cpB}_1k2ljk#A1mt$m+q~s39BR^u{^I z0Pl>GnjkLZY`=)ZG8Ezt;*?V_)jFg_o*)i6w5&1eAMD|gAkF~BU^*gLK0b(39=!D$ zBe<`X{7ew1yg7(xvwIRR*PG1xt9D9Lub2ax@M%sxYec*Hp?K+vWX;7JVY@L8{9Ys@ zACbHed=B_Y$(MrcpIA)-jCpc17Wy?y8KFl|r2?^Ly@M}a?z^cyVYMc_@~cFC*3FM;=xd=q#VqzBW5;Xel658R4i zZ&lb@p8$vP(gSt!9|zBrTtgvv)>HYh);XkYQEBP?nHANGZkoBEWL~w$)vWzPSHCy! z`JB0oRTL`IJw()DVgseQuvTU3Lz`H2zd4dZPEC;2B;AZYWwPe>AoZIfeLrR<^ak4})zmIDV zf-`W=>r=U$)fcP3cp%$Eb|N042k{O$jSr-f;xb|$8h=2BuOO>16@{)iu8Rk^ z>1atzrQl)MuO#Ben}~BU>qbO{`~nf}WIOT>c{vgO`0etBZi#D%xZ!#tZm>zZ*Gb$i zaThTZZ8TuSm~Ds|@)RS`gSg%L=ox^U95LocPR@^+$SFcbKaKfB0LXZF)!ZctKb%>I-}c zeSs?6=n<>E@Fk`YtIUt!s%|oWrf^UvbOp?m^ID26xhq-;P{=;7MccM^6*G%Q)gYvl zrEBm4S`|?z(MH&Z778MxOct$%(iA8(n%|!Pz14sj$1a`$7qmETEnM&)?MWkTo6WsmX1{h(nd+2x)SE!x|0 zmV$z8iFgjQ(JQ2FAvo=$xuJgT_1qgy;?56u(epzB*Li&1^_5WpW{zJ0b3``}73~?@ zseOaO<$H zXU`_U-8f;t!8-om!+ma+{!kH8sm z^2y+Vg8|L~KMgt6ODNycO8#am?rX(=`6G8J2?#83@CIDj7dXf#wc-m}@%`W&unR=^ zomTR1z=s6Mul+%eSJDCPlA%E!9N>Y25hwt^El6J0O1=VoM38({EBS74>d6Npcqmwo z`-|S;=pYZx!5$$08hmV!oZ2gagAwFt!-OFDxK{E9!0*B@6@K~3p2hic{Ca_7<(8^^ z4iY#Rpo$WJn)^@Sobqnq+|*SJs)A?Zd?kLUvxNM9oFB%|A^GDtKOZEg8fYgJD1j7+ zyivHID~+-SG?D;JH@vZ>t6VzZ(v+MUF;6 z;9vy%nFXI4iLSA59t*FN;KYO}Y2|HEE4~f+^E=9Xh>{{_m2EP{`vSa|Gz#j##k-Vst|Fy07bFKLM;4%0G3gj>UAZPjY z2M6>9+Tu>~;1f|DwGaFt4&sTjz=s6!yIc9Edg=(s16gA;_{bnm%lLsK+H)~SAFr7m z7ib;peFd+0B1h?e=IB`=e9&O%QeqElb|RuDnxf>$|$2#q$#pCKP^jS3JsDnM+5WOFgVK{z3D)eLdAMAlbK z8KG`yvKKbyiAd^r;@x;4BK)yoWJ8j(79i4) zCc{}oWMe-R@1G8zNr5d49OHqpL^S8e5NBc}RpK+mLUhcCMR+n|F?tKc53?t=%U$eSyhHZ4Q&EDiq5uw05aIDPA|m1? z?m{jn?ndSz?m>W2z(u!rOB<4tO-SNC4XJdSHCoRhUe0Y(;d?N#94SJa4gbU{ zy#Fko%th0ISdFA1qK!C)h@z0A?FoyJ62v7KSi>txNJm8QqzP{172+xk{1VZ#e3iHr ztv*DE8suE6p0HPT5g*6>$bq>;^#CHfnnRS zDD!w-Nay-3|G?g)QNqG7c3u%mrAj(Y3`fuyh>6n?X<`Q2s>yA@2) z1HG$()HJmX8Dd8NqV{!hr85p=uz*w)yx}m5`fjxJBksT2I@2 zNOv0BqMR{D7{CWUrPr1s2E7V~Q2*<-l$3OwD=lxjEhDs1*Q4q8rbE7S{x*(!ze9;e zgu7rN@gPU&3!9xvqSx&lDMZJ`NpqETPeQ1?bLSjIzv9zpV7x zc*s`Y@mR+cXh+to&#K$BtxB>{uRX1%gw%&_3)>dHjju3LSRw59pUWfM$O(MGuIr9o zzNkwfDg#Zs#y5P_A0l+4L!7TRJXx;v{<8daXssES!i>;MYG~-$A$~pmE`M0OHJ74mD+uZjgeZZ{QrxT>qe~nFI%Q)mHsz-mDC|#eh)*MPnK72C~rvFvay=QHrX4gXnaP&qrw=@w6@^c#i9IYs31n%^z& zGulc8B{kP;?bpaJBilPKewZ^GI-N0ri5;;?aOH+1XUQrnttKCd%a0#zvo=?>;>f3C z(jA_C3zC#isH8@o>zLnOswoG2>B5)AEaSfXPEDq>&h z6K)n*$K8DfWZ{2k|F_EXyphdXf7fI$O8EZiUR(cB-orkle}(tnv-5qw^^f<4H%DS~ z;~nlc_`k;;(Vr^95Bje4SG}QUt9)v|td>8yw?hkDn_nW>F2QohCrf$PTNuP>_ox;G`)ZiUW!@nuD8ivT;_;3G8bdC@QG24AJEgulN* z!Th@8##iPNpBZW>*qcqjTkGfydsMu${!5T07km2*sBH>OKT+P-+qPLtck*SWCwXn@ zy}eaFBR$VMx_R$x^=Y*}%hx9T4sTd<1pGv%&%j~>hvUTMENztUf9av#Yw4QzxAcik ztCwc^w57v+IZJQ#)g#62KG(EL+tW}nzs)XJCTQO0{klVay0b4Ug=c(wKR0Q}*;l+U z=qgG^CG~qR*Dd_#BG)w7o=(E`*lgRUr*uNF{TwR(_s1sQ3?~xjj0)Axtuwb~ds@X6 zYD(Yrj;YQ)*{6=Bx%;jcPi@z^n>7O9$3pYB*%e)nXnotBRVu3UBG+SDG$W-&)4JwH zc8|_ooxS~7n3F4I!myU)_ivovIS%uOQoV;(QaQqmDbwT3Ti^q?{1!xQ3 zI4DQ=M7fTi13${qySQ;sj<&cmK(&_KL*83?3J%;&^A;d4cm)_Zc)@%4%~N3*bKopE2M&h344k94fy*|4 z_tdQ@^0J-g1AjLX&70l{iEjTnWJe)8gX<`}q?)h(P3xaTm4U#)FgJp4#jEn-oc>0b zpCXL)h+7it@PwLSVPQY6c-WVI&^u~pIG`A3Vuz!Jf4@2(&x260tc;Mh| z;t*{PIQGRk<$cZTvvvEe3+9znLd|YY*@6W{_m$0DR8&<_T2xauvtr&N1#_HBV6&j4 zqN=KB{*swB^JXrDJp-jjsWPW*PD%9=b2+Sdo6lD2-TVKpyjP>hAd5;$%BpX$1?3BC zO6M(}tJIWK&#YfI!C`i-(&LSiMbu*7_Y~HX&ZyF3J3vpbG!Vdovbm*{j{QlEH+NO( z?Wyrze`rE-ccD8Nh^q4YtSt5eEvhnCF49u!KbR0_+0VPPO7CK7bMypr=0%&)VOG_= z#WUv@%`KfbCvYF3Lue+=(Yu;IW@;TeFop||9u@QE&YWL1XC4eVnBI6dZ^+oer z=x>#3wxJk5AV&bb@C}H7h_@l4$n#7(YVRfVL8o`9wKdB0aBFLn<7T@lMi+BSI5tEH zH}{1@0V>?uc&qIjYMA-v_iC7}E}Z+JbTzNxzb6@gRVh8d8qmNd|fW89?Jf37ti(i`YoYy{&AoO=BdIX zZ?N$X>RZDDjJ|Eyh%csVNFTMQGEOW@Iii^p9@Y;>L_0#9pN4OA8ck-KIz3fg zVh*X(>y5jx!|z?@U+eVCMm$ctnD1=WZ#LTIN87_pb(89+j@od?tcS9#` z*}6j)!b8x2)tVw#Ob*RzIqd$s|5eAd@@@}3`_L1YBGld4VV^16ibfZiO{SixPW4J8>&WU+NM*T6UqZKyd!I>qA}6dUSYpWrukym;E!; zIP<6ceWNW?;~l+AEFiygPH>ycF6_x%}?Rj}_au zBW(4Jk0ID&D}Q33&idR`tSJpUXx(&&|91PMetR^A1?-^?{u4`_Qs zpH6jd_Q%^h)IaYZU-(!5q(k(-)ZDsPe>AB%H2KW8%apXC-i!w{w4!Wj5lu+%1%o!A zd)w4AKiM4jh(65K6&nH!6>0j|ReM7=R)}5ydD>Oo*NnA|?CI{xv-*7h@qOYy={PKV zH=(I9UhrtXlP7=i`?{b&-AbVE@Ci&YLbleZqMn*^hvh3T)W=0U72Yx8f=0n{? z`5Qr;@>DvC!;+^5amovWI8RH1IOOe>M}i!9y3aEcEigUlC~kxzQZz=+g(}Kh;3&@p zzYhL``KNBC)>K$r-VoS(7 ztz9gK$ypNwG=l;JG>Zs6UvjtPw46lw0V1C086qkyE|H`EcRiJj`Z~2}7b`OQBaT9I zTJrCSm}~G8Ct(bM72REU0mQp82|~OFFPJzPH7aomRIP{;Pz$4uVz^=E#Fz9u*Jq^D zF>Omsl>_}qziiZD^md2DNklyNbRt^dTco?K4R{}<4-x5|OGJyJhIlVpEX2`hDih&P z47c~i)CzeT#^Y%Kg)i)TVmk5$GAaWQ7Fcn^TgVX+4qtN;hq`Q>Dw!&AHgN3)zrAMZ@!-z9PakS0Gzv5f^}8Imwun6B_eTc&H)C*#!{V$0%=F*NPj z3yRM_d~fR_b}|g<6a$T5xnuE%?ZrgHFlng9o+>69sxf15h;2N4-@U~|gS{KR;xN7QfYdF-&Gqz?6(*N*89*VW&wQa@$cziY}akL-|A z7A4Db)>!-9=iMpGQZdn>YFdj+D`R*yS_%y*K#>b02+-p?hV)d>h*h{}Q{iDR8b}3) zrQwIak;9+ef_ z{kKQ!b{j_hZjZL%QT~1L=+~K9s9%rKumx|lP~MDnE+3=X{NcEMFLc4izNPn!N?Bf* z#G6QQMgrC*V;xx1P}NaW%PFSN+Y67$XZQE$_Q?V9Y~ldB@$R zc0qbuuhBd*J!0uV@BQiRy(4_f(qp~1El&lxeCo?s8U|mFxEGW!OYc@5dF&nk0sA}t7wl8Zr<(Vk)FWNnd@uXQIO@@i zS?3;Io;rsCWh{l8J$25<-IS!*T)MarkeW8MX@2>g=^bi&dt;h&(nFiG(-(X^BE6)k z?=rS*Q+#976TB1BrwKl?eVp%JJcQnScY2|Bdio6SIN!DO4&LkO1x?S?GTS^;J;~QM zAD6z@KE%f$6q`-p+V*{G@_e&}%j}wL>pjVUfM7ljW%Tedg!>L;tKIyA)9&Ik?h&aE2WkWo85RQ3K;c@>M}Ri*mq z4*w)Y7aakP+kfdzsb$1cs#Dg_x_qibiu>u>;#%5;*>0Xcg^87F&*JxWkLKbmymerl z2PZv(_+oG_w6YFMUKhkSL9i9v0ptMOe&Ac+rzGd~TsLJM*7Y>M9^jC>6o2^d4vauY z7FOa=#VD8P7D`Sz&7@n0C3m342yn`&h7#b6Kn=>(0H@p?#1|_lgsVLR{-*D@_1gv^ z2YG7Qz>){bYNZ~$C!VSb=akdD=tJgpub$Yc6XH@UoiD+8Gk9M!qe&mu-h+GHDMk08 zL)IiC!)gP8?^OO6uU$&p<_6uM9BFDDW_IHal4d1MMPEl648M-F&wXk7tA2` zw_Y7D;F33@XjGx`^b+N0bp4Z<4omz*TxSorkaO~EWEB$O&n?~grWwv}5?L*g>jKf3 zXd@k>B@PBMU}gb&TrcrUx}&v5+k$MZIoO;+<3KdKaKp(+d#2PZBA!rK^g|~7l6(wO zoQM<^+6mKSE6IfmINQ%w303{su6vD$2)s$eg>3#XVCqUS0MXh>$3Tnp*S@XgpLvoI z9xPE<>;o4n|G=sAHvj`S#6k>p0n4bO!og&=T7-Rhv}d!(ORP-H0BgaC%Ona*d;`$l zLq=u$*GWW5%pfA-vxpA46ad%Nm_K}`C*I-4D^IusSxn+myupNiSTIY(WtrhXJlAAm zU;Ge1uCz-f&ajp$&>vf22@cU_sg-S(mPBL}p%-C$E?U^zlGxe&-mk`(5C2o|Z7Z@` zE8g~I^$XCO@4?23P48ejzR-JxOzH|X)ezA{={&2V3d@`O&l_O3+XoK5S(qdrI*2C8 zyLkTeg}yW}@H5D?f2;2qo3l)7`Bl`)IW>WuP=Cf`EK5YC<+hbdAEo7%l{vMnf*mU( zfmto@y2Br`^~w6N|H{SXRxj2NzEjN5@ATV4*mwx}#FPIWdY4A_vZy87%+>#=_YBvT z56ortubB=1r^gK~!RU|M=-#m1KgF&mVUjAD4H=p?DYci>u%=0MW}v+>*%6i&a+b}T zQb!46YZ~9{DV?9Z*2$-)!2FpMFyxXNbNKgq|MnPZ>S1kjHaW}fzb7lF#$55eK1zcf za`XM~^`5Sj<&Gotkg_oQCx3Ei(lDQBmn;mGf!UpbR4J+HjF@@-ZzzZI!d_=XiC0x0 z4ei&q$%f{fNIM&^wk>q~OUE-6t3|s=$84CkTs-hXJ`LCZRcGm6r6zSW=lq~|2~!JB z6>co7&hu>fL629}JI!ZX^u+e}pkHPk*6he++UVFPG~_DlM-p5MYB z@|7rGxnJjKl*^|i?*Sfz!nKX(*dE|DCJ@^6}Ttk9uaV-%{cnIMe=Wmxc(RE9*cW(6qYk5_z>C)mCyv-=o~x{BRsEP z)_+pvsN*0Se(Yi!nqgUfJP;);KYF5n(seCsx>xBl742u+R*c?7C)K`n`7PDfr>i%y zS?v?!)%xm9vE@_B)n~M~6MeS6Bb(yZ4~oF#8wQ1p!sq=V4s+^NeT(_cRXy3JePy=& zMZchK^<4f%@1P~0L2Rr;6$`;W3*wCWhlY9lxO$6Od`&-?Z~+di%Zibo|?*g|=t|2WKdKO>TuiIQ)r^xpphSia7)a2*;VT5c*UurNC z#V|X%ED=ag+5n^mzp(K~M5!@K^2w4{NzVG1@=cQOlKdHq-z>)8>A^<_1S~WelhE@* zg!v+0AtFN5Y-B{d0!68H#;|%?AEE|vTUG+YLab8D!p`Q3;bAf6Ox@^h`&)?UW8D^N zdOPdA)hMxDe6@KUGGiY~%5>D}YM0J66>|bbR&bexr8ReZUNDTvz|xvQp5qZl)QujP z$TpsDyBfu9{*aSAmA#DQ8%|;X{MkXq+`s_%AdmePV@RMJ%wRt*pfIMs>iN@1qfCVj z7bDNu;acTvi)|8ip>-Q_J>pNgGxo5y;~r04PHuQ&_W9XZ6I`tNQbuz_@sxu7#pjFdzFv!l`4Y$OxEkhAGxR3anP8a< zoKKf8{H2GKv_7ATu};@@-DyAUkT&_Opntn&IAi6oV`twQzp}5_q6}x-8+(|-Y@6dG zqIeP!ys!94+%Uc{b?^s%Jxk0h8`ic8$dt+tZ$AG|BKo&t-C{H}((142&VvoBW}grd zH`k9c+N)d5y`zkjg8Q$OZ7QnZHV1KIl#&9hEuGiMAW}eNq=IJ82)H%h}Zo{#0WTt zx9DFd!hboCEqGzE1@cppJCIr&pS+vsEJU-3CwXYv6Gx-gBj%$v1R{pw^B_VMQrxI5 zz7h7?(t&((heUQ8=`Rd9kbQw%_)o|cTMuQ1idxb*fZF?z`EWN|ictmM;lCTqnAE}A zfoNfcssf0aIB zgpxzlcj~5Nq|vF%%$ll2R^vao{huM)|LRanE82&e7sm~)=m?Y&O)#0-?Q9OLwW?m5 zBiv^j`cNYpSZ7z&o~YFw+PAipy^VB(3Cd2ba1 zba(ga>4oay+}i8us`tV8KuBHAK3IFQR{z%MabQfN(VanU%8qPSYU{G~rs?i()%U`} ztm9~S+(V72UBAFk)8|4}%yF~>#xES@frNYt@FV<^C9eiv!Vm9R$kzkA^nZ*6X))m^I5)+ZA12`PkYn0bTd*vNj3N1XAD!j zm|xsy#Dzaqeg6La_or>?ZEEF4&$f?cZ)`fhM9nyV|GJB?xZJng*l=6b*bwK_&gYo_Toxl5cA3vwNRz|GKv2iNbE? z)p8@nwSP&6Bia@$hyNsPnWfLGig-P{e!qK@oK#+q{&wiTf8Af_pBlZ}Z}Sao_;F)=WFLdRq}jwuJfjg&z5I2 zK#MtVP_i~!v%}9Zuyy9$vyDmU4nI5F*oal?H&q&;syV#MIOSrWmm{jZktJWkxpi3f z8;=KZ%KbqcWhXC`hjo1mvZZxc*ZYGwucvXcU^!NrwY%X!4~LL1J!&`43v-O|s`{$= z#mAuo%-J8pj#569>|7DJAHUNqcxBm?e&haDz0S$rz`=T+RkeyAdTPQy=XwJN<*UKF z7PdB=FYji=>)<3-ghy30uD zys)aKf*TjjoHcL$;-dMb6?5;yh34lA&}w-JXRL!;h)CjSgem5aiD(;*BBJ#nRNWkM z-hCkE6zPt-nOVZt1(TQ(-ykA-|CI6z#0)EI&|S>Gqfzl3Qbi2)Hu3}ky-6H|2*4BP z)4LJjo=L4L=)yc!%|(_-VSXTgU0e4=EIAPl#uiY)PI`!-FYo8rexmyGBjRp3|nT!{!@Hk3=}Nznt{XH~(B~ zEO2f2Hx!=qFLhLwZ}%TU+hL%--S2_R3K&^$bZa4Xu~SAUy>E&gH)7m3VM*KlFS%c_ z&I`Bu55q9~%YsAxO<2}FBivoL`(G){{x(z{Y*V^U7=bz|hXoy#y48aEt7wzwF;;3p z+>+QVoO^CxVmt}6U7mk0GxBWe8c#o$G0>(~dSgOutZ2YOf*#2J7)h*N&RoHr5{pn3XT zkceJef;i=w$gS34#dUHJ7uN@IaeWY{JQrCv_) z&Iog7uYiBb6%;z+pdna#&;t%Kd(?(X4^kdHugL(OLj%q_tn1GNamq{aWe3a4gE-|} zV9EmnB31x)=|D~o%|Tqe(;!ZHXSSKeVfm*S#sH`P?LnOWuLN<*6_ji^7^)ROdXzQp zapwl3w0%-5-^p!+t>$pA@Q$y`{B?s-U~bqD(#CZYa_dO^_{vy+=HYxaehh-V5a;YX z1UR+9itvk;ayIIz9~j`fnNegy&`yjb6!M9V*T*1qKhga3dfB%NfA3Qd@lZIdzzC3Q}CNAM5ax{8RhbE4ojyc;U!{NjjRf1mvPnO&S4;;Mg&$xdFxD7|F>Hh_D z*m+x``kfi-g%QVi#!epeozaSqYsKfZ;v6{-9K3#cE55lEf8vk4y>jf24$2qxf4Z3H z3c2ykS??{j6?e4adEgTeQlPI!%L5$CvLi}-=vA%!KMMX3~8_Oq%H6Q*>OPnzJM%iNBmsY6*2h)FXE4~i=A^gT5hcK8!t>jJS#r?L#n5eKo zAXc#b&1cV{|6Sb5nOg=14&LqIR{YPc`0x7;TfzPV@=s9O<>Fe#=4vbdXqqTpQQD2S z|=9ai%=8dA#3UD#_#M~&$ ztrUm@S5Y22cme$1)=ECjvtX++SdHeInlYoZXJQ!)R?n1`dY;;5+#KP;t%Mo^6OcoC zXqby3y-`3mj>i!5tT)0|_6o`itR@gSn>zHzCJm7-7ve4;^(GET{x&(n|B{$*HCu4K z%i8A)V@f(QC@l}Nz@>q|&XTkJVw-O1@$!aQhwzF+ z@&0LqBpHPgjgVv#kq3qoHzBDdvO&dw-9)_mH4=|gz6Ar^#D~!*CE~_EO4L!jFanE+ zbr>}xA_5nPh(K&O-ajKii`t9;ZGSKV*+fKurarjs(H^Ra@B(h1!8&r|w6|5&d zik6y`KS9K+qYV;1@%O}h^va3*@Cu0&@r%R{56C7Y!*kI{2_q0Mv6vokA&r(qJb~|+ zxF2m+;sHdIhyd8cWB{KLpHvhd5#iA63-N1--$}dzWW@{w+)2Hb;~- zy+6Ju^08r=`YuIW+K6ud+)qPdF#6`LQG2P?X2E`=cStpaZ_B>^ptho~|9D%|{#i(G zwJ)bD&a_1Vk5t2-l4suD2CFftj=*%L0tK>4SULMh3Cq%3%gaUDx6yJcHy21ThY0S?4oY7 zR~1d2{dUow*`Lm~73UPQYi&(eAUcY5t*v}dVRres!d2zniry}tT4bx(Q&A<5V`@cxHKU z!yw2#$~0xBQiK)1_bC-hr7}-hqAXI}SZ%yUS&ue$ow6O3rTphHh@LWYq?%AU1ymMgZ@YFH6 zyTQ6u;1b|e;8gP2;E4Uy*)h3OfO~+uf#-l{f!!)0FR9Mky|y}Uwg0AQ{=XUjyRNIw zn}XlDO8A4kTNV6GES)+B!IUAGIT5*g%BI3`YH2sPb)_5Fo>E)_JO}JH7njV!t$|a4 zdw_d@=YZ#kbAV;$@aK%quHE;6&%>>Nr~PhwOzsK48__uJUn9=fi1YR0e7!i|gmatk zw11O*LbntCO~S3tt`0ikufvNz4ePEv-!9H~iSu3J{1I{f2+sHW_u;Dj{wJcV^*m$= z&xDtZaMj%Tyx}fJEhi5ZZ4!Js0gCoXC!9YQ#3?@%#3?@+#3_%(H*6i&^>sEg^95sD zAAJ6z&4Z#}Xwe7w3*Zg-acq)pqLb$77mSDdaq;rZIYlKi7t|EhEKsWF&#ReNGOx;_ zGZ)XVz`E)i;`(;wJP|}>%ay|FwnxsGZ@ptogrw8EMy0WQFx<@t-!&${A^=nl7g?`>E*JVz7 z&$tT(Wy5>MkUrhD*rBn`<=sQE`m*eo)FT!7WuvVfD09v$7?K>|sH{!S#rAGyyHiFd zHOlOH$|#D_&yT*bzaTX-|K~AJ83R;xhxy+7#(BWAe=+h>K3d5oq!XRS9x>RtJ4@)} zf87wWi~KFD$$iW0^nr0RpZf!2Kj6{_##n7}{vvb4hsFc0|M-YJ7 z-*!&@Y(oCVe`}X&LsD|<{mUJ_a*cYJQVPvjn(5r>52*_g>q$rBE+a>WiI)=Il4T3I z6dq=4xo%`Pe7WWEEq7uAyAFNNeLm6|a;a-rU#GEqvWTNtni$ct-Tmd3EN61=a&zQg zjXtiS(q1v2c%!>(i@P1xf!1kFM?@@Fxs`q$kHy-pT|yZ`t#{=XrJs7K)@I99b0770 zRBV?FSR7fdbUfxxQj(@rKkAQ-UhUWFc30ajh1}+A3=l|*JOTeS3 z(yptz(_NKjYY0mcLg*wcfv_}$B`it^p@n7(2o4}h5RjHd!lJ`s=!9Sd5r_o6fE#Wj zDgr^Y(QzaQGB7$!f~bh7K~VU_!9+kBMflFCx}6j}|M%DPbe}r+z58Cb>b}=r(-bkz zw;zrFwb}qk;K@nZPlof|W^&!{sY$KGJx5TDJ)-c4W01Nj^zji#2WN1+u_A?L zgNEJ+|9KYvICzzXQ~tAsQ$B<}jB%Onb1a3zpeky@r{=XW-~#489-y zOEKzOIQm-5{T7a{hFLLF@y&u;vP(vf$V1w5Ml3In!k(yV}SbF(nVzS*i8s3)K zoz0+s{hxMchkEvOZ=cY`hR*8|Jq10@fuVahQ-}H!eMII_wP`3P&beJzTZe8WIYV|e zF%)VGKfwRp&N;@`v0!J|yM;};&}Y7zPI)l5m@~MO1*d1Gm9-2|dk>zyYL1Da9h`lF z{VSdhxAEApY3-wnnYPVY%_}DOCyem6;wjb5j2>sS7H zLv2fbT+@yb`5AaIu-B}kXVU}Se60i63SQ6bQwGfDCMs(E8V{G{H-drR&SC@IEX34_ zm@YG3jh78>T6x`ni$0d}U?1Pt z0T1@P$G&IoiNAhhvhU}!r)O>)?0_yn<0Ruz2z~GL_sRylDmjK|70GKy`;LqMbabZJ zl)a%}J36COXoA0z=G@^5ZbPFpFZ1K}0~Y=e1gWT+Ryo^3gi}7YX&uLNg)+&)DZke2 zX1S+%9fv$ddBS2q54JR??xE0_-p)l%^_uwPHs>AcToH4-b3l;Kn32nkn+))e5#L_8 zXZJP?{10$Egd2Q1xE<{fP1xW;a1FeRoV^L~$VLBl-op7ob>xCPs9c0WPh`Ltm@+^e zPim2i9`N6_fQFrQtM;JQFM z;4|!tp&0|5qgkMT*}!uJq*#iOvPnp)z1vNcf#^ zsIO%WciJD^h$wTBV;2!g`hfT%=7z+V@B~gow|It#g|uIZ2)PNenDRv8D_Bw>J}JkF z(I^&jJh@LImg2oTF-w$>a<&Ne!E-k#KN95dV8df@Iq@|-9;0Nq*u!CwOD7wN!;og; z^RgEogXoeY8lOt}kHl?QnIOJ}=Xc_IWDp9%wcV`246hS-kT*uR4xB~{J25^H(RF_> z@fvZAqIggeu3fM%kyYJ>x;CB&_W_!h;kjMnheY^uhzNH-OCE(Lz+tFKGbP;+B+~#E zvWakzBQ4x3%}XTyOx!K>(azpU2rm`|&u|lnh(}+b>m7VgN8BxPM?2#iZ=?)%o|Sk~ zEFJB9t@(W9apE|v1QL;#JbNT@U7b#xoED<`UVIUmj_h-YE%&I&wiPhC01Y=LHs@|_ zQz?#P1u9~e`TX!L_2L`^zu#u+#px7p>cx2`UgVv|uBbkSS{$`P^c(AJ@5pV3`G=S> z))~=-V~iT1H^(}k?;syAdWP_U!Rt{G_HL1LV6>}OhB7~I_T;(udrL?5>?Eo;Ih%%7 zKjCZ_*@e)P`wn756;C=FN3_lwMo_c!yz~9YzJp$&@;99i*Kd&z^(E|}Pp|d(CMJAe zoRY017lrdfBlb8Kwvhq%7TDJii&3rzpL1;GrRH$v`No;uLd(x74KK^g7qc!oFDKpE zDmPY1D!_blQ{Gp3aq~9K`)XeQp)SwR!1%l-p7HY<5k}n?uQ)YTtrvPd4A0axqUd+$ z1F-bp-<{pmIimF+&UYHG!50)KuB$%PbNxzHII1RJ{O|{Snj;!tbMgV>oomjrW^2?( zi=$v6E^JzCW>{SMr}IsC+WxvT2^NQ5cLw3?@O9@Lu--SE_n{>FiFq zH|JsZ{a$hOhI4&%zI|7Cnj3L^YL2$bk?+;A7eDof)=G7WI8|%ivO#YakfUvMm21hc zC5?LXYuAefwkl`edZ9a2tp(44nPtXnLvQKY zc^j;6s;4EX(fM9{aTg7rL;LG%4>8m}4N)A(q<)RG9dY?RJxS)aA|X$BeZt-qky@76-v$2U~ZwJRTq z!p7PZ^$&5nv3B|Y6K+itt*e?Nl47(!5pL_IT0Y>prrMWkckxg&Z3I%VznRunZLmfi z@4I&8FMoK4;aN*uZVqS8P}>&Bs^BlnGXus0Zqf2l9~$56?2(%gFBL5tg{P{WOO55W z%Y}~&+q`I#&(X1g@#P@h{Lk{0VOuT>(cHFpYPs4DpD$uF&4CxAuwij~!HKZ07=>(X zR4l_`d}MUHefj%W@zzPSiql$l*t}e=%JuI!l{+HWKSiosNDE9{;_8@L{lxO<*IuY=77H?&N_uTqnT@NiXZ{&pg#J0FA}&nAvLj z>MU1f%(OPcI*4xZT3gNgy^4sP6!*kyEt>5vv>Ry)7nX)+dX8$1jy3hW#j1F%Wy5Dq zJ%ewu<16d?ukdm6V7%tFm-%;zKjXD->YJi#ORbr@MGS7K4T$OgXUVW9{Vf-*9eRGg zsV-`*5G}PQgPl*!^k-L1&A*;ztH5$kb-P07C^jPbU3klj=HAT&L;;!P*);1(Y{HrB z?^N}ESgA_9q>SoRd14k5@px8JrP>`PlTS=ls^2Rdw4^QO&hHdP<9}D-lEC`#P%n1; z^ji+h@%v@&p@NFn60`W&;#7hb*Wy5dSzKn}{-a<|m5MNfqH!y&RWPrxlRsGoMwQKP1U66oDG)!cY1OV- zZw5AJWmZot#A1cZojlr?V0`s8zKr+In%PDcc*=&JGQD3>l@aASc5&8Efzm8nrJ8he>{`j)O{{`ytvvwsRqNI=$9cANIsQ>9r-^+Scq`bPeiL6=V>*Bj z;Be1t29R6+-^8y%nq30c$HZ|Eer6W16b4r8@b8qqEeWLhn4@Ys^Yhx3>OY`w*PAx~ zb!g)~KOdFM&aC=(fmqvG8`IKEK;3-2!1(r-)w{mvmZ-J07y5%@LZa5H?GpcAWeB!* z_g2|b4_1B`4nL{1d)xOf-|ldaf-TuPTIMr}S~tgiL+!rlqB2p7u}|^eEzTxtUG3xi zqeNV5twYOU{%q-wxh?Jb4O^1g8Qm*RwbqjS{@jM#mIjyg7A693n*;EyU4|cbPw^C*A7N)HuoypH_JI4HC}B_1($&vGy_2*x zuF#1zZLCdHBs#J}4|dUBaX1!Z+sW`yiyqoATX0XZ>5dCJ^x}|(bN5Qv!YPkRsk2Y{ z2NrI)w{Xe>nBJI|>HiiBhdij1cevTYB@3qq869tyXIePrKd0R+kLpy%DW7KHjNn2G z?}zY}ot^6((84hbHv+J5%BwA$a&MQL-Dg-h<>M`!?k8DzKZLJL>Uy&Wi!7WTlz4BJ zZ?$mB&sew-K?|omxBJcR7g>0a78YT2H7~P_wplpk<1qqThT!jCMR@=5$NE;E2d7S7v^w@GoNlGk#4)kq5^nKxTF zVBv;*&@FNcr~I0QGlEgsb@nOmWZ{&1BYXm4L<m1O+N(-lakA+kIfrT3Z_-=OZ z^>IIb=-$5Ccs)1?GCo?bsjn!9(Vio3ZvF=DKzltP<P(B<}*a{4Dcx2!=3TbUN(3i zG>0s_IK6Z+uKbHyhHQYGWvw3-l2(jqpP=liMj*pwm4NOCw_$DCAP$Y z0@D1NkZ~psG9~`Qs8lmFDf*nfCfh%qIR~jxh*WoVrhI=h~0P1am|{G@hz84}zDF zBZ3=<;2R}AEAc3h3HzRic$_1`-)jcpJhP6Y%2kG$; z+|WTD5gt5DL;#zKu=qDAKSYH6YRRul?1eFr?ne?K-$48myOW710gjDUsVR7<-P$^t8XkVw%JL z6GYg5o`_U^N<=J=5l5=Z1tMZU9wWBvEM83z|HmA`5xJmJ4Fgu3OGE?^mUxYbuCEY3A_DF!kwZP-O$3N=KU-p+#63W|J4l2(y|c-i5>I&04H!3Axgn0i*_M(& zZJ<~=U2DzyR1RvqE0K7J2=h-RRuGZfKTG5c!FH#r^dR=b5~t+HfQ(NS5%F<$HSuUj}5rD~Skr4-panh?uP^Ul32?RT%LbyuKoSi>31P2Dm{?axqUr z3`OM(ZAx$}h|PvdKtn{oO5!CVw$r9!S%c<1B+e!xv=x$<5c^|S9C5U&Y?J05Oty^d zAR^VAj4?Hnh;|IN#4i<57SNir^UEVgXIL4~+OeLjBu8;QA+dxA^9@Ag&Kp4bzmtem zA0Q&tpAwPk<3yy|jbW1Yq$3gby+p=@?L>IA zn}}jKKtzTdljbL-`8gtr=aMw9-y0nDVkNN$ij4?=J|rSS2Z*R|N4blif-h)*;;JUX zVf_ps%wvhj@nj-$JV%<}ON9L=B;PF2*~fHOpXh`;Vlz}oVsll=lyXjYnb5I)kZRi( zV$n>kb$4b2&C$KhCW7Y?(XB0%e38UQhu@Juby7{18i)dq)^Z+gNM8{6N z8zn^?p(-bd!&T)B@m^K=jrch}=f=#`H5q4*5>H@SM?}f=lDxmiCTHOGFFHBTmGI7~(yuQUWw`OyWkO9XTfX7KyJ&+-joO_n_7# zh`#zbIQ{>gh`PbYPWq>0n^+&{nuP{O#3lhgcGCX<`Gcq;#F=REL=O&rCRSs{M*P)$ z3S}K%G1zps0myJR1ADS^@-dW+A<+i`T6iZQ9rPlvuPXNv7hv!r9>cs-d_7kiHTmhb zn6#n5e#C?*F$ej9A)kCAMpR-l#>hnE*AOCj1>&5DbS_8FOP-4YOhgsFg!Cp}Lq~%6 zCO&|U2f-xHQA^7%Wtit!ob!q5ceND963jB=jCXd9ggc;sL@b>bmEstJ+bzZy!d-r` zxeeOO^3HA<#NX@YJG&!&?9c4dYwYUktYzOQH7Qa2cA-h-9sWDy zs%F1HRMPlB+uH^jD~DjocL(0uRTRz?FD}HAbYFkQO%|m!QMpiy3F7Syj&-m_^J~Fu z-{jv{UfevmZN;JU4uq+uIgY3L+eya*s-n;9_BgD&-@Sy}{g_W#n#-r*r!8i2>xMb9p#3XMCU|K4~#CWsM76e>TfobYq_e&QRVi;_#2ary_q{34HRa|@-B$0Ze68zItMH#|E?=9kd{eT&FNRqTZ5tXO>F-`; z?+>Erui60HMMWI=tJWoEnR|IS=#FzCC}lZ5dtM$c6plsOCwP-qxd<Qy;CvGd~Q*Yl`J8|R(Kn>g>pyb1GTV>izq+%m2H)Vws;%XvT0zSoxKtZ0~G z&r?zcKW9*E;&$9iJ8Z%r1LUbG#7!f8<4|Kj+){Gs{uxA`h{RJB{r@(uOjs7nR9Axoee zvVgAsp0Fm|9IQnFK0RyLr1yLubxG>!_K*Ia^)wDBRo_g{ZIhBdFWDD2>{9OAxl!VU zN3?-$`4MQO`PAdN8AYZF0gNL?#4v?`+E{zOHmmVc+^)v&87X>21oO2uY58tXwmo_I zypQI!9H}I?9A%rY)HJkb&0mn)FW|ySHrB%Jy-e#FQ-H!L%&~c>wgxdr_1PhU%g{P| zj_m1A5A+;*cfjp|E2EaBrkpN*8FiFNwENWLuA}VXsI;ZI_7wZPLGzZka@6G59caVs z9am@J`&aaiN=gArKOL>NgRSLK_F!LYqxZ)6%3TF}AwQr_vj6%f=L@@jaek>%Y3 zj-=04MR^8Q>-NtIk#_^lFvnNOs~iyuYD?oz6guw7EqwsmC({n>ZP{c+xX4@jz_GniHAQMv%?k0tDy?6)|0`Y81i~~mav*W? zVmi->dXH;2v`ifRw9=O;8n4!x^?k6SXsx?nQ8BCImbKk|i@cs}r3PQP8$&BQoR`;* z4o~U2C_N>6f7s#i2kbQswEf{|kC?Pt+pflmdQWJxV#Yn_x$~hs{II{FucxiIM_`e7 z^$9Jz<={bsJcAy{3rwGH$dsHrhedek@)KG!hZy0s4;23O+AG0H$U^hNsSLPTY2oqU zV^Ln_Wy3^<;Lk`{T76V$iX5sW8r#3^)2=HJt^TOm4H_uu) z-EXyU%6X8Pd719H;XA_P5x#Q3S!X~Gj$1fAuxfdroI23W%Z$J!y^d2J6a{!FSl?8FrJQ#%S>Uw!YSv5H}jG?XyFc8C=s8`u(vdB zn~JVaVdZfMmYu9lhFdsYc-%M33oM*+epF~)W{}oz^C|BbQzs|i(6o*t_Ce*G#efz* zXnvCgrP{(NzhvP|e%Qh(FK=CJ^-Xx?CJbe*fvWUvNeycWR|TkXX>!6ThA4^3vLlw%2__M#li0JRtSBJd=%fK1%; zH4BHz$VK^c;8P&S(+K53C@0qTq5g-!5l zpV$j%`~V8>XK86LvSFO~g?>GUCa^&oKLz7%sNV^azX(1;4A`uV8uwpRV{X@COkBVk zM2oGRJRbZico)h0g11MldS3F0;2(o0N%K_M_A%_XKv>?_ePkwXe2GM+dH{hfj6 z33H{vG>HL;vn4(PWB@CPccbf<_`bvw5`UAZqaI{$eUfX01pll;qaK`Cx~#!!Hf>8iLg(_$3!<89CaEPnq5arg|0IYFwFz#;fcsO zL$NDxkK`Qt=-(kH%AX#6N&{epL>?4E&Lds;5xQ{@2pk+FpMwYzhnwF9vC_6d^Pp0M zj>J*;P+9UJl8=|Ti1;7|Q{sFqoa-omDoHR71PLHz5HM!=F3*U-HHivZJtI^fNQcHT zqezjlvmX)JN^|(bo%&39IT3P>!t~GBkPr9A$brWto-}ss!{8hpz~iRqpy+{z2oF+; z@YpNOIcn3xAw;+vE-^>qSc&5$J_4kchZV#{IKPd!7)3$(Qk4G(yn%=Rq5uJYK}20J zw)Q`OT8yrYoZBv_HiE-G1LlEn#9Sggnnr{_%YgLfaU$GtKRhv&2=|;87zrS<{SP;9 zlpG>FGLAlh2M>a~3h)F+EJQy*M9vsH`VsI3+6QiwxLeA|RN2kyo zclg_uqWlx2fk$E+iK!9|6##I+*$E@~5|AEkBO*e3B(IXllNl)QCGmD5D&HsGd3*(vzwTa8%acDCrZ9t z;x>ugb4X1g#_kowp_&|cowyv0z}SRXgytLr15BF66OqbAM3l@*B8v1SY5t+agVOxC z9N~$}IYg#Fb*(>)L(6 zPkE1AsE~L};&F*5C00p1Bk=-|k+C%c-j9cR;%FqAh@!urh&aqA!rn@W8znwZEJm)q zAq_r|_^HGb600TtMnod?=0M~ox1$k@iO5y%Mq>kfo`?Y7khqgL*L)0MLd(I42Mk2l zaY!0`DzQT1F^R_|o|ITcL@u5oqANKk&3~52=LwqkXn}xNqst*K!N5vHPR*CNmKa2q zmE(pU{ze1D{5la+1~(oo*y|<}(br5O(gTU>iEzJ-xCU=jiOBk+M7ZOF2~&DWVwi|< znqcaYh#A31;LJn>xDitU;yH=$YvAKhpLF0T^i@R2Gcl|XcM~7Rf)9p=M67V%j^3F_ zeJzx~f|izuEVm&ii0>moi8Bmc?$=^Xl_(24BjcgBB;J;6^Tw6B|I^OazmKT_H6xDO zmzs-+5_d;NoT8+O9dBtVwyBARQk0{KrUKOLKG2F{(_4$-+qHITSS;ACMKo3SHcx5# z`*v+}WTUI`1|+m#kJd4=Nhw2MUs0@@Aqvx?I@mUPjk9vZwGXs&SR(%6A6kcI`R?b! z^}RSJN70Qv>A5(2Z=6W^kgH5$#D`j|mNE93OPy7*0b5NYyQ5_05~Ydb*1 zvE?K#KmExB`;@{d#mm>@*yZ%>{Th*`68wq8)5Rrx^nD`$rrDcYcnU_u|Dka zuJldNigyDv*wu!?I%f%`JWtbN!Jvq`Mkr`?t?()W=+CU79!%zJ0xzJvqe zIPYCyeZYZmEAN7UIJZyp2lI^;rC(OPytZHV>0ywG<6y&8Vcp%h{;F`ayRmCk*aaQhiSE|FKOSBcuIE{WLQy(AR538y zrDJCXfEjMQ?p@HQET#@-F)77MiSg}dhIjur;F(aqcl2uUc9}!wY^^6%$Y-4 z#kl-=tMg*&H);4uo@<^NW!FBOYTdNLd0b5so%U-Zg0q&(w=?%8*rD$rs;05RcQz5z z!{J!3UgNR99!~Hwyq6K)%f)Kd9sVxR{_uLZX&wqZy><5Cu-kh$?8zHqtSHlFld{um zW01u!V^iCq^LG7}a1Ud3*W*)@82cz+ZdnmdUD~h3#(DkTp{AyW(N*S}G}Aq-qLXNO zK>LgT&Dq1sRH(mjd(Y2S(qi|jID+c|uUbVDHD&!(ykksKO8-obdXpY62tc2LkE(IW z6c5YdhS$kO_{YSN1KPA;gEM&5P-*G|R#Gols>5RQbgAPPZwy9l_C@teNPBFj=3C_} z@pU{t^zE#-?;J5Z(8bsP@7+E0wa6F9JydoBFDulfk;c(HtHV%I5-7Q|H}5p)E1!nF-37SUss{P9gHoplqSfQ!DszK3)B9VcdCz?wQ!C2DN=ZSu@s{J* zolum^w=DZ}7X+9rB{lv;55MYB*JuAWe2lF`S)b%fHu62TtmCj7cncYy7qRI$(b1nO z!|PLZBjv4d6E9vq7A&x}ca&14NMr14YEaX}-q+W`D3%2Qdolw-jvD4>jz&ey);nY# ztLa8{))O;6(OLw1RC!j?fWHKPOZj57LshbGpm9q3Yri{u8_S|<+(zV@;q6Zo zS)*B5`*^25wgGR?)bthj|L`pDm9+OOr>;}dLX~ws8&$O@&lRXHtjiw^J5J>_WKwzP z>?axyMLH9@@~LLGwVpG5!Gb9>rsFW92dN0%bN`eFW>25i$@4(o!@X{6yC8J=h_+7+ zp0s1gQd9+#2<0S(K=U#+fS_Be<&=9cB$^k##KX;P82Y#hL-&oqdsyVBz5PoF1OEaLW0NXkMlVxfV|OBY2Rp%2!x8<+1eCxJ>t*8s$nZ zb07nAck?nWWLmfp0Sl*J<1L(WK0}z7=|0a*?Es?7QLRAuhuGZW!=qZR_%YAv7F|Bm zN|L^|MeLg&!T$RPgiQn5P*0NpKYz8Q}-PTY&qe{499n zqJOcD2s7i{=Vl(S41vKEctCfI?HuswiqI$LymAC#(0+eq-c=!;~HtiN!5d2O|$Ra^KdyBjr{4bD4(tZYEh3 z7?;+`gUaMvEIbBIJq=@|hugs`>l`RYZn4iM^|?jfq_#4?YEQ-c$Y)IJbWwQw&bUvH9SU6!rp-Ty%3c_&STc2>eBp2MrHiy~V*l z!QZwxpsL5nMGqSz6H{K%O2Tr$9p)ZeX-`ebR7R(Sw z)~d0g|9q{jw~7AWYPub#C`BSD& zpUlxm6rR*#OLIzM#hcN3+tB#a+Hbbd@E^5gHJE|UfQMj=Cw9l1Y9dOyir61-JBhbp zWI#jakzZlr?T8!N73B?y;HkvUST-Pf@gPhbfW<;$ra9Ev2Et!(?jbp2B3`6PgP(~^ zG};e6(usJkWP^2~E^{oToC~=0AXQ=~A|mA_HpTb|bfKU)_R;<_avv50iFaUKgg6Ax zvBb_O;3K>liW85Beyo3>{c!QEI}s7Ni-?rWl=z6m^%DOkaXWFiT-Y69j;)NqA(-y?0_41LcUQ zk2uyGv>C9munT|rx|TVXM>+i4C~+$=$OBFe(qJNDM#LliIU*k2uMzLTvL_Y@>^#^$;xt`h?MM?e$R&^Sp{28OI zG=K-&h;Z;O5f+aSvF30>avM4U+B4QsVUP10W_1D)5y!WR2DXuyDzOKU5y~VY%xRL( z56YWm5=$h$ByqPyZjYk}Ur78}qK;mKt2WJvh;SnDL37=e%RwEw|uF>ww8LfIxF zXRZ_BAD76f$Z{)j5mx9B@x&sGYQ#QDS7jS-im_#ZxDp)%aW(er5Z9n?Af}1yF)R@` z+;j~0qK;@?j?%o#$&q8Yah%wVpSAYRZLoY*72X4Cvh7v#9PXwu=4wu+SCkak+DFA8 zt>TmaYAMdG2?{npn%Zsk3tB|GZ3dOb#2E)1$4Jdj4i15wV&nY1&_frry=pRai}+dw z@bz<9{G8IOHZKlDtsIoFaaWA*@>x^stmsj#Em56fM>XE6LLWr6wxUh=otWWHUrL~n z?_ybQKuO8Ts3=PbY|M(?J9y5Zbxrr;3;edCphin-n3C!{eKyt?HlK&Z=tu3B#fQIY zV}mC#e47`(i^olsg~x&O<*0d?a=s*uaLTt?INk5IaLSKaIOWGJ9P&=eC5r(qge{yN za1L!=s(9<7*0nVEvnHVn7oiv+kPLGUwE1vy3h~}3`G#6A%yIV_@WuG`mvWvy@eY1% zBtL`uukiCo&Tqf)7+U-7K55ir9Ad*Zz(RGkRFrHW zxt|;ME{Sm01SukVCGrbMa^t-@ke^h52bE$e*ea1l z$_V^OjsUJptdAryfU!ihsf9q=GtT>j`Li?!vPfxuh`ftggybwKB1?p*bXl-?&O))W zSyU0ePBo5gNcBWVM^$~THNt%d+}pVR!6l8o z8^T_%+J5fEDEkWB?LBKq3dOe#_2JM=o7PBASJl_VWVa4oh@tn~I&|PXf+8|6^WfeB z3-1QOF$>qgk6Sq9xhNX*GTrl=hX|*fpEN``-4|Fm76V$?ZQ=Bw%EBo>BThHb zrv^{pmMst+ZS93VQ+d6XnJsWHcp>6E9!UG&0{OKkW_$)e3v7WPP}>Y{uT7unz8?5s z$URct1$?><*3su04)_IbAuO;FG5~CCF`Bqna(-|0gE$?d?-p1saq-BeKQU zP4!jA@ma>64p?@@F;W*Y>Uh$WSgXmg!|QYwrzG%5VYg-tF}!ajS^Ko^>z+^)392+)Jkt;(#78VYTbb z%$Kv`^R8BA{DY3&@3@AS?Cg~kz$)e`ak{g9kGd-~u#5hU8f39>btxH$36;F?@e%GQ zGcQ#^CMm3bR{N8r6ssSG{ag#De*p`pf3q!|a?Bnu2{kU$gGVHzhqO>-;q>5)g;Rdc z!YTjR!i@-sKfL;mq$x1Q?8T^#ZvyAw=azgQFkgJqP4C*|2i)q?I0hBsze=cncYUN9 zdg+l@ zX&I$?$Kygz?b64np_hB>M^tMYSl37YHKNR~59eifg}xo2r$pKSl*ulMYN2|C_hGf8 z?SNC{Ow>Dy@)3HRST{l+Dynkz-$VZzsk_x64*XR{BmQV=MgjK#$27N={{{RW3uhNG z)xuu`$F#TBKED>6YvKO|#}iAfJPut3=HC$>8k(a!ZKbz8uiIzOom%?j^DRQ7#^|e6 zk&vM`R|~{1cj_s~mlxI<+4IXj1J)(l+S^i8GY|8fqAJnW&M_W^Q6;_`tEV`4kmX>Z zjjQc9#3&rX7#coKe=qV5vJdxVg;J0$k%1T|OBZ5n#%qyPwKBcPBR;4pz6UDm^=x-Q#D#pyxtAkaD$>6#qDvgi@!z{c%xHZe~1-EAT!{F8| z=W%7$EI$lx&GH|?Em`1>g&)eUe=gMI4LQ90EfAMc{bSh?J3WkWQ(E?}L1k zg?|J7LM_L(P^wUQwblSfH=>cS=ZI7?ZhkJaaDKKI3eA|Kf2r1=HGT19oCh#v;RACY zd^_jW?KW|Ip1vF}U04;wzuvROiU%`vw|V#BeBAv?vkz$&|Gq8NwplkSgmVLmp};1p z#_GwArU;-|ELfmNW@3FpTNda~)ztr{6&Iew>qY==q(N6h%5KPn|;qwonauL;AmK1G74R z`2C3UUS6+NaPS`%0sM`9cfXDdY`#zb#PkUErEyy`G#D@!W~m|ZPyIxlrGkp)p|ywg zri}(RM-#ctQ8%k%FE{azO56k^vGJB9j9I0un+PVE{oC@-!@HmGv;qj z-oe=4GVZ_S;IHYwdxf!o(YXKB0LVX|6r-AZT#WzP%)7?;UovZ+V|>kXZu-Ocrh6HG zVYzA!!o#o4Yi7p%P4ijC|1HM-?+WNQ!uj9#82`1o@)6^0#@%-FHz);v!TzF2bTa8* zFz$cF^WWt+e>IbS+qnO)viv(H{U^=7u1sn(FS(y%(o28EynU8Q|Ey`jqxoy*$Jd$U zrazjIgI{64FcCK}`9Eyj@}N=dCo}RECjWPh`@bFGui|qf$K|{KakKIolm8vY{r3d2 z8y`wip%Ernt~`#q-nYv#euO!u!Dw;I5bo=n$fDiP^FWA=Z;bpNn%{{x=> zd>_;OEpx%ZbpGbsCz$T98MmKOufK`?WXw-9{a-WDFEKrt&V86Z<3XnHV_^D0x&N?n z|E8yLl}!JiGIs|vy=vTTH^0pX-e&s$m~sD$f$tc_^lj!jl-OS~HA|WPw~YJOii5W> z{eRK8|E|a`JDL6;Fovj)*xzZ~f3L&;kURI^oznkI0^EOpQK<>I{Xu5hc+23j0 zzjPSXftmi6iF}Ef{+daQVWz)k(#*{ClW}W8?}^OxYt#QeX8K3Xu&q>nU4)ur`)Sn_;+ zQ!mrB`{v9oxUX=kC%S*3*zmmU^nBFcD3;CC1$#c}|D{OHmLohDbHb##GdRuhSt(_PgBSmaqKT%(|t8l1ZG|l10 zy1vsEcM`)tHQprN?a$kbob$%1b&o$5WT-o~_F_Q&^W#hjTx=e13ag9UdQ9(`__VRk z@=T9lse5s8LhJSbGwW?o#)$E z3b^FC^VPL-JFD6AzpwV^5p~^W{8?sQEL5;9W%D2qF{(VQh(!(8NIAx)@og9 z-PqI5@*tgD?n`$ttIj*+VntoZ2Q{+Wv@hIgZeUi^A+vKs97WGkFE>@e*}xXnIfw4I zUCq2$p#-YBBLC$za#41T$Cqw}PFe(xFaGYl?9vUfSPy+>%7L3k)1liKV+o9L=2`4b z<~5#Yyh&1~vF>eeffQLXd)my|)8@{%-aWnG9&6$BsRgsG1=FXCSu=TE-G}GSbN4%X zcvmjYBEaK*awKGjLDfx*FgqX`%HQ5hDF-Tw@V-_Oh`$2NIf;fn=H#Pfrh&nf8ACtm~{W;A+ zpbYtD#%?DfVPl9x7@I(JF;)ap!lr91Ar3`JkbXF0PY`cmYzJ`!N=CCkuE`yBaF3Q* zMC9E(oxe?Sqp~~)(R?RkCy9{HYBEEeHIGBSh)9kVr06?poJ{t)Cm_$h z8o$u=40VsnBY`+sZN+XXs9ds`!q`aS-N+yDcE%PHi`3>!1^YP3s2(p85m1XJQ*$PL z4iVwq0g}51iTA-jaVBH?i6xAAiL)5{+Q{;l8TIUG)QSY;@J-^4jHTjAfjgM zMgb;_Wb7l2QOHrkc*b5Q_GDt!bW^-&dV!ZpsV4E>Ldm9!X6!T1U6*Zqf@k676#WEL zcC!fmBeyBH#h#>7HvWc~^)gT4Jv~Xj6mAu_uHz{|(*sZplsu%Qn<#il7pFthTOiUa zw{zkZ34_uxFI z{(y;()$=Q&eK7Bx`J+6r#Uw99iYblB%g+=!oYyaBU$K?yTdO6>-mQ79?-ob8^L^vQ z#&znjCKd+s?vdq^w3;XLDz_xH5rR*nj<@Z^V11Y~p4C;X3#*6tKcy{!eE1#XW7ey6~K{}5X zh1c+Gc{WEHPt?ELfxjQ>9*mkRp{GM{z~b8Bk8*JulUX-Ec{FNt8f5BJ$$c5*2FP*f zlG^+q4pMzn&q@A|`^gl3VDK;XmSA+Q>c!bs1Q-ej)TG)1>=yD%554^4TDb2GS?A|I z6-}TmJW4=cKbaCx;wO`SuB9!0tpxV}%E3`TnF3f5jz7w!=J2SWO!}*SGDV<_%9?x9 zcZ^U3{89ay3v#gE zPbLQk{bbS~_mfF~(oZIRZVdh?mzqGQpG^8U{bcyZ;2NvB*B-%6Kba!f?Qn`vJ1&ob%r{bce#`&V+l?U(M${Ny{x z!(KlN3h?h-#CK1t`@c|XxUgC~a0LjxQM4>W814AaNg>IY@;5FYv(8XBf* ziv8taG$%1Nle^Q0pf+M2pjgMiYYk-hQsiEc4?(8-Lc!ey`IKm%#S^(v^vL3Sc#!xc zi;v(9qDK!zJp&G@cODrbUX@qCFF9ZhFu3aNQ~~uC-DNY555OHgz~3mMKK>~&)8bXsha!=PHjN*O(WaR2bq@}&+L6}xQ`bHib>u$kR!MqaFTcSY6iQe11jWH`IEk@s@ zF_n0ju{_ehf~TvoiufL5exNRqi4FB(L|a}%+KF(8e=ewnE$}oL?XE(?q_TpaV1(j@gQR~{78!!J4!@` z-qiRGu?a1$Nwc^FnvbCjQE?<4o)kza??c>!K8%Qj4kjX@(<&+!V11H|7J7iAY%oA`(UeCnczxMh6jf zAWM^}?MUdk^FZ?n#_lE}92!t1)Tc7dej^bP?$q=&o>I66EqMNPbC@iG7&}G|Hsj5P zh#X%fo@6XIR1F}4c#5%P;%U5c5#L9nA%4Kva^i<50pdsK)rpAsIpP|O8pJ>26@%!- zqY1_HCkHKLu@Q*~1J9ri5YM6{h|oJU<`5r89Uz{=u%p>eA)*B4YVw1`M#f$tevAl- zpCCfwr;L3`JdX_CMK_4RfX>3~!7xKaj=E{gBSL?-#@WO_VR#`{s#6at!79kaH5%6| z6rJzj{oO}U(wg;QjqiYz-b+M0F`A*!1E86R)D=${qz7;Z@e5QjB9c)_MC;#1ynq7L zFI6hj zh(Dm+5%Ko=84(G(N<_8oj7ClNw-B$Qjod*uKccfGUc+Jv5h;J1h?LX(P3nkxPK-sL zO1zFPhlug&B(VN#6Od>cg!QaCSYtk$?!V-x5$8#((JHx%%98Y2*y z`3bZbBD$>GiCff(CuzEYXAct5 zGHFIk@$I15DBbMTEMCxflpKa|<|QJcPl>@;5lvLxM`=t2%~&MMBEnrB5$g?icCiea2oUdQrQO*fapaf1u0^dq*ABRq|pk}Fw~P6 zjp;ivhO;|}kE4|lF}joxW4W6xrkgm>pV1z9?R zE|Tn1xbn6`_ER+bxgvBTztOD=#uDEj(fTkDCZIA)=wTBOZ|7K0;;b(b868DLeu7cQ z6HpNM5|N%#P3~w_-Ss3w{|FJS{X5P6O*~oh-xmd&fSOW;bVF}u)pP?zg=n70w@Z(7 z6gREq$pL|*(Mi+n%2RMTkslOCCh-*gL8M(LYD$eZ*o5X|aq(r*o6ubp0MZk7&%@1~ z`3ItgERTy*geig-@UCq;O|yEKqUwhf@Gw)`R@1_KU8E?T#-ARttdh5u%J#gN_%3;? zd}Wr^K3;CRz*FD6Xg2L{Wg)CZEL`oAwltOU7At2L%v}?|U;aIBxo!+-2#=S%k@EvG zuQPpXS^YitV*QXmBvuylXL*^paXRnUK15la9P!=tIo4@~3l~+gq^P`y#Iosd`HhG-lh4ZFE3x;sy8$5i_<#PWfn2}_f2!=pEhiAes>~s zevbX($*%J^=C(AOl565eVs(6}%*ZpsSo z-7}a??_BH~@3^6%k1JbS?;Y(mv<9+gDk+%E1u1#g?Z(zJqovtkvz46ic^&Up#+WCU zY%i&MSZ+y_3tQasxsre47hKCEetugGC+wHU@5$29Ksl{m2a$|p9)h^HRr zH(NqoAzEZs=b_JhIpXTWJT7c?ZCe1QnpHNe;T{qWH(xE6Im*OqZvISoW&+k2qZ8j{>}pw$u5xoML4VIl95?(%jmGW9&_i?`le z^j+;yUy{|-Biq}iTz= z^95XAgJfI8@D;q6AE|Fx!RvK5yoi3^jQ&bOj%fr+AVR)_i0*2QCQ}JXVPf4Xp6Eu; zbezOaSXA?38eXa@Vx4r5ocKtDZ<*c}T1noLiMB3?u6i0M4B6UG)|n79x72=4v3H)HPl z9uZ-jCMKh3@YHB`vL`VUg-*=EFhWF}Wkk5AEoj=URQ9lXVlqbZjcP5Rm)8A|i3c_Q ziS&qXq7m$kDdcl>gHrGk5#X1^co-8*AG}}^vyng|N@+Q&4{dvXM(n3nCyIc!mMD`t zB4m@sK#dk6N-%<$f)y*`O_)N&(M^A>>wxAQ#+DKXU?NP+Md`K!5uuX^{c0i-x{U~Z zwI+W-w4$T}RsC#YSG-yf;f|^?MeHCVfmuX1ZhFzpKn#(ZB1dDM#=#ngY1{~!^YE5O zM7^K|B-)2PMnu9+6H#KcZbT9JG+xy>5rvh2Iq}_i)IkXjz)wLl6NEo6PO;MnAoUbKjbPn%Md9Y6l1 zm=8NXOl)1(HVS77Wz79-9Uq0kF1WV!V4czLz%MeIZ6XiTphy9(s~Tx;J@ql1H}1S(9TM?vgf8 z3R12cv28i6iFqw4BU-Q|;>)WV?QFngq({>!q-jCj2A|$>+F(Bs&}xvmXM<1Y;2UC` zR;TQtK}Oz`TEjQ0Ve#t-#Y*nOTS8=0XWehcfWtz9nk~sGT0(m@P_c}04s6L$3Z}OhxP{L!N?w-s zcJqhg!!5jD(4($LwV{()14YVKo~R3I?W7mCY~?Z0Yp(@AFRkT*c@{diPvgmk)+lZ* zx_)_?ShAHj@;UW`w($>qCz z9WA?joh|SBQmfweb=z|N@@+q+)*SM6v>x(xc6f4wPFcl0Pjh>>&Q_~)Q_S|Ilz=Uj zP+F~dy`5#s_^w83bp}-*`mE(K46_HH=4E{N6bY>nD-LOBeKb<27iU=DWBx4P5B5J0O|l z-m1|-q-BD>xRH?29F2Jzl|cg@-ljeuFBB(<2MBhJG<6@0#h|zGck#68|CrAl-L1VSXy<*o3==t`Wl$Q{6Ei-nZ@A{I?I4FN3 zJ%=w_^k2etcjbsftO(i-2g{Ws4#&k2I`42;EFn9K*tPrT4v$XN$yw<=l-YW@NZP}1 z44QgEYB5SZigaDsH`QY59zK9i5YOyEw=&q9?7T_*aSu;wH`SY`%@!w%ANTN1w|#P6 zYLWF)n$)6`lA7eS8=81p`=&lM%$|#;8I6`tm9dXEvq)~WNVoZPv7X#K{JqkgS!Bt~ z%un<7D6$uA&o3@Im!DZ=$_(^&5c8^eC*9 z24;=)o+;|%%JKScDRS_mmNGcu6;}lxAwQ zIOSFz{I0K~H=&WWO1O*j=9KcZDENnl1ymW=vsO1biSx2jvW{vrZd6qXjUy3gSSh04 zG%hY+wQ=LmvT0*fVpz;87me0&B^>oBszhqJ&RN%-mS@XP`?=ltfBc#^g(k<8m{*mb zm+_wBg^wz+XCF^@8#ftt@=PNJpE*CWRQILvduDjCh~n*LYgc02;EFS@HkXFAAk7?2@DgV4f62HfU?b0_B)wl7S@P}q?MnTjCm)^{uyJFq zzA4xhG(=Kf;&om+q;u`M)oJ#cT}IR;lE}_NmLvpIufGtz{+BQE{oK6+T`KkZol&_l zJJv2$UJspmaYpYkQ+O|6HrpnXe|k@7lS#kYz%Wl!E;Yi# zBE5n4PjB`Mhx{G$lgZy!gX)P+eUN^e*xGE^|f>Fy!IwrAiVHuftKU<07=NZN$Kl=vk&H+2L>~bJr-bq>)cb9Mn`X z?bT`Knm-nB@0*zE#pI_BT~zRDK|}*pxf_Lim}kb1xYS|xaemCDl2??fWsA&$I;V~2zBgiFPMGF`Z*1n1IDiUCC!gingr8bgZy zBto02JcE9s`4xQ%e?iprGo?s}^NrajERv#RoQ7O?LGB_>BuQU6 z%d%dq#ruG%dQjJ6Q%h~7U$LEeiQhlsi?4GIO8R56J-*qJwxyIe=cG#BsI<`L^3;%% z=jLylf2LHvfW`GH9Y*ohwIa|a#qeVy#U{PMAF2Oeo0O=>I#5U#X|CkHd15FtQyQ{f0D=Y8Z{AcDPB)ugI?;974DO3v$t?dIUoa!7r(Z#9~ zF$cd*=@NrlBc(2wpEN21cy-NYgtV!_=9HYeRtv{W<-()6x%hjf*`BT!Ecb3 zyKi1zt#^hvt9@DJ*Dr7So^sSs#HcXikLb?%)q z6JRuS?!~UzxRC{QAFONf%i1E?=M(Iq06`eAgFZ9am&*9m(GH zg)8Gixzk%y<#Q)HeqSSeBOPfDQ*uyi2#?C6;=(HliYvcifYasdh1pJ&>H6iVS4KGp zKq7rq4ISUScHM&2N)(fPt50X&kn6LK%e^Y;FZ|ND%6U6mCQc}=GwCzX?3JrMOSS8Z3rJ=nab4;<7 z`>GsOz7=@Yw&1gj6^?+Re3TVp+qzw521m&HP}+FI^gRbP`W zjn@T~Beyif_V>*CINVL|H0p)D7~BkpydG3sfFJnj=Ra(96C=d3k zpG*N(VFXq$HNZ7~GU>-)`OjaU?71Ha;g4P{bbVTx5@Y&F(rr7+bpOtzyTe-Q7CzBp$Xy`)x zS^~cQl>-NQ8ud~m$nldY06K=^uP^nJNnh?KQvw$I$)rE3$YS0UIi&vGJSm$ebwLxx zJXDz-kHYK?ikx22l(A>2ocX-+ATPZi4m=|@>S=ag>Z@#1rc zq4O|3L3gQy@dldkN)dgt)II$HG{!!f^*}hG4GqdaMO6U#4agaqd_UwXVm`dx+JJ^h zuiND88(4qhCmZ1<6b_uXU+PRbaOE8pBpGMl_FwcV_-j9qDA3(Uo`Iw1ojKi}tm*H6}L_|~Q<{_kv2oEn3 z=VC-8qK&nH6k!x93?-zm#!(t4XjFEHD$saHhQH;+MFcF+AS!O(K^E#9~S%5UsPy!}sTuk=s(OnWZ;QgDp5ob1ukHamhEuHL&B0hob zNn#OJK{b|WR5qxdL`jm27W5_&31NYFDwHzi$nzHL7otH>%8H1vzmJHV(GW*()c>* z;gQxa=sPwm5dq&o{2gOC#HH{@d>R7-@ew3|2zScKX7Fp0(H6cV-jDFmV9B35if*34 zGbN&Nl@k%r6GTL?U$a+ECPTiY>CNc6NFPT;K*|AQM07jJ;5gz=b!?{$y#Se5O}r1g zqN?m>%1L7=aMD;Q+QXW|qZ(U4b0MBF=JMv}k#pjM_=uGF0uoF_kv>9Pha$&2w0Rfo ziMvtjiF;6Yh}Bp?A=aRKLT74z6wjY#7gY2eiM6N;q(B5N;$BoLB638t401Pxhy)jD ze30}=m~y@s`W+jV?-jl8?c>9H&kTAndlyf3$d$7d>GA1 z)1M~3ghxO;fM?hqJP1RCf10IG0&|FnC{N>Hjl(q3Y=zuafNnEtJLhjK(15g#KN0beDeh?SGU&__f0_fIKDRDJDFFQb*+R(F81#P9+s zMNj9B)5O9BdYkmlO`eaMI?G*RwEghIPT7Jf%U5tF8RA7knZC0$FP_e!>5pR%Z-OY; zja9*&V&!Bhg_nwblO^peTBcZ)Bt`0aWn^Xu%X9iJ^<4_3LO%MjYIzmCXO}Dc7|)f< zZrPsG@^pEV?W(q3W%%)sd&JdHbD8W*87xnh`clFg|U29)i=jlGp)S4$_1#yAi!@7Um z^pbO&&rmFU`YOXWcXod9habMno*&SX81P~(^JF-0a}IIpl=b)Q`58{;83G%5H+(1g`YO zT37nw9Wmy*qLscl{P4y~UxH$vXpJ$i^jV=z!WvX^$x5FMrXx(J5*z@NgIYUFubr30 znW<7FPRd=GDs_^g9bPKFPR&$!_PWGwwv+wSl1`1g_n5e`NV0`nPO`P8O&Lg>y4b=} zPl#DXQm3G*I`WsH`16RTilpq|AgumVnT}|=?yz{pH$_rvecUuj;+=MD&*&L?M)~Xp z*78(&mCx#sah5=CxgN~${GJp8@5QpnEHUF=Jmlq~`Ch40`;o4Z+J-`c@=Rz?Yr1Gx zEM*T!Jb4^RwmLT~q&TNNqHZc|sX^>L)OD&45A<+lY7cL$cP2KP?!aG3f18)wj1j(3;(W0*3M;?8rc0M(_dzsM^-_19>FiRQJQg=6AeYmWmf_SdWIBta zUaI@s{bbU=gXZV2_y0u;($gpJe)`*3iJt{I_}KId2aIN4>ZK;Y|Fs-r9ovH0l)t{0 zcD9Q?-t**tYN_uvOX|h3s5xu4)DB;Qi-+b&-SuxE*$<1FIa2JPK}c~GLZBA_`n3!C zH4CRE)305`B7u}J(w~Jq3-T?R9F6-%n4ThZu2d|2YZ4F7#f!_<`k;Bz(1071xqlX8 zRum$gmFh$6fmr|%I~`Q`^jXqjh2s8)rDXRPq)TD!8WCNh8C@IwC;@G;&^f9YVlRx- z#NL<)XuOG-iawRtM|(ZUMyF3Q;(A@vE5DVHq;B%i4$9YL-xmfYg5y(e)|GD1Vf7;R z$2dyNQJ*{|b|hrt7_v{pU_s2q>j7~fPF54UYg;wYODHosjg(A8At+lguzy&y-$+CP zcPo0#M5qc;1Wg+ML<)FNeog`Gg#xDlmG=xpR7x`J*J<`gH95)%dz54maj5np(HS*{ zGDyPGTtL`+0ooK3t_d-K4f zp*A6*wXP?2!_4Wh&NzbOhm%X^div(@tQHgmVz;df`x?Qs1)f7 zrA<R}eV}p#J4&2^#0QIj zMSw}9FKQe1l--ON$&sb}vO|t|YLPT3El}zIwpX61d@E*IZAzCBr%E$zc~K9JdoZ;( zEw5MAE~|YcH}9m!XZCihk6bJr;UQ%fUFK@vLshGN59hD;xyAV@wSDM^PI_Q@o zE;e0HD))`E{4RN6Ww~#>l_i(^CRj~*WsWX+3$X=|TT)T-N=b%O-o)b#t(M?XKHbpS zg9hO5m1a6CE;X~(2wkK%DOs8)CFjmt?~|;owWF?L9!q{@o^*fi{ri2)8fsp6|A1KM zEBD{(le@oC;3|?P>sxt1cFj=d9a!SOe~_@QkUAPKEUYWF&%HqmT_N3hTdGq}>--}y zFf>NBGC9e~)*~Pajq<$!^%#~QODHDrUO1B2ZJKH_E+2^P}8vC6#1x5}<7mh7vekGO;8kel)ZzDK~Hv8(SncuafRWG~ce0dIQ~8OWS3W z6jgs>wX_H|xo5`w>s?vPMjSMu6EgR#!5m@8mhv^eiH>nbe&Qw9T5n@)W3Ajh=bN?V z+m&s&&UthWex2_jN1r4-3``X$mxF7nT{UgnR!PB1ZC)V4*GZY~*DE&r`eFu|({iL@ z4ZJS3cWH_^S&kWHQib6p2h%Gg{2f^_%)1cmSh2)@b2IJNQNYifT?V_UaQQosRXl>f zyy8ahX0U(76Zku%Vw1glbJp24+F^ZzGp9~o!0kFrq7FL7i$AQB`q^i@N`7%@FaPYh z%Duj<>cH$xwI+}5LOU7x-va8(>TeWMIOiTQbiI_+&elYYDy%8m)j>P}3kiF+)$1i| z$J9T*=&Nu%ncMN?)4tnFlDs`IX>r2fU;!HgPKBxWu9tFoyIC&T$;G=k{V`LdZIp(L z9=Y4FX<&nXg8`d$lu1JsOYMJY5Nr(_J($1^Y~gYRnEk0*2#aaFJN}}rEhlGG3|6; z`g&JexewPgpX^$TguHKbf9w58*IzudQMwV;>CYRbeu+i;u8ne_C@uX<@2z#C$l9KG6At9;1g!B(MA#Wrz0nbt zSd6(=O>U3rPBvsrG?ZXdA&-R|r^z&5ohOd$kY-|gApI$6lKyjKtgl%6l=MvK&%0zO zaCrD1&(<#zMaw{gj&iJAWNoZ}=xJ$_Q9M6NGK zp1Zfvv<0({S|Vm0$BCGAoF!rgD$(p=IEsll1{oq^Iz$zRW+QZ@g%02k)<|pjG~0NZ zh#BX5M7Y01M0mUTs1$Uxzeht)(l+)ISVgT%YEUxI)~s%aEapvF{?4%+u3 zLa+Q11pKcc8PlVyL}VxdPldwkN`$)yiO7($e3^xrC{~yy+q94KPFDXM2?t` ziJYca);YUj+X01537iNYG~_r=tWw3a=86nG(L2=q|*hoo=Qg zVvQLgkP$(i#!h{QDHoQMRhCr-mmm3S{6DX|zOLY$5|h{|D} zhzx*kN*T2=%JCQ?p6LW4N+Mrl1xU-1wM3-+72Ht27A|)aMT81R|ONk5c+C(hF`xkK*nkDgWJpVt@%?zZ7 zh-ddD5dnNd#G56H1RugPBtEPyLuP5qkUjB!M)oMh>BMp@O%oR)LgHxTn1~WRNJNPq zC!*x85i4-!E+R_Jag@e5jaCt`Pr9-H*XV~5Q1V}(|DYeKyGDdeKMX^pA95jPpz$P3 zMk^#v!G27rV(<53b{(U{?n5{`hWgNC@Jzg%%*Tj=7xBKLKsmmL+ZxzNi7_IWPKs3u zUJvoJboJoaQE@9oJ$*Htr2K}RsH&H=AF<06I1d(G|4O}7@Y9d0uG-9_#DLNG<+V65 zdvtrg^%&;C1OAbpz`6|(TSc;5Y<*?NZa581$n7?=}V(wj(JV_ZH_^7b?il$&tcH{EBe>LPRLR>O+E?UiUW(- z1P>Mbb?igaCmv0jwkz%%#Makw0^r;FBd<&6C8d1nQ#~q2TJ2W0p~3qh)2n+G5o;Ff zi72pZL@ahtxnVZX0*UZXLDPuPlXwG05@L6BN5mvFQlbN6E)k7q2QdSk@ym3RiSC7% zim?%-AJ9;~0Rg=v+tBe65n%@;juMnWM1ttIJSm}N8fjgM-0dYIVNGNY_kSYZh*<{F ziV=hK@=z>(=wQ(sV;iv#a!N#iO+B$3fPDH>MG+071x)&rY0o~J1(fT$P z_5<}Ic(K8zLnl!x7T%B6p92pjb!~rtkg~QvSns#CubeCm^Q1T1_&BjO%M>XrH)F;B zEm5%EfD@!a;=VF{*LCko9rd*AvPSUZJY4jBx2+e*q90U_5;NY#3Cjhd$9s|;6ZV4l zq-bEld(xngvdp()Osi0YNml2J=L75i@Se0;3Mwnf4lv+d?O=JQyt4ZF&C+?Dt<0Mp zpKJ~Y99uGB))OTkmBh@d@{PlyLVJFC7HjRKGqwhbMSsE+E=Y{{AL-f1iunWPzdAom z!Wq8Ym^_9R_g5~4OMxQfB$iJCMe|8%P|zaf;}U~&Oao5}s<)kzGI?Z~BPPIr6aBi1 z(jJ}iSn^`uT~>XoPRuwh-Kh_h4ZGv&-#RVfr!ND=xeu_Yy+8zgD0Sx#ihdtT>B!d1 z50$r)XFim+CzZ)x#XPmtf?z zBR8A+3(G~xa(l$k_QS1C);+2*UU`SIJ24S(g=sHbXQwe+pPKd=2Jic|4(HCBS?Z@v zLEacA_b^YAGux>h3aydpZ72sXc#U#(%c1&`i_$^*$~o;j=?`33o8-U(jM;21jCyf~ zk&YeKBsx<>`ZxV#();&hq<5g@sh8?M3-zu|4i^QF$ce&|XR-!F!;+lN6*WHeyYs}4 zKD76@MEn&T@i_s-1Q>c@xCW++;a8+5`5^HXv|Naw?}66(wC^RiWEcqt<_Pi9RVl_@ zf_qxQ!+5Nmqh3x#vR)u!VBJf^%-}Fc?v84Fo9vOKPl<5u3F@UV6J4%mk)x3g+EBkhi|y2Ly+ee@t3>2DO#Jwxw4FP| z)@zbYe-v#OuflYIe~LI0r`MJ_mHR}|w3eInbgHsm`|9gVrHrq>M0z~Vl4oHl3DRNl z;dM*}@{NoYh*gj1BG$&sKOG^jc}&Kas2RO_DX01OubnS9=odOFeC6UsE)S%xfXjpU z@5K==->iS;%+T1mB1n>J_(P&mlAnjZSeDnKy>XpP{YRQk9-Y;v*@v|glefo^_bxE$ zkk3-Sx;A*3bipLo<@UdP$DRX~Lk9&NTN-<==$5<}Ys-@O55ei8S|?AK^pG{V#ettT zf5>{Ea?KUVl8sfThpf3@@G!Fbq4K55)a*?$n`-;yMVl*p3mwdclv>W^U%&k1k2&8R zkb60^mohK21}Mu6s4>bZqzxMAQh{ilPx? z91#z;gop=9LDB&51<4qBz9ZT(WTJnkm!}Ct_%9+Nyu(BciEk6(KiL3wL_;PbTxFjj z1@G&%WI;m|5gzEo5_$N7h^l@SKgcUba)a0qEboyl>L(%m9Wf(BPSMj(ubY+81)o44 zf(^e#B)yCun8d!ZNjSoECRhYn;F7+C&&D_tF3Jb%EqsHx3$~KUq--VMj;cOI*-8%R zYf?wuK(TNge#anA{AiJX+EP|NE659#M`%;dED>5~h?aX~IF#jfllZWMJTxWT8Z|Tm z6++64!Pg`#Ii}!jv2A+95OYoV6y_b8ACn(8^jx7$jEI!)k&YIN{gHCle&LSu#RCVW zH*YDnC=0S%3a#3mwJ^WfTC-?oVIi%e`OZ^dYEZ=p%3kzoVP}yTCEs~NyP-G7#TAv+ ztho~IsLKs#PF`NT9A8%9yT#txI-{xP^9yABTnNIHG8>R&Yx^PXUFuI<=UZ*guFf-x z&z~Ph|KEBZ6qt934QJ}9G)fNXT@r@SL!Xr>gCZr&10zIwjC?bGa7FKQTLYExR>GR) zh^DnDh*;&3>#e>+U7Uq+y4FxyuPQQ4 z@J+Cg8p=%1l>mpmVKr97)m7Pv4vUgRh9q$q^{WRp@xh8l=j_#x;z||8v2vF|&zD7D z9@EVcH&pt;ka4Ui(HXYl>|*?`)Vv3hlb41y?+hiAWEtFs4Ud0jrqklj>N zha<{kV-D=uz!m-L3fA}@!l37%);iUf{*>8e)}}f-FBZ~IGQ0|=x*Z01`Bfl|7qkG< zKKBhY7B5-xLuEa_bJ029ydaz8N9oI;&AGwORLrC1AJDhq}2Uoc4>}yc``;#+UlitlzJU&iiJGp%uRd5ii@@Z7+*RT8fa-frvNaNCVL)Y{fq+gg`e3g?#eI<&o**~c^`FQ<>2##QK&WgoXE(?-~MW%CHz zTw9B`m$6O@k%XXmE2fC11i3@>_TuCR~c`xL(%p!Y!gD=c+ZZX4ln%J8tTgPVKyBuG=j*1DZ-QOyOgy*qlo|!#a z*+^St+V^O&r{UGg^2%6D6g;_ur*&xD7?T?p78Pax{gO3}23w@fRWNi3Rd4lwr%*xB z*%{NJ4I<5ocJ%ei7i(UvtjpCM3;(Hq{bJ?0O8Py8**4o!10KV8%sps#>xIHNXMk6( zyo?PMlS{9)vKI=oFl?aTZhTJ5>1*IA7@9>sTAcRz#R2qlAIv_a>5-qi*?gs&b@wcs z_Iz%?=1#?*)D%8yt2w)3W3H|dYb=Yl7OUGl%(lJo91Rl=>OeOc^(WS#Ug+$$lk4z7 zGh8l7@NOyg)>Qj$!ao^ED`~3=TMFAM1G)cXiH_RV$Pb!n=gH>Ga9*jcLbY*UyZ*=X z63w6%mh4Lzs&~c}=^9E76|VfWczfORxzefev4u;zE74Fex7C^L8BJS@qifW}>AcCs z8QMMRZFSLJy`49=cLjP)c71b%tG(7fBk}(bDER>=LQ&4@0D>?A@jMKv0Zmy>cEeH8 zm?S5-8>z7<6K~9ssp2GpbcOE=A6j)K+^WtQHqOV$)it8|{rTLEFAIMzSgTU78Tj1W zbEeGZRHMT8Vuy5iWELxB)}jnK6edmFDUP(yFXLlXQ^OV)pDacs%T~8#a9l)_a7EbU zAGq!Ge2!Pq;DzziK52-ZKhBubYFhYKty%_pXH^3`V@UF@prSugYw5Dk$y$8nZCZQ> z(9&9twotWy&{I>)%0NaVy8hHc*FvohedV>4dK&D`$#K|MrjHQYiI!wJHDH#eKPHlF za%^bvw3uLNR!m^-tQd2}tXF5*#c-RPHpuF=*aprySGl!vd`xU@guVTT_F`L2@uS;o zzCd*fZH|JLhQv*Vb|<27Z%_u7;%PjyxIpr@*v>84HpMOu+2m>Z71l+*mBQXperhy* zFhW_( zKWGpso#dp%T3785^=oymZ4alMd%p7PsIs14M6LFfiF-Q9os8RETao+y!qZ6}>VC|{ zJS&Eb*PiBqRttUx@2!eQmB-W07B`J`%V}9$u0EPW6=SiNAHnEx;Ah(oP`{DWQd@zq zEX`xJ-(AtAvTvTP7^4l*l;mv{GJJKC#$h{u^&oXq|H2Aeg+%@E7^U&4zng~10vaQ? zZ=W03IO5XYLYmLn77fDuD-|2t190v_3c0D7W@8v9%gIkU?t6HnTcnWOW_&Jd4!}Q! z!i37e>~lp!XG|IQmfz|ct~Cm3Mv}d>3Fj`FWb9~9RJ*;?*$|Cp z?LG7|!UA2d@QOrxh2JqtZ6sBx9HFt8wXyK`q+N|vulb+iR_}MyY+R_Pi z%u-X5)AH%U@H4V9icx{3Ox`|shp%Jx4qxXjJh|-`FT!j_Cyul@7ULJ-ene#o#;X&x z$4nV-^TQ#~MW@Ej!O&r?2f-CETVVFV>~-aMO`D7xV-5JEcwoTB{jFgbBn%rN*?Kiw zth-#hhZvL}AP?KTG{1hgcW2DVsbnr|m~b@l}0 zJq%7r! zX*MZQQ?L_UZ2@mDb65l`7F#^SF zwi}yoarM(2Q7#U6WfZwii9`)VO*L!TQ%=u~;j8&v*KOkFuCl#*$Lids-~&-;W~Qc| zu4FA3^*GXE3_mn#hAKrCjG5LA;>oUZEYBAQy2_p0g@v1a5sp+Ry)jT)nYD*^{eh{4 z8D91H%?(~!3J%80Jk`$b;2@aMFn7cJ4(4f?{V?ys&?3MmFkiy_026|W8wt}LrWecr zn2|7(VCKSDM1fr%ir>%NWtX?fa|RBpzonb}ilJaHCJ^ey8Q#m4Wve#XjGLBU=`Z=o zq@Ru!rCzH4Qa_pWN5z#<`q&<&U-@PvN!a_zpDRDVV;+Q#dTgJ)sgV|)A-mO|7J%X`IUJ77bRr_KATSCjj(Cf9 zynCQ_yc_IG_8@f<6fiA96N@z751L1+gEG0JvZC`2w9QHOZxRREwbjy5YHuRtAScKb zIjA5a0m?QS7$MU7%Qw0wqAJl*Wa?!oKI$upE65(swrP6mWypT7Mmi}^!CoW6or%^+ zk**FJI}>65H1STjBO+NQ)I@R@2O>OiuD=`|kV}>*tlNb?2XnPQkvI-zNJJQ&Q5(sx zlL(o*HcHEMjU^iAYAhup>t&i;uCWTFG$)|;QaIEFQaIf-j#BN>b!iUPX{5f89PZRe z8-OHNYuu~xO_1`ToOrqe5ui;_W^X4>!X_?pEY5Eep?`^pguJKmIB~QawT5o+bbUnX zpU`-yI?~YxirA!4IS~b!&fbxI1QFG@CrAkyNkqid7gLE$C&C?lF-km2dNlN7#6pxf z(G3ezAa0PdERB7MQ?L!B$#)Q^q9}tvM05iYkE{<7{#?Ynu{%UWH&CY8D<`C&fBXM& zbuDmFRQrEsXJ!`=bP-fk#07jHpsjBzOGI1*H8HKMEP05bnBuEYv0a~;siCMx?PXf` zYHC+BTfIHZN4NLAkk+59?%lG|vU@M4-PSbyf4?(lbz?p(-}#>3dCi%b^P1oJ9dg`K z(}d|m_$(#m&`(#q%o)v%-{qfGBlZp1gA@^ zCL%*iiBoXvxaS*-qAipJD99$FM8*?6crl52sGyvdyr0AZiPW58xMw7q8dBijkdMU2 z1c{lk;LvJeGsg?emYB<(VCXPhI*gP^)hU+9ILXILgesNkzewUFiRBWfN!$oz#@--4 zh#G@fjG~wBze#LK6Sef%P2w#?_fAfok>pOSc1;{PP3<8vdg+|;Z> zytk0!p&m~JpH4(ZHcCFgTw00*k4uLSh)DQb$$yl*7g~I3x!q12Dqhaj?(di9U%-C9aUTN@9(~^%6Hpo3A=jZ7Chig^JMnNzQ}E-M#Q8m|vG- zj(0@;Ww*L*?%i zaj4gb&Qo%yDqY{b0L`V$J2A9Q!LWX0Lji0tStB4NZCJh1GpBynlxdR-+U~L{|tQzmv-f-N?sr^>StIy-x zuXO3^@l1WLZX;5d4ck$cszb}P2t?gB-!7w8_V@F|y#BwbKZ>5ETE1Sc-~;yhQf;{5 z<Ksj}Ot;33cd>Dru{UJQ=;U2yW z;%u<2Lsh&CKxN{P10&=vY#~lLZ6Aa<<=JSVLfi}=#wibkamuOtYaLbw)}tYj zT+E*Yb-LSTVh6+F723D0jj*H`)ZWT6W<2jJqn*EenzloIpdQZb{EyLKs|!!#aLGAZ z#^bJ_cVo)ufcL=D=9Zl1Q|<-tCHXq=$H7DX{|tUuJUm?+9s3oY!5Zn!u4DKmKAw&d z^B6ozBc*czoSy}6D|rd{e((gz9|Qj|j4ua24epZijo=!dluXI@fZqh(NAeHBi@~!c z|4LVE$_rxQ46SqWS8(qq-4oEg=B~3WVwOr@@MQ7k3~h$D0nS~d^S|Ky3wWXA7r=+1 ztmjDH0u}us@Kuuc03U`pLzhzk&iy7=NI6&Weh1!7^3~uia9h(Q-)+aM9XjAo`8z!H zhlfzAZ`ULI1bhrQ%G!+Z9C$g-nJ6=$;!#_PbAZVcaKg;szJcRe z5}RjgqxGzT{rZTXW@_zu*4H07OZ&lyESod2c>27F4^@iZg^q;Uo`ZV(Q>wJ(*gnaO zf;!PIM8gh!C9%Nzz8qDA{xEn{30`uE@v0?Hka!D_{qT|G2tSTkhOE;a;i{zja>-3? zEL_(|!^8OxIMl z0-D2IB$J7}F`pdPGTLk+qREwfxWth}{KgScwjA~{zDnXWj9MjsgNW;(=~~Kl`1SH6 z4JYi^4+5GANu&}H6C6&&bx@gzSSaP=Bu)nM`ezaG1oFk@4SJ3^>4vh=m*k}w$4d8> z2FD2xqpxN_08E#dEwNByi9`;t>2I;b^%7})i6!tN5hb-lB2D#?n_5fA(D&fXP>}BM z@3iA_;>rkfq>ZBKhewwJE}!O=4w85WkR|mXaW?7%iRMNg#khr1ZfZM$e@_nN8^v(j zB-R5N|4AY;X7l2eU{RTS!o%Zyav=L0<`og)@h!Teh}qYm`&l9~XfBTivX4RcTp$-V zn4@pRGlv`t8#wA_I{PHgjskxS_rH)QD23@n9|oDka=D&p5oYY9+#F^jV)jLtAr7;d zfkuf}feasoCW+xqJ4^82iyZE^NcZ7HxQ`>w$NgvLg%PnYPc(sX1Kt!UIPy^k5Fp zAuxyGz~L?7UW?a_xE`}o#0?lb5;x*jNxnkjMv2c61^Ot&O}OX8)mA5o39~cA3(9WA zc>R4@mdl zBzK}QS_tuiPfInpL2RO_R%mSPiR8tRR&eD~M|{!v-LOvg ziC8CGx3ot6bX~E~wkb|L=+wH|9Py@R;XwqqGz((}#UnVLL1YC63TLj+6ZOv2LGHa+ z>lU(G3`@rC)V|_~AByY~#0!hH`=Q$T`(jMbRXYq%mZ?^xd&>9oQ%+*R+>UYOd-kb) zvy6)6nJ(;yHtQO`GW9gqZ7&TDaYIR@Z|P(#EO+zkQ@J}K^`+(C zEq^iS!GiON?rx78fm=Ox7+tqi?9}8$7vpw`KQGbh`d8!GAoXF@c(SKDh37kh{R&@L z6LHQ^l5?@8TJIgf0hK#~S(Vl{9cpqXv3e=KM|BoEmulT(s(Zta`6WtCP7+@&HPvsQ zSf&lZb$+-^yA|MA4mD1!;$Du?XtjULa_yKphAp#os0toNOUK)EuneZmQ7tJ2lrIhA zxND|5gyqAMXNwp9r*;&+720@ptN45c%2^ftpU^tTay>~Ayt3c-DR7x6dqNvrJj8~Z zC!P68V+=SRVAESKaO~%Ey;JM~{}B9kDZd{)5>;(C$t%Eb0>=!U8J^vTC;i4st)tER z4cwsdZ5kM+7A!BEuV9dfE4w0*T@#vnPbZ>}mP151rcI4>c2#JSon00ByH8?~#A!tM zXTdRkvkSvnxN15eA)mw-=@By>dx;o`{9WQ_L}c(wA`)ABVQ7ck$99K(M3c=rl}UZVs}b+ zeo&{;`savgXciDI2_=#)7OjT<^A1xpUCk9ksBHdam{$6iVlAAEFA;8)sgPbSOojCS zvlP;GOCdd4+)KUm-D1&GA^qTfT$0vK%j%mYX1uGW!x;1bp3;*1BWv)Gc^_;1*IBK} z7MW9Zd%^AagbPKwY`i{)hhj6M%KF-~4&|1S@m-e!Q>(H@R}B3v;qrKG|GGv^BKeVROX!vW zH>g<^T}w?B8SAtSiOvJ|5%!Tv^1UVNFJVbVU#&qO&gfm0&NszR>$J4!`zwAqli;b$ zQ(cvLVpFY_q~0(5wc3b`L1sOmdy47?p`KwNsA!eyBes-pD~&ILNi5rzBA3TWO;PcS z&^mkPHjJrLd)Vt^(`Po`I^sn37mkNNZ4uBJUupKX3gw?oad zcR`;}<>R_1z=RA>_MuIe6tf_%rE>qM^n#zxjBZj|G!-om>U$w`cQ5E7zl$?O%+r;k zc9Ygs?H~?q(h^6{R#SE@U55RG;MJwL_%WRI;Id$M*N&29!CuO;;7v+KsS&WbG|ZKu z)||KDjJdGosUeEZw03|;)*K&>0*cJ_+I)4A|Ih2SDQYB|8->yZqWwm#`|$OW9^2>4 za2|;Ev~3(w6`yh~BMQ2)iu+i(t)UjX97P89U+MzQP@`dO(As{nCb$%p^nGr#2$@Lr zM(ve$lPZE|Xk^3EDl!WgvV&rX&<3_EsCcp>s;;(F4H(0hKo?ve5#bq8`lNVDXvN0I z%!lZ|S)1bJZZAjnwd&#U*gw}i^9vTp=sE`GjiMfyGWJyY4v%wHU}@t#HO;8Eov@|# zt{)S)keVOpH07nb^p&MhB#)?{Q7}!0RJx-42D~0{ru6U>C7Mq|+J74isXk*svH7ey zZ)a{j>208r){g3-P?2WQ{|fa(2C;j(1=c}>=9Y|vhV5&upIT@2>Ey54>$586alS;1zPy&@2wV!Pbl zv3MQyn_=(6x&OB%7w(TNy`ZQ|!Pbe(&uATULou)@94i`w(e4fvC6oIsU;_%1CukV^ zxKb8=aA?cakQMu^Lp=(*UQfqn?->x;KiK2FG?ucbZrd8FS-!lg5?E2|Lm%H;FdSX#>SO&uMvL~BVjOnh)GiJF;=gxACol#m*Hb?Y(UUQ|49hT?HpFT&KTs&pkEw0(7WMawO$&<@w zO`KgeebSs6G;47|OxmjT^NwWV=3yCpC=5|WHOKjlVLS@wfiNC}b1rSN4lDeGFi!c@ zFwXE?`eYqu{P=E&iaq2&4^?5D5peKq9aaKc!#L$HhH-}95ymO!*JkUm!t<+hh{vGC zG4ROlD&Bsw*jlrmOShw(*FitslpA5-qWLEh$%z+-xhH=V$7`&|b$D<4O8>DgiAvrg~178ezNRg;S&uRpL>7ZTf7o0DKQ zGSGl#a&{L(2fLg;aNhB3V65`WO{H?`ht&-us`(rpW4H`yAPteSlhA3_ZpC);m>o18_ zs(h(lf*iwK)Bi2a8PsvnA(b*bm^(NPePO z0s-)4crHT)aS{9gc<2IJ;9?uVLj~v3QFp|k*vHEVseBhYcxO0iRtEVbob%39G?OoB z#$Rg2{muBlz~4uFi708tcag)-(7^<$(HA<%TZvEO?48vtap+~eGlrw@?9e_G&+gPx zYk#=iDO$d)ZHkyOefFH<>7`}jIWTeOE-gcB-laV#o|vJxjGH{GtW23cd*YPo1Bxe2 zn#Ji^@!wrq7k|obtwa@Rw`%d?PkXfGHnbqDc`#Ot=oUS0^7Ss^$w3-!O(N=HTe>dsPVsUKuA(iL^;cTqixUU829O z()~q=Cn-lp*eo%F{0>5%i`S1Cm_tMc*esbBK#mNs8RCWP_VNS?(eM+I?GHT$fSgXg zLPQC$*frLm4(}|BFL1GmWB+f$uL`1lrh*{j1i8Jvm5fPq^BWDiNi3<>(2=_S>&B@$q z+<#MPY9XFVDL6>XM}~mBg7+kTL_`M7SzfrCv%ElamKVq`&-5RV_zCimgx8Vt6I8t5 zyh9Q)!0Ce|l<3`fYm)BBKoRj|EM6M}I1xEUktbE)%1{zXxI)fvC(Wf!hN-dftz}Hp zD8dNeC1PL2#2hD-V=T)Pz9d?nFw)>Mh!c1n#okvP5hgDXb?|JP6>Zs;{yJLx=NrAd zj%sIuNNye3B|65s?Fgz26Kh{lI~uf+K2^lJ>~Uh%fso1u_G~`pNYMNCcW0Svf!F(g zIH0{7r4ABxZ);seCCI;FXgnUf4Slu27)Ir5bTowVNq&+ zha&DHdag9Xv#)$;FzY7Dl)#5YnVthhV(SqtKK5OVzEeH0A8EsuS1s1&3>EJj(el*y z{4qzN{NL#V1Qr@4v4Ni`sUzpXb{% z=DKEQZ#`aQet@Bg9j_*j2w*Gx67cJUUow8(@au)&0Q`pFmyaK(jwa$qMPh2pR^hi8 zzcu*%1;73Hy@lU<_^~!ViQg&w1b$oadkH`5z|}z;rlug#5avv8 zlfpQonZP#QJgj6Y!#L#;u~LjCl;JrUZyi=L(^}u)l&=co2w$QM!gQc@SP{^;SBNu# zRbiYFaFYY;uo9pqT8LBrUKnTiX#e>W+G)-EEza4Y;rI5?!E5OR9*MHe#l4_>AowVh zC1vD=;17Twm;7PyWE4_J{uFrcFuoUj2zVFi|6TAh&Y4ErtO&n>L+D^6KY`E0$yS^* z!3fl0u_#5K;77n+k{5x04c<-iYH&x~;2R1PYv9lc zr4-5`+pi(ug)#tjeAj|!NqzzReSh-jT3fq6?_b)dI`)(A^evv90#tXjKDd=QU8<@s zLxYFnWP|4d^4nS(5q*$1}E0WuAJK+B& zr6o_`!8HDd2>4Fe?m$Z`v7f{&6UEQpYAN1TIA>z~uEwxCh{)U(;^WqP!|s9;_mCG6 zPeh!iHY+fb9P&XD`2ta1M1+6y^Vn+4`|~Rn;=P-QbmkN1;5qoa6#PVd7zq;>TW=a8 zD8jSA1SSy?ak<24#5}atKz?^K?fIcJ`35pvG!fwnfZST*K_U{aCQe6xh;zmGL+DK!qMyQCWu-!B1h_2f@WK&Ip3hmTnz4O7J)3=sQ%^BR1#i-D~%r z)xC%D3Z%mqD|dD(e!wq5@?AJr@sf9toSlr0;438m8hktWEXl8d)2eMh$uXaB{XjjU z^Z?I?JQUw(&NqY(dbl4RO5x!aoHIjQ4;4Bn=lsI6kaxj3<(t5dge7>eng7$x_%F?P zq=EE*K?I@Zt2@p^2NR_7PUs+~@(%Zj_#e)hfep>%e{IIUYQ}$V#$&vQj2rK<^S}sc zlPGjB!94J>kcWzt$~%vP^Frvqq?!Lm!JmZuLD_z9Y9@cL8BeB7qtL+wbp#F_XclAz_@yxUs%G--;J=5-x%FGSG}erY)8?Kyz+{`hs1{0z=R2mQCe3wl4?w&9%qyU-Nw?{ElB$&G}E zoAEMUKtMuSn$VCV2tzW-Nr2{BII}l1SB2`s-pM z8Um__vIIEGO?+8;_(*atHK#kjWienM;!r$blADv0!=Qpjo`(z)Q*h~jw z`$V=9MQMqeiwO=QVkYcC$>$S$SbZaAFbGaG=lcM6?>qaW9kZg+E*^)ee6m zPDaTP%Mp$^6(vKQhPQ?|9U~A0ktJ2)86cuZ7ePc-S4eym`iUsYBwRVCSCbyIrdN}E zcx!NlNvrXU5TC;IDl(Sz3~mu|vo)ShdY;`-aNrfBjUU0mzBPopdypn&{(dlO4#2x z&%IwwOKezKSLj_CH)8x^-32>jEeaE3`(O{95#}B`*s& zVN>|vi3x|)f0+2ueXY`|Le##|SwQ1ZO6t=v3e~!Sg;WCtOl@W9Vi;5is<&dh=JFEV z>Af)+yAcytwsrQfcv^aDJR=)>jG$7C(r^1bC1aSm@k>rUW7MIwGo=2Jx?`(g?$|aP zG26|U+i0-c)Uh_lW9|p^f=B6gDA><=C^(?-;SPKDRrP)|CqK7UV>V1C>fYXr=<{Gz zjkn{D_B(P9@3ZftuGjYsEdsZA^xl@1*TMGoeUZ>`v9?OIG+(IE5?sQop5f7R_>N=utL=3tw8KDdsdD3Qa^=~2S3k2jjU zqr5s^W$*y6$pM3Ew>GBS5#QCgtd#A-?e5p0^ypK64rhHDhp()vJ6GOeRZUKd`qp*O za8iPA)&@UhhOn#GjrlbYxFO zzQ_)g%|rE;kFUxzDmEwT^=eDrn zUgtiUii-cRAj9uD*NYKFmuL4Z-`mdfgh%P2H0|^8aZ-MM#rI&r=%)CHh|5aarl7;U z&J$OsX1MBK2tXIFuwqr;{m6iRcfR#}1P{49xLOT{AOEmXS;eXXk9SY7ty|q0GETlK zfSKf`#lFU%v+y>k2Ik4Cf=|d}(f|_dnAT~YoC4jIEq5}T8Q5VO-Q#VcGGGtSmZ^NM ze4eyJHx~?$YNq!FtWsp{a<_H+wtwL*zs1vWRleug(qB`x#=f{&b-{0$13vqI5F1Woy1A8?^#M`jop?y`Ez` zk@4i~IbQvfkb0p_>S8LcDDxiS?%+;`-yAz{&f_<#S#(Ftr@R`7P7}=NzO%1YPguUr zR(}4MkDKFu>Fd!W8~UT;*>d)M32@2h_| zprw8dK<_b=|k$Tq_?X-6u6qM)pJ|64Zi&W6;|$E_0>W-m)DMMC}!oG zZZFf#T`?=iWZT1hES{AW_z~|I!`l!VvB0NyLZZWb))nWmas?*;ZbC!8Wgn9Hd6~~_ z8=ObW7o&df5YRIhG;}D>9K4Z&t znTd}*WL?gY@|9ClntZczF8XGzEb;#3j0)prRv{iOubrBD(KmZ&lW%ry$u=lVUxRgG zzLxxN!+-1Eqo<(EKG4bRA;f#^&&_L8dOlj;qeoT4?WP%PrT0n{^vnh$b9{a4Mq6gD zdZSUzoYL?iYSo+ExdAP6aJ`;c%=Xi3YB)bVb#UNHX8ZccMtkPadPn9svuUO7bH|E4 zf!{Nu>aU_?%>28x`L>;EP`^!0=@%F=|E9o`^Lqw9EVp!{wfa4%%G8~01KFuO`w(^A zuMI7xC>a;)H_2D@zxC9c{_zYm)6L!2wlf)#*-}~tY&&5*`8GWz64BM-WwDvq%WWms zcSV|~Hs`&=eXyI$`6+tbC>uY;Qh)E39oBUg*>7;l%fmRsQ=!H>tPI9upky6s zRs`V_{fr=dqMs2&x41smdVvkm8v=OJ2+Teww>sZ!g-<(6Pz2Yt-W2U%zJ}sqF7U@w@#Wf<9hHZ(n|58fuS3;hG60mh72&k3n-vE1`66D(g?IoC7V&Y13w~4pPhzlc&vibmFYy z>62zWte8HnY?aQKJ{?<7in!^7C8Nwi+jt@xT}DiV%kT{!0aoE-_{c^2$1_8nXAj(R=q{{ z^_1g*+e>*LIUNaiDo&W&wh{YdvR9&aF;50yriKXhF;-xVh`RbV7bfW>(oQe^eM7|b z<9K9_+ZeGzqrasRR}c}NAJupv)Y{>;Za+#ibt%DF&%vM9T;a|ssqt{2#}XnESVJ5P zbsr)U-b&2IY$0(75|HkHm+s~YcF0*lG6OCm;_X622Gb-`&5gVo7&X+3sV1J}VhV{k z3`K>vh$fF%lQJSIOWHh`H>Eo=XiiUNSvn`oSdi{$PB=|TZcb045~I!u=SSVrojNDH zun9zz+zR5<5m0dA$wg`C>_G~cQ z-LS9tf=yeEvsK6n^o63G%h9&%+eqWb zi(c!H=Xq`4rrb0vq_po~VjF^k-OmOST&sg!+@%Y!m^1R&g(F(&1r@{Yc1R?_)!yTH zc{ujoqHp!-;hy&9{KuYP2PJiW%+A%p9tfZ2c6ll;DDaqU-bev&mmLQcmt#sASw+-*^|{$hBXmU(zvLkHcf@>Z?6e*) z3#%@<#>*u8U;3*Y_`mTr;fsE>>9TA_3sBL;b)h7mT)7!ObV=Aat$Rrl}%eLv` zZ2nJQ)H~X2O}hB`Px?yl*%+j59voSr;tb>X;B0Oi8!q3}%3|!2Qm!+Qd062i!Z_uF z!Z=T}!#L!vm8viYo>q%RpF2AG({|{(p1c{Up=~mIPp43|KMUSV@@wE9ic!1u&dHGo zh}OjPMy>WC;DaO|1-{U~dbj?1g!g;6u_y2o5%ENzXxIZ_hm0Q}P18AUeBvSR4NH(j z^Z+V}eenf_i1{`1Lnc~>Kam4JA)?u$@-aIAU5Ln#TQ>B!5N}cLw3dtGlT0BU5YYr8 zBA6t3rR22GOSx%V7V>T6xFYr>*nYky<;VT)U(+8~i#OsT8P7K2aHyn7&QCo27WF^k zI5g;J=C~}Rgm^cGX2g5Y>=DPK`6S+pFEvDbHZ;G&Azr&s59)bd>d7;iZ;2D+H?=fe zFPbpArxVdU_aUNrE|KnkC-%U@MMOE<(UP&;yAaXp-a&i-4IMFGe)@uc+A85EwQa-< zbaW2#1OeY8X5ynC5fPjvB4JYj6B#jWj*diz@HF!)B|i}nbBRN6Ly730JVu;|ju8>@ zy&~mr5qnz3Oep7DVoOCwhhOZmKcmtl@uI|_LaS=}t@hoDYROc*#<~Mn%^}aHLHQ>bc z5_eFJqNR}&-io8dq3DZBev$Z)^**!H?7}NVe|?B>=X*Si0&W9M0Tr+*;QLGWrQ`+Z z^hz|hg9cB7j7BVnql-t}B-Z{_e_DM5Dm{9tF+2rX6%7|1sRs2(RdF6W@L{7UYtzlz zx6z#fQJxkaDF zQ^%0@$Z zIO|QZ^|&6dR*3`0^#|0`BJLf%Ys~3|MahiPy1ZfU=rAX;7+cNi_h2i!OMipMXmQWG z`aQ)*eQanB`;b4}N2TenzM-)HpftVai>`{AKO0kHdgHLn%=(#`E$eR$%+HLkug+{; zKOhjFp564KFWr-0URlNV`m;b9T%Hbd`8W^(mvy53dwOT@p}>LQNOx_{!V~%BX%90% z-}!KHr9J#f2PHWnmo9$}sOj#8S>8bJ7MU74lz_h~T!PqnRxbxMTS{*s=Ncz`dDmtL*jN8b{W7G85}Lq1iv+==EFUvfzD1 zHwD;>+Mkml4G;Wf+Opu_qTQ3M&V*xsn#cNP2Je5gOuKMOm+IS(=KS=hvEoT8h3 zHGW38Sg%#hK&Mix)K<*6@Lrte+gX)UMS~wT;`~Q?t(xUu_Ob5QyiNxmbn{U0Astm> z7=IMJDvVR^3*)Q67lFHhoQ2#DtOI{fa)ze{igj4=SA}uNy~^3hKYGxkZg57xobMDvgHM9imp=Qaj1P$iwu!+9aNT@3kDzqR!eWZ+IIdI&Yhr_o}~r+P27hj9ON4*N6Ymh(T(Eoh5Nw(cMyA7_lp7MfD>2H9etD+ ziRjzVIu@HoYG9ff!R;ev5#f(oC-he--FbT%&rcGYB$`9|ZesDj^w!=kC_%=-TTQ=J z5=rymg)bvqFcqp5;367!wpD8vBqe%vK=1L!}R zI2^4gaRLfqIZu#*l|%%rA;P2C;Xnij$un^`q`!Yk>NvtL2fB}Pc>24sh54Y3Fv zLn8VM9}&?lu;WRH>W5N`=1HmbureZAd?m7jL41(%n-BpJJUxgy9kgd2dpkaq}4^JGP?*icNbFy z$hNz+xcxMgeXb;+FJTu~FRN{Z@AQohf;mO9`?S8GMX1X_7m@p4ed#C-eSzQ6SSpyn z2yI&S>w%UYR)R{?phf&ReDk8ARcsk=TGRrV-Smzx@(Ejy?4NrsdbHdcEgGip6w#(h zAFP*D_o?&W*MyOpVOtn8?-NmbUhf)tY+>(Qw#moDk@I@Tn^QSUVsxroAH3J4CwC60 zDP_n5&CE=4rOsuenC9t=Mt{6Jg32Z6V@z_VGOwb|&w6UxKV5ATP_Z{1cg~`K7l7UT z?)X{n)fzK0UDyNg1;=Omg7;)=bH$pU_2HVf@Ra!cXT7WU^g{O`?wNIZZqEOLDURe@ z17>Gou0uxV@`TDHb#7batUmaLvNtc{b@o*ls`5=o&z22GWyuY(G4Z2weZfhEEJJIr zQN3rIhGWPUF4(*p>N-?r8{elT$BTs*^mcaJi1&(~ED|5JHm(TYt@Z@5`=TDL7K%f# z1rU1|MnKkKeS^7M92trA{PDl&S!#_K^^1Og*B{^okC<7zwosukkE-}R$-98JLe<*R z|M4$q0jGQhcNzry4>2CE2g1^RmpR9aXLG&eTt6R$XV)Bv;n_8(bRmyN+;n#l;m-B* z=YLk9#>mMJ~A5ue)AvTO}r}w?N zpWECldbdCFH@&^)nOLv%fEDCq+gi+RIg_i7TsWfIdL-7TG^#z~>ow?VaF8c*5 zC4Y%5T8C=RsDB&AF|<=oin^;>d(kpCB1M$jj2%fo!I2Far`5mX^+`S#T+>A_&FGap z5KR^;57XbraDM>YCAo&8UFct^8P{yyml2+~;UE#kcASXY!%WfsT0o+yup5i`P>!bE zHX;({7eCr_E0nxQa&xB>$bFKpm-4NW@3VLxVAGsbD><+wDfu_3Du8x77Zk;b&Wh z%^g?!;Oj2`-|~%IRlQTR7-4MiE`qjO4NT`>`_+Ce>RH|6+^;=0tmMg@w}Xj3N6F|W z#kd1%d-iKZQ&@486+?Rxe$%gwuiG~D^i-_)E>Qz1`P^+fWyJQ9(8Va5 zYA;2&p7yAHj0V+{IGmxMgo5hRmm=K%3Xb2ZWOV()?YdS1XVl00m1MVR=Fy7&^3?=6 zn->QITuRL;e3tL_$Z=$;dr4WzRwR>Hl-BQqpq|a7Oa-{7q)ydScqod73nKD*-5nTR(l57?nkhuuKM*LN5dYQ7jX+IXmC zo8Of>T_(`#cX4#I@tduqL%daJbi?G|cZEhTkvYa_6wgO!L&P(EV5MaIoyJ!0LA*`Y zVQr0dJdCGOfH%lGEO|s2r<@g5xSVfVh*O@07bC>+lq%U_9CEMH80J6^fiTVpity%G zhn0azVVv@h!Z^d%hjGeZ#mi$IR(SSjLp)W1j~nZmEDs<3!2`NdqW2-Sy?CXKZWn{r z+M`6yIAe<%5MPZmGQ97gxN;F4E3_e~s3Nr+>z3~Z?+lLm$&^n4$4-gLUnS=(Vdy}| zL|NU8zYP9w_#X!uTM!g<)5Vc z&k}iAlo#U1$u(XB!}BGuVa#+zxRUD1fLO6bf+|>^=}ZSd2i#xWY%w$M}JxIp&ZL zJJB4)A)@c;ArlWdUL8&Yn(IG+=K2r#51@{G?XucX_&<6u-dPFXj3jz-O9Ym14@@`T_;p_s+>@?vu;^po1i+9Vg9tQE~mu_rK%=J zZP3l~4<%m^l%A3;Ic}BmFn%amQ+_XSJANsWR|4O`FBEETDzMFbdm@hxULU3gfK0 zXiqI#%K2e~S}YwTp9=mwc!K1M!Tn)!e&A>b<43^HfuqM`ruR8*Ut9`{;0Jh!)oys8 zVO`dhp$t0Vmj>8I$_O&R7y2)i8MU^FRd9>KIB~DUPb6NINX;I~F;8paNQ9*=-B%>C z2_s)Ygg+WNiE<%r$kExhzTFqTZkvYA)R@OH`5XaHn91veFYkXesrz-JK`XmsI!AO@ zM~J!}Mw%#|YIL{z@Y*_UqU97d1%r&bsi6*;WlPuS*DuQrb3XGOX=*F+&$e0@QBYyj zcykJJFk6c*hB+r&6P$$|P-Cz)@oe|K_QX$Xf^&;%f{(asf^#ahbM|hp?bEQst+QU~ zHc+ZK>z=)JORApFY0>z6PRxntb8HQ#=c#>9&onzMW}Lru@TTW|_1`n6I{MOwe);b+ z>?Lt{I;=ipO$Tw;G-Ghr_z|Nox^hNee0xZOIVY>SxB65J5V!l3)IV3Ap1FNy#+q*8 z&@`i~EePwn(~OnF%11doy*#_i(R+*F_wUzy+gF?nM%O@p_wz40Zb$GJgSzk4p#Jt7 z(D=@7TISnYeztD=ydSG-b2^jc!AHzTg~}%~V#8Fcs2IW13RYPFIffc+Tu9FRg)2Ai?kWWICTK@s*ET7k(Gu+6|H6(?>|U;g`9)z zj>nN2V%A}qd^{M&Dd!^^E=PrOom0;7pLJN_1Da?%%SaM)B4G|Qj z;R!b7Rn6pU!Q0~(su^}QlYa!>7r$4K2Gc$JM|rw(4GvuOAL0_SYo2}VdK*X)#nKNN2L}Y}jLCnB>$xRd9$k>b0o%fmvm}6How^)2& z@*w3%uq_ION?PnoL}la75{IA~BW8@}^p|xd>{L)MZL8!jO5BYSNyRlb|oGODImCFXv+FSGKMLu#rsrMIWt zQ&CAt)QECV$0}|8YG{i%u!h9uw&8z-`EjCGr7qQ@Q6%PJTaa}?Jh#wT8ht!C-(69D zJop%GgsgbXcuP|if8Jsv&!+D4Keg28ZBsYk!16Tcom zRtbFOgZNp8<^M{EQZABLXmPFC=?Zyaka$&0-)ZmQ({XyxP@<1~=@+}YSIb=p~!vTg{5kVNIJbVC1IUir^u&zHEw>rcrcZP9>XP?eRWCX6$}9bugElhU5d zo~Mk8*6)XA+H8k@w?BG+myZH(^YC`e13fb zTU!?=Tz{dgQw-v` z{-Rsg*j+rJLC;}iGv~?8_#@!G@#DCL(LCQw{&q7?g}BhcE4i^O#Y&b|bV3K@t(Ad) zbWp~K*gQw)jc(QHr2<*#U|hSJ@xOsDMD>&l8S{3wnf$-tM<6eh^0qjSMRk-VIk!3r z9gKf6cs}IaaE|!A$`UxtfP;KFl(o$Q>;Qis@_H+Pa*OTh=T?3bu&55NrVojL$eY);opsO`p;}8 zr_~)@e68ti{8u*`9o5>mN+0v@*kl}xgr!D?A8r*=RK8^iiYitk;m(d=Au-RINMsMw zNB<+Nt_V3-%+MdZ&P4Vxh}l3Yo3T$p&gYi#uOuRV_9bi@nx*IHFy87*Q!Q{WIquL~ zMDPGT;g+eEBl49;D7*!z+zu?xH6MYXunSt`@ z=&}-LpnpKT+ggd?rEO$$CU7QNJ_=?*uM3m58 zB5oObHIxsRxCI!s6iv0{<_Zmji$a~na2<$`;~5}M!ZSczfm>`xWVDm=0UcK2UK4T8 z&6&j~QPd7_pbN+ZsUO07ohh-L^3@m?5!YDON0{L)cA? z2HrOJ4nzh%q5v77B^hSmMja2KSO2{tJk> zb@Pe&(2yY(U>rw$9=DKqCmw1dE|A?i#OGDs<_R)zT%u{BrT~>{3wV41?=f*3u8_DL z86_eD_WPKjrNkF8k|ZLYRT66?u9s+9u0h5d!K3~Rzo>Yk7Q(^Q&qWT|FJuH+5@`uD zY8Q%-xEl|Tv*Z|DwdV>HZ4)hj2&6+<5DMI4%IMb5e;l-=0*3u{Sc3 zH0VzVz!O~2H^d!yoro`4yCc$cO(G&p+KG8`A|j-T9Qv1bwi}~Gul`1=-UUgD;vE?1 zQZXmmn$3<#H%GS#a51daIX~?%oCf((b9j4-)@0=HHebv7n7RQQcC3F_#y1 zBGT&i=&6bKcZPVH_h#kkXKS{G?8sd??#vt!1Yjdi@m3fFu z88@P%sb2Y_uXCF6^9#OzorP`H_>L*v(tGt8a7*rx5v8NY-gE!Nhbm^wesqC%$?}zJ z)^F*sLhaMRSDANTx!UKxqWh-A=H6RenYRUOOHl`~_F$*LP8Gp*3S7zI{yDINcPc!T zATaP=;FhWI06YaeRnlP^q>~_>7L|M7qz)BGsPt3?f|kM!>^|TY;1=MiX$S$o9Ug|S zGRT4V0k;6R5Fy_J`KgBy9=yYJ#66jjp>8rU*p zOoz>2r)D5I;EABmrS>_7|2$u6o-Z}eSD5E3a4zaw8$scG)mYziBum*mRJ6rb8y@0q zaIy-I<8>|;t-#{SUI&b+k>lacw)=5$u$q@b3oMn1-35m zO0c;_9fRqEubo<=j(9eRua`u`C-m=kvn%ZA-EUyO0exX4jDb<60rWJPosB#ci#aU#%O8&?~WO%D)tzRe8H&*=L2bda<_FwzJcpRo-#p53t55>fHQe2B*Q?{tG<)QWB z@<+y4NJf8bR2bF$;4Th-Y>a_R?B9(sefOL$UAR7|ZoLL=sTY^54^D7nG1SjnmTqr}lJw)h+iivElE=UFuYE?(atb!HHVJ%?X~{IytbosO-12 zLsJUM@-6c#x1Cln2XvFWqADd98*RLnr9QpSsI8b6EhhfMD2~1Q zO}=M5zO-|Tmdmag(a97ixoX8t`2Mis60H^An?!aTsgc4vW#B7z25|pBUQ# z87GWU+T4OUV!;Vxf%kNPrtX!dfNu!Q=rGz-fg4+dsb7vRc=9{#e3c_Lw>DVq?w)JZ z!bpbw@;tXk1dSTIxlAe#sSK4yh9aA?ZI1I15w@mlMo!%~YhGA$CpH_4OF#A1Fc`s4 zh=5U!%~tkljzx)T!X9L6vOOue)xvwy=;7@xS19q)migK@`C2_2bl2D#XqctCUg;Ts zIKgF^A!7L1^-I<~8;o}zO;CDjxl4l8PTTovTl`@kzM_w<#6mCk;-FSjTWLG5YmxOd z2Ld}hEmr3Y#s5nUw)63t1OA`xaCy0<>2_JXDlE8t^c_68vNsr#ukGDIdf-z&xz*xnZ30aFg*2PkYqXp(>E4 zDzAn)(8C*HoDp=1vzGaDb9;Z&mqwahea_$hwDF;;el5QH7SkZZgz+67yqTi^cgEo4 zHxWJx;aJ!F8O_kU;CSgxehmCWvEe%e`iD5cK>zlC_nk2|e!yo=ghF!ZxIA{avWPy6 z=!xjpn0B~_pwA0#>w{*-MDgHnMv8YM{Y*klL;MS_fC#_GiD;NVATG6vl3^RciC;>z zA%{#OT4Dzx!eJ%SoKyoPQq(GPtq;z7*X16jM$ z#x{EnpU{0f5{v^LLDfh+%A&UXr4joe14Q;T#LUaa3U^IF60r3q?P7vQhXI8{s zG5(^${M!{H)gI9sIdzEVV)YcG91+NA@ZnkFtyWq$tfF|}ccZ(lDo(V-p1JA@v4`~G zHr5upU$!xga~EczM`?cdR-IzhReUroOhNWrihpjhw-q&4jq8h2&?9K)f8(lQv#G5& z9JbfBG3F1QpLUCO&Ol|gZeMLqO5@V`nPQo0KclwxKWww#s{`M)+k0wQpz%wj{a$sR z7#(FF7TclI>KtR;kQ3VZL|e@Hgy>B1Qj~p6yVm9;diR2E(vZ;hHF`>FZnZzAg}p}$ ztxr~8|IKafSLG7m{(`E8Xc79jt@(JLf04_6ECPn1hxM@gHMOn(_e^^m6+Et&{Z3nY z&EBAUD_?Mj$NDOlI=yH)bzndDot~Oe*U_|N@|8n5-yoiH+ixD0UB5Bd#btxm>Cp?> zwk
+dPJXOz2>k`ZyZjag}Cc$AuP1re@srfDPib~j=ju-kL>*LSa}UCBQeF}>~W zyeEQC;5#4PBHIks7|iyu{{5jo$I~0t`qf|Gyw(`heHYJI>vZhMUt9A_pb=nxkLC_W#a5I~scv>M*u~6JZ2cx)MbN$Xlq2$F>hvL=FUnn5aGG#vh+N~@==t%?>8YEC z8TC-9<#Nr@i0yFMA%9MkSzSBoQ`U^}d>*t`882}}oLnCiX?^T%{n>r&x~jJK59@3H zOO*FTypYymsl)O`4)M7-ap7?eaduq!euOyXv{4`8l#dJJlwWKk#i*JnPiT9CLmsCr z4RfG}O>J+OIPq`2-CkwK>h|`-?0IUbC>~}XT+EgAp#wFT(ii+qaMP1G|B{tm#c@# zO1wUjgYXsyva`}ogFfjEVZd607JEs&t?eiA{+NNgE2m&(g~^&pzqt>?i!b#HXiOm= z#A_aj2p%P2&$}{TCoht3qS1t0hh`)4ElDrLmfn0XMSd}0{caCVgbuAjn*oX2{At0f z^J;Y868swpe-4p2?t;)a$f1A3A1()4#0vH!aljA~ z_74m5a={DaUgI)ifB|SrZ_S4geHbD`!Wl0nIx81kC0HT2UhstWS+3*N zr~;&W!dSc=lStnpoHpiLHBDA=aD(F!blKu$s&a}pV!WfHwKz)jOCB}F))F7cwc1_w zNOVh9wfcHlwZmE()Hq3n{GRp`4zjmHlee)T1?Q-cD>d0~>1cN{35`1Mn6`R?qoX6Y z1IF<*HR`;Y2@X-`8Fh^R#stTUoq`>d*G^Jn{O>GxthEI@DC>(>c%F8ohFE%L_@AqE z%ohEdG2JWIvv6*5gg34t!Ai?N>J`V|MQ>)~#m1kq$C1}Gs@Q4Vmd~$oy2i(!Talb2 zCE@wj|KdT%{B}lg-LkIn>-i!m zOzQR|HXpWrleen$(3Py}zQVyQSyw zqoX~o79B$5OYnMaN!sjHhFOwgz1F1h-pxgW>SfDjF2qfYa^FflXC1eX`Vw*9dZmmC_61qyuA9YVajC-od4VkX%JGJhK@!d@Yx>|p)6pi z&qgBskt%CjD}ROO1EUbB0&QHBa*zCpwlYfT55o_ll;rg1x=YfvOi4<`)-%f>_mgP` zJMNn|thODk_!T_IIB#4#s(l@;OqKu8ddDcg-VWyeSfv}f)BibE`2&Uv;*=%8l{n>V zJf40UuZ%$aV%jL}zTUH*hp#0puAAwOJ2!L0O!p&VV05Zy z{G!m#+4Xs4AxYy4rKIswrwq-*OfmG%l9-}*>*D@M?Ng^R1@A?viAwj5ozI0O4a5wT z@p`aob%y(mvzNxRN&DY}&^*S2&|Kf4%@twYg2ukESkZdE)t zzj{_vlaw?iTR|JGdym#PNlA~ISIX$7deHb(lIlT2R2rXsJ=)SFWk7hwA8UuLbH^1u zJM?m)agNVwUnVJQeZSVta_^{{zT{@Ar3NiV_5Ue3CDQb}z>e)kW5k6LD^5{$Zkn|g zLj&^MtLokfNOcKUrI9JMr)TlxpB|K0D`&uD%IWD+{gKkai`paXgQX$(KTx{Jvks?# zNlE*bfur5SL>8cB!iOjuw?syMcik}epD+fvSMWxcZFn3(2HJCbe(!qz3!F-SBFCY8-aW#`yu^q;CQJ96|nUo(} zlfZG}_+IQ`h_SUWL=QX8+(x&|e_j4j5mJXBa zEGZw>ei!hrlRE5ied5|1$ST>EqvBd0+CfQ=D;a8am5NJe3zDx%gREkny)T!z7i!OS zP`X*?x*yj*>Y#LTJ?fq&JT=C{=$D%Q&NTV^sqP8FE^kB8`paNz8(|2 zrWTIJq`sF6wYnrF7Xu}lbi_?l)$Zx2M5R=}#nLwjqYt~J$*BXb{`%Gi6pd4g@7Mab zjI)+f23)=Lmi9zPbcRjTUhJsE`Cbf+yqY<0I&K>X;yN81ev9Ss-HVa#Qx~J)p%rgI zG}(JmPIkJ=adPDWSuX>-F6znnY&DXbS@eYi57BtPug1pD@BBXftjHc_+gfO@Q_7#! z6NY}?yR^P3s7L?pe>_E59U3`i&K&0mtnup{>76;-IkkXu;w|)F&rrr%{G+-n7wq;0 z=<`?L@7)(Qo^LPS;f){G#ly}~lZG?ts!8jiCJX0yVW9nflh%(nY1+@g^OEs1{NHNQ zu=hy^I^F4@-lXY4R_8nI`vE^P*QEQhhteDO-07gkr1bzy znrHZc#ks``pGEm7? z`{%+1U-MVvE&T&r)%c33>sO#FhHYKd$`>V|lw4IZQd&@+`6>TO1UI8)>5UuVHw89HB)HN6i0% z^hy!7e%O8njT6xQ`VjgQ^n9VefgYjF#9@gaAX%e@amO$WDTC$>kx_6#-}3)uxbkPTF2tmvGiP+|)uTsu|MCYEEmptdTE0f1 zhDR23^E*Jkk5_Us4(q`S^MKGdNVso}JPB0Gj?DBH>>= zl0Nh_KGGY+f*Hb~M)0DbqrKrUha4zNMMAF-JSNPOIvDPH2xgN%8@GA}?18o%k+k3Q zl@2~cpv2J9GQo1eRU{%@A@q8|je`FGd7}R$aRL`egcA_FDcHOt%n{#3B;36~!rf8O zM}tpx-NVt1R*dHa~{zswzE0}?*ipRT2*jJE$V5SKY zIfAM!hbbW)f&qDyL<$`f`Z$Rcs3EPm%7yt!5-E4a(AxA_N}}&K2!?ipL@X_+2+3Fy zv1dieKza$5(H!o}Nx0ig;;fF5h-D4=fGk}i5&JQyNJGCz2R8EGM#aj={RoZ7_@sL7 zAb_ia0TO3(gGB6OaW@D(g-%^00`4Km8kk=?W{^1EBUm7~7vyp8lQ_za5ArN-lDP5F z{|plT_aet&5jOG%bRi@YaD@r`LP0(uFuV#939(*qBZ(8=3i@cVO<3#&8Ic2IA6fc@ zM1VEq&&DH#P<8G4UFh(ccI4+6A2?d0{K_cQ^am!}eyf*_+TA>-T zltY7bqzp)p^8{y*I0FxffD1@uiC5S!0vYf!5&`ce5%KrP99jCDJcIU8@>{&nkpIM| zLp;hbA`>&4VFxkfvyR0gX_sd!Q+>y1i_<ip;wXpWN8D5 zj@CPcc|0DBcw7>R)8>N{&nB0&;z^9eS>=&OB&RgP*pWPf1tcyhuc5Web5L-Qf#uZT zD&ekzL~^|XGQc-TB*P&R$#9HBGMpfh3{CMw#)8voek%T|*kciMB5(V%d z!u<1|EI7!(A8CLC)n3K{5hSu8fkYMz7v|$hxGxuagCHB78IVdka2y$l5=yp~rGCPm z&#FApQRG*+E3#EyPa+y1sU`~M3C)| zD~U32i1yuO$#;x96Ogy$2w6Hw4wt1maJLsu*x%WM+Im64&S|8G6MDF6;$=4Z#w#P-HV-;I5TnvVouJKB{%s9@|0wf z4*-!8Wh8Vti8EP4A}iLB|3Sx05<^ZtCy|nM!d}gWM#@B!IKCg~qk&skOe1q;X&VU# zJ3*$v8-i6N&Ty~L`$?vZ(1!$%3LXc%3G!{GkWvLGh zP>5W@B6ct|M)qWoC`9*?cx=icGf~(`cu-8@@>@fWN6L|tWUa{)N>|?zJQG6m1dj~NGopP!u+J*84~xAt04WqNup@*6_ozO3#Ndfm?60bSs?4Lp!9DU^=$O>0ezw9 zAitglPNWQ3k6SVM3+@B=84=k=;=n490sW0c;p8hRFN!`cXk7k7Kt}vQ>ZZ8Akn`}o zNuI!SBpJZ-r32sa5b@VBebB8Zl>SrJwTA(+@*Ez&5=P0=lX$qGei(H)$q}CkNWmNu zx(1P<2T$VGPHjWhC7@7;A>s))@D@ns<6#5=COj^iJ{IaT+uQEf{!wa4wk^V)Mw^Ph zYxZ9EV_?kfY3=11+M7j6NBayI_h|f3Xx|JO(By?UVBIM5$3lxdTJIpUtrGV#<6~i# z_WVMnqorNG_TfTBd=b3e4<)mQR(;-EH(mrJCEWE;DR zw5rW@j}y(GnI2nWuBUzffqFY*ruOP$B{^!C+kJ<1(DLkJCESPZixrlv?K$mpI5K|9 zf1kSk=I-;mhuxP`lNz^Wx14G}+1uSy96qfssc3o;BRu?SxO(UBer}qY2kB|3Ol=vrD^^<2}d~ds!emJJ*xs>f|z#8mT3Bj!B*LV3Fmr zHEG@Mrw6IEt=z3dWMt!*HxjWy|PG&-(2H^s}DTXrYsoL%8`@oO#<=KLBd@mw^% zCWdVmww4a(4EsF8-uTqq=53iDo1JnU{_~7XGCo8n=bT#svr%--Dev^Im}sr{!t;mny@P znKf3IBUpBjK}a>dA&<$2TeeiHby}v(YFUomjo5aIK&rLBEK^pe7Kb@=tVx6Bmd%ZO zKuU@m`Tks~p_$cEI4`fSCj{$Om@{b7a;3Y^hjc9&Woeu#L^^mt_{f0y;~KO!SLVn} zcVAED&EukrJxXpK-o{gc@?0k+j`MEv z#^czH#Ec1FiOVtDUJ38Y?n(1VFkv^=+%p&o8ml#|4z=GNxaQ14Rm(0 zKzArv8t8~E72O!Rl*Gl2?0a4Wdw$JJYixbD#BSLgkyD%%8#=2b-Nl>?9r8+`s)P~i z=&^&N&D9dWpPYBcKQ25q(XBG9@nuY zYYSH@W9`Mx&<30K#Yz-nu2Ws zwr8-time9Qci1jr`yE>pYRxX#dSe@hZ63De*f^=fhwy8+|Kq2X!E&c}po4xN#r`+g z^x2|NwbLDEtr~>wSFQUhr7z;DBCZQo>2ck(N{{Q2RZ4ry(Elrvf5O3x7{`4r!L}LO zE^HrQ`wrU=*n*K_K)e0v&nna9-o;_#%9jO}NXu}?u=HLQC=FW{coM2avNe?0C*@V< zCk(ljdh}pit7U<*w95Pw2W<^yvaMmM_F09}H~s%QFWGLK6ITWb{&=3hYQ5Jgx0C_6 zmdafNv;pgs$Q}jgP#)HI=?Z4~wlx{9qBLiY)DR&z)$d#Ani=-;n$dx&-HI}kbH?Yn zJytBOu{lp$vrfSjh+6+jWmdQ0`Lkv^ADUVC1Qx5CKWC0KxFCP#?D@`z7I>Za4IV6w zovrUav><=}%s$Tc^R&NLDmhI@Jv7WY*pu(|%q*Pek6o`s+O@Pz$_3vJB%|@e1n<~6 zY0|OKoG-}u8TQ*un)XAGyk`4RCQbWgCQbhi~zcrG(9LWX?n2Cq-lTL zr1cXpY1(rVFXLzUpJLLn2w%EtGN1>X4J>#7J=ky3v_D|dv~L$;xaK?ow9hhW{dkk6 z{c)3yMfm!VIKvCWgCU`YqKEWghe^|eH%yxLTvEyS8OL+PTTs(JrRi-=D-KjMezJ5Q z9n3cw&_Rhw(>`F*w2weTnDH|r*hTBURcY(9h21u$vl%8$Z_M3rX>rd)m<;IPq)F3*GbXJ^DC!Omq@5;B`x{!?!k4ED-4<;e#@c92;CR@6!a*e^PxN8GN}`KDRl712v%s@UsS@=LvUs6g=8E# z*}}WfDME8D;D150?9%=$^v~MAUc}e8bj`jE-{xLaZ}%g<7pb#P>%L9tme?Ja%SLg~ zDj0tTT`crg=%L#3ZOQ<7we|r#k>Aw*MZd-(i!KO9_uy4R;oo{CXAbcX;q_Xm$-MMw9n(8x6)?KhIs(4a<6#}x$nXz>mWa3E_q z9>7Un8Gt^mGI);maQ7RD18ulMsY6K|$C{7FIZ3#0Czwt9Mq=x|#9^Md?a9vaD^J#)Zc%36pS##3;Z`6;&9+wX1_is(2P>&(! zAkWE>l2j;kk&67MLAkKlNzO*qOBQ0@ecS^$(Li$&F=iFafKo_Apo?IdU@wrzxk#MQ z1`@}=MB@1UAdf#l;`l>8v2#@LnBWPJ9`QED139{#9_pjp;bFWm=O}l2m_@?FUVZ9G^k(&^~%N{O5xDVpY&T>KggahYoshgG7Lw9hKT9s0wn>I?clb zyO40NFDd~K^~EF*;8vJ3z@viy5sYnam?x1aa~Y&>81jfaD8+8!U=+C=pODEiR6^uZ z-0#VUaEBxjzx#+JO2v8&Dr-1M1^!Kz*DI$U$B>i9UZ-l6)zxj7aHYZxGpgg?>a(AA^HP?WBGL zev*j93BhwDvit_Q6c&*%ELcV&Qfq|XCRio-p5O_=(^$ktllksc$FtX>jVU>S*k)(CRM4~qz22w2c}2<{YoL$FG4ui$>c1A>PHkCM5# z2OZ-M?j^^CMU5a|ENC7bg@B*IO_E%MMhy}v^{`+ei4@xbGFwhlBjV>sJR)2rao2T3 zgSgf7BXRtLqz^lV+<^zH$knK@NF@Dk5(n0RJmV9BC&^r+btM6h08irCBLM*(!y^J2 z?J#&r0mtImLj^}-L%l}(-GW_Et@NkCHtZxkfhz{}L&6f&FSr|%UJ~}@xXKcc^cRt5 zBM{8@L?9pf}>ZQHA7Y#t8 zw6nB7n4m9WH$+R{2X!?;8^2HKAYaf*_bFnThb%39svPbAc%QPlah+aH@Zc{wsHBSF zQo)HFGJ2$8>E7v<6uF!B+Y#jkhmIUoIz<+TJs)VAhV?-tRc{f@yK>YTsil9w7AS4P z2TGf`R@TQBJL;l6mWJk5d&Ogmq&g{Sbs*l!aWR!2U|dX0apu~1>(tVzE6Uad(wvz& zWlOEotaTVktR;Sg(K^N2^B-ZHOtH4_BjvHAk?R7^w5MF-l$BK_u1Ht&8m47o0LtKCL{O2h)7kQ=)(H0&+mSal)gd?s) z?r_Z48JYHwXIlKxKup?%fI8r4piSC0Sj$1XdQ5R6-~k`wtHZ}7LtPuMhdJ#HPKjR0 z`bdVaOAriaKu?nD72VvSn}164G{ns^s9NqEQe)}d6w?leV%p*6p|-k__4ZI1|Blda z0+KWTv5Y(f=WHk}%nNOvQ5f2^urM^V+J{ASt!@AN^!43^ne(Lno#xgI&2hS%dV@HJ zMm$UlX2#W@3zn`}ndoWJe&YV#B9O=a?*acQMjs ze4WvP%;=A)Nz(>@s{Co9+;QD?)U*v@R!O^=)G3jPyQ^Su_2q)qfiSO>8hx-Y)+EYL zlk1?<=6U`|s)TzvS*q-mXxl~C^E`0tL9m{rPk9Cdtdxn!9EOlYQ4(Vj|EqoY|6Ym!*g2)nF zNfp;+48yUVraLa{p;aAMB7FVa{lpX@2skSrABAYobNsE=*q2iNRC6dGVe06X6@5KR z^A>xK8@_sDX+`CTA*C=B#3b1Xh za?Kam7fgs*H5Jz_;__H8_7s<+I{Iy+KuoAh8x~ts_%@~)az=aCU6-9Rk}Y~ka8`H5 z$4g@dmi2+&VV$aFJ)81YO6@s5#1)q2I((%>zIE-#fZbK|HbV?eX>t-a+NRHy@cd47 z&T<-ZYu)&{GNCRBDcD0CZ~3 z@7Lb;LoZ(4Q(VDMMN9(R!KGLI>0c;VfaQ>X;0eWQ@q4~f4#>U}R@5eF`9PH`oj{FY z{EYcPelTg;N24YQ+P{yTL{tz%kkCB71#}ma{aNUHpi{u0|D#OybdPsKRKWVrh`<}D znu3}R_-Yo^i~wJ)f|~Z`R#e*O;d$Tqi3w3mn)Y>gJU83dH=lCbfDZV0ZTt)m_?R8k zwCCe=P}3MX(mm3Oh|M}*@C&D+niSBSPt8@HK&yqVoqDcK>!bEfc`hqI!9aW zvP5YSm~u3fYjur9dU<8-frss_TmBh3_~S9_pZgXwYTmt;$iMD#b>%J{hG&J~kG^z= z{s4*0bYc6~H0Up&@$92(w&efYr1|mX7PQ;2pC(;|LGVWpqwGOtoLaBD^!?C7k&8Tx z0Tw`yfNm%BR_M9V9}2xs+qcu&R{p2<)c-izj&F@eo8XV3r9=0`Q%lgd2kx>jgzgLb z;OT9E9tw>|d_DAi&=d6IwS=LT*1me^DJK6~HeLY6+4P2<4*Lhi@p;huOzunWa{m(a z+a~*?ciCTne)qP$1ruG(y&p?}9EMp}5ym_ef}f#-DYP0o92Z{joL*|YsEjzibC<5W zOJ9S|$8`}*gO13~;E!oKJOr(oi%kw5g@e`5!9-rBm8Qwz_pF6c4%{;rKZ27lp@Yq! z4bWGhZwmWRE&V=6xUT_m&Jsp!9SQyz>`dtPxMa9bFIPc#hsK%en$wOBgbqfVD{%*Z zJmwGRhfMbEkz_MX`u--3_ZlORd^q^C$-x@v;Ex{efqn}1!F2u{S~Iz?zsr3jV)`2F zV{t4`pf6)Ce)KQ5DeiSg;9w909V~_i+}ik6sPQCqc?kSv$2~C1{9LW$FInKm|lbIkGnOl9a2A~Gpt1X_PU&hNo`iS8FsyYS9Q-j6piatN~RD0dK04LKAa znMgOv5z0B|?dVFv{y`FF#L0chBEdC+dYj~Mv{O-!K>G%0!M(PML`3%r>TQ)MUwT_5 zJ9Zxu79WCK^WiJO9|bKa{cLqrNqEeO()D>i$cJ$AAQ8c?Bwp$CHcI%bw^1Tsy^Rta zLwopNEXb?S$F&_^rvY9%_mboAwoKw}wvL>DEI@4evf7V?xm!?ggM|K&dKSuxFpofC zraOJYOa!=w8sY3Dy(k0ZY;??ThWrnmiTfadcMV-g;6AqVnx67Ihe z`l=w;D&!e*4PyqVuTMWmGzoUWOEAsv!3mIykd@7m|BO*N4dC%A5(jJ$4v!1-8ev`s zvM^mB5z!w6e-sRW4A|BJEJk4@q4g$1aFEbr1RwE$_hX zOXS{XERnlcERowyUu&}252#xBF#)G7bulKKj7R@Xt>tfudBqN_Mw*q8rFl20owV&` z)^Pv&-<0=cZGJ#mB-^#014^_Oa$Q;4gI$%P(95cer-dtPkH;gm8`UdpPpW6*pwG<&|9TE2=Uq5GMbomHv(iSx0H<&ssY+Qes+@EdX+OkM>XL|j><}Syk zD3{dfftpyCrLh_5{+bH3x>@S6a6-4uuE7DNI0p z9Dv|^AQupBg(G=|G398_6e5`tB+r;svC&-;*$xF=Xub15JM;9yWAyTEkHEuNkukk+ zxh8YPx{WOAguZ^AqNTTiTBU7=ot^W`=V_m{Rg>*o@hG@JtA0z4&_bMQt6(AKs!aag zPIZu24H&a-Ewx1XH+EFNXqdsTGUSS#(B=ow>3mK(59(mxVTugnrVIi?}J*quGL!WLNG}p zn}en&49E%($lV^xetA%=_j)awbnpw?7dpJ6sz;&+Za&3yHk#T)9WQV7Pw%0AEBhwG z1shzFK$Z;ShpsKyp`G!QrS{mFgpIiwbdO3`{0#T2f>QXm-lXZ@Mw4cEJB-3dQ^SLu zcR9d#5AieX!%UhUL}=HyS>x>7U9Yw2t^PG}HFohFp%=Ja;3jM=yeyE1!Pm5(daK=9 zVZaIB0(9eW?8nIdu6@)8WZxhdhQ=95!P{j4HHzbWvJJkTkO{c&g0$x;k~kHedufmO z93bKTA0*tL7W_fj{~~yUM0gfNA~YEjyz-RkVT52;T6Dnk9_d7a3A)Hcyh8{*o`gFL z$>Y>rO7mrx=i3Qd1s&?fa$pG9HU=h|+HGF@+649E4kw&mm6R8FdW+?Zm!uQA2; z4ecx^-1chny|^ao;7w<(w4E&?dft?Io~aq#dvu-C&57UbiM92a=e+l-$=2X?qMK9= zRIfD7PKPTe%75s7b$a7?`Op5KGXTe<9vsi^u5sL^nDoGoW4&& zo749-Xmk302yISZtcPq)-y}&vI_L?EKzT{FhhA)oz+i3Y0=4bTG8pqp4(20!Mpl~i zyU@I{gZ3w(Uo`1!(0?&$_Ack$An2ZV^=kjO3)HXW%E_-Nd%|9=v}m&zsb#1q^&Gxr z>`9y?L4eEX&5{?>n0Ke*E_P^JF)PG5|a_+g(ZPP#Ap zd229lR@wg@)j#xY_5C}&!fgmizT|)@czrHuM0B$3|L~ytS)+U193Eyi22GQ{ePA+Z z`FBjfx#3e(q5d~MRzJP-&{4;jp7qCXoBI#1QwwDOJvHiS;Z)4(+3s^SqD6Wnu8{ur z+Ye1#GL%brp~}%OkYUiPp^phYQ+sN*t?lSdFb@7$y>Vzp@JG$AmSa)cXJDV#**DN{ zL$g|<<|l*&cn;Yibcp}dS+%Xj`bgnS|BdsiP4?fqpsu#dt;Iw8rQkhFM84*dIx9+) wQ~&7qc!qCUL%zD57|&Xx{oCy!HyhLOY!#C2y^xT(jV9F|m^{!dq=)_g0nLujA^-pY diff --git a/features/nanostack/FEATURE_LOWPAN_BORDER_ROUTER/TOOLCHAIN_GCC/TARGET_RTOS_M4_M7/libnanostack_arm-none-eabi-gcc_Cortex-M3_lowpan_border_router.a b/features/nanostack/FEATURE_LOWPAN_BORDER_ROUTER/TOOLCHAIN_GCC/TARGET_RTOS_M4_M7/libnanostack_arm-none-eabi-gcc_Cortex-M3_lowpan_border_router.a old mode 100644 new mode 100755 index 34467eba276f9818a711df414005d2f39f2f1e31..bdc90e5078dd35edebff0129ea271cd1698df79a GIT binary patch delta 97401 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
GJgN;)A2L@T)ou@uyn0}^|6=A*SmQaW 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%0AEBhwG z1shzFK$Z;ShpsKyp`G!QrS{mFgpIiwbdO3`{0#T2f>QXm-lXZ@Mw4cEJB-3dQ^SLu zcR9d#5AieX!%UhUL}=HyS>x>7U9Yw2t^PG}HFohFp%=Ja;3jM=yeyE1!Pm5(daK=9 zVZaIB0(9eW?8nIdu6@)8WZxhdhQ=95!P{j4HHzbWvJJkTkO{c&g0$x;k~kHedufmO z93bKTA0*tL7W_fj{~~yUM0gfNA~YEjyz-RkVT52;T6Dnk9_d7a3A)Hcyh8{*o`gFL z$>Y>rO7mrx=i3Qd1s&?fa$pG9HU=h|+HGF@+649E4kw&mm6R8FdW+?Zm!uQA2; z4ecx^-1chny|^ao;7w<(w4E&?dft?Io~aq#dvu-C&57UbiM92a=e+l-$=2X?qMK9= zRIfD7PKPTe%75s7b$a7?`Op5KGXTe<9vsi^u5sL^nDoGoW4&& zo749-Xmk302yISZtcPq)-y}&vI_L?EKzT{FhhA)oz+i3Y0=4bTG8pqp4(20!Mpl~i zyU@I{gZ3w(Uo`1!(0?&$_Ack$An2ZV^=kjO3)HXW%E_-Nd%|9=v}m&zsb#1q^&Gxr z>`9y?L4eEX&5{?>n0Ke*E_P^JF)PG5|a_+g(ZPP#Ap zd229lR@wg@)j#xY_5C}&!fgmizT|)@czrHuM0B$3|L~ytS)+U193Eyi22GQ{ePA+Z z`FBjfx#3e(q5d~MRzJP-&{4;jp7qCXoBI#1QwwDOJvHiS;Z)4(+3s^SqD6Wnu8{ur z+Ye1#GL%brp~}%OkYUiPp^phYQ+sN*t?lSdFb@7$y>Vzp@JG$AmSa)cXJDV#**DN{ zL$g|<<|l*&cn;Yibcp}dS+%Xj`bgnS|BdsiP4?fqpsu#dt;Iw8rQkhFM84*dIx9+) wQ~&7qc!qCUL%zD57|&Xx{oCy!HyhLOY!#C2y^xT(jV9F|m^{!dq=)_g0nLujA^-pY diff --git a/features/nanostack/FEATURE_LOWPAN_BORDER_ROUTER/TOOLCHAIN_IAR/TARGET_LIKE_CORTEX_M0/libnanostack_iccarm_Cortex-M0_lowpan_border_router.a b/features/nanostack/FEATURE_LOWPAN_BORDER_ROUTER/TOOLCHAIN_IAR/TARGET_LIKE_CORTEX_M0/libnanostack_iccarm_Cortex-M0_lowpan_border_router.a old mode 100644 new mode 100755 index b0894e82009d4a57ee518e0031d8b1291e76f3d4..64c1ab63355c47edd9505b67d5f46c50d1780dd8 GIT binary patch delta 262589 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≥3`_SI#V#PP#D`hpalBU%XIZ+(Xfu7R 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 LL}gMT;=ueb8`4Np delta 264357 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

c0yWh`2uy5l$h(;e3T_ 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 BKLG#$ diff --git a/features/nanostack/FEATURE_LOWPAN_BORDER_ROUTER/TOOLCHAIN_IAR/TARGET_RTOS_M4_M7/libnanostack_iccarm_Cortex-M3_lowpan_border_router.a b/features/nanostack/FEATURE_LOWPAN_BORDER_ROUTER/TOOLCHAIN_IAR/TARGET_RTOS_M4_M7/libnanostack_iccarm_Cortex-M3_lowpan_border_router.a old mode 100644 new mode 100755 index 9aabc250e5111052c31694e25a5cfc87f853c198..b6ffed778cd561df678c4b7d535f533ca1e70a07 GIT binary patch delta 253021 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

c0yWh`2uy5l$h(;e3T_ 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 BKLG#$ diff --git a/features/nanostack/FEATURE_LOWPAN_HOST/TOOLCHAIN_ARM/TARGET_LIKE_CORTEX_M0/libnanostack_armcc_Cortex-M0_lowpan_host.ar b/features/nanostack/FEATURE_LOWPAN_HOST/TOOLCHAIN_ARM/TARGET_LIKE_CORTEX_M0/libnanostack_armcc_Cortex-M0_lowpan_host.ar old mode 100644 new mode 100755 index 95e6798c1cc60abedf6817d96a6bfc77bb7a1398..b52b83611fcc008f37d41e25110691e5c2237748 GIT binary patch delta 80520 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

p|I>KbKb%e?6(TIrVXwLbmA-+Rg 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 AWdHyG delta 78040 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 I$OYH@ABn7ryZ`_I diff --git a/features/nanostack/FEATURE_LOWPAN_HOST/TOOLCHAIN_ARM/TARGET_M3/libnanostack_armcc_Cortex-M3_lowpan_host.ar b/features/nanostack/FEATURE_LOWPAN_HOST/TOOLCHAIN_ARM/TARGET_M3/libnanostack_armcc_Cortex-M3_lowpan_host.ar old mode 100644 new mode 100755 index 0553dec65ebe25a0898eb1f47740d352322ebaeb..dab67dd9fd261d6ffdf5e042dde9121e654f6d2a GIT binary patch delta 77918 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 diff --git a/features/nanostack/FEATURE_LOWPAN_HOST/TOOLCHAIN_ARM/TARGET_RTOS_M4_M7/libnanostack_armcc_Cortex-M3_lowpan_host.ar b/features/nanostack/FEATURE_LOWPAN_HOST/TOOLCHAIN_ARM/TARGET_RTOS_M4_M7/libnanostack_armcc_Cortex-M3_lowpan_host.ar old mode 100644 new mode 100755 index 0553dec65ebe25a0898eb1f47740d352322ebaeb..dab67dd9fd261d6ffdf5e042dde9121e654f6d2a GIT binary patch delta 77918 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 diff --git a/features/nanostack/FEATURE_LOWPAN_HOST/TOOLCHAIN_GCC/TARGET_LIKE_CORTEX_M0/libnanostack_arm-none-eabi-gcc_Cortex-M0_lowpan_host.a b/features/nanostack/FEATURE_LOWPAN_HOST/TOOLCHAIN_GCC/TARGET_LIKE_CORTEX_M0/libnanostack_arm-none-eabi-gcc_Cortex-M0_lowpan_host.a old mode 100644 new mode 100755 index 5e2510f12ad44b808c477f14988782c9c1429c66..062bff06d808b2b67c3bf05ffc1135bea3fbe531 GIT binary patch delta 64386 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 delta 62584 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%0A|AaW=Pem(D@pt3XNGMl* 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 LiqQv3Z{`01aei_3 diff --git a/features/nanostack/FEATURE_LOWPAN_HOST/TOOLCHAIN_GCC/TARGET_M3/libnanostack_arm-none-eabi-gcc_Cortex-M3_lowpan_host.a b/features/nanostack/FEATURE_LOWPAN_HOST/TOOLCHAIN_GCC/TARGET_M3/libnanostack_arm-none-eabi-gcc_Cortex-M3_lowpan_host.a old mode 100644 new mode 100755 index 8b14a42de967ff2c55c7c38432e32425ff06e8e8..e11a2b71871b03dbd35b641b817b0d792e26c95b GIT binary patch delta 62286 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 delta 60843 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 diff --git a/features/nanostack/FEATURE_LOWPAN_HOST/TOOLCHAIN_GCC/TARGET_RTOS_M4_M7/libnanostack_arm-none-eabi-gcc_Cortex-M3_lowpan_host.a b/features/nanostack/FEATURE_LOWPAN_HOST/TOOLCHAIN_GCC/TARGET_RTOS_M4_M7/libnanostack_arm-none-eabi-gcc_Cortex-M3_lowpan_host.a old mode 100644 new mode 100755 index 8b14a42de967ff2c55c7c38432e32425ff06e8e8..e11a2b71871b03dbd35b641b817b0d792e26c95b GIT binary patch delta 62286 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 delta 60843 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 diff --git a/features/nanostack/FEATURE_LOWPAN_HOST/TOOLCHAIN_IAR/TARGET_LIKE_CORTEX_M0/libnanostack_iccarm_Cortex-M0_lowpan_host.a b/features/nanostack/FEATURE_LOWPAN_HOST/TOOLCHAIN_IAR/TARGET_LIKE_CORTEX_M0/libnanostack_iccarm_Cortex-M0_lowpan_host.a old mode 100644 new mode 100755 index ad21529689a39af107b7ea656281eb006890bc2d..24080c7d3af5a5a44e169096fa974aa8e456ba2e GIT binary patch delta 176717 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

k#i;HD+5ECrXnG(qTNY>h`XiD@?AIs5lNnpe$ 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

E-|yc8-hA|8Adag(JvfKi#iCj~Gp#F{-Z)wGxK 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%0DSLtB*?Ak~$m?$7Hy?>OeIMAR#yNL99z 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 Nqvmrgj>#66{2vHNyr=*G diff --git a/features/nanostack/FEATURE_LOWPAN_HOST/TOOLCHAIN_IAR/TARGET_M3/libnanostack_iccarm_Cortex-M3_lowpan_host.a b/features/nanostack/FEATURE_LOWPAN_HOST/TOOLCHAIN_IAR/TARGET_M3/libnanostack_iccarm_Cortex-M3_lowpan_host.a old mode 100644 new mode 100755 index d76a2dc63f4f47e248774fc499109c8c4eeaafee..9d331b9fe5a2dc5c4e558dd35ebd989a5731f700 GIT binary patch delta 168261 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

`WD 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

UeT>Ho^?B~u4`t;iAz;r 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 diff --git a/features/nanostack/FEATURE_LOWPAN_HOST/TOOLCHAIN_IAR/TARGET_RTOS_M4_M7/libnanostack_iccarm_Cortex-M3_lowpan_host.a b/features/nanostack/FEATURE_LOWPAN_HOST/TOOLCHAIN_IAR/TARGET_RTOS_M4_M7/libnanostack_iccarm_Cortex-M3_lowpan_host.a old mode 100644 new mode 100755 index d76a2dc63f4f47e248774fc499109c8c4eeaafee..9d331b9fe5a2dc5c4e558dd35ebd989a5731f700 GIT binary patch delta 168261 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

`WD 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

UeT>Ho^?B~u4`t;iAz;r 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 diff --git a/features/nanostack/FEATURE_LOWPAN_ROUTER/TOOLCHAIN_ARM/TARGET_LIKE_CORTEX_M0/libnanostack_armcc_Cortex-M0_lowpan_router.ar b/features/nanostack/FEATURE_LOWPAN_ROUTER/TOOLCHAIN_ARM/TARGET_LIKE_CORTEX_M0/libnanostack_armcc_Cortex-M0_lowpan_router.ar old mode 100644 new mode 100755 index 53b6b263780218f8174db2b1daabc0764a4b81a8..c0e19cd07ad252e9dcdede7a21497c774b603b40 GIT binary patch delta 94255 zcmce92|$$9-u^l7I~$t}g0d@Gmy4$p zw){PzYJjtE-`*DbWd|~*d!4aI=l{8?OJJ;}I(!>r|4ZfkrvY4ihOz&ga{fz!^9lQy zre?gx`1PtZo$)_YkN?WJU%imP_?t(ssnc5+KkcM{TB!2~tfl&82jl-q<@`4Wu5?_= z{-Nr%geiZboPTDajNHKfp_=?XQ~rI*`R@ztnMF+bGqvXwQ~sfH{+Y%9!2COuj9)c> z%9Q^?sliK_rksAwe+T3zk0^O)PJm; ze`fK2WbXXal>P4$aHb1W|Cw@L@8HL&O#MGp&X$qstm*9kSULY^5#~L^bbd7#`j)D= zlIdEi75kX(PnGjJ%MBGw_kXFJ|Cf=qjO)D(Ob6wpfBx6%>vc@`U#XvaGTlE`sQ-U# z@u%kc-~@J6MR#HP|B1TwDAQ}o>DT<5vGf_H|7U950H$}+KP{E}Tc-b4)&8kW?^g#< z68}sc|CH%TH7QL0^F(IgzcQzxbx-zhRXt*u;a^wI|Bhp3Nc-u(r|y1@8U9P<{AUjS z!}iYA-I>9!)}LdBf2Q2?nc-hmy8@ZvpD5=)bMSAs|K(j~xTaA5*T|phjhzzMe?~d~ zQvv^r;X40gIs4ZV;55#i&;BFo$rxrN_1tA7Cwel|e@A^$$xQ!>`WrG$%IVkq zA7g<2PDaY<*IdPRTUfw9QUf=zfPa@7zljC7J|&gx*ZdKm+Q9<+YDWSKc=2Vwa#{Ap zxt#lg_aujZsklRpdD*CFv65mV<*nKEI@?83PVCrp|%Z+0Oi zRkXiL=_ZoyQUdlAkNt}pICak41vzsk=gpobwqzMP?wN3Jxglxpl$^;EX5~zpP*9jt zSith<&MBNTY0gX^ov>hT9!lq`wWuoMk$W!Wbc__I2bfH1LEa+QuA-7Rb0+PvJ`imTo-t+N1caPZm^Wwko`lLLLk#`;^zGNXzqo&0K;)kD zk37eDiRBp_c01NkWtHJfb;{{xGWjs;L<6N&l@d?6w^vMwj;_D}?+WaBL>Q_R8 zS{Ov>l6&^)Ck}jNwDV4TzJJT3i*IsY$TC|f600LzLv!8Yy{#M(4!y%*JLhWrOAr2z zE9}S!XY<|=2f1VRa1T%TN%`5V%MJFjq!5p#vRKI5)nm+R*Fxo1%Zzsv6MTBt@Bq6O61U{nF(}P< zzyHrWB0a{X_bc$uQ~ch236b7i9~|kxQ(b>M(m|=$xuV|7<+EL7?@i-l_I&wX3U|eQ zU=c%|x;2k`KhUk)ZqnbQXKaw*myEG|gJ^h74HuqxZsNzT>GiD*jNK#B8gx-Q=we)9 z&x9-G2Ju;6V_Uw-RdOs=|1Qi&i33qQQXgYvY>cKwybZ@<`4-nV$2#jrniy*(9z3dB z=G+*-uKslF(v=M@IAff-!1J%V;Ee2-w%}y{c?(YV-?!jo|AXo`@cEyqyULwf1mln% z-_Pg3&ln3}l?Z@-IIm|a{#z+Ig`qP2b=<&~N_+C7A_Fu2zynzG)wsxo^U{^y71H=3 z;PCQU3kRGT*&Eouqmx!>Rv|kEtMUi)r zd?NVG;Hi=i0bdPH?wu5X3WGObfSU&`z{6-jvyi-=l5Ylo47``*bHS6)QoBoj6ZpN< zawTsMF2HY;{37(nTkwO>hr1&cfSgpN@=IGp9+2}O1%~9>&x*hG!iOeUjhQyt#IJ~QQh{xjwg!e z-!;Sw^G!x`*smx#|F1RNej&DZTL&a=;>N>mi*YQ=Z5hvqCzhjCyZ0vPb8RExf z#(3A}ljg9f>#X!*)?W~Np^KYSozjfpA6B(i!<=cTZt9Z5RUf& z)hs;6b>^^xR0i@#o}Um?*7Nv>Q(|dw$sDXCNcIKLJ!Pf%!B{}(LT(C(-?~)yooUj;Se-6!h6xA z2&XVMlyLH%Q>WK)=Y6RCz|o8?A-s<JwcjV82gD30a(zqh<7LKgMcOGN?c5s z#@KQ~xZ6fJp0QU6a~S)Ia3W&{G|51;NHZZihlLP#j=c!c`3iwbs~`+Tq`85y#e44f z%*dTXQ6oxgWQ4F4W7(2VmVB|~rIJ@mzFG2}lD{bVVabn3en#^1l4Fq6;?ohf!Z;Hr z4JSr3U05(jE{Ja2YA|4nCQTa38zb6tXdKSqf%vFmX|M_nvq?+gC9+CedP5<8rR zNY|8aTgx?%tL&9%^#-hXtV?)jKFW3A+Yy*fL%$o(*`8V74OEl^I@dFox`F-m(#^_k zx@Va!(a}$?a@0@s)wEX0UaouA(89dkC+aq3JFDVra~&BKDGvQ6v*wQ3&7NEbUu1I_ zHJ{+Yk%n-`mFm=xzt-+x5K^3b^Mo`)yLcqxH|mW zIqVV5rwPlg`V3Ru&wEQ;_x@_-54lQy9XN2MJ5XDba&1x8KlhzgIWcAFhEGU@BF_B0cjeAtM_^}@Rsec7#r3yeJ9ip8_Rc%Tuu}Ih>3XCkb$q?i;jvcepYi7U zmXt$WL;gNuP?TqY!|L$)<_^|F=jm5juj9wLg?SYVv(0cA-^g{;S6Cfy?6x}$o5*j@ znOhnijeER%&i_4^cTnuchL+(n&)_C&g)bIf#q2+OzIToOJ&mt&xqiQcA9a2CyA{jZ zpvzs80`%{M!o@lT)%wR6>YMD294(zY&-v0`@5;H{U#VZ^+I%_Y-Zxg+9XpeCT4I>J zQ$w_Ozj5_(X7gu+*_V5=Wi~4sT9|i;argtCaL!oG494U8jrwCD7Wh0vU0VSW3ZhR#bLa2(EC~HHu7t*9TCrm z@m=v--B0*yDJjBZr$zVikrsv;Xytj#{irBu&0}NT?hVqB)e);z^LJRY8(4zpDY2(D zzk^qafN-AEd7<0rHCg%GKrh7+YBzki&^=!Ib*O)PNh@81RyiGUEZeM|7 zUeMMq0CrI{#$qKN9L89s*!4b-WL~F`{v?v8||DrkeO-aiATd+l0X@T^xvq_B6EjXqY~p?0>7zs8**)aYPG z+m_K-Og{oX95qC|5BOQ6oOTJs+kuBtTa^4q=)Z$(s`JghO|Ep9*`hrcj9xM zOLV@C!fy2L2dTru4Q-v)L;tnx@x%ckcWU=J=;3eSgB_9R;2za{W-M~Kq z_h&!>ABbhlGt&MP8v9xBnP?`I;Ag-`w{u?0(NY-9LW?bu9;_zvmeCU6%TY%9ql zz_(hi?d2|pFt!)mUqT1L8^GbrSEAsbfzwDr30MTa(PF!{nahU3JK)2mhoRu%wI!YT zhr!PC=(>S+oHziL4;gDFMA^@T8wJIhPuLZuMTnkKN|=Y0IpK74Wx^heO+{(~2cjtu zz6yK7YOD?kQ59PVlaXo3_Y>|zH60<%3dTMnL|glw5N+x*;SenCQQUz~A@_s`FoAFv zcCv(UH;xeQ77-#N%LxZDwu$f+L`aAP)JuMXa4los5?WDB3K|rpESNAA-IWjlCJ^3? z4He;5Y?TQS;Z#B-sF2W&hzSK_<%CG!X2R#ObtZg{v4hh56yXlUhfYEpxo(8czhbjO znr_&!5h8%;(!p|x&k=6II75h5`8nZCoVlqAD0h zTB@R6got1wA>3^y{3{Yn_y|gpuqW#OoKM4kkPdz&OhFxD$PGM*eot7vg zz}Q^EmoV~4^BRfI5TbFuNVp!uFX1v&1>thcH-s2+j}oFJJ|#r>&4dWw9*3%NMq!8~ z4eI9zVOO*T%ngARXk3I3VIU%ehh&L;2(!>ur2TM0L@d1 zF%l;dB4^VHS7T@+ z(GlK*r5)j2=q-eIW2HrilA1_}0Ou2;DoQ0^CvlTBe~J(Z-$953z3h|*^@M1I?-C-Q zql9SvzX7#z!3Mk!IRH|T?vS{ja6XEXa1L6#H1|sUO4>7Y!NA#A0mt}60%d`enQm$K|*+ZUz&eJh@5;y*bO5i;URQiOy$(yBM6b;p@eT? zq$EV$=Mom7{ufCHYY3B&LqY_!n-B?jpYRYSp-w;qu#J!sMu>>_5f-B4q`61(j|kDI z&l9df!U!Kln@T`Q=3(e1oF0o-OqwXnYJ`y(atV7Og4(+W^EcY@Bck2C*p0EybS$>D z+1Np^gLcuigEL+#*4~Tl-g5C0L6m3&C>?vcT78qiZxkuxV7OA;O>mbeBk+jr1lghi zpwGV@k-Jjf>cB4u>v(t#nklv%Get%A(%xP8|4Hf9*LORKW3tHFs`315|6L&&i0V8( zhL?zM^7ueN;&lE6HsB#M_|t&BGx!v~q&9XYza3YXV$Ll78IP>JbvEA_dhO^fQrADZ zUoT-4aNK;?$~P-WNrKlZSU2`Q2Zr!x}wt1LRzQj>3WunrUB+N3a|mDEzRmNe z&SKpYJXNNp z$euq`FTP&Rdk@>_u92R7xxHLx=&Cj}#yzj)#-AGQPgVR<94lHKLzCGfzEqy`thMs; z%VN?BUSKRq4vErLuM(fE;KSM#x$l!9zx4SM_oznS9rz0O-6$^{f0XkZl8dvl+NDNW z%EcGinW;t0cpy|3xjoW%WqxdDkzzGv?95lIDN^As=lw#T_HaW$sFE1tq5JJH@nt#B ziZOajXoY6G-h&&7e7zY&kG8V_?+MGdE*YI~u)Xd(EVlak00puBq|RcQSDTp{ms(V2SQTpV zq#9ZsGuifv2UlVEcwD@*iht53-#rs$HqWa%n3sF+cmLc}?9LUhRPe-hCH-p3X-qiN zu+y1p3_Z@POBXZys0O`vj{8o*SL5{W7SU-nzg@k{-A@#+=F!n(+$mX#)?m3cLPKBi zE)&nM<|Rq}+@sFvs|OFSH?_Bic=Q{yObZeNfnkY@Jp&SpJ%+?Zo*+jbcVg25?;>&g z8h%{te2_=<4fKY1L%p_g{l=7hv$tKAwVYW~@epI+#d?2! zVr+?+@*wXKUw+2oSboO5Hv-k^Ye9;KFSO>DwlmjZ#VIarR#(@Ks^mX$eo+jo!Yn`+ zv+c#&%SyNy@eMa6wlZQdV4`ES;^q1kx^nda9ImB@&sClY3@=U#x_ZnuPVA}T$8&yy zQ{Rs>x^j&OyvAPuUlVkVll}S@oa{}l{%C)(1t)%CAwFI#T*q&>Qex>qph(3L z3niTU_#E(1N_g!z>v)sm^diu}E?E7*o_4-{Bx+ZP;IB#^r@%fD*WiROpHGOX+9Ubr zgqZ&?6ZXIqi+E^CzmE{^>3)dpD7sbR+DGMJr(n79t}_(+QhG zLIgl}_T+IBVFK0zgoxk>A?%M5cE@6p5bn+s4#4p>;Xo8AN|^2-dl4eyQH04jKal7q z?1*hR;f+o#nb0_>xOx)y^R=r$?ER{VXCP;UD2W#(zDsCD&VWih){2DfaGVza48=l* z5DmnPMy7-y$3XJ$k@%^^2sE-lCoJf?j{;031iy_C^);0+0w*4XU9m8dF zgujE5pOE~FS(F31tSYQBAD7l~YU}8Swc3|i{)sKjb8bYCZF`)bxAp|IV9_34t%I*ZN5~_=n{--ojL40}5h|0`&eLI`yB++BkQexnAbm9!lSs{)ES(tp0=JH+YhqTD zgCzxdlqA(-N>UrR4Og8ubB2Bs>!Ns6uWD;X z)l~;X1#9U#zgvhmU*KJ_-n{eze~E{RXLs^wXHR#ptv>O-Qg5#smaD63U0oVyu1eNQ zh&yUl+545H&u!3_zVj?j!*<>CY%TAte}N0-VYMp7!EC0KNqH9S0<%?>#TmFA_R@~q zqEa50c1o49u~l_il({-23d`schQ&%|z~WNWW1b_kP^9nTc3prDH;GGj@$Rkn6kRNe zRql>TjWVi3f>?EbhuE=;ThkV+R_-+|rs_v1g)cXm7ISNJ6ZDItq}f@GnI)SQ_ld@- zIg$@y-pw-t7VG?U+-@G#CA69)DxPnxJU=xq&k?Yg=jS=H7N_CgfRfTUmdHJR8?j|K zkIY`28ut#CF?tU4=m7?Xs8I2Z9AjeQ%G& z>bn(2wyR8NqInKQJXrRAS->`ZRnRsA+JI>Rv*xyzD{UR*7SbwMMOk`B5x$pqO1SA< zyt|!T-Wt8_-7!+{6OHh7?i|;5r143{f0^THtqJ&K+|so7xyhwV>(TwDe?N);2qO|_M3^B4mYDOwQ^FIxI z7G+-{mASRqXggEZRjL8CVta_(3&z0tL32iv7lK7m& zS0%nHkLkJIELYQ|!#>rz9Ap#^(ygvAFn6B5E4X^|8Vjg(_As36CKR#{z+{4bFOK z5s1nEC}9Vja7z4v5CQk0wHs!8ZBd9tgeK^QR=1MO5n)>@X!yUA5E-Z@?1YRE;tXlG z(dpB?Mh0zhS3`(^nhCMuFrn&b>C~FABZ`y|5qFcQt^Hu$k2uzH4nnxUQ{q%YM7$md z!BslG`O8DtV@` zp4X2OLyCAeF=V=_YwhOOa9R|FHwi_B6XwjA09k$r`p?RrJEfoiGWE3wUgy~ZzDz+BE^M+Jp8&vP~SeDRbMGPE&iVGD?EC<0P24PP-JyrA z?`&pPyJTq_bk$b9YWq!`)f;Ma%Y~M`$XhTgF3M|mh}<{%6P=QA>XYoSYIC$D*PLw0 z?(8+${M?ir@rq`@=>`Nz+j$iL*<(GokLyT3~ba25AVT` z*VcJZw>g0{s-REV3DKu|Nt{cF&i)J`hRuD_{4I&cBz`OLS3-o-ibfj@2HGfv@HUH$ zM|r&SIi!LHJCDRMG^U`Ht|WxBap+ex=6p_wvFIzp&e$yz!ak6O2n!}bLK~7Rc~3&x ztVkSAh#_GnA;PaD42M+72GU^A(}ZL(D7{4-c!V$kgC3!kvD1?OP@DH5@2f*s-uhQ` ztZb9m(nCqmPsTVfR2)EO)o;TX9w81a#u0Mz2_B3}9ee`2mcv1Gw5|Ufo!7U^3F(H; zOM^N_Iu=2l7fwHcQ~gjBNWN%H#!l%)k#rI!hhQ?FPP_F3kof&t7goLx7bBekQR20e zJgh|@j#B&gO!l2f?-bFe_*Qj@+ac;s@ex6fSxu=y8&`2t#&;sv!DXskmM4fu?k z^=;9NY+|%iiRAsns1jqO@O-E@i}9afleb2!_>50#cLI5()0I`gNOCTDA+W#Dd-*FV z1{epTXv~Bt8yZfjhPo3X_u9k>PNE~k=ht5H@~;*Co7j3m7rr4EeI;4&GblA`vuRqT z@Off1OmLdKkf26vC3_R^Y1u)ZVp?O0US@C^v6nTjSypN)uLu1YY(L;e~RPJG6GnL?u+O{^JMSa4YMzqCLo%~W z{R1H8tM@35o5bDImHy6>p7oV$qOi{2S-P7gC{;bYIYpMD_t^c>mAhF|SC6u>GTnZ{ zX16swU1UyDJW<#jMtW0wC?_Mlr9E1o@D|nM+*_@x(ROi)gIjo&p}K>^bORHEl2vW< zsq+qY$H|mVj#jG6(~o>eo7127Mg}?#R+d$=PPfIB)JD!w-d1$92N&L1$_73|ESRm# z;iE;DI9+?9ccd&z~4I z{&^9-NZGDjt`mnADYlz0*Ck%v#93x(S+ZEBT&@erWV!jnBCMs!Wd)P12MTzx*@mlu z0%MjbW%%Nyg%uS`msRAY=e(P@G^e6Cy%0O++LU7DZM}6VyKXZ!EWEHNyqIA+)3ys6 zM06Rt+a{4#hCFyhPMH#mv8M!}ABS1MB&@0~oKF_J%9O|?i}cl=mTy|fMc1}@L&N7! zY!UKoafw3yRYWgE$RkDnrAlY(T^Q_Wck+k*VOscne{w2C8JsCc!o`q8eOpn#R59tB zv5p@kb}70@eJ`x%5;QHz^)5qF-J;zxC0?J4dG%dddBpObVmwUR9L6G?MrMD=UxC-- zPEBds`WB>K+edW+K7&Q|8K3ZLB^L6SlQjX@oj?+ONyct7T>Q378R|TS`O)`-tRDvV zHMC;Yet78y{v1t$l9PRN3r_YIk@uGNlQ9AKIoX?#5)w+s9F0Z%O-6;CZ!cS13KWQy?$2_NRHQ6!~}r$^m!8 zv!QQCoIB&0^x&ceY86#L?&w($3F-7B%)_Y&;T%*4;WS7f5Dv$dmT)xW zFbI**=Lm;kRY^Dl@>7Hhu+250E-B?v61CHOcoYg=B5I5hDCsBu*wo!sZh?5fO=?22O|Ap>#kUPszaP0AV?94+w{1 zjY)_qIYEdjq76JHs4XE9WFgGN=>#E)xDO%1&m}<@yg{T5T1UQZm0nU_M6In$9Dx|w@gy8kk-B*$~6C!*T21NK# zgh)tx!UAM0jE*^w!rP?9RKn5N>k!_L91wQGR)cU9bthlZ_aa0U4JAbB(bz{tKb!DY z^cKP~C|SZgP_+{GN%MM%hn-S$ln^;RLpT+~dAKitE`&&6Pswi~ggZ@ybqX%`h)+gI zNOO|K4;+aiC%gsQO~Ncl4H9AqXoap!8HyvEg!;FW21Sxi2#3=N(IyrVq6*3h5n&Z! zF*b>Wa9>Y|gncS`FlH>e6^tTWjqXVZccTbV%9Vt0UqhIH#!c7-_3t4K9G)RW-G48+ zp)Gh7COyKr=thJ%{2NMGh9W1dKtc)UBY}jNA)g?GyPbqMH2jSa-82|IL`lOQh7eU| zCk(|v;DLs6{FTIJ!ue1rF2V>xlt6pQ(+Lq#CgCD%ehA@ziL_rX%?|-7B9btrwsNL6 z>0#w{?mVM{qnghXqQM92eB4Y3-c9mk$+fdTxYy49U|%Th>G+r2ZeCVm;8j} zr+wVXevk&u(t%m;O90(aQ-H~m_mX^+=(z{+#58B|oBZbjcIa z;IwAodTsa8+Qrq%pb%wHv}?;t9eA|3?_O-+3sH;RNIb2Bo@7qu#IZC zYt+kT?8Zx;QaT%sbwQ1qT$L}|l;3)ak>ivEgYE{jQpNS@%QpR?-dHNoUfqz?2j>UD zuI{hc^jFf+m|z$#mOridPTc%kyceHVGJF@2SGRb*Z|K=eq;1sOMcOWGuOez!?^62X zysh@l-AX6IulFb+bpH0si&!p~h!K00fuSWSsZn8$%h;*tv@<%f7nfVGOnOQAg|Dma z{IYVKW2<;sTzN%#1?I23s*F}&alb4=>y&8qHTNFTwN5F4#r8TSzVBo1)pB37+pFvG z+lMJd2j<^j#1{;(`tLmhJde1S`nQSJwwiRxW^tuX8R*RQBsfz0TwGFakM{(hF12^} z=uUI{5RYQdY#8S)v-k3>uxB&`dso@xVDkXv)K=ODHnjFWVju0$($lXS6asDbEs8>1}7I>F> z@g0I!UsqlgnTM2Q@m#%<99{z9FjmE|r-h7?7aPdBzl-ncmC-2Pv;)|2d)-Z9!U5$h zA1rPGP!D8VXNKc8_^M+zoZ+2&izrLaL*3&`a zU=emmNzs+`^OlPj4=G*365X~x>}24%lqblA%9 z_ps~w7ORy_!up;PsjLhYFMPw>ic#-j8`K>GL51(6D*rttSic{47N#7QuUzG^!ql?u)1?_91v9%#qKN(Y6AD^q>_m$tA6#>5d)4z0u_CO2Huzy$% zJ`+Qp@5dS0A8WzMp3X8`+JE1Ilf4b9rTxll+^I#d1Ot9c2Qx8V`Z)zaPfYxr5^%8v zC;OwAty~miPZ~$;aLSAB*F(Pif{siM#^- z2xKVJs^I{0E~KLdOq5?C$y5ODtw-!n045btpzn>1LO01tRw@Vl zg5-z6M_|40#*M6&qE}(?9kqBF;d9`t&<3889@c{Qpq4NBLhzTU+NXm*4gQ+sDd1D6BXF#-sL1lrDBxFq&&0qY;lTf+?|1wibFTkKoW#ofKjMG6 zj_P-4!(|e6qjtK__Uv{_CsGFv}W=D zD9~4~lie)$91zXj}dtMca5CKO%mdsE>EW;ma&fUT5{N z2%#^tl;XQEu9>jUy3W40h)%*?QJ6?tt;DCCLg4-%MO1$scVEZXh$meXBJV(IPAY@f-d!4e4AzeapibGJ{IQ) zByg_S@R8D&=Zp70QicKA{#Aqf{)$O1Uu^lS@-)D40>_;*#9ILJxDx#(aJCqE67%={ zV*W|xRy-Ad>m<$zXNi%gV3;rFpTfanzWC^r67QTVMc+mshv+4=UDtNQW3k0UC&6tG zyOGd_(;C9g*e?)b1%40VWUQ_Ur()zL#L|x*h0->ml5id_y9h@hd_pYu4-*z*ZwYkL zuKGL~U`O;5A+lh?2u+-1=qN!^grl%}BpiW_5Mc%qLP!x4-hpK|;b`nHfV2vxk)6z| z2yaD32?yXDgD?{#xwg55!38q769*227?^BkAOf}%jzmO+S#pyL_u8fw?$?nyaFfKR z2w{Ji5D|N%xwhH86=t+Yh5HCXxbtmp;jkYW0Mn&Kw#3;ImlC2$tRozX!AzR(BuvLx zLx=<)B1D3{gviMEgm>fOj}Rr-9^(>~L^>f7FjCvxLPHNXsYs?viy}gJs3e?&918kt zkAUvKe9f!SmWs3sN{4_!oyZmb_kF)+ka+L{ z4xod3i0&tOfFM#n|*-A~F5?Y_v=mYy&uo6Ztd&+s)FYmP<@U#>Xp*3)9h&&vHAH>y7? zBVwM{x5Ae?e1eWoXR+LXTvN<1#UiR%xd-2-C}>uup^!grRwj(RPkSO@w$(&& zpD3i&V&Qj8n`nnre_(@s&6lg`D~G;iaQ1RC)!`Dz_t_KT$@kxqmAo=wr3tRi7mJm@ zD08v%`1>!)B%UfJ{Hoj#W%1aM#$3mf(T6RldC@5jO|TI$s=uF(|nAh>@8)D`>}@J-Tv zG`I^3gd>vw0R04*)kuC6{0jIW$?L%fQX+t~zIY0V-`+^|Ztg6Hjt+C&gc!UjP&zg_ zC6R;~NUkY{Fp*X%z)&QXup{~Iu%?npVw7z`)G_&ACX#|U>3cEHgEAtE4gJ4#puAriEX5DD5sh=gpD zc!&@Q*F-3Q&BT$g2$V=*)Xf<4NP_@65~AyAPXtgB(}^RZazZO+4MGZt5G8h+5biG% z!o9BcB}MIG^mn=Y&+^E9fodNE_E~++>RxQSzA>w@3U7lC;;1WN`cSyq#21SN5$YZI z9L;+XYErnfpU%dttjgCYo9nnWLWHzYpX3o@PaBoq^?lq%orWMX+NuIUeB4(35eFF! zk!m#U=e~|o-v;c7R_Wp0chPEBKx~XU3I3fiY9e5JjM@p2eh{O!fw=bB7&S1aMT*CY zTY9T8ePYp9sc+C;n|oe;oO$aWuXn#Gr52b4pRlU>J`dl;@U-dK)sZ5llxk~wtG6gT zr1qP>>Zd9$AsdgNCtx~b!*PeE#_DUJZAG8L;X8z7kQxh-nL&fp&icb>3vf*m52K2{Es(BQ&Ec)sO}=`A$M3A|OPUI!%Z^t#v8ttH=Sln@ET*R!WEjttSjYA0No!QO5`R za+s|wO&>%N0YhS*gCajc$jV~P?Z9IEdl zZJ6k&kEy-;CX3H*R=SAo4)t+fRy$&tI+!}c>P$5U5-Q(hq8CKeMrR>WFdaNx9fGN* zWVpI9JmhFV%;Bg9c4s>pbL)9P)cNQV(e-Ba=FqK~W$7HV%CqO5!EOB#vEpVmzEfEW zMAUuV!s5;L_0V;h_Hw&p^|?!XD|QA}Lykebb2DN^Ft?~*076Ho?*Q=1wbQ=x&5? zr@df84R0on@aR04!rwuNCcK{z;k@fZCp$$NE7otQUTPw}2obR+X@-PMCk_uAB)SRV zUVF&|d+h}i4uDUQITD~rq}efAOKw0}(6bwQF~sqE)y^C4Rdsx*Ncq~(0kRaMVWK~V<`%4-LqoP;D@@R0-yt|8E&-Gyp`!f- zLjv9%r;USi`qWCH_9FVQSPKKi6E5E0sYFKQ&+ju~>dZL{y3grh!B0MkmW^`Xc(upX z(`Ra>`ji`z`}Y)lXn?(EGSb{a0<;xcy?L*WCE<|Ja%Y4!GvoKHv?x;^M6}QZO*uA4 zs(5y)iszv-ee0Fxrp7F035dr-j=JW(pN=#-dgb==dS^hY&_gb~ld_>VYWnO+s<&*; z)=6Yu1JmXP3U0(SHRBG7t<%i?=|49dgy2~-WKdttY~yI<(B-!Bk{zU78Y~q%@i4}0 z>o13RT5NTk$+~?DK@ohR+2QlIBeRu*b<*XAc_YNxX{uG}I8&H%)qbduv|JVM=_Xqp zN^WY3Z8Gb^J)au?+V4bE+?6g8lV9pgwQgY3*Df6COQCDzw(vy>> zOzKpgFpuK7ym#1)5QomuT=`OEYE0>FUS)MyQY;TXwVJKPiI-<*I@%CUN4J%;jVlZG zSN>928oe?-`@tKJGPAv(r*U;f^wRWRC(~joci$i`<*L!nl?CUPb@$>VY*T4*THM+K z)gFGb&^_tuB$quedj_TI|1ZMJb#vW!OLvN;X2su{uu;#n|vjo*EzCxR@8P>aB~*3jJ*$ zMZBG-c5?cYaJkOzNKGztatPUc-LxN>+h2aU4j*N;9#~ekqPs0@%;hHY-i(sycqP&J z;SjeKuj4843cku{u2U=3j%PAhSH0&(cdWEAc`eEHcm-`Zp6YHZ%`6T)Hno@`UzAaz zbMUUtc&!n2a#(uTN38hAeEPp(8UTd5CPHRaAhp3#cem*P?!y!fXuQtK+#os|> z@_a!;d4Amw?q+$uo-aO_p$>FH%FLl>!#qwcNF5vMnYI*9g!9d|>^R?!AOfE`wE6~O zdtcm%@M24!6bK-FS(sM5t1z{ATcO!zclg})SjzF8@4R`I^i|A=epjWY6uH#U? zk^h&brOv>Nr3-wF!Mqu#?C1xb{RvO-*ekM^(mB2FdjymTi{s11mSkSAU8`wF#`BrU zxX`H2O>p>=;6xhA!z`(Nk{9Hb=S$({F&XAT_(o{jQtu31XJfv12EF1-)dcLkGYkm7QL6;+jIF@3Lhp>_lN)E4 zP}*Uh;UaIg8tTk-50wFv2adtjIL}gv0k)xW#?Ka0xxbeV%u0=-;`Yvn_E7iCGG(!{ z1zv63*j5~AO^qu{-Bz%A_v0%jxO>PDbKFT%*IeiC(r23d8K4o>;B-VfLLB~EAgd?B zwkwK?Ey9-KsL^!YEM?>Q9n@B?SjS<1%zA`)E>`Zs(8zTG!2zDU>1=muRPIEaS~R4_ z7mLO;Hs&rt)YzKWeZrZ=_}A3g5u7Vx~@emB4ixQ?J*y7K(K>5sCwf(?!1ch=!Q;?oEi91PH&dj7UM1*Lri>dZ8~c>w~Wgf>)fP- z@*M^7-fUDaKe0g@t)Ie(on(Fcp@4CGtu}7KjektqQ9v$@4XvGc4eq|PgQLpg8%fR= zml{7m4jFAslpkg4a#^=qJgMIO>B`Ca*qRlIUWTBv@piGJC(z!_(>Q|?;~N|dUL+D7 zgUL%?auw?_d-Z5G&Z$T*_6>b{cDBLn^{z2kskqya%an6pY@7S1!|PK**#XwC{RIUx+_=31niDTZ2L(b z>PGMR5{)OqGaZd5tRV`IJ$qQQ#;-C29gl|IV9lGiJufS6dyeY8Xl-1jl`QmW`>vHz0W#|@t8?&zyMj(IT|%rnUL;I6bf9u(iqQ`S;AqWsaq&ja8y_z8aNr!hNIHfT_?|Xm(uf>#A5{YmZOvSm*HFFRP9Z z-AB+r*?P^Lls}mIg(kEtKAx|}JN5E#!cb*d_+=#vC}-O$C$|egY3@qbpL*N9PnPzO zFG{1gm3JsWw25ML1oyWgiqi*u0R>#n(s>!(baq3iwo)oXrv6>Zo3ymAOJ*#+Yq3ZFiLW8_XmQ?<0lhVV` zaLqj?{euM-e8PrT)fcm>NhMp{i)4jS60Dy6#=*z8qBrJZF2MVxmhM{&GY!@Pr45`rWA3@e6-}Ym{j@6^-gWK~QmUk>NoPMT z4|w*)1y!AHTI+WFq0OCbV)niG5ID7gJ3m)?wDPp>G0>AUU0+?6KEpH6vF29y0O`Tp zW3p$ox60i|@<}BMW)~e+nrhee9^SRR=OOo)Mtybm#K3CHilFN36)KWrtmZbY$no`> z)Z&^#F>0aO))@l9gO%>L8&|vA%g}1_3>#Ob>l$)Oc%s3hLk}e$=UMIU@`o_34ukfh zLWi(@$^J{DFS+`Y40FG)*#}fv8Yz7`q)qj(#`cZDjcTK=5%)qsL-bdZllArUQuiTEgmg#V!?>TX9vwN+ykug<2eJ;#mOfT>> z8-kB-%`>3jPJbxeE2S%cdYg@bR!ahd49}zzW7j~BsjCTP*Vf~5mt>iJ>&W%)LrqRo z&O9e(qax|uh^YpT88_A!CubZkXz#tI_a&=rx8B0=$r?O`UyH(q>k4huTQAWq$^~`)#v2WwjX` zWPHupC=Z^u<9qmB@PVHLO>^Bh$bc2w*{1!*pyT&nU1|9aF@06yJv#}LmDywL+6u)S z?3wNEB>nkZ`DK-koPEH;xV^k)#uz+VX)t(c9ydA4=CH(H8dgl}XRMhKbewkD_?UyG zW>S(>tJtos|DW+Qgx)^V1yJCYq+&Wa1gYDZm19KVQh zOVp0F%a^FfRN=)pzV)p+?)fwk8L@b&I*#Z1zU?#WpsEuWm#VrpOI6>&C2pp)UlsUp zI!-m5g6=jhlDF#GD&6#=$7MrXQ8Sn8^iy#xvtK(xRoWX!a;Lp=$RHjHP}=GhoS+Qw z3F{1k7LU8$!`X?J5_;12% z*f!0da~re+;1d2S;T;9z`+W{`l3hs)Z}Ch+ZN+iSc<9Zy-d0Go8|P8luO5f;hmo}F zK4>&sErWCVqS1A~6l7NZ@RxESKGgl10n9n}zc{5w(ffX!k^Pw#oa{+>zNP&|92fby z<{zhKeop?2kVro#`x|jyifc>y#}@%f(fWSA1gyjXte;!pfqpn+Vk(jxBYCjK_1XuA z$ew=m34pCv6H6wSu2e}*CCr%~f1sG;rf@1o@sk1ltsMW4GXuK~oE+yu(HUYIcpmf} zCAWan)l<3TB-k1b5B((n0abT1I8`nA{{nmkxJB}J!Jh4lJz(u-OyCgRE7VA5 z25#!)#_5WNuwI&LPm{ahNeuE$U*@8kqmO7!C4{?5;M5q# zYKSA8mnFV0kz}kXKI*WFk|o}+z@G3t2z?0qdqMqh1Zr4iPny_>C0RL$N(Oe6C$D-iTk8OFQEm) zh&0!}(g1e}XmVselrRmKjD#?sPKb!+OI#{(y|mXJP$Rzc#Ji(g|0FHwfe@uElMn&j zCUHI?a<-HZIbS33BWbV0ct#@aCc-Qv3~ibGJ0#{ye2y>%cR++l;17h(VYr_~Tc)dm z8wuecn-BqLU*@vO$2;Il$s9$keW443qMLXIMs(@^G$Fzp8tn6b7a?u}rV?hNL?kaK z?2p@Tppzncjtsitc8d`FEyA97l0w)69gVOLULQ&Pmas2MPGU?5IQ-2fggfmK59})> zuO>`Ik0$Ic#gizW5Y#_?qU)%1c#g0WiiQvlekDXvkvI|+aW)~$G;t$LoZE<_$jj0D z$^C9ZR3XHSv^JqVok93?uR%F(Ezv><_jWVtpQL&EkwGtvQ4((hTl)ZmkRK@;3e$MVW%Yq<31ys=Grwf9DQDRxHU@I7!nwh03 zC@SQyRnf4pMYBS)#Ha?lR>bvo?KgQd`k{s0>e`RnUChc#YwcQAx4QP*${(NSbIvT$ zeSiP?o(IeGJZI+2%$YN1&dh6GuNfjDlqM_izndHpKBN5KROm!0@Ors;I&d*LGQ3*3 zHz{l-=3tum8J-{~LFMtC!jnWKct&9|ij@%$BEmhJhzYeyVg*`J<^HI6c8mSe+BOaM zgPY$$#Qk+C{<7kS6hEx^NySeo&K=lzJ*SL$y<71-#XX9T6U&?Jx0HL(Ml(29!(i}P zidQP$pm?L=+ZAt9{3*qs5o5R7-w`>7jhq(81p~#HJM7zf_695HJbs7$YD4@t45|h{ zi0*k|YHAL%oB}gzd8lzo*3{fM@lU!;!%U-^nyVD4t@a^N)hM!{Vd+i9i*FmSW6wCW zJuzZ=E4J;LmLsR?%vq=+%_8j*n3jB%tETJB%AwGzp^-_3{)Et5F&A9{gOgsm4oRY6 zo85~Q?Eb#Zel;dy((bXB0~Xz5Uj)bZ?y=`5S>_kkh!SGWyodl+Xm4I62L1_ajU|W+ z|0ESGYX4+^BYbT!W`J%k9=Nvi!tHjiwHz`g0}EHcMi_I0IDOz7NFdMaeCx0FFOBG5 zCP3wF)~zM+-5>7y84C^k<5By$SYhDwqxMVmBcl8wU5~croB~mTZjEIqb53N zf5^&-tKoqL$_(_o<~8hZe?|P|G5gp0t)k^|`+KlKUi1XSK~u%XC+wrfjVW^#du#O8 zao5a)orkMHYi_L9+_NyWx8GxFOlj`R16ux6*r;1l&M=5gt+QK7#=reciT7>s`4jd* zsdTqQNA(Tm4NWD(4y`L0dPv)r22+o6kMAR9}jh! z*iLAOtP&$T?IZ2A?MuY+PWxcno1cn1I_++Knwa>EJxc^T?PX&7GxpXzXK+B<*Pm*6 zoN?ubVa@^jc1@NO2A_NyvzvGI(WkVc2rqLLh^A-l*!cBXyIbt|%zm3#`<&e==02^D z6m4hiW+!Ndsb`A^UW9_nDY5rO~F$3=P9TWe>ChCwPCQULnI>1&;SxuJzghTr9rrvM2Rl z59egi(B&LK(i=t{`|L@`$*6ty!TsCttzx%16pB|c(vPrQ5)_vP^c5dFZHfKZ22rz? zdB{{jW{GF_VG8|MaTFoVbbQdT0tiypSBU;EL6wJ}xOxr}q2cqA-PvzKjHNFhN}>il zm%CZTi#CjRO)Adj{myMK#E50Z*bK|_B0N8X=Xv7jOZNEwDfj@PWAlHqoGJFfTe$vi zZ}cw?F8+48l+SKj^NBz{o6u(ya<0Auqr#1)NItOCYdhHT8 zFbqqL0nP_ufrNNAICIZ1^pD30t44_HIC1sj>hrg-CfwRsq z!{oofV*t+al>O4-V>k?fgB78v{R4btFa8AhcyN{qBX|J(vR?kp;PZO%Rp2YZ@m|UB z)U#n}@)wKc(+a??1AWF=Tcnl>2R@T*{5b672!|O8@e{b6iQwqJNdF)>6Rc7EW$-s} z-l+H^;HMGcFvSHp6;*iyjDI!wNN_jOmkw9LVGbN9=3)R3_;Ndx?v+1>Zdu5_NBM_= z&&Mw`kpD0I{tS-prIkVO3vm;fioXP21_>S5WFACuUPT@;IvFaTPyGAQSh1ItZ2MLDx@v}4?VIw!EXfTn?wJ#;D3rl z`DZJKIdIsA071nkfTDC=C9lJ3XvFy_Z^S~|1G%m7DyzcK zikv2Gv=Xl-!o7}oE?x85u!DxDtia6;iB7cYYQ*eyAg&Io(V|1$u%0c&J|zk)a7DY9SM7zzfWx-9$t} z%|s-$i&zWc0Ff6sfJk625${KX!ZspWfSts23>b+B7gX+2Z4myMc(3W7r?3WJK`DQ! zQz%!e!-bEM1KDyjV{-RqL@5qEquaUOJT749G|gtUQp9W*P6i=YrmM2Q?D;`)=s8rD?&AshwqG_smb zMEJQxgkMTT_zjl3Uu#w#+m*+|#Bq>55OGJJ5bMyq5$8ghK|}_#(L!<62r2hL0&=ky zM0^$9k&u-8;O)499Px0U0LCjO-BsreH6!_p-eny8ykl_&#fg=)#2>TMt@XUzF zh+M=45qrrO;|_rf5UxfcyHqUd&xt5%1CN1^K+0{95w5ku4DBbxj!B$s+ntyNPKKCJ-ASb0(sMo>uNJDST7mLE;khpMib`JVuA5 zcrA!i@!q59qr2Qs5E&^^e7eGG6iR^+!rh_xgT(R5UTrbz3VA7RkcbA(KoiJ2m)iy6 zx*Mn*P6sIn8iSlO00KTkT%+vJ#^Mo?)k2Z6?PvWp9;5KADJL z4KdCdcGxh8PeJ{(;a?^Z;*?05wsMvG7_@i{m`MZ=$tj8yFIN8J6faYJmg1F)Z&18R z@g0iqRJ=>^mlZ$cR}NH#X9n2xG6N?SPq0~>O)&l0GtGkmk+ zv_2tclg#-1oF|~ee&ujj@u1>AD1K6LuIS0|E+Qfrt++?=S&COGUaxqA;@cH(v$$W| zqa3^#SbZdSn(>KqKMWO*!^br8@IF!X z-nChDvtgvTd=_EF1Tse zaBt(tV!4jKp$(Nfs(~`SraVQjq>!i)YDL7I*q|#YM*Z8Kote?UR9|7wIJ)FRNB`2J z^RsTTU26s}@a}1UM5U&uWr}tGhS=|J@y~xlhVr2J@!$5rNoz+u+h4om){+qi8Vj8= zK~w7=XcR+_+4~P!TTmdiK=rgNsWD`wn&-_3-qyanC*C1q(J@FBA&NR?zZW~hjrkPf zvbAF6r?7x&6o2~^qNugvy-)3Facj?cBYAAf9lNacUZ51Hbvi$@pRz%mM#C)_N~C>Z zPcj{7EUhK-v9jxwFCe^fh~@N1L8FCrda*CLUMY@#fh#tNee~~=%;Y30_M2l=B_j1p zd#R2+*T1x{^f%+7bL6oOF(1Www&JV6!* zf)rlw*0ImT9gDQw?_t>D8~^QYJ#&Zshl$zV{K03_ek|1GTUOfyUBqDHz?#O!T^%LA z9$2@_?rO9w)zr2vW}tcy^m`)zEe&Lfy^~Mw{dalzV9n*6?i(NDb{wEm^&#g}`jPRw`Pw;JN zyv_GmdH9S+%90D3#-DZlwbBK}LAFy=Hs3ihA(hKW^;N!wl@HZF;47TrLK1(ij0(1tUn7&qMG_A;ZEAeDeiM9eQ;9rL z>Gqw3A<4#ygfwSSTYZyA`w!JSn+h2b}BU0zkc)t57)t_%}9 zKiaeUEp4w;<~6>(mDq;yw?NeX8u17s7&*J*veJS5XI5Oj##xl*yRBiqZ{V7H!?X-7 z-}wQwH+?h8lSlROP4Jaf&Z~?GR#wsti&qK#C+Mz@M^QTqHCH5Vt*p{D-IHQ;YiW}# z4PM_wSXHr9DjQ?=UR1`#ZOckW!xU>ja)9mg(hrovie$Ow+FyxBx!aEBI2m&)VNkLz zPq78M*6`Y7?>&o(3*JXf(gWS|^x)8ns>+DUk>z^j*ve#a*H8BT8R=!~uB2M$xyhfe z(T3>IHP34wqHZ@RTlxW_`zL#nEq;QC`PrU4f%Wpc?ikd|g5BX2T6*T-s(R-o_s1`=a_-!;Id`&7R|2{W1<|`XL{wlMbh)^ z7_4;j!ebwKSInR9npQg5WrfmoUzLwFYk%?q7z}u1p%_|Jz$5FZ=K5tq+q}s&!FkvQ zsj|4x<(*P#nGJDCtUj#~_a}Na_af}rbfO$PG6bMv5VT2+Jsnzm+OUgf2OPs@1!9L? z6^Qm4!Psn!-m|sgW}wh(t&*<0FU1B*EKNhJkl$ESn-I`kpH{k-8?9Q#-=}}repFm? z(mvMT9a?4!MhrVQ=xGluH@2P52(Lf7TuXasZhFH2&s67B?Kc?yq}Nrhd|>6#l{NF6 zUancKyM8-vbNzDsrS|Zkv5oI16VzPBwysjA?t`*>NR7n!Xo4CX<_ zduK^rcPtE}9pdase9|5f1AhVR5F>xV)Y}em`7ikD-YahX#h%vZuCn#DdTm#&z4?04 z`3nrWr--Y6wf7%a-9A+%;D%wt0&Hj)vwLy5mKjmM9<9;l8Z&73) zzP{TVQ;=V-HOpId=fkkCGR11SYBrAyrq!FZMozzOZYpJ&ZVW<*9HphNxs$rXgS_&k zT~(WuUcXnnBp;h-$xcrgYKYxCx;;TnjV5trL9q^rK4-IJTCS zT%YZ|BkX`Pw)Cife&h9?^ECGfzZu{*QbthE`nvSeqras&Jtts^)vq98n+uxV&Fg^yd+W+_++OS0 z>GmUb=ve0u>BdGpTYq+?1gX=1KB~%z)!(`L1&`j|b~{ZJj2znsCLYNx!8ELfr=Nxy zs2xp{d4&0Jpp?HZ^})-kHl~&xaJ1%Judj5p)?UA^E@WAkp)BjP)(8}Vmg78PwEmW+ zUFY-|+ng&{Hw$jYwsZGb-`M&^l?z<34CoUW92^H*6zh$)Bc%(1dYaQ;`oZzhDojR-VW>#co7{k_V4qxZeV?kw`ZjG>_-#!k_QU$N zjkh+H^goj3RnOnW75#Ftj-i#b4N2!h#ol5=e_txl?fvq&2D1`tH1Tg~uxFwp5(T5Z zXxPt9!zw5Cf#*A9?*%47-82j;#>=P;zbNqemi!<;D%K~&RbK7NswH=;FA;i)n&>!# z?S}(r(4Skfa-k+F&)A2hJF$?w5gd{hG5wwrXP{BqC>t<>v9iZ;n>cmGo?>$w;>@qM z&7JLM?FV&H`FDGyxc_0>AS^Fv8z#DDnsK7}O=sENgX}4>=}3zrs6705ULmS(v?X21 zzWq}C(1DeMSMqxNIEcW|RtCQv2;rAj(o5f&(cFjMMfg!~*|^DmGqzUkN#d{=i+Oqx zGZ;$TbMdY9iLEwcpngC+2C$8=iT_5}5=GEv7#C9NliMqLbY|rgy8|6)78H30eq4u~ zcM!@Jl_)Qg>)xByIGrH2o;C-LdK{;j2<5_$2RAWY4;&l6c7y#UWO15QtEPmuCnkz( z@Vyw+)X;gRz4|Vf0|0=SOnrlhe^G|YB6?!Gbw*3PN@z02OaQ|c%Qx5 z((4Xof^zjYMd5K{VDwu!<=9X?7O~}kvCcmjDTEGA?5FhNob2omPHC2P;CX?Uv6SUu z`A>HK&gox-yjh3k&o$0Noc?XUbH7ZWjB*QkSPAUt#hC#r2ln<4F$g>4_B!O%s5G3| z4@Y<&F8u78DfO1g`HVTSe;UOfIxwZ9YoGnWAzWM8i&HH-I0(`OQdQI&kHUw~=C{ z3NQuy9F)<+ieJnNz;hKp4?GN&5+JYVdWL<#St?8*0(=N~C_zpV&&O|q@(<$t3H&mV zzP#WcAaCQhUIk#Ia5*B$Q@jm)9e4~f$pmf#--=SZPWk)6`{22TGC+;{A>ftDe;)WP z;5R5f8QjDpDM0!%LJ9%6D5p#D0pOQ|pRf2?-2KIT`xXBJ{2|o@Fhd8x?RZPxRQ@l3 z{|h`@@z0SsA1NdzNH1LDtTGR=xdmI=?#$O?#EusHo9u*|`=Q~GHC)_s;Rl2DOlr`J zyi9vci{~*cq4*k<-Zy&?ru7}@%m=*CnRjz-#q9_o8mUnq$aKa;JdfcU*uv#!0Dq;&3(P3;);2$Kg&CvdJL-P9de`3yRRx1G#fS9T6pZ0}(fN zC-Dk22@X_1&YsJqV^Gwe(BnMJf)T;xW@bas13_J6#wrwUAR>a7h)9^qL(J%R#K|Zb zVm9U_(MWNt1Gzuq95gB9h(~JP155mLz=iyV*rM@_h-f(Kh|?gyBcfUq(^VKwn`P40Tar4Hpj9mwE)bO*})I~x zhMp$k&ZgtTAK}59M;we2B92EyMD~6nffuM5R=lpW$dQ1Li0kFv*IuX#kR#q#iL>zN ztZ;sfQ?R^1s@RvI=*XwzRmEL1=lnRb1ZELYGL=M>%q}4J)p(A`M@B?E{8+Li<>uH3 zj{?(d{V|b1grxNt5$-1>$MgR|Ik0hKfCM4}xD?M+yg+d|&j^1xuZZyc7&1J+z`VXj z@ePVMDZWGTor-r6{kY&|#-5F#Kf2 zXDME(cq7oy02`D8Ww+$p74K5~WyOPvA5+}0s|*p5A-CdrikB%~p*XvpjK4(v2-*gS zHxq4foC7NrGop=ZG1!12?**lh8sJ}Y%i2%k#e+v3X`L6x7%O$r{F%*}SX*7YddaeC zZPI0PN+(`6e$J#B)5^w86`irhMRtrsT0XuYLkx&Bj*6IgNyMN*Uee5V%d^8 zzGb!8PjrR0QcBN4l>TC0ypic%IDhH<6<8l*&Wfs~)iV5wy59q@sGGC8YH@9KRh@Vs z%Iq&b&bRdwAH^F<1FGk*tgBsGRfl~^=conX=d7H+c>cUP@pZg$ZKQ7*uAR4R6%!Zp z5{&mmNVY0 zhC+3TZUOaVs@rB-lX{zRiX9p*foATkD~*__XA-O)9GVDij5V|Oasp@e^pAv|6qdvt z8=~C(@Q$LHjYS}rHMv)ed4)VM8 za6)-rdR}3T6hzf3UG=$}YQ6KsBk9J#{K~eSk=2$U#<}|6 z#Fg2`5G>KSF5BqeZ+V%sz^u76SXs}F)hm7bkMC$-C!WYQ7D1FbaENhE)VQ({SWeZ_ z{U0l44#Cj(d~xj%V~T!-cx{MLn;(lE5Mlz^bKB~7mP7^q;?rF=DD#j1b9v8-80Fgc~&I^YcOLX1c`ADAem+&-v zdVU`ym&C8AjbAJKzi^hjTfHilW2XW{a@%vbtNAqpPsWc24b5CF-ESwET=9B@w7JI2XyHh_8B_skmP=ob<>mY+x5Ft8n28?` zu1Y-)t@hae+3(!;?C)cChC3;qM2whp>n2PP-x977vBlVPp#c%5(_CA>Pm~uU-A~|f zzR8HOczAc6+3pXQrSlWFzp`pmO zOw^kX7>4kSG8+8c{4I2FNKS3E-w$1z1O6F4iPoV@Z8dg*L!ACxcQwR$eO)h3fA&m! z`y1#uD(;sFl%Rj49Ap9&y*MMFhFfp{Q*7(xVP#Mb{uE~hTx{kP=k;%)3__g#@AhyE z$r<1jil%pf4QMWV^AKY-xeDQVwBkn@z@>^mB)O@TD9#yc$^b?y-X#6QwDS}P)$D#v z*9P}?Kmw2U+&zPQdsZl30Y;g?wctDt@sPCvZ;HzPQ{d0@5Fe|qM~#Gkn3fC9C&D)X z_aCMu!GU#|4&;5nSs;9M$RYTUA9sc!KY@Uwac*TGOnZ+PssnoJ+Ai=6aCAI1$^hEH z(e;zB7x@-&0ltIIbf7uH1t_jub-`?KZerk3d z$e(hf@!;sX%kXo+?*(6=IIW)Tc*yKtGd_O%lTe~)L?r(n=Q;TK^OQq3$X)mqDgF@7 zU&GI%_$@dOM!2hgTdM0oe_-@tGlcRsF{ep(4ScRuprV!;l zK=CQymw>wz9|OLKT5h3dk_v~lAn7W=&v^d#gO5|33mN}a* zAH;N4c#I!)|8+{*p}mw0h!5k;zbBYT#6DSUXPYk@dm{= z1I5WwqfozAw**&&9?7zZ1;_ zA7Kn}F-o5}0c{%*k5X7Pu*g>rWhl-yP1D7i{v1%#nQRQShe9c$xCAP`q048pRtFZ&bWh@$H>!D~wGx zQSfhvqx1A6MYwL)5KC}CfkzJq&Q=Q*n6chB&s0|LN+uxj(d(+DPG5u38Pnr31p5RQ6`V6dtnM(LQQn_QDJn3u!oVb#c6C=+exUABEk7cl=f?$X`PtoCy31=V z7~t>@4r=Kacw<8g0%%Fl>4}9~?Ij^M6PiH1!|W_ErQVMv!qBn{un;E|cXY2NZfrKr z=3ju-38<8nj>I+hInY3Id7*fMEK&bssMI>runJvqO-D(Fcw(#3Pn_IpaBZ^pWS_9M=Dm)jl56B!qu;_Ca0DLCCZHRz53nSUDjfdmU2uj z)~#D8M&4nZ)lYVgY(XLE7YY3?2oTnbfp-}TQx`xTa6W$3_|3y_E`C+`RpK{C+<%vG zt?ubey4$epx=*AE;{yF-aiuV}=t6uUjI7uV$NlYVm5!ec3L*_+aH}x~3j+9CjSKaB zv9}dMkCe`j;b>ZGuyxqbS_nNJyCk~pXeur3>e<47ABOYwa7htQz6E{jJ4NSxsPZxB z0z4@GeV>tGK8;iCbJ_*__d)j?PLoD>DJ}ajs&|;ebH9l9XL% zfHq9r`y$jM9$oEp`it4HTuj=IP=P~;*v_~avPNI#F%!d zh!pe@o_1q^xwKCxR;~uI)Y|XF^Oo+kMMR1T=NN;cLfKA70VcLoJsclfj5FS0$Y-<| zJHVM_j)QZA%*!O4IT_TX0o{m}s%QK8Io}dGD5m+M7iX`ZD;v>%$2xS4{yTbc`oD=H z=f`<+)IN;Zo^m3q3Vp=cGZ7vJJ?`4(4RU9!#fpZnMGR03L@;>ck2s9h`}rnnytr{R#I0;~h?k1IlaDfqeI9_4>I z_$qK_fDv8@zPFcu8aU12)0O`jJU}ep)?@q4ske#X_|xM2h=691mx9ez7d#IBBzV2z zo4|AU;w!!coc7!Jp2-YM24BNwK=F~_97Ce}B>nq?$KsJasQ5{gUMDy{Qr143wEO%I z96}Lvfz#%`L|yO*csY2s;keV;OFAKWW6J&AZt`Fz6JckUVIh!*j}8|tQYs8;8FM?yqf}RXK2+kD?ma6c#foGtmCo0ZWC`N&Y zN^CYb-;7X(*%`bT9BIn*MuJ}&sZHn!;D$r!pb&w*%g{j{{Xd)vNTGxNpNcH*RJyD4 z;+;m4;eQ5B96(Ubj@lMq5hvpUycon7g>qD0jweHo@Cy_+DwIkRaF+w}Nf_tS9e9k0 z>jvS5dEGc7+$UM+x3nY>pi2e#fOv^gj=%*c$t&~7VxU7rI#&^^ph_U!QLmbKQj0oBoR7gL5l^t4xBz22A|m>T zco{OJII9xf<+_AZA#^97hgP4s9A@amC3qL`Xo(5LYf$%zOEKai`Vqm+JV7JVN}OUT zK``PM$Z4LJo;nLZU;&s9A~vu0zq0qvU+Vbx4@lh=!QxQ=)=PF*YQ}SX3%o zAcK#RuYlN!h@s%C5op(VX9wwk0Gwu^wgg*V@&w!^?_dzI7DY$IBPu4sf12W}72lz7 z4-pByMVyU0C(coJ^yNs0yc#cMC1XhV;z3r$GUe{Cj?L+;nBt=vgjg(=|J@kk zcq1D= zfn{C-smz7L9nt?n`>z9lEBFt zE!$O~HFSl=21Y=pQR{WCib=0Z(RU&{{AKSD2+$ZWtED2Wo2)uwjCh{Zna1kmVQ-;mXm?W7k6|#ph3hNlCv# zYd@qMCC2$>jboRd6NL?VxHHPeUF%Bh@9(VD(_>0^RykX{!n8o&UDjO}cn=-dc5m#^ zTd?KoR+dmgntf}n*VwA3nOn6q$JVf|5nkt3+e0k+@D2@S_glsKj=oyoK&=;x?fa!z z#~G;cYE29hrop%}>#3T)N(jWN^Xu`prnH*%Fsx;WB`J^Xau%Ja*;(@ap%LCuUQ3Sj z`Tvh>JP%`*NUuZ2=GXFIh6q!eeK5hrc2(H@#YB>{C*%Kr)O7cl<75P^J(x@_4FasH z6l?d6%1t%vb9g86Mv?+^Q$~58mnJ*d*XM(m+FyIXG99$4w;^Mt&<8tk@xOoX-`l(X z5X3G$t>83j`+0YiGKO-%G>SHpVSy7cg+gXwh{_1h$jqMETY$Y!Z0|7gGkbrisa&)! z#SC~-9Nm8_!$1<&Pt0QFJlAFiHVnhd-kpb<?vuy!p5s9{TS!*A7uh~>9t<-24Yt;+h+nK#ZRp=51W72C=tbM9#HdSuW zf)}B*ERi2##|~rv=K=7ZLT~&lHIM)bSaf?GXDt-_~@M>LVj^7Y4!($ICKvzMFAT z*%kAbo%`+Tyo1G~+$xtDg&3+n#-!`-g>f)#l|J^wwN z`Bn_U*#Vq&tVj=jhkcqxL+1KAWUlSAFQffk?#qW%9QnAy;s<4T zF1~Dfymo3Bwv{;?F>F$x&#=jX$YDnJl;G)MX5h>)eh#sZ)^%F2>^d~zK0Q4z*mT`5 z$6eSs(G~P8N)KkHub*AxwKYyniSPEfuJOh+?#C+?)$PPf6A_4md7x7@6ZSx3fwsnv zXc}w1wsh{k*tmx5j&C3m6oK11HT`7&uM$MC~ryfY&RARjC8*dDSVqC3nJicuH@h713 zcT)$J6>4s(u{H0nF`8kUU4spnTD>(H!O`B%67BsWZ#otZGZ!+Y5=&;i7^fFW*}3^J zP9sIy0V95?ZMLOMmyC;fa9)2HaBRH)c71I8>S^)*9)-MP@WZeQe!ccEDT!Zwnc9^k zff3*sjbTF`Fce3MbVVoHF1o7pL1r9!;qO`^{?BpRDymlKN&Onp6-LKZ%H?zBSRxeKfgM1?Lu>83YpW=R*02kg<4l;qK z|A&Ws(bbhpPm#yq$8AzZ^kjxy*9QK9hiN-e@V_75p54-m>zd!xIDayfRRWr_o-_>tfnSrb(TvcRupO;kJ)e2uDw z44;a);HAXXVHy|fQHQvHp`)Mvf#@D%!&W4(VJ&U$X)^XU23H65i)bMgIwXJT)Y&(RwaC!{r38`R^sbAOam&%r#bV=FAf7K$nV)d!26jnGi?JYX;Idyxbc zM-~%N`Va_79f;=?enK1rA&%m_Uv4ImNOVJ*q);x=b3Wb+a)`gET*STEzf=A;+yS>- z=Z5se2^RXL)PxajphG+~1Bj?UQiO>X<2!OhB<;NLxLtUPRIQPUM3`ruOO7GqQX(>N zHxX??8xi4Y4#@bQBaVVj1~Es8Gz;-PK1>JHlas_kB&0YE5$R653`RVQSb*n1M7^X; zBEkjj5#kUeM7$6~exgSiis6N#?135hiimh9W1!K|XrdoEE#nDrn!-xr2sCO$TzE5Z z!C*8=5%T5a^_hyh6(6T~nc|g-qwYY+feV_H!)6s=hvGXG ze^YT*DuzF%_~(ins3XjPG%jKW6qgb_aF62Sh~SeIpJww|4nE~jrvfx9ey8GXitkXo zfOifZj3Q0kcgQhD+*Yke^;qYO6l0=|J}sL^M2fpUH2SyPS(wn0G$Klz`p_5}p)6`( zLeuim1)1^x9|klcKhDSyiw_(9X`CZ&Ic%J3Z7Jc)vl+DQ86@5~Y%CKG-VbA-G28XN z;?^DZ=)V7B+;ig*V?o%;`Ae%A$I&B3qB(ChPrp85WDZ|hv#PFo*|keUraD#g=FRu@ z815{tU0FB3$8VW$zSz1zSJpeTJ~DFw?XuO{yk)*MbE=lk zt6jXfYQ>s4b<5_gS~*{M-o+v@S@U426TQ&t`&=)^47T;N4GI^-?uTS(TDa74X&!8g zF=s%cJ-||KX`HD$Mb}`P(_8@|Z;V)n{i@CNINf9U2WILqQCzMRuL0GnwIL#{z?OnC zxv0Q4gbQSqiG7dg8BrL0OKBxQOK92mN{WFd<%CFk!_07Wp}*qM#pAP(4=qtFeZz!^ z3SX{ua=opsIIE$3P=@W70n$82{PPndPN|$w=G1xW6XV974KLQ!>dBq=eq+3w&^t)8 z-8>%IOHHM}eH64*(r(a)=+$ChjF}d;uK}I*ZoTu181pup)6?)Qu9EY(%#s_(}VR%HAfa!*{I7;fan8G&#xA=mwXgl*_-%30>ZsNm+bT|`n!_UXhobLHlx}}J zE{X=3pJm+AzD6bV<8e<7FXu8qn<_94#2PNf2U=Q_xNxv}L3Dk&mcD7amK*aS2hFR+ zErZRh=tau0FB~HSwc`1~=5T$c_|IVTUw!7i9V5pjhBjNg;zA|35Ti9HfqvyO3kHr` zvCQWxnO`+;*;3csHLg`l7cE_Ot;<)nw6f28)--n6M3O=PMcJe&gIs)PEkFB0=+u4)U7b9pq|T^&f`;+!G3WNnk8t zK919hmURb{%wKUz zA-U`1E{dTM!gTRCufG%C3#2y5uQ)p+765yJOlh=W>oPX@c~|gK2DS3-QYU%SEo3;`m5rgjKdpX zf`5X;R(S*a^2|m4TUqGvVn32I(7&;~6{qFGO)PH37lJJv5klx=gY)2rKOA8{gND|NE>MMt1y>{+n}XAw-bv% zjgiY#L#RKFdnn59wZ`yV+s?Hdn(5cB9>rqLWF-YF$;qeAUkXwM0~`a zBH}@E6>3hY$W^D&Gdu|%;YUv{8I_24QbZhp2~6UAR8(RTX1|GZ@MwtrVJ}0>Q0l_S z_*>+7(uatXP}D@k`zsMMr*WuroRKXeBAxSz2qr5`Aio5)kH{P8{Ng+_N%vQ z!+Z(_Wr*eNjtm`pja_UGF~34_yTm@Y*di0f4HInHW)w<3#WG=TY(s}A4^@Tw4~#Yw zot=TK|DD)z#J#LIn#b#2*IJL$qq#k#?3Lw~z3moXN`F*>rtuff>YG8yOho|r9G;z^H)9c4Powm2!^iIb5f0F{w zxI9;C?g;@8riaD{T=mzv(;@V{*gZV3+?^0u={CBZ!3KA7;Iz9KJJ(zCN96vxTyKJV zcz0!emF#|4E^c>rFPHS|oVkO#t7;lB6X5nfUcgT`B#q*iNoM?@K8LDm+)L>6-#O#7u>OPyeL$ z67}i-Pnz{%k5S!;n7!3KF5-X5Q}TtkYa4>N@K$H{H7bzmrU@AmE08HUFKRi#he7)qBD+12v27LA|~_ zY;d3pOO*Z6J>2UVS-jSoUo@Zt?W#GO*5&Nd))h9Dy0B7eboOTNtzk#Xk4)(EjuS3z zi=xt+OUsRzppLAZ+*<(2@;vW{VJ8AjrFvSp-IL5PVSX9NliW7XdIrIDuBLQvm(ds< zGa^TJW~vsQbvb?RhVqp4VcI*FX4}H_cVf~LOFh6wm!q_=Pjgu-2%f)|t3~F>;Ev#)`U*29pLHA4E^u-8)Ma$t))tq#R(*fm)sXFN zbhxn2q4R^kwm%}Cyu$3~Pg^^xG;I~5i1dbE=kV$|&VZJ2uJ^;z#&c~svDmzQOrSJa zS(8?8s}D_`nStK?*{UqmpjWNG(D(ezWPbuPBCSYIWUefYc zIl*4jK3_aB!@R&hr~PuJkllIh$-Pr^(gKl(OOZ+A@YtN3KuJz)_o(2+oWX%9Ig#B- z!K-s3;WIsFcwiQWDS5#&Iayd3F~xez$LkH{j`F?-^w=QIoaI^+@Z*gBo~b%!G#XyS z*&RBnPs49K(=e-E*C#c&uKqNGfUffy!Ljnf*wV46jK1;Wtt(6pzQxHIW`XVW*}rCA zX&NFe*Gy<}J><0IIz;qpC=Aa+E7u`)iX+j5s-V6vR_5NDulv2P+Y#fPDRl*b`BZO0i^!__)>bLH0DaATi~M_st6oNW#oaXY@* z=$FXBXCAQqf4DTNf_vz?t_abA>ueo;L}0c#z~s`@v*d>7wgr)5%3AF2Cbu7d4(|JV zZAVT!r86=ddiSAA%)>Z++;ZK74#VAYNxV4PYTw=~&BtTKe@7wWz}sdFx-_x4z0g6? zci&!|0?R(&#rPCihpy2-6CaKcr$05-LY)58R10zXb9<2xr+)*oFArL0Ge8M?2i5`m zYVgoOQT82pP`@AFo?X+6Q!)A~aCF9dK&NHY@)w@O^l&Clse5%{o2>#W#W<;iFKTDxtUX zc_>~9o@PCizB0i{aCia^cZ!Ks<}!a1!m;Ch4@!9`yhbR#5&UZK4#g=Aj6&Wk6u%Vw zO7Kj@X(7B8Jaj!(nV$fkq5OZuJ%-`FN)&$&{C#Sfv9>b<&%=Q#!~;-Th364J*z7qUNbUCh4{339wsI#DWeFpeK@M(%uIs5rY^l$d71SxpEkyX9( zpL5OaHvi@5fg>#Ym(|4S=(-c(zK4jQ`-$l793ox{SuPRbJ||8=EkV>$Ka~jocExuQ z@z5M-VmNddKt$I+mxv4&0sZW{Po)FKMstaiG_6q~=O5_)oZ>GLaiLr}9*^KB<$j8Y zj3(pWsBSufcrKozLiQ^o@V-T#p|LtCjqz-L>#d{?vRMLr<#cCIpSvKUnk=C z0TJ;~%)}c#MnoMmaLq8j9({4bN+L(%2>3ZU0{lco!()pBA_FtxIvv+we-M8HUU-(X zT-OY@mZx|D5xh)sIpPJEBVB}-BVBMdFuY!lc){Bgmm^*9mlfYn1V5(u=N9+Ng%KIS zNfp3A148a3;(`Rl*&>k_DPFAjWW}c`?o+%@@n*&ERJ=p+rzD?@hprqBssJYx|3UE> zv|!9o0udP~P`pTSkK*GbmkOrhs}{3=%VU>EbRJu5COX8H(WX-*t~BHN%w4u@@%*Z# zSUjvwoLpfJ5{p)v1BH8~S=xE?O7lrwcm~@NY;AE;|5QIHmaoFNm(mItyY166%rkf$ zX7w66&qAf?KnsUg7IP5a{-~!o@w7XT6{U{4CxcQ7OC2@RQb%2cMyJRr7x21&nD}NE z7W{o}wHcZr5QQhr;L5|f< z?iJ}9&Gb~)T8w*FS);uRq~eY_qR8lniO9+Zk65_TT;!<4SS{)uacHA?on9y|+hmT- z9fb*lRR@pOObDAAZO>hG$d{rudTUn|(9t1HMkAS zJBIqdZvRdVq_p&*-uCHwn%%{cgZeMj=@PwB-Y`p^uVn;2t1?<$b0b=f~CSvuAgQyRQ7hVz42tFf*>bXor;=RoB49saa~WxU*laWAJu z+#eRmnlDdK4v)9=x@mG%Ps4IWR4h=G! z(0MkzHf#xDWlq#ZI3^{8{ER?RTBIcd*(JIn9Bq1osOsYwn&movW_J?G!r@KvI@6c- zsF-4Z4A+^x#a?HDBmEljWFN=XSXV7N5*iW{MOLKaSr{UJ9O*bm6h}ESYbRD*>{>a0 z#p>F5^RXR5ZJldn?R8jrt~ylpLdg7{#8i=$UoD`ea^lEhCUR&MY9ltASzJaR!#m04 znZ+@`Qx^0Bach*rua6gf`Z_L%ea$crj%qJeWfUGfS6tE8F<#fi{e2y`bh@J*ZoB@L zm=fp6kQ!A*9ERFH(!~=`nu)fbEHt^mZK5^o%*1Jl9J%QW#F041VEu$R4KPd4L@F!X z8ZnBd&%59GS)C@;w(>L49JS+CIh)d>-Lz0Hb^hu>_MCj zkZ0fEjP|$*sc7Z!rIZ6*xmG&PGp*~iVW#Mt;K)vIM3{8Ap|zIdh<0$E^Ew`nn{r2V z5tHgPV%agIM~d{q$6l;Ua18O^1n1Df5$F0|oI^QiBT0J?D~ztuzYCcRar$pZ-!a73 zsOy;z>O!qloc2}^5x)LaE{)9mF_vEZK~6D$iGR|Lz4!)Z9QsQ@&dJA(7K@Z-QJ9GtpM z=+{Wj59P<;jDY?}!GG?>F*eYmksvzT(*G~u3&GjaGWS_TI$mle7rD*tfda+yQqxDcGmR_Q8&B=A3j^BMDwPUG&M07oZT^3T9S2UVp4 z|HHd}=PffI>nHX%SqEFsVL;{Zzk+DNWln{HXRKmg=E3Zpbm`Q{?^$$6Qn?^)JbBTzrj)-(N zDQv}xfARvFwz0$iG!Ylb;WCi#5;NdHb>t(W$|*Cz6{HyMd?KzZBO)AMW`LL+~ttGGT?E5J#aEBo0SaM)l>8$weH7XGp}D%|jfa zl)duRM$pL6t8_2Gog;B(Y&8)XTTevBD28H2(5HQ9fMZMfVmunoDe{qXh`m|yX2to) z>EEIFn~L*MGdv$L{l60H20D^z@nj`+5#e2|_-Mr|6|YvjUU5EnhHqA!GFqrzKNfpPaXfFzm4b!;7Uw__sMpWw z^rSk5*%KCESFbtqm)1cINd}P17C&6B4{FJ|qF?9TF2@O7E+%X{9?*>pWp=rgfS zhsTMn`Do>KLarTr$8#|zhXaw;dO8#eOcQCX_KfgKyfOSL_YvJQ?Sst%RHvqv+n(c0 z-IE!PA&#y%wE4RD=;g2sBLOY0R3~~3XLpO(ZP=o8&H!t$P@C!K87v%KZ6@1CV(-3~ z^za-%V#Lv7!PW=gEFYGuiS(LSuqH8R%S(Q{rv9;%v)Dpy$Dkd%Yz$JowE_@C$^ z-nMVsQet%b8b|t8Rk9x%iux#`?kfH9_!)6wmSa##lfEr1*r&ccWzm}w7sQW|%y zFZuD1%X>!X*^Yi2YH1J>ik!qnT*IyRdvn zz8A$f1HV5kAzK>1dXCaq5A|8@LzvN)M*0UhMPDo#nlEgR-PS3aUaX1&S8Vh-ai}Ay zKiX}nzle9Wr|a_!LS1EP+w=R9EN3VvTTE=3axg)R&2z+y#>IvaI~{JQMLj*Xxz=`~ ze4DI`_#P$7X^jVezbtMKT>0@$#*fGAHZgmJp4g9h`9%4lp2_2c6{Q0eb*j|anIT@w za}4&^z#(+7U&cK)em}5|YcI}z)mMo3_v73D*VdPSM^WT&PtVcQ6B3wk<>1I90g`Z; zU_fq?5CY*c9AZ$E2?R_az=T7C0+S%hA+o_Bg)VBy;;M)%AUKGk;OZ_SyE`cU6=ii$ zl-2cOR{`B!`QEp>dKh`Wex8}P-m2>A>bmRKRlmCOZVczJimS2l+EOsjKKlvq(cnyW z@^#=(zzq2kdC*o1i;qBhC=b&a08?7=Lhu|Wx8gbA6*2Ax_byedY=c zBB%IVy~Av!dowUdix-u{hsr^A@wkC2Dd=%B5xkO!2+1xz15y|pntXJ6ej?oJ6zAZH zyjk&`iXTz@4aLt;BFz9IV$z33lBoQf;T@EVx1n7=5rGsa&XE(jUvc^I2b^o}>Azka z{>Dg3k)0;!9_9TN<$Of^56;uSSM&$v%o54F{}x#PWGYjzQry!?Y0jQeNMUy#nwE1p1An9z1@rb^qU-}cx#nI{Pln)=GXF6E7CsfGPbC;=UX7>qea)iz7(;Mf_z|z6ze98K3vrm`VNuEbMTe z?3eLrsVP74VJmh3Q}Z(uUayMJjqjgc%|k^KD{PT!f1Llc_~{0{8nZ)hxVNuBZH=6S z6&U{9h86al@$c#@kF2QoXxQOh5_z%ZRW*CReAt;Y9NpToT&=F4&SNh~uHUE5gUoW` zvwBjvx$gcV`{}&Y`W)xG_ZNBIY3Nj+qn~b;=M}QUddlyK>?!JeGP1m&bEKv=IYLXP zt$jFqlg%~gJ+lL5Kw61E?>9@wt~|bU!^*g2+9r?N)5d{~dG3hm=kj4wAYm$c!{>Wn zB(QFbE5ngK*-`4KucK>0=jM9bHedbk1Ltd>5`}}%a4#RTdQW_A-9%fKv+9LNK`Pqb z_~!Z!;Yi&Pch_*UT&Ke08vp-~zbpK3WM zbG3QT=Ef`&VkigJwK%cqbg|DFDe~Eak$yf~B*T|||5dS4c8R&uR+DLwyS}-8ZX~k2 z-*Q{`#v&Zj-2Hs*EfBAuWj|@_Zi+HZb2F0g^?fb1jD~hHcYV9ao;tj*@85Nf$c}ZT zwjK2ao#AqNThXO=nJ&%iCOgE?!FsFgK3$@3njF?P#kmsSWAfUu2hf3y-#F$lyg1zz zNf8SM>nYP~m#-^Id{;|16Q|kFy@^cSX1^|D%ssW_=L7f}+S?tDRM{Gv*V(Z&+V;VW z^M&V=#>D5^Pyn3aeiHOtzB1-jVgY~?)Zb%#I?aK&@+#z~w{K5HNEq&FJ6Vv8z=j(aA<4FU)v{M>ZJ!FlkUmh5J`9Kfxqi zjwLwf`WeqKFNoW~^P_%D_fs)^y)t`o10_Qg-0N5IkMM)^u`G`uPdm(;ezM1oxJgl|p@4 ze~yKi%N*LU$6~A*3vy2U`Buq_zYKmFygu|ykv>BUV#-|%Cr&^o68oAt%(bSg$T5-K zO~lx39}yGTSBd%Pj)~nd!6ahj@&mCO9*akC;yZxY8v_d>Ccbq>`K1Jwyb2iU|Amct75kLBxIKMEK*t zn8J_6MEJj3eu~EfS1S*4M;YGu4RXB6r$kKgrK|yk?Z4oh#Ij6KcHktovq^0@{6an+ zoNqjt$OjOS603>G_I=9zka9oagd~LDZJj7ob_3;xhzEGZ@=^MEj~s5a1r1Gyju1!Q z+(nD;s#siEz3>j(f@L*Jt7lg%S&9#23oB!3)uLrJl`~DRp*KtQR(A2N+tCrn2&Gf2 z?Dw}gy!II`u}V04V5XBdUeD6jiH7kwx;`)-XX|XkCi#^a*H#~ zJA2XMIeiyhcl7`q&F@LI4;r9$&V>3;)Ym(Q)aM;*@GbmbX?TF^ zOJA6fxvuu|m~8(SbN)Fkx8%~;OQkg>t>3sb&K60CDIS+Ea~ zidy8!Fz<+lDSArYi80P9C$?miNiUVvw%(Ud;-gr}pX9l%tut0n+fZZ=7huEt<&%NY z_L3vw?I{rH9~A$bqTiMND17M=E@?ZL(YAa;(a%wzD-O79_V7dE-l_UX$Lf{`#9LGK zPTF$u`Bc3^s}Q4a(i>WhAG>+Jcm6x`ZH>dlyEoxmQ$fox)rX`V4j#};jFNbq%B@24a5($)s+WM2dYXOTltpVOX~YW%pcBK zWXoxf&VSwL;9+0zNLOd}&!^4aDSH7`TV%JStLFs|XSZDLk5263`M`nJkU$jAn;*$U zzh}>$d(yX}04FmSKoN`8z0bh8LB0E(oi{2{-U%uG;x^*gi?;@>yx z=~^$*pySW9h$SyZMW)|>{b z7y)&zTrra@HMgcOr4g`(RxRYt=tSoiB=EaCY@Ty%~xbc{>r9sXOsy6W?FN+0jP3LHENrM&4-dmSL0_ z>A%9hPTF5RgV%B^LA&q|Q8*JX)E70drzpG)#&Q_%7e}dn*5}7Vs3v}%^rejvg?_y$ zcsE}{UF?MKis9@)mV$fHVwxAu76I=X!|5(lR(deqtC-S?(|sx8W^oxlVxf3YK42cE zBFaKOz+&totN8$2W%#jIpRG9aguVK0iqj9}6eYjnhV5O9NUmNNt{hSv?Gb!q{_r>~ z_(J@#GrkX;5#~#fSAjE3+L7O=0ssZqZJoh4qrsbn5ZM`jkC(ZGn@iwMP6d?HnGcFT z5B>@Bft*VsgRsE*U0a6oun=Z5cCz=jO#)|R_(N}Q>ke*RiFTZ#tNhcQo%w$dI0~+e zF!`6@Xn~{rG&uS{xo}VJh5s`wF!hhFVCEOZQwk**QfmV1Ah+OuXq}G0-6K18Vrw%;WF{-iswsL)l83$=JZ1N$KZxM0i$OPB z!|xF9&3554Bu|g|0H^vk&G^tOB5UyhvJq$XCjO1tp)TJ3vPfU&NK1V58tXOU!emF9 z7?Y&?9uDB%o%gxD+K=M4jrLAWXP#^Sa2R${DMWLD-P@G=2S~_A>IK082$?J49wJUw z!}xnJS|%Tbxg>F%`X)IRbsdkTa!(4xIeMmqEv_DNLgH;UTLBUEuY`!kVLb6hd?6(E z!1pZTLYu9gI1A0i1{%r{0pe&==0>HRFOpBimo{Q|H4RvTt!Ly*F@_}OAcDkYXsVGk zaYd*J#JMQY#JkWK5$_aVRYQc*fajCqed~z}%nw%bfD3ZGf0#H4D+7rLhGKOdbn(67 zoPyDRF7YPwi&R_%-kW^7`f^!qTPluV9ClOad@JbBefeODO zjuiXmVGYF`yf(@mzlfe7-i~}Bu7G!9EoMOqzg8HBio`{yU5S-=rsDmG=u4#n-n-GQ zlHZD14-xUcNc5xS(t+qDYJfqieWhYas*#n7b?2f1AjgB7iD=h$5f|elHgO(03$!+z z&rwe#u_qDvR6s1nJdy~1Rm5&eYXuT$KRGh!6(Ta|n4902=c44Hxnj=9^}e%_;^eTe zBu+pCf%fr`;Sy_*v&8w3U=XVzsU}uoP)EE2FG55s$92I}3UP#pzPzIc;o-%6M1)`D z83Dr>bsTY)TIV|j!!3G1j{S=`67xP{4u)!RK)e|h_l&}O&ndNXL^QWzzj!QoY*@j^`t6k3 zKR1@ze1<;4VZ_KM@xMHO-LR#%Lj_j<*KdG=Xv%`2S6`5ixi21YL__2AwP!LS{g|B9-P`&U=R zRlHs`w!&V$p`xhzc*W}KxLL1PkDXW&5@LAyV3X;o!jlf1=7#Ie6=fiz=;PBS_1Bahk7C8JReu--Xho|8eo)15>1Hr@I z8hENKTYwomH``qjleK4Ok4oOecna5 z{|@*AmH``qjleK44D?kMB#-y`p&}6mKd>3t42%FZs7feEjez;^wm!VAALs`*1Dk;n zU<8=HCUCd{KYU&GKcM3y3{-P5PSPA=p?K=Ukx}&QaHX@I#gdaJqjH!|BfM%)Cr@i$Tg_`-2J( z?FFVpPTSLp(+{RdLEGkES-9m#!K(pWxWcnGt&3BhONuZ+s{eZ1a+KVVn!9)lD>R3< zEkHDeHeK;ez&7}q?jtp+3k;o^4NZi+0UeN>aahAy;vD>#mJF~5@Cp2wmgG(1$KUAr ziRgA-gf06i`Ay9&{_l^jj6qMsjxG6aBA$6r@mCZND}GAxh~no&`Wvn!v9VEqzt3HZ zt8uLLf{NKQmn^MVy2KV(ylCm7*^6pSI#V{MQP-v;72TU&sc0YCxLNk*3Ll}UpdUK0J816sBRmt*s>QoaT>YeWG52W;EEGy?fXEBPuPu)n8k|e z*rDmd*PZMKT|Bo*9zSDhwQ+Su0@sU`ThN|vM|a6m=Mg90cl%sm0h_7PrW=$rQ>9Hl zQeuT%gR%#vh&VgPk*PI`+6VBlwEkf|y4#!0XlU=l`cqCZW0^59)cB|_qHQeXZ^>fR zPJN1&DIVFW57Rn{_jf|tl_4(e)VpY%LLHvepK)p{#cR*#e*rwWOP>JvXqTP`NO)FX zsrf<=JgeUbKcSDF*V|~Y{^uUO5YT6@J`S*auU_c(`N|{dB`d|zy?E40(P5uH9S0~b z+NV#_u=#zT{|u27+lis1MP) zg#LC=PtLcxi@a?}de=Aly9na+H~Js#T59OA@AVvqmMZ@IZv>qhTK|Lok==Rsz;_~| zwznfiG+ff>Ywg81m-Hlz_Fb3t?^05IY@Y9ISz2nIXx+R?OL1*0NL?99_(>m-7W1$a z#|@UspZw5+$?iOd);086CwGJ0^W*Pqk&C~(-0~k$+SR>eVu}pY)+aOEx8%$i-vD>I zt+93*lyF9{z`Tp8xTe>9Td&sG+6&>|^0(Zc@Vlk9&2FgMv}JfpI(1>3oDsJ#7mLw_ zJh9o{EM07{N(#np8LGL-}Ie#b`xd{lv#NxRYEZutQ~tLQt> zotB=ALdW)lWx6+hoxwRYV4>yJTPz%i6P2dII#rx~-O;YgLKw5*BGpF%JJTDkt*|c< z4XYhVd22w=fMx(KZ+t*Ge!sw;X6v>%)TDuO)ph?O7>~4@d+yMReZ8*W za{07wTqo~ICCbUL{>=rC7n{|lz!^7V7Yw}UVpd_%Mz>`tow5X}-J z#UG#a1-K7rC8Q3A-r%uEZ1W{~gaK2F_eu8{&X=7Gj`xkG<}G5=V0Whu55by=ZlwW_ zVthrOw%r9LnM{*0n2Yto!xV8aHqLXhHzqVqe5a%9_pm9DxvG63h7Um|?P`tjyIjaBf)l>JDxv=k-=I)Uu@s>*LPE0-Owpyh>Cn? zdnZf_&D-|FxXLv4L+4Rx8n;R#5A@Q07Q2SIdj#LYYgre2Xr2Ul^}<>ra=wqeG3>j^T7~9}UxV_h02f`GBb`f-wOM#p_#~0SsghDlZiQD+MrQIH&?^ zfIEi(`=WuHQqmDIoS#6cTgSSjR8)h-YnXx_ge|3*pQ8|bqEeciTl_A8_f_sK;N6+z zir0aUX2L5z8~gxMU-1I)>zVF~cLo<0r&QDhi~qoagBL#V5{eRxGMhOBI1P?zWpvg2 zG4KiCxJ3>T_Jd=V7?mkL4vuMdRHU~V{1I^0Du%ZP{29fiRFsnHmtetcrHA?87z{?2 zbKMHgferdVe9LjA$H zSz&ESY}%!9C4qxk=UCt_Um1>Twgya`UJXiw$NDweLgCc5*4tn0z8 z6sQ3o%|1%`9|gXI9hKtT*(<<1!ft=t=67WkDYeh18d$1g+iGMKM$Q$EU$eBceRXoW}&RJ8(d=R*m0*`=C0B2Ld6j}#92Rxwo0`T`Jud?!d1}u1F)^O#a7@Q|& zZBe`z_?zHXAxsAU2;6!B4g5T~Px=2A+2w|#l?5MxUk`4j=%2tx24gICz+wtGUR=g_ z1vsmol_Imjo4~Cs8UrrCUs3-1@_w`>mU~<9o58JGLV?$2aO(v=1rI(2ivkq@H9MaN ze?##@;LoCUoT&Iy;6H&+Rh)_&CZPN4rg#9n7JQT9)4;E&?vYu*Pm^xEz7@f4F64hJ zSWHtlw1I~T@X3n*0G}^_Z&RG2z;Wz16@LzVHakznw}Rgb&gF)D;0o}+u`5;X72rcq zKz1rV*@@U$7bVR_qWfHo@zcf14bWJ;?OnT9)5T4+`bM07*Pf>B7Neelfc?K4;4()X z%{0;yOHr?_i(&L{dhB$X7znZU)^3JZtaw}ZrpGQJrk~&AXImw z?F#1+?^k;w`eRl@-Vt@4e~yi>k!ebI#CvR&eH(m5acj%DB34wU$3y4 zxKW8B1IP_2dTc-;MInrvWJWZfcppRw#3pRaA|e88ui`eKHg1D~+fTL=*FyS6T!%L$u7|W9$cVi`M8N#c zOCjpligTYeg|4|oRPADgw-XUzesbgk?|9M1&kK&`d;1 zOO*wP__yQ;2g(Pbqj){q8zeuopanlB%^@Q4?l^H0rXj>eEVw2jK&e#_DZ*__6x_EZ z!e1(J7E+FgDqBoMIOPg=5%FRl5H}&bHi#8hX8%Bo@raQZh}KH#Hh{+ha->WNu@{;N zB2wfQB1TA$5+6qr6Xz(M2es%#$${S!>y*|(pq>bhaHbLGp_T=e;UQuz3Lz05KPE0k z*-*SavWfNsh_EkKoa0!g;2I)Q=V>C6cX&I~zdTdC2J&?B1*i>Zi+GG%88LwTUrYmH zv|U-8QmCU~@f%26gy7s6Y(au1LFkhDRCQyexbyP?h}T-WDZovRyMWinAi0E`K+dbj;^LB z&bvhIS|d4BezSXayj-`fwTP3m-I?|elBMqB_)2`JJ0rSOVy1Hr{da?0UWN8_0c<=o zx});35{kc^b^63%*y;QGBllcQA0Nta?L>1nPYTRiqd_~{T52QsZmf9qYrT_LKF8fU zMi7x4dUB5Y{(j0P1UbmZ(OvZ*Nul1&?r~9ZkhIzIg8O`Q`+V&~o}|#WH{JhC6cGwGarVysP4=#{VB?V{W6 zrJrwpb`Ot6FYyU1{~C}lE}Yh~wPE5;yKxMno)HcMf}_v_4kKN2=hfMLg#~%y1*btV z&{?OE9vm2+IWf<-xT=0ez1xKq+6B1{L3?J($cDT8HAn5f5?drIQjm+okUq@8n(bD1 z`?7|NY_<5_x(60(nH4qA;XSgVa=qPn&vgAy){uf$iyPJje1%hfS7S@pe70WmOA^A# zOFpZC3a4;&`k0&C5q=KfsZ-UN)AMh#MN*bPqm<7(&GGF2GIHd1hT1B8jexwy)M{t* z;W#I(w#JH(o;uEN86)0u8FwVEjM#cXkux{;XKWj7%U&i5bt7eXRoHgj+_1llD z&ztMkZNK?ywN-EX{39(gl@EE_-W{8(O zMwWJ?IO{PowH3k@XOtqJZj3YXJo8(6AU^xg&ll_CjN<-T$!S+c-iKq%TbFdnPIw1; zZo=+u`2Hu?YV+temy9t#-3%-#{rrWn#D z)@a%}o^>ia+g8)Y9xW%9O=gMr`d=(xzD$vqU`%QE?07#uT_vg%NeJ(0`MnScMrLSV zf{|@^_{RFg-`f~jqMO(7Tj$;(;k1mxnunZFwpWQVDUZ_fLUADz!H=zu+F|iglZhk6?;FO*8>IELb7^VWu_gKLf(%h^Ix=lwL@lw z_}ptG275=$Vr!N*?vuzU$x#Pz*|K|LEuvR0v~-l5X*s>a6soSebMD%Ld|w?t*aW&q z7;s#6+y`2^zoyh_jPzIfe-oFT@=l!3zqVt!r$KL)}3l6l(u`QpIFGH zwZ6F()irY}d;6*bcMcfVeTl6ybYFYpR)@AroJ}&?kAKPBSr~6KFQ3DlrFK)CTktn& z6k5g{p<{1RIvfgHp@);#2TpYGQvXA;3mul+z&BOYCgX(j#jx0Y^@wz>t9T~a$a3|@ z*m9M4FWGpYsq-#F>nA3q!1G{?r+S!&{`g`1lav99?J0&=>tP<4-WO5z%AJP8#RX_Y zZ1U}LiuhEF)yq;1!$qA?hKxuhOj8*VQJ!k#i{ezHy(|};HRr8TxBooj8TQCV-S>Y3R?%m*jAiP zG1`mGos1;y7IBm?&xE^8*kHn=ChQXFoe`TuxKjxk-+^(klxuhIjabEFEQHQq&R)xb z8Q|#K<@6Z!xvc@GboFXsky5f>@^U`c|pNe8(ak|e!rdyou$1v`8s0c37!6?YP470`lbQb>YfM#ZjE$>Ws=B>4#qr1>EV@4?jxs z?gAeHGq)g01sT&}aTmxgX`#uXHn%+VR5zr+eVnQ=4B!XE{xmCwaz71z6KX?O#Sef} zEy!-g9|7lrII3Xb{j0&pA#X6qGFM<$!eS1yP~9*J{B4zayn&O4^D(>~xPzIg{Qnch ze}c?X^8ufLGl%%&_tN9w*TW2uGw>H+NMU^jm$Jq!u%H}i6=KLKI`t$zi_solTymZ< z{t`ILBHf+fTvuxG&rqko1TRwVuY&i&k6B3noNiqo!{@;~1V7BQOj+Y3kP7_%q;ANE zISUW50`P)g2aZIL0banvMu4-j@B#0G-xTAYs!zEx*SepIBNt5NWKKT5ZsE;c<@s2 z?RdWQkO2z{xmk!9fCt=x^mn3Al7ELg-KYuq%AIrhA>h^nc7RjtV`bS2@LR#H6yt}j z`7yj7_&wlqlRqDj0E-7=JbVi&#BXDG82s57z6<exrXc4aLVnhi?R9Y8vd4W&C%2HR$OB}Jt9x)@9cF{lp? z>#E6gc(vC=hdU6j<AbFsiQ(u^gb$8hAB`1+p?Z&Lx5fCjo7H|5-9)-Eo>WFhA&&Vj_4=wFD- z%x@cUlf}2)jU-Q*DH4qvFIx97l7f>Uqd`^SO1yj`oQoB&BqG!RaU$m1#7_8-OS}=H zTH;a!M_dBo4-t}$Pl?kYiy=j*tDA_Ev9yqgl%Z^yo8Gu`hQgxOMBLY&2=@U* zM7)5Ah%Z#`kLzg0xV!!YEs`PRAtFVj)>UL&UsQH3@8lPH1~^sWQX*Q24~e&+0HE^o zL1Ty*yG$n5;mv{eR%-DiQl^m{Z7o;gb8p*UgJ>=pFh9|7xu{$mi3r5OGi9|sh;Z*s zT!5@1LZ&;7xDKLIg;K{U_$I|$6z(SC&H2rV$WQG=DVRifL4I*(fR~9_Pvk^wDLs;s zN<5g`G~(7G0z|m8hvNd~A|e7}mq=VnMAB{{`q4oU8=&iqcpC~SaSmRPxEg{*bV6A8 z8?@!p01pKUrxE8vNJOkbo-6x3M3i1?`Hs5-x=V?3AxI?7LJBJUlsFEho``U}qI2TP z-&`Vi5wQwoOLFA@?KGh9Jq=`D?It2M_7EY#`hxDb(b?L>wnV%!wXpJyhZ9lRClk>a z_=!ll0P$W7PKc-_8;PhT+lV(qY(@;i#TMdS$UDXVpm0C&9;Gf8 z0i7Vf8?sws4rQ%CMD$<8>rs}7gRqo@h<^fsgDTX1&S9d&gPBYxq^Z2b&B&t5&1U7 zw=2F!@%@S)Q~ZSD5yj7$e6a1ZviPs^0F6rWf$fQSK(^w&6)#Y{Sd{iPvIaFOxe1_tF@l#*pk34j5>u4w>!t&~P z(aY)ZhW>S(aoXuzv~1zhrqjW0O(%jG;_G~)M11!fcWV*&tvx<8w7>DR%K>GSO?&H- zLmv$`hB?LXGH1?TAF?k#kAQWWxnNoFs7C=-@`ENY$LjU4s{*F zct%}v(tsO$G1t`%w2-MLIr9hgGgX;hSB?UPE4oZN9_tOYlJ~J7+7Yp@v?$`X~qHv^<0&ShQjx@StdJmMAI!dr=zRE7OJtg8mW=Jl( z#orvaV0+P}lRupIin~S{i?r_I{79oa77iv98(k)}A7jh1RpGezY;QPmOhHxI!1#y; z>C|NBW=N-;k@cMl*A~{Sci7&0dNc&JILOV771j+<7eO7S#S6-Y7XC)d+FSJ12cMlE zh)uJ`p{AAFjL`H^#>)<|XM}FJsJg71*z9z+b5X&{7CAR>%Y7W|Xwk>XZ_#lM^8f~^ znSdMqt&3Cgzs7LRW#0zp#t!qsIs|1##>p8o7tUB0XUyYcI9J<@i1E)EbB`Ez%$S3= z*08`}Cpvcj60t=K9-Vx=2|f-SEq$$A66eJi9I8dd2& zLFA1ywm>NMr*XyzfIi;n2`#^`XOBIBr_2Z52dvgB}7Y}C> zQU91^O6YY{pz(FmG)dbBEW@&c;X4uLZ52<`m;^`RAaWK<5;jQ2<^Y!_)qK?mn7%) z1M>$;MaM~$d*J$2>u}{jShNWk;}T|sQ%lx&rl8enn=9X#ycoflmw7Za&FJfGl$Yhj z_-E~Z74g1$UAV$UUcBg^wVxU;tV`DZWw4-KF@6+3asKo?esdLP<;p_@(05383erZw zd<;LHS&~c4NHOdx$?z>bw;}i9na&$q@0L3LJbiUj}=68!jCK5 zN$h}kA)?8<9gpE0f+HQ;v!&ydZojgBMcEgJeyTGjYT~(v9KA!g-E9QzW(PdptaJ6z zI+rL4e~<0(jU$Xi>eKKlB^EF?ilaYj*qMZ>P&1z{8n!?uGnW_F%NpmJfp|k>7L;PS zIwMMEt!sd(LhOAVUGJx21|_zFdsmY@~Lu9oW2QKzdaPYuLCk?d3<2Qn7xsF;W{S{<7JakM?HJL&iPg z_w9`)v3rNnDpb~F{7=(*Nb_=JrGnbXYN-q4xdqw5iewbMti%nHN zHXqEqu$uQ_BQx;~j86P~`02vEAV4PSc;AVYw@d5`~Z-C7!$fb2|SD6-HLAo;u1rI zu{p@Pfv+jDOtbt9CP#T=onpBvBckGCLS>ta@;6WMRYcs(B2IseMBKk!xj(J&5E1^~ zAmTYEh$x@`XW9o%#d`?&U$jWUP(PkycZH5`GZs3~RDlZ|Q&AF+$yg?&z{v{+~w8s5i@hHZrkNZYJS& z%8q9FZ{cQ=WbyaM3~OaTQ^U(iq4>uUj4JW4NDfWW$zau@zgm|p7B3z@VhqC`5W_7t?K4Vg(#773#^a)ECr@0c;RR!gLp=N? zK56w9pTB4f@gRF;Nxxg1`~dAb-_5$%uD=t*+2B$NWL<2xscP}+g?=E0v)#@DN6JxF zBg>-;94Qp#XVEmV16A%p+Y7KjQL!v+0vtIT<@bQ6#c*oG>>k5!0B41=9!QN&dEi!s z_y_Ybh93qW6!nkc8TWmSh+3eX1|Jo}$AXWG;nZk3DTcG4+#JI{ftdp@D?lJ&7#>&>1&fh|9si_28xURY;+U{@4$3z`}6i>vAxofEDDYpUKa~uG}BPS*0j}KpBe`sO!LEs}u#ZtWwBK^TQeSe528f-mnK8t#FjD1;>;+%6ak| zQ@|>*{0^TL!+U}EiQ!K0>tpyCJXuvK^TQd(AF)-6N*+eV+~5a~ty06mW2;mT@YpIv zH3qR&ifU12$Am|92xgTEnytAWT~p_qg*Q(hB@TaRj0}zc z&UoJ52HP(ymR2uXICEK`vSR6+&{r3Xuk6|@V)OI%OyT>{aEc#3b$7#;4(&&KmMaI@ zw&!YX*Uz9F2B7!!Gj|3if_R`h!Dl?WI&@A?p@SbOm2zueiNuT1F`TTp(=QrxW2$yi z=*%z1rPw|y^u5C~(yGa_YL|ID*T+~Sivxdf^%BkB*u9}Mtv&N&LlbrLJRb}10i%`p zF2&;(Rr5U)uF}w-=X>%r$wP47Z@=1&CWVf4hQ5&)3vpyPf_kpICr-TF2cggu8kgyb zIAT2^ZXb)EdV1QJo@k;cJO#!?(K;DxyEk>io!^}`I%*+UuGV7i4{hu1dCeNp@?{00 zfu|1kv<~?Pdq(~$VGyA-D~4hR2EL(RMtX9hHhFf87N+0i`Manei$||{!I%(&>53I! zK@XwFCVC!^E)tYBxMlFK0txNC#WOZ)BOjFN_h`Si89c|69<`C-ET88Y{wo^+n}3Lz zi;)jcw?PU%xWv;o#LJuevl E4}%N6y#N3J delta 92606 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ΜiI%gkXnoQc8y51nOe}y4-zzqezpup0%atz1?ifaA z=%VS8(s7#ty)oBm1E_wIHkgjd=u+RNgSA2Gz{vF;!JjlH{hM~2+`mAkw0AE;HxuII{xc*FaeBW2l7%?j6}DS6 ztyH|1kQUIuXdRMKOr<3`t@1BN9JG#3?lZtQQWi@0@!(UMR<2UAxyOsN7|^9r?^ug; z2vQmNBVL5(V=&_-pNQvPh^MFImw{g^wTJvW!Mh-A(h}lb!Arr{$?&7W|B3WWl>D3p z6RARs?87mU&YKT6ycNLr@)6v_eSs@q&bqW0jIOE1(GiU&m!%R z{08us!AU(Rz5+DYtQ8idA9@Pl;X%>^$&p$g>*Vr#DRPPUY!olyOl+SJj*`pn zSK!bbaR~Yd;bn69y$s~0pgovg(w0-1b7u80-PcFErbwY86o`nB!7Vr{*FujH6g

CaH7qlqH+-; z*QNm}>sJv@gq9OdLfa>iPKcBJE{QLB?dKmAB3a(NkX_`ioR1J#kRJIenJ>G3cj z%KoI}=LqXjR`I~OXzd7-u&_qB1Puw{8VE`_9|97hNxYX3{vIL30^iq!sHO(g5G5Cb z1VR**Mi>pr=m;mJ_!Ehz3FpHR*+m#hh#ZKQdTauF^2%82qD35bbK*ckPp04%kehfh#Nr-nGlJ}HcU&ModEaK_z71Dj4 z0B`f|43ljjHQD<7^dEWp{@|jmN~|gPO$%}76g8>oiLFYm+yj)eL}frfapqc6 z7H%F5dKMG1$fhOFVp@uoq!)K8-3VKEDN(c}cd7|PZ5$nYP8k|q)5nz<L z`JNQEX5}{c-PEk44%+BjF8wwK4B6*C>{Ip1{5e&8!4O+;%EcUE{=0oOp}D55gMOxD ztN3TLGW62v{tUNk;OWIH9U1-(N0>`%Oo=V;I)%uJhMAZfi*kEXO9}3P)8-OyEAp zM8DzaDn}>(YDY!OtiYcfjE7z-~zA3`^hH?q~=D&fd*)Xy64d_aZ*z<;BQ~UZH^yUB~txgUT zUEWmsMAYO2RtyLf=8qjeL=4}g_E72#;`p129SsL#<7R8c)27XxURkNlm_1h;Hvx8H z{F_Smm=Am({VHddh_!Djw%m#nv}qguCzIPzmEewapLg8YQi7veESfv6Ib^lJdSS=< z3S5O${c&1gMdJ!XAWl~fL)S}1{ywGnQj*W0uTIbfQz})Hn--es$vV*4g@g{4sOAnk z!FnqGAY+wFf$g~J|*5% zk5&jPW66J3UNZ2Pf=7q4qZEsY_7`Sx5!25YZ=8o_>5<@V#NjQ9g?ASH{7RbfA@ucK zgZpB8#cV$&XNtHJVA_D@rzaQMDr0BUOXv=dvZnohr2~p9jA9G^XfN!pcAPe;)`OSp z5|JO=umYzBH24d;e{TAPll#~0IK6L&3Hc}Yc9SiS9zh9G*4_hM!wGQ;;2TIE;uHYg zT?=t?{~-PsPVT?_Ol)mCPMdS{e#Jc|Y_I>~9jnvlPf{Nxf7q>KAAw(u^}LU%dqM#F z!0$uHzX5)TKLXwh{dI`bS)7-_YovP>_)rMgAo&>Z&<|fMF|!e{z;ueyS0ZSJVgtVf z&-cTQxDosiIJ#S%pMo$G6!giG{}sFxe6oE19q>0HEV^mkKP^Un22M4J!n+HcqX;!{ z{fi~DVPS(svh;8x_$A=SWq`DnZ9|#fB;7UerQm%fH-qC=GV@7(2G0X9!{{mbU%`vP zzmS|hE;1I~-b)-qAd=`USVZXB9hC5S@LNg4(aFbswF|l-b2>s}T9hQsu8Fbj8AGsgA zh|@M==tu6)T*Q4L9xM|mPsjpq(WgI_ikB-)sh(LES>JRKA9WG$a}l>+#MO)Vrx$8+ zFxq{;=2x<hTp#VzlsR?$1wY!y%8 zb2GwsP}vza2eTH08eS=i4k?51RhouF%4L8+5FCfm>CO=)hm}VG)+1QxEf@6wdQsn; zo-GoOVhA!HQ@}*T?sKpokxgy&MLzB!Pz~9tDnZhd}S}$--`M~ zScU}_pof+R=y)DY^Yv-}I4CPxi*O`GpYDVABo4v)6OPB^nQ*L}?&o9u3Y>=Wy%5_=OO0)6%lyiW34 z2%#GKEPf=`Bc%QPgn2k3K?s4j5kla12$2x|;^(#U;wN%Wzwik`dh4@vL@)#mC`DL6 zh#a{}a(&v57Zwq(Kne*F!8$@jpilb|ke@hGs?YKf&I#hcbm)&h%_HoG@CgT?w*gWS zddlem9v2ZJ;@b%?Me9z8i1Ztxi0C2dFF-gGSxAV8Gia8M_j(iJz2SriZxkVN>MF_g z3!xBDzYq$XAG8~&i)x-brJ{Il<@6@o zr%IzG_@y38LU6NoSc1M;tGE(`b-yvgRD?OY#c*M_Hj2LafU2cWkNb$|G^L9&FC};w zv@S(I3~D?GFZJToS4vt~NjI!}S>Rjzbuw;}REeRdFw-l@#zzxysN$MzeGAw4UN)w_ z`geC$3>H?p(eu}{ib;HbN|6_R`VPiH(1fP6)5?363;T)s&SdoW%GlhuE4$jm=iO%S z$lqRiZdCZPM*Et1s(sWvW?!@P?RlrtM-`{J))Yrnj;j3U=rxsHN_cv@p-Y!W=jfZ1 zx%Az@Gh);CO23rj1^Qqa7E5NaEY&}1UH-Zc5=Sjl+z#6@aq4?z4$c%5|DcTR{8XXZ zuqv+uzBFRcKfto3kd=g$SUL}`5&M2nuH#;j_M=gtw-EBXH21URoE&Ed^u`F&N*c+?=2ob zr%dIwBKjw#UuT=&4jD__56_|$1c&K8-Cwt1aDLrS$~VfTV^CtDEf?sDKHed_;lE)| zLl+ufh5V=ExhKpccYD=L{_Wi_s;S0$^a1buvRz}m0o_GoJAMv)*e{zVIq0qw{gj6I z7`r>-I<6M*aPc5lJ^WFTrl@Hil7_}NSL01oC0#P&mx5!R>cWVx2l#j3_e%ds;B@Hh z9m&7J^Np};l>7tmpTLJn-V8pN!~s(Hj{xy&dRO*POYagM8@Cj2f#T=j#60f%LYSAr0oy2bw)d^~^*u^;p zJF_v|XCuWvyNBB%#fu5*!??gwoCs}PDpn_|GZDm@L{%V&)k*3Lx zO+az7N*4qFl&tmuyp^m@#rwTd)GWZ&DQdTb>YT8EsQR!<&5rc59#&eLNV0Zb)Z|T3 z!#m3cr>}m#LFw-lwj%6Y*NC=3YOf(FXah(zT7BUDJrA6i<0x`> z=I_*(rT1{NyZBwYZwL1`jmlBSC=gZ*Q9oAsb-~*6RVqG#b{!K%7DK%L^`4Z6pn52v z3)K?!%#*R=e%6vs^8(@kT6try?yP#>QOU>sVvZRAh(+E)+&{gY| zpq{W(aDGbej}X^_8){TZK9K%S6T+QN>Ck?HMuSQZTAE(VQ+FA}1AcRycAx5L-L^i!TTE#&+X#N;=1Uk3OvFgT79X<%_ zyf1O(_9AypT5HKQ`C*AClWN3=W7W~ozJeur96j0A6I*eJ;x^H19OfdmV(d6IDPqlu zGdtI83va+WtC%wmk>H(i>fZoOm#c39=%OwL4(HF~Q#^ESZH;ghs|ihGuTU2%e3W=| z0z@&0zfVvzJJG>5l-`BUGj#_~6s>ipRN8YHT5kf)M5kiq3AVfJmO9*}ViV)>}mJn4zKbxD5fua#S z4V@Sv{M8Xc4;~;ycv}e({x(7=>I;Mj=ba#W*im}0Vdu*PgrW>2M8uN`AxJqPDVoHG z2;qObbl*?d9gAm#5a0_!hrGrGPIvpr-AV}Fmk{0;@MYrt8=+zQ!th@3?hsb@@sX|6$xy}Puua!b_1SUndp23^Lk+Mf;`CXQ9S3Ay zhLw@#B(-8TH>L4wMD!F=VTv`VocqO;DHoK}*;GG8y)?9}-%k_`3`O4Z~Zjrca4;-_Y}ajJ%A zv;M42RRc?A7f&VoBG{g7p%?#As^(9ka6c`3F7LaRy=`ap!#leRI=Brb(E)PVmKWZl zttnlz3Kw{+_R?gzjEXVa@iNx)OB~3l*rT~C_MF{mc0YypST{pSOdwXQou%58<7MKh zS!xa+DcV3i+BBP6DH+!1lc}sb_s2|Qf!rcPQKp+~+MudR)~(x34=>XNEIzOGa%xL2 znLB;?C6y0Poj$eO)K8b6n5VhV?)iDAxh%?UaG$MvzRuOTb~~@PxwSrx>oV4|^;qrm zZ_8sJn6MP`?}hsRe6DRBR*grY$6n|U6XWs-he~7o$I#u4+K3s-NT%< z`mGHk!%%c1vbA!?((C{h2JdCnxydn=sw3{uJl|B=&FMboYGowqf6UjP_ssEKD}5?j z(ej`76s@gIDq4!WtTfUsUd!)YlX!dHO9%M_Iqv6it}HB(;oy}fY~^YST7nVfYHHNx z8eSPH@4jMAx!TPv;}d@>R}(yZDzoJ-&0XHp9y9UhHe8889z-naoT_v;e>lQt!)1LE zPQfQBt$SX*Lrp)P&w3dB!+l+(i#bqG-E1-)$o0ib8_ga3toT_hj%x#YEHb!xkHvnL zc|O0fhQcC!i^_cSYQ21n#U<6KCjD<#KbhhP;E0IBc%=8-AALW{75~Q#A-MWBwXxuKRvLM#J)pON#`Bx+sF2XdaWr>I5AlZ@y!Dw^v@x`+{ zP3|c7FT$n!ookA2x7z!-gP%sgP3?+jYI-8NIPKE>tp(aZ2exmTOS-w+M;4>G1~?Wt z7a4GYO?8C(jlhn9M&Cwk0D1HhKv{GOn30wTeM-Ot^!YZ(Y+?;A^z z(Gb#-|1C5GN46ZXe$tb0cNh{9;WuW59aOTcexB9A|B5VQ=I8083G1*e7t|p&{o6L? z(X4a-p{tpK04$3rFb)Zght~M!N)b8)6iCe-7Jo~PH8@Cggn~njnrlk`UjGg7FRG-RZ8LFe(p+&wT8BXuHq%kqSYQgmM|HrCk2;AzsQodGFoueyH@5-}#D1fW+ zLDk&b8_Nut=8DELE50)7(siP-%yesG+2$I}$txSnmQCASX2CvOjDJ)zOZ(;H3ugZ` z-!K_6-njBs9%w8x-x|0BZEMTsvhOs@ics|&ROm{i%x^49^1GZ%JcX7*wq!x0-a0s{ z6Kt;JB`!zh+U--9U+>G5LEh-=CYH=mV?80M&q9fe?gTgf7(h_NyK4S8`(uez?j>u2 z8rf6Jy^&8My*zKb0m{U(qx>i99z!e04PlXC{ywwVc2}bFCM<@uxRRYWQETa(^*xGh zZ5iuf_K)xxWb{mL7d(N=PWfY4Iy&?GTjy#M<`vJIuHT&(Idj#|J+Ic))+M5WtMpDr&qxLL0VKg)Pznqy5dx{EOX z*S>G15_Jpw)AtYT^PX)xi5!gcx7OjF-3Qq4+qm?Qu-I6!31xi-NGN5RV4*sIG zbiTKB-Ksp+GGnRc-mDkUBU4W-?_HUM!e#jG#VdER^}TFiH*g%0^-%wLVtJ@l>RstT z%`~=9yH>9S7dEI3G#(&(e()Z>rJsS;{>;ul7Z^%d&vE{|0Nc1KPdVi3T(rDEG3MkA0`i$+LTMu=5{M<84sm zB@20$($c(;<7Q~~lfG3ls+>Kn+n4RTfo_*x%`{d|t$cTP@ceR)h`m)E;PE1qS11&J zcA&vGKVU3ny`udOPvf{w+u!fd@^3WsaQclsdSl~%nv`R0D_iI?Cmdi6xz$0LjqKBw z=s;kd$wvDB=5}kg#XnfyAu=+>j}Nz0?r#e=uBy9uO<)~;Q+kzee7X$srdF+rIimF2 z#X)Zlw8+#Buk&3dzPwfK6IN16VRN@bWX@MpZtM|Qbm8k38rpQFqH92@Xsz?rt?nGQ zJuWNZSQg3$_f6NbtWN&V@g3fdEs40UnuYdoRP_c^#DOHcQem=(&n+!2OfD@}1E+1R z%b9KSwA^He*fd}5GI*-K-bTCrasHn8s*2vGqmd7t00?rk|2m)LLOtCT*cI5(G+=>R z%3~n@tyDG0pRdm5UMKhhHDzeb;ctE4|4J!--g8zneb`y<~wsPIgm|8se?W6|G&$IBxVgQ+;V?4e{$ zR4!CwJSMs3VXoH}epbiARX_!Iv_DelPVA2x=&lwg zl1O-+l6vWxoR&@`IzV%=GsPs11tavKGU}VET-X+z*1s4-9OW-)cAN zE1f6TX}4p1VZ&Q<^Qy!1^C}}7Sast(j+Q4lq74i5(p>z9Hg%(dp+v}6hTEeJtf*%7 z{T4lljyG7NXmDfqs|~g0OAb8Zn=fq>vj=_{H{!YNQJYx(h?HJ|i?f~5&DJaR5BT_9 zrG*x~GkM{Yt-fQegR8ja!By&bbol&GP8FW-t7%1 zxtx4KP+>K9G){Bef!wI~X)@fRQZrgLK%{R!q6Icxsv6 z`2w}sx0El$JiV#5M*WDhj;o`OA$f|P#eN+&1Nl=IWF<{TV(DL?zccxLyvg>8sB2+ zcb&)gN}Jknr;o;yYJH!%RnozXj;^9QC%>XHIS|C4U`w_eHI^0b$A>cr+&7|HwnRfdpsx5SNl$$(7M$(UIzXCrw|r-x9GyjE)r&7;Fn_iB`16MNq5wS zB-@gF42~}pqS+npfx|Bzuk>3`C&K(a0yBNhZL@p>WMqo{Q{+-D{z5@1x)0eE>KYy_ zmVKZ0TV%irtGP!9WOAf`hA-n+zR-Q>zMuVcrN+2pMG<;wwZ#-*S>si|#l2)U%lf`$ z`AmF`!dz4qae!v__?(4SG_{w_&`>Zb7>N>K4%RY#D%QpVK^vC6m$bl)bpQ+%UzwES zUiPW@1X`t}8=4GD)Q?m_2bYW;Id+Qm@2U%Bxq1UWeMVPHMTadWOQ*$ZaJiHAPw2M} ze2jjA$#@Wt<-eSN!u0;-onL=gww!1FrmeK`ok}G zz>rRm`v^SKIhS(y*N1#I8-7N9adxfs45RBECmVsl?iJ zcqY!u{BX0;8Z-MM4^zYu`io6(OoE3M<4jgtkBdBXxrj%JA3GXT#Sb51vtTO)JA5LJ z;PlQ_t$eXqd6k+ie%Qk!d5nl&r@DB)7{3lH@%f@+oth13B)C-g*I^wk4{O8-JRBu8 z7fGQ{f$5tWDCviYJF#djaW5h4ttf2zaGL(53m~0s3Lk+}5rpu+1~{WLW2BYj{{@Nf zNc@7(g++9rha#rdKq)|dAw z#E}sF;(RY`CrS7Dgjif(CEf2gLc8=7k_A$tFUJErLUk!cbk>dn(pTeQUqc)b=&SI+ zr=-7+3ANzqQgZJMr6CO6ye}Y*6yGH6Zy|)hi_D(j!wPB9AU!k_BEsW@y%Dgq*FUZX z!SqjSAcAqIBNWkGLI}E;5GkfRgk&E8(p?Ar)>r`&gepV!`t2{^EgosHjt~;=ChUy; zX+lVNme7qCP?u>LbSp9N7eFhgh#r6PKbE)%UuZ9 zQyvKm1hkkC8y)KiFO#>p!0Co!_+T7zlK%XJJ#kh|^3MtTLWv2p5isG&2!vWgJOsUP1$ z*6PQ!`k{?Qt3u&a5q3i(PKfu{5h6!J$G6@gJ_6-`njR3LeoPAiWLUwGV*RoeP(QYX z07jC1E{cG#KemP>mJkkr4oD0g-_kE%!QU>jM~?al5zaS+@z^no0n&Ha?eu`%QvKK# zvUU-1c&wNB2q6S{O5$tMUjN=c%9<`)k^frquEfSw1M0g)au3uq7 zct1-XkJOX@QSns&@oh7xQ>N@`aD(+s-2ul^tR_5~* zUrNMs;N!%JkOooa-zAAj_ZU;6_!*@ZPGiF($CE~Wpx99&9`ifJ&nljX_L{CKlS2DG zisv-^^LUboZZK*qC_O?alZbG#KyiK+$+>P#drFUxv#BRTycO-1IX%nT?BM&BZyU7&m5Rl^~dtQ zCDnpz3#3|5=7WaXHgL!gflZ>5#1#)3^1%uORP(tGd{u|%O(4;_H~(qB2kd*;!FjTvJy%;OM5(yrUVI zxmqWZ{$PyAOR8{7T^|ioZJPHs?C;iL9f-fJR15X>omi^nKhc)s>wiM`e%&r^{DV={ zvhNQ@0OyE_tUp51W=+c-f5bdZ>KQ51rsZ@EeOF;+E*oiQBIMbyN%KuF-~s<1zhV@uwG!3HmnSdI_Q^w}=5R z86%9Fnl^~VFB$2MxD%r8B_ju$Pe1pPaYNrT`?YMBZx|-I3qmzZQ^OgUHq@Yj6qyX| zlH+L`L#KU_-ygkXY z+0T*r-Jeq##*GQ$$ITnke@U)=P%k!2<0!&%3z32e(o@$%~sqnm=y-#~lk0eaz9q@zT7ot5My z{bP)%y%M`}Vr*!Rp#gQFi+~ZyJbdFcn&;yNZ>^NeBp(Hiw^#1hyB9b~to*Z)lrj&- z_(EOqo``!|uNRNNT5l9Be>T!nYVk32Cmzj({ z%GGEw;vhtk{x0SmgkuWJVh;#zlfxjU3vm!ny$`0<_CWN#gND0%p2yaY;EVJ#;r)xzbJ!?+h5WFN0S-A0b;?cBFS5U{+Z|qTX2)z%6 z6cG9Z{39fHk>cF*>H%ai{n7p<@W;Tj72gfci&>oDFtm+|Gf@c+mp1oT+^Jm#&fIXK z&jSaRHWUV|RE&T;6}%_zSq;cJT<(W^J3veOH++uh#M{6pfHPO<{?Fi7bh4*p(ELtZ zfUg0k)`0YIGYpuW{3STt+H~;9m4N;^cWGpiWaGynGDVY^pa|z6X)-waMADwy_%Xst z#ZTgK-@$#Y;yeiY7X&yE@kYW z`y%zl%03r-A%1Mk=sp4WkKs2|ab%J<28j&zQ3faAc`gi??euUEd_yPx9Qb|Ur7D8^ z!9PN=I2GRx&Qrz*D*r+77`z#oimwD80DfBWIp8VL$p1QJFcSukq6R&q_(brjcuyh$ z4g=o^j;^LmU@!0%@W>N7z`qACQubdUcLpFk(MC)6?}1+e&U(fNd;@%PEb>26W`Bgi zd^q5%LkEw5Zvf9$d=vPi;9=tr9yo!+gmfVyA%lrcX_|gSVXaasmff8KglbQmXJSA|lwM@Mj_tmg%-V<|*_O;Z9D>0NE|z6CNO<%W{y2 zC+FTo%!wXoF8E+x;&{A>L_A<{5pNbD0SdPemqLV@xDoRtMAXoih{%D1LUVYl!1f{#$wDLsk>5MggyWf33Q@8 z;*oJ(h=?Gch=4~C5s{C`w}FUoLAw7u*IGYG}!-0$7u3RBIT+Hf2L}c{|B8s36?G+QUQ(?2hcZtY)IRO+z z1YC2VW}vf+ZIMWXxt9p@Yly2+>4^B$E+=MT7M_R)xRr<;+M&#w6z);@JTZXUPlUUJ z#8uEq0S3A0%s0wH9ubKMGvjTC!xc)+L3muG_-ci63aSEgUgRrLSBS_NIR!NgIYEvb zNJFkL;sr#!1yVr}=Fd<>o)(8`0fW=T63mAX5kM>&OdguohggP&g9!Jf#32X}$SkiU zq6m1xBeVWq+TVcLLShx_77=xTeOtPN6L}^?8sgV@ydPdgjYlBFqUCdV(K#Z*m7D?r z&ry7+vM*A6oZ?gjpnGn&N&kMuw<2@v!3GDSlS*G{X+i zON9T?iWe(BTXDbQ)r!~H9P^~gpiwz^MezfQA5%Q6IKK%FB=~2=lTDka5s`o*#kp8U zK27l%iu)B`AUVokek>56{8+$4opK;Q8sLqJ@0K3y5g8NkisDC={V~Nm6zA#!6A)|J z3G@)ba}>`f24PU73`Q#le#I9k&W{r#tW})-S#m5h$N*nZ{1wHIDt=7yQ;MHf-0ige z#{%auMO=O{u?(bOvu!E)@4#)f0^9z+3!Iw>Ss>nnm!I#Q#) z%R&`G&c-!NeI?zoAXiNK%*c+b$wf9Ac7Rdhe9%h61kQu7vEI$c+h-?t#WLMv%^sj> zPe`3rV}zW4%sbI({t>#V$=DGo;fR&1r-|E6K-T~LrjM0md5^H>^|Y4u?7C0Ov;Kah z>3wB>u08Ya`cnPq_EPKPBTesJFm1f6W+?R0q*(P;5Ht<;bzqC3oPyu&8|14QQ6vTR zO)XCf2>-2IudGPZ{hZ6HQL=H(IHoNu`h9L>XL85S)ka46hPRyVvhc#bw^`v!d@naW zt>V%%(!{FIF-v)$X#E`1IR7I)|J+DVsu}!ZigwQ(rGpRG6uOmOKuV}aq@FZV`qdN^ zNU2;sqn8w}vS$MGeOci<+Jvb7iTiBD*MeJ2iQ)@!e-(buC_aPsDmnDe?mrjb$0_?fa1Lwp z6z>jxJJX~%!~T;4))5D1VexM`n57(?0+yi8a{7!B92IZggQe-a{?|Aad=F+^pF2Xt zhmwA&fE0~Dxw6rR2z!1gxgs%;hz`|oBHVGK7a|i)oI-^A8;OW;GcgHm8W9=3n}~Rx zBBtUq{Q_^`;efI@MD(h$3trtX$x%8#DEps@QRpt>0jX|Ey+cMkSm7)p5?DoK0*Hus z2N4N*S8;y-qNDm_a3pUK0TF#tscHv@Ly=?LI6$ser(hPL<&m$9EE5{u&-&e2j(k)2 zC%d!t0ule6(a%xjym+|fXfX#yQO~1`?`5E3>N8Mn|3ExThofV#obJYX0Wmwi$1=rS zJi<-#xB%!$P5u6YcGF1vxJm4<&EqDE+?gmBRFk0+axf_qtDUWYlEBQsgy8-}Uw5B( zXk*p)6X&kkUg@bkT#0_b_KtGn9&yhPMnT-?leGGbz~lZzZ%Nr_;%`3~LxM*t_6MS7 z75M5VwD@Dgp^ACcX@${&%<74OyKCPR5f+F{CPEO3o zseW@xd0F8s%@MIJYu!Fwe*-E{wW)`>MIsbhD#8 z5f62`UAWI0-tP5HJCxcH{b@Nrh2jp~F2tcuY4cu9?Fp#?L zA(xh=4RHUxV#A|>brs1YV*(Qc<^K78PuTCL+3JeKLYm!C`}$qC+;zC;9d(D3x7OCK z)N+1kvlHdnzXXLATex^qx!*gpIL&O+G6J@cbHLNOu$TYnBZyxPKXy!nV(Mgr`mF(`&9j+JCL+|D%zfRZ+g_ zYKpB6OFp$u>!;_q+NL&5QcoI|&2zE1;YSE_jF{N9S63`#blY}IsnwRB^#InS^fn!9 zFw+sXT*#O(P`ZhhZk)=EqphFUgQ`bY-?Vw)zF>c!Nm}OI>g>xZ(mc7^Ct5~g-^pdy zU9AnULKSJ#(>!_KegXm5Ry{B`z-o9XxuDe(+&|jZ-O##(MoY={Zde%W+RHzGT4m$> z44>&ATIls%?zi=g$&ge&aU~%VWoW9kwLZ?Pwc61oWSmg|YBF&(XHt^<~3p+cW6rK{sitcVP=Pkv1;Z5-<5=YH=hbElT|=b2wOoe{77*C@HJ zJ+dhq6i1r3=oyc$(!w!e^Zuyne z*P8W3^P2Y`D02rsX?kDDa(@ARAj|iuSoV`q2qnjde!}`ut9bDzECntQAN_>yXN!pY z*~o}_wtVvveaV3(M*Y)bt)rDy-G6%g~N-i(6Z zR%wL|-z`n^l!P+%nmqdxa=IK&%$ikp!(|hzV|~R#4UzD%I&WMH zg|kh2p|sF9)`wF--#2`-n}(=h28QWuY(=(jLh{+l;^7(;#?G#zYM+iDjuvSf9RAk( zMtBTVA7VqcE(}#CbCouj20>S?Z@-VzoA z&l$;(lbUc2%af)Eo--B)RlTWL;O&dyCO&g3Wo=o5UHq1;Tp>5|n@^1(S-oI?zCFWN zQ&^H5UH#3C71f0|X}ucN=6c^DH5oqpm;kL_!(NTm5L@3H%#(U(dvA*N7R|&%{ln|? zLz4cd%!FcnHMGeNloed?cD6Fxr!Dg@(sp`>Ya0sIK$UI7-YV}#Ehi?F5}pDDFFP9y zJkX%94t2Ko+s{_cP20TGZpU@47Zxi$nRW-tgp!0dU|=YG*P~F3dUBh#4;nbfa_^`s z?emY4rm<4^cK*5Z5ovABd#-g%(oe>=?7yk_Bw1yw6Yp?sFCs9Lys(cJk9H4g@CSB#(Ftyobd zE;r1+?kdb_@DgtuW?DmLbDcQb%ZzQg*)-qQMfiT_Ofl$;yIA=5SlE>Qj5{^~BLg|* zjV`{%`_UrkLJx7ACiX6ape;9~cf76b7>g|#o{e+4t-)w+{Bj9Wyo!#r{*+j?(CRjm z-bbTHz{%%G#}nUw*-^U&=18X;t!x2a56%u7#xip5nG@H=xR3aw9m9Lc!L1;A2KVCL zM3aZ)F~ z2%I0ki2dctKaAiWTSi_21DgaPS83 zrxecvAA^^LFB$!(f?o>`kle%#hf_?nlvVx;<+}j}#mYe#{AKWoioXMH;nzoTz7e_j zWh*XlKNUZ|S&Wcs0Jq@Bw~0J}dkSFlEh4`T_d0TMJ>r)J^vtzOric#4fD3TH;zPiB zpz+O$d%@SDUT`{w?w#QO1MXG)3ncz8;E^2s8@SF_McKauzEHj^{pM;XBW_vUq z{Zisce5#3KFuP8K;X#Eb6i!5(G+#j+g$YyQBuobqi!qx{#CR}7EW^kbadTifop=e> zwuoNLMH9C;323bWMj~P}XvUm#-zd9na`hemCanFU%QN%%*_amYr?Ia@Ny~Gh%X(1wK zxt9sePZK92hZTo14HiCN;YDQ3n!&^gC@W$))**?PVUJW|9x5Xd?!!PPI1xW4FqsH5 z+-j7w3==Vnae@fD4#mGyT&{1x-UDG7=^!7ql^zO+@W5{ZIU6DJO2wBezD4mm#W`O? z_l=70QGBoBuPA;%@edR~Di=Nwfn4A~0B4m0PPj2ZHxc%1CdiW&FHn4_;^m4@QaqqI z=XL16Uh#Vse_rw63(DZAGLQ=$@W9uP5&o>~6Zv{E0Yup6D_)@ZIK|5q_ba|Y@mj^V zDBfsum$q9Ph{hP_cCqe+86$ocMts9}g~P;%By(W&8aYOovuO3ghUc!&6MM(&I8|+s z(NA3Wk&)H%bCS7MZ`eLMQS44Ja~)MHTS6(OiC*amv%C19r}?5dcdyZ1gi=jc!@7eW zu_(=4DgKpa9udWptt1iX;_S-K?0O-Zalqx!7?BeXq1eh8&QA4MfZDIA#R@KOt4`5ye*6y$FnuOXcAzAU6kZp zc`fqs5c1W{x$>y;6gwKX2yS(zOBvt2;{0$3Ick`wTX%7e+_?_C+$n{0U&|1+m=hP{ zGE8-b+)(=rImd_sd#nEDmPazozR@Y^;fWRbnfZm4awM@t=>snDO%wm@Z>A<(*VsHE z^N!au$8T_m%8w!Mmy=xHy%S9z!NgXow$Ir%d?%X@D_4fn0YBOFo-zrYz#cVQD|$y^rwV#Yt_D7{h*Ljj__ql5mc^YgGY zvgb8cH0mQ}15c+8 zF|V|KJo)xx{}oRTF;jaD{d~7x+c!V;#6Iljhy$RF9p=4reF0euvc>TsW{RF7ei~v5 z{jV(zL(Lm>y|_gmZvIbH<}B3I3uB(rZmTQ1ZIqoYz67(;%Hr&AIcOj^(b;v2XSTUg z9kFo&N09ay<3&x!2VW~yN0PBSoR8mVnDcdt@NwV>O%AsJ+7xgvM>k2>jCf@+79<*B zGTqh~m7DExfxce6GQpKvvKedYXz1;64UlW^#dxKDGw!Ndz+sm>FYHZ61KwXIjMoR^ ze6g7hq4e|;K(-i5@QFDkW~wy{0n5WElXNr;u&`c*$tVtuQmwPNEtjdZin09FN2-@P z7IYJhUcHB-7H8OwF?;GwVr(fM;3c?t%GMU;7PHy*vurIjYlBzv(bdJF)bviAJ^ZQQ zC-E_`FI}Vk7o9lmmquD9xTk$pCry^GUEuic(ZNyVN@oZD?!V>{#+ot_?s@IRk5ac| z6@OB4OLiV;&jlWi1@o1CowRph=99Meg`uRb#dkJ91P@+#dOG_0{B4R)0^?wDF*xrd ze1@{;Ls1I11f2H~Ua0I*En)A{dV;e=_!8jxU78C9d>d#${u6GPA*`h29pD_b&<%MQ z934!R0GIYAJ*taRx=r9&;Ir}L;ISSY9US?Fkq5yA_--20U@;6XL3ZUS57c+N5|yM_ z@e=Sk=q)l4bWgFXm3S!!E6yXT@pjpABe0JHUkJ_zp!*-;cN2J~;_rb!2A<4h(ZSO& zco_yyDF-{i7xGO(qG-PqJaQ$V+c5*2F98GOSdL1rTp(Pnct7xuz{e>b2hPR8V#U8f zmzty7OlAuMcozm6VZdxB-vhoKyh(AYByvC*v7Zk<0eq&i=lKE;fiF^=QoIHVIT49q zc&LY35^@x+hUA~&J{P}WzA|_Xn0@tbfTg+Tf!el<9!N#0hx0Q?Mi zrQ+Se@5WOfRQ!7+<_Z)`#Qlfhy`qr+r<4Oq)?3jRmp^xaUkBc-o}h;IsDW<9=Yz+g z4n%Uq2c7}WGUpTb0Ura7I3;Ipj0Z=Ml5@N^H4gdjRR(P^coYt%s|c`aqkYSkUfDkY zev4}E8Nu(s?^De^`Eu|N(ePkEA|v30K^*cMBPz+cmfH{9tN0-B3Cm#+DU&!DTn&<` z98jBj1Nb<_-v<8^I7YiNz-PdJ1TR-S0gr~Xs|cgDhhQJMIP|_pjP2@5*Vl;D3VdW{ zG>kZwF0QFCv1M2%haBI>{f3{_#o6ty-Yrj6nBVIe>+D%cDTRpOqvvB}M_h#=r$lk! zGBc?VbR1Gc(K?P|xJxBxw4!U3glr9uk^#R-tvXi=_aw7l!fJc$L1&3bMs$rRo@6Ff zti>RV6xFkdxD0AEL^%6^xIwcwVVwtW$i`?tW|D{-(WnrSis8hyqH&TrA`0H#mDVCW z33*YqV>12+gm=2%%-KZn8p*}9$>s?CMo~w{H;87!jp7g>VYwO|BU#0$ z^oZsxj8l*YaqWs7Go1&pQe&56X|9b^c<@rO%;iL6Dc(B@1P&!4++u|@fkEc&^)y(Hk|ZL6t;904r$m(S3q+LN zdqlYZK$-tb@l%R_r?^z}g+FJU?Ov+&qQ(p-FNB;F5jCnl4lM{%^g0a&V}wmaN@KeK z$Kne?M1)dUGaqvt7<#Hmzm$H=8F`Yz?@Z=#3 zNWdu`VaF__`Y!c^_Y%=29V8-4%>-aSys$uel58{9Yp5JxI((&Ja-}k1G2U%Kked{9T@jr==wDa3Zp9G;xxq%^)Iowi1z*r-96& z4kB{qEDotTen{~Xic5Js_~$$s!!A2{uGuf|Ao6CgLzw~4aLTJn z-AAm>CW&$L%xoM-y=&PIe1O9oG+L=RtnXiTSU{ArZ=CwfV-cP5!jOjE+{jU=M8x{m%TWM{QI;m>Ufzi@mW%o+C6= zoZ4YF8)ur%i3VX##TMJ23G*%eCGq>6W(zb{7v67<#~@tm+XLse{co9E)Xzx{O~HCnvWs_nO-Wk zrnG4TygpOPB5*-HA#BGH7b>dUTN;H$bVyOixrL(2;Oz{EPL~%y{Mfy zha19q7H9K@+j4pX4H5b)R$&8An5M7Td#A)C4H@rtDz8Cf!;wb+E<*IOR81M}a@cpuzFG6oHnyvoI+ zPvK!#z`EWpgmbvXW>^%K93CYapLg}N7DS=bBf3A0IfiE3O5Noo>j-YkZH35lttQ+SbpgMVA94%))aQxtLnqi9Qnb5r2T&oSr#8p@sDuN?|>gajz8W2 zM@K?!)`WrmlQ8%N27F!U;12K<_=xao@L}M^%6<+wrCyl;x}N~v+R45@I5j(2%CvWb zr{jgjH(PSf%1j2wpS_>eyD*pvHcvTt0sJ}eNCfwS{|L?;V1PG)b5w+HmE_leSFmMJ zyaaq9c#Yy&;K#vNE6()*t}`<}xkh{pb&@OBkpSKX=PqBR%ENx}ZYY9m#qR?jsag)1 zAn>u^Im(`MM-PF2s`waiYLZ665m<*^I2juU>HT{W@_Drv`!NDEmC{tH6DVCxSl&o~bxj%>M))yi^%{g-81Z1`+-i_$8<) zkp%1oUjn{Dxu*j4SKw@hn1c|ukn;|aBCG_DLd}mPn9HaM;D|!HF9A=DMfWk{U@#0K z7f08bzu_sr;c>s=|3QU|T=f4}kv>pQZ*lB1-DZ$N0aVHQJ8=p|;Ka#D9bOBX%Rw)2 zn&PV!K1iI3-o3)-i52j#?74bP``!wriYM%6lOsH8-(W=)g5b*Fb>bwX6RG7XbL_SA zd_K8qjd9Kt@*6RbB6h)|FmV~iNkjz5UU#$~5fTv*JKY=?$vwGX&TOX6*fqq3X!VFO zsO9W+Qwgn>h=7`jS71b_IOZ#*xm>lLj(R{oALUJ4g(o52fRUZTPl-!0Od+CDWTPAz z?ldAgvh#?SW2j3E!h);Pe4<@MJkhJfi5Tk=QISq5?u-J5dpX1hE?0aTaj`wdcfc*j z_zn!j~P~v*LlSJf@oE_MNcAmTz zuOcx3Ng3ia6b*4D%9e--tBGh+ZzW>ncMlN{)~M`XAkIe7$z^k^b)~K73VYq&FhGWXczH%JUMX=rss(jm^C0SfUG}pIl?8*P}38$kRvgJU~n^9 zFT8(?#^IjtVU?P%0H%?zvA@#}+&7BLUNqkfQgNEg^f^T2c(LN+6rZiQU-4?iYZPx( ze7E9ULuGhWQeb$e6hE!FhL?)=Cee+TrjIhnu??hZ5*>_FoNp`n48=LMNFGqUPVsGu zH!HqJ@q>yVQd}zS!9P3I4mYaAY2~0pIf%vE%LpiQ$tOrt+^aZOaA;2>>16<@A+fXM0p8f8$c9Bfm(UhxMNZ&aM!eg??qh6xBM{(<7B74J~ojb?@J zV~KFzNAVnBkOt+-V3KmMK=De&w8~=M{fJ@q>yVQv8_WVW-!Q zkRu!hcvd-xMT1A~af#Zijj`g97WbHz=2o-L5<^~q@Pg+P!zrRVoGGH_&t|WNXN#gc z=?}Kt@n>_LI&yM%tSDFo5z?cvBJ_Jb+i@&b)IJUMz)vR_9_JTmDU)3y)TC!ZO1tG< zv!8QlZ#4gAL*tv7&e55yq+;419GQ-^Z2Oq24cYj>c9F+iZ4<%2nvr9!ip1W(V*F7w zT=3wwiKkLEUKW~YTsfFkkJrxbH?XbLnaO`N&P=kx&5)JPuGPcEY2I3FELF!bx1Qsz z`zB=DoNX;h%cwouDxB|`)j=)8v;VC!Pfpa~#LQ`B?@Zj1{Mb6ZzoYFl{MWH%F=Xta z-(rTsmHIXwZ{QB=7!7+`DXGqok5{_4c-NT_eZKKvmND0@cwmHHM%8mzGH5^$oaqI8PE7D3gBS!GIKWxQrX81wcUu z;o7GMFroHi1kdirQ7;*9m8JW7AkA6Gg*z@QEjyfi&pItH4H_FgWu&H-j9tp2Lg8(d z2q-52sf5h#h4yCcqi{x^68u+~gOfVk_-Wp=t<(!i*POoSkcLxxJOiVld{EW2;Za*C zd}J_e;W;>ElIXpmB2YFyxf$6r5UFR{O|5^Z{Wix=hPgOE#E^=Sb!Gpq^cGfNQ}?&rRFb59?FMdkJqMFAEGRc7Y5vmA=YPFDNW-5p z+{JS;+*h8GWo)%Y%J$zV+fjHXTY@CRXP*_=+)ibRETR!b|wb4R&LIXC>~%E z>Uibqv^$oLl)0egr2c(y)1XHqsv$CGkb0czApi48&b1acW&g^BAx-W5vx`{q+QL%3 zg1(EkP*LE_{#*A3@f`h}_gD9hJV)%rJCmQh@EoV`944M)e5fux3Wb!rM9Uo;V$f&W z@nJqMU&0IjrmU>;23D^OER5({cysy|46e?lgEjM)l|&q_Sv`Nw+yx6(d)F)!|N8;d zid`R?S;5?O6)wkze5B{wbtKoh^MKTba%p2irz^e7Hlda`qmBgg&gVYn zjy5kI&}_>`S@Q9`TbS-xXa+gu?3(2(?qz7SapvUY<>jFQZ(ZUm-)wr_0j(LOkfs-$ z55ijW4x0Ny)e@ypq~*MXGl3i-=I^q0*3-&%I&Ms6P=T%fEqd6Amp#WfyFGx{NJo{p zSRru!Y@|X!%j#lpm|{7Y8kGbZ>-8{o9yv zm-t+}?5qu+)CP444TEk_7p3!KYVje%*U+@H!hXeP$v6C6?C^iDGI_tPsj_sA?N*ieF^kbTvDnlM;(K5Q5{L& z`6SL7%TOiXQR&H~GL9GLdT7!InvAub^^cmjy-@0SKj)4Yf~E0?BWg5pXd$XjE^n$- z(okn)Yq9L4-OOp;MJGGqu^HVq0RyWo6SVu1>xKpO3gUU+;8> zGwg+un=%Ir2XNid`b%E7kn@-;FF*8i-kG+bK44>;Cwwjs^Tl}`ZH@sq zw%ric2druHR=ZaZ#N7(qm9NeXd#meKXNTWjr|1166Y|Xe2Y0 zVazN|GxB;IW^&5cgxd819%<^xiIrw`Yu;#gg_&?Y3mc8gst6sc0$)e#+m-c8i^}Tf zy;ZrhtY0|NVi2VQpgh#6Y~_N5-i51IkCOUc9`psFQG_!npjEVJCGXj|K>3RkXC93q zCd&|CD65;dwY_M6FQ54!i>}9EZ9t+bx~@T4b`wugZw7J)7;qvuMeC~km9T=`#|08nDTX0~5m&LFwGyHaCAFt>7r9Mw> zahj*C*z2i1gyt!x&5dumJ7k|9rsV{UP;G&>4#Cte@j1NF@Qe?aeSoz1yXjebneq8QVdTl`qlg^P0YJ z?gH<;wTl*^rLS7OcEx-gwY31|Y~;mzkC{TedJ3yM2R}0Fb;r5$VpFqTgu_ea766yF zIo!BE{xPQfcWOIEID7PZ241J(7ZKr0#yzid_^q&o-zW)PY#*pVVQ0S`)_a$l?g6nF zejSF(-^k+Kc)2>yAdNxc`V{Wo;2xgchV`*cq%d$5g2U+u7Y{=y>9%^N@)}74=Q?Ek|{Bo@+%@ze_<$RU%E#7*%#c{_6Is~+8^q~>36Q}(Tc&N_)BaC`OMX=|Uh#zI@1}N^496MR|QwAt1SUa^0#X-S!E&5kHN~3nq z#p~==^YG&|;z98HaUYphr1Z+O;H=)XF9EXGv_kP+u)hH*C$psX~io8=L`GjaU&ORdlZzGf@v z#BX$uK1Mv?F~gi0EA2y4sNOM!Scqm0UZfyy5|zi`^fp8c#ObN zmJU?i05G})vJ=E1kgX!Z<33`Ry{S?(y6Jx>M}nko(l|`Gq2iGHiDNJsO2h+fRwxff z2Is5^-JKwE-Sof8AR3bn+-Q%pAkpLT#6&#Fr3!t-;r8qYPdZpYj-06@BIkAy5wM)? z9gFE?#Xlt$qcI{Pyq}4~P=!&mgM1RUVvfO>eI;Ik93Ubmwh_CcOo4Pa3GX@+u!V?- zUQzfjg&jmha2CjLQ0!8g1x7NQX^PKKybAG42i3}8n{rUE_-@6U6+fW(LB)?MeoXPR zivO&*7nP9WG<}G8kYdFtghyVfBPn#iFD4DPC;_``8 zMa>bTtReW>05Ni)G5Uh$OqYf?2X__qC(M+F)WM0O^@JJc;bCBF7B0SF;fks`OI9qY zYRDhmN3@+V`-r0{W~$VS8T+|81lltqqot=9=3{qVGi5}JP)ypnNZ7dasdWbHc=$^QmF18#4rq{Jx5ufEqb<}mSC4!o|P$DQh z>NK3NvG9mTR=K=ZH@umShR|1;&gUVS)S-!bFQ%t<_h?A#$hMxxH*Q-e@t(hc-20!1x{#9Y`SX9w%`r-HXP78{R!?e~f5tqLctMz_IM(_lRtfVAmBKtm z(Xip-Pdm&Uaa)R&;o7uOgY3;~EzhP{cRB`Y8-MAWQ;aPVy#B>qFjHfXjU5n&;pA9h zwRhv~&bQ)oiYqkC&#e_p)2t5nff}t3=Dc!R=Jm2VbSG#w$gFg0m*LpEvE{o=E97uB z?8O{e{g2}NzE)ZHFPr|i!k&Dob`{5$XvN95mR5?%*;Zkpqpi+a93LO5b5_8rBEB@) zl{fxqg?2zXDt_N{Z=d9Xp11DH$#66?af#wj*;cQ#T*wS16~-1APj%g%P*01l_b12> z_YxnzrPjbM@%QRaCQ6g;doMX5`t-9-X4N)DPObaCy;zR@xdX`NNgQxt{^RdjMy(i- zV_gy-sL(RE&eZZepYW*ImExuxt8e^#W!MFVv7ve5=^Sg2K0|zxWBo1Wiudg!j!kWf z*q>`6to-!o50)&~y%Vu>5oW!z+%rE|>c~v-HBQjHPoF6AJt=O= zvxXU4o9e~0dDi|Ojce_acznTGoTV&`hC z(MmTardnJ%nHU2{<`XeIYU|z9Lk+?&nD&K>ngZYLF4u?0E8jNni8tEbvTl!eVA3NeV6c_sxUq|9{GG!-(G99Nm4mJH6bhK;Be0Tg>$h+#heQ=L zHb9`4{CKfF*3m;>Dnf%9JigTjMF(&1_28>#>+tXdmpV~`t<9`I;>z`yC*k~0)16)`R{VQ>g9kC`inoEcF#U@E5xjp_Ox!c^jPL;% zOpp)o&M<3Pa4vHnR_u&Ej_-OK^Iq|7;MXE;^h*21;5VtPCcg^&G4P1{GVqT&*|Yy) zAnkd|KR0j~0FK_F3{Q7zE&GRCpF4xxZaxx2F8d)Jmvu+a_?=T7yWQzCOQ#c@&?t0ClzrEwVrqk zE=Xq+(@}|uFfS&e(>RHU1kWH&g48{+2z@o;A~e-RBzPAQeZWJ+kqBR5HnM?SZa>=x zoybxepzkL4p+!osCkILyX$0^RIq(Z&HoC{eQVbCAG&Ju*?2Fd`$W>XMY(&wW`N=V-|rEFc#}_Phixrm()8MldmkZP2 zRf^XW!S7XkkK%h3e^>F4;-?kwkQ{a4XJw$Zq?TI$iE$Kn69|6h zWLrEKYOsihin6{(Y?xy8v))DK>#FO+)yBVqC!2D$G42#gpNl1e3PDL;^diCHr(U$AIDBtoztsORD2UtjG|N8ZSg znYTE!EIhF?s=90S^xU4I*kfh6`62UINp4!GG&im-J3JXjfM1^L#+P?yZhB~TZm-aF zxtN8{?Izd$idtWMrbW;Fl za<@*djIPeDyCN?R5nYzoH#99Tugwf!ndc2%o7cCkm;6Zg49B1wmK18JxTW^?-glI4 zs&;(LNc6CdjZQZO8pR`iD>XQ=(p{ZUc@x$|l6^(38S}owVoR*H8Os!)zc$af8BLWPjtbxQzO;3NsFB^JiP<`#y1f8>%bQGop;*WZJrN58F8xES6_*tQYrR%k9IA)CcspvN1|j`InW08T zbyyN_=iS$2Fa*7-Z;TK9@~{nkXIcT<{3nQL9rrF&DXl5KCf2`+A(XBD)( zG|xI`=(V<_cqUqq!LkdOK?#ljYQLVrjr0^L#<<7s7ycKwlVrcJC#5Cv9YW{N-mNR* zdZ}AH8Z>)49(0S2|DctVM*vebY{x~%SK(~EgGAd@_A@ z2hoq)p0<+r!22!tu=VhU9)lEC&j;T18{PyCFBgK|1Kwdj?}PYUTq8r(e-Lvkt#rrq zIFa!$?7+-KT92a>a_HhA#?}fn`bT8f)G^L;@jPS4!=4@IFx;Fo(G^9Fs2ysWzPHnZ z4h2tDh+LfBrn>IMOP9wIM`nmQB&IzDdhE-#?}OZkaN1XQ;y-|<{$CeI*hqFHY{# z!678ez91V89=SNX969yJHv9Vgf=>1n2M0ckTBqG{vjH$9pc$ zR?h=}1pHoQKLvaU%Yj=~EwgS2*204QuRKPCyHmtzs1^vCLb-BY8TL(z%adOa zl@r}C_GdY{!=8B_@d^wXfb-ZjpH71@AVdUItMDFW{*vNyeic`=dgbmtBJ4jPVru?VVpn^vILPsWoGV7erKpb_H|!>&n=j{dQF$Z# zP}QM6^5D^3#B$VC;zT?T5&ljp{EmoRq2>&Cce;iM`vpWie=QLS+(8jdmIDXC?Drog zB85D?g#!|Td+Mgtrp;;heta(;pZ@w^I z)C1x$jB*wFh{&PqgS;7!3P+rYfrr8>Vn2+u@J2BLc^C^4P)Clee3ghCIzpU;0S*y4 z^d+&org`IRo=t?i0)<5i%ZXjlDAw=>m8zbIN+OTz#j8ZE9!BIv_C*&XhlrP9>_{97 z@l4`myqd%;)Bz#}@ofI7WXgF=2S#jeyml-qeg^o;-b_UJhl%}B{_?OC1Rw{is2n}f zdNSgnL_{Eu>xIWHiXSDSj_?>mwgul1VLv+oh(xa@!fZ1U{%ETQG#8q28%lkpOB@RmkI(z!rK&Q^k44jRGbpb=aS8o}kD5j-+jtW)lH zEC0=kA5{F1;$g*4*gQ|pQ8Pjl?F1wA5W%^6MebF+j}Z5}`Ym0qXh2zSQ@mdBJ&NyD z{9VOEil0`zLvgM@GCGQNFuHuj3rx{C&@rjSf1_3D6kpX?Y3`zVORBKcP$kkfT9ZZ0 zMk}>t$wuorT}&SA=uXD>K8trh-7N=-?+vgAiqF(W28u(537i^{)bdHKwOVbF z1taLDCX40wSl76{8}&>N=b+!a#~SF?Hpcr7xO#Zl`cW$16#OYyFd17a#hp3x>6@3lhuZDQ4Z)+N34jlXd7;J~3(CSGW(TGv!y9qi(tn5blaX*2zIXPe%Twlew2atgy`x8Mfg$Vo)|QwD ztsk7fp5{+~%zDD`nxQUXH)f72eXg)O8X_@)%OQbB6NeNpYdQJ2RS>OjX-Rs{n&(m> z3~8x-!D@}D0IOw#YhSZ=M3xPPGwYLEJVz`mlJ(LksbxsJRjPD@hYXea#SLey^%r!9 z?IP>%aQ2KS5Et0e#)U)V&i;-MQbc`MXETl!7}?F)Klo+Sw`$m+W%lpJEr+=RJ=DnrKkgcOj{}TSka>d*W)7g+r{ir+>8+O^_ zG~3>pp)eh#umaXzOn&F9WsB_8SS?5-~t`@1`@OPUecWL>H!*RE;NYwXm=7}yzP8`!9Yk4GoEu{70x`v&a)X>mOEu*+HH7t50Ir|KXR6XL#a!+gR ztco<84bWD%kA6(w6mRit4iw!oyBCYclAJ-kTx2CXFG+~9tPe&tm8l|(3J(`6lbsXv zV$qW9ybaA?%cUvK97BIyEKYM~Srh}n88A}0% zznS(h3I_?h^;zPdy_`wbA{bA%S0P>y@x5UZhDoxR`W`kGJZp+^y`9;8C!(vBiQv(i z%AWahaNeWElNWpW@-X0}uI#ovPMr3O(5s8sU#9#sEry11mEyGLIPCBRzcl$ec>d4I03`xzQ+o!SM(ChPeqSdK z+!|{GINe@~AIDKwf}__UrEtj0!0!gfhg;h78)L9c74HWAEE2^Wad7jj^C*xvVbG`? z@MHB4+`o<=M-!ibKf?N=_#5EwgEIiy{{j3zo%jy$@rZD%vgc8Z+z5EO;*|Wzz%QFT zhyZvLCpUs(O=5sOaK9Zt)*kZn@cb+|x*C%6Yi{5v(5aLBZSbqXyD0uN_+s!#gj>O1 z1kX|Se(>Yqd;lqzbO{W8?BpR6oaLCQJh;Jc0B4ypL0{r&*MXx?B{{drid>ZCdF?m+ zxlWw&K}{FA69Hf{L&Pl9)5SAuoL;fx9+yY#dduZW_%aeEkgnPr?tT`B=NN`ZybXIX zk-|Y!s+=BdefWfc{}q|eVZkDM1&9J5EHU<(%ZVTXBD%gcL?r$xVt=f55YbmVL_{le zM46u?qQl4fM!hsA5q<5hM05x$Yk;6kkIlPC61T+#6 zfgD95Ai47~B6?N1JE-sjx?ES1OXV^Q^cuLZXinBy%A5xqpNq$=K4#iCr1jFO2MtiT~ zeH1TNoS!7v2O+y*dzh^p1Qf4QyiW0LitkpuS#i0Zgb3w&5+XdN?8C}lt}nq}t}nsf zjRIr>V~H-*K~6-_Ak7egr=4TPSKpXEQ9HpAC1&<>=8N7g!zFrMWk!qa4f+t#F~;p` zIo8kF&uIAhs&3-wVm-E{q`&h=UF>Xj^l+Ct;67CCgUdaw_9A-3u633B;5uJHC9TAP4BM?Ny=z0@m277|h6MGx=wKkPbZa;O zqrQo7WXVqcohj_(CyCTS&aSE}3S~5O@*TrRh>XXq+~79UK3o@+(PH>TqCQsGk=y0{ z((2oL-@dOlZF{NveNJ`X-V-cY%k6+Hd|*PdkLU7eeP##F_w5y!jdO~u>T$})qoq;r z-&bn3%?|Vm%<_AE1+7u3x9`(ZwA|Be<-H49f8O827w^NqD+SKvv}*l+S2(7+BJF9O z4%Ekh;@g3Jn@hhx>h=9Bo-1&67u5yM0=HgWTpi^oP8NF#oI9`-RaWS{EUu$9Do6iB z_jX`qp`+!2Lg#gQe95|{K6?+`N*^}R5{28Gx3}Cg1f9MeYurl{@IJ_|0w0|BMdCVa zq!P0Lx0w4tS7sgMp7loYw_(my>kYbUc;v$*;s3iCU2(Asgx5)W&qL)#Bk`;55sFUs zSEj?R0QZqj$!2g)_?2|qAlfpF?v7)+2n=`jxQ^-g4wh(@F7%~PjxvI1RMyVsk-+)( z@IK-$|2OU;2`m*WhdYzTGYT}FzX~eimG9O66~(PE=La_u)V*Tt2xk(G=E6LHvWf)3 zslCoYM7;3To6ZG>ZWdFJDIOW&Ob=d(iXFMwA!E~f@zQ@K=FAS&#|Y)(_4WA!ojChb zeDRTeGQaro-Ug2L@WOTvYrz+Svw&eAl;@v33X*LbXg)Z26ZcFb0~iSYE$)jH?*ZN) zF|ed*|2^)nz>lR%eggND5N7F;{}uQDz>nELz8ClO!z}9RK!=QNX$%6j4eVq6GQe4) z^so%}13K9=vNG^UfP=ufGiStqBKWFK{AYy2Apwhz;hhHF7x7;TgHK@a`%Vu20{(KR z0N8J61CMmD>cO*6Oe)93ogK*Jh~NW>i0D#chB$D_ohf?U z=k|!l-*kI&JCIBVzJ=cr;UX5vAomc#+1DY@7x9PO{e&J62#sx(9<{L>azjWa8O9#G9yz`5D zk{I-TKNJ@4jr&Etp(9|mWD^(%yP!!QxnidJ!X=y(er_4^laxRsE$hweoXZ7;-4i> zrPDmLK#D#(iVDT?$D{I!*$8y{igdw8t6=|`NybBsf#ZS9Rr6PUUR%(r`@X@(-{@V1 z9d%nv9ianQ?*6eYFd=>a|B4rvLN;}8sk7_&@I;(XHaP5`R_UF~BidpMkCk8UFNW}d z*)}-ylL~vjf=7o1Fj)R@^6Qnc1@2)POL$gY!dxx9#2@WHEL>&IB|)qV_(ouXzBi=m z`~{n8OvnZ}atB_}&KnSFtiH9>@o{0#+FbMfTT9apZ%VDrP5HPH3Cog_1Ddzd-#h$7 z(=%$seYW+rnhIy!ht7>TzO~qk-Tolmw(rCCy`_$}@Ver(@G5(a9(u!mOmvvqe?vKU zY1Xh0m9kS#w~+4BGW~^Ht0r!IyK3vk=(YM?QLdHpe-I8^6rQP1wGwcj#^iyCI3j0!OqtWk_ zNF`N=jiDPAxy~4kxUM9K#%|d5gr@n|9&&C zUR8B<-N(PKnqBMd53cWL`()nvvh%HFZe@CONo%F@-L*q;rG{u*qIb@4hZbYEE;qHC zapgVKvbJlz4~gCBLrX_YFVPD`&w;uxu5E3qS`c6vUOm`Wd|aZZwv8X0S{aQiEC;pO z-KMU4bmfcvn!m3_q*gYs_twUWxPf|hLfLIgDtx>}Fg4W_ESo!*gG&eMlkB*h@AK>S zk)mwBtGlSuon6G{!TLMeHOhAqJmXO^b<`$ziIqe2)`QlgGGQCTB1_9_Jo!BU~y@Po)wsn5r_4#A)gb**(6iUQxB)iN3+qK!yt>(ye^F2 zqSRhkpk#%D4?ZS$*+w+jm6Dc#?R10Vw07nC+lr&M#phj8aAB%V{y5AL8!$8ZR&c&z z@pT~lhQ;TBquy=cyiExmcjX2ILj}-4b*e-;E?Ww?^>D`)#}pl);lq!joA2>;4_v>d z_&M+)_~I;+i?ze_+q$`#V6eoN`v>3#IAZk-*mgbu&QzoM%ivFe?+kVtu20ee7~d7c zh$GkG#9T8$xn^@UImU(iiD<~5CBk#B5;1P9C#I_j;S95VM+knc&N|F zrHp|xNPcKI5$?(jMlipN90A%vOoIr(LD>L$ekZ7bJbsFZ2|eaP4mmkg=MejAVhs8R zhapZXrY7j9p-mJ`d$~QegsUY1w0_15ZCx~#DiNocc&)Y=yNd2>5{3w08 z!-4ApgMS~ZH?zwt%I)WzBJUwbnwBUo-K=N1+8|$Lima=8x>hXujMua5W8B+ud9Ti8 z8;N#tImMaQe3b{W1<&#W@#Zk_G}Oy6=;OsIW1_?nj2vB)q7X*0NYm5py;}(HR17BT zFk0MVZfEEdYn^5qqgDmxo2vqQbjg#e0_%gVC+ZuVy{-?g>U^TwxA3 znHPh6Q0lC3VP$+yNtv7(DW7A@{rMyh{CHPvnyM!xy&-Q~j7qy}9D4&r*h_pBy#ag4 zQE_N0HqyN${ySB_UHhvT>j&E^Zu9H?9e3B>CtmjJt#Q%B$9{d9HeD1>)2o{e8+`vf z@4WZt*=qWT=Wk%TxZyT3c6Gq*dBd`&RZSJ-f0fZ_tTp zD{6(9Psn=hIQ8+(4xwc$=u<{TO zYW)OB!h2l&rBNl$iirCCV$KYGsy0x(IYUo{OyipwdZELXK1F1e>q|t`4BZ!es9axe z*X+TV+4|3R4flL}>WoQR1E2CNHIxTgGqDZH2gil(9Q%=$i4k-4gmx9sW!=RbU58&4 zxDRNxNV~xOA{Do-r?RHy0Ebp{@rwsf2J&_J0daV)-nuOp*%w30YQrq!3((KwB!>C@ zR-(l`z4gR#C|w!Sb^!Yt8o#>&`lV9e-0?s={K#w2PlH7a+8g&+4~$thEo_f9?VU43 zUTZC0r}`!jFL#fZ!LAU`%tH>oDBi=@G5zt)Jbi1RmO)Yv+s#MAI2#)-XY-;`G#|}I z^W-p2a~aptf@xmCxL2I!+&XA+zJI!r2jmC1JR{tK#n_nL&kx`!!;cN|M#Y&*yh(Dc z;jnE4O|09OC(o-nKwhiHyElm zED3uLJO`XnEE{(48=+8$Y+4hh8hjIew$8Hx`CUkP5SIBy>LCwLlSmEXG#&wYtN7Fu$m|3ae=(xtt6p%Pghc2$xX^0+oo z`Eb_h711NlNC|Mwn)Ptj=-wuLMH4=$2`_HKSyNjN-Aio3jX!hoK%NmD;B15S@Fh;S zSr7TKCj3AXzN-mmU(0&|S`WDR??`uabnKrsZD&QwC|n-$ACb@*@w6Mc z&wA*@nkKxW3Fi!@_0WE16CTloUx6L#p?yv;SP!_}_MCVU{?Jy*D^5jE++v~?Zaw^T zik7f-_UV-93ruVE@cn;@7VqE|(uGTKHo!x?mUM$y1P$#L;pW_5&zU$bfOCh@SFN{z zeDR!|HcVcsuMLcVm<_sIfA=hL6_zd%OUy9`m%GV1z9FbN@Od6+nN7?>gH5b9_ZM<2(p32OcEej*1^ais*-OMXXROP0<918u72GcOKB4XSn2PBK}L2}>)VzC&y41?&|@E5W%M_BI={YWw5ov=<^ zg7j7RtwK4&Hvlym3MMzlwI_nJV9T9fMELUpaXS2qiiqPNKk-)d4TzIaAb`fwOVD6HL2-!ot3ps&^1bKys z@BOaKZ<32x(PESsFc=G;5@)K_uCOQ%J{Sf`DD>?MQ7aG^U`~@b4=GHXi;xiKU@S_E z#7K;Y_V-01`UdY1`{U<<`@>PRi3o6>XCM?6=yOwJ5Y_<`vyfuM(dNksOfjzIizr6k zB<5g}jffB*0rEq~f}NJ@Q|*I%NFpxb%pgL)x8g;Lk5`-r-_V@Z9PO`Ce4FAsf*-HY zZ`H)VM(NSPxvTV*4)L7fXeYK^z#RkU0{SpfT%}(Sop!pT#epxKX~D8;eX!g9PK2mS zcE(4cBsD&`esjH^X~*7w-(#+Lacw=;6Xb~&8!!s3f)`?W_lCX=s{KykKZ_x1kyr;q z`_Pu=_WD^Z8!y~wUe^-k0I|t_M=SG&&dcaR>|&1Q#T#0U7;&$jrR@;61MCH+kXK5Mx>mmeCP%d+NLLpyp4Lp`Zu}QZR$q-A&;86>@Gr6wM5+9C}%E9 zkve!9W-h(xYfTyi*|EQJ;KV`vpP-oc;5dvldEnlCa)}w2S&bUpvclFrDO5J34Vr+e ze2$EK(Q$3kvpRI@+N0NienZR4#*Cljub5xCbor{PHS0ER*(zea>v8^7mG@9tMNyzl znZImKQDWIN@1YvpeNp50f_cG0U?D$r=RlVn`XQiqF3hLnWndYwW-iQuAz)~_cRozZ zVG1lO_s+wIW`yS9%^A=GD+AU5Yk;BoMQs8hSoSV}wVAL0ECbd6YlyH=1M|=VH~{Wl z2*+o^9pS_BUQeF&Hj0rLa>&7jx?#V(+T zdP09Z*l~w`MH8nkIU~imhxFbF$kDRnmkngQp$2Cn`n0opz@1^alf$1CVVoTx9lMt9l(J$Hu`5C(o>hgOf3T;%?jLmZ8Ke*H46Tjy3+F zINgi3J8hf8%%dUpK|=voW!Jt$_Ulkz;dCfdGRS@&S{5AZ+SvDJe-X8N!xd_oP@@Ww z5kvdq#FmHk{7Hzjp3vncfu(Stf+f_^vikB9QRq z^9bZp6L;#z)birx+Sa0r@#5aenCy9Lhmk0ro~(K8b(*N!g{q?7!FzthHR!o0G<(r3 zx$+ziu1i4;D?=P(p2M*R^~My;IlbmI&*6wfyW>X?qQsVlV}sCr)X(9o18M6 z2&H4q!iTyj`?o98ehxSl^G$w)_;F3v2@a3&*XlXex`kj(t^TSLQil;w>i<$zLVge7 z-|I*ay$aJE#u>oDAxn z0ge~-JGI1M^^5ul*a@C|MQ@=&`}0G3UqJe+`VhdPSM|Q`MBn&&oIfXmui{gyM6<*C z1T9X?Jgkp|G%t8qe_PuTy!(iL6t4#dyr%zKgLdm<`X$;uu6G0!9>)nAiN2KjG&r;2 zxZX>P3m!kNC+0UurZxMrS=_Xt1qs1U~0=-(pqlU#IXb++HsuBN-e#a6>JE0 zvwVGT#?s@q-jeOP?kU>GVrs6tgLX8yG1ra##d*P}I=V+|T0&6kz0YgNoc3!V4C{v-CO-1#k+W_ zey&{CilZyM1Kh2(%_4VzJ0;DFvc=-ge4UG5EI1oD%h?Pp(K(JSkD+}|XVOp@qQ$f7 zH2IM=;IqW80qz9XW*C<=EO~Wyq|t}aOOvmdQYU_AJbpZVj_Nk}@v(0&!SJQ0zyYBt z(N1(N!UGX6%1Yb`_Phvrb1%f(Vu1-r?+Ka*HDu z;|5+q$B2Vt%PM_Rhu{0qr`qD5f&0K&sq?u8o(r@NJfuB_vON@xHFBEw4C4&#U~mN3 zidEe<3K|7cf*42hdqJ5BR%~n*FAj94#0^HzBwU+UANOp$@F!_Kcz7_ZMB6ERrS8_Q z&tQB^Cc3LO3X=$OziZNED97MiR@kkVip70+$zIVyeEzXJM!Zt$ZjtsADs%c9-jk_z z4V)gb-m!Z{UYgb_X*>cyD$GqE)O_{|-ynCoyg)@Lq)-ynT&Zxbh~FGIq36FT(^&6oE>xmqgi?c+t! z9$Z?*y|4Doigap@b!&SDyE6mF5OnKd^LsRmvt@ggoZ*v?W}`W~s}`qurP%?4mTAuG zAi~Wf8{9O_$2anT{J>D=Z26cL@(~Rd=LhoGV9LidA7jM=KKPt+tQzKQ@SkdM+>}Q0 zY>~$2%JtMRE~Sq=l;kj*HQ1u`upazl72D*`fL~&4EAvOd+ai8hglWD6ybq&ZabBAA z6yslUUYgVaS+ZPlUYfMU;*>s8H26I<_CQGo{|{LUN}1H`5%A_o=7D_t$o~mG3~FX` z@@K$jK+S51{6TPx7aK%p_klkM&eBNp0Qlb(m(s_@(0B#uPd4%zPW_ zDT?<1&w&q@Djo~|2)OnBFQ^h814rc}-#-t&FO0KFIS7uTZAu@HLE|JeSg!cN=fM91 zZiVOp@bAH`5HAP!*v%di?N0{hiYTO#e7_&~&EU*dG|vQ|1J0_Dyd^lLm)ylGHGYLx z?+>%^A^0<4JP7_SxaHv8;5@m~ryQIK&SmS96dwS73-T263_r+wPB?MfU2*Imws9M9 zJiae2e2*ft2^wn@KM5X*8;Uy=1+nrsdkO#+*#iN+=>BSxZQ^hoU&g8 zJ`X%Y@ebg;>o{ z1ghbR*MeUGAEWph@BwK4G8CT&J_mfW;*{6_teQ(EK@afjs<|XjaUuO32>v+r0!3L9 zz(*;52|?KhzC-c%!24rr-AYqV!QTSzQ|9-BuLK{8qR0=hh`qrkRhhHl>WU1qTk&B| z@kySMoXR~j)&K^3rfE%dFQGtN58wK_2|v_?KiPzDYQihUH}hR7VoE1S zb|V(Jydx=bv>xfLCR}gAxn#n6XrH?ttcUzxqE{v)$jgJBM!Wks0`lO}J1_!6K8aX| z=`$kuLSi>m@5J_K$cTS|9FN!o`Hk2SD>;a$!_#lc(h(xe zy{Ix@+4I_{1G`k ze2xhID{&AiJyaW9)7o3%I3heei--@dCL%z`h5pBx`AqfG2tVkg6d5~$&;JlZ-+<75r7>; z#PkUwJpL6C?s%h+{*2;0L_d>29_5Cpc@}D>-D|{=7%UNMAeAS=!3#vh2#@Nbl$^VD zXs;!4I%1B9`k^-w?vyF4B_d!vo-krF+~Y0STps)_HHN}RULdN*E<{)?AR=aNB6h%d zg@_m#MNC2ni8~R+#F-c;5pPAIQ}{J;Ii?X5UL(St;fN((*0wO96!#MG;x-~)_=va^ zc|-9?Bop;-AVR;l;_Ngt23HXgE4zq@-tIA`{TGSzu@;E90Hq<;YT##pD(W2mN-TbnEvK?CQ83KI?k z^!?qCW-hspMtfMaSPU(_H>UH<>zvMtsf*p#(&vI8&Qp7&i*DWpE&4!g5*+%3`?%Wd zjiu3Y8-1sz+=H#fR(ZjyBkn&e$+o!#C-~R*-M=>O%GvdpCn(7ulgd|NDcH2O)c$L(b-ousmkrb8s?(B>VQ2x zsekqD{`sjTN9?xxy!xWfIN{_}HkMdBR`@cz_IE7axcu(LTDpJ!r_RLw{_-ljfj4RT zTV~fH$Knm^D}8-OYnf=kw|mF+D)Dx`mX;$W^N-DkUe277=Ao!1pU=1D=%t}KzLK%- zdK>mv^Y)%Osik9W^~RE(Lv7oqRY2H3&av+g^|HxxK%9&Y-L=@2TCq;aP9uUNI-m=zxs(KpfLU zd>&`SG+(3SbuAF?2ZR=HJdRo5C*qAPZMb+h-bmM0iYxKPAXx8}V08A(t%s*nv@6H zvMVaIkh9WJkHvN4(1||vRqa{juIZ}zAASD1Z%)bjD$Qrp?KMcl;Y;ipwrz7Nw0*|7 zv=TEXkTZF;eGZkpP9Lrhk$U!hPNiqtZt65<0-G;abZupfjyW*Yk13yMxxm|&-8}R{ z?SAoKDwz+YF6~ zd@ef8fksmq+YK%>X|RDyMZ|;cjA++fXe7()QS7+KuWvK%+{fK0xK81Vc1D(~A3Avz zqD7{$Q7p_d3|E(Cn820yu)D@X`MNkW7L%fvGmR)*{>>}5?U|9=bBuU<_efsQq79Xr zq9hADfTRPH5VA2+lBU&}W`D^t@{AMox1cLL6?+XjUA;C0Jm8 zN@>_4!THcl3JZ0`smIyDt>}F;K3A?UQ5^XjrcT?$Fmuih7J}2P3w{*cC4u*Wx&WH; zu!Y~?8_r;|WYNMY@NTLEk-rQ+Rh1y}?cf~s7AXf;f^%4%toY5~8^HG~PT?X~two_M z^Zg8RBnzXvicat#i?kFj^6=^YEVJ+-$K)RHeG!eq#ZOUaUjk>or1{^#PloZe z;Qs^fr_BA}9q?lk(taM)UGc*xNb&@zC*b!wzArT>+e^Vmtrs}>$^u6qr8#ALlxVV` z&_Q0!JuJ-rDsYC%dVehVWbiS{emC#~VdgR5FG-FO1|9qYIreCng_ptK1h;(r82Bad z4CUah;4w%x)|`BQ9C#Ku`uCC-f)|2Y9-`>3FF2!|_P>U~o#0jYzSMXR8h=3J2gMJ9 zQ;w6bI47yvp(I!zpd7CUI5RsPWR*)fj}>FBz{iI1s~E@64C5bw-v%DAUZ8AlZJ34a z;17iHO7JJZtvtZv8xMhF_$56+$tDF!RuW;J-_{(CTlPQK5dd)bOWJ=PyrUQCZ)rRN z4eR0B$<1M$k`anHtcQF~6YfEdwjP={UGF%diTy#6i*p^dR)Op$X3d)LOHJH-lF5Tbx*g+t>qNu?VY&VS23z-`IrDY{Gjt;Z22RJP+G?=sx$~ zSPyubTn`tfAy*BB^A%zX)^A34{_}gdYUB*GMalhc@5oo-uJ!O6k2K-SoA9zGynPei zT)eyhBDmytapubF+aZTr_zv!Znk>F);Y^8+VNI_de(Zbk2CjJ$+aHJJoiR9|1(!Mb z#J`}ztls%9MmZ1S%)|>kj*w-IH=h>}CqdXo#9(?UaiqDhnn&PoCr9nQmpH!hIs_7b{*44DiF1)EH(i$dn%-9}bxo@m73*SP4N3aU}#J z#Ifqkl~HJ)l|DBPaur`Jaj;FE*g@=~xL@H?BFf@9x&Cr3EF%3VxydEorIta?Q_CP% zKt4fzR6WcuTv%6%d}SYGb_6I=S_sao+U35h6tqO-2-sdC_&l@QA1gAEKIw+GIBoQU5#bbRqQJX=;d+muZmq(+(9TniDB z!WxCO3ilHc;#U-MT8#W#;#?jz4}?2Xd^rJ~0(g?5CeE+ndjVS;D%K$FiLlU5hC7y zi-`BmDgCdN{#9UrAMzrnQ>vd$%~)gs4+oUX6kJV3y)M9-ETeWs1vVM^S6t zqxcSmJBiEDGgbVB7D#_C;C`JN*{EQM@abt{7vx%E0YuBhLe!L~G$Q7wfi(?gYi1C^pm>hSe-YIQW{v(?F)x??j|sV$fZP zadVP9U;)v`lS8OqM+ARf4D4y#>?vkF1zIYe>}jkE_)zVT$~C^Q&1R9jhzLGOalhiL z6t7ZTuJMKa9g6Q)=G+P`bClvI6hEzay~%speoz`$l?AT1qX)c1cpyXZY{h#kUL?-< zGO`LeiAU?}mGL&kc_uPn->-O`;>Q#}AqMs~dL*-V!`E|(uwJBivE-tz+;OMyPQ=+r zc{dt8c~4s2D(oBFbffW|bE~g9RUGSQl!%KDYZ0O%TTcx3?r+q%f|pB;e5bsY%-*J@ zsPh|XTA7$S%)qwTmZH9=CtmCvW_axn$8HVb^rYRW3dif_jTyhULW_rL5y@&x-WqtL zwLU)`Dd-a33P+mWCI_+#9IC`KlJ@6r{}EebqdTHHY$2B!-rU<>X(=)Urj= zD5D+Z5Pe1&Z379Vwk%r(uj@(-#g-OTloiC*$JWL-$Zxc)1O1$z^qs%Ld4K=D<<9yI zt^2O)J0Hsi{=H|Q4{zb(>p`9hoQrT0yRhqv7nJqxyTz9C#mUp>3wS|2o=dMj_1Ty? z3ugLO%v`((e8H0GXgbGC`bD=`bwO9(wShMpZGj-zx8lPe;|x=Ec`ThX@j0-+oRM-6FK6pZ7?%O+?~QW zH|?i|+2@Gc6K0MPcfiJdHt3Qxj0Naf)UyqPnLXe`z)^R~u>jY3pk--Tm@pN5EqHrn z&UGWtKr#{tg8E*yc&<9g1448+g+z-v%Xzz;3Id|@NhT!oB6A^9Yz zamtU)r+9a$dA?$X;?1G{Cw^$~rTrg)XTVW4N`4HO08gZm=fg)&K~V^eZOXzrAQz`t zK1TazI}bixnNJWeFGQzybzk&TS4=Q&!!3Z9Cm4MIc@vHHIXA&-gbzhXVJ#7!d4-sY zMja`@$<5N>%8AJIt+JtSM{?#8Q5i7fkoU%MWS1S)qR&ySnJD_+884Hq;|y z>}KH}gRkV#R|uGgh1<0T%8+PL;YioVpz_Hx&p*RWXV-slWaFEDsp}(6qOL zDb+?Vhv?tTjjMZ_+YQ%c_+^~%M%fcw+?UnflvLv29=RTnJFjNRGhEwVg%V9Jg{*5F zYk6#|nco0->-riaC2cPvmU)~ZWT8I+&Me7n&F7q56sNt8=@ig!OQ18c27H#k=P@_{K`L95hY^!Sc44fr7O_{$7`~{pb+0s5* zlbZuNAQV-~f&lIVH|q+VC=LE5xK*^LfPV>|r|k2?*258Hf!H#}oiE($jF<_%@u3J0 zCPj(ysGo?)<98`sPmDugh^PSj;r$2{hxtV4vlqj0*bb$?OX+6^SFSULYhv}oSk(RF zdLv+$4K4Nn$&y&EN@4}#EkTwyH}Vs9Q?ycX->|Pim`*aw0?G)T2hLcHY!!m7g!wD!ggF zlGwa&&)W{(U)MdgLQVn>E{&B_SEa(U%jmE55W{vE^RzbNrCr8K@!1;J8sV)qQiA_^ z%=k%z6duO}Bn)7tx&gnwF<7PDH)i3O7;~)}(~IefAUDX-S3u2NTC6U~@j=b!UXi=o zNRR#rN+*6k{P_GT{LprBUxy*;|6(MIzwO2>%qsErZevNn%FS^wW^Sb?n7f_exA7Il zzXzgU-XP=pFVq;nH%RH;f_fu<^YLSDKM4F8Kl+6H3E*$|(evcnfq2BBCye{ed#7VC zJb?~#)fggjA#*Tu+gxHKQXM!8xpIx-JBTQ6wM5w4OT_yxDD&48en^Bp7BTK|`HF~K zd)d?v$j~yoMwPq)9QiMpS0-P(63 zB-ye^q>I2lSUG{#>M9EYW_HMnkXYr78{M?sB4s~H$3G%)2up&Py1$_)lMdgr^nNFZ-B=*TMujRx-iaab#EAF?ab@t z8=ouJlfyV`XBRjki0!q^PG6wDK`qh14}&*v+f7AfCgfd?}pp&R%F@RTs#1H4@r zj|1-z#;@S(ox!dA{W^HJF#cC?3^SGc0nN4u8hsixG}~Zs7C0*eS>Qv$I1Av&Fn$K= zo5T3?P_w6Ly?;N{Gs5^nsM$A@=7}hA{Xp1Fw_ZT`vfU=GKW%RotXNQJIjuvhC-*bO#LdN#Ae_AoIOqFXz&P* z6usvDQB^%=;Q*w%%^{OtWzz1;e}hRoPm_Kb$SXZ)%zD#-5w zoy1`IC&rEH#^e01($3*8j2o=pQ&)M#aWL|tG0n=NUCkqA^Sg_ar?njW=@!hR$>O8$ zjeRnE1~Yy%uG>Y#al_j=7hW$`k%5XuK7+$J&C9~M7;+r*+BUJ~sG;2SZZ`aR_eZjGpB_#{rGy1_!2Yf<}0`@q>q#8xAPK%MDNZ3NJU;5Zv%`^8t8xx#0-` zGr~OdAb3N$;en}a1;fh??LU7kCwBHh{SX+=hPesrpRhiFmmKqHhI<0-OAu)MeY2hpjGr$umHlBdLJ zHBNySUH!%I%h>Id{Eb@=dXqgfEtk8}nID3cS)OTOE-%JPy(daNpNc*e9z%5M=+T3x zay|Vm8@R2M4d9KPJ#DOScMbZxdj?soTd=N|$Lc5M;~Q`=2nTa53#JPKE_^DsjPyhV zKN{}o(dayy&d-GJM#zqKjrBAS#*Oh5S%&$dvK$^Ro8Xz;s8#f|Co%ZWWX~hk0=xVm zY>l+OW?twXte+F^!@NbFhHh)OAOciqS??A^oQ!Q?jG^mdQ?p?h` jYB{VH6Q22-XQH)CutyNV-=wR=-r5J1|2NNjo-_U*wS$wz diff --git a/features/nanostack/FEATURE_LOWPAN_ROUTER/TOOLCHAIN_ARM/TARGET_M3/libnanostack_armcc_Cortex-M3_lowpan_router.ar b/features/nanostack/FEATURE_LOWPAN_ROUTER/TOOLCHAIN_ARM/TARGET_M3/libnanostack_armcc_Cortex-M3_lowpan_router.ar old mode 100644 new mode 100755 index 2987f2e585999406192f453ef3116a50a7de8e87..9554800c992df2d3c32e61e884106099cafc5981 GIT binary patch delta 97364 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 delta 93522 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

AhEbWBfvo>kXl{cbkJZ3>uKqzvP+mJMwn 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⁣wP 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

uY~p+;x2i(}}Zx$>OL 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 G82=CEZjFNg diff --git a/features/nanostack/FEATURE_LOWPAN_ROUTER/TOOLCHAIN_ARM/TARGET_RTOS_M4_M7/libnanostack_armcc_Cortex-M3_lowpan_router.ar b/features/nanostack/FEATURE_LOWPAN_ROUTER/TOOLCHAIN_ARM/TARGET_RTOS_M4_M7/libnanostack_armcc_Cortex-M3_lowpan_router.ar old mode 100644 new mode 100755 index 2987f2e585999406192f453ef3116a50a7de8e87..9554800c992df2d3c32e61e884106099cafc5981 GIT binary patch delta 97364 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 delta 93522 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

AhEbWBfvo>kXl{cbkJZ3>uKqzvP+mJMwn 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⁣wP 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

uY~p+;x2i(}}Zx$>OL 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 G82=CEZjFNg diff --git a/features/nanostack/FEATURE_LOWPAN_ROUTER/TOOLCHAIN_GCC/TARGET_LIKE_CORTEX_M0/libnanostack_arm-none-eabi-gcc_Cortex-M0_lowpan_router.a b/features/nanostack/FEATURE_LOWPAN_ROUTER/TOOLCHAIN_GCC/TARGET_LIKE_CORTEX_M0/libnanostack_arm-none-eabi-gcc_Cortex-M0_lowpan_router.a old mode 100644 new mode 100755 index df5e8b5ba8941a28861e033b30b4122fe210551f..25799d3af8de439f0ff2dfe7d17ed16f5b17dbe8 GIT binary patch delta 81359 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 delta 79098 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