summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoxie Linden <roxie@lindenlab.com>2024-05-02 11:07:36 -0700
committerRoxie Linden <roxie@lindenlab.com>2024-05-02 11:07:36 -0700
commit07c3095a785864b39b03d979d43b7d0d7a932a81 (patch)
tree07517bced047ae3f0fa2c6f08518c6b897be1146
parentf9cb9a2b057b2ebc2e1f5cbf479e56595c0fdfb8 (diff)
Unregister requested data channel when using the negotiated one.
When creating a new connection, the viewer builds a data channel interface. It then gets a new one, which is a proxy. The viewer uses the new one, and therefore must unregister the callbacks from the old one. Also, update the position data before sending it after the join is sent.
-rw-r--r--indra/llwebrtc/llwebrtc.cpp4
-rw-r--r--indra/newview/llvoicewebrtc.cpp6
-rw-r--r--indra/newview/llvoicewebrtc.h4
3 files changed, 11 insertions, 3 deletions
diff --git a/indra/llwebrtc/llwebrtc.cpp b/indra/llwebrtc/llwebrtc.cpp
index d07e6deea4..97c04ae446 100644
--- a/indra/llwebrtc/llwebrtc.cpp
+++ b/indra/llwebrtc/llwebrtc.cpp
@@ -957,6 +957,10 @@ void LLWebRTCPeerConnectionImpl::OnRemoveTrack(rtc::scoped_refptr<webrtc::RtpRec
void LLWebRTCPeerConnectionImpl::OnDataChannel(rtc::scoped_refptr<webrtc::DataChannelInterface> channel)
{
+ if (mDataChannel)
+ {
+ mDataChannel->UnregisterObserver();
+ }
mDataChannel = channel;
channel->RegisterObserver(this);
}
diff --git a/indra/newview/llvoicewebrtc.cpp b/indra/newview/llvoicewebrtc.cpp
index 0823358e03..7c438dfa9a 100644
--- a/indra/newview/llvoicewebrtc.cpp
+++ b/indra/newview/llvoicewebrtc.cpp
@@ -2688,7 +2688,11 @@ bool LLVoiceWebRTCConnection::connectionStateMachine()
{
sendJoin(); // tell the Secondlife WebRTC server that we're here via the data channel.
setVoiceConnectionState(VOICE_STATE_SESSION_UP);
- LLWebRTCVoiceClient::getInstance()->sendPositionUpdate(true);
+ if (isSpatial())
+ {
+ LLWebRTCVoiceClient::getInstance()->updatePosition();
+ LLWebRTCVoiceClient::getInstance()->sendPositionUpdate(true);
+ }
}
break;
}
diff --git a/indra/newview/llvoicewebrtc.h b/indra/newview/llvoicewebrtc.h
index af1efa5fe5..c417dfe329 100644
--- a/indra/newview/llvoicewebrtc.h
+++ b/indra/newview/llvoicewebrtc.h
@@ -201,7 +201,8 @@ public:
void OnConnectionFailure(const std::string &channelID,
const LLUUID &regionID,
LLVoiceClientStatusObserver::EStatusType status_type = LLVoiceClientStatusObserver::ERROR_UNKNOWN);
- void sendPositionUpdate(bool force);
+ void updatePosition(void); // update the internal position state
+ void sendPositionUpdate(bool force); // send the position to the voice server.
void updateOwnVolume();
//////////////////////////////
@@ -398,7 +399,6 @@ public:
/////////////////////////////
// Sending updates of current state
- void updatePosition(void);
void setListenerPosition(const LLVector3d &position, const LLVector3 &velocity, const LLQuaternion &rot);
void setAvatarPosition(const LLVector3d &position, const LLVector3 &velocity, const LLQuaternion &rot);