/*
 * $Id$
 *
 * The initial version of this code was written by Dragos Vingarzan
 * (dragos(dot)vingarzan(at)fokus(dot)fraunhofer(dot)de and the
 * Fruanhofer Institute. It was and still is maintained in a separate
 * branch of the original SER. We are therefore migrating it to
 * Kamailio/SR and look forward to maintaining it from here on out.
 * 2011/2012 Smile Communications, Pty. Ltd.
 * ported/maintained/improved by
 * Jason Penton (jason(dot)penton(at)smilecoms.com and
 * Richard Good (richard(dot)good(at)smilecoms.com) as part of an
 * effort to add full IMS support to Kamailio/SR using a new and
 * improved architecture
 *
 * NB: Alot of this code was originally part of OpenIMSCore,
 * FhG Focus. Thanks for great work! This is an effort to
 * break apart the various CSCF functions into logically separate
 * components. We hope this will drive wider use. We also feel
 * that in this way the architecture is more complete and thereby easier
 * to manage in the Kamailio/SR environment
 *
 * This file is part of Kamailio, a free SIP server.
 *
 * Kamailio is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version
 *
 * Kamailio is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 *
 */

/*
 * TS 29.229 - Cx
 *
 * http://www.3gpp.org/ftp/Specs/html-info/29229.htm
 *
 * + ETSI, CableLabs Cx additions
 *
 *
 * TS 29.329 - Sh
 *
 * http://www.3gpp.org/ftp/Specs/html-info/29329.htm
 *
 */

#include "macros.h"


#undef CDP_AVP_MODULE
#define CDP_AVP_MODULE imsapp

#if !defined(CDP_AVP_DECLARATION) && !defined(CDP_AVP_EXPORT) \
		&& !defined(CDP_AVP_INIT) && !defined(CDP_AVP_REFERENCE)
#ifndef _CDP_AVP_IMSAPP_H_1
#define _CDP_AVP_IMSAPP_H_1

#include "../cdp/cdp_load.h"

#else

/* undo the macros definition if this was re-included */
#define CDP_AVP_EMPTY_MACROS
#include "macros.h"
#undef CDP_AVP_EMPTY_MACROS

#endif
#endif //_CDP_AVP_NASAPP_H_1

/*
 * The list of AVPs must be declared in the following format:
 *
 * 		cdp_avp_add(<avp_name>.<vendor_id>,<flags>,<avp_type>,<data_type>)
 * 		or
 * 		cdp_avp_add_ptr(<avp_name>.<vendor_id>,<flags>,<avp_type>,<data_type>)
 *
 * 		cdp_avp_get(<avp_name>.<vendor_id>,<avp_type>,<data_type>)
 *
 * or, to add both add and get at once:
 *
 * 		cdp_avp(<avp_name>.<vendor_id>,<flags>,<avp_type>,<data_type>)
 * 		or
 * 		cdp_avp_ptr(<avp_name>.<vendor_id>,<flags>,<avp_type>,<data_type>)
 *
 * The add macros ending in _ptr will generate function with the extra AVPDataStatus data_do parameter
 *
 * Parameters:
 *  - avp_name - a value of AVP_<avp_name> must resolve to the AVP code
 *  - vendor_id - an int value
 *  - flags	- AVP Flags to add to the AVP
 *  - avp_type - an avp type for which a function was defined a
 * 				int cdp_avp_get_<avp_type>(AAA_AVP *avp,<data_type> *data)
 * 		Some valid suggestions (and the data_type):
 *
 *  			OctetString 	- str
 *  			Integer32		- int32_t
 *  			Integer64 		- int64_t
 *  			Unsigned32 		- uint32_t
 *  			Unsigned64 		- uint64_t
 *  			Float32 		- float
 *  			Float64 		- double
 *  			Grouped 		- AAA_AVP_LIST
 *
 *  			Address 		- ip_address
 *  			Time 			- time_t
 *  			UTF8String 		- str
 *  			DiameterIdentity- str
 *  			DiameterURI		- str
 *  			Enumerated		- int32_t
 *  			IPFilterRule	- str
 *  			QoSFilterRule	- str
 *  - data_type - the respective data type for the avp_type defined above
 *
 *  The functions generated will return 1 on success or 0 on error or not found
 *  The prototype of the function will be:
 *
 *  	int cdp_avp_get_<avp_name_group>(AAA_AVP_LIST list,<data_type> *data,AAA_AVP **avp_ptr)
 *
 *
 *
 *  For Grouped AVPs with 2 or 3 known inside AVPs, you can define a shortcut function which will find the group and
 *  also extract the 2 or 3 AVPs.
 *  Do not define both 2 and 3 for the same type!
 *
 *
 *		cdp_avp_add2(<avp_name_group>.<vendor_id_group>,<flags_group>,<avp_name_1>,<data_type_1>,<avp_name_2>,<data_type_2>)
 * 		cdp_avp_get2(<avp_name_group>.<vendor_id_group>,<avp_name_1>,<data_type_1>,<avp_name_2>,<data_type_2>)
 *
 *		cdp_avp_get3(<avp_name_group>.<vendor_id_group>,<flags_group>,<avp_name_1>,<data_type_1>,<avp_name_2>,<data_type_2>,<avp_name_3>,<data_type_3>)
 *  	cdp_avp_get3(<avp_name_group>.<vendor_id_group>,<avp_name_1>,<data_type_1>,<avp_name_2>,<data_type_2>,<avp_name_3>,<data_type_3>)
 *
 * 	 or, to add both add and get at once:
 *
 *		cdp_avp2(<avp_name_group>.<vendor_id_group>,<flags_group>,<avp_name_1>,<data_type_1>,<avp_name_2>,<data_type_2>)
 * 		cdp_avp3(<avp_name_group>.<vendor_id_group>,<flags_group>,<avp_name_1>,<data_type_1>,<avp_name_2>,<data_type_2>)
 *
 *  avp_name_group - a value of AVP_<avp_name_group> must resolve to the AVP code of the group
 *
 *  vendor_id_group - an int value
 *
 *  avp_name_N	- the name of the Nth parameter.
 *  	Previously, a cdp_avp_get(<avp_name_N>,<vendor_id_N>,<avp_type_N>,<data_type_N>) must be defined!
 *
 *  data_type_N	- the respective data type for avp_type_N (same as <data_type_N)
 *
 *  The functions generated will return the number of found AVPs inside on success or 0 on error or not found
 *  The prototype of the function will be:
 *
 *  	int cdp_avp_get_<avp_name_group>_Group(AAA_AVP_LIST list,<data_type_1> *avp_name_1,<data_type_2> *avp_name_2[,<data_type_3> *avp_name_3],AAA_AVP **avp_ptr)
 *
 *  Note - generally, all data of type str will need to be defined with ..._ptr
 *  Note - Groups must be defined with:
 *  	 cdp_avp_add_ptr(...) and data_type AAA_AVP_LIST*
 *  	 cdp_avp_get(...) and data_type AAA_AVP_LIST
 */
