diff options
Diffstat (limited to 'src/libcharon/sa/ikev1/task_manager_v1.c')
-rw-r--r-- | src/libcharon/sa/ikev1/task_manager_v1.c | 42 |
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; |