Ticket #417: added pjlib API to retrieve the native thread handle from pj_thread_t

git-svn-id: https://svn.pjsip.org/repos/pjproject/trunk@1589 74dad513-b988-da41-8d7b-12977e46ad98
diff --git a/build.symbian/pjlibU.def b/build.symbian/pjlibU.def
index 8e2cf97..11c3479 100644
--- a/build.symbian/pjlibU.def
+++ b/build.symbian/pjlibU.def
@@ -111,188 +111,192 @@
 	pj_inet_addr2                            @ 110 NONAME
 	pj_inet_aton                             @ 111 NONAME
 	pj_inet_ntoa                             @ 112 NONAME
-	pj_init                                  @ 113 NONAME
-	pj_ioqueue_accept                        @ 114 NONAME
-	pj_ioqueue_connect                       @ 115 NONAME
-	pj_ioqueue_create                        @ 116 NONAME
-	pj_ioqueue_destroy                       @ 117 NONAME
-	pj_ioqueue_get_user_data                 @ 118 NONAME
-	pj_ioqueue_is_pending                    @ 119 NONAME
-	pj_ioqueue_name                          @ 120 NONAME
-	pj_ioqueue_op_key_init                   @ 121 NONAME
-	pj_ioqueue_poll                          @ 122 NONAME
-	pj_ioqueue_post_completion               @ 123 NONAME
-	pj_ioqueue_recv                          @ 124 NONAME
-	pj_ioqueue_recvfrom                      @ 125 NONAME
-	pj_ioqueue_register_sock                 @ 126 NONAME
-	pj_ioqueue_send                          @ 127 NONAME
-	pj_ioqueue_sendto                        @ 128 NONAME
-	pj_ioqueue_set_lock                      @ 129 NONAME
-	pj_ioqueue_set_user_data                 @ 130 NONAME
-	pj_ioqueue_unregister                    @ 131 NONAME
-	pj_leave_critical_section                @ 132 NONAME
-	pj_list_erase                            @ 133 NONAME
-	pj_list_find_node                        @ 134 NONAME
-	pj_list_insert_after                     @ 135 NONAME
-	pj_list_insert_before                    @ 136 NONAME
-	pj_list_insert_nodes_after               @ 137 NONAME
-	pj_list_insert_nodes_before              @ 138 NONAME
-	pj_list_merge_first                      @ 139 NONAME
-	pj_list_merge_last                       @ 140 NONAME
-	pj_list_search                           @ 141 NONAME
-	pj_list_size                             @ 142 NONAME
-	pj_lock_acquire                          @ 143 NONAME
-	pj_lock_create_null_mutex                @ 144 NONAME
-	pj_lock_create_recursive_mutex           @ 145 NONAME
-	pj_lock_create_semaphore                 @ 146 NONAME
-	pj_lock_create_simple_mutex              @ 147 NONAME
-	pj_lock_destroy                          @ 148 NONAME
-	pj_lock_release                          @ 149 NONAME
-	pj_lock_tryacquire                       @ 150 NONAME
-	pj_log                                   @ 151 NONAME
-	pj_log_1                                 @ 152 NONAME
-	pj_log_2                                 @ 153 NONAME
-	pj_log_3                                 @ 154 NONAME
-	pj_log_4                                 @ 155 NONAME
-	pj_log_5                                 @ 156 NONAME
-	pj_log_get_decor                         @ 157 NONAME
-	pj_log_get_level                         @ 158 NONAME
-	pj_log_get_log_func                      @ 159 NONAME
-	pj_log_set_decor                         @ 160 NONAME
-	pj_log_set_level                         @ 161 NONAME
-	pj_log_set_log_func                      @ 162 NONAME
-	pj_log_write                             @ 163 NONAME
-	pj_mutex_create                          @ 164 NONAME
-	pj_mutex_create_recursive                @ 165 NONAME
-	pj_mutex_create_simple                   @ 166 NONAME
-	pj_mutex_destroy                         @ 167 NONAME
-	pj_mutex_lock                            @ 168 NONAME
-	pj_mutex_trylock                         @ 169 NONAME
-	pj_mutex_unlock                          @ 170 NONAME
-	pj_ntohl                                 @ 171 NONAME
-	pj_ntohs                                 @ 172 NONAME
-	pj_pool_alloc                            @ 173 NONAME
-	pj_pool_alloc_from_block                 @ 174 NONAME
-	pj_pool_allocate_find                    @ 175 NONAME
-	pj_pool_calloc                           @ 176 NONAME
-	pj_pool_create                           @ 177 NONAME
-	pj_pool_create_int                       @ 178 NONAME
-	pj_pool_create_on_buf                    @ 179 NONAME
-	pj_pool_destroy_int                      @ 180 NONAME
-	pj_pool_factory_default_policy           @ 181 NONAME
-	pj_pool_factory_get_default_policy       @ 182 NONAME
-	pj_pool_get_capacity                     @ 183 NONAME
-	pj_pool_get_used_size                    @ 184 NONAME
-	pj_pool_getobjname                       @ 185 NONAME
-	pj_pool_init_int                         @ 186 NONAME
-	pj_pool_release                          @ 187 NONAME
-	pj_pool_reset                            @ 188 NONAME
-	pj_rand                                  @ 189 NONAME
-	pj_rbtree_erase                          @ 190 NONAME
-	pj_rbtree_find                           @ 191 NONAME
-	pj_rbtree_first                          @ 192 NONAME
-	pj_rbtree_init                           @ 193 NONAME
-	pj_rbtree_insert                         @ 194 NONAME
-	pj_rbtree_last                           @ 195 NONAME
-	pj_rbtree_max_height                     @ 196 NONAME
-	pj_rbtree_min_height                     @ 197 NONAME
-	pj_rbtree_next                           @ 198 NONAME
-	pj_rbtree_prev                           @ 199 NONAME
-	pj_register_strerror                     @ 200 NONAME
-	pj_rwmutex_create                        @ 201 NONAME
-	pj_rwmutex_destroy                       @ 202 NONAME
-	pj_rwmutex_lock_read                     @ 203 NONAME
-	pj_rwmutex_lock_write                    @ 204 NONAME
-	pj_rwmutex_unlock_read                   @ 205 NONAME
-	pj_rwmutex_unlock_write                  @ 206 NONAME
-	pj_sem_create                            @ 207 NONAME
-	pj_sem_destroy                           @ 208 NONAME
-	pj_sem_post                              @ 209 NONAME
-	pj_sem_trywait                           @ 210 NONAME
-	pj_sem_wait                              @ 211 NONAME
-	pj_set_netos_error                       @ 212 NONAME
-	pj_set_os_error                          @ 213 NONAME
-	pj_shutdown                              @ 214 NONAME
-	pj_sock_accept                           @ 215 NONAME
-	pj_sock_bind                             @ 216 NONAME
-	pj_sock_bind_in                          @ 217 NONAME
-	pj_sock_close                            @ 218 NONAME
-	pj_sock_connect                          @ 219 NONAME
-	pj_sock_getpeername                      @ 220 NONAME
-	pj_sock_getsockname                      @ 221 NONAME
-	pj_sock_getsockopt                       @ 222 NONAME
-	pj_sock_listen                           @ 223 NONAME
-	pj_sock_recv                             @ 224 NONAME
-	pj_sock_recvfrom                         @ 225 NONAME
-	pj_sock_select                           @ 226 NONAME
-	pj_sock_send                             @ 227 NONAME
-	pj_sock_sendto                           @ 228 NONAME
-	pj_sock_setsockopt                       @ 229 NONAME
-	pj_sock_shutdown                         @ 230 NONAME
-	pj_sock_socket                           @ 231 NONAME
-	pj_sockaddr_in_init                      @ 232 NONAME
-	pj_sockaddr_in_set_str_addr              @ 233 NONAME
-	pj_srand                                 @ 234 NONAME
-	pj_str                                   @ 235 NONAME
-	pj_strassign                             @ 236 NONAME
-	pj_strcat                                @ 237 NONAME
-	pj_strcat2                               @ 238 NONAME
-	pj_strcmp                                @ 239 NONAME
-	pj_strcmp2                               @ 240 NONAME
-	pj_strcpy                                @ 241 NONAME
-	pj_strcpy2                               @ 242 NONAME
-	pj_strdup                                @ 243 NONAME
-	pj_strdup2                               @ 244 NONAME
-	pj_strdup2_with_null                     @ 245 NONAME
-	pj_strdup3                               @ 246 NONAME
-	pj_strdup_with_null                      @ 247 NONAME
-	pj_strerror                              @ 248 NONAME
-	pj_stricmp                               @ 249 NONAME
-	pj_stricmp2                              @ 250 NONAME
-	pj_strltrim                              @ 251 NONAME
-	pj_strncmp                               @ 252 NONAME
-	pj_strncmp2                              @ 253 NONAME
-	pj_strncpy                               @ 254 NONAME
-	pj_strncpy_with_null                     @ 255 NONAME
-	pj_strnicmp                              @ 256 NONAME
-	pj_strnicmp2                             @ 257 NONAME
-	pj_strrtrim                              @ 258 NONAME
-	pj_strtoul                               @ 259 NONAME
-	pj_strtoul2                              @ 260 NONAME
-	pj_strtrim                               @ 261 NONAME
-	pj_symbianos_poll                        @ 262 NONAME
-	pj_symbianos_set_params                  @ 263 NONAME
-	pj_thread_create                         @ 264 NONAME
-	pj_thread_destroy                        @ 265 NONAME
-	pj_thread_get_name                       @ 266 NONAME
-	pj_thread_join                           @ 267 NONAME
-	pj_thread_local_alloc                    @ 268 NONAME
-	pj_thread_local_free                     @ 269 NONAME
-	pj_thread_local_get                      @ 270 NONAME
-	pj_thread_local_set                      @ 271 NONAME
-	pj_thread_register                       @ 272 NONAME
-	pj_thread_resume                         @ 273 NONAME
-	pj_thread_sleep                          @ 274 NONAME
-	pj_thread_this                           @ 275 NONAME
-	pj_time_decode                           @ 276 NONAME
-	pj_time_encode                           @ 277 NONAME
-	pj_time_gmt_to_local                     @ 278 NONAME
-	pj_time_local_to_gmt                     @ 279 NONAME
-	pj_time_val_normalize                    @ 280 NONAME
-	pj_timer_entry_init                      @ 281 NONAME
-	pj_timer_heap_cancel                     @ 282 NONAME
-	pj_timer_heap_count                      @ 283 NONAME
-	pj_timer_heap_create                     @ 284 NONAME
-	pj_timer_heap_destroy                    @ 285 NONAME
-	pj_timer_heap_earliest_time              @ 286 NONAME
-	pj_timer_heap_mem_size                   @ 287 NONAME
-	pj_timer_heap_poll                       @ 288 NONAME
-	pj_timer_heap_schedule                   @ 289 NONAME
-	pj_timer_heap_set_lock                   @ 290 NONAME
-	pj_timer_heap_set_max_timed_out_per_poll @ 291 NONAME
-	pj_unicode_to_ansi                       @ 292 NONAME
-	pj_utoa                                  @ 293 NONAME
-	pj_utoa_pad                              @ 294 NONAME
-	platform_strerror                        @ 295 NONAME
-	snprintf                                 @ 296 NONAME
-	vsnprintf                                @ 297 NONAME
+	pj_inet_ntop                             @ 113 NONAME
+	pj_inet_pton                             @ 114 NONAME
+	pj_init                                  @ 115 NONAME
+	pj_ioqueue_accept                        @ 116 NONAME
+	pj_ioqueue_connect                       @ 117 NONAME
+	pj_ioqueue_create                        @ 118 NONAME
+	pj_ioqueue_destroy                       @ 119 NONAME
+	pj_ioqueue_get_user_data                 @ 120 NONAME
+	pj_ioqueue_is_pending                    @ 121 NONAME
+	pj_ioqueue_name                          @ 122 NONAME
+	pj_ioqueue_op_key_init                   @ 123 NONAME
+	pj_ioqueue_poll                          @ 124 NONAME
+	pj_ioqueue_post_completion               @ 125 NONAME
+	pj_ioqueue_recv                          @ 126 NONAME
+	pj_ioqueue_recvfrom                      @ 127 NONAME
+	pj_ioqueue_register_sock                 @ 128 NONAME
+	pj_ioqueue_send                          @ 129 NONAME
+	pj_ioqueue_sendto                        @ 130 NONAME
+	pj_ioqueue_set_lock                      @ 131 NONAME
+	pj_ioqueue_set_user_data                 @ 132 NONAME
+	pj_ioqueue_unregister                    @ 133 NONAME
+	pj_leave_critical_section                @ 134 NONAME
+	pj_list_erase                            @ 135 NONAME
+	pj_list_find_node                        @ 136 NONAME
+	pj_list_insert_after                     @ 137 NONAME
+	pj_list_insert_before                    @ 138 NONAME
+	pj_list_insert_nodes_after               @ 139 NONAME
+	pj_list_insert_nodes_before              @ 140 NONAME
+	pj_list_merge_first                      @ 141 NONAME
+	pj_list_merge_last                       @ 142 NONAME
+	pj_list_search                           @ 143 NONAME
+	pj_list_size                             @ 144 NONAME
+	pj_lock_acquire                          @ 145 NONAME
+	pj_lock_create_null_mutex                @ 146 NONAME
+	pj_lock_create_recursive_mutex           @ 147 NONAME
+	pj_lock_create_semaphore                 @ 148 NONAME
+	pj_lock_create_simple_mutex              @ 149 NONAME
+	pj_lock_destroy                          @ 150 NONAME
+	pj_lock_release                          @ 151 NONAME
+	pj_lock_tryacquire                       @ 152 NONAME
+	pj_log                                   @ 153 NONAME
+	pj_log_1                                 @ 154 NONAME
+	pj_log_2                                 @ 155 NONAME
+	pj_log_3                                 @ 156 NONAME
+	pj_log_4                                 @ 157 NONAME
+	pj_log_5                                 @ 158 NONAME
+	pj_log_get_decor                         @ 159 NONAME
+	pj_log_get_level                         @ 160 NONAME
+	pj_log_get_log_func                      @ 161 NONAME
+	pj_log_set_decor                         @ 162 NONAME
+	pj_log_set_level                         @ 163 NONAME
+	pj_log_set_log_func                      @ 164 NONAME
+	pj_log_write                             @ 165 NONAME
+	pj_mutex_create                          @ 166 NONAME
+	pj_mutex_create_recursive                @ 167 NONAME
+	pj_mutex_create_simple                   @ 168 NONAME
+	pj_mutex_destroy                         @ 169 NONAME
+	pj_mutex_lock                            @ 170 NONAME
+	pj_mutex_trylock                         @ 171 NONAME
+	pj_mutex_unlock                          @ 172 NONAME
+	pj_ntohl                                 @ 173 NONAME
+	pj_ntohs                                 @ 174 NONAME
+	pj_pool_alloc                            @ 175 NONAME
+	pj_pool_alloc_from_block                 @ 176 NONAME
+	pj_pool_allocate_find                    @ 177 NONAME
+	pj_pool_calloc                           @ 178 NONAME
+	pj_pool_create                           @ 179 NONAME
+	pj_pool_create_int                       @ 180 NONAME
+	pj_pool_create_on_buf                    @ 181 NONAME
+	pj_pool_destroy_int                      @ 182 NONAME
+	pj_pool_factory_default_policy           @ 183 NONAME
+	pj_pool_factory_get_default_policy       @ 184 NONAME
+	pj_pool_get_capacity                     @ 185 NONAME
+	pj_pool_get_used_size                    @ 186 NONAME
+	pj_pool_getobjname                       @ 187 NONAME
+	pj_pool_init_int                         @ 188 NONAME
+	pj_pool_release                          @ 189 NONAME
+	pj_pool_reset                            @ 190 NONAME
+	pj_rand                                  @ 191 NONAME
+	pj_rbtree_erase                          @ 192 NONAME
+	pj_rbtree_find                           @ 193 NONAME
+	pj_rbtree_first                          @ 194 NONAME
+	pj_rbtree_init                           @ 195 NONAME
+	pj_rbtree_insert                         @ 196 NONAME
+	pj_rbtree_last                           @ 197 NONAME
+	pj_rbtree_max_height                     @ 198 NONAME
+	pj_rbtree_min_height                     @ 199 NONAME
+	pj_rbtree_next                           @ 200 NONAME
+	pj_rbtree_prev                           @ 201 NONAME
+	pj_register_strerror                     @ 202 NONAME
+	pj_rwmutex_create                        @ 203 NONAME
+	pj_rwmutex_destroy                       @ 204 NONAME
+	pj_rwmutex_lock_read                     @ 205 NONAME
+	pj_rwmutex_lock_write                    @ 206 NONAME
+	pj_rwmutex_unlock_read                   @ 207 NONAME
+	pj_rwmutex_unlock_write                  @ 208 NONAME
+	pj_sem_create                            @ 209 NONAME
+	pj_sem_destroy                           @ 210 NONAME
+	pj_sem_post                              @ 211 NONAME
+	pj_sem_trywait                           @ 212 NONAME
+	pj_sem_wait                              @ 213 NONAME
+	pj_set_netos_error                       @ 214 NONAME
+	pj_set_os_error                          @ 215 NONAME
+	pj_shutdown                              @ 216 NONAME
+	pj_sock_accept                           @ 217 NONAME
+	pj_sock_bind                             @ 218 NONAME
+	pj_sock_bind_in                          @ 219 NONAME
+	pj_sock_close                            @ 220 NONAME
+	pj_sock_connect                          @ 221 NONAME
+	pj_sock_getpeername                      @ 222 NONAME
+	pj_sock_getsockname                      @ 223 NONAME
+	pj_sock_getsockopt                       @ 224 NONAME
+	pj_sock_listen                           @ 225 NONAME
+	pj_sock_recv                             @ 226 NONAME
+	pj_sock_recvfrom                         @ 227 NONAME
+	pj_sock_select                           @ 228 NONAME
+	pj_sock_send                             @ 229 NONAME
+	pj_sock_sendto                           @ 230 NONAME
+	pj_sock_setsockopt                       @ 231 NONAME
+	pj_sock_shutdown                         @ 232 NONAME
+	pj_sock_socket                           @ 233 NONAME
+	pj_sockaddr_in_init                      @ 234 NONAME
+	pj_sockaddr_in_set_str_addr              @ 235 NONAME
+	pj_srand                                 @ 236 NONAME
+	pj_str                                   @ 237 NONAME
+	pj_strassign                             @ 238 NONAME
+	pj_strcat                                @ 239 NONAME
+	pj_strcat2                               @ 240 NONAME
+	pj_strcmp                                @ 241 NONAME
+	pj_strcmp2                               @ 242 NONAME
+	pj_strcpy                                @ 243 NONAME
+	pj_strcpy2                               @ 244 NONAME
+	pj_strdup                                @ 245 NONAME
+	pj_strdup2                               @ 246 NONAME
+	pj_strdup2_with_null                     @ 247 NONAME
+	pj_strdup3                               @ 248 NONAME
+	pj_strdup_with_null                      @ 249 NONAME
+	pj_strerror                              @ 250 NONAME
+	pj_stricmp                               @ 251 NONAME
+	pj_stricmp2                              @ 252 NONAME
+	pj_strltrim                              @ 253 NONAME
+	pj_strncmp                               @ 254 NONAME
+	pj_strncmp2                              @ 255 NONAME
+	pj_strncpy                               @ 256 NONAME
+	pj_strncpy_with_null                     @ 257 NONAME
+	pj_strnicmp                              @ 258 NONAME
+	pj_strnicmp2                             @ 259 NONAME
+	pj_strrtrim                              @ 260 NONAME
+	pj_strtoul                               @ 261 NONAME
+	pj_strtoul2                              @ 262 NONAME
+	pj_strtrim                               @ 263 NONAME
+	pj_symbianos_poll                        @ 264 NONAME
+	pj_symbianos_set_params                  @ 265 NONAME
+	pj_thread_create                         @ 266 NONAME
+	pj_thread_destroy                        @ 267 NONAME
+	pj_thread_get_name                       @ 268 NONAME
+	pj_thread_get_os_handle                  @ 269 NONAME
+	pj_thread_is_registered                  @ 270 NONAME
+	pj_thread_join                           @ 271 NONAME
+	pj_thread_local_alloc                    @ 272 NONAME
+	pj_thread_local_free                     @ 273 NONAME
+	pj_thread_local_get                      @ 274 NONAME
+	pj_thread_local_set                      @ 275 NONAME
+	pj_thread_register                       @ 276 NONAME
+	pj_thread_resume                         @ 277 NONAME
+	pj_thread_sleep                          @ 278 NONAME
+	pj_thread_this                           @ 279 NONAME
+	pj_time_decode                           @ 280 NONAME
+	pj_time_encode                           @ 281 NONAME
+	pj_time_gmt_to_local                     @ 282 NONAME
+	pj_time_local_to_gmt                     @ 283 NONAME
+	pj_time_val_normalize                    @ 284 NONAME
+	pj_timer_entry_init                      @ 285 NONAME
+	pj_timer_heap_cancel                     @ 286 NONAME
+	pj_timer_heap_count                      @ 287 NONAME
+	pj_timer_heap_create                     @ 288 NONAME
+	pj_timer_heap_destroy                    @ 289 NONAME
+	pj_timer_heap_earliest_time              @ 290 NONAME
+	pj_timer_heap_mem_size                   @ 291 NONAME
+	pj_timer_heap_poll                       @ 292 NONAME
+	pj_timer_heap_schedule                   @ 293 NONAME
+	pj_timer_heap_set_lock                   @ 294 NONAME
+	pj_timer_heap_set_max_timed_out_per_poll @ 295 NONAME
+	pj_unicode_to_ansi                       @ 296 NONAME
+	pj_utoa                                  @ 297 NONAME
+	pj_utoa_pad                              @ 298 NONAME
+	platform_strerror                        @ 299 NONAME
+	snprintf                                 @ 300 NONAME
+	vsnprintf                                @ 301 NONAME
diff --git a/build.symbian/pjmediaU.def b/build.symbian/pjmediaU.def
index 9d9ff36..f1cfcc0 100644
--- a/build.symbian/pjmediaU.def
+++ b/build.symbian/pjmediaU.def
@@ -55,133 +55,135 @@
 	pjmedia_endpt_dump                       @ 54 NONAME
 	pjmedia_endpt_get_codec_mgr              @ 55 NONAME
 	pjmedia_endpt_get_ioqueue                @ 56 NONAME
