From: Martin Willi Date: Tue, 2 Nov 2010 13:21:38 +0000 (+0100) Subject: Added a message_t option to disable automatic payload sorting X-Git-Tag: 4.5.1~315 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=363ec8986cf497b75b23b9c99c2798476d555f58;p=thirdparty%2Fstrongswan.git Added a message_t option to disable automatic payload sorting --- diff --git a/src/libcharon/encoding/message.c b/src/libcharon/encoding/message.c index d41ad46979..b69a9f30c8 100644 --- a/src/libcharon/encoding/message.c +++ b/src/libcharon/encoding/message.c @@ -489,6 +489,11 @@ struct private_message_t { */ bool is_request; + /** + * Sorting of message disabled? + */ + bool sort_disabled; + /** * Message ID of this message. */ @@ -1001,6 +1006,12 @@ static encryption_payload_t* wrap_payloads(private_message_t *this) return encryption; } +METHOD(message_t, disable_sort, void, + private_message_t *this) +{ + this->sort_disabled = TRUE; +} + METHOD(message_t, generate, status_t, private_message_t *this, aead_t *aead, packet_t **packet) { @@ -1039,7 +1050,10 @@ METHOD(message_t, generate, status_t, return NOT_SUPPORTED; } - order_payloads(this); + if (!this->sort_disabled) + { + order_payloads(this); + } DBG1(DBG_ENC, "generating %s", get_string(this, str, sizeof(str))); @@ -1445,6 +1459,7 @@ message_t *message_create_from_packet(packet_t *packet) .get_request = _get_request, .add_payload = _add_payload, .add_notify = _add_notify, + .disable_sort = _disable_sort, .generate = _generate, .set_source = _set_source, .get_source = _get_source, diff --git a/src/libcharon/encoding/message.h b/src/libcharon/encoding/message.h index 8c1cbcd096..86c39ad7e3 100644 --- a/src/libcharon/encoding/message.h +++ b/src/libcharon/encoding/message.h @@ -180,6 +180,11 @@ struct message_t { void (*add_notify) (message_t *this, bool flush, notify_type_t type, chunk_t data); + /** + * Disable automatic payload sorting for this message. + */ + void (*disable_sort)(message_t *this); + /** * Parses header of message. *