diff --git a/autobuild.xml b/autobuild.xml index 5f781b7dbf..1feb6a8ee3 100644 --- a/autobuild.xml +++ b/autobuild.xml @@ -222,9 +222,9 @@ archive hash - 8a19ebfac2b8ad690ef406ae55d13fe3 + 2dd97d8bd012be4cdc58f550395feb7d url - http://downloads.phoenixviewer.com/SDL-1.2.15-linux-201605221913-r44.tar.bz2 + http://downloads.phoenixviewer.com/SDL-1.2.15-linux-180871815.tar.bz2 name linux @@ -234,9 +234,9 @@ archive hash - 2566e373b89a2e4f8e93a78948deda10 + 608dfd27f7aed9d57cf1f581c995b680 url - http://downloads.phoenixviewer.com/SDL-1.2.15-linux-x64-201509062227-r43.tar.bz2 + http://downloads.phoenixviewer.com/SDL-1.2.15-linux64-180841947.tar.bz2 name linux64 @@ -288,9 +288,9 @@ archive hash - 1aa2e5355bb9df09f9196d14a72b6705 + 161e07b37e2f30da004a0d72d5075ad7 url - http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-apr/rev/314241/arch/Linux/installer/apr_suite-1.4.5.314241-linux-314241.tar.bz2 + http://downloads.phoenixviewer.com/apr_suite-1.4.5.180871344-linux-180871344.tar.bz2 name linux @@ -300,9 +300,9 @@ archive hash - e640dcbc376eec6f3a942b4625d92d8e + 5c3c29851edd837d5f9518618c4a303b url - http://downloads.phoenixviewer.com/apr_suite-1.4.5.201505150215-r92-linux-x64-201505150215-r92.tar.bz2 + http://downloads.phoenixviewer.com/apr_suite-1.4.5.180841559-linux64-180841559.tar.bz2 name linux64 @@ -378,9 +378,9 @@ archive hash - 5ff95c28897a7bb4da93bd4f5b3d9d06 + 32828f4ee3e5a45ed31e37eb7dd6367c url - http://downloads.phoenixviewer.com/boost-1.57-linux-201505061539-r135.tar.bz2 + http://downloads.phoenixviewer.com/boost-1.57-linux-180871354.tar.bz2 name linux @@ -390,9 +390,9 @@ archive hash - e86cc6e004d39d7210f708b39bed77a9 + b1d3daab689c5a8c8869715c5111d38e url - http://downloads.phoenixviewer.com/boost-1.57-linux-x64-201505150230-r138.tar.bz2 + http://downloads.phoenixviewer.com/boost-1.57-linux64-180841628.tar.bz2 name linux64 @@ -496,9 +496,9 @@ archive hash - f73cbdc220605119cf5f1b0c42d3bb9c + d83896f28716f34b7b49d61a23283c4c url - http://downloads.phoenixviewer.com/colladadom-2.3.201505061613-r94-linux-201505061613-r94.tar.bz2 + http://downloads.phoenixviewer.com/colladadom-2.3.180871403-linux-180871403.tar.bz2 name linux @@ -508,9 +508,9 @@ archive hash - 0f3447ce6fddba79b54cb5959e95f330 + 91a522a7bf0e8d66d2941c76dc28a261 url - http://downloads.phoenixviewer.com/colladadom-2.3.201505150238-r95-linux-x64-201505150238-r95.tar.bz2 + http://downloads.phoenixviewer.com/colladadom-2.3.180841822-linux64-180841822.tar.bz2 name linux64 @@ -586,9 +586,9 @@ archive hash - 9430c08954c00736117099046694e1b1 + cade3843dfd7985f008cc8161daaefb0 url - http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-curl/rev/314230/arch/Linux/installer/curl-7.47.0.314230-linux-314230.tar.bz2 + http://downloads.phoenixviewer.com/curl-7.54.1.180871811-linux-180871811.tar.bz2 name linux @@ -598,9 +598,9 @@ archive hash - 630a2ddf43bba6e5b6e171dc68921dcb + 51d9ce98279709854b0be5d0f450ba63 url - http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/8663/36142/curl-7.54.1.508652-linux64-508652.tar.bz2 + http://downloads.phoenixviewer.com/curl-7.54.1.180841943-linux64-180841943.tar.bz2 name linux64 @@ -684,9 +684,9 @@ archive hash - 6d676abd9ad8d2883b855dbe397d9034 + 9591dcb7efce2a770d77e907705e1492 url - http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-dbus-glib/rev/314266/arch/Linux/installer/dbus_glib-0.76-linux-314266.tar.bz2 + http://downloads.phoenixviewer.com/dbus_glib-0.76-linux-180871236.tar.bz2 name linux @@ -696,9 +696,9 @@ archive hash - 7ee7b9aed3c0c8c09e7bf26bba7af8e1 + 5a685a65a7066937ef580dcd5a90f9dc url - http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-dbus-glib/rev/314266/arch/Linux/installer/dbus_glib-0.76-linux64-314266.tar.bz2 + http://downloads.phoenixviewer.com/dbus_glib-0.76-linux64-180841549.tar.bz2 name linux64 @@ -768,9 +768,9 @@ archive hash - efc92b20a8170ab4f4d3f88c03c6cb9b + bd0f62a03d846332adf07997e307cde6 url - http://192.168.1.115/dev/pkg/dullahan-1.1.651_3.2987.1591.gd3e47f5-linux-171011511.tar.bz2 + http://downloads.phoenixviewer.com/dullahan-1.1.1080_3.3325.1750.gaabe4c4-linux-180871715.tar.bz2 name linux @@ -780,9 +780,9 @@ archive hash - 331c13dfd261f867884308f15d9952bc + 6dded97d697c5ac9e4bd33c9ca8e3f9e url - http://192.168.1.115/dev/pkg/dullahan-1.1.651_3.2987.1591.gd3e47f5-linux64-171011518.tar.bz2 + http://downloads.phoenixviewer.com/dullahan-1.1.1080_3.3325.1750.gaabe4c4-linux64-180861548.tar.bz2 name linux64 @@ -882,9 +882,9 @@ archive hash - 387c90b9bb5ec412587fbe7a56261dd1 + b20e813b55488e43df5c197f1efd165c url - http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-expat/rev/314211/arch/Linux/installer/expat-2.1.1.314211-linux-314211.tar.bz2 + http://downloads.phoenixviewer.com/expat-2.1.1.180871203-linux-180871203.tar.bz2 name linux @@ -894,9 +894,9 @@ archive hash - 5e1f025d1cebd12db542080aa755257f + bbcfe77b920fb7f00c7f2a494ffc6c43 url - http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/380/943/expat-2.1.1.500375-linux64-500375.tar.bz2 + http://downloads.phoenixviewer.com/expat-2.1.1.180841547-linux64-180841547.tar.bz2 name linux64 @@ -962,11 +962,11 @@ archive hash - eccdcb4a1e96bb829284d01255f4f913 + a379240b46b13b2b9e858baa79d1a6ab hash_algorithm md5 url - file:///opt/firestorm/fmodstudio-1.10.02-linux-201801091647.tar.bz2 + file:///opt/firestorm/fmodstudio-1.10.04-linux-180891813.tar.bz2 name linux @@ -976,11 +976,11 @@ archive hash - 8787b777a49d41ccbb3cbd6c4a1d768d + e0b59ec3b5549b9a0f9caf8c7116af4e hash_algorithm md5 url - file:///opt/firestorm/fmodstudio-1.10.02-linux-x64-201801091648.tar.bz2 + file:///opt/firestorm/fmodstudio-1.10.04-linux64-180891838.tar.bz2 name linux64 @@ -1088,9 +1088,9 @@ archive hash - a20a3d0ab7fc3401bc2ca81e9309f630 + f7a2a70417ab9d2f999f80604cb4fa48 url - http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-fontconfig/rev/314281/arch/Linux/installer/fontconfig-2.11.0-linux-314281.tar.bz2 + http://downloads.phoenixviewer.com/fontconfig-2.11.0-linux-180871443.tar.bz2 name linux @@ -1100,9 +1100,9 @@ archive hash - e2419d56960c160670051fbb055fb729 + 5818ed2d9b29bad00878f3e26b09b7f9 url - http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-fontconfig/rev/314281/arch/Linux/installer/fontconfig-2.11.0-linux64-314281.tar.bz2 + http://downloads.phoenixviewer.com/fontconfig-2.11.0-linux64-180841833.tar.bz2 name linux64 @@ -1154,9 +1154,9 @@ archive hash - 1b401394106cedc86926bd488f5aa45e + ced1bc8b28a2e87093b364c2b6d8cb9c url - http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-freetype/rev/314215/arch/Linux/installer/freetype-2.4.4.314215-linux-314215.tar.bz2 + http://downloads.phoenixviewer.com/freetype-2.4.4.180871412-linux-180871412.tar.bz2 name linux @@ -1166,9 +1166,9 @@ archive hash - b30634f1a6ee2b4940eee06267a607df + 0dab99c682433145aa8f5e26d8940afd url - http://downloads.phoenixviewer.com/freetype-2.3.9.201505150242-r61-linux-x64-201505150242-r61.tar.bz2 + http://downloads.phoenixviewer.com/freetype-2.4.4.180841832-linux64-180841832.tar.bz2 name linux64 @@ -1220,9 +1220,9 @@ archive hash - baf1fd13e1fe6aef586200fc87a70f53 + da432b959ccd920adca1030ad7f1b6cf url - http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-glext/rev/314200/arch/Linux/installer/glext-68-linux-314200.tar.bz2 + http://downloads.phoenixviewer.com/glext-68-linux-180871251.tar.bz2 name linux @@ -1232,9 +1232,9 @@ archive hash - 5f3c9d61b620f949b199ebd8885218ed + 12b2d643a013be8297bbbe37743abe94 url - http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-glext/rev/314200/arch/Linux/installer/glext-68-linux64-314200.tar.bz2 + http://downloads.phoenixviewer.com/glext-68-linux64-180841554.tar.bz2 name linux64 @@ -1342,11 +1342,11 @@ archive hash - f62e7cff14feb646babaa19b7ea14ed3 + 4aa53f9774195899efb9d14a0f6c4748 hash_algorithm md5 url - http://downloads.phoenixviewer.com/glod-1.0pre3.201704302344-linux-201704302344.tar.bz2 + http://downloads.phoenixviewer.com/glod-1.0pre3.180872225-linux-180872225.tar.bz2 name linux @@ -1356,9 +1356,9 @@ archive hash - fea16abf8c2b7f38fc33a2142bfbfe18 + c742c8b3903aadd79c3a6f3d3c09986d url - http://downloads.phoenixviewer.com/glod-1.0pre3.201704302331-linux64-201704302331.tar.bz2 + http://downloads.phoenixviewer.com/glod-1.0pre3.180842253-linux64-180842253.tar.bz2 name linux64 @@ -1436,9 +1436,9 @@ archive hash - 352e673897e8f36f8470150b8ace6ce9 + 95860763e872e984e4215b0fa22d40b8 url - http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-google-breakpad/rev/314225/arch/Linux/installer/google_breakpad-1413.314225-linux-314225.tar.bz2 + http://downloads.phoenixviewer.com/google_breakpad-1413.180871249-linux-180871249.tar.bz2 name linux @@ -1448,9 +1448,9 @@ archive hash - f8df27382e6afeee5408e85c010a6c86 + aa4a74b0c5794034797f22d4bdc57a0d url - http://downloads.phoenixviewer.com/google_breakpad-1413.201505150223-r95-linux-x64-201505150223-r95.tar.bz2 + http://downloads.phoenixviewer.com/google_breakpad-1413.180841553-linux64-180841553.tar.bz2 name linux64 @@ -1526,9 +1526,9 @@ archive hash - ad51f68702f25ba245fff312c50c8876 + 5bc5ddeb97b8498d5141e27092161323 url - http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-googlemock/rev/317828/arch/Linux/installer/googlemock-1.7.0.317828-linux-317828.tar.bz2 + http://downloads.phoenixviewer.com/googlemock-1.7.0.180871704-linux-180871704.tar.bz2 name linux @@ -1538,9 +1538,9 @@ archive hash - 0f606bf01f933f00edeb9bf9a2530930 + f879f518ea207cecf13943d58b57b515 url - http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/918/2056/googlemock-1.7.0.500908-linux64-500908.tar.bz2 + http://downloads.phoenixviewer.com/googlemock-1.7.0.180841921-linux64-180841921.tar.bz2 name linux64 @@ -1590,9 +1590,9 @@ archive hash - 5017b3e95d2c6f47bb111c3f9c075522 + 904540d91ea7d577c7bcbb679621f013 url - http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-gstreamer/rev/314267/arch/Linux/installer/gstreamer-0.10.6.314267-linux-314267.tar.bz2 + http://downloads.phoenixviewer.com/gstreamer-0.10.6.180871246-linux-180871246.tar.bz2 name linux @@ -1602,9 +1602,9 @@ archive hash - 7c9d7cc88add7831a6afeedc20cad2fe + 86a358f1b5a2c2baf68444b2bfc5bb32 url - http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-gstreamer/rev/314267/arch/Linux/installer/gstreamer-0.10.6.314267-linux64-314267.tar.bz2 + http://downloads.phoenixviewer.com/gstreamer-0.10.6.180841551-linux64-180841551.tar.bz2 name linux64 @@ -1630,9 +1630,9 @@ archive hash - 8cd64b4c5d7f02c5ad87051861108749 + fb047d496c32cc3b9f99793ee6ebb1e3 url - http://downloads.phoenixviewer.com/gtk_atk_pango_glib-2.0-linux-201608031222.tar.bz2 + http://downloads.phoenixviewer.com/gtk_atk_pango_glib-2.1-linux-180871647.tar.bz2 name linux @@ -1642,16 +1642,16 @@ archive hash - 61a10409052c7f77cbfe30b7a8cd7c0b + d918d894430c1d1d869b9f2e06570c65 url - http://downloads.phoenixviewer.com/gtk_atk_pango_glib-2.0-linux-x64-201505151700-r5.tar.bz2 + http://downloads.phoenixviewer.com/gtk_atk_pango_glib-2.1-linux64-180841902.tar.bz2 name linux64 version - 0.1 + 2.1 havok-source @@ -1816,9 +1816,9 @@ archive hash - 32560d3200da72fea2922371fcef25f5 + a7039c9a9c4461c5f85542f068dc09e5 url - http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-jpeglib/rev/314202/arch/Linux/installer/jpeglib-8c.314202-linux-314202.tar.bz2 + http://downloads.phoenixviewer.com/jpeglib-8c.180871203-linux-180871203.tar.bz2 name linux @@ -1828,9 +1828,9 @@ archive hash - 8b36861396af4a31668f673aebd4b1d8 + 324bb9deb00d256a12f8cbf686f413f0 url - http://downloads.phoenixviewer.com/jpeglib-8c.201505150200-r27-linux-x64-201505150200-r27.tar.bz2 + http://downloads.phoenixviewer.com/jpeglib-8c.180841548-linux64-180841548.tar.bz2 name linux64 @@ -1906,9 +1906,9 @@ archive hash - 9d5d9fec28cbbb1651b95728173f8af7 + da45220ec6fcf945f6ca1f11bc7606cf url - http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-jsoncpp/rev/314229/arch/Linux/installer/jsoncpp-0.5.0.314229-linux-314229.tar.bz2 + http://downloads.phoenixviewer.com/jsoncpp-0.5.0.180872045-linux-180872045.tar.bz2 name linux @@ -1918,9 +1918,9 @@ archive hash - e10077e94fa6916b6da001fc52e15ed6 + 724850830e01cdb6afb4eed9ce2ec6c5 url - http://downloads.phoenixviewer.com/jsoncpp-0.5.0.201508041908-r34-linux-x64-201508041908-r34.tar.bz2 + http://downloads.phoenixviewer.com/jsoncpp-0.5.0.180841554-linux64-180841554.tar.bz2 name linux64 @@ -1972,9 +1972,9 @@ archive hash - 75991f598df209713faf94b4a1cb1a89 + 814bec3fa5045a18dce2bc4ce78b585d url - file:///opt/firestorm/kdu-7.A.3-darwin-180711129.tar.bz2 + file:///opt/firestorm/kdu-7.A.4-darwin-180792321.tar.bz2 name darwin @@ -1984,9 +1984,9 @@ archive hash - 75991f598df209713faf94b4a1cb1a89 + 814bec3fa5045a18dce2bc4ce78b585d url - file:///opt/firestorm/kdu-7.A.3-darwin-180711129.tar.bz2 + file:///opt/firestorm/kdu-7.A.4-darwin-180792321.tar.bz2 name darwin64 @@ -1996,9 +1996,9 @@ archive hash - 1c4e11f6ca7cdc2a3e5158eda7a432be + fa8a0db7f4900663f5d58eaac2b782b5 url - file:///opt/firestorm/kdu-7.9.1-linux-201703182157.tar.bz2 + file:///opt/firestorm/kdu-7.A.4-linux-180892203.tar.bz2 name linux @@ -2008,9 +2008,9 @@ archive hash - 1c4e11f6ca7cdc2a3e5158eda7a432be + fa8a0db7f4900663f5d58eaac2b782b5 url - file:///opt/firestorm/kdu-7.9.1-linux-201703182157.tar.bz2 + file:///opt/firestorm/kdu-7.A.4-linux-180892203.tar.bz2 name linux64 @@ -2086,9 +2086,9 @@ archive hash - 0d8009c3b6c1eb510593476dd1d821b5 + 77996d95cf2f072f4f277a2aaff20456 url - http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-hunspell/rev/314217/arch/Linux/installer/libhunspell-1.3.2.314217-linux-314217.tar.bz2 + http://downloads.phoenixviewer.com/libhunspell-1.3.2.180871248-linux-180871248.tar.bz2 name linux @@ -2098,9 +2098,9 @@ archive hash - 7341037efcf156ad7aa6ba67ab0413c5 + 6555f040c686d8c1dec8e6264c2d3672 url - http://downloads.phoenixviewer.com/libhunspell-1.3.2.201505150222-r21-linux-x64-201505150222-r21.tar.bz2 + http://downloads.phoenixviewer.com/libhunspell-1.3.2.180841552-linux64-180841552.tar.bz2 name linux64 @@ -2242,9 +2242,9 @@ archive hash - 0758f3cb4c02ebab61854b811b0894e9 + 31754947447ec98374b3bf92e29cf68a url - http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-libpng/rev/314214/arch/Linux/installer/libpng-1.6.8.314214-linux-314214.tar.bz2 + http://downloads.phoenixviewer.com/libpng-1.6.8.180871343-linux-180871343.tar.bz2 name linux @@ -2254,9 +2254,9 @@ archive hash - 96cccc9c256107ff8425e15647957f17 + 83ae55031f81dace9dcf688cc5510010 url - http://downloads.phoenixviewer.com/libpng-1.6.8.201505150228-r52-linux-x64-201505150228-r52.tar.bz2 + http://downloads.phoenixviewer.com/libpng-1.6.8.180841558-linux64-180841558.tar.bz2 name linux64 @@ -2308,9 +2308,9 @@ archive hash - a2eaf9515cd129f3e21a08e92689006b + 1b1d83df165c947bea5c60c460277f93 url - http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-libuuid/rev/314269/arch/Linux/installer/libuuid-1.6.2-linux-314269.tar.bz2 + http://downloads.phoenixviewer.com/libuuid-1.6.2-linux-180871203.tar.bz2 name linux @@ -2320,9 +2320,9 @@ archive hash - 6eca8418f134d2f4d97de89a33773be3 + f3cc32c84b99f1277370ce88a0faf40e url - http://downloads.phoenixviewer.com/libuuid-1.6.2-linux-x64-201505150200-r8.tar.bz2 + http://downloads.phoenixviewer.com/libuuid-1.6.2-linux64-180841554.tar.bz2 name linux64 @@ -2374,9 +2374,9 @@ archive hash - 6954173a141d928f2614076577d952de + b4e676d3d583264f006432510727aa05 url - http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-libxml/rev/314197/arch/Linux/installer/libxml2-2.9.1.314197-linux-314197.tar.bz2 + http://downloads.phoenixviewer.com/libxml2-2.9.4.180871340-linux-180871340.tar.bz2 name linux @@ -2386,9 +2386,9 @@ archive hash - ba36cdab49fd5f3f5158cd6719a84a90 + 0bc56fa68f59537486c75b04646d65a9 url - http://downloads.phoenixviewer.com/libxml2-2.9.1.201505150226-r42-linux-x64-201505150226-r42.tar.bz2 + http://downloads.phoenixviewer.com/libxml2-2.9.4.180841555-linux64-180841555.tar.bz2 name linux64 @@ -2694,9 +2694,9 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors archive hash - 079c1a1bdb3ce1cda8ce3d7f75eeced3 + 24c50d563fe8ff10ca819088ffbef7a6 url - http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/9258/41585/nghttp2-1.25.0.509246-linux-509246.tar.bz2 + http://downloads.phoenixviewer.com/nghttp2-1.25.0.180871240-linux-180871240.tar.bz2 name linux @@ -2706,9 +2706,9 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors archive hash - c3c5ff7d2f7ac1143ef8d888192d4a53 + b460d5bac2d20b38cb73b54d0ab1b6e3 url - http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/9257/41579/nghttp2-1.25.0.509246-linux64-509246.tar.bz2 + http://downloads.phoenixviewer.com/nghttp2-1.25.0.180841549-linux64-180841549.tar.bz2 name linux64 @@ -2828,9 +2828,9 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors archive hash - 5c9d94dce4551b19790057766ff939ea + ee185657aed3a7fcabcd9a1335a6050b url - http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-oggvorbis/rev/314224/arch/Linux/installer/ogg_vorbis-1.2.2-1.3.2.314224-linux-314224.tar.bz2 + http://downloads.phoenixviewer.com/ogg_vorbis-1.2.2-1.3.2.180871245-linux-180871245.tar.bz2 name linux @@ -2840,9 +2840,9 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors archive hash - a237c81b2c5fa3926ce04586568cce74 + ec5fd10d3a504e528b61d339522ca0f9 url - http://downloads.phoenixviewer.com/ogg_vorbis-1.2.2-1.3.2.201505150221-r32-linux-x64-201505150221-r32.tar.bz2 + http://downloads.phoenixviewer.com/ogg_vorbis-1.2.2-1.3.2.180841550-linux64-180841550.tar.bz2 name linux64 @@ -2894,9 +2894,9 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors archive hash - a0f11d381e6daf2b4352461a75c53e89 + 86cb59b79ce0aafe28d4055a17d1f748 url - http://downloads.phoenixviewer.com/open_libndofdev-0.8-linux-201605222023-r13.tar.bz2 + http://downloads.phoenixviewer.com/open_libndofdev-0.3.180871824-linux-180871824.tar.bz2 name linux @@ -2906,16 +2906,16 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors archive hash - 587567ef04c06b9bf746e3491dbcc556 + 4df349abfc942fb8e674244d1bd0a515 url - http://downloads.phoenixviewer.com/open_libndofdev-0.8-linux-x64-201602152224-r18.tar.bz2 + http://downloads.phoenixviewer.com/open_libndofdev-0.3.180841957-linux64-180841957.tar.bz2 name linux64 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', '{}', ';'])