diff options
Diffstat (limited to 'Source/charon/encoding/payloads/id_payload.c')
-rw-r--r-- | Source/charon/encoding/payloads/id_payload.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/Source/charon/encoding/payloads/id_payload.c b/Source/charon/encoding/payloads/id_payload.c index 708aa61b4..9691522f0 100644 --- a/Source/charon/encoding/payloads/id_payload.c +++ b/Source/charon/encoding/payloads/id_payload.c @@ -146,6 +146,15 @@ static status_t verify(private_id_payload_t *this) /* critical bit is set! */ return FAILED; } + if ((this->id_type == 0) || + (this->id_type == 4) || + ((this->id_type >= 6) && (this->id_type <= 8)) || + ((this->id_type >= 12) && (this->id_type <= 200))) + { + /* reserved IDs */ + return FAILED; + } + return SUCCESS; } @@ -252,6 +261,14 @@ static void set_initiator (private_id_payload_t *this,bool is_initiator) } /** + * Implementation of private_id_payload_t.compute_length. + */ +static void compute_length(private_id_payload_t *this) +{ + this->payload_length = ID_PAYLOAD_HEADER_LENGTH + this->id_data.len; +} + +/** * Implementation of payload_t.destroy and id_payload_t.destroy. */ static void destroy(private_id_payload_t *this) @@ -289,6 +306,9 @@ id_payload_t *id_payload_create(bool is_initiator) this->public.get_initiator = (bool (*) (id_payload_t *)) get_initiator; this->public.set_initiator = (void (*) (id_payload_t *,bool)) set_initiator; + /* private functions */ + this->compute_length = compute_length; + /* private variables */ this->critical = FALSE; this->next_payload = NO_PAYLOAD; |