#undef CDP_AVP_NAME
#define CDP_AVP_NAME(avp_name) AVP_IMS_##avp_name

cdp_avp_ptr(Visited_Network_Identifier, IMS_vendor_id_3GPP,
		AAA_AVP_FLAG_MANDATORY, OctetString, str)

		cdp_avp_ptr(Public_Identity, IMS_vendor_id_3GPP, AAA_AVP_FLAG_MANDATORY,
				UTF8String, str)

				cdp_avp_ptr(Server_Name, IMS_vendor_id_3GPP,
						AAA_AVP_FLAG_MANDATORY, UTF8String, str)

						cdp_avp_add_ptr(Server_Capabilities, IMS_vendor_id_3GPP,
								AAA_AVP_FLAG_MANDATORY, Grouped,
								AAA_AVP_LIST *) cdp_avp_get(Server_Capabilities,
								IMS_vendor_id_3GPP, AAA_AVP_FLAG_MANDATORY,
								Grouped, AAA_AVP_LIST)

								cdp_avp(Mandatory_Capability,
										IMS_vendor_id_3GPP,
										AAA_AVP_FLAG_MANDATORY, Unsigned32,
										uint32_t)

										cdp_avp(Optional_Capability,
												IMS_vendor_id_3GPP,
												AAA_AVP_FLAG_MANDATORY,
												Unsigned32, uint32_t)

												cdp_avp_ptr(User_Data_Cx,
														IMS_vendor_id_3GPP,
														AAA_AVP_FLAG_MANDATORY,
														OctetString, str)

														cdp_avp(SIP_Number_Auth_Items,
																IMS_vendor_id_3GPP,
																AAA_AVP_FLAG_MANDATORY,
																Unsigned32,
																uint32_t)

																cdp_avp_ptr(
																		SIP_Authentication_Scheme,
																		IMS_vendor_id_3GPP,
																		AAA_AVP_FLAG_MANDATORY,
																		UTF8String,
																		str)

																		cdp_avp_ptr(
																				SIP_Authenticate,
																				IMS_vendor_id_3GPP,
																				AAA_AVP_FLAG_MANDATORY,
																				OctetString,
																				str)

																				cdp_avp_ptr(
																						SIP_Authorization,
																						IMS_vendor_id_3GPP,
																						AAA_AVP_FLAG_MANDATORY,
																						OctetString,
																						str)

																						cdp_avp_ptr(
																								SIP_Authentication_Context,
																								IMS_vendor_id_3GPP,
																								AAA_AVP_FLAG_MANDATORY,
																								OctetString,
																								str)

																								cdp_avp_add_ptr(
																										SIP_Auth_Data_Item,
																										IMS_vendor_id_3GPP,
																										AAA_AVP_FLAG_MANDATORY,
																										Grouped,
																										AAA_AVP_LIST
																												*)
																										cdp_avp_get(
																												SIP_Auth_Data_Item,
																												IMS_vendor_id_3GPP,
																												AAA_AVP_FLAG_MANDATORY,
																												Grouped,
																												AAA_AVP_LIST)

																												cdp_avp(SIP_Item_Number,
																														IMS_vendor_id_3GPP,
																														AAA_AVP_FLAG_MANDATORY,
																														Unsigned32,
																														uint32_t)

																														cdp_avp(Server_Assignment_Type,
																																IMS_vendor_id_3GPP,
																																AAA_AVP_FLAG_MANDATORY,
																																Enumerated,
																																int32_t)

																																cdp_avp_add_ptr(Deregistration_Reason, IMS_vendor_id_3GPP, AAA_AVP_FLAG_MANDATORY, Grouped, AAA_AVP_LIST *)
																																		cdp_avp_get(
																																				Deregistration_Reason,
																																				IMS_vendor_id_3GPP,
																																				AAA_AVP_FLAG_MANDATORY,
																																				Grouped,
																																				AAA_AVP_LIST)

																																				cdp_avp(Reason_Code,
																																						IMS_vendor_id_3GPP,
																																						AAA_AVP_FLAG_MANDATORY,
																																						Enumerated,
																																						int32_t)

																																						cdp_avp_ptr(
																																								Reason_Info,
																																								IMS_vendor_id_3GPP,
																																								AAA_AVP_FLAG_MANDATORY,
																																								UTF8String,
																																								str)

																																								cdp_avp_add_ptr(
																																										Charging_Information,
																																										IMS_vendor_id_3GPP, AAA_AVP_FLAG_MANDATORY,
																																										Grouped,
																																										AAA_AVP_LIST
																																												*)
																																										cdp_avp_get(
																																												Charging_Information,
																																												IMS_vendor_id_3GPP,
																																												AAA_AVP_FLAG_MANDATORY,
																																												Grouped,
																																												AAA_AVP_LIST)

																																												cdp_avp_ptr(
																																														Primary_Event_Charging_Function_Name,
																																														IMS_vendor_id_3GPP,
																																														AAA_AVP_FLAG_MANDATORY,
																																														DiameterURI,
																																														str)

																																														cdp_avp_ptr(
																																																Secondary_Event_Charging_Function_Name,
																																																IMS_vendor_id_3GPP,
																																																AAA_AVP_FLAG_MANDATORY,
																																																DiameterURI,
																																																str)

																																																cdp_avp_ptr(
																																																		Primary_Charging_Collection_Function_Name,
																																																		IMS_vendor_id_3GPP,
																																																		AAA_AVP_FLAG_MANDATORY,
																																																		DiameterURI,
																																																		str)

																																																		cdp_avp_ptr(
																																																				Secondary_Charging_Collection_Function_Name, IMS_vendor_id_3GPP, AAA_AVP_FLAG_MANDATORY, DiameterURI, str)

																																																				cdp_avp(User_Authorization_Type,
																																																						IMS_vendor_id_3GPP,
																																																						AAA_AVP_FLAG_MANDATORY,
																																																						Enumerated,
																																																						int32_t)

																																																						cdp_avp(User_Data_Already_Available,
																																																								IMS_vendor_id_3GPP,
																																																								AAA_AVP_FLAG_MANDATORY,
																																																								Enumerated,
																																																								int32_t)

																																																								cdp_avp_ptr(
																																																										Confidentiality_Key,
																																																										IMS_vendor_id_3GPP,
																																																										AAA_AVP_FLAG_MANDATORY,
																																																										OctetString,
																																																										str)

																																																										cdp_avp_ptr(
																																																												Integrity_Key,
																																																												IMS_vendor_id_3GPP,
																																																												AAA_AVP_FLAG_MANDATORY,
																																																												OctetString,
																																																												str)

																																																												cdp_avp_add_ptr(
																																																														Supported_Features,
																																																														IMS_vendor_id_3GPP,
																																																														0,
																																																														Grouped,
																																																														AAA_AVP_LIST
																																																																*)
																																																														cdp_avp_add3(
																																																																Supported_Features, IMS_vendor_id_3GPP, 0, Vendor_Id, uint32_t,
																																																																Feature_List_ID,
																																																																uint32_t,
																																																																Feature_List,
																																																																uint32_t) cdp_avp_get(Supported_Features, IMS_vendor_id_3GPP, 0, Grouped, AAA_AVP_LIST)
																																																																cdp_avp_get3(
																																																																		Supported_Features,
																																																																		IMS_vendor_id_3GPP,
																																																																		0,
																																																																		Vendor_Id, uint32_t, Feature_List_ID, uint32_t, Feature_List, uint32_t)

																																																																		cdp_avp(Feature_List_ID,
																																																																				IMS_vendor_id_3GPP,
																																																																				0,
																																																																				Unsigned32,
																																																																				uint32_t)

																																																																				cdp_avp(Feature_List,
																																																																						IMS_vendor_id_3GPP,
																																																																						0,
																																																																						Unsigned32,
																																																																						uint32_t)

																																																																						cdp_avp_add_ptr(
																																																																								Supported_Applications,
																																																																								IMS_vendor_id_3GPP,
																																																																								0,
																																																																								Grouped,
																																																																								AAA_AVP_LIST
																																																																										*)
																																																																								cdp_avp_get(
																																																																										Supported_Applications,
																																																																										IMS_vendor_id_3GPP,
																																																																										0,
																																																																										Grouped,
																																																																										AAA_AVP_LIST)

																																																																										cdp_avp_add_ptr(
																																																																												Associated_Identities,
																																																																												IMS_vendor_id_3GPP, 0, Grouped,
																																																																												AAA_AVP_LIST
																																																																														*)
																																																																												cdp_avp_get(
																																																																														Associated_Identities,
																																																																														IMS_vendor_id_3GPP,
																																																																														0,
																																																																														Grouped,
																																																																														AAA_AVP_LIST)

																																																																														cdp_avp(Originating_Request,
																																																																																IMS_vendor_id_3GPP,
																																																																																AAA_AVP_FLAG_MANDATORY,
																																																																																Enumerated,
																																																																																int32_t)

																																																																																cdp_avp_ptr(Wildcarded_PSI, IMS_vendor_id_3GPP, 0,
																																																																																		UTF8String,
																																																																																		str)

																																																																																		cdp_avp_add_ptr(SIP_Digest_Authenticate, IMS_vendor_id_3GPP, 0, Grouped,
																																																																																				AAA_AVP_LIST
																																																																																						*)
																																																																																				cdp_avp_get(
																																																																																						SIP_Digest_Authenticate,
																																																																																						IMS_vendor_id_3GPP,
																																																																																						0,
																																																																																						Grouped,
																																																																																						AAA_AVP_LIST)

																																																																																						cdp_avp_ptr(
																																																																																								Wildcarded_IMPU,
																																																																																								IMS_vendor_id_3GPP,
																																																																																								0,
																																																																																								UTF8String,
																																																																																								str)

																																																																																								cdp_avp(UAR_Flags,
																																																																																										IMS_vendor_id_3GPP,
																																																																																										0,
																																																																																										Unsigned32,
																																																																																										uint32_t)

																																																																																										cdp_avp(Loose_Route_Indication,
																																																																																												IMS_vendor_id_3GPP,
																																																																																												0,
																																																																																												Enumerated,
																																																																																												int32_t)

																																																																																												cdp_avp_add_ptr(
																																																																																														SCSCF_Restoration_Info,
																																																																																														IMS_vendor_id_3GPP,
																																																																																														0,
																																																																																														Grouped,
																																																																																														AAA_AVP_LIST
																																																																																																*)
																																																																																														cdp_avp_get(
																																																																																																SCSCF_Restoration_Info, IMS_vendor_id_3GPP, 0,
																																																																																																Grouped,
																																																																																																AAA_AVP_LIST)

																																																																																																cdp_avp_ptr(Path, IMS_vendor_id_3GPP, 0, OctetString,
																																																																																																		str)

																																																																																																		cdp_avp_ptr(
																																																																																																				Contact,
																																																																																																				IMS_vendor_id_3GPP, 0, OctetString,
																																																																																																				str)

																																																																																																				cdp_avp_add_ptr(
																																																																																																						Subscription_Info, IMS_vendor_id_3GPP, 0, Grouped, AAA_AVP_LIST *)
																																																																																																						cdp_avp_get(Subscription_Info,
																																																																																																								IMS_vendor_id_3GPP,
																																																																																																								0, Grouped,
																																																																																																								AAA_AVP_LIST)

																																																																																																								cdp_avp_ptr(
																																																																																																										From_SIP_Header,
																																																																																																										IMS_vendor_id_3GPP, 0, OctetString,
																																																																																																										str)

																																																																																																										cdp_avp_ptr(
																																																																																																												To_SIP_Header,
																																																																																																												IMS_vendor_id_3GPP,
																																																																																																												0,
																																																																																																												OctetString,
																																																																																																												str)

																																																																																																												cdp_avp_ptr(
																																																																																																														Record_Route,
																																																																																																														IMS_vendor_id_3GPP,
																																																																																																														0,
																																																																																																														OctetString,
																																																																																																														str)

																																																																																																														cdp_avp_add_ptr(
																																																																																																																Associated_Registered_Identities,
																																																																																																																IMS_vendor_id_3GPP,
																																																																																																																0,
																																																																																																																Grouped,
																																																																																																																AAA_AVP_LIST
																																																																																																																		*)
																																																																																																																cdp_avp_get(
																																																																																																																		Associated_Registered_Identities,
																																																																																																																		IMS_vendor_id_3GPP, 0,
																																																																																																																		Grouped,
																																																																																																																		AAA_AVP_LIST)

																																																																																																																		cdp_avp(Multiple_Registration_Indication,
																																																																																																																				IMS_vendor_id_3GPP,
																																																																																																																				0,
																																																																																																																				Enumerated,
																																																																																																																				int32_t)

																																																																																																																				cdp_avp_add_ptr(
																																																																																																																						Restoration_Info,
																																																																																																																						IMS_vendor_id_3GPP,
																																																																																																																						0,
																																																																																																																						Grouped,
																																																																																																																						AAA_AVP_LIST
																																																																																																																								*)
																																																																																																																						cdp_avp_get(Restoration_Info, IMS_vendor_id_3GPP, 0, Grouped, AAA_AVP_LIST)

																																																																																																																								cdp_avp_ptr(Access_Network_Information,
																																																																																																																										IMS_vendor_id_3GPP, 0, UTF8String,
																																																																																																																										str)


