Change interface for enumerator_create_filter() callback
This avoids the unportable 5 pointer hack, but requires enumerating in the callback.
This commit is contained in:
+32
-17
@@ -1200,12 +1200,20 @@ METHOD(ike_sa_t, generate_message, status_t,
|
||||
return status;
|
||||
}
|
||||
|
||||
static bool filter_fragments(private_ike_sa_t *this, packet_t **fragment,
|
||||
packet_t **packet)
|
||||
CALLBACK(filter_fragments, bool,
|
||||
private_ike_sa_t *this, enumerator_t *orig, va_list args)
|
||||
{
|
||||
*packet = (*fragment)->clone(*fragment);
|
||||
set_dscp(this, *packet);
|
||||
return TRUE;
|
||||
packet_t *fragment, **packet;
|
||||
|
||||
VA_ARGS_VGET(args, packet);
|
||||
|
||||
if (orig->enumerate(orig, &fragment))
|
||||
{
|
||||
*packet = fragment->clone(fragment);
|
||||
set_dscp(this, *packet);
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
METHOD(ike_sa_t, generate_message_fragmented, status_t,
|
||||
@@ -1265,7 +1273,7 @@ METHOD(ike_sa_t, generate_message_fragmented, status_t,
|
||||
{
|
||||
charon->bus->message(charon->bus, message, FALSE, FALSE);
|
||||
}
|
||||
*packets = enumerator_create_filter(fragments, (void*)filter_fragments,
|
||||
*packets = enumerator_create_filter(fragments, filter_fragments,
|
||||
this, NULL);
|
||||
}
|
||||
return status;
|
||||
@@ -2623,24 +2631,31 @@ METHOD(ike_sa_t, add_configuration_attribute, void,
|
||||
array_insert(this->attributes, ARRAY_TAIL, &entry);
|
||||
}
|
||||
|
||||
/**
|
||||
* Enumerator filter for attributes
|
||||
*/
|
||||
static bool filter_attribute(void *null, attribute_entry_t **in,
|
||||
configuration_attribute_type_t *type, void *in2,
|
||||
chunk_t *data, void *in3, bool *handled)
|
||||
CALLBACK(filter_attribute, bool,
|
||||
void *null, enumerator_t *orig, va_list args)
|
||||
{
|
||||
*type = (*in)->type;
|
||||
*data = (*in)->data;
|
||||
*handled = (*in)->handler != NULL;
|
||||
return TRUE;
|
||||
attribute_entry_t *entry;
|
||||
configuration_attribute_type_t *type;
|
||||
chunk_t *data;
|
||||
bool *handled;
|
||||
|
||||
VA_ARGS_VGET(args, type, data, handled);
|
||||
|
||||
if (orig->enumerate(orig, &entry))
|
||||
{
|
||||
*type = entry->type;
|
||||
*data = entry->data;
|
||||
*handled = entry->handler != NULL;
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
METHOD(ike_sa_t, create_attribute_enumerator, enumerator_t*,
|
||||
private_ike_sa_t *this)
|
||||
{
|
||||
return enumerator_create_filter(array_create_enumerator(this->attributes),
|
||||
(void*)filter_attribute, NULL, NULL);
|
||||
filter_attribute, NULL, NULL);
|
||||
}
|
||||
|
||||
METHOD(ike_sa_t, create_task_enumerator, enumerator_t*,
|
||||
|
||||
Reference in New Issue
Block a user