summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoxie Linden <roxie@lindenlab.com>2024-03-05 11:05:31 -0800
committerRoxie Linden <roxie@lindenlab.com>2024-03-05 11:05:31 -0800
commit6d5304bd921d765dfa7e1ab6d5d0e0b64dea11f1 (patch)
tree1294a623f992d561cd817ec549c19a79198879c1
parentf4c1e2e795f17ff57b75b774c02b5c9bb1c53901 (diff)
For webrtc, 'calling' dialog should remain up, disappearing when peer connects (p2p)
-rw-r--r--indra/newview/llimview.cpp20
-rw-r--r--indra/newview/llvoicechannel.cpp12
-rw-r--r--indra/newview/llvoicechannel.h5
-rw-r--r--indra/newview/llvoiceclient.cpp3
-rw-r--r--indra/newview/llvoiceclient.h6
-rw-r--r--indra/newview/llvoicevivox.cpp2
-rw-r--r--indra/newview/llvoicevivox.h1
-rw-r--r--indra/newview/llvoicewebrtc.cpp24
-rw-r--r--indra/newview/llvoicewebrtc.h12
9 files changed, 61 insertions, 24 deletions
diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp
index 43edaf3589..bc3bc4ca1d 100644
--- a/indra/newview/llimview.cpp
+++ b/indra/newview/llimview.cpp
@@ -474,7 +474,7 @@ void startP2PCoro(std::string url, LLUUID sessionID, LLUUID creatorId, LLUUID ot
if (!status)
{
- LL_WARNS("LLIMModel") << "Failed to start conference:" << postData << "->" << result << LL_ENDL;
+ LL_WARNS("LLIMModel") << "Failed to start p2p session:" << postData << "->" << result << LL_ENDL;
// try an "old school" way.
// *TODO: What about other error status codes? 4xx 5xx?
if (status == LLCore::HttpStatus(HTTP_BAD_REQUEST))
@@ -736,7 +736,7 @@ LLIMModel::LLIMSession::LLIMSession(const LLUUID& session_id,
else
{
p2pAsAdhocCall = true;
- mVoiceChannel = new LLVoiceChannelGroup(session_id, name, true);
+ mVoiceChannel = new LLVoiceChannelGroup(session_id, name, true, true);
}
}
else
@@ -745,12 +745,12 @@ LLIMModel::LLIMSession::LLIMSession(const LLUUID& session_id,
if (gAgent.isInGroup(mSessionID))
{
mSessionType = GROUP_SESSION;
- mVoiceChannel = new LLVoiceChannelGroup(session_id, name, false);
+ mVoiceChannel = new LLVoiceChannelGroup(session_id, name, false, false);
}
else
{
mSessionType = ADHOC_SESSION;
- mVoiceChannel = new LLVoiceChannelGroup(session_id, name, true);
+ mVoiceChannel = new LLVoiceChannelGroup(session_id, name, false, true);
}
}
@@ -2750,7 +2750,7 @@ BOOL LLIncomingCallDialog::postBuild()
LLUUID session_id = mPayload["session_id"].asUUID();
LLSD caller_id = mPayload["caller_id"];
- std::string caller_name = mPayload["caller_name"].asString();
+ std::string caller_name = mPayload["caller_name"].asString();
if (session_id.isNull() && caller_id.asUUID().isNull())
{
@@ -2899,6 +2899,10 @@ void LLIncomingCallDialog::processCallResponse(S32 response, const LLSD &payload
LLUUID session_id = payload["session_id"].asUUID();
LLUUID caller_id = payload["caller_id"].asUUID();
std::string session_name = payload["session_name"].asString();
+ if (session_name.empty())
+ {
+ session_name = payload["caller_name"].asString();
+ }
EInstantMessage type = (EInstantMessage)payload["type"].asInteger();
LLIMMgr::EInvitationType inv_type = (LLIMMgr::EInvitationType)payload["inv_type"].asInteger();
bool voice = true;
@@ -3315,7 +3319,9 @@ LLUUID LLIMMgr::addSession(
bool new_session = (LLIMModel::getInstance()->findIMSession(session_id) == NULL);
//works only for outgoing ad-hoc sessions
- if (new_session && IM_SESSION_CONFERENCE_START == dialog && ids.size())
+ if (new_session &&
+ ((IM_NOTHING_SPECIAL == dialog) || (IM_SESSION_P2P_INVITE == dialog) || (IM_SESSION_CONFERENCE_START == dialog)) &&
+ ids.size())
{
LLIMModel::LLIMSession* ad_hoc_found = LLIMModel::getInstance()->findAdHocIMSession(ids);
if (ad_hoc_found)
@@ -4111,7 +4117,7 @@ public:
}
BOOL session_type_p2p = input["body"]["voice"].get("invitation_type").asInteger() == EMultiAgentChatSessionType::P2P_CHAT_SESSION;
- LL_WARNS("Voice") << "VOICE DATA: " << input["body"]["voice"] << LL_ENDL;
+ LL_WARNS("Voice") << "VOICE DATA: " << input["body"]<< LL_ENDL;
gIMMgr->inviteToSession(
input["body"]["session_id"].asUUID(),
input["body"]["session_name"].asString(),
diff --git a/indra/newview/llvoicechannel.cpp b/indra/newview/llvoicechannel.cpp
index a009641a34..9303a09402 100644
--- a/indra/newview/llvoicechannel.cpp
+++ b/indra/newview/llvoicechannel.cpp
@@ -381,8 +381,12 @@ boost::signals2::connection LLVoiceChannel::setCurrentVoiceChannelChangedCallbac
// LLVoiceChannelGroup
//
-LLVoiceChannelGroup::LLVoiceChannelGroup(const LLUUID& session_id, const std::string& session_name, BOOL hangup_on_last_leave) :
- LLVoiceChannel(session_id, session_name),
+LLVoiceChannelGroup::LLVoiceChannelGroup(const LLUUID &session_id,
+ const std::string &session_name,
+ bool notify_on_first_join,
+ bool hangup_on_last_leave) :
+ LLVoiceChannel(session_id, session_name),
+ mNotifyOnFirstJoin(notify_on_first_join),
mHangupOnLastLeave(hangup_on_last_leave)
{
mRetries = DEFAULT_RETRIES_COUNT;
@@ -408,6 +412,7 @@ void LLVoiceChannelGroup::activate()
{
// we have the channel info, just need to use it now
LLVoiceClient::getInstance()->setNonSpatialChannel(mChannelInfo,
+ mNotifyOnFirstJoin,
mHangupOnLastLeave);
if (!gAgent.isInGroup(mSessionID)) // ad-hoc channel
@@ -484,6 +489,7 @@ void LLVoiceChannelGroup::setChannelInfo(const LLSD& channelInfo)
{
// we have the channel info, just need to use it now
LLVoiceClient::getInstance()->setNonSpatialChannel(channelInfo,
+ mNotifyOnFirstJoin,
mHangupOnLastLeave);
}
}
@@ -734,7 +740,7 @@ LLVoiceChannelP2P::LLVoiceChannelP2P(const LLUUID &session_id,
const std::string &session_name,
const LLUUID &other_user_id,
LLVoiceP2POutgoingCallInterface* outgoing_call_interface) :
- LLVoiceChannelGroup(session_id, session_name, true),
+ LLVoiceChannelGroup(session_id, session_name, true, true),
mOtherUserID(other_user_id),
mReceivedCall(FALSE),
mOutgoingCallInterface(outgoing_call_interface)
diff --git a/indra/newview/llvoicechannel.h b/indra/newview/llvoicechannel.h
index 7ddc6c3e27..21f6536b60 100644
--- a/indra/newview/llvoicechannel.h
+++ b/indra/newview/llvoicechannel.h
@@ -136,7 +136,7 @@ private:
class LLVoiceChannelGroup : public LLVoiceChannel
{
public:
- LLVoiceChannelGroup(const LLUUID& session_id, const std::string& session_name, BOOL hangup_on_last_leave);
+ LLVoiceChannelGroup(const LLUUID& session_id, const std::string& session_name, bool notify_on_first_join, bool hangup_on_last_leave);
void handleStatusChange(EStatusType status) override;
void handleError(EStatusType status) override;
@@ -153,7 +153,8 @@ private:
U32 mRetries;
BOOL mIsRetrying;
- BOOL mHangupOnLastLeave;
+ bool mHangupOnLastLeave;
+ bool mNotifyOnFirstJoin;
};
class LLVoiceChannelProximal : public LLVoiceChannel, public LLSingleton<LLVoiceChannelProximal>
diff --git a/indra/newview/llvoiceclient.cpp b/indra/newview/llvoiceclient.cpp
index 087c93a3f5..b642c43f34 100644
--- a/indra/newview/llvoiceclient.cpp
+++ b/indra/newview/llvoiceclient.cpp
@@ -427,6 +427,7 @@ bool LLVoiceClient::inProximalChannel()
void LLVoiceClient::setNonSpatialChannel(
const LLSD& channelInfo,
+ bool notify_on_first_join,
bool hangup_on_last_leave)
{
setNonSpatialVoiceModule(channelInfo["voice_server_type"].asString());
@@ -436,7 +437,7 @@ void LLVoiceClient::setNonSpatialChannel(
}
if (mNonSpatialVoiceModule)
{
- mNonSpatialVoiceModule->setNonSpatialChannel(channelInfo, hangup_on_last_leave);
+ mNonSpatialVoiceModule->setNonSpatialChannel(channelInfo, notify_on_first_join, hangup_on_last_leave);
mNonSpatialVoiceModule->processChannels(true);
}
}
diff --git a/indra/newview/llvoiceclient.h b/indra/newview/llvoiceclient.h
index 87b6469783..4c6cf92276 100644
--- a/indra/newview/llvoiceclient.h
+++ b/indra/newview/llvoiceclient.h
@@ -205,7 +205,8 @@ public:
virtual bool inProximalChannel()=0;
virtual void setNonSpatialChannel(const LLSD& channelInfo,
- bool hangup_on_last_leave = false)=0;
+ bool notify_on_first_join,
+ bool hangup_on_last_leave)=0;
virtual bool setSpatialChannel(const LLSD& channelInfo)=0;
@@ -407,7 +408,8 @@ public:
bool inProximalChannel();
void setNonSpatialChannel(const LLSD& channelInfo,
- bool hangup_on_last_leave = false);
+ bool notify_on_first_join,
+ bool hangup_on_last_leave);
void setSpatialChannel(const LLSD &channelInfo);
diff --git a/indra/newview/llvoicevivox.cpp b/indra/newview/llvoicevivox.cpp
index 4562dd89fc..529abff01b 100644
--- a/indra/newview/llvoicevivox.cpp
+++ b/indra/newview/llvoicevivox.cpp
@@ -4917,7 +4917,7 @@ void LLVivoxVoiceClient::joinSession(const sessionStatePtr_t &session)
}
}
-void LLVivoxVoiceClient::setNonSpatialChannel(const LLSD& channelInfo, bool hangup_on_last_leave)
+void LLVivoxVoiceClient::setNonSpatialChannel(const LLSD& channelInfo, bool notify_on_first_join, bool hangup_on_last_leave)
{
switchChannel(channelInfo["channel_uri"].asString(), false, false, false, channelInfo["channel_credentials"].asString());
}
diff --git a/indra/newview/llvoicevivox.h b/indra/newview/llvoicevivox.h
index 76d92e25eb..a141ac9465 100644
--- a/indra/newview/llvoicevivox.h
+++ b/indra/newview/llvoicevivox.h
@@ -147,6 +147,7 @@ public:
bool inProximalChannel() override;
void setNonSpatialChannel(const LLSD& channelInfo,
+ bool notify_on_first_join,
bool hangup_on_last_leave) override;
bool setSpatialChannel(const LLSD& channelInfo) override;
diff --git a/indra/newview/llvoicewebrtc.cpp b/indra/newview/llvoicewebrtc.cpp
index 093f0a6d29..77913ccdea 100644
--- a/indra/newview/llvoicewebrtc.cpp
+++ b/indra/newview/llvoicewebrtc.cpp
@@ -423,7 +423,10 @@ void LLWebRTCVoiceClient::OnConnectionEstablished(const std::string& channelID,
if (mSession && mSession->mChannelID == channelID)
{
LLWebRTCVoiceClient::getInstance()->notifyStatusObservers(LLVoiceClientStatusObserver::STATUS_LOGGED_IN);
- LLWebRTCVoiceClient::getInstance()->notifyStatusObservers(LLVoiceClientStatusObserver::STATUS_JOINED);
+ if (!mSession->mNotifyOnFirstJoin)
+ {
+ LLWebRTCVoiceClient::getInstance()->notifyStatusObservers(LLVoiceClientStatusObserver::STATUS_JOINED);
+ }
}
}
}
@@ -488,6 +491,7 @@ bool LLWebRTCVoiceClient::sessionState::processConnectionStates()
LLWebRTCVoiceClient::estateSessionState::estateSessionState()
{
mHangupOnLastLeave = false;
+ mNotifyOnFirstJoin = false;
mChannelID = "Estate";
LLUUID region_id = gAgent.getRegion()->getRegionID();
@@ -497,15 +501,20 @@ LLWebRTCVoiceClient::estateSessionState::estateSessionState()
LLWebRTCVoiceClient::parcelSessionState::parcelSessionState(const std::string &channelID, S32 parcel_local_id)
{
mHangupOnLastLeave = false;
+ mNotifyOnFirstJoin = false;
LLUUID region_id = gAgent.getRegion()->getRegionID();
mChannelID = channelID;
mWebRTCConnections.emplace_back(new LLVoiceWebRTCSpatialConnection(region_id, parcel_local_id, channelID));
}
-LLWebRTCVoiceClient::adhocSessionState::adhocSessionState(const std::string &channelID, const std::string& credentials, bool hangup_on_last_leave) :
+LLWebRTCVoiceClient::adhocSessionState::adhocSessionState(const std::string &channelID,
+ const std::string& credentials,
+ bool notify_on_first_join,
+ bool hangup_on_last_leave) :
mCredentials(credentials)
{
mHangupOnLastLeave = hangup_on_last_leave;
+ mNotifyOnFirstJoin = notify_on_first_join;
LLUUID region_id = gAgent.getRegion()->getRegionID();
mChannelID = channelID;
mWebRTCConnections.emplace_back(new LLVoiceWebRTCAdHocConnection(region_id, channelID, credentials));
@@ -1231,6 +1240,10 @@ LLWebRTCVoiceClient::participantStatePtr_t LLWebRTCVoiceClient::addParticipantBy
if (session)
{
result = session->addParticipant(id);
+ if (session->mNotifyOnFirstJoin && (id != gAgentID))
+ {
+ notifyStatusObservers(LLVoiceClientStatusObserver::STATUS_JOINED);
+ }
}
return result;
}
@@ -1269,13 +1282,16 @@ bool LLWebRTCVoiceClient::startParcelSession(const std::string &channelID, S32 p
return true;
}
-bool LLWebRTCVoiceClient::startAdHocSession(const LLSD& channelInfo, bool hangup_on_last_leave)
+bool LLWebRTCVoiceClient::startAdHocSession(const LLSD& channelInfo, bool notify_on_first_join, bool hangup_on_last_leave)
{
leaveChannel(false);
LL_WARNS("Voice") << "Start AdHoc Session " << channelInfo << LL_ENDL;
std::string channelID = channelInfo["channel_uri"];
std::string credentials = channelInfo["channel_credentials"];
- mNextSession = addSession(channelID, sessionState::ptr_t(new adhocSessionState(channelID, credentials, hangup_on_last_leave)));
+ mNextSession = addSession(channelID, sessionState::ptr_t(new adhocSessionState(channelID,
+ credentials,
+ notify_on_first_join,
+ hangup_on_last_leave)));
return true;
}
diff --git a/indra/newview/llvoicewebrtc.h b/indra/newview/llvoicewebrtc.h
index 104331f44e..46ca4e4eda 100644
--- a/indra/newview/llvoicewebrtc.h
+++ b/indra/newview/llvoicewebrtc.h
@@ -143,9 +143,9 @@ public:
// Note that gestures should only fire if this returns true.
bool inProximalChannel() override;
- void setNonSpatialChannel(const LLSD& channelInfo, bool hangup_on_last_leave) override
+ void setNonSpatialChannel(const LLSD& channelInfo, bool notify_on_first_join, bool hangup_on_last_leave) override
{
- startAdHocSession(channelInfo, hangup_on_last_leave);
+ startAdHocSession(channelInfo, notify_on_first_join, hangup_on_last_leave);
}
bool setSpatialChannel(const LLSD &channelInfo) override
@@ -388,6 +388,7 @@ public:
{ return mSessions.find(sessionID) != mSessions.end(); }
bool mHangupOnLastLeave;
+ bool mNotifyOnFirstJoin;
protected:
sessionState();
@@ -429,7 +430,10 @@ public:
class adhocSessionState : public sessionState
{
public:
- adhocSessionState(const std::string &channelID, const std::string& credentials, bool hangup_on_last_leave);
+ adhocSessionState(const std::string &channelID,
+ const std::string& credentials,
+ bool notify_on_first_join,
+ bool hangup_on_last_leave);
bool isSpatial() override { return false; }
bool isEstate() override { return false; }
@@ -603,7 +607,7 @@ private:
bool startEstateSession();
bool startParcelSession(const std::string& channelID, S32 parcelID);
- bool startAdHocSession(const LLSD &channelInfo, bool hangup_on_last_leave);
+ bool startAdHocSession(const LLSD &channelInfo, bool notify_on_first_join, bool hangup_on_last_leave);
std::string nameFromID(const LLUUID &id);
bool IDFromName(const std::string name, LLUUID &uuid);