/*
 * ETSI something, that probably does not exist anymore
 *
 */
#undef CDP_AVP_NAME
#define CDP_AVP_NAME(avp_name) AVP_##avp_name

																																																																																																																										cdp_avp_ptr(
																																																																																																																												ETSI_Line_Identifier,
																																																																																																																												IMS_vendor_id_ETSI, AAA_AVP_FLAG_MANDATORY,
																																																																																																																												OctetString,
																																																																																																																												str)

																																																																																																																												cdp_avp_add_ptr(
																																																																																																																														ETSI_SIP_Authenticate,
																																																																																																																														IMS_vendor_id_ETSI,
																																																																																																																														AAA_AVP_FLAG_MANDATORY,
																																																																																																																														Grouped,
																																																																																																																														AAA_AVP_LIST
																																																																																																																																*)
																																																																																																																														cdp_avp_get(
																																																																																																																																ETSI_SIP_Authenticate,
																																																																																																																																IMS_vendor_id_ETSI,
																																																																																																																																AAA_AVP_FLAG_MANDATORY, Grouped, AAA_AVP_LIST)

																																																																																																																																cdp_avp_add_ptr(
																																																																																																																																		ETSI_SIP_Authorization, IMS_vendor_id_ETSI, AAA_AVP_FLAG_MANDATORY, Grouped,
																																																																																																																																		AAA_AVP_LIST
																																																																																																																																				*)
																																																																																																																																		cdp_avp_get(
																																																																																																																																				ETSI_SIP_Authorization,
																																																																																																																																				IMS_vendor_id_ETSI,
																																																																																																																																				AAA_AVP_FLAG_MANDATORY,
																																																																																																																																				Grouped,
																																																																																																																																				AAA_AVP_LIST)

																																																																																																																																				cdp_avp_add_ptr(
																																																																																																																																						ETSI_SIP_Authentication_Info, IMS_vendor_id_ETSI, AAA_AVP_FLAG_MANDATORY, Grouped,
																																																																																																																																						AAA_AVP_LIST
																																																																																																																																								*)
																																																																																																																																						cdp_avp_get(
																																																																																																																																								ETSI_SIP_Authentication_Info,
																																																																																																																																								IMS_vendor_id_ETSI,
																																																																																																																																								AAA_AVP_FLAG_MANDATORY,
																																																																																																																																								Grouped,
																																																																																																																																								AAA_AVP_LIST)

																																																																																																																																								cdp_avp_ptr(
																																																																																																																																										ETSI_Digest_Realm, IMS_vendor_id_ETSI, AAA_AVP_FLAG_MANDATORY, OctetString, str)

																																																																																																																																										cdp_avp_ptr(
																																																																																																																																												ETSI_Digest_Nonce,
																																																																																																																																												IMS_vendor_id_ETSI,
																																																																																																																																												AAA_AVP_FLAG_MANDATORY,
																																																																																																																																												OctetString,
																																																																																																																																												str)

																																																																																																																																												cdp_avp_ptr(
																																																																																																																																														ETSI_Digest_Domain,
																																																																																																																																														IMS_vendor_id_ETSI,
																																																																																																																																														AAA_AVP_FLAG_MANDATORY,
																																																																																																																																														OctetString,
																																																																																																																																														str)

																																																																																																																																														cdp_avp_ptr(
																																																																																																																																																ETSI_Digest_Opaque,
																																																																																																																																																IMS_vendor_id_ETSI, AAA_AVP_FLAG_MANDATORY, OctetString,
																																																																																																																																																str)

																																																																																																																																																cdp_avp_ptr(
																																																																																																																																																		ETSI_Digest_Stale,
																																																																																																																																																		IMS_vendor_id_ETSI,
																																																																																																																																																		AAA_AVP_FLAG_MANDATORY,
																																																																																																																																																		OctetString,
																																																																																																																																																		str)

																																																																																																																																																		cdp_avp_ptr(
																																																																																																																																																				ETSI_Digest_Algorithm,
																																																																																																																																																				IMS_vendor_id_ETSI,
																																																																																																																																																				AAA_AVP_FLAG_MANDATORY,
																																																																																																																																																				OctetString,
																																																																																																																																																				str)

																																																																																																																																																				cdp_avp_ptr(
																																																																																																																																																						ETSI_Digest_QoP,
																																																																																																																																																						IMS_vendor_id_ETSI,
																																																																																																																																																						AAA_AVP_FLAG_MANDATORY,
																																																																																																																																																						OctetString,
																																																																																																																																																						str)

																																																																																																																																																						cdp_avp_ptr(
																																																																																																																																																								ETSI_Digest_HA1,
																																																																																																																																																								IMS_vendor_id_ETSI,
																																																																																																																																																								AAA_AVP_FLAG_MANDATORY,
																																																																																																																																																								OctetString,
																																																																																																																																																								str)

																																																																																																																																																								cdp_avp_ptr(
																																																																																																																																																										ETSI_Digest_Auth_Param,
																																																																																																																																																										IMS_vendor_id_ETSI,
																																																																																																																																																										AAA_AVP_FLAG_MANDATORY,
																																																																																																																																																										OctetString,
																																																																																																																																																										str)

																																																																																																																																																										cdp_avp_ptr(
																																																																																																																																																												ETSI_Digest_Username,
																																																																																																																																																												IMS_vendor_id_ETSI,
																																																																																																																																																												AAA_AVP_FLAG_MANDATORY, OctetString,
																																																																																																																																																												str)

																																																																																																																																																												cdp_avp_ptr(
																																																																																																																																																														ETSI_Digest_URI,
																																																																																																																																																														IMS_vendor_id_ETSI, AAA_AVP_FLAG_MANDATORY, OctetString, str)

																																																																																																																																																														cdp_avp_ptr(ETSI_Digest_Response, IMS_vendor_id_ETSI, AAA_AVP_FLAG_MANDATORY,
																																																																																																																																																																OctetString,
																																																																																																																																																																str)

																																																																																																																																																																cdp_avp_ptr(
																																																																																																																																																																		ETSI_Digest_CNonce,
																																																																																																																																																																		IMS_vendor_id_ETSI,
																																																																																																																																																																		AAA_AVP_FLAG_MANDATORY,
																																																																																																																																																																		OctetString,
																																																																																																																																																																		str)

																																																																																																																																																																		cdp_avp_ptr(
																																																																																																																																																																				ETSI_Digest_Nonce_Count,
																																																																																																																																																																				IMS_vendor_id_ETSI,
																																																																																																																																																																				AAA_AVP_FLAG_MANDATORY,
																																																																																																																																																																				OctetString,
																																																																																																																																																																				str)

																																																																																																																																																																				cdp_avp_ptr(
																																																																																																																																																																						ETSI_Digest_Method,
																																																																																																																																																																						IMS_vendor_id_ETSI,
																																																																																																																																																																						AAA_AVP_FLAG_MANDATORY,
																																																																																																																																																																						OctetString,
																																																																																																																																																																						str)

																																																																																																																																																																						cdp_avp_ptr(
																																																																																																																																																																								ETSI_Digest_Entity_Body_Hash,
																																																																																																																																																																								IMS_vendor_id_ETSI,
																																																																																																																																																																								AAA_AVP_FLAG_MANDATORY,
																																																																																																																																																																								OctetString,
																																																																																																																																																																								str)

																																																																																																																																																																								cdp_avp_ptr(
																																																																																																																																																																										ETSI_Digest_Nextnonce,
																																																																																																																																																																										IMS_vendor_id_ETSI,
																																																																																																																																																																										AAA_AVP_FLAG_MANDATORY,
																																																																																																																																																																										OctetString,
																																																																																																																																																																										str)

																																																																																																																																																																										cdp_avp_ptr(
																																																																																																																																																																												ETSI_Digest_Response_Auth,
																																																																																																																																																																												IMS_vendor_id_ETSI,
																																																																																																																																																																												AAA_AVP_FLAG_MANDATORY,
																																																																																																																																																																												OctetString,
																																																																																																																																																																												str)


