Symbian fixes to compile on GCCE (nested callbacks etc)

git-svn-id: https://svn.pjsip.org/repos/pjproject/trunk@1269 74dad513-b988-da41-8d7b-12977e46ad98
diff --git a/build.symbian/bld.inf b/build.symbian/bld.inf
index 5ded5ae..9e51ee9 100644
--- a/build.symbian/bld.inf
+++ b/build.symbian/bld.inf
@@ -1,3 +1,8 @@
+prj_platforms
+winscw
+armv5
+gcce
+
 prj_mmpfiles
 pjlib.mmp
 pjlib_util.mmp
diff --git a/build.symbian/pjlib.mmp b/build.symbian/pjlib.mmp
index 8ec56ca..e574b47 100644
--- a/build.symbian/pjlib.mmp
+++ b/build.symbian/pjlib.mmp
@@ -6,6 +6,8 @@
 SOURCEPATH	..\pjlib\src\pj
 
 OPTION		CW -lang c++
+OPTION		ARMCC --cpp
+OPTION		GCC	-x c++
 
 MACRO		PJ_M_I386=1
 MACRO		PJ_SYMBIAN=1
@@ -56,37 +58,37 @@
 SOURCE		timer_symbian.cpp
 SOURCE		unicode_symbian.cpp
 
-DOCUMENT	os_symbian.h
+//DOCUMENT	os_symbian.h
 
-DOCUMENT	pj\addr_resolv.h
-DOCUMENT	pj\array.h
-DOCUMENT	pj\assert.h
-DOCUMENT	pj\config.h
-DOCUMENT	pj\config_site.h
+//DOCUMENT	pj\addr_resolv.h
+//DOCUMENT	pj\array.h
+//DOCUMENT	pj\assert.h
+//DOCUMENT	pj\config.h
+//DOCUMENT	pj\config_site.h
 //DOCUMENT	pj\config_site_sample.h
-DOCUMENT	pj\ctype.h
-DOCUMENT	pj\errno.h
-DOCUMENT	pj\except.h
-DOCUMENT	pj\file_access.h
-DOCUMENT	pj\file_io.h
-DOCUMENT	pj\guid.h
-DOCUMENT	pj\hash.h
-DOCUMENT	pj\ioqueue.h
-DOCUMENT	pj\ip_helper.h
-DOCUMENT	pj\list.h
-DOCUMENT	pj\lock.h
-DOCUMENT	pj\log.h
-DOCUMENT	pj\os.h
-DOCUMENT	pj\\pool.h
-DOCUMENT	pj\\pool_buf.h
-DOCUMENT	pj\rand.h
-DOCUMENT	pj\rbtree.h
-DOCUMENT	pj\sock.h
-DOCUMENT	pj\sock_select.h
-DOCUMENT	pj\string.h
-DOCUMENT	pj\timer.h
-DOCUMENT	pj\types.h
-DOCUMENT	pj\unicode.h
+//DOCUMENT	pj\ctype.h
+//DOCUMENT	pj\errno.h
+//DOCUMENT	pj\except.h
+//DOCUMENT	pj\file_access.h
+//DOCUMENT	pj\file_io.h
+//DOCUMENT	pj\guid.h
+//DOCUMENT	pj\hash.h
+//DOCUMENT	pj\ioqueue.h
+//DOCUMENT	pj\ip_helper.h
+//DOCUMENT	pj\list.h
+//DOCUMENT	pj\lock.h
+//DOCUMENT	pj\log.h
+//DOCUMENT	pj\os.h
+//DOCUMENT	pj\\pool.h
+//DOCUMENT	pj\\pool_buf.h
+//DOCUMENT	pj\rand.h
+//DOCUMENT	pj\rbtree.h
+//DOCUMENT	pj\sock.h
+//DOCUMENT	pj\sock_select.h
+//DOCUMENT	pj\string.h
+//DOCUMENT	pj\timer.h
+//DOCUMENT	pj\types.h
+//DOCUMENT	pj\unicode.h
 
 SYSTEMINCLUDE	..\pjlib\include
 
diff --git a/build.symbian/pjlib_test.mmp b/build.symbian/pjlib_test.mmp
index 9836a14..ed88906 100644
--- a/build.symbian/pjlib_test.mmp
+++ b/build.symbian/pjlib_test.mmp
@@ -9,6 +9,8 @@
 MACRO		PJ_SYMBIAN=1
 
 OPTION		CW -lang c++
+OPTION		ARMCC --cpp
+OPTION		GCC	-x c++
 
 // Test files
 
diff --git a/build.symbian/pjlib_util.mmp b/build.symbian/pjlib_util.mmp
index 30f59fa..fc161ca 100644
--- a/build.symbian/pjlib_util.mmp
+++ b/build.symbian/pjlib_util.mmp
@@ -9,6 +9,8 @@
 MACRO		PJ_SYMBIAN=1
 
 OPTION		CW -lang c++
+OPTION		ARMCC --cpp
+OPTION		GCC	-x c++
 
 //
 // PJLIB-UTIL files