-	pjmedia_ice_create                       @ 57 NONAME
-	pjmedia_ice_destroy                      @ 58 NONAME
-	pjmedia_ice_get_comp                     @ 59 NONAME
-	pjmedia_ice_get_init_status              @ 60 NONAME
-	pjmedia_ice_init_ice                     @ 61 NONAME
-	pjmedia_ice_modify_sdp                   @ 62 NONAME
-	pjmedia_ice_simulate_lost                @ 63 NONAME
-	pjmedia_ice_start_ice                    @ 64 NONAME
-	pjmedia_ice_start_init                   @ 65 NONAME
-	pjmedia_ice_stop_ice                     @ 66 NONAME
-	pjmedia_jbuf_create                      @ 67 NONAME
-	pjmedia_jbuf_destroy                     @ 68 NONAME
-	pjmedia_jbuf_get_frame                   @ 69 NONAME
-	pjmedia_jbuf_get_state                   @ 70 NONAME
-	pjmedia_jbuf_put_frame                   @ 71 NONAME
-	pjmedia_jbuf_reset                       @ 72 NONAME
-	pjmedia_jbuf_set_adaptive                @ 73 NONAME
-	pjmedia_jbuf_set_fixed                   @ 74 NONAME
-	pjmedia_master_port_create               @ 75 NONAME
-	pjmedia_master_port_destroy              @ 76 NONAME
-	pjmedia_master_port_get_dport            @ 77 NONAME
-	pjmedia_master_port_get_uport            @ 78 NONAME
-	pjmedia_master_port_set_dport            @ 79 NONAME
-	pjmedia_master_port_set_uport            @ 80 NONAME
-	pjmedia_master_port_start                @ 81 NONAME
-	pjmedia_master_port_stop                 @ 82 NONAME
-	pjmedia_mem_capture_create               @ 83 NONAME
-	pjmedia_mem_capture_get_size             @ 84 NONAME
-	pjmedia_mem_capture_set_eof_cb           @ 85 NONAME
-	pjmedia_mem_player_create                @ 86 NONAME
-	pjmedia_mem_player_set_eof_cb            @ 87 NONAME
-	pjmedia_null_port_create                 @ 88 NONAME
-	pjmedia_plc_create                       @ 89 NONAME
-	pjmedia_plc_generate                     @ 90 NONAME
-	pjmedia_plc_save                         @ 91 NONAME
-	pjmedia_port_destroy                     @ 92 NONAME
-	pjmedia_port_get_frame                   @ 93 NONAME
-	pjmedia_port_info_init                   @ 94 NONAME
-	pjmedia_port_put_frame                   @ 95 NONAME
-	pjmedia_resample_create                  @ 96 NONAME
-	pjmedia_resample_destroy                 @ 97 NONAME
-	pjmedia_resample_get_input_size          @ 98 NONAME
-	pjmedia_resample_port_create             @ 99 NONAME
-	pjmedia_resample_run                     @ 100 NONAME
-	pjmedia_rtcp_build_rtcp                  @ 101 NONAME
-	pjmedia_rtcp_fini                        @ 102 NONAME
-	pjmedia_rtcp_get_ntp_time                @ 103 NONAME
-	pjmedia_rtcp_init                        @ 104 NONAME
-	pjmedia_rtcp_rx_rtcp                     @ 105 NONAME
-	pjmedia_rtcp_rx_rtp                      @ 106 NONAME
-	pjmedia_rtcp_tx_rtp                      @ 107 NONAME
-	pjmedia_rtp_decode_rtp                   @ 108 NONAME
-	pjmedia_rtp_encode_rtp                   @ 109 NONAME
-	pjmedia_rtp_session_init                 @ 110 NONAME
-	pjmedia_rtp_session_update               @ 111 NONAME
-	pjmedia_session_check_dtmf               @ 112 NONAME
-	pjmedia_session_create                   @ 113 NONAME
-	pjmedia_session_destroy                  @ 114 NONAME
-	pjmedia_session_dial_dtmf                @ 115 NONAME
-	pjmedia_session_enum_streams             @ 116 NONAME
-	pjmedia_session_get_dtmf                 @ 117 NONAME
-	pjmedia_session_get_info                 @ 118 NONAME
-	pjmedia_session_get_port                 @ 119 NONAME
-	pjmedia_session_get_stream_stat          @ 120 NONAME
-	pjmedia_session_info_from_sdp            @ 121 NONAME
-	pjmedia_session_pause                    @ 122 NONAME
-	pjmedia_session_pause_stream             @ 123 NONAME
-	pjmedia_session_resume                   @ 124 NONAME
-	pjmedia_session_resume_stream            @ 125 NONAME
-	pjmedia_session_set_dtmf_callback        @ 126 NONAME
-	pjmedia_silence_det_apply                @ 127 NONAME
-	pjmedia_silence_det_create               @ 128 NONAME
-	pjmedia_silence_det_detect               @ 129 NONAME
-	pjmedia_silence_det_disable              @ 130 NONAME
-	pjmedia_silence_det_set_adaptive         @ 131 NONAME
-	pjmedia_silence_det_set_fixed            @ 132 NONAME
-	pjmedia_silence_det_set_name             @ 133 NONAME
-	pjmedia_silence_det_set_params           @ 134 NONAME
-	pjmedia_snd_port_connect                 @ 135 NONAME
-	pjmedia_snd_port_create                  @ 136 NONAME
-	pjmedia_snd_port_create_player           @ 137 NONAME
-	pjmedia_snd_port_create_rec              @ 138 NONAME
-	pjmedia_snd_port_destroy                 @ 139 NONAME
-	pjmedia_snd_port_disconnect              @ 140 NONAME
-	pjmedia_snd_port_get_ec_tail             @ 141 NONAME
-	pjmedia_snd_port_get_port                @ 142 NONAME
-	pjmedia_snd_port_get_snd_stream          @ 143 NONAME
-	pjmedia_snd_port_set_ec                  @ 144 NONAME
-	pjmedia_splitcomb_create                 @ 145 NONAME
-	pjmedia_splitcomb_create_rev_channel     @ 146 NONAME
-	pjmedia_splitcomb_set_channel            @ 147 NONAME
-	pjmedia_stream_check_dtmf                @ 148 NONAME
-	pjmedia_stream_create                    @ 149 NONAME
-	pjmedia_stream_destroy                   @ 150 NONAME
-	pjmedia_stream_dial_dtmf                 @ 151 NONAME
-	pjmedia_stream_get_dtmf                  @ 152 NONAME
-	pjmedia_stream_get_port                  @ 153 NONAME
-	pjmedia_stream_get_stat                  @ 154 NONAME
-	pjmedia_stream_get_transport             @ 155 NONAME
-	pjmedia_stream_info_from_sdp             @ 156 NONAME
-	pjmedia_stream_pause                     @ 157 NONAME
-	pjmedia_stream_resume                    @ 158 NONAME
-	pjmedia_stream_set_dtmf_callback         @ 159 NONAME
-	pjmedia_stream_start                     @ 160 NONAME
-	pjmedia_strerror                         @ 161 NONAME
-	pjmedia_tonegen_create                   @ 162 NONAME
-	pjmedia_tonegen_create2                  @ 163 NONAME
-	pjmedia_tonegen_get_digit_map            @ 164 NONAME
-	pjmedia_tonegen_is_busy                  @ 165 NONAME
-	pjmedia_tonegen_play                     @ 166 NONAME
-	pjmedia_tonegen_play_digits              @ 167 NONAME
-	pjmedia_tonegen_set_digit_map            @ 168 NONAME
-	pjmedia_tonegen_stop                     @ 169 NONAME
-	pjmedia_transport_udp_attach             @ 170 NONAME
-	pjmedia_transport_udp_close              @ 171 NONAME
-	pjmedia_transport_udp_create             @ 172 NONAME
-	pjmedia_transport_udp_create2            @ 173 NONAME
-	pjmedia_transport_udp_get_info           @ 174 NONAME
-	pjmedia_transport_udp_simulate_lost      @ 175 NONAME
-	pjmedia_wav_player_port_create           @ 176 NONAME
-	pjmedia_wav_player_port_get_pos          @ 177 NONAME
-	pjmedia_wav_player_port_set_pos          @ 178 NONAME
-	pjmedia_wav_player_set_eof_cb            @ 179 NONAME
-	pjmedia_wav_playlist_create              @ 180 NONAME
-	pjmedia_wav_playlist_set_eof_cb          @ 181 NONAME
-	pjmedia_wav_writer_port_create           @ 182 NONAME
-	pjmedia_wav_writer_port_get_pos          @ 183 NONAME
-	pjmedia_wav_writer_port_set_cb           @ 184 NONAME
-	pjmedia_wave_hdr_file_to_host            @ 185 NONAME
-	pjmedia_wave_hdr_host_to_file            @ 186 NONAME
+	pjmedia_endpt_get_thread                 @ 57 NONAME
+	pjmedia_endpt_get_thread_count           @ 58 NONAME
+	pjmedia_ice_create                       @ 59 NONAME
+	pjmedia_ice_destroy                      @ 60 NONAME
+	pjmedia_ice_get_comp                     @ 61 NONAME
+	pjmedia_ice_get_init_status              @ 62 NONAME
+	pjmedia_ice_init_ice                     @ 63 NONAME
+	pjmedia_ice_modify_sdp                   @ 64 NONAME
+	pjmedia_ice_simulate_lost                @ 65 NONAME
+	pjmedia_ice_start_ice                    @ 66 NONAME
+	pjmedia_ice_start_init                   @ 67 NONAME
+	pjmedia_ice_stop_ice                     @ 68 NONAME
+	pjmedia_jbuf_create                      @ 69 NONAME
+	pjmedia_jbuf_destroy                     @ 70 NONAME
+	pjmedia_jbuf_get_frame                   @ 71 NONAME
+	pjmedia_jbuf_get_state                   @ 72 NONAME
+	pjmedia_jbuf_put_frame                   @ 73 NONAME
+	pjmedia_jbuf_reset                       @ 74 NONAME
+	pjmedia_jbuf_set_adaptive                @ 75 NONAME
+	pjmedia_jbuf_set_fixed                   @ 76 NONAME
+	pjmedia_master_port_create               @ 77 NONAME
+	pjmedia_master_port_destroy              @ 78 NONAME
+	pjmedia_master_port_get_dport            @ 79 NONAME
+	pjmedia_master_port_get_uport            @ 80 NONAME
+	pjmedia_master_port_set_dport            @ 81 NONAME
+	pjmedia_master_port_set_uport            @ 82 NONAME
+	pjmedia_master_port_start                @ 83 NONAME
+	pjmedia_master_port_stop                 @ 84 NONAME
+	pjmedia_mem_capture_create               @ 85 NONAME
+	pjmedia_mem_capture_get_size             @ 86 NONAME
+	pjmedia_mem_capture_set_eof_cb           @ 87 NONAME
+	pjmedia_mem_player_create                @ 88 NONAME
+	pjmedia_mem_player_set_eof_cb            @ 89 NONAME
+	pjmedia_null_port_create                 @ 90 NONAME
+	pjmedia_plc_create                       @ 91 NONAME
+	pjmedia_plc_generate                     @ 92 NONAME
+	pjmedia_plc_save                         @ 93 NONAME
+	pjmedia_port_destroy                     @ 94 NONAME
+	pjmedia_port_get_frame                   @ 95 NONAME
+	pjmedia_port_info_init                   @ 96 NONAME
+	pjmedia_port_put_frame                   @ 97 NONAME
+	pjmedia_resample_create                  @ 98 NONAME
+	pjmedia_resample_destroy                 @ 99 NONAME
+	pjmedia_resample_get_input_size          @ 100 NONAME
+	pjmedia_resample_port_create             @ 101 NONAME
+	pjmedia_resample_run                     @ 102 NONAME
+	pjmedia_rtcp_build_rtcp                  @ 103 NONAME
+	pjmedia_rtcp_fini                        @ 104 NONAME
+	pjmedia_rtcp_get_ntp_time                @ 105 NONAME
+	pjmedia_rtcp_init                        @ 106 NONAME
+	pjmedia_rtcp_rx_rtcp                     @ 107 NONAME
+	pjmedia_rtcp_rx_rtp                      @ 108 NONAME
+	pjmedia_rtcp_tx_rtp                      @ 109 NONAME
+	pjmedia_rtp_decode_rtp                   @ 110 NONAME
+	pjmedia_rtp_encode_rtp                   @ 111 NONAME
+	pjmedia_rtp_session_init                 @ 112 NONAME
+	pjmedia_rtp_session_update               @ 113 NONAME
+	pjmedia_session_check_dtmf               @ 114 NONAME
+	pjmedia_session_create                   @ 115 NONAME
+	pjmedia_session_destroy                  @ 116 NONAME
+	pjmedia_session_dial_dtmf                @ 117 NONAME
+	pjmedia_session_enum_streams             @ 118 NONAME
+	pjmedia_session_get_dtmf                 @ 119 NONAME
+	pjmedia_session_get_info                 @ 120 NONAME
+	pjmedia_session_get_port                 @ 121 NONAME
+	pjmedia_session_get_stream_stat          @ 122 NONAME
+	pjmedia_session_info_from_sdp            @ 123 NONAME
+	pjmedia_session_pause                    @ 124 NONAME
+	pjmedia_session_pause_stream             @ 125 NONAME
+	pjmedia_session_resume                   @ 126 NONAME
+	pjmedia_session_resume_stream            @ 127 NONAME
+	pjmedia_session_set_dtmf_callback        @ 128 NONAME
+	pjmedia_silence_det_apply                @ 129 NONAME
+	pjmedia_silence_det_create               @ 130 NONAME
+	pjmedia_silence_det_detect               @ 131 NONAME
+	pjmedia_silence_det_disable              @ 132 NONAME
+	pjmedia_silence_det_set_adaptive         @ 133 NONAME
+	pjmedia_silence_det_set_fixed            @ 134 NONAME
+	pjmedia_silence_det_set_name             @ 135 NONAME
+	pjmedia_silence_det_set_params           @ 136 NONAME
+	pjmedia_snd_port_connect                 @ 137 NONAME
+	pjmedia_snd_port_create                  @ 138 NONAME
+	pjmedia_snd_port_create_player           @ 139 NONAME
+	pjmedia_snd_port_create_rec              @ 140 NONAME
+	pjmedia_snd_port_destroy                 @ 141 NONAME
+	pjmedia_snd_port_disconnect              @ 142 NONAME
+	pjmedia_snd_port_get_ec_tail             @ 143 NONAME
+	pjmedia_snd_port_get_port                @ 144 NONAME
+	pjmedia_snd_port_get_snd_stream          @ 145 NONAME
+	pjmedia_snd_port_set_ec                  @ 146 NONAME
+	pjmedia_splitcomb_create                 @ 147 NONAME
+	pjmedia_splitcomb_create_rev_channel     @ 148 NONAME
+	pjmedia_splitcomb_set_channel            @ 149 NONAME
+	pjmedia_stream_check_dtmf                @ 150 NONAME
+	pjmedia_stream_create                    @ 151 NONAME
+	pjmedia_stream_destroy                   @ 152 NONAME
+	pjmedia_stream_dial_dtmf                 @ 153 NONAME
+	pjmedia_stream_get_dtmf                  @ 154 NONAME
+	pjmedia_stream_get_port                  @ 155 NONAME
+	pjmedia_stream_get_stat                  @ 156 NONAME
+	pjmedia_stream_get_transport             @ 157 NONAME
+	pjmedia_stream_info_from_sdp             @ 158 NONAME
+	pjmedia_stream_pause                     @ 159 NONAME
+	pjmedia_stream_resume                    @ 160 NONAME
+	pjmedia_stream_set_dtmf_callback         @ 161 NONAME
+	pjmedia_stream_start                     @ 162 NONAME
+	pjmedia_strerror                         @ 163 NONAME
+	pjmedia_tonegen_create                   @ 164 NONAME
+	pjmedia_tonegen_create2                  @ 165 NONAME
+	pjmedia_tonegen_get_digit_map            @ 166 NONAME
+	pjmedia_tonegen_is_busy                  @ 167 NONAME
+	pjmedia_tonegen_play                     @ 168 NONAME
+	pjmedia_tonegen_play_digits              @ 169 NONAME
+	pjmedia_tonegen_set_digit_map            @ 170 NONAME
+	pjmedia_tonegen_stop                     @ 171 NONAME
+	pjmedia_transport_udp_attach             @ 172 NONAME
+	pjmedia_transport_udp_close              @ 173 NONAME
+	pjmedia_transport_udp_create             @ 174 NONAME
+	pjmedia_transport_udp_create2            @ 175 NONAME
+	pjmedia_transport_udp_get_info           @ 176 NONAME
+	pjmedia_transport_udp_simulate_lost      @ 177 NONAME
+	pjmedia_wav_player_port_create           @ 178 NONAME
+	pjmedia_wav_player_port_get_pos          @ 179 NONAME
+	pjmedia_wav_player_port_set_pos          @ 180 NONAME
+	pjmedia_wav_player_set_eof_cb            @ 181 NONAME
+	pjmedia_wav_playlist_create              @ 182 NONAME
+	pjmedia_wav_playlist_set_eof_cb          @ 183 NONAME
+	pjmedia_wav_writer_port_create           @ 184 NONAME
+	pjmedia_wav_writer_port_get_pos          @ 185 NONAME
+	pjmedia_wav_writer_port_set_cb           @ 186 NONAME
+	pjmedia_wave_hdr_file_to_host            @ 187 NONAME
+	pjmedia_wave_hdr_host_to_file            @ 188 NONAME
diff --git a/pjlib/include/pj/os.h b/pjlib/include/pj/os.h
index 3529c46..f640df2 100644
--- a/pjlib/include/pj/os.h
+++ b/pjlib/include/pj/os.h
@@ -138,6 +138,19 @@
 
 
 /**
+ * Return native handle from pj_thread_t for manipulation using native
+ * OS APIs.
+ *
+ * @param thread	PJLIB thread descriptor.
+ *
+ * @return		Native thread handle. For example, when the
+ *			backend thread uses pthread, this function will
+ *			return pointer to pthread_t, and on Windows,
+ *			this function will return HANDLE.
+ */
+PJ_DECL(void*) pj_thread_get_os_handle(pj_thread_t *thread);
+
+/**
  * Get thread name.
  *
  * @param thread    The thread handle.
diff --git a/pjlib/src/pj/os_core_symbian.cpp b/pjlib/src/pj/os_core_symbian.cpp
index 8f96ce0..f656cb6 100644
--- a/pjlib/src/pj/os_core_symbian.cpp
+++ b/pjlib/src/pj/os_core_symbian.cpp
@@ -447,6 +447,23 @@
 
 
 /*
+ * pj_thread_is_registered()
+ */
+PJ_DEF(pj_bool_t) pj_thread_is_registered(void)
+{
+    return PJ_FALSE;
+}
+
+/*
+ * pj_thread_get_os_handle()
+ */
+PJ_DEF(void*) pj_thread_get_os_handle(pj_thread_t *thread) 
+{
+    PJ_UNUSED_ARG(thread);
+    return NULL;
+}
+
+/*
  * pj_thread_register(..)
  */
 PJ_DEF(pj_status_t) pj_thread_register ( const char *cstr_thread_name,
diff --git a/pjlib/src/pj/os_core_unix.c b/pjlib/src/pj/os_core_unix.c
index e901036..5a246df 100644
--- a/pjlib/src/pj/os_core_unix.c
+++ b/pjlib/src/pj/os_core_unix.c
@@ -238,6 +238,20 @@
 #endif
 }
 
