aboutsummaryrefslogtreecommitdiffstats
path: root/Source/charon/encoding/payloads/ts_payload.c
diff options
context:
space:
mode:
authorMartin Willi <martin@strongswan.org>2006-02-22 16:14:40 +0000
committerMartin Willi <martin@strongswan.org>2006-02-22 16:14:40 +0000
commita527a426d6d2c2d6619174b80816a96d45a0a9c9 (patch)
tree49ff184a03542fa74820e2aa2ef40dc84cd61611 /Source/charon/encoding/payloads/ts_payload.c
parent0a373aec33c977b061c57b72a3bc909ef5971b56 (diff)
downloadstrongswan-a527a426d6d2c2d6619174b80816a96d45a0a9c9.tar.bz2
strongswan-a527a426d6d2c2d6619174b80816a96d45a0a9c9.tar.xz
- proposal setup implementation begun
Diffstat (limited to 'Source/charon/encoding/payloads/ts_payload.c')
-rw-r--r--Source/charon/encoding/payloads/ts_payload.c31
1 files changed, 16 insertions, 15 deletions
diff --git a/Source/charon/encoding/payloads/ts_payload.c b/Source/charon/encoding/payloads/ts_payload.c
index 59b732245..4bc6ccbc8 100644
--- a/Source/charon/encoding/payloads/ts_payload.c
+++ b/Source/charon/encoding/payloads/ts_payload.c
@@ -243,26 +243,23 @@ static iterator_t * create_traffic_selector_substructure_iterator (private_ts_pa
/**
* Implementation of ts_payload_t.get_traffic_selectors.
*/
-static size_t get_traffic_selectors(private_ts_payload_t *this, traffic_selector_t **traffic_selectors[])
+static linked_list_t *get_traffic_selectors(private_ts_payload_t *this)
{
- traffic_selector_t **ts;
+ traffic_selector_t *ts;
iterator_t *iterator;
- int i = 0;
+ linked_list_t *ts_list = linked_list_create();
- ts = allocator_alloc(sizeof(traffic_selector_t*) * this->number_of_traffic_selectors);
iterator = this->traffic_selectors->create_iterator(this->traffic_selectors, TRUE);
while (iterator->has_next(iterator))
{
traffic_selector_substructure_t *ts_substructure;
iterator->current(iterator, (void**)&ts_substructure);
- ts[i] = ts_substructure->get_traffic_selector(ts_substructure);
- i++;
+ ts = ts_substructure->get_traffic_selector(ts_substructure);
+ ts_list->insert_last(ts_list, (void*)ts);
}
iterator->destroy(iterator);
- /* return values */
- *traffic_selectors = ts;
- return this->number_of_traffic_selectors;
+ return ts_list;
}
/**
@@ -330,7 +327,7 @@ ts_payload_t *ts_payload_create(bool is_initiator)
this->public.set_initiator = (void (*) (ts_payload_t *,bool)) set_initiator;
this->public.add_traffic_selector_substructure = (void (*) (ts_payload_t *,traffic_selector_substructure_t *)) add_traffic_selector_substructure;
this->public.create_traffic_selector_substructure_iterator = (iterator_t* (*) (ts_payload_t *,bool)) create_traffic_selector_substructure_iterator;
- this->public.get_traffic_selectors = (size_t (*) (ts_payload_t *, traffic_selector_t**[])) get_traffic_selectors;
+ this->public.get_traffic_selectors = (linked_list_t *(*) (ts_payload_t *)) get_traffic_selectors;
/* private functions */
this->compute_length = compute_length;
@@ -349,19 +346,23 @@ ts_payload_t *ts_payload_create(bool is_initiator)
/*
* Described in header
*/
-ts_payload_t *ts_payload_create_from_traffic_selectors(bool is_initiator, traffic_selector_t *traffic_selectors[], size_t count)
+ts_payload_t *ts_payload_create_from_traffic_selectors(bool is_initiator, linked_list_t *traffic_selectors)
{
- int i;
+ iterator_t *iterator;
+ traffic_selector_t *ts;
+ traffic_selector_substructure_t *ts_substructure;
private_ts_payload_t *this;
this = (private_ts_payload_t*)ts_payload_create(is_initiator);
- for (i = 0; i < count; i++)
+ iterator = traffic_selectors->create_iterator(traffic_selectors, TRUE);
+ while (iterator->has_next(iterator))
{
- traffic_selector_substructure_t *ts_substructure;
- ts_substructure = traffic_selector_substructure_create_from_traffic_selector(traffic_selectors[i]);
+ iterator->current(iterator, (void**)&ts);
+ ts_substructure = traffic_selector_substructure_create_from_traffic_selector(ts);
this->public.add_traffic_selector_substructure(&(this->public), ts_substructure);
}
+ iterator->destroy(iterator);
return &(this->public);
}