From 7805feb08f6e42ffc299ace6c6b44629b62a55d3 Mon Sep 17 00:00:00 2001 From: Siana Gearz Date: Fri, 7 Jan 2011 17:07:00 +0100 Subject: [PATCH] Now we're Vivox license compliant --- indra/newview/CMakeLists.txt | 2 + indra/newview/app_settings/settings.xml | 24 ++ indra/newview/floatervoicelicense.cpp | 240 ++++++++++++++++++ indra/newview/floatervoicelicense.h | 73 ++++++ indra/newview/llfirstuse.cpp | 18 ++ indra/newview/llfirstuse.h | 1 + indra/newview/llprefsvoice.cpp | 15 +- indra/newview/llstartup.cpp | 23 +- indra/newview/llstartup.h | 1 + .../default/html/en-us/license/vivox_aup.html | 170 +++++++++++++ .../xui/en-us/floater_voice_license.xml | 39 +++ 11 files changed, 602 insertions(+), 4 deletions(-) create mode 100644 indra/newview/floatervoicelicense.cpp create mode 100644 indra/newview/floatervoicelicense.h create mode 100644 indra/newview/skins/default/html/en-us/license/vivox_aup.html create mode 100644 indra/newview/skins/default/xui/en-us/floater_voice_license.xml diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index 7d43dd3e9..d5fe4fd63 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -64,6 +64,7 @@ include_directories( ) set(viewer_SOURCE_FILES + floatervoicelicense.cpp cofmgr.cpp ascentdaycyclemanager.cpp ascentfloatercontactgroups.cpp @@ -530,6 +531,7 @@ set(viewer_HEADER_FILES CMakeLists.txt ViewerInstall.cmake + floatervoicelicense.h cofmgr.h ascentdaycyclemanager.h ascentfloatercontactgroups.h diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 407249640..2b0e68bb3 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -9,6 +9,30 @@ settings_rlv.xml + VivoxLicenseAccepted + + Comment + By setting to true, you agree to accept the Vivox license agreement at http://www.vivox.com/vivox_aup.html + Persist + 1 + Type + Boolean + Value + 0 + + + WarnFirstVoiceLicense + + Comment + Enables FirstVoiceLicense window on login + Persist + 1 + Type + Boolean + Value + 1 + + ShyotlRenderUseStreamVBO diff --git a/indra/newview/floatervoicelicense.cpp b/indra/newview/floatervoicelicense.cpp new file mode 100644 index 000000000..0b9ac5bc7 --- /dev/null +++ b/indra/newview/floatervoicelicense.cpp @@ -0,0 +1,240 @@ +/** +* @file floatervoicelicense.cpp +* @brief prompts user to agree to the Vivox license in order to enable voice +* +* $LicenseInfo:firstyear=2009&license=viewergpl$ +* +* Copyright (c) 2010, McCabe Maxsted +* +* Imprudence Viewer Source Code +* The source code in this file ("Source Code") is provided to you +* under the terms of the GNU General Public License, version 2.0 +* ("GPL"). Terms of the GPL can be found in doc/GPL-license.txt in +* this distribution, or online at +* http://secondlifegrid.net/programs/open_source/licensing/gplv2 +* +* There are special exceptions to the terms and conditions of the GPL as +* it is applied to this Source Code. View the full text of the exception +* in the file doc/FLOSS-exception.txt in this software distribution, or +* online at http://secondlifegrid.net/programs/open_source/licensing/flossexception +* +* By copying, modifying or distributing this software, you acknowledge +* that you have read and understood your obligations described above, +* and agree to abide by those obligations. +* +* ALL SOURCE CODE IS PROVIDED "AS IS." THE AUTHOR MAKES NO +* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, +* COMPLETENESS OR PERFORMANCE. +* $/LicenseInfo$ +*/ + +#include "llviewerprecompiledheaders.h" + +#include "floatervoicelicense.h" + +// viewer includes +#include "llagent.h" +#include "llappviewer.h" +#include "llstartup.h" +#include "llviewercontrol.h" +#include "llviewerstats.h" +#include "llviewertexteditor.h" +#include "llviewerwindow.h" + +// linden library includes +#include "llbutton.h" +#include "llhttpclient.h" +#include "llhttpstatuscodes.h" // for HTTP_FOUND +#include "llradiogroup.h" +#include "lltextbox.h" +#include "llui.h" +#include "lluictrlfactory.h" +#include "llvfile.h" +#include "message.h" + + +FloaterVoiceLicense::FloaterVoiceLicense(const LLSD& key) +: LLModalDialog( std::string(" "), 100, 100 ), + mWebBrowserWindowId( 0 ), + mLoadCompleteCount( 0 ) +{ + LLUICtrlFactory::getInstance()->buildFloater(this, "floater_voice_license.xml"); +} + +// helper class that trys to download a URL from a web site and calls a method +// on parent class indicating if the web server is working or not +class LLIamHereVoice : public LLHTTPClient::Responder +{ + private: + LLIamHereVoice( FloaterVoiceLicense* parent ) : + mParent( parent ) + {} + + FloaterVoiceLicense* mParent; + + public: + + static boost::intrusive_ptr< LLIamHereVoice > build( FloaterVoiceLicense* parent ) + { + return boost::intrusive_ptr< LLIamHereVoice >( new LLIamHereVoice( parent ) ); + }; + + virtual void setParent( FloaterVoiceLicense* parentIn ) + { + mParent = parentIn; + }; + + virtual void result( const LLSD& content ) + { + if ( mParent ) + mParent->setSiteIsAlive( true ); + }; + + virtual void error( U32 status, const std::string& reason ) + { + if ( mParent ) + { + // *HACK: For purposes of this alive check, 302 Found + // (aka Moved Temporarily) is considered alive. The web site + // redirects this link to a "cache busting" temporary URL. JC + bool alive = (status == HTTP_FOUND); + mParent->setSiteIsAlive( alive ); + } + }; +}; + +// this is global and not a class member to keep crud out of the header file +namespace { + boost::intrusive_ptr< LLIamHereVoice > gResponsePtr = 0; +}; + +BOOL FloaterVoiceLicense::postBuild() +{ + childSetAction("Continue", onContinue, this); + childSetAction("Cancel", onCancel, this); + childSetCommitCallback("agree_chk", updateAgree, this); + + // disable Agree to License radio button until the page has fully loaded + LLCheckBoxCtrl* license_agreement = getChild("agree_chk"); + license_agreement->setEnabled( false ); + + // hide the SL text widget if we're displaying license with using a browser widget. + LLTextEditor *editor = getChild("license_text"); + editor->setVisible( FALSE ); + + LLMediaCtrl* web_browser = getChild("license_html"); + if ( web_browser ) + { + // start to observe it so we see navigate complete events + web_browser->addObserver( this ); + + gResponsePtr = LLIamHereVoice::build( this ); + LLHTTPClient::get( getString( "real_url" ), gResponsePtr ); + } + + return TRUE; +} + +void FloaterVoiceLicense::setSiteIsAlive( bool alive ) +{ + LLMediaCtrl* web_browser = getChild("license_html"); + // if the contents of the site was retrieved + if ( alive ) + { + if ( web_browser ) + { + // navigate to the "real" page + std::string real_url = getString( "real_url" ); + if (real_url.find("http://") == 0) { + web_browser->navigateTo(real_url); + } else { + web_browser->navigateToLocalPage("license",real_url); + } + } + } + else + { + web_browser->navigateToLocalPage("license", getString("fallback_html")); + // normally this is set when navigation to license page completes (so you can't accept before it loads) + // but if the page is unavailable, we need to do this now + LLCheckBoxCtrl* license_agreement = getChild("agree_chk"); + license_agreement->setEnabled( true ); + } +} + +FloaterVoiceLicense::~FloaterVoiceLicense() +{ + + // tell the responder we're not here anymore + if ( gResponsePtr ) + { + gResponsePtr->setParent( 0 ); + } +} + +// virtual +void FloaterVoiceLicense::draw() +{ + // draw children + LLModalDialog::draw(); +} + +// static +void FloaterVoiceLicense::updateAgree(LLUICtrl*, void* userdata ) +{ + FloaterVoiceLicense* self = (FloaterVoiceLicense*) userdata; + bool agree = self->childGetValue("agree_chk").asBoolean(); + self->childSetEnabled("Continue", agree); +} + +// static +void FloaterVoiceLicense::onContinue( void* userdata ) +{ + FloaterVoiceLicense* self = (FloaterVoiceLicense*) userdata; + llinfos << "User agreed to the Vivox personal license" << llendl; + + // enabling voice by default here seems like the best behavior + gSavedSettings.setBOOL("EnableVoiceChat", TRUE); + gSavedSettings.setBOOL("VivoxLicenseAccepted", TRUE); + + // save these settings in case something bad happens later + gSavedSettings.saveToFile(gSavedSettings.getString("ClientSettingsFile"), TRUE); + + if (LLStartUp::getStartupState() == STATE_LOGIN_VOICE_LICENSE) + { + LLStartUp::setStartupState( STATE_LOGIN_AUTH_INIT ); // Go back and finish authentication + } + self->close(); // destroys this object +} + +// static +void FloaterVoiceLicense::onCancel( void* userdata ) +{ + FloaterVoiceLicense* self = (FloaterVoiceLicense*) userdata; + llinfos << "User disagreed with the vivox personal license" << llendl; + gSavedSettings.setBOOL("EnableVoiceChat", FALSE); + gSavedSettings.setBOOL("VivoxLicenseAccepted", FALSE); + + if (LLStartUp::getStartupState() == STATE_LOGIN_VOICE_LICENSE) + { + LLStartUp::setStartupState( STATE_LOGIN_AUTH_INIT ); // Go back and finish authentication + } + self->mLoadCompleteCount = 0; // reset counter for next time we come here + self->close(); // destroys this object +} + +//virtual +void FloaterVoiceLicense::handleMediaEvent(LLPluginClassMedia* /*self*/, EMediaEvent event) +{ + if(event == MEDIA_EVENT_NAVIGATE_COMPLETE) + { + // skip past the loading screen navigate complete + if ( ++mLoadCompleteCount == 2 ) + { + llinfos << "NAVIGATE COMPLETE" << llendl; + // enable Agree to License radio button now that page has loaded + LLCheckBoxCtrl * license_agreement = getChild("agree_chk"); + license_agreement->setEnabled( true ); + } + } +} diff --git a/indra/newview/floatervoicelicense.h b/indra/newview/floatervoicelicense.h new file mode 100644 index 000000000..30dbb2fa3 --- /dev/null +++ b/indra/newview/floatervoicelicense.h @@ -0,0 +1,73 @@ +/** +* @file floatervoicelicense.h +* @brief prompts user to agree to the Vivox license in order to enable voice +* +* $LicenseInfo:firstyear=2009&license=viewergpl$ +* +* Copyright (c) 2010, McCabe Maxsted +* +* Imprudence Viewer Source Code +* The source code in this file ("Source Code") is provided to you +* under the terms of the GNU General Public License, version 2.0 +* ("GPL"). Terms of the GPL can be found in doc/GPL-license.txt in +* this distribution, or online at +* http://secondlifegrid.net/programs/open_source/licensing/gplv2 +* +* There are special exceptions to the terms and conditions of the GPL as +* it is applied to this Source Code. View the full text of the exception +* in the file doc/FLOSS-exception.txt in this software distribution, or +* online at http://secondlifegrid.net/programs/open_source/licensing/flossexception +* +* By copying, modifying or distributing this software, you acknowledge +* that you have read and understood your obligations described above, +* and agree to abide by those obligations. +* +* ALL SOURCE CODE IS PROVIDED "AS IS." THE AUTHOR MAKES NO +* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, +* COMPLETENESS OR PERFORMANCE. +* $/LicenseInfo$ +*/ + +#ifndef FLOATERVOICELICENSE_H +#define FLOATERVOICELICENSE_H + +#include "llfloater.h" + +#include "llmodaldialog.h" +#include "llassetstorage.h" +#include "llmediactrl.h" + +class LLButton; +class LLRadioGroup; +class LLVFS; +class LLTextEditor; +class LLUUID; + +class FloaterVoiceLicense : + public LLModalDialog, + public LLViewerMediaObserver, + public LLFloaterSingleton +{ +public: + FloaterVoiceLicense(const LLSD& key); + virtual ~FloaterVoiceLicense(); + + BOOL postBuild(); + + virtual void draw(); + + static void updateAgree( LLUICtrl *, void* userdata ); + static void onContinue( void* userdata ); + static void onCancel( void* userdata ); + + void setSiteIsAlive( bool alive ); + + // inherited from LLViewerMediaObserver + /*virtual*/ void handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event); + +private: + int mWebBrowserWindowId; + int mLoadCompleteCount; +}; + +#endif // FLOATERVOICELICENSE_H diff --git a/indra/newview/llfirstuse.cpp b/indra/newview/llfirstuse.cpp index 9ee24d6d8..0c7837ded 100644 --- a/indra/newview/llfirstuse.cpp +++ b/indra/newview/llfirstuse.cpp @@ -44,6 +44,8 @@ #include "llui.h" #include "llappviewer.h" #include "lltracker.h" +#include "floatervoicelicense.h" +#include "llstartup.h" // static std::set LLFirstUse::sConfigVariables; @@ -277,3 +279,19 @@ void LLFirstUse::useMedia() LLNotifications::instance().add("FirstMedia"); } } + +// static +void LLFirstUse::voiceLicenseAgreement() +{ + if (gSavedSettings.getWarning("FirstVoiceLicense")) + { + gSavedSettings.setWarning("FirstVoiceLicense", FALSE); + + FloaterVoiceLicense::getInstance()->open(); + FloaterVoiceLicense::getInstance()->center(); + } + else // currently in STATE_LOGIN_VOICE_LICENSE when arriving here + { + LLStartUp::setStartupState(STATE_LOGIN_AUTH_INIT); + } +} diff --git a/indra/newview/llfirstuse.h b/indra/newview/llfirstuse.h index 14de782ea..d688959d6 100644 --- a/indra/newview/llfirstuse.h +++ b/indra/newview/llfirstuse.h @@ -110,6 +110,7 @@ public: static void useDebugMenus(); static void useSculptedPrim(); static void useMedia(); + static void voiceLicenseAgreement(); protected: static std::set sConfigVariables; diff --git a/indra/newview/llprefsvoice.cpp b/indra/newview/llprefsvoice.cpp index de3795f28..e45a9c2c2 100644 --- a/indra/newview/llprefsvoice.cpp +++ b/indra/newview/llprefsvoice.cpp @@ -35,6 +35,7 @@ #include "llprefsvoice.h" +#include "floatervoicelicense.h" #include "llcheckboxctrl.h" #include "llfloatervoicedevicesettings.h" #include "llfocusmgr.h" @@ -136,8 +137,6 @@ BOOL LLPrefsVoice::postBuild() void LLPrefsVoice::apply() { - gSavedSettings.setBOOL("EnableVoiceChat", childGetValue("enable_voice_check")); - gSavedSettings.setString("PushToTalkButton", childGetValue("modifier_combo")); gSavedSettings.setBOOL("VoiceCallsFriendsOnly", childGetValue("voice_call_friends_only_check")); gSavedSettings.setBOOL("AutoDisengageMic", childGetValue("auto_disengage_mic_check")); @@ -150,6 +149,18 @@ void LLPrefsVoice::apply() { voice_device_settings->apply(); } + + bool enable_voice = childGetValue("enable_voice_check"); + if (enable_voice && !gSavedSettings.getBOOL("VivoxLicenseAccepted")) + { + // This window enables voice chat if license is accepted + FloaterVoiceLicense::getInstance()->open(); + FloaterVoiceLicense::getInstance()->center(); + } + else + { + gSavedSettings.setBOOL("EnableVoiceChat", enable_voice); + } } void LLPrefsVoice::cancel() diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp index 381fc5b79..d626154e2 100644 --- a/indra/newview/llstartup.cpp +++ b/indra/newview/llstartup.cpp @@ -1528,12 +1528,30 @@ bool idle_startup() // color init must be after saved settings loaded init_colors(); - // skipping over STATE_UPDATE_CHECK because that just waits for input - LLStartUp::setStartupState( STATE_LOGIN_AUTH_INIT ); + if (gSavedSettings.getBOOL("VivoxLicenseAccepted")) + { + // skipping over STATE_LOGIN_VOICE_LICENSE since we don't need it + // skipping over STATE_UPDATE_CHECK because that just waits for input + LLStartUp::setStartupState( STATE_LOGIN_AUTH_INIT ); + } + else + { + LLStartUp::setStartupState(STATE_LOGIN_VOICE_LICENSE); + LLFirstUse::voiceLicenseAgreement(); + } return FALSE; } + if (STATE_LOGIN_VOICE_LICENSE == LLStartUp::getStartupState()) + { + LL_DEBUGS("AppInitStartupState") << "STATE_LOGIN_VOICE_LICENSE" << LL_ENDL; + // prompt the user to agree to the voice license before enabling voice. + // only send users here on first login, otherwise continue + // on to STATE_LOGIN_AUTH_INIT + return FALSE; + } + if (STATE_UPDATE_CHECK == LLStartUp::getStartupState()) { // wait for user to give input via dialog box @@ -4459,6 +4477,7 @@ std::string LLStartUp::startupStateToString(EStartupState state) RTNENUM( STATE_LOGIN_SHOW ); RTNENUM( STATE_LOGIN_WAIT ); RTNENUM( STATE_LOGIN_CLEANUP ); + RTNENUM( STATE_LOGIN_VOICE_LICENSE ); RTNENUM( STATE_UPDATE_CHECK ); RTNENUM( STATE_LOGIN_AUTH_INIT ); RTNENUM( STATE_LOGIN_AUTHENTICATE ); diff --git a/indra/newview/llstartup.h b/indra/newview/llstartup.h index 4bd9f9b52..0e8824364 100644 --- a/indra/newview/llstartup.h +++ b/indra/newview/llstartup.h @@ -50,6 +50,7 @@ typedef enum { STATE_LOGIN_SHOW, // Show login screen STATE_LOGIN_WAIT, // Wait for user input at login screen STATE_LOGIN_CLEANUP, // Get rid of login screen and start login + STATE_LOGIN_VOICE_LICENSE, // Show license agreement for using voice STATE_UPDATE_CHECK, // Wait for user at a dialog box (updates, term-of-service, etc) STATE_LOGIN_AUTH_INIT, // Start login to SL servers STATE_LOGIN_AUTHENTICATE, // Do authentication voodoo diff --git a/indra/newview/skins/default/html/en-us/license/vivox_aup.html b/indra/newview/skins/default/html/en-us/license/vivox_aup.html new file mode 100644 index 000000000..a4a4f20f4 --- /dev/null +++ b/indra/newview/skins/default/html/en-us/license/vivox_aup.html @@ -0,0 +1,170 @@ + + + + + Vivox Acceptable Use Policy + + +

Acceptable Use Policy (AUP)

+
    +
  1. BACKGROUND: Users of the online + voice services provided by Vivox, Inc. (“Vivox”) (the + “Service”), through the act of utilizing the Service, agree to + adhere to this Acceptable Use Policy (the “Policy”). Vivox + reserves the right to immediately terminate a user’s access to the + Service if the user engages in any of the activities prohibited by + this Policy or uses the Service contrary to this Policy. Each user + is responsible for all activities conducted under its account. The + user is also responsible for adhering to any policy set forth by any + other service provider accessed through the Service; Vivox, and its + suppliers and providers, assume no responsibility or liability for a + user’s failure to comply with the Policy. The user acknowledges + that Vivox may have access to information about or provided by the + user, including diagnostic information sent automatically after a + problem or error, and agrees to such access and use.

    +
  2. PROHIBITED USES AND ACTIVITIES: + Users shall not provide inaccurate or misleading information to + Vivox or use the Service to: (i) access any other person's computer + or computer system, software, or data without their knowledge and + consent; or breach the security of another user; or attempt to + circumvent the user authentication or security of any host, network, + system, or account, which includes, but is not limited to, accessing + data not intended for the user, logging into or making use of a + server or account the user is not expressly authorized to access, or + probing the security of other hosts, networks, or accounts; or use + automated means (such as robots and spiders) to obtain information + from Vivox’s website or, though it, from other websites; (ii) + interfere with computer networking or telecommunications service to + any user, host or network, including, without limitation, denial of + service attacks, flooding of a network, overloading a service, + improper seizing and abuse of operator privileges and attempts to + "crash" a host; (iii) violate the rules, regulations, or + policies applicable to any network, server, computer database, or + service that accessed by the user; (iv) transmit, re-transmit, or + store any content or to engage in any activity that infringes the + intellectual property rights or privacy rights of Vivox or any + individual, group or entity, including but not limited to any rights + protected by any copyright, patent, trademark, trade secret, trade + dress, right of privacy, right of publicity, moral rights or other + intellectual property right now known or later recognized by + statute, judicial decision or regulation; (v) host, post, transmit, + or re-transmit any content or material that is threatening, + harassing, obscene, indecent, pornographic, hateful, malicious, + racist, defamatory, libelous, treasonous, excessively violent or + promotes the use of violence, or provides instruction, information + or assistance in causing or carrying out violence against any + government, organization, group or individual, or provides guidance, + information or assistance with respect to causing damage or security + breaches to or Vivox's network or to the network of any other + service provider; (vi) commit an act that constitutes a criminal + offense, gives rise to civil liability, or otherwise violates any + applicable local, state, federal or international law, or (vii) + encourage conduct that would constitute a criminal offense, give + rise to civil liability, or otherwise violate any applicable local, + state, federal or international law.

    +
  3. SECURITY: In all cases, the user + is solely responsible for the security of any device or application + it chooses to connect to the Service, including any data stored on + or communications passed. 

    +
  4. TRADEMARKS AND COPYRIGHTS. + “Vivox,” “Powered by Vivox” and similar marks are the + property of Vivox. All other names, graphics, logos, marks and trade + names used in connection with this Service, are the property of + their owners and suppliers and may not be used without permission + for any purpose. The copyright in the Vivox website and Service and + all related materials are owned by Vivox or its suppliers unless + otherwise stated. 

    +
  5. DISCLAIMER OF WARRANTIES. + THE SERVICE IS PROVIDED "AS IS" AND "WITH ALL + FAULTS," AND PROVIDER AND VIVOX HEREBY DISCLAIM ALL WARRANTIES, + EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION (I) WARRANTIES OF + MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NON-INFRINGEMENT, AND (II) ANY WARRANTIES CONCERNING THE SECURITY, + RELIABILITY OR PERFORMANCE OF THE SERVICE. Certain states prohibit + the disclaimer of warranties in certain cases, so the above may not + apply to all users in all instances.

    THE DOWNLOADING OR + SUBMISSION OF ANY MATERIALS IS DONE AT THE USER’S OWN RISK, AND + THE USER IS SOLELY RESPONSIBLE FOR ANY LOSS OR DAMAGE TO ANY + CONTENT, IMAGE, COMPUTER SYSTEM OR DATA THAT MAY RESULT FROM USING + THE SERVICE.

    +
  6. EXCLUSION OF DAMAGES. TO + THE FULLEST EXTENT ALLOWED BY LAW, VIVOX SHALL NOT BE LIABLE FOR ANY + INDIRECT OR CONSEQUENTIAL DAMAGES, INCLUDING INCIDENTAL, SPECIAL, + EXEMPLARY AND PUNITIVE DAMAGES, RESULTING FROM THE USE OR PROVISION + OF THE SERVICE, EVEN IF THE POSSIBILITY OF SUCH DAMAGES IS KNOWN. + Certain states prohibit the limitation of liability in certain + cases, so the above may not apply to the user in all instances.

    +
  7. ENFORCEMENT OF THIS POLICY: Vivox + does not routinely monitors the activity of Service accounts for + violation of this Policy. Vivox reserves the right at any time to + monitor usage, transmissions, and content from time to time to + operate the Service; to identify violations of this Policy; and/or + to protect the network, the Service and/or other users. If the + Service is used in a way that Vivox, in their sole discretion, + believe violate this Policy, it may take any responsive actions they + deem appropriate, including, but are not limited to, the immediate + suspension or termination of all or any portion of the Service. + Vivox will have no liability for any of these responsive actions. + These actions are not exclusive remedies and Vivox may take any + other legal or technical action deemed appropriate. The user + expressly authorizes Vivox to cooperate with (i) law enforcement + authorities in the investigation of suspected legal violations, and + (ii) any system administrators at other Internet service providers + or other network or computing facilities in order to enforce this + Policy. This cooperation may include making available personally + identifiable information about users to law enforcement or system + administrators. The failure to enforce this Policy, for whatever + reason or for no reason, shall not be construed as a waiver of any + right to do so at any time. The user agrees that if any portion of + this Policy is held invalid or unenforceable, such portion will be + construed consistent with applicable law as nearly as possible, and + the remaining portions will remain in full force and effect. The + user agrees to indemnify, defend and hold harmless Vivox and its + affiliates, suppliers, providers, and agents against all claims and + expenses (including reasonable attorney fees) resulting from users + engaging in any of the prohibited activities listed in this Policy + or resulting from users violating the Policy or any other posted + policy related to the Service. The foregoing user indemnification + will survive any termination of the user’s agreements with Vivox .

    +
  8. ARBITRATION. Except for the right + of a party to seek equitable relief, any disputes arising under or + related to this Agreement (“Dispute”), excluding any Dispute + relating to the validity or infringement of any intellectual + property right, will be resolved by negotiation, mediation and, if + necessary, arbitration, as follows. The party raising such Dispute + will promptly advise the other party in writing describing in + reasonable detail the nature of such Dispute (“Notice of + Dispute”). The parties will negotiate in good faith to resolve the + Dispute, but if they have not done so within thirty (30) days, the + parties will submit the Dispute to a mutually agreed mediation + organization. If the parties are unable to resolve the Dispute + within sixty (60) days after delivery of the Notice of Dispute, then + the Dispute will be resolved by a single arbitrator in a final and + binding arbitration under the then current procedural rules of the + American Arbitration Association. All proceedings will be conducted + in the English language in Boston, Massachusetts. The arbitrator + will have no power to modify the terms or conditions of this + Agreement, or to award punitive damages. Any award rendered in such + arbitration may be enforced by either party in any Court of + competent jurisdiction.

    +
  9. GENERAL TERMS. This Agreement is + governed by the laws of the Commonwealth of Massachusetts. No + agency, partnership, joint venture, employment or franchise + relationship is intended or created by this Agreement. This AUP + constitute the entire agreement between the parties concerning the + use of the Service. If any provision of this Agreement is found to + be unenforceable, it shall be deemed modified to the least extent + needed to make the provision enforceable; the remaining terms of + this Agreement shall remain in full force and effect. Vivox reserves + the right to disclose any information about any user as required by + a court order or as recommended by counsel in the context of any + action by any government entity or other third party.

    +
  10. CHANGES TO THIS POLICY. Vivox may + revise its Acceptable Use Policy from time to time without prior + notice. Any changes will be presented in the latest version at the + Vivox web site. All revised copies of the Policy are effective + immediately upon a user’s first use of the Service after the + change has been posted.

    +
+ + diff --git a/indra/newview/skins/default/xui/en-us/floater_voice_license.xml b/indra/newview/skins/default/xui/en-us/floater_voice_license.xml new file mode 100644 index 000000000..4596134c8 --- /dev/null +++ b/indra/newview/skins/default/xui/en-us/floater_voice_license.xml @@ -0,0 +1,39 @@ + + +