+/*
+ * Get native thread handle
+ */
+PJ_DEF(void*) pj_thread_get_os_handle(pj_thread_t *thread) 
+{
+    PJ_ASSERT_RETURN(thread, NULL);
+
+#if PJ_HAS_THREADS
+    return &thread->thread;
+#else
+    pj_assert("pj_thread_is_registered() called in non-threading mode!");
+    return NULL;
+#endif
+}
 
 /*
  * pj_thread_register(..)
diff --git a/pjlib/src/pj/os_core_win32.c b/pjlib/src/pj/os_core_win32.c
index b9484ff..fcacaf4 100644
--- a/pjlib/src/pj/os_core_win32.c
+++ b/pjlib/src/pj/os_core_win32.c
@@ -245,6 +245,21 @@
 }
 
 /*
+ * Get native thread handle
+ */
+PJ_DEF(void*) pj_thread_get_os_handle(pj_thread_t *thread) 
+{
+    PJ_ASSERT_RETURN(thread, NULL);
+
+#if PJ_HAS_THREADS
+    return thread->hthread;
+#else
+    pj_assert("pj_thread_is_registered() called in non-threading mode!");
+    return NULL;
+#endif
+}
+
+/*
  * pj_thread_register(..)
  */
 PJ_DEF(pj_status_t) pj_thread_register ( const char *cstr_thread_name,
diff --git a/pjmedia/include/pjmedia/endpoint.h b/pjmedia/include/pjmedia/endpoint.h
index feaaa93..e4521ef 100644
--- a/pjmedia/include/pjmedia/endpoint.h
+++ b/pjmedia/include/pjmedia/endpoint.h
@@ -87,6 +87,26 @@
 
 
 /**
+ * Get the number of worker threads on the media endpoint
+ *
+ * @param endpt		The media endpoint instance.
+ * @return		The number of worker threads on the media endpoint
+ */
+PJ_DECL(unsigned) pjmedia_endpt_get_thread_count(pjmedia_endpt *endpt);
+
+/**
+ * Get a reference to one of the worker threads of the media endpoint 
+ *
+ * @param endpt		The media endpoint instance.
+ * @param index		The index of the thread: 0<= index < thread_cnt
+ *
+ * @return		pj_thread_t or NULL
+ */
+PJ_DECL(pj_thread_t*) pjmedia_endpt_get_thread(pjmedia_endpt *endpt, 
+					       unsigned index);
+
+
+/**
  * Request the media endpoint to create pool.
  *
  * @param endpt		The media endpoint instance.
diff --git a/pjmedia/src/pjmedia/endpoint.c b/pjmedia/src/pjmedia/endpoint.c
index d9296f1..dbeefe7 100644
--- a/pjmedia/src/pjmedia/endpoint.c
+++ b/pjmedia/src/pjmedia/endpoint.c
@@ -226,6 +226,28 @@
     return endpt->ioqueue;
 }
 
+/**
+ * Get the number of worker threads in media endpoint.
+ */
+PJ_DEF(unsigned) pjmedia_endpt_get_thread_count(pjmedia_endpt *endpt)
+{
+    PJ_ASSERT_RETURN(endpt, 0);
+    return endpt->thread_cnt;
+}
+
+/**
+ * Get a reference to one of the worker threads of the media endpoint 
+ */
+PJ_DEF(pj_thread_t*) pjmedia_endpt_get_thread(pjmedia_endpt *endpt, 
+					      unsigned index)
+{
+    PJ_ASSERT_RETURN(endpt, NULL);
+    PJ_ASSERT_RETURN(index < endpt->thread_cnt, NULL);
+
+    /* here should be an assert on index >= 0 < endpt->thread_cnt */
+
+    return endpt->thread[index];
+}
 
 /**
  * Worker thread proc.