From 23811df3cf466928a19e93e2587038159ec03fdf Mon Sep 17 00:00:00 2001
From: Drake Arconis
Date: Sun, 19 Feb 2012 06:43:04 -0500
Subject: [PATCH 01/35] Adding to Ignore.
---
.gitignore | 1 +
1 file changed, 1 insertion(+)
diff --git a/.gitignore b/.gitignore
index bfe820c87..c56bf2a54 100644
--- a/.gitignore
+++ b/.gitignore
@@ -18,6 +18,7 @@
*.rej
*.bak
*~
+*.DS_Store
/LICENSES/
/edited-files.txt
qtcreator-build/
From 925c42294f451b1118f6d8e5183364329d360ce3 Mon Sep 17 00:00:00 2001
From: Drake Arconis
Date: Sun, 19 Feb 2012 11:30:27 -0500
Subject: [PATCH 02/35] OS X Builds now.
Fixed building on OS X.
Fixed line endings.
Need to find better way to do fmodwrapper thing.
---
indra/newview/fmodwrapper.cpp | 22 +-
indra/newview/llstartup.cpp | 2 +-
indra/newview/sgversion.cpp | 3 +
indra/newview/sgversion.h | 3 +
indra/newview/viewer_manifest.py | 1758 +++++++++++++++---------------
5 files changed, 899 insertions(+), 889 deletions(-)
diff --git a/indra/newview/fmodwrapper.cpp b/indra/newview/fmodwrapper.cpp
index d14c9134f..b544785b7 100644
--- a/indra/newview/fmodwrapper.cpp
+++ b/indra/newview/fmodwrapper.cpp
@@ -30,26 +30,30 @@
* $/LicenseInfo$
*/
+//Hack to build Darwin.
+//Need to find a better way to do this later.
+#define LL_FMOD
+
extern "C"
{
-#if LL_FMODEX
+#ifdef LL_FMODEX
void FSOUND_Sound_Init(void);
#endif
-#if LL_FMOD
+
+#ifdef LL_FMOD
void FSOUND_Init(void);
#endif
}
void* fmodwrapper(void)
-{
+{
// When building the fmodwrapper library, the linker doesn't seem to want to bring in libfmod.a unless I explicitly
// reference at least one symbol in the library. This seemed like the simplest way.
- void *ret = NULL;
-#if LL_FMODEX
- ret = (void*)&FSOUND_Sound_Init;
+#ifdef LL_FMODEX
+ return (void*)&FSOUND_Sound_Init;
#endif
-#if LL_FMOD
- ret = (void*)&FSOUND_Init;
+
+#ifdef LL_FMOD
+ return (void*)&FSOUND_Init;
#endif
- return ret;
}
diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index 4feeee42f..011c10cac 100644
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -3492,7 +3492,7 @@ bool update_dialog_callback(const LLSD& notification, const LLSD& response)
LLAppViewer::sUpdaterInfo->mUpdateExePath += "\" -name \"";
LLAppViewer::sUpdaterInfo->mUpdateExePath += LLAppViewer::instance()->getSecondLifeTitle();
LLAppViewer::sUpdaterInfo->mUpdateExePath += "\" -bundleid \"";
- LLAppViewer::sUpdaterInfo->mUpdateExePath += LL_VERSION_BUNDLE_ID;
+ LLAppViewer::sUpdaterInfo->mUpdateExePath += gVersionBundleID;
LLAppViewer::sUpdaterInfo->mUpdateExePath += "\" &";
LL_DEBUGS("AppInit") << "Calling updater: " << LLAppViewer::sUpdaterInfo->mUpdateExePath << LL_ENDL;
diff --git a/indra/newview/sgversion.cpp b/indra/newview/sgversion.cpp
index 07f4c251d..615064f27 100644
--- a/indra/newview/sgversion.cpp
+++ b/indra/newview/sgversion.cpp
@@ -28,3 +28,6 @@ const S32 gVersionBuild = LL_VERSION_BUILD;
const char* gVersionChannel = LL_CHANNEL;
+#if LL_DARWIN
+const char* gVersionBundleID = LL_VERSION_BUNDLE_ID;
+#endif
\ No newline at end of file
diff --git a/indra/newview/sgversion.h b/indra/newview/sgversion.h
index 42231fc07..afdc8b51a 100644
--- a/indra/newview/sgversion.h
+++ b/indra/newview/sgversion.h
@@ -25,5 +25,8 @@ extern const S32 gVersionBuild;
extern const char* gVersionChannel;
+#if LL_DARWIN
+extern const char* gVersionBundleID;
+#endif
#endif
diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py
index 2b11cd32b..b492ddaef 100755
--- a/indra/newview/viewer_manifest.py
+++ b/indra/newview/viewer_manifest.py
@@ -1,879 +1,879 @@
-#!/usr/bin/python
-# @file viewer_manifest.py
-# @author Ryan Williams
-# @brief Description of all installer viewer files, and methods for packaging
-# them into installers for all supported platforms.
-#
-# $LicenseInfo:firstyear=2006&license=viewergpl$
-#
-# Copyright (c) 2006-2009, Linden Research, Inc.
-#
-# Second Life Viewer Source Code
-# The source code in this file ("Source Code") is provided by Linden Lab
-# to you under the terms of the GNU General Public License, version 2.0
-# ("GPL"), unless you have obtained a separate licensing agreement
-# ("Other License"), formally executed by you and Linden Lab. 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 LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
-# WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
-# COMPLETENESS OR PERFORMANCE.
-# $/LicenseInfo$
-import sys
-import os.path
-import re
-import tarfile
-viewer_dir = os.path.dirname(__file__)
-# add llmanifest library to our path so we don't have to muck with PYTHONPATH
-sys.path.append(os.path.join(viewer_dir, '../lib/python/indra/util'))
-from llmanifest import LLManifest, main, proper_windows_path, path_ancestors
-
-class ViewerManifest(LLManifest):
- def construct(self):
- super(ViewerManifest, self).construct()
- self.exclude("*.svn*")
- self.path(src="../../scripts/messages/message_template.msg", dst="app_settings/message_template.msg")
- self.path(src="../../etc/message.xml", dst="app_settings/message.xml")
-
- if self.prefix(src="app_settings"):
- self.exclude("logcontrol.xml")
- self.exclude("logcontrol-dev.xml")
- self.path("*.pem")
- self.path("*.ini")
- self.path("*.xml")
- self.path("*.db2")
-
- # include the entire shaders directory recursively
- self.path("shaders")
- # ... and the entire windlight directory
- self.path("windlight")
- # ... and the hunspell dictionaries
- self.path("dictionaries")
- self.end_prefix("app_settings")
-
- if self.prefix(src="character"):
- self.path("*.llm")
- self.path("*.xml")
- self.path("*.tga")
- self.end_prefix("character")
-
- # Include our fonts
- if self.prefix(src="fonts"):
- self.path("*.ttf")
- self.path("*.txt")
- self.end_prefix("fonts")
-
- # skins
- if self.prefix(src="skins"):
- self.path("paths.xml")
- # include the entire textures directory recursively
- if self.prefix(src="default/textures"):
- self.path("*.tga")
- self.path("*.j2c")
- self.path("*.jpg")
- self.path("*.png")
- self.path("textures.xml")
- self.end_prefix("default/textures")
- self.path("default/xui/*/*.xml")
- self.path("Default.xml")
- self.path("default/*.xml")
- if self.prefix(src="dark/textures"):
- self.path("*.tga")
- self.path("*.j2c")
- self.path("*.jpg")
- self.path("*.png")
- self.path("textures.xml")
- self.end_prefix("dark/textures")
- self.path("dark.xml")
- self.path("dark/*.xml")
-
- # Local HTML files (e.g. loading screen)
- if self.prefix(src="*/html"):
- self.path("*.png")
- self.path("*/*/*.html")
- self.path("*/*/*.gif")
- self.end_prefix("*/html")
- self.end_prefix("skins")
-
- # Files in the newview/ directory
- self.path("gpu_table.txt")
-
- def login_channel(self):
- """Channel reported for login and upgrade purposes ONLY;
- used for A/B testing"""
- # NOTE: Do not return the normal channel if login_channel
- # is not specified, as some code may branch depending on
- # whether or not this is present
- return self.args.get('login_channel')
-
- def buildtype(self):
- return self.args['buildtype']
- def standalone(self):
- return self.args['standalone'] == "ON"
- def grid(self):
- return self.args['grid']
- def channel(self):
- return self.args['channel']
- def channel_unique(self):
- return self.channel().replace("Second Life", "").strip()
- def channel_oneword(self):
- return "".join(self.channel_unique().split())
- def channel_lowerword(self):
- return self.channel_oneword().lower()
- def viewer_branding_id(self):
- return self.args['branding_id']
- def installer_prefix(self):
- mapping={"secondlife":'SecondLife_',
- "snowglobe":'Snowglobe_',
- "singularity":'Singularity_'}
- return mapping[self.viewer_branding_id()]
-
- def flags_list(self):
- """ Convenience function that returns the command-line flags
- for the grid"""
-
- # Set command line flags relating to the target grid
- grid_flags = ''
- if not self.default_grid():
- grid_flags = "--grid %(grid)s "\
- "--helperuri http://preview-%(grid)s.secondlife.com/helpers/" %\
- {'grid':self.grid()}
-
- # set command line flags for channel
- channel_flags = ''
- if self.login_channel() and self.login_channel() != self.channel():
- # Report a special channel during login, but use default
- channel_flags = '--channel "%s"' % (self.login_channel())
- else:
- channel_flags = '--channel "%s"' % self.channel()
-
- # Deal with settings
- if self.default_channel() and self.default_grid():
- setting_flags = ''
- elif self.default_grid():
- setting_flags = '--settings settings_%s.xml'\
- % self.channel_lowerword()
- else:
- setting_flags = '--settings settings_%s_%s.xml'\
- % (self.grid(), self.channel_lowerword())
-
- return " ".join((channel_flags, grid_flags, setting_flags)).strip()
-
-class WindowsManifest(ViewerManifest):
- def final_exe(self):
- return self.channel_oneword() + 'Viewer.exe'
-
-
- def construct(self):
- super(WindowsManifest, self).construct()
- # the final exe is complicated because we're not sure where it's coming from,
- # nor do we have a fixed name for the executable
- self.path(src='%s/secondlife-bin.exe' % self.args['configuration'], dst=self.final_exe())
-
- # Plugin host application
- self.path(os.path.join(os.pardir,
- 'llplugin', 'slplugin', self.args['configuration'], "SLPlugin.exe"),
- "SLPlugin.exe")
-
- # need to get the kdu dll from any of the build directories as well
- #~ try:
- #~ self.path(self.find_existing_file('../llkdu/%s/llkdu.dll' % self.args['configuration'],
- #~ '../../libraries/i686-win32/lib/release/llkdu.dll'),
- #~ dst='llkdu.dll')
- #~ pass
- #~ except:
- #~ print "Skipping llkdu.dll"
- #~ pass
- self.path(src="licenses-win32.txt", dst="licenses.txt")
-
- self.path("featuretable.txt")
-
- # For spellchecking
- if self.prefix(src=self.args['configuration'], dst=""):
- self.path("libhunspell.dll")
- self.end_prefix()
-
- # For use in crash reporting (generates minidumps)
- self.path("dbghelp.dll")
-
- # For using FMOD for sound... DJS
- #~if self.prefix(src="../../libraries/i686-win32/lib/release", dst=""):
- #~try:
- #~self.path("fmod.dll")
- #~pass
- #~except:
- #~print "Skipping fmod.dll - not found"
- #~ pass
- #~self.end_prefix()
-
- # For textures
- #if self.prefix(src="../../libraries/i686-win32/lib/release", dst=""):
- # self.path("openjpeg.dll")
- # self.end_prefix()
-
- # Plugins - FilePicker
- if self.prefix(src='../plugins/filepicker/%s' % self.args['configuration'], dst="llplugin"):
- self.path("basic_plugin_filepicker.dll")
- self.end_prefix()
-
- # Media plugins - QuickTime
- if self.prefix(src='../plugins/quicktime/%s' % self.args['configuration'], dst="llplugin"):
- self.path("media_plugin_quicktime.dll")
- self.end_prefix()
-
- # Media plugins - WebKit/Qt
- if self.prefix(src='../plugins/webkit/%s' % self.args['configuration'], dst="llplugin"):
- self.path("media_plugin_webkit.dll")
- self.end_prefix()
-
- # For WebKit/Qt plugin runtimes
- if self.prefix(src="../../libraries/i686-win32/lib/release", dst="llplugin"):
- self.path("libeay32.dll")
- self.path("qtcore4.dll")
- self.path("qtgui4.dll")
- self.path("qtnetwork4.dll")
- self.path("qtopengl4.dll")
- self.path("qtwebkit4.dll")
- self.path("qtxmlpatterns4.dll")
- self.path("ssleay32.dll")
- self.end_prefix()
-
- # For WebKit/Qt plugin runtimes (image format plugins)
- if self.prefix(src="../../libraries/i686-win32/lib/release/imageformats", dst="llplugin/imageformats"):
- self.path("qgif4.dll")
- self.path("qico4.dll")
- self.path("qjpeg4.dll")
- self.path("qmng4.dll")
- self.path("qsvg4.dll")
- self.path("qtiff4.dll")
- self.end_prefix()
-
- if self.prefix(src="../../libraries/i686-win32/lib/release/codecs", dst="llplugin/codecs"):
- self.path("qcncodecs4.dll")
- self.path("qjpcodecs4.dll")
- self.path("qkrcodecs4.dll")
- self.path("qtwcodecs4.dll")
- self.end_prefix()
-
- # Get llcommon and deps. If missing assume static linkage and continue.
- if self.prefix(src=self.args['configuration'], dst=""):
- try:
- self.path('llcommon.dll')
- except RuntimeError, err:
- print err.message
- print "Skipping llcommon.dll (assuming llcommon was linked statically)"
- self.end_prefix()
- if self.prefix(src="../../libraries/i686-win32/lib/release", dst=""):
- try:
- self.path('libapr-1.dll')
- self.path('libaprutil-1.dll')
- self.path('libapriconv-1.dll')
- except RuntimeError, err:
- pass
- self.end_prefix()
-
- # For google-perftools tcmalloc allocator.
- self.path("../../libraries/i686-win32/lib/release/libtcmalloc_minimal.dll", dst="libtcmalloc_minimal.dll")
-
- try:
- if self.prefix("../../libraries/i686-win32/lib/release/msvcrt", dst=""):
- self.path("*.dll")
- self.path("*.manifest")
- self.end_prefix()
- except:
- pass
-
-
- # These need to be installed as a SxS assembly, currently a 'private' assembly.
- # See http://msdn.microsoft.com/en-us/library/ms235291(VS.80).aspx
- #~ if self.prefix(src=self.args['configuration'], dst=""):
- #~ if self.args['configuration'] == 'Debug':
- #~ self.path("msvcr80d.dll")
- #~ self.path("msvcp80d.dll")
- #~ self.path("Microsoft.VC80.DebugCRT.manifest")
- #~ else:
- #~ self.path("msvcr80.dll")
- #~ self.path("msvcp80.dll")
- #~ self.path("Microsoft.VC80.CRT.manifest")
- #~ self.end_prefix()
-
- # The config file name needs to match the exe's name.
- #~ self.path(src="%s/secondlife-bin.exe.config" % self.args['configuration'], dst=self.final_exe() + ".config")
-
- # Vivox runtimes
- if self.prefix(src="vivox-runtime/i686-win32", dst=""):
- self.path("SLVoice.exe")
- self.path("alut.dll")
- self.path("vivoxsdk.dll")
- self.path("ortp.dll")
- self.path("wrap_oal.dll")
- self.end_prefix()
-
- if self.args['extra_libraries'] != None:
- print self.args['extra_libraries']
- path_list = self.args['extra_libraries'].split('|')
- for path in path_list:
- path_pair = path.rsplit('/', 1)
- if self.prefix(src=path_pair[0], dst=""):
- self.path(path_pair[1])
- self.end_prefix()
-
- # pull in the crash logger and updater from other projects
- self.path(src='../win_crash_logger/%s/windows-crash-logger.exe' % self.args['configuration'], dst="win_crash_logger.exe")
- self.path(src='../win_updater/%s/windows-updater.exe' % self.args['configuration'], dst="updater.exe")
-
-
- def nsi_file_commands(self, install=True):
- def wpath(path):
- if path.endswith('/') or path.endswith(os.path.sep):
- path = path[:-1]
- path = path.replace('/', '\\')
- return path
-
- result = ""
- dest_files = [pair[1] for pair in self.file_list if pair[0] and os.path.isfile(pair[1])]
- # sort deepest hierarchy first
- dest_files.sort(lambda a,b: cmp(a.count(os.path.sep),b.count(os.path.sep)) or cmp(a,b))
- dest_files.reverse()
- out_path = None
- for pkg_file in dest_files:
- rel_file = os.path.normpath(pkg_file.replace(self.get_dst_prefix()+os.path.sep,''))
- installed_dir = wpath(os.path.join('$INSTDIR', os.path.dirname(rel_file)))
- pkg_file = wpath(os.path.normpath(pkg_file))
- if installed_dir != out_path:
- if install:
- out_path = installed_dir
- result += 'SetOutPath ' + out_path + '\n'
- if install:
- result += 'File ' + pkg_file + '\n'
- else:
- result += 'Delete ' + wpath(os.path.join('$INSTDIR', rel_file)) + '\n'
- # at the end of a delete, just rmdir all the directories
- if not install:
- deleted_file_dirs = [os.path.dirname(pair[1].replace(self.get_dst_prefix()+os.path.sep,'')) for pair in self.file_list]
- # find all ancestors so that we don't skip any dirs that happened to have no non-dir children
- deleted_dirs = []
- for d in deleted_file_dirs:
- deleted_dirs.extend(path_ancestors(d))
- # sort deepest hierarchy first
- deleted_dirs.sort(lambda a,b: cmp(a.count(os.path.sep),b.count(os.path.sep)) or cmp(a,b))
- deleted_dirs.reverse()
- prev = None
- for d in deleted_dirs:
- if d != prev: # skip duplicates
- result += 'RMDir ' + wpath(os.path.join('$INSTDIR', os.path.normpath(d))) + '\n'
- prev = d
-
- return result
-
- def package_finish(self):
- # a standard map of strings for replacing in the templates
- substitution_strings = {
- 'version' : '.'.join(self.args['version']),
- 'version_short' : '.'.join(self.args['version'][:-1]),
- 'version_dashes' : '-'.join(self.args['version']),
- 'final_exe' : self.final_exe(),
- 'grid':self.args['grid'],
- 'grid_caps':self.args['grid'].upper(),
- # escape quotes becase NSIS doesn't handle them well
- 'flags':self.flags_list().replace('"', '$\\"'),
- 'channel':self.channel(),
- 'channel_oneword':self.channel_oneword(),
- 'channel_unique':self.channel_unique(),
- }
-
- version_vars = """
- !define INSTEXE "%(final_exe)s"
- !define VERSION "%(version_short)s"
- !define VERSION_LONG "%(version)s"
- !define VERSION_DASHES "%(version_dashes)s"
- """ % substitution_strings
- installer_file = "%(channel_oneword)s_%(version_dashes)s_Setup.exe"
- grid_vars_template = """
- OutFile "%(installer_file)s"
- !define VIEWERNAME "%(channel)s"
- !define INSTFLAGS "%(flags)s"
- !define INSTNAME "%(channel_oneword)s"
- !define SHORTCUT "%(channel)s Viewer"
- !define URLNAME "secondlife"
- !define INSTALL_ICON "install_icon_singularity.ico"
- !define UNINSTALL_ICON "install_icon_singularity.ico"
- Caption "${VIEWERNAME} ${VERSION_LONG}"
- """
- if 'installer_name' in self.args:
- installer_file = self.args['installer_name']
- else:
- installer_file = installer_file % substitution_strings
- substitution_strings['installer_file'] = installer_file
-
- tempfile = "secondlife_setup_tmp.nsi"
- # the following replaces strings in the nsi template
- # it also does python-style % substitution
- self.replace_in("installers/windows/installer_template.nsi", tempfile, {
- "%%VERSION%%":version_vars,
- "%%SOURCE%%":self.get_src_prefix(),
- "%%GRID_VARS%%":grid_vars_template % substitution_strings,
- "%%INSTALL_FILES%%":self.nsi_file_commands(True),
- "%%DELETE_FILES%%":self.nsi_file_commands(False)})
-
- # We use the Unicode version of NSIS, available from
- # http://www.scratchpaper.com/
- try:
- import _winreg as reg
- NSIS_path = reg.QueryValue(reg.HKEY_LOCAL_MACHINE, r"SOFTWARE\NSIS\Unicode") + '\\makensis.exe'
- self.run_command('"' + proper_windows_path(NSIS_path) + '" ' + self.dst_path_of(tempfile))
- except:
- try:
- NSIS_path = os.environ['ProgramFiles'] + '\\NSIS\\Unicode\\makensis.exe'
- self.run_command('"' + proper_windows_path(NSIS_path) + '" ' + self.dst_path_of(tempfile))
- except:
- NSIS_path = os.environ['ProgramFiles(X86)'] + '\\NSIS\\Unicode\\makensis.exe'
- self.run_command('"' + proper_windows_path(NSIS_path) + '" ' + self.dst_path_of(tempfile))
- # self.remove(self.dst_path_of(tempfile))
- # If we're on a build machine, sign the code using our Authenticode certificate. JC
- sign_py = os.path.expandvars("{SIGN_PY}")
- if sign_py == "" or sign_py == "{SIGN_PY}":
- sign_py = 'C:\\buildscripts\\code-signing\\sign.py'
- if os.path.exists(sign_py):
- self.run_command('python ' + sign_py + ' ' + self.dst_path_of(installer_file))
- else:
- print "Skipping code signing,", sign_py, "does not exist"
- self.created_path(self.dst_path_of(installer_file))
- self.package_file = installer_file
-
-
-class DarwinManifest(ViewerManifest):
- def construct(self):
- # copy over the build result (this is a no-op if run within the xcode script)
- self.path(self.args['configuration'] + "/" + self.app_name() + ".app", dst="")
-
- if self.prefix(src="", dst="Contents"): # everything goes in Contents
- self.path(self.info_plist_name(), dst="Info.plist")
-
- # copy additional libs in /Contents/MacOS/
- self.path("../../libraries/universal-darwin/lib_release/libhunspell-1.2.dylib", dst="MacOS/libhunspell-1.2.dylib")
- self.path("../../libraries/universal-darwin/lib_release/libndofdev.dylib", dst="MacOS/libndofdev.dylib")
- #self.path("../../libraries/universal-darwin/lib_release/libvorbisenc.2.dylib", dst="MacOS/libvorbisenc.2.dylib")
- #self.path("../../libraries/universal-darwin/lib_release/libvorbisfile.3.dylib", dst="MacOS/libvorbisfile.3.dylib")
- #self.path("../../libraries/universal-darwin/lib_release/libvorbis.0.dylib", dst="MacOS/libvorbis.0.dylib")
- #self.path("../../libraries/universal-darwin/lib_release/libogg.0.dylib", dst="MacOS/libogg.0.dylib")
-
- # most everything goes in the Resources directory
- if self.prefix(src="", dst="Resources"):
- super(DarwinManifest, self).construct()
-
- if self.prefix("cursors_mac"):
- self.path("*.tif")
- self.end_prefix("cursors_mac")
-
- self.path("licenses-mac.txt", dst="licenses.txt")
- self.path("featuretable_mac.txt")
- self.path("SecondLife.nib")
-
- # SG:TODO
- self.path("../newview/res/singularity.icns", dst="singularity.icns")
-
- # Translations
- self.path("English.lproj")
- self.path("German.lproj")
- self.path("Japanese.lproj")
- self.path("Korean.lproj")
- self.path("da.lproj")
- self.path("es.lproj")
- self.path("fr.lproj")
- self.path("hu.lproj")
- self.path("it.lproj")
- self.path("nl.lproj")
- self.path("pl.lproj")
- self.path("pt.lproj")
- self.path("ru.lproj")
- self.path("tr.lproj")
- self.path("uk.lproj")
- self.path("zh-Hans.lproj")
-
- # SLVoice and vivox lols
- self.path("vivox-runtime/universal-darwin/libalut.dylib", "libalut.dylib")
- self.path("vivox-runtime/universal-darwin/libopenal.dylib", "libopenal.dylib")
- self.path("vivox-runtime/universal-darwin/libortp.dylib", "libortp.dylib")
- self.path("vivox-runtime/universal-darwin/libvivoxsdk.dylib", "libvivoxsdk.dylib")
- self.path("vivox-runtime/universal-darwin/SLVoice", "SLVoice")
-
- self.path("../llcommon/" + self.args['configuration'] + "/libllcommon.dylib", "libllcommon.dylib")
-
- libfile = "lib%s.dylib"
- libdir = "../../libraries/universal-darwin/lib_release"
-
- for libfile in ("libapr-1.0.3.7.dylib",
- "libaprutil-1.0.3.8.dylib",
- "libexpat.0.5.0.dylib"):
- self.path(os.path.join(libdir, libfile), libfile)
-
- # For using FMOD for sound...but, fmod is proprietary so some might not use it...
- try:
- self.path(self.args['configuration'] + "/libfmodwrapper.dylib", "libfmodwrapper.dylib")
- pass
- except:
- print "Skipping libfmodwrapper.dylib - not found"
- pass
-
- # our apps
- try:
- self.path("../mac_crash_logger/" + self.args['configuration'] + "/mac-crash-logger.app", "mac-crash-logger.app")
- self.path("../mac_updater/" + self.args['configuration'] + "/mac-updater.app", "mac-updater.app")
- except:
- pass
-
- # plugin launcher
- self.path("../llplugin/slplugin/" + self.args['configuration'] + "/SLPlugin.app", "SLPlugin.app")
-
- # dependencies on shared libs
- mac_crash_logger_res_path = self.dst_path_of("mac-crash-logger.app/Contents/Resources")
- slplugin_res_path = self.dst_path_of("SLPlugin.app/Contents/Resources")
- for libfile in ("libllcommon.dylib",
- "libapr-1.0.3.7.dylib",
- "libaprutil-1.0.3.8.dylib",
- "libexpat.0.5.0.dylib"):
- target_lib = os.path.join('../../..', libfile)
- self.run_command("ln -sf %(target)r %(link)r" %
- {'target': target_lib,
- 'link' : os.path.join(slplugin_res_path, libfile)}
- )
- #self.run_command("ln -sf %(target)r %(link)r" %
- # {'target': target_lib,
- # 'link' : os.path.join(mac_crash_logger_res_path, libfile)}
- # )
-
- # plugins
- if self.prefix(src="", dst="llplugin"):
- self.path("../plugins/filepicker/" + self.args['configuration'] + "/basic_plugin_filepicker.dylib", "basic_plugin_filepicker.dylib")
- self.path("../plugins/quicktime/" + self.args['configuration'] + "/media_plugin_quicktime.dylib", "media_plugin_quicktime.dylib")
- self.path("../plugins/webkit/" + self.args['configuration'] + "/media_plugin_webkit.dylib", "media_plugin_webkit.dylib")
- self.path("../../libraries/universal-darwin/lib_release/libllqtwebkit.dylib", "libllqtwebkit.dylib")
-
- self.end_prefix("llplugin")
-
- # command line arguments for connecting to the proper grid
- self.put_in_file(self.flags_list(), 'arguments.txt')
-
- self.end_prefix("Resources")
-
- self.end_prefix("Contents")
-
- # NOTE: the -S argument to strip causes it to keep enough info for
- # annotated backtraces (i.e. function names in the crash log). 'strip' with no
- # arguments yields a slightly smaller binary but makes crash logs mostly useless.
- # This may be desirable for the final release. Or not.
- if self.buildtype().lower()=='release':
- if ("package" in self.args['actions'] or
- "unpacked" in self.args['actions']):
- self.run_command('strip -S "%(viewer_binary)s"' %
- { 'viewer_binary' : self.dst_path_of('Contents/MacOS/'+self.app_name())})
-
- def app_name(self):
- return "Singularity"
-
- def info_plist_name(self):
- return "Info-Singularity.plist"
-
- def package_finish(self):
- channel_standin = self.app_name()
- if not self.default_channel_for_brand():
- channel_standin = self.channel()
-
- imagename=self.installer_prefix() + '_'.join(self.args['version'])
-
- # See Ambroff's Hack comment further down if you want to create new bundles and dmg
- volname=self.app_name() + " Installer" # DO NOT CHANGE without checking Ambroff's Hack comment further down
-
- if self.default_channel_for_brand():
- if not self.default_grid():
- # beta case
- imagename = imagename + '_' + self.args['grid'].upper()
- else:
- # first look, etc
- imagename = imagename + '_' + self.channel_oneword().upper()
-
- sparsename = imagename + ".sparseimage"
- finalname = imagename + ".dmg"
- # make sure we don't have stale files laying about
- self.remove(sparsename, finalname)
-
- self.run_command('hdiutil create "%(sparse)s" -volname "%(vol)s" -fs HFS+ -type SPARSE -megabytes 700 -layout SPUD' % {
- 'sparse':sparsename,
- 'vol':volname})
-
- # mount the image and get the name of the mount point and device node
- hdi_output = self.run_command('hdiutil attach -private "' + sparsename + '"')
- devfile = re.search("/dev/disk([0-9]+)[^s]", hdi_output).group(0).strip()
- volpath = re.search('HFS\s+(.+)', hdi_output).group(1).strip()
-
- # Copy everything in to the mounted .dmg
-
- if self.default_channel_for_brand() and not self.default_grid():
- app_name = self.app_name() + " " + self.args['grid']
- else:
- app_name = channel_standin.strip()
-
- # Hack:
- # Because there is no easy way to coerce the Finder into positioning
- # the app bundle in the same place with different app names, we are
- # adding multiple .DS_Store files to svn. There is one for release,
- # one for release candidate and one for first look. Any other channels
- # will use the release .DS_Store, and will look broken.
- # - Ambroff 2008-08-20
- # Added a .DS_Store for snowglobe - Merov 2009-06-17
-
- # We have a single branded installer for all snowglobe channels so snowglobe logic is a bit different
- if (self.app_name()=="Snowglobe"):
- dmg_template = os.path.join ('installers', 'darwin', 'snowglobe-dmg')
- else:
- dmg_template = os.path.join(
- 'installers',
- 'darwin',
- '%s-dmg' % "".join(self.channel_unique().split()).lower())
-
- if not os.path.exists (self.src_path_of(dmg_template)):
- dmg_template = os.path.join ('installers', 'darwin', 'release-dmg')
-
- for s,d in {self.get_dst_prefix():app_name + ".app",
- os.path.join(dmg_template, "_VolumeIcon.icns"): ".VolumeIcon.icns",
- os.path.join(dmg_template, "background.jpg"): "background.jpg",
- os.path.join(dmg_template, "_DS_Store"): ".DS_Store"}.items():
- print "Copying to dmg", s, d
- self.copy_action(self.src_path_of(s), os.path.join(volpath, d))
-
- # Hide the background image, DS_Store file, and volume icon file (set their "visible" bit)
- self.run_command('SetFile -a V "' + os.path.join(volpath, ".VolumeIcon.icns") + '"')
- self.run_command('SetFile -a V "' + os.path.join(volpath, "background.jpg") + '"')
- self.run_command('SetFile -a V "' + os.path.join(volpath, ".DS_Store") + '"')
-
- # Create the alias file (which is a resource file) from the .r
- self.run_command('rez "' + self.src_path_of("installers/darwin/release-dmg/Applications-alias.r") + '" -o "' + os.path.join(volpath, "Applications") + '"')
-
- # Set the alias file's alias and custom icon bits
- self.run_command('SetFile -a AC "' + os.path.join(volpath, "Applications") + '"')
-
- # Set the disk image root's custom icon bit
- self.run_command('SetFile -a C "' + volpath + '"')
-
- # Unmount the image
- self.run_command('hdiutil detach -force "' + devfile + '"')
-
- print "Converting temp disk image to final disk image"
- self.run_command('hdiutil convert "%(sparse)s" -format UDZO -imagekey zlib-level=9 -o "%(final)s"' % {'sparse':sparsename, 'final':finalname})
- # get rid of the temp file
- self.package_file = finalname
- self.remove(sparsename)
-
-class LinuxManifest(ViewerManifest):
- def construct(self):
- super(LinuxManifest, self).construct()
- self.path("licenses-linux.txt","licenses.txt")
-
- self.path("res/"+self.icon_name(),self.icon_name())
- if self.prefix("linux_tools", dst=""):
- self.path("client-readme.txt","README-linux.txt")
- self.path("client-readme-voice.txt","README-linux-voice.txt")
- self.path("client-readme-joystick.txt","README-linux-joystick.txt")
- self.path("wrapper.sh",self.wrapper_name())
- self.path("handle_secondlifeprotocol.sh")
- self.path("register_secondlifeprotocol.sh")
- self.end_prefix("linux_tools")
-
- # Create an appropriate gridargs.dat for this package, denoting required grid.
- self.put_in_file(self.flags_list(), 'gridargs.dat')
-
- if self.buildtype().lower()=='release':
- self.path("secondlife-stripped","bin/"+self.binary_name())
- self.path("../linux_crash_logger/linux-crash-logger-stripped","linux-crash-logger.bin")
- else:
- self.path("secondlife-bin","bin/"+self.binary_name())
- self.path("../linux_crash_logger/linux-crash-logger","linux-crash-logger.bin")
-
- self.path("linux_tools/launch_url.sh","launch_url.sh")
- self.path("../llplugin/slplugin/SLPlugin", "bin/SLPlugin")
- if self.prefix("res-sdl"):
- self.path("*")
- # recurse
- self.end_prefix("res-sdl")
-
- # plugins
- if self.prefix(src="", dst="bin/llplugin"):
- self.path("../plugins/filepicker/libbasic_plugin_filepicker.so", "libbasic_plugin_filepicker.so")
- self.path("../plugins/webkit/libmedia_plugin_webkit.so", "libmedia_plugin_webkit.so")
- self.path("../plugins/gstreamer010/libmedia_plugin_gstreamer010.so", "libmedia_plugin_gstreamer.so")
- self.end_prefix("bin/llplugin")
-
- self.path("featuretable_linux.txt")
-
- def wrapper_name(self):
- return 'singularity'
-
- def binary_name(self):
- return 'singularity-do-not-run-directly'
-
- def icon_name(self):
- return "singularity_icon.png"
-
- def package_finish(self):
- if 'installer_name' in self.args:
- installer_name = self.args['installer_name']
- else:
- installer_name_components = [self.installer_prefix(), self.args.get('arch')]
- installer_name_components.extend(self.args['version'])
- installer_name = "_".join(installer_name_components)
- if self.default_channel():
- if not self.default_grid():
- installer_name += '_' + self.args['grid'].upper()
- else:
- installer_name += '_' + self.channel_oneword().upper()
-
- if self.args['buildtype'].lower() in ['release', 'releasesse2']:
- print "* Going strip-crazy on the packaged binaries, since this is a RELEASE build"
- # makes some small assumptions about our packaged dir structure
- self.run_command("find %(d)r/bin %(d)r/lib* -type f | xargs --no-run-if-empty strip --strip-unneeded" % {'d': self.get_dst_prefix()} )
- self.run_command("find %(d)r/bin %(d)r/lib* -type f -not -name \\*.so | xargs --no-run-if-empty strip -s" % {'d': self.get_dst_prefix()} )
-
- # Fix access permissions
- self.run_command("""
- find '%(dst)s' -type d -print0 | xargs -0 --no-run-if-empty chmod 755;
- find '%(dst)s' -type f -perm 0700 -print0 | xargs -0 --no-run-if-empty chmod 0755;
- find '%(dst)s' -type f -perm 0500 -print0 | xargs -0 --no-run-if-empty chmod 0555;
- find '%(dst)s' -type f -perm 0600 -print0 | xargs -0 --no-run-if-empty chmod 0644;
- find '%(dst)s' -type f -perm 0400 -print0 | xargs -0 --no-run-if-empty chmod 0444;
- true""" % {'dst':self.get_dst_prefix() })
- self.package_file = installer_name + '.tar.bz2'
-
- # temporarily move directory tree so that it has the right
- # name in the tarfile
- self.run_command("mv '%(dst)s' '%(inst)s'" % {
- 'dst': self.get_dst_prefix(),
- 'inst': self.build_path_of(installer_name)})
- try:
- # --numeric-owner hides the username of the builder for
- # security etc.
- # I'm leaving this disabled for speed
- #self.run_command("tar -C '%(dir)s' --numeric-owner -cjf "
- # "'%(inst_path)s.tar.bz2' %(inst_name)s" % {
- # 'dir': self.get_build_prefix(),
- # 'inst_name': installer_name,
- # 'inst_path':self.build_path_of(installer_name)})
- print ''
- finally:
- self.run_command("mv '%(inst)s' '%(dst)s'" % {
- 'dst': self.get_dst_prefix(),
- 'inst': self.build_path_of(installer_name)})
-
-
-class Linux_i686Manifest(LinuxManifest):
- def construct(self):
- super(Linux_i686Manifest, self).construct()
-
- self.path("../llcommon/libllcommon.so", "lib/libllcommon.so")
-
- if (not self.standalone()) and self.prefix("../../libraries/i686-linux/lib_release_client", dst="lib"):
-
- try:
- self.path("libkdu_v42R.so", "libkdu.so")
- pass
- except:
- print "Skipping libkdu_v42R.so - not found"
- pass
-
- try:
- self.path("libfmod-3.75.so")
- pass
- except:
- print "Skipping libfmod-3.75.so - not found"
- pass
-
- self.path("libapr-1.so.0")
- self.path("libaprutil-1.so.0")
- self.path("libdb-4.2.so")
- self.path("libcrypto.so.0.9.7")
- self.path("libexpat.so.1")
- self.path("libhunspell-1.2.so.0.0.0", "libhunspell-1.2.so.0")
- self.path("libssl.so.0.9.7")
- #self.path("libuuid.so.1")
- self.path("libSDL-1.2.so.0")
- self.path("libELFIO.so")
- #self.path("libopenjpeg.so.1.3.0", "libopenjpeg.so.1.3")
- self.path("libalut.so")
- self.path("libopenal.so.1")
- self.path("libtcmalloc_minimal.so.0")
- self.path("libtcmalloc_minimal.so.0.2.2")
- self.end_prefix("lib")
-
-
- # Vivox runtimes
- if self.prefix(src="vivox-runtime/i686-linux", dst="bin"):
- self.path("SLVoice")
- self.end_prefix()
- if self.prefix(src="vivox-runtime/i686-linux", dst="lib"):
- self.path("libortp.so")
- self.path("libvivoxsdk.so")
- self.end_prefix("lib")
-
-
-class Linux_x86_64Manifest(LinuxManifest):
- def construct(self):
- super(Linux_x86_64Manifest, self).construct()
-
- self.path("../llcommon/libllcommon.so", "lib64/libllcommon.so")
-
- if (not self.standalone()) and self.prefix("../../libraries/x86_64-linux/lib_release_client", dst="lib64"):
- self.path("libapr-1.so.0")
- self.path("libaprutil-1.so.0")
- self.path("libdb-4.2.so")
- self.path("libcrypto.so.0.9.8")
- self.path("libexpat.so.1")
- self.path("libhunspell-1.2.so.0.0.0", "libhunspell-1.2.so.0")
- self.path("libssl.so.0.9.8")
- self.path("libuuid.so", "libuuid.so.1")
- self.path("libSDL-1.2.so.0")
- self.path("libELFIO.so")
- self.path("libjpeg.so.7")
- self.path("libpng12.so.0")
- self.path("libopenjpeg.so.2")
- self.path("libxml2.so.2")
- #self.path("libz.so.1") #not needed
-
- # OpenAL
- self.path("libopenal.so.1")
- self.path("libalut.so.0")
-
- self.end_prefix("lib64")
-
- # Vivox runtimes and libs
- if self.prefix(src="vivox-runtime/i686-linux", dst="bin"):
- self.path("SLVoice")
- self.end_prefix("bin")
-
- if self.prefix(src="vivox-runtime/i686-linux", dst="lib32"):
- #self.path("libalut.so")
- self.path("libortp.so")
- self.path("libvivoxsdk.so")
- self.end_prefix("lib32")
-
- # 32bit libs needed for voice
- if self.prefix("../../libraries/x86_64-linux/lib_release_client/32bit-compat", dst="lib32"):
- self.path("libalut.so")
- self.path("libidn.so.11")
- self.path("libopenal.so.1")
- # self.path("libortp.so")
- self.path("libuuid.so.1")
- self.end_prefix("lib32")
-
-if __name__ == "__main__":
- main()
+#!/usr/bin/python
+# @file viewer_manifest.py
+# @author Ryan Williams
+# @brief Description of all installer viewer files, and methods for packaging
+# them into installers for all supported platforms.
+#
+# $LicenseInfo:firstyear=2006&license=viewergpl$
+#
+# Copyright (c) 2006-2009, Linden Research, Inc.
+#
+# Second Life Viewer Source Code
+# The source code in this file ("Source Code") is provided by Linden Lab
+# to you under the terms of the GNU General Public License, version 2.0
+# ("GPL"), unless you have obtained a separate licensing agreement
+# ("Other License"), formally executed by you and Linden Lab. 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 LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+# WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+# COMPLETENESS OR PERFORMANCE.
+# $/LicenseInfo$
+import sys
+import os.path
+import re
+import tarfile
+viewer_dir = os.path.dirname(__file__)
+# add llmanifest library to our path so we don't have to muck with PYTHONPATH
+sys.path.append(os.path.join(viewer_dir, '../lib/python/indra/util'))
+from llmanifest import LLManifest, main, proper_windows_path, path_ancestors
+
+class ViewerManifest(LLManifest):
+ def construct(self):
+ super(ViewerManifest, self).construct()
+ self.exclude("*.svn*")
+ self.path(src="../../scripts/messages/message_template.msg", dst="app_settings/message_template.msg")
+ self.path(src="../../etc/message.xml", dst="app_settings/message.xml")
+
+ if self.prefix(src="app_settings"):
+ self.exclude("logcontrol.xml")
+ self.exclude("logcontrol-dev.xml")
+ self.path("*.pem")
+ self.path("*.ini")
+ self.path("*.xml")
+ self.path("*.db2")
+
+ # include the entire shaders directory recursively
+ self.path("shaders")
+ # ... and the entire windlight directory
+ self.path("windlight")
+ # ... and the hunspell dictionaries
+ self.path("dictionaries")
+ self.end_prefix("app_settings")
+
+ if self.prefix(src="character"):
+ self.path("*.llm")
+ self.path("*.xml")
+ self.path("*.tga")
+ self.end_prefix("character")
+
+ # Include our fonts
+ if self.prefix(src="fonts"):
+ self.path("*.ttf")
+ self.path("*.txt")
+ self.end_prefix("fonts")
+
+ # skins
+ if self.prefix(src="skins"):
+ self.path("paths.xml")
+ # include the entire textures directory recursively
+ if self.prefix(src="default/textures"):
+ self.path("*.tga")
+ self.path("*.j2c")
+ self.path("*.jpg")
+ self.path("*.png")
+ self.path("textures.xml")
+ self.end_prefix("default/textures")
+ self.path("default/xui/*/*.xml")
+ self.path("Default.xml")
+ self.path("default/*.xml")
+ if self.prefix(src="dark/textures"):
+ self.path("*.tga")
+ self.path("*.j2c")
+ self.path("*.jpg")
+ self.path("*.png")
+ self.path("textures.xml")
+ self.end_prefix("dark/textures")
+ self.path("dark.xml")
+ self.path("dark/*.xml")
+
+ # Local HTML files (e.g. loading screen)
+ if self.prefix(src="*/html"):
+ self.path("*.png")
+ self.path("*/*/*.html")
+ self.path("*/*/*.gif")
+ self.end_prefix("*/html")
+ self.end_prefix("skins")
+
+ # Files in the newview/ directory
+ self.path("gpu_table.txt")
+
+ def login_channel(self):
+ """Channel reported for login and upgrade purposes ONLY;
+ used for A/B testing"""
+ # NOTE: Do not return the normal channel if login_channel
+ # is not specified, as some code may branch depending on
+ # whether or not this is present
+ return self.args.get('login_channel')
+
+ def buildtype(self):
+ return self.args['buildtype']
+ def standalone(self):
+ return self.args['standalone'] == "ON"
+ def grid(self):
+ return self.args['grid']
+ def channel(self):
+ return self.args['channel']
+ def channel_unique(self):
+ return self.channel().replace("Second Life", "").strip()
+ def channel_oneword(self):
+ return "".join(self.channel_unique().split())
+ def channel_lowerword(self):
+ return self.channel_oneword().lower()
+ def viewer_branding_id(self):
+ return self.args['branding_id']
+ def installer_prefix(self):
+ mapping={"secondlife":'SecondLife_',
+ "snowglobe":'Snowglobe_',
+ "singularity":'Singularity_'}
+ return mapping[self.viewer_branding_id()]
+
+ def flags_list(self):
+ """ Convenience function that returns the command-line flags
+ for the grid"""
+
+ # Set command line flags relating to the target grid
+ grid_flags = ''
+ if not self.default_grid():
+ grid_flags = "--grid %(grid)s "\
+ "--helperuri http://preview-%(grid)s.secondlife.com/helpers/" %\
+ {'grid':self.grid()}
+
+ # set command line flags for channel
+ channel_flags = ''
+ if self.login_channel() and self.login_channel() != self.channel():
+ # Report a special channel during login, but use default
+ channel_flags = '--channel "%s"' % (self.login_channel())
+ else:
+ channel_flags = '--channel "%s"' % self.channel()
+
+ # Deal with settings
+ if self.default_channel() and self.default_grid():
+ setting_flags = ''
+ elif self.default_grid():
+ setting_flags = '--settings settings_%s.xml'\
+ % self.channel_lowerword()
+ else:
+ setting_flags = '--settings settings_%s_%s.xml'\
+ % (self.grid(), self.channel_lowerword())
+
+ return " ".join((channel_flags, grid_flags, setting_flags)).strip()
+
+class WindowsManifest(ViewerManifest):
+ def final_exe(self):
+ return self.channel_oneword() + 'Viewer.exe'
+
+
+ def construct(self):
+ super(WindowsManifest, self).construct()
+ # the final exe is complicated because we're not sure where it's coming from,
+ # nor do we have a fixed name for the executable
+ self.path(src='%s/secondlife-bin.exe' % self.args['configuration'], dst=self.final_exe())
+
+ # Plugin host application
+ self.path(os.path.join(os.pardir,
+ 'llplugin', 'slplugin', self.args['configuration'], "SLPlugin.exe"),
+ "SLPlugin.exe")
+
+ # need to get the kdu dll from any of the build directories as well
+ #~ try:
+ #~ self.path(self.find_existing_file('../llkdu/%s/llkdu.dll' % self.args['configuration'],
+ #~ '../../libraries/i686-win32/lib/release/llkdu.dll'),
+ #~ dst='llkdu.dll')
+ #~ pass
+ #~ except:
+ #~ print "Skipping llkdu.dll"
+ #~ pass
+ self.path(src="licenses-win32.txt", dst="licenses.txt")
+
+ self.path("featuretable.txt")
+
+ # For spellchecking
+ if self.prefix(src=self.args['configuration'], dst=""):
+ self.path("libhunspell.dll")
+ self.end_prefix()
+
+ # For use in crash reporting (generates minidumps)
+ self.path("dbghelp.dll")
+
+ # For using FMOD for sound... DJS
+ #~if self.prefix(src="../../libraries/i686-win32/lib/release", dst=""):
+ #~try:
+ #~self.path("fmod.dll")
+ #~pass
+ #~except:
+ #~print "Skipping fmod.dll - not found"
+ #~ pass
+ #~self.end_prefix()
+
+ # For textures
+ #if self.prefix(src="../../libraries/i686-win32/lib/release", dst=""):
+ # self.path("openjpeg.dll")
+ # self.end_prefix()
+
+ # Plugins - FilePicker
+ if self.prefix(src='../plugins/filepicker/%s' % self.args['configuration'], dst="llplugin"):
+ self.path("basic_plugin_filepicker.dll")
+ self.end_prefix()
+
+ # Media plugins - QuickTime
+ if self.prefix(src='../plugins/quicktime/%s' % self.args['configuration'], dst="llplugin"):
+ self.path("media_plugin_quicktime.dll")
+ self.end_prefix()
+
+ # Media plugins - WebKit/Qt
+ if self.prefix(src='../plugins/webkit/%s' % self.args['configuration'], dst="llplugin"):
+ self.path("media_plugin_webkit.dll")
+ self.end_prefix()
+
+ # For WebKit/Qt plugin runtimes
+ if self.prefix(src="../../libraries/i686-win32/lib/release", dst="llplugin"):
+ self.path("libeay32.dll")
+ self.path("qtcore4.dll")
+ self.path("qtgui4.dll")
+ self.path("qtnetwork4.dll")
+ self.path("qtopengl4.dll")
+ self.path("qtwebkit4.dll")
+ self.path("qtxmlpatterns4.dll")
+ self.path("ssleay32.dll")
+ self.end_prefix()
+
+ # For WebKit/Qt plugin runtimes (image format plugins)
+ if self.prefix(src="../../libraries/i686-win32/lib/release/imageformats", dst="llplugin/imageformats"):
+ self.path("qgif4.dll")
+ self.path("qico4.dll")
+ self.path("qjpeg4.dll")
+ self.path("qmng4.dll")
+ self.path("qsvg4.dll")
+ self.path("qtiff4.dll")
+ self.end_prefix()
+
+ if self.prefix(src="../../libraries/i686-win32/lib/release/codecs", dst="llplugin/codecs"):
+ self.path("qcncodecs4.dll")
+ self.path("qjpcodecs4.dll")
+ self.path("qkrcodecs4.dll")
+ self.path("qtwcodecs4.dll")
+ self.end_prefix()
+
+ # Get llcommon and deps. If missing assume static linkage and continue.
+ if self.prefix(src=self.args['configuration'], dst=""):
+ try:
+ self.path('llcommon.dll')
+ except RuntimeError, err:
+ print err.message
+ print "Skipping llcommon.dll (assuming llcommon was linked statically)"
+ self.end_prefix()
+ if self.prefix(src="../../libraries/i686-win32/lib/release", dst=""):
+ try:
+ self.path('libapr-1.dll')
+ self.path('libaprutil-1.dll')
+ self.path('libapriconv-1.dll')
+ except RuntimeError, err:
+ pass
+ self.end_prefix()
+
+ # For google-perftools tcmalloc allocator.
+ self.path("../../libraries/i686-win32/lib/release/libtcmalloc_minimal.dll", dst="libtcmalloc_minimal.dll")
+
+ try:
+ if self.prefix("../../libraries/i686-win32/lib/release/msvcrt", dst=""):
+ self.path("*.dll")
+ self.path("*.manifest")
+ self.end_prefix()
+ except:
+ pass
+
+
+ # These need to be installed as a SxS assembly, currently a 'private' assembly.
+ # See http://msdn.microsoft.com/en-us/library/ms235291(VS.80).aspx
+ #~ if self.prefix(src=self.args['configuration'], dst=""):
+ #~ if self.args['configuration'] == 'Debug':
+ #~ self.path("msvcr80d.dll")
+ #~ self.path("msvcp80d.dll")
+ #~ self.path("Microsoft.VC80.DebugCRT.manifest")
+ #~ else:
+ #~ self.path("msvcr80.dll")
+ #~ self.path("msvcp80.dll")
+ #~ self.path("Microsoft.VC80.CRT.manifest")
+ #~ self.end_prefix()
+
+ # The config file name needs to match the exe's name.
+ #~ self.path(src="%s/secondlife-bin.exe.config" % self.args['configuration'], dst=self.final_exe() + ".config")
+
+ # Vivox runtimes
+ if self.prefix(src="vivox-runtime/i686-win32", dst=""):
+ self.path("SLVoice.exe")
+ self.path("alut.dll")
+ self.path("vivoxsdk.dll")
+ self.path("ortp.dll")
+ self.path("wrap_oal.dll")
+ self.end_prefix()
+
+ if self.args['extra_libraries'] != None:
+ print self.args['extra_libraries']
+ path_list = self.args['extra_libraries'].split('|')
+ for path in path_list:
+ path_pair = path.rsplit('/', 1)
+ if self.prefix(src=path_pair[0], dst=""):
+ self.path(path_pair[1])
+ self.end_prefix()
+
+ # pull in the crash logger and updater from other projects
+ self.path(src='../win_crash_logger/%s/windows-crash-logger.exe' % self.args['configuration'], dst="win_crash_logger.exe")
+ self.path(src='../win_updater/%s/windows-updater.exe' % self.args['configuration'], dst="updater.exe")
+
+
+ def nsi_file_commands(self, install=True):
+ def wpath(path):
+ if path.endswith('/') or path.endswith(os.path.sep):
+ path = path[:-1]
+ path = path.replace('/', '\\')
+ return path
+
+ result = ""
+ dest_files = [pair[1] for pair in self.file_list if pair[0] and os.path.isfile(pair[1])]
+ # sort deepest hierarchy first
+ dest_files.sort(lambda a,b: cmp(a.count(os.path.sep),b.count(os.path.sep)) or cmp(a,b))
+ dest_files.reverse()
+ out_path = None
+ for pkg_file in dest_files:
+ rel_file = os.path.normpath(pkg_file.replace(self.get_dst_prefix()+os.path.sep,''))
+ installed_dir = wpath(os.path.join('$INSTDIR', os.path.dirname(rel_file)))
+ pkg_file = wpath(os.path.normpath(pkg_file))
+ if installed_dir != out_path:
+ if install:
+ out_path = installed_dir
+ result += 'SetOutPath ' + out_path + '\n'
+ if install:
+ result += 'File ' + pkg_file + '\n'
+ else:
+ result += 'Delete ' + wpath(os.path.join('$INSTDIR', rel_file)) + '\n'
+ # at the end of a delete, just rmdir all the directories
+ if not install:
+ deleted_file_dirs = [os.path.dirname(pair[1].replace(self.get_dst_prefix()+os.path.sep,'')) for pair in self.file_list]
+ # find all ancestors so that we don't skip any dirs that happened to have no non-dir children
+ deleted_dirs = []
+ for d in deleted_file_dirs:
+ deleted_dirs.extend(path_ancestors(d))
+ # sort deepest hierarchy first
+ deleted_dirs.sort(lambda a,b: cmp(a.count(os.path.sep),b.count(os.path.sep)) or cmp(a,b))
+ deleted_dirs.reverse()
+ prev = None
+ for d in deleted_dirs:
+ if d != prev: # skip duplicates
+ result += 'RMDir ' + wpath(os.path.join('$INSTDIR', os.path.normpath(d))) + '\n'
+ prev = d
+
+ return result
+
+ def package_finish(self):
+ # a standard map of strings for replacing in the templates
+ substitution_strings = {
+ 'version' : '.'.join(self.args['version']),
+ 'version_short' : '.'.join(self.args['version'][:-1]),
+ 'version_dashes' : '-'.join(self.args['version']),
+ 'final_exe' : self.final_exe(),
+ 'grid':self.args['grid'],
+ 'grid_caps':self.args['grid'].upper(),
+ # escape quotes becase NSIS doesn't handle them well
+ 'flags':self.flags_list().replace('"', '$\\"'),
+ 'channel':self.channel(),
+ 'channel_oneword':self.channel_oneword(),
+ 'channel_unique':self.channel_unique(),
+ }
+
+ version_vars = """
+ !define INSTEXE "%(final_exe)s"
+ !define VERSION "%(version_short)s"
+ !define VERSION_LONG "%(version)s"
+ !define VERSION_DASHES "%(version_dashes)s"
+ """ % substitution_strings
+ installer_file = "%(channel_oneword)s_%(version_dashes)s_Setup.exe"
+ grid_vars_template = """
+ OutFile "%(installer_file)s"
+ !define VIEWERNAME "%(channel)s"
+ !define INSTFLAGS "%(flags)s"
+ !define INSTNAME "%(channel_oneword)s"
+ !define SHORTCUT "%(channel)s Viewer"
+ !define URLNAME "secondlife"
+ !define INSTALL_ICON "install_icon_singularity.ico"
+ !define UNINSTALL_ICON "install_icon_singularity.ico"
+ Caption "${VIEWERNAME} ${VERSION_LONG}"
+ """
+ if 'installer_name' in self.args:
+ installer_file = self.args['installer_name']
+ else:
+ installer_file = installer_file % substitution_strings
+ substitution_strings['installer_file'] = installer_file
+
+ tempfile = "secondlife_setup_tmp.nsi"
+ # the following replaces strings in the nsi template
+ # it also does python-style % substitution
+ self.replace_in("installers/windows/installer_template.nsi", tempfile, {
+ "%%VERSION%%":version_vars,
+ "%%SOURCE%%":self.get_src_prefix(),
+ "%%GRID_VARS%%":grid_vars_template % substitution_strings,
+ "%%INSTALL_FILES%%":self.nsi_file_commands(True),
+ "%%DELETE_FILES%%":self.nsi_file_commands(False)})
+
+ # We use the Unicode version of NSIS, available from
+ # http://www.scratchpaper.com/
+ try:
+ import _winreg as reg
+ NSIS_path = reg.QueryValue(reg.HKEY_LOCAL_MACHINE, r"SOFTWARE\NSIS\Unicode") + '\\makensis.exe'
+ self.run_command('"' + proper_windows_path(NSIS_path) + '" ' + self.dst_path_of(tempfile))
+ except:
+ try:
+ NSIS_path = os.environ['ProgramFiles'] + '\\NSIS\\Unicode\\makensis.exe'
+ self.run_command('"' + proper_windows_path(NSIS_path) + '" ' + self.dst_path_of(tempfile))
+ except:
+ NSIS_path = os.environ['ProgramFiles(X86)'] + '\\NSIS\\Unicode\\makensis.exe'
+ self.run_command('"' + proper_windows_path(NSIS_path) + '" ' + self.dst_path_of(tempfile))
+ # self.remove(self.dst_path_of(tempfile))
+ # If we're on a build machine, sign the code using our Authenticode certificate. JC
+ sign_py = os.path.expandvars("{SIGN_PY}")
+ if sign_py == "" or sign_py == "{SIGN_PY}":
+ sign_py = 'C:\\buildscripts\\code-signing\\sign.py'
+ if os.path.exists(sign_py):
+ self.run_command('python ' + sign_py + ' ' + self.dst_path_of(installer_file))
+ else:
+ print "Skipping code signing,", sign_py, "does not exist"
+ self.created_path(self.dst_path_of(installer_file))
+ self.package_file = installer_file
+
+
+class DarwinManifest(ViewerManifest):
+ def construct(self):
+ # copy over the build result (this is a no-op if run within the xcode script)
+ self.path(self.args['configuration'] + "/" + self.app_name() + ".app", dst="")
+
+ if self.prefix(src="", dst="Contents"): # everything goes in Contents
+ self.path(self.info_plist_name(), dst="Info.plist")
+
+ # copy additional libs in /Contents/MacOS/
+ self.path("../../libraries/universal-darwin/lib_release/libhunspell-1.2.dylib", dst="MacOS/libhunspell-1.2.dylib")
+ self.path("../../libraries/universal-darwin/lib_release/libndofdev.dylib", dst="MacOS/libndofdev.dylib")
+ #self.path("../../libraries/universal-darwin/lib_release/libvorbisenc.2.dylib", dst="MacOS/libvorbisenc.2.dylib")
+ #self.path("../../libraries/universal-darwin/lib_release/libvorbisfile.3.dylib", dst="MacOS/libvorbisfile.3.dylib")
+ #self.path("../../libraries/universal-darwin/lib_release/libvorbis.0.dylib", dst="MacOS/libvorbis.0.dylib")
+ #self.path("../../libraries/universal-darwin/lib_release/libogg.0.dylib", dst="MacOS/libogg.0.dylib")
+
+ # most everything goes in the Resources directory
+ if self.prefix(src="", dst="Resources"):
+ super(DarwinManifest, self).construct()
+
+ if self.prefix("cursors_mac"):
+ self.path("*.tif")
+ self.end_prefix("cursors_mac")
+
+ self.path("licenses-mac.txt", dst="licenses.txt")
+ self.path("featuretable_mac.txt")
+ self.path("SecondLife.nib")
+
+ # SG:TODO
+ self.path("../newview/res/singularity.icns", dst="singularity.icns")
+
+ # Translations
+ self.path("English.lproj")
+ self.path("German.lproj")
+ self.path("Japanese.lproj")
+ self.path("Korean.lproj")
+ self.path("da.lproj")
+ self.path("es.lproj")
+ self.path("fr.lproj")
+ self.path("hu.lproj")
+ self.path("it.lproj")
+ self.path("nl.lproj")
+ self.path("pl.lproj")
+ self.path("pt.lproj")
+ self.path("ru.lproj")
+ self.path("tr.lproj")
+ self.path("uk.lproj")
+ self.path("zh-Hans.lproj")
+
+ # SLVoice and vivox lols
+ self.path("vivox-runtime/universal-darwin/libalut.dylib", "libalut.dylib")
+ self.path("vivox-runtime/universal-darwin/libopenal.dylib", "libopenal.dylib")
+ self.path("vivox-runtime/universal-darwin/libortp.dylib", "libortp.dylib")
+ self.path("vivox-runtime/universal-darwin/libvivoxsdk.dylib", "libvivoxsdk.dylib")
+ self.path("vivox-runtime/universal-darwin/SLVoice", "SLVoice")
+
+ self.path("../llcommon/" + self.args['configuration'] + "/libllcommon.dylib", "libllcommon.dylib")
+
+ libfile = "lib%s.dylib"
+ libdir = "../../libraries/universal-darwin/lib_release"
+
+ for libfile in ("libapr-1.0.3.7.dylib",
+ "libaprutil-1.0.3.8.dylib",
+ "libexpat.0.5.0.dylib"):
+ self.path(os.path.join(libdir, libfile), libfile)
+
+ # For using FMOD for sound...but, fmod is proprietary so some might not use it...
+ try:
+ self.path(self.args['configuration'] + "/libfmodwrapper.dylib", "libfmodwrapper.dylib")
+ pass
+ except:
+ print "Skipping libfmodwrapper.dylib - not found"
+ pass
+
+ # our apps
+ try:
+ self.path("../mac_crash_logger/" + self.args['configuration'] + "/mac-crash-logger.app", "mac-crash-logger.app")
+ self.path("../mac_updater/" + self.args['configuration'] + "/mac-updater.app", "mac-updater.app")
+ except:
+ pass
+
+ # plugin launcher
+ self.path("../llplugin/slplugin/" + self.args['configuration'] + "/SLPlugin.app", "SLPlugin.app")
+
+ # dependencies on shared libs
+ mac_crash_logger_res_path = self.dst_path_of("mac-crash-logger.app/Contents/Resources")
+ slplugin_res_path = self.dst_path_of("SLPlugin.app/Contents/Resources")
+ for libfile in ("libllcommon.dylib",
+ "libapr-1.0.3.7.dylib",
+ "libaprutil-1.0.3.8.dylib",
+ "libexpat.0.5.0.dylib"):
+ target_lib = os.path.join('../../..', libfile)
+ self.run_command("ln -sf %(target)r %(link)r" %
+ {'target': target_lib,
+ 'link' : os.path.join(slplugin_res_path, libfile)}
+ )
+ #self.run_command("ln -sf %(target)r %(link)r" %
+ # {'target': target_lib,
+ # 'link' : os.path.join(mac_crash_logger_res_path, libfile)}
+ # )
+
+ # plugins
+ if self.prefix(src="", dst="llplugin"):
+ self.path("../plugins/filepicker/" + self.args['configuration'] + "/basic_plugin_filepicker.dylib", "basic_plugin_filepicker.dylib")
+ self.path("../plugins/quicktime/" + self.args['configuration'] + "/media_plugin_quicktime.dylib", "media_plugin_quicktime.dylib")
+ self.path("../plugins/webkit/" + self.args['configuration'] + "/media_plugin_webkit.dylib", "media_plugin_webkit.dylib")
+ self.path("../../libraries/universal-darwin/lib_release/libllqtwebkit.dylib", "libllqtwebkit.dylib")
+
+ self.end_prefix("llplugin")
+
+ # command line arguments for connecting to the proper grid
+ self.put_in_file(self.flags_list(), 'arguments.txt')
+
+ self.end_prefix("Resources")
+
+ self.end_prefix("Contents")
+
+ # NOTE: the -S argument to strip causes it to keep enough info for
+ # annotated backtraces (i.e. function names in the crash log). 'strip' with no
+ # arguments yields a slightly smaller binary but makes crash logs mostly useless.
+ # This may be desirable for the final release. Or not.
+ if self.buildtype().lower()=='release':
+ if ("package" in self.args['actions'] or
+ "unpacked" in self.args['actions']):
+ self.run_command('strip -S "%(viewer_binary)s"' %
+ { 'viewer_binary' : self.dst_path_of('Contents/MacOS/'+self.app_name())})
+
+ def app_name(self):
+ return "Singularity"
+
+ def info_plist_name(self):
+ return "Info-Singularity.plist"
+
+ def package_finish(self):
+ channel_standin = self.app_name()
+ if not self.default_channel_for_brand():
+ channel_standin = self.channel()
+
+ imagename=self.installer_prefix() + '_'.join(self.args['version'])
+
+ # See Ambroff's Hack comment further down if you want to create new bundles and dmg
+ volname=self.app_name() + " Installer" # DO NOT CHANGE without checking Ambroff's Hack comment further down
+
+ if self.default_channel_for_brand():
+ if not self.default_grid():
+ # beta case
+ imagename = imagename + '_' + self.args['grid'].upper()
+ else:
+ # first look, etc
+ imagename = imagename + '_' + self.channel_oneword().upper()
+
+ sparsename = imagename + ".sparseimage"
+ finalname = imagename + ".dmg"
+ # make sure we don't have stale files laying about
+ self.remove(sparsename, finalname)
+
+ self.run_command('hdiutil create "%(sparse)s" -volname "%(vol)s" -fs HFS+ -type SPARSE -megabytes 700 -layout SPUD' % {
+ 'sparse':sparsename,
+ 'vol':volname})
+
+ # mount the image and get the name of the mount point and device node
+ hdi_output = self.run_command('hdiutil attach -private "' + sparsename + '"')
+ devfile = re.search("/dev/disk([0-9]+)[^s]", hdi_output).group(0).strip()
+ volpath = re.search('HFS\s+(.+)', hdi_output).group(1).strip()
+
+ # Copy everything in to the mounted .dmg
+
+ if self.default_channel_for_brand() and not self.default_grid():
+ app_name = self.app_name() + " " + self.args['grid']
+ else:
+ app_name = channel_standin.strip()
+
+ # Hack:
+ # Because there is no easy way to coerce the Finder into positioning
+ # the app bundle in the same place with different app names, we are
+ # adding multiple .DS_Store files to svn. There is one for release,
+ # one for release candidate and one for first look. Any other channels
+ # will use the release .DS_Store, and will look broken.
+ # - Ambroff 2008-08-20
+ # Added a .DS_Store for snowglobe - Merov 2009-06-17
+
+ # We have a single branded installer for all snowglobe channels so snowglobe logic is a bit different
+ if (self.app_name()=="Snowglobe"):
+ dmg_template = os.path.join ('installers', 'darwin', 'snowglobe-dmg')
+ else:
+ dmg_template = os.path.join(
+ 'installers',
+ 'darwin',
+ '%s-dmg' % "".join(self.channel_unique().split()).lower())
+
+ if not os.path.exists (self.src_path_of(dmg_template)):
+ dmg_template = os.path.join ('installers', 'darwin', 'release-dmg')
+
+ for s,d in {self.get_dst_prefix():app_name + ".app",
+ os.path.join(dmg_template, "_VolumeIcon.icns"): ".VolumeIcon.icns",
+ os.path.join(dmg_template, "background.jpg"): "background.jpg",
+ os.path.join(dmg_template, "_DS_Store"): ".DS_Store"}.items():
+ print "Copying to dmg", s, d
+ self.copy_action(self.src_path_of(s), os.path.join(volpath, d))
+
+ # Hide the background image, DS_Store file, and volume icon file (set their "visible" bit)
+ self.run_command('SetFile -a V "' + os.path.join(volpath, ".VolumeIcon.icns") + '"')
+ self.run_command('SetFile -a V "' + os.path.join(volpath, "background.jpg") + '"')
+ self.run_command('SetFile -a V "' + os.path.join(volpath, ".DS_Store") + '"')
+
+ # Create the alias file (which is a resource file) from the .r
+ self.run_command('rez "' + self.src_path_of("installers/darwin/release-dmg/Applications-alias.r") + '" -o "' + os.path.join(volpath, "Applications") + '"')
+
+ # Set the alias file's alias and custom icon bits
+ self.run_command('SetFile -a AC "' + os.path.join(volpath, "Applications") + '"')
+
+ # Set the disk image root's custom icon bit
+ self.run_command('SetFile -a C "' + volpath + '"')
+
+ # Unmount the image
+ self.run_command('hdiutil detach -force "' + devfile + '"')
+
+ print "Converting temp disk image to final disk image"
+ self.run_command('hdiutil convert "%(sparse)s" -format UDZO -imagekey zlib-level=9 -o "%(final)s"' % {'sparse':sparsename, 'final':finalname})
+ # get rid of the temp file
+ self.package_file = finalname
+ self.remove(sparsename)
+
+class LinuxManifest(ViewerManifest):
+ def construct(self):
+ super(LinuxManifest, self).construct()
+ self.path("licenses-linux.txt","licenses.txt")
+
+ self.path("res/"+self.icon_name(),self.icon_name())
+ if self.prefix("linux_tools", dst=""):
+ self.path("client-readme.txt","README-linux.txt")
+ self.path("client-readme-voice.txt","README-linux-voice.txt")
+ self.path("client-readme-joystick.txt","README-linux-joystick.txt")
+ self.path("wrapper.sh",self.wrapper_name())
+ self.path("handle_secondlifeprotocol.sh")
+ self.path("register_secondlifeprotocol.sh")
+ self.end_prefix("linux_tools")
+
+ # Create an appropriate gridargs.dat for this package, denoting required grid.
+ self.put_in_file(self.flags_list(), 'gridargs.dat')
+
+ if self.buildtype().lower()=='release':
+ self.path("secondlife-stripped","bin/"+self.binary_name())
+ self.path("../linux_crash_logger/linux-crash-logger-stripped","linux-crash-logger.bin")
+ else:
+ self.path("secondlife-bin","bin/"+self.binary_name())
+ self.path("../linux_crash_logger/linux-crash-logger","linux-crash-logger.bin")
+
+ self.path("linux_tools/launch_url.sh","launch_url.sh")
+ self.path("../llplugin/slplugin/SLPlugin", "bin/SLPlugin")
+ if self.prefix("res-sdl"):
+ self.path("*")
+ # recurse
+ self.end_prefix("res-sdl")
+
+ # plugins
+ if self.prefix(src="", dst="bin/llplugin"):
+ self.path("../plugins/filepicker/libbasic_plugin_filepicker.so", "libbasic_plugin_filepicker.so")
+ self.path("../plugins/webkit/libmedia_plugin_webkit.so", "libmedia_plugin_webkit.so")
+ self.path("../plugins/gstreamer010/libmedia_plugin_gstreamer010.so", "libmedia_plugin_gstreamer.so")
+ self.end_prefix("bin/llplugin")
+
+ self.path("featuretable_linux.txt")
+
+ def wrapper_name(self):
+ return 'singularity'
+
+ def binary_name(self):
+ return 'singularity-do-not-run-directly'
+
+ def icon_name(self):
+ return "singularity_icon.png"
+
+ def package_finish(self):
+ if 'installer_name' in self.args:
+ installer_name = self.args['installer_name']
+ else:
+ installer_name_components = [self.installer_prefix(), self.args.get('arch')]
+ installer_name_components.extend(self.args['version'])
+ installer_name = "_".join(installer_name_components)
+ if self.default_channel():
+ if not self.default_grid():
+ installer_name += '_' + self.args['grid'].upper()
+ else:
+ installer_name += '_' + self.channel_oneword().upper()
+
+ if self.args['buildtype'].lower() in ['release', 'releasesse2']:
+ print "* Going strip-crazy on the packaged binaries, since this is a RELEASE build"
+ # makes some small assumptions about our packaged dir structure
+ self.run_command("find %(d)r/bin %(d)r/lib* -type f | xargs --no-run-if-empty strip --strip-unneeded" % {'d': self.get_dst_prefix()} )
+ self.run_command("find %(d)r/bin %(d)r/lib* -type f -not -name \\*.so | xargs --no-run-if-empty strip -s" % {'d': self.get_dst_prefix()} )
+
+ # Fix access permissions
+ self.run_command("""
+ find '%(dst)s' -type d -print0 | xargs -0 --no-run-if-empty chmod 755;
+ find '%(dst)s' -type f -perm 0700 -print0 | xargs -0 --no-run-if-empty chmod 0755;
+ find '%(dst)s' -type f -perm 0500 -print0 | xargs -0 --no-run-if-empty chmod 0555;
+ find '%(dst)s' -type f -perm 0600 -print0 | xargs -0 --no-run-if-empty chmod 0644;
+ find '%(dst)s' -type f -perm 0400 -print0 | xargs -0 --no-run-if-empty chmod 0444;
+ true""" % {'dst':self.get_dst_prefix() })
+ self.package_file = installer_name + '.tar.bz2'
+
+ # temporarily move directory tree so that it has the right
+ # name in the tarfile
+ self.run_command("mv '%(dst)s' '%(inst)s'" % {
+ 'dst': self.get_dst_prefix(),
+ 'inst': self.build_path_of(installer_name)})
+ try:
+ # --numeric-owner hides the username of the builder for
+ # security etc.
+ # I'm leaving this disabled for speed
+ #self.run_command("tar -C '%(dir)s' --numeric-owner -cjf "
+ # "'%(inst_path)s.tar.bz2' %(inst_name)s" % {
+ # 'dir': self.get_build_prefix(),
+ # 'inst_name': installer_name,
+ # 'inst_path':self.build_path_of(installer_name)})
+ print ''
+ finally:
+ self.run_command("mv '%(inst)s' '%(dst)s'" % {
+ 'dst': self.get_dst_prefix(),
+ 'inst': self.build_path_of(installer_name)})
+
+
+class Linux_i686Manifest(LinuxManifest):
+ def construct(self):
+ super(Linux_i686Manifest, self).construct()
+
+ self.path("../llcommon/libllcommon.so", "lib/libllcommon.so")
+
+ if (not self.standalone()) and self.prefix("../../libraries/i686-linux/lib_release_client", dst="lib"):
+
+ try:
+ self.path("libkdu_v42R.so", "libkdu.so")
+ pass
+ except:
+ print "Skipping libkdu_v42R.so - not found"
+ pass
+
+ try:
+ self.path("libfmod-3.75.so")
+ pass
+ except:
+ print "Skipping libfmod-3.75.so - not found"
+ pass
+
+ self.path("libapr-1.so.0")
+ self.path("libaprutil-1.so.0")
+ self.path("libdb-4.2.so")
+ self.path("libcrypto.so.0.9.7")
+ self.path("libexpat.so.1")
+ self.path("libhunspell-1.2.so.0.0.0", "libhunspell-1.2.so.0")
+ self.path("libssl.so.0.9.7")
+ #self.path("libuuid.so.1")
+ self.path("libSDL-1.2.so.0")
+ self.path("libELFIO.so")
+ #self.path("libopenjpeg.so.1.3.0", "libopenjpeg.so.1.3")
+ self.path("libalut.so")
+ self.path("libopenal.so.1")
+ self.path("libtcmalloc_minimal.so.0")
+ self.path("libtcmalloc_minimal.so.0.2.2")
+ self.end_prefix("lib")
+
+
+ # Vivox runtimes
+ if self.prefix(src="vivox-runtime/i686-linux", dst="bin"):
+ self.path("SLVoice")
+ self.end_prefix()
+ if self.prefix(src="vivox-runtime/i686-linux", dst="lib"):
+ self.path("libortp.so")
+ self.path("libvivoxsdk.so")
+ self.end_prefix("lib")
+
+
+class Linux_x86_64Manifest(LinuxManifest):
+ def construct(self):
+ super(Linux_x86_64Manifest, self).construct()
+
+ self.path("../llcommon/libllcommon.so", "lib64/libllcommon.so")
+
+ if (not self.standalone()) and self.prefix("../../libraries/x86_64-linux/lib_release_client", dst="lib64"):
+ self.path("libapr-1.so.0")
+ self.path("libaprutil-1.so.0")
+ self.path("libdb-4.2.so")
+ self.path("libcrypto.so.0.9.8")
+ self.path("libexpat.so.1")
+ self.path("libhunspell-1.2.so.0.0.0", "libhunspell-1.2.so.0")
+ self.path("libssl.so.0.9.8")
+ self.path("libuuid.so", "libuuid.so.1")
+ self.path("libSDL-1.2.so.0")
+ self.path("libELFIO.so")
+ self.path("libjpeg.so.7")
+ self.path("libpng12.so.0")
+ self.path("libopenjpeg.so.2")
+ self.path("libxml2.so.2")
+ #self.path("libz.so.1") #not needed
+
+ # OpenAL
+ self.path("libopenal.so.1")
+ self.path("libalut.so.0")
+
+ self.end_prefix("lib64")
+
+ # Vivox runtimes and libs
+ if self.prefix(src="vivox-runtime/i686-linux", dst="bin"):
+ self.path("SLVoice")
+ self.end_prefix("bin")
+
+ if self.prefix(src="vivox-runtime/i686-linux", dst="lib32"):
+ #self.path("libalut.so")
+ self.path("libortp.so")
+ self.path("libvivoxsdk.so")
+ self.end_prefix("lib32")
+
+ # 32bit libs needed for voice
+ if self.prefix("../../libraries/x86_64-linux/lib_release_client/32bit-compat", dst="lib32"):
+ self.path("libalut.so")
+ self.path("libidn.so.11")
+ self.path("libopenal.so.1")
+ # self.path("libortp.so")
+ self.path("libuuid.so.1")
+ self.end_prefix("lib32")
+
+if __name__ == "__main__":
+ main()
From a4363de59e2130aafe161552ffa2fcf77a9a6390 Mon Sep 17 00:00:00 2001
From: Drake Arconis
Date: Sun, 19 Feb 2012 15:59:47 -0500
Subject: [PATCH 03/35] Updated APR and Zlib prebuilts.
---
indra/cmake/APR.cmake | 8 +--
indra/newview/viewer_manifest.py | 8 +--
install.xml | 114 +++++++++++++++----------------
3 files changed, 65 insertions(+), 65 deletions(-)
diff --git a/indra/cmake/APR.cmake b/indra/cmake/APR.cmake
index d1f089891..5c434f4bf 100644
--- a/indra/cmake/APR.cmake
+++ b/indra/cmake/APR.cmake
@@ -29,12 +29,12 @@ else (STANDALONE)
)
elseif (DARWIN)
set(APR_LIBRARIES
- debug ${ARCH_PREBUILT_DIRS_DEBUG}/libapr-1.0.3.7.dylib
- optimized ${ARCH_PREBUILT_DIRS_RELEASE}/libapr-1.0.3.7.dylib
+ debug ${ARCH_PREBUILT_DIRS_DEBUG}/libapr-1.0.dylib
+ optimized ${ARCH_PREBUILT_DIRS_RELEASE}/libapr-1.0.dylib
)
set(APRUTIL_LIBRARIES
- debug ${ARCH_PREBUILT_DIRS_DEBUG}/libaprutil-1.0.3.8.dylib
- optimized ${ARCH_PREBUILT_DIRS_RELEASE}/libaprutil-1.0.3.8.dylib
+ debug ${ARCH_PREBUILT_DIRS_DEBUG}/libaprutil-1.0.dylib
+ optimized ${ARCH_PREBUILT_DIRS_RELEASE}/libaprutil-1.0.dylib
)
set(APRICONV_LIBRARIES iconv)
else (WINDOWS)
diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py
index b492ddaef..8f49f94a9 100755
--- a/indra/newview/viewer_manifest.py
+++ b/indra/newview/viewer_manifest.py
@@ -514,8 +514,8 @@ class DarwinManifest(ViewerManifest):
libfile = "lib%s.dylib"
libdir = "../../libraries/universal-darwin/lib_release"
- for libfile in ("libapr-1.0.3.7.dylib",
- "libaprutil-1.0.3.8.dylib",
+ for libfile in ("libapr-1.0.dylib",
+ "libaprutil-1.0.dylib",
"libexpat.0.5.0.dylib"):
self.path(os.path.join(libdir, libfile), libfile)
@@ -541,8 +541,8 @@ class DarwinManifest(ViewerManifest):
mac_crash_logger_res_path = self.dst_path_of("mac-crash-logger.app/Contents/Resources")
slplugin_res_path = self.dst_path_of("SLPlugin.app/Contents/Resources")
for libfile in ("libllcommon.dylib",
- "libapr-1.0.3.7.dylib",
- "libaprutil-1.0.3.8.dylib",
+ "libapr-1.0.dylib",
+ "libaprutil-1.0.dylib",
"libexpat.0.5.0.dylib"):
target_lib = os.path.join('../../..', libfile)
self.run_command("ln -sf %(target)r %(link)r" %
diff --git a/install.xml b/install.xml
index d7ce8c54d..23be3cc8d 100644
--- a/install.xml
+++ b/install.xml
@@ -29,7 +29,7 @@
- freeglut
+ freeglut
copyright
Copyright (c) 1999-2000 Pawel W. Olszta.
@@ -90,9 +90,9 @@
darwin
md5sum
- 115d8ac44a91efdb173e9b3e478c46b6
+ 2486db13c5ed9340855da3c1c48772af
url
- http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/apr_suite-1.3.7-darwin-20090805.tar.bz2
+ https://github.com/downloads/LightDrake/SingularityViewer/apr_suite-1.4.2-darwin-20110217.tar.bz2
linux
@@ -172,7 +172,7 @@
md5sum
a2cde4f24bdcc260b661e139846b8acd
url
- http://imprudenceviewer.org/download/libs/imprudence-artwork-20101026.tar.bz2
+ http://imprudenceviewer.org/download/libs/imprudence-artwork-20101026.tar.bz2
@@ -200,14 +200,14 @@
md5sum
2cad51575b429be4fdadb5d63da1c739
url
- https://github.com/downloads/siana/SingularityViewer/boost-1.45.0-darwin-20110604.tar.bz2
+ https://github.com/downloads/siana/SingularityViewer/boost-1.45.0-darwin-20110604.tar.bz2
linux
md5sum
a2d2fff5cc5555ffd9865daedfcd0dd5
url
- https://github.com/downloads/siana/SingularityViewer/boost-1.45.0-linux-20110604.tar.bz2
+ https://github.com/downloads/siana/SingularityViewer/boost-1.45.0-linux-20110604.tar.bz2
windows
@@ -218,46 +218,46 @@
- curl
-
- copyright
- Copyright (c) 1996 - 2008, Daniel Stenberg, <daniel@haxx.se>.
- description
- Client-side URL transfer library. Handles moving data across the net in many different protocols. Used to GET/POST/PUT/DELETE web resources.
- license
- curl
- packages
-
- darwin
-
- md5sum
- 525f6b18ea5af8fbd691c2ac1769056c
- url
- https://github.com/downloads/Shyotl/SingularityViewer/curl-7.20.1-darwin-20100606.tar.bz2
-
- linux
-
- md5sum
- 6244eec15fb26f9577785625fdb38f78
- url
- https://github.com/downloads/Shyotl/SingularityViewer/curl-7.20.1-linux-20100527.tar.bz2
-
- linux64
-
- md5sum
- 8a28849f4b9d99601dbc8db9d6a2f9ba
- url
- https://github.com/downloads/Shyotl/SingularityViewer/curl-7.16.4a-linux64-20090303.tar.bz2
-
- windows
-
- md5sum
- 60ed73408c4050ff9c96f26771fd6b46
- url
- https://github.com/downloads/siana/SingularityViewer/curl-7.21.1-windows-20110504.tar.bz2
-
-
-
+ curl
+
+ copyright
+ Copyright (c) 1996 - 2008, Daniel Stenberg, <daniel@haxx.se>.
+ description
+ Client-side URL transfer library. Handles moving data across the net in many different protocols. Used to GET/POST/PUT/DELETE web resources.
+ license
+ curl
+ packages
+
+ darwin
+
+ md5sum
+ 525f6b18ea5af8fbd691c2ac1769056c
+ url
+ https://github.com/downloads/Shyotl/SingularityViewer/curl-7.20.1-darwin-20100606.tar.bz2
+
+ linux
+
+ md5sum
+ 6244eec15fb26f9577785625fdb38f78
+ url
+ https://github.com/downloads/Shyotl/SingularityViewer/curl-7.20.1-linux-20100527.tar.bz2
+
+ linux64
+
+ md5sum
+ 8a28849f4b9d99601dbc8db9d6a2f9ba
+ url
+ https://github.com/downloads/Shyotl/SingularityViewer/curl-7.16.4a-linux64-20090303.tar.bz2
+
+ windows
+
+ md5sum
+ 60ed73408c4050ff9c96f26771fd6b46
+ url
+ https://github.com/downloads/siana/SingularityViewer/curl-7.21.1-windows-20110504.tar.bz2
+
+
+
dbghelp
copyright
@@ -546,14 +546,14 @@
md5sum
b190d8a0dce8dd8b514d2adb2c74b8d8
url
- http://sldev.free.fr/libraries/google-perftools-1.8.3-linux-20110924.tar.bz2
+ http://sldev.free.fr/libraries/google-perftools-1.8.3-linux-20110924.tar.bz2
windows
md5sum
4f787437a5e063ccde6637dfb1ebc01d
url
- https://bitbucket.org/Ansariel/phoenix-prebuilts/downloads/google_perftools-1.8-windows-20111005.tar.bz2
+ https://bitbucket.org/Ansariel/phoenix-prebuilts/downloads/google_perftools-1.8-windows-20111005.tar.bz2
@@ -995,7 +995,7 @@ anguage Infrstructure (CLI) international standard
md5sum
38abfe002ba073b6824016db98269972
url
- http://imprudenceviewer.org/download/libs/ndofdev-linux32-0.3.1-20100817.tar.bz2
+ http://imprudenceviewer.org/download/libs/ndofdev-linux32-0.3.1-20100817.tar.bz2
linux64
@@ -1028,14 +1028,14 @@ anguage Infrstructure (CLI) international standard
md5sum
5a154313bc30eacd8cfa1acd852ecd3e
url
- https://github.com/downloads/siana/SingularityViewer/ogg_vorbis-1.2.2-1.3.2-darwin-20110616.tar.bz2
+ https://github.com/downloads/siana/SingularityViewer/ogg_vorbis-1.2.2-1.3.2-darwin-20110616.tar.bz2
linux
md5sum
712b1d30790e9de83fea84ec3bc8fab0
url
- https://github.com/downloads/siana/SingularityViewer/ogg_vorbis-1.2.2-1.3.2-linux-20110616.tar.bz2
+ https://github.com/downloads/siana/SingularityViewer/ogg_vorbis-1.2.2-1.3.2-linux-20110616.tar.bz2
linux64
@@ -1227,10 +1227,10 @@ anguage Infrstructure (CLI) international standard
32bitcompatibilitylibs
copyright
- Copyrights: Libidn: Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
- Simon Josefsson. License GPL v3.0.
- Freealut, libuuid, openal-soft: see copyright and license of the
- according main packages.
+ Copyrights: Libidn: Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
+ Simon Josefsson. License GPL v3.0.
+ Freealut, libuuid, openal-soft: see copyright and license of the
+ according main packages.
description
32bit libraries needed for using voice
@@ -1300,9 +1300,9 @@ anguage Infrstructure (CLI) international standard
darwin
md5sum
- c844e1b05723ce078dbbd5aea9cdd3ad
+ 58ef62004b508b234039f6a313d852eb
url
- http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/zlib-1.1.4-darwin-20080818.tar.bz2
+ https://github.com/downloads/LightDrake/SingularityViewer/zlib-1.2.5-darwin-20110211.tar.bz2
linux
From 665569dfc7ae6e01ce7d5788b32414804d5ae989 Mon Sep 17 00:00:00 2001
From: Drake Arconis
Date: Sun, 19 Feb 2012 17:07:42 -0500
Subject: [PATCH 04/35] I forgot why I made these.
---
indra/cmake/00-Common.cmake | 6 +++---
indra/cmake/Boost.cmake | 2 +-
indra/cmake/DirectX.cmake | 4 ++--
indra/cmake/LLCommon.cmake | 1 +
indra/cmake/LLPlugin.cmake | 4 ++--
indra/cmake/Python.cmake | 1 -
6 files changed, 9 insertions(+), 9 deletions(-)
diff --git a/indra/cmake/00-Common.cmake b/indra/cmake/00-Common.cmake
index 1f9854be8..18cc4c695 100644
--- a/indra/cmake/00-Common.cmake
+++ b/indra/cmake/00-Common.cmake
@@ -158,10 +158,10 @@ if (LINUX)
add_definitions(-D_FORTIFY_SOURCE=2)
endif (NOT ${GXX_VERSION} MATCHES " 4.1.*Red Hat")
endif (${GXX_VERSION} STREQUAL ${CXX_VERSION})
-
- #Lets actualy get a numerical version of gxx's version
+
+ #Lets actually get a numerical version of gxx's version
STRING(REGEX REPLACE ".* ([0-9])\\.([0-9])\\.([0-9]).*" "\\1\\2\\3" CXX_VERSION ${CXX_VERSION})
-
+
#gcc 4.3 and above don't like the LL boost
if(${CXX_VERSION} GREATER 429)
add_definitions(-Wno-parentheses)
diff --git a/indra/cmake/Boost.cmake b/indra/cmake/Boost.cmake
index 0cd10bd6c..1275d0547 100644
--- a/indra/cmake/Boost.cmake
+++ b/indra/cmake/Boost.cmake
@@ -10,7 +10,7 @@ if (STANDALONE)
set(BOOST_FILESYSTEM_LIBRARY boost_filesystem-mt)
set(BOOST_PROGRAM_OPTIONS_LIBRARY boost_program_options-mt)
set(BOOST_REGEX_LIBRARY boost_regex-mt)
- set(BOOST_SYSTEM_LIBRARY boost_system-mt)
+ set(BOOST_SYSTEM_LIBRARY boost_system-mt)
else (STANDALONE)
use_prebuilt_binary(boost)
set(Boost_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include)
diff --git a/indra/cmake/DirectX.cmake b/indra/cmake/DirectX.cmake
index 5f538c80a..e45575595 100644
--- a/indra/cmake/DirectX.cmake
+++ b/indra/cmake/DirectX.cmake
@@ -3,7 +3,7 @@
if (VIEWER AND WINDOWS)
find_path(DIRECTX_INCLUDE_DIR dxdiag.h
"$ENV{DXSDK_DIR}/Include"
- "$ENV{PROGRAMFILES}/Microsoft DirectX SDK (June 2010)/Include"
+ "$ENV{PROGRAMFILES}/Microsoft DirectX SDK (June 2010)/Include"
"$ENV{PROGRAMFILES}/Microsoft DirectX SDK (March 2009)/Include"
"$ENV{PROGRAMFILES}/Microsoft DirectX SDK (August 2008)/Include"
"$ENV{PROGRAMFILES}/Microsoft DirectX SDK (June 2008)/Include"
@@ -25,7 +25,7 @@ if (VIEWER AND WINDOWS)
find_path(DIRECTX_LIBRARY_DIR dxguid.lib
"$ENV{DXSDK_DIR}/Lib/x86"
- "$ENV{PROGRAMFILES}/Microsoft DirectX SDK (June 2010)/Lib/x86"
+ "$ENV{PROGRAMFILES}/Microsoft DirectX SDK (June 2010)/Lib/x86"
"$ENV{PROGRAMFILES}/Microsoft DirectX SDK (March 2009)/Lib/x86"
"$ENV{PROGRAMFILES}/Microsoft DirectX SDK (August 2008)/Lib/x86"
"$ENV{PROGRAMFILES}/Microsoft DirectX SDK (June 2008)/Lib/x86"
diff --git a/indra/cmake/LLCommon.cmake b/indra/cmake/LLCommon.cmake
index 58316a489..b1bb1b6a9 100644
--- a/indra/cmake/LLCommon.cmake
+++ b/indra/cmake/LLCommon.cmake
@@ -14,6 +14,7 @@ endif (DARWIN)
set(LLCOMMON_INCLUDE_DIRS
${LIBS_OPEN_DIR}/cwdebug
${LIBS_OPEN_DIR}/llcommon
+ ${APRUTIL_INCLUDE_DIR}
${APR_INCLUDE_DIR}
${Boost_INCLUDE_DIRS}
)
diff --git a/indra/cmake/LLPlugin.cmake b/indra/cmake/LLPlugin.cmake
index 7ee404b9b..399cb332d 100644
--- a/indra/cmake/LLPlugin.cmake
+++ b/indra/cmake/LLPlugin.cmake
@@ -8,7 +8,7 @@ set(LLPLUGIN_INCLUDE_DIRS
if (LINUX)
# In order to support using ld.gold on linux, we need to explicitely
# specify all libraries that llplugin uses.
- set(LLPLUGIN_LIBRARIES llplugin pthread)
+ set(LLPLUGIN_LIBRARIES llplugin pthread)
else (LINUX)
- set(LLPLUGIN_LIBRARIES llplugin)
+ set(LLPLUGIN_LIBRARIES llplugin)
endif (LINUX)
diff --git a/indra/cmake/Python.cmake b/indra/cmake/Python.cmake
index a84ab64aa..748c8c2be 100644
--- a/indra/cmake/Python.cmake
+++ b/indra/cmake/Python.cmake
@@ -19,7 +19,6 @@ if (WINDOWS)
[HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\2.5\\InstallPath]
[HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\2.4\\InstallPath]
[HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\2.3\\InstallPath]
-
)
elseif (EXISTS /etc/debian_version)
# On Debian and Ubuntu, avoid Python 2.4 if possible.
From c6d6eed7d33121ac2bbd466ac2e49cccd6f6d921 Mon Sep 17 00:00:00 2001
From: Drake Arconis
Date: Sun, 19 Feb 2012 19:43:53 -0500
Subject: [PATCH 05/35] This works for now. Need to do more testing.
---
indra/newview/app_settings/settings.xml | 54 ++-
indra/newview/lltranslate.cpp | 469 ++++++++++++++++++------
indra/newview/lltranslate.h | 372 ++++++++++++++-----
indra/newview/llviewermessage.cpp | 26 +-
4 files changed, 696 insertions(+), 225 deletions(-)
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 2b521fed4..7553e8816 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -1,16 +1,15 @@
- Include
-
- settings_ascent.xml
- settings_ascent_coa.xml
- settings_sh.xml
- settings_rlv.xml
-
-
- SianaRenderDeferredInvisiprim
-
+ Include
+
+ settings_ascent.xml
+ settings_ascent_coa.xml
+ settings_sh.xml
+ settings_rlv.xml
+
+ SianaRenderDeferredInvisiprim
+
Comment
Support invisiprims in deferred mode
Persist
@@ -7525,12 +7524,45 @@
Comment
Translate incoming chat messages
Persist
- 0
+ 1
Type
Boolean
Value
0
+ TranslationService
+
+ Comment
+ Translation API to use. (google|bing)
+ Persist
+ 1
+ Type
+ String
+ Value
+ bing
+
+ GoogleTranslateAPIKey
+
+ Comment
+ Google Translate API key
+ Persist
+ 1
+ Type
+ String
+ Value
+
+
+ BingTranslateAPIKey
+
+ Comment
+ Bing AppID to use with the Microsoft Translator API
+ Persist
+ 1
+ Type
+ String
+ Value
+
+
LastFeatureVersion
Comment
diff --git a/indra/newview/lltranslate.cpp b/indra/newview/lltranslate.cpp
index 5a537ae95..fcff3a0c7 100644
--- a/indra/newview/lltranslate.cpp
+++ b/indra/newview/lltranslate.cpp
@@ -2,136 +2,401 @@
* @file lltranslate.cpp
* @brief Functions for translating text via Google Translate.
*
-* $LicenseInfo:firstyear=2009&license=viewergpl$
-*
-* Copyright (c) 2009, Linden Research, Inc.
-*
-* Second Life Viewer Source Code
-* The source code in this file ("Source Code") is provided by Linden Lab
-* to you under the terms of the GNU General Public License, version 2.0
-* ("GPL"), unless you have obtained a separate licensing agreement
-* ("Other License"), formally executed by you and Linden Lab. 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 LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
-* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
-* COMPLETENESS OR PERFORMANCE.
-* $/LicenseInfo$
-*/
+ * $LicenseInfo:firstyear=2009&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
#include "llviewerprecompiledheaders.h"
-#include "llbufferstream.h"
#include "lltranslate.h"
+
+#include
+
+#include "llbufferstream.h"
+#include "lltrans.h"
#include "llui.h"
-#include "sgversion.h"
+#include "llviewercontrol.h"
#include "llweb.h"
-//
-#include "llviewercontrol.h"
-//
+#include "sgversion.h"
-// These two are concatenated with the language specifiers to form a complete Google Translate URL
-const char* LLTranslate::m_GoogleURL = "http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&q=";
-const char* LLTranslate::m_GoogleLangSpec = "&langpair=";
-float LLTranslate::m_GoogleTimeout = 10;
+#include "jsoncpp/reader.h"
-LLSD LLTranslate::m_Header;
-// These constants are for the GET header.
-const char* LLTranslate::m_AcceptHeader = "Accept";
-const char* LLTranslate::m_AcceptType = "text/plain";
-const char* LLTranslate::m_AgentHeader = "User-Agent";
-
-// These constants are in the JSON returned from Google
-const char* LLTranslate::m_GoogleData = "responseData";
-const char* LLTranslate::m_GoogleTranslation = "translatedText";
-const char* LLTranslate::m_GoogleLanguage = "detectedSourceLanguage";
-
-//static
-void LLTranslate::translateMessage(LLHTTPClient::ResponderPtr &result, const std::string &fromLang, const std::string &toLang, const std::string &mesg)
+// virtual
+void LLGoogleTranslationHandler::getTranslateURL(
+ std::string &url,
+ const std::string &from_lang,
+ const std::string &to_lang,
+ const std::string &text) const
{
- std::string url;
- getTranslateUrl(url, fromLang, toLang, mesg);
-
-//
- std::string user_agent = gCurrentVersion;
-//
-
- if (!m_Header.size())
+ url = std::string("https://www.googleapis.com/language/translate/v2?key=")
+ + getAPIKey() + "&q=" + LLURI::escape(text) + "&target=" + to_lang;
+ if (!from_lang.empty())
{
- m_Header.insert(m_AcceptHeader, LLSD(m_AcceptType));
- m_Header.insert(m_AgentHeader, LLSD(user_agent));
- }
-
- LLHTTPClient::get(url, result, m_Header, m_GoogleTimeout);
-}
-
-//static
-void LLTranslate::getTranslateUrl(std::string &translateUrl, const std::string &fromLang, const std::string &toLang, const std::string &mesg)
-{
- std::string escaped_mesg = LLWeb::curlEscape(mesg);
-
- translateUrl = m_GoogleURL
- + escaped_mesg + m_GoogleLangSpec
- + fromLang // 'from' language; empty string for auto
- + "%7C" // |
- + toLang; // 'to' language
-}
-
-//static
-void LLTranslate::stringReplaceAll(std::string& context, const std::string& from, const std::string& to)
-{
- size_t lookHere = 0;
- size_t foundHere;
-
- while((foundHere = context.find(from, lookHere))
- != std::string::npos) {
- context.replace(foundHere, from.size(), to);
- lookHere = foundHere + to.size();
+ url += "&source=" + from_lang;
}
}
-//static
-BOOL LLTranslate::parseGoogleTranslate(const std::string result, std::string &translation, std::string &detectedLanguage)
+// virtual
+void LLGoogleTranslationHandler::getKeyVerificationURL(
+ std::string& url,
+ const std::string& key) const
+{
+ url = std::string("https://www.googleapis.com/language/translate/v2/languages?key=")
+ + key + "&target=en";
+}
+
+// virtual
+bool LLGoogleTranslationHandler::parseResponse(
+ int& status,
+ const std::string& body,
+ std::string& translation,
+ std::string& detected_lang,
+ std::string& err_msg) const
{
Json::Value root;
Json::Reader reader;
- BOOL parsingSuccessful = reader.parse(result, root );
- if ( !parsingSuccessful )
+
+ if (!reader.parse(body, root))
{
- LL_WARNS("JSON") << reader.getFormatedErrorMessages() << LL_ENDL;
- return FALSE;
+ err_msg = reader.getFormatedErrorMessages();
+ return false;
}
- translation = root[m_GoogleData].get(m_GoogleTranslation, "").asString();
- detectedLanguage = root[m_GoogleData].get(m_GoogleLanguage, "").asString();
- return TRUE;
+ if (!root.isObject()) // empty response? should not happen
+ {
+ return false;
+ }
+
+ if (status != STATUS_OK)
+ {
+ // Request failed. Extract error message from the response.
+ parseErrorResponse(root, status, err_msg);
+ return false;
+ }
+
+ // Request succeeded, extract translation from the response.
+ return parseTranslation(root, translation, detected_lang);
+}
+
+// virtual
+bool LLGoogleTranslationHandler::isConfigured() const
+{
+ return !getAPIKey().empty();
+}
+
+// static
+void LLGoogleTranslationHandler::parseErrorResponse(
+ const Json::Value& root,
+ int& status,
+ std::string& err_msg)
+{
+ const Json::Value& error = root.get("error", 0);
+ if (!error.isObject() || !error.isMember("message") || !error.isMember("code"))
+ {
+ return;
+ }
+
+ err_msg = error["message"].asString();
+ status = error["code"].asInt();
+}
+
+// static
+bool LLGoogleTranslationHandler::parseTranslation(
+ const Json::Value& root,
+ std::string& translation,
+ std::string& detected_lang)
+{
+ // JsonCpp is prone to aborting the program on failed assertions,
+ // so be super-careful and verify the response format.
+ const Json::Value& data = root.get("data", 0);
+ if (!data.isObject() || !data.isMember("translations"))
+ {
+ return false;
+ }
+
+ const Json::Value& translations = data["translations"];
+ if (!translations.isArray() || translations.size() == 0)
+ {
+ return false;
+ }
+
+ const Json::Value& first = translations[0U];
+ if (!first.isObject() || !first.isMember("translatedText"))
+ {
+ return false;
+ }
+
+ translation = first["translatedText"].asString();
+ detected_lang = first.get("detectedSourceLanguage", "").asString();
+ return true;
+}
+
+// static
+std::string LLGoogleTranslationHandler::getAPIKey()
+{
+ return gSavedSettings.getString("GoogleTranslateAPIKey");
+}
+
+// virtual
+void LLBingTranslationHandler::getTranslateURL(
+ std::string &url,
+ const std::string &from_lang,
+ const std::string &to_lang,
+ const std::string &text) const
+{
+ url = std::string("http://api.microsofttranslator.com/v2/Http.svc/Translate?appId=")
+ + getAPIKey() + "&text=" + LLURI::escape(text) + "&to=" + to_lang;
+ if (!from_lang.empty())
+ {
+ url += "&from=" + from_lang;
+ }
+}
+
+// virtual
+void LLBingTranslationHandler::getKeyVerificationURL(
+ std::string& url,
+ const std::string& key) const
+{
+ url = std::string("http://api.microsofttranslator.com/v2/Http.svc/GetLanguagesForTranslate?appId=")
+ + key;
+}
+
+// virtual
+bool LLBingTranslationHandler::parseResponse(
+ int& status,
+ const std::string& body,
+ std::string& translation,
+ std::string& detected_lang,
+ std::string& err_msg) const
+{
+ if (status != STATUS_OK)
+ {
+ static const std::string MSG_BEGIN_MARKER = "Message: ";
+ size_t begin = body.find(MSG_BEGIN_MARKER);
+ if (begin != std::string::npos)
+ {
+ begin += MSG_BEGIN_MARKER.size();
+ }
+ else
+ {
+ begin = 0;
+ err_msg.clear();
+ }
+ size_t end = body.find("
", begin);
+ err_msg = body.substr(begin, end-begin);
+ LLStringUtil::replaceString(err_msg, "
", ""); // strip CR
+ return false;
+ }
+
+ // Sample response: Hola
+ size_t begin = body.find(">");
+ if (begin == std::string::npos || begin >= (body.size() - 1))
+ {
+ begin = 0;
+ }
+ else
+ {
+ ++begin;
+ }
+
+ size_t end = body.find("", begin);
+
+ detected_lang = ""; // unsupported by this API
+ translation = body.substr(begin, end-begin);
+ LLStringUtil::replaceString(translation, "
", ""); // strip CR
+ return true;
+}
+
+// virtual
+bool LLBingTranslationHandler::isConfigured() const
+{
+ return !getAPIKey().empty();
+}
+
+// static
+std::string LLBingTranslationHandler::getAPIKey()
+{
+ return gSavedSettings.getString("BingTranslateAPIKey");
+}
+
+LLTranslate::TranslationReceiver::TranslationReceiver(const std::string& from_lang, const std::string& to_lang)
+: mFromLang(from_lang)
+, mToLang(to_lang)
+, mHandler(LLTranslate::getPreferredHandler())
+{
+}
+
+// virtual
+void LLTranslate::TranslationReceiver::completedRaw(
+ U32 http_status,
+ const std::string& reason,
+ const LLChannelDescriptors& channels,
+ const LLIOPipe::buffer_ptr_t& buffer)
+{
+ LLBufferStream istr(channels, buffer.get());
+ std::stringstream strstrm;
+ strstrm << istr.rdbuf();
+
+ const std::string body = strstrm.str();
+ std::string translation, detected_lang, err_msg;
+ int status = http_status;
+ LL_DEBUGS("Translate") << "HTTP status: " << status << " " << reason << LL_ENDL;
+ LL_DEBUGS("Translate") << "Response body: " << body << LL_ENDL;
+ if (mHandler.parseResponse(status, body, translation, detected_lang, err_msg))
+ {
+ // Fix up the response
+ LLStringUtil::replaceString(translation, "<", "<");
+ LLStringUtil::replaceString(translation, ">",">");
+ LLStringUtil::replaceString(translation, ""","\"");
+ LLStringUtil::replaceString(translation, "'","'");
+ LLStringUtil::replaceString(translation, "&","&");
+ LLStringUtil::replaceString(translation, "'","'");
+
+ handleResponse(translation, detected_lang);
+ }
+ else
+ {
+ if (err_msg.empty())
+ {
+ err_msg = LLTrans::getString("TranslationResponseParseError");
+ }
+
+ llwarns << "Translation request failed: " << err_msg << llendl;
+ handleFailure(status, err_msg);
+ }
+}
+
+LLTranslate::KeyVerificationReceiver::KeyVerificationReceiver(EService service)
+: mService(service)
+{
+}
+
+LLTranslate::EService LLTranslate::KeyVerificationReceiver::getService() const
+{
+ return mService;
+}
+
+// virtual
+void LLTranslate::KeyVerificationReceiver::completedRaw(
+ U32 http_status,
+ const std::string& reason,
+ const LLChannelDescriptors& channels,
+ const LLIOPipe::buffer_ptr_t& buffer)
+{
+ bool ok = (http_status == 200);
+ setVerificationStatus(ok);
+}
+
+//static
+void LLTranslate::translateMessage(
+ TranslationReceiverPtr &receiver,
+ const std::string &from_lang,
+ const std::string &to_lang,
+ const std::string &mesg)
+{
+ std::string url;
+ receiver->mHandler.getTranslateURL(url, from_lang, to_lang, mesg);
+
+ LL_DEBUGS("Translate") << "Sending translation request: " << url << LL_ENDL;
+ sendRequest(url, receiver);
+}
+
+// static
+void LLTranslate::verifyKey(
+ KeyVerificationReceiverPtr& receiver,
+ const std::string& key)
+{
+ std::string url;
+ const LLTranslationAPIHandler& handler = getHandler(receiver->getService());
+ handler.getKeyVerificationURL(url, key);
+
+ LL_DEBUGS("Translate") << "Sending key verification request: " << url << LL_ENDL;
+ sendRequest(url, receiver);
}
//static
std::string LLTranslate::getTranslateLanguage()
{
- std::string language = "en";
- if (LLUI::sConfigGroup)
+ std::string language = gSavedSettings.getString("TranslateLanguage");
+ if (language.empty() || language == "default")
{
- language = LLUI::sConfigGroup->getString("TranslateLanguage");
- if (language.empty() || language == "default")
- {
- language = LLUI::getLanguage();
- }
+ language = LLUI::getLanguage();
}
language = language.substr(0,2);
return language;
}
+// static
+bool LLTranslate::isTranslationConfigured()
+{
+ return getPreferredHandler().isConfigured();
+}
+
+// static
+const LLTranslationAPIHandler& LLTranslate::getPreferredHandler()
+{
+ EService service = SERVICE_BING;
+
+ std::string service_str = gSavedSettings.getString("TranslationService");
+ if (service_str == "google")
+ {
+ service = SERVICE_GOOGLE;
+ }
+
+ return getHandler(service);
+}
+
+// static
+const LLTranslationAPIHandler& LLTranslate::getHandler(EService service)
+{
+ static LLGoogleTranslationHandler google;
+ static LLBingTranslationHandler bing;
+
+ if (service == SERVICE_GOOGLE)
+ {
+ return google;
+ }
+
+ return bing;
+}
+
+// static
+void LLTranslate::sendRequest(const std::string& url, LLHTTPClient::ResponderPtr responder)
+{
+ static const float REQUEST_TIMEOUT = 5;
+ static LLSD sHeader;
+
+ if (!sHeader.size())
+ {
+ std::string user_agent = llformat("%s %d.%d.%d (%d)",
+ gVersionChannel,
+ gVersionMajor,
+ gVersionMinor,
+ gVersionPatch,
+ gVersionBuild);
+
+ sHeader.insert("Accept", "text/plain");
+ sHeader.insert("User-Agent", user_agent);
+ }
+
+ LLHTTPClient::get(url, responder, sHeader, REQUEST_TIMEOUT);
+}
diff --git a/indra/newview/lltranslate.h b/indra/newview/lltranslate.h
index 2723c43ff..870cc1fae 100644
--- a/indra/newview/lltranslate.h
+++ b/indra/newview/lltranslate.h
@@ -2,33 +2,27 @@
* @file lltranslate.h
* @brief Human language translation class and JSON response receiver.
*
-* $LicenseInfo:firstyear=2009&license=viewergpl$
-*
-* Copyright (c) 2009, Linden Research, Inc.
-*
-* Second Life Viewer Source Code
-* The source code in this file ("Source Code") is provided by Linden Lab
-* to you under the terms of the GNU General Public License, version 2.0
-* ("GPL"), unless you have obtained a separate licensing agreement
-* ("Other License"), formally executed by you and Linden Lab. 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 LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
-* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
-* COMPLETENESS OR PERFORMANCE.
-* $/LicenseInfo$
-*/
+ * $LicenseInfo:firstyear=2009&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
#ifndef LL_LLTRANSLATE_H
#define LL_LLTRANSLATE_H
@@ -37,89 +31,273 @@
#include "llbufferstream.h"
#include "jsoncpp/reader.h"
-class LLTranslate
+namespace Json
{
-public :
- class TranslationReceiver: public LLHTTPClient::Responder
- {
- protected:
- TranslationReceiver(const std::string &fromLang, const std::string &toLang)
- : m_fromLang(fromLang),
- m_toLang(toLang)
- {
- }
+ class Value;
+}
- virtual void handleResponse(const std::string &translation, const std::string &recognizedLang) {}
- virtual void handleFailure() {};
+/**
+ * Handler of an HTTP machine translation service.
+ *
+ * Derived classes know the service URL
+ * and how to parse the translation result.
+ */
+class LLTranslationAPIHandler
+{
+public:
+ /**
+ * Get URL for translation of the given string.
+ *
+ * Sending HTTP GET request to the URL will initiate translation.
+ *
+ * @param[out] url Place holder for the result.
+ * @param from_lang Source language. Leave empty for auto-detection.
+ * @param to_lang Target language.
+ * @param text Text to translate.
+ */
+ virtual void getTranslateURL(
+ std::string &url,
+ const std::string &from_lang,
+ const std::string &to_lang,
+ const std::string &text) const = 0;
- public:
- ~TranslationReceiver()
- {
- }
+ /**
+ * Get URL to verify the given API key.
+ *
+ * Sending request to the URL verifies the key.
+ * Positive HTTP response (code 200) means that the key is valid.
+ *
+ * @param[out] url Place holder for the URL.
+ * @param[in] key Key to verify.
+ */
+ virtual void getKeyVerificationURL(
+ std::string &url,
+ const std::string &key) const = 0;
- virtual void error(U32 status, const std::string& reason)
- {
- LL_WARNS("Translate") << "URL Request error: " << reason << LL_ENDL;
- handleFailure();
- }
+ /**
+ * Parse translation response.
+ *
+ * @param[in,out] status HTTP status. May be modified while parsing.
+ * @param body Response text.
+ * @param[out] translation Translated text.
+ * @param[out] detected_lang Detected source language. May be empty.
+ * @param[out] err_msg Error message (in case of error).
+ */
+ virtual bool parseResponse(
+ int& status,
+ const std::string& body,
+ std::string& translation,
+ std::string& detected_lang,
+ std::string& err_msg) const = 0;
- virtual void completedRaw(
- U32 status,
- const std::string& reason,
- const LLChannelDescriptors& channels,
- const LLIOPipe::buffer_ptr_t& buffer)
- {
- LLBufferStream istr(channels, buffer.get());
+ /**
+ * @return if the handler is configured to function properly
+ */
+ virtual bool isConfigured() const = 0;
- std::stringstream strstrm;
- strstrm << istr.rdbuf();
- const std::string result = strstrm.str();
+ virtual ~LLTranslationAPIHandler() {}
- std::string translation;
- std::string detectedLanguage;
+protected:
+ static const int STATUS_OK = 200;
+};
- if (!parseGoogleTranslate(result, translation, detectedLanguage))
- {
- handleFailure();
- return;
- }
+/// Google Translate v2 API handler.
+class LLGoogleTranslationHandler : public LLTranslationAPIHandler
+{
+ LOG_CLASS(LLGoogleTranslationHandler);
- // Fix up the response
- stringReplaceAll( translation, "<","<");
- stringReplaceAll( translation, ">",">");
- stringReplaceAll( translation, ""","\"");
- stringReplaceAll( translation, "'","'");
- stringReplaceAll( translation, "&","&");
- stringReplaceAll( translation, "'","'");
-
- handleResponse(translation, detectedLanguage);
- }
-
- protected:
- const std::string m_toLang;
- const std::string m_fromLang;
- };
-
- static void translateMessage(LLHTTPClient::ResponderPtr &result, const std::string &fromLang, const std::string &toLang, const std::string &mesg);
- static float m_GoogleTimeout;
- static std::string getTranslateLanguage();
+public:
+ /*virtual*/ void getTranslateURL(
+ std::string &url,
+ const std::string &from_lang,
+ const std::string &to_lang,
+ const std::string &text) const;
+ /*virtual*/ void getKeyVerificationURL(
+ std::string &url,
+ const std::string &key) const;
+ /*virtual*/ bool parseResponse(
+ int& status,
+ const std::string& body,
+ std::string& translation,
+ std::string& detected_lang,
+ std::string& err_msg) const;
+ /*virtual*/ bool isConfigured() const;
private:
- static void getTranslateUrl(std::string &translateUrl, const std::string &fromLang, const std::string &toLang, const std::string &text);
- static void stringReplaceAll(std::string& context, const std::string& from, const std::string& to);
- static BOOL parseGoogleTranslate(const std::string result, std::string &translation, std::string &detectedLanguage);
+ static void parseErrorResponse(
+ const Json::Value& root,
+ int& status,
+ std::string& err_msg);
+ static bool parseTranslation(
+ const Json::Value& root,
+ std::string& translation,
+ std::string& detected_lang);
+ static std::string getAPIKey();
+};
- static LLSD m_Header;
- static const char* m_GoogleURL;
- static const char* m_GoogleLangSpec;
- static const char* m_AcceptHeader;
- static const char* m_AcceptType;
- static const char* m_AgentHeader;
- static const char* m_UserAgent;
+/// Microsoft Translator v2 API handler.
+class LLBingTranslationHandler : public LLTranslationAPIHandler
+{
+ LOG_CLASS(LLBingTranslationHandler);
- static const char* m_GoogleData;
- static const char* m_GoogleTranslation;
- static const char* m_GoogleLanguage;
+public:
+ /*virtual*/ void getTranslateURL(
+ std::string &url,
+ const std::string &from_lang,
+ const std::string &to_lang,
+ const std::string &text) const;
+ /*virtual*/ void getKeyVerificationURL(
+ std::string &url,
+ const std::string &key) const;
+ /*virtual*/ bool parseResponse(
+ int& status,
+ const std::string& body,
+ std::string& translation,
+ std::string& detected_lang,
+ std::string& err_msg) const;
+ /*virtual*/ bool isConfigured() const;
+private:
+ static std::string getAPIKey();
+};
+
+/**
+ * Entry point for machine translation services.
+ *
+ * Basically, to translate a string, we need to know the URL
+ * of a translation service, have a valid API for the service
+ * and be given the target language.
+ *
+ * Callers specify the string to translate and the target language,
+ * LLTranslate takes care of the rest.
+ *
+ * API keys for translation are taken from saved settings.
+ */
+class LLTranslate
+{
+ LOG_CLASS(LLTranslate);
+
+public :
+
+ typedef enum e_service {
+ SERVICE_BING,
+ SERVICE_GOOGLE,
+ } EService;
+
+ /**
+ * Subclasses are supposed to handle translation results (e.g. show them in chat)
+ */
+ class TranslationReceiver: public LLHTTPClient::Responder
+ {
+ public:
+
+ /**
+ * Using mHandler, parse incoming response.
+ *
+ * Calls either handleResponse() or handleFailure()
+ * depending on the HTTP status code and parsing success.
+ *
+ * @see handleResponse()
+ * @see handleFailure()
+ * @see mHandler
+ */
+ /*virtual*/ void completedRaw(
+ U32 http_status,
+ const std::string& reason,
+ const LLChannelDescriptors& channels,
+ const LLIOPipe::buffer_ptr_t& buffer);
+
+ protected:
+ friend class LLTranslate;
+
+ /// Remember source and target languages for subclasses to be able to filter inappropriate results.
+ TranslationReceiver(const std::string& from_lang, const std::string& to_lang);
+
+ /// Override point to handle successful translation.
+ virtual void handleResponse(const std::string &translation, const std::string &recognized_lang) = 0;
+
+ /// Override point to handle unsuccessful translation.
+ virtual void handleFailure(int status, const std::string& err_msg) = 0;
+
+ std::string mFromLang;
+ std::string mToLang;
+ const LLTranslationAPIHandler& mHandler;
+ };
+
+ /**
+ * Subclasses are supposed to handle API key verification result.
+ */
+ class KeyVerificationReceiver: public LLHTTPClient::Responder
+ {
+ public:
+ EService getService() const;
+
+ protected:
+ /**
+ * Save the translation service the key belongs to.
+ *
+ * Subclasses need to know it.
+ *
+ * @see getService()
+ */
+ KeyVerificationReceiver(EService service);
+
+ /**
+ * Parse verification response.
+ *
+ * Calls setVerificationStatus() with the verification status,
+ * which is true if HTTP status code is 200.
+ *
+ * @see setVerificationStatus()
+ */
+ /*virtual*/ void completedRaw(
+ U32 http_status,
+ const std::string& reason,
+ const LLChannelDescriptors& channels,
+ const LLIOPipe::buffer_ptr_t& buffer);
+
+ /**
+ * Override point for subclasses to handle key verification status.
+ */
+ virtual void setVerificationStatus(bool ok) = 0;
+
+ EService mService;
+ };
+
+ typedef boost::intrusive_ptr TranslationReceiverPtr;
+ typedef boost::intrusive_ptr KeyVerificationReceiverPtr;
+
+ /**
+ * Translate given text.
+ *
+ * @param receiver Object to pass translation result to.
+ * @param from_lang Source language. Leave empty for auto-detection.
+ * @param to_lang Target language.
+ * @param mesg Text to translate.
+ */
+ static void translateMessage(TranslationReceiverPtr &receiver, const std::string &from_lang, const std::string &to_lang, const std::string &mesg);
+
+ /**
+ * Verify given API key of a translation service.
+ *
+ * @param receiver Object to pass verification result to.
+ * @param key Key to verify.
+ */
+ static void verifyKey(KeyVerificationReceiverPtr& receiver, const std::string& key);
+
+ /**
+ * @return translation target language
+ */
+ static std::string getTranslateLanguage();
+
+ /**
+ * @return true if translation is configured properly.
+ */
+ static bool isTranslationConfigured();
+
+private:
+ static const LLTranslationAPIHandler& getPreferredHandler();
+ static const LLTranslationAPIHandler& getHandler(EService service);
+ static void sendRequest(const std::string& url, LLHTTPClient::ResponderPtr responder);
};
#endif
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index 97ac3eb05..a060efd09 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -2957,23 +2957,23 @@ void process_decline_callingcard(LLMessageSystem* msg, void**)
class ChatTranslationReceiver : public LLTranslate::TranslationReceiver
{
public :
- ChatTranslationReceiver(const std::string &fromLang, const std::string &toLang, LLChat *chat,
+ ChatTranslationReceiver(const std::string &from_lang, const std::string &to_lang, LLChat *chat,
const BOOL history)
- : LLTranslate::TranslationReceiver(fromLang, toLang),
+ : LLTranslate::TranslationReceiver(from_lang, to_lang),
m_chat(chat),
m_history(history)
{
}
- static boost::intrusive_ptr build(const std::string &fromLang, const std::string &toLang, LLChat *chat, const BOOL history)
+ static boost::intrusive_ptr build(const std::string &from_lang, const std::string &to_lang, LLChat *chat, const BOOL history)
{
- return boost::intrusive_ptr(new ChatTranslationReceiver(fromLang, toLang, chat, history));
+ return boost::intrusive_ptr(new ChatTranslationReceiver(from_lang, to_lang, chat, history));
}
protected:
void handleResponse(const std::string &translation, const std::string &detectedLanguage)
{
- if (m_toLang != detectedLanguage)
+ if (mToLang != detectedLanguage)
m_chat->mText += " (" + translation + ")";
add_floater_chat(*m_chat, m_history);
@@ -2981,14 +2981,12 @@ protected:
delete m_chat;
}
- void handleFailure()
+ void handleFailure(int status, const std::string& err_msg)
{
- LLTranslate::TranslationReceiver::handleFailure();
+ llwarns << "Translation failed for mesg " << m_chat << " toLang " << mToLang << " fromLang " << mFromLang << llendl;
m_chat->mText += " (?)";
-
add_floater_chat(*m_chat, m_history);
-
delete m_chat;
}
@@ -3017,14 +3015,12 @@ void check_translate_chat(const std::string &mesg, LLChat &chat, const BOOL hist
if (translate && chat.mSourceType != CHAT_SOURCE_SYSTEM)
{
- // fromLang hardcoded to "" (autodetection) pending implementation of
- // SVC-4879
- const std::string &fromLang = "";
- const std::string &toLang = LLTranslate::getTranslateLanguage();
+ const std::string &from_lang = "";
+ const std::string &to_lang = LLTranslate::getTranslateLanguage();
LLChat *newChat = new LLChat(chat);
- LLHTTPClient::ResponderPtr result = ChatTranslationReceiver::build(fromLang, toLang, newChat, history);
- LLTranslate::translateMessage(result, fromLang, toLang, mesg);
+ LLTranslate::TranslationReceiverPtr result = ChatTranslationReceiver::build(from_lang, to_lang, newChat, history);
+ LLTranslate::translateMessage(result, from_lang, to_lang, mesg);
}
else
{
From 5c7debecc81e17e933ad6c117129648f43cf702e Mon Sep 17 00:00:00 2001
From: Siana Gearz
Date: Mon, 20 Feb 2012 03:47:06 +0100
Subject: [PATCH 06/35] Extra info from j2c decoder in case of cache corruption
---
indra/llimagej2coj/llimagej2coj.cpp | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/indra/llimagej2coj/llimagej2coj.cpp b/indra/llimagej2coj/llimagej2coj.cpp
index 23f67919f..afcd914f4 100644
--- a/indra/llimagej2coj/llimagej2coj.cpp
+++ b/indra/llimagej2coj/llimagej2coj.cpp
@@ -168,7 +168,7 @@ BOOL LLImageJ2COJ::decodeImpl(LLImageJ2C &base, LLImageRaw &raw_image, F32 decod
// dereference the array.
if(!image || !image->numcomps)
{
- llwarns << "ERROR -> decodeImpl: failed to decode image!" << llendl;
+ llwarns << "failed to decode image!" << llendl;
if (image)
{
opj_image_destroy(image);
@@ -183,6 +183,7 @@ BOOL LLImageJ2COJ::decodeImpl(LLImageJ2C &base, LLImageRaw &raw_image, F32 decod
{
if (image->comps[i].factor != base.getRawDiscardLevel())
{
+ llwarns << "Expected discard level not reached!" << llendl;
// if we didn't get the discard level we're expecting, fail
opj_image_destroy(image);
base.decodeFailed();
From ea7396d2cf3b15e6954e4d09ce8dbc7849dd7df1 Mon Sep 17 00:00:00 2001
From: Siana Gearz
Date: Mon, 20 Feb 2012 05:05:53 +0100
Subject: [PATCH 07/35] Crashfix audio panel in skin
---
indra/newview/skins/default/colors_base.xml | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/indra/newview/skins/default/colors_base.xml b/indra/newview/skins/default/colors_base.xml
index d71dbe7aa..493c64096 100644
--- a/indra/newview/skins/default/colors_base.xml
+++ b/indra/newview/skins/default/colors_base.xml
@@ -99,7 +99,7 @@
-
+
@@ -195,11 +195,12 @@
+
-
+
From 8e71cf8e6e169399e301f6fc7d3541fd86499be0 Mon Sep 17 00:00:00 2001
From: Siana Gearz
Date: Mon, 20 Feb 2012 05:05:57 +0100
Subject: [PATCH 08/35] Revert "Replace all NotifyCautionBoxColor's and
AlertCautionBoxColor's that were using tan with black, like Emerald skin's
NotifyCautionBoxColor."
This reverts commit 0fef1407e3477a35041eb5111af4bb4a0cd913c3.
---
indra/newview/skins/Pony-Aquablue/colors_base.xml | 4 ++--
indra/newview/skins/Pony-Purple/colors_base.xml | 4 ++--
indra/newview/skins/dark/colors_base.xml | 2 +-
indra/newview/skins/darkgred/colors_base.xml | 4 ++--
indra/newview/skins/default/colors_base.xml | 4 ++--
indra/newview/skins/emerald/colors_base.xml | 2 +-
indra/newview/skins/gemini/colors_base.xml | 4 ++--
indra/newview/skins/gred/colors_base.xml | 4 ++--
indra/newview/skins/kdarknv/colors.xml | 4 ++--
indra/newview/skins/kdarknv/colors_base.xml | 4 ++--
indra/newview/skins/kliteat/colors_base.xml | 4 ++--
indra/newview/skins/openlife/colors.xml | 4 ++--
indra/newview/skins/openlife/colors_base.xml | 4 ++--
indra/newview/skins/pslgreen/colors_base.xml | 2 +-
indra/newview/skins/pslpurple/colors_base.xml | 2 +-
indra/newview/skins/ruby/colors_base.xml | 4 ++--
indra/newview/skins/sapphire/colors_base.xml | 2 +-
indra/newview/skins/silver/colors_base.xml | 4 ++--
indra/newview/skins/wisdom/colors_base.xml | 4 ++--
19 files changed, 33 insertions(+), 33 deletions(-)
diff --git a/indra/newview/skins/Pony-Aquablue/colors_base.xml b/indra/newview/skins/Pony-Aquablue/colors_base.xml
index 9f8689260..b48208f68 100644
--- a/indra/newview/skins/Pony-Aquablue/colors_base.xml
+++ b/indra/newview/skins/Pony-Aquablue/colors_base.xml
@@ -99,7 +99,7 @@
-
+
@@ -195,7 +195,7 @@
-
+
diff --git a/indra/newview/skins/Pony-Purple/colors_base.xml b/indra/newview/skins/Pony-Purple/colors_base.xml
index b359f55db..8cde4c258 100644
--- a/indra/newview/skins/Pony-Purple/colors_base.xml
+++ b/indra/newview/skins/Pony-Purple/colors_base.xml
@@ -98,7 +98,7 @@
-
+
@@ -195,7 +195,7 @@
-
+
diff --git a/indra/newview/skins/dark/colors_base.xml b/indra/newview/skins/dark/colors_base.xml
index 2d8802b0f..032351a88 100644
--- a/indra/newview/skins/dark/colors_base.xml
+++ b/indra/newview/skins/dark/colors_base.xml
@@ -96,7 +96,7 @@
-
+
diff --git a/indra/newview/skins/darkgred/colors_base.xml b/indra/newview/skins/darkgred/colors_base.xml
index 7404c0598..d7132d44d 100644
--- a/indra/newview/skins/darkgred/colors_base.xml
+++ b/indra/newview/skins/darkgred/colors_base.xml
@@ -96,7 +96,7 @@
-
+
@@ -192,7 +192,7 @@
-
+
diff --git a/indra/newview/skins/default/colors_base.xml b/indra/newview/skins/default/colors_base.xml
index 493c64096..eafb95481 100644
--- a/indra/newview/skins/default/colors_base.xml
+++ b/indra/newview/skins/default/colors_base.xml
@@ -99,7 +99,7 @@
-
+
@@ -200,7 +200,7 @@
-
+
diff --git a/indra/newview/skins/emerald/colors_base.xml b/indra/newview/skins/emerald/colors_base.xml
index 18eea5cd3..57f34271a 100644
--- a/indra/newview/skins/emerald/colors_base.xml
+++ b/indra/newview/skins/emerald/colors_base.xml
@@ -194,7 +194,7 @@
-
+
diff --git a/indra/newview/skins/gemini/colors_base.xml b/indra/newview/skins/gemini/colors_base.xml
index cab6c8270..4f5c5df9a 100644
--- a/indra/newview/skins/gemini/colors_base.xml
+++ b/indra/newview/skins/gemini/colors_base.xml
@@ -98,7 +98,7 @@
-
+
@@ -196,7 +196,7 @@
-
+
diff --git a/indra/newview/skins/gred/colors_base.xml b/indra/newview/skins/gred/colors_base.xml
index 91f728ecf..6ecb33e97 100644
--- a/indra/newview/skins/gred/colors_base.xml
+++ b/indra/newview/skins/gred/colors_base.xml
@@ -96,7 +96,7 @@
-
+
@@ -193,7 +193,7 @@
-
+
diff --git a/indra/newview/skins/kdarknv/colors.xml b/indra/newview/skins/kdarknv/colors.xml
index 4c129ebbc..2a87bd898 100644
--- a/indra/newview/skins/kdarknv/colors.xml
+++ b/indra/newview/skins/kdarknv/colors.xml
@@ -87,7 +87,7 @@
-
+
@@ -181,4 +181,4 @@
-
+
\ No newline at end of file
diff --git a/indra/newview/skins/kdarknv/colors_base.xml b/indra/newview/skins/kdarknv/colors_base.xml
index 3f7cac358..477527766 100644
--- a/indra/newview/skins/kdarknv/colors_base.xml
+++ b/indra/newview/skins/kdarknv/colors_base.xml
@@ -99,7 +99,7 @@
-
+
@@ -188,7 +188,7 @@
-
+
diff --git a/indra/newview/skins/kliteat/colors_base.xml b/indra/newview/skins/kliteat/colors_base.xml
index 3f7cac358..477527766 100644
--- a/indra/newview/skins/kliteat/colors_base.xml
+++ b/indra/newview/skins/kliteat/colors_base.xml
@@ -99,7 +99,7 @@
-
+
@@ -188,7 +188,7 @@
-
+
diff --git a/indra/newview/skins/openlife/colors.xml b/indra/newview/skins/openlife/colors.xml
index cdfd54701..2008d0804 100644
--- a/indra/newview/skins/openlife/colors.xml
+++ b/indra/newview/skins/openlife/colors.xml
@@ -96,7 +96,7 @@
-
+
@@ -182,7 +182,7 @@
-
+
diff --git a/indra/newview/skins/openlife/colors_base.xml b/indra/newview/skins/openlife/colors_base.xml
index 94c67c241..39f897639 100644
--- a/indra/newview/skins/openlife/colors_base.xml
+++ b/indra/newview/skins/openlife/colors_base.xml
@@ -96,7 +96,7 @@
-
+
@@ -176,7 +176,7 @@
-
+
diff --git a/indra/newview/skins/pslgreen/colors_base.xml b/indra/newview/skins/pslgreen/colors_base.xml
index 2494452fa..10647478b 100644
--- a/indra/newview/skins/pslgreen/colors_base.xml
+++ b/indra/newview/skins/pslgreen/colors_base.xml
@@ -96,7 +96,7 @@
-
+
diff --git a/indra/newview/skins/pslpurple/colors_base.xml b/indra/newview/skins/pslpurple/colors_base.xml
index 2494452fa..10647478b 100644
--- a/indra/newview/skins/pslpurple/colors_base.xml
+++ b/indra/newview/skins/pslpurple/colors_base.xml
@@ -96,7 +96,7 @@
-
+
diff --git a/indra/newview/skins/ruby/colors_base.xml b/indra/newview/skins/ruby/colors_base.xml
index 6ab840c02..f55f4c2e5 100644
--- a/indra/newview/skins/ruby/colors_base.xml
+++ b/indra/newview/skins/ruby/colors_base.xml
@@ -96,7 +96,7 @@
-
+
@@ -192,7 +192,7 @@
-
+
diff --git a/indra/newview/skins/sapphire/colors_base.xml b/indra/newview/skins/sapphire/colors_base.xml
index 587f47bf5..0b5e343e1 100644
--- a/indra/newview/skins/sapphire/colors_base.xml
+++ b/indra/newview/skins/sapphire/colors_base.xml
@@ -96,7 +96,7 @@
-
+
diff --git a/indra/newview/skins/silver/colors_base.xml b/indra/newview/skins/silver/colors_base.xml
index ada05d3ed..7ae59a490 100644
--- a/indra/newview/skins/silver/colors_base.xml
+++ b/indra/newview/skins/silver/colors_base.xml
@@ -98,7 +98,7 @@
-
+
@@ -199,7 +199,7 @@
-
+
diff --git a/indra/newview/skins/wisdom/colors_base.xml b/indra/newview/skins/wisdom/colors_base.xml
index 5bdc1f360..cfb056c21 100644
--- a/indra/newview/skins/wisdom/colors_base.xml
+++ b/indra/newview/skins/wisdom/colors_base.xml
@@ -99,7 +99,7 @@
-
+
@@ -191,7 +191,7 @@
-
+
From 9477a5f32fdab94b8e1d6bc5649c617b13b17791 Mon Sep 17 00:00:00 2001
From: Siana Gearz
Date: Mon, 20 Feb 2012 05:38:57 +0100
Subject: [PATCH 09/35] Fix code bug making notifications unreadable colour
---
indra/newview/llnotify.cpp | 24 ++++++++++++++++++++++++
1 file changed, 24 insertions(+)
diff --git a/indra/newview/llnotify.cpp b/indra/newview/llnotify.cpp
index 20145004f..c942aee44 100644
--- a/indra/newview/llnotify.cpp
+++ b/indra/newview/llnotify.cpp
@@ -242,6 +242,30 @@ LLNotifyBox::LLNotifyBox(LLNotificationPtr notification,
// it appears below the caution textbox
y = y - caution_height;
}
+ else if (mIsCaution && mIsTip)
+ {
+
+ const S32 BTN_TOP = BOTTOM_PAD + (((mNumOptions-1+2)/3)) * (BTN_HEIGHT+VPAD);
+
+ // Tokenization on \n is handled by LLTextBox
+
+ const S32 MAX_LENGTH = 512 + 20 + DB_FIRST_NAME_BUF_SIZE + DB_LAST_NAME_BUF_SIZE + DB_INV_ITEM_NAME_BUF_SIZE; // For script dialogs: add space for title.
+
+ text = new LLTextEditor(std::string("box"), LLRect(x, y, getRect().getWidth()-2, mIsTip ? BOTTOM : BTN_TOP+16), MAX_LENGTH, mMessage, sFont, FALSE);
+ text->setWordWrap(TRUE);
+ text->setTabStop(FALSE);
+ text->setMouseOpaque(FALSE);
+ text->setBorderVisible(FALSE);
+ text->setTakesNonScrollClicks(FALSE);
+ text->setHideScrollbarForShortDocs(TRUE);
+ text->setReadOnlyBgColor ( LLColor4::transparent ); // the background color of the box is manually
+ // rendered under the text box, therefore we want
+ // the actual text box to be transparent
+ text->setReadOnlyFgColor ( gColors.getColor("NotifyCautionWarnColor") ); //sets caution text color for tip notifications
+ text->setEnabled(FALSE); // makes it read-only
+ text->setTabStop(FALSE); // can't tab to it (may be a problem for scrolling via keyboard)
+ addChild(text);
+ }
else
{
From 89f35779b4b3e20d8aa233a01c2a3aa89832d80f Mon Sep 17 00:00:00 2001
From: TighMacFanatic
Date: Mon, 20 Feb 2012 16:37:34 -0500
Subject: [PATCH 10/35] Fixed Windlight presets not loading user created files.
---
indra/newview/llfloaterwindlight.cpp | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/indra/newview/llfloaterwindlight.cpp b/indra/newview/llfloaterwindlight.cpp
index 5d69cc246..e2c96db76 100644
--- a/indra/newview/llfloaterwindlight.cpp
+++ b/indra/newview/llfloaterwindlight.cpp
@@ -1070,5 +1070,13 @@ void LLFloaterWindLight::populateSkyPresetsList()
mSkyPresetCombo->add(*it);
}
+ LLWLParamManager::preset_name_list_t user_presets;
+ LLWLParamManager::getInstance()->getUserPresetNames(user_presets);
+
+ for (LLWLParamManager::preset_name_list_t::const_iterator it = user_presets.begin(); it != user_presets.end(); ++it)
+ {
+ mSkyPresetCombo->add(*it);
+ }
+
mSkyPresetCombo->selectByValue(LLEnvManagerNew::instance().getSkyPresetName());
}
From 638832455215ff5710d3febf8825aee7c779d316 Mon Sep 17 00:00:00 2001
From: Drake Arconis
Date: Tue, 21 Feb 2012 09:27:10 -0500
Subject: [PATCH 11/35] Revert "This works for now. Need to do more testing."
This reverts commit c6d6eed7d33121ac2bbd466ac2e49cccd6f6d921.
---
indra/newview/app_settings/settings.xml | 54 +--
indra/newview/lltranslate.cpp | 465 +++++-------------------
indra/newview/lltranslate.h | 368 +++++--------------
indra/newview/llviewermessage.cpp | 26 +-
4 files changed, 221 insertions(+), 692 deletions(-)
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 7553e8816..2b521fed4 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -1,15 +1,16 @@
- Include
-
- settings_ascent.xml
- settings_ascent_coa.xml
- settings_sh.xml
- settings_rlv.xml
-
- SianaRenderDeferredInvisiprim
-
+ Include
+
+ settings_ascent.xml
+ settings_ascent_coa.xml
+ settings_sh.xml
+ settings_rlv.xml
+
+
+ SianaRenderDeferredInvisiprim
+
Comment
Support invisiprims in deferred mode
Persist
@@ -7524,45 +7525,12 @@
Comment
Translate incoming chat messages
Persist
- 1
+ 0
Type
Boolean
Value
0
- TranslationService
-
- Comment
- Translation API to use. (google|bing)
- Persist
- 1
- Type
- String
- Value
- bing
-
- GoogleTranslateAPIKey
-
- Comment
- Google Translate API key
- Persist
- 1
- Type
- String
- Value
-
-
- BingTranslateAPIKey
-
- Comment
- Bing AppID to use with the Microsoft Translator API
- Persist
- 1
- Type
- String
- Value
-
-
LastFeatureVersion
Comment
diff --git a/indra/newview/lltranslate.cpp b/indra/newview/lltranslate.cpp
index fcff3a0c7..5a537ae95 100644
--- a/indra/newview/lltranslate.cpp
+++ b/indra/newview/lltranslate.cpp
@@ -2,401 +2,136 @@
* @file lltranslate.cpp
* @brief Functions for translating text via Google Translate.
*
- * $LicenseInfo:firstyear=2009&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
- * $/LicenseInfo$
- */
+* $LicenseInfo:firstyear=2009&license=viewergpl$
+*
+* Copyright (c) 2009, Linden Research, Inc.
+*
+* Second Life Viewer Source Code
+* The source code in this file ("Source Code") is provided by Linden Lab
+* to you under the terms of the GNU General Public License, version 2.0
+* ("GPL"), unless you have obtained a separate licensing agreement
+* ("Other License"), formally executed by you and Linden Lab. 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 LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+* COMPLETENESS OR PERFORMANCE.
+* $/LicenseInfo$
+*/
#include "llviewerprecompiledheaders.h"
-#include "lltranslate.h"
-
-#include
-
#include "llbufferstream.h"
-#include "lltrans.h"
+#include "lltranslate.h"
#include "llui.h"
-#include "llviewercontrol.h"
+#include "sgversion.h"
#include "llweb.h"
-#include "sgversion.h"
+//
+#include "llviewercontrol.h"
+//
-#include "jsoncpp/reader.h"
+// These two are concatenated with the language specifiers to form a complete Google Translate URL
+const char* LLTranslate::m_GoogleURL = "http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&q=";
+const char* LLTranslate::m_GoogleLangSpec = "&langpair=";
+float LLTranslate::m_GoogleTimeout = 10;
-// virtual
-void LLGoogleTranslationHandler::getTranslateURL(
- std::string &url,
- const std::string &from_lang,
- const std::string &to_lang,
- const std::string &text) const
+LLSD LLTranslate::m_Header;
+// These constants are for the GET header.
+const char* LLTranslate::m_AcceptHeader = "Accept";
+const char* LLTranslate::m_AcceptType = "text/plain";
+const char* LLTranslate::m_AgentHeader = "User-Agent";
+
+// These constants are in the JSON returned from Google
+const char* LLTranslate::m_GoogleData = "responseData";
+const char* LLTranslate::m_GoogleTranslation = "translatedText";
+const char* LLTranslate::m_GoogleLanguage = "detectedSourceLanguage";
+
+//static
+void LLTranslate::translateMessage(LLHTTPClient::ResponderPtr &result, const std::string &fromLang, const std::string &toLang, const std::string &mesg)
{
- url = std::string("https://www.googleapis.com/language/translate/v2?key=")
- + getAPIKey() + "&q=" + LLURI::escape(text) + "&target=" + to_lang;
- if (!from_lang.empty())
+ std::string url;
+ getTranslateUrl(url, fromLang, toLang, mesg);
+
+//
+ std::string user_agent = gCurrentVersion;
+//
+
+ if (!m_Header.size())
{
- url += "&source=" + from_lang;
- }
-}
-
-// virtual
-void LLGoogleTranslationHandler::getKeyVerificationURL(
- std::string& url,
- const std::string& key) const
-{
- url = std::string("https://www.googleapis.com/language/translate/v2/languages?key=")
- + key + "&target=en";
-}
-
-// virtual
-bool LLGoogleTranslationHandler::parseResponse(
- int& status,
- const std::string& body,
- std::string& translation,
- std::string& detected_lang,
- std::string& err_msg) const
-{
- Json::Value root;
- Json::Reader reader;
-
- if (!reader.parse(body, root))
- {
- err_msg = reader.getFormatedErrorMessages();
- return false;
+ m_Header.insert(m_AcceptHeader, LLSD(m_AcceptType));
+ m_Header.insert(m_AgentHeader, LLSD(user_agent));
}
- if (!root.isObject()) // empty response? should not happen
- {
- return false;
- }
-
- if (status != STATUS_OK)
- {
- // Request failed. Extract error message from the response.
- parseErrorResponse(root, status, err_msg);
- return false;
- }
-
- // Request succeeded, extract translation from the response.
- return parseTranslation(root, translation, detected_lang);
-}
-
-// virtual
-bool LLGoogleTranslationHandler::isConfigured() const
-{
- return !getAPIKey().empty();
-}
-
-// static
-void LLGoogleTranslationHandler::parseErrorResponse(
- const Json::Value& root,
- int& status,
- std::string& err_msg)
-{
- const Json::Value& error = root.get("error", 0);
- if (!error.isObject() || !error.isMember("message") || !error.isMember("code"))
- {
- return;
- }
-
- err_msg = error["message"].asString();
- status = error["code"].asInt();
-}
-
-// static
-bool LLGoogleTranslationHandler::parseTranslation(
- const Json::Value& root,
- std::string& translation,
- std::string& detected_lang)
-{
- // JsonCpp is prone to aborting the program on failed assertions,
- // so be super-careful and verify the response format.
- const Json::Value& data = root.get("data", 0);
- if (!data.isObject() || !data.isMember("translations"))
- {
- return false;
- }
-
- const Json::Value& translations = data["translations"];
- if (!translations.isArray() || translations.size() == 0)
- {
- return false;
- }
-
- const Json::Value& first = translations[0U];
- if (!first.isObject() || !first.isMember("translatedText"))
- {
- return false;
- }
-
- translation = first["translatedText"].asString();
- detected_lang = first.get("detectedSourceLanguage", "").asString();
- return true;
-}
-
-// static
-std::string LLGoogleTranslationHandler::getAPIKey()
-{
- return gSavedSettings.getString("GoogleTranslateAPIKey");
-}
-
-// virtual
-void LLBingTranslationHandler::getTranslateURL(
- std::string &url,
- const std::string &from_lang,
- const std::string &to_lang,
- const std::string &text) const
-{
- url = std::string("http://api.microsofttranslator.com/v2/Http.svc/Translate?appId=")
- + getAPIKey() + "&text=" + LLURI::escape(text) + "&to=" + to_lang;
- if (!from_lang.empty())
- {
- url += "&from=" + from_lang;
- }
-}
-
-// virtual
-void LLBingTranslationHandler::getKeyVerificationURL(
- std::string& url,
- const std::string& key) const
-{
- url = std::string("http://api.microsofttranslator.com/v2/Http.svc/GetLanguagesForTranslate?appId=")
- + key;
-}
-
-// virtual
-bool LLBingTranslationHandler::parseResponse(
- int& status,
- const std::string& body,
- std::string& translation,
- std::string& detected_lang,
- std::string& err_msg) const
-{
- if (status != STATUS_OK)
- {
- static const std::string MSG_BEGIN_MARKER = "Message: ";
- size_t begin = body.find(MSG_BEGIN_MARKER);
- if (begin != std::string::npos)
- {
- begin += MSG_BEGIN_MARKER.size();
- }
- else
- {
- begin = 0;
- err_msg.clear();
- }
- size_t end = body.find("", begin);
- err_msg = body.substr(begin, end-begin);
- LLStringUtil::replaceString(err_msg, "
", ""); // strip CR
- return false;
- }
-
- // Sample response: Hola
- size_t begin = body.find(">");
- if (begin == std::string::npos || begin >= (body.size() - 1))
- {
- begin = 0;
- }
- else
- {
- ++begin;
- }
-
- size_t end = body.find("", begin);
-
- detected_lang = ""; // unsupported by this API
- translation = body.substr(begin, end-begin);
- LLStringUtil::replaceString(translation, "
", ""); // strip CR
- return true;
-}
-
-// virtual
-bool LLBingTranslationHandler::isConfigured() const
-{
- return !getAPIKey().empty();
-}
-
-// static
-std::string LLBingTranslationHandler::getAPIKey()
-{
- return gSavedSettings.getString("BingTranslateAPIKey");
-}
-
-LLTranslate::TranslationReceiver::TranslationReceiver(const std::string& from_lang, const std::string& to_lang)
-: mFromLang(from_lang)
-, mToLang(to_lang)
-, mHandler(LLTranslate::getPreferredHandler())
-{
-}
-
-// virtual
-void LLTranslate::TranslationReceiver::completedRaw(
- U32 http_status,
- const std::string& reason,
- const LLChannelDescriptors& channels,
- const LLIOPipe::buffer_ptr_t& buffer)
-{
- LLBufferStream istr(channels, buffer.get());
- std::stringstream strstrm;
- strstrm << istr.rdbuf();
-
- const std::string body = strstrm.str();
- std::string translation, detected_lang, err_msg;
- int status = http_status;
- LL_DEBUGS("Translate") << "HTTP status: " << status << " " << reason << LL_ENDL;
- LL_DEBUGS("Translate") << "Response body: " << body << LL_ENDL;
- if (mHandler.parseResponse(status, body, translation, detected_lang, err_msg))
- {
- // Fix up the response
- LLStringUtil::replaceString(translation, "<", "<");
- LLStringUtil::replaceString(translation, ">",">");
- LLStringUtil::replaceString(translation, ""","\"");
- LLStringUtil::replaceString(translation, "'","'");
- LLStringUtil::replaceString(translation, "&","&");
- LLStringUtil::replaceString(translation, "'","'");
-
- handleResponse(translation, detected_lang);
- }
- else
- {
- if (err_msg.empty())
- {
- err_msg = LLTrans::getString("TranslationResponseParseError");
- }
-
- llwarns << "Translation request failed: " << err_msg << llendl;
- handleFailure(status, err_msg);
- }
-}
-
-LLTranslate::KeyVerificationReceiver::KeyVerificationReceiver(EService service)
-: mService(service)
-{
-}
-
-LLTranslate::EService LLTranslate::KeyVerificationReceiver::getService() const
-{
- return mService;
-}
-
-// virtual
-void LLTranslate::KeyVerificationReceiver::completedRaw(
- U32 http_status,
- const std::string& reason,
- const LLChannelDescriptors& channels,
- const LLIOPipe::buffer_ptr_t& buffer)
-{
- bool ok = (http_status == 200);
- setVerificationStatus(ok);
+ LLHTTPClient::get(url, result, m_Header, m_GoogleTimeout);
}
//static
-void LLTranslate::translateMessage(
- TranslationReceiverPtr &receiver,
- const std::string &from_lang,
- const std::string &to_lang,
- const std::string &mesg)
+void LLTranslate::getTranslateUrl(std::string &translateUrl, const std::string &fromLang, const std::string &toLang, const std::string &mesg)
{
- std::string url;
- receiver->mHandler.getTranslateURL(url, from_lang, to_lang, mesg);
+ std::string escaped_mesg = LLWeb::curlEscape(mesg);
- LL_DEBUGS("Translate") << "Sending translation request: " << url << LL_ENDL;
- sendRequest(url, receiver);
+ translateUrl = m_GoogleURL
+ + escaped_mesg + m_GoogleLangSpec
+ + fromLang // 'from' language; empty string for auto
+ + "%7C" // |
+ + toLang; // 'to' language
}
-// static
-void LLTranslate::verifyKey(
- KeyVerificationReceiverPtr& receiver,
- const std::string& key)
+//static
+void LLTranslate::stringReplaceAll(std::string& context, const std::string& from, const std::string& to)
{
- std::string url;
- const LLTranslationAPIHandler& handler = getHandler(receiver->getService());
- handler.getKeyVerificationURL(url, key);
+ size_t lookHere = 0;
+ size_t foundHere;
- LL_DEBUGS("Translate") << "Sending key verification request: " << url << LL_ENDL;
- sendRequest(url, receiver);
+ while((foundHere = context.find(from, lookHere))
+ != std::string::npos) {
+ context.replace(foundHere, from.size(), to);
+ lookHere = foundHere + to.size();
+ }
+}
+
+//static
+BOOL LLTranslate::parseGoogleTranslate(const std::string result, std::string &translation, std::string &detectedLanguage)
+{
+ Json::Value root;
+ Json::Reader reader;
+ BOOL parsingSuccessful = reader.parse(result, root );
+ if ( !parsingSuccessful )
+ {
+ LL_WARNS("JSON") << reader.getFormatedErrorMessages() << LL_ENDL;
+ return FALSE;
+ }
+
+ translation = root[m_GoogleData].get(m_GoogleTranslation, "").asString();
+ detectedLanguage = root[m_GoogleData].get(m_GoogleLanguage, "").asString();
+ return TRUE;
}
//static
std::string LLTranslate::getTranslateLanguage()
{
- std::string language = gSavedSettings.getString("TranslateLanguage");
- if (language.empty() || language == "default")
+ std::string language = "en";
+ if (LLUI::sConfigGroup)
{
- language = LLUI::getLanguage();
+ language = LLUI::sConfigGroup->getString("TranslateLanguage");
+ if (language.empty() || language == "default")
+ {
+ language = LLUI::getLanguage();
+ }
}
language = language.substr(0,2);
return language;
}
-// static
-bool LLTranslate::isTranslationConfigured()
-{
- return getPreferredHandler().isConfigured();
-}
-
-// static
-const LLTranslationAPIHandler& LLTranslate::getPreferredHandler()
-{
- EService service = SERVICE_BING;
-
- std::string service_str = gSavedSettings.getString("TranslationService");
- if (service_str == "google")
- {
- service = SERVICE_GOOGLE;
- }
-
- return getHandler(service);
-}
-
-// static
-const LLTranslationAPIHandler& LLTranslate::getHandler(EService service)
-{
- static LLGoogleTranslationHandler google;
- static LLBingTranslationHandler bing;
-
- if (service == SERVICE_GOOGLE)
- {
- return google;
- }
-
- return bing;
-}
-
-// static
-void LLTranslate::sendRequest(const std::string& url, LLHTTPClient::ResponderPtr responder)
-{
- static const float REQUEST_TIMEOUT = 5;
- static LLSD sHeader;
-
- if (!sHeader.size())
- {
- std::string user_agent = llformat("%s %d.%d.%d (%d)",
- gVersionChannel,
- gVersionMajor,
- gVersionMinor,
- gVersionPatch,
- gVersionBuild);
-
- sHeader.insert("Accept", "text/plain");
- sHeader.insert("User-Agent", user_agent);
- }
-
- LLHTTPClient::get(url, responder, sHeader, REQUEST_TIMEOUT);
-}
diff --git a/indra/newview/lltranslate.h b/indra/newview/lltranslate.h
index 870cc1fae..2723c43ff 100644
--- a/indra/newview/lltranslate.h
+++ b/indra/newview/lltranslate.h
@@ -2,27 +2,33 @@
* @file lltranslate.h
* @brief Human language translation class and JSON response receiver.
*
- * $LicenseInfo:firstyear=2009&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
- * $/LicenseInfo$
- */
+* $LicenseInfo:firstyear=2009&license=viewergpl$
+*
+* Copyright (c) 2009, Linden Research, Inc.
+*
+* Second Life Viewer Source Code
+* The source code in this file ("Source Code") is provided by Linden Lab
+* to you under the terms of the GNU General Public License, version 2.0
+* ("GPL"), unless you have obtained a separate licensing agreement
+* ("Other License"), formally executed by you and Linden Lab. 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 LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+* COMPLETENESS OR PERFORMANCE.
+* $/LicenseInfo$
+*/
#ifndef LL_LLTRANSLATE_H
#define LL_LLTRANSLATE_H
@@ -31,273 +37,89 @@
#include "llbufferstream.h"
#include "jsoncpp/reader.h"
-namespace Json
-{
- class Value;
-}
-
-/**
- * Handler of an HTTP machine translation service.
- *
- * Derived classes know the service URL
- * and how to parse the translation result.
- */
-class LLTranslationAPIHandler
-{
-public:
- /**
- * Get URL for translation of the given string.
- *
- * Sending HTTP GET request to the URL will initiate translation.
- *
- * @param[out] url Place holder for the result.
- * @param from_lang Source language. Leave empty for auto-detection.
- * @param to_lang Target language.
- * @param text Text to translate.
- */
- virtual void getTranslateURL(
- std::string &url,
- const std::string &from_lang,
- const std::string &to_lang,
- const std::string &text) const = 0;
-
- /**
- * Get URL to verify the given API key.
- *
- * Sending request to the URL verifies the key.
- * Positive HTTP response (code 200) means that the key is valid.
- *
- * @param[out] url Place holder for the URL.
- * @param[in] key Key to verify.
- */
- virtual void getKeyVerificationURL(
- std::string &url,
- const std::string &key) const = 0;
-
- /**
- * Parse translation response.
- *
- * @param[in,out] status HTTP status. May be modified while parsing.
- * @param body Response text.
- * @param[out] translation Translated text.
- * @param[out] detected_lang Detected source language. May be empty.
- * @param[out] err_msg Error message (in case of error).
- */
- virtual bool parseResponse(
- int& status,
- const std::string& body,
- std::string& translation,
- std::string& detected_lang,
- std::string& err_msg) const = 0;
-
- /**
- * @return if the handler is configured to function properly
- */
- virtual bool isConfigured() const = 0;
-
- virtual ~LLTranslationAPIHandler() {}
-
-protected:
- static const int STATUS_OK = 200;
-};
-
-/// Google Translate v2 API handler.
-class LLGoogleTranslationHandler : public LLTranslationAPIHandler
-{
- LOG_CLASS(LLGoogleTranslationHandler);
-
-public:
- /*virtual*/ void getTranslateURL(
- std::string &url,
- const std::string &from_lang,
- const std::string &to_lang,
- const std::string &text) const;
- /*virtual*/ void getKeyVerificationURL(
- std::string &url,
- const std::string &key) const;
- /*virtual*/ bool parseResponse(
- int& status,
- const std::string& body,
- std::string& translation,
- std::string& detected_lang,
- std::string& err_msg) const;
- /*virtual*/ bool isConfigured() const;
-
-private:
- static void parseErrorResponse(
- const Json::Value& root,
- int& status,
- std::string& err_msg);
- static bool parseTranslation(
- const Json::Value& root,
- std::string& translation,
- std::string& detected_lang);
- static std::string getAPIKey();
-};
-
-/// Microsoft Translator v2 API handler.
-class LLBingTranslationHandler : public LLTranslationAPIHandler
-{
- LOG_CLASS(LLBingTranslationHandler);
-
-public:
- /*virtual*/ void getTranslateURL(
- std::string &url,
- const std::string &from_lang,
- const std::string &to_lang,
- const std::string &text) const;
- /*virtual*/ void getKeyVerificationURL(
- std::string &url,
- const std::string &key) const;
- /*virtual*/ bool parseResponse(
- int& status,
- const std::string& body,
- std::string& translation,
- std::string& detected_lang,
- std::string& err_msg) const;
- /*virtual*/ bool isConfigured() const;
-private:
- static std::string getAPIKey();
-};
-
-/**
- * Entry point for machine translation services.
- *
- * Basically, to translate a string, we need to know the URL
- * of a translation service, have a valid API for the service
- * and be given the target language.
- *
- * Callers specify the string to translate and the target language,
- * LLTranslate takes care of the rest.
- *
- * API keys for translation are taken from saved settings.
- */
class LLTranslate
{
- LOG_CLASS(LLTranslate);
-
public :
-
- typedef enum e_service {
- SERVICE_BING,
- SERVICE_GOOGLE,
- } EService;
-
- /**
- * Subclasses are supposed to handle translation results (e.g. show them in chat)
- */
class TranslationReceiver: public LLHTTPClient::Responder
{
- public:
+ protected:
+ TranslationReceiver(const std::string &fromLang, const std::string &toLang)
+ : m_fromLang(fromLang),
+ m_toLang(toLang)
+ {
+ }
- /**
- * Using mHandler, parse incoming response.
- *
- * Calls either handleResponse() or handleFailure()
- * depending on the HTTP status code and parsing success.
- *
- * @see handleResponse()
- * @see handleFailure()
- * @see mHandler
- */
- /*virtual*/ void completedRaw(
- U32 http_status,
+ virtual void handleResponse(const std::string &translation, const std::string &recognizedLang) {}
+ virtual void handleFailure() {};
+
+ public:
+ ~TranslationReceiver()
+ {
+ }
+
+ virtual void error(U32 status, const std::string& reason)
+ {
+ LL_WARNS("Translate") << "URL Request error: " << reason << LL_ENDL;
+ handleFailure();
+ }
+
+ virtual void completedRaw(
+ U32 status,
const std::string& reason,
const LLChannelDescriptors& channels,
- const LLIOPipe::buffer_ptr_t& buffer);
+ const LLIOPipe::buffer_ptr_t& buffer)
+ {
+ LLBufferStream istr(channels, buffer.get());
+
+ std::stringstream strstrm;
+ strstrm << istr.rdbuf();
+ const std::string result = strstrm.str();
+
+ std::string translation;
+ std::string detectedLanguage;
+
+ if (!parseGoogleTranslate(result, translation, detectedLanguage))
+ {
+ handleFailure();
+ return;
+ }
+
+ // Fix up the response
+ stringReplaceAll( translation, "<","<");
+ stringReplaceAll( translation, ">",">");
+ stringReplaceAll( translation, ""","\"");
+ stringReplaceAll( translation, "'","'");
+ stringReplaceAll( translation, "&","&");
+ stringReplaceAll( translation, "'","'");
+
+ handleResponse(translation, detectedLanguage);
+ }
protected:
- friend class LLTranslate;
-
- /// Remember source and target languages for subclasses to be able to filter inappropriate results.
- TranslationReceiver(const std::string& from_lang, const std::string& to_lang);
-
- /// Override point to handle successful translation.
- virtual void handleResponse(const std::string &translation, const std::string &recognized_lang) = 0;
-
- /// Override point to handle unsuccessful translation.
- virtual void handleFailure(int status, const std::string& err_msg) = 0;
-
- std::string mFromLang;
- std::string mToLang;
- const LLTranslationAPIHandler& mHandler;
+ const std::string m_toLang;
+ const std::string m_fromLang;
};
- /**
- * Subclasses are supposed to handle API key verification result.
- */
- class KeyVerificationReceiver: public LLHTTPClient::Responder
- {
- public:
- EService getService() const;
-
- protected:
- /**
- * Save the translation service the key belongs to.
- *
- * Subclasses need to know it.
- *
- * @see getService()
- */
- KeyVerificationReceiver(EService service);
-
- /**
- * Parse verification response.
- *
- * Calls setVerificationStatus() with the verification status,
- * which is true if HTTP status code is 200.
- *
- * @see setVerificationStatus()
- */
- /*virtual*/ void completedRaw(
- U32 http_status,
- const std::string& reason,
- const LLChannelDescriptors& channels,
- const LLIOPipe::buffer_ptr_t& buffer);
-
- /**
- * Override point for subclasses to handle key verification status.
- */
- virtual void setVerificationStatus(bool ok) = 0;
-
- EService mService;
- };
-
- typedef boost::intrusive_ptr TranslationReceiverPtr;
- typedef boost::intrusive_ptr KeyVerificationReceiverPtr;
-
- /**
- * Translate given text.
- *
- * @param receiver Object to pass translation result to.
- * @param from_lang Source language. Leave empty for auto-detection.
- * @param to_lang Target language.
- * @param mesg Text to translate.
- */
- static void translateMessage(TranslationReceiverPtr &receiver, const std::string &from_lang, const std::string &to_lang, const std::string &mesg);
-
- /**
- * Verify given API key of a translation service.
- *
- * @param receiver Object to pass verification result to.
- * @param key Key to verify.
- */
- static void verifyKey(KeyVerificationReceiverPtr& receiver, const std::string& key);
-
- /**
- * @return translation target language
- */
+ static void translateMessage(LLHTTPClient::ResponderPtr &result, const std::string &fromLang, const std::string &toLang, const std::string &mesg);
+ static float m_GoogleTimeout;
static std::string getTranslateLanguage();
- /**
- * @return true if translation is configured properly.
- */
- static bool isTranslationConfigured();
-
private:
- static const LLTranslationAPIHandler& getPreferredHandler();
- static const LLTranslationAPIHandler& getHandler(EService service);
- static void sendRequest(const std::string& url, LLHTTPClient::ResponderPtr responder);
+ static void getTranslateUrl(std::string &translateUrl, const std::string &fromLang, const std::string &toLang, const std::string &text);
+ static void stringReplaceAll(std::string& context, const std::string& from, const std::string& to);
+ static BOOL parseGoogleTranslate(const std::string result, std::string &translation, std::string &detectedLanguage);
+
+ static LLSD m_Header;
+ static const char* m_GoogleURL;
+ static const char* m_GoogleLangSpec;
+ static const char* m_AcceptHeader;
+ static const char* m_AcceptType;
+ static const char* m_AgentHeader;
+ static const char* m_UserAgent;
+
+ static const char* m_GoogleData;
+ static const char* m_GoogleTranslation;
+ static const char* m_GoogleLanguage;
};
#endif
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index a060efd09..97ac3eb05 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -2957,23 +2957,23 @@ void process_decline_callingcard(LLMessageSystem* msg, void**)
class ChatTranslationReceiver : public LLTranslate::TranslationReceiver
{
public :
- ChatTranslationReceiver(const std::string &from_lang, const std::string &to_lang, LLChat *chat,
+ ChatTranslationReceiver(const std::string &fromLang, const std::string &toLang, LLChat *chat,
const BOOL history)
- : LLTranslate::TranslationReceiver(from_lang, to_lang),
+ : LLTranslate::TranslationReceiver(fromLang, toLang),
m_chat(chat),
m_history(history)
{
}
- static boost::intrusive_ptr build(const std::string &from_lang, const std::string &to_lang, LLChat *chat, const BOOL history)
+ static boost::intrusive_ptr build(const std::string &fromLang, const std::string &toLang, LLChat *chat, const BOOL history)
{
- return boost::intrusive_ptr(new ChatTranslationReceiver(from_lang, to_lang, chat, history));
+ return boost::intrusive_ptr(new ChatTranslationReceiver(fromLang, toLang, chat, history));
}
protected:
void handleResponse(const std::string &translation, const std::string &detectedLanguage)
{
- if (mToLang != detectedLanguage)
+ if (m_toLang != detectedLanguage)
m_chat->mText += " (" + translation + ")";
add_floater_chat(*m_chat, m_history);
@@ -2981,12 +2981,14 @@ protected:
delete m_chat;
}
- void handleFailure(int status, const std::string& err_msg)
+ void handleFailure()
{
- llwarns << "Translation failed for mesg " << m_chat << " toLang " << mToLang << " fromLang " << mFromLang << llendl;
+ LLTranslate::TranslationReceiver::handleFailure();
m_chat->mText += " (?)";
+
add_floater_chat(*m_chat, m_history);
+
delete m_chat;
}
@@ -3015,12 +3017,14 @@ void check_translate_chat(const std::string &mesg, LLChat &chat, const BOOL hist
if (translate && chat.mSourceType != CHAT_SOURCE_SYSTEM)
{
- const std::string &from_lang = "";
- const std::string &to_lang = LLTranslate::getTranslateLanguage();
+ // fromLang hardcoded to "" (autodetection) pending implementation of
+ // SVC-4879
+ const std::string &fromLang = "";
+ const std::string &toLang = LLTranslate::getTranslateLanguage();
LLChat *newChat = new LLChat(chat);
- LLTranslate::TranslationReceiverPtr result = ChatTranslationReceiver::build(from_lang, to_lang, newChat, history);
- LLTranslate::translateMessage(result, from_lang, to_lang, mesg);
+ LLHTTPClient::ResponderPtr result = ChatTranslationReceiver::build(fromLang, toLang, newChat, history);
+ LLTranslate::translateMessage(result, fromLang, toLang, mesg);
}
else
{
From 803011582cb98435042cb534d44032977e33111c Mon Sep 17 00:00:00 2001
From: Drake Arconis
Date: Tue, 21 Feb 2012 10:53:47 -0500
Subject: [PATCH 12/35] Further OS X changes.
---
indra/cmake/Variables.cmake | 4 +--
indra/newview/CMakeLists.txt | 55 ++++++++++++++++++------------------
2 files changed, 30 insertions(+), 29 deletions(-)
diff --git a/indra/cmake/Variables.cmake b/indra/cmake/Variables.cmake
index 964c9d684..0428ae87d 100644
--- a/indra/cmake/Variables.cmake
+++ b/indra/cmake/Variables.cmake
@@ -78,15 +78,15 @@ if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
#SDK Compiler and Deployment targets for XCode
if (${XCODE_VERSION} VERSION_LESS 4.0.0)
+ set(CMAKE_OSX_DEPLOYMENT_TARGET 10.5)
set(CMAKE_OSX_SYSROOT /Developer/SDKs/MacOSX10.5.sdk)
set(CMAKE_XCODE_ATTIBUTE_GCC_VERSION "4.2")
else (${XCODE_VERSION} VERSION_LESS 4.0.0)
+ set(CMAKE_OSX_DEPLOYMENT_TARGET 10.6)
set(CMAKE_OSX_SYSROOT /Developer/SDKs/MacOSX10.6.sdk)
set(CMAKE_XCODE_ATTRIBUTE_GCC_VERSION "com.apple.compilers.llvmgcc42")
endif (${XCODE_VERSION} VERSION_LESS 4.0.0)
- set(CMAKE_OSX_DEPLOYMENT_TARGET 10.5)
-
# NOTE: To attempt an i386/PPC Universal build, add this on the configure line:
# -DCMAKE_OSX_ARCHITECTURES:STRING='i386;ppc'
# Build only for i386 by default, system default on MacOSX 10.6 is x86_64
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 66b5b4b3a..014a63461 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -1338,39 +1338,40 @@ if (OPENAL)
endif (OPENAL)
if (FMOD OR FMODEX)
- if(FMODEX)
- set(LLSTARTUP_COMPILE_FLAGS "${LLSTARTUP_COMPILE_FLAGS} -DLL_FMODEX")
- endif(FMODEX)
- if(FMOD)
+ if (FMODEX)
+ set(LLSTARTUP_COMPILE_FLAGS "${LLSTARTUP_COMPILE_FLAGS} -DLL_FMODEX")
+ endif (FMODEX)
+ if (FMOD)
set(LLSTARTUP_COMPILE_FLAGS "${LLSTARTUP_COMPILE_FLAGS} -DLL_FMOD")
- endif(FMOD)
+ endif (FMOD)
- if (NOT WINDOWS)
+ if (DARWIN)
set(fmodwrapper_SOURCE_FILES fmodwrapper.cpp)
add_library(fmodwrapper SHARED ${fmodwrapper_SOURCE_FILES})
- if(FMOD AND FMODEX)
- set(fmodwrapper_needed_LIBRARIES "${FMODEX_LIBRARY} ${FMOD_LIBRARY}")
- else(FMOD AND FMODEX)
- if(FMODEX)
- set(fmodwrapper_needed_LIBRARIES ${FMODEX_LIBRARY})
- endif(FMODEX)
- if(FMOD)
- set(fmodwrapper_needed_LIBRARIES "${FMOD_LIBRARY}")
- endif(FMOD)
- endif(FMOD AND FMODEX)
- if (DARWIN)
- list(APPEND fmodwrapper_needed_LIBRARIES ${CARBON_LIBRARY})
- set_target_properties(
- fmodwrapper
- PROPERTIES
- BUILD_WITH_INSTALL_RPATH 1
- INSTALL_NAME_DIR "@executable_path/../Resources"
- LINK_FLAGS "-unexported_symbols_list \"${CMAKE_CURRENT_SOURCE_DIR}/fmod_hidden_symbols.exp\""
- )
- endif (DARWIN)
+ if (FMODEX)
+ set(fmodwrapper_needed_LIBRARIES ${FMODEX_LIBRARY} ${CARBON_LIBRARY})
+ endif (FMODEX)
+ if (FMOD)
+ set(fmodwrapper_needed_LIBRARIES ${FMOD_LIBRARY} ${CARBON_LIBRARY})
+ endif (FMOD)
+ set_target_properties(
+ fmodwrapper
+ PROPERTIES
+ BUILD_WITH_INSTALL_RPATH 1
+ INSTALL_NAME_DIR "@executable_path/../Resources"
+ LINK_FLAGS "-unexported_symbols_list ${CMAKE_CURRENT_SOURCE_DIR}/fmod_hidden_symbols.exp"
+ )
set(FMODWRAPPER_LIBRARY fmodwrapper)
target_link_libraries(fmodwrapper ${fmodwrapper_needed_LIBRARIES})
- endif (NOT WINDOWS)
+ else (DARWIN)
+ # fmodwrapper unnecessary on linux or windows, for fmod and fmodex
+ if (FMODEX)
+ set(FMODWRAPPER_LIBRARY ${FMODEX_LIBRARY})
+ endif (FMODEX)
+ if (FMOD)
+ set(FMODWRAPPER_LIBRARY ${FMOD_LIBRARY})
+ endif (FMOD)
+ endif (DARWIN)
endif (FMOD OR FMODEX)
set_source_files_properties(llstartup.cpp PROPERTIES COMPILE_FLAGS "${LLSTARTUP_COMPILE_FLAGS}")
From 3250725aaec50444a1ef85a956291b224bcd3d3e Mon Sep 17 00:00:00 2001
From: Drake Arconis
Date: Tue, 21 Feb 2012 10:56:27 -0500
Subject: [PATCH 13/35] Annoying Crash Fix.
This fixes that thing where saving scripts in deleted object makes
viewer go FFFFFF.
---
indra/newview/llpreviewscript.cpp | 15 +++++++--------
1 file changed, 7 insertions(+), 8 deletions(-)
diff --git a/indra/newview/llpreviewscript.cpp b/indra/newview/llpreviewscript.cpp
index 6682a6e8c..b4b8ef4d2 100644
--- a/indra/newview/llpreviewscript.cpp
+++ b/indra/newview/llpreviewscript.cpp
@@ -2301,6 +2301,13 @@ void LLLiveLSLEditor::saveIfNeeded()
return;
}
+// [RLVa:KB] - Checked: 2010-11-25 (RLVa-1.2.2b) | Modified: RLVa-1.2.2b
+ if ( (rlv_handler_t::isEnabled()) && (gRlvAttachmentLocks.isLockedAttachment(object->getRootEdit())) )
+ {
+ return;
+ }
+// [/RLVa:KB]
+
// get the latest info about it. We used to be losing the script
// name on save, because the viewer object version of the item,
// and the editor version would get out of synch. Here's a good
@@ -2607,14 +2614,6 @@ void LLLiveLSLEditor::onSave(void* userdata, BOOL close_after_save)
{
LLLiveLSLEditor* self = (LLLiveLSLEditor*)userdata;
-// [RLVa:KB] - Checked: 2010-09-28 (RLVa-1.2.1f) | Modified: RLVa-1.0.5a
- const LLViewerObject* pObject = gObjectList.findObject(self->mObjectID);
- if ( (rlv_handler_t::isEnabled()) && (gRlvAttachmentLocks.isLockedAttachment(pObject->getRootEdit())) )
- {
- return;
- }
-// [/RLVa:KB]
-
self->mCloseAfterSave = close_after_save;
self->saveIfNeeded();
}
From edbc22961e197bed9c0840b3527736e9fbd89960 Mon Sep 17 00:00:00 2001
From: Drake Arconis
Date: Wed, 22 Feb 2012 05:49:38 -0500
Subject: [PATCH 14/35] Revert "Further OS X changes."
This reverts commit 803011582cb98435042cb534d44032977e33111c.
---
indra/cmake/Variables.cmake | 4 +--
indra/newview/CMakeLists.txt | 55 ++++++++++++++++++------------------
2 files changed, 29 insertions(+), 30 deletions(-)
diff --git a/indra/cmake/Variables.cmake b/indra/cmake/Variables.cmake
index 0428ae87d..964c9d684 100644
--- a/indra/cmake/Variables.cmake
+++ b/indra/cmake/Variables.cmake
@@ -78,15 +78,15 @@ if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
#SDK Compiler and Deployment targets for XCode
if (${XCODE_VERSION} VERSION_LESS 4.0.0)
- set(CMAKE_OSX_DEPLOYMENT_TARGET 10.5)
set(CMAKE_OSX_SYSROOT /Developer/SDKs/MacOSX10.5.sdk)
set(CMAKE_XCODE_ATTIBUTE_GCC_VERSION "4.2")
else (${XCODE_VERSION} VERSION_LESS 4.0.0)
- set(CMAKE_OSX_DEPLOYMENT_TARGET 10.6)
set(CMAKE_OSX_SYSROOT /Developer/SDKs/MacOSX10.6.sdk)
set(CMAKE_XCODE_ATTRIBUTE_GCC_VERSION "com.apple.compilers.llvmgcc42")
endif (${XCODE_VERSION} VERSION_LESS 4.0.0)
+ set(CMAKE_OSX_DEPLOYMENT_TARGET 10.5)
+
# NOTE: To attempt an i386/PPC Universal build, add this on the configure line:
# -DCMAKE_OSX_ARCHITECTURES:STRING='i386;ppc'
# Build only for i386 by default, system default on MacOSX 10.6 is x86_64
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 014a63461..66b5b4b3a 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -1338,40 +1338,39 @@ if (OPENAL)
endif (OPENAL)
if (FMOD OR FMODEX)
- if (FMODEX)
- set(LLSTARTUP_COMPILE_FLAGS "${LLSTARTUP_COMPILE_FLAGS} -DLL_FMODEX")
- endif (FMODEX)
- if (FMOD)
+ if(FMODEX)
+ set(LLSTARTUP_COMPILE_FLAGS "${LLSTARTUP_COMPILE_FLAGS} -DLL_FMODEX")
+ endif(FMODEX)
+ if(FMOD)
set(LLSTARTUP_COMPILE_FLAGS "${LLSTARTUP_COMPILE_FLAGS} -DLL_FMOD")
- endif (FMOD)
+ endif(FMOD)
- if (DARWIN)
+ if (NOT WINDOWS)
set(fmodwrapper_SOURCE_FILES fmodwrapper.cpp)
add_library(fmodwrapper SHARED ${fmodwrapper_SOURCE_FILES})
- if (FMODEX)
- set(fmodwrapper_needed_LIBRARIES ${FMODEX_LIBRARY} ${CARBON_LIBRARY})
- endif (FMODEX)
- if (FMOD)
- set(fmodwrapper_needed_LIBRARIES ${FMOD_LIBRARY} ${CARBON_LIBRARY})
- endif (FMOD)
- set_target_properties(
- fmodwrapper
- PROPERTIES
- BUILD_WITH_INSTALL_RPATH 1
- INSTALL_NAME_DIR "@executable_path/../Resources"
- LINK_FLAGS "-unexported_symbols_list ${CMAKE_CURRENT_SOURCE_DIR}/fmod_hidden_symbols.exp"
- )
+ if(FMOD AND FMODEX)
+ set(fmodwrapper_needed_LIBRARIES "${FMODEX_LIBRARY} ${FMOD_LIBRARY}")
+ else(FMOD AND FMODEX)
+ if(FMODEX)
+ set(fmodwrapper_needed_LIBRARIES ${FMODEX_LIBRARY})
+ endif(FMODEX)
+ if(FMOD)
+ set(fmodwrapper_needed_LIBRARIES "${FMOD_LIBRARY}")
+ endif(FMOD)
+ endif(FMOD AND FMODEX)
+ if (DARWIN)
+ list(APPEND fmodwrapper_needed_LIBRARIES ${CARBON_LIBRARY})
+ set_target_properties(
+ fmodwrapper
+ PROPERTIES
+ BUILD_WITH_INSTALL_RPATH 1
+ INSTALL_NAME_DIR "@executable_path/../Resources"
+ LINK_FLAGS "-unexported_symbols_list \"${CMAKE_CURRENT_SOURCE_DIR}/fmod_hidden_symbols.exp\""
+ )
+ endif (DARWIN)
set(FMODWRAPPER_LIBRARY fmodwrapper)
target_link_libraries(fmodwrapper ${fmodwrapper_needed_LIBRARIES})
- else (DARWIN)
- # fmodwrapper unnecessary on linux or windows, for fmod and fmodex
- if (FMODEX)
- set(FMODWRAPPER_LIBRARY ${FMODEX_LIBRARY})
- endif (FMODEX)
- if (FMOD)
- set(FMODWRAPPER_LIBRARY ${FMOD_LIBRARY})
- endif (FMOD)
- endif (DARWIN)
+ endif (NOT WINDOWS)
endif (FMOD OR FMODEX)
set_source_files_properties(llstartup.cpp PROPERTIES COMPILE_FLAGS "${LLSTARTUP_COMPILE_FLAGS}")
From e207f2e025cc8e71ca41b18e643adce18a0dd12d Mon Sep 17 00:00:00 2001
From: Siana Gearz
Date: Thu, 23 Feb 2012 02:29:59 +0100
Subject: [PATCH 15/35] Fix scroll buttons on dark skin
---
indra/newview/skins/dark/textures/preview.png | Bin 16592 -> 19933 bytes
.../textures/scrollbutton_up_out_blue.tga | Bin 0 -> 929 bytes
2 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 indra/newview/skins/dark/textures/scrollbutton_up_out_blue.tga
diff --git a/indra/newview/skins/dark/textures/preview.png b/indra/newview/skins/dark/textures/preview.png
index 2cac82923b8ba4f30612138d1c3dbc7fe82e91c2..a9f2b8b0277ae14b8facfae422bbdfe4e7485a73 100644
GIT binary patch
literal 19933
zcmXtg2RzmP_rJ_5BV=5ojIJ#%8JFypD_aR6Dl16kNl5l4
zd;N~@|MBnh=tH->?|Zyn=RDWB&-HX}P@QKvPe4FGh1F0sARss=0N)2A2;u+!mUO!C
z<=kU~8_EPFKiC%F52W{R-cThtJ^SxneO^4gLhho>DomB&wsi~-eZ5@hjKtx7e<(JgQNCN_oOa!7b!TO4
zx_pR-SHLw8!DQ!_rt
zqxk8bqbV;wSM`t?-*@>^yp+)S1)mY`H~U(xid&?_+67kNH*Qoo
zFuj4|<$Zwk6ipn||FYC-H8m&^@pN{mPV6(4vthywd2$XXBi2dYD6V!l)8d3_Om=U+
z|3ed_(jh4wk&bc>gy{n=PAf|7i#T@9nJ>55)q7ruO3?AwbHucNJfX(se|4LEeF;a?
ze$XutJtagi>HbMopOTmm8NT2l6KiVok>Q8C8jbO^#5#>w@34)ex<}_vIcK>*)M=kBui*3XDsUayi)^y4P){q1KEp
z+L)*gR-i%HiL+#Mdtp28bgNL{oEH0pI>bnyQ<27y)*pz{AUNJnVt$khVQ~mf914qj
zXp+E0%t>Pz;*V2gj1IFl(WkGs5K+@7R)WKz^|-Nrd@S<%l(H8+4)h`i7CbWbH1hf?
zgl_7;=0F59zZam72zgmEQ41W$}5lwz~x>2G02ib2+GRs_6^gn*OF)$f9d>
zzv7lp&x4vPp*^e<12u+E`qNVX_LZlS5YQ-J&~9il>1#!a28ydg4BJ~NucV7szpEVj1Q8r+cl{4WO&^`A
zTxqVaNvzb9LTCLVlaKB>Cnp^u0x$WL>&LuCXnZZ#mcKWvl9=zK&qnI>OLdd8T_%&n
z<%)&6mjY*9@*DLIgN_alicwfsE6Eh{U>f47%?^>%c7+qGnz88U=sP853%iGE`dS(q
zNEr`1b@lM}>HWX)y09Cr#L0?18WalE^Yq;L`z=1hckzQI8soROURd&36ZihobDe*uDRVFi5fI_Uz-^3j#}5YIkIjH{tekZu`F^
zNjB=}EWZ1ujYBgf{FWi|Y7H+{in1zqCX$4{*@y=a(Q%_R=SvEE&F{dfo(RNseKh$|
z?WoB|k3;bzDXCc{9p`?e8RlwPnN$ayo(OfQbG@3vM=;UTYo*CNX^mod^X5&nB@O4_
zZD0J9D<6IEql%HEn#SXmH+L-F%01m_4k1&?)I-sI+WK*QcV$ewfh&a6p6}Lz{MC+;Z&0(*l-E6%hrhoOym;|qjmyO4
z^I`t`Gl>zGefek*unMegZAHv#^>FW_qRyx3@OFq*MiwXxe7aZXx#GF{i_nV1ty1V20R{9n^{&V*FWX2hL<@m%E^=I4n
zSV^ZT)uNP_m$!X|iX}#!-!YRf#;CB$RA^;1r+;7oi~D=Qohx^@ZalaNU)AL-HUEUJ
zMLVse$t{?(Rj;YI_q!RN>f*(|(YK#yn5ZK{n&0tpp1U^eBw07UxIq$Qb1i3hAmefR
z5D_`stFLca$a1r2B^)2_W|+78?oCBlRXbLU&?pCUR6ZK|
zF}Ed3nO$;W->+eL*^v_Oo$j*9t&_J^x7JX1xLUW?czVJfaO5`K7W3i52SjGgZ(j;^
zElRu=&&4k>)+3dbP>@78_o_aSJSeX$CmDNpj0o17>tbtvo)u}8gu<$-r2Q19+Ww6Z
ziJdM-eJ|JQOV&VT_1gKQ^O7s;)9cgmCsRk@(G2=GMqDv3Xn3%6K~{)N^ir&9K@};h
zjpl06-PdyLRoGPx>8tZZ>NC
z-=4WGZWM|*M9I!1RF8uu@b>xjpklL6?)#fFA!HXCVB-YrO_8lH$)4;@Ta+>#gcuc)
z9JbntmkT}pZ8njpNm1Rkha%TXu-1G)eM7lCtH-pE>p4p}
zy;i1sNm{womt?%_ElP)$HoOmZR_d(q;i;)?Pd0t9O>1T~mSdIdv7DTL#ggc-0?=pW
zTgrc%*73h-(;#f$CM8m$@vTp9atmpuSwE~~xf(PrQ_R@z7R>R!Y{(KT`PK=EQ$8^@
z&Bmi&FcFa&(kY<~9Rn%)vA96~SE2no8v0zEaYE`IHdnHH=erm~ByLao1Z|-yv-zT$
z21YL$^2@N|Y3Nk^hIMi8**2JQ*QdOr{)?bbeJ}jWHF`QSlScW!{-b0`l}x+GT3v)v
z6Nj|iZ)uh7rgZHL8gnZuv3ALlEHMbq!hxu1Ozboz-tS-UjqDq7s}qd@SnRhfwP;FG
z6%5sI>NxyFHs9iOoPz&k5ETh3Hq+J=U#ko`YJpsO#mY18+S^!&`Eiuq?mPabAdis~PO^bKn8cAR5AD=*Nfn@^-
zXKro|&!$S>3c&dyvA(J4!D3OLUWtc<4*tOXtJ>`98z2gd7&ah9g)5yx0nE*#1VNm{Fh
zFcD%jZWvnHcKA(U{aFw7nd_4IEC29^ww-j3=Za!WJS
z*<+WGW`bf$mw4+Dn~E^})cg1EZ>k)o9Wpv@wGidk4NG%k3ogkWu(bWKBcr7B7ZnK=
zN8h-C5Tzt?B0nZdF4(9x2)sZ2$DDHOY0MAra^W7)9EQbwQhSfKif=7x+=R^vJ`OrM
z`p=&~|9Ej*U8>9GnxgRMt8{d9EW5;YQpeoE
zSNuJr&pVfnj*=y4g}vKezZmRUS!}j_l`~&=b;DQQ3-|KLKxgT0i^bx#bGPGPKDm9j
zA_*tsO(eSmEu>90I%A>^^|L$edQEw``|7Vx3P?W42svY7Kma%XUx5*0k9a?4i;z@e=AbU%-Dg;^Hk}7fkxu)3@}r
z!C+!WH1u^}PZmcge^fA9Li@OIkzFO$P{h7zo}aCaZAC9jGf)DhM-$Ge_FTX;`ybT=
zi5Hqu;)v~iWjUR&=ai2;{rP55`s7^u5P;tV^HgLs5(B_
zKKv6ca>BN5__4-zH$9p;D9^r8BecDT|F8HztsK$Kte1>2?FS)z>&En%2HW4r(%u*CWqrq{#4c!1%uFR8Zx+-Lvu>=C-+*k
z0X;X8(jwq^n~0P$Fm4R+Q^T`5qr#Pm#?#H24(Zs!!a~D+9>v3RM+w5_2fX;p%JcWt
zC;9iDBN?e5Z|AF=H+b2;WF6v&Mn4f{fnf%V$+p;+sw?dW(-zrpbIr8J#|Ey
z&K#V$O6JQEM{3d#9LkN2EP7eCJ30#?bXm5$u#P2g6#r0+Kgu1OYU+I&vg^4v8e)ae
z%9pF#B_tG)S;;FA!y?<?$L)^OZ6U#L$5
zS;A#xz|u|-xp#8Co?}isIEbTV@l@ZOYOVrV+*|puvX_qfaY2;(=Tv+Im9CDa@8Uv0
zgt0IHA|xe?HfiY)@49j%1v4dSa#p2GTKCcwM9YE)3zfQXrO6+YHanKbKH?v5pazv(n_6>XS$)sVOfvhHBv`ajEn`Iqb{*GPLbvT=42Ja^k`3|A
z+-@|pFGjnUwpWKgPAi=5>snb&H9R}4b{uJOW6Kv?FXsrgym^qXpKVlR{PFSJj~{8*
zcb7*D_35#=Rlu)zEPQ76Hl{;JsTTV`^uc))8!cT>IGWtr|Dki}G*-QmX*+?nCe%Qr
zMX-2pgfY=7pOXyaqzq|u3cTlFB#e=v*CLr=cUj{@#M2J4+}#!5b2CGVzvYW+wp?#x
zb@7`WvGtR0)G77)WNs7xAvd@BPIo#!oGQ=m`-*!&`M>zl5ab1jv3SPhtK<_
z&?#LA{wa-6l*T-pUnrB>2CRrF*RT3>^CJ~=<6aZm*Islim>o^sPweyApE1vsmwD2%
zM}F+GG*Nh`6yRM5MTG9-rNCS{>j{BRm##~c1V7-7eL$tYm_guAtfWUT5pZ(k(s*3$
zwf4Ja!vATWPTFt(!xcL}<;ScsZGZp%1!e0#l9cQrt+GvpG$*Ik=HG9a*m%@_he#uI
zF&Y6rzOoU=#p>?rsOg#*fm3czncMgKkM5GFcn~i4dyrV6r{gx6-jUuJ<+oJ~*?G{s
z^R7-9DGk)uaCnqK
za2;1fMAm}HRvVXo)XjFLO}k=*7&`!p(OtYa;XNG#ey|L)w%Bvs2YFAE?XqDbB66A=*+5)$I$+k?|&Sh2Hr^?2Z_
zPK-x`Hg{Pm@Z9`|ymXv3vyOXn97xaIvPG}N6}lQQ>7SgnRy!Tb+-IwmAwT|5Y-DBU
zp65vx-}mmZfXk8|#(ZCU>7`wMf4N;~RBTay(9}$1zw)!iZ0~i(McK4Gwp>edcY8jw
z=Uzb>zjWk-TO9Z34MdR(BKEIPj3KJ3jNvFr<*Q|#i1&xu{eP{xb|ssVnXxJ
z9@3!i7#T4>1jbDrF2#SV4v`e(S&=ON*(_G5
zdb72cG_D?4qW8{3834b~ohVfVdns^9GU*TUQmZ0wHeJ9-)YH`xm9zcT@o@@lTf*J*
z=0I?PgfU!ZMRjp)k%WS=NBj~cDU|)yFIzuUBB(h-wRqxDSa!elW|a$asE%^{lp+F1
z?7HkJK(1I;Dd+XcX88=4fr8ue85fS7!#B4UHposjIglU-(o^DfmDc~5dpDuAwsi$G
zXo;;>Myr71r^r369-IEw`5!c(EIyz!ps+b~BwT%V@b6nkhYC^{%cZPAr$+D|R8+om
zI+pLMMjW3!dEzxbFxQi*a=t}CP;iPnrN(h#tVX1Et!1h#i$kAY6|0Q+hC{6%fgojK
zWW>|qe%m?+KQ-T%*PW}K!V%4J-ZRbVj3?!4vjP%I5`FO7XYP`I|0Jg5>%pyTxsr8G
z#}~_tY8m;etY+J9)_HsUd392~Pxj}g{u8^UasPhS&{CTGGZ{xe=4&>TN;Ew2_JCy~
zs4o!)P-1a1X+P}58R_Yd4ku2H=t=gjsOpFQOEi)zbEGk}yxZC;_^>~pKLT%6g};xK
zgc=B^@eFvL;`HwK!qV4o668*gw)*mPGtgGS9W%aDtxPlq8aQQyK0V3#m@ExDfv7Ak
z9z!%TRrGq=^MMyA9NOo)an(oQcH*7qQOj^m=KgO@$$kQIHu+_D&NN-;{KC0-JbQ<+r
zo_|H!-SNSCPyH_OBsFhp!!p?^ZK&S|d>jf}Z*ie>J%394TI{rBO4r<0^D9qa6!ak=
z3JY}*etO4&Fe+rgm;L?wFu|HZt=Y{iug?mZo7?z$wyB)1&T#Qh{K1xgob2X**Gm0s
zkB+6OY~W1qn=t0H1tyaKCr7CWMO!6haj>;pR?rENs{7=zR3};@_z^tE7#&Nb0livb
zAD0O^@SEuTrMW-O7^{~CyuB5@it
z#0E529FlQGMW22E;ba#zKVtdd?Pe$I;|w+m*784d$HMv})lPSzA=$`^${oxum39g8
z@zr|2(8a8IC2ug#Vur7gk6&zeWsc{@s%y}yy+Uc2Okr^}Y9Jk9+cbhFeJeZ
zI0iL(@2E@$6I$Y+Tz;f4nlj#+T>Xy*CYU}H#H!~6=Lp-cOd+D&j|KH_x?*B)aLFno
z@UA8}%K&DbNd!N7P8C6m;e1Y~MB_jZqP~PKz8oX`Z2FpTnU*{4s+%zWF&s=XJYh@xBkubcyi@nk`Wt*$jv+#>3xI8=&v(B)AKV}_P8AvJH1X9w>ewu
zRLz8mk7i}v0=~%np-ZG7XtZmnz*G$92-CiwdX@Xz>jh2tG;!?8=pKXeeE8T}YwJ6<
zoz|OA-0T}`k9^7^ST8v47ktYbYdBo4o|^t=6JJ<;^z-UKM);*{s*U46rW^NfPW<&z
zxNJ}DxbFbOB!=Dm_ouDi>Gm`6=a=A`^T8@bq_ZHFuA`hLuFDclAbrH%&`zQ$@p!Ov
zmhQ`5OSGOq=t~r~tdHtE>EU>mlpp@pA7DM8&Hwose$UMO=o|5lx>Vbuw$v}0#~B=v
zI%zU7Y|=Q6$gf|&78D2sb0l27n|rxF#%3chy22tU$Uv!6J@j?>*?0
z-o2Y#$jgv?tL4(LKMRHe@Zjz(nKWv`X=1{l<>h7Iq-^a#EEX3RVQ-5wkSNipXMdDP
z3Pok=A$Ej5yu)X)-(a95^w&z4H32<>lJre36({j^ef}tAs`m!6-8Z;sBP)q$y?>Ov
zblYp4**zb05s_J5zBy;x<$DrRwNOb^CUtl$k-s`=&rjZBiT0LFpT7<)Ar0ep-`~GM
zJsTA1b~n%_~iv{QXaEus?h69CJPbzdI2SP~$xQ(ByZu(-W08o|Rz&sD@sUiZ=2hBf#1`XMkt%9#fB$=BbQwQheR8wMf03Ev_L5asMX^?j
zBvlrLJKGR|BQkbB8XZg3Aw@p=&3!*;NoUL$EELY2$q@!IXTK8$5@q9r#Kd?Md5F}W
zz%39Xq51MfF*7sU`i*Iatd5mCOS7Km3_X!{I9Sx3mD~6p;W*Pg*v0zMt~mcdI*ZyR
zO?Dl3+dIyHsq)uEj^6EdR_G
z1j4h$I_6yGw6i>7YyKbR=p>79-XMtVGi_NOm!7t3I3qWCs2<-}uFxVB%jw$bX6zN)
zsr*~FGny?mZr&uyi0E5*k()&jGhX0tbWfnfpGZC_Lx4f`nm=uf`UA<7Oj1`iK&IVY
zU1|vXD$_j+gjI2`o&UiCZ$`J&gEmT&gmLHH5r$2|CJ~!A&$IGtd%aKkh;m%MI5sYAjh4c=rt7
z7@AFQS!mL}$J;|&TU!(q6xYPW*r;!aGqiqwvh@A?che{DC4&FyZ-F1e0>lwzVn=+J@CXium%ne1wtL~h`Nh3@C})}y2mynN3(RD
zC*5SN?Yb3e9pAs-k|Ez_`J0nyK^Uiylua7KnH&|2!Ww@##ouHwN4?YWgX^$Lp$NC)
ziGMz~ztETWNSsB9Cib%2`G?H1-73Qe@cwN60Z;hhE{lk;OF6Sqo=&&N-K%xY6zUK?
zH*)u-Ym>bgOZwBC5xih)`vpd(BgSHfBBMf0UfO3)k|{xk9hPVf9B~>ZJSyuA@71we
z1xZ|IDDdKI)zYDk@}j;4_}90FqN1%e)kM`t^Hv~r>0aP?8w)9W7dWex)cpkHDt
zO&1o|509N|4yPj6Nz<~UMjZV?^adrnd#=vz(!85A@90`n5Yf=RfM@VLnS{+S9`kx{
zqGZ+Wl4DI?l$#cR`}XZ>sa`8Li+^A}&w}_>#tzUp$}O9NVGo$DKN5QT_HDP^uGyL7
ze(CzougBd3gM*$cqffr!xOd0BGR9UcDr~y0b<0lg9&+Y4Nlo}wcyIjCRX7&6=(Vk^
z61#RSQOJa_GnGonCF=7IECuifO)-&r#>U9fwrI1+BN}2Xu56cN@PJr}
z;G{L7irxFsA9sHH#-w=uU=DGMMg#IGSpH{qari+TD8Eoo>p=#8>E9eok`Zv?19#>|
z+-0hf0il>X^?#OvL>C}A;%1iJ3yB3w!EiG9q<)wP7lv-vRVb?DD^D`Md4+v1CkY
zA1qgNTQU(UYh?Fo;OG&=Y}66s&T&hhE7A`^=?=HDWF=GW4GfcaZQ=-Rin&}`*eHBt
zCd{Nf4=kdjq$Kw8_}b?s;bNn^`ud_)Eur9vwiZ@tw`_eGTI%ZTB<`mrrj^?bVerul
z=^eP7*vNJSJ2w^_d8qOY$2()b_3~0uUci;%AztLsO1fsNqpjTqd|lFU*!Ay!w8MCC
z|3TP#wBvB}CI^fYD9~La`Jy|EFF95INbE3$u`8c3;$(?Og8&B1gooPM1HRaHr^5zg
zVqgH;K+ahS?qtB};lu^`y-84aF0f(B97oE-D46^=zwvHFIV-ulyE``?d)6A!hh-u4
z>HB+Lp|JMilxl{TYpz?|2~gXcnVB(v+$Aw75O`I;S2x3N6T9sTW!9B5>b_QaZKY6D
zFea9Q_$VfZ1k45_R&D*p4D=K2c)|eo;G;S^C@@CpWKG_UD|l!
z`{(QPqyPPa^0Zzw!8qja_NfW?_RY%fA(y_}X!2_f)bj2j$4}p-kGqhPkUv_-11kHk
ztIOI%QckXZdt}A)se^+9itc&C+3vh7=lc(~>PWe@)VPPC_-(DuB)V+N6u+^1=7-!j
z$Q>|iL+|yvG-Qw0v@()$->YNE32`4{2B0A(^uZ#ZJ}a|e7t$yL^U5zO3O&4{{$jY?
z`X-%64=AAU53dxf$6kqR}Qki=M1
z^SfZ_m!BX903!ybsFK~gJXUkT)xA$!s;aYj`^WV)$KPM};U9Tm*q|t|Df1~P1ONv<
z{~ooAB<3lp!7<9vbH9KyK$X%6@xsU~6uOJ^$JEz#S>a;U3_J;Cr^FV5l3TO^?%}
zYYvY6LtpCTg>=zrKU?{*RzDTa+7`zS7d^((fVT^Z(R(ylbk5=mCBD-1>REW`U3Imj
zsA%t{dm_(SGXj*PeKy|@Ev<~ztT7wr=H?2U)w%*fA2Rp4q;+H}qLX)#)1&>8*T2>A
zI@k&T9A_}poZ{|(HPUqM7#ZzA327bUqHb(Vjm)ZrIthCvB!WjmqUzC5iFPhHbR3AR
z{CtfB>p(&DR%I4*d{mDl%G<7&0T8*oH&ZpNVPp|9(E(9UrQH
zx@**MmAbJu)l1rTicB6>Mr$2Bkx9IR}3zM~bk-8}Kf2TP>@Vn$lRD7==3X`idY
zMqwgY1c?dy#qPkJdoh=;SBJU0m2@&4Dly+(n>d9)m#wumXQ<7OR3BLSRIHM0Pz<4w
zr(Cn8?isJ1bqXj>h@&o&hHlf@*@>Z@^wF89SsM^yb+itFpht+VHMAi}!hozAb}=<9
zENo-TpXt*J770x`=Oy<~1%-uopZpe~PI;W%P~7YVtnyErt=S3sL&*pGoIg=ZHJGD6
zn`Adl?4N&oXoJ-5_=Z$}Aog~8VA~eA_jw|WDSb|qa%5Rj*yD$;>{o8M0pgrUWz%9X
zOjE~w8lm9*_8fECaCm_i5q3%?nB0Sf<|jYFY?$0NyHrwF@+nUg<>~eu{?M3@G?ySc@e|`V
zE#Ad_B1dR@#VlFxQ
zlvl*0T$NreyLUMCnLjx>F%dN}VX+lgJGygjOFHcb=1BNFIcW$c_H<6+)Mq|3f~6fv
zK};CUc(r`QF;g%9)9kHM33}xyuBbn)r-l4cn}^3xcj7gb`!qN9{a$H6Svmu|l`OVf
zzeafem#+&`&YbtoMqi6q@V$SZt9z^QXpHMmh%0N-u1s{^GA#m!Vru!Bg!CE_VSm`ZS#yXfC1;+M14HrfYL7l4mGvzK!~Fz1^gy{A|OY}2H|Mmq@|gu>QdmU1?mE?bVu
zLdLY6?w+1ZfE32Tb4v@k$Rmidp&R3Q8JVTg_wUSfg7m=rW`4X?axR3eNJEOB(-T++
z5`KmA>}2zhxum8)GBQGmKUxbo1xbxk*$xUnz$B<47m1aq(1R>1WEL?RsQVQoxms@x
z?%V;NA&U=6lKsfkx%!J-#!By~YwZkOxf85?(gAuLLc<1}l%h4g;r)(DjPd~*X`Dd9
z(yGYOQ(}I-*0XM0@9Mz7fKA2QT>HsDLS=yA$)Tadkjn6oX%>2jY;&&ZC|`E}X`o9CjMzD>o*^adgrjGCrd
zdbN+=*75(_ahtNGe+sJBqce8vkbe$oiIw!}@o0KA09uRN2dBqt0m$$t5T3YtmC8VQ
z@@{{>Ph%3#ohtT@a>bDA_CHZ|MAwMpXy1W7DPYm9{`@ffyPSj7n9A|t_<+O=lFN;CwL
zXzU|gmpt8b2y}gD4e!xel+~=~L1cki3({&wN5|4&@m;X4%B?$u8;{&Ab?;W%^+I~h
zNph^X=C@{FW&5;AmBX8{6-MGrC}ZHu_AGdSjX2?dcr|wVOc|B+aW^#`eZhR~vd>@I
z1nV2IY$G2GdDZk`J5yhlHNJg&p!jYLXd!Q`k`y`Cp{4>vGWVHz1BT9ZB^n6{3B78b
z8;Z%fKxepKX$Z#XN@$xMnhUkrdU$tr2-g+CyLN>Q$;R)fEdCOqdrsg%6clJwSX@x>
zb7>m@MD6};ihc5qZ#}G(4<#kDK7j4+tdzoK^(}3mp*s-1-Q738KEIf!^_C0K0zNIE
zn|!|SfE*wtbj!lxH#CqGmj;vU-o4`!Anq9$w?ELV*)XmgAlOk*4PIkq8eZ^F=c474
z?B!U82-LPI4i$mV>|1C6t22gG>PNcVVVc)(X}3RLA3=+rI6c|@*nar|au!}Rsdb%#
z9ut0MtF6?4^LL2I1h+!?Uc=FUudYCTEl80-T`>ZGPP22xbMEioz`yej@s^>^f_P+
zo>h&xIXN?Pa~GJ!P@fwm?_6GImb5KUE0qb}6yoOx>qFjDi1D4y3so+Adwa%cYd9oJ
zj16o@SQ!XnLdXq}lam8kfs%_uL7b$C)UVXx65LpjurFa;C*e831yc?IY{8+(JH>&s
zf^P>j$+WmSjB3LHt=`Z0CwTAI8W&DM@=NZ|vULI5V}{^fc6mQzaFJ0c
z$MMg%3kQ@_A8b>_@J1AzhHxNa)UR}ib?)*-oexu<^aYYA>W>D8s
zx+GJm7O6VD|4VuG%1Z3*k-tK|(10&5)_}g%Hr*!|Pz)fU@xXILC!pyoCqvCn=0Jp7
z0hIES(C%AUSXhriVI9PidFEE+GfF=u@~!%QB38w{C%?#3$@7OvyAQO?>l7;yG(YXc
zed{l~<_tJA2bB;K92i08`8Q;DiDZba{dno#>EdAV7?sp7=nH`$E-04-z>642PLqtX
zN(cp?TTU^22EA(q*g-t%8=8{u2sY6&+;&(3o4)mnrWD4+i^~+we=t9`zO+v-fKdxd
z(wR{PHkwJXQBv#<7>Z?OWgt;NEeeEOv{hY^PF{tvP>`Y}IK{$=kH8l}WV&LOJ!D+!
zR;nQ~_1h9XyyBVI!GItxsr?fL$t%chZjU{1NXg1~#ZXpz2v%h{*g(h9Z(0L)`j$eQ
zWAGjBHte9#QSvCWjW|p5Gt;|wmptp9ZZEz`O!NYGj7{DT>0!=6GY^#>V1YJ|A*6^K
zoW)r_YhP}hnlgF=1Hb|ej80h7n){q+e#w`Na|<`kghfuZrOt81kv6aQq$
z{00uJC@4q0OWWl_B6q7DzedtRy`>6M26q=y8(VOYb5nh6)MP~?Uok(M9^W-E__KRx
zpX@C7h*1)LFlj>~HX_EAZ4K%Kd)7X`tMpOxm4%dOp~itlpY%lQec=A-
zl1?l_1g{ekKzn|H6a@jOapJU@jNKC1R_+K61uzJCN<6UCC`PY6&^H
zXV8OTZ9*x0&!?F%0~(dEf&x1y5I^E*7kJ*VF(H2WWx2d#6(SyL`k+34_FR#9(Dnl0
z9&+Fgl%P9z$Q-`TZ9y4~o%2zmf%kz5RcTtx7iIa>3z|FN6ZL^gmx&WtgRW_B-c$vg
z`a{G9K{)vd)C1Y>xtSRlInbvE!5dkalas?3-MZp=jWRwpwTSP05nq$9d8tJ`U({%0
zfC3&3ITV@D*8AYDmNi>W`uv{TvacEiVgA=IvnQm~zA4kS05@yLS0%05S3HOM`@goV
z38_zbA5h@rS^RqwF0)UO-pgV2EOs({CD9lhx=OKRK3RhCTt?#2S$xU?EBznhIS>$N
zflMq81!^c_|;Q3~_
z8wIcUJIcG~1O){RYiNi=nw`f#Tie(`lusZEbZ&=7kGQc}_AJ%sKu*cZ$`UN8Rjwyc
z(XXctQ!WeE#XU4NWwFb%L>rr%$5v8z=
zTr4I3D#5*5Qz}TC9)m<{7%Ym2mg9`ANv;&)_4rZ#U%7$a>P2o7CBEweNtS~gp@f{7
z?|$)qiwfr{H;hrgG()Z$C2))h7Zsn{xp6XhmAQTCy0x*Mg)!XYklxj&u8Wq)LEpyK
z)+>`pqUle?HoQ$D^1Fu>wil>hQMJ&?eqg=J4hB1R1q`
zi3{R?-Gr=O8bUu(*%E8bIHs>%p5_#G`(#PyRsVHHoO!V7s9HzD$O&b^FsC8Qwxy!<
zJ*)V$@815gKW0Cm`KCHes6}anM33DkZ_T~A_<0$250jZR^Nz;vx_djW!O=N?-fTrg
zn~P93wD{P@ZGLG9J$~c)b8Xl5;lqEBgO=8b-QtHZ0qByT4fP^I=^#V&2HNe$&LO^a
z!DDu2Mk#G~>DJbEW@y~*`;t$mieGGgygGVdB0{MmXHb7AxB{-g8Ddy*W%}}vF**mj
zD6IA9aDbtZN6KlotVL>if5a*&DP_n%o76ZQc@8gaeizLA(Wmt*d191k$J4gt#ho>F
z;b$GIW{*#UMDKZB8YyPvRE3!qC>gAuS+|C(o=dFkMh`7%1Bek7g-i~tW2o<>{5}=T9
z-2Rp&n93-7)MSE9(g10(aA0&WWY;0UVbdn{UOhJGice#OJBzJLte&`VK+(&07Q{*~
zQQzjax&pSk=Gz}N9_m=j$I)hV-?@DonkrzkMhIFW8eqBx6!*e{f-}blGU!mys-1J3
z+&LoXEdJi+M<~P212xRrnww1oqp*1>nCF&uYP~QaLU7a+81zy`G;ZqOjcG?UH8qeC
z@By}u
zt#r{=XIxi%oti4^{`Wr^Whi_z$kDw8Wd{y$RLRyg9IbjyEz3pH
zs(f4y)Gc2B`ST~Z9zTB?Y%8v_i;+Y&U_wNdQ>hj5uhWF~
zBnsXktTRF*9e*PDg@sok=y1vFSLV>tZJqz-Rk~dF7NIep6?&LIgaFgB=i%Cs&()Vq
z&{%86o^?qK9j&+o00_v`o1e=F5Ec+{;JkU)EyvwlGB%L8SVcMWW&89LrsU1NtB7E5
z{y^6P%s;T{;&_hSHgRKla?V30j!imCj6?YxVNer5O;YnP)HjH7KsGwRlR|)uw%rXb
z*T0e7&hmwNHe|j{iz)H16BF}tbB$o&%+|K%2_@h&=n%mi1dlTxb2^Bw{dt3
zduPbv>DBHnaqYsd;l1Ou`9a?4yjXY+uPB&=9b*@3-;7=mDETBr9gz)sB@pGUF_%VQ
zh+yR0U~5;?hoQacT2~C%95A!cZ0Y*R4E*%lw;}SPC{AhFf9_`x5Bs^&M>aM#uuPPd
zmCen~eSLl1+(fne0PlYJ^8fM<0}jmLAM*1dDJBK55-sAzaXAyvjM?fzc0{VfXH+S&>Uy0cM|zMnrIngC@6C<81elrPG+
z-hXd>3ZR`oiq3w?1@g%N6QJ$W5}(7DfkXlA{--!xPFhk@zI$5`3vuwZxOO6^e}^{;
zk^O1`j#rQRCqKA)r_cG+j9r=zc`kVaLP!wbzctEil5p;$0Q=>#^$Hcme>ai7}
z4#`;GfrC#O1#eSsae(r8uhC!dPKhiuX3I`T$wR*e0I`n1hCJ))Yiqq>zDzi=5b)~m
z@26|P<4PJ17C}XUtOjVqfV7^$4FIXuWmO-z0U)4*e|@?g<*9GpY|m%M{YVm>F7FU#
zg_PXE_7Z5wHX+SraI80icXn3CpMs(aX_=xAA7J~P`wY3gLzpN5Vtv>7Qx1T9STeyJ
z%Rs6C2}3DmlXgcb+kqc)=FikPo7>pTLKd_eqKRNRz!4#>G^;bCK1R}YoBCxbNGJ)#
zacv_HCdmpYYxB8#+LzT0LS_8*gvtuy2_M_RK?1Qv+|N_|6?|?EkyjcTX*l?)W2n7!mLO1NIbc}
z|JJtU_4$uyQnmJ#BV#2Rzz$H6SSsoN3?G3c3ItpyFMb+RZ*kAS076TU+yBgxoSUX&
zi$>C`>1X%8M1e@dd_Ih2DXvY!FuS=GW!KEeefz0-=}?7`VAOq>M5f49pzI7%RK%h5
zQkqD~)``SnaN*&&f1?7DGWY%a{=va&I)81Q%ce3*+0yVmI3lyN_
z+%q5!WD;P!3nU8fff@{_1v8)byr;r|a1gER!&K5)0v(Jr2uz&?PtSsF%r^>W1$b!?
zpkn*&Z=T& f8IYOFTKAsnG#(0qcW1k%PKn6fYuns@&EdCNKZJ%3nQ6a}>IkvVu7xAregVBttzLFnDy|Lgk1fD8z6VvwQ!|_fD78ttunBG86(JHnucW+WqYt
zGukq+%SQ0(Rr7k^C$RNk`WO@h2o?9iQg57Sbf5VS8s0j;;-o%Ob=mVNhK>yDc0*ZN4OAF?3&U72;$2M?;v!E&dg2FFXJQZn(6^IHzKR6Ltx*77|eb$dS
z{^;(8$)W(LTGrM%1@RAh!m?`L_uG9H<#0R~l()SNrU;PpYS|SY1Q#1MMKFOnkV>~t
zW;zhW_E3k7Lmk&Xz3m(H`RJEE`G4hMcZ&1&zl0c}0Iuw;<
ztgjC=RXX+%e8p;)iB%7o3zuYw?>R`OOv%Z1vr>k`Spq(R9Rw`NAN_Aeswn4@i`fQZqOpFsN|mAwixMDg^O=r!7WCS
z4v(D%H}9I)s#$1HDEY-RC24eY6eeJupt6A50OvQG;^K*6dw0CKwFTOh!L3{Wz|$C?
z+xlP~B0v~oWX<@-8nj3@S#R`}E7{tY{vkonV<
zs&}_mf#gHjRSs-9;PU~eCt#vwcgz?x-gKaO3fD(^ri<4l2S5N$zg
z!9sIz5FoxtY#>l(3Ztj>uJ1IOg=N69hczMCn1$_Q&(BT1>m7Gt%t8GVRIR?
zm=Y{afl@_QUf-gh1(i>+zvEEJc<0+|AjFN*UQyRdLTBdZ|F__AK6w4)aP4}U4!W$$
z)Csx*JQL_0?>O10+YNQ)Bw%zK0MMD_1_{-LpE>Pu?0NPqj4_b={`OD|NeR+c&w`ZG
zsQ8n`TX}utJAXk&=ydx9@+r)sZhZbMV|gyD>>~R6B<2Ljm*cNm+JYfVG<V$L-
z`nr_F?j!Can4^G7x!Q2(Y)3wMGv*_5p!79rVX`>{pv3k~ymqpILuJ~mnFzE`0QRt>
z!h#3}(X`5n38S#V7|;#@QIZ}5ri|1q14Gon%i8Xo5VqkyWX;jX{5`~pp{}`LH6B-i9*n=%Y}fMBPqi{ZJ_p>
z1kwx_0F{`81pHH>mneQg!ABs^oW_Z#1vKlp^GoE!ppXk3Zxb}h~jdVEI`AXw2IOGu0
z%>be4HdGCFiMo?HTaa4E{rR`%!A$hkNtFy>=xs&e(w+6C!zw7
z@dpXRX|!|vAtIV_FT_51&`um=lx-MvFu#5KOx}-FH8C?YgYU0Jo&7a|i(WMDL~=(s{H2btt(+FpZJ1p#m9L2FPRK;Cw0H?jz0Dx&5Un|3!rY9Y_QoP~9QIKs2CEo6QR
z{i`$W`km}vn1MwEaUqnUC_%Hyz72_fSce52WR=da0e(44^$`2-jM$#dF@_F>iZcDT
z2t`<#Pg)x4%0pXQm44xT;&3bDgs%Vo3#mPoji@ZDdE9z0DyWv#c;^(Bem^U=!
zKBMANH#Ib1vqOsm3*&!iNRX<5T=E?RR|rq}DJ7kfJ0yH6!svKVsG@s~AT-Lt%u3V9
z7pTeLFu;n@N)}(pI6bn}*Y7>r-*S><-7AHgJjn%yrL2&NHPngDnEEEPr&Hm9o}
zT4o!PF$t%34>68W*_0B~tX88Bojx#@$s3v3JN^Iu@t*hnJ-_GP``r7ODx~*xgC#Hr
z#I7@|C5?^0d1XQ=96`d-l8g}65ADcx#%^=L3wuHhCg_ppUY<
zAb!tktE;$DosK-JE8SP}oCjXTcG>j%iLU~yLT+6{2pX@_bps+Kn_2KGvqiDe-j-Uk
zYmp|d{8~E}-2ta=V%D-lX-P>F=$HBSQDuLC#nhsv5}ia`rR;9ukR~c7rX48%)2{d8FwHaft8u$&1?5GAk-`GW%+nfnWO1_m0usI_glaf7(C;bM=I1F#b)BdG0|
z$0Tw(y0izxHeuVoSxFd^Hj$F>E;+%AkL_JgUbeOAN*`mM
zbEx5pTgBjTjgiRD64e0Adu&TTl9g~tI$Y>P*QhYS7gTPhsy=t
z*ee1X73^a;wmOISH;#@7F#26X)$C3V4h@a;t8!YIDx*aL>yD3)7qAuLX!pm0vuDnH
z9}$s`S)Y1h#H2eWS{&i#te2A)gK!6gWelcmdym32oixHY&W7H$<*z?G=*|Ntzh!Y+
zTJ{ibCJZ&-yZWF4<8>Ged`~)yJ)d?dDpaBLfvMd1m#$4ST;dXNwn)^lZiUp&@M`2x
zEXR0f`P5(pK#4+id(+z>jeWtL!VrY*=OUO+KmRO+Bg<#JB@o@d#Sj*{PVZ(EW8%j
zjLml@Z!77~UcPw2ywG{9}<|
zZa^g0a!6D+P_j@OcR!0o9oH<*Sy+=uBw=l>6`d}@uhhg&%r2e6BP!+6tP}&itcCYR
zNA5pod8|w%^5r1fpI$D|CPUJxe4G(o-=`Vn-X0*gt_?r3D|>EEE)SDDGHq*X>%`}P
zb1`w^7vWVqnN*tZ>FdLb@o=~xQ8~E_at_rI^F5@|!Bd2f*36qEn9uul@zmuf8z@Eh
zf1WJyA!>T992|ni_U_)4Cq?RNsrg4LgY&Xpm1EPRX1ls_^+vNfBPl!HON~AC_4Suj
Yu+ril*i?(Ldu>VJwh;fOt*nCo0oP+^NB{r;
literal 16592
zcmX|pbzGZG&@Jxn?(SZk;x5IlxE6OSL5jP(yE_zjDDGA?xVtp?&HH`#-hYy8etDkF
zncbP4IdhUoH5FM@BqAgT2nbYpIVp7r2uLRI>tF;Z@FTzkOBMVC>836#0Z}(Yata>6
zSc@x*LqIgfBfpu#g2xo*a_Y(u5WaK}5P=~O5HH}j0#6_yJUAdA&P*U61T!EY@SSry
zzX?M?d{vQ`64&%Ly4-^A{;riOb~6?5u|Gu-QGk)PkYdFEDWNP8NI;Q-;T!(-MX{cJ
z+^;g^0gdu20!0Msq_H#s4og2ma8wVZpr`Dg(?@RZkG|u&^!?p7uj|R`@xKDs7CZi)
zLU#2#Ms~kFJ`SEXoUT*5$mD{iv%mD6f4?T;vKTYizDpz1egEDwvGaEHrSB$`{h_mZ
zc)A{_U@jv^CdQCZs(PQph@ayl*Ei(X>KjSd)bdCt01SlwxCs|K5via04zC8>Lxy`4
zbG+8hR)v|D(hluRdJt-i-)=VF{cSa!bvT*MZq&WzKN5wT3%BZXe>9!JNquE|J(s!l
zr+J*V5&$vR7x1~LB6KNo?W3A6>aQYjh$Gj2Gl;yA
z?7)0n`jG9^n>otseFL0i@9TC$a&TjOfzQ@E>p_gzNq!)0D|+`K!v!)1mB+;UIu
z>5)V=*xWAQo?qv0@v|rT=Q6w#5fjs^V3^`q{x8CEk==DAC9vxZaB!7@_Td|Njt<>nDqM{}v#|h_%_&t$&ZF1K8
zm@XzgV$&&=z}M-w{y3aSg`!u^q6r2;qL7KvtK`UOvKh2Z`R|WP**k8wbH3#TCwGN#
z>8xyaxMgQ&Q~#EZ#_O2OX*h&Y$raR6b|e+B(!QU#-6sY^5;I&qA0Gu^JlIt=`SdPCbPoFErk>_{Sae!r?<2EB;o#%5DNuPJZ
zX2`Qf%*>G)u>YaA9fy3&elHkOjQm9_MQY69D>OCw;GSOaR9e&7i*2pMA=zR#$tX~gJmOjS!p%deKv$GHQ)Pe
z=kL0tbX(qLx~_a89t?g17OPMVj#>3Ly1kb#{>D-Wx*bgkxE=Gd>I-~6p?Yn-ezcyi
z)a!Q8!Ptv;(tX%2TJZUQ6dfu@ud?d5+0G~7Dl02v)fx1;JciXWf3Y{{I{jF-Td6hb
zA$nS=*(yMD!>`Naa{IV=uI|JG9*PKvS`I>
zW3Mk*3sKX7tgVvC8Q)zrk@ZIr=3*=UE2z`sd{E5uqJ3PWjF(MU#IyT?emaLYoFk|9@#qXwCN^8Rx{|qc2Yuzq_ow!Gx=rOnG!3zn3dO(ZuB7wS
z!*N_d5LqO6`_R2Z0sfG04%8{*cQ0{B3jCs4UN8x-lnzC1CxxW*$F+D}n&<
zXf^4tfBGM5kcs#j4$*Xr`l7Uv3%NeOm;GE
zwcHyXcg^NVWm*AA*JR8Ytm(lea&mHQY(EoU}pH+;KLGW>4S
zbHhQF+`mP(DAW;g9PBpngersF)3Fo2OW$O_srg~No&6XHG`?hAgX&w5pH#qp@NK=t
zrc0LCN4_Tv&DVI#vHVe55V}BbYUQ{H^-*>dF^9Ed<1koKNwZrqZys~PP|dvJkjw3L
z^#&WAUcV*i_e4@vc5BKfe^#D@Wv6(h+w8u)HMz3c;Fs(e1Ef~zZif)Y)Yh8U<4^-;0Q
zlro{V@A6lda;Elh@NN%!eqQ>!+T`^)Ph4y`5eq~KA277gSrO5xIOg=}J3bgKGaPJM
z-n>3d7{&8E===Lm@>s>}HKof^MWhX~XCM3__Ukax&obOi=gYQ`1>&2F-P5i>0E3i%
zeO;K%i0wwAl(`zPh}ls;l~pNohGJEy`RkT*^L9TAZ5^SU%n2o+YDo;Gt!KNQ$MvZG
zAJ!jE18x0I3l>8yhj2RB^vVP08rG~ioYtp~7@s>D;Q^(uj;CUSs}FD{60Vh29kN04!XCGu0>*+2f@!@&?(J?-rGN
z_K@1G0?On)VE_eY{C{obC|5+^PgU)-siN@$KAw-m^K9=HHGT{s*xWn0%02QYFKDM>u(bSVED*%Vg{Fd?qlcU
z`KrbfiiDY}(iuKsTKgKFBvmG8uObc^kA@{bm?0mn|rtb3?;TU;9#lcUE^1Tf7AaAT3WN!Ix~G
z)Hc8#LM#UZAxD|aP?D3FH(ww-2z%!?h{(yrAZyIa@{nwiEQOYnpO|Cui>Dw}H6$VA
z!N83b$ZCpX8XRssNY;2^^#8Xz`nkCag}nA2lHxH>tUI*6vri{8E0y){k`Z50xf2Bq
z&94QSSV3g8zXqP~DP@`XbGWVJzG5!$ALPAJ*N!z>kR#tx`lJvvCE84zslKV?`8H->
z+)vjUH=eST8J#ICz=2E?*SykjMfr%x_d)~!fU@<`bq2?%a
zpeh_I`%2BRHB+W0rZK<%-iWVTRV{F)ydVQw7S&kKyvSp%=Kig1Jvp&r+TZB6#)79o
zw+zlq)7rMdsi5&OdXcY9WI5?$dh73kF{9=>8d(xhnZ>L%T6tXHd3)mO<8^ZvSmwvk^XS!u6?+1$X0{Liyws&fw-F
zKN5lBb
zG)Fh*E}MpJgSO@CsK(_4fa(>oIpLk*0D8lxB2DH}MxXVir5wZiy=@+LHbuYCNur%6
zySl^3VO~Lm-R(WAFM_k0?N-xyxT{KkvaM)WW7-YOVxqGJhVDilG8ZvT%R};MVUS&}
zw9jg~Z`;e2GDUIAiCuqeRN<^`xL$AV+8WT2rdNTd{j#Y8{e*SE^NvY;p9Mu=h|Gsn
z0TJl~PT621+aZcwJfTp%ZBR6)!lDn@138h&tXd0-UVGbjmrv9jVF3xWO+xN;z{J
zjX)P(9*RK~2r;|!Im^kz-Ei_N{$N=5ism(kFTvWs3yu>KJ#JEd3-A5L9DFX0GjE@n
z5*XR8{T+LfhrklH6V>{UJ}@wR6pDt$_I^kT5|>qCs4fMH2}|$WSLr<~{nSh7pk1BSX_V&3(}l5f<>uVWU;PZf#3W4kZg5nKm)dIyrhAU0F3|zh_T1fvM``Cr*-nWmU8iO3j-9t<*-o0D
zgC0YuU$(r5V%dnvoZ3Y@>QoIk>-(+*1Fm4h5kyDYt-_`SZ-^V$=(a+se>%6e!1YDz|Ht%W!
zY&q|7C=N$N6B_(4dsf5_yTD}~V@uW&SX@LtAS8c((FkpYTwo$_x2n1xia_3eR*Q|S
zs1;4nZ?1Lqd$u7s$WOPfzTI{n5lI_3K%JA9_wA(QHbmuR
zVRr}`OETODLmo}!Vy-w|VBO?`cn1`=$<}=$!Ko^8*}{>?aZ_Vq{eEhl6UY7XB(gj8
zVVx%g+Wd$_9gk-BbnwFe{xk7hA`wZ2PLiF7>9Y_YO_?ne*YRpx%Q<3haTne%D-9RV
z+4mq(79|ujHUb&cbDw*?#3l?=Y)Tn(`uvq=X3LkUc2S1TJV$pmdi{|Mkyj(TlsqZU
zzO&h9yorbof8F$my=3QEa<-2`Kcmaprr+uFS3HBE?3LHpw^veE_g%rVt@`coZtHx>
z7ft-OksE{dr;p%v6OAjR0>Q&2jo$Z5C-g4&HAH_^{^HL}2yXi|+IRSeFGa6!$6}wG
z_p`Jz-gWJULWyQ^--%Uz9x@wuT=%}_82H?d;QxI-@iQ}~2%=R2!bE8v7_4QMWHrr7
zw%dNJ!JyzeL*Bnw$@^ZfzV<_-yC*1p`MD=gPuQuZMaty&)Nzbr6?pcrs7mc;{5;Am
z!-dwCq1aD;O}b}qy$5$rleE#Xq!aMr!sSFrHcH|0dbs?6%!Y>PEBNN#c_S0&Ls~3a
zKJQVCB2sdrI6_f1hA+$%`5vbZ*j!l^5x$>hOP&L+krD;pTbi}
za4P9QE2<&TW%vCob-hUpmJQ5xOrp%0n?1QCFK1BH((e3O!o&M@z>W>%BJzCEUiQBb
zlG}Kp4}MU|ZiGqO^eqPx`i-;m6&qriX)O?3BXC``@T%xgBC-ZkeDAhsytk4i^-m!a
ziDNNENtbCzWvq@A!B_@>hf-m5mLU@pY~`0;vOFW~dE<+XD|;@lr}w<}I{YYFPP
z_P%iFci$Q`CfpcitiJ#IAw+4uG>z`82AJTxq+i{OKM6eT;l1qf~
z1s#o9>c@x{y&~som=vfCeG?UX{X2Wc0~>~jc(b^xPJ2QMjv2bFF(D3N#uN?Qqz$IT
zn|{MxJ!*TMuWL>-O|R-MrYWVPJMULs;`76+;F8^}pp+I0Zd+j}AqrT2j;KV|u(jCb
zy`9DRXP(B4hqw{wd
ziv{tAaWADW30Fmy%+F$UP-`;EZ}cs
zk37I(dBk!f^PUqg&j-M@B|Mdvw7Q(xpx*qsJ>!iR(+J06*{Tr?%e%
z-0^9WaOLK=AvOG&YNG!xw>FS^diCUjV~gX$iWZR&eiLra?X*BOv)He5}?(_
zBGY|6)9H)ah~dtS(4qCv9>_*W
zc2~R4wx!f*@LgQoE7)dY3?Mj^i}rbfv5M?aHe3bekg^lh@O>m!F8e+K6qpO~!7mfc
z^%;G11xh(U6eiS>q=OLVATWuANrmhRg?s%|mg^xsP5q%`)?Wqwf<6T+Y_uqpX7=X+
zHTeKGnB%Co&Fcb3!)YggTfTXGY1~3KI?Uqm=}nSBbhHYGi+uQrsw$?+jHYFj-N5C(
zL`WW*SZ$yU&yOA>U7rFqge3-3Rwx_|7Rc=W24>9W;zYxUn+)rj(H%@pcm4H1^3kzQ
zN2EU8ef51G<||cLY3~LaM46cc={N86i*>vDo;UaV2>2Xt_22)tofJQC$!?wJUoSe2
z4LZQA8+VYz^>!};W53AlMF%|uj!9#_`kPei7V>*qx!*ln{5Etya+E04Od(k~rFyw?Ew($vq>vuX=jq=nnw>Vor
z3(%0ZpPpbm`x8u@>xVVIe%k{R(A&r;SknbSEFOEW?xO3q4M*EP+;M97pj!qBDivX@
zywMt%TKz#x%5YX
zXnlOmnt2VLNH{}I+w1=x5klN;X#cyzrEtn0du~{TlvyqGFNdpD;clST%+kA%R*eDz
zKyC-q`t;;PxzP{nVqvQdh8sALR+G-(uw0OBlA|MYsbY=sZ)%ZhT|praU_vi6yTEOY
zDLrcE!-07ElhAR~BAoGd6Y7tX)?Z436rv@eRnT>_sSbsZBDhGQ0D|rYxjTS?B^Ft6;vw&O78&&WJ>~tI%j~pmvbnQ
z@9l4F3<~iZqmGnbev2&a;g^w59^a~&;NuqbrAICxfkkGw1CjRrX50`Pgd#TVDwrZ*
zWDf!&n(}opVo3DbfQI3LJVocUc~U7)l#vy+EWIp;p$;9b?
zf5$wpSnlPoEkPO`@b9+DLKsSm>~LK38a6u=}%KoU9S{GzKs(?k7Yej;bW>F
zoDi8DROuh3u7T5QeMX|8Z0I+jHK82yXz0b7tR3oSw#&rnrp4i>g$GdC{6%tZJY2&x
z(gv_LE?_&$@f~yc>Y*#^A9Z25^ldzAyTqR=H4&h%dASets#HX4Omp*jEBKmy`s*Hv
zZu5t0?I63A(Ehm?<5Szui^WwFXKPwrLQY*i`NZ06i+@vBnFX6%2F`v+52#_0Fr@7n$-i1Wct@!pj2TGp%n+&CHBOuGwTsMuhVOz
z_2ps%euZyEq++{KhT4s3?P~;h{|GYHg+xXC)rVT@z4zw0f+MXvR~brPti3T!j!NRK
zZHm=u0>kL?Yg?_lMwCRO-c<10X^f4Oa*-@B@)S>YnSjTw3};PgsHHZkwOh__gt7TT
zW#u{oORL1+qeJtQ@sW}FJX)j;N!n}vl-+7t)h+Q$IwdBYg0eZk^nKgEY*NnxWe~cP
zfXq$|Fz1Rl9%t3{xt{(Vt15u#hJUe3b41ewz+?cl2o2KI}*;?W*g5+X5eBSK#yD{BSx4|c0oI6t}=Pu*bHjeZ)*gfzXM)>f42oo|Z`*}=Ts|PB#|2g1;JoaM+eU|kZ3eJ^+wq!s(PwRGc#j!D&dk?pP
zx)mJ9lXvufc@p}#866MENF@vo>>xe7$?sleUkO2$sxMmW?ngq9DXIoKu_xX!C(h{D
zOHzgni4G_MpZ@|r!7yj>OoOWzXi7~cSD~Z%DqAP(@Eulj1=#C}kuDhCY*K;$>OWuV
z6OPaT!zMK?Z{WuDTUXz!5XSVb&b6-zTHkk=93dnz@;@+Q#uSsT1l_d;zpt#tUNcoq
z*NgIo*u!_&pvrxX-DG#e8-Kcvg*%zV6x>5{P|}&O$bodDuD@sfa{1>D?luPg$QxZL
z_xr31x^j;Y-ZU
zqw7~(Vm`q~$q2Qow1cgNdYv8D?+^du){OoIj|ZQPOiZWFu+{PXB_esK{@!%ah_($A
zAguxGU{X(I*}Cvz`d5DbyJ;0%-Or_;qcNGicD8}v4`5~-bEpU7hGy|G13vEavmYJV
z(ecO4d?Yy`(L))lf{ED
z#aWexw&&Rco)x>8n-gXt}a*D$JOIvL}UIe
znEV2q!S``P#V5P=Ui*VdnI*J7rbL73a?Sp>EQ|6Wy;6MJ{U*P8E|;Dz!8_1$>KUU(
zlD`CRr$YA3gi6nUQUu!{KPFryO-#UQfUql=)sF)bOqY^eBWu{)h&MD{tGu7
zmnnpHE;;sX(>z|p$~c7`V*?GBvg2WLca?PaOK)KzHBc7#H60%uMq=K9$}l~ud=h*O
zcp%PO3T$m%3$uKYAi@rTaYy1&@bZi47fkG?EB0O44NSxJ#08RXvBSzBHLw&7lHZui
zUVwYxEp7>Q8E`95eGt!mZB@_8~|v3Iyv}pBpV7)2c49=I&wP)mrdCXVjG)y8WOJei4esEVB_^#m27UgB?9
z@`kPIW9^jZnHO&I*GmcWJ`=NO*OkBKTeI{*OpN*QqAwK=4}IX;N2lIsx~Qx}!B&sQ
z_p~$}<=Bj^B?*UA*t@|dN(}>(DN7#zk2tlcp9LQilxOOur*?Ph4;Tl5>vVQui*FlO
z+@+*E_Z`tU?&!YLKmYa!v303ta<$e~rZ??)kNr0E3LyEP7D=fuL#C|;JJmWS^!E%cv_3}|u@l$rV|X!8&>}QmrNGB^z~`&*AnCEsVXBT1
z;Mo#B0?gJ^TCF#p2u@ubOfyU>hHLI-UJ}FPNNgbuVJmsr`w68OfOrE8L8J-QrNe@g&v%9OY
zDYH7p{;78zmXm3;ifIWU+C=Kd^g?npYw)5skPKk>$=qmfy&pHNDa&l`GlX1Cc>ffZ
zbsJ2AU{%R2@_Fsjup{{i(iE=Aa0ParF|m13V#L7peVUBTKa5th?=N6E%QwfY4)(K3
zdH#<|jq;|+lahco)+!LVg+dML`FJ@OU3ePCRwV#(GC%!yIJYRrh0k<2Z1AayJvGLQ
z+p^xguD{krPLn^)HEiu6u$Wt@OgAwMcntPp9P;t-R5UCwH6BI4Sk}Sb
zUXz@v4i9wd74dHPtc0<4X#RbI{&4|QOJ<<=0jxDSkt8p&)<-;;>f%RW-dt4mKhw}Y
zo*YzlD~o&ZdmgAh!rhD^Pb)5eSS3l>2PZIpjx%khG@LqVQ2N6yejs?Wugb{{ViyDV#
zW;B?wkQLGFy&1;5BotxGH|@WYW$i8IzWaQQI6JYUB^y@|k7_?mGYA>`W8IBYC{%%D#b@`nG)=K^-RtOm`AIN9!`m!4Bs{M)_)1d%c+d!BdRxwe3S+NH5i1
zp8vXeT+njS)ODmp3hH_2Pi+xJtNxaDgDN^2{YH?2h}a!!=W+JpS_54KB)@KHuS~jBwG@Ng;-eI^@Z*vO$5GG0J~o{w(WGNh2(YB8
zRD~zw%Qclm8!OW@ByYI!m-R=p!0;e@hsYjw{TErWmqejHjNQCFl>avQ#V{qP$NTdT
zls)7_sg5Re!C_x(4A1fIesc~kzQ)J&O_Hu?0_@`dlg%JtWEE-(erQHuVv@fB;eQzu
z!jAmouz#aVt+`f9gzMgqPiQ~jxnd8yz7HL_&YG6kh+8`NWN$=YPtNDLqc
z(IuerW>zFAV5w=s^`zn-Xv*i&5Q{T$DTQ4ip(jYSxoYI#&wD}8w4b>kXyu0LXC|eh
zx7P>2w8v)>Y#N^e$C4@)0&F&mZe(|e1F%+2QC~k0cqEGzl1|FM(&kk`SIT*I
z;9C|M)+@;+xx&yjlwzsZVhm@@Ee0A!h!T0ER8&dN++>I_U)Lq^4ys}v<$%v1WRUdd
z`k5^?rW7-BpS}J|z9Co1gaQ|zMxKTRSxh=(8-}&AKc0{`Aq;zOassIb{~t0Zg&0TUi~;
z+l^qMI9gx=WS$EV9ffDi9LkzAvFOl0AS$spX9~}zl?oM*DdeCAQ>#s&kybPLwWaPlCUhc4nEe-Gpz`8Q0_Fdhy=kdJ$qorm-6db@?Ikt;r3V@R?BVp<%7H317sE!cgzmc*;j+Ik
z${zCU*(TkYD~5s&Av+o}TAL}4Fojz@KT_5_dAEqYG~qWofGxwe{AY>R6TZxxcK
z>Aj^Nj3SUZsla2d$So*U6qLZ9v4#`pidaN-!I+yfPYP7=xLPbnm!UuB;LJHes0ekg
z%e!i%%J+Z_MA)UT(cCtWD_y0SgBm|$S38A3)I6cEcBcAcaSqGM6quufq1-w!1!7I(
zv51KduV@^=LnoS|+>N)aRiV*LU?E6gO2|zR=6Uc8_fDe-H-;4K
zNAPzBR+Q9$sL3&56zYf`Hrx$_$cKt5a#c4Pb+L-g^F<;=^;ry!|i3nQa#O`
zTmuTFd7dJoP;))(ZTIljziR%6LLV$~tYkN->hNoMz5Jp}Rq2-}uNQoqJ@(RGxyOG3
z52rO(Qq-KGddX64KaVe|Kzw)vl~XU*&qY-Qb|PDl&x|l@N7UOb4=Q>eGgfE0fJJld
zWWdoW{r(cmQ?Rn6T1!=}#}LA|d;NZGBKmOSX#Uf}EoD4FuCp)?dyzlmoa?4G^HE*6
zI)w_{)7-@M-g21_-Gudqlyx3c`B#-7(n5&CgyTgD$hCO^mP(TX7MsP4#jtxp#zk*(D`H!H&?Qtn*-Rhp(J
zS8OpSls-qzhkyRO|J>rR>Kk|mH;!_lso1G@cr5y)o`?VP@nrn;>TRCP{ZXNW
z2~`}%x9Z{Z=sAHzVXtssU+a56+W5NLkzae6YD_8xc_4kj`{h#_N-Q^j%dxFz-FNX&
zg?Dcss0VpMkJs2yH(9-k%537bHyTUqRbqw^-7S8qoB1T0dEziM(*)=t-M2OAMQj-x`Ozg7$ydBHWeWp$Air?h`gXi;o#fb8Sz|1?~
zN-z)#e8Y%0XUTeSY9>0K!%t|rZ@(h&u=@?y8oj!
z7Oy(aDZtdd>hbZCNTMZz5scWDgPx*R9QQBsYJy%=EV|4g4kLcCfX8a%#)M-QyvquE
zv{b0YJbq*`c=;;pJsiS;b8qCea7MOz4V?}lG6AJ90jDz#mDrBRYl_NymaC-I3?^dK
zB?DTO>c10UAP{;Z&qpxF56b+?qtYgzt~mjyz3wD#@2k>Bml=ee(H>If%p|G^wOn6I
zVEOFmfC^YvHtM`KzEvRSUHMCd9Z0P^rP74?(6#ekhY%#1{s^v>(;6vO#HB{#EbkeK
zb@2db+FIj~g{M7o!2XI~3rM8{dl&1-wPe^FQV~M9B0cz}u7DUal@I8ESm|@>1QCo$
zKC9Turg^!(v*AiwRRNp<^w%^GQ_-mo$_wJ~B+}p1XC6K?kghX$f|pSNHeWMB_7VFK
z$tnlSbTc|{G%W6APRfeC(oIXMwszIc$?12B%~Y7E7>W7XCAOmO68lUs{b3MyVEF
z{&ab_)+okr!|~>zD}ARW!W%;0H`890#_2Tvs>ceOCMe52;(kMz-aIw%KnjTvM3D~2
zgm~)5;_so?_~U}mDN}y3&`ADKk+g|uS@MnCqZxH}OMZ?Z&X>AeOx`25)?)XPvHEKlafvWA9E}27ByEj~^lA}Lngw#jnMt6&CP~D-tz0ROA{YQ66F%t@7
zhC@^l!)UtlFBN^3ynf9ySY&WcH9%bxNth>Bout$u9ad^v9WEEAGoP?UBp{T{KCJqH
zgO-!@M+9xqPN59r(d!W}WfXm%ZP#p@jWk)vpWHL5qlpJc7ey>M?iNLZ?uY#zX9Imn
zO)-!#g$pzCr#*n<*Ksuk3~4v#$cQ+#pLc_-FqdGzTv#6BzV<`|gRoXe6S${Tu6_qZ
zd=lu+D9$mh?I%gA4?s5|;j|xRX;QJd#OZsEL6f
z7G3NxF?^E1aoO?zH$JQZ1F2{!PGN`U9efL$gxYe|`|9|JNk!RZGC&TP;5d`iz)0TZ
zAmp-h*k-oR(R2aohw?MjMC{=G;^OD8UBmBRrkX#
zt|2zp!&L*7MciE~Tsj*;I|9}TbD^skR*Ye
zOR`9b8d_ouc%AAixI^)6MAO9*CHX8>Eor{{Iy=wju$v?2N=n5Y)!+oGd(
z1@3hJ6n)erF*qpmc@kn&^vY;kwH&IiHK7cWRB9Fr;keiW+(Xmyk*>GlORoxI|U@
z1iMJwM^xuafdi^CLAnN%7FCPWT{={8L}pT+NL$a<2h`zIAk+3G`3h(x#;C~oD92CZ
z&qred>>lt&q83tJs^_7sv{F>cz&%funK?Xu#6zYdpLS)Xx&`SLi1%}Ro#GFnxjyV28ge3sAmo*Ag7^s%zcmb@
ziwWnMX~dG+F2~Z>XzyMBLK8&z1BB4C?O-aYh7t3}m>Blb=Lb-x-Z6$6%f)~)#DCP#
zvJ@AvsuTNjKu($RZ(0q1fce4&O%f$vqA-i@`ohF#Ns1ITb_n4bfz!QKoL!m0iVQ!D
zoyoAh*mRl{#Ok}8pAx-{irRv7Ot?g&4R{X4tH^$_YWPnQy^K-EpJ;Z=|Fka0E9WX*i1+=@$f{4Rrf?Mz
zHf)Nd9$(Rg8U<~@g93srZZ;>3fB3UodB?zlCXLn<1v0_@)nZQvqPRm>{mBcdbBgdS
zY_yI&qO+86f}~z5*JJ$F$4eokw_9*N#YlnVqNp+8xq8Q%opNyUh%TJ!G#pug6#f{u
zyWls%tJw?bcW9Y%_evUWP!^fk@b6xU6+#?aS;~wMrG5w)O_X1^(C<5T3)v9}HRy7c
zTE+{am)SK6=GrX^#AqU5jf1XJ5LX5L?8&NnXJog>`3eYeswtEKuy&8#uPO8*gojbg
z=#gd1o}-U_*oex2TcyD0dRxm7WXcn}2wT7^x|$jSE2V-d7ak}+UhsqS?SZE?z)3z%
zkl^W9jieJQq{MIqGbTu6Jvgo~P4#Ojt{OOdAbixWDtxg)Ob##UBU@EOLOgegs1^`e
zj^ZKYyA0lwGlt2)Q7MgAw+Ks2!T~^XG<=i7q-(Vykkf`ojn`{T!I-Y^8~!?A%9K`?
z8h>k%QMvpi3ek_ykzs1qp>RG{mBKG~`_NpUYBV@$MGN***lj4+v-tcXBF-S3!QpiI
z2Ra^7xK;NqB`>v&hX;~iYi8#;fbhD>D9=XDCEF#R6ZP8H4OxeTV53q
zdg%(>RqP&L<1qqJc;ImMlda|rU~!;hElbFkR<7n?AGOdr0~5F)Y#~RS-=H4dUS1pG
zbi0_D-=~yyz&V1lh$)m)wJm37`YOSRBgqJM>O7W1pz%-iuR@g&c?qg5dM%Alah9Vs
zawv-XVGKC7wH2&~7%oz9tV|evaRNs>&+-CJg;jJ{4EQtRlawr+I`pJ-X;|U?<1>Nf
zfL%+sWJ%07D7ea*;8Ku_aEr|ghzMncXSm=s1A(J(Z@FnDLC#O0M6w`|+*%u2aZX60
z&E#rK*h2Hgp%_9yTBVOLpClTAGn!4!Qur{PCNGRGxWx8AS8)-kWaMZ%+oeYHR+AjR
zAl16t*2GB96fqm=2dX^w$;9LgS@|!)1yO0b1ZWx_I11?4LYEK|O&iX)IhF2ClCRWM
zE1Vq4heq}|!v%s86YePW=M&l%sf?+BluV{)8zzcKc{xq)B)))Zd`*#kb!E$#s8y}@
zlOYk?2$|XkhF((ZD8m_3oyDIJRHNkqW}_?%Wtj-WKll3kG|vh+3l!;a6er57va~4?
zO|d?|ZA(Qv(EwGFXeI{PP7HGc_jKr0SRc~CmMMWsJ((9+8VaQ&)7^&=PK6f`skc2-
z$RNP!1*S;PzmZ!3aplo9b|68B26ZA0N<+SMlpLzCbzh|dOVf197Fv~-VII)d()gR6ddP+ORm
z+e*|!2})8{%^fHF)!Y$Uq?o8Aho2!*Kw87VEh7c_M1lH`pfe1*MIb|2{JvORhesy#dS5Ai(Pl`
z3tXoNP`t)rm%Hym%9>Hwhh)YSK!p8Vc?Hg_Wk5AH?z3ze%M>3~6sP9UG_uDtM5_ka
zo<~eUdko^9m1iJ5aw|<&|GI);a)mlA2vUn7-B
z3LNAyq$*|uULG+ERV;aArsYK<=cFN{AV+)g5lx8;jp?$9-eMhXa^!#F;U}_Y#x@t9
zQgu{_kqwqWeC*1t0j*$TuL^@NHPESu-kuF+r8mENG}}k&%wkGyIc#z~`aKEehl%m?
z3y)DSl{sA7R$GgQ4sirJnN5o#I$h};BBwi)BC;=Tl8AW!_cp&e6Tocj4QL3
zs3*K8zK%nH91Env8iCJlYT^`?*0#6bo0CK@JyJinUH*RMF3eP{U>e41xHM)jLg5p{|`VyKiL2P
diff --git a/indra/newview/skins/dark/textures/scrollbutton_up_out_blue.tga b/indra/newview/skins/dark/textures/scrollbutton_up_out_blue.tga
new file mode 100644
index 0000000000000000000000000000000000000000..9112d187e274597c18ea426281d2ff329f1ef62e
GIT binary patch
literal 929
zcmZuw%W7It6uoT{kxrUV=nu4WM;WD5C@u6wzec@E5fq=qQAXlKM8OYGR78B>Ga7v2
z`yFF626eXTI$$zrFWj@w+UM+b&R%;TNqQq4zjNtadZ&D)QmH;2{)zc8fM`O`+ru!d
z)oNHSmsqdY*lae~ZnxO&cG&Ot!V=TZb?%$b=O~p*U@QqRola3K7E!HM(QG!+?RGI3
z3@{pvge9h*>)e-2CNUn5NdQ4WkV>V*;_dA%>h(HWt(FL)C8nRj+!u{TF&qwG2ngsT
zb2ghrp-@1%T*l4Kjj+V@bDjG_p%8k#-U|VN+wF$QWP;gjhQ(rm)oO*!W)qf}ey$sh
zMqFQCqtodKf)nP^Znt4D7_e9@V5D*qaj$&xShb`@!;y}3R&
zevt(al5zMHoG~A-*Na#zhHyBHe!u_!@N_yYD0q&{NCjo_`Fx1S9(xAP@j)SqzdyA`y`oZ~mIY{r$aYFq!3(E0qeAoU!LvNb-@J9En8Y
zxs`;#4-XHbRoF6APiE68iKq|(8;NvmCerY_Je7h^SX1iDUO!qrCyLc-CA_pegqLKC
mF^cc$;_#=RUssx*;}iVx?dRn$^>_8xFYkYURDZtwApHf@Ta_gM
literal 0
HcmV?d00001
From d721fd65b3f62a436be8ba8ea62b1a55a806914f Mon Sep 17 00:00:00 2001
From: Siana Gearz
Date: Thu, 23 Feb 2012 03:03:15 +0100
Subject: [PATCH 16/35] Bugfix repackager
---
repackage.sh => scripts/repackage.sh | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
rename repackage.sh => scripts/repackage.sh (95%)
diff --git a/repackage.sh b/scripts/repackage.sh
similarity index 95%
rename from repackage.sh
rename to scripts/repackage.sh
index c8f6b401c..5b1097273 100755
--- a/repackage.sh
+++ b/scripts/repackage.sh
@@ -51,6 +51,7 @@ esac
case "$2" in
--commoninclude|--common-include|--common)
+ echo "Using common include directory"
INCPATH="libraries/include"
shift
;;
@@ -68,11 +69,11 @@ if [ -z "$FILEOUT" ]; then
fi
mkdir "$TMP"
-cd "$TMP"
case "$FILEIN" in
http\:\/\/*|https\:\/\/*)
echo " Downloading..."
+ cd "$TMP"
wget "$FILEIN" -O package.tar.bz2
echo " Unpacking..."
tar -xjvf package.tar.bz2
@@ -85,6 +86,7 @@ case "$FILEIN" in
usage
fi
echo " Unpacking..."
+ cd "$TMP"
tar -xjvf "$FILEIN"
;;
esac
@@ -99,7 +101,7 @@ if [ -d lib/release ]; then
fi
if [ -d include ]; then
mkdir -p $INCPATH
- mv -f include/* $LIBPATH
+ mv -f include/* $INCPATH
fi
echo " Packing..."
From 93f6ea1a078c184de44b8cae3cb3bbb9b089a753 Mon Sep 17 00:00:00 2001
From: Siana Gearz
Date: Thu, 23 Feb 2012 03:05:31 +0100
Subject: [PATCH 17/35] Pure linden boost on windows
---
install.xml | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/install.xml b/install.xml
index d7ce8c54d..29b471209 100644
--- a/install.xml
+++ b/install.xml
@@ -200,21 +200,21 @@
md5sum
2cad51575b429be4fdadb5d63da1c739
url
- https://github.com/downloads/siana/SingularityViewer/boost-1.45.0-darwin-20110604.tar.bz2
+ https://github.com/downloads/siana/SingularityViewer/boost-1.45.0-darwin-20110604.tar.bz2
linux
md5sum
a2d2fff5cc5555ffd9865daedfcd0dd5
url
- https://github.com/downloads/siana/SingularityViewer/boost-1.45.0-linux-20110604.tar.bz2
+ https://github.com/downloads/siana/SingularityViewer/boost-1.45.0-linux-20110604.tar.bz2
windows
md5sum
- 17f89b854959b4d728be832d9c8184e4
+ ce5ce1050d039ef5c233c4f684437b16
url
- https://github.com/downloads/NickyPerian/imprudence/boost_1_45_VC100_libs_inc_patch4073.tar.bz2
+ https://bitbucket.org/Siana/singularityviewer/downloads/boost-1.45.0-windows-20120222.tar.bz2
From a632010b955af1154ef607cfd122baf31219c642 Mon Sep 17 00:00:00 2001
From: Siana Gearz
Date: Thu, 23 Feb 2012 15:35:50 +0100
Subject: [PATCH 18/35] Boost: target Windows XP strictly
---
indra/cmake/00-Common.cmake | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/indra/cmake/00-Common.cmake b/indra/cmake/00-Common.cmake
index 18cc4c695..87f8da720 100644
--- a/indra/cmake/00-Common.cmake
+++ b/indra/cmake/00-Common.cmake
@@ -70,6 +70,10 @@ if (WINDOWS)
/Oy-
)
+ # configure win32 API for windows XP+ compatibility
+ set(WINVER "0x0501" CACHE STRING "Win32 API Target version (see http://msdn.microsoft.com/en-us/library/aa383745%28v=VS.85%29.aspx)")
+ add_definitions("/DWINVER=${WINVER}" "/D_WIN32_WINNT=${WINVER}")
+
if(MSVC80 OR MSVC90 OR MSVC10)
set(CMAKE_CXX_FLAGS_RELEASE
"${CMAKE_CXX_FLAGS_RELEASE} -D_SECURE_STL=0 -D_HAS_ITERATOR_DEBUGGING=0"
From 10af9d64f2c72122fd9e072a324730b57518998a Mon Sep 17 00:00:00 2001
From: Siana Gearz
Date: Fri, 24 Feb 2012 03:26:06 +0100
Subject: [PATCH 19/35] One day this will be a memory stat
---
indra/newview/CMakeLists.txt | 2 ++
indra/newview/app_settings/settings.xml | 11 +++++++++
indra/newview/llfloaterstats.cpp | 13 ++++++++++-
indra/newview/llviewerstats.cpp | 1 +
indra/newview/llviewerstats.h | 1 +
indra/newview/sgmemstat.cpp | 31 +++++++++++++++++++++++++
indra/newview/sgmemstat.h | 31 +++++++++++++++++++++++++
7 files changed, 89 insertions(+), 1 deletion(-)
create mode 100644 indra/newview/sgmemstat.cpp
create mode 100644 indra/newview/sgmemstat.h
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 99c5b8c38..7954b6e8d 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -76,6 +76,7 @@ include_directories(
)
set(viewer_SOURCE_FILES
+ sgmemstat.cpp
sgversion.cpp
llviewerobjectbackup.cpp
slfloatermediafilter.cpp
@@ -564,6 +565,7 @@ set(viewer_HEADER_FILES
CMakeLists.txt
ViewerInstall.cmake
+ sgmemstat.h
sgversion.h
llviewerobjectbackup.h
slfloatermediafilter.h
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 2b521fed4..ecd22b0ae 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -4205,6 +4205,17 @@
Value
-1
+ DebugStatModeMalloc
+
+ Comment
+ Mode of stat in Statistics floater
+ Persist
+ 1
+ Type
+ S32
+ Value
+ -1
+
DebugStatModeFormattedMem
Comment
diff --git a/indra/newview/llfloaterstats.cpp b/indra/newview/llfloaterstats.cpp
index 4d8fd7099..84c637f2c 100644
--- a/indra/newview/llfloaterstats.cpp
+++ b/indra/newview/llfloaterstats.cpp
@@ -45,6 +45,7 @@
#include "pipeline.h"
#include "llviewerobjectlist.h"
#include "llviewertexturelist.h"
+#include "sgmemstat.h"
const S32 LL_SCROLL_BORDER = 1;
@@ -99,7 +100,17 @@ void LLFloaterStats::buildStats()
stat_barp->mLabelSpacing = 200.f;
stat_barp->mPerSec = FALSE;
stat_barp->mDisplayMean = FALSE;
-
+
+ if(SGMemStat::haveStat()) {
+ stat_barp = stat_viewp->addStat("Allocated memory", &(LLViewerStats::getInstance()->mMallocStat), "DebugStatModeMalloc");
+ stat_barp->setUnitLabel(" MB");
+ stat_barp->mMinBar = 0.f;
+ stat_barp->mMaxBar = 4000.f;
+ stat_barp->mTickSpacing = 100.f;
+ stat_barp->mLabelSpacing = 200.f;
+ stat_barp->mPerSec = FALSE;
+ stat_barp->mDisplayMean = FALSE;
+ }
stat_viewp = new LLStatView("advanced stat view", "Advanced", "OpenDebugStatAdvanced", rect);
addStatView(stat_viewp);
diff --git a/indra/newview/llviewerstats.cpp b/indra/newview/llviewerstats.cpp
index 11cb1a868..baf728781 100644
--- a/indra/newview/llviewerstats.cpp
+++ b/indra/newview/llviewerstats.cpp
@@ -213,6 +213,7 @@ LLViewerStats::LLViewerStats() :
mObjectKBitStat("objectkbitstat"),
mAssetKBitStat("assetkbitstat"),
mTextureKBitStat("texturekbitstat"),
+ mMallocStat("mallocstat"),
mVFSPendingOperations("vfspendingoperations"),
mObjectsDrawnStat("objectsdrawnstat"),
mObjectsCulledStat("objectsculledstat"),
diff --git a/indra/newview/llviewerstats.h b/indra/newview/llviewerstats.h
index 7f0f2d8cf..ec91b7efd 100644
--- a/indra/newview/llviewerstats.h
+++ b/indra/newview/llviewerstats.h
@@ -59,6 +59,7 @@ public:
LLStat mActualInKBitStat; // From the packet ring (when faking a bad connection)
LLStat mActualOutKBitStat; // From the packet ring (when faking a bad connection)
LLStat mTrianglesDrawnStat;
+ LLStat mMallocStat;
// Simulator stats
LLStat mSimTimeDilation;
diff --git a/indra/newview/sgmemstat.cpp b/indra/newview/sgmemstat.cpp
new file mode 100644
index 000000000..27f3cc7cb
--- /dev/null
+++ b/indra/newview/sgmemstat.cpp
@@ -0,0 +1,31 @@
+/* Copyright (C) 2012 Siana Gearz
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General
+ * Public License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA */
+
+#include "llviewerprecompiledheaders.h"
+#include "sgmemstat.h"
+
+bool SGMemStat::haveStat() {
+ return false;
+}
+
+F32 SGMemStat::getMalloc() {
+ return 0.f;
+}
+
+U32 SGMemStat::getNumObjects() {
+ return 0;
+}
diff --git a/indra/newview/sgmemstat.h b/indra/newview/sgmemstat.h
new file mode 100644
index 000000000..8a89e3b0d
--- /dev/null
+++ b/indra/newview/sgmemstat.h
@@ -0,0 +1,31 @@
+/* Copyright (C) 2012 Siana Gearz
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General
+ * Public License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA */
+
+#ifndef SGMEMSTAT_H
+#define SGMEMSTAT_H
+
+namespace SGMemStat{
+
+bool haveStat();
+
+F32 getMalloc();
+
+U32 getNumObjects();
+
+}
+
+#endif
From 0bdf54e6d92e8eeea168df19d0848b74ee180654 Mon Sep 17 00:00:00 2001
From: Siana Gearz
Date: Fri, 24 Feb 2012 03:27:24 +0100
Subject: [PATCH 20/35] This fixes Copy+Wear from object
---
indra/newview/llfloateropenobject.cpp | 42 ++++++++++++++++++---------
indra/newview/llinventorybridge.cpp | 21 ++++++++++++--
2 files changed, 47 insertions(+), 16 deletions(-)
diff --git a/indra/newview/llfloateropenobject.cpp b/indra/newview/llfloateropenobject.cpp
index 102856d6e..24f976e3c 100644
--- a/indra/newview/llfloateropenobject.cpp
+++ b/indra/newview/llfloateropenobject.cpp
@@ -157,38 +157,54 @@ void LLFloaterOpenObject::moveToInventory(bool wear)
{
parent_category_id = gInventory.getRootFolderID();
}
-
+
LLCategoryCreate* cat_data = new LLCategoryCreate(object_id, wear);
-
+
LLUUID category_id = gInventory.createNewCategory(parent_category_id,
- LLFolderType::FT_NONE,
- name,
- callbackCreateInventoryCategory,
- (void*)cat_data);
+ LLFolderType::FT_NONE,
+ name,
+ callbackCreateInventoryCategory,
+ (void*)cat_data);
//If we get a null category ID, we are using a capability in createNewCategory and we will
//handle the following in the callbackCreateInventoryCategory routine.
if ( category_id.notNull() )
{
- LLSD result;
- result["folder_id"] = category_id;
- //Reduce redundant code by just calling the callback. Dur.
- callbackCreateInventoryCategory(result,cat_data);
+ delete cat_data;
+
+ LLCatAndWear* data = new LLCatAndWear;
+ data->mCatID = category_id;
+ data->mWear = wear;
+ data->mFolderResponded = false;
+
+ // Copy and/or move the items into the newly created folder.
+ // Ignore any "you're going to break this item" messages.
+ BOOL success = move_inv_category_world_to_agent(object_id, category_id, TRUE,
+ callbackMoveInventory,
+ (void*)data);
+ if (!success)
+ {
+ delete data;
+ data = NULL;
+
+ LLNotificationsUtil::add("OpenObjectCannotCopy");
+ }
}
}
+
// static
void LLFloaterOpenObject::callbackCreateInventoryCategory(const LLSD& result, void* data)
{
LLCategoryCreate* cat_data = (LLCategoryCreate*)data;
-
+
LLUUID category_id = result["folder_id"].asUUID();
LLCatAndWear* wear_data = new LLCatAndWear;
wear_data->mCatID = category_id;
wear_data->mWear = cat_data->mWear;
wear_data->mFolderResponded = true;
-
+
// Copy and/or move the items into the newly created folder.
// Ignore any "you're going to break this item" messages.
BOOL success = move_inv_category_world_to_agent(cat_data->mObjectID, category_id, TRUE,
@@ -212,7 +228,7 @@ void LLFloaterOpenObject::callbackMoveInventory(S32 result, void* data)
if (result == 0)
{
LLInventoryView::showAgentInventory();
- LLInventoryView* view = LLInventoryView::getActiveInventory();
+ LLInventoryView* view = LLInventoryView::getActiveInventory();
if (view)
{
view->getPanel()->setSelection(cat->mCatID, TAKE_FOCUS_NO);
diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp
index 993f8b583..dab9d42c9 100644
--- a/indra/newview/llinventorybridge.cpp
+++ b/indra/newview/llinventorybridge.cpp
@@ -1806,7 +1806,7 @@ void warn_move_inventory(LLViewerObject* object, LLMoveInv* move_inv)
// Move/copy all inventory items from the Contents folder of an in-world
// object to the agent's inventory, inside a given category.
-BOOL move_inv_category_world_to_agent(const LLUUID& object_id,
+BOOL move_inv_category_world_to_agent(const LLUUID& object_id,
const LLUUID& category_id,
BOOL drop,
void (*callback)(S32, void*),
@@ -1833,7 +1833,7 @@ BOOL move_inv_category_world_to_agent(const LLUUID& object_id,
llinfos << "Object contents not found for drop." << llendl;
return FALSE;
}
-
+
BOOL accept = TRUE;
BOOL is_move = FALSE;
@@ -4544,7 +4544,10 @@ void LLOutfitObserver::done()
class LLOutfitFetch : public LLInventoryFetchDescendentsObserver
{
public:
- LLOutfitFetch(const LLUUID& id, bool copy_items, bool append) : mCopyItems(copy_items), mAppend(append) {}
+ LLOutfitFetch(const LLUUID& id, bool copy_items, bool append) :
+ LLInventoryFetchDescendentsObserver(id),
+ mCopyItems(copy_items),
+ mAppend(append) {}
~LLOutfitFetch() {}
virtual void done();
protected:
@@ -4559,6 +4562,18 @@ void LLOutfitFetch::done()
// happen.
LLInventoryModel::cat_array_t cat_array;
LLInventoryModel::item_array_t item_array;
+
+ // Avoid passing a NULL-ref as mCompleteFolders.front() down to
+ // gInventory.collectDescendents()
+ if( mComplete.empty() )
+ {
+ llwarns << "LLOutfitFetch::done with empty mCompleteFolders" << llendl;
+ dec_busy_count();
+ gInventory.removeObserver(this);
+ delete this;
+ return;
+ }
+
gInventory.collectDescendents(mComplete.front(),
cat_array,
item_array,
From 840cb29f840c61e327cbc6cbce3cefe422b37a94 Mon Sep 17 00:00:00 2001
From: Siana Gearz
Date: Sat, 25 Feb 2012 17:18:02 +0100
Subject: [PATCH 21/35] potential voice crash fix
---
LICENSES/dbusglib.txt | 550 --------------------------------
indra/newview/llvoiceclient.cpp | 1 +
2 files changed, 1 insertion(+), 550 deletions(-)
delete mode 100644 LICENSES/dbusglib.txt
diff --git a/LICENSES/dbusglib.txt b/LICENSES/dbusglib.txt
deleted file mode 100644
index 71b0eeed0..000000000
--- a/LICENSES/dbusglib.txt
+++ /dev/null
@@ -1,550 +0,0 @@
-The D-Bus glib bindings are licensed to you under your choice of the Academic
-Free License version 2.1, or the GNU General Public License version 2. Both
-licenses are included here. Some of the standalone binaries are under the GPL
-only; in particular, but not limted to, tests/decode-gcov.c. Each source code
-file is marked with the proper copyright information.
-
-
-
-The Academic Free License
-v. 2.1
-
-This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following notice immediately following the copyright notice for the Original Work:
-
-Licensed under the Academic Free License version 2.1
-
-1) Grant of Copyright License. Licensor hereby grants You a
-world-wide, royalty-free, non-exclusive, perpetual, sublicenseable
-license to do the following:
-
-a) to reproduce the Original Work in copies;
-
-b) to prepare derivative works ("Derivative Works") based upon the Original Work;
-
-c) to distribute copies of the Original Work and Derivative Works to the public;
-
-d) to perform the Original Work publicly; and
-
-e) to display the Original Work publicly.
-
-2) Grant of Patent License. Licensor hereby grants You a world-wide,
-royalty-free, non-exclusive, perpetual, sublicenseable license, under
-patent claims owned or controlled by the Licensor that are embodied in
-the Original Work as furnished by the Licensor, to make, use, sell and
-offer for sale the Original Work and Derivative Works.
-
-3) Grant of Source Code License. The term "Source Code" means the
-preferred form of the Original Work for making modifications to it and
-all available documentation describing how to modify the Original
-Work. Licensor hereby agrees to provide a machine-readable copy of the
-Source Code of the Original Work along with each copy of the Original
-Work that Licensor distributes. Licensor reserves the right to satisfy
-this obligation by placing a machine-readable copy of the Source Code
-in an information repository reasonably calculated to permit
-inexpensive and convenient access by You for as long as Licensor
-continues to distribute the Original Work, and by publishing the
-address of that information repository in a notice immediately
-following the copyright notice that applies to the Original Work.
-
-4) Exclusions From License Grant. Neither the names of Licensor, nor
-the names of any contributors to the Original Work, nor any of their
-trademarks or service marks, may be used to endorse or promote
-products derived from this Original Work without express prior written
-permission of the Licensor. Nothing in this License shall be deemed to
-grant any rights to trademarks, copyrights, patents, trade secrets or
-any other intellectual property of Licensor except as expressly stated
-herein. No patent license is granted to make, use, sell or offer to
-sell embodiments of any patent claims other than the licensed claims
-defined in Section 2. No right is granted to the trademarks of
-Licensor even if such marks are included in the Original Work. Nothing
-in this License shall be interpreted to prohibit Licensor from
-licensing under different terms from this License any Original Work
-that Licensor otherwise would have a right to license.
-
-5) This section intentionally omitted.
-
-6) Attribution Rights. You must retain, in the Source Code of any
-Derivative Works that You create, all copyright, patent or trademark
-notices from the Source Code of the Original Work, as well as any
-notices of licensing and any descriptive text identified therein as an
-"Attribution Notice." You must cause the Source Code for any
-Derivative Works that You create to carry a prominent Attribution
-Notice reasonably calculated to inform recipients that You have
-modified the Original Work.
-
-7) Warranty of Provenance and Disclaimer of Warranty. Licensor
-warrants that the copyright in and to the Original Work and the patent
-rights granted herein by Licensor are owned by the Licensor or are
-sublicensed to You under the terms of this License with the permission
-of the contributor(s) of those copyrights and patent rights. Except as
-expressly stated in the immediately proceeding sentence, the Original
-Work is provided under this License on an "AS IS" BASIS and WITHOUT
-WARRANTY, either express or implied, including, without limitation,
-the warranties of NON-INFRINGEMENT, MERCHANTABILITY or FITNESS FOR A
-PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL
-WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential
-part of this License. No license to Original Work is granted hereunder
-except under this disclaimer.
-
-8) Limitation of Liability. Under no circumstances and under no legal
-theory, whether in tort (including negligence), contract, or
-otherwise, shall the Licensor be liable to any person for any direct,
-indirect, special, incidental, or consequential damages of any
-character arising as a result of this License or the use of the
-Original Work including, without limitation, damages for loss of
-goodwill, work stoppage, computer failure or malfunction, or any and
-all other commercial damages or losses. This limitation of liability
-shall not apply to liability for death or personal injury resulting
-from Licensor's negligence to the extent applicable law prohibits such
-limitation. Some jurisdictions do not allow the exclusion or
-limitation of incidental or consequential damages, so this exclusion
-and limitation may not apply to You.
-
-9) Acceptance and Termination. If You distribute copies of the
-Original Work or a Derivative Work, You must make a reasonable effort
-under the circumstances to obtain the express assent of recipients to
-the terms of this License. Nothing else but this License (or another
-written agreement between Licensor and You) grants You permission to
-create Derivative Works based upon the Original Work or to exercise
-any of the rights granted in Section 1 herein, and any attempt to do
-so except under the terms of this License (or another written
-agreement between Licensor and You) is expressly prohibited by
-U.S. copyright law, the equivalent laws of other countries, and by
-international treaty. Therefore, by exercising any of the rights
-granted to You in Section 1 herein, You indicate Your acceptance of
-this License and all of its terms and conditions.
-
-10) Termination for Patent Action. This License shall terminate
-automatically and You may no longer exercise any of the rights granted
-to You by this License as of the date You commence an action,
-including a cross-claim or counterclaim, against Licensor or any
-licensee alleging that the Original Work infringes a patent. This
-termination provision shall not apply for an action alleging patent
-infringement by combinations of the Original Work with other software
-or hardware.
-
-11) Jurisdiction, Venue and Governing Law. Any action or suit relating
-to this License may be brought only in the courts of a jurisdiction
-wherein the Licensor resides or in which Licensor conducts its primary
-business, and under the laws of that jurisdiction excluding its
-conflict-of-law provisions. The application of the United Nations
-Convention on Contracts for the International Sale of Goods is
-expressly excluded. Any use of the Original Work outside the scope of
-this License or after its termination shall be subject to the
-requirements and penalties of the U.S. Copyright Act, 17 U.S.C. § 101
-et seq., the equivalent laws of other countries, and international
-treaty. This section shall survive the termination of this License.
-
-12) Attorneys Fees. In any action to enforce the terms of this License
-or seeking damages relating thereto, the prevailing party shall be
-entitled to recover its costs and expenses, including, without
-limitation, reasonable attorneys' fees and costs incurred in
-connection with such action, including any appeal of such action. This
-section shall survive the termination of this License.
-
-13) Miscellaneous. This License represents the complete agreement
-concerning the subject matter hereof. If any provision of this License
-is held to be unenforceable, such provision shall be reformed only to
-the extent necessary to make it enforceable.
-
-14) Definition of "You" in This License. "You" throughout this
-License, whether in upper or lower case, means an individual or a
-legal entity exercising rights under, and complying with all of the
-terms of, this License. For legal entities, "You" includes any entity
-that controls, is controlled by, or is under common control with
-you. For purposes of this definition, "control" means (i) the power,
-direct or indirect, to cause the direction or management of such
-entity, whether by contract or otherwise, or (ii) ownership of fifty
-percent (50%) or more of the outstanding shares, or (iii) beneficial
-ownership of such entity.
-
-15) Right to Use. You may use the Original Work in all ways not
-otherwise restricted or conditioned by this License or by law, and
-Licensor promises not to interfere with or be responsible for such
-uses by You.
-
-This license is Copyright (C) 2003-2004 Lawrence E. Rosen. All rights
-reserved. Permission is hereby granted to copy and distribute this
-license without modification. This license may not be modified without
-the express written permission of its copyright owner.
-
-
---
-END OF ACADEMIC FREE LICENSE. The following is intended to describe the essential
-differences between the Academic Free License (AFL) version 1.0 and other
-open source licenses:
-
-The Academic Free License is similar to the BSD, MIT, UoI/NCSA and Apache
-licenses in many respects but it is intended to solve a few problems with
-those licenses.
-
-* The AFL is written so as to make it clear what software is being
-licensed (by the inclusion of a statement following the copyright notice
-in the software). This way, the license functions better than a template
-license. The BSD, MIT and UoI/NCSA licenses apply to unidentified software.
-
-* The AFL contains a complete copyright grant to the software. The BSD
-and Apache licenses are vague and incomplete in that respect.
-
-* The AFL contains a complete patent grant to the software. The BSD, MIT,
-UoI/NCSA and Apache licenses rely on an implied patent license and contain
-no explicit patent grant.
-
-* The AFL makes it clear that no trademark rights are granted to the
-licensor's trademarks. The Apache license contains such a provision, but the
-BSD, MIT and UoI/NCSA licenses do not.
-
-* The AFL includes the warranty by the licensor that it either owns the
-copyright or that it is distributing the software under a license. None of
-the other licenses contain that warranty. All other warranties are disclaimed,
-as is the case for the other licenses.
-
-* The AFL is itself copyrighted (with the right granted to copy and distribute
-without modification). This ensures that the owner of the copyright to the
-license will control changes. The Apache license contains a copyright notice,
-but the BSD, MIT and UoI/NCSA licenses do not.
---
-START OF GNU GENERAL PUBLIC LICENSE
---
-
- GNU GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users. This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it. (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.) You can apply it to
-your programs, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
- For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have. You must make sure that they, too, receive or can get the
-source code. And you must show them these terms so they know their
-rights.
-
- We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
- Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software. If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary. To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-
- GNU GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License. The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language. (Hereinafter, translation is included without limitation in
-the term "modification".) Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
- 1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
- 2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) You must cause the modified files to carry prominent notices
- stating that you changed the files and the date of any change.
-
- b) You must cause any work that you distribute or publish, that in
- whole or in part contains or is derived from the Program or any
- part thereof, to be licensed as a whole at no charge to all third
- parties under the terms of this License.
-
- c) If the modified program normally reads commands interactively
- when run, you must cause it, when started running for such
- interactive use in the most ordinary way, to print or display an
- announcement including an appropriate copyright notice and a
- notice that there is no warranty (or else, saying that you provide
- a warranty) and that users may redistribute the program under
- these conditions, and telling the user how to view a copy of this
- License. (Exception: if the Program itself is interactive but
- does not normally print such an announcement, your work based on
- the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
- a) Accompany it with the complete corresponding machine-readable
- source code, which must be distributed under the terms of Sections
- 1 and 2 above on a medium customarily used for software interchange; or,
-
- b) Accompany it with a written offer, valid for at least three
- years, to give any third party, for a charge no more than your
- cost of physically performing source distribution, a complete
- machine-readable copy of the corresponding source code, to be
- distributed under the terms of Sections 1 and 2 above on a medium
- customarily used for software interchange; or,
-
- c) Accompany it with the information you received as to the offer
- to distribute corresponding source code. (This alternative is
- allowed only for noncommercial distribution and only if you
- received the program in object code or executable form with such
- an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it. For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable. However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License. Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
- 5. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Program or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
- 6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all. For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded. In such case, this License incorporates
-the limitation as if written in the body of this License.
-
- 9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time. Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation. If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
- 10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission. For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this. Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
- NO WARRANTY
-
- 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
- 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
- END OF TERMS AND CONDITIONS
-
- How to Apply These Terms to Your New Programs
-
- If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
- To do so, attach the following notices to the program. It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-
- Copyright (C)
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
- Gnomovision version 69, Copyright (C) year name of author
- Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
- This is free software, and you are welcome to redistribute it
- under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License. Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary. Here is a sample; alter the names:
-
- Yoyodyne, Inc., hereby disclaims all copyright interest in the program
- `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
- , 1 April 1989
- Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs. If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library. If this is what you want to do, use the GNU Library General
-Public License instead of this License.
diff --git a/indra/newview/llvoiceclient.cpp b/indra/newview/llvoiceclient.cpp
index 7a96fe309..0362adaf4 100644
--- a/indra/newview/llvoiceclient.cpp
+++ b/indra/newview/llvoiceclient.cpp
@@ -1118,6 +1118,7 @@ LLVoiceClient::LLVoiceClient()
mMuteMic = false;
mSessionTerminateRequested = false;
mRelogRequested = false;
+ mConnected = false;
mCommandCookie = 0;
mCurrentParcelLocalID = 0;
mLoginRetryCount = 0;
From baad415f0da61c0917ecf334580b7d5d6e524d82 Mon Sep 17 00:00:00 2001
From: Siana Gearz
Date: Wed, 29 Feb 2012 13:50:04 +0100
Subject: [PATCH 22/35] Correcting broken link icon, killing unused files
---
indra/newview/CMakeLists.txt | 2 -
indra/newview/emerald.cpp | 593 ------------------
indra/newview/emerald.h | 107 ----
indra/newview/llinventoryicon.cpp | 2 +-
.../{Inv_Invalid.png => inv_invalid.png} | Bin
.../{inv_link_Item.tga => inv_link_item.tga} | Bin
...em_broken.tga => inv_link_item_broken.tga} | Bin
7 files changed, 1 insertion(+), 703 deletions(-)
delete mode 100644 indra/newview/emerald.cpp
delete mode 100644 indra/newview/emerald.h
rename indra/newview/skins/default/textures/{Inv_Invalid.png => inv_invalid.png} (100%)
rename indra/newview/skins/default/textures/{inv_link_Item.tga => inv_link_item.tga} (100%)
rename indra/newview/skins/default/textures/{inv_link_Item_broken.tga => inv_link_item_broken.tga} (100%)
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 7954b6e8d..640763df4 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -99,7 +99,6 @@ set(viewer_SOURCE_FILES
ascentprefsvan.cpp
dhparam.cpp
dsaparam.cpp
- emerald.cpp
emeraldboobutils.cpp
dofloaterhex.cpp
dohexeditor.cpp
@@ -584,7 +583,6 @@ set(viewer_HEADER_FILES
ascentprefschat.h
ascentprefssys.h
ascentprefsvan.h
- emerald.h
emeraldboobutils.h
dofloaterhex.h
dohexeditor.h
diff --git a/indra/newview/emerald.cpp b/indra/newview/emerald.cpp
deleted file mode 100644
index c2a31a65f..000000000
--- a/indra/newview/emerald.cpp
+++ /dev/null
@@ -1,593 +0,0 @@
-// Copyright (c)2009 Thomas Shikami
-//
-// Permission to use, copy, modify, and/or distribute this software for any
-// purpose with or without fee is hereby granted, provided that the above
-// copyright notice and this permission notice appear in all copies.
-//
-// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
-// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
-// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
-// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
-// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
-// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-
-#include "llviewerprecompiledheaders.h"
-#include "emerald.h"
-#include
-#include
-
-#include
-#include
-#include
-
-//-- Ascii85 encoder and decoder
-
-typedef unsigned int U32;
-
-static void encodeU32(unsigned int in, char *out)
-{
- out[4] = char(in % 85) + char(33);
- in /= 85;
- out[3] = char(in % 85) + char(33);
- in /= 85;
- out[2] = char(in % 85) + char(33);
- in /= 85;
- out[1] = char(in % 85) + char(33);
- in /= 85;
- out[0] = char(in % 85) + char(33);
-}
-
-static unsigned int decodeU32(const char *in)
-{
- U32 out;
-
- out = U32(in[0] - 33);
- out *= 85;
- out += U32(in[1] - 33);
- out *= 85;
- out += U32(in[2] - 33);
- out *= 85;
- out += U32(in[3] - 33);
- out *= 85;
- out += U32(in[4] - 33);
-
- return out;
-}
-
-// static
-std::string EAscii85::encode(const std::vector &in)
-{
- std::ostringstream out;
- U32 tuple;
- int count;
- char block[6];
- block[5] = '\0';
-
- out << "<~";
-
- count = 0;
- tuple = 0;
- for(size_t i = 0; i < in.size(); i++)
- {
- tuple <<= 8;
- tuple += in[i];
- if(++count == 4)
- {
- if(tuple == 0)
- {
- out << "z";
- }
- else
- {
- encodeU32(tuple, block);
- out << block;
- }
- count = 0;
- }
- }
-
- switch(count)
- {
- case 1:
- tuple <<= 8;
- tuple += 255;
- // pass through
- case 2:
- tuple <<= 8;
- tuple += 255;
- // pass through
- case 3:
- tuple <<= 8;
- tuple += 255;
- }
-
- encodeU32(tuple, block);
-
- switch(count)
- {
- case 1:
- block[2] = '\0';
- break;
- case 2:
- block[3] = '\0';
- break;
- case 3:
- block[4] = '\0';
- break;
- }
-
- if(count > 0)
- out << block;
-
- out << "~>";
-
- return out.str();
-}
-
-// static
-std::vector EAscii85::decode(const std::string &in)
-{
- std::vector out;
- size_t len;
- int count = 0;
- char block[6];
- block[5] = '\0';
- U32 tuple;
-
- // approximate length
- len = in.length() / 5 * 4;
-
- out.clear();
-
- if(in.length() < 4) return out;
-
- std::string::const_iterator i = in.begin();
-
- if(*i != '<') return out;
- i++;
- if(*i != '~') return out;
- i++;
-
- out.reserve(len);
-
- for(; i != in.end(); i++)
- {
- char c = *i;
-
- if(c >= '!' && c < 'v')
- {
- block[count++] = c;
- }
-
- switch(c)
- {
- case 'z':
- if(count == 1)
- {
- for(count = 0; count < 4; count++)
- out.push_back(0);
- count = 0;
- }
- break;
- case '~':
- if(count > 1)
- {
- switch(count)
- {
- case 2:
- block[2] = 'u';
- case 3:
- block[3] = 'u';
- case 4:
- block[4] = 'u';
- }
- tuple = decodeU32(block);
- for(;count > 1; count--)
- {
- out.push_back(char(tuple >> 24));
- tuple <<= 8;
- }
- count = 0;
- }
- }
-
- if(count == 5)
- {
- tuple = decodeU32(block);
- for(count = 0; count < 4; count++)
- {
- out.push_back(char(tuple >> 24));
- tuple <<= 8;
- }
- count = 0;
- }
- }
-
- return out;
-}
-
-//-- AES wrapper
-
-class EAESEncrypt::EncryptImpl {
-public:
- EncryptImpl(const unsigned char *key, const unsigned char *iv);
- ~EncryptImpl();
-
- std::vector encrypt(const std::string &in);
-
- EVP_CIPHER_CTX ctx;
-};
-
-EAESEncrypt::EAESEncrypt(const unsigned char *key, const unsigned char *iv)
-{
- mEncryptImpl = new EAESEncrypt::EncryptImpl(key, iv);
-}
-
-EAESEncrypt::EAESEncrypt(const std::vector &key, const std::vector &iv)
-{
- mEncryptImpl = new EAESEncrypt::EncryptImpl(&key[0], &iv[0]);
-}
-
-EAESEncrypt::~EAESEncrypt()
-{
- delete mEncryptImpl;
-}
-
-std::vector EAESEncrypt::encrypt(const std::string &in)
-{
- return mEncryptImpl->encrypt(in);
-}
-
-EAESEncrypt::EncryptImpl::EncryptImpl(const unsigned char *key, const unsigned char *iv)
-{
- EVP_CIPHER_CTX_init(&ctx);
- EVP_EncryptInit_ex(&ctx, EVP_aes_128_cbc(), NULL, key, iv);
-}
-
-EAESEncrypt::EncryptImpl::~EncryptImpl()
-{
- EVP_CIPHER_CTX_cleanup(&ctx);
-}
-
-std::vector EAESEncrypt::EncryptImpl::encrypt(const std::string &in)
-{
- std::vector out;
- int outlen;
- int tmplen;
-
- out.resize(in.length() + 32);
-
- EVP_EncryptUpdate(&ctx, &out[0], &outlen, reinterpret_cast(in.c_str()), in.length());
- EVP_EncryptFinal_ex(&ctx, &out[outlen], &tmplen);
-
- out.resize(outlen + tmplen);
-
- return out;
-}
-
-class EAESDecrypt::DecryptImpl {
-public:
- DecryptImpl(const unsigned char *key, const unsigned char *iv);
- ~DecryptImpl();
-
- std::string decrypt(const std::vector &in);
-
- EVP_CIPHER_CTX ctx;
-};
-
-EAESDecrypt::EAESDecrypt(const unsigned char *key, const unsigned char *iv)
-{
- mDecryptImpl = new EAESDecrypt::DecryptImpl(key, iv);
-}
-
-EAESDecrypt::EAESDecrypt(const std::vector &key, const std::vector &iv)
-{
- mDecryptImpl = new EAESDecrypt::DecryptImpl(&key[0], &iv[0]);
-}
-
-EAESDecrypt::~EAESDecrypt()
-{
- delete mDecryptImpl;
-}
-
-EAESDecrypt::DecryptImpl::DecryptImpl(const unsigned char *key, const unsigned char *iv)
-{
- EVP_CIPHER_CTX_init(&ctx);
- EVP_DecryptInit_ex(&ctx, EVP_aes_128_cbc(), NULL, key, iv);
-}
-
-EAESDecrypt::DecryptImpl::~DecryptImpl()
-{
- EVP_CIPHER_CTX_cleanup(&ctx);
-}
-
-std::string EAESDecrypt::decrypt(const std::vector &in)
-{
- return mDecryptImpl->decrypt(in);
-}
-
-std::string EAESDecrypt::DecryptImpl::decrypt(const std::vector &in)
-{
- std::vector out;
- int outlen;
- int tmplen;
-
- if(in.size() == 0) return "";
-
- out.resize(in.size() + 32);
-
- EVP_DecryptUpdate(&ctx, &out[0], &outlen, &in[0], in.size());
- EVP_DecryptFinal_ex(&ctx, &out[outlen], &tmplen);
-
- out.resize(outlen + tmplen);
-
- if(out.empty())
- return "";
-
- return std::string(reinterpret_cast(&out[0]), out.size());
-}
-
-EGenKey::EGenKey(const std::string &password, const unsigned char *salt)
-{
- EVP_BytesToKey(EVP_aes_128_cbc(), EVP_sha1(), salt,
- reinterpret_cast(password.c_str()), password.length(),
- 1000, mKey, mIv);
-}
-
-EGenKey::~EGenKey()
-{
- memset(mKey, 0, 16);
- memset(mIv, 0, 16);
-}
-
-DH *get_dh2048();
-
-class BigNum
-{
-public:
- BigNum(const std::vector &bin)
- {
- mBN = BN_bin2bn(&(bin[0]), bin.size(), NULL);
- }
-
- BigNum()
- {
- mBN = BN_new();
- }
-
- BigNum(const BigNum &other)
- {
- mBN = BN_dup(*other);
- }
-
- BigNum(BIGNUM *bn)
- {
- mBN = BN_dup(bn);
- }
-
- ~BigNum()
- {
- BN_clear_free(mBN);
- mBN = NULL;
- }
-
- friend BIGNUM* operator*(const BigNum&);
-
- BigNum& operator=(const std::vector &bin)
- {
- mBN = BN_bin2bn(&(bin[0]), bin.size(), mBN);
- return *this;
- }
-
- BigNum& operator=(const BigNum& other)
- {
- BN_copy(mBN, *other);
- return *this;
- }
-
- void to(std::vector &dest)
- {
- dest.resize(BN_num_bytes(mBN));
- BN_bn2bin(mBN, &(dest[0]));
- }
-
- BIGNUM* to(BIGNUM *ret)
- {
- return BN_copy(ret, mBN);
- }
-
- BIGNUM* dup()
- {
- return BN_dup(mBN);
- }
-
- static BIGNUM* dup(const std::vector &bin)
- {
- return BN_bin2bn(&(bin[0]), bin.size(), NULL);
- }
-
-private:
- BIGNUM *mBN;
-};
-
-BIGNUM* operator*(const BigNum& o) { return o.mBN; }
-
-class EDH::DHImpl
-{
-public:
- DH *mDH;
-};
-
-EDH::EDH(const std::vector &priv_key)
-{
- mDHImpl = new DHImpl();
-
- mDHImpl->mDH = get_dh2048();
- mDHImpl->mDH->priv_key = BigNum::dup(priv_key);
-
- DH_generate_key(mDHImpl->mDH);
-}
-
-EDH::EDH()
-{
- mDHImpl = new DHImpl();
-
- mDHImpl->mDH = get_dh2048();
-
- DH_generate_key(mDHImpl->mDH);
-}
-
-EDH::~EDH()
-{
- if(mDHImpl)
- {
- if(mDHImpl->mDH)
- {
- mDHImpl->mDH->priv_key = NULL;
- mDHImpl->mDH->pub_key = NULL;
- DH_free(mDHImpl->mDH);
- mDHImpl->mDH = NULL;
- }
- delete mDHImpl;
- mDHImpl = NULL;
- }
-}
-
-void EDH::secretTo(std::vector &secret)
-{
- BigNum(mDHImpl->mDH->priv_key).to(secret);
-}
-
-void EDH::publicTo(std::vector &pub)
-{
- BigNum(mDHImpl->mDH->pub_key).to(pub);
-}
-
-std::vector EDH::computeKey(const std::vector &other_pub)
-{
- std::vector temp;
- BigNum pub(other_pub);
- temp.resize(DH_size(mDHImpl->mDH));
-
- DH_compute_key(&(temp[0]), *pub, mDHImpl->mDH);
-
- return temp;
-}
-
-DSA *get_dsa2048();
-
-class EDSA::DSAImpl
-{
-public:
- DSA *mDSA;
-};
-
-EDSA::EDSA()
-{
- mDSAImpl = new DSAImpl();
- mDSAImpl->mDSA = get_dsa2048();
-}
-
-EDSA::EDSA(const std::vector &secret)
-{
- mDSAImpl = new DSAImpl();
-
- const unsigned char *buf = &(secret[0]);
-
- mDSAImpl->mDSA = d2i_DSAPrivateKey(NULL, &buf, secret.size());
-}
-
-std::vector EDSA::generateSecret()
-{
- DSA_generate_key(mDSAImpl->mDSA);
-
- std::vector temp;
-
- int size = i2d_DSAPrivateKey(mDSAImpl->mDSA, NULL);
-
- temp.resize(size);
-
- unsigned char *buf = &(temp[0]);
-
- i2d_DSAPrivateKey(mDSAImpl->mDSA, &buf);
-
- return temp;
-}
-
-std::vector EDSA::getPublic()
-{
- std::vector temp;
-
- mDSAImpl->mDSA->write_params = 0;
-
- int size = i2d_DSAPublicKey(mDSAImpl->mDSA, NULL);
-
- temp.resize(size);
-
- unsigned char *buf = &(temp[0]);
-
- i2d_DSAPublicKey(mDSAImpl->mDSA, &buf);
-
- return temp;
-}
-
-void EDSA::setPublic(const std::vector &pub)
-{
- const unsigned char *buf = &(pub[0]);
-
- d2i_DSAPublicKey(&mDSAImpl->mDSA, &buf, pub.size());
-}
-
-bool EDSA::verify(const std::vector &dgst, const std::vector &sig)
-{
- bool result = false;
-
- if(DSA_verify(0, &(dgst[0]), dgst.size(), &(sig[0]), sig.size(), mDSAImpl->mDSA) == 1)
- {
- result = true;
- }
-
- return result;
-}
-
-// static
-bool EDSA::verify(const std::vector &dgst, const std::vector &sig, const std::vector &pub)
-{
- const unsigned char *buf = &(pub[0]);
- DSA *dsa;
- bool result = false;
-
- dsa = get_dsa2048();
-
- d2i_DSAPublicKey(&dsa, &buf, pub.size());
-
- if(DSA_verify(0, &(dgst[0]), dgst.size(), &(sig[0]), sig.size(), dsa) == 1)
- {
- result = true;
- }
-
- DSA_free(dsa);
-
- return result;
-}
-
-std::vector EDSA::sign(const std::vector &dgst)
-{
- std::vector sig;
- unsigned int size = DSA_size(mDSAImpl->mDSA);
-
- sig.resize(size);
-
- DSA_sign(0, &(dgst[0]), dgst.size(), &(sig[0]), &size, mDSAImpl->mDSA);
-
- sig.resize(size);
-
- return sig;
-}
-
-EDSA::~EDSA()
-{
- delete mDSAImpl;
- mDSAImpl = NULL;
-}
diff --git a/indra/newview/emerald.h b/indra/newview/emerald.h
deleted file mode 100644
index a4d2126c6..000000000
--- a/indra/newview/emerald.h
+++ /dev/null
@@ -1,107 +0,0 @@
-// Copyright (c)2009 Thomas Shikami
-//
-// Permission to use, copy, modify, and/or distribute this software for any
-// purpose with or without fee is hereby granted, provided that the above
-// copyright notice and this permission notice appear in all copies.
-//
-// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
-// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
-// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
-// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
-// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
-// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-
-#include
-#include
-
-class EAscii85 {
-private:
- EAscii85() { }
-public:
- static std::string encode(const std::vector &in);
- static std::vector decode(const std::string &in);
-};
-
-class EAESEncrypt {
-public:
- EAESEncrypt(const unsigned char *key, const unsigned char *iv);
- EAESEncrypt(const std::vector &key, const std::vector &iv);
- ~EAESEncrypt();
-
- std::vector encrypt(const std::string &in);
-
-private:
- EAESEncrypt(const EAESEncrypt&) {}
-
- class EncryptImpl;
-
- EncryptImpl *mEncryptImpl;
-};
-
-class EAESDecrypt {
-public:
- EAESDecrypt(const unsigned char *key, const unsigned char *iv);
- EAESDecrypt(const std::vector &key, const std::vector &iv);
- ~EAESDecrypt();
-
- std::string decrypt(const std::vector &in);
-
-private:
- EAESDecrypt(const EAESDecrypt&) {}
- class DecryptImpl;
-
- DecryptImpl *mDecryptImpl;
-};
-
-class EGenKey {
-public:
- EGenKey(const std::string &password, const unsigned char *salt = 0);
- ~EGenKey();
-
- const unsigned char *key() const { return mKey; }
- const unsigned char *iv() const { return mIv; }
-
-private:
- unsigned char mKey[16];
- unsigned char mIv[16];
-};
-
-class EDH {
-public:
- EDH(const std::vector &secret);
- EDH();
- ~EDH();
-
- void secretTo(std::vector &secret);
- void publicTo(std::vector &pub);
- std::vector computeKey(const std::vector &other_pub);
-
-private:
- EDH(const EDH&) {}
-
- class DHImpl;
-
- DHImpl *mDHImpl;
-};
-
-class EDSA {
-public:
- EDSA(const std::vector &secret);
- EDSA();
- ~EDSA();
-
- std::vector getPublic();
- void setPublic(const std::vector &pub);
- std::vector generateSecret();
- static bool verify(const std::vector &dgst, const std::vector &sig, const std::vector &pub);
- bool verify(const std::vector &dgst, const std::vector &sig);
- std::vector sign(const std::vector &dgst);
-
-private:
- EDSA(const EDSA&) {}
-
- class DSAImpl;
-
- DSAImpl *mDSAImpl;
-};
diff --git a/indra/newview/llinventoryicon.cpp b/indra/newview/llinventoryicon.cpp
index aefc0b4ab..9d55023d6 100644
--- a/indra/newview/llinventoryicon.cpp
+++ b/indra/newview/llinventoryicon.cpp
@@ -88,7 +88,7 @@ LLIconDictionary::LLIconDictionary()
addEntry(LLInventoryIcon::ICONNAME_LINKFOLDER, new IconEntry("inv_link_folder.tga"));
addEntry(LLInventoryIcon::ICONNAME_MESH, new IconEntry("inv_item_mesh.tga"));
- addEntry(LLInventoryIcon::ICONNAME_INVALID, new IconEntry("Inv_Invalid.png"));
+ addEntry(LLInventoryIcon::ICONNAME_INVALID, new IconEntry("inv_invalid.png"));
addEntry(LLInventoryIcon::ICONNAME_NONE, new IconEntry("NONE"));
}
diff --git a/indra/newview/skins/default/textures/Inv_Invalid.png b/indra/newview/skins/default/textures/inv_invalid.png
similarity index 100%
rename from indra/newview/skins/default/textures/Inv_Invalid.png
rename to indra/newview/skins/default/textures/inv_invalid.png
diff --git a/indra/newview/skins/default/textures/inv_link_Item.tga b/indra/newview/skins/default/textures/inv_link_item.tga
similarity index 100%
rename from indra/newview/skins/default/textures/inv_link_Item.tga
rename to indra/newview/skins/default/textures/inv_link_item.tga
diff --git a/indra/newview/skins/default/textures/inv_link_Item_broken.tga b/indra/newview/skins/default/textures/inv_link_item_broken.tga
similarity index 100%
rename from indra/newview/skins/default/textures/inv_link_Item_broken.tga
rename to indra/newview/skins/default/textures/inv_link_item_broken.tga
From a7d70878b7c23467cd04548690e4a84584dd0fe8 Mon Sep 17 00:00:00 2001
From: Siana Gearz
Date: Wed, 29 Feb 2012 16:03:11 +0100
Subject: [PATCH 23/35] Log threadcount together with memory
---
indra/llcommon/llthread.cpp | 5 ++++-
indra/llcommon/llthread.h | 4 +++-
indra/newview/app_settings/settings.xml | 2 +-
indra/newview/llviewerdisplay.cpp | 1 +
4 files changed, 9 insertions(+), 3 deletions(-)
diff --git a/indra/llcommon/llthread.cpp b/indra/llcommon/llthread.cpp
index 8ae458c1c..85d88f01d 100644
--- a/indra/llcommon/llthread.cpp
+++ b/indra/llcommon/llthread.cpp
@@ -67,6 +67,7 @@ U32 ll_thread_local local_thread_ID = 0;
#endif
U32 LLThread::sIDIter = 0;
+LLAtomicS32 LLThread::sCount = 0;
LL_COMMON_API void assert_main_thread()
{
@@ -125,6 +126,8 @@ LLThread::LLThread(std::string const& name) :
mThreadLocalData(NULL)
{
mID = ++sIDIter;
+ sCount++;
+ llassert(sCount <= 50);
mRunCondition = new LLCondition;
}
@@ -175,7 +178,7 @@ void LLThread::shutdown()
}
mAPRThreadp = NULL;
}
-
+ sCount--;
delete mRunCondition;
mRunCondition = 0;
}
diff --git a/indra/llcommon/llthread.h b/indra/llcommon/llthread.h
index f0e4f39f5..9ab7829c6 100644
--- a/indra/llcommon/llthread.h
+++ b/indra/llcommon/llthread.h
@@ -73,6 +73,7 @@ class LL_COMMON_API LLThread
{
private:
static U32 sIDIter;
+ static LLAtomicS32 sCount;
public:
typedef enum e_thread_status
@@ -90,6 +91,7 @@ public:
bool isStopped() const { return (STOPPED == mStatus); }
static U32 currentID(); // Return ID of current thread
+ static S32 getCount() { return sCount; }
static void yield(); // Static because it can be called by the main thread, which doesn't have an LLThread data structure.
public:
@@ -129,7 +131,7 @@ protected:
apr_thread_t *mAPRThreadp;
volatile EThreadStatus mStatus;
U32 mID;
-
+
friend void LLThreadLocalData::create(LLThread* threadp);
LLThreadLocalData* mThreadLocalData;
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index ecd22b0ae..f9b809665 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -8156,7 +8156,7 @@
Type
F32
Value
- 600.0
+ 30.0
MemoryPrivatePoolEnabled
diff --git a/indra/newview/llviewerdisplay.cpp b/indra/newview/llviewerdisplay.cpp
index a78f98f2d..949235013 100644
--- a/indra/newview/llviewerdisplay.cpp
+++ b/indra/newview/llviewerdisplay.cpp
@@ -228,6 +228,7 @@ void display_stats()
gMemoryAllocated = LLMemory::getCurrentRSS();
U32 memory = (U32)(gMemoryAllocated / (1024*1024));
llinfos << llformat("MEMORY: %d MB", memory) << llendl;
+ llinfos << "THREADS: "<< LLThread::getCount() << llendl;
LLMemory::logMemoryInfo(TRUE) ;
gRecentMemoryTime.reset();
}
From ecc396219d69a1c0a51b32d9b577451a68fa2acf Mon Sep 17 00:00:00 2001
From: Siana Gearz
Date: Wed, 29 Feb 2012 17:22:24 +0100
Subject: [PATCH 24/35] I can't shake the feeling that timesliced cache
clearing is botched. Better safe, byebye.
---
indra/newview/lltexturecache.cpp | 183 ++++++++-----------------------
indra/newview/lltexturecache.h | 43 +++-----
2 files changed, 61 insertions(+), 165 deletions(-)
diff --git a/indra/newview/lltexturecache.cpp b/indra/newview/lltexturecache.cpp
index b239823af..60ced2e4d 100644
--- a/indra/newview/lltexturecache.cpp
+++ b/indra/newview/lltexturecache.cpp
@@ -2,31 +2,25 @@
* @file lltexturecache.cpp
* @brief Object which handles local texture caching
*
- * $LicenseInfo:firstyear=2000&license=viewergpl$
- *
- * Copyright (c) 2000-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2000&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
@@ -251,9 +245,9 @@ bool LLTextureCacheLocalFileWorker::doRead()
}
}
#else
- if (!mDataSize || mDataSize > local_size/* - mOffset*/)
+ if (!mDataSize || mDataSize > local_size - mOffset)
{
- mDataSize = local_size/* - mOffset*/;
+ mDataSize = local_size - mOffset;
}
mReadData = (U8*)ALLOCATE_MEM(LLImageBase::getPrivatePool(), mDataSize);
@@ -333,6 +327,7 @@ bool LLTextureCacheRemoteWorker::doRead()
// First state / stage : find out if the file is local
if (mState == INIT)
{
+#if 0
std::string filename = mCache->getLocalFileName(mID);
// Is it a JPEG2000 file?
{
@@ -367,20 +362,24 @@ bool LLTextureCacheRemoteWorker::doRead()
}
// Determine the next stage: if we found a file, then LOCAL else CACHE
mState = (local_size > 0 ? LOCAL : CACHE);
+
+ llassert_always(mState == CACHE) ;
+#else
+ mState = CACHE;
+#endif
}
// Second state / stage : if the file is local, load it and leave
if (!done && (mState == LOCAL))
{
llassert(local_size != 0); // we're assuming there is a non empty local file here...
- if (!mDataSize || mDataSize > local_size/* - mOffset*/)
+ if (!mDataSize || mDataSize > local_size - mOffset)
{
- mDataSize = local_size/* - mOffset*/;
+ mDataSize = local_size - mOffset;
}
// Allocate read buffer
mReadData = (U8*)ALLOCATE_MEM(LLImageBase::getPrivatePool(), mDataSize);
- S32 bytes_read = LLAPRFile::readEx(local_filename,
- mReadData, mOffset, mDataSize);
+ S32 bytes_read = LLAPRFile::readEx(local_filename, mReadData, mOffset, mDataSize);
if (bytes_read != mDataSize)
{
llwarns << "Error reading file from local cache: " << local_filename
@@ -513,19 +512,9 @@ bool LLTextureCacheRemoteWorker::doRead()
}
else
{
- if (mImageSize > TEXTURE_CACHE_ENTRY_SIZE)
- {
- LL_DEBUGS("TextureCache") << "LLTextureCacheWorker: no body for texture: " << mID << LL_ENDL;
- FREE_MEM(LLImageBase::getPrivatePool(), mReadData);
- mReadData = NULL;
- mDataSize = -1; // failed
- done = true;
- }
- else
- {
// No body, we're done.
mDataSize = llmax(TEXTURE_CACHE_ENTRY_SIZE - mOffset, 0);
- }
+ lldebugs << "No body file for: " << filename << llendl;
}
// Nothing else to do at that point...
done = true;
@@ -759,7 +748,6 @@ LLTextureCache::~LLTextureCache()
{
clearDeleteList();
writeUpdatedEntries();
- purgeTextureFilesTimeSliced(true); // VWR-3878 - NB - force-flush all pending file deletes
}
//////////////////////////////////////////////////////////////////////////////
@@ -1427,21 +1415,22 @@ void LLTextureCache::readHeaderCache()
}
}
}
- if (num_entries - empty_entries > sCacheMaxEntries)
+ if (num_entries > sCacheMaxEntries)
{
// Special case: cache size was reduced, need to remove entries
// Note: After we prune entries, we will call this again and create the LRU
U32 entries_to_purge = (num_entries - empty_entries) - sCacheMaxEntries;
llinfos << "Texture Cache Entries: " << num_entries << " Max: " << sCacheMaxEntries << " Empty: " << empty_entries << " Purging: " << entries_to_purge << llendl;
- // We can exit the following loop with the given condition, since if we'd reach the end of the lru set we'd have:
- // purge_list.size() = lru.size() = num_entries - empty_entries = entries_to_purge + sCacheMaxEntries >= entries_to_purge
- // So, it's certain that iter will never reach lru.end() first.
- std::set::iterator iter = lru.begin();
- while (purge_list.size() < entries_to_purge)
+ if (entries_to_purge > 0)
+ {
+ for (std::set::iterator iter = lru.begin(); iter != lru.end(); ++iter)
{
purge_list.insert(iter->second);
- ++iter;
+ if (purge_list.size() >= entries_to_purge)
+ break;
}
+ }
+ llassert_always(purge_list.size() >= entries_to_purge);
}
else
{
@@ -1555,18 +1544,11 @@ void LLTextureCache::purgeAllTextures(bool purge_directories)
void LLTextureCache::purgeTextures(bool validate)
{
- mDoPurge = FALSE;
-
if (mReadOnly)
{
return;
}
- if (!validate && mTexturesSizeTotal <= sCacheMaxTexturesSize)
- {
- return;
- }
-
if (!mThreaded)
{
// *FIX:Mani - watchdog off.
@@ -1582,15 +1564,12 @@ void LLTextureCache::purgeTextures(bool validate)
U32 num_entries = openAndReadEntries(entries);
if (!num_entries)
{
- LLAppViewer::instance()->resumeMainloopTimeout();
return; // nothing to purge
}
- LL_INFOS("TextureCache") << "TEXTURE CACHE: Purging." << LL_ENDL;
-
// Use mTexturesSizeMap to collect UUIDs of textures with bodies
typedef std::set > time_idx_set_t;
- time_idx_set_t time_idx_set;
+ std::set > time_idx_set;
for (size_map_t::iterator iter1 = mTexturesSizeMap.begin();
iter1 != mTexturesSizeMap.end(); ++iter1)
{
@@ -1606,9 +1585,6 @@ void LLTextureCache::purgeTextures(bool validate)
else
{
llerrs << "mTexturesSizeMap / mHeaderIDMap corrupted." << llendl ;
- //clearCorruptedCache();
- //LLAppViewer::instance()->resumeMainloopTimeout();
- //return;
}
}
}
@@ -1661,8 +1637,7 @@ void LLTextureCache::purgeTextures(bool validate)
{
purge_count++;
LL_DEBUGS("TextureCache") << "PURGING: " << filename << LL_ENDL;
- mFilesToDelete.insert(std::make_pair(entries[idx].mID, filename));
- removeEntry(idx, entries[idx], filename, false); // remove the entry but not the file
+ removeEntry(idx, entries[idx], filename) ;
cache_size -= entries[idx].mBodySize;
}
}
@@ -1674,80 +1649,11 @@ void LLTextureCache::purgeTextures(bool validate)
// *FIX:Mani - watchdog back on.
LLAppViewer::instance()->resumeMainloopTimeout();
- mSlicedPurgeTimer.reset();
-
LL_INFOS("TextureCache") << "TEXTURE CACHE:"
<< " PURGED: " << purge_count
<< " ENTRIES: " << num_entries
- << " CACHE SIZE: " << mTexturesSizeTotal / (1024 * 1024) << " MB"
+ << " CACHE SIZE: " << mTexturesSizeTotal / 1024*1024 << " MB"
<< llendl;
-
-}
-
-void LLTextureCache::purgeTextureFilesTimeSliced(bool force)
-{
- const F32 delay_between_passes = 2.0f; // seconds
- const F32 max_time_per_pass = 0.1f; // seconds
-
- if (!force && mSlicedPurgeTimer.getElapsedTimeF32() <= delay_between_passes)
- {
- return;
- }
-
- if (!mFilesToDelete.empty())
- {
- LL_INFOS("TextureCache") << "time sliced purging with " << mFilesToDelete.size()
- << " files scheduled for deletion" << LL_ENDL;
-
- LLMutexLock lock(&mHeaderMutex);
- mSlicedPurgeTimer.reset();
- U32 purged = 0;
- std::string filename;
-
- for (LLTextureCache::purge_map_t::iterator iter = mFilesToDelete.begin(); iter != mFilesToDelete.end(); )
- {
- LLTextureCache::purge_map_t::iterator curiter = iter++;
- // Only remove files for textures that have not been cached again
- // since we selected them for removal !
- if (mHeaderIDMap.find(curiter->first) == mHeaderIDMap.end())
- {
- filename = curiter->second;
- if(LLAPRFile::isExist(filename))
- LLAPRFile::remove(filename);
- }
- else
- {
- LL_DEBUGS("TextureCache") << curiter->second
- << " selected for removal, but texture cached again since !"
- << LL_ENDL;
- }
- mFilesToDelete.erase(curiter);
- purged++;
-
- if (!force && mSlicedPurgeTimer.getElapsedTimeF32() > max_time_per_pass)
- {
- break;
- }
- }
-
- if (mFilesToDelete.empty())
- {
- LL_INFOS("TextureCache") << "time sliced purge finished with " << purged
- << " files deleted in "
- << mSlicedPurgeTimer.getElapsedTimeF32()
- << "s" << LL_ENDL;
- }
- else
- {
- LL_INFOS("TextureCache") << "time sliced purge: " << purged
- << " files deleted in "
- << mSlicedPurgeTimer.getElapsedTimeF32()
- << "s (" << mFilesToDelete.size()
- << " files left for next pass)" << LL_ENDL;
- }
-
- mSlicedPurgeTimer.reset();
- }
}
//////////////////////////////////////////////////////////////////////////////
@@ -1888,11 +1794,12 @@ LLTextureCache::handle_t LLTextureCache::writeToCache(const LLUUID& id, U32 prio
}
if (mDoPurge)
{
+ // NOTE: This may cause an occasional hiccup,
+ // but it really needs to be done on the control thread
+ // (i.e. here)
purgeTextures(false);
+ mDoPurge = FALSE;
}
-
- purgeTextureFilesTimeSliced(); // VWR-3878 - NB - purge textures from cache in a non-hiccup-way
-
LLMutexLock lock(&mWorkersMutex);
LLTextureCacheWorker* worker = new LLTextureCacheRemoteWorker(this, priority, id,
data, datasize, 0,
@@ -1951,7 +1858,7 @@ void LLTextureCache::removeCachedTexture(const LLUUID& id)
}
//called after mHeaderMutex is locked.
-void LLTextureCache::removeEntry(S32 idx, Entry& entry, std::string& filename, bool remove_file)
+void LLTextureCache::removeEntry(S32 idx, Entry& entry, std::string& filename)
{
bool file_maybe_exists = true; // Always attempt to remove when idx is invalid.
@@ -1969,16 +1876,16 @@ void LLTextureCache::removeEntry(S32 idx, Entry& entry, std::string& filename, b
}
}
- mTexturesSizeTotal -= entry.mBodySize;
entry.mImageSize = -1;
entry.mBodySize = 0;
mHeaderIDMap.erase(entry.mID);
mTexturesSizeMap.erase(entry.mID);
+ mTexturesSizeTotal -= entry.mBodySize;
mFreeList.insert(idx);
}
- if (remove_file && file_maybe_exists)
+ if (file_maybe_exists)
{
LLAPRFile::remove(filename);
}
diff --git a/indra/newview/lltexturecache.h b/indra/newview/lltexturecache.h
index 54f52df6a..991d8598b 100644
--- a/indra/newview/lltexturecache.h
+++ b/indra/newview/lltexturecache.h
@@ -2,31 +2,25 @@
* @file lltexturecache.h
* @brief Object for managing texture cachees.
*
- * $LicenseInfo:firstyear=2000&license=viewergpl$
- *
- * Copyright (c) 2000-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2000&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
@@ -154,7 +148,6 @@ private:
void clearCorruptedCache();
void purgeAllTextures(bool purge_directories);
void purgeTextures(bool validate);
- void purgeTextureFilesTimeSliced(bool force = false);
LLAPRFile* openHeaderEntriesFile(bool readonly, S32 offset);
void closeHeaderEntriesFile();
void readEntriesHeader();
@@ -166,7 +159,7 @@ private:
void writeEntriesAndClose(const std::vector& entries);
void readEntryFromHeaderImmediately(S32& idx, Entry& entry) ;
void writeEntryToHeaderImmediately(S32& idx, Entry& entry, bool write_header = false) ;
- void removeEntry(S32 idx, Entry& entry, std::string& filename, bool remove_file = true);
+ void removeEntry(S32 idx, Entry& entry, std::string& filename);
void removeCachedTexture(const LLUUID& id) ;
S32 getHeaderCacheEntry(const LLUUID& id, Entry& entry);
S32 setHeaderCacheEntry(const LLUUID& id, Entry& entry, S32 imagesize, S32 datasize);
@@ -192,10 +185,6 @@ private:
typedef std::vector, bool> > responder_list_t;
responder_list_t mCompletedList;
- typedef std::map purge_map_t;
- purge_map_t mFilesToDelete;
- LLTimer mSlicedPurgeTimer;
-
BOOL mReadOnly;
// HEADERS (Include first mip)
From ab26e1008fafa4ac2e12f9d4cf526717d2c0f6aa Mon Sep 17 00:00:00 2001
From: Siana Gearz
Date: Wed, 29 Feb 2012 19:05:19 +0100
Subject: [PATCH 25/35] RLVa crash fix, thx Kitty!
---
indra/newview/rlvcommon.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/indra/newview/rlvcommon.cpp b/indra/newview/rlvcommon.cpp
index 5943f4af8..1fe03bb54 100644
--- a/indra/newview/rlvcommon.cpp
+++ b/indra/newview/rlvcommon.cpp
@@ -467,7 +467,7 @@ bool RlvUtil::sendChatReply(S32 nChannel, const std::string& strUTF8Text)
gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
gMessageSystem->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
gMessageSystem->nextBlockFast(_PREHASH_ChatData);
- gMessageSystem->addStringFast(_PREHASH_Message, strUTF8Text);
+ gMessageSystem->addStringFast(_PREHASH_Message, utf8str_truncate(strUTF8Text, MAX_MSG_STR_LEN));
gMessageSystem->addU8Fast(_PREHASH_Type, CHAT_TYPE_SHOUT);
gMessageSystem->addS32("Channel", nChannel);
gAgent.sendReliableMessage();
From 251b0fa5c07487d416400dfea72816d14fb6641a Mon Sep 17 00:00:00 2001
From: Siana Gearz
Date: Thu, 1 Mar 2012 13:49:47 +0100
Subject: [PATCH 26/35] Memory consumption in statistics floater
---
indra/newview/llfloaterstats.cpp | 6 +--
indra/newview/llviewerdisplay.cpp | 2 +
indra/newview/llviewerstats.cpp | 12 ++++++
indra/newview/sgmemstat.cpp | 68 +++++++++++++++++++++++++++++--
indra/newview/sgmemstat.h | 2 +
5 files changed, 84 insertions(+), 6 deletions(-)
diff --git a/indra/newview/llfloaterstats.cpp b/indra/newview/llfloaterstats.cpp
index 84c637f2c..fa71cfb13 100644
--- a/indra/newview/llfloaterstats.cpp
+++ b/indra/newview/llfloaterstats.cpp
@@ -105,9 +105,9 @@ void LLFloaterStats::buildStats()
stat_barp = stat_viewp->addStat("Allocated memory", &(LLViewerStats::getInstance()->mMallocStat), "DebugStatModeMalloc");
stat_barp->setUnitLabel(" MB");
stat_barp->mMinBar = 0.f;
- stat_barp->mMaxBar = 4000.f;
- stat_barp->mTickSpacing = 100.f;
- stat_barp->mLabelSpacing = 200.f;
+ stat_barp->mMaxBar = 2048.f;
+ stat_barp->mTickSpacing = 128.f;
+ stat_barp->mLabelSpacing = 512.f;
stat_barp->mPerSec = FALSE;
stat_barp->mDisplayMean = FALSE;
}
diff --git a/indra/newview/llviewerdisplay.cpp b/indra/newview/llviewerdisplay.cpp
index 949235013..bf7d50e9f 100644
--- a/indra/newview/llviewerdisplay.cpp
+++ b/indra/newview/llviewerdisplay.cpp
@@ -83,6 +83,7 @@
#include "llwlparammanager.h"
#include "llwaterparammanager.h"
#include "llpostprocess.h"
+#include "sgmemstat.h"
// [RLVa:KB]
#include "rlvhandler.h"
@@ -229,6 +230,7 @@ void display_stats()
U32 memory = (U32)(gMemoryAllocated / (1024*1024));
llinfos << llformat("MEMORY: %d MB", memory) << llendl;
llinfos << "THREADS: "<< LLThread::getCount() << llendl;
+ llinfos << "MALLOC: " << SGMemStat::getPrintableStat() <= mem_stats_freq)
+ {
+ LLViewerStats::getInstance()->mMallocStat.addValue(SGMemStat::getMalloc()/1024.f/1024.f);
+ mem_stats_timer.reset();
+ }
+ }
+
+
#if LL_LCD_COMPILE
bool LCDenabled = gLcdScreen->Enabled();
LLViewerStats::getInstance()->setStat(LLViewerStats::ST_LOGITECH_LCD, LCDenabled);
diff --git a/indra/newview/sgmemstat.cpp b/indra/newview/sgmemstat.cpp
index 27f3cc7cb..0fbe006f6 100644
--- a/indra/newview/sgmemstat.cpp
+++ b/indra/newview/sgmemstat.cpp
@@ -18,14 +18,76 @@
#include "llviewerprecompiledheaders.h"
#include "sgmemstat.h"
+#if 0
bool SGMemStat::haveStat() {
- return false;
+ return false;
}
F32 SGMemStat::getMalloc() {
- return 0.f;
+ return 0.f;
}
U32 SGMemStat::getNumObjects() {
- return 0;
+ return 0;
}
+
+std::string SGMemStat::getPrintableStat() {
+ return std::string();
+}
+
+#else
+
+extern "C" {
+ typedef void (*MallocExtension_GetStats_t)(char* buffer, int buffer_length);
+ typedef int (*MallocExtension_GetNumericProperty_t)(const char* property, size_t* value);
+ //typedef int (*MallocExtension_SetNumericProperty_t)(const char* property, size_t value);
+}
+
+static MallocExtension_GetNumericProperty_t MallocExtension_GetNumericProperty = 0;
+static MallocExtension_GetStats_t MallocExtension_GetStats = 0;
+
+static void initialize() {
+ static bool initialized = false;
+ if (!initialized) {
+ apr_dso_handle_t* hprog;// = (apr_dso_handle_t*)dlopen(0,0);
+ LLAPRPool pool;
+ pool.create();
+ apr_dso_load(&hprog, 0, pool());
+ apr_dso_sym((apr_dso_handle_sym_t*)&MallocExtension_GetNumericProperty,
+ hprog, "MallocExtension_GetNumericProperty");
+ apr_dso_sym((apr_dso_handle_sym_t*)&MallocExtension_GetStats,
+ hprog, "MallocExtension_GetStats");
+ initialized = true;
+ }
+}
+
+bool SGMemStat::haveStat() {
+ initialize();
+ return MallocExtension_GetNumericProperty;
+}
+
+F32 SGMemStat::getMalloc() {
+ if(MallocExtension_GetNumericProperty) {
+ size_t value;
+ MallocExtension_GetNumericProperty("generic.current_allocated_bytes", &value);
+ return value;
+ }
+ else return 0.0f;
+}
+
+U32 SGMemStat::getNumObjects() {
+ return 0;
+}
+
+std::string SGMemStat::getPrintableStat() {
+ initialize();
+ if (MallocExtension_GetStats) {
+ char buffer[4096];
+ buffer[4095] = 0;
+ MallocExtension_GetStats(buffer, 4095);
+ return std::string(buffer);
+ }
+ else return std::string();
+}
+
+#endif
diff --git a/indra/newview/sgmemstat.h b/indra/newview/sgmemstat.h
index 8a89e3b0d..1768f66ef 100644
--- a/indra/newview/sgmemstat.h
+++ b/indra/newview/sgmemstat.h
@@ -26,6 +26,8 @@ F32 getMalloc();
U32 getNumObjects();
+std::string getPrintableStat();
+
}
#endif
From 5f7f7b7d61f428d4071a81c6cdf36f45a530804c Mon Sep 17 00:00:00 2001
From: Siana Gearz
Date: Thu, 1 Mar 2012 23:38:48 +0100
Subject: [PATCH 27/35] Unsegfault memory tracker on Windows
---
indra/newview/sgmemstat.cpp | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/indra/newview/sgmemstat.cpp b/indra/newview/sgmemstat.cpp
index 0fbe006f6..d4e22a882 100644
--- a/indra/newview/sgmemstat.cpp
+++ b/indra/newview/sgmemstat.cpp
@@ -18,7 +18,7 @@
#include "llviewerprecompiledheaders.h"
#include "sgmemstat.h"
-#if 0
+#if (!LL_WINDOWS && !LL_LINUX)
bool SGMemStat::haveStat() {
return false;
}
@@ -49,10 +49,14 @@ static MallocExtension_GetStats_t MallocExtension_GetStats = 0;
static void initialize() {
static bool initialized = false;
if (!initialized) {
- apr_dso_handle_t* hprog;// = (apr_dso_handle_t*)dlopen(0,0);
+ apr_dso_handle_t* hprog = 0;
LLAPRPool pool;
pool.create();
+#if LL_WINDOWS
+ apr_dso_load(&hprog, "libtcmalloc_minimal.dll", pool());
+#else
apr_dso_load(&hprog, 0, pool());
+#endif
apr_dso_sym((apr_dso_handle_sym_t*)&MallocExtension_GetNumericProperty,
hprog, "MallocExtension_GetNumericProperty");
apr_dso_sym((apr_dso_handle_sym_t*)&MallocExtension_GetStats,
From 0a11f099187c694cff41d7be5278dd17d937b502 Mon Sep 17 00:00:00 2001
From: Siana Gearz
Date: Sun, 4 Mar 2012 09:39:28 +0100
Subject: [PATCH 28/35] Tiny fixies from Phoenix
---
indra/newview/llfloateravatarlist.cpp | 2 +-
indra/newview/llwlanimator.cpp | 1 +
2 files changed, 2 insertions(+), 1 deletion(-)
diff --git a/indra/newview/llfloateravatarlist.cpp b/indra/newview/llfloateravatarlist.cpp
index 747a6a329..790ba6cec 100644
--- a/indra/newview/llfloateravatarlist.cpp
+++ b/indra/newview/llfloateravatarlist.cpp
@@ -704,7 +704,7 @@ void LLFloaterAvatarList::refreshAvatarList()
LLVector3d delta = position - mypos;
F32 distance = (F32)delta.magVec();
- if (position.mdV[VZ] == 0.0)
+ if (position.mdV[VZ] == 0.f || position.mdV[VZ] == 1020.f)
{
UnknownAltitude = true;
distance = 9000.0;
diff --git a/indra/newview/llwlanimator.cpp b/indra/newview/llwlanimator.cpp
index e0aa84806..953898fe6 100644
--- a/indra/newview/llwlanimator.cpp
+++ b/indra/newview/llwlanimator.cpp
@@ -124,6 +124,7 @@ void LLWLAnimator::update(LLWLParamSet& curParams)
// at the end of the interp cycle, force the end settings to get applied
curParams.setAll(mInterpEndWL->getAll());
}
+ LLWaterParamManager::getInstance()->mCurParams.setAll(mInterpEndWater->getAll());
mIsInterpolating = false;
mIsInterpolatingSky = false;
return;
From b67fa864ff8de572b6d24103218073edddbff487 Mon Sep 17 00:00:00 2001
From: Siana Gearz
Date: Mon, 5 Mar 2012 18:18:37 +0100
Subject: [PATCH 29/35] First shot at fixing font fallback
---
indra/llrender/llfont.cpp | 2 +
indra/llrender/llfontregistry.cpp | 9 +-
indra/llwindow/llwindowsdl.cpp | 4 +-
indra/newview/app_settings/settings.xml | 121 ------------------------
4 files changed, 11 insertions(+), 125 deletions(-)
diff --git a/indra/llrender/llfont.cpp b/indra/llrender/llfont.cpp
index 69daf389c..fecdafe45 100644
--- a/indra/llrender/llfont.cpp
+++ b/indra/llrender/llfont.cpp
@@ -192,6 +192,8 @@ BOOL LLFont::loadFace(const std::string& filename, const F32 point_size, const F
FT_Done_Face(mFTFace);
mFTFace = NULL;
}
+
+ llinfos << "Loading font file: " << filename << llendl;
int error;
diff --git a/indra/llrender/llfontregistry.cpp b/indra/llrender/llfontregistry.cpp
index 0e92afeb4..aaa5b421b 100644
--- a/indra/llrender/llfontregistry.cpp
+++ b/indra/llrender/llfontregistry.cpp
@@ -384,9 +384,13 @@ LLFontGL *LLFontRegistry::createFont(const LLFontDescriptor& desc)
// This may not be the best solution, but it at least prevents a crash.
if (it != mFontMap.end() && it->second != NULL)
{
- llinfos << "-- matching font exists: " << nearest_exact_desc.getName() << " size " << nearest_exact_desc.getSize() << " style " << ((S32) nearest_exact_desc.getStyle()) << llendl;
+ if (it->second != NULL) {
+ llinfos << "-- matching font exists: " << nearest_exact_desc.getName() << " size " << nearest_exact_desc.getSize() << " style " << ((S32) nearest_exact_desc.getStyle()) << llendl;
- return it->second;
+ return it->second;
+ } else {
+ llwarns << "Failed to find font" << llendl;
+ }
//Haven't plugged free-type in yet.
// copying underlying Freetype font, and storing in LLFontGL with requested font descriptor
/*LLFontGL *font = new LLFontGL;
@@ -408,6 +412,7 @@ LLFontGL *LLFontRegistry::createFont(const LLFontDescriptor& desc)
file_names.insert(file_names.end(),
match_default_desc->getFileNames().begin(),
match_default_desc->getFileNames().end());
+ llinfos << "Found matching fallback fonts: " << match_default_desc->getFileNames().size() << llendl;
}
// Add ultimate fallback list - generated dynamically on linux,
diff --git a/indra/llwindow/llwindowsdl.cpp b/indra/llwindow/llwindowsdl.cpp
index c363b8ae9..abaf4e826 100644
--- a/indra/llwindow/llwindowsdl.cpp
+++ b/indra/llwindow/llwindowsdl.cpp
@@ -2564,7 +2564,7 @@ std::vector LLWindowSDL::getDynamicFallbackFontList()
// Use libfontconfig to find us a nice ordered list of fallback fonts
// specific to this system.
std::string final_fallback("/usr/share/fonts/truetype/kochi/kochi-gothic.ttf");
- const int max_font_count_cutoff = 40; // fonts are expensive in the current system, don't enumerate an arbitrary number of them
+ const int max_font_count_cutoff = 100; // fonts are expensive in the current system, don't enumerate an arbitrary number of them
// Our 'ideal' font properties which define the sorting results.
// slant=0 means Roman, index=0 means the first face in a font file
// (the one we actually use), weight=80 means medium weight,
@@ -2654,7 +2654,7 @@ std::vector LLWindowSDL::getDynamicFallbackFontList()
}
llinfos << "Using " << rtns.size() << "/" << found_font_count << " system fonts." << llendl;
- rtns.push_back(final_fallback);
+ //rtns.push_back(final_fallback);
return rtns;
}
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index f9b809665..1d5539f10 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -6654,72 +6654,6 @@
Value
0.5
- FontMonospace
-
- Comment
- Name of monospace font that definitely exists (Truetype file name)
- Persist
- 0
- Type
- String
- Value
- DejaVuSansMono.ttf
-
- FontSansSerif
-
- Comment
- Name of primary sans-serif font that definitely exists (Truetype file name)
- Persist
- 0
- Type
- String
- Value
- DroidSans.ttf
-
- FontSansSerifBundledFallback
-
- Comment
- Name of secondary sans-serif font that definitely exists (Truetype file name)
- Persist
- 0
- Type
- String
- Value
- DejaVuSansCondensed.ttf
-
- FontSansSerifBold
-
- Comment
- Name of bold font (Truetype file name)
- Persist
- 0
- Type
- String
- Value
- DroidSans-Bold.ttf
-
- FontSansSerifFallback
-
- Comment
- Name of sans-serif font (Truetype file name)
- Persist
- 0
- Type
- String
- Value
-
-
- FontSansSerifFallbackScale
-
- Comment
- Scale of fallback font relative to huge font (fraction of huge font size)
- Persist
- 1
- Type
- F32
- Value
- 1.00
-
FontScreenDPI
Comment
@@ -6731,61 +6665,6 @@
Value
96.0
- FontSizeHuge
-
- Comment
- Size of huge font (points, or 1/72 of an inch)
- Persist
- 1
- Type
- F32
- Value
- 14.0
-
- FontSizeLarge
-
- Comment
- Size of large font (points, or 1/72 of an inch)
- Persist
- 1
- Type
- F32
- Value
- 11.0
-
- FontSizeMedium
-
- Comment
- Size of medium font (points, or 1/72 of an inch)
- Persist
- 1
- Type
- F32
- Value
- 9.5
-
- FontSizeMonospace
-
- Comment
- Size of monospaced font (points, or 1/72 of an inch)
- Persist
- 1
- Type
- F32
- Value
- 9.0
-
- FontSizeSmall
-
- Comment
- Size of small font (points, or 1/72 of an inch)
- Persist
- 1
- Type
- F32
- Value
- 8.5
-
ForceNotecardDragCargoPermissive
Comment
From edd1b4d8e7204fc8bcdf9c2417b73abce627391a Mon Sep 17 00:00:00 2001
From: Siana Gearz
Date: Mon, 5 Mar 2012 18:57:24 +0100
Subject: [PATCH 30/35] Avoid crashes in skins by using proper intended
filenames
---
indra/newview/skins/Pony-Aquablue/colors.xml | 206 +++++++++++++++++
.../skins/Pony-Aquablue/colors_base.xml | 209 -----------------
.../{colors_base.xml => colors.xml} | 0
.../dark/{colors_base.xml => colors.xml} | 0
.../darkgred/{colors_base.xml => colors.xml} | 0
.../{colors_base.xml => colors.xml} | 0
.../emerald/{colors_base.xml => colors.xml} | 0
indra/newview/skins/gemini/colors.xml | 207 +++++++++++++++++
indra/newview/skins/gemini/colors_base.xml | 210 -----------------
.../gred/{colors_base.xml => colors.xml} | 0
indra/newview/skins/kdarknv/colors_base.xml | 202 -----------------
indra/newview/skins/kliteat/colors_base.xml | 202 -----------------
indra/newview/skins/openlife/colors_base.xml | 190 ----------------
.../skins/openlife/textures/colors.xml | 178 ---------------
.../skins/openlife/textures/colors_base.xml | 190 ----------------
.../pslgreen/{colors_base.xml => colors.xml} | 0
.../pslpurple/{colors_base.xml => colors.xml} | 0
.../ruby/{colors_base.xml => colors.xml} | 0
.../sapphire/{colors_base.xml => colors.xml} | 0
indra/newview/skins/silver/colors.xml | 209 +++++++++++++++++
indra/newview/skins/silver/colors_base.xml | 212 ------------------
indra/newview/skins/white_emerald/colors.xml | 204 +++++++++++++++++
.../skins/white_emerald/colors_base.xml | 207 -----------------
.../wisdom/{colors_base.xml => colors.xml} | 0
24 files changed, 826 insertions(+), 1800 deletions(-)
delete mode 100644 indra/newview/skins/Pony-Aquablue/colors_base.xml
rename indra/newview/skins/Pony-Purple/{colors_base.xml => colors.xml} (100%)
rename indra/newview/skins/dark/{colors_base.xml => colors.xml} (100%)
rename indra/newview/skins/darkgred/{colors_base.xml => colors.xml} (100%)
rename indra/newview/skins/darkorange/{colors_base.xml => colors.xml} (100%)
rename indra/newview/skins/emerald/{colors_base.xml => colors.xml} (100%)
delete mode 100644 indra/newview/skins/gemini/colors_base.xml
rename indra/newview/skins/gred/{colors_base.xml => colors.xml} (100%)
delete mode 100644 indra/newview/skins/kdarknv/colors_base.xml
delete mode 100644 indra/newview/skins/kliteat/colors_base.xml
delete mode 100644 indra/newview/skins/openlife/colors_base.xml
delete mode 100644 indra/newview/skins/openlife/textures/colors.xml
delete mode 100644 indra/newview/skins/openlife/textures/colors_base.xml
rename indra/newview/skins/pslgreen/{colors_base.xml => colors.xml} (100%)
rename indra/newview/skins/pslpurple/{colors_base.xml => colors.xml} (100%)
rename indra/newview/skins/ruby/{colors_base.xml => colors.xml} (100%)
rename indra/newview/skins/sapphire/{colors_base.xml => colors.xml} (100%)
delete mode 100644 indra/newview/skins/silver/colors_base.xml
delete mode 100644 indra/newview/skins/white_emerald/colors_base.xml
rename indra/newview/skins/wisdom/{colors_base.xml => colors.xml} (100%)
diff --git a/indra/newview/skins/Pony-Aquablue/colors.xml b/indra/newview/skins/Pony-Aquablue/colors.xml
index cf9466fad..b48208f68 100644
--- a/indra/newview/skins/Pony-Aquablue/colors.xml
+++ b/indra/newview/skins/Pony-Aquablue/colors.xml
@@ -1,3 +1,209 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/Pony-Aquablue/colors_base.xml b/indra/newview/skins/Pony-Aquablue/colors_base.xml
deleted file mode 100644
index b48208f68..000000000
--- a/indra/newview/skins/Pony-Aquablue/colors_base.xml
+++ /dev/null
@@ -1,209 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/indra/newview/skins/Pony-Purple/colors_base.xml b/indra/newview/skins/Pony-Purple/colors.xml
similarity index 100%
rename from indra/newview/skins/Pony-Purple/colors_base.xml
rename to indra/newview/skins/Pony-Purple/colors.xml
diff --git a/indra/newview/skins/dark/colors_base.xml b/indra/newview/skins/dark/colors.xml
similarity index 100%
rename from indra/newview/skins/dark/colors_base.xml
rename to indra/newview/skins/dark/colors.xml
diff --git a/indra/newview/skins/darkgred/colors_base.xml b/indra/newview/skins/darkgred/colors.xml
similarity index 100%
rename from indra/newview/skins/darkgred/colors_base.xml
rename to indra/newview/skins/darkgred/colors.xml
diff --git a/indra/newview/skins/darkorange/colors_base.xml b/indra/newview/skins/darkorange/colors.xml
similarity index 100%
rename from indra/newview/skins/darkorange/colors_base.xml
rename to indra/newview/skins/darkorange/colors.xml
diff --git a/indra/newview/skins/emerald/colors_base.xml b/indra/newview/skins/emerald/colors.xml
similarity index 100%
rename from indra/newview/skins/emerald/colors_base.xml
rename to indra/newview/skins/emerald/colors.xml
diff --git a/indra/newview/skins/gemini/colors.xml b/indra/newview/skins/gemini/colors.xml
index cf9466fad..4f5c5df9a 100644
--- a/indra/newview/skins/gemini/colors.xml
+++ b/indra/newview/skins/gemini/colors.xml
@@ -1,3 +1,210 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/gemini/colors_base.xml b/indra/newview/skins/gemini/colors_base.xml
deleted file mode 100644
index 4f5c5df9a..000000000
--- a/indra/newview/skins/gemini/colors_base.xml
+++ /dev/null
@@ -1,210 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/indra/newview/skins/gred/colors_base.xml b/indra/newview/skins/gred/colors.xml
similarity index 100%
rename from indra/newview/skins/gred/colors_base.xml
rename to indra/newview/skins/gred/colors.xml
diff --git a/indra/newview/skins/kdarknv/colors_base.xml b/indra/newview/skins/kdarknv/colors_base.xml
deleted file mode 100644
index 477527766..000000000
--- a/indra/newview/skins/kdarknv/colors_base.xml
+++ /dev/null
@@ -1,202 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/indra/newview/skins/kliteat/colors_base.xml b/indra/newview/skins/kliteat/colors_base.xml
deleted file mode 100644
index 477527766..000000000
--- a/indra/newview/skins/kliteat/colors_base.xml
+++ /dev/null
@@ -1,202 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/indra/newview/skins/openlife/colors_base.xml b/indra/newview/skins/openlife/colors_base.xml
deleted file mode 100644
index 39f897639..000000000
--- a/indra/newview/skins/openlife/colors_base.xml
+++ /dev/null
@@ -1,190 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/indra/newview/skins/openlife/textures/colors.xml b/indra/newview/skins/openlife/textures/colors.xml
deleted file mode 100644
index c7575e9dd..000000000
--- a/indra/newview/skins/openlife/textures/colors.xml
+++ /dev/null
@@ -1,178 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/indra/newview/skins/openlife/textures/colors_base.xml b/indra/newview/skins/openlife/textures/colors_base.xml
deleted file mode 100644
index 39f897639..000000000
--- a/indra/newview/skins/openlife/textures/colors_base.xml
+++ /dev/null
@@ -1,190 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/indra/newview/skins/pslgreen/colors_base.xml b/indra/newview/skins/pslgreen/colors.xml
similarity index 100%
rename from indra/newview/skins/pslgreen/colors_base.xml
rename to indra/newview/skins/pslgreen/colors.xml
diff --git a/indra/newview/skins/pslpurple/colors_base.xml b/indra/newview/skins/pslpurple/colors.xml
similarity index 100%
rename from indra/newview/skins/pslpurple/colors_base.xml
rename to indra/newview/skins/pslpurple/colors.xml
diff --git a/indra/newview/skins/ruby/colors_base.xml b/indra/newview/skins/ruby/colors.xml
similarity index 100%
rename from indra/newview/skins/ruby/colors_base.xml
rename to indra/newview/skins/ruby/colors.xml
diff --git a/indra/newview/skins/sapphire/colors_base.xml b/indra/newview/skins/sapphire/colors.xml
similarity index 100%
rename from indra/newview/skins/sapphire/colors_base.xml
rename to indra/newview/skins/sapphire/colors.xml
diff --git a/indra/newview/skins/silver/colors.xml b/indra/newview/skins/silver/colors.xml
index cf9466fad..7ae59a490 100644
--- a/indra/newview/skins/silver/colors.xml
+++ b/indra/newview/skins/silver/colors.xml
@@ -1,3 +1,212 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/silver/colors_base.xml b/indra/newview/skins/silver/colors_base.xml
deleted file mode 100644
index 7ae59a490..000000000
--- a/indra/newview/skins/silver/colors_base.xml
+++ /dev/null
@@ -1,212 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/indra/newview/skins/white_emerald/colors.xml b/indra/newview/skins/white_emerald/colors.xml
index cf9466fad..b637519e0 100644
--- a/indra/newview/skins/white_emerald/colors.xml
+++ b/indra/newview/skins/white_emerald/colors.xml
@@ -1,3 +1,207 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/white_emerald/colors_base.xml b/indra/newview/skins/white_emerald/colors_base.xml
deleted file mode 100644
index b637519e0..000000000
--- a/indra/newview/skins/white_emerald/colors_base.xml
+++ /dev/null
@@ -1,207 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/indra/newview/skins/wisdom/colors_base.xml b/indra/newview/skins/wisdom/colors.xml
similarity index 100%
rename from indra/newview/skins/wisdom/colors_base.xml
rename to indra/newview/skins/wisdom/colors.xml
From 5eb90ef9cdeaf9722d7830d3ee44a7e1359b2f48 Mon Sep 17 00:00:00 2001
From: Siana Gearz
Date: Mon, 5 Mar 2012 19:05:30 +0100
Subject: [PATCH 31/35] Preference button to clear settings
---
indra/newview/app_settings/settings.xml | 2 +-
indra/newview/llfloaterpreference.cpp | 13 +++-
indra/newview/llfloaterpreference.h | 5 ++
indra/newview/llpanelgeneral.cpp | 44 ++++++++++++++
indra/newview/llpanelgeneral.h | 3 +
.../skins/default/xui/en-us/notifications.xml | 59 +++++++++++++++++++
.../xui/en-us/panel_preferences_general.xml | 3 +-
7 files changed, 126 insertions(+), 3 deletions(-)
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index f9b809665..681ef347e 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -6402,7 +6402,7 @@
Type
Boolean
Value
- 1
+ 0
FlycamAbsolute
diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp
index 231d680a0..6e102d58c 100644
--- a/indra/newview/llfloaterpreference.cpp
+++ b/indra/newview/llfloaterpreference.cpp
@@ -387,6 +387,7 @@ void LLPreferenceCore::refreshEnabledGraphics()
LLFloaterPreference::LLFloaterPreference()
{
+ mExitWithoutSaving = false;
LLUICtrlFactory::getInstance()->buildFloater(this, "floater_preferences.xml");
}
@@ -532,7 +533,10 @@ void LLFloaterPreference::onBtnApply( void* userdata )
void LLFloaterPreference::onClose(bool app_quitting)
{
LLPanelLogin::setAlwaysRefresh(false);
- cancel(); // will be a no-op if OK or apply was performed just prior.
+ if (!mExitWithoutSaving)
+ {
+ cancel(); // will be a no-op if OK or apply was performed just prior.
+ }
LLFloater::onClose(app_quitting);
}
@@ -572,3 +576,10 @@ void LLFloaterPreference::switchTab(S32 i)
{
sInstance->mPreferenceCore->getTabContainer()->selectTab(i);
}
+
+// static
+void LLFloaterPreference::closeWithoutSaving()
+{
+ sInstance->mExitWithoutSaving = true;
+ sInstance->close();
+}
diff --git a/indra/newview/llfloaterpreference.h b/indra/newview/llfloaterpreference.h
index c849ac6ea..a662a08c7 100644
--- a/indra/newview/llfloaterpreference.h
+++ b/indra/newview/llfloaterpreference.h
@@ -124,6 +124,10 @@ public:
static void switchTab(S32 i);
+ // *HACK: Close without doing anything.
+ // This is used by the "reset all settings" button.
+ static void closeWithoutSaving();
+
protected:
LLPreferenceCore *mPreferenceCore;
@@ -133,6 +137,7 @@ protected:
LLButton *mOKBtn;
LLButton *mCancelBtn;
LLButton *mApplyBtn;
+ bool mExitWithoutSaving;
static void onClickAbout(void*);
static void onBtnOK(void*);
diff --git a/indra/newview/llpanelgeneral.cpp b/indra/newview/llpanelgeneral.cpp
index a238d408d..fbd323a09 100644
--- a/indra/newview/llpanelgeneral.cpp
+++ b/indra/newview/llpanelgeneral.cpp
@@ -43,6 +43,7 @@
#include "llviewercontrol.h"
#include "llagent.h"
+#include "llfloaterpreference.h"
#include "llviewerregion.h"
#include "llavatarnamecache.h"
#include "llvoavatar.h"
@@ -109,6 +110,8 @@ BOOL LLPanelGeneral::postBuild()
childSetVisible("maturity_desired_combobox", can_choose);
childSetVisible("maturity_desired_textbox", !can_choose);
+
+ childSetAction("clear_settings", &onClickClearSettings, this);
return TRUE;
}
@@ -160,3 +163,44 @@ void LLPanelGeneral::cancel()
{
}
+// static
+void LLPanelGeneral::onClickClearSettings(void*)
+{
+ if(gAgent.getID().notNull()) {
+ LLNotifications::instance().add("ResetAllSettingsPrompt", LLSD(), LLSD(), &callbackResetAllSettings);
+ }
+ else
+ {
+ LLNotifications::instance().add("ResetSystemSettingsPrompt", LLSD(), LLSD(), &callbackResetAllSettings);
+ }
+}
+
+// static
+void LLPanelGeneral::callbackResetAllSettings(const LLSD& notification, const LLSD& response)
+{
+ S32 option = LLNotification::getSelectedOption(notification, response);
+ if(option != 3) //At least some settings want to be removed
+ {
+ // We probably want to avoid altering this setting, so keep it across the reset.
+ std::string client_settings_file = gSavedSettings.getString("ClientSettingsFile");
+ if(option != 2)
+ {
+ gSavedSettings.resetToDefaults();
+ gSavedSettings.setString("ClientSettingsFile", client_settings_file);
+ gSavedSettings.saveToFile(client_settings_file, TRUE);
+ }
+
+ // Wipe user-specific settings for good measure and consistency.
+ // Obviously, we can only do this if we're actually logged in.
+ if(gAgent.getID().notNull() && (option != 1))
+ {
+ gSavedPerAccountSettings.resetToDefaults();
+ gSavedPerAccountSettings.saveToFile(gSavedSettings.getString("PerAccountSettingsFile"), TRUE);
+ }
+ LLNotifications::instance().add("ResetSettingsComplete");
+
+ // *HACK: Now close the floater without cancelling or applying.
+ // (the alternative route would be to add a method to every preference panel to handle this and update its UI)
+ LLFloaterPreference::closeWithoutSaving();
+ }
+}
diff --git a/indra/newview/llpanelgeneral.h b/indra/newview/llpanelgeneral.h
index 4afa5dd66..b60ce2289 100644
--- a/indra/newview/llpanelgeneral.h
+++ b/indra/newview/llpanelgeneral.h
@@ -46,6 +46,9 @@ public:
void apply();
void cancel();
+
+ static void LLPanelGeneral::onClickClearSettings(void*);
+ static void callbackResetAllSettings(const LLSD& notification, const LLSD& response);
};
#endif
diff --git a/indra/newview/skins/default/xui/en-us/notifications.xml b/indra/newview/skins/default/xui/en-us/notifications.xml
index 86b27d335..39d1f73a1 100644
--- a/indra/newview/skins/default/xui/en-us/notifications.xml
+++ b/indra/newview/skins/default/xui/en-us/notifications.xml
@@ -7032,6 +7032,65 @@ Your shape, skin, hair or eyes might be defect.
yestext="OK"/>
+
+ Settings have been reset. You should relog to ensure this takes full effect.
+
+
+
+ Resetting all settings may be helpful if you are experiencing problems; however, you will need to redo any changes you have made to the default configuration.
+
+ Would you like to reset system settings?
+
+
+
+
+
+ Resetting all settings may be helpful if you are experiencing problems; however, you will need to redo any changes you have made to the default configuration.
+
+ Which settings would you like to reset?
+
+
+
diff --git a/indra/newview/skins/default/xui/en-us/panel_preferences_general.xml b/indra/newview/skins/default/xui/en-us/panel_preferences_general.xml
index db6b6c9ab..fefaa6330 100644
--- a/indra/newview/skins/default/xui/en-us/panel_preferences_general.xml
+++ b/indra/newview/skins/default/xui/en-us/panel_preferences_general.xml
@@ -67,5 +67,6 @@
Always send
Never send
-
+
+
From efd1b2bfa9b2ddff6e2cc38cac96cf3df336cfa0 Mon Sep 17 00:00:00 2001
From: Siana Gearz
Date: Mon, 5 Mar 2012 19:06:15 +0100
Subject: [PATCH 32/35] French translation update and file cleanup
---
indra/newview/skins/default/xui/fr/alerts.xml | 8 +-
.../skins/default/xui/fr/floater_about.xml | 198 +-
.../default/xui/fr/floater_about_land.xml | 1138 ++--
.../xui/fr/floater_active_speakers.xml | 22 +-
.../xui/fr/floater_animation_preview.xml | 330 +-
.../default/xui/fr/floater_area_search.xml | 50 +
.../skins/default/xui/fr/floater_auction.xml | 36 +-
.../default/xui/fr/floater_audio_volume.xml | 8 +-
.../default/xui/fr/floater_avatar_picker.xml | 84 +-
.../xui/fr/floater_avatar_textures.xml | 62 +-
.../skins/default/xui/fr/floater_beacons.xml | 30 +-
.../default/xui/fr/floater_build_options.xml | 16 +-
.../default/xui/fr/floater_bulk_perms.xml | 88 +-
.../skins/default/xui/fr/floater_bumps.xml | 42 +-
.../default/xui/fr/floater_buy_contents.xml | 42 +-
.../default/xui/fr/floater_buy_currency.xml | 138 +-
.../skins/default/xui/fr/floater_buy_land.xml | 486 +-
.../default/xui/fr/floater_buy_object.xml | 52 +-
.../skins/default/xui/fr/floater_camera.xml | 24 +-
.../default/xui/fr/floater_chat_history.xml | 196 +-
.../default/xui/fr/floater_chatterbox.xml | 4 +-
.../default/xui/fr/floater_choose_group.xml | 16 +-
.../default/xui/fr/floater_color_picker.xml | 64 +-
.../skins/default/xui/fr/floater_critical.xml | 22 +-
.../default/xui/fr/floater_customize.xml | 1004 +--
.../xui/fr/floater_day_cycle_options.xml | 194 +-
.../xui/fr/floater_device_settings.xml | 6 +-
.../default/xui/fr/floater_directory.xml | 854 +--
.../default/xui/fr/floater_display_name.xml | 29 +
.../default/xui/fr/floater_env_settings.xml | 54 +-
.../default/xui/fr/floater_font_test.xml | 12 +-
.../skins/default/xui/fr/floater_gesture.xml | 36 +-
.../default/xui/fr/floater_god_tools.xml | 222 +-
.../default/xui/fr/floater_group_info.xml | 522 +-
.../xui/fr/floater_hardware_settings.xml | 218 +-
.../skins/default/xui/fr/floater_html.xml | 32 +-
.../skins/default/xui/fr/floater_hud.xml | 4 +-
.../skins/default/xui/fr/floater_im.xml | 86 +-
.../default/xui/fr/floater_image_preview.xml | 138 +-
.../skins/default/xui/fr/floater_import.xml | 34 +-
.../skins/default/xui/fr/floater_inspect.xml | 28 +-
.../xui/fr/floater_instant_message.xml | 112 +-
.../xui/fr/floater_instant_message_ad_hoc.xml | 84 +-
.../xui/fr/floater_instant_message_group.xml | 96 +-
.../default/xui/fr/floater_inventory.xml | 190 +-
.../fr/floater_inventory_item_properties.xml | 170 +-
.../xui/fr/floater_inventory_view_finder.xml | 48 +-
.../skins/default/xui/fr/floater_joystick.xml | 170 +-
.../skins/default/xui/fr/floater_lagmeter.xml | 304 +-
.../default/xui/fr/floater_land_holdings.xml | 80 +-
.../default/xui/fr/floater_landmark_ctrl.xml | 20 +-
.../default/xui/fr/floater_live_lsleditor.xml | 24 +-
.../default/xui/fr/floater_lsl_guide.xml | 14 +-
.../default/xui/fr/floater_media_browser.xml | 40 +-
.../default/xui/fr/floater_mem_leaking.xml | 36 +-
.../skins/default/xui/fr/floater_mini_map.xml | 8 +-
.../skins/default/xui/fr/floater_moveview.xml | 24 +-
.../skins/default/xui/fr/floater_mute.xml | 24 +-
.../default/xui/fr/floater_mute_object.xml | 24 +-
.../default/xui/fr/floater_my_friends.xml | 14 +-
.../xui/fr/floater_name_description.xml | 22 +-
.../skins/default/xui/fr/floater_new_im.xml | 22 +-
.../xui/fr/floater_new_outfit_dialog.xml | 176 +-
.../default/xui/fr/floater_notification.xml | 14 +-
.../xui/fr/floater_notifications_console.xml | 10 +-
.../default/xui/fr/floater_object_im_info.xml | 32 +-
.../default/xui/fr/floater_openobject.xml | 16 +-
.../skins/default/xui/fr/floater_pay.xml | 44 +-
.../default/xui/fr/floater_pay_object.xml | 62 +-
.../default/xui/fr/floater_perm_prefs.xml | 32 +-
.../default/xui/fr/floater_post_process.xml | 108 +-
.../skins/default/xui/fr/floater_postcard.xml | 90 +-
.../default/xui/fr/floater_preferences.xml | 18 +-
.../xui/fr/floater_preview_animation.xml | 50 +-
.../xui/fr/floater_preview_classified.xml | 4 +-
.../default/xui/fr/floater_preview_event.xml | 4 +-
.../fr/floater_preview_existing_landmark.xml | 18 +-
.../xui/fr/floater_preview_gesture.xml | 132 +-
.../xui/fr/floater_preview_notecard.xml | 32 +-
.../floater_preview_notecard_keep_discard.xml | 34 +-
.../default/xui/fr/floater_preview_sound.xml | 24 +-
.../xui/fr/floater_preview_texture.xml | 26 +-
.../default/xui/fr/floater_preview_url.xml | 4 +-
.../xui/fr/floater_price_for_listing.xml | 38 +-
.../skins/default/xui/fr/floater_profile.xml | 8 +-
.../default/xui/fr/floater_region_info.xml | 4 +-
.../default/xui/fr/floater_report_abuse.xml | 366 +-
.../default/xui/fr/floater_report_bug.xml | 216 +-
.../default/xui/fr/floater_script_debug.xml | 12 +-
.../xui/fr/floater_script_ed_panel.xml | 86 +-
.../default/xui/fr/floater_script_preview.xml | 12 +-
.../default/xui/fr/floater_script_queue.xml | 8 +-
.../default/xui/fr/floater_script_search.xml | 30 +-
.../default/xui/fr/floater_select_key.xml | 14 +-
.../default/xui/fr/floater_sell_land.xml | 144 +-
.../default/xui/fr/floater_settings_debug.xml | 34 +-
.../xui/fr/floater_sim_release_message.xml | 32 +-
.../xui/fr/floater_skin_preview_template.xml | 68 +-
.../skins/default/xui/fr/floater_snapshot.xml | 274 +-
.../default/xui/fr/floater_sound_preview.xml | 56 +-
.../default/xui/fr/floater_statistics.xml | 4 +-
.../skins/default/xui/fr/floater_telehub.xml | 62 +-
.../skins/default/xui/fr/floater_test.xml | 4 +-
.../default/xui/fr/floater_texture_ctrl.xml | 48 +-
.../skins/default/xui/fr/floater_tools.xml | 1300 ++--
.../default/xui/fr/floater_top_objects.xml | 110 +-
.../skins/default/xui/fr/floater_tos.xml | 54 +-
.../default/xui/fr/floater_url_entry.xml | 26 +-
.../default/xui/fr/floater_voice_wizard.xml | 18 +-
.../skins/default/xui/fr/floater_water.xml | 178 +-
.../xui/fr/floater_wearable_save_as.xml | 22 +-
.../xui/fr/floater_windlight_options.xml | 380 +-
.../default/xui/fr/floater_world_map.xml | 144 +-
indra/newview/skins/default/xui/fr/fonts.xml | 18 +-
.../skins/default/xui/fr/menu_inventory.xml | 158 +-
.../skins/default/xui/fr/menu_login.xml | 66 +-
.../skins/default/xui/fr/menu_mini_map.xml | 16 +-
.../default/xui/fr/menu_pie_attachment.xml | 30 +-
.../skins/default/xui/fr/menu_pie_avatar.xml | 36 +-
.../skins/default/xui/fr/menu_pie_land.xml | 20 +-
.../skins/default/xui/fr/menu_pie_object.xml | 206 +-
.../skins/default/xui/fr/menu_pie_self.xml | 76 +-
.../skins/default/xui/fr/menu_slurl.xml | 12 +-
.../skins/default/xui/fr/menu_viewer.xml | 542 +-
.../skins/default/xui/fr/mime_types.xml | 460 +-
.../skins/default/xui/fr/notifications.xml | 6028 ++++++++---------
indra/newview/skins/default/xui/fr/notify.xml | 8 +-
.../skins/default/xui/fr/panel_audio.xml | 20 +-
.../default/xui/fr/panel_audio_device.xml | 50 +-
.../skins/default/xui/fr/panel_avatar.xml | 454 +-
.../xui/fr/panel_avatar_classified.xml | 74 +-
.../default/xui/fr/panel_avatar_pick.xml | 20 +-
.../skins/default/xui/fr/panel_chat_bar.xml | 42 +-
.../skins/default/xui/fr/panel_classified.xml | 62 +-
.../skins/default/xui/fr/panel_event.xml | 140 +-
.../skins/default/xui/fr/panel_friends.xml | 51 +-
.../skins/default/xui/fr/panel_group.xml | 26 +-
.../default/xui/fr/panel_group_finder.xml | 18 +-
.../default/xui/fr/panel_group_general.xml | 152 +-
.../default/xui/fr/panel_group_invite.xml | 52 +-
.../default/xui/fr/panel_group_land_money.xml | 166 +-
.../default/xui/fr/panel_group_notices.xml | 148 +-
.../default/xui/fr/panel_group_roles.xml | 320 +-
.../default/xui/fr/panel_group_voting.xml | 224 +-
.../skins/default/xui/fr/panel_groups.xml | 36 +-
.../default/xui/fr/panel_land_covenant.xml | 78 +-
.../skins/default/xui/fr/panel_login.xml | 140 +-
.../default/xui/fr/panel_master_volume.xml | 10 +-
.../default/xui/fr/panel_media_controls.xml | 76 +-
.../default/xui/fr/panel_media_remote.xml | 20 +-
.../xui/fr/panel_media_remote_expanded.xml | 56 +-
.../skins/default/xui/fr/panel_mini_map.xml | 54 +-
.../xui/fr/panel_notifications_channel.xml | 30 +-
.../skins/default/xui/fr/panel_overlaybar.xml | 54 +-
.../skins/default/xui/fr/panel_place.xml | 78 +-
.../default/xui/fr/panel_place_small.xml | 86 +-
.../fr/panel_preferences_ascent_system.xml | 642 +-
.../xui/fr/panel_preferences_audio.xml | 60 +-
.../default/xui/fr/panel_preferences_chat.xml | 250 +-
.../xui/fr/panel_preferences_general.xml | 291 +-
.../xui/fr/panel_preferences_graphics1.xml | 462 +-
.../xui/fr/panel_preferences_grids.xml | 484 +-
.../default/xui/fr/panel_preferences_im.xml | 72 +-
.../xui/fr/panel_preferences_input.xml | 65 +-
.../xui/fr/panel_preferences_network.xml | 46 +-
.../xui/fr/panel_preferences_popups.xml | 50 +-
.../xui/fr/panel_preferences_skins.xml | 28 +-
.../xui/fr/panel_preferences_voice.xml | 72 +-
.../default/xui/fr/panel_preferences_web.xml | 56 +-
.../default/xui/fr/panel_region_covenant.xml | 164 +-
.../default/xui/fr/panel_region_debug.xml | 80 +-
.../default/xui/fr/panel_region_estate.xml | 156 +-
.../default/xui/fr/panel_region_general.xml | 118 +-
.../default/xui/fr/panel_region_terrain.xml | 54 +-
.../default/xui/fr/panel_region_texture.xml | 144 +-
.../default/xui/fr/panel_scrolling_param.xml | 24 +-
.../default/xui/fr/panel_speaker_controls.xml | 82 +-
.../skins/default/xui/fr/panel_status_bar.xml | 82 +-
.../skins/default/xui/fr/panel_toolbar.xml | 34 +-
.../skins/default/xui/fr/panel_top_pick.xml | 20 +-
.../default/xui/fr/panel_voice_controls.xml | 20 +-
.../default/xui/fr/panel_voice_enable.xml | 46 +-
.../default/xui/fr/panel_voice_options.xml | 42 +-
.../default/xui/fr/panel_voice_remote.xml | 10 +-
.../xui/fr/panel_voice_remote_expanded.xml | 10 +-
.../skins/default/xui/fr/role_actions.xml | 402 +-
.../newview/skins/default/xui/fr/strings.xml | 229 +-
.../skins/default/xui/fr/teleport_strings.xml | 105 +-
.../skins/default/xui/fr/ui_strings.xml | 32 +-
.../skins/default/xui/fr/xui_version.xml | 8 +-
scripts/clean_translation.sh | 12 +
191 files changed, 13751 insertions(+), 13951 deletions(-)
create mode 100644 indra/newview/skins/default/xui/fr/floater_area_search.xml
create mode 100644 indra/newview/skins/default/xui/fr/floater_display_name.xml
create mode 100755 scripts/clean_translation.sh
diff --git a/indra/newview/skins/default/xui/fr/alerts.xml b/indra/newview/skins/default/xui/fr/alerts.xml
index 955209105..a2a903283 100644
--- a/indra/newview/skins/default/xui/fr/alerts.xml
+++ b/indra/newview/skins/default/xui/fr/alerts.xml
@@ -1,4 +1,4 @@
-
-
-
-
\ No newline at end of file
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_about.xml b/indra/newview/skins/default/xui/fr/floater_about.xml
index e23da56dc..9fd019310 100644
--- a/indra/newview/skins/default/xui/fr/floater_about.xml
+++ b/indra/newview/skins/default/xui/fr/floater_about.xml
@@ -1,99 +1,99 @@
-
-
-
-
-
-
-
-
-
-Singularity Viewer is developed and maintained by Siana Gearz, Shyotl Kuhr, Aleric Inglewood and Narv Czervik, with contributions by Henri Beauchamp, Kitty Barnett, Thickbrick Sleaford, Zauber Parecelsus, Wolfspirit Magic and others. Singularity is based upon Ascent source code. Credits for Ascent include Hg Beeks, Charley Levenque, Hazim Gazov, Zwagoth Klaar, Qarl Fizz, and others. Ascent is based upon the Inertia source code.
-
-Singularity Viewer includes source code contributions of the following residents: Able Whitman, Adam Marker, Agathos Frascati, Aimee Trescothick, Alejandro Rosenthal, Aleric Inglewood, Alissa Sabre, Angus Boyd, Ann Congrejo, Argent Stonecutter, Asuka Neely, Balp Allen, Benja Kepler, Biancaluce Robbiani, Blakar Ogre, blino Nakamura, Boroondas Gupte, Bulli Schumann, bushing Spatula, Carjay McGinnis, Catherine Pfeffer, Celierra Darling, Cron Stardust, Dale Glass, Drewan Keats, Dylan Haskell, Dzonatas Sol, Eddy Stryker, EponymousDylan Ra, Eva Nowicka, Farallon Greyskin, Feep Larsson, Flemming Congrejo, Fluf Fredriksson, Fractured Crystal, Fremont Cunningham, Geneko Nemeth, Gigs Taggart, Ginko Bayliss, Grazer Kline, Gudmund Shepherd, Hamncheese Omlet, HappySmurf Papp, Henri Beauchamp, Hikkoshi Sakai, Hiro Sommambulist, Hoze Menges, Ian Kas, Irene Muni, Iskar Ariantho, Jacek Antonelli, JB Kraft, Joghert LeSabre, Kage Pixel, Ken March, Kerutsen Sellery, Khyota Wulluf, Kunnis Basiat, Lisa Lowe, Lockhart Cordoso, maciek marksman, Magnus Balczo, Malwina Dollinger, march Korda, Matthew Dowd, McCabe Maxsted, Michelle2 Zenovka, Mm Alder, Mr Greggan, Nicholaz Beresford, Nounouch Hapmouche, Patric Mills, Paul Churchill, Paula Innis, Peekay Semyorka, Peter Lameth, Pf Shan, princess niven, Renault Clio, Ringo Tuxing, Robin Cornelius, Ryozu Kojima, Salahzar Stenvaag, Sammy Frederix, Scrippy Scofield, Seg Baphomet, Sergen Davies, SignpostMarv Martin, Simon Nolan, SpacedOut Frye, Sporked Friis, Stevex Janus, Still Defiant, Strife Onizuka, Tayra Dagostino, TBBle Kurosawa, Teardrops Fall, tenebrous pau, Tharax Ferraris, Thickbrick Sleaford, Thraxis Epsilon, tiamat bingyi, TraductoresAnonimos Alter, Tue Torok, Vadim Bigbear, Vixen Heron, Whoops Babii, Wilton Lundquist, Zarkonnen Decosta, Zi Ree, Zipherius Turas
-
-Second Life is brought to you by Philip, Tessa, Andrew, Cory, James, Ben, Char, Charlie, Colin, Dan, Daniel, Doug, Eric, Hamlet, Haney, Eve, Hunter, Ian, Jeff, Jennifer, Jim, John, Lee, Mark, Peter, Phoenix, Richard, Robin, Xenon, Steve, Tanya, Eddie, Avi, Frank, Bruce, Aaron, Alice, Bob, Debra, Eileen, Helen, Janet, Louie, Leviathania, Stefan, Ray, Kevin, Tom, Mikeb, MikeT, Burgess, Elena, Tracy, Bill, Todd, Ryan, Zach, Sarah, Nova, Tim, Stephanie, Michael, Evan, Nicolas, Catherine, Rachelle, Dave, Holly, Bub, Kelly, Magellan, Ramzi, Don, Sabin, Jill, Rheya, Jeska, Torley, Kona, Callum, Charity, Ventrella, Jack, Vektor, Iris, Chris, Nicole, Mick, Reuben, Blue, Babbage, Yedwab, Deana, Lauren, Brent, Pathfinder, Chadrick, Altruima, Jesse, Teeny, Monroe, Icculus, David, Tess, Lizzie, Patsy, Isaac, Lawrence, Cyn, Bo, Gia, Annette, Marius, Tbone, Jonathan, Karen, Ginsu, Satoko, Yuko, Makiko, Thomas, Harry, Seth, Alexei, Brian, Guy, Runitai, Ethan, Data, Cornelius, Kenny, Swiss, Zero, Natria, Wendy, Stephen, Teeple, Thumper, Lucy, Dee, Mia, Liana, Warren, Branka, Aura, beez, Milo, Hermia, Red, Thrax, Joe, Sally, Magenta, Mogura, Paul, Jose, Rejean, Henrik, Lexie, Amber, Logan, Xan, Nora, Morpheus, Donovan, Leyla, MichaelFrancis, Beast, Cube, Bucky, Joshua, Stryfe, Harmony, Teresa, Claudia, Walker, Glenn, Fritz, Fordak, June, Cleopetra, Jean, Ivy, Betsy, Roosevelt, Spike, Ken, Which, Tofu, Chiyo, Rob, Zee, dustin, George, Del, Matthew, Cat, Jacqui, Lightfoot, Adrian, Viola, Alfred, Noel, Irfan, Sunil, Yool, Rika, Jane, Xtreme, Frontier, a2, Neo, Siobhan, Yoz, Justin, Elle, Qarl, Benjamin, Isabel, Gulliver, Everett, Christopher, Izzy, Stephany, Garry, Sejong, Sean, Tobin, Iridium, Meta, Anthony, Jeremy, JP, Jake, Maurice, Madhavi, Leopard, Kyle, Joon, Kari, Bert, Belinda, Jon, Kristi, Bridie, Pramod, KJ, Socrates, Maria, Ivan, Aric, Yamasaki, Adreanne, Jay, MitchK, Ceren, Coco, Durl, Jenny, Periapse, Kartic, Storrs, Lotte, Sandy, Rohn, Colossus, Zen, BigPapi, Brad, Pastrami, Kurz, Mani, Neuro, Jaime, MJ, Rowan, Sgt, Elvis, Gecko, Samuel, Sardonyx, Leo, Bryan, Niko, Soft, Poppy, Rachel, Aki, Angelo, Banzai, Alexa, Sue, CeeLo, Bender, CG, Gillian, Pelle, Nick, Echo, Zara, Christine, Shamiran, Emma, Blake, Keiko, Plexus, Joppa, Sidewinder, Erica, Ashlei, Twilight, Kristen, Brett, Q, Enus, Simon, Bevis, Kraft, Kip, Chandler, Ron, LauraP, Ram, KyleJM, Scouse, Prospero, Melissa, Marty, Nat, Hamilton, Kend, Lordan, Jimmy, Kosmo, Seraph, Green, Ekim, Wiggo, JT, Rome, Doris, Miz, Benoc, Whump, Trinity, Patch, Kate, TJ, Bao, Joohwan, Christy, Sofia, Matias, Cogsworth, Johan, Oreh, Cheah, Angela, Brandy, Mango, Lan, Aleks, Gloria, Heidy, Mitchell, Space, Colton, Bambers, Einstein, Maggie, Malbers, Rose, Winnie, Stella, Milton, Rothman, Niall, Marin, Allison, Katie, Dawn, Katt, Dusty, Kalpana, Judy, Andrea, Ambroff, Infinity, Gail, Rico, Raymond, Yi, William, Christa, M, Teagan, Scout, Molly, Dante, Corr, Dynamike, Usi, Kaylee, Vidtuts, Lil, Danica, Sascha, Kelv, Jacob, Nya, Rodney, Brandon, Elsie, Blondin, Grant, Katrin, Nyx, Gabriel, Locklainn, Claire, Devin, Minerva, Monty, Austin, Bradford, Si, Keira, H, Caitlin, Dita, Makai, Jenn, Ann, Meredith, Clare, Joy, Praveen, Cody, Edmund, Ruthe, Sirena, Gayathri, Spider, FJ, Davidoff, Tian, Jennie, Louise, Oskar, Landon, Noelle, Jarv, Ingrid, Al, Sommer, Doc, Aria, Huin, Gray, Lili, Vir, DJ, Yang, T, Simone, Maestro, Scott, Charlene, Quixote, Amanda, Susan, Zed, Anne, Enkidu, Esbee, Joroan, Katelin, Roxie, Tay, Scarlet, Kevin, Johnny, Wolfgang, Andren, Bob, Howard, Merov, Rand, Ray, Michon, Newell, Galen, Dessie, Les, Michon, Jenelle, Geo, Siz, Shapiro, Pete, Calyle, Selene, Allen, Phoebe, Goldin, Kimmora, Dakota, Slaton, Lindquist, Zoey, Hari, Othello, Rohit, Sheldon, Petra, Viale, Gordon, Kaye, Pink, Ferny, Emerson, Davy, Bri, Chan, Juan, Robert, Terrence, Nathan, Carl and many others.
-
-Linden Lab would like to thank the following residents: able whitman, Adeon Writer, adonaira aabye, Aeron Kohime, Agathos Frascati, Aimee Trescothick, Aleric Inglewood, Alissa Sabre, Aminom Marvin, Angela Talamasca, Aralara Rajal, Armin Weatherwax, Ashrilyn Hayashida, Athanasius Skytower, Aura Dirval, Barney Boomslang, Biancaluce Robbiani, Biker Offcourse, Borg Capalini, Bulli Schumann, catherine pfeffer, Chalice Yao, Corre Porta, Court Goodman, Cummere Mayo, Dale Innis, Darien Caldwell, Darjeeling Schoonhoven, Daten Thielt, dimentox travanti, Dirk Talamasca, Drew Dwi, Duckless Vandyke, Elanthius Flagstaff, Electro Burnstein, emiley tomsen, Escort DeFarge, Eva Rau, Ezian Ecksol, Fire Centaur, Fluf Fredriksson, Francisco Koolhoven, Frontera Thor, Frungi Stastny, Gally Young, gearsawe stonecutter, Gigs Taggart, Gordon Wendt, Gudmund Shepherd, Gypsy Paz, Harleen Gretzky, Henri Beauchamp, Inma Rau, Irene Muni, Iskar Ariantho, Jacek Antonelli, JB Kraft, Jessicka Graves, Joeseph Albanese, Joshua Philgarlic, Khyota Wulluf, kirstenlee Cinquetti, Latif Khalifa, Lex Neva, Lilibeth Andree, Lisa Lowe, Lunita Savira, Loosey Demonia, lum pfohl, Marcos Fonzarelli, MartinRJ Fayray, Marusame Arai, Matthew Dowd, Maya Remblai, McCabe Maxsted, Meghan Dench, Melchoir Tokhes, Menos Short, Michelle2 Zenovka, Mimika Oh, Minerva Memel, Mm Alder, Ochi Wolfe, Omei Turnbull, Pesho Replacement, Phantom Ninetails, phoenixflames kukulcan, Polo Gufler, prez pessoa, princess niven, Prokofy Neva, Qie Niangao, Rem Beattie, RodneyLee Jessop, Saijanai Kuhn, Seg Baphomet, Sergen Davies, Shirley Marquez, SignpostMarv Martin, Sindy Tsure, Sira Arbizu, Skips Jigsaw, Sougent Harrop, Spritely Pixel, Squirrel Wood, StarSong Bright, Subversive Writer, Sugarcult Dagger, Sylumm Grigorovich, Tammy Nowotny, Tanooki Darkes, Tayra Dagostino, Theoretical Chemistry, Thickbrick Sleaford, valerie rosewood, Vex Streeter, Vixen Heron, Whoops Babii, Winter Ventura, Xiki Luik, Yann Dufaux, Yina Yao, Yukinoroh Kamachi, Zolute Infinity, Zwagoth Klaar
-
-
-3Dconnexion SDK Copyright (C) 1992-2007 3Dconnexion
-APR Copyright (C) 2000-2004 The Apache Software Foundation
-cURL Copyright (C) 1996-2002, Daniel Stenberg, (daniel@haxx.se)
-DBus/dbus-glib Copyright (C) 2002, 2003 CodeFactory AB / Copyright (C) 2003, 2004 Red Hat, Inc.
-expat Copyright (C) 1998, 1999, 2000 Thai Open Source Software Center Ltd.
-FreeType Copyright (C) 1996-2002, The FreeType Project (www.freetype.org).
-GL Copyright (C) 1999-2004 Brian Paul.
-Havok.com(TM) Copyright (C) 1999-2001, Telekinesys Research Limited.
-jpeg2000 Copyright (C) 2001, David Taubman, The University of New South Wales (UNSW)
-jpeglib Copyright (C) 1991-1998, Thomas G. Lane.
-ogg/vorbis Copyright (C) 2001, Xiphophorus
-OpenSSL Copyright (C) 1998-2002 The OpenSSL Project.
-SDL Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Sam Lantinga
-SSLeay Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
-xmlrpc-epi Copyright (C) 2000 Epinions, Inc.
-zlib Copyright (C) 1995-2002 Jean-loup Gailly and Mark Adler.
-google-perftools Copyright (c) 2005, Google Inc.
-
-All rights reserved. See licenses.txt for details.
-
-Voice chat Audio coding: Polycom(R) Siren14(TM) (ITU-T Rec. G.722.1 Annex C)
-
-
-To be a success in business, be daring, be first, be different. --Henry Marchant
-
-
-
- You are at [POSITION]
-
-
+
+
+
+
+
+
+
+
+
+Singularity Viewer is developed and maintained by Siana Gearz, Shyotl Kuhr, Aleric Inglewood and Narv Czervik, with contributions by Henri Beauchamp, Kitty Barnett, Thickbrick Sleaford, Zauber Parecelsus, Wolfspirit Magic and others. Singularity is based upon Ascent source code. Credits for Ascent include Hg Beeks, Charley Levenque, Hazim Gazov, Zwagoth Klaar, Qarl Fizz, and others. Ascent is based upon the Inertia source code.
+
+Singularity Viewer includes source code contributions of the following residents: Able Whitman, Adam Marker, Agathos Frascati, Aimee Trescothick, Alejandro Rosenthal, Aleric Inglewood, Alissa Sabre, Angus Boyd, Ann Congrejo, Argent Stonecutter, Asuka Neely, Balp Allen, Benja Kepler, Biancaluce Robbiani, Blakar Ogre, blino Nakamura, Boroondas Gupte, Bulli Schumann, bushing Spatula, Carjay McGinnis, Catherine Pfeffer, Celierra Darling, Cron Stardust, Dale Glass, Drewan Keats, Dylan Haskell, Dzonatas Sol, Eddy Stryker, EponymousDylan Ra, Eva Nowicka, Farallon Greyskin, Feep Larsson, Flemming Congrejo, Fluf Fredriksson, Fractured Crystal, Fremont Cunningham, Geneko Nemeth, Gigs Taggart, Ginko Bayliss, Grazer Kline, Gudmund Shepherd, Hamncheese Omlet, HappySmurf Papp, Henri Beauchamp, Hikkoshi Sakai, Hiro Sommambulist, Hoze Menges, Ian Kas, Irene Muni, Iskar Ariantho, Jacek Antonelli, JB Kraft, Joghert LeSabre, Kage Pixel, Ken March, Kerutsen Sellery, Khyota Wulluf, Kunnis Basiat, Lisa Lowe, Lockhart Cordoso, maciek marksman, Magnus Balczo, Malwina Dollinger, march Korda, Matthew Dowd, McCabe Maxsted, Michelle2 Zenovka, Mm Alder, Mr Greggan, Nicholaz Beresford, Nounouch Hapmouche, Patric Mills, Paul Churchill, Paula Innis, Peekay Semyorka, Peter Lameth, Pf Shan, princess niven, Renault Clio, Ringo Tuxing, Robin Cornelius, Ryozu Kojima, Salahzar Stenvaag, Sammy Frederix, Scrippy Scofield, Seg Baphomet, Sergen Davies, SignpostMarv Martin, Simon Nolan, SpacedOut Frye, Sporked Friis, Stevex Janus, Still Defiant, Strife Onizuka, Tayra Dagostino, TBBle Kurosawa, Teardrops Fall, tenebrous pau, Tharax Ferraris, Thickbrick Sleaford, Thraxis Epsilon, tiamat bingyi, TraductoresAnonimos Alter, Tue Torok, Vadim Bigbear, Vixen Heron, Whoops Babii, Wilton Lundquist, Zarkonnen Decosta, Zi Ree, Zipherius Turas
+
+Second Life is brought to you by Philip, Tessa, Andrew, Cory, James, Ben, Char, Charlie, Colin, Dan, Daniel, Doug, Eric, Hamlet, Haney, Eve, Hunter, Ian, Jeff, Jennifer, Jim, John, Lee, Mark, Peter, Phoenix, Richard, Robin, Xenon, Steve, Tanya, Eddie, Avi, Frank, Bruce, Aaron, Alice, Bob, Debra, Eileen, Helen, Janet, Louie, Leviathania, Stefan, Ray, Kevin, Tom, Mikeb, MikeT, Burgess, Elena, Tracy, Bill, Todd, Ryan, Zach, Sarah, Nova, Tim, Stephanie, Michael, Evan, Nicolas, Catherine, Rachelle, Dave, Holly, Bub, Kelly, Magellan, Ramzi, Don, Sabin, Jill, Rheya, Jeska, Torley, Kona, Callum, Charity, Ventrella, Jack, Vektor, Iris, Chris, Nicole, Mick, Reuben, Blue, Babbage, Yedwab, Deana, Lauren, Brent, Pathfinder, Chadrick, Altruima, Jesse, Teeny, Monroe, Icculus, David, Tess, Lizzie, Patsy, Isaac, Lawrence, Cyn, Bo, Gia, Annette, Marius, Tbone, Jonathan, Karen, Ginsu, Satoko, Yuko, Makiko, Thomas, Harry, Seth, Alexei, Brian, Guy, Runitai, Ethan, Data, Cornelius, Kenny, Swiss, Zero, Natria, Wendy, Stephen, Teeple, Thumper, Lucy, Dee, Mia, Liana, Warren, Branka, Aura, beez, Milo, Hermia, Red, Thrax, Joe, Sally, Magenta, Mogura, Paul, Jose, Rejean, Henrik, Lexie, Amber, Logan, Xan, Nora, Morpheus, Donovan, Leyla, MichaelFrancis, Beast, Cube, Bucky, Joshua, Stryfe, Harmony, Teresa, Claudia, Walker, Glenn, Fritz, Fordak, June, Cleopetra, Jean, Ivy, Betsy, Roosevelt, Spike, Ken, Which, Tofu, Chiyo, Rob, Zee, dustin, George, Del, Matthew, Cat, Jacqui, Lightfoot, Adrian, Viola, Alfred, Noel, Irfan, Sunil, Yool, Rika, Jane, Xtreme, Frontier, a2, Neo, Siobhan, Yoz, Justin, Elle, Qarl, Benjamin, Isabel, Gulliver, Everett, Christopher, Izzy, Stephany, Garry, Sejong, Sean, Tobin, Iridium, Meta, Anthony, Jeremy, JP, Jake, Maurice, Madhavi, Leopard, Kyle, Joon, Kari, Bert, Belinda, Jon, Kristi, Bridie, Pramod, KJ, Socrates, Maria, Ivan, Aric, Yamasaki, Adreanne, Jay, MitchK, Ceren, Coco, Durl, Jenny, Periapse, Kartic, Storrs, Lotte, Sandy, Rohn, Colossus, Zen, BigPapi, Brad, Pastrami, Kurz, Mani, Neuro, Jaime, MJ, Rowan, Sgt, Elvis, Gecko, Samuel, Sardonyx, Leo, Bryan, Niko, Soft, Poppy, Rachel, Aki, Angelo, Banzai, Alexa, Sue, CeeLo, Bender, CG, Gillian, Pelle, Nick, Echo, Zara, Christine, Shamiran, Emma, Blake, Keiko, Plexus, Joppa, Sidewinder, Erica, Ashlei, Twilight, Kristen, Brett, Q, Enus, Simon, Bevis, Kraft, Kip, Chandler, Ron, LauraP, Ram, KyleJM, Scouse, Prospero, Melissa, Marty, Nat, Hamilton, Kend, Lordan, Jimmy, Kosmo, Seraph, Green, Ekim, Wiggo, JT, Rome, Doris, Miz, Benoc, Whump, Trinity, Patch, Kate, TJ, Bao, Joohwan, Christy, Sofia, Matias, Cogsworth, Johan, Oreh, Cheah, Angela, Brandy, Mango, Lan, Aleks, Gloria, Heidy, Mitchell, Space, Colton, Bambers, Einstein, Maggie, Malbers, Rose, Winnie, Stella, Milton, Rothman, Niall, Marin, Allison, Katie, Dawn, Katt, Dusty, Kalpana, Judy, Andrea, Ambroff, Infinity, Gail, Rico, Raymond, Yi, William, Christa, M, Teagan, Scout, Molly, Dante, Corr, Dynamike, Usi, Kaylee, Vidtuts, Lil, Danica, Sascha, Kelv, Jacob, Nya, Rodney, Brandon, Elsie, Blondin, Grant, Katrin, Nyx, Gabriel, Locklainn, Claire, Devin, Minerva, Monty, Austin, Bradford, Si, Keira, H, Caitlin, Dita, Makai, Jenn, Ann, Meredith, Clare, Joy, Praveen, Cody, Edmund, Ruthe, Sirena, Gayathri, Spider, FJ, Davidoff, Tian, Jennie, Louise, Oskar, Landon, Noelle, Jarv, Ingrid, Al, Sommer, Doc, Aria, Huin, Gray, Lili, Vir, DJ, Yang, T, Simone, Maestro, Scott, Charlene, Quixote, Amanda, Susan, Zed, Anne, Enkidu, Esbee, Joroan, Katelin, Roxie, Tay, Scarlet, Kevin, Johnny, Wolfgang, Andren, Bob, Howard, Merov, Rand, Ray, Michon, Newell, Galen, Dessie, Les, Michon, Jenelle, Geo, Siz, Shapiro, Pete, Calyle, Selene, Allen, Phoebe, Goldin, Kimmora, Dakota, Slaton, Lindquist, Zoey, Hari, Othello, Rohit, Sheldon, Petra, Viale, Gordon, Kaye, Pink, Ferny, Emerson, Davy, Bri, Chan, Juan, Robert, Terrence, Nathan, Carl and many others.
+
+Linden Lab would like to thank the following residents: able whitman, Adeon Writer, adonaira aabye, Aeron Kohime, Agathos Frascati, Aimee Trescothick, Aleric Inglewood, Alissa Sabre, Aminom Marvin, Angela Talamasca, Aralara Rajal, Armin Weatherwax, Ashrilyn Hayashida, Athanasius Skytower, Aura Dirval, Barney Boomslang, Biancaluce Robbiani, Biker Offcourse, Borg Capalini, Bulli Schumann, catherine pfeffer, Chalice Yao, Corre Porta, Court Goodman, Cummere Mayo, Dale Innis, Darien Caldwell, Darjeeling Schoonhoven, Daten Thielt, dimentox travanti, Dirk Talamasca, Drew Dwi, Duckless Vandyke, Elanthius Flagstaff, Electro Burnstein, emiley tomsen, Escort DeFarge, Eva Rau, Ezian Ecksol, Fire Centaur, Fluf Fredriksson, Francisco Koolhoven, Frontera Thor, Frungi Stastny, Gally Young, gearsawe stonecutter, Gigs Taggart, Gordon Wendt, Gudmund Shepherd, Gypsy Paz, Harleen Gretzky, Henri Beauchamp, Inma Rau, Irene Muni, Iskar Ariantho, Jacek Antonelli, JB Kraft, Jessicka Graves, Joeseph Albanese, Joshua Philgarlic, Khyota Wulluf, kirstenlee Cinquetti, Latif Khalifa, Lex Neva, Lilibeth Andree, Lisa Lowe, Lunita Savira, Loosey Demonia, lum pfohl, Marcos Fonzarelli, MartinRJ Fayray, Marusame Arai, Matthew Dowd, Maya Remblai, McCabe Maxsted, Meghan Dench, Melchoir Tokhes, Menos Short, Michelle2 Zenovka, Mimika Oh, Minerva Memel, Mm Alder, Ochi Wolfe, Omei Turnbull, Pesho Replacement, Phantom Ninetails, phoenixflames kukulcan, Polo Gufler, prez pessoa, princess niven, Prokofy Neva, Qie Niangao, Rem Beattie, RodneyLee Jessop, Saijanai Kuhn, Seg Baphomet, Sergen Davies, Shirley Marquez, SignpostMarv Martin, Sindy Tsure, Sira Arbizu, Skips Jigsaw, Sougent Harrop, Spritely Pixel, Squirrel Wood, StarSong Bright, Subversive Writer, Sugarcult Dagger, Sylumm Grigorovich, Tammy Nowotny, Tanooki Darkes, Tayra Dagostino, Theoretical Chemistry, Thickbrick Sleaford, valerie rosewood, Vex Streeter, Vixen Heron, Whoops Babii, Winter Ventura, Xiki Luik, Yann Dufaux, Yina Yao, Yukinoroh Kamachi, Zolute Infinity, Zwagoth Klaar
+
+
+3Dconnexion SDK Copyright (C) 1992-2007 3Dconnexion
+APR Copyright (C) 2000-2004 The Apache Software Foundation
+cURL Copyright (C) 1996-2002, Daniel Stenberg, (daniel@haxx.se)
+DBus/dbus-glib Copyright (C) 2002, 2003 CodeFactory AB / Copyright (C) 2003, 2004 Red Hat, Inc.
+expat Copyright (C) 1998, 1999, 2000 Thai Open Source Software Center Ltd.
+FreeType Copyright (C) 1996-2002, The FreeType Project (www.freetype.org).
+GL Copyright (C) 1999-2004 Brian Paul.
+Havok.com(TM) Copyright (C) 1999-2001, Telekinesys Research Limited.
+jpeg2000 Copyright (C) 2001, David Taubman, The University of New South Wales (UNSW)
+jpeglib Copyright (C) 1991-1998, Thomas G. Lane.
+ogg/vorbis Copyright (C) 2001, Xiphophorus
+OpenSSL Copyright (C) 1998-2002 The OpenSSL Project.
+SDL Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Sam Lantinga
+SSLeay Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
+xmlrpc-epi Copyright (C) 2000 Epinions, Inc.
+zlib Copyright (C) 1995-2002 Jean-loup Gailly and Mark Adler.
+google-perftools Copyright (c) 2005, Google Inc.
+
+All rights reserved. See licenses.txt for details.
+
+Voice chat Audio coding: Polycom(R) Siren14(TM) (ITU-T Rec. G.722.1 Annex C)
+
+
+To be a success in business, be daring, be first, be different. --Henry Marchant
+
+
+
+ You are at [POSITION]
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_about_land.xml b/indra/newview/skins/default/xui/fr/floater_about_land.xml
index d188d58b5..2c12e5896 100644
--- a/indra/newview/skins/default/xui/fr/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/fr/floater_about_land.xml
@@ -1,569 +1,569 @@
-
-
-
-
-
- Nom :
-
-
-
- Description :
-
-
-
- Type :
-
-
- Continent / Homestead
-
-
- Catégorie :
-
-
- Adult
-
-
- Propriétaire :
-
-
- Leyla Linden
-
-
-
- Groupe :
-
-
-
-
-
-
-
- À vendre :
-
-
- Pas à vendre
-
-
- Prix : [PRICE] L$ ([PRICE_PER_SQM] L$/m²).
-
-
-
-
- À vendre à : [BUYER]
-
-
- Objets inclus dans la vente.
-
-
- Objets non inclus dans la vente.
-
-
-
- Acquis :
-
-
- Tue Aug 15 13:47:25 2006
-
-
- Superficie :
-
-
- 4048 m²
-
-
- Trafic :
-
-
- 0
-
-
-
-
-
-
-
-
- Nouveaux utilisateurs uniquement
-
-
- Tout le monde
-
-
- Surface
-
-
- [AREA] m²
-
-
- Code de l'enchère : [ID]
-
-
- Pour modifier ce terrain, vous devez approuver votre achat.
-
-
- (propriété du groupe)
-
-
- Profil...
-
-
- Infos...
-
-
- (public)
-
-
- (aucun)
-
-
- (vente en cours)
-
-
- Aucune parcelle sélectionnée.
-Allez dans le menu Monde > À propos du terrain ou sélectionnez une autre parcelle pour en afficher les détails.
-
-
-
-
- Domaine :
-
-
- Nom :
-
-
- continent
-
-
- Propriétaire :
-
-
- (aucun)
-
-
- Il n'y a aucun règlement pour ce domaine.
-
-
- Last Modified Wed Dec 31 16:00:00 1969
-
-
- Région :
-
-
- Nom :
-
-
- leyla
-
-
- Type :
-
-
- Continent / Homestead
-
-
- Catégorie :
-
-
- Adult
-
-
- Revendre :
-
-
- Le terrain dans cette région ne peut être revendu.
-
-
- Sous-diviser :
-
-
- Le terrain dans cette région ne peut être fusionné/divisé.
-
-
- Le terrain acheté dans cette région peut être revendu.
-
-
- Le terrain acheté dans cette région ne peut pas être revendu.
-
-
- Le terrain acheté dans cette région peut être fusionné
-ou divisé.
-
-
- Le terrain acheté dans cette région ne peut pas être fusionné
-ou divisé.
-
-
-
-
- Facteur Bonus Objets : [BONUS]
-
-
- Prims utilisées sur la parcelle :
-
-
- [COUNT] sur [MAX] ([AVAILABLE] disponibles)
-
-
- [COUNT] sur [MAX] ([AVAILABLE] disponibles)
-
-
- [COUNT] sur [MAX] ([DELETED] seront supprimés)
-
-
- Prims max. sur la parcelle :
-
-
- [COUNT]
-
-
- Prims sur la parcelle :
-
-
- [COUNT]
-
-
- Appartenant au propriétaire :
-
-
- [COUNT]
-
-
-
-
- Données au groupe :
-
-
- [COUNT]
-
-
-
-
- Appartenant à d'autres :
-
-
- [COUNT]
-
-
-
-
- Sélectionnées/où quelqu'un est assis :
-
-
- [COUNT]
-
-
- Renvoi automatique des objets des autres résidents (min., 0 pour désactiver) :
-
-
-
- Propriétaires :
-
-
-
-
-
-
-
-
-
-
-
-
-
- Autoriser les autres résidents à  :
-
-
-
-
-
- Créer des objets :
-
-
-
-
- Laisser entrer des objets :
-
-
-
-
- Exécuter des scripts :
-
-
-
-
- Options du terrain :
-
-
-
-
-
- Permettre aux autres résidents de voir cette parcelle dans les résultats de recherche
-
-
- Cette option est désactivée car la superficie de cette parcelle est inférieure ou égale à 128 m².
-Seules les parcelles de grande taille peuvent apparaître dans la recherche.
-
-
- Cette option est désactivée car vous ne pouvez pas modifier les options de cette parcelle.
-
-
- Voir et discuter avec les autres residents sur cette parcelle
-
-
-
- Toutes catégories
-
-
- Appartenant aux Lindens
-
-
- Adult
-
-
- Art et Culture
-
-
- Affaires
-
-
- Éducation
-
-
- Jeux
-
-
- Favoris
-
-
- Accueil pour les nouveaux
-
-
- Parcs et Nature
-
-
- Résidentiel
-
-
- Shopping
-
-
- Autre
-
-
-
-
- Toutes catégories
-
-
- Appartenant aux Lindens
-
-
- Art et Culture
-
-
- Affaires
-
-
- Éducation
-
-
- Jeux
-
-
- Favoris
-
-
- Accueil pour les nouveaux
-
-
- Parcs et Nature
-
-
- Résidentiel
-
-
- Shopping
-
-
- Autre
-
-
-
-
-
- Contenu Mature
-
-
- Contenu Adult
-
-
- Les informations ou contenu de votre parcelle sont classés Mature.
-
-
- Les informations ou contenu de votre parcelle sont classés Adult.
-
-
-
-
-
-
- Photo:
-
-
-
- Lieu d'arrivée: [LANDING]
-
-
- (aucun)
-
-
-
-
- Règles de téléportation:
-
-
-
- Bloqué
-
-
- Lieu d'arrivée fixe
-
-
- Lieu d'arrivée libre
-
-
-
-
- Pas de bousculades
-
-
- Pas de bousculades (les règles de la région priment)
-
-
-
-
- Type de média :
-
-
-
-
- URL du média :
-
-
-
-
- Description :
-
-
-
- Remplacer
-la texture :
-
-
-
- (Les objets avec cette texture affichent le film ou
-la page web quand vous cliquez sur la flèche Jouer.)
-
-
- Options
-média :
-
-
-
-
-
-
- Taille du média :
-
-
-
-
- pixels
-
-
- URL de la
-musique :
-
-
-
- Son :
-
-
-
-
- Voix :
-
-
-
-
-
-
-
- Accès à cette parcelle
-
-
-
- Bloquer l'accès aux résidents :
-
-
-
-
- Au moins une de ces options est définie au niveau du domaine.
-
-
-
-
-
- Tout le monde
-
-
- Groupe
-
-
-
-
-
- Résidents autorisés
-
-
-
-
-
- Résidents bannis
-
-
-
-
-
-
-
+
+
+
+
+
+ Nom :
+
+
+
+ Description :
+
+
+
+ Type :
+
+
+ Continent / Homestead
+
+
+ Catégorie :
+
+
+ Adult
+
+
+ Propriétaire :
+
+
+ Leyla Linden
+
+
+
+ Groupe :
+
+
+
+
+
+
+
+ À vendre :
+
+
+ Pas à vendre
+
+
+ Prix : [PRICE] L$ ([PRICE_PER_SQM] L$/m²).
+
+
+
+
+ À vendre à : [BUYER]
+
+
+ Objets inclus dans la vente.
+
+
+ Objets non inclus dans la vente.
+
+
+
+ Acquis :
+
+
+ Tue Aug 15 13:47:25 2006
+
+
+ Superficie :
+
+
+ 4048 m²
+
+
+ Trafic :
+
+
+ 0
+
+
+
+
+
+
+
+
+ Nouveaux utilisateurs uniquement
+
+
+ Tout le monde
+
+
+ Surface
+
+
+ [AREA] m²
+
+
+ Code de l'enchère : [ID]
+
+
+ Pour modifier ce terrain, vous devez approuver votre achat.
+
+
+ (propriété du groupe)
+
+
+ Profil...
+
+
+ Infos...
+
+
+ (public)
+
+
+ (aucun)
+
+
+ (vente en cours)
+
+
+ Aucune parcelle sélectionnée.
+Allez dans le menu Monde > À propos du terrain ou sélectionnez une autre parcelle pour en afficher les détails.
+
+
+
+
+ Domaine :
+
+
+ Nom :
+
+
+ continent
+
+
+ Propriétaire :
+
+
+ (aucun)
+
+
+ Il n'y a aucun règlement pour ce domaine.
+
+
+ Last Modified Wed Dec 31 16:00:00 1969
+
+
+ Région :
+
+
+ Nom :
+
+
+ leyla
+
+
+ Type :
+
+
+ Continent / Homestead
+
+
+ Catégorie :
+
+
+ Adult
+
+
+ Revendre :
+
+
+ Le terrain dans cette région ne peut être revendu.
+
+
+ Sous-diviser :
+
+
+ Le terrain dans cette région ne peut être fusionné/divisé.
+
+
+ Le terrain acheté dans cette région peut être revendu.
+
+
+ Le terrain acheté dans cette région ne peut pas être revendu.
+
+
+ Le terrain acheté dans cette région peut être fusionné
+ou divisé.
+
+
+ Le terrain acheté dans cette région ne peut pas être fusionné
+ou divisé.
+
+
+
+
+ Facteur Bonus Objets : [BONUS]
+
+
+ Prims utilisées sur la parcelle :
+
+
+ [COUNT] sur [MAX] ([AVAILABLE] disponibles)
+
+
+ [COUNT] sur [MAX] ([AVAILABLE] disponibles)
+
+
+ [COUNT] sur [MAX] ([DELETED] seront supprimés)
+
+
+ Prims max. sur la parcelle :
+
+
+ [COUNT]
+
+
+ Prims sur la parcelle :
+
+
+ [COUNT]
+
+
+ Appartenant au propriétaire :
+
+
+ [COUNT]
+
+
+
+
+ Données au groupe :
+
+
+ [COUNT]
+
+
+
+
+ Appartenant à d'autres :
+
+
+ [COUNT]
+
+
+
+
+ Sélectionnées/où quelqu'un est assis :
+
+
+ [COUNT]
+
+
+ Renvoi automatique des objets des autres résidents (min., 0 pour désactiver) :
+
+
+
+ Propriétaires :
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Autoriser les autres résidents à  :
+
+
+
+
+
+ Créer des objets :
+
+
+
+
+ Laisser entrer des objets :
+
+
+
+
+ Exécuter des scripts :
+
+
+
+
+ Options du terrain :
+
+
+
+
+
+ Permettre aux autres résidents de voir cette parcelle dans les résultats de recherche
+
+
+ Cette option est désactivée car la superficie de cette parcelle est inférieure ou égale à 128 m².
+Seules les parcelles de grande taille peuvent apparaître dans la recherche.
+
+
+ Cette option est désactivée car vous ne pouvez pas modifier les options de cette parcelle.
+
+
+ Voir et discuter avec les autres residents sur cette parcelle
+
+
+
+ Toutes catégories
+
+
+ Appartenant aux Lindens
+
+
+ Adult
+
+
+ Art et Culture
+
+
+ Affaires
+
+
+ Éducation
+
+
+ Jeux
+
+
+ Favoris
+
+
+ Accueil pour les nouveaux
+
+
+ Parcs et Nature
+
+
+ Résidentiel
+
+
+ Shopping
+
+
+ Autre
+
+
+
+
+ Toutes catégories
+
+
+ Appartenant aux Lindens
+
+
+ Art et Culture
+
+
+ Affaires
+
+
+ Éducation
+
+
+ Jeux
+
+
+ Favoris
+
+
+ Accueil pour les nouveaux
+
+
+ Parcs et Nature
+
+
+ Résidentiel
+
+
+ Shopping
+
+
+ Autre
+
+
+
+
+
+ Contenu Mature
+
+
+ Contenu Adult
+
+
+ Les informations ou contenu de votre parcelle sont classés Mature.
+
+
+ Les informations ou contenu de votre parcelle sont classés Adult.
+
+
+
+
+
+
+ Photo:
+
+
+
+ Lieu d'arrivée: [LANDING]
+
+
+ (aucun)
+
+
+
+
+ Règles de téléportation:
+
+
+
+ Bloqué
+
+
+ Lieu d'arrivée fixe
+
+
+ Lieu d'arrivée libre
+
+
+
+
+ Pas de bousculades
+
+
+ Pas de bousculades (les règles de la région priment)
+
+
+
+
+ Type de média :
+
+
+
+
+ URL du média :
+
+
+
+
+ Description :
+
+
+
+ Remplacer
+la texture :
+
+
+
+ (Les objets avec cette texture affichent le film ou
+la page web quand vous cliquez sur la flèche Jouer.)
+
+
+ Options
+média :
+
+
+
+
+
+
+ Taille du média :
+
+
+
+
+ pixels
+
+
+ URL de la
+musique :
+
+
+
+ Son :
+
+
+
+
+ Voix :
+
+
+
+
+
+
+
+ Accès à cette parcelle
+
+
+
+ Bloquer l'accès aux résidents :
+
+
+
+
+ Au moins une de ces options est définie au niveau du domaine.
+
+
+
+
+
+ Tout le monde
+
+
+ Groupe
+
+
+
+
+
+ Résidents autorisés
+
+
+
+
+
+ Résidents bannis
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_active_speakers.xml b/indra/newview/skins/default/xui/fr/floater_active_speakers.xml
index 6fe853f4a..ea277bfc8 100644
--- a/indra/newview/skins/default/xui/fr/floater_active_speakers.xml
+++ b/indra/newview/skins/default/xui/fr/floater_active_speakers.xml
@@ -1,11 +1,11 @@
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_animation_preview.xml b/indra/newview/skins/default/xui/fr/floater_animation_preview.xml
index e976dc7cc..28da329d2 100644
--- a/indra/newview/skins/default/xui/fr/floater_animation_preview.xml
+++ b/indra/newview/skins/default/xui/fr/floater_animation_preview.xml
@@ -1,165 +1,165 @@
-
-
-
- Nom :
-
-
- Description :
-
-
-
- Prévisualiser pendant
-
-
-
- Debout
-
-
- En train de marcher
-
-
- Assis
-
-
- En train de voler
-
-
-
-
-
-
- Mouvement de main
-
-
-
- Doigts écartés
-
-
- Détendues
-
-
- Pointer (les deux)
-
-
- Poing
-
-
- Détendue (gauche)
-
-
- Pointer (gauche)
-
-
- Poing (gauche)
-
-
- Détendue (droite)
-
-
- Pointer (droite)
-
-
- Poing (droite)
-
-
- Saluer (droite)
-
-
- Taper
-
-
- Paix (main droite)
-
-
-
- Expression
-
-
-
- [None]
-
-
- Aaaaah
-
-
- Effrayé
-
-
- En colère
-
-
- Grand sourire
-
-
- Ennui
-
-
- Pleurer
-
-
- Mépris
-
-
- Gêne
-
-
- Froncer les sourcils
-
-
- Embrasser
-
-
- Rire
-
-
- Plllppt
-
-
- Dégoût
-
-
- Triste
-
-
- Hausser les épaules
-
-
- Sourire
-
-
- Surprise
-
-
- Clin d'œil
-
-
- Soucis
-
-
-
-
-
-
-
-
- Impossible de lire le fichier d'animation.
-
-Nous recommandons les fichiers BVH extraits de
-Poser 4.
-
-
-
-
- Echec de l'initialisation du mouvement
-
-
- Le fichier d'animation fait [LENGTH] secondes.
-
-La longueur maximale est de [MAX_LENGTH] secondes.
-
-
- Impossible de lire le fichier d'animation.
-
-[STATUS]
-
-
+
+
+
+ Nom :
+
+
+ Description :
+
+
+
+ Prévisualiser pendant
+
+
+
+ Debout
+
+
+ En train de marcher
+
+
+ Assis
+
+
+ En train de voler
+
+
+
+
+
+
+ Mouvement de main
+
+
+
+ Doigts écartés
+
+
+ Détendues
+
+
+ Pointer (les deux)
+
+
+ Poings
+
+
+ Détendue (gauche)
+
+
+ Pointer (gauche)
+
+
+ Poing gauche
+
+
+ Détendue (droite)
+
+
+ Pointer (droite)
+
+
+ Poing droit
+
+
+ Saluer (droite)
+
+
+ Taper
+
+
+ Paix (droite)
+
+
+
+ Expression
+
+
+
+ [None]
+
+
+ Aaaaah
+
+
+ Effrayé
+
+
+ En colère
+
+
+ Grand sourire
+
+
+ Ennui
+
+
+ Pleurer
+
+
+ Mépris
+
+
+ Gêne
+
+
+ Froncer les sourcils
+
+
+ Embrasser
+
+
+ Rire
+
+
+ Plllppt
+
+
+ Dégoût
+
+
+ Triste
+
+
+ Hausser les épaules
+
+
+ Sourire
+
+
+ Surprise
+
+
+ Clin d'œil
+
+
+ Soucis
+
+
+
+
+
+
+
+
+ Impossible de lire le fichier d'animation.
+
+Nous recommandons les fichiers BVH extraits de
+Poser 4.
+
+
+
+
+ Echec de l'initialisation du mouvement
+
+
+ Le fichier d'animation fait [LENGTH] secondes.
+
+La longueur maximale est de [MAX_LENGTH] secondes.
+
+
+ Impossible de lire le fichier d'animation.
+
+[STATUS]
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_area_search.xml b/indra/newview/skins/default/xui/fr/floater_area_search.xml
new file mode 100644
index 000000000..3406d95cd
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/floater_area_search.xml
@@ -0,0 +1,50 @@
+
+
+
+ Recherche par Nom:
+
+
+ Recherche par Description:
+
+
+
+
+ Recherche par Propriétaire:
+
+
+ Recherche par Groupe:
+
+
+
+
+
+
+
+
+
+
+
+
+ Liste/Attente/Total
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_auction.xml b/indra/newview/skins/default/xui/fr/floater_auction.xml
index 75a8e2f1f..6fe3f66e1 100644
--- a/indra/newview/skins/default/xui/fr/floater_auction.xml
+++ b/indra/newview/skins/default/xui/fr/floater_auction.xml
@@ -1,18 +1,18 @@
-
-
-
-
-
- Enchères
-
-
- Premier terrain
-
-
-
-
-
- Vous ne pouvez pas mettre aux enchères des parcelles déjà en vente.
-
-
+
+
+
+
+
+ Enchères
+
+
+ Premier terrain
+
+
+
+
+
+ Vous ne pouvez pas mettre aux enchères des parcelles déjà en vente.
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_audio_volume.xml b/indra/newview/skins/default/xui/fr/floater_audio_volume.xml
index 54b9359f0..741813626 100644
--- a/indra/newview/skins/default/xui/fr/floater_audio_volume.xml
+++ b/indra/newview/skins/default/xui/fr/floater_audio_volume.xml
@@ -1,4 +1,4 @@
-
-
-
-
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_avatar_picker.xml b/indra/newview/skins/default/xui/fr/floater_avatar_picker.xml
index de1557ee1..01b4c944f 100644
--- a/indra/newview/skins/default/xui/fr/floater_avatar_picker.xml
+++ b/indra/newview/skins/default/xui/fr/floater_avatar_picker.xml
@@ -1,42 +1,42 @@
-
-
-
-
-
- Saisissez une partie du nom du résident :
-
-
-
-
-
- Sélectionnez une carte de visite :
-
-
-
-
- Choisir un résident
-près de vous :
-
-
-
-
- mètres
-
-
-
-
-
-
-
- '[TEXT]' introuvable
-
-
- Il n'y a personne près de vous
-
-
- Aucun résultat
-
-
- Recherche...
-
-
+
+
+
+
+
+ Saisissez une partie du nom du résident :
+
+
+
+
+
+ Sélectionnez une carte de visite :
+
+
+
+
+ Choisir un résident
+près de vous :
+
+
+
+
+ mètres
+
+
+
+
+
+
+
+ '[TEXT]' introuvable
+
+
+ Il n'y a personne près de vous
+
+
+ Aucun résultat
+
+
+ Recherche...
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_avatar_textures.xml b/indra/newview/skins/default/xui/fr/floater_avatar_textures.xml
index 96f68166a..5ad5ad38d 100644
--- a/indra/newview/skins/default/xui/fr/floater_avatar_textures.xml
+++ b/indra/newview/skins/default/xui/fr/floater_avatar_textures.xml
@@ -1,31 +1,31 @@
-
-
-
- Textures fixées
-
-
- Textures composées
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+ Textures fixées
+
+
+ Textures composées
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_beacons.xml b/indra/newview/skins/default/xui/fr/floater_beacons.xml
index ac5bb273f..0b060983e 100644
--- a/indra/newview/skins/default/xui/fr/floater_beacons.xml
+++ b/indra/newview/skins/default/xui/fr/floater_beacons.xml
@@ -1,15 +1,15 @@
-
-
-
-
-
-
-
-
-
-
-
- Largeur de la balise :
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+ Largeur de la balise :
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_build_options.xml b/indra/newview/skins/default/xui/fr/floater_build_options.xml
index 0906059e3..3451c2de4 100644
--- a/indra/newview/skins/default/xui/fr/floater_build_options.xml
+++ b/indra/newview/skins/default/xui/fr/floater_build_options.xml
@@ -1,8 +1,8 @@
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_bulk_perms.xml b/indra/newview/skins/default/xui/fr/floater_bulk_perms.xml
index 6b5ee81ed..b868aa33a 100644
--- a/indra/newview/skins/default/xui/fr/floater_bulk_perms.xml
+++ b/indra/newview/skins/default/xui/fr/floater_bulk_perms.xml
@@ -1,44 +1,44 @@
-
-
-
- Types de contenu
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Nouveaux droits
-
-
-
-
- Le prochain propriétaire pourra :
-
-
-
-
-
-
-
-
- La sélection contient des contenus non modifiables.
-
-
- Permissions paramétrées sur [NAME]
-
-
- Demande de changement des droits lancée...
-
-
- Demande de changement des droits finie.
-
-
+
+
+
+ Types de contenu
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Nouveaux droits
+
+
+
+
+ Le prochain propriétaire pourra :
+
+
+
+
+
+
+
+
+ La sélection contient des contenus non modifiables.
+
+
+ Permissions paramétrées sur [NAME]
+
+
+ Demande de changement des droits lancée...
+
+
+ Demande de changement des droits finie.
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_bumps.xml b/indra/newview/skins/default/xui/fr/floater_bumps.xml
index 08a87c5e1..e859f4d68 100644
--- a/indra/newview/skins/default/xui/fr/floater_bumps.xml
+++ b/indra/newview/skins/default/xui/fr/floater_bumps.xml
@@ -1,21 +1,21 @@
-
-
-
- Aucun détecté
-
-
- [TIME] [NAME] est entré en collision avec vous
-
-
- [TIME] [NAME] vous a bousculé avec un script
-
-
- [TIME] [NAME] vous a donné un coup avec un objet
-
-
- [TIME] [NAME] vous a donné un coup avec un objet scripté
-
-
- [TIME] [NAME] vous a donné un coup avec un objet physique
-
-
+
+
+
+ Aucun détecté
+
+
+ [TIME] [NAME] est entré en collision avec vous
+
+
+ [TIME] [NAME] vous a bousculé avec un script
+
+
+ [TIME] [NAME] vous a donné un coup avec un objet
+
+
+ [TIME] [NAME] vous a donné un coup avec un objet scripté
+
+
+ [TIME] [NAME] vous a donné un coup avec un objet physique
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_buy_contents.xml b/indra/newview/skins/default/xui/fr/floater_buy_contents.xml
index d3d990504..916b27050 100644
--- a/indra/newview/skins/default/xui/fr/floater_buy_contents.xml
+++ b/indra/newview/skins/default/xui/fr/floater_buy_contents.xml
@@ -1,21 +1,21 @@
-
-
-
- [NAME] contient :
-
-
- Acheter [AMOUNT] L$ Ã [NAME] ?
-
-
-
-
-
- (pas de copie)
-
-
- (pas de modification)
-
-
- (pas de transfert)
-
-
+
+
+
+ [NAME] contient :
+
+
+ Acheter [AMOUNT] L$ Ã [NAME] ?
+
+
+
+
+
+ (pas de copie)
+
+
+ (pas de modification)
+
+
+ (pas de transfert)
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_buy_currency.xml b/indra/newview/skins/default/xui/fr/floater_buy_currency.xml
index ebf04bba7..85d67218d 100644
--- a/indra/newview/skins/default/xui/fr/floater_buy_currency.xml
+++ b/indra/newview/skins/default/xui/fr/floater_buy_currency.xml
@@ -1,69 +1,69 @@
-
-
-
- Achat de L$Â :
-
-
- Impossible d'acheter maintenant :
-
-
- Vous avez besoin de plus de devises:
-
-
- Quelque chose ne va pas.
-
-
-
- En train de contacter le Lindex...
-
-
- Acheter des L$ sur le marché du LindeX
-
-
- [NAME] L$ [PRICE]
-
-
- Acheter
-
-
- 1234
-
-
- L$ pour environ [USD] US$
-
-
- Obtention des données...
-
-
- Actuellement, vous avez
-
-
- [AMT] L$
-
-
- Vous achetez
-
-
- [AMT] L$
-
-
- Votre solde sera de
-
-
- [AMT] L$
-
-
- En confirmant cette transaction, vous achetez
-uniquement les devises. Vous devrez recommencer
-cette opération.
-
-
- Vous n'achetez pas assez de devises.
-Veuillez saisir un montant plus élevé.
-
-
-
-
- Acheter [LINDENS] L$ pour environ [USD] US$
-
-
+
+
+
+ Achat de L$Â :
+
+
+ Impossible d'acheter maintenant :
+
+
+ Vous avez besoin de plus de devises:
+
+
+ Quelque chose ne va pas.
+
+
+
+ En train de contacter le Lindex...
+
+
+ Acheter des L$ sur le marché du LindeX
+
+
+ [NAME] L$ [PRICE]
+
+
+ Acheter
+
+
+ 1234
+
+
+ L$ pour environ [USD] US$
+
+
+ Obtention des données...
+
+
+ Actuellement, vous avez
+
+
+ [AMT] L$
+
+
+ Vous achetez
+
+
+ [AMT] L$
+
+
+ Votre solde sera de
+
+
+ [AMT] L$
+
+
+ En confirmant cette transaction, vous achetez
+uniquement les devises. Vous devrez recommencer
+cette opération.
+
+
+ Vous n'achetez pas assez de devises.
+Veuillez saisir un montant plus élevé.
+
+
+
+
+ Acheter [LINDENS] L$ pour environ [USD] US$
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_buy_land.xml b/indra/newview/skins/default/xui/fr/floater_buy_land.xml
index dd3b46b47..5ed36c983 100644
--- a/indra/newview/skins/default/xui/fr/floater_buy_land.xml
+++ b/indra/newview/skins/default/xui/fr/floater_buy_land.xml
@@ -1,243 +1,243 @@
-
-
-
- Région :
-
-
- (inconnue)
-
-
- Type :
-
-
- (inconnu)
-
-
- Domaine :
-
-
- (inconnu)
-
-
- Propriétaire :
-
-
- (inconnu)
-
-
- Terrain acheté dans cette région :
-
-
- Peut être revendu ou pas.
-
-
- Peut être fusionné/divisé ou pas.
-
-
- Vous devez accepter le règlement du domaine :
-
-
-
- Chargement...
-
-
-
- Parcelle :
-
-
- Scotopteryx 138,204
-
-
- Taille :
-
-
- 1024 m²
-
-
- Prix :
-
-
- 1500 L$
- (1,1 L$/m²)
- vendu avec objets
-
-
- Si vous achetez ce terrain :
-
-
- Quelque chose ne va pas.
-
-
-
- Vous passerez à un compte Premium.
-
-
- Seuls les membres Premium peuvent posséder du terrain.
-
-
-
- 9,95 US$/mois, facturation mensuelle
-
-
- 7,50 US$/mois, facturation trimestrielle
-
-
- 6,00 US$/mois, facturation annuelle
-
-
-
- Augmentez vos frais d'occupation de terrain à 40 US$/mois.
-
-
- Vous êtes propriétaire de 1 309 m² de terrain.
-Cette parcelle fait 512 m².
-
-
- Payez au résident X 4 000 L$ pour le terrain
-
-
- Vous avez 2 100 L$.
-
-
- Acheter des L$
-
-
- 1000
-
-
- pour environ [AMOUNT2] US$
-
-
- Vous avez 2 100 L$.
-
-
-
-
-
- Peut être revendu.
-
-
- Ne peut pas être revendu.
-
-
- Peut être fusionné ou divisé.
-
-
- Ne peut pas être fusionné ou divisé.
-
-
- Vous n'avez pas la permission d'acheter de terrain pour votre groupe.
-
-
- Aucun terrain sélectionné.
-
-
- Vous avez sélectionné plusieurs parcelles.
-Sélectionnez une zone plus petite.
-
-
- Vous n'avez pas la permission d'acheter de terrain pour votre groupe.
-
-
- La parcelle sélectionnée n'est pas à vendre.
-
-
- La parcelle appartient déjà au groupe.
-
-
- La parcelle vous appartient déjà .
-
-
- La parcelle sélectionnée doit déjà être vendue à quelqu'un d'autre.
-
-
- Il n'y a pas de terrain public dans cette zone.
-
-
- Le terrain sélectionné appartient à quelqu'un d'autre.
-Sélectionnez une zone plus petite.
-
-
- Achat en cours de traitement...
-
-(Veuillez patienter quelques instants.)
-
-
- Une erreur s'est produite pendant le traitement de l'achat du terrain.
-
-
- Si vous achetez ce terrain :
-
-
- Si vous achetez le terrain pour le groupe :
-
-
- Impossible d'acheter maintenant :
-
-
- Pas à vendre :
-
-
- aucun besoin
-
-
- Pour posséder du terrain, vous devez avoir un niveau de compte supérieur.
-
-
- Avec votre compte, vous pouvez posséder du terrain.
-
-
- Vous possédez un terrain de [BUYER] m².
-
-
- Payez [AMOUNT] L$ Ã [SELLER] pour ce terrain
-
-
- Acheter [AMOUNT] L$ pour environ [AMOUNT2] US$,
-
-
- Cette parcelle fait [AMOUNT] m².
-
-
- Ce terrain est premium et les frais associés sont ceux d'un terrain de [AMOUNT] m².
-
-
- Ce terrain est en solde et les frais associés sont ceux d'un terrain de [AMOUNT] m².
-
-
- [AMOUNT] m²
-peuvent contenir [AMOUNT2] prims
-
-
- vendu avec objets
-
-
- objets non inclus
-
-
- [PRICE] L$
-([PRICE_PER_SQM] L$/m²)
-[SOLD_WITH_OBJECTS]
-
-
- Ce groupe, [GROUP], aura besoin de suffisamment de crédit pour payer les frais d'occupation de terrain avant que l'achat de cette parcelle ne soit finalisé.
-
-
- Vous avez [AMOUNT] L$, ce qui est suffisant pour acheter ce terrain.
-
-
- Vous n'avez que [AMOUNT] L$ et vous avez besoin de [AMOUNT2] L$ de plus.
-
-
- Après cet achat, il vous restera [AMOUNT] L$.
-
-
- Pour avoir les moyens d'acquérir ce terrain, vous devez acheter au moins [AMOUNT] L$.
-
-
- (aucune parcelle sélectionnée)
-
-
- Acheter [LINDENS] L$ pour environ [USD] US$
-
-
+
+
+
+ Région :
+
+
+ (inconnue)
+
+
+ Type :
+
+
+ (inconnu)
+
+
+ Domaine :
+
+
+ (inconnu)
+
+
+ Propriétaire :
+
+
+ (inconnu)
+
+
+ Terrain acheté dans cette région :
+
+
+ Peut être revendu ou pas.
+
+
+ Peut être fusionné/divisé ou pas.
+
+
+ Vous devez accepter le règlement du domaine :
+
+
+
+ Chargement...
+
+
+
+ Parcelle :
+
+
+ Scotopteryx 138,204
+
+
+ Taille :
+
+
+ 1024 m²
+
+
+ Prix :
+
+
+ 1500 L$
+ (1,1 L$/m²)
+ vendu avec objets
+
+
+ Si vous achetez ce terrain :
+
+
+ Quelque chose ne va pas.
+
+
+
+ Vous passerez à un compte Premium.
+
+
+ Seuls les membres Premium peuvent posséder du terrain.
+
+
+
+ 9,95 US$/mois, facturation mensuelle
+
+
+ 7,50 US$/mois, facturation trimestrielle
+
+
+ 6,00 US$/mois, facturation annuelle
+
+
+
+ Augmentez vos frais d'occupation de terrain à 40 US$/mois.
+
+
+ Vous êtes propriétaire de 1 309 m² de terrain.
+Cette parcelle fait 512 m².
+
+
+ Payez au résident X 4 000 L$ pour le terrain
+
+
+ Vous avez 2 100 L$.
+
+
+ Acheter des L$
+
+
+ 1000
+
+
+ pour environ [AMOUNT2] US$
+
+
+ Vous avez 2 100 L$.
+
+
+
+
+
+ Peut être revendu.
+
+
+ Ne peut pas être revendu.
+
+
+ Peut être fusionné ou divisé.
+
+
+ Ne peut pas être fusionné ou divisé.
+
+
+ Vous n'avez pas la permission d'acheter de terrain pour votre groupe.
+
+
+ Aucun terrain sélectionné.
+
+
+ Vous avez sélectionné plusieurs parcelles.
+Sélectionnez une zone plus petite.
+
+
+ Vous n'avez pas la permission d'acheter de terrain pour votre groupe.
+
+
+ La parcelle sélectionnée n'est pas à vendre.
+
+
+ La parcelle appartient déjà au groupe.
+
+
+ La parcelle vous appartient déjà .
+
+
+ La parcelle sélectionnée doit déjà être vendue à quelqu'un d'autre.
+
+
+ Il n'y a pas de terrain public dans cette zone.
+
+
+ Le terrain sélectionné appartient à quelqu'un d'autre.
+Sélectionnez une zone plus petite.
+
+
+ Achat en cours de traitement...
+
+(Veuillez patienter quelques instants.)
+
+
+ Une erreur s'est produite pendant le traitement de l'achat du terrain.
+
+
+ Si vous achetez ce terrain :
+
+
+ Si vous achetez le terrain pour le groupe :
+
+
+ Impossible d'acheter maintenant :
+
+
+ Pas à vendre :
+
+
+ aucun besoin
+
+
+ Pour posséder du terrain, vous devez avoir un niveau de compte supérieur.
+
+
+ Avec votre compte, vous pouvez posséder du terrain.
+
+
+ Vous possédez un terrain de [BUYER] m².
+
+
+ Payez [AMOUNT] L$ Ã [SELLER] pour ce terrain
+
+
+ Acheter [AMOUNT] L$ pour environ [AMOUNT2] US$,
+
+
+ Cette parcelle fait [AMOUNT] m².
+
+
+ Ce terrain est premium et les frais associés sont ceux d'un terrain de [AMOUNT] m².
+
+
+ Ce terrain est en solde et les frais associés sont ceux d'un terrain de [AMOUNT] m².
+
+
+ [AMOUNT] m²
+peuvent contenir [AMOUNT2] prims
+
+
+ vendu avec objets
+
+
+ objets non inclus
+
+
+ [PRICE] L$
+([PRICE_PER_SQM] L$/m²)
+[SOLD_WITH_OBJECTS]
+
+
+ Ce groupe, [GROUP], aura besoin de suffisamment de crédit pour payer les frais d'occupation de terrain avant que l'achat de cette parcelle ne soit finalisé.
+
+
+ Vous avez [AMOUNT] L$, ce qui est suffisant pour acheter ce terrain.
+
+
+ Vous n'avez que [AMOUNT] L$ et vous avez besoin de [AMOUNT2] L$ de plus.
+
+
+ Après cet achat, il vous restera [AMOUNT] L$.
+
+
+ Pour avoir les moyens d'acquérir ce terrain, vous devez acheter au moins [AMOUNT] L$.
+
+
+ (aucune parcelle sélectionnée)
+
+
+ Acheter [LINDENS] L$ pour environ [USD] US$
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_buy_object.xml b/indra/newview/skins/default/xui/fr/floater_buy_object.xml
index 2bbbbc97b..9e0ce25b9 100644
--- a/indra/newview/skins/default/xui/fr/floater_buy_object.xml
+++ b/indra/newview/skins/default/xui/fr/floater_buy_object.xml
@@ -1,26 +1,26 @@
-
-
-
- et ses contenus :
-
-
- Acheter pour [AMOUNT] L$ Ã [NAME] ?
-
-
-
-
- Acheter
-
-
- Acheter une copie
-
-
- (pas de copie)
-
-
- (pas de modification)
-
-
- (pas de transfert)
-
-
+
+
+
+ et ses contenus :
+
+
+ Acheter pour [AMOUNT] L$ Ã [NAME] ?
+
+
+
+
+ Acheter
+
+
+ Acheter une copie
+
+
+ (pas de copie)
+
+
+ (pas de modification)
+
+
+ (pas de transfert)
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_camera.xml b/indra/newview/skins/default/xui/fr/floater_camera.xml
index 26c78d167..9f280b726 100644
--- a/indra/newview/skins/default/xui/fr/floater_camera.xml
+++ b/indra/newview/skins/default/xui/fr/floater_camera.xml
@@ -1,12 +1,12 @@
-
-
-
- Faire tourner la caméra autour du point central
-
-
- Zoomer en direction du point central
-
-
- Déplacer la caméra vers le haut et le bas, la gauche et la droite
-
-
+
+
+
+ Faire tourner la caméra autour du point central
+
+
+ Zoomer en direction du point central
+
+
+ Déplacer la caméra vers le haut et le bas, la gauche et la droite
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_chat_history.xml b/indra/newview/skins/default/xui/fr/floater_chat_history.xml
index 6dc69f340..9c014289a 100644
--- a/indra/newview/skins/default/xui/fr/floater_chat_history.xml
+++ b/indra/newview/skins/default/xui/fr/floater_chat_history.xml
@@ -1,98 +1,98 @@
-
-
-
- Connexion au chat vocal du Monde en cours…
-
-
- Connecté(e)
-
-
- Voix non disponible à l'endroit où vous êtes
-
-
- Déconnecté du chat vocal
-
-
- icn_voice-localchat.tga
-
-
- -- Archivage des IM activé --
-
-
- - Fin de l'archivage --
-
-
- '[OBJECTNAME]', un objet appartenant à [OWNERNAME], situé dans [REGIONNAME] à [REGIONPOS], a reçu le droit de : [PERMISSIONS].
-
-
- '[OBJECTNAME]', un objet appartenant à [OWNERNAME], situé dans [REGIONNAME] à [REGIONPOS], n'a pas reçu le droit de : [PERMISSIONS].
-
-
- Débiter vos Linden dollars (L$)
-
-
- Utiliser vos touches de commandes
-
-
- Reconfigurer vos touches de commandes
-
-
- Animer votre avatar
-
-
- Attacher à votre avatar
-
-
- Passer l'objet dans le domaine public (sans propriétaire)
-
-
- Lier et délier d'autres objets
-
-
- Créer et supprimer des liens avec d'autres objets
-
-
- Modifier ses droits
-
-
- Suivre votre caméra
-
-
- Contrôler votre caméra
-
-
-
-
-
- Gestures
-
-
-
-
-
-
-
-
-
- Gestures
-
-
-
-
- Crier
-
-
- Dire
-
-
- Chuchoter
-
-
-
-
-
-
+
+
+
+ Connexion au chat vocal du Monde en cours…
+
+
+ Connecté(e)
+
+
+ Voix non disponible à l'endroit où vous êtes
+
+
+ Déconnecté du chat vocal
+
+
+ icn_voice-localchat.tga
+
+
+ -- Archivage des IM activé --
+
+
+ - Fin de l'archivage --
+
+
+ '[OBJECTNAME]', un objet appartenant à [OWNERNAME], situé dans [REGIONNAME] à [REGIONPOS], a reçu le droit de : [PERMISSIONS].
+
+
+ '[OBJECTNAME]', un objet appartenant à [OWNERNAME], situé dans [REGIONNAME] à [REGIONPOS], n'a pas reçu le droit de : [PERMISSIONS].
+
+
+ Débiter vos Linden dollars (L$)
+
+
+ Utiliser vos touches de commandes
+
+
+ Reconfigurer vos touches de commandes
+
+
+ Animer votre avatar
+
+
+ Attacher à votre avatar
+
+
+ Passer l'objet dans le domaine public (sans propriétaire)
+
+
+ Lier et délier d'autres objets
+
+
+ Créer et supprimer des liens avec d'autres objets
+
+
+ Modifier ses droits
+
+
+ Suivre votre caméra
+
+
+ Contrôler votre caméra
+
+
+
+
+
+ Gestures
+
+
+
+
+
+
+
+
+
+ Gestures
+
+
+
+
+ Crier
+
+
+ Dire
+
+
+ Chuchoter
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_chatterbox.xml b/indra/newview/skins/default/xui/fr/floater_chatterbox.xml
index 747e87f2c..090f8e0b4 100644
--- a/indra/newview/skins/default/xui/fr/floater_chatterbox.xml
+++ b/indra/newview/skins/default/xui/fr/floater_chatterbox.xml
@@ -1,2 +1,2 @@
-
-
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_choose_group.xml b/indra/newview/skins/default/xui/fr/floater_choose_group.xml
index bedc51cd1..ade440f29 100644
--- a/indra/newview/skins/default/xui/fr/floater_choose_group.xml
+++ b/indra/newview/skins/default/xui/fr/floater_choose_group.xml
@@ -1,8 +1,8 @@
-
-
-
- Choisissez un groupe :
-
-
-
-
+
+
+
+ Choisissez un groupe :
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_color_picker.xml b/indra/newview/skins/default/xui/fr/floater_color_picker.xml
index f6c210c4c..adab86dac 100644
--- a/indra/newview/skins/default/xui/fr/floater_color_picker.xml
+++ b/indra/newview/skins/default/xui/fr/floater_color_picker.xml
@@ -1,32 +1,32 @@
-
-
-
- Rouge :
-
-
- Vert :
-
-
- Bleu :
-
-
- Teinte :
-
-
- Sat :
-
-
- Lum :
-
-
-
-
-
-
- Couleur actuelle :
-
-
- (Faire glisser dessous
-pour enregistrer.)
-
-
+
+
+
+ Rouge :
+
+
+ Vert :
+
+
+ Bleu :
+
+
+ Teinte :
+
+
+ Sat :
+
+
+ Lum :
+
+
+
+
+
+
+ Couleur actuelle :
+
+
+ (Faire glisser dessous
+pour enregistrer.)
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_critical.xml b/indra/newview/skins/default/xui/fr/floater_critical.xml
index de7cfe048..6d30d9704 100644
--- a/indra/newview/skins/default/xui/fr/floater_critical.xml
+++ b/indra/newview/skins/default/xui/fr/floater_critical.xml
@@ -1,11 +1,11 @@
-
-
-
-
-
- Veuillez lire le message suivant avec attention.
-
-
- TOS_TEXT
-
-
+
+
+
+
+
+ Veuillez lire le message suivant avec attention.
+
+
+ TOS_TEXT
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_customize.xml b/indra/newview/skins/default/xui/fr/floater_customize.xml
index 757d29dfa..9f69e53d8 100644
--- a/indra/newview/skins/default/xui/fr/floater_customize.xml
+++ b/indra/newview/skins/default/xui/fr/floater_customize.xml
@@ -1,502 +1,502 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Femme
-
-
- Homme
-
-
-
- [DESC]
-
-
- [DESC]: impossible de modifier
-
-
- [DESC]: en cours de chargement...
-
-
- [DESC]: non portée
-
-
- Emplacement : [PATH]
-
-
- Pour changer de silhouette, faites-en glisser une à partir de votre
-inventaire jusqu'à votre avatar. Vous pouvez aussi en créer une nouvelle
-et de la porter.
-
-
- Vous n'avez pas la permission de modifier cet objet.
-
-
- Silhouette :
-
-
-
-
-
-
-
-
-
-
-
- [DESC]
-
-
- [DESC]: impossible de modifier
-
-
- [DESC]: en cours de chargement...
-
-
- [DESC]: non portée
-
-
- Emplacement : [PATH]
-
-
- Pour changer de peau, faites-en glisser une à partir de votre inventaire.
-Vous pouvez aussi en créer une nouvelle et la porter.
-
-
- Vous n'avez pas la permission de modifier cet objet.
-
-
- Peau :
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- [DESC]
-
-
- [DESC]: impossible de modifier
-
-
- [DESC]: en cours de chargement...
-
-
- [DESC]: non portés
-
-
- Emplacement : [PATH]
-
-
- Pour changer de chevelure, faites-en glisser une de votre inventaire
-jusqu'à votre avatar. Vous pouvez aussi en créer une nouvelle
-et la porter.
-
-
- Vous n'avez pas la permission de modifier cet objet.
-
-
- Cheveux :
-
-
-
-
-
-
-
-
-
- [DESC]
-
-
- [DESC]: impossible de modifier
-
-
- [DESC]: en cours de chargement...
-
-
- [DESC]: non portés
-
-
- Emplacement : [PATH]
-
-
- Pour changer vos yeux, faites-les glisser de votre inventaire jusqu'Ã
-votre avatar. Vous pouvez aussi en créer de nouveaux et les porter.
-
-
- Vous n'avez pas la permission de modifier cet objet.
-
-
- Yeux :
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- [DESC]
-
-
- [DESC]: impossible de modifier
-
-
- [DESC]: en cours de chargement...
-
-
- [DESC]: non portée
-
-
- Emplacement : [PATH]
-
-
- Pour porter une nouvelle chemise, faites-en glisser une de votre inventaire
-jusqu'à votre avatar. Vous pouvez aussi en créer une nouvelle et la porter.
-
-
- Vous n'avez pas la permission de modifier cet objet.
-
-
- Chemise :
-
-
-
-
-
-
-
-
-
-
-
- [DESC]
-
-
- [DESC]: impossible de modifier
-
-
- [DESC]: en cours de chargement...
-
-
- [DESC]: non porté
-
-
- Emplacement : [PATH]
-
-
- Pour porter un nouveau pantalon, faites-en glisser un de votre inventaire
-jusqu'à votre avatar. Vous pouvez aussi en créer un nouveau et le porter.
-
-
- Vous n'avez pas la permission de modifier cet objet.
-
-
- Pantalon :
-
-
-
-
- [DESC]
-
-
- [DESC]: impossible de modifier
-
-
- [DESC]: en cours de chargement...
-
-
- [DESC]: non portées
-
-
- Emplacement : [PATH]
-
-
- Pour porter de nouvelles chaussures, faites-en glisser une paire de votre
-inventaire jusqu'à votre avatar. Vous pouvez aussi en créer une
-nouvelle paire et la porter.
-
-
- Vous n'avez pas la permission de modifier cet objet.
-
-
- Chaussures :
-
-
-
-
-
-
-
-
-
-
-
- [DESC]
-
-
- [DESC]: impossible de modifier
-
-
- [DESC]: en cours de chargement...
-
-
- [DESC]: non portées
-
-
- Emplacement : [PATH]
-
-
- Pour porter de nouvelles chaussettes, faites-en glisser une paire de votre
-inventaire jusqu'à votre avatar. Vous pouvez aussi en créer une
-nouvelle paire et la porter.
-
-
- Vous n'avez pas la permission de modifier cet objet.
-
-
- Chaussettes :
-
-
-
-
-
-
-
-
-
-
-
- [DESC]
-
-
- [DESC]: impossible de modifier
-
-
- [DESC]: en cours de chargement...
-
-
- [DESC]: non portée
-
-
- Emplacement : [PATH]
-
-
- Pour porter une nouvelle veste, faites-en glisser une de votre inventaire
-jusqu'à votre avatar. Vous pouvez aussi en créer une nouvelle et la porter.
-
-
- Vous n'avez pas la permission de modifier cet objet.
-
-
- Veste :
-
-
-
-
-
-
-
-
-
-
-
-
- [DESC]
-
-
- [DESC]: impossible de modifier
-
-
- [DESC]: en cours de chargement...
-
-
- [DESC]: non portés
-
-
- Emplacement : [PATH]
-
-
- Pour porter de nouveaux gants, faites-les glisser à partir de votre
-inventaire. Vous pouvez aussi en créer une nouvelle paire et la porter.
-
-
- Vous n'avez pas la permission de modifier cet objet.
-
-
- Gants :
-
-
-
-
-
-
-
-
-
-
-
- [DESC]
-
-
- [DESC]: impossible de modifier
-
-
- [DESC]: en cours de chargement...
-
-
- [DESC]: non portés
-
-
- Emplacement : [PATH]
-
-
- Pour porter de nouveaux sous-vêtements, faites-les glisser à partir de
-votre inventaire. Vous pouvez aussi en créer des nouveaux et les porter.
-
-
- Vous n'avez pas la permission de modifier cet objet.
-
-
- Sous-vêtements
-(haut)Â :
-
-
-
-
-
-
-
-
-
-
-
- [DESC]
-
-
- [DESC]: impossible de modifier
-
-
- [DESC]: en cours de chargement...
-
-
- [DESC]: non portés
-
-
- Emplacement : [PATH]
-
-
- Pour porter de nouveaux sous-vêtements, faites-les glisser à partir de
-votre inventaire. Vous pouvez aussi en créer des nouveaux et les porter.
-
-
- Vous n'avez pas la permission de modifier cet objet.
-
-
- Sous-vêtements
-(bas)Â :
-
-
-
-
-
-
-
-
-
-
-
- [DESC]
-
-
- [DESC]: impossible de modifier
-
-
- [DESC]: en cours de chargement...
-
-
- [DESC]: non portée
-
-
- Emplacement : [PATH]
-
-
- Pour porter une nouvelle jupe, faites-en glisser une à partir de votre
-inventaire. Vous pouvez aussi en créer une nouvelle et la porter.
-
-
- Vous n'avez pas la permission de modifier cet objet.
-
-
- Jupe :
-
-
-
-
-
-
-
-
-
-
-
- Taille:
-
-
- (metric)
-
-
- (imperial)
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Femme
+
+
+ Homme
+
+
+
+ [DESC]
+
+
+ [DESC]: impossible de modifier
+
+
+ [DESC]: en cours de chargement...
+
+
+ [DESC]: non portée
+
+
+ Emplacement : [PATH]
+
+
+ Pour changer de silhouette, faites-en glisser une à partir de votre
+inventaire jusqu'à votre avatar. Vous pouvez aussi en créer une nouvelle
+et de la porter.
+
+
+ Vous n'avez pas la permission de modifier cet objet.
+
+
+ Silhouette :
+
+
+
+
+
+
+
+
+
+
+
+ [DESC]
+
+
+ [DESC]: impossible de modifier
+
+
+ [DESC]: en cours de chargement...
+
+
+ [DESC]: non portée
+
+
+ Emplacement : [PATH]
+
+
+ Pour changer de peau, faites-en glisser une à partir de votre inventaire.
+Vous pouvez aussi en créer une nouvelle et la porter.
+
+
+ Vous n'avez pas la permission de modifier cet objet.
+
+
+ Peau :
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ [DESC]
+
+
+ [DESC]: impossible de modifier
+
+
+ [DESC]: en cours de chargement...
+
+
+ [DESC]: non portés
+
+
+ Emplacement : [PATH]
+
+
+ Pour changer de chevelure, faites-en glisser une de votre inventaire
+jusqu'à votre avatar. Vous pouvez aussi en créer une nouvelle
+et la porter.
+
+
+ Vous n'avez pas la permission de modifier cet objet.
+
+
+ Cheveux :
+
+
+
+
+
+
+
+
+
+ [DESC]
+
+
+ [DESC]: impossible de modifier
+
+
+ [DESC]: en cours de chargement...
+
+
+ [DESC]: non portés
+
+
+ Emplacement : [PATH]
+
+
+ Pour changer vos yeux, faites-les glisser de votre inventaire jusqu'Ã
+votre avatar. Vous pouvez aussi en créer de nouveaux et les porter.
+
+
+ Vous n'avez pas la permission de modifier cet objet.
+
+
+ Yeux :
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ [DESC]
+
+
+ [DESC]: impossible de modifier
+
+
+ [DESC]: en cours de chargement...
+
+
+ [DESC]: non portée
+
+
+ Emplacement : [PATH]
+
+
+ Pour porter une nouvelle chemise, faites-en glisser une de votre inventaire
+jusqu'à votre avatar. Vous pouvez aussi en créer une nouvelle et la porter.
+
+
+ Vous n'avez pas la permission de modifier cet objet.
+
+
+ Chemise :
+
+
+
+
+
+
+
+
+
+
+
+ [DESC]
+
+
+ [DESC]: impossible de modifier
+
+
+ [DESC]: en cours de chargement...
+
+
+ [DESC]: non porté
+
+
+ Emplacement : [PATH]
+
+
+ Pour porter un nouveau pantalon, faites-en glisser un de votre inventaire
+jusqu'à votre avatar. Vous pouvez aussi en créer un nouveau et le porter.
+
+
+ Vous n'avez pas la permission de modifier cet objet.
+
+
+ Pantalon :
+
+
+
+
+ [DESC]
+
+
+ [DESC]: impossible de modifier
+
+
+ [DESC]: en cours de chargement...
+
+
+ [DESC]: non portées
+
+
+ Emplacement : [PATH]
+
+
+ Pour porter de nouvelles chaussures, faites-en glisser une paire de votre
+inventaire jusqu'à votre avatar. Vous pouvez aussi en créer une
+nouvelle paire et la porter.
+
+
+ Vous n'avez pas la permission de modifier cet objet.
+
+
+ Chaussures :
+
+
+
+
+
+
+
+
+
+
+
+ [DESC]
+
+
+ [DESC]: impossible de modifier
+
+
+ [DESC]: en cours de chargement...
+
+
+ [DESC]: non portées
+
+
+ Emplacement : [PATH]
+
+
+ Pour porter de nouvelles chaussettes, faites-en glisser une paire de votre
+inventaire jusqu'à votre avatar. Vous pouvez aussi en créer une
+nouvelle paire et la porter.
+
+
+ Vous n'avez pas la permission de modifier cet objet.
+
+
+ Chaussettes :
+
+
+
+
+
+
+
+
+
+
+
+ [DESC]
+
+
+ [DESC]: impossible de modifier
+
+
+ [DESC]: en cours de chargement...
+
+
+ [DESC]: non portée
+
+
+ Emplacement : [PATH]
+
+
+ Pour porter une nouvelle veste, faites-en glisser une de votre inventaire
+jusqu'à votre avatar. Vous pouvez aussi en créer une nouvelle et la porter.
+
+
+ Vous n'avez pas la permission de modifier cet objet.
+
+
+ Veste :
+
+
+
+
+
+
+
+
+
+
+
+
+ [DESC]
+
+
+ [DESC]: impossible de modifier
+
+
+ [DESC]: en cours de chargement...
+
+
+ [DESC]: non portés
+
+
+ Emplacement : [PATH]
+
+
+ Pour porter de nouveaux gants, faites-les glisser à partir de votre
+inventaire. Vous pouvez aussi en créer une nouvelle paire et la porter.
+
+
+ Vous n'avez pas la permission de modifier cet objet.
+
+
+ Gants :
+
+
+
+
+
+
+
+
+
+
+
+ [DESC]
+
+
+ [DESC]: impossible de modifier
+
+
+ [DESC]: en cours de chargement...
+
+
+ [DESC]: non portés
+
+
+ Emplacement : [PATH]
+
+
+ Pour porter de nouveaux sous-vêtements, faites-les glisser à partir de
+votre inventaire. Vous pouvez aussi en créer des nouveaux et les porter.
+
+
+ Vous n'avez pas la permission de modifier cet objet.
+
+
+ Sous-vêtements
+(haut)Â :
+
+
+
+
+
+
+
+
+
+
+
+ [DESC]
+
+
+ [DESC]: impossible de modifier
+
+
+ [DESC]: en cours de chargement...
+
+
+ [DESC]: non portés
+
+
+ Emplacement : [PATH]
+
+
+ Pour porter de nouveaux sous-vêtements, faites-les glisser à partir de
+votre inventaire. Vous pouvez aussi en créer des nouveaux et les porter.
+
+
+ Vous n'avez pas la permission de modifier cet objet.
+
+
+ Sous-vêtements
+(bas)Â :
+
+
+
+
+
+
+
+
+
+
+
+ [DESC]
+
+
+ [DESC]: impossible de modifier
+
+
+ [DESC]: en cours de chargement...
+
+
+ [DESC]: non portée
+
+
+ Emplacement : [PATH]
+
+
+ Pour porter une nouvelle jupe, faites-en glisser une à partir de votre
+inventaire. Vous pouvez aussi en créer une nouvelle et la porter.
+
+
+ Vous n'avez pas la permission de modifier cet objet.
+
+
+ Jupe :
+
+
+
+
+
+
+
+
+
+
+
+ Taille:
+
+
+ (metric)
+
+
+ (imperial)
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_day_cycle_options.xml b/indra/newview/skins/default/xui/fr/floater_day_cycle_options.xml
index f664e6925..110353989 100644
--- a/indra/newview/skins/default/xui/fr/floater_day_cycle_options.xml
+++ b/indra/newview/skins/default/xui/fr/floater_day_cycle_options.xml
@@ -1,97 +1,97 @@
-
-
-
-
-
-
- Minuit
-
-
- 3h
-
-
- 6h
-
-
- 9h
-
-
- Midi
-
-
- 15h
-
-
- 18h
-
-
- 21h
-
-
- Minuit
-
-
- |
-
-
- I
-
-
- |
-
-
- I
-
-
- |
-
-
- I
-
-
- |
-
-
- I
-
-
- |
-
-
-
-
- Réglages des images-clés :
-
-
- Heure de la clé :
-
-
-
-
- Préréglages clés :
-
-
-
- Snap :
-
-
-
- Durée du cycle :
-
-
-
-
-
- Prévisualiser :
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+ Minuit
+
+
+ 3h
+
+
+ 6h
+
+
+ 9h
+
+
+ Midi
+
+
+ 15h
+
+
+ 18h
+
+
+ 21h
+
+
+ Minuit
+
+
+ |
+
+
+ I
+
+
+ |
+
+
+ I
+
+
+ |
+
+
+ I
+
+
+ |
+
+
+ I
+
+
+ |
+
+
+
+
+ Réglages des images-clés :
+
+
+ Heure de la clé :
+
+
+
+
+ Préréglages clés :
+
+
+
+ Snap :
+
+
+
+ Durée du cycle :
+
+
+
+
+
+ Prévisualiser :
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_device_settings.xml b/indra/newview/skins/default/xui/fr/floater_device_settings.xml
index 0bd21a4dc..656f1c4fb 100644
--- a/indra/newview/skins/default/xui/fr/floater_device_settings.xml
+++ b/indra/newview/skins/default/xui/fr/floater_device_settings.xml
@@ -1,3 +1,3 @@
-
-
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_directory.xml b/indra/newview/skins/default/xui/fr/floater_directory.xml
index 69f52f3c4..b7a1df0a4 100644
--- a/indra/newview/skins/default/xui/fr/floater_directory.xml
+++ b/indra/newview/skins/default/xui/fr/floater_directory.xml
@@ -1,427 +1,427 @@
-
-
-
-
-
- Recherche en cours...
-
-
- Aucun résultat.
-
-
- Trouver :
-
-
-
-
-
-
-
- Toutes catégories
-
-
- Événements
-
-
- Groupes
-
-
- Résidents
-
-
- Lieux
-
-
- Wiki
-
-
-
-
-
-
-
- Chargement en cours...
-
-
- Fini
-
-
- http://secondlife.com/app/search/notfound.html
-
-
- http://secondlife.com/app/search/index.php?
-
-
-
-
- Recherche en cours...
-
-
- Aucun résultat.
-
-
- Trouver :
-
-
-
-
-
-
-
- Toutes catégories
-
-
- Shopping
-
-
- Terrains à louer
-
-
- Propriétés à louer
-
-
- Divertissements
-
-
- Nouveaux produits
-
-
- Emplois
-
-
- Offres
-
-
- Services
-
-
- Rencontres
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Recherche en cours...
-
-
- Aucun résultat.
-
-
- Trouver :
-
-
-
-
- En cours et futurs
-
-
- Date
-
-
-
-
- 6/6
-
-
-
-
- Catégorie :
-
-
-
- Toutes catégories
-
-
- Discussions
-
-
- Sports
-
-
- Musique live
-
-
- Publicités
-
-
- Divertissements/Soirées
-
-
- Jeux/Compétitions
-
-
- Concours
-
-
- Éducation
-
-
- Arts et Culture
-
-
- Groupes d'entraide/Caritatif
-
-
- Divers
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Recherche en cours...
-
-
- Aucun résultat.
-
-
-
-
- Chargement en cours...
-
-
- Fini
-
-
- http://secondlife.com/app/search/notfound.html
-
-
- http://secondlife.com/app/showcase/index.php?
-
-
-
-
- Recherche en cours...
-
-
- Aucun résultat.
-
-
- Vous pouvez acheter un terrain directement en dollars Linden (L$) ou aux enchères (en L$ ou US$).
-Pour acheter directement, visitez le terrain et cliquez sur le nom de l'endroit dans la barre de titre.
-
-
- Trouver :
-
-
-
-
-
-
- Tous types
-
-
- Enchères
-
-
- À vendre - Continent
-
-
- À vendre - Région privée
-
-
-
-
- L$
-
-
-
- m²
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Recherche en cours...
-
-
- Aucun résultat.
-
-
- Trouver :
-
-
-
-
-
-
-
- Toutes catégories
-
-
- Appartenant aux Lindens
-
-
- Art et Culture
-
-
- Affaires
-
-
- Éducation
-
-
- Jeux
-
-
- Favoris
-
-
- Accueil pour les nouveaux
-
-
- Parcs et Nature
-
-
- Résidentiel
-
-
- Shopping
-
-
- Autre
-
-
-
-
- Toutes catégories
-
-
- Appartenant aux Lindens
-
-
- Adult
-
-
- Art et Culture
-
-
- Affaires
-
-
- Éducation
-
-
- Jeux
-
-
- Favoris
-
-
- Accueil pour les nouveaux
-
-
- Parcs et Nature
-
-
- Résidentiel
-
-
- Shopping
-
-
- Autre
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Recherche en cours...
-
-
- Aucun résultat.
-
-
- Trouver :
-
-
-
-
-
-
-
-
-
-
-
-
-
- Recherche en cours...
-
-
- Aucun résultat.
-
-
- Trouver :
-
-
-
-
-
-
-
-
-
- Chargement en cours...
-
-
- Fini
-
-
- http://secondlife.com/app/search/notfound.html
-
-
- http://secondlife.com/app/search/index_groups.php?
-
-
-
-
-
+
+
+
+
+
+ Recherche en cours...
+
+
+ Aucun résultat.
+
+
+ Trouver :
+
+
+
+
+
+
+
+ Toutes catégories
+
+
+ Événements
+
+
+ Groupes
+
+
+ Résidents
+
+
+ Lieux
+
+
+ Wiki
+
+
+
+
+
+
+
+ Chargement en cours...
+
+
+ Fini
+
+
+ http://secondlife.com/app/search/notfound.html
+
+
+ http://secondlife.com/app/search/index.php?
+
+
+
+
+ Recherche en cours...
+
+
+ Aucun résultat.
+
+
+ Trouver :
+
+
+
+
+
+
+
+ Toutes catégories
+
+
+ Shopping
+
+
+ Terrains à louer
+
+
+ Propriétés à louer
+
+
+ Divertissements
+
+
+ Nouveaux produits
+
+
+ Emplois
+
+
+ Offres
+
+
+ Services
+
+
+ Rencontres
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Recherche en cours...
+
+
+ Aucun résultat.
+
+
+ Trouver :
+
+
+
+
+ En cours et futurs
+
+
+ Date
+
+
+
+
+ 6/6
+
+
+
+
+ Catégorie :
+
+
+
+ Toutes catégories
+
+
+ Discussions
+
+
+ Sports
+
+
+ Musique live
+
+
+ Publicités
+
+
+ Divertissements/Soirées
+
+
+ Jeux/Compétitions
+
+
+ Concours
+
+
+ Éducation
+
+
+ Arts et Culture
+
+
+ Groupes d'entraide/Caritatif
+
+
+ Divers
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Recherche en cours...
+
+
+ Aucun résultat.
+
+
+
+
+ Chargement en cours...
+
+
+ Fini
+
+
+ http://secondlife.com/app/search/notfound.html
+
+
+ http://secondlife.com/app/showcase/index.php?
+
+
+
+
+ Recherche en cours...
+
+
+ Aucun résultat.
+
+
+ Vous pouvez acheter un terrain directement en dollars Linden (L$) ou aux enchères (en L$ ou US$).
+Pour acheter directement, visitez le terrain et cliquez sur le nom de l'endroit dans la barre de titre.
+
+
+ Trouver :
+
+
+
+
+
+
+ Tous types
+
+
+ Enchères
+
+
+ À vendre - Continent
+
+
+ À vendre - Région privée
+
+
+
+
+ L$
+
+
+
+ m²
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Recherche en cours...
+
+
+ Aucun résultat.
+
+
+ Trouver :
+
+
+
+
+
+
+
+ Toutes catégories
+
+
+ Appartenant aux Lindens
+
+
+ Art et Culture
+
+
+ Affaires
+
+
+ Éducation
+
+
+ Jeux
+
+
+ Favoris
+
+
+ Accueil pour les nouveaux
+
+
+ Parcs et Nature
+
+
+ Résidentiel
+
+
+ Shopping
+
+
+ Autre
+
+
+
+
+ Toutes catégories
+
+
+ Appartenant aux Lindens
+
+
+ Adult
+
+
+ Art et Culture
+
+
+ Affaires
+
+
+ Éducation
+
+
+ Jeux
+
+
+ Favoris
+
+
+ Accueil pour les nouveaux
+
+
+ Parcs et Nature
+
+
+ Résidentiel
+
+
+ Shopping
+
+
+ Autre
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Recherche en cours...
+
+
+ Aucun résultat.
+
+
+ Trouver :
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Recherche en cours...
+
+
+ Aucun résultat.
+
+
+ Trouver :
+
+
+
+
+
+
+
+
+
+ Chargement en cours...
+
+
+ Fini
+
+
+ http://secondlife.com/app/search/notfound.html
+
+
+ http://secondlife.com/app/search/index_groups.php?
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_display_name.xml b/indra/newview/skins/default/xui/fr/floater_display_name.xml
new file mode 100644
index 000000000..9dffcb891
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/floater_display_name.xml
@@ -0,0 +1,29 @@
+
+
+
+
+ Prochain changement possible: [TIME].
+
+
+
+ Nouveau Display Name:
+
+
+
+ Ecrivez le Display Name a nouveau pour confirmer:
+
+
+
+
+
+
+ Le nom que vous ajoutez a votre avatar est le Display Name.
+
+
+ Ecrivez le Display Name a nouveau pour confirmer.
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_env_settings.xml b/indra/newview/skins/default/xui/fr/floater_env_settings.xml
index 3d4655928..1d14142dd 100644
--- a/indra/newview/skins/default/xui/fr/floater_env_settings.xml
+++ b/indra/newview/skins/default/xui/fr/floater_env_settings.xml
@@ -1,27 +1,27 @@
-
-
-
- Heure de la
-journée
-
-
- Midi
-
-
- Couverture
-nuageuse
-
-
- Couleur de
-l'eau
-
-
-
- Brouillard
-dans l'eau
-
-
-
-
-
-
+
+
+
+ Heure de la
+journée
+
+
+ Midi
+
+
+ Couverture
+nuageuse
+
+
+ Couleur de
+l'eau
+
+
+
+ Brouillard
+dans l'eau
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_font_test.xml b/indra/newview/skins/default/xui/fr/floater_font_test.xml
index fecb00771..11eb11a0d 100644
--- a/indra/newview/skins/default/xui/fr/floater_font_test.xml
+++ b/indra/newview/skins/default/xui/fr/floater_font_test.xml
@@ -1,6 +1,6 @@
-
-
-
- OverrideTest, Times-BOLD doit être sélectionné ici. (De default/xui/fr)
-
-
+
+
+
+ OverrideTest, Times-BOLD doit être sélectionné ici. (De default/xui/fr)
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_gesture.xml b/indra/newview/skins/default/xui/fr/floater_gesture.xml
index 1d813be36..494508200 100644
--- a/indra/newview/skins/default/xui/fr/floater_gesture.xml
+++ b/indra/newview/skins/default/xui/fr/floater_gesture.xml
@@ -1,18 +1,18 @@
-
-
-
- Double-cliquez sur une gesture pour jouer les animations
-et les sons.
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+ Double-cliquez sur une gesture pour jouer les animations
+et les sons.
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_god_tools.xml b/indra/newview/skins/default/xui/fr/floater_god_tools.xml
index dc34006e8..81b69eb11 100644
--- a/indra/newview/skins/default/xui/fr/floater_god_tools.xml
+++ b/indra/newview/skins/default/xui/fr/floater_god_tools.xml
@@ -1,111 +1,111 @@
-
-
-
-
-
-
-
-
-
- Nom du sim :
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- ID du domaine :
-
-
- ID parent :
-
-
-
- Position sur la grille :
-
-
-
-
- Rediriger vers la grille :
-
-
-
-
-
- Facteur de facturation :
-
-
-
- L$ par m² :
-
-
-
-
-
-
-
-
- Nom du sim :
-
-
- Welsh
-
-
-
-
-
-
-
- (aucune cible)
-
-
-
-
-
-
-
-
-
-
- Destination :
-
-
-
- Sélection
-
-
- Région de l'avatar
-
-
-
- Requête :
-
-
-
- Objets responsables de collisions : étapes
-
-
- Nombre de scripts et schéma optionnel
-
-
- Schéma des objets
-
-
- rezzer <asset_id>
-
-
-
- Paramètre :
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+ Nom du sim :
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ID du domaine :
+
+
+ ID parent :
+
+
+
+ Position sur la grille :
+
+
+
+
+ Rediriger vers la grille :
+
+
+
+
+
+ Facteur de facturation :
+
+
+
+ L$ par m² :
+
+
+
+
+
+
+
+
+ Nom du sim :
+
+
+ Welsh
+
+
+
+
+
+
+
+ (aucune cible)
+
+
+
+
+
+
+
+
+
+
+ Destination :
+
+
+
+ Sélection
+
+
+ Région de l'avatar
+
+
+
+ Requête :
+
+
+
+ Objets responsables de collisions : étapes
+
+
+ Nombre de scripts et schéma optionnel
+
+
+ Schéma des objets
+
+
+ rezzer <asset_id>
+
+
+
+ Paramètre :
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_group_info.xml b/indra/newview/skins/default/xui/fr/floater_group_info.xml
index 1fd6ec2b7..9058299ef 100644
--- a/indra/newview/skins/default/xui/fr/floater_group_info.xml
+++ b/indra/newview/skins/default/xui/fr/floater_group_info.xml
@@ -1,261 +1,261 @@
-
-
-
-
-
- Profil du groupe
-
-
- Les groupes sont un moyen divertissant de collaborer avec vos amis.
-
-
- Les groupes vous permettent d'avoir un titre, un logo et de voter.
-
-
- Tout le monde peut créer un groupe. Chaque résident peut appartenir jusqu'à 15 groupes.
-
-
- Pour rester actif, un groupe doit avoir au moins 3 membres.
-
-
- La création d'un groupe coûte 100 L$.
-
-
- Nom :
-
-
- Fondateur :
-
-
- Charte :
-
-
-
-
-
-
-
-
-
- Titres de groupe
-
-
- Les groupes peuvent avoir des officiers et des membres avec des titres particuliers.
-
-
- Ces titres apparaissent devant leur nom dans le Monde, les chats et les IM.
-
-
- Titre de l'officier :
-
-
- Titre du membre :
-
-
- Pour créer le logo du groupe, faites glisser une texture depuis votre inventaire.
-
-
-
-
-
- Membres du groupe
-
-
- Officiers et membres du groupe actuel.
-
-
- Cliquez sur le nom d'un membre pour voir son profil.
-
-
- Officiers :
-
-
- Membres :
-
-
-
-
-
-
-
- Élections
-
-
- Pour commencer une nouvelle élection, cliquez sur Lancer l'élection.
-Les candidats incluent tous les membres qui ne sont pas officiers.
-
-
- Candidats :
-
-
-
-
-
- Quorum :
-
-
-
- sur un total de 111 membres.
-
-
- Majorité :
-
-
-
- Majorité simple
-
-
- Majorité des 2/3
-
-
- Unanimité
-
-
-
- Durée :
-
-
-
- jours
-
-
- Début de l'élection :
-
-
- Fin de l'élection :
-
-
-
-
- Propositions du groupe
-
-
- Il n'y a aucune proposition active. Cliquez sur Créer une proposition pour créer une nouvelle proposition.
-
-
- Propositions :
-
-
-
-
-
-
-
-
-
- Quorum :
-
-
-
- sur un total de 111 membres.
-
-
- Majorité :
-
-
-
- Majorité simple
-
-
- Majorité des 2/3
-
-
- Unanimité
-
-
-
- Durée :
-
-
-
- jours
-
-
- Début :
-
-
- Fin :
-
-
-
-
- Historique des votes
-
-
- Vous pouvez afficher les anciens résultats en sélectionnant le vote et
-
-
- en cliquant sur Afficher l'objet.
-
-
- Anciens votes :
-
-
- Résultats du vote :
-
-
-
-
-
-
-
-
- Invitations
-
-
- Les invitations sont envoyées par messagerie instantanée.
-
-
- Pour ajouter des résidents, cliquez sur Ajouter.
-
-
- Officiers :
-
-
-
-
- Membres :
-
-
-
-
- Frais d'inscription :
-
-
-
-
-
- Terrain du groupe
-
-
- Total des contributions :
-
-
-
- Superficie déjà utilisée :
-
-
- Superficie disponible :
-
-
-
- Avertissement : ce groupe a trop de terrain. Les membres du groupe doivent faire une contribution plus importante.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+ Profil du groupe
+
+
+ Les groupes sont un moyen divertissant de collaborer avec vos amis.
+
+
+ Les groupes vous permettent d'avoir un titre, un logo et de voter.
+
+
+ Tout le monde peut créer un groupe. Chaque résident peut appartenir jusqu'à 15 groupes.
+
+
+ Pour rester actif, un groupe doit avoir au moins 3 membres.
+
+
+ La création d'un groupe coûte 100 L$.
+
+
+ Nom :
+
+
+ Fondateur :
+
+
+ Charte :
+
+
+
+
+
+
+
+
+
+ Titres de groupe
+
+
+ Les groupes peuvent avoir des officiers et des membres avec des titres particuliers.
+
+
+ Ces titres apparaissent devant leur nom dans le Monde, les chats et les IM.
+
+
+ Titre de l'officier :
+
+
+ Titre du membre :
+
+
+ Pour créer le logo du groupe, faites glisser une texture depuis votre inventaire.
+
+
+
+
+
+ Membres du groupe
+
+
+ Officiers et membres du groupe actuel.
+
+
+ Cliquez sur le nom d'un membre pour voir son profil.
+
+
+ Officiers :
+
+
+ Membres :
+
+
+
+
+
+
+
+ Élections
+
+
+ Pour commencer une nouvelle élection, cliquez sur Lancer l'élection.
+Les candidats incluent tous les membres qui ne sont pas officiers.
+
+
+ Candidats :
+
+
+
+
+
+ Quorum :
+
+
+
+ sur un total de 111 membres.
+
+
+ Majorité :
+
+
+
+ Majorité simple
+
+
+ Majorité des 2/3
+
+
+ Unanimité
+
+
+
+ Durée :
+
+
+
+ jours
+
+
+ Début de l'élection :
+
+
+ Fin de l'élection :
+
+
+
+
+ Propositions du groupe
+
+
+ Il n'y a aucune proposition active. Cliquez sur Créer une proposition pour créer une nouvelle proposition.
+
+
+ Propositions :
+
+
+
+
+
+
+
+
+
+ Quorum :
+
+
+
+ sur un total de 111 membres.
+
+
+ Majorité :
+
+
+
+ Majorité simple
+
+
+ Majorité des 2/3
+
+
+ Unanimité
+
+
+
+ Durée :
+
+
+
+ jours
+
+
+ Début :
+
+
+ Fin :
+
+
+
+
+ Historique des votes
+
+
+ Vous pouvez afficher les anciens résultats en sélectionnant le vote et
+
+
+ en cliquant sur Afficher l'objet.
+
+
+ Anciens votes :
+
+
+ Résultats du vote :
+
+
+
+
+
+
+
+
+ Invitations
+
+
+ Les invitations sont envoyées par messagerie instantanée.
+
+
+ Pour ajouter des résidents, cliquez sur Ajouter.
+
+
+ Officiers :
+
+
+
+
+ Membres :
+
+
+
+
+ Frais d'inscription :
+
+
+
+
+
+ Terrain du groupe
+
+
+ Total des contributions :
+
+
+
+ Superficie déjà utilisée :
+
+
+ Superficie disponible :
+
+
+
+ Avertissement : ce groupe a trop de terrain. Les membres du groupe doivent faire une contribution plus importante.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_hardware_settings.xml b/indra/newview/skins/default/xui/fr/floater_hardware_settings.xml
index e25dbec89..4a251bce3 100644
--- a/indra/newview/skins/default/xui/fr/floater_hardware_settings.xml
+++ b/indra/newview/skins/default/xui/fr/floater_hardware_settings.xml
@@ -1,109 +1,109 @@
-
-
-
- Filtre:
-
-
-
- Antialiasing:
-
-
-
- Désactivé
-
-
- 2x
-
-
- 4x
-
-
- 8x
-
-
- 16x
-
-
-
-
- (0 = défaut, valeur faible = plus lumineux)
-
-
- Activer le VBO:
-
-
-
-
- Activer Framebuffer Objects:
-
-
-
-
-
-
-
- Note: le Gamma et le brouillard, sont inactifs quand les Effets atmosphériques le sont.
-
-
-
-
+
+
+
+ Filtre:
+
+
+
+ Antialiasing:
+
+
+
+ Désactivé
+
+
+ 2x
+
+
+ 4x
+
+
+ 8x
+
+
+ 16x
+
+
+
+
+ (0 = défaut, valeur faible = plus lumineux)
+
+
+ Activer le VBO:
+
+
+
+
+ Activer Framebuffer Objects:
+
+
+
+
+
+
+
+ Note: le Gamma et le brouillard, sont inactifs quand les Effets atmosphériques le sont.
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_html.xml b/indra/newview/skins/default/xui/fr/floater_html.xml
index 15ad05a06..0783ac417 100644
--- a/indra/newview/skins/default/xui/fr/floater_html.xml
+++ b/indra/newview/skins/default/xui/fr/floater_html.xml
@@ -1,16 +1,16 @@
-
-
-
-
-
-
-
-
-
-
- http://www.secondlife.com
-
-
- http://wiki.secondlife.com/wiki/Knowledge_Base/fr
-
-
+
+
+
+
+
+
+
+
+
+
+ http://www.secondlife.com
+
+
+ http://wiki.secondlife.com/wiki/Knowledge_Base/fr
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_hud.xml b/indra/newview/skins/default/xui/fr/floater_hud.xml
index a8ce59f23..55c8b57ae 100644
--- a/indra/newview/skins/default/xui/fr/floater_hud.xml
+++ b/indra/newview/skins/default/xui/fr/floater_hud.xml
@@ -1,2 +1,2 @@
-
-
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_im.xml b/indra/newview/skins/default/xui/fr/floater_im.xml
index 841dc4e64..9a9de10e5 100644
--- a/indra/newview/skins/default/xui/fr/floater_im.xml
+++ b/indra/newview/skins/default/xui/fr/floater_im.xml
@@ -1,43 +1,43 @@
-
-
-
- Vous êtes le seul participant à cette session. ce qui est idiot
-
- [NAME] is offline.
-
- Pour accepter ce chat vocal/vous connecter, cliquez sur le bouton [BUTTON NAME].
-
-
- Vous ignorez ce résident (mute). Si vous lui envoyez un message, il ne sera plus ignoré.
-
-
- Erreur lors de la requête, veuillez réessayer ultérieurement.
-
-
- Vous n'avez pas les droits requis tant pis pour vous.
-
-
- La session a expiré
-
-
- Vous n'avez pas ce pouvoir.
-
-
- Vous n'êtes pas modérateur de session.
-
-
- Un modérateur de groupe a désactivé votre chat écrit.
-
-
- Impossible d'ajouter des participants à la session de chat avec [RECIPIENT].
-
-
- Impossible d'envoyer votre message à la session de chat avec [RECIPIENT].
-
-
- Vous avez été supprimé du groupe.
-
-
- Vous ne pouvez plus participer à la session de chat.
-
-
+
+
+
+ Vous êtes le seul participant à cette session. ce qui est idiot
+
+ [NAME] is offline.
+
+ Pour accepter ce chat vocal/vous connecter, cliquez sur le bouton [BUTTON NAME].
+
+
+ Vous ignorez ce résident (mute). Si vous lui envoyez un message, il ne sera plus ignoré.
+
+
+ Erreur lors de la requête, veuillez réessayer ultérieurement.
+
+
+ Vous n'avez pas les droits requis tant pis pour vous.
+
+
+ La session a expiré
+
+
+ Vous n'avez pas ce pouvoir.
+
+
+ Vous n'êtes pas modérateur de session.
+
+
+ Un modérateur de groupe a désactivé votre chat écrit.
+
+
+ Impossible d'ajouter des participants à la session de chat avec [RECIPIENT].
+
+
+ Impossible d'envoyer votre message à la session de chat avec [RECIPIENT].
+
+
+ Vous avez été supprimé du groupe.
+
+
+ Vous ne pouvez plus participer à la session de chat.
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_image_preview.xml b/indra/newview/skins/default/xui/fr/floater_image_preview.xml
index d16023aa6..679bfd66e 100644
--- a/indra/newview/skins/default/xui/fr/floater_image_preview.xml
+++ b/indra/newview/skins/default/xui/fr/floater_image_preview.xml
@@ -1,69 +1,69 @@
-
-
-
- Nom:
-
-
-
- Description:
-
-
-
- Prévisualiser comme:
-
-
-
- Image
-
-
- Cheveux
-
-
- Tête de femme
-
-
- Corps de femme (haut)
-
-
- Corps de femme (bas)
-
-
- Tête d'homme
-
-
- Corps d'homme (haut)
-
-
- Corps d'homme (bas)
-
-
- Jupe
-
-
- Sculptie
-
-
-
-
- Impossible de lire l'image.
-
-Sauvegardez en Targa 24 bit (.tga).
-
-
-
-
-
-
+
+
+
+ Nom:
+
+
+
+ Description:
+
+
+
+ Prévisualiser comme:
+
+
+
+ Image
+
+
+ Cheveux
+
+
+ Tête de femme
+
+
+ Corps de femme (haut)
+
+
+ Corps de femme (bas)
+
+
+ Tête d'homme
+
+
+ Corps d'homme (haut)
+
+
+ Corps d'homme (bas)
+
+
+ Jupe
+
+
+ Sculptie
+
+
+
+
+ Impossible de lire l'image.
+
+Sauvegardez en Targa 24 bit (.tga).
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_import.xml b/indra/newview/skins/default/xui/fr/floater_import.xml
index 3b4cdc03a..4f106a6d6 100644
--- a/indra/newview/skins/default/xui/fr/floater_import.xml
+++ b/indra/newview/skins/default/xui/fr/floater_import.xml
@@ -1,17 +1,17 @@
-
-
-
- Nom :
-
-
- Description :
-
-
- Fichiers à charger :
-
-
-
-
- Prévisualisation de l'image :
-
-
+
+
+
+ Nom :
+
+
+ Description :
+
+
+ Fichiers à charger :
+
+
+
+
+ Prévisualisation de l'image :
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_inspect.xml b/indra/newview/skins/default/xui/fr/floater_inspect.xml
index e29a465cd..480097eb4 100644
--- a/indra/newview/skins/default/xui/fr/floater_inspect.xml
+++ b/indra/newview/skins/default/xui/fr/floater_inspect.xml
@@ -1,14 +1,14 @@
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_instant_message.xml b/indra/newview/skins/default/xui/fr/floater_instant_message.xml
index 550b6a14a..03d0bf4d6 100644
--- a/indra/newview/skins/default/xui/fr/floater_instant_message.xml
+++ b/indra/newview/skins/default/xui/fr/floater_instant_message.xml
@@ -1,56 +1,56 @@
-
-
-
- Appel en cours...
-
-
- Connexion en cours...
-
-
- Connecté(e), cliquez sur Raccrocher pour terminer l'appel
-
-
- Appel terminé
-
-
- Objet de l'inventaire offert
-
-
- icn_voice-pvtfocus.tga
-
-
- Envoyer un message instantané à [NAME]
-
-
- [NAME] est en train d'écrire…
-
-
- Début de la session avec [NAME], veuillez patienter.
-
-
- Cliquez ici pour envoyer un message instantané.
-
-
- Le chat écrit n'est pas disponible pour cet appel.
-
-
-
-
-
-
-
-
-
-
-
-
-
- *** Bienvenue sur la page Demande d'aide ***
-Veuillez au préalable consulter les pages d'aide de Second Life en appuyant sur la touche F1, ou en accédant à la base de connaissances http://secondlife.com/knowledgebase/
-Si vous ne trouvez pas ce que vous cherchez, saisissez votre question et attendez quelques instants pour que quelqu'un vous réponde.
--=-=- Les temps de réponse varient, surtout pendant les périodes de pointe -=-=-
-
-
+
+
+
+ Appel en cours...
+
+
+ Connexion en cours...
+
+
+ Connecté(e), cliquez sur Stop pour terminer l'appel
+
+
+ Appel terminé
+
+
+ Objet de l'inventaire offert
+
+
+ icn_voice-pvtfocus.tga
+
+
+ Envoyer un message instantané à [NAME]
+
+
+ [NAME] est en train d'écrire…
+
+
+ Début de la session avec [NAME], veuillez patienter.
+
+
+ Cliquez ici pour envoyer un message instantané.
+
+
+ Le chat écrit n'est pas disponible pour cet appel.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ *** Bienvenue sur la page Demande d'aide ***
+Veuillez au préalable consulter les pages d'aide de Second Life en appuyant sur la touche F1, ou en accédant à la base de connaissances http://secondlife.com/knowledgebase/
+Si vous ne trouvez pas ce que vous cherchez, saisissez votre question et attendez quelques instants pour que quelqu'un vous réponde.
+-=-=- Les temps de réponse varient, surtout pendant les périodes de pointe -=-=-
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_instant_message_ad_hoc.xml b/indra/newview/skins/default/xui/fr/floater_instant_message_ad_hoc.xml
index 66e976771..38119fa3f 100644
--- a/indra/newview/skins/default/xui/fr/floater_instant_message_ad_hoc.xml
+++ b/indra/newview/skins/default/xui/fr/floater_instant_message_ad_hoc.xml
@@ -1,42 +1,42 @@
-
-
-
- En train de rejoindre le chat vocal...
-
-
- Connecté(e), cliquez sur Raccrocher pour terminer l'appel
-
-
- A quitté le chat vocal
-
-
- icn_voice-groupfocus.tga
-
-
- Envoyer un message instantané à [NAME]
-
-
- [NAME] est en train d'écrire…
-
-
- Début de la session avec [NAME], veuillez patienter.
-
-
- Cliquez ici pour envoyer un message instantané.
-
-
-
-
-
-
-
-
-
-
-
- *** Bienvenue sur la page Demande d'aide ***
-Veuillez au préalable consulter les pages d'aide de Second Life en appuyant sur la touche F1, ou en accédant à la base de connaissances http://secondlife.com/knowledgebase/
-Si vous ne trouvez pas ce que vous cherchez, saisissez votre question et attendez quelques instants pour que quelqu'un vous réponde.
--=-=- Les temps de réponse varient, surtout pendant les périodes de pointe -=-=-
-
-
+
+
+
+ En train de rejoindre le chat vocal...
+
+
+ Connecté(e), cliquez sur Raccrocher pour terminer l'appel
+
+
+ A quitté le chat vocal
+
+
+ icn_voice-groupfocus.tga
+
+
+ Envoyer un message instantané à [NAME]
+
+
+ [NAME] est en train d'écrire…
+
+
+ Début de la session avec [NAME], veuillez patienter.
+
+
+ Cliquez ici pour envoyer un message instantané.
+
+
+
+
+
+
+
+
+
+
+
+ *** Bienvenue sur la page Demande d'aide ***
+Veuillez au préalable consulter les pages d'aide de Second Life en appuyant sur la touche F1, ou en accédant à la base de connaissances http://secondlife.com/knowledgebase/
+Si vous ne trouvez pas ce que vous cherchez, saisissez votre question et attendez quelques instants pour que quelqu'un vous réponde.
+-=-=- Les temps de réponse varient, surtout pendant les périodes de pointe -=-=-
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_instant_message_group.xml b/indra/newview/skins/default/xui/fr/floater_instant_message_group.xml
index 7278f100c..9c0e0ec0d 100644
--- a/indra/newview/skins/default/xui/fr/floater_instant_message_group.xml
+++ b/indra/newview/skins/default/xui/fr/floater_instant_message_group.xml
@@ -1,48 +1,48 @@
-
-
-
- En train de rejoindre le chat vocal...
-
-
- Connecté(e), cliquez sur Raccrocher pour terminer l'appel
-
-
- A quitté le chat vocal
-
-
- icn_voice-groupfocus.tga
-
-
- *** Bienvenue sur la page Demande d'aide ***
- Veuillez au préalable consulter les pages d'aide de Second Life en appuyant sur la touche F1, ou en accédant à la base de connaissances http://secondlife.com/knowledgebase/
- Si vous ne trouvez pas ce que vous cherchez, saisissez votre question et attendez quelques instants pour que quelqu'un vous réponde.
- -=-=- Les temps de réponse varient, surtout pendant les périodes de pointe -=-=-
-
-
- Envoyer un message instantané à [NAME]
-
-
- [NAME] est en train d'écrire…
-
-
- Début de la session avec [NAME], veuillez patienter.
-
-
- (Modéré : Voix désactivées par défaut)
-
-
- Cliquez ici pour envoyer un message instantané.
-
-
- Votre chat écrit a été désactivé par un modérateur de groupe.
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+ En train de rejoindre le chat vocal...
+
+
+ Connecté(e), cliquez sur Raccrocher pour terminer l'appel
+
+
+ A quitté le chat vocal
+
+
+ icn_voice-groupfocus.tga
+
+
+ *** Bienvenue sur la page Demande d'aide ***
+ Veuillez au préalable consulter les pages d'aide de Second Life en appuyant sur la touche F1, ou en accédant à la base de connaissances http://secondlife.com/knowledgebase/
+ Si vous ne trouvez pas ce que vous cherchez, saisissez votre question et attendez quelques instants pour que quelqu'un vous réponde.
+ -=-=- Les temps de réponse varient, surtout pendant les périodes de pointe -=-=-
+
+
+ Envoyer un message instantané à [NAME]
+
+
+ [NAME] est en train d'écrire…
+
+
+ Début de la session avec [NAME], veuillez patienter.
+
+
+ (Modéré : Voix désactivées par défaut)
+
+
+ Cliquez ici pour envoyer un message instantané.
+
+
+ Votre chat écrit a été désactivé par un modérateur de groupe.
+
+
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_inventory.xml b/indra/newview/skins/default/xui/fr/floater_inventory.xml
index eca43247b..9b5ede512 100644
--- a/indra/newview/skins/default/xui/fr/floater_inventory.xml
+++ b/indra/newview/skins/default/xui/fr/floater_inventory.xml
@@ -1,95 +1,95 @@
-
-
-
-Filtre rapidie:
-
- TOUT
- Animations
- Cartes de Visite
- Habits / Body Parts
- Gestures
- Reperes / Landmarks
- Notecards
- Objets
- Scripts
- Sons
- Textures
- Photos
- Custom...
-
- TOUT
-
- Animations
- Cartes de Visite
- Habits / Body Parts
- Gestures
- Reperes / Landmarks
- Notecards
- Objets
- Scripts
- Sons
- Textures
- Photos
-
- Custom...
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+Filtre rapide:
+
+ TOUT
+ Animations
+ Cartes de Visite
+ Habits / Body Parts
+ Gestures
+ Reperes / Landmarks
+ Notecards
+ Objets
+ Scripts
+ Sons
+ Textures
+ Photos
+ Custom...
+
+ TOUT
+
+ Animations
+ Cartes de Visite
+ Habits / Body Parts
+ Gestures
+ Reperes / Landmarks
+ Notecards
+ Objets
+ Scripts
+ Sons
+ Textures
+ Photos
+
+ Custom...
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_inventory_item_properties.xml b/indra/newview/skins/default/xui/fr/floater_inventory_item_properties.xml
index 823546e5d..92dbc36a0 100644
--- a/indra/newview/skins/default/xui/fr/floater_inventory_item_properties.xml
+++ b/indra/newview/skins/default/xui/fr/floater_inventory_item_properties.xml
@@ -1,85 +1,85 @@
-
-
-
- Nom :
-
-
- Description :
-
-
- Créateur :
-
-
- Nicole Linden
-
-
-
- Propriétaire :
-
-
- Thrax Linden
-
-
-
- Acquis :
-
-
- Wed May 24 12:50:46 2006
-
-
- Vous pouvez :
-
-
-
-
-
- BÂ :
-
-
- OÂ :
-
-
- G :
-
-
- EÂ :
-
-
- NÂ :
-
-
-
-
- Le prochain propriétaire pourra :
-
-
-
-
-
- Marquer l'objet :
-
-
-
-
- Original
-
-
- Copie
-
-
-
- Prix : L$
-
-
- (inconnu)
-
-
- (public)
-
-
- Vous pouvez :
-
-
- Le propriétaire peut :
-
-
+
+
+
+ Nom :
+
+
+ Description :
+
+
+ Créateur :
+
+
+ Nicole Linden
+
+
+
+ Propriétaire :
+
+
+ Thrax Linden
+
+
+
+ Acquis :
+
+
+ Wed May 24 12:50:46 2006
+
+
+ Vous pouvez :
+
+
+
+
+
+ BÂ :
+
+
+ OÂ :
+
+
+ G :
+
+
+ EÂ :
+
+
+ NÂ :
+
+
+
+
+ Le prochain propriétaire pourra :
+
+
+
+
+
+ Marquer l'objet :
+
+
+
+
+ Original
+
+
+ Copie
+
+
+
+ Prix : L$
+
+
+ (inconnu)
+
+
+ (public)
+
+
+ Vous pouvez :
+
+
+ Le propriétaire peut :
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/fr/floater_inventory_view_finder.xml
index 90ec1e6f7..dceebdfa4 100644
--- a/indra/newview/skins/default/xui/fr/floater_inventory_view_finder.xml
+++ b/indra/newview/skins/default/xui/fr/floater_inventory_view_finder.xml
@@ -1,24 +1,24 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Ou il y a...
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Ou il y a...
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_joystick.xml b/indra/newview/skins/default/xui/fr/floater_joystick.xml
index 49810f8ec..be336c827 100644
--- a/indra/newview/skins/default/xui/fr/floater_joystick.xml
+++ b/indra/newview/skins/default/xui/fr/floater_joystick.xml
@@ -1,85 +1,85 @@
-
-
-
- Activer :
-
-
-
-
-
-
-
-
-
-
-
-
- Modes de contrôle :
-
-
- Avatar
-
-
- Build
-
-
- Flycam
-
-
- Échelle des X
-
-
- Échelle des Y
-
-
- Échelle des Z
-
-
- Échelle du tangage
-
-
- Échelle du lacet
-
-
- Échelle du roulis
-
-
- Zone neutre X
-
-
- Zone neutre Y
-
-
- Zone neutre Z
-
-
- Zone neutre Tangage
-
-
- Zone neutre lacet
-
-
- Zone neutre roulis
-
-
- Feathering
-
-
- Échelle du zoom
-
-
- Zone neutre du zoom
-
-
-
-
-
- Contrôle du joystick
-
-
- Axe [NUM]
-
-
- aucun joystick détecté
-
-
+
+
+
+ Activer :
+
+
+
+
+
+
+
+
+
+
+
+
+ Modes de contrôle :
+
+
+ Avatar
+
+
+ Build
+
+
+ Flycam
+
+
+ Échelle des X
+
+
+ Échelle des Y
+
+
+ Échelle des Z
+
+
+ Échelle du tangage
+
+
+ Échelle du lacet
+
+
+ Échelle du roulis
+
+
+ Zone neutre X
+
+
+ Zone neutre Y
+
+
+ Zone neutre Z
+
+
+ Zone neutre Tangage
+
+
+ Zone neutre lacet
+
+
+ Zone neutre roulis
+
+
+ Feathering
+
+
+ Échelle du zoom
+
+
+ Zone neutre du zoom
+
+
+
+
+
+ Contrôle du joystick
+
+
+ Axe [NUM]
+
+
+ aucun joystick détecté
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_lagmeter.xml b/indra/newview/skins/default/xui/fr/floater_lagmeter.xml
index da51b1b42..54069c9c4 100644
--- a/indra/newview/skins/default/xui/fr/floater_lagmeter.xml
+++ b/indra/newview/skins/default/xui/fr/floater_lagmeter.xml
@@ -1,152 +1,152 @@
-
-
-
-
- Client :
-
-
- Normal
-
-
-
- Réseau :
-
-
- Normal
-
-
-
- Serveur :
-
-
- Normal
-
-
-
-
- Mesure du lag
-
-
- 360
-
-
- Lag
-
-
- 90
-
-
- Client
-
-
- 10
-
-
- 15
-
-
- Normal, fenêtre en arrière-plan
-
-
- Taux de défilement client ci-dessous [CLIENT_FRAME_RATE_CRITICAL]
-
-
- Taux de défilement client entre [CLIENT_FRAME_RATE_CRITICAL] et [CLIENT_FRAME_RATE_WARNING]
-
-
- Normal
-
-
- Cause possible : la limite d'affichage est trop élevée
-
-
- Cause possible : images en cours de chargement
-
-
- Cause possible : trop d'images en mémoire
-
-
- Cause possible : trop d'objets complexes dans la scène
-
-
- Réseau
-
-
- 10
-
-
- 5
-
-
- La connexion perd plus de [NETWORK_PACKET_LOSS_CRITICAL] % de paquets
-
-
- La connexion perd entre [NETWORK_PACKET_LOSS_WARNING] % et [NETWORK_PACKET_LOSS_CRITICAL] % de paquets
-
-
- Normal
-
-
- 600
-
-
- 300
-
-
- Temps de connexion ping supérieur à [NETWORK_PING_CRITICAL] ms
-
-
- Temps de connexion ping entre [NETWORK_PING_WARNING] et [NETWORK_PING_CRITICAL] ms
-
-
- Mauvaise connexion possible ou réglage de la bande passante trop élevé.
-
-
- Mauvaise connexion possible ou app. de partage des fichiers
-
-
- Serveur
-
-
- 20
-
-
- 30
-
-
- 20
-
-
- Taux de défilement du simulateur au dessous de [SERVER_FRAME_RATE_CRITICAL]
-
-
- Taux de défilement du simulateur entre [SERVER_FRAME_RATE_CRITICAL] et [SERVER_FRAME_RATE_WARNING]
-
-
- Normal
-
-
- Cause possible : trop d'objets physiques
-
-
- Cause possible : trop d'objets scriptés
-
-
- Cause possible : trop de trafic réseau
-
-
- Cause possible : trop de personnes en mouvement dans la région
-
-
- Cause possible : trop de calculs d'images
-
-
- Cause possible : charge simulateur trop lourde
-
-
- >>
-
-
- <<
-
-
+
+
+
+
+ Client :
+
+
+ Normal
+
+
+
+ Réseau :
+
+
+ Normal
+
+
+
+ Serveur :
+
+
+ Normal
+
+
+
+
+ Mesure du lag
+
+
+ 360
+
+
+ Lag
+
+
+ 90
+
+
+ Client
+
+
+ 10
+
+
+ 15
+
+
+ Normal, fenêtre en arrière-plan
+
+
+ Taux de défilement client ci-dessous [CLIENT_FRAME_RATE_CRITICAL]
+
+
+ Taux de défilement client entre [CLIENT_FRAME_RATE_CRITICAL] et [CLIENT_FRAME_RATE_WARNING]
+
+
+ Normal
+
+
+ Cause possible : la limite d'affichage est trop élevée
+
+
+ Cause possible : images en cours de chargement
+
+
+ Cause possible : trop d'images en mémoire
+
+
+ Cause possible : trop d'objets complexes dans la scène
+
+
+ Réseau
+
+
+ 10
+
+
+ 5
+
+
+ La connexion perd plus de [NETWORK_PACKET_LOSS_CRITICAL] % de paquets
+
+
+ La connexion perd entre [NETWORK_PACKET_LOSS_WARNING] % et [NETWORK_PACKET_LOSS_CRITICAL] % de paquets
+
+
+ Normal
+
+
+ 600
+
+
+ 300
+
+
+ Temps de connexion ping supérieur à [NETWORK_PING_CRITICAL] ms
+
+
+ Temps de connexion ping entre [NETWORK_PING_WARNING] et [NETWORK_PING_CRITICAL] ms
+
+
+ Mauvaise connexion possible ou réglage de la bande passante trop élevé.
+
+
+ Mauvaise connexion possible ou app. de partage des fichiers
+
+
+ Serveur
+
+
+ 20
+
+
+ 30
+
+
+ 20
+
+
+ Taux de défilement du simulateur au dessous de [SERVER_FRAME_RATE_CRITICAL]
+
+
+ Taux de défilement du simulateur entre [SERVER_FRAME_RATE_CRITICAL] et [SERVER_FRAME_RATE_WARNING]
+
+
+ Normal
+
+
+ Cause possible : trop d'objets physiques
+
+
+ Cause possible : trop d'objets scriptés
+
+
+ Cause possible : trop de trafic réseau
+
+
+ Cause possible : trop de personnes en mouvement dans la région
+
+
+ Cause possible : trop de calculs d'images
+
+
+ Cause possible : charge simulateur trop lourde
+
+
+ >>
+
+
+ <<
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_land_holdings.xml b/indra/newview/skins/default/xui/fr/floater_land_holdings.xml
index 25d69a6b2..9c4f4ee96 100644
--- a/indra/newview/skins/default/xui/fr/floater_land_holdings.xml
+++ b/indra/newview/skins/default/xui/fr/floater_land_holdings.xml
@@ -1,40 +1,40 @@
-
-
-
-
-
-
-
-
-
-
-
-
- Vos contributions :
-
-
-
-
-
-
- Surface de terrain autorisée avec votre compte :
-
-
- [AREA] m²
-
-
- Surface occupée actuellement :
-
-
- [AREA] m²
-
-
- Disponible à l'achat :
-
-
- [AREA] m²
-
-
- [AREA] m²
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+ Vos contributions :
+
+
+
+
+
+
+ Surface de terrain autorisée avec votre compte :
+
+
+ [AREA] m²
+
+
+ Surface occupée actuellement :
+
+
+ [AREA] m²
+
+
+ Disponible à l'achat :
+
+
+ [AREA] m²
+
+
+ [AREA] m²
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_landmark_ctrl.xml b/indra/newview/skins/default/xui/fr/floater_landmark_ctrl.xml
index a6a6edcfa..d9ed263b1 100644
--- a/indra/newview/skins/default/xui/fr/floater_landmark_ctrl.xml
+++ b/indra/newview/skins/default/xui/fr/floater_landmark_ctrl.xml
@@ -1,10 +1,10 @@
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_live_lsleditor.xml b/indra/newview/skins/default/xui/fr/floater_live_lsleditor.xml
index 4b0940719..e2e2a9af9 100644
--- a/indra/newview/skins/default/xui/fr/floater_live_lsleditor.xml
+++ b/indra/newview/skins/default/xui/fr/floater_live_lsleditor.xml
@@ -1,12 +1,12 @@
-
-
-
-
-
-
- Vous n'êtes pas autorisé à afficher ce script.
-
-
- Exécution en cours
-
-
+
+
+
+
+
+
+ Vous n'êtes pas autorisé à afficher ce script.
+
+
+ Exécution en cours
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_lsl_guide.xml b/indra/newview/skins/default/xui/fr/floater_lsl_guide.xml
index ea39098a4..5dc0fa76a 100644
--- a/indra/newview/skins/default/xui/fr/floater_lsl_guide.xml
+++ b/indra/newview/skins/default/xui/fr/floater_lsl_guide.xml
@@ -1,7 +1,7 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_media_browser.xml b/indra/newview/skins/default/xui/fr/floater_media_browser.xml
index d8da196f1..e75b45c43 100644
--- a/indra/newview/skins/default/xui/fr/floater_media_browser.xml
+++ b/indra/newview/skins/default/xui/fr/floater_media_browser.xml
@@ -1,20 +1,20 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_mem_leaking.xml b/indra/newview/skins/default/xui/fr/floater_mem_leaking.xml
index 73add788b..8ee3a23b9 100644
--- a/indra/newview/skins/default/xui/fr/floater_mem_leaking.xml
+++ b/indra/newview/skins/default/xui/fr/floater_mem_leaking.xml
@@ -1,18 +1,18 @@
-
-
-
-
-
- Mémoire perdue actuelle : [SIZE] Ko
-
-
- [NOTE1]
-
-
- [NOTE2]
-
-
-
-
-
-
+
+
+
+
+
+ Mémoire perdue actuelle : [SIZE] Ko
+
+
+ [NOTE1]
+
+
+ [NOTE2]
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_mini_map.xml b/indra/newview/skins/default/xui/fr/floater_mini_map.xml
index 5b4942f08..9627a5a58 100644
--- a/indra/newview/skins/default/xui/fr/floater_mini_map.xml
+++ b/indra/newview/skins/default/xui/fr/floater_mini_map.xml
@@ -1,4 +1,4 @@
-
-
-
-
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_moveview.xml b/indra/newview/skins/default/xui/fr/floater_moveview.xml
index 7da1b4668..55ea8700a 100644
--- a/indra/newview/skins/default/xui/fr/floater_moveview.xml
+++ b/indra/newview/skins/default/xui/fr/floater_moveview.xml
@@ -1,12 +1,12 @@
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_mute.xml b/indra/newview/skins/default/xui/fr/floater_mute.xml
index 37baf7570..35d8d5975 100644
--- a/indra/newview/skins/default/xui/fr/floater_mute.xml
+++ b/indra/newview/skins/default/xui/fr/floater_mute.xml
@@ -1,12 +1,12 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_mute_object.xml b/indra/newview/skins/default/xui/fr/floater_mute_object.xml
index 20e2f3681..665c48630 100644
--- a/indra/newview/skins/default/xui/fr/floater_mute_object.xml
+++ b/indra/newview/skins/default/xui/fr/floater_mute_object.xml
@@ -1,12 +1,12 @@
-
-
-
- Cette fonction ne marche que pour les chats et les IM,
-pas les sons. Saisissez le nom exact de l'objet.
-
-
- Nom de l'objet
-
-
-
-
+
+
+
+ Cette fonction ne marche que pour les chats et les IM,
+pas les sons. Saisissez le nom exact de l'objet.
+
+
+ Nom de l'objet
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_my_friends.xml b/indra/newview/skins/default/xui/fr/floater_my_friends.xml
index 552afee4c..911647d8b 100644
--- a/indra/newview/skins/default/xui/fr/floater_my_friends.xml
+++ b/indra/newview/skins/default/xui/fr/floater_my_friends.xml
@@ -1,7 +1,7 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_name_description.xml b/indra/newview/skins/default/xui/fr/floater_name_description.xml
index 1bb784a5c..0028c5df3 100644
--- a/indra/newview/skins/default/xui/fr/floater_name_description.xml
+++ b/indra/newview/skins/default/xui/fr/floater_name_description.xml
@@ -1,11 +1,11 @@
-
-
-
- Nom :
-
-
- Description :
-
-
-
-
+
+
+
+ Nom :
+
+
+ Description :
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_new_im.xml b/indra/newview/skins/default/xui/fr/floater_new_im.xml
index 53273c9bc..f20e1d31c 100644
--- a/indra/newview/skins/default/xui/fr/floater_new_im.xml
+++ b/indra/newview/skins/default/xui/fr/floater_new_im.xml
@@ -1,11 +1,11 @@
-
-
-
-
-
- [NAME]
-
-
- (connecté)
-
-
+
+
+
+
+
+ [NAME]
+
+
+ (connecté)
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_new_outfit_dialog.xml b/indra/newview/skins/default/xui/fr/floater_new_outfit_dialog.xml
index a0a101179..e140040c5 100644
--- a/indra/newview/skins/default/xui/fr/floater_new_outfit_dialog.xml
+++ b/indra/newview/skins/default/xui/fr/floater_new_outfit_dialog.xml
@@ -1,88 +1,88 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Créer un ensemble
-
-
- Les ensembles sont des dossiers qui contiennent des habits et des parties du corps.
-Faites glisser le dossier contenant un ensemble vers votre avatar pour lui faire porter.
-
-Le bouton Créer un ensemble vous permet de créer un dossier et d'y sauvegarder les copies
-des articles que vous portez maintenant.
-
-
- Nom du dossier :
-
-
- Articles à inclure à l'ensemble :
-
-
- Parties du corps :
-
-
- Habits :
-
-
- Attachements :
-
-
- Options :
-
-
- Nouvelle tenue
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Créer un ensemble
+
+
+ Les ensembles sont des dossiers qui contiennent des habits et des parties du corps.
+Faites glisser le dossier contenant un ensemble vers votre avatar pour lui faire porter.
+
+Le bouton Créer un ensemble vous permet de créer un dossier et d'y sauvegarder les copies
+des articles que vous portez maintenant.
+
+
+ Nom du dossier :
+
+
+ Articles à inclure à l'ensemble :
+
+
+ Parties du corps :
+
+
+ Habits :
+
+
+ Attachements :
+
+
+ Options :
+
+
+ Nouvelle tenue
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_notification.xml b/indra/newview/skins/default/xui/fr/floater_notification.xml
index 06ee37907..7ca2dc3a6 100644
--- a/indra/newview/skins/default/xui/fr/floater_notification.xml
+++ b/indra/newview/skins/default/xui/fr/floater_notification.xml
@@ -1,7 +1,7 @@
-
-
-
- Chargement..
-
-
-
+
+
+
+ Chargement..
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_notifications_console.xml b/indra/newview/skins/default/xui/fr/floater_notifications_console.xml
index 665fa2640..7262fe8fe 100644
--- a/indra/newview/skins/default/xui/fr/floater_notifications_console.xml
+++ b/indra/newview/skins/default/xui/fr/floater_notifications_console.xml
@@ -1,5 +1,5 @@
-
-
-
-
-
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_object_im_info.xml b/indra/newview/skins/default/xui/fr/floater_object_im_info.xml
index 63cfaae4b..cd7664c29 100644
--- a/indra/newview/skins/default/xui/fr/floater_object_im_info.xml
+++ b/indra/newview/skins/default/xui/fr/floater_object_im_info.xml
@@ -1,16 +1,16 @@
-
-
-
- Objet :
-
-
- Lieu :
-
-
- (Informations indisponibles)
-
-
- Propriétaire :
-
-
-
+
+
+
+ Objet :
+
+
+ Lieu :
+
+
+ (Informations indisponibles)
+
+
+ Propriétaire :
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_openobject.xml b/indra/newview/skins/default/xui/fr/floater_openobject.xml
index 5d8f0bed4..36c712e8a 100644
--- a/indra/newview/skins/default/xui/fr/floater_openobject.xml
+++ b/indra/newview/skins/default/xui/fr/floater_openobject.xml
@@ -1,8 +1,8 @@
-
-
-
- [DESC]:
-
-
-
-
+
+
+
+ [DESC]:
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_pay.xml b/indra/newview/skins/default/xui/fr/floater_pay.xml
index 91cdefc3b..7d2071326 100644
--- a/indra/newview/skins/default/xui/fr/floater_pay.xml
+++ b/indra/newview/skins/default/xui/fr/floater_pay.xml
@@ -1,22 +1,22 @@
-
-
-
-
-
-
-
-
-
- Payer :
-
-
- [NAME]
-
-
- Paiement rapide :
-
-
- Montant :
-
-
-
+
+
+
+
+
+
+
+
+
+ Payer :
+
+
+ [NAME]
+
+
+ Paiement rapide :
+
+
+ Montant :
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_pay_object.xml b/indra/newview/skins/default/xui/fr/floater_pay_object.xml
index 818bad9fd..deb448d10 100644
--- a/indra/newview/skins/default/xui/fr/floater_pay_object.xml
+++ b/indra/newview/skins/default/xui/fr/floater_pay_object.xml
@@ -1,31 +1,31 @@
-
-
-
- Payer le groupe :
-
-
- Payer le résident :
-
-
- [NAME]
-
-
- Via un objet :
-
-
- ...
-
-
- Paiement rapide :
-
-
- Montant :
-
-
-
-
-
-
-
-
-
+
+
+
+ Payer le groupe :
+
+
+ Payer le résident :
+
+
+ [NAME]
+
+
+ Via un objet :
+
+
+ ...
+
+
+ Paiement rapide :
+
+
+ Montant :
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_perm_prefs.xml b/indra/newview/skins/default/xui/fr/floater_perm_prefs.xml
index f73f2f81d..9ea970d89 100644
--- a/indra/newview/skins/default/xui/fr/floater_perm_prefs.xml
+++ b/indra/newview/skins/default/xui/fr/floater_perm_prefs.xml
@@ -1,16 +1,16 @@
-
-
-
-
-
-
-
- Le prochain propriétaire pourra :
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+ Le prochain propriétaire pourra :
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_post_process.xml b/indra/newview/skins/default/xui/fr/floater_post_process.xml
index 74c19dc29..52afb340a 100644
--- a/indra/newview/skins/default/xui/fr/floater_post_process.xml
+++ b/indra/newview/skins/default/xui/fr/floater_post_process.xml
@@ -1,54 +1,54 @@
-
-
-
-
-
-
- Luminosité
-
-
- Saturation
-
-
- Contraste
-
-
- Couleur de base du contraste
-
-
-
-
-
-
-
-
-
- Multiple d'amplificateur de lumière
-
-
- Taille du bruit
-
-
- Force du bruit
-
-
-
-
-
- Extraction de la luminosité
-
-
- Taille de l'éclat
-
-
- Force de l'éclat
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+ Luminosité
+
+
+ Saturation
+
+
+ Contraste
+
+
+ Couleur de base du contraste
+
+
+
+
+
+
+
+
+
+ Multiple d'amplificateur de lumière
+
+
+ Taille du bruit
+
+
+ Force du bruit
+
+
+
+
+
+ Extraction de la luminosité
+
+
+ Taille de l'éclat
+
+
+ Force de l'éclat
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_postcard.xml b/indra/newview/skins/default/xui/fr/floater_postcard.xml
index a17f1f64c..38eb0ced4 100644
--- a/indra/newview/skins/default/xui/fr/floater_postcard.xml
+++ b/indra/newview/skins/default/xui/fr/floater_postcard.xml
@@ -1,45 +1,45 @@
-
-
-
- E-mail du destinataire :
-
-
-
- Votre e-mail :
-
-
-
- Votre nom :
-
-
-
- Sujet :
-
-
-
-
- Message :
-
-
-
-
-
- Saisissez votre message ici.
-
-
- Si le destinataire s'inscrit sur Second Life, vous recevrez un bonus.
-
-
-
-
- Carte postale de Second Life.
-
-
- Ouvrez-moi !
-
-
- Envoi en cours...
-
-
+
+
+
+ E-mail du destinataire :
+
+
+
+ Votre e-mail :
+
+
+
+ Votre nom :
+
+
+
+ Sujet :
+
+
+
+
+ Message :
+
+
+
+
+
+ Saisissez votre message ici.
+
+
+ Si le destinataire s'inscrit sur Second Life, vous recevrez un bonus.
+
+
+
+
+ Carte postale de Second Life.
+
+
+ Ouvrez-moi !
+
+
+ Envoi en cours...
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_preferences.xml b/indra/newview/skins/default/xui/fr/floater_preferences.xml
index cb1e245ee..9dab4d642 100644
--- a/indra/newview/skins/default/xui/fr/floater_preferences.xml
+++ b/indra/newview/skins/default/xui/fr/floater_preferences.xml
@@ -1,9 +1,9 @@
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_preview_animation.xml b/indra/newview/skins/default/xui/fr/floater_preview_animation.xml
index d8d89c9b4..566ea7350 100644
--- a/indra/newview/skins/default/xui/fr/floater_preview_animation.xml
+++ b/indra/newview/skins/default/xui/fr/floater_preview_animation.xml
@@ -1,25 +1,25 @@
-
-
-
-
- Description:
-
-
-
-
-
+
+
+
+
+ Description:
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_preview_classified.xml b/indra/newview/skins/default/xui/fr/floater_preview_classified.xml
index 8322f3932..1b6f26150 100644
--- a/indra/newview/skins/default/xui/fr/floater_preview_classified.xml
+++ b/indra/newview/skins/default/xui/fr/floater_preview_classified.xml
@@ -1,2 +1,2 @@
-
-
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_preview_event.xml b/indra/newview/skins/default/xui/fr/floater_preview_event.xml
index ed929c78e..e7fc2aa8d 100644
--- a/indra/newview/skins/default/xui/fr/floater_preview_event.xml
+++ b/indra/newview/skins/default/xui/fr/floater_preview_event.xml
@@ -1,2 +1,2 @@
-
-
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_preview_existing_landmark.xml b/indra/newview/skins/default/xui/fr/floater_preview_existing_landmark.xml
index 86ab802d8..302951645 100644
--- a/indra/newview/skins/default/xui/fr/floater_preview_existing_landmark.xml
+++ b/indra/newview/skins/default/xui/fr/floater_preview_existing_landmark.xml
@@ -1,9 +1,9 @@
-
-
-
- Description :
-
-
-
-
+
+
+
+ Description :
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_preview_gesture.xml b/indra/newview/skins/default/xui/fr/floater_preview_gesture.xml
index bed7802fb..d234059db 100644
--- a/indra/newview/skins/default/xui/fr/floater_preview_gesture.xml
+++ b/indra/newview/skins/default/xui/fr/floater_preview_gesture.xml
@@ -1,66 +1,66 @@
-
-
-
- Stop
-
-
- Prévisualiser
-
-
- -- Aucune --
-
-
- Description :
-
-
- Déclencheur :
-
-
- Remplacer par :
-
-
-
- Raccourci :
-
-
-
-
- Bibliothèque :
-
-
- Étapes :
-
-
- Animation
-Son
-Chat
-Attendre
-
-
-
-
-
-
- Toutes les étapes ont lieu
-simultanément, sauf si vous
-ajoutez des pauses.
-
-
-
- Commencer
-
-
- Stop
-
-
-
-
-
-
-
-
-
+
+
+
+ Stop
+
+
+ Prévisualiser
+
+
+ -- Aucune --
+
+
+ Description :
+
+
+ Déclencheur :
+
+
+ Remplacer par :
+
+
+
+ Raccourci :
+
+
+
+
+ Bibliothèque :
+
+
+ Étapes :
+
+
+ Animation
+Son
+Chat
+Attendre
+
+
+
+
+
+
+ Toutes les étapes ont lieu
+simultanément, sauf si vous
+ajoutez des pauses.
+
+
+
+ Commencer
+
+
+ Stop
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_preview_notecard.xml b/indra/newview/skins/default/xui/fr/floater_preview_notecard.xml
index 0de77b30c..5e7d7b86a 100644
--- a/indra/newview/skins/default/xui/fr/floater_preview_notecard.xml
+++ b/indra/newview/skins/default/xui/fr/floater_preview_notecard.xml
@@ -1,16 +1,16 @@
-
-
-
-
- Description :
-
-
- Chargement...
-
-
- Impossible de trouver l'objet contenant cette note.
-
-
- Vous n'êtes pas autorisé à afficher cette note.
-
-
+
+
+
+
+ Description :
+
+
+ Chargement...
+
+
+ Impossible de trouver l'objet contenant cette note.
+
+
+ Vous n'êtes pas autorisé à afficher cette note.
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_preview_notecard_keep_discard.xml b/indra/newview/skins/default/xui/fr/floater_preview_notecard_keep_discard.xml
index 94783c2d8..f7c864614 100644
--- a/indra/newview/skins/default/xui/fr/floater_preview_notecard_keep_discard.xml
+++ b/indra/newview/skins/default/xui/fr/floater_preview_notecard_keep_discard.xml
@@ -1,17 +1,17 @@
-
-
-
- Chargement..
-
-
- Description :
-
-
-
-
- Impossible de trouver l'objet contenant cette note.
-
-
- Vous n'êtes pas autorisé à afficher cette note.
-
-
+
+
+
+ Chargement..
+
+
+ Description :
+
+
+
+
+ Impossible de trouver l'objet contenant cette note.
+
+
+ Vous n'êtes pas autorisé à afficher cette note.
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_preview_sound.xml b/indra/newview/skins/default/xui/fr/floater_preview_sound.xml
index 030ef7951..e55ca1a58 100644
--- a/indra/newview/skins/default/xui/fr/floater_preview_sound.xml
+++ b/indra/newview/skins/default/xui/fr/floater_preview_sound.xml
@@ -1,12 +1,12 @@
-
-
-
- Description :
-
-
-
-
+
+
+
+ Description :
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_preview_texture.xml b/indra/newview/skins/default/xui/fr/floater_preview_texture.xml
index ae634c89f..33c5b51b2 100644
--- a/indra/newview/skins/default/xui/fr/floater_preview_texture.xml
+++ b/indra/newview/skins/default/xui/fr/floater_preview_texture.xml
@@ -1,13 +1,13 @@
-
-
-
- Description :
-
-
-
-
-
- Dimensions : [WIDTH] x [HEIGHT]
-
-
+
+
+
+ Description :
+
+
+
+
+
+ Dimensions : [WIDTH] x [HEIGHT]
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_preview_url.xml b/indra/newview/skins/default/xui/fr/floater_preview_url.xml
index 68d7d7b67..2a412e04b 100644
--- a/indra/newview/skins/default/xui/fr/floater_preview_url.xml
+++ b/indra/newview/skins/default/xui/fr/floater_preview_url.xml
@@ -1,2 +1,2 @@
-
-
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_price_for_listing.xml b/indra/newview/skins/default/xui/fr/floater_price_for_listing.xml
index 6734cc91e..d8668dcf8 100644
--- a/indra/newview/skins/default/xui/fr/floater_price_for_listing.xml
+++ b/indra/newview/skins/default/xui/fr/floater_price_for_listing.xml
@@ -1,19 +1,19 @@
-
-
-
- Votre petite annonce restera en ligne pendant une
-semaine à compter de sa date de publication.
-
-La position de votre annonce dans les listes
-dépend du montant que vous décidez de payer.
-Les annonces les plus chères paraissent en tête de
-liste et sont plus visibles dans les résultats de
-recherche.
-
-
- Coût de l'annonce (L$) :
-
-
-
-
-
+
+
+
+ Votre petite annonce restera en ligne pendant une
+semaine à compter de sa date de publication.
+
+La position de votre annonce dans les listes
+dépend du montant que vous décidez de payer.
+Les annonces les plus chères paraissent en tête de
+liste et sont plus visibles dans les résultats de
+recherche.
+
+
+ Coût de l'annonce (L$) :
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_profile.xml b/indra/newview/skins/default/xui/fr/floater_profile.xml
index 5c746565d..c04e5a8e9 100644
--- a/indra/newview/skins/default/xui/fr/floater_profile.xml
+++ b/indra/newview/skins/default/xui/fr/floater_profile.xml
@@ -1,4 +1,4 @@
-
-
-
-
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_region_info.xml b/indra/newview/skins/default/xui/fr/floater_region_info.xml
index be36b41f2..d69f212b8 100644
--- a/indra/newview/skins/default/xui/fr/floater_region_info.xml
+++ b/indra/newview/skins/default/xui/fr/floater_region_info.xml
@@ -1,2 +1,2 @@
-
-
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_report_abuse.xml b/indra/newview/skins/default/xui/fr/floater_report_abuse.xml
index 352c63c5b..628f308f8 100644
--- a/indra/newview/skins/default/xui/fr/floater_report_abuse.xml
+++ b/indra/newview/skins/default/xui/fr/floater_report_abuse.xml
@@ -1,183 +1,183 @@
-
-
-
-
-
- Déposant :
-
-
- Loremipsum Dolorsitamut
-
-
- Région :
-
-
- Nom de la région
-
-
- Position :
-
-
- {128.1, 128.1, 15.4}
-
-
- Cliquez sur le bouton puis l'objet :
-
-
-
- Nom :
-
-
- Consetetur Sadipscing
-
-
- Propriétaire :
-
-
- Hendrerit Vulputate
-
-
-
- Sélectionnez une catégorie
-
-
- Âge > « Age play »
-
-
- Âge > Résident adulte sur Second Life pour adolescents
-
-
- Âge > Resident mineur en dehors de Teen Second Life
-
-
- Assaut > Bac à sable utilisé pour des combats/zone non sécurisée
-
-
- Assaut > Zone sécurisée
-
-
- Assaut > Bac à sable pour tests d'armes à feu
-
-
- Commerce > Incapacité à fournir un produit ou service
-
-
- Divulgation > Informations sur la vie réelle
-
-
- Divulgation > Écoute d'un chat à distance
-
-
- Divulgation > Informations sur Second Life/chat/IM
-
-
- Trouble de la paix > Utilisation inadéquate des ressources de la région
-
-
- Trouble de la paix > Nombre d'objets scriptés excessif
-
-
- Trouble de la paix > Abandon d'objets
-
-
- Trouble de la paix > Spam à répétition
-
-
- Trouble de la paix > Spam à caractère commercial
-
-
- Fraude > L$
-
-
- Fraude > Terrain
-
-
- Fraude > Vente pyramidale ou lettre-chaîne
-
-
- Fraude > US$
-
-
- Harcèlement > Spam visuel
-
-
- Harcèlement > Diffamation envers des individus ou des groupes
-
-
- Harcèlement > Immobilisation
-
-
- Harcèlement > Harcèlement sexuel
-
-
- Harcèlement > Incitation à enfreindre les Conditions d'utilisation
-
-
- Harcèlement > Abus verbal
-
-
- Indécence > Contenu ou comportement offensifs
-
-
- Indécence > Nom d'avatar inapproprié
-
-
- Indécence > Contenu ou conduite inappropriés dans une région PG
-
-
- Indécence > Contenu ou conduite inappropriés dans une région Mature
-
-
- Violation de droits de propriété intellectuelle > Suppression de contenu
-
-
- Violation de droits de propriété intellectuelle > CopyBot ou exploitation abusive des droits
-
-
- Intolérance
-
-
- Terrain > Utilisation abusive des ressources du bac à sable
-
-
- Terrain > Empiètement > Objets/textures
-
-
- Terrain > Empiètement > Particules
-
-
- Terrain > Empiètement > Arbres/plantes
-
-
- Paris/jeux d'argent
-
-
- Autre
-
-
-
- Nom du contrevenant :
-
-
-
-
- Indiquez où l'infraction a eu lieu :
-
-
- Récapitulatif :
-
-
- Détails :
-
-
- Indiquez la date, le lieu, la nature de l'infraction, ainsi que
-tout chat ou IM relatif à l'infraction, en étant aussi précis
-que possible. Pensez à indiquer un objet si possible.
-
-
- Remarque : les rapports incomplets ne feront pas l'objet d'une
-enquête.
-
-
-
-
+
+
+
+
+
+ Déposant :
+
+
+ Loremipsum Dolorsitamut
+
+
+ Région :
+
+
+ Nom de la région
+
+
+ Position :
+
+
+ {128.1, 128.1, 15.4}
+
+
+ Cliquez sur le bouton puis l'objet :
+
+
+
+ Nom :
+
+
+ Consetetur Sadipscing
+
+
+ Propriétaire :
+
+
+ Hendrerit Vulputate
+
+
+
+ Sélectionnez une catégorie
+
+
+ Âge > « Age play »
+
+
+ Âge > Résident adulte sur Second Life pour adolescents
+
+
+ Âge > Resident mineur en dehors de Teen Second Life
+
+
+ Assaut > Bac à sable utilisé pour des combats/zone non sécurisée
+
+
+ Assaut > Zone sécurisée
+
+
+ Assaut > Bac à sable pour tests d'armes à feu
+
+
+ Commerce > Incapacité à fournir un produit ou service
+
+
+ Divulgation > Informations sur la vie réelle
+
+
+ Divulgation > Écoute d'un chat à distance
+
+
+ Divulgation > Informations sur Second Life/chat/IM
+
+
+ Trouble de la paix > Utilisation inadéquate des ressources de la région
+
+
+ Trouble de la paix > Nombre d'objets scriptés excessif
+
+
+ Trouble de la paix > Abandon d'objets
+
+
+ Trouble de la paix > Spam à répétition
+
+
+ Trouble de la paix > Spam à caractère commercial
+
+
+ Fraude > L$
+
+
+ Fraude > Terrain
+
+
+ Fraude > Vente pyramidale ou lettre-chaîne
+
+
+ Fraude > US$
+
+
+ Harcèlement > Spam visuel
+
+
+ Harcèlement > Diffamation envers des individus ou des groupes
+
+
+ Harcèlement > Immobilisation
+
+
+ Harcèlement > Harcèlement sexuel
+
+
+ Harcèlement > Incitation à enfreindre les Conditions d'utilisation
+
+
+ Harcèlement > Abus verbal
+
+
+ Indécence > Contenu ou comportement offensifs
+
+
+ Indécence > Nom d'avatar inapproprié
+
+
+ Indécence > Contenu ou conduite inappropriés dans une région PG
+
+
+ Indécence > Contenu ou conduite inappropriés dans une région Mature
+
+
+ Violation de droits de propriété intellectuelle > Suppression de contenu
+
+
+ Violation de droits de propriété intellectuelle > CopyBot ou exploitation abusive des droits
+
+
+ Intolérance
+
+
+ Terrain > Utilisation abusive des ressources du bac à sable
+
+
+ Terrain > Empiètement > Objets/textures
+
+
+ Terrain > Empiètement > Particules
+
+
+ Terrain > Empiètement > Arbres/plantes
+
+
+ Paris/jeux d'argent
+
+
+ Autre
+
+
+
+ Nom du contrevenant :
+
+
+
+
+ Indiquez où l'infraction a eu lieu :
+
+
+ Récapitulatif :
+
+
+ Détails :
+
+
+ Indiquez la date, le lieu, la nature de l'infraction, ainsi que
+tout chat ou IM relatif à l'infraction, en étant aussi précis
+que possible. Pensez à indiquer un objet si possible.
+
+
+ Remarque : les rapports incomplets ne feront pas l'objet d'une
+enquête.
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_report_bug.xml b/indra/newview/skins/default/xui/fr/floater_report_bug.xml
index eba1faa36..80a42f14b 100644
--- a/indra/newview/skins/default/xui/fr/floater_report_bug.xml
+++ b/indra/newview/skins/default/xui/fr/floater_report_bug.xml
@@ -1,108 +1,108 @@
-
-
-
- Signalant :
-
-
- Sim :
-
-
- Position :
-
-
- Cliquez sur le bouton puis l'objet :
-
-
-
- Nom :
-
-
- Consetetur Sadipscing
-
-
- Propriétaire :
-
-
-
-
- Catégorie :
-
-
- Hendrerit Vulputate
-
-
-
- Sélectionnez une catégorie
-
-
- Construire
-
-
- Personnage
-
-
- Chat/IM
-
-
- Documentation
-
-
- Exploit
-
-
- Graphiques
-
-
- Inventaire
-
-
- Lag
-
-
- Contenu manquant
-
-
- Dollar Linden (L$)
-
-
- Autorisations
-
-
- Propriétés physiques
-
-
- Script
-
-
- Son
-
-
- Subsides
-
-
- Interface utilisateur
-
-
- Divers
-
-
-
- Récapitulatif :
-
-
- Détails (soyez aussi précis que possible) :
-
-
- Étapes pour reproduire le bug :
-
-Résultats observés :
-
-Résultats attendus :
-
-
- Remarque : les rapports incomplets ne feront pas l'objet d'une enquête.
-Si ce bug vous permet de faire quelque chose que vous ne devriez pas pouvoir faire, surtout s'il a des conséquences sur la sécurité et la performance, veuillez sélectionner la catégorie Exploit. Merci !
-
-
-
-
+
+
+
+ Signalant :
+
+
+ Sim :
+
+
+ Position :
+
+
+ Cliquez sur le bouton puis l'objet :
+
+
+
+ Nom :
+
+
+ Consetetur Sadipscing
+
+
+ Propriétaire :
+
+
+
+
+ Catégorie :
+
+
+ Hendrerit Vulputate
+
+
+
+ Sélectionnez une catégorie
+
+
+ Construire
+
+
+ Personnage
+
+
+ Chat/IM
+
+
+ Documentation
+
+
+ Exploit
+
+
+ Graphiques
+
+
+ Inventaire
+
+
+ Lag
+
+
+ Contenu manquant
+
+
+ Dollar Linden (L$)
+
+
+ Autorisations
+
+
+ Propriétés physiques
+
+
+ Script
+
+
+ Son
+
+
+ Subsides
+
+
+ Interface utilisateur
+
+
+ Divers
+
+
+
+ Récapitulatif :
+
+
+ Détails (soyez aussi précis que possible) :
+
+
+ Étapes pour reproduire le bug :
+
+Résultats observés :
+
+Résultats attendus :
+
+
+ Remarque : les rapports incomplets ne feront pas l'objet d'une enquête.
+Si ce bug vous permet de faire quelque chose que vous ne devriez pas pouvoir faire, surtout s'il a des conséquences sur la sécurité et la performance, veuillez sélectionner la catégorie Exploit. Merci !
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_script_debug.xml b/indra/newview/skins/default/xui/fr/floater_script_debug.xml
index 3381e510e..3664222fd 100644
--- a/indra/newview/skins/default/xui/fr/floater_script_debug.xml
+++ b/indra/newview/skins/default/xui/fr/floater_script_debug.xml
@@ -1,6 +1,6 @@
-
-
-
-
-
-
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_script_ed_panel.xml b/indra/newview/skins/default/xui/fr/floater_script_ed_panel.xml
index 8bc846463..3f9c4b82c 100644
--- a/indra/newview/skins/default/xui/fr/floater_script_ed_panel.xml
+++ b/indra/newview/skins/default/xui/fr/floater_script_ed_panel.xml
@@ -1,43 +1,43 @@
-
-
-
-
- Chargement...
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Chargement...
-
-
- Vous n'êtes pas autorisé à afficher ce script.
-
-
- Les objets publics ne peuvent pas exécuter de scripts
-
-
- Exécution en cours
-
-
+
+
+
+
+ Chargement...
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Chargement...
+
+
+ Vous n'êtes pas autorisé à afficher ce script.
+
+
+ Les objets publics ne peuvent pas exécuter de scripts
+
+
+ Exécution en cours
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_script_preview.xml b/indra/newview/skins/default/xui/fr/floater_script_preview.xml
index ff5d46c79..4b77d6b4c 100644
--- a/indra/newview/skins/default/xui/fr/floater_script_preview.xml
+++ b/indra/newview/skins/default/xui/fr/floater_script_preview.xml
@@ -1,6 +1,6 @@
-
-
-
- Description :
-
-
+
+
+
+ Description :
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_script_queue.xml b/indra/newview/skins/default/xui/fr/floater_script_queue.xml
index d93fd92a7..55487f75d 100644
--- a/indra/newview/skins/default/xui/fr/floater_script_queue.xml
+++ b/indra/newview/skins/default/xui/fr/floater_script_queue.xml
@@ -1,4 +1,4 @@
-
-
-
-
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_script_search.xml b/indra/newview/skins/default/xui/fr/floater_script_search.xml
index abc1e79f4..1c20c9c34 100644
--- a/indra/newview/skins/default/xui/fr/floater_script_search.xml
+++ b/indra/newview/skins/default/xui/fr/floater_script_search.xml
@@ -1,15 +1,15 @@
-
-
-
-
-
-
-
- Rechercher
-
-
- Remplacer
-
-
-
-
+
+
+
+
+
+
+
+ Rechercher
+
+
+ Remplacer
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_select_key.xml b/indra/newview/skins/default/xui/fr/floater_select_key.xml
index fc8fae4bb..0dc47df72 100644
--- a/indra/newview/skins/default/xui/fr/floater_select_key.xml
+++ b/indra/newview/skins/default/xui/fr/floater_select_key.xml
@@ -1,7 +1,7 @@
-
-
-
-
- Appuyer sur une touche pour choisir
-
-
+
+
+
+
+ Appuyer sur une touche pour choisir
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_sell_land.xml b/indra/newview/skins/default/xui/fr/floater_sell_land.xml
index 708b6dc50..cf394643b 100644
--- a/indra/newview/skins/default/xui/fr/floater_sell_land.xml
+++ b/indra/newview/skins/default/xui/fr/floater_sell_land.xml
@@ -1,72 +1,72 @@
-
-
-
- Parcelle :
-
-
- PARCEL NAME
-
-
- Taille :
-
-
- [AREA] m²
-
-
- Pour vendre cette
-parcelle :
-
-
-
- Votre prix de vente :
-
-
- Fixez un prix convenable pour ce terrain.
-
-
- L$
-
-
- ([PER_METER] L$ par mètre carré)
-
-
- Vos acheteurs :
-
-
- Vendez votre terrain à n'importe qui ou uniquement à un acheteur
-spécifique.
-
-
-
- -- Sélectionnez --
-
-
- N'importe qui
-
-
- Acheteur spécifique :
-
-
-
-
- Vendez-vous des objets avec ce terrain ?
-
-
- Les objets transférables se trouvant sur la parcelle changeront
-de propriétaire.
-
-
-
- Non, rester le propriétaire des objets
-
-
- Oui, vendre les objets avec le terrain
-
-
-
-
- Rappel : toute vente est définitive.
-
-
-
-
+
+
+
+ Parcelle :
+
+
+ PARCEL NAME
+
+
+ Taille :
+
+
+ [AREA] m²
+
+
+ Pour vendre cette
+parcelle :
+
+
+
+ Votre prix de vente :
+
+
+ Fixez un prix convenable pour ce terrain.
+
+
+ L$
+
+
+ ([PER_METER] L$ par mètre carré)
+
+
+ Vos acheteurs :
+
+
+ Vendez votre terrain à n'importe qui ou uniquement à un acheteur
+spécifique.
+
+
+
+ -- Sélectionnez --
+
+
+ N'importe qui
+
+
+ Acheteur spécifique :
+
+
+
+
+ Vendez-vous des objets avec ce terrain ?
+
+
+ Les objets transférables se trouvant sur la parcelle changeront
+de propriétaire.
+
+
+
+ Non, rester le propriétaire des objets
+
+
+ Oui, vendre les objets avec le terrain
+
+
+
+
+ Rappel : toute vente est définitive.
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_settings_debug.xml b/indra/newview/skins/default/xui/fr/floater_settings_debug.xml
index 8d6249bf5..30183340f 100644
--- a/indra/newview/skins/default/xui/fr/floater_settings_debug.xml
+++ b/indra/newview/skins/default/xui/fr/floater_settings_debug.xml
@@ -1,17 +1,17 @@
-
-
-
-
- TRUE
-
-
- FALSE
-
-
-
-
-
-
-
-
-
+
+
+
+
+ TRUE
+
+
+ FALSE
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_sim_release_message.xml b/indra/newview/skins/default/xui/fr/floater_sim_release_message.xml
index 4babe6f33..dc1e4eaa4 100644
--- a/indra/newview/skins/default/xui/fr/floater_sim_release_message.xml
+++ b/indra/newview/skins/default/xui/fr/floater_sim_release_message.xml
@@ -1,16 +1,16 @@
-
-
-
-
- Aide dans le Monde
-
-
- http://www.secondlife.com/app/support/inworld.html
-
-
- Aide supplémentaire
-
-
- http://www.secondlife.com/app/support/support.html
-
-
+
+
+
+
+ Aide dans le Monde
+
+
+ http://www.secondlife.com/app/support/inworld.html
+
+
+ Aide supplémentaire
+
+
+ http://www.secondlife.com/app/support/support.html
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_skin_preview_template.xml b/indra/newview/skins/default/xui/fr/floater_skin_preview_template.xml
index 8bd1ec326..44397458d 100644
--- a/indra/newview/skins/default/xui/fr/floater_skin_preview_template.xml
+++ b/indra/newview/skins/default/xui/fr/floater_skin_preview_template.xml
@@ -1,34 +1,34 @@
-
-
-
-
-
-
-
-
-
-
- Pas de mise au point
-
-
-
- Texte
-
-
-
-
- Mise au point
-
-
-
-
-
-
-
- Texte du chat
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+ Pas de mise au point
+
+
+
+ Texte
+
+
+
+
+ Mise au point
+
+
+
+
+
+
+
+ Texte du chat
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_snapshot.xml b/indra/newview/skins/default/xui/fr/floater_snapshot.xml
index a0978a9ab..4351a1a78 100644
--- a/indra/newview/skins/default/xui/fr/floater_snapshot.xml
+++ b/indra/newview/skins/default/xui/fr/floater_snapshot.xml
@@ -1,137 +1,137 @@
-
-
-
- Destination de la photo
-
-
-
- Envoyer par e-mail
-
-
- Enregistrer dans votre inventaire ([AMOUNT] L$)
-
-
- Enregistrer sur votre disque dur
-
-
-
-
-
- Taille
-
-
- Format
-
-
-
- 640 x 480
-
-
- 800 x 600
-
-
- 1024 x 768
-
-
- Fenêtre actuelle
-
-
- Personnaliser
-
-
-
-
- Fenêtre actuelle
-
-
- Petite (128 x 128)
-
-
- Moyenne (256 x 256)
-
-
- Grande (512 x 512)
-
-
- Personnaliser
-
-
-
-
- Fenêtre actuelle
-
-
- 320 x 240
-
-
- 640 x 480
-
-
- 800 x 600
-
-
- 1024 x 768
-
-
- 1280 x 1024
-
-
- 1600 x 1200
-
-
- Personnaliser
-
-
-
-
- PNG
-
-
- JPEG
-
-
- BMP
-
-
-
-
-
-
- Capturer :
-
-
-
- Couleurs
-
-
- Profondeur
-
-
- Matte des objets
-
-
-
- Taille du fichier : [SIZE] Ko
-
-
-
-
-
-
-
-
-
-
-
-
- Enregistrer
-
-
- Enregistrer sous...
-
-
-
-
- inconnu
-
-
+
+
+
+ Destination de la photo
+
+
+
+ Envoyer par e-mail
+
+
+ Enregistrer dans votre inventaire ([AMOUNT] L$)
+
+
+ Enregistrer sur votre disque dur
+
+
+
+
+
+ Taille
+
+
+ Format
+
+
+
+ 640 x 480
+
+
+ 800 x 600
+
+
+ 1024 x 768
+
+
+ Fenêtre actuelle
+
+
+ Personnaliser
+
+
+
+
+ Fenêtre actuelle
+
+
+ Petite (128 x 128)
+
+
+ Moyenne (256 x 256)
+
+
+ Grande (512 x 512)
+
+
+ Personnaliser
+
+
+
+
+ Fenêtre actuelle
+
+
+ 320 x 240
+
+
+ 640 x 480
+
+
+ 800 x 600
+
+
+ 1024 x 768
+
+
+ 1280 x 1024
+
+
+ 1600 x 1200
+
+
+ Personnaliser
+
+
+
+
+ PNG
+
+
+ JPEG
+
+
+ BMP
+
+
+
+
+
+
+ Capturer :
+
+
+
+ Couleurs
+
+
+ Profondeur
+
+
+ Matte des objets
+
+
+
+ Taille du fichier : [SIZE] Ko
+
+
+
+
+
+
+
+
+
+
+
+
+ Enregistrer
+
+
+ Enregistrer sous...
+
+
+
+
+ inconnu
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_sound_preview.xml b/indra/newview/skins/default/xui/fr/floater_sound_preview.xml
index 18f21d2df..199a6b846 100644
--- a/indra/newview/skins/default/xui/fr/floater_sound_preview.xml
+++ b/indra/newview/skins/default/xui/fr/floater_sound_preview.xml
@@ -1,28 +1,28 @@
-
-
-
- Nom :
-
-
- Description :
-
-
-
-
- Débit (kbps) :
-
-
-
- 32
-
-
- 64
-
-
- 96
-
-
- 128
-
-
-
+
+
+
+ Nom :
+
+
+ Description :
+
+
+
+
+ Débit (kbps) :
+
+
+
+ 32
+
+
+ 64
+
+
+ 96
+
+
+ 128
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_statistics.xml b/indra/newview/skins/default/xui/fr/floater_statistics.xml
index 632589d55..0768c3ace 100644
--- a/indra/newview/skins/default/xui/fr/floater_statistics.xml
+++ b/indra/newview/skins/default/xui/fr/floater_statistics.xml
@@ -1,2 +1,2 @@
-
-
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_telehub.xml b/indra/newview/skins/default/xui/fr/floater_telehub.xml
index 59d41fdaf..e6201785b 100644
--- a/indra/newview/skins/default/xui/fr/floater_telehub.xml
+++ b/indra/newview/skins/default/xui/fr/floater_telehub.xml
@@ -1,31 +1,31 @@
-
-
-
- Téléhub connecté à l'objet [OBJECT]
-
-
- Aucun téléhub connecté.
-
-
- Pour supprimer, cliquez sur Déconnecter.
-
-
- Sélectionner l'objet et cliquez sur Connecter
-le téléhub.
-
-
-
-
- Points d'apparition (positions, pas objets) :
-
-
-
-
- Sélectionnez l'objet et cliquez sur Ajouter pour
-indiquer la position. Vous pourrez ensuite
-déplacer ou supprimer l'objet.
-Les positions sont relatives au centre du téléhub.
-Sélectionnez l'élément dans la liste pour afficher
-sa position dans le Monde.
-
-
+
+
+
+ Téléhub connecté à l'objet [OBJECT]
+
+
+ Aucun téléhub connecté.
+
+
+ Pour supprimer, cliquez sur Déconnecter.
+
+
+ Sélectionner l'objet et cliquez sur Connecter
+le téléhub.
+
+
+
+
+ Points d'apparition (positions, pas objets) :
+
+
+
+
+ Sélectionnez l'objet et cliquez sur Ajouter pour
+indiquer la position. Vous pourrez ensuite
+déplacer ou supprimer l'objet.
+Les positions sont relatives au centre du téléhub.
+Sélectionnez l'élément dans la liste pour afficher
+sa position dans le Monde.
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_test.xml b/indra/newview/skins/default/xui/fr/floater_test.xml
index 923c39692..78dc45f02 100644
--- a/indra/newview/skins/default/xui/fr/floater_test.xml
+++ b/indra/newview/skins/default/xui/fr/floater_test.xml
@@ -1,2 +1,2 @@
-
-
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_texture_ctrl.xml b/indra/newview/skins/default/xui/fr/floater_texture_ctrl.xml
index 1a8e57e60..2a234a37c 100644
--- a/indra/newview/skins/default/xui/fr/floater_texture_ctrl.xml
+++ b/indra/newview/skins/default/xui/fr/floater_texture_ctrl.xml
@@ -1,24 +1,24 @@
-
-
-
- Cliquez pour sélectionner une image
-
-
- Multiple
-
-
- Dimensions : [DIMENSIONS]
-
-
-
-
-
-
-
-
-
-
-
- Choisir :
-
-
+
+
+
+ Cliquez pour sélectionner une image
+
+
+ Multiple
+
+
+ Dimensions : [DIMENSIONS]
+
+
+
+
+
+
+
+
+
+
+
+ Choisir :
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_tools.xml b/indra/newview/skins/default/xui/fr/floater_tools.xml
index dc9eeddb8..dd0ab6fc5 100644
--- a/indra/newview/skins/default/xui/fr/floater_tools.xml
+++ b/indra/newview/skins/default/xui/fr/floater_tools.xml
@@ -1,650 +1,650 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Axe :
-
-
-
- Monde
-
-
- Local
-
-
- Référence
-
-
-
-
-
-
-
- Glissez pour déplacer, Maj-glissez pour copier.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Bulldozer :
-
-
- Taille
-
-
- Force
-
-
- Objets sélectionnés : [COUNT]
-
-
- Prims : [COUNT]
-
-
-
-
- Nom :
-
-
- Description :
-
-
- Créateur :
-
-
- Thrax Linden
-
-
-
- Propriétaire :
-
-
-
-
- Dernier Proprio:
-
-
-
- Thrax Linden
-
-
-
- Groupe :
-
-
- Les Lindens
-
-
-
-
-
-
- Droits :
-
-
- Vous pouvez modifier cet objet.
-
-
-
- Transférer...
-
-
- Transférer
-
-
-
-
-
-
-
- Prix : L$
-
-
-
- Original
-
-
- Copie
-
-
- Contenus
-
-
-
- Le prochain propriétaire pourra :
-
-
-
-
-
- Action du clic-gauche :
-
-
-
- Toucher/attraper (défaut)
-
-
- S'asseoir sur l'objet
-
-
- Acheter l'objet
-
-
- Payer l'objet
-
-
- Ouvrir
-
-
- Jouer le média de la parcelle
-
-
- Ouvrir le média de la parcelle
-
-
-
-
-
-
- BÂ :
-
-
- OÂ :
-
-
- G :
-
-
- EÂ :
-
-
- NÂ :
-
-
- FÂ :
-
-
- Vous pouvez modifier cet objet.
-
-
- Vous pouvez modifier ces objets.
-
-
- Vous ne pouvez pas modifier cet objet.
-
-
- Vous ne pouvez pas modifier ces objets.
-
-
- Sélectionnez l'objet en entier.
-
-
- Prix : L$
-
-
- Prix total : L$
-
-
- Prix par : L$
-
-
- Prix mixte
-
-
- Vente mixte
-
-
-
-
- paramètres.
-
-
- Â
-
-
-
-
-
-
-
-
- Position (mètres)
-
-
-
-
-
- Taille (mètres)
-
-
-
-
-
- Rotation (degrés)
-
-
-
-
-
- Matériau
-
-
-
- Pierre
-
-
- Métal
-
-
- Verre
-
-
- Bois
-
-
- Chair
-
-
- Plastique
-
-
- Caoutchouc
-
-
-
- Type de construction
-
-
-
- Boîte
-
-
- Cylindre
-
-
- Prisme
-
-
- Sphère
-
-
- Tore
-
-
- Tube
-
-
- Anneau
-
-
- Sculptie
-
-
-
- Début et fin de découpe
-
-
-
-
- Creux
-
-
- Biais
-
-
- Forme du creux
-
-
-
- Défaut
-
-
- Cercle
-
-
- Carré
-
-
- Triangle
-
-
-
- Début et fin de vrille
-
-
-
-
- Biseautage
-
-
- Taille du trou
-
-
-
-
- Inclinaison
-
-
-
-
- Début et fin de découpe du profilé
-
-
- Début et fin du creux
-
-
- Début et fin de la tranche
-
-
-
-
- Biseautage
-
-
-
-
- Rayon
-
-
- Révolutions
-
-
-
-
-
- Type de raccord
-
-
-
- (aucun)
-
-
- Sphère
-
-
- Tore
-
-
- Plan
-
-
- Cylindre
-
-
-
-
-
- Sélectionnez un prim pour modifier les attributs.
-
-
- Modifier les attributs de l'objet :
-
-
-
-
-
-
-
-
-
-
-
-
- Couleur
-
-
-
-
-
-
-
-
-
-
- Transparence
-
-
- Rayonnement
-
-
-
- Application
-
-
-
- Défaut
-
-
- Planar
-
-
-
- Brillance
-
-
-
- Aucune
-
-
- Faible
-
-
- Moyenne
-
-
- Élevée
-
-
-
- Relief
-
-
-
- Aucun
-
-
- Luminosité
-
-
- Obscurité
-
-
- Aggloméré
-
-
- Écorce
-
-
- Briques
-
-
- Damier
-
-
- Béton
-
-
- Carrelage
-
-
- Pierre de taille
-
-
- Disques
-
-
- Gravier
-
-
- Boîte de Petri
-
-
- Lattes
-
-
- Carreaux
-
-
- Stuc
-
-
- Ventouses
-
-
- Tissage
-
-
-
- Répétitions par face
-
-
-
-
-
-
- Rotation (degrés)
-
-
-
- Répétitions au mètre
-
-
- Répétitions par face
-
-
- Répétitions au mètre
-
-
-
-
- Décalage
-
-
-
-
- Ajuster la texture du média
-(chargement préalable)
-
-
-
-
-
-
-
-
-
-
- Informations sur la parcelle
-
-
- Prix : [PRICE] L$ pour [AREA] m².
-
-
- Surface : [AREA] m²
-
-
-
-
-
- Modifier la parcelle
-
-
-
-
- Transactions
-
-
-
-
-
- Pour faire tourner l'objet, faîtes glisser les bandes de couleur.
-
-
- Pour étirer le côté sélectionné, cliquez et faites glisser.
-
-
- Glissez pour déplacer, Maj-glissez pour copier.
-
-
- Cliquez et maintenez pour modifier le terrain.
-
-
- Cliquez et faites glisser pour changer l'affichage.
-
-
- Glisser pour déplacer, Ctrl pour soulever, Crtl-Maj pour pivoter.
-
-
- Cliquez dans le monde pour construire.
-
-
- Cliquez et faites glisser pour sélectionner le terrain.
-
-
- Écran
-
-
- Local
-
-
- Monde
-
-
- Référence
-
-
- Pièce-jointe
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Axe :
+
+
+
+ Monde
+
+
+ Local
+
+
+ Référence
+
+
+
+
+
+
+
+ Glissez pour déplacer, Maj-glissez pour copier.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Bulldozer :
+
+
+ Taille
+
+
+ Force
+
+
+ Objets sélectionnés : [COUNT]
+
+
+ Prims : [COUNT]
+
+
+
+
+ Nom :
+
+
+ Description :
+
+
+ Créateur :
+
+
+ Thrax Linden
+
+
+
+ Propriétaire :
+
+
+
+
+ Dernier Proprio:
+
+
+
+ Thrax Linden
+
+
+
+ Groupe :
+
+
+ Les Lindens
+
+
+
+
+
+
+ Droits :
+
+
+ Vous pouvez modifier cet objet.
+
+
+
+ Transférer...
+
+
+ Transférer
+
+
+
+
+
+
+
+ Prix : L$
+
+
+
+ Original
+
+
+ Copie
+
+
+ Contenus
+
+
+
+ Le prochain propriétaire pourra :
+
+
+
+
+
+ Action du clic-gauche :
+
+
+
+ Toucher/attraper (défaut)
+
+
+ S'asseoir sur l'objet
+
+
+ Acheter l'objet
+
+
+ Payer l'objet
+
+
+ Ouvrir
+
+
+ Jouer le média de la parcelle
+
+
+ Ouvrir le média de la parcelle
+
+
+
+
+
+
+ BÂ :
+
+
+ OÂ :
+
+
+ G :
+
+
+ EÂ :
+
+
+ NÂ :
+
+
+ FÂ :
+
+
+ Vous pouvez modifier cet objet.
+
+
+ Vous pouvez modifier ces objets.
+
+
+ Vous ne pouvez pas modifier cet objet.
+
+
+ Vous ne pouvez pas modifier ces objets.
+
+
+ Sélectionnez l'objet en entier.
+
+
+ Prix : L$
+
+
+ Prix total : L$
+
+
+ Prix par : L$
+
+
+ Prix mixte
+
+
+ Vente mixte
+
+
+
+
+ paramètres.
+
+
+ Â
+
+
+
+
+
+
+
+
+ Position (mètres)
+
+
+
+
+
+ Taille (mètres)
+
+
+
+
+
+ Rotation (degrés)
+
+
+
+
+
+ Matériau
+
+
+
+ Pierre
+
+
+ Métal
+
+
+ Verre
+
+
+ Bois
+
+
+ Chair
+
+
+ Plastique
+
+
+ Caoutchouc
+
+
+
+ Type de construction
+
+
+
+ Boîte
+
+
+ Cylindre
+
+
+ Prisme
+
+
+ Sphère
+
+
+ Tore
+
+
+ Tube
+
+
+ Anneau
+
+
+ Sculptie
+
+
+
+ Début et fin de découpe
+
+
+
+
+ Creux
+
+
+ Biais
+
+
+ Forme du creux
+
+
+
+ Défaut
+
+
+ Cercle
+
+
+ Carré
+
+
+ Triangle
+
+
+
+ Début et fin de vrille
+
+
+
+
+ Biseautage
+
+
+ Taille du trou
+
+
+
+
+ Inclinaison
+
+
+
+
+ Début et fin de découpe du profilé
+
+
+ Début et fin du creux
+
+
+ Début et fin de la tranche
+
+
+
+
+ Biseautage
+
+
+
+
+ Rayon
+
+
+ Révolutions
+
+
+
+
+
+ Type de raccord
+
+
+
+ (aucun)
+
+
+ Sphère
+
+
+ Tore
+
+
+ Plan
+
+
+ Cylindre
+
+
+
+
+
+ Sélectionnez un prim pour modifier les attributs.
+
+
+ Modifier les attributs de l'objet :
+
+
+
+
+
+
+
+
+
+
+
+
+ Couleur
+
+
+
+
+
+
+
+
+
+
+ Transparence
+
+
+ Rayonnement
+
+
+
+ Application
+
+
+
+ Défaut
+
+
+ Planar
+
+
+
+ Brillance
+
+
+
+ Aucune
+
+
+ Faible
+
+
+ Moyenne
+
+
+ Élevée
+
+
+
+ Relief
+
+
+
+ Aucun
+
+
+ Luminosité
+
+
+ Obscurité
+
+
+ Aggloméré
+
+
+ Écorce
+
+
+ Briques
+
+
+ Damier
+
+
+ Béton
+
+
+ Carrelage
+
+
+ Pierre de taille
+
+
+ Disques
+
+
+ Gravier
+
+
+ Boîte de Petri
+
+
+ Lattes
+
+
+ Carreaux
+
+
+ Stuc
+
+
+ Ventouses
+
+
+ Tissage
+
+
+
+ Répétitions par face
+
+
+
+
+
+
+ Rotation (degrés)
+
+
+
+ Répétitions au mètre
+
+
+ Répétitions par face
+
+
+ Répétitions au mètre
+
+
+
+
+ Décalage
+
+
+
+
+ Ajuster la texture du média
+(chargement préalable)
+
+
+
+
+
+
+
+
+
+
+ Informations sur la parcelle
+
+
+ Prix : [PRICE] L$ pour [AREA] m².
+
+
+ Surface : [AREA] m²
+
+
+
+
+
+ Modifier la parcelle
+
+
+
+
+ Transactions
+
+
+
+
+
+ Pour faire tourner l'objet, faîtes glisser les bandes de couleur.
+
+
+ Pour étirer le côté sélectionné, cliquez et faites glisser.
+
+
+ Glissez pour déplacer, Maj-glissez pour copier.
+
+
+ Cliquez et maintenez pour modifier le terrain.
+
+
+ Cliquez et faites glisser pour changer l'affichage.
+
+
+ Glisser pour déplacer, Ctrl pour soulever, Crtl-Maj pour pivoter.
+
+
+ Cliquez pour construire.
+
+
+ Cliquez et faites glisser pour sélectionner le terrain.
+
+
+ Écran
+
+
+ Local
+
+
+ Monde
+
+
+ Référence
+
+
+ Pièce-jointe
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_top_objects.xml b/indra/newview/skins/default/xui/fr/floater_top_objects.xml
index e446e4826..69a3d0cd1 100644
--- a/indra/newview/skins/default/xui/fr/floater_top_objects.xml
+++ b/indra/newview/skins/default/xui/fr/floater_top_objects.xml
@@ -1,55 +1,55 @@
-
-
-
- Chargement...
-
-
-
-
-
-
-
-
-
-
- ID de l'objet :
-
-
-
- Objet :
-
-
-
- Propriétaire :
-
-
-
-
-
-
-
-
- Scripts principaux
-
-
- [COUNT] scripts prenant un total de [TIME] ms
-
-
- Heure
-
-
- Heure Mono
-
-
- Collisions les plus consommatrices
-
-
- [COUNT] collisions les plus consommatrices
-
-
- Score
-
-
- Aucun résultat.
-
-
+
+
+
+ Chargement...
+
+
+
+
+
+
+
+
+
+
+ ID de l'objet :
+
+
+
+ Objet :
+
+
+
+ Propriétaire :
+
+
+
+
+
+
+
+
+ Scripts principaux
+
+
+ [COUNT] scripts prenant un total de [TIME] ms
+
+
+ Heure
+
+
+ Heure Mono
+
+
+ Collisions les plus consommatrices
+
+
+ [COUNT] collisions les plus consommatrices
+
+
+ Score
+
+
+ Aucun résultat.
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_tos.xml b/indra/newview/skins/default/xui/fr/floater_tos.xml
index 83e0a2aab..b77838d92 100644
--- a/indra/newview/skins/default/xui/fr/floater_tos.xml
+++ b/indra/newview/skins/default/xui/fr/floater_tos.xml
@@ -1,27 +1,27 @@
-
-
-
-
-
-
- Je n'accepte pas les Conditions Générales d'Utilisation
-
-
- J'accepte les Conditions Générales d'Utilisation
-
-
-
- Acceptation des Conditions Générales d'Utilisation
-
-
-
- Veuillez lire attentivement les Conditions d'utilisation suivantes. Pour continuer à utiliser
-Second Life, vous devez accepter ces conditions.
-
-
- TOS_TEXT
-
-
- http://secondlife.com/app/tos/
-
-
+
+
+
+
+
+
+ Je n'accepte pas les Conditions Générales d'Utilisation
+
+
+ J'accepte les Conditions Générales d'Utilisation
+
+
+
+ Acceptation des Conditions Générales d'Utilisation
+
+
+
+ Veuillez lire attentivement les Conditions d'utilisation suivantes. Pour continuer à utiliser
+Second Life, vous devez accepter ces conditions.
+
+
+ TOS_TEXT
+
+
+ http://secondlife.com/app/tos/
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_url_entry.xml b/indra/newview/skins/default/xui/fr/floater_url_entry.xml
index fce1f483c..6a9073169 100644
--- a/indra/newview/skins/default/xui/fr/floater_url_entry.xml
+++ b/indra/newview/skins/default/xui/fr/floater_url_entry.xml
@@ -1,13 +1,13 @@
-
-
-
- URL du média :
-
-
-
-
-
-
- Chargement...
-
-
+
+
+
+ URL du média :
+
+
+
+
+
+
+ Chargement...
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_voice_wizard.xml b/indra/newview/skins/default/xui/fr/floater_voice_wizard.xml
index 1e3a960a1..cd1e32f13 100644
--- a/indra/newview/skins/default/xui/fr/floater_voice_wizard.xml
+++ b/indra/newview/skins/default/xui/fr/floater_voice_wizard.xml
@@ -1,9 +1,9 @@
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_water.xml b/indra/newview/skins/default/xui/fr/floater_water.xml
index 9c4d7ad65..9b77c2450 100644
--- a/indra/newview/skins/default/xui/fr/floater_water.xml
+++ b/indra/newview/skins/default/xui/fr/floater_water.xml
@@ -1,89 +1,89 @@
-
-
-
- Préréglages eau :
-
-
-
-
-
-
-
- Couleur du brouillard
-dans l'eau
-
-
-
-
- Densité du brouillard
-
-
-
- Brouillard sous-marin
-
-
-
- Échelle des vaguelettes
-
-
-
- 1
-
-
- 2
-
-
- 3
-
-
- Échelle Fresnel
-
-
-
- Décalage Fresnel
-
-
-
- Réfraction au dessus
-
-
-
- Réfraction en dessous
-
-
-
- Multiplicateur de flou
-
-
-
-
-
- Direction grande vague
-
-
-
- X
-
-
- Y
-
-
- Direction petite vague
-
-
-
- X
-
-
- Y
-
-
- Normal Map
-
-
-
-
-
- Default:Glassy:Pond:Murky:Second Plague:SNAKE!!!:Valdez
-
-
+
+
+
+ Préréglages eau :
+
+
+
+
+
+
+
+ Couleur du brouillard
+dans l'eau
+
+
+
+
+ Densité du brouillard
+
+
+
+ Brouillard sous-marin
+
+
+
+ Échelle des vaguelettes
+
+
+
+ 1
+
+
+ 2
+
+
+ 3
+
+
+ Échelle Fresnel
+
+
+
+ Décalage Fresnel
+
+
+
+ Réfraction au dessus
+
+
+
+ Réfraction en dessous
+
+
+
+ Multiplicateur de flou
+
+
+
+
+
+ Direction grande vague
+
+
+
+ X
+
+
+ Y
+
+
+ Direction petite vague
+
+
+
+ X
+
+
+ Y
+
+
+ Normal Map
+
+
+
+
+
+ Default:Glassy:Pond:Murky:Second Plague:SNAKE!!!:Valdez
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_wearable_save_as.xml b/indra/newview/skins/default/xui/fr/floater_wearable_save_as.xml
index 8c279d872..a5bc87d95 100644
--- a/indra/newview/skins/default/xui/fr/floater_wearable_save_as.xml
+++ b/indra/newview/skins/default/xui/fr/floater_wearable_save_as.xml
@@ -1,11 +1,11 @@
-
-
-
-
-
- Enregistrer l'objet sous :
-
-
- Nouveau [DESC]
-
-
+
+
+
+
+
+ Enregistrer l'objet sous :
+
+
+ Nouveau [DESC]
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_windlight_options.xml b/indra/newview/skins/default/xui/fr/floater_windlight_options.xml
index 1aa6cd5a4..d1a62dc6b 100644
--- a/indra/newview/skins/default/xui/fr/floater_windlight_options.xml
+++ b/indra/newview/skins/default/xui/fr/floater_windlight_options.xml
@@ -1,190 +1,190 @@
-
-
-
- Préréglages ciel :
-
-
-
-
-
-
-
-
- Bleu de l'horizon
-
-
-
- R
-
-
- V
-
-
- B
-
-
- I
-
-
- Quantité de brume
-
-
-
- Densité du bleu
-
-
-
- R
-
-
- V
-
-
- B
-
-
- I
-
-
- Densité de la brume
-
-
-
- Multiplicateur de densité
-
-
-
- Multiplicateur de distance
-
-
-
- Altitude maximum
-
-
-
-
-
- Couleur soleil/lune
-
-
-
- R
-
-
- V
-
-
- B
-
-
- I
-
-
- Position soleil/lune
-
-
-
- Éclairage ambiant
-
-
-
- R
-
-
- V
-
-
- B
-
-
- I
-
-
- Angle du levant
-
-
-
- Rayonnement du soleil
-
-
-
-
-
- Gamma de la scène
-
-
-
- Éclat des étoiles
-
-
-
-
-
- Couleur des nuages
-
-
-
- R
-
-
- V
-
-
- B
-
-
- I
-
-
- Nuages XY/densité
-
-
-
- X
-
-
- Y
-
-
- D
-
-
- Couverture nuageuse
-
-
-
- Altitude des nuages
-
-
-
- Détails nuages (XY/densité)
-
-
-
- X
-
-
- Y
-
-
- D
-
-
- Direction et vitesse X
-
-
-
-
- Direction et vitesse Y
-
-
-
-
-
-
-
-
- A-12AM:A-12PM:A-3AM:A-3PM:A-4.30PM:A-6AM:A-6PM:A-9AM:A-9PM:Barcelona:Blizzard:Blue Midday:Coastal Afternoon:Coastal Sunset:Default:Desert Sunset:Fine Day:Fluffy Big Clouds:Foggy:Funky Funky:Funky Funky Funky:Gelatto:Ghost:Incongruent Truths:Midday 1:Midday 2:Midday 3:Midday 4:Night:Pirate:Purple:Sailor's Delight:Sheer Sensuality
-
-
+
+
+
+ Préréglages ciel :
+
+
+
+
+
+
+
+
+ Bleu de l'horizon
+
+
+
+ R
+
+
+ V
+
+
+ B
+
+
+ I
+
+
+ Quantité de brume
+
+
+
+ Densité du bleu
+
+
+
+ R
+
+
+ V
+
+
+ B
+
+
+ I
+
+
+ Densité de la brume
+
+
+
+ Multiplicateur de densité
+
+
+
+ Multiplicateur de distance
+
+
+
+ Altitude maximum
+
+
+
+
+
+ Couleur soleil/lune
+
+
+
+ R
+
+
+ V
+
+
+ B
+
+
+ I
+
+
+ Position soleil/lune
+
+
+
+ Éclairage ambiant
+
+
+
+ R
+
+
+ V
+
+
+ B
+
+
+ I
+
+
+ Angle du levant
+
+
+
+ Rayonnement du soleil
+
+
+
+
+
+ Gamma de la scène
+
+
+
+ Éclat des étoiles
+
+
+
+
+
+ Couleur des nuages
+
+
+
+ R
+
+
+ V
+
+
+ B
+
+
+ I
+
+
+ Nuages XY/densité
+
+
+
+ X
+
+
+ Y
+
+
+ D
+
+
+ Couverture nuageuse
+
+
+
+ Altitude des nuages
+
+
+
+ Détails nuages (XY/densité)
+
+
+
+ X
+
+
+ Y
+
+
+ D
+
+
+ Direction et vitesse X
+
+
+
+
+ Direction et vitesse Y
+
+
+
+
+
+
+
+
+ A-12AM:A-12PM:A-3AM:A-3PM:A-4.30PM:A-6AM:A-6PM:A-9AM:A-9PM:Barcelona:Blizzard:Blue Midday:Coastal Afternoon:Coastal Sunset:Default:Desert Sunset:Fine Day:Fluffy Big Clouds:Foggy:Funky Funky:Funky Funky Funky:Gelatto:Ghost:Incongruent Truths:Midday 1:Midday 2:Midday 3:Midday 4:Night:Pirate:Purple:Sailor's Delight:Sheer Sensuality
+
+
diff --git a/indra/newview/skins/default/xui/fr/floater_world_map.xml b/indra/newview/skins/default/xui/fr/floater_world_map.xml
index ab7a37005..0fe1e5375 100644
--- a/indra/newview/skins/default/xui/fr/floater_world_map.xml
+++ b/indra/newview/skins/default/xui/fr/floater_world_map.xml
@@ -1,72 +1,72 @@
-
-
-
-
-
- Vous
-
-
-
- Domicile
-
-
-
- Terrain aux enchères
-
-
-
- Terrain à vendre
-
-
-
-
-
-
-
-
-
-
-
- Événements :
-
-
-
-
-
-
-
-
-
-
- Amis connectés
-
-
-
-
-
- Repères
-
-
-
-
-
-
- Résultats de la recherche :
-
-
-
-
-
-
- Position :
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+ Vous
+
+
+
+ Domicile
+
+
+
+ Terrain aux enchères
+
+
+
+ Terrain à vendre
+
+
+
+
+
+
+
+
+
+
+
+ Événements :
+
+
+
+
+
+
+
+
+
+
+ Amis connectés
+
+
+
+
+
+ Repères
+
+
+
+
+
+
+ Résultats de la recherche :
+
+
+
+
+
+
+ Position :
+
+
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/fonts.xml b/indra/newview/skins/default/xui/fr/fonts.xml
index 021372d6f..cccb45b97 100644
--- a/indra/newview/skins/default/xui/fr/fonts.xml
+++ b/indra/newview/skins/default/xui/fr/fonts.xml
@@ -1,9 +1,9 @@
-
-
-
-
- timesbd.ttf
-
-
-
+
+
+
+
+ timesbd.ttf
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/menu_inventory.xml b/indra/newview/skins/default/xui/fr/menu_inventory.xml
index 8a902c97c..824bafe8c 100644
--- a/indra/newview/skins/default/xui/fr/menu_inventory.xml
+++ b/indra/newview/skins/default/xui/fr/menu_inventory.xml
@@ -1,79 +1,79 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/menu_login.xml b/indra/newview/skins/default/xui/fr/menu_login.xml
index c7257f660..0e40f7045 100644
--- a/indra/newview/skins/default/xui/fr/menu_login.xml
+++ b/indra/newview/skins/default/xui/fr/menu_login.xml
@@ -1,33 +1,33 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/menu_mini_map.xml b/indra/newview/skins/default/xui/fr/menu_mini_map.xml
index 8ce2419fc..d117e69eb 100644
--- a/indra/newview/skins/default/xui/fr/menu_mini_map.xml
+++ b/indra/newview/skins/default/xui/fr/menu_mini_map.xml
@@ -1,8 +1,8 @@
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/menu_pie_attachment.xml b/indra/newview/skins/default/xui/fr/menu_pie_attachment.xml
index a370d5154..21bc03146 100644
--- a/indra/newview/skins/default/xui/fr/menu_pie_attachment.xml
+++ b/indra/newview/skins/default/xui/fr/menu_pie_attachment.xml
@@ -1,15 +1,15 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/menu_pie_avatar.xml b/indra/newview/skins/default/xui/fr/menu_pie_avatar.xml
index 1dc821ce9..be0bac92b 100644
--- a/indra/newview/skins/default/xui/fr/menu_pie_avatar.xml
+++ b/indra/newview/skins/default/xui/fr/menu_pie_avatar.xml
@@ -1,18 +1,18 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/menu_pie_land.xml b/indra/newview/skins/default/xui/fr/menu_pie_land.xml
index 0cc74692e..798cea014 100644
--- a/indra/newview/skins/default/xui/fr/menu_pie_land.xml
+++ b/indra/newview/skins/default/xui/fr/menu_pie_land.xml
@@ -1,10 +1,10 @@
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/menu_pie_object.xml b/indra/newview/skins/default/xui/fr/menu_pie_object.xml
index 979c1fa35..0a2cdf953 100644
--- a/indra/newview/skins/default/xui/fr/menu_pie_object.xml
+++ b/indra/newview/skins/default/xui/fr/menu_pie_object.xml
@@ -1,103 +1,103 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/menu_pie_self.xml b/indra/newview/skins/default/xui/fr/menu_pie_self.xml
index 852db2eba..f1d662cc2 100644
--- a/indra/newview/skins/default/xui/fr/menu_pie_self.xml
+++ b/indra/newview/skins/default/xui/fr/menu_pie_self.xml
@@ -1,38 +1,38 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/menu_slurl.xml b/indra/newview/skins/default/xui/fr/menu_slurl.xml
index 296b1ae00..ebd042a38 100644
--- a/indra/newview/skins/default/xui/fr/menu_slurl.xml
+++ b/indra/newview/skins/default/xui/fr/menu_slurl.xml
@@ -1,6 +1,6 @@
-
-
-
-
-
-
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/menu_viewer.xml b/indra/newview/skins/default/xui/fr/menu_viewer.xml
index d99d12198..565a8ca5e 100644
--- a/indra/newview/skins/default/xui/fr/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/fr/menu_viewer.xml
@@ -1,264 +1,278 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/mime_types.xml b/indra/newview/skins/default/xui/fr/mime_types.xml
index 5b8b7ca2f..322887fb7 100644
--- a/indra/newview/skins/default/xui/fr/mime_types.xml
+++ b/indra/newview/skins/default/xui/fr/mime_types.xml
@@ -1,230 +1,230 @@
-
-
-
-
- Contenu web
-
-
- Cette parcelle propose du contenu multimédia
-
-
- Afficher le contenu web
-
-
-
-
- Film
-
-
- Vous pouvez jouer un film ici
-
-
- Jouer le film
-
-
-
-
- Aucun contenu
-
-
- Aucun média ici
-
-
-
-
- Image
-
-
- Cette parcelle contient une image
-
-
- Afficher l'image qui se trouve ici
-
-
-
-
- Audio
-
-
- Cette parcelle propose du contenu audio
-
-
- Jouer le contenu audio qui se trouve ici
-
-
-
-
- Flux en temps réel
-
-
-
-
- - Aucun -
-
-
-
-
- - Aucun -
-
-
-
-
- Audio
-
-
-
-
- Vidéo
-
-
-
-
- Image
-
-
-
-
- Film (Quicktime)
-
-
-
-
- Javascript
-
-
-
-
- Audio/Vidéo Ogg
-
-
-
-
- Document PDF
-
-
-
-
- Document Postscript
-
-
-
-
- Format RTF
-
-
-
-
- SMIL (Synchronized Multimedia Integration Language)
-
-
-
-
- Page web (XHTML)
-
-
-
-
- Macromedia Director
-
-
-
-
- Flash
-
-
-
-
- Audio (MIDI)
-
-
-
-
- Audio (MP3)
-
-
-
-
- Audio (AIFF)
-
-
-
-
- Audio (WAV)
-
-
-
-
- Image (BMP)
-
-
-
-
- Image (GIF)
-
-
-
-
- Image (JPEG)
-
-
-
-
- Image (PNG)
-
-
-
-
- Image (SVG)
-
-
-
-
- Image (TIFF)
-
-
-
-
- Page web
-
-
-
-
- Texte
-
-
-
-
- XML
-
-
-
-
- Film (MPEG)
-
-
-
-
- Film (MP4)
-
-
-
-
- Film (Quicktime)
-
-
-
-
- Film (Windows Media ASF)
-
-
-
-
- Film (Windows Media WMV)
-
-
-
-
- Film (AVI)
-
-
-
+
+
+
+
+ Contenu web
+
+
+ Cette parcelle propose du contenu multimédia
+
+
+ Afficher le contenu web
+
+
+
+
+ Film
+
+
+ Vous pouvez jouer un film ici
+
+
+ Jouer le film
+
+
+
+
+ Aucun contenu
+
+
+ Aucun média ici
+
+
+
+
+ Image
+
+
+ Cette parcelle contient une image
+
+
+ Afficher l'image qui se trouve ici
+
+
+
+
+ Audio
+
+
+ Cette parcelle propose du contenu audio
+
+
+ Jouer le contenu audio qui se trouve ici
+
+
+
+
+ Flux en temps réel
+
+
+
+
+ - Aucun -
+
+
+
+
+ - Aucun -
+
+
+
+
+ Audio
+
+
+
+
+ Vidéo
+
+
+
+
+ Image
+
+
+
+
+ Film (Quicktime)
+
+
+
+
+ Javascript
+
+
+
+
+ Audio/Vidéo Ogg
+
+
+
+
+ Document PDF
+
+
+
+
+ Document Postscript
+
+
+
+
+ Format RTF
+
+
+
+
+ SMIL (Synchronized Multimedia Integration Language)
+
+
+
+
+ Page web (XHTML)
+
+
+
+
+ Macromedia Director
+
+
+
+
+ Flash
+
+
+
+
+ Audio (MIDI)
+
+
+
+
+ Audio (MP3)
+
+
+
+
+ Audio (AIFF)
+
+
+
+
+ Audio (WAV)
+
+
+
+
+ Image (BMP)
+
+
+
+
+ Image (GIF)
+
+
+
+
+ Image (JPEG)
+
+
+
+
+ Image (PNG)
+
+
+
+
+ Image (SVG)
+
+
+
+
+ Image (TIFF)
+
+
+
+
+ Page web
+
+
+
+
+ Texte
+
+
+
+
+ XML
+
+
+
+
+ Film (MPEG)
+
+
+
+
+ Film (MP4)
+
+
+
+
+ Film (Quicktime)
+
+
+
+
+ Film (Windows Media ASF)
+
+
+
+
+ Film (Windows Media WMV)
+
+
+
+
+ Film (AVI)
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/notifications.xml b/indra/newview/skins/default/xui/fr/notifications.xml
index 8d70ff95b..49e91acaf 100644
--- a/indra/newview/skins/default/xui/fr/notifications.xml
+++ b/indra/newview/skins/default/xui/fr/notifications.xml
@@ -1,3019 +1,3009 @@
-
-
-
- Ne plus afficher
-
-
- Toujours choisir cette option
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Votre version de [APP_NAME] ne peut afficher ce message de notification. Veuillez vous assurer que vous avez bien la toute dernière version du client.
-
-Détails de l'erreur : La notification, appelée '[_NAME]', est introuvable dans notifications.xml.
-
-
-
- Erreur floater : impossible de trouver les contrôles suivants :
-
-[CONTROLS]
-
-
-
- Aucun didacticiel n'est disponible actuellement.
-
-
-
- [MESSAGE]
-
-
- [MESSAGE]
-
-
-
- Une erreur est survenue lors de la mise à jour de [APP_NAME]. Veuillez télécharger la dernière version depuis SingularityViewer.org.
-
-
-
- Erreur réseau : impossible d'établir une connexion à [SECOND_LIFE_GRID].
-'[DIAGNOSTIC]'
-Veuillez vérifier votre connexion.
-
-
-
- Le modèle de message [PATH] est introuvable.
-
-
-
- Enregistrer les changements dans la partie du corps/les habits actuels ?
-
-
-
- Une erreur est survenue lors du chargement du texte pour un script, suite au problème suivant : [REASON]. Veuillez réessayer ultérieurement.
-
-
- Une erreur est survenue lors du chargement du script compilé, suite au problème suivant : [REASON]. Veuillez réessayer ultérieurement.
-
-
- Une erreur est survenue lors de l'écriture des données d'animation. Veuillez réessayer ultérieurement.
-
-
- Un problème est survenu lors du chargement du script compilé, suite au problème suivant : [REASON]
-
-
- Impossible d'afficher les contenus de plus d'un objet à la fois.
-Veuillez ne sélectionner qu'un seul objet.
-
-
- Enregistrer tous les changements dans les habits/parties du corps ?
-
-
-
- Lorsque vous accordez des droits d'édition à un autre résident, vous lui permettez de changer, supprimer ou prendre n'importe lequel de vos objets dans le Monde. Réfléchissez bien avant d'accorder ces droits.
-Souhaitez-vous accorder des droits d'édition à [NAME] ?
-
-
-
- Lorsque vous accordez des droits d'édition à un autre résident, vous lui permettez de changer n'importe lequel de vos objets dans le Monde. Réfléchissez bien avant d'accorder ces droits.
-Souhaitez-vous accorder des droits d'édition aux résidents selectionnés ?
-
-
-
- Souhaitez-vous retirer les droits d'édition à [NAME] ?
-
-
-
- Souhaitez-vous retirer les droits d'édition aux résidents selectionnés ?
-
-
-
- Impossible de créer le groupe.
-[MESSAGE]
-
-
-
- [NEEDS_APPLY_MESSAGE]
-[WANT_APPLY_MESSAGE]
-
-
-
- Pour envoyer une notice au groupe, vous devez indiquer un sujet.
-
-
-
- Vous êtes sur le point d'ajouter des membres du groupe dans le rôle de [ROLE_NAME].
-Les membres ne peuvent pas être destitués de ce rôle.
-Ils doivent donner eux-mêmes leur démission.
-Êtes-vous certain de vouloir continuer ?
-
-
-
- Vous êtes sur le point d'ajouter le pouvoir « [ACTION_NAME] » au rôle « [ROLE_NAME] ».
- *Avertissement*
- Tout membre disposant de ce pouvoir peut s'affecter lui-même, ainsi que tout autre membre, à des rôles disposant de pouvoirs plus importants, et accéder potentiellement à des pouvoirs proches de ceux d'un propriétaire. Assurez-vous de bien comprendre ce que vous faites avant d'attribuer ce pouvoir.
-
-Ajouter ce pouvoir à « [ROLE_NAME] » ?
-
-
-
- Vous êtes sur le point d'ajouter le pouvoir « [ACTION_NAME] » au rôle « [ROLE_NAME] ».
-
- *Avertissement*
- Tout membre dans un rôle avec ce pouvoir peut s'attribuer à lui-même, ainsi qu'à tout autre membre, Tous les pouvoirs, et accéder potentiellement à des pouvoirs proches de ceux d'un propriétaire.
-
-Ajouter ce pouvoir à « [ROLE_NAME] » ?
-
-
-
- Sélectionner l'option Afficher dans la recherche
-En cochant cette case, votre parcelle apparaîtra :
-- dans les résultats de recherche ;
-- dans les objets publics ;
-- dans la recherche web.
-
-
- La musique et le média ne peuvent être utilisés que sur cette parcelle. Les options Son et Voix peuvent être limités à la parcelle ou seront entendus par les résidents en dehors de la parcelle, en fonction de leur catégorie d'accès. Souhaitez-vous en savoir plus sur le paramétrage de ces options ?
-
- http://wiki.secondlife.com/wiki/M%C3%A9dias_sur_la_parcelle_(KB)
-
-
-
-
- Les résultats de recherche sont organisés en fonction de l'onglet dans lequel vous vous trouvez, votre catégorie d'accès, la catégorie choisie, ainsi que d'autres facteurs. Pour plus de détails, veuillez consulter les pages d'aide.
-
- http://wiki.secondlife.com/wiki/FAQ_sur_la_recherche_(KB)
-
-
-
-
- Cette parcelle ne peut pas apparaître dans la recherche car elle est dans une région où cela n'est pas autorisé.
-
-
- Si vous sélectionnez Afficher dans la recherche :
-- votre profil apparaîtra dans les résultats de recherche ;
-- un lien vers votre profil apparaîtra dans les pages de groupe publiques.
-
-
- Vous pouvez proposer à un autre résident de devenir votre partenaire ou dissoudre un partenariat existant à partir du site de [SECOND_LIFE].
-
-Aller sur le site de Second Life pour avoir plus d'informations sur les partenariats ?
-
-
-
- Il est possible que vos droits par défaut ne fonctionnent pas dans les anciennes régions.
-
-
- Si ce résident a défini une URL de profil web, vous pouvez :
- * Cliquer sur Charger pour afficher la page dans cet onglet ;
- * Cliquer sur Charger > Dans un navigateur externe, pour afficher la page dans votre navigateur par défaut ;
- * Cliquer sur Charger > URL du domicile, pour retourner au profil web du résident.
-
-Lorsque vous êtes dans votre propre profil, vous pouvez définir n'importe quelle URL comme profil web. Pour cela, saisissez l'URL et cliquez sur OK.
-Les autres résidents peuvent visiter l'URL que vous avez définie en regardant votre profil.
-
-
- Rejoindre ce groupe coûte [COST] L$.
-Voulez-vous continuer ?
-
-
-
- Rejoindre ce groupe coûte [COST] L$.
-Vous n'avez pas suffisamment de L$ pour rejoindre ce groupe.
-
-
- Pour [COST] L$ vous pouvez pénétrer sur ce terrain ([PARCEL_NAME]) et y rester [TIME] heures. Acheter un pass ?
-
-
-
- Pour rendre l'annonce disponible à tous, le prix de vente doit être supérieur à 0 L$.
-Si le prix de vente est de 0 L$, vous devez choisir un acheteur spécifique.
-
-
- Le terrain sélectionné, de [LAND_SIZE] m², est mis en vente.
-Votre prix de vente sera de [SALE_PRICE] L$ et la vente sera disponible à [NAME].
-
-
-
- Attention : en cliquant sur Vendre à n'importe qui, vous rendez votre terrain disponible à toute la communauté de Second Life, même aux personnes qui ne sont pas dans cette région.
-
-Le terrain sélectionné, de [LAND_SIZE] m², est mis en vente.
-Votre prix de vente sera de [SALE_PRICE] L$ et la vente sera disponible à [NAME].
-
-
-
- Êtes-vous certain de vouloir renvoyer tous les objets partagés par le groupe [NAME] sur cette parcelle dans l'inventaire du propriétaire précédent ?
-
-*Avertissement* Tous les objets non transférables cédés au groupe seront supprimés !
-
-Objets : [N]
-
-
-
- Etes-vous certain de vouloir renvoyer tous les objets que [NAME] possède sur cette parcelle dans son inventaire ?
-
-Objets : [N]
-
-
-
- Êtes-vous certain de vouloir renvoyer tous les objets que vous possédez sur cette parcelle dans votre inventaire ?
-
-Objets : [N]
-
-
-
- Êtes-vous certain de vouloir renvoyer tous les objets que vous ne possédez pas sur cette parcelle dans l'inventaire de leur propriétaire ?
-Les objets transférables cédés à un groupe seront renvoyés aux propriétaires précédents.
-
-*Avertissement* Tous les objets non transférables cédés au groupe seront supprimés !
-
-Objets : [N]
-
-
-
- Êtes-vous certain de vouloir renvoyer tous les objets que [NAME] ne possède pas sur cette parcelle dans l'inventaire de leur propriétaire ?
-Les objets transférables cédés à un groupe seront renvoyés aux propriétaires précédents.
-
-*Avertissement* Tous les objets non transférables cédés au groupe seront supprimés !
-
-Objets : [N]
-
-
-
- Êtes-vous certain de vouloir renvoyer tous les objets de la liste dans l'inventaire de leur propriétaire ?
-
-
-
- Êtes-vous certain de vouloir désactiver tous les objets dans cette région ?
-
-
-
- Renvoyer les objets de cette parcelle qui ne sont pas partagés avec le groupe [NAME] à leur propriétaire ?
-
-Objets : [N]
-
-
-
- Impossible de désactiver les scripts.
-Les dégâts sont autorisés dans toute la région.
-Pour que les armes fonctionnent, les scripts doivent être autorisés.
-
-
- Pour définir le point d'atterrissage, vous devez vous trouver à l'intérieur de la parcelle.
-
-
- Veuillez saisir une adresse e-mail valide pour le(s) destinataire(s).
-
-
- Veuillez saisir votre adresse e-mail.
-
-
- Envoyer la photo avec le sujet ou le message par défaut ?
-
-
-
- Erreur dans le traitement des données de la photo
-
-
- Erreur d'encodage de la photo.
-
-
- Une erreur est survenue lors du chargement du script compilé, suite au problème suivant : [REASON]
-
-
- Une erreur est survenue lors du chargement de la capture d'écran destinée au rapport, suite au problème suivant : [REASON]
-
-
- Pour vous connecter à [SECOND_LIFE], vous devez accepter les Conditions d'utilisation.
-
-
- Impossible de mettre cet ensemble.
-Ce dossier ne contient pas d'habits, de parties du corps ni de pièces jointes.
-
-
- Vous ne pouvez pas porter d'habits ni de parties du corps se trouvant dans la corbeille.
-
-
- Vous ne pouvez pas porter cet article car il n'a pas encore été chargé. Veuillez réessayer dans une minute.
-
-
- Oups! Vous avez oublié de fournir certaines informations.
-Vous devez saisir le nom et le prénom de votre avatar.
-
-Pour entrer dans [SECOND_LIFE], vous devez avoir un compte. Voulez-vous en créer un maintenant ?
-
-
-
- Les petites annonces sont publiées à l'onglet Petites annonces de la section Recherche pendant une semaine.
-Rédigez votre annonce, puis cliquez sur Publier pour l'ajouter à la liste des annonces.
-Au moment de cliquer sur Publier, vous serez invité à payer des frais.
-Plus vous payez cher, plus votre annonce est visible dans la liste ainsi que dans les résultats de recherche de mots-clés.
-
-
-
- Supprimer l'annonce [NAME] ?
-Une fois payés, les frais ne sont pas remboursables.
-
-
-
- Enregistrer les changements dans l'annonce [NAME]Â ?
-
-
-
- Supprimer le favori [PICK] ?
-
-
-
- Aller à la page web de [SECOND_LIFE] réservée aux événements ?
-
-
-
- Veuillez sélectionner une proposition.
-
-
- Veuillez sélectionner un historique.
-
-
- Souhaitez-vous réactiver tous les pop-ups que vous aviez désactivés ?
-
-
-
- Voulez-vous désactiver tous les pop-ups qui peuvent être évités ?
-
-
-
- Le cache sera vidé après le redémarrage de [SECOND_LIFE].
-
-
- Le cache sera déplacé après le redémarrage de [SECOND_LIFE].
-Remarque : cela videra le cache.
-
-
- Les paramètres du port prendront effet après le redémarrage de [SECOND_LIFE].
-
-
- Le nouveau thème apparaîtra après le redémarrage de [SECOND_LIFE].
-
-
- Aller à la page web de [SECOND_LIFE] pour voir le détail des enchères ou enchérir ?
-
-
-
- Enregistrer les changements ?
-
-
-
- L'enregistrement du geste a échoué.
-Il y a trop d'étapes dans ce geste.
-Essayez d'en supprimer quelques-unes.
-
-
- L'enregistrement du geste a échoué. Veuillez réessayer dans une minute.
-
-
- Le geste n'a pas pu être enregistré car l'objet ou l'inventaire de l'objet associé n'a pas été trouvé.
-L'objet est peut-être inaccessible ou a peut-être été supprimé.
-
-
- Une erreur est survenue lors de l'enregistrement du geste, suite au problème suivant : [REASON]. Essayez d'enregistrer votre geste ultérieurement.
-
-
- La note n'a pas pu être enregistrée car l'objet ou l'inventaire de l'objet associé n'a pas été trouvé.
-L'objet est peut-être inaccessible ou a peut-être été supprimé.
-
-
- Une erreur est survenue lors de l'enregistrement de la note, suite au problème suivant : [REASON]. Essayez d'enregistrer votre note ultérieurement.
-
-
- Impossible d'annuler tous les changements dans votre version du script.
-Souhaitez-vous charger la dernière version enregistrée sur le serveur ?
-(**Attention** Cette opération est irréversible.)
-
-
-
- Une erreur est survenue lors de l'enregistrement du script, suite au problème suivant : [REASON]. Essayez d'enregistrer votre script ultérieurement.
-
-
- Impossible d'enregistrer le script car l'objet qui le contient est introuvable.
-L'objet est peut-être inaccessible ou a peut-être été supprimé.
-
-
- Une erreur est survenue lors de l'enregistrement du script compilé, suite au problème suivant : [REASON]. Essayez d'enregistrer votre script ultérieurement.
-
-
- Impossible de lancer ou d'arrêter le script car l'objet qui le contient est introuvable.
-L'objet est peut-être inaccessible ou a peut-être été supprimé.
-
-
- Impossible de télécharger le fichier
-
-
- Impossible d'écrire le fichier [[FILE]]
-
-
- Avertissement : vous n'avez pas la configuration système requise pour utiliser Second Life. Si vous continuez à utiliser Second Life, votre performance risque d'être moindre. Malheureusement, nous n'offrons aucune assistance pour les problèmes de configuration système.
-
-MINSPECS
-Voulez-vous visiter [_URL] pour plus d'informations ?
-
- http://secondlife.com/support/sysreqs.php?lang=fr
-
-
-
-
- Votre système contient une carte graphique que nous ne connaissons pas actuellement.
-Cela est souvent le cas avec le nouveau materiel qui n'a pas encore été testé.
-Vous pourrez probablement utiliser Second Life sans problème, mais vous devrez peut-être ajuster les paramètres de vos graphiques.
-(Menu Édition > Préférences > Graphiques).
-
-
-
- [SECOND_LIFE] a planté lors de l'initialisation des drivers graphiques.
-La qualité des graphiques sera paramétrée sur Faible pour éviter certaines erreurs de driver fréquentes.
-Certaines fonctionnalités graphiques seront donc désactivées.
-Nous vous recommandons de mettre à jour les drivers de votre carte graphique.
-La qualité des graphiques peut être augmentée à la section Préférences > Graphiques
-
-
- Le terraformage est interdit dans la région [REGION].
-
-
- Vous n'êtes pas autorisé à copier les articles suivants :
-[ITEMS].
-Ceux-ci disparaîtront donc de votre inventaire si vous les donnez. Voulez-vous vraiment offrir ces articles ?
-
-
-
- Impossible de donner l'objet de l'inventaire.
-
-
- Transaction annulée.
-
-
- Impossible de donner plus de 42 objets au cours d'un seul transfert d'inventaire.
-
-
- Vous n'êtes pas autorisé à transférer les objets sélectionnés.
-
-
- Vous n'êtes pas autorisé à copier [COUNT] des objets sélectionnés. Ces objets disparaîtront de votre inventaire.
-Souhaitez-vous vraiment donner ces objets ?
-
-
-
- Vous n'êtes pas autorisé à transférer le dossier sélectionné.
-
-
- Geler cet avatar ?
-Il ou elle ne pourra temporairement plus bouger, chatter, ou interagir dans le Monde.
-
-
-
- Geler [AVATAR_NAME] ?
-Il ou elle ne pourra temporairement plus bouger, chatter, ou interagir dans le Monde.
-
-
-
- Expulser [AVATAR_NAME] de votre terrain ?
-
-
-
- Expulser cet avatar de votre terrain ?
-
-
-
- Expulser [AVATAR_NAME] de votre terrain ?
-
-
-
- Erreur d'acquisition : trop d'objets sélectionnés.
-
-
- Erreur d'acquisition : les objets sont répartis dans plus d'une région.
-Veuillez mettre tous les objets que vous souhaitez acquérir dans la même région.
-
-
- [EXTRA]
-
-Aller sur [URL] pour obtenir des informations sur l'achat de devises ?
-
-
-
- Impossible de lier ces [COUNT] objets.
-Vous pouvez lier un maximum de [MAX] objets.
-
-
- Vous ne pouvez lier que des ensembles d'objets complets et vous devez choisir un minimum de deux objets.
-
-
- Impossible de lier car vous n'avez pas le droit de modifier tous les objets.
-
-Assurez-vous que vous êtes le propriétaire de tous les objets et qu'aucun d'eux n'est verrouillé.
-
-
- Impossible de lier car les objets n'ont pas tous le même propriétaire.
-
-Assurez-vous que vous êtes le propriétaire de tous les objets sélectionnés.
-
-
- Pas d'extension pour le fichier suivant : '[FILE]'
-
-Assurez-vous que le fichier a l'extension correcte.
-
-
- Extension de fichier [EXTENSION] invalide
-[VALIDS] attendu
-
-
-
- Impossible de lire le fichier son chargé :
-[FILE]
-
-
- Il semble que le fichier ne soit pas un fichier RIFF WAVEÂ :
-[FILE]
-
-
- Il semble que le fichier ne soit pas un fichier audio PCM WAVEÂ :
-[FILE]
-
-
- Le fichier contient un nombre de canaux invalide (doit être mono ou stéréo) :
-[FILE]
-
-
- Le fichier ne semble pas être pris en charge (doit être 44,1 k) :
-[FILE]
-
-
- Le fichier ne semble pas être pris en charge (doit faire 8 ou 16 bit) :
-[FILE]
-
-
- Impossible de trouver les données dans l'en-tête WAV :
-[FILE]
-
-
- Taille de fragment incorrecte dans le fichier WAVÂ :
-[FILE]
-
-
- Le fichier audio est trop long (10 secondes maximum) :
-[FILE]
-
-
- Problème avec le fichier [FILE] :
-
-[ERROR]
-
-
- Impossible d'ouvrir le fichier son compressé temporaire : [FILE]
-
-
- Échec d'encodage Vorbis inconnu sur : [FILE]
-
-
- Impossible d'encoder le fichier : [FILE]
-
-
- Fichier ressource corrompu : [FILE]
-
-
- Version de fichier ressource Linden inconnu : [FILE]
-
-
- Impossible de créer le fichier de sortie : [FILE]
-
-
- Actuellement, [APP_NAME] ne prend pas en charge le chargement de lots de fichiers d'animation.
-
-
- Impossible de charger [FILE] suite au problème suivant : [REASON]
-Veuillez réessayer ultérieurement.
-
-
- Vous ne pouvez pas créer de repère ici car le propriétaire du terrain ne l'autorise pas.
-
-
- Impossible d'effectuer les recompilations.
-Sélectionnez un objet avec un script.
-
-
- Impossible d'effectuer les recompilations.
-
-Sélectionnez des objets qui ont des scripts et que vous pouvez modifier.
-
-
- Impossible d'effectuer la réinitialisation.
-
-Veuillez sélectionner des objets avec des scripts.
-
-
- Impossible d'effectuer la réinitialisation.
-
-Sélectionnez des objets qui ont des scripts et que vous pouvez modifier.
-
-
- Impossible de définir les scripts sur « exécution ».
-
-Veuillez sélectionner des objets avec des scripts.
-
-
- Impossible de définir les scripts sur « non-exécution ».
-
-Veuillez sélectionner des objets avec des scripts.
-
-
- Aucun floater frontmost à sauvegarder.
-
-
- Votre requête a été modifiée et les mots trops courts ont été supprimés.
-
-Recherche effectuée : [FINALQUERY]
-
-
- Vos termes de recherche étaient trop courts et aucune recherche n'a été effectuée.
-
-
- Impossible de téléporter.
-[REASON]
-
-
- Nous avons rencontré des problèmes en essayant de vous téléporter. Vous devrez peut-être vous reconnecter avant de pouvoir être téléporté. Si vous continuez à recevoir ce message, veuillez consulter le Support à  la page suivante :
-www.secondlife.com/support
-
-
- Nous avons rencontré des problèmes en essayant de vous téléporter. Vous devrez peut-être vous reconnecter avant de pouvoir être téléporté. Si vous continuez à recevoir ce message, veuillez consulter le Support à  la page suivante :
-www.secondlife.com/support
-
-
- Désolé, la téléportation est bloquée actuellement. Veuillez réessayer dans un moment.
-Si vous ne parvenez toujours pas à être téléporté, déconnectez-vous puis reconnectez-vous pour résoudre le problème.
-
-
- Désolé, le système n'a pas réussi à localiser la destination de votre repère.
-
-
- Désolé, la connexion vers votre lieu de téléportation n'a pas abouti.
-Veuillez réessayer dans un moment.
-
-
- Désolé, vous n'avez pas accès à cette destination.
-
-
- Vos pieces-jointes ne sont pas encore arrivées. Attendez quelques secondes de plus ou déconnectez-vous puis reconnectez-vous avant d'essayer de vous téléporter.
-
-
- Le trafic vers cette région est bouché en ce moment. Votre téléportation ne pourra pas avoir lieu immédiatement. Veuillez réessayer dans quelques minutes ou bien aller dans une zone moins fréquentée.
-
-
- Désolé, votre demande de téléportation n'a pas abouti assez rapidement. Veuillez réessayer dans quelques minutes.
-
-
- Désolé, votre demande pour passer dans une autre région n'a pas abouti assez rapidement. Veuillez réessayer dans quelques minutes.
-
-
- Impossible de trouver la destination de la téléportation. Il est possible que cette destination soit temporairement indisponible ou qu'elle n'existe plus. Veuillez réessayer dans quelques minutes.
-
-
- L'inventaire est temporairement indisponible.
-
-
- Impossible de définir le propriétaire foncier :
-aucune parcelle sélectionnée.
-
-
- Impossible de définir un propriétaire car la sélection couvre plusieurs régions. Veuillez sélectionner une zone plus petite et réessayer.
-
-
- Cette parcelle est mise aux enchères. Définir un propriétaire annulerait les enchères, ce qui pourrait être gênant pour certains résidents si ces dernières ont commencé. Souhaitez-vous définir un propriétaire ?
-
-
-
- Problème :
-Aucune parcelle sélectionnée.
-
-
- Problème :
-Aucune région sélectionnée.
-
-
- Impossible d'abandonner le terrain :
-aucune parcelle sélectionnée.
-
-
- Impossible d'abandonner le terrain :
-la région est introuvable.
-
-
- Impossible d'acheter le terrain :
-aucune parcelle sélectionnée.
-
-
- Impossible d'acheter le terrain :
-la région dans laquelle il est situé est introuvable.
-
-
- Vous ne pouvez pas fermer la fenêtre Acheter le terrain avant que Second Life n'estime le montant de cette transaction.
-
-
- Cession du terrain impossible :
-aucune parcelle sélectionnée.
-
-
- Cession du terrain impossible :
-aucun groupe sélectionné.
-
-
- Cession du terrain impossible :
-la région dans laquelle il est situé est introuvable.
-Veuillez utiliser Aide > Signaler des bugs pour signaler le problème.
-
-
- Cession du terrain impossible :
-plusieurs parcelles sélectionnées.
-
-Essayez de ne sélectionner qu'une seule parcelle.
-
-
- Cette parcelle propose des flux média.
-Pour jouer des flux média, il faut avoir une connexion internet rapide.
-
-Jouer les flux média lorsqu'ils sont disponibles ?
-(Vous pourrez modifier cette option ultérieurement sous Préférences > Audio et vidéo.)
-
-
-
- Cession du terrain impossible :
-rapport de propriété sur le point d'être envoyé par le serveur.
-
-Merci de réessayer.
-
-
- Cession du terrain impossible :
-la cession de terrain est interdite dans la région [REGION].
-
-
- Impossible d'abandonner le terrain :
-mise à jour des informations sur la parcelle sur le point d'être envoyée par le serveur.
-
-Veuillez réessayer dans quelques secondes.
-
-
- Impossible d'abandonner le terrain :
-vous n'êtes pas le propriétaire des parcelles sélectionnées.
-
-Veuillez sélectionner une seule parcelle.
-
-
- Impossible d'abandonner le terrain :
-vous n'avez pas le droit de libérer cette parcelle.
-Les parcelles qui vous appartiennent sont en vert.
-
-
- Impossible d'abandonner le terrain :
-la région dans laquelle il est situé est introuvable.
-
-Veuillez utiliser Aide > Signaler un bug pour signaler le problème.
-
-
- Impossible d'abandonner le terrain :
-le transfert de terrain est interdit dans la région [REGION].
-
-
- Impossible d'abandonner le terrain :
-vous devez sélectionner une parcelle entière pour la libérer.
-
-Sélectionnez toute la parcelle ou divisez-la d'abord.
-
-
- Vous vous apprêtez à libérer [AREA] m² de terrain.
-Si vous libérez cette parcelle, elle sera supprimée de votre patrimoine, mais vous ne recevrez pas de L$.
-
-Libérer ce terrain ?
-
-
-
- Division du terrain impossible :
-
-aucune parcelle sélectionnée.
-
-
- Division du terrain impossible :
-
-Toute la parcelle est sélectionnée.
-Sélectionnez une partie de la parcelle uniquement.
-
-
- Si vous divisez ce terrain, cette parcelle sera partagée en deux et chaque parcelle pourra avoir ses propres paramètres. Après cette opération, certains paramètres reviendront aux paramètres par défaut.
-
-Diviser le terrain ?
-
-
-
- Division du terrain impossible :
-la région dans laquelle il est situé est introuvable.
-
-Veuillez utiliser Aide > Signaler un bug pour signaler le problème.
-
-
- Impossible de fusionner le terrain :
-la région dans laquelle il est situé est introuvable.
-
-Veuillez utiliser Aide > Signaler un bug pour signaler le problème.
-
-
- Impossible de fusionner le terrain :
-aucune parcelle sélectionnée.
-
-
- Impossible de fusionner le terrain :
-vous avez sélectionné une seule parcelle.
-
-Sélectionnez le terrain sur les deux parcelles.
-
-
- Impossible de fusionner le terrain :
-vous devez sélectionner au moins deux parcelles.
-
-Sélectionnez le terrain sur les deux parcelles.
-
-
- En fusionnant ce terrain, vous créerez une grande parcelle composée de toutes les parcelles se trouvant dans le rectangle sélectionné.
-Vous devrez réinitialiser le nom et les options de la nouvelle parcelle.
-
-Fusionner le terrain ?
-
-
-
- Afficher les propriétaires :
-La couleur des parcelles indique le type de propriété.
-
-Vert = votre terrain
-Turquoise = le terrain de votre groupe
-Rouge = appartenant à d'autres
-Jaune = en vente
-Mauve = aux enchères
-Gris = public
-
-
- Cette note doit être sauvegardée avant que l'objet ne puisse être copié ou visualisé. Enregistrer la note ?
-
-
-
- Copier cet objet dans votre inventaire ?
-
-
-
- Échec du changement de résolution (à [RESX], de [RESY])
-
-
- Erreur : herbes non identifiées : [SPECIES]
-
-
- Erreur : arbres non identifiés : [SPECIES]
-
-
- Impossible de sauvegarder [NAME]. Pour pouvoir sauvegarder ce fichier, vous devez d'abord libérer de la mémoire sur votre ordinateur.
-
-
- Impossible de sauvegarder le fichier [NAME] dans la base de données centrale.
-Cette erreur est généralement temporaire. Veuillez éditer et sauvegarder l'élément endossable à nouveau d'ici quelques minutes.
-
-Si le problème persiste, veuillez cliquer sur Aide | Signaler un bug dans le menu déroulant en indiquant les détails de votre connexion.
-
-
- Vous avez été déconnecté(e) de [SECOND_LIFE] :
- [MESSAGE]
-Vous pouvez afficher vos messages instantanés et votre chat en cliquant sur Afficher IM et chat. Sinon, cliquez sur Quitter pour quitter immédiatement [SECOND_LIFE].
-
-
-
- Impossible d'acheter du terrain pour le groupe :
-Vous n'avez pas le droit d'acheter de terrain pour votre groupe.
-
-
- Vous pouvez suivre les déplacements de vos amis sur la carte et voir lorsqu'ils se connectent.
-
-Proposer à [NAME] de devenir votre ami(e) ?
-
-
-
- Vous pouvez suivre les déplacements de vos amis sur la carte et voir lorsqu'ils se connectent.
-
-Proposer à [NAME] de devenir votre ami(e) ?
-
-
-
- Voulez-vous supprimer [NAME] de votre liste d'amis ?
-
-
-
- Voulez-vous supprimer plusieurs résidents de votre liste d'amis ?
-
-
-
- Êtes-vous certain de vouloir supprimer tous les objets scriptés appartenant à ** [AVATAR_NAME] ** sur tous les terrains des autres résidents dans cette région ?
-
-
-
- Êtes-vous certain de vouloir supprimer tous les objets scriptés appartenant à ** [AVATAR_NAME] ** sur tous les terrains de cette région ?
-
-
-
- Êtes-vous certain de vouloir supprimer tous les objets (scriptés ou pas) appartenant à ** [AVATAR_NAME] ** sur tous les terrains de cette région ?
-
-
-
- Vous devez choisir un nom pour votre petite annonce.
-
-
- Le coût de l'annonce doit être de [MIN_PRICE] L$ minimum.
-
-Veuillez saisir un montant plus élevé.
-
-
- Au moins un des objets que vous avez sélectionnés est verrouillé.
-
-Êtes-vous certain de vouloir supprimer ces objets ?
-
-
-
- Au moins un des objets que vous avez sélectionnés n'est pas copiable.
-
-Êtes-vous certain de vouloir supprimer ces objets ?
-
-
-
- Au moins un des objets que vous avez sélectionnés ne vous appartient pas.
-
-Êtes-vous certain de vouloir supprimer ces objets ?
-
-
-
- Au moins un des objets est verrouillé.
-Au moins un des objets n'est pas copiable.
-
-Êtes-vous certain de vouloir supprimer ces objets ?
-
-
-
- Au moins un des objets est verrouillé.
-Au moins un des objets ne vous appartient pas.
-
-Êtes-vous certain de vouloir supprimer ces objets ?
-
-
-
- Au moins un des objets n'est pas copiable.
-Au moins un des objets ne vous appartient pas.
-
-Êtes-vous certain de vouloir supprimer ces objets ?
-
-
-
- Au moins un des objets est verrouillé.
-Au moins un des objets n'est pas copiable.
-Au moins un des objets ne vous appartient pas.
-
-Êtes-vous certain de vouloir supprimer ces objets ?
-
-
-
- Au moins un des objets est verrouillé.
-
-Êtes-vous certain de vouloir prendre ces objets ?
-
-
-
- Vous n'êtes pas le propriétaire de tous les objets que vous prenez.
-Si vous continuez, les droits accordés au prochain propriétaire seront activés et vous risquez de ne plus pouvoir modifier ou copier les objets.
-
-Êtes-vous certain de vouloir prendre ces objets ?
-
-
-
- Au moins un des objets est verrouillé.
-Vous n'êtes pas le propriétaire de tous les objets que vous prenez.
-Si vous continuez, les droits accordés au prochain propriétaire seront activés et vous risquez de ne plus pouvoir modifier ou copier les objets.
-Par contre, vous pouvez prendre les objets sélectionnés.
-
-Êtes-vous certain de vouloir prendre ces objets ?
-
-
-
- Impossible d'acheter le terrain car la sélection couvre plusieurs régions.
-
-Veuillez sélectionner une zone plus petite et réessayer.
-
-
- Si vous cédez ce terrain, le groupe devra avoir les moyens de le prendre en charge.
-Le prix de la vente du terrain n'est pas remboursé par le propriétaire. Si la parcelle que vous cédez se vend, le prix de la vente sera divisé en parts égales parmi les membres du groupe.
-
-Céder ces [AREA] m² de terrain au groupe [GROUP_NAME] ?
-
-
-
- Si vous cédez ce terrain, le groupe devra avoir les moyens de le prendre en charge.
-La cession incluera une contribution de terrain simultanée au groupe de [NAME].
-Le prix de la vente du terrain n'est pas remboursé par le propriétaire. Si la parcelle que vous cédez se vend, le prix de la vente sera divisé en parts égales parmi les membres du groupe.
-
-Céder ces [AREA] m² de terrain au groupe [GROUP_NAME] ?
-
-
-
- Les paramètres d'affichage sont au niveau le plus sûr, comme vous l'aviez indiqué.
-
-
- Vos paramètres d'affichage ont été réglés avec une marge de sécurité en fonction de votre configuration système.
-
-
- [ERROR_MESSAGE]
-
-
- L'emplacement [TYPE] n'est pas disponible actuellement. [HELP]
-Vous avez été déplacé dans une région voisine.
-
-
- Vos habits sont toujours en train d'être téléchargés.
-Vous pouvez utiliser [SECOND_LIFE] sans problème, les autres résidents vous voient normalement.
-
-
-
- L'installation de [SECOND_LIFE] est terminée.
-
-S'il s'agit de la première fois que vous utilisez [SECOND_LIFE], vous devrez créer un compte avant de pouvoir vous connecter.
-Retourner sur www.secondlife.com pour créer un nouveau compte ?
-
-
-
- Vous avez des problèmes à vous connecter. Il peut s'agir d'un problème avec votre connexion internet ou les serveurs de Second Life.
-
-Nous vous conseillons de vérifier votre connexion Internet et de réessayer dans quelques minutes, de cliquer sur Aide, ou bien de cliquer sur Téléporter pour être téléporté vers votre domicile.
-
-
-
- Votre personnage va apparaître dans un moment.
-
-Pour marcher, utilisez les flèches de direction.
-Appuyez sur F1 pour obtenir de l'aide ou en savoir plus sur [SECOND_LIFE].
-Choisissez un avatar homme ou femme.
-Vous pourrez revenir sur votre décision plus tard.
-
-
-
- [NAME] [PRICE] L$ Vous n'avez pas suffisamment de L$ pour faire cela.
-
-
- Vous avez reçu le droit de modifier les objets de [NAME].
-
-
- Vous n'avez plus le droit de modifier les objets de [NAME].
-
-
- Cela videra le cache cartographique de cette région.
-Cela n'est vraiment utile que pour faire du débugage.
-(En production, attendez 5 minutes. Les cartes seront mises à jour après reconnexion.)
-
-
-
- Impossible d'acheter plus d'un objet à la fois. Veuillez ne sélectionner qu'un seul objet.
-
-
- Impossible de copier les contenus de plus d'un objet à la fois.
-Veuillez ne sélectionner qu'un seul objet.
-
-
-
- Téléporter tous les résidents de cette région chez eux ?
-
-
-
- Etes-vous certain de vouloir renvoyer les objets appartenant à [USER_NAME] ?
-
-
-
- Impossible de definir les textures de la région :
-La texture du terrain [TEXTURE_NUM] a une profondeur invalide ([TEXTURE_BIT_DEPTH]).
-
-Remplacer la texture [TEXTURE_NUM] avec une image de 24 bits, 512 X 512, ou plus petite, puis cliquez à nouveau sur Appliquer.
-
-
- Impossible de definir les textures de la région :
-La texture du terrain [TEXTURE_NUM] est trop volumineuse ([TEXTURE_SIZE_X] X [TEXTURE_SIZE_Y]).
-
-Remplacer la texture [TEXTURE_NUM] avec une image de 24 bits, 512 X 512, ou plus petite, puis cliquez à nouveau sur Appliquer.
-
-
- Le chargement a commencé. Cela va prendre une à deux minutes,
-suivant votre vitesse de connexion.
-
-
- Etes-vous sûr(e) de vouloir figer le relief actuel, en faire le point central des limites d'élévation/abaissement de relief et la valeur par défaut du bouton Annuler modification ?
-
-
-
- Vous ne pouvez pas autoriser plus de [MAX_AGENTS] résidents.
-
-
- Vous ne pouvez pas bannir plus de [MAX_BANNED] résidents.
-
-
- Echec lors de la tentative d'ajout de [NUM_ADDED] agents :
-Dépasse la limite fixée à [MAX_AGENTS] [LIST_TYPE] de [NUM_EXCESS].
-
-
- Vous ne pouvez pas avoir plus que [MAX_GROUPS] groupes autorisés.
-
-
-
- Vous ne pouvez avoir que [MAX_MANAGER] gérants de domaine.
-
-
- Impossible d'ajouter le propriétaire du domaine à la liste des résidents bannis.
-
-
- Impossible de changer d'apparence jusqu'à ce que les habits et la silhouette soient chargés.
-
-
- Le nom de votre petite annonce doit commencer par un chiffre ou une lettre (A à Z). La ponctuation n'est pas autorisée.
-
-
- Cet objet n'est pas à vendre.
-Veuillez choisir un objet à vendre et réessayer.
-
-
- Chargement du fichier de terrain raw effectué vers :
-[DOWNLOAD_PATH].
-
-
- Une nouvelle version de [APP_NAME] est disponible.
-[MESSAGE]
-Pour utiliser [APP_NAME], vous devez télécharger cette mise à jour.
-
-
-
- Une mise à jour de [APP_NAME] est disponible.
-[MESSAGE]
-Cette mise à jour n'est pas requise mais si vous voulez une meilleure performance et plus de stabilité, nous vous recommandons de l'installer.
-
-
-
- Une mise à jour de [APP_NAME] est disponible.
-[MESSAGE]
-Cette mise à jour n'est pas requise mais si vous voulez une meilleure performance et plus de stabilité, nous vous recommandons de l'installer.
-
-
-
- Une nouvelle version de [APP_NAME] est disponible.
-[MESSAGE]
-Pour utiliser [APP_NAME], vous devez télécharger cette mise à jour.
-
-Télécharger vers le dossier Applications ?
-
-
-
- Une mise à jour de [APP_NAME] est disponible.
-[MESSAGE]
-Cette mise à jour n'est pas requise mais si vous voulez une meilleure performance et plus de stabilité, nous vous recommandons de l'installer.
-
-Télécharger vers le dossier Applications ?
-
-
-
- Une mise à jour de [APP_NAME] est disponible.
-[MESSAGE]
-Cette mise à jour n'est pas requise mais si vous voulez une meilleure performance et plus de stabilité, nous vous recommandons de l'installer.
-
-Télécharger vers le dossier Applications ?
-
-
-
- Si vous cédez cet objet, le groupe :
-* recevra les L$ versés pour l'objet ;
-
-
-
- Ouvrir votre navigateur web système pour afficher ce contenu ?
-
-
-
- Aller sur www.secondlife.com pour gérer votre compte ?
-
-
-
- Pour apprendre à signaler correctement des bugs, consultez le Wiki de [SECOND_LIFE].
-
-
-
- Pour apprendre à signaler un problème de sécurité, consultez le Wiki de [SECOND_LIFE].
-
-
-
- Consultez le Wiki sur l'Assurance Qualité de [SECOND_LIFE].
-
-
-
- Pour signaler des bugs et autres problèmes, utilisez le JIRA de [SECOND_LIFE].
-
-
-
- Pour apprendre à utiliser JIRA, consultez le Wiki de [SECOND_LIFE].
-
-
-
- Pour signaler des bugs et autres problèmes avec Singularity, utilisez le Google Issue Tracker.
-
-
-
- Visitez le blog officiel des Lindens pour les dernières nouvelles et informations.
-
-
-
- Consulter le Guide guide pour l'écriture de scripts pour obtenir de l'aide ?
-
-
-
- Consulter le Wiki LSL pour de l'aide sur les scripts ?
-
-
-
- Êtes-vous certain de vouloir renvoyer les objets sélectionnés à leur propriétaire ? Les objets donnés transférables seront renvoyés à leur ancien propriétaire.
-
-*Avertissement* Les objets non transférables seront supprimés !
-
-
-
- Vous êtes actuellement membre du groupe [GROUP].
-Quitter le groupe ?
-
-
-
- Souhaitez-vous vraiment éjecter tous les utilisateurs de la grille ?
-
-
-
- Désolé, vous ne pouvez pas ignorer un Linden.
-
-
-
- Vous ne pouvez pas démarrer des enchères sur une parcelle déjà en vente. Si vous êtes certain de vouloir démarrer des enchères, mettez fin à la vente.
-
-
- Vous ignorez déjà ce résident.
-
-
-
- Si vous supprimez des contenus, vous risquez d'endommager l'objet. Souhaitez-vous supprimer cet objet ?
-
-
-
- Impossible d'offrir une carte de visite actuellement. Veuillez réessayer dans un moment.
-
-
-
- Impossible de proposer votre amitié actuellement. Veuillez réessayer dans un moment.
-
-
-
- Mode occupé activé.
-Les chats et les messages instantanés ne s'afficheront pas. Vous répondrez aux messages instantanés en utilisant la réponse automatique que vous avez créée. Toutes les propositions de téléportation seront refusées. Tous objets envoyés iront dans la corbeille.
-
-
-
- Vous appartenez déjà à un nombre élevé de groupes et nous ne pouvez pas en rejoindre un nouveau. Avant de pouvoir rejoindre ce groupe, vous devez en quitter un ou refuser cette offre.
-Pour quitter un groupe, sélectionnez l'option Groupe dans le menu Éditer.
-[NAME] vous invite à rejoindre un groupe.
-[INVITE]
-
-
-
- Éjecter cet utilisateur avec quel message ?
-
-
-
- Éjecter tous les résidents actuellement en ligne avec quel message ?
-
-
-
- Geler cet utilisateur avec quel message ?
-
-
-
- Dégeler cet utilisateur avec quel message ?
-
-
-
- Proposez une téléportation avec le message suivant ?
-
-
-
- Demander au résident de venir vous rejoindre ?
-
-
-
- Êtes-vous certain de vouloir être téléporté ?
-
-
-
- Saisissez un message court qui sera envoyé à tous les résidents se trouvant actuellement sur votre domaine.
-
-
-
- Vous vous apprêtez à modifier un domaine appartenant aux Lindens (continent, zone réservée aux ados, orientation etc.).
-
-Cela est extrêmement délicat car l'expérience des résidents est en jeu. Sur le continent, cela modifiera des milliers de régions et sera difficile à digérer pour le serveur.
-
-Continuer ?
-
-
-
- Vous vous apprêtez à modifier la liste d'accès à un domaine appartenant aux Linden (continent, zone réservée aux ados, orientation etc.).
-
-Cette action est délicate et ne doit être effectuée que pour appeler le hack autorisant des objets/L$ à être transférés à l'intérieur/extérieur de la grille.
-Cette action modifiera des milliers de régions et sera difficile à digérer pour le serveur.
-
-
-
- Ajouter à la liste des résidents autorisés uniquement pour ce domaine ou pour [ALL_ESTATES] ?
-
-
-
- Supprimer de la liste des résidents autorisés uniquement pour ce domaine ou pour [ALL_ESTATES] ?
-
-
-
- Ajouter à la liste des groupes autorisés uniquement pour ce domaine ou pour [ALL_ESTATES] ?
-
-
-
- Supprimer de la liste des groupes autorisés uniquement pour ce domaine ou pour [ALL_ESTATES] ?
-
-
-
- Refuser l'accès à ce domaine uniquement ou à [ALL_ESTATES] ?
-
-
-
- Supprimer ce résident de la liste des résidents bannis pour ce domaine uniquement ou pour [ALL_ESTATES] ?
-
-
-
- Ajouter un gérant de domaine pour ce domaine uniquement ou pour [ALL_ESTATES] ?
-
-
-
- Supprimer le gérant de domaine pour ce domaine uniquement ou pour [ALL_ESTATES] ?
-
-
-
- Éjecter [EVIL_USER] de ce domaine ?
-
-
-
- Êtes-vous certain de vouloir modifier le règlement du domaine ?
-
-
-
- Votre catégorie d'accès ne vous autorise pas à pénétrer dans cette région. Cela vient peut-être du fait qu'il manquait des informations pour valider votre âge.
-
-Vérifiez que vous avez la toute dernière version du client et consultez les pages d'aide pour savoir comment accéder aux zones ayant ce niveau d'accès.
-
-
-
- Votre catégorie d'accès ne vous permet pas de pénétrer dans cette région.
-
-Souhaitez-vous en savoir plus sur les différentes catégories d'accès ?
-
- http://wiki.secondlife.com/wiki/Pr%C3%A9sentation_des_cat%C3%A9gories_de_contenu_(KB)
-
-
-
-
- Votre catégorie d'accès ne vous permet pas de pénétrer dans cette région.
-
-
- Votre catégorie d'accès ne vous permet pas de pénétrer dans cette région.
-
-En cliquant sur Modifier les préférences, vous pourrez changer votre catégorie d'accès et pénétrer dans la région. À partir de maintenant, vous pouvez rechercher et accéder au contenu [REGIONMATURITY]. Vous pouvez modifier ce paramètre à partir du menu Édition > Préférences... > Général.
-
-
-
- Votre catégorie d'accès ne vous permet pas de réclamer cette région. Cela vient peut-être du fait qu'il manquait des informations pour valider votre âge.
-
-Vérifiez que vous avez la toute dernière version du client et consultez les pages d'aide pour savoir comment accéder aux zones ayant ce niveau d'accès.
-
-
-
- Votre catégorie d'accès ne vous permet pas de réclamer cette région.
-
-Souhaitez-vous en savoir plus sur les différentes catégories d'accès ?
-
- http://wiki.secondlife.com/wiki/Pr%C3%A9sentation_des_cat%C3%A9gories_de_contenu_(KB)
-
-
-
-
- Votre catégorie d'accès ne vous autorise pas à réclamer cette région.
-
-
- Votre catégorie d'accès ne vous permet pas de réclamer cette région.
-
-En cliquant sur Modifier les préférences, vous pourrez changer votre catégorie d'accès et pénétrer dans la région. À partir de maintenant, vous pouvez rechercher et accéder au contenu [REGIONMATURITY]. Vous pouvez modifier ce paramètre à partir du menu Édition > Préférences... > Général.
-
-
-
- Votre catégorie d'accès ne vous permet pas d'acheter cette région. Cela vient peut-être du fait qu'il manquait des informations pour valider votre âge.
-
-Vérifiez que vous avez la toute dernière version du client et consultez les pages d'aide pour savoir comment accéder aux zones ayant ce niveau d'accès.
-
-
-
- Votre catégorie d'accès ne vous permet pas d'acheter cette région.
-
-Souhaitez-vous en savoir plus sur les différentes catégories d'accès ?
-
- http://wiki.secondlife.com/wiki/Pr%C3%A9sentation_des_cat%C3%A9gories_de_contenu_(KB)
-
-
-
-
- Votre catégorie d'accès ne vous permet pas d'acheter cette région.
-
-
- Votre catégorie d'accès ne vous autorise pas à acheter cette région.
-
-En cliquant sur Modifier les préférences, vous pourrez changer votre catégorie d'accès et pénétrer dans la région. À partir de maintenant, vous pouvez rechercher et accéder au contenu [REGIONMATURITY]. Vous pouvez modifier ce paramètre à partir du menu Édition > Préférences... > Général.
-
-
-
- "Vous avez sélectionné trop de prims. Veuillez sélectionner au maximum [MAX_PRIM_COUNT] prims et réessayer."
-
-
- Problème lors de l'importation du règlement du domaine.
-
-
-
- Problèmes lors de l'ajout d'un nouveau gérant de domaine. Il est possible qu'au moins un des domaines ait une liste de gérants complète.
-
-
- Problème lors de l'ajout à la liste de ce domaine. Il est possible qu'au moins un des domaines ait une liste complète.
-
-
- Impossible de charger les données de la note actuellement.
-
-
- Permissions pour afficher la note insuffisantes.
-
-
-
- Les références de la note ne se trouvent pas dans la base de données.
-
-
-
- Rappel : les frais pour passer des petites annonces ne sont pas remboursables.
-
-Publier cette petite annonce maintenant pour [AMOUNT] L$Â ?
-
-
-
- Cette petite annonce contient-elle du contenu Mature ?
-
-
-
- Ce groupe contient-il du contenu Mature ?
-
-
-
- Souhaitez-vous vraiment redémarrer cette région ?
-
-
-
- Saisissez une message qui sera envoyé à tous les résidents présents dans cette région.
-
-
-
- Si vous cochez cette case, les propriétaires ne pourront plus terraformer leur terrain, quel que soit le paramétrage individuel des parcelles.
-
-Valeur par défaut : désactivé
-
-
- Si vous cochez cette case, les résidents ne pourront plus voler dans cette région, quel que soit le paramétrage individuel des parcelles.
-
-Valeur par défaut : désactivé
-
-
- L'outil Modifications groupées des droits vous permet de modifier rapidement et simultanément les droits dans les contenus des objets séléctionnés. Notez toutefois que vous paramétrez uniquement les droits des objets dans les Contenus des objets sélectionnés, et non les droits sur les objets eux-mêmes.
-
-Notez aussi que les droits ne s'appliquent pas aux contenus imbriqués dans les objets contenus. Votre requête ne porte que sur les objets de premier niveau.
-
-Vous pouvez sélectionner quels types d'objets modifier à la section Types de contenu. Les photos sont incluses quand vous sélectionnez Textures.
-
-* Cet outil ne vous permettra de changer que les droits des objets que vous êtes autorisés à modifier.
-* Vous ne pouvez pas accorder de droits que vous n'avez pas au prochain propriétaire.
-* Les droits accordés au prochain propriétaire de sont que des requêtes. Si un objet ne peut recevoir tous les nouveaux droits, aucun de ses droits ne changera.
-
-Lorsque vous êtes prêt à modifier tous les droits, cliquez sur Appliquer et attendez de voir s'afficher les résultats.
-
-Si vous fermez la fenêtre des modifications groupées alors que les droits sont en train d'être modifiés, vous suspendez l'opération.
-
-
- Si vous cochez cette case, les résidents peuvent subir des dégâts dans toute la région quel que soit le paramétrage individuel des parcelles. Si la case n'est pas cochée, les propriétaires sont libres d'activer ou non cette option sur leur parcelle.
-
-Valeur par défaut : désactivé
-
-
- Définit le nombre maximum d'avatars autorisés dans cette région.
-La performance peut varier en fonction du nombre d'avatars présents.
-
-Valeur par défaut : 40
-
-
- Le bonus objet est le multiplicateur de prims autorisées sur une parcelle donnée. L'échelle autorisée est comprise entre 1 et 10. Lorsque ce chiffre est de 1, chaque parcelle de 512 m² peut contenir 117 prims. S'il est de 2, chaque parcelle peut contenir 234 prims, ou deux fois plus, et ainsi de suite. Le nombre maximum de prims autorisées dans une région est de 15 000, quel que soit le bonus objet. Attention : si vous définissez un bonus objet et décidez ensuite de le diminuer, cela peut entraîner la suppression ou le renvoi d'objets.
-
-Valeur par défaut : 1.0
-
-
- Définit la catégorie d'accès de la région, telle qu'affichée dans la barre de menu en haut du client et dans les infobulles de la carte lorsque vous passez votre curseur au-dessus de cette région. Ce paramètre affecte aussi l'accès à cette région et les résultats de recherche. Les autres résidents ne peuvent pénétrer que dans les régions ou n'afficher que les résultats de recherche ayant la même catégorie d'accès que celle indiquée dans leurs Préférences.
-
-Ce changement n'apparaîtra pas immédiatement sur la carte.
-
-
- Cette case permet de restreindre les bousculades dans toute une région.
-Lorsqu'elle est cochée, les résidents ne peuvent être bousculés que par d'autres résidents ou par le propriétaire de la parcelle.
-(Bousculer fait référence à la fonction LSL llPushObjet().)
-
-Valeur par défaut : désactivé
-
-
- Cette case permet de choisir si les parcelles n'appartenant pas au gérant du domaine peuvent ou pas être fusionnées ou divisées.
-Si cette case n'est pas cochée :
- * Seuls les propriétaires ou gérants de domaine peuvent fusionner ou diviser des parcelles.
- * Ils ne peuvent fusionner ou diviser que les parcelles du propriétaire,
- ou celles d'un groupe dans lequel ils ont les pouvoirs nécessaires.
- Si cette case est cochée :
- * Tous les propriétaires peuvent fusionner ou diviser leurs parcelles.
- * Pour les parcelles appartenant à un groupe, les membres avec les pouvoirs nécessaires peuvent fusionner ou diviser les parcelles.
-
-Valeur par défaut : activée
-
-
- Si vous cochez cette option, les propriétaires ne pourront pas faire apparaître leurs parcelles dans les résultats de recherche.
-Valeur par défaut : désactivé
-
-
- La catégorie d'accès de cette région a été mise à jour.
-Ce changement n'apparaîtra pas immédiatement sur la carte.
-
-
- Les propriétaires et gérants de domaine peuvent vendre n'importe quel terrain appartenant au propriétaire du domaine.
-Si cette option n'est pas cochée, les propriétaires ne peuvent pas revendre leur parcelle.
-Si cette option est cochée, les propriétaires sont libres de revendre leur parcelle.
-
-Valeur par défaut : désactivé
-
-
- Lorsque la performance d'une région est faible, cela peut venir d'un script. Ouvrez la section Statistiques (Ctrl-Maj-1) et vérifiez le FPS Physique (Physics FPS) de la section Simulateur.
-Si le FPS est en dessous de 45, ouvrez la section Time située en fin de liste. Si le Script Time est au dessus de 25ms, cliquez sur le bouton Afficher les objets scriptés les plus consommateurs. Vous verrez le nom et l'emplacement des scripts éventuellement à l'origine du problème.
-
-Si vous cochez la case Désactiver les scripts et que vous appuyez sur Appliquer, tous les scripts de cette région seront temporairement désactivés. Vous devrez peut-être faire cela le temps d'arriver à l'endroit su script en cause. Une fois sur place, assurez-vous que le script est bien à l'origine du problème. Pour cela, vous devrez peut-être contacter le propriétaire du script ou bien supprimer ou renvoyer l'objet.
-Décochez la case Désactiver le script, puis cliquez sur Appliquer pour réactiver tous les scripts dans la région.
-
-Valeur par défaut : désactivé
-
-
- Des objets physiques peuvent fortement réduire les performances d'une région.
-Ouvrez la barre de statistiques (Ctrl-Maj-1) et vérifiez le FPS Physique (Physics FPS) de la section Simulateur.
-Si le FPS est en dessous de 45, ouvrez la section Time située en fin de liste. Si le Script Time est au dessus de 25ms, cliquez sur le bouton Afficher les collisions les plus consommatrices.
-Vous verrez le nom et l'emplacement des objets physiques éventuellement à l'origine du problème.
-
-Si vous décochez la case Désactiver les collisions et que vous cliquez sur Appliquer, toutes les collisions entre objets seront désactivées. Vous pourrez avoir besoin de cette fonction le temps d'arriver à l'emplacement des objets en cause. Une fois sur place, vérifiez que l''objet est bien responsable du problème (entre-t-il sans cesse en collision avec d'autres objets ?) Pour cela, vous devrez peut-être contacter le propriétaire de l'objet ou bien supprimer ou renvoyer l'objet.
-Décochez la case Désactiver les collisions, puis cliquez sur le bouton Appliquer pour réactiver les collisions dans la région.
-
-Valeur par défaut : désactivé
-
-
- L'option Désactiver la physique est similaire à l'option Désactiver les collisions sauf qu'elle englobe tous les effets liés à la physique. Cela signifie que les objets n'entreront plus en collision et que les avatars ne pourront plus bouger.
-
-Vous ne devriez utiliser cette option que lorsque l'option Désactiver les collisions n'améliore pas sufisamment la performance de la région pour résoudre un problème de physique ou trouver les objets entrant en collision.
-
-Une fois que vous avez fini, n'oubliez pas de réactiver les propriétés physiques sinon les avatars ne pourront pas bouger.
-
-Valeur par défaut : désactivé
-
-
- Montre une liste des objets générant le plus de collisions avec d'autres objets. Ces objets peuvent ralentir les performances de votre région. Sélectionnez Affichage > Statistiques et regardez sous Simulator > Time > Sim Time (Physics) pour voir si le temps du moteur physique est au dessus de 20 ms.
-
-
- Dresse une liste des objets dont les scripts consomment le plus de ressources. Ces objets peuvent ralentir la performance de votre région.
-Sélectionnez Affichage > Statistiques et regardez sous Simulator > Time > Script Time pour voir si le temps des scripts est au dessus de 25 ms.
-
-
- Redémarre le serveur en charge de la région après deux minutes d'avertissement. Tous les résidents dans cette région seront déconnectés. Les données de la région seront sauvegardées et réapparaîtront au bout de 90 secondes.
-
-Le redémarrage de la région ne permet pas de résoudre la plupart des problèmes de performance. Les redémarrages ne doivent avoir lieu qu'en dernier recours.
-
-
- Il s'agit de la hauteur de l'eau en mètres.
-Si ce paramètre est différent de 20 et que vous avez de l'eau adjacente au bord du monde ou de l'eau « vide », il y aura un espace vide visible.
-
-
-Valeur par défaut : 20
-
-
- Il s'agit de la distance (en mètres) à laquelle les propriétaires de parcelle peuvent surélever leur terrain, par rapport au terrain « figé » dont la hauteur est fixée par défaut.
-
-Valeur par défaut : 4
-
-
- Il s'agit de la distance (en mètres) à laquelle les propriétaires de parcelle peuvent abaisser leur terrain, par rapport au terrain « figé » dont la hauteur est fixée par défaut.
-
-Valeur par défaut : -4
-
-
- Ce bouton permet de charger un fichier .RAW dans la région où vous vous trouvez.
-Ce fichier doit avoir les bonnes dimensions (RGB, 256 x 256) et 13 canaux. Le meilleur moyen de créer un fichier terrain est de télécharger le fichier RAW existant. Un bon moyen est de modifier le canal rouge (hauteur terrain) et de le charger.
-
-Le chargement peut prendre jusqu'à 45 secondes. Veuillez noter que le chargement d'un fichier terrain ne déplacera pas les objets qui se trouvent sur le terrain, mais seulement le terrain et les droits associés aux parcelles. Certains objets risquent d'aller sous la terre.
-
-Pour en savoir plus sur la modification de la hauteur des terrains d'une région, consultez l'Aide F1.
-
-
- Ce bouton permet de télécharger un fichier contenant les données relatives à la hauteur du terrain, dimensions de la parcelle, les mises en vente ainsi que certains droits relatifs à la parcelle pour cette région. Lorsque vous ouvrez le fichier avec un programme tel que Photoshop, vous devez indiquer les dimensions du document qui sont les suivantes : RGB, 256 x 256 avec 13 canaux. Le fichier terrain ne peut pas être ouvert différemment.
-
-Pour en savoir plus sur la modification de la hauteur des terrains d'une région, consultez l'Aide F1.
-
-
- Si vous cochez cette case, la position du soleil dans cette région sera la même que dans le reste du domaine.
-
-Valeur par défaut : activé
-
-
- Si vous cochez cette case, la position du soleil se fixe sur celle du curseur Phase et le soleil arrête de bouger.
-
-Valeur par défaut : désactivé
-
-
- Ce bouton permet d'enregistrer la forme actuelle du terrain comme nouvelle forme par défaut pour la région. Une fois figé, le terrain peut reprendre la forme enregistrée à partir de l'option Rétablir le terrain à la section Modifer le terrain. Le terrain figé est aussi le point de référence pour les limites de surélévation et d'abaissement.
-
-
- Un gérant de domaine est un résident chargé du contrôle de la région et des paramètres du domaine. Un gérant de domaine peut modifier tous les paramètres, mais ne peut pas charger, télécharger ni figer de terrain. Un des pouvoirs principaux du gérant est de bannir ou d'autoriser un résident sur votre domaine.
-
-Seuls les propriétaires de domaine peuvent ajouter ou supprimer des gérants de domaine. Lorsque vous choisissez un gérant de domaine, prenez un résident en qui vous avez confiance car vous serez en quelque sorte responsable de ses actions.
-
-
- Cette case permet au soleil de votre domaine de suivre la position du soleil sur les domaines Linden du continent.
-
-Valeur par défaut : activé
-
-
- Si vous cochez cette case, la position du soleil se fixe sur celle du curseur Phase et le soleil arrête de bouger.
-
-
- Cette option vous permet de choisir quels résidents d'autres domaines peuvent pénétrer sur votre domaine sans devoir être ajoutés à la liste d'accès.
-
-Valeur par défaut : activé
-
-
- Lorsqu'elle est cochée, cette option permet aux résidents d'être téléportés à n'importe quel endroit sur votre domaine. Lorsque cette option n'est pas cochée, les résidents sont téléportés au téléhub le plus proche.
-
-Valeur par défaut : désactivé
-
-
- L'accès à ce domaine sera réservé aux résidents figurant dans cette liste et aux groupes ci-dessous.
-Cette option n'est disponible que lorsque la case Accès public est décochée.
-
-
- L'accès à ce domaine sera réservé aux groupes figurant dans cette liste et aux résidents ci-dessous. Cette option n'est disponible que lorsque la case Accès public est décochée.
-
-
- Si vous utilisez une adresse e-mail valide, les rapports d'infraction de ce domaine iront à cette adresse.
-Si vous laissez ce champ vide, les rapports d'infraction seront envoyés à Linden Lab uniquement.
-
-
- Les résidents figurant sur cette liste ne peuvent pas pénétrer sur votre domaine, quels que soient les autres paramètres.
-
-
- Les parcelles de ce domaine peuvent avoir leurs propres canaux vocaux, ce qui permet aux résidents de communiquer avec leurs voisins.
-
-Valeur par défaut : désactivé
-
-
- Cette version de Second Life n'est pas compatible avec la fonctionnalité de chat vocal dans cette région. Vous devez mettre à jour Second Life pour que le chat vocal fonctionne correctement.
-
-
- Définir un règlement pour le domaine vous permet de vendre les parcelles de ce domaine. S'il n'y a pas de règlement, vous ne pouvez pas vendre le terrain. Si vous ne souhaitez pas indiquer de règlement ou donner de conseils aux acheteurs, laissez la section relative au règlement vide.
-
-Un règlement sert à communiquer des règles, des lignes directrices ou informations culturelles, ou simplement à expliquer vos attentes à un acheteur potentiel. Il peut s'agir de régulations concernant la construction, les options de paiement ou tout autre information que vous souhaitez faire passer au résident avant que l'achat n'ait lieu.
-
-L'acheteur est tenu d'accepter le règlement en cochant une case avant de pouvoir finaliser l'achat. Les règlements, lorsqu'ils existent, apparaissent toujours dans la boîte de dialogue À propos du terrain.
-
-
- Impossible d'acheter simultanément des objets de propriétaires différents.
-Veuillez ne sélectionner qu'un seul objet.
-
-
- Impossible d'acheter les contenus de plus d'un objet à la fois.
-Veuillez ne sélectionner qu'un seul objet.
-
-
- Impossible d'acheter simultanément des objets de propriétaires différents.
-Veuillez ne sélectionner qu'un seul objet.
-
-
- Acheter l'objet original pour [PRICE] L$ Ã [PRICE] ?
-Vous deviendrez le propriétaire de cet objet.
-Vous pourrez :
- Modifier : [MODIFYPERM]
- Copier : [COPYPERM]
- Revendre ou donner : [RESELLPERM]
-
-
-
- Acheter l'objet original pour [PRICE] L$Â ?
-Vous deviendrez le propriétaire de cet objet.
-Vous pourrez :
- Modifier : [MODIFYPERM]
- Copier : [COPYPERM]
- Revendre ou donner : [RESELLPERM]
-
-
-
- Acheter une copie pour [PRICE] L$ Ã [OWNER] ?
-L'objet sera copié dans votre inventaire.
-Vous pourrez :
- Modifier : [MODIFYPERM]
- Copier : [COPYPERM]
- Revendre ou donner : [RESELLPERM]
-
-
-
- Acheter une copie pour [PRICE] L$ ?
-L'objet sera copié dans votre inventaire.
-Vous pourrez :
- Modifier : [MODIFYPERM]
- Copier : [COPYPERM]
- Revendre ou donner : [RESELLPERM]
-
-
-
- Acheter des contenus pour [PRICE] L$ Ã [OWNER] ?
-Ils seront copiés dans votre inventaire.
-
-
-
- Acheter des contenus pour [PRICE] L$ ?
-Ils seront copiés dans votre inventaire.
-
-
-
- Suite à cette transaction, vous allez :
-[ACTION]
-
-Êtes-vous certain de vouloir effectuer cette transaction ?
-
-
-
- Suite à cette transaction, vous allez :
-[ACTION]
-
-Êtes-vous certain de vouloir effectuer cette transaction ?
-Veuillez saisir à nouveau votre mot de passe et cliquer sur OK.
-
-
-
- Remarque :
-vous avez mis à jour l'emplacement de ce favori mais les autres détails resteront inchangés.
-
-
-
- Vous avez sélectionné des objets non copiables.
-Ces objets seront déplacés dans votre inventaire et non pas copiés.
-
-Déplacer les objets de l'inventaire ?
-
-
-
- Vous avez sélectionné des objets de l'inventaire qui ne peuvent pas être copiés. Ces objets seront déplacés vers votre inventaire, et non pas copiés.
-L'objet les contenant est scripté, déplacer ces objets peut causer des problèmes au niveau du script.
-
-Déplacer les objets de l'inventaire ?
-
-
-
- Avertissement : l'action du clic Payer l'objet a été défini mais ne fonctionnera que si un script est ajouté avec l'event money().
-
-
-
- Vous n'êtes autorisé à copier aucun élément dans cet objet.
-
-
- Aller sur le site de Second Life pour consulter l'historique de votre compte ?
-
-
-
- Visiter les pages d'aide de Second Life ?
-
-
-
- Êtes-vous certain de vouloir quitter ?
-
-
-
- Utilisez cet outil pour signaler des infractions aux Conditions d'utilisation et aux Règles de la communauté. Voir :
-
-http://secondlife.com/corporate/tos.php
-http://secondlife.com/corporate/cs.php
-
-Lorsqu'elles sont signalées, toutes les infractions aux Conditions d'utilisation et aux Règles de la communauté font l'objet d'une enquête et sont résolues. Pour accéder aux détails de la résolution d'un incident, allez sur :
-
-http://secondlife.com/support/incidentreport.php
-
-
- Important : ce rapport ira au propriétaire de la région dans laquelle vous êtes et non à Linden Lab.
-
-Pour aider les résidents et les visiteurs, le propriétaire de la région dans laquelle vous êtes a choisi de recevoir et de s'occuper de tous les rapports envoyés à partir de cette région. Linden Lab n'enquêtera pas sur les rapports que vous envoyez à partir de cet endroit.
-
-Le propriétaire de la région traitera les rapports en fonction des règles de cette région, comme indiqué dans le réglement du domaine.
-(Les réglements sont visibles à partir du menu Monde > À propos du terrain.)
-
-La résolution de ce rapport ne s'applique qu'à cette région ; L'accès aux autres endroits de Second Life ne sera pas affecté par les résultats de cette enquête. Seul Linden Lab peut interdire l'accès à l'ensemble de Second Life.
-
-
- N'utilisez cet outil que pour signaler des problèmes techniques et soyez aussi précis que possible.
-Vous pouvez répondre à l'e-mail automatique pour ajouter des détails à votre rapport.
-
-Tous les bugs signalés sont reproduits et évalués. Aucune réponse ne sera envoyée par e-mail.
-
-Si vous avez un problème technique, veuillez contacter le service clientèle à :
-
-http://secondlife.com/community/support.php
-
-Remarque : les rapports incomplets ne feront pas l'objet d'une enquête.
-
-
- Veuillez choisir une catégorie pour ce rapport d'infraction.
-Le choix d'une catégorie nous permet de traiter les rapports d'infraction plus rapidement.
-
-
- Veuillez choisir une catégorie pour ce bug.
-Le choix d'une catégorie nous permet de traiter les bugs plus rapidement.
-
-
- Veuillez saisir le nom du contrevenant.
-Lorsque nous avons le nom du contrevenant, nous sommes en mesure de traiter les rapports plus rapidement.
-
-
- Veuillez indiquer l'endroit où l'infraction a eu lieu.
-Les informations précises et exactes nous permettent de traiter les rapports plus rapidement.
-
-
- Veuillez saisir un récapitulatif de l'infraction.
-Les récapitulatifs précis nous permettent de traiter les rapports plus rapidement.
-
-
- Veuillez saisir un récapitulatif du bug.
-Les récapitulatifs précis nous permettent de résoudre les bugs plus rapidement.
-
-
- Veuillez saisir une description détaillée de l'infraction.
-Soyez aussi précis que possible et essayez de fournir des noms ainsi que des détails sur l'incident que vous signalez.
-Les descriptions précises nous permettent de traiter les rapports plus rapidement.
-
-
- Veuillez saisir une description détaillée du bug.
-Soyez aussi spécifique que possible et essayez d'indiquer les étapes à suivre pour reproduire le bug.
-Les descriptions précises nous permettent de résoudre les bugs plus rapidement.
-
-
- Cher résident,
-
-Il semble que vous souhaitiez reporter une infraction à des droits de propriété intellectuelle. Pour signaler correctement cette infraction :
-
-(1) Remplissez un rapport d'infraction. Vous pouvez soumettre un rapport d'infraction si vous pensez qu'un résident exploite le système de droits de Second Life, par exemple en utilisant un CopyBot ou des outils similaires pour enfreindre des droits de propriété intellectuelle. Notre équipe chargée des infractions mènera une enquête et prendra les mesures nécessaires à l'encontre du résident non respectueux des Conditions d'utilisation ou des règles de la communauté. Sachez toutefois que l'équipe chargée des infractions ne supprimera pas de contenu à l'intérieur de Second Life.
-
-(2) Demandez à ce que du contenu à l'intérieur de Second Life soit supprimé. Pour demander à ce que du contenu soit supprimé de Second Life, vous devez soumettre un rapport d'infraction valide, tel que fourni dans notre Règlement contre les violations des droit d'auteurs (DMCA), à http://secondlife.com/corporate/dmca.php.
-
-Si vous souhaitez toujours reporter cette infraction, veuillez fermer cette fenêtre et soumettre votre rapport. Vous devrez peut-être sélectionner la catégorie CopyBot ou exploitation abusive des droits.
-
-Merci,
-
-Linden Lab
-
-
- Les composantes requises suivantes ne se trouvent pas dans [FLOATER]:
-[COMPONENTS]
-
-
- Vous avez déjà un objet sur cette partie du corps.
-Voulez-vous le remplacer par l'objet sélectionné ?
-
-
-
- Vous êtes en mode occupé et vous ne recevrez donc aucun objet en échange de ce paiement.
-
-Souhaitez-vous quitter le mode occupé avant de terminer cette transaction ?
-
-
-
- Êtes-vous certain de vouloir supprimer le contenu de votre corbeille de manière permanente  ?
-
-
-
- Êtes-vous certain de vouloir vider le cache de votre navigateur ?
-
-
-
- Êtes-vous certain de vouloir supprimer vos cookies ?
-
-
-
- Êtes-vous certain de vouloir supprimer la liste des URL enregistrées ?
-
-
-
- Êtes-vous certain de vouloir supprimer le contenu de votre dossier Objets trouvés de manière permanente ?
-
-
-
- La SLURL suivante a été copiée dans votre presse-papiers :
- [SLURL]
-
-Mettez-la dans une page web pour permettre aux autres résidents d'accéder facilement à cet endroit ou bien collez-la dans la barre d'adresse de votre navigateur.
-
-
-
- Ce menu permet de contrôler la taille de la fenêtre et la résolution, ainsi que la qualité des graphiques client. Les préférences de l'interface graphique vous permettent de choisir entre 4 niveaux de graphiques : Faible, Moyen, Élevé et Ultra. Personnalisez vos options graphiques en cliquant sur le bouton Personnaliser et en changeant les paramètres suivants :
-
-Effets : active ou désactive les différents types de shaders pixels.
-
-Objets reflétés : définit le type d'objets reflétés dans l'eau.
-
-Rendu de l'avatar : définit les options qui influent sur la manière dont le client rend les avatars.
-
-Limite d'affichage : la distance à laquelle vous voyez les objets s'afficher dans la scène.
-
-Nombre de particules max. : définit le nombre maximum de particules que vous pouvez voir à la fois sur votre écran.
-
-Qualité post-traitement : définit la résolution du rayonnement.
-
-Détails des rendus : définit le niveau de détail ou le nombre de polygones utilisés dans le rendu de certains objets. Une valeur plus élevée prendra plus de temps pour apparaître, mais permettra d'avoir des objets plus détaillés.
-
-Sources lumineuses : définit les types de lumières que vous souhaitez faire apparaître.
-
-Rendu du terrain : définit le niveau de détail que vous souhaitez utiliser dans la texture du terrain.
-
-
- Voulez-vous écraser l'option précédemment enregistrée ?
-
-
-
- Voulez-vous supprimer [SKY] ?
-
-
-
- Vous ne pouvez pas éditer ou supprimer un préréglage par défaut.
-
-
- Une dossier semble manquer au Cycle du jour : [SKY].
-
-
- Certains effets post-traitement existent. Voulez-vous quand même écraser ce fichier ?
-
-
-
- Pour créer et sauvegarder plusieurs ciels, utilisez les curseurs WindLight.
-
-
- Choisissez quel ciel apparaît au cours de la journée.
-
-
- Ces paramètres permettent de modifier l'environnement local sur votre ordinateur. Pour que vous ayez accès à tous les paramètres, votre carte graphique doit prendre en charge les effets atmosphériques.
-
-Pour changer les différentes phases de la journée dans le client, utilisez le curseur Heure de la journée.
-
-Le curseur Couverture nuageuse permet de contrôler le nombre de nuages dans le ciel.
-
-L'option Couleur de l'eau vous permet de modifier la couleur de l'eau grâce au sélecteur de couleurs.
-
-Le curseur Brouillard dans l'eau permet de contrôler la densité du brouillard sous l'eau.
-
-Pour synchroniser l'heure du jour sur celle de la région, cliquez sur Utiliser heure domaine.
-
-En cliquant sur le bouton Ciel Avancé, vous aurez accès à tous les réglages relatifs au ciel.
-
-En cliquant sur le bouton Eau Avancée, vous aurez accès à tous les réglages relatifs à l'eau.
-
-
- L'éditeur du cycle du jour vous permet de contrôler le ciel au cours du cycle jour/nuit de second Life. C'est ce même cycle qui est contrôlé par le curseur Heure de la journée dans l'éditeur d'environnement basique.
-
-L'éditeur du jour fonctionne grâce au réglage d'images-clés. Ces images-clés sont représentées par les marques grises sur la ligne du temps et ont des préréglages qui leurs sont associées. Au cours de la journée et de la nuit, le ciel WindLight s'anime en passant d'une clé à l'autre.
-
-La flèche jaune au dessus de la ligne du temps représente votre vue actuelle, basée sur l'heure de la journée. Cliquez et faites glisser pour voir l'animation au cours de votre journée. Ajoutez ou supprimez des clés en appuyant sur les boutons Ajouter clé ou Supprimer clé, à droite de la ligne du temps.
-
-Vous pouvez définir la position d'une clé en la faisant glisser le long de la ligne du temps ou en définissant manuellement ses valeurs dans la section Réglages des images-clés. Dans cette même section, vous pouvez associer chaque clé au préréglage WindLight respectif.
-
-La Durée du cycle contrôle la durée d'une « journée ». Si vous choisissez une valeur basse (2mn par exemple), cela signifie que toutes les animations de votre journée de 24h se dérouleront en 2mn seulement ! Une fois satisfait de vos choix, utilisez les boutons Jouer et Stop ! pour prévisualiser les résultats. Pour voir l'animation, vous pouvez aussi bouger la flèche jaune au dessus de la ligne du temps. Si vous sélectionnez l'option Utiliser heure domaine, vous synchronisez la durée de votre journée et votre heure avec celle du cycle du jour du domaine.
-
-Une fois que vous êtes satisfait de votre Cycle du jour, vous pouvez le sauvegarder et le charger grâce aux boutons Enregistrer jour test et Charger Jour Test. Veuillez noter que pour l'instant, nous ne pouvez avoir qu'un seul Cycle du jour.
-
-
- Utilisez les curseurs Rouge/Vert/Bleu (RVB) pour ajuster la couleur du ciel. Pour déplacer les trois curseurs en même temps, utilisez le curseur Intensité.
-
-
- Le paramètre Quantité de brume est l'un des plus utiles pour ajuster l'exposition lumineuse de la scène.
-Il permet de simuler de nombreux paramètres d'exposition, tels que les voiles blancs créés par le soleil ou des lumières plus foncées.
-
-
- La Densité du bleu affecte la saturation générale des couleurs du ciel et du brouillard. Si vous déplacez le curseur Intensité (I) vers la droite, les couleurs deviennent plus vives et plus vibrantes. Si vous le déplacez complètement à gauche, les couleurs deviennent plus fades, puis finalement noires et blanches. Pour paramétrer avec précision la couleur du ciel, vous pouvez contrôler chacun des éléments de la saturation à l'aide des curseurs Rouge/Vert/Bleu (RVB).
-
-
- Le paramètre Densité de la brume permet de contrôler le niveau de brume grisâtre dans l'atmosphère. Ce paramètre est utile pour simuler les scènes dans lesquelles il y a beaucoup de fumée et de substances polluantes émises par l'homme. Il est également utile pour simuler le brouillard et la brume.
-
-
- Utilisez le Multiplicateur de densité pour modifier la densité atmosphérique générale. Une valeur basse donne l'impression d'un air « léger » alors qu'une valeur élevée donne l'impression d'un air « lourd » et enfumé.
-
-
- Ajuste la distance perçue par WindLight.
-La valeur zéro désactive l'influence de WindLight sur le terrain et les objets.
-Les valeurs supérieures à 1 simulent des distances plus importantes pour des effets atmosphériques plus épais.
-
-
- L'Altitude max. ajuste les calculs de WindLight lors de la computation de la lumière atmosphérique. Quand la fin de la journée approche, il est utile pour ajuster la « profondeur » du coucher de soleil.
-
-
- Ajuste la couleur et l'intensité de la lumière directe de la scène.
-
-
- Ajuste la couleur et l'intensité de la lumière atmosphérique ambiante.
-
-
- Le curseur Taille contrôle la taille du soleil.
-Le curseur Netteté permet de rendre le soleil plus ou moins flou dans le ciel.
-
-
- Ajuste la distribution de clair et de foncé sur l'écran.
-
-
- Vous permet de contrôler l'intensité des étoiles dans le ciel.
-
-
- Contrôle la position du soleil dans le ciel.
-Même chose que l'élévation.
-
-
- Contrôle la position du soleil dans le ciel.
-Même chose que l'azimut.
-
-
- Modifie la couleur des nuages. Il est recommandé de laisser les nuages en blanc mais vous pouvez aussi faire preuve de créativité...
-
-
- Contrôle le détail de l'image placée sur l'image du nuage principal. X et Y contrôlent sa position. D (Densité) permet de rendre les nuages plus ou moins pleins ou plus ou moins fracturés.
-
-
- Vous permet de contrôler la position des nuages avec les curseurs X et Y ainsi que leur densité avec le curseur D.
-
-
- Contrôle la surface du ciel couverte par les nuages.
-
-
- Contrôle l'échelle de l'image des nuages sur le dôme du ciel.
-
-
- Contrôle la vitesse des nuages sur l'axe des X.
-
-
- Contrôle la vitesse des nuages sur l'axe des Y.
-
-
- Cochez cette option pour utiliser les anciens nuages de Second Life en plus des nuages WindLight.
-
-
- Permet de sélectionner la couleur du brouillard sous l'eau.
-
-
- Contrôle la densité du brouillard sous l'eau, ainsi que votre visibilité.
-
-
- Modifie l'effet créé par l'option Densité du brouillard pour contrôler votre visibilité quand votre avatar est sous l'eau.
-
-
- Contrôle l'éclat de l'eau à la surface.
-
-
- Contrôle l'échelle des trois vaguelettes qui forment l'eau.
-
-
- Contrôle la quantité de lumière réfléchie à des angles différents.
-
-
- Contrôle l'intensité de la lumière réfléchie.
-
-
- Contrôle la quantité de lumière réfractée lorsque votre avatar regarde au dessus de l'eau.
-
-
- Contrôle la quantité de lumière réfractée lorsque votre avatar est sous l'eau.
-
-
- Contrôle le mélange reflets/vagues.
-
-
- Contrôle quelle normal map est posée sur l'eau pour déterminer la réflection/réfraction.
-
-
- Contrôle dans quelle direction et à quelle vitesse la version grande échelle de la normal map se déplace sur l'axe des X et l'axe des Y.
-
-
- Contrôle dans quelle direction et à quelle vitesse la version grande échelle de la normal map se déplace sur l'axe des X et l'axe des Y.
-
-
- Nommez le nouveau ciel.
-
-
-
- Ce préréglage existe déjà  !
-
-
- Nommez ce nouveau préréglage d'eau.
-
-
-
- Ce préréglage existe déjà  !
-
-
- Vous ne pouvez pas éditer ou supprimer un préréglage par défaut.
-
-
- Impossible de démarrer une nouvelle session de chat avec [RECIPIENT].
-[REASON]
-
-
-
- [EVENT]
-[REASON]
-
-
-
- Vous devez terminer votre session de chat avec [NAME].
-[REASON]
-
-
-
- Les objets qui font partie d'une pièce-jointe ne peuvent pas être achetés.
-
-
- Accepter cette requête donne au script l'autorisation de prélever des dollars Linden (L$) sur votre compte de manière continue. Pour révoquer cette autorisation, le propriétaire de l'objet doit supprimer l'objet ou bien réinitialiser les scripts dans l'objet.
-
-
-
- Voulez-vous automatiquement porter l'habit que vous créez ?
-
-
-
- Pour que vous puissiez accéder à cette parcelle, votre âge doit être vérifié.
-Voulez-vous aller sur le site de Second Life pour vérifier votre âge ?
-
-[_URL]
-
- https://secondlife.com/account/verification.php?lang=fr
-
-
-
-
- Avant de pouvoir pénétrer sur cette parcelle, vous devez enregistrer vos informations de paiement.
-Voulez-vous aller sur le site de Second Life pour enregistrer ces informations ?
-
-[_URL]
-
- https://secondlife.com/account/index.php?lang=fr
-
-
-
-
- The string [STRING_NAME] is missing from strings.xml
-
-
- [MESSAGE]
-
-
- Annulé
-
-
- Action annulée
-
-
- Attachement annulé
-
-
- Habits et parties du corps manquants remplacés par les éléments par défaut.
-
-
- Sujet : [SUBJECT], Message : [MESSAGE]
-
-
- [NAME] est connecté(e)
-
-
- [NAME] est déconnecté(e)
-
-
- Vous ne pouvez pas devenir ami avec vous-même.
-
-
- Importation de photos SL et Web en cours
-(prend environ 5 minutes…)
-
-
- Le chargement a coûté [AMOUNT] L$.
-
-
- Photo Web importée
-
-
- Photo SL importée
-
-
- Fichier terrain.raw téléchargé
-
-
- Geste [NAME] absent de la base de données.
-
-
- Impossible de charger le geste [NAME].
-Merci de réessayer.
-
-
- Repère absent de la base de données.
-
-
- Impossible de charger le repère. Merci de réessayer.
-
-
- La touche Verr.maj est activée.
-Ce mode modifie le mot de passe que vous saisissez, vous devriez le quitter.
-
-
- Note absente de la base de données.
-
-
- Permissions insuffisantes pour voir la note.
-
-
- Permissions insuffisantes pour rezzer l'objet.
-
-
- Impossible de lire les données de la note actuellement.
-
-
- Script absent de la base de données.
-
-
- Permissions insuffisantes pour voir le script.
-
-
- Impossible de charger le script. Merci de réessayer.
-
-
- Tous les éléments que vous souhaitez transférer ne sont pas encore disponibles sur le serveur.
-Merci d'essayer à nouveau dans une minute.
-
-
- Vous ne pouvez pas modifier de catégories protégées.
-
-
- Vous ne pouvez pas supprimer de catégories protégées.
-
-
- Vous avez offert votre carte de visite à [NAME]
-
-
- Achat impossible durant le chargement de l'objet.
-Merci de réessayer.
-
-
- Impossible de lier durant le chargement de l'objet.
-Merci de réessayer.
-
-
- Impossible d'acheter simultanément des objets de propriétaires différents. Veuillez sélectionner un seul objet.
-
-
- Cet objet ne semble pas à vendre.
-
-
- Activation du mode divin : niveau [LEVEL]
-
-
- Désactivation du mode divin : niveau [LEVEL]
-
-
- Copie impossible, droits insuffisants.
-
-
- [NAME] a accepté votre envoi.
-
-
- [NAME] a refusé votre envoi.
-
-
- [NAME]: [MESSAGE]
-
-
- Votre carte de visite a été acceptée.
-
-
- Votre carte de visite a été refusée.
-
-
- A présent que vous êtes sur le continent, vous pouvez voyager par téléportation (vers [NAME] par exemple). Cliquez sur le bouton Inventaire en bas à droite de l'écran puis sélectionnez le dossier Repères (Landmarks).
-Choisissez un repère, double-cliquez dessus et cliquez sur Téléporter.
-
-
- A présent que vous êtes sur le continent, vous pouvez contacter des résidents (tel [NAME] par exemple). Cliquez sur le bouton Inventaire en bas à droite de l'écran puis sélectionnez le dossier Cartes de visite (Calling Cards).
-Choisissez en une, double-cliquez dessus et cliquez sur Message Instantané.
-
-
- Vous ne pouvez pas sélectionner de terrain en dehors des limites du serveur.
-Veuillez sélectionner un terrain plus petit.
-
-
- Certains termes de votre recherche ont été exclus car ils ne correspondaient pas aux standards fixés dans les Règles communautaires.
-
-
- Veuillez sélectionner au moins un type de contenu à rechercher (PG, Mature ou Adulte)
-
-
- [NAME] a proposé un vote pour :
-[MESSAGE]
-
-
-
- [MESSAGE]
-
-
- Avis d'événement :
-
-[NAME]
-[DATE]
-
-
-
- Tous les objets de cette parcelle qui seront transférés à l'acheteur sont maintenant mis en surbrillance.
-
-* Les arbres et la pelouse qui seront transférés ne sont pas mis en surbrillance.
-
-
-
- Gestes désactivés ayant le même mot-clé :
-[NAMES]
-
-
- Le logiciel Apple QuickTime ne semble pas installé sur votre système.
-Pour voir les vidéos sur les terrains qui le permettent, allez sur le site de QuickTime (http://www.apple.com/fr/quicktime/download) et installez le lecteur QuickTime.
-
-
- Les objets que vous possédez sur la parcelle de terrain sélectionnée ont été renvoyés dans votre inventaire.
-
-
- Les objets que vous possédez sur la parcelle de terrain appartenant à [NAME] ont été renvoyés dans votre inventaire.
-
-
- Les objets sur la parcelle appartenant à « [NAME] » ont étés renvoyés à leur propriétaire.
-
-
- Les objets sélectionnés sur la parcelle de terrain partagée avec le groupe [GROUPNAME] ont été renvoyés dans l'inventaire de leur propriétaire.
-Les objets donnés transférables ont étés renvoyés à leur propriétaire.
-Les objets non transférables donnés au groupe ont étés supprimés.
-
-
- Les objets sélectionnés sur la parcelle et qui ne sont pas à vous ont été rendus à leurs propriétaires.
-
-
- Les dégâts sont autorisés sur ce terrain (« non sécurisé »).
-Vous pouvez être blessé ici. Si vous décédez, vous serez téléporté à votre domicile.
-
-
- Le vol est interdit sur ce terrain (« pas de vol »).
-Vous ne pouvez pas voler ici.
-
-
- Les bousculades sont interdites sur ce terrain.
-Vous ne pouvez pas pousser les autres à moins que vous soyez propriétaire de ce terrain.
-
-
- La voix est désactivée sur ce terrain.
-
-
- Le mode construction sur ce terrain est désactivé (« pas de construction »).
-Vous ne pouvez pas créer d'objets ici.
-
-
- Un administrateur a temporairement stoppé les scripts dans cette région.
-
-
- Aucun script ne fonctionne dans cette région.
-
-
- Les scripts externes sont désactivés sur ce terrain (« pas de scripts externes »).
-Aucun script n'est exécuté à part ceux du propriétaire du terrain.
-
-
- Vous ne pouvez réclamer qu'un terrain public dans la région où vous vous trouvez actuellement.
-
-
- Votre catégorie d'accès ne vous autorise pas à pénétrer dans cette région. Vous devez sans doute procéder à la vérification de votre âge ou installer une version plus récente du client.
-
-Pour savoir comment accéder aux zones ayant un tel niveau d'accès, veuillez consulter les pages d'aide.
-
-
- Vous avez été banni de cette région.
-
-
- Votre compte ne peut pas se connecter à cette région du Teen grid.
-
-
- Vous ne pouvez pas retourner sur Help Island.
-Pour répéter le didacticiel, veuillez aller sur Help Island Public.
-
-
- Vous n'avez pas le statut de paiement approprié pour pénétrer dans cette région.
-
-
- Pour pouvoir pénétrer dans cette région, vous devez avoir procédé à la vérification de votre âge.
-
-
- Pour pouvoir pénétrer sur cette parcelle, vous devez avoir procédé à la vérification de votre âge.
-
-
- Région de destination introuvable.
-
-
- Vous n'êtes pas autorisé dans cette région.
-
-
- Impossible de traverser une parcelle bannie. Veuillez trouver une autre solution.
-
-
- Vous avez été redirigé vers un téléhub.
-
-
- Il n'a pas été possible de vous téléporter vers une destination plus proche.
-
-
- Téléportation annulée.
-
-
- La région dans laquelle vous essayez de pénétrer est pleine actuellement.
-Veuillez réessayer dans quelques minutes.
-
-
- Panne générale.
-
-
- Dirigé vers la mauvaise région. Merci de réessayer.
-
-
- ID agent non valide.
-
-
- ID de session non valide.
-
-
- Aucun code de circuit valide.
-
-
- Timestamp non valide.
-
-
- Impossible de créer la connexion en attente.
-
-
- Erreur interne lors de la tentative de connexion.
-
-
- Impossible de trouver un lieu de téléportation valide dans cette région.
-
-
- Une erreur interne est survenue lors de la résolution des coodonnées de la région.
-
-
- Impossible de trouver un point d'atterrissage valide.
-
-
- Aucune parcelle valide n'a été trouvée.
-
-
- Un objet appelé [OBJECTFROMNAME] appartenant à [NAME] vous a donné : [OBJECTTYPE] appelé(e) [OBJECTNAME].
-
-
-
- L'objet [OBJECTFROMNAME] appartenant à un utilisateur inconnu vous a donné un(e) [OBJECTTYPE] nommé(e) [OBJECTNAME].
-
-
-
- [NAME] vous a donné un(e) [OBJECTTYPE] nommé(e) [OBJECTNAME].
-
-
-
- [NAME]
-[MESSAGE]
-
-
- [MESSAGE]
-
-
-
- [NAME] vous propose de le/la rejoindre par téléportation :
-
-[MESSAGE]
-
-
-
- [MESSAGE]
-[URL]
-
-
-
- [NAME] vous demande de devenir son ami(e).
-
-[MESSAGE]
-
-(Par défaut, vous pourrez voir lorsque vous êtes tous deux connectés.)
-
-
-
- [NAME] vous demande de devenir son ami.
-
-(Par défaut, vous pourrez voir quand vous êtes tous deux connectés)
-
-
-
- [NAME] a accepté votre amitié.
-
-
- [NAME] a refusé votre amitié.
-
-
- [NAME] vous offre sa carte de visite.
-Cela ajoute un marque-page dans votre inventaire, ce qui vous permet d'envoyer rapidement un IM à ce résident.
-
-
-
- La région va redémarrer dans [MINUTES] minutes.
-Si vous restez dans cette région, vous serez déconnecté(e).
-
-
- La région va redémarrer dans [SECONDS] secondes.
-Si vous restez dans cette région, vous serez déconnecté(e).
-
-
- Charger cette page web [URL] ?
-
-[MESSAGE]
-
-Venant de l'objet : [OBJECTNAME], appartenant à : [NAME]?
-
-
-
- La recherche du [TYPE] dans la base de données a échoué.
-
-
- La recherche du [TYPE] nommé(e) [DESC] dans la base de données a échoué.
-
-
- L'objet que vous essayez de porter utilise une fonctionnalité que le client ne peut lire. Pour porter cet objet, veuillez télécharger une mise à jour du client.
-
-
- '[OBJECTNAME]', un objet appartenant à '[NAME]', aimerait :
-
-[QUESTIONS]
-Acceptez-vous ?
-
-
-
- [OBJECTNAME], un objet appartenant à [NAME], aimerait :
-
-[QUESTIONS]
-Si vous n'avez pas confiance en cet objet ni en son créateur, vous devriez refuser cette requête. Pour plus d'informations, cliquez sur le bouton Détails.
-
-Accepter cette requête ?
-
-
-
- '[TITLE]' de [NAME]
-[MESSAGE]
-
-
-
- '[TITLE]' de [GROUPNAME]
-[MESSAGE]
-
-
-
- Vous venez de recevoir [AMOUNT] L$.
-Des objets et des utilisateurs peuvent vous donner des L$.
-Votre solde est affiché dans le coin supérieur droit de votre écran.
-
-
- Vous venez de payer [AMOUNT] L$.
-Votre solde est affiché dans le coin supérieur droit de votre écran.
-
-
- Vous êtes assis(e).
-Utilisez les touches de direction (ou AWSD) pour changer la vue.
-Pour vous lever, cliquez sur le bouton Me lever.
-
-
- Cliquez et faites glisser pour faire défiler la carte.
-Double-cliquez pour vous téléporter.
-Utilisez les contrôles à droite pour trouver des choses et afficher différents arrière-plans.
-
-
- Vous pouvez construire des objets dans certaines zones de [SECOND_LIFE].
-Utilisez les outils en haut à gauche pour construire et gardez la touche Ctrl ou Alt enfoncée pour passer rapidement d'un outil à l'autre.
-Appuyez sur la touche Esc pour arrêter de construire.
-
-
- Un clic gauche permet d'interagir avec certains objets.
-Si le pointeur de la souris se transforme en main, vous pouvez interagir avec l'objet.
-Un clic droit fait toujours apparaître un menu des choses que vous pouvez faire.
-
-
- Cette région n'autorise pas la téléportation de point à point. Vous avez donc été transporté au téléhub le plus proche.
-Votre destination est marquée par une grande balise.
-Suivez la flèche rouge vers la balise ou cliquez sur la flèche pour faire disparaître la balise.
-
-
- Vos mouvements sont maintenant pris en charge par un objet.
-Essayez les flèches de votre clavier ou AWSD pour voir à quoi elles servent.
-Certains objets (comme les armes) nécessitent l'activation du mode Vue subjective pour être utilisés.
-Pour cela, appuyez sur la touche M.
-
-
- Vous êtes en train d'éditer votre apparence.
-Pour tourner et zoomer, utilisez les flèches de direction.
-Lorsque vous avez terminé, appuyez sur Enregistrer tout pour sauvegarder votre apparence et sortir.
-Vous pouvez modifier votre apparence aussi souvent que vous le souhaitez.
-
-
- Il s'agit de votre inventaire qui contient des objets, notes, vêtements, et autres possessions.
-* Pour porter un objet ou le dossier contenant un ensemble complet, faites-le glisser sur vous-même.
-* Pour mettre un objet dans le monde, faites-le glisser sur le sol.
-* Pour lire une note, double-cliquez dessus.
-
-
- Cette région est un bac à sable.
-Les objets que vous construisez ici peuvent être supprimés quand vous partez. Les bacs à sable sont nettoyés régulièrement, veuillez lire les informations en haut de l'écran à côté du nom de la région.
-
-Les régions bacs à sable sont rares et sont signalées par des panneaux.
-
-
- Cet objet est flexible.
-Les objets flexibles ne peuvent pas avoir de propriétés physiques et doivent rester fantômes jusqu'à ce que la case Fantôme soit décochée.
-
-
- Vous avez activé le menu Avancé.
-Ce menu contient des fonctionnalités utiles pour les développeurs qui travaillent sur Second Life.
-Pour activer/désactiver ce menu sous Windows, appuyez sur Ctrl-Alt-D. Sur un Mac, appuyez sur Cmd-Opt-Maj-D
-
-
- Vous êtes en train d'éditer un sculptie.
-Pour modifier la forme d'un sculptie, vous devez utiliser une texture spécifique.
-Vous trouverez des textures dans la bibliothèque de votre inventaire.
-
-
- Vous avez lancé la lecture d'un média. Dans le menu Préférences, à l'onglet Audio et vidéo, vous pouvez choisir de lire automatiquement les médias. Notez que cela peut être risqué lorsque les médias viennent de sites que vous ne connaissez pas.
-
-
- Vous ne pouvez sélectionner que [MAX_SELECT] objets maximum dans cette liste.
-
-
- [NAME] vous invite à un chat vocal.
-Pour y participer, cliquez sur Accepter. Sinon, cliquez sur Refuser. Pour ignorer cette personne, cliquez sur Ignorer.
-
-
-
- [NAME] a reçu un message instantané et n'est donc plus ignoré.
-
-
- [NAME] a reçu de l'argent et n'est donc plus ignoré.
-
-
- [NAME] a reçu un inventaire et n'est donc plus ignoré.
-
-
- [NAME] a rejoint un chat vocal avec le groupe [GROUP].
-Pour y participer, cliquez sur Accepter. Sinon, cliquez sur Refuser. Pour ignorer cette personne, cliquez sur Ignorer.
-
-
-
- [NAME] a rejoint un chat vocal avec conférence.
-Pour y participer, cliquez sur Accepter. Sinon, cliquez sur Refuser. Pour ignorer cet utilisateur, cliquez sur Ignorer.
-
-
-
- [NAME] vous invite à un chat conférence.
-Pour y participer, cliquez sur Accepter. Sinon, cliquez sur Refuser. Pour ignorer cet utilisateur, cliquez sur Ignorer.
-
-
-
- L'appel auquel vous essayez de participer, [VOICE_CHANNEL_NAME], a atteint le nombre maximum de participants. Veuillez réessayer ultérieurement.
-
-
- Nous sommes désolés. Le nombre maximum de conversations vocales a été atteint dans cette zone. Veuillez trouver un autre endroit pour discuter.
-
-
- Vous avez été déconnecté(e) de [VOICE_CHANNEL_NAME]. Vous allez maintenant être reconnecté au chat vocal spatial.
-
-
- [VOICE_CHANNEL_NAME] a mis fin à l'appel. Vous allez maintenant être reconnecté au chat vocal spatial.
-
-
- [VOICE_CHANNEL_NAME] a refusé votre appel. Vous allez maintenant être reconnecté au chat vocal spatial.
-
-
- [VOICE_CHANNEL_NAME] ne peut pas prendre votre appel. Vous allez maintenant être reconnecté au chat vocal spatial.
-
-
- Echec de la connexion avec [VOICE_CHANNEL_NAME], veuillez réessayer ultérieurement. Vous allez maintenant être reconnecté au chat vocal spatial.
-
-
- Nous sommes en train de créer un canal vocal pour vous. Veuillez patienter quelques instants.
-
-
- Vous ne pouvez pas pénétrer sur ce terrain car vous n'êtes pas membre du groupe adéquat.
-
-
- Vous ne pouvez pas pénétrer sur ce terrain car l'accès vous y est interdit.
-
-
- Vous ne pouvez pas pénétrer sur ce terrain car vous n'avez pas les droits d'accès requis.
-
-
- Vous n'êtes pas autorisé à vous connecter au chat vocal pour [VOICE_CHANNEL_NAME].
-
-
- Une erreur est survenue pendant la connexion au chat vocal pour [VOICE_CHANNEL_NAME]. Veuillez réessayer ultérieurement.
-
-
- La région dans laquelle vous avez pénétré utilise une version de simulateur différente. C'est ballot, mais c'est la vie !
-
-
- L'URL sur laquelle vous avez cliqué ne peut pas être ouverte dans ce navigateur.
-
-
- - Votre processeur ne remplit pas les conditions minimum requises.
-
-
- Vous semblez ne pas avoir le matériel requis pour utiliser Second Life. Second Life requiert une carte graphique OpenGL avec une prise en charge du multitexturing. Si vous avez une telle carte, assurez-vous que vous avez aussi les drivers les plus récents pour la carte, ainsi que les service packs et les patchs pour votre système d'exploitation.
-
-Si vous avez toujours des problèmes, veuillez consulter la page suivante : http://www.secondlife.com/support
-
-
- 796
-
-
- 510
-
-
- - Votre carte graphique ne remplit pas les conditions minimum requises.
-
-
- - Votre mémoire système ne remplit pas les conditions minimum requises.
-
-
- Oui
-
-
- Non
-
-
+
+
+
+ Ne plus afficher
+
+
+ Toujours choisir cette option
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Votre version de Second Life ne peut afficher ce message d'erreur.
+
+Détails de l'erreur : L'alerte, appelée '[_NAME]' est introuvable dans notifications.xml.
+
+
+
+ Erreur floater : impossible de trouver les contrôles suivants :
+
+[CONTROLS]
+
+
+
+ Aucun didacticiel n'est disponible actuellement.
+
+
+
+ [MESSAGE]
+
+
+ [MESSAGE]
+
+
+
+ Une erreur est survenue lors de la mise à jour de Second Life. Veuillez télécharger la dernière version depuis PheonixViewer.com.
+
+
+
+ Erreur réseau : impossible d'établir une connexion.
+'[DIAGNOSTIC]'
+Veuillez vérifier votre connexion.
+
+
+
+ Le modèle de message [PATH] est introuvable.
+
+
+
+ Enregistrer les changements dans la partie du corps/les habits actuels ?
+
+
+
+ Une erreur est survenue lors du chargement du texte pour un script, suite au problème suivant : [REASON]. Veuillez réessayer ultérieurement.
+
+
+ Une erreur est survenue lors du chargement du script compilé, suite au problème suivant : [REASON]. Veuillez réessayer ultérieurement.
+
+
+ Une erreur est survenue lors de l'écriture des données d'animation. Veuillez réessayer ultérieurement.
+
+
+ Un problème est survenu lors du chargement du script compilé, suite au problème suivant : [REASON]
+
+
+ Impossible d'afficher les contenus de plus d'un objet à la fois.
+Veuillez ne sélectionner qu'un seul objet.
+
+
+ Enregistrer tous les changements dans les habits/parties du corps ?
+
+
+
+ Lorsque vous accordez des droits d'édition à un autre résident, vous lui permettez de changer, supprimer ou prendre n'importe lequel de vos objets dans le Monde. Réfléchissez bien avant d'accorder ces droits.
+Souhaitez-vous accorder des droits d'édition à [NAME] ?
+
+
+
+ Lorsque vous accordez des droits d'édition à un autre résident, vous lui permettez de changer n'importe lequel de vos objets dans le Monde. Réfléchissez bien avant d'accorder ces droits.
+Souhaitez-vous accorder des droits d'édition aux résidents selectionnés ?
+
+
+
+ Souhaitez-vous retirer les droits d'édition à [NAME] ?
+
+
+
+ Souhaitez-vous retirer les droits d'édition aux résidents selectionnés ?
+
+
+
+ Impossible de créer le groupe.
+[MESSAGE]
+
+
+
+ [NEEDS_APPLY_MESSAGE]
+[WANT_APPLY_MESSAGE]
+
+
+
+ Pour envoyer une notice au groupe, vous devez indiquer un sujet.
+
+
+
+ Vous êtes sur le point d'ajouter des membres du groupe dans le rôle de [ROLE_NAME].
+Les membres ne peuvent pas être destitués de ce rôle.
+Ils doivent donner eux-mêmes leur démission.
+Êtes-vous certain de vouloir continuer ?
+
+
+
+ Vous êtes sur le point d'ajouter le pouvoir « [ACTION_NAME] » au rôle « [ROLE_NAME] ».
+ *Avertissement*
+ Tout membre disposant de ce pouvoir peut s'affecter lui-même, ainsi que tout autre membre, à des rôles disposant de pouvoirs plus importants, et accéder potentiellement à des pouvoirs proches de ceux d'un propriétaire. Assurez-vous de bien comprendre ce que vous faites avant d'attribuer ce pouvoir.
+
+Ajouter ce pouvoir à « [ROLE_NAME] » ?
+
+
+
+ Vous êtes sur le point d'ajouter le pouvoir « [ACTION_NAME] » au rôle « [ROLE_NAME] ».
+
+ *Avertissement*
+ Tout membre dans un rôle avec ce pouvoir peut s'attribuer à lui-même, ainsi qu'à tout autre membre, Tous les pouvoirs, et accéder potentiellement à des pouvoirs proches de ceux d'un propriétaire.
+
+Ajouter ce pouvoir à « [ROLE_NAME] » ?
+
+
+
+ Sélectionner l'option Afficher dans la recherche
+En cochant cette case, votre parcelle apparaîtra :
+- dans les résultats de recherche ;
+- dans les objets publics ;
+- dans la recherche web.
+
+
+ La musique et le média ne peuvent être utilisés que sur cette parcelle. Les options Son et Voix peuvent être limités à la parcelle ou seront entendus par les résidents en dehors de la parcelle, en fonction de leur catégorie d'accès. Souhaitez-vous en savoir plus sur le paramétrage de ces options ?
+
+ http://wiki.secondlife.com/wiki/M%C3%A9dias_sur_la_parcelle_(KB)
+
+
+
+
+ Les résultats de recherche sont organisés en fonction de l'onglet dans lequel vous vous trouvez, votre catégorie d'accès, la catégorie choisie, ainsi que d'autres facteurs. Pour plus de détails, veuillez consulter les pages d'aide.
+
+ http://wiki.secondlife.com/wiki/FAQ_sur_la_recherche_(KB)
+
+
+
+
+ Cette parcelle ne peut pas apparaître dans la recherche car elle est dans une région où cela n'est pas autorisé.
+
+
+ Si vous sélectionnez Afficher dans la recherche :
+- votre profil apparaîtra dans les résultats de recherche ;
+- un lien vers votre profil apparaîtra dans les pages de groupe publiques.
+
+
+ Vous pouvez proposer à un autre résident de devenir votre partenaire ou dissoudre un partenariat existant à partir du site de [SECOND_LIFE].
+
+Aller sur le site de Second Life pour avoir plus d'informations sur les partenariats ?
+
+
+
+ Il est possible que vos droits par défaut ne fonctionnent pas dans les anciennes régions.
+
+
+ Si ce résident a défini une URL de profil web, vous pouvez :
+ * Cliquer sur Charger pour afficher la page dans cet onglet ;
+ * Cliquer sur Charger > Dans un navigateur externe, pour afficher la page dans votre navigateur par défaut ;
+ * Cliquer sur Charger > URL du domicile, pour retourner au profil web du résident.
+
+Lorsque vous êtes dans votre propre profil, vous pouvez définir n'importe quelle URL comme profil web. Pour cela, saisissez l'URL et cliquez sur OK.
+Les autres résidents peuvent visiter l'URL que vous avez définie en regardant votre profil.
+
+
+ Rejoindre ce groupe coûte [COST] L$.
+Voulez-vous continuer ?
+
+
+
+ Rejoindre ce groupe coûte [COST] L$.
+Vous n'avez pas suffisamment de L$ pour rejoindre ce groupe.
+
+
+ Pour [COST] L$ vous pouvez pénétrer sur ce terrain ([PARCEL_NAME]) et y rester [TIME] heures. Acheter un pass ?
+
+
+
+ Pour rendre l'annonce disponible à tous, le prix de vente doit être supérieur à 0 L$.
+Si le prix de vente est de 0 L$, vous devez choisir un acheteur spécifique.
+
+
+ Le terrain sélectionné, de [LAND_SIZE] m², est mis en vente.
+Votre prix de vente sera de [SALE_PRICE] L$ et la vente sera disponible à [NAME].
+
+
+
+ Attention : en cliquant sur Vendre à n'importe qui, vous rendez votre terrain disponible à toute la communauté de Second Life, même aux personnes qui ne sont pas dans cette région.
+
+Le terrain sélectionné, de [LAND_SIZE] m², est mis en vente.
+Votre prix de vente sera de [SALE_PRICE] L$ et la vente sera disponible à [NAME].
+
+
+
+ Êtes-vous certain de vouloir renvoyer tous les objets partagés par le groupe [NAME] sur cette parcelle dans l'inventaire du propriétaire précédent ?
+
+*Avertissement* Tous les objets non transférables cédés au groupe seront supprimés !
+
+Objets : [N]
+
+
+
+ Etes-vous certain de vouloir renvoyer tous les objets que [NAME] possède sur cette parcelle dans son inventaire ?
+
+Objets : [N]
+
+
+
+ Êtes-vous certain de vouloir renvoyer tous les objets que vous possédez sur cette parcelle dans votre inventaire ?
+
+Objets : [N]
+
+
+
+ Êtes-vous certain de vouloir renvoyer tous les objets que vous ne possédez pas sur cette parcelle dans l'inventaire de leur propriétaire ?
+Les objets transférables cédés à un groupe seront renvoyés aux propriétaires précédents.
+
+*Avertissement* Tous les objets non transférables cédés au groupe seront supprimés !
+
+Objets : [N]
+
+
+
+ Êtes-vous certain de vouloir renvoyer tous les objets que [NAME] ne possède pas sur cette parcelle dans l'inventaire de leur propriétaire ?
+Les objets transférables cédés à un groupe seront renvoyés aux propriétaires précédents.
+
+*Avertissement* Tous les objets non transférables cédés au groupe seront supprimés !
+
+Objets : [N]
+
+
+
+ Êtes-vous certain de vouloir renvoyer tous les objets de la liste dans l'inventaire de leur propriétaire ?
+
+
+
+ Êtes-vous certain de vouloir désactiver tous les objets dans cette région ?
+
+
+
+ Renvoyer les objets de cette parcelle qui ne sont pas partagés avec le groupe [NAME] à leur propriétaire ?
+
+Objets : [N]
+
+
+
+ Impossible de désactiver les scripts.
+Les dégâts sont autorisés dans toute la région.
+Pour que les armes fonctionnent, les scripts doivent être autorisés.
+
+
+ Pour définir le point d'atterrissage, vous devez vous trouver à l'intérieur de la parcelle.
+
+
+ Veuillez saisir une adresse e-mail valide pour le(s) destinataire(s).
+
+
+ Veuillez saisir votre adresse e-mail.
+
+
+ Envoyer la photo avec le sujet ou le message par défaut ?
+
+
+
+ Erreur dans le traitement des données de la photo
+
+
+ Erreur d'encodage de la photo.
+
+
+ Une erreur est survenue lors du chargement du script compilé, suite au problème suivant : [REASON]
+
+
+ Une erreur est survenue lors du chargement de la capture d'écran destinée au rapport, suite au problème suivant : [REASON]
+
+
+ Pour vous connecter à [SECOND_LIFE], vous devez accepter les Conditions d'utilisation.
+
+
+ Impossible de mettre cet ensemble.
+Ce dossier ne contient pas d'habits, de parties du corps ni de pièces jointes.
+
+
+ Vous ne pouvez pas porter d'habits ni de parties du corps se trouvant dans la corbeille.
+
+
+ Vous ne pouvez pas porter cet article car il n'a pas encore été chargé. Veuillez réessayer dans une minute.
+
+
+ Oups! Vous avez oublié de fournir certaines informations.
+Vous devez saisir le nom et le prénom de votre avatar.
+
+Pour entrer dans [SECOND_LIFE], vous devez avoir un compte. Voulez-vous en créer un maintenant ?
+
+
+
+ Les petites annonces sont publiées à l'onglet Petites annonces de la section Recherche pendant une semaine.
+Rédigez votre annonce, puis cliquez sur Publier pour l'ajouter à la liste des annonces.
+Au moment de cliquer sur Publier, vous serez invité à payer des frais.
+Plus vous payez cher, plus votre annonce est visible dans la liste ainsi que dans les résultats de recherche de mots-clés.
+
+
+
+ Supprimer l'annonce [NAME] ?
+Une fois payés, les frais ne sont pas remboursables.
+
+
+
+ Enregistrer les changements dans l'annonce [NAME]Â ?
+
+
+
+ Supprimer le favori [PICK] ?
+
+
+
+ Aller à la page web de [SECOND_LIFE] réservée aux événements ?
+
+
+
+ Veuillez sélectionner une proposition.
+
+
+ Veuillez sélectionner un historique.
+
+
+ Souhaitez-vous réactiver tous les pop-ups que vous aviez désactivés ?
+
+
+
+ Voulez-vous désactiver tous les pop-ups qui peuvent être évités ?
+
+
+
+ Le cache sera vidé après le redémarrage de [SECOND_LIFE].
+
+
+ Le cache sera déplacé après le redémarrage de [SECOND_LIFE].
+Remarque : cela videra le cache.
+
+
+ Les paramètres du port prendront effet après le redémarrage de [SECOND_LIFE].
+
+
+ Le nouveau thème apparaîtra après le redémarrage de [SECOND_LIFE].
+
+
+ Aller à la page web de [SECOND_LIFE] pour voir le détail des enchères ou enchérir ?
+
+
+
+ Enregistrer les changements ?
+
+
+
+ L'enregistrement du geste a échoué.
+Il y a trop d'étapes dans ce geste.
+Essayez d'en supprimer quelques-unes.
+
+
+ L'enregistrement du geste a échoué. Veuillez réessayer dans une minute.
+
+
+ Le geste n'a pas pu être enregistré car l'objet ou l'inventaire de l'objet associé n'a pas été trouvé.
+L'objet est peut-être inaccessible ou a peut-être été supprimé.
+
+
+ Une erreur est survenue lors de l'enregistrement du geste, suite au problème suivant : [REASON]. Essayez d'enregistrer votre geste ultérieurement.
+
+
+ La note n'a pas pu être enregistrée car l'objet ou l'inventaire de l'objet associé n'a pas été trouvé.
+L'objet est peut-être inaccessible ou a peut-être été supprimé.
+
+
+ Une erreur est survenue lors de l'enregistrement de la note, suite au problème suivant : [REASON]. Essayez d'enregistrer votre note ultérieurement.
+
+
+ Impossible d'annuler tous les changements dans votre version du script.
+Souhaitez-vous charger la dernière version enregistrée sur le serveur ?
+(**Attention** Cette opération est irréversible.)
+
+
+
+ Une erreur est survenue lors de l'enregistrement du script, suite au problème suivant : [REASON]. Essayez d'enregistrer votre script ultérieurement.
+
+
+ Impossible d'enregistrer le script car l'objet qui le contient est introuvable.
+L'objet est peut-être inaccessible ou a peut-être été supprimé.
+
+
+ Une erreur est survenue lors de l'enregistrement du script compilé, suite au problème suivant : [REASON]. Essayez d'enregistrer votre script ultérieurement.
+
+
+ Impossible de lancer ou d'arrêter le script car l'objet qui le contient est introuvable.
+L'objet est peut-être inaccessible ou a peut-être été supprimé.
+
+
+ Impossible de télécharger le fichier
+
+
+ Impossible d'écrire le fichier [[FILE]]
+
+
+ Avertissement : vous n'avez pas la configuration système requise pour utiliser Second Life. Si vous continuez à utiliser Second Life, votre performance risque d'être moindre. Malheureusement, nous n'offrons aucune assistance pour les problèmes de configuration système.
+
+MINSPECS
+Voulez-vous visiter [_URL] pour plus d'informations ?
+
+ http://secondlife.com/support/sysreqs.php?lang=fr
+
+
+
+
+ Votre système contient une carte graphique que nous ne connaissons pas actuellement.
+Cela est souvent le cas avec le nouveau materiel qui n'a pas encore été testé.
+Vous pourrez probablement utiliser Second Life sans problème, mais vous devrez peut-être ajuster les paramètres de vos graphiques.
+(Menu Édition > Préférences > Graphiques).
+
+
+
+ [SECOND_LIFE] a planté lors de l'initialisation des drivers graphiques.
+La qualité des graphiques sera paramétrée sur Faible pour éviter certaines erreurs de driver fréquentes.
+Certaines fonctionnalités graphiques seront donc désactivées.
+Nous vous recommandons de mettre à jour les drivers de votre carte graphique.
+La qualité des graphiques peut être augmentée à la section Préférences > Graphiques
+
+
+ Le terraformage est interdit dans la région [REGION].
+
+
+ Vous n'êtes pas autorisé à copier cet objet et il disparaîtra de votre inventaire si vous le donnez. Souhaitez-vous vraiment offrir cet objet ?
+
+
+
+ Impossible de donner l'objet de l'inventaire.
+
+
+ Transaction annulée.
+
+
+ Impossible de donner plus de 42 objets au cours d'un seul transfert d'inventaire.
+
+
+ Vous n'êtes pas autorisé à transférer les objets sélectionnés.
+
+
+ Vous n'êtes pas autorisé à copier [COUNT] des objets sélectionnés. Ces objets disparaîtront de votre inventaire.
+Souhaitez-vous vraiment donner ces objets ?
+
+
+
+ Vous n'êtes pas autorisé à transférer le dossier sélectionné.
+
+
+ Geler cet avatar ?
+Il ou elle ne pourra temporairement plus bouger, chatter, ou interagir dans le Monde.
+
+
+
+ Geler [AVATAR_NAME] ?
+Il ou elle ne pourra temporairement plus bouger, chatter, ou interagir dans le Monde.
+
+
+
+ Expulser [AVATAR_NAME] de votre terrain ?
+
+
+
+ Expulser cet avatar de votre terrain ?
+
+
+
+ Expulser [AVATAR_NAME] de votre terrain ?
+
+
+
+ Erreur d'acquisition : trop d'objets sélectionnés.
+
+
+ Erreur d'acquisition : les objets sont répartis dans plus d'une région.
+Veuillez mettre tous les objets que vous souhaitez acquérir dans la même région.
+
+
+ [EXTRA]
+
+Aller sur [URL] pour obtenir des informations sur l'achat de devises ?
+
+
+
+ Impossible de lier ces [COUNT] objets.
+Vous pouvez lier un maximum de [MAX] objets.
+
+
+ Vous ne pouvez lier que des ensembles d'objets complets et vous devez choisir un minimum de deux objets.
+
+
+ Impossible de lier car vous n'avez pas le droit de modifier tous les objets.
+
+Assurez-vous que vous êtes le propriétaire de tous les objets et qu'aucun d'eux n'est verrouillé.
+
+
+ Impossible de lier car les objets n'ont pas tous le même propriétaire.
+
+Assurez-vous que vous êtes le propriétaire de tous les objets sélectionnés.
+
+
+ Pas d'extension pour le fichier suivant : '[FILE]'
+
+Assurez-vous que le fichier a l'extension correcte.
+
+
+ Extension de fichier [EXTENSION] invalide
+[VALIDS] attendu
+
+
+
+ Impossible de lire le fichier son chargé :
+[FILE]
+
+
+ Il semble que le fichier ne soit pas un fichier RIFF WAVEÂ :
+[FILE]
+
+
+ Il semble que le fichier ne soit pas un fichier audio PCM WAVEÂ :
+[FILE]
+
+
+ Le fichier contient un nombre de canaux invalide (doit être mono ou stéréo) :
+[FILE]
+
+
+ Le fichier ne semble pas être pris en charge (doit être 44,1 k) :
+[FILE]
+
+
+ Le fichier ne semble pas être pris en charge (doit faire 8 ou 16 bit) :
+[FILE]
+
+
+ Impossible de trouver les données dans l'en-tête WAV :
+[FILE]
+
+
+ Le fichier audio est trop long (10 secondes maximum) :
+[FILE]
+
+
+ Problème avec le fichier [FILE] :
+
+[ERROR]
+
+
+ Impossible d'ouvrir le fichier son compressé temporaire : [FILE]
+
+
+ Échec d'encodage Vorbis inconnu sur : [FILE]
+
+
+ Impossible d'encoder le fichier : [FILE]
+
+
+ Fichier ressource corrompu : [FILE]
+
+
+ Version de fichier ressource Linden inconnu : [FILE]
+
+
+ Impossible de créer le fichier de sortie : [FILE]
+
+
+ Actuellement, nous ne prenons pas en charge le chargement de lots de fichiers d'animation.
+
+
+ Impossible de charger [FILE] suite au problème suivant : [REASON]
+Veuillez réessayer ultérieurement.
+
+
+ Vous ne pouvez pas créer de repère ici car le propriétaire du terrain ne l'autorise pas.
+
+
+ Impossible d'effectuer les recompilations.
+Sélectionnez un objet avec un script.
+
+
+ Impossible d'effectuer les recompilations.
+
+Sélectionnez des objets qui ont des scripts et que vous pouvez modifier.
+
+
+ Impossible d'effectuer la réinitialisation.
+
+Veuillez sélectionner des objets avec des scripts.
+
+
+ Impossible d'effectuer la réinitialisation.
+
+Sélectionnez des objets qui ont des scripts et que vous pouvez modifier.
+
+
+ Impossible de définir les scripts sur « exécution ».
+
+Veuillez sélectionner des objets avec des scripts.
+
+
+ Impossible de définir les scripts sur « non-exécution ».
+
+Veuillez sélectionner des objets avec des scripts.
+
+
+ Aucun floater frontmost à sauvegarder.
+
+
+ Votre requête a été modifiée et les mots trops courts ont été supprimés.
+
+Recherche effectuée : [FINALQUERY]
+
+
+ Vos termes de recherche étaient trop courts et aucune recherche n'a été effectuée.
+
+
+ Impossible de téléporter.
+[REASON]
+
+
+ Nous avons rencontré des problèmes en essayant de vous téléporter. Vous devrez peut-être vous reconnecter avant de pouvoir être téléporté. Si vous continuez à recevoir ce message, veuillez consulter le Support à  la page suivante :
+www.secondlife.com/support
+
+
+ Nous avons rencontré des problèmes en essayant de vous téléporter. Vous devrez peut-être vous reconnecter avant de pouvoir être téléporté. Si vous continuez à recevoir ce message, veuillez consulter le Support à  la page suivante :
+www.secondlife.com/support
+
+
+ Désolé, la téléportation est bloquée actuellement. Veuillez réessayer dans un moment.
+Si vous ne parvenez toujours pas à être téléporté, déconnectez-vous puis reconnectez-vous pour résoudre le problème.
+
+
+ Désolé, le système n'a pas réussi à localiser la destination de votre repère.
+
+
+ Désolé, la connexion vers votre lieu de téléportation n'a pas abouti.
+Veuillez réessayer dans un moment.
+
+
+ Désolé, vous n'avez pas accès à cette destination.
+
+
+ Vos pieces-jointes ne sont pas encore arrivées. Attendez quelques secondes de plus ou déconnectez-vous puis reconnectez-vous avant d'essayer de vous téléporter.
+
+
+ Le trafic vers cette région est bouché en ce moment. Votre téléportation ne pourra pas avoir lieu immédiatement. Veuillez réessayer dans quelques minutes ou bien aller dans une zone moins fréquentée.
+
+
+ Désolé, votre demande de téléportation n'a pas abouti assez rapidement. Veuillez réessayer dans quelques minutes.
+
+
+ Désolé, votre demande pour passer dans une autre région n'a pas abouti assez rapidement. Veuillez réessayer dans quelques minutes.
+
+
+ Impossible de trouver la destination de la téléportation. Il est possible que cette destination soit temporairement indisponible ou qu'elle n'existe plus. Veuillez réessayer dans quelques minutes.
+
+
+ L'inventaire est temporairement indisponible.
+
+
+ Impossible de définir le propriétaire foncier :
+aucune parcelle sélectionnée.
+
+
+ Impossible de définir un propriétaire car la sélection couvre plusieurs régions. Veuillez sélectionner une zone plus petite et réessayer.
+
+
+ Cette parcelle est mise aux enchères. Définir un propriétaire annulerait les enchères, ce qui pourrait être gênant pour certains résidents si ces dernières ont commencé. Souhaitez-vous définir un propriétaire ?
+
+
+
+ Problème :
+Aucune parcelle sélectionnée.
+
+
+ Problème :
+Aucune région sélectionnée.
+
+
+ Impossible d'abandonner le terrain :
+aucune parcelle sélectionnée.
+
+
+ Impossible d'abandonner le terrain :
+la région est introuvable.
+
+
+ Impossible d'acheter le terrain :
+aucune parcelle sélectionnée.
+
+
+ Impossible d'acheter le terrain :
+la région dans laquelle il est situé est introuvable.
+
+
+ Vous ne pouvez pas fermer la fenêtre Acheter le terrain avant que Second Life n'estime le montant de cette transaction.
+
+
+ Cession du terrain impossible :
+aucune parcelle sélectionnée.
+
+
+ Cession du terrain impossible :
+aucun groupe sélectionné.
+
+
+ Cession du terrain impossible :
+la région dans laquelle il est situé est introuvable.
+Veuillez utiliser Aide > Signaler des bugs pour signaler le problème.
+
+
+ Cession du terrain impossible :
+plusieurs parcelles sélectionnées.
+
+Essayez de ne sélectionner qu'une seule parcelle.
+
+
+ Cette parcelle propose des flux média.
+Pour jouer des flux média, il faut avoir une connexion internet rapide.
+
+Jouer les flux média lorsqu'ils sont disponibles ?
+(Vous pourrez modifier cette option ultérieurement sous Préférences > Audio et vidéo.)
+
+
+
+ Cession du terrain impossible :
+rapport de propriété sur le point d'être envoyé par le serveur.
+
+Merci de réessayer.
+
+
+ Cession du terrain impossible :
+la cession de terrain est interdite dans la région [REGION].
+
+
+ Impossible d'abandonner le terrain :
+mise à jour des informations sur la parcelle sur le point d'être envoyée par le serveur.
+
+Veuillez réessayer dans quelques secondes.
+
+
+ Impossible d'abandonner le terrain :
+vous n'êtes pas le propriétaire des parcelles sélectionnées.
+
+Veuillez sélectionner une seule parcelle.
+
+
+ Impossible d'abandonner le terrain :
+vous n'avez pas le droit de libérer cette parcelle.
+Les parcelles qui vous appartiennent sont en vert.
+
+
+ Impossible d'abandonner le terrain :
+la région dans laquelle il est situé est introuvable.
+
+Veuillez utiliser Aide > Signaler un bug pour signaler le problème.
+
+
+ Impossible d'abandonner le terrain :
+le transfert de terrain est interdit dans la région [REGION].
+
+
+ Impossible d'abandonner le terrain :
+vous devez sélectionner une parcelle entière pour la libérer.
+
+Sélectionnez toute la parcelle ou divisez-la d'abord.
+
+
+ Vous vous apprêtez à libérer [AREA] m² de terrain.
+Si vous libérez cette parcelle, elle sera supprimée de votre patrimoine, mais vous ne recevrez pas de L$.
+
+Libérer ce terrain ?
+
+
+
+ Division du terrain impossible :
+
+aucune parcelle sélectionnée.
+
+
+ Division du terrain impossible :
+
+Toute la parcelle est sélectionnée.
+Sélectionnez une partie de la parcelle uniquement.
+
+
+ Si vous divisez ce terrain, cette parcelle sera partagée en deux et chaque parcelle pourra avoir ses propres paramètres. Après cette opération, certains paramètres reviendront aux paramètres par défaut.
+
+Diviser le terrain ?
+
+
+
+ Division du terrain impossible :
+la région dans laquelle il est situé est introuvable.
+
+Veuillez utiliser Aide > Signaler un bug pour signaler le problème.
+
+
+ Impossible de fusionner le terrain :
+la région dans laquelle il est situé est introuvable.
+
+Veuillez utiliser Aide > Signaler un bug pour signaler le problème.
+
+
+ Impossible de fusionner le terrain :
+aucune parcelle sélectionnée.
+
+
+ Impossible de fusionner le terrain :
+vous avez sélectionné une seule parcelle.
+
+Sélectionnez le terrain sur les deux parcelles.
+
+
+ Impossible de fusionner le terrain :
+vous devez sélectionner au moins deux parcelles.
+
+Sélectionnez le terrain sur les deux parcelles.
+
+
+ En fusionnant ce terrain, vous créerez une grande parcelle composée de toutes les parcelles se trouvant dans le rectangle sélectionné.
+Vous devrez réinitialiser le nom et les options de la nouvelle parcelle.
+
+Fusionner le terrain ?
+
+
+
+ Afficher les propriétaires :
+La couleur des parcelles indique le type de propriété.
+
+Vert = votre terrain
+Turquoise = le terrain de votre groupe
+Rouge = appartenant à d'autres
+Jaune = en vente
+Mauve = aux enchères
+Gris = public
+
+
+ Cette note doit être sauvegardée avant que l'objet ne puisse être copié ou visualisé. Enregistrer la note ?
+
+
+
+ Copier cet objet dans votre inventaire ?
+
+
+
+ Échec du changement de résolution (à [RESX], de [RESY])
+
+
+ Erreur : herbes non identifiées : [SPECIES]
+
+
+ Erreur : arbres non identifiés : [SPECIES]
+
+
+ Impossible de sauvegarder [NAME]. Pour pouvoir sauvegarder ce fichier, vous devez d'abord libérer de la mémoire sur votre ordinateur.
+
+
+ Impossible de sauvegarder le fichier [NAME] dans la base de données centrale.
+Cette erreur est généralement temporaire. Veuillez éditer et sauvegarder l'élément endossable à nouveau d'ici quelques minutes.
+
+Si le problème persiste, veuillez cliquer sur Aide | Signaler un bug dans le menu déroulant en indiquant les détails de votre connexion.
+
+
+ Vous avez été déconnecté(e) de [SECOND_LIFE] :
+ [MESSAGE]
+Vous pouvez afficher vos messages instantanés et votre chat en cliquant sur Afficher IM et chat. Sinon, cliquez sur Quitter pour quitter immédiatement [SECOND_LIFE].
+
+
+
+ Impossible d'acheter du terrain pour le groupe :
+Vous n'avez pas le droit d'acheter de terrain pour votre groupe.
+
+
+ Vous pouvez suivre les déplacements de vos amis sur la carte et voir lorsqu'ils se connectent.
+
+Proposer à [NAME] de devenir votre ami(e) ?
+
+
+
+ Vous pouvez suivre les déplacements de vos amis sur la carte et voir lorsqu'ils se connectent.
+
+Proposer à [NAME] de devenir votre ami(e) ?
+
+
+
+ Voulez-vous supprimer [NAME] de votre liste d'amis ?
+
+
+
+ Voulez-vous supprimer plusieurs résidents de votre liste d'amis ?
+
+
+
+ Êtes-vous certain de vouloir supprimer tous les objets scriptés appartenant à ** [AVATAR_NAME] ** sur tous les terrains des autres résidents dans cette région ?
+
+
+
+ Êtes-vous certain de vouloir supprimer tous les objets scriptés appartenant à ** [AVATAR_NAME] ** sur tous les terrains de cette région ?
+
+
+
+ Êtes-vous certain de vouloir supprimer tous les objets (scriptés ou pas) appartenant à ** [AVATAR_NAME] ** sur tous les terrains de cette région ?
+
+
+
+ Vous devez choisir un nom pour votre petite annonce.
+
+
+ Le coût de l'annonce doit être de [MIN_PRICE] L$ minimum.
+
+Veuillez saisir un montant plus élevé.
+
+
+ Au moins un des objets que vous avez sélectionnés est verrouillé.
+
+Êtes-vous certain de vouloir supprimer ces objets ?
+
+
+
+ Au moins un des objets que vous avez sélectionnés n'est pas copiable.
+
+Êtes-vous certain de vouloir supprimer ces objets ?
+
+
+
+ Au moins un des objets que vous avez sélectionnés ne vous appartient pas.
+
+Êtes-vous certain de vouloir supprimer ces objets ?
+
+
+
+ Au moins un des objets est verrouillé.
+Au moins un des objets n'est pas copiable.
+
+Êtes-vous certain de vouloir supprimer ces objets ?
+
+
+
+ Au moins un des objets est verrouillé.
+Au moins un des objets ne vous appartient pas.
+
+Êtes-vous certain de vouloir supprimer ces objets ?
+
+
+
+ Au moins un des objets n'est pas copiable.
+Au moins un des objets ne vous appartient pas.
+
+Êtes-vous certain de vouloir supprimer ces objets ?
+
+
+
+ Au moins un des objets est verrouillé.
+Au moins un des objets n'est pas copiable.
+Au moins un des objets ne vous appartient pas.
+
+Êtes-vous certain de vouloir supprimer ces objets ?
+
+
+
+ Au moins un des objets est verrouillé.
+
+Êtes-vous certain de vouloir prendre ces objets ?
+
+
+
+ Vous n'êtes pas le propriétaire de tous les objets que vous prenez.
+Si vous continuez, les droits accordés au prochain propriétaire seront activés et vous risquez de ne plus pouvoir modifier ou copier les objets.
+
+Êtes-vous certain de vouloir prendre ces objets ?
+
+
+
+ Au moins un des objets est verrouillé.
+Vous n'êtes pas le propriétaire de tous les objets que vous prenez.
+Si vous continuez, les droits accordés au prochain propriétaire seront activés et vous risquez de ne plus pouvoir modifier ou copier les objets.
+Par contre, vous pouvez prendre les objets sélectionnés.
+
+Êtes-vous certain de vouloir prendre ces objets ?
+
+
+
+ Impossible d'acheter le terrain car la sélection couvre plusieurs régions.
+
+Veuillez sélectionner une zone plus petite et réessayer.
+
+
+ Si vous cédez ce terrain, le groupe devra avoir les moyens de le prendre en charge.
+Le prix de la vente du terrain n'est pas remboursé par le propriétaire. Si la parcelle que vous cédez se vend, le prix de la vente sera divisé en parts égales parmi les membres du groupe.
+
+Céder ces [AREA] m² de terrain au groupe [GROUP_NAME] ?
+
+
+
+ Si vous cédez ce terrain, le groupe devra avoir les moyens de le prendre en charge.
+La cession incluera une contribution de terrain simultanée au groupe de [NAME].
+Le prix de la vente du terrain n'est pas remboursé par le propriétaire. Si la parcelle que vous cédez se vend, le prix de la vente sera divisé en parts égales parmi les membres du groupe.
+
+Céder ces [AREA] m² de terrain au groupe [GROUP_NAME] ?
+
+
+
+ Les paramètres d'affichage sont au niveau le plus sûr, comme vous l'aviez indiqué.
+
+
+ Vos paramètres d'affichage ont été réglés avec une marge de sécurité en fonction de votre configuration système.
+
+
+ [ERROR_MESSAGE]
+
+
+ L'emplacement [TYPE] n'est pas disponible actuellement. [HELP]
+Vous avez été déplacé dans une région voisine.
+
+
+ Vos habits sont toujours en train d'être téléchargés.
+Vous pouvez utiliser [SECOND_LIFE] sans problème, les autres résidents vous voient normalement.
+
+
+
+ L'installation de [SECOND_LIFE] est terminée.
+
+S'il s'agit de la première fois que vous utilisez [SECOND_LIFE], vous devrez créer un compte avant de pouvoir vous connecter.
+Retourner sur www.secondlife.com pour créer un nouveau compte ?
+
+
+
+ Vous avez des problèmes à vous connecter. Il peut s'agir d'un problème avec votre connexion internet ou les serveurs de Second Life.
+
+Nous vous conseillons de vérifier votre connexion Internet et de réessayer dans quelques minutes, de cliquer sur Aide, ou bien de cliquer sur Téléporter pour être téléporté vers votre domicile.
+
+
+
+ Votre personnage va apparaître dans un moment.
+
+Pour marcher, utilisez les flèches de direction.
+Appuyez sur F1 pour obtenir de l'aide ou en savoir plus sur [SECOND_LIFE].
+Choisissez un avatar homme ou femme.
+Vous pourrez revenir sur votre décision plus tard.
+
+
+
+ [NAME] [PRICE] L$ Vous n'avez pas suffisamment de L$ pour faire cela.
+
+
+ Vous avez reçu le droit de modifier les objets de [NAME].
+
+
+ Vous n'avez plus le droit de modifier les objets de [NAME].
+
+
+ Cela videra le cache cartographique de cette région.
+Cela n'est vraiment utile que pour faire du débugage.
+(En production, attendez 5 minutes. Les cartes seront mises à jour après reconnexion.)
+
+
+
+ Impossible d'acheter plus d'un objet à la fois. Veuillez ne sélectionner qu'un seul objet.
+
+
+ Impossible de copier les contenus de plus d'un objet à la fois.
+Veuillez ne sélectionner qu'un seul objet.
+
+
+
+ Téléporter tous les résidents de cette région chez eux ?
+
+
+
+ Etes-vous certain de vouloir renvoyer les objets appartenant à [USER_NAME] ?
+
+
+
+ Impossible de definir les textures de la région :
+La texture du terrain [TEXTURE_NUM] a une profondeur invalide ([TEXTURE_BIT_DEPTH]).
+
+Remplacer la texture [TEXTURE_NUM] avec une image de 24 bits, 512 X 512, ou plus petite, puis cliquez à nouveau sur Appliquer.
+
+
+ Impossible de definir les textures de la région :
+La texture du terrain [TEXTURE_NUM] est trop volumineuse ([TEXTURE_SIZE_X] X [TEXTURE_SIZE_Y]).
+
+Remplacer la texture [TEXTURE_NUM] avec une image de 24 bits, 512 X 512, ou plus petite, puis cliquez à nouveau sur Appliquer.
+
+
+ Le chargement a commencé. Cela va prendre une à deux minutes,
+suivant votre vitesse de connexion.
+
+
+ Etes-vous sûr(e) de vouloir figer le relief actuel, en faire le point central des limites d'élévation/abaissement de relief et la valeur par défaut du bouton Annuler modification ?
+
+
+
+ Vous ne pouvez pas autoriser plus de [MAX_AGENTS] résidents.
+
+
+ Vous ne pouvez pas bannir plus de [MAX_BANNED] résidents.
+
+
+ Echec lors de la tentative d'ajout de [NUM_ADDED] agents :
+Dépasse la limite fixée à [MAX_AGENTS] [LIST_TYPE] de [NUM_EXCESS].
+
+
+ Vous ne pouvez pas avoir plus que [MAX_GROUPS] groupes autorisés.
+
+
+
+ Vous ne pouvez avoir que [MAX_MANAGER] gérants de domaine.
+
+
+ Impossible d'ajouter le propriétaire du domaine à la liste des résidents bannis.
+
+
+ Impossible de changer d'apparence jusqu'à ce que les habits et la silhouette soient chargés.
+
+
+ Le nom de votre petite annonce doit commencer par un chiffre ou une lettre (A à Z). La ponctuation n'est pas autorisée.
+
+
+ Cet objet n'est pas à vendre.
+Veuillez choisir un objet à vendre et réessayer.
+
+
+ Chargement du fichier de terrain raw effectué vers :
+[DOWNLOAD_PATH].
+
+
+ Une nouvelle version de [SECOND_LIFE] est disponible.
+[MESSAGE]
+Pour utiliser [SECOND_LIFE] vous devez télécharger cette mise à jour.
+
+
+
+ Une mise à jour de [SECOND_LIFE] est disponible.
+[MESSAGE]
+Cette mise à jour n'est pas requise mais si vous voulez une meilleure performance et plus de stabilité, nous vous recommandons de l'installer.
+
+
+
+ Une mise à jour de [SECOND_LIFE] est disponible.
+[MESSAGE]
+Cette mise à jour n'est pas requise mais si vous voulez une meilleure performance et plus de stabilité, nous vous recommandons de l'installer.
+
+
+
+ Une nouvelle version de [SECOND_LIFE] est disponible.
+[MESSAGE]
+Pour utiliser [SECOND_LIFE] vous devez télécharger cette mise à jour.
+
+Télécharger vers le dossier Applications ?
+
+
+
+ Une mise à jour de [SECOND_LIFE] est disponible.
+[MESSAGE]
+Cette mise à jour n'est pas requise mais si vous voulez une meilleure performance et plus de stabilité, nous vous recommandons de l'installer.
+
+Télécharger vers le dossier Applications ?
+
+
+
+ Une mise à jour de [SECOND_LIFE] est disponible.
+[MESSAGE]
+Cette mise à jour n'est pas requise mais si vous voulez une meilleure performance et plus de stabilité, nous vous recommandons de l'installer.
+
+Télécharger vers le dossier Applications ?
+
+
+
+ Si vous cédez cet objet, le groupe :
+* recevra les L$ versés pour l'objet ;
+
+
+
+ Ouvrir votre navigateur web système pour afficher ce contenu ?
+
+
+
+ Aller sur www.secondlife.com pour gérer votre compte ?
+
+
+
+ Pour apprendre à signaler correctement des bugs, consultez le Wiki de [SECOND_LIFE].
+
+
+
+ Pour apprendre à signaler un problème de sécurité, consultez le Wiki de [SECOND_LIFE].
+
+
+
+ Consultez le Wiki sur l'Assurance Qualité de [SECOND_LIFE].
+
+
+
+ Pour signaler des bugs et autres problèmes, utilisez le JIRA de [SECOND_LIFE].
+
+
+
+ Pour apprendre à utiliser JIRA, consultez le Wiki de [SECOND_LIFE].
+
+
+
+ Visitez le blog officiel des Lindens pour les dernières nouvelles et informations.
+
+
+
+ Consulter le Guide guide pour l'écriture de scripts pour obtenir de l'aide ?
+
+
+
+ Consulter le Wiki LSL pour de l'aide sur les scripts ?
+
+
+
+ Êtes-vous certain de vouloir renvoyer les objets sélectionnés à leur propriétaire ? Les objets donnés transférables seront renvoyés à leur ancien propriétaire.
+
+*Avertissement* Les objets non transférables seront supprimés !
+
+
+
+ Vous êtes actuellement membre du groupe [GROUP].
+Quitter le groupe ?
+
+
+
+ Souhaitez-vous vraiment éjecter tous les utilisateurs de la grille ?
+
+
+
+ Désolé, vous ne pouvez pas ignorer un Linden.
+
+
+
+ Vous ne pouvez pas démarrer des enchères sur une parcelle déjà en vente. Si vous êtes certain de vouloir démarrer des enchères, mettez fin à la vente.
+
+
+ Vous ignorez déjà ce résident.
+
+
+
+ Si vous supprimez des contenus, vous risquez d'endommager l'objet. Souhaitez-vous supprimer cet objet ?
+
+
+
+ Impossible d'offrir une carte de visite actuellement. Veuillez réessayer dans un moment.
+
+
+
+ Impossible de proposer votre amitié actuellement. Veuillez réessayer dans un moment.
+
+
+
+ Mode occupé activé.
+Les chats et les messages instantanés ne s'afficheront pas. Vous répondrez aux messages instantanés en utilisant la réponse automatique que vous avez créée. Toutes les propositions de téléportation seront refusées. Tous objets envoyés iront dans la corbeille.
+
+
+
+ Vous appartenez déjà à un nombre élevé de groupes et nous ne pouvez pas en rejoindre un nouveau. Avant de pouvoir rejoindre ce groupe, vous devez en quitter un ou refuser cette offre.
+Pour quitter un groupe, sélectionnez l'option Groupe dans le menu Éditer.
+[NAME] vous invite à rejoindre un groupe.
+[INVITE]
+
+
+
+ Éjecter cet utilisateur avec quel message ?
+
+
+
+ Éjecter tous les résidents actuellement en ligne avec quel message ?
+
+
+
+ Geler cet utilisateur avec quel message ?
+
+
+
+ Dégeler cet utilisateur avec quel message ?
+
+
+
+ Proposez une téléportation avec le message suivant ?
+
+
+
+ Demander au résident de venir vous rejoindre ?
+
+
+
+ Êtes-vous certain de vouloir être téléporté ?
+
+
+
+ Saisissez un message court qui sera envoyé à tous les résidents se trouvant actuellement sur votre domaine.
+
+
+
+ Vous vous apprêtez à modifier un domaine appartenant aux Lindens (continent, zone réservée aux ados, orientation etc.).
+
+Cela est extrêmement délicat car l'expérience des résidents est en jeu. Sur le continent, cela modifiera des milliers de régions et sera difficile à digérer pour le serveur.
+
+Continuer ?
+
+
+
+ Vous vous apprêtez à modifier la liste d'accès à un domaine appartenant aux Linden (continent, zone réservée aux ados, orientation etc.).
+
+Cette action est délicate et ne doit être effectuée que pour appeler le hack autorisant des objets/L$ à être transférés à l'intérieur/extérieur de la grille.
+Cette action modifiera des milliers de régions et sera difficile à digérer pour le serveur.
+
+
+
+ Ajouter à la liste des résidents autorisés uniquement pour ce domaine ou pour [ALL_ESTATES] ?
+
+
+
+ Supprimer de la liste des résidents autorisés uniquement pour ce domaine ou pour [ALL_ESTATES] ?
+
+
+
+ Ajouter à la liste des groupes autorisés uniquement pour ce domaine ou pour [ALL_ESTATES] ?
+
+
+
+ Supprimer de la liste des groupes autorisés uniquement pour ce domaine ou pour [ALL_ESTATES] ?
+
+
+
+ Refuser l'accès à ce domaine uniquement ou à [ALL_ESTATES] ?
+
+
+
+ Supprimer ce résident de la liste des résidents bannis pour ce domaine uniquement ou pour [ALL_ESTATES] ?
+
+
+
+ Ajouter un gérant de domaine pour ce domaine uniquement ou pour [ALL_ESTATES] ?
+
+
+
+ Supprimer le gérant de domaine pour ce domaine uniquement ou pour [ALL_ESTATES] ?
+
+
+
+ Éjecter [EVIL_USER] de ce domaine ?
+
+
+
+ Êtes-vous certain de vouloir modifier le règlement du domaine ?
+
+
+
+ Votre catégorie d'accès ne vous autorise pas à pénétrer dans cette région. Cela vient peut-être du fait qu'il manquait des informations pour valider votre âge.
+
+Vérifiez que vous avez la toute dernière version du client et consultez les pages d'aide pour savoir comment accéder aux zones ayant ce niveau d'accès.
+
+
+
+ Votre catégorie d'accès ne vous permet pas de pénétrer dans cette région.
+
+Souhaitez-vous en savoir plus sur les différentes catégories d'accès ?
+
+ http://wiki.secondlife.com/wiki/Pr%C3%A9sentation_des_cat%C3%A9gories_de_contenu_(KB)
+
+
+
+
+ Votre catégorie d'accès ne vous permet pas de pénétrer dans cette région.
+
+
+ Votre catégorie d'accès ne vous permet pas de pénétrer dans cette région.
+
+En cliquant sur Modifier les préférences, vous pourrez changer votre catégorie d'accès et pénétrer dans la région. À partir de maintenant, vous pouvez rechercher et accéder au contenu [REGIONMATURITY]. Vous pouvez modifier ce paramètre à partir du menu Édition > Préférences... > Général.
+
+
+
+ Votre catégorie d'accès ne vous permet pas de réclamer cette région. Cela vient peut-être du fait qu'il manquait des informations pour valider votre âge.
+
+Vérifiez que vous avez la toute dernière version du client et consultez les pages d'aide pour savoir comment accéder aux zones ayant ce niveau d'accès.
+
+
+
+ Votre catégorie d'accès ne vous permet pas de réclamer cette région.
+
+Souhaitez-vous en savoir plus sur les différentes catégories d'accès ?
+
+ http://wiki.secondlife.com/wiki/Pr%C3%A9sentation_des_cat%C3%A9gories_de_contenu_(KB)
+
+
+
+
+ Votre catégorie d'accès ne vous autorise pas à réclamer cette région.
+
+
+ Votre catégorie d'accès ne vous permet pas de réclamer cette région.
+
+En cliquant sur Modifier les préférences, vous pourrez changer votre catégorie d'accès et pénétrer dans la région. À partir de maintenant, vous pouvez rechercher et accéder au contenu [REGIONMATURITY]. Vous pouvez modifier ce paramètre à partir du menu Édition > Préférences... > Général.
+
+
+
+ Votre catégorie d'accès ne vous permet pas d'acheter cette région. Cela vient peut-être du fait qu'il manquait des informations pour valider votre âge.
+
+Vérifiez que vous avez la toute dernière version du client et consultez les pages d'aide pour savoir comment accéder aux zones ayant ce niveau d'accès.
+
+
+
+ Votre catégorie d'accès ne vous permet pas d'acheter cette région.
+
+Souhaitez-vous en savoir plus sur les différentes catégories d'accès ?
+
+ http://wiki.secondlife.com/wiki/Pr%C3%A9sentation_des_cat%C3%A9gories_de_contenu_(KB)
+
+
+
+
+ Votre catégorie d'accès ne vous permet pas d'acheter cette région.
+
+
+ Votre catégorie d'accès ne vous autorise pas à acheter cette région.
+
+En cliquant sur Modifier les préférences, vous pourrez changer votre catégorie d'accès et pénétrer dans la région. À partir de maintenant, vous pouvez rechercher et accéder au contenu [REGIONMATURITY]. Vous pouvez modifier ce paramètre à partir du menu Édition > Préférences... > Général.
+
+
+
+ "Vous avez sélectionné trop de prims. Veuillez sélectionner au maximum [MAX_PRIM_COUNT] prims et réessayer."
+
+
+ Problème lors de l'importation du règlement du domaine.
+
+
+
+ Problèmes lors de l'ajout d'un nouveau gérant de domaine. Il est possible qu'au moins un des domaines ait une liste de gérants complète.
+
+
+ Problème lors de l'ajout à la liste de ce domaine. Il est possible qu'au moins un des domaines ait une liste complète.
+
+
+ Impossible de charger les données de la note actuellement.
+
+
+ Permissions pour afficher la note insuffisantes.
+
+
+
+ Les références de la note ne se trouvent pas dans la base de données.
+
+
+
+ Rappel : les frais pour passer des petites annonces ne sont pas remboursables.
+
+Publier cette petite annonce maintenant pour [AMOUNT] L$Â ?
+
+
+
+ Cette petite annonce contient-elle du contenu Mature ?
+
+
+
+ Ce groupe contient-il du contenu Mature ?
+
+
+
+ Souhaitez-vous vraiment redémarrer cette région dans 2 minutes ?
+
+
+
+ Saisissez une message qui sera envoyé à tous les résidents présents dans cette région.
+
+
+
+ Si vous cochez cette case, les propriétaires ne pourront plus terraformer leur terrain, quel que soit le paramétrage individuel des parcelles.
+
+Valeur par défaut : désactivé
+
+
+ Si vous cochez cette case, les résidents ne pourront plus voler dans cette région, quel que soit le paramétrage individuel des parcelles.
+
+Valeur par défaut : désactivé
+
+
+ L'outil Modifications groupées des droits vous permet de modifier rapidement et simultanément les droits dans les contenus des objets séléctionnés. Notez toutefois que vous paramétrez uniquement les droits des objets dans les Contenus des objets sélectionnés, et non les droits sur les objets eux-mêmes.
+
+Notez aussi que les droits ne s'appliquent pas aux contenus imbriqués dans les objets contenus. Votre requête ne porte que sur les objets de premier niveau.
+
+Vous pouvez sélectionner quels types d'objets modifier à la section Types de contenu. Les photos sont incluses quand vous sélectionnez Textures.
+
+* Cet outil ne vous permettra de changer que les droits des objets que vous êtes autorisés à modifier.
+* Vous ne pouvez pas accorder de droits que vous n'avez pas au prochain propriétaire.
+* Les droits accordés au prochain propriétaire de sont que des requêtes. Si un objet ne peut recevoir tous les nouveaux droits, aucun de ses droits ne changera.
+
+Lorsque vous êtes prêt à modifier tous les droits, cliquez sur Appliquer et attendez de voir s'afficher les résultats.
+
+Si vous fermez la fenêtre des modifications groupées alors que les droits sont en train d'être modifiés, vous suspendez l'opération.
+
+
+ Si vous cochez cette case, les résidents peuvent subir des dégâts dans toute la région quel que soit le paramétrage individuel des parcelles. Si la case n'est pas cochée, les propriétaires sont libres d'activer ou non cette option sur leur parcelle.
+
+Valeur par défaut : désactivé
+
+
+ Définit le nombre maximum d'avatars autorisés dans cette région.
+La performance peut varier en fonction du nombre d'avatars présents.
+
+Valeur par défaut : 40
+
+
+ Le bonus objet est le multiplicateur de prims autorisées sur une parcelle donnée. L'échelle autorisée est comprise entre 1 et 10. Lorsque ce chiffre est de 1, chaque parcelle de 512 m² peut contenir 117 prims. S'il est de 2, chaque parcelle peut contenir 234 prims, ou deux fois plus, et ainsi de suite. Le nombre maximum de prims autorisées dans une région est de 15 000, quel que soit le bonus objet. Attention : si vous définissez un bonus objet et décidez ensuite de le diminuer, cela peut entraîner la suppression ou le renvoi d'objets.
+
+Valeur par défaut : 1.0
+
+
+ Définit la catégorie d'accès de la région, telle qu'affichée dans la barre de menu en haut du client et dans les infobulles de la carte lorsque vous passez votre curseur au-dessus de cette région. Ce paramètre affecte aussi l'accès à cette région et les résultats de recherche. Les autres résidents ne peuvent pénétrer que dans les régions ou n'afficher que les résultats de recherche ayant la même catégorie d'accès que celle indiquée dans leurs Préférences.
+
+Ce changement n'apparaîtra pas immédiatement sur la carte.
+
+
+ Cette case permet de restreindre les bousculades dans toute une région.
+Lorsqu'elle est cochée, les résidents ne peuvent être bousculés que par d'autres résidents ou par le propriétaire de la parcelle.
+(Bousculer fait référence à la fonction LSL llPushObjet().)
+
+Valeur par défaut : désactivé
+
+
+ Cette case permet de choisir si les parcelles n'appartenant pas au gérant du domaine peuvent ou pas être fusionnées ou divisées.
+Si cette case n'est pas cochée :
+ * Seuls les propriétaires ou gérants de domaine peuvent fusionner ou diviser des parcelles.
+ * Ils ne peuvent fusionner ou diviser que les parcelles du propriétaire,
+ ou celles d'un groupe dans lequel ils ont les pouvoirs nécessaires.
+ Si cette case est cochée :
+ * Tous les propriétaires peuvent fusionner ou diviser leurs parcelles.
+ * Pour les parcelles appartenant à un groupe, les membres avec les pouvoirs nécessaires peuvent fusionner ou diviser les parcelles.
+
+Valeur par défaut : activée
+
+
+ Si vous cochez cette option, les propriétaires ne pourront pas faire apparaître leurs parcelles dans les résultats de recherche.
+Valeur par défaut : désactivé
+
+
+ La catégorie d'accès de cette région a été mise à jour.
+Ce changement n'apparaîtra pas immédiatement sur la carte.
+
+
+ Les propriétaires et gérants de domaine peuvent vendre n'importe quel terrain appartenant au propriétaire du domaine.
+Si cette option n'est pas cochée, les propriétaires ne peuvent pas revendre leur parcelle.
+Si cette option est cochée, les propriétaires sont libres de revendre leur parcelle.
+
+Valeur par défaut : désactivé
+
+
+ Lorsque la performance d'une région est faible, cela peut venir d'un script. Ouvrez la section Statistiques (Ctrl-Maj-1) et vérifiez le FPS Physique (Physics FPS) de la section Simulateur.
+Si le FPS est en dessous de 45, ouvrez la section Time située en fin de liste. Si le Script Time est au dessus de 25ms, cliquez sur le bouton Afficher les objets scriptés les plus consommateurs. Vous verrez le nom et l'emplacement des scripts éventuellement à l'origine du problème.
+
+Si vous cochez la case Désactiver les scripts et que vous appuyez sur Appliquer, tous les scripts de cette région seront temporairement désactivés. Vous devrez peut-être faire cela le temps d'arriver à l'endroit su script en cause. Une fois sur place, assurez-vous que le script est bien à l'origine du problème. Pour cela, vous devrez peut-être contacter le propriétaire du script ou bien supprimer ou renvoyer l'objet.
+Décochez la case Désactiver le script, puis cliquez sur Appliquer pour réactiver tous les scripts dans la région.
+
+Valeur par défaut : désactivé
+
+
+ Des objets physiques peuvent fortement réduire les performances d'une région.
+Ouvrez la barre de statistiques (Ctrl-Maj-1) et vérifiez le FPS Physique (Physics FPS) de la section Simulateur.
+Si le FPS est en dessous de 45, ouvrez la section Time située en fin de liste. Si le Script Time est au dessus de 25ms, cliquez sur le bouton Afficher les collisions les plus consommatrices.
+Vous verrez le nom et l'emplacement des objets physiques éventuellement à l'origine du problème.
+
+Si vous décochez la case Désactiver les collisions et que vous cliquez sur Appliquer, toutes les collisions entre objets seront désactivées. Vous pourrez avoir besoin de cette fonction le temps d'arriver à l'emplacement des objets en cause. Une fois sur place, vérifiez que l''objet est bien responsable du problème (entre-t-il sans cesse en collision avec d'autres objets ?) Pour cela, vous devrez peut-être contacter le propriétaire de l'objet ou bien supprimer ou renvoyer l'objet.
+Décochez la case Désactiver les collisions, puis cliquez sur le bouton Appliquer pour réactiver les collisions dans la région.
+
+Valeur par défaut : désactivé
+
+
+ L'option Désactiver la physique est similaire à l'option Désactiver les collisions sauf qu'elle englobe tous les effets liés à la physique. Cela signifie que les objets n'entreront plus en collision et que les avatars ne pourront plus bouger.
+
+Vous ne devriez utiliser cette option que lorsque l'option Désactiver les collisions n'améliore pas sufisamment la performance de la région pour résoudre un problème de physique ou trouver les objets entrant en collision.
+
+Une fois que vous avez fini, n'oubliez pas de réactiver les propriétés physiques sinon les avatars ne pourront pas bouger.
+
+Valeur par défaut : désactivé
+
+
+ Montre une liste des objets générant le plus de collisions avec d'autres objets. Ces objets peuvent ralentir les performances de votre région. Sélectionnez Affichage > Statistiques et regardez sous Simulator > Time > Sim Time (Physics) pour voir si le temps du moteur physique est au dessus de 20 ms.
+
+
+ Dresse une liste des objets dont les scripts consomment le plus de ressources. Ces objets peuvent ralentir la performance de votre région.
+Sélectionnez Affichage > Statistiques et regardez sous Simulator > Time > Script Time pour voir si le temps des scripts est au dessus de 25 ms.
+
+
+ Redémarre le serveur en charge de la région après deux minutes d'avertissement. Tous les résidents dans cette région seront déconnectés. Les données de la région seront sauvegardées et réapparaîtront au bout de 90 secondes.
+
+Le redémarrage de la région ne permet pas de résoudre la plupart des problèmes de performance. Les redémarrages ne doivent avoir lieu qu'en dernier recours.
+
+
+ Il s'agit de la hauteur de l'eau en mètres.
+Si ce paramètre est différent de 20 et que vous avez de l'eau adjacente au bord du monde ou de l'eau « vide », il y aura un espace vide visible.
+
+
+Valeur par défaut : 20
+
+
+ Il s'agit de la distance (en mètres) à laquelle les propriétaires de parcelle peuvent surélever leur terrain, par rapport au terrain « figé » dont la hauteur est fixée par défaut.
+
+Valeur par défaut : 4
+
+
+ Il s'agit de la distance (en mètres) à laquelle les propriétaires de parcelle peuvent abaisser leur terrain, par rapport au terrain « figé » dont la hauteur est fixée par défaut.
+
+Valeur par défaut : -4
+
+
+ Ce bouton permet de charger un fichier .RAW dans la région où vous vous trouvez.
+Ce fichier doit avoir les bonnes dimensions (RGB, 256 x 256) et 13 canaux. Le meilleur moyen de créer un fichier terrain est de télécharger le fichier RAW existant. Un bon moyen est de modifier le canal rouge (hauteur terrain) et de le charger.
+
+Le chargement peut prendre jusqu'à 45 secondes. Veuillez noter que le chargement d'un fichier terrain ne déplacera pas les objets qui se trouvent sur le terrain, mais seulement le terrain et les droits associés aux parcelles. Certains objets risquent d'aller sous la terre.
+
+Pour en savoir plus sur la modification de la hauteur des terrains d'une région, consultez l'Aide F1.
+
+
+ Ce bouton permet de télécharger un fichier contenant les données relatives à la hauteur du terrain, dimensions de la parcelle, les mises en vente ainsi que certains droits relatifs à la parcelle pour cette région. Lorsque vous ouvrez le fichier avec un programme tel que Photoshop, vous devez indiquer les dimensions du document qui sont les suivantes : RGB, 256 x 256 avec 13 canaux. Le fichier terrain ne peut pas être ouvert différemment.
+
+Pour en savoir plus sur la modification de la hauteur des terrains d'une région, consultez l'Aide F1.
+
+
+ Si vous cochez cette case, la position du soleil dans cette région sera la même que dans le reste du domaine.
+
+Valeur par défaut : activé
+
+
+ Si vous cochez cette case, la position du soleil se fixe sur celle du curseur Phase et le soleil arrête de bouger.
+
+Valeur par défaut : désactivé
+
+
+ Ce bouton permet d'enregistrer la forme actuelle du terrain comme nouvelle forme par défaut pour la région. Une fois figé, le terrain peut reprendre la forme enregistrée à partir de l'option Rétablir le terrain à la section Modifer le terrain. Le terrain figé est aussi le point de référence pour les limites de surélévation et d'abaissement.
+
+
+ Un gérant de domaine est un résident chargé du contrôle de la région et des paramètres du domaine. Un gérant de domaine peut modifier tous les paramètres, mais ne peut pas charger, télécharger ni figer de terrain. Un des pouvoirs principaux du gérant est de bannir ou d'autoriser un résident sur votre domaine.
+
+Seuls les propriétaires de domaine peuvent ajouter ou supprimer des gérants de domaine. Lorsque vous choisissez un gérant de domaine, prenez un résident en qui vous avez confiance car vous serez en quelque sorte responsable de ses actions.
+
+
+ Cette case permet au soleil de votre domaine de suivre la position du soleil sur les domaines Linden du continent.
+
+Valeur par défaut : activé
+
+
+ Si vous cochez cette case, la position du soleil se fixe sur celle du curseur Phase et le soleil arrête de bouger.
+
+
+ Cette option vous permet de choisir quels résidents d'autres domaines peuvent pénétrer sur votre domaine sans devoir être ajoutés à la liste d'accès.
+
+Valeur par défaut : activé
+
+
+ Lorsqu'elle est cochée, cette option permet aux résidents d'être téléportés à n'importe quel endroit sur votre domaine. Lorsque cette option n'est pas cochée, les résidents sont téléportés au téléhub le plus proche.
+
+Valeur par défaut : désactivé
+
+
+ L'accès à ce domaine sera réservé aux résidents figurant dans cette liste et aux groupes ci-dessous.
+Cette option n'est disponible que lorsque la case Accès public est décochée.
+
+
+ L'accès à ce domaine sera réservé aux groupes figurant dans cette liste et aux résidents ci-dessous. Cette option n'est disponible que lorsque la case Accès public est décochée.
+
+
+ Si vous utilisez une adresse e-mail valide, les rapports d'infraction de ce domaine iront à cette adresse.
+Si vous laissez ce champ vide, les rapports d'infraction seront envoyés à Linden Lab uniquement.
+
+
+ Les résidents figurant sur cette liste ne peuvent pas pénétrer sur votre domaine, quels que soient les autres paramètres.
+
+
+ Les parcelles de ce domaine peuvent avoir leurs propres canaux vocaux, ce qui permet aux résidents de communiquer avec leurs voisins.
+
+Valeur par défaut : désactivé
+
+
+ Cette version de Second Life n'est pas compatible avec la fonctionnalité de chat vocal dans cette région. Vous devez mettre à jour Second Life pour que le chat vocal fonctionne correctement.
+
+
+ Définir un règlement pour le domaine vous permet de vendre les parcelles de ce domaine. S'il n'y a pas de règlement, vous ne pouvez pas vendre le terrain. Si vous ne souhaitez pas indiquer de règlement ou donner de conseils aux acheteurs, laissez la section relative au règlement vide.
+
+Un règlement sert à communiquer des règles, des lignes directrices ou informations culturelles, ou simplement à expliquer vos attentes à un acheteur potentiel. Il peut s'agir de régulations concernant la construction, les options de paiement ou tout autre information que vous souhaitez faire passer au résident avant que l'achat n'ait lieu.
+
+L'acheteur est tenu d'accepter le règlement en cochant une case avant de pouvoir finaliser l'achat. Les règlements, lorsqu'ils existent, apparaissent toujours dans la boîte de dialogue À propos du terrain.
+
+
+ Impossible d'acheter simultanément des objets de propriétaires différents.
+Veuillez ne sélectionner qu'un seul objet.
+
+
+ Impossible d'acheter les contenus de plus d'un objet à la fois.
+Veuillez ne sélectionner qu'un seul objet.
+
+
+ Impossible d'acheter simultanément des objets de propriétaires différents.
+Veuillez ne sélectionner qu'un seul objet.
+
+
+ Acheter l'objet original pour [PRICE] L$ Ã [PRICE] ?
+Vous deviendrez le propriétaire de cet objet.
+Vous pourrez :
+ Modifier : [MODIFYPERM]
+ Copier : [COPYPERM]
+ Revendre ou donner : [RESELLPERM]
+
+
+
+ Acheter l'objet original pour [PRICE] L$Â ?
+Vous deviendrez le propriétaire de cet objet.
+Vous pourrez :
+ Modifier : [MODIFYPERM]
+ Copier : [COPYPERM]
+ Revendre ou donner : [RESELLPERM]
+
+
+
+ Acheter une copie pour [PRICE] L$ Ã [OWNER] ?
+L'objet sera copié dans votre inventaire.
+Vous pourrez :
+ Modifier : [MODIFYPERM]
+ Copier : [COPYPERM]
+ Revendre ou donner : [RESELLPERM]
+
+
+
+ Acheter une copie pour [PRICE] L$ ?
+L'objet sera copié dans votre inventaire.
+Vous pourrez :
+ Modifier : [MODIFYPERM]
+ Copier : [COPYPERM]
+ Revendre ou donner : [RESELLPERM]
+
+
+
+ Acheter des contenus pour [PRICE] L$ Ã [OWNER] ?
+Ils seront copiés dans votre inventaire.
+
+
+
+ Acheter des contenus pour [PRICE] L$ ?
+Ils seront copiés dans votre inventaire.
+
+
+
+ Suite à cette transaction, vous allez :
+[ACTION]
+
+Êtes-vous certain de vouloir effectuer cette transaction ?
+
+
+
+ Suite à cette transaction, vous allez :
+[ACTION]
+
+Êtes-vous certain de vouloir effectuer cette transaction ?
+Veuillez saisir à nouveau votre mot de passe et cliquer sur OK.
+
+
+
+ Remarque :
+vous avez mis à jour l'emplacement de ce favori mais les autres détails resteront inchangés.
+
+
+
+ Vous avez sélectionné des objets non copiables.
+Ces objets seront déplacés dans votre inventaire et non pas copiés.
+
+Déplacer les objets de l'inventaire ?
+
+
+
+ Vous avez sélectionné des objets de l'inventaire qui ne peuvent pas être copiés. Ces objets seront déplacés vers votre inventaire, et non pas copiés.
+L'objet les contenant est scripté, déplacer ces objets peut causer des problèmes au niveau du script.
+
+Déplacer les objets de l'inventaire ?
+
+
+
+ Avertissement : l'action du clic Payer l'objet a été défini mais ne fonctionnera que si un script est ajouté avec l'event money().
+
+
+
+ Vous n'êtes autorisé à copier aucun élément dans cet objet.
+
+
+ Aller sur le site de Second Life pour consulter l'historique de votre compte ?
+
+
+
+ Visiter les pages d'aide de Second Life ?
+
+
+
+ Êtes-vous certain de vouloir quitter ?
+
+
+
+ Utilisez cet outil pour signaler des infractions aux Conditions d'utilisation et aux Règles de la communauté. Voir :
+
+http://secondlife.com/corporate/tos.php
+http://secondlife.com/corporate/cs.php
+
+Lorsqu'elles sont signalées, toutes les infractions aux Conditions d'utilisation et aux Règles de la communauté font l'objet d'une enquête et sont résolues. Pour accéder aux détails de la résolution d'un incident, allez sur :
+
+http://secondlife.com/support/incidentreport.php
+
+
+ Important : ce rapport ira au propriétaire de la région dans laquelle vous êtes et non à Linden Lab.
+
+Pour aider les résidents et les visiteurs, le propriétaire de la région dans laquelle vous êtes a choisi de recevoir et de s'occuper de tous les rapports envoyés à partir de cette région. Linden Lab n'enquêtera pas sur les rapports que vous envoyez à partir de cet endroit.
+
+Le propriétaire de la région traitera les rapports en fonction des règles de cette région, comme indiqué dans le réglement du domaine.
+(Les réglements sont visibles à partir du menu Monde > À propos du terrain.)
+
+La résolution de ce rapport ne s'applique qu'à cette région ; L'accès aux autres endroits de Second Life ne sera pas affecté par les résultats de cette enquête. Seul Linden Lab peut interdire l'accès à l'ensemble de Second Life.
+
+
+ N'utilisez cet outil que pour signaler des problèmes techniques et soyez aussi précis que possible.
+Vous pouvez répondre à l'e-mail automatique pour ajouter des détails à votre rapport.
+
+Tous les bugs signalés sont reproduits et évalués. Aucune réponse ne sera envoyée par e-mail.
+
+Si vous avez un problème technique, veuillez contacter le service clientèle à :
+
+http://secondlife.com/community/support.php
+
+Remarque : les rapports incomplets ne feront pas l'objet d'une enquête.
+
+
+ Veuillez choisir une catégorie pour ce rapport d'infraction.
+Le choix d'une catégorie nous permet de traiter les rapports d'infraction plus rapidement.
+
+
+ Veuillez choisir une catégorie pour ce bug.
+Le choix d'une catégorie nous permet de traiter les bugs plus rapidement.
+
+
+ Veuillez saisir le nom du contrevenant.
+Lorsque nous avons le nom du contrevenant, nous sommes en mesure de traiter les rapports plus rapidement.
+
+
+ Veuillez indiquer l'endroit où l'infraction a eu lieu.
+Les informations précises et exactes nous permettent de traiter les rapports plus rapidement.
+
+
+ Veuillez saisir un récapitulatif de l'infraction.
+Les récapitulatifs précis nous permettent de traiter les rapports plus rapidement.
+
+
+ Veuillez saisir un récapitulatif du bug.
+Les récapitulatifs précis nous permettent de résoudre les bugs plus rapidement.
+
+
+ Veuillez saisir une description détaillée de l'infraction.
+Soyez aussi précis que possible et essayez de fournir des noms ainsi que des détails sur l'incident que vous signalez.
+Les descriptions précises nous permettent de traiter les rapports plus rapidement.
+
+
+ Veuillez saisir une description détaillée du bug.
+Soyez aussi spécifique que possible et essayez d'indiquer les étapes à suivre pour reproduire le bug.
+Les descriptions précises nous permettent de résoudre les bugs plus rapidement.
+
+
+ Cher résident,
+
+Il semble que vous souhaitiez reporter une infraction à des droits de propriété intellectuelle. Pour signaler correctement cette infraction :
+
+(1) Remplissez un rapport d'infraction. Vous pouvez soumettre un rapport d'infraction si vous pensez qu'un résident exploite le système de droits de Second Life, par exemple en utilisant un CopyBot ou des outils similaires pour enfreindre des droits de propriété intellectuelle. Notre équipe chargée des infractions mènera une enquête et prendra les mesures nécessaires à l'encontre du résident non respectueux des Conditions d'utilisation ou des règles de la communauté. Sachez toutefois que l'équipe chargée des infractions ne supprimera pas de contenu à l'intérieur de Second Life.
+
+(2) Demandez à ce que du contenu à l'intérieur de Second Life soit supprimé. Pour demander à ce que du contenu soit supprimé de Second Life, vous devez soumettre un rapport d'infraction valide, tel que fourni dans notre Règlement contre les violations des droit d'auteurs (DMCA), à http://secondlife.com/corporate/dmca.php.
+
+Si vous souhaitez toujours reporter cette infraction, veuillez fermer cette fenêtre et soumettre votre rapport. Vous devrez peut-être sélectionner la catégorie CopyBot ou exploitation abusive des droits.
+
+Merci,
+
+Linden Lab
+
+
+ Les composantes requises suivantes ne se trouvent pas dans [FLOATER]:
+[COMPONENTS]
+
+
+ Vous avez déjà un objet sur cette partie du corps.
+Voulez-vous le remplacer par l'objet sélectionné ?
+
+
+
+ Vous êtes en mode occupé et vous ne recevrez donc aucun objet en échange de ce paiement.
+
+Souhaitez-vous quitter le mode occupé avant de terminer cette transaction ?
+
+
+
+ Êtes-vous certain de vouloir supprimer le contenu de votre corbeille de manière permanente  ?
+
+
+
+ Êtes-vous certain de vouloir vider le cache de votre navigateur ?
+
+
+
+ Êtes-vous certain de vouloir supprimer vos cookies ?
+
+
+
+ Êtes-vous certain de vouloir supprimer la liste des URL enregistrées ?
+
+
+
+ Êtes-vous certain de vouloir supprimer le contenu de votre dossier Objets trouvés de manière permanente ?
+
+
+
+ La SLURL suivante a été copiée dans votre presse-papiers :
+ [SLURL]
+
+Mettez-la dans une page web pour permettre aux autres résidents d'accéder facilement à cet endroit ou bien collez-la dans la barre d'adresse de votre navigateur.
+
+
+
+ Ce menu permet de contrôler la taille de la fenêtre et la résolution, ainsi que la qualité des graphiques client. Les préférences de l'interface graphique vous permettent de choisir entre 4 niveaux de graphiques : Faible, Moyen, Élevé et Ultra. Personnalisez vos options graphiques en cliquant sur le bouton Personnaliser et en changeant les paramètres suivants :
+
+Effets : active ou désactive les différents types de shaders pixels.
+
+Objets reflétés : définit le type d'objets reflétés dans l'eau.
+
+Rendu de l'avatar : définit les options qui influent sur la manière dont le client rend les avatars.
+
+Limite d'affichage : la distance à laquelle vous voyez les objets s'afficher dans la scène.
+
+Nombre de particules max. : définit le nombre maximum de particules que vous pouvez voir à la fois sur votre écran.
+
+Qualité post-traitement : définit la résolution du rayonnement.
+
+Détails des rendus : définit le niveau de détail ou le nombre de polygones utilisés dans le rendu de certains objets. Une valeur plus élevée prendra plus de temps pour apparaître, mais permettra d'avoir des objets plus détaillés.
+
+Sources lumineuses : définit les types de lumières que vous souhaitez faire apparaître.
+
+Rendu du terrain : définit le niveau de détail que vous souhaitez utiliser dans la texture du terrain.
+
+
+ Voulez-vous écraser l'option précédemment enregistrée ?
+
+
+
+ Voulez-vous supprimer [SKY] ?
+
+
+
+ Vous ne pouvez pas éditer ou supprimer un préréglage par défaut.
+
+
+ Une dossier semble manquer au Cycle du jour : [SKY].
+
+
+ Certains effets post-traitement existent. Voulez-vous quand même écraser ce fichier ?
+
+
+
+ Pour créer et sauvegarder plusieurs ciels, utilisez les curseurs WindLight.
+
+
+ Choisissez quel ciel apparaît au cours de la journée.
+
+
+ Ces paramètres permettent de modifier l'environnement local sur votre ordinateur. Pour que vous ayez accès à tous les paramètres, votre carte graphique doit prendre en charge les effets atmosphériques.
+
+Pour changer les différentes phases de la journée dans le client, utilisez le curseur Heure de la journée.
+
+Le curseur Couverture nuageuse permet de contrôler le nombre de nuages dans le ciel.
+
+L'option Couleur de l'eau vous permet de modifier la couleur de l'eau grâce au sélecteur de couleurs.
+
+Le curseur Brouillard dans l'eau permet de contrôler la densité du brouillard sous l'eau.
+
+Pour synchroniser l'heure du jour sur celle de la région, cliquez sur Utiliser heure domaine.
+
+En cliquant sur le bouton Ciel Avancé, vous aurez accès à tous les réglages relatifs au ciel.
+
+En cliquant sur le bouton Eau Avancée, vous aurez accès à tous les réglages relatifs à l'eau.
+
+
+ L'éditeur du cycle du jour vous permet de contrôler le ciel au cours du cycle jour/nuit de second Life. C'est ce même cycle qui est contrôlé par le curseur Heure de la journée dans l'éditeur d'environnement basique.
+
+L'éditeur du jour fonctionne grâce au réglage d'images-clés. Ces images-clés sont représentées par les marques grises sur la ligne du temps et ont des préréglages qui leurs sont associées. Au cours de la journée et de la nuit, le ciel WindLight s'anime en passant d'une clé à l'autre.
+
+La flèche jaune au dessus de la ligne du temps représente votre vue actuelle, basée sur l'heure de la journée. Cliquez et faites glisser pour voir l'animation au cours de votre journée. Ajoutez ou supprimez des clés en appuyant sur les boutons Ajouter clé ou Supprimer clé, à droite de la ligne du temps.
+
+Vous pouvez définir la position d'une clé en la faisant glisser le long de la ligne du temps ou en définissant manuellement ses valeurs dans la section Réglages des images-clés. Dans cette même section, vous pouvez associer chaque clé au préréglage WindLight respectif.
+
+La Durée du cycle contrôle la durée d'une « journée ». Si vous choisissez une valeur basse (2mn par exemple), cela signifie que toutes les animations de votre journée de 24h se dérouleront en 2mn seulement ! Une fois satisfait de vos choix, utilisez les boutons Jouer et Stop ! pour prévisualiser les résultats. Pour voir l'animation, vous pouvez aussi bouger la flèche jaune au dessus de la ligne du temps. Si vous sélectionnez l'option Utiliser heure domaine, vous synchronisez la durée de votre journée et votre heure avec celle du cycle du jour du domaine.
+
+Une fois que vous êtes satisfait de votre Cycle du jour, vous pouvez le sauvegarder et le charger grâce aux boutons Enregistrer jour test et Charger Jour Test. Veuillez noter que pour l'instant, nous ne pouvez avoir qu'un seul Cycle du jour.
+
+
+ Utilisez les curseurs Rouge/Vert/Bleu (RVB) pour ajuster la couleur du ciel. Pour déplacer les trois curseurs en même temps, utilisez le curseur Intensité.
+
+
+ Le paramètre Quantité de brume est l'un des plus utiles pour ajuster l'exposition lumineuse de la scène.
+Il permet de simuler de nombreux paramètres d'exposition, tels que les voiles blancs créés par le soleil ou des lumières plus foncées.
+
+
+ La Densité du bleu affecte la saturation générale des couleurs du ciel et du brouillard. Si vous déplacez le curseur Intensité (I) vers la droite, les couleurs deviennent plus vives et plus vibrantes. Si vous le déplacez complètement à gauche, les couleurs deviennent plus fades, puis finalement noires et blanches. Pour paramétrer avec précision la couleur du ciel, vous pouvez contrôler chacun des éléments de la saturation à l'aide des curseurs Rouge/Vert/Bleu (RVB).
+
+
+ Le paramètre Densité de la brume permet de contrôler le niveau de brume grisâtre dans l'atmosphère. Ce paramètre est utile pour simuler les scènes dans lesquelles il y a beaucoup de fumée et de substances polluantes émises par l'homme. Il est également utile pour simuler le brouillard et la brume.
+
+
+ Utilisez le Multiplicateur de densité pour modifier la densité atmosphérique générale. Une valeur basse donne l'impression d'un air « léger » alors qu'une valeur élevée donne l'impression d'un air « lourd » et enfumé.
+
+
+ Ajuste la distance perçue par WindLight.
+La valeur zéro désactive l'influence de WindLight sur le terrain et les objets.
+Les valeurs supérieures à 1 simulent des distances plus importantes pour des effets atmosphériques plus épais.
+
+
+ L'Altitude max. ajuste les calculs de WindLight lors de la computation de la lumière atmosphérique. Quand la fin de la journée approche, il est utile pour ajuster la « profondeur » du coucher de soleil.
+
+
+ Ajuste la couleur et l'intensité de la lumière directe de la scène.
+
+
+ Ajuste la couleur et l'intensité de la lumière atmosphérique ambiante.
+
+
+ Le curseur Taille contrôle la taille du soleil.
+Le curseur Netteté permet de rendre le soleil plus ou moins flou dans le ciel.
+
+
+ Ajuste la distribution de clair et de foncé sur l'écran.
+
+
+ Vous permet de contrôler l'intensité des étoiles dans le ciel.
+
+
+ Contrôle la position du soleil dans le ciel.
+Même chose que l'élévation.
+
+
+ Contrôle la position du soleil dans le ciel.
+Même chose que l'azimut.
+
+
+ Modifie la couleur des nuages. Il est recommandé de laisser les nuages en blanc mais vous pouvez aussi faire preuve de créativité...
+
+
+ Contrôle le détail de l'image placée sur l'image du nuage principal. X et Y contrôlent sa position. D (Densité) permet de rendre les nuages plus ou moins pleins ou plus ou moins fracturés.
+
+
+ Vous permet de contrôler la position des nuages avec les curseurs X et Y ainsi que leur densité avec le curseur D.
+
+
+ Contrôle la surface du ciel couverte par les nuages.
+
+
+ Contrôle l'échelle de l'image des nuages sur le dôme du ciel.
+
+
+ Contrôle la vitesse des nuages sur l'axe des X.
+
+
+ Contrôle la vitesse des nuages sur l'axe des Y.
+
+
+ Cochez cette option pour utiliser les anciens nuages de Second Life en plus des nuages WindLight.
+
+
+ Permet de sélectionner la couleur du brouillard sous l'eau.
+
+
+ Contrôle la densité du brouillard sous l'eau, ainsi que votre visibilité.
+
+
+ Modifie l'effet créé par l'option Densité du brouillard pour contrôler votre visibilité quand votre avatar est sous l'eau.
+
+
+ Contrôle l'éclat de l'eau à la surface.
+
+
+ Contrôle l'échelle des trois vaguelettes qui forment l'eau.
+
+
+ Contrôle la quantité de lumière réfléchie à des angles différents.
+
+
+ Contrôle l'intensité de la lumière réfléchie.
+
+
+ Contrôle la quantité de lumière réfractée lorsque votre avatar regarde au dessus de l'eau.
+
+
+ Contrôle la quantité de lumière réfractée lorsque votre avatar est sous l'eau.
+
+
+ Contrôle le mélange reflets/vagues.
+
+
+ Contrôle quelle normal map est posée sur l'eau pour déterminer la réflection/réfraction.
+
+
+ Contrôle dans quelle direction et à quelle vitesse la version grande échelle de la normal map se déplace sur l'axe des X et l'axe des Y.
+
+
+ Contrôle dans quelle direction et à quelle vitesse la version grande échelle de la normal map se déplace sur l'axe des X et l'axe des Y.
+
+
+ Nommez le nouveau ciel.
+
+
+
+ Ce préréglage existe déjà  !
+
+
+ Nommez ce nouveau préréglage d'eau.
+
+
+
+ Ce préréglage existe déjà  !
+
+
+ Vous ne pouvez pas éditer ou supprimer un préréglage par défaut.
+
+
+ Impossible de démarrer une nouvelle session de chat avec [RECIPIENT].
+[REASON]
+
+
+
+ [EVENT]
+[REASON]
+
+
+
+ Vous devez terminer votre session de chat avec [NAME].
+[REASON]
+
+
+
+ Les objets qui font partie d'une pièce-jointe ne peuvent pas être achetés.
+
+
+ Accepter cette requête donne au script l'autorisation de prélever des dollars Linden (L$) sur votre compte de manière continue. Pour révoquer cette autorisation, le propriétaire de l'objet doit supprimer l'objet ou bien réinitialiser les scripts dans l'objet.
+
+
+
+ Voulez-vous automatiquement porter l'habit que vous créez ?
+
+
+
+ Pour que vous puissiez accéder à cette parcelle, votre âge doit être vérifié.
+Voulez-vous aller sur le site de Second Life pour vérifier votre âge ?
+
+[_URL]
+
+ https://secondlife.com/account/verification.php?lang=fr
+
+
+
+
+ Avant de pouvoir pénétrer sur cette parcelle, vous devez enregistrer vos informations de paiement.
+Voulez-vous aller sur le site de Second Life pour enregistrer ces informations ?
+
+[_URL]
+
+ https://secondlife.com/account/index.php?lang=fr
+
+
+
+
+ The string [STRING_NAME] is missing from strings.xml
+
+
+ [MESSAGE]
+
+
+ Annulé
+
+
+ Action annulée
+
+
+ Attachement annulé
+
+
+ Habits et parties du corps manquants remplacés par les éléments par défaut.
+
+
+ Sujet : [SUBJECT], Message : [MESSAGE]
+
+
+ [NAME] est connecté(e)
+
+
+ [NAME] est déconnecté(e)
+
+
+ Vous ne pouvez pas devenir ami avec vous-même.
+
+
+ Importation de photos SL et Web en cours
+(prend environ 5 minutes…)
+
+
+ Le chargement a coûté [AMOUNT] L$.
+
+
+ Photo Web importée
+
+
+ Photo SL importée
+
+
+ Fichier terrain.raw téléchargé
+
+
+ Geste [NAME] absent de la base de données.
+
+
+ Impossible de charger le geste [NAME].
+Merci de réessayer.
+
+
+ Repère absent de la base de données.
+
+
+ Impossible de charger le repère. Merci de réessayer.
+
+
+ La touche Verr.maj est activée.
+Ce mode modifie le mot de passe que vous saisissez, vous devriez le quitter.
+
+
+ Note absente de la base de données.
+
+
+ Permissions insuffisantes pour voir la note.
+
+
+ Permissions insuffisantes pour rezzer l'objet.
+
+
+ Impossible de lire les données de la note actuellement.
+
+
+ Script absent de la base de données.
+
+
+ Permissions insuffisantes pour voir le script.
+
+
+ Impossible de charger le script. Merci de réessayer.
+
+
+ Tous les éléments que vous souhaitez transférer ne sont pas encore disponibles sur le serveur.
+Merci d'essayer à nouveau dans une minute.
+
+
+ Vous ne pouvez pas modifier de catégories protégées.
+
+
+ Vous ne pouvez pas supprimer de catégories protégées.
+
+
+ Vous avez offert votre carte de visite à [NAME]
+
+
+ Achat impossible durant le chargement de l'objet.
+Merci de réessayer.
+
+
+ Impossible de lier durant le chargement de l'objet.
+Merci de réessayer.
+
+
+ Impossible d'acheter simultanément des objets de propriétaires différents. Veuillez sélectionner un seul objet.
+
+
+ Cet objet ne semble pas à vendre.
+
+
+ Activation du mode divin : niveau [LEVEL]
+
+
+ Désactivation du mode divin : niveau [LEVEL]
+
+
+ Copie impossible, droits insuffisants.
+
+
+ [NAME] a accepté votre envoi.
+
+
+ [NAME] a refusé votre envoi.
+
+
+ [NAME]: [MESSAGE]
+
+
+ Votre carte de visite a été acceptée.
+
+
+ Votre carte de visite a été refusée.
+
+
+ A présent que vous êtes sur le continent, vous pouvez voyager par téléportation (vers [NAME] par exemple). Cliquez sur le bouton Inventaire en bas à droite de l'écran puis sélectionnez le dossier Repères (Landmarks).
+Choisissez un repère, double-cliquez dessus et cliquez sur Téléporter.
+
+
+ A présent que vous êtes sur le continent, vous pouvez contacter des résidents (tel [NAME] par exemple). Cliquez sur le bouton Inventaire en bas à droite de l'écran puis sélectionnez le dossier Cartes de visite (Calling Cards).
+Choisissez en une, double-cliquez dessus et cliquez sur Message Instantané.
+
+
+ Vous ne pouvez pas sélectionner de terrain en dehors des limites du serveur.
+Veuillez sélectionner un terrain plus petit.
+
+
+ Certains termes de votre recherche ont été exclus car ils ne correspondaient pas aux standards fixés dans les Règles communautaires.
+
+
+ Veuillez sélectionner au moins un type de contenu à rechercher (PG, Mature ou Adulte)
+
+
+ [NAME] a proposé un vote pour :
+[MESSAGE]
+
+
+
+ [MESSAGE]
+
+
+ Avis d'événement :
+
+[NAME]
+[DATE]
+
+
+
+ Tous les objets de cette parcelle qui seront transférés à l'acheteur sont maintenant mis en surbrillance.
+
+* Les arbres et la pelouse qui seront transférés ne sont pas mis en surbrillance.
+
+
+
+ Gestes désactivés ayant le même mot-clé :
+[NAMES]
+
+
+ Le logiciel Apple QuickTime ne semble pas installé sur votre système.
+Pour voir les vidéos sur les terrains qui le permettent, allez sur le site de QuickTime (http://www.apple.com/fr/quicktime/download) et installez le lecteur QuickTime.
+
+
+ Les objets que vous possédez sur la parcelle de terrain sélectionnée ont été renvoyés dans votre inventaire.
+
+
+ Les objets que vous possédez sur la parcelle de terrain appartenant à [NAME] ont été renvoyés dans votre inventaire.
+
+
+ Les objets sur la parcelle appartenant à « [NAME] » ont étés renvoyés à leur propriétaire.
+
+
+ Les objets sélectionnés sur la parcelle de terrain partagée avec le groupe [GROUPNAME] ont été renvoyés dans l'inventaire de leur propriétaire.
+Les objets donnés transférables ont étés renvoyés à leur propriétaire.
+Les objets non transférables donnés au groupe ont étés supprimés.
+
+
+ Les objets sélectionnés sur la parcelle et qui ne sont pas à vous ont été rendus à leurs propriétaires.
+
+
+ Les dégâts sont autorisés sur ce terrain (« non sécurisé »).
+Vous pouvez être blessé ici. Si vous décédez, vous serez téléporté à votre domicile.
+
+
+ Le vol est interdit sur ce terrain (« pas de vol »).
+Vous ne pouvez pas voler ici.
+
+
+ Les bousculades sont interdites sur ce terrain.
+Vous ne pouvez pas pousser les autres à moins que vous soyez propriétaire de ce terrain.
+
+
+ La voix est désactivée sur ce terrain.
+
+
+ Le mode construction sur ce terrain est désactivé (« pas de construction »).
+Vous ne pouvez pas créer d'objets ici.
+
+
+ Un administrateur a temporairement stoppé les scripts dans cette région.
+
+
+ Aucun script ne fonctionne dans cette région.
+
+
+ Les scripts externes sont désactivés sur ce terrain (« pas de scripts externes »).
+Aucun script n'est exécuté à part ceux du propriétaire du terrain.
+
+
+ Vous ne pouvez réclamer qu'un terrain public dans la région où vous vous trouvez actuellement.
+
+
+ Votre catégorie d'accès ne vous autorise pas à pénétrer dans cette région. Vous devez sans doute procéder à la vérification de votre âge ou installer une version plus récente du client.
+
+Pour savoir comment accéder aux zones ayant un tel niveau d'accès, veuillez consulter les pages d'aide.
+
+
+ Vous avez été banni de cette région.
+
+
+ Votre compte ne peut pas se connecter à cette région du Teen grid.
+
+
+ Vous ne pouvez pas retourner sur Help Island.
+Pour répéter le didacticiel, veuillez aller sur Help Island Public.
+
+
+ Vous n'avez pas le statut de paiement approprié pour pénétrer dans cette région.
+
+
+ Pour pouvoir pénétrer dans cette région, vous devez avoir procédé à la vérification de votre âge.
+
+
+ Pour pouvoir pénétrer sur cette parcelle, vous devez avoir procédé à la vérification de votre âge.
+
+
+ Région de destination introuvable.
+
+
+ Vous n'êtes pas autorisé dans cette région.
+
+
+ Impossible de traverser une parcelle bannie. Veuillez trouver une autre solution.
+
+
+ Vous avez été redirigé vers un téléhub.
+
+
+ Il n'a pas été possible de vous téléporter vers une destination plus proche.
+
+
+ Téléportation annulée.
+
+
+ La région dans laquelle vous essayez de pénétrer est pleine actuellement.
+Veuillez réessayer dans quelques minutes.
+
+
+ Panne générale.
+
+
+ Dirigé vers la mauvaise région. Merci de réessayer.
+
+
+ ID agent non valide.
+
+
+ ID de session non valide.
+
+
+ Aucun code de circuit valide.
+
+
+ Timestamp non valide.
+
+
+ Impossible de créer la connexion en attente.
+
+
+ Erreur interne lors de la tentative de connexion.
+
+
+ Impossible de trouver un lieu de téléportation valide dans cette région.
+
+
+ Une erreur interne est survenue lors de la résolution des coodonnées de la région.
+
+
+ Impossible de trouver un point d'atterrissage valide.
+
+
+ Aucune parcelle valide n'a été trouvée.
+
+
+ Un objet appelé [OBJECTFROMNAME] appartenant à [NAME] vous a donné : [OBJECTTYPE] appelé(e) [OBJECTNAME].
+
+
+
+ L'objet [OBJECTFROMNAME] appartenant à un utilisateur inconnu vous a donné un(e) [OBJECTTYPE] nommé(e) [OBJECTNAME].
+
+
+
+ [NAME] vous a donné un(e) [OBJECTTYPE] nommé(e) [OBJECTNAME].
+
+
+
+ [NAME]
+[MESSAGE]
+
+
+ [MESSAGE]
+
+
+
+ [NAME] vous propose de le/la rejoindre par téléportation :
+
+[MESSAGE]
+
+
+
+ [MESSAGE]
+[URL]
+
+
+
+ [NAME] vous demande de devenir son ami(e).
+
+[MESSAGE]
+
+(Par défaut, vous pourrez voir lorsque vous êtes tous deux connectés.)
+
+
+
+ [NAME] vous demande de devenir son ami.
+
+(Par défaut, vous pourrez voir quand vous êtes tous deux connectés)
+
+
+
+ [NAME] a accepté votre amitié.
+
+
+ [NAME] a refusé votre amitié.
+
+
+ [NAME] vous offre sa carte de visite.
+Cela ajoute un marque-page dans votre inventaire, ce qui vous permet d'envoyer rapidement un IM à ce résident.
+
+
+
+ La région va redémarrer dans [MINUTES] minutes.
+Si vous restez dans cette région, vous serez déconnecté(e).
+
+
+ La région va redémarrer dans [SECONDS] secondes.
+Si vous restez dans cette région, vous serez déconnecté(e).
+
+
+ Charger cette page web [URL] ?
+
+[MESSAGE]
+
+Venant de l'objet : [OBJECTNAME], appartenant à : [NAME]?
+
+
+
+ La recherche du [TYPE] dans la base de données a échoué.
+
+
+ La recherche du [TYPE] nommé(e) [DESC] dans la base de données a échoué.
+
+
+ L'objet que vous essayez de porter utilise une fonctionnalité que le client ne peut lire. Pour porter cet objet, veuillez télécharger une mise à jour du client.
+
+
+ '[OBJECTNAME]', un objet appartenant à '[NAME]', aimerait :
+
+[QUESTIONS]
+Acceptez-vous ?
+
+
+
+ [OBJECTNAME], un objet appartenant à [NAME], aimerait :
+
+[QUESTIONS]
+Si vous n'avez pas confiance en cet objet ni en son créateur, vous devriez refuser cette requête. Pour plus d'informations, cliquez sur le bouton Détails.
+
+Accepter cette requête ?
+
+
+
+ '[TITLE]' de [NAME]
+[MESSAGE]
+
+
+
+ '[TITLE]' de [GROUPNAME]
+[MESSAGE]
+
+
+
+ Vous venez de recevoir [AMOUNT] L$.
+Des objets et des utilisateurs peuvent vous donner des L$.
+Votre solde est affiché dans le coin supérieur droit de votre écran.
+
+
+ Vous venez de payer [AMOUNT] L$.
+Votre solde est affiché dans le coin supérieur droit de votre écran.
+
+
+ Vous êtes assis(e).
+Utilisez les touches de direction (ou AWSD) pour changer la vue.
+Pour vous lever, cliquez sur le bouton Me lever.
+
+
+ Cliquez et faites glisser pour faire défiler la carte.
+Double-cliquez pour vous téléporter.
+Utilisez les contrôles à droite pour trouver des choses et afficher différents arrière-plans.
+
+
+ Vous pouvez construire des objets dans certaines zones de [SECOND_LIFE].
+Utilisez les outils en haut à gauche pour construire et gardez la touche Ctrl ou Alt enfoncée pour passer rapidement d'un outil à l'autre.
+Appuyez sur la touche Esc pour arrêter de construire.
+
+
+ Un clic gauche permet d'interagir avec certains objets.
+Si le pointeur de la souris se transforme en main, vous pouvez interagir avec l'objet.
+Un clic droit fait toujours apparaître un menu des choses que vous pouvez faire.
+
+
+ Cette région n'autorise pas la téléportation de point à point. Vous avez donc été transporté au téléhub le plus proche.
+Votre destination est marquée par une grande balise.
+Suivez la flèche rouge vers la balise ou cliquez sur la flèche pour faire disparaître la balise.
+
+
+ Vos mouvements sont maintenant pris en charge par un objet.
+Essayez les flèches de votre clavier ou AWSD pour voir à quoi elles servent.
+Certains objets (comme les armes) nécessitent l'activation du mode Vue subjective pour être utilisés.
+Pour cela, appuyez sur la touche M.
+
+
+ Vous êtes en train d'éditer votre apparence.
+Pour tourner et zoomer, utilisez les flèches de direction.
+Lorsque vous avez terminé, appuyez sur Enregistrer tout pour sauvegarder votre apparence et sortir.
+Vous pouvez modifier votre apparence aussi souvent que vous le souhaitez.
+
+
+ Il s'agit de votre inventaire qui contient des objets, notes, vêtements, et autres possessions.
+* Pour porter un objet ou le dossier contenant un ensemble complet, faites-le glisser sur vous-même.
+* Pour mettre un objet dans le monde, faites-le glisser sur le sol.
+* Pour lire une note, double-cliquez dessus.
+
+
+ Cette région est un bac à sable.
+Les objets que vous construisez ici peuvent être supprimés quand vous partez. Les bacs à sable sont nettoyés régulièrement, veuillez lire les informations en haut de l'écran à côté du nom de la région.
+
+Les régions bacs à sable sont rares et sont signalées par des panneaux.
+
+
+ Cet objet est flexible.
+Les objets flexibles ne peuvent pas avoir de propriétés physiques et doivent rester fantômes jusqu'à ce que la case Fantôme soit décochée.
+
+
+ Vous avez activé le menu Avancé.
+Ce menu contient des fonctionnalités utiles pour les développeurs qui travaillent sur Second Life.
+Pour activer/désactiver ce menu sous Windows, appuyez sur Ctrl-Alt-D. Sur un Mac, appuyez sur Cmd-Opt-Maj-D
+
+
+ Vous êtes en train d'éditer un sculptie.
+Pour modifier la forme d'un sculptie, vous devez utiliser une texture spécifique.
+Vous trouverez des textures dans la bibliothèque de votre inventaire.
+
+
+ Vous avez lancé la lecture d'un média. Dans le menu Préférences, à l'onglet Audio et vidéo, vous pouvez choisir de lire automatiquement les médias. Notez que cela peut être risqué lorsque les médias viennent de sites que vous ne connaissez pas.
+
+
+ Vous ne pouvez sélectionner que [MAX_SELECT] objets maximum dans cette liste.
+
+
+ [NAME] vous invite à un chat vocal.
+Pour y participer, cliquez sur Accepter. Sinon, cliquez sur Refuser. Pour ignorer cette personne, cliquez sur Ignorer.
+
+
+
+ [NAME] a reçu un message instantané et n'est donc plus ignoré.
+
+
+ [NAME] a reçu de l'argent et n'est donc plus ignoré.
+
+
+ [NAME] a reçu un inventaire et n'est donc plus ignoré.
+
+
+ [NAME] a rejoint un chat vocal avec le groupe [GROUP].
+Pour y participer, cliquez sur Accepter. Sinon, cliquez sur Refuser. Pour ignorer cette personne, cliquez sur Ignorer.
+
+
+
+ [NAME] a rejoint un chat vocal avec conférence.
+Pour y participer, cliquez sur Accepter. Sinon, cliquez sur Refuser. Pour ignorer cet utilisateur, cliquez sur Ignorer.
+
+
+
+ [NAME] vous invite à un chat conférence.
+Pour y participer, cliquez sur Accepter. Sinon, cliquez sur Refuser. Pour ignorer cet utilisateur, cliquez sur Ignorer.
+
+
+
+ L'appel auquel vous essayez de participer, [VOICE_CHANNEL_NAME], a atteint le nombre maximum de participants. Veuillez réessayer ultérieurement.
+
+
+ Nous sommes désolés. Le nombre maximum de conversations vocales a été atteint dans cette zone. Veuillez trouver un autre endroit pour discuter.
+
+
+ Vous avez été déconnecté(e) de [VOICE_CHANNEL_NAME]. Vous allez maintenant être reconnecté au chat vocal spatial.
+
+
+ [VOICE_CHANNEL_NAME] a mis fin à l'appel. Vous allez maintenant être reconnecté au chat vocal spatial.
+
+
+ [VOICE_CHANNEL_NAME] a refusé votre appel. Vous allez maintenant être reconnecté au chat vocal spatial.
+
+
+ [VOICE_CHANNEL_NAME] ne peut pas prendre votre appel. Vous allez maintenant être reconnecté au chat vocal spatial.
+
+
+ Echec de la connexion avec [VOICE_CHANNEL_NAME], veuillez réessayer ultérieurement. Vous allez maintenant être reconnecté au chat vocal spatial.
+
+
+ Nous sommes en train de créer un canal vocal pour vous. Veuillez patienter quelques instants.
+
+
+ Vous ne pouvez pas pénétrer sur ce terrain car vous n'êtes pas membre du groupe adéquat.
+
+
+ Vous ne pouvez pas pénétrer sur ce terrain car l'accès vous y est interdit.
+
+
+ Vous ne pouvez pas pénétrer sur ce terrain car vous n'avez pas les droits d'accès requis.
+
+
+ Vous n'êtes pas autorisé à vous connecter au chat vocal pour [VOICE_CHANNEL_NAME].
+
+
+ Une erreur est survenue pendant la connexion au chat vocal pour [VOICE_CHANNEL_NAME]. Veuillez réessayer ultérieurement.
+
+
+ La région dans laquelle vous avez pénétré utilise une version de simulateur différente. C'est ballot, mais c'est la vie !
+
+
+ L'URL sur laquelle vous avez cliqué ne peut pas être ouverte dans ce navigateur.
+
+
+ - Votre processeur ne remplit pas les conditions minimum requises.
+
+
+ Vous semblez ne pas avoir le matériel requis pour utiliser Second Life. Second Life requiert une carte graphique OpenGL avec une prise en charge du multitexturing. Si vous avez une telle carte, assurez-vous que vous avez aussi les drivers les plus récents pour la carte, ainsi que les service packs et les patchs pour votre système d'exploitation.
+
+Si vous avez toujours des problèmes, veuillez consulter la page suivante : http://www.secondlife.com/support
+
+
+ 796
+
+
+ 510
+
+
+ - Votre carte graphique ne remplit pas les conditions minimum requises.
+
+
+ - Votre mémoire système ne remplit pas les conditions minimum requises.
+
+
+ Oui
+
+
+ Non
+
+
diff --git a/indra/newview/skins/default/xui/fr/notify.xml b/indra/newview/skins/default/xui/fr/notify.xml
index 5c1c09223..128e4bd95 100644
--- a/indra/newview/skins/default/xui/fr/notify.xml
+++ b/indra/newview/skins/default/xui/fr/notify.xml
@@ -1,4 +1,4 @@
-
-
-
-
\ No newline at end of file
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/panel_audio.xml b/indra/newview/skins/default/xui/fr/panel_audio.xml
index 4c4688d60..eac3c7219 100644
--- a/indra/newview/skins/default/xui/fr/panel_audio.xml
+++ b/indra/newview/skins/default/xui/fr/panel_audio.xml
@@ -1,10 +1,10 @@
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/panel_audio_device.xml b/indra/newview/skins/default/xui/fr/panel_audio_device.xml
index 7ca53b7c0..a9540d834 100644
--- a/indra/newview/skins/default/xui/fr/panel_audio_device.xml
+++ b/indra/newview/skins/default/xui/fr/panel_audio_device.xml
@@ -1,25 +1,25 @@
-
-
-
- Matériel audio
-
-
- Périphérique d'entrée (micro) :
-
-
- Périphérique de sortie (haut-parleurs) :
-
-
- Volume d'entrée
-
-
- Pour que les autres résidents vous entendent plus ou moins fort, utilisez le curseur. Pour tester le volume, parlez dans le micro.
-
-
-
- Veuillez patienter
-
-
- Défaut
-
-
+
+
+
+ Matériel audio
+
+
+ Périphérique d'entrée (micro) :
+
+
+ Périphérique de sortie (haut-parleurs) :
+
+
+ Volume d'entrée
+
+
+ Pour que les autres résidents vous entendent plus ou moins fort, utilisez le curseur. Pour tester le volume, parlez dans le micro.
+
+
+
+ Veuillez patienter
+
+
+ Défaut
+
+
diff --git a/indra/newview/skins/default/xui/fr/panel_avatar.xml b/indra/newview/skins/default/xui/fr/panel_avatar.xml
index cb1ca8312..3cb25dc79 100644
--- a/indra/newview/skins/default/xui/fr/panel_avatar.xml
+++ b/indra/newview/skins/default/xui/fr/panel_avatar.xml
@@ -1,224 +1,230 @@
-
-
-
-
-
- [ACCTTYPE]
-[PAYMENTINFO]
-[AGEVERIFICATION]
-
-
- Résident
-
-
- Essai
-
-
- Membre originaire
-
-
- Employé(e) de Linden Lab
-
-
- Infos de paiement utilisées
-
-
- Infos de paiement enregistrées
-
-
- Aucune info de paiement
-
-
- Âge vérifié
-
-
- Âge non vérifié
-
-
- Nom :
-
-
- Actuellement connecté(e)
-
-
- Né(e) le :
-
-
-
- Compte :
-
-
-
-
- Partenaire :
-
-
-
-
- [NAME]
-
-
- Photo :
-
-
-
- Groupes :
-
-
-
- À propos :
-
-
- (500 car.)
-
-
-
- Donner des
-objets :
-
-
-
-
- Faire glisser les objets à transférer ici.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Dans un navigateur externe
-
-
- URL de la page d'accueil
-
-
-
-
-
-
-
-
- Je veux :
-
-
-
-
-
-
-
-
-
-
-
- Mes talents :
-
-
-
-
-
-
-
-
-
- Langues :
-
-
-
-
-
- Faites connaître aux autres résidents vos endroits favoris dans Second Life.
-
-
-
-
-
- Chargement...
-
-
-
-
- Passez une petite annonce sur Second Life.
-
-
-
-
-
- Chargement...
-
-
-
-
- Photo :
-
-
-
- Infos :
-
-
- (250 car.)
-
-
-
-
-
- Chargement...
-
-
- Dans cet espace, vous pouvez enregistrer vos remarques au sujet de ce résident ou
-prendre des notes sur certains projets. Vous êtes le seul à pouvoir accéder à cette
-page et même le résident dont vous consultez le profil ne pourra pas voir ce que
-vous avez écrit.
-
-
-
-
-
-
-
-
-
-
-
- Voir sur la carte.
-Ceci n'est pas possible car vous
-n'êtes pas ami avec cette personne.
-
-
- Voir sur la carte.
- Ceci n'est pas possible car le résident
- en question n'est pas connecté.
-
-
- Voir sur la carte.
-
-
- Téléporter le résident là où vous êtes de force.
-
-
- Proposer au résident d'être téléporté là où vous êtes.
-Ceci n'est pas possible tant que vous êtes sur l'île d'orientation.
-
-
- Offrir au résident d'être téléporté là où vous êtes.
-
-
- Chargement...
-
-
+
+
+
+
+
+ [ACCTTYPE]
+[PAYMENTINFO]
+[AGEVERIFICATION]
+
+
+ Résident
+
+
+ Essai
+
+
+ Membre originaire
+
+
+ Employé(e) de Linden Lab
+
+
+ Infos de paiement utilisées
+
+
+ Infos de paiement enregistrées
+
+
+ Aucune info de paiement
+
+
+ Âge vérifié
+
+
+ Âge non vérifié
+
+
+ Nom :
+
+
+ Actuellement connecté(e)
+
+
+ Né(e) le :
+
+
+
+ Compte :
+
+
+
+
+ Partenaire :
+
+
+
+
+ [NAME]
+
+
+ Photo :
+
+
+
+ Groupes :
+
+
+
+ À propos :
+
+
+ (500 car.)
+
+
+
+ Donner des
+objets :
+
+
+
+
+ Faire glisser les objets à transférer ici.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Dans un navigateur externe
+
+
+ URL de la page d'accueil
+
+
+
+
+
+
+
+
+ Je veux :
+
+
+
+
+
+
+
+
+
+
+
+ Mes talents :
+
+
+
+
+
+
+
+
+
+ Langues :
+
+
+
+
+
+ Faites connaître aux autres résidents vos endroits favoris dans Second Life.
+
+
+
+
+
+ Chargement...
+
+
+
+
+ Passez une petite annonce sur Second Life.
+
+
+
+
+
+ Chargement...
+
+
+
+
+ Photo :
+
+
+
+ Infos :
+
+
+ (250 car.)
+
+
+
+
+
+ Chargement...
+
+
+ Dans cet espace, vous pouvez enregistrer vos remarques au sujet de ce résident ou
+prendre des notes sur certains projets. Vous êtes le seul à pouvoir accéder à cette
+page et même le résident dont vous consultez le profil ne pourra pas voir ce que
+vous avez écrit.
+
+
+
+
+ Clef-Key:
+
+
+
+
+
+
+
+
+
+
+
+
+ Voir sur la carte.
+Ceci n'est pas possible car vous
+n'êtes pas ami avec cette personne.
+
+
+ Voir sur la carte.
+ Ceci n'est pas possible car le résident
+ en question n'est pas connecté.
+
+
+ Voir sur la carte.
+
+
+ Téléporter le résident là où vous êtes de force.
+
+
+ Proposer au résident d'être téléporté là où vous êtes.
+Ceci n'est pas possible tant que vous êtes sur l'île d'orientation.
+
+
+ Offrir au résident d'être téléporté là où vous êtes.
+
+
+ Chargement...
+
+
diff --git a/indra/newview/skins/default/xui/fr/panel_avatar_classified.xml b/indra/newview/skins/default/xui/fr/panel_avatar_classified.xml
index 3a88d3dba..39925acf9 100644
--- a/indra/newview/skins/default/xui/fr/panel_avatar_classified.xml
+++ b/indra/newview/skins/default/xui/fr/panel_avatar_classified.xml
@@ -1,37 +1,37 @@
-
-
-
-
-
-
-
-
-
-
- - Type de public -
-
-
- Contenu Mature
-
-
- Contenu PG
-
-
-
- Annonce passée, pas encore publiée
-
-
- Clics :
-
-
-
-
- Annonce passée le : [DATE]. Prix : [AMT] L$.
-
-
- Mise à jour
-
-
- Publier...
-
-
+
+
+
+
+
+
+
+
+
+
+ - Type de public -
+
+
+ Contenu Mature
+
+
+ Contenu PG
+
+
+
+ Annonce passée, pas encore publiée
+
+
+ Clics :
+
+
+
+
+ Annonce passée le : [DATE]. Prix : [AMT] L$.
+
+
+ Mise à jour
+
+
+ Publier...
+
+
diff --git a/indra/newview/skins/default/xui/fr/panel_avatar_pick.xml b/indra/newview/skins/default/xui/fr/panel_avatar_pick.xml
index 5e2b136ce..9c19e19cc 100644
--- a/indra/newview/skins/default/xui/fr/panel_avatar_pick.xml
+++ b/indra/newview/skins/default/xui/fr/panel_avatar_pick.xml
@@ -1,10 +1,10 @@
-
-
-
-
-
-
- Trier :
-
-
-
+
+
+
+
+
+
+ Trier :
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/panel_chat_bar.xml b/indra/newview/skins/default/xui/fr/panel_chat_bar.xml
index 43d71a38b..91e9d1c9d 100644
--- a/indra/newview/skins/default/xui/fr/panel_chat_bar.xml
+++ b/indra/newview/skins/default/xui/fr/panel_chat_bar.xml
@@ -1,21 +1,21 @@
-
-
-
-
-
-
-
- Crier
-
-
- Dire
-
-
- Chuchoter
-
-
-
-
- Gestures
-
-
+
+
+
+
+
+
+
+ Crier
+
+
+ Dire
+
+
+ Chuchoter
+
+
+
+
+ Gestures
+
+
diff --git a/indra/newview/skins/default/xui/fr/panel_classified.xml b/indra/newview/skins/default/xui/fr/panel_classified.xml
index 608beb450..68af597a7 100644
--- a/indra/newview/skins/default/xui/fr/panel_classified.xml
+++ b/indra/newview/skins/default/xui/fr/panel_classified.xml
@@ -1,31 +1,31 @@
-
-
-
-
-
-
-
-
-
-
- - Type de public -
-
-
- Contenu Mature
-
-
- Contenu PG
-
-
-
-
-
- Annonce passée le : [DATE]. Prix : [AMT] L$.
-
-
- Mise à jour
-
-
- Publier...
-
-
+
+
+
+
+
+
+
+
+
+
+ - Type de public -
+
+
+ Contenu Mature
+
+
+ Contenu PG
+
+
+
+
+
+ Annonce passée le : [DATE]. Prix : [AMT] L$.
+
+
+ Mise à jour
+
+
+ Publier...
+
+
diff --git a/indra/newview/skins/default/xui/fr/panel_event.xml b/indra/newview/skins/default/xui/fr/panel_event.xml
index 14f21973d..b0a2b522b 100644
--- a/indra/newview/skins/default/xui/fr/panel_event.xml
+++ b/indra/newview/skins/default/xui/fr/panel_event.xml
@@ -1,70 +1,70 @@
-
-
-
- Nom :
-
-
- (aucun)
-
-
- Type :
-
-
- (aucun)
-
-
- Contenu Mature :
-
-
- Oui
-
-
- Non
-
-
- Date :
-
-
- (aucune)
-
-
- Durée :
-
-
- (aucune)
-
-
- Organisé par :
-
-
- (personne)
-
-
- Lieu :
-
-
- (aucun)
-
-
- Prix :
-
-
- (aucun)
-
-
- Description :
-
-
-
-
-
-
- aucun
-
-
- Prévenir
-
-
- Ne pas prévenir
-
-
+
+
+
+ Nom :
+
+
+ (aucun)
+
+
+ Type :
+
+
+ (aucun)
+
+
+ Contenu Mature :
+
+
+ Oui
+
+
+ Non
+
+
+ Date :
+
+
+ (aucune)
+
+
+ Durée :
+
+
+ (aucune)
+
+
+ Organisé par :
+
+
+ (personne)
+
+
+ Lieu :
+
+
+ (aucun)
+
+
+ Prix :
+
+
+ (aucun)
+
+
+ Description :
+
+
+
+
+
+
+ aucun
+
+
+ Prévenir
+
+
+ Ne pas prévenir
+
+
diff --git a/indra/newview/skins/default/xui/fr/panel_friends.xml b/indra/newview/skins/default/xui/fr/panel_friends.xml
index a1dae2ef4..27c3f3050 100644
--- a/indra/newview/skins/default/xui/fr/panel_friends.xml
+++ b/indra/newview/skins/default/xui/fr/panel_friends.xml
@@ -1,24 +1,27 @@
-
-
-
- Amis multiples...
-
-
-
-
-
-
-
-
-
-
- Rechercher un(e) ami(e) :
-
-
-
-
-
-
-
-
+
+
+
+ Amis multiples...
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/panel_group.xml b/indra/newview/skins/default/xui/fr/panel_group.xml
index a75dd6d94..697efedf5 100644
--- a/indra/newview/skins/default/xui/fr/panel_group.xml
+++ b/indra/newview/skins/default/xui/fr/panel_group.xml
@@ -1,13 +1,13 @@
-
-
-
- Certains changements n'ont pas été appliqués sur cet onglet.
-
-
- Voulez-vous enregistrer les modifications ?
-
-
-
-
-
-
+
+
+
+ Certains changements n'ont pas été appliqués sur cet onglet.
+
+
+ Voulez-vous enregistrer les modifications ?
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/panel_group_finder.xml b/indra/newview/skins/default/xui/fr/panel_group_finder.xml
index 79921ca47..0d36bd8dc 100644
--- a/indra/newview/skins/default/xui/fr/panel_group_finder.xml
+++ b/indra/newview/skins/default/xui/fr/panel_group_finder.xml
@@ -1,9 +1,9 @@
-
-
-
- Certains changements n'ont pas été appliqués sur cet onglet.
-
-
- Voulez-vous enregistrer les modifications ?
-
-
+
+
+
+ Certains changements n'ont pas été appliqués sur cet onglet.
+
+
+ Voulez-vous enregistrer les modifications ?
+
+
diff --git a/indra/newview/skins/default/xui/fr/panel_group_general.xml b/indra/newview/skins/default/xui/fr/panel_group_general.xml
index ffc2c9ef9..2b983ced8 100644
--- a/indra/newview/skins/default/xui/fr/panel_group_general.xml
+++ b/indra/newview/skins/default/xui/fr/panel_group_general.xml
@@ -1,76 +1,76 @@
-
-
-
- L'onglet Général contient les infos générales et les préférences du groupe ainsi que la liste des propriétaires et des membres visibles.
-
-
- Le profil du groupe a changé.
-
-
-
-
- Saisissez le nom du groupe ici
-
-
- Fondé par
-
-
- (en attente)
-
-
- Charte du groupe
-
-
-
- Indiquez ici la charte de votre groupe
-
-
-
-
- Propriétaires et membres visibles
-
-
- (Les propriétaires apparaissent en gras)
-
-
-
-
-
-
-
- Préférences
-
-
-
-
-
-
-
-
- - Type de public -
-
-
- Contenu Mature
-
-
- Contenu PG
-
-
-
-
- Mon titre actuel
-
-
-
-
-
-
-
- Extraction des données du résident en cours
-
-
- La création de ce groupe coûte 100 L$.
-Êtes-vous vraiment certain de vouloir dépenser 100 L$ pour créer ce groupe ?
-Sachez que si personne ne rejoint ce groupe sous 48h, il sera démantelé et ne pourra plus être utilisé.
-
-
+
+
+
+ L'onglet Général contient les infos générales et les préférences du groupe ainsi que la liste des propriétaires et des membres visibles.
+
+
+ Le profil du groupe a changé.
+
+
+
+
+ Saisissez le nom du groupe ici
+
+
+ Fondé par
+
+
+ (en attente)
+
+
+ Charte du groupe
+
+
+
+ Indiquez ici la charte de votre groupe
+
+
+
+
+ Propriétaires et membres visibles
+
+
+ (Les propriétaires apparaissent en gras)
+
+
+
+
+
+
+
+ Préférences
+
+
+
+
+
+
+
+
+ - Type de public -
+
+
+ Contenu Mature
+
+
+ Contenu PG
+
+
+
+
+ Mon titre actuel
+
+
+
+
+
+
+
+ Extraction des données du résident en cours
+
+
+ La création de ce groupe coûte 100 L$.
+Êtes-vous vraiment certain de vouloir dépenser 100 L$ pour créer ce groupe ?
+Sachez que si personne ne rejoint ce groupe sous 48h, il sera démantelé et ne pourra plus être utilisé.
+
+
diff --git a/indra/newview/skins/default/xui/fr/panel_group_invite.xml b/indra/newview/skins/default/xui/fr/panel_group_invite.xml
index f770b4b13..4cb0b8867 100644
--- a/indra/newview/skins/default/xui/fr/panel_group_invite.xml
+++ b/indra/newview/skins/default/xui/fr/panel_group_invite.xml
@@ -1,26 +1,26 @@
-
-
-
- Vous pouvez inviter plusieurs résidents
-Ã la fois. Cliquez d'abord sur
-Choisir un résident.
-
-
-
-
-
- Assignez-leur un rôle :
-
-
- Assignez-leur un rôle :
-
-
-
-
-
- Etes-vous certain de vouloir inviter un/de nouveau(x) propriétaire(s) ? Ce choix est permanent !
-
-
- (en cours de chargement...)
-
-
+
+
+
+ Vous pouvez inviter plusieurs résidents
+Ã la fois. Cliquez d'abord sur
+Choisir un résident.
+
+
+
+
+
+ Assignez-leur un rôle :
+
+
+ Assignez-leur un rôle :
+
+
+
+
+
+ Etes-vous certain de vouloir inviter un/de nouveau(x) propriétaire(s) ? Ce choix est permanent !
+
+
+ (en cours de chargement...)
+
+
diff --git a/indra/newview/skins/default/xui/fr/panel_group_land_money.xml b/indra/newview/skins/default/xui/fr/panel_group_land_money.xml
index f197528af..551d11d58 100644
--- a/indra/newview/skins/default/xui/fr/panel_group_land_money.xml
+++ b/indra/newview/skins/default/xui/fr/panel_group_land_money.xml
@@ -1,83 +1,83 @@
-
-
-
- Les parcelles appartenant au groupe sont indiquées avec le détails des contributions. Un avertissement apparaît si la surface utilisée par le groupe est supérieure ou égale au total des contributions. Les onglets Planification, Détails et Ventes correspondent aux finances du groupe.
-
-
-
- Vous n'avez pas la permission de voir quel terrain possède ce groupe.
-
-
- Vous n'avez pas la permission d'accéder aux informations
-financières de ce groupe.
-
-
- Chargement...
-
-
- Terrain du groupe
-
-
-
-
-
-
-
-
-
-
- Total des contributions :
-
-
- [AREA] m²
-
-
- Superficie déjà utilisée :
-
-
- [AREA] m²
-
-
- Superficie disponible :
-
-
- [AREA] m²
-
-
- Votre contribution :
-
-
- Impossible de définir votre don de terre.
-
-
- m² ([AMOUNT] max.)
-
-
- Une contribution supplémentaire du groupe est requise pour prendre en
-charge le terrain utilisé.
-
-
- Finances
-
-
-
-
- Calcul en cours...
-
-
-
-
- Calcul en cours...
-
-
-
-
-
-
- Calcul en cours...
-
-
-
-
-
-
+
+
+
+ Les parcelles appartenant au groupe sont indiquées avec le détails des contributions. Un avertissement apparaît si la surface utilisée par le groupe est supérieure ou égale au total des contributions. Les onglets Planification, Détails et Ventes correspondent aux finances du groupe.
+
+
+
+ Vous n'avez pas la permission de voir quel terrain possède ce groupe.
+
+
+ Vous n'avez pas la permission d'accéder aux informations
+financières de ce groupe.
+
+
+ Chargement...
+
+
+ Terrain du groupe
+
+
+
+
+
+
+
+
+
+
+ Total des contributions :
+
+
+ [AREA] m²
+
+
+ Superficie déjà utilisée :
+
+
+ [AREA] m²
+
+
+ Superficie disponible :
+
+
+ [AREA] m²
+
+
+ Votre contribution :
+
+
+ Impossible de définir votre don de terre.
+
+
+ m² ([AMOUNT] max.)
+
+
+ Une contribution supplémentaire du groupe est requise pour prendre en
+charge le terrain utilisé.
+
+
+ Finances
+
+
+
+
+ Calcul en cours...
+
+
+
+
+ Calcul en cours...
+
+
+
+
+
+
+ Calcul en cours...
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/panel_group_notices.xml b/indra/newview/skins/default/xui/fr/panel_group_notices.xml
index f3b4cfb88..7ed6a46cc 100644
--- a/indra/newview/skins/default/xui/fr/panel_group_notices.xml
+++ b/indra/newview/skins/default/xui/fr/panel_group_notices.xml
@@ -1,74 +1,74 @@
-
-
-
- Les notices vous permettent d'envoyer des messages et pièces-jointes aux membres du groupe autorisés à les recevoir. Vous pouvez désactiver la réception des notices à l'onglet Général.
-
-
- Aucune notice
-
-
-
- Anciennes notices du groupe
-
-
- Double-cliquez sur une notice pour l'afficher. Les notices sont conservées
-pendant 14 jours et chaque groupe a une limite quotidienne de 200 notices.
-
-
-
-
-
-
-
-
- Aucun résultat.
-
-
-
-
-
- Créer une notice
-
-
- Pour envoyer une notice, saisissez un sujet. Pour joindre
-une pièce-jointe à cette notice, faites-la glisser depuis votre
-inventaire vers cette fenêtre. Les pièces-jointes doivent être
-copiables et transférables. Il n'est pas possible d'envoyer de
-dossiers.
-
-
- Sujet :
-
-
-
- Message :
-
-
-
- Pièce-jointe :
-
-
-
-
-
-
-
-
-
- Détails
-
-
- Pour envoyer une nouvelle notice, cliquez sur Créer une notice ci-dessus.
-
-
- Sujet :
-
-
- Message :
-
-
-
-
-
+
+
+
+ Les notices vous permettent d'envoyer des messages et pièces-jointes aux membres du groupe autorisés à les recevoir. Vous pouvez désactiver la réception des notices à l'onglet Général.
+
+
+ Aucune notice
+
+
+
+ Anciennes notices du groupe
+
+
+ Double-cliquez sur une notice pour l'afficher. Les notices sont conservées
+pendant 14 jours et chaque groupe a une limite quotidienne de 200 notices.
+
+
+
+
+
+
+
+
+ Aucun résultat.
+
+
+
+
+
+ Créer une notice
+
+
+ Pour envoyer une notice, saisissez un sujet. Pour joindre
+une pièce-jointe à cette notice, faites-la glisser depuis votre
+inventaire vers cette fenêtre. Les pièces-jointes doivent être
+copiables et transférables. Il n'est pas possible d'envoyer de
+dossiers.
+
+
+ Sujet :
+
+
+
+ Message :
+
+
+
+ Pièce-jointe :
+
+
+
+
+
+
+
+
+
+ Détails
+
+
+ Pour envoyer une nouvelle notice, cliquez sur Créer une notice ci-dessus.
+
+
+ Sujet :
+
+
+ Message :
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/panel_group_roles.xml b/indra/newview/skins/default/xui/fr/panel_group_roles.xml
index 53608f61a..008402db3 100644
--- a/indra/newview/skins/default/xui/fr/panel_group_roles.xml
+++ b/indra/newview/skins/default/xui/fr/panel_group_roles.xml
@@ -1,160 +1,160 @@
-
-
-
- Certains changements n'ont pas été appliqués sur ce sous-onglet.
-
-
- Voulez-vous enregistrer les modifications ?
-
-
- Les Rôles Tout le monde et Propriétaires sont spéciaux et ne peuvent être supprimés.
-
-
-
-
- Membres
-
-
- Les rôles de chaque membre peuvent être personnalisés, ce qui permet une
-meilleure organisation du groupe.
-
-
-
-
- Rôles
-
-
- Sélectionnez un rôle ci-dessous. Vous pouvez modifier le nom, la
-description et le titre du membre.
-
-
- Sélectionnez un rôle ci-dessous pour en connaître les propriétés, les
-membres et les pouvoirs.
-
-
- Vous pouvez aussi assigner des pouvoirs au rôle.
-
-
- Vous pouvez afficher mais non modifier les pouvoirs assignés.
-
-
-
-
- Pouvoirs
-
-
- Vous pouvez afficher la description du pouvoir et voir à quels rôles ou Ã
-quels membres ces pouvoirs sont assignés.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Vous pouvez ajouter ou supprimer les rôles assignés aux membres.
-Pour sélectionner plusieurs membres, cliquez sur leurs noms en maintenant la touche Ctrl enfoncée.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Chaque rôle possède un titre et des pouvoirs. Un membre peut avoir plusieurs rôles mais il ne peut y avoir que 10 rôles dans un groupe, Visiteur et Propriétaire inclus.
-
-
- Les rôles Tous et Propriétaires sont spéciaux et ne peuvent pas être supprimés.
-
-
-
-
-
-
-
-
-
-
-
- Les pouvoirs déterminent les facultés de chaque membre dans le groupe.
-
-
-
-
-
- Rôles assignés
-
-
- Pouvoirs attribués
-
-
-
-
-
-
-
-
-
-
-
-
- Nom
-
-
- Description
-
-
- Employés
-
-
- Titre
-
-
- (en attente)
-
-
- (en attente)
-
-
- Membres assignés
-
-
- Pouvoirs attribués
-
-
-
-
-
-
-
-
-
-
- Description
-
-
- Ce pouvoir permet d'expulser des membres du groupe. Seul un propriétaire peut expulser un autre propriétaire.
-
-
- Rôles avec ce pouvoir
-
-
- Membres avec ce pouvoir
-
-
-
+
+
+
+ Certains changements n'ont pas été appliqués sur ce sous-onglet.
+
+
+ Voulez-vous enregistrer les modifications ?
+
+
+ Les Rôles Tout le monde et Propriétaires sont spéciaux et ne peuvent être supprimés.
+
+
+
+
+ Membres
+
+
+ Les rôles de chaque membre peuvent être personnalisés, ce qui permet une
+meilleure organisation du groupe.
+
+
+
+
+ Rôles
+
+
+ Sélectionnez un rôle ci-dessous. Vous pouvez modifier le nom, la
+description et le titre du membre.
+
+
+ Sélectionnez un rôle ci-dessous pour en connaître les propriétés, les
+membres et les pouvoirs.
+
+
+ Vous pouvez aussi assigner des pouvoirs au rôle.
+
+
+ Vous pouvez afficher mais non modifier les pouvoirs assignés.
+
+
+
+
+ Pouvoirs
+
+
+ Vous pouvez afficher la description du pouvoir et voir à quels rôles ou Ã
+quels membres ces pouvoirs sont assignés.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Vous pouvez ajouter ou supprimer les rôles assignés aux membres.
+Pour sélectionner plusieurs membres, cliquez sur leurs noms en maintenant la touche Ctrl enfoncée.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Chaque rôle possède un titre et des pouvoirs. Un membre peut avoir plusieurs rôles mais il ne peut y avoir que 10 rôles dans un groupe, Visiteur et Propriétaire inclus.
+
+
+ Les rôles Tous et Propriétaires sont spéciaux et ne peuvent pas être supprimés.
+
+
+
+
+
+
+
+
+
+
+
+ Les pouvoirs déterminent les facultés de chaque membre dans le groupe.
+
+
+
+
+
+ Rôles assignés
+
+
+ Pouvoirs attribués
+
+
+
+
+
+
+
+
+
+
+
+
+ Nom
+
+
+ Description
+
+
+ Employés
+
+
+ Titre
+
+
+ (en attente)
+
+
+ (en attente)
+
+
+ Membres assignés
+
+
+ Pouvoirs attribués
+
+
+
+
+
+
+
+
+
+
+ Description
+
+
+ Ce pouvoir permet d'expulser des membres du groupe. Seul un propriétaire peut expulser un autre propriétaire.
+
+
+ Rôles avec ce pouvoir
+
+
+ Membres avec ce pouvoir
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/panel_group_voting.xml b/indra/newview/skins/default/xui/fr/panel_group_voting.xml
index 6534d9bff..9f6fb8cb4 100644
--- a/indra/newview/skins/default/xui/fr/panel_group_voting.xml
+++ b/indra/newview/skins/default/xui/fr/panel_group_voting.xml
@@ -1,112 +1,112 @@
-
-
-
- Les propositions de groupe permettent d'en savoir plus sur les objectifs du groupe ou son avis sur un sujet donné. Si vous avez les pouvoirs requis, vous pouvez créer des propositions, voter et accéder à d'anciennes propositions.
-
-
-
- Propositions du groupe en cours
-
-
- Proposition Fin du vote Votée ?
-
-
- Propositions en cours
-
-
- Double-cliquez sur la proposition pour laquelle vous aimeriez voter
-ou cliquez sur Créer proposition pour créer une nouvelle proposition.
-
-
- Créer une proposition
-
-
- Saisissez une description. Vous pouvez changer le quorum, la durée
-et la majorité requise pour que la proposition soit adoptée.
-
-
- Vote sur la proposition
-
-
- Pour voter, cliquez sur les boutons Oui ou Non,
-ou abstenez-vous en cliquant sur M'abstenir.
-
-
- Vous avez voté : [VOTE]
-
-
- La proposition que vous essayez de créer est vide. Veuillez saisir une description avant de créer la proposition.
-
-
- Double-cliquez sur la proposition sur laquelle vous voulez voter ou cliquez
-sur Créer une nouvelle proposition pour en créer une nouvelle.
-
-
- Description de la proposition
-
-
-
-
-
- Quorum :
-
-
-
- sur [MEMBERS] membres doivent voter.
-
-
- Durée :
-
-
-
- jours
-
-
- Majorité simple
- Majorité des 2/3
- Unanimité
-
-
- Début :
-
-
- Fin :
-
-
-
-
-
-
-
- Historique des votes
-
-
- Double-cliquez sur un ancien vote ou sélectionnez-en un pour voir les résultats.
-
-
- Ancien vote Fin du vote
-
-
-
- Résultats du vote :
-
-
-
- Soumission du Oui en cours...
-
-
- Soumission du Non en cours...
-
-
- Soumission de l'abstention en cours...
-
-
- Soumission de la nouvelle proposition en cours...
-
-
- Votre vote a bien été reçu.
-
-
- Vous avez déjà voté. Vous ne pouvez voter qu'une seule fois sur une proposition.
-
-
+
+
+
+ Les propositions de groupe permettent d'en savoir plus sur les objectifs du groupe ou son avis sur un sujet donné. Si vous avez les pouvoirs requis, vous pouvez créer des propositions, voter et accéder à d'anciennes propositions.
+
+
+
+ Propositions du groupe en cours
+
+
+ Proposition Fin du vote Votée ?
+
+
+ Propositions en cours
+
+
+ Double-cliquez sur la proposition pour laquelle vous aimeriez voter
+ou cliquez sur Créer proposition pour créer une nouvelle proposition.
+
+
+ Créer une proposition
+
+
+ Saisissez une description. Vous pouvez changer le quorum, la durée
+et la majorité requise pour que la proposition soit adoptée.
+
+
+ Vote sur la proposition
+
+
+ Pour voter, cliquez sur les boutons Oui ou Non,
+ou abstenez-vous en cliquant sur M'abstenir.
+
+
+ Vous avez voté : [VOTE]
+
+
+ La proposition que vous essayez de créer est vide. Veuillez saisir une description avant de créer la proposition.
+
+
+ Double-cliquez sur la proposition sur laquelle vous voulez voter ou cliquez
+sur Créer une nouvelle proposition pour en créer une nouvelle.
+
+
+ Description de la proposition
+
+
+
+
+
+ Quorum :
+
+
+
+ sur [MEMBERS] membres doivent voter.
+
+
+ Durée :
+
+
+
+ jours
+
+
+ Majorité simple
+ Majorité des 2/3
+ Unanimité
+
+
+ Début :
+
+
+ Fin :
+
+
+
+
+
+
+
+ Historique des votes
+
+
+ Double-cliquez sur un ancien vote ou sélectionnez-en un pour voir les résultats.
+
+
+ Ancien vote Fin du vote
+
+
+
+ Résultats du vote :
+
+
+
+ Soumission du Oui en cours...
+
+
+ Soumission du Non en cours...
+
+
+ Soumission de l'abstention en cours...
+
+
+ Soumission de la nouvelle proposition en cours...
+
+
+ Votre vote a bien été reçu.
+
+
+ Vous avez déjà voté. Vous ne pouvez voter qu'une seule fois sur une proposition.
+
+
diff --git a/indra/newview/skins/default/xui/fr/panel_groups.xml b/indra/newview/skins/default/xui/fr/panel_groups.xml
index 2e1acb5fd..8f8b738a6 100644
--- a/indra/newview/skins/default/xui/fr/panel_groups.xml
+++ b/indra/newview/skins/default/xui/fr/panel_groups.xml
@@ -1,18 +1,18 @@
-
-
-
-
- Le groupe actif est en italique.
-
-
- Vous appartenez à [COUNT] groupes ([MAX] max).
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+ Le groupe actif est en italique.
+
+
+ Vous appartenez à [COUNT] groupes ([MAX] max).
+
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/panel_land_covenant.xml b/indra/newview/skins/default/xui/fr/panel_land_covenant.xml
index 122d589a6..6732a9c4e 100644
--- a/indra/newview/skins/default/xui/fr/panel_land_covenant.xml
+++ b/indra/newview/skins/default/xui/fr/panel_land_covenant.xml
@@ -1,39 +1,39 @@
-
-
-
- Région :
-
-
- (inconnue)
-
-
- Domaine :
-
-
- (inconnu)
-
-
- Propriétaire :
-
-
- (inconnu)
-
-
- Le terrain acheté dans cette région peut être revendu ou pas.
-
-
- Le terrain acheté dans cette région peut être fusionné/divisé ou pas.
-
-
- Le terrain acheté dans cette région peut être revendu.
-
-
- Le terrain acheté dans cette région ne peut pas être revendu.
-
-
- Le terrain acheté dans cette région peut être fusionné ou divisé.
-
-
- Le terrain acheté dans cette région ne peut pas être fusionné ou divisé.
-
-
+
+
+
+ Région :
+
+
+ (inconnue)
+
+
+ Domaine :
+
+
+ (inconnu)
+
+
+ Propriétaire :
+
+
+ (inconnu)
+
+
+ Le terrain acheté dans cette région peut être revendu ou pas.
+
+
+ Le terrain acheté dans cette région peut être fusionné/divisé ou pas.
+
+
+ Le terrain acheté dans cette région peut être revendu.
+
+
+ Le terrain acheté dans cette région ne peut pas être revendu.
+
+
+ Le terrain acheté dans cette région peut être fusionné ou divisé.
+
+
+ Le terrain acheté dans cette région ne peut pas être fusionné ou divisé.
+
+
diff --git a/indra/newview/skins/default/xui/fr/panel_login.xml b/indra/newview/skins/default/xui/fr/panel_login.xml
index 780aebb2d..2307df303 100644
--- a/indra/newview/skins/default/xui/fr/panel_login.xml
+++ b/indra/newview/skins/default/xui/fr/panel_login.xml
@@ -1,70 +1,70 @@
-
-
-
-
- http://secondlife.com/app/login/
-
-
- http://secondlife.com/account/request.php
-
-
- Nom :
-
-
- Mot de passe :
-
-
- Lieu d'arrivée :
-
-
-
- Domicile
-
-
- Dernier emplacement
-
-
- <Choisir région>
-
-
- <Nom de la région>
-
-
-
-
-
- Grille :
-
-
-
-
- Le plein écran sera activé après identification.
-
-
-
-
-
-
- Créer un compte
-
-
- Nom ou mot de passe oublié ?
-
-
+
+
+
+
+ http://secondlife.com/app/login/
+
+
+ http://secondlife.com/account/request.php
+
+
+ Nom :
+
+
+ Mot de passe :
+
+
+ Lieu d'arrivée :
+
+
+
+ Domicile
+
+
+ Dernier emplacement
+
+
+ <Choisir région>
+
+
+ <Nom de la région>
+
+
+
+
+
+ Grille :
+
+
+
+
+ Le plein écran sera activé après identification.
+
+
+
+
+
+
+ Créer un compte
+
+
+ Nom ou mot de passe oublié ?
+
+
diff --git a/indra/newview/skins/default/xui/fr/panel_master_volume.xml b/indra/newview/skins/default/xui/fr/panel_master_volume.xml
index cfba25acd..3cb855875 100644
--- a/indra/newview/skins/default/xui/fr/panel_master_volume.xml
+++ b/indra/newview/skins/default/xui/fr/panel_master_volume.xml
@@ -1,5 +1,5 @@
-
-
-
-
-
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/panel_media_controls.xml b/indra/newview/skins/default/xui/fr/panel_media_controls.xml
index d4879ac6e..72b3ade29 100644
--- a/indra/newview/skins/default/xui/fr/panel_media_controls.xml
+++ b/indra/newview/skins/default/xui/fr/panel_media_controls.xml
@@ -1,38 +1,38 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Jouer
-
-
- Stop
-
-
- Mettre en pause
-
-
- Aucun média spécifié
-
-
- (URL cachée par le propriétaire de la parcelle)
-
-
- Cet endroit propose du contenu Web. Cliquez sur Jouer pour afficher le contenu web.
-
-
- Cet endroit propose du contenu vidéo. Cliquez sur Jouer pour lire la vidéo.
-
-
- Affichez le contenu web.
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Jouer
+
+
+ Stop
+
+
+ Mettre en pause
+
+
+ Aucun média spécifié
+
+
+ (URL cachée par le propriétaire de la parcelle)
+
+
+ Cet endroit propose du contenu Web. Cliquez sur Jouer pour afficher le contenu web.
+
+
+ Cet endroit propose du contenu vidéo. Cliquez sur Jouer pour lire la vidéo.
+
+
+ Affichez le contenu web.
+
+
diff --git a/indra/newview/skins/default/xui/fr/panel_media_remote.xml b/indra/newview/skins/default/xui/fr/panel_media_remote.xml
index 3e860855f..d2ee33a91 100644
--- a/indra/newview/skins/default/xui/fr/panel_media_remote.xml
+++ b/indra/newview/skins/default/xui/fr/panel_media_remote.xml
@@ -1,10 +1,10 @@
-
-
-
- Vidéo
-
-
-
-
-
-
+
+
+
+ Vidéo
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/panel_media_remote_expanded.xml b/indra/newview/skins/default/xui/fr/panel_media_remote_expanded.xml
index c3bec51f3..947cffba6 100644
--- a/indra/newview/skins/default/xui/fr/panel_media_remote_expanded.xml
+++ b/indra/newview/skins/default/xui/fr/panel_media_remote_expanded.xml
@@ -1,28 +1,28 @@
-
-
-
-
- Jouer
-
-
- Stop
-
-
- Pauser
-
-
- Aucun média spécifié
-
-
- (URL cachée par le propriétaire de la parcelle)
-
-
- Il y a du contenu web à cet endroit. Cliquez sur Jouer pour afficher le contenu web.
-
-
- Il y a du contenu vidéo à cet endroit. Cliquez sur Jouer pour lire la vidéo.
-
-
- Afficher le contenu web qui se trouve ici.
-
-
+
+
+
+
+ Jouer
+
+
+ Stop
+
+
+ Pauser
+
+
+ Aucun média spécifié
+
+
+ (URL cachée par le propriétaire de la parcelle)
+
+
+ Il y a du contenu web à cet endroit. Cliquez sur Jouer pour afficher le contenu web.
+
+
+ Il y a du contenu vidéo à cet endroit. Cliquez sur Jouer pour lire la vidéo.
+
+
+ Afficher le contenu web qui se trouve ici.
+
+
diff --git a/indra/newview/skins/default/xui/fr/panel_mini_map.xml b/indra/newview/skins/default/xui/fr/panel_mini_map.xml
index d2084826e..f97b5ca9f 100644
--- a/indra/newview/skins/default/xui/fr/panel_mini_map.xml
+++ b/indra/newview/skins/default/xui/fr/panel_mini_map.xml
@@ -1,27 +1,27 @@
-
-
-
- N
-
-
- E
-
-
- S
-
-
- O
-
-
- NE
-
-
- SE
-
-
- SO
-
-
- NO
-
-
+
+
+
+ N
+
+
+ E
+
+
+ S
+
+
+ O
+
+
+ NE
+
+
+ SE
+
+
+ SO
+
+
+ NO
+
+
diff --git a/indra/newview/skins/default/xui/fr/panel_notifications_channel.xml b/indra/newview/skins/default/xui/fr/panel_notifications_channel.xml
index 82cad706d..5beb71981 100644
--- a/indra/newview/skins/default/xui/fr/panel_notifications_channel.xml
+++ b/indra/newview/skins/default/xui/fr/panel_notifications_channel.xml
@@ -1,15 +1,15 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/panel_overlaybar.xml b/indra/newview/skins/default/xui/fr/panel_overlaybar.xml
index f1b481b95..e94bf0704 100644
--- a/indra/newview/skins/default/xui/fr/panel_overlaybar.xml
+++ b/indra/newview/skins/default/xui/fr/panel_overlaybar.xml
@@ -1,27 +1,27 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/panel_place.xml b/indra/newview/skins/default/xui/fr/panel_place.xml
index 4d074532f..17d463fbd 100644
--- a/indra/newview/skins/default/xui/fr/panel_place.xml
+++ b/indra/newview/skins/default/xui/fr/panel_place.xml
@@ -1,39 +1,39 @@
-
-
-
- Nom :
-
-
- Description :
-
-
-
-
- Emplacement :
-
-
-
-
-
-
- Trafic : [TRAFFIC].Â
-
-
- Surface : [AREA] m².Â
-
-
- En vente pour [PRICE] L$.
-
-
- Enchère : [ID]
-
-
- Les informations sur le lieu ne sont pas disponibles sans mise à jour du serveur.
-
-
- Aucune information sur ce lieu n'est disponible actuellement, veuillez réessayer ultérieurement.
-
-
- Les informations sur ce lieu ne sont pas disponibles car l'accès y est restreint. Veuillez vérifier vos droits avec le propriétaire de la parcelle.
-
-
+
+
+
+ Nom :
+
+
+ Description :
+
+
+
+
+ Emplacement :
+
+
+
+
+
+
+ Trafic : [TRAFFIC].Â
+
+
+ Surface : [AREA] m².Â
+
+
+ En vente pour [PRICE] L$.
+
+
+ Enchère : [ID]
+
+
+ Les informations sur le lieu ne sont pas disponibles sans mise à jour du serveur.
+
+
+ Aucune information sur ce lieu n'est disponible actuellement, veuillez réessayer ultérieurement.
+
+
+ Les informations sur ce lieu ne sont pas disponibles car l'accès y est restreint. Veuillez vérifier vos droits avec le propriétaire de la parcelle.
+
+
diff --git a/indra/newview/skins/default/xui/fr/panel_place_small.xml b/indra/newview/skins/default/xui/fr/panel_place_small.xml
index f81ffcfa4..bc245221b 100644
--- a/indra/newview/skins/default/xui/fr/panel_place_small.xml
+++ b/indra/newview/skins/default/xui/fr/panel_place_small.xml
@@ -1,43 +1,43 @@
-
-
-
- Nom :
-
-
- Description :
-
-
-
-
- Type de terrain :
-
-
-
- Lieu :
-
-
-
-
-
-
- Trafic : [TRAFFIC].Â
-
-
- Surface : [AREA] m².Â
-
-
- En vente pour [PRICE] L$.
-
-
- Enchère : [ID]
-
-
- Les informations sur le lieu ne sont pas disponibles sans mise à jour du serveur.
-
-
- Aucune information sur ce lieu n'est disponible actuellement, veuillez réessayer ultérieurement.
-
-
- Les informations sur ce lieu ne sont pas disponibles car l'accès y est restreint. Veuillez vérifier vos droits avec le propriétaire de la parcelle.
-
-
+
+
+
+ Nom :
+
+
+ Description :
+
+
+
+
+ Type de terrain :
+
+
+
+ Lieu :
+
+
+
+
+
+
+ Trafic : [TRAFFIC].Â
+
+
+ Surface : [AREA] m².Â
+
+
+ En vente pour [PRICE] L$.
+
+
+ Enchère : [ID]
+
+
+ Les informations sur le lieu ne sont pas disponibles sans mise à jour du serveur.
+
+
+ Aucune information sur ce lieu n'est disponible actuellement, veuillez réessayer ultérieurement.
+
+
+ Les informations sur ce lieu ne sont pas disponibles car l'accès y est restreint. Veuillez vérifier vos droits avec le propriétaire de la parcelle.
+
+
diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_ascent_system.xml b/indra/newview/skins/default/xui/fr/panel_preferences_ascent_system.xml
index e600adafd..8b180cb3f 100644
--- a/indra/newview/skins/default/xui/fr/panel_preferences_ascent_system.xml
+++ b/indra/newview/skins/default/xui/fr/panel_preferences_ascent_system.xml
@@ -1,321 +1,321 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-seconds
-
-
-
-
-
-
-Tp à travers la sim (usage: cmd x y z)
-
-
-
-Tp au sol (usage: cmd)
-
-
-
-Tp en altitude (usage: cmd z)
-
-
-
-Tp "ET" retourner maison ! (usage: cmd)
-
-
-
-Rezzer une plateforme (usage: cmd 0 - 30)
-
-
-
-
-Calculette (usage: cmd 2 + 2)
-
-
-
-Vider l'historique du chat (usage: cmd)
-
-
-
-
-
-Changer le "Draw Distance" (usage: cmd metres)
-
-
-
-Tp à la position de la cam (usage: cmd)
-
-
-
-Avoir un nom avec la clef (usage: cmd clef)
-
-
-
-Tp un avatar avec la clef (usage: cmd clef)
-
-
-
-Tp sur une sim x (usage: cmd nomdelasim)
-
-
-
-
-Se tp vers un avatar (usage: cmd nom)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Pivot Point
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+secondes
+
+
+
+
+
+
+Tp à travers la sim (usage: cmd x y z)
+
+
+
+Tp au sol (usage: cmd)
+
+
+
+Tp en altitude (usage: cmd z)
+
+
+
+Tp "ET" retourner maison ! (usage: cmd)
+
+
+
+Rezzer une plateforme (usage: cmd 0 - 30)
+
+
+
+
+Calculette (usage: cmd 2 + 2)
+
+
+
+Vider l'historique du chat (usage: cmd)
+
+
+
+
+
+Changer le "Draw Distance" (usage: cmd metres)
+
+
+
+Tp à la position de la cam (usage: cmd)
+
+
+
+Avoir un nom avec la clef (usage: cmd clef)
+
+
+
+Tp un avatar avec la clef (usage: cmd clef)
+
+
+
+Tp sur une sim x (usage: cmd nomdelasim)
+
+
+
+
+Se tp vers un avatar (usage: cmd nom)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Point de Pivot
+
+
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_audio.xml b/indra/newview/skins/default/xui/fr/panel_preferences_audio.xml
index 43b656349..a4616193a 100644
--- a/indra/newview/skins/default/xui/fr/panel_preferences_audio.xml
+++ b/indra/newview/skins/default/xui/fr/panel_preferences_audio.xml
@@ -1,30 +1,30 @@
-
-
-
- Volume :
-
-
-
-
- Médias et Audio :
( Filtre de Sécurité des Médias )
-
-
- Â
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+ Volume :
+
+
+
+
+ Médias et Audio :
( Filtre de Sécurité des Médias )
+
+
+ Â
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_chat.xml b/indra/newview/skins/default/xui/fr/panel_preferences_chat.xml
index 94e1a9a86..3ed678e59 100644
--- a/indra/newview/skins/default/xui/fr/panel_preferences_chat.xml
+++ b/indra/newview/skins/default/xui/fr/panel_preferences_chat.xml
@@ -1,125 +1,125 @@
-
-
-
- Taille de la police
-du chat :
-
-
-
- Petite
-
-
- Moyenne
-
-
- Grande
-
-
-
- Couleur du chat :
-
-
-
-
-
-
-
-
-
-
-
- Console du chat :
-
-
-
- s
-
-
-
- lignes
-
-
-
- Options du chat :
-
-
-
-
-
-
-
- Bulles de chat  :
-
-
-
-
- Erreurs de script :
-
-
-
- Traduire:
-
-
-
-
-
- Choix par défaut
-
-
- English (Anglais)
-
-
- Dansk (Danois) - Bêta
-
-
- Deutsch (Allemand) - Bêta
-
-
- Español (Espagnol) - Bêta
-
-
- Français - Bêta
-
-
- Italiano (Italien) - Bêta
-
-
- Magyar (Hongrois) - Bêta
-
-
- Nederlands (Néerlandais) - Bêta
-
-
- Polski (Polonais) - Bêta
-
-
- Portugués (Portugais) - Bêta
-
-
- РуÑÑкий (Russe) - Bêta
-
-
- Türkçe (Turc) - Bêta
-
-
- УкраїнÑька (Ukrainien) - Bêta
-
-
- 䏿–‡ (简体) (Chinois) - Bêta
-
-
- 日本語 (Japonais) - Bêta
-
-
- 한êµì–´ (Coréen) - Bêta
-
-
-
- Langue de chat :
-
-
-
-
+
+
+
+ Taille de la police
+du chat :
+
+
+
+ Petite
+
+
+ Moyenne
+
+
+ Grande
+
+
+
+ Couleur du chat :
+
+
+
+
+
+
+
+
+
+
+
+ Console du chat :
+
+
+
+ s
+
+
+
+ lignes
+
+
+
+ Options du chat :
+
+
+
+
+
+
+
+ Bulles de chat  :
+
+
+
+
+ Erreurs de script :
+
+
+
+ Traduire:
+
+
+
+
+
+ Choix par défaut
+
+
+ English (Anglais)
+
+
+ Dansk (Danois) - Bêta
+
+
+ Deutsch (Allemand) - Bêta
+
+
+ Español (Espagnol) - Bêta
+
+
+ Français - Bêta
+
+
+ Italiano (Italien) - Bêta
+
+
+ Magyar (Hongrois) - Bêta
+
+
+ Nederlands (Néerlandais) - Bêta
+
+
+ Polski (Polonais) - Bêta
+
+
+ Portugués (Portugais) - Bêta
+
+
+ РуÑÑкий (Russe) - Bêta
+
+
+ Türkçe (Turc) - Bêta
+
+
+ УкраїнÑька (Ukrainien) - Bêta
+
+
+ 䏿–‡ (简体) (Chinois) - Bêta
+
+
+ 日本語 (Japonais) - Bêta
+
+
+ 한êµì–´ (Coréen) - Bêta
+
+
+
+ Langue de chat :
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_general.xml b/indra/newview/skins/default/xui/fr/panel_preferences_general.xml
index d4cd0a7a1..480eacc47 100644
--- a/indra/newview/skins/default/xui/fr/panel_preferences_general.xml
+++ b/indra/newview/skins/default/xui/fr/panel_preferences_general.xml
@@ -1,148 +1,143 @@
-
-
-
-
- Domicile
-
-
- Dernier emplacement
-
-
-
-
-
- Jamais
-
-
- Afficher temporairement
-
-
- Toujours
-
-
-
-
-
- Titres de groupe :
-
-
-
-
-
- Taille de l'interface :
-
-
-
-
-
-
- Catégorie de contenu :
-
-
- Je veux accéder au contenu classé :
-
-
-
- PG, Mature et Adult
-
-
- PG et Mature
-
-
- PG uniquement
-
-
-
- PG uniquement
-
-
- Lieu de départ :
-
-
- Afficher les noms :
-
-
- Couleur du faisceau
-de sélection :
-
-
- secondes
-
-
- Rapports de crash :
-
-
- Langue :
-
-
- (redémarrage requis)
-
-
- <Saisissez le nom de la région>
-
-
-
- Demander avant d'envoyer
-
-
- Toujours envoyer
-
-
- Ne jamais envoyer
-
-
-
-
- Choix par défaut
-
-
- English (Anglais)
-
-
- Dansk (Danois) - Bêta
-
-
- Deutsch (Allemand) - Bêta
-
-
- Español (Espagnol) - Bêta
-
-
- Français - Bêta
-
-
- Italiano (Italien) - Bêta
-
-
- Magyar (Hongrois) - Bêta
-
-
- Nederlands (Néerlandais) - Bêta
-
-
- Polski (Polonais) - Bêta
-
-
- Portugués (Portugais) - Bêta
-
-
- РуÑÑкий (Russe) - Bêta
-
-
- Türkçe (Turc) - Bêta
-
-
- УкраїнÑька (Ukrainien) - Bêta
-
-
- 䏿–‡ (简体) (Chinois) - Bêta
-
-
- 日本語 (Japonais) - Bêta
-
-
- 한êµì–´ (Coréen) - Bêta
-
-
-
-
+
+
+
+ Domicile
+ Dernier emplacement.
+
+
+
+ Jamais
+ Afficher temporairement
+ Toujours
+
+
+
+
+
+
+
+
+
+ Titres de groupe :
+
+
+
+
+
+ Taille de l'interface :
+
+
+
+
+
+
+ Catégories :
+
+
+ Je veux accéder au contenu classé :
+
+
+
+ PG, Mature & Adult
+
+
+ PG et Mature
+
+
+ PG uniquement
+
+
+
+ PG uniquement
+
+
+ Lieu de départ :
+
+
+ Afficher les noms :
+
+
+ Couleur du faisceau
+de sélection :
+
+
+ secondes
+
+
+ Rapports de crash :
+
+
+ Langue :
+
+
+ (redémarrage requis)
+
+
+ <Saisissez le nom de la région>
+
+
+
+ Demander avant d'envoyer
+
+
+ Toujours envoyer
+
+
+ Ne jamais envoyer
+
+
+
+
+ Choix par défaut
+
+
+ English (Anglais)
+
+
+ Dansk (Danois) - Bêta
+
+
+ Deutsch (Allemand) - Bêta
+
+
+ Español (Espagnol) - Bêta
+
+
+ Français - Bêta
+
+
+ Italiano (Italien) - Bêta
+
+
+ Magyar (Hongrois) - Bêta
+
+
+ Nederlands (Néerlandais) - Bêta
+
+
+ Polski (Polonais) - Bêta
+
+
+ Portugués (Portugais) - Bêta
+
+
+ РуÑÑкий (Russe) - Bêta
+
+
+ Türkçe (Turc) - Bêta
+
+
+ УкраїнÑька (Ukrainien) - Bêta
+
+
+ 䏿–‡ (简体) (Chinois) - Bêta
+
+
+ 日本語 (Japonais) - Bêta
+
+
+ 한êµì–´ (Coréen) - Bêta
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/fr/panel_preferences_graphics1.xml
index e1ace9c2d..b843ef88b 100644
--- a/indra/newview/skins/default/xui/fr/panel_preferences_graphics1.xml
+++ b/indra/newview/skins/default/xui/fr/panel_preferences_graphics1.xml
@@ -1,231 +1,231 @@
-
-
-
-
- Décochez cette option pour passer en mode plein écran.
-
-
- Taille de la fenêtre :
-
-
-
- 640 x 480
-
-
- 800 x 600
-
-
- 720 x 480 (NTSC)
-
-
- 768 x 576 (PAL)
-
-
- 1024 x 768
-
-
-
- Résolution de l'affichage :
-
-
- Rapport hauteur/largeur :
-
-
-
- 4:3 (Standard CRT)
-
-
- 5:4 (1280 x 1024 LCD)
-
-
- 8:5 (écran large)
-
-
- 16:9 (plein écran)
-
-
-
- Résolution d'affichage :
-
-
- Format de plein écran :
-
-
- (largeur / hauteur)
-
-
- Taille de l'IU :
-
-
- (mètres, moins = plus rapide)
-
-
- Options d'affichage :
-
-
-
-
-
-
-
- Qualité et
-
-
- Performance :
-
-
- Plus rapide
-
-
- Faible
-
-
- Moyen
-
-
- Élevé
-
-
- Ultra
-
-
- Plus élevée
-
-
-
-
- Effets :
-
-
-
-
-
-
-
- Reflets:
-
-
-
- Aucun
-
-
- Terrain et arbres
-
-
- Objets Statiques
-
-
- Avatars et objets
-
-
- Tout
-
-
-
-
- Ombres atténués:
-
-
-
- Disabled
-
-
- Sun shadows
-
-
- Sun and spotlight shadows
-
-
- Rendu de l'avatar :
-
-
-
-
-
- m
-
-
- m
-
-
-
-
-
- Détails des rendus :
-
-
-
-
-
-
-
-
- Faible
-
-
- Faible
-
-
- Faible
-
-
- Faible
-
-
- Faible
-
-
- Faible
-
-
- Faible
-
-
- Sources lumineuses :
-
-
-
- Soleil et lune uniquement
-
-
- Lumières de proximité
-
-
-
- Rendu du terrain :
-
-
-
- Faible
-
-
- Élevé
-
-
-
-
-
- [RES_X] x [RES_Y]
-
-
- [NUM]:[DEN]
-
-
+
+
+
+
+ Décochez cette option pour passer en mode plein écran.
+
+
+ Taille de la fenêtre :
+
+
+
+ 640 x 480
+
+
+ 800 x 600
+
+
+ 720 x 480 (NTSC)
+
+
+ 768 x 576 (PAL)
+
+
+ 1024 x 768
+
+
+
+ Résolution de l'affichage :
+
+
+ Rapport hauteur/largeur :
+
+
+
+ 4:3 (Standard CRT)
+
+
+ 5:4 (1280 x 1024 LCD)
+
+
+ 8:5 (écran large)
+
+
+ 16:9 (plein écran)
+
+
+
+ Résolution d'affichage :
+
+
+ Format de plein écran :
+
+
+ (largeur / hauteur)
+
+
+ Taille de l'IU :
+
+
+ (mètres, moins = plus rapide)
+
+
+ Options d'affichage :
+
+
+
+
+
+
+
+ Qualité et
+
+
+ Performance :
+
+
+ Plus rapide
+
+
+ Faible
+
+
+ Moyen
+
+
+ Élevé
+
+
+ Ultra
+
+
+ Plus élevée
+
+
+
+
+ Effets :
+
+
+
+
+
+
+
+ Reflets:
+
+
+
+ Aucun
+
+
+ Terrain et arbres
+
+
+ Objets Statiques
+
+
+ Avatars et objets
+
+
+ Tout
+
+
+
+ Ombres atténuées:
+
+
+
+ Désactivé
+
+
+ Ombres solaires
+
+
+ Ombres des projecteurs
+
+
+
+ Rendu de l'avatar :
+
+
+
+
+
+ m
+
+
+ m
+
+
+
+
+
+ Détails des rendus :
+
+
+
+
+
+
+
+
+ Faible
+
+
+ Faible
+
+
+ Faible
+
+
+ Faible
+
+
+ Faible
+
+
+ Faible
+
+
+ Faible
+
+
+ Sources lumineuses :
+
+
+
+ Soleil et lune uniquement
+
+
+ Lumières de proximité
+
+
+
+ Rendu du terrain :
+
+
+
+ Faible
+
+
+ Élevé
+
+
+
+
+
+ [RES_X] x [RES_Y]
+
+
+ [NUM]:[DEN]
+
+
diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_grids.xml b/indra/newview/skins/default/xui/fr/panel_preferences_grids.xml
index 9e7a9a236..d7b34cce4 100644
--- a/indra/newview/skins/default/xui/fr/panel_preferences_grids.xml
+++ b/indra/newview/skins/default/xui/fr/panel_preferences_grids.xml
@@ -1,242 +1,242 @@
-
-
-
-
- Choisir une Grille:
-
-
-
-
- ([DEFAULT])
-
-
-
-
-
-
-
-
-
- Login URL:
-
-
-
-
-
- Plateforme:
-
-
-
-
- Nom:
-
-
-
-
-
- Infos:
-
-
-
-
-
-
-
- Page Splash :
-
-
-
-
- Aide URL:
-
-
-
-
- Site Web:
-
-
-
-
- Support URL:
-
-
-
-
- Compte URL:
-
-
-
-
- Mot de Passe URL:
-
-
-
-
- Recherche URL:
-
-
-
-
-
-
+
+
+
+
+ Choisir une Grille:
+
+
+
+
+ ([DEFAULT])
+
+
+
+
+
+
+
+
+
+ Login URL:
+
+
+
+
+
+ Plateforme:
+
+
+
+
+ Nom:
+
+
+
+
+
+ Infos:
+
+
+
+
+
+
+
+ Page Splash :
+
+
+
+
+ Aide URL:
+
+
+
+
+ Site Web:
+
+
+
+
+ Support URL:
+
+
+
+
+ Compte URL:
+
+
+
+
+ Mot de Passe URL:
+
+
+
+
+ Recherche URL:
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_im.xml b/indra/newview/skins/default/xui/fr/panel_preferences_im.xml
index d8613f5ad..ce37bf310 100644
--- a/indra/newview/skins/default/xui/fr/panel_preferences_im.xml
+++ b/indra/newview/skins/default/xui/fr/panel_preferences_im.xml
@@ -1,36 +1,36 @@
-
-
-
- Mon statut en ligne :
-
-
-
- se connecter pour changer
-
-
-
-
-
-
- Réponse si occupé(e) :
-
-
- Enregistrements :
-
-
-
-
-
-
-
-
-
-
-
-
- IM :
-
-
+
+
+
+ Mon statut en ligne :
+
+
+
+ se connecter pour changer
+
+
+
+
+
+
+ Réponse si occupé(e) :
+
+
+ Enregistrements :
+
+
+
+
+
+
+
+
+
+
+
+
+ IM :
+
+
diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_input.xml b/indra/newview/skins/default/xui/fr/panel_preferences_input.xml
index fcd5d04f0..c6b948238 100644
--- a/indra/newview/skins/default/xui/fr/panel_preferences_input.xml
+++ b/indra/newview/skins/default/xui/fr/panel_preferences_input.xml
@@ -1,30 +1,35 @@
-
-
-
- Vue subjective :
-
-
- Sensibilité de la souris :
-
-
-
- Vol automatique :
-
-
-
- Options de la caméra :
-
-
- Angle de vision :
-
-
- Distance :
-
-
-
-
- Affichage de l'avatar :
-
-
-
-
+
+
+
+ Vue subjective :
+
+
+ Sensibilité de la souris :
+
+
+
+ Vol automatique :
+
+
+
+ Options de la caméra :
+
+
+ Angle de vision :
+
+
+ Distance :
+
+
+
+
+
+ Affichage de l'avatar :
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_network.xml b/indra/newview/skins/default/xui/fr/panel_preferences_network.xml
index 03ff8be34..b82f29882 100644
--- a/indra/newview/skins/default/xui/fr/panel_preferences_network.xml
+++ b/indra/newview/skins/default/xui/fr/panel_preferences_network.xml
@@ -1,23 +1,23 @@
-
-
-
- Bande passante maximale :
-
-
- kbps (kilobits par seconde)
-
-
- Taille de la mémoire cache :
-
-
- Mo
-
-
-
- Emplacement du cache :
-
-
-
-
-
-
+
+
+
+ Bande passante maximale :
+
+
+ kbps (kilobits par seconde)
+
+
+ Taille de la mémoire cache :
+
+
+ Mo
+
+
+
+ Emplacement du cache :
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_popups.xml b/indra/newview/skins/default/xui/fr/panel_preferences_popups.xml
index c6354e4e7..a16895790 100644
--- a/indra/newview/skins/default/xui/fr/panel_preferences_popups.xml
+++ b/indra/newview/skins/default/xui/fr/panel_preferences_popups.xml
@@ -1,25 +1,25 @@
-
-
-
- Ne pas afficher les pop-ups :
-
-
- Ne pas afficher ces pop-ups :
-
-
-
- Afficher ces pop-ups :
-
-
-
-
- Offres de notes, textures et repères :
-
-
-
-
-
-
+
+
+
+ Ne pas afficher les pop-ups :
+
+
+ Ne pas afficher ces pop-ups :
+
+
+
+ Afficher ces pop-ups :
+
+
+
+
+ Offres de notes, textures et repères :
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_skins.xml b/indra/newview/skins/default/xui/fr/panel_preferences_skins.xml
index cc4cb0995..84463e5ac 100644
--- a/indra/newview/skins/default/xui/fr/panel_preferences_skins.xml
+++ b/indra/newview/skins/default/xui/fr/panel_preferences_skins.xml
@@ -1,14 +1,14 @@
-
-
-
- Sélectionner un thème (redémarrage requis) :
-
-
-
- Défaut
-
-
- Argent
-
-
-
+
+
+
+ Sélectionner un thème (redémarrage requis) :
+
+
+
+ Défaut
+
+
+ Argent
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_voice.xml b/indra/newview/skins/default/xui/fr/panel_preferences_voice.xml
index ff53a473c..96b76941f 100644
--- a/indra/newview/skins/default/xui/fr/panel_preferences_voice.xml
+++ b/indra/newview/skins/default/xui/fr/panel_preferences_voice.xml
@@ -1,40 +1,32 @@
-
-
-
- Le chat vocal n'est pas disponible
-
-
-
-
- Écouter depuis la position de la caméra.
-
-
- Écouter depuis la position de l'avatar.
-
-
-
- Mode Appuyer pour parler
-
-
- Ce mode vous permet de contrôler l'ouverture du micro. En mode bascule, cliquez sur la touche de contrôle ou le bouton Parler pour ouvrir et fermer le micro. Si vous n'êtes pas en mode bascule, le micro n'est ouvert que si vous cliquez et maintenez enfoncés la touche de contrôle ou le bouton Parler.
-
-
-
- Touche de contrôle :
-
-
-
-
- Animation lèvres-parole
-
-
-
- Options de confidentialité
-
-
-
-
-
- Remarque : si vous cliquez sur Paramètres du matériel, vous serez temporairement déconnecté du Chat vocal. Tous les changements que vous faites seront immédiatement appliqués.
-
-
+
+
+ Le chat vocal n'est pas disponible
+
+
+ Écouter depuis la position de la caméra.
+ Écouter depuis la position de l'avatar.
+
+ Appuyer pour parler
+
+Ce mode vous permet de contrôler l'ouverture du micro en mode bascule,
+cliquez sur la touche de contrôle ou le bouton Parler pour ouvrir et fermer le micro.
+Si vous n'êtes pas en mode bascule, le micro n'est ouvert
+que si vous cliquez et maintenez enfoncés la touche de contrôle ou le bouton Parler.
+
+
+ Touche de contrôle :
+
+
+
+ Animation lèvres-parole
+
+ Options de confidentialité
+
+
+
+ Remarque : si vous cliquez sur Paramètres du matériel,
+vous serez temporairement déconnecté du Chat vocal.
+Tous les changements que vous faites seront immédiatement appliqués.
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_web.xml b/indra/newview/skins/default/xui/fr/panel_preferences_web.xml
index afc081eab..47c401e2a 100644
--- a/indra/newview/skins/default/xui/fr/panel_preferences_web.xml
+++ b/indra/newview/skins/default/xui/fr/panel_preferences_web.xml
@@ -1,28 +1,28 @@
-
-
-
-
- Utiliser un navigateur web externe (Firefox, Safari, Internet Explorer)
-
-
- Utiliser le navigateur web intégré
-
-
-
- Cache du navigateur :
-
-
-
- Cookies :
-
-
-
- Proxy web :
-
-
-
- Adresse :
-
-
-
-
+
+
+
+
+ Utiliser un navigateur web externe (Firefox, Safari, Internet Explorer)
+
+
+ Utiliser le navigateur web intégré
+
+
+
+ Cache du navigateur :
+
+
+
+ Cookies :
+
+
+
+ Proxy web :
+
+
+
+ Adresse :
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/panel_region_covenant.xml b/indra/newview/skins/default/xui/fr/panel_region_covenant.xml
index 951096982..f2ba297fd 100644
--- a/indra/newview/skins/default/xui/fr/panel_region_covenant.xml
+++ b/indra/newview/skins/default/xui/fr/panel_region_covenant.xml
@@ -1,82 +1,82 @@
-
-
-
- Domaine :
-
-
- Nom :
-
-
- continent
-
-
- Propriétaire :
-
-
- (aucun)
-
-
- Règlement :
-
-
- Dernière modification le mercredi 31 décembre 1969 16:00:00
-
-
-
- Il n'y a aucun règlement pour ce domaine.
-
-
-
- Les changements apportés au règlement apparaîtront sur toutes
- les parcelles du domaine.
-
-
- Faire glisser une note pour changer le règlement de ce domaine.
-
-
- Région :
-
-
- Nom :
-
-
- leyla
-
-
- Type :
-
-
- Continent / Homestead
-
-
- Catégorie :
-
-
- Adult
-
-
- Revendre :
-
-
- Le terrain dans cette région ne peut être revendu.
-
-
- Sous-diviser :
-
-
- Le terrain dans cette région ne peut être fusionné/divisé.
-
-
- Le terrain acheté dans cette région peut être revendu.
-
-
- Le terrain acheté dans cette région ne peut pas être revendu.
-
-
- Le terrain acheté dans cette région peut être fusionné ou divisé.
-
-
- Le terrain acheté dans cette région ne peut pas être fusionné ou
-divisé.
-
-
+
+
+
+ Domaine :
+
+
+ Nom :
+
+
+ continent
+
+
+ Propriétaire :
+
+
+ (aucun)
+
+
+ Règlement :
+
+
+ Dernière modification le mercredi 31 décembre 1969 16:00:00
+
+
+
+ Il n'y a aucun règlement pour ce domaine.
+
+
+
+ Les changements apportés au règlement apparaîtront sur toutes
+ les parcelles du domaine.
+
+
+ Faire glisser une note pour changer le règlement de ce domaine.
+
+
+ Région :
+
+
+ Nom :
+
+
+ leyla
+
+
+ Type :
+
+
+ Continent / Homestead
+
+
+ Catégorie :
+
+
+ Adult
+
+
+ Revendre :
+
+
+ Le terrain dans cette région ne peut être revendu.
+
+
+ Sous-diviser :
+
+
+ Le terrain dans cette région ne peut être fusionné/divisé.
+
+
+ Le terrain acheté dans cette région peut être revendu.
+
+
+ Le terrain acheté dans cette région ne peut pas être revendu.
+
+
+ Le terrain acheté dans cette région peut être fusionné ou divisé.
+
+
+ Le terrain acheté dans cette région ne peut pas être fusionné ou
+divisé.
+
+
diff --git a/indra/newview/skins/default/xui/fr/panel_region_debug.xml b/indra/newview/skins/default/xui/fr/panel_region_debug.xml
index 35203ca4b..1338ab9e7 100644
--- a/indra/newview/skins/default/xui/fr/panel_region_debug.xml
+++ b/indra/newview/skins/default/xui/fr/panel_region_debug.xml
@@ -1,40 +1,40 @@
-
-
-
- Région :
-
-
- (inconnue)
-
-
-
-
-
-
-
-
-
- Renvoi de l'objet
-
-
- Résident :
-
-
- (aucun)
-
-
-
- Options :
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+ Région :
+
+
+ (inconnue)
+
+
+
+
+
+
+
+
+
+ Renvoi de l'objet
+
+
+ Résident :
+
+
+ (aucun)
+
+
+
+ Options :
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/panel_region_estate.xml b/indra/newview/skins/default/xui/fr/panel_region_estate.xml
index 475339dd9..425f27379 100644
--- a/indra/newview/skins/default/xui/fr/panel_region_estate.xml
+++ b/indra/newview/skins/default/xui/fr/panel_region_estate.xml
@@ -1,78 +1,78 @@
-
-
-
- Les changements apportés aux paramètres
-de cet onglet auront des répercussions sur
-toutes les régions du domaine.
-
-
- Domaine :
-
-
- (inconnu)
-
-
- Propriétaire :
-
-
- (inconnu)
-
-
- Limiter l'accès aux résidents qui :
-
-
-
-
-
-
- E-mail où signaler l'infraction :
-
-
- Non pris en charge
-
-
-
- Gérants du domaine :
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Refuser l'accès selon les infos de paiement :
-
-
-
-
-
-
- Résidents autorisés :
-
-
-
-
-
- Groupes autorisés :
-
-
-
-
-
- Résidents bannis :
-
-
-
-
-
-
-
+
+
+
+ Les changements apportés aux paramètres
+de cet onglet auront des répercussions sur
+toutes les régions du domaine.
+
+
+ Domaine :
+
+
+ (inconnu)
+
+
+ Propriétaire :
+
+
+ (inconnu)
+
+
+ Limiter l'accès aux résidents qui :
+
+
+
+
+
+
+ E-mail où signaler l'infraction :
+
+
+ Non pris en charge
+
+
+
+ Gérants du domaine :
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Refuser l'accès selon les infos de paiement :
+
+
+
+
+
+
+ Résidents autorisés :
+
+
+
+
+
+ Groupes autorisés :
+
+
+
+
+
+ Résidents bannis :
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/panel_region_general.xml b/indra/newview/skins/default/xui/fr/panel_region_general.xml
index e558be7c8..6a8afd24e 100644
--- a/indra/newview/skins/default/xui/fr/panel_region_general.xml
+++ b/indra/newview/skins/default/xui/fr/panel_region_general.xml
@@ -1,59 +1,59 @@
-
-
-
- Région :
-
-
- (inconnue)
-
-
- Version :
-
-
- (inconnu)
-
-
- Type :
-
-
- (inconnu)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Catégorie :
-
-
-
- Adult
-
-
- Mature
-
-
- PG
-
-
-
-
-
-
-
-
-
+
+
+
+ Région :
+
+
+ (inconnue)
+
+
+ Version :
+
+
+ (inconnu)
+
+
+ Type :
+
+
+ (inconnu)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Catégorie :
+
+
+
+ Adult
+
+
+ Mature
+
+
+ PG
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/panel_region_terrain.xml b/indra/newview/skins/default/xui/fr/panel_region_terrain.xml
index 96c1530e6..4d7652eb6 100644
--- a/indra/newview/skins/default/xui/fr/panel_region_terrain.xml
+++ b/indra/newview/skins/default/xui/fr/panel_region_terrain.xml
@@ -1,27 +1,27 @@
-
-
-
- Région :
-
-
- (inconnue)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+ Région :
+
+
+ (inconnue)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/panel_region_texture.xml b/indra/newview/skins/default/xui/fr/panel_region_texture.xml
index 2ad403fda..d31264678 100644
--- a/indra/newview/skins/default/xui/fr/panel_region_texture.xml
+++ b/indra/newview/skins/default/xui/fr/panel_region_texture.xml
@@ -1,72 +1,72 @@
-
-
-
- Région :
-
-
- (inconnue)
-
-
- Textures de base (fichiers 128x128, 24 bit .tga)
-
-
- 1 (faible)
-
-
- 2
-
-
- 3
-
-
- 4 (élevé)
-
-
- Textures du terrain (fichiers.tga 512 x 512, 24 bit requis)
-
-
- Limites d'élévation de texture
-
-
- Sud-ouest
-
-
- Nord-ouest
-
-
- Sud-est
-
-
- Nord-est
-
-
- Ces valeurs représentent les limites de mélange pour les textures ci-dessus.
-
-
- En mètres, la valeur Bas correspond à la hauteur maximum de la texture n°1
-
-
- et la valeur Haut correspond à la hauteur minimum de la texture n°4.
-
-
- Nord-est
-
-
-
-
-
-
-
-
-
-
- Ces valeurs représentent les limites de mélange pour les textures ci-dessus.
-
-
- En mètres, la valeur BASSE correspond à la hauteur MAXIMUM de la Texture #1,
-
-
- et la valeur HAUTE correspond à la hauteur MINIMUM de la Texture #4.
-
-
-
+
+
+
+ Région :
+
+
+ (inconnue)
+
+
+ Textures de base (fichiers 128x128, 24 bit .tga)
+
+
+ 1 (faible)
+
+
+ 2
+
+
+ 3
+
+
+ 4 (élevé)
+
+
+ Textures du terrain (fichiers.tga 512 x 512, 24 bit requis)
+
+
+ Limites d'élévation de texture
+
+
+ Sud-ouest
+
+
+ Nord-ouest
+
+
+ Sud-est
+
+
+ Nord-est
+
+
+ Ces valeurs représentent les limites de mélange pour les textures ci-dessus.
+
+
+ En mètres, la valeur Bas correspond à la hauteur maximum de la texture n°1
+
+
+ et la valeur Haut correspond à la hauteur minimum de la texture n°4.
+
+
+ Nord-est
+
+
+
+
+
+
+
+
+
+
+ Ces valeurs représentent les limites de mélange pour les textures ci-dessus.
+
+
+ En mètres, la valeur BASSE correspond à la hauteur MAXIMUM de la Texture #1,
+
+
+ et la valeur HAUTE correspond à la hauteur MINIMUM de la Texture #4.
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/panel_scrolling_param.xml b/indra/newview/skins/default/xui/fr/panel_scrolling_param.xml
index 722295f6c..a6ec93bef 100644
--- a/indra/newview/skins/default/xui/fr/panel_scrolling_param.xml
+++ b/indra/newview/skins/default/xui/fr/panel_scrolling_param.xml
@@ -1,12 +1,12 @@
-
-
-
- Chargement...
-
-
- Chargement...
-
-
-
-
-
+
+
+
+ Chargement...
+
+
+ Chargement...
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/panel_speaker_controls.xml b/indra/newview/skins/default/xui/fr/panel_speaker_controls.xml
index c23e95dc5..125fb1eda 100644
--- a/indra/newview/skins/default/xui/fr/panel_speaker_controls.xml
+++ b/indra/newview/skins/default/xui/fr/panel_speaker_controls.xml
@@ -1,41 +1,41 @@
-
-
-
- (Modérateur)
-
-
-
-
-
- Voix activées par défaut
-
-
- Voix désactivées par défaut
-
-
-
-
-
-
-
-
-
- Rumplstiltskin Califragilistic
-
-
-
-
-
-
-
- Commandes de modération :
-
-
- Autoriser les chats vocaux
-
-
- Autoriser les chats écrits
-
-
-
-
+
+
+
+ (Modérateur)
+
+
+
+
+
+ Voix activées par défaut
+
+
+ Voix désactivées par défaut
+
+
+
+
+
+
+
+
+
+ Rumplstiltskin Califragilistic
+
+
+
+
+
+
+
+ Commandes de modération :
+
+
+ Autoriser les chats vocaux
+
+
+ Autoriser les chats écrits
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/panel_status_bar.xml b/indra/newview/skins/default/xui/fr/panel_status_bar.xml
index 3ddfe31ca..2e4c694ef 100644
--- a/indra/newview/skins/default/xui/fr/panel_status_bar.xml
+++ b/indra/newview/skins/default/xui/fr/panel_status_bar.xml
@@ -1,41 +1,41 @@
-
-
-
- Saisissez le nom de la parcelle ici
-
-
- Chargement...
-
-
-
- midi
-
-
- Sunday:Monday:Tuesday:Wednesday:Thursday:Friday:Saturday
-
-
- January:February:March:April:May:June:July:August:September:October:November:December
-
-
-
-
- 100 %
-
-
-
-
-
-
-
-
-
-
-
-
-
- Perte de paquets
-
-
- Bande passante
-
-
+
+
+
+ Saisissez le nom de la parcelle ici
+
+
+ Chargement...
+
+
+
+ midi
+
+
+ Sunday:Monday:Tuesday:Wednesday:Thursday:Friday:Saturday
+
+
+ January:February:March:April:May:June:July:August:September:October:November:December
+
+
+
+
+ 100 %
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Perte de paquets
+
+
+ Bande passante
+
+
diff --git a/indra/newview/skins/default/xui/fr/panel_toolbar.xml b/indra/newview/skins/default/xui/fr/panel_toolbar.xml
index 99aaa6569..80adabf48 100644
--- a/indra/newview/skins/default/xui/fr/panel_toolbar.xml
+++ b/indra/newview/skins/default/xui/fr/panel_toolbar.xml
@@ -1,17 +1,17 @@
-
-
-
- Rétablir les fenêtres
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+ Rétablir les fenêtres
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/panel_top_pick.xml b/indra/newview/skins/default/xui/fr/panel_top_pick.xml
index 9dcf3b8c9..4dfefb44b 100644
--- a/indra/newview/skins/default/xui/fr/panel_top_pick.xml
+++ b/indra/newview/skins/default/xui/fr/panel_top_pick.xml
@@ -1,10 +1,10 @@
-
-
-
-
-
-
- Trier :
-
-
-
+
+
+
+
+
+
+ Trier :
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/panel_voice_controls.xml b/indra/newview/skins/default/xui/fr/panel_voice_controls.xml
index c940e3a1a..628d64330 100644
--- a/indra/newview/skins/default/xui/fr/panel_voice_controls.xml
+++ b/indra/newview/skins/default/xui/fr/panel_voice_controls.xml
@@ -1,10 +1,10 @@
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/panel_voice_enable.xml b/indra/newview/skins/default/xui/fr/panel_voice_enable.xml
index f585388c0..97c477074 100644
--- a/indra/newview/skins/default/xui/fr/panel_voice_enable.xml
+++ b/indra/newview/skins/default/xui/fr/panel_voice_enable.xml
@@ -1,23 +1,23 @@
-
-
-
- Bienvenue dans le chat vocal de Second Life ! Le chat vocal vous permet de communiquer avec les autres résidents. Cet assistant vous aidera à le paramétrer correctement. Le chat vocal requiert l'utilisation de haut-parleurs audio. Pour parler, il vous faudra aussi un micro ou un casque stéréo avec un micro.
-
-
- Le chat vocal est activé par défaut. Souhaitez-vous continuer à l'utiliser ?
-
-
-
- Oui, continuer à utiliser le chat vocal.
-
-
- Non, désactiver le chat vocal.
-
-
-
- Vous pouvez activer le chat vocal à tout moment à partir de l'onglet Chat Vocal, sous Préférences.
-
-
- Pour configurer vos préférences de chat, cliquez sur le bouton Suivant. Pour continuer sur Second Life, cliquez sur Finir.
-
-
+
+
+
+ Bienvenue dans le chat vocal de Second Life ! Le chat vocal vous permet de communiquer avec les autres résidents. Cet assistant vous aidera à le paramétrer correctement. Le chat vocal requiert l'utilisation de haut-parleurs audio. Pour parler, il vous faudra aussi un micro ou un casque stéréo avec un micro.
+
+
+ Le chat vocal est activé par défaut. Souhaitez-vous continuer à l'utiliser ?
+
+
+
+ Oui, continuer à utiliser le chat vocal.
+
+
+ Non, désactiver le chat vocal.
+
+
+
+ Vous pouvez activer le chat vocal à tout moment à partir de l'onglet Chat Vocal, sous Préférences.
+
+
+ Pour configurer vos préférences de chat, cliquez sur le bouton Suivant. Pour continuer sur Second Life, cliquez sur Finir.
+
+
diff --git a/indra/newview/skins/default/xui/fr/panel_voice_options.xml b/indra/newview/skins/default/xui/fr/panel_voice_options.xml
index 9d6798756..be3331e2a 100644
--- a/indra/newview/skins/default/xui/fr/panel_voice_options.xml
+++ b/indra/newview/skins/default/xui/fr/panel_voice_options.xml
@@ -1,21 +1,21 @@
-
-
-
- Pour configurer votre chat vocal, utilisez les options ci-dessous.
-
-
-
- Écouter depuis la position de la caméra.
-
-
- Écouter depuis la position de l'avatar.
-
-
-
-
-
- Touche de contrôle de la fonction Appuyer pour parler :
-
-
-
-
+
+
+
+ Pour configurer votre chat vocal, utilisez les options ci-dessous.
+
+
+
+ Écouter depuis la position de la caméra.
+
+
+ Écouter depuis la position de l'avatar.
+
+
+
+
+
+ Touche de contrôle de la fonction Appuyer pour parler :
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/panel_voice_remote.xml b/indra/newview/skins/default/xui/fr/panel_voice_remote.xml
index 96e3032d5..3c9776c5a 100644
--- a/indra/newview/skins/default/xui/fr/panel_voice_remote.xml
+++ b/indra/newview/skins/default/xui/fr/panel_voice_remote.xml
@@ -1,5 +1,5 @@
-
-
-
-
-
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/panel_voice_remote_expanded.xml b/indra/newview/skins/default/xui/fr/panel_voice_remote_expanded.xml
index c466bca72..83efac4db 100644
--- a/indra/newview/skins/default/xui/fr/panel_voice_remote_expanded.xml
+++ b/indra/newview/skins/default/xui/fr/panel_voice_remote_expanded.xml
@@ -1,5 +1,5 @@
-
-
-
-
-
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/role_actions.xml b/indra/newview/skins/default/xui/fr/role_actions.xml
index 441b9b567..a2df59677 100644
--- a/indra/newview/skins/default/xui/fr/role_actions.xml
+++ b/indra/newview/skins/default/xui/fr/role_actions.xml
@@ -1,201 +1,201 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/strings.xml b/indra/newview/skins/default/xui/fr/strings.xml
index b051c2eb7..d8e3397b9 100644
--- a/indra/newview/skins/default/xui/fr/strings.xml
+++ b/indra/newview/skins/default/xui/fr/strings.xml
@@ -4,53 +4,9 @@
For example, the strings used in avatar chat bubbles, and strings
that are returned from one component and may appear in many places-->
- L$
- Linden Lab
-
- Second Life
-
-
- Singularity Viewer
-
-
- SINGULARITY VIEWER
-
-
- Grille de Second Life
-
-
- Portail Assistance Second Life
-
-
- Détection du matériel...
-
-
- Chargement de [APP_NAME]...
-
-
- Vidage du cache...
-
-
- Initialisation du cache des textures...
-
-
- Initialisation VFS...
-
-
- Échec d'initialisation des graphiques. Veuillez mettre votre pilote graphique à jour.
-
-
- Restauration...
-
-
- Changement de la résolution...
-
La connexion à [APP_NAME] apparaît peut-être comme étant gelée. Veuillez patienter.
-
- Connexion...
-
Authentification en cours
@@ -90,12 +46,6 @@
Initialisation de Quicktime réussie.
-
- Capacités de la région demandées...
-
-
- Capacités de la région demandées... Tentative n° [NUMBER].
-
Liaison avec la région en cours de création...
@@ -103,32 +53,11 @@
Connexion avec la région en cours, avec un peu de chance ...
- Habits en cours de téléchargement, esperons le ...
-
-
- Échec de la connexion.
-
-
- Quitter
+ Habits en cours de téléchargement, espérons le, vais je encore être tout(e) nu(e) ?
Il y a peut-être des problèmes techniques dans cette region. Veuillez vérifier votre connexion Internet.
-
- Enregistrement des paramètres...
-
-
- Déconnexion...
-
-
- Arrêt en cours...
-
-
- Vous avez été déconnecté de la région où vous étiez.
-
-
- Vous avez été transféré vers une région non valide.
-
Personne
@@ -154,7 +83,7 @@
Toucher
- [CURRENCY]
+ L$
Laisser tomber l'inventaire
@@ -172,7 +101,7 @@
Copie autorisée
- À vendre : [AMOUNT] [CURRENCY]
+ À vendre : [AMOUNT] L$
À vendre : [MESSAGE]
@@ -558,156 +487,4 @@
Choisir le répertoire
-
- Présent
-
-
- Absent
-
-
- Pas occupé
-
-
- Occupé
-
-
- Pierre
-
-
- Métal
-
-
- Verre
-
-
- Bois
-
-
- Chair
-
-
- Plastique
-
-
- Caoutchouc
-
-
- Léger
-
-
- Appuyez sur ESC pour quitter la vue subjective
-
-
-
- Ctrl-
-
-
- Cmd-
-
-
- Opt-
-
-
- Maj-
-
-
- Ctrl-
-
-
- Alt-
-
-
- Maj-
-
-
- Une erreur est survenue lors de la lecture de la ligne de commande.
-Merci de consulter : http://wiki.secondlife.com/wiki/Client_parameters
-Erreur :
-
-
- [APP_NAME] - Utilisation de la ligne de commande :
-
-
- [APP_NAME] ne peut accéder à un fichier requis.
-
-Cela vient du fait que quelqu'un a ouvert plusieurs copies ou que votre système pense qu'un fichier est ouvert.
-Si ce message persiste, veuillez redémarrer votre ordinateur.
-Si le problème persiste, vous devrez peut-être complètement désinstaller puis réinstaller [APP_NAME].
-
-
- Erreur fatale
-
-
- [APP_NAME] nécessite un microprocesseur AltiVec (version G4 ou antérieure).
-
-
- [APP_NAME] est déjà en cours d'exécution.
-Vérifiez si une version minimisée du programme apparaît dans votre barre de tâches.
-Si ce message persiste, redémarrez votre ordinateur.
-
-
- [APP_NAME] semble avoir crashé lors de l'utilisation précédente.
-Voulez-vous envoyer un rapport de crash ?
-
-
- Notification
-
-
- [APP_NAME] ne peut détecter DirectX 9.0b ou une version supérieure.
-[APP_NAME] utilise DirectX pour détecter les matériels et/ou les pilotes qui ne sont pas à jour et peuvent causer des problèmes de stabilité, de performance ou des plantages. Bien que vous puissiez utiliser [APP_NAME] sans DirectX, nous vous recommandons de l'utiliser avec DirectX 9.0b.
-
-Voulez-vous continuer ?
-
-
- Avertissement
-
-
- RegisterClass a échoué
-
-
- Erreur
-
-
- Impossible d'ouvrir le mode plein écran à [WIDTH] x [HEIGHT].
-Utilisation du mode fenêtré.
-
-
- Erreur de fermeture lors de la destruction de la fenêtre (DestroyWindow() a échoué)
-
-
- Erreur de fermeture
-
-
- Impossible de créer le contexte GL
-
-
- Impossible de trouver le format pixel approprié
-
-
- Impossible de trouver la description du format pixel
-
-
- [APP_NAME] nécessite True Color (32 bits) pour s'exécuter.
-Accédez aux paramètres d'affichage de votre ordinateur et réglez le mode couleur sur 32 bits.
-
-
- [APP_NAME] ne peut pas s'exécuter, car il n'y pas de canal alpha 8 bits accessible. En général, ceci vient de problèmes avec le pilote de la carte vidéo.
-Assurez-vous d'avoir installé le pilote de carte vidéo le plus récent possible.
-Assurez-vous aussi que votre écran est réglé sur True Color (32 bits) sous Panneau de configuration > Affichage > Paramètres.
-Si ce message persiste, veuillez aller sur la page [SUPPORT_SITE].
-
-
- Impossible de trouver le format pixel approprié
-
-
- Impossible de créer le contexte de rendu GL
-
-
- Impossible d'activer le contexte de rendu GL
-
-
- [APP_NAME] ne peut pas s'exécuter car les pilotes de votre carte vidéo n'ont pas été installés correctement, ne sont pas à jour, ou sont pour du matériel non pris en charge. Assurez-vous d'avoir des pilotes de cartes vidéos récents, et même si vous avez les plus récents, réinstallez-les.
-
-Si ce message persiste, veuillez aller sur la page [SUPPORT_SITE].
-
diff --git a/indra/newview/skins/default/xui/fr/teleport_strings.xml b/indra/newview/skins/default/xui/fr/teleport_strings.xml
index 16abe6370..e42283f12 100644
--- a/indra/newview/skins/default/xui/fr/teleport_strings.xml
+++ b/indra/newview/skins/default/xui/fr/teleport_strings.xml
@@ -1,77 +1,28 @@
-
-
-
-
- Nous avons rencontré des problèmes en essayant de vous téléporter. Vous devrez peut-être vous reconnecter avant de pouvoir être téléporté. Si vous continuez à recevoir ce message, veuillez consulter le Support à  la page suivante :
-www.secondlife.com/support
-
-
- Nous avons rencontré des problèmes en essayant de vous téléporter. Vous devrez peut-être vous reconnecter avant de pouvoir être téléporté. Si vous continuez à recevoir ce message, veuillez consulter le Support à  la page suivante :
-www.secondlife.com/support
-
-
- Désolé, la téléportation est bloquée actuellement. Veuillez réessayer dans un moment.
-Si vous ne parvenez toujours pas à être téléporté, déconnectez-vous puis reconnectez-vous pour résoudre le problème.
-
-
- Désolé, le système n'a pas réussi à localiser la destination de votre repère.
-
-
- Désolé, la connexion vers votre lieu de téléportation n'a pas abouti.
-Veuillez réessayer dans un moment.
-
-
- Désolé, vous n'avez pas accès à cette destination.
-
-
- Vos pieces-jointes ne sont pas encore arrivées. Attendez quelques secondes de plus ou déconnectez-vous puis reconnectez-vous avant d'essayer de vous téléporter.
-
-
- Le trafic vers cette région est bouché en ce moment. Votre téléportation ne pourra pas avoir lieu immédiatement. Veuillez réessayer dans quelques minutes ou bien aller dans une zone moins fréquentée.
-
-
- Désolé, votre demande de téléportation n'a pas abouti assez rapidement. Veuillez réessayer dans quelques minutes.
-
-
- Désolé, votre demande pour passer dans une autre région n'a pas abouti assez rapidement. Veuillez réessayer dans quelques minutes.
-
-
- Impossible de trouver la destination de la téléportation. Il est possible que cette destination soit temporairement indisponible ou qu'elle n'existe plus. Veuillez réessayer dans quelques minutes.
-
-
- L'inventaire est temporairement indisponible.
-
-
-
-
- Envoi vers la destination en cours.
-
-
- Redirection vers un emplacement différent en cours.
-
-
- Relai vers la destination en cours.
-
-
- Requête de la demande d'envoi vers votre domicile en cours.
-
-
- Requête de la demande d'envoi vers le repère en cours.
-
-
- Téléportation sur le point d'aboutir.
-
-
- Destination en cours de résolution.
-
-
- Contact avec la nouvelle région en cours.
-
-
- Vous arrivez...
-
-
- Demande de téléportation en cours...
-
-
-
+
+
+
+
+ Ctrl-
+
+
+ Cmd-
+
+
+ Opt-
+
+
+ Maj-
+
+
+ Ctrl-
+
+
+ Alt-
+
+
+ Maj-
+
+
diff --git a/indra/newview/skins/default/xui/fr/ui_strings.xml b/indra/newview/skins/default/xui/fr/ui_strings.xml
index 6687d1481..0e777751d 100644
--- a/indra/newview/skins/default/xui/fr/ui_strings.xml
+++ b/indra/newview/skins/default/xui/fr/ui_strings.xml
@@ -1,28 +1,4 @@
-
-
-
-
- Ctrl-
-
-
- Cmd-
-
-
- Opt-
-
-
- Maj-
-
-
- Ctrl-
-
-
- Alt-
-
-
- Maj-
-
-
+
+
+ 1.0
+
diff --git a/indra/newview/skins/default/xui/fr/xui_version.xml b/indra/newview/skins/default/xui/fr/xui_version.xml
index ee2a0be74..0e777751d 100644
--- a/indra/newview/skins/default/xui/fr/xui_version.xml
+++ b/indra/newview/skins/default/xui/fr/xui_version.xml
@@ -1,4 +1,4 @@
-
-
- 1.0
-
+
+
+ 1.0
+
diff --git a/scripts/clean_translation.sh b/scripts/clean_translation.sh
new file mode 100755
index 000000000..82ec62760
--- /dev/null
+++ b/scripts/clean_translation.sh
@@ -0,0 +1,12 @@
+#!/bin/bash
+
+SCRDIRECTORY="${0%%/*}"
+SAVEDIR=`pwd`
+
+cd $SCRDIRECTORY/../indra/newview/skins/default/xui/fr
+dos2unix *
+sed -i '1 s/^\xef\xbb\xbf//' *
+chmod 644 *
+
+cd $SAVEDIR
+
From 8b6f462d137694991e1198abfa7a3fce95556b0c Mon Sep 17 00:00:00 2001
From: Siana Gearz
Date: Tue, 6 Mar 2012 03:48:37 +0100
Subject: [PATCH 33/35] Wholesale update of llmessage to V3.2
Note that this removes message logger for now.
---
indra/llcommon/llqueuedthread.cpp | 4 +-
indra/llcommon/llqueuedthread.h | 4 +-
indra/llcommon/llthread.cpp | 9 +
indra/llcommon/llthread.h | 5 +-
indra/llcommon/llworkerthread.cpp | 2 +-
indra/llcommon/llworkerthread.h | 2 +-
indra/llimage/llimageworker.cpp | 2 +-
indra/llimage/llimageworker.h | 2 +-
indra/llmessage/CMakeLists.txt | 71 +-
indra/llmessage/llares.cpp | 47 +-
indra/llmessage/llares.h | 42 +-
indra/llmessage/llassetstorage.cpp | 71 +-
indra/llmessage/llassetstorage.h | 38 +-
indra/llmessage/llblowfishcipher.cpp | 36 +-
indra/llmessage/llblowfishcipher.h | 36 +-
indra/llmessage/llbuffer.cpp | 127 ++-
indra/llmessage/llbuffer.h | 61 +-
indra/llmessage/llbufferstream.cpp | 44 +-
indra/llmessage/llbufferstream.h | 36 +-
indra/llmessage/llcachename.cpp | 123 +--
indra/llmessage/llcachename.h | 47 +-
indra/llmessage/llchainio.cpp | 36 +-
indra/llmessage/llchainio.h | 36 +-
indra/llmessage/llcipher.h | 36 +-
indra/llmessage/llcircuit.cpp | 47 +-
indra/llmessage/llcircuit.h | 42 +-
indra/llmessage/llclassifiedflags.cpp | 40 +-
indra/llmessage/llclassifiedflags.h | 36 +-
indra/llmessage/llcurl.cpp | 819 ++++++++++-----
indra/llmessage/llcurl.h | 194 ++--
indra/llmessage/lldatapacker.cpp | 36 +-
indra/llmessage/lldatapacker.h | 42 +-
indra/llmessage/lldbstrings.h | 36 +-
indra/llmessage/lldispatcher.cpp | 37 +-
indra/llmessage/lldispatcher.h | 36 +-
indra/llmessage/lleventflags.h | 36 +-
indra/llmessage/llfiltersd2xmlrpc.cpp | 39 +-
indra/llmessage/llfiltersd2xmlrpc.h | 36 +-
indra/llmessage/llfollowcamparams.h | 36 +-
indra/llmessage/llhost.cpp | 36 +-
indra/llmessage/llhost.h | 36 +-
indra/llmessage/llhttpassetstorage.cpp | 53 +-
indra/llmessage/llhttpassetstorage.h | 36 +-
indra/llmessage/llhttpclient.cpp | 96 +-
indra/llmessage/llhttpclient.h | 46 +-
indra/llmessage/llhttpclientadapter.cpp | 38 +-
indra/llmessage/llhttpclientadapter.h | 38 +-
indra/llmessage/llhttpclientinterface.h | 38 +-
indra/llmessage/llhttpnode.cpp | 36 +-
indra/llmessage/llhttpnode.h | 39 +-
indra/llmessage/llhttpnodeadapter.h | 36 +-
indra/llmessage/llhttpsender.cpp | 36 +-
indra/llmessage/llhttpsender.h | 36 +-
indra/llmessage/llinstantmessage.cpp | 36 +-
indra/llmessage/llinstantmessage.h | 37 +-
indra/llmessage/llinvite.h | 36 +-
indra/llmessage/lliobuffer.cpp | 36 +-
indra/llmessage/lliobuffer.h | 36 +-
indra/llmessage/lliohttpserver.cpp | 10 +-
indra/llmessage/lliohttpserver.h | 36 +-
indra/llmessage/lliopipe.cpp | 42 +-
indra/llmessage/lliopipe.h | 38 +-
indra/llmessage/lliosocket.cpp | 57 +-
indra/llmessage/lliosocket.h | 50 +-
indra/llmessage/llioutil.cpp | 38 +-
indra/llmessage/llioutil.h | 36 +-
indra/llmessage/llloginflags.h | 36 +-
indra/llmessage/llmail.cpp | 36 +-
indra/llmessage/llmail.h | 36 +-
indra/llmessage/llmessagebuilder.cpp | 36 +-
indra/llmessage/llmessagebuilder.h | 36 +-
indra/llmessage/llmessageconfig.cpp | 36 +-
indra/llmessage/llmessageconfig.h | 36 +-
indra/llmessage/llmessagelog.cpp | 54 -
indra/llmessage/llmessagelog.h | 41 -
indra/llmessage/llmessagereader.cpp | 36 +-
indra/llmessage/llmessagereader.h | 36 +-
indra/llmessage/llmessagesenderinterface.h | 38 +-
indra/llmessage/llmessagetemplate.cpp | 36 +-
indra/llmessage/llmessagetemplate.h | 36 +-
indra/llmessage/llmessagetemplateparser.cpp | 36 +-
indra/llmessage/llmessagetemplateparser.h | 36 +-
indra/llmessage/llmessagethrottle.cpp | 36 +-
indra/llmessage/llmessagethrottle.h | 36 +-
indra/llmessage/llmime.cpp | 36 +-
indra/llmessage/llmime.h | 36 +-
indra/llmessage/llmsgvariabletype.h | 36 +-
indra/llmessage/llnamevalue.cpp | 36 +-
indra/llmessage/llnamevalue.h | 36 +-
indra/llmessage/llnullcipher.cpp | 36 +-
indra/llmessage/llnullcipher.h | 36 +-
indra/llmessage/llpacketack.cpp | 36 +-
indra/llmessage/llpacketack.h | 36 +-
indra/llmessage/llpacketbuffer.cpp | 38 +-
indra/llmessage/llpacketbuffer.h | 36 +-
indra/llmessage/llpacketring.cpp | 60 +-
indra/llmessage/llpacketring.h | 37 +-
indra/llmessage/llpartdata.cpp | 36 +-
indra/llmessage/llpartdata.h | 36 +-
indra/llmessage/llpumpio.cpp | 121 ++-
indra/llmessage/llpumpio.h | 49 +-
indra/llmessage/llqueryflags.h | 36 +-
indra/llmessage/llregionhandle.h | 36 +-
indra/llmessage/llregionpresenceverifier.cpp | 144 ++-
indra/llmessage/llregionpresenceverifier.h | 78 +-
indra/llmessage/llsdappservices.cpp | 36 +-
indra/llmessage/llsdappservices.h | 36 +-
indra/llmessage/llsdhttpserver.cpp | 38 +-
indra/llmessage/llsdhttpserver.h | 36 +-
indra/llmessage/llsdmessagebuilder.cpp | 36 +-
indra/llmessage/llsdmessagebuilder.h | 36 +-
indra/llmessage/llsdmessagereader.cpp | 36 +-
indra/llmessage/llsdmessagereader.h | 36 +-
indra/llmessage/llsdrpcclient.cpp | 38 +-
indra/llmessage/llsdrpcclient.h | 58 +-
indra/llmessage/llsdrpcserver.cpp | 38 +-
indra/llmessage/llsdrpcserver.h | 36 +-
indra/llmessage/llservice.cpp | 36 +-
indra/llmessage/llservice.h | 36 +-
indra/llmessage/llservicebuilder.cpp | 36 +-
indra/llmessage/llservicebuilder.h | 37 +-
indra/llmessage/llsocks5.cpp | 209 ----
indra/llmessage/llsocks5.h | 248 -----
indra/llmessage/llstoredmessage.cpp | 38 +-
indra/llmessage/llstoredmessage.h | 38 +-
indra/llmessage/lltaskname.h | 36 +-
indra/llmessage/llteleportflags.h | 36 +-
indra/llmessage/lltemplatemessagebuilder.cpp | 36 +-
indra/llmessage/lltemplatemessagebuilder.h | 36 +-
.../llmessage/lltemplatemessagedispatcher.cpp | 36 +-
indra/llmessage/lltemplatemessagedispatcher.h | 36 +-
indra/llmessage/lltemplatemessagereader.cpp | 94 +-
indra/llmessage/lltemplatemessagereader.h | 59 +-
indra/llmessage/llthrottle.cpp | 36 +-
indra/llmessage/llthrottle.h | 36 +-
indra/llmessage/lltransfermanager.cpp | 39 +-
indra/llmessage/lltransfermanager.h | 36 +-
indra/llmessage/lltransfersourceasset.cpp | 39 +-
indra/llmessage/lltransfersourceasset.h | 36 +-
indra/llmessage/lltransfersourcefile.cpp | 36 +-
indra/llmessage/lltransfersourcefile.h | 36 +-
indra/llmessage/lltransfertargetfile.cpp | 36 +-
indra/llmessage/lltransfertargetfile.h | 36 +-
indra/llmessage/lltransfertargetvfile.cpp | 36 +-
indra/llmessage/lltransfertargetvfile.h | 36 +-
indra/llmessage/lltrustedmessageservice.cpp | 36 +-
indra/llmessage/lltrustedmessageservice.h | 36 +-
indra/llmessage/llurlrequest.cpp | 125 ++-
indra/llmessage/llurlrequest.h | 49 +-
indra/llmessage/lluseroperation.cpp | 36 +-
indra/llmessage/lluseroperation.h | 36 +-
indra/llmessage/llvehicleparams.h | 36 +-
indra/llmessage/llxfer.cpp | 36 +-
indra/llmessage/llxfer.h | 36 +-
indra/llmessage/llxfer_file.cpp | 36 +-
indra/llmessage/llxfer_file.h | 36 +-
indra/llmessage/llxfer_mem.cpp | 36 +-
indra/llmessage/llxfer_mem.h | 36 +-
indra/llmessage/llxfer_vfile.cpp | 36 +-
indra/llmessage/llxfer_vfile.h | 36 +-
indra/llmessage/llxfermanager.cpp | 36 +-
indra/llmessage/llxfermanager.h | 36 +-
indra/llmessage/llxorcipher.cpp | 36 +-
indra/llmessage/llxorcipher.h | 36 +-
indra/llmessage/machine.cpp | 37 +-
indra/llmessage/machine.h | 36 +-
indra/llmessage/mean_collision_data.h | 36 +-
indra/llmessage/message.cpp | 94 +-
indra/llmessage/message.h | 78 +-
indra/llmessage/message_prehash.cpp | 59 +-
indra/llmessage/message_prehash.h | 36 +-
indra/llmessage/message_string_table.cpp | 36 +-
indra/llmessage/net.cpp | 234 +----
indra/llmessage/net.h | 43 +-
indra/llmessage/partsyspacket.cpp | 36 +-
indra/llmessage/partsyspacket.h | 36 +-
indra/llmessage/patch_code.cpp | 36 +-
indra/llmessage/patch_code.h | 36 +-
indra/llmessage/patch_dct.cpp | 36 +-
indra/llmessage/patch_dct.h | 36 +-
indra/llmessage/patch_idct.cpp | 36 +-
indra/llmessage/sound_ids.cpp | 47 +-
indra/llmessage/sound_ids.h | 36 +-
indra/llmessage/tests/commtest.h | 106 +-
indra/llmessage/tests/llcurl_stub.cpp | 39 +-
.../tests/llhttpclientadapter_test.cpp | 36 +-
.../lltemplatemessagedispatcher_test.cpp | 40 +-
.../tests/lltesthttpclientadapter.cpp | 36 +-
.../llmessage/tests/lltesthttpclientadapter.h | 36 +-
indra/llmessage/tests/lltestmessagesender.cpp | 36 +-
indra/llmessage/tests/lltestmessagesender.h | 36 +-
.../tests/lltrustedmessageservice_test.cpp | 38 +-
indra/llmessage/tests/networkio.h | 45 +-
.../llmessage/tests/test_llsdmessage_peer.py | 121 ++-
indra/newview/CMakeLists.txt | 2 -
indra/newview/hipporestrequest.cpp | 2 +-
indra/newview/llfloatermessagelog.cpp | 957 ------------------
indra/newview/llfloatermessagelog.h | 96 --
indra/newview/llpanelgeneral.h | 2 +-
indra/newview/llpanelnetwork.cpp | 4 +-
indra/newview/llstartup.cpp | 207 +++-
indra/newview/llstartup.h | 2 +-
indra/newview/lltexturecache.cpp | 2 +-
indra/newview/lltexturecache.h | 2 +-
indra/newview/lltexturefetch.cpp | 2 +-
indra/newview/lltexturefetch.h | 2 +-
indra/newview/llviewermenu.cpp | 9 +-
indra/newview/llxmlrpctransaction.cpp | 22 +-
208 files changed, 4383 insertions(+), 6473 deletions(-)
delete mode 100644 indra/llmessage/llmessagelog.cpp
delete mode 100644 indra/llmessage/llmessagelog.h
delete mode 100644 indra/llmessage/llsocks5.cpp
delete mode 100644 indra/llmessage/llsocks5.h
delete mode 100644 indra/newview/llfloatermessagelog.cpp
delete mode 100644 indra/newview/llfloatermessagelog.h
diff --git a/indra/llcommon/llqueuedthread.cpp b/indra/llcommon/llqueuedthread.cpp
index fb598bbb0..af73f6236 100644
--- a/indra/llcommon/llqueuedthread.cpp
+++ b/indra/llcommon/llqueuedthread.cpp
@@ -115,7 +115,7 @@ void LLQueuedThread::shutdown()
// MAIN THREAD
// virtual
-S32 LLQueuedThread::update(U32 max_time_ms)
+S32 LLQueuedThread::update(F32 max_time_ms)
{
if (!mStarted)
{
@@ -128,7 +128,7 @@ S32 LLQueuedThread::update(U32 max_time_ms)
return updateQueue(max_time_ms);
}
-S32 LLQueuedThread::updateQueue(U32 max_time_ms)
+S32 LLQueuedThread::updateQueue(F32 max_time_ms)
{
F64 max_time = (F64)max_time_ms * .001;
LLTimer timer;
diff --git a/indra/llcommon/llqueuedthread.h b/indra/llcommon/llqueuedthread.h
index 8da383dff..ab73670ae 100644
--- a/indra/llcommon/llqueuedthread.h
+++ b/indra/llcommon/llqueuedthread.h
@@ -178,8 +178,8 @@ protected:
public:
bool waitForResult(handle_t handle, bool auto_complete = true);
- virtual S32 update(U32 max_time_ms);
- S32 updateQueue(U32 max_time_ms);
+ virtual S32 update(F32 max_time_ms);
+ S32 updateQueue(F32 max_time_ms);
void waitOnPending();
void printQueueStats();
diff --git a/indra/llcommon/llthread.cpp b/indra/llcommon/llthread.cpp
index 85d88f01d..803db8c3d 100644
--- a/indra/llcommon/llthread.cpp
+++ b/indra/llcommon/llthread.cpp
@@ -434,6 +434,15 @@ void LLMutexBase::unlock()
apr_thread_mutex_unlock(mAPRMutexp);
}
+
+bool LLMutexBase::isSelfLocked()
+{
+#if LL_DARWIN
+ return mLockingThread == LLThread::currentID();
+#else
+ return mLockingThread == local_thread_ID;
+#endif
+}
//----------------------------------------------------------------------------
diff --git a/indra/llcommon/llthread.h b/indra/llcommon/llthread.h
index 9ab7829c6..2509ecf84 100644
--- a/indra/llcommon/llthread.h
+++ b/indra/llcommon/llthread.h
@@ -189,6 +189,7 @@ public:
// non-blocking, but does do a lock/unlock so not free
bool isLocked() { bool is_not_locked = tryLock(); if (is_not_locked) unlock(); return !is_not_locked; }
// get ID of locking thread
+ bool isSelfLocked(); //return true if locked in a same thread
U32 lockingThread() const { return mLockingThread; }
protected:
@@ -269,11 +270,11 @@ public:
LLMutexLock(LLMutexBase* mutex)
{
mMutex = mutex;
- mMutex->lock();
+ if(mMutex) mMutex->lock();
}
~LLMutexLock()
{
- mMutex->unlock();
+ if(mMutex) mMutex->unlock();
}
private:
LLMutexBase* mMutex;
diff --git a/indra/llcommon/llworkerthread.cpp b/indra/llcommon/llworkerthread.cpp
index 7581a012e..96198b6e3 100644
--- a/indra/llcommon/llworkerthread.cpp
+++ b/indra/llcommon/llworkerthread.cpp
@@ -82,7 +82,7 @@ void LLWorkerThread::clearDeleteList()
}
// virtual
-S32 LLWorkerThread::update(U32 max_time_ms)
+S32 LLWorkerThread::update(F32 max_time_ms)
{
S32 res = LLQueuedThread::update(max_time_ms);
// Delete scheduled workers
diff --git a/indra/llcommon/llworkerthread.h b/indra/llcommon/llworkerthread.h
index 76c715076..543fa1e56 100644
--- a/indra/llcommon/llworkerthread.h
+++ b/indra/llcommon/llworkerthread.h
@@ -92,7 +92,7 @@ public:
LLWorkerThread(const std::string& name, bool threaded = true, bool should_pause = false);
~LLWorkerThread();
- /*virtual*/ S32 update(U32 max_time_ms);
+ /*virtual*/ S32 update(F32 max_time_ms);
handle_t addWorkRequest(LLWorkerClass* workerclass, S32 param, U32 priority = PRIORITY_NORMAL);
diff --git a/indra/llimage/llimageworker.cpp b/indra/llimage/llimageworker.cpp
index 752ec0ea9..57388541a 100644
--- a/indra/llimage/llimageworker.cpp
+++ b/indra/llimage/llimageworker.cpp
@@ -50,7 +50,7 @@ LLImageDecodeThread::~LLImageDecodeThread()
// MAIN THREAD
// virtual
-S32 LLImageDecodeThread::update(U32 max_time_ms)
+S32 LLImageDecodeThread::update(F32 max_time_ms)
{
LLMutexLock lock(&mCreationMutex);
for (creation_list_t::iterator iter = mCreationList.begin();
diff --git a/indra/llimage/llimageworker.h b/indra/llimage/llimageworker.h
index 061627eba..7af311d36 100644
--- a/indra/llimage/llimageworker.h
+++ b/indra/llimage/llimageworker.h
@@ -84,7 +84,7 @@ public:
handle_t decodeImage(LLImageFormatted* image,
U32 priority, S32 discard, BOOL needs_aux,
Responder* responder);
- S32 update(U32 max_time_ms);
+ S32 update(F32 max_time_ms);
// Used by unit tests to check the consistency of the thread instance
S32 tut_size();
diff --git a/indra/llmessage/CMakeLists.txt b/indra/llmessage/CMakeLists.txt
index 8dd62f97e..a328d16e0 100644
--- a/indra/llmessage/CMakeLists.txt
+++ b/indra/llmessage/CMakeLists.txt
@@ -7,8 +7,6 @@ include(LLCommon)
include(LLMath)
include(LLMessage)
include(LLVFS)
-include(LLAddBuildTest)
-include(Tut)
include_directories (${CMAKE_CURRENT_SOURCE_DIR})
@@ -21,6 +19,7 @@ include_directories(
set(llmessage_SOURCE_FILES
llares.cpp
+ llareslistener.cpp
llassetstorage.cpp
llavatarnamecache.cpp
llblowfishcipher.cpp
@@ -49,7 +48,6 @@ set(llmessage_SOURCE_FILES
llmail.cpp
llmessagebuilder.cpp
llmessageconfig.cpp
- llmessagelog.cpp
llmessagereader.cpp
llmessagetemplate.cpp
llmessagetemplateparser.cpp
@@ -61,6 +59,7 @@ set(llmessage_SOURCE_FILES
llpacketbuffer.cpp
llpacketring.cpp
llpartdata.cpp
+ llproxy.cpp
llpumpio.cpp
llregionpresenceverifier.cpp
llsdappservices.cpp
@@ -100,7 +99,6 @@ set(llmessage_SOURCE_FILES
patch_code.cpp
patch_dct.cpp
patch_idct.cpp
- llsocks5.cpp
sound_ids.cpp
)
@@ -108,6 +106,7 @@ set(llmessage_HEADER_FILES
CMakeLists.txt
llares.h
+ llareslistener.h
llassetstorage.h
llavatarnamecache.h
llblowfishcipher.h
@@ -144,7 +143,6 @@ set(llmessage_HEADER_FILES
llmail.h
llmessagebuilder.h
llmessageconfig.h
- llmessagelog.h
llmessagereader.h
llmessagetemplate.h
llmessagetemplateparser.h
@@ -158,6 +156,7 @@ set(llmessage_HEADER_FILES
llpacketring.h
llpartdata.h
llpumpio.h
+ llproxy.h
llqueryflags.h
llregionflags.h
llregionhandle.h
@@ -202,7 +201,6 @@ set(llmessage_HEADER_FILES
patch_code.h
patch_dct.h
sound_ids.h
- llsocks5.h
)
set_source_files_properties(${llmessage_HEADER_FILES}
@@ -213,21 +211,52 @@ list(APPEND llmessage_SOURCE_FILES ${llmessage_HEADER_FILES})
add_library (llmessage ${llmessage_SOURCE_FILES})
add_dependencies(llmessage prepare)
target_link_libraries(
- llmessage
- ${CURL_LIBRARIES}
- ${CARES_LIBRARIES}
- ${OPENSSL_LIBRARIES}
- ${CRYPTO_LIBRARIES}
- ${XMLRPCEPI_LIBRARIES}
+ llmessage
+ ${CURL_LIBRARIES}
+ ${CARES_LIBRARIES}
+ ${OPENSSL_LIBRARIES}
+ ${CRYPTO_LIBRARIES}
+ ${XMLRPCEPI_LIBRARIES}
+ )
+
+# tests
+if (LL_TESTS)
+ include(GoogleMock)
+ include(LLAddBuildTest)
+ include(Python)
+ include(Tut)
+
+ SET(llmessage_TEST_SOURCE_FILES
+ # llhttpclientadapter.cpp
+ llmime.cpp
+ llnamevalue.cpp
+ lltrustedmessageservice.cpp
+ lltemplatemessagedispatcher.cpp
+ llregionpresenceverifier.cpp
+ )
+ LL_ADD_PROJECT_UNIT_TESTS(llmessage "${llmessage_TEST_SOURCE_FILES}")
+
+ # set(TEST_DEBUG on)
+ set(test_libs
+ ${LLMESSAGE_LIBRARIES}
+ ${WINDOWS_LIBRARIES}
+ ${LLVFS_LIBRARIES}
+ ${LLMATH_LIBRARIES}
+ ${LLCOMMON_LIBRARIES}
+ ${GOOGLEMOCK_LIBRARIES}
)
-IF (LL_TESTS)
- # When building the viewer the tests links against the shared objects.
- # These can not be found when we try to run the tests, so we had to disable them, for the viewer build.
- # TODO: Can someone with viewer knowledge figure out how to make these find the correct so.
- #ADD_BUILD_TEST(llhttpclientadapter llmessage)
- ADD_BUILD_TEST(llhttpclientadapter llmessage)
- ADD_BUILD_TEST(lltrustedmessageservice llmessage)
- ADD_BUILD_TEST(lltemplatemessagedispatcher llmessage)
-ENDIF (LL_TESTS)
+ LL_ADD_INTEGRATION_TEST(
+ llsdmessage
+ "llsdmessage.cpp"
+ "${test_libs}"
+ ${PYTHON_EXECUTABLE}
+ "${CMAKE_CURRENT_SOURCE_DIR}/tests/test_llsdmessage_peer.py"
+ )
+
+ LL_ADD_INTEGRATION_TEST(llavatarnamecache "" "${test_libs}")
+ LL_ADD_INTEGRATION_TEST(llhost "" "${test_libs}")
+ LL_ADD_INTEGRATION_TEST(llpartdata "" "${test_libs}")
+ LL_ADD_INTEGRATION_TEST(llxfer_file "" "${test_libs}")
+endif (LL_TESTS)
diff --git a/indra/llmessage/llares.cpp b/indra/llmessage/llares.cpp
index 0c6a31856..3328f2fd5 100644
--- a/indra/llmessage/llares.cpp
+++ b/indra/llmessage/llares.cpp
@@ -4,36 +4,29 @@
* @date 2007-08-15
* @brief Wrapper for asynchronous DNS lookups.
*
- * $LicenseInfo:firstyear=2007&license=viewergpl$
- *
- * Copyright (c) 2007-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2007&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
#include "linden_common.h"
-#define CARES_STATICLIB
#include "llares.h"
#include "llscopedvolatileaprpool.h"
@@ -45,9 +38,11 @@
#include "apr_poll.h"
#include "llapr.h"
-
+#include "llareslistener.h"
+#include "llscopedvolatileaprpool.h"
#if defined(LL_WINDOWS)
+#pragma warning (disable : 4355) // 'this' used in initializer list: yes, intentionally
# define ns_c_in 1
# define NS_HFIXEDSZ 12 /* #/bytes of fixed data in header */
# define NS_QFIXEDSZ 4 /* #/bytes of fixed data in query */
@@ -105,9 +100,11 @@ void LLAres::QueryResponder::queryError(int code)
}
LLAres::LLAres() :
-chan_(NULL), mInitSuccess(false)
+ chan_(NULL),
+ mInitSuccess(false),
+ mListener(new LLAresListener(this))
{
- if (ares_library_init(ARES_LIB_INIT_ALL) != ARES_SUCCESS ||
+ if (ares_library_init( ARES_LIB_INIT_ALL ) != ARES_SUCCESS ||
ares_init(&chan_) != ARES_SUCCESS)
{
llwarns << "Could not succesfully initialize ares!" << llendl;
diff --git a/indra/llmessage/llares.h b/indra/llmessage/llares.h
index 8cca4fe15..800781ee8 100644
--- a/indra/llmessage/llares.h
+++ b/indra/llmessage/llares.h
@@ -4,31 +4,25 @@
* @date 2007-08-15
* @brief Wrapper for asynchronous DNS lookups.
*
- * $LicenseInfo:firstyear=2007&license=viewergpl$
- *
- * Copyright (c) 2007-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2007&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
@@ -55,7 +49,10 @@
#include "llrefcount.h"
#include "lluri.h"
+#include
+
class LLQueryResponder;
+class LLAresListener;
/**
* @brief Supported DNS RR types.
@@ -450,6 +447,9 @@ public:
protected:
ares_channel chan_;
bool mInitSuccess;
+ // boost::scoped_ptr would actually fit the requirement better, but it
+ // can't handle incomplete types as boost::shared_ptr can.
+ boost::shared_ptr mListener;
};
/**
diff --git a/indra/llmessage/llassetstorage.cpp b/indra/llmessage/llassetstorage.cpp
index d09044109..2729f199d 100644
--- a/indra/llmessage/llassetstorage.cpp
+++ b/indra/llmessage/llassetstorage.cpp
@@ -2,31 +2,25 @@
* @file llassetstorage.cpp
* @brief Implementation of the base asset storage system.
*
- * $LicenseInfo:firstyear=2001&license=viewergpl$
- *
- * Copyright (c) 2001-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2001&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
@@ -155,8 +149,8 @@ void LLAssetInfo::setFromNameValue( const LLNameValue& nv )
setName( buf );
buf.assign( str, pos2, std::string::npos );
setDescription( buf );
- llinfos << "uuid: " << mUuid << llendl;
- llinfos << "creator: " << mCreatorID << llendl;
+ LL_DEBUGS("AssetStorage") << "uuid: " << mUuid << llendl;
+ LL_DEBUGS("AssetStorage") << "creator: " << mCreatorID << llendl;
}
///----------------------------------------------------------------------------
@@ -440,9 +434,9 @@ bool LLAssetStorage::findInStaticVFSAndInvokeCallback(const LLUUID& uuid, LLAsse
// IW - uuid is passed by value to avoid side effects, please don't re-add &
void LLAssetStorage::getAssetData(const LLUUID uuid, LLAssetType::EType type, LLGetAssetCallback callback, void *user_data, BOOL is_priority)
{
- lldebugs << "LLAssetStorage::getAssetData() - " << uuid << "," << LLAssetType::lookup(type) << llendl;
+ LL_DEBUGS("AssetStorage") << "LLAssetStorage::getAssetData() - " << uuid << "," << LLAssetType::lookup(type) << llendl;
- llinfos << "ASSET_TRACE requesting " << uuid << " type " << LLAssetType::lookup(type) << llendl;
+ LL_DEBUGS("AssetStorage") << "ASSET_TRACE requesting " << uuid << " type " << LLAssetType::lookup(type) << llendl;
if (user_data)
{
@@ -452,7 +446,7 @@ void LLAssetStorage::getAssetData(const LLUUID uuid, LLAssetType::EType type, LL
if (mShutDown)
{
- llinfos << "ASSET_TRACE cancelled " << uuid << " type " << LLAssetType::lookup(type) << " shutting down" << llendl;
+ LL_DEBUGS("AssetStorage") << "ASSET_TRACE cancelled " << uuid << " type " << LLAssetType::lookup(type) << " shutting down" << llendl;
if (callback)
{
@@ -470,7 +464,7 @@ void LLAssetStorage::getAssetData(const LLUUID uuid, LLAssetType::EType type, LL
}
return;
}
-
+
/* */
if(std::find(mBlackListedAsset.begin(),mBlackListedAsset.end(),uuid) != mBlackListedAsset.end())
{
@@ -482,15 +476,14 @@ void LLAssetStorage::getAssetData(const LLUUID uuid, LLAssetType::EType type, LL
return;
}
/* */
-
+
// Try static VFS first.
if (findInStaticVFSAndInvokeCallback(uuid,type,callback,user_data))
{
- llinfos << "ASSET_TRACE asset " << uuid << " found in static VFS" << llendl;
+ LL_DEBUGS("AssetStorage") << "ASSET_TRACE asset " << uuid << " found in static VFS" << llendl;
return;
}
-
BOOL exists = mVFS->getExists(uuid, type);
LLVFile file(mVFS, uuid, type);
U32 size = exists ? file.getSize() : 0;
@@ -505,7 +498,7 @@ void LLAssetStorage::getAssetData(const LLUUID uuid, LLAssetType::EType type, LL
callback(mVFS, uuid, type, user_data, LL_ERR_NOERR, LL_EXSTAT_VFS_CACHED);
}
- llinfos << "ASSET_TRACE asset " << uuid << " found in VFS" << llendl;
+ LL_DEBUGS("AssetStorage") << "ASSET_TRACE asset " << uuid << " found in VFS" << llendl;
}
else
{
@@ -539,7 +532,7 @@ void LLAssetStorage::getAssetData(const LLUUID uuid, LLAssetType::EType type, LL
}
if (duplicate)
{
- llinfos << "Adding additional non-duplicate request for asset " << uuid
+ LL_DEBUGS("AssetStorage") << "Adding additional non-duplicate request for asset " << uuid
<< "." << LLAssetType::lookup(type) << llendl;
}
@@ -603,9 +596,9 @@ void LLAssetStorage::downloadCompleteCallback(
LLAssetType::EType file_type,
void* user_data, LLExtStat ext_status)
{
- llinfos << "ASSET_TRACE asset " << file_id << " downloadCompleteCallback" << llendl;
+ LL_DEBUGS("AssetStorage") << "ASSET_TRACE asset " << file_id << " downloadCompleteCallback" << llendl;
- lldebugs << "LLAssetStorage::downloadCompleteCallback() for " << file_id
+ LL_DEBUGS("AssetStorage") << "LLAssetStorage::downloadCompleteCallback() for " << file_id
<< "," << LLAssetType::lookup(file_type) << llendl;
LLAssetRequest* req = (LLAssetRequest*)user_data;
if(!req)
@@ -750,7 +743,7 @@ void LLAssetStorage::getEstateAsset(const LLHost &object_sim, const LLUUID &agen
tpvf.setAsset(asset_id, atype);
tpvf.setCallback(downloadEstateAssetCompleteCallback, req);
- llinfos << "Starting transfer for " << asset_id << llendl;
+ LL_DEBUGS("AssetStorage") << "Starting transfer for " << asset_id << llendl;
LLTransferTargetChannel *ttcp = gTransferManager.getTargetChannel(source_host, LLTCT_ASSET);
ttcp->requestTransfer(spe, tpvf, 100.f + (is_priority ? 1.f : 0.f));
}
@@ -890,7 +883,7 @@ void LLAssetStorage::getInvItemAsset(const LLHost &object_sim, const LLUUID &age
tpvf.setAsset(asset_id, atype);
tpvf.setCallback(downloadInvItemCompleteCallback, req);
- llinfos << "Starting transfer for inventory asset "
+ LL_DEBUGS("AssetStorage") << "Starting transfer for inventory asset "
<< item_id << " owned by " << owner_id << "," << task_id
<< llendl;
LLTransferTargetChannel *ttcp = gTransferManager.getTargetChannel(source_host, LLTCT_ASSET);
@@ -1230,7 +1223,7 @@ bool LLAssetStorage::deletePendingRequest(LLAssetStorage::ERequestType rt,
request_list_t* requests = getRequestList(rt);
if (deletePendingRequestImpl(requests, asset_type, asset_id))
{
- llinfos << "Asset " << getRequestName(rt) << " request for "
+ LL_DEBUGS("AssetStorage") << "Asset " << getRequestName(rt) << " request for "
<< asset_id << "." << LLAssetType::lookup(asset_type)
<< " removed from pending queue." << llendl;
return true;
@@ -1326,7 +1319,7 @@ void LLAssetStorage::getAssetData(const LLUUID uuid, LLAssetType::EType type, vo
user_data == ((LLLegacyAssetRequest *)tmp->mUserData)->mUserData)
{
// this is a duplicate from the same subsystem - throw it away
- llinfos << "Discarding duplicate request for UUID " << uuid << llendl;
+ LL_DEBUGS("AssetStorage") << "Discarding duplicate request for UUID " << uuid << llendl;
return;
}
}
@@ -1509,7 +1502,7 @@ void LLAssetStorage::reportMetric( const LLUUID& asset_id, const LLAssetType::ET
{
if( !metric_recipient )
{
- llinfos << "Couldn't store LLAssetStoreage::reportMetric - no metrics_recipient" << llendl;
+ LL_DEBUGS("AssetStorage") << "Couldn't store LLAssetStoreage::reportMetric - no metrics_recipient" << llendl;
return;
}
diff --git a/indra/llmessage/llassetstorage.h b/indra/llmessage/llassetstorage.h
index e9db3b71f..0ad4dad1d 100644
--- a/indra/llmessage/llassetstorage.h
+++ b/indra/llmessage/llassetstorage.h
@@ -3,31 +3,25 @@
* @brief definition of LLAssetStorage class which allows simple
* up/downloads of uuid,type asets
*
- * $LicenseInfo:firstyear=2001&license=viewergpl$
- *
- * Copyright (c) 2001-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2001&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
@@ -262,7 +256,7 @@ public:
// note that your callback may get called BEFORE the function returns
virtual void getAssetData(const LLUUID uuid, LLAssetType::EType atype, LLGetAssetCallback cb, void *user_data, BOOL is_priority = FALSE);
-
+
std::vector mBlackListedAsset;
/*
diff --git a/indra/llmessage/llblowfishcipher.cpp b/indra/llmessage/llblowfishcipher.cpp
index f24d103d0..88aaf7c52 100644
--- a/indra/llmessage/llblowfishcipher.cpp
+++ b/indra/llmessage/llblowfishcipher.cpp
@@ -2,31 +2,25 @@
* @file llblowfishcipher.cpp
* @brief Wrapper around OpenSSL Blowfish encryption algorithm.
*
- * $LicenseInfo:firstyear=2007&license=viewergpl$
- *
- * Copyright (c) 2007-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2007&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/llblowfishcipher.h b/indra/llmessage/llblowfishcipher.h
index f8b5e1f6d..e2e54526e 100644
--- a/indra/llmessage/llblowfishcipher.h
+++ b/indra/llmessage/llblowfishcipher.h
@@ -5,31 +5,25 @@
* two UUIDs and a timestamp (16x2 + 4 = 36 bytes) with only 40 bytes of
* output. AES has a block size of 32 bytes, so this would require 64 bytes.
*
- * $LicenseInfo:firstyear=2007&license=viewergpl$
- *
- * Copyright (c) 2007-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2007&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/llbuffer.cpp b/indra/llmessage/llbuffer.cpp
index 1924fcdf5..58208dbe1 100644
--- a/indra/llmessage/llbuffer.cpp
+++ b/indra/llmessage/llbuffer.cpp
@@ -4,31 +4,25 @@
* @date 2005-09-20
* @brief Implementation of the segments, buffers, and buffer arrays.
*
- * $LicenseInfo:firstyear=2005&license=viewergpl$
- *
- * Copyright (c) 2005-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2005&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
@@ -38,7 +32,9 @@
#include "llmath.h"
#include "llmemtype.h"
#include "llstl.h"
-#include //VS2010
+#include "llthread.h"
+
+#define ASSERT_LLBUFFERARRAY_MUTEX_LOCKED llassert(!mMutexp || mMutexp->isSelfLocked());
/**
* LLSegment
@@ -231,7 +227,8 @@ void LLHeapBuffer::allocate(S32 size)
* LLBufferArray
*/
LLBufferArray::LLBufferArray() :
- mNextBaseChannel(0)
+ mNextBaseChannel(0),
+ mMutexp(NULL)
{
LLMemType m1(LLMemType::MTYPE_IO_BUFFER);
}
@@ -240,6 +237,8 @@ LLBufferArray::~LLBufferArray()
{
LLMemType m1(LLMemType::MTYPE_IO_BUFFER);
std::for_each(mBuffers.begin(), mBuffers.end(), DeletePointer());
+
+ delete mMutexp;
}
// static
@@ -250,14 +249,57 @@ LLChannelDescriptors LLBufferArray::makeChannelConsumer(
return rv;
}
+void LLBufferArray::lock()
+{
+ if(mMutexp)
+ {
+ mMutexp->lock() ;
+ }
+}
+
+void LLBufferArray::unlock()
+{
+ if(mMutexp)
+ {
+ mMutexp->unlock() ;
+ }
+}
+
+LLMutex* LLBufferArray::getMutex()
+{
+ return mMutexp ;
+}
+
+void LLBufferArray::setThreaded(bool threaded)
+{
+ if(threaded)
+ {
+ if(!mMutexp)
+ {
+ mMutexp = new LLMutex();
+ }
+ }
+ else
+ {
+ if(mMutexp)
+ {
+ delete mMutexp ;
+ mMutexp = NULL ;
+ }
+ }
+}
+
LLChannelDescriptors LLBufferArray::nextChannel()
{
LLChannelDescriptors rv(mNextBaseChannel++);
return rv;
}
+//mMutexp should be locked before calling this.
S32 LLBufferArray::capacity() const
{
+ ASSERT_LLBUFFERARRAY_MUTEX_LOCKED
+
S32 total = 0;
const_buffer_iterator_t iter = mBuffers.begin();
const_buffer_iterator_t end = mBuffers.end();
@@ -270,6 +312,8 @@ S32 LLBufferArray::capacity() const
bool LLBufferArray::append(S32 channel, const U8* src, S32 len)
{
+ LLMutexLock lock(mMutexp) ;
+
LLMemType m1(LLMemType::MTYPE_IO_BUFFER);
std::vector segments;
if(copyIntoBuffers(channel, src, len, segments))
@@ -280,8 +324,11 @@ bool LLBufferArray::append(S32 channel, const U8* src, S32 len)
return false;
}
+//mMutexp should be locked before calling this.
bool LLBufferArray::prepend(S32 channel, const U8* src, S32 len)
{
+ ASSERT_LLBUFFERARRAY_MUTEX_LOCKED
+
LLMemType m1(LLMemType::MTYPE_IO_BUFFER);
std::vector segments;
if(copyIntoBuffers(channel, src, len, segments))
@@ -300,6 +347,8 @@ bool LLBufferArray::insertAfter(
{
LLMemType m1(LLMemType::MTYPE_IO_BUFFER);
std::vector segments;
+
+ LLMutexLock lock(mMutexp) ;
if(mSegments.end() != segment)
{
++segment;
@@ -312,8 +361,11 @@ bool LLBufferArray::insertAfter(
return false;
}
+//mMutexp should be locked before calling this.
LLBufferArray::segment_iterator_t LLBufferArray::splitAfter(U8* address)
{
+ ASSERT_LLBUFFERARRAY_MUTEX_LOCKED
+
LLMemType m1(LLMemType::MTYPE_IO_BUFFER);
segment_iterator_t end = mSegments.end();
segment_iterator_t it = getSegment(address);
@@ -342,20 +394,26 @@ LLBufferArray::segment_iterator_t LLBufferArray::splitAfter(U8* address)
return rv;
}
+//mMutexp should be locked before calling this.
LLBufferArray::segment_iterator_t LLBufferArray::beginSegment()
{
+ ASSERT_LLBUFFERARRAY_MUTEX_LOCKED
return mSegments.begin();
}
+//mMutexp should be locked before calling this.
LLBufferArray::segment_iterator_t LLBufferArray::endSegment()
{
+ ASSERT_LLBUFFERARRAY_MUTEX_LOCKED
return mSegments.end();
}
+//mMutexp should be locked before calling this.
LLBufferArray::segment_iterator_t LLBufferArray::constructSegmentAfter(
U8* address,
LLSegment& segment)
{
+ ASSERT_LLBUFFERARRAY_MUTEX_LOCKED
LLMemType m1(LLMemType::MTYPE_IO_BUFFER);
segment_iterator_t rv = mSegments.begin();
segment_iterator_t end = mSegments.end();
@@ -402,8 +460,10 @@ LLBufferArray::segment_iterator_t LLBufferArray::constructSegmentAfter(
return rv;
}
+//mMutexp should be locked before calling this.
LLBufferArray::segment_iterator_t LLBufferArray::getSegment(U8* address)
{
+ ASSERT_LLBUFFERARRAY_MUTEX_LOCKED
segment_iterator_t end = mSegments.end();
if(!address)
{
@@ -421,9 +481,11 @@ LLBufferArray::segment_iterator_t LLBufferArray::getSegment(U8* address)
return end;
}
+//mMutexp should be locked before calling this.
LLBufferArray::const_segment_iterator_t LLBufferArray::getSegment(
U8* address) const
{
+ ASSERT_LLBUFFERARRAY_MUTEX_LOCKED
const_segment_iterator_t end = mSegments.end();
if(!address)
{
@@ -473,6 +535,8 @@ S32 LLBufferArray::countAfter(S32 channel, U8* start) const
S32 count = 0;
S32 offset = 0;
const_segment_iterator_t it;
+
+ LLMutexLock lock(mMutexp) ;
const_segment_iterator_t end = mSegments.end();
if(start)
{
@@ -524,6 +588,8 @@ U8* LLBufferArray::readAfter(
len = 0;
S32 bytes_to_copy = 0;
const_segment_iterator_t it;
+
+ LLMutexLock lock(mMutexp) ;
const_segment_iterator_t end = mSegments.end();
if(start)
{
@@ -575,6 +641,7 @@ U8* LLBufferArray::seek(
U8* start,
S32 delta) const
{
+ ASSERT_LLBUFFERARRAY_MUTEX_LOCKED
LLMemType m1(LLMemType::MTYPE_IO_BUFFER);
const_segment_iterator_t it;
const_segment_iterator_t end = mSegments.end();
@@ -716,9 +783,14 @@ U8* LLBufferArray::seek(
return rv;
}
+//test use only
bool LLBufferArray::takeContents(LLBufferArray& source)
{
LLMemType m1(LLMemType::MTYPE_IO_BUFFER);
+
+ LLMutexLock lock(mMutexp);
+ source.lock();
+
std::copy(
source.mBuffers.begin(),
source.mBuffers.end(),
@@ -730,13 +802,17 @@ bool LLBufferArray::takeContents(LLBufferArray& source)
std::back_insert_iterator(mSegments));
source.mSegments.clear();
source.mNextBaseChannel = 0;
+ source.unlock();
+
return true;
}
+//mMutexp should be locked before calling this.
LLBufferArray::segment_iterator_t LLBufferArray::makeSegment(
S32 channel,
S32 len)
{
+ ASSERT_LLBUFFERARRAY_MUTEX_LOCKED
LLMemType m1(LLMemType::MTYPE_IO_BUFFER);
// start at the end of the buffers, because it is the most likely
// to have free space.
@@ -772,8 +848,10 @@ LLBufferArray::segment_iterator_t LLBufferArray::makeSegment(
return send;
}
+//mMutexp should be locked before calling this.
bool LLBufferArray::eraseSegment(const segment_iterator_t& erase_iter)
{
+ ASSERT_LLBUFFERARRAY_MUTEX_LOCKED
LLMemType m1(LLMemType::MTYPE_IO_BUFFER);
// Find out which buffer contains the segment, and if it is found,
@@ -799,13 +877,14 @@ bool LLBufferArray::eraseSegment(const segment_iterator_t& erase_iter)
return rv;
}
-
+//mMutexp should be locked before calling this.
bool LLBufferArray::copyIntoBuffers(
S32 channel,
const U8* src,
S32 len,
std::vector& segments)
{
+ ASSERT_LLBUFFERARRAY_MUTEX_LOCKED
LLMemType m1(LLMemType::MTYPE_IO_BUFFER);
if(!src || !len) return false;
S32 copied = 0;
diff --git a/indra/llmessage/llbuffer.h b/indra/llmessage/llbuffer.h
index b031ee868..ccdb9fa7e 100644
--- a/indra/llmessage/llbuffer.h
+++ b/indra/llmessage/llbuffer.h
@@ -4,31 +4,25 @@
* @date 2005-09-20
* @brief Declaration of buffer and buffer arrays primarily used in I/O.
*
- * $LicenseInfo:firstyear=2005&license=viewergpl$
- *
- * Copyright (c) 2005-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2005&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
@@ -45,6 +39,7 @@
#include
#include
+class LLMutex;
/**
* @class LLChannelDescriptors
* @brief A way simple interface to accesss channels inside a buffer
@@ -570,6 +565,29 @@ public:
* @return Returns true on success.
*/
bool eraseSegment(const segment_iterator_t& iter);
+
+ /**
+ * @brief Lock the mutex if it exists
+ * This method locks mMutexp to make accessing LLBufferArray thread-safe
+ */
+ void lock();
+
+ /**
+ * @brief Unlock the mutex if it exists
+ */
+ void unlock();
+
+ /**
+ * @brief Return mMutexp
+ */
+ LLMutex* getMutex();
+
+ /**
+ * @brief Set LLBufferArray to be shared across threads or not
+ * This method is to create mMutexp if is threaded.
+ * @param threaded Indicates this LLBufferArray instance is shared across threads if true.
+ */
+ void setThreaded(bool threaded);
//@}
protected:
@@ -601,6 +619,7 @@ protected:
S32 mNextBaseChannel;
buffer_list_t mBuffers;
segment_list_t mSegments;
+ LLMutex* mMutexp;
};
#endif // LL_LLBUFFER_H
diff --git a/indra/llmessage/llbufferstream.cpp b/indra/llmessage/llbufferstream.cpp
index bdb0d68f5..8d8ad05ad 100644
--- a/indra/llmessage/llbufferstream.cpp
+++ b/indra/llmessage/llbufferstream.cpp
@@ -4,31 +4,25 @@
* @date 2005-10-10
* @brief Implementation of the buffer iostream classes
*
- * $LicenseInfo:firstyear=2005&license=viewergpl$
- *
- * Copyright (c) 2005-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2005&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
@@ -37,6 +31,7 @@
#include "llbuffer.h"
#include "llmemtype.h"
+#include "llthread.h"
static const S32 DEFAULT_OUTPUT_SEGMENT_SIZE = 1024 * 4;
@@ -68,6 +63,7 @@ int LLBufferStreamBuf::underflow()
return EOF;
}
+ LLMutexLock lock(mBuffer->getMutex());
LLBufferArray::segment_iterator_t iter;
LLBufferArray::segment_iterator_t end = mBuffer->endSegment();
U8* last_pos = (U8*)gptr();
@@ -155,6 +151,7 @@ int LLBufferStreamBuf::overflow(int c)
// since we got here, we have a buffer, and we have a character to
// put on it.
LLBufferArray::segment_iterator_t it;
+ LLMutexLock lock(mBuffer->getMutex());
it = mBuffer->makeSegment(mChannels.out(), DEFAULT_OUTPUT_SEGMENT_SIZE);
if(it != mBuffer->endSegment())
{
@@ -216,6 +213,7 @@ int LLBufferStreamBuf::sync()
// *NOTE: I bet we could just --address if address is not NULL.
// Need to think about that.
+ LLMutexLock lock(mBuffer->getMutex());
address = mBuffer->seek(mChannels.out(), address, -1);
if(address)
{
@@ -279,6 +277,8 @@ streampos LLBufferStreamBuf::seekoff(
// NULL is fine
break;
}
+
+ LLMutexLock lock(mBuffer->getMutex());
address = mBuffer->seek(mChannels.in(), base_addr, off);
if(address)
{
@@ -310,6 +310,8 @@ streampos LLBufferStreamBuf::seekoff(
// NULL is fine
break;
}
+
+ LLMutexLock lock(mBuffer->getMutex());
address = mBuffer->seek(mChannels.out(), base_addr, off);
if(address)
{
diff --git a/indra/llmessage/llbufferstream.h b/indra/llmessage/llbufferstream.h
index de6888421..19749612f 100644
--- a/indra/llmessage/llbufferstream.h
+++ b/indra/llmessage/llbufferstream.h
@@ -4,31 +4,25 @@
* @date 2005-10-10
* @brief Classes to treat an LLBufferArray as a c++ iostream.
*
- * $LicenseInfo:firstyear=2005&license=viewergpl$
- *
- * Copyright (c) 2005-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2005&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/llcachename.cpp b/indra/llmessage/llcachename.cpp
index 1466c79ed..4c972749f 100644
--- a/indra/llmessage/llcachename.cpp
+++ b/indra/llmessage/llcachename.cpp
@@ -2,31 +2,25 @@
* @file llcachename.cpp
* @brief A hierarchical cache of first and last names queried based on UUID.
*
- * $LicenseInfo:firstyear=2002&license=viewergpl$
- *
- * Copyright (c) 2002-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2002&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
@@ -77,6 +71,8 @@ public:
public:
bool mIsGroup;
U32 mCreateTime; // unix time_t
+ // IDEVO TODO collapse names to one field, which will eliminate
+ // many string compares on "Resident"
std::string mFirstName;
std::string mLastName;
std::string mGroupName;
@@ -310,85 +306,6 @@ boost::signals2::connection LLCacheName::addObserver(const LLCacheNameCallback&
return impl.mSignal.connect(callback);
}
-#if 0
-void LLCacheName::importFile(LLFILE* fp)
-{
- S32 count = 0;
-
- const S32 BUFFER_SIZE = 1024;
- char buffer[BUFFER_SIZE]; /*Flawfinder: ignore*/
-
- // *NOTE: These buffer sizes are hardcoded into sscanf() below
- char id_string[MAX_STRING]; /*Flawfinder: ignore*/
- char firstname[MAX_STRING]; /*Flawfinder: ignore*/
- char lastname[MAX_STRING]; /*Flawfinder: ignore*/
- U32 create_time;
-
- // This is OK if the first line is actually a name. We just don't load it.
- char* valid = fgets(buffer, BUFFER_SIZE, fp);
- if (!valid) return;
-
- // *NOTE: This buffer size is hardcoded into sscanf() below
- char version_string[BUFFER_SIZE]; /*Flawfinder: ignore*/
- S32 version = 0;
- S32 match = sscanf( /* Flawfinder: ignore */
- buffer,
- "%1023s %d",
- version_string, &version);
- if ( match != 2
- || strcmp(version_string, "version")
- || version != CN_FILE_VERSION)
- {
- llwarns << "Ignoring old cache name file format" << llendl;
- return;
- }
-
- // We'll expire entries more than a week old
- U32 now = (U32)time(NULL);
- const U32 SECS_PER_DAY = 60 * 60 * 24;
- U32 delete_before_time = now - (7 * SECS_PER_DAY);
-
- while(!feof(fp))
- {
- valid = fgets(buffer, BUFFER_SIZE, fp);
- if (!valid) break;
-
- match = sscanf( /* Flawfinder: ignore */
- buffer,
- "%254s %u %254s %254s",
- id_string,
- &create_time,
- firstname,
- lastname);
- if (4 != match) continue;
-
- LLUUID id(id_string);
- if (id.isNull()) continue;
-
- // undo trivial XOR
- S32 i;
- for (i = 0; i < UUID_BYTES; i++)
- {
- id.mData[i] ^= 0x33;
- }
-
- // Don't load entries that are more than a week old
- if (create_time < delete_before_time) continue;
-
- LLCacheNameEntry* entry = new LLCacheNameEntry();
- entry->mIsGroup = false;
- entry->mCreateTime = create_time;
- entry->mFirstName = firstname;
- entry->mLastName = lastname;
- impl.mCache[id] = entry;
-
- count++;
- }
-
- llinfos << "LLCacheName loaded " << count << " names" << llendl;
-}
-#endif
-
bool LLCacheName::importFile(std::istream& istr)
{
LLSD data;
@@ -467,6 +384,7 @@ void LLCacheName::exportFile(std::ostream& ostr)
// store it
LLUUID id = iter->first;
std::string id_str = id.asString();
+ // IDEVO TODO: Should we store SLIDs with last name "Resident" or not?
if(!entry->mFirstName.empty() && !entry->mLastName.empty())
{
data[AGENTS][id_str][FIRST] = entry->mFirstName;
@@ -751,7 +669,7 @@ bool LLCacheName::getIfThere(const LLUUID& id, std::string& fullname, BOOL& is_g
fullname = "";
return false;
}
-
+
LLCacheNameEntry* entry = get_ptr_in_map(impl.mCache, id );
if (entry)
{
@@ -770,6 +688,8 @@ bool LLCacheName::getIfThere(const LLUUID& id, std::string& fullname, BOOL& is_g
return false;
}
//
+
+
void LLCacheName::processPending()
{
LLMemType mt_pp(LLMemType::MTYPE_CACHE_PROCESS_PENDING);
@@ -1127,4 +1047,3 @@ void LLCacheName::Impl::handleUUIDGroupNameReply(LLMessageSystem* msg, void** us
{
((LLCacheName::Impl*)userData)->processUUIDReply(msg, true);
}
-
diff --git a/indra/llmessage/llcachename.h b/indra/llmessage/llcachename.h
index 5ef562103..4c96ba0d3 100644
--- a/indra/llmessage/llcachename.h
+++ b/indra/llmessage/llcachename.h
@@ -2,31 +2,25 @@
* @file llcachename.h
* @brief A cache of names from UUIDs.
*
- * $LicenseInfo:firstyear=2002&license=viewergpl$
- *
- * Copyright (c) 2002-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2002&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
@@ -70,11 +64,6 @@ public:
boost::signals2::connection addObserver(const LLCacheNameCallback& callback);
- // janky old format. Remove after a while. Phoenix. 2008-01-30
-#if 0
- void importFile(LLFILE* fp);
-#endif
-
// storing cache on disk; for viewer, in name.cache
bool importFile(std::istream& istr);
void exportFile(std::ostream& ostr);
@@ -118,10 +107,10 @@ public:
// otherwise, will request the data, and will call the callback when
// available. There is no garuntee the callback will ever be called.
boost::signals2::connection get(const LLUUID& id, bool is_group, const LLCacheNameCallback& callback);
-
-//
+
+ //
bool getIfThere(const LLUUID& id, std::string& fullname, BOOL& is_group);
-//
+ //
// Convenience method for looking up a group name, so you can
// tell the difference between avatar lookup and group lookup
diff --git a/indra/llmessage/llchainio.cpp b/indra/llmessage/llchainio.cpp
index 9e613567b..bcda6746a 100644
--- a/indra/llmessage/llchainio.cpp
+++ b/indra/llmessage/llchainio.cpp
@@ -4,31 +4,25 @@
* @date 2005-08-04
* @brief Implementaiton of the chain factory.
*
- * $LicenseInfo:firstyear=2005&license=viewergpl$
- *
- * Copyright (c) 2005-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2005&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/llchainio.h b/indra/llmessage/llchainio.h
index 22140beef..6e4d6c201 100644
--- a/indra/llmessage/llchainio.h
+++ b/indra/llmessage/llchainio.h
@@ -4,31 +4,25 @@
* @date 2005-08-04
* @brief This class declares the interface for constructing io chains.
*
- * $LicenseInfo:firstyear=2005&license=viewergpl$
- *
- * Copyright (c) 2005-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2005&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/llcipher.h b/indra/llmessage/llcipher.h
index b68a1ac11..76e3a7a5a 100644
--- a/indra/llmessage/llcipher.h
+++ b/indra/llmessage/llcipher.h
@@ -2,31 +2,25 @@
* @file llcipher.h
* @brief Abstract base class for encryption ciphers.
*
- * $LicenseInfo:firstyear=2003&license=viewergpl$
- *
- * Copyright (c) 2003-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2003&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/llcircuit.cpp b/indra/llmessage/llcircuit.cpp
index d0e57ac48..e0410906f 100644
--- a/indra/llmessage/llcircuit.cpp
+++ b/indra/llmessage/llcircuit.cpp
@@ -2,31 +2,25 @@
* @file llcircuit.cpp
* @brief Class to track UDP endpoints for the message system.
*
- * $LicenseInfo:firstyear=2002&license=viewergpl$
- *
- * Copyright (c) 2002-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2002&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
@@ -1234,17 +1228,6 @@ void LLCircuit::getCircuitRange(
first = mCircuitData.upper_bound(key);
}
-//
-std::vector LLCircuit::getCircuitDataList()
-{
- std::vector list;
- circuit_data_map::iterator end = mCircuitData.end();
- for(circuit_data_map::iterator iter = mCircuitData.begin(); iter != end; ++iter)
- list.push_back((*iter).second);
- return list;
-}
-//
-
TPACKETID LLCircuitData::nextPacketOutID()
{
mPacketsOut++;
diff --git a/indra/llmessage/llcircuit.h b/indra/llmessage/llcircuit.h
index 711cba27c..d1c400c6a 100644
--- a/indra/llmessage/llcircuit.h
+++ b/indra/llmessage/llcircuit.h
@@ -3,31 +3,25 @@
* @brief Provides a method for tracking network circuit information
* for the UDP message system
*
- * $LicenseInfo:firstyear=2001&license=viewergpl$
- *
- * Copyright (c) 2001-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2001&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
@@ -128,7 +122,7 @@ public:
U32 getPacketsLost() const;
TPACKETID getPacketOutID() const;
BOOL getTrusted() const;
- F32 getAgeInSeconds() const;
+ F32 getAgeInSeconds() const;
S32 getUnackedPacketCount() const { return mUnackedPacketCount; }
S32 getUnackedPacketBytes() const { return mUnackedPacketBytes; }
F64 getNextPingSendTime() const { return mNextPingSendTime; }
@@ -333,10 +327,6 @@ public:
const LLHost& key,
circuit_data_map::iterator& first,
circuit_data_map::iterator& end);
-
- //
- std::vector getCircuitDataList();
- //
// Lists that optimize how many circuits we need to traverse a frame
// HACK - this should become protected eventually, but stupid !@$@# message system/circuit classes are jumbling things up.
diff --git a/indra/llmessage/llclassifiedflags.cpp b/indra/llmessage/llclassifiedflags.cpp
index f827f4b34..f6084d4a6 100644
--- a/indra/llmessage/llclassifiedflags.cpp
+++ b/indra/llmessage/llclassifiedflags.cpp
@@ -2,41 +2,35 @@
* @file llclassifiedflags.cpp
* @brief
*
- * $LicenseInfo:firstyear=2006&license=viewergpl$
- *
- * Copyright (c) 2006-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2006&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
-// *****************************************************************************
+//*****************************************************************************
// llclassifiedflags.cpp
//
// Some exported symbols and functions for dealing with classified flags.
//
// Copyright 2005, Linden Research, Inc
-// *****************************************************************************
+//*****************************************************************************
#include "linden_common.h"
diff --git a/indra/llmessage/llclassifiedflags.h b/indra/llmessage/llclassifiedflags.h
index 9d3e49b90..17fc86745 100644
--- a/indra/llmessage/llclassifiedflags.h
+++ b/indra/llmessage/llclassifiedflags.h
@@ -2,31 +2,25 @@
* @file llclassifiedflags.h
* @brief Flags used in the classifieds.
*
- * $LicenseInfo:firstyear=2005&license=viewergpl$
- *
- * Copyright (c) 2005-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2005&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/llcurl.cpp b/indra/llmessage/llcurl.cpp
index dee90dd5b..aaa19c4b5 100644
--- a/indra/llmessage/llcurl.cpp
+++ b/indra/llmessage/llcurl.cpp
@@ -1,34 +1,28 @@
/**
- * @file llcurl.h
+ * @file llcurl.cpp
* @author Zero / Donovan
* @date 2006-10-15
* @brief Implementation of wrapper around libcurl.
*
- * $LicenseInfo:firstyear=2006&license=viewergpl$
- *
- * Copyright (c) 2006-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2006&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
@@ -52,10 +46,10 @@
#endif
#include "llbufferstream.h"
+#include "llproxy.h"
#include "llsdserialize.h"
#include "llstl.h"
#include "llthread.h"
-#include "llsocks5.h"
#include "lltimer.h"
//////////////////////////////////////////////////////////////////////////////
@@ -78,10 +72,9 @@
static const U32 EASY_HANDLE_POOL_SIZE = 5;
static const S32 MULTI_PERFORM_CALL_REPEAT = 5;
-static const S32 CURL_REQUEST_TIMEOUT = 30; // seconds
+static const S32 CURL_REQUEST_TIMEOUT = 30; // seconds per operation
static const S32 MAX_ACTIVE_REQUEST_COUNT = 100;
-static
// DEBUG //
S32 gCurlEasyCount = 0;
S32 gCurlMultiCount = 0;
@@ -92,9 +85,12 @@ S32 gCurlMultiCount = 0;
std::vector LLCurl::sSSLMutex;
std::string LLCurl::sCAPath;
std::string LLCurl::sCAFile;
-
-bool LLCurl::sMultiThreaded = false;
-static U32 sMainThreadID = 0;
+LLCurlThread* LLCurl::sCurlThread = NULL ;
+LLMutex* LLCurl::sHandleMutexp = NULL ;
+S32 LLCurl::sTotalHandles = 0 ;
+bool LLCurl::sNotQuitting = true;
+F32 LLCurl::sCurlRequestTimeOut = 120.f; //seonds
+S32 LLCurl::sMaxHandles = 256; //max number of handles, (multi handles and easy handles combined).
void check_curl_code(CURLcode code)
{
@@ -183,6 +179,7 @@ void LLCurl::Responder::completedRaw(
{
llinfos << "Failed to deserialize LLSD. " << mURL << " [" << status << "]: " << reason << llendl;
}
+
completed(status, reason, content);
}
@@ -214,7 +211,7 @@ namespace boost
void intrusive_ptr_release(LLCurl::Responder* p)
{
- if(p && 0 == --p->mReferenceCount)
+ if (p && 0 == --p->mReferenceCount)
{
delete p;
}
@@ -226,17 +223,20 @@ namespace boost
std::set LLCurl::Easy::sFreeHandles;
std::set LLCurl::Easy::sActiveHandles;
-LLMutex* LLCurl::Easy::sHandleMutex = NULL;
-LLMutex* LLCurl::Easy::sMultiMutex = NULL;
+LLMutex* LLCurl::Easy::sHandleMutexp = NULL ;
//static
CURL* LLCurl::Easy::allocEasyHandle()
{
+ llassert(LLCurl::getCurlThread()) ;
+
CURL* ret = NULL;
- LLMutexLock lock(sHandleMutex);
+
+ LLMutexLock lock(sHandleMutexp) ;
+
if (sFreeHandles.empty())
{
- ret = curl_easy_init();
+ ret = LLCurl::newEasyHandle();
}
else
{
@@ -256,17 +256,27 @@ CURL* LLCurl::Easy::allocEasyHandle()
//static
void LLCurl::Easy::releaseEasyHandle(CURL* handle)
{
+ static const S32 MAX_NUM_FREE_HANDLES = 32 ;
+
if (!handle)
{
- llerrs << "handle cannot be NULL!" << llendl;
+ return ; //handle allocation failed.
+ //llerrs << "handle cannot be NULL!" << llendl;
}
- LLMutexLock lock(sHandleMutex);
-
+ LLMutexLock lock(sHandleMutexp) ;
if (sActiveHandles.find(handle) != sActiveHandles.end())
{
sActiveHandles.erase(handle);
- sFreeHandles.insert(handle);
+
+ if(sFreeHandles.size() < MAX_NUM_FREE_HANDLES)
+ {
+ sFreeHandles.insert(handle);
+ }
+ else
+ {
+ LLCurl::deleteEasyHandle(handle) ;
+ }
}
else
{
@@ -299,24 +309,6 @@ LLCurl::Easy* LLCurl::Easy::getEasy()
CURLcode result = curl_easy_setopt(easy->mCurlEasyHandle, CURLOPT_DNS_CACHE_TIMEOUT, 0);
check_curl_code(result);
- if (LLSocks::getInstance()->isHttpProxyEnabled())
- {
- std::string address = LLSocks::getInstance()->getHTTPProxy().getIPString();
- U16 port = LLSocks::getInstance()->getHTTPProxy().getPort();
- curl_easy_setopt(easy->mCurlEasyHandle, CURLOPT_PROXY,address.c_str());
- curl_easy_setopt(easy->mCurlEasyHandle, CURLOPT_PROXYPORT,port);
- if (LLSocks::getInstance()->getHttpProxyType() == LLPROXY_SOCKS)
- {
- curl_easy_setopt(easy->mCurlEasyHandle, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
- if(LLSocks::getInstance()->getSelectedAuthMethod()==METHOD_PASSWORD)
- curl_easy_setopt(easy->mCurlEasyHandle, CURLOPT_PROXYUSERPWD,LLSocks::getInstance()->getProxyUserPwd().c_str());
- }
- else
- {
- curl_easy_setopt(easy->mCurlEasyHandle, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
- }
- }
-
++gCurlEasyCount;
return easy;
}
@@ -327,6 +319,14 @@ LLCurl::Easy::~Easy()
--gCurlEasyCount;
curl_slist_free_all(mHeaders);
for_each(mStrings.begin(), mStrings.end(), DeletePointerArray());
+
+ if (mResponder && LLCurl::sNotQuitting) //aborted
+ {
+ std::string reason("Request timeout, aborted.") ;
+ mResponder->completedRaw(408, //HTTP_REQUEST_TIME_OUT, timeout, abort
+ reason, mChannels, mOutput);
+ }
+ mResponder = NULL;
}
void LLCurl::Easy::resetState()
@@ -365,11 +365,11 @@ const char* LLCurl::Easy::getErrorBuffer()
void LLCurl::Easy::setCA()
{
- if(!sCAPath.empty())
+ if (!sCAPath.empty())
{
setoptString(CURLOPT_CAPATH, sCAPath);
}
- if(!sCAFile.empty())
+ if (!sCAFile.empty())
{
setoptString(CURLOPT_CAINFO, sCAFile);
}
@@ -395,7 +395,7 @@ U32 LLCurl::Easy::report(CURLcode code)
if (code == CURLE_OK)
{
check_curl_code(curl_easy_getinfo(mCurlEasyHandle, CURLINFO_RESPONSE_CODE, &responseCode));
- // *TODO: get reason from first line of mHeaderOutput
+ //*TODO: get reason from first line of mHeaderOutput
}
else
{
@@ -403,7 +403,7 @@ U32 LLCurl::Easy::report(CURLcode code)
responseReason = strerror(code) + " : " + mErrorBuffer;
setopt(CURLOPT_FRESH_CONNECT, TRUE);
}
-
+
if (mResponder)
{
mResponder->completedRaw(responseCode, responseReason, mChannels, mOutput);
@@ -495,25 +495,11 @@ void LLCurl::Easy::prepRequest(const std::string& url,
//setopt(CURLOPT_VERBOSE, 1); // useful for debugging
setopt(CURLOPT_NOSIGNAL, 1);
- if (LLSocks::getInstance()->isHttpProxyEnabled())
- {
- std::string address = LLSocks::getInstance()->getHTTPProxy().getIPString();
- U16 port = LLSocks::getInstance()->getHTTPProxy().getPort();
- setoptString(CURLOPT_PROXY, address.c_str());
- setopt(CURLOPT_PROXYPORT, port);
- if (LLSocks::getInstance()->getHttpProxyType() == LLPROXY_SOCKS)
- {
- setopt(CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
- if(LLSocks::getInstance()->getSelectedAuthMethod()==METHOD_PASSWORD)
- setoptString(CURLOPT_PROXYUSERPWD,LLSocks::getInstance()->getProxyUserPwd());
- }
- else
- {
- setopt(CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
- }
- }
+ // Set the CURL options for either Socks or HTTP proxy
+ LLProxy::getInstance()->applyProxySettings(this);
mOutput.reset(new LLBufferArray);
+ mOutput->setThreaded(true);
setopt(CURLOPT_WRITEFUNCTION, (void*)&curlWriteCallback);
setopt(CURLOPT_WRITEDATA, (void*)this);
@@ -522,8 +508,9 @@ void LLCurl::Easy::prepRequest(const std::string& url,
setopt(CURLOPT_HEADERFUNCTION, (void*)&curlHeaderCallback);
setopt(CURLOPT_HEADERDATA, (void*)this);
+
// Allow up to five redirects
- if(responder && responder->followRedir())
+ if (responder && responder->followRedir())
{
setopt(CURLOPT_FOLLOWLOCATION, 1);
setopt(CURLOPT_MAXREDIRS, MAX_REDIRECTS);
@@ -556,48 +543,56 @@ void LLCurl::Easy::prepRequest(const std::string& url,
}
////////////////////////////////////////////////////////////////////////////
-
-LLCurl::Multi::Multi()
- : LLThread("Curl Multi"),
- mQueued(0),
+LLCurl::Multi::Multi(F32 idle_time_out)
+ : mQueued(0),
mErrorCount(0),
- mPerformState(PERFORM_STATE_READY)
+ mState(STATE_READY),
+ mDead(FALSE),
+ mMutexp(NULL),
+ mDeletionMutexp(NULL),
+ mEasyMutexp(NULL)
{
- mQuitting = false;
-
- mThreaded = LLCurl::sMultiThreaded && LLThread::currentID() == sMainThreadID;
- if (mThreaded)
- {
- mSignal = new LLCondition;
- }
- else
- {
- mSignal = NULL;
- }
-
- mCurlMultiHandle = curl_multi_init();
+ mCurlMultiHandle = LLCurl::newMultiHandle();
if (!mCurlMultiHandle)
{
llwarns << "curl_multi_init() returned NULL! Easy handles: " << gCurlEasyCount << " Multi handles: " << gCurlMultiCount << llendl;
- mCurlMultiHandle = curl_multi_init();
+ mCurlMultiHandle = LLCurl::newMultiHandle();
}
- llassert_always(mCurlMultiHandle);
- ++gCurlMultiCount;
+ //llassert_always(mCurlMultiHandle);
+
+ if(mCurlMultiHandle)
+ {
+ if(LLCurl::getCurlThread()->getThreaded())
+ {
+ mMutexp = new LLMutex;
+ mDeletionMutexp = new LLMutex;
+ mEasyMutexp = new LLMutex;
+ }
+ LLCurl::getCurlThread()->addMulti(this) ;
+
+ mIdleTimeOut = idle_time_out ;
+ if(mIdleTimeOut < LLCurl::sCurlRequestTimeOut)
+ {
+ mIdleTimeOut = LLCurl::sCurlRequestTimeOut ;
+ }
+
+ ++gCurlMultiCount;
+ }
}
LLCurl::Multi::~Multi()
{
- llassert(isStopped());
+ cleanup() ;
+}
- if (LLCurl::sMultiThreaded)
+void LLCurl::Multi::cleanup()
+{
+ if(!mCurlMultiHandle)
{
- LLCurl::Easy::sMultiMutex->lock();
+ return ; //nothing to clean.
}
- delete mSignal;
- mSignal = NULL;
-
// Clean up active
for(easy_active_list_t::iterator iter = mEasyActiveList.begin();
iter != mEasyActiveList.end(); ++iter)
@@ -613,84 +608,157 @@ LLCurl::Multi::~Multi()
for_each(mEasyFreeList.begin(), mEasyFreeList.end(), DeletePointer());
mEasyFreeList.clear();
- check_curl_multi_code(curl_multi_cleanup(mCurlMultiHandle));
+ check_curl_multi_code(LLCurl::deleteMultiHandle(mCurlMultiHandle));
+ mCurlMultiHandle = NULL ;
+
+ delete mMutexp ;
+ mMutexp = NULL ;
+ delete mDeletionMutexp ;
+ mDeletionMutexp = NULL ;
+ delete mEasyMutexp ;
+ mEasyMutexp = NULL ;
+
+ mQueued = 0 ;
+ mState = STATE_COMPLETED;
+
--gCurlMultiCount;
- if (LLCurl::sMultiThreaded)
+ return ;
+}
+
+void LLCurl::Multi::lock()
+{
+ if(mMutexp)
{
- LLCurl::Easy::sMultiMutex->unlock();
+ mMutexp->lock() ;
}
}
+void LLCurl::Multi::unlock()
+{
+ if(mMutexp)
+ {
+ mMutexp->unlock() ;
+ }
+}
+
+void LLCurl::Multi::markDead()
+{
+ LLMutexLock lock(mDeletionMutexp) ;
+
+ mDead = TRUE ;
+ LLCurl::getCurlThread()->setPriority(mHandle, LLQueuedThread::PRIORITY_URGENT) ;
+}
+
+void LLCurl::Multi::setState(LLCurl::Multi::ePerformState state)
+{
+ lock() ;
+ mState = state ;
+ unlock() ;
+
+ if(mState == STATE_READY)
+ {
+ LLCurl::getCurlThread()->setPriority(mHandle, LLQueuedThread::PRIORITY_NORMAL) ;
+ }
+}
+
+LLCurl::Multi::ePerformState LLCurl::Multi::getState()
+{
+ return mState;
+}
+
+bool LLCurl::Multi::isCompleted()
+{
+ return STATE_COMPLETED == getState() ;
+}
+
+bool LLCurl::Multi::waitToComplete()
+{
+ if(!isValid())
+ {
+ return true ;
+ }
+
+ if(!mMutexp) //not threaded
+ {
+ doPerform() ;
+ return true ;
+ }
+
+ bool completed = (STATE_COMPLETED == mState) ;
+ if(!completed)
+ {
+ LLCurl::getCurlThread()->setPriority(mHandle, LLQueuedThread::PRIORITY_HIGH) ;
+ }
+
+ return completed;
+}
+
CURLMsg* LLCurl::Multi::info_read(S32* msgs_in_queue)
{
+ LLMutexLock lock(mMutexp) ;
+
CURLMsg* curlmsg = curl_multi_info_read(mCurlMultiHandle, msgs_in_queue);
return curlmsg;
}
-void LLCurl::Multi::perform()
+//return true if dead
+bool LLCurl::Multi::doPerform()
{
- if (mThreaded)
- {
- mSignal->lock();
- if (mPerformState == PERFORM_STATE_READY)
- {
- mSignal->signal();
- }
- mSignal->unlock();
- }
- else
- {
- doPerform();
- }
-}
-
-void LLCurl::Multi::run()
-{
- llassert(mThreaded);
+ LLMutexLock lock(mDeletionMutexp) ;
- mSignal->lock();
- while (!mQuitting)
- {
- mSignal->wait();
- mPerformState = PERFORM_STATE_PERFORMING;
- if (!mQuitting)
- {
- LLMutexLock lock(LLCurl::Easy::sMultiMutex);
- doPerform();
- }
- }
- mSignal->unlock();
-}
+ bool dead = mDead ;
-void LLCurl::Multi::doPerform()
-{
- S32 q = 0;
- if (mThreaded)
- mSignal->unlock();
- for (S32 call_count = 0;
- call_count < MULTI_PERFORM_CALL_REPEAT;
- call_count += 1)
+ if(mDead)
{
- CURLMcode code = curl_multi_perform(mCurlMultiHandle, &q);
- if (CURLM_CALL_MULTI_PERFORM != code || q == 0)
- {
- check_curl_multi_code(code);
- break;
- }
-
+ setState(STATE_COMPLETED);
+ mQueued = 0 ;
}
- if (mThreaded)
- mSignal->lock();
- mQueued = q;
- mPerformState = PERFORM_STATE_COMPLETED;
+ else if(getState() != STATE_COMPLETED)
+ {
+ setState(STATE_PERFORMING);
+
+ S32 q = 0;
+ for (S32 call_count = 0;
+ call_count < MULTI_PERFORM_CALL_REPEAT;
+ call_count++)
+ {
+ LLMutexLock lock(mMutexp) ;
+
+ //WARNING: curl_multi_perform will block for many hundreds of milliseconds
+ // NEVER call this from the main thread, and NEVER allow the main thread to
+ // wait on a mutex held by this thread while curl_multi_perform is executing
+ CURLMcode code = curl_multi_perform(mCurlMultiHandle, &q);
+ if (CURLM_CALL_MULTI_PERFORM != code || q == 0)
+ {
+ check_curl_multi_code(code);
+
+ break;
+ }
+ }
+
+ mQueued = q;
+ setState(STATE_COMPLETED) ;
+ mIdleTimer.reset() ;
+ }
+ else if(mIdleTimer.getElapsedTimeF32() > mIdleTimeOut) //idle for too long, remove it.
+ {
+ dead = true ;
+ }
+
+ return dead ;
}
S32 LLCurl::Multi::process()
{
- perform();
+ if(!isValid())
+ {
+ return 0 ;
+ }
- if (mPerformState != PERFORM_STATE_COMPLETED)
+ waitToComplete() ;
+
+ if (getState() != STATE_COMPLETED)
{
return 0;
}
@@ -705,17 +773,26 @@ S32 LLCurl::Multi::process()
if (msg->msg == CURLMSG_DONE)
{
U32 response = 0;
- easy_active_map_t::iterator iter = mEasyActiveMap.find(msg->easy_handle);
- if (iter != mEasyActiveMap.end())
+ Easy* easy = NULL ;
+
+ {
+ LLMutexLock lock(mEasyMutexp) ;
+ easy_active_map_t::iterator iter = mEasyActiveMap.find(msg->easy_handle);
+ if (iter != mEasyActiveMap.end())
+ {
+ easy = iter->second;
+ }
+ }
+
+ if(easy)
{
- Easy* easy = iter->second;
response = easy->report(msg->data.result);
removeEasy(easy);
}
else
{
response = 499;
- // *TODO: change to llwarns
+ //*TODO: change to llwarns
llerrs << "cleaned up curl request completed!" << llendl;
}
if (response >= 400)
@@ -726,25 +803,28 @@ S32 LLCurl::Multi::process()
}
}
- mPerformState = PERFORM_STATE_READY;
+ setState(STATE_READY);
+
return processed;
}
LLCurl::Easy* LLCurl::Multi::allocEasy()
{
- Easy* easy = 0;
+ Easy* easy = 0;
if (mEasyFreeList.empty())
- {
+ {
easy = Easy::getEasy();
}
else
{
+ LLMutexLock lock(mEasyMutexp) ;
easy = *(mEasyFreeList.begin());
mEasyFreeList.erase(easy);
}
if (easy)
{
+ LLMutexLock lock(mEasyMutexp) ;
mEasyActiveList.insert(easy);
mEasyActiveMap[easy->getCurlHandle()] = easy;
}
@@ -753,6 +833,7 @@ LLCurl::Easy* LLCurl::Multi::allocEasy()
bool LLCurl::Multi::addEasy(Easy* easy)
{
+ LLMutexLock lock(mMutexp) ;
CURLMcode mcode = curl_multi_add_handle(mCurlMultiHandle, easy->getCurlHandle());
check_curl_multi_code(mcode);
//if (mcode != CURLM_OK)
@@ -765,25 +846,156 @@ bool LLCurl::Multi::addEasy(Easy* easy)
void LLCurl::Multi::easyFree(Easy* easy)
{
+ if(mEasyMutexp)
+ {
+ mEasyMutexp->lock() ;
+ }
+
mEasyActiveList.erase(easy);
mEasyActiveMap.erase(easy->getCurlHandle());
+
if (mEasyFreeList.size() < EASY_HANDLE_POOL_SIZE)
- {
- easy->resetState();
+ {
mEasyFreeList.insert(easy);
+
+ if(mEasyMutexp)
+ {
+ mEasyMutexp->unlock() ;
+ }
+
+ easy->resetState();
}
else
{
+ if(mEasyMutexp)
+ {
+ mEasyMutexp->unlock() ;
+ }
delete easy;
}
}
void LLCurl::Multi::removeEasy(Easy* easy)
{
- check_curl_multi_code(curl_multi_remove_handle(mCurlMultiHandle, easy->getCurlHandle()));
+ {
+ LLMutexLock lock(mMutexp) ;
+ check_curl_multi_code(curl_multi_remove_handle(mCurlMultiHandle, easy->getCurlHandle()));
+ }
easyFree(easy);
}
+//------------------------------------------------------------
+//LLCurlThread
+LLCurlThread::CurlRequest::CurlRequest(handle_t handle, LLCurl::Multi* multi, LLCurlThread* curl_thread) :
+ LLQueuedThread::QueuedRequest(handle, LLQueuedThread::PRIORITY_NORMAL, FLAG_AUTO_COMPLETE),
+ mMulti(multi),
+ mCurlThread(curl_thread)
+{
+}
+
+LLCurlThread::CurlRequest::~CurlRequest()
+{
+ if(mMulti)
+ {
+ mCurlThread->deleteMulti(mMulti) ;
+ mMulti = NULL ;
+ }
+}
+
+bool LLCurlThread::CurlRequest::processRequest()
+{
+ bool completed = true ;
+ if(mMulti)
+ {
+ completed = mCurlThread->doMultiPerform(mMulti) ;
+
+ if(!completed)
+ {
+ setPriority(LLQueuedThread::PRIORITY_LOW) ;
+ }
+ }
+
+ return completed ;
+}
+
+void LLCurlThread::CurlRequest::finishRequest(bool completed)
+{
+ if(mMulti->isDead())
+ {
+ mCurlThread->deleteMulti(mMulti) ;
+ }
+ else
+ {
+ mCurlThread->cleanupMulti(mMulti) ; //being idle too long, remove the request.
+ }
+
+ mMulti = NULL ;
+}
+
+LLCurlThread::LLCurlThread(bool threaded) :
+ LLQueuedThread("curlthread", threaded)
+{
+}
+
+//virtual
+LLCurlThread::~LLCurlThread()
+{
+}
+
+S32 LLCurlThread::update(F32 max_time_ms)
+{
+ return LLQueuedThread::update(max_time_ms);
+}
+
+void LLCurlThread::addMulti(LLCurl::Multi* multi)
+{
+ multi->mHandle = generateHandle() ;
+
+ CurlRequest* req = new CurlRequest(multi->mHandle, multi, this) ;
+
+ if (!addRequest(req))
+ {
+ llwarns << "curl request added when the thread is quitted" << llendl;
+ }
+}
+
+void LLCurlThread::killMulti(LLCurl::Multi* multi)
+{
+ if(!multi)
+ {
+ return ;
+ }
+
+ if(multi->isValid())
+ {
+ multi->markDead() ;
+ }
+ else
+ {
+ deleteMulti(multi) ;
+ }
+}
+
+//private
+bool LLCurlThread::doMultiPerform(LLCurl::Multi* multi)
+{
+ return multi->doPerform() ;
+}
+
+//private
+void LLCurlThread::deleteMulti(LLCurl::Multi* multi)
+{
+ delete multi ;
+}
+
+//private
+void LLCurlThread::cleanupMulti(LLCurl::Multi* multi)
+{
+ multi->cleanup() ;
+}
+
+//------------------------------------------------------------
+
//static
std::string LLCurl::strerror(CURLcode errorcode)
{
@@ -798,45 +1010,30 @@ LLCurlRequest::LLCurlRequest() :
mActiveMulti(NULL),
mActiveRequestCount(0)
{
- mThreadID = LLThread::currentID();
mProcessing = FALSE;
}
LLCurlRequest::~LLCurlRequest()
{
- llassert_always(mThreadID == LLThread::currentID());
-
//stop all Multi handle background threads
for (curlmulti_set_t::iterator iter = mMultiSet.begin(); iter != mMultiSet.end(); ++iter)
{
- LLCurl::Multi* multi = *iter;
- if (multi->mThreaded)
- multi->mSignal->lock();
- multi->mQuitting = true;
- if (multi->mThreaded)
- {
- while (!multi->isStopped())
- {
- multi->mSignal->signal();
- multi->mSignal->unlock();
- apr_sleep(1000);
- multi->mSignal->lock();
- }
- }
- if (multi->mThreaded)
- multi->mSignal->unlock();
+ LLCurl::getCurlThread()->killMulti(*iter) ;
}
- for_each(mMultiSet.begin(), mMultiSet.end(), DeletePointer());
+ mMultiSet.clear() ;
}
void LLCurlRequest::addMulti()
{
- llassert_always(mThreadID == LLThread::currentID());
LLCurl::Multi* multi = new LLCurl::Multi();
- if (multi->mThreaded)
+ if(!multi->isValid())
{
- multi->start();
+ LLCurl::getCurlThread()->killMulti(multi) ;
+ mActiveMulti = NULL ;
+ mActiveRequestCount = 0 ;
+ return;
}
+
mMultiSet.insert(multi);
mActiveMulti = multi;
mActiveRequestCount = 0;
@@ -850,7 +1047,12 @@ LLCurl::Easy* LLCurlRequest::allocEasy()
{
addMulti();
}
- llassert_always(mActiveMulti);
+ if(!mActiveMulti)
+ {
+ return NULL ;
+ }
+
+ //llassert_always(mActiveMulti);
++mActiveRequestCount;
LLCurl::Easy* easy = mActiveMulti->allocEasy();
return easy;
@@ -952,7 +1154,6 @@ bool LLCurlRequest::post(const std::string& url,
// Note: call once per frame
S32 LLCurlRequest::process()
{
- llassert_always(mThreadID == LLThread::currentID());
S32 res = 0;
mProcessing = TRUE;
@@ -961,28 +1162,25 @@ S32 LLCurlRequest::process()
{
curlmulti_set_t::iterator curiter = iter++;
LLCurl::Multi* multi = *curiter;
+
+ if(!multi->isValid())
+ {
+ if(multi == mActiveMulti)
+ {
+ mActiveMulti = NULL ;
+ mActiveRequestCount = 0 ;
+ }
+ mMultiSet.erase(curiter) ;
+ LLCurl::getCurlThread()->killMulti(multi) ;
+ continue ;
+ }
+
S32 tres = multi->process();
res += tres;
if (multi != mActiveMulti && tres == 0 && multi->mQueued == 0)
{
mMultiSet.erase(curiter);
- if (multi->mThreaded)
- multi->mSignal->lock();
- multi->mQuitting = true;
- if (multi->mThreaded)
- {
- while (!multi->isStopped())
- {
- multi->mSignal->signal();
- multi->mSignal->unlock();
- apr_sleep(1000);
- multi->mSignal->unlock();
- }
- }
- if (multi->mThreaded)
- multi->mSignal->unlock();
-
- delete multi;
+ LLCurl::getCurlThread()->killMulti(multi);
}
}
mProcessing = FALSE;
@@ -991,15 +1189,27 @@ S32 LLCurlRequest::process()
S32 LLCurlRequest::getQueued()
{
- llassert_always(mThreadID == LLThread::currentID());
S32 queued = 0;
for (curlmulti_set_t::iterator iter = mMultiSet.begin();
iter != mMultiSet.end(); )
{
curlmulti_set_t::iterator curiter = iter++;
LLCurl::Multi* multi = *curiter;
+
+ if(!multi->isValid())
+ {
+ if(multi == mActiveMulti)
+ {
+ mActiveMulti = NULL ;
+ mActiveRequestCount = 0 ;
+ }
+ LLCurl::getCurlThread()->killMulti(multi);
+ mMultiSet.erase(curiter) ;
+ continue ;
+ }
+
queued += multi->mQueued;
- if (multi->mPerformState != LLCurl::Multi::PERFORM_STATE_READY)
+ if (multi->getState() != LLCurl::Multi::STATE_READY)
{
++queued;
}
@@ -1016,41 +1226,34 @@ LLCurlEasyRequest::LLCurlEasyRequest()
mResultReturned(false)
{
mMulti = new LLCurl::Multi();
- if (mMulti->mThreaded)
+
+ if(mMulti->isValid())
{
- mMulti->start();
+ mEasy = mMulti->allocEasy();
+ if (mEasy)
+ {
+ mEasy->setErrorBuffer();
+ mEasy->setCA();
+ // Set proxy settings if configured to do so.
+ LLProxy::getInstance()->applyProxySettings(mEasy);
+ }
}
- mEasy = mMulti->allocEasy();
- if (mEasy)
+ else
{
- mEasy->setErrorBuffer();
- mEasy->setCA();
+ LLCurl::getCurlThread()->killMulti(mMulti) ;
+ mEasy = NULL ;
+ mMulti = NULL ;
}
}
LLCurlEasyRequest::~LLCurlEasyRequest()
{
- if (mMulti->mThreaded)
- mMulti->mSignal->lock();
- mMulti->mQuitting = true;
- if (mMulti->mThreaded)
- {
- while (!mMulti->isStopped())
- {
- mMulti->mSignal->signal();
- mMulti->mSignal->unlock();
- apr_sleep(1000);
- mMulti->mSignal->lock();
- }
- }
- if (mMulti->mThreaded)
- mMulti->mSignal->unlock();
- delete mMulti;
+ LLCurl::getCurlThread()->killMulti(mMulti) ;
}
void LLCurlEasyRequest::setopt(CURLoption option, S32 value)
{
- if (mEasy)
+ if (isValid() && mEasy)
{
mEasy->setopt(option, value);
}
@@ -1058,7 +1261,7 @@ void LLCurlEasyRequest::setopt(CURLoption option, S32 value)
void LLCurlEasyRequest::setoptString(CURLoption option, const std::string& value)
{
- if (mEasy)
+ if (isValid() && mEasy)
{
mEasy->setoptString(option, value);
}
@@ -1066,7 +1269,7 @@ void LLCurlEasyRequest::setoptString(CURLoption option, const std::string& value
void LLCurlEasyRequest::setPost(char* postdata, S32 size)
{
- if (mEasy)
+ if (isValid() && mEasy)
{
mEasy->setopt(CURLOPT_POST, 1);
mEasy->setopt(CURLOPT_POSTFIELDS, postdata);
@@ -1076,7 +1279,7 @@ void LLCurlEasyRequest::setPost(char* postdata, S32 size)
void LLCurlEasyRequest::setHeaderCallback(curl_header_callback callback, void* userdata)
{
- if (mEasy)
+ if (isValid() && mEasy)
{
mEasy->setopt(CURLOPT_HEADERFUNCTION, (void*)callback);
mEasy->setopt(CURLOPT_HEADERDATA, userdata); // aka CURLOPT_WRITEHEADER
@@ -1085,7 +1288,7 @@ void LLCurlEasyRequest::setHeaderCallback(curl_header_callback callback, void* u
void LLCurlEasyRequest::setWriteCallback(curl_write_callback callback, void* userdata)
{
- if (mEasy)
+ if (isValid() && mEasy)
{
mEasy->setopt(CURLOPT_WRITEFUNCTION, (void*)callback);
mEasy->setopt(CURLOPT_WRITEDATA, userdata);
@@ -1094,7 +1297,7 @@ void LLCurlEasyRequest::setWriteCallback(curl_write_callback callback, void* use
void LLCurlEasyRequest::setReadCallback(curl_read_callback callback, void* userdata)
{
- if (mEasy)
+ if (isValid() && mEasy)
{
mEasy->setopt(CURLOPT_READFUNCTION, (void*)callback);
mEasy->setopt(CURLOPT_READDATA, userdata);
@@ -1103,7 +1306,7 @@ void LLCurlEasyRequest::setReadCallback(curl_read_callback callback, void* userd
void LLCurlEasyRequest::setSSLCtxCallback(curl_ssl_ctx_callback callback, void* userdata)
{
- if (mEasy)
+ if (isValid() && mEasy)
{
mEasy->setopt(CURLOPT_SSL_CTX_FUNCTION, (void*)callback);
mEasy->setopt(CURLOPT_SSL_CTX_DATA, userdata);
@@ -1112,7 +1315,7 @@ void LLCurlEasyRequest::setSSLCtxCallback(curl_ssl_ctx_callback callback, void*
void LLCurlEasyRequest::slist_append(const char* str)
{
- if (mEasy)
+ if (isValid() && mEasy)
{
mEasy->slist_append(str);
}
@@ -1123,7 +1326,7 @@ void LLCurlEasyRequest::sendRequest(const std::string& url)
llassert_always(!mRequestSent);
mRequestSent = true;
lldebugs << url << llendl;
- if (mEasy)
+ if (isValid() && mEasy)
{
mEasy->setHeaders();
mEasy->setoptString(CURLOPT_URL, url);
@@ -1135,25 +1338,24 @@ void LLCurlEasyRequest::requestComplete()
{
llassert_always(mRequestSent);
mRequestSent = false;
- if (mEasy)
+ if (isValid() && mEasy)
{
mMulti->removeEasy(mEasy);
}
}
-void LLCurlEasyRequest::perform()
-{
- mMulti->perform();
-}
-
// Usage: Call getRestult until it returns false (no more messages)
bool LLCurlEasyRequest::getResult(CURLcode* result, LLCurl::TransferInfo* info)
{
- if (mMulti->mPerformState != LLCurl::Multi::PERFORM_STATE_COMPLETED)
+ if(!isValid())
+ {
+ return false ;
+ }
+ if (!mMulti->isCompleted())
{ //we're busy, try again later
return false;
}
- mMulti->mPerformState = LLCurl::Multi::PERFORM_STATE_READY;
+ mMulti->setState(LLCurl::Multi::STATE_READY) ;
if (!mEasy)
{
@@ -1213,7 +1415,7 @@ CURLMsg* LLCurlEasyRequest::info_read(S32* q, LLCurl::TransferInfo* info)
std::string LLCurlEasyRequest::getErrorString()
{
- return mEasy ? std::string(mEasy->getErrorBuffer()) : std::string();
+ return isValid() && mEasy ? std::string(mEasy->getErrorBuffer()) : std::string();
}
////////////////////////////////////////////////////////////////////////////
@@ -1239,10 +1441,11 @@ unsigned long LLCurl::ssl_thread_id(void)
}
#endif
-void LLCurl::initClass(bool multi_threaded)
+void LLCurl::initClass(F32 curl_reuest_timeout, S32 max_number_handles, bool multi_threaded)
{
- sMainThreadID = LLThread::currentID();
- sMultiThreaded = multi_threaded;
+ sCurlRequestTimeOut = curl_reuest_timeout ; //seconds
+ sMaxHandles = max_number_handles ; //max number of handles, (multi handles and easy handles combined).
+
// Do not change this "unless you are familiar with and mean to control
// internal operations of libcurl"
// - http://curl.haxx.se/libcurl/c/curl_global_init.html
@@ -1250,9 +1453,6 @@ void LLCurl::initClass(bool multi_threaded)
check_curl_code(code);
- Easy::sHandleMutex = new LLMutex;
- Easy::sMultiMutex = new LLMutex;
-
#if SAFE_SSL
S32 mutex_count = CRYPTO_num_locks();
for (S32 i=0; iupdate(1)) //finish all tasks
+ {
+ break ;
+ }
+ }
+ sCurlThread->shutdown() ;
+ delete sCurlThread ;
+ sCurlThread = NULL ;
+
#if SAFE_SSL
CRYPTO_set_locking_callback(NULL);
for_each(sSSLMutex.begin(), sSSLMutex.end(), DeletePointer());
#endif
- delete Easy::sHandleMutex;
- Easy::sHandleMutex = NULL;
- delete Easy::sMultiMutex;
- Easy::sMultiMutex = NULL;
-
for (std::set::iterator iter = Easy::sFreeHandles.begin(); iter != Easy::sFreeHandles.end(); ++iter)
{
CURL* curl = *iter;
- curl_easy_cleanup(curl);
+ LLCurl::deleteEasyHandle(curl);
}
Easy::sFreeHandles.clear();
+ delete Easy::sHandleMutexp ;
+ Easy::sHandleMutexp = NULL ;
+
+ delete sHandleMutexp ;
+ sHandleMutexp = NULL ;
+
llassert(Easy::sActiveHandles.empty());
}
+//static
+CURLM* LLCurl::newMultiHandle()
+{
+ LLMutexLock lock(sHandleMutexp) ;
+
+ if(sTotalHandles + 1 > sMaxHandles)
+ {
+ llwarns << "no more handles available." << llendl ;
+ return NULL ; //failed
+ }
+ sTotalHandles++;
+
+ CURLM* ret = curl_multi_init() ;
+ if(!ret)
+ {
+ llwarns << "curl_multi_init failed." << llendl ;
+ }
+
+ return ret ;
+}
+
+//static
+CURLMcode LLCurl::deleteMultiHandle(CURLM* handle)
+{
+ if(handle)
+ {
+ LLMutexLock lock(sHandleMutexp) ;
+ sTotalHandles-- ;
+ return curl_multi_cleanup(handle) ;
+ }
+ return CURLM_OK ;
+}
+
+//static
+CURL* LLCurl::newEasyHandle()
+{
+ LLMutexLock lock(sHandleMutexp) ;
+
+ if(sTotalHandles + 1 > sMaxHandles)
+ {
+ llwarns << "no more handles available." << llendl ;
+ return NULL ; //failed
+ }
+ sTotalHandles++;
+
+ CURL* ret = curl_easy_init() ;
+ if(!ret)
+ {
+ llwarns << "curl_easy_init failed." << llendl ;
+ }
+
+ return ret ;
+}
+
+//static
+void LLCurl::deleteEasyHandle(CURL* handle)
+{
+ if(handle)
+ {
+ LLMutexLock lock(sHandleMutexp) ;
+ curl_easy_cleanup(handle) ;
+ sTotalHandles-- ;
+ }
+}
+
const unsigned int LLCurl::MAX_REDIRECTS = 5;
// Provide access to LLCurl free functions outside of llcurl.cpp without polluting the global namespace.
diff --git a/indra/llmessage/llcurl.h b/indra/llmessage/llcurl.h
index f91abecd5..fd664c0fa 100644
--- a/indra/llmessage/llcurl.h
+++ b/indra/llmessage/llcurl.h
@@ -4,31 +4,25 @@
* @date 2006-10-15
* @brief A wrapper around libcurl.
*
- * $LicenseInfo:firstyear=2006&license=viewergpl$
- *
- * Copyright (c) 2006-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2006&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
@@ -48,8 +42,11 @@
#include "lliopipe.h"
#include "llsd.h"
#include "llthread.h"
+#include "llqueuedthread.h"
+#include "llframetimer.h"
class LLMutex;
+class LLCurlThread;
// For whatever reason, this is not typedef'd in curl.h
typedef size_t (*curl_header_callback)(void *ptr, size_t size, size_t nmemb, void *stream);
@@ -62,8 +59,6 @@ public:
class Easy;
class Multi;
- static bool sMultiThreaded;
-
struct TransferInfo
{
TransferInfo() : mSizeDownload(0.0), mTotalTime(0.0), mSpeedDownload(0.0) {}
@@ -130,6 +125,7 @@ public:
{
return false;
}
+
public: /* but not really -- don't touch this */
U32 mReferenceCount;
@@ -167,7 +163,7 @@ public:
/**
* @ brief Initialize LLCurl class
*/
- static void initClass(bool multi_threaded = false);
+ static void initClass(F32 curl_reuest_timeout = 120.f, S32 max_number_handles = 256, bool multi_threaded = false);
/**
* @ brief Cleanup LLCurl class
@@ -186,10 +182,25 @@ public:
static void ssl_locking_callback(int mode, int type, const char *file, int line);
static unsigned long ssl_thread_id(void);
+ static LLCurlThread* getCurlThread() { return sCurlThread ;}
+
+ static CURLM* newMultiHandle() ;
+ static CURLMcode deleteMultiHandle(CURLM* handle) ;
+ static CURL* newEasyHandle() ;
+ static void deleteEasyHandle(CURL* handle) ;
+
private:
static std::string sCAPath;
static std::string sCAFile;
static const unsigned int MAX_REDIRECTS;
+ static LLCurlThread* sCurlThread;
+
+ static LLMutex* sHandleMutexp ;
+ static S32 sTotalHandles ;
+ static S32 sMaxHandles;
+public:
+ static bool sNotQuitting;
+ static F32 sCurlRequestTimeOut;
};
class LLCurl::Easy
@@ -198,7 +209,7 @@ class LLCurl::Easy
private:
Easy();
-
+
public:
static Easy* getEasy();
~Easy();
@@ -207,41 +218,41 @@ public:
void setErrorBuffer();
void setCA();
-
+
void setopt(CURLoption option, S32 value);
// These assume the setter does not free value!
void setopt(CURLoption option, void* value);
void setopt(CURLoption option, char* value);
- // Copies the string so that it is gauranteed to stick around
+ // Copies the string so that it is guaranteed to stick around
void setoptString(CURLoption option, const std::string& value);
-
+
void slist_append(const char* str);
void setHeaders();
-
+
U32 report(CURLcode);
void getTransferInfo(LLCurl::TransferInfo* info);
- void prepRequest(const std::string& url, const std::vector& headers, ResponderPtr, S32 time_out = 0, bool post = false);
-
+ void prepRequest(const std::string& url, const std::vector& headers, LLCurl::ResponderPtr, S32 time_out = 0, bool post = false);
+
const char* getErrorBuffer();
std::stringstream& getInput() { return mInput; }
std::stringstream& getHeaderOutput() { return mHeaderOutput; }
LLIOPipe::buffer_ptr_t& getOutput() { return mOutput; }
const LLChannelDescriptors& getChannels() { return mChannels; }
-
+
void resetState();
static CURL* allocEasyHandle();
static void releaseEasyHandle(CURL* handle);
-private:
+private:
friend class LLCurl;
friend class LLCurl::Multi;
CURL* mCurlEasyHandle;
struct curl_slist* mHeaders;
-
+
std::stringstream mRequest;
LLChannelDescriptors mChannels;
LLIOPipe::buffer_ptr_t mOutput;
@@ -251,65 +262,121 @@ private:
// Note: char*'s not strings since we pass pointers to curl
std::vector mStrings;
-
- ResponderPtr mResponder;
+
+ LLCurl::ResponderPtr mResponder;
static std::set sFreeHandles;
static std::set sActiveHandles;
- static LLMutex* sHandleMutex;
- static LLMutex* sMultiMutex;
+ static LLMutex* sHandleMutexp ;
};
-class LLCurl::Multi : public LLThread
+class LLCurl::Multi
{
LOG_CLASS(Multi);
+
+ friend class LLCurlThread ;
+
+private:
+ ~Multi();
+
+ void markDead() ;
+ bool doPerform();
+
public:
typedef enum
{
- PERFORM_STATE_READY=0,
- PERFORM_STATE_PERFORMING=1,
- PERFORM_STATE_COMPLETED=2
+ STATE_READY=0,
+ STATE_PERFORMING=1,
+ STATE_COMPLETED=2
} ePerformState;
- Multi();
- ~Multi();
+ Multi(F32 idle_time_out = 0.f);
- Easy* allocEasy();
- bool addEasy(Easy* easy);
+ LLCurl::Easy* allocEasy();
+ bool addEasy(LLCurl::Easy* easy);
+ void removeEasy(LLCurl::Easy* easy);
- void removeEasy(Easy* easy);
+ void lock() ;
+ void unlock() ;
+
+ void setState(ePerformState state) ;
+ ePerformState getState() ;
+
+ bool isCompleted() ;
+ bool isValid() {return mCurlMultiHandle != NULL ;}
+ bool isDead() {return mDead;}
+
+ bool waitToComplete() ;
S32 process();
- void perform();
- void doPerform();
- virtual void run();
-
CURLMsg* info_read(S32* msgs_in_queue);
S32 mQueued;
S32 mErrorCount;
- S32 mPerformState;
-
- LLCondition* mSignal;
- bool mQuitting;
- bool mThreaded;
-
private:
- void easyFree(Easy*);
+ void easyFree(LLCurl::Easy*);
+ void cleanup() ;
CURLM* mCurlMultiHandle;
- typedef std::set easy_active_list_t;
+ typedef std::set easy_active_list_t;
easy_active_list_t mEasyActiveList;
- typedef std::map easy_active_map_t;
+ typedef std::map easy_active_map_t;
easy_active_map_t mEasyActiveMap;
- typedef std::set easy_free_list_t;
+ typedef std::set easy_free_list_t;
easy_free_list_t mEasyFreeList;
+
+ LLQueuedThread::handle_t mHandle ;
+ ePerformState mState;
+
+ BOOL mDead ;
+ LLMutex* mMutexp ;
+ LLMutex* mDeletionMutexp ;
+ LLMutex* mEasyMutexp ;
+ LLFrameTimer mIdleTimer ;
+ F32 mIdleTimeOut;
};
+class LLCurlThread : public LLQueuedThread
+{
+public:
+
+ class CurlRequest : public LLQueuedThread::QueuedRequest
+ {
+ protected:
+ virtual ~CurlRequest(); // use deleteRequest()
+
+ public:
+ CurlRequest(handle_t handle, LLCurl::Multi* multi, LLCurlThread* curl_thread);
+
+ /*virtual*/ bool processRequest();
+ /*virtual*/ void finishRequest(bool completed);
+
+ private:
+ // input
+ LLCurl::Multi* mMulti;
+ LLCurlThread* mCurlThread;
+ };
+ friend class CurlRequest;
+
+public:
+ LLCurlThread(bool threaded = true) ;
+ virtual ~LLCurlThread() ;
+
+ S32 update(F32 max_time_ms);
+
+ void addMulti(LLCurl::Multi* multi) ;
+ void killMulti(LLCurl::Multi* multi) ;
+
+private:
+ bool doMultiPerform(LLCurl::Multi* multi) ;
+ void deleteMulti(LLCurl::Multi* multi) ;
+ void cleanupMulti(LLCurl::Multi* multi) ;
+} ;
+
namespace boost
{
void intrusive_ptr_add_ref(LLCurl::Responder* p);
@@ -344,7 +411,6 @@ private:
LLCurl::Multi* mActiveMulti;
S32 mActiveRequestCount;
BOOL mProcessing;
- U32 mThreadID; // debug
};
class LLCurlEasyRequest
@@ -362,9 +428,11 @@ public:
void slist_append(const char* str);
void sendRequest(const std::string& url);
void requestComplete();
- void perform();
bool getResult(CURLcode* result, LLCurl::TransferInfo* info = NULL);
std::string getErrorString();
+ bool isCompleted() {return mMulti->isCompleted() ;}
+ bool wait() { return mMulti->waitToComplete(); }
+ bool isValid() {return mMulti && mMulti->isValid(); }
LLCurl::Easy* getEasy() const { return mEasy; }
diff --git a/indra/llmessage/lldatapacker.cpp b/indra/llmessage/lldatapacker.cpp
index a1b5c7908..3385d7c2e 100644
--- a/indra/llmessage/lldatapacker.cpp
+++ b/indra/llmessage/lldatapacker.cpp
@@ -2,31 +2,25 @@
* @file lldatapacker.cpp
* @brief Data packer implementation.
*
- * $LicenseInfo:firstyear=2006&license=viewergpl$
- *
- * Copyright (c) 2006-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2006&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/lldatapacker.h b/indra/llmessage/lldatapacker.h
index 1aadf3d75..b0a638c16 100644
--- a/indra/llmessage/lldatapacker.h
+++ b/indra/llmessage/lldatapacker.h
@@ -2,31 +2,25 @@
* @file lldatapacker.h
* @brief Data packer declaration for tightly storing binary data.
*
- * $LicenseInfo:firstyear=2002&license=viewergpl$
- *
- * Copyright (c) 2002-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2002&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
@@ -179,12 +173,10 @@ public:
void freeBuffer() { delete [] mBufferp; mBufferp = mCurBufferp = NULL; mBufferSize = 0; mWriteEnabled = FALSE; }
void assignBuffer(U8 *bufferp, S32 size)
{
- //No no no no no! This breaks the paradigm of callers handling buffer allocation/deallocation
- //Also, buffers can be on stack! Calling delete[] on such a buffer would be VERY bad.
- /*if(mBufferp && mBufferp != bufferp)
+ if(mBufferp && mBufferp != bufferp)
{
freeBuffer() ;
- }*/
+ }
mBufferp = bufferp;
mCurBufferp = bufferp;
mBufferSize = size;
diff --git a/indra/llmessage/lldbstrings.h b/indra/llmessage/lldbstrings.h
index cdee40051..9bf1b3eda 100644
--- a/indra/llmessage/lldbstrings.h
+++ b/indra/llmessage/lldbstrings.h
@@ -2,31 +2,25 @@
* @file lldbstrings.h
* @brief Database String Lengths.
*
- * $LicenseInfo:firstyear=2002&license=viewergpl$
- *
- * Copyright (c) 2002-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2002&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/lldispatcher.cpp b/indra/llmessage/lldispatcher.cpp
index c5ee86992..b2dc414a6 100644
--- a/indra/llmessage/lldispatcher.cpp
+++ b/indra/llmessage/lldispatcher.cpp
@@ -2,31 +2,25 @@
* @file lldispatcher.cpp
* @brief Implementation of the dispatcher object.
*
- * $LicenseInfo:firstyear=2004&license=viewergpl$
- *
- * Copyright (c) 2004-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2004&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
@@ -37,7 +31,6 @@
#include
#include "llstl.h"
#include "message.h"
-#include //VS2010
///----------------------------------------------------------------------------
/// Class lldispatcher
diff --git a/indra/llmessage/lldispatcher.h b/indra/llmessage/lldispatcher.h
index 520b74074..9d1751f58 100644
--- a/indra/llmessage/lldispatcher.h
+++ b/indra/llmessage/lldispatcher.h
@@ -2,31 +2,25 @@
* @file lldispatcher.h
* @brief LLDispatcher class header file.
*
- * $LicenseInfo:firstyear=2004&license=viewergpl$
- *
- * Copyright (c) 2004-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2004&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/lleventflags.h b/indra/llmessage/lleventflags.h
index 965d978a5..75d79071b 100644
--- a/indra/llmessage/lleventflags.h
+++ b/indra/llmessage/lleventflags.h
@@ -2,31 +2,25 @@
* @file lleventflags.h
* @brief Flags for events.
*
- * $LicenseInfo:firstyear=2004&license=viewergpl$
- *
- * Copyright (c) 2004-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2004&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/llfiltersd2xmlrpc.cpp b/indra/llmessage/llfiltersd2xmlrpc.cpp
index 6d13e8f73..dbb8c4e28 100644
--- a/indra/llmessage/llfiltersd2xmlrpc.cpp
+++ b/indra/llmessage/llfiltersd2xmlrpc.cpp
@@ -3,31 +3,25 @@
* @author Phoenix
* @date 2005-04-26
*
- * $LicenseInfo:firstyear=2005&license=viewergpl$
- *
- * Copyright (c) 2005-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2005&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
@@ -86,13 +80,12 @@
#include "llbuffer.h"
#include "llbufferstream.h"
+#include "llfasttimer.h"
#include "llmemorystream.h"
#include "llsd.h"
#include "llsdserialize.h"
#include "lluuid.h"
-#include "llfasttimer.h"
-
// spammy mode
//#define LL_SPEW_STREAM_OUT_DEBUGGING 1
diff --git a/indra/llmessage/llfiltersd2xmlrpc.h b/indra/llmessage/llfiltersd2xmlrpc.h
index f907bbd7c..0c9a0dc95 100644
--- a/indra/llmessage/llfiltersd2xmlrpc.h
+++ b/indra/llmessage/llfiltersd2xmlrpc.h
@@ -3,31 +3,25 @@
* @author Phoenix
* @date 2005-04-26
*
- * $LicenseInfo:firstyear=2005&license=viewergpl$
- *
- * Copyright (c) 2005-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2005&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/llfollowcamparams.h b/indra/llmessage/llfollowcamparams.h
index 7dd8d56fc..25208031d 100644
--- a/indra/llmessage/llfollowcamparams.h
+++ b/indra/llmessage/llfollowcamparams.h
@@ -2,31 +2,25 @@
* @file llfollowcamparams.h
* @brief Follow camera parameters.
*
- * $LicenseInfo:firstyear=2005&license=viewergpl$
- *
- * Copyright (c) 2005-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2005&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/llhost.cpp b/indra/llmessage/llhost.cpp
index 238cf3e12..61a84de8e 100644
--- a/indra/llmessage/llhost.cpp
+++ b/indra/llmessage/llhost.cpp
@@ -2,31 +2,25 @@
* @file llhost.cpp
* @brief Encapsulates an IP address and a port.
*
- * $LicenseInfo:firstyear=2000&license=viewergpl$
- *
- * Copyright (c) 2000-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2000&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/llhost.h b/indra/llmessage/llhost.h
index ac35980e7..0cf52a415 100644
--- a/indra/llmessage/llhost.h
+++ b/indra/llmessage/llhost.h
@@ -3,31 +3,25 @@
* @brief a LLHost uniquely defines a host (Simulator, Proxy or other)
* across the network
*
- * $LicenseInfo:firstyear=2000&license=viewergpl$
- *
- * Copyright (c) 2000-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2000&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/llhttpassetstorage.cpp b/indra/llmessage/llhttpassetstorage.cpp
index 66a6c00d1..612d76596 100644
--- a/indra/llmessage/llhttpassetstorage.cpp
+++ b/indra/llmessage/llhttpassetstorage.cpp
@@ -3,31 +3,25 @@
* @brief Subclass capable of loading asset data to/from an external
* source. Currently, a web server accessed via curl
*
- * $LicenseInfo:firstyear=2003&license=viewergpl$
- *
- * Copyright (c) 2003-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2003&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
@@ -39,6 +33,7 @@
#include "indra_constants.h"
#include "message.h"
+#include "llproxy.h"
#include "llvfile.h"
#include "llvfs.h"
@@ -126,7 +121,7 @@ LLHTTPAssetRequest::LLHTTPAssetRequest(LLHTTPAssetStorage *asp,
const std::string& url,
CURLM *curl_multi)
: LLAssetRequest(uuid, type),
- mZInitialized(false)
+ mZInitialized(false)
{
memset(&mZStream, 0, sizeof(mZStream)); // we'll initialize this later, but for now zero the whole C-style struct to avoid debug/coverity noise
mAssetStoragep = asp;
@@ -237,7 +232,12 @@ LLSD LLHTTPAssetRequest::getFullDetails() const
void LLHTTPAssetRequest::setupCurlHandle()
{
// *NOTE: Similar code exists in mapserver/llcurlutil.cpp JC
- mCurlHandle = curl_easy_init();
+ mCurlHandle = LLCurl::newEasyHandle();
+ llassert_always(mCurlHandle != NULL) ;
+
+ // Apply proxy settings if configured to do so
+ LLProxy::getInstance()->applyProxySettings(mCurlHandle);
+
curl_easy_setopt(mCurlHandle, CURLOPT_NOSIGNAL, 1);
curl_easy_setopt(mCurlHandle, CURLOPT_NOPROGRESS, 1);
curl_easy_setopt(mCurlHandle, CURLOPT_URL, mURLBuffer.c_str());
@@ -279,7 +279,7 @@ void LLHTTPAssetRequest::setupCurlHandle()
void LLHTTPAssetRequest::cleanupCurlHandle()
{
- curl_easy_cleanup(mCurlHandle);
+ LLCurl::deleteEasyHandle(mCurlHandle);
if (mAssetStoragep)
{
// Terminating a request. Thus upload or download is no longer pending.
@@ -430,12 +430,13 @@ void LLHTTPAssetStorage::_init(const std::string& web_host, const std::string& l
// curl_global_init moved to LLCurl::initClass()
- mCurlMultiHandle = curl_multi_init();
+ mCurlMultiHandle = LLCurl::newMultiHandle() ;
+ llassert_always(mCurlMultiHandle != NULL) ;
}
LLHTTPAssetStorage::~LLHTTPAssetStorage()
{
- curl_multi_cleanup(mCurlMultiHandle);
+ LLCurl::deleteMultiHandle(mCurlMultiHandle);
mCurlMultiHandle = NULL;
// curl_global_cleanup moved to LLCurl::initClass()
diff --git a/indra/llmessage/llhttpassetstorage.h b/indra/llmessage/llhttpassetstorage.h
index 3e85e898e..f743ccf0a 100644
--- a/indra/llmessage/llhttpassetstorage.h
+++ b/indra/llmessage/llhttpassetstorage.h
@@ -2,31 +2,25 @@
* @file llhttpassetstorage.h
* @brief Class for loading asset data to/from an external source over http.
*
- * $LicenseInfo:firstyear=2003&license=viewergpl$
- *
- * Copyright (c) 2003-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2003&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/llhttpclient.cpp b/indra/llmessage/llhttpclient.cpp
index 4d0a076e7..037688906 100644
--- a/indra/llmessage/llhttpclient.cpp
+++ b/indra/llmessage/llhttpclient.cpp
@@ -2,36 +2,30 @@
* @file llhttpclient.cpp
* @brief Implementation of classes for making HTTP requests.
*
- * $LicenseInfo:firstyear=2006&license=viewergpl$
- *
- * Copyright (c) 2006-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2006&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
#include "linden_common.h"
-
+#include
#include "llhttpclient.h"
#include "llassetstorage.h"
@@ -46,7 +40,10 @@
#include "message.h"
#include
+
const F32 HTTP_REQUEST_EXPIRY_SECS = 60.0f;
+LLURLRequest::SSLCertVerifyCallback LLHTTPClient::mCertVerifyCallback = NULL;
+
////////////////////////////////////////////////////////////////////////////
// Responder class moved to LLCurl
@@ -163,7 +160,7 @@ namespace
fstream.seekg(0, std::ios::end);
U32 fileSize = fstream.tellg();
fstream.seekg(0, std::ios::beg);
- std::vector fileBuffer(fileSize); //Mem leak fix'd
+ std::vector fileBuffer(fileSize);
fstream.read(&fileBuffer[0], fileSize);
ostream.write(&fileBuffer[0], fileSize);
fstream.close();
@@ -192,9 +189,11 @@ namespace
LLVFile vfile(gVFS, mUUID, mAssetType, LLVFile::READ);
S32 fileSize = vfile.getSize();
- std::vector fileBuffer(fileSize);
- vfile.read(&fileBuffer[0], fileSize);
- ostream.write((char*)&fileBuffer[0], fileSize);
+ U8* fileBuffer;
+ fileBuffer = new U8 [fileSize];
+ vfile.read(fileBuffer, fileSize);
+ ostream.write((char*)fileBuffer, fileSize);
+ delete [] fileBuffer;
eos = true;
return STATUS_DONE;
}
@@ -207,13 +206,19 @@ namespace
LLPumpIO* theClientPump = NULL;
}
+void LLHTTPClient::setCertVerifyCallback(LLURLRequest::SSLCertVerifyCallback callback)
+{
+ LLHTTPClient::mCertVerifyCallback = callback;
+}
+
static void request(
const std::string& url,
LLURLRequest::ERequestAction method,
Injector* body_injector,
LLCurl::ResponderPtr responder,
const F32 timeout = HTTP_REQUEST_EXPIRY_SECS,
- const LLSD& headers = LLSD())
+ const LLSD& headers = LLSD()
+ )
{
if (!LLHTTPClient::hasPump())
{
@@ -223,11 +228,26 @@ static void request(
LLPumpIO::chain_t chain;
LLURLRequest* req = new LLURLRequest(method, url);
- req->checkRootCertificate(true);
+ if(!req->isValid())//failed
+ {
+ delete req ;
+ return ;
+ }
+
+ req->setSSLVerifyCallback(LLHTTPClient::getCertVerifyCallback(), (void *)req);
+
+
+ lldebugs << LLURLRequest::actionAsVerb(method) << " " << url << " "
+ << headers << llendl;
+
+ // Insert custom headers if the caller sent any
+ if (headers.isMap())
+ {
+ if (headers.has("Cookie"))
+ {
+ req->allowCookies();
+ }
- // Insert custom headers is the caller sent any
- if (headers.isMap())
- {
LLSD::map_const_iterator iter = headers.beginMap();
LLSD::map_const_iterator end = headers.endMap();
@@ -409,11 +429,16 @@ static LLSD blocking_request(
{
lldebugs << "blockingRequest of " << url << llendl;
char curl_error_buffer[CURL_ERROR_SIZE] = "\0";
- CURL* curlp = curl_easy_init();
+ CURL* curlp = LLCurl::newEasyHandle();
+ llassert_always(curlp != NULL) ;
+
LLHTTPBuffer http_buffer;
std::string body_str;
// other request method checks root cert first, we skip?
+
+ // Apply configured proxy settings
+ LLProxy::getInstance()->applyProxySettings(curlp);
// * Set curl handle options
curl_easy_setopt(curlp, CURLOPT_NOSIGNAL, 1); // don't use SIGALRM for timeouts
@@ -422,7 +447,7 @@ static LLSD blocking_request(
curl_easy_setopt(curlp, CURLOPT_WRITEDATA, &http_buffer);
curl_easy_setopt(curlp, CURLOPT_URL, url.c_str());
curl_easy_setopt(curlp, CURLOPT_ERRORBUFFER, curl_error_buffer);
-
+
// * Setup headers (don't forget to free them after the call!)
curl_slist* headers_list = NULL;
if (headers.isMap())
@@ -500,7 +525,7 @@ static LLSD blocking_request(
}
// * Cleanup
- curl_easy_cleanup(curlp);
+ LLCurl::deleteEasyHandle(curlp);
return response;
}
@@ -600,7 +625,8 @@ bool LLHTTPClient::hasPump()
return theClientPump != NULL;
}
-LLPumpIO &LLHTTPClient::getPump()
+//static
+LLPumpIO& LLHTTPClient::getPump()
{
return *theClientPump;
}
diff --git a/indra/llmessage/llhttpclient.h b/indra/llmessage/llhttpclient.h
index 44c685e38..b8ee9389a 100644
--- a/indra/llmessage/llhttpclient.h
+++ b/indra/llmessage/llhttpclient.h
@@ -2,31 +2,25 @@
* @file llhttpclient.h
* @brief Declaration of classes for making HTTP client requests.
*
- * $LicenseInfo:firstyear=2006&license=viewergpl$
- *
- * Copyright (c) 2006-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2006&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
@@ -40,7 +34,8 @@
#include
#include
-
+#include
+#include "llurlrequest.h"
#include "llassettype.h"
#include "llcurl.h"
#include "lliopipe.h"
@@ -61,6 +56,7 @@ public:
typedef LLCurl::Responder Responder;
typedef LLCurl::ResponderPtr ResponderPtr;
+
/** @name non-blocking API */
//@{
static void head(
@@ -158,6 +154,12 @@ public:
///< for testing
static LLPumpIO &getPump();
///< Hippo special
+
+ static void setCertVerifyCallback(LLURLRequest::SSLCertVerifyCallback callback);
+ static LLURLRequest::SSLCertVerifyCallback getCertVerifyCallback() { return mCertVerifyCallback; }
+
+protected:
+ static LLURLRequest::SSLCertVerifyCallback mCertVerifyCallback;
};
#endif // LL_LLHTTPCLIENT_H
diff --git a/indra/llmessage/llhttpclientadapter.cpp b/indra/llmessage/llhttpclientadapter.cpp
index b6988224c..f5d7a9abb 100644
--- a/indra/llmessage/llhttpclientadapter.cpp
+++ b/indra/llmessage/llhttpclientadapter.cpp
@@ -1,32 +1,26 @@
/**
- * @file
+ * @file llhttpclientadapter.cpp
* @brief
*
- * $LicenseInfo:firstyear=2009&license=viewergpl$
- *
- * Copyright (c) 2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2009&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/llhttpclientadapter.h b/indra/llmessage/llhttpclientadapter.h
index 7f76390d0..aae6426a5 100644
--- a/indra/llmessage/llhttpclientadapter.h
+++ b/indra/llmessage/llhttpclientadapter.h
@@ -1,32 +1,26 @@
/**
- * @file
+ * @file llhttpclientadepter.h
* @brief
*
- * $LicenseInfo:firstyear=2008&license=viewergpl$
- *
- * Copyright (c) 2008-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2008&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/llhttpclientinterface.h b/indra/llmessage/llhttpclientinterface.h
index 42a8e5cd0..12a3857a6 100644
--- a/indra/llmessage/llhttpclientinterface.h
+++ b/indra/llmessage/llhttpclientinterface.h
@@ -1,32 +1,26 @@
/**
- * @file
+ * @file llhttpclientinterface.h
* @brief
*
- * $LicenseInfo:firstyear=2008&license=viewergpl$
- *
- * Copyright (c) 2008-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2008&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/llhttpnode.cpp b/indra/llmessage/llhttpnode.cpp
index 440b91fcf..5c2f73ecc 100644
--- a/indra/llmessage/llhttpnode.cpp
+++ b/indra/llmessage/llhttpnode.cpp
@@ -2,31 +2,25 @@
* @file llhttpnode.cpp
* @brief Implementation of classes for generic HTTP/LSL/REST handling.
*
- * $LicenseInfo:firstyear=2006&license=viewergpl$
- *
- * Copyright (c) 2006-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2006&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/llhttpnode.h b/indra/llmessage/llhttpnode.h
index 2c0fe8655..148647ddd 100644
--- a/indra/llmessage/llhttpnode.h
+++ b/indra/llmessage/llhttpnode.h
@@ -2,31 +2,25 @@
* @file llhttpnode.h
* @brief Declaration of classes for generic HTTP/LSL/REST handling.
*
- * $LicenseInfo:firstyear=2006&license=viewergpl$
- *
- * Copyright (c) 2006-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2006&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
@@ -293,6 +287,7 @@ public:
void result(const LLSD& result);
void extendedResult(S32 code, const std::string& body, const LLSD& headers);
+
void status(S32 code, const std::string& message);
void print(std::ostream& out) const;
@@ -304,7 +299,7 @@ protected:
~LLSimpleResponse();
private:
- LLSimpleResponse() : mCode(0) {} // Must be accessed through LLPointer.
+ LLSimpleResponse() : mCode(0) {} // Must be accessed through LLPointer.
};
std::ostream& operator<<(std::ostream& out, const LLSimpleResponse& resp);
diff --git a/indra/llmessage/llhttpnodeadapter.h b/indra/llmessage/llhttpnodeadapter.h
index 7c3e9d81d..22984c447 100644
--- a/indra/llmessage/llhttpnodeadapter.h
+++ b/indra/llmessage/llhttpnodeadapter.h
@@ -2,31 +2,25 @@
* @file llhttpnodeadapter.h
* @brief Declaration of llhttpnode adapter classes
*
- * $LicenseInfo:firstyear=2009&license=viewergpl$
- *
- * Copyright (c) 2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2009&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/llhttpsender.cpp b/indra/llmessage/llhttpsender.cpp
index 0acd72833..c48cbc42a 100644
--- a/indra/llmessage/llhttpsender.cpp
+++ b/indra/llmessage/llhttpsender.cpp
@@ -2,31 +2,25 @@
* @file llhttpsender.cpp
* @brief Abstracts details of sending messages via HTTP.
*
- * $LicenseInfo:firstyear=2007&license=viewergpl$
- *
- * Copyright (c) 2007-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2007&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/llhttpsender.h b/indra/llmessage/llhttpsender.h
index b6d8a3a4c..88920db24 100644
--- a/indra/llmessage/llhttpsender.h
+++ b/indra/llmessage/llhttpsender.h
@@ -2,31 +2,25 @@
* @file llhttpsender.h
* @brief Abstracts details of sending messages via HTTP.
*
- * $LicenseInfo:firstyear=2007&license=viewergpl$
- *
- * Copyright (c) 2007-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2007&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/llinstantmessage.cpp b/indra/llmessage/llinstantmessage.cpp
index 57e8a2254..d68e0c423 100644
--- a/indra/llmessage/llinstantmessage.cpp
+++ b/indra/llmessage/llinstantmessage.cpp
@@ -4,31 +4,25 @@
* @date 2005-08-29
* @brief Constants and functions used in IM.
*
- * $LicenseInfo:firstyear=2005&license=viewergpl$
- *
- * Copyright (c) 2005-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2005&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/llinstantmessage.h b/indra/llmessage/llinstantmessage.h
index dfc193301..e0dae376b 100644
--- a/indra/llmessage/llinstantmessage.h
+++ b/indra/llmessage/llinstantmessage.h
@@ -2,31 +2,25 @@
* @file llinstantmessage.h
* @brief Constants and declarations used by instant messages.
*
- * $LicenseInfo:firstyear=2002&license=viewergpl$
- *
- * Copyright (c) 2002-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2002&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
@@ -75,6 +69,7 @@ enum EInstantMessage
// Group vote
// Name is name of person who called vote.
// ID is vote ID used for internal tracking
+ // TODO: _DEPRECATED suffix as part of vote removal - DEV-24856
IM_GROUP_VOTE = 7,
// Group message
diff --git a/indra/llmessage/llinvite.h b/indra/llmessage/llinvite.h
index 7bafccb8e..e5d573c1e 100644
--- a/indra/llmessage/llinvite.h
+++ b/indra/llmessage/llinvite.h
@@ -2,31 +2,25 @@
* @file llinvite.h
* @brief Constants used for inviting users to join groups.
*
- * $LicenseInfo:firstyear=2002&license=viewergpl$
- *
- * Copyright (c) 2002-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2002&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/lliobuffer.cpp b/indra/llmessage/lliobuffer.cpp
index 223a23949..ed00e230a 100644
--- a/indra/llmessage/lliobuffer.cpp
+++ b/indra/llmessage/lliobuffer.cpp
@@ -4,31 +4,25 @@
* @date 2005-05-04
* @brief Definition of buffer based implementations of IO Pipes.
*
- * $LicenseInfo:firstyear=2005&license=viewergpl$
- *
- * Copyright (c) 2005-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2005&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/lliobuffer.h b/indra/llmessage/lliobuffer.h
index 16bef15d7..334984894 100644
--- a/indra/llmessage/lliobuffer.h
+++ b/indra/llmessage/lliobuffer.h
@@ -4,31 +4,25 @@
* @date 2005-05-04
* @brief Declaration of buffers for use in IO Pipes.
*
- * $LicenseInfo:firstyear=2005&license=viewergpl$
- *
- * Copyright (c) 2005-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2005&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/lliohttpserver.cpp b/indra/llmessage/lliohttpserver.cpp
index aff3a7adf..e64667836 100644
--- a/indra/llmessage/lliohttpserver.cpp
+++ b/indra/llmessage/lliohttpserver.cpp
@@ -33,6 +33,7 @@
#include "llapr.h"
#include "llbuffer.h"
#include "llbufferstream.h"
+#include "llfasttimer.h"
#include "llhttpnode.h"
#include "lliopipe.h"
#include "lliosocket.h"
@@ -45,7 +46,6 @@
#include "llstat.h"
#include "llstl.h"
#include "lltimer.h"
-#include "llfasttimer.h"
#include
@@ -819,6 +819,8 @@ LLIOPipe::EStatus LLHTTPResponder::process_impl(
// Copy everything after mLast read to the out.
LLBufferArray::segment_iterator_t seg_iter;
+
+ buffer->lock();
seg_iter = buffer->splitAfter(mLastRead);
if(seg_iter != buffer->endSegment())
{
@@ -839,7 +841,7 @@ LLIOPipe::EStatus LLHTTPResponder::process_impl(
}
#endif
}
-
+ buffer->unlock();
//
// *FIX: get rid of extra bytes off the end
//
@@ -966,9 +968,7 @@ private:
// static
LLHTTPNode& LLIOHTTPServer::create(LLPumpIO& pump, U16 port)
{
- LLSocket::ptr_t socket = LLSocket::create(
- LLSocket::STREAM_TCP,
- port);
+ LLSocket::ptr_t socket = LLSocket::create(LLSocket::STREAM_TCP, port);
if(!socket)
{
llerrs << "Unable to initialize socket" << llendl;
diff --git a/indra/llmessage/lliohttpserver.h b/indra/llmessage/lliohttpserver.h
index 66e763444..2294e4b8a 100644
--- a/indra/llmessage/lliohttpserver.h
+++ b/indra/llmessage/lliohttpserver.h
@@ -3,31 +3,25 @@
* @brief Declaration of function for creating an HTTP wire server
* @see LLIOServerSocket, LLPumpIO
*
- * $LicenseInfo:firstyear=2005&license=viewergpl$
- *
- * Copyright (c) 2005-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2005&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/lliopipe.cpp b/indra/llmessage/lliopipe.cpp
index af9737d67..8f827f7a3 100644
--- a/indra/llmessage/lliopipe.cpp
+++ b/indra/llmessage/lliopipe.cpp
@@ -4,31 +4,25 @@
* @date 2004-11-19
* @brief Implementation of the LLIOPipe class
*
- * $LicenseInfo:firstyear=2004&license=viewergpl$
- *
- * Copyright (c) 2004-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2004&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
@@ -81,6 +75,12 @@ LLIOPipe::~LLIOPipe()
//lldebugs << "destroying LLIOPipe" << llendl;
}
+//virtual
+bool LLIOPipe::isValid()
+{
+ return true ;
+}
+
// static
std::string LLIOPipe::lookupStatusString(EStatus status)
{
diff --git a/indra/llmessage/lliopipe.h b/indra/llmessage/lliopipe.h
index 8c5f15111..cbd17b5a3 100644
--- a/indra/llmessage/lliopipe.h
+++ b/indra/llmessage/lliopipe.h
@@ -4,31 +4,25 @@
* @date 2004-11-18
* @brief Declaration of base IO class
*
- * $LicenseInfo:firstyear=2004&license=viewergpl$
- *
- * Copyright (c) 2004-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2004&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
@@ -237,6 +231,8 @@ public:
*/
virtual ~LLIOPipe();
+ virtual bool isValid() ;
+
protected:
/**
* @brief Base Constructor.
diff --git a/indra/llmessage/lliosocket.cpp b/indra/llmessage/lliosocket.cpp
index eb69e15ed..cfc60f163 100644
--- a/indra/llmessage/lliosocket.cpp
+++ b/indra/llmessage/lliosocket.cpp
@@ -4,31 +4,25 @@
* @date 2005-07-31
* @brief Sockets declarations for use with the io pipes
*
- * $LicenseInfo:firstyear=2005&license=viewergpl$
- *
- * Copyright (c) 2005-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2005&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
@@ -38,11 +32,11 @@
#include "llapr.h"
#include "llbuffer.h"
+#include "llfasttimer.h"
#include "llhost.h"
#include "llmemtype.h"
#include "llpumpio.h"
#include "llthread.h"
-#include "llfasttimer.h"
//
// constants
@@ -114,21 +108,11 @@ LLSocket::ptr_t LLSocket::create(EType type, U16 port)
if(STREAM_TCP == type)
{
- status = apr_socket_create(
- &rv->mSocket,
- APR_INET,
- SOCK_STREAM,
- APR_PROTO_TCP,
- rv->mPool());
+ status = apr_socket_create(&rv->mSocket, APR_INET, SOCK_STREAM, APR_PROTO_TCP, rv->mPool());
}
else if(DATAGRAM_UDP == type)
{
- status = apr_socket_create(
- &rv->mSocket,
- APR_INET,
- SOCK_DGRAM,
- APR_PROTO_UDP,
- rv->mPool());
+ status = apr_socket_create(&rv->mSocket, APR_INET, SOCK_DGRAM, APR_PROTO_UDP, rv->mPool());
}
else
{
@@ -216,6 +200,7 @@ LLSocket::ptr_t LLSocket::create(apr_status_t& status, LLSocket::ptr_t& listen_s
return rv;
}
+
bool LLSocket::blockingConnect(const LLHost& host)
{
if(!mSocket) return false;
@@ -244,7 +229,6 @@ LLSocket::LLSocket() :
mPool(LLThread::tldata().mRootPool),
mPort(PORT_INVALID)
{
- LLMemType m1(LLMemType::MTYPE_IO_TCP);
}
LLSocket::~LLSocket()
@@ -445,6 +429,7 @@ LLIOPipe::EStatus LLIOSocketWriter::process_impl(
// efficient - not only because writev() is better, but also
// because we won't have to do as much work to find the start
// address.
+ buffer->lock();
LLBufferArray::segment_iterator_t it;
LLBufferArray::segment_iterator_t end = buffer->endSegment();
LLSegment segment;
@@ -524,6 +509,8 @@ LLIOPipe::EStatus LLIOSocketWriter::process_impl(
}
}
+ buffer->unlock();
+
PUMP_DEBUG;
if(done && eos)
{
diff --git a/indra/llmessage/lliosocket.h b/indra/llmessage/lliosocket.h
index bff12e271..45c098bff 100644
--- a/indra/llmessage/lliosocket.h
+++ b/indra/llmessage/lliosocket.h
@@ -4,31 +4,25 @@
* @date 2005-07-31
* @brief Declaration of files used for handling sockets and associated pipes
*
- * $LicenseInfo:firstyear=2005&license=viewergpl$
- *
- * Copyright (c) 2005-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2005&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
@@ -138,13 +132,6 @@ public:
*/
apr_socket_t* getSocket() const { return mSocket; }
-protected:
- /**
- * @brief Protected constructor since should only make sockets
- * with one of the two create() calls.
- */
- LLSocket(void);
-
/**
* @brief Set default socket options, with SO_NONBLOCK = 0 and a timeout in us.
* @param timeout Number of microseconds to wait on this socket. Any
@@ -157,6 +144,13 @@ protected:
*/
void setNonBlocking();
+protected:
+ /**
+ * @brief Protected constructor since should only make sockets
+ * with one of the two create() calls.
+ */
+ LLSocket(void);
+
public:
/**
* @brief Do not call this directly.
diff --git a/indra/llmessage/llioutil.cpp b/indra/llmessage/llioutil.cpp
index 25d5759a2..63dbf7b07 100644
--- a/indra/llmessage/llioutil.cpp
+++ b/indra/llmessage/llioutil.cpp
@@ -4,37 +4,31 @@
* @date 2005-10-05
* @brief Utility functionality for the io pipes.
*
- * $LicenseInfo:firstyear=2005&license=viewergpl$
- *
- * Copyright (c) 2005-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2005&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
#include "linden_common.h"
-#include "llioutil.h"
#include "llfasttimer.h"
+#include "llioutil.h"
/**
* LLIOFlush
diff --git a/indra/llmessage/llioutil.h b/indra/llmessage/llioutil.h
index 5bc674a3d..e8d245f53 100644
--- a/indra/llmessage/llioutil.h
+++ b/indra/llmessage/llioutil.h
@@ -4,31 +4,25 @@
* @date 2005-10-05
* @brief Helper classes for dealing with IOPipes
*
- * $LicenseInfo:firstyear=2005&license=viewergpl$
- *
- * Copyright (c) 2005-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2005&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/llloginflags.h b/indra/llmessage/llloginflags.h
index 6f119e74a..45833fc91 100644
--- a/indra/llmessage/llloginflags.h
+++ b/indra/llmessage/llloginflags.h
@@ -2,31 +2,25 @@
* @file llloginflags.h
* @brief Login flag constants.
*
- * $LicenseInfo:firstyear=2003&license=viewergpl$
- *
- * Copyright (c) 2003-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2003&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/llmail.cpp b/indra/llmessage/llmail.cpp
index f2ae70db9..8a898ab1b 100644
--- a/indra/llmessage/llmail.cpp
+++ b/indra/llmessage/llmail.cpp
@@ -2,31 +2,25 @@
* @file llmail.cpp
* @brief smtp helper functions.
*
- * $LicenseInfo:firstyear=2001&license=viewergpl$
- *
- * Copyright (c) 2001-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2001&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/llmail.h b/indra/llmessage/llmail.h
index 7026d93b3..0a5c53208 100644
--- a/indra/llmessage/llmail.h
+++ b/indra/llmessage/llmail.h
@@ -2,31 +2,25 @@
* @file llmail.h
* @brief smtp helper functions.
*
- * $LicenseInfo:firstyear=2001&license=viewergpl$
- *
- * Copyright (c) 2001-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2001&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/llmessagebuilder.cpp b/indra/llmessage/llmessagebuilder.cpp
index def9f47fb..e2ed968a5 100644
--- a/indra/llmessage/llmessagebuilder.cpp
+++ b/indra/llmessage/llmessagebuilder.cpp
@@ -2,31 +2,25 @@
* @file llmessagebuilder.cpp
* @brief LLMessageBuilder class implementation
*
- * $LicenseInfo:firstyear=2006&license=viewergpl$
- *
- * Copyright (c) 2006-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2006&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/llmessagebuilder.h b/indra/llmessage/llmessagebuilder.h
index 6fa218d26..bf5be929f 100644
--- a/indra/llmessage/llmessagebuilder.h
+++ b/indra/llmessage/llmessagebuilder.h
@@ -2,31 +2,25 @@
* @file llmessagebuilder.h
* @brief Declaration of LLMessageBuilder class.
*
- * $LicenseInfo:firstyear=2007&license=viewergpl$
- *
- * Copyright (c) 2007-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2007&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/llmessageconfig.cpp b/indra/llmessage/llmessageconfig.cpp
index dff0a3844..539efc65f 100644
--- a/indra/llmessage/llmessageconfig.cpp
+++ b/indra/llmessage/llmessageconfig.cpp
@@ -2,31 +2,25 @@
* @file llmessageconfig.cpp
* @brief Live file handling for messaging
*
- * $LicenseInfo:firstyear=2000&license=viewergpl$
- *
- * Copyright (c) 2000-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2000&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/llmessageconfig.h b/indra/llmessage/llmessageconfig.h
index e8b5164e3..1b39c386c 100644
--- a/indra/llmessage/llmessageconfig.h
+++ b/indra/llmessage/llmessageconfig.h
@@ -2,31 +2,25 @@
* @file llmessageconfig.h
* @brief Live file handling for messaging
*
- * $LicenseInfo:firstyear=2000&license=viewergpl$
- *
- * Copyright (c) 2000-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2000&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/llmessagelog.cpp b/indra/llmessage/llmessagelog.cpp
deleted file mode 100644
index 965b8c0de..000000000
--- a/indra/llmessage/llmessagelog.cpp
+++ /dev/null
@@ -1,54 +0,0 @@
-//
-#include "llmessagelog.h"
-
-LLMessageLogEntry::LLMessageLogEntry(EType type, LLHost from_host, LLHost to_host, U8* data, S32 data_size)
-: mType(type),
- mFromHost(from_host),
- mToHost(to_host),
- mDataSize(data_size)
-{
- if(data)
- {
- mData.resize(data_size);
- memcpy(&(mData[0]), data, data_size);
- }
-}
-LLMessageLogEntry::LLMessageLogEntry(EType type, LLHost from_host, LLHost to_host, std::vector data, S32 data_size)
-: mType(type),
- mFromHost(from_host),
- mToHost(to_host),
- mDataSize(data_size),
- mData(data)
-{
-}
-LLMessageLogEntry::~LLMessageLogEntry()
-{
-}
-U32 LLMessageLog::sMaxSize = 4096; // testzone fixme todo boom
-std::deque LLMessageLog::sDeque;
-void (*(LLMessageLog::sCallback))(LLMessageLogEntry);
-void LLMessageLog::setMaxSize(U32 size)
-{
- sMaxSize = size;
- while(sDeque.size() > sMaxSize)
- sDeque.pop_front();
-}
-void LLMessageLog::setCallback(void (*callback)(LLMessageLogEntry))
-{
- sCallback = callback;
-}
-void LLMessageLog::log(LLHost from_host, LLHost to_host, U8* data, S32 data_size)
-{
- LLMessageLogEntry entry = LLMessageLogEntry(LLMessageLogEntry::TEMPLATE, from_host, to_host, data, data_size);
- if(!entry.mDataSize || !entry.mData.size()) return;
- if(sCallback) sCallback(entry);
- if(!sMaxSize) return;
- sDeque.push_back(entry);
- if(sDeque.size() > sMaxSize)
- sDeque.pop_front();
-}
-std::deque LLMessageLog::getDeque()
-{
- return sDeque;
-}
-//
diff --git a/indra/llmessage/llmessagelog.h b/indra/llmessage/llmessagelog.h
deleted file mode 100644
index 5046d808b..000000000
--- a/indra/llmessage/llmessagelog.h
+++ /dev/null
@@ -1,41 +0,0 @@
-//
-#ifndef LL_LLMESSAGELOG_H
-#define LL_LLMESSAGELOG_H
-#include "stdtypes.h"
-#include "llhost.h"
-#include
-#include
-
-class LLMessageSystem;
-class LLMessageLogEntry
-{
-public:
- enum EType
- {
- TEMPLATE,
- HTTP_REQUEST,
- HTTP_RESPONSE
- };
- LLMessageLogEntry(EType type, LLHost from_host, LLHost to_host, U8* data, S32 data_size);
- LLMessageLogEntry(EType type, LLHost from_host, LLHost to_host, std::vector data, S32 data_size);
- ~LLMessageLogEntry();
- EType mType;
- LLHost mFromHost;
- LLHost mToHost;
- S32 mDataSize;
- std::vector mData;
-};
-class LLMessageLog
-{
-public:
- static void setMaxSize(U32 size);
- static void setCallback(void (*callback)(LLMessageLogEntry));
- static void log(LLHost from_host, LLHost to_host, U8* data, S32 data_size);
- static std::deque getDeque();
-private:
- static U32 sMaxSize;
- static void (*sCallback)(LLMessageLogEntry);
- static std::deque sDeque;
-};
-#endif
-//
diff --git a/indra/llmessage/llmessagereader.cpp b/indra/llmessage/llmessagereader.cpp
index 623717262..1d1bee7f5 100644
--- a/indra/llmessage/llmessagereader.cpp
+++ b/indra/llmessage/llmessagereader.cpp
@@ -2,31 +2,25 @@
* @file llmessagereader.cpp
* @brief LLMessageReader class implementation
*
- * $LicenseInfo:firstyear=2007&license=viewergpl$
- *
- * Copyright (c) 2007-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2007&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/llmessagereader.h b/indra/llmessage/llmessagereader.h
index 6edc2f34a..3b77a6bfe 100644
--- a/indra/llmessage/llmessagereader.h
+++ b/indra/llmessage/llmessagereader.h
@@ -2,31 +2,25 @@
* @file llmessagereader.h
* @brief Declaration of LLMessageReader class.
*
- * $LicenseInfo:firstyear=2007&license=viewergpl$
- *
- * Copyright (c) 2007-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2007&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/llmessagesenderinterface.h b/indra/llmessage/llmessagesenderinterface.h
index 119eb1d7f..ac0f9f7ed 100644
--- a/indra/llmessage/llmessagesenderinterface.h
+++ b/indra/llmessage/llmessagesenderinterface.h
@@ -1,32 +1,26 @@
/**
- * @file
+ * @file llmessagesenderinterface.h
* @brief
*
- * $LicenseInfo:firstyear=2008&license=viewergpl$
- *
- * Copyright (c) 2008-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2008&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/llmessagetemplate.cpp b/indra/llmessage/llmessagetemplate.cpp
index 7f3a97ffa..d64123ad6 100644
--- a/indra/llmessage/llmessagetemplate.cpp
+++ b/indra/llmessage/llmessagetemplate.cpp
@@ -2,31 +2,25 @@
* @file llmessagetemplate.cpp
* @brief Implementation of message template classes.
*
- * $LicenseInfo:firstyear=2007&license=viewergpl$
- *
- * Copyright (c) 2007-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2007&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/llmessagetemplate.h b/indra/llmessage/llmessagetemplate.h
index 8abc0aaab..16d825d33 100644
--- a/indra/llmessage/llmessagetemplate.h
+++ b/indra/llmessage/llmessagetemplate.h
@@ -2,31 +2,25 @@
* @file llmessagetemplate.h
* @brief Declaration of the message template classes.
*
- * $LicenseInfo:firstyear=2007&license=viewergpl$
- *
- * Copyright (c) 2007-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2007&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/llmessagetemplateparser.cpp b/indra/llmessage/llmessagetemplateparser.cpp
index 2ddbf3e0d..b0f19df47 100644
--- a/indra/llmessage/llmessagetemplateparser.cpp
+++ b/indra/llmessage/llmessagetemplateparser.cpp
@@ -2,31 +2,25 @@
* @file llmessagetemplateparser.cpp
* @brief LLMessageTemplateParser implementation
*
- * $LicenseInfo:firstyear=2007&license=viewergpl$
- *
- * Copyright (c) 2007-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2007&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/llmessagetemplateparser.h b/indra/llmessage/llmessagetemplateparser.h
index af661319c..372a2b292 100644
--- a/indra/llmessage/llmessagetemplateparser.h
+++ b/indra/llmessage/llmessagetemplateparser.h
@@ -2,31 +2,25 @@
* @file llmessagetemplateparser.h
* @brief Classes to parse message template.
*
- * $LicenseInfo:firstyear=2000&license=viewergpl$
- *
- * Copyright (c) 2000-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2000&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/llmessagethrottle.cpp b/indra/llmessage/llmessagethrottle.cpp
index 8fec4b321..579d6d718 100644
--- a/indra/llmessage/llmessagethrottle.cpp
+++ b/indra/llmessage/llmessagethrottle.cpp
@@ -2,31 +2,25 @@
* @file llmessagethrottle.cpp
* @brief LLMessageThrottle class used for throttling messages.
*
- * $LicenseInfo:firstyear=2004&license=viewergpl$
- *
- * Copyright (c) 2004-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2004&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/llmessagethrottle.h b/indra/llmessage/llmessagethrottle.h
index b8a5de0fb..4ea84f712 100644
--- a/indra/llmessage/llmessagethrottle.h
+++ b/indra/llmessage/llmessagethrottle.h
@@ -2,31 +2,25 @@
* @file llmessagethrottle.h
* @brief LLMessageThrottle class used for throttling messages.
*
- * $LicenseInfo:firstyear=2004&license=viewergpl$
- *
- * Copyright (c) 2004-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2004&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/llmime.cpp b/indra/llmessage/llmime.cpp
index fa623b65c..943a73492 100644
--- a/indra/llmessage/llmime.cpp
+++ b/indra/llmessage/llmime.cpp
@@ -4,31 +4,25 @@
* @date 2006-12-20
* @brief Implementation of mime tools.
*
- * $LicenseInfo:firstyear=2006&license=viewergpl$
- *
- * Copyright (c) 2006-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2006&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/llmime.h b/indra/llmessage/llmime.h
index 29211a914..e6617fb50 100644
--- a/indra/llmessage/llmime.h
+++ b/indra/llmessage/llmime.h
@@ -4,31 +4,25 @@
* @date 2006-12-20
* @brief Declaration of mime tools.
*
- * $LicenseInfo:firstyear=2006&license=viewergpl$
- *
- * Copyright (c) 2006-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2006&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/llmsgvariabletype.h b/indra/llmessage/llmsgvariabletype.h
index b3b3589a5..c4de822b4 100644
--- a/indra/llmessage/llmsgvariabletype.h
+++ b/indra/llmessage/llmsgvariabletype.h
@@ -2,31 +2,25 @@
* @file llmsgvariabletype.h
* @brief Declaration of the EMsgVariableType enumeration.
*
- * $LicenseInfo:firstyear=2007&license=viewergpl$
- *
- * Copyright (c) 2007-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2007&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/llnamevalue.cpp b/indra/llmessage/llnamevalue.cpp
index 43429b0ab..d79940302 100644
--- a/indra/llmessage/llnamevalue.cpp
+++ b/indra/llmessage/llnamevalue.cpp
@@ -2,31 +2,25 @@
* @file llnamevalue.cpp
* @brief class for defining name value pairs.
*
- * $LicenseInfo:firstyear=2001&license=viewergpl$
- *
- * Copyright (c) 2001-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2001&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/llnamevalue.h b/indra/llmessage/llnamevalue.h
index ad69d3a8e..273de475f 100644
--- a/indra/llmessage/llnamevalue.h
+++ b/indra/llmessage/llnamevalue.h
@@ -2,31 +2,25 @@
* @file llnamevalue.h
* @brief class for defining name value pairs.
*
- * $LicenseInfo:firstyear=2001&license=viewergpl$
- *
- * Copyright (c) 2001-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2001&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/llnullcipher.cpp b/indra/llmessage/llnullcipher.cpp
index 30279bc23..b32e7e6fa 100644
--- a/indra/llmessage/llnullcipher.cpp
+++ b/indra/llmessage/llnullcipher.cpp
@@ -2,31 +2,25 @@
* @file llnullcipher.cpp
* @brief Implementation of a cipher which does not encrypt.
*
- * $LicenseInfo:firstyear=2003&license=viewergpl$
- *
- * Copyright (c) 2003-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2003&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/llnullcipher.h b/indra/llmessage/llnullcipher.h
index 6e877209d..a9f9a1ce0 100644
--- a/indra/llmessage/llnullcipher.h
+++ b/indra/llmessage/llnullcipher.h
@@ -1,31 +1,25 @@
/**
* @file llnullcipher.h
*
- * $LicenseInfo:firstyear=2003&license=viewergpl$
- *
- * Copyright (c) 2003-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2003&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/llpacketack.cpp b/indra/llmessage/llpacketack.cpp
index f7de44cd8..f08d3404e 100644
--- a/indra/llmessage/llpacketack.cpp
+++ b/indra/llmessage/llpacketack.cpp
@@ -4,31 +4,25 @@
* @date 2007-05-09
* @brief Implementation of the LLReliablePacket.
*
- * $LicenseInfo:firstyear=2007&license=viewergpl$
- *
- * Copyright (c) 2007-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2007&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/llpacketack.h b/indra/llmessage/llpacketack.h
index 6f78dda09..2ef3c48e4 100644
--- a/indra/llmessage/llpacketack.h
+++ b/indra/llmessage/llpacketack.h
@@ -2,31 +2,25 @@
* @file llpacketack.h
* @brief Reliable UDP helpers for the message system.
*
- * $LicenseInfo:firstyear=2001&license=viewergpl$
- *
- * Copyright (c) 2001-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2001&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/llpacketbuffer.cpp b/indra/llmessage/llpacketbuffer.cpp
index 9eb0b7ab0..e69631eb3 100644
--- a/indra/llmessage/llpacketbuffer.cpp
+++ b/indra/llmessage/llpacketbuffer.cpp
@@ -2,31 +2,25 @@
* @file llpacketbuffer.cpp
* @brief implementation of LLPacketBuffer class for a packet.
*
- * $LicenseInfo:firstyear=2001&license=viewergpl$
- *
- * Copyright (c) 2001-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2001&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
@@ -49,7 +43,7 @@ LLPacketBuffer::LLPacketBuffer(const LLHost &host, const char *datap, const S32
{
llerrs << "Sending packet > " << NET_BUFFER_SIZE << " of size " << size << llendl;
}
- else // we previously relied on llerrs being fatal to not get here...
+ else
{
if (datap != NULL)
{
diff --git a/indra/llmessage/llpacketbuffer.h b/indra/llmessage/llpacketbuffer.h
index bbcbdf28b..14b6f9d5d 100644
--- a/indra/llmessage/llpacketbuffer.h
+++ b/indra/llmessage/llpacketbuffer.h
@@ -3,31 +3,25 @@
* @brief definition of LLPacketBuffer class for implementing a
* resend, drop, or delay in packet transmissions.
*
- * $LicenseInfo:firstyear=2001&license=viewergpl$
- *
- * Copyright (c) 2001-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2001&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/llpacketring.cpp b/indra/llmessage/llpacketring.cpp
index abafaa511..fc6e9c519 100644
--- a/indra/llmessage/llpacketring.cpp
+++ b/indra/llmessage/llpacketring.cpp
@@ -2,31 +2,25 @@
* @file llpacketring.cpp
* @brief implementation of LLPacketRing class for a packet.
*
- * $LicenseInfo:firstyear=2001&license=viewergpl$
- *
- * Copyright (c) 2001-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2001&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
@@ -34,8 +28,6 @@
#include "llpacketring.h"
-#include "llsocks5.h"
-
#if LL_WINDOWS
#include
#else
@@ -46,15 +38,11 @@
// linden library includes
#include "llerror.h"
#include "lltimer.h"
+#include "llproxy.h"
#include "llrand.h"
#include "message.h"
#include "timing.h"
#include "u64.h"
-//
-#include "llmessagelog.h"
-
-//
-
///////////////////////////////////////////////////////////
LLPacketRing::LLPacketRing () :
@@ -237,9 +225,8 @@ S32 LLPacketRing::receivePacket (S32 socket, char *datap)
else
{
// no delay, pull straight from net
- if (LLSocks::isEnabled())
+ if (LLProxy::isSOCKSProxyEnabled())
{
- const U8 SOCKS_HEADER_SIZE = 10;
U8 buffer[NET_BUFFER_SIZE + SOCKS_HEADER_SIZE];
packet_size = receive_packet(socket, static_cast(static_cast(buffer)));
@@ -260,7 +247,7 @@ S32 LLPacketRing::receivePacket (S32 socket, char *datap)
}
else
{
- packet_size = receive_packet(socket, datap);
+ packet_size = receive_packet(socket, datap);
mLastSender = ::get_sender();
}
@@ -286,11 +273,7 @@ S32 LLPacketRing::receivePacket (S32 socket, char *datap)
BOOL LLPacketRing::sendPacket(int h_socket, char * send_buffer, S32 buf_size, LLHost host)
{
- //
- LLMessageLog::log(LLHost(16777343, gMessageSystem->getListenPort()), host, (U8*)send_buffer, buf_size);
- //
BOOL status = TRUE;
-
if (!mUseOutThrottle)
{
return sendPacketImpl(h_socket, send_buffer, buf_size, host );
@@ -365,12 +348,11 @@ BOOL LLPacketRing::sendPacket(int h_socket, char * send_buffer, S32 buf_size, LL
BOOL LLPacketRing::sendPacketImpl(int h_socket, const char * send_buffer, S32 buf_size, LLHost host)
{
- if (!LLSocks::isEnabled())
+ if (!LLProxy::isSOCKSProxyEnabled())
{
return send_packet(h_socket, send_buffer, buf_size, host.getAddress(), host.getPort());
}
- const U8 SOCKS_HEADER_SIZE = 10;
char headered_send_buffer[NET_BUFFER_SIZE + SOCKS_HEADER_SIZE];
proxywrap_t *socks_header = static_cast(static_cast(&headered_send_buffer));
@@ -385,6 +367,6 @@ BOOL LLPacketRing::sendPacketImpl(int h_socket, const char * send_buffer, S32 bu
return send_packet( h_socket,
headered_send_buffer,
buf_size + SOCKS_HEADER_SIZE,
- LLSocks::getInstance()->getUDPPproxy().getAddress(),
- LLSocks::getInstance()->getUDPPproxy().getPort());
+ LLProxy::getInstance()->getUDPProxy().getAddress(),
+ LLProxy::getInstance()->getUDPProxy().getPort());
}
diff --git a/indra/llmessage/llpacketring.h b/indra/llmessage/llpacketring.h
index c0f386d96..b214271e7 100644
--- a/indra/llmessage/llpacketring.h
+++ b/indra/llmessage/llpacketring.h
@@ -3,31 +3,25 @@
* @brief definition of LLPacketRing class for implementing a resend,
* drop, or delay in packet transmissions
*
- * $LicenseInfo:firstyear=2001&license=viewergpl$
- *
- * Copyright (c) 2001-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2001&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
@@ -38,6 +32,7 @@
#include "llhost.h"
#include "llpacketbuffer.h"
+#include "llproxy.h"
#include "llthrottle.h"
#include "net.h"
diff --git a/indra/llmessage/llpartdata.cpp b/indra/llmessage/llpartdata.cpp
index 9376cde7b..26cafa025 100644
--- a/indra/llmessage/llpartdata.cpp
+++ b/indra/llmessage/llpartdata.cpp
@@ -2,31 +2,25 @@
* @file llpartdata.cpp
* @brief Particle system data packing
*
- * $LicenseInfo:firstyear=2003&license=viewergpl$
- *
- * Copyright (c) 2003-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2003&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/llpartdata.h b/indra/llmessage/llpartdata.h
index 6dcb3111a..a4ef058b3 100644
--- a/indra/llmessage/llpartdata.h
+++ b/indra/llmessage/llpartdata.h
@@ -2,31 +2,25 @@
* @file llpartdata.h
* @brief Particle system data packing
*
- * $LicenseInfo:firstyear=2003&license=viewergpl$
- *
- * Copyright (c) 2003-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2003&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/llpumpio.cpp b/indra/llmessage/llpumpio.cpp
index 48e581c64..498914d33 100644
--- a/indra/llmessage/llpumpio.cpp
+++ b/indra/llmessage/llpumpio.cpp
@@ -4,31 +4,25 @@
* @date 2004-11-21
* @brief Implementation of the i/o pump and related functions.
*
- * $LicenseInfo:firstyear=2004&license=viewergpl$
- *
- * Copyright (c) 2004-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2004&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
@@ -40,12 +34,11 @@
#include "apr_poll.h"
#include "llapr.h"
+#include "llfasttimer.h"
#include "llmemtype.h"
#include "llstl.h"
#include "llstat.h"
#include "llthread.h"
-#include "llfasttimer.h"
-#include //VS2010
// These should not be enabled in production, but they can be
// intensely useful during development for finding certain kinds of
@@ -191,10 +184,21 @@ LLPumpIO::LLPumpIO(void) :
LLPumpIO::~LLPumpIO()
{
LLMemType m1(LLMemType::MTYPE_IO_PUMP);
- cleanup();
+#if LL_THREADS_APR
+ if (mChainsMutex) apr_thread_mutex_destroy(mChainsMutex);
+ if (mCallbackMutex) apr_thread_mutex_destroy(mCallbackMutex);
+#endif
+ mChainsMutex = NULL;
+ mCallbackMutex = NULL;
+ if(mPollset)
+ {
+// lldebugs << "cleaning up pollset" << llendl;
+ apr_pollset_destroy(mPollset);
+ mPollset = NULL;
+ }
}
-bool LLPumpIO::addChain(const chain_t& chain, F32 timeout)
+bool LLPumpIO::addChain(const chain_t& chain, F32 timeout, bool has_curl_request)
{
LLMemType m1(LLMemType::MTYPE_IO_PUMP);
if(chain.empty()) return false;
@@ -203,8 +207,10 @@ bool LLPumpIO::addChain(const chain_t& chain, F32 timeout)
LLScopedLock lock(mChainsMutex);
#endif
LLChainInfo info;
+ info.mHasCurlRequest = has_curl_request;
info.setTimeoutSeconds(timeout);
info.mData = LLIOPipe::buffer_ptr_t(new LLBufferArray);
+ info.mData->setThreaded(has_curl_request);
LLLinkInfo link;
#if LL_DEBUG_PIPE_TYPE_IN_PUMP
lldebugs << "LLPumpIO::addChain() " << chain[0] << " '"
@@ -438,6 +444,15 @@ void LLPumpIO::pump()
static LLFastTimer::DeclareTimer FTM_PUMP_IO("Pump IO");
+LLPumpIO::current_chain_t LLPumpIO::removeRunningChain(LLPumpIO::current_chain_t& run_chain)
+{
+ std::for_each(
+ (*run_chain).mDescriptors.begin(),
+ (*run_chain).mDescriptors.end(),
+ ll_delete_apr_pollset_fd_client_data());
+ return mRunningChains.erase(run_chain);
+}
+
//timeout is in microseconds
void LLPumpIO::pump(const S32& poll_timeout)
{
@@ -583,10 +598,16 @@ void LLPumpIO::pump(const S32& poll_timeout)
// << (*run_chain).mChainLinks[0].mPipe
// << " because we reached the end." << llendl;
#endif
- run_chain = mRunningChains.erase(run_chain);
+ run_chain = removeRunningChain(run_chain);
continue;
}
}
+ else if(isChainExpired(*run_chain))
+ {
+ run_chain = removeRunningChain(run_chain);
+ continue;
+ }
+
PUMP_DEBUG;
if((*run_chain).mLock)
{
@@ -694,11 +715,7 @@ void LLPumpIO::pump(const S32& poll_timeout)
PUMP_DEBUG;
// This chain is done. Clean up any allocated memory and
// erase the chain info.
- std::for_each(
- (*run_chain).mDescriptors.begin(),
- (*run_chain).mDescriptors.end(),
- ll_delete_apr_pollset_fd_client_data());
- run_chain = mRunningChains.erase(run_chain);
+ run_chain = removeRunningChain(run_chain);
// *NOTE: may not always need to rebuild the pollset.
mRebuildPollset = true;
@@ -833,22 +850,6 @@ void LLPumpIO::initialize(void)
apr_thread_mutex_create(&mCallbackMutex, APR_THREAD_MUTEX_UNNESTED, mPool());
#endif
}
-void LLPumpIO::cleanup()
-{
- LLMemType m1(LLMemType::MTYPE_IO_PUMP);
-#if LL_THREADS_APR
- if (mChainsMutex) apr_thread_mutex_destroy(mChainsMutex);
- if (mCallbackMutex) apr_thread_mutex_destroy(mCallbackMutex);
-#endif
- mChainsMutex = NULL;
- mCallbackMutex = NULL;
- if(mPollset)
- {
-// lldebugs << "cleaning up pollset" << llendl;
- apr_pollset_destroy(mPollset);
- mPollset = NULL;
- }
-}
void LLPumpIO::rebuildPollset()
{
@@ -1083,6 +1084,24 @@ void LLPumpIO::processChain(LLChainInfo& chain)
PUMP_DEBUG;
}
+bool LLPumpIO::isChainExpired(LLChainInfo& chain)
+{
+ if(!chain.mHasCurlRequest)
+ {
+ return false ;
+ }
+
+ for(links_t::iterator iter = chain.mChainLinks.begin(); iter != chain.mChainLinks.end(); ++iter)
+ {
+ if(!(*iter).mPipe->isValid())
+ {
+ return true ;
+ }
+ }
+
+ return false ;
+}
+
bool LLPumpIO::handleChainError(
LLChainInfo& chain,
LLIOPipe::EStatus error)
@@ -1124,6 +1143,9 @@ bool LLPumpIO::handleChainError(
#endif
keep_going = false;
break;
+ case LLIOPipe::STATUS_EXPIRED:
+ keep_going = false;
+ break ;
default:
if(LLIOPipe::isSuccess(error))
{
@@ -1146,6 +1168,7 @@ LLPumpIO::LLChainInfo::LLChainInfo() :
mInit(false),
mLock(0),
mEOS(false),
+ mHasCurlRequest(false),
mDescriptorsPool(new LLAPRPool(LLThread::tldata().mRootPool))
{
LLMemType m1(LLMemType::MTYPE_IO_PUMP);
@@ -1157,7 +1180,9 @@ void LLPumpIO::LLChainInfo::setTimeoutSeconds(F32 timeout)
LLMemType m1(LLMemType::MTYPE_IO_PUMP);
if(timeout > 0.0f)
{
- mTimer.start(timeout);
+ mTimer.start();
+ mTimer.reset();
+ mTimer.setTimerExpirySec(timeout);
}
else
{
diff --git a/indra/llmessage/llpumpio.h b/indra/llmessage/llpumpio.h
index 4e6d59b39..3771be9cf 100644
--- a/indra/llmessage/llpumpio.h
+++ b/indra/llmessage/llpumpio.h
@@ -4,31 +4,25 @@
* @date 2004-11-19
* @brief Declaration of pump class which manages io chains.
*
- * $LicenseInfo:firstyear=2004&license=viewergpl$
- *
- * Copyright (c) 2004-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2004&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
@@ -106,9 +100,10 @@ public:
* @param chain The pipes for the chain
* @param timeout The number of seconds in the future to
* expire. Pass in 0.0f to never expire.
+ * @param has_curl_request The chain contains LLURLRequest if true.
* @return Returns true if anything was added to the pump.
*/
- bool addChain(const chain_t& chain, F32 timeout);
+ bool addChain(const chain_t& chain, F32 timeout, bool has_curl_request = false);
/**
* @brief Struct to associate a pipe with it's buffer io indexes.
@@ -351,12 +346,13 @@ protected:
// basic member data
bool mInit;
+ bool mEOS;
+ bool mHasCurlRequest;
S32 mLock;
LLFrameTimer mTimer;
links_t::iterator mHead;
links_t mChainLinks;
- LLIOPipe::buffer_ptr_t mData;
- bool mEOS;
+ LLIOPipe::buffer_ptr_t mData;
LLSD mContext;
// tracking inside the pump
@@ -397,8 +393,8 @@ protected:
protected:
void initialize();
- void cleanup();
+ current_chain_t removeRunningChain(current_chain_t& chain) ;
/**
* @brief Given the internal state of the chains, rebuild the pollset
* @see setConditional()
@@ -425,6 +421,9 @@ protected:
*/
bool handleChainError(LLChainInfo& chain, LLIOPipe::EStatus error);
+ //if the chain is expired, remove it
+ bool isChainExpired(LLChainInfo& chain) ;
+
public:
/**
* @brief Return number of running chains.
diff --git a/indra/llmessage/llqueryflags.h b/indra/llmessage/llqueryflags.h
index 960d7777a..14a62de04 100644
--- a/indra/llmessage/llqueryflags.h
+++ b/indra/llmessage/llqueryflags.h
@@ -2,31 +2,25 @@
* @file llqueryflags.h
* @brief Flags for directory queries
*
- * $LicenseInfo:firstyear=2003&license=viewergpl$
- *
- * Copyright (c) 2003-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2003&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/llregionhandle.h b/indra/llmessage/llregionhandle.h
index da899cd2d..c77794e4b 100644
--- a/indra/llmessage/llregionhandle.h
+++ b/indra/llmessage/llregionhandle.h
@@ -2,31 +2,25 @@
* @file llregionhandle.h
* @brief Routines for converting positions to/from region handles.
*
- * $LicenseInfo:firstyear=2002&license=viewergpl$
- *
- * Copyright (c) 2002-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2002&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/llregionpresenceverifier.cpp b/indra/llmessage/llregionpresenceverifier.cpp
index 04eba34b6..932cbf375 100644
--- a/indra/llmessage/llregionpresenceverifier.cpp
+++ b/indra/llmessage/llregionpresenceverifier.cpp
@@ -1,47 +1,71 @@
/**
- * @file
+ * @file llregionpresenceverifier.cpp
* @brief
*
- * $LicenseInfo:firstyear=2008&license=viewergpl$
- *
- * Copyright (c) 2008-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2008&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
#include "linden_common.h"
+
#include "llregionpresenceverifier.h"
#include "llhttpclientinterface.h"
#include
#include "net.h"
#include "message.h"
+namespace boost
+{
+ void intrusive_ptr_add_ref(LLRegionPresenceVerifier::Response* p)
+ {
+ ++p->mReferenceCount;
+ }
+
+ void intrusive_ptr_release(LLRegionPresenceVerifier::Response* p)
+ {
+ if(p && 0 == --p->mReferenceCount)
+ {
+ delete p;
+ }
+ }
+};
-LLRegionPresenceVerifier::RegionResponder::RegionResponder(ResponsePtr data) : mSharedData(data)
+LLRegionPresenceVerifier::Response::~Response()
{
}
+LLRegionPresenceVerifier::RegionResponder::RegionResponder(const std::string&
+ uri,
+ ResponsePtr data,
+ S32 retry_count) :
+ mUri(uri),
+ mSharedData(data),
+ mRetryCount(retry_count)
+{
+}
+
+//virtual
+LLRegionPresenceVerifier::RegionResponder::~RegionResponder()
+{
+}
void LLRegionPresenceVerifier::RegionResponder::result(const LLSD& content)
{
@@ -50,50 +74,80 @@ void LLRegionPresenceVerifier::RegionResponder::result(const LLSD& content)
LLHost destination(host, port);
LLUUID id = content["region_id"];
- llinfos << "Verifying " << destination.getString() << " is region " << id << llendl;
+ lldebugs << "Verifying " << destination.getString() << " is region " << id << llendl;
std::stringstream uri;
- uri << "http://" << destination.getString() << "/state/basic";
- mSharedData->getHttpClient().get(uri.str(), new VerifiedDestinationResponder(mSharedData, content));
+ uri << "http://" << destination.getString() << "/state/basic/";
+ mSharedData->getHttpClient().get(
+ uri.str(),
+ new VerifiedDestinationResponder(mUri, mSharedData, content, mRetryCount));
}
-void LLRegionPresenceVerifier::RegionResponder::completed(
- U32 status,
- const std::string& reason,
- const LLSD& content)
+void LLRegionPresenceVerifier::RegionResponder::error(U32 status,
+ const std::string& reason)
{
- LLHTTPClient::Responder::completed(status, reason, content);
-
- mSharedData->onCompletedRegionRequest();
+ // TODO: babbage: distinguish between region presence service and
+ // region verification errors?
+ mSharedData->onRegionVerificationFailed();
}
-
-LLRegionPresenceVerifier::VerifiedDestinationResponder::VerifiedDestinationResponder(ResponsePtr data, const LLSD& content) : mSharedData(data), mContent(content)
+LLRegionPresenceVerifier::VerifiedDestinationResponder::VerifiedDestinationResponder(const std::string& uri, ResponsePtr data, const LLSD& content,
+ S32 retry_count):
+ mUri(uri),
+ mSharedData(data),
+ mContent(content),
+ mRetryCount(retry_count)
{
}
-
-
+//virtual
+LLRegionPresenceVerifier::VerifiedDestinationResponder::~VerifiedDestinationResponder()
+{
+}
void LLRegionPresenceVerifier::VerifiedDestinationResponder::result(const LLSD& content)
{
LLUUID actual_region_id = content["region_id"];
LLUUID expected_region_id = mContent["region_id"];
- if (mSharedData->checkValidity(content))
+ lldebugs << "Actual region: " << content << llendl;
+ lldebugs << "Expected region: " << mContent << llendl;
+
+ if (mSharedData->checkValidity(content) &&
+ (actual_region_id == expected_region_id))
{
mSharedData->onRegionVerified(mContent);
}
- else if ((mSharedData->shouldRetry()) && (actual_region_id != expected_region_id)) // If the region is correct, then it means we've deliberately changed the data
+ else if (mRetryCount > 0)
{
- LLSD headers;
- headers["Cache-Control"] = "no-cache, max-age=0";
- llinfos << "Requesting region information, get uncached for region " << mSharedData->getRegionUri() << llendl;
- mSharedData->decrementRetries();
- mSharedData->getHttpClient().get(mSharedData->getRegionUri(), new RegionResponder(mSharedData), headers);
+ retry();
}
else
{
- llwarns << "Could not correctly look up region from region presence service. Region: " << mSharedData->getRegionUri() << llendl;
+ llwarns << "Simulator verification failed. Region: " << mUri << llendl;
+ mSharedData->onRegionVerificationFailed();
+ }
+}
+
+void LLRegionPresenceVerifier::VerifiedDestinationResponder::retry()
+{
+ LLSD headers;
+ headers["Cache-Control"] = "no-cache, max-age=0";
+ llinfos << "Requesting region information, get uncached for region "
+ << mUri << llendl;
+ --mRetryCount;
+ mSharedData->getHttpClient().get(mUri, new RegionResponder(mUri, mSharedData, mRetryCount), headers);
+}
+
+void LLRegionPresenceVerifier::VerifiedDestinationResponder::error(U32 status, const std::string& reason)
+{
+ if(mRetryCount > 0)
+ {
+ retry();
+ }
+ else
+ {
+ llwarns << "Failed to contact simulator for verification. Region: " << mUri << llendl;
+ mSharedData->onRegionVerificationFailed();
}
}
diff --git a/indra/llmessage/llregionpresenceverifier.h b/indra/llmessage/llregionpresenceverifier.h
index 54a7cce72..5e8251e51 100644
--- a/indra/llmessage/llregionpresenceverifier.h
+++ b/indra/llmessage/llregionpresenceverifier.h
@@ -1,32 +1,26 @@
/**
- * @file
+ * @file llregionpresenceverifier.cpp
* @brief
*
- * $LicenseInfo:firstyear=2008&license=viewergpl$
- *
- * Copyright (c) 2008-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2008&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
@@ -37,7 +31,7 @@
#include "llhttpclient.h"
#include
#include "llsd.h"
-#include
+#include
class LLHTTPClientInterface;
@@ -47,46 +41,58 @@ public:
class Response
{
public:
- virtual ~Response() {}
+ virtual ~Response() = 0;
virtual bool checkValidity(const LLSD& content) const = 0;
virtual void onRegionVerified(const LLSD& region_details) = 0;
-
- virtual void decrementRetries() = 0;
+ virtual void onRegionVerificationFailed() = 0;
virtual LLHTTPClientInterface& getHttpClient() = 0;
- virtual std::string getRegionUri() const = 0;
- virtual bool shouldRetry() const = 0;
- virtual void onCompletedRegionRequest() {}
+ public: /* but not really -- don't touch this */
+ U32 mReferenceCount;
};
- typedef boost::shared_ptr ResponsePtr;
+ typedef boost::intrusive_ptr ResponsePtr;
class RegionResponder : public LLHTTPClient::Responder
{
public:
- RegionResponder(ResponsePtr data);
+ RegionResponder(const std::string& uri, ResponsePtr data,
+ S32 retry_count);
+ virtual ~RegionResponder();
virtual void result(const LLSD& content);
- virtual void completed(
- U32 status,
- const std::string& reason,
- const LLSD& content);
+ virtual void error(U32 status, const std::string& reason);
private:
ResponsePtr mSharedData;
+ std::string mUri;
+ S32 mRetryCount;
};
class VerifiedDestinationResponder : public LLHTTPClient::Responder
{
public:
- VerifiedDestinationResponder(ResponsePtr data, const LLSD& content);
+ VerifiedDestinationResponder(const std::string& uri, ResponsePtr data,
+ const LLSD& content, S32 retry_count);
+ virtual ~VerifiedDestinationResponder();
virtual void result(const LLSD& content);
+
+ virtual void error(U32 status, const std::string& reason);
+
private:
+ void retry();
ResponsePtr mSharedData;
LLSD mContent;
+ std::string mUri;
+ S32 mRetryCount;
};
};
+namespace boost
+{
+ void intrusive_ptr_add_ref(LLRegionPresenceVerifier::Response* p);
+ void intrusive_ptr_release(LLRegionPresenceVerifier::Response* p);
+};
#endif //LL_LLREGIONPRESENCEVERIFIER_H
diff --git a/indra/llmessage/llsdappservices.cpp b/indra/llmessage/llsdappservices.cpp
index b87c0cd6b..8bab91b0c 100644
--- a/indra/llmessage/llsdappservices.cpp
+++ b/indra/llmessage/llsdappservices.cpp
@@ -3,31 +3,25 @@
* @author Phoenix
* @date 2006-09-12
*
- * $LicenseInfo:firstyear=2006&license=viewergpl$
- *
- * Copyright (c) 2006-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2006&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/llsdappservices.h b/indra/llmessage/llsdappservices.h
index 8f145e893..e76e20cea 100644
--- a/indra/llmessage/llsdappservices.h
+++ b/indra/llmessage/llsdappservices.h
@@ -4,31 +4,25 @@
* @date 2006-09-12
* @brief Header file to declare the /app common web services.
*
- * $LicenseInfo:firstyear=2006&license=viewergpl$
- *
- * Copyright (c) 2006-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2006&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/llsdhttpserver.cpp b/indra/llmessage/llsdhttpserver.cpp
index 7d06c298a..5c8fc7b2b 100644
--- a/indra/llmessage/llsdhttpserver.cpp
+++ b/indra/llmessage/llsdhttpserver.cpp
@@ -2,31 +2,25 @@
* @file llsdhttpserver.cpp
* @brief Standard LLSD services
*
- * $LicenseInfo:firstyear=2006&license=viewergpl$
- *
- * Copyright (c) 2006-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2006&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
@@ -86,7 +80,7 @@ public:
desc.source(__FILE__, __LINE__);
}
- virtual LLSD simplePost(const LLSD& params) const
+ virtual LLSD simplePost(const LLSD& params) const
{
return params;
}
diff --git a/indra/llmessage/llsdhttpserver.h b/indra/llmessage/llsdhttpserver.h
index 63ec19554..39f920460 100644
--- a/indra/llmessage/llsdhttpserver.h
+++ b/indra/llmessage/llsdhttpserver.h
@@ -2,31 +2,25 @@
* @file llsdhttpserver.h
* @brief Standard LLSD services
*
- * $LicenseInfo:firstyear=2006&license=viewergpl$
- *
- * Copyright (c) 2006-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2006&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/llsdmessagebuilder.cpp b/indra/llmessage/llsdmessagebuilder.cpp
index 2680dd0b7..2698a271e 100644
--- a/indra/llmessage/llsdmessagebuilder.cpp
+++ b/indra/llmessage/llsdmessagebuilder.cpp
@@ -2,31 +2,25 @@
* @file llsdmessagebuilder.cpp
* @brief LLSDMessageBuilder class implementation.
*
- * $LicenseInfo:firstyear=2007&license=viewergpl$
- *
- * Copyright (c) 2007-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2007&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/llsdmessagebuilder.h b/indra/llmessage/llsdmessagebuilder.h
index ef9ca351e..9c7c1bfde 100644
--- a/indra/llmessage/llsdmessagebuilder.h
+++ b/indra/llmessage/llsdmessagebuilder.h
@@ -2,31 +2,25 @@
* @file llsdmessagebuilder.h
* @brief Declaration of LLSDMessageBuilder class.
*
- * $LicenseInfo:firstyear=2007&license=viewergpl$
- *
- * Copyright (c) 2007-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2007&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/llsdmessagereader.cpp b/indra/llmessage/llsdmessagereader.cpp
index ffcf3dc3c..3d8ca2ad9 100644
--- a/indra/llmessage/llsdmessagereader.cpp
+++ b/indra/llmessage/llsdmessagereader.cpp
@@ -2,31 +2,25 @@
* @file llsdmessagereader.cpp
* @brief LLSDMessageReader class implementation.
*
- * $LicenseInfo:firstyear=2007&license=viewergpl$
- *
- * Copyright (c) 2007-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2007&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/llsdmessagereader.h b/indra/llmessage/llsdmessagereader.h
index 7b38659e5..3b3d7fbfb 100644
--- a/indra/llmessage/llsdmessagereader.h
+++ b/indra/llmessage/llsdmessagereader.h
@@ -2,31 +2,25 @@
* @file llsdmessagereader.h
* @brief LLSDMessageReader class Declaration
*
- * $LicenseInfo:firstyear=2007&license=viewergpl$
- *
- * Copyright (c) 2007-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2007&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/llsdrpcclient.cpp b/indra/llmessage/llsdrpcclient.cpp
index 471369671..dbc511f9f 100644
--- a/indra/llmessage/llsdrpcclient.cpp
+++ b/indra/llmessage/llsdrpcclient.cpp
@@ -4,31 +4,25 @@
* @date 2005-11-05
* @brief Implementation of the llsd client classes.
*
- * $LicenseInfo:firstyear=2005&license=viewergpl$
- *
- * Copyright (c) 2005-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2005&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
@@ -36,13 +30,13 @@
#include "llsdrpcclient.h"
#include "llbufferstream.h"
+#include "llfasttimer.h"
#include "llfiltersd2xmlrpc.h"
#include "llmemtype.h"
#include "llpumpio.h"
#include "llsd.h"
#include "llsdserialize.h"
#include "llurlrequest.h"
-#include "llfasttimer.h"
/**
* String constants
diff --git a/indra/llmessage/llsdrpcclient.h b/indra/llmessage/llsdrpcclient.h
index 7d2d21e38..0cecf4f68 100644
--- a/indra/llmessage/llsdrpcclient.h
+++ b/indra/llmessage/llsdrpcclient.h
@@ -4,31 +4,25 @@
* @date 2005-11-05
* @brief Implementation and helpers for structure data RPC clients.
*
- * $LicenseInfo:firstyear=2005&license=viewergpl$
- *
- * Copyright (c) 2005-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2005&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
@@ -246,9 +240,16 @@ public:
virtual bool build(LLPumpIO::chain_t& chain, LLSD context) const
{
lldebugs << "LLSDRPCClientFactory::build" << llendl;
- LLIOPipe::ptr_t service(new Client);
- chain.push_back(service);
LLURLRequest* http(new LLURLRequest(LLURLRequest::HTTP_POST));
+ if(!http->isValid())
+ {
+ llwarns << "Creating LLURLRequest failed." << llendl ;
+ delete http;
+ return false;
+ }
+
+ LLIOPipe::ptr_t service(new Client);
+ chain.push_back(service);
LLIOPipe::ptr_t http_pipe(http);
http->addHeader("Content-Type: text/llsd");
if(mURL.empty())
@@ -289,9 +290,16 @@ public:
virtual bool build(LLPumpIO::chain_t& chain, LLSD context) const
{
lldebugs << "LLXMLSDRPCClientFactory::build" << llendl;
- LLIOPipe::ptr_t service(new Client);
- chain.push_back(service);
+
LLURLRequest* http(new LLURLRequest(LLURLRequest::HTTP_POST));
+ if(!http->isValid())
+ {
+ llwarns << "Creating LLURLRequest failed." << llendl ;
+ delete http;
+ return false ;
+ }
+ LLIOPipe::ptr_t service(new Client);
+ chain.push_back(service);
LLIOPipe::ptr_t http_pipe(http);
http->addHeader("Content-Type: text/xml");
if(mURL.empty())
diff --git a/indra/llmessage/llsdrpcserver.cpp b/indra/llmessage/llsdrpcserver.cpp
index 4fc95eff0..6ee5bb508 100644
--- a/indra/llmessage/llsdrpcserver.cpp
+++ b/indra/llmessage/llsdrpcserver.cpp
@@ -4,31 +4,25 @@
* @date 2005-10-11
* @brief Implementation of the LLSDRPCServer and related classes.
*
- * $LicenseInfo:firstyear=2005&license=viewergpl$
- *
- * Copyright (c) 2005-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2005&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
@@ -37,11 +31,11 @@
#include "llbuffer.h"
#include "llbufferstream.h"
+#include "llfasttimer.h"
#include "llmemtype.h"
#include "llpumpio.h"
#include "llsdserialize.h"
#include "llstl.h"
-#include "llfasttimer.h"
static const char FAULT_PART_1[] = "{'fault':{'code':i";
static const char FAULT_PART_2[] = ", 'description':'";
diff --git a/indra/llmessage/llsdrpcserver.h b/indra/llmessage/llsdrpcserver.h
index 930732336..9e56e4ea4 100644
--- a/indra/llmessage/llsdrpcserver.h
+++ b/indra/llmessage/llsdrpcserver.h
@@ -4,31 +4,25 @@
* @date 2005-10-11
* @brief Declaration of the structured data remote procedure call server.
*
- * $LicenseInfo:firstyear=2005&license=viewergpl$
- *
- * Copyright (c) 2005-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2005&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/llservice.cpp b/indra/llmessage/llservice.cpp
index 9824c1937..dbec92c22 100644
--- a/indra/llmessage/llservice.cpp
+++ b/indra/llmessage/llservice.cpp
@@ -3,31 +3,25 @@
* @author Phoenix
* @date 2005-04-20
*
- * $LicenseInfo:firstyear=2005&license=viewergpl$
- *
- * Copyright (c) 2005-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2005&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/llservice.h b/indra/llmessage/llservice.h
index ab5abe04c..9c09aeb44 100644
--- a/indra/llmessage/llservice.h
+++ b/indra/llmessage/llservice.h
@@ -4,31 +4,25 @@
* @date 2004-11-21
* @brief Declaration file for LLService and related classes.
*
- * $LicenseInfo:firstyear=2004&license=viewergpl$
- *
- * Copyright (c) 2004-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2004&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/llservicebuilder.cpp b/indra/llmessage/llservicebuilder.cpp
index 449848053..b9aef3d0b 100644
--- a/indra/llmessage/llservicebuilder.cpp
+++ b/indra/llmessage/llservicebuilder.cpp
@@ -2,31 +2,25 @@
* @file llservicebuilder.cpp
* @brief Implementation of the LLServiceBuilder class.
*
- * $LicenseInfo:firstyear=2007&license=viewergpl$
- *
- * Copyright (c) 2007-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2007&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/llservicebuilder.h b/indra/llmessage/llservicebuilder.h
index 47476774a..968995edf 100644
--- a/indra/llmessage/llservicebuilder.h
+++ b/indra/llmessage/llservicebuilder.h
@@ -2,31 +2,25 @@
* @file llservicebuilder.h
* @brief Declaration of the LLServiceBuilder class.
*
-* $LicenseInfo:firstyear=2007&license=viewergpl$
-*
-* Copyright (c) 2007-2009, Linden Research, Inc.
-*
+* $LicenseInfo:firstyear=2007&license=viewerlgpl$
* Second Life Viewer Source Code
-* The source code in this file ("Source Code") is provided by Linden Lab
-* to you under the terms of the GNU General Public License, version 2.0
-* ("GPL"), unless you have obtained a separate licensing agreement
-* ("Other License"), formally executed by you and Linden Lab. 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
+* Copyright (C) 2010, Linden Research, Inc.
*
-* 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
+* This library is free software; you can redistribute it and/or
+* modify it under the terms of the GNU Lesser General Public
+* License as published by the Free Software Foundation;
+* version 2.1 of the License only.
*
-* 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.
+* This library is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
*
-* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
-* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
-* COMPLETENESS OR PERFORMANCE.
+* You should have received a copy of the GNU Lesser General Public
+* License along with this library; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*
+* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
@@ -108,4 +102,3 @@ protected:
#endif
-
diff --git a/indra/llmessage/llsocks5.cpp b/indra/llmessage/llsocks5.cpp
deleted file mode 100644
index d21412f86..000000000
--- a/indra/llmessage/llsocks5.cpp
+++ /dev/null
@@ -1,209 +0,0 @@
-/**
- * @file llsocks5.cpp
- * @brief Socks 5 implementation
- *
- * $LicenseInfo:firstyear=2000&license=viewergpl$
- *
- * Copyright (c) 2000-2009, Linden Research, Inc.
- *
- * Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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 LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
- * $/LicenseInfo$
- */
-
-#include "linden_common.h"
-#include "net.h"
-#include "llhost.h"
-#include "message.h"
-#include "llsocks5.h"
-#include
-
-// Static class variable instances
-
-// We want this to be static to avoid excessive indirection on every
-// incomming packet just to do a simple bool test. The getter for this
-// member is also static
-bool LLSocks::sUdpProxyEnabled;
-bool LLSocks::sHttpProxyEnabled;
-
-LLSocks::LLSocks()
-{
- sUdpProxyEnabled = false;
- sHttpProxyEnabled = false;
- mNeedUpdate = false;
-}
-
-// Perform a Socks5 authentication and UDP assioacation to the proxy
-// specified by proxy, and assiocate UDP port message_port
-int LLSocks::proxyHandshake(LLHost proxy, U32 message_port)
-{
- int result;
-
- /* Socks 5 Auth request */
- socks_auth_request_t socks_auth_request;
- socks_auth_response_t socks_auth_response;
-
- socks_auth_request.version = SOCKS_VERSION; // Socks version 5
- socks_auth_request.num_methods = 1; // Sending 1 method
- socks_auth_request.methods = mAuthMethodSelected; // send only the selected metho
-
- result = tcp_handshake(hProxyControlChannel, (char*)&socks_auth_request, sizeof(socks_auth_request_t), (char*)&socks_auth_response, sizeof(socks_auth_response_t));
- if (result != 0)
- {
- llwarns << "Socks authentication request failed, error on TCP control channel : " << result << llendl;
- stopProxy();
- return SOCKS_CONNECT_ERROR;
- }
-
- if (socks_auth_response.method == AUTH_NOT_ACCEPTABLE)
- {
- llwarns << "Socks5 server refused all our authentication methods" << llendl;
- stopProxy();
- return SOCKS_NOT_ACCEPTABLE;
- }
-
- // SOCKS5 USERNAME/PASSWORD authentication
- if (socks_auth_response.method == METHOD_PASSWORD)
- {
- // The server has requested a username/password combination
- U32 request_size = mSocksUsername.size() + mSocksPassword.size() + 3;
- char * password_auth = (char *)malloc(request_size);
- password_auth[0] = 0x01;
- password_auth[1] = mSocksUsername.size();
- memcpy(&password_auth[2],mSocksUsername.c_str(), mSocksUsername.size());
- password_auth[mSocksUsername.size()+2] = mSocksPassword.size();
- memcpy(&password_auth[mSocksUsername.size()+3], mSocksPassword.c_str(), mSocksPassword.size());
-
- authmethod_password_reply_t password_reply;
-
- result = tcp_handshake(hProxyControlChannel, password_auth, request_size, (char*)&password_reply, sizeof(authmethod_password_reply_t));
- free (password_auth);
-
- if (result != 0)
- {
- llwarns << "Socks authentication failed, error on TCP control channel : " << result << llendl;
- stopProxy();
- return SOCKS_CONNECT_ERROR;
- }
-
- if (password_reply.status != AUTH_SUCCESS)
- {
- llwarns << "Socks authentication failed" << llendl;
- stopProxy();
- return SOCKS_AUTH_FAIL;
- }
- }
-
- /* SOCKS5 connect request */
-
- socks_command_request_t connect_request;
- socks_command_response_t connect_reply;
-
- connect_request.version = SOCKS_VERSION; //Socks V5
- connect_request.command = COMMAND_UDP_ASSOCIATE; // Associate UDP
- connect_request.flag = FIELD_RESERVED;
- connect_request.atype = ADDRESS_IPV4;
- connect_request.address = 0; // 0.0.0.0 We are not fussy about address
- // UDP is promiscious receive for our protocol
- connect_request.port = 0; // Port must be 0 if you ever want to connect via NAT and your router does port rewrite for you
-
- result = tcp_handshake(hProxyControlChannel, (char*)&connect_request, sizeof(socks_command_request_t), (char*)&connect_reply, sizeof(socks_command_response_t));
- if (result != 0)
- {
- llwarns << "Socks connect request failed, error on TCP control channel : " << result << llendl;
- stopProxy();
- return SOCKS_CONNECT_ERROR;
- }
-
- if (connect_reply.reply != REPLY_REQUEST_GRANTED)
- {
- //Something went wrong
- llwarns << "Connection to SOCKS5 server failed, UDP forward request not granted" << llendl;
- stopProxy();
- return SOCKS_UDP_FWD_NOT_GRANTED;
- }
-
- mUDPProxy.setPort(ntohs(connect_reply.port)); // reply port is in network byte order
- mUDPProxy.setAddress(proxy.getAddress());
- // All good now we have been given the UDP port to send requests that need forwarding.
- llinfos << "Socks 5 UDP proxy connected on " << mUDPProxy << llendl;
- return SOCKS_OK;
-}
-
-int LLSocks::startProxy(LLHost proxy, U32 message_port)
-{
- int status;
-
- mTCPProxy = proxy;
- mNeedUpdate = false;
-
- stopProxy();
- hProxyControlChannel = tcp_open_channel(proxy);
- if (hProxyControlChannel == -1)
- {
- return SOCKS_HOST_CONNECT_FAILED;
- }
-
- status = proxyHandshake(proxy, message_port);
- if (status == SOCKS_OK)
- {
- sUdpProxyEnabled=true;
- }
- return status;
-}
-
-int LLSocks::startProxy(std::string host, U32 port)
-{
- mTCPProxy.setHostByName(host);
- mTCPProxy.setPort(port);
- return startProxy(mTCPProxy, (U32)gMessageSystem->mPort);
-}
-
-void LLSocks::stopProxy()
-{
- sUdpProxyEnabled = false;
-
- if (hProxyControlChannel)
- {
- tcp_close_channel(hProxyControlChannel);
- }
-}
-
-void LLSocks::setAuthNone()
-{
- mAuthMethodSelected = METHOD_NOAUTH;
-}
-
-
-void LLSocks::setAuthPassword(std::string username, std::string password)
-{
- mAuthMethodSelected = METHOD_PASSWORD;
- mSocksUsername = username;
- mSocksPassword = password;
-}
-
-void LLSocks::EnableHttpProxy(LLHost httpHost, LLHttpProxyType type)
-{
- sHttpProxyEnabled = true;
- mHTTPProxy = httpHost;
- mProxyType = type;
-}
diff --git a/indra/llmessage/llsocks5.h b/indra/llmessage/llsocks5.h
deleted file mode 100644
index 8359a8f41..000000000
--- a/indra/llmessage/llsocks5.h
+++ /dev/null
@@ -1,248 +0,0 @@
-/**
- * @file llsocks5.h
- * @brief Socks 5 implementation
- *
- * $LicenseInfo:firstyear=2001&license=viewergpl$
- *
- * Copyright (c) 2001-2009, Linden Research, Inc.
- *
- * Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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 LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
- * $/LicenseInfo$
- */
-
-#ifndef LL_SOCKS5_H
-#define LL_SOCKS5_H
-
-#include "llhost.h"
-#include "llmemory.h"
-#include
-
-// Error codes returned from the StartProxy method
-
-#define SOCKS_OK 0
-#define SOCKS_CONNECT_ERROR -1
-#define SOCKS_NOT_PERMITTED -2
-#define SOCKS_NOT_ACCEPTABLE -3
-#define SOCKS_AUTH_FAIL -4
-#define SOCKS_UDP_FWD_NOT_GRANTED -5
-#define SOCKS_HOST_CONNECT_FAILED -6
-
-#ifndef MAXHOSTNAMELEN
-#define MAXHOSTNAMELEN (255 + 1) /* socks5: 255, +1 for len. */
-#endif
-
-#define SOCKS_VERSION 0x05 // we are using socks 5
-
-// socks 5 address/hostname types
-#define ADDRESS_IPV4 0x01
-#define ADDRESS_HOSTNAME 0x03
-#define ADDRESS_IPV6 0x04
-
-// Lets just use our own ipv4 struct rather than dragging in system
-// specific headers
-union ipv4_address_t {
- unsigned char octects[4];
- U32 addr32;
-};
-
-// Socks 5 control channel commands
-#define COMMAND_TCP_STREAM 0x01
-#define COMMAND_TCP_BIND 0x02
-#define COMMAND_UDP_ASSOCIATE 0x03
-
-// Socks 5 command replys
-#define REPLY_REQUEST_GRANTED 0x00
-#define REPLY_GENERAL_FAIL 0x01
-#define REPLY_RULESET_FAIL 0x02
-#define REPLY_NETWORK_UNREACHABLE 0x03
-#define REPLY_HOST_UNREACHABLE 0x04
-#define REPLY_CONNECTION_REFUSED 0x05
-#define REPLY_TTL_EXPIRED 0x06
-#define REPLY_PROTOCOL_ERROR 0x07
-#define REPLY_TYPE_NOT_SUPPORTED 0x08
-
-#define FIELD_RESERVED 0x00
-
-// The standard socks5 request packet
-// Push current alignment to stack and set alignment to 1 byte boundary
-// This enabled us to use structs directly to set up and receive network packets
-// into the correct fields, without fear of boundary alignment causing issues
-#pragma pack(push,1)
-
-// Socks5 command packet
-struct socks_command_request_t {
- unsigned char version;
- unsigned char command;
- unsigned char flag;
- unsigned char atype;
- U32 address;
- U16 port;
-};
-
-// Standard socks5 reply packet
-struct socks_command_response_t {
- unsigned char version;
- unsigned char reply;
- unsigned char flag;
- unsigned char atype;
- unsigned char add_bytes[4];
- U16 port;
-};
-
-#define AUTH_NOT_ACCEPTABLE 0xFF // reply if prefered methods are not avaiable
-#define AUTH_SUCCESS 0x00 // reply if authentication successfull
-
-// socks 5 authentication request, stating which methods the client supports
-struct socks_auth_request_t {
- unsigned char version;
- unsigned char num_methods;
- unsigned char methods; // We are only using a single method currently
-};
-
-// socks 5 authentication response packet, stating server prefered method
-struct socks_auth_response_t {
- unsigned char version;
- unsigned char method;
-};
-
-// socks 5 password reply packet
-struct authmethod_password_reply_t {
- unsigned char version;
- unsigned char status;
-};
-
-// socks 5 UDP packet header
-struct proxywrap_t {
- U16 rsv;
- U8 frag;
- U8 atype;
- U32 addr;
- U16 port;
-};
-
-#pragma pack(pop) /* restore original alignment from stack */
-
-
-// Currently selected http proxy type
-enum LLHttpProxyType
-{
- LLPROXY_SOCKS=0,
- LLPROXY_HTTP=1
-};
-
-// Auth types
-enum LLSocks5AuthType
-{
- METHOD_NOAUTH=0x00, // Client supports no auth
- METHOD_GSSAPI=0x01, // Client supports GSSAPI (Not currently supported)
- METHOD_PASSWORD=0x02 // Client supports username/password
-};
-
-class LLSocks: public LLSingleton
-{
-public:
- LLSocks();
-
- // Start a connection to the socks 5 proxy
- int startProxy(std::string host,U32 port);
- int startProxy(LLHost proxy,U32 messagePort);
-
- // Disconnect and clean up any connection to the socks 5 proxy
- void stopProxy();
-
- // Set up to use Password auth when connecting to the socks proxy
- void setAuthPassword(std::string username,std::string password);
-
- // Set up to use No Auth when connecting to the socks proxy;
- void setAuthNone();
-
- // get the currently selected auth method
- LLSocks5AuthType getSelectedAuthMethod() { return mAuthMethodSelected; };
-
- // static check for enabled status for UDP packets
- static bool isEnabled(){return sUdpProxyEnabled;};
-
- // static check for enabled status for http packets
- static bool isHttpProxyEnabled(){return sHttpProxyEnabled;};
-
- // Proxy http packets via httpHost, which can be a Socks5 or a http proxy
- // as specified in type
- void EnableHttpProxy(LLHost httpHost,LLHttpProxyType type);
-
- // Stop proxying http packets
- void DisableHttpProxy() {sHttpProxyEnabled = false;};
-
- // get the UDP proxy address and port
- LLHost getUDPPproxy(){return mUDPProxy;};
- // get the socks 5 TCP control channel address and port
- LLHost getTCPProxy(){return mTCPProxy;};
- //get the http proxy address and port
- LLHost getHTTPProxy(){return mHTTPProxy;};
-
- // get the currently selected http proxy type
- LLHttpProxyType getHttpProxyType(){return mProxyType;};
-
- // mark that we need an update due to a settings change
- void updated() { mNeedUpdate = true; };
- // report if the current settings are applied or dirty pending a startProxy
- bool needsUpdate() { return mNeedUpdate; };
-
- //Get the username password in a curl compatible format
- std::string getProxyUserPwd(){ return (mSocksUsername+":"+mSocksPassword);};
-
-private:
-
- // Open a communication channel to the socks5 proxy proxy, at port messagePort
- int proxyHandshake(LLHost proxy,U32 messagePort);
-
- // socket handle to proxy tcp control channel
- S32 hProxyControlChannel;
-
- // is the UDP proxy enabled
- static bool sUdpProxyEnabled;
- // is the http proxy enabled
- static bool sHttpProxyEnabled;
-
- // Have all settings been applied
- bool mNeedUpdate;
-
- // currently selected http proxy type
- LLHttpProxyType mProxyType;
-
- // UDP proxy address and port
- LLHost mUDPProxy;
- // TCP Proxy control channel address and port
- LLHost mTCPProxy;
- // HTTP proxy address and port
- LLHost mHTTPProxy;
-
- // socks 5 auth method selected
- LLSocks5AuthType mAuthMethodSelected;
-
- // socks 5 username
- std::string mSocksUsername;
- // socks 5 password
- std::string mSocksPassword;
-};
-
-#endif
diff --git a/indra/llmessage/llstoredmessage.cpp b/indra/llmessage/llstoredmessage.cpp
index 32cbb15cb..9f2f2bcda 100644
--- a/indra/llmessage/llstoredmessage.cpp
+++ b/indra/llmessage/llstoredmessage.cpp
@@ -1,32 +1,26 @@
/**
- * @file
+ * @file llstoredmessage.cpp
* @brief
*
- * $LicenseInfo:firstyear=2009&license=viewergpl$
- *
- * Copyright (c) 2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2009&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/llstoredmessage.h b/indra/llmessage/llstoredmessage.h
index 5069c2cb2..9c98e2c55 100644
--- a/indra/llmessage/llstoredmessage.h
+++ b/indra/llmessage/llstoredmessage.h
@@ -1,32 +1,26 @@
/**
- * @file
+ * @file llstoredmessage.h
* @brief
*
- * $LicenseInfo:firstyear=2009&license=viewergpl$
- *
- * Copyright (c) 2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2009&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/lltaskname.h b/indra/llmessage/lltaskname.h
index 401d355b2..5dbd9c622 100644
--- a/indra/llmessage/lltaskname.h
+++ b/indra/llmessage/lltaskname.h
@@ -3,31 +3,25 @@
* @brief This contains the current list of valid tasks and is inluded
* into both simulator and viewer
*
- * $LicenseInfo:firstyear=2000&license=viewergpl$
- *
- * Copyright (c) 2000-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2000&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/llteleportflags.h b/indra/llmessage/llteleportflags.h
index c41886522..b3fcad036 100644
--- a/indra/llmessage/llteleportflags.h
+++ b/indra/llmessage/llteleportflags.h
@@ -2,31 +2,25 @@
* @file llteleportflags.h
* @brief Teleport flags
*
- * $LicenseInfo:firstyear=2002&license=viewergpl$
- *
- * Copyright (c) 2002-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2002&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/lltemplatemessagebuilder.cpp b/indra/llmessage/lltemplatemessagebuilder.cpp
index 6f9707ed5..9e8eb4846 100644
--- a/indra/llmessage/lltemplatemessagebuilder.cpp
+++ b/indra/llmessage/lltemplatemessagebuilder.cpp
@@ -2,31 +2,25 @@
* @file lltemplatemessagebuilder.cpp
* @brief LLTemplateMessageBuilder class implementation.
*
- * $LicenseInfo:firstyear=2007&license=viewergpl$
- *
- * Copyright (c) 2007-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2007&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/lltemplatemessagebuilder.h b/indra/llmessage/lltemplatemessagebuilder.h
index 96e7ae1a8..4f614a465 100644
--- a/indra/llmessage/lltemplatemessagebuilder.h
+++ b/indra/llmessage/lltemplatemessagebuilder.h
@@ -2,31 +2,25 @@
* @file lltemplatemessagebuilder.h
* @brief Declaration of LLTemplateMessageBuilder class.
*
- * $LicenseInfo:firstyear=2007&license=viewergpl$
- *
- * Copyright (c) 2007-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2007&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/lltemplatemessagedispatcher.cpp b/indra/llmessage/lltemplatemessagedispatcher.cpp
index ab1beb362..ee7a4e7e7 100644
--- a/indra/llmessage/lltemplatemessagedispatcher.cpp
+++ b/indra/llmessage/lltemplatemessagedispatcher.cpp
@@ -2,31 +2,25 @@
* @file lltemplatemessagedispatcher.h
* @brief LLTemplateMessageDispatcher class
*
- * $LicenseInfo:firstyear=2009&license=viewergpl$
- *
- * Copyright (c) 2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2009&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/lltemplatemessagedispatcher.h b/indra/llmessage/lltemplatemessagedispatcher.h
index fa861e4e4..fe77f9207 100644
--- a/indra/llmessage/lltemplatemessagedispatcher.h
+++ b/indra/llmessage/lltemplatemessagedispatcher.h
@@ -2,31 +2,25 @@
* @file lltemplatemessagedispatcher.h
* @brief LLTemplateMessageDispatcher class
*
- * $LicenseInfo:firstyear=2009&license=viewergpl$
- *
- * Copyright (c) 2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2009&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/lltemplatemessagereader.cpp b/indra/llmessage/lltemplatemessagereader.cpp
index 9c5ce1534..ab91f74ab 100644
--- a/indra/llmessage/lltemplatemessagereader.cpp
+++ b/indra/llmessage/lltemplatemessagereader.cpp
@@ -2,31 +2,25 @@
* @file lltemplatemessagereader.cpp
* @brief LLTemplateMessageReader class implementation.
*
- * $LicenseInfo:firstyear=2007&license=viewergpl$
- *
- * Copyright (c) 2007-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2007&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
@@ -449,10 +443,7 @@ S32 LLTemplateMessageReader::getMessageSize() const
// Returns template for the message contained in buffer
BOOL LLTemplateMessageReader::decodeTemplate(
const U8* buffer, S32 buffer_size, // inputs
- //
- //LLMessageTemplate** msg_template ) // outputs
- LLMessageTemplate** msg_template, BOOL custom)
- //
+ LLMessageTemplate** msg_template ) // outputs
{
const U8* header = buffer + LL_PACKET_ID_SIZE;
@@ -494,9 +485,6 @@ BOOL LLTemplateMessageReader::decodeTemplate(
}
else // bogus packet received (too short)
{
- //
- if(!custom)
- //
llwarns << "Packet with unusable length received (too short): "
<< buffer_size << llendl;
return(FALSE);
@@ -509,16 +497,9 @@ BOOL LLTemplateMessageReader::decodeTemplate(
}
else
{
- //
- if(!custom)
- {
- //
llwarns << "Message #" << std::hex << num << std::dec
<< " received but not registered!" << llendl;
gMessageSystem->callExceptionFunc(MX_UNREGISTERED_MESSAGE);
- //
- }
- //
return(FALSE);
}
@@ -545,10 +526,9 @@ void LLTemplateMessageReader::logRanOffEndOfPacket( const LLHost& host, const S3
}
static LLFastTimer::DeclareTimer FTM_PROCESS_MESSAGES("Process Messages");
+
// decode a given message
-//BOOL LLTemplateMessageReader::decodeData(const U8* buffer, const LLHost& sender )
-BOOL LLTemplateMessageReader::decodeData(const U8* buffer, const LLHost& sender, BOOL custom)
-//
+BOOL LLTemplateMessageReader::decodeData(const U8* buffer, const LLHost& sender )
{
llassert( mReceiveSize >= 0 );
llassert( mCurrentRMessageTemplate);
@@ -606,9 +586,6 @@ BOOL LLTemplateMessageReader::decodeData(const U8* buffer, const LLHost& sender,
}
else
{
- //
- if(!custom)
- //
llerrs << "Unknown block type" << llendl;
return FALSE;
}
@@ -655,9 +632,6 @@ BOOL LLTemplateMessageReader::decodeData(const U8* buffer, const LLHost& sender,
if ((decode_pos + data_size) > mReceiveSize)
{
- //
- if(!custom)
- //
logRanOffEndOfPacket(sender, decode_pos, data_size);
// default to 0 length variable blocks
@@ -694,9 +668,6 @@ BOOL LLTemplateMessageReader::decodeData(const U8* buffer, const LLHost& sender,
// so, copy data pointer and set data size to fixed size
if ((decode_pos + mvci.getSize()) > mReceiveSize)
{
- //
- if(!custom)
- //
logRanOffEndOfPacket(sender, decode_pos, mvci.getSize());
// default to 0s.
@@ -724,10 +695,7 @@ BOOL LLTemplateMessageReader::decodeData(const U8* buffer, const LLHost& sender,
lldebugs << "Empty message '" << mCurrentRMessageTemplate->mName << "' (no blocks)" << llendl;
return FALSE;
}
-
- //
- if(!custom)
- //
+
{
static LLTimer decode_timer;
@@ -783,18 +751,11 @@ BOOL LLTemplateMessageReader::decodeData(const U8* buffer, const LLHost& sender,
BOOL LLTemplateMessageReader::validateMessage(const U8* buffer,
S32 buffer_size,
const LLHost& sender,
- bool trusted,
- //
- BOOL custom)
- // )
+ bool trusted)
{
mReceiveSize = buffer_size;
- //
- //BOOL valid = decodeTemplate(buffer, buffer_size, &mCurrentRMessageTemplate );
- BOOL valid = decodeTemplate(buffer, buffer_size, &mCurrentRMessageTemplate, custom );
- //if(result)
- if(valid && !custom)
- //
+ BOOL valid = decodeTemplate(buffer, buffer_size, &mCurrentRMessageTemplate );
+ if(valid)
{
mCurrentRMessageTemplate->mReceiveCount++;
//lldebugs << "MessageRecvd:"
@@ -834,21 +795,12 @@ const char* LLTemplateMessageReader::getMessageName() const
{
if (!mCurrentRMessageTemplate)
{
- //
- //llwarns << "no mCurrentRMessageTemplate" << llendl;
- //
+ // no message currently being read
return "";
}
return mCurrentRMessageTemplate->mName;
}
-//
-LLMessageTemplate* LLTemplateMessageReader::getTemplate()
-{
- return mCurrentRMessageTemplate;
-}
-//
-
//virtual
bool LLTemplateMessageReader::isTrusted() const
{
diff --git a/indra/llmessage/lltemplatemessagereader.h b/indra/llmessage/lltemplatemessagereader.h
index f5e35b133..fcf8f92fa 100644
--- a/indra/llmessage/lltemplatemessagereader.h
+++ b/indra/llmessage/lltemplatemessagereader.h
@@ -2,31 +2,25 @@
* @file lltemplatemessagereader.h
* @brief Declaration of LLTemplateMessageReader class.
*
- * $LicenseInfo:firstyear=2007&license=viewergpl$
- *
- * Copyright (c) 2007-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2007&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
@@ -101,18 +95,11 @@ public:
virtual const char* getMessageName() const;
virtual S32 getMessageSize() const;
-
- //
- LLMessageTemplate* getTemplate();
- //
virtual void copyToBuilder(LLMessageBuilder&) const;
- BOOL validateMessage(const U8* buffer, S32 buffer_size,
- //
- // const LLHost& sender);
- const LLHost& sender, bool trusted = false, BOOL custom = FALSE);
- //
+ BOOL validateMessage(const U8* buffer, S32 buffer_size,
+ const LLHost& sender, bool trusted = false);
BOOL readMessage(const U8* buffer, const LLHost& sender);
bool isTrusted() const;
@@ -125,19 +112,11 @@ private:
S32 size = 0, S32 blocknum = 0, S32 max_size = S32_MAX);
BOOL decodeTemplate(const U8* buffer, S32 buffer_size, // inputs
- //
- // LLMessageTemplate** msg_template ); // outputs
- LLMessageTemplate** msg_template, BOOL custom = FALSE);
- //
+ LLMessageTemplate** msg_template ); // outputs
void logRanOffEndOfPacket( const LLHost& host, const S32 where, const S32 wanted );
- //
- //BOOL decodeData(const U8* buffer, const LLHost& sender );
-public:
- BOOL decodeData(const U8* buffer, const LLHost& sender, BOOL custom = FALSE);
-private:
- //
+ BOOL decodeData(const U8* buffer, const LLHost& sender );
S32 mReceiveSize;
LLMessageTemplate* mCurrentRMessageTemplate;
diff --git a/indra/llmessage/llthrottle.cpp b/indra/llmessage/llthrottle.cpp
index 0872efba5..64ebd51fe 100644
--- a/indra/llmessage/llthrottle.cpp
+++ b/indra/llmessage/llthrottle.cpp
@@ -2,31 +2,25 @@
* @file llthrottle.cpp
* @brief LLThrottle class used for network bandwidth control.
*
- * $LicenseInfo:firstyear=2001&license=viewergpl$
- *
- * Copyright (c) 2001-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2001&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/llthrottle.h b/indra/llmessage/llthrottle.h
index 47a7c653b..ed0aeb460 100644
--- a/indra/llmessage/llthrottle.h
+++ b/indra/llmessage/llthrottle.h
@@ -2,31 +2,25 @@
* @file llthrottle.h
* @brief LLThrottle class used for network bandwidth control
*
- * $LicenseInfo:firstyear=2001&license=viewergpl$
- *
- * Copyright (c) 2001-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2001&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/lltransfermanager.cpp b/indra/llmessage/lltransfermanager.cpp
index 2df64b7cd..034680caf 100644
--- a/indra/llmessage/lltransfermanager.cpp
+++ b/indra/llmessage/lltransfermanager.cpp
@@ -3,31 +3,25 @@
* @brief Improved transfer mechanism for moving data through the
* message system.
*
- * $LicenseInfo:firstyear=2004&license=viewergpl$
- *
- * Copyright (c) 2004-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2004&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
@@ -344,7 +338,7 @@ void LLTransferManager::processTransferInfo(LLMessageSystem *msgp, void **)
}
}
- llinfos << "Receiving " << transfer_id << ", size " << size << " bytes" << llendl;
+ //llinfos << "Receiving " << transfer_id << ", size " << size << " bytes" << llendl;
ttp->setSize(size);
ttp->setGotInfo(TRUE);
@@ -855,6 +849,7 @@ void LLTransferSourceChannel::updateTransfers()
break;
case LLTS_ERROR:
llwarns << "Error in transfer dataCallback!" << llendl;
+ // fall through
case LLTS_DONE:
// We need to clean up this transfer source.
//llinfos << "LLTransferSourceChannel::updateTransfers() " << tsp->getID() << " done" << llendl;
diff --git a/indra/llmessage/lltransfermanager.h b/indra/llmessage/lltransfermanager.h
index 0bb52f125..252e05d1d 100644
--- a/indra/llmessage/lltransfermanager.h
+++ b/indra/llmessage/lltransfermanager.h
@@ -3,31 +3,25 @@
* @brief Improved transfer mechanism for moving data through the
* message system.
*
- * $LicenseInfo:firstyear=2006&license=viewergpl$
- *
- * Copyright (c) 2006-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2006&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/lltransfersourceasset.cpp b/indra/llmessage/lltransfersourceasset.cpp
index 9b562f451..8537773a3 100644
--- a/indra/llmessage/lltransfersourceasset.cpp
+++ b/indra/llmessage/lltransfersourceasset.cpp
@@ -2,31 +2,25 @@
* @file lltransfersourceasset.cpp
* @brief Transfer system for sending an asset.
*
- * $LicenseInfo:firstyear=2006&license=viewergpl$
- *
- * Copyright (c) 2006-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2006&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
@@ -131,7 +125,7 @@ LLTSCode LLTransferSourceAsset::dataCallback(const S32 packet_id,
*data_handle = tmpp;
if (!vf.read(tmpp, max_bytes)) /* Flawfinder: Ignore */
{
- // Crap, read failure, need to deal with it.
+ // Read failure, need to deal with it.
delete[] tmpp;
*data_handle = NULL;
returned_bytes = 0;
@@ -257,3 +251,4 @@ BOOL LLTransferSourceParamsAsset::unpackParams(LLDataPacker &dp)
return TRUE;
}
+
diff --git a/indra/llmessage/lltransfersourceasset.h b/indra/llmessage/lltransfersourceasset.h
index 861659565..3abda83cf 100644
--- a/indra/llmessage/lltransfersourceasset.h
+++ b/indra/llmessage/lltransfersourceasset.h
@@ -2,31 +2,25 @@
* @file lltransfersourceasset.h
* @brief Transfer system for sending an asset.
*
- * $LicenseInfo:firstyear=2006&license=viewergpl$
- *
- * Copyright (c) 2006-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2006&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/lltransfersourcefile.cpp b/indra/llmessage/lltransfersourcefile.cpp
index ec0eaf186..43c9448fb 100644
--- a/indra/llmessage/lltransfersourcefile.cpp
+++ b/indra/llmessage/lltransfersourcefile.cpp
@@ -2,31 +2,25 @@
* @file lltransfersourcefile.cpp
* @brief Transfer system for sending a file.
*
- * $LicenseInfo:firstyear=2006&license=viewergpl$
- *
- * Copyright (c) 2006-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2006&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/lltransfersourcefile.h b/indra/llmessage/lltransfersourcefile.h
index 004a3ee8b..985042417 100644
--- a/indra/llmessage/lltransfersourcefile.h
+++ b/indra/llmessage/lltransfersourcefile.h
@@ -2,31 +2,25 @@
* @file lltransfersourcefile.h
* @brief Transfer system for sending a file.
*
- * $LicenseInfo:firstyear=2006&license=viewergpl$
- *
- * Copyright (c) 2006-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2006&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/lltransfertargetfile.cpp b/indra/llmessage/lltransfertargetfile.cpp
index 445e4f18c..560fc8b6e 100644
--- a/indra/llmessage/lltransfertargetfile.cpp
+++ b/indra/llmessage/lltransfertargetfile.cpp
@@ -2,31 +2,25 @@
* @file lltransfertargetfile.cpp
* @brief Transfer system for receiving a file.
*
- * $LicenseInfo:firstyear=2006&license=viewergpl$
- *
- * Copyright (c) 2006-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2006&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/lltransfertargetfile.h b/indra/llmessage/lltransfertargetfile.h
index 92fb8f807..6d03ff2d2 100644
--- a/indra/llmessage/lltransfertargetfile.h
+++ b/indra/llmessage/lltransfertargetfile.h
@@ -2,31 +2,25 @@
* @file lltransfertargetfile.h
* @brief Transfer system for receiving a file.
*
- * $LicenseInfo:firstyear=2006&license=viewergpl$
- *
- * Copyright (c) 2006-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2006&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/lltransfertargetvfile.cpp b/indra/llmessage/lltransfertargetvfile.cpp
index e9bf2ba25..c78d9288b 100644
--- a/indra/llmessage/lltransfertargetvfile.cpp
+++ b/indra/llmessage/lltransfertargetvfile.cpp
@@ -2,31 +2,25 @@
* @file lltransfertargetvfile.cpp
* @brief Transfer system for receiving a vfile.
*
- * $LicenseInfo:firstyear=2006&license=viewergpl$
- *
- * Copyright (c) 2006-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2006&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/lltransfertargetvfile.h b/indra/llmessage/lltransfertargetvfile.h
index cd18d8ce3..23a65e4bb 100644
--- a/indra/llmessage/lltransfertargetvfile.h
+++ b/indra/llmessage/lltransfertargetvfile.h
@@ -2,31 +2,25 @@
* @file lltransfertargetvfile.h
* @brief Transfer system for receiving a vfile.
*
- * $LicenseInfo:firstyear=2006&license=viewergpl$
- *
- * Copyright (c) 2006-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2006&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/lltrustedmessageservice.cpp b/indra/llmessage/lltrustedmessageservice.cpp
index 505ece57b..fea7fc72c 100644
--- a/indra/llmessage/lltrustedmessageservice.cpp
+++ b/indra/llmessage/lltrustedmessageservice.cpp
@@ -2,31 +2,25 @@
* @file lltrustedmessageservice.cpp
* @brief LLTrustedMessageService implementation
*
- * $LicenseInfo:firstyear=2009&license=viewergpl$
- *
- * Copyright (c) 2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2009&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/lltrustedmessageservice.h b/indra/llmessage/lltrustedmessageservice.h
index dc3770247..688937ac2 100644
--- a/indra/llmessage/lltrustedmessageservice.h
+++ b/indra/llmessage/lltrustedmessageservice.h
@@ -2,31 +2,25 @@
* @file lltrustedmessageservice.h
* @brief LLTrustedMessageService class
*
- * $LicenseInfo:firstyear=2009&license=viewergpl$
- *
- * Copyright (c) 2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2009&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/llurlrequest.cpp b/indra/llmessage/llurlrequest.cpp
index bc0fe04bf..f5e08f393 100644
--- a/indra/llmessage/llurlrequest.cpp
+++ b/indra/llmessage/llurlrequest.cpp
@@ -4,31 +4,25 @@
* @date 2005-04-28
* @brief Implementation of the URLRequest class and related classes.
*
- * $LicenseInfo:firstyear=2005&license=viewergpl$
- *
- * Copyright (c) 2005-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2005&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
@@ -36,17 +30,19 @@
#include "llurlrequest.h"
#include
-
+#include
+#include
#include "llcurl.h"
+#include "llfasttimer.h"
#include "llioutil.h"
#include "llmemtype.h"
+#include "llproxy.h"
#include "llpumpio.h"
#include "llsd.h"
#include "llstring.h"
#include "apr_env.h"
#include "llapr.h"
#include "llscopedvolatileaprpool.h"
-#include "llfasttimer.h"
static const U32 HTTP_STATUS_PIPE_ERROR = 499;
/**
@@ -70,34 +66,70 @@ public:
~LLURLRequestDetail();
std::string mURL;
LLCurlEasyRequest* mCurlRequest;
- LLBufferArray* mResponseBuffer;
+ LLIOPipe::buffer_ptr_t mResponseBuffer;
LLChannelDescriptors mChannels;
U8* mLastRead;
U32 mBodyLimit;
S32 mByteAccumulator;
bool mIsBodyLimitSet;
+ LLURLRequest::SSLCertVerifyCallback mSSLVerifyCallback;
};
LLURLRequestDetail::LLURLRequestDetail() :
mCurlRequest(NULL),
- mResponseBuffer(NULL),
mLastRead(NULL),
mBodyLimit(0),
mByteAccumulator(0),
- mIsBodyLimitSet(false)
+ mIsBodyLimitSet(false),
+ mSSLVerifyCallback(NULL)
{
LLMemType m1(LLMemType::MTYPE_IO_URL_REQUEST);
mCurlRequest = new LLCurlEasyRequest();
+
+ if(!mCurlRequest->isValid()) //failed.
+ {
+ delete mCurlRequest ;
+ mCurlRequest = NULL ;
+ }
}
LLURLRequestDetail::~LLURLRequestDetail()
{
LLMemType m1(LLMemType::MTYPE_IO_URL_REQUEST);
delete mCurlRequest;
- mResponseBuffer = NULL;
mLastRead = NULL;
}
+void LLURLRequest::setSSLVerifyCallback(SSLCertVerifyCallback callback, void *param)
+{
+ mDetail->mSSLVerifyCallback = callback;
+ mDetail->mCurlRequest->setSSLCtxCallback(LLURLRequest::_sslCtxCallback, (void *)this);
+ mDetail->mCurlRequest->setopt(CURLOPT_SSL_VERIFYPEER, true);
+ mDetail->mCurlRequest->setopt(CURLOPT_SSL_VERIFYHOST, 2);
+}
+
+
+// _sslCtxFunction
+// Callback function called when an SSL Context is created via CURL
+// used to configure the context for custom cert validation
+
+CURLcode LLURLRequest::_sslCtxCallback(CURL * curl, void *sslctx, void *param)
+{
+ LLURLRequest *req = (LLURLRequest *)param;
+ if(req == NULL || req->mDetail->mSSLVerifyCallback == NULL)
+ {
+ SSL_CTX_set_cert_verify_callback((SSL_CTX *)sslctx, NULL, NULL);
+ return CURLE_OK;
+ }
+ SSL_CTX * ctx = (SSL_CTX *) sslctx;
+ // disable any default verification for server certs
+ SSL_CTX_set_verify(ctx, SSL_VERIFY_NONE, NULL);
+ // set the verification callback.
+ SSL_CTX_set_cert_verify_callback(ctx, req->mDetail->mSSLVerifyCallback, (void *)req);
+ // the calls are void
+ return CURLE_OK;
+
+}
/**
* class LLURLRequest
@@ -157,6 +189,7 @@ std::string LLURLRequest::getURL() const
{
return mDetail->mURL;
}
+
void LLURLRequest::addHeader(const char* header)
{
LLMemType m1(LLMemType::MTYPE_IO_URL_REQUEST);
@@ -169,12 +202,6 @@ void LLURLRequest::setBodyLimit(U32 size)
mDetail->mIsBodyLimitSet = true;
}
-void LLURLRequest::checkRootCertificate(bool check)
-{
- mDetail->mCurlRequest->setopt(CURLOPT_SSL_VERIFYPEER, (check? TRUE : FALSE));
- mDetail->mCurlRequest->setoptString(CURLOPT_ENCODING, "");
-}
-
void LLURLRequest::setCallback(LLURLRequestComplete* callback)
{
LLMemType m1(LLMemType::MTYPE_IO_URL_REQUEST);
@@ -213,9 +240,9 @@ void LLURLRequest::useProxy(bool use_proxy)
}
}
- LL_DEBUGS("Proxy") << "use_proxy = " << (use_proxy?'Y':'N') << ", env_proxy = " << (!env_proxy.empty() ? env_proxy : "(null)") << LL_ENDL;
+ lldebugs << "use_proxy = " << (use_proxy?'Y':'N') << ", env_proxy = \"" << env_proxy << "\"" << llendl;
- if (use_proxy && !env_proxy.empty())
+ if (use_proxy)
{
mDetail->mCurlRequest->setoptString(CURLOPT_PROXY, env_proxy);
}
@@ -235,12 +262,24 @@ void LLURLRequest::allowCookies()
mDetail->mCurlRequest->setoptString(CURLOPT_COOKIEFILE, "");
}
+//virtual
+bool LLURLRequest::isValid()
+{
+ return mDetail->mCurlRequest && mDetail->mCurlRequest->isValid();
+}
+
// virtual
LLIOPipe::EStatus LLURLRequest::handleError(
LLIOPipe::EStatus status,
LLPumpIO* pump)
{
LLMemType m1(LLMemType::MTYPE_IO_URL_REQUEST);
+
+ if(!isValid())
+ {
+ return STATUS_EXPIRED ;
+ }
+
if(mCompletionCallback && pump)
{
LLURLRequestComplete* complete = NULL;
@@ -270,8 +309,7 @@ LLIOPipe::EStatus LLURLRequest::process_impl(
LLMemType m1(LLMemType::MTYPE_IO_URL_REQUEST);
//llinfos << "LLURLRequest::process_impl()" << llendl;
if (!buffer) return STATUS_ERROR;
- if (!mDetail) return STATUS_ERROR; //Seems to happen on occasion. Need to hunt down why.
-
+
// we're still waiting or prcessing, check how many
// bytes we have accumulated.
const S32 MIN_ACCUMULATION = 100000;
@@ -310,7 +348,7 @@ LLIOPipe::EStatus LLURLRequest::process_impl(
// *FIX: bit of a hack, but it should work. The configure and
// callback method expect this information to be ready.
- mDetail->mResponseBuffer = buffer.get();
+ mDetail->mResponseBuffer = buffer;
mDetail->mChannels = channels;
if(!configure())
{
@@ -329,7 +367,10 @@ LLIOPipe::EStatus LLURLRequest::process_impl(
static LLFastTimer::DeclareTimer FTM_URL_PERFORM("Perform");
{
LLFastTimer t(FTM_URL_PERFORM);
- mDetail->mCurlRequest->perform();
+ if(!mDetail->mCurlRequest->wait())
+ {
+ return status ;
+ }
}
while(1)
@@ -424,6 +465,12 @@ void LLURLRequest::initialize()
LLMemType m1(LLMemType::MTYPE_IO_URL_REQUEST);
mState = STATE_INITIALIZED;
mDetail = new LLURLRequestDetail;
+
+ if(!isValid())
+ {
+ return ;
+ }
+
mDetail->mCurlRequest->setopt(CURLOPT_NOSIGNAL, 1);
mDetail->mCurlRequest->setWriteCallback(&downCallback, (void*)this);
mDetail->mCurlRequest->setReadCallback(&upCallback, (void*)this);
diff --git a/indra/llmessage/llurlrequest.h b/indra/llmessage/llurlrequest.h
index 11f4f4379..44d358d90 100644
--- a/indra/llmessage/llurlrequest.h
+++ b/indra/llmessage/llurlrequest.h
@@ -4,31 +4,25 @@
* @date 2005-04-21
* @brief Declaration of url based requests on pipes.
*
- * $LicenseInfo:firstyear=2005&license=viewergpl$
- *
- * Copyright (c) 2005-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2005&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
@@ -44,6 +38,9 @@
#include "lliopipe.h"
#include "llchainio.h"
#include "llerror.h"
+#include
+#include "llcurl.h"
+
extern const std::string CONTEXT_REQUEST;
extern const std::string CONTEXT_DEST_URI_SD_LABEL;
@@ -71,6 +68,8 @@ class LLURLRequest : public LLIOPipe
{
LOG_CLASS(LLURLRequest);
public:
+
+ typedef int (* SSLCertVerifyCallback)(X509_STORE_CTX *ctx, void *param);
/**
* @brief This enumeration is for specifying the type of request.
*/
@@ -142,8 +141,9 @@ public:
* Set whether request will check that remote server
* certificates are signed by a known root CA when using HTTPS.
*/
- void checkRootCertificate(bool check);
+ void setSSLVerifyCallback(SSLCertVerifyCallback callback, void * param);
+
/**
* @brief Return at most size bytes of body.
*
@@ -188,11 +188,14 @@ public:
*/
void allowCookies();
+ /*virtual*/ bool isValid() ;
+
public:
/**
* @brief Give this pipe a chance to handle a generated error
*/
virtual EStatus handleError(EStatus status, LLPumpIO* pump);
+
protected:
/**
@@ -221,6 +224,8 @@ protected:
S32 mRequestTransferedBytes;
S32 mResponseTransferedBytes;
+ static CURLcode _sslCtxCallback(CURL * curl, void *sslctx, void *param);
+
private:
/**
* @brief Initialize the object. Called during construction.
diff --git a/indra/llmessage/lluseroperation.cpp b/indra/llmessage/lluseroperation.cpp
index 9736efe9c..a4a68d0c8 100644
--- a/indra/llmessage/lluseroperation.cpp
+++ b/indra/llmessage/lluseroperation.cpp
@@ -2,31 +2,25 @@
* @file lluseroperation.cpp
* @brief LLUserOperation class definition.
*
- * $LicenseInfo:firstyear=2002&license=viewergpl$
- *
- * Copyright (c) 2002-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2002&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/lluseroperation.h b/indra/llmessage/lluseroperation.h
index b3988c069..7db5f0b27 100644
--- a/indra/llmessage/lluseroperation.h
+++ b/indra/llmessage/lluseroperation.h
@@ -3,31 +3,25 @@
* @brief LLUserOperation class header file - used for message based
* transaction. For example, L$ transactions.
*
- * $LicenseInfo:firstyear=2002&license=viewergpl$
- *
- * Copyright (c) 2002-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2002&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/llvehicleparams.h b/indra/llmessage/llvehicleparams.h
index a83917116..f34df7744 100644
--- a/indra/llmessage/llvehicleparams.h
+++ b/indra/llmessage/llvehicleparams.h
@@ -3,31 +3,25 @@
* @brief For parameter names that must be shared between the
* scripting language and the LLVehicleAction class on the simulator.
*
- * $LicenseInfo:firstyear=2003&license=viewergpl$
- *
- * Copyright (c) 2003-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2003&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/llxfer.cpp b/indra/llmessage/llxfer.cpp
index 7aa833ee3..f8c55d52a 100644
--- a/indra/llmessage/llxfer.cpp
+++ b/indra/llmessage/llxfer.cpp
@@ -2,31 +2,25 @@
* @file llxfer.cpp
* @brief implementation of LLXfer class for a single xfer.
*
- * $LicenseInfo:firstyear=2001&license=viewergpl$
- *
- * Copyright (c) 2001-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2001&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/llxfer.h b/indra/llmessage/llxfer.h
index bd81462c6..989e8b2ca 100644
--- a/indra/llmessage/llxfer.h
+++ b/indra/llmessage/llxfer.h
@@ -2,31 +2,25 @@
* @file llxfer.h
* @brief definition of LLXfer class for a single xfer
*
- * $LicenseInfo:firstyear=2001&license=viewergpl$
- *
- * Copyright (c) 2001-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2001&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/llxfer_file.cpp b/indra/llmessage/llxfer_file.cpp
index 80bea375e..9e02af2c3 100644
--- a/indra/llmessage/llxfer_file.cpp
+++ b/indra/llmessage/llxfer_file.cpp
@@ -2,31 +2,25 @@
* @file llxfer_file.cpp
* @brief implementation of LLXfer_File class for a single xfer (file)
*
- * $LicenseInfo:firstyear=2001&license=viewergpl$
- *
- * Copyright (c) 2001-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2001&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/llxfer_file.h b/indra/llmessage/llxfer_file.h
index df29135a1..a37dda673 100644
--- a/indra/llmessage/llxfer_file.h
+++ b/indra/llmessage/llxfer_file.h
@@ -2,31 +2,25 @@
* @file llxfer_file.h
* @brief definition of LLXfer_File class for a single xfer_file.
*
- * $LicenseInfo:firstyear=2001&license=viewergpl$
- *
- * Copyright (c) 2001-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2001&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/llxfer_mem.cpp b/indra/llmessage/llxfer_mem.cpp
index 0d81fd5ee..4c7e83c33 100644
--- a/indra/llmessage/llxfer_mem.cpp
+++ b/indra/llmessage/llxfer_mem.cpp
@@ -2,31 +2,25 @@
* @file llxfer_mem.cpp
* @brief implementation of LLXfer_Mem class for a single xfer
*
- * $LicenseInfo:firstyear=2001&license=viewergpl$
- *
- * Copyright (c) 2001-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2001&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/llxfer_mem.h b/indra/llmessage/llxfer_mem.h
index fa1b4cf5e..b5adf837d 100644
--- a/indra/llmessage/llxfer_mem.h
+++ b/indra/llmessage/llxfer_mem.h
@@ -2,31 +2,25 @@
* @file llxfer_mem.h
* @brief definition of LLXfer_Mem class for a single xfer
*
- * $LicenseInfo:firstyear=2001&license=viewergpl$
- *
- * Copyright (c) 2001-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2001&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/llxfer_vfile.cpp b/indra/llmessage/llxfer_vfile.cpp
index 625cf4aeb..751a69518 100644
--- a/indra/llmessage/llxfer_vfile.cpp
+++ b/indra/llmessage/llxfer_vfile.cpp
@@ -2,31 +2,25 @@
* @file llxfer_vfile.cpp
* @brief implementation of LLXfer_VFile class for a single xfer (vfile).
*
- * $LicenseInfo:firstyear=2002&license=viewergpl$
- *
- * Copyright (c) 2002-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2002&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/llxfer_vfile.h b/indra/llmessage/llxfer_vfile.h
index 8f5b19335..048bf49dc 100644
--- a/indra/llmessage/llxfer_vfile.h
+++ b/indra/llmessage/llxfer_vfile.h
@@ -2,31 +2,25 @@
* @file llxfer_vfile.h
* @brief definition of LLXfer_VFile class for a single xfer_vfile.
*
- * $LicenseInfo:firstyear=2002&license=viewergpl$
- *
- * Copyright (c) 2002-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2002&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/llxfermanager.cpp b/indra/llmessage/llxfermanager.cpp
index 209bdb224..b9cddc8e4 100644
--- a/indra/llmessage/llxfermanager.cpp
+++ b/indra/llmessage/llxfermanager.cpp
@@ -2,31 +2,25 @@
* @file llxfermanager.cpp
* @brief implementation of LLXferManager class for a collection of xfers
*
- * $LicenseInfo:firstyear=2001&license=viewergpl$
- *
- * Copyright (c) 2001-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2001&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/llxfermanager.h b/indra/llmessage/llxfermanager.h
index 0a83f8410..b84bccb5b 100644
--- a/indra/llmessage/llxfermanager.h
+++ b/indra/llmessage/llxfermanager.h
@@ -3,31 +3,25 @@
* @brief definition of LLXferManager class for a keeping track of
* multiple xfers
*
- * $LicenseInfo:firstyear=2001&license=viewergpl$
- *
- * Copyright (c) 2001-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2001&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/llxorcipher.cpp b/indra/llmessage/llxorcipher.cpp
index fbcd893dc..9053e1b2f 100644
--- a/indra/llmessage/llxorcipher.cpp
+++ b/indra/llmessage/llxorcipher.cpp
@@ -2,31 +2,25 @@
* @file llxorcipher.cpp
* @brief Implementation of LLXORCipher
*
- * $LicenseInfo:firstyear=2003&license=viewergpl$
- *
- * Copyright (c) 2003-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2003&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/llxorcipher.h b/indra/llmessage/llxorcipher.h
index ef2bfd63f..c5b0700f0 100644
--- a/indra/llmessage/llxorcipher.h
+++ b/indra/llmessage/llxorcipher.h
@@ -1,31 +1,25 @@
/**
* @file llxorcipher.h
*
- * $LicenseInfo:firstyear=2003&license=viewergpl$
- *
- * Copyright (c) 2003-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2003&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/machine.cpp b/indra/llmessage/machine.cpp
index 297ea58a3..8d2f51203 100644
--- a/indra/llmessage/machine.cpp
+++ b/indra/llmessage/machine.cpp
@@ -2,33 +2,26 @@
* @file machine.cpp
* @brief LLMachine class header file
*
- * $LicenseInfo:firstyear=2001&license=viewergpl$
- *
- * Copyright (c) 2001-2010, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2001&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. Terms of
- * the GPL can be found in doc/GPL-license.txt in this distribution, or
- * online at http://secondlife.com/developers/opensource/gplv2
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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://secondlife.com/developers/opensource/flossexception
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
- *
*/
#include "linden_common.h"
diff --git a/indra/llmessage/machine.h b/indra/llmessage/machine.h
index 6da8e5e04..07aadd47d 100644
--- a/indra/llmessage/machine.h
+++ b/indra/llmessage/machine.h
@@ -2,31 +2,25 @@
* @file machine.h
* @brief LLMachine class header file
*
- * $LicenseInfo:firstyear=2001&license=viewergpl$
- *
- * Copyright (c) 2001-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2001&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/mean_collision_data.h b/indra/llmessage/mean_collision_data.h
index a6c635e81..29de09160 100644
--- a/indra/llmessage/mean_collision_data.h
+++ b/indra/llmessage/mean_collision_data.h
@@ -3,31 +3,25 @@
* @brief data type to log interactions between stuff and agents that
* might be community standards violations
*
- * $LicenseInfo:firstyear=2000&license=viewergpl$
- *
- * Copyright (c) 2000-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2000&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/message.cpp b/indra/llmessage/message.cpp
index 013aea32b..7d21e35f9 100644
--- a/indra/llmessage/message.cpp
+++ b/indra/llmessage/message.cpp
@@ -2,31 +2,25 @@
* @file message.cpp
* @brief LLMessageSystem class implementation
*
- * $LicenseInfo:firstyear=2001&license=viewergpl$
- *
- * Copyright (c) 2001-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2001&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
@@ -88,11 +82,6 @@
#include "lltransfertargetvfile.h"
#include "llmemtype.h"
-//
-#include "llrand.h"
-#include "llmessagelog.h"
-//
-
// Constants
//const char* MESSAGE_LOG_FILENAME = "message.log";
static const F32 CIRCUIT_DUMP_TIMEOUT = 30.f;
@@ -529,10 +518,10 @@ LLCircuitData* LLMessageSystem::findCircuit(const LLHost& host,
}
// Returns TRUE if a valid, on-circuit message has been received.
-BOOL LLMessageSystem::checkMessages( S64 frame_count, bool faked_message, U8 fake_buffer[MAX_BUFFER_SIZE], LLHost fake_host, S32 fake_size )
+BOOL LLMessageSystem::checkMessages( S64 frame_count )
{
// Pump
- BOOL valid_packet = FALSE;
+ BOOL valid_packet = FALSE;
mMessageReader = mTemplateMessageReader;
LLTransferTargetVFile::updateQueue();
@@ -558,25 +547,14 @@ BOOL LLMessageSystem::checkMessages( S64 frame_count, bool faked_message, U8 fak
S32 true_rcv_size = 0;
U8* buffer = mTrueReceiveBuffer;
-
- if(!faked_message)
- {
- mTrueReceiveSize = mPacketRing.receivePacket(mSocket, (char *)mTrueReceiveBuffer);
- receive_size = mTrueReceiveSize;
- mLastSender = mPacketRing.getLastSender();
- mLastReceivingIF = mPacketRing.getLastReceivingInterface();
- } else {
- buffer = fake_buffer; //true my ass.
- mTrueReceiveSize = fake_size;
- receive_size = mTrueReceiveSize;
- mLastSender = fake_host;
- mLastReceivingIF = mPacketRing.getLastReceivingInterface(); //don't really give two tits about the interface, just leave it
- }
+ mTrueReceiveSize = mPacketRing.receivePacket(mSocket, (char *)mTrueReceiveBuffer);
// If you want to dump all received packets into SecondLife.log, uncomment this
//dumpPacketToLog();
-
+ receive_size = mTrueReceiveSize;
+ mLastSender = mPacketRing.getLastSender();
+ mLastReceivingIF = mPacketRing.getLastReceivingInterface();
if (receive_size < (S32) LL_MINIMUM_VALID_PACKET_SIZE)
{
@@ -596,7 +574,7 @@ BOOL LLMessageSystem::checkMessages( S64 frame_count, bool faked_message, U8 fak
LLCircuitData* cdp;
// note if packet acks are appended.
- if(buffer[0] & LL_ACK_FLAG && !faked_message)
+ if(buffer[0] & LL_ACK_FLAG)
{
acks += buffer[--receive_size];
true_rcv_size = receive_size;
@@ -619,7 +597,6 @@ BOOL LLMessageSystem::checkMessages( S64 frame_count, bool faked_message, U8 fak
// process the message as normal
mIncomingCompressedSize = zeroCodeExpand(&buffer, &receive_size);
mCurrentRecvPacketID = ntohl(*((U32*)(&buffer[1])));
-
host = getSender();
const bool resetPacketId = true;
@@ -629,7 +606,7 @@ BOOL LLMessageSystem::checkMessages( S64 frame_count, bool faked_message, U8 fak
// this message came in on if it's valid, and NULL if the
// circuit was bogus.
- if(cdp && (acks > 0) && ((S32)(acks * sizeof(TPACKETID)) < (true_rcv_size)) && !faked_message)
+ if(cdp && (acks > 0) && ((S32)(acks * sizeof(TPACKETID)) < (true_rcv_size)))
{
TPACKETID packet_id;
U32 mem_id=0;
@@ -702,7 +679,6 @@ BOOL LLMessageSystem::checkMessages( S64 frame_count, bool faked_message, U8 fak
// But we don't want to acknowledge UseCircuitCode until the circuit is
// available, which is why the acknowledgement test is done above. JC
bool trusted = cdp && cdp->getTrusted();
-
valid_packet = mTemplateMessageReader->validateMessage(
buffer,
receive_size,
@@ -1573,13 +1549,6 @@ void LLMessageSystem::getCircuitInfo(LLSD& info) const
mCircuitInfo.getInfo(info);
}
-//
-LLCircuit* LLMessageSystem::getCircuit()
-{
- return &mCircuitInfo;
-}
-//
-
// returns whether the given host is on a trusted circuit
BOOL LLMessageSystem::getCircuitTrust(const LLHost &host)
{
@@ -1859,11 +1828,7 @@ void open_circuit(LLMessageSystem *msgsystem, void** /*user_data*/)
msgsystem->getIPPortFast(_PREHASH_CircuitInfo, _PREHASH_Port, port);
// By default, OpenCircuit's are untrusted
- //
-//#ifndef LL_RELEASE_FOR_DOWNLOAD
- llwarns << "OpenCircuit " << LLHost(ip, port) << llendl;
-//#endif
- // msgsystem->enableCircuit(LLHost(ip, port), FALSE);
+ msgsystem->enableCircuit(LLHost(ip, port), FALSE);
}
void close_circuit(LLMessageSystem *msgsystem, void** /*user_data*/)
@@ -2461,7 +2426,7 @@ void dump_prehash_files()
" * @file message_prehash.h\n"
" * @brief header file of externs of prehashed variables plus defines.\n"
" *\n"
- " * $LicenseInfo:firstyear=2003&license=viewergpl$"
+ " * $LicenseInfo:firstyear=2003&license=viewerlgpl$"
" * $/LicenseInfo$"
" */\n\n"
"#ifndef LL_MESSAGE_PREHASH_H\n#define LL_MESSAGE_PREHASH_H\n\n");
@@ -2492,7 +2457,7 @@ void dump_prehash_files()
" * @file message_prehash.cpp\n"
" * @brief file of prehashed variables\n"
" *\n"
- " * $LicenseInfo:firstyear=2003&license=viewergpl$"
+ " * $LicenseInfo:firstyear=2003&license=viewerlgpl$"
" * $/LicenseInfo$"
" */\n\n"
"/**\n"
@@ -4082,11 +4047,4 @@ const LLHost& LLMessageSystem::getSender() const
LLHTTPRegistration >
gHTTPRegistrationTrustedMessageWildcard("/trusted-message/");
-//
-// Copypasta from LLTemplateMessageReader
-BOOL LLMessageSystem::decodeTemplate( const U8* buffer, S32 buffer_size, LLMessageTemplate** msg_template )
-{
- return(TRUE);
-}
-// message_template_name_map_t;
typedef std::map message_template_number_map_t;
-//
-//private:
-//
+private:
message_template_name_map_t mMessageTemplates;
message_template_number_map_t mMessageNumbers;
-//
-//public:
-//
+
+public:
S32 mSystemVersionMajor;
S32 mSystemVersionMinor;
S32 mSystemVersionPatch;
@@ -345,7 +335,7 @@ public:
bool addCircuitCode(U32 code, const LLUUID& session_id);
BOOL poll(F32 seconds); // Number of seconds that we want to block waiting for data, returns if data was received
- BOOL checkMessages( S64 frame_count = 0, bool faked_message = false, U8 fake_buffer[MAX_BUFFER_SIZE] = NULL, LLHost fake_host = LLHost(), S32 fake_size = 0 );
+ BOOL checkMessages( S64 frame_count = 0 );
void processAcks();
BOOL isMessageFast(const char *msg);
@@ -513,6 +503,22 @@ private:
public:
// BOOL decodeData(const U8 *buffer, const LLHost &host);
+ /**
+ gets binary data from the current message.
+
+ @param blockname the name of the block in the message (from the message template)
+
+ @param varname
+
+ @param datap
+
+ @param size expected size - set to zero to get any amount of data up to max_size.
+ Make sure max_size is set in that case!
+
+ @param blocknum
+
+ @param max_size the max number of bytes to read
+ */
void getBinaryDataFast(const char *blockname, const char *varname, void *datap, S32 size, S32 blocknum = 0, S32 max_size = S32_MAX);
void getBinaryData(const char *blockname, const char *varname, void *datap, S32 size, S32 blocknum = 0, S32 max_size = S32_MAX);
void getBOOLFast( const char *block, const char *var, BOOL &data, S32 blocknum = 0);
@@ -572,9 +578,6 @@ public:
void showCircuitInfo();
void getCircuitInfo(LLSD& info) const;
- //
- LLCircuit* getCircuit();
- //
U32 getOurCircuitCode();
@@ -613,6 +616,7 @@ public:
// Change this message to be UDP black listed.
void banUdpMessage(const std::string& name);
+
private:
// A list of the circuits that need to be sent DenyTrustedCircuit messages.
typedef std::set host_set_t;
@@ -754,13 +758,7 @@ private:
LLUUID mSessionID;
void addTemplate(LLMessageTemplate *templatep);
-//
-public:
-//
BOOL decodeTemplate( const U8* buffer, S32 buffer_size, LLMessageTemplate** msg_template );
-//
-private:
-//
void logMsgFromInvalidCircuit( const LLHost& sender, BOOL recv_reliable );
void logTrustedMsgFromUntrustedCircuit( const LLHost& sender );
@@ -818,16 +816,12 @@ private:
S32 mIncomingCompressedSize; // original size of compressed msg (0 if uncomp.)
TPACKETID mCurrentRecvPacketID; // packet ID of current receive packet (for reporting)
- //
-public:
LLMessageBuilder* mMessageBuilder;
LLTemplateMessageBuilder* mTemplateMessageBuilder;
LLSDMessageBuilder* mLLSDMessageBuilder;
LLMessageReader* mMessageReader;
LLTemplateMessageReader* mTemplateMessageReader;
LLSDMessageReader* mLLSDMessageReader;
-private:
- //
friend class LLMessageHandlerBridge;
diff --git a/indra/llmessage/message_prehash.cpp b/indra/llmessage/message_prehash.cpp
index 8e3b85842..58389f932 100644
--- a/indra/llmessage/message_prehash.cpp
+++ b/indra/llmessage/message_prehash.cpp
@@ -1,38 +1,32 @@
/**
-* @file message_prehash.cpp
-* @brief file of prehashed variables
-*
-* $LicenseInfo:firstyear=2003&license=viewergpl$
-*
-* Copyright (c) 2003-2009, Linden Research, Inc.
-*
-* Second Life Viewer Source Code
-* The source code in this file ("Source Code") is provided by Linden Lab
-* to you under the terms of the GNU General Public License, version 2.0
-* ("GPL"), unless you have obtained a separate licensing agreement
-* ("Other License"), formally executed by you and Linden Lab. 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 LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
-* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
-* COMPLETENESS OR PERFORMANCE.
-* $/LicenseInfo$
-*/
+ * @file message_prehash.cpp
+ * @brief file of prehashed variables
+ *
+ * $LicenseInfo:firstyear=2003&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
/**
-* Generated from message template version number 2.000
-*/
+ * Generated from message template version number 2.000
+ */
#include "linden_common.h"
#include "message.h"
@@ -1387,4 +1381,3 @@ char const* const _PREHASH_ProductSKU = LLMessageStringTable::getInstance()->get
char const* const _PREHASH_SeeAVs = LLMessageStringTable::getInstance()->getString("SeeAVs");
char const* const _PREHASH_AnyAVSounds = LLMessageStringTable::getInstance()->getString("AnyAVSounds");
char const* const _PREHASH_GroupAVSounds = LLMessageStringTable::getInstance()->getString("GroupAVSounds");
-char const* const _PREHASH_Language = LLMessageStringTable::getInstance()->getString("Language");
diff --git a/indra/llmessage/message_prehash.h b/indra/llmessage/message_prehash.h
index 32a0c433b..48ad2c743 100644
--- a/indra/llmessage/message_prehash.h
+++ b/indra/llmessage/message_prehash.h
@@ -2,31 +2,25 @@
* @file message_prehash.h
* @brief header file of externs of prehashed variables plus defines.
*
- * $LicenseInfo:firstyear=2003&license=viewergpl$
- *
- * Copyright (c) 2003-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2003&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/message_string_table.cpp b/indra/llmessage/message_string_table.cpp
index cd6010354..dd063fcb8 100644
--- a/indra/llmessage/message_string_table.cpp
+++ b/indra/llmessage/message_string_table.cpp
@@ -2,31 +2,25 @@
* @file message_string_table.cpp
* @brief static string table for message template
*
- * $LicenseInfo:firstyear=2001&license=viewergpl$
- *
- * Copyright (c) 2001-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2001&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/net.cpp b/indra/llmessage/net.cpp
index 3906dfa53..85aef5da0 100644
--- a/indra/llmessage/net.cpp
+++ b/indra/llmessage/net.cpp
@@ -2,31 +2,25 @@
* @file net.cpp
* @brief Cross-platform routines for sending and receiving packets.
*
- * $LicenseInfo:firstyear=2000&license=viewergpl$
- *
- * Copyright (c) 2000-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2000&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
@@ -56,8 +50,6 @@
#include "lltimer.h"
#include "indra_constants.h"
-#include "llsocks5.h"
-
// Globals
#if LL_WINDOWS
@@ -181,7 +173,7 @@ U32 ip_string_to_u32(const char* ip_string)
// use wildcard addresses. -Ambroff
U32 ip = inet_addr(ip_string);
if (ip == INADDR_NONE
- && strncmp(ip_string, BROADCAST_ADDRESS_STRING, MAXADDRSTR) != 0)
+ && strncmp(ip_string, BROADCAST_ADDRESS_STRING, MAXADDRSTR) != 0)
{
llwarns << "ip_string_to_u32() failed, Error: Invalid IP string '" << ip_string << "'" << llendl;
return INVALID_HOST_IP_ADDRESS;
@@ -196,94 +188,10 @@ U32 ip_string_to_u32(const char* ip_string)
#if LL_WINDOWS
-int tcp_handshake(S32 handle, char * dataout, int outlen, char * datain, int maxinlen)
-{
- int result;
- result = send(handle, dataout, outlen, 0);
- if (result != outlen)
- {
- S32 err = WSAGetLastError();
- llwarns << "Error sending data to proxy control channel, number of bytes sent were " << result << " error code was " << err << llendl;
- return -1;
- }
-
- result = recv(handle, datain, maxinlen, 0);
- if (result != maxinlen)
- {
- S32 err = WSAGetLastError();
- llwarns << "Error receiving data from proxy control channel, number of bytes received were " << result << " error code was " << err << llendl;
- return -1;
- }
-
- return 0;
-}
-
-S32 tcp_open_channel(LLHost host)
-{
- // Open a TCP channel
- // Jump through some hoops to ensure that if the request hosts is down
- // or not reachable connect() does not block
-
- S32 handle;
- handle = socket(AF_INET, SOCK_STREAM, 0);
- if (!handle)
- {
- llwarns << "Error opening TCP control socket, socket() returned " << handle << llendl;
- return -1;
- }
-
- struct sockaddr_in address;
- address.sin_port = htons(host.getPort());
- address.sin_family = AF_INET;
- address.sin_addr.s_addr = host.getAddress();
-
- // Non blocking
- WSAEVENT hEvent=WSACreateEvent();
- WSAEventSelect(handle, hEvent, FD_CONNECT) ;
- connect(handle, (struct sockaddr*)&address, sizeof(address)) ;
- // Wait fot 5 seconds, if we can't get a TCP channel open in this
- // time frame then there is something badly wrong.
- WaitForSingleObject(hEvent, 1000*5); // 5 seconds time out
-
- WSANETWORKEVENTS netevents;
- WSAEnumNetworkEvents(handle,hEvent,&netevents);
-
- // Check the async event status to see if we connected
- if ((netevents.lNetworkEvents & FD_CONNECT) == FD_CONNECT)
- {
- if (netevents.iErrorCode[FD_CONNECT_BIT] != 0)
- {
- llwarns << "Unable to open TCP channel, WSA returned an error code of " << netevents.iErrorCode[FD_CONNECT_BIT] << llendl;
- WSACloseEvent(hEvent);
- return -1;
- }
-
- // Now we are connected disable non blocking
- // we don't need support an async interface as
- // currently our only consumer (socks5) will make one round
- // of packets then just hold the connection open
- WSAEventSelect(handle, hEvent, NULL) ;
- unsigned long NonBlock = 0;
- ioctlsocket(handle, FIONBIO, &NonBlock);
-
- return handle;
- }
-
- llwarns << "Unable to open TCP channel, Timeout is the host up?" << netevents.iErrorCode[FD_CONNECT_BIT] << llendl;
- return -1;
-}
-
-void tcp_close_channel(S32 handle)
-{
- llinfos << "Closing TCP channel" << llendl;
- shutdown(handle, SD_BOTH);
- closesocket(handle);
-}
-
S32 start_net(S32& socket_out, int& nPort)
{
// Create socket, make non-blocking
- // Init WinSock
+ // Init WinSock
int nRet;
int hSocket;
@@ -292,7 +200,7 @@ S32 start_net(S32& socket_out, int& nPort)
int buff_size = 4;
// Initialize windows specific stuff
- if(WSAStartup(0x0202, &stWSAData))
+ if (WSAStartup(0x0202, &stWSAData))
{
S32 err = WSAGetLastError();
WSACleanup();
@@ -301,8 +209,8 @@ S32 start_net(S32& socket_out, int& nPort)
}
// Get a datagram socket
- hSocket = (int)socket(AF_INET, SOCK_DGRAM, 0);
- if (hSocket == INVALID_SOCKET)
+ hSocket = (int)socket(AF_INET, SOCK_DGRAM, 0);
+ if (hSocket == INVALID_SOCKET)
{
S32 err = WSAGetLastError();
WSACleanup();
@@ -393,11 +301,9 @@ S32 start_net(S32& socket_out, int& nPort)
LL_DEBUGS("AppInit") << "startNet - send buffer size : " << snd_size << LL_ENDL;
// Setup a destination address
- //char achMCAddr[MAXADDRSTR] = " "; /* Flawfinder: ignore */
stDstAddr.sin_family = AF_INET;
- //stDstAddr.sin_addr.s_addr = inet_addr(achMCAddr);
- stDstAddr.sin_addr.s_addr = INVALID_HOST_IP_ADDRESS; //Not so sure about this...
- stDstAddr.sin_port = htons(nPort);
+ stDstAddr.sin_addr.s_addr = INVALID_HOST_IP_ADDRESS;
+ stDstAddr.sin_port = htons(nPort);
socket_out = hSocket;
return 0;
@@ -437,7 +343,6 @@ S32 receive_packet(int hSocket, char * receiveBuffer)
// Returns TRUE on success.
BOOL send_packet(int hSocket, const char *sendBuffer, int size, U32 recipient, int nPort)
{
-
// Sends a packet to the address set in initNet
//
int nRet = 0;
@@ -479,77 +384,6 @@ BOOL send_packet(int hSocket, const char *sendBuffer, int size, U32 recipient, i
#else
-
-int tcp_handshake(S32 handle, char * dataout, int outlen, char * datain, int maxinlen)
-{
- if (send(handle, dataout, outlen, 0) != outlen)
- {
- llwarns << "Error sending data to proxy control channel" << llendl;
- return -1;
- }
-
- if (recv(handle, datain, maxinlen, 0) != maxinlen)
- {
- llwarns << "Error receiving data to proxy control channel" << llendl;
- return -1;
- }
-
- return 0;
-}
-
-S32 tcp_open_channel(LLHost host)
-{
- S32 handle;
- handle = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
- if (!handle)
- {
- llwarns << "Error opening TCP control socket, socket() returned " << handle << llendl;
- return -1;
- }
-
- struct sockaddr_in address;
- address.sin_port = htons(host.getPort());
- address.sin_family = AF_INET;
- address.sin_addr.s_addr = host.getAddress();
-
- // Set the socket to non blocking for the connect()
- int flags = fcntl(handle, F_GETFL, 0);
- fcntl(handle, F_SETFL, flags | O_NONBLOCK);
-
- S32 error = connect(handle, (sockaddr*)&address, sizeof(address));
- if (error && (errno != EINPROGRESS))
- {
- llwarns << "Unable to open TCP channel, error code: " << errno << llendl;
- return -1;
- }
-
- struct timeval timeout;
- timeout.tv_sec = 5; // Maximum time to wait for the connect() to complete
- timeout.tv_usec = 0;
- fd_set fds;
- FD_ZERO(&fds);
- FD_SET(handle, &fds);
-
- // See if we have connectde or time out after 5 seconds
- U32 rc = select(sizeof(fds)*8, NULL, &fds, NULL, &timeout);
-
- if (rc != 1) // we require exactly one descriptor to be set
- {
- llwarns << "Unable to open TCP channel" << llendl;
- return -1;
- }
-
- // Return the socket to blocking operations
- fcntl(handle, F_SETFL, flags);
-
- return handle;
-}
-
-void tcp_close_channel(S32 handle)
-{
- close(handle);
-}
-
// Create socket, make non-blocking
S32 start_net(S32& socket_out, int& nPort)
{
@@ -558,10 +392,10 @@ S32 start_net(S32& socket_out, int& nPort)
int rec_size = RECEIVE_BUFFER_SIZE;
socklen_t buff_size = 4;
-
+
// Create socket
- hSocket = socket(AF_INET, SOCK_DGRAM, 0);
- if (hSocket < 0)
+ hSocket = socket(AF_INET, SOCK_DGRAM, 0);
+ if (hSocket < 0)
{
llwarns << "socket() failed" << llendl;
return 1;
@@ -594,7 +428,7 @@ S32 start_net(S32& socket_out, int& nPort)
}
else
{
- // Name the socket (assign the local port number to receive on)
+ // Name the socket (assign the local port number to receive on)
stLclAddr.sin_family = AF_INET;
stLclAddr.sin_addr.s_addr = htonl(INADDR_ANY);
stLclAddr.sin_port = htons(nPort);
@@ -639,7 +473,7 @@ S32 start_net(S32& socket_out, int& nPort)
nPort = attempt_port;
}
// Set socket to be non-blocking
- fcntl(hSocket, F_SETFL, O_NONBLOCK);
+ fcntl(hSocket, F_SETFL, O_NONBLOCK);
// set a large receive buffer
nRet = setsockopt(hSocket, SOL_SOCKET, SO_RCVBUF, (char *)&rec_size, buff_size);
if (nRet)
@@ -675,8 +509,8 @@ S32 start_net(S32& socket_out, int& nPort)
// Setup a destination address
char achMCAddr[MAXADDRSTR] = "127.0.0.1"; /* Flawfinder: ignore */
stDstAddr.sin_family = AF_INET;
- stDstAddr.sin_addr.s_addr = ip_string_to_u32(achMCAddr);
- stDstAddr.sin_port = htons(nPort);
+ stDstAddr.sin_addr.s_addr = ip_string_to_u32(achMCAddr);
+ stDstAddr.sin_port = htons(nPort);
socket_out = hSocket;
return 0;
@@ -702,7 +536,7 @@ static int recvfrom_destip( int socket, void *buf, int len, struct sockaddr *fro
iov[0].iov_base = buf;
iov[0].iov_len = len;
- memset( &msg, 0, sizeof msg );
+ memset(&msg, 0, sizeof msg);
msg.msg_name = from;
msg.msg_namelen = *fromlen;
msg.msg_iov = iov;
@@ -710,14 +544,14 @@ static int recvfrom_destip( int socket, void *buf, int len, struct sockaddr *fro
msg.msg_control = &cmsg;
msg.msg_controllen = sizeof(cmsg);
- size = recvmsg( socket, &msg, 0 );
+ size = recvmsg(socket, &msg, 0);
- if( size == -1 )
+ if (size == -1)
{
return -1;
}
- for( cmsgptr = CMSG_FIRSTHDR(&msg); cmsgptr != NULL; cmsgptr = CMSG_NXTHDR( &msg, cmsgptr ) )
+ for (cmsgptr = CMSG_FIRSTHDR(&msg); cmsgptr != NULL; cmsgptr = CMSG_NXTHDR( &msg, cmsgptr))
{
if( cmsgptr->cmsg_level == SOL_IP && cmsgptr->cmsg_type == IP_PKTINFO )
{
@@ -815,7 +649,7 @@ BOOL send_packet(int hSocket, const char * sendBuffer, int size, U32 recipient,
}
}
}
- while ( resend && send_attempts < 3);
+ while (resend && send_attempts < 3);
if (send_attempts >= 3)
{
diff --git a/indra/llmessage/net.h b/indra/llmessage/net.h
index 4c5688ebd..0f2437479 100644
--- a/indra/llmessage/net.h
+++ b/indra/llmessage/net.h
@@ -2,31 +2,25 @@
* @file net.h
* @brief Cross platform UDP network code.
*
- * $LicenseInfo:firstyear=2000&license=viewergpl$
- *
- * Copyright (c) 2000-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2000&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
@@ -52,10 +46,10 @@ S32 receive_packet(int hSocket, char * receiveBuffer);
BOOL send_packet(int hSocket, const char *sendBuffer, int size, U32 recipient, int nPort); // Returns TRUE on success.
//void get_sender(char * tmp);
-LLHost get_sender();
+LLHost get_sender();
U32 get_sender_port();
U32 get_sender_ip(void);
-LLHost get_receiving_interface();
+LLHost get_receiving_interface();
U32 get_receiving_interface_ip(void);
const char* u32_to_ip_string(U32 ip); // Returns pointer to internal string buffer, "(bad IP addr)" on failure, cannot nest calls
@@ -65,9 +59,6 @@ U32 ip_string_to_u32(const char* ip_string); // Wrapper for inet_addr()
extern const char* LOOPBACK_ADDRESS_STRING;
extern const char* BROADCAST_ADDRESS_STRING;
-void tcp_close_channel(S32 handle);
-S32 tcp_open_channel(LLHost host);
-int tcp_handshake(S32 handle, char * dataout, int outlen, char * datain, int maxinlen);
// useful MTU consts
diff --git a/indra/llmessage/partsyspacket.cpp b/indra/llmessage/partsyspacket.cpp
index 2f9e59acc..ad2161425 100644
--- a/indra/llmessage/partsyspacket.cpp
+++ b/indra/llmessage/partsyspacket.cpp
@@ -3,31 +3,25 @@
* @brief Object for packing particle system initialization parameters
* before sending them over the network.
*
- * $LicenseInfo:firstyear=2000&license=viewergpl$
- *
- * Copyright (c) 2000-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2000&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/partsyspacket.h b/indra/llmessage/partsyspacket.h
index b4edc8cfc..d9abecea3 100644
--- a/indra/llmessage/partsyspacket.h
+++ b/indra/llmessage/partsyspacket.h
@@ -3,31 +3,25 @@
* @brief Object for packing particle system initialization parameters
* before sending them over the network
*
- * $LicenseInfo:firstyear=2000&license=viewergpl$
- *
- * Copyright (c) 2000-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2000&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/patch_code.cpp b/indra/llmessage/patch_code.cpp
index 90fb23634..e5d7f1944 100644
--- a/indra/llmessage/patch_code.cpp
+++ b/indra/llmessage/patch_code.cpp
@@ -2,31 +2,25 @@
* @file patch_code.cpp
* @brief Encode patch DCT data into bitcode.
*
- * $LicenseInfo:firstyear=2000&license=viewergpl$
- *
- * Copyright (c) 2000-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2000&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/patch_code.h b/indra/llmessage/patch_code.h
index 82fa6bb62..4c87c9808 100644
--- a/indra/llmessage/patch_code.h
+++ b/indra/llmessage/patch_code.h
@@ -2,31 +2,25 @@
* @file patch_code.h
* @brief Function declarations for encoding and decoding patches.
*
- * $LicenseInfo:firstyear=2000&license=viewergpl$
- *
- * Copyright (c) 2000-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2000&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/patch_dct.cpp b/indra/llmessage/patch_dct.cpp
index be5e90cbb..b5518b61e 100644
--- a/indra/llmessage/patch_dct.cpp
+++ b/indra/llmessage/patch_dct.cpp
@@ -2,31 +2,25 @@
* @file patch_dct.cpp
* @brief DCT patch.
*
- * $LicenseInfo:firstyear=2000&license=viewergpl$
- *
- * Copyright (c) 2000-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2000&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/patch_dct.h b/indra/llmessage/patch_dct.h
index 663e146a8..101231ec8 100644
--- a/indra/llmessage/patch_dct.h
+++ b/indra/llmessage/patch_dct.h
@@ -2,31 +2,25 @@
* @file patch_dct.h
* @brief Function declarations for DCT and IDCT routines
*
- * $LicenseInfo:firstyear=2000&license=viewergpl$
- *
- * Copyright (c) 2000-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2000&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/patch_idct.cpp b/indra/llmessage/patch_idct.cpp
index b9a09315e..9ce35df28 100644
--- a/indra/llmessage/patch_idct.cpp
+++ b/indra/llmessage/patch_idct.cpp
@@ -2,31 +2,25 @@
* @file patch_idct.cpp
* @brief IDCT patch.
*
- * $LicenseInfo:firstyear=2000&license=viewergpl$
- *
- * Copyright (c) 2000-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2000&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/sound_ids.cpp b/indra/llmessage/sound_ids.cpp
index 7e0fec493..2b8a0807c 100644
--- a/indra/llmessage/sound_ids.cpp
+++ b/indra/llmessage/sound_ids.cpp
@@ -1,32 +1,25 @@
-/**
+/**
* @file sound_ids.cpp
- * @brief Temporary holder for sound IDs.
- *
- * $LicenseInfo:firstyear=2001&license=viewergpl$
- *
- * Copyright (c) 2001-2009, Linden Research, Inc.
*
+ * $LicenseInfo:firstyear=2001&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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 LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * Copyright (C) 2010, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
#include "linden_common.h"
@@ -45,7 +38,7 @@ const LLUUID SND_BOING ("00000000-0000-0000-0000-000000000105");
const LLUUID SND_OBJECT_CREATE ("9f1bc096-3592-411e-9b0b-c447a9ff054c");
//
-// Different bird sounds for different states
+// Different bird sounds for different states
//
const LLUUID SND_CHIRP ("00000000-0000-0000-0000-000000000106"); // Flying random chirp
diff --git a/indra/llmessage/sound_ids.h b/indra/llmessage/sound_ids.h
index f67fdd2aa..6a2e343ad 100644
--- a/indra/llmessage/sound_ids.h
+++ b/indra/llmessage/sound_ids.h
@@ -2,31 +2,25 @@
* @file sound_ids.h
* @brief Temporary holder for sound IDs.
*
- * $LicenseInfo:firstyear=2001&license=viewergpl$
- *
- * Copyright (c) 2001-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2001&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/tests/commtest.h b/indra/llmessage/tests/commtest.h
index cf1461ed2..0d149b525 100644
--- a/indra/llmessage/tests/commtest.h
+++ b/indra/llmessage/tests/commtest.h
@@ -4,31 +4,25 @@
* @date 2009-01-09
* @brief
*
- * $LicenseInfo:firstyear=2009&license=viewergpl$
- *
- * Copyright (c) 2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2009&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
@@ -40,7 +34,67 @@
#include "llsd.h"
#include "llhost.h"
#include "stringize.h"
+#include
#include
+#include
+#include
+
+struct CommtestError: public std::runtime_error
+{
+ CommtestError(const std::string& what): std::runtime_error(what) {}
+};
+
+static bool query_verbose()
+{
+ const char* cbose = getenv("INTEGRATION_TEST_VERBOSE");
+ if (! cbose)
+ {
+ cbose = "1";
+ }
+ std::string strbose(cbose);
+ return (! (strbose == "0" || strbose == "off" ||
+ strbose == "false" || strbose == "quiet"));
+}
+
+bool verbose()
+{
+ // This should only be initialized once.
+ static bool vflag = query_verbose();
+ return vflag;
+}
+
+static int query_port(const std::string& var)
+{
+ const char* cport = getenv(var.c_str());
+ if (! cport)
+ {
+ throw CommtestError(STRINGIZE("missing environment variable" << var));
+ }
+ // This will throw, too, if the value of PORT isn't numeric.
+ int port(boost::lexical_cast(cport));
+ if (verbose())
+ {
+ std::cout << "getport('" << var << "') = " << port << std::endl;
+ }
+ return port;
+}
+
+static int getport(const std::string& var)
+{
+ typedef std::map portsmap;
+ static portsmap ports;
+ // We can do this with a single map lookup with map::insert(). Either it
+ // returns an existing entry and 'false' (not newly inserted), or it
+ // inserts the specified value and 'true'.
+ std::pair inserted(ports.insert(portsmap::value_type(var, 0)));
+ if (inserted.second)
+ {
+ // We haven't yet seen this var. Remember its value.
+ inserted.first->second = query_port(var);
+ }
+ // Return the (existing or new) iterator's value.
+ return inserted.first->second;
+}
/**
* This struct is shared by a couple of standalone comm tests (ADD_COMM_BUILD_TEST).
@@ -61,13 +115,21 @@ struct commtest_data
replyPump("reply"),
errorPump("error"),
success(false),
- host("127.0.0.1", 8000),
+ host("127.0.0.1", getport("PORT")),
server(STRINGIZE("http://" << host.getString() << "/"))
{
replyPump.listen("self", boost::bind(&commtest_data::outcome, this, _1, true));
errorPump.listen("self", boost::bind(&commtest_data::outcome, this, _1, false));
}
+ static int getport(const std::string& var)
+ {
+ // We have a couple consumers of commtest_data::getport(). But we've
+ // since moved it out to the global namespace. So this is just a
+ // facade.
+ return ::getport(var);
+ }
+
bool outcome(const LLSD& _result, bool _success)
{
// std::cout << "commtest_data::outcome(" << _result << ", " << _success << ")\n";
diff --git a/indra/llmessage/tests/llcurl_stub.cpp b/indra/llmessage/tests/llcurl_stub.cpp
index cefcc8799..d84fe0a49 100644
--- a/indra/llmessage/tests/llcurl_stub.cpp
+++ b/indra/llmessage/tests/llcurl_stub.cpp
@@ -2,38 +2,33 @@
* @file llcurl_stub.cpp
* @brief stub class to allow unit testing
*
- * $LicenseInfo:firstyear=2008&license=viewergpl$
- *
- * Copyright (c) 2008-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2008&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
#include "linden_common.h"
#include "llcurl.h"
-LLCurl::Responder::Responder() : mReferenceCount(0)
+LLCurl::Responder::Responder()
+ : mReferenceCount(0)
{
}
diff --git a/indra/llmessage/tests/llhttpclientadapter_test.cpp b/indra/llmessage/tests/llhttpclientadapter_test.cpp
index 7065c9d7e..13ce0a0ed 100644
--- a/indra/llmessage/tests/llhttpclientadapter_test.cpp
+++ b/indra/llmessage/tests/llhttpclientadapter_test.cpp
@@ -2,31 +2,25 @@
* @file
* @brief
*
- * $LicenseInfo:firstyear=2008&license=viewergpl$
- *
- * Copyright (c) 2008-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2008&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/tests/lltemplatemessagedispatcher_test.cpp b/indra/llmessage/tests/lltemplatemessagedispatcher_test.cpp
index 0cf49c1aa..3b04530c1 100644
--- a/indra/llmessage/tests/lltemplatemessagedispatcher_test.cpp
+++ b/indra/llmessage/tests/lltemplatemessagedispatcher_test.cpp
@@ -2,31 +2,25 @@
* @file lltrustedmessageservice_test.cpp
* @brief LLTrustedMessageService unit tests
*
- * $LicenseInfo:firstyear=2009&license=viewergpl$
- *
- * Copyright (c) 2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2009&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
@@ -60,7 +54,7 @@ BOOL LLTemplateMessageReader::readMessage(const U8* data,class LLHost const &)
}
BOOL gValidateMessage = FALSE;
-BOOL LLTemplateMessageReader::validateMessage(const U8*, S32 buffer_size, LLHost const &sender, bool trusted, BOOL custom)
+BOOL LLTemplateMessageReader::validateMessage(const U8*, S32 buffer_size, LLHost const &sender, bool trusted)
{
return gValidateMessage;
}
@@ -104,7 +98,7 @@ namespace tut
namespace
{
- tut::factory tf("LLTemplateMessageDispatcher test");
+ tut::factory tf("LLTemplateMessageDispatcher");
}
namespace tut
diff --git a/indra/llmessage/tests/lltesthttpclientadapter.cpp b/indra/llmessage/tests/lltesthttpclientadapter.cpp
index 6361f1cee..4539e4a54 100644
--- a/indra/llmessage/tests/lltesthttpclientadapter.cpp
+++ b/indra/llmessage/tests/lltesthttpclientadapter.cpp
@@ -2,31 +2,25 @@
* @file
* @brief
*
- * $LicenseInfo:firstyear=2008&license=viewergpl$
- *
- * Copyright (c) 2008-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2008&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
#include "lltesthttpclientadapter.h"
diff --git a/indra/llmessage/tests/lltesthttpclientadapter.h b/indra/llmessage/tests/lltesthttpclientadapter.h
index ac2afa8ff..c29cbb3a2 100644
--- a/indra/llmessage/tests/lltesthttpclientadapter.h
+++ b/indra/llmessage/tests/lltesthttpclientadapter.h
@@ -2,31 +2,25 @@
* @file
* @brief
*
- * $LicenseInfo:firstyear=2008&license=viewergpl$
- *
- * Copyright (c) 2008-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2008&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/tests/lltestmessagesender.cpp b/indra/llmessage/tests/lltestmessagesender.cpp
index 5e8a87f6f..ee40e0249 100644
--- a/indra/llmessage/tests/lltestmessagesender.cpp
+++ b/indra/llmessage/tests/lltestmessagesender.cpp
@@ -2,31 +2,25 @@
* @file
* @brief
*
- * $LicenseInfo:firstyear=2008&license=viewergpl$
- *
- * Copyright (c) 2008-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2008&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
#include "lltestmessagesender.h"
diff --git a/indra/llmessage/tests/lltestmessagesender.h b/indra/llmessage/tests/lltestmessagesender.h
index f57210e77..bb8928958 100644
--- a/indra/llmessage/tests/lltestmessagesender.h
+++ b/indra/llmessage/tests/lltestmessagesender.h
@@ -2,31 +2,25 @@
* @file
* @brief
*
- * $LicenseInfo:firstyear=2008&license=viewergpl$
- *
- * Copyright (c) 2008-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2008&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/llmessage/tests/lltrustedmessageservice_test.cpp b/indra/llmessage/tests/lltrustedmessageservice_test.cpp
index 0a3da4b46..b287a2984 100644
--- a/indra/llmessage/tests/lltrustedmessageservice_test.cpp
+++ b/indra/llmessage/tests/lltrustedmessageservice_test.cpp
@@ -2,31 +2,25 @@
* @file lltrustedmessageservice_test.cpp
* @brief LLTrustedMessageService unit tests
*
- * $LicenseInfo:firstyear=2009&license=viewergpl$
- *
- * Copyright (c) 2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2009&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
@@ -104,7 +98,7 @@ namespace tut
namespace
{
- tut::factory tf("LLTrustedMessageServiceData test");
+ tut::factory tf("LLTrustedMessageServiceData");
}
namespace tut
diff --git a/indra/llmessage/tests/networkio.h b/indra/llmessage/tests/networkio.h
index 0ebe369ea..23e1c791f 100644
--- a/indra/llmessage/tests/networkio.h
+++ b/indra/llmessage/tests/networkio.h
@@ -4,31 +4,25 @@
* @date 2009-01-09
* @brief
*
- * $LicenseInfo:firstyear=2009&license=viewergpl$
- *
- * Copyright (c) 2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2009&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. 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
+ * Copyright (C) 2010, Linden Research, Inc.
*
- * 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
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * 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.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
@@ -36,7 +30,6 @@
#define LL_NETWORKIO_H
#include "llmemory.h" // LLSingleton
-#include "llapr.h"
#include "llares.h"
#include "llpumpio.h"
#include "llhttpclient.h"
@@ -54,14 +47,8 @@ public:
mServicePump(NULL),
mDone(false)
{
- ll_init_apr();
- if (! gAPRPoolp)
- {
- throw std::runtime_error("Can't initialize APR");
- }
-
// Create IO Pump to use for HTTP Requests.
- mServicePump = new LLPumpIO(gAPRPoolp);
+ mServicePump = new LLPumpIO;
LLHTTPClient::setPump(*mServicePump);
if (ll_init_ares() == NULL || !gAres->isInitialized())
{
diff --git a/indra/llmessage/tests/test_llsdmessage_peer.py b/indra/llmessage/tests/test_llsdmessage_peer.py
index 655169def..22edd9dad 100644
--- a/indra/llmessage/tests/test_llsdmessage_peer.py
+++ b/indra/llmessage/tests/test_llsdmessage_peer.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
"""\
@file test_llsdmessage_peer.py
@author Nat Goodspeed
@@ -7,31 +7,25 @@
the command line, returning its result code. While that executable is
running, we provide dummy local services for use by C++ tests.
-$LicenseInfo:firstyear=2008&license=viewergpl$
-
-Copyright (c) 2008-2009, Linden Research, Inc.
-
+$LicenseInfo:firstyear=2008&license=viewerlgpl$
Second Life Viewer Source Code
-The source code in this file ("Source Code") is provided by Linden Lab
-to you under the terms of the GNU General Public License, version 2.0
-("GPL"), unless you have obtained a separate licensing agreement
-("Other License"), formally executed by you and Linden Lab. 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
+Copyright (C) 2010, Linden Research, Inc.
-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
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation;
+version 2.1 of the License only.
-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.
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+Lesser General Public License for more details.
-ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
-WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
-COMPLETENESS OR PERFORMANCE.
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
$/LicenseInfo$
"""
@@ -39,16 +33,12 @@ import os
import sys
from threading import Thread
from BaseHTTPServer import HTTPServer, BaseHTTPRequestHandler
+
mydir = os.path.dirname(__file__) # expected to be .../indra/llmessage/tests/
sys.path.insert(0, os.path.join(mydir, os.pardir, os.pardir, "lib", "python"))
from indra.util.fastest_elementtree import parse as xml_parse
from indra.base import llsd
-
-def debug(*args):
- sys.stdout.writelines(args)
- sys.stdout.flush()
-# comment out the line below to enable debug output
-debug = lambda *args: None
+from testrunner import freeport, run, debug, VERBOSE
class TestHTTPRequestHandler(BaseHTTPRequestHandler):
"""This subclass of BaseHTTPRequestHandler is to receive and echo
@@ -82,10 +72,10 @@ class TestHTTPRequestHandler(BaseHTTPRequestHandler):
## # assuming that the underlying XML parser reads its input file
## # incrementally. Unfortunately I haven't been able to make it work.
## tree = xml_parse(self.rfile)
-## debug("Finished raw parse\n")
-## debug("parsed XML tree %s\n" % tree)
-## debug("parsed root node %s\n" % tree.getroot())
-## debug("root node tag %s\n" % tree.getroot().tag)
+## debug("Finished raw parse")
+## debug("parsed XML tree %s", tree)
+## debug("parsed root node %s", tree.getroot())
+## debug("root node tag %s", tree.getroot().tag)
## return llsd.to_python(tree.getroot())
def do_GET(self):
@@ -98,8 +88,10 @@ class TestHTTPRequestHandler(BaseHTTPRequestHandler):
self.answer(self.read_xml())
def answer(self, data):
+ debug("%s.answer(%s): self.path = %r", self.__class__.__name__, data, self.path)
if "fail" not in self.path:
response = llsd.format_xml(data.get("reply", llsd.LLSD("success")))
+ debug("success: %s", response)
self.send_response(200)
self.send_header("Content-type", "application/llsd+xml")
self.send_header("Content-Length", str(len(response)))
@@ -107,47 +99,48 @@ class TestHTTPRequestHandler(BaseHTTPRequestHandler):
self.wfile.write(response)
else: # fail requested
status = data.get("status", 500)
+ # self.responses maps an int status to a (short, long) pair of
+ # strings. We want the longer string. That's why we pass a string
+ # pair to get(): the [1] will select the second string, whether it
+ # came from self.responses or from our default pair.
reason = data.get("reason",
self.responses.get(status,
("fail requested",
"Your request specified failure status %s "
"without providing a reason" % status))[1])
+ debug("fail requested: %s: %r", status, reason)
self.send_error(status, reason)
- def log_request(self, code, size=None):
- # For present purposes, we don't want the request splattered onto
- # stderr, as it would upset devs watching the test run
- pass
+ if not VERBOSE:
+ # When VERBOSE is set, skip both these overrides because they exist to
+ # suppress output.
- def log_error(self, format, *args):
- # Suppress error output as well
- pass
+ def log_request(self, code, size=None):
+ # For present purposes, we don't want the request splattered onto
+ # stderr, as it would upset devs watching the test run
+ pass
-class TestHTTPServer(Thread):
- def run(self):
- httpd = HTTPServer(('127.0.0.1', 8000), TestHTTPRequestHandler)
- debug("Starting HTTP server...\n")
- httpd.serve_forever()
+ def log_error(self, format, *args):
+ # Suppress error output as well
+ pass
-def main(*args):
- # Start HTTP server thread. Note that this and all other comm server
- # threads should be daemon threads: we'll let them run "forever,"
- # confident that the whole process will terminate when the main thread
- # terminates, which will be when the test executable child process
- # terminates.
- httpThread = TestHTTPServer(name="httpd")
- httpThread.setDaemon(True)
- httpThread.start()
- # choice of os.spawnv():
- # - [v vs. l] pass a list of args vs. individual arguments,
- # - [no p] don't use the PATH because we specifically want to invoke the
- # executable passed as our first arg,
- # - [no e] child should inherit this process's environment.
- debug("Running %s...\n" % (" ".join(args)))
- sys.stdout.flush()
- rc = os.spawnv(os.P_WAIT, args[0], args)
- debug("%s returned %s\n" % (args[0], rc))
- return rc
+class Server(HTTPServer):
+ # This pernicious flag is on by default in HTTPServer. But proper
+ # operation of freeport() absolutely depends on it being off.
+ allow_reuse_address = False
if __name__ == "__main__":
- sys.exit(main(*sys.argv[1:]))
+ # Instantiate a Server(TestHTTPRequestHandler) on the first free port
+ # in the specified port range. Doing this inline is better than in a
+ # daemon thread: if it blows up here, we'll get a traceback. If it blew up
+ # in some other thread, the traceback would get eaten and we'd run the
+ # subject test program anyway.
+ httpd, port = freeport(xrange(8000, 8020),
+ lambda port: Server(('127.0.0.1', port), TestHTTPRequestHandler))
+ # Pass the selected port number to the subject test program via the
+ # environment. We don't want to impose requirements on the test program's
+ # command-line parsing -- and anyway, for C++ integration tests, that's
+ # performed in TUT code rather than our own.
+ os.environ["PORT"] = str(port)
+ debug("$PORT = %s", port)
+ sys.exit(run(server=Thread(name="httpd", target=httpd.serve_forever), *sys.argv[1:]))
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 640763df4..85d6f9ecd 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -232,7 +232,6 @@ set(viewer_SOURCE_FILES
llfloaterlandmark.cpp
llfloatermap.cpp
llfloatermemleak.cpp
- llfloatermessagelog.cpp
llfloatermodeluploadbase.cpp
llfloatermute.cpp
llfloaternamedesc.cpp
@@ -720,7 +719,6 @@ set(viewer_HEADER_FILES
llfloatermap.h
llfloatermemleak.h
llfloatermodeluploadbase.h
- llfloatermessagelog.h
llfloatermute.h
llfloaternamedesc.h
llfloaternewim.h
diff --git a/indra/newview/hipporestrequest.cpp b/indra/newview/hipporestrequest.cpp
index 8953dec87..7b64b35d8 100644
--- a/indra/newview/hipporestrequest.cpp
+++ b/indra/newview/hipporestrequest.cpp
@@ -256,7 +256,7 @@ static void request(const std::string &url,
LLPumpIO::chain_t chain;
LLURLRequest *req = new LLURLRequest(method, url);
- req->checkRootCertificate(true);
+ req->setSSLVerifyCallback(LLHTTPClient::getCertVerifyCallback(), (void *)req);
/*
// Insert custom headers if the caller sent any
diff --git a/indra/newview/llfloatermessagelog.cpp b/indra/newview/llfloatermessagelog.cpp
deleted file mode 100644
index 57ffac013..000000000
--- a/indra/newview/llfloatermessagelog.cpp
+++ /dev/null
@@ -1,957 +0,0 @@
-//
-#include "llviewerprecompiledheaders.h"
-#include "llfloatermessagelog.h"
-#include "lluictrlfactory.h"
-#include "llworld.h"
-#include "llnotificationsutil.h"
-#include "llviewerregion.h"
-#include "llscrolllistctrl.h"
-#include "lltexteditor.h"
-#include "llviewerwindow.h" // alertXml
-#include "llmessagetemplate.h"
-#include
-#include "llmenugl.h"
-#include "lleventtimer.h"
-
-#include "llagent.h"
-
-
-////////////////////////////////
-// LLNetListItem
-////////////////////////////////
-LLNetListItem::LLNetListItem(LLUUID id)
-: mID(id),
- mAutoName(TRUE),
- mName("No name"),
- mPreviousRegionName(""),
- mCircuitData(NULL)
-{
-}
-
-////////////////////////////////
-// LLFloaterMessageLogItem
-////////////////////////////////
-#define MAX_PACKET_LEN (0x2000)
-LLTemplateMessageReader* LLFloaterMessageLogItem::sTemplateMessageReader = NULL;
-LLFloaterMessageLogItem::LLFloaterMessageLogItem(LLMessageLogEntry entry)
-: LLMessageLogEntry(entry.mType, entry.mFromHost, entry.mToHost, entry.mData, entry.mDataSize)
-{
- if(!sTemplateMessageReader)
- {
- sTemplateMessageReader = new LLTemplateMessageReader(gMessageSystem->mMessageNumbers);
- }
- mID.generate();
- mSequenceID = 0;
- if(mType == TEMPLATE)
- {
- BOOL decode_invalid = FALSE;
- S32 decode_len = mDataSize;
- std::vector DecodeBuffer(MAX_PACKET_LEN,0);
- memcpy(&(DecodeBuffer[0]),&(mData[0]),decode_len);
- U8* decodep = &(DecodeBuffer[0]);
- mFlags = DecodeBuffer[0];
- gMessageSystem->zeroCodeExpand(&decodep, &decode_len);
- if(decode_len < 7)
- decode_invalid = TRUE;
- else
- {
- mSequenceID = ntohl(*((U32*)(&decodep[1])));
- sTemplateMessageReader->clearMessage();
- if(!sTemplateMessageReader->validateMessage(decodep, decode_len, mFromHost, TRUE))
- decode_invalid = TRUE;
- else
- {
- if(!sTemplateMessageReader->decodeData(decodep, mFromHost, TRUE))
- decode_invalid = TRUE;
- else
- {
- LLMessageTemplate* temp = sTemplateMessageReader->getTemplate();
- mName = temp->mName;
- mSummary = "";
-
- if(mFlags)
- {
- mSummary.append(" [ ");
- if(mFlags & LL_ZERO_CODE_FLAG)
- mSummary.append(" Zer ");
- if(mFlags & LL_RELIABLE_FLAG)
- mSummary.append(" Rel ");
- if(mFlags & LL_RESENT_FLAG)
- mSummary.append(" Rsd ");
- if(mFlags & LL_ACK_FLAG)
- mSummary.append(" Ack ");
- mSummary.append(" ] ");
- }
-
- LLMessageTemplate::message_block_map_t::iterator blocks_end = temp->mMemberBlocks.end();
- for (LLMessageTemplate::message_block_map_t::iterator blocks_iter = temp->mMemberBlocks.begin();
- blocks_iter != blocks_end; ++blocks_iter)
- {
- LLMessageBlock* block = (*blocks_iter);
- const char* block_name = block->mName;
- S32 num_blocks = sTemplateMessageReader->getNumberOfBlocks(block_name);
- if(!num_blocks)
- mSummary.append(" { } ");
- else if(num_blocks > 1)
- mSummary.append(llformat(" %s [ %d ] { ... } ", block_name, num_blocks));
- else for(S32 i = 0; i < 1; i++)
- {
- mSummary.append(" { ");
- LLMessageBlock::message_variable_map_t::iterator var_end = block->mMemberVariables.end();
- for (LLMessageBlock::message_variable_map_t::iterator var_iter = block->mMemberVariables.begin();
- var_iter != var_end; ++var_iter)
- {
- LLMessageVariable* variable = (*var_iter);
- const char* var_name = variable->getName();
- BOOL returned_hex;
- std::string value = getString(sTemplateMessageReader, block_name, i, var_name, variable->getType(), returned_hex, TRUE);
- mSummary.append(llformat(" %s=%s ", var_name, value.c_str()));
- }
- mSummary.append(" } ");
- if(mSummary.length() > 255) break;
- }
- if(mSummary.length() > 255)
- {
- mSummary.append(" ... ");
- break;
- }
- } // blocks_iter
- } // decode_valid
- }
- }
- if(decode_invalid)
- {
- mName = "Invalid";
- mSummary = "";
- for(S32 i = 0; i < mDataSize; i++)
- mSummary.append(llformat("%02X ", mData[i]));
- }
- }
- else // not template
- {
- mName = "SOMETHING ELSE";
- mSummary = "TODO: SOMETHING ELSE";
- }
-}
-LLFloaterMessageLogItem::~LLFloaterMessageLogItem()
-{
-}
-BOOL LLFloaterMessageLogItem::isOutgoing()
-{
- return mFromHost == LLHost(16777343, gMessageSystem->getListenPort());
-}
-std::string LLFloaterMessageLogItem::getFull(BOOL show_header)
-{
- std::string full("");
- if(mType == TEMPLATE)
- {
- BOOL decode_invalid = FALSE;
- S32 decode_len = mDataSize;
- std::vector DecodeBuffer(MAX_PACKET_LEN,0);
- memcpy(&(DecodeBuffer[0]),&(mData[0]),decode_len);
- U8* decodep = &(DecodeBuffer[0]);
- gMessageSystem->zeroCodeExpand(&decodep, &decode_len);
- if(decode_len < 7)
- decode_invalid = TRUE;
- else
- {
- sTemplateMessageReader->clearMessage();
- if(!sTemplateMessageReader->validateMessage(decodep, decode_len, mFromHost, TRUE))
- decode_invalid = TRUE;
- else
- {
- if(!sTemplateMessageReader->decodeData(decodep, mFromHost, TRUE))
- decode_invalid = TRUE;
- else
- {
- LLMessageTemplate* temp = sTemplateMessageReader->getTemplate();
- full.append(isOutgoing() ? "out " : "in ");
- full.append(llformat("%s\n", temp->mName));
- if(show_header)
- {
- full.append("[Header]\n");
- full.append(llformat("SequenceID = %u\n", mSequenceID));
- full.append(llformat("LL_ZERO_CODE_FLAG = %s\n", (mFlags & LL_ZERO_CODE_FLAG) ? "True" : "False"));
- full.append(llformat("LL_RELIABLE_FLAG = %s\n", (mFlags & LL_RELIABLE_FLAG) ? "True" : "False"));
- full.append(llformat("LL_RESENT_FLAG = %s\n", (mFlags & LL_RESENT_FLAG) ? "True" : "False"));
- full.append(llformat("LL_ACK_FLAG = %s\n", (mFlags & LL_ACK_FLAG) ? "True" : "False"));
- }
- LLMessageTemplate::message_block_map_t::iterator blocks_end = temp->mMemberBlocks.end();
- for (LLMessageTemplate::message_block_map_t::iterator blocks_iter = temp->mMemberBlocks.begin();
- blocks_iter != blocks_end; ++blocks_iter)
- {
- LLMessageBlock* block = (*blocks_iter);
- const char* block_name = block->mName;
- S32 num_blocks = sTemplateMessageReader->getNumberOfBlocks(block_name);
- for(S32 i = 0; i < num_blocks; i++)
- {
- full.append(llformat("[%s]\n", block->mName));
- LLMessageBlock::message_variable_map_t::iterator var_end = block->mMemberVariables.end();
- for (LLMessageBlock::message_variable_map_t::iterator var_iter = block->mMemberVariables.begin();
- var_iter != var_end; ++var_iter)
- {
- LLMessageVariable* variable = (*var_iter);
- const char* var_name = variable->getName();
- BOOL returned_hex;
- std::string value = getString(sTemplateMessageReader, block_name, i, var_name, variable->getType(), returned_hex);
- if(returned_hex)
- full.append(llformat("%s =| ", var_name));
- else
- full.append(llformat("%s = ", var_name));
- // llformat has a 1024 char limit!?
- full.append(value);
- full.append("\n");
- }
- }
- } // blocks_iter
- } // decode_valid
- }
- }
- if(decode_invalid)
- {
- full = isOutgoing() ? "out" : "in";
- full.append("\n");
- for(S32 i = 0; i < mDataSize; i++)
- full.append(llformat("%02X ", mData[i]));
- }
- }
- else // not template
- {
- full = "FIXME";
- }
- return full;
-}
-// static
-std::string LLFloaterMessageLogItem::getString(LLTemplateMessageReader* readerp, const char* block_name, S32 block_num, const char* var_name, e_message_variable_type var_type, BOOL &returned_hex, BOOL summary_mode)
-{
- returned_hex = FALSE;
- std::stringstream stream;
- char* value;
- U32 valueU32;
- U16 valueU16;
- LLVector3 valueVector3;
- LLVector3d valueVector3d;
- LLVector4 valueVector4;
- LLQuaternion valueQuaternion;
- LLUUID valueLLUUID;
- switch(var_type)
- {
- case MVT_U8:
- U8 valueU8;
- readerp->getU8(block_name, var_name, valueU8, block_num);
- stream << U32(valueU8);
- break;
- case MVT_U16:
- readerp->getU16(block_name, var_name, valueU16, block_num);
- stream << valueU16;
- break;
- case MVT_U32:
- readerp->getU32(block_name, var_name, valueU32, block_num);
- stream << valueU32;
- break;
- case MVT_U64:
- U64 valueU64;
- readerp->getU64(block_name, var_name, valueU64, block_num);
- stream << valueU64;
- break;
- case MVT_S8:
- S8 valueS8;
- readerp->getS8(block_name, var_name, valueS8, block_num);
- stream << S32(valueS8);
- break;
- case MVT_S16:
- S16 valueS16;
- readerp->getS16(block_name, var_name, valueS16, block_num);
- stream << valueS16;
- break;
- case MVT_S32:
- S32 valueS32;
- readerp->getS32(block_name, var_name, valueS32, block_num);
- stream << valueS32;
- break;
- /*case MVT_S64:
- S64 valueS64;
- readerp->getS64(block_name, var_name, valueS64, block_num);
- stream << valueS64;
- break;*/
- case MVT_F32:
- F32 valueF32;
- readerp->getF32(block_name, var_name, valueF32, block_num);
- stream << valueF32;
- break;
- case MVT_F64:
- F64 valueF64;
- readerp->getF64(block_name, var_name, valueF64, block_num);
- stream << valueF64;
- break;
- case MVT_LLVector3:
- readerp->getVector3(block_name, var_name, valueVector3, block_num);
- //stream << valueVector3;
- stream << "<" << valueVector3.mV[0] << ", " << valueVector3.mV[1] << ", " << valueVector3.mV[2] << ">";
- break;
- case MVT_LLVector3d:
- readerp->getVector3d(block_name, var_name, valueVector3d, block_num);
- //stream << valueVector3d;
- stream << "<" << valueVector3d.mdV[0] << ", " << valueVector3d.mdV[1] << ", " << valueVector3d.mdV[2] << ">";
- break;
- case MVT_LLVector4:
- readerp->getVector4(block_name, var_name, valueVector4, block_num);
- //stream << valueVector4;
- stream << "<" << valueVector4.mV[0] << ", " << valueVector4.mV[1] << ", " << valueVector4.mV[2] << ", " << valueVector4.mV[3] << ">";
- break;
- case MVT_LLQuaternion:
- readerp->getQuat(block_name, var_name, valueQuaternion, block_num);
- //stream << valueQuaternion;
- stream << "<" << valueQuaternion.mQ[0] << ", " << valueQuaternion.mQ[1] << ", " << valueQuaternion.mQ[2] << ", " << valueQuaternion.mQ[3] << ">";
- break;
- case MVT_LLUUID:
- readerp->getUUID(block_name, var_name, valueLLUUID, block_num);
- stream << valueLLUUID;
- break;
- case MVT_BOOL:
- BOOL valueBOOL;
- readerp->getBOOL(block_name, var_name, valueBOOL, block_num);
- stream << valueBOOL;
- break;
- case MVT_IP_ADDR:
- readerp->getIPAddr(block_name, var_name, valueU32, block_num);
- stream << LLHost(valueU32, 0).getIPString();
- break;
- case MVT_IP_PORT:
- readerp->getIPPort(block_name, var_name, valueU16, block_num);
- stream << valueU16;
- case MVT_VARIABLE:
- case MVT_FIXED:
- default:
- S32 size = readerp->getSize(block_name, block_num, var_name);
- if(size)
- {
- value = new char[size + 1];
- readerp->getBinaryData(block_name, var_name, value, size, block_num);
- value[size] = '\0';
- S32 readable = 0;
- S32 unreadable = 0;
- S32 end = (summary_mode && (size > 64)) ? 64 : size;
- for(S32 i = 0; i < end; i++)
- {
- if(!value[i])
- {
- if(i != (end - 1))
- { // don't want null terminator hiding data
- unreadable = S32_MAX;
- break;
- }
- }
- else if(value[i] < 0x20 || value[i] >= 0x7F)
- {
- if(summary_mode)
- unreadable++;
- else
- { // never want any wrong characters outside of summary mode
- unreadable = S32_MAX;
- break;
- }
- }
- else readable++;
- }
- if(readable >= unreadable)
- {
- if(summary_mode && (size > 64))
- {
- for(S32 i = 60; i < 63; i++)
- value[i] = '.';
- value[63] = '\0';
- }
- stream << value;
-
- delete[] value;
- }
- else
- {
- returned_hex = TRUE;
- S32 end = (summary_mode && (size > 8)) ? 8 : size;
- for(S32 i = 0; i < end; i++)
- //stream << std::uppercase << std::hex << U32(value[i]) << " ";
- stream << llformat("%02X ", (U8)value[i]);
- if(summary_mode && (size > 8))
- stream << " ... ";
- }
- }
- break;
- }
-
- return stream.str();
-}
-LLMessageLogFilter::LLMessageLogFilter()
-{
-}
-LLMessageLogFilter::~LLMessageLogFilter()
-{
-}
-BOOL LLMessageLogFilter::set(std::string filter)
-{
- mPositiveNames.clear();
- mNegativeNames.clear();
- typedef boost::tokenizer > tokenizer;
- boost::char_separator sep(" ","",boost::keep_empty_tokens);
- boost::tokenizer > tokens(filter, sep);
- boost::tokenizer >::iterator end = tokens.end();
- for(boost::tokenizer >::iterator iter = tokens.begin(); iter != end; ++iter)
- {
- std::string token = (*iter);
- LLStringUtil::trim(token);
- LLStringUtil::toLower(token);
- BOOL negative = token.find("!") == 0;
- if(negative)
- {
- token = token.substr(1);
- mNegativeNames.push_back(token);
- }
- else
- mPositiveNames.push_back(token);
- }
- return TRUE;
-}
-////////////////////////////////
-// LLMessageLogFilterApply
-////////////////////////////////
-LLMessageLogFilterApply::LLMessageLogFilterApply()
-: LLEventTimer(0.1f),
- mFinished(FALSE),
- mProgress(0)
-{
- mIter = LLFloaterMessageLog::sMessageLogEntries.begin();
-}
-void LLMessageLogFilterApply::cancel()
-{
- mFinished = TRUE;
-}
-BOOL LLMessageLogFilterApply::tick()
-{
- std::deque::iterator end = LLFloaterMessageLog::sMessageLogEntries.end();
- if(mIter == end || !LLFloaterMessageLog::sInstance)
- {
- mFinished = TRUE;
- if(LLFloaterMessageLog::sInstance)
- {
- if(LLFloaterMessageLog::sInstance->mMessageLogFilterApply == this)
- {
- LLFloaterMessageLog::sInstance->stopApplyingFilter();
- }
- }
- return TRUE;
- }
- for(S32 i = 0; i < 256; i++)
- {
- if(mIter == end)
- {
- mFinished = TRUE;
- if(LLFloaterMessageLog::sInstance)
- {
- if(LLFloaterMessageLog::sInstance->mMessageLogFilterApply == this)
- {
- LLFloaterMessageLog::sInstance->stopApplyingFilter();
-
- //we're done messing with the deque, push all queued items to the main deque
- std::deque::iterator queueIter = mQueuedMessages.begin();
- std::deque::iterator queueEnd = mQueuedMessages.end();
-
- while(queueIter != queueEnd)
- {
- LLFloaterMessageLog::sInstance->conditionalLog(LLFloaterMessageLogItem((*queueIter)));
- ++queueIter;
- }
-
- mQueuedMessages.clear();
- }
- }
-
- return TRUE;
- }
-
- LLFloaterMessageLog::sInstance->conditionalLog(LLFloaterMessageLogItem((*mIter)));
-
- mIter++;
- mProgress++;
- }
- LLFloaterMessageLog::sInstance->updateFilterStatus();
- return FALSE;
-}
-////////////////////////////////
-// LLFloaterMessageLog
-////////////////////////////////
-LLFloaterMessageLog* LLFloaterMessageLog::sInstance;
-std::list LLFloaterMessageLog::sNetListItems;
-std::deque LLFloaterMessageLog::sMessageLogEntries;
-std::vector LLFloaterMessageLog::sFloaterMessageLogItems;
-LLMessageLogFilter LLFloaterMessageLog::sMessageLogFilter = LLMessageLogFilter();
-std::string LLFloaterMessageLog::sMessageLogFilterString("!StartPingCheck !CompletePingCheck !PacketAck !SimulatorViewerTimeMessage !SimStats !AgentUpdate !AgentAnimation !AvatarAnimation !ViewerEffect !CoarseLocationUpdate !LayerData !CameraConstraint !ObjectUpdateCached !RequestMultipleObjects !ObjectUpdate !ObjectUpdateCompressed !ImprovedTerseObjectUpdate !KillObject !ImagePacket !SendXferPacket !ConfirmXferPacket !TransferPacket !SoundTrigger !AttachedSound !PreloadSound");
-BOOL LLFloaterMessageLog::sBusyApplyingFilter = FALSE;
-LLFloaterMessageLog::LLFloaterMessageLog()
-: LLFloater(),
- LLEventTimer(1.0f),
- mNetInfoMode(NI_NET),
- mMessageLogFilterApply(NULL)
-{
- sInstance = this;
- LLMessageLog::setCallback(onLog);
- sMessageLogEntries = LLMessageLog::getDeque();
- LLUICtrlFactory::getInstance()->buildFloater(this, "floater_message_log.xml");
-}
-LLFloaterMessageLog::~LLFloaterMessageLog()
-{
- LLMessageLog::setCallback(NULL);
- stopApplyingFilter();
- sInstance = NULL;
- sNetListItems.clear();
- sMessageLogEntries.clear();
- sFloaterMessageLogItems.clear();
-}
-// static
-void LLFloaterMessageLog::show()
-{
- if(!sInstance) sInstance = new LLFloaterMessageLog();
- sInstance->open();
-}
-BOOL LLFloaterMessageLog::postBuild()
-{
- childSetCommitCallback("net_list", onCommitNetList, this);
- childSetCommitCallback("message_log", onCommitMessageLog, this);
- childSetAction("filter_choice_btn", onClickFilterChoice, this);
- childSetAction("filter_apply_btn", onClickFilterApply, this);
- childSetCommitCallback("filter_edit", onCommitFilter, this);
- childSetAction("clear_log_btn", onClickClearLog, this);
- childSetText("filter_edit", sMessageLogFilterString);
- refreshNetList();
- refreshNetInfo(TRUE);
- startApplyingFilter(sMessageLogFilterString, TRUE);
- return TRUE;
-}
-BOOL LLFloaterMessageLog::tick()
-{
- refreshNetList();
- refreshNetInfo(FALSE);
- return FALSE;
-}
-LLNetListItem* LLFloaterMessageLog::findNetListItem(LLHost host)
-{
- std::list::iterator end = sNetListItems.end();
- for(std::list::iterator iter = sNetListItems.begin(); iter != end; ++iter)
- if((*iter)->mCircuitData && (*iter)->mCircuitData->getHost() == host)
- return (*iter);
- return NULL;
-}
-LLNetListItem* LLFloaterMessageLog::findNetListItem(LLUUID id)
-{
- std::list::iterator end = sNetListItems.end();
- for(std::list::iterator iter = sNetListItems.begin(); iter != end; ++iter)
- if((*iter)->mID == id)
- return (*iter);
- return NULL;
-}
-void LLFloaterMessageLog::refreshNetList()
-{
- LLScrollListCtrl* scrollp = getChild("net_list");
- // Update circuit data of net list items
- std::vector circuits = gMessageSystem->getCircuit()->getCircuitDataList();
- std::vector::iterator circuits_end = circuits.end();
- for(std::vector::iterator iter = circuits.begin(); iter != circuits_end; ++iter)
- {
- LLNetListItem* itemp = findNetListItem((*iter)->getHost());
- if(!itemp)
- {
- LLUUID id; id.generate();
- itemp = new LLNetListItem(id);
- sNetListItems.push_back(itemp);
- }
- itemp->mCircuitData = (*iter);
- }
- // Clear circuit data of items whose circuits are gone
- std::list::iterator items_end = sNetListItems.end();
- for(std::list::iterator iter = sNetListItems.begin(); iter != items_end; ++iter)
- {
- if(std::find(circuits.begin(), circuits.end(), (*iter)->mCircuitData) == circuits.end())
- (*iter)->mCircuitData = NULL;
- }
- // Remove net list items that are totally useless now
- for(std::list::iterator iter = sNetListItems.begin(); iter != sNetListItems.end();)
- {
- if((*iter)->mCircuitData == NULL)
- iter = sNetListItems.erase(iter);
- else ++iter;
- }
- // Update names of net list items
- items_end = sNetListItems.end();
- for(std::list::iterator iter = sNetListItems.begin(); iter != items_end; ++iter)
- {
- LLNetListItem* itemp = (*iter);
- if(itemp->mAutoName)
- {
- if(itemp->mCircuitData)
- {
- LLViewerRegion* regionp = LLWorld::getInstance()->getRegion(itemp->mCircuitData->getHost());
- if(regionp)
- {
- std::string name = regionp->getName();
- if(name == "") name = llformat("%s (awaiting region name)", itemp->mCircuitData->getHost().getString().c_str());
- itemp->mName = name;
- itemp->mPreviousRegionName = name;
- }
- else
- {
- itemp->mName = itemp->mCircuitData->getHost().getString();
- if(itemp->mPreviousRegionName != "")
- itemp->mName.append(llformat(" (was %s)", itemp->mPreviousRegionName.c_str()));
- }
- }
- else
- {
- // an item just for an event queue, not handled yet
- itemp->mName = "Something else";
- }
- }
- }
- // Rebuild scroll list from scratch
- LLUUID selected_id = scrollp->getFirstSelected() ? scrollp->getFirstSelected()->getUUID() : LLUUID::null;
- S32 scroll_pos = scrollp->getScrollPos();
- scrollp->clearRows();
- for(std::list::iterator iter = sNetListItems.begin(); iter != items_end; ++iter)
- {
- LLNetListItem* itemp = (*iter);
- LLSD element;
- element["id"] = itemp->mID;
- LLSD& text_column = element["columns"][0];
- text_column["column"] = "text";
- text_column["value"] = itemp->mName + (itemp->mCircuitData->getHost() == gAgent.getRegionHost() ? " (main)" : "");
- for(int i = 0; i < 2; i++)
- {
- LLSD& icon_column = element["columns"][i + 1];
- icon_column["column"] = llformat("icon%d", i);
- icon_column["type"] = "icon";
- icon_column["value"] = "";
- }
- LLScrollListItem* scroll_itemp = scrollp->addElement(element);
- BOOL has_live_circuit = itemp->mCircuitData && itemp->mCircuitData->isAlive();
- if(has_live_circuit)
- {
- LLScrollListIcon* icon = (LLScrollListIcon*)scroll_itemp->getColumn(1);
- icon->setValue("icon_net_close_circuit.tga");
- icon->setClickCallback(onClickCloseCircuit, itemp);
- }
- else
- {
- LLScrollListIcon* icon = (LLScrollListIcon*)scroll_itemp->getColumn(1);
- icon->setValue("icon_net_close_circuit_gray.tga");
- icon->setClickCallback(NULL, NULL);
- }
- // Event queue isn't even supported yet... FIXME
- LLScrollListIcon* icon = (LLScrollListIcon*)scroll_itemp->getColumn(2);
- icon->setValue("icon_net_close_eventpoll_gray.tga");
- icon->setClickCallback(NULL, NULL);
- }
- if(selected_id.notNull()) scrollp->selectByID(selected_id);
- if(scroll_pos < scrollp->getItemCount()) scrollp->setScrollPos(scroll_pos);
-}
-void LLFloaterMessageLog::refreshNetInfo(BOOL force)
-{
- if(mNetInfoMode != NI_NET) return;
- LLScrollListCtrl* scrollp = getChild("net_list");
- LLScrollListItem* selected_itemp = scrollp->getFirstSelected();
- if(selected_itemp)
- {
- if(!force) if(getChild("net_info")->hasSelection()) return;
- LLNetListItem* itemp = findNetListItem(selected_itemp->getUUID());
- if(itemp)
- {
- std::string info(llformat("%s\n--------------------------------\n\n", itemp->mName.c_str()));
- if(itemp->mCircuitData)
- {
- LLCircuitData* cdp = itemp->mCircuitData;
- info.append("Circuit\n--------------------------------\n");
- info.append(llformat(" * Host: %s\n", cdp->getHost().getString().c_str()));
- S32 seconds = (S32)cdp->getAgeInSeconds();
- S32 minutes = seconds / 60;
- seconds = seconds % 60;
- S32 hours = minutes / 60;
- minutes = minutes % 60;
- info.append(llformat(" * Age: %dh %dm %ds\n", hours, minutes, seconds));
- info.append(llformat(" * Alive: %s\n", cdp->isAlive() ? "yes" : "no"));
- info.append(llformat(" * Blocked: %s\n", cdp->isBlocked() ? "yes" : "no"));
- info.append(llformat(" * Allow timeout: %s\n", cdp->getAllowTimeout() ? "yes" : "no"));
- info.append(llformat(" * Trusted: %s\n", cdp->getTrusted() ? "yes" : "no"));
- info.append(llformat(" * Ping delay: %d\n", cdp->getPingDelay()));
- info.append(llformat(" * Packets out: %d\n", cdp->getPacketsOut()));
- info.append(llformat(" * Bytes out: %d\n", cdp->getBytesOut()));
- info.append(llformat(" * Packets in: %d\n", cdp->getPacketsIn()));
- info.append(llformat(" * Bytes in: %d\n", cdp->getBytesIn()));
- info.append(llformat(" * Endpoint ID: %s\n", cdp->getLocalEndPointID().asString().c_str()));
- info.append(llformat(" * Remote ID: %s\n", cdp->getRemoteID().asString().c_str()));
- info.append(llformat(" * Remote session ID: %s\n", cdp->getRemoteSessionID().asString().c_str()));
- }
- childSetText("net_info", info);
- }
- else childSetText("net_info", std::string(""));
- }
- else childSetText("net_info", std::string(""));
-}
-void LLFloaterMessageLog::setNetInfoMode(ENetInfoMode mode)
-{
- mNetInfoMode = mode;
- if(mNetInfoMode == NI_NET)
- refreshNetInfo(TRUE);
-}
-// static
-void LLFloaterMessageLog::onLog(LLMessageLogEntry entry)
-{
- //don't mess with the queue while a filter's being applied, or face invalid iterators
- if(!sBusyApplyingFilter)
- {
- sMessageLogEntries.push_back(entry);
- conditionalLog(LLFloaterMessageLogItem(entry));
- }
-}
-// static
-void LLFloaterMessageLog::conditionalLog(LLFloaterMessageLogItem item)
-{
- if(!sBusyApplyingFilter)
- sInstance->childSetText("log_status_text", llformat("Showing %d messages from %d", sFloaterMessageLogItems.size(), sMessageLogEntries.size()));
- std::string find_name = item.mName;
- LLStringUtil::toLower(find_name);
- if(sMessageLogFilter.mPositiveNames.size())
- if(std::find(sMessageLogFilter.mPositiveNames.begin(), sMessageLogFilter.mPositiveNames.end(), find_name) == sMessageLogFilter.mPositiveNames.end())
- return;
- if(std::find(sMessageLogFilter.mNegativeNames.begin(), sMessageLogFilter.mNegativeNames.end(), find_name) != sMessageLogFilter.mNegativeNames.end())
- return;
- sFloaterMessageLogItems.push_back(item); // moved from beginning...
- BOOL outgoing = item.isOutgoing();
- std::string net_name("\?\?\?");
- if(item.mType == LLFloaterMessageLogItem::TEMPLATE)
- {
- LLHost find_host = outgoing ? item.mToHost : item.mFromHost;
- net_name = find_host.getIPandPort();
- std::list::iterator end = sNetListItems.end();
- for(std::list::iterator iter = sNetListItems.begin(); iter != end; ++iter)
- {
- if((*iter)->mCircuitData->getHost() == find_host)
- {
- net_name = (*iter)->mName;
- break;
- }
- }
- }
- LLSD element;
- element["id"] = item.mID;
- LLSD& sequence_column = element["columns"][0];
- sequence_column["column"] = "sequence";
- sequence_column["value"] = llformat("%u", item.mSequenceID);
- LLSD& type_column = element["columns"][1];
- type_column["column"] = "type";
- type_column["value"] = item.mType == LLFloaterMessageLogItem::TEMPLATE ? "UDP" : "\?\?\?";
- LLSD& direction_column = element["columns"][2];
- direction_column["column"] = "direction";
- direction_column["value"] = outgoing ? "to" : "from";
- LLSD& net_column = element["columns"][3];
- net_column["column"] = "net";
- net_column["value"] = net_name;
- LLSD& name_column = element["columns"][4];
- name_column["column"] = "name";
- name_column["value"] = item.mName;
- /*
- LLSD& zer_column = element["columns"][5];
- zer_column["column"] = "flag_zer";
- zer_column["type"] = "icon";
- zer_column["value"] = (item.mFlags & LL_ZERO_CODE_FLAG) ? "flag_zer.tga" : "";
- LLSD& rel_column = element["columns"][6];
- rel_column["column"] = "flag_rel";
- rel_column["type"] = "icon";
- rel_column["value"] = (item.mFlags & LL_RELIABLE_FLAG) ? "flag_rel.tga" : "";
- LLSD& rsd_column = element["columns"][7];
- rsd_column["column"] = "flag_rsd";
- rsd_column["type"] = "icon";
- rsd_column["value"] = (item.mFlags & LL_RESENT_FLAG) ? "flag_rsd.tga" : "";
- LLSD& ack_column = element["columns"][8];
- ack_column["column"] = "flag_ack";
- ack_column["type"] = "icon";
- ack_column["value"] = (item.mFlags & LL_ACK_FLAG) ? "flag_ack.tga" : "";
- */
- LLSD& summary_column = element["columns"][5];
- summary_column["column"] = "summary";
- summary_column["value"] = item.mSummary;
- LLScrollListCtrl* scrollp = sInstance->getChild("message_log");
- S32 scroll_pos = scrollp->getScrollPos();
- scrollp->addElement(element);
- if(scroll_pos > scrollp->getItemCount() - scrollp->getPageLines() - 4)
- scrollp->setScrollPos(scrollp->getItemCount());
-}
-// static
-void LLFloaterMessageLog::onCommitNetList(LLUICtrl* ctrl, void* user_data)
-{
- LLFloaterMessageLog* floaterp = (LLFloaterMessageLog*)user_data;
- floaterp->setNetInfoMode(NI_NET);
- floaterp->refreshNetInfo(TRUE);
-}
-// static
-void LLFloaterMessageLog::onCommitMessageLog(LLUICtrl* ctrl, void* user_data)
-{
- LLFloaterMessageLog* floaterp = (LLFloaterMessageLog*)user_data;
- LLScrollListCtrl* scrollp = floaterp->getChild("message_log");
- LLScrollListItem* selected_itemp = scrollp->getFirstSelected();
- if(!selected_itemp) return;
- LLUUID id = selected_itemp->getUUID();
- std::vector::iterator end = sFloaterMessageLogItems.end();
- for(std::vector::iterator iter = sFloaterMessageLogItems.begin(); iter != end; ++iter)
- {
- if(iter->mID == id)
- {
- floaterp->setNetInfoMode(NI_LOG);
- floaterp->childSetText("net_info", iter->getFull(FALSE));
- break;
- }
- }
-}
-// static
-BOOL LLFloaterMessageLog::onClickCloseCircuit(void* user_data)
-{
- LLNetListItem* itemp = (LLNetListItem*)user_data;
- LLCircuitData* cdp = (LLCircuitData*)itemp->mCircuitData;
- if(!cdp) return FALSE;
- LLHost myhost = cdp->getHost();
- LLSD args;
- args["MESSAGE"] = "This will delete local circuit data.\nDo you want to tell the remote host to close the circuit too?";
- LLSD payload;
- payload["circuittoclose"] = myhost.getString();
- LLNotificationsUtil::add("GenericAlertYesCancel", args, payload, onConfirmCloseCircuit);
- return TRUE;
-}
-// static
-bool LLFloaterMessageLog::onConfirmCloseCircuit(const LLSD& notification, const LLSD& response )
-{
- S32 option = LLNotification::getSelectedOption(notification, response);
- LLCircuitData* cdp = gMessageSystem->mCircuitInfo.findCircuit(LLHost(notification["payload"]["circuittoclose"].asString()));
- if(!cdp) return false;
- LLViewerRegion* regionp = LLWorld::getInstance()->getRegion(cdp->getHost());
- switch(option)
- {
- case 0: // yes
- gMessageSystem->newMessageFast(_PREHASH_CloseCircuit);
- gMessageSystem->sendReliable(cdp->getHost());
- break;
- case 2: // cancel
- return false;
- break;
- case 1: // no
- default:
- break;
- }
- if(gMessageSystem->findCircuitCode(cdp->getHost()))
- gMessageSystem->disableCircuit(cdp->getHost());
- else
- gMessageSystem->getCircuit()->removeCircuitData(cdp->getHost());
- if(regionp)
- {
- LLHost myhost = regionp->getHost();
- LLSD args;
- args["MESSAGE"] = "That host had a region associated with it.\nDo you want to clean that up?";
- LLSD payload;
- payload["regionhost"] = myhost.getString();
- LLNotificationsUtil::add("GenericAlertYesCancel", args, payload, onConfirmRemoveRegion);
- }
- return false;
-}
-// static
-bool LLFloaterMessageLog::onConfirmRemoveRegion(const LLSD& notification, const LLSD& response )
-{
- S32 option = LLNotification::getSelectedOption(notification, response);
- if(option == 0) // yes
- LLWorld::getInstance()->removeRegion(LLHost(notification["payload"]["regionhost"].asString()));
- return false;
-}
-// static
-void LLFloaterMessageLog::onClickFilterApply(void* user_data)
-{
- LLFloaterMessageLog* floaterp = (LLFloaterMessageLog*)user_data;
- floaterp->startApplyingFilter(floaterp->childGetValue("filter_edit"), FALSE);
-}
-void LLFloaterMessageLog::startApplyingFilter(std::string filter, BOOL force)
-{
- LLMessageLogFilter new_filter = LLMessageLogFilter();
- sMessageLogFilterString = filter;
- new_filter.set(sMessageLogFilterString);
- if(!filter.length() || filter.at(filter.length()-1) != ' ')
- childSetText("filter_edit", filter + " ");
- if(force
- || (new_filter.mNegativeNames != sMessageLogFilter.mNegativeNames)
- || (new_filter.mPositiveNames != sMessageLogFilter.mPositiveNames))
- {
- stopApplyingFilter();
- sMessageLogFilter = new_filter;
- sFloaterMessageLogItems.clear();
- getChild("message_log")->clearRows();
- sBusyApplyingFilter = TRUE;
- childSetVisible("message_log", false);
- //childSetVisible("log_status_text", true);
- mMessageLogFilterApply = new LLMessageLogFilterApply();
- }
-}
-void LLFloaterMessageLog::stopApplyingFilter()
-{
- if(mMessageLogFilterApply)
- {
- if(!(mMessageLogFilterApply->mFinished))
- mMessageLogFilterApply->cancel();
- //delete mMessageLogFilterApply;
- sBusyApplyingFilter = FALSE;
- //childSetVisible("log_status_text", false);
- childSetVisible("message_log", true);
- childSetText("log_status_text", llformat("Showing %d messages from %d", sFloaterMessageLogItems.size(), sMessageLogEntries.size()));
- }
-}
-void LLFloaterMessageLog::updateFilterStatus()
-{
- if(!mMessageLogFilterApply || !sBusyApplyingFilter) return;
- S32 progress = mMessageLogFilterApply->mProgress;
- S32 packets = sMessageLogEntries.size();
- S32 matches = sFloaterMessageLogItems.size();
- std::string text = llformat("Applying filter ( %d / %d ), %d matches ...", progress, packets, matches);
- childSetText("log_status_text", text);
-}
-// static
-void LLFloaterMessageLog::onCommitFilter(LLUICtrl* ctrl, void* user_data)
-{
- LLFloaterMessageLog* floaterp = (LLFloaterMessageLog*)user_data;
- floaterp->startApplyingFilter(floaterp->childGetValue("filter_edit"), FALSE);
-}
-// static
-void LLFloaterMessageLog::onClickClearLog(void* user_data)
-{
- LLFloaterMessageLog* floaterp = (LLFloaterMessageLog*)user_data;
- floaterp->stopApplyingFilter();
- floaterp->getChild("message_log")->clearRows();
- floaterp->setNetInfoMode(NI_NET);
- sMessageLogEntries.clear();
- sFloaterMessageLogItems.clear();
-}
-// static
-void LLFloaterMessageLog::onClickFilterChoice(void* user_data)
-{
- LLMenuGL* menu = new LLMenuGL(LLStringUtil::null);
- menu->append(new LLMenuItemCallGL("No filter", onClickFilterMenu, NULL, (void*)""));
- menu->append(new LLMenuItemCallGL("Fewer spammy messages", onClickFilterMenu, NULL, (void*)"!StartPingCheck !CompletePingCheck !PacketAck !SimulatorViewerTimeMessage !SimStats !AgentUpdate !AgentAnimation !AvatarAnimation !ViewerEffect !CoarseLocationUpdate !LayerData !CameraConstraint !ObjectUpdateCached !RequestMultipleObjects !ObjectUpdate !ObjectUpdateCompressed !ImprovedTerseObjectUpdate !KillObject !ImagePacket !SendXferPacket !ConfirmXferPacket !TransferPacket"));
- menu->append(new LLMenuItemCallGL("Fewer spammy messages (minus sound crap)", onClickFilterMenu, NULL, (void*)"!StartPingCheck !CompletePingCheck !PacketAck !SimulatorViewerTimeMessage !SimStats !AgentUpdate !AgentAnimation !AvatarAnimation !ViewerEffect !CoarseLocationUpdate !LayerData !CameraConstraint !ObjectUpdateCached !RequestMultipleObjects !ObjectUpdate !ObjectUpdateCompressed !ImprovedTerseObjectUpdate !KillObject !ImagePacket !SendXferPacket !ConfirmXferPacket !TransferPacket !SoundTrigger !AttachedSound !PreloadSound"));
- menu->append(new LLMenuItemCallGL("Object updates", onClickFilterMenu, NULL, (void*)"ObjectUpdateCached ObjectUpdate ObjectUpdateCompressed ImprovedTerseObjectUpdate KillObject RequestMultipleObjects"));
- menu->append(new LLMenuItemCallGL("Abnormal", onClickFilterMenu, NULL, (void*)"Invalid TestMessage AddCircuitCode NeighborList AvatarTextureUpdate SimulatorMapUpdate SimulatorSetMap SubscribeLoad UnsubscribeLoad SimulatorReady SimulatorPresentAtLocation SimulatorLoad SimulatorShutdownRequest RegionPresenceRequestByRegionID RegionPresenceRequestByHandle RegionPresenceResponse UpdateSimulator LogDwellTime FeatureDisabled LogFailedMoneyTransaction UserReportInternal SetSimStatusInDatabase SetSimPresenceInDatabase OpenCircuit CloseCircuit DirFindQueryBackend DirPlacesQueryBackend DirClassifiedQueryBackend DirLandQueryBackend DirPopularQueryBackend GroupNoticeAdd DataHomeLocationRequest DataHomeLocationReply DerezContainer ObjectCategory ObjectExportSelected StateSave ReportAutosaveCrash AgentAlertMessage NearestLandingRegionRequest NearestLandingRegionReply NearestLandingRegionUpdated TeleportLandingStatusChanged ConfirmEnableSimulator KickUserAck SystemKickUser AvatarPropertiesRequestBackend UpdateParcel RemoveParcel MergeParcel LogParcelChanges CheckParcelSales ParcelSales StartAuction ConfirmAuctionStart CompleteAuction CancelAuction CheckParcelAuctions ParcelAuctions ChatPass EdgeDataPacket SimStatus ChildAgentUpdate ChildAgentAlive ChildAgentPositionUpdate ChildAgentDying ChildAgentUnknown AtomicPassObject KillChildAgents ScriptSensorRequest ScriptSensorReply DataServerLogout RequestInventoryAsset InventoryAssetResponse TransferInventory TransferInventoryAck EventLocationRequest EventLocationReply MoneyTransferBackend RoutedMoneyBalanceReply SetStartLocation NetTest SetCPURatio SimCrashed NameValuePair RemoveNameValuePair UpdateAttachment RemoveAttachment EmailMessageRequest EmailMessageReply InternalScriptMail ScriptDataRequest ScriptDataReply InviteGroupResponse TallyVotes LiveHelpGroupRequest LiveHelpGroupReply GroupDataUpdate LogTextMessage CreateTrustedCircuit ParcelRename SystemMessage RpcChannelRequest RpcChannelReply RpcScriptRequestInbound RpcScriptRequestInboundForward RpcScriptReplyInbound ScriptMailRegistration Error"));
- menu->updateParent(LLMenuGL::sMenuContainer);
- menu->setCanTearOff(FALSE);
- LLView* buttonp = sInstance->getChild("filter_choice_btn");
- S32 x = buttonp->getRect().mLeft;
- S32 y = buttonp->getRect().mBottom;
- LLMenuGL::showPopup(sInstance, menu, x, y);
-}
-// static
-void LLFloaterMessageLog::onClickFilterMenu(void* user_data)
-{
- std::string filter = std::string((char*)user_data);
- sInstance->childSetText("filter_edit", filter);
- sInstance->startApplyingFilter(filter, FALSE);
-}
-//
diff --git a/indra/newview/llfloatermessagelog.h b/indra/newview/llfloatermessagelog.h
deleted file mode 100644
index 1fa01c5af..000000000
--- a/indra/newview/llfloatermessagelog.h
+++ /dev/null
@@ -1,96 +0,0 @@
-//
-#include "llfloater.h"
-#include "llmessagelog.h"
-#include "lltemplatemessagereader.h"
-#include "lleventtimer.h"
-
-class LLNetListItem
-{
-public:
- LLNetListItem(LLUUID id);
- LLUUID mID;
- BOOL mAutoName;
- std::string mName;
- std::string mPreviousRegionName;
- LLCircuitData* mCircuitData;
-};
-
-class LLFloaterMessageLogItem : public LLMessageLogEntry
-{
-public:
- LLFloaterMessageLogItem(LLMessageLogEntry entry);
- ~LLFloaterMessageLogItem();
- LLUUID mID;
- U32 mSequenceID;
- std::string mName;
- std::string mSummary;
- U32 mFlags;
- std::string getFull(BOOL show_header = TRUE);
- BOOL isOutgoing();
- void refreshNetList();
-
-private:
- static LLTemplateMessageReader* sTemplateMessageReader;
- static std::string getString(LLTemplateMessageReader* readerp, const char* block_name, S32 block_num, const char* var_name, e_message_variable_type var_type, BOOL &returned_hex, BOOL summary_mode = FALSE);
-};
-class LLMessageLogFilter
-{
-public:
- LLMessageLogFilter();
- ~LLMessageLogFilter();
- BOOL set(std::string filter);
- std::list mPositiveNames;
- std::list mNegativeNames;
-};
-class LLMessageLogFilterApply : public LLEventTimer
-{
-public:
- LLMessageLogFilterApply();
- void cancel();
- BOOL tick();
- S32 mProgress;
- BOOL mFinished;
-private:
- std::deque mQueuedMessages;
- std::deque::iterator mIter;
-};
-class LLFloaterMessageLog : public LLFloater, public LLEventTimer
-{
-public:
- LLFloaterMessageLog();
- ~LLFloaterMessageLog();
- static void show();
- BOOL postBuild();
- BOOL tick();
- LLNetListItem* findNetListItem(LLHost host);
- LLNetListItem* findNetListItem(LLUUID id);
- void refreshNetList();
- void refreshNetInfo(BOOL force);
- enum ENetInfoMode { NI_NET, NI_LOG };
- void setNetInfoMode(ENetInfoMode mode);
- static void onLog(LLMessageLogEntry entry);
- static void conditionalLog(LLFloaterMessageLogItem item);
- static void onCommitNetList(LLUICtrl* ctrl, void* user_data);
- static void onCommitMessageLog(LLUICtrl* ctrl, void* user_data);
- static void onCommitFilter(LLUICtrl* ctrl, void* user_data);
- static BOOL onClickCloseCircuit(void* user_data);
- static bool onConfirmCloseCircuit(const LLSD& notification, const LLSD& response );
- static bool onConfirmRemoveRegion(const LLSD& notification, const LLSD& response );
- static void onClickFilterApply(void* user_data);
- void startApplyingFilter(std::string filter, BOOL force);
- void stopApplyingFilter();
- void updateFilterStatus();
- static BOOL sBusyApplyingFilter;
- LLMessageLogFilterApply* mMessageLogFilterApply;
- static void onClickClearLog(void* user_data);
- static LLFloaterMessageLog* sInstance;
- static std::list sNetListItems;
- static std::deque sMessageLogEntries;
- static std::vector sFloaterMessageLogItems;
- static LLMessageLogFilter sMessageLogFilter;
- static std::string sMessageLogFilterString;
- ENetInfoMode mNetInfoMode;
- static void onClickFilterChoice(void* user_data);
- static void onClickFilterMenu(void* user_data);
-};
-//
diff --git a/indra/newview/llpanelgeneral.h b/indra/newview/llpanelgeneral.h
index b60ce2289..1249ec8ca 100644
--- a/indra/newview/llpanelgeneral.h
+++ b/indra/newview/llpanelgeneral.h
@@ -47,7 +47,7 @@ public:
void apply();
void cancel();
- static void LLPanelGeneral::onClickClearSettings(void*);
+ static void onClickClearSettings(void*);
static void callbackResetAllSettings(const LLSD& notification, const LLSD& response);
};
diff --git a/indra/newview/llpanelnetwork.cpp b/indra/newview/llpanelnetwork.cpp
index ebe4b1f84..4cb5c0481 100644
--- a/indra/newview/llpanelnetwork.cpp
+++ b/indra/newview/llpanelnetwork.cpp
@@ -45,6 +45,8 @@
#include "llviewercontrol.h"
#include "llviewerwindow.h"
+#include "llproxy.h"
+
bool LLPanelNetwork::sSocksSettingsChanged;
LLPanelNetwork::LLPanelNetwork()
@@ -132,7 +134,7 @@ void LLPanelNetwork::apply()
else
{
// Mark the socks class that it needs to update its connection
- LLSocks::getInstance()->updated();
+ //LLSocks::getInstance()->updated();
}
}
}
diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index a751810a2..b27e2bafd 100644
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -204,7 +204,7 @@
#include "llwlparammanager.h"
#include "llwaterparammanager.h"
#include "llagentlanguage.h"
-#include "llsocks5.h"
+#include "llproxy.h"
#include "jcfloaterareasearch.h"
//
@@ -440,6 +440,14 @@ bool idle_startup()
{
LLNotifications::instance().add(gViewerWindow->getInitAlert());
}
+
+ //-------------------------------------------------
+ // Init the SOCKS 5 proxy if the user has configured
+ // one. We need to do this early in case the user
+ // is using SOCKS for HTTP so we get the login
+ // screen and HTTP tables via SOCKS.
+ //-------------------------------------------------
+ LLStartUp::startLLProxy();
gSavedSettings.setS32("LastFeatureVersion", LLFeatureManager::getInstance()->getVersion());
@@ -634,15 +642,6 @@ bool idle_startup()
LL_INFOS("AppInit") << "Message System Initialized." << LL_ENDL;
- //-------------------------------------------------
- // Init the socks 5 proxy and open the control TCP
- // connection if the user is using SOCKS5
- // We need to do this early incase the user is using
- // socks for http so we get the login screen via socks
- //-------------------------------------------------
-
- LLStartUp::handleSocksProxy(false);
-
//-------------------------------------------------
// Load file- and dirpicker {context, default path} map.
//-------------------------------------------------
@@ -944,25 +943,15 @@ bool idle_startup()
// Post login screen, we should see if any settings have changed that may
// require us to either start/stop or change the socks proxy. As various communications
// past this point may require the proxy to be up.
- bool socks_enable_required = gSavedSettings.getBOOL("Socks5ProxyEnabled");
- if ((LLSocks::getInstance()->isEnabled() != socks_enable_required) || LLSocks::getInstance()->needsUpdate())
+ if (!LLStartUp::startLLProxy())
{
- if (socks_enable_required)
- {
- if (!LLStartUp::handleSocksProxy(false))
- {
- // Proxy start up failed, we should now bail the state machine
- // HandleSocksProxy() will have reported an error to the user
- // already, so we just go back to the login screen. The user
- // could then change the perferences to fix the issue.
- LLStartUp::setStartupState(STATE_LOGIN_SHOW);
- return FALSE;
- }
- }
- else
- {
- LLSocks::getInstance()->stopProxy();
- }
+ // Proxy start up failed, we should now bail the state machine
+ // startLLProxy() will have reported an error to the user
+ // already, so we just go back to the login screen. The user
+ // could then change the preferences to fix the issue.
+
+ LLStartUp::setStartupState(STATE_LOGIN_SHOW);
+ return FALSE;
}
//reset the values that could have come in from a slurl
@@ -4067,6 +4056,7 @@ void apply_udp_blacklist(const std::string& csv)
}
+/*
bool LLStartUp::handleSocksProxy(bool reportOK)
{
std::string httpProxyType = gSavedSettings.getString("Socks5HttpProxyType");
@@ -4157,3 +4147,164 @@ bool LLStartUp::handleSocksProxy(bool reportOK)
return true;
}
+*/
+
+/**
+ * Read all proxy configuration settings and set up both the HTTP proxy and
+ * SOCKS proxy as needed.
+ *
+ * Any errors that are encountered will result in showing the user a notification.
+ * When an error is encountered,
+ *
+ * @return Returns true if setup was successful, false if an error was encountered.
+ */
+bool LLStartUp::startLLProxy()
+{
+ bool proxy_ok = true;
+ std::string httpProxyType = gSavedSettings.getString("Socks5HttpProxyType");
+
+ // Set up SOCKS proxy (if needed)
+ if (gSavedSettings.getBOOL("Socks5ProxyEnabled"))
+ {
+ // Determine and update LLProxy with the saved authentication system
+ std::string auth_type = gSavedSettings.getString("Socks5AuthType");
+
+ if (auth_type.compare("UserPass") == 0)
+ {
+ std::string socks_user = gSavedSettings.getString("Socks5Username");
+ std::string socks_password = gSavedSettings.getString("Socks5Password");
+
+ bool ok = LLProxy::getInstance()->setAuthPassword(socks_user, socks_password);
+
+ if (!ok)
+ {
+ LLNotificationsUtil::add("SOCKS_BAD_CREDS");
+ proxy_ok = false;
+ }
+ }
+ else if (auth_type.compare("None") == 0)
+ {
+ LLProxy::getInstance()->setAuthNone();
+ }
+ else
+ {
+ LL_WARNS("Proxy") << "Invalid SOCKS 5 authentication type."<< LL_ENDL;
+
+ // Unknown or missing setting.
+ gSavedSettings.setString("Socks5AuthType", "None");
+
+ LLProxy::getInstance()->setAuthNone();
+ }
+
+ if (proxy_ok)
+ {
+ // Start the proxy and check for errors
+ // If status != SOCKS_OK, stopSOCKSProxy() will already have been called when startSOCKSProxy() returns.
+ LLHost socks_host;
+ socks_host.setHostByName(gSavedSettings.getString("Socks5ProxyHost"));
+ socks_host.setPort(gSavedSettings.getU32("Socks5ProxyPort"));
+ int status = LLProxy::getInstance()->startSOCKSProxy(socks_host);
+
+ if (status != SOCKS_OK)
+ {
+ LLSD subs;
+ subs["HOST"] = gSavedSettings.getString("Socks5ProxyHost");
+ subs["PORT"] = (S32)gSavedSettings.getU32("Socks5ProxyPort");
+
+ std::string error_string;
+
+ switch(status)
+ {
+ case SOCKS_CONNECT_ERROR: // TCP Fail
+ error_string = "SOCKS_CONNECT_ERROR";
+ break;
+
+ case SOCKS_NOT_PERMITTED: // SOCKS 5 server rule set refused connection
+ error_string = "SOCKS_NOT_PERMITTED";
+ break;
+
+ case SOCKS_NOT_ACCEPTABLE: // Selected authentication is not acceptable to server
+ error_string = "SOCKS_NOT_ACCEPTABLE";
+ break;
+
+ case SOCKS_AUTH_FAIL: // Authentication failed
+ error_string = "SOCKS_AUTH_FAIL";
+ break;
+
+ case SOCKS_UDP_FWD_NOT_GRANTED: // UDP forward request failed
+ error_string = "SOCKS_UDP_FWD_NOT_GRANTED";
+ break;
+
+ case SOCKS_HOST_CONNECT_FAILED: // Failed to open a TCP channel to the socks server
+ error_string = "SOCKS_HOST_CONNECT_FAILED";
+ break;
+
+ case SOCKS_INVALID_HOST: // Improperly formatted host address or port.
+ error_string = "SOCKS_INVALID_HOST";
+ break;
+
+ default:
+ error_string = "SOCKS_UNKNOWN_STATUS"; // Something strange happened,
+ LL_WARNS("Proxy") << "Unknown return from LLProxy::startProxy(): " << status << LL_ENDL;
+ break;
+ }
+
+ LLNotificationsUtil::add(error_string, subs);
+ proxy_ok = false;
+ }
+ }
+ }
+ else
+ {
+ LLProxy::getInstance()->stopSOCKSProxy(); // ensure no UDP proxy is running and it's all cleaned up
+ }
+
+ if (proxy_ok)
+ {
+ // Determine the HTTP proxy type (if any)
+ if ((httpProxyType.compare("Web") == 0) && gSavedSettings.getBOOL("BrowserProxyEnabled"))
+ {
+ LLHost http_host;
+ http_host.setHostByName(gSavedSettings.getString("BrowserProxyAddress"));
+ http_host.setPort(gSavedSettings.getS32("BrowserProxyPort"));
+ if (!LLProxy::getInstance()->enableHTTPProxy(http_host, LLPROXY_HTTP))
+ {
+ LLSD subs;
+ subs["HOST"] = http_host.getIPString();
+ subs["PORT"] = (S32)http_host.getPort();
+ LLNotificationsUtil::add("PROXY_INVALID_HTTP_HOST", subs);
+ proxy_ok = false;
+ }
+ }
+ else if ((httpProxyType.compare("Socks") == 0) && gSavedSettings.getBOOL("Socks5ProxyEnabled"))
+ {
+ LLHost socks_host;
+ socks_host.setHostByName(gSavedSettings.getString("Socks5ProxyHost"));
+ socks_host.setPort(gSavedSettings.getU32("Socks5ProxyPort"));
+ if (!LLProxy::getInstance()->enableHTTPProxy(socks_host, LLPROXY_SOCKS))
+ {
+ LLSD subs;
+ subs["HOST"] = socks_host.getIPString();
+ subs["PORT"] = (S32)socks_host.getPort();
+ LLNotificationsUtil::add("PROXY_INVALID_SOCKS_HOST", subs);
+ proxy_ok = false;
+ }
+ }
+ else if (httpProxyType.compare("None") == 0)
+ {
+ LLProxy::getInstance()->disableHTTPProxy();
+ }
+ else
+ {
+ LL_WARNS("Proxy") << "Invalid other HTTP proxy configuration."<< LL_ENDL;
+
+ // Set the missing or wrong configuration back to something valid.
+ gSavedSettings.setString("HttpProxyType", "None");
+ LLProxy::getInstance()->disableHTTPProxy();
+
+ // Leave proxy_ok alone, since this isn't necessarily fatal.
+ }
+ }
+
+ return proxy_ok;
+}
diff --git a/indra/newview/llstartup.h b/indra/newview/llstartup.h
index 2574f0907..8d183ab80 100644
--- a/indra/newview/llstartup.h
+++ b/indra/newview/llstartup.h
@@ -127,7 +127,7 @@ public:
// *HACK: On startup, if we were passed a secondlife://app/do/foo
// command URL, store it for later processing.
- static bool handleSocksProxy(bool reportOK = true);
+ static bool startLLProxy(); // Initialize the SOCKS 5 proxy
private:
static std::string startupStateToString(EStartupState state);
diff --git a/indra/newview/lltexturecache.cpp b/indra/newview/lltexturecache.cpp
index 60ced2e4d..478094d39 100644
--- a/indra/newview/lltexturecache.cpp
+++ b/indra/newview/lltexturecache.cpp
@@ -753,7 +753,7 @@ LLTextureCache::~LLTextureCache()
//////////////////////////////////////////////////////////////////////////////
//virtual
-S32 LLTextureCache::update(U32 max_time_ms)
+S32 LLTextureCache::update(F32 max_time_ms)
{
static LLFrameTimer timer;
static const F32 MAX_TIME_INTERVAL = 300.f; //seconds.
diff --git a/indra/newview/lltexturecache.h b/indra/newview/lltexturecache.h
index 991d8598b..c1814874d 100644
--- a/indra/newview/lltexturecache.h
+++ b/indra/newview/lltexturecache.h
@@ -101,7 +101,7 @@ public:
LLTextureCache(bool threaded);
~LLTextureCache();
- /*virtual*/ S32 update(U32 max_time_ms);
+ /*virtual*/ S32 update(F32 max_time_ms);
void purgeCache(ELLPath location);
void setReadOnly(BOOL read_only) ;
diff --git a/indra/newview/lltexturefetch.cpp b/indra/newview/lltexturefetch.cpp
index 0b30ae83c..846e35342 100644
--- a/indra/newview/lltexturefetch.cpp
+++ b/indra/newview/lltexturefetch.cpp
@@ -2361,7 +2361,7 @@ void LLTextureFetch::commonUpdate()
// MAIN THREAD
//virtual
-S32 LLTextureFetch::update(U32 max_time_ms)
+S32 LLTextureFetch::update(F32 max_time_ms)
{
static LLCachedControl band_width(gSavedSettings,"ThrottleBandwidthKBPS");
diff --git a/indra/newview/lltexturefetch.h b/indra/newview/lltexturefetch.h
index 6b84ffcd9..ee3cd2c75 100644
--- a/indra/newview/lltexturefetch.h
+++ b/indra/newview/lltexturefetch.h
@@ -63,7 +63,7 @@ public:
class TFRequest;
- /*virtual*/ S32 update(U32 max_time_ms);
+ /*virtual*/ S32 update(F32 max_time_ms);
void shutDownTextureCacheThread() ; //called in the main thread after the TextureCacheThread shuts down.
void shutDownImageDecodeThread() ; //called in the main thread after the ImageDecodeThread shuts down.
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index 2aee848f0..cf47fa100 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -245,7 +245,6 @@
//
#include "dofloaterhex.h"
#include "hgfloatertexteditor.h"
-#include "llfloatermessagelog.h"
#include "llfloatervfs.h"
#include "llfloatervfsexplorer.h"
#include "shfloatermediaticker.h"
@@ -482,7 +481,7 @@ void handle_phantom_avatar(void*);
void handle_hide_typing_notification(void*);
void handle_close_all_notifications(void*);
void handle_reopen_with_hex_editor(void*);
-void handle_open_message_log(void*);
+//void handle_open_message_log(void*);
void handle_edit_ao(void*);
void handle_local_assets(void*);
void handle_vfs_explorer(void*);
@@ -822,7 +821,7 @@ void init_menus()
(void*)"ReSit"));
menu->appendSeparator();
menu->append(new LLMenuItemCallGL( "Object Area Search", &handle_area_search, NULL));
- menu->append(new LLMenuItemCallGL( "Message Log", &handle_open_message_log, NULL));
+ //menu->append(new LLMenuItemCallGL( "Message Log", &handle_open_message_log, NULL));
menu->append(new LLMenuItemCallGL( "Sound Explorer",
&handle_sounds_explorer, NULL));
@@ -3764,10 +3763,10 @@ void handle_reopen_with_hex_editor(void*)
}
-void handle_open_message_log(void*)
+/*void handle_open_message_log(void*)
{
LLFloaterMessageLog::show();
-}
+}*/
void handle_edit_ao(void*)
{
diff --git a/indra/newview/llxmlrpctransaction.cpp b/indra/newview/llxmlrpctransaction.cpp
index 6d18fbc66..828013b07 100644
--- a/indra/newview/llxmlrpctransaction.cpp
+++ b/indra/newview/llxmlrpctransaction.cpp
@@ -226,24 +226,8 @@ void LLXMLRPCTransaction::Impl::init(XMLRPC_REQUEST request, bool useGzip)
{
mCurlRequest = new LLCurlEasyRequest();
}
-
- if (LLSocks::getInstance()->isHttpProxyEnabled())
- {
- std::string address = LLSocks::getInstance()->getHTTPProxy().getIPString();
- U16 port = LLSocks::getInstance()->getHTTPProxy().getPort();
- mCurlRequest->setoptString(CURLOPT_PROXY, address.c_str());
- mCurlRequest->setopt(CURLOPT_PROXYPORT, port);
- if (LLSocks::getInstance()->getHttpProxyType() == LLPROXY_SOCKS)
- {
- mCurlRequest->setopt(CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
- if(LLSocks::getInstance()->getSelectedAuthMethod()==METHOD_PASSWORD)
- mCurlRequest->setoptString(CURLOPT_PROXYUSERPWD,LLSocks::getInstance()->getProxyUserPwd());
- }
- else
- {
- mCurlRequest->setopt(CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
- }
- }
+
+ LLProxy::getInstance()->applyProxySettings(mCurlRequest);
// mCurlRequest->setopt(CURLOPT_VERBOSE, 1); // usefull for debugging
mCurlRequest->setopt(CURLOPT_NOSIGNAL, 1);
@@ -322,7 +306,7 @@ bool LLXMLRPCTransaction::Impl::process()
//const F32 MAX_PROCESSING_TIME = 0.05f;
//LLTimer timer;
- mCurlRequest->perform();
+ mCurlRequest->wait();
/*while (mCurlRequest->perform() > 0)
{
From 83a3bbb48e66b6e56d59f46b201fcefdd769acb1 Mon Sep 17 00:00:00 2001
From: Siana Gearz
Date: Tue, 6 Mar 2012 09:01:01 +0100
Subject: [PATCH 34/35] Fixies from viewer-development
---
indra/llaudio/llaudioengine.cpp | 23 +++++++++++++++++++----
indra/llaudio/llaudioengine.h | 1 +
indra/llcommon/llsys.cpp | 18 ++++++++++++++----
indra/newview/llviewertexture.cpp | 2 +-
indra/newview/llviewertexturelist.cpp | 3 +++
indra/newview/llviewerwindow.cpp | 7 +++++--
indra/newview/llvoavatar.h | 2 ++
indra/newview/llvoavatarself.h | 1 +
indra/newview/llvovolume.cpp | 1 +
indra/newview/llwearablelist.cpp | 2 +-
indra/newview/llxmlrpctransaction.cpp | 20 ++++++++++++++++++++
indra/newview/pipeline.cpp | 7 +++++--
12 files changed, 73 insertions(+), 14 deletions(-)
diff --git a/indra/llaudio/llaudioengine.cpp b/indra/llaudio/llaudioengine.cpp
index 59977faf2..d696020bb 100644
--- a/indra/llaudio/llaudioengine.cpp
+++ b/indra/llaudio/llaudioengine.cpp
@@ -1321,6 +1321,7 @@ LLAudioSource::LLAudioSource(const LLUUID& id, const LLUUID& owner_id, const F32
mSyncSlave(false),
mQueueSounds(false),
mPlayedOnce(false),
+ mCorrupted(false),
mType(type),
//
mSourceID(source_id),
@@ -1372,16 +1373,25 @@ void LLAudioSource::setChannel(LLAudioChannel *channelp)
void LLAudioSource::update()
{
+ if(mCorrupted)
+ {
+ return ; //no need to update
+ }
+
if (!getCurrentBuffer())
{
if (getCurrentData())
{
// Hack - try and load the sound. Will do this as a callback
// on decode later.
- if (getCurrentData()->load())
+ if (getCurrentData()->load() && getCurrentData()->getBuffer())
{
play(getCurrentData()->getID());
- }
+ }
+ else
+ {
+ mCorrupted = true ;
+ }
}
}
}
@@ -1502,6 +1512,11 @@ bool LLAudioSource::play(const LLUUID &audio_uuid)
bool LLAudioSource::isDone() const
{
+ if(mCorrupted)
+ {
+ return true ;
+ }
+
const F32 MAX_AGE = 60.f;
const F32 MAX_UNPLAYED_AGE = 15.f;
const F32 MAX_MUTED_AGE = 11.f;
@@ -1817,7 +1832,7 @@ LLAudioData::LLAudioData(const LLUUID &uuid) :
}
}
-
+//return false when the audio file is corrupted.
bool LLAudioData::load()
{
// For now, just assume we're going to use one buffer per audiodata.
@@ -1833,7 +1848,7 @@ bool LLAudioData::load()
{
// No free buffers, abort.
llinfos << "Not able to allocate a new audio buffer, aborting." << llendl;
- return false;
+ return true;
}
std::string uuid_str;
diff --git a/indra/llaudio/llaudioengine.h b/indra/llaudio/llaudioengine.h
index 0edaff884..254a1ee1f 100644
--- a/indra/llaudio/llaudioengine.h
+++ b/indra/llaudio/llaudioengine.h
@@ -366,6 +366,7 @@ protected:
bool mSyncSlave;
bool mQueueSounds;
bool mPlayedOnce;
+ bool mCorrupted;
S32 mType;
LLVector3d mPositionGlobal;
LLVector3 mVelocity;
diff --git a/indra/llcommon/llsys.cpp b/indra/llcommon/llsys.cpp
index edb882de0..db6e02ca2 100644
--- a/indra/llcommon/llsys.cpp
+++ b/indra/llcommon/llsys.cpp
@@ -833,11 +833,21 @@ BOOL gzip_file(const std::string& srcfile, const std::string& dstfile)
src = LLFile::fopen(srcfile, "rb"); /* Flawfinder: ignore */
if (! src) goto err;
- do
+ while ((bytes = (S32)fread(buffer, sizeof(U8), COMPRESS_BUFFER_SIZE, src)) > 0)
{
- bytes = (S32)fread(buffer, sizeof(U8), COMPRESS_BUFFER_SIZE,src);
- gzwrite(dst, buffer, bytes);
- } while(feof(src) == 0);
+ if (gzwrite(dst, buffer, bytes) <= 0)
+ {
+ llwarns << "gzwrite failed: " << gzerror(dst, NULL) << llendl;
+ goto err;
+ }
+ }
+
+ if (ferror(src))
+ {
+ llwarns << "Error reading " << srcfile << llendl;
+ goto err;
+ }
+
gzclose(dst);
dst = NULL;
#if LL_WINDOWS
diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp
index 2b783881e..1096d9b7a 100644
--- a/indra/newview/llviewertexture.cpp
+++ b/indra/newview/llviewertexture.cpp
@@ -3235,7 +3235,7 @@ void LLViewerLODTexture::processTextureStats()
scaleDown() ;
}
// Limit the amount of GL memory bound each frame
- if ( BYTES_TO_MEGA_BYTES(sBoundTextureMemoryInBytes) > sMaxBoundTextureMemInMegaBytes * texmem_middle_bound_scale &&
+ else if ( BYTES_TO_MEGA_BYTES(sBoundTextureMemoryInBytes) > sMaxBoundTextureMemInMegaBytes * texmem_middle_bound_scale &&
(!getBoundRecently() || mDesiredDiscardLevel >= mCachedRawDiscardLevel))
{
scaleDown() ;
diff --git a/indra/newview/llviewertexturelist.cpp b/indra/newview/llviewertexturelist.cpp
index 041716435..442e78857 100644
--- a/indra/newview/llviewertexturelist.cpp
+++ b/indra/newview/llviewertexturelist.cpp
@@ -558,6 +558,7 @@ void LLViewerTextureList::removeImageFromList(LLViewerFetchedTexture *image)
S32 count = mImageList.erase(image) ;
if(count != 1)
{
+ llinfos << image->getID() << llendl ;
llerrs << "Error happens when remove image from mImageList: " << count << llendl ;
}
@@ -956,6 +957,8 @@ void LLViewerTextureList::decodeAllImages(F32 max_time)
image_list.push_back(imagep);
imagep->setInImageList(FALSE) ;
}
+
+ llassert_always(image_list.size() == mImageList.size()) ;
mImageList.clear();
for (std::vector >::iterator iter = image_list.begin();
iter != image_list.end(); ++iter)
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index a45023005..ada92721d 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -634,7 +634,9 @@ public:
addText(xpos, ypos, llformat("%d/%d Mesh HTTP Requests/Retries", LLMeshRepository::sHTTPRequestCount,
LLMeshRepository::sHTTPRetryCount));
-
+ ypos += y_inc;
+
+ addText(xpos, ypos, llformat("%d/%d Mesh LOD Pending/Processing", LLMeshRepository::sLODPending, LLMeshRepository::sLODProcessing));
ypos += y_inc;
addText(xpos, ypos, llformat("%.3f/%.3f MB Mesh Cache Read/Write ", LLMeshRepository::sCacheBytesRead/(1024.f*1024.f), LLMeshRepository::sCacheBytesWritten/(1024.f*1024.f)));
@@ -1070,7 +1072,8 @@ void LLViewerWindow::handleMouseMove(LLWindow *window, LLCoordGL pos, MASK mask
mWindow->showCursorFromMouseMove();
- if (gAwayTimer.getElapsedTimeF32() > MIN_AFK_TIME)
+ if (gAwayTimer.getElapsedTimeF32() > MIN_AFK_TIME
+ && !gDisconnected)
{
gAgent.clearAFK();
}
diff --git a/indra/newview/llvoavatar.h b/indra/newview/llvoavatar.h
index 4ac8ffce1..ae799ca1d 100644
--- a/indra/newview/llvoavatar.h
+++ b/indra/newview/llvoavatar.h
@@ -84,6 +84,8 @@ class LLVOAvatar :
public LLViewerObject,
public LLCharacter
{
+ LOG_CLASS(LLVOAvatar);
+
public:
friend class LLVOAvatarSelf;
protected:
diff --git a/indra/newview/llvoavatarself.h b/indra/newview/llvoavatarself.h
index 24ee48517..d8e1187cb 100644
--- a/indra/newview/llvoavatarself.h
+++ b/indra/newview/llvoavatarself.h
@@ -39,6 +39,7 @@
class LLVOAvatarSelf :
public LLVOAvatar
{
+ LOG_CLASS(LLVOAvatarSelf);
/********************************************************************************
** **
diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp
index df0925c6c..d487567b1 100644
--- a/indra/newview/llvovolume.cpp
+++ b/indra/newview/llvovolume.cpp
@@ -4244,6 +4244,7 @@ void LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, std::
}
}
else if (gPipeline.canUseVertexShaders()
+ && group->mSpatialPartition->mPartitionType != LLViewerRegion::PARTITION_HUD
&& LLPipeline::sRenderBump
&& te->getShiny())
{ //shiny
diff --git a/indra/newview/llwearablelist.cpp b/indra/newview/llwearablelist.cpp
index 535beb3ad..2648b537a 100644
--- a/indra/newview/llwearablelist.cpp
+++ b/indra/newview/llwearablelist.cpp
@@ -71,7 +71,7 @@ struct LLWearableArrivedData
LLWearableList::~LLWearableList()
{
- llassert_always(mList.empty()) ;
+ cleanup();
}
void LLWearableList::cleanup()
diff --git a/indra/newview/llxmlrpctransaction.cpp b/indra/newview/llxmlrpctransaction.cpp
index 828013b07..159255078 100644
--- a/indra/newview/llxmlrpctransaction.cpp
+++ b/indra/newview/llxmlrpctransaction.cpp
@@ -227,6 +227,16 @@ void LLXMLRPCTransaction::Impl::init(XMLRPC_REQUEST request, bool useGzip)
mCurlRequest = new LLCurlEasyRequest();
}
+ if(!mCurlRequest->isValid())
+ {
+ llwarns << "mCurlRequest is invalid." << llendl ;
+
+ delete mCurlRequest ;
+ mCurlRequest = NULL ;
+ return ;
+ }
+
+
LLProxy::getInstance()->applyProxySettings(mCurlRequest);
// mCurlRequest->setopt(CURLOPT_VERBOSE, 1); // usefull for debugging
@@ -277,10 +287,20 @@ LLXMLRPCTransaction::Impl::~Impl()
}
delete mCurlRequest;
+ mCurlRequest = NULL ;
}
bool LLXMLRPCTransaction::Impl::process()
{
+ if(!mCurlRequest || !mCurlRequest->isValid())
+ {
+ llwarns << "transaction failed." << llendl ;
+
+ delete mCurlRequest ;
+ mCurlRequest = NULL ;
+ return true ; //failed, quit.
+ }
+
switch(mStatus)
{
case LLXMLRPCTransaction::StatusComplete:
diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp
index 3c113c0ac..4b5a073b3 100644
--- a/indra/newview/pipeline.cpp
+++ b/indra/newview/pipeline.cpp
@@ -1021,10 +1021,12 @@ void LLPipeline::restoreGL()
BOOL LLPipeline::canUseVertexShaders()
{
+ static const std::string vertex_shader_enable_feature_string = "VertexShaderEnable";
+
if (sDisableShaders ||
!gGLManager.mHasVertexShader ||
!gGLManager.mHasFragmentShader ||
- !LLFeatureManager::getInstance()->isFeatureAvailable("VertexShaderEnable") ||
+ !LLFeatureManager::getInstance()->isFeatureAvailable(vertex_shader_enable_feature_string) ||
(assertInitialized() && mVertexShadersLoaded != 1) )
{
return FALSE;
@@ -5085,7 +5087,8 @@ void LLPipeline::setupHWLights(LLDrawPool* pool)
light_state->setSpotCutoff(90.f);
light_state->setSpotExponent(2.f);
- light_state->setSpecular(LLColor4::black);
+ const LLColor4 specular(0.f, 0.f, 0.f, 0.f);
+ light_state->setSpecular(specular);
}
else // omnidirectional (point) light
{
From 1db7221508727e96e1b778446b5e54fffa68e832 Mon Sep 17 00:00:00 2001
From: Siana Gearz
Date: Tue, 6 Mar 2012 09:11:36 +0100
Subject: [PATCH 35/35] And of course i forgot to add some files
---
indra/llmessage/llareslistener.cpp | 97 ++++
indra/llmessage/llareslistener.h | 53 ++
indra/llmessage/llproxy.cpp | 546 ++++++++++++++++++
indra/llmessage/llproxy.h | 352 +++++++++++
indra/llmessage/tests/llareslistener_test.cpp | 217 +++++++
.../tests/llavatarnamecache_test.cpp | 102 ++++
indra/llmessage/tests/llhost_test.cpp | 251 ++++++++
indra/llmessage/tests/llmime_test.cpp | 445 ++++++++++++++
indra/llmessage/tests/llmockhttpclient.h | 66 +++
indra/llmessage/tests/llnamevalue_test.cpp | 406 +++++++++++++
indra/llmessage/tests/llpartdata_test.cpp | 216 +++++++
.../tests/llregionpresenceverifier_test.cpp | 108 ++++
indra/llmessage/tests/llsdmessage_test.cpp | 158 +++++
indra/llmessage/tests/llxfer_file_test.cpp | 58 ++
indra/llmessage/tests/testrunner.py | 262 +++++++++
15 files changed, 3337 insertions(+)
create mode 100644 indra/llmessage/llareslistener.cpp
create mode 100644 indra/llmessage/llareslistener.h
create mode 100644 indra/llmessage/llproxy.cpp
create mode 100644 indra/llmessage/llproxy.h
create mode 100644 indra/llmessage/tests/llareslistener_test.cpp
create mode 100644 indra/llmessage/tests/llavatarnamecache_test.cpp
create mode 100644 indra/llmessage/tests/llhost_test.cpp
create mode 100644 indra/llmessage/tests/llmime_test.cpp
create mode 100644 indra/llmessage/tests/llmockhttpclient.h
create mode 100644 indra/llmessage/tests/llnamevalue_test.cpp
create mode 100644 indra/llmessage/tests/llpartdata_test.cpp
create mode 100644 indra/llmessage/tests/llregionpresenceverifier_test.cpp
create mode 100644 indra/llmessage/tests/llsdmessage_test.cpp
create mode 100644 indra/llmessage/tests/llxfer_file_test.cpp
create mode 100644 indra/llmessage/tests/testrunner.py
diff --git a/indra/llmessage/llareslistener.cpp b/indra/llmessage/llareslistener.cpp
new file mode 100644
index 000000000..58b8a05a9
--- /dev/null
+++ b/indra/llmessage/llareslistener.cpp
@@ -0,0 +1,97 @@
+/**
+ * @file llareslistener.cpp
+ * @author Nat Goodspeed
+ * @date 2009-03-18
+ * @brief Implementation for llareslistener.
+ *
+ * $LicenseInfo:firstyear=2009&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+// Precompiled header
+#include "linden_common.h"
+// associated header
+#include "llareslistener.h"
+// STL headers
+// std headers
+// external library headers
+// other Linden headers
+#include "llares.h"
+#include "llerror.h"
+#include "llevents.h"
+#include "llsdutil.h"
+
+LLAresListener::LLAresListener(LLAres* llares):
+ LLEventAPI("LLAres",
+ "LLAres listener to request DNS operations"),
+ mAres(llares)
+{
+ // add() every method we want to be able to invoke via this event API.
+ // Optional last parameter validates expected LLSD request structure.
+ add("rewriteURI",
+ "Given [\"uri\"], return on [\"reply\"] an array of alternative URIs.\n"
+ "On failure, returns an array containing only the original URI, so\n"
+ "failure case can be processed like success case.",
+ &LLAresListener::rewriteURI,
+ LLSD().with("uri", LLSD()).with("reply", LLSD()));
+}
+
+/// This UriRewriteResponder subclass packages returned URIs as an LLSD
+/// array to send back to the requester.
+class UriRewriteResponder: public LLAres::UriRewriteResponder
+{
+public:
+ /**
+ * Specify the request, containing the event pump name on which to send
+ * the reply.
+ */
+ UriRewriteResponder(const LLSD& request):
+ mReqID(request),
+ mPumpName(request["reply"])
+ {}
+
+ /// Called by base class with results. This is called in both the
+ /// success and error cases. On error, the calling logic passes the
+ /// original URI.
+ virtual void rewriteResult(const std::vector& uris)
+ {
+ LLSD result;
+ for (std::vector::const_iterator ui(uris.begin()), uend(uris.end());
+ ui != uend; ++ui)
+ {
+ result.append(*ui);
+ }
+ // This call knows enough to avoid trying to insert a map key into an
+ // LLSD array. It's there so that if, for any reason, we ever decide
+ // to change the response from array to map, it will Just Start Working.
+ mReqID.stamp(result);
+ LLEventPumps::instance().obtain(mPumpName).post(result);
+ }
+
+private:
+ LLReqID mReqID;
+ const std::string mPumpName;
+};
+
+void LLAresListener::rewriteURI(const LLSD& data)
+{
+ mAres->rewriteURI(data["uri"], new UriRewriteResponder(data));
+}
diff --git a/indra/llmessage/llareslistener.h b/indra/llmessage/llareslistener.h
new file mode 100644
index 000000000..780dcdd9c
--- /dev/null
+++ b/indra/llmessage/llareslistener.h
@@ -0,0 +1,53 @@
+/**
+ * @file llareslistener.h
+ * @author Nat Goodspeed
+ * @date 2009-03-18
+ * @brief LLEventPump API for LLAres. This header doesn't actually define the
+ * API; the API is defined by the pump name on which this class
+ * listens, and by the expected content of LLSD it receives.
+ *
+ * $LicenseInfo:firstyear=2009&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#if ! defined(LL_LLARESLISTENER_H)
+#define LL_LLARESLISTENER_H
+
+#include "lleventapi.h"
+
+class LLAres;
+class LLSD;
+
+/// Listen on an LLEventPump with specified name for LLAres request events.
+class LLAresListener: public LLEventAPI
+{
+public:
+ /// Bind the LLAres instance to use (e.g. gAres)
+ LLAresListener(LLAres* llares);
+
+private:
+ /// command["op"] == "rewriteURI"
+ void rewriteURI(const LLSD& data);
+
+ LLAres* mAres;
+};
+
+#endif /* ! defined(LL_LLARESLISTENER_H) */
diff --git a/indra/llmessage/llproxy.cpp b/indra/llmessage/llproxy.cpp
new file mode 100644
index 000000000..4a7d326c0
--- /dev/null
+++ b/indra/llmessage/llproxy.cpp
@@ -0,0 +1,546 @@
+/**
+ * @file llproxy.cpp
+ * @brief UDP and HTTP proxy communications
+ *
+ * $LicenseInfo:firstyear=2011&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2011, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#include "linden_common.h"
+
+#include "llproxy.h"
+
+#include
+#include
+
+#include "llapr.h"
+#include "llcurl.h"
+#include "llhost.h"
+
+// Static class variable instances
+
+// We want this to be static to avoid excessive indirection on every
+// incoming packet just to do a simple bool test. The getter for this
+// member is also static
+bool LLProxy::sUDPProxyEnabled = false;
+
+// Some helpful TCP static functions.
+static apr_status_t tcp_blocking_handshake(LLSocket::ptr_t handle, char * dataout, apr_size_t outlen, char * datain, apr_size_t maxinlen); // Do a TCP data handshake
+static LLSocket::ptr_t tcp_open_channel(LLHost host); // Open a TCP channel to a given host
+static void tcp_close_channel(LLSocket::ptr_t* handle_ptr); // Close an open TCP channel
+
+LLProxy::LLProxy():
+ mHTTPProxyEnabled(false),
+ mProxyMutex(),
+ mUDPProxy(),
+ mTCPProxy(),
+ mHTTPProxy(),
+ mProxyType(LLPROXY_SOCKS),
+ mAuthMethodSelected(METHOD_NOAUTH),
+ mSocksUsername(),
+ mSocksPassword()
+{
+}
+
+LLProxy::~LLProxy()
+{
+ stopSOCKSProxy();
+ disableHTTPProxy();
+}
+
+/**
+ * @brief Open the SOCKS 5 TCP control channel.
+ *
+ * Perform a SOCKS 5 authentication and UDP association with the proxy server.
+ *
+ * @param proxy The SOCKS 5 server to connect to.
+ * @return SOCKS_OK if successful, otherwise a socks error code from llproxy.h.
+ */
+S32 LLProxy::proxyHandshake(LLHost proxy)
+{
+ S32 result;
+
+ /* SOCKS 5 Auth request */
+ socks_auth_request_t socks_auth_request;
+ socks_auth_response_t socks_auth_response;
+
+ socks_auth_request.version = SOCKS_VERSION; // SOCKS version 5
+ socks_auth_request.num_methods = 1; // Sending 1 method.
+ socks_auth_request.methods = getSelectedAuthMethod(); // Send only the selected method.
+
+ result = tcp_blocking_handshake(mProxyControlChannel,
+ static_cast(static_cast(&socks_auth_request)),
+ sizeof(socks_auth_request),
+ static_cast(static_cast(&socks_auth_response)),
+ sizeof(socks_auth_response));
+ if (result != APR_SUCCESS)
+ {
+ LL_WARNS("Proxy") << "SOCKS authentication request failed, error on TCP control channel : " << result << LL_ENDL;
+ stopSOCKSProxy();
+ return SOCKS_CONNECT_ERROR;
+ }
+
+ if (socks_auth_response.method == AUTH_NOT_ACCEPTABLE)
+ {
+ LL_WARNS("Proxy") << "SOCKS 5 server refused all our authentication methods." << LL_ENDL;
+ stopSOCKSProxy();
+ return SOCKS_NOT_ACCEPTABLE;
+ }
+
+ /* SOCKS 5 USERNAME/PASSWORD authentication */
+ if (socks_auth_response.method == METHOD_PASSWORD)
+ {
+ // The server has requested a username/password combination
+ std::string socks_username(getSocksUser());
+ std::string socks_password(getSocksPwd());
+ U32 request_size = socks_username.size() + socks_password.size() + 3;
+ char * password_auth = new char[request_size];
+ password_auth[0] = 0x01;
+ password_auth[1] = socks_username.size();
+ memcpy(&password_auth[2], socks_username.c_str(), socks_username.size());
+ password_auth[socks_username.size() + 2] = socks_password.size();
+ memcpy(&password_auth[socks_username.size() + 3], socks_password.c_str(), socks_password.size());
+
+ authmethod_password_reply_t password_reply;
+
+ result = tcp_blocking_handshake(mProxyControlChannel,
+ password_auth,
+ request_size,
+ static_cast(static_cast(&password_reply)),
+ sizeof(password_reply));
+ delete[] password_auth;
+
+ if (result != APR_SUCCESS)
+ {
+ LL_WARNS("Proxy") << "SOCKS authentication failed, error on TCP control channel : " << result << LL_ENDL;
+ stopSOCKSProxy();
+ return SOCKS_CONNECT_ERROR;
+ }
+
+ if (password_reply.status != AUTH_SUCCESS)
+ {
+ LL_WARNS("Proxy") << "SOCKS authentication failed" << LL_ENDL;
+ stopSOCKSProxy();
+ return SOCKS_AUTH_FAIL;
+ }
+ }
+
+ /* SOCKS5 connect request */
+
+ socks_command_request_t connect_request;
+ socks_command_response_t connect_reply;
+
+ connect_request.version = SOCKS_VERSION; // SOCKS V5
+ connect_request.command = COMMAND_UDP_ASSOCIATE; // Associate UDP
+ connect_request.reserved = FIELD_RESERVED;
+ connect_request.atype = ADDRESS_IPV4;
+ connect_request.address = htonl(0); // 0.0.0.0
+ connect_request.port = htons(0); // 0
+ // "If the client is not in possession of the information at the time of the UDP ASSOCIATE,
+ // the client MUST use a port number and address of all zeros. RFC 1928"
+
+ result = tcp_blocking_handshake(mProxyControlChannel,
+ static_cast(static_cast(&connect_request)),
+ sizeof(connect_request),
+ static_cast(static_cast(&connect_reply)),
+ sizeof(connect_reply));
+ if (result != APR_SUCCESS)
+ {
+ LL_WARNS("Proxy") << "SOCKS connect request failed, error on TCP control channel : " << result << LL_ENDL;
+ stopSOCKSProxy();
+ return SOCKS_CONNECT_ERROR;
+ }
+
+ if (connect_reply.reply != REPLY_REQUEST_GRANTED)
+ {
+ LL_WARNS("Proxy") << "Connection to SOCKS 5 server failed, UDP forward request not granted" << LL_ENDL;
+ stopSOCKSProxy();
+ return SOCKS_UDP_FWD_NOT_GRANTED;
+ }
+
+ mUDPProxy.setPort(ntohs(connect_reply.port)); // reply port is in network byte order
+ mUDPProxy.setAddress(proxy.getAddress());
+ // The connection was successful. We now have the UDP port to send requests that need forwarding to.
+ LL_INFOS("Proxy") << "SOCKS 5 UDP proxy connected on " << mUDPProxy << LL_ENDL;
+
+ return SOCKS_OK;
+}
+
+/**
+ * @brief Initiates a SOCKS 5 proxy session.
+ *
+ * Performs basic checks on host to verify that it is a valid address. Opens the control channel
+ * and then negotiates the proxy connection with the server. Closes any existing SOCKS
+ * connection before proceeding. Also disables an HTTP proxy if it is using SOCKS as the proxy.
+ *
+ *
+ * @param host Socks server to connect to.
+ * @return SOCKS_OK if successful, otherwise a SOCKS error code defined in llproxy.h.
+ */
+S32 LLProxy::startSOCKSProxy(LLHost host)
+{
+ if (host.isOk())
+ {
+ mTCPProxy = host;
+ }
+ else
+ {
+ return SOCKS_INVALID_HOST;
+ }
+
+ // Close any running SOCKS connection.
+ stopSOCKSProxy();
+
+ mProxyControlChannel = tcp_open_channel(mTCPProxy);
+ if (!mProxyControlChannel)
+ {
+ return SOCKS_HOST_CONNECT_FAILED;
+ }
+
+ S32 status = proxyHandshake(mTCPProxy);
+
+ if (status != SOCKS_OK)
+ {
+ // Shut down the proxy if any of the above steps failed.
+ stopSOCKSProxy();
+ }
+ else
+ {
+ // Connection was successful.
+ sUDPProxyEnabled = true;
+ }
+
+ return status;
+}
+
+/**
+ * @brief Stop using the SOCKS 5 proxy.
+ *
+ * This will stop sending UDP packets through the SOCKS 5 proxy
+ * and will also stop the HTTP proxy if it is configured to use SOCKS.
+ * The proxy control channel will also be disconnected.
+ */
+void LLProxy::stopSOCKSProxy()
+{
+ sUDPProxyEnabled = false;
+
+ // If the SOCKS proxy is requested to stop and we are using that for HTTP as well
+ // then we must shut down any HTTP proxy operations. But it is allowable if web
+ // proxy is being used to continue proxying HTTP.
+
+ if (LLPROXY_SOCKS == getHTTPProxyType())
+ {
+ disableHTTPProxy();
+ }
+
+ if (mProxyControlChannel)
+ {
+ tcp_close_channel(&mProxyControlChannel);
+ }
+}
+
+/**
+ * @brief Set the proxy's SOCKS authentication method to none.
+ */
+void LLProxy::setAuthNone()
+{
+ LLMutexLock lock(&mProxyMutex);
+
+ mAuthMethodSelected = METHOD_NOAUTH;
+}
+
+/**
+ * @brief Set the proxy's SOCKS authentication method to password.
+ *
+ * Check whether the lengths of the supplied username
+ * and password conform to the lengths allowed by the
+ * SOCKS protocol.
+ *
+ * @param username The SOCKS username to send.
+ * @param password The SOCKS password to send.
+ * @return Return true if applying the settings was successful. No changes are made if false.
+ *
+ */
+bool LLProxy::setAuthPassword(const std::string &username, const std::string &password)
+{
+ if (username.length() > SOCKSMAXUSERNAMELEN || password.length() > SOCKSMAXPASSWORDLEN ||
+ username.length() < SOCKSMINUSERNAMELEN || password.length() < SOCKSMINPASSWORDLEN)
+ {
+ LL_WARNS("Proxy") << "Invalid SOCKS 5 password or username length." << LL_ENDL;
+ return false;
+ }
+
+ LLMutexLock lock(&mProxyMutex);
+
+ mAuthMethodSelected = METHOD_PASSWORD;
+ mSocksUsername = username;
+ mSocksPassword = password;
+
+ return true;
+}
+
+/**
+ * @brief Enable the HTTP proxy for either SOCKS or HTTP.
+ *
+ * Check the supplied host to see if it is a valid IP and port.
+ *
+ * @param httpHost Proxy server to connect to.
+ * @param type Is the host a SOCKS or HTTP proxy.
+ * @return Return true if applying the setting was successful. No changes are made if false.
+ */
+bool LLProxy::enableHTTPProxy(LLHost httpHost, LLHttpProxyType type)
+{
+ if (!httpHost.isOk())
+ {
+ LL_WARNS("Proxy") << "Invalid SOCKS 5 Server" << LL_ENDL;
+ return false;
+ }
+
+ LLMutexLock lock(&mProxyMutex);
+
+ mHTTPProxy = httpHost;
+ mProxyType = type;
+
+ mHTTPProxyEnabled = true;
+
+ return true;
+}
+
+/**
+ * @brief Enable the HTTP proxy without changing the proxy settings.
+ *
+ * This should not be called unless the proxy has already been set up.
+ *
+ * @return Return true only if the current settings are valid and the proxy was enabled.
+ */
+bool LLProxy::enableHTTPProxy()
+{
+ bool ok;
+
+ LLMutexLock lock(&mProxyMutex);
+
+ ok = (mHTTPProxy.isOk());
+ if (ok)
+ {
+ mHTTPProxyEnabled = true;
+ }
+
+ return ok;
+}
+
+/**
+ * @brief Disable the HTTP proxy.
+ */
+void LLProxy::disableHTTPProxy()
+{
+ LLMutexLock lock(&mProxyMutex);
+
+ mHTTPProxyEnabled = false;
+}
+
+/**
+ * @brief Get the currently selected HTTP proxy type
+ */
+LLHttpProxyType LLProxy::getHTTPProxyType() const
+{
+ LLMutexLock lock(&mProxyMutex);
+ return mProxyType;
+}
+
+/**
+ * @brief Get the SOCKS 5 password.
+ */
+std::string LLProxy::getSocksPwd() const
+{
+ LLMutexLock lock(&mProxyMutex);
+ return mSocksPassword;
+}
+
+/**
+ * @brief Get the SOCKS 5 username.
+ */
+std::string LLProxy::getSocksUser() const
+{
+ LLMutexLock lock(&mProxyMutex);
+ return mSocksUsername;
+}
+
+/**
+ * @brief Get the currently selected SOCKS 5 authentication method.
+ *
+ * @return Returns either none or password.
+ */
+LLSocks5AuthType LLProxy::getSelectedAuthMethod() const
+{
+ LLMutexLock lock(&mProxyMutex);
+ return mAuthMethodSelected;
+}
+
+/**
+ * @brief Stop the LLProxy and make certain that any APR pools and classes are deleted before terminating APR.
+ *
+ * Deletes the LLProxy singleton, destroying the APR pool used by the control channel as well as .
+ */
+//static
+void LLProxy::cleanupClass()
+{
+ getInstance()->stopSOCKSProxy();
+ deleteSingleton();
+}
+
+void LLProxy::applyProxySettings(LLCurlEasyRequest* handle)
+{
+ applyProxySettings(handle->getEasy());
+}
+
+void LLProxy::applyProxySettings(LLCurl::Easy* handle)
+{
+ applyProxySettings(handle->getCurlHandle());
+}
+
+/**
+ * @brief Apply proxy settings to a CuRL request if an HTTP proxy is enabled.
+ *
+ * This method has been designed to be safe to call from
+ * any thread in the viewer. This allows requests in the
+ * texture fetch thread to be aware of the proxy settings.
+ * When the HTTP proxy is enabled, the proxy mutex will
+ * be locked every time this method is called.
+ *
+ * @param handle A pointer to a valid CURL request, before it has been performed.
+ */
+void LLProxy::applyProxySettings(CURL* handle)
+{
+ // Do a faster unlocked check to see if we are supposed to proxy.
+ if (mHTTPProxyEnabled)
+ {
+ // We think we should proxy, lock the proxy mutex.
+ LLMutexLock lock(&mProxyMutex);
+ // Now test again to verify that the proxy wasn't disabled between the first check and the lock.
+ if (mHTTPProxyEnabled)
+ {
+ LLCurlFF::check_easy_code(curl_easy_setopt(handle, CURLOPT_PROXY, mHTTPProxy.getIPString().c_str()));
+ LLCurlFF::check_easy_code(curl_easy_setopt(handle, CURLOPT_PROXYPORT, mHTTPProxy.getPort()));
+
+ if (mProxyType == LLPROXY_SOCKS)
+ {
+ LLCurlFF::check_easy_code(curl_easy_setopt(handle, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5));
+ if (mAuthMethodSelected == METHOD_PASSWORD)
+ {
+ std::string auth_string = mSocksUsername + ":" + mSocksPassword;
+ LLCurlFF::check_easy_code(curl_easy_setopt(handle, CURLOPT_PROXYUSERPWD, auth_string.c_str()));
+ }
+ }
+ else
+ {
+ LLCurlFF::check_easy_code(curl_easy_setopt(handle, CURLOPT_PROXYTYPE, CURLPROXY_HTTP));
+ }
+ }
+ }
+}
+
+/**
+ * @brief Send one TCP packet and receive one in return.
+ *
+ * This operation is done synchronously with a 1000ms timeout. Therefore, it should not be used when a blocking
+ * operation would impact the operation of the viewer.
+ *
+ * @param handle_ptr Pointer to a connected LLSocket of type STREAM_TCP.
+ * @param dataout Data to send.
+ * @param outlen Length of dataout.
+ * @param datain Buffer for received data. Undefined if return value is not APR_SUCCESS.
+ * @param maxinlen Maximum possible length of received data. Short reads are allowed.
+ * @return Indicates APR status code of exchange. APR_SUCCESS if exchange was successful, -1 if invalid data length was received.
+ */
+static apr_status_t tcp_blocking_handshake(LLSocket::ptr_t handle, char * dataout, apr_size_t outlen, char * datain, apr_size_t maxinlen)
+{
+ apr_socket_t* apr_socket = handle->getSocket();
+ apr_status_t rv = APR_SUCCESS;
+
+ apr_size_t expected_len = outlen;
+
+ handle->setBlocking(1000);
+
+ rv = apr_socket_send(apr_socket, dataout, &outlen);
+ if (APR_SUCCESS != rv)
+ {
+ LL_WARNS("Proxy") << "Error sending data to proxy control channel, status: " << rv << LL_ENDL;
+ ll_apr_warn_status(rv);
+ }
+ else if (expected_len != outlen)
+ {
+ LL_WARNS("Proxy") << "Incorrect data length sent. Expected: " << expected_len <<
+ " Sent: " << outlen << LL_ENDL;
+ rv = -1;
+ }
+
+ if (APR_SUCCESS == rv)
+ {
+ expected_len = maxinlen;
+ rv = apr_socket_recv(apr_socket, datain, &maxinlen);
+ if (rv != APR_SUCCESS)
+ {
+ LL_WARNS("Proxy") << "Error receiving data from proxy control channel, status: " << rv << LL_ENDL;
+ ll_apr_warn_status(rv);
+ }
+ else if (expected_len < maxinlen)
+ {
+ LL_WARNS("Proxy") << "Incorrect data length received. Expected: " << expected_len <<
+ " Received: " << maxinlen << LL_ENDL;
+ rv = -1;
+ }
+ }
+
+ handle->setNonBlocking();
+
+ return rv;
+}
+
+/**
+ * @brief Open a LLSocket and do a blocking connect to the chosen host.
+ *
+ * Checks for a successful connection, and makes sure the connection is closed if it fails.
+ *
+ * @param host The host to open the connection to.
+ * @return The created socket. Will evaluate as NULL if the connection is unsuccessful.
+ */
+static LLSocket::ptr_t tcp_open_channel(LLHost host)
+{
+ LLSocket::ptr_t socket = LLSocket::create(LLSocket::STREAM_TCP);
+ bool connected = socket->blockingConnect(host);
+ if (!connected)
+ {
+ tcp_close_channel(&socket);
+ }
+
+ return socket;
+}
+
+/**
+ * @brief Close the socket.
+ *
+ * @param handle_ptr The handle of the socket being closed. A pointer-to-pointer to avoid increasing the use count.
+ */
+static void tcp_close_channel(LLSocket::ptr_t* handle_ptr)
+{
+ LL_DEBUGS("Proxy") << "Resetting proxy LLSocket handle, use_count == " << handle_ptr->use_count() << LL_ENDL;
+ handle_ptr->reset();
+}
diff --git a/indra/llmessage/llproxy.h b/indra/llmessage/llproxy.h
new file mode 100644
index 000000000..a91937054
--- /dev/null
+++ b/indra/llmessage/llproxy.h
@@ -0,0 +1,352 @@
+/**
+ * @file llproxy.h
+ * @brief UDP and HTTP proxy communications
+ *
+ * $LicenseInfo:firstyear=2011&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2011, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_PROXY_H
+#define LL_PROXY_H
+
+#include "llcurl.h"
+#include "llhost.h"
+#include "lliosocket.h"
+#include "llmemory.h"
+#include "llsingleton.h"
+#include "llthread.h"
+#include
+
+// SOCKS error codes returned from the StartProxy method
+#define SOCKS_OK 0
+#define SOCKS_CONNECT_ERROR (-1)
+#define SOCKS_NOT_PERMITTED (-2)
+#define SOCKS_NOT_ACCEPTABLE (-3)
+#define SOCKS_AUTH_FAIL (-4)
+#define SOCKS_UDP_FWD_NOT_GRANTED (-5)
+#define SOCKS_HOST_CONNECT_FAILED (-6)
+#define SOCKS_INVALID_HOST (-7)
+
+#ifndef MAXHOSTNAMELEN
+#define MAXHOSTNAMELEN (255 + 1) /* socks5: 255, +1 for len. */
+#endif
+
+#define SOCKSMAXUSERNAMELEN 255
+#define SOCKSMAXPASSWORDLEN 255
+
+#define SOCKSMINUSERNAMELEN 1
+#define SOCKSMINPASSWORDLEN 1
+
+#define SOCKS_VERSION 0x05 // we are using SOCKS 5
+
+#define SOCKS_HEADER_SIZE 10
+
+// SOCKS 5 address/hostname types
+#define ADDRESS_IPV4 0x01
+#define ADDRESS_HOSTNAME 0x03
+#define ADDRESS_IPV6 0x04
+
+// Lets just use our own ipv4 struct rather than dragging in system
+// specific headers
+union ipv4_address_t {
+ U8 octets[4];
+ U32 addr32;
+};
+
+// SOCKS 5 control channel commands
+#define COMMAND_TCP_STREAM 0x01
+#define COMMAND_TCP_BIND 0x02
+#define COMMAND_UDP_ASSOCIATE 0x03
+
+// SOCKS 5 command replies
+#define REPLY_REQUEST_GRANTED 0x00
+#define REPLY_GENERAL_FAIL 0x01
+#define REPLY_RULESET_FAIL 0x02
+#define REPLY_NETWORK_UNREACHABLE 0x03
+#define REPLY_HOST_UNREACHABLE 0x04
+#define REPLY_CONNECTION_REFUSED 0x05
+#define REPLY_TTL_EXPIRED 0x06
+#define REPLY_PROTOCOL_ERROR 0x07
+#define REPLY_TYPE_NOT_SUPPORTED 0x08
+
+#define FIELD_RESERVED 0x00
+
+// The standard SOCKS 5 request packet
+// Push current alignment to stack and set alignment to 1 byte boundary
+// This enabled us to use structs directly to set up and receive network packets
+// into the correct fields, without fear of boundary alignment causing issues
+#pragma pack(push,1)
+
+// SOCKS 5 command packet
+struct socks_command_request_t {
+ U8 version;
+ U8 command;
+ U8 reserved;
+ U8 atype;
+ U32 address;
+ U16 port;
+};
+
+// Standard SOCKS 5 reply packet
+struct socks_command_response_t {
+ U8 version;
+ U8 reply;
+ U8 reserved;
+ U8 atype;
+ U8 add_bytes[4];
+ U16 port;
+};
+
+#define AUTH_NOT_ACCEPTABLE 0xFF // reply if preferred methods are not available
+#define AUTH_SUCCESS 0x00 // reply if authentication successful
+
+// SOCKS 5 authentication request, stating which methods the client supports
+struct socks_auth_request_t {
+ U8 version;
+ U8 num_methods;
+ U8 methods; // We are only using a single method currently
+};
+
+// SOCKS 5 authentication response packet, stating server preferred method
+struct socks_auth_response_t {
+ U8 version;
+ U8 method;
+};
+
+// SOCKS 5 password reply packet
+struct authmethod_password_reply_t {
+ U8 version;
+ U8 status;
+};
+
+// SOCKS 5 UDP packet header
+struct proxywrap_t {
+ U16 rsv;
+ U8 frag;
+ U8 atype;
+ U32 addr;
+ U16 port;
+};
+
+#pragma pack(pop) /* restore original alignment from stack */
+
+
+// Currently selected HTTP proxy type
+enum LLHttpProxyType
+{
+ LLPROXY_SOCKS = 0,
+ LLPROXY_HTTP = 1
+};
+
+// Auth types
+enum LLSocks5AuthType
+{
+ METHOD_NOAUTH = 0x00, // Client supports no auth
+ METHOD_GSSAPI = 0x01, // Client supports GSSAPI (Not currently supported)
+ METHOD_PASSWORD = 0x02 // Client supports username/password
+};
+
+/**
+ * @brief Manage SOCKS 5 UDP proxy and HTTP proxy.
+ *
+ * This class is responsible for managing two interconnected tasks,
+ * connecting to a SOCKS 5 proxy for use by LLPacketRing to send UDP
+ * packets and managing proxy settings for HTTP requests.
+ *
+ * Threading:
+ * Because HTTP requests can be generated in threads outside the
+ * main thread, it is necessary for some of the information stored
+ * by this class to be available to other threads. The members that
+ * need to be read across threads are in a labeled section below.
+ * To protect those members, a mutex, mProxyMutex should be locked
+ * before reading or writing those members. Methods that can lock
+ * mProxyMutex are in a labeled section below. Those methods should
+ * not be called while the mutex is already locked.
+ *
+ * There is also a LLAtomic type flag (mHTTPProxyEnabled) that is used
+ * to track whether the HTTP proxy is currently enabled. This allows
+ * for faster unlocked checks to see if the proxy is enabled. This
+ * allows us to cut down on the performance hit when the proxy is
+ * disabled compared to before this class was introduced.
+ *
+ * UDP Proxying:
+ * UDP datagrams are proxied via a SOCKS 5 proxy with the UDP associate
+ * command. To initiate the proxy, a TCP socket connection is opened
+ * to the SOCKS 5 host, and after a handshake exchange, the server
+ * returns a port and address to send the UDP traffic that is to be
+ * proxied to. The LLProxy class tracks this address and port after the
+ * exchange and provides it to LLPacketRing when required to. All UDP
+ * proxy management occurs in the main thread.
+ *
+ * HTTP Proxying:
+ * This class allows all viewer HTTP packets to be sent through a proxy.
+ * The user can select whether to send HTTP packets through a standard
+ * "web" HTTP proxy, through a SOCKS 5 proxy, or to not proxy HTTP
+ * communication. This class does not manage the integrated web browser
+ * proxy, which is handled in llviewermedia.cpp.
+ *
+ * The implementation of HTTP proxying is handled by libcurl. LLProxy
+ * is responsible for managing the HTTP proxy options and provides a
+ * thread-safe method to apply those options to a curl request
+ * (LLProxy::applyProxySettings()). This method is overloaded
+ * to accommodate the various abstraction libcurl layers that exist
+ * throughout the viewer (LLCurlEasyRequest, LLCurl::Easy, and CURL).
+ *
+ * If you are working with LLCurl or LLCurlEasyRequest objects,
+ * the configured proxy settings will be applied in the constructors
+ * of those request handles. If you are working with CURL objects
+ * directly, you will need to pass the handle of the request to
+ * applyProxySettings() before issuing the request.
+ *
+ * To ensure thread safety, all LLProxy members that relate to the HTTP
+ * proxy require the LLProxyMutex to be locked before accessing.
+ */
+class LLProxy: public LLSingleton
+{
+ LOG_CLASS(LLProxy);
+public:
+ /*###########################################################################################
+ METHODS THAT DO NOT LOCK mProxyMutex!
+ ###########################################################################################*/
+ // Constructor, cannot have parameters due to LLSingleton parent class. Call from main thread only.
+ LLProxy();
+
+ // Static check for enabled status for UDP packets. Call from main thread only.
+ static bool isSOCKSProxyEnabled() { return sUDPProxyEnabled; }
+
+ // Get the UDP proxy address and port. Call from main thread only.
+ LLHost getUDPProxy() const { return mUDPProxy; }
+
+ /*###########################################################################################
+ END OF NON-LOCKING METHODS
+ ###########################################################################################*/
+
+ /*###########################################################################################
+ METHODS THAT LOCK mProxyMutex! DO NOT CALL WHILE mProxyMutex IS LOCKED!
+ ###########################################################################################*/
+ // Destructor, closes open connections. Do not call directly, use cleanupClass().
+ ~LLProxy();
+
+ // Delete LLProxy singleton. Allows the apr_socket used in the SOCKS 5 control channel to be
+ // destroyed before the call to apr_terminate. Call from main thread only.
+ static void cleanupClass();
+
+ // Apply the current proxy settings to a curl request. Doesn't do anything if mHTTPProxyEnabled is false.
+ // Safe to call from any thread.
+ void applyProxySettings(CURL* handle);
+ void applyProxySettings(LLCurl::Easy* handle);
+ void applyProxySettings(LLCurlEasyRequest* handle);
+
+ // Start a connection to the SOCKS 5 proxy. Call from main thread only.
+ S32 startSOCKSProxy(LLHost host);
+
+ // Disconnect and clean up any connection to the SOCKS 5 proxy. Call from main thread only.
+ void stopSOCKSProxy();
+
+ // Use Password auth when connecting to the SOCKS proxy. Call from main thread only.
+ bool setAuthPassword(const std::string &username, const std::string &password);
+
+ // Disable authentication when connecting to the SOCKS proxy. Call from main thread only.
+ void setAuthNone();
+
+ // Proxy HTTP packets via httpHost, which can be a SOCKS 5 or a HTTP proxy.
+ // as specified in type. Call from main thread only.
+ bool enableHTTPProxy(LLHost httpHost, LLHttpProxyType type);
+ bool enableHTTPProxy();
+
+ // Stop proxying HTTP packets. Call from main thread only.
+ void disableHTTPProxy();
+
+ /*###########################################################################################
+ END OF LOCKING METHODS
+ ###########################################################################################*/
+private:
+ /*###########################################################################################
+ METHODS THAT LOCK mProxyMutex! DO NOT CALL WHILE mProxyMutex IS LOCKED!
+ ###########################################################################################*/
+
+ // Perform a SOCKS 5 authentication and UDP association with the proxy server.
+ S32 proxyHandshake(LLHost proxy);
+
+ // Get the currently selected auth method.
+ LLSocks5AuthType getSelectedAuthMethod() const;
+
+ // Get the currently selected HTTP proxy type
+ LLHttpProxyType getHTTPProxyType() const;
+
+ std::string getSocksPwd() const;
+ std::string getSocksUser() const;
+
+ /*###########################################################################################
+ END OF LOCKING METHODS
+ ###########################################################################################*/
+
+private:
+ // Is the HTTP proxy enabled? Safe to read in any thread, but do not write directly.
+ // Instead use enableHTTPProxy() and disableHTTPProxy() instead.
+ mutable LLAtomic32 mHTTPProxyEnabled;
+
+ // Mutex to protect shared members in non-main thread calls to applyProxySettings().
+ mutable LLMutex mProxyMutex;
+
+ /*###########################################################################################
+ MEMBERS READ AND WRITTEN ONLY IN THE MAIN THREAD. DO NOT SHARE!
+ ###########################################################################################*/
+
+ // Is the UDP proxy enabled?
+ static bool sUDPProxyEnabled;
+
+ // UDP proxy address and port
+ LLHost mUDPProxy;
+ // TCP proxy control channel address and port
+ LLHost mTCPProxy;
+
+ // socket handle to proxy TCP control channel
+ LLSocket::ptr_t mProxyControlChannel;
+
+ /*###########################################################################################
+ END OF UNSHARED MEMBERS
+ ###########################################################################################*/
+
+ /*###########################################################################################
+ MEMBERS WRITTEN IN MAIN THREAD AND READ IN ANY THREAD. ONLY READ OR WRITE AFTER LOCKING mProxyMutex!
+ ###########################################################################################*/
+
+ // HTTP proxy address and port
+ LLHost mHTTPProxy;
+
+ // Currently selected HTTP proxy type. Can be web or socks.
+ LLHttpProxyType mProxyType;
+
+ // SOCKS 5 selected authentication method.
+ LLSocks5AuthType mAuthMethodSelected;
+
+ // SOCKS 5 username
+ std::string mSocksUsername;
+ // SOCKS 5 password
+ std::string mSocksPassword;
+
+ /*###########################################################################################
+ END OF SHARED MEMBERS
+ ###########################################################################################*/
+};
+
+#endif
diff --git a/indra/llmessage/tests/llareslistener_test.cpp b/indra/llmessage/tests/llareslistener_test.cpp
new file mode 100644
index 000000000..60c91e12c
--- /dev/null
+++ b/indra/llmessage/tests/llareslistener_test.cpp
@@ -0,0 +1,217 @@
+/**
+ * @file llareslistener_test.cpp
+ * @author Mark Palange
+ * @date 2009-02-26
+ * @brief Tests of llareslistener.h.
+ *
+ * $LicenseInfo:firstyear=2009&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#if LL_WINDOWS
+#pragma warning (disable : 4355) // 'this' used in initializer list: yes, intentionally
+#endif
+
+// Precompiled header
+#include "linden_common.h"
+// associated header
+#include "../llareslistener.h"
+// STL headers
+#include
+// std headers
+// external library headers
+#include
+
+// other Linden headers
+#include "llsd.h"
+#include "llares.h"
+#include "../test/lltut.h"
+#include "llevents.h"
+#include "tests/wrapllerrs.h"
+
+/*****************************************************************************
+* Dummy stuff
+*****************************************************************************/
+LLAres::LLAres():
+ // Simulate this much of the real LLAres constructor: we need an
+ // LLAresListener instance.
+ mListener(new LLAresListener("LLAres", this))
+{}
+LLAres::~LLAres() {}
+void LLAres::rewriteURI(const std::string &uri,
+ LLAres::UriRewriteResponder *resp)
+{
+ // This is the only LLAres method I chose to implement.
+ // The effect is that LLAres returns immediately with
+ // a result that is equal to the input uri.
+ std::vector result;
+ result.push_back(uri);
+ resp->rewriteResult(result);
+}
+
+LLAres::QueryResponder::~QueryResponder() {}
+void LLAres::QueryResponder::queryError(int) {}
+void LLAres::QueryResponder::queryResult(char const*, size_t) {}
+LLQueryResponder::LLQueryResponder() {}
+void LLQueryResponder::queryResult(char const*, size_t) {}
+void LLQueryResponder::querySuccess() {}
+void LLAres::UriRewriteResponder::queryError(int) {}
+void LLAres::UriRewriteResponder::querySuccess() {}
+void LLAres::UriRewriteResponder::rewriteResult(const std::vector& uris) {}
+
+/*****************************************************************************
+* TUT
+*****************************************************************************/
+namespace tut
+{
+ struct data
+ {
+ LLAres dummyAres;
+ };
+ typedef test_group llareslistener_group;
+ typedef llareslistener_group::object object;
+ llareslistener_group llareslistenergrp("llareslistener");
+
+ struct ResponseCallback
+ {
+ std::vector mURIs;
+ bool operator()(const LLSD& response)
+ {
+ mURIs.clear();
+ for (LLSD::array_const_iterator ri(response.beginArray()), rend(response.endArray());
+ ri != rend; ++ri)
+ {
+ mURIs.push_back(*ri);
+ }
+ return false;
+ }
+ };
+
+ template<> template<>
+ void object::test<1>()
+ {
+ set_test_name("test event");
+ // Tests the success and failure cases, since they both use
+ // the same code paths in the LLAres responder.
+ ResponseCallback response;
+ std::string pumpname("trigger");
+ // Since we're asking LLEventPumps to obtain() the pump by the desired
+ // name, it will persist beyond the current scope, so ensure we
+ // disconnect from it when 'response' goes away.
+ LLTempBoundListener temp(
+ LLEventPumps::instance().obtain(pumpname).listen("rewriteURIresponse",
+ boost::bind(&ResponseCallback::operator(), &response, _1)));
+ // Now build an LLSD request that will direct its response events to
+ // that pump.
+ const std::string testURI("login.bar.com");
+ LLSD request;
+ request["op"] = "rewriteURI";
+ request["uri"] = testURI;
+ request["reply"] = pumpname;
+ LLEventPumps::instance().obtain("LLAres").post(request);
+ ensure_equals(response.mURIs.size(), 1);
+ ensure_equals(response.mURIs.front(), testURI);
+ }
+
+ template<> template<>
+ void object::test<2>()
+ {
+ set_test_name("bad op");
+ WrapLL_ERRS capture;
+ LLSD request;
+ request["op"] = "foo";
+ std::string threw;
+ try
+ {
+ LLEventPumps::instance().obtain("LLAres").post(request);
+ }
+ catch (const WrapLL_ERRS::FatalException& e)
+ {
+ threw = e.what();
+ }
+ ensure_contains("LLAresListener bad op", threw, "bad");
+ }
+
+ template<> template<>
+ void object::test<3>()
+ {
+ set_test_name("bad rewriteURI request");
+ WrapLL_ERRS capture;
+ LLSD request;
+ request["op"] = "rewriteURI";
+ std::string threw;
+ try
+ {
+ LLEventPumps::instance().obtain("LLAres").post(request);
+ }
+ catch (const WrapLL_ERRS::FatalException& e)
+ {
+ threw = e.what();
+ }
+ ensure_contains("LLAresListener bad req", threw, "missing");
+ ensure_contains("LLAresListener bad req", threw, "reply");
+ ensure_contains("LLAresListener bad req", threw, "uri");
+ }
+
+ template<> template<>
+ void object::test<4>()
+ {
+ set_test_name("bad rewriteURI request");
+ WrapLL_ERRS capture;
+ LLSD request;
+ request["op"] = "rewriteURI";
+ request["reply"] = "nonexistent";
+ std::string threw;
+ try
+ {
+ LLEventPumps::instance().obtain("LLAres").post(request);
+ }
+ catch (const WrapLL_ERRS::FatalException& e)
+ {
+ threw = e.what();
+ }
+ ensure_contains("LLAresListener bad req", threw, "missing");
+ ensure_contains("LLAresListener bad req", threw, "uri");
+ ensure_does_not_contain("LLAresListener bad req", threw, "reply");
+ }
+
+ template<> template<>
+ void object::test<5>()
+ {
+ set_test_name("bad rewriteURI request");
+ WrapLL_ERRS capture;
+ LLSD request;
+ request["op"] = "rewriteURI";
+ request["uri"] = "foo.bar.com";
+ std::string threw;
+ try
+ {
+ LLEventPumps::instance().obtain("LLAres").post(request);
+ }
+ catch (const WrapLL_ERRS::FatalException& e)
+ {
+ threw = e.what();
+ }
+ ensure_contains("LLAresListener bad req", threw, "missing");
+ ensure_contains("LLAresListener bad req", threw, "reply");
+ ensure_does_not_contain("LLAresListener bad req", threw, "uri");
+ }
+}
diff --git a/indra/llmessage/tests/llavatarnamecache_test.cpp b/indra/llmessage/tests/llavatarnamecache_test.cpp
new file mode 100644
index 000000000..ec6b65d48
--- /dev/null
+++ b/indra/llmessage/tests/llavatarnamecache_test.cpp
@@ -0,0 +1,102 @@
+/**
+ * @file llavatarnamecache_test.cpp
+ * @author James Cook
+ * @brief LLAvatarNameCache test cases.
+ *
+ * $LicenseInfo:firstyear=2010&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#include "linden_common.h"
+
+#include "../llavatarnamecache.h"
+
+#include "../test/lltut.h"
+
+namespace tut
+{
+ struct avatarnamecache_data
+ {
+ };
+ typedef test_group avatarnamecache_test;
+ typedef avatarnamecache_test::object avatarnamecache_object;
+ tut::avatarnamecache_test avatarnamecache_testcase("LLAvatarNameCache");
+
+ template<> template<>
+ void avatarnamecache_object::test<1>()
+ {
+ bool valid = false;
+ S32 max_age = 0;
+
+ valid = max_age_from_cache_control("max-age=3600", &max_age);
+ ensure("typical input valid", valid);
+ ensure_equals("typical input parsed", max_age, 3600);
+
+ valid = max_age_from_cache_control(
+ " max-age=600 , no-cache,private=\"stuff\" ", &max_age);
+ ensure("complex input valid", valid);
+ ensure_equals("complex input parsed", max_age, 600);
+
+ valid = max_age_from_cache_control(
+ "no-cache, max-age = 123 ", &max_age);
+ ensure("complex input 2 valid", valid);
+ ensure_equals("complex input 2 parsed", max_age, 123);
+ }
+
+ template<> template<>
+ void avatarnamecache_object::test<2>()
+ {
+ bool valid = false;
+ S32 max_age = -1;
+
+ valid = max_age_from_cache_control("", &max_age);
+ ensure("empty input returns invalid", !valid);
+ ensure_equals("empty input doesn't change val", max_age, -1);
+
+ valid = max_age_from_cache_control("no-cache", &max_age);
+ ensure("no max-age field returns invalid", !valid);
+
+ valid = max_age_from_cache_control("max", &max_age);
+ ensure("just 'max' returns invalid", !valid);
+
+ valid = max_age_from_cache_control("max-age", &max_age);
+ ensure("partial max-age is invalid", !valid);
+
+ valid = max_age_from_cache_control("max-age=", &max_age);
+ ensure("longer partial max-age is invalid", !valid);
+
+ valid = max_age_from_cache_control("max-age=FOO", &max_age);
+ ensure("invalid integer max-age is invalid", !valid);
+
+ valid = max_age_from_cache_control("max-age 234", &max_age);
+ ensure("space separated max-age is invalid", !valid);
+
+ valid = max_age_from_cache_control("max-age=0", &max_age);
+ ensure("zero max-age is valid", valid);
+
+ // *TODO: Handle "0000" as zero
+ //valid = max_age_from_cache_control("max-age=0000", &max_age);
+ //ensure("multi-zero max-age is valid", valid);
+
+ valid = max_age_from_cache_control("max-age=-123", &max_age);
+ ensure("less than zero max-age is invalid", !valid);
+ }
+}
diff --git a/indra/llmessage/tests/llhost_test.cpp b/indra/llmessage/tests/llhost_test.cpp
new file mode 100644
index 000000000..eadf83c42
--- /dev/null
+++ b/indra/llmessage/tests/llhost_test.cpp
@@ -0,0 +1,251 @@
+/**
+ * @file llhost_test.cpp
+ * @author Adroit
+ * @date 2007-02
+ * @brief llhost test cases.
+ *
+ * $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#include "linden_common.h"
+
+#include "../llhost.h"
+
+#include "../test/lltut.h"
+
+namespace tut
+{
+ struct host_data
+ {
+ };
+ typedef test_group host_test;
+ typedef host_test::object host_object;
+ tut::host_test host_testcase("LLHost");
+
+
+ template<> template<>
+ void host_object::test<1>()
+ {
+ LLHost host;
+ ensure("IP address is not NULL", (0 == host.getAddress()) && (0 == host.getPort()) && !host.isOk());
+ }
+ template<> template<>
+ void host_object::test<2>()
+ {
+ U32 ip_addr = 0xc098017d;
+ U32 port = 8080;
+ LLHost host(ip_addr, port);
+ ensure("IP address is invalid", ip_addr == host.getAddress());
+ ensure("Port Number is invalid", port == host.getPort());
+ ensure("IP address and port number both should be ok", host.isOk());
+ }
+
+ template<> template<>
+ void host_object::test<3>()
+ {
+ const char* str = "192.168.1.1";
+ U32 port = 8080;
+ LLHost host(str, port);
+ ensure("IP address could not be processed", (host.getAddress() == ip_string_to_u32(str)));
+ ensure("Port Number is invalid", (port == host.getPort()));
+ }
+
+ template<> template<>
+ void host_object::test<4>()
+ {
+ U32 ip = ip_string_to_u32("192.168.1.1");
+ U32 port = 22;
+ U64 ip_port = (((U64) ip) << 32) | port;
+ LLHost host(ip_port);
+ ensure("IP address is invalid", ip == host.getAddress());
+ ensure("Port Number is invalid", port == host.getPort());
+ }
+
+ template<> template<>
+ void host_object::test<5>()
+ {
+ std::string ip_port_string = "192.168.1.1:8080";
+ U32 ip = ip_string_to_u32("192.168.1.1");
+ U32 port = 8080;
+
+ LLHost host(ip_port_string);
+ ensure("IP address from IP:port is invalid", ip == host.getAddress());
+ ensure("Port Number from from IP:port is invalid", port == host.getPort());
+ }
+
+ template<> template<>
+ void host_object::test<6>()
+ {
+ U32 ip = 0xc098017d, port = 8080;
+ LLHost host;
+ host.set(ip,port);
+ ensure("IP address is invalid", (ip == host.getAddress()));
+ ensure("Port Number is invalid", (port == host.getPort()));
+ }
+
+ template<> template<>
+ void host_object::test<7>()
+ {
+ const char* str = "192.168.1.1";
+ U32 port = 8080, ip;
+ LLHost host;
+ host.set(str,port);
+ ip = ip_string_to_u32(str);
+ ensure("IP address is invalid", (ip == host.getAddress()));
+ ensure("Port Number is invalid", (port == host.getPort()));
+
+ str = "64.233.187.99";
+ ip = ip_string_to_u32(str);
+ host.setAddress(str);
+ ensure("IP address is invalid", (ip == host.getAddress()));
+
+ ip = 0xc098017b;
+ host.setAddress(ip);
+ ensure("IP address is invalid", (ip == host.getAddress()));
+ // should still use the old port
+ ensure("Port Number is invalid", (port == host.getPort()));
+
+ port = 8084;
+ host.setPort(port);
+ ensure("Port Number is invalid", (port == host.getPort()));
+ // should still use the old address
+ ensure("IP address is invalid", (ip == host.getAddress()));
+ }
+
+ template<> template<>
+ void host_object::test<8>()
+ {
+ const std::string str("192.168.1.1");
+ U32 port = 8080;
+ LLHost host;
+ host.set(str,port);
+
+ std::string ip_string = host.getIPString();
+ ensure("Function Failed", (ip_string == str));
+
+ std::string ip_string_port = host.getIPandPort();
+ ensure("Function Failed", (ip_string_port == "192.168.1.1:8080"));
+ }
+
+
+// getHostName() and setHostByName
+ template<> template<>
+ void host_object::test<9>()
+ {
+ skip("this test is flaky, but we should figure out why...");
+// skip("setHostByName(\"google.com\"); getHostName() -> (e.g.) \"yx-in-f100.1e100.net\"");
+ std::string hostStr = "lindenlab.com";
+ LLHost host;
+ host.setHostByName(hostStr);
+
+ // reverse DNS will likely result in appending of some
+ // sub-domain to the main hostname. so look for
+ // the main domain name and not do the exact compare
+
+ std::string hostname = host.getHostName();
+ try
+ {
+ ensure("getHostName failed", hostname.find(hostStr) != std::string::npos);
+ }
+ catch (const std::exception&)
+ {
+ std::cerr << "set '" << hostStr << "'; reported '" << hostname << "'" << std::endl;
+ throw;
+ }
+ }
+
+// setHostByName for dotted IP
+ template<> template<>
+ void host_object::test<10>()
+ {
+ std::string hostStr = "64.233.167.99";
+ LLHost host;
+ host.setHostByName(hostStr);
+ ensure("SetHostByName for dotted IP Address failed", host.getAddress() == ip_string_to_u32(hostStr.c_str()));
+ }
+
+ template<> template<>
+ void host_object::test<11>()
+ {
+ LLHost host1(0xc098017d, 8080);
+ LLHost host2 = host1;
+ ensure("Both IP addresses are not same", (host1.getAddress() == host2.getAddress()));
+ ensure("Both port numbers are not same", (host1.getPort() == host2.getPort()));
+ }
+
+ template<> template<>
+ void host_object::test<12>()
+ {
+ LLHost host1("192.168.1.1", 8080);
+ std::string str1 = "192.168.1.1:8080";
+ std::ostringstream stream;
+ stream << host1;
+ ensure("Operator << failed", ( stream.str()== str1));
+
+ // There is no istream >> llhost operator.
+ //std::istringstream is(stream.str());
+ //LLHost host2;
+ //is >> host2;
+ //ensure("Operator >> failed. Not compatible with <<", host1 == host2);
+ }
+
+ // operators ==, !=, <
+ template<> template<>
+ void host_object::test<13>()
+ {
+ U32 ip_addr = 0xc098017d;
+ U32 port = 8080;
+ LLHost host1(ip_addr, port);
+ LLHost host2(ip_addr, port);
+ ensure("operator== failed", host1 == host2);
+
+ // change port
+ host2.setPort(7070);
+ ensure("operator!= failed", host1 != host2);
+
+ // set port back to 8080 and change IP address now
+ host2.setPort(8080);
+ host2.setAddress(ip_addr+10);
+ ensure("operator!= failed", host1 != host2);
+
+ ensure("operator< failed", host1 < host2);
+
+ // set IP address back to same value and change port
+ host2.setAddress(ip_addr);
+ host2.setPort(host1.getPort() + 10);
+ ensure("operator< failed", host1 < host2);
+ }
+
+ // invalid ip address string
+ template<> template<>
+ void host_object::test<14>()
+ {
+ LLHost host1("10.0.1.2", 6143);
+ ensure("10.0.1.2 should be a valid address", host1.isOk());
+
+ LLHost host2("booger-brains", 6143);
+ ensure("booger-brains should be an invalid ip addess", !host2.isOk());
+
+ LLHost host3("255.255.255.255", 6143);
+ ensure("255.255.255.255 should be valid broadcast address", host3.isOk());
+ }
+}
diff --git a/indra/llmessage/tests/llmime_test.cpp b/indra/llmessage/tests/llmime_test.cpp
new file mode 100644
index 000000000..aed5c4589
--- /dev/null
+++ b/indra/llmessage/tests/llmime_test.cpp
@@ -0,0 +1,445 @@
+/**
+ * @file llmime_test.cpp
+ * @author Phoenix
+ * @date 2006-12-24
+ * @brief BRIEF_DESC of llmime_test.cpp
+ *
+ * $LicenseInfo:firstyear=2006&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#include "linden_common.h"
+
+#include "llsdserialize.h"
+
+#include "../llmime.h"
+
+#include "../test/lltut.h"
+
+namespace tut
+{
+ struct mime_index
+ {
+ };
+ typedef test_group mime_index_t;
+ typedef mime_index_t::object mime_index_object_t;
+ tut::mime_index_t tut_mime_index("LLMime");
+
+ template<> template<>
+ void mime_index_object_t::test<1>()
+ {
+ LLMimeIndex mime;
+ ensure("no headers", mime.headers().isUndefined());
+ ensure_equals("invalid offset", mime.offset(), -1);
+ ensure_equals("invalid content length", mime.contentLength(), -1);
+ ensure("no content type", mime.contentType().empty());
+ ensure("not multipart", !mime.isMultipart());
+ ensure_equals("no attachments", mime.subPartCount(), 0);
+ }
+
+ template<> template<>
+ void mime_index_object_t::test<2>()
+ {
+ const S32 CONTENT_LENGTH = 6000;
+ const S32 CONTENT_OFFSET = 100;
+ const std::string CONTENT_TYPE = std::string("image/j2c");
+ LLSD headers;
+ headers["Content-Length"] = CONTENT_LENGTH;
+ headers["Content-Type"] = CONTENT_TYPE;
+ LLMimeIndex mime(headers, CONTENT_OFFSET);
+ ensure("headers are map", mime.headers().isMap());
+ ensure_equals("offset", mime.offset(), CONTENT_OFFSET);
+ ensure_equals("content length", mime.contentLength(), CONTENT_LENGTH);
+ ensure_equals("type is image/j2c", mime.contentType(), CONTENT_TYPE);
+ ensure("not multipart", !mime.isMultipart());
+ ensure_equals("no attachments", mime.subPartCount(), 0);
+ }
+
+ template<> template<>
+ void mime_index_object_t::test<3>()
+ {
+ const S32 MULTI_CONTENT_LENGTH = 8000;
+ const S32 MULTI_CONTENT_OFFSET = 100;
+ const std::string MULTI_CONTENT_TYPE = std::string("multipart/mixed");
+ LLSD headers;
+ headers["Content-Length"] = MULTI_CONTENT_LENGTH;
+ headers["Content-Type"] = MULTI_CONTENT_TYPE;
+ LLMimeIndex mime(headers, MULTI_CONTENT_OFFSET);
+ llinfos << "headers: " << LLSDOStreamer(headers)
+ << llendl;
+
+
+ const S32 META_CONTENT_LENGTH = 700;
+ const S32 META_CONTENT_OFFSET = 69;
+ const std::string META_CONTENT_TYPE = std::string(
+ "text/llsd+xml");
+ headers = LLSD::emptyMap();
+ headers["Content-Length"] = META_CONTENT_LENGTH;
+ headers["Content-Type"] = META_CONTENT_TYPE;
+ LLMimeIndex meta(headers, META_CONTENT_OFFSET);
+ mime.attachSubPart(meta);
+
+ const S32 IMAGE_CONTENT_LENGTH = 6000;
+ const S32 IMAGE_CONTENT_OFFSET = 200;
+ const std::string IMAGE_CONTENT_TYPE = std::string("image/j2c");
+ headers = LLSD::emptyMap();
+ headers["Content-Length"] = IMAGE_CONTENT_LENGTH;
+ headers["Content-Type"] = IMAGE_CONTENT_TYPE;
+ LLMimeIndex image(headers, IMAGE_CONTENT_OFFSET);
+ mime.attachSubPart(image);
+
+ // make sure we have a valid multi-part
+ ensure("is multipart", mime.isMultipart());
+ ensure_equals("multi offset", mime.offset(), MULTI_CONTENT_OFFSET);
+ ensure_equals(
+ "multi content length",
+ mime.contentLength(),
+ MULTI_CONTENT_LENGTH);
+ ensure_equals("two attachments", mime.subPartCount(), 2);
+
+ // make sure ranged gets do the right thing with out of bounds
+ // sub-parts.
+ LLMimeIndex invalid_child(mime.subPart(-1));
+ ensure("no headers", invalid_child.headers().isUndefined());
+ ensure_equals("invalid offset", invalid_child.offset(), -1);
+ ensure_equals(
+ "invalid content length", invalid_child.contentLength(), -1);
+ ensure("no content type", invalid_child.contentType().empty());
+ ensure("not multipart", !invalid_child.isMultipart());
+ ensure_equals("no attachments", invalid_child.subPartCount(), 0);
+
+ invalid_child = mime.subPart(2);
+ ensure("no headers", invalid_child.headers().isUndefined());
+ ensure_equals("invalid offset", invalid_child.offset(), -1);
+ ensure_equals(
+ "invalid content length", invalid_child.contentLength(), -1);
+ ensure("no content type", invalid_child.contentType().empty());
+ ensure("not multipart", !invalid_child.isMultipart());
+ ensure_equals("no attachments", invalid_child.subPartCount(), 0);
+ }
+
+ template<> template<>
+ void mime_index_object_t::test<4>()
+ {
+ const S32 MULTI_CONTENT_LENGTH = 8000;
+ const S32 MULTI_CONTENT_OFFSET = 100;
+ const std::string MULTI_CONTENT_TYPE = std::string("multipart/mixed");
+ LLSD headers;
+ headers["Content-Length"] = MULTI_CONTENT_LENGTH;
+ headers["Content-Type"] = MULTI_CONTENT_TYPE;
+ LLMimeIndex mime(headers, MULTI_CONTENT_OFFSET);
+
+ const S32 META_CONTENT_LENGTH = 700;
+ const S32 META_CONTENT_OFFSET = 69;
+ const std::string META_CONTENT_TYPE = std::string(
+ "application/llsd+xml");
+ headers = LLSD::emptyMap();
+ headers["Content-Length"] = META_CONTENT_LENGTH;
+ headers["Content-Type"] = META_CONTENT_TYPE;
+ LLMimeIndex meta(headers, META_CONTENT_OFFSET);
+ mime.attachSubPart(meta);
+
+ const S32 IMAGE_CONTENT_LENGTH = 6000;
+ const S32 IMAGE_CONTENT_OFFSET = 200;
+ const std::string IMAGE_CONTENT_TYPE = std::string("image/j2c");
+ headers = LLSD::emptyMap();
+ headers["Content-Length"] = IMAGE_CONTENT_LENGTH;
+ headers["Content-Type"] = IMAGE_CONTENT_TYPE;
+ LLMimeIndex image(headers, IMAGE_CONTENT_OFFSET);
+ mime.attachSubPart(image);
+
+ // check what we have
+ ensure("is multipart", mime.isMultipart());
+ ensure_equals("multi offset", mime.offset(), MULTI_CONTENT_OFFSET);
+ ensure_equals(
+ "multi content length",
+ mime.contentLength(),
+ MULTI_CONTENT_LENGTH);
+ ensure_equals("two attachments", mime.subPartCount(), 2);
+
+ LLMimeIndex actual_meta = mime.subPart(0);
+ ensure_equals(
+ "meta type", actual_meta.contentType(), META_CONTENT_TYPE);
+ ensure_equals(
+ "meta offset", actual_meta.offset(), META_CONTENT_OFFSET);
+ ensure_equals(
+ "meta content length",
+ actual_meta.contentLength(),
+ META_CONTENT_LENGTH);
+
+ LLMimeIndex actual_image = mime.subPart(1);
+ ensure_equals(
+ "image type", actual_image.contentType(), IMAGE_CONTENT_TYPE);
+ ensure_equals(
+ "image offset", actual_image.offset(), IMAGE_CONTENT_OFFSET);
+ ensure_equals(
+ "image content length",
+ actual_image.contentLength(),
+ IMAGE_CONTENT_LENGTH);
+ }
+
+/*
+ template<> template<>
+ void mime_index_object_t::test<5>()
+ {
+ }
+ template<> template<>
+ void mime_index_object_t::test<6>()
+ {
+ }
+ template<> template<>
+ void mime_index_object_t::test<7>()
+ {
+ }
+ template<> template<>
+ void mime_index_object_t::test<8>()
+ {
+ }
+ template<> template<>
+ void mime_index_object_t::test<>()
+ {
+ }
+*/
+}
+
+
+namespace tut
+{
+ struct mime_parse
+ {
+ };
+ typedef test_group mime_parse_t;
+ typedef mime_parse_t::object mime_parse_object_t;
+ tut::mime_parse_t tut_mime_parse("LLMimeParse");
+
+ template<> template<>
+ void mime_parse_object_t::test<1>()
+ {
+ // parse one mime object
+ const std::string SERIALIZED_MIME("Content-Length: 200\r\nContent-Type: text/plain\r\n\r\naaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbcccccccccc\r\n");
+ std::stringstream istr;
+ istr.str(SERIALIZED_MIME);
+ LLMimeIndex mime;
+ LLMimeParser parser;
+ bool ok = parser.parseIndex(istr, mime);
+ ensure("Parse successful.", ok);
+ ensure_equals("content type", mime.contentType(), "text/plain");
+ ensure_equals("content length", mime.contentLength(), 200);
+ ensure_equals("offset", mime.offset(), 49);
+ }
+
+ template<> template<>
+ void mime_parse_object_t::test<2>()
+ {
+ // make sure we only parse one.
+ const std::string SERIALIZED_MIME("Content-Length: 200\r\nContent-Type: text/plain\r\n\r\naaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbcccccccccc\r\n\r\nContent-Length: 200\r\nContent-Type: text/plain\r\n\r\naaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbcccccccccc\r\n\r\n");
+ std::stringstream istr;
+ istr.str(SERIALIZED_MIME);
+ LLMimeIndex mime;
+ LLMimeParser parser;
+ bool ok = parser.parseIndex(istr, mime);
+ ensure("Parse successful.", ok);
+ ensure("not multipart.", !mime.isMultipart());
+ ensure_equals("content type", mime.contentType(), "text/plain");
+ ensure_equals("content length", mime.contentLength(), 200);
+ ensure_equals("offset", mime.offset(), 49);
+ }
+
+ template<> template<>
+ void mime_parse_object_t::test<3>()
+ {
+ // test multi-part and lack of content length for some of it.
+ /*
+Content-Type: multipart/mixed; boundary="segment"rnContent-Length: 148rnrn--segmentrnContent-Type: text/plainrnrnsome datarnrn--segmentrnContent-Type: text/xml; charset=UTF-8rnContent-Length: 22rnrn rnrn
+ */
+ const std::string SERIALIZED_MIME("Content-Type: multipart/mixed; boundary=\"segment\"\r\nContent-Length: 150\r\n\r\n--segment\r\nContent-Type: text/plain\r\n\r\nsome data\r\n\r\n--segment\r\nContent-Type: text/xml; charset=UTF-8\r\nContent-Length: 22\r\n\r\n \r\n\r\n");
+ std::stringstream istr;
+ istr.str(SERIALIZED_MIME);
+ LLMimeIndex mime;
+ LLMimeParser parser;
+ bool ok = parser.parseIndex(istr, mime);
+ ensure("Parse successful.", ok);
+ ensure("is multipart.", mime.isMultipart());
+ ensure_equals("sub-part count", mime.subPartCount(), 2);
+ ensure_equals("content length", mime.contentLength(), 150);
+ ensure_equals("data offset for multipart", mime.offset(), 74);
+
+ LLMimeIndex mime_plain(mime.subPart(0));
+ ensure_equals(
+ "first part type",
+ mime_plain.contentType(),
+ "text/plain");
+ ensure_equals(
+ "first part content length not known.",
+ mime_plain.contentLength(),
+ -1);
+ ensure_equals("first part offset", mime_plain.offset(), 113);
+
+ LLMimeIndex mime_xml(mime.subPart(1));
+ ensure_equals(
+ "second part type",
+ mime_xml.contentType(),
+ "text/xml; charset=UTF-8");
+ ensure_equals(
+ "second part content length",
+ mime_xml.contentLength(),
+ 22);
+ ensure_equals("second part offset", mime_xml.offset(), 198);
+ }
+
+ template<> template<>
+ void mime_parse_object_t::test<4>()
+ {
+ // test multi-part, unquoted separator, and premature eof conditions
+ /*
+Content-Type: multipart/mixed; boundary=segmentrnContent-Length: 220rnrn--segmentrnContent-Type: text/plainrnContent-Length: 55rnrnhow are you today?rnI do not know. I guess I am:n'fine'rnrn--segmentrnContent-Type: text/xml; charset=UTF-8rnContent-Length: 22rnrn rnrn */
+ const std::string SERIALIZED_MIME("Content-Type: multipart/mixed; boundary=segment\r\nContent-Length: 220\r\n\r\n--segment\r\nContent-Type: text/plain\r\nContent-Length: 55\r\n\r\nhow are you today?\r\nI do not know. I guess I am:\n'fine'\r\n\r\n--segment\r\nContent-Type: text/xml; charset=UTF-8\r\nContent-Length: 22\r\n\r\n \r\n\r\n");
+ std::stringstream istr;
+ istr.str(SERIALIZED_MIME);
+ LLMimeIndex mime;
+ LLMimeParser parser;
+ bool ok = parser.parseIndex(istr, mime);
+ ensure("Parse successful.", ok);
+ ensure("is multipart.", mime.isMultipart());
+ ensure_equals("sub-part count", mime.subPartCount(), 2);
+ ensure_equals("content length", mime.contentLength(), 220);
+ ensure_equals("data offset for multipart", mime.offset(), 72);
+
+ LLMimeIndex mime_plain(mime.subPart(0));
+ ensure_equals(
+ "first part type",
+ mime_plain.contentType(),
+ "text/plain");
+ ensure_equals(
+ "first part content length",
+ mime_plain.contentLength(),
+ 55);
+ ensure_equals("first part offset", mime_plain.offset(), 131);
+
+ LLMimeIndex mime_xml(mime.subPart(1));
+ ensure_equals(
+ "second part type",
+ mime_xml.contentType(),
+ "text/xml; charset=UTF-8");
+ ensure_equals(
+ "second part content length",
+ mime_xml.contentLength(),
+ 22);
+ ensure_equals("second part offset", mime_xml.offset(), 262);
+ }
+
+ template<> template<>
+ void mime_parse_object_t::test<5>()
+ {
+ // test multi-part with multiple params
+ const std::string SERIALIZED_MIME("Content-Type: multipart/mixed; boundary=segment; comment=\"testing multiple params.\"\r\nContent-Length: 220\r\n\r\n--segment\r\nContent-Type: text/plain\r\nContent-Length: 55\r\n\r\nhow are you today?\r\nI do not know. I guess I am:\n'fine'\r\n\r\n--segment\r\nContent-Type: text/xml; charset=UTF-8\r\nContent-Length: 22\r\n\r\n \r\n\r\n");
+ std::stringstream istr;
+ istr.str(SERIALIZED_MIME);
+ LLMimeIndex mime;
+ LLMimeParser parser;
+ bool ok = parser.parseIndex(istr, mime);
+ ensure("Parse successful.", ok);
+ ensure("is multipart.", mime.isMultipart());
+ ensure_equals("sub-part count", mime.subPartCount(), 2);
+ ensure_equals("content length", mime.contentLength(), 220);
+
+ LLMimeIndex mime_plain(mime.subPart(0));
+ ensure_equals(
+ "first part type",
+ mime_plain.contentType(),
+ "text/plain");
+ ensure_equals(
+ "first part content length",
+ mime_plain.contentLength(),
+ 55);
+
+ LLMimeIndex mime_xml(mime.subPart(1));
+ ensure_equals(
+ "second part type",
+ mime_xml.contentType(),
+ "text/xml; charset=UTF-8");
+ ensure_equals(
+ "second part content length",
+ mime_xml.contentLength(),
+ 22);
+ }
+
+ template<> template<>
+ void mime_parse_object_t::test<6>()
+ {
+ // test multi-part with no specified boundary and eof
+/*
+Content-Type: multipart/relatedrnContent-Length: 220rnrn--rnContent-Type: text/plainrnContent-Length: 55rnrnhow are you today?rnI do not know. I guess I am:n'fine'rnrn--rnContent-Type: text/xml; charset=UTF-8rnContent-Length: 22rnrn rnrn
+*/
+ const std::string SERIALIZED_MIME("Content-Type: multipart/related\r\nContent-Length: 500\r\n\r\n--\r\nContent-Type: text/plain\r\nContent-Length: 55\r\n\r\nhow are you today?\r\nI do not know. I guess I am:\n'fine'\r\n\r\n--\r\nContent-Type: text/xml; charset=UTF-8\r\nContent-Length: 22\r\n\r\n \r\n\r\n");
+ std::stringstream istr;
+ istr.str(SERIALIZED_MIME);
+ LLMimeIndex mime;
+ LLMimeParser parser;
+ bool ok = parser.parseIndex(istr, mime);
+ ensure("Parse successful.", ok);
+ ensure("is multipart.", mime.isMultipart());
+ ensure_equals("sub-part count", mime.subPartCount(), 2);
+ ensure_equals("content length", mime.contentLength(), 500);
+ ensure_equals("data offset for multipart", mime.offset(), 56);
+
+ LLMimeIndex mime_plain(mime.subPart(0));
+ ensure_equals(
+ "first part type",
+ mime_plain.contentType(),
+ "text/plain");
+ ensure_equals(
+ "first part content length",
+ mime_plain.contentLength(),
+ 55);
+ ensure_equals("first part offset", mime_plain.offset(), 108);
+
+ LLMimeIndex mime_xml(mime.subPart(1));
+ ensure_equals(
+ "second part type",
+ mime_xml.contentType(),
+ "text/xml; charset=UTF-8");
+ ensure_equals(
+ "second part content length",
+ mime_xml.contentLength(),
+ 22);
+ ensure_equals("second part offset", mime_xml.offset(), 232);
+ }
+
+/*
+ template<> template<>
+ void mime_parse_object_t::test<>()
+ {
+ }
+ template<> template<>
+ void mime_parse_object_t::test<>()
+ {
+ }
+ template<> template<>
+ void mime_parse_object_t::test<>()
+ {
+ }
+ template<> template<>
+ void mime_parse_object_t::test<>()
+ {
+ }
+*/
+}
diff --git a/indra/llmessage/tests/llmockhttpclient.h b/indra/llmessage/tests/llmockhttpclient.h
new file mode 100644
index 000000000..af26bf880
--- /dev/null
+++ b/indra/llmessage/tests/llmockhttpclient.h
@@ -0,0 +1,66 @@
+/**
+ * @file
+ * @brief
+ *
+ * $LicenseInfo:firstyear=2008&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+/* Macro Definitions */
+#ifndef LL_LLMOCKHTTPCLIENT_H
+#define LL_LLMOCKHTTPCLIENT_H
+
+#include "linden_common.h"
+#include "llhttpclientinterface.h"
+
+#include
+
+class LLMockHTTPClient : public LLHTTPClientInterface
+{
+public:
+ MOCK_METHOD2(get, void(const std::string& url, LLCurl::ResponderPtr responder));
+ MOCK_METHOD3(get, void(const std::string& url, LLCurl::ResponderPtr responder, const LLSD& headers));
+ MOCK_METHOD3(put, void(const std::string& url, const LLSD& body, LLCurl::ResponderPtr responder));
+};
+
+// A helper to match responder types
+template
+struct ResponderType
+{
+ bool operator()(LLCurl::ResponderPtr ptr) const
+ {
+ T* p = dynamic_cast(ptr.get());
+ return p != NULL;
+ }
+};
+
+inline bool operator==(const LLSD& l, const LLSD& r)
+{
+ std::ostringstream ls, rs;
+ ls << l;
+ rs << r;
+ return ls.str() == rs.str();
+
+}
+
+
+#endif //LL_LLMOCKHTTPCLIENT_H
+
diff --git a/indra/llmessage/tests/llnamevalue_test.cpp b/indra/llmessage/tests/llnamevalue_test.cpp
new file mode 100644
index 000000000..8902fdd2e
--- /dev/null
+++ b/indra/llmessage/tests/llnamevalue_test.cpp
@@ -0,0 +1,406 @@
+/**
+ * @file llnamevalue_test.cpp
+ * @author Adroit
+ * @date 2007-02
+ * @brief LLNameValue unit test
+ *
+ * $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#include "linden_common.h"
+#include "llsdserialize.h"
+
+#include "../llnamevalue.h"
+
+#include "../test/lltut.h"
+
+
+#if LL_WINDOWS
+// disable unreachable code warnings
+#pragma warning(disable: 4702)
+#endif
+
+namespace tut
+{
+ struct namevalue_test
+ {
+ namevalue_test()
+ {
+ }
+ };
+ typedef test_group namevalue_t;
+ typedef namevalue_t::object namevalue_object_t;
+ tut::namevalue_t tut_namevalue("LLNameValue");
+
+
+ template<> template<>
+ void namevalue_object_t::test<1>()
+ {
+ // LLNameValue()
+ LLNameValue nValue;
+ ensure("mName should have been NULL", nValue.mName == NULL);
+ ensure("getTypeEnum failed",nValue.getTypeEnum() == NVT_NULL);
+ ensure("getClassEnum failed",nValue.getClassEnum() == NVC_NULL);
+ ensure("getSendtoEnum failed",nValue.getSendtoEnum() == NVS_NULL);
+
+ LLNameValue nValue1(" SecondLife ASSET RW SIM 232324343");
+
+ }
+
+ // LLNameValue(const char* data);
+ // LLNameValue(const char* name, const char* data, const char* type, const char* nvclass, const char* nvsendto,
+ // TNameValueCallback nvcb = NULL, void** user_data = NULL);
+ template<> template<>
+ void namevalue_object_t::test<2>()
+ {
+ LLNameValue nValue(" SecondLife ASSET RW S 232324343");
+ ensure("mName not set correctly", (0 == strcmp(nValue.mName,"SecondLife")));
+ ensure("getTypeEnum failed", nValue.getTypeEnum() == NVT_ASSET);
+ ensure("getClassEnum failed", nValue.getClassEnum() == NVC_READ_WRITE);
+ ensure("getSendtoEnum failed", nValue.getSendtoEnum() == NVS_SIM);
+ ensure("getString failed", (0==strcmp(nValue.getAsset(),"232324343")));
+ ensure("sendToData or sendToViewer failed", !nValue.sendToData() && !nValue.sendToViewer());
+
+ LLNameValue nValue1("\n\r SecondLife_1 STRING READ_WRITE SIM 232324343");
+ ensure("1. mName not set correctly", (0 == strcmp(nValue1.mName,"SecondLife_1")));
+ ensure("1. getTypeEnum failed", nValue1.getTypeEnum() == NVT_STRING);
+ ensure("1. getClassEnum failed", nValue1.getClassEnum() == NVC_READ_WRITE);
+ ensure("1. getSendtoEnum failed", nValue1.getSendtoEnum() == NVS_SIM);
+ ensure("1. getString failed", (0==strcmp(nValue1.getString(),"232324343")));
+ ensure("1. sendToData or sendToViewer failed", !nValue1.sendToData() && !nValue1.sendToViewer());
+
+ LLNameValue nValue2("SecondLife", "23.5", "F32", "R", "DS");
+ ensure("2. getTypeEnum failed", nValue2.getTypeEnum() == NVT_F32);
+ ensure("2. getClassEnum failed", nValue2.getClassEnum() == NVC_READ_ONLY);
+ ensure("2. getSendtoEnum failed", nValue2.getSendtoEnum() == NVS_DATA_SIM);
+ ensure("2. getF32 failed", *nValue2.getF32() == 23.5f);
+ ensure("2. sendToData or sendToViewer failed", nValue2.sendToData() && !nValue2.sendToViewer());
+
+ LLNameValue nValue3("SecondLife", "-43456787", "S32", "READ_ONLY", "SIM_SPACE");
+ ensure("3. getTypeEnum failed", nValue3.getTypeEnum() == NVT_S32);
+ ensure("3. getClassEnum failed", nValue3.getClassEnum() == NVC_READ_ONLY);
+ ensure("3. getSendtoEnum failed", nValue3.getSendtoEnum() == NVS_DATA_SIM);
+ ensure("3. getS32 failed", *nValue3.getS32() == -43456787);
+ ensure("sendToData or sendToViewer failed", nValue3.sendToData() && !nValue3.sendToViewer());
+
+ LLNameValue nValue4("SecondLife", "<1.0, 2.0, 3.0>", "VEC3", "RW", "SV");
+ LLVector3 llvec4(1.0, 2.0, 3.0);
+ ensure("4. getTypeEnum failed", nValue4.getTypeEnum() == NVT_VEC3);
+ ensure("4. getClassEnum failed", nValue4.getClassEnum() == NVC_READ_WRITE);
+ ensure("4. getSendtoEnum failed", nValue4.getSendtoEnum() == NVS_SIM_VIEWER);
+ ensure("4. getVec3 failed", *nValue4.getVec3() == llvec4);
+ ensure("4. sendToData or sendToViewer failed", !nValue4.sendToData() && nValue4.sendToViewer());
+
+ LLNameValue nValue5("SecondLife", "-1.0, 2.4, 3", "VEC3", "RW", "SIM_VIEWER");
+ LLVector3 llvec5(-1.0f, 2.4f, 3);
+ ensure("5. getTypeEnum failed", nValue5.getTypeEnum() == NVT_VEC3);
+ ensure("5. getClassEnum failed", nValue5.getClassEnum() == NVC_READ_WRITE);
+ ensure("5. getSendtoEnum failed", nValue5.getSendtoEnum() == NVS_SIM_VIEWER);
+ ensure("5. getVec3 failed", *nValue5.getVec3() == llvec5);
+ ensure("5. sendToData or sendToViewer failed", !nValue5.sendToData() && nValue5.sendToViewer());
+
+ LLNameValue nValue6("SecondLife", "89764323", "U32", "RW", "DSV");
+ ensure("6. getTypeEnum failed", nValue6.getTypeEnum() == NVT_U32);
+ ensure("6. getClassEnum failed", nValue6.getClassEnum() == NVC_READ_WRITE);
+ ensure("6. getSendtoEnum failed", nValue6.getSendtoEnum() == NVS_DATA_SIM_VIEWER);
+ ensure("6. getU32 failed", *nValue6.getU32() == 89764323);
+ ensure("6. sendToData or sendToViewer failed", nValue6.sendToData() && nValue6.sendToViewer());
+
+ LLNameValue nValue7("SecondLife", "89764323323232", "U64", "RW", "SIM_SPACE_VIEWER");
+ U64 u64_7 = U64L(89764323323232);
+ ensure("7. getTypeEnum failed", nValue7.getTypeEnum() == NVT_U64);
+ ensure("7. getClassEnum failed", nValue7.getClassEnum() == NVC_READ_WRITE);
+ ensure("7. getSendtoEnum failed", nValue7.getSendtoEnum() == NVS_DATA_SIM_VIEWER);
+ ensure("7. getU32 failed", *nValue7.getU64() == u64_7);
+ ensure("7. sendToData or sendToViewer failed", nValue7.sendToData() && nValue7.sendToViewer());
+ }
+
+ // LLNameValue(const char* name, const char* data, const char* type, const char* nvclass,
+ // TNameValueCallback nvcb = NULL, void** user_data = NULL);
+ template<> template<>
+ void namevalue_object_t::test<3>()
+ {
+ LLNameValue nValue("SecondLife", "232324343", "ASSET", "READ_WRITE");
+ ensure("mName not set correctly", (0 == strcmp(nValue.mName,"SecondLife")));
+ ensure("getTypeEnum failed", nValue.getTypeEnum() == NVT_ASSET);
+ ensure("getClassEnum failed", nValue.getClassEnum() == NVC_READ_WRITE);
+ ensure("getSendtoEnum failed", nValue.getSendtoEnum() == NVS_SIM);
+ ensure("getString failed", (0==strcmp(nValue.getAsset(),"232324343")));
+
+ LLNameValue nValue1("SecondLife", "232324343", "STRING", "READ_WRITE");
+ ensure("1. mName not set correctly", (0 == strcmp(nValue1.mName,"SecondLife")));
+ ensure("1. getTypeEnum failed", nValue1.getTypeEnum() == NVT_STRING);
+ ensure("1. getClassEnum failed", nValue1.getClassEnum() == NVC_READ_WRITE);
+ ensure("1. getSendtoEnum failed", nValue1.getSendtoEnum() == NVS_SIM);
+ ensure("1. getString failed", (0==strcmp(nValue1.getString(),"232324343")));
+
+ LLNameValue nValue2("SecondLife", "23.5", "F32", "R");
+ ensure("2. getTypeEnum failed", nValue2.getTypeEnum() == NVT_F32);
+ ensure("2. getClassEnum failed", nValue2.getClassEnum() == NVC_READ_ONLY);
+ ensure("2. getSendtoEnum failed", nValue2.getSendtoEnum() == NVS_SIM);
+ ensure("2. getF32 failed", *nValue2.getF32() == 23.5f);
+
+ LLNameValue nValue3("SecondLife", "-43456787", "S32", "READ_ONLY");
+ ensure("3. getTypeEnum failed", nValue3.getTypeEnum() == NVT_S32);
+ ensure("3. getClassEnum failed", nValue3.getClassEnum() == NVC_READ_ONLY);
+ ensure("3. getSendtoEnum failed", nValue3.getSendtoEnum() == NVS_SIM);
+ ensure("3. getS32 failed", *nValue3.getS32() == -43456787);
+
+ LLNameValue nValue4("SecondLife", "<1.0, 2.0, 3.0>", "VEC3", "RW");
+ LLVector3 llvec4(1.0, 2.0, 3.0);
+ ensure("4. getTypeEnum failed", nValue4.getTypeEnum() == NVT_VEC3);
+ ensure("4. getClassEnum failed", nValue4.getClassEnum() == NVC_READ_WRITE);
+ ensure("4. getSendtoEnum failed", nValue4.getSendtoEnum() == NVS_SIM);
+ ensure("4. getVec3 failed", *nValue4.getVec3() == llvec4);
+
+ LLNameValue nValue5("SecondLife", "-1.0, 2.4, 3", "VEC3", "RW");
+ LLVector3 llvec5(-1.0f, 2.4f, 3);
+ ensure("5. getTypeEnum failed", nValue5.getTypeEnum() == NVT_VEC3);
+ ensure("5. getClassEnum failed", nValue5.getClassEnum() == NVC_READ_WRITE);
+ ensure("5. getSendtoEnum failed", nValue5.getSendtoEnum() == NVS_SIM);
+ ensure("5. getVec3 failed", *nValue5.getVec3() == llvec5);
+
+ LLNameValue nValue6("SecondLife", "89764323", "U32", "RW");
+ ensure("6. getTypeEnum failed", nValue6.getTypeEnum() == NVT_U32);
+ ensure("6. getClassEnum failed", nValue6.getClassEnum() == NVC_READ_WRITE);
+ ensure("6. getSendtoEnum failed", nValue6.getSendtoEnum() == NVS_SIM);
+ ensure("6. getU32 failed", *nValue6.getU32() == 89764323);
+
+ LLNameValue nValue7("SecondLife", "89764323323232", "U64", "RW");
+ U64 u64_7 = U64L(89764323323232);
+ ensure("7. getTypeEnum failed", nValue7.getTypeEnum() == NVT_U64);
+ ensure("7. getClassEnum failed", nValue7.getClassEnum() == NVC_READ_WRITE);
+ ensure("7. getSendtoEnum failed", nValue7.getSendtoEnum() == NVS_SIM);
+ ensure("7. getU32 failed", *nValue7.getU64() == u64_7);
+ }
+
+ // LLNameValue(const char* name, const char* type, const char* nvclass,
+ // TNameValueCallback nvcb = NULL, void** user_data = NULL);
+ template<> template<>
+ void namevalue_object_t::test<4>()
+ {
+ LLNameValue nValue("SecondLife", "STRING", "READ_WRITE");
+ ensure("mName not set correctly", (0 == strcmp(nValue.mName,"SecondLife")));
+ ensure("getTypeEnum failed", nValue.getTypeEnum() == NVT_STRING);
+ ensure("getClassEnum failed", nValue.getClassEnum() == NVC_READ_WRITE);
+ ensure("getSendtoEnum failed", nValue.getSendtoEnum() == NVS_SIM);
+
+ LLNameValue nValue1("SecondLife", "ASSET", "READ_WRITE");
+ ensure("1. mName not set correctly", (0 == strcmp(nValue1.mName,"SecondLife")));
+ ensure("1. getTypeEnum for RW failed", nValue1.getTypeEnum() == NVT_ASSET);
+ ensure("1. getClassEnum for RW failed", nValue1.getClassEnum() == NVC_READ_WRITE);
+ ensure("1. getSendtoEnum for RW failed", nValue1.getSendtoEnum() == NVS_SIM);
+
+ LLNameValue nValue2("SecondLife", "F32", "READ_ONLY");
+ ensure("2. getTypeEnum failed", nValue2.getTypeEnum() == NVT_F32);
+ ensure("2. getClassEnum failed", nValue2.getClassEnum() == NVC_READ_ONLY);
+ ensure("2. getSendtoEnum failed", nValue2.getSendtoEnum() == NVS_SIM);
+
+ LLNameValue nValue3("SecondLife", "S32", "READ_ONLY");
+ ensure("3. getTypeEnum failed", nValue3.getTypeEnum() == NVT_S32);
+ ensure("3. getClassEnum failed", nValue3.getClassEnum() == NVC_READ_ONLY);
+ ensure("3. getSendtoEnum failed", nValue3.getSendtoEnum() == NVS_SIM);
+
+ LLNameValue nValue4("SecondLife", "VEC3", "READ_WRITE");
+ ensure("4. getTypeEnum failed", nValue4.getTypeEnum() == NVT_VEC3);
+ ensure("4. getClassEnum failed", nValue4.getClassEnum() == NVC_READ_WRITE);
+ ensure("4. getSendtoEnum failed", nValue4.getSendtoEnum() == NVS_SIM);
+
+ LLNameValue nValue6("SecondLife", "U32", "READ_WRITE");
+ ensure("6. getTypeEnum failed", nValue6.getTypeEnum() == NVT_U32);
+ ensure("6. getClassEnum failed", nValue6.getClassEnum() == NVC_READ_WRITE);
+ ensure("6. getSendtoEnum failed", nValue6.getSendtoEnum() == NVS_SIM);
+
+ LLNameValue nValue7("SecondLife", "U64", "READ_WRITE");
+ ensure("7. getTypeEnum failed", nValue7.getTypeEnum() == NVT_U64);
+ ensure("7. getClassEnum failed", nValue7.getClassEnum() == NVC_READ_WRITE);
+ ensure("7. getSendtoEnum failed", nValue7.getSendtoEnum() == NVS_SIM);
+ }
+
+ template<> template<>
+ void namevalue_object_t::test<5>()
+ {
+ LLNameValue nValue("SecondLife", "This is a test", "STRING", "RW", "SIM");
+
+ ensure("getString failed", (0 == strcmp(nValue.getString(),"This is a test")));
+ }
+
+ template<> template<>
+ void namevalue_object_t::test<6>()
+ {
+ LLNameValue nValue("SecondLife", "This is a test", "ASSET", "RW", "S");
+ ensure("getAsset failed", (0 == strcmp(nValue.getAsset(),"This is a test")));
+ }
+
+ template<> template<>
+ void namevalue_object_t::test<7>()
+ {
+ LLNameValue nValue("SecondLife", "555555", "F32", "RW", "SIM");
+
+ ensure("getF32 failed",*nValue.getF32() == 555555.f);
+ }
+
+ template<> template<>
+ void namevalue_object_t::test<8>()
+ {
+ LLNameValue nValue("SecondLife", "-5555", "S32", "RW", "SIM");
+
+ ensure("getS32 failed", *nValue.getS32() == -5555);
+
+ S32 sVal = 0x7FFFFFFF;
+ nValue.setS32(sVal);
+ ensure("getS32 failed", *nValue.getS32() == sVal);
+
+ sVal = -0x7FFFFFFF;
+ nValue.setS32(sVal);
+ ensure("getS32 failed", *nValue.getS32() == sVal);
+
+ sVal = 0;
+ nValue.setS32(sVal);
+ ensure("getS32 failed", *nValue.getS32() == sVal);
+ }
+
+ template<> template<>
+ void namevalue_object_t::test<9>()
+ {
+ LLNameValue nValue("SecondLife", "<-3, 2, 1>", "VEC3", "RW", "SIM");
+ LLVector3 vecExpected(-3, 2, 1);
+ LLVector3 vec;
+ nValue.getVec3(vec);
+ ensure("getVec3 failed", vec == vecExpected);
+ }
+
+ template<> template<>
+ void namevalue_object_t::test<10>()
+ {
+ LLNameValue nValue("SecondLife", "12345678", "U32", "RW", "SIM");
+
+ ensure("getU32 failed",*nValue.getU32() == 12345678);
+
+ U32 val = 0xFFFFFFFF;
+ nValue.setU32(val);
+ ensure("U32 max", *nValue.getU32() == val);
+
+ val = 0;
+ nValue.setU32(val);
+ ensure("U32 min", *nValue.getU32() == val);
+ }
+
+ template<> template<>
+ void namevalue_object_t::test<11>()
+ {
+ //skip_fail("incomplete support for U64.");
+ LLNameValue nValue("SecondLife", "44444444444", "U64", "RW", "SIM");
+
+ ensure("getU64 failed",*nValue.getU64() == U64L(44444444444));
+
+ // there is no LLNameValue::setU64()
+ }
+
+
+ template<> template<>
+ void namevalue_object_t::test<12>()
+ {
+ //skip_fail("incomplete support for U64.");
+ LLNameValue nValue("SecondLife U64 RW DSV 44444444444");
+ std::string ret_str = nValue.printNameValue();
+
+ ensure_equals("1:printNameValue failed",ret_str,"SecondLife U64 RW DSV 44444444444");
+
+ LLNameValue nValue1(ret_str.c_str());
+ ensure_equals("Serialization of printNameValue failed", *nValue.getU64(), *nValue1.getU64());
+ }
+
+ template<> template<>
+ void namevalue_object_t::test<13>()
+ {
+ LLNameValue nValue("SecondLife STRING RW DSV 44444444444");
+ std::string ret_str = nValue.printData();
+ ensure_equals("1:printData failed",ret_str,"44444444444");
+
+ LLNameValue nValue1("SecondLife S32 RW DSV 44444");
+ ret_str = nValue1.printData();
+ ensure_equals("2:printData failed",ret_str,"44444");
+ }
+
+ template<> template<>
+ void namevalue_object_t::test<14>()
+ {
+ LLNameValue nValue("SecodLife STRING RW SIM 22222");
+ std::ostringstream stream1,stream2,stream3, stream4, stream5;
+ stream1 << nValue;
+ ensure_equals("STRING << failed",stream1.str(),"22222");
+
+ LLNameValue nValue1("SecodLife F32 RW SIM 22222");
+ stream2 << nValue1;
+ ensure_equals("F32 << failed",stream2.str(),"22222");
+
+ LLNameValue nValue2("SecodLife S32 RW SIM 22222");
+ stream3<< nValue2;
+ ensure_equals("S32 << failed",stream3.str(),"22222");
+
+ LLNameValue nValue3("SecodLife U32 RW SIM 122222");
+ stream4<< nValue3;
+ ensure_equals("U32 << failed",stream4.str(),"122222");
+
+ // I don't think we use U64 name value pairs. JC
+ //skip_fail("incomplete support for U64.");
+ //LLNameValue nValue4("SecodLife U64 RW SIM 22222");
+ //stream5<< nValue4;
+ //ensure("U64 << failed",0 == strcmp((stream5.str()).c_str(),"22222"));
+ }
+
+ template<> template<>
+ void namevalue_object_t::test<15>()
+ {
+ LLNameValue nValue("SecondLife", "This is a test", "ASSET", "R", "S");
+
+ ensure("getAsset failed", (0 == strcmp(nValue.getAsset(),"This is a test")));
+ // this should not have updated as it is read only.
+ nValue.setAsset("New Value should not be updated");
+ ensure("setAsset on ReadOnly failed", (0 == strcmp(nValue.getAsset(),"This is a test")));
+
+ LLNameValue nValue1("SecondLife", "1234", "U32", "R", "S");
+ // this should not have updated as it is read only.
+ nValue1.setU32(4567);
+ ensure("setU32 on ReadOnly failed", *nValue1.getU32() == 1234);
+
+ LLNameValue nValue2("SecondLife", "1234", "S32", "R", "S");
+ // this should not have updated as it is read only.
+ nValue2.setS32(4567);
+ ensure("setS32 on ReadOnly failed", *nValue2.getS32() == 1234);
+
+ LLNameValue nValue3("SecondLife", "1234", "F32", "R", "S");
+ // this should not have updated as it is read only.
+ nValue3.setF32(4567);
+ ensure("setF32 on ReadOnly failed", *nValue3.getF32() == 1234);
+
+ LLNameValue nValue4("SecondLife", "<1,2,3>", "VEC3", "R", "S");
+ // this should not have updated as it is read only.
+ LLVector3 vec(4,5,6);
+ nValue3.setVec3(vec);
+ LLVector3 vec1(1,2,3);
+ ensure("setVec3 on ReadOnly failed", *nValue4.getVec3() == vec1);
+
+ // cant test for U64 as no set64 exists nor any operators support U64 type
+ }
+}
diff --git a/indra/llmessage/tests/llpartdata_test.cpp b/indra/llmessage/tests/llpartdata_test.cpp
new file mode 100644
index 000000000..9123bd06c
--- /dev/null
+++ b/indra/llmessage/tests/llpartdata_test.cpp
@@ -0,0 +1,216 @@
+/**
+ * @file llpartdata_tut.cpp
+ * @author Adroit
+ * @date March 2007
+ * @brief LLPartData and LLPartSysData test cases.
+ *
+ * $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#include "linden_common.h"
+#include "lldatapacker.h"
+#include "v3math.h"
+#include "llsdserialize.h"
+#include "message.h"
+
+#include "../llpartdata.h"
+
+#include "../test/lltut.h"
+
+namespace tut
+{
+
+ struct partdata_test
+ {
+ };
+ typedef test_group partdata_test_t;
+ typedef partdata_test_t::object partdata_test_object_t;
+ tut::partdata_test_t tut_partdata_test("LLPartData");
+
+ template<> template<>
+ void partdata_test_object_t::test<1>()
+ {
+ LLPartData llpdata,llpdata1;
+ U8 pkbuf[128];
+
+ llpdata.setFlags(LLPartData::LL_PART_INTERP_COLOR_MASK | LLPartData::LL_PART_INTERP_SCALE_MASK |
+ LLPartData::LL_PART_BOUNCE_MASK | LLPartData::LL_PART_WIND_MASK | LLPartData::LL_PART_FOLLOW_SRC_MASK |
+ LLPartData::LL_PART_FOLLOW_VELOCITY_MASK | LLPartData::LL_PART_TARGET_POS_MASK | LLPartData::LL_PART_TARGET_LINEAR_MASK |
+ LLPartData::LL_PART_EMISSIVE_MASK | LLPartData::LL_PART_BEAM_MASK | LLPartData::LL_PART_DEAD_MASK);
+
+ llpdata.setMaxAge(29.3f);
+
+ LLVector3 llvec1(1.0f, .5f, .25f);
+ llpdata.setStartColor(llvec1);
+ llpdata.setStartAlpha(.7f);
+
+ LLVector3 llvec2(.2f, .3f, 1.0f);
+ llpdata.setEndColor(llvec2);
+ llpdata.setEndAlpha(1.0f);
+
+ llpdata.setStartScale(3.23f, 4.0f);
+ llpdata.setEndScale(2.4678f, 1.0f);
+
+ LLDataPackerBinaryBuffer dp((U8*)pkbuf, 128);
+ llpdata.pack(dp);
+
+ S32 cur_size = dp.getCurrentSize();
+
+ LLDataPackerBinaryBuffer dp1((U8*)pkbuf, cur_size);
+ llpdata1.unpack(dp1);
+
+ ensure("1.mFlags values are different after unpacking", llpdata1.mFlags == llpdata.mFlags);
+ ensure_approximately_equals("2.mMaxAge values are different after unpacking", llpdata1.mMaxAge, llpdata.mMaxAge, 8);
+
+ ensure_approximately_equals("3.mStartColor[0] values are different after unpacking", llpdata1.mStartColor.mV[0], llpdata.mStartColor.mV[0], 8);
+ ensure_approximately_equals("4.mStartColor[1] values are different after unpacking", llpdata1.mStartColor.mV[1], llpdata.mStartColor.mV[1], 8);
+ ensure_approximately_equals("5.mStartColor[2] values are different after unpacking", llpdata1.mStartColor.mV[2], llpdata.mStartColor.mV[2], 8);
+ ensure_approximately_equals("6.mStartColor[3] values are different after unpacking", llpdata1.mStartColor.mV[3], llpdata.mStartColor.mV[3], 8);
+
+ ensure_approximately_equals("7.mEndColor[0] values are different after unpacking", llpdata1.mEndColor.mV[0], llpdata.mEndColor.mV[0], 8);
+ ensure_approximately_equals("8.mEndColor[1] values are different after unpacking", llpdata1.mEndColor.mV[1], llpdata.mEndColor.mV[1], 8);
+ ensure_approximately_equals("9.mEndColor[2] values are different after unpacking", llpdata1.mEndColor.mV[2], llpdata.mEndColor.mV[2], 8);
+ ensure_approximately_equals("10.mEndColor[2] values are different after unpacking", llpdata1.mEndColor.mV[3], llpdata.mEndColor.mV[3], 8);
+
+ ensure_approximately_equals("11.mStartScale[0] values are different after unpacking", llpdata1.mStartScale.mV[0], llpdata.mStartScale.mV[0], 5);
+ ensure_approximately_equals("12.mStartScale[1] values are different after unpacking", llpdata1.mStartScale.mV[1], llpdata.mStartScale.mV[1], 5);
+
+ ensure_approximately_equals("13.mEndScale[0] values are different after unpacking", llpdata1.mEndScale.mV[0], llpdata.mEndScale.mV[0], 5);
+ ensure_approximately_equals("14.mEndScale[1] values are different after unpacking", llpdata1.mEndScale.mV[1], llpdata.mEndScale.mV[1], 5);
+ }
+
+
+ template<> template<>
+ void partdata_test_object_t::test<2>()
+ {
+ LLPartData llpdata,llpdata1;
+
+ llpdata.setFlags(LLPartData::LL_PART_INTERP_COLOR_MASK | LLPartData::LL_PART_INTERP_SCALE_MASK |
+ LLPartData::LL_PART_BOUNCE_MASK | LLPartData::LL_PART_WIND_MASK | LLPartData::LL_PART_FOLLOW_SRC_MASK |
+ LLPartData::LL_PART_FOLLOW_VELOCITY_MASK | LLPartData::LL_PART_TARGET_POS_MASK | LLPartData::LL_PART_TARGET_LINEAR_MASK |
+ LLPartData::LL_PART_EMISSIVE_MASK | LLPartData::LL_PART_BEAM_MASK | LLPartData::LL_PART_DEAD_MASK);
+
+ llpdata.setMaxAge(29.3f);
+
+ LLVector3 llvec1(1.0f, .5f, .25f);
+ llpdata.setStartColor(llvec1);
+ llpdata.setStartAlpha(.7f);
+
+ LLVector3 llvec2(.2f, .3f, 1.0f);
+ llpdata.setEndColor(llvec2);
+ llpdata.setEndAlpha(1.0f);
+
+ llpdata.setStartScale(3.23f, 4.0f);
+ llpdata.setEndScale(2.4678f, 1.0f);
+
+ LLSD llsd = llpdata.asLLSD();
+
+ llpdata1.fromLLSD(llsd);
+
+ ensure("1.mFlags values are different after unpacking", llpdata1.mFlags == llpdata.mFlags);
+ ensure_approximately_equals("2.mMaxAge values are different after unpacking", llpdata1.mMaxAge, llpdata.mMaxAge, 8);
+
+ ensure_approximately_equals("3.mStartColor[0] values are different after unpacking", llpdata1.mStartColor.mV[0], llpdata.mStartColor.mV[0], 8);
+ ensure_approximately_equals("4.mStartColor[1] values are different after unpacking", llpdata1.mStartColor.mV[1], llpdata.mStartColor.mV[1], 8);
+ ensure_approximately_equals("5.mStartColor[2] values are different after unpacking", llpdata1.mStartColor.mV[2], llpdata.mStartColor.mV[2], 8);
+ ensure_approximately_equals("6.mStartColor[3] values are different after unpacking", llpdata1.mStartColor.mV[3], llpdata.mStartColor.mV[3], 8);
+
+ ensure_approximately_equals("7.mEndColor[0] values are different after unpacking", llpdata1.mEndColor.mV[0], llpdata.mEndColor.mV[0], 8);
+ ensure_approximately_equals("8.mEndColor[1] values are different after unpacking", llpdata1.mEndColor.mV[1], llpdata.mEndColor.mV[1], 8);
+ ensure_approximately_equals("9.mEndColor[2] values are different after unpacking", llpdata1.mEndColor.mV[2], llpdata.mEndColor.mV[2], 8);
+ ensure_approximately_equals("10.mEndColor[2] values are different after unpacking", llpdata1.mEndColor.mV[3], llpdata.mEndColor.mV[3], 8);
+
+ ensure_approximately_equals("11.mStartScale[0] values are different after unpacking", llpdata1.mStartScale.mV[0], llpdata.mStartScale.mV[0], 5);
+ ensure_approximately_equals("12.mStartScale[1] values are different after unpacking", llpdata1.mStartScale.mV[1], llpdata.mStartScale.mV[1], 5);
+
+ ensure_approximately_equals("13.mEndScale[0] values are different after unpacking", llpdata1.mEndScale.mV[0], llpdata.mEndScale.mV[0], 5);
+ ensure_approximately_equals("14.mEndScale[1] values are different after unpacking", llpdata1.mEndScale.mV[1], llpdata.mEndScale.mV[1], 5);
+ }
+
+
+//*********llpartsysdata***********
+
+ template<> template<>
+ void partdata_test_object_t::test<3>()
+ {
+ LLPartSysData llpsysdata, llpsysdata1;
+ U8 pkbuf[256];
+ llpsysdata.setBurstSpeedMin(33.33f);
+ ensure("1.mBurstSpeedMin coudnt be set", 33.33f == llpsysdata.mBurstSpeedMin);
+
+ llpsysdata.setBurstSpeedMax(44.44f);
+ ensure("2.mBurstSpeedMax coudnt be set", 44.44f == llpsysdata.mBurstSpeedMax);
+
+ llpsysdata.setBurstRadius(45.55f);
+ ensure("3.mBurstRadius coudnt be set", 45.55f == llpsysdata.mBurstRadius);
+
+ LLVector3 llvec(44.44f, 111.11f, -40.4f);
+ llpsysdata.setPartAccel(llvec);
+
+ llpsysdata.mCRC = 0xFFFFFFFF;
+ llpsysdata.mFlags = 0x20;
+
+ llpsysdata.mPattern = LLPartSysData::LL_PART_SRC_PATTERN_ANGLE_CONE_EMPTY;
+
+ llpsysdata.mMaxAge = 99.99f;
+ llpsysdata.mStartAge = 18.5f;
+ llpsysdata.mInnerAngle = 4.234f;
+ llpsysdata.mOuterAngle = 7.123f;
+ llpsysdata.mBurstRate = 245.53f;
+ llpsysdata.mBurstPartCount = 0xFF;
+ llpsysdata.mAngularVelocity = llvec;
+
+ llpsysdata.mPartImageID.generate();
+ llpsysdata.mTargetUUID.generate();
+
+ LLDataPackerBinaryBuffer dp((U8*)pkbuf, 256);
+ llpsysdata.pack(dp);
+ S32 cur_size = dp.getCurrentSize();
+ LLDataPackerBinaryBuffer dp1((U8*)pkbuf, cur_size);
+ llpsysdata1.unpack(dp1);
+
+ ensure("1.mCRC's not equal", llpsysdata.mCRC == llpsysdata1.mCRC);
+ ensure("2.mFlags's not equal", llpsysdata.mFlags == llpsysdata1.mFlags);
+ ensure("3.mPattern's not equal", llpsysdata.mPattern == llpsysdata1.mPattern);
+ ensure_approximately_equals("4.mMaxAge's not equal", llpsysdata.mMaxAge , llpsysdata1.mMaxAge, 8);
+ ensure_approximately_equals("5.mStartAge's not equal", llpsysdata.mStartAge, llpsysdata1.mStartAge, 8);
+ ensure_approximately_equals("6.mOuterAngle's not equal", llpsysdata.mOuterAngle, llpsysdata1.mOuterAngle, 5);
+ ensure_approximately_equals("7.mInnerAngles's not equal", llpsysdata.mInnerAngle, llpsysdata1.mInnerAngle, 5);
+ ensure_approximately_equals("8.mBurstRate's not equal", llpsysdata.mBurstRate, llpsysdata1.mBurstRate, 8);
+ ensure("9.mBurstPartCount's not equal", llpsysdata.mBurstPartCount == llpsysdata1.mBurstPartCount);
+
+ ensure_approximately_equals("10.mBurstSpeedMin's not equal", llpsysdata.mBurstSpeedMin, llpsysdata1.mBurstSpeedMin, 8);
+ ensure_approximately_equals("11.mBurstSpeedMax's not equal", llpsysdata.mBurstSpeedMax, llpsysdata1.mBurstSpeedMax, 8);
+
+ ensure_approximately_equals("12.mAngularVelocity's not equal", llpsysdata.mAngularVelocity.mV[0], llpsysdata1.mAngularVelocity.mV[0], 7);
+ ensure_approximately_equals("13.mAngularVelocity's not equal", llpsysdata.mAngularVelocity.mV[1], llpsysdata1.mAngularVelocity.mV[1], 7);
+ ensure_approximately_equals("14.mAngularVelocity's not equal", llpsysdata.mAngularVelocity.mV[2], llpsysdata1.mAngularVelocity.mV[2], 7);
+
+ ensure_approximately_equals("15.mPartAccel's not equal", llpsysdata.mPartAccel.mV[0], llpsysdata1.mPartAccel.mV[0], 7);
+ ensure_approximately_equals("16.mPartAccel's not equal", llpsysdata.mPartAccel.mV[1], llpsysdata1.mPartAccel.mV[1], 7);
+ ensure_approximately_equals("17.mPartAccel's not equal", llpsysdata.mPartAccel.mV[2], llpsysdata1.mPartAccel.mV[2], 7);
+
+ ensure("18.mPartImageID's not equal", llpsysdata.mPartImageID == llpsysdata1.mPartImageID);
+ ensure("19.mTargetUUID's not equal", llpsysdata.mTargetUUID == llpsysdata1.mTargetUUID);
+ ensure_approximately_equals("20.mBurstRadius's not equal", llpsysdata.mBurstRadius, llpsysdata1.mBurstRadius, 8);
+ }
+}
diff --git a/indra/llmessage/tests/llregionpresenceverifier_test.cpp b/indra/llmessage/tests/llregionpresenceverifier_test.cpp
new file mode 100644
index 000000000..5b89f2a8c
--- /dev/null
+++ b/indra/llmessage/tests/llregionpresenceverifier_test.cpp
@@ -0,0 +1,108 @@
+/**
+ * @file
+ * @brief
+ *
+ * $LicenseInfo:firstyear=2008&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#include "linden_common.h"
+
+#include "../test/lltut.h"
+#include "llregionpresenceverifier.h"
+#include "llcurl_stub.cpp"
+#include "llhost.cpp"
+#include "net.cpp"
+#include "lltesthttpclientadapter.cpp"
+
+class LLTestResponse : public LLRegionPresenceVerifier::Response
+{
+public:
+
+ virtual bool checkValidity(const LLSD& content) const
+ {
+ return true;
+ }
+
+ virtual void onRegionVerified(const LLSD& region_details)
+ {
+ }
+
+ virtual void onRegionVerificationFailed()
+ {
+ }
+
+ virtual LLHTTPClientInterface& getHttpClient()
+ {
+ return mHttpInterface;
+ }
+
+ LLTestHTTPClientAdapter mHttpInterface;
+};
+
+namespace tut
+{
+ struct LLRegionPresenceVerifierData
+ {
+ LLRegionPresenceVerifierData() :
+ mResponse(new LLTestResponse()),
+ mResponder("", LLRegionPresenceVerifier::ResponsePtr(mResponse),
+ LLSD(), 3)
+ {
+ }
+
+ LLTestResponse* mResponse;
+ LLRegionPresenceVerifier::VerifiedDestinationResponder mResponder;
+ };
+
+ typedef test_group factory;
+ typedef factory::object object;
+}
+
+namespace
+{
+ tut::factory tf("LLRegionPresenceVerifier");
+}
+
+namespace tut
+{
+ // Test that VerifiedDestinationResponder does retry
+ // on error when shouldRetry returns true.
+ template<> template<>
+ void object::test<1>()
+ {
+ mResponder.error(500, "Internal server error");
+ ensure_equals(mResponse->mHttpInterface.mGetUrl.size(), 1);
+ }
+
+ // Test that VerifiedDestinationResponder only retries
+ // on error until shouldRetry returns false.
+ template<> template<>
+ void object::test<2>()
+ {
+ mResponder.error(500, "Internal server error");
+ mResponder.error(500, "Internal server error");
+ mResponder.error(500, "Internal server error");
+ mResponder.error(500, "Internal server error");
+ ensure_equals(mResponse->mHttpInterface.mGetUrl.size(), 3);
+ }
+}
+
diff --git a/indra/llmessage/tests/llsdmessage_test.cpp b/indra/llmessage/tests/llsdmessage_test.cpp
new file mode 100644
index 000000000..0f2c06930
--- /dev/null
+++ b/indra/llmessage/tests/llsdmessage_test.cpp
@@ -0,0 +1,158 @@
+/**
+ * @file llsdmessage_test.cpp
+ * @author Nat Goodspeed
+ * @date 2008-12-22
+ * @brief Test of llsdmessage.h
+ *
+ * $LicenseInfo:firstyear=2008&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#if LL_WINDOWS
+#pragma warning (disable : 4675) // "resolved by ADL" -- just as I want!
+#endif
+
+// Precompiled header
+#include "linden_common.h"
+// associated header
+#include "llsdmessage.h"
+// STL headers
+#include
+// std headers
+#include
+#include
+// external library headers
+// other Linden headers
+#include "../test/lltut.h"
+#include "llsdserialize.h"
+#include "llevents.h"
+#include "stringize.h"
+#include "llhost.h"
+#include "tests/networkio.h"
+#include "tests/commtest.h"
+
+/*****************************************************************************
+* TUT
+*****************************************************************************/
+namespace tut
+{
+ struct llsdmessage_data: public commtest_data
+ {
+ LLEventPump& httpPump;
+
+ llsdmessage_data():
+ httpPump(pumps.obtain("LLHTTPClient"))
+ {
+ LLCurl::initClass();
+ LLSDMessage::link();
+ }
+ };
+ typedef test_group llsdmessage_group;
+ typedef llsdmessage_group::object llsdmessage_object;
+ llsdmessage_group llsdmgr("llsdmessage");
+
+ template<> template<>
+ void llsdmessage_object::test<1>()
+ {
+ bool threw = false;
+ // This should fail...
+ try
+ {
+ LLSDMessage localListener;
+ }
+ catch (const LLEventPump::DupPumpName&)
+ {
+ threw = true;
+ }
+ catch (const std::runtime_error& ex)
+ {
+ // This clause is because on Linux, on the viewer side, for this
+ // one test program (though not others!), the
+ // LLEventPump::DupPumpName exception isn't caught by the clause
+ // above. Warn the user...
+ std::cerr << "Failed to catch " << typeid(ex).name() << std::endl;
+ // But if the expected exception was thrown, allow the test to
+ // succeed anyway. Not sure how else to handle this odd case.
+ if (std::string(typeid(ex).name()) == typeid(LLEventPump::DupPumpName).name())
+ {
+ threw = true;
+ }
+ else
+ {
+ // We don't even recognize this exception. Let it propagate
+ // out to TUT to fail the test.
+ throw;
+ }
+ }
+ catch (...)
+ {
+ std::cerr << "Utterly failed to catch expected exception!" << std::endl;
+ // This case is full of fail. We HAVE to address it.
+ throw;
+ }
+ ensure("second LLSDMessage should throw", threw);
+ }
+
+ template<> template<>
+ void llsdmessage_object::test<2>()
+ {
+ LLSD request, body;
+ body["data"] = "yes";
+ request["payload"] = body;
+ request["reply"] = replyPump.getName();
+ request["error"] = errorPump.getName();
+ bool threw = false;
+ try
+ {
+ httpPump.post(request);
+ }
+ catch (const LLSDMessage::ArgError&)
+ {
+ threw = true;
+ }
+ ensure("missing URL", threw);
+ }
+
+ template<> template<>
+ void llsdmessage_object::test<3>()
+ {
+ LLSD request, body;
+ body["data"] = "yes";
+ request["url"] = server + "got-message";
+ request["payload"] = body;
+ request["reply"] = replyPump.getName();
+ request["error"] = errorPump.getName();
+ httpPump.post(request);
+ ensure("got response", netio.pump());
+ ensure("success response", success);
+ ensure_equals(result.asString(), "success");
+
+ body["status"] = 499;
+ body["reason"] = "custom error message";
+ request["url"] = server + "fail";
+ request["payload"] = body;
+ httpPump.post(request);
+ ensure("got response", netio.pump());
+ ensure("failure response", ! success);
+ ensure_equals(result["status"].asInteger(), body["status"].asInteger());
+ ensure_equals(result["reason"].asString(), body["reason"].asString());
+ }
+} // namespace tut
diff --git a/indra/llmessage/tests/llxfer_file_test.cpp b/indra/llmessage/tests/llxfer_file_test.cpp
new file mode 100644
index 000000000..a8c1adf9b
--- /dev/null
+++ b/indra/llmessage/tests/llxfer_file_test.cpp
@@ -0,0 +1,58 @@
+/**
+ * @file llxfer_test.cpp
+ * @author Moss
+ * @date 2007-04-17
+ *
+ * $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#include "linden_common.h"
+
+#include "../llxfer_file.h"
+
+#include "../test/lltut.h"
+
+namespace tut
+{
+ struct llxfer_data
+ {
+ };
+ typedef test_group llxfer_test;
+ typedef llxfer_test::object llxfer_object;
+ tut::llxfer_test llxfer("LLXferFile");
+
+ template<> template<>
+ void llxfer_object::test<1>()
+ {
+ // test that we handle an oversized filename correctly.
+ std::string oversized_filename;
+ U32 i;
+ for (i=0; i