2016-08-02 29 views
1

我正在開發iOS中的VOIP應用,我使用PJSIP庫。我使用普通IP或域名地址成功連接並撥打和接聽電話,這意味着只有一臺服務器。當我嘗試使用兩臺服務器連接DNS(域名系統)時,我正面臨一些錯誤。任何人都可以幫助我解決這個問題,並提供一些示例代碼如何連接到DNS。 這裏是我的代碼什麼都我想如何連接到SIP服務器與DNS域

char dns = "sample.com"; 
while (anObject = [enumerator nextObject]) 
{ 
    NSMutableString *mutableStr = [anObject mutableCopy]; 
    CFStringTrimWhitespace((CFMutableStringRef)mutableStr); 
    srv = [mutableStr UTF8String]; 
    if (srv && strlen(srv)) 
    { 

     if (app_config->cfg.nameserver_count==PJ_ARRAY_SIZE(app_config->cfg.nameserver)) 
     { 
     PJ_LOG(1,(THIS_FILE, "Error: too many DNS servers")); 
     [mutableStr release]; 
     break; 
     } 
     for (i=0; i<app_config->cfg.nameserver_count; ++i) { 
      pj_ansi_sprintf(line, "--nameserver %.*s\n",(int)app_config->cfg.nameserver[i].slen,app_config->cfg.nameserver[i].ptr); 
     } 
     pj_strdup2_with_null(app_config->pool, &(app_config->cfg.nameserver[app_config->cfg.nameserver_count++]), srv); 
    } 
    [mutableStr release]; 
} 

/* Initialize pjsua */ 
status = pjsua_init(&app_config->cfg, &app_config->log_cfg, &app_config->media_cfg); 
uname = "2000"; 
authname = [[[NSUserDefaults standardUserDefaults] stringForKey:@"authname"] UTF8String]; 
passwd = "abcdef"; 
sipServer = "sample.com"; 
pjsua_acc_config_default(&acc_cfg); 
acc_cfg.use_rfc5626 = PJ_FALSE; 
// 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:%[email protected]%s>", contactname, uname, sipServer); 
else 
    acc_cfg.id.slen = pj_ansi_snprintf(acc_cfg.id.ptr, PJSIP_MAX_URL_SIZE, 
            "sip:%[email protected]%s;transport=tcp;hide", uname, sipServer); 
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)); 
    return status; 
} 
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;transport=tcp;hide", sipServer); 
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)); 
    return status; 
} 

acc_cfg.cred_count = 1; 
acc_cfg.cred_info[0].scheme = pj_str("Digest"); 
acc_cfg.cred_info[0].realm = pj_str("*");//pj_str(realm); 
if (authname && strlen(authname)) 
    acc_cfg.cred_info[0].username = pj_str((char *)authname); 
else 
    acc_cfg.cred_info[0].username = pj_str((char *)uname); 
if ([[NSUserDefaults standardUserDefaults] boolForKey:@"enableMJ"]) 
    acc_cfg.cred_info[0].data_type = PJSIP_CRED_DATA_DIGEST; 
else 
    acc_cfg.cred_info[0].data_type = PJSIP_CRED_DATA_PLAIN_PASSWD; 
acc_cfg.cred_info[0].data = pj_str((char *)passwd); 
acc_cfg.publish_enabled = PJ_TRUE; 
#if defined(MWI) && MWI==1 
    acc_cfg.mwi_enabled = PJ_TRUE; 
#endif 
acc_cfg.allow_contact_rewrite = [[NSUserDefaults standardUserDefaults] boolForKey:@"enableNat"]; 
acc_cfg.reg_retry_interval = 300; 
acc_cfg.reg_timeout = 3600; 
if (acc_cfg.reg_timeout < 1 || acc_cfg.reg_timeout > 3600) 
{ 
    PJ_LOG(1,(THIS_FILE, "Error: invalid value for timeout (expecting 1-3600)")); 
    return PJ_EINVAL; 
} 
acc_cfg.ka_interval = 40; 
status = pjsua_acc_add(&acc_cfg, PJ_TRUE, acc_id); 

這裏是我得到我的控制檯響應。