diff --git a/build.symbian/pjmedia.mmp b/build.symbian/pjmedia.mmp
index 7af3187..4534a45 100644
--- a/build.symbian/pjmedia.mmp
+++ b/build.symbian/pjmedia.mmp
@@ -1,80 +1,80 @@
-TARGET 		pjmedia.lib

-TARGETTYPE 	lib

-UID		0x100039CE 0x10004299

-VENDORID	0x70000001

-

-SOURCEPATH	..\pjmedia\src\pjmedia

-

-//OPTION		CW -lang c++

-

-MACRO		PJ_M_I386=1

-MACRO		PJ_SYMBIAN=1

-

-//

-// Platform independent source

-//

-

-SOURCE		alaw_ulaw.c

-SOURCE		alaw_ulaw_table.c

-SOURCE		bidirectional.c

-SOURCE		clock_thread.c

-SOURCE		codec.c

-SOURCE		conference.c

-SOURCE		echo_common.c

-SOURCE		echo_port.c

-SOURCE		echo_suppress.c

-SOURCE		endpoint.c

-SOURCE		errno.c

-SOURCE		g711.c

-SOURCE		jbuf.c

-SOURCE		master_port.c

-SOURCE		mem_capture.c

-SOURCE		mem_player.c

-SOURCE		null_port.c

-SOURCE		plc_common.c

-SOURCE		port.c

-SOURCE		resample_port.c

-SOURCE		resample_resample.c

-SOURCE		rtcp.c

-SOURCE		rtp.c

-//SDP files are in pjsdp.mmp

-//SOURCE		sdp.c

-//SOURCE		sdp_cmp.c

-//SOURCE		sdp_neg.c

-SOURCE		session.c

-SOURCE		silencedet.c

-SOURCE		sound_port.c

-SOURCE		splitcomb.c

-SOURCE		stream.c

-SOURCE		tonegen.c

-SOURCE		transport_ice.c

-SOURCE		transport_udp.c

-SOURCE		wav_player.c

-SOURCE		wav_playlist.c

-SOURCE		wav_writer.c

-SOURCE		wave.c

-

-//

-// Symbian specific

-// These are on separate project

-//

-//SOURCE		symbian_sound.cpp

-//SOURCE		null_sound.c

-

-

-//

-// Header files

-//

-

-

-SYSTEMINCLUDE	..\pjmedia\include

-SYSTEMINCLUDE	..\pjlib\include 

-SYSTEMINCLUDE	..\pjlib-util\include 

-SYSTEMINCLUDE	..\pjnath\include 

-

-SYSTEMINCLUDE	\epoc32\include

-SYSTEMINCLUDE	\epoc32\include\libc

-SYSTEMINCLUDE	\epoc32\include\mmf\plugin

-

-CAPABILITY	None

-

+TARGET 		pjmedia.lib
+TARGETTYPE 	lib
+UID		0x100039CE 0x10004299
+VENDORID	0x70000001
+
+SOURCEPATH	..\pjmedia\src\pjmedia
+
+//OPTION		CW -lang c++
+
+MACRO		PJ_M_I386=1
+MACRO		PJ_SYMBIAN=1
+
+//
+// Platform independent source
+//
+
+SOURCE		alaw_ulaw.c
+SOURCE		alaw_ulaw_table.c
+SOURCE		bidirectional.c
+SOURCE		clock_thread.c
+SOURCE		codec.c
+SOURCE		conference.c
+SOURCE		echo_common.c
+SOURCE		echo_port.c
+SOURCE		echo_suppress.c
+SOURCE		endpoint.c
+SOURCE		errno.c
+SOURCE		g711.c
+SOURCE		jbuf.c
+SOURCE		master_port.c
+SOURCE		mem_capture.c
+SOURCE		mem_player.c
+SOURCE		null_port.c
+SOURCE		plc_common.c
+SOURCE		port.c
+SOURCE		resample_port.c
+SOURCE		resample_resample.c
+SOURCE		rtcp.c
+SOURCE		rtp.c
+//SDP files are in pjsdp.mmp
+//SOURCE		sdp.c
+//SOURCE		sdp_cmp.c
+//SOURCE		sdp_neg.c
+SOURCE		session.c
+SOURCE		silencedet.c
+SOURCE		sound_port.c
+SOURCE		splitcomb.c
+SOURCE		stream.c
+SOURCE		tonegen.c
+SOURCE		transport_ice.c
+SOURCE		transport_udp.c
+SOURCE		wav_player.c
+SOURCE		wav_playlist.c
+SOURCE		wav_writer.c
+SOURCE		wave.c
+
+//
+// Symbian specific
+// These are on separate project
+//
+//SOURCE		symbian_sound.cpp
+//SOURCE		null_sound.c
+
+
+//
+// Header files
+//
+
+
+SYSTEMINCLUDE	..\pjmedia\include
+SYSTEMINCLUDE	..\pjlib\include 
+SYSTEMINCLUDE	..\pjlib-util\include 
+SYSTEMINCLUDE	..\pjnath\include 
+
+SYSTEMINCLUDE	\epoc32\include
+SYSTEMINCLUDE	\epoc32\include\libc
+//SYSTEMINCLUDE	\epoc32\include\mmf\plugin
+
+CAPABILITY	None
+
diff --git a/build.symbian/pjnath.mmp b/build.symbian/pjnath.mmp
index 8e648dd..2bd8691 100644
--- a/build.symbian/pjnath.mmp
+++ b/build.symbian/pjnath.mmp
@@ -8,7 +8,9 @@
 MACRO		PJ_M_I386=1
 MACRO		PJ_SYMBIAN=1
 
