【问题标题】:PJSIP iOS unable to resolve SRV record in IPV6 networkPJSIP iOS 无法解析 IPV6 网络中的 SRV 记录
【发布时间】:2016-05-18 18:27:10
【问题描述】:

由于苹果新要求所有 iOS 应用程序都应在 IPV6 网络中运行,我有一个基于 PJSIP 的 VOIP 客户端应用程序完全损坏。我正在尝试逐步解决问题。我首先要解决的问题是 SRV 分辨率。

我在我的应用程序中进行了这样的 srv 解析,但它失败了(超时/无结果)。我可以在同一 ipv6 网络中的 mac 上使用 dig 命令,它可以正确解析我尝试从 pjsip 执行的 SRV 记录。欢迎在此处输入有关用于 IPV6 的正确 API 的任何输入。

pj_dns_resolver*  m_pDnsResolver = NULL;

::pj_dns_resolver_create(
                &( m_cachingPool.Get( ).factory ),  // pf (pool factory)
                NULL,                               // name
                0,                                  // options - must be 0
                NULL,                               // timer - unused
                NULL,                               // ioqueue - unused
                &m_pDnsResolver ) );                // p_resolver

// Set the name server to be used ( nameServer is 8.8.8.8 )
const std::string localNameServer = nameServer;

pj_str_t servers[] = { ::pj_str( const_cast< char* >( localNameServer.c_str( ) ) ) };


::pj_dns_resolver_set_ns(
                m_pDnsResolver,
                1,          // count
                servers,
                NULL ) );   // ports

// Resolver start query method ( DomainName cannot be mentioned here. SRV resolution works fine in IPV4 network )

void StartQuery( const std::string& domainName )
{
    PJString name( domainName );

   ::pj_dns_resolver_start_query(
                m_pDnsResolver,             // resolver
                &( name.Get( ) ),           // name
                PJ_DNS_TYPE_SRV,            // type
                0,                          // options - must be 0
                &ResolverCallback,
                this,                       // user_data
                &m_pAsyncQuery )
}

【问题讨论】:

    标签: ios dns voip pjsip srv


    【解决方案1】:

    我也在做同样的事情。

    Apple 要求所有 iOS 开发人员使用 Mac 的网络共享测试他们的应用程序。该网络共享使用 NAT64:

    基于多线程和 PJSIP 自己的文档,PJSIP 在 NAT 环境中尚不支持 IPv6。

    参考1.: https://trac.pjsip.org/repos/wiki/IPv6

    pjnath 中的 IPv6 支持(STUN 和 ICE)

    待办。

    在 pjnath 中添加 IPv6 支持的工作记录在票证 #422 中。

    Ref2.:http://lists.pjsip.org/pipermail/pjsip_lists.pjsip.org/2016-February/018965.html

    2016 年 1 月 29 日,04:49,Riza Sulistyo 写道:

    你好,尼克,

    我们在 (#419) 和 (#422) 有 ipv6 的开放票。 我们正在考虑将其中一张票的优先级提高到 2.6, 不过目前还没有决定。

    +

    你好,尼克,

    很遗憾,由于我们有解决方法,因此目前我们的路线图上没有对 DNS (ipv6) 的支持。 但是,如果您有兴趣实现它,我们对补丁持开放态度。

    +

    但似乎有一个解决方法:

    谢谢丽莎,

    通过解析服务器的 ipv6 地址并将其指定为代理,我已经能够让 pjsip 通过 ipv6 进行连接。

    我尝试使用完全相同版本的 PJSIP 库 (2.4.5),但是当我尝试以这种方式连接到我的服务器时遇到了一个断言。

    你可以这样连接吗?

    谢谢!

    【讨论】:

    • 我无法以这种方式连接。我现在的主要问题是 DNS SRV 解析,我能够通过使用苹果的 DNS 服务发现 API (Bonjour) 获得临时解决方法。网上有一个很好的实现。我跟着它,它似乎在 ipv6 环境中为我解析了 SRV 记录。让我知道这是否也适合您。 justanapplication.wordpress.com/category/ios/ios_api/dns_sd_api/…
    • 我正在使用 PJSIP 2.6。在这个版本中,我的应用程序只有在我提供 IPv6 地址时才能使用 IPv6。但如果我的 SIP 服务器不支持 IPv6 地址,则会面临问题。在这种情况下,有什么方法可以让我的应用获得苹果的批准?
    猜你喜欢
    • 1970-01-01
    • 2014-04-25
    • 2010-11-14
    • 1970-01-01
    • 1970-01-01
    • 2013-01-17
    • 1970-01-01
    • 2011-12-09
    • 1970-01-01
    相关资源
    最近更新 更多