diff options
author | Martin Willi <martin@revosec.ch> | 2010-11-24 18:09:06 +0100 |
---|---|---|
committer | Martin Willi <martin@revosec.ch> | 2011-01-05 16:45:52 +0100 |
commit | 9ca5d0280eb2e4c9d4f4d9ba4307f72a86dbbe56 (patch) | |
tree | c173fb7418ecd42f8fcf99933ebb669e08713351 /src/libcharon/encoding | |
parent | a6da3795d668b806b2462d8874c9931a6e9821ee (diff) | |
download | strongswan-9ca5d0280eb2e4c9d4f4d9ba4307f72a86dbbe56.tar.bz2 strongswan-9ca5d0280eb2e4c9d4f4d9ba4307f72a86dbbe56.tar.xz |
Moved check if packet already encoded to ike_sa, avoids message() hook invocation twice
Diffstat (limited to 'src/libcharon/encoding')
-rw-r--r-- | src/libcharon/encoding/message.c | 21 | ||||
-rw-r--r-- | src/libcharon/encoding/message.h | 7 |
2 files changed, 11 insertions, 17 deletions
diff --git a/src/libcharon/encoding/message.c b/src/libcharon/encoding/message.c index c9959ab92..860ef627a 100644 --- a/src/libcharon/encoding/message.c +++ b/src/libcharon/encoding/message.c @@ -688,18 +688,10 @@ METHOD(message_t, set_reserved_header_bit, void, } } -/** - * Is this message in an encoded form? - */ -static bool is_encoded(private_message_t *this) +METHOD(message_t, is_encoded, bool, + private_message_t *this) { - chunk_t data = this->packet->get_data(this->packet); - - if (data.ptr == NULL) - { - return FALSE; - } - return TRUE; + return this->packet->get_data(this->packet).ptr != NULL; } METHOD(message_t, add_payload, void, @@ -1068,12 +1060,6 @@ METHOD(message_t, generate, status_t, bool *reserved; int i; - if (is_encoded(this)) - { /* already generated, return a new packet clone */ - *packet = this->packet->clone(this->packet); - return SUCCESS; - } - if (this->exchange_type == EXCHANGE_TYPE_UNDEFINED) { DBG1(DBG_ENC, "exchange type is not defined"); @@ -1516,6 +1502,7 @@ message_t *message_create_from_packet(packet_t *packet) .add_notify = _add_notify, .disable_sort = _disable_sort, .generate = _generate, + .is_encoded = _is_encoded, .set_source = _set_source, .get_source = _get_source, .set_destination = _set_destination, diff --git a/src/libcharon/encoding/message.h b/src/libcharon/encoding/message.h index a04048ed0..51197308c 100644 --- a/src/libcharon/encoding/message.h +++ b/src/libcharon/encoding/message.h @@ -258,6 +258,13 @@ struct message_t { status_t (*generate) (message_t *this, aead_t *aead, packet_t **packet); /** + * Check if the message has already been encoded using generate(). + * + * @return TRUE if message has been encoded + */ + bool (*is_encoded)(message_t *this); + + /** * Gets the source host informations. * * @warning Returned host_t object is not getting cloned, |