diff --git a/indra/cmake/Boost.cmake b/indra/cmake/Boost.cmake
index 8a3620b47..434dbff44 100644
--- a/indra/cmake/Boost.cmake
+++ b/indra/cmake/Boost.cmake
@@ -7,10 +7,8 @@ set(Boost_FIND_REQUIRED ON)
if (STANDALONE)
include(FindBoost)
- 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_USE_MULTITHREADED ON)
+ find_package(Boost 1.40.0 COMPONENTS date_time filesystem program_options regex system thread wave)
else (STANDALONE)
use_prebuilt_binary(boost)
set(Boost_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include)
@@ -18,36 +16,36 @@ else (STANDALONE)
if (WINDOWS)
set(BOOST_VERSION 1_45)
- # SNOW-788
- # 00-Common.cmake alreay sets MSVC_SUFFIX to be correct for the VS we are using eg VC71, VC80, VC90 etc
- # The precompiled boost libs for VC71 use a different suffix to VS80 and VS90
- # This code should ensure the cmake rules are valid for any VS being used in future as long as the approprate
- # boost libs are avaiable - RC.
-
- if (MSVC71)
- set(BOOST_OPTIM_SUFFIX mt-s)
- set(BOOST_DEBUG_SUFFIX mt-sgd)
- else (MSVC71)
- set(BOOST_OPTIM_SUFFIX mt)
- set(BOOST_DEBUG_SUFFIX mt-gd)
- endif (MSVC71)
-
- set(BOOST_PROGRAM_OPTIONS_LIBRARY
+ # SNOW-788
+ # 00-Common.cmake alreay sets MSVC_SUFFIX to be correct for the VS we are using eg VC71, VC80, VC90 etc
+ # The precompiled boost libs for VC71 use a different suffix to VS80 and VS90
+ # This code should ensure the cmake rules are valid for any VS being used in future as long as the approprate
+ # boost libs are avaiable - RC.
+
+ if (MSVC71)
+ set(BOOST_OPTIM_SUFFIX mt-s)
+ set(BOOST_DEBUG_SUFFIX mt-sgd)
+ else (MSVC71)
+ set(BOOST_OPTIM_SUFFIX mt)
+ set(BOOST_DEBUG_SUFFIX mt-gd)
+ endif (MSVC71)
+
+ set(Boost_PROGRAM_OPTIONS_LIBRARY
optimized libboost_program_options-vc${MSVC_SUFFIX}-${BOOST_OPTIM_SUFFIX}-${BOOST_VERSION}
debug libboost_program_options-vc${MSVC_SUFFIX}-${BOOST_DEBUG_SUFFIX}-${BOOST_VERSION})
- set(BOOST_REGEX_LIBRARY
+ set(Boost_REGEX_LIBRARY
optimized libboost_regex-vc${MSVC_SUFFIX}-${BOOST_OPTIM_SUFFIX}-${BOOST_VERSION}
debug libboost_regex-vc${MSVC_SUFFIX}-${BOOST_DEBUG_SUFFIX}-${BOOST_VERSION})
-
+
elseif (DARWIN)
- set(BOOST_FILESYSTEM_LIBRARY boost_filesystem)
- set(BOOST_PROGRAM_OPTIONS_LIBRARY boost_program_options)
- set(BOOST_REGEX_LIBRARY boost_regex)
- set(BOOST_SYSTEM_LIBRARY boost_system)
+ set(Boost_FILESYSTEM_LIBRARY boost_filesystem)
+ set(Boost_PROGRAM_OPTIONS_LIBRARY boost_program_options)
+ set(Boost_REGEX_LIBRARY boost_regex)
+ set(Boost_SYSTEM_LIBRARY boost_system)
elseif (LINUX)
- 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_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)
endif (WINDOWS)
endif (STANDALONE)
diff --git a/indra/cmake/FMODEX.cmake b/indra/cmake/FMODEX.cmake
index 9a39b1264..0a4bc0647 100644
--- a/indra/cmake/FMODEX.cmake
+++ b/indra/cmake/FMODEX.cmake
@@ -8,7 +8,7 @@ if(INSTALL_PROPRIETARY)
endif(INSTALL_PROPRIETARY)
find_library(FMODEX_LIBRARY
- NAMES fmodex fmodex_vc fmodexL_vc
+ NAMES fmodex fmodexL fmodex_vc fmodexL_vc
PATHS
optimized ${ARCH_PREBUILT_DIRS_RELEASE}
debug ${ARCH_PREBUILT_DIRS_DEBUG}
@@ -26,26 +26,25 @@ if (NOT FMODEX_LIBRARY)
${FMODEX_SDK_DIR}
)
-
endif(FMODEX_SDK_DIR)
if(WINDOWS AND NOT FMODEX_LIBRARY)
- set(FMODEX_PROG_DIR "$ENV{PROGRAMFILES}/FMOD SoundSystem/FMOD Programmers API Windows")
- find_library(FMODEX_LIBRARY
- fmodex_vc fmodexL_vc
+ set(FMODEX_PROG_DIR "$ENV{PROGRAMFILES}/FMOD SoundSystem/FMOD Programmers API Windows")
+ find_library(FMODEX_LIBRARY
+ fmodex_vc fmodexL_vc
PATHS
${FMODEX_PROG_DIR}/api/lib
- ${FMODEX_PROG_DIR}/api
- ${FMODEX_PROG_DIR}
+ ${FMODEX_PROG_DIR}/api
+ ${FMODEX_PROG_DIR}
)
- if(FMODEX_LIBRARY)
- message(STATUS "Found fmodex in ${FMODEX_PROG_DIR}")
- set(FMODEX_SDK_DIR ${FMODEX_PROG_DIR})
- set(FMODEX_SDK_DIR ${FMODEX_PROG_DIR} CACHE PATH "Path to the FMOD Ex SDK." FORCE)
- endif(FMODEX_LIBRARY)
+ if(FMODEX_LIBRARY)
+ message(STATUS "Found fmodex in ${FMODEX_PROG_DIR}")
+ set(FMODEX_SDK_DIR ${FMODEX_PROG_DIR})
+ set(FMODEX_SDK_DIR ${FMODEX_PROG_DIR} CACHE PATH "Path to the FMOD Ex SDK." FORCE)
+ endif(FMODEX_LIBRARY)
endif(WINDOWS AND NOT FMODEX_LIBRARY)
endif (NOT FMODEX_LIBRARY)
-find_path(FMODEX_INCLUDE_DIR fmod.h
+find_path(FMODEX_INCLUDE_DIR fmod.hpp
${LIBS_PREBUILT_DIR}/include/fmodex
${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/fmodex
${FMODEX_SDK_DIR}/api/inc
diff --git a/indra/cmake/FindHunSpell.cmake b/indra/cmake/FindHunSpell.cmake
index d41f9cf76..31576eb56 100644
--- a/indra/cmake/FindHunSpell.cmake
+++ b/indra/cmake/FindHunSpell.cmake
@@ -5,7 +5,7 @@ FIND_PATH(HUNSPELL_INCLUDE_DIR hunspell.hxx
/usr/include
)
-SET(HUNSPELL_NAMES ${HUNSPELL_NAMES} hunspell hunspell-1.2)
+SET(HUNSPELL_NAMES ${HUNSPELL_NAMES} hunspell hunspell-1.2 hunspell-1.3)
FIND_LIBRARY(HUNSPELL_LIBRARY
NAMES ${HUNSPELL_NAMES}
PATHS /usr/lib /usr/local/lib
diff --git a/indra/cmake/LLVFS.cmake b/indra/cmake/LLVFS.cmake
index 0ff227c12..a71976465 100644
--- a/indra/cmake/LLVFS.cmake
+++ b/indra/cmake/LLVFS.cmake
@@ -8,5 +8,5 @@ set(LLVFS_INCLUDE_DIRS
set(LLVFS_LIBRARIES
llvfs
- ${BOOST_REGEX_LIBRARY}
+ ${Boost_REGEX_LIBRARY}
)
diff --git a/indra/llcommon/CMakeLists.txt b/indra/llcommon/CMakeLists.txt
index f7c64c146..5d86a6415 100644
--- a/indra/llcommon/CMakeLists.txt
+++ b/indra/llcommon/CMakeLists.txt
@@ -268,7 +268,7 @@ target_link_libraries(
${EXPAT_LIBRARIES}
${ZLIB_LIBRARIES}
${WINDOWS_LIBRARIES}
- ${BOOST_REGEX_LIBRARY}
+ ${Boost_REGEX_LIBRARY}
${CORESERVICES_LIBRARY}
)
diff --git a/indra/llcommon/llversionviewer.h.in b/indra/llcommon/llversionviewer.h.in
index 82285523d..40933fcd4 100644
--- a/indra/llcommon/llversionviewer.h.in
+++ b/indra/llcommon/llversionviewer.h.in
@@ -35,7 +35,7 @@
const S32 LL_VERSION_MAJOR = 1;
const S32 LL_VERSION_MINOR = 7;
-const S32 LL_VERSION_PATCH = 1;
+const S32 LL_VERSION_PATCH = 2;
const S32 LL_VERSION_BUILD = ${vBUILD};
const char * const LL_CHANNEL = "${VIEWER_CHANNEL}";
diff --git a/indra/llplugin/slplugin/CMakeLists.txt b/indra/llplugin/slplugin/CMakeLists.txt
index ea9afec16..e377434b1 100644
--- a/indra/llplugin/slplugin/CMakeLists.txt
+++ b/indra/llplugin/slplugin/CMakeLists.txt
@@ -52,7 +52,14 @@ add_executable(SLPlugin
set_target_properties(SLPlugin
PROPERTIES
MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/slplugin_info.plist
+)
+
+if (WINDOWS)
+ set_target_properties(SLPlugin
+ PROPERTIES
+ LINK_FLAGS "/OPT:NOREF"
)
+endif()
target_link_libraries(SLPlugin
${LLPLUGIN_LIBRARIES}
diff --git a/indra/llrender/llglslshader.cpp b/indra/llrender/llglslshader.cpp
index 1c90d7658..ce130cf30 100644
--- a/indra/llrender/llglslshader.cpp
+++ b/indra/llrender/llglslshader.cpp
@@ -244,14 +244,16 @@ BOOL LLGLSLShader::createShader(vector * attributes,
BOOL LLGLSLShader::attachObject(std::string object)
{
- if (LLShaderMgr::instance()->mShaderObjects.count(object) > 0)
+ std::multimap::iterator it = LLShaderMgr::instance()->mShaderObjects.begin();
+ for(; it!=LLShaderMgr::instance()->mShaderObjects.end(); it++)
{
- stop_glerror();
- glAttachObjectARB(mProgramObject, LLShaderMgr::instance()->mShaderObjects[object]);
- stop_glerror();
- return TRUE;
+ if((*it).first == object)
+ {
+ glAttachObjectARB(mProgramObject, (*it).second.mHandle);
+ stop_glerror();
+ return TRUE;
+ }
}
- else
{
LL_WARNS("ShaderLoading") << "Attempting to attach shader object that hasn't been compiled: " << object << LL_ENDL;
return FALSE;
@@ -262,6 +264,20 @@ void LLGLSLShader::attachObject(GLhandleARB object)
{
if (object != 0)
{
+ std::multimap::iterator it = LLShaderMgr::instance()->mShaderObjects.begin();
+ for(; it!=LLShaderMgr::instance()->mShaderObjects.end(); it++)
+ {
+ if((*it).second.mHandle == object)
+ {
+ LL_DEBUGS("ShaderLoading") << "Attached: " << (*it).first << llendl;
+ break;
+ }
+ }
+ if(it == LLShaderMgr::instance()->mShaderObjects.end())
+ {
+ LL_WARNS("ShaderLoading") << "Attached unknown shader!" << llendl;
+ }
+
stop_glerror();
glAttachObjectARB(mProgramObject, object);
stop_glerror();
diff --git a/indra/llrender/llshadermgr.cpp b/indra/llrender/llshadermgr.cpp
index 2531df4b6..234d2e141 100644
--- a/indra/llrender/llshadermgr.cpp
+++ b/indra/llrender/llshadermgr.cpp
@@ -525,6 +525,14 @@ void LLShaderMgr::dumpObjectLog(GLhandleARB ret, BOOL warns)
GLhandleARB LLShaderMgr::loadShaderFile(const std::string& filename, S32 & shader_level, GLenum type, S32 texture_index_channels)
{
+ std::pair::iterator, std::multimap::iterator> range;
+ range = mShaderObjects.equal_range(filename);
+ for (std::multimap::iterator it = range.first; it != range.second;++it)
+ {
+ if((*it).second.mLevel == shader_level && (*it).second.mType == type)
+ return (*it).second.mHandle;
+ }
+
GLenum error = GL_NO_ERROR;
if (gDebugGL)
{
@@ -888,7 +896,7 @@ GLhandleARB LLShaderMgr::loadShaderFile(const std::string& filename, S32 & shade
if (ret)
{
// Add shader file to map
- mShaderObjects[filename] = ret;
+ mShaderObjects.insert(make_pair(filename,CachedObjectInfo(ret,try_gpu_class,type)));
shader_level = try_gpu_class;
}
else
diff --git a/indra/llrender/llshadermgr.h b/indra/llrender/llshadermgr.h
index b06d61b3e..fc9242f7c 100644
--- a/indra/llrender/llshadermgr.h
+++ b/indra/llrender/llshadermgr.h
@@ -185,8 +185,16 @@ public:
virtual void updateShaderUniforms(LLGLSLShader * shader) = 0; // Pure Virtual
public:
+ struct CachedObjectInfo
+ {
+ CachedObjectInfo(GLhandleARB handle, U32 level, GLenum type) :
+ mHandle(handle), mLevel(level), mType(type) {}
+ GLhandleARB mHandle; //Actual handle of the opengl shader object.
+ U32 mLevel; //Level /might/ not be needed, but it's stored to ensure there's no change in behavior.
+ GLenum mType; //GL_VERTEX_SHADER_ARB or GL_FRAGMENT_SHADER_ARB. Tracked because some utility shaders can be loaded as both types (carefully).
+ };
// Map of shader names to compiled
- std::map mShaderObjects;
+ std::multimap mShaderObjects; //Singu Note: Packing more info here. Doing such provides capability to skip unneeded duplicate loading..
//global (reserved slot) shader parameters
std::vector mReservedAttribs;
diff --git a/indra/llvfs/CMakeLists.txt b/indra/llvfs/CMakeLists.txt
index e5889805b..8dabf5b91 100644
--- a/indra/llvfs/CMakeLists.txt
+++ b/indra/llvfs/CMakeLists.txt
@@ -63,8 +63,8 @@ add_library (llvfs ${llvfs_SOURCE_FILES})
add_dependencies(llvfs prepare)
target_link_libraries(llvfs
- ${BOOST_FILESYSTEM_LIBRARY}
- ${BOOST_SYSTEM_LIBRARY}
+ ${Boost_FILESYSTEM_LIBRARY}
+ ${Boost_SYSTEM_LIBRARY}
)
if (DARWIN)
diff --git a/indra/lscript/lscript_compile/indra.l b/indra/lscript/lscript_compile/indra.l
index 60245757a..d7d591cc5 100644
--- a/indra/lscript/lscript_compile/indra.l
+++ b/indra/lscript/lscript_compile/indra.l
@@ -56,12 +56,6 @@ void parse_string();
#define ECHO do { } while (0)
-#if defined(__cplusplus)
-extern "C" { int yylex( void ); }
-extern "C" { int yyparse( void ); }
-extern "C" { int yyerror(const char *fmt, ...); }
-#endif
-
%}
%%
diff --git a/indra/lscript/lscript_compile/indra.y b/indra/lscript/lscript_compile/indra.y
index e4b10ffdd..febf5f675 100644
--- a/indra/lscript/lscript_compile/indra.y
+++ b/indra/lscript/lscript_compile/indra.y
@@ -2,10 +2,6 @@
#include "linden_common.h"
#include "lscript_tree.h"
- #ifdef __cplusplus
- extern "C" {
- #endif
-
int yylex(void);
int yyparse( void );
int yyerror(const char *fmt, ...);
@@ -19,10 +15,6 @@
#pragma warning (disable : 4702) // warning C4702: unreachable code
#pragma warning( disable : 4065 ) // warning: switch statement contains 'default' but no 'case' labels
#endif
-
- #ifdef __cplusplus
- }
- #endif
%}
%union
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index c70f5fabd..b380af7d2 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -8,10 +8,10 @@ include(DBusGlib)
include(DirectX)
include(ELFIO)
if(FMODEX)
- include(FMODEX)
- set(FMOD OFF)
+ include(FMODEX)
+ set(FMOD OFF)
else(FMODEX)
- include(FMOD)
+ include(FMOD)
endif(FMODEX)
include(OPENAL)
include(FindOpenGL)
@@ -1562,10 +1562,10 @@ target_link_libraries(${VIEWER_BINARY_NAME}
${LLCOMMON_LIBRARIES}
${NDOF_LIBRARY}
${viewer_LIBRARIES}
- ${BOOST_FILESYSTEM_LIBRARY}
- ${BOOST_PROGRAM_OPTIONS_LIBRARY}
- ${BOOST_REGEX_LIBRARY}
- ${BOOST_SYSTEM_LIBRARY}
+ ${Boost_FILESYSTEM_LIBRARY}
+ ${Boost_PROGRAM_OPTIONS_LIBRARY}
+ ${Boost_REGEX_LIBRARY}
+ ${Boost_SYSTEM_LIBRARY}
${DBUSGLIB_LIBRARIES}
${OPENGL_LIBRARIES}
${FMODWRAPPER_LIBRARY} # must come after LLAudio
diff --git a/indra/newview/NACLantispam.cpp b/indra/newview/NACLantispam.cpp
index cabd47ed0..a46378268 100644
--- a/indra/newview/NACLantispam.cpp
+++ b/indra/newview/NACLantispam.cpp
@@ -19,7 +19,9 @@
#include "llnotificationsutil.h"
#include "llviewerobjectlist.h"
#include "llagent.h"
+#include "lltrans.h"
#include
+#include
U32 NACLAntiSpamRegistry::globalAmount;
U32 NACLAntiSpamRegistry::globalTime;
@@ -28,6 +30,7 @@ NACLAntiSpamQueue* NACLAntiSpamRegistry::queues[NACLAntiSpamRegistry::QUEUE_MAX]
std::tr1::unordered_map NACLAntiSpamRegistry::globalEntries;
std::tr1::unordered_map::iterator NACLAntiSpamRegistry::it2;
+// The following sounds will be ignored for purposes of spam protection. They have been gathered from wiki documentation of frequent official sounds.
const std::string COLLISION_SOUNDS[] ={"dce5fdd4-afe4-4ea1-822f-dd52cac46b08","51011582-fbca-4580-ae9e-1a5593f094ec","68d62208-e257-4d0c-bbe2-20c9ea9760bb","75872e8c-bc39-451b-9b0b-042d7ba36cba","6a45ba0b-5775-4ea8-8513-26008a17f873","992a6d1b-8c77-40e0-9495-4098ce539694","2de4da5a-faf8-46be-bac6-c4d74f1e5767","6e3fb0f7-6d9c-42ca-b86b-1122ff562d7d","14209133-4961-4acc-9649-53fc38ee1667","bc4a4348-cfcc-4e5e-908e-8a52a8915fe6","9e5c1297-6eed-40c0-825a-d9bcd86e3193","e534761c-1894-4b61-b20c-658a6fb68157","8761f73f-6cf9-4186-8aaa-0948ed002db1","874a26fd-142f-4173-8c5b-890cd846c74d","0e24a717-b97e-4b77-9c94-b59a5a88b2da","75cf3ade-9a5b-4c4d-bb35-f9799bda7fb2","153c8bf7-fb89-4d89-b263-47e58b1b4774","55c3e0ce-275a-46fa-82ff-e0465f5e8703","24babf58-7156-4841-9a3f-761bdbb8e237","aca261d8-e145-4610-9e20-9eff990f2c12","0642fba6-5dcf-4d62-8e7b-94dbb529d117","25a863e8-dc42-4e8a-a357-e76422ace9b5","9538f37c-456e-4047-81be-6435045608d4","8c0f84c3-9afd-4396-b5f5-9bca2c911c20","be582e5d-b123-41a2-a150-454c39e961c8","c70141d4-ba06-41ea-bcbc-35ea81cb8335","7d1826f4-24c4-4aac-8c2e-eff45df37783","063c97d3-033a-4e9b-98d8-05c8074922cb","00000000-0000-0000-0000-000000000120"};
const int COLLISION_SOUNDS_SIZE=29;
@@ -45,11 +48,11 @@ void NACLAntiSpamQueueEntry::clearEntry()
entryAmount=0;
blocked=false;
}
-U32 NACLAntiSpamQueueEntry::getEntryAmount()
+U32 NACLAntiSpamQueueEntry::getEntryAmount() const
{
return entryAmount;
}
-U32 NACLAntiSpamQueueEntry::getEntryTime()
+U32 NACLAntiSpamQueueEntry::getEntryTime() const
{
return entryTime;
}
@@ -65,7 +68,7 @@ void NACLAntiSpamQueueEntry::setBlocked()
{
blocked=true;
}
-bool NACLAntiSpamQueueEntry::getBlocked()
+bool NACLAntiSpamQueueEntry::getBlocked() const
{
return blocked;
}
@@ -85,6 +88,14 @@ void NACLAntiSpamQueue::setTime(U32 time)
{
queueTime=time;
}
+U32 NACLAntiSpamQueue::getAmount() const
+{
+ return queueAmount;
+}
+U32 NACLAntiSpamQueue::getTime() const
+{
+ return queueTime;
+}
void NACLAntiSpamQueue::clearEntries()
{
for(it = entries.begin(); it != entries.end(); it++)
@@ -110,6 +121,7 @@ void NACLAntiSpamQueue::blockEntry(LLUUID& source)
entries[source.asString()]->setBlocked();
}
int NACLAntiSpamQueue::checkEntry(LLUUID& name, U32 multiplier)
+// Returns 0 if unblocked/disabled, 1 if check results in a new block, 2 if by an existing block
{
static LLCachedControl enabled(gSavedSettings,"AntiSpamEnabled",false);
if(!enabled) return 0;
@@ -141,6 +153,7 @@ int NACLAntiSpamQueue::checkEntry(LLUUID& name, U32 multiplier)
}
else
{
+ //lldebugs << "[antispam] New queue entry:" << name.asString() << llendl;
entries[name.asString()]=new NACLAntiSpamQueueEntry();
entries[name.asString()]->updateEntryAmount();
entries[name.asString()]->updateEntryTime();
@@ -154,8 +167,8 @@ static const char* QUEUE_NAME[NACLAntiSpamRegistry::QUEUE_MAX] = {
"Chat",
"Inventory",
"Instant Message",
-"Calling Card",
-"Sound",
+"calling card",
+"sound",
"Sound Preload",
"Script Dialog",
"Teleport"};
@@ -171,12 +184,14 @@ NACLAntiSpamRegistry::NACLAntiSpamRegistry(U32 time, U32 amount)
queues[queue] = new NACLAntiSpamQueue(time,amount);
}
}
+//static
const char* NACLAntiSpamRegistry::getQueueName(U32 queue_id)
{
if(queue_id >= QUEUE_MAX)
return "Unknown";
return QUEUE_NAME[queue_id];
}
+//static
void NACLAntiSpamRegistry::registerQueues(U32 time, U32 amount)
{
globalTime=time;
@@ -188,16 +203,16 @@ void NACLAntiSpamRegistry::registerQueues(U32 time, U32 amount)
queues[queue] = new NACLAntiSpamQueue(time,amount);
}
}
-void NACLAntiSpamRegistry::registerQueue(U32 name, U32 time, U32 amount)
+//static
+/*void NACLAntiSpamRegistry::registerQueue(U32 name, U32 time, U32 amount)
{
- /*
it=queues.find(name);
if(it == queues.end())
{
queues[name]=new NACLAntiSpamQueue(time,amount);
}
- */
-}
+}*/
+//static
void NACLAntiSpamRegistry::setRegisteredQueueTime(U32 name, U32 time)
{
if(name >= QUEUE_MAX || queues[name] == 0)
@@ -208,6 +223,7 @@ void NACLAntiSpamRegistry::setRegisteredQueueTime(U32 name, U32 time)
queues[name]->setTime(time);
}
+//static
void NACLAntiSpamRegistry::setRegisteredQueueAmount(U32 name, U32 amount)
{
if(name >= QUEUE_MAX || queues[name] == 0)
@@ -218,23 +234,28 @@ void NACLAntiSpamRegistry::setRegisteredQueueAmount(U32 name, U32 amount)
queues[name]->setAmount(amount);
}
+//static
void NACLAntiSpamRegistry::setAllQueueTimes(U32 time)
{
globalTime=time;
for(int queue = 0; queue < QUEUE_MAX; ++queue)
- queues[queue]->setTime(time);
+ if( queues[queue] )
+ queues[queue]->setTime(time);
}
+//static
void NACLAntiSpamRegistry::setAllQueueAmounts(U32 amount)
{
globalAmount=amount;
for(int queue = 0; queue < QUEUE_MAX; ++queue)
{
+ if(!queues[queue]) continue;
if(queue == QUEUE_SOUND || queue == QUEUE_SOUND_PRELOAD)
queues[queue]->setAmount(amount*5);
else
queues[queue]->setAmount(amount);
}
}
+//static
void NACLAntiSpamRegistry::clearRegisteredQueue(U32 name)
{
if(name >= QUEUE_MAX || queues[name] == 0)
@@ -245,6 +266,7 @@ void NACLAntiSpamRegistry::clearRegisteredQueue(U32 name)
queues[name]->clearEntries();
}
+//static
void NACLAntiSpamRegistry::purgeRegisteredQueue(U32 name)
{
if(name >= QUEUE_MAX || queues[name] == 0)
@@ -255,6 +277,7 @@ void NACLAntiSpamRegistry::purgeRegisteredQueue(U32 name)
queues[name]->purgeEntries();
}
+//static
void NACLAntiSpamRegistry::blockOnQueue(U32 name, LLUUID& source)
{
if(bGlobalQueue)
@@ -271,6 +294,7 @@ void NACLAntiSpamRegistry::blockOnQueue(U32 name, LLUUID& source)
queues[name]->blockEntry(source);
}
}
+//static
void NACLAntiSpamRegistry::blockGlobalEntry(LLUUID& source)
{
it2=globalEntries.find(source.asString());
@@ -280,13 +304,13 @@ void NACLAntiSpamRegistry::blockGlobalEntry(LLUUID& source)
}
globalEntries[source.asString()]->setBlocked();
}
+//static
bool NACLAntiSpamRegistry::checkQueue(U32 name, LLUUID& source, U32 multiplier)
+//returns true if blocked
{
- if(source.isNull()) return false;
- if(gAgent.getID() == source) return false;
+ if(source.isNull() || gAgent.getID() == source) return false;
LLViewerObject *obj=gObjectList.findObject(source);
- if(obj)
- if(obj->permYouOwner()) return false;
+ if(obj && obj->permYouOwner()) return false;
int result;
if(bGlobalQueue)
@@ -302,40 +326,45 @@ bool NACLAntiSpamRegistry::checkQueue(U32 name, LLUUID& source, U32 multiplier)
}
result=queues[name]->checkEntry(source,multiplier);
}
- if(result==0)
- {
+ if(result == 0) //Safe
return false;
- }
- else if(result==2)
+ else if(result == 2) //Previously blocked
{
return true;
}
- else
+ else //Just blocked!
{
if(gSavedSettings.getBOOL("AntiSpamNotify"))
{
- LLSD args;
- args["MESSAGE"] = std::string(getQueueName(name))+": Blocked object "+source.asString();
- LLNotificationsUtil::add("SystemMessageTip", args);
+ LLSD args;
+ args["SOURCE"] = source.asString().c_str();
+ args["TYPE"] = LLTrans::getString(getQueueName(name));
+ args["AMOUNT"] = boost::lexical_cast(multiplier * queues[name]->getAmount());
+ args["TIME"] = boost::lexical_cast(queues[name]->getTime());
+ LLNotificationsUtil::add("AntiSpamBlock", args);
}
return true;
}
}
// Global queue stoof
+//static
void NACLAntiSpamRegistry::setGlobalQueue(bool value)
{
NACLAntiSpamRegistry::purgeAllQueues();
bGlobalQueue=value;
}
+//static
void NACLAntiSpamRegistry::setGlobalAmount(U32 amount)
{
globalAmount=amount;
}
+//static
void NACLAntiSpamRegistry::setGlobalTime(U32 time)
{
globalTime=time;
}
+//static
void NACLAntiSpamRegistry::clearAllQueues()
{
if(bGlobalQueue)
@@ -343,9 +372,10 @@ void NACLAntiSpamRegistry::clearAllQueues()
else
for(int queue = 0; queue < QUEUE_MAX; ++queue)
{
- queues[queue]->clearEntries();
+ if(queues[queue]) queues[queue]->clearEntries();
}
}
+//static
void NACLAntiSpamRegistry::purgeAllQueues()
{
if(bGlobalQueue)
@@ -353,9 +383,11 @@ void NACLAntiSpamRegistry::purgeAllQueues()
else
for(int queue = 0; queue < QUEUE_MAX; ++queue)
{
- queues[queue]->purgeEntries();
+ if(queues[queue]) queues[queue]->purgeEntries();
}
+ llinfos << "AntiSpam Queues Purged" << llendl;
}
+//static
int NACLAntiSpamRegistry::checkGlobalEntry(LLUUID& name, U32 multiplier)
{
static LLCachedControl enabled(gSavedSettings,"AntiSpamEnabled",false);
@@ -391,6 +423,7 @@ int NACLAntiSpamRegistry::checkGlobalEntry(LLUUID& name, U32 multiplier)
return 0;
}
}
+//static
void NACLAntiSpamRegistry::clearGlobalEntries()
{
for(it2 = globalEntries.begin(); it2 != globalEntries.end(); it2++)
@@ -398,6 +431,7 @@ void NACLAntiSpamRegistry::clearGlobalEntries()
it2->second->clearEntry();
}
}
+//static
void NACLAntiSpamRegistry::purgeGlobalEntries()
{
for(it2 = globalEntries.begin(); it2 != globalEntries.end(); it2++)
@@ -407,16 +441,21 @@ void NACLAntiSpamRegistry::purgeGlobalEntries()
}
globalEntries.clear();
}
+
+//Handlers
+//static
bool NACLAntiSpamRegistry::handleNaclAntiSpamGlobalQueueChanged(const LLSD& newvalue)
{
setGlobalQueue(newvalue.asBoolean());
return true;
}
+//static
bool NACLAntiSpamRegistry::handleNaclAntiSpamTimeChanged(const LLSD& newvalue)
{
setAllQueueTimes(newvalue.asInteger());
return true;
}
+//static
bool NACLAntiSpamRegistry::handleNaclAntiSpamAmountChanged(const LLSD& newvalue)
{
setAllQueueAmounts(newvalue.asInteger());
diff --git a/indra/newview/NACLantispam.h b/indra/newview/NACLantispam.h
index 6da32f5c1..e0476e267 100644
--- a/indra/newview/NACLantispam.h
+++ b/indra/newview/NACLantispam.h
@@ -25,11 +25,11 @@ class NACLAntiSpamQueueEntry
protected:
NACLAntiSpamQueueEntry();
void clearEntry();
- U32 getEntryAmount();
- U32 getEntryTime();
+ U32 getEntryAmount() const;
+ U32 getEntryTime() const;
void updateEntryAmount();
void updateEntryTime();
- bool getBlocked();
+ bool getBlocked() const;
void setBlocked();
private:
U32 entryAmount;
@@ -39,6 +39,9 @@ private:
class NACLAntiSpamQueue
{
friend class NACLAntiSpamRegistry;
+public:
+ U32 getAmount() const;
+ U32 getTime() const;
protected:
NACLAntiSpamQueue(U32 time, U32 amount);
void setAmount(U32 amount);
@@ -58,7 +61,7 @@ class NACLAntiSpamRegistry
public:
NACLAntiSpamRegistry(U32 time=2, U32 amount=10);
static void registerQueues(U32 time=2, U32 amount=10);
- static void registerQueue(U32 name, U32 time, U32 amount);
+// static void registerQueue(U32 name, U32 time, U32 amount);
static void setRegisteredQueueTime(U32 name, U32 time);
static void setRegisteredQueueAmount(U32 name,U32 amount);
static void setAllQueueTimes(U32 amount);
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index bf264794f..c0ec36c53 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -9,6 +9,17 @@
settings_rlv.xml
+ SGAllowRiggedMeshSelection
+
SGShiftCrouchToggle
-
SGServerVersionChangedNotification
llParticleSystem(list rules)
-Creates a particle system based on rules. An empty list removes the particle system.
+Creates a particle system based on rules. An empty list removes the particle system.
List format is [ rule1, data1, rule2, data2 . . . rulen, datan ]
@@ -1241,7 +1297,7 @@ Removes the enabled bits in 'flags'
llSitTarget(vector offset, rotation rot)
-Sets the sit location for the prim. If offset == <0,0,0> then the sit target is removed.
+Sets the sit location for the prim. If offset == <0,0,0> then the sit target is removed.
key llAvatarOnSitTarget()
@@ -1720,7 +1776,8 @@ Returns the media params for a particular face on an object, given the desired l
integer llClearPrimMedia(integer face)
-Clears (deletes) the media and all params from the given face.
+Clears (deletes) the media and all params from the given face.
+
llSetLinkPrimitiveParamsFast(integer linknumber, list rules)
Set primitive parameters for linknumber based on rules with no built-in script sleep.
@@ -2811,10 +2868,14 @@ Where tag = tag string to match. Removes bot's matching the tag.
+
+ Yes
+ No
+
-
-
-
+
+
+
@@ -2845,6 +2906,7 @@ Where tag = tag string to match. Removes bot's matching the tag.
Buy
+
Stone
Metal
@@ -2877,7 +2939,44 @@ Where tag = tag string to match. Removes bot's matching the tag.
Save complete.
Script (object out of range)
+
+ Object [OBJECT] owned by [OWNER]
+
+
+
(Unknown)
+
+
+
+
+
+
+ parent estate
+ mainland
+ teen
+
+
+
+ error
+
+ all estates owned by [OWNER]
+
+ all estates that you own
+
+ all estates that you manage for [OWNER]
+
+ Allowed Residents: ([ALLOWEDAGENTS], max [MAXACCESS])
+ Allowed groups: ([ALLOWEDGROUPS], max [MAXACCESS])
+
+
+ New Script
+
+
+ There is no Covenant provided for this Estate.
+ There is no Covenant provided for this Estate. The land on this estate is being sold by the Estate owner, not Linden Lab. Please contact the Estate Owner for sales details.
+
+
Local
Local Settings
@@ -2893,6 +2992,18 @@ Where tag = tag string to match. Removes bot's matching the tag.
gave you
You decline [DESC] from [NAME].
+
+ Total
+ bought
+ paid you
+ paid into
+ bought pass to
+ paid fee for event
+ paid prize for event
+ Balance
+ Credits
+ Debits
+
Acquired Items
Cancel
@@ -3575,12 +3686,16 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
Wild
Wrinkles
+
+ [APP_NAME]: Items coming in too fast from [FROM_NAME], automatic preview disabled for [TIME] seconds.
+ [APP_NAME]: Items coming in too fast, automatic preview disabled for [TIME] seconds.
+
has begun an IM session with you.
Autoresponse sent to
was sent auto-response item
(Unnamed)
- (Saved [LONG_TIMESTAMP])
+
You are bestowed with powers beyond mortal comprehension.
Use your newfound abilities wisely.
Unlocked:
@@ -3589,6 +3704,110 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
Destroy objects - Permanently deletes an object immediately, when you don't feel like waiting for the server to respond.
Explode objects - Turns an object physical, temporary, and delinks it.
+
+
+
+ Joining voice call...
+
+
+ Connected, click Leave Call to hang up
+
+
+ Left voice call
+
+
+ Connecting...
+
+
+ Inventory item offered
+
+
+
+
+ You are the only user in this session.
+
+
+ [NAME] is offline.
+
+
+ Click the [BUTTON NAME] button to accept/connect to this voice chat.
+
+
+ You have muted this Resident. Sending a message will automatically unmute them.
+
+
+
+ Error making request, please try again later.
+
+
+ Error making request, please try again later.
+
+
+ You do not have sufficient permissions.
+
+
+ The session no longer exists
+
+
+ You do not have that ability.
+
+
+ You do not have that ability.
+
+
+ You are not a session moderator.
+
+
+
+ A group moderator disabled your text chat.
+
+
+ A group moderator disabled your text chat.
+
+
+ Unable to add users to chat session with [RECIPIENT].
+
+
+
+ Unable to send your message to the chat session with [RECIPIENT].
+
+
+ Unable to send your message to the chat session with [RECIPIENT].
+
+
+ Error while moderating.
+
+
+
+ You have been removed from the group.
+
+
+ You have been removed from the group.
+
+
+ You no longer have the ability to be in the chat session.
+
+
+ Home position set.
+
+
+ This costs [CURRENCY]
+
+ Giving [CURRENCY]
+
Everyone
Officers
Owners
@@ -3598,13 +3817,13 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
none/none
Chat
-
- Select an editor using the ExternalEditor setting.
- Cannot find the external editor you specified.
+
+ Select an editor using the ExternalEditor setting.
+ Cannot find the external editor you specified.
Try enclosing path to the editor with double quotes.
(e.g. "/path to my/editor" "%s")
- Error parsing the external editor command.
- External editor failed to run.
+ Error parsing the external editor command.
+ External editor failed to run.
http://wiki.secondlife.com/wiki/Pathfinding_Tools_in_the_Second_Life_Viewer
@@ -3616,4 +3835,7 @@ Try enclosing path to the editor with double quotes.
Left
Right
+
+ Teleport completed from
+