diff options
| author | Roxie Linden <roxie@lindenlab.com> | 2024-02-06 19:12:14 -0800 | 
|---|---|---|
| committer | Roxie Linden <roxie@lindenlab.com> | 2024-02-22 23:11:37 -0800 | 
| commit | 6f4ee11ae942d331fcf57db7466989f90bb55ccf (patch) | |
| tree | 992c47b7710103a6e71824065cefe64fa6801648 /indra/newview | |
| parent | 5a9f0488f458ade64e3a3f2388d5cd23092eed5d (diff) | |
race between session established and data channel ready
Diffstat (limited to 'indra/newview')
| -rw-r--r-- | indra/newview/llvoicewebrtc.cpp | 43 | ||||
| -rw-r--r-- | indra/newview/llvoicewebrtc.h | 15 | 
2 files changed, 38 insertions, 20 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);  }  ///////////////////////////// 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; | 
