From bc31cc2c15c2d5cd32b1987ae7d3a086734b9a03 Mon Sep 17 00:00:00 2001 From: Fletcher Dunn Date: Thu, 21 May 2026 21:57:27 -0700 Subject: [PATCH] ICE client supports IPv6 server reflexive candidates (cherry picked from commit 491d224f104ac8b4e36a659ab6fcf698626b3912) --- .../steamnetworkingsockets_ice_client.cpp | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/steamnetworkingsockets/clientlib/steamnetworkingsockets_ice_client.cpp b/src/steamnetworkingsockets/clientlib/steamnetworkingsockets_ice_client.cpp index 7952bed..6a7e76e 100644 --- a/src/steamnetworkingsockets/clientlib/steamnetworkingsockets_ice_client.cpp +++ b/src/steamnetworkingsockets/clientlib/steamnetworkingsockets_ice_client.cpp @@ -1560,8 +1560,6 @@ void CSteamNetworkingICESession::Think_DiscoverServerReflexiveCandidates() { if ( c.m_type != kICECandidateType_Host ) continue; - if ( !c.m_base.IsIPv4() ) - continue; // Do we have a server-reflexive candidate for this host already? bool bFound = false; if ( !bFound ) @@ -1589,12 +1587,25 @@ void CSteamNetworkingICESession::Think_DiscoverServerReflexiveCandidates() if ( bFound ) continue; + // Find first STUN server matching this candidate's address family + const SteamNetworkingIPAddr *pSTUNServer = nullptr; + for ( const SteamNetworkingIPAddr &srv : m_vecSTUNServers ) + { + if ( srv.IsIPv4() == c.m_base.IsIPv4() ) + { + pSTUNServer = &srv; + break; + } + } + if ( !pSTUNServer ) + continue; + IRawUDPSocket * const pSocket = FindSocketForCandidate( c.m_base ); // No socket for this candidate? if ( pSocket == nullptr ) continue; - CSteamNetworkingSocketsSTUNRequest *pNewRequest = CSteamNetworkingSocketsSTUNRequest::SendBindRequest( pSocket, m_vecSTUNServers[0], CRecvSTUNPktCallback( StaticSTUNRequestCallback_ServerReflexiveCandidate, this ), m_nEncoding | kSTUNPacketEncodingFlags_MappedAddress ); + CSteamNetworkingSocketsSTUNRequest *pNewRequest = CSteamNetworkingSocketsSTUNRequest::SendBindRequest( pSocket, *pSTUNServer, CRecvSTUNPktCallback( StaticSTUNRequestCallback_ServerReflexiveCandidate, this ), m_nEncoding | kSTUNPacketEncodingFlags_MappedAddress ); if ( pNewRequest != nullptr ) { m_vecPendingServerReflexiveRequests.push_back( pNewRequest );