diff options
Diffstat (limited to 'src/libcharon/sa/task_manager_v1.c')
-rwxr-xr-x | src/libcharon/sa/task_manager_v1.c | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/src/libcharon/sa/task_manager_v1.c b/src/libcharon/sa/task_manager_v1.c index d557d970e..c01229564 100755 --- a/src/libcharon/sa/task_manager_v1.c +++ b/src/libcharon/sa/task_manager_v1.c @@ -22,7 +22,7 @@ #include <sa/tasks/child_delete.h> #include <sa/tasks/main_mode.h> #include <sa/tasks/quick_mode.h> -#include <sa/tasks/xauth_request.h> +#include <sa/tasks/xauth.h> #include <sa/tasks/ike_delete.h> #include <sa/tasks/ike_natd_v1.h> #include <sa/tasks/ike_vendor_v1.h> @@ -280,7 +280,7 @@ METHOD(task_manager_t, initiate, status_t, } break; case IKE_CONNECTING: - if (activate_task(this, TASK_XAUTH_REQUEST)) + if (activate_task(this, TASK_XAUTH)) { exchange = TRANSACTION; new_mid = TRUE; @@ -313,7 +313,7 @@ METHOD(task_manager_t, initiate, status_t, case TASK_QUICK_MODE: exchange = QUICK_MODE; break; - case TASK_XAUTH_REQUEST: + case TASK_XAUTH: exchange = TRANSACTION; new_mid = TRUE; break; @@ -648,7 +648,7 @@ static status_t process_request(private_task_manager_t *this, enumerator->destroy(enumerator); break; case TRANSACTION: - task = (task_t *)xauth_request_create(this->ike_sa, FALSE); + task = (task_t *)xauth_create(this->ike_sa, FALSE); this->passive_tasks->insert_last(this->passive_tasks, task); break; default: @@ -688,7 +688,17 @@ static status_t process_request(private_task_manager_t *this, if (send_response) { - return build_response(this, message); + if (build_response(this, message) != SUCCESS) + { + return DESTROY_ME; + } + } + if (this->passive_tasks->get_count(this->passive_tasks) == 0 && + this->queued_tasks->get_count(this->queued_tasks) > 0) + { + /* passive tasks completed, check if an active task has been queued, + * such as XAUTH or modeconfig push */ + return initiate(this); } return SUCCESS; } |