diff options
| author | Roxie Linden <roxie@lindenlab.com> | 2023-10-10 09:52:51 -0700 | 
|---|---|---|
| committer | Roxie Linden <roxie@lindenlab.com> | 2024-02-22 23:11:35 -0800 | 
| commit | f760869c913df0fe74c9f68eb7b8e22ca19b0b2a (patch) | |
| tree | 3d91d80f802ff44b4e1d286bc6d24b0df6874cf0 | |
| parent | c856a52477d0a50521a44f2d8255d5bde2ef39b4 (diff) | |
generate ice candidate with proper formatting
| -rw-r--r-- | indra/llwebrtc/llwebrtc.cpp | 41 | 
1 files changed, 39 insertions, 2 deletions
| diff --git a/indra/llwebrtc/llwebrtc.cpp b/indra/llwebrtc/llwebrtc.cpp index d8f2a6028c..b5b820e3da 100644 --- a/indra/llwebrtc/llwebrtc.cpp +++ b/indra/llwebrtc/llwebrtc.cpp @@ -683,6 +683,43 @@ void LLWebRTCImpl::OnConnectionChange(webrtc::PeerConnectionInterface::PeerConne      }  } +static std::string iceCandidateToTrickleString(const webrtc::IceCandidateInterface *candidate) +{ +    std::ostringstream candidate_stream; + +    candidate_stream << +        candidate->candidate().foundation() << " " << +        std::to_string(candidate->candidate().component()) << " " << +        candidate->candidate().protocol() << " " << +        std::to_string(candidate->candidate().priority()) << " " << +        candidate->candidate().address().ipaddr().ToString() << " " << +        candidate->candidate().address().PortAsString() << " typ "; +    if (candidate->candidate().type() == cricket::LOCAL_PORT_TYPE) +    { +        candidate_stream << "host"; +    } +    else if (candidate->candidate().type() == cricket::STUN_PORT_TYPE) +    { +        candidate_stream << "srflx " << +            "raddr " << candidate->candidate().related_address().ipaddr().ToString() << " " << +            "rport " << candidate->candidate().related_address().PortAsString(); +    } +    else if (candidate->candidate().type() == cricket::RELAY_PORT_TYPE) +    { +        candidate_stream << "relay " << +            "raddr " << candidate->candidate().related_address().ipaddr().ToString() << " " << +            "rport " << candidate->candidate().related_address().PortAsString(); +    } +    else if (candidate->candidate().type() == cricket::PRFLX_PORT_TYPE) +    { +        candidate_stream << "prflx " << +            "raddr " << candidate->candidate().related_address().ipaddr().ToString() << " " << +            "rport " << candidate->candidate().related_address().PortAsString(); +    } +     +    return candidate_stream.str(); +} +  void LLWebRTCImpl::OnIceCandidate(const webrtc::IceCandidateInterface *candidate)  {      RTC_LOG(LS_INFO) << __FUNCTION__ << " " << candidate->sdp_mline_index(); @@ -697,7 +734,7 @@ void LLWebRTCImpl::OnIceCandidate(const webrtc::IceCandidateInterface *candidate          for (auto &observer : mSignalingObserverList)          {              LLWebRTCIceCandidate ice_candidate; -            ice_candidate.candidate   = candidate->candidate().ToString(); +            ice_candidate.candidate   = iceCandidateToTrickleString(candidate);              ice_candidate.mline_index = candidate->sdp_mline_index();              ice_candidate.sdp_mid     = candidate->sdp_mid();              observer->OnIceCandidate(ice_candidate); @@ -781,7 +818,7 @@ void LLWebRTCImpl::OnSetRemoteDescriptionComplete(webrtc::RTCError error)          for (auto &candidate : mCachedIceCandidates)          {              LLWebRTCIceCandidate ice_candidate; -            ice_candidate.candidate   = candidate->candidate().ToString(); +            ice_candidate.candidate   = iceCandidateToTrickleString(candidate.get());              ice_candidate.mline_index = candidate->sdp_mline_index();              ice_candidate.sdp_mid     = candidate->sdp_mid();              observer->OnIceCandidate(ice_candidate); | 
