由于苹果要求所有 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 )
}