diff options
author | Martin Willi <martin@strongswan.org> | 2007-03-08 15:59:21 +0000 |
---|---|---|
committer | Martin Willi <martin@strongswan.org> | 2007-03-08 15:59:21 +0000 |
commit | 3b7fdcf6c60128dc60fcbece8981155fb00b30b2 (patch) | |
tree | 2758b1fd30b0c38cca6e45b891e0c153ad469847 /src/charon/encoding/message.c | |
parent | 069f01cfefdc99fbef31ad44954468591b6f73e4 (diff) | |
download | strongswan-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.c | 34 |
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)); |