Exemplo n.º 1
0
/*
 * Print the user_data hash table
 */
void print_lrf_user_data(int log_level){

	int i;
	user_d *d;

	LOG(L_INFO, "INFO:"M_NAME":--------LRF user data list begin--------\n");
	for(i=0;i<user_data_hash_size;i++){
		lrf_lock(i);
			d = user_datas[i].head;
			while(d){
				print_user_data(d, log_level);
				d = d->next;
			}
		lrf_unlock(i);
	}
	LOG(L_INFO, "INFO:"M_NAME":--------LRF user data list end--------\n");
}
Exemplo n.º 2
0
/**
 * Parses the user data XML and copies data into a new ims_subscription structure.
 * @param xml - the input xml (NB must be null terminated)
 * @returns the ims_subscription* on success or NULL on error
 */
ims_subscription *parse_user_data(str xml)
{
	xmlDocPtr doc=0;
	xmlNodePtr root=0;
	ims_subscription *s = 0;
	if (!ctxtInit) parser_init(scscf_user_data_dtd,scscf_user_data_xsd);	
	doc=0;
	
	doc = xmlParseDoc((unsigned char *)xml.s);
	if (!doc){
		LM_ERR("This is not a valid XML <%.*s>\n", xml.len,xml.s);
		goto error;
	}

	if (dtdCtxt){
		if (xmlValidateDtd(dtdCtxt,doc,dtd)!=1){
			LM_ERR("Verification of XML against DTD failed <%.*s>\n", xml.len,xml.s);
			goto error;
		}
	}
	if (xsdCtxt){
		if (xmlSchemaValidateDoc(xsdCtxt,doc)!=0){
			LM_ERR("Verification of XML against XSD failed <%.*s>\n", xml.len,xml.s);
			goto error;
		}
	}

	root = xmlDocGetRootElement(doc);
	if (!root){
		LM_ERR("Empty XML <%.*s>\n",
			xml.len,xml.s);
		goto error;
	}
	s = parse_ims_subscription(doc,root);
	if (!s){
		LM_ERR("Error while loading into  ims subscription structure\n");
		goto error;		
	}
	xmlFreeDoc(doc);
	print_user_data(s);
	return s;
error:	
	if (doc) xmlFreeDoc(doc);
	return 0;	
}
Exemplo n.º 3
0
/**
 * Process a Push Profile Request and return the Answer for it.
 * @param ppr - the PPR Diameter request
 * @returns the PPA Diameter answer
 */
AAAMessage* Cx_PPA(AAAMessage * ppr)
{
	AAAMessage	*ppa_msg;
	str ppr_data;
	ims_subscription *imss;
	int i,j;
	r_public *pu;
	str ccf1,ccf2,ecf1,ecf2;

	ppa_msg	= cdpb.AAACreateResponse(ppr);
	if (!ppa_msg) return 0;	
	
	if((ppr_data=Cx_get_user_data(ppr)).len != 0){
		LOG(L_INFO,"INFO:"M_NAME":Cx_PPA(): Received a User_Data PPR!\n");
		imss=parse_user_data(ppr_data);
		print_user_data(L_ALERT,imss);
		
		for(i=0;i<imss->service_profiles_cnt;i++)
			for(j=0;j<imss->service_profiles[i].public_identities_cnt;j++){				
				pu = update_r_public(imss->service_profiles[i].public_identities[j].public_identity,
					0,&imss,0,0,0,0);
				if (!pu) continue;
				r_unlock(pu->hash);
			}			
	}
	else{
		if (Cx_get_charging_info(ppr,&ccf1,&ccf2,&ecf1,&ecf2)){
			LOG(L_INFO,"INFO:"M_NAME":Cx_PPA(): Received a Charging Info PPR - NOT IMPLEMENTED\n");
			//TODO find all r_public that should be updated and update
		}
	}	
	Cx_add_vendor_specific_appid(ppa_msg,IMS_vendor_id_3GPP,IMS_Cx,0 /*IMS_Cx*/);
	Cx_add_auth_session_state(ppa_msg,1);		
	
	Cx_add_result_code(ppa_msg,DIAMETER_SUCCESS);
	#ifdef WITH_IMS_PM
		ims_pm_diameter_answer(ppa_msg);
	#endif			
	return ppa_msg;
}