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 mbed-client-c 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 00030 #ifdef __cplusplus 00031 extern "C" { 00032 #endif 00033 00034 00035 /* * * * * * * * * * * */ 00036 /* * * * DEFINES * * * */ 00037 /* * * * * * * * * * * */ 00038 00039 /* * For Message resending * */ 00040 #define ENABLE_RESENDINGS 1 /**< Enable / Disable resending from library in building */ 00041 00042 #define SN_COAP_RESENDING_MAX_COUNT 3 /**< Default number of re-sendings */ 00043 #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 */ 00044 #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 */ 00045 #define DEFAULT_RESPONSE_TIMEOUT 10 /**< Default re-sending timeout as seconds */ 00046 00047 /* These parameters sets maximum values application can set with API */ 00048 #define SN_COAP_MAX_ALLOWED_RESENDING_COUNT 6 /**< Maximum allowed count of re-sending */ 00049 #define SN_COAP_MAX_ALLOWED_RESENDING_BUFF_SIZE_MSGS 6 /**< Maximum allowed number of saved re-sending messages */ 00050 #define SN_COAP_MAX_ALLOWED_RESENDING_BUFF_SIZE_BYTES 512 /**< Maximum allowed size of re-sending buffer */ 00051 #define SN_COAP_MAX_ALLOWED_RESPONSE_TIMEOUT 40 /**< Maximum allowed re-sending timeout */ 00052 00053 #define RESPONSE_RANDOM_FACTOR 1 /**< Resending random factor, value is specified in IETF CoAP specification */ 00054 00055 /* * For Message duplication detecting * */ 00056 00057 /* Init value for the maximum count of messages to be stored for duplication detection */ 00058 /* Setting of this value to 0 will disable duplication check, also reduce use of ROM memory */ 00059 #ifndef YOTTA_CFG_COAP_DUPLICATION_MAX_MSGS_COUNT 00060 #define YOTTA_CFG_COAP_DUPLICATION_MAX_MSGS_COUNT 0 00061 #endif 00062 /* Maximum allowed number of saved messages for duplicate searching */ 00063 #define SN_COAP_MAX_ALLOWED_DUPLICATION_MESSAGE_COUNT 6 00064 00065 /* Maximum time in seconds of messages to be stored for duplication detection */ 00066 #define SN_COAP_DUPLICATION_MAX_TIME_MSGS_STORED 60 /* RESPONSE_TIMEOUT * RESPONSE_RANDOM_FACTOR * (2 ^ MAX_RETRANSMIT - 1) + the expected maximum round trip time */ 00067 00068 /* * For Message blockwising * */ 00069 00070 /* Init value for the maximum payload size to be sent and received at one blockwise message */ 00071 /* Setting of this value to 0 will disable this feature, and also reduce use of ROM memory */ 00072 /* Note: Current Coap implementation supports Blockwise transfers specification version draft-ietf-core-block-03 */ 00073 /* Note: This define is common for both received and sent Blockwise messages */ 00074 #ifndef YOTTA_CFG_COAP_MAX_BLOCKWISE_PAYLOAD_SIZE 00075 #define YOTTA_CFG_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 */ 00076 #endif 00077 00078 #ifndef SN_COAP_BLOCKWISE_MAX_TIME_DATA_STORED 00079 #define SN_COAP_BLOCKWISE_MAX_TIME_DATA_STORED 10 /**< Maximum time in seconds of data (messages and payload) to be stored for blockwising */ 00080 #endif 00081 00082 00083 00084 /* * * * * * * * * * * * * * */ 00085 /* * * * ENUMERATIONS * * * */ 00086 /* * * * * * * * * * * * * * */ 00087 00088 /* * * * * * * * * * * * * */ 00089 /* * * * STRUCTURES * * * */ 00090 /* * * * * * * * * * * * * */ 00091 00092 00093 00094 00095 /* Structure which is stored to Linked list for message sending purposes */ 00096 typedef struct coap_send_msg_ { 00097 uint8_t resending_counter; /* Tells how many times message is still tried to resend */ 00098 uint32_t resending_time; /* Tells next resending time */ 00099 00100 sn_nsdl_transmit_s *send_msg_ptr; 00101 00102 struct coap_s *coap; /* CoAP library handle */ 00103 void *param; /* Extra parameter that will be passed to TX/RX callback functions */ 00104 00105 ns_list_link_t link; 00106 } coap_send_msg_s; 00107 00108 typedef NS_LIST_HEAD(coap_send_msg_s, link) coap_send_msg_list_t; 00109 00110 /* Structure which is stored to Linked list for message duplication detection purposes */ 00111 typedef struct coap_duplication_info_ { 00112 uint32_t timestamp; /* Tells when duplication information is stored to Linked list */ 00113 00114 uint8_t addr_len; 00115 uint8_t *addr_ptr; 00116 uint16_t port; 00117 00118 uint16_t msg_id; 00119 00120 struct coap_s *coap; /* CoAP library handle */ 00121 00122 ns_list_link_t link; 00123 } coap_duplication_info_s; 00124 00125 typedef NS_LIST_HEAD(coap_duplication_info_s, link) coap_duplication_info_list_t; 00126 00127 /* Structure which is stored to Linked list for blockwise messages sending purposes */ 00128 typedef struct coap_blockwise_msg_ { 00129 uint32_t timestamp; /* Tells when Blockwise message is stored to Linked list */ 00130 00131 sn_coap_hdr_s *coap_msg_ptr; 00132 struct coap_s *coap; /* CoAP library handle */ 00133 00134 ns_list_link_t link; 00135 } coap_blockwise_msg_s; 00136 00137 typedef NS_LIST_HEAD(coap_blockwise_msg_s, link) coap_blockwise_msg_list_t; 00138 00139 /* Structure which is stored to Linked list for blockwise messages receiving purposes */ 00140 typedef struct coap_blockwise_payload_ { 00141 uint32_t timestamp; /* Tells when Payload is stored to Linked list */ 00142 00143 uint8_t addr_len; 00144 uint8_t *addr_ptr; 00145 uint16_t port; 00146 00147 uint16_t payload_len; 00148 uint8_t *payload_ptr; 00149 struct coap_s *coap; /* CoAP library handle */ 00150 00151 ns_list_link_t link; 00152 } coap_blockwise_payload_s; 00153 00154 typedef NS_LIST_HEAD(coap_blockwise_payload_s, link) coap_blockwise_payload_list_t; 00155 00156 struct coap_s { 00157 void *(*sn_coap_protocol_malloc)(uint16_t); 00158 void (*sn_coap_protocol_free)(void *); 00159 00160 uint8_t (*sn_coap_tx_callback)(uint8_t *, uint16_t, sn_nsdl_addr_s *, void *); 00161 int8_t (*sn_coap_rx_callback)(sn_coap_hdr_s *, sn_nsdl_addr_s *, void *); 00162 00163 #if ENABLE_RESENDINGS /* If Message resending is not used at all, this part of code will not be compiled */ 00164 coap_send_msg_list_t linked_list_resent_msgs; /* Active resending messages are stored to this Linked list */ 00165 uint16_t count_resent_msgs; 00166 #endif 00167 00168 #if YOTTA_CFG_COAP_DUPLICATION_MAX_MSGS_COUNT /* If Message duplication detection is not used at all, this part of code will not be compiled */ 00169 coap_duplication_info_list_t linked_list_duplication_msgs; /* Messages for duplicated messages detection is stored to this Linked list */ 00170 uint16_t count_duplication_msgs; 00171 #endif 00172 00173 #if YOTTA_CFG_COAP_MAX_BLOCKWISE_PAYLOAD_SIZE /* If Message blockwise is not used at all, this part of code will not be compiled */ 00174 coap_blockwise_msg_list_t linked_list_blockwise_sent_msgs; /* Blockwise message to to be sent is stored to this Linked list */ 00175 coap_blockwise_payload_list_t linked_list_blockwise_received_payloads; /* Blockwise payload to to be received is stored to this Linked list */ 00176 #endif 00177 00178 uint32_t system_time; /* System time seconds */ 00179 uint16_t sn_coap_block_data_size; 00180 uint8_t sn_coap_resending_queue_msgs; 00181 uint8_t sn_coap_resending_queue_bytes; 00182 uint8_t sn_coap_resending_count; 00183 uint8_t sn_coap_resending_intervall; 00184 uint8_t sn_coap_duplication_buffer_size; 00185 }; 00186 00187 #ifdef __cplusplus 00188 } 00189 #endif 00190 00191 #endif /* SN_COAP_PROTOCOL_INTERNAL_H_ */ 00192
Generated on Wed Jul 13 2022 17:43:56 by
1.7.2
