Hi Tony, Yes, that's right, you will overwrite coreaudio_dev's callback and handle the interruption case at the application level. Regards, Ming On Fri, Feb 4, 2011 at 6:03 PM, Tony Million <tony at bababoo.com> wrote: > Hi Ming, > > I dont quite understand what you mean, wouldn't our AudioSession over-write the PJSIP one? > Sorry to ask, but can you explain this a little better? > > > > What we do in our app is: > > main > { > ? ? ? ?register callback handler for reachbility > } > > callback handler > { > ? ? ? ?(release resources if necessary) > ? ? ? ?pjsua_destroy(); > > ? ? ? ?if(connectable) > ? ? ? ?{ > ? ? ? ? ? ? ? ?.. obviously all the setup here > ? ? ? ? ? ? ? ?pjsua_init(); > > ? ? ? ? ? ? ? ?(alloc resources) > ? ? ? ? ? ? ? ?pjsua_start(); > ? ? ? ?} > } > > The callback handler is called for any network state change (that is wifi->wifi, wifi->3g wifi->no signal (and the same for all 3G states too)). So in this way when pjsua starts up again it is bound to the correctly connected network interface. Unless there is a method of telling pjsua to rebind to the active network interface that I have missed, this is the only way I have found to handle network transitions. > > > > Also, as a footnote since we are talking about reachability , there is still a compatibility in os_darwinos.h when including <SystemConfiguration/SystemConfiguration.h> the following diff will fix it > > Index: pjlib/include/pj/compat/os_darwinos.h > =================================================================== > --- pjlib/include/pj/compat/os_darwinos.h ? ? ? (revision 3410) > +++ pjlib/include/pj/compat/os_darwinos.h ? ? ? (working copy) > @@ -95,7 +95,10 @@ > ?/* > ?* Socket related > ?*/ > -typedef int socklen_t; > +#ifndef _SOCKLEN_T > +#define _SOCKLEN_T > +typedef ? ? ? ?__darwin_socklen_t ? ? ?socklen_t; > +#endif > > ?/* Set 1 if native sockaddr_in has sin_len member. > ?* Default: 0 > > > > > Regards, > -- > Tony Million > Chief Technology Officer - Bababoo Inc > Web: http://www.bababoo.com/ > Tel: +44 20 7993 9152 > Twitter: @bababoo > > On 4 Feb 2011, at 09:09, Ming wrote: > >> Hi Tony, >> >> In the case that you need to restart pjsua, you will need to create >> your own interruptionListener handler. You can do this by calling >> AudioSessionInitialize() before coreaudio calls this function. >> >> Regards, >> Ming >> >> On Thu, Feb 3, 2011 at 4:22 PM, Tony Million <tony at bababoo.com> wrote: >>> I've investigated more, and found the following: >>> When our app detects a change in network (i.e. changing from wifi to 3G or >>> wifi->different wifi, or even losing signal entirely) we shutdown pjsip >>> using pjsua_destroy() then, if/when a network is available we reinitialize >>> pjsua using the same startup code we used in the first instance. >>> When restarting pjsua I see the following error: >>> ?08:13:52.942 sip_endpoint.c ?Module "mod-invite" registered >>> ?08:13:52.942 coreaudio_dev. ? dev_id 0: iPhone IO device ?(in=1, out=1) >>> 8000Hz >>> ?08:13:52.942 coreaudio_dev. ?Error: cannot initialize audio session >>> services (1768843636) >>> ?08:13:52.943 coreaudio_dev. ?core audio initialized >>> ?08:13:52.943 ? ? ? ? ?pjlib ?select() I/O Queue created (0x9dba14) >>> ?08:13:52.979 sip_endpoint.c ?Module "mod-evsub" registered >>> >>> At this point, when I go to make a cellular call, I'll see the same crash I >>> pasted (pasted again for completeness >>> ?08:14:57.383 coreaudio_dev. ?Session interrupted! --- Begin Interruption >>> --- >>> Assertion failed: (mutex), function pj_mutex_lock, file >>> ../src/pj/os_core_unix.c, line 1203. >>> Program received signal: ??SIGABRT?. >>> At >>> As far as I know the only way to get pjsua to work correctly with the new >>> network interface (be it the 3G WWAN or WIFI Network) is to call >>> pjsua_destroy and then start up pjsua again. If this is incorrect I'm happy >>> to change my code. If I do not shutdown/restart pjsua eventually I just >>> start getting 502 (Timeout) responses from pjsua. >>> >>> Hope this helps, >>> Tony >>> On 3 Feb 2011, at 05:06, Ming wrote: >>> >>> Hi Tony, >>> >>> Thanks for the report. Is the crash always reproducible (i.e. does it >>> happen every time you make a call)? >>> Do you set up your own audio session interruptions in your >>> application? Is there any log message from PJSIP on audio session >>> initialization error (Error: cannot initialize audio session >>> services...)? >>> >>> Regards, >>> Ming >>> >>> On Thu, Feb 3, 2011 at 2:24 AM, Tony Million <tony at bababoo.com> wrote: >>> >>> Hi, >>> >>> I've been seeing crashes related to audio session interruptions on the >>> >>> iphone for a while, and just got one while the app is connected to a >>> >>> debugger. >>> >>> I've attached the logs, I had made a call on cellular and just switched back >>> >>> to the PJSip based app. >>> >>> I have numerous crash logs showing the same thing but today is the first day >>> >>> I could catch it in the debugger. Don't know if this helps, I'm running >>> >>> current trunk. >>> >>> ?18:08:27.718 coreaudio_dev. ?Session interrupted! --- Begin Interruption >>> >>> --- >>> >>> Assertion failed: (mutex), function pj_mutex_lock, file >>> >>> ../src/pj/os_core_unix.c, line 1203. >>> >>> Program received signal: ??SIGABRT?. >>> >>> (gdb) bt >>> >>> #0 ?0x33bd52d4 in __kill () >>> >>> #1 ?0x33bd52ca in kill () >>> >>> #2 ?0x33bd52bc in raise () >>> >>> #3 ?0x33be9d78 in abort () >>> >>> #4 ?0x33bd7986 in __assert_rtn () >>> >>> #5 ?0x00076258 in pj_mutex_lock () >>> >>> #6 ?0x000aa114 in interruptionListener () >>> >>> #7 ?0x31730772 in SSServer_AudioSessionDeferredListenerMessage () >>> >>> #8 ?0x316ddf2e in _XAudioSessionDeferredListenerMessage () >>> >>> #9 ?0x31677bea in mshMIGPerform () >>> >>> #10 0x33a556fe in __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ >>> >>> () >>> >>> #11 0x33a556c2 in __CFRunLoopDoSource1 () >>> >>> #12 0x33a47f7c in __CFRunLoopRun () >>> >>> #13 0x33a47c86 in CFRunLoopRunSpecific () >>> >>> #14 0x33a47b8e in CFRunLoopRunInMode () >>> >>> #15 0x33b0e4aa in GSEventRunModal () >>> >>> #16 0x33b0e556 in GSEventRun () >>> >>> #17 0x32099328 in -[UIApplication _run] () >>> >>> #18 0x32096e92 in UIApplicationMain () >>> >>> #19 0x00002cbc in main (argc=1, argv=0x2fdff67c) at >>> >>> /Users/tony/Projects/IOS/main.m:14 >>> >>> >>> Regards, >>> >>> -- >>> >>> Tony Million >>> >>> _______________________________________________ >>> >>> Visit our blog: http://blog.pjsip.org >>> >>> pjsip mailing list >>> >>> pjsip at lists.pjsip.org >>> >>> http://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org >>> >>> >>> >>> _______________________________________________ >>> Visit our blog: http://blog.pjsip.org >>> >>> pjsip mailing list >>> pjsip at lists.pjsip.org >>> http://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org >>> >>> >>> _______________________________________________ >>> Visit our blog: http://blog.pjsip.org >>> >>> pjsip mailing list >>> pjsip at lists.pjsip.org >>> http://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org >>> >>> >> >> _______________________________________________ >> Visit our blog: http://blog.pjsip.org >> >> pjsip mailing list >> pjsip at lists.pjsip.org >> http://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org > > > _______________________________________________ > Visit our blog: http://blog.pjsip.org > > pjsip mailing list > pjsip at lists.pjsip.org > http://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org >