Use a generic list encoding rule we can use to specify the wrapped payload type

This commit is contained in:
Martin Willi
2012-03-20 17:30:42 +01:00
parent 95a26523af
commit f62a7c7c71
9 changed files with 77 additions and 179 deletions
+9 -37
View File
@@ -358,34 +358,6 @@ static bool parse_chunk(private_parser_t *this, int rule_number,
return TRUE;
}
/**
* Map a encoding type to a encoded payload
*/
static payload_type_t map_wrapped_payload(encoding_type_t type)
{
switch (type)
{
case PROPOSALS:
return PROPOSAL_SUBSTRUCTURE;
case PROPOSALS_V1:
return PROPOSAL_SUBSTRUCTURE_V1;
case TRANSFORMS:
return TRANSFORM_SUBSTRUCTURE;
case TRANSFORMS_V1:
return TRANSFORM_SUBSTRUCTURE_V1;
case TRANSFORM_ATTRIBUTES:
return TRANSFORM_ATTRIBUTE;
case TRANSFORM_ATTRIBUTES_V1:
return TRANSFORM_ATTRIBUTE_V1;
case CONFIGURATION_ATTRIBUTES:
return CONFIGURATION_ATTRIBUTE;
case TRAFFIC_SELECTORS:
return TRAFFIC_SELECTOR_SUBSTRUCTURE;
default:
return NO_PAYLOAD;
}
}
METHOD(parser_t, parse_payload, status_t,
private_parser_t *this, payload_type_t payload_type, payload_t **payload)
{
@@ -513,18 +485,18 @@ METHOD(parser_t, parse_payload, status_t,
}
break;
}
/* lists */
case PROPOSALS:
case PROPOSALS_V1:
case TRANSFORMS:
case TRANSFORMS_V1:
case TRANSFORM_ATTRIBUTES:
case TRANSFORM_ATTRIBUTES_V1:
case TRAFFIC_SELECTORS:
case PAYLOAD_LIST + PROPOSAL_SUBSTRUCTURE:
case PAYLOAD_LIST + PROPOSAL_SUBSTRUCTURE_V1:
case PAYLOAD_LIST + TRANSFORM_SUBSTRUCTURE:
case PAYLOAD_LIST + TRANSFORM_SUBSTRUCTURE_V1:
case PAYLOAD_LIST + TRANSFORM_ATTRIBUTE:
case PAYLOAD_LIST + TRANSFORM_ATTRIBUTE_V1:
case PAYLOAD_LIST + CONFIGURATION_ATTRIBUTE:
case PAYLOAD_LIST + TRAFFIC_SELECTOR_SUBSTRUCTURE:
{
if (payload_length < header_length ||
!parse_list(this, rule_number, output + rule->offset,
map_wrapped_payload(rule->type),
rule->type - PAYLOAD_LIST,
payload_length - header_length))
{
pld->destroy(pld);