summaryrefslogtreecommitdiff
path: root/indra
diff options
context:
space:
mode:
Diffstat (limited to 'indra')
-rw-r--r--indra/newview/llimview.cpp3
-rw-r--r--indra/newview/llimview.h9
-rw-r--r--indra/newview/llvoicechannel.cpp6
3 files changed, 15 insertions, 3 deletions
diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp
index be719c0a78..c5c412d4ee 100644
--- a/indra/newview/llimview.cpp
+++ b/indra/newview/llimview.cpp
@@ -1348,7 +1348,8 @@ void LLIncomingCallDialog::processCallResponse(S32 response)
session_id = gIMMgr->addP2PSession(
mPayload["session_name"].asString(),
mPayload["caller_id"].asUUID(),
- mPayload["session_handle"].asString());
+ mPayload["session_handle"].asString(),
+ mPayload["session_uri"].asString());
if (voice)
{
diff --git a/indra/newview/llimview.h b/indra/newview/llimview.h
index 40e3a8fb69..b2d3c6b921 100644
--- a/indra/newview/llimview.h
+++ b/indra/newview/llimview.h
@@ -277,11 +277,16 @@ public:
const LLUUID& other_participant_id,
const LLDynamicArray<LLUUID>& ids);
- // Creates a P2P session with the requisite handle for responding to voice calls
+ /**
+ * Creates a P2P session with the requisite handle for responding to voice calls.
+ *
+ * @param caller_uri - sip URI of caller. It should be always be passed into the method to avoid
+ * incorrect working of LLVoiceChannel instances. See EXT-2985.
+ */
LLUUID addP2PSession(const std::string& name,
const LLUUID& other_participant_id,
const std::string& voice_session_handle,
- const std::string& caller_uri = LLStringUtil::null);
+ const std::string& caller_uri);
/**
* Leave the session with session id. Send leave session notification
diff --git a/indra/newview/llvoicechannel.cpp b/indra/newview/llvoicechannel.cpp
index 3554528d19..a0396bc790 100644
--- a/indra/newview/llvoicechannel.cpp
+++ b/indra/newview/llvoicechannel.cpp
@@ -750,6 +750,8 @@ LLVoiceChannelP2P::LLVoiceChannelP2P(const LLUUID& session_id, const std::string
mReceivedCall(FALSE)
{
// make sure URI reflects encoded version of other user's agent id
+ // *NOTE: in case of Avaline call generated SIP URL will be incorrect.
+ // But it will be overridden in LLVoiceChannelP2P::setSessionHandle() called when agent accepts call
setURI(LLVoiceClient::getInstance()->sipURIFromID(other_user_id));
}
@@ -867,6 +869,10 @@ void LLVoiceChannelP2P::setSessionHandle(const std::string& handle, const std::s
}
else
{
+ LL_WARNS("Voice") << "incoming SIP URL is not provided. Channel may not work properly." << LL_ENDL;
+ // In case of incoming AvaLine call generated URI will be differ from original one.
+ // This is because Avatar-2-Avatar URI is based on avatar UUID but Avaline is not.
+ // See LLVoiceClient::sessionAddedEvent() -> setUUIDFromStringHash()
setURI(LLVoiceClient::getInstance()->sipURIFromID(mOtherUserID));
}