1 /*************************************************************************** 2 * Copyright (c) 2024 Microsoft Corporation 3 * 4 * This program and the accompanying materials are made available under the 5 * terms of the MIT License which is available at 6 * https://opensource.org/licenses/MIT. 7 * 8 * SPDX-License-Identifier: MIT 9 **************************************************************************/ 10 11 12 /**************************************************************************/ 13 /**************************************************************************/ 14 /** */ 15 /** NetX Secure Component */ 16 /** */ 17 /** Datagram Transport Layer Security (DTLS) */ 18 /** */ 19 /**************************************************************************/ 20 /**************************************************************************/ 21 22 #define NX_SECURE_SOURCE_CODE 23 24 #include "nx_secure_dtls.h" 25 26 /**************************************************************************/ 27 /* */ 28 /* FUNCTION RELEASE */ 29 /* */ 30 /* _nx_secure_dtls_session_delete PORTABLE C */ 31 /* 6.1 */ 32 /* AUTHOR */ 33 /* */ 34 /* Timothy Stapko, Microsoft Corporation */ 35 /* */ 36 /* DESCRIPTION */ 37 /* */ 38 /* This function deletes a DTLS session object, returning any resources*/ 39 /* to the system. */ 40 /* */ 41 /* INPUT */ 42 /* */ 43 /* dtls_session DTLS session control block */ 44 /* */ 45 /* OUTPUT */ 46 /* */ 47 /* status Completion status */ 48 /* */ 49 /* CALLS */ 50 /* */ 51 /* _nx_secure_dtls_session_reset Clear DTLS control block */ 52 /* _nx_secure_tls_session_delete Delete TLS session */ 53 /* tx_mutex_get Get protection mutex */ 54 /* tx_mutex_put Put protection mutex */ 55 /* */ 56 /* CALLED BY */ 57 /* */ 58 /* Application Code */ 59 /* */ 60 /* RELEASE HISTORY */ 61 /* */ 62 /* DATE NAME DESCRIPTION */ 63 /* */ 64 /* 05-19-2020 Timothy Stapko Initial Version 6.0 */ 65 /* 09-30-2020 Timothy Stapko Modified comment(s), */ 66 /* resulting in version 6.1 */ 67 /* */ 68 /**************************************************************************/ _nx_secure_dtls_session_delete(NX_SECURE_DTLS_SESSION * dtls_session)69UINT _nx_secure_dtls_session_delete(NX_SECURE_DTLS_SESSION *dtls_session) 70 { 71 #ifdef NX_SECURE_ENABLE_DTLS 72 UINT status; 73 74 75 /* Reset the DTLS state so this socket can be reused. */ 76 _nx_secure_dtls_session_reset(dtls_session); 77 78 /* Delete TLS session. */ 79 status = _nx_secure_tls_session_delete(&dtls_session -> nx_secure_dtls_tls_session); 80 81 /* Get the protection. */ 82 tx_mutex_get(&_nx_secure_tls_protection, TX_WAIT_FOREVER); 83 84 /* Remove the DTLS instance from the created list. */ 85 /* See if the DTLS instance is the only one on the list. */ 86 if (dtls_session == dtls_session -> nx_secure_dtls_created_next) 87 { 88 89 /* Only created DTLS instance, just set the created list to NULL. */ 90 _nx_secure_dtls_created_ptr = NX_NULL; 91 } 92 else 93 { 94 95 /* Otherwise, not the only created DTLS, link-up the neighbors. */ 96 if (dtls_session -> nx_secure_dtls_created_next != NX_NULL) 97 { 98 (dtls_session -> nx_secure_dtls_created_next) -> nx_secure_dtls_created_previous = 99 dtls_session -> nx_secure_dtls_created_previous; 100 } 101 102 (dtls_session -> nx_secure_dtls_created_previous) -> nx_secure_dtls_created_next = 103 dtls_session -> nx_secure_dtls_created_next; 104 105 /* See if we have to update the created list head pointer. */ 106 if (_nx_secure_dtls_created_ptr == dtls_session) 107 { 108 109 /* Yes, move the head pointer to the next link. */ 110 _nx_secure_dtls_created_ptr = dtls_session -> nx_secure_dtls_created_next; 111 } 112 } 113 _nx_secure_dtls_created_count--; 114 115 /* Release the protection. */ 116 tx_mutex_put(&_nx_secure_tls_protection); 117 118 return(status); 119 #else 120 NX_PARAMETER_NOT_USED(dtls_session); 121 122 return(NX_NOT_SUPPORTED); 123 #endif /* NX_SECURE_ENABLE_DTLS */ 124 } 125 126