Reset task manager state when build() completes an exchange (quick mode)
authorMartin Willi <martin@revosec.ch>
Tue, 13 Dec 2011 10:19:08 +0000 (11:19 +0100)
committerMartin Willi <martin@revosec.ch>
Tue, 20 Mar 2012 16:31:19 +0000 (17:31 +0100)
src/libcharon/sa/task_manager_v1.c

index 6a9592f..b292934 100755 (executable)
@@ -415,8 +415,10 @@ METHOD(task_manager_t, initiate, status_t,
        }
        enumerator->destroy(enumerator);
 
-       /* update exchange type if a task changed it */
-       this->initiating.type = message->get_exchange_type(message);
+       if (this->active_tasks->get_count(this->active_tasks) == 0)
+       {       /* tasks completed, no exchange active anymore */
+               this->initiating.type = EXCHANGE_TYPE_UNDEFINED;
+       }
        this->initiating.seqnr++;
 
        status = this->ike_sa->generate_message(this->ike_sa, message,
@@ -442,7 +444,7 @@ METHOD(task_manager_t, initiate, status_t,
        this->initiating.packet = NULL;
 
        /* close after sending an INFORMATIONAL error but not yet established */
-       if (this->initiating.type == INFORMATIONAL_V1 &&
+       if (exchange == INFORMATIONAL_V1 &&
                this->ike_sa->get_state(this->ike_sa) == IKE_CONNECTING)
        {
                return FAILED;