message: Report the size of the complete reassembled IKE message

This way we see the same size on both ends, namely that of the complete
IKE message as if it was sent in a single packet (excluding UDP/IP headers).
This commit is contained in:
Tobias Brunner 2018-07-05 17:36:21 +02:00
parent 62721936b1
commit 9403320fca
1 changed files with 20 additions and 3 deletions

View File

@ -1,5 +1,5 @@
/*
* Copyright (C) 2006-2014 Tobias Brunner
* Copyright (C) 2006-2018 Tobias Brunner
* Copyright (C) 2005-2010 Martin Willi
* Copyright (C) 2010 revosec AG
* Copyright (C) 2006 Daniel Roethlisberger
@ -2842,9 +2842,11 @@ METHOD(message_t, add_fragment_v2, status_t,
encrypted_fragment_payload_t *encrypted_fragment;
encrypted_payload_t *encrypted;
payload_t *payload;
aead_t *aead;
enumerator_t *enumerator;
chunk_t data;
uint16_t total, num;
size_t len;
status_t status;
if (!this->frag)
@ -2904,15 +2906,30 @@ METHOD(message_t, add_fragment_v2, status_t,
return NEED_MORE;
}
encrypted = (encrypted_payload_t*)encrypted_fragment;
aead = encrypted->get_transform(encrypted);
data = merge_fragments(this, message);
DBG1(DBG_ENC, "received fragment #%hu of %hu, reassembled fragmented IKE "
"message (%zu bytes)", num, total, data.len);
encrypted = encrypted_payload_create_from_plain(this->first_payload, data);
encrypted->set_transform(encrypted, aead);
this->payloads->insert_last(this->payloads, encrypted);
/* update next payload type (could be an unencrypted payload) */
this->payloads->get_first(this->payloads, (void**)&payload);
this->first_payload = payload->get_type(payload);
/* we report the length of the complete IKE message when splitting, do the
* same here, so add the IKEv2 header len to the reassembled payload data */
len = 28;
enumerator = create_payload_enumerator(this);
while (enumerator->enumerate(enumerator, &payload))
{
len += payload->get_length(payload);
}
enumerator->destroy(enumerator);
DBG1(DBG_ENC, "received fragment #%hu of %hu, reassembled fragmented IKE "
"message (%zu bytes)", num, total, len);
return SUCCESS;
}