Hi, Inside the incoming_calls_count(), the pjsua_call_get_info() may be called multiple times inside the loop, so please make sure all of them returning PJ_SUCCESS (not just the last call). Moreover, perhaps you can put a more detail log in incoming_calls_count(), e.g: call_count and each call state. Regards, nanang On Fri, Nov 28, 2008 at 8:34 PM, Alexei Kuznetsov <eofster at gmail.com> wrote: > Hi, > > I see, but incoming_calls_count() returns wrong result when > pjsua_call_get_info() returns PJ_SUCCESS: > >>>> 2008-11-27 02:16:47.648 Telephone[1813:10b] Incoming calls count: 0; status: 0 > > Here "status" is the return code of pjsua_call_get_info(). > > Alexei > > On Thu, Nov 27, 2008 at 6:19 PM, Nanang Izzuddin <nanang at pjsip.org> wrote: >> Hi, >> >> I'm just trying to rephrase 'examining return code of >> pjsua_call_get_info()'. Whenever a call on pjsua_call_get_info() >> returning non-PJ_SUCCESS, the call_info contents will be invalid, so >> the condition of (call_info.state == PJSIP_INV_STATE_INCOMING) will >> always be false, this might have caused incoming_calls_count() >> sometimes returning 0, which is suppossed to be 1. >> >> Regards, >> nanang >> >> >> On Thu, Nov 27, 2008 at 7:49 AM, Alexei Kuznetsov <eofster at gmail.com> wrote: >>> There is an update. First I'll give you more information of what I'm >>> doing all this time. Inside on_call_state() I make a function call, >>> let's name it post_notificaton(), on the main thread. Inside that >>> there is a call to incoming_calls_count(). If I'm not waiting for >>> post_notificaton() to return, everything goes as I described. >>> >>> But if I wait inside the thread of on_call_state() for >>> post_notificaton() to return, I'll get a deadlock at >>> pjsua_enum_calls(call_ids, &all_count); from incoming_calls_count(). >>> >>> Alexei >>> >>> On Thu, Nov 27, 2008 at 3:35 AM, Alexei Kuznetsov <eofster at gmail.com> wrote: >>>> Just tried. It always returns 0 after step 3 while >>>> incoming_calls_count() sometimes returns 0 and sometimes 1. But after >>>> step 5 the return code of pjsua_call_get_info() is 25354 (sometimes >>>> 25274). >>>> >>>> Example1: >>>> 02:16:45.325 AKTelephoneCal Call 0 state changed to CALLING >>>> 02:16:45.364 AKTelephoneCal Call 1 state changed to INCOMING >>>> 02:16:46.334 AKTelephoneCal Call 2 state changed to CALLING >>>> 02:16:46.376 AKTelephoneCal Call 3 state changed to INCOMING >>>> 02:16:47.447 AKTelephoneCal Call 3 is DISCONNECTED [reason = 603 (Decline)] >>>> 02:16:47.472 AKTelephoneCal Call 2 is DISCONNECTED [reason = 603 (Declined)] >>>> 2008-11-27 02:16:47.648 Telephone[1813:10b] Incoming calls count: 0; status: 0 >>>> 02:16:49.067 AKTelephoneCal Call 0 is DISCONNECTED [reason = 487 >>>> (Request Terminated)] >>>> 02:16:49.069 AKTelephoneCal Call 1 is DISCONNECTED [reason = 487 >>>> (Request Terminated)] >>>> 2008-11-27 02:16:49.109 Telephone[1813:10b] Incoming calls count: 0; >>>> status: 25354 >>>> >>>> Example 2: >>>> 03:22:27.789 AKTelephoneCal Call 0 state changed to CALLING >>>> 03:22:27.863 AKTelephoneCal Call 1 state changed to INCOMING >>>> 03:22:29.326 AKTelephoneCal Call 2 state changed to CALLING >>>> 03:22:29.384 AKTelephoneCal Call 3 state changed to INCOMING >>>> 03:22:29.384 AKTelephoneCal Incoming call for account 0! >>>> 03:22:30.932 AKTelephoneCal Call 0 is DISCONNECTED [reason = 487 >>>> (Request Terminated)] >>>> 03:22:30.934 AKTelephoneCal Call 1 is DISCONNECTED [reason = 487 >>>> (Request Terminated)] >>>> 2008-11-27 03:22:30.937 Telephone[2466:10b] Incoming calls count: 1; status: 0 >>>> 2008-11-27 03:22:30.938 Telephone[2466:10b] Error string: Success >>>> 03:22:31.548 AKTelephoneCal Call 2 is DISCONNECTED [reason = 487 >>>> (Request Terminated)] >>>> 03:22:31.549 AKTelephoneCal Call 3 is DISCONNECTED [reason = 487 >>>> (Request Terminated)] >>>> 2008-11-27 03:22:31.550 Telephone[2466:10b] Incoming calls count: 0; >>>> status: 25274 >>>> 2008-11-27 03:22:31.550 Telephone[2466:10b] Error string: Unknown error 25274 >>>> >>>> status is the return code of pjsua_call_get_info() inside >>>> incoming_calls_count(). >>>> >>>> Alexei >>>> >>>> On Wed, Nov 26, 2008 at 10:02 PM, Nanang Izzuddin <nanang at pjsip.org> wrote: >>>>> Hi, >>>>> >>>>> Sounds strange. Have you tried to examine the return code of >>>>> pjsua_call_get_info()? >>>>> >>>>> Regards, >>>>> nanang >>>>> >>>>> >>>>> On Wed, Nov 26, 2008 at 3:34 AM, Alexei Kuznetsov <eofster at gmail.com> wrote: >>>>>> Hi, >>>>>> >>>>>> I need to get the number of current calls in PJSIP_INV_STATE_INCOMING >>>>>> state. Here is how I'm trying to achieve that: >>>>>> >>>>>> unsigned incoming_calls_count() >>>>>> { >>>>>> pjsua_call_id call_ids[PJSUA_MAX_CALLS]; >>>>>> >>>>>> unsigned all_count; >>>>>> pjsua_enum_calls(call_ids, &all_count); >>>>>> >>>>>> unsigned incoming_count = 0; >>>>>> for (unsigned i = 0; i < all_count; ++i) { >>>>>> pjsua_call_info call_info; >>>>>> pjsua_call_get_info(call_ids[i], &call_info); >>>>>> >>>>>> if (call_info.state == PJSIP_INV_STATE_INCOMING) >>>>>> ++incoming_count; >>>>>> } >>>>>> >>>>>> return incoming_count; >>>>>> } >>>>>> >>>>>> I call this function on the main thread when any call enters >>>>>> disconnected state. But sometimes it doesn't return the actual number >>>>>> of incoming calls. >>>>>> >>>>>> For example: >>>>>> 1. first incoiming call received (not answered) >>>>>> 2. second incoming call received (not answered) >>>>>> 3. the user hangs up the second call or the call is disconnected by >>>>>> another party >>>>>> 4. incoming_calls_count() on the main thread sometimes returns 1 and sometimes 0 >>>>>> 5. first call is disconnected, incoming_calls_count() always returns 0 >>>>>> >>>>>> But if inside incoming_calls_count() I add a function call to log >>>>>> something to the console, incoming_calls_count() always returns >>>>>> correct value! >>>>>> >>>>>> What am I missing? Any threading issues? Is there a better way to do >>>>>> that? I'm using pjproject-1.0. >>>>>> >>>>>> Best regards, >>>>>> Alexei Kuznetsov > > _______________________________________________ > 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 >