if (!l_queue_find(pb_sessions, session_match, session))
return;
- l_timeout_remove(session->tx_timeout);
- session->tx_timeout = NULL;
-
mesh_send_cancel(filter, sizeof(filter));
l_info("TX timeout");
break;
case PB_ADV_CLOSE:
- l_timeout_remove(session->tx_timeout);
l_debug("Link closed notification: %2.2x", pkt[0]);
- /* Wrap callback for pre-cleaning */
- if (true) {
- mesh_prov_close_func_t cb = session->close_cb;
- void *user_data = session->user_data;
-
- l_queue_remove(pb_sessions, session);
- l_free(session);
- cb(user_data, pkt[0]);
- }
+ session->close_cb(session->user_data, pkt[0]);
break;
case PB_ADV_ACK:
static void acp_prov_close(void *user_data, uint8_t reason)
{
- /* TODO: Handle Close */
+ struct mesh_prov_acceptor *rx_prov = user_data;
+
+ if (rx_prov != prov)
+ return;
+
+ if (reason == PROV_ERR_SUCCESS)
+ reason = PROV_ERR_UNEXPECTED_ERR;
+
+ if (prov->cmplt)
+ prov->cmplt(prov->caller_data, reason, NULL);
+
+ prov->cmplt = NULL;
acceptor_free();
}