sandbox / mbed-client-c

Fork of mbed-client-c by Christopher Haster

Committer:
Yogesh Pande
Date:
Sat Apr 02 00:39:03 2016 +0300
Revision:
4:5d91b0f5038c
Parent:
1:43f5c94c6771
Latest mbed-client-c sources from Github.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Yogesh Pande 4:5d91b0f5038c 1 /*
Yogesh Pande 4:5d91b0f5038c 2 * Copyright (c) 2011-2015 ARM Limited. All rights reserved.
Yogesh Pande 4:5d91b0f5038c 3 * SPDX-License-Identifier: Apache-2.0
Yogesh Pande 4:5d91b0f5038c 4 * Licensed under the Apache License, Version 2.0 (the License); you may
Yogesh Pande 4:5d91b0f5038c 5 * not use this file except in compliance with the License.
Yogesh Pande 4:5d91b0f5038c 6 * You may obtain a copy of the License at
Yogesh Pande 4:5d91b0f5038c 7 *
Yogesh Pande 4:5d91b0f5038c 8 * http://www.apache.org/licenses/LICENSE-2.0
Yogesh Pande 4:5d91b0f5038c 9 *
Yogesh Pande 4:5d91b0f5038c 10 * Unless required by applicable law or agreed to in writing, software
Yogesh Pande 4:5d91b0f5038c 11 * distributed under the License is distributed on an AS IS BASIS, WITHOUT
Yogesh Pande 4:5d91b0f5038c 12 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
Yogesh Pande 4:5d91b0f5038c 13 * See the License for the specific language governing permissions and
Yogesh Pande 4:5d91b0f5038c 14 * limitations under the License.
Yogesh Pande 4:5d91b0f5038c 15 */
Yogesh Pande 4:5d91b0f5038c 16 /**
Yogesh Pande 4:5d91b0f5038c 17 * \file sn_nsdl.c
Yogesh Pande 4:5d91b0f5038c 18 *
Yogesh Pande 4:5d91b0f5038c 19 * \brief Nano service device library
Yogesh Pande 4:5d91b0f5038c 20 *
Yogesh Pande 4:5d91b0f5038c 21 */
Yogesh Pande 4:5d91b0f5038c 22
Yogesh Pande 4:5d91b0f5038c 23 #include <string.h>
Yogesh Pande 4:5d91b0f5038c 24
Yogesh Pande 4:5d91b0f5038c 25 #include "ns_types.h"
Yogesh Pande 4:5d91b0f5038c 26 #include "sn_nsdl.h"
Yogesh Pande 4:5d91b0f5038c 27 #include "sn_coap_header.h"
Yogesh Pande 4:5d91b0f5038c 28 #include "sn_coap_protocol.h"
Yogesh Pande 4:5d91b0f5038c 29 #include "sn_coap_protocol_internal.h"
Yogesh Pande 4:5d91b0f5038c 30 #include "sn_nsdl_lib.h"
Yogesh Pande 4:5d91b0f5038c 31 #include "sn_grs.h"
Yogesh Pande 4:5d91b0f5038c 32
Yogesh Pande 4:5d91b0f5038c 33 /* Defines */
Yogesh Pande 4:5d91b0f5038c 34 #define RESOURCE_DIR_LEN 2
Yogesh Pande 4:5d91b0f5038c 35 #define EP_NAME_PARAMETERS_LEN 3
Yogesh Pande 4:5d91b0f5038c 36 #define ET_PARAMETER_LEN 3
Yogesh Pande 4:5d91b0f5038c 37 #define LT_PARAMETER_LEN 3
Yogesh Pande 4:5d91b0f5038c 38 #define DOMAIN_PARAMETER_LEN 2
Yogesh Pande 4:5d91b0f5038c 39 #define RT_PARAMETER_LEN 3
Yogesh Pande 4:5d91b0f5038c 40 #define IF_PARAMETER_LEN 3
Yogesh Pande 4:5d91b0f5038c 41 #define OBS_PARAMETER_LEN 3
Yogesh Pande 4:5d91b0f5038c 42 #define AOBS_PARAMETER_LEN 8
Yogesh Pande 4:5d91b0f5038c 43 #define COAP_CON_PARAMETER_LEN 3
Yogesh Pande 4:5d91b0f5038c 44 #define BS_EP_PARAMETER_LEN 3
Yogesh Pande 4:5d91b0f5038c 45 #define BS_QUEUE_MODE_PARAMATER_LEN 2
Yogesh Pande 4:5d91b0f5038c 46
Yogesh Pande 4:5d91b0f5038c 47 #define SN_NSDL_EP_REGISTER_MESSAGE 1
Yogesh Pande 4:5d91b0f5038c 48 #define SN_NSDL_EP_UPDATE_MESSAGE 2
Yogesh Pande 4:5d91b0f5038c 49
Yogesh Pande 4:5d91b0f5038c 50 #define SN_NSDL_MSG_UNDEFINED 0
Yogesh Pande 4:5d91b0f5038c 51 #define SN_NSDL_MSG_REGISTER 1
Yogesh Pande 4:5d91b0f5038c 52 #define SN_NSDL_MSG_UNREGISTER 2
Yogesh Pande 4:5d91b0f5038c 53 #define SN_NSDL_MSG_UPDATE 3
Yogesh Pande 4:5d91b0f5038c 54
Yogesh Pande 4:5d91b0f5038c 55 /* Constants */
Yogesh Pande 4:5d91b0f5038c 56 static uint8_t ep_name_parameter_string[] = {'e', 'p', '='}; /* Endpoint name. A unique name for the registering node in a domain. */
Yogesh Pande 4:5d91b0f5038c 57 static uint8_t resource_path_ptr[] = {'r', 'd'}; /* For resource directory */
Yogesh Pande 4:5d91b0f5038c 58 static uint8_t resource_type_parameter[] = {'r', 't', '='}; /* Resource type. Only once for registration */
Yogesh Pande 4:5d91b0f5038c 59 #ifndef YOTTA_CFG_DISABLE_OBS_FEATURE
Yogesh Pande 4:5d91b0f5038c 60 static uint8_t obs_parameter[] = {'o', 'b', 's'}; /* Observable */
Yogesh Pande 4:5d91b0f5038c 61 #endif
Yogesh Pande 4:5d91b0f5038c 62 //static uint8_t aobs_parameter[] = {'a','o','b','s',';','i','d','='}; /* Auto-observable - TBD */
Yogesh Pande 4:5d91b0f5038c 63 static uint8_t if_description_parameter[] = {'i', 'f', '='}; /* Interface description. Only once */
Yogesh Pande 4:5d91b0f5038c 64 static uint8_t ep_lifetime_parameter[] = {'l', 't', '='}; /* Lifetime. Number of seconds that this registration will be valid for. Must be updated within this time, or will be removed. */
Yogesh Pande 4:5d91b0f5038c 65 static uint8_t ep_domain_parameter[] = {'d', '='}; /* Domain name. If this parameter is missing, a default domain is assumed. */
Yogesh Pande 4:5d91b0f5038c 66 static uint8_t coap_con_type_parameter[] = {'c', 't', '='}; /* CoAP content type */
Yogesh Pande 4:5d91b0f5038c 67 /* * OMA BS parameters * */
Yogesh Pande 4:5d91b0f5038c 68 static uint8_t bs_uri[] = {'b', 's'};
Yogesh Pande 4:5d91b0f5038c 69 static uint8_t bs_ep_name[] = {'e', 'p', '='};
Yogesh Pande 4:5d91b0f5038c 70 static uint8_t et_parameter[] = {'e', 't', '='}; /* Endpoint type */
Yogesh Pande 4:5d91b0f5038c 71 static uint8_t bs_queue_mode[] = {'b', '='};
Yogesh Pande 4:5d91b0f5038c 72
Yogesh Pande 4:5d91b0f5038c 73 /* Function prototypes */
Yogesh Pande 4:5d91b0f5038c 74 static uint16_t sn_nsdl_internal_coap_send(struct nsdl_s *handle, sn_coap_hdr_s *coap_header_ptr, sn_nsdl_addr_s *dst_addr_ptr, uint8_t message_description);
Yogesh Pande 4:5d91b0f5038c 75 static void sn_nsdl_resolve_nsp_address(struct nsdl_s *handle);
Yogesh Pande 4:5d91b0f5038c 76 int8_t sn_nsdl_build_registration_body(struct nsdl_s *handle, sn_coap_hdr_s *message_ptr, uint8_t updating_registeration);
Yogesh Pande 4:5d91b0f5038c 77 static uint16_t sn_nsdl_calculate_registration_body_size(struct nsdl_s *handle, uint8_t updating_registeration);
Yogesh Pande 4:5d91b0f5038c 78 static uint8_t sn_nsdl_calculate_uri_query_option_len(sn_nsdl_ep_parameters_s *endpoint_info_ptr, uint8_t msg_type);
Yogesh Pande 4:5d91b0f5038c 79 static int8_t sn_nsdl_fill_uri_query_options(struct nsdl_s *handle, sn_nsdl_ep_parameters_s *parameter_ptr, sn_coap_hdr_s *source_msg_ptr, uint8_t msg_type);
Yogesh Pande 4:5d91b0f5038c 80 static int8_t sn_nsdl_local_rx_function(struct nsdl_s *handle, sn_coap_hdr_s *coap_packet_ptr, sn_nsdl_addr_s *address_ptr);
Yogesh Pande 4:5d91b0f5038c 81 static int8_t sn_nsdl_resolve_ep_information(struct nsdl_s *handle, sn_coap_hdr_s *coap_packet_ptr);
Yogesh Pande 4:5d91b0f5038c 82 static uint8_t sn_nsdl_itoa_len(uint8_t value);
Yogesh Pande 4:5d91b0f5038c 83 static uint8_t *sn_nsdl_itoa(uint8_t *ptr, uint8_t value);
Yogesh Pande 4:5d91b0f5038c 84 static int32_t sn_nsdl_atoi(uint8_t *ptr, uint8_t len);
Yogesh Pande 4:5d91b0f5038c 85 static uint32_t sn_nsdl_ahextoi(uint8_t *ptr, uint8_t len);
Yogesh Pande 4:5d91b0f5038c 86 static int8_t sn_nsdl_resolve_lwm2m_address(struct nsdl_s *handle, uint8_t *uri, uint16_t uri_len);
Yogesh Pande 4:5d91b0f5038c 87 static int8_t sn_nsdl_process_oma_tlv(struct nsdl_s *handle, uint8_t *data_ptr, uint16_t data_len);
Yogesh Pande 4:5d91b0f5038c 88 static void sn_nsdl_check_oma_bs_status(struct nsdl_s *handle);
Yogesh Pande 4:5d91b0f5038c 89 static int8_t sn_nsdl_create_oma_device_object_base(struct nsdl_s *handle, sn_nsdl_oma_device_t *oma_device_setup_ptr, sn_nsdl_oma_binding_and_mode_t binding_and_mode);
Yogesh Pande 4:5d91b0f5038c 90 static int8_t set_endpoint_info(struct nsdl_s *handle, sn_nsdl_ep_parameters_s *endpoint_info_ptr);
Yogesh Pande 4:5d91b0f5038c 91 static bool validateParameters(sn_nsdl_ep_parameters_s *parameter_ptr);
Yogesh Pande 4:5d91b0f5038c 92 static bool validate(uint8_t* ptr, uint32_t len, char illegalChar);
Yogesh Pande 4:5d91b0f5038c 93
Yogesh Pande 4:5d91b0f5038c 94 int8_t sn_nsdl_destroy(struct nsdl_s *handle)
Yogesh Pande 4:5d91b0f5038c 95 {
Yogesh Pande 4:5d91b0f5038c 96 if (handle == NULL) {
Yogesh Pande 4:5d91b0f5038c 97 return SN_NSDL_FAILURE;
Yogesh Pande 4:5d91b0f5038c 98 }
Yogesh Pande 4:5d91b0f5038c 99
Yogesh Pande 4:5d91b0f5038c 100 if (handle->ep_information_ptr) {
Yogesh Pande 4:5d91b0f5038c 101 if (handle->ep_information_ptr->endpoint_name_ptr) {
Yogesh Pande 4:5d91b0f5038c 102 handle->sn_nsdl_free(handle->ep_information_ptr->endpoint_name_ptr);
Yogesh Pande 4:5d91b0f5038c 103 handle->ep_information_ptr->endpoint_name_ptr = 0;
Yogesh Pande 4:5d91b0f5038c 104 }
Yogesh Pande 4:5d91b0f5038c 105 if (handle->ep_information_ptr->domain_name_ptr) {
Yogesh Pande 4:5d91b0f5038c 106 handle->sn_nsdl_free(handle->ep_information_ptr->domain_name_ptr);
Yogesh Pande 4:5d91b0f5038c 107 handle->ep_information_ptr->domain_name_ptr = 0;
Yogesh Pande 4:5d91b0f5038c 108 handle->ep_information_ptr->domain_name_len = 0;
Yogesh Pande 4:5d91b0f5038c 109 }
Yogesh Pande 4:5d91b0f5038c 110 if (handle->ep_information_ptr->location_ptr) {
Yogesh Pande 4:5d91b0f5038c 111 handle->sn_nsdl_free(handle->ep_information_ptr->location_ptr);
Yogesh Pande 4:5d91b0f5038c 112 handle->ep_information_ptr->location_ptr = 0;
Yogesh Pande 4:5d91b0f5038c 113 handle->ep_information_ptr->location_len = 0;
Yogesh Pande 4:5d91b0f5038c 114 }
Yogesh Pande 4:5d91b0f5038c 115 if (handle->ep_information_ptr->type_ptr) {
Yogesh Pande 4:5d91b0f5038c 116 handle->sn_nsdl_free(handle->ep_information_ptr->type_ptr);
Yogesh Pande 4:5d91b0f5038c 117 handle->ep_information_ptr->type_ptr = 0;
Yogesh Pande 4:5d91b0f5038c 118 }
Yogesh Pande 4:5d91b0f5038c 119
Yogesh Pande 4:5d91b0f5038c 120 if (handle->ep_information_ptr->lifetime_ptr)
Yogesh Pande 4:5d91b0f5038c 121
Yogesh Pande 4:5d91b0f5038c 122 {
Yogesh Pande 4:5d91b0f5038c 123 handle->sn_nsdl_free(handle->ep_information_ptr->lifetime_ptr);
Yogesh Pande 4:5d91b0f5038c 124 handle->ep_information_ptr->lifetime_ptr = 0;
Yogesh Pande 4:5d91b0f5038c 125 }
Yogesh Pande 4:5d91b0f5038c 126
Yogesh Pande 4:5d91b0f5038c 127 handle->sn_nsdl_free(handle->ep_information_ptr);
Yogesh Pande 4:5d91b0f5038c 128 handle->ep_information_ptr = 0;
Yogesh Pande 4:5d91b0f5038c 129 }
Yogesh Pande 4:5d91b0f5038c 130
Yogesh Pande 4:5d91b0f5038c 131 if (handle->nsp_address_ptr) {
Yogesh Pande 4:5d91b0f5038c 132 if (handle->nsp_address_ptr->omalw_address_ptr) {
Yogesh Pande 4:5d91b0f5038c 133 if (handle->nsp_address_ptr->omalw_address_ptr->addr_ptr) {
Yogesh Pande 4:5d91b0f5038c 134 handle->sn_nsdl_free(handle->nsp_address_ptr->omalw_address_ptr->addr_ptr);
Yogesh Pande 4:5d91b0f5038c 135 handle->nsp_address_ptr->omalw_address_ptr->addr_ptr = 0;
Yogesh Pande 4:5d91b0f5038c 136 }
Yogesh Pande 4:5d91b0f5038c 137 handle->sn_nsdl_free(handle->nsp_address_ptr->omalw_address_ptr);
Yogesh Pande 4:5d91b0f5038c 138 }
Yogesh Pande 4:5d91b0f5038c 139
Yogesh Pande 4:5d91b0f5038c 140 handle->sn_nsdl_free(handle->nsp_address_ptr);
Yogesh Pande 4:5d91b0f5038c 141 handle->nsp_address_ptr = 0;
Yogesh Pande 4:5d91b0f5038c 142 }
Yogesh Pande 4:5d91b0f5038c 143
Yogesh Pande 4:5d91b0f5038c 144 if (handle->oma_bs_address_ptr) {
Yogesh Pande 4:5d91b0f5038c 145 handle->sn_nsdl_free(handle->oma_bs_address_ptr);
Yogesh Pande 4:5d91b0f5038c 146 }
Yogesh Pande 4:5d91b0f5038c 147
Yogesh Pande 4:5d91b0f5038c 148 /* Destroy also libCoap and grs part of libNsdl */
Yogesh Pande 4:5d91b0f5038c 149 sn_coap_protocol_destroy(handle->grs->coap);
Yogesh Pande 4:5d91b0f5038c 150 sn_grs_destroy(handle->grs);
Yogesh Pande 4:5d91b0f5038c 151 handle->sn_nsdl_free(handle);
Yogesh Pande 4:5d91b0f5038c 152
Yogesh Pande 4:5d91b0f5038c 153 return SN_NSDL_SUCCESS;
Yogesh Pande 4:5d91b0f5038c 154 }
Yogesh Pande 4:5d91b0f5038c 155
Yogesh Pande 4:5d91b0f5038c 156 struct nsdl_s *sn_nsdl_init(uint8_t (*sn_nsdl_tx_cb)(struct nsdl_s *, sn_nsdl_capab_e , uint8_t *, uint16_t, sn_nsdl_addr_s *),
Yogesh Pande 4:5d91b0f5038c 157 uint8_t (*sn_nsdl_rx_cb)(struct nsdl_s *, sn_coap_hdr_s *, sn_nsdl_addr_s *),
Yogesh Pande 4:5d91b0f5038c 158 void *(*sn_nsdl_alloc)(uint16_t), void (*sn_nsdl_free)(void *))
Yogesh Pande 4:5d91b0f5038c 159 {
Yogesh Pande 4:5d91b0f5038c 160 /* Check pointers and define function pointers */
Yogesh Pande 4:5d91b0f5038c 161 if (!sn_nsdl_alloc || !sn_nsdl_free || !sn_nsdl_tx_cb || !sn_nsdl_rx_cb) {
Yogesh Pande 4:5d91b0f5038c 162 return NULL;
Yogesh Pande 4:5d91b0f5038c 163 }
Yogesh Pande 4:5d91b0f5038c 164
Yogesh Pande 4:5d91b0f5038c 165 struct nsdl_s *handle = NULL;
Yogesh Pande 4:5d91b0f5038c 166
Yogesh Pande 4:5d91b0f5038c 167 handle = sn_nsdl_alloc(sizeof(struct nsdl_s));
Yogesh Pande 4:5d91b0f5038c 168
Yogesh Pande 4:5d91b0f5038c 169 if (handle == NULL) {
Yogesh Pande 4:5d91b0f5038c 170 return NULL;
Yogesh Pande 4:5d91b0f5038c 171 }
Yogesh Pande 4:5d91b0f5038c 172
Yogesh Pande 4:5d91b0f5038c 173 memset(handle, 0, sizeof(struct nsdl_s));
Yogesh Pande 4:5d91b0f5038c 174
Yogesh Pande 4:5d91b0f5038c 175 /* Define function pointers */
Yogesh Pande 4:5d91b0f5038c 176 handle->sn_nsdl_alloc = sn_nsdl_alloc;
Yogesh Pande 4:5d91b0f5038c 177 handle->sn_nsdl_free = sn_nsdl_free;
Yogesh Pande 4:5d91b0f5038c 178
Yogesh Pande 4:5d91b0f5038c 179 handle->sn_nsdl_tx_callback = sn_nsdl_tx_cb;
Yogesh Pande 4:5d91b0f5038c 180 handle->sn_nsdl_rx_callback = sn_nsdl_rx_cb;
Yogesh Pande 4:5d91b0f5038c 181
Yogesh Pande 4:5d91b0f5038c 182 /* Initialize ep parameters struct */
Yogesh Pande 4:5d91b0f5038c 183 if (!handle->ep_information_ptr) {
Yogesh Pande 4:5d91b0f5038c 184 handle->ep_information_ptr = handle->sn_nsdl_alloc(sizeof(sn_nsdl_ep_parameters_s));
Yogesh Pande 4:5d91b0f5038c 185 if (!handle->ep_information_ptr) {
Yogesh Pande 4:5d91b0f5038c 186 sn_nsdl_free(handle);
Yogesh Pande 4:5d91b0f5038c 187 return NULL;
Yogesh Pande 4:5d91b0f5038c 188 }
Yogesh Pande 4:5d91b0f5038c 189 memset(handle->ep_information_ptr, 0, sizeof(sn_nsdl_ep_parameters_s));
Yogesh Pande 4:5d91b0f5038c 190 }
Yogesh Pande 4:5d91b0f5038c 191
Yogesh Pande 4:5d91b0f5038c 192 handle->grs = sn_grs_init(sn_nsdl_tx_cb, &sn_nsdl_local_rx_function, sn_nsdl_alloc, sn_nsdl_free);
Yogesh Pande 4:5d91b0f5038c 193
Yogesh Pande 4:5d91b0f5038c 194 /* Initialize GRS */
Yogesh Pande 4:5d91b0f5038c 195 if (handle->grs == NULL) {
Yogesh Pande 4:5d91b0f5038c 196 handle->sn_nsdl_free(handle->ep_information_ptr);
Yogesh Pande 4:5d91b0f5038c 197 handle->ep_information_ptr = 0;
Yogesh Pande 4:5d91b0f5038c 198 sn_nsdl_free(handle);
Yogesh Pande 4:5d91b0f5038c 199 return NULL;
Yogesh Pande 4:5d91b0f5038c 200 }
Yogesh Pande 4:5d91b0f5038c 201
Yogesh Pande 4:5d91b0f5038c 202 sn_nsdl_resolve_nsp_address(handle);
Yogesh Pande 4:5d91b0f5038c 203
Yogesh Pande 4:5d91b0f5038c 204 handle->sn_nsdl_endpoint_registered = SN_NSDL_ENDPOINT_NOT_REGISTERED;
Yogesh Pande 4:5d91b0f5038c 205
Yogesh Pande 4:5d91b0f5038c 206 return handle;
Yogesh Pande 4:5d91b0f5038c 207 }
Yogesh Pande 4:5d91b0f5038c 208
Yogesh Pande 4:5d91b0f5038c 209 uint16_t sn_nsdl_register_endpoint(struct nsdl_s *handle, sn_nsdl_ep_parameters_s *endpoint_info_ptr)
Yogesh Pande 4:5d91b0f5038c 210 {
Yogesh Pande 4:5d91b0f5038c 211 /* Local variables */
Yogesh Pande 4:5d91b0f5038c 212 sn_coap_hdr_s *register_message_ptr;
Yogesh Pande 4:5d91b0f5038c 213 uint16_t message_id = 0;
Yogesh Pande 4:5d91b0f5038c 214
Yogesh Pande 4:5d91b0f5038c 215 if (endpoint_info_ptr == NULL || handle == NULL) {
Yogesh Pande 4:5d91b0f5038c 216 return 0;
Yogesh Pande 4:5d91b0f5038c 217 }
Yogesh Pande 4:5d91b0f5038c 218
Yogesh Pande 4:5d91b0f5038c 219 /*** Build endpoint register message ***/
Yogesh Pande 4:5d91b0f5038c 220
Yogesh Pande 4:5d91b0f5038c 221 /* Allocate memory for header struct */
Yogesh Pande 4:5d91b0f5038c 222 register_message_ptr = handle->sn_nsdl_alloc(sizeof(sn_coap_hdr_s));
Yogesh Pande 4:5d91b0f5038c 223 if (register_message_ptr == NULL) {
Yogesh Pande 4:5d91b0f5038c 224 return 0;
Yogesh Pande 4:5d91b0f5038c 225 }
Yogesh Pande 4:5d91b0f5038c 226
Yogesh Pande 4:5d91b0f5038c 227 memset(register_message_ptr, 0, sizeof(sn_coap_hdr_s));
Yogesh Pande 4:5d91b0f5038c 228
Yogesh Pande 4:5d91b0f5038c 229 /* Fill message fields -> confirmable post to specified NSP path */
Yogesh Pande 4:5d91b0f5038c 230 register_message_ptr->msg_type = COAP_MSG_TYPE_CONFIRMABLE;
Yogesh Pande 4:5d91b0f5038c 231 register_message_ptr->msg_code = COAP_MSG_CODE_REQUEST_POST;
Yogesh Pande 4:5d91b0f5038c 232
Yogesh Pande 4:5d91b0f5038c 233 /* Allocate memory for the extended options list */
Yogesh Pande 4:5d91b0f5038c 234 register_message_ptr->options_list_ptr = handle->sn_nsdl_alloc(sizeof(sn_coap_options_list_s));
Yogesh Pande 4:5d91b0f5038c 235 if (register_message_ptr->options_list_ptr == NULL) {
Yogesh Pande 4:5d91b0f5038c 236 handle->sn_nsdl_free(register_message_ptr);
Yogesh Pande 4:5d91b0f5038c 237 register_message_ptr = 0;
Yogesh Pande 4:5d91b0f5038c 238 return 0;
Yogesh Pande 4:5d91b0f5038c 239 }
Yogesh Pande 4:5d91b0f5038c 240
Yogesh Pande 4:5d91b0f5038c 241 memset(register_message_ptr->options_list_ptr, 0, sizeof(sn_coap_options_list_s));
Yogesh Pande 4:5d91b0f5038c 242
Yogesh Pande 4:5d91b0f5038c 243 register_message_ptr->uri_path_len = sizeof(resource_path_ptr);
Yogesh Pande 4:5d91b0f5038c 244 register_message_ptr->uri_path_ptr = resource_path_ptr;
Yogesh Pande 4:5d91b0f5038c 245
Yogesh Pande 4:5d91b0f5038c 246 /* Fill Uri-query options */
Yogesh Pande 4:5d91b0f5038c 247 if( SN_NSDL_FAILURE == sn_nsdl_fill_uri_query_options(handle, endpoint_info_ptr,
Yogesh Pande 4:5d91b0f5038c 248 register_message_ptr, SN_NSDL_EP_REGISTER_MESSAGE) ){
Yogesh Pande 4:5d91b0f5038c 249 register_message_ptr->uri_path_ptr = NULL;
Yogesh Pande 4:5d91b0f5038c 250 sn_coap_parser_release_allocated_coap_msg_mem(handle->grs->coap, register_message_ptr);
Yogesh Pande 4:5d91b0f5038c 251 return 0;
Yogesh Pande 4:5d91b0f5038c 252 }
Yogesh Pande 4:5d91b0f5038c 253
Yogesh Pande 4:5d91b0f5038c 254 if (endpoint_info_ptr->ds_register_mode == REGISTER_WITH_RESOURCES) {
Yogesh Pande 4:5d91b0f5038c 255 /* Built body for message */
Yogesh Pande 4:5d91b0f5038c 256 if (sn_nsdl_build_registration_body(handle, register_message_ptr, 0) == SN_NSDL_FAILURE) {
Yogesh Pande 4:5d91b0f5038c 257 register_message_ptr->uri_path_ptr = NULL;
Yogesh Pande 4:5d91b0f5038c 258 register_message_ptr->options_list_ptr->uri_host_ptr = NULL;
Yogesh Pande 4:5d91b0f5038c 259 sn_coap_parser_release_allocated_coap_msg_mem(handle->grs->coap, register_message_ptr);
Yogesh Pande 4:5d91b0f5038c 260 return 0;
Yogesh Pande 4:5d91b0f5038c 261 }
Yogesh Pande 4:5d91b0f5038c 262 }
Yogesh Pande 4:5d91b0f5038c 263
Yogesh Pande 4:5d91b0f5038c 264 /* Clean (possible) existing and save new endpoint info to handle */
Yogesh Pande 4:5d91b0f5038c 265 if (set_endpoint_info(handle, endpoint_info_ptr) == -1) {
Yogesh Pande 4:5d91b0f5038c 266 if (register_message_ptr->payload_ptr) {
Yogesh Pande 4:5d91b0f5038c 267 handle->sn_nsdl_free(register_message_ptr->payload_ptr);
Yogesh Pande 4:5d91b0f5038c 268 register_message_ptr->payload_ptr = NULL;
Yogesh Pande 4:5d91b0f5038c 269 }
Yogesh Pande 4:5d91b0f5038c 270
Yogesh Pande 4:5d91b0f5038c 271 register_message_ptr->uri_path_ptr = NULL;
Yogesh Pande 4:5d91b0f5038c 272 register_message_ptr->options_list_ptr->uri_host_ptr = NULL;
Yogesh Pande 4:5d91b0f5038c 273
Yogesh Pande 4:5d91b0f5038c 274 sn_coap_parser_release_allocated_coap_msg_mem(handle->grs->coap, register_message_ptr);
Yogesh Pande 4:5d91b0f5038c 275
Yogesh Pande 4:5d91b0f5038c 276 return 0;
Yogesh Pande 4:5d91b0f5038c 277 }
Yogesh Pande 4:5d91b0f5038c 278
Yogesh Pande 4:5d91b0f5038c 279 /* Build and send coap message to NSP */
Yogesh Pande 4:5d91b0f5038c 280 message_id = sn_nsdl_internal_coap_send(handle, register_message_ptr, handle->nsp_address_ptr->omalw_address_ptr, SN_NSDL_MSG_REGISTER);
Yogesh Pande 4:5d91b0f5038c 281
Yogesh Pande 4:5d91b0f5038c 282 if (register_message_ptr->payload_ptr) {
Yogesh Pande 4:5d91b0f5038c 283 handle->sn_nsdl_free(register_message_ptr->payload_ptr);
Yogesh Pande 4:5d91b0f5038c 284 register_message_ptr->payload_ptr = NULL;
Yogesh Pande 4:5d91b0f5038c 285 }
Yogesh Pande 4:5d91b0f5038c 286
Yogesh Pande 4:5d91b0f5038c 287 register_message_ptr->uri_path_ptr = NULL;
Yogesh Pande 4:5d91b0f5038c 288 register_message_ptr->options_list_ptr->uri_host_ptr = NULL;
Yogesh Pande 4:5d91b0f5038c 289
Yogesh Pande 4:5d91b0f5038c 290 sn_coap_parser_release_allocated_coap_msg_mem(handle->grs->coap, register_message_ptr);
Yogesh Pande 4:5d91b0f5038c 291
Yogesh Pande 4:5d91b0f5038c 292 return message_id;
Yogesh Pande 4:5d91b0f5038c 293 }
Yogesh Pande 4:5d91b0f5038c 294
Yogesh Pande 4:5d91b0f5038c 295 uint16_t sn_nsdl_unregister_endpoint(struct nsdl_s *handle)
Yogesh Pande 4:5d91b0f5038c 296 {
Yogesh Pande 4:5d91b0f5038c 297 /* Local variables */
Yogesh Pande 4:5d91b0f5038c 298 sn_coap_hdr_s *unregister_message_ptr;
Yogesh Pande 4:5d91b0f5038c 299 uint8_t *temp_ptr = 0;
Yogesh Pande 4:5d91b0f5038c 300 uint16_t message_id = 0;
Yogesh Pande 4:5d91b0f5038c 301
Yogesh Pande 4:5d91b0f5038c 302 /* Check parameters */
Yogesh Pande 4:5d91b0f5038c 303 if (handle == NULL) {
Yogesh Pande 4:5d91b0f5038c 304 return 0;
Yogesh Pande 4:5d91b0f5038c 305 }
Yogesh Pande 4:5d91b0f5038c 306
Yogesh Pande 4:5d91b0f5038c 307 /* Check that EP have been registered */
Yogesh Pande 4:5d91b0f5038c 308 if (sn_nsdl_is_ep_registered(handle)) {
Yogesh Pande 4:5d91b0f5038c 309
Yogesh Pande 4:5d91b0f5038c 310 /* Memory allocation for unregister message */
Yogesh Pande 4:5d91b0f5038c 311 unregister_message_ptr = handle->sn_nsdl_alloc(sizeof(sn_coap_hdr_s));
Yogesh Pande 4:5d91b0f5038c 312 if (!unregister_message_ptr) {
Yogesh Pande 4:5d91b0f5038c 313 return 0;
Yogesh Pande 4:5d91b0f5038c 314 }
Yogesh Pande 4:5d91b0f5038c 315
Yogesh Pande 4:5d91b0f5038c 316 memset(unregister_message_ptr, 0, sizeof(sn_coap_hdr_s));
Yogesh Pande 4:5d91b0f5038c 317
Yogesh Pande 4:5d91b0f5038c 318 /* Fill unregister message */
Yogesh Pande 4:5d91b0f5038c 319 unregister_message_ptr->msg_type = COAP_MSG_TYPE_CONFIRMABLE;
Yogesh Pande 4:5d91b0f5038c 320 unregister_message_ptr->msg_code = COAP_MSG_CODE_REQUEST_DELETE;
Yogesh Pande 4:5d91b0f5038c 321
Yogesh Pande 4:5d91b0f5038c 322 if(handle->ep_information_ptr->location_ptr) {
Yogesh Pande 4:5d91b0f5038c 323 unregister_message_ptr->uri_path_len = handle->ep_information_ptr->location_len;
Yogesh Pande 4:5d91b0f5038c 324 unregister_message_ptr->uri_path_ptr = handle->sn_nsdl_alloc(unregister_message_ptr->uri_path_len);
Yogesh Pande 4:5d91b0f5038c 325 if (!unregister_message_ptr->uri_path_ptr) {
Yogesh Pande 4:5d91b0f5038c 326 sn_coap_parser_release_allocated_coap_msg_mem(handle->grs->coap, unregister_message_ptr);
Yogesh Pande 4:5d91b0f5038c 327 return 0;
Yogesh Pande 4:5d91b0f5038c 328 }
Yogesh Pande 4:5d91b0f5038c 329
Yogesh Pande 4:5d91b0f5038c 330 temp_ptr = unregister_message_ptr->uri_path_ptr;
Yogesh Pande 4:5d91b0f5038c 331
Yogesh Pande 4:5d91b0f5038c 332 memcpy(temp_ptr , handle->ep_information_ptr->location_ptr, handle->ep_information_ptr->location_len);
Yogesh Pande 4:5d91b0f5038c 333 } else {
Yogesh Pande 4:5d91b0f5038c 334 unregister_message_ptr->uri_path_len = (RESOURCE_DIR_LEN + 1 + handle->ep_information_ptr->domain_name_len + 1 + handle->ep_information_ptr->endpoint_name_len);
Yogesh Pande 4:5d91b0f5038c 335 unregister_message_ptr->uri_path_ptr = handle->sn_nsdl_alloc(unregister_message_ptr->uri_path_len);
Yogesh Pande 4:5d91b0f5038c 336 if (!unregister_message_ptr->uri_path_ptr) {
Yogesh Pande 4:5d91b0f5038c 337 sn_coap_parser_release_allocated_coap_msg_mem(handle->grs->coap, unregister_message_ptr);
Yogesh Pande 4:5d91b0f5038c 338 return 0;
Yogesh Pande 4:5d91b0f5038c 339 }
Yogesh Pande 4:5d91b0f5038c 340
Yogesh Pande 4:5d91b0f5038c 341 temp_ptr = unregister_message_ptr->uri_path_ptr;
Yogesh Pande 4:5d91b0f5038c 342
Yogesh Pande 4:5d91b0f5038c 343 memcpy(temp_ptr, resource_path_ptr, RESOURCE_DIR_LEN);
Yogesh Pande 4:5d91b0f5038c 344 temp_ptr += RESOURCE_DIR_LEN;
Yogesh Pande 4:5d91b0f5038c 345
Yogesh Pande 4:5d91b0f5038c 346 *temp_ptr++ = '/';
Yogesh Pande 4:5d91b0f5038c 347
Yogesh Pande 4:5d91b0f5038c 348 memcpy(temp_ptr , handle->ep_information_ptr->domain_name_ptr, handle->ep_information_ptr->domain_name_len);
Yogesh Pande 4:5d91b0f5038c 349 temp_ptr += handle->ep_information_ptr->domain_name_len;
Yogesh Pande 4:5d91b0f5038c 350
Yogesh Pande 4:5d91b0f5038c 351 *temp_ptr++ = '/';
Yogesh Pande 4:5d91b0f5038c 352
Yogesh Pande 4:5d91b0f5038c 353 memcpy(temp_ptr , handle->ep_information_ptr->endpoint_name_ptr, handle->ep_information_ptr->endpoint_name_len);
Yogesh Pande 4:5d91b0f5038c 354 }
Yogesh Pande 4:5d91b0f5038c 355
Yogesh Pande 4:5d91b0f5038c 356 /* Send message */
Yogesh Pande 4:5d91b0f5038c 357 message_id = sn_nsdl_internal_coap_send(handle, unregister_message_ptr, handle->nsp_address_ptr->omalw_address_ptr, SN_NSDL_MSG_UNREGISTER);
Yogesh Pande 4:5d91b0f5038c 358
Yogesh Pande 4:5d91b0f5038c 359 /* Free memory */
Yogesh Pande 4:5d91b0f5038c 360 sn_coap_parser_release_allocated_coap_msg_mem(handle->grs->coap, unregister_message_ptr);
Yogesh Pande 4:5d91b0f5038c 361
Yogesh Pande 4:5d91b0f5038c 362 }
Yogesh Pande 4:5d91b0f5038c 363
Yogesh Pande 4:5d91b0f5038c 364 return message_id;
Yogesh Pande 4:5d91b0f5038c 365 }
Yogesh Pande 4:5d91b0f5038c 366
Yogesh Pande 4:5d91b0f5038c 367 uint16_t sn_nsdl_update_registration(struct nsdl_s *handle, uint8_t *lt_ptr, uint8_t lt_len)
Yogesh Pande 4:5d91b0f5038c 368 {
Yogesh Pande 4:5d91b0f5038c 369 /* Local variables */
Yogesh Pande 4:5d91b0f5038c 370 sn_coap_hdr_s *register_message_ptr;
Yogesh Pande 4:5d91b0f5038c 371 uint8_t *temp_ptr;
Yogesh Pande 4:5d91b0f5038c 372 sn_nsdl_ep_parameters_s temp_parameters;
Yogesh Pande 4:5d91b0f5038c 373 uint16_t message_id = 0;
Yogesh Pande 4:5d91b0f5038c 374
Yogesh Pande 4:5d91b0f5038c 375 /* Check parameters */
Yogesh Pande 4:5d91b0f5038c 376 if (handle == NULL) {
Yogesh Pande 4:5d91b0f5038c 377 return 0;
Yogesh Pande 4:5d91b0f5038c 378 }
Yogesh Pande 4:5d91b0f5038c 379
Yogesh Pande 4:5d91b0f5038c 380 if (!sn_nsdl_is_ep_registered(handle)){
Yogesh Pande 4:5d91b0f5038c 381 return 0;
Yogesh Pande 4:5d91b0f5038c 382 }
Yogesh Pande 4:5d91b0f5038c 383
Yogesh Pande 4:5d91b0f5038c 384 memset(&temp_parameters, 0, sizeof(sn_nsdl_ep_parameters_s));
Yogesh Pande 4:5d91b0f5038c 385
Yogesh Pande 4:5d91b0f5038c 386 temp_parameters.lifetime_len = lt_len;
Yogesh Pande 4:5d91b0f5038c 387 temp_parameters.lifetime_ptr = lt_ptr;
Yogesh Pande 4:5d91b0f5038c 388
Yogesh Pande 4:5d91b0f5038c 389 /*** Build endpoint register update message ***/
Yogesh Pande 4:5d91b0f5038c 390
Yogesh Pande 4:5d91b0f5038c 391 /* Allocate memory for header struct */
Yogesh Pande 4:5d91b0f5038c 392 register_message_ptr = handle->sn_nsdl_alloc(sizeof(sn_coap_hdr_s));
Yogesh Pande 4:5d91b0f5038c 393 if (register_message_ptr == NULL) {
Yogesh Pande 4:5d91b0f5038c 394 return 0;
Yogesh Pande 4:5d91b0f5038c 395 }
Yogesh Pande 4:5d91b0f5038c 396
Yogesh Pande 4:5d91b0f5038c 397 memset(register_message_ptr, 0, sizeof(sn_coap_hdr_s));
Yogesh Pande 4:5d91b0f5038c 398
Yogesh Pande 4:5d91b0f5038c 399 /* Fill message fields -> confirmable post to specified NSP path */
Yogesh Pande 4:5d91b0f5038c 400 register_message_ptr->msg_type = COAP_MSG_TYPE_CONFIRMABLE;
Yogesh Pande 4:5d91b0f5038c 401 register_message_ptr->msg_code = COAP_MSG_CODE_REQUEST_POST;
Yogesh Pande 4:5d91b0f5038c 402
Yogesh Pande 4:5d91b0f5038c 403 if(handle->ep_information_ptr->location_ptr) {
Yogesh Pande 4:5d91b0f5038c 404 register_message_ptr->uri_path_len = handle->ep_information_ptr->location_len; /* = Only location set by Device Server*/
Yogesh Pande 4:5d91b0f5038c 405
Yogesh Pande 4:5d91b0f5038c 406 register_message_ptr->uri_path_ptr = handle->sn_nsdl_alloc(register_message_ptr->uri_path_len);
Yogesh Pande 4:5d91b0f5038c 407 if (!register_message_ptr->uri_path_ptr) {
Yogesh Pande 4:5d91b0f5038c 408 sn_coap_parser_release_allocated_coap_msg_mem(handle->grs->coap, register_message_ptr);
Yogesh Pande 4:5d91b0f5038c 409 return 0;
Yogesh Pande 4:5d91b0f5038c 410 }
Yogesh Pande 4:5d91b0f5038c 411
Yogesh Pande 4:5d91b0f5038c 412 temp_ptr = register_message_ptr->uri_path_ptr;
Yogesh Pande 4:5d91b0f5038c 413
Yogesh Pande 4:5d91b0f5038c 414 /* location */
Yogesh Pande 4:5d91b0f5038c 415 memcpy(temp_ptr, handle->ep_information_ptr->location_ptr, handle->ep_information_ptr->location_len);
Yogesh Pande 4:5d91b0f5038c 416 } else {
Yogesh Pande 4:5d91b0f5038c 417 register_message_ptr->uri_path_len = sizeof(resource_path_ptr) + handle->ep_information_ptr->domain_name_len + handle->ep_information_ptr->endpoint_name_len + 2; /* = rd/domain/endpoint */
Yogesh Pande 4:5d91b0f5038c 418
Yogesh Pande 4:5d91b0f5038c 419 register_message_ptr->uri_path_ptr = handle->sn_nsdl_alloc(register_message_ptr->uri_path_len);
Yogesh Pande 4:5d91b0f5038c 420 if (!register_message_ptr->uri_path_ptr) {
Yogesh Pande 4:5d91b0f5038c 421 sn_coap_parser_release_allocated_coap_msg_mem(handle->grs->coap, register_message_ptr);
Yogesh Pande 4:5d91b0f5038c 422 return 0;
Yogesh Pande 4:5d91b0f5038c 423 }
Yogesh Pande 4:5d91b0f5038c 424
Yogesh Pande 4:5d91b0f5038c 425 temp_ptr = register_message_ptr->uri_path_ptr;
Yogesh Pande 4:5d91b0f5038c 426
Yogesh Pande 4:5d91b0f5038c 427 /* rd/ */
Yogesh Pande 4:5d91b0f5038c 428 memcpy(temp_ptr, resource_path_ptr, sizeof(resource_path_ptr));
Yogesh Pande 4:5d91b0f5038c 429 temp_ptr += sizeof(resource_path_ptr);
Yogesh Pande 4:5d91b0f5038c 430 *temp_ptr++ = '/';
Yogesh Pande 4:5d91b0f5038c 431
Yogesh Pande 4:5d91b0f5038c 432 /* rd/DOMAIN/ */
Yogesh Pande 4:5d91b0f5038c 433 memcpy(temp_ptr, handle->ep_information_ptr->domain_name_ptr, handle->ep_information_ptr->domain_name_len);
Yogesh Pande 4:5d91b0f5038c 434 temp_ptr += handle->ep_information_ptr->domain_name_len;
Yogesh Pande 4:5d91b0f5038c 435 *temp_ptr++ = '/';
Yogesh Pande 4:5d91b0f5038c 436
Yogesh Pande 4:5d91b0f5038c 437 /* rd/domain/ENDPOINT */
Yogesh Pande 4:5d91b0f5038c 438 memcpy(temp_ptr, handle->ep_information_ptr->endpoint_name_ptr, handle->ep_information_ptr->endpoint_name_len);
Yogesh Pande 4:5d91b0f5038c 439 }
Yogesh Pande 4:5d91b0f5038c 440
Yogesh Pande 4:5d91b0f5038c 441 /* Allocate memory for the extended options list */
Yogesh Pande 4:5d91b0f5038c 442 register_message_ptr->options_list_ptr = handle->sn_nsdl_alloc(sizeof(sn_coap_options_list_s));
Yogesh Pande 4:5d91b0f5038c 443 if (register_message_ptr->options_list_ptr == NULL) {
Yogesh Pande 4:5d91b0f5038c 444 sn_coap_parser_release_allocated_coap_msg_mem(handle->grs->coap, register_message_ptr);
Yogesh Pande 4:5d91b0f5038c 445 return 0;
Yogesh Pande 4:5d91b0f5038c 446 }
Yogesh Pande 4:5d91b0f5038c 447
Yogesh Pande 4:5d91b0f5038c 448 memset(register_message_ptr->options_list_ptr, 0, sizeof(sn_coap_options_list_s));
Yogesh Pande 4:5d91b0f5038c 449
Yogesh Pande 4:5d91b0f5038c 450 /* Fill Uri-query options */
Yogesh Pande 4:5d91b0f5038c 451 sn_nsdl_fill_uri_query_options(handle, &temp_parameters, register_message_ptr, SN_NSDL_EP_UPDATE_MESSAGE);
Yogesh Pande 4:5d91b0f5038c 452
Yogesh Pande 4:5d91b0f5038c 453 /* Build payload */
Yogesh Pande 4:5d91b0f5038c 454 if (handle->ep_information_ptr->ds_register_mode == REGISTER_WITH_RESOURCES) {
Yogesh Pande 4:5d91b0f5038c 455
Yogesh Pande 4:5d91b0f5038c 456 if (sn_nsdl_build_registration_body(handle, register_message_ptr, 1) == SN_NSDL_FAILURE) {
Yogesh Pande 4:5d91b0f5038c 457 sn_coap_parser_release_allocated_coap_msg_mem(handle->grs->coap, register_message_ptr);
Yogesh Pande 4:5d91b0f5038c 458 return 0;
Yogesh Pande 4:5d91b0f5038c 459 }
Yogesh Pande 4:5d91b0f5038c 460 }
Yogesh Pande 4:5d91b0f5038c 461
Yogesh Pande 4:5d91b0f5038c 462 /* Build and send coap message to NSP */
Yogesh Pande 4:5d91b0f5038c 463 message_id = sn_nsdl_internal_coap_send(handle, register_message_ptr, handle->nsp_address_ptr->omalw_address_ptr, SN_NSDL_MSG_UPDATE);
Yogesh Pande 4:5d91b0f5038c 464
Yogesh Pande 4:5d91b0f5038c 465 if (register_message_ptr->payload_ptr) {
Yogesh Pande 4:5d91b0f5038c 466 handle->sn_nsdl_free(register_message_ptr->payload_ptr);
Yogesh Pande 4:5d91b0f5038c 467 }
Yogesh Pande 4:5d91b0f5038c 468 sn_coap_parser_release_allocated_coap_msg_mem(handle->grs->coap, register_message_ptr);
Yogesh Pande 4:5d91b0f5038c 469
Yogesh Pande 4:5d91b0f5038c 470 return message_id;
Yogesh Pande 4:5d91b0f5038c 471 }
Yogesh Pande 4:5d91b0f5038c 472
Yogesh Pande 4:5d91b0f5038c 473 int8_t sn_nsdl_set_endpoint_location(struct nsdl_s *handle, uint8_t *location_ptr, uint8_t location_len)
Yogesh Pande 4:5d91b0f5038c 474 {
Yogesh Pande 4:5d91b0f5038c 475 if(!handle || !location_ptr || (location_len == 0)) {
Yogesh Pande 4:5d91b0f5038c 476 return -1;
Yogesh Pande 4:5d91b0f5038c 477 }
Yogesh Pande 4:5d91b0f5038c 478 handle->ep_information_ptr->location_ptr = handle->sn_nsdl_alloc(location_len);
Yogesh Pande 4:5d91b0f5038c 479 memcpy(handle->ep_information_ptr->location_ptr, location_ptr, location_len);
Yogesh Pande 4:5d91b0f5038c 480 handle->ep_information_ptr->location_len = location_len;
Yogesh Pande 4:5d91b0f5038c 481
Yogesh Pande 4:5d91b0f5038c 482 return 0;
Yogesh Pande 4:5d91b0f5038c 483 }
Yogesh Pande 4:5d91b0f5038c 484
Yogesh Pande 4:5d91b0f5038c 485 void sn_nsdl_nsp_lost(struct nsdl_s *handle)
Yogesh Pande 4:5d91b0f5038c 486 {
Yogesh Pande 4:5d91b0f5038c 487 /* Check parameters */
Yogesh Pande 4:5d91b0f5038c 488 if (handle == NULL) {
Yogesh Pande 4:5d91b0f5038c 489 return;
Yogesh Pande 4:5d91b0f5038c 490 }
Yogesh Pande 4:5d91b0f5038c 491
Yogesh Pande 4:5d91b0f5038c 492 handle->sn_nsdl_endpoint_registered = SN_NSDL_ENDPOINT_NOT_REGISTERED;
Yogesh Pande 4:5d91b0f5038c 493 }
Yogesh Pande 4:5d91b0f5038c 494
Yogesh Pande 4:5d91b0f5038c 495 int8_t sn_nsdl_is_ep_registered(struct nsdl_s *handle)
Yogesh Pande 4:5d91b0f5038c 496 {
Yogesh Pande 4:5d91b0f5038c 497 /* Check parameters */
Yogesh Pande 4:5d91b0f5038c 498 if (handle == NULL) {
Yogesh Pande 4:5d91b0f5038c 499 return SN_NSDL_FAILURE;
Yogesh Pande 4:5d91b0f5038c 500 }
Yogesh Pande 4:5d91b0f5038c 501
Yogesh Pande 4:5d91b0f5038c 502 return handle->sn_nsdl_endpoint_registered;
Yogesh Pande 4:5d91b0f5038c 503 }
Yogesh Pande 4:5d91b0f5038c 504
Yogesh Pande 4:5d91b0f5038c 505 uint16_t sn_nsdl_send_observation_notification(struct nsdl_s *handle, uint8_t *token_ptr, uint8_t token_len,
Yogesh Pande 4:5d91b0f5038c 506 uint8_t *payload_ptr, uint16_t payload_len,
Yogesh Pande 4:5d91b0f5038c 507 uint8_t *observe_ptr, uint8_t observe_len,
Yogesh Pande 4:5d91b0f5038c 508 sn_coap_msg_type_e message_type, uint8_t content_type)
Yogesh Pande 4:5d91b0f5038c 509 {
Yogesh Pande 4:5d91b0f5038c 510 return sn_nsdl_send_observation_notification_with_uri_path(handle,
Yogesh Pande 4:5d91b0f5038c 511 token_ptr,
Yogesh Pande 4:5d91b0f5038c 512 token_len,
Yogesh Pande 4:5d91b0f5038c 513 payload_ptr,
Yogesh Pande 4:5d91b0f5038c 514 payload_len,
Yogesh Pande 4:5d91b0f5038c 515 observe_ptr,
Yogesh Pande 4:5d91b0f5038c 516 observe_len,
Yogesh Pande 4:5d91b0f5038c 517 message_type,
Yogesh Pande 4:5d91b0f5038c 518 content_type,
Yogesh Pande 4:5d91b0f5038c 519 NULL,
Yogesh Pande 4:5d91b0f5038c 520 0);
Yogesh Pande 4:5d91b0f5038c 521 }
Yogesh Pande 4:5d91b0f5038c 522
Yogesh Pande 4:5d91b0f5038c 523 uint16_t sn_nsdl_send_observation_notification_with_uri_path(struct nsdl_s *handle, uint8_t *token_ptr, uint8_t token_len,
Yogesh Pande 4:5d91b0f5038c 524 uint8_t *payload_ptr, uint16_t payload_len,
Yogesh Pande 4:5d91b0f5038c 525 uint8_t *observe_ptr, uint8_t observe_len,
Yogesh Pande 4:5d91b0f5038c 526 sn_coap_msg_type_e message_type, uint8_t content_type,
Yogesh Pande 4:5d91b0f5038c 527 uint8_t *uri_path_ptr, uint16_t uri_path_len)
Yogesh Pande 4:5d91b0f5038c 528 {
Yogesh Pande 4:5d91b0f5038c 529 sn_coap_hdr_s *notification_message_ptr;
Yogesh Pande 4:5d91b0f5038c 530 uint16_t return_msg_id = 0;
Yogesh Pande 4:5d91b0f5038c 531
Yogesh Pande 4:5d91b0f5038c 532 /* Check parameters */
Yogesh Pande 4:5d91b0f5038c 533 if (handle == NULL) {
Yogesh Pande 4:5d91b0f5038c 534 return 0;
Yogesh Pande 4:5d91b0f5038c 535 }
Yogesh Pande 4:5d91b0f5038c 536
Yogesh Pande 4:5d91b0f5038c 537 /* Allocate and initialize memory for header struct */
Yogesh Pande 4:5d91b0f5038c 538 notification_message_ptr = handle->sn_nsdl_alloc(sizeof(sn_coap_hdr_s));
Yogesh Pande 4:5d91b0f5038c 539 if (notification_message_ptr == NULL) {
Yogesh Pande 4:5d91b0f5038c 540 return 0;
Yogesh Pande 4:5d91b0f5038c 541 }
Yogesh Pande 4:5d91b0f5038c 542
Yogesh Pande 4:5d91b0f5038c 543 memset(notification_message_ptr, 0, sizeof(sn_coap_hdr_s));
Yogesh Pande 4:5d91b0f5038c 544
Yogesh Pande 4:5d91b0f5038c 545 notification_message_ptr->options_list_ptr = handle->sn_nsdl_alloc(sizeof(sn_coap_options_list_s));
Yogesh Pande 4:5d91b0f5038c 546 if (notification_message_ptr->options_list_ptr == NULL) {
Yogesh Pande 4:5d91b0f5038c 547 handle->sn_nsdl_free(notification_message_ptr);
Yogesh Pande 4:5d91b0f5038c 548 return 0;
Yogesh Pande 4:5d91b0f5038c 549 }
Yogesh Pande 4:5d91b0f5038c 550
Yogesh Pande 4:5d91b0f5038c 551 memset(notification_message_ptr->options_list_ptr , 0, sizeof(sn_coap_options_list_s));
Yogesh Pande 4:5d91b0f5038c 552
Yogesh Pande 4:5d91b0f5038c 553 /* Fill header */
Yogesh Pande 4:5d91b0f5038c 554 notification_message_ptr->msg_type = message_type;
Yogesh Pande 4:5d91b0f5038c 555 notification_message_ptr->msg_code = COAP_MSG_CODE_RESPONSE_CONTENT;
Yogesh Pande 4:5d91b0f5038c 556
Yogesh Pande 4:5d91b0f5038c 557 /* Fill token */
Yogesh Pande 4:5d91b0f5038c 558 notification_message_ptr->token_len = token_len;
Yogesh Pande 4:5d91b0f5038c 559 notification_message_ptr->token_ptr = token_ptr;
Yogesh Pande 4:5d91b0f5038c 560
Yogesh Pande 4:5d91b0f5038c 561 /* Fill payload */
Yogesh Pande 4:5d91b0f5038c 562 notification_message_ptr->payload_len = payload_len;
Yogesh Pande 4:5d91b0f5038c 563 notification_message_ptr->payload_ptr = payload_ptr;
Yogesh Pande 4:5d91b0f5038c 564
Yogesh Pande 4:5d91b0f5038c 565 /* Fill uri path */
Yogesh Pande 4:5d91b0f5038c 566 notification_message_ptr->uri_path_len = uri_path_len;
Yogesh Pande 4:5d91b0f5038c 567 notification_message_ptr->uri_path_ptr = uri_path_ptr;
Yogesh Pande 4:5d91b0f5038c 568
Yogesh Pande 4:5d91b0f5038c 569 /* Fill observe */
Yogesh Pande 4:5d91b0f5038c 570 notification_message_ptr->options_list_ptr->observe_len = observe_len;
Yogesh Pande 4:5d91b0f5038c 571 notification_message_ptr->options_list_ptr->observe_ptr = observe_ptr;
Yogesh Pande 4:5d91b0f5038c 572
Yogesh Pande 4:5d91b0f5038c 573 /* Fill content type */
Yogesh Pande 4:5d91b0f5038c 574 if (content_type) {
Yogesh Pande 4:5d91b0f5038c 575 notification_message_ptr->content_type_len = 1;
Yogesh Pande 4:5d91b0f5038c 576 notification_message_ptr->content_type_ptr = &content_type;
Yogesh Pande 4:5d91b0f5038c 577 }
Yogesh Pande 4:5d91b0f5038c 578
Yogesh Pande 4:5d91b0f5038c 579 /* Send message */
Yogesh Pande 4:5d91b0f5038c 580 if (sn_nsdl_send_coap_message(handle, handle->nsp_address_ptr->omalw_address_ptr, notification_message_ptr) == SN_NSDL_FAILURE) {
Yogesh Pande 4:5d91b0f5038c 581 return_msg_id = 0;
Yogesh Pande 4:5d91b0f5038c 582 } else {
Yogesh Pande 4:5d91b0f5038c 583 return_msg_id = notification_message_ptr->msg_id;
Yogesh Pande 4:5d91b0f5038c 584 }
Yogesh Pande 4:5d91b0f5038c 585
Yogesh Pande 4:5d91b0f5038c 586 /* Free memory */
Yogesh Pande 4:5d91b0f5038c 587 notification_message_ptr->uri_path_ptr = NULL;
Yogesh Pande 4:5d91b0f5038c 588 notification_message_ptr->payload_ptr = NULL;
Yogesh Pande 4:5d91b0f5038c 589 notification_message_ptr->options_list_ptr->observe_ptr = NULL;
Yogesh Pande 4:5d91b0f5038c 590 notification_message_ptr->token_ptr = NULL;
Yogesh Pande 4:5d91b0f5038c 591 notification_message_ptr->content_type_ptr = NULL;
Yogesh Pande 4:5d91b0f5038c 592
Yogesh Pande 4:5d91b0f5038c 593 sn_coap_parser_release_allocated_coap_msg_mem(handle->grs->coap, notification_message_ptr);
Yogesh Pande 4:5d91b0f5038c 594
Yogesh Pande 4:5d91b0f5038c 595 return return_msg_id;
Yogesh Pande 4:5d91b0f5038c 596 }
Yogesh Pande 4:5d91b0f5038c 597
Yogesh Pande 4:5d91b0f5038c 598
Yogesh Pande 4:5d91b0f5038c 599 /* * * * * * * * * * */
Yogesh Pande 4:5d91b0f5038c 600 /* ~ OMA functions ~ */
Yogesh Pande 4:5d91b0f5038c 601 /* * * * * * * * * * */
Yogesh Pande 4:5d91b0f5038c 602
Yogesh Pande 4:5d91b0f5038c 603 uint16_t sn_nsdl_oma_bootstrap(struct nsdl_s *handle, sn_nsdl_addr_s *bootstrap_address_ptr, sn_nsdl_ep_parameters_s *endpoint_info_ptr, sn_nsdl_bs_ep_info_t *bootstrap_endpoint_info_ptr)
Yogesh Pande 4:5d91b0f5038c 604 {
Yogesh Pande 4:5d91b0f5038c 605 #ifndef YOTTA_CFG_DISABLE_BOOTSTRAP_FEATURE
Yogesh Pande 4:5d91b0f5038c 606 /* Local variables */
Yogesh Pande 4:5d91b0f5038c 607 sn_coap_hdr_s bootstrap_coap_header;
Yogesh Pande 4:5d91b0f5038c 608 uint8_t *uri_query_tmp_ptr;
Yogesh Pande 4:5d91b0f5038c 609 uint16_t message_id = 0;
Yogesh Pande 4:5d91b0f5038c 610
Yogesh Pande 4:5d91b0f5038c 611 /* Check parameters */
Yogesh Pande 4:5d91b0f5038c 612 if (!bootstrap_address_ptr || !bootstrap_endpoint_info_ptr || !endpoint_info_ptr || !handle) {
Yogesh Pande 4:5d91b0f5038c 613 return 0;
Yogesh Pande 4:5d91b0f5038c 614 }
Yogesh Pande 4:5d91b0f5038c 615
Yogesh Pande 4:5d91b0f5038c 616 /* Create device object */
Yogesh Pande 4:5d91b0f5038c 617 if (sn_nsdl_create_oma_device_object_base(handle, bootstrap_endpoint_info_ptr->device_object, endpoint_info_ptr->binding_and_mode) < 0) {
Yogesh Pande 4:5d91b0f5038c 618 return 0;
Yogesh Pande 4:5d91b0f5038c 619 }
Yogesh Pande 4:5d91b0f5038c 620
Yogesh Pande 4:5d91b0f5038c 621 handle->sn_nsdl_oma_bs_done_cb = bootstrap_endpoint_info_ptr->oma_bs_status_cb;
Yogesh Pande 4:5d91b0f5038c 622
Yogesh Pande 4:5d91b0f5038c 623 /* Init CoAP header struct */
Yogesh Pande 4:5d91b0f5038c 624 memset(&bootstrap_coap_header, 0, sizeof(sn_coap_hdr_s));
Yogesh Pande 4:5d91b0f5038c 625
Yogesh Pande 4:5d91b0f5038c 626 bootstrap_coap_header.options_list_ptr = handle->sn_nsdl_alloc(sizeof(sn_coap_options_list_s));
Yogesh Pande 4:5d91b0f5038c 627 if (!bootstrap_coap_header.options_list_ptr) {
Yogesh Pande 4:5d91b0f5038c 628 return 0;
Yogesh Pande 4:5d91b0f5038c 629 }
Yogesh Pande 4:5d91b0f5038c 630
Yogesh Pande 4:5d91b0f5038c 631 memset(bootstrap_coap_header.options_list_ptr, 0, sizeof(sn_coap_options_list_s));
Yogesh Pande 4:5d91b0f5038c 632
Yogesh Pande 4:5d91b0f5038c 633 /* Build bootstrap start message */
Yogesh Pande 4:5d91b0f5038c 634 bootstrap_coap_header.msg_code = COAP_MSG_CODE_REQUEST_POST;
Yogesh Pande 4:5d91b0f5038c 635 bootstrap_coap_header.msg_type = COAP_MSG_TYPE_CONFIRMABLE;
Yogesh Pande 4:5d91b0f5038c 636
Yogesh Pande 4:5d91b0f5038c 637 bootstrap_coap_header.uri_path_ptr = bs_uri;
Yogesh Pande 4:5d91b0f5038c 638 bootstrap_coap_header.uri_path_len = sizeof(bs_uri);
Yogesh Pande 4:5d91b0f5038c 639
Yogesh Pande 4:5d91b0f5038c 640 uri_query_tmp_ptr = handle->sn_nsdl_alloc(endpoint_info_ptr->endpoint_name_len + BS_EP_PARAMETER_LEN);
Yogesh Pande 4:5d91b0f5038c 641 if (!uri_query_tmp_ptr) {
Yogesh Pande 4:5d91b0f5038c 642 handle->sn_nsdl_free(bootstrap_coap_header.options_list_ptr);
Yogesh Pande 4:5d91b0f5038c 643 return 0;
Yogesh Pande 4:5d91b0f5038c 644 }
Yogesh Pande 4:5d91b0f5038c 645
Yogesh Pande 4:5d91b0f5038c 646 memcpy(uri_query_tmp_ptr, bs_ep_name, BS_EP_PARAMETER_LEN);
Yogesh Pande 4:5d91b0f5038c 647 memcpy((uri_query_tmp_ptr + BS_EP_PARAMETER_LEN), endpoint_info_ptr->endpoint_name_ptr, endpoint_info_ptr->endpoint_name_len);
Yogesh Pande 4:5d91b0f5038c 648
Yogesh Pande 4:5d91b0f5038c 649 bootstrap_coap_header.options_list_ptr->uri_query_len = endpoint_info_ptr->endpoint_name_len + BS_EP_PARAMETER_LEN;
Yogesh Pande 4:5d91b0f5038c 650 bootstrap_coap_header.options_list_ptr->uri_query_ptr = uri_query_tmp_ptr;
Yogesh Pande 4:5d91b0f5038c 651
Yogesh Pande 4:5d91b0f5038c 652 /* Save bootstrap server address */
Yogesh Pande 4:5d91b0f5038c 653 handle->oma_bs_address_len = bootstrap_address_ptr->addr_len; /* Length.. */
Yogesh Pande 4:5d91b0f5038c 654 handle->oma_bs_address_ptr = handle->sn_nsdl_alloc(handle->oma_bs_address_len); /* Address.. */
Yogesh Pande 4:5d91b0f5038c 655 if (!handle->oma_bs_address_ptr) {
Yogesh Pande 4:5d91b0f5038c 656 handle->sn_nsdl_free(bootstrap_coap_header.options_list_ptr);
Yogesh Pande 4:5d91b0f5038c 657 handle->sn_nsdl_free(uri_query_tmp_ptr);
Yogesh Pande 4:5d91b0f5038c 658 return 0;
Yogesh Pande 4:5d91b0f5038c 659 }
Yogesh Pande 4:5d91b0f5038c 660 memcpy(handle->oma_bs_address_ptr, bootstrap_address_ptr->addr_ptr, handle->oma_bs_address_len);
Yogesh Pande 4:5d91b0f5038c 661 handle->oma_bs_port = bootstrap_address_ptr->port; /* And port */
Yogesh Pande 4:5d91b0f5038c 662
Yogesh Pande 4:5d91b0f5038c 663 /* Send message */
Yogesh Pande 4:5d91b0f5038c 664 message_id = sn_nsdl_internal_coap_send(handle, &bootstrap_coap_header, bootstrap_address_ptr, SN_NSDL_MSG_UNDEFINED);
Yogesh Pande 4:5d91b0f5038c 665
Yogesh Pande 4:5d91b0f5038c 666 /* Free allocated memory */
Yogesh Pande 4:5d91b0f5038c 667 handle->sn_nsdl_free(uri_query_tmp_ptr);
Yogesh Pande 4:5d91b0f5038c 668 handle->sn_nsdl_free(bootstrap_coap_header.options_list_ptr);
Yogesh Pande 4:5d91b0f5038c 669
Yogesh Pande 4:5d91b0f5038c 670 return message_id;
Yogesh Pande 4:5d91b0f5038c 671 #else
Yogesh Pande 4:5d91b0f5038c 672 return 0;
Yogesh Pande 4:5d91b0f5038c 673 #endif //YOTTA_CFG_DISABLE_BOOTSTRAP_FEATURE
Yogesh Pande 4:5d91b0f5038c 674
Yogesh Pande 4:5d91b0f5038c 675 }
Yogesh Pande 4:5d91b0f5038c 676
Yogesh Pande 4:5d91b0f5038c 677 omalw_certificate_list_t *sn_nsdl_get_certificates(struct nsdl_s *handle)
Yogesh Pande 4:5d91b0f5038c 678 {
Yogesh Pande 4:5d91b0f5038c 679 #ifndef YOTTA_CFG_DISABLE_BOOTSTRAP_FEATURE
Yogesh Pande 4:5d91b0f5038c 680 sn_nsdl_resource_info_s *resource_ptr = 0;;
Yogesh Pande 4:5d91b0f5038c 681 omalw_certificate_list_t *certi_list_ptr = 0;
Yogesh Pande 4:5d91b0f5038c 682
Yogesh Pande 4:5d91b0f5038c 683 /* Check parameters */
Yogesh Pande 4:5d91b0f5038c 684 if (handle == NULL) {
Yogesh Pande 4:5d91b0f5038c 685 return NULL;
Yogesh Pande 4:5d91b0f5038c 686 }
Yogesh Pande 4:5d91b0f5038c 687
Yogesh Pande 4:5d91b0f5038c 688 certi_list_ptr = handle->sn_nsdl_alloc(sizeof(omalw_certificate_list_t));
Yogesh Pande 4:5d91b0f5038c 689
Yogesh Pande 4:5d91b0f5038c 690 if (!certi_list_ptr) {
Yogesh Pande 4:5d91b0f5038c 691 return NULL;
Yogesh Pande 4:5d91b0f5038c 692 }
Yogesh Pande 4:5d91b0f5038c 693
Yogesh Pande 4:5d91b0f5038c 694 /* Get private key resource */
Yogesh Pande 4:5d91b0f5038c 695 resource_ptr = sn_nsdl_get_resource(handle, 5, (void *)"0/0/5");
Yogesh Pande 4:5d91b0f5038c 696 if (!resource_ptr) {
Yogesh Pande 4:5d91b0f5038c 697 handle->sn_nsdl_free(certi_list_ptr);
Yogesh Pande 4:5d91b0f5038c 698 return NULL;
Yogesh Pande 4:5d91b0f5038c 699 }
Yogesh Pande 4:5d91b0f5038c 700 certi_list_ptr->own_private_key_ptr = resource_ptr->resource;
Yogesh Pande 4:5d91b0f5038c 701 certi_list_ptr->own_private_key_len = resource_ptr->resourcelen;
Yogesh Pande 4:5d91b0f5038c 702
Yogesh Pande 4:5d91b0f5038c 703 /* Get client certificate resource */
Yogesh Pande 4:5d91b0f5038c 704 resource_ptr = sn_nsdl_get_resource(handle, 5, (void *)"0/0/4");
Yogesh Pande 4:5d91b0f5038c 705 if (!resource_ptr) {
Yogesh Pande 4:5d91b0f5038c 706 handle->sn_nsdl_free(certi_list_ptr);
Yogesh Pande 4:5d91b0f5038c 707 return NULL;
Yogesh Pande 4:5d91b0f5038c 708 }
Yogesh Pande 4:5d91b0f5038c 709 certi_list_ptr->certificate_ptr[0] = resource_ptr->resource;
Yogesh Pande 4:5d91b0f5038c 710 certi_list_ptr->certificate_len[0] = resource_ptr->resourcelen;
Yogesh Pande 4:5d91b0f5038c 711
Yogesh Pande 4:5d91b0f5038c 712 /* Get root certificate resource */
Yogesh Pande 4:5d91b0f5038c 713 resource_ptr = sn_nsdl_get_resource(handle, 5, (void *)"0/0/3");
Yogesh Pande 4:5d91b0f5038c 714 if (!resource_ptr) {
Yogesh Pande 4:5d91b0f5038c 715 handle->sn_nsdl_free(certi_list_ptr);
Yogesh Pande 4:5d91b0f5038c 716 return NULL;
Yogesh Pande 4:5d91b0f5038c 717 }
Yogesh Pande 4:5d91b0f5038c 718 certi_list_ptr->certificate_ptr[1] = resource_ptr->resource;
Yogesh Pande 4:5d91b0f5038c 719 certi_list_ptr->certificate_len[1] = resource_ptr->resourcelen;
Yogesh Pande 4:5d91b0f5038c 720
Yogesh Pande 4:5d91b0f5038c 721 /* return filled list */
Yogesh Pande 4:5d91b0f5038c 722 return certi_list_ptr;
Yogesh Pande 4:5d91b0f5038c 723 #else
Yogesh Pande 4:5d91b0f5038c 724 return NULL;
Yogesh Pande 4:5d91b0f5038c 725 #endif //YOTTA_CFG_DISABLE_BOOTSTRAP_FEATURE
Yogesh Pande 4:5d91b0f5038c 726 }
Yogesh Pande 4:5d91b0f5038c 727
Yogesh Pande 4:5d91b0f5038c 728 int8_t sn_nsdl_update_certificates(struct nsdl_s *handle, omalw_certificate_list_t *certificate_ptr, uint8_t certificate_chain)
Yogesh Pande 4:5d91b0f5038c 729 {
Yogesh Pande 4:5d91b0f5038c 730 #ifndef YOTTA_CFG_DISABLE_BOOTSTRAP_FEATURE
Yogesh Pande 4:5d91b0f5038c 731 (void)certificate_chain;
Yogesh Pande 4:5d91b0f5038c 732
Yogesh Pande 4:5d91b0f5038c 733 /* Check pointers */
Yogesh Pande 4:5d91b0f5038c 734 if (!certificate_ptr || !handle) {
Yogesh Pande 4:5d91b0f5038c 735 return SN_NSDL_FAILURE;
Yogesh Pande 4:5d91b0f5038c 736 }
Yogesh Pande 4:5d91b0f5038c 737
Yogesh Pande 4:5d91b0f5038c 738 sn_nsdl_resource_info_s *resource_ptr = 0;;
Yogesh Pande 4:5d91b0f5038c 739
Yogesh Pande 4:5d91b0f5038c 740 /* Get private key resource */
Yogesh Pande 4:5d91b0f5038c 741 resource_ptr = sn_nsdl_get_resource(handle, 5, (void *)"0/0/5");
Yogesh Pande 4:5d91b0f5038c 742 if (!resource_ptr) {
Yogesh Pande 4:5d91b0f5038c 743 return SN_NSDL_FAILURE;
Yogesh Pande 4:5d91b0f5038c 744 }
Yogesh Pande 4:5d91b0f5038c 745 handle->sn_nsdl_free(resource_ptr->resource);
Yogesh Pande 4:5d91b0f5038c 746 resource_ptr->resource = certificate_ptr->own_private_key_ptr;
Yogesh Pande 4:5d91b0f5038c 747 resource_ptr->resourcelen = certificate_ptr->own_private_key_len;
Yogesh Pande 4:5d91b0f5038c 748
Yogesh Pande 4:5d91b0f5038c 749 /* Get client certificate resource */
Yogesh Pande 4:5d91b0f5038c 750 resource_ptr = sn_nsdl_get_resource(handle, 5, (void *)"0/0/4");
Yogesh Pande 4:5d91b0f5038c 751 if (!resource_ptr) {
Yogesh Pande 4:5d91b0f5038c 752 return SN_NSDL_FAILURE;
Yogesh Pande 4:5d91b0f5038c 753 }
Yogesh Pande 4:5d91b0f5038c 754 handle->sn_nsdl_free(resource_ptr->resource);
Yogesh Pande 4:5d91b0f5038c 755 resource_ptr->resource = certificate_ptr->certificate_ptr[0];
Yogesh Pande 4:5d91b0f5038c 756 resource_ptr->resourcelen = certificate_ptr->certificate_len[0];
Yogesh Pande 4:5d91b0f5038c 757
Yogesh Pande 4:5d91b0f5038c 758 /* Get root certificate resource */
Yogesh Pande 4:5d91b0f5038c 759 resource_ptr = sn_nsdl_get_resource(handle, 5, (void *)"0/0/3");
Yogesh Pande 4:5d91b0f5038c 760 if (!resource_ptr) {
Yogesh Pande 4:5d91b0f5038c 761 return SN_NSDL_FAILURE;
Yogesh Pande 4:5d91b0f5038c 762 }
Yogesh Pande 4:5d91b0f5038c 763 handle->sn_nsdl_free(resource_ptr->resource);
Yogesh Pande 4:5d91b0f5038c 764 resource_ptr->resource = certificate_ptr->certificate_ptr[1];
Yogesh Pande 4:5d91b0f5038c 765 resource_ptr->resourcelen = certificate_ptr->certificate_len[1];
Yogesh Pande 4:5d91b0f5038c 766
Yogesh Pande 4:5d91b0f5038c 767 return SN_NSDL_SUCCESS;
Yogesh Pande 4:5d91b0f5038c 768 #else
Yogesh Pande 4:5d91b0f5038c 769 return SN_NSDL_FAILURE;
Yogesh Pande 4:5d91b0f5038c 770 #endif //YOTTA_CFG_DISABLE_BOOTSTRAP_FEATURE
Yogesh Pande 4:5d91b0f5038c 771 }
Yogesh Pande 4:5d91b0f5038c 772
Yogesh Pande 4:5d91b0f5038c 773 int8_t sn_nsdl_create_oma_device_object(struct nsdl_s *handle, sn_nsdl_oma_device_t *device_object_ptr)
Yogesh Pande 4:5d91b0f5038c 774 {
Yogesh Pande 4:5d91b0f5038c 775 #ifndef YOTTA_CFG_DISABLE_BOOTSTRAP_FEATURE
Yogesh Pande 4:5d91b0f5038c 776 sn_nsdl_resource_info_s *resource_temp = 0;
Yogesh Pande 4:5d91b0f5038c 777 uint8_t path[8] = "3/0/11/0";
Yogesh Pande 4:5d91b0f5038c 778
Yogesh Pande 4:5d91b0f5038c 779 if (!device_object_ptr || !handle) {
Yogesh Pande 4:5d91b0f5038c 780 return SN_NSDL_FAILURE;
Yogesh Pande 4:5d91b0f5038c 781 }
Yogesh Pande 4:5d91b0f5038c 782
Yogesh Pande 4:5d91b0f5038c 783 /* * Error code * */
Yogesh Pande 4:5d91b0f5038c 784
Yogesh Pande 4:5d91b0f5038c 785 /* Get first error message */
Yogesh Pande 4:5d91b0f5038c 786 resource_temp = sn_grs_search_resource(handle->grs, 8, path, SN_GRS_SEARCH_METHOD);
Yogesh Pande 4:5d91b0f5038c 787
Yogesh Pande 4:5d91b0f5038c 788 while (resource_temp) {
Yogesh Pande 4:5d91b0f5038c 789 if (resource_temp->resource) {
Yogesh Pande 4:5d91b0f5038c 790 /* If no error code set */
Yogesh Pande 4:5d91b0f5038c 791 if (*resource_temp->resource == 0) {
Yogesh Pande 4:5d91b0f5038c 792 /* Set error code */
Yogesh Pande 4:5d91b0f5038c 793 *resource_temp->resource = (uint8_t)device_object_ptr->error_code;
Yogesh Pande 4:5d91b0f5038c 794 resource_temp->resourcelen = 1;
Yogesh Pande 4:5d91b0f5038c 795
Yogesh Pande 4:5d91b0f5038c 796 sn_nsdl_update_resource(handle, resource_temp);
Yogesh Pande 4:5d91b0f5038c 797 return SN_NSDL_SUCCESS;
Yogesh Pande 4:5d91b0f5038c 798 }
Yogesh Pande 4:5d91b0f5038c 799 break;
Yogesh Pande 4:5d91b0f5038c 800 }
Yogesh Pande 4:5d91b0f5038c 801
Yogesh Pande 4:5d91b0f5038c 802 if (path[7] == '9') {
Yogesh Pande 4:5d91b0f5038c 803 return SN_NSDL_FAILURE;
Yogesh Pande 4:5d91b0f5038c 804 }
Yogesh Pande 4:5d91b0f5038c 805
Yogesh Pande 4:5d91b0f5038c 806 path[7]++;
Yogesh Pande 4:5d91b0f5038c 807 resource_temp = sn_grs_search_resource(handle->grs, 8, path, SN_GRS_SEARCH_METHOD);
Yogesh Pande 4:5d91b0f5038c 808 }
Yogesh Pande 4:5d91b0f5038c 809
Yogesh Pande 4:5d91b0f5038c 810 /* Create new resource for this error */
Yogesh Pande 4:5d91b0f5038c 811 resource_temp = handle->sn_nsdl_alloc(sizeof(sn_nsdl_resource_info_s));
Yogesh Pande 4:5d91b0f5038c 812 if (!resource_temp) {
Yogesh Pande 4:5d91b0f5038c 813 return SN_NSDL_FAILURE;
Yogesh Pande 4:5d91b0f5038c 814 }
Yogesh Pande 4:5d91b0f5038c 815
Yogesh Pande 4:5d91b0f5038c 816 memset(resource_temp, 0, sizeof(sn_nsdl_resource_info_s));
Yogesh Pande 4:5d91b0f5038c 817
Yogesh Pande 4:5d91b0f5038c 818 resource_temp->access = SN_GRS_GET_ALLOWED;
Yogesh Pande 4:5d91b0f5038c 819 resource_temp->mode = SN_GRS_DYNAMIC;
Yogesh Pande 4:5d91b0f5038c 820
Yogesh Pande 4:5d91b0f5038c 821 resource_temp->path = path;
Yogesh Pande 4:5d91b0f5038c 822 resource_temp->pathlen = 8;
Yogesh Pande 4:5d91b0f5038c 823
Yogesh Pande 4:5d91b0f5038c 824 resource_temp->resource = handle->sn_nsdl_alloc(1);
Yogesh Pande 4:5d91b0f5038c 825 if (!resource_temp->resource) {
Yogesh Pande 4:5d91b0f5038c 826 handle->sn_nsdl_free(resource_temp);
Yogesh Pande 4:5d91b0f5038c 827 return SN_NSDL_FAILURE;
Yogesh Pande 4:5d91b0f5038c 828 }
Yogesh Pande 4:5d91b0f5038c 829
Yogesh Pande 4:5d91b0f5038c 830 *resource_temp->resource = (uint8_t)device_object_ptr->error_code;
Yogesh Pande 4:5d91b0f5038c 831 resource_temp->resourcelen = 1;
Yogesh Pande 4:5d91b0f5038c 832
Yogesh Pande 4:5d91b0f5038c 833 resource_temp->resource_parameters_ptr = handle->sn_nsdl_alloc(sizeof(sn_nsdl_resource_parameters_s));
Yogesh Pande 4:5d91b0f5038c 834
Yogesh Pande 4:5d91b0f5038c 835 if (!resource_temp->resource_parameters_ptr) {
Yogesh Pande 4:5d91b0f5038c 836 handle->sn_nsdl_free(resource_temp->resource);
Yogesh Pande 4:5d91b0f5038c 837 handle->sn_nsdl_free(resource_temp);
Yogesh Pande 4:5d91b0f5038c 838
Yogesh Pande 4:5d91b0f5038c 839 return SN_NSDL_FAILURE;
Yogesh Pande 4:5d91b0f5038c 840 }
Yogesh Pande 4:5d91b0f5038c 841
Yogesh Pande 4:5d91b0f5038c 842 memset(resource_temp->resource_parameters_ptr, 0, sizeof(sn_nsdl_resource_parameters_s));
Yogesh Pande 4:5d91b0f5038c 843
Yogesh Pande 4:5d91b0f5038c 844 sn_nsdl_create_resource(handle, resource_temp);
Yogesh Pande 4:5d91b0f5038c 845
Yogesh Pande 4:5d91b0f5038c 846 handle->sn_nsdl_free(resource_temp->resource);
Yogesh Pande 4:5d91b0f5038c 847 handle->sn_nsdl_free(resource_temp->resource_parameters_ptr);
Yogesh Pande 4:5d91b0f5038c 848 handle->sn_nsdl_free(resource_temp);
Yogesh Pande 4:5d91b0f5038c 849
Yogesh Pande 4:5d91b0f5038c 850 return SN_NSDL_SUCCESS;
Yogesh Pande 4:5d91b0f5038c 851 #else
Yogesh Pande 4:5d91b0f5038c 852 return SN_NSDL_FAILURE;
Yogesh Pande 4:5d91b0f5038c 853 #endif //YOTTA_CFG_DISABLE_BOOTSTRAP_FEATURE
Yogesh Pande 4:5d91b0f5038c 854 }
Yogesh Pande 4:5d91b0f5038c 855
Yogesh Pande 4:5d91b0f5038c 856 char *sn_nsdl_get_version(void)
Yogesh Pande 4:5d91b0f5038c 857 {
Yogesh Pande 4:5d91b0f5038c 858 #if defined(YOTTA_MBED_CLIENT_C_VERSION_STRING)
Yogesh Pande 4:5d91b0f5038c 859 return YOTTA_MBED_CLIENT_C_VERSION_STRING;
Yogesh Pande 4:5d91b0f5038c 860 #elif defined(VERSION)
Yogesh Pande 4:5d91b0f5038c 861 return VERSION;
Yogesh Pande 4:5d91b0f5038c 862 #else
Yogesh Pande 4:5d91b0f5038c 863 return "0.0.0";
Yogesh Pande 4:5d91b0f5038c 864 #endif
Yogesh Pande 4:5d91b0f5038c 865 }
Yogesh Pande 4:5d91b0f5038c 866
Yogesh Pande 4:5d91b0f5038c 867
Yogesh Pande 4:5d91b0f5038c 868 int8_t sn_nsdl_process_coap(struct nsdl_s *handle, uint8_t *packet_ptr, uint16_t packet_len, sn_nsdl_addr_s *src_ptr)
Yogesh Pande 4:5d91b0f5038c 869 {
Yogesh Pande 4:5d91b0f5038c 870 sn_coap_hdr_s *coap_packet_ptr = NULL;
Yogesh Pande 4:5d91b0f5038c 871 sn_coap_hdr_s *coap_response_ptr = NULL;
Yogesh Pande 4:5d91b0f5038c 872
Yogesh Pande 4:5d91b0f5038c 873 /* Check parameters */
Yogesh Pande 4:5d91b0f5038c 874 if (handle == NULL) {
Yogesh Pande 4:5d91b0f5038c 875 return SN_NSDL_FAILURE;
Yogesh Pande 4:5d91b0f5038c 876 }
Yogesh Pande 4:5d91b0f5038c 877
Yogesh Pande 4:5d91b0f5038c 878 /* Parse CoAP packet */
Yogesh Pande 4:5d91b0f5038c 879 coap_packet_ptr = sn_coap_protocol_parse(handle->grs->coap, src_ptr, packet_len, packet_ptr, (void *)handle);
Yogesh Pande 4:5d91b0f5038c 880
Yogesh Pande 4:5d91b0f5038c 881 /* Check if parsing was successfull */
Yogesh Pande 4:5d91b0f5038c 882 if (coap_packet_ptr == (sn_coap_hdr_s *)NULL) {
Yogesh Pande 4:5d91b0f5038c 883 return SN_NSDL_FAILURE;
Yogesh Pande 4:5d91b0f5038c 884 }
Yogesh Pande 4:5d91b0f5038c 885
Yogesh Pande 4:5d91b0f5038c 886 /* Check, if coap itself sends response, or block receiving is ongoing... */
Yogesh Pande 4:5d91b0f5038c 887 if (coap_packet_ptr->coap_status != COAP_STATUS_OK && coap_packet_ptr->coap_status != COAP_STATUS_PARSER_BLOCKWISE_MSG_RECEIVED) {
Yogesh Pande 4:5d91b0f5038c 888 sn_coap_parser_release_allocated_coap_msg_mem(handle->grs->coap, coap_packet_ptr);
Yogesh Pande 4:5d91b0f5038c 889 return SN_NSDL_SUCCESS;
Yogesh Pande 4:5d91b0f5038c 890 }
Yogesh Pande 4:5d91b0f5038c 891
Yogesh Pande 4:5d91b0f5038c 892 /* If proxy options added, return not supported */
Yogesh Pande 4:5d91b0f5038c 893 if (coap_packet_ptr->options_list_ptr) {
Yogesh Pande 4:5d91b0f5038c 894 if (coap_packet_ptr->options_list_ptr->proxy_uri_len) {
Yogesh Pande 4:5d91b0f5038c 895 coap_response_ptr = sn_coap_build_response(handle->grs->coap, coap_packet_ptr, COAP_MSG_CODE_RESPONSE_PROXYING_NOT_SUPPORTED);
Yogesh Pande 4:5d91b0f5038c 896 if (coap_response_ptr) {
Yogesh Pande 4:5d91b0f5038c 897 sn_nsdl_send_coap_message(handle, src_ptr, coap_response_ptr);
Yogesh Pande 4:5d91b0f5038c 898 sn_coap_parser_release_allocated_coap_msg_mem(handle->grs->coap, coap_response_ptr);
Yogesh Pande 4:5d91b0f5038c 899 sn_coap_parser_release_allocated_coap_msg_mem(handle->grs->coap, coap_packet_ptr);
Yogesh Pande 4:5d91b0f5038c 900 return SN_NSDL_SUCCESS;
Yogesh Pande 4:5d91b0f5038c 901 } else {
Yogesh Pande 4:5d91b0f5038c 902 sn_coap_parser_release_allocated_coap_msg_mem(handle->grs->coap, coap_packet_ptr);
Yogesh Pande 4:5d91b0f5038c 903 return SN_NSDL_FAILURE;
Yogesh Pande 4:5d91b0f5038c 904 }
Yogesh Pande 4:5d91b0f5038c 905 }
Yogesh Pande 4:5d91b0f5038c 906 }
Yogesh Pande 4:5d91b0f5038c 907
Yogesh Pande 4:5d91b0f5038c 908 /* * * * * * * * * * * * * * * * * * * * * * * * * * */
Yogesh Pande 4:5d91b0f5038c 909 /* If message is response message, call RX callback */
Yogesh Pande 4:5d91b0f5038c 910 /* * * * * * * * * * * * * * * * * * * * * * * * * * */
Yogesh Pande 4:5d91b0f5038c 911
Yogesh Pande 4:5d91b0f5038c 912 if ((coap_packet_ptr->msg_code > COAP_MSG_CODE_REQUEST_DELETE) || (coap_packet_ptr->msg_type == COAP_MSG_TYPE_ACKNOWLEDGEMENT)) {
Yogesh Pande 4:5d91b0f5038c 913 int8_t retval = sn_nsdl_local_rx_function(handle, coap_packet_ptr, src_ptr);
Yogesh Pande 4:5d91b0f5038c 914 if (coap_packet_ptr->coap_status == COAP_STATUS_PARSER_BLOCKWISE_MSG_RECEIVED && coap_packet_ptr->payload_ptr) {
Yogesh Pande 4:5d91b0f5038c 915 handle->sn_nsdl_free(coap_packet_ptr->payload_ptr);
Yogesh Pande 4:5d91b0f5038c 916 coap_packet_ptr->payload_ptr = 0;
Yogesh Pande 4:5d91b0f5038c 917 }
Yogesh Pande 4:5d91b0f5038c 918 sn_coap_parser_release_allocated_coap_msg_mem(handle->grs->coap, coap_packet_ptr);
Yogesh Pande 4:5d91b0f5038c 919 return retval;
Yogesh Pande 4:5d91b0f5038c 920 }
Yogesh Pande 4:5d91b0f5038c 921 #ifndef YOTTA_CFG_DISABLE_BOOTSTRAP_FEATURE
Yogesh Pande 4:5d91b0f5038c 922 /* * If OMA bootstrap message... * */
Yogesh Pande 4:5d91b0f5038c 923 if (src_ptr && (handle->oma_bs_address_len == src_ptr->addr_len) && (handle->oma_bs_port == src_ptr->port) && !memcmp(handle->oma_bs_address_ptr, src_ptr->addr_ptr, handle->oma_bs_address_len)) {
Yogesh Pande 4:5d91b0f5038c 924 /* TLV message. Parse message and check status of the OMA bootstrap */
Yogesh Pande 4:5d91b0f5038c 925 /* process. If ok, call cb function and return. Otherwise send error */
Yogesh Pande 4:5d91b0f5038c 926 /* and return failure. */
Yogesh Pande 4:5d91b0f5038c 927
Yogesh Pande 4:5d91b0f5038c 928 if (coap_packet_ptr->content_type_len == 1) { //todo check message type
Yogesh Pande 4:5d91b0f5038c 929 if (*coap_packet_ptr->content_type_ptr == 99) {
Yogesh Pande 4:5d91b0f5038c 930 /* TLV parsing failed. Send response to get non-tlv messages */
Yogesh Pande 4:5d91b0f5038c 931 if (sn_nsdl_process_oma_tlv(handle, coap_packet_ptr->payload_ptr, coap_packet_ptr->payload_len) == SN_NSDL_FAILURE) {
Yogesh Pande 4:5d91b0f5038c 932 coap_response_ptr = sn_coap_build_response(handle->grs->coap, coap_packet_ptr, COAP_MSG_CODE_RESPONSE_NOT_ACCEPTABLE);
Yogesh Pande 4:5d91b0f5038c 933 if (coap_response_ptr) {
Yogesh Pande 4:5d91b0f5038c 934 sn_nsdl_send_coap_message(handle, src_ptr, coap_response_ptr);
Yogesh Pande 4:5d91b0f5038c 935 sn_coap_parser_release_allocated_coap_msg_mem(handle->grs->coap, coap_response_ptr);
Yogesh Pande 4:5d91b0f5038c 936 } else {
Yogesh Pande 4:5d91b0f5038c 937 sn_coap_parser_release_allocated_coap_msg_mem(handle->grs->coap, coap_packet_ptr);
Yogesh Pande 4:5d91b0f5038c 938 return SN_NSDL_FAILURE;
Yogesh Pande 4:5d91b0f5038c 939 }
Yogesh Pande 4:5d91b0f5038c 940 }
Yogesh Pande 4:5d91b0f5038c 941 /* Success TLV parsing */
Yogesh Pande 4:5d91b0f5038c 942 else {
Yogesh Pande 4:5d91b0f5038c 943 coap_response_ptr = sn_coap_build_response(handle->grs->coap, coap_packet_ptr, COAP_MSG_CODE_RESPONSE_CREATED);
Yogesh Pande 4:5d91b0f5038c 944 if (coap_response_ptr) {
Yogesh Pande 4:5d91b0f5038c 945 sn_nsdl_send_coap_message(handle, src_ptr, coap_response_ptr);
Yogesh Pande 4:5d91b0f5038c 946 sn_coap_parser_release_allocated_coap_msg_mem(handle->grs->coap, coap_response_ptr);
Yogesh Pande 4:5d91b0f5038c 947
Yogesh Pande 4:5d91b0f5038c 948 } else {
Yogesh Pande 4:5d91b0f5038c 949 sn_coap_parser_release_allocated_coap_msg_mem(handle->grs->coap, coap_packet_ptr);
Yogesh Pande 4:5d91b0f5038c 950 return SN_NSDL_FAILURE;
Yogesh Pande 4:5d91b0f5038c 951 }
Yogesh Pande 4:5d91b0f5038c 952 sn_nsdl_check_oma_bs_status(handle);
Yogesh Pande 4:5d91b0f5038c 953 }
Yogesh Pande 4:5d91b0f5038c 954
Yogesh Pande 4:5d91b0f5038c 955 sn_coap_parser_release_allocated_coap_msg_mem(handle->grs->coap, coap_packet_ptr);
Yogesh Pande 4:5d91b0f5038c 956 return SN_NSDL_SUCCESS;
Yogesh Pande 4:5d91b0f5038c 957 }
Yogesh Pande 4:5d91b0f5038c 958
Yogesh Pande 4:5d91b0f5038c 959 /* Non - TLV message */
Yogesh Pande 4:5d91b0f5038c 960 else if (*coap_packet_ptr->content_type_ptr == 97) {
Yogesh Pande 4:5d91b0f5038c 961 sn_grs_process_coap(handle, coap_packet_ptr, src_ptr);
Yogesh Pande 4:5d91b0f5038c 962
Yogesh Pande 4:5d91b0f5038c 963 /* Todo: move this copying to sn_nsdl_check_oma_bs_status(), also from TLV parser */
Yogesh Pande 4:5d91b0f5038c 964 /* Security mode */
Yogesh Pande 4:5d91b0f5038c 965 if (*(coap_packet_ptr->uri_path_ptr + (coap_packet_ptr->uri_path_len - 1)) == '2') {
Yogesh Pande 4:5d91b0f5038c 966 handle->nsp_address_ptr->omalw_server_security = (omalw_server_security_t)sn_nsdl_atoi(coap_packet_ptr->payload_ptr, coap_packet_ptr->payload_len);
Yogesh Pande 4:5d91b0f5038c 967 sn_coap_parser_release_allocated_coap_msg_mem(handle->grs->coap, coap_packet_ptr);
Yogesh Pande 4:5d91b0f5038c 968 }
Yogesh Pande 4:5d91b0f5038c 969
Yogesh Pande 4:5d91b0f5038c 970 /* NSP address */
Yogesh Pande 4:5d91b0f5038c 971 else if (*(coap_packet_ptr->uri_path_ptr + (coap_packet_ptr->uri_path_len - 1)) == '0') {
Yogesh Pande 4:5d91b0f5038c 972 sn_nsdl_resolve_lwm2m_address(handle, coap_packet_ptr->payload_ptr, coap_packet_ptr->payload_len);
Yogesh Pande 4:5d91b0f5038c 973 sn_coap_parser_release_allocated_coap_msg_mem(handle->grs->coap, coap_packet_ptr);
Yogesh Pande 4:5d91b0f5038c 974 }
Yogesh Pande 4:5d91b0f5038c 975
Yogesh Pande 4:5d91b0f5038c 976 sn_nsdl_check_oma_bs_status(handle);
Yogesh Pande 4:5d91b0f5038c 977 } else {
Yogesh Pande 4:5d91b0f5038c 978 sn_coap_parser_release_allocated_coap_msg_mem(handle->grs->coap, coap_packet_ptr);
Yogesh Pande 4:5d91b0f5038c 979 return SN_NSDL_FAILURE;
Yogesh Pande 4:5d91b0f5038c 980 }
Yogesh Pande 4:5d91b0f5038c 981 } else {
Yogesh Pande 4:5d91b0f5038c 982 sn_coap_parser_release_allocated_coap_msg_mem(handle->grs->coap, coap_packet_ptr);
Yogesh Pande 4:5d91b0f5038c 983 return SN_NSDL_FAILURE;
Yogesh Pande 4:5d91b0f5038c 984 }
Yogesh Pande 4:5d91b0f5038c 985
Yogesh Pande 4:5d91b0f5038c 986
Yogesh Pande 4:5d91b0f5038c 987 return SN_NSDL_SUCCESS;
Yogesh Pande 4:5d91b0f5038c 988 }
Yogesh Pande 4:5d91b0f5038c 989 #endif //YOTTA_CFG_DISABLE_BOOTSTRAP_FEATURE
Yogesh Pande 4:5d91b0f5038c 990
Yogesh Pande 4:5d91b0f5038c 991 /* * * * * * * * * * * * * * * */
Yogesh Pande 4:5d91b0f5038c 992 /* Other messages are for GRS */
Yogesh Pande 4:5d91b0f5038c 993 /* * * * * * * * * * * * * * * */
Yogesh Pande 4:5d91b0f5038c 994
Yogesh Pande 4:5d91b0f5038c 995 return sn_grs_process_coap(handle, coap_packet_ptr, src_ptr);
Yogesh Pande 4:5d91b0f5038c 996 }
Yogesh Pande 4:5d91b0f5038c 997
Yogesh Pande 4:5d91b0f5038c 998 int8_t sn_nsdl_exec(struct nsdl_s *handle, uint32_t time)
Yogesh Pande 4:5d91b0f5038c 999 {
Yogesh Pande 4:5d91b0f5038c 1000 if(!handle || !handle->grs){
Yogesh Pande 4:5d91b0f5038c 1001 return SN_NSDL_FAILURE;
Yogesh Pande 4:5d91b0f5038c 1002 }
Yogesh Pande 4:5d91b0f5038c 1003 /* Call CoAP execution function */
Yogesh Pande 4:5d91b0f5038c 1004 return sn_coap_protocol_exec(handle->grs->coap, time);
Yogesh Pande 4:5d91b0f5038c 1005 }
Yogesh Pande 4:5d91b0f5038c 1006
Yogesh Pande 4:5d91b0f5038c 1007 sn_nsdl_resource_info_s *sn_nsdl_get_resource(struct nsdl_s *handle, uint16_t pathlen, uint8_t *path_ptr)
Yogesh Pande 4:5d91b0f5038c 1008 {
Yogesh Pande 4:5d91b0f5038c 1009 /* Check parameters */
Yogesh Pande 4:5d91b0f5038c 1010 if (handle == NULL) {
Yogesh Pande 4:5d91b0f5038c 1011 return NULL;
Yogesh Pande 4:5d91b0f5038c 1012 }
Yogesh Pande 4:5d91b0f5038c 1013
Yogesh Pande 4:5d91b0f5038c 1014 return sn_grs_search_resource(handle->grs, pathlen, path_ptr, SN_GRS_SEARCH_METHOD);
Yogesh Pande 4:5d91b0f5038c 1015 }
Yogesh Pande 4:5d91b0f5038c 1016
Yogesh Pande 4:5d91b0f5038c 1017
Yogesh Pande 4:5d91b0f5038c 1018 /**
Yogesh Pande 4:5d91b0f5038c 1019 * \fn static uint16_t sn_nsdl_internal_coap_send(struct nsdl_s *handle, sn_coap_hdr_s *coap_header_ptr, sn_nsdl_addr_s *dst_addr_ptr, uint8_t message_description)
Yogesh Pande 4:5d91b0f5038c 1020 *
Yogesh Pande 4:5d91b0f5038c 1021 *
Yogesh Pande 4:5d91b0f5038c 1022 * \brief To send NSDL messages. Stores message id?s and message description to catch response from NSP server
Yogesh Pande 4:5d91b0f5038c 1023 * \param *handle Pointer to nsdl-library handle
Yogesh Pande 4:5d91b0f5038c 1024 * \param *coap_header_ptr Pointer to the CoAP message header to be sent
Yogesh Pande 4:5d91b0f5038c 1025 * \param *dst_addr_ptr Pointer to the address structure that contains destination address information
Yogesh Pande 4:5d91b0f5038c 1026 * \param message_description Message description to be stored to list for waiting response
Yogesh Pande 4:5d91b0f5038c 1027 *
Yogesh Pande 4:5d91b0f5038c 1028 * \return message id, 0 if failed
Yogesh Pande 4:5d91b0f5038c 1029 */
Yogesh Pande 4:5d91b0f5038c 1030 static uint16_t sn_nsdl_internal_coap_send(struct nsdl_s *handle, sn_coap_hdr_s *coap_header_ptr, sn_nsdl_addr_s *dst_addr_ptr, uint8_t message_description)
Yogesh Pande 4:5d91b0f5038c 1031 {
Yogesh Pande 4:5d91b0f5038c 1032 uint8_t *coap_message_ptr = NULL;
Yogesh Pande 4:5d91b0f5038c 1033 uint16_t coap_message_len = 0;
Yogesh Pande 4:5d91b0f5038c 1034
Yogesh Pande 4:5d91b0f5038c 1035 coap_message_len = sn_coap_builder_calc_needed_packet_data_size_2(coap_header_ptr, handle->grs->coap->sn_coap_block_data_size);
Yogesh Pande 4:5d91b0f5038c 1036
Yogesh Pande 4:5d91b0f5038c 1037 if (coap_message_len == 0) {
Yogesh Pande 4:5d91b0f5038c 1038 return 0;
Yogesh Pande 4:5d91b0f5038c 1039 }
Yogesh Pande 4:5d91b0f5038c 1040
Yogesh Pande 4:5d91b0f5038c 1041 coap_message_ptr = handle->sn_nsdl_alloc(coap_message_len);
Yogesh Pande 4:5d91b0f5038c 1042 if (!coap_message_ptr) {
Yogesh Pande 4:5d91b0f5038c 1043 return 0;
Yogesh Pande 4:5d91b0f5038c 1044 }
Yogesh Pande 4:5d91b0f5038c 1045
Yogesh Pande 4:5d91b0f5038c 1046 /* Build message */
Yogesh Pande 4:5d91b0f5038c 1047 if (sn_coap_protocol_build(handle->grs->coap, dst_addr_ptr, coap_message_ptr, coap_header_ptr, (void *)handle) < 0) {
Yogesh Pande 4:5d91b0f5038c 1048 handle->sn_nsdl_free(coap_message_ptr);
Yogesh Pande 4:5d91b0f5038c 1049 return 0;
Yogesh Pande 4:5d91b0f5038c 1050 }
Yogesh Pande 4:5d91b0f5038c 1051
Yogesh Pande 4:5d91b0f5038c 1052 /* If mesage type is confirmable, save it to list to wait for reply */
Yogesh Pande 4:5d91b0f5038c 1053 if (coap_header_ptr->msg_type == COAP_MSG_TYPE_CONFIRMABLE) {
Yogesh Pande 4:5d91b0f5038c 1054 if (message_description == SN_NSDL_MSG_REGISTER) {
Yogesh Pande 4:5d91b0f5038c 1055 handle->register_msg_id = coap_header_ptr->msg_id;
Yogesh Pande 4:5d91b0f5038c 1056 }
Yogesh Pande 4:5d91b0f5038c 1057 if (message_description == SN_NSDL_MSG_UNREGISTER) {
Yogesh Pande 4:5d91b0f5038c 1058 handle->unregister_msg_id = coap_header_ptr->msg_id;
Yogesh Pande 4:5d91b0f5038c 1059 }
Yogesh Pande 4:5d91b0f5038c 1060
Yogesh Pande 4:5d91b0f5038c 1061 }
Yogesh Pande 4:5d91b0f5038c 1062
Yogesh Pande 4:5d91b0f5038c 1063 handle->sn_nsdl_tx_callback(handle, SN_NSDL_PROTOCOL_COAP, coap_message_ptr, coap_message_len, dst_addr_ptr);
Yogesh Pande 4:5d91b0f5038c 1064 handle->sn_nsdl_free(coap_message_ptr);
Yogesh Pande 4:5d91b0f5038c 1065
Yogesh Pande 4:5d91b0f5038c 1066 return coap_header_ptr->msg_id;
Yogesh Pande 4:5d91b0f5038c 1067 }
Yogesh Pande 4:5d91b0f5038c 1068
Yogesh Pande 4:5d91b0f5038c 1069 /**
Yogesh Pande 4:5d91b0f5038c 1070 * \fn static void sn_nsdl_resolve_nsp_address(struct nsdl_s *handle)
Yogesh Pande 4:5d91b0f5038c 1071 *
Yogesh Pande 4:5d91b0f5038c 1072 * \brief Resolves NSP server address.
Yogesh Pande 4:5d91b0f5038c 1073 *
Yogesh Pande 4:5d91b0f5038c 1074 * \param *handle Pointer to nsdl-library handle
Yogesh Pande 4:5d91b0f5038c 1075 * \note Application must set NSP address with set_nsp_address
Yogesh Pande 4:5d91b0f5038c 1076 */
Yogesh Pande 4:5d91b0f5038c 1077 static void sn_nsdl_resolve_nsp_address(struct nsdl_s *handle)
Yogesh Pande 4:5d91b0f5038c 1078 {
Yogesh Pande 4:5d91b0f5038c 1079 /* Local variables */
Yogesh Pande 4:5d91b0f5038c 1080 if (!handle->nsp_address_ptr) {
Yogesh Pande 4:5d91b0f5038c 1081 //allocate only if previously not allocated
Yogesh Pande 4:5d91b0f5038c 1082 handle->nsp_address_ptr = handle->sn_nsdl_alloc(sizeof(sn_nsdl_oma_server_info_t));
Yogesh Pande 4:5d91b0f5038c 1083 }
Yogesh Pande 4:5d91b0f5038c 1084
Yogesh Pande 4:5d91b0f5038c 1085 if (handle->nsp_address_ptr) {
Yogesh Pande 4:5d91b0f5038c 1086 handle->nsp_address_ptr->omalw_server_security = SEC_NOT_SET;
Yogesh Pande 4:5d91b0f5038c 1087 handle->nsp_address_ptr->omalw_address_ptr = handle->sn_nsdl_alloc(sizeof(sn_nsdl_addr_s));
Yogesh Pande 4:5d91b0f5038c 1088 if (handle->nsp_address_ptr->omalw_address_ptr) {
Yogesh Pande 4:5d91b0f5038c 1089 memset(handle->nsp_address_ptr->omalw_address_ptr, 0, sizeof(sn_nsdl_addr_s));
Yogesh Pande 4:5d91b0f5038c 1090 handle->nsp_address_ptr->omalw_address_ptr->type = SN_NSDL_ADDRESS_TYPE_NONE;
Yogesh Pande 4:5d91b0f5038c 1091 }
Yogesh Pande 4:5d91b0f5038c 1092 }
Yogesh Pande 4:5d91b0f5038c 1093 }
Yogesh Pande 4:5d91b0f5038c 1094
Yogesh Pande 4:5d91b0f5038c 1095 static int8_t sn_nsdl_create_oma_device_object_base(struct nsdl_s *handle, sn_nsdl_oma_device_t *oma_device_setup_ptr, sn_nsdl_oma_binding_and_mode_t binding_and_mode)
Yogesh Pande 4:5d91b0f5038c 1096 {
Yogesh Pande 4:5d91b0f5038c 1097 #ifndef YOTTA_CFG_DISABLE_BOOTSTRAP_FEATURE
Yogesh Pande 4:5d91b0f5038c 1098 sn_nsdl_resource_info_s new_resource;
Yogesh Pande 4:5d91b0f5038c 1099 uint8_t object_path[8] = "3/0/11/0";
Yogesh Pande 4:5d91b0f5038c 1100 uint8_t resource_temp[3];
Yogesh Pande 4:5d91b0f5038c 1101 uint8_t x = 0;
Yogesh Pande 4:5d91b0f5038c 1102
Yogesh Pande 4:5d91b0f5038c 1103 if (!oma_device_setup_ptr) {
Yogesh Pande 4:5d91b0f5038c 1104 return SN_NSDL_FAILURE;
Yogesh Pande 4:5d91b0f5038c 1105 }
Yogesh Pande 4:5d91b0f5038c 1106
Yogesh Pande 4:5d91b0f5038c 1107 /* * Create resources. * */
Yogesh Pande 4:5d91b0f5038c 1108
Yogesh Pande 4:5d91b0f5038c 1109 /* These resources can be created multiple times. */
Yogesh Pande 4:5d91b0f5038c 1110 memset(&new_resource, 0, sizeof(sn_nsdl_resource_info_s));
Yogesh Pande 4:5d91b0f5038c 1111 new_resource.resource_parameters_ptr = handle->sn_nsdl_alloc(sizeof(sn_nsdl_resource_parameters_s));
Yogesh Pande 4:5d91b0f5038c 1112 if (!new_resource.resource_parameters_ptr) {
Yogesh Pande 4:5d91b0f5038c 1113 return SN_NSDL_FAILURE;
Yogesh Pande 4:5d91b0f5038c 1114 }
Yogesh Pande 4:5d91b0f5038c 1115
Yogesh Pande 4:5d91b0f5038c 1116 memset(new_resource.resource_parameters_ptr, 0, sizeof(sn_nsdl_resource_parameters_s));
Yogesh Pande 4:5d91b0f5038c 1117
Yogesh Pande 4:5d91b0f5038c 1118 /* Create error - resource */
Yogesh Pande 4:5d91b0f5038c 1119 new_resource.mode = SN_GRS_STATIC;
Yogesh Pande 4:5d91b0f5038c 1120 new_resource.access = SN_GRS_GET_ALLOWED;
Yogesh Pande 4:5d91b0f5038c 1121
Yogesh Pande 4:5d91b0f5038c 1122 new_resource.path = object_path;
Yogesh Pande 4:5d91b0f5038c 1123 new_resource.pathlen = 8;
Yogesh Pande 4:5d91b0f5038c 1124
Yogesh Pande 4:5d91b0f5038c 1125 sn_nsdl_itoa(resource_temp, (uint8_t)oma_device_setup_ptr->error_code);
Yogesh Pande 4:5d91b0f5038c 1126
Yogesh Pande 4:5d91b0f5038c 1127 new_resource.resource = resource_temp;
Yogesh Pande 4:5d91b0f5038c 1128 new_resource.resourcelen = 1;
Yogesh Pande 4:5d91b0f5038c 1129
Yogesh Pande 4:5d91b0f5038c 1130 if (sn_nsdl_create_resource(handle, &new_resource) != SN_NSDL_SUCCESS) {
Yogesh Pande 4:5d91b0f5038c 1131 handle->sn_nsdl_free(new_resource.resource_parameters_ptr);
Yogesh Pande 4:5d91b0f5038c 1132 return SN_NSDL_FAILURE;
Yogesh Pande 4:5d91b0f5038c 1133 }
Yogesh Pande 4:5d91b0f5038c 1134
Yogesh Pande 4:5d91b0f5038c 1135 /* These resources can be only once, during OMA bootstrap.. */
Yogesh Pande 4:5d91b0f5038c 1136 /* Create supported binding and modes */
Yogesh Pande 4:5d91b0f5038c 1137 object_path[5] = '6';
Yogesh Pande 4:5d91b0f5038c 1138 new_resource.path = object_path;
Yogesh Pande 4:5d91b0f5038c 1139 new_resource.pathlen = 6;
Yogesh Pande 4:5d91b0f5038c 1140
Yogesh Pande 4:5d91b0f5038c 1141 if (binding_and_mode & 0x01) {
Yogesh Pande 4:5d91b0f5038c 1142 resource_temp[x] = 'U';
Yogesh Pande 4:5d91b0f5038c 1143 x++;
Yogesh Pande 4:5d91b0f5038c 1144 if (binding_and_mode & 0x02) {
Yogesh Pande 4:5d91b0f5038c 1145 resource_temp[x] = 'Q';
Yogesh Pande 4:5d91b0f5038c 1146 x++;
Yogesh Pande 4:5d91b0f5038c 1147 }
Yogesh Pande 4:5d91b0f5038c 1148 }
Yogesh Pande 4:5d91b0f5038c 1149 if (binding_and_mode & 0x04) {
Yogesh Pande 4:5d91b0f5038c 1150 resource_temp[x] = 'S';
Yogesh Pande 4:5d91b0f5038c 1151 x++;
Yogesh Pande 4:5d91b0f5038c 1152 if ((binding_and_mode & 0x02) && !(binding_and_mode & 0x01)) {
Yogesh Pande 4:5d91b0f5038c 1153 resource_temp[x] = 'Q';
Yogesh Pande 4:5d91b0f5038c 1154 x++;
Yogesh Pande 4:5d91b0f5038c 1155 }
Yogesh Pande 4:5d91b0f5038c 1156 }
Yogesh Pande 4:5d91b0f5038c 1157
Yogesh Pande 4:5d91b0f5038c 1158 new_resource.resourcelen = x;
Yogesh Pande 4:5d91b0f5038c 1159
Yogesh Pande 4:5d91b0f5038c 1160 if (new_resource.resourcelen) {
Yogesh Pande 4:5d91b0f5038c 1161 new_resource.resource = resource_temp;
Yogesh Pande 4:5d91b0f5038c 1162 } else {
Yogesh Pande 4:5d91b0f5038c 1163 new_resource.resource = 0;
Yogesh Pande 4:5d91b0f5038c 1164 }
Yogesh Pande 4:5d91b0f5038c 1165
Yogesh Pande 4:5d91b0f5038c 1166
Yogesh Pande 4:5d91b0f5038c 1167 if (sn_nsdl_create_resource(handle, &new_resource) != SN_NSDL_SUCCESS) {
Yogesh Pande 4:5d91b0f5038c 1168 handle->sn_nsdl_free(new_resource.resource_parameters_ptr);
Yogesh Pande 4:5d91b0f5038c 1169 return SN_NSDL_FAILURE;
Yogesh Pande 4:5d91b0f5038c 1170 }
Yogesh Pande 4:5d91b0f5038c 1171
Yogesh Pande 4:5d91b0f5038c 1172
Yogesh Pande 4:5d91b0f5038c 1173 /* Create dynamic reboot object */
Yogesh Pande 4:5d91b0f5038c 1174 new_resource.mode = SN_GRS_DYNAMIC;
Yogesh Pande 4:5d91b0f5038c 1175
Yogesh Pande 4:5d91b0f5038c 1176 new_resource.access = SN_GRS_POST_ALLOWED;
Yogesh Pande 4:5d91b0f5038c 1177
Yogesh Pande 4:5d91b0f5038c 1178 object_path[4] = '4';
Yogesh Pande 4:5d91b0f5038c 1179
Yogesh Pande 4:5d91b0f5038c 1180 new_resource.path = object_path;
Yogesh Pande 4:5d91b0f5038c 1181 new_resource.pathlen = 5;
Yogesh Pande 4:5d91b0f5038c 1182
Yogesh Pande 4:5d91b0f5038c 1183 new_resource.resourcelen = 0;
Yogesh Pande 4:5d91b0f5038c 1184 new_resource.resource = 0;
Yogesh Pande 4:5d91b0f5038c 1185
Yogesh Pande 4:5d91b0f5038c 1186 new_resource.sn_grs_dyn_res_callback = oma_device_setup_ptr->sn_oma_device_boot_callback;
Yogesh Pande 4:5d91b0f5038c 1187
Yogesh Pande 4:5d91b0f5038c 1188 if (sn_nsdl_create_resource(handle, &new_resource) != SN_NSDL_SUCCESS) {
Yogesh Pande 4:5d91b0f5038c 1189 handle->sn_nsdl_free(new_resource.resource_parameters_ptr);
Yogesh Pande 4:5d91b0f5038c 1190 return SN_NSDL_FAILURE;
Yogesh Pande 4:5d91b0f5038c 1191 }
Yogesh Pande 4:5d91b0f5038c 1192
Yogesh Pande 4:5d91b0f5038c 1193 handle->sn_nsdl_free(new_resource.resource_parameters_ptr);
Yogesh Pande 4:5d91b0f5038c 1194 return SN_NSDL_SUCCESS;
Yogesh Pande 4:5d91b0f5038c 1195 #else
Yogesh Pande 4:5d91b0f5038c 1196 return SN_NSDL_FAILURE;
Yogesh Pande 4:5d91b0f5038c 1197 #endif //YOTTA_CFG_DISABLE_BOOTSTRAP_FEATURE
Yogesh Pande 4:5d91b0f5038c 1198 }
Yogesh Pande 4:5d91b0f5038c 1199
Yogesh Pande 4:5d91b0f5038c 1200 /**
Yogesh Pande 4:5d91b0f5038c 1201 * \fn int8_t sn_nsdl_build_registration_body(struct nsdl_s *handle, sn_coap_hdr_s *message_ptr, uint8_t updating_registeration)
Yogesh Pande 4:5d91b0f5038c 1202 *
Yogesh Pande 4:5d91b0f5038c 1203 * \brief To build GRS resources to registration message payload
Yogesh Pande 4:5d91b0f5038c 1204 * \param *handle Pointer to nsdl-library handle
Yogesh Pande 4:5d91b0f5038c 1205 * \param *message_ptr Pointer to CoAP message header
Yogesh Pande 4:5d91b0f5038c 1206 *
Yogesh Pande 4:5d91b0f5038c 1207 * \return SN_NSDL_SUCCESS = 0, Failed = -1
Yogesh Pande 4:5d91b0f5038c 1208 */
Yogesh Pande 4:5d91b0f5038c 1209 int8_t sn_nsdl_build_registration_body(struct nsdl_s *handle, sn_coap_hdr_s *message_ptr, uint8_t updating_registeration)
Yogesh Pande 4:5d91b0f5038c 1210 {
Yogesh Pande 4:5d91b0f5038c 1211 /* Local variables */
Yogesh Pande 4:5d91b0f5038c 1212 uint8_t *temp_ptr;
Yogesh Pande 4:5d91b0f5038c 1213 const sn_nsdl_resource_info_s *resource_temp_ptr;
Yogesh Pande 4:5d91b0f5038c 1214
Yogesh Pande 4:5d91b0f5038c 1215
Yogesh Pande 4:5d91b0f5038c 1216 /* Calculate needed memory and allocate */
Yogesh Pande 4:5d91b0f5038c 1217 message_ptr->payload_len = sn_nsdl_calculate_registration_body_size(handle, updating_registeration);
Yogesh Pande 4:5d91b0f5038c 1218
Yogesh Pande 4:5d91b0f5038c 1219 /* If no resources to be registered, return SN_NSDL_SUCCESS */
Yogesh Pande 4:5d91b0f5038c 1220 if (!message_ptr->payload_len) {
Yogesh Pande 4:5d91b0f5038c 1221 return SN_NSDL_SUCCESS;
Yogesh Pande 4:5d91b0f5038c 1222 }
Yogesh Pande 4:5d91b0f5038c 1223
Yogesh Pande 4:5d91b0f5038c 1224 message_ptr->payload_ptr = handle->sn_nsdl_alloc(message_ptr->payload_len);
Yogesh Pande 4:5d91b0f5038c 1225 if (!message_ptr->payload_ptr) {
Yogesh Pande 4:5d91b0f5038c 1226 return SN_NSDL_FAILURE;
Yogesh Pande 4:5d91b0f5038c 1227 }
Yogesh Pande 4:5d91b0f5038c 1228
Yogesh Pande 4:5d91b0f5038c 1229 /* Build message */
Yogesh Pande 4:5d91b0f5038c 1230 temp_ptr = message_ptr->payload_ptr;
Yogesh Pande 4:5d91b0f5038c 1231
Yogesh Pande 4:5d91b0f5038c 1232 resource_temp_ptr = sn_grs_get_first_resource(handle->grs);
Yogesh Pande 4:5d91b0f5038c 1233
Yogesh Pande 4:5d91b0f5038c 1234 /* Loop trough all resources */
Yogesh Pande 4:5d91b0f5038c 1235 while (resource_temp_ptr) {
Yogesh Pande 4:5d91b0f5038c 1236 /* if resource needs to be registered */
Yogesh Pande 4:5d91b0f5038c 1237 if (resource_temp_ptr->resource_parameters_ptr && resource_temp_ptr->publish_uri) {
Yogesh Pande 4:5d91b0f5038c 1238 if (updating_registeration && resource_temp_ptr->resource_parameters_ptr->registered == SN_NDSL_RESOURCE_REGISTERED) {
Yogesh Pande 4:5d91b0f5038c 1239 resource_temp_ptr = sn_grs_get_next_resource(handle->grs, resource_temp_ptr);
Yogesh Pande 4:5d91b0f5038c 1240 continue;
Yogesh Pande 4:5d91b0f5038c 1241 } else {
Yogesh Pande 4:5d91b0f5038c 1242 resource_temp_ptr->resource_parameters_ptr->registered = SN_NDSL_RESOURCE_REGISTERED;
Yogesh Pande 4:5d91b0f5038c 1243 }
Yogesh Pande 4:5d91b0f5038c 1244
Yogesh Pande 4:5d91b0f5038c 1245 /* If not first resource, add '.' to separator */
Yogesh Pande 4:5d91b0f5038c 1246 if (temp_ptr != message_ptr->payload_ptr) {
Yogesh Pande 4:5d91b0f5038c 1247 *temp_ptr++ = ',';
Yogesh Pande 4:5d91b0f5038c 1248 }
Yogesh Pande 4:5d91b0f5038c 1249
Yogesh Pande 4:5d91b0f5038c 1250 *temp_ptr++ = '<';
Yogesh Pande 4:5d91b0f5038c 1251 *temp_ptr++ = '/';
Yogesh Pande 4:5d91b0f5038c 1252 memcpy(temp_ptr, resource_temp_ptr->path, resource_temp_ptr->pathlen);
Yogesh Pande 4:5d91b0f5038c 1253 temp_ptr += resource_temp_ptr->pathlen;
Yogesh Pande 4:5d91b0f5038c 1254 *temp_ptr++ = '>';
Yogesh Pande 4:5d91b0f5038c 1255
Yogesh Pande 4:5d91b0f5038c 1256 /* Resource attributes */
Yogesh Pande 4:5d91b0f5038c 1257 if (resource_temp_ptr->resource_parameters_ptr->resource_type_len) {
Yogesh Pande 4:5d91b0f5038c 1258 *temp_ptr++ = ';';
Yogesh Pande 4:5d91b0f5038c 1259 memcpy(temp_ptr, resource_type_parameter, RT_PARAMETER_LEN);
Yogesh Pande 4:5d91b0f5038c 1260 temp_ptr += RT_PARAMETER_LEN;
Yogesh Pande 4:5d91b0f5038c 1261 *temp_ptr++ = '"';
Yogesh Pande 4:5d91b0f5038c 1262 memcpy(temp_ptr, resource_temp_ptr->resource_parameters_ptr->resource_type_ptr, resource_temp_ptr->resource_parameters_ptr->resource_type_len);
Yogesh Pande 4:5d91b0f5038c 1263 temp_ptr += resource_temp_ptr->resource_parameters_ptr->resource_type_len;
Yogesh Pande 4:5d91b0f5038c 1264 *temp_ptr++ = '"';
Yogesh Pande 4:5d91b0f5038c 1265 }
Yogesh Pande 4:5d91b0f5038c 1266
Yogesh Pande 4:5d91b0f5038c 1267 if (resource_temp_ptr->resource_parameters_ptr->interface_description_len) {
Yogesh Pande 4:5d91b0f5038c 1268 *temp_ptr++ = ';';
Yogesh Pande 4:5d91b0f5038c 1269 memcpy(temp_ptr, if_description_parameter, IF_PARAMETER_LEN);
Yogesh Pande 4:5d91b0f5038c 1270 temp_ptr += IF_PARAMETER_LEN;
Yogesh Pande 4:5d91b0f5038c 1271 *temp_ptr++ = '"';
Yogesh Pande 4:5d91b0f5038c 1272 memcpy(temp_ptr, resource_temp_ptr->resource_parameters_ptr->interface_description_ptr, resource_temp_ptr->resource_parameters_ptr->interface_description_len);
Yogesh Pande 4:5d91b0f5038c 1273 temp_ptr += resource_temp_ptr->resource_parameters_ptr->interface_description_len;
Yogesh Pande 4:5d91b0f5038c 1274 *temp_ptr++ = '"';
Yogesh Pande 4:5d91b0f5038c 1275 }
Yogesh Pande 4:5d91b0f5038c 1276
Yogesh Pande 4:5d91b0f5038c 1277 if (resource_temp_ptr->resource_parameters_ptr->coap_content_type != 0) {
Yogesh Pande 4:5d91b0f5038c 1278 *temp_ptr++ = ';';
Yogesh Pande 4:5d91b0f5038c 1279 memcpy(temp_ptr, coap_con_type_parameter, COAP_CON_PARAMETER_LEN);
Yogesh Pande 4:5d91b0f5038c 1280 temp_ptr += COAP_CON_PARAMETER_LEN;
Yogesh Pande 4:5d91b0f5038c 1281 *temp_ptr++ = '"';
Yogesh Pande 4:5d91b0f5038c 1282 temp_ptr = sn_nsdl_itoa(temp_ptr, resource_temp_ptr->resource_parameters_ptr->coap_content_type);
Yogesh Pande 4:5d91b0f5038c 1283 *temp_ptr++ = '"';
Yogesh Pande 4:5d91b0f5038c 1284 }
Yogesh Pande 4:5d91b0f5038c 1285
Yogesh Pande 4:5d91b0f5038c 1286 /* ;obs */
Yogesh Pande 4:5d91b0f5038c 1287 // This needs to be re-visited and may be need an API for maganging obs value for different server implementation
Yogesh Pande 4:5d91b0f5038c 1288 #ifndef YOTTA_CFG_DISABLE_OBS_FEATURE
Yogesh Pande 4:5d91b0f5038c 1289 if (resource_temp_ptr->resource_parameters_ptr->observable) {
Yogesh Pande 4:5d91b0f5038c 1290 *temp_ptr++ = ';';
Yogesh Pande 4:5d91b0f5038c 1291 memcpy(temp_ptr, obs_parameter, OBS_PARAMETER_LEN);
Yogesh Pande 4:5d91b0f5038c 1292 temp_ptr += OBS_PARAMETER_LEN;
Yogesh Pande 4:5d91b0f5038c 1293 }
Yogesh Pande 4:5d91b0f5038c 1294 #endif
Yogesh Pande 4:5d91b0f5038c 1295 /* ;aobs;id= */
Yogesh Pande 4:5d91b0f5038c 1296 /* todo: aosb not supported ATM */
Yogesh Pande 4:5d91b0f5038c 1297 /*
Yogesh Pande 4:5d91b0f5038c 1298 if((resource_temp_ptr->resource_parameters_ptr->auto_obs_len > 0 && resource_temp_ptr->resource_parameters_ptr->auto_obs_len <= 8) &&
Yogesh Pande 4:5d91b0f5038c 1299 resource_temp_ptr->resource_parameters_ptr->auto_obs_ptr)
Yogesh Pande 4:5d91b0f5038c 1300 {
Yogesh Pande 4:5d91b0f5038c 1301 uint8_t i = 0;
Yogesh Pande 4:5d91b0f5038c 1302
Yogesh Pande 4:5d91b0f5038c 1303 *temp_ptr++ = ';';
Yogesh Pande 4:5d91b0f5038c 1304 memcpy(temp_ptr, aobs_parameter, AOBS_PARAMETER_LEN);
Yogesh Pande 4:5d91b0f5038c 1305 temp_ptr += AOBS_PARAMETER_LEN;
Yogesh Pande 4:5d91b0f5038c 1306
Yogesh Pande 4:5d91b0f5038c 1307 while(i < resource_temp_ptr->resource_parameters_ptr->auto_obs_len)
Yogesh Pande 4:5d91b0f5038c 1308 {
Yogesh Pande 4:5d91b0f5038c 1309 temp_ptr = sn_nsdl_itoa(temp_ptr, *(resource_temp_ptr->resource_parameters_ptr->auto_obs_ptr + i));
Yogesh Pande 4:5d91b0f5038c 1310 i++;
Yogesh Pande 4:5d91b0f5038c 1311 }
Yogesh Pande 4:5d91b0f5038c 1312 }
Yogesh Pande 4:5d91b0f5038c 1313 */
Yogesh Pande 4:5d91b0f5038c 1314
Yogesh Pande 4:5d91b0f5038c 1315 }
Yogesh Pande 4:5d91b0f5038c 1316
Yogesh Pande 4:5d91b0f5038c 1317 resource_temp_ptr = sn_grs_get_next_resource(handle->grs, resource_temp_ptr);
Yogesh Pande 4:5d91b0f5038c 1318 }
Yogesh Pande 4:5d91b0f5038c 1319
Yogesh Pande 4:5d91b0f5038c 1320 return SN_NSDL_SUCCESS;
Yogesh Pande 4:5d91b0f5038c 1321 }
Yogesh Pande 4:5d91b0f5038c 1322
Yogesh Pande 4:5d91b0f5038c 1323 /**
Yogesh Pande 4:5d91b0f5038c 1324 * \fn static uint16_t sn_nsdl_calculate_registration_body_size(struct nsdl_s *handle, uint8_t updating_registeration)
Yogesh Pande 4:5d91b0f5038c 1325 *
Yogesh Pande 4:5d91b0f5038c 1326 *
Yogesh Pande 4:5d91b0f5038c 1327 * \brief Calculates registration message payload size
Yogesh Pande 4:5d91b0f5038c 1328 * \param *handle Pointer to nsdl-library handle
Yogesh Pande 4:5d91b0f5038c 1329 * \param *grs_resources_list_ptr Pointer to list of GRS resources
Yogesh Pande 4:5d91b0f5038c 1330 *
Yogesh Pande 4:5d91b0f5038c 1331 * \return Needed payload size
Yogesh Pande 4:5d91b0f5038c 1332 */
Yogesh Pande 4:5d91b0f5038c 1333 static uint16_t sn_nsdl_calculate_registration_body_size(struct nsdl_s *handle, uint8_t updating_registeration)
Yogesh Pande 4:5d91b0f5038c 1334 {
Yogesh Pande 4:5d91b0f5038c 1335 /* Local variables */
Yogesh Pande 4:5d91b0f5038c 1336 uint16_t return_value = 0;
Yogesh Pande 4:5d91b0f5038c 1337 const sn_nsdl_resource_info_s *resource_temp_ptr;
Yogesh Pande 4:5d91b0f5038c 1338
Yogesh Pande 4:5d91b0f5038c 1339 /* check pointer */
Yogesh Pande 4:5d91b0f5038c 1340
Yogesh Pande 4:5d91b0f5038c 1341 resource_temp_ptr = sn_grs_get_first_resource(handle->grs);
Yogesh Pande 4:5d91b0f5038c 1342
Yogesh Pande 4:5d91b0f5038c 1343 while (resource_temp_ptr) {
Yogesh Pande 4:5d91b0f5038c 1344 if (resource_temp_ptr->resource_parameters_ptr && resource_temp_ptr->publish_uri) {
Yogesh Pande 4:5d91b0f5038c 1345 if (updating_registeration && resource_temp_ptr->resource_parameters_ptr->registered == SN_NDSL_RESOURCE_REGISTERED) {
Yogesh Pande 4:5d91b0f5038c 1346 resource_temp_ptr = sn_grs_get_next_resource(handle->grs, resource_temp_ptr);
Yogesh Pande 4:5d91b0f5038c 1347 continue;
Yogesh Pande 4:5d91b0f5038c 1348 }
Yogesh Pande 4:5d91b0f5038c 1349
Yogesh Pande 4:5d91b0f5038c 1350 /* If not first resource, then '.' will be added */
Yogesh Pande 4:5d91b0f5038c 1351 if (return_value) {
Yogesh Pande 4:5d91b0f5038c 1352 return_value++;
Yogesh Pande 4:5d91b0f5038c 1353 }
Yogesh Pande 4:5d91b0f5038c 1354
Yogesh Pande 4:5d91b0f5038c 1355 /* Count length for the resource path </path> */
Yogesh Pande 4:5d91b0f5038c 1356 return_value += (3 + resource_temp_ptr->pathlen);
Yogesh Pande 4:5d91b0f5038c 1357
Yogesh Pande 4:5d91b0f5038c 1358 /* Count lengths of the attributes */
Yogesh Pande 4:5d91b0f5038c 1359
Yogesh Pande 4:5d91b0f5038c 1360 /* Resource type parameter */
Yogesh Pande 4:5d91b0f5038c 1361 if (resource_temp_ptr->resource_parameters_ptr->resource_type_len) {
Yogesh Pande 4:5d91b0f5038c 1362 /* ;rt="restype" */
Yogesh Pande 4:5d91b0f5038c 1363 return_value += (6 + resource_temp_ptr->resource_parameters_ptr->resource_type_len);
Yogesh Pande 4:5d91b0f5038c 1364 }
Yogesh Pande 4:5d91b0f5038c 1365
Yogesh Pande 4:5d91b0f5038c 1366 /* Interface description parameter */
Yogesh Pande 4:5d91b0f5038c 1367 if (resource_temp_ptr->resource_parameters_ptr->interface_description_len) {
Yogesh Pande 4:5d91b0f5038c 1368 /* ;if="iftype" */
Yogesh Pande 4:5d91b0f5038c 1369 return_value += (6 + resource_temp_ptr->resource_parameters_ptr->interface_description_len);
Yogesh Pande 4:5d91b0f5038c 1370 }
Yogesh Pande 4:5d91b0f5038c 1371
Yogesh Pande 4:5d91b0f5038c 1372 if (resource_temp_ptr->resource_parameters_ptr->coap_content_type != 0) {
Yogesh Pande 4:5d91b0f5038c 1373 /* ;if="content" */
Yogesh Pande 4:5d91b0f5038c 1374 return_value += 6; // all but not content
Yogesh Pande 4:5d91b0f5038c 1375 return_value += sn_nsdl_itoa_len(resource_temp_ptr->resource_parameters_ptr->coap_content_type);
Yogesh Pande 4:5d91b0f5038c 1376 }
Yogesh Pande 4:5d91b0f5038c 1377 #ifndef YOTTA_CFG_DISABLE_OBS_FEATURE
Yogesh Pande 4:5d91b0f5038c 1378 // This needs to be re-visited and may be need an API for maganging obs value for different server implementation
Yogesh Pande 4:5d91b0f5038c 1379 if (resource_temp_ptr->resource_parameters_ptr->observable) {
Yogesh Pande 4:5d91b0f5038c 1380 return_value += 4; // ;obs
Yogesh Pande 4:5d91b0f5038c 1381 }
Yogesh Pande 4:5d91b0f5038c 1382 #endif
Yogesh Pande 4:5d91b0f5038c 1383 /*todo: aobs not supported ATM */
Yogesh Pande 4:5d91b0f5038c 1384 /*
Yogesh Pande 4:5d91b0f5038c 1385 if((resource_temp_ptr->resource_parameters_ptr->auto_obs_len > 0 && resource_temp_ptr->resource_parameters_ptr->auto_obs_len <= 8) &&
Yogesh Pande 4:5d91b0f5038c 1386 resource_temp_ptr->resource_parameters_ptr->auto_obs_ptr)
Yogesh Pande 4:5d91b0f5038c 1387 {
Yogesh Pande 4:5d91b0f5038c 1388 uint8_t i = resource_temp_ptr->resource_parameters_ptr->auto_obs_len;
Yogesh Pande 4:5d91b0f5038c 1389 // ;aobs;id=
Yogesh Pande 4:5d91b0f5038c 1390 return_value += 9;
Yogesh Pande 4:5d91b0f5038c 1391 while(i--)
Yogesh Pande 4:5d91b0f5038c 1392 {
Yogesh Pande 4:5d91b0f5038c 1393 return_value += sn_nsdl_itoa_len(*(resource_temp_ptr->resource_parameters_ptr->auto_obs_ptr + i));
Yogesh Pande 4:5d91b0f5038c 1394 }
Yogesh Pande 4:5d91b0f5038c 1395 }
Yogesh Pande 4:5d91b0f5038c 1396 */
Yogesh Pande 4:5d91b0f5038c 1397
Yogesh Pande 4:5d91b0f5038c 1398 }
Yogesh Pande 4:5d91b0f5038c 1399
Yogesh Pande 4:5d91b0f5038c 1400 resource_temp_ptr = sn_grs_get_next_resource(handle->grs, resource_temp_ptr);
Yogesh Pande 4:5d91b0f5038c 1401
Yogesh Pande 4:5d91b0f5038c 1402 }
Yogesh Pande 4:5d91b0f5038c 1403
Yogesh Pande 4:5d91b0f5038c 1404 return return_value;
Yogesh Pande 4:5d91b0f5038c 1405 }
Yogesh Pande 4:5d91b0f5038c 1406
Yogesh Pande 4:5d91b0f5038c 1407 /**
Yogesh Pande 4:5d91b0f5038c 1408 * \fn static uint8_t sn_nsdl_calculate_uri_query_option_len(sn_nsdl_ep_parameters_s *endpoint_info_ptr, uint8_t msg_type)
Yogesh Pande 4:5d91b0f5038c 1409 *
Yogesh Pande 4:5d91b0f5038c 1410 *
Yogesh Pande 4:5d91b0f5038c 1411 * \brief Calculates needed uri query option length
Yogesh Pande 4:5d91b0f5038c 1412 *
Yogesh Pande 4:5d91b0f5038c 1413 * \param *endpoint_info_ptr Pointer to endpoint info structure
Yogesh Pande 4:5d91b0f5038c 1414 * \param msg_type Message type
Yogesh Pande 4:5d91b0f5038c 1415 *
Yogesh Pande 4:5d91b0f5038c 1416 * \return number of parameters in uri query
Yogesh Pande 4:5d91b0f5038c 1417 */
Yogesh Pande 4:5d91b0f5038c 1418 static uint8_t sn_nsdl_calculate_uri_query_option_len(sn_nsdl_ep_parameters_s *endpoint_info_ptr, uint8_t msg_type)
Yogesh Pande 4:5d91b0f5038c 1419 {
Yogesh Pande 4:5d91b0f5038c 1420 uint8_t return_value = 0;
Yogesh Pande 4:5d91b0f5038c 1421 uint8_t number_of_parameters = 0;
Yogesh Pande 4:5d91b0f5038c 1422
Yogesh Pande 4:5d91b0f5038c 1423
Yogesh Pande 4:5d91b0f5038c 1424 if ((endpoint_info_ptr->endpoint_name_len != 0) && (msg_type == SN_NSDL_EP_REGISTER_MESSAGE) && endpoint_info_ptr->endpoint_name_ptr != 0) {
Yogesh Pande 4:5d91b0f5038c 1425 return_value += endpoint_info_ptr->endpoint_name_len;
Yogesh Pande 4:5d91b0f5038c 1426 return_value += EP_NAME_PARAMETERS_LEN; //ep=
Yogesh Pande 4:5d91b0f5038c 1427 number_of_parameters++;
Yogesh Pande 4:5d91b0f5038c 1428 }
Yogesh Pande 4:5d91b0f5038c 1429
Yogesh Pande 4:5d91b0f5038c 1430 if ((endpoint_info_ptr->type_len != 0) && (msg_type == SN_NSDL_EP_REGISTER_MESSAGE) && (endpoint_info_ptr->type_ptr != 0)) {
Yogesh Pande 4:5d91b0f5038c 1431 return_value += endpoint_info_ptr->type_len;
Yogesh Pande 4:5d91b0f5038c 1432 return_value += ET_PARAMETER_LEN; //et=
Yogesh Pande 4:5d91b0f5038c 1433 number_of_parameters++;
Yogesh Pande 4:5d91b0f5038c 1434 }
Yogesh Pande 4:5d91b0f5038c 1435
Yogesh Pande 4:5d91b0f5038c 1436 if ((endpoint_info_ptr->lifetime_len != 0) && (endpoint_info_ptr->lifetime_ptr != 0)) {
Yogesh Pande 4:5d91b0f5038c 1437 return_value += endpoint_info_ptr->lifetime_len;
Yogesh Pande 4:5d91b0f5038c 1438 return_value += LT_PARAMETER_LEN; //lt=
Yogesh Pande 4:5d91b0f5038c 1439 number_of_parameters++;
Yogesh Pande 4:5d91b0f5038c 1440 }
Yogesh Pande 4:5d91b0f5038c 1441
Yogesh Pande 4:5d91b0f5038c 1442 if ((endpoint_info_ptr->domain_name_len != 0) && (msg_type == SN_NSDL_EP_REGISTER_MESSAGE) && (endpoint_info_ptr->domain_name_ptr != 0)) {
Yogesh Pande 4:5d91b0f5038c 1443 return_value += endpoint_info_ptr->domain_name_len;
Yogesh Pande 4:5d91b0f5038c 1444 return_value += DOMAIN_PARAMETER_LEN; //d=
Yogesh Pande 4:5d91b0f5038c 1445 number_of_parameters++;
Yogesh Pande 4:5d91b0f5038c 1446 }
Yogesh Pande 4:5d91b0f5038c 1447
Yogesh Pande 4:5d91b0f5038c 1448 if (((endpoint_info_ptr->binding_and_mode & 0x04) || (endpoint_info_ptr->binding_and_mode & 0x01)) && (msg_type == SN_NSDL_EP_REGISTER_MESSAGE)) {
Yogesh Pande 4:5d91b0f5038c 1449 return_value += BS_QUEUE_MODE_PARAMATER_LEN;
Yogesh Pande 4:5d91b0f5038c 1450
Yogesh Pande 4:5d91b0f5038c 1451 if (endpoint_info_ptr->binding_and_mode & 0x01) {
Yogesh Pande 4:5d91b0f5038c 1452 return_value++;
Yogesh Pande 4:5d91b0f5038c 1453 }
Yogesh Pande 4:5d91b0f5038c 1454 if (endpoint_info_ptr->binding_and_mode & 0x04) {
Yogesh Pande 4:5d91b0f5038c 1455 return_value++;
Yogesh Pande 4:5d91b0f5038c 1456 }
Yogesh Pande 4:5d91b0f5038c 1457 if ((endpoint_info_ptr->binding_and_mode & 0x02) && ((endpoint_info_ptr->binding_and_mode & 0x04) || (endpoint_info_ptr->binding_and_mode & 0x01))) {
Yogesh Pande 4:5d91b0f5038c 1458 return_value++;
Yogesh Pande 4:5d91b0f5038c 1459 }
Yogesh Pande 4:5d91b0f5038c 1460
Yogesh Pande 4:5d91b0f5038c 1461 number_of_parameters++;
Yogesh Pande 4:5d91b0f5038c 1462 }
Yogesh Pande 4:5d91b0f5038c 1463
Yogesh Pande 4:5d91b0f5038c 1464 if (number_of_parameters != 0) {
Yogesh Pande 4:5d91b0f5038c 1465 return_value += (number_of_parameters - 1);
Yogesh Pande 4:5d91b0f5038c 1466 }
Yogesh Pande 4:5d91b0f5038c 1467
Yogesh Pande 4:5d91b0f5038c 1468 return return_value;
Yogesh Pande 4:5d91b0f5038c 1469 }
Yogesh Pande 4:5d91b0f5038c 1470
Yogesh Pande 4:5d91b0f5038c 1471 /**
Yogesh Pande 4:5d91b0f5038c 1472 * \fn static int8_t sn_nsdl_fill_uri_query_options(struct nsdl_s *handle, sn_nsdl_ep_parameters_s *parameter_ptr, sn_coap_hdr_s *source_msg_ptr, uint8_t msg_type)
Yogesh Pande 4:5d91b0f5038c 1473 *
Yogesh Pande 4:5d91b0f5038c 1474 *
Yogesh Pande 4:5d91b0f5038c 1475 * \brief Fills uri-query options to message header struct
Yogesh Pande 4:5d91b0f5038c 1476 * \param *handle Pointer to nsdl-library handle
Yogesh Pande 4:5d91b0f5038c 1477 * \param *parameter_ptr Pointer to endpoint parameters struct
Yogesh Pande 4:5d91b0f5038c 1478 * \param *source_msg_ptr Pointer to CoAP header struct
Yogesh Pande 4:5d91b0f5038c 1479 * \param msg_type Message type
Yogesh Pande 4:5d91b0f5038c 1480 *
Yogesh Pande 4:5d91b0f5038c 1481 * \return SN_NSDL_SUCCESS = 0, Failed = -1
Yogesh Pande 4:5d91b0f5038c 1482 */
Yogesh Pande 4:5d91b0f5038c 1483 static int8_t sn_nsdl_fill_uri_query_options(struct nsdl_s *handle, sn_nsdl_ep_parameters_s *parameter_ptr, sn_coap_hdr_s *source_msg_ptr, uint8_t msg_type)
Yogesh Pande 4:5d91b0f5038c 1484 {
Yogesh Pande 4:5d91b0f5038c 1485 uint8_t *temp_ptr = NULL;
Yogesh Pande 4:5d91b0f5038c 1486 if( !validateParameters(parameter_ptr) ){
Yogesh Pande 4:5d91b0f5038c 1487 return SN_NSDL_FAILURE;
Yogesh Pande 4:5d91b0f5038c 1488 }
Yogesh Pande 4:5d91b0f5038c 1489 source_msg_ptr->options_list_ptr->uri_query_len = sn_nsdl_calculate_uri_query_option_len(parameter_ptr, msg_type);
Yogesh Pande 4:5d91b0f5038c 1490 if (source_msg_ptr->options_list_ptr->uri_query_len == 0) {
Yogesh Pande 4:5d91b0f5038c 1491 return 0;
Yogesh Pande 4:5d91b0f5038c 1492 }
Yogesh Pande 4:5d91b0f5038c 1493
Yogesh Pande 4:5d91b0f5038c 1494 source_msg_ptr->options_list_ptr->uri_query_ptr = handle->sn_nsdl_alloc(source_msg_ptr->options_list_ptr->uri_query_len);
Yogesh Pande 4:5d91b0f5038c 1495
Yogesh Pande 4:5d91b0f5038c 1496 if (source_msg_ptr->options_list_ptr->uri_query_ptr == NULL) {
Yogesh Pande 4:5d91b0f5038c 1497 return SN_NSDL_FAILURE;
Yogesh Pande 4:5d91b0f5038c 1498 }
Yogesh Pande 4:5d91b0f5038c 1499 memset(source_msg_ptr->options_list_ptr->uri_query_ptr,0,source_msg_ptr->options_list_ptr->uri_query_len);
Yogesh Pande 4:5d91b0f5038c 1500
Yogesh Pande 4:5d91b0f5038c 1501 temp_ptr = source_msg_ptr->options_list_ptr->uri_query_ptr;
Yogesh Pande 4:5d91b0f5038c 1502
Yogesh Pande 4:5d91b0f5038c 1503 /******************************************************/
Yogesh Pande 4:5d91b0f5038c 1504 /* If endpoint name is configured, fill needed fields */
Yogesh Pande 4:5d91b0f5038c 1505 /******************************************************/
Yogesh Pande 4:5d91b0f5038c 1506
Yogesh Pande 4:5d91b0f5038c 1507 if ((parameter_ptr->endpoint_name_len != 0) && (parameter_ptr->endpoint_name_ptr != 0) && (msg_type == SN_NSDL_EP_REGISTER_MESSAGE)) {
Yogesh Pande 4:5d91b0f5038c 1508 /* fill endpoint name, first ?ep=, then endpoint name */
Yogesh Pande 4:5d91b0f5038c 1509 memcpy(temp_ptr, ep_name_parameter_string, sizeof(ep_name_parameter_string));
Yogesh Pande 4:5d91b0f5038c 1510 temp_ptr += EP_NAME_PARAMETERS_LEN;
Yogesh Pande 4:5d91b0f5038c 1511 memcpy(temp_ptr, parameter_ptr->endpoint_name_ptr, parameter_ptr->endpoint_name_len);
Yogesh Pande 4:5d91b0f5038c 1512 temp_ptr += parameter_ptr->endpoint_name_len;
Yogesh Pande 4:5d91b0f5038c 1513 }
Yogesh Pande 4:5d91b0f5038c 1514
Yogesh Pande 4:5d91b0f5038c 1515 /******************************************************/
Yogesh Pande 4:5d91b0f5038c 1516 /* If endpoint type is configured, fill needed fields */
Yogesh Pande 4:5d91b0f5038c 1517 /******************************************************/
Yogesh Pande 4:5d91b0f5038c 1518
Yogesh Pande 4:5d91b0f5038c 1519 if ((parameter_ptr->type_len != 0) && (parameter_ptr->type_ptr != 0) && (msg_type == SN_NSDL_EP_REGISTER_MESSAGE)) {
Yogesh Pande 4:5d91b0f5038c 1520 if (temp_ptr != source_msg_ptr->options_list_ptr->uri_query_ptr) {
Yogesh Pande 4:5d91b0f5038c 1521 *temp_ptr++ = '&';
Yogesh Pande 4:5d91b0f5038c 1522 }
Yogesh Pande 4:5d91b0f5038c 1523
Yogesh Pande 4:5d91b0f5038c 1524 memcpy(temp_ptr, et_parameter, sizeof(et_parameter));
Yogesh Pande 4:5d91b0f5038c 1525 temp_ptr += ET_PARAMETER_LEN;
Yogesh Pande 4:5d91b0f5038c 1526 memcpy(temp_ptr, parameter_ptr->type_ptr, parameter_ptr->type_len);
Yogesh Pande 4:5d91b0f5038c 1527 temp_ptr += parameter_ptr->type_len;
Yogesh Pande 4:5d91b0f5038c 1528 }
Yogesh Pande 4:5d91b0f5038c 1529
Yogesh Pande 4:5d91b0f5038c 1530
Yogesh Pande 4:5d91b0f5038c 1531 /******************************************************/
Yogesh Pande 4:5d91b0f5038c 1532 /* If lifetime is configured, fill needed fields */
Yogesh Pande 4:5d91b0f5038c 1533 /******************************************************/
Yogesh Pande 4:5d91b0f5038c 1534
Yogesh Pande 4:5d91b0f5038c 1535 if ((parameter_ptr->lifetime_len != 0) && (parameter_ptr->lifetime_ptr != 0)) {
Yogesh Pande 4:5d91b0f5038c 1536 if (temp_ptr != source_msg_ptr->options_list_ptr->uri_query_ptr) {
Yogesh Pande 4:5d91b0f5038c 1537 *temp_ptr++ = '&';
Yogesh Pande 4:5d91b0f5038c 1538 }
Yogesh Pande 4:5d91b0f5038c 1539
Yogesh Pande 4:5d91b0f5038c 1540 memcpy(temp_ptr, ep_lifetime_parameter, sizeof(ep_lifetime_parameter));
Yogesh Pande 4:5d91b0f5038c 1541 temp_ptr += LT_PARAMETER_LEN;
Yogesh Pande 4:5d91b0f5038c 1542 memcpy(temp_ptr, parameter_ptr->lifetime_ptr, parameter_ptr->lifetime_len);
Yogesh Pande 4:5d91b0f5038c 1543 temp_ptr += parameter_ptr->lifetime_len;
Yogesh Pande 4:5d91b0f5038c 1544 }
Yogesh Pande 4:5d91b0f5038c 1545
Yogesh Pande 4:5d91b0f5038c 1546 /******************************************************/
Yogesh Pande 4:5d91b0f5038c 1547 /* If domain is configured, fill needed fields */
Yogesh Pande 4:5d91b0f5038c 1548 /******************************************************/
Yogesh Pande 4:5d91b0f5038c 1549
Yogesh Pande 4:5d91b0f5038c 1550 if ((parameter_ptr->domain_name_len != 0) && (parameter_ptr->domain_name_ptr != 0) && (msg_type == SN_NSDL_EP_REGISTER_MESSAGE)) {
Yogesh Pande 4:5d91b0f5038c 1551 if (temp_ptr != source_msg_ptr->options_list_ptr->uri_query_ptr) {
Yogesh Pande 4:5d91b0f5038c 1552 *temp_ptr++ = '&';
Yogesh Pande 4:5d91b0f5038c 1553 }
Yogesh Pande 4:5d91b0f5038c 1554
Yogesh Pande 4:5d91b0f5038c 1555 memcpy(temp_ptr, ep_domain_parameter, sizeof(ep_domain_parameter));
Yogesh Pande 4:5d91b0f5038c 1556 temp_ptr += DOMAIN_PARAMETER_LEN;
Yogesh Pande 4:5d91b0f5038c 1557 memcpy(temp_ptr, parameter_ptr->domain_name_ptr, parameter_ptr->domain_name_len);
Yogesh Pande 4:5d91b0f5038c 1558 temp_ptr += parameter_ptr->domain_name_len;
Yogesh Pande 4:5d91b0f5038c 1559 }
Yogesh Pande 4:5d91b0f5038c 1560
Yogesh Pande 4:5d91b0f5038c 1561 /******************************************************/
Yogesh Pande 4:5d91b0f5038c 1562 /* If queue-mode is configured, fill needed fields */
Yogesh Pande 4:5d91b0f5038c 1563 /******************************************************/
Yogesh Pande 4:5d91b0f5038c 1564
Yogesh Pande 4:5d91b0f5038c 1565 if (((parameter_ptr->binding_and_mode & 0x01) || (parameter_ptr->binding_and_mode & 0x04)) && (msg_type == SN_NSDL_EP_REGISTER_MESSAGE)) {
Yogesh Pande 4:5d91b0f5038c 1566 if (temp_ptr != source_msg_ptr->options_list_ptr->uri_query_ptr) {
Yogesh Pande 4:5d91b0f5038c 1567 *temp_ptr++ = '&';
Yogesh Pande 4:5d91b0f5038c 1568 }
Yogesh Pande 4:5d91b0f5038c 1569
Yogesh Pande 4:5d91b0f5038c 1570 memcpy(temp_ptr, bs_queue_mode, sizeof(bs_queue_mode));
Yogesh Pande 4:5d91b0f5038c 1571 temp_ptr += BS_QUEUE_MODE_PARAMATER_LEN;
Yogesh Pande 4:5d91b0f5038c 1572
Yogesh Pande 4:5d91b0f5038c 1573 if (parameter_ptr->binding_and_mode & 0x01) {
Yogesh Pande 4:5d91b0f5038c 1574 *temp_ptr++ = 'U';
Yogesh Pande 4:5d91b0f5038c 1575 if (parameter_ptr->binding_and_mode & 0x02) {
Yogesh Pande 4:5d91b0f5038c 1576 *temp_ptr++ = 'Q';
Yogesh Pande 4:5d91b0f5038c 1577 }
Yogesh Pande 4:5d91b0f5038c 1578 }
Yogesh Pande 4:5d91b0f5038c 1579
Yogesh Pande 4:5d91b0f5038c 1580 if (parameter_ptr->binding_and_mode & 0x04) {
Yogesh Pande 4:5d91b0f5038c 1581 *temp_ptr++ = 'S';
Yogesh Pande 4:5d91b0f5038c 1582 if ((parameter_ptr->binding_and_mode & 0x02) && !(parameter_ptr->binding_and_mode & 0x01)) {
Yogesh Pande 4:5d91b0f5038c 1583 *temp_ptr++ = 'Q';
Yogesh Pande 4:5d91b0f5038c 1584 }
Yogesh Pande 4:5d91b0f5038c 1585 }
Yogesh Pande 4:5d91b0f5038c 1586 }
Yogesh Pande 4:5d91b0f5038c 1587
Yogesh Pande 4:5d91b0f5038c 1588 return SN_NSDL_SUCCESS;
Yogesh Pande 4:5d91b0f5038c 1589 }
Yogesh Pande 4:5d91b0f5038c 1590
Yogesh Pande 4:5d91b0f5038c 1591 static bool validateParameters(sn_nsdl_ep_parameters_s *parameter_ptr)
Yogesh Pande 4:5d91b0f5038c 1592 {
Yogesh Pande 4:5d91b0f5038c 1593 if( !validate( parameter_ptr->domain_name_ptr, parameter_ptr->domain_name_len, '&' ) ){
Yogesh Pande 4:5d91b0f5038c 1594 return false;
Yogesh Pande 4:5d91b0f5038c 1595 }
Yogesh Pande 4:5d91b0f5038c 1596
Yogesh Pande 4:5d91b0f5038c 1597 if( !validate( parameter_ptr->endpoint_name_ptr, parameter_ptr->endpoint_name_len, '&' ) ){
Yogesh Pande 4:5d91b0f5038c 1598 return false;
Yogesh Pande 4:5d91b0f5038c 1599 }
Yogesh Pande 4:5d91b0f5038c 1600
Yogesh Pande 4:5d91b0f5038c 1601 if( !validate( parameter_ptr->lifetime_ptr, parameter_ptr->lifetime_len, '&' ) ){
Yogesh Pande 4:5d91b0f5038c 1602 return false;
Yogesh Pande 4:5d91b0f5038c 1603 }
Yogesh Pande 4:5d91b0f5038c 1604
Yogesh Pande 4:5d91b0f5038c 1605 if( !validate( parameter_ptr->type_ptr, parameter_ptr->type_len, '&' ) ){
Yogesh Pande 4:5d91b0f5038c 1606 return false;
Yogesh Pande 4:5d91b0f5038c 1607 }
Yogesh Pande 4:5d91b0f5038c 1608 return true;
Yogesh Pande 4:5d91b0f5038c 1609 }
Yogesh Pande 4:5d91b0f5038c 1610
Yogesh Pande 4:5d91b0f5038c 1611 static bool validate(uint8_t* ptr, uint32_t len, char illegalChar)
Yogesh Pande 4:5d91b0f5038c 1612 {
Yogesh Pande 4:5d91b0f5038c 1613 if( ptr ){
Yogesh Pande 4:5d91b0f5038c 1614 for( uint32_t i=0; i < len; i++ ){
Yogesh Pande 4:5d91b0f5038c 1615 if( ptr[i] == illegalChar ){
Yogesh Pande 4:5d91b0f5038c 1616 return false;
Yogesh Pande 4:5d91b0f5038c 1617 }
Yogesh Pande 4:5d91b0f5038c 1618 }
Yogesh Pande 4:5d91b0f5038c 1619 }
Yogesh Pande 4:5d91b0f5038c 1620 return true;
Yogesh Pande 4:5d91b0f5038c 1621 }
Yogesh Pande 4:5d91b0f5038c 1622
Yogesh Pande 4:5d91b0f5038c 1623 /**
Yogesh Pande 4:5d91b0f5038c 1624 * \fn static int8_t sn_nsdl_local_rx_function(struct nsdl_s *handle, sn_coap_hdr_s *coap_packet_ptr, sn_nsdl_addr_s *address_ptr)
Yogesh Pande 4:5d91b0f5038c 1625 *
Yogesh Pande 4:5d91b0f5038c 1626 * \brief If received message is reply for the message that NSDL has been sent, it is processed here. Else, packet will be sent to application.
Yogesh Pande 4:5d91b0f5038c 1627 * \param *handle Pointer to nsdl-library handle
Yogesh Pande 4:5d91b0f5038c 1628 * \param *coap_packet_ptr Pointer to received CoAP packet
Yogesh Pande 4:5d91b0f5038c 1629 * \param *address_ptr Pointer to source address struct
Yogesh Pande 4:5d91b0f5038c 1630 *
Yogesh Pande 4:5d91b0f5038c 1631 * \return SN_NSDL_SUCCESS = 0, Failed = -1
Yogesh Pande 4:5d91b0f5038c 1632 */
Yogesh Pande 4:5d91b0f5038c 1633 static int8_t sn_nsdl_local_rx_function(struct nsdl_s *handle, sn_coap_hdr_s *coap_packet_ptr, sn_nsdl_addr_s *address_ptr)
Yogesh Pande 4:5d91b0f5038c 1634 {
Yogesh Pande 4:5d91b0f5038c 1635 if ((coap_packet_ptr == 0) || (address_ptr == 0)) {
Yogesh Pande 4:5d91b0f5038c 1636 return -1;
Yogesh Pande 4:5d91b0f5038c 1637 }
Yogesh Pande 4:5d91b0f5038c 1638
Yogesh Pande 4:5d91b0f5038c 1639 if (coap_packet_ptr->msg_id == handle->register_msg_id) {
Yogesh Pande 4:5d91b0f5038c 1640 if (coap_packet_ptr->msg_code == COAP_MSG_CODE_RESPONSE_CREATED) {
Yogesh Pande 4:5d91b0f5038c 1641 handle->sn_nsdl_endpoint_registered = SN_NSDL_ENDPOINT_IS_REGISTERED;
Yogesh Pande 4:5d91b0f5038c 1642 sn_grs_mark_resources_as_registered(handle);
Yogesh Pande 4:5d91b0f5038c 1643 if (sn_nsdl_resolve_ep_information(handle, coap_packet_ptr) != SN_NSDL_SUCCESS) {
Yogesh Pande 4:5d91b0f5038c 1644 return SN_NSDL_FAILURE;
Yogesh Pande 4:5d91b0f5038c 1645 }
Yogesh Pande 4:5d91b0f5038c 1646
Yogesh Pande 4:5d91b0f5038c 1647 handle->register_msg_id = 0;
Yogesh Pande 4:5d91b0f5038c 1648 }
Yogesh Pande 4:5d91b0f5038c 1649 }
Yogesh Pande 4:5d91b0f5038c 1650
Yogesh Pande 4:5d91b0f5038c 1651 if (coap_packet_ptr->msg_id == handle->unregister_msg_id) {
Yogesh Pande 4:5d91b0f5038c 1652 if (coap_packet_ptr->msg_code == COAP_MSG_CODE_RESPONSE_DELETED) {
Yogesh Pande 4:5d91b0f5038c 1653 if (handle->ep_information_ptr->endpoint_name_ptr) {
Yogesh Pande 4:5d91b0f5038c 1654 handle->sn_nsdl_free(handle->ep_information_ptr->endpoint_name_ptr);
Yogesh Pande 4:5d91b0f5038c 1655 handle->ep_information_ptr->endpoint_name_ptr = 0;
Yogesh Pande 4:5d91b0f5038c 1656 handle->ep_information_ptr->endpoint_name_len = 0;
Yogesh Pande 4:5d91b0f5038c 1657 }
Yogesh Pande 4:5d91b0f5038c 1658 if (handle->ep_information_ptr->domain_name_ptr) {
Yogesh Pande 4:5d91b0f5038c 1659 handle->sn_nsdl_free(handle->ep_information_ptr->domain_name_ptr);
Yogesh Pande 4:5d91b0f5038c 1660 handle->ep_information_ptr->domain_name_ptr = 0;
Yogesh Pande 4:5d91b0f5038c 1661 handle->ep_information_ptr->domain_name_len = 0;
Yogesh Pande 4:5d91b0f5038c 1662 }
Yogesh Pande 4:5d91b0f5038c 1663
Yogesh Pande 4:5d91b0f5038c 1664 handle->unregister_msg_id = 0;
Yogesh Pande 4:5d91b0f5038c 1665 }
Yogesh Pande 4:5d91b0f5038c 1666 }
Yogesh Pande 4:5d91b0f5038c 1667
Yogesh Pande 4:5d91b0f5038c 1668 /* No messages to wait for, or message was not response to our request */
Yogesh Pande 4:5d91b0f5038c 1669 return handle->sn_nsdl_rx_callback(handle, coap_packet_ptr, address_ptr);
Yogesh Pande 4:5d91b0f5038c 1670 }
Yogesh Pande 4:5d91b0f5038c 1671
Yogesh Pande 4:5d91b0f5038c 1672 /**
Yogesh Pande 4:5d91b0f5038c 1673 * \fn static int8_t sn_nsdl_resolve_ep_information(struct nsdl_s *handle, sn_coap_hdr_s *coap_packet_ptr)
Yogesh Pande 4:5d91b0f5038c 1674 *
Yogesh Pande 4:5d91b0f5038c 1675 *
Yogesh Pande 4:5d91b0f5038c 1676 * \brief Resolves endpoint information from received CoAP message
Yogesh Pande 4:5d91b0f5038c 1677 * \param *handle Pointer to nsdl-library handle
Yogesh Pande 4:5d91b0f5038c 1678 * \param *coap_packet_ptr Pointer to received CoAP message
Yogesh Pande 4:5d91b0f5038c 1679 *
Yogesh Pande 4:5d91b0f5038c 1680 * \return SN_NSDL_SUCCESS = 0, Failed = -1
Yogesh Pande 4:5d91b0f5038c 1681 */
Yogesh Pande 4:5d91b0f5038c 1682 static int8_t sn_nsdl_resolve_ep_information(struct nsdl_s *handle, sn_coap_hdr_s *coap_packet_ptr)
Yogesh Pande 4:5d91b0f5038c 1683 {
Yogesh Pande 4:5d91b0f5038c 1684 uint8_t *temp_ptr;
Yogesh Pande 4:5d91b0f5038c 1685 uint8_t parameter_count = 0;
Yogesh Pande 4:5d91b0f5038c 1686 uint16_t parameter_len = 0;
Yogesh Pande 4:5d91b0f5038c 1687
Yogesh Pande 4:5d91b0f5038c 1688 if (!coap_packet_ptr || !coap_packet_ptr->options_list_ptr ||
Yogesh Pande 4:5d91b0f5038c 1689 !coap_packet_ptr->options_list_ptr->location_path_ptr) {
Yogesh Pande 4:5d91b0f5038c 1690 return SN_NSDL_FAILURE;
Yogesh Pande 4:5d91b0f5038c 1691 }
Yogesh Pande 4:5d91b0f5038c 1692
Yogesh Pande 4:5d91b0f5038c 1693 temp_ptr = coap_packet_ptr->options_list_ptr->location_path_ptr;
Yogesh Pande 4:5d91b0f5038c 1694
Yogesh Pande 4:5d91b0f5038c 1695 while (temp_ptr <= (coap_packet_ptr->options_list_ptr->location_path_ptr + coap_packet_ptr->options_list_ptr->location_path_len)) {
Yogesh Pande 4:5d91b0f5038c 1696
Yogesh Pande 4:5d91b0f5038c 1697 if ((temp_ptr == (coap_packet_ptr->options_list_ptr->location_path_ptr + coap_packet_ptr->options_list_ptr->location_path_len)) || (*temp_ptr == '/')) {
Yogesh Pande 4:5d91b0f5038c 1698
Yogesh Pande 4:5d91b0f5038c 1699 parameter_count++;
Yogesh Pande 4:5d91b0f5038c 1700 if (parameter_count == 2) {
Yogesh Pande 4:5d91b0f5038c 1701 if (!handle->ep_information_ptr->domain_name_ptr) {
Yogesh Pande 4:5d91b0f5038c 1702 handle->ep_information_ptr->domain_name_len = parameter_len - 1;
Yogesh Pande 4:5d91b0f5038c 1703 handle->ep_information_ptr->domain_name_ptr = handle->sn_nsdl_alloc(handle->ep_information_ptr->domain_name_len);
Yogesh Pande 4:5d91b0f5038c 1704 if (!handle->ep_information_ptr->domain_name_ptr) {
Yogesh Pande 4:5d91b0f5038c 1705 return SN_NSDL_FAILURE;
Yogesh Pande 4:5d91b0f5038c 1706 }
Yogesh Pande 4:5d91b0f5038c 1707 memcpy(handle->ep_information_ptr->domain_name_ptr, temp_ptr - handle->ep_information_ptr->domain_name_len, handle->ep_information_ptr->domain_name_len);
Yogesh Pande 4:5d91b0f5038c 1708 }
Yogesh Pande 4:5d91b0f5038c 1709
Yogesh Pande 4:5d91b0f5038c 1710 }
Yogesh Pande 4:5d91b0f5038c 1711 if (parameter_count == 3) {
Yogesh Pande 4:5d91b0f5038c 1712 if (!handle->ep_information_ptr->endpoint_name_ptr) {
Yogesh Pande 4:5d91b0f5038c 1713 handle->ep_information_ptr->endpoint_name_len = parameter_len - 1;
Yogesh Pande 4:5d91b0f5038c 1714 handle->ep_information_ptr->endpoint_name_ptr = handle->sn_nsdl_alloc(handle->ep_information_ptr->endpoint_name_len);
Yogesh Pande 4:5d91b0f5038c 1715 if (!handle->ep_information_ptr->endpoint_name_ptr) {
Yogesh Pande 4:5d91b0f5038c 1716 if (handle->ep_information_ptr->domain_name_ptr) {
Yogesh Pande 4:5d91b0f5038c 1717 handle->sn_nsdl_free(handle->ep_information_ptr->domain_name_ptr);
Yogesh Pande 4:5d91b0f5038c 1718 handle->ep_information_ptr->domain_name_ptr = NULL;
Yogesh Pande 4:5d91b0f5038c 1719 handle->ep_information_ptr->domain_name_len = 0;
Yogesh Pande 4:5d91b0f5038c 1720 }
Yogesh Pande 4:5d91b0f5038c 1721
Yogesh Pande 4:5d91b0f5038c 1722 return SN_NSDL_FAILURE;
Yogesh Pande 4:5d91b0f5038c 1723
Yogesh Pande 4:5d91b0f5038c 1724 }
Yogesh Pande 4:5d91b0f5038c 1725 memcpy(handle->ep_information_ptr->endpoint_name_ptr, temp_ptr - handle->ep_information_ptr->endpoint_name_len, handle->ep_information_ptr->endpoint_name_len);
Yogesh Pande 4:5d91b0f5038c 1726 }
Yogesh Pande 4:5d91b0f5038c 1727 }
Yogesh Pande 4:5d91b0f5038c 1728 parameter_len = 0;
Yogesh Pande 4:5d91b0f5038c 1729 }
Yogesh Pande 4:5d91b0f5038c 1730 parameter_len++;
Yogesh Pande 4:5d91b0f5038c 1731 temp_ptr++;
Yogesh Pande 4:5d91b0f5038c 1732 }
Yogesh Pande 4:5d91b0f5038c 1733
Yogesh Pande 4:5d91b0f5038c 1734
Yogesh Pande 4:5d91b0f5038c 1735 return SN_NSDL_SUCCESS;
Yogesh Pande 4:5d91b0f5038c 1736 }
Yogesh Pande 4:5d91b0f5038c 1737
Yogesh Pande 4:5d91b0f5038c 1738 int8_t set_NSP_address(struct nsdl_s *handle, uint8_t *NSP_address, uint16_t port, sn_nsdl_addr_type_e address_type)
Yogesh Pande 4:5d91b0f5038c 1739 {
Yogesh Pande 4:5d91b0f5038c 1740
Yogesh Pande 4:5d91b0f5038c 1741 /* Check parameters and source pointers */
Yogesh Pande 4:5d91b0f5038c 1742 if (!handle || !handle->nsp_address_ptr || !handle->nsp_address_ptr->omalw_address_ptr || !NSP_address) {
Yogesh Pande 4:5d91b0f5038c 1743 return SN_NSDL_FAILURE;
Yogesh Pande 4:5d91b0f5038c 1744 }
Yogesh Pande 4:5d91b0f5038c 1745
Yogesh Pande 4:5d91b0f5038c 1746 handle->nsp_address_ptr->omalw_address_ptr->type = address_type;
Yogesh Pande 4:5d91b0f5038c 1747 handle->nsp_address_ptr->omalw_server_security = SEC_NOT_SET;
Yogesh Pande 4:5d91b0f5038c 1748
Yogesh Pande 4:5d91b0f5038c 1749 if (address_type == SN_NSDL_ADDRESS_TYPE_IPV4) {
Yogesh Pande 4:5d91b0f5038c 1750 if (handle->nsp_address_ptr->omalw_address_ptr->addr_ptr) {
Yogesh Pande 4:5d91b0f5038c 1751 handle->sn_nsdl_free(handle->nsp_address_ptr->omalw_address_ptr->addr_ptr);
Yogesh Pande 4:5d91b0f5038c 1752 }
Yogesh Pande 4:5d91b0f5038c 1753
Yogesh Pande 4:5d91b0f5038c 1754 handle->nsp_address_ptr->omalw_address_ptr->addr_len = 4;
Yogesh Pande 4:5d91b0f5038c 1755
Yogesh Pande 4:5d91b0f5038c 1756 handle->nsp_address_ptr->omalw_address_ptr->addr_ptr = handle->sn_nsdl_alloc(handle->nsp_address_ptr->omalw_address_ptr->addr_len);
Yogesh Pande 4:5d91b0f5038c 1757 if (!handle->nsp_address_ptr->omalw_address_ptr->addr_ptr) {
Yogesh Pande 4:5d91b0f5038c 1758 return SN_NSDL_FAILURE;
Yogesh Pande 4:5d91b0f5038c 1759 }
Yogesh Pande 4:5d91b0f5038c 1760
Yogesh Pande 4:5d91b0f5038c 1761 memcpy(handle->nsp_address_ptr->omalw_address_ptr->addr_ptr, NSP_address, handle->nsp_address_ptr->omalw_address_ptr->addr_len);
Yogesh Pande 4:5d91b0f5038c 1762 handle->nsp_address_ptr->omalw_address_ptr->port = port;
Yogesh Pande 4:5d91b0f5038c 1763 }
Yogesh Pande 4:5d91b0f5038c 1764
Yogesh Pande 4:5d91b0f5038c 1765 else if (address_type == SN_NSDL_ADDRESS_TYPE_IPV6) {
Yogesh Pande 4:5d91b0f5038c 1766 if (handle->nsp_address_ptr->omalw_address_ptr->addr_ptr) {
Yogesh Pande 4:5d91b0f5038c 1767 handle->sn_nsdl_free(handle->nsp_address_ptr->omalw_address_ptr->addr_ptr);
Yogesh Pande 4:5d91b0f5038c 1768 }
Yogesh Pande 4:5d91b0f5038c 1769
Yogesh Pande 4:5d91b0f5038c 1770 handle->nsp_address_ptr->omalw_address_ptr->addr_len = 16;
Yogesh Pande 4:5d91b0f5038c 1771
Yogesh Pande 4:5d91b0f5038c 1772 handle->nsp_address_ptr->omalw_address_ptr->addr_ptr = handle->sn_nsdl_alloc(handle->nsp_address_ptr->omalw_address_ptr->addr_len);
Yogesh Pande 4:5d91b0f5038c 1773 if (!handle->nsp_address_ptr->omalw_address_ptr->addr_ptr) {
Yogesh Pande 4:5d91b0f5038c 1774 return SN_NSDL_FAILURE;
Yogesh Pande 4:5d91b0f5038c 1775 }
Yogesh Pande 4:5d91b0f5038c 1776
Yogesh Pande 4:5d91b0f5038c 1777 memcpy(handle->nsp_address_ptr->omalw_address_ptr->addr_ptr, NSP_address, handle->nsp_address_ptr->omalw_address_ptr->addr_len);
Yogesh Pande 4:5d91b0f5038c 1778 handle->nsp_address_ptr->omalw_address_ptr->port = port;
Yogesh Pande 4:5d91b0f5038c 1779 }
Yogesh Pande 4:5d91b0f5038c 1780 return SN_NSDL_SUCCESS;
Yogesh Pande 4:5d91b0f5038c 1781 }
Yogesh Pande 4:5d91b0f5038c 1782
Yogesh Pande 4:5d91b0f5038c 1783
Yogesh Pande 4:5d91b0f5038c 1784 static uint8_t sn_nsdl_itoa_len(uint8_t value)
Yogesh Pande 4:5d91b0f5038c 1785 {
Yogesh Pande 4:5d91b0f5038c 1786 uint8_t i = 0;
Yogesh Pande 4:5d91b0f5038c 1787
Yogesh Pande 4:5d91b0f5038c 1788 do {
Yogesh Pande 4:5d91b0f5038c 1789 i++;
Yogesh Pande 4:5d91b0f5038c 1790 } while ((value /= 10) > 0);
Yogesh Pande 4:5d91b0f5038c 1791
Yogesh Pande 4:5d91b0f5038c 1792 return i;
Yogesh Pande 4:5d91b0f5038c 1793 }
Yogesh Pande 4:5d91b0f5038c 1794
Yogesh Pande 4:5d91b0f5038c 1795 static uint8_t *sn_nsdl_itoa(uint8_t *ptr, uint8_t value)
Yogesh Pande 4:5d91b0f5038c 1796 {
Yogesh Pande 4:5d91b0f5038c 1797
Yogesh Pande 4:5d91b0f5038c 1798 uint8_t start = 0;
Yogesh Pande 4:5d91b0f5038c 1799 uint8_t end = 0;
Yogesh Pande 4:5d91b0f5038c 1800 uint8_t i;
Yogesh Pande 4:5d91b0f5038c 1801
Yogesh Pande 4:5d91b0f5038c 1802 i = 0;
Yogesh Pande 4:5d91b0f5038c 1803
Yogesh Pande 4:5d91b0f5038c 1804 /* ITOA */
Yogesh Pande 4:5d91b0f5038c 1805 do {
Yogesh Pande 4:5d91b0f5038c 1806 ptr[i++] = (value % 10) + '0';
Yogesh Pande 4:5d91b0f5038c 1807 } while ((value /= 10) > 0);
Yogesh Pande 4:5d91b0f5038c 1808
Yogesh Pande 4:5d91b0f5038c 1809 end = i - 1;
Yogesh Pande 4:5d91b0f5038c 1810
Yogesh Pande 4:5d91b0f5038c 1811 /* reverse (part of ITOA) */
Yogesh Pande 4:5d91b0f5038c 1812 while (start < end) {
Yogesh Pande 4:5d91b0f5038c 1813 uint8_t chr;
Yogesh Pande 4:5d91b0f5038c 1814
Yogesh Pande 4:5d91b0f5038c 1815 chr = ptr[start];
Yogesh Pande 4:5d91b0f5038c 1816 ptr[start] = ptr[end];
Yogesh Pande 4:5d91b0f5038c 1817 ptr[end] = chr;
Yogesh Pande 4:5d91b0f5038c 1818
Yogesh Pande 4:5d91b0f5038c 1819 start++;
Yogesh Pande 4:5d91b0f5038c 1820 end--;
Yogesh Pande 4:5d91b0f5038c 1821
Yogesh Pande 4:5d91b0f5038c 1822 }
Yogesh Pande 4:5d91b0f5038c 1823 return (ptr + i);
Yogesh Pande 4:5d91b0f5038c 1824 }
Yogesh Pande 4:5d91b0f5038c 1825
Yogesh Pande 4:5d91b0f5038c 1826 static int32_t sn_nsdl_atoi(uint8_t *ptr, uint8_t len)
Yogesh Pande 4:5d91b0f5038c 1827 {
Yogesh Pande 4:5d91b0f5038c 1828
Yogesh Pande 4:5d91b0f5038c 1829 int32_t result = 0;
Yogesh Pande 4:5d91b0f5038c 1830
Yogesh Pande 4:5d91b0f5038c 1831 while (len--) {
Yogesh Pande 4:5d91b0f5038c 1832
Yogesh Pande 4:5d91b0f5038c 1833 if (result) {
Yogesh Pande 4:5d91b0f5038c 1834 result *= 10;
Yogesh Pande 4:5d91b0f5038c 1835 }
Yogesh Pande 4:5d91b0f5038c 1836
Yogesh Pande 4:5d91b0f5038c 1837 if (*ptr >= '0' && *ptr <= '9') {
Yogesh Pande 4:5d91b0f5038c 1838 result += *ptr - '0';
Yogesh Pande 4:5d91b0f5038c 1839 } else{
Yogesh Pande 4:5d91b0f5038c 1840 return -1;
Yogesh Pande 4:5d91b0f5038c 1841 }
Yogesh Pande 4:5d91b0f5038c 1842
Yogesh Pande 4:5d91b0f5038c 1843 ptr++;
Yogesh Pande 4:5d91b0f5038c 1844
Yogesh Pande 4:5d91b0f5038c 1845 }
Yogesh Pande 4:5d91b0f5038c 1846 return result;
Yogesh Pande 4:5d91b0f5038c 1847
Yogesh Pande 4:5d91b0f5038c 1848 }
Yogesh Pande 4:5d91b0f5038c 1849
Yogesh Pande 4:5d91b0f5038c 1850 static uint32_t sn_nsdl_ahextoi(uint8_t *ptr, uint8_t len)
Yogesh Pande 4:5d91b0f5038c 1851 {
Yogesh Pande 4:5d91b0f5038c 1852
Yogesh Pande 4:5d91b0f5038c 1853 uint32_t result = 0;
Yogesh Pande 4:5d91b0f5038c 1854
Yogesh Pande 4:5d91b0f5038c 1855 while (len--) {
Yogesh Pande 4:5d91b0f5038c 1856
Yogesh Pande 4:5d91b0f5038c 1857 if (result) {
Yogesh Pande 4:5d91b0f5038c 1858 result *= 16;
Yogesh Pande 4:5d91b0f5038c 1859 }
Yogesh Pande 4:5d91b0f5038c 1860
Yogesh Pande 4:5d91b0f5038c 1861 if (*ptr >= '0' && *ptr <= '9') {
Yogesh Pande 4:5d91b0f5038c 1862 result += *ptr - '0';
Yogesh Pande 4:5d91b0f5038c 1863 } else if (*ptr >= 'a' && *ptr <= 'f') {
Yogesh Pande 4:5d91b0f5038c 1864 result += *ptr - 87;
Yogesh Pande 4:5d91b0f5038c 1865 } else if (*ptr >= 'A' && *ptr <= 'F') {
Yogesh Pande 4:5d91b0f5038c 1866 result += *ptr - 55;
Yogesh Pande 4:5d91b0f5038c 1867 }
Yogesh Pande 4:5d91b0f5038c 1868
Yogesh Pande 4:5d91b0f5038c 1869 ptr++;
Yogesh Pande 4:5d91b0f5038c 1870
Yogesh Pande 4:5d91b0f5038c 1871 }
Yogesh Pande 4:5d91b0f5038c 1872 return result;
Yogesh Pande 4:5d91b0f5038c 1873
Yogesh Pande 4:5d91b0f5038c 1874 }
Yogesh Pande 4:5d91b0f5038c 1875
Yogesh Pande 4:5d91b0f5038c 1876 static int8_t sn_nsdl_resolve_lwm2m_address(struct nsdl_s *handle, uint8_t *uri, uint16_t uri_len)
Yogesh Pande 4:5d91b0f5038c 1877 {
Yogesh Pande 4:5d91b0f5038c 1878 #ifndef YOTTA_CFG_DISABLE_BOOTSTRAP_FEATURE
Yogesh Pande 4:5d91b0f5038c 1879 if( uri_len < 2 ){
Yogesh Pande 4:5d91b0f5038c 1880 return SN_NSDL_FAILURE;
Yogesh Pande 4:5d91b0f5038c 1881 }
Yogesh Pande 4:5d91b0f5038c 1882 uint8_t *temp_ptr = uri+2;
Yogesh Pande 4:5d91b0f5038c 1883 uint16_t i = 0;
Yogesh Pande 4:5d91b0f5038c 1884 uint8_t char_cnt = 0;
Yogesh Pande 4:5d91b0f5038c 1885
Yogesh Pande 4:5d91b0f5038c 1886 /* jump over coap// */
Yogesh Pande 4:5d91b0f5038c 1887 while ((*(temp_ptr - 2) != '/') || (*(temp_ptr - 1) != '/')) {
Yogesh Pande 4:5d91b0f5038c 1888 temp_ptr++;
Yogesh Pande 4:5d91b0f5038c 1889 if (temp_ptr - uri >= uri_len) {
Yogesh Pande 4:5d91b0f5038c 1890 return SN_NSDL_FAILURE;
Yogesh Pande 4:5d91b0f5038c 1891 }
Yogesh Pande 4:5d91b0f5038c 1892 }
Yogesh Pande 4:5d91b0f5038c 1893
Yogesh Pande 4:5d91b0f5038c 1894 /* Resolve address type */
Yogesh Pande 4:5d91b0f5038c 1895 /* Count semicolons */
Yogesh Pande 4:5d91b0f5038c 1896
Yogesh Pande 4:5d91b0f5038c 1897 int8_t endPos = -1;
Yogesh Pande 4:5d91b0f5038c 1898
Yogesh Pande 4:5d91b0f5038c 1899 while (i < (uri_len - (temp_ptr - uri))) {
Yogesh Pande 4:5d91b0f5038c 1900 if (*(temp_ptr + i) == ':') {
Yogesh Pande 4:5d91b0f5038c 1901 char_cnt++;
Yogesh Pande 4:5d91b0f5038c 1902 }else if(*(temp_ptr + i) == ']'){
Yogesh Pande 4:5d91b0f5038c 1903 endPos = i;
Yogesh Pande 4:5d91b0f5038c 1904 }
Yogesh Pande 4:5d91b0f5038c 1905 i++;
Yogesh Pande 4:5d91b0f5038c 1906 }
Yogesh Pande 4:5d91b0f5038c 1907
Yogesh Pande 4:5d91b0f5038c 1908 uint8_t *temp_pos = temp_ptr; //store starting point in case of IPv4 parsing fails
Yogesh Pande 4:5d91b0f5038c 1909
Yogesh Pande 4:5d91b0f5038c 1910 /* IPv6 */
Yogesh Pande 4:5d91b0f5038c 1911 if (char_cnt > 2) {
Yogesh Pande 4:5d91b0f5038c 1912 i = 0;
Yogesh Pande 4:5d91b0f5038c 1913
Yogesh Pande 4:5d91b0f5038c 1914 if( handle->nsp_address_ptr->omalw_address_ptr->addr_ptr ){
Yogesh Pande 4:5d91b0f5038c 1915 handle->sn_nsdl_free(handle->nsp_address_ptr->omalw_address_ptr->addr_ptr);
Yogesh Pande 4:5d91b0f5038c 1916 }
Yogesh Pande 4:5d91b0f5038c 1917
Yogesh Pande 4:5d91b0f5038c 1918 handle->nsp_address_ptr->omalw_address_ptr->type = SN_NSDL_ADDRESS_TYPE_IPV6;
Yogesh Pande 4:5d91b0f5038c 1919 handle->nsp_address_ptr->omalw_address_ptr->addr_len = 16;
Yogesh Pande 4:5d91b0f5038c 1920 handle->nsp_address_ptr->omalw_address_ptr->addr_ptr = handle->sn_nsdl_alloc(16);
Yogesh Pande 4:5d91b0f5038c 1921 if (!handle->nsp_address_ptr->omalw_address_ptr->addr_ptr) {
Yogesh Pande 4:5d91b0f5038c 1922 return SN_NSDL_FAILURE;
Yogesh Pande 4:5d91b0f5038c 1923 }
Yogesh Pande 4:5d91b0f5038c 1924
Yogesh Pande 4:5d91b0f5038c 1925 memset(handle->nsp_address_ptr->omalw_address_ptr->addr_ptr, 0, 16);
Yogesh Pande 4:5d91b0f5038c 1926 if (*temp_ptr == '[' && endPos > 0 && (temp_ptr - uri) + endPos < uri_len && *(temp_ptr + endPos + 1) == ':') {
Yogesh Pande 4:5d91b0f5038c 1927 temp_ptr++;
Yogesh Pande 4:5d91b0f5038c 1928 endPos--;
Yogesh Pande 4:5d91b0f5038c 1929 }else{
Yogesh Pande 4:5d91b0f5038c 1930 /* return failure, because port is mandatory */
Yogesh Pande 4:5d91b0f5038c 1931 return SN_NSDL_FAILURE;
Yogesh Pande 4:5d91b0f5038c 1932 }
Yogesh Pande 4:5d91b0f5038c 1933
Yogesh Pande 4:5d91b0f5038c 1934 int8_t loopbackPos = -1;
Yogesh Pande 4:5d91b0f5038c 1935 if( char_cnt != 8 ){
Yogesh Pande 4:5d91b0f5038c 1936 i = 0;
Yogesh Pande 4:5d91b0f5038c 1937 char_cnt -= 1;
Yogesh Pande 4:5d91b0f5038c 1938 while( i+1 < endPos ){
Yogesh Pande 4:5d91b0f5038c 1939 if(*(temp_ptr + i) == ':' && *(temp_ptr + i+1) == ':') {
Yogesh Pande 4:5d91b0f5038c 1940 loopbackPos = i;
Yogesh Pande 4:5d91b0f5038c 1941 break;
Yogesh Pande 4:5d91b0f5038c 1942 }
Yogesh Pande 4:5d91b0f5038c 1943 i++;
Yogesh Pande 4:5d91b0f5038c 1944 }
Yogesh Pande 4:5d91b0f5038c 1945 }
Yogesh Pande 4:5d91b0f5038c 1946 i = 0;
Yogesh Pande 4:5d91b0f5038c 1947
Yogesh Pande 4:5d91b0f5038c 1948 uint8_t numberOfZeros = 8 - char_cnt;
Yogesh Pande 4:5d91b0f5038c 1949 if(loopbackPos == 0){
Yogesh Pande 4:5d91b0f5038c 1950 numberOfZeros++;
Yogesh Pande 4:5d91b0f5038c 1951 }
Yogesh Pande 4:5d91b0f5038c 1952
Yogesh Pande 4:5d91b0f5038c 1953 if(loopbackPos == endPos-2){
Yogesh Pande 4:5d91b0f5038c 1954 numberOfZeros++;
Yogesh Pande 4:5d91b0f5038c 1955 }
Yogesh Pande 4:5d91b0f5038c 1956
Yogesh Pande 4:5d91b0f5038c 1957 /* Resolve address */
Yogesh Pande 4:5d91b0f5038c 1958 int8_t pos = loopbackPos == 0?0:-1;
Yogesh Pande 4:5d91b0f5038c 1959 while (i < 16 && ((temp_ptr - uri) + char_cnt) < uri_len) {
Yogesh Pande 4:5d91b0f5038c 1960 char_cnt = 0;
Yogesh Pande 4:5d91b0f5038c 1961 if( pos == loopbackPos ){
Yogesh Pande 4:5d91b0f5038c 1962 for( int k=0; k < numberOfZeros; k++ ){
Yogesh Pande 4:5d91b0f5038c 1963 i+=2;
Yogesh Pande 4:5d91b0f5038c 1964 }
Yogesh Pande 4:5d91b0f5038c 1965 pos+=2;
Yogesh Pande 4:5d91b0f5038c 1966 temp_ptr += 2;
Yogesh Pande 4:5d91b0f5038c 1967 if( numberOfZeros == 8 ){
Yogesh Pande 4:5d91b0f5038c 1968 temp_ptr++;
Yogesh Pande 4:5d91b0f5038c 1969 }
Yogesh Pande 4:5d91b0f5038c 1970 continue;
Yogesh Pande 4:5d91b0f5038c 1971 }
Yogesh Pande 4:5d91b0f5038c 1972 while (*(temp_ptr + char_cnt) != ':' && *(temp_ptr + char_cnt) != ']') {
Yogesh Pande 4:5d91b0f5038c 1973 char_cnt++;
Yogesh Pande 4:5d91b0f5038c 1974 pos++;
Yogesh Pande 4:5d91b0f5038c 1975 }
Yogesh Pande 4:5d91b0f5038c 1976 pos++;
Yogesh Pande 4:5d91b0f5038c 1977
Yogesh Pande 4:5d91b0f5038c 1978 if (char_cnt <= 2) {
Yogesh Pande 4:5d91b0f5038c 1979 i++;
Yogesh Pande 4:5d91b0f5038c 1980 }
Yogesh Pande 4:5d91b0f5038c 1981
Yogesh Pande 4:5d91b0f5038c 1982 while (char_cnt) {
Yogesh Pande 4:5d91b0f5038c 1983 if (char_cnt % 2) {
Yogesh Pande 4:5d91b0f5038c 1984 *(handle->nsp_address_ptr->omalw_address_ptr->addr_ptr + i) = (uint8_t)sn_nsdl_ahextoi(temp_ptr, 1);
Yogesh Pande 4:5d91b0f5038c 1985 temp_ptr++;
Yogesh Pande 4:5d91b0f5038c 1986 char_cnt --;
Yogesh Pande 4:5d91b0f5038c 1987 } else {
Yogesh Pande 4:5d91b0f5038c 1988 *(handle->nsp_address_ptr->omalw_address_ptr->addr_ptr + i) = (uint8_t)sn_nsdl_ahextoi(temp_ptr, 2);
Yogesh Pande 4:5d91b0f5038c 1989 temp_ptr += 2;
Yogesh Pande 4:5d91b0f5038c 1990 char_cnt -= 2;
Yogesh Pande 4:5d91b0f5038c 1991 }
Yogesh Pande 4:5d91b0f5038c 1992 i++;
Yogesh Pande 4:5d91b0f5038c 1993 }
Yogesh Pande 4:5d91b0f5038c 1994 temp_ptr++;
Yogesh Pande 4:5d91b0f5038c 1995 }
Yogesh Pande 4:5d91b0f5038c 1996
Yogesh Pande 4:5d91b0f5038c 1997 temp_ptr++;
Yogesh Pande 4:5d91b0f5038c 1998 uint16_t handled = (temp_ptr - uri);
Yogesh Pande 4:5d91b0f5038c 1999 if( handled < uri_len ){
Yogesh Pande 4:5d91b0f5038c 2000 if( *(temp_ptr + (uri_len - (temp_ptr - uri) -1)) == '/' ){
Yogesh Pande 4:5d91b0f5038c 2001 handle->nsp_address_ptr->omalw_address_ptr->port = sn_nsdl_atoi(temp_ptr, uri_len - (temp_ptr - uri) - 1);
Yogesh Pande 4:5d91b0f5038c 2002 }else{
Yogesh Pande 4:5d91b0f5038c 2003 handle->nsp_address_ptr->omalw_address_ptr->port = sn_nsdl_atoi(temp_ptr, uri_len - (temp_ptr - uri));
Yogesh Pande 4:5d91b0f5038c 2004 }
Yogesh Pande 4:5d91b0f5038c 2005 }
Yogesh Pande 4:5d91b0f5038c 2006 }
Yogesh Pande 4:5d91b0f5038c 2007 /* IPv4 or Hostname */
Yogesh Pande 4:5d91b0f5038c 2008 else if (char_cnt == 1) {
Yogesh Pande 4:5d91b0f5038c 2009 char_cnt = 0;
Yogesh Pande 4:5d91b0f5038c 2010 i = 0;
Yogesh Pande 4:5d91b0f5038c 2011
Yogesh Pande 4:5d91b0f5038c 2012 if( handle->nsp_address_ptr->omalw_address_ptr->addr_ptr ){
Yogesh Pande 4:5d91b0f5038c 2013 handle->sn_nsdl_free(handle->nsp_address_ptr->omalw_address_ptr->addr_ptr);
Yogesh Pande 4:5d91b0f5038c 2014 }
Yogesh Pande 4:5d91b0f5038c 2015
Yogesh Pande 4:5d91b0f5038c 2016 /* Check address type */
Yogesh Pande 4:5d91b0f5038c 2017 while (i < (uri_len - (temp_ptr - uri))) {
Yogesh Pande 4:5d91b0f5038c 2018 if (*(temp_ptr + i) == '.') {
Yogesh Pande 4:5d91b0f5038c 2019 char_cnt++;
Yogesh Pande 4:5d91b0f5038c 2020 }
Yogesh Pande 4:5d91b0f5038c 2021 i++;
Yogesh Pande 4:5d91b0f5038c 2022 }
Yogesh Pande 4:5d91b0f5038c 2023
Yogesh Pande 4:5d91b0f5038c 2024 bool parseOk = true;
Yogesh Pande 4:5d91b0f5038c 2025
Yogesh Pande 4:5d91b0f5038c 2026 /* Try IPv4 first */
Yogesh Pande 4:5d91b0f5038c 2027 if (char_cnt == 3) {
Yogesh Pande 4:5d91b0f5038c 2028 i = 0;
Yogesh Pande 4:5d91b0f5038c 2029 char_cnt = 0;
Yogesh Pande 4:5d91b0f5038c 2030
Yogesh Pande 4:5d91b0f5038c 2031 handle->nsp_address_ptr->omalw_address_ptr->type = SN_NSDL_ADDRESS_TYPE_IPV4;
Yogesh Pande 4:5d91b0f5038c 2032 handle->nsp_address_ptr->omalw_address_ptr->addr_len = 4;
Yogesh Pande 4:5d91b0f5038c 2033 handle->nsp_address_ptr->omalw_address_ptr->addr_ptr = handle->sn_nsdl_alloc(4);
Yogesh Pande 4:5d91b0f5038c 2034 if (!handle->nsp_address_ptr->omalw_address_ptr->addr_ptr) {
Yogesh Pande 4:5d91b0f5038c 2035 return SN_NSDL_FAILURE;
Yogesh Pande 4:5d91b0f5038c 2036 }
Yogesh Pande 4:5d91b0f5038c 2037
Yogesh Pande 4:5d91b0f5038c 2038 while (parseOk && ((temp_ptr - uri) < uri_len) && *(temp_ptr - 1) != ':') {
Yogesh Pande 4:5d91b0f5038c 2039 i++;
Yogesh Pande 4:5d91b0f5038c 2040
Yogesh Pande 4:5d91b0f5038c 2041 if (*(temp_ptr + i) == ':' || *(temp_ptr + i) == '.') {
Yogesh Pande 4:5d91b0f5038c 2042 int8_t value = (int8_t)sn_nsdl_atoi(temp_ptr, i);
Yogesh Pande 4:5d91b0f5038c 2043 if( value == -1 ){
Yogesh Pande 4:5d91b0f5038c 2044 parseOk = false;
Yogesh Pande 4:5d91b0f5038c 2045 char_cnt = 3;
Yogesh Pande 4:5d91b0f5038c 2046 handle->sn_nsdl_free(handle->nsp_address_ptr->omalw_address_ptr->addr_ptr);
Yogesh Pande 4:5d91b0f5038c 2047 handle->nsp_address_ptr->omalw_address_ptr->addr_ptr = NULL;
Yogesh Pande 4:5d91b0f5038c 2048 break;
Yogesh Pande 4:5d91b0f5038c 2049 }
Yogesh Pande 4:5d91b0f5038c 2050 *(handle->nsp_address_ptr->omalw_address_ptr->addr_ptr + char_cnt) = value;
Yogesh Pande 4:5d91b0f5038c 2051 temp_ptr = temp_ptr + i + 1;
Yogesh Pande 4:5d91b0f5038c 2052 char_cnt++;
Yogesh Pande 4:5d91b0f5038c 2053 i = 0;
Yogesh Pande 4:5d91b0f5038c 2054 }
Yogesh Pande 4:5d91b0f5038c 2055 }
Yogesh Pande 4:5d91b0f5038c 2056 if(parseOk) {
Yogesh Pande 4:5d91b0f5038c 2057 if( *(temp_ptr + (uri_len - (temp_ptr - uri) -1)) == '/' ){
Yogesh Pande 4:5d91b0f5038c 2058 handle->nsp_address_ptr->omalw_address_ptr->port = sn_nsdl_atoi(temp_ptr, uri_len - (temp_ptr - uri) - 1);
Yogesh Pande 4:5d91b0f5038c 2059 }else{
Yogesh Pande 4:5d91b0f5038c 2060 handle->nsp_address_ptr->omalw_address_ptr->port = sn_nsdl_atoi(temp_ptr, uri_len - (temp_ptr - uri));
Yogesh Pande 4:5d91b0f5038c 2061 }
Yogesh Pande 4:5d91b0f5038c 2062 }
Yogesh Pande 4:5d91b0f5038c 2063 }else{
Yogesh Pande 4:5d91b0f5038c 2064 parseOk = false;
Yogesh Pande 4:5d91b0f5038c 2065 }
Yogesh Pande 4:5d91b0f5038c 2066
Yogesh Pande 4:5d91b0f5038c 2067 /* Then try Hostname */
Yogesh Pande 4:5d91b0f5038c 2068 if(!parseOk) {
Yogesh Pande 4:5d91b0f5038c 2069 i = 0;
Yogesh Pande 4:5d91b0f5038c 2070 temp_ptr = temp_pos;
Yogesh Pande 4:5d91b0f5038c 2071
Yogesh Pande 4:5d91b0f5038c 2072 handle->nsp_address_ptr->omalw_address_ptr->type = SN_NSDL_ADDRESS_TYPE_HOSTNAME;
Yogesh Pande 4:5d91b0f5038c 2073
Yogesh Pande 4:5d91b0f5038c 2074 /* Resolve address length */
Yogesh Pande 4:5d91b0f5038c 2075 if (uri_len > 0xff) {
Yogesh Pande 4:5d91b0f5038c 2076 return SN_NSDL_FAILURE;
Yogesh Pande 4:5d91b0f5038c 2077 }
Yogesh Pande 4:5d91b0f5038c 2078
Yogesh Pande 4:5d91b0f5038c 2079 while (((temp_ptr - uri) + i < uri_len) && *(temp_ptr + i) != ':') {
Yogesh Pande 4:5d91b0f5038c 2080 i++;
Yogesh Pande 4:5d91b0f5038c 2081 }
Yogesh Pande 4:5d91b0f5038c 2082
Yogesh Pande 4:5d91b0f5038c 2083 handle->nsp_address_ptr->omalw_address_ptr->addr_len = i;
Yogesh Pande 4:5d91b0f5038c 2084
Yogesh Pande 4:5d91b0f5038c 2085 /* Copy address */
Yogesh Pande 4:5d91b0f5038c 2086 handle->nsp_address_ptr->omalw_address_ptr->addr_ptr = handle->sn_nsdl_alloc(i);
Yogesh Pande 4:5d91b0f5038c 2087 if (!handle->nsp_address_ptr->omalw_address_ptr->addr_ptr) {
Yogesh Pande 4:5d91b0f5038c 2088 return SN_NSDL_FAILURE;
Yogesh Pande 4:5d91b0f5038c 2089 }
Yogesh Pande 4:5d91b0f5038c 2090
Yogesh Pande 4:5d91b0f5038c 2091 memcpy(handle->nsp_address_ptr->omalw_address_ptr->addr_ptr, temp_ptr, i);
Yogesh Pande 4:5d91b0f5038c 2092
Yogesh Pande 4:5d91b0f5038c 2093 temp_ptr += i + 1;
Yogesh Pande 4:5d91b0f5038c 2094
Yogesh Pande 4:5d91b0f5038c 2095 /* Set port */
Yogesh Pande 4:5d91b0f5038c 2096 if( *(temp_ptr + (uri_len - (temp_ptr - uri) - 1)) == '/' ){
Yogesh Pande 4:5d91b0f5038c 2097 handle->nsp_address_ptr->omalw_address_ptr->port = sn_nsdl_atoi(temp_ptr, uri_len - (temp_ptr - uri) - 1);
Yogesh Pande 4:5d91b0f5038c 2098 }else{
Yogesh Pande 4:5d91b0f5038c 2099 handle->nsp_address_ptr->omalw_address_ptr->port = sn_nsdl_atoi(temp_ptr, uri_len - (temp_ptr - uri));
Yogesh Pande 4:5d91b0f5038c 2100 }
Yogesh Pande 4:5d91b0f5038c 2101 }
Yogesh Pande 4:5d91b0f5038c 2102 } else {
Yogesh Pande 4:5d91b0f5038c 2103 return SN_NSDL_FAILURE;
Yogesh Pande 4:5d91b0f5038c 2104 }
Yogesh Pande 4:5d91b0f5038c 2105
Yogesh Pande 4:5d91b0f5038c 2106 return SN_NSDL_SUCCESS;
Yogesh Pande 4:5d91b0f5038c 2107 #else
Yogesh Pande 4:5d91b0f5038c 2108 return SN_NSDL_FAILURE;
Yogesh Pande 4:5d91b0f5038c 2109 #endif //YOTTA_CFG_DISABLE_BOOTSTRAP_FEATURE
Yogesh Pande 4:5d91b0f5038c 2110 }
Yogesh Pande 4:5d91b0f5038c 2111
Yogesh Pande 4:5d91b0f5038c 2112
Yogesh Pande 4:5d91b0f5038c 2113 int8_t sn_nsdl_process_oma_tlv(struct nsdl_s *handle, uint8_t *data_ptr, uint16_t data_len)
Yogesh Pande 4:5d91b0f5038c 2114 {
Yogesh Pande 4:5d91b0f5038c 2115 #ifndef YOTTA_CFG_DISABLE_BOOTSTRAP_FEATURE
Yogesh Pande 4:5d91b0f5038c 2116 uint8_t *temp_ptr = data_ptr;
Yogesh Pande 4:5d91b0f5038c 2117 uint8_t type = 0;
Yogesh Pande 4:5d91b0f5038c 2118 uint16_t identifier = 0;
Yogesh Pande 4:5d91b0f5038c 2119 uint32_t length = 0;
Yogesh Pande 4:5d91b0f5038c 2120 uint8_t path_temp[5] = "0/0/x";
Yogesh Pande 4:5d91b0f5038c 2121
Yogesh Pande 4:5d91b0f5038c 2122 sn_nsdl_resource_info_s resource_temp = {
Yogesh Pande 4:5d91b0f5038c 2123 .resource_parameters_ptr = 0,
Yogesh Pande 4:5d91b0f5038c 2124 .mode = SN_GRS_STATIC,
Yogesh Pande 4:5d91b0f5038c 2125 .pathlen = 5,
Yogesh Pande 4:5d91b0f5038c 2126 .path = path_temp,
Yogesh Pande 4:5d91b0f5038c 2127 .resourcelen = 0,
Yogesh Pande 4:5d91b0f5038c 2128 .resource = 0,
Yogesh Pande 4:5d91b0f5038c 2129 .access = (sn_grs_resource_acl_e) 0x0f, /* All allowed */
Yogesh Pande 4:5d91b0f5038c 2130 .sn_grs_dyn_res_callback = 0
Yogesh Pande 4:5d91b0f5038c 2131 };
Yogesh Pande 4:5d91b0f5038c 2132
Yogesh Pande 4:5d91b0f5038c 2133 while ((temp_ptr - data_ptr) < data_len) {
Yogesh Pande 4:5d91b0f5038c 2134 /* Save type for future use */
Yogesh Pande 4:5d91b0f5038c 2135 type = *temp_ptr++;
Yogesh Pande 4:5d91b0f5038c 2136
Yogesh Pande 4:5d91b0f5038c 2137 /* * Bit 5: Indicates the Length of the Identifier. * */
Yogesh Pande 4:5d91b0f5038c 2138 if (type & 0x20) {
Yogesh Pande 4:5d91b0f5038c 2139 /* 1=The Identifier field of this TLV is 16 bits long */
Yogesh Pande 4:5d91b0f5038c 2140 identifier = (uint8_t)(*temp_ptr++) << 8;
Yogesh Pande 4:5d91b0f5038c 2141 identifier += (uint8_t) * temp_ptr++;
Yogesh Pande 4:5d91b0f5038c 2142 } else {
Yogesh Pande 4:5d91b0f5038c 2143 /* 0=The Identifier field of this TLV is 8 bits long */
Yogesh Pande 4:5d91b0f5038c 2144 identifier = (uint8_t) * temp_ptr++;
Yogesh Pande 4:5d91b0f5038c 2145 }
Yogesh Pande 4:5d91b0f5038c 2146
Yogesh Pande 4:5d91b0f5038c 2147 /* * Bit 4-3: Indicates the type of Length. * */
Yogesh Pande 4:5d91b0f5038c 2148 if ((type & 0x18) == 0) {
Yogesh Pande 4:5d91b0f5038c 2149 /* 00 = No length field, the value immediately follows the Identifier field in is of the length indicated by Bits 2-0 of this field */
Yogesh Pande 4:5d91b0f5038c 2150 length = (type & 0x07);
Yogesh Pande 4:5d91b0f5038c 2151 } else if ((type & 0x18) == 0x08) {
Yogesh Pande 4:5d91b0f5038c 2152 /* 01 = The Length field is 8-bits and Bits 2-0 MUST be ignored */
Yogesh Pande 4:5d91b0f5038c 2153 length = *temp_ptr++;
Yogesh Pande 4:5d91b0f5038c 2154 } else if ((type & 0x18) == 0x10) {
Yogesh Pande 4:5d91b0f5038c 2155 /* 10 = The Length field is 16-bits and Bits 2-0 MUST be ignored */
Yogesh Pande 4:5d91b0f5038c 2156 length = (uint8_t)(*temp_ptr++) << 8;
Yogesh Pande 4:5d91b0f5038c 2157 length += (uint8_t) * temp_ptr++;
Yogesh Pande 4:5d91b0f5038c 2158 } else if ((type & 0x18) == 0x18) {
Yogesh Pande 4:5d91b0f5038c 2159 /* 11 = The Length field is 24-bits and Bits 2-0 MUST be ignored */
Yogesh Pande 4:5d91b0f5038c 2160 length = (uint8_t)(*temp_ptr++);
Yogesh Pande 4:5d91b0f5038c 2161 length = length << 16;
Yogesh Pande 4:5d91b0f5038c 2162 length += (uint8_t)(*temp_ptr++) << 8;
Yogesh Pande 4:5d91b0f5038c 2163 length += (uint8_t) * temp_ptr++;
Yogesh Pande 4:5d91b0f5038c 2164 }
Yogesh Pande 4:5d91b0f5038c 2165
Yogesh Pande 4:5d91b0f5038c 2166 /* * Bits 7-6: Indicates the type of Identifier. * */
Yogesh Pande 4:5d91b0f5038c 2167 if ((type & 0xC0) == 0x00) {
Yogesh Pande 4:5d91b0f5038c 2168 /* 00 = Object Instance in which case the Value contains one or more Resource TLVs */
Yogesh Pande 4:5d91b0f5038c 2169 /* Not implemented, return failure */
Yogesh Pande 4:5d91b0f5038c 2170 } else if ((type & 0xC0) == 0xC0) {
Yogesh Pande 4:5d91b0f5038c 2171 /* 11 = Resource with Value */
Yogesh Pande 4:5d91b0f5038c 2172 switch (identifier) {
Yogesh Pande 4:5d91b0f5038c 2173 case 0:
Yogesh Pande 4:5d91b0f5038c 2174 /* Resolve LWM2M Server URI */
Yogesh Pande 4:5d91b0f5038c 2175 sn_nsdl_resolve_lwm2m_address(handle, temp_ptr, length);
Yogesh Pande 4:5d91b0f5038c 2176 path_temp[4] = '0';
Yogesh Pande 4:5d91b0f5038c 2177 resource_temp.resource = temp_ptr;
Yogesh Pande 4:5d91b0f5038c 2178 resource_temp.resourcelen = length;
Yogesh Pande 4:5d91b0f5038c 2179 if (sn_nsdl_create_resource(handle, &resource_temp) != SN_NSDL_SUCCESS) {
Yogesh Pande 4:5d91b0f5038c 2180 return SN_NSDL_FAILURE;
Yogesh Pande 4:5d91b0f5038c 2181 }
Yogesh Pande 4:5d91b0f5038c 2182 break;
Yogesh Pande 4:5d91b0f5038c 2183 case 2:
Yogesh Pande 4:5d91b0f5038c 2184 /* Resolve security Mode */
Yogesh Pande 4:5d91b0f5038c 2185 handle->nsp_address_ptr->omalw_server_security = (omalw_server_security_t)sn_nsdl_atoi(temp_ptr, length);
Yogesh Pande 4:5d91b0f5038c 2186 path_temp[4] = '2';
Yogesh Pande 4:5d91b0f5038c 2187 resource_temp.resource = temp_ptr;
Yogesh Pande 4:5d91b0f5038c 2188 resource_temp.resourcelen = length;
Yogesh Pande 4:5d91b0f5038c 2189 if (sn_nsdl_create_resource(handle, &resource_temp) != SN_NSDL_SUCCESS) {
Yogesh Pande 4:5d91b0f5038c 2190 return SN_NSDL_FAILURE;
Yogesh Pande 4:5d91b0f5038c 2191 }
Yogesh Pande 4:5d91b0f5038c 2192
Yogesh Pande 4:5d91b0f5038c 2193 break;
Yogesh Pande 4:5d91b0f5038c 2194 case 3:
Yogesh Pande 4:5d91b0f5038c 2195 /* Public Key or Identity */
Yogesh Pande 4:5d91b0f5038c 2196 path_temp[4] = '3';
Yogesh Pande 4:5d91b0f5038c 2197 resource_temp.resource = temp_ptr;
Yogesh Pande 4:5d91b0f5038c 2198 resource_temp.resourcelen = length;
Yogesh Pande 4:5d91b0f5038c 2199 if (sn_nsdl_create_resource(handle, &resource_temp) != SN_NSDL_SUCCESS) {
Yogesh Pande 4:5d91b0f5038c 2200 return SN_NSDL_FAILURE;
Yogesh Pande 4:5d91b0f5038c 2201 }
Yogesh Pande 4:5d91b0f5038c 2202 break;
Yogesh Pande 4:5d91b0f5038c 2203 case 4:
Yogesh Pande 4:5d91b0f5038c 2204 /* Server Public Key or Identity */
Yogesh Pande 4:5d91b0f5038c 2205 ;
Yogesh Pande 4:5d91b0f5038c 2206 path_temp[4] = '4';
Yogesh Pande 4:5d91b0f5038c 2207 resource_temp.resource = temp_ptr;
Yogesh Pande 4:5d91b0f5038c 2208 resource_temp.resourcelen = length;
Yogesh Pande 4:5d91b0f5038c 2209 if (sn_nsdl_create_resource(handle, &resource_temp) != SN_NSDL_SUCCESS) {
Yogesh Pande 4:5d91b0f5038c 2210 return SN_NSDL_FAILURE;
Yogesh Pande 4:5d91b0f5038c 2211 }
Yogesh Pande 4:5d91b0f5038c 2212
Yogesh Pande 4:5d91b0f5038c 2213 break;
Yogesh Pande 4:5d91b0f5038c 2214 case 5:
Yogesh Pande 4:5d91b0f5038c 2215 /* Secret Key */
Yogesh Pande 4:5d91b0f5038c 2216 path_temp[4] = '5';
Yogesh Pande 4:5d91b0f5038c 2217 resource_temp.resource = temp_ptr;
Yogesh Pande 4:5d91b0f5038c 2218 resource_temp.resourcelen = length;
Yogesh Pande 4:5d91b0f5038c 2219 if (sn_nsdl_create_resource(handle, &resource_temp) != SN_NSDL_SUCCESS) {
Yogesh Pande 4:5d91b0f5038c 2220 return SN_NSDL_FAILURE;
Yogesh Pande 4:5d91b0f5038c 2221 }
Yogesh Pande 4:5d91b0f5038c 2222 break;
Yogesh Pande 4:5d91b0f5038c 2223 default:
Yogesh Pande 4:5d91b0f5038c 2224 break;
Yogesh Pande 4:5d91b0f5038c 2225 }
Yogesh Pande 4:5d91b0f5038c 2226
Yogesh Pande 4:5d91b0f5038c 2227 /* Move pointer to next TLV message */
Yogesh Pande 4:5d91b0f5038c 2228 temp_ptr += length;
Yogesh Pande 4:5d91b0f5038c 2229 }
Yogesh Pande 4:5d91b0f5038c 2230 }
Yogesh Pande 4:5d91b0f5038c 2231
Yogesh Pande 4:5d91b0f5038c 2232 return SN_NSDL_SUCCESS;
Yogesh Pande 4:5d91b0f5038c 2233 #else
Yogesh Pande 4:5d91b0f5038c 2234 return SN_NSDL_FAILURE;
Yogesh Pande 4:5d91b0f5038c 2235 #endif //YOTTA_CFG_DISABLE_BOOTSTRAP_FEATURE
Yogesh Pande 4:5d91b0f5038c 2236 }
Yogesh Pande 4:5d91b0f5038c 2237
Yogesh Pande 4:5d91b0f5038c 2238 static void sn_nsdl_check_oma_bs_status(struct nsdl_s *handle)
Yogesh Pande 4:5d91b0f5038c 2239 {
Yogesh Pande 4:5d91b0f5038c 2240 #ifndef YOTTA_CFG_DISABLE_BOOTSTRAP_FEATURE
Yogesh Pande 4:5d91b0f5038c 2241 /* Check OMA BS status */
Yogesh Pande 4:5d91b0f5038c 2242 if ((handle->nsp_address_ptr->omalw_server_security == PSK) && (handle->nsp_address_ptr->omalw_address_ptr->type != SN_NSDL_ADDRESS_TYPE_NONE)) {
Yogesh Pande 4:5d91b0f5038c 2243 /* call cb that oma bootstrap is done */
Yogesh Pande 4:5d91b0f5038c 2244 if(handle->sn_nsdl_oma_bs_done_cb != 0){
Yogesh Pande 4:5d91b0f5038c 2245 handle->sn_nsdl_oma_bs_done_cb(handle->nsp_address_ptr);
Yogesh Pande 4:5d91b0f5038c 2246 }
Yogesh Pande 4:5d91b0f5038c 2247 } else if ((handle->nsp_address_ptr->omalw_server_security == CERTIFICATE) && (handle->nsp_address_ptr->omalw_address_ptr->type != SN_NSDL_ADDRESS_TYPE_NONE) &&
Yogesh Pande 4:5d91b0f5038c 2248 ((sn_nsdl_get_resource(handle, 5, (void *)"0/0/5") != 0) &&
Yogesh Pande 4:5d91b0f5038c 2249 (sn_nsdl_get_resource(handle, 5, (void *)"0/0/4") != 0) &&
Yogesh Pande 4:5d91b0f5038c 2250 (sn_nsdl_get_resource(handle, 5, (void *)"0/0/3") != 0))) {
Yogesh Pande 4:5d91b0f5038c 2251 if( handle->sn_nsdl_oma_bs_done_cb ){
Yogesh Pande 4:5d91b0f5038c 2252 handle->sn_nsdl_oma_bs_done_cb(handle->nsp_address_ptr);
Yogesh Pande 4:5d91b0f5038c 2253 }
Yogesh Pande 4:5d91b0f5038c 2254 }
Yogesh Pande 4:5d91b0f5038c 2255 #endif //YOTTA_CFG_DISABLE_BOOTSTRAP_FEATURE
Yogesh Pande 4:5d91b0f5038c 2256 }
Yogesh Pande 4:5d91b0f5038c 2257
Yogesh Pande 4:5d91b0f5038c 2258 static int8_t set_endpoint_info(struct nsdl_s *handle, sn_nsdl_ep_parameters_s *endpoint_info_ptr)
Yogesh Pande 4:5d91b0f5038c 2259 {
Yogesh Pande 4:5d91b0f5038c 2260 if (handle->ep_information_ptr->domain_name_ptr) {
Yogesh Pande 4:5d91b0f5038c 2261 handle->sn_nsdl_free(handle->ep_information_ptr->domain_name_ptr);
Yogesh Pande 4:5d91b0f5038c 2262 handle->ep_information_ptr->domain_name_ptr = 0;
Yogesh Pande 4:5d91b0f5038c 2263 handle->ep_information_ptr->domain_name_len = 0;
Yogesh Pande 4:5d91b0f5038c 2264 }
Yogesh Pande 4:5d91b0f5038c 2265
Yogesh Pande 4:5d91b0f5038c 2266 if (handle->ep_information_ptr->endpoint_name_ptr) {
Yogesh Pande 4:5d91b0f5038c 2267 handle->sn_nsdl_free(handle->ep_information_ptr->endpoint_name_ptr);
Yogesh Pande 4:5d91b0f5038c 2268 handle->ep_information_ptr->endpoint_name_ptr = 0;
Yogesh Pande 4:5d91b0f5038c 2269 handle->ep_information_ptr->endpoint_name_len = 0;
Yogesh Pande 4:5d91b0f5038c 2270 }
Yogesh Pande 4:5d91b0f5038c 2271
Yogesh Pande 4:5d91b0f5038c 2272 if (endpoint_info_ptr->domain_name_ptr && endpoint_info_ptr->domain_name_len) {
Yogesh Pande 4:5d91b0f5038c 2273 handle->ep_information_ptr->domain_name_ptr = handle->sn_nsdl_alloc(endpoint_info_ptr->domain_name_len);
Yogesh Pande 4:5d91b0f5038c 2274
Yogesh Pande 4:5d91b0f5038c 2275 if (!handle->ep_information_ptr->domain_name_ptr) {
Yogesh Pande 4:5d91b0f5038c 2276 return -1;
Yogesh Pande 4:5d91b0f5038c 2277 }
Yogesh Pande 4:5d91b0f5038c 2278
Yogesh Pande 4:5d91b0f5038c 2279 memcpy(handle->ep_information_ptr->domain_name_ptr, endpoint_info_ptr->domain_name_ptr, endpoint_info_ptr->domain_name_len);
Yogesh Pande 4:5d91b0f5038c 2280 handle->ep_information_ptr->domain_name_len = endpoint_info_ptr->domain_name_len;
Yogesh Pande 4:5d91b0f5038c 2281 }
Yogesh Pande 4:5d91b0f5038c 2282
Yogesh Pande 4:5d91b0f5038c 2283 if (endpoint_info_ptr->endpoint_name_ptr && endpoint_info_ptr->endpoint_name_len) {
Yogesh Pande 4:5d91b0f5038c 2284 handle->ep_information_ptr->endpoint_name_ptr = handle->sn_nsdl_alloc(endpoint_info_ptr->endpoint_name_len);
Yogesh Pande 4:5d91b0f5038c 2285
Yogesh Pande 4:5d91b0f5038c 2286 if (!handle->ep_information_ptr->endpoint_name_ptr) {
Yogesh Pande 4:5d91b0f5038c 2287 if (handle->ep_information_ptr->domain_name_ptr) {
Yogesh Pande 4:5d91b0f5038c 2288 handle->sn_nsdl_free(handle->ep_information_ptr->domain_name_ptr);
Yogesh Pande 4:5d91b0f5038c 2289 handle->ep_information_ptr->domain_name_ptr = 0;
Yogesh Pande 4:5d91b0f5038c 2290 handle->ep_information_ptr->domain_name_len = 0;
Yogesh Pande 4:5d91b0f5038c 2291 }
Yogesh Pande 4:5d91b0f5038c 2292 return -1;
Yogesh Pande 4:5d91b0f5038c 2293 }
Yogesh Pande 4:5d91b0f5038c 2294
Yogesh Pande 4:5d91b0f5038c 2295 memcpy(handle->ep_information_ptr->endpoint_name_ptr, endpoint_info_ptr->endpoint_name_ptr, endpoint_info_ptr->endpoint_name_len);
Yogesh Pande 4:5d91b0f5038c 2296 handle->ep_information_ptr->endpoint_name_len = endpoint_info_ptr->endpoint_name_len;
Yogesh Pande 4:5d91b0f5038c 2297 }
Yogesh Pande 4:5d91b0f5038c 2298
Yogesh Pande 4:5d91b0f5038c 2299 handle->ep_information_ptr->binding_and_mode = endpoint_info_ptr->binding_and_mode;
Yogesh Pande 4:5d91b0f5038c 2300 handle->ep_information_ptr->ds_register_mode = endpoint_info_ptr->ds_register_mode;
Yogesh Pande 4:5d91b0f5038c 2301
Yogesh Pande 4:5d91b0f5038c 2302 handle->ep_information_ptr->location_ptr = 0;
Yogesh Pande 4:5d91b0f5038c 2303 handle->ep_information_ptr->location_len = 0;
Yogesh Pande 4:5d91b0f5038c 2304
Yogesh Pande 4:5d91b0f5038c 2305 return 0;
Yogesh Pande 4:5d91b0f5038c 2306 }
Yogesh Pande 4:5d91b0f5038c 2307
Yogesh Pande 4:5d91b0f5038c 2308 /* Wrapper */
Yogesh Pande 4:5d91b0f5038c 2309 sn_grs_resource_list_s *sn_nsdl_list_resource(struct nsdl_s *handle, uint16_t pathlen, uint8_t *path)
Yogesh Pande 4:5d91b0f5038c 2310 {
Yogesh Pande 4:5d91b0f5038c 2311 /* Check parameters */
Yogesh Pande 4:5d91b0f5038c 2312 if (handle == NULL) {
Yogesh Pande 4:5d91b0f5038c 2313 return NULL;
Yogesh Pande 4:5d91b0f5038c 2314 }
Yogesh Pande 4:5d91b0f5038c 2315
Yogesh Pande 4:5d91b0f5038c 2316 return sn_grs_list_resource(handle->grs, pathlen, path);
Yogesh Pande 4:5d91b0f5038c 2317 }
Yogesh Pande 4:5d91b0f5038c 2318
Yogesh Pande 4:5d91b0f5038c 2319 void sn_nsdl_free_resource_list(struct nsdl_s *handle, sn_grs_resource_list_s *list)
Yogesh Pande 4:5d91b0f5038c 2320 {
Yogesh Pande 4:5d91b0f5038c 2321 /* Check parameters */
Yogesh Pande 4:5d91b0f5038c 2322 if (handle == NULL) {
Yogesh Pande 4:5d91b0f5038c 2323 return;
Yogesh Pande 4:5d91b0f5038c 2324 }
Yogesh Pande 4:5d91b0f5038c 2325
Yogesh Pande 4:5d91b0f5038c 2326 sn_grs_free_resource_list(handle->grs, list);
Yogesh Pande 4:5d91b0f5038c 2327 }
Yogesh Pande 4:5d91b0f5038c 2328
Yogesh Pande 4:5d91b0f5038c 2329 extern int8_t sn_nsdl_update_resource(struct nsdl_s *handle, sn_nsdl_resource_info_s *res)
Yogesh Pande 4:5d91b0f5038c 2330 {
Yogesh Pande 4:5d91b0f5038c 2331 /* Check parameters */
Yogesh Pande 4:5d91b0f5038c 2332 if (handle == NULL) {
Yogesh Pande 4:5d91b0f5038c 2333 return SN_NSDL_FAILURE;
Yogesh Pande 4:5d91b0f5038c 2334 }
Yogesh Pande 4:5d91b0f5038c 2335
Yogesh Pande 4:5d91b0f5038c 2336 return sn_grs_update_resource(handle->grs, res);
Yogesh Pande 4:5d91b0f5038c 2337 }
Yogesh Pande 4:5d91b0f5038c 2338
Yogesh Pande 4:5d91b0f5038c 2339 extern int8_t sn_nsdl_send_coap_message(struct nsdl_s *handle, sn_nsdl_addr_s *address_ptr, sn_coap_hdr_s *coap_hdr_ptr)
Yogesh Pande 4:5d91b0f5038c 2340 {
Yogesh Pande 4:5d91b0f5038c 2341 /* Check parameters */
Yogesh Pande 4:5d91b0f5038c 2342 if (handle == NULL) {
Yogesh Pande 4:5d91b0f5038c 2343 return SN_NSDL_FAILURE;
Yogesh Pande 4:5d91b0f5038c 2344 }
Yogesh Pande 4:5d91b0f5038c 2345
Yogesh Pande 4:5d91b0f5038c 2346 return sn_grs_send_coap_message(handle, address_ptr, coap_hdr_ptr);
Yogesh Pande 4:5d91b0f5038c 2347 }
Yogesh Pande 4:5d91b0f5038c 2348
Yogesh Pande 4:5d91b0f5038c 2349 extern int8_t sn_nsdl_create_resource(struct nsdl_s *handle, sn_nsdl_resource_info_s *res)
Yogesh Pande 4:5d91b0f5038c 2350 {
Yogesh Pande 4:5d91b0f5038c 2351 /* Check parameters */
Yogesh Pande 4:5d91b0f5038c 2352 if (handle == NULL) {
Yogesh Pande 4:5d91b0f5038c 2353 return SN_NSDL_FAILURE;
Yogesh Pande 4:5d91b0f5038c 2354 }
Yogesh Pande 4:5d91b0f5038c 2355
Yogesh Pande 4:5d91b0f5038c 2356 return sn_grs_create_resource(handle->grs, res);
Yogesh Pande 4:5d91b0f5038c 2357 }
Yogesh Pande 4:5d91b0f5038c 2358
Yogesh Pande 4:5d91b0f5038c 2359 extern int8_t sn_nsdl_delete_resource(struct nsdl_s *handle, uint16_t pathlen, uint8_t *path)
Yogesh Pande 4:5d91b0f5038c 2360 {
Yogesh Pande 4:5d91b0f5038c 2361 /* Check parameters */
Yogesh Pande 4:5d91b0f5038c 2362 if (handle == NULL) {
Yogesh Pande 4:5d91b0f5038c 2363 return SN_NSDL_FAILURE;
Yogesh Pande 4:5d91b0f5038c 2364 }
Yogesh Pande 4:5d91b0f5038c 2365
Yogesh Pande 4:5d91b0f5038c 2366 return sn_grs_delete_resource(handle->grs, pathlen, path);
Yogesh Pande 4:5d91b0f5038c 2367 }
Yogesh Pande 4:5d91b0f5038c 2368 extern const sn_nsdl_resource_info_s *sn_nsdl_get_first_resource(struct nsdl_s *handle)
Yogesh Pande 4:5d91b0f5038c 2369 {
Yogesh Pande 4:5d91b0f5038c 2370 /* Check parameters */
Yogesh Pande 4:5d91b0f5038c 2371 if (handle == NULL) {
Yogesh Pande 4:5d91b0f5038c 2372 return NULL;
Yogesh Pande 4:5d91b0f5038c 2373 }
Yogesh Pande 4:5d91b0f5038c 2374
Yogesh Pande 4:5d91b0f5038c 2375 return sn_grs_get_first_resource(handle->grs);
Yogesh Pande 4:5d91b0f5038c 2376 }
Yogesh Pande 4:5d91b0f5038c 2377 extern const sn_nsdl_resource_info_s *sn_nsdl_get_next_resource(struct nsdl_s *handle, const sn_nsdl_resource_info_s *resource)
Yogesh Pande 4:5d91b0f5038c 2378 {
Yogesh Pande 4:5d91b0f5038c 2379 /* Check parameters */
Yogesh Pande 4:5d91b0f5038c 2380 if (handle == NULL) {
Yogesh Pande 4:5d91b0f5038c 2381 return NULL;
Yogesh Pande 4:5d91b0f5038c 2382 }
Yogesh Pande 4:5d91b0f5038c 2383
Yogesh Pande 4:5d91b0f5038c 2384 return sn_grs_get_next_resource(handle->grs, resource);
Yogesh Pande 4:5d91b0f5038c 2385 }
Yogesh Pande 4:5d91b0f5038c 2386
Yogesh Pande 4:5d91b0f5038c 2387 extern sn_coap_hdr_s *sn_nsdl_build_response(struct nsdl_s *handle, sn_coap_hdr_s *coap_packet_ptr, uint8_t msg_code)
Yogesh Pande 4:5d91b0f5038c 2388 {
Yogesh Pande 4:5d91b0f5038c 2389 if (handle == NULL) {
Yogesh Pande 4:5d91b0f5038c 2390 return NULL;
Yogesh Pande 4:5d91b0f5038c 2391 }
Yogesh Pande 4:5d91b0f5038c 2392
Yogesh Pande 4:5d91b0f5038c 2393 return sn_coap_build_response(handle->grs->coap, coap_packet_ptr, msg_code);
Yogesh Pande 4:5d91b0f5038c 2394 }
Yogesh Pande 4:5d91b0f5038c 2395
Yogesh Pande 4:5d91b0f5038c 2396 extern void sn_nsdl_release_allocated_coap_msg_mem(struct nsdl_s *handle, sn_coap_hdr_s *freed_coap_msg_ptr)
Yogesh Pande 4:5d91b0f5038c 2397 {
Yogesh Pande 4:5d91b0f5038c 2398 if (handle == NULL) {
Yogesh Pande 4:5d91b0f5038c 2399 return;
Yogesh Pande 4:5d91b0f5038c 2400 }
Yogesh Pande 4:5d91b0f5038c 2401
Yogesh Pande 4:5d91b0f5038c 2402 sn_coap_parser_release_allocated_coap_msg_mem(handle->grs->coap, freed_coap_msg_ptr);
Yogesh Pande 4:5d91b0f5038c 2403 }
Yogesh Pande 4:5d91b0f5038c 2404
Yogesh Pande 4:5d91b0f5038c 2405 extern int8_t sn_nsdl_set_retransmission_parameters(struct nsdl_s *handle,
Yogesh Pande 4:5d91b0f5038c 2406 uint8_t resending_count, uint8_t resending_interval)
Yogesh Pande 4:5d91b0f5038c 2407 {
Yogesh Pande 4:5d91b0f5038c 2408 if (handle == NULL) {
Yogesh Pande 4:5d91b0f5038c 2409 return SN_NSDL_FAILURE;
Yogesh Pande 4:5d91b0f5038c 2410 }
Yogesh Pande 4:5d91b0f5038c 2411 return sn_coap_protocol_set_retransmission_parameters(handle->grs->coap,
Yogesh Pande 4:5d91b0f5038c 2412 resending_count,resending_interval);
Yogesh Pande 4:5d91b0f5038c 2413 }
Yogesh Pande 4:5d91b0f5038c 2414
Yogesh Pande 4:5d91b0f5038c 2415 extern int8_t sn_nsdl_set_retransmission_buffer(struct nsdl_s *handle,
Yogesh Pande 4:5d91b0f5038c 2416 uint8_t buffer_size_messages, uint16_t buffer_size_bytes)
Yogesh Pande 4:5d91b0f5038c 2417 {
Yogesh Pande 4:5d91b0f5038c 2418 if (handle == NULL) {
Yogesh Pande 4:5d91b0f5038c 2419 return SN_NSDL_FAILURE;
Yogesh Pande 4:5d91b0f5038c 2420 }
Yogesh Pande 4:5d91b0f5038c 2421 return sn_coap_protocol_set_retransmission_buffer(handle->grs->coap,
Yogesh Pande 4:5d91b0f5038c 2422 buffer_size_messages, buffer_size_bytes);
Yogesh Pande 4:5d91b0f5038c 2423 }
Yogesh Pande 4:5d91b0f5038c 2424
Yogesh Pande 4:5d91b0f5038c 2425 extern int8_t sn_nsdl_set_block_size(struct nsdl_s *handle, uint16_t block_size)
Yogesh Pande 4:5d91b0f5038c 2426 {
Yogesh Pande 4:5d91b0f5038c 2427 if (handle == NULL) {
Yogesh Pande 4:5d91b0f5038c 2428 return SN_NSDL_FAILURE;
Yogesh Pande 4:5d91b0f5038c 2429 }
Yogesh Pande 4:5d91b0f5038c 2430 return sn_coap_protocol_set_block_size(handle->grs->coap, block_size);
Yogesh Pande 4:5d91b0f5038c 2431 }
Yogesh Pande 4:5d91b0f5038c 2432
Yogesh Pande 4:5d91b0f5038c 2433 extern int8_t sn_nsdl_set_duplicate_buffer_size(struct nsdl_s *handle, uint8_t message_count)
Yogesh Pande 4:5d91b0f5038c 2434 {
Yogesh Pande 4:5d91b0f5038c 2435 if (handle == NULL) {
Yogesh Pande 4:5d91b0f5038c 2436 return SN_NSDL_FAILURE;
Yogesh Pande 4:5d91b0f5038c 2437 }
Yogesh Pande 4:5d91b0f5038c 2438 return sn_coap_protocol_set_duplicate_buffer_size(handle->grs->coap, message_count);
Yogesh Pande 4:5d91b0f5038c 2439 }
Yogesh Pande 4:5d91b0f5038c 2440