diff options
Diffstat (limited to 'indra/newview')
| -rw-r--r-- | indra/newview/llvoicewebrtc.cpp | 40 | ||||
| -rw-r--r-- | indra/newview/llvoicewebrtc.h | 7 | 
2 files changed, 37 insertions, 10 deletions
diff --git a/indra/newview/llvoicewebrtc.cpp b/indra/newview/llvoicewebrtc.cpp index 7743d6362a..c6e9d3d1ec 100644 --- a/indra/newview/llvoicewebrtc.cpp +++ b/indra/newview/llvoicewebrtc.cpp @@ -1269,6 +1269,35 @@ BOOL LLWebRTCVoiceClient::isSessionCallBackPossible(const LLUUID &session_id)  }  // Channel Management + +bool LLWebRTCVoiceClient::setSpatialChannel(const LLSD &channelInfo) +{ +    LL_INFOS("Voice") << "SetSpatialChannel " << channelInfo << LL_ENDL; +    LLViewerRegion *regionp = gAgent.getRegion(); +    if (!regionp) +    { +        return false; +    } +    LLParcel *parcel = LLViewerParcelMgr::getInstance()->getAgentParcel(); + +    // we don't really have credentials for a spatial channel in webrtc, +    // it's all handled by the sim. +    if (channelInfo.isMap() && channelInfo.has("channel_uri")) +    { +        bool allow_voice = !channelInfo["channel_uri"].asString().empty(); +        if (parcel) +        { +            parcel->setParcelFlag(PF_ALLOW_VOICE_CHAT, allow_voice); +            parcel->setParcelFlag(PF_USE_ESTATE_VOICE_CHAN, channelInfo["channel_uri"].asUUID() == regionp->getRegionID()); +        } +        else +        { +            regionp->setRegionFlag(REGION_FLAGS_ALLOW_VOICE, allow_voice); +        } +    } +    return true; +} +  void LLWebRTCVoiceClient::leaveNonSpatialChannel()  {      LL_DEBUGS("Voice") << "Request to leave non-spatial channel." << LL_ENDL; @@ -2116,7 +2145,7 @@ void LLVoiceWebRTCConnection::OnIceCandidate(const llwebrtc::LLWebRTCIceCandidat  void LLVoiceWebRTCConnection::processIceUpdates()  {      mOutstandingRequests++; -    LLCoros::getInstance()->launch("LLVoiceWebRTCConnection::requestVoiceConnectionCoro", +    LLCoros::getInstance()->launch("LLVoiceWebRTCConnection::processIceUpdatesCoro",                                     boost::bind(&LLVoiceWebRTCConnection::processIceUpdatesCoro, this));  } @@ -2436,7 +2465,9 @@ void LLVoiceWebRTCSpatialConnection::requestVoiceConnection()      if (!regionp || !regionp->capabilitiesReceived())      {          LL_DEBUGS("Voice") << "no capabilities for voice provisioning; waiting " << LL_ENDL; -        setVoiceConnectionState(VOICE_STATE_SESSION_RETRY); + +        // try again. +        setVoiceConnectionState(VOICE_STATE_REQUEST_CONNECTION);          return;      } @@ -2988,8 +3019,9 @@ void LLVoiceWebRTCAdHocConnection::requestVoiceConnection()      LL_DEBUGS("Voice") << "Requesting voice connection." << LL_ENDL;      if (!regionp || !regionp->capabilitiesReceived())      { -        LL_DEBUGS("Voice") << "no capabilities for voice provisioning; waiting " << LL_ENDL; -        setVoiceConnectionState(VOICE_STATE_SESSION_RETRY); +        LL_DEBUGS("Voice") << "no capabilities for voice provisioning; retrying " << LL_ENDL; +        // try again. +        setVoiceConnectionState(VOICE_STATE_REQUEST_CONNECTION);          return;      } diff --git a/indra/newview/llvoicewebrtc.h b/indra/newview/llvoicewebrtc.h index aa3298ec1b..67e4a4ea6f 100644 --- a/indra/newview/llvoicewebrtc.h +++ b/indra/newview/llvoicewebrtc.h @@ -144,12 +144,7 @@ public:          startAdHocSession(channelInfo, notify_on_first_join, hangup_on_last_leave);      } -    bool setSpatialChannel(const LLSD &channelInfo) override -    { -        // we don't really have credentials for a spatial channel in webrtc, -        // it's all handled by the sim. -        return true; -    } +    bool setSpatialChannel(const LLSD &channelInfo) override;      void leaveNonSpatialChannel() override;  | 