2016-07-28 10:12:29.899 MYApp[266:39854] granted 
2016-07-28 10:12:29.904 MYApp[266:39854] -[Reachability isReachableViaWiFi] (632) 
Reachability Flags: -R ------- 
10:12:31.842 os_core_unix.c !pjlib 2.3 for POSIX initialized 
10:12:31.848 sip_endpoint.c .Creating endpoint instance... 
10:12:31.851   pjlib .select() I/O Queue created (0x17a75f34) 
10:12:31.852 sip_endpoint.c .Module "mod-msg-print" registered 
10:12:31.852 sip_transport. .Transport manager created. 
10:12:31.852 pjsua_core.c .PJSUA state changed: NULL --> CREATED 
2016-07-28 10:12:31.856 MYApp[266:39854] RESOLVED 0:<192.168.0.1> 
2016-07-28 10:12:31.856 MYApp[266:39854] RESOLVED 1:<192.168.0.2> 
10:12:37.822 sip_endpoint.c .Module "mod-pjsua-log" registered 
10:12:37.826 pjsua_core.c .Nameserver sample.com added 
10:12:37.826 sip_endpoint.c .Module "mod-tsx-layer" registered 
10:12:37.826 sip_endpoint.c .Module "mod-stateful-util" registered 
10:12:37.826 sip_endpoint.c .Module "mod-ua" registered 
10:12:37.826 sip_endpoint.c .Module "mod-100rel" registered 
10:12:37.826 sip_endpoint.c .Module "mod-pjsua" registered 
10:12:37.827 sip_endpoint.c .Module "mod-invite" registered 
10:12:37.871 coreaudio_dev. .. dev_id 0: iPhone IO device (in=1, out=1) 8000Hz 
10:12:37.871 coreaudio_dev. ..core audio initialized 
10:12:37.871   pjlib ..select() I/O Queue created (0x17a79214) 
10:12:37.901 sip_endpoint.c .Module "mod-evsub" registered 
10:12:37.901 sip_endpoint.c .Module "mod-presence" registered 
10:12:37.901 sip_endpoint.c .Module "mod-mwi" registered 
10:12:37.901 sip_endpoint.c .Module "mod-refer" registered 
10:12:37.901 sip_endpoint.c .Module "mod-pjsua-pres" registered 
10:12:37.901 sip_endpoint.c .Module "mod-pjsua-im" registered 
10:12:37.901 sip_endpoint.c .Module "mod-pjsua-options" registered 
10:12:37.901 pjsua_core.c .1 SIP worker threads created 
10:12:37.901 pjsua_core.c .pjsua version 2.3 for initialized 
10:12:37.901 pjsua_core.c .PJSUA state changed: CREATED --> INIT 
10:12:37.903 pjsua_core.c SIP UDP socket reachable at 192.168.1.55:5060 
10:12:37.903 udp0x17a80200 SIP UDP transport started, published address is 192.168.1.55:5060 
10:12:37.904 tcplis:5060 SIP TCP listener ready for incoming connections at 192.168.1.55:5060 
10:12:37.904 tcplis:49851 SIP TCP listener ready for incoming connections at fe80::186d:af8f:4693:2b3d:49851 
10:12:37.905 pjsua_core.c SIP UDP socket reachable at fe80::186d:af8f:4693:2b3d:50425 
10:12:37.905 udpv60x1824be0 SIP UDP IPv6 transport started, published address is [fe80::186d:af8f:4693:2b3d]:50425 
10:12:37.905 pjsua_core.c PJSUA state changed: INIT --> STARTING 
10:12:37.905 sip_endpoint.c .Module "mod-unsolicited-mwi" registered 
10:12:37.905 pjsua_core.c .PJSUA state changed: STARTING --> RUNNING 
2016-07-28 10:12:43.307 MYApp[266:39854] There IS internet connection 
10:12:43.308 pjsua_acc.c Adding account: id=sip:[email protected];transport=tcp;hide 
10:12:43.308 pjsua_acc.c .Account sip:[email protected];transport=tcp;hide added with id 0 
10:12:43.308 pjsua_acc.c .Acc 0: setting registration.. 
10:12:43.308 pjsua_acc.c ..Warning: cannot use source TCP/TLS socket address for Contact when nameserver is configured. 
10:12:43.309 pjsua_acc.c ..Warning: cannot use source TCP/TLS socket address for Contact when nameserver is configured. 
10:12:43.309  resolver.c ...Transmitting 38 bytes to NS 0 (192.168.0.1:53): DNS SRV query for _sip._tcp.sample.com: Success 
10:12:43.309 pjsua_acc.c ..Acc 0: Registration sent 
10:12:45.311  resolver.c !Re-transmitting 38 bytes to NS 0 (192.168.0.1:53): DNS SRV query for _sip._tcp.sample.com: Success 
10:12:47.311  resolver.c Re-transmitting 38 bytes to NS 0 (192.168.0.1:53): DNS SRV query for _sip._tcp.sample.com: Success 
10:12:49.311  resolver.c Re-transmitting 38 bytes to NS 0 (192.168.0.1:53): DNS SRV query for _sip._tcp.sample.com: Success 
10:12:51.313  resolver.c Re-transmitting 38 bytes to NS 0 (192.168.0.1:53): DNS SRV query for _sip._tcp.sample.com: Success 
10:12:53.313 _sip._tcp.samp DNS SRV resolution failed for _sip._tcp.sample.com: Operation timed out (PJ_ETIMEDOUT) 
10:12:53.313 _sip._tcp.samp DNS SRV resolution failed for _sip._tcp.sample.com, trying resolving A record for vabsys.com 
10:12:53.314  resolver.c Transmitting 28 bytes to NS 0 (192.168.0.1:53): DNS A query for vabsys.com: Success 
10:12:55.314  resolver.c Re-transmitting 28 bytes to NS 0 (192.168.0.1:53): DNS A query for vabsys.com: Success 
10:12:57.315  resolver.c Error transmitting request: No working DNS nameserver (PJLIB_UTIL_EDNSNOWORKINGNS) 
10:12:57.315 _sip._tcp.samp DNS A record resolution failed: Operation timed out (PJ_ETIMEDOUT) 
10:12:57.315 sip_resolve.c DNS A record resolution failed: Operation timed out (PJ_ETIMEDOUT) 
10:12:57.315 tsx0x17a87664 Failed to send Request msg REGISTER/cseq=27562 (tdta0x18252000)! err=70009 (Operation timed out (PJ_ETIMEDOUT)) 
10:12:57.315 pjsua_acc.c ..SIP registration failed, status=503 (Operation timed out (PJ_ETIMEDOUT)) 
10:12:57.315 pjsua_acc.c ..Scheduling re-registration retry for acc 0 in 0 seconds.. 
2016-07-28 10:12:57.316 MYApp[266:39945] Status changed acc 0 Service Unavailable (503) 
10:12:57.318 pjsua_acc.c !Deleting account 0.. 
10:12:57.319 pjsua_acc.c .Account id 0 deleted 
10:12:57.319 pjsua_core.c Shutting down, flags=0... 
10:12:57.319 pjsua_core.c PJSUA state changed: RUNNING --> CLOSING 
10:12:57.325 pjsua_call.c .Hangup all calls.. 
10:12:57.325 pjsua_media.c .Call 0: deinitializing media.. 
10:12:57.325 pjsua_media.c .Call 1: deinitializing media.. 
10:12:57.325 pjsua_media.c .Call 2: deinitializing media.. 
10:12:57.325 pjsua_media.c .Call 3: deinitializing media.. 
10:12:57.325 pjsua_pres.c .Shutting down presence.. 
10:12:58.326 pjsua_core.c .Destroying... 
10:12:58.326 pjsua_media.c .Shutting down media.. 
10:12:58.440 sip_transactio .Stopping transaction layer module 
10:12:58.440 sip_transactio .Stopped transaction layer module 
10:12:58.440 sip_endpoint.c .Module "mod-unsolicited-mwi" unregistered 
10:12:58.440 sip_endpoint.c .Module "mod-pjsua-options" unregistered 
10:12:58.440 sip_endpoint.c .Module "mod-pjsua-im" unregistered 
10:12:58.440 sip_endpoint.c .Module "mod-pjsua-pres" unregistered 
10:12:58.440 sip_endpoint.c .Module "mod-pjsua" unregistered 
10:12:58.440 sip_endpoint.c .Module "mod-stateful-util" unregistered 
10:12:58.440 sip_endpoint.c .Module "mod-refer" unregistered 
10:12:58.440 sip_endpoint.c .Module "mod-mwi" unregistered 
10:12:58.440 sip_endpoint.c .Module "mod-presence" unregistered 
10:12:58.441 sip_endpoint.c .Module "mod-evsub" unregistered 
10:12:58.441 sip_endpoint.c .Module "mod-invite" unregistered 
10:12:58.441 sip_endpoint.c .Module "mod-100rel" unregistered 
10:12:58.441 sip_endpoint.c .Module "mod-ua" unregistered 
10:12:58.441 sip_transactio .Transaction layer module destroyed 
10:12:58.441 sip_endpoint.c .Module "mod-tsx-layer" unregistered 
10:12:58.441 sip_endpoint.c .Module "mod-msg-print" unregistered 
10:12:58.441 sip_endpoint.c .Module "mod-pjsua-log" unregistered 
10:12:58.444 tcplis:5060 .SIP TCP listener destroyed 