-//OPTION		CW -lang c++
+OPTION		CW -lang c++
+OPTION		ARMCC --cpp
+OPTION		GCC	-x c++
 
 //
 // PJNATH files
@@ -45,7 +47,7 @@
 SYSTEMINCLUDE	\epoc32\include
 SYSTEMINCLUDE	\epoc32\include\libc
 
-LIBRARY		pjlib.lib 
-LIBRARY		pjlib_util.lib 
+//STATICLIBRARY		pjlib.lib 
+//STATICLIBRARY		pjlib_util.lib 
 CAPABILITY	None
 
diff --git a/build.symbian/pjsdp.mmp b/build.symbian/pjsdp.mmp
index 97f461b..3ff46f1 100644
--- a/build.symbian/pjsdp.mmp
+++ b/build.symbian/pjsdp.mmp
@@ -6,6 +6,8 @@
 SOURCEPATH	..\pjmedia\src\pjmedia
 
 OPTION		CW -lang c++
+OPTION		ARMCC --cpp
+OPTION		GCC	-x c++
 
 MACRO		PJ_M_I386=1
 MACRO		PJ_SYMBIAN=1
diff --git a/build.symbian/pjsip.mmp b/build.symbian/pjsip.mmp
index d1dd741..cabb74b 100644
--- a/build.symbian/pjsip.mmp
+++ b/build.symbian/pjsip.mmp
@@ -9,6 +9,8 @@
 MACRO		PJ_SYMBIAN=1
 
 OPTION		CW -lang c++
+OPTION		ARMCC --cpp
+OPTION		GCC	-x c++
 
 // PJSIP-CORE files
 
diff --git a/build.symbian/pjsip_simple.mmp b/build.symbian/pjsip_simple.mmp
index 0ff7f16..f77c5b4 100644
--- a/build.symbian/pjsip_simple.mmp
+++ b/build.symbian/pjsip_simple.mmp
@@ -9,6 +9,8 @@
 MACRO		PJ_SYMBIAN=1
 
 OPTION		CW -lang c++
+OPTION		ARMCC --cpp
+OPTION		GCC	-x c++
 
 
 // PJSIP-SIMPLE files
diff --git a/build.symbian/pjsip_ua.mmp b/build.symbian/pjsip_ua.mmp
index cef5373..08ab245 100644
--- a/build.symbian/pjsip_ua.mmp
+++ b/build.symbian/pjsip_ua.mmp
@@ -11,7 +11,7 @@
 //OPTION		CW -lang c++
 
 
-// PJSIP-SIMPLE files
+// PJSIP-UA files
 
 SOURCE	sip_inv.c
 SOURCE	sip_reg.c
diff --git a/build.symbian/pjstun_client.mmp b/build.symbian/pjstun_client.mmp
index 98194e8..2c9d352 100644
--- a/build.symbian/pjstun_client.mmp
+++ b/build.symbian/pjstun_client.mmp
@@ -9,6 +9,8 @@
 MACRO		PJ_SYMBIAN=1
 
 OPTION		CW -lang c++
+OPTION		ARMCC --cpp
+OPTION		GCC	-x c++
 
 // PJSTUN-CLIENT files
 
diff --git a/pjlib/include/pj/compat/cc_armcc.h b/pjlib/include/pj/compat/cc_armcc.h
index 504ca88..52fe74c 100644
--- a/pjlib/include/pj/compat/cc_armcc.h
+++ b/pjlib/include/pj/compat/cc_armcc.h
@@ -33,8 +33,12 @@
 #define PJ_CC_VER_2		__ARMCC_MINOR__
 #define PJ_CC_VER_3		__ARMCC_PATCHLEVEL__
 
+#ifdef __cplusplus
+#  define PJ_INLINE_SPECIFIER	inline
+#else
+#  define PJ_INLINE_SPECIFIER	static __inline
+#endif
 
-#define PJ_INLINE_SPECIFIER	static // why is not inline accepted?
 #define PJ_THREAD_FUNC	
 #define PJ_NORETURN		
 #define PJ_ATTR_NORETURN	__attribute__ ((noreturn))
diff --git a/pjlib/include/pj/compat/os_symbian.h b/pjlib/include/pj/compat/os_symbian.h
index b1b1cd1..f6787b0 100644
--- a/pjlib/include/pj/compat/os_symbian.h
+++ b/pjlib/include/pj/compat/os_symbian.h
@@ -144,7 +144,9 @@
 #define PJ_HAS_SOCKLEN_T		1
 typedef unsigned int socklen_t;
 
+#ifndef __GCCE__
 #include <e32def.h>
