changeset 1027:0117a7746b21

Fix a number of errors and warnings introduced/highlighted by recent commits
author Sebastien Decugis <sdecugis@freediameter.net>
date Mon, 15 Apr 2013 15:17:07 +0800
parents beb375690453
children 36386035e59d
files extensions/acl_wl/aw_tree.c extensions/app_diameap/diameap_eap.c extensions/app_diameap/diameap_eappacket.c extensions/app_diameap/diameap_eappacket.h extensions/app_diameap/diameap_mysql.c extensions/app_diameap/diameap_mysql.h extensions/app_diameap/diameap_plugins.c extensions/app_diameap/diameap_server.c extensions/app_diameap/diameap_user.c extensions/app_diameap/diameap_user.h extensions/app_diameap/plugins/eap_identity/eap_identity.c extensions/app_diameap/plugins/eap_md5/eap_md5.c extensions/app_diameap/plugins/eap_tls/eap_tls.c extensions/app_diameap/plugins/eap_tls/eap_tls.h extensions/app_radgw/radius.c extensions/app_radgw/rgw_clients.c extensions/app_radgw/rgw_servers.c extensions/app_radgw/rgwx_acct.c extensions/app_radgw/rgwx_auth.c extensions/app_radgw/rgwx_sip.c extensions/app_sip/app_sip.c extensions/app_sip/app_sip.h extensions/app_sip/pushprofile.c extensions/app_sip/registrationtermination.c extensions/rt_ereg/rtereg.c extensions/rt_redirect/redir_fwd.c extensions/rt_redirect/redir_out.c include/freeDiameter/libfdproto.h libfdcore/cnxctx.c libfdcore/config.c libfdcore/core.c libfdcore/p_ce.c libfdcore/p_out.c libfdcore/p_psm.c libfdcore/peers.c libfdcore/routing_dispatch.c libfdcore/sctp.c libfdcore/sctps.c libfdproto/dictionary.c libfdproto/log.c libfdproto/messages.c libfdproto/ostr.c libfdproto/sessions.c
diffstat 43 files changed, 340 insertions(+), 326 deletions(-) [+]
line wrap: on
line diff
--- a/extensions/acl_wl/aw_tree.c	Sat Apr 13 22:18:05 2013 +0200
+++ b/extensions/acl_wl/aw_tree.c	Mon Apr 15 15:17:07 2013 +0800
@@ -128,7 +128,7 @@
 	struct tree_item * ti;
 	char * s = NULL;
 	
