aboutsummaryrefslogtreecommitdiffstats
path: root/src/charon/encoding/message.c
diff options
context:
space:
mode:
authorMartin Willi <martin@strongswan.org>2007-03-08 15:59:21 +0000
committerMartin Willi <martin@strongswan.org>2007-03-08 15:59:21 +0000
commit3b7fdcf6c60128dc60fcbece8981155fb00b30b2 (patch)
tree2758b1fd30b0c38cca6e45b891e0c153ad469847 /src/charon/encoding/message.c
parent069f01cfefdc99fbef31ad44954468591b6f73e4 (diff)
downloadstrongswan-3b7fdcf6c60128dc60fcbece8981155fb00b30b2.tar.bz2
strongswan-3b7fdcf6c60128dc60fcbece8981155fb00b30b2.tar.xz
fixed payload order in IKE_AUTH
Diffstat (limited to 'src/charon/encoding/message.c')
-rw-r--r--src/charon/encoding/message.c34
1 files changed, 27 insertions, 7 deletions
diff --git a/src/charon/encoding/message.c b/src/charon/encoding/message.c
index 3366baf77..5f3f91f8b 100644
--- a/src/charon/encoding/message.c
+++ b/src/charon/encoding/message.c
@@ -481,18 +481,38 @@ static bool is_encoded(private_message_t *this)
*/
static void add_payload(private_message_t *this, payload_t *payload)
{
- payload_t *last_payload;
- if (this->payloads->get_count(this->payloads) > 0)
+ payload_t *last_payload, *first_payload;
+
+ if ((this->is_request && payload->get_type(payload) == ID_INITIATOR) ||
+ (!this->is_request && payload->get_type(payload) == ID_RESPONDER))
{
- this->payloads->get_last(this->payloads,(void **) &last_payload);
- last_payload->set_next_type(last_payload, payload->get_type(payload));
+ /* HOTD: insert ID payload in the beginning to respect RFC */
+ if (this->payloads->get_first(this->payloads,
+ (void **)&first_payload) == SUCCESS)
+ {
+ payload->set_next_type(payload, first_payload->get_type(first_payload));
+ }
+ else
+ {
+ payload->set_next_type(payload, NO_PAYLOAD);
+ }
+ this->first_payload = payload->get_type(payload);
+ this->payloads->insert_first(this->payloads, payload);
}
else
{
- this->first_payload = payload->get_type(payload);
+ if (this->payloads->get_count(this->payloads) > 0)
+ {
+ this->payloads->get_last(this->payloads,(void **) &last_payload);
+ last_payload->set_next_type(last_payload, payload->get_type(payload));
+ }
+ else
+ {
+ this->first_payload = payload->get_type(payload);
+ }
+ payload->set_next_type(payload, NO_PAYLOAD);
+ this->payloads->insert_last(this->payloads, payload);
}
- payload->set_next_type(payload, NO_PAYLOAD);
- this->payloads->insert_last(this->payloads, (void*)payload);
DBG2(DBG_ENC ,"added payload of type %N to message",
payload_type_names, payload->get_type(payload));