Ios 虹吸调用不';t工作-pjsip
因此,我有一个编译并运行的虹吸应用程序,但它只是不打电话。 我得到: 注册错误-默认错误消息 完全错误如下: 15:04:02.032 pjsua#U call.c与acc#0通话至sip:6476805821@voip5-2.acanac.com 15:04:02.032 pjsua_call.c.由于帐户无效,无法拨打电话:操作无效(PJ_EINVALIDOP)[状态=70013] 15:04:05.580 call.m发出呼叫时出错:操作无效(PJ_EINVALIDOP)[状态=70013] 但是,当我在不同的SIP应用程序上使用相同的帐户时,它工作得非常好 当pjsip使用uri调用sip\U拨号时(\U sip\U acc\U id,[url UTF8String],&call\U id) _sip_acc_id为0,因为我相信这是虹吸设置中的第0个帐户。 url是我试图拨打的正确电话号码,但显示如下内容: 抿:62304892@url.com 电话号码只是一个参考,所以我不知道它是否重要 当我看其他voip应用程序时,它们有一个注册过程。在其中输入用户名、密码和sip服务器域或ip 对于虹吸,这是在设置文件中完成的。然而,如果“注册或登录”是在虹吸的代码中完成的,我不确定。 这可能是问题所在吗 这是尝试进行实际调用的代码:Ios 虹吸调用不';t工作-pjsip,ios,sip,voip,pjsip,Ios,Sip,Voip,Pjsip,因此,我有一个编译并运行的虹吸应用程序,但它只是不打电话。 我得到: 注册错误-默认错误消息 完全错误如下: 15:04:02.032 pjsua#U call.c与acc#0通话至sip:6476805821@voip5-2.acanac.com 15:04:02.032 pjsua_call.c.由于帐户无效,无法拨打电话:操作无效(PJ_EINVALIDOP)[状态=70013] 15:04:05.580 call.m发出呼叫时出错:操作无效(PJ_EINVALIDOP)[状态=70013
/** FIXME plutôt à mettre dans l'objet qui gère les appels **/
-(void) dialup:(NSString *)phoneNumber number:(BOOL)isNumber
{
pjsua_call_id call_id;
pj_status_t status;
NSString *number;
UInt32 hasMicro, size;
// Verify if microphone is available (perhaps we should verify in another place ?)
size = sizeof(hasMicro);
AudioSessionGetProperty(kAudioSessionProperty_AudioInputAvailable,
&size, &hasMicro);
/*if (!hasMicro)
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"No Microphone Available", @"SiphonApp")
message:NSLocalizedString(@"Connect a microphone to phone", @"SiphonApp")
delegate:nil
cancelButtonTitle:NSLocalizedString(@"OK", @"SiphonApp")
otherButtonTitles:nil];
[alert show];
[alert release];
return;
}*/
if (isNumber)
number = [self normalizePhoneNumber:phoneNumber];
else
number = phoneNumber;
if ([[NSUserDefaults standardUserDefaults] boolForKey:@"removeIntlPrefix"])
{
number = [number stringByReplacingOccurrencesOfString:@"+"
withString:@""
options:0
range:NSMakeRange(0,1)];
}
else
{
NSString *prefix = [[NSUserDefaults standardUserDefaults] stringForKey:
@"intlPrefix"];
if ([prefix length] > 0)
{
number = [number stringByReplacingOccurrencesOfString:@"+"
withString:prefix
options:0
range:NSMakeRange(0,1)];
}
}
// Manage pause symbol
NSArray * array = [number componentsSeparatedByString:@","];
[callViewController setDtmfCmd:@""];
if ([array count] > 1)
{
number = [array objectAtIndex:0];
[callViewController setDtmfCmd:[array objectAtIndex:1]];
}
if (!isConnected && [self wakeUpNetwork] == NO)
{
_phoneNumber = [[NSString stringWithString: number] retain];
if (isIpod)
{
UIAlertView *alertView = [[[UIAlertView alloc] initWithTitle:nil
message:NSLocalizedString(@"You must enable Wi-Fi or SIP account to place a call.",@"SiphonApp")
delegate:nil
cancelButtonTitle:NSLocalizedString(@"OK",@"SiphonApp")
otherButtonTitles:nil] autorelease];
[alertView show];
}
else
{
UIActionSheet *actionSheet = [[[UIActionSheet alloc] initWithTitle:NSLocalizedString(@"The SIP server is unreachable!",@"SiphonApp")
delegate:self
cancelButtonTitle:NSLocalizedString(@"Cancel",@"SiphonApp")
destructiveButtonTitle:nil
otherButtonTitles:NSLocalizedString(@"Cellular call",@"SiphonApp"),
nil] autorelease];
actionSheet.actionSheetStyle = UIActionSheetStyleDefault;
[actionSheet showInView: self.window];
}
return;
}
if ([self sipConnect])
{
NSRange range = [number rangeOfString:@"@"];
NSLog(@"%i", _sip_acc_id);
if (range.location != NSNotFound)
{
status = sip_dial_with_uri(_sip_acc_id, [[NSString stringWithFormat:@"sip:%@", number] UTF8String], &call_id);
}
else
status = sip_dial(_sip_acc_id, [number UTF8String], &call_id);
if (status != PJ_SUCCESS)
{
// FIXME
//[self displayStatus:status withTitle:nil];
const pj_str_t *str = pjsip_get_status_text(status);
NSString *msg = [[NSString alloc]
initWithBytes:str->ptr
length:str->slen
encoding:[NSString defaultCStringEncoding]];
[self displayError:msg withTitle:@"registration error"];
}
}
}
此外,如果任何人有一个虹吸应用程序的代码链接,更新,也许更好,我也会很感激
更多信息:
在call.m文件中,基本上调用:
status = pjsua_call_make_call(acc_id, &pj_uri, 0, NULL, NULL, call_id);
这里呢
acc_id=0
pj_uri=char*->“sip:6476805821@voip5-2.acanac.com“
pj_ssize_t->33
调用_id=803203976除非您发布代码片段以及错误输出(至少),否则您不可能获得任何有用的帮助。更多的上下文,如配置信息和网络的相关方面,将进一步提高您的机会
(我本想把这句话作为对这个问题的评论,但还没有必要的声誉。)我明白了。事实证明,虹吸应用程序没有注册该帐户。 以下代码很重要:
pj_status_t sip_connect(pj_pool_t *pool, pjsua_acc_id *acc_id)
{
// ID
acc_cfg.id.ptr = (char*) pj_pool_alloc(/*app_config.*/pool, PJSIP_MAX_URL_SIZE);
if (contactname && strlen(contactname))
acc_cfg.id.slen = pj_ansi_snprintf(acc_cfg.id.ptr, PJSIP_MAX_URL_SIZE,
"\"%s\"<sip:%s@%s>", contactname, uname, server);
else
acc_cfg.id.slen = pj_ansi_snprintf(acc_cfg.id.ptr, PJSIP_MAX_URL_SIZE,
"sip:%s@%s", uname, server);
if ((status = pjsua_verify_sip_url(acc_cfg.id.ptr)) != 0)
{
PJ_LOG(1,(THIS_FILE, "Error: invalid SIP URL '%s' in local id argument",
acc_cfg.id));
[app displayParameterError: @"Invalid value for username or server."];
return status;
}
// Registrar
acc_cfg.reg_uri.ptr = (char*) pj_pool_alloc(/*app_config.*/pool,
PJSIP_MAX_URL_SIZE);
acc_cfg.reg_uri.slen = pj_ansi_snprintf(acc_cfg.reg_uri.ptr,
PJSIP_MAX_URL_SIZE, "sip:%s", server);
if ((status = pjsua_verify_sip_url(acc_cfg.reg_uri.ptr)) != 0)
{
PJ_LOG(1,(THIS_FILE, "Error: invalid SIP URL '%s' in registrar argument",
acc_cfg.reg_uri));
[app displayParameterError: @"Invalid value for server parameter."];
return status;
}
...
more code here
...
}
在我的例子中,sip_acc_id不等于PJSUA_INVALID_id,因此sip_connect从未被调用
感谢所有试图在头脑中解决问题的人?:) 使用。这是我发现的最新版本,运行良好,请致电Receive。希望有帮助
/* */
- (BOOL)sipConnect
{
pj_status_t status;
if (![self sipStartup])
return FALSE;
//if ([self wakeUpNetwork] == NO)
// return NO;
NSLog(@"%i", _sip_acc_id);
//if (_sip_acc_id == PJSUA_INVALID_ID)
//{
self.networkActivityIndicatorVisible = YES;
if ((status = sip_connect(_app_config.pool, &_sip_acc_id)) != PJ_SUCCESS)
{
self.networkActivityIndicatorVisible = NO;
return FALSE;
}
//}
return TRUE;
}