summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoxie Linden <roxie@lindenlab.com>2024-02-06 19:12:14 -0800
committerRoxie Linden <roxie@lindenlab.com>2024-02-22 23:11:37 -0800
commit6f4ee11ae942d331fcf57db7466989f90bb55ccf (patch)
tree992c47b7710103a6e71824065cefe64fa6801648
parent5a9f0488f458ade64e3a3f2388d5cd23092eed5d (diff)
race between session established and data channel ready
-rw-r--r--indra/llwebrtc/llwebrtc.cpp48
-rw-r--r--indra/newview/llvoicewebrtc.cpp43
-rw-r--r--indra/newview/llvoicewebrtc.h15
3 files changed, 53 insertions, 53 deletions
diff --git a/indra/llwebrtc/llwebrtc.cpp b/indra/llwebrtc/llwebrtc.cpp
index 06a5c3a085..ee85a254f2 100644
--- a/indra/llwebrtc/llwebrtc.cpp
+++ b/indra/llwebrtc/llwebrtc.cpp
@@ -476,40 +476,22 @@ void LLWebRTCImpl::OnDevicesUpdated()
void LLWebRTCImpl::setTuningMode(bool enable)
{
- mWorkerThread->BlockingCall(
- [this, enable]()
- {
- if (enable)
- {
-
- mTuningDeviceModule->StartRecording();
-
- if (mPeerDeviceModule)
- {
- mPeerDeviceModule->StopRecording();
- }
- }
- else
- {
- mTuningDeviceModule->StartRecording();
- if (mPeerDeviceModule)
- {
- mPeerDeviceModule->StartRecording();
- }
- }
- });
- for (auto& connection : mPeerConnections)
- {
- if (enable)
+ mSignalingThread->PostTask(
+ [this, enable]
{
- connection->enableSenderTracks(false);
- }
- else
- {
- connection->resetMute();
- }
- connection->enableReceiverTracks(!enable);
- }
+ for (auto &connection : mPeerConnections)
+ {
+ if (enable)
+ {
+ connection->enableSenderTracks(false);
+ }
+ else
+ {
+ connection->resetMute();
+ }
+ connection->enableReceiverTracks(!enable);
+ }
+ });
}
float LLWebRTCImpl::getTuningAudioLevel() { return -20 * log10f(mTuningAudioDeviceObserver->getMicrophoneEnergy()); }
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);
}
/////////////////////////////
diff --git a/indra/newview/llvoicewebrtc.h b/indra/newview/llvoicewebrtc.h
index 83cb3c7eef..16bcadb144 100644
--- a/indra/newview/llvoicewebrtc.h
+++ b/indra/newview/llvoicewebrtc.h
@@ -769,6 +769,7 @@ class LLVoiceWebRTCConnection :
void OnDataChannelReady(llwebrtc::LLWebRTCDataInterface *data_interface) override;
//@}
+ void sendJoin();
void sendData(const std::string &data);
virtual void processIceUpdates();
@@ -806,13 +807,13 @@ class LLVoiceWebRTCConnection :
VOICE_STATE_REQUEST_CONNECTION = 0x4,
VOICE_STATE_CONNECTION_WAIT = 0x8,
VOICE_STATE_SESSION_ESTABLISHED = 0x10,
- VOICE_STATE_SESSION_UP = 0x20,
- VOICE_STATE_SESSION_RETRY = 0x40,
- VOICE_STATE_DISCONNECT = 0x80,
- VOICE_STATE_WAIT_FOR_EXIT = 0x100,
- VOICE_STATE_SESSION_EXIT = 0x200,
- VOICE_STATE_SESSION_STOPPING = 0x3c0,
- VOICE_STATE_SESSION_WAITING = 0x10a
+ VOICE_STATE_WAIT_FOR_DATA_CHANNEL = 0x20,
+ VOICE_STATE_SESSION_UP = 0x40,
+ VOICE_STATE_SESSION_RETRY = 0x80,
+ VOICE_STATE_DISCONNECT = 0x100,
+ VOICE_STATE_WAIT_FOR_EXIT = 0x200,
+ VOICE_STATE_SESSION_EXIT = 0x400,
+ VOICE_STATE_SESSION_STOPPING = 0x780
} EVoiceConnectionState;
EVoiceConnectionState mVoiceConnectionState;