diff --git a/autobuild.xml b/autobuild.xml
index 5f781b7dbf..1feb6a8ee3 100644
--- a/autobuild.xml
+++ b/autobuild.xml
@@ -222,9 +222,9 @@
archive
name
linux
@@ -234,9 +234,9 @@
archive
name
linux64
@@ -288,9 +288,9 @@
archive
name
linux
@@ -300,9 +300,9 @@
archive
name
linux64
@@ -378,9 +378,9 @@
archive
name
linux
@@ -390,9 +390,9 @@
archive
name
linux64
@@ -496,9 +496,9 @@
archive
name
linux
@@ -508,9 +508,9 @@
archive
name
linux64
@@ -586,9 +586,9 @@
archive
name
linux
@@ -598,9 +598,9 @@
archive
name
linux64
@@ -684,9 +684,9 @@
archive
name
linux
@@ -696,9 +696,9 @@
archive
name
linux64
@@ -768,9 +768,9 @@
archive
name
linux
@@ -780,9 +780,9 @@
archive
name
linux64
@@ -882,9 +882,9 @@
archive
name
linux
@@ -894,9 +894,9 @@
archive
name
linux64
@@ -962,11 +962,11 @@
archive
name
linux
@@ -976,11 +976,11 @@
archive
name
linux64
@@ -1088,9 +1088,9 @@
archive
name
linux
@@ -1100,9 +1100,9 @@
archive
name
linux64
@@ -1154,9 +1154,9 @@
archive
name
linux
@@ -1166,9 +1166,9 @@
archive
name
linux64
@@ -1220,9 +1220,9 @@
archive
name
linux
@@ -1232,9 +1232,9 @@
archive
name
linux64
@@ -1342,11 +1342,11 @@
archive
name
linux
@@ -1356,9 +1356,9 @@
archive
name
linux64
@@ -1436,9 +1436,9 @@
archive
name
linux
@@ -1448,9 +1448,9 @@
archive
name
linux64
@@ -1526,9 +1526,9 @@
archive
name
linux
@@ -1538,9 +1538,9 @@
archive
name
linux64
@@ -1590,9 +1590,9 @@
archive
name
linux
@@ -1602,9 +1602,9 @@
archive
name
linux64
@@ -1630,9 +1630,9 @@
archive
name
linux
@@ -1642,16 +1642,16 @@
archive
name
linux64
version
- 0.1
+ 2.1
havok-source
version
- 0.3
+ 0.3.180841957
openal
@@ -2936,11 +2936,11 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors
archive
hash
- 24b91eda3831a51c7774644016c4cb09
+ cc0f030e6f4a78e3afd5269165c056b4
hash_algorithm
md5
url
- http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-openal/rev/314223/arch/Linux/installer/openal-1.12.854-1.1.0.314223-linux-314223.tar.bz2
+ http://downloads.phoenixviewer.com/openal-1.12.854-1.1.0.180871246-linux-180871246.tar.bz2
name
linux
@@ -2950,9 +2950,9 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors
archive
hash
- 9ccf2c9046edd73854fc084919f507b2
+ 4f36ae378593240701fd4453bd6074c8
url
- http://downloads.phoenixviewer.com/openal-1.12.854-1.1.0.201505150222-r25-linux-x64-201505150222-r25.tar.bz2
+ http://downloads.phoenixviewer.com/openal-1.12.854-1.1.0.180841552-linux64-180841552.tar.bz2
name
linux64
@@ -3030,9 +3030,9 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors
archive
hash
- 675c283030879d3d9c49082bfa2192eb
+ cc1aca5688b00878ae94a0ad71cb4f35
url
- http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/openjpeg_3p-update-openjpeg/rev/297018/arch/Linux/installer/openjpeg-1.4.297018-linux-297018.tar.bz2
+ http://downloads.phoenixviewer.com/openjpeg-1.5.1.180871249-linux-180871249.tar.bz2
name
linux
@@ -3042,9 +3042,9 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors
archive
hash
- 8b36861396af4a31668f673aebd4b1d8
+ 6098e555296583336b02f1a78b41b93a
url
- http://downloads.phoenixviewer.com/jpeglib-8c.201505150200-r27-linux-x64-201505150200-r27.tar.bz2
+ http://downloads.phoenixviewer.com/openjpeg-1.5.1.180841553-linux64-180841553.tar.bz2
name
linux64
@@ -3120,9 +3120,9 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors
archive
hash
- f46a601d60b7dbcfde32afc0cb64453e
+ 343f6ace63617546704c4aad9b432312
url
- http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-openssl/rev/314227/arch/Linux/installer/openssl-1.0.1h.314227-linux-314227.tar.bz2
+ http://downloads.phoenixviewer.com/openssl-1.0.2l.180871731-linux-180871731.tar.bz2
name
linux
@@ -3132,9 +3132,9 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors
archive
hash
- d50ccfbf0c1d249392919e2c46ad8d5c
+ 7920fce93d9addf63a420d86f91c5749
url
- http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/8339/33495/openssl-1.0.2l.508328-linux64-508328.tar.bz2
+ http://downloads.phoenixviewer.com/openssl-1.0.2l.180841936-linux64-180841936.tar.bz2
name
linux64
@@ -3210,9 +3210,9 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors
archive
hash
- 24a119b18e63017ad932ad54df8161bc
+ cf1c53b27e5889c7c5963ed06ab23cb2
url
- http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-pcre/rev/314136/arch/Linux/installer/pcre-8.35.314136-linux-314136.tar.bz2
+ http://downloads.phoenixviewer.com/pcre-8.35.180871234-linux-180871234.tar.bz2
name
linux
@@ -3222,9 +3222,9 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors
archive
hash
- 0f058ca2176e7d02d51e54c66a96f336
+ 348a6111dede9a4ddfc51049c2ff186f
url
- http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/908/2010/pcre-8.35.500898-linux64-500898.tar.bz2
+ http://downloads.phoenixviewer.com/pcre-8.35.180841548-linux64-180841548.tar.bz2
name
linux64
@@ -3288,9 +3288,9 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors
archive
hash
- a92f2235991871c3d601a73cfef9b2af
+ 9fe44ba82ee05363fdfa4c1b9f2ec360
url
- http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/4105/11530/requests-1.0-linux64-504094.tar.bz2
+ http://downloads.phoenixviewer.com/requests-2.18.1-linux64-180841555.tar.bz2
name
linux64
@@ -3466,9 +3466,9 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors
archive
hash
- dddfc8dea540801f93ba0382cb1e3685
+ 6573a190dbdef9b23235beb9b1219bef
url
- http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/uriparser_3p-update-uriparser/rev/299435/arch/Linux/installer/uriparser-0.8.0.1-linux-299435.tar.bz2
+ http://downloads.phoenixviewer.com/uriparser-0.8.0.1-linux-180871244.tar.bz2
name
linux
@@ -3478,9 +3478,9 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors
archive
hash
- e67a27e13e546cbb13fad2665a1896b7
+ df570f2b9c0087438604a8ba4dc37a85
url
- http://downloads.phoenixviewer.com/uriparser-0.8.0.1-linux-x64-201502251606-r15.tar.bz2
+ http://downloads.phoenixviewer.com/uriparser-0.8.0.1-linux64-180841550.tar.bz2
name
linux64
@@ -3574,13 +3574,25 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors
archive
hash
- 8c7f32f85850248809ae811ba8e47d81
+ b7167025f54c044abee21b48476ad4f2
url
- http://s3-proxy.lindenlab.com/private-builds-secondlife-com/ct2/3428/8686/viewer_manager-1.0-linux-503417.tar.bz2
+ http://downloads.phoenixviewer.com/viewer_manager-1.0.180871935-linux-180871935.tar.bz2
name
linux
+ linux64
+
+ archive
+
+ hash
+ 129b80dd47b53bfa02fc21ab1eb1901c
+ url
+ http://downloads.phoenixviewer.com/viewer_manager-1.0.180861311-linux64-180861311.tar.bz2
+
+ name
+ linux64
+
windows
archive
@@ -3720,9 +3732,9 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors
archive
hash
- b63f828e798287d475991134cdcfbca3
+ 0f318372198fb34b3a59b4aa03c40ac7
url
- http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-xmlrpc-epi/rev/314240/arch/Linux/installer/xmlrpc_epi-0.54.1.314240-linux-314240.tar.bz2
+ http://downloads.phoenixviewer.com/xmlrpc_epi-0.54.1.180871731-linux-180871731.tar.bz2
name
linux
@@ -3732,9 +3744,9 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors
archive
hash
- e2e5b6aba70c8fbc09ef7f12e8fb3937
+ f810193590cae9b35a1c77b6c72bfb01
url
- http://downloads.phoenixviewer.com/xmlrpc_epi-0.54.1.201505150223-r63-linux-x64-201505150223-r63.tar.bz2
+ http://downloads.phoenixviewer.com/xmlrpc_epi-0.54.1.180841935-linux64-180841935.tar.bz2
name
linux64
@@ -3810,11 +3822,11 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors
archive
hash
- 98a8c775c581ca80bb559e8b4e8eaae7
+ ee84398d540324533332a048f77bf08a
hash_algorithm
md5
url
- http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-zlib/rev/314131/arch/Linux/installer/zlib-1.2.8.314131-linux-314131.tar.bz2
+ http://downloads.phoenixviewer.com/zlib-1.2.8.180871259-linux-180871259.tar.bz2
name
linux
@@ -3824,9 +3836,9 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors
archive
hash
- c165dcf9bd8a27c0382137c33e1a3854
+ 15a645809cb2f14074f22e7848bb42cf
url
- http://downloads.phoenixviewer.com/zlib-1.2.8.201505150226-r125-linux-x64-201505150226-r125.tar.bz2
+ http://downloads.phoenixviewer.com/zlib-1.2.8.180841547-linux64-180841547.tar.bz2
name
linux64
@@ -3981,7 +3993,6 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors
name
Doxygen
-
ReleaseFS
configure
@@ -4088,7 +4099,6 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors
name
RelWithDebInfoFS_open
-
name
common
@@ -4147,10 +4157,6 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors
Xcode
-
name
RelWithDebInfo
@@ -4233,7 +4239,6 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors
name
ReleaseOS
-
RelWithDebInfoFS
build
@@ -4318,7 +4323,6 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors
name
ReleaseFS
-
name
darwin64
@@ -4375,10 +4379,6 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors
Unix Makefiles
-
name
RelWithDebInfo
@@ -4603,10 +4603,6 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors
${AUTOBUILD_WIN_CMAKE_GEN|NOTWIN}
-
name
RelWithDebInfo
@@ -4719,7 +4715,6 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors
name
ReleaseOS
-
RelWithDebInfoFS
build
@@ -4938,8 +4933,6 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors
name
ReleaseFS_open
-
-
name
windows
diff --git a/indra/cmake/00-Common.cmake b/indra/cmake/00-Common.cmake
index 2112f35dac..c044306ba3 100644
--- a/indra/cmake/00-Common.cmake
+++ b/indra/cmake/00-Common.cmake
@@ -157,7 +157,7 @@ if (LINUX)
if ( ${FORTIFY_SOURCE_RES} EQUAL 0 )
add_definitions(-D_FORTIFY_SOURCE=2)
endif()
- set(CMAKE_CXX_FLAGS "-Wno-deprecated -Wno-unused-but-set-variable -Wno-unused-variable ${CMAKE_CXX_FLAGS}")
+ set(CMAKE_CXX_FLAGS "-Wno-deprecated -Wno-unused-but-set-variable -Wno-unused-variable -Wno-placement-new ${CMAKE_CXX_FLAGS}")
# gcc 4.3 and above don't like the LL boost and also
# cause warnings due to our use of deprecated headers
@@ -180,6 +180,10 @@ if (LINUX)
add_definitions(-std=gnu++11)
#
+ # Enable old C++ ABI
+ add_definitions(-D_GLIBCXX_USE_CXX11_ABI=0)
+ #
+
# force this platform to accept TOS via external browser No, do not.
# add_definitions(-DEXTERNAL_TOS)
@@ -198,7 +202,8 @@ if (LINUX)
# this stops us requiring a really recent glibc at runtime
add_compile_options(-fno-stack-protector)
# linking can be very memory-hungry, especially the final viewer link
- set(CMAKE_CXX_LINK_FLAGS "-Wl,--no-keep-memory")
+ #set(CMAKE_CXX_LINK_FLAGS "-Wl,--no-keep-memory")
+ set(CMAKE_CXX_LINK_FLAGS "-Wl,--no-keep-memory -Wl,--build-id -Wl,-rpath,'$ORIGIN:$ORIGIN/../lib' -Wl,--exclude-libs,ALL")
endif (NOT USESYSTEMLIBS)
set(CMAKE_CXX_FLAGS_DEBUG "-fno-inline ${CMAKE_CXX_FLAGS_DEBUG}")
diff --git a/indra/cmake/CEFPlugin.cmake b/indra/cmake/CEFPlugin.cmake
index 2cdc6c2dda..8aefbaf2fc 100644
--- a/indra/cmake/CEFPlugin.cmake
+++ b/indra/cmake/CEFPlugin.cmake
@@ -38,8 +38,8 @@ elseif (DARWIN)
elseif (LINUX)
set(CEF_PLUGIN_LIBRARIES
+ dullahan
cef
cef_dll_wrapper.a
- dullahan
)
endif (WINDOWS)
diff --git a/indra/cmake/CURL.cmake b/indra/cmake/CURL.cmake
index 23ada74e4b..f8628d9c85 100644
--- a/indra/cmake/CURL.cmake
+++ b/indra/cmake/CURL.cmake
@@ -1,5 +1,6 @@
# -*- cmake -*-
include(Prebuilt)
+include(NGHTTP2)
set(CURL_FIND_QUIETLY ON)
set(CURL_FIND_REQUIRED ON)
@@ -16,7 +17,7 @@ else (USESYSTEMLIBS)
set(CURL_LIBRARIES libcurl.a)
if (LINUX)
list(APPEND CURL_LIBRARIES
- pthread
+ pthread ${NGHTTP2_LIBRARIES}
)
endif (LINUX)
endif (WINDOWS)
diff --git a/indra/cmake/FMODSTUDIO.cmake b/indra/cmake/FMODSTUDIO.cmake
index 4ca4ada7ab..7200a7da7b 100644
--- a/indra/cmake/FMODSTUDIO.cmake
+++ b/indra/cmake/FMODSTUDIO.cmake
@@ -41,15 +41,9 @@ if (FMODSTUDIO)
debug fmodL
optimized fmod)
elseif (LINUX)
- if (ADDRESS_SIZE EQUAL 32)
- set(FMODSTUDIO_LIBRARY
+ set(FMODSTUDIO_LIBRARY
debug fmodL
optimized fmod)
- elseif (ADDRESS_SIZE EQUAL 64)
- set(FMODSTUDIO_LIBRARY
- debug fmodL64
- optimized fmod64)
- endif(ADDRESS_SIZE EQUAL 32)
endif (WINDOWS)
set(FMODSTUDIO_LIBRARIES ${FMODSTUDIO_LIBRARY})
set(FMODSTUDIO_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include/fmodstudio)
diff --git a/indra/cmake/JsonCpp.cmake b/indra/cmake/JsonCpp.cmake
index 1ce95385d5..055e1243de 100644
--- a/indra/cmake/JsonCpp.cmake
+++ b/indra/cmake/JsonCpp.cmake
@@ -16,11 +16,7 @@ else (USESYSTEMLIBS)
elseif (DARWIN)
set(JSONCPP_LIBRARIES libjson_darwin_libmt.a)
elseif (LINUX)
- if ( ADDRESS_SIZE EQUAL 64 )
- set(JSONCPP_LIBRARIES libjson_linux-gcc-4.6_libmt.a)
- else ( )
- set(JSONCPP_LIBRARIES libjson_linux-gcc-4.1.3_libmt.a)
- endif ( )
+ set(JSONCPP_LIBRARIES libjson_linux-gcc-4.8_libmt.a)
endif (WINDOWS)
set(JSONCPP_INCLUDE_DIR "${LIBS_PREBUILT_DIR}/include/")
endif (USESYSTEMLIBS)
diff --git a/indra/cmake/ViewerManager.cmake b/indra/cmake/ViewerManager.cmake
index 7150ffc4d1..94864c26af 100644
--- a/indra/cmake/ViewerManager.cmake
+++ b/indra/cmake/ViewerManager.cmake
@@ -1,3 +1,2 @@
include (Prebuilt)
use_prebuilt_binary(viewer-manager)
-
diff --git a/indra/llimage/llimageworker.cpp b/indra/llimage/llimageworker.cpp
index b59b15c295..b4f67117be 100644
--- a/indra/llimage/llimageworker.cpp
+++ b/indra/llimage/llimageworker.cpp
@@ -131,7 +131,7 @@ bool LLImageDecodeThread::ImageRequest::processRequest()
{
return true; // done (failed)
}
- if (!(mFormattedImage->getWidth() * mFormattedImage->getHeight() * mFormattedImage->getComponents()))
+ if (0 == (mFormattedImage->getWidth() * mFormattedImage->getHeight() * mFormattedImage->getComponents()))
{
return true; // done (failed)
}
diff --git a/indra/llprimitive/lldaeloader.cpp b/indra/llprimitive/lldaeloader.cpp
index ac6d74005f..980705d779 100644
--- a/indra/llprimitive/lldaeloader.cpp
+++ b/indra/llprimitive/lldaeloader.cpp
@@ -60,7 +60,17 @@
#include "llsdserialize.h"
#include "lljoint.h"
+#if LL_LINUX && (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__ ) >= 70000
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wmisleading-indentation"
+#endif
+
#include "glh/glh_linear.h"
+
+#if LL_LINUX && (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__ ) >= 70000
+#pragma GCC diagnostic push
+#endif
+
#include "llmatrix4a.h"
diff --git a/indra/llprimitive/llmodelloader.cpp b/indra/llprimitive/llmodelloader.cpp
index d9db4b402b..3aad5bd095 100644
--- a/indra/llprimitive/llmodelloader.cpp
+++ b/indra/llprimitive/llmodelloader.cpp
@@ -29,7 +29,17 @@
#include "lljoint.h"
#include "llcallbacklist.h"
+#if LL_LINUX && (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__ ) >= 70000
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wmisleading-indentation"
+#endif
+
#include "glh/glh_linear.h"
+
+#if LL_LINUX && (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__ ) >= 70000
+#pragma GCC diagnostic push
+#endif
+
#include "llmatrix4a.h"
#include
diff --git a/indra/llprimitive/llprimtexturelist.cpp b/indra/llprimitive/llprimtexturelist.cpp
index f4f08248b8..83db5fd065 100644
--- a/indra/llprimitive/llprimtexturelist.cpp
+++ b/indra/llprimitive/llprimtexturelist.cpp
@@ -137,14 +137,22 @@ S32 LLPrimTextureList::copyTexture(const U8 index, const LLTextureEntry& te)
// we're changing an existing entry
llassert(mEntryList[index]);
delete (mEntryList[index]);
- if (&te)
- {
- mEntryList[index] = te.newCopy();
- }
- else
- {
- mEntryList[index] = LLPrimTextureList::newTextureEntry();
- }
+
+ // The compiler will assume te being valid as it is passed by reference and thus else will never be executed.
+ // If someone really passed *nullptr in here, this will be undefined behaviour
+
+ // if (&te)
+ // {
+ // mEntryList[index] = te.newCopy();
+ // }
+ // else
+ // {
+ // mEntryList[index] = LLPrimTextureList::newTextureEntry();
+ // }
+
+ mEntryList[index] = te.newCopy();
+ //
+
return TEM_CHANGE_TEXTURE;
}
diff --git a/indra/llrender/llgl.h b/indra/llrender/llgl.h
index aa98b3f6bc..b87830a12d 100644
--- a/indra/llrender/llgl.h
+++ b/indra/llrender/llgl.h
@@ -43,8 +43,18 @@
#include "llinstancetracker.h"
#include "llglheaders.h"
+
+#if LL_LINUX && (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__ ) >= 70000
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wmisleading-indentation"
+#endif
+
#include "glh/glh_linear.h"
+#if LL_LINUX && (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__ ) >= 70000
+#pragma GCC diagnostic push
+#endif
+
extern BOOL gDebugGL;
extern BOOL gDebugSession;
extern llofstream gFailLog;
diff --git a/indra/llrender/llrender.h b/indra/llrender/llrender.h
index f89258ce9f..837791b5e7 100644
--- a/indra/llrender/llrender.h
+++ b/indra/llrender/llrender.h
@@ -42,8 +42,18 @@
#include "llpointer.h"
#include "llglheaders.h"
#include "llmatrix4a.h"
+
+#if LL_LINUX && (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__ ) >= 70000
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wmisleading-indentation"
+#endif
+
#include "glh/glh_linear.h"
+#if LL_LINUX && (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__ ) >= 70000
+#pragma GCC diagnostic push
+#endif
+
class LLVertexBuffer;
class LLCubeMap;
class LLImageGL;
diff --git a/indra/llwindow/llwindowsdl.cpp b/indra/llwindow/llwindowsdl.cpp
index c5224fd84c..52b48017ee 100644
--- a/indra/llwindow/llwindowsdl.cpp
+++ b/indra/llwindow/llwindowsdl.cpp
@@ -1471,10 +1471,10 @@ BOOL LLWindowSDL::convertCoords(LLCoordGL from, LLCoordWindow *to)
if (!to)
return FALSE;
- to->mX = from.mX;
- to->mY = mWindow->h - from.mY - 1;
+ to->mX = from.mX;
+ to->mY = mWindow->h - from.mY - 1;
- return TRUE;
+ return TRUE;
}
BOOL LLWindowSDL::convertCoords(LLCoordWindow from, LLCoordGL* to)
@@ -1482,31 +1482,31 @@ BOOL LLWindowSDL::convertCoords(LLCoordWindow from, LLCoordGL* to)
if (!to)
return FALSE;
- to->mX = from.mX;
- to->mY = mWindow->h - from.mY - 1;
+ to->mX = from.mX;
+ to->mY = mWindow->h - from.mY - 1;
- return TRUE;
+ return TRUE;
}
BOOL LLWindowSDL::convertCoords(LLCoordScreen from, LLCoordWindow* to)
{
if (!to)
- return FALSE;
+ return FALSE;
- // In the fullscreen case, window and screen coordinates are the same.
- to->mX = from.mX;
- to->mY = from.mY;
+ // In the fullscreen case, window and screen coordinates are the same.
+ to->mX = from.mX;
+ to->mY = from.mY;
return (TRUE);
}
BOOL LLWindowSDL::convertCoords(LLCoordWindow from, LLCoordScreen *to)
{
if (!to)
- return FALSE;
+ return FALSE;
- // In the fullscreen case, window and screen coordinates are the same.
- to->mX = from.mX;
- to->mY = from.mY;
+ // In the fullscreen case, window and screen coordinates are the same.
+ to->mX = from.mX;
+ to->mY = from.mY;
return (TRUE);
}
diff --git a/indra/media_plugins/cef/CMakeLists.txt b/indra/media_plugins/cef/CMakeLists.txt
index 5d30a4f004..e0acc941dc 100644
--- a/indra/media_plugins/cef/CMakeLists.txt
+++ b/indra/media_plugins/cef/CMakeLists.txt
@@ -62,6 +62,7 @@ if (LINUX)
# message(FATAL_ERROR "CEF plugin has been enabled for a Linux compile.\n"
# " Please create a volume_catcher implementation for this platform.")
list(APPEND media_plugin_cef_SOURCE_FILES dummy_volume_catcher.cpp)
+ set(CMAKE_SHARED_LINKER_FLAGS "-Wl,--build-id -Wl,-rpath,'$ORIGIN:$ORIGIN/../../lib'")
elseif (DARWIN)
list(APPEND media_plugin_cef_SOURCE_FILES mac_volume_catcher_null.cpp)
find_library(CORESERVICES_LIBRARY CoreServices)
diff --git a/indra/media_plugins/libvlc/CMakeLists.txt b/indra/media_plugins/libvlc/CMakeLists.txt
index d3e9243069..3090e6d468 100644
--- a/indra/media_plugins/libvlc/CMakeLists.txt
+++ b/indra/media_plugins/libvlc/CMakeLists.txt
@@ -94,3 +94,7 @@ if (DARWIN)
)
endif (DARWIN)
+
+if( LINUX )
+ set(CMAKE_SHARED_LINKER_FLAGS "-Wl,--build-id -Wl,-rpath,'$ORIGIN:$ORIGIN/../../lib'")
+endif()
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index a46f8593cb..84201a2eba 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -2405,7 +2405,7 @@ if (NOT ENABLE_MEDIA_PLUGINS)
linux-crash-logger
SLPlugin
media_plugin_cef
- media_plugin_gstreamer010
+ #media_plugin_gstreamer010
media_plugin_libvlc
llcommon
)
@@ -2415,7 +2415,7 @@ else (NOT ENABLE_MEDIA_PLUGINS)
linux-crash-logger
SLPlugin
media_plugin_cef
- media_plugin_gstreamer010
+ #media_plugin_gstreamer010
llcommon
)
endif (NOT ENABLE_MEDIA_PLUGINS)
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index f34b0703bf..a90f5ca424 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -13861,6 +13861,19 @@ Change of this parameter will affect the layout of buttons in notification toast
Value
1
+ FSInternalShowNavbarFavoritesPanel
+
+ Comment
+ Internal control to show/hide navigation bar favorites panel
+ HideFromEditor
+ 1
+ Persist
+ 0
+ Type
+ Boolean
+ Value
+ 1
+
ShowNavbarNavigationPanel
Comment
@@ -13872,6 +13885,19 @@ Change of this parameter will affect the layout of buttons in notification toast
Value
0
+ FSInternalShowNavbarNavigationPanel
+
+ Comment
+ Internal control to show/hide navigation bar navigation panel
+ HideFromEditor
+ 1
+ Persist
+ 0
+ Type
+ Boolean
+ Value
+ 0
+
ShowMiniLocationPanel
Comment
@@ -24587,6 +24613,28 @@ Change of this parameter will affect the layout of buttons in notification toast
Value
1
+ FSUseReadOfflineMsgsCap
+
+ Comment
+ If enabled, use the ReadOfflineMsgsCap to request offline messages at login
+ Persist
+ 1
+ Type
+ Boolean
+ Value
+ 0
+
+ FSExperimentalRegionCrossingMovementFix
+
+ Comment
+ If enabled, use the experimental fix for region crossing movements being bogus due to false predictions by the viewer.
+ Persist
+ 1
+ Type
+ Boolean
+ Value
+ 1
+
diff --git a/indra/newview/chatbar_as_cmdline.cpp b/indra/newview/chatbar_as_cmdline.cpp
index 9e6a86afeb..84b0515e90 100644
--- a/indra/newview/chatbar_as_cmdline.cpp
+++ b/indra/newview/chatbar_as_cmdline.cpp
@@ -1708,7 +1708,7 @@ LLUUID cmdline_partial_name2key(std::string partial_name)
void cmdline_tp2name(const std::string& target)
{
LLUUID avkey = cmdline_partial_name2key(target);
- if (avkey.notNull())
+ if (avkey.notNull() && avkey != gAgentID)
{
LLAvatarActions::teleportTo(avkey);
}
diff --git a/indra/newview/daeexport.cpp b/indra/newview/daeexport.cpp
index a7c14e1ad3..b024e875d1 100644
--- a/indra/newview/daeexport.cpp
+++ b/indra/newview/daeexport.cpp
@@ -426,7 +426,7 @@ void ColladaExportFloater::CacheReadResponder::completed(bool success)
else
{
// For other formats we need to decode first
- if (mFormattedImage->updateData() && (mFormattedImage->getWidth() * mFormattedImage->getHeight() * mFormattedImage->getComponents()))
+ if (mFormattedImage->updateData() && ( (mFormattedImage->getWidth() * mFormattedImage->getHeight() * mFormattedImage->getComponents()) != 0 ) )
{
LLPointer raw = new LLImageRaw;
raw->resize(mFormattedImage->getWidth(), mFormattedImage->getHeight(), mFormattedImage->getComponents());
diff --git a/indra/newview/fs_viewer_manifest.py b/indra/newview/fs_viewer_manifest.py
index ac01817eea..6c0ea2921f 100644
--- a/indra/newview/fs_viewer_manifest.py
+++ b/indra/newview/fs_viewer_manifest.py
@@ -103,29 +103,33 @@ class FSViewerManifest:
self.run_command_shell( "cd %s && objcopy --add-gnu-debuglink=%s %s" % (debugDir, debugName, fileBin) )
- if( os.path.exists( "%s/firestorm-symbols-linux.tar.bz2" % self.args['configuration'].lower()) ):
- symName = "%s/Phoenix_%s_%s_%s_symbols-linux.tar.bz2" % ( self.args['configuration'].lower(), self.fs_channel_legacy_oneword(),
- '-'.join( self.args['version'] ), self.args['viewer_flavor'] )
+ if( os.path.exists( "%s/firestorm-symbols-linux-%d.tar.bz2" % (self.args['configuration'].lower(), self.address_size)) ):
+ symName = "%s/Phoenix_%s_%s_%s_symbols-linux-%d.tar.bz2" % ( self.args['configuration'].lower(), self.fs_channel_legacy_oneword(),
+ '-'.join( self.args['version'] ), self.args['viewer_flavor'], self.address_size )
print( "Saving symbols %s" % symName )
- os.rename("%s/firestorm-symbols-linux.tar.bz2" % self.args['configuration'].lower(), symName )
+ os.rename("%s/firestorm-symbols-linux-%d.tar.bz2" % (self.args['configuration'].lower(), self.address_size), symName )
def fs_linux_tar_excludes(self):
- return "--exclude core --exclude .debug/* --exclude .debug"
+ installer_name_components = ['Phoenix',self.app_name(),self.args.get('arch'),'.'.join(self.args['version'])]
+ installer_name = "_".join(installer_name_components)
+ return "--exclude=%s/bin/.debug" % installer_name
def fs_save_windows_symbols(self, substitution_strings):
#AO: Try to package up symbols
# New Method, for reading cross platform stack traces on a linux/mac host
- if (os.path.exists("%s/firestorm-symbols-windows.tar.bz2" % self.args['configuration'].lower())):
+ if (os.path.exists("%s/firestorm-symbols-windows-%d.tar.bz2" % (self.args['configuration'].lower(),
+ self.address_size))):
# Rename to add version numbers
- sName = "%s/Phoenix_%s_%s_%s_symbols-windows.tar.bz2" % (self.args['configuration'].lower(),
+ sName = "%s/Phoenix_%s_%s_%s_symbols-windows-%d.tar.bz2" % (self.args['configuration'].lower(),
self.fs_channel_legacy_oneword(),
substitution_strings['version_dashes'],
- self.args['viewer_flavor'])
+ self.args['viewer_flavor'],
+ self.address_size)
if os.path.exists( sName ):
os.unlink( sName )
- os.rename("%s/firestorm-symbols-windows.tar.bz2" % self.args['configuration'].lower(), sName )
+ os.rename("%s/firestorm-symbols-windows-%d.tar.bz2" % (self.args['configuration'].lower(), self.address_size), sName )
pdbName = "firestorm-bin.pdb"
try:
@@ -141,10 +145,11 @@ class FSViewerManifest:
# Store windows symbols we want to keep for debugging in a tar file, this will be later compressed with xz (lzma)
# Using tat+xz gives far superior compression than zip (~half the size of the zip archive).
# Python3 natively supports tar+xz via mode 'w:xz'. But we're stuck with Python2 for now.
- symbolTar = tarfile.TarFile("%s/Phoenix_%s_%s_%s_pdbsymbols-windows.tar" % (self.args['configuration'].lower(),
+ symbolTar = tarfile.TarFile("%s/Phoenix_%s_%s_%s_pdbsymbols-windows-%d.tar" % (self.args['configuration'].lower(),
self.fs_channel_legacy_oneword(),
substitution_strings['version_dashes'],
- self.args['viewer_flavor']),
+ self.args['viewer_flavor'],
+ self.address_size),
'w')
symbolTar.add( "%s/Firestorm-bin.exe" % self.args['configuration'].lower(), "firestorm-bin.exe" )
symbolTar.add( "%s/%s" % (self.args['configuration'].lower(),pdbName), pdbName )
diff --git a/indra/newview/fsdata.cpp b/indra/newview/fsdata.cpp
index 43f980b302..76d87ac197 100644
--- a/indra/newview/fsdata.cpp
+++ b/indra/newview/fsdata.cpp
@@ -966,10 +966,8 @@ LLSD FSData::getSystemInfo()
LLSD info = LLAppViewer::instance()->getViewerInfo();
std::string sysinfo1("\n");
- sysinfo1 += llformat("%s %s (%d) %s %s (%s) %s\n\n", LLAppViewer::instance()->getSecondLifeTitle().c_str(), LLVersionInfo::getShortVersion().c_str(), LLVersionInfo::getBuild(), info["BUILD_DATE"].asString().c_str(), info["BUILD_TIME"].asString().c_str(), LLVersionInfo::getChannel().c_str(),
-// FIRE-8273: Add Havok/Opensim indicator to getSystemInfo()
- info["BUILD_TYPE"].asString().c_str());
-//
+ sysinfo1 += llformat("%s %s (%d) %s %s (%s %dbit) %s\n\n", LLAppViewer::instance()->getSecondLifeTitle().c_str(), LLVersionInfo::getShortVersion().c_str(), LLVersionInfo::getBuild(), info["BUILD_DATE"].asString().c_str(), info["BUILD_TIME"].asString().c_str(), LLVersionInfo::getChannel().c_str(),
+ info["ADDRESS_SIZE"].asInteger(), info["BUILD_TYPE"].asString().c_str());
sysinfo1 += llformat("Build with %s version %s\n\n", info["COMPILER"].asString().c_str(), info["COMPILER_VERSION"].asString().c_str());
sysinfo1 += llformat("I am in %s located at %s (%s)\n", info["REGION"].asString().c_str(), info["HOSTNAME"].asString().c_str(), info["HOSTIP"].asString().c_str());
sysinfo1 += llformat("%s\n\n", info["SERVER_VERSION"].asString().c_str());
@@ -990,7 +988,7 @@ LLSD FSData::getSystemInfo()
sysinfo2 += llformat("libcurl Version: %s\n", info["LIBCURL_VERSION"].asString().c_str());
sysinfo2 += llformat("J2C Decoder Version: %s\n", info["J2C_VERSION"].asString().c_str());
sysinfo2 += llformat("Audio Driver Version: %s\n", info["AUDIO_DRIVER_VERSION"].asString().c_str());
- sysinfo2 += llformat("CEF Version: %s\n", info["LLCEFLIB_VERSION"].asString().c_str());
+ sysinfo2 += llformat("%s\n", info["LIBCEF_VERSION"].asString().c_str());
sysinfo2 += llformat("LibVLC Version: %s\n", info["LIBVLC_VERSION"].asString().c_str());
sysinfo2 += llformat("Vivox Version: %s\n", info["VOICE_VERSION"].asString().c_str());
diff --git a/indra/newview/fsradar.cpp b/indra/newview/fsradar.cpp
index c7e423c98f..1984ef0593 100644
--- a/indra/newview/fsradar.cpp
+++ b/indra/newview/fsradar.cpp
@@ -864,33 +864,35 @@ void FSRadar::teleportToAvatar(const LLUUID& targetAv)
}
else
{
- // FIRE-20862: Teleport the configured offset
- // toward the center of the region from the
+ // FIRE-20862: Teleport the configured offset toward the center of the region from the
// avatar's reported position
LLViewerRegion* avreg = world->getRegionFromPosGlobal(avpos);
- LLVector3d region_center = avreg->getCenterGlobal();
- LLVector3d offset = avpos - region_center;
- LLVector3d destination;
- F32 lateral_distance= gSavedSettings.getF32("FSTeleportToOffsetLateral");
- F32 vertical_distance= gSavedSettings.getF32("FSTeleportToOffsetVertical");
- if (offset.normalize() != 0.f) // there's an actual offset
- {
- if (lateral_distance > 0.0f)
- {
- offset *= lateral_distance;
- destination = avpos - offset;
- }
- else
- {
- destination = avpos;
- }
- }
- else // the target is exactly at the center, so the offset is 0
+ if (avreg)
{
- destination = region_center + LLVector3d(0.f, lateral_distance, 0.f);
+ LLVector3d region_center = avreg->getCenterGlobal();
+ LLVector3d offset = avpos - region_center;
+ LLVector3d destination;
+ F32 lateral_distance = gSavedSettings.getF32("FSTeleportToOffsetLateral");
+ F32 vertical_distance = gSavedSettings.getF32("FSTeleportToOffsetVertical");
+ if (offset.normalize() != 0.f) // there's an actual offset
+ {
+ if (lateral_distance > 0.0f)
+ {
+ offset *= lateral_distance;
+ destination = avpos - offset;
+ }
+ else
+ {
+ destination = avpos;
+ }
+ }
+ else // the target is exactly at the center, so the offset is 0
+ {
+ destination = region_center + LLVector3d(0.f, lateral_distance, 0.f);
+ }
+ destination.mdV[VZ] = avpos.mdV[VZ] + vertical_distance;
+ gAgent.teleportViaLocation(destination);
}
- destination.mdV[VZ] = avpos.mdV[VZ] + vertical_distance;
- gAgent.teleportViaLocation(destination);
}
}
else
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index ab096ab376..b6e0b7a193 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -323,7 +323,7 @@ S32 gLastExecDuration = -1; // (<0 indicates unknown)
# define LL_PLATFORM_KEY "mac"
#elif LL_LINUX
# define LL_PLATFORM_KEY "lnx"
-else
+#else
# error "Unknown Platform"
#endif
const char* gPlatform = LL_PLATFORM_KEY;
@@ -1144,10 +1144,11 @@ bool LLAppViewer::init()
if (!initCache())
{
+ LL_WARNS("InitInfo") << "Failed to init cache" << LL_ENDL;
std::ostringstream msg;
msg << LLTrans::getString("MBUnableToAccessFile");
OSMessageBox(msg.str(),LLStringUtil::null,OSMB_OK);
- return 1;
+ return 0;
}
LL_INFOS("InitInfo") << "Cache initialization is done." << LL_ENDL ;
@@ -1654,7 +1655,8 @@ bool LLAppViewer::doFrame()
// Scan keyboard for movement keys. Command keys and typing
// are handled by windows callbacks. Don't do this until we're
// done initializing. JC
- if ((gHeadlessClient || gViewerWindow->getWindow()->getVisible())
+ if (gViewerWindow
+ && (gHeadlessClient || gViewerWindow->getWindow()->getVisible())
&& gViewerWindow->getActive()
&& !gViewerWindow->getWindow()->getMinimized()
&& LLStartUp::getStartupState() == STATE_STARTED
@@ -1693,7 +1695,7 @@ bool LLAppViewer::doFrame()
// Render scene.
// *TODO: Should we run display() even during gHeadlessClient? DK 2011-02-18
- if (!LLApp::isExiting() && !gHeadlessClient)
+ if (!LLApp::isExiting() && !gHeadlessClient && gViewerWindow)
{
pingMainloopTimeout("Main:Display");
gGLActive = TRUE;
diff --git a/indra/newview/llface.cpp b/indra/newview/llface.cpp
index 5f999c4172..eb700bcee0 100644
--- a/indra/newview/llface.cpp
+++ b/indra/newview/llface.cpp
@@ -1047,10 +1047,15 @@ void LLFace::getPlanarProjectedParams(LLQuaternion* face_rot, LLVector3* face_po
const LLVolumeFace& vf = getViewerObject()->getVolume()->getVolumeFace(mTEOffset);
const LLVector4a& normal4a = vf.mNormals[0];
const LLVector4a& tangent = vf.mTangents[0];
- if (!&tangent)
- {
- return;
- }
+
+ // tangent is a reference, compiler will always assume it's valid and skip the check due to tangent==nullptr being undefined behaviour.
+
+ // if (!&tangent)
+ // {
+ // return;
+ // }
+
+ //
LLVector4a binormal4a;
binormal4a.setCross3(normal4a, tangent);
diff --git a/indra/newview/llfilepicker.cpp b/indra/newview/llfilepicker.cpp
index 7b76835eae..691ffb2590 100644
--- a/indra/newview/llfilepicker.cpp
+++ b/indra/newview/llfilepicker.cpp
@@ -1252,13 +1252,13 @@ static std::string add_anim_filter_to_gtkchooser(GtkWindow *picker)
static std::string add_xml_filter_to_gtkchooser(GtkWindow *picker)
{
return add_simple_pattern_filter_to_gtkchooser(picker, "*.xml",
- LLTrans::getString("xml_files") + " (*.xml)");
+ LLTrans::getString("xml_file") + " (*.xml)");
}
static std::string add_collada_filter_to_gtkchooser(GtkWindow *picker)
{
return add_simple_pattern_filter_to_gtkchooser(picker, "*.dae",
- LLTrans::getString("scene_files") + " (*.dae)");
+ LLTrans::getString("collada_files") + " (*.dae)");
}
static std::string add_imageload_filter_to_gtkchooser(GtkWindow *picker)
diff --git a/indra/newview/llimprocessing.cpp b/indra/newview/llimprocessing.cpp
index b1976a48ab..8305d24000 100644
--- a/indra/newview/llimprocessing.cpp
+++ b/indra/newview/llimprocessing.cpp
@@ -45,6 +45,7 @@
#include "llnotificationmanager.h"
#include "llpanelgroup.h"
#include "llregionhandle.h"
+#include "llsdserialize.h"
#include "llslurl.h"
#include "llstring.h"
#include "lltoastnotifypanel.h"
@@ -231,12 +232,12 @@ void inventory_offer_handler(LLOfferInfo* info)
// Strip any SLURL from the message display. (DEV-2754)
std::string msg = info->mDesc;
int indx = msg.find(" ( http://slurl.com/secondlife/");
- if(indx == std::string::npos)
+ if (indx == std::string::npos)
{
// try to find new slurl host
indx = msg.find(" ( http://maps.secondlife.com/secondlife/");
}
- if(indx >= 0)
+ if (indx >= 0)
{
LLStringUtil::truncate(msg, indx);
}
@@ -622,7 +623,8 @@ void LLIMProcessing::processNewMessage(LLUUID from_id,
LLVector3 position,
U8 *binary_bucket,
S32 binary_bucket_size,
- LLHost &sender)
+ LLHost &sender,
+ LLUUID aux_id)
{
LLChat chat;
std::string buffer;
@@ -682,7 +684,7 @@ void LLIMProcessing::processNewMessage(LLUUID from_id,
chat.mFromID = from_id;
chat.mFromName = name;
chat.mSourceType = (from_id.isNull() || (name == std::string(SYSTEM_FROM))) ? CHAT_SOURCE_SYSTEM : CHAT_SOURCE_AGENT;
-
+
if (chat.mSourceType == CHAT_SOURCE_SYSTEM)
{ // Translate server message if required (MAINT-6109)
translate_if_needed(message);
@@ -720,262 +722,122 @@ void LLIMProcessing::processNewMessage(LLUUID from_id,
LLSD payload;
LLNotification::Params params;
- switch(dialog)
- {
- case IM_CONSOLE_AND_CHAT_HISTORY:
- args["MESSAGE"] = message;
- payload["from_id"] = from_id;
+ switch (dialog)
+ {
+ case IM_CONSOLE_AND_CHAT_HISTORY:
+ args["MESSAGE"] = message;
+ payload["from_id"] = from_id;
- params.name = "IMSystemMessageTip";
- params.substitutions = args;
- params.payload = payload;
- LLPostponedNotification::add(params, from_id, false);
- break;
+ params.name = "IMSystemMessageTip";
+ params.substitutions = args;
+ params.payload = payload;
+ LLPostponedNotification::add(params, from_id, false);
+ break;
- case IM_NOTHING_SPECIAL: // p2p IM
- // Don't show dialog, just do IM
- if (!gAgent.isGodlike()
- && gAgent.getRegion()->isPrelude()
- && to_id.isNull() )
- {
- // do nothing -- don't distract newbies in
- // Prelude with global IMs
- }
+ case IM_NOTHING_SPECIAL: // p2p IM
+ // Don't show dialog, just do IM
+ if (!gAgent.isGodlike()
+ && gAgent.getRegion()->isPrelude()
+ && to_id.isNull())
+ {
+ // do nothing -- don't distract newbies in
+ // Prelude with global IMs
+ }
// [RLVa:KB] - Checked: RLVa-2.1.0
- else if ( (RlvActions::isRlvEnabled()) && (offline == IM_ONLINE) && (!is_muted) && ((!accept_im_from_only_friend) || (is_friend)) &&
- (message.length() > 3) && (RLV_CMD_PREFIX == message[0]) && (RlvHandler::instance().processIMQuery(from_id, message)) )
- {
- // Eat the message and do nothing
- return;
- }
+ else if ( (RlvActions::isRlvEnabled()) && (offline == IM_ONLINE) && (!is_muted) && ((!accept_im_from_only_friend) || (is_friend)) &&
+ (message.length() > 3) && (RLV_CMD_PREFIX == message[0]) && (RlvHandler::instance().processIMQuery(from_id, message)) )
+ {
+ // Eat the message and do nothing
+ return;
+ }
// [/RLVa:KB]
-// else if (offline == IM_ONLINE
-// && is_do_not_disturb
-// && from_id.notNull() //not a system message
-// && to_id.notNull()) //not global message
+// else if (offline == IM_ONLINE
+// && is_do_not_disturb
+// && from_id.notNull() //not a system message
+// && to_id.notNull()) //not global message
// [RLVa:KB] - Checked: 2010-11-30 (RLVa-1.3.0)
- // Only send the busy reponse if either the sender is not
- // muted OR the sender is muted and we explicitely want
- // to inform him about that fact.
- else if (offline == IM_ONLINE
- && (!accept_im_from_only_friend || is_friend) // is friend or accept IMs from friend only disabled
- && ((is_do_not_disturb && (!is_muted || (is_muted && !is_autorespond_muted))) || // do not disturb
- (is_autorespond && !is_muted) || // autorespond everyone
- (is_autorespond_nonfriends && !is_friend && !is_muted) || // autorespond friends only
- (is_afk && FSSendAwayAvatarResponse && !is_muted)) // away
- && from_id.notNull() //not a system message
- && to_id.notNull() //not global message
- && RlvActions::canReceiveIM(from_id))
-// [/RLVa:KB]
- {
- // Log autoresponse notification after initial message
- bool has_session = true;
-
- // Old "do not disturb" message behavior: only send once if session not open
- // Session id will be null if avatar answers from offline IM via email
- std::string response;
- if (!gIMMgr->hasSession(session_id) && session_id.notNull())
+ // Only send the busy reponse if either the sender is not
+ // muted OR the sender is muted and we explicitely want
+ // to inform him about that fact.
+ else if (offline == IM_ONLINE
+ && (!accept_im_from_only_friend || is_friend) // is friend or accept IMs from friend only disabled
+ && ((is_do_not_disturb && (!is_muted || (is_muted && !is_autorespond_muted))) || // do not disturb
+ (is_autorespond && !is_muted) || // autorespond everyone
+ (is_autorespond_nonfriends && !is_friend && !is_muted) || // autorespond friends only
+ (is_afk && FSSendAwayAvatarResponse && !is_muted)) // away
+ && from_id.notNull() //not a system message
+ && to_id.notNull() //not global message
+ && RlvActions::canReceiveIM(from_id))
+ // [/RLVa:KB]
{
- //
// Log autoresponse notification after initial message
- has_session = false;
- // FS autoresponse feature
- std::string my_name;
- LLAgentUI::buildFullname(my_name);
- if (is_do_not_disturb)
+ bool has_session = true;
+
+ // Old "do not disturb" message behavior: only send once if session not open
+ // Session id will be null if avatar answers from offline IM via email
+ std::string response;
+ if (!gIMMgr->hasSession(session_id) && session_id.notNull())
{
- response = gSavedPerAccountSettings.getString("DoNotDisturbModeResponse");
- }
- else if (is_autorespond_nonfriends && !is_friend)
- {
- response = gSavedPerAccountSettings.getString("FSAutorespondNonFriendsResponse");
- }
- else if (is_autorespond)
- {
- response = gSavedPerAccountSettings.getString("FSAutorespondModeResponse");
- }
- // FIRE-10500: Autoresponse for (Away)
- else if (is_afk && FSSendAwayAvatarResponse)
- {
- response = gSavedPerAccountSettings.getString("FSAwayAvatarResponse");
- }
- //
- else
- {
- LL_WARNS() << "Unknown auto-response mode" << LL_ENDL;
- }
- pack_instant_message(
- gMessageSystem,
- gAgent.getID(),
- FALSE,
- gAgent.getSessionID(),
- from_id,
- my_name,
- response,
- IM_ONLINE,
- IM_DO_NOT_DISTURB_AUTO_RESPONSE,
- session_id);
- gAgent.sendReliableMessage();
- // FS autoresponse feature
- // Old "do not disturb" message behavior: only send once if session not open
- }
- //
-
- // checkfor and process reqinfo
- if (has_session)
- {
- message = FSData::getInstance()->processRequestForInfo(from_id,message,name,session_id);
- }
- //
-
- // now store incoming IM in chat history
-
- buffer = message;
-
- LL_DEBUGS("Messaging") << "session_id( " << session_id << " ), from_id( " << from_id << " )" << LL_ENDL;
-
- // FIRE-10178: Keyword Alerts in group IM do not work unless the group is in the foreground (notification on receipt of IM)
- chat.mText = buffer;
- bool keyword_alert_performed = false;
- if (FSKeywords::getInstance()->chatContainsKeyword(chat, false))
- {
- FSKeywords::notify(chat);
- keyword_alert_performed = true;
- }
- //
-
- // add to IM panel, but do not bother the user
- gIMMgr->addMessage(
- session_id,
- from_id,
- name,
- buffer,
- IM_OFFLINE == offline,
- LLStringUtil::null,
- dialog,
- parent_estate_id,
- region_id,
- position,
- true,
- false,
- keyword_alert_performed);
-
- // Old "do not disturb" message behavior: only send once if session not open
- //if (!gIMMgr->isDNDMessageSend(session_id))
- //{
- // // return a standard "do not disturb" message, but only do it to online IM
- // // (i.e. not other auto responses and not store-and-forward IM)
- // send_do_not_disturb_message(msg, from_id, session_id);
- // gIMMgr->setDNDMessageSent(session_id, true);
- //}
- //
-
- if (!has_session)
- {
- // Fire-5389 - "Autoresponse Sent" message added to Firestorm as was in Phoenix
- LLStringUtil::format_map_t args;
- args["MESSAGE"] = response;
-
- gIMMgr->addMessage(
- session_id,
- gAgentID,
- LLStringUtil::null, // Pass null value so no name gets prepended
- LLTrans::getString("IM_autoresponse_sent", args),
- false,
- name,
- IM_NOTHING_SPECIAL,
- parent_estate_id,
- region_id,
- position,
- false,
- true
- );
- //
-
- // Send inventory item on autoresponse
- LLUUID item_id(gSavedPerAccountSettings.getString("FSAutoresponseItemUUID"));
- if (item_id.notNull())
- {
- LLInventoryItem* item = dynamic_cast(gInventory.getItem(item_id));
- if (item)
+ //
+ // Log autoresponse notification after initial message
+ has_session = false;
+ // FS autoresponse feature
+ std::string my_name;
+ LLAgentUI::buildFullname(my_name);
+ if (is_do_not_disturb)
{
- gIMMgr->addMessage(
- session_id,
- gAgentID,
- LLStringUtil::null, // Pass null value so no name gets prepended
- LLTrans::getString("IM_autoresponse_item_sent", LLSD().with("[ITEM_NAME]", item->getName())),
- false,
- name,
- IM_NOTHING_SPECIAL,
- parent_estate_id,
- region_id,
- position,
- false,
- true);
- LLGiveInventory::doGiveInventoryItem(from_id, item, session_id);
+ response = gSavedPerAccountSettings.getString("DoNotDisturbModeResponse");
}
+ else if (is_autorespond_nonfriends && !is_friend)
+ {
+ response = gSavedPerAccountSettings.getString("FSAutorespondNonFriendsResponse");
+ }
+ else if (is_autorespond)
+ {
+ response = gSavedPerAccountSettings.getString("FSAutorespondModeResponse");
+ }
+ // FIRE-10500: Autoresponse for (Away)
+ else if (is_afk && FSSendAwayAvatarResponse)
+ {
+ response = gSavedPerAccountSettings.getString("FSAwayAvatarResponse");
+ }
+ //
+ else
+ {
+ LL_WARNS() << "Unknown auto-response mode" << LL_ENDL;
+ }
+ pack_instant_message(
+ gMessageSystem,
+ gAgent.getID(),
+ FALSE,
+ gAgent.getSessionID(),
+ from_id,
+ my_name,
+ response,
+ IM_ONLINE,
+ IM_DO_NOT_DISTURB_AUTO_RESPONSE,
+ session_id);
+ gAgent.sendReliableMessage();
+ // FS autoresponse feature
+ // Old "do not disturb" message behavior: only send once if session not open
}
//
- }
- }
- else if (from_id.isNull())
- {
- LLSD args;
- args["MESSAGE"] = message;
- LLNotificationsUtil::add("SystemMessage", args);
- }
- else if (to_id.isNull())
- {
- // Message to everyone from GOD, look up the fullname since
- // server always slams name to legacy names
- LLAvatarNameCache::get(from_id, boost::bind(god_message_name_cb, _2, chat, message));
- }
- else
- {
- // standard message, not from system
- std::string saved;
- if(offline == IM_OFFLINE)
- {
- LLStringUtil::format_map_t args;
- args["[LONG_TIMESTAMP]"] = formatted_time(timestamp);
- saved = LLTrans::getString("Saved_message", args);
- }
- buffer = saved + message;
- LL_DEBUGS("Messaging") << "session_id( " << session_id << " ), from_id( " << from_id << " )" << LL_ENDL;
-
- bool mute_im = is_muted;
- if (accept_im_from_only_friend && !is_friend)
- {
- if (!gIMMgr->isNonFriendSessionNotified(session_id))
+ // checkfor and process reqinfo
+ if (has_session)
{
- // Disable this - doesn't make sense it will be skipped by LLIMMgr::addMessage() anyway
- //std::string message = LLTrans::getString("IM_unblock_only_groups_friends");
- //gIMMgr->addMessage(session_id, from_id, name, message, IM_OFFLINE == offline);
- //
- gIMMgr->addNotifiedNonFriendSessionID(session_id);
+ message = FSData::getInstance()->processRequestForInfo(from_id,message,name,session_id);
}
+ //
- mute_im = true;
- }
+ // now store incoming IM in chat history
-// [RLVa:KB] - Checked: 2010-11-30 (RLVa-1.3.0)
- // Don't block offline IMs, or IMs from Lindens
- if ( (rlv_handler_t::isEnabled()) && (offline != IM_OFFLINE) && (!RlvActions::canReceiveIM(from_id)) && (!LLMuteList::getInstance()->isLinden(original_name) ))
- {
- if (!mute_im)
- RlvUtil::sendBusyMessage(from_id, RlvStrings::getString(RLV_STRING_BLOCKED_RECVIM_REMOTE), session_id);
- message = RlvStrings::getString(RLV_STRING_BLOCKED_RECVIM);
- }
-// [/RLVa:KB]
+ buffer = message;
- if (!mute_im)
- {
- // checkfor and process reqinfo
- message = FSData::getInstance()->processRequestForInfo(from_id, message, name, session_id);
+ LL_DEBUGS("Messaging") << "session_id( " << session_id << " ), from_id( " << from_id << " )" << LL_ENDL;
// FIRE-10178: Keyword Alerts in group IM do not work unless the group is in the foreground (notification on receipt of IM)
- chat.mText = message;
+ chat.mText = buffer;
bool keyword_alert_performed = false;
if (FSKeywords::getInstance()->chatContainsKeyword(chat, false))
{
@@ -984,8 +846,7 @@ void LLIMProcessing::processNewMessage(LLUUID from_id,
}
//
- buffer = saved + message;
-
+ // add to IM panel, but do not bother the user
gIMMgr->addMessage(
session_id,
from_id,
@@ -1000,132 +861,339 @@ void LLIMProcessing::processNewMessage(LLUUID from_id,
true,
false,
keyword_alert_performed);
+
+ // Old "do not disturb" message behavior: only send once if session not open
+ //if (!gIMMgr->isDNDMessageSend(session_id))
+ //{
+ // // return a standard "do not disturb" message, but only do it to online IM
+ // // (i.e. not other auto responses and not store-and-forward IM)
+ // send_do_not_disturb_message(msg, from_id, session_id);
+ // gIMMgr->setDNDMessageSent(session_id, true);
+ //}
+ //
+
+ if (!has_session)
+ {
+ // Fire-5389 - "Autoresponse Sent" message added to Firestorm as was in Phoenix
+ LLStringUtil::format_map_t args;
+ args["MESSAGE"] = response;
+
+ gIMMgr->addMessage(
+ session_id,
+ gAgentID,
+ LLStringUtil::null, // Pass null value so no name gets prepended
+ LLTrans::getString("IM_autoresponse_sent", args),
+ false,
+ name,
+ IM_NOTHING_SPECIAL,
+ parent_estate_id,
+ region_id,
+ position,
+ false,
+ true
+ );
+ //
+
+ // Send inventory item on autoresponse
+ LLUUID item_id(gSavedPerAccountSettings.getString("FSAutoresponseItemUUID"));
+ if (item_id.notNull())
+ {
+ LLInventoryItem* item = dynamic_cast(gInventory.getItem(item_id));
+ if (item)
+ {
+ gIMMgr->addMessage(
+ session_id,
+ gAgentID,
+ LLStringUtil::null, // Pass null value so no name gets prepended
+ LLTrans::getString("IM_autoresponse_item_sent", LLSD().with("[ITEM_NAME]", item->getName())),
+ false,
+ name,
+ IM_NOTHING_SPECIAL,
+ parent_estate_id,
+ region_id,
+ position,
+ false,
+ true);
+ LLGiveInventory::doGiveInventoryItem(from_id, item, session_id);
+ }
+ }
+ //
+ }
+ }
+ else if (from_id.isNull())
+ {
+ LLSD args;
+ args["MESSAGE"] = message;
+ LLNotificationsUtil::add("SystemMessage", args);
+ }
+ else if (to_id.isNull())
+ {
+ // Message to everyone from GOD, look up the fullname since
+ // server always slams name to legacy names
+ LLAvatarNameCache::get(from_id, boost::bind(god_message_name_cb, _2, chat, message));
}
else
{
- /*
- EXT-5099
- currently there is no way to store in history only...
- using LLNotificationsUtil::add will add message to Nearby Chat
-
- // muted user, so don't start an IM session, just record line in chat
- // history. Pretend the chat is from a local agent,
- // so it will go into the history but not be shown on screen.
-
- LLSD args;
- args["MESSAGE"] = buffer;
- LLNotificationsUtil::add("SystemMessageTip", args);
- */
- static LLCachedControl fsSendMutedAvatarResponse(gSavedPerAccountSettings, "FSSendMutedAvatarResponse");
- if (fsSendMutedAvatarResponse && (!accept_im_from_only_friend || is_friend))
+ // standard message, not from system
+ std::string saved;
+ if (offline == IM_OFFLINE)
{
- std::string my_name;
- LLAgentUI::buildFullname(my_name);
- std::string response = gSavedPerAccountSettings.getString("FSMutedAvatarResponse");
- pack_instant_message(
- gMessageSystem,
- gAgent.getID(),
- FALSE,
- gAgent.getSessionID(),
- from_id,
- my_name,
- response,
- IM_ONLINE,
- IM_DO_NOT_DISTURB_AUTO_RESPONSE,
- session_id);
- gAgent.sendReliableMessage();
+ LLStringUtil::format_map_t args;
+ args["[LONG_TIMESTAMP]"] = formatted_time(timestamp);
+ saved = LLTrans::getString("Saved_message", args);
+ }
+ buffer = saved + message;
+
+ LL_DEBUGS("Messaging") << "session_id( " << session_id << " ), from_id( " << from_id << " )" << LL_ENDL;
+
+ bool mute_im = is_muted;
+ if (accept_im_from_only_friend && !is_friend)
+ {
+ if (!gIMMgr->isNonFriendSessionNotified(session_id))
+ {
+ // Disable this - doesn't make sense it will be skipped by LLIMMgr::addMessage() anyway
+ //std::string message = LLTrans::getString("IM_unblock_only_groups_friends");
+ //gIMMgr->addMessage(session_id, from_id, name, message, IM_OFFLINE == offline);
+ //
+ gIMMgr->addNotifiedNonFriendSessionID(session_id);
+ }
+
+ mute_im = true;
}
- // Don't flash for muted IMs
- return;
- }
- }
- break;
+// [RLVa:KB] - Checked: 2010-11-30 (RLVa-1.3.0)
+ // Don't block offline IMs, or IMs from Lindens
+ if ( (rlv_handler_t::isEnabled()) && (offline != IM_OFFLINE) && (!RlvActions::canReceiveIM(from_id)) && (!LLMuteList::getInstance()->isLinden(original_name) ))
+ {
+ if (!mute_im)
+ RlvUtil::sendBusyMessage(from_id, RlvStrings::getString(RLV_STRING_BLOCKED_RECVIM_REMOTE), session_id);
+ message = RlvStrings::getString(RLV_STRING_BLOCKED_RECVIM);
+ }
+// [/RLVa:KB]
- case IM_TYPING_START:
+ if (!mute_im)
+ {
+ // checkfor and process reqinfo
+ message = FSData::getInstance()->processRequestForInfo(from_id, message, name, session_id);
+
+ // FIRE-10178: Keyword Alerts in group IM do not work unless the group is in the foreground (notification on receipt of IM)
+ chat.mText = message;
+ bool keyword_alert_performed = false;
+ if (FSKeywords::getInstance()->chatContainsKeyword(chat, false))
+ {
+ FSKeywords::notify(chat);
+ keyword_alert_performed = true;
+ }
+ //
+
+ buffer = saved + message;
+
+ gIMMgr->addMessage(
+ session_id,
+ from_id,
+ name,
+ buffer,
+ IM_OFFLINE == offline,
+ LLStringUtil::null,
+ dialog,
+ parent_estate_id,
+ region_id,
+ position,
+ true,
+ false,
+ keyword_alert_performed);
+ }
+ else
+ {
+ /*
+ EXT-5099
+ */
+ static LLCachedControl fsSendMutedAvatarResponse(gSavedPerAccountSettings, "FSSendMutedAvatarResponse");
+ if (fsSendMutedAvatarResponse && (!accept_im_from_only_friend || is_friend))
+ {
+ std::string my_name;
+ LLAgentUI::buildFullname(my_name);
+ std::string response = gSavedPerAccountSettings.getString("FSMutedAvatarResponse");
+ pack_instant_message(
+ gMessageSystem,
+ gAgent.getID(),
+ FALSE,
+ gAgent.getSessionID(),
+ from_id,
+ my_name,
+ response,
+ IM_ONLINE,
+ IM_DO_NOT_DISTURB_AUTO_RESPONSE,
+ session_id);
+ gAgent.sendReliableMessage();
+ }
+
+ // Don't flash for muted IMs
+ return;
+ }
+ }
+ break;
+
+ case IM_TYPING_START:
{
- LLPointer im_info = new LLIMInfo(gMessageSystem);
+ std::vector bucket(binary_bucket[0], binary_bucket_size);
+ LLSD data;
+ data["binary_bucket"] = bucket;
+ LLPointer im_info = new LLIMInfo(from_id,
+ from_group,
+ to_id,
+ dialog,
+ agentName,
+ message,
+ session_id,
+ parent_estate_id,
+ region_id,
+ position,
+ data,
+ offline,
+ timestamp);
gIMMgr->processIMTypingStart(im_info);
}
break;
- case IM_TYPING_STOP:
+ case IM_TYPING_STOP:
{
- LLPointer im_info = new LLIMInfo(gMessageSystem);
+ std::vector bucket(binary_bucket[0], binary_bucket_size);
+ LLSD data;
+ data["binary_bucket"] = bucket;
+ LLPointer im_info = new LLIMInfo(from_id,
+ from_group,
+ to_id,
+ dialog,
+ agentName,
+ message,
+ session_id,
+ parent_estate_id,
+ region_id,
+ position,
+ data,
+ offline,
+ timestamp);
gIMMgr->processIMTypingStop(im_info);
}
break;
- case IM_MESSAGEBOX:
+ case IM_MESSAGEBOX:
{
// This is a block, modeless dialog.
args["MESSAGE"] = message;
LLNotificationsUtil::add("SystemMessageTip", args);
}
break;
- case IM_GROUP_NOTICE:
- case IM_GROUP_NOTICE_REQUESTED:
+ case IM_GROUP_NOTICE:
+ case IM_GROUP_NOTICE_REQUESTED:
{
LL_INFOS("Messaging") << "Received IM_GROUP_NOTICE message." << LL_ENDL;
- // Read the binary bucket for more information.
- struct notice_bucket_header_t
- {
- U8 has_inventory;
- U8 asset_type;
- LLUUID group_id;
- };
- struct notice_bucket_full_t
- {
- struct notice_bucket_header_t header;
- U8 item_name[DB_INV_ITEM_NAME_BUF_SIZE];
- }* notice_bin_bucket;
- // Make sure the binary bucket is big enough to hold the header
- // and a null terminated item name.
- if ( (binary_bucket_size < (S32)((sizeof(notice_bucket_header_t) + sizeof(U8))))
- || (binary_bucket[binary_bucket_size - 1] != '\0') )
+ LLUUID agent_id;
+ U8 has_inventory;
+ U8 asset_type = 0;
+ LLUUID group_id;
+ std::string item_name;
+
+ if (aux_id.notNull())
{
- LL_WARNS("Messaging") << "Malformed group notice binary bucket" << LL_ENDL;
- // Don't flash task icon
- //break;
- return;
+ // aux_id contains group id, binary bucket contains name and asset type
+ group_id = aux_id;
+ has_inventory = binary_bucket_size > 1 ? TRUE : FALSE;
+ from_group = TRUE; // inaccurate value correction
+ if (has_inventory)
+ {
+ std::string str_bucket = ll_safe_string((char*)binary_bucket, binary_bucket_size);
+
+ typedef boost::tokenizer > tokenizer;
+ boost::char_separator sep("|", "", boost::keep_empty_tokens);
+ tokenizer tokens(str_bucket, sep);
+ tokenizer::iterator iter = tokens.begin();
+
+ asset_type = (LLAssetType::EType)(atoi((*(iter++)).c_str()));
+ iter++; // wearable type if applicable, otherwise asset type
+ item_name = std::string((*(iter++)).c_str());
+ // Note There is more elements in 'tokens' ...
+
+
+ for (int i = 0; i < 6; i++)
+ {
+ LL_WARNS() << *(iter++) << LL_ENDL;
+ iter++;
+ }
+ }
+ }
+ else
+ {
+ // All info is in binary bucket, read it for more information.
+ struct notice_bucket_header_t
+ {
+ U8 has_inventory;
+ U8 asset_type;
+ LLUUID group_id;
+ };
+ struct notice_bucket_full_t
+ {
+ struct notice_bucket_header_t header;
+ U8 item_name[DB_INV_ITEM_NAME_BUF_SIZE];
+ }*notice_bin_bucket;
+
+ // Make sure the binary bucket is big enough to hold the header
+ // and a null terminated item name.
+ if ((binary_bucket_size < (S32)((sizeof(notice_bucket_header_t) + sizeof(U8))))
+ || (binary_bucket[binary_bucket_size - 1] != '\0'))
+ {
+ LL_WARNS("Messaging") << "Malformed group notice binary bucket" << LL_ENDL;
+ // Don't flash task icon
+ //break;
+ return;
+ }
+
+ notice_bin_bucket = (struct notice_bucket_full_t*) &binary_bucket[0];
+ has_inventory = notice_bin_bucket->header.has_inventory;
+ asset_type = notice_bin_bucket->header.asset_type;
+ group_id = notice_bin_bucket->header.group_id;
+ item_name = ll_safe_string((const char*)notice_bin_bucket->item_name);
}
- // The group notice packet does not have an AgentID. Obtain one from the name cache.
- // If last name is "Resident" strip it out so the cache name lookup works.
- std::string::size_type index = original_name.find(" Resident");
- if (index != std::string::npos)
+ if (group_id != from_id)
{
- original_name = original_name.substr(0, index);
+ agent_id = from_id;
+ }
+ else
+ {
+ S32 index = original_name.find(" Resident");
+ if (index != std::string::npos)
+ {
+ original_name = original_name.substr(0, index);
+ }
+
+ // The group notice packet does not have an AgentID. Obtain one from the name cache.
+ // If last name is "Resident" strip it out so the cache name lookup works.
+ std::string legacy_name = gCacheName->buildLegacyName(original_name);
+ agent_id = LLAvatarNameCache::findIdByName(legacy_name);
+
+ if (agent_id.isNull())
+ {
+ LL_WARNS("Messaging") << "buildLegacyName returned null while processing " << original_name << LL_ENDL;
+ }
}
- std::string legacy_name = gCacheName->buildLegacyName(original_name);
- LLUUID agent_id = LLAvatarNameCache::findIdByName(legacy_name);
-
- if (agent_id.isNull())
- {
- LL_WARNS("Messaging") << "buildLegacyName returned null while processing " << original_name << LL_ENDL;
- }
- else if (LLMuteList::getInstance()->isMuted(agent_id))
+ if (agent_id.notNull() && LLMuteList::getInstance()->isMuted(agent_id))
{
// Don't flash task icon
//break;
return;
}
- notice_bin_bucket = (struct notice_bucket_full_t*) &binary_bucket[0];
- U8 has_inventory = notice_bin_bucket->header.has_inventory;
- U8 asset_type = notice_bin_bucket->header.asset_type;
- LLUUID group_id = notice_bin_bucket->header.group_id;
- std::string item_name = ll_safe_string((const char*) notice_bin_bucket->item_name);
-
// If there is inventory, give the user the inventory offer.
LLOfferInfo* info = NULL;
if (has_inventory)
{
info = new LLOfferInfo();
-
+
info->mIM = IM_GROUP_NOTICE;
info->mFromID = from_id;
info->mFromGroup = from_group;
@@ -1146,7 +1214,7 @@ void LLIMProcessing::processNewMessage(LLUUID from_id,
info->mDesc = item_name;
info->mHost = sender;
}
-
+
std::string str(message);
// Tokenize the string.
@@ -1170,7 +1238,7 @@ void LLIMProcessing::processNewMessage(LLUUID from_id,
payload["group_id"] = group_id;
payload["inventory_name"] = item_name;
payload["received_time"] = LLDate::now();
- if(info && info->asLLSD())
+ if (info && info->asLLSD())
{
payload["inventory_offer"] = info->asLLSD();
}
@@ -1193,8 +1261,8 @@ void LLIMProcessing::processNewMessage(LLUUID from_id,
// Also send down the old path for now.
if (IM_GROUP_NOTICE_REQUESTED == dialog)
{
-
- LLPanelGroup::showNotice(subj,mes,group_id,has_inventory,item_name,info);
+
+ LLPanelGroup::showNotice(subj, mes, group_id, has_inventory, item_name, info);
}
else
{
@@ -1202,7 +1270,7 @@ void LLIMProcessing::processNewMessage(LLUUID from_id,
}
}
break;
- case IM_GROUP_INVITATION:
+ case IM_GROUP_INVITATION:
{
// FIRE-20385: Don't show group invitation for groups agent is already a member of
if (gAgent.isInGroup(from_id) && !gSavedSettings.getBOOL("FSShowJoinedGroupInvitations"))
@@ -1223,7 +1291,7 @@ void LLIMProcessing::processNewMessage(LLUUID from_id,
{
send_do_not_disturb_message(gMessageSystem, from_id);
}
-
+
if (!is_muted)
{
LL_INFOS("Messaging") << "Received IM_GROUP_INVITATION message." << LL_ENDL;
@@ -1232,7 +1300,7 @@ void LLIMProcessing::processNewMessage(LLUUID from_id,
{
S32 membership_fee;
LLUUID role_id;
- }* invite_bucket;
+ }*invite_bucket;
// Make sure the binary bucket is the correct size.
if (binary_bucket_size != sizeof(invite_bucket_t))
@@ -1280,9 +1348,9 @@ void LLIMProcessing::processNewMessage(LLUUID from_id,
}
break;
- case IM_INVENTORY_OFFERED:
- case IM_TASK_INVENTORY_OFFERED:
- // Someone has offered us some inventory.
+ case IM_INVENTORY_OFFERED:
+ case IM_TASK_INVENTORY_OFFERED:
+ // Someone has offered us some inventory.
{
LLOfferInfo* info = new LLOfferInfo;
if (IM_INVENTORY_OFFERED == dialog)
@@ -1291,7 +1359,7 @@ void LLIMProcessing::processNewMessage(LLUUID from_id,
{
S8 asset_type;
LLUUID object_id;
- }* bucketp;
+ }*bucketp;
if (sizeof(offer_agent_bucket_t) != binary_bucket_size)
{
@@ -1356,54 +1424,54 @@ void LLIMProcessing::processNewMessage(LLUUID from_id,
}
break;
- case IM_INVENTORY_ACCEPTED:
- {
-// args["NAME"] = LLSLURL("agent", from_id, "completename").getSLURLString();;
-// args["ORIGINAL_NAME"] = original_name;
+ case IM_INVENTORY_ACCEPTED:
+ {
+// args["NAME"] = LLSLURL("agent", from_id, "completename").getSLURLString();;
+// args["ORIGINAL_NAME"] = original_name;
// [RLVa:KB] - Checked: RLVa-1.2.2
- // Only anonymize the name if the agent is nearby, there isn't an open IM session to them and their profile isn't open
- LLAvatarName av_name;
- bool fRlvCanShowName = (!RlvActions::isRlvEnabled()) ||
- (RlvActions::canShowName(RlvActions::SNC_DEFAULT, from_id)) || (!RlvUtil::isNearbyAgent(from_id)) || (RlvUIEnabler::hasOpenProfile(from_id)) || (RlvUIEnabler::hasOpenIM(from_id));
- args["NAME"] = LLSLURL("agent", from_id, (fRlvCanShowName) ? "completename" : "rlvanonym").getSLURLString();;
- args["ORIGINAL_NAME"] = fRlvCanShowName ? original_name : (LLAvatarNameCache::get(from_id, &av_name) ? RlvStrings::getAnonym(av_name) : RlvStrings::getAnonym(original_name));
+ // Only anonymize the name if the agent is nearby, there isn't an open IM session to them and their profile isn't open
+ LLAvatarName av_name;
+ bool fRlvCanShowName = (!RlvActions::isRlvEnabled()) ||
+ (RlvActions::canShowName(RlvActions::SNC_DEFAULT, from_id)) || (!RlvUtil::isNearbyAgent(from_id)) || (RlvUIEnabler::hasOpenProfile(from_id)) || (RlvUIEnabler::hasOpenIM(from_id));
+ args["NAME"] = LLSLURL("agent", from_id, (fRlvCanShowName) ? "completename" : "rlvanonym").getSLURLString();;
+ args["ORIGINAL_NAME"] = fRlvCanShowName ? original_name : (LLAvatarNameCache::get(from_id, &av_name) ? RlvStrings::getAnonym(av_name) : RlvStrings::getAnonym(original_name));
// [/RLVa:KB]
- LLSD payload;
- payload["from_id"] = from_id;
- // Passing the "SESSION_NAME" to use it for IM notification logging
- // in LLTipHandler::processNotification(). See STORM-941.
- payload["SESSION_NAME"] = name;
- LLNotificationsUtil::add("InventoryAccepted", args, payload);
- break;
- }
- case IM_INVENTORY_DECLINED:
- {
-// args["NAME"] = LLSLURL("agent", from_id, "completename").getSLURLString();;
+ LLSD payload;
+ payload["from_id"] = from_id;
+ // Passing the "SESSION_NAME" to use it for IM notification logging
+ // in LLTipHandler::processNotification(). See STORM-941.
+ payload["SESSION_NAME"] = name;
+ LLNotificationsUtil::add("InventoryAccepted", args, payload);
+ break;
+ }
+ case IM_INVENTORY_DECLINED:
+ {
+// args["NAME"] = LLSLURL("agent", from_id, "completename").getSLURLString();;
// [RLVa:KB] - Checked: RLVa-1.2.2
- // Only anonymize the name if the agent is nearby, there isn't an open IM session to them and their profile isn't open
- bool fRlvCanShowName = (!RlvActions::isRlvEnabled()) ||
- (RlvActions::canShowName(RlvActions::SNC_DEFAULT, from_id)) || (!RlvUtil::isNearbyAgent(from_id)) || (RlvUIEnabler::hasOpenProfile(from_id)) || (RlvUIEnabler::hasOpenIM(from_id));
- args["NAME"] = LLSLURL("agent", from_id, (fRlvCanShowName) ? "completename" : "rlvanonym").getSLURLString();;
+ // Only anonymize the name if the agent is nearby, there isn't an open IM session to them and their profile isn't open
+ bool fRlvCanShowName = (!RlvActions::isRlvEnabled()) ||
+ (RlvActions::canShowName(RlvActions::SNC_DEFAULT, from_id)) || (!RlvUtil::isNearbyAgent(from_id)) || (RlvUIEnabler::hasOpenProfile(from_id)) || (RlvUIEnabler::hasOpenIM(from_id));
+ args["NAME"] = LLSLURL("agent", from_id, (fRlvCanShowName) ? "completename" : "rlvanonym").getSLURLString();;
// [/RLVa:KB]
- LLSD payload;
- payload["from_id"] = from_id;
- LLNotificationsUtil::add("InventoryDeclined", args, payload);
- break;
- }
- // TODO: _DEPRECATED suffix as part of vote removal - DEV-24856
- case IM_GROUP_VOTE:
+ LLSD payload;
+ payload["from_id"] = from_id;
+ LLNotificationsUtil::add("InventoryDeclined", args, payload);
+ break;
+ }
+ // TODO: _DEPRECATED suffix as part of vote removal - DEV-24856
+ case IM_GROUP_VOTE:
{
LL_WARNS("Messaging") << "Received IM: IM_GROUP_VOTE_DEPRECATED" << LL_ENDL;
}
break;
- case IM_GROUP_ELECTION_DEPRECATED:
- {
- LL_WARNS("Messaging") << "Received IM: IM_GROUP_ELECTION_DEPRECATED" << LL_ENDL;
- }
- break;
-
- case IM_FROM_TASK:
+ case IM_GROUP_ELECTION_DEPRECATED:
+ {
+ LL_WARNS("Messaging") << "Received IM: IM_GROUP_ELECTION_DEPRECATED" << LL_ENDL;
+ }
+ break;
+
+ case IM_FROM_TASK:
{
if (is_do_not_disturb && !is_owned_by_me)
@@ -1446,7 +1514,7 @@ void LLIMProcessing::processNewMessage(LLUUID from_id,
// enough to check only from name (i.e. fromName = "Second Life"). For example
// source type of messages from objects called "Second Life" should not be CHAT_SOURCE_SYSTEM.
bool chat_from_system = (SYSTEM_FROM == name) && region_id.isNull() && position.isNull();
- if(chat_from_system)
+ if (chat_from_system)
{
// System's UUID is NULL (fixes EXT-4766)
chat.mFromID = LLUUID::null;
@@ -1482,9 +1550,9 @@ void LLIMProcessing::processNewMessage(LLUUID from_id,
if (from_group)
{
query_string["groupowned"] = "true";
- }
+ }
-// chat.mURL = LLSLURL("objectim", session_id, "").getSLURLString();
+// chat.mURL = LLSLURL("objectim", session_id, "").getSLURLString();
// [SL:KB] - Checked: 2010-11-02 (RLVa-1.2.2a) | Added: RLVa-1.2.2a
chat.mURL = LLSLURL("objectim", session_id, LLURI::mapToQueryString(query_string)).getSLURLString();
// [/SL:KB]
@@ -1503,7 +1571,7 @@ void LLIMProcessing::processNewMessage(LLUUID from_id,
//LLFloaterIMNearbyChat* nearby_chat = LLFloaterReg::getTypedInstance("nearby_chat");
FSFloaterNearbyChat* nearby_chat = FSFloaterNearbyChat::getInstance();
// [FS communication UI]
- if(!chat_from_system && nearby_chat)
+ if (!chat_from_system && nearby_chat)
{
chat.mOwnerID = from_id;
LLSD args;
@@ -1525,7 +1593,7 @@ void LLIMProcessing::processNewMessage(LLUUID from_id,
//Object IMs send with from name: 'Second Life' need to be displayed also in notification toasts (EXT-1590)
if (!chat_from_system) break;
-
+
LLSD substitutions;
substitutions["NAME"] = name;
substitutions["MSG"] = message;
@@ -1546,128 +1614,128 @@ void LLIMProcessing::processNewMessage(LLUUID from_id,
}
break;
- case IM_SESSION_SEND: // ad-hoc or group IMs
+ case IM_SESSION_SEND: // ad-hoc or group IMs
- // Only show messages if we have a session open (which
- // should happen after you get an "invitation"
+ // Only show messages if we have a session open (which
+ // should happen after you get an "invitation"
// [SL:KB] - Patch: Chat-GroupSnooze | Checked: 2012-06-16 (Catznip-3.3)
- //if ( !gIMMgr->hasSession(session_id) )
- if ( (!gIMMgr->hasSession(session_id)) &&
- ( (!gAgent.isInGroup(session_id)) || (!gIMMgr->checkSnoozeExpiration(session_id)) || LLAvatarActions::isBlocked(from_id) || (!gIMMgr->restoreSnoozedSession(session_id)) ) )
+ //if ( !gIMMgr->hasSession(session_id) )
+ if ( (!gIMMgr->hasSession(session_id)) &&
+ ( (!gAgent.isInGroup(session_id)) || (!gIMMgr->checkSnoozeExpiration(session_id)) || LLAvatarActions::isBlocked(from_id) || (!gIMMgr->restoreSnoozedSession(session_id)) ) )
// [/SL:KB]
- {
- return;
- }
-
- else if (offline == IM_ONLINE && is_do_not_disturb)
- {
-
- // return a standard "do not disturb" message, but only do it to online IM
- // (i.e. not other auto responses and not store-and-forward IM)
- if (!gIMMgr->hasSession(session_id))
{
- // if there is not a panel for this conversation (i.e. it is a new IM conversation
- // initiated by the other party) then...
- send_do_not_disturb_message(gMessageSystem, from_id, session_id);
+ return;
}
- // now store incoming IM in chat history
-
- buffer = message;
-
- LL_DEBUGS("Messaging") << "message in dnd; session_id( " << session_id << " ), from_id( " << from_id << " )" << LL_ENDL;
-
- // add to IM panel, but do not bother the user
- gIMMgr->addMessage(
- session_id,
- from_id,
- name,
- buffer,
- IM_OFFLINE == offline,
- ll_safe_string((char*)binary_bucket),
- IM_SESSION_INVITE,
- parent_estate_id,
- region_id,
- position,
- true);
- }
- else
- {
-
- // FIRE-10178: Keyword Alerts in group IM do not work unless the group is in the foreground (notification on receipt of IM)
- chat.mText = message;
- bool keyword_alert_performed = false;
- if (FSKeywords::getInstance()->chatContainsKeyword(chat, false))
+ else if (offline == IM_ONLINE && is_do_not_disturb)
{
- FSKeywords::notify(chat);
- keyword_alert_performed = true;
- }
- //
- // standard message, not from system
- std::string saved;
- if(offline == IM_OFFLINE)
+ // return a standard "do not disturb" message, but only do it to online IM
+ // (i.e. not other auto responses and not store-and-forward IM)
+ if (!gIMMgr->hasSession(session_id))
+ {
+ // if there is not a panel for this conversation (i.e. it is a new IM conversation
+ // initiated by the other party) then...
+ send_do_not_disturb_message(gMessageSystem, from_id, session_id);
+ }
+
+ // now store incoming IM in chat history
+
+ buffer = message;
+
+ LL_DEBUGS("Messaging") << "message in dnd; session_id( " << session_id << " ), from_id( " << from_id << " )" << LL_ENDL;
+
+ // add to IM panel, but do not bother the user
+ gIMMgr->addMessage(
+ session_id,
+ from_id,
+ name,
+ buffer,
+ IM_OFFLINE == offline,
+ ll_safe_string((char*)binary_bucket),
+ IM_SESSION_INVITE,
+ parent_estate_id,
+ region_id,
+ position,
+ true);
+ }
+ else
{
- saved = llformat("(Saved %s) ", formatted_time(timestamp).c_str());
+
+ // FIRE-10178: Keyword Alerts in group IM do not work unless the group is in the foreground (notification on receipt of IM)
+ chat.mText = message;
+ bool keyword_alert_performed = false;
+ if (FSKeywords::getInstance()->chatContainsKeyword(chat, false))
+ {
+ FSKeywords::notify(chat);
+ keyword_alert_performed = true;
+ }
+ //
+
+ // standard message, not from system
+ std::string saved;
+ if (offline == IM_OFFLINE)
+ {
+ saved = llformat("(Saved %s) ", formatted_time(timestamp).c_str());
+ }
+
+ buffer = saved + message;
+
+ LL_DEBUGS("Messaging") << "standard message session_id( " << session_id << " ), from_id( " << from_id << " )" << LL_ENDL;
+
+ gIMMgr->addMessage(
+ session_id,
+ from_id,
+ name,
+ buffer,
+ IM_OFFLINE == offline,
+ ll_safe_string((char*)binary_bucket),
+ IM_SESSION_INVITE,
+ parent_estate_id,
+ region_id,
+ position,
+ true,
+ false,
+ keyword_alert_performed);
}
+ break;
- buffer = saved + message;
+ case IM_FROM_TASK_AS_ALERT:
+ if (is_do_not_disturb && !is_owned_by_me)
+ {
+ return;
+ }
+ {
+ // Construct a viewer alert for this message.
+ args["NAME"] = name;
+ args["MESSAGE"] = message;
+ LLNotificationsUtil::add("ObjectMessage", args);
+ }
+ break;
+ case IM_DO_NOT_DISTURB_AUTO_RESPONSE:
+ if (is_muted)
+ {
+ LL_DEBUGS("Messaging") << "Ignoring do-not-disturb response from " << from_id << LL_ENDL;
+ return;
+ }
+ else
+ {
+ // FIRE-12908: Add busy response indicator back to busy messages
+ //gIMMgr->addMessage(session_id, from_id, name, message);
+ buffer = llformat("(%s): %s", LLTrans::getString("BusyResponse").c_str(), message.c_str());
+ gIMMgr->addMessage(session_id, from_id, name, buffer);
+ //
+ }
+ break;
- LL_DEBUGS("Messaging") << "standard message session_id( " << session_id << " ), from_id( " << from_id << " )" << LL_ENDL;
-
- gIMMgr->addMessage(
- session_id,
- from_id,
- name,
- buffer,
- IM_OFFLINE == offline,
- ll_safe_string((char*)binary_bucket),
- IM_SESSION_INVITE,
- parent_estate_id,
- region_id,
- position,
- true,
- false,
- keyword_alert_performed);
- }
- break;
-
- case IM_FROM_TASK_AS_ALERT:
- if (is_do_not_disturb && !is_owned_by_me)
- {
- return;
- }
- {
- // Construct a viewer alert for this message.
- args["NAME"] = name;
- args["MESSAGE"] = message;
- LLNotificationsUtil::add("ObjectMessage", args);
- }
- break;
- case IM_DO_NOT_DISTURB_AUTO_RESPONSE:
- if (is_muted)
- {
- LL_DEBUGS("Messaging") << "Ignoring do-not-disturb response from " << from_id << LL_ENDL;
- return;
- }
- else
- {
- // FIRE-12908: Add busy response indicator back to busy messages
- //gIMMgr->addMessage(session_id, from_id, name, message);
- buffer = llformat("(%s): %s", LLTrans::getString("BusyResponse").c_str(), message.c_str());
- gIMMgr->addMessage(session_id, from_id, name, buffer);
- //
- }
- break;
-
- case IM_LURE_USER:
- case IM_TELEPORT_REQUEST:
+ case IM_LURE_USER:
+ case IM_TELEPORT_REQUEST:
{
// [RLVa:KB] - Checked: RLVa-1.4.9
// If we auto-accept the offer/request then this will override DnD status (but we'll still let the other party know later)
bool fRlvAutoAccept = (rlv_handler_t::isEnabled()) &&
( ((IM_LURE_USER == dialog) && (RlvActions::autoAcceptTeleportOffer(from_id))) ||
- ((IM_TELEPORT_REQUEST == dialog) && (RlvActions::autoAcceptTeleportRequest(from_id))) );
+ ((IM_TELEPORT_REQUEST == dialog) && (RlvActions::autoAcceptTeleportRequest(from_id))) );
// [/RLVa:KB]
if (is_muted)
@@ -1687,7 +1755,7 @@ void LLIMProcessing::processNewMessage(LLUUID from_id,
//
else
{
-// if (is_do_not_disturb)
+// if (is_do_not_disturb)
// [RLVa:KB] - Checked: RLVa-1.4.9
if ( (is_do_not_disturb) && (!fRlvAutoAccept) )
// [/RLVa:KB]
@@ -1701,7 +1769,7 @@ void LLIMProcessing::processNewMessage(LLUUID from_id,
std::string region_info = ll_safe_string((char*)binary_bucket, binary_bucket_size);
std::string region_access_str = LLStringUtil::null;
std::string region_access_icn = LLStringUtil::null;
- std::string region_access_lc = LLStringUtil::null;
+ std::string region_access_lc = LLStringUtil::null;
bool canUserAccessDstRegion = true;
bool doesUserRequireMaturityIncrease = false;
@@ -1711,39 +1779,39 @@ void LLIMProcessing::processNewMessage(LLUUID from_id,
{
region_access_str = LLViewerRegion::accessToString(region_access);
region_access_icn = LLViewerRegion::getAccessIcon(region_access);
- region_access_lc = region_access_str;
+ region_access_lc = region_access_str;
LLStringUtil::toLower(region_access_lc);
if (!gAgent.isGodlike())
{
switch (region_access)
{
- case SIM_ACCESS_MIN :
- case SIM_ACCESS_PG :
- break;
- case SIM_ACCESS_MATURE :
- if (gAgent.isTeen())
- {
- canUserAccessDstRegion = false;
- }
- else if (gAgent.prefersPG())
- {
- doesUserRequireMaturityIncrease = true;
- }
- break;
- case SIM_ACCESS_ADULT :
- if (!gAgent.isAdult())
- {
- canUserAccessDstRegion = false;
- }
- else if (!gAgent.prefersAdult())
- {
- doesUserRequireMaturityIncrease = true;
- }
- break;
- default :
- llassert(0);
- break;
+ case SIM_ACCESS_MIN:
+ case SIM_ACCESS_PG:
+ break;
+ case SIM_ACCESS_MATURE:
+ if (gAgent.isTeen())
+ {
+ canUserAccessDstRegion = false;
+ }
+ else if (gAgent.prefersPG())
+ {
+ doesUserRequireMaturityIncrease = true;
+ }
+ break;
+ case SIM_ACCESS_ADULT:
+ if (!gAgent.isAdult())
+ {
+ canUserAccessDstRegion = false;
+ }
+ else if (!gAgent.prefersAdult())
+ {
+ doesUserRequireMaturityIncrease = true;
+ }
+ break;
+ default:
+ llassert(0);
+ break;
}
}
}
@@ -1752,7 +1820,7 @@ void LLIMProcessing::processNewMessage(LLUUID from_id,
if (rlv_handler_t::isEnabled())
{
if ( ((IM_LURE_USER == dialog) && (!RlvActions::canAcceptTpOffer(from_id))) ||
- ((IM_TELEPORT_REQUEST == dialog) && (!RlvActions::canAcceptTpRequest(from_id))) )
+ ((IM_TELEPORT_REQUEST == dialog) && (!RlvActions::canAcceptTpRequest(from_id))) )
{
RlvUtil::sendBusyMessage(from_id, RlvStrings::getString(RLV_STRING_BLOCKED_TPLUREREQ_REMOTE));
if (is_do_not_disturb)
@@ -1762,7 +1830,7 @@ void LLIMProcessing::processNewMessage(LLUUID from_id,
// Censor message if: 1) restricted from receiving IMs from the sender, or 2) teleport offer/request and @showloc=n restricted
if ( (!RlvActions::canReceiveIM(from_id)) ||
- ((gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC)) && (IM_LURE_USER == dialog || IM_TELEPORT_REQUEST == dialog)) )
+ ((gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC)) && (IM_LURE_USER == dialog || IM_TELEPORT_REQUEST == dialog)) )
{
message = RlvStrings::getString(RLV_STRING_HIDDEN);
}
@@ -1800,7 +1868,7 @@ void LLIMProcessing::processNewMessage(LLUUID from_id,
LLNotification::Params params("TeleportOffered_MaturityBlocked");
params.substitutions = args;
params.payload = payload;
- LLPostponedNotification::add( params, from_id, false);
+ LLPostponedNotification::add(params, from_id, false);
send_simple_im(from_id, LLTrans::getString("TeleportMaturityExceeded"), IM_NOTHING_SPECIAL, session_id);
send_simple_im(from_id, LLStringUtil::null, IM_LURE_DECLINED, session_id);
}
@@ -1809,7 +1877,7 @@ void LLIMProcessing::processNewMessage(LLUUID from_id,
LLNotification::Params params("TeleportOffered_MaturityExceeded");
params.substitutions = args;
params.payload = payload;
- LLPostponedNotification::add( params, from_id, false);
+ LLPostponedNotification::add(params, from_id, false);
}
else
{
@@ -1842,13 +1910,13 @@ void LLIMProcessing::processNewMessage(LLUUID from_id,
LLPostponedNotification::add(params, from_id, false);
}
// [/RLVa:KB]
-// LLPostponedNotification::add(params, from_id, false);
+// LLPostponedNotification::add(params, from_id, false);
}
}
}
break;
- case IM_GODLIKE_LURE_USER:
+ case IM_GODLIKE_LURE_USER:
{
LLVector3 pos, look_at;
U64 region_handle(0);
@@ -1856,7 +1924,7 @@ void LLIMProcessing::processNewMessage(LLUUID from_id,
std::string region_info = ll_safe_string((char*)binary_bucket, binary_bucket_size);
std::string region_access_str = LLStringUtil::null;
std::string region_access_icn = LLStringUtil::null;
- std::string region_access_lc = LLStringUtil::null;
+ std::string region_access_lc = LLStringUtil::null;
bool canUserAccessDstRegion = true;
bool doesUserRequireMaturityIncrease = false;
@@ -1865,39 +1933,39 @@ void LLIMProcessing::processNewMessage(LLUUID from_id,
{
region_access_str = LLViewerRegion::accessToString(region_access);
region_access_icn = LLViewerRegion::getAccessIcon(region_access);
- region_access_lc = region_access_str;
+ region_access_lc = region_access_str;
LLStringUtil::toLower(region_access_lc);
if (!gAgent.isGodlike())
{
switch (region_access)
{
- case SIM_ACCESS_MIN :
- case SIM_ACCESS_PG :
- break;
- case SIM_ACCESS_MATURE :
- if (gAgent.isTeen())
- {
- canUserAccessDstRegion = false;
- }
- else if (gAgent.prefersPG())
- {
- doesUserRequireMaturityIncrease = true;
- }
- break;
- case SIM_ACCESS_ADULT :
- if (!gAgent.isAdult())
- {
- canUserAccessDstRegion = false;
- }
- else if (!gAgent.prefersAdult())
- {
- doesUserRequireMaturityIncrease = true;
- }
- break;
- default :
- llassert(0);
- break;
+ case SIM_ACCESS_MIN:
+ case SIM_ACCESS_PG:
+ break;
+ case SIM_ACCESS_MATURE:
+ if (gAgent.isTeen())
+ {
+ canUserAccessDstRegion = false;
+ }
+ else if (gAgent.prefersPG())
+ {
+ doesUserRequireMaturityIncrease = true;
+ }
+ break;
+ case SIM_ACCESS_ADULT:
+ if (!gAgent.isAdult())
+ {
+ canUserAccessDstRegion = false;
+ }
+ else if (!gAgent.prefersAdult())
+ {
+ doesUserRequireMaturityIncrease = true;
+ }
+ break;
+ default:
+ llassert(0);
+ break;
}
}
}
@@ -1920,7 +1988,7 @@ void LLIMProcessing::processNewMessage(LLUUID from_id,
LLNotification::Params params("TeleportOffered_MaturityBlocked");
params.substitutions = args;
params.payload = payload;
- LLPostponedNotification::add( params, from_id, false);
+ LLPostponedNotification::add(params, from_id, false);
send_simple_im(from_id, LLTrans::getString("TeleportMaturityExceeded"), IM_NOTHING_SPECIAL, session_id);
send_simple_im(from_id, LLStringUtil::null, IM_LURE_DECLINED, session_id);
}
@@ -1929,18 +1997,18 @@ void LLIMProcessing::processNewMessage(LLUUID from_id,
LLNotification::Params params("TeleportOffered_MaturityExceeded");
params.substitutions = args;
params.payload = payload;
- LLPostponedNotification::add( params, from_id, false);
+ LLPostponedNotification::add(params, from_id, false);
}
else
{
- // do not show a message box, because you're about to be
- // teleported.
- LLNotifications::instance().forceResponse(LLNotification::Params("TeleportOffered").payload(payload), 0);
- }
+ // do not show a message box, because you're about to be
+ // teleported.
+ LLNotifications::instance().forceResponse(LLNotification::Params("TeleportOffered").payload(payload), 0);
+ }
}
break;
- case IM_GOTO_URL:
+ case IM_GOTO_URL:
{
LLSD args;
// n.b. this is for URLs sent by the system, not for
@@ -1960,11 +2028,11 @@ void LLIMProcessing::processNewMessage(LLUUID from_id,
args["URL"] = url;
LLSD payload;
payload["url"] = url;
- LLNotificationsUtil::add("GotoURL", args, payload );
+ LLNotificationsUtil::add("GotoURL", args, payload);
}
break;
- case IM_FRIENDSHIP_OFFERED:
+ case IM_FRIENDSHIP_OFFERED:
{
// FIRE-15233: Automatic friendship request refusal
@@ -2011,37 +2079,37 @@ void LLIMProcessing::processNewMessage(LLUUID from_id,
if (add_notification)
{
- if(message.empty())
- {
- //support for frienship offers from clients before July 2008
+ if (message.empty())
+ {
+ //support for frienship offers from clients before July 2008
LLNotificationsUtil::add("OfferFriendshipNoMessage", args, payload);
make_ui_sound("UISndFriendshipOffer"); // Friendship offer sound
- }
- else
- {
- args["[MESSAGE]"] = message;
- LLNotification::Params params("OfferFriendship");
- params.substitutions = args;
- params.payload = payload;
- LLPostponedNotification::add( params, from_id, false);
- make_ui_sound("UISndFriendshipOffer"); // Friendship offer sound
+ }
+ else
+ {
+ args["[MESSAGE]"] = message;
+ LLNotification::Params params("OfferFriendship");
+ params.substitutions = args;
+ params.payload = payload;
+ LLPostponedNotification::add(params, from_id, false);
+ make_ui_sound("UISndFriendshipOffer"); // Friendship offer sound
+ }
}
}
}
- }
break;
- case IM_FRIENDSHIP_ACCEPTED:
+ case IM_FRIENDSHIP_ACCEPTED:
{
// In the case of an offline IM, the formFriendship() may be extraneous
// as the database should already include the relationship. But it
// doesn't hurt for dupes.
LLAvatarTracker::formFriendship(from_id);
-
+
std::vector strings;
strings.push_back(from_id.asString());
send_generic_message("requestonlinenotification", strings);
-
+
args["NAME"] = name;
LLSD payload;
payload["from_id"] = from_id;
@@ -2049,11 +2117,11 @@ void LLIMProcessing::processNewMessage(LLUUID from_id,
}
break;
- case IM_FRIENDSHIP_DECLINED_DEPRECATED:
- default:
- LL_WARNS("Messaging") << "Instant message calling for unknown dialog "
+ case IM_FRIENDSHIP_DECLINED_DEPRECATED:
+ default:
+ LL_WARNS("Messaging") << "Instant message calling for unknown dialog "
<< (S32)dialog << LL_ENDL;
- break;
+ break;
}
LLWindow* viewer_window = gViewerWindow->getWindow();
@@ -2082,7 +2150,7 @@ void LLIMProcessing::requestOfflineMessages()
// Auto-accepted inventory items may require the avatar object
// to build a correct name. Likewise, inventory offers from
// muted avatars require the mute list to properly mute.
- if (cap_url.empty())
+ if (cap_url.empty() || !gSavedSettings.getBOOL("FSUseReadOfflineMsgsCap"))
{
requestOfflineMessagesLegacy();
}
@@ -2109,7 +2177,7 @@ void LLIMProcessing::requestOfflineMessagesCoro(std::string url)
if (!status) // success = httpResults["success"].asBoolean();
{
- LL_WARNS() << "Error requesting offline messages via capability " << url << ", Status: " << status.toString() << "\nFalling back to legacy method." << LL_ENDL;
+ LL_WARNS("Messaging") << "Error requesting offline messages via capability " << url << ", Status: " << status.toString() << "\nFalling back to legacy method." << LL_ENDL;
requestOfflineMessagesLegacy();
return;
@@ -2119,10 +2187,11 @@ void LLIMProcessing::requestOfflineMessagesCoro(std::string url)
if (!contents.size())
{
- LL_WARNS() << "No contents received for offline messages via capability " << url << LL_ENDL;
+ LL_WARNS("Messaging") << "No contents received for offline messages via capability " << url << LL_ENDL;
return;
}
+ // Todo: once dirtsim-369 releases, remove one of the map/array options
LLSD messages;
if (contents.isArray())
{
@@ -2134,16 +2203,24 @@ void LLIMProcessing::requestOfflineMessagesCoro(std::string url)
}
else
{
- LL_WARNS() << "Invalid offline message content received via capability " << url << LL_ENDL;
+ LL_WARNS("Messaging") << "Invalid offline message content received via capability " << url << LL_ENDL;
return;
}
if (!messages.isArray())
{
- LL_WARNS() << "Invalid offline message content received via capability " << url << LL_ENDL;
+ LL_WARNS("Messaging") << "Invalid offline message content received via capability " << url << LL_ENDL;
return;
}
+ if (messages.emptyArray())
+ {
+ // Nothing to process
+ return;
+ }
+
+ LL_INFOS("Messaging") << "Processing offline messages." << LL_ENDL;
+
std::vector data;
S32 binary_bucket_size = 0;
LLHost sender = gAgent.getRegion()->getHost();
@@ -2153,17 +2230,29 @@ void LLIMProcessing::requestOfflineMessagesCoro(std::string url)
for (; i != iEnd; ++i)
{
const LLSD &message_data(*i);
+
LLVector3 position(message_data["local_x"].asReal(), message_data["local_y"].asReal(), message_data["local_z"].asReal());
data = message_data["binary_bucket"].asBinary();
- binary_bucket_size = data.size(); // message_data["count"] == data.size() - 1 due to ('\0')
- U32 parent_estate_id = message_data.has("parent_estate_id") ? message_data["ParentEstateID"].asInteger() : 1; // 1 - IMMainland
+ binary_bucket_size = data.size(); // message_data["count"] always 0
+ U32 parent_estate_id = message_data.has("parent_estate_id") ? message_data["parent_estate_id"].asInteger() : 1; // 1 - IMMainland
+
+ // Todo: once dirtsim-369 releases, remove one of the int/str options
+ BOOL from_group;
+ if (message_data["from_group"].isInteger())
+ {
+ from_group = message_data["from_group"].asInteger();
+ }
+ else
+ {
+ from_group = message_data["from_group"].asString() == "Y";
+ }
LLIMProcessing::processNewMessage(message_data["from_agent_id"].asUUID(),
- message_data["from_group"].asInteger(), // BOOL
+ from_group,
message_data["to_agent_id"].asUUID(),
IM_OFFLINE,
(EInstantMessage)message_data["dialog"].asInteger(),
- message_data["session_id"].asUUID(),
+ LLUUID::null, // session id, fix this for friendship offers to work
message_data["timestamp"].asInteger(),
message_data["from_agent_name"].asString(),
message_data["message"].asString(),
@@ -2172,12 +2261,15 @@ void LLIMProcessing::requestOfflineMessagesCoro(std::string url)
position,
&data[0],
binary_bucket_size,
- sender);
+ sender,
+ message_data["asset_id"].asUUID()); // not necessarily an asset
}
}
void LLIMProcessing::requestOfflineMessagesLegacy()
{
+ LL_INFOS("Messaging") << "Requesting offline messages (Legacy)." << LL_ENDL;
+
LLMessageSystem* msg = gMessageSystem;
msg->newMessageFast(_PREHASH_RetrieveInstantMessages);
msg->nextBlockFast(_PREHASH_AgentData);
diff --git a/indra/newview/llimprocessing.h b/indra/newview/llimprocessing.h
index eadf34ded7..4d20b963a4 100644
--- a/indra/newview/llimprocessing.h
+++ b/indra/newview/llimprocessing.h
@@ -47,7 +47,8 @@ public:
LLVector3 position,
U8 *binary_bucket,
S32 binary_bucket_size,
- LLHost &sender);
+ LLHost &sender,
+ LLUUID aux_id = LLUUID::null);
// Either receives list of offline messages from 'ReadOfflineMsgs' capability
// or uses legacy method
diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp
index 2236e52c02..73c3b8cb9c 100644
--- a/indra/newview/llinventorypanel.cpp
+++ b/indra/newview/llinventorypanel.cpp
@@ -1230,7 +1230,7 @@ void LLInventoryPanel::onSelectionChange(const std::deque& it
{
if(prev_folder_item)
{
- LLFolderBridge* prev_bridge = (LLFolderBridge*)prev_folder_item->getViewModelItem();
+ LLFolderBridge* prev_bridge = static_cast(prev_folder_item->getViewModelItem());
if(prev_bridge)
{
prev_bridge->clearDisplayName();
@@ -1239,7 +1239,7 @@ void LLInventoryPanel::onSelectionChange(const std::deque& it
}
}
- LLFolderBridge* bridge = (LLFolderBridge*)folder_item->getViewModelItem();
+ LLFolderBridge* bridge = static_cast(folder_item->getViewModelItem());
if(bridge)
{
bridge->clearDisplayName();
@@ -1254,7 +1254,7 @@ void LLInventoryPanel::onSelectionChange(const std::deque& it
{
if(prev_folder_item)
{
- LLFolderBridge* prev_bridge = (LLFolderBridge*)prev_folder_item->getViewModelItem();
+ LLFolderBridge* prev_bridge = static_cast(prev_folder_item->getViewModelItem());
if(prev_bridge)
{
prev_bridge->clearDisplayName();
diff --git a/indra/newview/llmediactrl.cpp b/indra/newview/llmediactrl.cpp
index 53a7c5bf4b..fd909578d5 100644
--- a/indra/newview/llmediactrl.cpp
+++ b/indra/newview/llmediactrl.cpp
@@ -827,21 +827,6 @@ void LLMediaCtrl::draw()
S32 x_offset, y_offset, width, height;
calcOffsetsAndSize(&x_offset, &y_offset, &width, &height);
-#if 0
- // Flip Y-Axis of media texture
- U32 mode = gGL.getMatrixMode();
- gGL.matrixMode(LLRender::MM_TEXTURE0);
-
- F32 aMatrix[16] = { 1.0f, 0.0f, 0.0f, 0.0f,
- 0.0f, -1.0f, 0.0f, 0.0f,
- 0.0f, 0.0f, 1.0f, 0.0f,
- 0.0f, max_v, 0.0f, 1.0f
- };
- gGL.pushMatrix();
- gGL.loadMatrix( aMatrix );
- gGL.matrixMode(mode);
- //
-#endif
// draw the browser
// Remove QUADS rendering mode
//gGL.begin( LLRender::QUADS );
@@ -894,13 +879,6 @@ void LLMediaCtrl::draw()
gGL.vertex2i( x_offset + width, y_offset );
}
gGL.end();
-#if 0
- // Restore matrix for texture 0
- gGL.matrixMode(LLRender::MM_TEXTURE0);
- gGL.popMatrix();
- gGL.matrixMode( mode );
- //
-#endif
}
gGL.popUIMatrix();
diff --git a/indra/newview/llmediadataclient.cpp b/indra/newview/llmediadataclient.cpp
index bd8f464acd..2cd1423aa4 100644
--- a/indra/newview/llmediadataclient.cpp
+++ b/indra/newview/llmediadataclient.cpp
@@ -204,7 +204,7 @@ bool LLMediaDataClient::isInQueue(const LLMediaDataClientObject::ptr_t &object)
if (std::find_if(mUnQueuedRequests.begin(), mUnQueuedRequests.end(), upred) != mUnQueuedRequests.end())
return true;
- return false;
+ return false;
}
void LLMediaDataClient::removeFromQueue(const LLMediaDataClientObject::ptr_t &object)
@@ -815,14 +815,14 @@ bool LLObjectMediaDataClient::isEmpty() const
bool LLObjectMediaDataClient::isInQueue(const LLMediaDataClientObject::ptr_t &object)
{
- // First, call parent impl.
- if(LLMediaDataClient::isInQueue(object))
- return true;
+ // First, call parent impl.
+ if(LLMediaDataClient::isInQueue(object))
+ return true;
if (std::find_if(mRoundRobinQueue.begin(), mRoundRobinQueue.end(), PredicateMatchRequest(object->getID())) != mRoundRobinQueue.end())
return true;
- return false;
+ return false;
}
void LLObjectMediaDataClient::removeFromQueue(const LLMediaDataClientObject::ptr_t &object)
diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index bf4b01e111..c5f77e09e6 100644
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -557,6 +557,13 @@ void set_flags_and_update_appearance()
// true when all initialization done.
bool idle_startup()
{
+ if (gViewerWindow == NULL)
+ {
+ // We expect window to be initialized
+ LL_WARNS_ONCE() << "gViewerWindow is not initialized" << LL_ENDL;
+ return false; // No world yet
+ }
+
const F32 PRECACHING_DELAY = gSavedSettings.getF32("PrecachingDelay");
static LLTimer timeout;
@@ -643,6 +650,11 @@ bool idle_startup()
gSavedSettings.setString("FSInternalSkinCurrentTheme", gSavedSettings.getString("FSSkinCurrentThemeReadableName"));
//
+ // Notification not showing if hiding the UI
+ gSavedSettings.setBOOL("FSInternalShowNavbarNavigationPanel", gSavedSettings.getBOOL("ShowNavbarNavigationPanel"));
+ gSavedSettings.setBOOL("FSInternalShowNavbarFavoritesPanel", gSavedSettings.getBOOL("ShowNavbarFavoritesPanel"));
+ //
+
if (LLFeatureManager::getInstance()->isSafe())
{
LLNotificationsUtil::add("DisplaySetToSafe");
diff --git a/indra/newview/llviewercontrol.cpp b/indra/newview/llviewercontrol.cpp
index 56e2e6e8db..c3af18796d 100644
--- a/indra/newview/llviewercontrol.cpp
+++ b/indra/newview/llviewercontrol.cpp
@@ -919,6 +919,14 @@ void handleStaticEyesChanged()
}
//
+// Notification not showing if hiding the UI
+void handleNavbarSettingsChanged()
+{
+ gSavedSettings.setBOOL("FSInternalShowNavbarNavigationPanel", gSavedSettings.getBOOL("ShowNavbarNavigationPanel"));
+ gSavedSettings.setBOOL("FSInternalShowNavbarFavoritesPanel", gSavedSettings.getBOOL("ShowNavbarFavoritesPanel"));
+}
+//
+
// FIRE-20288: Option to render friends only
void handleRenderFriendsOnlyChanged(const LLSD& newvalue)
{
@@ -1167,6 +1175,11 @@ void settings_setup_listeners()
// FIRE-20288: Option to render friends only
gSavedPerAccountSettings.getControl("FSRenderFriendsOnly")->getSignal()->connect(boost::bind(&handleRenderFriendsOnlyChanged, _2));
+
+ // Notification not showing if hiding the UI
+ gSavedSettings.getControl("ShowNavbarFavoritesPanel")->getSignal()->connect(boost::bind(&handleNavbarSettingsChanged));
+ gSavedSettings.getControl("ShowNavbarNavigationPanel")->getSignal()->connect(boost::bind(&handleNavbarSettingsChanged));
+ //
}
#if TEST_CACHED_CONTROL
diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp
index b22e5cc32f..c3d79bf143 100644
--- a/indra/newview/llviewerobject.cpp
+++ b/indra/newview/llviewerobject.cpp
@@ -2709,20 +2709,24 @@ void LLViewerObject::interpolateLinearMotion(const F64SecondsImplicit& time, con
// Extrapolation across region boundaries is almost always wrong, and if the region being
// entered is slow to respond, very wrong.
// Probably don't need edge of world check below any more since we are clipping the predictor to the region.
- bool clipped; // true if clipped at boundary
- LLVector3d clip_pos_global_region = LLWorld::getInstance()->clipToRegion(mRegionp,old_pos_global, new_pos_global, clipped);
- if (clipped)
+ static LLCachedControl fsExperimentalRegionCrossingMovementFix(gSavedSettings, "FSExperimentalRegionCrossingMovementFix");
+ if (fsExperimentalRegionCrossingMovementFix)
{
- // Was clipped, so we crossed a region boundary
- //LL_INFOS() << "Beyond region edge, clipped predicted position to " << mRegionp->getPosRegionFromGlobal(clip_pos_global_region)
- // << " from [" << getPositionRegion() << " .. " << new_pos << "]" << LL_ENDL;
- new_pos = mRegionp->getPosRegionFromGlobal(clip_pos_global_region);
- // Don't zero out velocity on the server. Telling the server affects scripts and audio.
- //new_v.clear();
- //setAcceleration(LLVector3::zero); // stop linear acceleration
- LLVector3 new_angv;
- new_angv.clear();
- setAngularVelocity(new_angv); // stop rotation
+ bool clipped; // true if clipped at boundary
+ LLVector3d clip_pos_global_region = LLWorld::getInstance()->clipToRegion(mRegionp, old_pos_global, new_pos_global, clipped);
+ if (clipped)
+ {
+ // Was clipped, so we crossed a region boundary
+ //LL_INFOS() << "Beyond region edge, clipped predicted position to " << mRegionp->getPosRegionFromGlobal(clip_pos_global_region)
+ // << " from [" << getPositionRegion() << " .. " << new_pos << "]" << LL_ENDL;
+ new_pos = mRegionp->getPosRegionFromGlobal(clip_pos_global_region);
+ // Don't zero out velocity on the server. Telling the server affects scripts and audio.
+ //new_v.clear();
+ //setAcceleration(LLVector3::zero); // stop linear acceleration
+ LLVector3 new_angv;
+ new_angv.clear();
+ setAngularVelocity(new_angv); // stop rotation
+ }
}
//
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index 834ac005bb..c4b8ca1cb9 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -6856,6 +6856,10 @@ void LLViewerWindow::setUIVisibility(bool visible)
// Notification not showing if hiding the UI
FSNearbyChat::instance().showDefaultChatBar(visible && !gSavedSettings.getBOOL("AutohideChatBar"));
+ gSavedSettings.setBOOL("FSInternalShowNavbarNavigationPanel", visible && gSavedSettings.getBOOL("ShowNavbarNavigationPanel"));
+ gSavedSettings.setBOOL("FSInternalShowNavbarFavoritesPanel", visible && gSavedSettings.getBOOL("ShowNavbarFavoritesPanel"));
+ mRootView->getChildView("chiclet_container")->setVisible(visible);
+ //
// Is done inside XUI now, using visibility_control
//LLNavigationBar::getInstance()->setVisible(visible ? gSavedSettings.getBOOL("ShowNavbarNavigationPanel") : FALSE);
diff --git a/indra/newview/llvoicevivox.cpp b/indra/newview/llvoicevivox.cpp
index 52efde86dc..77c55cd10d 100644
--- a/indra/newview/llvoicevivox.cpp
+++ b/indra/newview/llvoicevivox.cpp
@@ -785,7 +785,10 @@ bool LLVivoxVoiceClient::callbackEndDaemon(const LLSD& data)
bool LLVivoxVoiceClient::startAndLaunchDaemon()
{
//---------------------------------------------------------------------
- if (!voiceEnabled())
+ // Bypass cached controls
+ //if (!voiceEnabled())
+ if (!voiceEnabled(true))
+ //
{
// Voice is locked out, we must not launch the vivox daemon.
return false;
diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp
index 2e8f764b34..0ffcb95f4d 100644
--- a/indra/newview/llvovolume.cpp
+++ b/indra/newview/llvovolume.cpp
@@ -4918,11 +4918,6 @@ bool can_batch_texture(LLFace* facep)
{ //texture animation breaks batches
return false;
}
-
- if( facep->mTextureMatrix &&
- ( ( facep->getTextureEntry() && facep->getTextureEntry()->hasMedia() ) ||
- ( facep->getTexture() && facep->getTexture()->getType() == LLViewerTexture::MEDIA_TEXTURE ) ) )
- return false;
return true;
}
@@ -5036,13 +5031,6 @@ void LLVolumeGeometryManager::registerFace(LLSpatialGroup* group, LLFace* facep,
tex_mat = facep->mTextureMatrix;
}
- // CEF: if this is a face with media, then use the texture matrix to flip the texture
- if( facep->mTextureMatrix &&
- ( ( facep->getTextureEntry() && facep->getTextureEntry()->hasMedia() ) ||
- ( facep->getTexture() && facep->getTexture()->getType() == LLViewerTexture::MEDIA_TEXTURE ) ) )
- tex_mat = facep->mTextureMatrix;
- //
-
const LLMatrix4* model_mat = NULL;
LLDrawable* drawable = facep->getDrawable();
diff --git a/indra/newview/llworld.cpp b/indra/newview/llworld.cpp
index 3392a75a2d..ee2aca23e1 100644
--- a/indra/newview/llworld.cpp
+++ b/indra/newview/llworld.cpp
@@ -787,6 +787,8 @@ LLVector3d LLWorld::clipToVisibleRegions(const LLVector3d &start_pos, const LLVe
// If start_pos is outside the region, use start_pos.
LLVector3d LLWorld::clipToRegion(const LLViewerRegion* regionp, const LLVector3d &start_pos, const LLVector3d &end_pos, bool &clipped)
{
+ static LLCachedControl fsExperimentalRegionCrossingMovementFix(gSavedSettings, "FSExperimentalRegionCrossingMovementFix");
+
clipped = false; // no clipping yet
if (!regionp) // no region. We're lost
{
@@ -808,8 +810,9 @@ LLVector3d LLWorld::clipToRegion(const LLViewerRegion* regionp, const LLVector3d
//
F32 region_width = regionp->getWidth();
// FIRE-21915: Fix bogus avatar movement on region crossing
- if (region_coord_start.mV[VX] < 0.f || region_coord_start.mV[VX] > region_width
- || region_coord_start.mV[VY] < 0.f || region_coord_start.mV[VY] > region_width)
+ if (fsExperimentalRegionCrossingMovementFix &&
+ (region_coord_start.mV[VX] < 0.f || region_coord_start.mV[VX] > region_width
+ || region_coord_start.mV[VY] < 0.f || region_coord_start.mV[VY] > region_width))
{
clip_factor = 1.0; // start pos outside region, use start pos
}
@@ -853,8 +856,14 @@ LLVector3d LLWorld::clipToRegion(const LLViewerRegion* regionp, const LLVector3d
clip_factor = (region_coord.mV[VY] - region_width) / delta_pos_abs.mdV[VY];
}
// FIRE-21915: Fix bogus avatar movement on region crossing
- if (!std::isfinite(clip_factor)) { clip_factor = 0.0; } // avoid NaN problems
- clip_factor = llclamp(clip_factor, 0.0, 1.0); // avoid overflow problem
+ if (!std::isfinite(clip_factor))
+ {
+ clip_factor = 0.0; // avoid NaN problems
+ }
+ else
+ {
+ clip_factor = llclamp(clip_factor, 0.0, 1.0); // avoid overflow problem
+ }
}
//
@@ -868,21 +877,36 @@ LLVector3d LLWorld::clipToRegion(const LLViewerRegion* regionp, const LLVector3d
//final_region_pos.mdV[VZ] = llclamp(final_region_pos.mdV[VZ], 0.0,
// (F64)(LLWorld::getInstance()->getRegionMaxHeight() - F_ALMOST_ZERO));
- // True if clipped. Caller needs to know, because it will kill velocity if there's clipping
- // Don't do this by comparing floating point numbers for equality. That has roundoff problems.
- clipped = clip_factor > F_ALMOST_ZERO; // clipped in X or Y
- LLVector3d final_region_pos = LLVector3d(region_coord) - (delta_pos * clip_factor);
- clipped |= final_region_pos.mdV[VX] < -F_ALMOST_ZERO || final_region_pos.mdV[VX] > (F64)(region_width - F_ALMOST_ZERO);
- clipped |= final_region_pos.mdV[VY] < -F_ALMOST_ZERO || final_region_pos.mdV[VY] > (F64)(region_width - F_ALMOST_ZERO);
- clipped |= final_region_pos.mdV[VZ] < -F_ALMOST_ZERO || final_region_pos.mdV[VZ] > (F64)(LLWorld::getInstance()->getRegionMaxHeight() - F_ALMOST_ZERO); // if actually clipping
- // Final sanity check - don't allow positions more than clamp_range out of region.
- F64 clamp_range = region_width / 2.0; // half a region width
- final_region_pos.mdV[VX] = llclamp(final_region_pos.mdV[VX], -clamp_range,
- (F64)(region_width + clamp_range));
- final_region_pos.mdV[VY] = llclamp(final_region_pos.mdV[VY], -clamp_range,
- (F64)(region_width + clamp_range));
- final_region_pos.mdV[VZ] = llclamp(final_region_pos.mdV[VZ], 0.0,
- (F64)(LLWorld::getInstance()->getRegionMaxHeight() - F_ALMOST_ZERO));
+ LLVector3d final_region_pos;
+ if (fsExperimentalRegionCrossingMovementFix)
+ {
+ // True if clipped. Caller needs to know, because it will kill velocity if there's clipping
+ // Don't do this by comparing floating point numbers for equality. That has roundoff problems.
+ clipped = clip_factor > F_ALMOST_ZERO; // clipped in X or Y
+ final_region_pos = LLVector3d(region_coord) - (delta_pos * clip_factor);
+ clipped |= final_region_pos.mdV[VX] < -F_ALMOST_ZERO || final_region_pos.mdV[VX] > (F64)(region_width - F_ALMOST_ZERO);
+ clipped |= final_region_pos.mdV[VY] < -F_ALMOST_ZERO || final_region_pos.mdV[VY] > (F64)(region_width - F_ALMOST_ZERO);
+ clipped |= final_region_pos.mdV[VZ] < -F_ALMOST_ZERO || final_region_pos.mdV[VZ] > (F64)(LLWorld::getInstance()->getRegionMaxHeight() - F_ALMOST_ZERO); // if actually clipping
+ // Final sanity check - don't allow positions more than clamp_range out of region.
+ F64 clamp_range = region_width / 2.0; // half a region width
+ final_region_pos.mdV[VX] = llclamp(final_region_pos.mdV[VX], -clamp_range,
+ (F64)(region_width + clamp_range));
+ final_region_pos.mdV[VY] = llclamp(final_region_pos.mdV[VY], -clamp_range,
+ (F64)(region_width + clamp_range));
+ final_region_pos.mdV[VZ] = llclamp(final_region_pos.mdV[VZ], 0.0,
+ (F64)(LLWorld::getInstance()->getRegionMaxHeight() - F_ALMOST_ZERO));
+ }
+ else
+ {
+ // clamp to within region dimensions
+ final_region_pos = LLVector3d(region_coord) - (delta_pos * clip_factor);
+ final_region_pos.mdV[VX] = llclamp(final_region_pos.mdV[VX], 0.0,
+ (F64)(region_width - F_ALMOST_ZERO));
+ final_region_pos.mdV[VY] = llclamp(final_region_pos.mdV[VY], 0.0,
+ (F64)(region_width - F_ALMOST_ZERO));
+ final_region_pos.mdV[VZ] = llclamp(final_region_pos.mdV[VZ], 0.0,
+ (F64)(LLWorld::getInstance()->getRegionMaxHeight() - F_ALMOST_ZERO));
+ }
//
return regionp->getPosGlobalFromRegion(LLVector3(final_region_pos));
}
diff --git a/indra/newview/llxmlrpctransaction.cpp b/indra/newview/llxmlrpctransaction.cpp
index 143c97fca4..d48c0eb9b8 100644
--- a/indra/newview/llxmlrpctransaction.cpp
+++ b/indra/newview/llxmlrpctransaction.cpp
@@ -367,7 +367,7 @@ void LLXMLRPCTransaction::Impl::init(XMLRPC_REQUEST request, bool useGzip, const
mCertStore = gSavedSettings.getString("CertStore");
httpOpts->setSSLVerifyPeer( vefifySSLCert );
- httpOpts->setSSLVerifyHost( vefifySSLCert ? 2 : 0);
+ httpOpts->setSSLVerifyHost( vefifySSLCert );
// LLRefCounted starts with a 1 ref, so don't add a ref in the smart pointer
httpHeaders = LLCore::HttpHeaders::ptr_t(new LLCore::HttpHeaders());
diff --git a/indra/newview/skins/default/xui/en/floater_my_appearance.xml b/indra/newview/skins/default/xui/en/floater_my_appearance.xml
index c2a5943982..6dd3a45602 100644
--- a/indra/newview/skins/default/xui/en/floater_my_appearance.xml
+++ b/indra/newview/skins/default/xui/en/floater_my_appearance.xml
@@ -13,7 +13,7 @@
reuse_instance="true"
title="Appearance"
min_height="200"
- min_width="325"
+ min_width="351"
width="333">
@@ -216,7 +216,7 @@
height="15"
layout="topleft"
name="favorites_bar_visibility_panel"
- visibility_control="ShowNavbarFavoritesPanel"
+ visibility_control="FSInternalShowNavbarFavoritesPanel"
auto_resize="false">
@@ -216,7 +216,7 @@
height="15"
layout="topleft"
name="favorites_bar_visibility_panel"
- visibility_control="ShowNavbarFavoritesPanel"
+ visibility_control="FSInternalShowNavbarFavoritesPanel"
auto_resize="true">
@@ -227,7 +227,7 @@
height="15"
layout="topleft"
name="favorites_bar_visibility_panel"
- visibility_control="ShowNavbarFavoritesPanel"
+ visibility_control="FSInternalShowNavbarFavoritesPanel"
auto_resize="false">
@@ -225,7 +225,7 @@
height="15"
layout="topleft"
name="favorites_bar_visibility_panel"
- visibility_control="ShowNavbarFavoritesPanel"
+ visibility_control="FSInternalShowNavbarFavoritesPanel"
auto_resize="false">
Remove VMP
#['-type', 'f', '!', '-name', '*.py', '!', '-name', 'SL_Launcher',
- ['-type', 'f', '!',
+ ['-type', 'f', "!", "-name", "*.dat", "!", "-name", "*.pak", "!", "-name", "*.bin",
# Remove VMP
'!', '-name', 'update_install', '-exec', 'strip', '-S', '{}', ';'])