- implemented compute length function
authorJan Hutter <jhutter@hsr.ch>
Tue, 29 Nov 2005 10:19:27 +0000 (10:19 -0000)
committerJan Hutter <jhutter@hsr.ch>
Tue, 29 Nov 2005 10:19:27 +0000 (10:19 -0000)
Source/charon/encoding/payloads/id_payload.c
Source/charon/encoding/payloads/id_payload.h
Source/charon/encoding/payloads/nonce_payload.c

index 708aa61..9691522 100644 (file)
@@ -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;
index b4cb304..6837d91 100644 (file)
@@ -28,7 +28,7 @@
 #include <encoding/payloads/payload.h>
 
 /**
- * Length of a nonce payload without a nonce in bytes.
+ * Length of a id payload without the data in bytes.
  * 
  * @ingroup payloads
  */
index e6ea147..5070e19 100644 (file)
@@ -193,6 +193,14 @@ static size_t get_length(private_nonce_payload_t *this)
 }
 
 /**
+ * Implementation of private_id_payload_t.compute_length.
+ */
+static void compute_length(private_nonce_payload_t *this)
+{
+       this->payload_length = NONCE_PAYLOAD_HEADER_LENGTH + this->nonce.len;
+}
+
+/**
  * Implementation of payload_t.destroy and nonce_payload_t.destroy.
  */
 static void destroy(private_nonce_payload_t *this)
@@ -226,6 +234,9 @@ nonce_payload_t *nonce_payload_create()
        this->public.set_nonce = (status_t (*) (nonce_payload_t *,chunk_t)) set_nonce;
        this->public.get_nonce = (void (*) (nonce_payload_t *,chunk_t*)) get_nonce;
        
+       /* private functions */
+       this->compute_length = compute_length;
+       
        /* private variables */
        this->critical = FALSE;
        this->next_payload = NO_PAYLOAD;