Hi Aleksandar, attached the one-liner from the thread [1] you’re talking about.If you want to use|support more than 64 listeners of the same type, you'll have to adjust PJ_IOQUEUE_MAX_HANDLES (config_site.h) as well. Regards, Alain [1] http://lists.pjsip.org/pipermail/pjsip_lists.pjsip.org/2015-November/018754.html On 04/01/2017 15:49, Aleksandar
Milenkovic wrote:
Hello folks, I'm trying to create multiple TCP listeners in pjsua2 on android using the pjproject-2.5.5 release. Thing is, I don't really require many of them, i just need to replace the current one with a new instance because Doze mode is messing things up. After returning from Doze mode, I cannot create more TCP listeners and thus cannot (re)register anymore, here's the error I'm getting in Java: D/PJSIP: 15:20:41.303 tcptp:47899 SIP TCP transport destroyed D/PJSIP: 15:20:41.304 pjsua_core.c Error creating SIP TCP listener: Object with the same type exists (PJSIP_ETYPEEXISTS) [status=171002] D/PJSIP: 15:20:41.304 endpoint.cpp pjsua_transport_create(type, &tcfg, &tid) error: Object with the same type exists (PJSIP_ETYPEEXISTS) (status=171002) [../src/pjsua2/endpoint.cpp:1614] W/System.err: java.lang.Exception: Title: pjsua_transport_create(type, &tcfg, &tid) W/System.err: Code: 171002 W/System.err: Description: Object with the same type exists (PJSIP_ETYPEEXISTS) W/System.err: Location: ../src/pjsua2/endpoint.cpp:1614 W/System.err: at org.pjsip.pjsua2.pjsua2JNI.Endpoint_transportCreate(Native Method) W/System.err: at org.pjsip.pjsua2.Endpoint.transportCreate(Endpoint.java:178) W/System.err: at org.pjsip.pjsua2.app.MyApp.createTransport(MyApp.java:105) W/System.err: at com.packagename.app.calling.MyService.initializeSIP(MyService.java:798) W/System.err: at com.packagename.app.calling.MyService.access$1600(MyService.java:109) W/System.err: at com.packagename.app.calling.MyService$MyBroadcastReceiver.onReceive(MyService.java:1982) W/System.err: at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:1122) W/System.err: at android.os.Handler.handleCallback(Handler.java:751) W/System.err: at android.os.Handler.dispatchMessage(Handler.java:95) W/System.err: at android.os.Looper.loop(Looper.java:154) W/System.err: at android.app.ActivityThread.main(ActivityThread.java:6077) W/System.err: at java.lang.reflect.Method.invoke(Native Method) W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865) W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755) E/PJSIP: java.lang.Exception: Title: pjsua_transport_create(type, &tcfg, &tid) Code: 171002 Description: Object with the same type exists (PJSIP_ETYPEEXISTS) Location: ../src/pjsua2/endpoint.cpp:1614 So i've grepped for PJSIP_ETYPEEXISTS and found occurances in pjsip/src/pjsip/sip_transport.c and made a small patch in this fashoin: PJ_DEF(pj_status_t) pjsip_tpmgr_register_tpfactory( pjsip_tpmgr *mgr, pjsip_tpfactory *tpf) { pjsip_tpfactory *p; pj_status_t status; pj_lock_acquire(mgr->lock); /* Check that no factory with the same type has been registered. */ status = PJ_SUCCESS; for (p=mgr->factory_list.next; p!=&mgr->factory_list; p=p->next) { if (p->type == tpf->type) { /* * SHARK * attempted fix; if a type exists, simply * overwrite it instead of telling me it already exists * status = PJSIP_ETYPEEXISTS; * break; */ pj_list_insert_after(p, tpf); pj_list_erase(&p); pj_lock_release(mgr->lock); return status; } //rest of the function ommited However, I'm still facing the PJSIP_ETYPEEXISTS error and am somewhat clueless as to where it's coming from as if the patch didn't have any effect which leads me to believe i patched the wrong file or in the wrong place I have also read the archives about a similar-ish problem in a thread called "Multiple endpoints" in which a one-liner patch was attached by *Alain Totouom *which i cannot find... Would someone be able to nudge me in the right direction with this issue? Kind regards, happy new year and merry christmass holidays, Aleksandar -- 1024D/A9F85A52 2000-01-18 Alain Totouom <totouom@xxxxxx> PGP Fingerprint DA18 0DF2 FBD2 5F67 0656 452D E3A2 7531 A9F8 5A52 |
Index: pjsip/src/pjsip/sip_transport.c =================================================================== --- pjsip/src/pjsip/sip_transport.c (revision 5516) +++ pjsip/src/pjsip/sip_transport.c (working copy) @@ -1253,10 +1253,10 @@ pj_lock_acquire(mgr->lock); - /* Check that no factory with the same type has been registered. */ + /* Check that no factory with the same type, IP and port has been registered. */ status = PJ_SUCCESS; for (p=mgr->factory_list.next; p!=&mgr->factory_list; p=p->next) { - if (p->type == tpf->type) { + if (p->type == tpf->type && pj_sockaddr_cmp(&p->local_addr, &tpf->local_addr) == 0) { status = PJSIP_ETYPEEXISTS; break; }
_______________________________________________ Visit our blog: http://blog.pjsip.org pjsip mailing list pjsip@xxxxxxxxxxxxxxx http://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org