[STORM-2109] Apply fixes from Brett Joseph of Vivox

Applies the following commits:
fe982eedd58b5ac91f250f8446dc44dd2624c976 - Better MediaConnect handling of 1026 return status,  media already connected.
6d343c74f6cfd456f99bd4bc39fa7a5ef3a1fc50 - More voice related changes to improve the user's experience.
f85263acf3902f2d54e108c4b62fa090e91b2b6e - Added the loop back setting so people can hear themselves during the mic test.

Removes outdated SLim code from llimpanel.cpp
This commit is contained in:
Inusaito Sayori
2015-03-18 22:59:44 -04:00
parent 0367711e93
commit 0681b88cbc
6 changed files with 82 additions and 70 deletions

View File

@@ -421,24 +421,7 @@ LLFloaterIMPanel::~LLFloaterIMPanel()
delete mSpeakers; delete mSpeakers;
mSpeakers = NULL; mSpeakers = NULL;
// End the text IM session if necessary
if(LLVoiceClient::instanceExists() && mOtherParticipantUUID.notNull())
{
switch(mDialog)
{
case IM_NOTHING_SPECIAL:
case IM_SESSION_P2P_INVITE:
LLVoiceClient::getInstance()->endUserIMSession(mOtherParticipantUUID);
break;
default:
// Appease the compiler
break;
}
}
//kicks you out of the voice channel if it is currently active //kicks you out of the voice channel if it is currently active
// HAVE to do this here -- if it happens in the LLVoiceChannel destructor it will call the wrong version (since the object's partially deconstructed at that point). // HAVE to do this here -- if it happens in the LLVoiceChannel destructor it will call the wrong version (since the object's partially deconstructed at that point).
mVoiceChannel->deactivate(); mVoiceChannel->deactivate();
@@ -1078,20 +1061,12 @@ void deliver_message(const std::string& utf8_text,
EInstantMessage dialog) EInstantMessage dialog)
{ {
std::string name; std::string name;
bool sent = false;
gAgent.buildFullname(name); gAgent.buildFullname(name);
const LLRelationship* info = LLAvatarTracker::instance().getBuddyInfo(other_participant_id); const LLRelationship* info = LLAvatarTracker::instance().getBuddyInfo(other_participant_id);
U8 offline = (!info || info->isOnline()) ? IM_ONLINE : IM_OFFLINE; U8 offline = (!info || info->isOnline()) ? IM_ONLINE : IM_OFFLINE;
if((offline == IM_OFFLINE) && (LLVoiceClient::getInstance()->isOnlineSIP(other_participant_id)))
{
// User is online through the OOW connector, but not with a regular viewer. Try to send the message via SLVoice.
sent = LLVoiceClient::getInstance()->sendTextMessage(other_participant_id, utf8_text);
}
if(!sent)
{ {
// Send message normally. // Send message normally.

View File

@@ -354,6 +354,7 @@ BOOL LLVoiceClient::isSessionCallBackPossible(const LLUUID& id)
} }
} }
/*
BOOL LLVoiceClient::sendTextMessage(const LLUUID& participant_id, const std::string& message) BOOL LLVoiceClient::sendTextMessage(const LLUUID& participant_id, const std::string& message)
{ {
if (mVoiceModule) if (mVoiceModule)
@@ -373,6 +374,7 @@ void LLVoiceClient::endUserIMSession(const LLUUID& participant_id)
mVoiceModule->endUserIMSession(participant_id); mVoiceModule->endUserIMSession(participant_id);
} }
} }
*/
//---------------------------------------------- //----------------------------------------------
// channels // channels

View File