/*
 * CableLabs 29.229
 *
 */
#undef CDP_AVP_NAME
#define CDP_AVP_NAME(avp_name) AVP_##avp_name

																																																																																																																																																																												cdp_avp_add_ptr(
																																																																																																																																																																														CableLabs_SIP_Digest_Authenticate, IMS_vendor_id_CableLabs, AAA_AVP_FLAG_MANDATORY, Grouped,
																																																																																																																																																																														AAA_AVP_LIST
																																																																																																																																																																																*)
																																																																																																																																																																														cdp_avp_get(
																																																																																																																																																																																CableLabs_SIP_Digest_Authenticate, IMS_vendor_id_CableLabs, AAA_AVP_FLAG_MANDATORY,
																																																																																																																																																																																Grouped,
																																																																																																																																																																																AAA_AVP_LIST)

																																																																																																																																																																																cdp_avp_ptr(
																																																																																																																																																																																		CableLabs_Digest_Realm, IMS_vendor_id_CableLabs, AAA_AVP_FLAG_MANDATORY, OctetString,
																																																																																																																																																																																		str)

																																																																																																																																																																																		cdp_avp_ptr(
																																																																																																																																																																																				CableLabs_Digest_Domain,
																																																																																																																																																																																				IMS_vendor_id_CableLabs,
																																																																																																																																																																																				AAA_AVP_FLAG_MANDATORY,
																																																																																																																																																																																				OctetString,
																																																																																																																																																																																				str)

																																																																																																																																																																																				cdp_avp_ptr(
																																																																																																																																																																																						CableLabs_Digest_Algorithm,
																																																																																																																																																																																						IMS_vendor_id_CableLabs,
																																																																																																																																																																																						AAA_AVP_FLAG_MANDATORY,
																																																																																																																																																																																						OctetString,
																																																																																																																																																																																						str)

																																																																																																																																																																																						cdp_avp_ptr(
																																																																																																																																																																																								CableLabs_Digest_QoP,
																																																																																																																																																																																								IMS_vendor_id_CableLabs,
																																																																																																																																																																																								AAA_AVP_FLAG_MANDATORY,
																																																																																																																																																																																								OctetString,
																																																																																																																																																																																								str)

																																																																																																																																																																																								cdp_avp_ptr(
																																																																																																																																																																																										CableLabs_Digest_HA1, IMS_vendor_id_CableLabs, AAA_AVP_FLAG_MANDATORY, OctetString, str)

																																																																																																																																																																																										cdp_avp_ptr(
																																																																																																																																																																																												CableLabs_Digest_Auth_Param,
																																																																																																																																																																																												IMS_vendor_id_CableLabs, AAA_AVP_FLAG_MANDATORY, OctetString, str)

