summaryrefslogtreecommitdiff
path: root/indra/newview/llvoicewebrtc.cpp
diff options
context:
space:
mode:
authorRoxie Linden <roxie@lindenlab.com>2024-02-06 19:12:14 -0800
committerRoxie Linden <roxie@lindenlab.com>2024-02-08 18:37:09 -0800
commit90efc71ef9f0fa43d6b3b8d2ebc8bda1556b669f (patch)
treef1f1894c537c1a5dcc4ef4de622b11ee28f7cb06 /indra/newview/llvoicewebrtc.cpp
parent49a1b4038f4852df17f574f1fb5b01c5b5ddafb4 (diff)
race between session established and data channel ready
Diffstat (limited to 'indra/newview/llvoicewebrtc.cpp')
-rw-r--r--indra/newview/llvoicewebrtc.cpp43
1 files changed, 30 insertions, 13 deletions
diff --git a/indra/newview/llvoicewebrtc.cpp b/indra/newview/llvoicewebrtc.cpp
index a6e26644b0..7b85795697 100644
--- a/indra/newview/llvoicewebrtc.cpp
+++ b/indra/newview/llvoicewebrtc.cpp
@@ -2843,9 +2843,23 @@ bool LLVoiceWebRTCConnection::connectionStateMachine()
mWebRTCAudioInterface->setReceiveVolume(mSpeakerVolume);
mWebRTCAudioInterface->setSendVolume(mMicGain);
LLWebRTCVoiceClient::getInstance()->OnConnectionEstablished(mChannelID, mRegionID);
- setVoiceConnectionState(VOICE_STATE_SESSION_UP);
+ setVoiceConnectionState(VOICE_STATE_WAIT_FOR_DATA_CHANNEL);
+ break;
+ }
+ case VOICE_STATE_WAIT_FOR_DATA_CHANNEL:
+ {
+ if (mShutDown)
+ {
+ setVoiceConnectionState(VOICE_STATE_DISCONNECT);
+ break;
+ }
+ if (mWebRTCDataInterface)
+ {
+ sendJoin();
+ setVoiceConnectionState(VOICE_STATE_SESSION_UP);
+ }
+ break;
}
- break;
case VOICE_STATE_SESSION_UP:
{
if (mShutDown)
@@ -3006,19 +3020,22 @@ void LLVoiceWebRTCConnection::OnDataChannelReady(llwebrtc::LLWebRTCDataInterface
{
mWebRTCDataInterface = data_interface;
mWebRTCDataInterface->setDataObserver(this);
+ }
+}
- Json::FastWriter writer;
- Json::Value root = Json::objectValue;
- Json::Value join_obj = Json::objectValue;
- LLUUID regionID = gAgent.getRegion()->getRegionID();
- if (regionID == mRegionID)
- {
- join_obj["p"] = true;
- }
- root["j"] = join_obj;
- std::string json_data = writer.write(root);
- mWebRTCDataInterface->sendData(json_data, false);
+void LLVoiceWebRTCConnection::sendJoin()
+{
+ Json::FastWriter writer;
+ Json::Value root = Json::objectValue;
+ Json::Value join_obj = Json::objectValue;
+ LLUUID regionID = gAgent.getRegion()->getRegionID();
+ if (regionID == mRegionID)
+ {
+ join_obj["p"] = true;
}
+ root["j"] = join_obj;
+ std::string json_data = writer.write(root);
+ mWebRTCDataInterface->sendData(json_data, false);
}
/////////////////////////////