summaryrefslogtreecommitdiff
path: root/indra/newview/llvoicevivox.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview/llvoicevivox.cpp')
-rw-r--r--indra/newview/llvoicevivox.cpp664
1 files changed, 429 insertions, 235 deletions
diff --git a/indra/newview/llvoicevivox.cpp b/indra/newview/llvoicevivox.cpp
index 25df528d89..838de48308 100644
--- a/indra/newview/llvoicevivox.cpp
+++ b/indra/newview/llvoicevivox.cpp
@@ -88,22 +88,27 @@ namespace {
static const std::string VOICE_SERVER_TYPE = "Vivox";
// Don't retry connecting to the daemon more frequently than this:
- const F32 CONNECT_THROTTLE_SECONDS = 1.0f;
+ const F32 DAEMON_CONNECT_THROTTLE_SECONDS = 1.0f;
// Don't send positional updates more frequently than this:
const F32 UPDATE_THROTTLE_SECONDS = 0.5f;
- const F32 LOGIN_ATTEMPT_TIMEOUT = 5.0f;
- const int LOGIN_RETRY_MAX = 5;
- const F32 LOGIN_RETRY_TIMEOUT = 4.0f;
+ // Timeout for connection to Vivox
+ const F32 CONNECT_ATTEMPT_TIMEOUT = 300.0f;
+ const F32 CONNECT_DNS_TIMEOUT = 5.0f;
+ const int CONNECT_RETRY_MAX = 3;
+
+ const F32 LOGIN_ATTEMPT_TIMEOUT = 30.0f;
+ const int LOGIN_RETRY_MAX = 3;
- const int PROVISION_RETRY_MAX = 5;
const F32 PROVISION_RETRY_TIMEOUT = 2.0;
+ const int PROVISION_RETRY_MAX = 5;
// Cosine of a "trivially" small angle
- const F32 MINUSCULE_ANGLE_COS = 0.999f;
+ const F32 FOUR_DEGREES = 4.0f * (F_PI / 180.0f);
+ const F32 MINUSCULE_ANGLE_COS = (F32) cos(0.5f * FOUR_DEGREES);
- const F32 SESSION_JOIN_TIMEOUT = 10.0f;
+ const F32 SESSION_JOIN_TIMEOUT = 30.0f;
// Defines the maximum number of times(in a row) "stateJoiningSession" case for spatial channel is reached in stateMachine()
// which is treated as normal. The is the number of frames to wait for a channel join before giving up. This was changed
@@ -148,6 +153,96 @@ class LLVivoxVoiceClientMuteListObserver : public LLMuteListObserver
};
+void LLVoiceVivoxStats::reset()
+{
+ mStartTime = -1.0f;
+ mConnectCycles = 0;
+ mConnectTime = -1.0f;
+ mConnectAttempts = 0;
+ mProvisionTime = -1.0f;
+ mProvisionAttempts = 0;
+ mEstablishTime = -1.0f;
+ mEstablishAttempts = 0;
+}
+
+LLVoiceVivoxStats::LLVoiceVivoxStats()
+{
+ reset();
+}
+
+LLVoiceVivoxStats::~LLVoiceVivoxStats()
+{
+}
+
+void LLVoiceVivoxStats::connectionAttemptStart()
+{
+ if (!mConnectAttempts)
+ {
+ mStartTime = LLTimer::getTotalTime();
+ mConnectCycles++;
+ }
+ mConnectAttempts++;
+}
+
+void LLVoiceVivoxStats::connectionAttemptEnd(bool success)
+{
+ if ( success )
+ {
+ mConnectTime = (LLTimer::getTotalTime() - mStartTime) / USEC_PER_SEC;
+ }
+}
+
+void LLVoiceVivoxStats::provisionAttemptStart()
+{
+ if (!mProvisionAttempts)
+ {
+ mStartTime = LLTimer::getTotalTime();
+ }
+ mProvisionAttempts++;
+}
+
+void LLVoiceVivoxStats::provisionAttemptEnd(bool success)
+{
+ if ( success )
+ {
+ mProvisionTime = (LLTimer::getTotalTime() - mStartTime) / USEC_PER_SEC;
+ }
+}
+
+void LLVoiceVivoxStats::establishAttemptStart()
+{
+ if (!mEstablishAttempts)
+ {
+ mStartTime = LLTimer::getTotalTime();
+ }
+ mEstablishAttempts++;
+}
+
+void LLVoiceVivoxStats::establishAttemptEnd(bool success)
+{
+ if ( success )
+ {
+ mEstablishTime = (LLTimer::getTotalTime() - mStartTime) / USEC_PER_SEC;
+ }
+}
+
+LLSD LLVoiceVivoxStats::read()
+{
+ LLSD stats(LLSD::emptyMap());
+
+ stats["connect_cycles"] = LLSD::Integer(mConnectCycles);
+ stats["connect_attempts"] = LLSD::Integer(mConnectAttempts);
+ stats["connect_time"] = LLSD::Real(mConnectTime);
+
+ stats["provision_attempts"] = LLSD::Integer(mProvisionAttempts);
+ stats["provision_time"] = LLSD::Real(mProvisionTime);
+
+ stats["establish_attempts"] = LLSD::Integer(mEstablishAttempts);
+ stats["establish_time"] = LLSD::Real(mEstablishTime);
+
+ return stats;
+}
+
static LLVivoxVoiceClientMuteListObserver mutelist_listener;
static bool sMuteListListener_listening = false;
@@ -297,7 +392,10 @@ void LLVivoxVoiceClient::terminate()
// needs to be done manually here since we will not get another pass in
// coroutines... that mechanism is long since gone.
if (mIsLoggedIn)
+ {
logoutOfVivox(false);
+ }
+
if(mConnected)
{
breakVoiceConnection(false);
@@ -313,6 +411,8 @@ void LLVivoxVoiceClient::terminate()
void LLVivoxVoiceClient::cleanUp()
{
+ LL_DEBUGS("Voice") << LL_ENDL;
+
deleteAllSessions();
deleteAllVoiceFonts();
deleteVoiceFontTemplates();
@@ -329,7 +429,7 @@ const LLVoiceVersionInfo& LLVivoxVoiceClient::getVersion()
void LLVivoxVoiceClient::updateSettings()
{
- setVoiceEnabled(gSavedSettings.getBOOL("EnableVoiceChat"));
+ setVoiceEnabled(voiceEnabled());
setEarLocation(gSavedSettings.getS32("VoiceEarLocation"));
std::string inputDevice = gSavedSettings.getString("VoiceInputAudioDevice");
@@ -347,7 +447,7 @@ void LLVivoxVoiceClient::updateSettings()
bool LLVivoxVoiceClient::writeString(const std::string &str)
{
bool result = false;
-// LL_WARNS("LOW Voice") << "sending:\n" << str << LL_ENDL;
+ LL_DEBUGS("LOW Voice") << "sending:\n" << str << LL_ENDL;
if(mConnected)
{
@@ -356,7 +456,7 @@ bool LLVivoxVoiceClient::writeString(const std::string &str)
apr_size_t written = size;
//MARK: Turn this on to log outgoing XML
-// LL_DEBUGS("Voice") << "sending: " << str << LL_ENDL;
+ // LL_DEBUGS("Voice") << "sending: " << str << LL_ENDL;
// check return code - sockets will fail (broken, etc.)
err = apr_socket_send(
@@ -396,16 +496,15 @@ bool LLVivoxVoiceClient::writeString(const std::string &str)
void LLVivoxVoiceClient::connectorCreate()
{
std::ostringstream stream;
- std::string logpath = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, "");
- std::string loglevel = "0";
+ std::string logdir = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, "");
// Transition to stateConnectorStarted when the connector handle comes back.
- std::string savedLogLevel = gSavedSettings.getString("VivoxDebugLevel");
-
- if(savedLogLevel != "0")
- {
- LL_DEBUGS("Voice") << "creating connector with logging enabled" << LL_ENDL;
- }
+ std::string vivoxLogLevel = gSavedSettings.getString("VivoxDebugLevel");
+ if ( vivoxLogLevel.empty() )
+ {
+ vivoxLogLevel = "0";
+ }
+ LL_DEBUGS("Voice") << "creating connector with log level " << vivoxLogLevel << LL_ENDL;
stream
<< "<Request requestId=\"" << mCommandCookie++ << "\" action=\"Connector.Create.1\">"
@@ -414,10 +513,10 @@ void LLVivoxVoiceClient::connectorCreate()
<< "<Mode>Normal</Mode>"
<< "<ConnectorHandle>" << LLVivoxSecurity::getInstance()->connectorHandle() << "</ConnectorHandle>"
<< "<Logging>"
- << "<Folder>" << logpath << "</Folder>"
+ << "<Folder>" << logdir << "</Folder>"
<< "<FileNamePrefix>Connector</FileNamePrefix>"
<< "<FileNameSuffix>.log</FileNameSuffix>"
- << "<LogLevel>" << loglevel << "</LogLevel>"
+ << "<LogLevel>" << vivoxLogLevel << "</LogLevel>"
<< "</Logging>"
<< "<Application>" << LLVersionInfo::getChannel().c_str() << " " << LLVersionInfo::getVersion().c_str() << "</Application>"
//<< "<Application></Application>" //Name can cause problems per vivox.
@@ -474,9 +573,8 @@ void LLVivoxVoiceClient::setLoginInfo(
}
else if ( account_name != mAccountName )
{
- //TODO: error?
- LL_WARNS("Voice") << "Wrong account name! " << account_name
- << " instead of " << mAccountName << LL_ENDL;
+ LL_WARNS("Voice") << "Mismatched account name! " << account_name
+ << " instead of " << mAccountName << LL_ENDL;
}
else
{
@@ -487,6 +585,8 @@ void LLVivoxVoiceClient::setLoginInfo(
if( !debugSIPURIHostName.empty() )
{
+ LL_INFOS("Voice") << "Overriding account server based on VivoxDebugSIPURIHostName: "
+ << debugSIPURIHostName << LL_ENDL;
mVoiceSIPURIHostName = debugSIPURIHostName;
}
@@ -505,12 +605,17 @@ void LLVivoxVoiceClient::setLoginInfo(
// Use the development account server
mVoiceSIPURIHostName = "bhd.vivox.com";
}
+ LL_INFOS("Voice") << "Defaulting SIP URI host: "
+ << mVoiceSIPURIHostName << LL_ENDL;
+
}
std::string debugAccountServerURI = gSavedSettings.getString("VivoxDebugVoiceAccountServerURI");
if( !debugAccountServerURI.empty() )
{
+ LL_INFOS("Voice") << "Overriding account server based on VivoxDebugVoiceAccountServerURI: "
+ << debugAccountServerURI << LL_ENDL;
mVoiceAccountServerURI = debugAccountServerURI;
}
@@ -518,6 +623,8 @@ void LLVivoxVoiceClient::setLoginInfo(
{
// If the account server URI isn't specified, construct it from the SIP URI hostname
mVoiceAccountServerURI = "https://www." + mVoiceSIPURIHostName + "/api2/";
+ LL_INFOS("Voice") << "Inferring account server based on SIP URI Host name: "
+ << mVoiceAccountServerURI << LL_ENDL;
}
}
@@ -536,22 +643,27 @@ void LLVivoxVoiceClient::voiceControlCoro()
{
mIsCoroutineActive = true;
LLCoros::set_consuming(true);
-
+
+ while (gAgent.getTeleportState() != LLAgent::TELEPORT_NONE)
+ {
+ LL_INFOS("Voice") << "Suspending voiceControlCoro() due to teleport. Tuning: " << mTuningMode << ". Relog: " << mRelogRequested << LL_ENDL;
+ llcoro::suspendUntilTimeout(1.0);
+ }
+
do
{
- startAndConnectSession();
-
- if (mTuningMode)
- {
- performMicTuning();
- }
- else if (mVoiceEnabled)
+ if (startAndConnectSession())
{
- waitForChannel();
- }
+ if (mTuningMode)
+ {
+ performMicTuning();
+ }
+
+ waitForChannel(); // this doesn't normally return unless relog is needed or shutting down
- endAndDisconnectSession();
+ endAndDisconnectSession();
+ }
// if we hit this and mRelogRequested is true, that indicates
// that we attempted to relog into Vivox and were rejected.
@@ -559,7 +671,7 @@ void LLVivoxVoiceClient::voiceControlCoro()
// and then reconstruct the voice connecion from scratch.
if (mRelogRequested)
{
- while (isGatewayRunning())
+ while (isGatewayRunning() || gAgent.getTeleportState() != LLAgent::TELEPORT_NONE)
{
llcoro::suspendUntilTimeout(1.0);
}
@@ -572,24 +684,28 @@ void LLVivoxVoiceClient::voiceControlCoro()
bool LLVivoxVoiceClient::startAndConnectSession()
{
- if (!startAndLaunchDaemon())
- {
- return false;
- }
+ bool ok = false;
+ LL_DEBUGS("Voice") << LL_ENDL;
- if (!provisionVoiceAccount())
+ LLVoiceVivoxStats::getInstance()->reset();
+
+ if (startAndLaunchDaemon())
{
- giveUp();
- return false;
+ if (provisionVoiceAccount())
+ {
+ if (establishVoiceConnection())
+ {
+ ok = true;
+ }
+ }
}
- if (!establishVoiceConnection())
+ if (!ok)
{
giveUp();
- return false;
}
- return true;
+ return ok;
}
bool LLVivoxVoiceClient::endAndDisconnectSession()
@@ -618,13 +734,13 @@ bool LLVivoxVoiceClient::callbackEndDaemon(const LLSD& data)
bool LLVivoxVoiceClient::startAndLaunchDaemon()
{
//---------------------------------------------------------------------
- if (gSavedSettings.getBOOL("CmdLineDisableVoice"))
+ if (!voiceEnabled())
{
// Voice is locked out, we must not launch the vivox daemon.
return false;
}
- if (!isGatewayRunning() && gSavedSettings.getBOOL("EnableVoiceChat"))
+ if (!isGatewayRunning())
{
#ifndef VIVOXDAEMON_REMOTEHOST
// Launch the voice daemon
@@ -651,12 +767,10 @@ bool LLVivoxVoiceClient::startAndLaunchDaemon()
params.executable = exe_path;
std::string loglevel = gSavedSettings.getString("VivoxDebugLevel");
- std::string shutdown_timeout = gSavedSettings.getString("VivoxShutdownTimeout");
if (loglevel.empty())
{
- loglevel = "-1"; // turn logging off completely, was 0 for error level logging.
+ loglevel = "0";
}
-
params.args.add("-ll");
params.args.add(loglevel);
@@ -670,6 +784,7 @@ bool LLVivoxVoiceClient::startAndLaunchDaemon()
params.args.add("-lf");
params.args.add(log_folder);
+ std::string shutdown_timeout = gSavedSettings.getString("VivoxShutdownTimeout");
if (!shutdown_timeout.empty())
{
params.args.add("-st");
@@ -723,12 +838,11 @@ bool LLVivoxVoiceClient::startAndLaunchDaemon()
LL_DEBUGS("Voice") << "Connecting to vivox daemon:" << mDaemonHost << LL_ENDL;
- int connectAttempt = 0;
-
+ LLVoiceVivoxStats::getInstance()->reset();
while (!mConnected)
{
- ++connectAttempt;
- LL_DEBUGS("Voice") << "Connecting to vivox daemon:" << mDaemonHost << " (#" << connectAttempt << ")" << LL_ENDL;
+ LLVoiceVivoxStats::getInstance()->connectionAttemptStart();
+ LL_DEBUGS("Voice") << "Attempting to connect to vivox daemon: " << mDaemonHost << LL_ENDL;
closeSocket();
if (!mSocket)
{
@@ -736,10 +850,13 @@ bool LLVivoxVoiceClient::startAndLaunchDaemon()
}
mConnected = mSocket->blockingConnect(mDaemonHost);
+ LLVoiceVivoxStats::getInstance()->connectionAttemptEnd(mConnected);
if (!mConnected)
- llcoro::suspendUntilTimeout(CONNECT_THROTTLE_SECONDS);
+ {
+ llcoro::suspendUntilTimeout(DAEMON_CONNECT_THROTTLE_SECONDS);
+ }
}
-
+
//---------------------------------------------------------------------
llcoro::suspendUntilTimeout(UPDATE_THROTTLE_SECONDS);
@@ -776,13 +893,8 @@ bool LLVivoxVoiceClient::startAndLaunchDaemon()
bool LLVivoxVoiceClient::provisionVoiceAccount()
{
LL_INFOS("Voice") << "Provisioning voice account." << LL_ENDL;
- while (!gAgent.getRegion())
- {
- // *TODO* Set up a call back on agent that sends a message to a pump we can use to wake up.
- llcoro::suspend();
- }
- while (!gAgent.getRegion()->capabilitiesReceived())
+ while (!gAgent.getRegion() || !gAgent.getRegion()->capabilitiesReceived())
{
// *TODO* Pump a message for wake up.
llcoro::suspend();
@@ -798,9 +910,10 @@ bool LLVivoxVoiceClient::provisionVoiceAccount()
int retryCount(0);
LLSD result;
-
+ bool provisioned = false;
do
{
+ LLVoiceVivoxStats::getInstance()->provisionAttemptStart();
result = httpAdapter->postAndSuspend(httpRequest, url, LLSD(), httpOpts);
LLSD httpResults = result[LLCoreHttpUtil::HttpCoroutineAdapter::HTTP_RESULTS];
@@ -808,25 +921,28 @@ bool LLVivoxVoiceClient::provisionVoiceAccount()
if (status == LLCore::HttpStatus(404))
{
- if (++retryCount > PROVISION_RETRY_MAX)
- {
- LL_WARNS("Voice") << "Could not access voice provision cap after " << PROVISION_RETRY_MAX << " attempts." << LL_ENDL;
- return false;
- }
-
F32 timeout = pow(PROVISION_RETRY_TIMEOUT, static_cast<float>(retryCount));
LL_WARNS("Voice") << "Provision CAP 404. Retrying in " << timeout << " seconds." << LL_ENDL;
llcoro::suspendUntilTimeout(timeout);
-
- continue;
}
else if (!status)
{
LL_WARNS("Voice") << "Unable to provision voice account." << LL_ENDL;
+ LLVoiceVivoxStats::getInstance()->provisionAttemptEnd(false);
return false;
}
- break;
- } while (true);
+ else
+ {
+ provisioned = true;
+ }
+ } while (!provisioned && retryCount <= PROVISION_RETRY_MAX);
+
+ LLVoiceVivoxStats::getInstance()->provisionAttemptEnd(provisioned);
+ if (! provisioned )
+ {
+ LL_WARNS("Voice") << "Could not access voice provision cap after " << retryCount << " attempts." << LL_ENDL;
+ return false;
+ }
std::string voiceSipUriHostname;
std::string voiceAccountServerUri;
@@ -854,29 +970,68 @@ bool LLVivoxVoiceClient::establishVoiceConnection()
if (!mVoiceEnabled && mIsInitialized)
return false;
- connectorCreate();
-
LLSD result;
+ bool connected(false);
+ bool giving_up(false);
+ int retries = 0;
+ LL_INFOS("Voice") << "Requesting connection to voice service" << LL_ENDL;
+
+ LLVoiceVivoxStats::getInstance()->establishAttemptStart();
+ connectorCreate();
do
{
result = llcoro::suspendUntilEventOn(voiceConnectPump);
- LL_DEBUGS("Voice") << "event=" << ll_pretty_print_sd(result) << LL_ENDL;
- }
- while (!result.has("connector"));
+ LL_DEBUGS("Voice") << "event=" << ll_stream_notation_sd(result) << LL_ENDL;
+
+ if (result.has("connector"))
+ {
+ LLVoiceVivoxStats::getInstance()->establishAttemptEnd(connected);
+ connected = LLSD::Boolean(result["connector"]);
+ if (!connected)
+ {
+ if (result.has("retry") && ++retries <= CONNECT_RETRY_MAX)
+ {
+ F32 timeout = LLSD::Real(result["retry"]);
+ timeout *= retries;
+ LL_INFOS("Voice") << "Retry connection to voice service in " << timeout << " seconds" << LL_ENDL;
+ llcoro::suspendUntilTimeout(timeout);
+
+ if (mVoiceEnabled) // user may have switched it off
+ {
+ // try again
+ LLVoiceVivoxStats::getInstance()->establishAttemptStart();
+ connectorCreate();
+ }
+ else
+ {
+ // stop if they've turned off voice
+ giving_up = true;
+ }
+ }
+ else
+ {
+ giving_up=true;
+ }
+ }
+ }
+ LL_DEBUGS("Voice") << (connected ? "" : "not ") << "connected, "
+ << (giving_up ? "" : "not ") << "giving up"
+ << LL_ENDL;
+ } while (!connected && !giving_up);
- if (!result["connector"])
+ if (giving_up)
{
- return false;
+ LLSD args;
+ args["HOSTID"] = LLURI(mVoiceAccountServerURI).authority();
+ LLNotificationsUtil::add("NoVoiceConnect", args);
}
- if (!mVoiceEnabled && mIsInitialized)
- return false;
-
- return true;
+ return connected;
}
bool LLVivoxVoiceClient::breakVoiceConnection(bool corowait)
{
+ LL_DEBUGS("Voice") << LL_ENDL;
LLEventPump &voicePump = LLEventPumps::instance().obtain("vivoxClientPump");
bool retval(true);
@@ -886,7 +1041,7 @@ bool LLVivoxVoiceClient::breakVoiceConnection(bool corowait)
if (corowait)
{
LLSD result = llcoro::suspendUntilEventOn(voicePump);
- LL_DEBUGS("Voice") << "event=" << ll_pretty_print_sd(result) << LL_ENDL;
+ LL_DEBUGS("Voice") << "event=" << ll_stream_notation_sd(result) << LL_ENDL;
retval = result.has("connector");
}
@@ -926,15 +1081,15 @@ bool LLVivoxVoiceClient::loginToVivox()
do
{
-
mIsLoggingIn = true;
if (send_login)
+ {
loginSendMessage();
-
- send_login = false;
-
+ send_login = false;
+ }
+
LLSD result = llcoro::suspendUntilEventOnWithTimeout(voicePump, LOGIN_ATTEMPT_TIMEOUT, timeoutResult);
- LL_DEBUGS("Voice") << "event=" << ll_pretty_print_sd(result) << LL_ENDL;
+ LL_DEBUGS("Voice") << "event=" << ll_stream_notation_sd(result) << LL_ENDL;
if (result.has("login"))
{
@@ -942,39 +1097,31 @@ bool LLVivoxVoiceClient::loginToVivox()
if ((loginresp == "retry") || (loginresp == "timeout"))
{
- if ((!loginRetryCount) && (loginresp != "timeout"))
- { // on first retry notify user
- notifyStatusObservers(LLVoiceClientStatusObserver::STATUS_LOGIN_RETRY);
- }
-
- if ((++loginRetryCount > LOGIN_RETRY_MAX) || (loginresp == "timeout"))
+ LL_WARNS("Voice") << "login failed with status '" << loginresp << "' "
+ << " count " << loginRetryCount << "/" << LOGIN_RETRY_MAX
+ << LL_ENDL;
+ if (++loginRetryCount > LOGIN_RETRY_MAX)
{
- LL_WARNS("Voice") << "too many login retries or timeout connecting, giving up." << LL_ENDL;
+ // We've run out of retries - tell the user
+ LL_WARNS("Voice") << "too many login retries (" << loginRetryCount << "); giving up." << LL_ENDL;
LLSD args;
- std::stringstream errs;
- errs << mVoiceAccountServerURI << "\n:UDP: 3478, 3479, 5060, 5062, 12000-17000";
- args["HOSTID"] = errs.str();
+ args["HOSTID"] = LLURI(mVoiceAccountServerURI).authority();
mTerminateDaemon = true;
- if (LLGridManager::getInstance()->isSystemGrid())
- {
- LLNotificationsUtil::add("NoVoiceConnect", args);
- }
- else
- {
- LLNotificationsUtil::add("NoVoiceConnect-GIAB", args);
- }
+ LLNotificationsUtil::add("NoVoiceConnect", args);
mIsLoggingIn = false;
return false;
}
-
response_ok = false;
account_login = false;
send_login = true;
- F32 timeout = pow(LOGIN_RETRY_TIMEOUT, static_cast<float>(loginRetryCount)) - 1.0f;
+ // an exponential backoff gets too long too quickly; stretch it out, but not too much
+ F32 timeout = loginRetryCount * LOGIN_ATTEMPT_TIMEOUT;
- LL_INFOS("Voice") << "will retry login in " << timeout << " seconds." << LL_ENDL;
+ // tell the user there is a problem
+ LL_WARNS("Voice") << "login " << loginresp << " will retry login in " << timeout << " seconds." << LL_ENDL;
+
llcoro::suspendUntilTimeout(timeout);
}
else if (loginresp == "failed")
@@ -1031,7 +1178,7 @@ void LLVivoxVoiceClient::logoutOfVivox(bool wait)
LLSD result = llcoro::suspendUntilEventOnWithTimeout(voicePump, LOGIN_ATTEMPT_TIMEOUT, timeoutResult);
- LL_DEBUGS("Voice") << "event=" << ll_pretty_print_sd(result) << LL_ENDL;
+ LL_DEBUGS("Voice") << "event=" << ll_stream_notation_sd(result) << LL_ENDL;
if (result.has("logout"))
{
@@ -1055,7 +1202,7 @@ bool LLVivoxVoiceClient::retrieveVoiceFonts()
{
result = llcoro::suspendUntilEventOn(voicePump);
- LL_DEBUGS("Voice") << "event=" << ll_pretty_print_sd(result) << LL_ENDL;
+ LL_DEBUGS("Voice") << "event=" << ll_stream_notation_sd(result) << LL_ENDL;
if (result.has("voice_fonts"))
break;
} while (true);
@@ -1161,7 +1308,7 @@ bool LLVivoxVoiceClient::addAndJoinSession(const sessionStatePtr_t &nextSession)
mAudioSession = nextSession;
mAudioSessionChanged = true;
- if (!mAudioSession->mReconnect)
+ if (!mAudioSession || !mAudioSession->mReconnect)
{
mNextAudioSession.reset();
}
@@ -1169,16 +1316,19 @@ bool LLVivoxVoiceClient::addAndJoinSession(const sessionStatePtr_t &nextSession)
// The old session may now need to be deleted.
reapSession(oldSession);
- if (!mAudioSession->mHandle.empty())
+ if (mAudioSession)
{
- // Connect to a session by session handle
+ if (!mAudioSession->mHandle.empty())
+ {
+ // Connect to a session by session handle
- sessionMediaConnectSendMessage(mAudioSession);
- }
- else
- {
- // Connect to a session by URI
- sessionCreateSendMessage(mAudioSession, true, false);
+ sessionMediaConnectSendMessage(mAudioSession);
+ }
+ else
+ {
+ // Connect to a session by URI
+ sessionCreateSendMessage(mAudioSession, true, false);
+ }
}
notifyStatusObservers(LLVoiceClientStatusObserver::STATUS_JOINING);
@@ -1240,24 +1390,30 @@ bool LLVivoxVoiceClient::addAndJoinSession(const sessionStatePtr_t &nextSession)
{
result = llcoro::suspendUntilEventOnWithTimeout(voicePump, SESSION_JOIN_TIMEOUT, timeoutResult);
- LL_INFOS("Voice") << "event=" << ll_pretty_print_sd(result) << LL_ENDL;
+ LL_INFOS("Voice") << "event=" << ll_stream_notation_sd(result) << LL_ENDL;
if (result.has("session"))
{
- if (result.has("handle"))
+ if (!mAudioSession)
{
- if (result["handle"] != mAudioSession->mHandle)
- {
- LL_WARNS("Voice") << "Message for session handle \"" << result["handle"] << "\" while waiting for \"" << mAudioSession->mHandle << "\"." << LL_ENDL;
- continue;
- }
+ LL_WARNS("Voice") << "Message for session handle \"" << result["handle"] << "\" while session is not initialized." << LL_ENDL;
+ continue;
+ }
+ if (result.has("handle") && result["handle"] != mAudioSession->mHandle)
+ {
+ LL_WARNS("Voice") << "Message for session handle \"" << result["handle"] << "\" while waiting for \"" << mAudioSession->mHandle << "\"." << LL_ENDL;
+ continue;
}
std::string message = result["session"].asString();
if ((message == "added") || (message == "created"))
+ {
added = true;
+ }
else if (message == "joined")
+ {
joined = true;
+ }
else if ((message == "failed") || (message == "removed") || (message == "timeout"))
{ // we will get a removed message if a voice call is declined.
@@ -1266,15 +1422,19 @@ bool LLVivoxVoiceClient::addAndJoinSession(const sessionStatePtr_t &nextSession)
int reason = result["reason"].asInteger();
LL_WARNS("Voice") << "Add and join failed for reason " << reason << LL_ENDL;
- if ((reason == ERROR_VIVOX_NOT_LOGGED_IN) ||
- (reason == ERROR_VIVOX_OBJECT_NOT_FOUND))
+ if ( (reason == ERROR_VIVOX_NOT_LOGGED_IN)
+ || (reason == ERROR_VIVOX_OBJECT_NOT_FOUND))
{
LL_DEBUGS("Voice") << "Requesting reprovision and login." << LL_ENDL;
requestRelog();
- }
-
+ }
}
-
+ else
+ {
+ LL_WARNS("Voice") << "session '" << message << "' "
+ << LL_ENDL;
+ }
+
notifyStatusObservers(LLVoiceClientStatusObserver::STATUS_LEFT_CHANNEL);
mIsJoiningSession = false;
return false;
@@ -1348,7 +1508,7 @@ bool LLVivoxVoiceClient::terminateAudioSession(bool wait)
{
result = llcoro::suspendUntilEventOn(voicePump);
- LL_DEBUGS("Voice") << "event=" << ll_pretty_print_sd(result) << LL_ENDL;
+ LL_DEBUGS("Voice") << "event=" << ll_stream_notation_sd(result) << LL_ENDL;
if (result.has("session"))
{
if (result.has("handle"))
@@ -1458,6 +1618,7 @@ bool LLVivoxVoiceClient::waitForChannel()
}
else if (sessionNeedsRelog(mNextAudioSession))
{
+ LL_INFOS("Voice") << "Session requesting reprovision and login." << LL_ENDL;
requestRelog();
break;
}
@@ -1470,7 +1631,9 @@ bool LLVivoxVoiceClient::waitForChannel()
}
if (!mNextAudioSession)
+ {
llcoro::suspendUntilTimeout(1.0);
+ }
} while (mVoiceEnabled && !mRelogRequested);
mIsProcessingChannels = false;
@@ -1499,8 +1662,9 @@ bool LLVivoxVoiceClient::runSession(const sessionStatePtr_t &session)
notifyStatusObservers(LLVoiceClientStatusObserver::ERROR_UNKNOWN);
if (mSessionTerminateRequested)
+ {
terminateAudioSession(true);
-
+ }
// if a relog has been requested then addAndJoineSession
// failed in a spectacular way and we need to back out.
// If this is not the case then we were simply trying to
@@ -1567,11 +1731,16 @@ bool LLVivoxVoiceClient::runSession(const sessionStatePtr_t &session)
mIsInitialized = true;
LLSD result = llcoro::suspendUntilEventOnWithTimeout(voicePump, UPDATE_THROTTLE_SECONDS, timeoutEvent);
if (!result.has("timeout")) // logging the timeout event spams the log
- LL_DEBUGS("Voice") << "event=" << ll_pretty_print_sd(result) << LL_ENDL;
+ LL_DEBUGS("Voice") << "event=" << ll_stream_notation_sd(result) << LL_ENDL;
if (result.has("session"))
{
if (result.has("handle"))
{
+ if (!mAudioSession)
+ {
+ LL_WARNS("Voice") << "Message for session handle \"" << result["handle"] << "\" while session is not initiated." << LL_ENDL;
+ continue;
+ }
if (result["handle"] != mAudioSession->mHandle)
{
LL_WARNS("Voice") << "Message for session handle \"" << result["handle"] << "\" while waiting for \"" << mAudioSession->mHandle << "\"." << LL_ENDL;
@@ -1635,7 +1804,7 @@ void LLVivoxVoiceClient::recordingAndPlaybackMode()
do
{
command = llcoro::suspendUntilEventOn(voicePump);
- LL_DEBUGS("Voice") << "event=" << ll_pretty_print_sd(command) << LL_ENDL;
+ LL_DEBUGS("Voice") << "event=" << ll_stream_notation_sd(command) << LL_ENDL;
} while (!command.has("recplay"));
if (command["recplay"].asString() == "quit")
@@ -1676,7 +1845,7 @@ int LLVivoxVoiceClient::voiceRecordBuffer()
do
{
result = llcoro::suspendUntilEventOnWithTimeout(voicePump, CAPTURE_BUFFER_MAX_TIME, timeoutResult);
- LL_DEBUGS("Voice") << "event=" << ll_pretty_print_sd(result) << LL_ENDL;
+ LL_DEBUGS("Voice") << "event=" << ll_stream_notation_sd(result) << LL_ENDL;
} while (!result.has("recplay"));
mCaptureBufferRecorded = true;
@@ -1713,7 +1882,7 @@ int LLVivoxVoiceClient::voicePlaybackBuffer()
notifyVoiceFontObservers();
result = llcoro::suspendUntilEventOnWithTimeout(voicePump, CAPTURE_BUFFER_MAX_TIME, timeoutResult);
- LL_DEBUGS("Voice") << "event=" << ll_pretty_print_sd(result) << LL_ENDL;
+ LL_DEBUGS("Voice") << "event=" << ll_stream_notation_sd(result) << LL_ENDL;
} while (!result.has("recplay"));
if (result["recplay"] == "playback")
@@ -1858,7 +2027,8 @@ void LLVivoxVoiceClient::loginSendMessage()
<< "<ParticipantPropertyFrequency>5</ParticipantPropertyFrequency>"
<< (autoPostCrashDumps?"<AutopostCrashDumps>true</AutopostCrashDumps>":"")
<< "</Request>\n\n\n";
-
+
+ LL_INFOS("Voice") << "Attempting voice login" << LL_ENDL;
writeString(stream.str());
}
@@ -1875,6 +2045,7 @@ void LLVivoxVoiceClient::logoutSendMessage()
{
if(mAccountLoggedIn)
{
+ LL_INFOS("Voice") << "Attempting voice logout" << LL_ENDL;
std::ostringstream stream;
stream
<< "<Request requestId=\"" << mCommandCookie++ << "\" action=\"Account.Logout.1\">"
@@ -1909,10 +2080,10 @@ void LLVivoxVoiceClient::sessionGroupCreateSendMessage()
void LLVivoxVoiceClient::sessionCreateSendMessage(const sessionStatePtr_t &session, bool startAudio, bool startText)
{
- LL_DEBUGS("Voice") << "Requesting create: " << session->mSIPURI << LL_ENDL;
-
S32 font_index = getVoiceFontIndex(session->mVoiceFontID);
- LL_DEBUGS("Voice") << "With voice font: " << session->mVoiceFontID << " (" << font_index << ")" << LL_ENDL;
+ LL_DEBUGS("Voice") << "Requesting create: " << session->mSIPURI
+ << " with voice font: " << session->mVoiceFontID << " (" << font_index << ")"
+ << LL_ENDL;
session->mCreateInProgress = true;
if(startAudio)
@@ -1990,10 +2161,10 @@ void LLVivoxVoiceClient::sessionGroupAddSessionSendMessage(const sessionStatePtr
void LLVivoxVoiceClient::sessionMediaConnectSendMessage(const sessionStatePtr_t &session)
{
- LL_DEBUGS("Voice") << "Connecting audio to session handle: " << session->mHandle << LL_ENDL;
-
S32 font_index = getVoiceFontIndex(session->mVoiceFontID);
- LL_DEBUGS("Voice") << "With voice font: " << session->mVoiceFontID << " (" << font_index << ")" << LL_ENDL;
+ LL_DEBUGS("Voice") << "Connecting audio to session handle: " << session->mHandle
+ << " with voice font: " << session->mVoiceFontID << " (" << font_index << ")"
+ << LL_ENDL;
session->mMediaConnectInProgress = true;
@@ -2376,6 +2547,7 @@ void LLVivoxVoiceClient::daemonDied()
void LLVivoxVoiceClient::giveUp()
{
// All has failed. Clean up and stop trying.
+ LL_WARNS("Voice") << "Terminating Voice Service" << LL_ENDL;
closeSocket();
cleanUp();
}
@@ -2504,9 +2676,16 @@ static void oldSDKTransform (LLVector3 &left, LLVector3 &up, LLVector3 &at, LLVe
void LLVivoxVoiceClient::setHidden(bool hidden)
{
mHidden = hidden;
-
- sendPositionAndVolumeUpdate();
- return;
+
+ if (mHidden && inSpatialChannel())
+ {
+ // get out of the channel entirely
+ leaveAudioSession();
+ }
+ else
+ {
+ sendPositionAndVolumeUpdate();
+ }
}
void LLVivoxVoiceClient::sendPositionAndVolumeUpdate(void)
@@ -2569,12 +2748,13 @@ void LLVivoxVoiceClient::sendPositionAndVolumeUpdate(void)
<< "<Y>" << u.mV[VY] << "</Y>"
<< "<Z>" << u.mV[VZ] << "</Z>"
<< "</UpOrientation>"
- << "<LeftOrientation>"
- << "<X>" << l.mV [VX] << "</X>"
- << "<Y>" << l.mV [VY] << "</Y>"
- << "<Z>" << l.mV [VZ] << "</Z>"
- << "</LeftOrientation>";
-
+ << "<LeftOrientation>"
+ << "<X>" << l.mV [VX] << "</X>"
+ << "<Y>" << l.mV [VY] << "</Y>"
+ << "<Z>" << l.mV [VZ] << "</Z>"
+ << "</LeftOrientation>"
+ ;
+
stream << "</SpeakerPosition>";
stream << "<ListenerPosition>";
@@ -2612,7 +2792,6 @@ void LLVivoxVoiceClient::sendPositionAndVolumeUpdate(void)
pos = earPosition;
vel = earVelocity;
-// LL_DEBUGS("Voice") << "Sending listener position " << earPosition << LL_ENDL;
oldSDKTransform(l, u, a, pos, vel);
@@ -2645,12 +2824,12 @@ void LLVivoxVoiceClient::sendPositionAndVolumeUpdate(void)
<< "<Y>" << u.mV[VY] << "</Y>"
<< "<Z>" << u.mV[VZ] << "</Z>"
<< "</UpOrientation>"
- << "<LeftOrientation>"
- << "<X>" << l.mV [VX] << "</X>"
- << "<Y>" << l.mV [VY] << "</Y>"
- << "<Z>" << l.mV [VZ] << "</Z>"
- << "</LeftOrientation>";
-
+ << "<LeftOrientation>"
+ << "<X>" << l.mV [VX] << "</X>"
+ << "<Y>" << l.mV [VY] << "</Y>"
+ << "<Z>" << l.mV [VZ] << "</Z>"
+ << "</LeftOrientation>"
+ ;
stream << "</ListenerPosition>";
@@ -2722,12 +2901,13 @@ void LLVivoxVoiceClient::sendPositionAndVolumeUpdate(void)
}
}
}
-
+
//sendLocalAudioUpdates(); obsolete, used to send volume setting on position updates
-
- if(!stream.str().empty())
+ std::string update(stream.str());
+ if(!update.empty())
{
- writeString(stream.str());
+ LL_DEBUGS("VoiceUpdate") << "sending update " << update << LL_ENDL;
+ writeString(update);
}
}
@@ -2839,31 +3019,12 @@ void LLVivoxVoiceClient::connectorCreateResponse(int statusCode, std::string &st
{
LLSD result = LLSD::emptyMap();
- if(statusCode != 0)
- {
- LL_WARNS("Voice") << "Connector.Create response failure: " << statusString << LL_ENDL;
- LLSD args;
- std::stringstream errs;
- errs << mVoiceAccountServerURI << "\n:UDP: 3478, 3479, 5060, 5062, 12000-17000";
- args["HOSTID"] = errs.str();
- mTerminateDaemon = true;
- if (LLGridManager::getInstance()->isSystemGrid())
- {
- LLNotificationsUtil::add("NoVoiceConnect", args);
- }
- else
- {
- LLNotificationsUtil::add("NoVoiceConnect-GIAB", args);
- }
-
- result["connector"] = LLSD::Boolean(false);
- }
- else
+ if(statusCode == 0)
{
// Connector created, move forward.
if (connectorHandle == LLVivoxSecurity::getInstance()->connectorHandle())
{
- LL_INFOS("Voice") << "Connector.Create succeeded, Vivox SDK version is " << versionID << " connector handle " << connectorHandle << LL_ENDL;
+ LL_INFOS("Voice") << "Voice connector succeeded, Vivox SDK version is " << versionID << " connector handle " << connectorHandle << LL_ENDL;
mVoiceVersion.serverVersion = versionID;
mConnectorEstablished = true;
mTerminateDaemon = false;
@@ -2872,13 +3033,40 @@ void LLVivoxVoiceClient::connectorCreateResponse(int statusCode, std::string &st
}
else
{
- LL_WARNS("Voice") << "Connector.Create returned wrong handle "
+ // This shouldn't happen - we are somehow out of sync with SLVoice
+ // or possibly there are two things trying to run SLVoice at once
+ // or someone is trying to hack into it.
+ LL_WARNS("Voice") << "Connector returned wrong handle "
<< "(" << connectorHandle << ")"
<< " expected (" << LLVivoxSecurity::getInstance()->connectorHandle() << ")"
<< LL_ENDL;
result["connector"] = LLSD::Boolean(false);
+ // Give up.
+ mTerminateDaemon = true;
}
}
+ else if (statusCode == 10028) // web request timeout prior to login
+ {
+ // this is usually fatal, but a long timeout might work
+ result["connector"] = LLSD::Boolean(false);
+ result["retry"] = LLSD::Real(CONNECT_ATTEMPT_TIMEOUT);
+
+ LL_WARNS("Voice") << "Voice connection failed" << LL_ENDL;
+ }
+ else if (statusCode == 10006) // name resolution failure - a shorter retry may work
+ {
+ // some networks have slower DNS, but a short timeout might let it catch up
+ result["connector"] = LLSD::Boolean(false);
+ result["retry"] = LLSD::Real(CONNECT_DNS_TIMEOUT);
+
+ LL_WARNS("Voice") << "Voice connection DNS lookup failed" << LL_ENDL;
+ }
+ else // unknown failure - give up
+ {
+ LL_WARNS("Voice") << "Voice connection failure ("<< statusCode << "): " << statusString << LL_ENDL;
+ mTerminateDaemon = true;
+ result["connector"] = LLSD::Boolean(false);
+ }
LLEventPumps::instance().post("vivoxClientPump", result);
}
@@ -3010,7 +3198,7 @@ void LLVivoxVoiceClient::sessionConnectResponse(std::string &requestId, int stat
// set the session info to reflect that the user is already connected.
if (statusCode == 1026)
{
- session->mVoiceEnabled = true;
+ session->mVoiceActive = true;
session->mMediaConnectInProgress = false;
session->mMediaStreamState = streamStateConnected;
//session->mTextStreamState = streamStateConnected;
@@ -3341,21 +3529,31 @@ void LLVivoxVoiceClient::accountLoginStateChangeEvent(
LLEventPumps::instance().post("vivoxClientPump", levent);
break;
- case 3:
+ case 2:
+ break;
+
+ case 3:
levent["login"] = LLSD::String("account_loggingOut");
LLEventPumps::instance().post("vivoxClientPump", levent);
- break;
+ break;
+
+ case 4:
+ break;
+
+ case 100:
+ LL_WARNS("Voice") << "account state event error" << LL_ENDL;
+ break;
- case 0:
+ case 0:
levent["login"] = LLSD::String("account_logout");
LLEventPumps::instance().post("vivoxClientPump", levent);
- break;
-
- default:
+ break;
+
+ default:
//Used to be a commented out warning
- LL_DEBUGS("Voice") << "unknown state: " << state << LL_ENDL;
+ LL_WARNS("Voice") << "unknown account state event: " << state << LL_ENDL;
break;
}
}
@@ -3381,7 +3579,7 @@ void LLVivoxVoiceClient::mediaCompletionEvent(std::string &sessionGroupHandle, s
}
else
{
- LL_DEBUGS("Voice") << "Unknown MediaCompletionType: " << mediaCompletionType << LL_ENDL;
+ LL_WARNS("Voice") << "Unknown MediaCompletionType: " << mediaCompletionType << LL_ENDL;
}
if (!result.isUndefined())
@@ -3425,13 +3623,13 @@ void LLVivoxVoiceClient::mediaStreamUpdatedEvent(
case streamStateDisconnecting:
case streamStateIdle:
// Standard "left audio session", Vivox state 'disconnected'
- session->mVoiceEnabled = false;
+ session->mVoiceActive = false;
session->mMediaConnectInProgress = false;
leftAudioSession(session);
break;
case streamStateConnected:
- session->mVoiceEnabled = true;
+ session->mVoiceActive = true;
session->mMediaConnectInProgress = false;
joinedAudioSession(session);
case streamStateConnecting: // do nothing, but prevents a warning getting into the logs.
@@ -4608,8 +4806,10 @@ bool LLVivoxVoiceClient::inSpatialChannel(void)
bool result = false;
if(mAudioSession)
+ {
result = mAudioSession->mIsSpatial;
-
+ }
+
return result;
}
@@ -4728,9 +4928,12 @@ void LLVivoxVoiceClient::setAvatarPosition(const LLVector3d &position, const LLV
mSpatialCoordsDirty = true;
}
- if ((mAvatarRot != rot) && (llabs(dot(mAvatarRot, rot)) > MINUSCULE_ANGLE_COS))
- { // if the two rotations are not exactly equal test their dot product
- // to get the cos of the angle between them. If it is minuscule don't update.
+ // If the two rotations are not exactly equal test their dot product
+ // to get the cos of the angle between them.
+ // If it is too small, don't update.
+ F32 rot_cos_diff = llabs(dot(mAvatarRot, rot));
+ if ((mAvatarRot != rot) && (rot_cos_diff < MINUSCULE_ANGLE_COS))
+ {
mAvatarRot = rot;
mSpatialCoordsDirty = true;
}
@@ -4779,7 +4982,6 @@ void LLVivoxVoiceClient::setVoiceEnabled(bool enabled)
mVoiceEnabled = enabled;
LLVoiceClientStatusObserver::EStatusType status;
-
if (enabled)
{
LLVoiceChannel::getCurrentVoiceChannel()->activate();
@@ -5146,7 +5348,7 @@ LLVivoxVoiceClient::sessionState::sessionState() :
mIsSpatial(false),
mIsP2P(false),
mIncoming(false),
- mVoiceEnabled(false),
+ mVoiceActive(false),
mReconnect(false),
mVolumeDirty(false),
mMuteDirty(false),
@@ -5506,7 +5708,8 @@ void LLVivoxVoiceClient::deleteAllSessions()
while (!mSessionsByHandle.empty())
{
- deleteSession(mSessionsByHandle.begin()->second);
+ const sessionStatePtr_t session = mSessionsByHandle.begin()->second;
+ deleteSession(session);
}
}
@@ -5855,7 +6058,7 @@ void LLVivoxVoiceClient::addVoiceFont(const S32 font_index,
if (has_expired)
{
- LL_DEBUGS("Voice") << "Expired " << (template_font ? "Template " : "")
+ LL_DEBUGS("VoiceFont") << "Expired " << (template_font ? "Template " : "")
<< expiration_date.asString() << " " << font_id
<< " (" << font_index << ") " << name << LL_ENDL;
@@ -5918,7 +6121,7 @@ void LLVivoxVoiceClient::addVoiceFont(const S32 font_index,
}
}
- LL_DEBUGS("Voice") << (template_font ? "Template " : "")
+ LL_DEBUGS("VoiceFont") << (template_font ? "Template " : "")
<< font->mExpirationDate.asString() << " " << font->mID
<< " (" << font->mFontIndex << ") " << name << LL_ENDL;
@@ -5934,11 +6137,11 @@ void LLVivoxVoiceClient::addVoiceFont(const S32 font_index,
if (font_type < VOICE_FONT_TYPE_NONE || font_type >= VOICE_FONT_TYPE_UNKNOWN)
{
- LL_DEBUGS("Voice") << "Unknown voice font type: " << font_type << LL_ENDL;
+ LL_WARNS("VoiceFont") << "Unknown voice font type: " << font_type << LL_ENDL;
}
if (font_status < VOICE_FONT_STATUS_NONE || font_status >= VOICE_FONT_STATUS_UNKNOWN)
{
- LL_DEBUGS("Voice") << "Unknown voice font status: " << font_status << LL_ENDL;
+ LL_WARNS("VoiceFont") << "Unknown voice font status: " << font_status << LL_ENDL;
}
}
}
@@ -5982,7 +6185,7 @@ void LLVivoxVoiceClient::expireVoiceFonts()
// Check for voice fonts that will expire in less that the warning time
if (warning_timer.getStarted() && warning_timer.hasExpired())
{
- LL_DEBUGS("Voice") << "Voice Font " << voice_font->mName << " will expire soon." << LL_ENDL;
+ LL_DEBUGS("VoiceFont") << "Voice Font " << voice_font->mName << " will expire soon." << LL_ENDL;
will_expire = true;
warning_timer.stop();
}
@@ -6025,7 +6228,7 @@ void LLVivoxVoiceClient::deleteVoiceFont(const LLUUID& id)
{
if (list_iter->second == id)
{
- LL_DEBUGS("Voice") << "Removing " << id << " from the voice font list." << LL_ENDL;
+ LL_DEBUGS("VoiceFont") << "Removing " << id << " from the voice font list." << LL_ENDL;
mVoiceFontList.erase(list_iter++);
mVoiceFontListDirty = true;
}
@@ -6082,7 +6285,7 @@ S32 LLVivoxVoiceClient::getVoiceFontIndex(const LLUUID& id) const
}
else
{
- LL_DEBUGS("Voice") << "Selected voice font " << id << " is not available." << LL_ENDL;
+ LL_WARNS("VoiceFont") << "Selected voice font " << id << " is not available." << LL_ENDL;
}
}
return result;
@@ -6100,7 +6303,7 @@ S32 LLVivoxVoiceClient::getVoiceFontTemplateIndex(const LLUUID& id) const
}
else
{
- LL_DEBUGS("Voice") << "Selected voice font template " << id << " is not available." << LL_ENDL;
+ LL_WARNS("VoiceFont") << "Selected voice font template " << id << " is not available." << LL_ENDL;
}
}
return result;
@@ -6112,7 +6315,7 @@ void LLVivoxVoiceClient::accountGetSessionFontsSendMessage()
{
std::ostringstream stream;
- LL_DEBUGS("Voice") << "Requesting voice font list." << LL_ENDL;
+ LL_DEBUGS("VoiceFont") << "Requesting voice font list." << LL_ENDL;
stream
<< "<Request requestId=\"" << mCommandCookie++ << "\" action=\"Account.GetSessionFonts.1\">"
@@ -6130,7 +6333,7 @@ void LLVivoxVoiceClient::accountGetTemplateFontsSendMessage()
{
std::ostringstream stream;
- LL_DEBUGS("Voice") << "Requesting voice font template list." << LL_ENDL;
+ LL_DEBUGS("VoiceFont") << "Requesting voice font template list." << LL_ENDL;
stream
<< "<Request requestId=\"" << mCommandCookie++ << "\" action=\"Account.GetTemplateFonts.1\">"
@@ -6145,7 +6348,7 @@ void LLVivoxVoiceClient::accountGetTemplateFontsSendMessage()
void LLVivoxVoiceClient::sessionSetVoiceFontSendMessage(const sessionStatePtr_t &session)
{
S32 font_index = getVoiceFontIndex(session->mVoiceFontID);
- LL_DEBUGS("Voice") << "Requesting voice font: " << session->mVoiceFontID << " (" << font_index << "), session handle: " << session->mHandle << LL_ENDL;
+ LL_DEBUGS("VoiceFont") << "Requesting voice font: " << session->mVoiceFontID << " (" << font_index << "), session handle: " << session->mHandle << LL_ENDL;
std::ostringstream stream;
@@ -6282,7 +6485,7 @@ void LLVivoxVoiceClient::updateVoiceMorphingMenu()
}
void LLVivoxVoiceClient::notifyVoiceFontObservers()
{
- LL_DEBUGS("Voice") << "Notifying voice effect observers. Lists changed: " << mVoiceFontListDirty << LL_ENDL;
+ LL_DEBUGS("VoiceFont") << "Notifying voice effect observers. Lists changed: " << mVoiceFontListDirty << LL_ENDL;
updateVoiceMorphingMenu();
@@ -6505,7 +6708,6 @@ void LLVivoxProtocolParser::reset()
isModeratorMuted = false;
isSpeaking = false;
participantType = 0;
- squelchDebugOutput = false;
returnCode = -1;
state = 0;
statusCode = 0;
@@ -6558,12 +6760,7 @@ LLIOPipe::EStatus LLVivoxProtocolParser::process_impl(
XML_SetUserData(parser, this);
XML_Parse(parser, mInput.data() + start, delim - start, false);
- // If this message isn't set to be squelched, output the raw XML received.
- if(!squelchDebugOutput)
- {
- LL_DEBUGS("Voice") << "parsing: " << mInput.substr(start, delim - start) << LL_ENDL;
- }
-
+ LL_DEBUGS("VivoxProtocolParser") << "parsing: " << mInput.substr(start, delim - start) << LL_ENDL;
start = delim + 3;
}
@@ -6941,13 +7138,12 @@ void LLVivoxProtocolParser::processResponse(std::string tag)
if (isEvent)
{
const char *eventTypeCstr = eventTypeString.c_str();
-// LL_WARNS("LOW Voice") << eventTypeCstr << LL_ENDL;
+ LL_DEBUGS("LOW Voice") << eventTypeCstr << LL_ENDL;
if (!stricmp(eventTypeCstr, "ParticipantUpdatedEvent"))
{
// These happen so often that logging them is pretty useless.
- squelchDebugOutput = true;
-// LL_WARNS("LOW Voice") << "Updated Params: " << sessionHandle << ", " << sessionGroupHandle << ", " << uriString << ", " << alias << ", " << isModeratorMuted << ", " << isSpeaking << ", " << volume << ", " << energy << LL_ENDL;
+ LL_DEBUGS("LOW Voice") << "Updated Params: " << sessionHandle << ", " << sessionGroupHandle << ", " << uriString << ", " << alias << ", " << isModeratorMuted << ", " << isSpeaking << ", " << volume << ", " << energy << LL_ENDL;
LLVivoxVoiceClient::getInstance()->participantUpdatedEvent(sessionHandle, sessionGroupHandle, uriString, alias, isModeratorMuted, isSpeaking, volume, energy);
}
else if (!stricmp(eventTypeCstr, "AccountLoginStateChangeEvent"))
@@ -7016,7 +7212,7 @@ void LLVivoxProtocolParser::processResponse(std::string tag)
<ParticipantType>0</ParticipantType>
</Event>
*/
-// LL_WARNS("LOW Voice") << "Added Params: " << sessionHandle << ", " << sessionGroupHandle << ", " << uriString << ", " << alias << ", " << nameString << ", " << displayNameString << ", " << participantType << LL_ENDL;
+ LL_DEBUGS("LOW Voice") << "Added Params: " << sessionHandle << ", " << sessionGroupHandle << ", " << uriString << ", " << alias << ", " << nameString << ", " << displayNameString << ", " << participantType << LL_ENDL;
LLVivoxVoiceClient::getInstance()->participantAddedEvent(sessionHandle, sessionGroupHandle, uriString, alias, nameString, displayNameString, participantType);
}
else if (!stricmp(eventTypeCstr, "ParticipantRemovedEvent"))
@@ -7029,14 +7225,13 @@ void LLVivoxProtocolParser::processResponse(std::string tag)
<AccountName>xtx7YNV-3SGiG7rA1fo5Ndw==</AccountName>
</Event>
*/
-// LL_WARNS("LOW Voice") << "Removed params:" << sessionHandle << ", " << sessionGroupHandle << ", " << uriString << ", " << alias << ", " << nameString << LL_ENDL;
+ LL_DEBUGS("LOW Voice") << "Removed params:" << sessionHandle << ", " << sessionGroupHandle << ", " << uriString << ", " << alias << ", " << nameString << LL_ENDL;
LLVivoxVoiceClient::getInstance()->participantRemovedEvent(sessionHandle, sessionGroupHandle, uriString, alias, nameString);
}
else if (!stricmp(eventTypeCstr, "AuxAudioPropertiesEvent"))
{
// These are really spammy in tuning mode
- squelchDebugOutput = true;
LLVivoxVoiceClient::getInstance()->auxAudioPropertiesEvent(energy);
}
else if (!stricmp(eventTypeCstr, "MessageEvent"))
@@ -7097,12 +7292,11 @@ void LLVivoxProtocolParser::processResponse(std::string tag)
else
{
const char *actionCstr = actionString.c_str();
-// LL_WARNS("LOW Voice") << actionCstr << LL_ENDL;
+ LL_DEBUGS("LOW Voice") << actionCstr << LL_ENDL;
if (!stricmp(actionCstr, "Session.Set3DPosition.1"))
{
- // We don't need to process these, but they're so spammy we don't want to log them.
- squelchDebugOutput = true;
+ // We don't need to process these
}
else if (!stricmp(actionCstr, "Connector.Create.1"))
{