+#endif
 
 /*
 #if defined(PJ_EXPORTING)
diff --git a/pjlib/include/pj/errno.h b/pjlib/include/pj/errno.h
index cd5d916..df6c1b0 100644
--- a/pjlib/include/pj/errno.h
+++ b/pjlib/include/pj/errno.h
@@ -111,6 +111,7 @@
 PJ_DECL(pj_str_t) pj_strerror( pj_status_t statcode, 
 			       char *buf, pj_size_t bufsize);
 
+typedef pj_str_t (*pjsip_error_callback)(pj_status_t, char*, pj_size_t);
 /**
  * Register strerror message handler for the specified error space.
  * Application can register its own handler to supply the error message
@@ -132,8 +133,7 @@
  */
 PJ_DECL(pj_status_t) pj_register_strerror(pj_status_t start_code,
 					  pj_status_t err_space,
-					  pj_str_t (*f)(pj_status_t,char*,
-							pj_size_t));
+					  pjsip_error_callback f);
 
 /**
  * @hideinitializer
diff --git a/pjlib/include/pj/except.h b/pjlib/include/pj/except.h
index 610f462..509b01b 100644
--- a/pjlib/include/pj/except.h
+++ b/pjlib/include/pj/except.h
@@ -26,6 +26,7 @@
 
 #include <pj/types.h>
 #include <pj/compat/setjmp.h>
+#include <pj/log.h>
 
 
 PJ_BEGIN_DECL
@@ -265,6 +266,15 @@
 				while (0)
 #define PJ_GET_EXCEPTION()	pj_excp_.code_
 
+#else
+
+#define PJ_USE_EXCEPTION
+#define PJ_TRY				
+#define PJ_CATCH_ANY		if (0)
+#define PJ_END
+#define PJ_THROW(x_id)		do { PJ_LOG(1,("PJ_THROW"," error code = %d",x_id)); } while (0)
+#define PJ_GET_EXCEPTION()	0
+
 #endif	/* __cplusplus */
 
 #else
diff --git a/pjlib/include/pj/types.h b/pjlib/include/pj/types.h
index 7b7598b..e909552 100644
--- a/pjlib/include/pj/types.h
+++ b/pjlib/include/pj/types.h
@@ -302,6 +302,7 @@
  */
 PJ_DECL(void) pj_shutdown(void);
 
+typedef void (*pj_exit_callback)(void);
 /**
  * Register cleanup function to be called by PJLIB when pj_shutdown() is 
  * called.
@@ -310,7 +311,7 @@
  *
  * @return PJ_SUCCESS on success.
  */
-PJ_DECL(pj_status_t) pj_atexit(void (*func)(void));
+PJ_DECL(pj_status_t) pj_atexit(pj_exit_callback func);
 
 
 
diff --git a/pjlib/src/pj/addr_resolv_symbian.cpp b/pjlib/src/pj/addr_resolv_symbian.cpp
index c9a776c..95da5cd 100644
--- a/pjlib/src/pj/addr_resolv_symbian.cpp
+++ b/pjlib/src/pj/addr_resolv_symbian.cpp
@@ -35,7 +35,7 @@
     // Convert name to Unicode
     wchar_t name16[PJ_MAX_HOSTNAME];
     pj_ansi_to_unicode(name->ptr, name->slen, name16, PJ_ARRAY_SIZE(name16));
-    TPtrC16 data(name16);
+    TPtrC16 data((const TUint16*)name16);
 
     // Resolve!
     TNameEntry nameEntry;
@@ -65,7 +65,7 @@
     static pj_sockaddr_in resolved_addr;
 
     // Convert the official address to ANSI.
-    pj_unicode_to_ansi(nameEntry().iName.Ptr(), nameEntry().iName.Length(),
+    pj_unicode_to_ansi((const wchar_t*)nameEntry().iName.Ptr(), nameEntry().iName.Length(),
 		       resolved_name, sizeof(resolved_name));
 
     // Convert IP address
diff --git a/pjlib/src/pj/errno.c b/pjlib/src/pj/errno.c
index f82c22d..f7273a4 100644
--- a/pjlib/src/pj/errno.c
+++ b/pjlib/src/pj/errno.c
@@ -103,8 +103,7 @@
 /* Register strerror handle. */
 PJ_DECL(pj_status_t) pj_register_strerror(pj_status_t start,
 					  pj_status_t space,
-					  pj_str_t (*f)(pj_status_t,char*,
-							pj_size_t))
+					  pjsip_error_callback f)
 {
     unsigned i;
 
diff --git a/pjlib/src/pj/exception_symbian.cpp b/pjlib/src/pj/exception_symbian.cpp
index 1d47533..6f2e080 100644
--- a/pjlib/src/pj/exception_symbian.cpp
+++ b/pjlib/src/pj/exception_symbian.cpp
@@ -22,7 +22,6 @@
 #include <pj/log.h>
 #include <pj/errno.h>
 
-static long thread_local_id = -1;
 
 #if defined(PJ_HAS_EXCEPTION_NAMES) && PJ_HAS_EXCEPTION_NAMES != 0
     static const char *exception_id_names[PJ_MAX_EXCEPTION_ID];
diff --git a/pjlib/src/pj/os_core_symbian.cpp b/pjlib/src/pj/os_core_symbian.cpp
index 742fe5a..a3ec3c0 100644
--- a/pjlib/src/pj/os_core_symbian.cpp
+++ b/pjlib/src/pj/os_core_symbian.cpp
@@ -301,7 +301,7 @@
 }
 
 
