/** Header section handler */ static apt_bool_t mrcp_parser_on_header_complete(apt_message_parser_t *parser, apt_message_context_t *context) { mrcp_message_t *mrcp_message = context->message; if(mrcp_message->start_line.version == MRCP_VERSION_2) { mrcp_resource_t *resource; mrcp_parser_t *mrcp_parser; if(mrcp_channel_id_parse(&mrcp_message->channel_id,&mrcp_message->header,mrcp_message->pool) == FALSE) { return FALSE; } mrcp_parser = apt_message_parser_object_get(parser); /* find resource */ resource = mrcp_resource_find(mrcp_parser->resource_factory,&mrcp_message->channel_id.resource_name); if(!resource) { return FALSE; } if(mrcp_message_resource_set(mrcp_message,resource) == FALSE) { return FALSE; } } if(mrcp_header_fields_parse(&mrcp_message->header,mrcp_message->pool) == FALSE) { return FALSE; } if(context->body && mrcp_generic_header_property_check(mrcp_message,GENERIC_HEADER_CONTENT_LENGTH) == TRUE) { mrcp_generic_header_t *generic_header = mrcp_generic_header_get(mrcp_message); if(generic_header && generic_header->content_length) { context->body->length = generic_header->content_length; } } return TRUE; }
/** Parse MRCP message (excluding message body) */ MRCP_DECLARE(apt_bool_t) mrcp_message_parse(mrcp_resource_factory_t *resource_factory, mrcp_message_t *message, apt_text_stream_t *stream) { mrcp_resource_t *resource; /* parse start-line */ if(mrcp_start_line_parse(&message->start_line,stream,message->pool) == FALSE) { return FALSE; } if(message->start_line.version == MRCP_VERSION_2) { mrcp_channel_id_parse(&message->channel_id,stream,message->pool); } /* find resource */ resource = mrcp_resource_find(resource_factory,&message->channel_id.resource_name); if(!resource) { return FALSE; } if(mrcp_message_resource_set(message,resource) == FALSE) { return FALSE; } /* parse header */ if(mrcp_message_header_parse(&message->header,stream,message->pool) == FALSE) { return FALSE; } return TRUE; }