fixed payload order in IKE_AUTH

This commit is contained in:
Martin Willi
2007-03-08 15:59:21 +00:00
parent 069f01cfef
commit 3b7fdcf6c6
+22 -2
View File
@@ -481,7 +481,26 @@ static bool is_encoded(private_message_t *this)
*/ */
static void add_payload(private_message_t *this, payload_t *payload) static void add_payload(private_message_t *this, payload_t *payload)
{ {
payload_t *last_payload; 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))
{
/* 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
{
if (this->payloads->get_count(this->payloads) > 0) if (this->payloads->get_count(this->payloads) > 0)
{ {
this->payloads->get_last(this->payloads,(void **) &last_payload); this->payloads->get_last(this->payloads,(void **) &last_payload);
@@ -492,7 +511,8 @@ static void add_payload(private_message_t *this, payload_t *payload)
this->first_payload = payload->get_type(payload); this->first_payload = payload->get_type(payload);
} }
payload->set_next_type(payload, NO_PAYLOAD); payload->set_next_type(payload, NO_PAYLOAD);
this->payloads->insert_last(this->payloads, (void*)payload); this->payloads->insert_last(this->payloads, payload);
}
DBG2(DBG_ENC ,"added payload of type %N to message", DBG2(DBG_ENC ,"added payload of type %N to message",
payload_type_names, payload->get_type(payload)); payload_type_names, payload->get_type(payload));