-/**
- * @file ts_payload.c
- *
- * @brief Implementation of ts_payload_t.
- *
- */
-
/*
* Copyright (C) 2005-2006 Martin Willi
* Copyright (C) 2005 Jan Hutter
/**
* Private data of an ts_payload_t object.
- *
+ *
*/
struct private_ts_payload_t {
/**
* Public ts_payload_t interface.
*/
ts_payload_t public;
-
+
/**
* TRUE if this TS payload is of type TSi, FALSE for TSr.
*/
bool is_initiator;
-
+
/**
* Next payload type.
*/
* Critical flag.
*/
bool critical;
-
+
/**
* Length of this payload.
*/
u_int16_t payload_length;
-
+
/**
* Number of traffic selectors
*/
u_int8_t number_of_traffic_selectors;
-
+
/**
* Contains the traffic selectors of type traffic_selector_substructure_t.
*/
/**
* Encoding rules to parse or generate a TS payload
- *
- * The defined offsets are the positions in a object of type
+ *
+ * The defined offsets are the positions in a object of type
* private_ts_payload_t.
- *
+ *
*/
encoding_rule_t ts_payload_encodings[] = {
- /* 1 Byte next payload type, stored in the field next_payload */
+ /* 1 Byte next payload type, stored in the field next_payload */
{ U_INT_8, offsetof(private_ts_payload_t, next_payload) },
/* the critical bit */
{ FLAG, offsetof(private_ts_payload_t, critical) },
- /* 7 Bit reserved bits, nowhere stored */
+ /* 7 Bit reserved bits, nowhere stored */
{ RESERVED_BIT, 0 },
{ RESERVED_BIT, 0 },
{ RESERVED_BIT, 0 },
{ RESERVED_BIT, 0 },
{ RESERVED_BIT, 0 },
{ RESERVED_BIT, 0 },
- /* Length of the whole payload*/
+ /* Length of the whole payload*/
{ PAYLOAD_LENGTH, offsetof(private_ts_payload_t, payload_length)},
- /* 1 Byte TS type*/
+ /* 1 Byte TS type*/
{ U_INT_8, offsetof(private_ts_payload_t, number_of_traffic_selectors) },
/* 3 reserved bytes */
{ RESERVED_BYTE, 0 },
static status_t verify(private_ts_payload_t *this)
{
iterator_t *iterator;
+ payload_t *current_traffic_selector;
status_t status = SUCCESS;
-
+
if (this->number_of_traffic_selectors != (this->traffic_selectors->get_count(this->traffic_selectors)))
{
/* must be the same */
return FAILED;
}
-
+
iterator = this->traffic_selectors->create_iterator(this->traffic_selectors,TRUE);
- while(iterator->has_next(iterator))
+ while(iterator->iterate(iterator, (void**)¤t_traffic_selector))
{
- payload_t *current_traffic_selector;
- iterator->current(iterator,(void **)¤t_traffic_selector);
-
status = current_traffic_selector->verify(current_traffic_selector);
if (status != SUCCESS)
{
}
}
iterator->destroy(iterator);
-
+
return status;
}
iterator_t *iterator;
size_t ts_count = 0;
size_t length = TS_PAYLOAD_HEADER_LENGTH;
+ payload_t *current_traffic_selector;
+
iterator = this->traffic_selectors->create_iterator(this->traffic_selectors,TRUE);
- while (iterator->has_next(iterator))
+ while (iterator->iterate(iterator, (void**)¤t_traffic_selector))
{
- payload_t * current_traffic_selector;
- iterator->current(iterator,(void **) ¤t_traffic_selector);
length += current_traffic_selector->get_length(current_traffic_selector);
ts_count++;
}
iterator->destroy(iterator);
-
- this->number_of_traffic_selectors= ts_count;
- this->payload_length = length;
+ this->number_of_traffic_selectors= ts_count;
+ this->payload_length = length;
}
/**
{
traffic_selector_t *ts;
iterator_t *iterator;
+ traffic_selector_substructure_t *ts_substructure;
linked_list_t *ts_list = linked_list_create();
-
+
iterator = this->traffic_selectors->create_iterator(this->traffic_selectors, TRUE);
- while (iterator->has_next(iterator))
+ while (iterator->iterate(iterator, (void**)&ts_substructure))
{
- traffic_selector_substructure_t *ts_substructure;
- iterator->current(iterator, (void**)&ts_substructure);
ts = ts_substructure->get_traffic_selector(ts_substructure);
ts_list->insert_last(ts_list, (void*)ts);
}
iterator->destroy(iterator);
-
+
return ts_list;
}
this->public.payload_interface.set_next_type = (void (*) (payload_t *,payload_type_t)) set_next_type;
this->public.payload_interface.get_type = (payload_type_t (*) (payload_t *)) get_payload_type;
this->public.payload_interface.destroy = (void (*) (payload_t *))destroy;
-
+
/* public functions */
this->public.destroy = (void (*) (ts_payload_t *)) destroy;
this->public.get_initiator = (bool (*) (ts_payload_t *)) get_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 = (linked_list_t *(*) (ts_payload_t *)) get_traffic_selectors;
-
+
/* private variables */
this->critical = FALSE;
this->next_payload = NO_PAYLOAD;
this->payload_length =TS_PAYLOAD_HEADER_LENGTH;
this->is_initiator = is_initiator;
this->number_of_traffic_selectors = 0;
- this->traffic_selectors = linked_list_create();
+ this->traffic_selectors = linked_list_create();
return &(this->public);
}
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);
-
+
iterator = traffic_selectors->create_iterator(traffic_selectors, TRUE);
- while (iterator->has_next(iterator))
+ while (iterator->iterate(iterator, (void**)&ts))
{
- 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);
}