-PJ_DEF(pj_status_t) pj_atexit(void (*func)(void))
+PJ_DEF(pj_status_t) pj_atexit(pj_exit_callback func)
 {
     if (atexit_count >= PJ_ARRAY_SIZE(atexit_func))
 	return PJ_ETOOMANY;
@@ -459,7 +459,7 @@
  */
 PJ_DEF(void) pj_thread_local_free(long index)
 {
-    PJ_ASSERT_ON_FAIL(index >= 0 && index < PJ_ARRAY_SIZE(tls_vars) &&
+    PJ_ASSERT_ON_FAIL(index >= 0 && index < (int)PJ_ARRAY_SIZE(tls_vars) &&
 		     tls_vars[index] != 0, return);
 
     tls_vars[index] = 0;
@@ -473,7 +473,7 @@
 {
     pj_thread_t *rec = pj_thread_this();
 
-    PJ_ASSERT_RETURN(index >= 0 && index < PJ_ARRAY_SIZE(tls_vars) &&
+    PJ_ASSERT_RETURN(index >= 0 && index < (int)PJ_ARRAY_SIZE(tls_vars) &&
 		     tls_vars[index] != 0, PJ_EINVAL);
 
     rec->tls_values[index] = value;
@@ -487,7 +487,7 @@
 {
     pj_thread_t *rec = pj_thread_this();
 
-    PJ_ASSERT_RETURN(index >= 0 && index < PJ_ARRAY_SIZE(tls_vars) &&
+    PJ_ASSERT_RETURN(index >= 0 && index < (int)PJ_ARRAY_SIZE(tls_vars) &&
 		     tls_vars[index] != 0, NULL);
 
     return rec->tls_values[index];
diff --git a/pjlib/src/pj/sock_symbian.cpp b/pjlib/src/pj/sock_symbian.cpp
index ae691ba..3896091 100644
--- a/pjlib/src/pj/sock_symbian.cpp
+++ b/pjlib/src/pj/sock_symbian.cpp
@@ -271,7 +271,7 @@
     TInetAddr temp_addr((TUint32)pj_ntohl(inaddr.s_addr), (TUint)0);
     temp_addr.Output(str16);
  
-    return pj_unicode_to_ansi(str16.PtrZ(), str16.Length(),
+    return pj_unicode_to_ansi((const wchar_t*)str16.PtrZ(), str16.Length(),
 			      str8, sizeof(str8));
 }
 
@@ -307,7 +307,7 @@
     pj_ansi_to_unicode(tempaddr8, pj_ansi_strlen(tempaddr8),
 		       tempaddr16, sizeof(tempaddr16));
 
-    TBuf<MAXIPLEN> ip_addr(tempaddr16);
+    TBuf<MAXIPLEN> ip_addr((const TText*)tempaddr16);
 
     TInetAddr addr;
     addr.Init(KAfInet);
@@ -418,7 +418,7 @@
 	resv.GetHostName(tmpName, reqStatus);
 	User::WaitForRequest(reqStatus);
 
-	hostname.ptr = pj_unicode_to_ansi(tmpName.Ptr(), tmpName.Length(),
+	hostname.ptr = pj_unicode_to_ansi((const wchar_t*)tmpName.Ptr(), tmpName.Length(),
 					  buf, sizeof(buf));
 	hostname.slen = tmpName.Length();
     }
@@ -551,7 +551,7 @@
     PJ_CHECK_STACK();
     
     PJ_ASSERT_RETURN(sock && addr && namelen && 
-		     *namelen>=sizeof(pj_sockaddr_in), PJ_EINVAL);
+		     *namelen>=(int)sizeof(pj_sockaddr_in), PJ_EINVAL);
 
     CPjSocket *pjSock = (CPjSocket*)sock;
     RSocket &rSock = pjSock->Socket();
@@ -578,7 +578,7 @@
     PJ_CHECK_STACK();
     
     PJ_ASSERT_RETURN(sock && addr && namelen && 
-		     *namelen>=sizeof(pj_sockaddr_in), PJ_EINVAL);
+		     *namelen>=(int)sizeof(pj_sockaddr_in), PJ_EINVAL);
 
     CPjSocket *pjSock = (CPjSocket*)sock;
     RSocket &rSock = pjSock->Socket();
@@ -728,7 +728,7 @@
 
     PJ_ASSERT_RETURN(sock && buf && len && from && fromlen, PJ_EINVAL);
     PJ_ASSERT_RETURN(*len > 0, PJ_EINVAL);
-    PJ_ASSERT_RETURN(*fromlen >= sizeof(pj_sockaddr_in), PJ_EINVAL);
+    PJ_ASSERT_RETURN(*fromlen >= (int)sizeof(pj_sockaddr_in), PJ_EINVAL);
 
     CPjSocket *pjSock = (CPjSocket*)sock;
     RSocket &rSock = pjSock->Socket();
diff --git a/pjlib/src/pjlib-test/main_symbian.cpp b/pjlib/src/pjlib-test/main_symbian.cpp
index c2c808b..e57b080 100644
--- a/pjlib/src/pjlib-test/main_symbian.cpp
+++ b/pjlib/src/pjlib-test/main_symbian.cpp
@@ -51,7 +51,7 @@
     //
     // add your program code here, example code below
     //
-    int rc = test_main();
+    test_main();
 
     console->Printf(_L(" [press any key]\n"));
     console->Getch();
diff --git a/pjmedia/src/pjmedia/bidirectional.c b/pjmedia/src/pjmedia/bidirectional.c
index 441e895..a504c73 100644
--- a/pjmedia/src/pjmedia/bidirectional.c
+++ b/pjmedia/src/pjmedia/bidirectional.c
@@ -54,7 +54,7 @@
 {
     struct bidir_port *port;
 
-    port = pj_pool_zalloc(pool, sizeof(struct bidir_port));
+    port = PJ_POOL_ZALLOC_T(pool, struct bidir_port);
 
     pjmedia_port_info_init(&port->base.info, &get_port->info.name, SIGNATURE,
 			   get_port->info.clock_rate,
diff --git a/pjmedia/src/pjmedia/echo_common.c b/pjmedia/src/pjmedia/echo_common.c
index 5f392ef..079333b 100644
--- a/pjmedia/src/pjmedia/echo_common.c
+++ b/pjmedia/src/pjmedia/echo_common.c
@@ -17,6 +17,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
  */
 
+#include <pjmedia/config.h>
 #include <pjmedia/echo.h>
 #include <pj/assert.h>
 #include <pj/pool.h>
diff --git a/pjmedia/src/pjmedia/nullsound.c b/pjmedia/src/pjmedia/nullsound.c
index 2b82bd1..f0c065e 100644
--- a/pjmedia/src/pjmedia/nullsound.c
+++ b/pjmedia/src/pjmedia/nullsound.c
@@ -67,7 +67,7 @@
 
 PJ_DEF(const pjmedia_snd_dev_info*) pjmedia_snd_get_dev_info(unsigned index)
 {
-    PJ_ASSERT_RETURN(index==0 || index==-1, NULL);
+    PJ_ASSERT_RETURN(index==0 || index==(unsigned)-1, NULL);
     return &null_info;
 }
 
diff --git a/pjsip-apps/src/samples/sndinfo.c b/pjsip-apps/src/samples/sndinfo.c
index d7815c2..7852145 100644
--- a/pjsip-apps/src/samples/sndinfo.c
+++ b/pjsip-apps/src/samples/sndinfo.c
@@ -256,7 +256,6 @@
     
     if (argc == 1) {
 	enum_devices();
-	return 0;
     } else if (argc == 6) {
 	
 	int dev_id;
diff --git a/pjsip/include/pjsip/sip_transport.h b/pjsip/include/pjsip/sip_transport.h
index 5137ef7..aadd51e 100644
--- a/pjsip/include/pjsip/sip_transport.h
+++ b/pjsip/include/pjsip/sip_transport.h
@@ -605,7 +605,8 @@
  * TRANSPORT
  *
  *****************************************************************************/
-
+typedef void (*pjsip_transport_callback)(pjsip_transport *tp, void *token,
+                                         pj_ssize_t sent_bytes);
 /**
  * This structure represent the "public" interface of a SIP transport.
  * Applications normally extend this structure to include transport
@@ -671,9 +672,7 @@
 			    const pj_sockaddr_t *rem_addr,
 			    int addr_len,
 			    void *token,
-			    void (*callback)(pjsip_transport *transport,
-					     void *token, 
-					     pj_ssize_t sent_bytes));
+			    pjsip_transport_callback callback);
 
     /**
      * Instruct the transport to initiate graceful shutdown procedure.
@@ -884,7 +883,8 @@
  * TRANSPORT MANAGER
  *
  *****************************************************************************/
-
+typedef void (*pjsip_rx_callback)(pjsip_endpoint*, pj_status_t, pjsip_rx_data *);
+typedef pj_status_t (*pjsip_tx_callback)(pjsip_endpoint*, pjsip_tx_data*);
 /**
  * Create a new transport manager.
  *
@@ -899,11 +899,8 @@
  */
 PJ_DECL(pj_status_t) pjsip_tpmgr_create( pj_pool_t *pool,
 					 pjsip_endpoint * endpt,
-					 void (*rx_cb)(pjsip_endpoint*,
-						       pj_status_t,
-						       pjsip_rx_data *),
-					 pj_status_t (*tx_cb)(pjsip_endpoint*,
-							      pjsip_tx_data*),
+					 pjsip_rx_callback rx_cb,
+					 pjsip_tx_callback tx_cb,
 					 pjsip_tpmgr **p_mgr);
 
 
@@ -987,7 +984,8 @@
 						   const pjsip_tpselector *sel,
 						   pjsip_transport **tp);
 
-
+typedef void (*pjsip_tp_send_callback)(void *token, pjsip_tx_data *tdata,
+									   pj_ssize_t bytes_sent);
 /**
  * Send a SIP message using the specified transport.
  */
@@ -996,9 +994,7 @@
 					   const pj_sockaddr_t *addr,
 					   int addr_len,
 					   void *token,
-					   void (*cb)(void *token, 
-						      pjsip_tx_data *tdata,
-						      pj_ssize_t bytes_sent));
+					   pjsip_tp_send_callback cb);
 
 
 /**
diff --git a/pjsip/include/pjsip/sip_util.h b/pjsip/include/pjsip/sip_util.h
index 62fb847..18c1ce7 100644
--- a/pjsip/include/pjsip/sip_util.h
+++ b/pjsip/include/pjsip/sip_util.h
@@ -258,6 +258,8 @@
 		   pj_bool_t *cont);
 } pjsip_send_state;
 
+typedef void (*pjsip_endpt_callback)(pjsip_send_state*, pj_ssize_t sent,
+									 pj_bool_t *cont);
 /**
  * Send outgoing request statelessly The function will take care of which 
  * destination and transport to use based on the information in the message,
@@ -279,9 +281,7 @@
 pjsip_endpt_send_request_stateless( pjsip_endpoint *endpt,
 				    pjsip_tx_data *tdata,
 				    void *token,
-				    void (*cb)(pjsip_send_state*,
-					       pj_ssize_t sent,
-					       pj_bool_t *cont));
+				    pjsip_endpt_callback cb);
 
 /**
  * This structure describes destination information to send response.
@@ -357,9 +357,7 @@
 					        pjsip_response_addr *res_addr,
 					        pjsip_tx_data *tdata,
 						void *token,
-						void (*cb)(pjsip_send_state*,
-							   pj_ssize_t sent,
-							   pj_bool_t *cont));
+						pjsip_endpt_callback cb);
 
 /**
  * This is a convenient function which wraps #pjsip_get_response_addr() and
@@ -382,9 +380,7 @@
 					        pjsip_rx_data *rdata,
 					        pjsip_tx_data *tdata,
 						void *token,
-						void (*cb)(pjsip_send_state*,
-							   pj_ssize_t sent,
-							   pj_bool_t *cont));
+						pjsip_endpt_callback cb);
 
 /**
  * This composite function sends response message statelessly to an incoming
@@ -445,6 +441,7 @@
 					  const pjsip_msg_body *body,
 					  pjsip_transaction **p_tsx );
 
+typedef void (*pjsip_endpt_send_callback)(void*, pjsip_event*);
 /**
  * Send outgoing request and initiate UAC transaction for the request.
  * This is an auxiliary function to be used by application to send arbitrary
@@ -469,7 +466,7 @@
 					       pjsip_tx_data *tdata,
 					       pj_int32_t timeout,
 					       void *token,
-					       void (*cb)(void*,pjsip_event*));
+					       pjsip_endpt_send_callback cb);
 
 /**
  * @}
diff --git a/pjsip/src/pjsip/sip_parser.c b/pjsip/src/pjsip/sip_parser.c
index 644532e..32a511c 100644
--- a/pjsip/src/pjsip/sip_parser.c
+++ b/pjsip/src/pjsip/sip_parser.c
@@ -908,6 +908,7 @@
 
     parsing_headers = PJ_FALSE;
 
+retry_parse:
     PJ_TRY 
     {
 	if (parsing_headers)
@@ -1054,7 +1055,7 @@
 
 	    /* Continue parse next header, if any. */
 	    if (!pj_scan_is_eof(scanner) && !IS_NEWLINE(*scanner->curptr)) {
-		goto parse_headers;
+		goto retry_parse;
 	    }
 	}
 
diff --git a/pjsip/src/pjsip/sip_transport.c b/pjsip/src/pjsip/sip_transport.c
index 91ac434..49afe46 100644
--- a/pjsip/src/pjsip/sip_transport.c
+++ b/pjsip/src/pjsip/sip_transport.c
@@ -548,9 +548,7 @@
 					   const pj_sockaddr_t *addr,
 					   int addr_len,
 					   void *token,
-					   void (*cb)(void *token, 
-						      pjsip_tx_data *tdata,
-						      pj_ssize_t))
+					   pjsip_tp_send_callback cb)
 {
     pj_status_t status;
 
@@ -883,11 +881,8 @@
  */
 PJ_DEF(pj_status_t) pjsip_tpmgr_create( pj_pool_t *pool,
 					pjsip_endpoint *endpt,
-					void (*rx_cb)(pjsip_endpoint*,
-						      pj_status_t,
-						      pjsip_rx_data *),
-					pj_status_t (*tx_cb)(pjsip_endpoint*,
-							     pjsip_tx_data*),
+					pjsip_rx_callback rx_cb,
+					pjsip_tx_callback tx_cb,
 					pjsip_tpmgr **p_mgr)
 {
     pjsip_tpmgr *mgr;
diff --git a/pjsip/src/pjsip/sip_transport_loop.c b/pjsip/src/pjsip/sip_transport_loop.c
index 2512197..d49fb3b 100644
--- a/pjsip/src/pjsip/sip_transport_loop.c
+++ b/pjsip/src/pjsip/sip_transport_loop.c
@@ -145,9 +145,7 @@
 				  const pj_sockaddr_t *rem_addr,
 				  int addr_len,
 				  void *token,
-				  void (*cb)(pjsip_transport *transport,
-					     void *token, 
-					     pj_ssize_t sent_bytes))
+				  pjsip_transport_callback cb)
 {
     struct loop_transport *loop = (struct loop_transport*)tp;
     struct recv_list *recv_pkt;
diff --git a/pjsip/src/pjsip/sip_transport_tcp.c b/pjsip/src/pjsip/sip_transport_tcp.c
index 70008a7..40ec04b 100644
--- a/pjsip/src/pjsip/sip_transport_tcp.c
+++ b/pjsip/src/pjsip/sip_transport_tcp.c
@@ -449,9 +449,7 @@
 				const pj_sockaddr_t *rem_addr,
 				int addr_len,
 				void *token,
-				void (*callback)(pjsip_transport *transport,
-						 void *token, 
-						 pj_ssize_t sent_bytes));
+				pjsip_transport_callback callback);
 
 /* Called by transport manager to shutdown */
 static pj_status_t tcp_shutdown(pjsip_transport *transport);
@@ -1038,9 +1036,7 @@
 				const pj_sockaddr_t *rem_addr,
 				int addr_len,
 				void *token,
-				void (*callback)(pjsip_transport *transport,
-						 void *token, 
-						 pj_ssize_t sent_bytes))
+				pjsip_transport_callback callback)
 {
     struct tcp_transport *tcp = (struct tcp_transport*)transport;
     pj_ssize_t size;
@@ -1252,7 +1248,7 @@
 
 	/* Read next packet. */
 	bytes_read = sizeof(rdata->pkt_info.packet) - rdata->pkt_info.len;
-	rdata->pkt_info.src_addr_len = sizeof(rdata->pkt_info.src_addr);
+	rdata->pkt_info.src_addr_len = sizeof(pj_sockaddr_in);
 	status = pj_ioqueue_recv(key, op_key, 
 				 rdata->pkt_info.packet+rdata->pkt_info.len,
 				 &bytes_read, flags);
diff --git a/pjsip/src/pjsip/sip_transport_udp.c b/pjsip/src/pjsip/sip_transport_udp.c
index 02b86fb..48da26f 100644
--- a/pjsip/src/pjsip/sip_transport_udp.c
+++ b/pjsip/src/pjsip/sip_transport_udp.c
@@ -286,9 +286,7 @@
 				 const pj_sockaddr_t *rem_addr,
 				 int addr_len,
 				 void *token,
-				 void (*callback)(pjsip_transport*,
-						  void *token,
-						  pj_ssize_t))
+				 pjsip_transport_callback callback)
 {
     struct udp_transport *tp = (struct udp_transport*)transport;
     pj_ssize_t size;
diff --git a/pjsip/src/pjsip/sip_util.c b/pjsip/src/pjsip/sip_util.c
index f0292be..a611fe9 100644
--- a/pjsip/src/pjsip/sip_util.c
+++ b/pjsip/src/pjsip/sip_util.c
@@ -1005,9 +1005,7 @@
 pjsip_endpt_send_request_stateless(pjsip_endpoint *endpt, 
 				   pjsip_tx_data *tdata,
 				   void *token,
-				   void (*cb)(pjsip_send_state*,
-					      pj_ssize_t sent,
-					      pj_bool_t *cont))
+				   pjsip_endpt_callback cb)
 {
     pjsip_host_info dest_info;
     pjsip_send_state *stateless_data;
@@ -1226,9 +1224,7 @@
 					       pjsip_response_addr *res_addr,
 					       pjsip_tx_data *tdata,
 					       void *token,
-					       void (*cb)(pjsip_send_state*,
-							  pj_ssize_t sent,
-							  pj_bool_t *cont))
+					       pjsip_endpt_callback cb)
 {
     /* Determine which transports and addresses to send the response,
      * based on Section 18.2.2 of RFC 3261.
@@ -1277,9 +1273,7 @@
 					        pjsip_rx_data *rdata,
 					        pjsip_tx_data *tdata,
 						void *token,
-						void (*cb)(pjsip_send_state*,
-							   pj_ssize_t sent,
-							   pj_bool_t *cont))
+						pjsip_endpt_callback cb)
 {
     pjsip_response_addr res_addr;
     pj_status_t status;
diff --git a/pjsip/src/pjsip/sip_util_statefull.c b/pjsip/src/pjsip/sip_util_statefull.c
index 129a13c..94ab447 100644
--- a/pjsip/src/pjsip/sip_util_statefull.c
+++ b/pjsip/src/pjsip/sip_util_statefull.c
@@ -83,7 +83,7 @@
 					       pjsip_tx_data *tdata,
 					       pj_int32_t timeout,
 					       void *token,
-					       void (*cb)(void*,pjsip_event*))
+					       pjsip_endpt_send_callback cb)
 {
     pjsip_transaction *tsx;
     struct tsx_data *tsx_data;