diff options
-rw-r--r-- | build.symbian/pjlibU.def | 69 | ||||
-rw-r--r-- | build.symbian/pjproject.cww | 63 | ||||
-rw-r--r-- | pjlib/include/pj/os.h | 42 | ||||
-rw-r--r-- | pjlib/src/pj/os_core_symbian.cpp | 34 | ||||
-rw-r--r-- | pjlib/src/pj/os_symbian.h | 21 | ||||
-rw-r--r-- | pjlib/src/pj/sock_symbian.cpp | 9 |
6 files changed, 191 insertions, 47 deletions
diff --git a/build.symbian/pjlibU.def b/build.symbian/pjlibU.def index 40d0a32f..30365a48 100644 --- a/build.symbian/pjlibU.def +++ b/build.symbian/pjlibU.def @@ -260,37 +260,38 @@ EXPORTS pj_strtoul2 @ 259 NONAME pj_strtrim @ 260 NONAME pj_symbianos_poll @ 261 NONAME - pj_thread_create @ 262 NONAME - pj_thread_destroy @ 263 NONAME - pj_thread_get_name @ 264 NONAME - pj_thread_join @ 265 NONAME - pj_thread_local_alloc @ 266 NONAME - pj_thread_local_free @ 267 NONAME - pj_thread_local_get @ 268 NONAME - pj_thread_local_set @ 269 NONAME - pj_thread_register @ 270 NONAME - pj_thread_resume @ 271 NONAME - pj_thread_sleep @ 272 NONAME - pj_thread_this @ 273 NONAME - pj_time_decode @ 274 NONAME - pj_time_encode @ 275 NONAME - pj_time_gmt_to_local @ 276 NONAME - pj_time_local_to_gmt @ 277 NONAME - pj_time_val_normalize @ 278 NONAME - pj_timer_entry_init @ 279 NONAME - pj_timer_heap_cancel @ 280 NONAME - pj_timer_heap_count @ 281 NONAME - pj_timer_heap_create @ 282 NONAME - pj_timer_heap_destroy @ 283 NONAME - pj_timer_heap_earliest_time @ 284 NONAME - pj_timer_heap_mem_size @ 285 NONAME - pj_timer_heap_poll @ 286 NONAME - pj_timer_heap_schedule @ 287 NONAME - pj_timer_heap_set_lock @ 288 NONAME - pj_timer_heap_set_max_timed_out_per_poll @ 289 NONAME - pj_unicode_to_ansi @ 290 NONAME - pj_utoa @ 291 NONAME - pj_utoa_pad @ 292 NONAME - platform_strerror @ 293 NONAME - snprintf @ 294 NONAME - vsnprintf @ 295 NONAME + pj_symbianos_set_params @ 262 NONAME + pj_thread_create @ 263 NONAME + pj_thread_destroy @ 264 NONAME + pj_thread_get_name @ 265 NONAME + pj_thread_join @ 266 NONAME + pj_thread_local_alloc @ 267 NONAME + pj_thread_local_free @ 268 NONAME + pj_thread_local_get @ 269 NONAME + pj_thread_local_set @ 270 NONAME + pj_thread_register @ 271 NONAME + pj_thread_resume @ 272 NONAME + pj_thread_sleep @ 273 NONAME + pj_thread_this @ 274 NONAME + pj_time_decode @ 275 NONAME + pj_time_encode @ 276 NONAME + pj_time_gmt_to_local @ 277 NONAME + pj_time_local_to_gmt @ 278 NONAME + pj_time_val_normalize @ 279 NONAME + pj_timer_entry_init @ 280 NONAME + pj_timer_heap_cancel @ 281 NONAME + pj_timer_heap_count @ 282 NONAME + pj_timer_heap_create @ 283 NONAME + pj_timer_heap_destroy @ 284 NONAME + pj_timer_heap_earliest_time @ 285 NONAME + pj_timer_heap_mem_size @ 286 NONAME + pj_timer_heap_poll @ 287 NONAME + pj_timer_heap_schedule @ 288 NONAME + pj_timer_heap_set_lock @ 289 NONAME + pj_timer_heap_set_max_timed_out_per_poll @ 290 NONAME + pj_unicode_to_ansi @ 291 NONAME + pj_utoa @ 292 NONAME + pj_utoa_pad @ 293 NONAME + platform_strerror @ 294 NONAME + snprintf @ 295 NONAME + vsnprintf @ 296 NONAME diff --git a/build.symbian/pjproject.cww b/build.symbian/pjproject.cww index f5b7eea7..6d2fd3e8 100644 --- a/build.symbian/pjproject.cww +++ b/build.symbian/pjproject.cww @@ -312,17 +312,68 @@ </DOCKINFO>
</WINDOW>
<WINDOW>
- <SESSION>-1</SESSION>
- <EDOCTYPE>1</EDOCTYPE>
- <PATH USERELATIVEPATHS = "true">..\pjsip-apps\src\symbian_ua\ua.cpp</PATH>
+ <SESSION>-2147483648</SESSION>
+ <EDOCTYPE>20</EDOCTYPE>
+ <DEFAULT>true</DEFAULT>
<MAXIMIZED>true</MAXIMIZED>
<FRAMELOC>
<X>4</X>
- <Y>4</Y>
+ <Y>23</Y>
+ </FRAMELOC>
+ <FRAMESIZE>
+ <W>1464</W>
+ <H>3681</H>
+ </FRAMESIZE>
+ <DOCKINFO>
+ <STATUS>0</STATUS>
+ <ROW></ROW>
+ <COLUMN></COLUMN>
+ <DOCKBARID></DOCKBARID>
+ <PCTWIDTH></PCTWIDTH>
+ <HGT></HGT>
+ <GROUPID>
+ <GIDHIGHPART></GIDHIGHPART>
+ <GIDLOWPART></GIDLOWPART>
+ </GROUPID>
+ </DOCKINFO>
+ </WINDOW>
+ <WINDOW>
+ <SESSION>-2147483648</SESSION>
+ <EDOCTYPE>36</EDOCTYPE>
+ <DEFAULT>true</DEFAULT>
+ <FRAMELOC>
+ <X>4</X>
+ <Y>23</Y>
+ </FRAMELOC>
+ <FRAMESIZE>
+ <W>366</W>
+ <H>354</H>
+ </FRAMESIZE>
+ <DOCKINFO>
+ <STATUS>0</STATUS>
+ <ROW></ROW>
+ <COLUMN></COLUMN>
+ <DOCKBARID></DOCKBARID>
+ <PCTWIDTH></PCTWIDTH>
+ <HGT></HGT>
+ <GROUPID>
+ <GIDHIGHPART></GIDHIGHPART>
+ <GIDLOWPART></GIDLOWPART>
+ </GROUPID>
+ </DOCKINFO>
+ </WINDOW>
+ <WINDOW>
+ <SESSION>-2147483648</SESSION>
+ <EDOCTYPE>23</EDOCTYPE>
+ <DEFAULT>true</DEFAULT>
+ <MAXIMIZED>true</MAXIMIZED>
+ <FRAMELOC>
+ <X>6</X>
+ <Y>81</Y>
</FRAMELOC>
<FRAMESIZE>
- <W>557</W>
- <H>627</H>
+ <W>566</W>
+ <H>477</H>
</FRAMESIZE>
<DOCKINFO>
<STATUS>0</STATUS>
diff --git a/pjlib/include/pj/os.h b/pjlib/include/pj/os.h index 10cc5520..3529c463 100644 --- a/pjlib/include/pj/os.h +++ b/pjlib/include/pj/os.h @@ -293,6 +293,48 @@ PJ_DECL(pj_status_t) pj_thread_get_stack_info(pj_thread_t *thread, */ PJ_DECL(pj_bool_t) pj_symbianos_poll(int priority, int ms_timeout); + +/** + * This structure declares Symbian OS specific parameters that can be + * specified when calling #pj_symbianos_set_params(). + */ +typedef struct pj_symbianos_params +{ + /** + * Optional RSocketServ instance to be used by PJLIB. If this + * value is NULL, PJLIB will create a new RSocketServ instance + * when pj_init() is called. + */ + void *rsocketserv; + + /** + * Optional RConnection instance to be used by PJLIB when creating + * sockets. If this value is NULL, no RConnection will be + * specified when creating sockets. + */ + void *rconnection; + + /** + * Optional RHostResolver instance to be used by PJLIB. If this value + * is NULL, a new RHostResolver instance will be created when + * pj_init() is called. + */ + void *rhostresolver; + +} pj_symbianos_params; + +/** + * Specify Symbian OS parameters to be used by PJLIB. This function MUST + * be called before #pj_init() is called. + * + * @param prm Symbian specific parameters. + * + * @return PJ_SUCCESS if the parameters can be applied + * successfully. + */ +PJ_DECL(pj_status_t) pj_symbianos_set_params(pj_symbianos_params *prm); + + /** * @} */ diff --git a/pjlib/src/pj/os_core_symbian.cpp b/pjlib/src/pj/os_core_symbian.cpp index f13365a5..8f96ce09 100644 --- a/pjlib/src/pj/os_core_symbian.cpp +++ b/pjlib/src/pj/os_core_symbian.cpp @@ -153,10 +153,19 @@ TInt CPjTimeoutTimer::RunError(TInt aError) PjSymbianOS::PjSymbianOS() : isSocketServInitialized_(false), isResolverInitialized_(false), - console_(NULL), selectTimeoutTimer_(NULL) + console_(NULL), selectTimeoutTimer_(NULL), + appSocketServ_(NULL), appConnection_(NULL), appHostResolver_(NULL) { } +// Set parameters +void PjSymbianOS::SetParameters(pj_symbianos_params *params) +{ + appSocketServ_ = (RSocketServ*) params->rsocketserv; + appConnection_ = (RConnection*) params->rconnection; + appHostResolver_ = (RHostResolver*) params->rhostresolver; +} + // Get PjSymbianOS instance PjSymbianOS *PjSymbianOS::Instance() { @@ -179,7 +188,10 @@ TInt PjSymbianOS::Initialize() return err; #endif - if (!isSocketServInitialized_) { + /* Only create RSocketServ if application doesn't specify it + * in the parameters + */ + if (!isSocketServInitialized_ && appSocketServ_ == NULL) { err = socketServ_.Connect(); if (err != KErrNone) goto on_error; @@ -187,8 +199,13 @@ TInt PjSymbianOS::Initialize() isSocketServInitialized_ = true; } - if (!isResolverInitialized_) { - err = hostResolver_.Open(SocketServ(), KAfInet, KSockStream); + if (!isResolverInitialized_ && appHostResolver_ == NULL) { + if (Connection()) + err = hostResolver_.Open(SocketServ(), KAfInet, KSockStream, + *Connection()); + else + err = hostResolver_.Open(SocketServ(), KAfInet, KSockStream); + if (err != KErrNone) goto on_error; @@ -260,6 +277,15 @@ PJ_DEF(pj_uint32_t) pj_getpid(void) } +/* Set Symbian specific parameters */ +PJ_DEF(pj_status_t) pj_symbianos_set_params(pj_symbianos_params *prm) +{ + PJ_ASSERT_RETURN(prm != NULL, PJ_EINVAL); + PjSymbianOS::Instance()->SetParameters(prm); + return PJ_SUCCESS; +} + + /* * pj_init(void). * Init PJLIB! diff --git a/pjlib/src/pj/os_symbian.h b/pjlib/src/pj/os_symbian.h index 5fabdc6e..2b14ecd6 100644 --- a/pjlib/src/pj/os_symbian.h +++ b/pjlib/src/pj/os_symbian.h @@ -20,6 +20,7 @@ #define __OS_SYMBIAN_H__ #include <pj/sock.h> +#include <pj/os.h> #include <pj/string.h> #include <e32base.h> @@ -195,6 +196,11 @@ public: static PjSymbianOS *Instance(); // + // Set parameters + // + void SetParameters(pj_symbianos_params *params); + + // // Initialize. // TInt Initialize(); @@ -212,9 +218,15 @@ public: // Get RSocketServ instance to be used by all sockets. RSocketServ &SocketServ() { - return socketServ_; + return appSocketServ_ ? *appSocketServ_ : socketServ_; } + // Get RConnection instance, if any. + RConnection *Connection() + { + return appConnection_; + } + // Convert TInetAddr to pj_sockaddr_in static inline void Addr2pj(const TInetAddr & sym_addr, pj_sockaddr_in &pj_addr) @@ -243,7 +255,7 @@ public: // Get RHostResolver instance RHostResolver & GetResolver() { - return hostResolver_; + return appHostResolver_ ? *appHostResolver_ : hostResolver_; } @@ -296,6 +308,11 @@ private: CPjTimeoutTimer *selectTimeoutTimer_; + // App parameters + RSocketServ *appSocketServ_; + RConnection *appConnection_; + RHostResolver *appHostResolver_; + private: PjSymbianOS(); }; diff --git a/pjlib/src/pj/sock_symbian.cpp b/pjlib/src/pj/sock_symbian.cpp index 7c7680a9..4a1da7be 100644 --- a/pjlib/src/pj/sock_symbian.cpp +++ b/pjlib/src/pj/sock_symbian.cpp @@ -474,7 +474,14 @@ PJ_DEF(pj_status_t) pj_sock_socket(int af, /* Create Symbian RSocket */ RSocket rSock; - rc = rSock.Open(PjSymbianOS::Instance()->SocketServ(), af, type, proto); + if (PjSymbianOS::Instance()->Connection()) + rc = rSock.Open(PjSymbianOS::Instance()->SocketServ(), + af, type, proto, + *PjSymbianOS::Instance()->Connection()); + else + rc = rSock.Open(PjSymbianOS::Instance()->SocketServ(), + af, type, proto); + if (rc != KErrNone) return PJ_RETURN_OS_ERROR(rc); |