If the responder never sent a message the expected MID is 0. While
the sent MID (M1) SHOULD be increased beyond the known value, it's
not necessarily the case.
Since M2 - 1 would then equal UINT_MAX setting that MID would get ignored
and while we'd return 0 in the notify we'd actually expect 1 afterwards.
/* we don't want to resend messages to sync MIDs if requests with the
* previous MID arrive */
clear_packets(this->responding.packets);
+ /* avoid increasing the expected message ID after handling a message
+ * to sync MIDs with MID 0 */
+ return NEED_MORE;
}
array_compress(this->passive_tasks);
m2 = max(this->send, resp);
if (resp != m2)
{
- /* after responding to this message the expected message ID is increased
- * by one so we reduce it here */
- this->ike_sa->set_message_id(this->ike_sa, FALSE, m2 - 1);
+ this->ike_sa->set_message_id(this->ike_sa, FALSE, m2);
}
init = this->ike_sa->get_message_id(this->ike_sa, TRUE);
p2 = max(this->recv, has_active_tasks(this) ? init + 1 : init);