10:12:58.445 tcplis:49851 .SIP TCP listener destroyed 


10:12:58.445 sip_endpoint.c .Endpoint 0x17a75864 destroyed 


10:12:58.445 pjsua_core.c .PJSUA state changed: CLOSING --> NULL 



10:12:58.445 pjsua_core.c .PJSUA destroyed... 

請幫助我如何連接到DNS。提前致謝。

回答

0

它是固定的,上述代碼的工作並連接到所述名稱服務器。這個問題只與服務器端有關。現在雙方運作良好。感謝您寶貴的時間人。

+0

這並沒有真正回答這個問題。真正的問題是什麼? – FrankerZ

+0

我不知道服務器端的問題,我認爲他們改變了他們的配置。現在它改變了上面的代碼。 – svs

1

如果我看看你的日誌,PJSIP無法解析的DNS,因爲它不能從位於52.86.229.130的域名服務器得到解決IP地址。也許你可以嘗試在配置中添加另一個名稱服務器?

+1

我跟我的網絡人聊過,只有那邊有問題。現在它工作正常。感謝您的答覆。 – svs

1

1)雖然看起來不錯,但請確保您擁有的#define PJSIP_HAS_RESOLVER 1你請編譯時間標誌。 2)由於鮑勃指定它不能從位於52.86.229.130 3)你的域名服務器(52.86.229.130域名服務器得到一個解析的IP地址)響應,但來自服務器響應由路由器或網絡之間的封鎖。

所以回答可能對您的網絡連接而有所不同。

+0

我與我的網絡人員進行了一次談話,只有在那邊有問題。現在它工作正常。感謝您的答覆。 – svs