/*
 * TS 29.329
 *
 */
#undef CDP_AVP_NAME
#define CDP_AVP_NAME(avp_name) AVP_IMS_##avp_name

																																																																																																																																																																																												cdp_avp_add_ptr(
																																																																																																																																																																																														User_Identity, IMS_vendor_id_3GPP,
																																																																																																																																																																																														AAA_AVP_FLAG_MANDATORY, Grouped, AAA_AVP_LIST *) cdp_avp_get(User_Identity,
																																																																																																																																																																																														IMS_vendor_id_3GPP,
																																																																																																																																																																																														AAA_AVP_FLAG_MANDATORY,
																																																																																																																																																																																														Grouped, AAA_AVP_LIST)

																																																																																																																																																																																														cdp_avp_ptr(
																																																																																																																																																																																																MSISDN,
																																																																																																																																																																																																IMS_vendor_id_3GPP, AAA_AVP_FLAG_MANDATORY, OctetString, str)

																																																																																																																																																																																																cdp_avp_ptr(
																																																																																																																																																																																																		User_Data_Sh, IMS_vendor_id_3GPP,
																																																																																																																																																																																																		AAA_AVP_FLAG_MANDATORY,
																																																																																																																																																																																																		OctetString, str)

																																																																																																																																																																																																		cdp_avp(Data_Reference, IMS_vendor_id_3GPP,
																																																																																																																																																																																																				AAA_AVP_FLAG_MANDATORY,
																																																																																																																																																																																																				Enumerated,
																																																																																																																																																																																																				int32_t)

																																																																																																																																																																																																				cdp_avp_ptr(
																																																																																																																																																																																																						Service_Indication,
																																																																																																																																																																																																						IMS_vendor_id_3GPP,
																																																																																																																																																																																																						AAA_AVP_FLAG_MANDATORY,
																																																																																																																																																																																																						OctetString,
																																																																																																																																																																																																						str)

																																																																																																																																																																																																						cdp_avp(Subs_Req_Type,
																																																																																																																																																																																																								IMS_vendor_id_3GPP,
																																																																																																																																																																																																								AAA_AVP_FLAG_MANDATORY,
																																																																																																																																																																																																								Enumerated,
																																																																																																																																																																																																								int32_t)

																																																																																																																																																																																																								cdp_avp(Requested_Domain,
																																																																																																																																																																																																										IMS_vendor_id_3GPP, AAA_AVP_FLAG_MANDATORY, Enumerated,
																																																																																																																																																																																																										int32_t)

																																																																																																																																																																																																										cdp_avp(Current_Location,
																																																																																																																																																																																																												IMS_vendor_id_3GPP,
																																																																																																																																																																																																												AAA_AVP_FLAG_MANDATORY,
																																																																																																																																																																																																												Enumerated,
																																																																																																																																																																																																												int32_t)

																																																																																																																																																																																																												cdp_avp(Identity_Set,
																																																																																																																																																																																																														IMS_vendor_id_3GPP,
																																																																																																																																																																																																														AAA_AVP_FLAG_MANDATORY,
																																																																																																																																																																																																														Enumerated,
																																																																																																																																																																																																														int32_t)

																																																																																																																																																																																																														cdp_avp(Expiry_Time,
																																																																																																																																																																																																																IMS_vendor_id_3GPP, AAA_AVP_FLAG_MANDATORY, Time,
																																																																																																																																																																																																																time_t)

																																																																																																																																																																																																																cdp_avp(Send_Data_Indication, IMS_vendor_id_3GPP, 0,
																																																																																																																																																																																																																		Enumerated,
																																																																																																																																																																																																																		int32_t)

																																																																																																																																																																																																																		cdp_avp_ptr(DSAI_Tag, IMS_vendor_id_3GPP,
																																																																																																																																																																																																																				AAA_AVP_FLAG_MANDATORY,
																																																																																																																																																																																																																				OctetString,
																																																																																																																																																																																																																				str)


