Now we're Vivox license compliant

This commit is contained in:
Siana Gearz
2011-01-07 17:07:00 +01:00
parent 16b6ebf7de
commit 7805feb08f
11 changed files with 602 additions and 4 deletions

View File

@@ -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

View File

@@ -9,6 +9,30 @@
<string>settings_rlv.xml</string>
</array>
<key>VivoxLicenseAccepted</key>
<map>
<key>Comment</key>
<string>By setting to true, you agree to accept the Vivox license agreement at http://www.vivox.com/vivox_aup.html</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>0</integer>
</map>
<key>WarnFirstVoiceLicense</key>
<map>
<key>Comment</key>
<string>Enables FirstVoiceLicense window on login</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>1</integer>
</map>
<!--Expanded settings from Vanilla SL -->
<key>ShyotlRenderUseStreamVBO</key>
<map>

View File

@@ -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<LLCheckBoxCtrl>("agree_chk");
license_agreement->setEnabled( false );
// hide the SL text widget if we're displaying license with using a browser widget.
LLTextEditor *editor = getChild<LLTextEditor>("license_text");
editor->setVisible( FALSE );
LLMediaCtrl* web_browser = getChild<LLMediaCtrl>("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<LLMediaCtrl>("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<LLCheckBoxCtrl>("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<LLCheckBoxCtrl>("agree_chk");
license_agreement->setEnabled( true );
}
}
}

View File

@@ -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<FloaterVoiceLicense>
{
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

View File

@@ -44,6 +44,8 @@
#include "llui.h"
#include "llappviewer.h"
#include "lltracker.h"
#include "floatervoicelicense.h"
#include "llstartup.h"
// static
std::set<std::string> 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);
}
}

View File

@@ -110,6 +110,7 @@ public:
static void useDebugMenus();
static void useSculptedPrim();
static void useMedia();
static void voiceLicenseAgreement();
protected:
static std::set<std::string> sConfigVariables;

View File

@@ -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()

View File

@@ -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 );

View File

@@ -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

View File

@@ -0,0 +1,170 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=utf-8">
<TITLE>Vivox Acceptable Use Policy</TITLE>
</HEAD>
<BODY>
<H1>Acceptable Use Policy (AUP)</H1>
<OL>
<LI><P>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 users 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
users 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.</P>
<LI><P>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 Vivoxs 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
&quot;crash&quot; 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.</P>
<LI><P>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.&nbsp;</P>
<LI><P>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.&nbsp;</P>
<LI><P><STRONG>DISCLAIMER OF WARRANTIES.
THE SERVICE IS PROVIDED &quot;AS IS&quot; AND &quot;WITH ALL
FAULTS,&quot; 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.<BR><BR>THE DOWNLOADING OR
SUBMISSION OF ANY MATERIALS IS DONE AT THE USERS 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.</STRONG></P>
<LI><P><STRONG>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.</STRONG></P>
<LI><P>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 users agreements with Vivox .</P>
<LI><P>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.</P>
<LI><P>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.</P>
<LI><P>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 users first use of the Service after the
change has been posted.</P>
</OL>
</BODY>
</HTML>

View File

@@ -0,0 +1,39 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<floater can_close="false" can_drag_on_left="false" can_minimize="false"
can_resize="false" height="500" min_height="100" min_width="100"
name="modal container" title="" width="600">
<button bottom="-484" enabled="false" font="SansSerif" halign="center" height="20"
label="Continue" label_selected="Continue" left="484" mouse_opaque="true"
name="Continue" width="100" />
<button bottom="-484" font="SansSerif" halign="center" height="20" label="Cancel"
label_selected="Cancel" left="16" mouse_opaque="true" name="Cancel"
width="100" />
<check_box bottom="-435" follows="top|right"
font="SansSerifSmall" height="16" initial_value="false" label="I Agree to the Terms of the Vivox Acceptable Use Policy"
left="16" mouse_opaque="true" name="agree_chk" width="55" />
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom="-50" drop_shadow_visible="true" follows="left|top" font="SansSerif"
h_pad="0" halign="left" height="30" left="16" mouse_opaque="true"
name="license_heading" v_pad="0" width="552">
Please read the following license carefully.
To use voice, you must accept the license agreement.
</text>
<text_editor bottom="-376" embedded_items="false" follows="left|top" font="SansSerif"
height="283" left="16" max_length="65536" mouse_opaque="true"
name="license_text" width="568"
word_wrap="true">
LICENSE_TEXT
</text_editor>
<!-- Loading text says: "Loading Vivox Personal License Agreement..." URL encoded -->
<web_browser bottom="-406" embedded_items="false" follows="left|top" font="SansSerif"
height="340" left="16" max_length="65536" mouse_opaque="true"
name="license_html"
start_url="data:text/html,%3Chtml%3E%3Chead%3E%3C/head%3E%3Cbody text=%22000000%22%3E%3Ch2%3E Loading %3Ca%20target%3D%22_external%22%20href%3D%22http%3A//vivox.com/vivox_aup.html%22%3EVivox%20Acceptable%20Use%20Policy%3C/a%3E...%3C/h2%3E %3C/body%3E %3C/html%3E"
width="568" word_wrap="true" />
<string name="real_url">
vivox_aup.html
</string>
<string name="fallback_html">
vivox_aup.html
</string>
</floater>