@@ -212,8 +212,8 @@ public:
//@{ //@{
virtual BOOL isSessionTextIMPossible(const LLUUID& id)=0; virtual BOOL isSessionTextIMPossible(const LLUUID& id)=0;
virtual BOOL isSessionCallBackPossible(const LLUUID& id)=0; virtual BOOL isSessionCallBackPossible(const LLUUID& id)=0;
virtual BOOL sendTextMessage(const LLUUID& participant_id, const std::string& message)=0; //virtual BOOL sendTextMessage(const LLUUID& participant_id, const std::string& message)=0;
virtual void endUserIMSession(const LLUUID &uuid)=0; //virtual void endUserIMSession(const LLUUID &uuid)=0;
//@} //@}
// authorize the user // authorize the user
@@ -428,8 +428,8 @@ public:
//@{ //@{
BOOL isSessionTextIMPossible(const LLUUID& id); BOOL isSessionTextIMPossible(const LLUUID& id);
BOOL isSessionCallBackPossible(const LLUUID& id); BOOL isSessionCallBackPossible(const LLUUID& id);
BOOL sendTextMessage(const LLUUID& participant_id, const std::string& message); //BOOL sendTextMessage(const LLUUID& participant_id, const std::string& message);
void endUserIMSession(const LLUUID &uuid); //void endUserIMSession(const LLUUID &uuid);
//@} //@}

View File

