aboutsummaryrefslogtreecommitdiffstats
path: root/Source/charon/encoding/payloads
diff options
context:
space:
mode:
Diffstat (limited to 'Source/charon/encoding/payloads')
-rw-r--r--Source/charon/encoding/payloads/Makefile.payloads4
-rw-r--r--Source/charon/encoding/payloads/auth_payload.c2
-rw-r--r--Source/charon/encoding/payloads/id_payload.c2
-rw-r--r--Source/charon/encoding/payloads/id_payload.h2
-rw-r--r--Source/charon/encoding/payloads/proposal_substructure.c22
-rw-r--r--Source/charon/encoding/payloads/sa_payload.c13
-rw-r--r--Source/charon/encoding/payloads/transform_substructure.c23
7 files changed, 56 insertions, 12 deletions
diff --git a/Source/charon/encoding/payloads/Makefile.payloads b/Source/charon/encoding/payloads/Makefile.payloads
index da2587eb8..c9046a089 100644
--- a/Source/charon/encoding/payloads/Makefile.payloads
+++ b/Source/charon/encoding/payloads/Makefile.payloads
@@ -42,6 +42,10 @@ OBJS+= $(BUILD_DIR)auth_payload.o
$(BUILD_DIR)auth_payload.o : $(PAYLOADS_DIR)auth_payload.c $(PAYLOADS_DIR)auth_payload.h
$(CC) $(CFLAGS) -c -o $@ $<
+#OBJS+= $(BUILD_DIR)ts_payload.o
+#$(BUILD_DIR)ts_payload.o : $(PAYLOADS_DIR)ts_payload.c $(PAYLOADS_DIR)ts_payload.h
+# $(CC) $(CFLAGS) -c -o $@ $<
+
OBJS+= $(BUILD_DIR)payload.o
$(BUILD_DIR)payload.o : $(PAYLOADS_DIR)payload.c $(PAYLOADS_DIR)payload.h
$(CC) $(CFLAGS) -c -o $@ $<
diff --git a/Source/charon/encoding/payloads/auth_payload.c b/Source/charon/encoding/payloads/auth_payload.c
index d5af17ff5..1070826c2 100644
--- a/Source/charon/encoding/payloads/auth_payload.c
+++ b/Source/charon/encoding/payloads/auth_payload.c
@@ -1,7 +1,7 @@
/**
* @file auth_payload.h
*
- * @brief Interface of auth_payload_t.
+ * @brief Implementation of auth_payload_t.
*
*/
diff --git a/Source/charon/encoding/payloads/id_payload.c b/Source/charon/encoding/payloads/id_payload.c
index 6201dcce1..073be7972 100644
--- a/Source/charon/encoding/payloads/id_payload.c
+++ b/Source/charon/encoding/payloads/id_payload.c
@@ -53,7 +53,7 @@ struct private_id_payload_t {
id_payload_t public;
/**
- * TRUE if this ID payload is of type IDi, FALSE for IDr
+ * TRUE if this ID payload is of type IDi, FALSE for IDr.
*/
bool is_initiator;
diff --git a/Source/charon/encoding/payloads/id_payload.h b/Source/charon/encoding/payloads/id_payload.h
index 6837d910a..416c1c4b5 100644
--- a/Source/charon/encoding/payloads/id_payload.h
+++ b/Source/charon/encoding/payloads/id_payload.h
@@ -176,8 +176,6 @@ struct id_payload_t {
/**
* @brief Creates an empty id_payload_t object.
*
- * As default a ID payload of type IDi is created.
- *
* @param is_initiator
* - TRUE if this payload is of type IDi
* - FALSE if this payload is of type IDr
diff --git a/Source/charon/encoding/payloads/proposal_substructure.c b/Source/charon/encoding/payloads/proposal_substructure.c
index c80880d77..354eedb9e 100644
--- a/Source/charon/encoding/payloads/proposal_substructure.c
+++ b/Source/charon/encoding/payloads/proposal_substructure.c
@@ -141,6 +141,9 @@ encoding_rule_t proposal_substructure_encodings[] = {
*/
static status_t verify(private_proposal_substructure_t *this)
{
+ status_t status = SUCCESS;
+ iterator_t *iterator;
+
if ((this->next_payload != NO_PAYLOAD) && (this->next_payload != PROPOSAL_SUBSTRUCTURE))
{
/* must be 0 or 2 */
@@ -157,9 +160,26 @@ static status_t verify(private_proposal_substructure_t *this)
/* reserved are not supported */
return FAILED;
}
+
+ iterator = this->transforms->create_iterator(this->transforms,TRUE);
+
+ while(iterator->has_next(iterator))
+ {
+ payload_t *current_transform;
+ iterator->current(iterator,(void **)&current_transform);
+
+ status = current_transform->verify(current_transform);
+ if (status != SUCCESS)
+ {
+ break;
+ }
+ }
+
+ iterator->destroy(iterator);
+
/* proposal number is checked in SA payload */
- return SUCCESS;
+ return status;
}
/**
diff --git a/Source/charon/encoding/payloads/sa_payload.c b/Source/charon/encoding/payloads/sa_payload.c
index d9175de60..4054c6fb3 100644
--- a/Source/charon/encoding/payloads/sa_payload.c
+++ b/Source/charon/encoding/payloads/sa_payload.c
@@ -115,7 +115,7 @@ encoding_rule_t sa_payload_encodings[] = {
static status_t verify(private_sa_payload_t *this)
{
int proposal_number = 1;
- status_t status;
+ status_t status = SUCCESS;
iterator_t *iterator;
bool first = TRUE;
@@ -131,10 +131,7 @@ static status_t verify(private_sa_payload_t *this)
while(iterator->has_next(iterator))
{
proposal_substructure_t *current_proposal;
- status = iterator->current(iterator,(void **)&current_proposal);
- {
- break;
- }
+ iterator->current(iterator,(void **)&current_proposal);
if (current_proposal->get_proposal_number(current_proposal) > proposal_number)
{
if (first)
@@ -158,6 +155,12 @@ static status_t verify(private_sa_payload_t *this)
status = FAILED;
break;
}
+
+ status = current_proposal->payload_interface.verify(&(current_proposal->payload_interface));
+ if (status != SUCCESS)
+ {
+ break;
+ }
first = FALSE;
}
diff --git a/Source/charon/encoding/payloads/transform_substructure.c b/Source/charon/encoding/payloads/transform_substructure.c
index 4e3655b15..3c91b257c 100644
--- a/Source/charon/encoding/payloads/transform_substructure.c
+++ b/Source/charon/encoding/payloads/transform_substructure.c
@@ -148,7 +148,10 @@ encoding_rule_t transform_substructure_encodings[] = {
*/
static status_t verify(private_transform_substructure_t *this)
{
- if ((this->next_payload != NO_PAYLOAD) && (this->next_payload != TRANSFORM_SUBSTRUCTURE))
+ status_t status = SUCCESS;
+ iterator_t *iterator;
+
+ if ((this->next_payload != NO_PAYLOAD) && (this->next_payload != 3))
{
/* must be 0 or 3 */
return FAILED;
@@ -218,9 +221,25 @@ static status_t verify(private_transform_substructure_t *this)
return FAILED;
}
}
+ iterator = this->attributes->create_iterator(this->attributes,TRUE);
+
+ while(iterator->has_next(iterator))
+ {
+ payload_t *current_attributes;
+ iterator->current(iterator,(void **)&current_attributes);
+
+ status = current_attributes->verify(current_attributes);
+ if (status != SUCCESS)
+ {
+ break;
+ }
+ }
+
+ iterator->destroy(iterator);
+
/* proposal number is checked in SA payload */
- return SUCCESS;
+ return status;
}
/**