すべての iOS アプリが IPV6 ネットワークで動作するという Apple の新しい要件により、完全に壊れた 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 )
}