@@ -80,10 +80,10 @@ const int MAX_LOGIN_RETRIES = 12;
// Defines the maximum number of times(in a row) "stateJoiningSession" case for spatial channel is reached in stateMachine() // Defines the maximum number of times(in a row) "stateJoiningSession" case for spatial channel is reached in stateMachine()
// which is treated as normal. If this number is exceeded we suspect there is a problem with connection // which is treated as normal. If this number is exceeded we suspect there is a problem with connection
// to voice server (EXT-4313). When voice works correctly, there is from 1 to 15 times. 50 was chosen // to voice server (EXT-4313). When voice works correctly, there is from 1 to 15 times. 1500 was chosen
// to make sure we don't make mistake when slight connection problems happen- situation when connection to server is // to make sure we don't make mistake when slight connection problems happen- situation when connection to server is
// blocked is VERY rare and it's better to sacrifice response time in this situation for the sake of stability. // blocked is VERY rare and it's better to sacrifice response time in this situation for the sake of stability.
const int MAX_NORMAL_JOINING_SPATIAL_NUM = 50; const int MAX_NORMAL_JOINING_SPATIAL_NUM = 1500;
// How often to check for expired voice fonts in seconds // How often to check for expired voice fonts in seconds
const F32 VOICE_FONT_EXPIRY_INTERVAL = 10.f; const F32 VOICE_FONT_EXPIRY_INTERVAL = 10.f;
@@ -478,17 +478,21 @@ bool LLVivoxVoiceClient::writeString(const std::string &str)
(const char*)str.data(), (const char*)str.data(),
&written); &written);
if(err == 0) if (err == 0 && written == size)
{ {
// Success. // Success.
result = true; result = true;
} }
// TODO: handle partial writes (written is number of bytes written) else if (err == 0 && written != size)
// Need to set socket to non-blocking before this will work. {
// else if(APR_STATUS_IS_EAGAIN(err)) // Did a short write, log it for now
// { LL_WARNS("Voice") << ") short write on socket sending data to vivox daemon." << "Sent " << written << "bytes instead of " << size << LL_ENDL;
// // }
// } else if (APR_STATUS_IS_EAGAIN(err))
{
char buf[MAX_STRING];
LL_WARNS("Voice") << "EAGAIN error " << err << " (" << apr_strerror(err, buf, MAX_STRING) << ") sending data to vivox daemon." << LL_ENDL;
}
else else
{ {
// Assume any socket error means something bad. For now, just close the socket. // Assume any socket error means something bad. For now, just close the socket.
@@ -1126,8 +1130,8 @@ void LLVivoxVoiceClient::stateMachine()
} }
else else
{ {
// duration parameter is currently unused, per Mike S. // loop mic back to render device.
tuningCaptureStartSendMessage(10000); tuningCaptureStartSendMessage(1); // 1-loop, zero, don't loop
setState(stateMicTuningRunning); setState(stateMicTuningRunning);
} }
@@ -1564,6 +1568,8 @@ void LLVivoxVoiceClient::stateMachine()
//MARK: stateSessionJoined //MARK: stateSessionJoined
case stateSessionJoined: // session handle received case stateSessionJoined: // session handle received
if (mSpatialJoiningNum > 100)
llwarns << "There seems to be problem with connecting to a voice channel. Frames to join were " << mSpatialJoiningNum << LL_ENDL;
mSpatialJoiningNum = 0; mSpatialJoiningNum = 0;
// It appears that I need to wait for BOTH the SessionGroup.AddSession response and the SessionStateChangeEvent with state 4 // It appears that I need to wait for BOTH the SessionGroup.AddSession response and the SessionStateChangeEvent with state 4
@@ -1662,7 +1668,7 @@ void LLVivoxVoiceClient::stateMachine()
//MARK: stateLeavingSession //MARK: stateLeavingSession
case stateLeavingSession: // waiting for terminate session response case stateLeavingSession: // waiting for terminate session response
// The handler for the Session.Terminate response will transition from here to stateSessionTerminated. // The handler for the Session.Terminate response will transition from here to stateSessionTerminated.
break; // Fall through and clean up session before getting terminated event.
//MARK: stateSessionTerminated //MARK: stateSessionTerminated
case stateSessionTerminated: case stateSessionTerminated:
@@ -1672,6 +1678,7 @@ void LLVivoxVoiceClient::stateMachine()
if(mAudioSession) if(mAudioSession)
{ {
leaveAudioSession();
sessionState *oldSession = mAudioSession; sessionState *oldSession = mAudioSession;
mAudioSession = NULL; mAudioSession = NULL;
@@ -1831,6 +1838,7 @@ void LLVivoxVoiceClient::loginSendMessage()
<< "<AccountPassword>" << mAccountPassword << "</AccountPassword>" << "<AccountPassword>" << mAccountPassword << "</AccountPassword>"
<< "<AudioSessionAnswerMode>VerifyAnswer</AudioSessionAnswerMode>" << "<AudioSessionAnswerMode>VerifyAnswer</AudioSessionAnswerMode>"
<< "<EnableBuddiesAndPresence>false</EnableBuddiesAndPresence>" << "<EnableBuddiesAndPresence>false</EnableBuddiesAndPresence>"
<< "<EnablePresencePersistence>0</EnablePresencePersistence>"
<< "<BuddyManagementMode>Application</BuddyManagementMode>" << "<BuddyManagementMode>Application</BuddyManagementMode>"
<< "<ParticipantPropertyFrequency>5</ParticipantPropertyFrequency>" << "<ParticipantPropertyFrequency>5</ParticipantPropertyFrequency>"
<< (autoPostCrashDumps?"<AutopostCrashDumps>true</AutopostCrashDumps>":"") << (autoPostCrashDumps?"<AutopostCrashDumps>true</AutopostCrashDumps>":"")
@@ -2031,6 +2039,7 @@ void LLVivoxVoiceClient::leaveAudioSession()
case stateJoiningSession: case stateJoiningSession:
case stateSessionJoined: case stateSessionJoined:
case stateRunning: case stateRunning:
case stateSessionTerminated:
if(!mAudioSession->mHandle.empty()) if(!mAudioSession->mHandle.empty())
{ {
@@ -2061,10 +2070,12 @@ void LLVivoxVoiceClient::leaveAudioSession()
case stateJoinSessionFailed: case stateJoinSessionFailed:
case stateJoinSessionFailedWaiting: case stateJoinSessionFailedWaiting:
setState(stateSessionTerminated); setState(stateSessionTerminated);
break;
case stateLeavingSession: // managed to get back to this case statement before the media gets disconnected.
break; break;
default: default:
LL_WARNS("Voice") << "called from unknown state" << LL_ENDL; LL_WARNS("Voice") << "called from unknown state " << getState() << LL_ENDL;
break; break;
} }
} }
@@ -2117,6 +2128,7 @@ void LLVivoxVoiceClient::sessionMediaDisconnectSendMessage(sessionState *session
} }
/* obsolete
void LLVivoxVoiceClient::sessionTextDisconnectSendMessage(sessionState *session) void LLVivoxVoiceClient::sessionTextDisconnectSendMessage(sessionState *session)
{ {
std::ostringstream stream; std::ostringstream stream;
@@ -2130,6 +2142,7 @@ void LLVivoxVoiceClient::sessionTextDisconnectSendMessage(sessionState *session)
writeString(stream.str()); writeString(stream.str());
} }
*/
void LLVivoxVoiceClient::getCaptureDevicesSendMessage() void LLVivoxVoiceClient::getCaptureDevicesSendMessage()
{ {
@@ -2281,14 +2294,15 @@ void LLVivoxVoiceClient::tuningRenderStopSendMessage()
writeString(stream.str()); writeString(stream.str());
} }
void LLVivoxVoiceClient::tuningCaptureStartSendMessage(int duration) void LLVivoxVoiceClient::tuningCaptureStartSendMessage(int loop)
{ {
LL_DEBUGS("Voice") << "sending CaptureAudioStart" << LL_ENDL; LL_DEBUGS("Voice") << "sending CaptureAudioStart" << LL_ENDL;
std::ostringstream stream; std::ostringstream stream;
stream stream
<< "<Request requestId=\"" << mCommandCookie++ << "\" action=\"Aux.CaptureAudioStart.1\">" << "<Request requestId=\"" << mCommandCookie++ << "\" action=\"Aux.CaptureAudioStart.1\">"
<< "<Duration>" << duration << "</Duration>" << "<Duration>-1</Duration>"
<< "<LoopToRenderDevice>" << loop << "</LoopToRenderDevice>"
<< "</Request>\n\n\n"; << "</Request>\n\n\n";
writeString(stream.str()); writeString(stream.str());
@@ -2502,6 +2516,8 @@ void LLVivoxVoiceClient::sendPositionalUpdate(void)
{ {
std::ostringstream stream; std::ostringstream stream;
if (getState() != stateRunning) return; // don't send position updates if we are transitioning between out of running.
if(mSpatialCoordsDirty) if(mSpatialCoordsDirty)
{ {
LLVector3 l, u, a, vel; LLVector3 l, u, a, vel;
@@ -2934,15 +2950,25 @@ void LLVivoxVoiceClient::sessionGroupAddSessionResponse(std::string &requestId,
void LLVivoxVoiceClient::sessionConnectResponse(std::string &requestId, int statusCode, std::string &statusString) void LLVivoxVoiceClient::sessionConnectResponse(std::string &requestId, int statusCode, std::string &statusString)
{ {
sessionState *session = findSession(requestId); sessionState *session = findSession(requestId);
if(statusCode != 0) // 1026 is session already has media, somehow mediaconnect was called twice on the same session.
// set the session info to reflect that the user is already connected.
if (statusCode == 1026)
{
session->mVoiceEnabled = true;
session->mMediaConnectInProgress = false;
session->mMediaStreamState = streamStateConnected;
//session->mTextStreamState = streamStateConnected;
session->mErrorStatusCode = 0;
}
else if (statusCode != 0)
{ {
LL_WARNS("Voice") << "Session.Connect response failure (" << statusCode << "): " << statusString << LL_ENDL; LL_WARNS("Voice") << "Session.Connect response failure (" << statusCode << "): " << statusString << LL_ENDL;
if(session) if (session)
{ {
session->mMediaConnectInProgress = false; session->mMediaConnectInProgress = false;
session->mErrorStatusCode = statusCode; session->mErrorStatusCode = statusCode;
session->mErrorStatusString = statusString; session->mErrorStatusString = statusString;
if(session == mAudioSession) if (session == mAudioSession)
setState(stateJoinSessionFailed); setState(stateJoinSessionFailed);
} }
} }
@@ -3138,7 +3164,7 @@ void LLVivoxVoiceClient::sessionRemovedEvent(
// Reset the media state (we now have no info) // Reset the media state (we now have no info)
session->mMediaStreamState = streamStateUnknown; session->mMediaStreamState = streamStateUnknown;
session->mTextStreamState = streamStateUnknown; //session->mTextStreamState = streamStateUnknown;
// Conditionally delete the session // Conditionally delete the session
reapSession(session); reapSession(session);
@@ -3349,8 +3375,9 @@ void LLVivoxVoiceClient::mediaStreamUpdatedEvent(
switch(state) switch(state)
{ {
case streamStateDisconnecting:
case streamStateIdle: case streamStateIdle:
// Standard "left audio session" // Standard "left audio session", Vivox state 'disconnected'
session->mVoiceEnabled = false; session->mVoiceEnabled = false;
session->mMediaConnectInProgress = false; session->mMediaConnectInProgress = false;
leftAudioSession(session); leftAudioSession(session);
@@ -3360,6 +3387,7 @@ void LLVivoxVoiceClient::mediaStreamUpdatedEvent(
session->mVoiceEnabled = true; session->mVoiceEnabled = true;
session->mMediaConnectInProgress = false; session->mMediaConnectInProgress = false;
joinedAudioSession(session); joinedAudioSession(session);
case streamStateConnecting: // do nothing, but prevents a warning getting into the logs.
break; break;
case streamStateRinging: case streamStateRinging:
@@ -3394,6 +3422,7 @@ void LLVivoxVoiceClient::mediaStreamUpdatedEvent(
} }
} }
/* Obsolete
void LLVivoxVoiceClient::textStreamUpdatedEvent( void LLVivoxVoiceClient::textStreamUpdatedEvent(
std::string &sessionHandle, std::string &sessionHandle,
std::string &sessionGroupHandle, std::string &sessionGroupHandle,
@@ -3440,6 +3469,7 @@ void LLVivoxVoiceClient::textStreamUpdatedEvent(
} }
} }
} }
obsolete */
void LLVivoxVoiceClient::participantAddedEvent( void LLVivoxVoiceClient::participantAddedEvent(
std::string &sessionHandle, std::string &sessionHandle,
@@ -4260,7 +4290,7 @@ LLVivoxVoiceClient::sessionState* LLVivoxVoiceClient::startUserIMSession(const L
if(session->mHandle.empty()) if(session->mHandle.empty())
{ {
// Session isn't active -- start it up. // Session isn't active -- start it up.
sessionCreateSendMessage(session, false, true); sessionCreateSendMessage(session, false, false);
} }
else else
{ {
@@ -4271,6 +4301,7 @@ LLVivoxVoiceClient::sessionState* LLVivoxVoiceClient::startUserIMSession(const L
return session; return session;
} }
/* obsolete
BOOL LLVivoxVoiceClient::sendTextMessage(const LLUUID& participant_id, const std::string& message) BOOL LLVivoxVoiceClient::sendTextMessage(const LLUUID& participant_id, const std::string& message)
{ {
bool result = false; bool result = false;
@@ -4295,7 +4326,8 @@ BOOL LLVivoxVoiceClient::sendTextMessage(const LLUUID& participant_id, const std
return result; return result;
} }
*/
/* obsolete
void LLVivoxVoiceClient::sendQueuedTextMessages(sessionState *session) void LLVivoxVoiceClient::sendQueuedTextMessages(sessionState *session)
{ {
if(session->mTextStreamState == 1) if(session->mTextStreamState == 1)
@@ -4324,7 +4356,9 @@ void LLVivoxVoiceClient::sendQueuedTextMessages(sessionState *session)
// Session isn't connected yet, defer until later. // Session isn't connected yet, defer until later.
} }
} }
obsolete */
/*
void LLVivoxVoiceClient::endUserIMSession(const LLUUID &uuid) void LLVivoxVoiceClient::endUserIMSession(const LLUUID &uuid)
{ {
// Figure out if a session with the user exists // Figure out if a session with the user exists
@@ -4334,7 +4368,7 @@ void LLVivoxVoiceClient::endUserIMSession(const LLUUID &uuid)
// found the session // found the session
if(!session->mHandle.empty()) if(!session->mHandle.empty())
{ {
sessionTextDisconnectSendMessage(session); // sessionTextDisconnectSendMessage(session); // a SLim leftover, not used any more.
} }
} }
else else
@@ -4342,6 +4376,7 @@ void LLVivoxVoiceClient::endUserIMSession(const LLUUID &uuid)
LL_DEBUGS("Voice") << "Session not found for participant ID " << uuid << LL_ENDL; LL_DEBUGS("Voice") << "Session not found for participant ID " << uuid << LL_ENDL;
} }
} }
*/
bool LLVivoxVoiceClient::isValidChannel(std::string &sessionHandle) bool LLVivoxVoiceClient::isValidChannel(std::string &sessionHandle)
{ {
return(findSession(sessionHandle) != NULL); return(findSession(sessionHandle) != NULL);
@@ -4685,6 +4720,8 @@ void LLVivoxVoiceClient::enforceTether(void)
void LLVivoxVoiceClient::updatePosition(void) void LLVivoxVoiceClient::updatePosition(void)
{ {
// Throttle the position updates to one every 1/10 of a second if we are in an audio session at all
if (mAudioSession == NULL) return;
LLViewerRegion *region = gAgent.getRegion(); LLViewerRegion *region = gAgent.getRegion();
if(region && isAgentAvatarValid()) if(region && isAgentAvatarValid())
@@ -6800,6 +6837,10 @@ void LLVivoxProtocolParser::processResponse(std::string tag)
{ {
LLVivoxVoiceClient::getInstance()->sessionRemovedEvent(sessionHandle, sessionGroupHandle); LLVivoxVoiceClient::getInstance()->sessionRemovedEvent(sessionHandle, sessionGroupHandle);
} }
else if (!stricmp(eventTypeCstr, "SessionGroupUpdatedEvent"))
{
//TODO, we don't process this event, but we should not WARN that we have received it.
}
else if (!stricmp(eventTypeCstr, "SessionGroupAddedEvent")) else if (!stricmp(eventTypeCstr, "SessionGroupAddedEvent"))
{ {
LLVivoxVoiceClient::getInstance()->sessionGroupAddedEvent(sessionGroupHandle); LLVivoxVoiceClient::getInstance()->sessionGroupAddedEvent(sessionGroupHandle);
@@ -6828,19 +6869,11 @@ void LLVivoxProtocolParser::processResponse(std::string tag)
*/ */
LLVivoxVoiceClient::getInstance()->mediaCompletionEvent(sessionGroupHandle, mediaCompletionType); LLVivoxVoiceClient::getInstance()->mediaCompletionEvent(sessionGroupHandle, mediaCompletionType);
} }
/* obsolete, let else statement complain if a text message arrives
else if (!stricmp(eventTypeCstr, "TextStreamUpdatedEvent")) else if (!stricmp(eventTypeCstr, "TextStreamUpdatedEvent"))
{ {
/*
<Event type="TextStreamUpdatedEvent">
<SessionGroupHandle>c1_m1000xFnPP04IpREWNkuw1cOXlhw==_sg1</SessionGroupHandle>
<SessionHandle>c1_m1000xFnPP04IpREWNkuw1cOXlhw==1</SessionHandle>
<Enabled>true</Enabled>
<State>1</State>
<Incoming>true</Incoming>
</Event>
*/
LLVivoxVoiceClient::getInstance()->textStreamUpdatedEvent(sessionHandle, sessionGroupHandle, enabled, state, incoming); LLVivoxVoiceClient::getInstance()->textStreamUpdatedEvent(sessionHandle, sessionGroupHandle, enabled, state, incoming);
} } */
else if (!stricmp(eventTypeCstr, "ParticipantAddedEvent")) else if (!stricmp(eventTypeCstr, "ParticipantAddedEvent"))
{ {
/* /*

View File

@@ -92,10 +92,10 @@ public:
virtual bool isParticipant(const LLUUID& speaker_id); virtual bool isParticipant(const LLUUID& speaker_id);
// Send a text message to the specified user, initiating the session if necessary. // Send a text message to the specified user, initiating the session if necessary.
virtual BOOL sendTextMessage(const LLUUID& participant_id, const std::string& message); // virtual BOOL sendTextMessage(const LLUUID& participant_id, const std::string& message) const { return false; }
// close any existing text IM session with the specified user // close any existing text IM session with the specified user
virtual void endUserIMSession(const LLUUID &uuid); //virtual void endUserIMSession(const LLUUID &uuid);
// Returns true if calling back the session URI after the session has closed is possible. // Returns true if calling back the session URI after the session has closed is possible.
// Currently this will be false only for PSTN P2P calls. // Currently this will be false only for PSTN P2P calls.
@@ -242,6 +242,8 @@ protected:
streamStateIdle = 1, streamStateIdle = 1,
streamStateConnected = 2, streamStateConnected = 2,
streamStateRinging = 3, streamStateRinging = 3,
streamStateConnecting = 6, // same as Vivox session_media_connecting enum
streamStateDisconnecting = 7, //Same as Vivox session_media_disconnecting enum
}; };
struct participantState struct participantState
{ {
@@ -432,7 +434,7 @@ protected:
void tuningRenderStartSendMessage(const std::string& name, bool loop); void tuningRenderStartSendMessage(const std::string& name, bool loop);
void tuningRenderStopSendMessage(); void tuningRenderStopSendMessage();
void tuningCaptureStartSendMessage(int duration); void tuningCaptureStartSendMessage(int loop);
void tuningCaptureStopSendMessage(); void tuningCaptureStopSendMessage();
//---------------------------------- //----------------------------------
@@ -463,7 +465,7 @@ protected:
void accountLoginStateChangeEvent(std::string &accountHandle, int statusCode, std::string &statusString, int state); void accountLoginStateChangeEvent(std::string &accountHandle, int statusCode, std::string &statusString, int state);
void mediaCompletionEvent(std::string &sessionGroupHandle, std::string &mediaCompletionType); void mediaCompletionEvent(std::string &sessionGroupHandle, std::string &mediaCompletionType);
void mediaStreamUpdatedEvent(std::string &sessionHandle, std::string &sessionGroupHandle, int statusCode, std::string &statusString, int state, bool incoming); void mediaStreamUpdatedEvent(std::string &sessionHandle, std::string &sessionGroupHandle, int statusCode, std::string &statusString, int state, bool incoming);
void textStreamUpdatedEvent(std::string &sessionHandle, std::string &sessionGroupHandle, bool enabled, int state, bool incoming); // obsolete void textStreamUpdatedEvent(std::string &sessionHandle, std::string &sessionGroupHandle, bool enabled, int state, bool incoming);
void sessionAddedEvent(std::string &uriString, std::string &alias, std::string &sessionHandle, std::string &sessionGroupHandle, bool isChannel, bool incoming, std::string &nameString, std::string &applicationString); void sessionAddedEvent(std::string &uriString, std::string &alias, std::string &sessionHandle, std::string &sessionGroupHandle, bool isChannel, bool incoming, std::string &nameString, std::string &applicationString);
void sessionGroupAddedEvent(std::string &sessionGroupHandle); void sessionGroupAddedEvent(std::string &sessionGroupHandle);
void sessionRemovedEvent(std::string &sessionHandle, std::string &sessionGroupHandle); void sessionRemovedEvent(std::string &sessionHandle, std::string &sessionGroupHandle);
@@ -579,7 +581,7 @@ protected:
void sessionTerminateSendMessage(sessionState *session); void sessionTerminateSendMessage(sessionState *session);
void sessionGroupTerminateSendMessage(sessionState *session); void sessionGroupTerminateSendMessage(sessionState *session);
void sessionMediaDisconnectSendMessage(sessionState *session); void sessionMediaDisconnectSendMessage(sessionState *session);
void sessionTextDisconnectSendMessage(sessionState *session); // void sessionTextDisconnectSendMessage(sessionState *session);
@@ -741,7 +743,7 @@ private:
// start a text IM session with the specified user // start a text IM session with the specified user
// This will be asynchronous, the session may be established at a future time. // This will be asynchronous, the session may be established at a future time.
sessionState* startUserIMSession(const LLUUID& uuid); sessionState* startUserIMSession(const LLUUID& uuid);
void sendQueuedTextMessages(sessionState *session); // obsolete void sendQueuedTextMessages(sessionState *session);
void enforceTether(void); void enforceTether(void);

View File

@@ -43,7 +43,7 @@
<volume_slider control_name="AudioLevelMic" bottom_delta="-12" left_delta="-6" follows="left|top" height="17" <volume_slider control_name="AudioLevelMic" bottom_delta="-12" left_delta="-6" follows="left|top" height="17"
increment="0.05" initial_val="1.0" max_val="2" min_val="0" increment="0.05" initial_val="1.0" max_val="2" min_val="0"
mouse_opaque="true" name="mic_volume_slider" mouse_opaque="true" name="mic_volume_slider"
tool_tip="Change the volume using this slider" width="120" /> tool_tip="Change the mic level using this slider" width="120" />
<text bottom_delta="-4" follows="left|top" height="20" left_delta="120" <text bottom_delta="-4" follows="left|top" height="20" left_delta="120"
name="wait_text" width="200"> name="wait_text" width="200">
Please wait Please wait