Kev Mann / mbed-dev-OS5_10_4
Committer:
kevman
Date:
Wed Mar 13 11:03:24 2019 +0000
Revision:
2:7aab896b1a3b
Parent:
0:38ceb79fef03
2019-03-13

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kevman 0:38ceb79fef03 1 /*
kevman 0:38ceb79fef03 2 * Copyright (c) 2011-2015 ARM Limited. All rights reserved.
kevman 0:38ceb79fef03 3 * SPDX-License-Identifier: Apache-2.0
kevman 0:38ceb79fef03 4 * Licensed under the Apache License, Version 2.0 (the License); you may
kevman 0:38ceb79fef03 5 * not use this file except in compliance with the License.
kevman 0:38ceb79fef03 6 * You may obtain a copy of the License at
kevman 0:38ceb79fef03 7 *
kevman 0:38ceb79fef03 8 * http://www.apache.org/licenses/LICENSE-2.0
kevman 0:38ceb79fef03 9 *
kevman 0:38ceb79fef03 10 * Unless required by applicable law or agreed to in writing, software
kevman 0:38ceb79fef03 11 * distributed under the License is distributed on an AS IS BASIS, WITHOUT
kevman 0:38ceb79fef03 12 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
kevman 0:38ceb79fef03 13 * See the License for the specific language governing permissions and
kevman 0:38ceb79fef03 14 * limitations under the License.
kevman 0:38ceb79fef03 15 */
kevman 0:38ceb79fef03 16
kevman 0:38ceb79fef03 17 /**
kevman 0:38ceb79fef03 18 * \file sn_coap_protocol.h
kevman 0:38ceb79fef03 19 *
kevman 0:38ceb79fef03 20 * \brief CoAP C-library User protocol interface header file
kevman 0:38ceb79fef03 21 */
kevman 0:38ceb79fef03 22
kevman 0:38ceb79fef03 23 #ifdef __cplusplus
kevman 0:38ceb79fef03 24 extern "C" {
kevman 0:38ceb79fef03 25 #endif
kevman 0:38ceb79fef03 26
kevman 0:38ceb79fef03 27 #ifndef SN_COAP_PROTOCOL_H_
kevman 0:38ceb79fef03 28 #define SN_COAP_PROTOCOL_H_
kevman 0:38ceb79fef03 29
kevman 0:38ceb79fef03 30 #include "sn_coap_header.h"
kevman 0:38ceb79fef03 31
kevman 0:38ceb79fef03 32 /**
kevman 0:38ceb79fef03 33 * \fn struct coap_s *sn_coap_protocol_init(void* (*used_malloc_func_ptr)(uint16_t), void (*used_free_func_ptr)(void*),
kevman 0:38ceb79fef03 34 uint8_t (*used_tx_callback_ptr)(sn_nsdl_capab_e , uint8_t *, uint16_t, sn_nsdl_addr_s *),
kevman 0:38ceb79fef03 35 int8_t (*used_rx_callback_ptr)(sn_coap_hdr_s *, sn_nsdl_addr_s *)
kevman 0:38ceb79fef03 36 *
kevman 0:38ceb79fef03 37 * \brief Initializes CoAP Protocol part. When using libNsdl, sn_nsdl_init() calls this function.
kevman 0:38ceb79fef03 38 *
kevman 0:38ceb79fef03 39 * \param *used_malloc_func_ptr is function pointer for used memory allocation function.
kevman 0:38ceb79fef03 40 *
kevman 0:38ceb79fef03 41 * \param *used_free_func_ptr is function pointer for used memory free function.
kevman 0:38ceb79fef03 42 *
kevman 0:38ceb79fef03 43 * \param *used_tx_callback_ptr function callback pointer to tx function for sending coap messages
kevman 0:38ceb79fef03 44 *
kevman 0:38ceb79fef03 45 * \param *used_rx_callback_ptr used to return CoAP header struct with status COAP_STATUS_BUILDER_MESSAGE_SENDING_FAILED
kevman 0:38ceb79fef03 46 * when re-sendings exceeded. If set to NULL, no error message is returned.
kevman 0:38ceb79fef03 47 *
kevman 0:38ceb79fef03 48 * \return Pointer to handle when success
kevman 0:38ceb79fef03 49 * Null if failed
kevman 0:38ceb79fef03 50 */
kevman 0:38ceb79fef03 51
kevman 0:38ceb79fef03 52 extern struct coap_s *sn_coap_protocol_init(void *(*used_malloc_func_ptr)(uint16_t), void (*used_free_func_ptr)(void *),
kevman 0:38ceb79fef03 53 uint8_t (*used_tx_callback_ptr)(uint8_t *, uint16_t, sn_nsdl_addr_s *, void *),
kevman 0:38ceb79fef03 54 int8_t (*used_rx_callback_ptr)(sn_coap_hdr_s *, sn_nsdl_addr_s *, void *));
kevman 0:38ceb79fef03 55
kevman 0:38ceb79fef03 56 /**
kevman 0:38ceb79fef03 57 * \fn int8_t sn_coap_protocol_destroy(void)
kevman 0:38ceb79fef03 58 *
kevman 0:38ceb79fef03 59 * \brief Frees all memory from CoAP protocol part
kevman 0:38ceb79fef03 60 *
kevman 0:38ceb79fef03 61 * \param *handle Pointer to CoAP library handle
kevman 0:38ceb79fef03 62 *
kevman 0:38ceb79fef03 63 * \return Return value is always 0
kevman 0:38ceb79fef03 64 */
kevman 0:38ceb79fef03 65 extern int8_t sn_coap_protocol_destroy(struct coap_s *handle);
kevman 0:38ceb79fef03 66
kevman 0:38ceb79fef03 67 /**
kevman 0:38ceb79fef03 68 * \fn int16_t sn_coap_protocol_build(struct coap_s *handle, sn_nsdl_addr_s *dst_addr_ptr, uint8_t *dst_packet_data_ptr, sn_coap_hdr_s *src_coap_msg_ptr, void *param)
kevman 0:38ceb79fef03 69 *
kevman 0:38ceb79fef03 70 * \brief Builds Packet data from given CoAP header structure to be sent
kevman 0:38ceb79fef03 71 *
kevman 0:38ceb79fef03 72 * \param *dst_addr_ptr is pointer to destination address where CoAP message
kevman 0:38ceb79fef03 73 * will be sent (CoAP builder needs that information for message resending purposes)
kevman 0:38ceb79fef03 74 *
kevman 0:38ceb79fef03 75 * \param *dst_packet_data_ptr is pointer to destination of built Packet data
kevman 0:38ceb79fef03 76 *
kevman 0:38ceb79fef03 77 * \param *src_coap_msg_ptr is pointer to source of built Packet data
kevman 0:38ceb79fef03 78 *
kevman 0:38ceb79fef03 79 * \param param void pointer that will be passed to tx/rx function callback when those are called.
kevman 0:38ceb79fef03 80 *
kevman 0:38ceb79fef03 81 * \return Return value is byte count of built Packet data.\n
kevman 0:38ceb79fef03 82 * Note: If message is blockwised, all payload is not sent at the same time\n
kevman 0:38ceb79fef03 83 * In failure cases:\n
kevman 0:38ceb79fef03 84 * -1 = Failure in CoAP header structure\n
kevman 0:38ceb79fef03 85 * -2 = Failure in given pointer (= NULL)\n
kevman 0:38ceb79fef03 86 * -3 = Failure in Reset message\n
kevman 0:38ceb79fef03 87 * -4 = Failure in Resending message store\n
kevman 0:38ceb79fef03 88 * If there is not enough memory (or User given limit exceeded) for storing
kevman 0:38ceb79fef03 89 * resending messages, situation is ignored.
kevman 0:38ceb79fef03 90 */
kevman 0:38ceb79fef03 91 extern int16_t sn_coap_protocol_build(struct coap_s *handle, sn_nsdl_addr_s *dst_addr_ptr, uint8_t *dst_packet_data_ptr, sn_coap_hdr_s *src_coap_msg_ptr, void *param);
kevman 0:38ceb79fef03 92
kevman 0:38ceb79fef03 93 /**
kevman 0:38ceb79fef03 94 * \fn sn_coap_hdr_s *sn_coap_protocol_parse(struct coap_s *handle, sn_nsdl_addr_s *src_addr_ptr, uint16_t packet_data_len, uint8_t *packet_data_ptr)
kevman 0:38ceb79fef03 95 *
kevman 0:38ceb79fef03 96 * \brief Parses received CoAP message from given Packet data
kevman 0:38ceb79fef03 97 *
kevman 0:38ceb79fef03 98 * \param *src_addr_ptr is pointer to source address of received CoAP message
kevman 0:38ceb79fef03 99 * (CoAP parser needs that information for Message acknowledgement)
kevman 0:38ceb79fef03 100 *
kevman 0:38ceb79fef03 101 * \param *handle Pointer to CoAP library handle
kevman 0:38ceb79fef03 102 *
kevman 0:38ceb79fef03 103 * \param packet_data_len is length of given Packet data to be parsed to CoAP message
kevman 0:38ceb79fef03 104 *
kevman 0:38ceb79fef03 105 * \param *packet_data_ptr is pointer to source of Packet data to be parsed to CoAP message
kevman 0:38ceb79fef03 106 *
kevman 0:38ceb79fef03 107 * \param param void pointer that will be passed to tx/rx function callback when those are called.
kevman 0:38ceb79fef03 108 *
kevman 0:38ceb79fef03 109 * \return Return value is pointer to parsed CoAP message structure. This structure includes also coap_status field.\n
kevman 0:38ceb79fef03 110 * In following failure cases NULL is returned:\n
kevman 0:38ceb79fef03 111 * -Given NULL pointer\n
kevman 0:38ceb79fef03 112 * -Failure in parsed header of non-confirmable message\ŋ
kevman 0:38ceb79fef03 113 * -Out of memory (malloc() returns NULL)
kevman 0:38ceb79fef03 114 */
kevman 0:38ceb79fef03 115 extern sn_coap_hdr_s *sn_coap_protocol_parse(struct coap_s *handle, sn_nsdl_addr_s *src_addr_ptr, uint16_t packet_data_len, uint8_t *packet_data_ptr, void *);
kevman 0:38ceb79fef03 116
kevman 0:38ceb79fef03 117 /**
kevman 0:38ceb79fef03 118 * \fn int8_t sn_coap_protocol_exec(struct coap_s *handle, uint32_t current_time)
kevman 0:38ceb79fef03 119 *
kevman 0:38ceb79fef03 120 * \brief Sends CoAP messages from re-sending queue, if there is any.
kevman 0:38ceb79fef03 121 * Cleans also old messages from the duplication list and from block receiving list
kevman 0:38ceb79fef03 122 *
kevman 0:38ceb79fef03 123 * This function can be called e.g. once in a second but also more frequently.
kevman 0:38ceb79fef03 124 *
kevman 0:38ceb79fef03 125 * \param *handle Pointer to CoAP library handle
kevman 0:38ceb79fef03 126 *
kevman 0:38ceb79fef03 127 * \param current_time is System time in seconds. This time is
kevman 0:38ceb79fef03 128 * used for message re-sending timing and to identify old saved data.
kevman 0:38ceb79fef03 129 *
kevman 0:38ceb79fef03 130 * \return 0 if success
kevman 0:38ceb79fef03 131 * -1 if failed
kevman 0:38ceb79fef03 132 */
kevman 0:38ceb79fef03 133
kevman 0:38ceb79fef03 134 extern int8_t sn_coap_protocol_exec(struct coap_s *handle, uint32_t current_time);
kevman 0:38ceb79fef03 135
kevman 0:38ceb79fef03 136 /**
kevman 0:38ceb79fef03 137 * \fn int8_t sn_coap_protocol_set_block_size(uint16_t block_size)
kevman 0:38ceb79fef03 138 *
kevman 0:38ceb79fef03 139 * \brief If block transfer is enabled, this function changes the block size.
kevman 0:38ceb79fef03 140 *
kevman 0:38ceb79fef03 141 * \param uint16_t block_size maximum size of CoAP payload. Valid sizes are 16, 32, 64, 128, 256, 512 and 1024 bytes
kevman 0:38ceb79fef03 142 * \return 0 = success
kevman 0:38ceb79fef03 143 * -1 = failure
kevman 0:38ceb79fef03 144 */
kevman 0:38ceb79fef03 145 extern int8_t sn_coap_protocol_set_block_size(struct coap_s *handle, uint16_t block_size);
kevman 0:38ceb79fef03 146
kevman 0:38ceb79fef03 147 /**
kevman 0:38ceb79fef03 148 * \fn int8_t sn_coap_protocol_set_duplicate_buffer_size(uint8_t message_count)
kevman 0:38ceb79fef03 149 *
kevman 0:38ceb79fef03 150 * \brief If dublicate message detection is enabled, this function changes buffer size.
kevman 0:38ceb79fef03 151 *
kevman 0:38ceb79fef03 152 * \param uint8_t message_count max number of messages saved for duplicate control
kevman 0:38ceb79fef03 153 * \return 0 = success
kevman 0:38ceb79fef03 154 * -1 = failure
kevman 0:38ceb79fef03 155 */
kevman 0:38ceb79fef03 156 extern int8_t sn_coap_protocol_set_duplicate_buffer_size(struct coap_s *handle, uint8_t message_count);
kevman 0:38ceb79fef03 157
kevman 0:38ceb79fef03 158 /**
kevman 0:38ceb79fef03 159 * \fn int8_t sn_coap_protocol_set_retransmission_parameters(uint8_t resending_count, uint8_t resending_intervall)
kevman 0:38ceb79fef03 160 *
kevman 0:38ceb79fef03 161 * \brief If re-transmissions are enabled, this function changes resending count and interval.
kevman 0:38ceb79fef03 162 *
kevman 0:38ceb79fef03 163 * \param uint8_t resending_count max number of resendings for message
kevman 0:38ceb79fef03 164 * \param uint8_t resending_intervall message resending intervall in seconds
kevman 0:38ceb79fef03 165 * \return 0 = success, -1 = failure
kevman 0:38ceb79fef03 166 */
kevman 0:38ceb79fef03 167 extern int8_t sn_coap_protocol_set_retransmission_parameters(struct coap_s *handle,
kevman 0:38ceb79fef03 168 uint8_t resending_count, uint8_t resending_interval);
kevman 0:38ceb79fef03 169
kevman 0:38ceb79fef03 170 /**
kevman 0:38ceb79fef03 171 * \fn int8_t sn_coap_protocol_set_retransmission_buffer(uint8_t buffer_size_messages, uint16_t buffer_size_bytes)
kevman 0:38ceb79fef03 172 *
kevman 0:38ceb79fef03 173 * \brief If re-transmissions are enabled, this function changes message retransmission queue size.
kevman 0:38ceb79fef03 174 * Set size to '0' to disable feature. If both are set to '0', then re-sendings are disabled.
kevman 0:38ceb79fef03 175 *
kevman 0:38ceb79fef03 176 * \param uint8_t buffer_size_messages queue size - maximum number of messages to be saved to queue
kevman 0:38ceb79fef03 177 * \param uint8_t buffer_size_bytes queue size - maximum size of messages saved to queue
kevman 0:38ceb79fef03 178 * \return 0 = success, -1 = failure
kevman 0:38ceb79fef03 179 */
kevman 0:38ceb79fef03 180 extern int8_t sn_coap_protocol_set_retransmission_buffer(struct coap_s *handle,
kevman 0:38ceb79fef03 181 uint8_t buffer_size_messages, uint16_t buffer_size_bytes);
kevman 0:38ceb79fef03 182
kevman 0:38ceb79fef03 183 /**
kevman 0:38ceb79fef03 184 * \fn void sn_coap_protocol_clear_retransmission_buffer(struct coap_s *handle)
kevman 0:38ceb79fef03 185 *
kevman 0:38ceb79fef03 186 * \param *handle Pointer to CoAP library handle
kevman 0:38ceb79fef03 187 *
kevman 0:38ceb79fef03 188 * \brief If re-transmissions are enabled, this function removes all messages from the retransmission queue.
kevman 0:38ceb79fef03 189 */
kevman 0:38ceb79fef03 190 extern void sn_coap_protocol_clear_retransmission_buffer(struct coap_s *handle);
kevman 0:38ceb79fef03 191
kevman 0:38ceb79fef03 192 /**
kevman 0:38ceb79fef03 193 * \fn sn_coap_protocol_block_remove
kevman 0:38ceb79fef03 194 *
kevman 0:38ceb79fef03 195 * \brief Remove saved block data. Can be used to remove the data from RAM to enable storing it to other place.
kevman 0:38ceb79fef03 196 *
kevman 0:38ceb79fef03 197 * \param handle Pointer to CoAP library handle
kevman 0:38ceb79fef03 198 * \param source_address Addres from where the block has been received.
kevman 0:38ceb79fef03 199 * \param payload_length Length of the coap payload of the block.
kevman 0:38ceb79fef03 200 * \param payload Coap payload of the block.
kevman 0:38ceb79fef03 201 *
kevman 0:38ceb79fef03 202 */
kevman 0:38ceb79fef03 203 extern void sn_coap_protocol_block_remove(struct coap_s *handle, sn_nsdl_addr_s *source_address, uint16_t payload_length, void *payload);
kevman 0:38ceb79fef03 204
kevman 0:38ceb79fef03 205 /**
kevman 0:38ceb79fef03 206 * \fn sn_coap_protocol_remove_sent_blockwise_message
kevman 0:38ceb79fef03 207 *
kevman 0:38ceb79fef03 208 * \brief Remove sent blockwise message from the linked list.
kevman 0:38ceb79fef03 209 *
kevman 0:38ceb79fef03 210 * \param handle Pointer to CoAP library handle
kevman 0:38ceb79fef03 211 * \param message_id Message id to be removed.
kevman 0:38ceb79fef03 212 *
kevman 0:38ceb79fef03 213 */
kevman 0:38ceb79fef03 214 extern void sn_coap_protocol_remove_sent_blockwise_message(struct coap_s *handle, uint16_t message_id);
kevman 0:38ceb79fef03 215
kevman 0:38ceb79fef03 216 /**
kevman 0:38ceb79fef03 217 * \fn void sn_coap_protocol_delete_retransmission(struct coap_s *handle)
kevman 0:38ceb79fef03 218 *
kevman 0:38ceb79fef03 219 * \param *handle Pointer to CoAP library handle
kevman 0:38ceb79fef03 220 * \msg_id message ID to be removed
kevman 0:38ceb79fef03 221 * \return returns 0 when success, -1 for invalid parameter, -2 if message was not found
kevman 0:38ceb79fef03 222 *
kevman 0:38ceb79fef03 223 * \brief If re-transmissions are enabled, this function removes message from retransmission buffer.
kevman 0:38ceb79fef03 224 */
kevman 0:38ceb79fef03 225 extern int8_t sn_coap_protocol_delete_retransmission(struct coap_s *handle, uint16_t msg_id);
kevman 0:38ceb79fef03 226
kevman 0:38ceb79fef03 227 /**
kevman 0:38ceb79fef03 228 * \fn void sn_coap_protocol_delete_retransmission_by_token(struct coap_s *handle)
kevman 0:38ceb79fef03 229 *
kevman 0:38ceb79fef03 230 * \param *handle Pointer to CoAP library handle
kevman 0:38ceb79fef03 231 * \token Token to be removed
kevman 0:38ceb79fef03 232 * \token_len Length of the token
kevman 0:38ceb79fef03 233 * \return returns 0 when success, -1 for invalid parameter, -2 if message was not found
kevman 0:38ceb79fef03 234 *
kevman 0:38ceb79fef03 235 * \brief If re-transmissions are enabled, this function removes message from retransmission buffer.
kevman 0:38ceb79fef03 236 */
kevman 0:38ceb79fef03 237 extern int8_t sn_coap_protocol_delete_retransmission_by_token(struct coap_s *handle, uint8_t *token, uint8_t token_len);
kevman 0:38ceb79fef03 238
kevman 0:38ceb79fef03 239 /**
kevman 0:38ceb79fef03 240 * \fn int8_t sn_coap_convert_block_size(uint16_t block_size)
kevman 0:38ceb79fef03 241 *
kevman 0:38ceb79fef03 242 * \brief Utility function to convert block size.
kevman 0:38ceb79fef03 243 *
kevman 0:38ceb79fef03 244 * \param block_size Block size to convert.
kevman 0:38ceb79fef03 245 *
kevman 0:38ceb79fef03 246 * \return Value of range 0 - 6
kevman 0:38ceb79fef03 247 */
kevman 0:38ceb79fef03 248 extern int8_t sn_coap_convert_block_size(uint16_t block_size);
kevman 0:38ceb79fef03 249
kevman 0:38ceb79fef03 250 /**
kevman 0:38ceb79fef03 251 * \fn int8_t sn_coap_protocol_handle_block2_response_internally(struct coap_s *handle, uint8_t handle_response)
kevman 0:38ceb79fef03 252 *
kevman 0:38ceb79fef03 253 * \brief This function change the state whether CoAP library sends the block 2 response automatically or not.
kevman 0:38ceb79fef03 254 *
kevman 0:38ceb79fef03 255 * \param *handle Pointer to CoAP library handle
kevman 0:38ceb79fef03 256 * \param handle_response 1 if CoAP library handles the response sending otherwise 0.
kevman 0:38ceb79fef03 257 *
kevman 0:38ceb79fef03 258 * \return 0 = success, -1 = failure
kevman 0:38ceb79fef03 259 */
kevman 0:38ceb79fef03 260 extern int8_t sn_coap_protocol_handle_block2_response_internally(struct coap_s *handle, uint8_t handle_response);
kevman 0:38ceb79fef03 261
kevman 0:38ceb79fef03 262 /**
kevman 0:38ceb79fef03 263 * \fn void sn_coap_protocol_clear_sent_blockwise_messages(struct coap_s *handle)
kevman 0:38ceb79fef03 264 *
kevman 0:38ceb79fef03 265 * \brief This function clears all the sent blockwise messages from the linked list.
kevman 0:38ceb79fef03 266 *
kevman 0:38ceb79fef03 267 * \param *handle Pointer to CoAP library handle
kevman 0:38ceb79fef03 268 */
kevman 0:38ceb79fef03 269 extern void sn_coap_protocol_clear_sent_blockwise_messages(struct coap_s *handle);
kevman 0:38ceb79fef03 270
kevman 0:38ceb79fef03 271 /**
kevman 0:38ceb79fef03 272 * \fn void sn_coap_protocol_clear_received_blockwise_messages(struct coap_s *handle)
kevman 0:38ceb79fef03 273 *
kevman 0:38ceb79fef03 274 * \brief This function clears all the received blockwise messages from the linked list.
kevman 0:38ceb79fef03 275 *
kevman 0:38ceb79fef03 276 * \param *handle Pointer to CoAP library handle
kevman 0:38ceb79fef03 277 */
kevman 0:38ceb79fef03 278 extern void sn_coap_protocol_clear_received_blockwise_messages(struct coap_s *handle);
kevman 0:38ceb79fef03 279
kevman 0:38ceb79fef03 280 /**
kevman 0:38ceb79fef03 281 * \fn void sn_coap_protocol_send_rst(struct coap_s *handle, uint16_t msg_id, sn_nsdl_addr_s *addr_ptr, void *param)
kevman 0:38ceb79fef03 282 *
kevman 0:38ceb79fef03 283 * \brief This function sends a RESET message.
kevman 0:38ceb79fef03 284 *
kevman 0:38ceb79fef03 285 * \param *handle Pointer to CoAP library handle
kevman 0:38ceb79fef03 286 * \param msg_id Message id.
kevman 0:38ceb79fef03 287 * \param addr_ptr Pointer to destination address where CoAP message will be sent
kevman 0:38ceb79fef03 288 * \param param Pointer that will be passed to tx function callback
kevman 0:38ceb79fef03 289 */
kevman 0:38ceb79fef03 290 extern void sn_coap_protocol_send_rst(struct coap_s *handle, uint16_t msg_id, sn_nsdl_addr_s *addr_ptr, void *param);
kevman 0:38ceb79fef03 291
kevman 0:38ceb79fef03 292 /**
kevman 0:38ceb79fef03 293 * \fn uint16_t sn_coap_protocol_get_configured_blockwise_size(struct coap_s *handle)
kevman 0:38ceb79fef03 294 *
kevman 0:38ceb79fef03 295 * \brief Get configured CoAP payload blockwise size
kevman 0:38ceb79fef03 296 *
kevman 0:38ceb79fef03 297 * \param *handle Pointer to CoAP library handle
kevman 0:38ceb79fef03 298 */
kevman 0:38ceb79fef03 299 extern uint16_t sn_coap_protocol_get_configured_blockwise_size(struct coap_s *handle);
kevman 0:38ceb79fef03 300
kevman 0:38ceb79fef03 301 #endif /* SN_COAP_PROTOCOL_H_ */
kevman 0:38ceb79fef03 302
kevman 0:38ceb79fef03 303 #ifdef __cplusplus
kevman 0:38ceb79fef03 304 }
kevman 0:38ceb79fef03 305 #endif