ikev2: Ensure ALERT_RETRANSMIT_SEND_CLEARED is triggered

If a MOBIKE task is deferred, the retransmission counter is reset to 0
when reinitiating.  So if there were retransmits before, this alert would
not be triggered if a response is received now without retransmits.
This commit is contained in:
Tobias Brunner 2020-05-29 14:58:36 +02:00
parent 4b225bf866
commit bc40509057
1 changed files with 9 additions and 1 deletions

View File

@ -103,6 +103,12 @@ struct private_task_manager_t {
*/
u_int retransmitted;
/**
* TRUE if any retransmits have been sent for this message (counter is
* reset if deferred)
*/
bool retransmit_sent;
/**
* packet(s) for retransmission
*/
@ -394,6 +400,7 @@ METHOD(task_manager_t, retransmit, status_t,
this->initiating.retransmitted, message_id);
charon->bus->alert(charon->bus, ALERT_RETRANSMIT_SEND, packet,
this->initiating.retransmitted);
this->initiating.retransmit_sent = TRUE;
}
if (!mobike)
{
@ -635,6 +642,7 @@ METHOD(task_manager_t, initiate, status_t,
message->set_exchange_type(message, exchange);
this->initiating.type = exchange;
this->initiating.retransmitted = 0;
this->initiating.retransmit_sent = FALSE;
this->initiating.deferred = FALSE;
enumerator = array_create_enumerator(this->active_tasks);
@ -755,7 +763,7 @@ static status_t process_response(private_task_manager_t *this,
}
enumerator->destroy(enumerator);
if (this->initiating.retransmitted > 1)
if (this->initiating.retransmit_sent)
{
packet_t *packet = NULL;
array_get(this->initiating.packets, 0, &packet);