#undef CDP_AVP_NAME
#define CDP_AVP_NAME(avp_name) AVP_##avp_name


/*
 * From here-on you can define/export/init/declare functions which can not be generate with the macros
 */

#if defined(CDP_AVP_DEFINITION)

/*
	 * Put here your supplementary definitions. Typically:
	 *
	 * int <function1>(param1)
	 * {
	 *   code1
	 * }
	 *
	 *
	 */


#elif defined(CDP_AVP_EXPORT)

/*
	 * Put here your supplimentary exports in the format:
	 * 	<function_type1> <nice_function_name1>;
	 *  <function_type2> <nice_function_name1>;
	 *  ...
	 *
	 */


#elif defined(CDP_AVP_INIT)

/*
	 * Put here your supplementary inits in the format:
	 * 	<function1>,
	 *  <function2>,
	 *  ...
	 *
	 * Make sure you keep the same order as in export!
	 *
	 */


#elif defined(CDP_AVP_REFERENCE)
/*
	 * Put here what you want to get in the reference. Typically:
	 * <function1>
	 * <function2>
	 * ...
	 *
	 */


#elif defined(CDP_AVP_EMPTY_MACROS)

/* this should be left blank */

#else

/*
	 * Put here your definitions according to the declarations, exports, init, etc above. Typically:
	 *
	 * int <function1(params1);>
	 * typedef int <*function_type1>(params1);
	 *
	 * int <function2(param2);>
	 * typedef int <*function_type2>(params2);
	 *
	 * ...
	 *
	 */


#ifndef _CDP_AVP_IMSAPP_H_2
#define _CDP_AVP_IMSAPP_H_2


#endif //_CDP_AVP_IMSAPP_H_2

#endif


#define CDP_AVP_UNDEF_MACROS
#include "macros.h"
#undef CDP_AVP_UNDEF_MACROS
