Skip to content

Commit f9cb04f

Browse files
author
Tero Heinonen
authored
Delete transaction when not needed (ARMmbed#80)
When response is not expected, transaction can be deleted after sending. Transaction deleted depending on resource callback return value
1 parent daf3694 commit f9cb04f

File tree

3 files changed

+8
-2
lines changed

3 files changed

+8
-2
lines changed

coap-service/coap_service_api.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,8 @@ typedef int coap_service_response_recv(int8_t service_id, uint8_t source_address
8888
* \param source_port Source port.
8989
* \param request_ptr Pointer to CoAP header structure.
9090
*
91-
* \return Status
91+
* \return -1 = Message ignored, no response will be sent. Transaction will be deleted.
92+
* 0 = Response is either already sent or will be send. Transaction is not deleted.
9293
*/
9394
typedef int coap_service_request_recv_cb(int8_t service_id, uint8_t source_address[static 16], uint16_t source_port, sn_coap_hdr_s *request_ptr);
9495

source/coap_message_handler.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -267,7 +267,10 @@ int16_t coap_message_handler_coap_msg_process(coap_msg_handler_t *handle, int8_t
267267
memcpy(transaction_ptr->token, coap_message->token_ptr, coap_message->token_len);
268268
}
269269
transaction_ptr->remote_port = port;
270-
cb(socket_id, coap_message, transaction_ptr);
270+
if (cb(socket_id, coap_message, transaction_ptr) < 0) {
271+
// negative return value = message ignored -> delete transaction
272+
transaction_delete(transaction_ptr);
273+
}
271274
goto exit;
272275
} else {
273276
ret_val = -1;

source/coap_service_api.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,8 @@ static uint8_t coap_tx_function(uint8_t *data_ptr, uint16_t data_len, sn_nsdl_ad
171171
}
172172
memcpy(transaction_ptr->data_ptr, data_ptr, data_len);
173173
transaction_ptr->data_len = data_len;
174+
} else if (transaction_ptr->resp_cb == NULL ) {
175+
transaction_delete(transaction_ptr);
174176
}
175177

176178
return 0;

0 commit comments

Comments
 (0)