aboutsummaryrefslogtreecommitdiffstats
path: root/src/libcharon/encoding/message.c
diff options
context:
space:
mode:
authorMartin Willi <martin@revosec.ch>2010-11-02 14:21:38 +0100
committerMartin Willi <martin@revosec.ch>2011-01-05 16:45:41 +0100
commit363ec8986cf497b75b23b9c99c2798476d555f58 (patch)
treeda09acd1c333055b52f5fc5116455990f9e830f0 /src/libcharon/encoding/message.c
parent6260e6fe12509a5f69827993fbdcefa20529fe04 (diff)
downloadstrongswan-363ec8986cf497b75b23b9c99c2798476d555f58.tar.bz2
strongswan-363ec8986cf497b75b23b9c99c2798476d555f58.tar.xz
Added a message_t option to disable automatic payload sorting
Diffstat (limited to 'src/libcharon/encoding/message.c')
-rw-r--r--src/libcharon/encoding/message.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/src/libcharon/encoding/message.c b/src/libcharon/encoding/message.c
index d41ad4697..b69a9f30c 100644
--- a/src/libcharon/encoding/message.c
+++ b/src/libcharon/encoding/message.c
@@ -490,6 +490,11 @@ struct private_message_t {
bool is_request;
/**
+ * Sorting of message disabled?
+ */
+ bool sort_disabled;
+
+ /**
* Message ID of this message.
*/
u_int32_t message_id;
@@ -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,