#include <sa/tasks/main_mode.h>
#include <sa/tasks/quick_mode.h>
#include <sa/tasks/xauth.h>
+#include <sa/tasks/mode_config.h>
#include <sa/tasks/ike_delete.h>
#include <sa/tasks/ike_natd_v1.h>
#include <sa/tasks/ike_vendor_v1.h>
}
break;
case IKE_ESTABLISHED:
+ if (activate_task(this, TASK_MODE_CONFIG))
+ {
+ exchange = TRANSACTION;
+ new_mid = TRUE;
+ break;
+ }
if (activate_task(this, TASK_QUICK_MODE))
{
exchange = QUICK_MODE;
{
return retransmit(this, this->initiating.seqnr);
}
- else
- {
- charon->sender->send(charon->sender,
- this->initiating.packet->clone(this->initiating.packet));
-
- this->initiating.packet->destroy(this->initiating.packet);
- this->initiating.packet = NULL;
- return SUCCESS;
- }
+ charon->sender->send(charon->sender,
+ this->initiating.packet->clone(this->initiating.packet));
+ this->initiating.packet->destroy(this->initiating.packet);
+ this->initiating.packet = NULL;
+ return SUCCESS;
}
/**
enumerator->destroy(enumerator);
break;
case TRANSACTION:
- task = (task_t *)xauth_create(this->ike_sa, FALSE);
+ if (this->ike_sa->get_state(this->ike_sa) == IKE_ESTABLISHED)
+ {
+ task = (task_t *)mode_config_create(this->ike_sa, FALSE);
+ }
+ else
+ {
+ task = (task_t *)xauth_create(this->ike_sa, FALSE);
+ }
this->passive_tasks->insert_last(this->passive_tasks, task);
break;
default:
#include <encoding/payloads/id_payload.h>
#include <encoding/payloads/hash_payload.h>
#include <sa/tasks/xauth.h>
+#include <sa/tasks/mode_config.h>
typedef struct private_main_mode_t private_main_mode_t;
return FAILED;
}
+ if (this->peer_cfg->get_virtual_ip(this->peer_cfg))
+ {
+ this->ike_sa->queue_task(this->ike_sa,
+ (task_t*)mode_config_create(this->ike_sa, TRUE));
+ }
+
switch (this->auth_method)
{
case AUTH_XAUTH_INIT_PSK: