AXIS2_EXTERN int AXIS2_CALL saml_response_build()

in src/omxmlsec/saml/response.c [276:383]


AXIS2_EXTERN int AXIS2_CALL saml_response_build(saml_response_t *response,
												axiom_node_t *node, 
												const axutil_env_t *env)
{
	axutil_hash_t *attr_hash = NULL;
	axiom_element_t *element = NULL;
	axutil_hash_index_t *hi = NULL;
	axiom_child_element_iterator_t *iterator = NULL;
	axiom_node_t *child_node;
	saml_assertion_t *assertion;

	if (axiom_node_get_node_type(node, env) != AXIOM_ELEMENT)
	{
		return AXIS2_FAILURE;
	}
	
	if ((element = axiom_node_get_data_element(node, env)) == NULL)
	{
		return AXIS2_FAILURE;
	}
	
	response->original_xml = node;
	/* initialize the attributes */
	attr_hash = axiom_element_get_all_attributes(element, env);	

	for (hi = axutil_hash_first(attr_hash, env); hi; hi = axutil_hash_next(env, hi))
	{
		void *v = NULL;
        axutil_hash_this(hi, NULL, NULL, &v);
		if (v)
		{
			axis2_char_t *attr_val = NULL;
			axiom_attribute_t *attr = (axiom_attribute_t*)v;			
			attr_val = axiom_attribute_get_value(attr, env);

			if(!axutil_strcmp(axiom_attribute_get_localname(attr, env), SAML_RESPONSE_ID))
			{
				response->response_id=  attr_val;
			}
			if(!axutil_strcmp(axiom_attribute_get_localname(attr, env), SAML_IN_RESPONSE_TO))
			{
				response->request_response_id =  attr_val;
			}
			else if(!axutil_strcmp(axiom_attribute_get_localname(attr, env), SAML_MAJORVERSION))
			{
				response->major_version = attr_val;
			}
			else if(!axutil_strcmp(axiom_attribute_get_localname(attr, env), SAML_MINORVERSION))
			{
				response->minor_version = attr_val;
			}
			else if(!axutil_strcmp(axiom_attribute_get_localname(attr, env), SAML_ISSUE_INSTANT))
			{
				response->issue_instant = axutil_date_time_create(env);
				axutil_date_time_deserialize_date(response->issue_instant, env, attr_val);
			}
			else if(!axutil_strcmp(axiom_attribute_get_localname(attr, env), SAML_RECEPIENT))
			{
				response->recepient = attr_val;
			}
		}
	}

	iterator = axiom_element_get_child_elements(element, env, node);
	if(iterator)
	{
		while(axiom_child_element_iterator_has_next(iterator, env))
		{
		
			axis2_char_t *t = NULL;
			child_node = axiom_child_element_iterator_next(iterator, env);
			element = (axiom_element_t *)axiom_node_get_data_element(child_node, env);
			t = axiom_node_to_string(child_node, env);
			if(element != NULL && !(axutil_strcmp(axiom_element_get_localname(element, env),
																		SAML_SIGNATURE)))
			{
				response->signature = child_node;
			}
			else if(element != NULL && !(axutil_strcmp(axiom_element_get_localname(element, env), 
																		SAML_STATUS)))
			{
				response->status = (saml_status_t*)AXIS2_MALLOC(env->allocator,
															sizeof(saml_status_t));
				if(response->status)
				{
					saml_status_build(response->status, child_node, env);
				}
			}
			else if(element != NULL && !(axutil_strcmp(axiom_element_get_localname(element, env), 
																		SAML_ASSERTION)))
			{
				assertion = saml_assertion_create(env);
				if(assertion)
				{
					saml_assertion_build(assertion, child_node, env);
					axutil_array_list_add(response->saml_assertions, env, assertion);
				}
			}
		
		}

	}

	return AXIS2_SUCCESS;



}