aboutsummaryrefslogtreecommitdiffstats
path: root/src/libcharon/sa/ikev1/task_manager_v1.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/libcharon/sa/ikev1/task_manager_v1.c')
-rw-r--r--src/libcharon/sa/ikev1/task_manager_v1.c42
1 files changed, 11 insertions, 31 deletions
diff --git a/src/libcharon/sa/ikev1/task_manager_v1.c b/src/libcharon/sa/ikev1/task_manager_v1.c
index af9db65a6..4e3511858 100644
--- a/src/libcharon/sa/ikev1/task_manager_v1.c
+++ b/src/libcharon/sa/ikev1/task_manager_v1.c
@@ -401,16 +401,9 @@ static bool generate_message(private_task_manager_t *this, message_t *message,
bool use_frags = FALSE, result = TRUE;
ike_cfg_t *ike_cfg;
enumerator_t *fragments;
- message_t *fragment;
packet_t *packet;
status_t status;
- if (this->ike_sa->generate_message(this->ike_sa, message,
- &packet) != SUCCESS)
- {
- return FALSE;
- }
-
ike_cfg = this->ike_sa->get_ike_cfg(this->ike_sa);
if (ike_cfg)
{
@@ -430,37 +423,24 @@ static bool generate_message(private_task_manager_t *this, message_t *message,
if (!use_frags)
{
+ if (this->ike_sa->generate_message(this->ike_sa, message,
+ &packet) != SUCCESS)
+ {
+ return FALSE;
+ }
array_insert_create(packets, ARRAY_TAIL, packet);
return TRUE;
}
- /* other implementations seem to just use 0 as message ID, so here we go */
- message->set_message_id(message, 0);
- /* always use the initial message type for fragments */
- message->set_exchange_type(message, this->frag.exchange);
- status = message->fragment(message, this->frag.size, &fragments);
- if (status == ALREADY_DONE)
- {
- array_insert_create(packets, ARRAY_TAIL, packet);
- return TRUE;
- }
- else if (status != SUCCESS)
+ message->set_ike_sa_id(message, this->ike_sa->get_id(this->ike_sa));
+ status = message->fragment(message, this->ike_sa->get_keymat(this->ike_sa),
+ this->frag.size, &fragments);
+ if (status != SUCCESS)
{
- packet->destroy(packet);
return FALSE;
}
- packet->destroy(packet);
-
- while (fragments->enumerate(fragments, &fragment))
+ while (fragments->enumerate(fragments, &packet))
{
- status = this->ike_sa->generate_message(this->ike_sa, fragment,
- &packet);
- if (status != SUCCESS)
- {
- DBG1(DBG_IKE, "failed to generate IKE fragment");
- result = FALSE;
- break;
- }
- array_insert_create(packets, ARRAY_TAIL, packet);
+ array_insert_create(packets, ARRAY_TAIL, packet->clone(packet));
}
fragments->destroy(fragments);
return result;