Pjsip answer call not working from main thread ios

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]


I am trying to with pjsip. Everything was working before but after i add some additional feature like showing a view controller for incoming call with username it is not able to accept the call.

If i put the accept function in the same same thread it was then its able to pick up the call. But after I switch to main thread to show some UI and come back when tapping the accept call button its not able to accept the call. What i meant by this is like below

- (void)acceptCall:(char *)callID _ :(pjsua_call_id)call_id {


    self.call_id = call_id;


    NSString *callid = [NSString stringWithUTF8String:callID];

    NSString *finalName;


    NSArray *arr = [callid componentsSeparatedByString:@" "];

    finalName = [arr[0] stringByReplacingOccurrencesOfString:@"\"" withString:@""];


    CXProviderConfiguration *configuration = [[CXProviderConfiguration alloc] initWithLocalizedName:@"SIP Phone"];

    configuration.supportsVideo = YES;

    configuration.maximumCallsPerCallGroup = 1;

    configuration.supportedHandleTypes = [NSSet setWithObject:@(CXHandleTypePhoneNumber)];

    _provider = [[CXProvider alloc] initWithConfiguration:configuration];

    [_provider setDelegate:self queue:nil];

    CXCallUpdate *update = [[CXCallUpdate alloc] init];

    update.hasVideo = YES;

    update.supportsDTMF = YES;

    update.remoteHandle = [[CXHandle alloc] initWithType:CXHandleTypeGeneric value:finalName];

    self.current_call_uuid = [[NSUUID alloc] init];

    self.thread = pj_thread_this();



    dispatch_async(dispatch_get_main_queue(), ^{

        NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];

        [dict setObject:finalName forKey:@"username"];

        [NSNotificationCenter.defaultCenter postNotificationName:@"ShowIncomingCallVC" object:NULL userInfo:dict];



When I am tapping the accept button there is another function in this file which is supposed to accept the call. This is a shared instance class I am using

-(void) handleIncomingCall:(int)statusCode {


    long *desc = 0;

    pj_thread_t *thisThread = pj_thread_this();

    pj_thread_register(pj_thread_get_name(self.thread), desc, &thisThread);


    pjsua_call_setting opt;




    opt.vid_cnt = 1;

    opt.aud_cnt = 1;


    pj_status_t status = pjsua_call_answer2(self.call_id, &opt, statusCode, NULL, NULL);

    if(status == PJ_SUCCESS) {

        NSLog(@"anuran call picked up from delegate");

        self.is_call_active = statusCode == 200 ? YES : NO;

    }else {

        NSLog(@"anuran call could not be picked up from delegate");




this handleIncomingCall function is called from MAIN THREAD as obviously but pjsip is not able to accept the call. The line

    if(status == PJ_SUCCESS) {

actually never reaches when I put breakpoint there. I am storing a instance of the CURRENT THREAD above as you can see when I am just about to move to MAIN THREAD but how can I use that to go back to that thread? Please help. Stuck for hour behind this.

Visit our blog: http://blog.pjsip.org

pjsip mailing list

[Index of Archives]     [Asterisk Users]     [Asterisk App Development]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [Linux API]
  Powered by Linux