Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of OmniWheels by
sn_coap_protocol_internal.h
00001 /* 00002 * Copyright (c) 2011-2015 ARM Limited. All rights reserved. 00003 * SPDX-License-Identifier: Apache-2.0 00004 * Licensed under the Apache License, Version 2.0 (the License); you may 00005 * not use this file except in compliance with the License. 00006 * You may obtain a copy of the License at 00007 * 00008 * http://www.apache.org/licenses/LICENSE-2.0 00009 * 00010 * Unless required by applicable law or agreed to in writing, software 00011 * distributed under the License is distributed on an AS IS BASIS, WITHOUT 00012 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 00013 * See the License for the specific language governing permissions and 00014 * limitations under the License. 00015 */ 00016 00017 /** 00018 * \file sn_coap_protocol_internal.h 00019 * 00020 * \brief Header file for CoAP Protocol part 00021 * 00022 */ 00023 00024 #ifndef SN_COAP_PROTOCOL_INTERNAL_H_ 00025 #define SN_COAP_PROTOCOL_INTERNAL_H_ 00026 00027 #include "ns_list.h" 00028 #include "sn_coap_header_internal.h" 00029 #include "mbed-coap/sn_config.h" 00030 00031 #ifdef __cplusplus 00032 extern "C" { 00033 #endif 00034 00035 struct sn_coap_hdr_; 00036 00037 /* * * * * * * * * * * */ 00038 /* * * * DEFINES * * * */ 00039 /* * * * * * * * * * * */ 00040 00041 /* * For Message resending * */ 00042 #ifdef SN_COAP_DISABLE_RESENDINGS 00043 #define ENABLE_RESENDINGS 0 /* Disable resendings */ 00044 #else 00045 #define ENABLE_RESENDINGS 1 /**< Enable / Disable resending from library in building */ 00046 #endif 00047 00048 #define SN_COAP_RESENDING_MAX_COUNT 3 /**< Default number of re-sendings */ 00049 00050 #ifdef YOTTA_CFG_COAP_RESENDING_QUEUE_SIZE_MSGS 00051 #define SN_COAP_RESENDING_QUEUE_SIZE_MSGS YOTTA_CFG_COAP_RESENDING_QUEUE_SIZE_MSGS 00052 #elif defined MBED_CONF_MBED_CLIENT_SN_COAP_RESENDING_QUEUE_SIZE_MSGS 00053 #define SN_COAP_RESENDING_QUEUE_SIZE_MSGS MBED_CONF_MBED_CLIENT_SN_COAP_RESENDING_QUEUE_SIZE_MSGS 00054 #endif 00055 00056 #ifndef SN_COAP_RESENDING_QUEUE_SIZE_MSGS 00057 #define SN_COAP_RESENDING_QUEUE_SIZE_MSGS 2 /**< Default re-sending queue size - defines how many messages can be stored. Setting this to 0 disables feature */ 00058 #endif 00059 00060 #ifdef YOTTA_CFG_COAP_RESENDING_QUEUE_SIZE_BYTES 00061 #define SN_COAP_RESENDING_QUEUE_SIZE_BYTES YOTTA_CFG_COAP_RESENDING_QUEUE_SIZE_BYTES 00062 #elif defined MBED_CONF_MBED_CLIENT_SN_COAP_RESENDING_QUEUE_SIZE_BYTES 00063 #define SN_COAP_RESENDING_QUEUE_SIZE_BYTES MBED_CONF_MBED_CLIENT_SN_COAP_RESENDING_QUEUE_SIZE_BYTES 00064 #endif 00065 00066 #ifndef SN_COAP_RESENDING_QUEUE_SIZE_BYTES 00067 #define SN_COAP_RESENDING_QUEUE_SIZE_BYTES 0 /**< Default re-sending queue size - defines size of the re-sending buffer. Setting this to 0 disables feature */ 00068 #endif 00069 00070 #define DEFAULT_RESPONSE_TIMEOUT 10 /**< Default re-sending timeout as seconds */ 00071 00072 /* These parameters sets maximum values application can set with API */ 00073 #define SN_COAP_MAX_ALLOWED_RESENDING_COUNT 6 /**< Maximum allowed count of re-sending */ 00074 #define SN_COAP_MAX_ALLOWED_RESENDING_BUFF_SIZE_MSGS 6 /**< Maximum allowed number of saved re-sending messages */ 00075 #define SN_COAP_MAX_ALLOWED_RESENDING_BUFF_SIZE_BYTES 512 /**< Maximum allowed size of re-sending buffer */ 00076 #define SN_COAP_MAX_ALLOWED_RESPONSE_TIMEOUT 40 /**< Maximum allowed re-sending timeout */ 00077 00078 #define RESPONSE_RANDOM_FACTOR 1.5 /**< Resending random factor, value is specified in IETF CoAP specification */ 00079 00080 /* * For Message duplication detecting * */ 00081 00082 /* Init value for the maximum count of messages to be stored for duplication detection */ 00083 /* Setting of this value to 0 will disable duplication check, also reduce use of ROM memory */ 00084 00085 // Keep the old flag to maintain backward compatibility 00086 #ifndef SN_COAP_DUPLICATION_MAX_MSGS_COUNT 00087 #define SN_COAP_DUPLICATION_MAX_MSGS_COUNT 0 00088 #endif 00089 00090 #ifdef YOTTA_CFG_COAP_DUPLICATION_MAX_MSGS_COUNT 00091 #define SN_COAP_DUPLICATION_MAX_MSGS_COUNT YOTTA_CFG_COAP_DUPLICATION_MAX_MSGS_COUNT 00092 #elif defined MBED_CONF_MBED_CLIENT_SN_COAP_DUPLICATION_MAX_MSGS_COUNT 00093 #define SN_COAP_DUPLICATION_MAX_MSGS_COUNT MBED_CONF_MBED_CLIENT_SN_COAP_DUPLICATION_MAX_MSGS_COUNT 00094 #endif 00095 00096 00097 00098 /* Maximum allowed number of saved messages for duplicate searching */ 00099 #define SN_COAP_MAX_ALLOWED_DUPLICATION_MESSAGE_COUNT 6 00100 00101 /* Maximum time in seconds of messages to be stored for duplication detection */ 00102 #define SN_COAP_DUPLICATION_MAX_TIME_MSGS_STORED 60 /* RESPONSE_TIMEOUT * RESPONSE_RANDOM_FACTOR * (2 ^ MAX_RETRANSMIT - 1) + the expected maximum round trip time */ 00103 00104 /* * For Message blockwising * */ 00105 00106 /* Init value for the maximum payload size to be sent and received at one blockwise message */ 00107 /* Setting of this value to 0 will disable this feature, and also reduce use of ROM memory */ 00108 /* Note: This define is common for both received and sent Blockwise messages */ 00109 00110 #ifdef YOTTA_CFG_COAP_MAX_BLOCKWISE_PAYLOAD_SIZE 00111 #define SN_COAP_MAX_BLOCKWISE_PAYLOAD_SIZE YOTTA_CFG_COAP_MAX_BLOCKWISE_PAYLOAD_SIZE 00112 #elif defined MBED_CONF_MBED_CLIENT_SN_COAP_MAX_BLOCKWISE_PAYLOAD_SIZE 00113 #define SN_COAP_MAX_BLOCKWISE_PAYLOAD_SIZE MBED_CONF_MBED_CLIENT_SN_COAP_MAX_BLOCKWISE_PAYLOAD_SIZE 00114 #endif 00115 00116 #ifndef SN_COAP_MAX_BLOCKWISE_PAYLOAD_SIZE 00117 #define SN_COAP_MAX_BLOCKWISE_PAYLOAD_SIZE 0 /**< Must be 2^x and x is at least 4. Suitable values: 0, 16, 32, 64, 128, 256, 512 and 1024 */ 00118 #endif 00119 00120 #ifdef MBED_CONF_MBED_CLIENT_SN_COAP_BLOCKWISE_MAX_TIME_DATA_STORED 00121 #define SN_COAP_BLOCKWISE_MAX_TIME_DATA_STORED MBED_CONF_MBED_CLIENT_SN_COAP_BLOCKWISE_MAX_TIME_DATA_STORED 00122 #endif 00123 00124 #ifndef SN_COAP_BLOCKWISE_MAX_TIME_DATA_STORED 00125 #define SN_COAP_BLOCKWISE_MAX_TIME_DATA_STORED 60 /**< Maximum time in seconds of data (messages and payload) to be stored for blockwising */ 00126 #endif 00127 00128 #ifdef YOTTA_CFG_COAP_MAX_INCOMING_BLOCK_MESSAGE_SIZE 00129 #define SN_COAP_MAX_INCOMING_BLOCK_MESSAGE_SIZE YOTTA_CFG_COAP_MAX_INCOMING_BLOCK_MESSAGE_SIZE 00130 #elif defined MBED_CONF_MBED_CLIENT_SN_COAP_MAX_INCOMING_MESSAGE_SIZE 00131 #define SN_COAP_MAX_INCOMING_BLOCK_MESSAGE_SIZE MBED_CONF_MBED_CLIENT_SN_COAP_MAX_INCOMING_MESSAGE_SIZE 00132 #endif 00133 00134 #ifndef SN_COAP_MAX_INCOMING_BLOCK_MESSAGE_SIZE 00135 #define SN_COAP_MAX_INCOMING_BLOCK_MESSAGE_SIZE UINT16_MAX 00136 #endif 00137 00138 /* * For Option handling * */ 00139 #define COAP_OPTION_MAX_AGE_DEFAULT 60 /**< Default value of Max-Age if option not present */ 00140 #define COAP_OPTION_URI_PORT_NONE (-1) /**< Internal value to represent no Uri-Port option */ 00141 #define COAP_OPTION_BLOCK_NONE (-1) /**< Internal value to represent no Block1/2 option */ 00142 00143 00144 #if SN_COAP_MAX_BLOCKWISE_PAYLOAD_SIZE /* If Message blockwising is not used at all, this part of code will not be compiled */ 00145 int8_t prepare_blockwise_message(struct coap_s *handle, struct sn_coap_hdr_ *coap_hdr_ptr); 00146 #endif 00147 00148 /* Structure which is stored to Linked list for message sending purposes */ 00149 typedef struct coap_send_msg_ { 00150 uint8_t resending_counter; /* Tells how many times message is still tried to resend */ 00151 uint32_t resending_time; /* Tells next resending time */ 00152 00153 sn_nsdl_transmit_s *send_msg_ptr; 00154 00155 struct coap_s *coap; /* CoAP library handle */ 00156 void *param; /* Extra parameter that will be passed to TX/RX callback functions */ 00157 00158 ns_list_link_t link; 00159 } coap_send_msg_s; 00160 00161 typedef NS_LIST_HEAD (coap_send_msg_s, link) coap_send_msg_list_t; 00162 00163 /* Structure which is stored to Linked list for message duplication detection purposes */ 00164 typedef struct coap_duplication_info_ { 00165 uint32_t timestamp; /* Tells when duplication information is stored to Linked list */ 00166 uint16_t msg_id; 00167 uint16_t packet_len; 00168 uint8_t *packet_ptr; 00169 struct coap_s *coap; /* CoAP library handle */ 00170 sn_nsdl_addr_s *address; 00171 void *param; 00172 ns_list_link_t link; 00173 } coap_duplication_info_s; 00174 00175 typedef NS_LIST_HEAD (coap_duplication_info_s, link) coap_duplication_info_list_t; 00176 00177 /* Structure which is stored to Linked list for blockwise messages sending purposes */ 00178 typedef struct coap_blockwise_msg_ { 00179 uint32_t timestamp; /* Tells when Blockwise message is stored to Linked list */ 00180 00181 sn_coap_hdr_s *coap_msg_ptr; 00182 struct coap_s *coap; /* CoAP library handle */ 00183 00184 ns_list_link_t link; 00185 } coap_blockwise_msg_s; 00186 00187 typedef NS_LIST_HEAD (coap_blockwise_msg_s, link) coap_blockwise_msg_list_t; 00188 00189 /* Structure which is stored to Linked list for blockwise messages receiving purposes */ 00190 typedef struct coap_blockwise_payload_ { 00191 uint32_t timestamp; /* Tells when Payload is stored to Linked list */ 00192 00193 uint8_t addr_len; 00194 uint8_t *addr_ptr; 00195 uint16_t port; 00196 uint32_t block_number; 00197 00198 uint16_t payload_len; 00199 uint8_t *payload_ptr; 00200 struct coap_s *coap; /* CoAP library handle */ 00201 00202 ns_list_link_t link; 00203 } coap_blockwise_payload_s; 00204 00205 typedef NS_LIST_HEAD (coap_blockwise_payload_s, link) coap_blockwise_payload_list_t; 00206 00207 struct coap_s { 00208 void *(*sn_coap_protocol_malloc)(uint16_t); 00209 void (*sn_coap_protocol_free)(void *); 00210 00211 uint8_t (*sn_coap_tx_callback)(uint8_t *, uint16_t, sn_nsdl_addr_s *, void *); 00212 int8_t (*sn_coap_rx_callback)(sn_coap_hdr_s *, sn_nsdl_addr_s *, void *); 00213 00214 #if ENABLE_RESENDINGS /* If Message resending is not used at all, this part of code will not be compiled */ 00215 coap_send_msg_list_t linked_list_resent_msgs; /* Active resending messages are stored to this Linked list */ 00216 uint16_t count_resent_msgs; 00217 #endif 00218 00219 #if SN_COAP_DUPLICATION_MAX_MSGS_COUNT /* If Message duplication detection is not used at all, this part of code will not be compiled */ 00220 coap_duplication_info_list_t linked_list_duplication_msgs; /* Messages for duplicated messages detection is stored to this Linked list */ 00221 uint16_t count_duplication_msgs; 00222 #endif 00223 00224 #if SN_COAP_MAX_BLOCKWISE_PAYLOAD_SIZE /* If Message blockwise is not used at all, this part of code will not be compiled */ 00225 coap_blockwise_msg_list_t linked_list_blockwise_sent_msgs; /* Blockwise message to to be sent is stored to this Linked list */ 00226 coap_blockwise_payload_list_t linked_list_blockwise_received_payloads; /* Blockwise payload to to be received is stored to this Linked list */ 00227 #endif 00228 00229 uint32_t system_time; /* System time seconds */ 00230 uint16_t sn_coap_block_data_size; 00231 uint8_t sn_coap_resending_queue_msgs; 00232 uint32_t sn_coap_resending_queue_bytes; 00233 uint8_t sn_coap_resending_count; 00234 uint8_t sn_coap_resending_intervall; 00235 uint8_t sn_coap_duplication_buffer_size; 00236 uint8_t sn_coap_internal_block2_resp_handling; /* If this is set then coap itself sends a next GET request automatically */ 00237 }; 00238 00239 #ifdef __cplusplus 00240 } 00241 #endif 00242 00243 #endif /* SN_COAP_PROTOCOL_INTERNAL_H_ */ 00244
Generated on Fri Jul 22 2022 04:54:00 by
1.7.2