-	TRACE_ENTRY("%p %d %x", str, len, flags);
+	TRACE_ENTRY("%p %zd %x", str, len, flags);
 	
 	if (str) {
 		CHECK_MALLOC_DO(s = malloc(len + 1), return NULL);
--- a/extensions/app_diameap/diameap_eap.c	Sat Apr 13 22:18:05 2013 +0200
+++ b/extensions/app_diameap/diameap_eap.c	Mon Apr 15 15:17:07 2013 +0800
@@ -56,7 +56,7 @@
 }
 
 static void diameap_ba_policyupdate(struct eap_state_machine * eap_sm,
-		struct eap_packet eapPacket)
+		struct eap_packet *eapPacket)
 {
 	TRACE_ENTRY("%p %p",eap_sm, eapPacket);
 	if ((eap_sm->respMethod == TYPE_NAK))
@@ -65,10 +65,10 @@
 		eap_sm->user.pmethods = 0;
 		u32 vendor;
 		eap_type type;
-		u8 *data = (u8 *) eapPacket.data;
+		u8 *data = (u8 *) eapPacket->data;
 		data += 5;
 		id = 5;
-		while (id < eapPacket.length)
+		while (id < eapPacket->length)
 		{
 			vendor = VENDOR_IETF;
 			type = G8(data);
@@ -242,7 +242,7 @@
 
 static boolean diameap_ba_policydopickup(eap_type type)
 {
-	TRACE_ENTRY("%p",type);
+	TRACE_ENTRY("%d",type);
 	if (type == TYPE_IDENTITY)
 	{
 		return TRUE;
@@ -330,7 +330,7 @@
 		case EAP_RECEIVED:
 			TRACE_DEBUG(FULL+1,"%s[EAP Protocol] New EAP Response received",DIAMEAP_EXTENSION)
 			;
-			diameap_eap_dump(FULL + 1, eap_i->aaaEapRespData);
+			diameap_eap_dump(FULL + 1, &eap_i->aaaEapRespData);
 			if ((eap_sm->rxResp == TRUE) && (eap_sm->respId
 					== eap_sm->currentId) && ((eap_sm->respMethod
 					== eap_sm->currentMethod) || ((eap_sm->respMethod
@@ -364,7 +364,7 @@
 		case EAP_SEND_REQUEST:
 			TRACE_DEBUG(FULL+1,"%s[EAP Protocol] New EAP packet request created.",DIAMEAP_EXTENSION)
 			;
-			diameap_eap_dump(FULL, eap_i->aaaEapReqData);
+			diameap_eap_dump(FULL, &eap_i->aaaEapReqData);
 			eap_i->aaaEapResp = FALSE;
 			eap_i->aaaEapReq = TRUE;
 			eap_sm->eap_state = EAP_IDLE;
@@ -515,7 +515,7 @@
 					eap_sm->methodData = NULL;
 				}
 			}
-			diameap_ba_policyupdate(eap_sm, eap_i->aaaEapRespData);
+			diameap_ba_policyupdate(eap_sm, &eap_i->aaaEapRespData);
 			eap_sm->eap_state = EAP_SELECT_ACTION;
 			break;
 		case EAP_SELECT_ACTION:
--- a/extensions/app_diameap/diameap_eappacket.c	Sat Apr 13 22:18:05 2013 +0200
+++ b/extensions/app_diameap/diameap_eappacket.c	Mon Apr 15 15:17:07 2013 +0800
@@ -38,97 +38,97 @@
 
 #include "libdiameap.h"
 
-int diameap_eap_get_code(struct eap_packet eappacket, eap_code * eapcode)
+int diameap_eap_get_code(struct eap_packet *eappacket, eap_code * eapcode)
 {
 	TRACE_ENTRY("%p %p",eappacket,eapcode);
 
-	if (eappacket.data == NULL)
+	if (eappacket->data == NULL)
 	{
 		*eapcode = ERROR;
 		TRACE_DEBUG(INFO,"%sEmpty data in EAP packet: no EAP Code to return.",DIAMEAP_EXTENSION);
 		return EINVAL;
 	}
-	if (eappacket.length < 1)
+	if (eappacket->length < 1)
 	{
 		*eapcode = ERROR;
-		TRACE_DEBUG(INFO,"%sEAP packet length %d : no EAP Code to return.",DIAMEAP_EXTENSION, eappacket.length);
+		TRACE_DEBUG(INFO,"%sEAP packet length %d : no EAP Code to return.",DIAMEAP_EXTENSION, eappacket->length);
 		return EINVAL;
 	}
-	*eapcode = G8(eappacket.data);
+	*eapcode = G8(eappacket->data);
 	return 0;
 }
 
-int diameap_eap_get_identifier(struct eap_packet eappacket, u8 * identifier)
+int diameap_eap_get_identifier(struct eap_packet *eappacket, u8 * identifier)
 {
 	TRACE_ENTRY("%p %p",eappacket,identifier);
 	*identifier = 0;
-	if (eappacket.data == NULL)
+	if (eappacket->data == NULL)
 	{
 		TRACE_DEBUG(INFO,"%sEmpty data in EAP packet: no Identifier field to return.",DIAMEAP_EXTENSION);
 		return EINVAL;
 	}
-	if (eappacket.length < 2)
+	if (eappacket->length < 2)
 	{
-		TRACE_DEBUG(INFO,"%sEAP packet length %d : no Identifier field to return.",DIAMEAP_EXTENSION, eappacket.length);
+		TRACE_DEBUG(INFO,"%sEAP packet length %d : no Identifier field to return.",DIAMEAP_EXTENSION, eappacket->length);
 		return EINVAL;
 	}
-	*identifier = G8(eappacket.data + 1);
+	*identifier = G8(eappacket->data + 1);
 	return 0;
 }
 
-int diameap_eap_get_length(struct eap_packet eappacket, u16 *length)
+int diameap_eap_get_length(struct eap_packet *eappacket, u16 *length)
 {
 	TRACE_ENTRY("%p %p",eappacket,length);
 	*length = 0;
 
-	if (eappacket.data == NULL)
+	if (eappacket->data == NULL)
 	{
 		TRACE_DEBUG(INFO,"%sEmpty data in EAP packet: no Length field to return.",DIAMEAP_EXTENSION);
 		return EINVAL;
 	}
-	if (eappacket.ulength < 4)
+	if (eappacket->ulength < 4)
 	{
-		TRACE_DEBUG(INFO,"%sEAP packet length %d : no Length field to return.",DIAMEAP_EXTENSION, eappacket.length);
+		TRACE_DEBUG(INFO,"%sEAP packet length %d : no Length field to return.",DIAMEAP_EXTENSION, eappacket->length);
 		return EINVAL;
 	}
-	*length = (u16) G16BIGE((eappacket.data + 2));
+	*length = (u16) G16BIGE((eappacket->data + 2));
 	return 0;
 }
 
-int diameap_eap_get_packetlength(struct eap_packet eappacket, u16 *length)
+int diameap_eap_get_packetlength(struct eap_packet *eappacket, u16 *length)
 {
 	TRACE_ENTRY("%p %p",eappacket,length);
-	if (eappacket.data == NULL)
+	if (eappacket->data == NULL)
 	{
 		TRACE_DEBUG(INFO,"%sEmpty data in EAP packet: no Length field to return.",DIAMEAP_EXTENSION);
 		return EINVAL;
 	}
-	*length = eappacket.ulength;
+	*length = eappacket->ulength;
 	return 0;
 }
 
-int diameap_eap_get_type(struct eap_packet eappacket, eap_type * eaptype)
+int diameap_eap_get_type(struct eap_packet *eappacket, eap_type * eaptype)
 {
 	TRACE_ENTRY("%p %p",eappacket,eaptype);
 	*eaptype = 0;
 
-	if (eappacket.data == NULL)
+	if (eappacket->data == NULL)
 	{
 		TRACE_DEBUG(INFO,"%sEmpty data in EAP packet: no EAP Type field to return.",DIAMEAP_EXTENSION);
 		return EINVAL;
 	}
-	if (eappacket.length < 5)
+	if (eappacket->length < 5)
 	{
-		TRACE_DEBUG(INFO,"%sEAP packet length %d : no EAP Type field to return.",DIAMEAP_EXTENSION, eappacket.length);
+		TRACE_DEBUG(INFO,"%sEAP packet length %d : no EAP Type field to return.",DIAMEAP_EXTENSION, eappacket->length);
 		return EINVAL;
 	}
-	*eaptype = (u32) G8(eappacket.data + 4);
+	*eaptype = (u32) G8(eappacket->data + 4);
 	return 0;
 }
 
 boolean diameap_eap_check_code(eap_code code)
 {
-	TRACE_ENTRY("%p",code);
+	TRACE_ENTRY("%d",code);
 	if (code != EAP_REQUEST && code != EAP_RESPONSE && code != EAP_SUCCESS
 			&& code != EAP_FAILURE)
 	{
@@ -138,51 +138,51 @@
 	return TRUE;
 }
 
-int diameap_eap_get_packetdata(struct eap_packet eappacket, u8 ** data,
+int diameap_eap_get_packetdata(struct eap_packet *eappacket, u8 ** data,
 		int *len)
 {
 	TRACE_ENTRY("%p %p",eappacket,data);
-	if (eappacket.length > 0)
+	if (eappacket->length > 0)
 	{
-		*data = malloc(sizeof(u8) * eappacket.length);
-		U8COPY(*data,0,eappacket.length,eappacket.data);
-		*len = eappacket.length;
+		*data = malloc(sizeof(u8) * eappacket->length);
+		U8COPY(*data,0,eappacket->length,eappacket->data);
+		*len = eappacket->length;
 		return 0;
 	}
-	TRACE_DEBUG(INFO,"%sEAP packet length=%d: empty or wrong EAP Packet.",DIAMEAP_EXTENSION, eappacket.length);
+	TRACE_DEBUG(INFO,"%sEAP packet length=%d: empty or wrong EAP Packet.",DIAMEAP_EXTENSION, eappacket->length);
 	*data = NULL;
 	*len = 0;
 	return EINVAL;
 }
 
-int diameap_eap_get_data(struct eap_packet eappacket, u8 ** data, int * len)
+int diameap_eap_get_data(struct eap_packet *eappacket, u8 ** data, int * len)
 {
 	TRACE_ENTRY("%p %p",eappacket,data);
-	if (eappacket.length > 5)
+	if (eappacket->length > 5)
 	{
-		*data = malloc(sizeof(u8) * (eappacket.length - 5));
-		U8COPY(*data,0,(eappacket.length-5),(eappacket.data+5));
-		*len = eappacket.length - 5;
+		CHECK_MALLOC( *data = malloc(sizeof(u8) * (eappacket->length - 5)) );
+		U8COPY(*data,0,(eappacket->length-5),(eappacket->data+5));
+		*len = eappacket->length - 5;
 		return 0;
 	}
-	TRACE_DEBUG(INFO,"%sEAP packet length=%d: empty or wrong EAP Packet.",DIAMEAP_EXTENSION, eappacket.length);
+	TRACE_DEBUG(INFO,"%sEAP packet length=%d: empty or wrong EAP Packet.",DIAMEAP_EXTENSION, eappacket->length);
 	*data = NULL;
 	*len = 0;
 
 	return EINVAL;
 }
 
-void diameap_eap_dump(int level, struct eap_packet eappacket)
+void diameap_eap_dump(int level, struct eap_packet *eappacket)
 {
-	TRACE_ENTRY("%p %p",level,eappacket);
+	TRACE_ENTRY("%d %p",level,eappacket);
 	if (!TRACE_BOOL(level))
 		return;
 
-	if (eappacket.data == NULL)
+	if (eappacket->data == NULL)
 		return;
-	if (eappacket.length < 5)
+	if (eappacket->length < 5)
 		return;
-	if (eappacket.ulength < 5)
+	if (eappacket->ulength < 5)
 		return;
 
 	fd_log_debug("------------- Dump EAP Packet-------------");
@@ -214,21 +214,21 @@
 	u16 length;
 	CHECK_FCT_DO(diameap_eap_get_length(eappacket,&length),return);
 	fd_log_debug("\t -Length     : %d ", (unsigned int)length);
-	if (eappacket.length > 4)
+	if (eappacket->length > 4)
 	{
 		eap_type type;
 		CHECK_FCT_DO(diameap_eap_get_type(eappacket,&type),return);
 		fd_log_debug("\t -Type       : %d ", type);
 	}
-	if (eappacket.length > 5)
+	if (eappacket->length > 5)
 	{
 		char buf[1024];
 		snprintf(buf, sizeof(buf), "\t -Data       : ");
-		for (i = 5; i < eappacket.length && i < 30; i++)
+		for (i = 5; i < eappacket->length && i < 30; i++)
 		{
-			snprintf(buf+strlen(buf), sizeof(buf)-strlen(buf), "%02x ", G8(eappacket.data + i));
+			snprintf(buf+strlen(buf), sizeof(buf)-strlen(buf), "%02x ", G8(eappacket->data + i));
 		}
-		if(i+1<eappacket.length)
+		if(i+1<eappacket->length)
 			snprintf(buf+strlen(buf), sizeof(buf)-strlen(buf), "[...] (len=%d)",(unsigned int) length);
 		fd_log_debug("%s", buf);
 	}
@@ -239,7 +239,7 @@
 		u16 dataLength, struct eap_packet *eappacket)
 {
 
-	TRACE_ENTRY("%p %p %p %p %p %p", code, id, type, data, dataLength,eappacket);
+	TRACE_ENTRY("%d %hhu %d %p %hu %p", code, id, type, data, dataLength,eappacket);
 
 	int length = 0;
 
--- a/extensions/app_diameap/diameap_eappacket.h	Sat Apr 13 22:18:05 2013 +0200
+++ b/extensions/app_diameap/diameap_eappacket.h	Mon Apr 15 15:17:07 2013 +0800
@@ -96,7 +96,7 @@
 * 	EINVAL		:	if EAP Packet is NULL or empty
  */
 
-int diameap_eap_get_code(struct eap_packet eapPacket, eap_code * eapcode);
+int diameap_eap_get_code(struct eap_packet *eapPacket, eap_code * eapcode);
 
 
 /* Function		:	diameap_eap_get_identifier
@@ -114,7 +114,7 @@
  *
  */
 
-int diameap_eap_get_identifier(struct eap_packet eapPacket, u8 * identifier);
+int diameap_eap_get_identifier(struct eap_packet *eapPacket, u8 * identifier);
 
 
 /* Function		:	diameap_eap_get_length
@@ -131,7 +131,7 @@
  *	EINVAL		: 	if the data length < 4, or the EAP Packet is NULL.
  */
 
-int diameap_eap_get_length(struct eap_packet eapPacket, u16 *length);
+int diameap_eap_get_length(struct eap_packet *eapPacket, u16 *length);
 
 
 /* Function		:	diameap_eap_get_packetlength
@@ -148,7 +148,7 @@
  *	EINVAL		: 	if the EAP Packet is NULL
  */
 
-int diameap_eap_get_packetlength(struct eap_packet eapPacket, u16 *length);
+int diameap_eap_get_packetlength(struct eap_packet *eapPacket, u16 *length);
 
 
 /* Function		:	diameap_eap_get_type
@@ -165,7 +165,7 @@
  *	EINVAL		:	if the EAP Packet is NULL or data length < 5
  */
 
-int diameap_eap_get_type(struct eap_packet eapPacket,eap_type * eaptype);
+int diameap_eap_get_type(struct eap_packet *eapPacket,eap_type * eaptype);
 
 
 /* Function		:	diameap_eap_get_packetdata
@@ -183,7 +183,7 @@
  *	EINVAL		: 	if there is no data in the current EAP Packet (ulength<1)
  */
 
-int diameap_eap_get_packetdata(struct eap_packet eapPacket, u8 ** data, int *len);
+int diameap_eap_get_packetdata(struct eap_packet *eapPacket, u8 ** data, int *len);
 
 
 /* Function		:	diameap_eap_get_data
@@ -201,7 +201,7 @@
  *	EINVAL		: 	if there is no data in the current EAP Packet (ulength<6)
  */
 
-int diameap_eap_get_data(struct eap_packet eapPacket, u8 ** data, int * len);
+int diameap_eap_get_data(struct eap_packet *eapPacket, u8 ** data, int * len);
 
 
 /* Function		:	diameap_eap_chech_code
@@ -232,7 +232,7 @@
  *
  */
 
-void diameap_eap_dump(int level, struct eap_packet eapPacket);
+void diameap_eap_dump(int level, struct eap_packet *eapPacket);
 
 
 /* Function		:	diameap_eap_new
--- a/extensions/app_diameap/diameap_mysql.c	Sat Apr 13 22:18:05 2013 +0200
+++ b/extensions/app_diameap/diameap_mysql.c	Mon Apr 15 15:17:07 2013 +0800
@@ -107,7 +107,7 @@
 
 }
 
-int diameap_authentication_get_attribs(struct eap_user user,
+int diameap_authentication_get_attribs(struct eap_user *user,
 		struct fd_list * attribute_list)
 {
 
@@ -130,7 +130,7 @@
 	sprintf(
 			query,
 			"SELECT `authe`.`attribute` ,`authe`.`value` FROM `authe` WHERE `authe`.`grp` IN ( SELECT `user_grp`.`grp` FROM `user_grp` WHERE `user_grp`.`user` = %d ) ",
-			user.id);
+			user->id);
 
 	CHECK_POSIX(pthread_mutex_lock( &db_cs_mutex ));
 
@@ -168,7 +168,7 @@
 	return 0;
 }
 
-int diameap_authorization_get_attribs(struct eap_user user,
+int diameap_authorization_get_attribs(struct eap_user *user,
 		struct fd_list * attribute_list)
 {
 	TRACE_ENTRY("%p %p",user,attribute_list);
@@ -191,7 +191,7 @@
 	sprintf(
 			query,
 			"SELECT `authz`.`attribute` , `authz`.`op` , `authz`.`value` FROM `authz` WHERE `authz`.`grp` IN ( SELECT `user_grp`.`grp` FROM `user_grp` WHERE `user_grp`.`user` = %d ) ",
-			user.id);
+			user->id);
 
 	CHECK_POSIX(pthread_mutex_lock( &db_cs_mutex ));
 
--- a/extensions/app_diameap/diameap_mysql.h	Sat Apr 13 22:18:05 2013 +0200
+++ b/extensions/app_diameap/diameap_mysql.h	Mon Apr 15 15:17:07 2013 +0800
@@ -56,11 +56,11 @@
 void diameap_mysql_disconnect();
 
 /* */
-int diameap_authentication_get_attribs(struct eap_user user,
+int diameap_authentication_get_attribs(struct eap_user *user,
 			struct fd_list * attribute_list);
 
 /* */
-int diameap_authorization_get_attribs(struct eap_user user,
+int diameap_authorization_get_attribs(struct eap_user *user,
 			struct fd_list * attribute_list);
 
 
--- a/extensions/app_diameap/diameap_plugins.c	Sat Apr 13 22:18:05 2013 +0200
+++ b/extensions/app_diameap/diameap_plugins.c	Mon Apr 15 15:17:07 2013 +0800
@@ -45,7 +45,7 @@
 int diameap_plugin_add(char * name, eap_type methodtype, u32 vendor,
 		char * filename, char * conffile)
 {
-	TRACE_ENTRY("%p %p %p %p %p", name, methodtype, vendor, filename, conffile);
+	TRACE_ENTRY("%p %d %d %p %p", name, methodtype, vendor, filename, conffile);
 
 	/* Check the filename is valid */
 	CHECK_PARAMS(filename);
@@ -82,7 +82,7 @@
 
 int diameap_plugin_get(u32 vendor, eap_type type, struct plugin ** getplugin)
 {
-	TRACE_ENTRY("%p %p %p",vendor,type,getplugin);
+	TRACE_ENTRY("%d %d %p",vendor,type,getplugin);
 	struct fd_list * pl;
 
 	for (pl = plugins_list.next; pl != &plugins_list; pl = pl->next)
@@ -410,7 +410,7 @@
 boolean diameap_plugin_exist(u32 vendor, eap_type type)
 {
 
-	TRACE_ENTRY("%p %p",vendor,type);
+	TRACE_ENTRY("%d %d",vendor,type);
 	struct fd_list * pl;
 
 	for (pl = plugins_list.next; pl != &plugins_list; pl = pl->next)
--- a/extensions/app_diameap/diameap_server.c	Sat Apr 13 22:18:05 2013 +0200
+++ b/extensions/app_diameap/diameap_server.c	Mon Apr 15 15:17:07 2013 +0800
@@ -341,7 +341,7 @@
 }
 
 static int diameap_parse_eap_resp(struct eap_state_machine * eap_sm,
-		struct eap_packet eappacket)
+		struct eap_packet *eappacket)
 {
 	TRACE_ENTRY("%p %p",eap_sm, eappacket)
 
@@ -351,7 +351,7 @@
 	eap_sm->respVendor = VENDOR_IETF;
 	eap_sm->respVendorMethod = TYPE_NONE;
 
-	if (eappacket.data == NULL)
+	if (eappacket->data == NULL)
 	{
 		TRACE_DEBUG(INFO,"%s Empty EAP packet",DIAMEAP_EXTENSION);
 		return 0;
@@ -413,7 +413,7 @@
 
 	if (eap_sm->respMethod == TYPE_EXPANDED_TYPES)
 	{
-		u8 *data = (u8 *) eappacket.data;
+		u8 *data = (u8 *) eappacket->data;
 		//int len = 0;
 		//u32 respVendor, respVendorMethod;
 		data += 5;
@@ -454,7 +454,7 @@
 	TRACE_ENTRY("%p %p",eappacket,avpdata);
 	eappacket->ulength = (u16) avpdata->avp_value->os.len;
 	eappacket->data = (u8 *) avpdata->avp_value->os.data;
-	diameap_eap_get_packetlength(*eappacket, &eappacket->length);
+	diameap_eap_get_packetlength(eappacket, &eappacket->length);
 	return 0;
 }
 
@@ -476,11 +476,11 @@
 		CHECK_FCT(diameap_eappacket_new(&eap_i->aaaEapRespData, avpdata));
 		eap_i->aaaEapResp = TRUE;
 		u16 length;
-		diameap_eap_get_length(eap_i->aaaEapRespData, &length);
+		diameap_eap_get_length(&eap_i->aaaEapRespData, &length);
 		if (length >= 4)
 		{
 			eap_code code;
-			CHECK_FCT(diameap_eap_get_code(eap_i->aaaEapRespData,&code));
+			CHECK_FCT(diameap_eap_get_code(&eap_i->aaaEapRespData,&code));
 
 			if (code != EAP_RESPONSE)
 			{
@@ -497,7 +497,7 @@
 			}
 			else
 			{
-				CHECK_FCT(diameap_parse_eap_resp(&diameap_sm->eap_sm,eap_i->aaaEapRespData));
+				CHECK_FCT(diameap_parse_eap_resp(&diameap_sm->eap_sm, &eap_i->aaaEapRespData));
 				if (diameap_sm->eap_sm.rxResp == FALSE)
 				{
 					diameap_sm->result_code = 1001; /*DIAMETER_MULTI_ROUND_AUTH*/
@@ -1254,7 +1254,7 @@
 		char * attribute, struct avp_attribute ** avp_attrib, int unlink,
 		int *ret)
 {
-	TRACE_ENTRY("%p %p %p %p %p", avp_attributes, attribute, avp_attrib, ret);
+	TRACE_ENTRY("%p %p %p %d %p", avp_attributes, attribute, avp_attrib, unlink, ret);
 	if (avp_attributes == NULL)
 	{
 		return EINVAL;
@@ -1288,7 +1288,7 @@
 		int *ret)
 {
 
-	TRACE_ENTRY("%p %p %p %p %p", auth_attributes, attribute, auth_attrib, ret);
+	TRACE_ENTRY("%p %p %p %d %p", auth_attributes, attribute, auth_attrib, unlink, ret);
 
 	if (auth_attributes == NULL)
 	{
@@ -1324,7 +1324,7 @@
 		char * attribute, struct avp_attribute ** ans_attrib, int unlink,
 		int *ret)
 {
-	TRACE_ENTRY("%p %p %p %p %p", ans_attributes, attribute, ans_attrib, ret);
+	TRACE_ENTRY("%p %p %p %d %p", ans_attributes, attribute, ans_attrib, unlink, ret);
 	if (ans_attributes == NULL)
 	{
 		return EINVAL;
@@ -1637,7 +1637,7 @@
 
 boolean is_operator(int format_type, char * operator)
 {
-	TRACE_ENTRY("%p %p",format_type,operator);
+	TRACE_ENTRY("%d %p",format_type,operator);
 	if ((format_type == DIAMEAP_STR) && (strcmp(operator, "==") == 0 || strcmp(
 			operator, "~=") == 0 || strcmp(operator, "!=") == 0))
 	{
@@ -1652,7 +1652,7 @@
 
 union avp_value diameap_get_num(char * num, enum dict_avp_basetype datatype)
 {
-	TRACE_ENTRY("%p %p",num,datatype);
+	TRACE_ENTRY("%p %d",num,datatype);
 	union avp_value val;
 	switch (datatype)
 	{
@@ -1681,10 +1681,10 @@
 	return val;
 }
 
-boolean diameap_check(union avp_value A, char * B, char * operator,
+boolean diameap_check(union avp_value *A, char * B, char * operator,
 		enum dict_avp_basetype datatype)
 {
-	TRACE_ENTRY("%p %p %p %p",A,B,operator,datatype);
+	TRACE_ENTRY("%p %p %p %d",A,B,operator,datatype);
 	if (((datatype == AVP_TYPE_OCTETSTRING) && (is_operator(DIAMEAP_STR,
 			operator) == TRUE)) || ((datatype != AVP_TYPE_OCTETSTRING)
 			&& (datatype != AVP_TYPE_GROUPED) && (is_operator(DIAMEAP_NUM,
@@ -1696,7 +1696,7 @@
 			if ((datatype == AVP_TYPE_OCTETSTRING) && (is_operator(DIAMEAP_STR,
 					operator) == TRUE))
 			{
-				if (strcmp((char *)A.os.data, B) == 0)
+				if (strcmp((char *)A->os.data, B) == 0)
 					return TRUE;
 				else
 					return FALSE;
@@ -1709,22 +1709,22 @@
 				switch (datatype)
 				{
 				case AVP_TYPE_INTEGER32://i32
-					return EQ(A.i32,diameap_get_num(B, datatype).i32);
+					return EQ(A->i32,diameap_get_num(B, datatype).i32);
 					break;
 				case AVP_TYPE_INTEGER64://i64
-					return EQ(A.i64,diameap_get_num(B, datatype).i64);
+					return EQ(A->i64,diameap_get_num(B, datatype).i64);
 					break;
 				case AVP_TYPE_UNSIGNED32://u32
-					return EQ(A.u32,diameap_get_num(B, datatype).u32);
+					return EQ(A->u32,diameap_get_num(B, datatype).u32);
 					break;
 				case AVP_TYPE_UNSIGNED64://u64
-					return EQ(A.u64,diameap_get_num(B, datatype).u64);
+					return EQ(A->u64,diameap_get_num(B, datatype).u64);
 					break;
 				case AVP_TYPE_FLOAT32://f32
-					return EQ(A.f32,diameap_get_num(B, datatype).f32);
+					return EQ(A->f32,diameap_get_num(B, datatype).f32);
 					break;
 				case AVP_TYPE_FLOAT64://f64
-					return EQ(A.f64,diameap_get_num(B, datatype).f64);
+					return EQ(A->f64,diameap_get_num(B, datatype).f64);
 					break;
 				default:
 					return FALSE;
@@ -1744,7 +1744,7 @@
 			{
 				regex_t rule_regexp;
 				regcomp(&rule_regexp, B, REG_EXTENDED | REG_NOSUB | REG_ICASE);
-				if (regexec(&rule_regexp, (char *)A.os.data, 0, NULL, 0) != 0)
+				if (regexec(&rule_regexp, (char *)A->os.data, 0, NULL, 0) != 0)
 				{
 					authorized = FALSE;
 				}
@@ -1765,22 +1765,22 @@
 				switch (datatype)
 				{
 				case AVP_TYPE_INTEGER32://i32
-					return GT(A.i32, diameap_get_num(B, datatype).i32);
+					return GT(A->i32, diameap_get_num(B, datatype).i32);
 					break;
 				case AVP_TYPE_INTEGER64://i64
-					return GT(A.i64, diameap_get_num(B, datatype).i64);
+					return GT(A->i64, diameap_get_num(B, datatype).i64);
 					break;
 				case AVP_TYPE_UNSIGNED32://u32
-					return GT(A.u32, diameap_get_num(B, datatype).u32);
+					return GT(A->u32, diameap_get_num(B, datatype).u32);
 					break;
 				case AVP_TYPE_UNSIGNED64://u64
-					return GT(A.u64, diameap_get_num(B, datatype).u64);
+					return GT(A->u64, diameap_get_num(B, datatype).u64);
 					break;
 				case AVP_TYPE_FLOAT32://f32
-					return GT(A.f32, diameap_get_num(B, datatype).f32);
+					return GT(A->f32, diameap_get_num(B, datatype).f32);
 					break;
 				case AVP_TYPE_FLOAT64://f64
-					return GT(A.f64, diameap_get_num(B, datatype).f64);
+					return GT(A->f64, diameap_get_num(B, datatype).f64);
 					break;
 				default:
 					return FALSE;
@@ -1799,22 +1799,22 @@
 				switch (datatype)
 				{
 				case AVP_TYPE_INTEGER32://i32
-					return GE(A.i32,diameap_get_num(B, datatype).i32);
+					return GE(A->i32,diameap_get_num(B, datatype).i32);
 					break;
 				case AVP_TYPE_INTEGER64://i64
-					return GE(A.i64,diameap_get_num(B, datatype).i64);
+					return GE(A->i64,diameap_get_num(B, datatype).i64);
 					break;
 				case AVP_TYPE_UNSIGNED32://u32
-					return GE(A.u32,diameap_get_num(B, datatype).u32);
+					return GE(A->u32,diameap_get_num(B, datatype).u32);
 					break;
 				case AVP_TYPE_UNSIGNED64://u64
-					return GE(A.u64,diameap_get_num(B, datatype).u64);
+					return GE(A->u64,diameap_get_num(B, datatype).u64);
 					break;
 				case AVP_TYPE_FLOAT32://f32
-					return GE(A.f32,diameap_get_num(B, datatype).f32);
+					return GE(A->f32,diameap_get_num(B, datatype).f32);
 					break;
 				case AVP_TYPE_FLOAT64://f64
-					return GE(A.f64,diameap_get_num(B, datatype).f64);
+					return GE(A->f64,diameap_get_num(B, datatype).f64);
 					break;
 				default:
 					return FALSE;
@@ -1833,22 +1833,22 @@
 				switch (datatype)
 				{
 				case AVP_TYPE_INTEGER32://i32
-					return LT(A.i32, diameap_get_num(B, datatype).i32);
+					return LT(A->i32, diameap_get_num(B, datatype).i32);
 					break;
 				case AVP_TYPE_INTEGER64://i64
-					return LT(A.i64, diameap_get_num(B, datatype).i64);
+					return LT(A->i64, diameap_get_num(B, datatype).i64);
 					break;
 				case AVP_TYPE_UNSIGNED32://u32
-					return LT(A.u32, diameap_get_num(B, datatype).u32);
+					return LT(A->u32, diameap_get_num(B, datatype).u32);
 					break;
 				case AVP_TYPE_UNSIGNED64://u64
-					return LT(A.u64, diameap_get_num(B, datatype).u64);
+					return LT(A->u64, diameap_get_num(B, datatype).u64);
 					break;
 				case AVP_TYPE_FLOAT32://f32
-					return LT(A.f32, diameap_get_num(B, datatype).f32);
+					return LT(A->f32, diameap_get_num(B, datatype).f32);
 					break;
 				case AVP_TYPE_FLOAT64://f64
-					return LT(A.f64, diameap_get_num(B, datatype).f64);
+					return LT(A->f64, diameap_get_num(B, datatype).f64);
 					break;
 				default:
 					return FALSE;
@@ -1867,22 +1867,22 @@
 				switch (datatype)
 				{
 				case AVP_TYPE_INTEGER32://i32
-					return LE(A.i32, diameap_get_num(B, datatype).i32);
+					return LE(A->i32, diameap_get_num(B, datatype).i32);
 					break;
 				case AVP_TYPE_INTEGER64://i64
-					return LE(A.i64, diameap_get_num(B, datatype).i64);
+					return LE(A->i64, diameap_get_num(B, datatype).i64);
 					break;
 				case AVP_TYPE_UNSIGNED32://u32
-					return LE(A.u32, diameap_get_num(B, datatype).u32);
+					return LE(A->u32, diameap_get_num(B, datatype).u32);
 					break;
 				case AVP_TYPE_UNSIGNED64://u64
-					return LE(A.u64, diameap_get_num(B, datatype).u64);
+					return LE(A->u64, diameap_get_num(B, datatype).u64);
 					break;
 				case AVP_TYPE_FLOAT32://f32
-					return LE(A.f32, diameap_get_num(B, datatype).f32);
+					return LE(A->f32, diameap_get_num(B, datatype).f32);
 					break;
 				case AVP_TYPE_FLOAT64://f64
-					return LE(A.f64, diameap_get_num(B, datatype).f64);
+					return LE(A->f64, diameap_get_num(B, datatype).f64);
 					break;
 				default:
 					return FALSE;
@@ -1897,7 +1897,7 @@
 			if ((datatype == AVP_TYPE_OCTETSTRING) && (is_operator(DIAMEAP_STR,
 					operator) == TRUE))
 			{
-				if (strcmp((char *)A.os.data, B) != 0)
+				if (strcmp((char *)A->os.data, B) != 0)
 					return TRUE;
 				else
 					return FALSE;
@@ -1909,22 +1909,22 @@
 				switch (datatype)
 				{
 				case AVP_TYPE_INTEGER32://i32
-					return NE(A.i32, diameap_get_num(B, datatype).i32);
+					return NE(A->i32, diameap_get_num(B, datatype).i32);
 					break;
 				case AVP_TYPE_INTEGER64://i64
-					return NE(A.i64, diameap_get_num(B, datatype).i64);
+					return NE(A->i64, diameap_get_num(B, datatype).i64);
 					break;
 				case AVP_TYPE_UNSIGNED32://u32
-					return NE(A.u32, diameap_get_num(B, datatype).u32);
+					return NE(A->u32, diameap_get_num(B, datatype).u32);
 					break;
 				case AVP_TYPE_UNSIGNED64://u64
-					return NE(A.u64, diameap_get_num(B, datatype).u64);
+					return NE(A->u64, diameap_get_num(B, datatype).u64);
 					break;
 				case AVP_TYPE_FLOAT32://f32
-					return NE(A.f32, diameap_get_num(B, datatype).f32);
+					return NE(A->f32, diameap_get_num(B, datatype).f32);
 					break;
 				case AVP_TYPE_FLOAT64://f64
-					return NE(A.f64, diameap_get_num(B, datatype).f64);
+					return NE(A->f64, diameap_get_num(B, datatype).f64);
 					break;
 				default:
 					return FALSE;
@@ -1991,27 +1991,27 @@
 	return attribute_op;
 }
 
-int diameap_answer_set_attribute_valueA(union avp_value A, int *tofree,
+int diameap_answer_set_attribute_valueA(union avp_value *A, int *tofree,
 		enum dict_avp_basetype datatype, union avp_value * rval)
 {
-	TRACE_ENTRY("%p %p %p %p",A,tofree,datatype,rval);
+	TRACE_ENTRY("%p %p %d %p",A,tofree,datatype,rval);
 	if (datatype == AVP_TYPE_OCTETSTRING)
 	{
-		CHECK_MALLOC(rval->os.data=malloc(A.os.len));
-		memcpy(rval->os.data,A.os.data,A.os.len);
-		rval->os.len = A.os.len;
+		CHECK_MALLOC(rval->os.data=malloc(A->os.len));
+		memcpy(rval->os.data,A->os.data,A->os.len);
+		rval->os.len = A->os.len;
 		*tofree = 1;
 	}
 	else
 	{
-		*rval = A;
+		*rval = *A;
 	}
 	return 0;
 }
 int diameap_answer_set_attribute_valueB(char * B, int *tofree,
 		enum dict_avp_basetype datatype, union avp_value * rval)
 {
-	TRACE_ENTRY("%p %p %p %p",B,tofree,datatype,rval);
+	TRACE_ENTRY("%p %p %d %p",B,tofree,datatype,rval);
 	if (datatype == AVP_TYPE_OCTETSTRING)
 	{
 		CHECK_MALLOC(rval->os.data=malloc(strlen(B)));
@@ -2091,7 +2091,7 @@
 			CHECK_FCT(diameap_get_avp_attribute(&diameap_sm->req_attributes,auth_attrib->attrib,&avp_attrib,0,&ret));
 			if (ret == 0)
 			{
-				checked = diameap_check(avp_attrib->value, auth_attrib->value,
+				checked = diameap_check(&avp_attrib->value, auth_attrib->value,
 						op, avpdata.avp_basetype);
 			}
 		}
@@ -2118,7 +2118,7 @@
 						if (toadd == 1)
 						{
 							diameap_answer_set_attribute_valueA(
-									avp_attrib->value, &ans_attrib->tofree,
+									&avp_attrib->value, &ans_attrib->tofree,
 									avpdata.avp_basetype, &ans_attrib->value);
 						}
 						else
@@ -2145,7 +2145,7 @@
 					ans_attrib->attrib = auth_attrib->attrib;
 					if (toadd == 1)
 					{
-						diameap_answer_set_attribute_valueA(avp_attrib->value,
+						diameap_answer_set_attribute_valueA(&avp_attrib->value,
 								&ans_attrib->tofree, avpdata.avp_basetype,
 								&ans_attrib->value);
 					}
@@ -2176,17 +2176,17 @@
 
 
 static int diameap_policy_decision(struct diameap_state_machine * diameap_sm,
-		struct diameap_eap_interface eap_i)
+		struct diameap_eap_interface *eap_i)
 {
 	TRACE_ENTRY("%p %p",diameap_sm,eap_i);
 
-	if ((eap_i.aaaFail == TRUE) && (eap_i.aaaSuccess == TRUE))
+	if ((eap_i->aaaFail == TRUE) && (eap_i->aaaSuccess == TRUE))
 	{
 		TRACE_DEBUG(INFO,"%s Incorrect EAP decision. EAP process should not return both success and failure for the same session.(please report this problem.)",DIAMEAP_EXTENSION);
 		return -1;
 	}
 
-	if (eap_i.aaaFail == TRUE)
+	if (eap_i->aaaFail == TRUE)
 	{
 		diameap_sm->result_code = 4001; /* DIAMETER_AUTHENTICATION_REJECTED 4001 */
 		diameap_sm->authFailure = TRUE;
@@ -2194,13 +2194,13 @@
 		return 0;
 	}
 
-	if (eap_i.aaaSuccess == FALSE)
+	if (eap_i->aaaSuccess == FALSE)
 	{
 		diameap_sm->result_code = 1001; /* DIAMETER_MULTI_ROUND_AUTH 1001 */
 		return 0;
 	}
 
-	if (eap_i.aaaSuccess == TRUE)
+	if (eap_i->aaaSuccess == TRUE)
 	{
 		if (diameap_sm->auth_request_val == AUTHORIZE_AUTHENTICATE)
 		{
@@ -2873,7 +2873,7 @@
 }
 
 static int diameap_add_eap_payload(struct diameap_state_machine * diameap_sm,
-		struct msg * ans, struct diameap_eap_interface eap_i)
+		struct msg * ans, struct diameap_eap_interface *eap_i)
 {
 	TRACE_ENTRY("%p %p",diameap_sm,ans);
 	struct avp * avp;
@@ -2906,14 +2906,14 @@
 	//TD take the link type into consideration when calculating EAP_MAX_Length
 	EAP_Max_Length = Framed_MTU - NAS_Port_Type_HeaderLength;
 
-	if (eap_i.aaaEapReqData.length <= EAP_Max_Length)
+	if (eap_i->aaaEapReqData.length <= EAP_Max_Length)
 	{
 
 		/* EAP-Payload AVP */
 		{
 			CHECK_FCT(fd_msg_avp_new(dataobj_eap_payload, 0, &avp));
-			avp_val.os.data = eap_i.aaaEapReqData.data;
-			avp_val.os.len = eap_i.aaaEapReqData.length;
+			avp_val.os.data = eap_i->aaaEapReqData.data;
+			avp_val.os.len = eap_i->aaaEapReqData.length;
 			CHECK_FCT(fd_msg_avp_setvalue(avp, &avp_val));
 			CHECK_FCT( fd_msg_avp_add( ans, MSG_BRW_LAST_CHILD, avp ) );
 
@@ -2924,8 +2924,8 @@
 			}
 
 			CHECK_FCT(fd_msg_avp_new(dataobj_eap_payload, 0, &diameap_sm->lastReqEAPavp));
-			avp_val.os.data = eap_i.aaaEapReqData.data;
-			avp_val.os.len = eap_i.aaaEapReqData.length;
+			avp_val.os.data = eap_i->aaaEapReqData.data;
+			avp_val.os.len = eap_i->aaaEapReqData.length;
 			CHECK_FCT(fd_msg_avp_setvalue(diameap_sm->lastReqEAPavp, &avp_val));
 
 		}
@@ -2946,7 +2946,7 @@
 
 static int diameap_add_eap_success_avps(
 		struct diameap_state_machine * diameap_sm, struct msg * ans,
-		struct diameap_eap_interface eap_i)
+		struct diameap_eap_interface *eap_i)
 {
 	TRACE_ENTRY("%p %p %p",diameap_sm,ans,eap_i);
 	struct avp * avp;
@@ -2954,11 +2954,11 @@
 	int ret;
 
 	/* EAP-Master-Session-Key AVP */
-	if (eap_i.aaaEapKeyAvailable == TRUE)
+	if (eap_i->aaaEapKeyAvailable == TRUE)
 	{
 		CHECK_FCT(fd_msg_avp_new(dataobj_eap_master_session_key, 0, &avp));
-		avp_val.os.data = eap_i.aaaEapMSKData;
-		avp_val.os.len = eap_i.aaaEapMSKLength;
+		avp_val.os.data = eap_i->aaaEapMSKData;
+		avp_val.os.len = eap_i->aaaEapMSKLength;
 		CHECK_FCT(fd_msg_avp_setvalue(avp, &avp_val));
 		CHECK_FCT( fd_msg_avp_add( ans, MSG_BRW_LAST_CHILD, avp ) );
 
@@ -2988,7 +2988,7 @@
 {
 	TRACE_ENTRY("%p",diameap_sm);
 
-	CHECK_FCT(diameap_authorization_get_attribs(diameap_sm->eap_sm.user, &diameap_sm->attributes));
+	CHECK_FCT(diameap_authorization_get_attribs(&diameap_sm->eap_sm.user, &diameap_sm->attributes));
 
 	diameap_sm->authorized = TRUE;
 
@@ -3177,7 +3177,7 @@
 
 		case DIAMEAP_SELECT_DECISION:
 
-			CHECK_FCT_DO( diameap_policy_decision(diameap_sm,eap_i),
+			CHECK_FCT_DO( diameap_policy_decision(diameap_sm,&eap_i),
 					goto s_end)
 			;
 
@@ -3221,11 +3221,11 @@
 				if (diameap_sm->eap_sm.user.id != 0)
 				{
 					TRACE_DEBUG(FULL+1,"%sSelect authentication attributes.",DIAMEAP_EXTENSION);
-					CHECK_FCT_DO(diameap_authentication_get_attribs(diameap_sm->eap_sm.user, &diameap_sm->attributes),
+					CHECK_FCT_DO(diameap_authentication_get_attribs(&diameap_sm->eap_sm.user, &diameap_sm->attributes),
 							{	TRACE_DEBUG(INFO,"%s Unable to get user's session attributes.",DIAMEAP_EXTENSION); goto s_end;});
 					TRACE_DEBUG(FULL+1,"%sCreate answer authentication attributes.",DIAMEAP_EXTENSION);
 					CHECK_FCT_DO(diameap_answer_avp_attributes(diameap_sm),
-							{	TRACE_DEBUG(INFO,"% Unable to generate answer attributes.",DIAMEAP_EXTENSION); goto s_end;});
+							{	TRACE_DEBUG(INFO,"%s Unable to generate answer attributes.",DIAMEAP_EXTENSION); goto s_end;});
 				}
 
 				if (diameap_sm->authSuccess == FALSE)
@@ -3252,7 +3252,7 @@
 			;
 			TRACE_DEBUG(FULL+1,"%sAdding EAP-Payload to Diameter-EAP-Answer.",DIAMEAP_EXTENSION)
 			;
-			CHECK_FCT_DO( diameap_add_eap_payload(diameap_sm, ans,eap_i),
+			CHECK_FCT_DO( diameap_add_eap_payload(diameap_sm, ans,&eap_i),
 					{	TRACE_DEBUG(INFO,"%s Adding EAP-Payload AVP failed.",DIAMEAP_EXTENSION); goto s_end;})
 			;
 			TRACE_DEBUG(FULL+1,"%sStoring DiamEAP session data.",DIAMEAP_EXTENSION)
@@ -3281,7 +3281,7 @@
 			;
 			TRACE_DEBUG(FULL+1,"%sAdding EAP-Payload to Diameter-EAP-Answer.",DIAMEAP_EXTENSION)
 			;
-			CHECK_FCT_DO( diameap_add_eap_payload(diameap_sm, ans,eap_i),
+			CHECK_FCT_DO( diameap_add_eap_payload(diameap_sm, ans,&eap_i),
 					{	TRACE_DEBUG(INFO,"%s Adding EAP-Payload AVP failed.",DIAMEAP_EXTENSION); goto s_end;})
 			;
 
@@ -3311,12 +3311,12 @@
 			;
 			TRACE_DEBUG(FULL+1,"%sAdding EAP-Payload to Diameter-EAP-Answer.",DIAMEAP_EXTENSION)
 			;
-			CHECK_FCT_DO( diameap_add_eap_payload(diameap_sm, ans,eap_i),
+			CHECK_FCT_DO( diameap_add_eap_payload(diameap_sm, ans,&eap_i),
 					{	TRACE_DEBUG(INFO,"%s Adding EAP-Payload AVP failed.",DIAMEAP_EXTENSION); goto s_end;})
 			;
 			TRACE_DEBUG(FULL+1,"%sAdding EAP success AVPs AVPs to Diameter-EAP-Answer.",DIAMEAP_EXTENSION)
 			;
-			CHECK_FCT_DO( diameap_add_eap_success_avps(diameap_sm, ans, eap_i),
+			CHECK_FCT_DO( diameap_add_eap_success_avps(diameap_sm, ans, &eap_i),
 					goto s_end)
 			;
 			TRACE_DEBUG(FULL+1,"%sAdding Accounting-EAP-Auth-Method AVPs to Diameter-EAP-Answer.",DIAMEAP_EXTENSION)
--- a/extensions/app_diameap/diameap_user.c	Sat Apr 13 22:18:05 2013 +0200
+++ b/extensions/app_diameap/diameap_user.c	Mon Apr 15 15:17:07 2013 +0800
@@ -38,38 +38,38 @@
 
 #include "libdiameap.h"
 
-int diameap_user_get_userid(struct eap_user user, u8* userid)
+int diameap_user_get_userid(struct eap_user *user, u8* userid)
 {
 	TRACE_ENTRY("%p %p",user,userid);
-	if (user.userid == NULL)
+	if (user->userid == NULL)
 		return EINVAL;
-	userid = user.userid;
+	userid = user->userid;
 	return 0;
 }
 
-int diameap_user_get_password(struct eap_user user, u8* password,u16 * passwordlength)
+int diameap_user_get_password(struct eap_user *user, u8* password,u16 * passwordlength)
 {
 	TRACE_ENTRY("%p %p",user,password);
-	if (user.password == NULL)
+	if (user->password == NULL)
 		return EINVAL;
-	password = user.password;
-	*passwordlength = user.passwordLength;
+	password = user->password;
+	*passwordlength = user->passwordLength;
 	return 0;
 }
 
-int diameap_user_get_passwordlength(struct eap_user user, u16 * passwordlength)
+int diameap_user_get_passwordlength(struct eap_user *user, u16 * passwordlength)
 {
 	TRACE_ENTRY("%p %p",user,passwordlength);
-	if (user.password == NULL)
+	if (user->password == NULL)
 		return EINVAL;
-	*passwordlength = user.passwordLength;
+	*passwordlength = user->passwordLength;
 	return 0;
 }
 
 int diameap_user_set_password(struct eap_user * user, u8 * password,
 		u16 passwordLength)
 {
-	TRACE_ENTRY("%p %p %p",user,password,passwordLength);
+	TRACE_ENTRY("%p %p %hu",user,password,passwordLength);
 	if (password == NULL)
 		return EINVAL;
 	if (passwordLength < 1)
@@ -82,7 +82,7 @@
 int diameap_user_set_userid(struct eap_user * user, u8 * userid,
 		u16 useridLength)
 {
-	TRACE_ENTRY("%p %p %p",user,userid,useridLength);
+	TRACE_ENTRY("%p %p %hu",user,userid,useridLength);
 	if (userid == NULL)
 		return EINVAL;
 	if (useridLength < 1)
@@ -92,18 +92,18 @@
 	return 0;
 }
 
-int diameap_user_get_methodid(struct eap_user user, int * methodid)
+int diameap_user_get_methodid(struct eap_user *user, int * methodid)
 {
 	TRACE_ENTRY("%p %p",user,methodid);
-	if (user.password == NULL)
+	if (user->password == NULL)
 		return EINVAL;
-	*methodid = user.methodId;
+	*methodid = user->methodId;
 	return 0;
 }
 
 int diameap_user_set_methodid(struct eap_user * user, int methodId)
 {
-	TRACE_ENTRY("%p %p",user,methodId);
+	TRACE_ENTRY("%p %d",user,methodId);
 	if (user->password == NULL)
 		return EINVAL;
 	if (methodId < 0)
@@ -112,12 +112,12 @@
 	return 0;
 }
 
-boolean diameap_user_issuccess(struct eap_user user)
+boolean diameap_user_issuccess(struct eap_user *user)
 {
 	TRACE_ENTRY("%p",user);
-	if (user.password == NULL)
+	if (user->password == NULL)
 		return FALSE;
-	return user.success;
+	return user->success;
 }
 
 int diameap_user_set_success(struct eap_user * user)
@@ -129,24 +129,24 @@
 	return 0;
 }
 
-int diameap_user_get_eap_method(struct eap_user user, int id,
+int diameap_user_get_eap_method(struct eap_user *user, int id,
 		struct eap_method *method)
 {
-	TRACE_ENTRY("%p %p %p",user,id,method);
-	if (sizeof(user.methods) >= (id - 1))
-		*method = user.methods[id];
+	TRACE_ENTRY("%p %d %p",user,id,method);
+	if (sizeof(user->methods) >= (id - 1))
+		*method = user->methods[id];
 	return 0;
 }
 
 int diameap_user_set_eap_method(struct eap_user * user, int id,
-		struct eap_method method)
+		struct eap_method * method)
 {
-	TRACE_ENTRY("%p %p %p",user,id,method);
+	TRACE_ENTRY("%p %d %p",user,id,method);
 	if (user->password == NULL)
 		return EINVAL;
 	if (sizeof(user->methods) < (id - 1))
 		return EINVAL;
-	user->methods[id].vendor = method.vendor;
-	user->methods[id].method = method.method;
+	user->methods[id].vendor = method->vendor;
+	user->methods[id].method = method->method;
 	return 0;
 }
--- a/extensions/app_diameap/diameap_user.h	Sat Apr 13 22:18:05 2013 +0200
+++ b/extensions/app_diameap/diameap_user.h	Mon Apr 15 15:17:07 2013 +0800
@@ -75,24 +75,24 @@
 
 boolean check_user_identity;
 
-int diameap_user_get_password(struct eap_user user, u8 * password,u16 *length);
+int diameap_user_get_password(struct eap_user *user, u8 * password,u16 *length);
 
-int diameap_user_get_userid(struct eap_user user, u8 * userid);
+int diameap_user_get_userid(struct eap_user *user, u8 * userid);
 
 int diameap_user_set_password(struct eap_user * user, u8 * password, u16 Length);
 
 int diameap_user_set_userid(struct eap_user * user, u8 * userid, u16 Length);
 
-int diameap_user_get_methodid(struct eap_user user,int *methodId);
+int diameap_user_get_methodid(struct eap_user *user,int *methodId);
 
 int diameap_user_set_methodid(struct eap_user * user, int methodId);
 
-boolean diameap_user_issuccess(struct eap_user user);
+boolean diameap_user_issuccess(struct eap_user *user);
 
 int diameap_user_set_success(struct eap_user * user);
 
-int diameap_user_get_eap_method(struct eap_user user, int id, struct eap_method * eapmethod);
+int diameap_user_get_eap_method(struct eap_user *user, int id, struct eap_method * eapmethod);
 
-int diameap_user_set_eap_method(struct eap_user * user, int id, struct eap_method method);
+int diameap_user_set_eap_method(struct eap_user * user, int id, struct eap_method * method);
 
 #endif /* DIAMEAP_USER_H_ */
--- a/extensions/app_diameap/plugins/eap_identity/eap_identity.c	Sat Apr 13 22:18:05 2013 +0200
+++ b/extensions/app_diameap/plugins/eap_identity/eap_identity.c	Mon Apr 15 15:17:07 2013 +0800
@@ -48,8 +48,8 @@
 int identity_init(struct eap_state_machine *smd);
 int identity_initPickUp(struct eap_state_machine *smd);
 int identity_buildReq(struct eap_state_machine *smd, u8 identity, struct eap_packet * eapPacket);
-boolean identity_check(struct eap_state_machine *smd, struct eap_packet eapRespData);
-int identity_process(struct eap_state_machine *smd, struct eap_packet eapRespData);
+boolean identity_check(struct eap_state_machine *smd, struct eap_packet *eapRespData);
+int identity_process(struct eap_state_machine *smd, struct eap_packet *eapRespData);
 boolean identity_isDone(struct eap_state_machine *smd);
 void identity_free(void * data);
 
@@ -86,10 +86,10 @@
 }
 
 
-boolean identity_check(struct eap_state_machine *smd, struct eap_packet eapPacket)
+boolean identity_check(struct eap_state_machine *smd, struct eap_packet *eapPacket)
 {
 
-	if (eapPacket.data == NULL)
+	if (eapPacket->data == NULL)
 	{
 		TRACE_DEBUG(INFO,"%s[EAP Identity plugin] Empty EAP packet received.",DIAMEAP_EXTENSION);
 		return FALSE;
@@ -117,7 +117,7 @@
 	return FALSE;
 }
 
-int identity_process(struct eap_state_machine *smd, struct eap_packet eapRespData)
+int identity_process(struct eap_state_machine *smd, struct eap_packet *eapRespData)
 {
 	struct identity_data * data;
 	u16 length;
--- a/extensions/app_diameap/plugins/eap_md5/eap_md5.c	Sat Apr 13 22:18:05 2013 +0200
+++ b/extensions/app_diameap/plugins/eap_md5/eap_md5.c	Mon Apr 15 15:17:07 2013 +0800
@@ -57,8 +57,8 @@
 int eap_md5_initPickUp(struct eap_state_machine *smd);
 int eap_md5_buildReq(struct eap_state_machine *smd, u8 eap_md5,
 		struct eap_packet * eapPacket);
-boolean eap_md5_check(struct eap_state_machine *smd, struct eap_packet eapRespData);
-int eap_md5_process(struct eap_state_machine *smd, struct eap_packet eapRespData);
+boolean eap_md5_check(struct eap_state_machine *smd, struct eap_packet *eapRespData);
+int eap_md5_process(struct eap_state_machine *smd, struct eap_packet *eapRespData);
 boolean eap_md5_isDone(struct eap_state_machine *smd);
 void eap_md5_free(void * data);
 
@@ -114,7 +114,7 @@
 }
 
 
-boolean eap_md5_check(struct eap_state_machine *smd, struct eap_packet eapRespData)
+boolean eap_md5_check(struct eap_state_machine *smd, struct eap_packet *eapRespData)
 {
 	eap_type type;
 	if(diameap_eap_get_type(eapRespData,&type)!=0){
@@ -136,7 +136,7 @@
 
 
 
-int eap_md5_process(struct eap_state_machine *smd, struct eap_packet eapRespData)
+int eap_md5_process(struct eap_state_machine *smd, struct eap_packet *eapRespData)
 {
 
 	struct eap_md5_data * data;
@@ -157,7 +157,7 @@
 
 	for (i = 0; i < CHALLENGE_LEN; i++)
 	{
-		if (G8(hash + i) != G8(eapRespData.data + 6 + i))
+		if (G8(hash + i) != G8(eapRespData->data + 6 + i))
 		{
 			data->state = EAP_MD5_FAILURE;
 		}
--- a/extensions/app_diameap/plugins/eap_tls/eap_tls.c	Sat Apr 13 22:18:05 2013 +0200
+++ b/extensions/app_diameap/plugins/eap_tls/eap_tls.c	Mon Apr 15 15:17:07 2013 +0800
@@ -45,9 +45,9 @@
 		struct eap_packet * eapPacket);
 int eap_tls_getTimeout(struct eap_state_machine *smd, int * timeout);
 boolean eap_tls_check(struct eap_state_machine *smd,
-		struct eap_packet eapRespData);
+		struct eap_packet *eapRespData);
 int eap_tls_process(struct eap_state_machine *smd,
-		struct eap_packet eapRespData);
+		struct eap_packet *eapRespData);
 boolean eap_tls_isDone(struct eap_state_machine *smd);
 int eap_tls_getKey(struct eap_state_machine *smd, u8** msk, int * msklen, u8** emsk, int * emsklen);
 void eap_tls_unregister(void);
@@ -148,7 +148,7 @@
 }
 
 boolean eap_tls_check(struct eap_state_machine *smd,
-		struct eap_packet eapRespData)
+		struct eap_packet *eapRespData)
 {
 	eap_type type;
 	if(diameap_eap_get_type(eapRespData,&type)!=0){
@@ -164,7 +164,7 @@
 }
 
 int eap_tls_process(struct eap_state_machine *smd,
-		struct eap_packet eapRespData)
+		struct eap_packet *eapRespData)
 {
 	struct tls_data * data;
 	data = (struct tls_data *) smd->methodData;
@@ -352,7 +352,7 @@
 }
 
 // parse EAP TLS msg
-int diameap_eap_tls_parse(struct tls_msg * tlsmsg, struct eap_packet eapPacket)
+int diameap_eap_tls_parse(struct tls_msg * tlsmsg, struct eap_packet *eapPacket)
 {
 	u8 *datatls;
 	int len;
--- a/extensions/app_diameap/plugins/eap_tls/eap_tls.h	Sat Apr 13 22:18:05 2013 +0200
+++ b/extensions/app_diameap/plugins/eap_tls/eap_tls.h	Mon Apr 15 15:17:07 2013 +0800
@@ -45,7 +45,7 @@
 int diameap_eap_tls_buildReq_ack(u8 id, struct eap_packet * eapPacket);
 int diameap_eap_tls_buildReq_start(u8 id, struct eap_packet * eapPacket);
 int diameap_eap_tls_buildReq_data(struct tls_data * data,int id,struct eap_packet * eapPacket);
-int diameap_eap_tls_parse(struct tls_msg * eaptls,struct eap_packet eapPacket);
+int diameap_eap_tls_parse(struct tls_msg * eaptls,struct eap_packet *eapPacket);
 int eaptlsparse(struct tls_config * conf);
 
 #endif /* EAP_TLS_H_ */
--- a/extensions/app_radgw/radius.c	Sat Apr 13 22:18:05 2013 +0200
+++ b/extensions/app_radgw/radius.c	Mon Apr 15 15:17:07 2013 +0800
@@ -518,7 +518,7 @@
 	unsigned char *pos, *end;
 	int ret = 0;
 	
-	TRACE_ENTRY("%p %g %p", buf, len, msg);
+	TRACE_ENTRY("%p %zd %p", buf, len, msg);
 	
 	CHECK_PARAMS( buf && len >= sizeof(*hdr) && msg );
 	
--- a/extensions/app_radgw/rgw_clients.c	Sat Apr 13 22:18:05 2013 +0200
+++ b/extensions/app_radgw/rgw_clients.c	Mon Apr 15 15:17:07 2013 +0800
@@ -162,7 +162,7 @@
 				
 				if (now - r->received > DUPLICATE_CHECK_LIFETIME) {
 				
-					TRACE_DEBUG(ANNOYING + 1, "Purging RADIUS request (id: %02hhx, port: %hu, dup #%d, age %d secs)", r->id, ntohs(r->port), r->nbdup, now - r->received);
+					TRACE_DEBUG(ANNOYING + 1, "Purging RADIUS request (id: %02hhx, port: %hu, dup #%d, age %ld secs)", r->id, ntohs(r->port), r->nbdup, (long)(now - r->received));
 					
 					/* Remove this record */
 					fd_list_unlink(&r->by_time);
@@ -458,8 +458,8 @@
 	if (dup) {
 		time_t now = time(NULL);
 		r->nbdup += 1;
-		TRACE_DEBUG(INFO, "Received duplicated RADIUS message (id: %02hhx, port: %hu, dup #%d, previously seen %d secs ago).", 
-				r->id, ntohs(r->port), r->nbdup, now - r->received);
+		TRACE_DEBUG(INFO, "Received duplicated RADIUS message (id: %02hhx, port: %hu, dup #%d, previously seen %ld secs ago).", 
+				r->id, ntohs(r->port), r->nbdup, (long)(now - r->received));
 		
 		if (r->ans) {
 			/* Resend the answer */
@@ -779,7 +779,7 @@
 			if (!found) {
 				if (cli->type == RGW_CLI_NAS) {
 					TRACE_DEBUG(INFO, "The NAS-Identifier value '%.*s' resolves to a different IP than the client's, discarding the message. Configure this client as a Proxy if this message should be valid.", 
-						nas_id_len, nas_id + 1);
+						(int)nas_id_len, (char *)(nas_id + 1));
 					return EINVAL;
 				} else {
 					/* This identifier matches a different IP, assume it is a proxied message */
@@ -812,7 +812,7 @@
 				cli->aliases[cli->aliases_nb + 1].len = nas_id_len;
 
 				cli->aliases_nb ++;
-				TRACE_DEBUG(FULL, "Saved valid alias for client: '%.*s' -> '%s'", nas_id_len, nas_id + 1, cli->fqdn);
+				TRACE_DEBUG(FULL, "Saved valid alias for client: '%.*s' -> '%s'", (int)nas_id_len, (char *)(nas_id + 1), cli->fqdn);
 				CHECK_FCT( rgw_clients_get_origin(cli, &oh_str, &oh_strlen, &or_str, &or_strlen) );
 			}
 		} else {
--- a/extensions/app_radgw/rgw_servers.c	Sat Apr 13 22:18:05 2013 +0200
+++ b/extensions/app_radgw/rgw_servers.c	Mon Apr 15 15:17:07 2013 +0800
@@ -278,7 +278,7 @@
 	{
 		char __buf[1024];
 		sSA_DUMP_NODE_SERV(__buf, sizeof(__buf), &sto, NI_NUMERICHOST | NI_NUMERICSERV );
-		TRACE_DEBUG(FULL, "Sending %d bytes to %s", buflen, __buf);
+		TRACE_DEBUG(FULL, "Sending %zd bytes to %s", buflen, __buf);
 	}
 		
 	/* Send */
--- a/extensions/app_radgw/rgwx_acct.c	Sat Apr 13 22:18:05 2013 +0200
+++ b/extensions/app_radgw/rgwx_acct.c	Mon Apr 15 15:17:07 2013 +0800
@@ -364,7 +364,7 @@
 					int i;
 					si = v + pref_len;
 					si_len = attr_len - pref_len;
-					TRACE_DEBUG(ANNOYING, "Found Class attribute with '%s' prefix (attr #%d), SI:'%.*s'.", prefix, idx, si_len, si);
+					TRACE_DEBUG(ANNOYING, "Found Class attribute with '%s' prefix (attr #%d), SI:'%.*s'.", prefix, idx, (int)si_len, si);
 					/* Remove from the message */
 					for (i = idx + 1; i < rad_req->attr_used; i++)
 						rad_req->attr_pos[i - 1] = rad_req->attr_pos[i];
@@ -376,7 +376,7 @@
 				if (attr_len) {
 					un = v;
 					un_len = attr_len;
-					TRACE_DEBUG(ANNOYING, "Found a User-Name attribute: '%.*s'", un_len, un);
+					TRACE_DEBUG(ANNOYING, "Found a User-Name attribute: '%.*s'", (int)un_len, un);
 				}
 				break;
 			
@@ -489,7 +489,7 @@
 	{
 		CHECK_FCT( fd_sess_fromsid_msg ( si, si_len, &sess, NULL) );
 		
-		TRACE_DEBUG(FULL, "[acct.rgwx] Translating new accounting message for session '%.*s'...", si_len, si);
+		TRACE_DEBUG(FULL, "[acct.rgwx] Translating new accounting message for session '%.*s'...", (int)si_len, si);
 		
 		/* Add the Session-Id AVP as first AVP */
 		CHECK_FCT( fd_msg_avp_new ( cs->dict.Session_Id, 0, &avp ) );
@@ -1270,19 +1270,19 @@
 		default:
 			fd_log_debug("[acct.rgwx] Received Diameter answer with error code '%d' from server '%.*s', session %.*s, not translating into Accounting-Response",
 					ahdr->avp_value->u32, 
-					oh->avp_value->os.len, oh->avp_value->os.data,
-					sidlen, sid);
+					(int)oh->avp_value->os.len, oh->avp_value->os.data,
+					(int)sidlen, sid);
 			CHECK_FCT( fd_msg_search_avp (*diam_ans, cs->dict.Error_Message, &avp) );
 			if (avp) {
 				CHECK_FCT( fd_msg_avp_hdr ( avp, &ahdr ) );
 				fd_log_debug("[acct.rgwx]   Error-Message content: '%.*s'",
-						ahdr->avp_value->os.len, ahdr->avp_value->os.data);
+						(int)ahdr->avp_value->os.len, ahdr->avp_value->os.data);
 			}
 			CHECK_FCT( fd_msg_search_avp (*diam_ans, cs->dict.Error_Reporting_Host, &avp) );
 			if (avp) {
 				CHECK_FCT( fd_msg_avp_hdr ( avp, &ahdr ) );
 				fd_log_debug("[acct.rgwx]   Error-Reporting-Host: '%.*s'",
-						ahdr->avp_value->os.len, ahdr->avp_value->os.data);
+						(int)ahdr->avp_value->os.len, ahdr->avp_value->os.data);
 			}
 			CHECK_FCT( fd_msg_search_avp (*diam_ans, cs->dict.Failed_AVP, &avp) );
 			if (avp) {
--- a/extensions/app_radgw/rgwx_auth.c	Sat Apr 13 22:18:05 2013 +0200
+++ b/extensions/app_radgw/rgwx_auth.c	Mon Apr 15 15:17:07 2013 +0800
@@ -368,7 +368,7 @@
 					si = attr_val + i;
 					si_len = attr_len - i;
 
-					TRACE_DEBUG(ANNOYING, "Attribute parsed successfully: DH:'%.*s' DR:'%.*s' SI:'%.*s'.", dh_len, dh, dr_len, dr, si_len, si);
+					TRACE_DEBUG(ANNOYING, "Attribute parsed successfully: DH:'%.*s' DR:'%.*s' SI:'%.*s'.", (int)dh_len, dh, (int)dr_len, dr, (int)si_len, si);
 					/* Remove from the message */
 					for (i = idx + 1; i < rad_req->attr_used; i++)
 						rad_req->attr_pos[i - 1] = rad_req->attr_pos[i];
@@ -378,7 +378,7 @@
 				break;
 		
 			case RADIUS_ATTR_USER_NAME:
-				TRACE_DEBUG(ANNOYING, "Found a User-Name attribute: '%.*s'", attr_len, attr_len ? (char *)attr_val : "");
+				TRACE_DEBUG(ANNOYING, "Found a User-Name attribute: '%.*s'", (int)attr_len, attr_len ? (char *)attr_val : "");
 				un = attr_val;
 				un_len = attr_len;
 				break;
@@ -1241,19 +1241,19 @@
 			(*rad_fw)->hdr->code = RADIUS_CODE_ACCESS_REJECT;
 			fd_log_debug("[auth.rgwx] Received Diameter answer with error code '%d' from server '%.*s', session %.*s, translating into Access-Reject",
 					ahdr->avp_value->u32, 
-					oh->avp_value->os.len, oh->avp_value->os.data,
-					sidlen, sid);
+					(int)oh->avp_value->os.len, oh->avp_value->os.data,
+					(int)sidlen, sid);
 			CHECK_FCT( fd_msg_search_avp (*diam_ans, cs->dict.Error_Message, &avp_x) );
 			if (avp_x) {
 				CHECK_FCT( fd_msg_avp_hdr ( avp_x, &ahdr ) );
 				fd_log_debug("[auth.rgwx]   Error-Message content: '%.*s'",
-						ahdr->avp_value->os.len, ahdr->avp_value->os.data);
+						(int)ahdr->avp_value->os.len, ahdr->avp_value->os.data);
 			}
 			CHECK_FCT( fd_msg_search_avp (*diam_ans, cs->dict.Error_Reporting_Host, &avp_x) );
 			if (avp_x) {
 				CHECK_FCT( fd_msg_avp_hdr ( avp_x, &ahdr ) );
 				fd_log_debug("[auth.rgwx]   Error-Reporting-Host: '%.*s'",
-						ahdr->avp_value->os.len, ahdr->avp_value->os.data);
+						(int)ahdr->avp_value->os.len, ahdr->avp_value->os.data);
 			}
 			CHECK_FCT( fd_msg_search_avp (*diam_ans, cs->dict.Failed_AVP, &avp_x) );
 			if (avp_x) {
@@ -1456,8 +1456,8 @@
 								ahdr->avp_value->u32,
 								(ahdr->avp_value->u32 == 1) ? "AUTHENTICATE_ONLY" :
 									((ahdr->avp_value->u32 == 2) ? "AUTHORIZE_ONLY" : "???"),
-								oh->avp_value->os.len, oh->avp_value->os.data, 
-								sidlen, sid);
+								(int)oh->avp_value->os.len, oh->avp_value->os.data, 
+								(int)sidlen, sid);
 					}
 					break;
 				
@@ -1617,8 +1617,8 @@
 				case DIAM_ATTR_NAS_FILTER_RULE:
 					/* This is not translatable to RADIUS */
 					fd_log_debug("[auth.rgwx] Received Diameter answer with non-translatable NAS-Filter-Rule AVP from '%.*s' (session: '%.*s'), ignoring.",
-							oh->avp_value->os.len, oh->avp_value->os.data,
-							sidlen, sid);
+							(int)oh->avp_value->os.len, oh->avp_value->os.data,
+							(int)sidlen, sid);
 					handled = 0;
 					break;
 					
@@ -1650,8 +1650,8 @@
 				case DIAM_ATTR_QOS_FILTER_RULE:
 					/* This is not translatable to RADIUS */
 					fd_log_debug("[auth.rgwx] Received Diameter answer with non-translatable QoS-Filter-Rule AVP from '%.*s' (session: '%.*s'), ignoring.",
-							oh->avp_value->os.len, oh->avp_value->os.data,
-							sidlen, sid);
+							(int)oh->avp_value->os.len, oh->avp_value->os.data,
+							(int)sidlen, sid);
 					handled = 0;
 					break;
 					
@@ -1858,7 +1858,7 @@
 						CHECK_FCT(rgw_clients_getkey(cli, &secret, &secret_len));
 						
 						if (ahdr->avp_value->os.len != 64) {
-							TRACE_DEBUG(INFO, "Received EAP-Master-Session-Key attribute with length %d != 64.", ahdr->avp_value->os.len)
+							TRACE_DEBUG(INFO, "Received EAP-Master-Session-Key attribute with length %zd != 64.", ahdr->avp_value->os.len)
 						}
 						
 						CHECK_PARAMS(ahdr->avp_value->os.len <= 64);
--- a/extensions/app_radgw/rgwx_sip.c	Sat Apr 13 22:18:05 2013 +0200
+++ b/extensions/app_radgw/rgwx_sip.c	Mon Apr 15 15:17:07 2013 +0800
@@ -365,7 +365,7 @@
 			case RADIUS_ATTR_USER_NAME:
 				if (attr->length>sizeof(struct radius_attr_hdr)) 
 				{
-					TRACE_DEBUG(ANNOYING, "Found a User-Name attribute: '%.*s'", attr->length- sizeof(struct radius_attr_hdr), (char *)(attr+1));
+					TRACE_DEBUG(ANNOYING, "Found a User-Name attribute: '%.*s'", (int)(attr->length- sizeof(struct radius_attr_hdr)), (char *)(attr+1));
 					un = (os0_t)(attr + 1);
 					un_len =attr->length - sizeof(struct radius_attr_hdr);
 				}
@@ -801,7 +801,7 @@
 		default:
 			(*rad_fw)->hdr->code = RADIUS_CODE_ACCESS_REJECT;
 			fd_log_debug("[sip.rgwx] Received Diameter answer with error code '%d', session %.*s, translating into Access-Reject",
-					ahdr->avp_value->u32, sidlen, sid);
+					ahdr->avp_value->u32, (int)sidlen, sid);
 			return 0;
 	}
 	/* Remove this Result-Code avp */
--- a/extensions/app_sip/app_sip.c	Sat Apr 13 22:18:05 2013 +0200
+++ b/extensions/app_sip/app_sip.c	Mon Apr 15 15:17:07 2013 +0800
@@ -75,7 +75,7 @@
 	TRACE_DEBUG(FULL,"# mysql_database: *%s*",as_conf->mysql_database);
 	TRACE_DEBUG(FULL,"# mysql_server: *%s*",as_conf->mysql_server);
 	TRACE_DEBUG(FULL,"# mysql_port: *%d*",as_conf->mysql_port);
-	TRACE_DEBUG(FULL,"# mysql_port: *%d*",as_conf->mysql_prefix);
+	TRACE_DEBUG(FULL,"# mysql_port: *%s*",as_conf->mysql_prefix);
 	TRACE_DEBUG(FULL,"***End of Diameter-SIP configuration extension***");
 }
 
--- a/extensions/app_sip/app_sip.h	Sat Apr 13 22:18:05 2013 +0200
+++ b/extensions/app_sip/app_sip.h	Mon Apr 15 15:17:07 2013 +0800
@@ -135,8 +135,8 @@
 	int accounting;
 };
 
-int app_sip_RTR_cb(struct rtrsipaor structure);
-int app_sip_PPR_cb(struct pprsipaor structure);
+int app_sip_RTR_cb(struct rtrsipaor *structure);
+int app_sip_PPR_cb(struct pprsipaor *structure);
 
 
 int ds_entry();
--- a/extensions/app_sip/pushprofile.c	Sat Apr 13 22:18:05 2013 +0200
+++ b/extensions/app_sip/pushprofile.c	Mon Apr 15 15:17:07 2013 +0800
@@ -76,7 +76,7 @@
 				if(rcvbytes>-1)
 				{
 					//We received something, we can send an PPR
-					app_sip_PPR_cb(pprsip);
+					app_sip_PPR_cb(&pprsip);
 				}
 			}
 		}
@@ -91,7 +91,7 @@
 	
 }
 //Called to send a PPR
-int app_sip_PPR_cb(struct pprsipaor structure)
+int app_sip_PPR_cb(struct pprsipaor *structure)
 {
 	/*
 	TRACE_ENTRY("%p", structure);
--- a/extensions/app_sip/registrationtermination.c	Sat Apr 13 22:18:05 2013 +0200
+++ b/extensions/app_sip/registrationtermination.c	Mon Apr 15 15:17:07 2013 +0800
@@ -74,7 +74,7 @@
 				if(rcvbytes>-1)
 				{
 					//We received something, we can send an RTR
-					app_sip_RTR_cb(rtrsip);
+					app_sip_RTR_cb(&rtrsip);
 				}
 			}
 		}
@@ -87,7 +87,7 @@
 	
 }
 //Called to send a RTR
-int app_sip_RTR_cb(struct rtrsipaor structure)
+int app_sip_RTR_cb(struct rtrsipaor *structure)
 {
 	TRACE_ENTRY("%p", structure);
 	
@@ -101,21 +101,21 @@
 	union avp_value value;
 	
 	//We must check that we have all needed value in structure
-	if(structure.username[0]!='\0')
+	if(structure->username[0]!='\0')
 		got_username=1;
 	
-	if(structure.sip_aor1[0]!='\0')
+	if(structure->sip_aor1[0]!='\0')
 	{	
 		num_aor++;
-		if(structure.sip_aor2[0]!='\0')
+		if(structure->sip_aor2[0]!='\0')
 		{
 			num_aor++;
-			if(structure.sip_aor3[0]!='\0')
+			if(structure->sip_aor3[0]!='\0')
 				num_aor++;
 		}
 	}
 	
-	if(structure.strreason!='\0')
+	if(structure->strreason!='\0')
 		got_streason=1;
 	
 	
@@ -127,14 +127,14 @@
 		TRACE_DEBUG(INFO,"Can not proceed because there is no SIP_AOR or Username");
 		return EINVAL;
 	}
-	if(structure.reason<0)
+	if(structure->reason<0)
 	{
 		//We must have a least a SIP_AOR or a Username
 		TRACE_DEBUG(INFO,"Incorrect Reason-Code");
 		return EINVAL;
 	}
 	
-	if(structure.desthost[0]=='\0')
+	if(structure->desthost[0]=='\0')
 	{
 		//We must have a least a SIP_AOR or a Username
 		TRACE_DEBUG(INFO,"No Destination_Host was provided!");
@@ -172,8 +172,8 @@
 	//Destination_Host
 	{
 		CHECK_FCT( fd_msg_avp_new ( sip_dict.Destination_Host, 0, &avp ) );
-		value.os.data=(unsigned char *)structure.desthost;
-		value.os.len=(size_t)strlen(structure.desthost);
+		value.os.data=(unsigned char *)structure->desthost;
+		value.os.len=(size_t)strlen(structure->desthost);
 		CHECK_FCT( fd_msg_avp_setvalue( avp, &value ) );
 		CHECK_FCT( fd_msg_avp_add( message, MSG_BRW_LAST_CHILD, avp ) );
 	}
@@ -185,7 +185,7 @@
 		
 		//Reason Code
 		CHECK_FCT( fd_msg_avp_new ( sip_dict.SIP_Reason_Code, 0, &avp ) );
-		value.i32=structure.reason;
+		value.i32=structure->reason;
 		CHECK_FCT( fd_msg_avp_setvalue( avp, &value ) );
 		CHECK_FCT( fd_msg_avp_add( groupedavp, MSG_BRW_LAST_CHILD, avp ) );
 		
@@ -193,8 +193,8 @@
 		{
 			//Reason Info
 			CHECK_FCT( fd_msg_avp_new ( sip_dict.SIP_Reason_Info, 0, &avp ) );
-			value.os.data=(unsigned char *)structure.strreason;
-			value.os.len=(size_t)strlen(structure.strreason);
+			value.os.data=(unsigned char *)structure->strreason;
+			value.os.len=(size_t)strlen(structure->strreason);
 			CHECK_FCT( fd_msg_avp_setvalue( avp, &value ) );
 			CHECK_FCT( fd_msg_avp_add( groupedavp, MSG_BRW_LAST_CHILD, avp ) );
 		}
@@ -208,8 +208,8 @@
 		if(got_username)
 		{
 			CHECK_FCT( fd_msg_avp_new ( sip_dict.User_Name, 0, &avp ) );
-			value.os.data=(unsigned char *)structure.username;
-			value.os.len=(size_t)strlen(structure.username);
+			value.os.data=(unsigned char *)structure->username;
+			value.os.len=(size_t)strlen(structure->username);
 			CHECK_FCT( fd_msg_avp_setvalue( avp, &value ) );
 			CHECK_FCT( fd_msg_avp_add( message, MSG_BRW_LAST_CHILD, avp ) );
 		}
@@ -220,22 +220,22 @@
 		if(num_aor>0)
 		{
 			CHECK_FCT( fd_msg_avp_new ( sip_dict.SIP_AOR, 0, &avp ) );
-			value.os.data=(unsigned char *)structure.sip_aor1;
-			value.os.len=(size_t)strlen(structure.sip_aor1);
+			value.os.data=(unsigned char *)structure->sip_aor1;
+			value.os.len=(size_t)strlen(structure->sip_aor1);
 			CHECK_FCT( fd_msg_avp_setvalue( avp, &value ) );
 			CHECK_FCT( fd_msg_avp_add( message, MSG_BRW_LAST_CHILD, avp ) );
 			if(num_aor>1)
 			{
 				CHECK_FCT( fd_msg_avp_new ( sip_dict.SIP_AOR, 0, &avp ) );
-				value.os.data=(unsigned char *)structure.sip_aor2;
-				value.os.len=(size_t)strlen(structure.sip_aor2);
+				value.os.data=(unsigned char *)structure->sip_aor2;
+				value.os.len=(size_t)strlen(structure->sip_aor2);
 				CHECK_FCT( fd_msg_avp_setvalue( avp, &value ) );
 				CHECK_FCT( fd_msg_avp_add( message, MSG_BRW_LAST_CHILD, avp ) );
 				if(num_aor>2)
 				{
 					CHECK_FCT( fd_msg_avp_new ( sip_dict.SIP_AOR, 0, &avp ) );
-					value.os.data=(unsigned char *)structure.sip_aor3;
-					value.os.len=(size_t)strlen(structure.sip_aor3);
+					value.os.data=(unsigned char *)structure->sip_aor3;
+					value.os.len=(size_t)strlen(structure->sip_aor3);
 					CHECK_FCT( fd_msg_avp_setvalue( avp, &value ) );
 					CHECK_FCT( fd_msg_avp_add( message, MSG_BRW_LAST_CHILD, avp ) );
 				}
--- a/extensions/rt_ereg/rtereg.c	Sat Apr 13 22:18:05 2013 +0200
+++ b/extensions/rt_ereg/rtereg.c	Mon Apr 15 15:17:07 2013 +0800
@@ -60,7 +60,7 @@
 		int err = 0;
 		struct fd_list * c;
 		
-		TRACE_DEBUG(ANNOYING, "Attempt pattern matching of '%.*s' with rule '%s'", len, value, r->pattern);
+		TRACE_DEBUG(ANNOYING, "Attempt pattern matching of '%.*s' with rule '%s'", (int)len, value, r->pattern);
 		
 		#ifdef HAVE_REG_STARTEND
 		{
@@ -106,7 +106,7 @@
 		/* From this point, the expression matched the AVP value */
 		TRACE_DEBUG(FULL, "[rt_ereg] Match: '%s' to value '%.*s' => '%s' += %d",
 					r->pattern,
-					len,
+					(int)len,
 					value,
 					r->server,
 					r->score);
--- a/extensions/rt_redirect/redir_fwd.c	Sat Apr 13 22:18:05 2013 +0200
+++ b/extensions/rt_redirect/redir_fwd.c	Mon Apr 15 15:17:07 2013 +0800
@@ -121,18 +121,18 @@
 						CHECK_FCT_DO( fd_os_parse_DiameterURI(ahdr->avp_value->os.data, ahdr->avp_value->os.len, 
 									&id, &len, &secure, &port, &l4, &proto),
 							{
-								TRACE_DEBUG(INFO, "Received an invalid Redirect-Host AVP value ('%.*s'), ignored", ahdr->avp_value->os.len, ahdr->avp_value->os.data);
+								TRACE_DEBUG(INFO, "Received an invalid Redirect-Host AVP value ('%.*s'), ignored", (int)ahdr->avp_value->os.len, ahdr->avp_value->os.data);
 								break;
 							} );
 						
 						/* Now check if the transport & protocol are supported */
 						if (proto && (proto != 'd')) {
-							TRACE_DEBUG(FULL, "Ignored unsupported non-Diameter Redirect-Host AVP (%.*s)", ahdr->avp_value->os.len, ahdr->avp_value->os.data);
+							TRACE_DEBUG(FULL, "Ignored unsupported non-Diameter Redirect-Host AVP (%.*s)", (int)ahdr->avp_value->os.len, ahdr->avp_value->os.data);
 							free(id);
 							break;
 						}
 						if (l4 && (l4 == IPPROTO_UDP)) {
-							TRACE_DEBUG(FULL, "Ignored unsupported UDP Redirect-Host AVP (%.*s)", ahdr->avp_value->os.len, ahdr->avp_value->os.data);
+							TRACE_DEBUG(FULL, "Ignored unsupported UDP Redirect-Host AVP (%.*s)", (int)ahdr->avp_value->os.len, ahdr->avp_value->os.data);
 							free(id);
 							break;
 						}
--- a/extensions/rt_redirect/redir_out.c	Sat Apr 13 22:18:05 2013 +0200
+++ b/extensions/rt_redirect/redir_out.c	Mon Apr 15 15:17:07 2013 +0800
@@ -172,7 +172,7 @@
 		if (e->type == ALL_HOST) {
 			cmp = fd_os_almostcasesrch(cand->diamid, cand->diamidlen, e->data.host.s, e->data.host.l, NULL);
 			if (!cmp) {
-				TRACE_DEBUG(FULL, "Redirect msg %p: peer '%.*s' += %d (previous ALL_HOST Redirect originated from this peer)", msg, cand->diamidlen, cand->diamid, FD_SCORE_SENT_REDIRECT);
+				TRACE_DEBUG(FULL, "Redirect msg %p: peer '%.*s' += %d (previous ALL_HOST Redirect originated from this peer)", msg, (int)cand->diamidlen, cand->diamid, FD_SCORE_SENT_REDIRECT);
 				cand->score += FD_SCORE_SENT_REDIRECT;
 				c_oh = cand;
 				continue;
@@ -181,7 +181,7 @@
 		
 		cmp = fd_os_cmp(cand->diamid, cand->diamidlen, e->from.s, e->from.l);
 		if (!cmp) {
-			TRACE_DEBUG(FULL, "Redirect msg %p: peer '%.*s' += %d (previous Redirect received from this peer)", msg, cand->diamidlen, cand->diamid, FD_SCORE_SENT_REDIRECT);
+			TRACE_DEBUG(FULL, "Redirect msg %p: peer '%.*s' += %d (previous Redirect received from this peer)", msg, (int)cand->diamidlen, cand->diamid, FD_SCORE_SENT_REDIRECT);
 			cand->score += FD_SCORE_SENT_REDIRECT;
 		}
 		
@@ -205,7 +205,7 @@
 			cmp = fd_os_almostcasesrch( cand->diamid, cand->diamidlen, host->id, host->len, &cont );
 			
 			if (cmp == 0) {
-				TRACE_DEBUG(FULL, "Redirect msg %p: peer '%.*s' += %d (rule t:%d @%p)", msg, cand->diamidlen, cand->diamid, redirects_usages[e->type].score, e->type, e);
+				TRACE_DEBUG(FULL, "Redirect msg %p: peer '%.*s' += %d (rule t:%d @%p)", msg, (int)cand->diamidlen, cand->diamid, redirects_usages[e->type].score, e->type, e);
 				cand->score += redirects_usages[e->type].score;
 				break;
 			}
--- a/include/freeDiameter/libfdproto.h	Sat Apr 13 22:18:05 2013 +0200
+++ b/include/freeDiameter/libfdproto.h	Mon Apr 15 15:17:07 2013 +0800
@@ -83,6 +83,11 @@
 #include <libgen.h>	/* for basename if --dbg_file is specified */
 #endif /* DEBUG */
 
+#ifdef SWIG
+#define _ATTRIBUTE_PRINTFLIKE_(_f,_v)
+#else
+#define _ATTRIBUTE_PRINTFLIKE_(_f,_v) __attribute__ ((format (printf, _f, _v)))
+#endif /* SWIG */
 
 /*============================================================*/
 /*                       CONSTANTS                            */
@@ -127,7 +132,7 @@
  * RETURN VALUE:
  *  None.
  */
-void fd_log ( int, const char *, ... ) __attribute__ ((format (printf, 2, 3)));
+void fd_log ( int, const char *, ... ) _ATTRIBUTE_PRINTFLIKE_(2,3);
 #define fd_log_debug(format,args...)  fd_log(FD_LOG_DEBUG, format, ## args)
 #define fd_log_notice(format,args...) fd_log(FD_LOG_NOTICE, format, ## args)
 #define fd_log_error(format,args...)  fd_log(FD_LOG_ERROR, format, ## args)
@@ -783,9 +788,9 @@
 	CHECK_POSIX( pthread_join(*th, &th_ret) );
 	
 	if (th_ret == PTHREAD_CANCELED) {
-		TRACE_DEBUG(ANNOYING, "The thread %p was canceled", *th);
+		TRACE_DEBUG(ANNOYING, "The thread %p was canceled", (void *)*th);
 	} else {
-		TRACE_DEBUG(CALL, "The thread %p returned %p", *th, th_ret);
+		TRACE_DEBUG(CALL, "The thread %p returned %p", (void *)*th, th_ret);
 	}
 	
 	/* Clean the location */
@@ -2336,7 +2341,7 @@
 	FD_MSG_LOG_TIMING	 /* profiling messages */
 };
 #define FD_MSG_LOG_MAX FD_MSG_LOG_TIMING
-void fd_msg_log( enum fd_msg_log_cause cause, struct msg * msg, const char * prefix_format, ... ) __attribute__ ((format (printf, 3, 4)));
+void fd_msg_log( enum fd_msg_log_cause cause, struct msg * msg, const char * prefix_format, ... ) _ATTRIBUTE_PRINTFLIKE_(3,4);
 
 /* configure the msg_log facility */
 enum fd_msg_log_method {
--- a/libfdcore/cnxctx.c	Sat Apr 13 22:18:05 2013 +0200
+++ b/libfdcore/cnxctx.c	Mon Apr 15 15:17:07 2013 +0800
@@ -512,7 +512,7 @@
 /* Get the list of endpoints (IP addresses) of the local and remote peers on this connection */
 int fd_cnx_getremoteeps(struct cnxctx * conn, struct fd_list * eps)
 {
-	TRACE_ENTRY("%p %p %p", conn, eps);
+	TRACE_ENTRY("%p %p", conn, eps);
 	CHECK_PARAMS(conn && eps);
 	
 	/* Check we have a full connection object, not a listening socket (with no remote) */
@@ -1209,7 +1209,7 @@
 				for (j = 0; j < size; j++) {
 					snprintf(buf+strlen(buf), sizeof(buf)-strlen(buf), "%02hhx", serial[j]);
 				}
-				fd_log_debug(buf);
+				fd_log_debug("%s", buf);
 			}
 
 			/* Extract some of the public key algorithm's parameters */
--- a/libfdcore/config.c	Sat Apr 13 22:18:05 2013 +0200
+++ b/libfdcore/config.c	Mon Apr 15 15:17:07 2013 +0800
@@ -225,6 +225,9 @@
 }
 #endif /* GNUTLS_VERSION_300 */
 
+#ifndef GNUTLS_VERSION_300
+# pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+#endif /* !GNUTLS_VERSION_300 */
 /* Parse the configuration file (using the yacc parser) */
 int fd_conf_parse()
 {
@@ -473,10 +476,8 @@
 			
 			unsigned int verify;
 			time_t now;
-			#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
 			GNUTLS_TRACE( gnutls_certificate_get_x509_cas (fd_g_config->cnf_sec_data.credentials, &CA_list, (unsigned int *) &CA_list_length) );
 			GNUTLS_TRACE( gnutls_certificate_get_x509_crls (fd_g_config->cnf_sec_data.credentials, &CRL_list, (unsigned int *) &CRL_list_length) );
-			#pragma GCC diagnostic warning "-Wdeprecated-declarations"
 			CHECK_GNUTLS_DO( gnutls_x509_crt_list_verify(certs, cert_max, CA_list, CA_list_length, CRL_list, CRL_list_length, 0, &verify),
 				{
 					TRACE_ERROR("Failed to verify the local certificate '%s' against local credentials. Please check your certificate is valid.", fd_g_config->cnf_sec_data.cert_file);
@@ -596,6 +597,9 @@
 	
 	return 0;
 }
+#ifndef GNUTLS_VERSION_300
+# pragma GCC diagnostic pop "-Wdeprecated-declarations"
+#endif /* !GNUTLS_VERSION_300 */
 
 
 /* Destroy contents of fd_g_config structure */
--- a/libfdcore/core.c	Sat Apr 13 22:18:05 2013 +0200
+++ b/libfdcore/core.c	Mon Apr 15 15:17:07 2013 +0800
@@ -37,7 +37,7 @@
 
 #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
 #include <gcrypt.h>
-#pragma GCC diagnostic warning "-Wdeprecated-declarations"
+#pragma GCC diagnostic pop "-Wdeprecated-declarations"
 
 /* The static configuration structure */
 static struct fd_config g_conf;
--- a/libfdcore/p_ce.c	Sat Apr 13 22:18:05 2013 +0200
+++ b/libfdcore/p_ce.c	Mon Apr 15 15:17:07 2013 +0800
@@ -306,7 +306,7 @@
 				if (fd_os_almostcasesrch(hdr->avp_value->os.data, hdr->avp_value->os.len, 
 							peer->p_hdr.info.pi_diamid, peer->p_hdr.info.pi_diamidlen, NULL)) {
 					TRACE_DEBUG(INFO, "Received a message with Origin-Host set to '%.*s' while expecting '%s'", 
-							hdr->avp_value->os.len, hdr->avp_value->os.data, peer->p_hdr.info.pi_diamid);
+							(int)hdr->avp_value->os.len, hdr->avp_value->os.data, peer->p_hdr.info.pi_diamid);
 					error->pei_errcode = "DIAMETER_AVP_NOT_ALLOWED";
 					error->pei_message = "Your Origin-Host value does not match my configuration.";
 					error->pei_avp = avp;
--- a/libfdcore/p_out.c	Sat Apr 13 22:18:05 2013 +0200
+++ b/libfdcore/p_out.c	Mon Apr 15 15:17:07 2013 +0800
@@ -84,7 +84,7 @@
 		(void) fd_msg_ts_get_recv(cpy_for_logs_only, &rcvon);
 		if (rcvon.tv_sec != 0 || rcvon.tv_nsec != 0) {
 			TS_DIFFERENCE( &delay, &rcvon, &senton);
-			fd_msg_log( FD_MSG_LOG_TIMING, cpy_for_logs_only, "Forwarded in %d.%06.6d sec", delay.tv_sec, delay.tv_nsec/1000);
+			fd_msg_log( FD_MSG_LOG_TIMING, cpy_for_logs_only, "Forwarded in %ld.%6.6ld sec", (long)delay.tv_sec, delay.tv_nsec/1000);
 		} else { /* We log the answer time only for answers generated locally */
 			if (!msg_is_a_req) {
 				/* get the matching request */
@@ -93,7 +93,7 @@
 				(void) fd_msg_answ_getq(cpy_for_logs_only, &req);
 				(void) fd_msg_ts_get_recv(req, &reqrcvon);
 				TS_DIFFERENCE( &delay, &reqrcvon, &senton);
-				fd_msg_log( FD_MSG_LOG_TIMING, cpy_for_logs_only, "Answered in %d.%06.6d sec", delay.tv_sec, delay.tv_nsec/1000);
+				fd_msg_log( FD_MSG_LOG_TIMING, cpy_for_logs_only, "Answered in %ld.%6.6ld sec", (long)delay.tv_sec, delay.tv_nsec/1000);
 			}
 		}
 	}
--- a/libfdcore/p_psm.c	Sat Apr 13 22:18:05 2013 +0200
+++ b/libfdcore/p_psm.c	Mon Apr 15 15:17:07 2013 +0800
@@ -537,7 +537,7 @@
 				struct timespec reqsent, delay;
 				(void) fd_msg_ts_get_sent(req, &reqsent);
 				TS_DIFFERENCE( &delay, &reqsent, &rcvon );
-				fd_msg_log( FD_MSG_LOG_TIMING, msg, "Answer received in %d.%06.6d sec.", delay.tv_sec, delay.tv_nsec / 1000 );
+				fd_msg_log( FD_MSG_LOG_TIMING, msg, "Answer received in %ld.%6.6ld sec.", (long)delay.tv_sec, delay.tv_nsec / 1000 );
 			}
 		} else {
 			/* Mark the incoming request so that we know we have pending answers for this peer */
--- a/libfdcore/peers.c	Sat Apr 13 22:18:05 2013 +0200
+++ b/libfdcore/peers.c	Mon Apr 15 15:17:07 2013 +0800
@@ -423,20 +423,20 @@
 		if (peer->p_hdr.info.runtime.pir_prodname)
 			snprintf(buf+strlen(buf), sizeof(buf)-strlen(buf), "\t['%s' %u]", peer->p_hdr.info.runtime.pir_prodname, peer->p_hdr.info.runtime.pir_firmrev);
 	}
-	fd_log_debug(buf);
+	fd_log_debug("%s", buf);
 	if (details > FULL) {
 		/* Dump all info */
 		fd_log_debug("\tEntry origin : %s", peer->p_dbgorig?: "not set");
-		fd_log_debug("\tConfig flags : %s%s%s%s%s - %s%s%s", 
-				peer->p_hdr.info.config.pic_flags.pro3 == PI_P3_DEFAULT ? "" :
-					(peer->p_hdr.info.config.pic_flags.pro3 == PI_P3_IP ? "IP." : "IPv6."),
-				peer->p_hdr.info.config.pic_flags.pro4 == PI_P4_DEFAULT ? "" :
-					(peer->p_hdr.info.config.pic_flags.pro4 == PI_P4_TCP ? "TCP." : "SCTP."),
-				peer->p_hdr.info.config.pic_flags.alg ? "PrefTCP." : "",
-				peer->p_hdr.info.config.pic_flags.sec & PI_SEC_NONE ? "NoTLSok" :"",
-				peer->p_hdr.info.config.pic_flags.sec & PI_SEC_TLS_OLD ? "OldTLS" :"",
-				peer->p_hdr.info.config.pic_flags.exp ? "Expire." : "",
-				peer->p_hdr.info.config.pic_flags.persist ? "Persist." : ""
+		fd_log_debug("\tConfig flags : %s%s%s - %s%s - %s%s", 
+				peer->p_hdr.info.config.pic_flags.pro3 == PI_P3_DEFAULT ? "." :
+					(peer->p_hdr.info.config.pic_flags.pro3 == PI_P3_IP ? "IP" : "IPv6"),
+				peer->p_hdr.info.config.pic_flags.pro4 == PI_P4_DEFAULT ? "." :
+					(peer->p_hdr.info.config.pic_flags.pro4 == PI_P4_TCP ? "TCP" : "SCTP"),
+				peer->p_hdr.info.config.pic_flags.alg ? "PrefTCP" : ".",
+				peer->p_hdr.info.config.pic_flags.sec & PI_SEC_NONE ? "NoTLSok" :".",
+				peer->p_hdr.info.config.pic_flags.sec & PI_SEC_TLS_OLD ? "OldTLS" :".",
+				peer->p_hdr.info.config.pic_flags.exp ? "Expire" : ".",
+				peer->p_hdr.info.config.pic_flags.persist ? "Persist" : "."
 				);
 		fd_log_debug("\tLifetime : %d sec", peer->p_hdr.info.config.pic_lft);
 	}
--- a/libfdcore/routing_dispatch.c	Sat Apr 13 22:18:05 2013 +0200
+++ b/libfdcore/routing_dispatch.c	Mon Apr 15 15:17:07 2013 +0800
@@ -361,9 +361,9 @@
 	dr->os.len = sep_idx;
 	
 	TRACE_DEBUG(FULL, "Processed Decorated NAI : '%.*s' became '%.*s' (%.*s)",
-				un->os.len, old_un,
-				at_idx, un->os.data,
-				dr->os.len, dr->os.data);
+				(int)un->os.len, old_un,
+				(int)at_idx, un->os.data,
+				(int)dr->os.len, dr->os.data);
 	
 	un->os.len = at_idx;
 	free(old_un);
--- a/libfdcore/sctp.c	Sat Apr 13 22:18:05 2013 +0200
+++ b/libfdcore/sctp.c	Mon Apr 15 15:17:07 2013 +0800
@@ -1036,7 +1036,7 @@
 	mhdr.msg_control    = anci;
 	mhdr.msg_controllen = sizeof(anci);
 	
-	TRACE_DEBUG(FULL, "Sending %db data on stream %hu of socket %d", len, strid, conn->cc_socket);
+	TRACE_DEBUG(FULL, "Sending %zdb data on stream %hu of socket %d", len, strid, conn->cc_socket);
 again:	
 	ret = sendmsg(conn->cc_socket, &mhdr, 0);
 	/* Handle special case of timeout */
@@ -1134,7 +1134,7 @@
 	if (mhdr.msg_flags & MSG_NOTIFICATION) {
 		union sctp_notification * notif = (union sctp_notification *) data;
 		
-		TRACE_DEBUG(FULL, "Received %db data of notification on socket %d", datasize, conn->cc_socket);
+		TRACE_DEBUG(FULL, "Received %zdb data of notification on socket %d", datasize, conn->cc_socket);
 	
 		switch (notif->sn_header.sn_type) {
 			
@@ -1232,9 +1232,9 @@
 
 			*strid = sndrcv->sinfo_stream;
 		}
-		TRACE_DEBUG(FULL, "Received %db data on socket %d, stream %hu", datasize, conn->cc_socket, *strid);
+		TRACE_DEBUG(FULL, "Received %zdb data on socket %d, stream %hu", datasize, conn->cc_socket, *strid);
 	} else {
-		TRACE_DEBUG(FULL, "Received %db data on socket %d (stream ignored)", datasize, conn->cc_socket);
+		TRACE_DEBUG(FULL, "Received %zdb data on socket %d (stream ignored)", datasize, conn->cc_socket);
 	}
 	
 	return 0;
--- a/libfdcore/sctps.c	Sat Apr 13 22:18:05 2013 +0200
+++ b/libfdcore/sctps.c	Mon Apr 15 15:17:07 2013 +0800
@@ -94,7 +94,7 @@
 					/* Note, here the timespec is piggytailed to buf */
 					CHECK_FCT_DO(fd_event_send(conn->cc_sctps_data.array[strid].raw_recv, event, bufsz, buf), goto fatal );
 				} else {
-					TRACE_DEBUG(INFO, "Received packet (%d bytes) on out-of-range stream #%d from %s, discarded.", bufsz, strid, conn->cc_remid);
+					TRACE_DEBUG(INFO, "Received packet (%zd bytes) on out-of-range stream #%d from %s, discarded.", bufsz, strid, conn->cc_remid);
 					free(buf);
 				}
 				break;
@@ -229,6 +229,9 @@
 }
 
 /* Set the parameters of a session to use the appropriate fifo and stream information */
+#ifndef GNUTLS_VERSION_300
+# pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+#endif /* !GNUTLS_VERSION_300 */
 static void set_sess_transport(gnutls_session_t session, struct sctps_ctx *ctx)
 {
 	/* Set the transport pointer passed to push & pull callbacks */
@@ -237,9 +240,7 @@
 	/* Reset the low water value, since we don't use sockets */
 #ifndef GNUTLS_VERSION_300
 	/* starting version 2.12, this call is not needed */
-	#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
 	GNUTLS_TRACE( gnutls_transport_set_lowat( session, 0 ) );
-	#pragma GCC diagnostic warning "-Wdeprecated-declarations"
 #endif /* GNUTLS_VERSION_300 */
 	
 	/* Set the push and pull callbacks */
@@ -248,6 +249,9 @@
 
 	return;
 }
+#ifndef GNUTLS_VERSION_300
+# pragma GCC diagnostic pop "-Wdeprecated-declarations"
+#endif /* !GNUTLS_VERSION_300 */
 
 /*************************************************************/
 /*               Session resuming support                    */
--- a/libfdproto/dictionary.c	Sat Apr 13 22:18:05 2013 +0200
+++ b/libfdproto/dictionary.c	Mon Apr 15 15:17:07 2013 +0800
@@ -34,6 +34,7 @@
 *********************************************************************************************************/
 
 #include "fdproto-internal.h"
+#include <inttypes.h>
 
 /* Names of the base types */
 const char * type_base_name[] = { /* must keep in sync with dict_avp_basetype */
@@ -1178,7 +1179,7 @@
 				if (enumval->enum_value.os.len < LEN_MAX)
 					n = enumval->enum_value.os.len;
 				for (i=0; i < n; i++)
-					fd_log_debug("0x%02.2X/'%c' ", enumval->enum_value.os.data[i], ASCII(enumval->enum_value.os.data[i]));
+					fd_log_debug("0x%02hhX/'%c' ", enumval->enum_value.os.data[i], ASCII(enumval->enum_value.os.data[i]));
 				if (n == LEN_MAX)
 					fd_log_debug("...");
 			}
@@ -1189,7 +1190,7 @@
 			break;
 
 		case AVP_TYPE_INTEGER64:
-			fd_log_debug("%lli", enumval->enum_value.i64);
+			fd_log_debug(PRId64, enumval->enum_value.i64);
 			break;
 
 		case AVP_TYPE_UNSIGNED32:
@@ -1197,7 +1198,7 @@
 			break;
 
 		case AVP_TYPE_UNSIGNED64:
-			fd_log_debug("%llu", enumval->enum_value.u64);
+			fd_log_debug(PRIu64, enumval->enum_value.u64);
 			break;
 
 		case AVP_TYPE_FLOAT32:
--- a/libfdproto/log.c	Sat Apr 13 22:18:05 2013 +0200
+++ b/libfdproto/log.c	Mon Apr 15 15:17:07 2013 +0800
@@ -165,7 +165,7 @@
 		if (val) {
 			fd_log_debug("(Thread '%s' renamed to '%s')", (char *)val, name?:"(nil)");
 		} else {
-			fd_log_debug("(Thread %p named '%s')", pthread_self(), name?:"(nil)");
+			fd_log_debug("(Thread %p named '%s')", (void *)pthread_self(), name?:"(nil)");
 		}
 	}
 	if (val != NULL) {
--- a/libfdproto/messages.c	Sat Apr 13 22:18:05 2013 +0200
+++ b/libfdproto/messages.c	Mon Apr 15 15:17:07 2013 +0800
@@ -1516,7 +1516,7 @@
 /* Write a message header in the buffer */
 static int bufferize_msg(unsigned char * buffer, size_t buflen, size_t * offset, struct msg * msg)
 {
-	TRACE_ENTRY("%p %d %p %p", buffer, buflen, offset, msg);
+	TRACE_ENTRY("%p %zd %p %p", buffer, buflen, offset, msg);
 	
 	if ((buflen - *offset) < GETMSGHDRSZ())
 		return ENOSPC;
@@ -1551,7 +1551,7 @@
 {
 	struct dict_avp_data dictdata;
 	
-	TRACE_ENTRY("%p %d %p %p", buffer, buflen, offset, avp);
+	TRACE_ENTRY("%p %zd %p %p", buffer, buflen, offset, avp);
 	
 	if ((buflen - *offset) < avp->avp_public.avp_len)
 		return ENOSPC;
@@ -1648,7 +1648,7 @@
 {
 	struct fd_list * avpch;
 	
-	TRACE_ENTRY("%p %d %p %p", buffer, buflen, offset, list);
+	TRACE_ENTRY("%p %zd %p %p", buffer, buflen, offset, list);
 	
 	for (avpch = list->next; avpch != list; avpch = avpch->next) {
 		/* Bufferize the AVP */
@@ -1711,13 +1711,13 @@
 {
 	size_t offset = 0;
 	
-	TRACE_ENTRY("%p %d %p", buf, buflen, head);
+	TRACE_ENTRY("%p %zd %p", buf, buflen, head);
 	
 	while (offset < buflen) {
 		struct avp * avp;
 		
 		if (buflen - offset < AVPHDRSZ_NOVEND) {
-			TRACE_DEBUG(INFO, "truncated buffer: remaining only %d bytes", buflen - offset);
+			TRACE_DEBUG(INFO, "truncated buffer: remaining only %zd bytes", buflen - offset);
 			return EBADMSG;
 		}
 		
@@ -1735,7 +1735,7 @@
 		
 		if (avp->avp_public.avp_flags & AVP_FLAG_VENDOR) {
 			if (buflen - offset < 4) {
-				TRACE_DEBUG(INFO, "truncated buffer: remaining only %d bytes for vendor and data", buflen - offset);
+				TRACE_DEBUG(INFO, "truncated buffer: remaining only %zd bytes for vendor and data", buflen - offset);
 				free(avp);
 				return EBADMSG;
 			}
@@ -1746,7 +1746,7 @@
 		/* Check there is enough remaining data in the buffer */
 		if ( (avp->avp_public.avp_len > GETAVPHDRSZ(avp->avp_public.avp_flags))
 		&& (buflen - offset < avp->avp_public.avp_len - GETAVPHDRSZ(avp->avp_public.avp_flags))) {
-			TRACE_DEBUG(INFO, "truncated buffer: remaining only %d bytes for data, and avp data size is %d", 
+			TRACE_DEBUG(INFO, "truncated buffer: remaining only %zd bytes for data, and avp data size is %d", 
 					buflen - offset, 
 					avp->avp_public.avp_len - GETAVPHDRSZ(avp->avp_public.avp_flags));
 			free(avp);
@@ -1774,7 +1774,7 @@
 	uint32_t msglen = 0;
 	unsigned char * buf;
 	
-	TRACE_ENTRY("%p %d %p", buffer, buflen, msg);
+	TRACE_ENTRY("%p %zd %p", buffer, buflen, msg);
 	
 	CHECK_PARAMS(  buffer &&  *buffer  &&  msg  &&  (buflen >= GETMSGHDRSZ())  );
 	buf = *buffer;
@@ -1788,7 +1788,7 @@
 	
 	msglen = ntohl(*(uint32_t *)buf) & 0x00ffffff;
 	if ( buflen < msglen ) {  
-		TRACE_DEBUG(INFO, "Truncated message (%d / %d)", buflen, msglen );
+		TRACE_DEBUG(INFO, "Truncated message (%zd / %d)", buflen, msglen );
 		free(buf);
 		return EBADMSG; 
 	}
--- a/libfdproto/ostr.c	Sat Apr 13 22:18:05 2013 +0200
+++ b/libfdproto/ostr.c	Mon Apr 15 15:17:07 2013 +0800
@@ -169,10 +169,10 @@
 			goto disp;
 		}
 		/* otherwise, we just display the hex code */
-		TRACE_DEBUG(INFO, "Invalid character (0x%hhX) at offset %d in DiameterIdentity '%.*s'", os[i], i+1, ossz, os);
+		TRACE_DEBUG(INFO, "Invalid character (0x%hhX) at offset %d in DiameterIdentity '%.*s'", os[i], i+1, (int)ossz, os);
 		return 0;
 disp:
-		TRACE_DEBUG(INFO, "Invalid character '%.*s' at offset %d in DiameterIdentity '%.*s'", nb, os + i, i+1, ossz, os);
+		TRACE_DEBUG(INFO, "Invalid character '%.*s' at offset %d in DiameterIdentity '%.*s'", nb, os + i, i+1, (int)ossz, os);
 		return 0;
 	}
 	
@@ -290,7 +290,7 @@
 	
 	/* Remaining of URI marker */
 	if (memcmp( uri + offset, "://", 3)) {
-		TRACE_DEBUG(INFO, "Invalid DiameterURI prefix: got '%.*s', expected 'aaa://' or 'aaas://'", offset + 3, uri);
+		TRACE_DEBUG(INFO, "Invalid DiameterURI prefix: got '%.*s', expected 'aaa://' or 'aaas://'", (int)offset + 3, uri);
 		return EINVAL;
 	}
 	offset += 3;
@@ -379,7 +379,7 @@
 			goto after_transport;
 		}
 		
-		TRACE_DEBUG(INFO, "Invalid DiameterURI: transport string is not recognized ('%.*s').", urisz - offset, uri + offset);
+		TRACE_DEBUG(INFO, "Invalid DiameterURI: transport string is not recognized ('%.*s').", (int)(urisz - offset), uri + offset);
 		return EINVAL;
 	}
 after_transport:
@@ -416,7 +416,7 @@
 			goto after_proto;
 		}
 		
-		TRACE_DEBUG(INFO, "Invalid DiameterURI: protocol string is not recognized ('%.*s').", urisz - offset, uri + offset);
+		TRACE_DEBUG(INFO, "Invalid DiameterURI: protocol string is not recognized ('%.*s').", (int)(urisz - offset), uri + offset);
 		return EINVAL;
 		
 	}
@@ -424,7 +424,7 @@
 	if (offset == urisz)
 		return 0; /* Finished */
 	
-	TRACE_DEBUG(INFO, "Invalid DiameterURI: final part of string is not recognized ('%.*s').", urisz - offset, uri + offset);
+	TRACE_DEBUG(INFO, "Invalid DiameterURI: final part of string is not recognized ('%.*s').", (int)(urisz - offset), uri + offset);
 	return EINVAL;
 }
 
--- a/libfdproto/sessions.c	Sat Apr 13 22:18:05 2013 +0200
+++ b/libfdproto/sessions.c	Mon Apr 15 15:17:07 2013 +0800
@@ -522,11 +522,11 @@
 {
 	int ret;
 	
-	TRACE_ENTRY("%p %d %p %p", sid, len, session, new);
+	TRACE_ENTRY("%p %zd %p %p", sid, len, session, new);
 	CHECK_PARAMS( sid && session );
 	
 	if (!fd_os_is_valid_os0(sid,len)) {
-		TRACE_DEBUG(INFO, "Warning: a Session-Id value contains \\0 chars... (len:%zd, begin:'%.*s') => Debug messages may be truncated.", len, len, sid);
+		TRACE_DEBUG(INFO, "Warning: a Session-Id value contains \\0 chars... (len:%zd, begin:'%.*s') => Debug messages may be truncated.", len, (int)len, sid);
 	}
 	
 	/* All the work is done in sess_new */
"Welcome to our mercurial repository"