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();
// FROM THIS POINT I MOVE TO MAIN THREAD TO SHOW THE VIEW CONTROLLER
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;
pjsua_call_setting_default(&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.