summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/contributions.txt2
-rw-r--r--indra/llcommon/llversionviewer.h2
-rwxr-xr-xindra/llcrashlogger/llcrashlogger.cpp623
-rwxr-xr-xindra/llcrashlogger/llcrashlogger.h170
-rw-r--r--indra/newview/English.lproj/InfoPlist.strings4
-rw-r--r--indra/newview/Info-SecondLife.plist2
-rw-r--r--indra/newview/llpanellogin.cpp10
-rw-r--r--indra/newview/llurldispatcher.cpp6
-rw-r--r--indra/newview/llviewerparcelmgr.cpp6
-rwxr-xr-xindra/newview/viewer_manifest.py11
10 files changed, 429 insertions, 407 deletions
diff --git a/doc/contributions.txt b/doc/contributions.txt
index ca5c11bc48..74b316b3ec 100644
--- a/doc/contributions.txt
+++ b/doc/contributions.txt
@@ -257,6 +257,8 @@ Renault Clio
VWR-1976
Ryozu Kojima
VWR-287
+Scrippy Scofield
+ VWR-3748
Seg Baphomet
VWR-1475
VWR-1525
diff --git a/indra/llcommon/llversionviewer.h b/indra/llcommon/llversionviewer.h
index e041bc52a9..d051fa6043 100644
--- a/indra/llcommon/llversionviewer.h
+++ b/indra/llcommon/llversionviewer.h
@@ -35,7 +35,7 @@
const S32 LL_VERSION_MAJOR = 1;
const S32 LL_VERSION_MINOR = 18;
const S32 LL_VERSION_PATCH = 6;
-const S32 LL_VERSION_BUILD = 2;
+const S32 LL_VERSION_BUILD = 3;
const char * const LL_CHANNEL = "Second Life Release";
diff --git a/indra/llcrashlogger/llcrashlogger.cpp b/indra/llcrashlogger/llcrashlogger.cpp
index cec2b2e2e9..df446a7239 100755
--- a/indra/llcrashlogger/llcrashlogger.cpp
+++ b/indra/llcrashlogger/llcrashlogger.cpp
@@ -1,309 +1,314 @@
-/**
-* @file llcrashlogger.cpp
-* @brief Crash logger implementation
-*
-* $LicenseInfo:firstyear=2003&license=viewergpl$
-*
-* Copyright (c) 2003-2007, Linden Research, Inc.
-*
-* Second Life Viewer Source Code
-* The source code in this file ("Source Code") is provided by Linden Lab
-* to you under the terms of the GNU General Public License, version 2.0
-* ("GPL"), unless you have obtained a separate licensing agreement
-* ("Other License"), formally executed by you and Linden Lab. Terms of
-* the GPL can be found in doc/GPL-license.txt in this distribution, or
-* online at http://secondlife.com/developers/opensource/gplv2
-*
-* There are special exceptions to the terms and conditions of the GPL as
-* it is applied to this Source Code. View the full text of the exception
-* in the file doc/FLOSS-exception.txt in this software distribution, or
-* online at http://secondlife.com/developers/opensource/flossexception
-*
-* By copying, modifying or distributing this software, you acknowledge
-* that you have read and understood your obligations described above,
-* and agree to abide by those obligations.
-*
-* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
-* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
-* COMPLETENESS OR PERFORMANCE.
-* $/LicenseInfo$
-*/
-#include <cstdio>
-#include <cstdlib>
-#include <sstream>
-#include <map>
-
-#include "llcrashlogger.h"
-#include "linden_common.h"
-#include "llstring.h"
-#include "indra_constants.h" // CRASH_BEHAVIOR_ASK, CRASH_SETTING_NAME
-#include "llerror.h"
-#include "lltimer.h"
-#include "lldir.h"
-#include "llsdserialize.h"
-#include "lliopipe.h"
-#include "llpumpio.h"
-#include "llhttpclient.h"
-#include "llsdserialize.h"
-
-LLPumpIO* gServicePump;
-BOOL gBreak = false;
-BOOL gSent = false;
-
-class LLCrashLoggerResponder : public LLHTTPClient::Responder
-{
-public:
- LLCrashLoggerResponder()
- {
- }
-
- virtual void error(U32 status, const std::string& reason)
- {
- gBreak = true;
- }
-
- virtual void result(const LLSD& content)
- {
- gBreak = true;
- gSent = true;
- }
-};
-
-bool LLCrashLoggerText::mainLoop()
-{
- std::cout << "Entering main loop" << std::endl;
- sendCrashLogs();
- return true;
-}
-
-void LLCrashLoggerText::updateApplication(LLString message)
-{
- LLCrashLogger::updateApplication(message);
- std::cout << message << std::endl;
-}
-
-LLCrashLogger::LLCrashLogger() :
-mSentCrashLogs(false)
-{
-
-}
-
-LLCrashLogger::~LLCrashLogger()
-{
-
-}
-
-void LLCrashLogger::gatherFiles()
-{
-
- /*
- //TODO:This function needs to be reimplemented somewhere in here...
- if(!previous_crash && is_crash_log)
- {
- // Make sure the file isn't too old.
- double age = difftime(gLaunchTime, stat_data.st_mtimespec.tv_sec);
-
- // llinfos << "age is " << age << llendl;
-
- if(age > 60.0)
- {
- // The file was last modified more than 60 seconds before the crash reporter was launched. Assume it's stale.
- llwarns << "File " << mFilename << " is too old!" << llendl;
- return;
- }
- }
- */
-
- updateApplication("Gathering logs...");
-
- // Figure out the filename of the debug log
- LLString db_file_name = gDirUtilp->getExpandedFilename(LL_PATH_LOGS,"debug_info.log").c_str();
- std::ifstream debug_log_file(db_file_name.c_str());
-
- // Look for it in the debug_info.log file
- if (debug_log_file.is_open())
- {
- LLSDSerialize::fromXML(mDebugLog, debug_log_file);
- mFileMap["SecondLifeLog"] = mDebugLog["SLLog"].asString();
- mFileMap["SettingsXml"] = mDebugLog["SettingsFilename"].asString();
- LLHTTPClient::setCABundle(mDebugLog["CAFilename"].asString());
- llinfos << "Using log file from debug log " << mFileMap["SecondLifeLog"] << llendl;
- llinfos << "Using settings file from debug log " << mFileMap["SettingsXml"] << llendl;
- }
- else
- {
- // Figure out the filename of the second life log
- LLHTTPClient::setCABundle(gDirUtilp->getCAFile());
- mFileMap["SecondLifeLog"] = gDirUtilp->getExpandedFilename(LL_PATH_LOGS,"SecondLife.log");
- mFileMap["SettingsXml"] = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS,"settings.xml");
- }
-
- gatherPlatformSpecificFiles();
-
- //Use the debug log to reconstruct the URL to send the crash report to
- mCrashHost = "https://";
- mCrashHost += mDebugLog["CurrentSimHost"].asString();
- mCrashHost += ":12043/crash/report";
- mAltCrashHost = "https://";
- mAltCrashHost += mDebugLog["GridUtilHost"].asString();
- mAltCrashHost += ":12043/crash/report";
-
- mCrashInfo["DebugLog"] = mDebugLog;
- mFileMap["StatsLog"] = gDirUtilp->getExpandedFilename(LL_PATH_LOGS,"stats.log");
- mFileMap["StackTrace"] = gDirUtilp->getExpandedFilename(LL_PATH_LOGS,"stack_trace.log");
-
- updateApplication("Encoding files...");
-
- for(std::map<LLString, LLString>::iterator itr = mFileMap.begin(); itr != mFileMap.end(); ++itr)
- {
- std::ifstream f((*itr).second.c_str());
- if(!f.is_open())
- {
- std::cout << "Can't find file " << (*itr).second.c_str() << std::endl;
- continue;
- }
- std::stringstream s;
- s << f.rdbuf();
- mCrashInfo[(*itr).first] = s.str();
- }
-}
-
-LLSD LLCrashLogger::constructPostData()
-{
- LLSD ret;
-
- if(mCrashInPreviousExec)
- {
- mCrashInfo["CrashInPreviousExecution"] = "Y";
- }
-
- return mCrashInfo;
-}
-
-S32 LLCrashLogger::loadCrashBehaviorSetting()
-{
- std::string filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, CRASH_SETTINGS_FILE);
-
- mCrashSettings.loadFromFile(filename);
-
- S32 value = mCrashSettings.getS32(CRASH_BEHAVIOR_SETTING);
-
- if (value < CRASH_BEHAVIOR_ASK || CRASH_BEHAVIOR_NEVER_SEND < value) return CRASH_BEHAVIOR_ASK;
-
- return value;
-}
-
-bool LLCrashLogger::saveCrashBehaviorSetting(S32 crash_behavior)
-{
- if (crash_behavior < CRASH_BEHAVIOR_ASK) return false;
- if (crash_behavior > CRASH_BEHAVIOR_NEVER_SEND) return false;
-
- mCrashSettings.setS32(CRASH_BEHAVIOR_SETTING, crash_behavior);
- std::string filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, CRASH_SETTINGS_FILE);
-
- mCrashSettings.saveToFile(filename, FALSE);
-
- return true;
-}
-
-bool LLCrashLogger::sendCrashLogs()
-{
- gatherFiles();
-
- LLSD post_data;
- post_data = constructPostData();
-
- updateApplication("Sending reports...");
-
- std::string dump_path = gDirUtilp->getExpandedFilename(LL_PATH_LOGS,
- "SecondLifeCrashReport");
- std::string report_file = dump_path + ".log";
-
- std::ofstream out_file(report_file.c_str());
- LLSDSerialize::toPrettyXML(post_data, out_file);
- out_file.close();
- LLHTTPClient::post(mCrashHost, post_data, new LLCrashLoggerResponder(), 5);
-
- gBreak = false;
- while(!gBreak)
- {
- updateApplication("Sending logs...");
- }
-
- if(!gSent)
- {
- gBreak = false;
- LLHTTPClient::post(mAltCrashHost, post_data, new LLCrashLoggerResponder(), 5);
-
- while(!gBreak)
- {
- updateApplication("Sending logs to Alternate Server...");
- }
- }
- mSentCrashLogs = gSent;
-
- return true;
-}
-
-void LLCrashLogger::updateApplication(LLString message)
-{
- gServicePump->pump();
- gServicePump->callback();
-}
-
-bool LLCrashLogger::init()
-{
- // We assume that all the logs we're looking for reside on the current drive
- gDirUtilp->initAppDirs("SecondLife");
-
- // Default to the product name "Second Life" (this is overridden by the -name argument)
- mProductName = "Second Life";
-
- mCrashSettings.declareS32(CRASH_BEHAVIOR_SETTING, CRASH_BEHAVIOR_ASK, "Controls behavior when viewer crashes "
- "(0 = ask before sending crash report, 1 = always send crash report, 2 = never send crash report)");
-
- llinfos << "Loading crash behavior setting" << llendl;
- mCrashBehavior = loadCrashBehaviorSetting();
-
- //Run through command line options
- if(getOption("previous").isDefined())
- {
- llinfos << "Previous execution did not remove SecondLife.exec_marker" << llendl;
- mCrashInPreviousExec = TRUE;
- }
-
- if(getOption("dialog").isDefined())
- {
- llinfos << "Show the user dialog" << llendl;
- mCrashBehavior = CRASH_BEHAVIOR_ASK;
- }
-
- LLSD server = getOption("user");
- if(server.isDefined())
- {
- mGridName = server.asString();
- llinfos << "Got userserver " << mGridName << llendl;
- }
- else
- {
- mGridName = "agni";
- }
-
- LLSD name = getOption("name");
- if(name.isDefined())
- {
- mProductName = name.asString();
- }
-
- // If user doesn't want to send, bail out
- if (mCrashBehavior == CRASH_BEHAVIOR_NEVER_SEND)
- {
- llinfos << "Crash behavior is never_send, quitting" << llendl;
- return false;
- }
-
- gServicePump = new LLPumpIO(gAPRPoolp);
- gServicePump->prime(gAPRPoolp);
- LLHTTPClient::setPump(*gServicePump);
- return true;
-}
+/**
+* @file llcrashlogger.cpp
+* @brief Crash logger implementation
+*
+* $LicenseInfo:firstyear=2003&license=viewergpl$
+*
+* Copyright (c) 2003-2007, Linden Research, Inc.
+*
+* Second Life Viewer Source Code
+* The source code in this file ("Source Code") is provided by Linden Lab
+* to you under the terms of the GNU General Public License, version 2.0
+* ("GPL"), unless you have obtained a separate licensing agreement
+* ("Other License"), formally executed by you and Linden Lab. Terms of
+* the GPL can be found in doc/GPL-license.txt in this distribution, or
+* online at http://secondlife.com/developers/opensource/gplv2
+*
+* There are special exceptions to the terms and conditions of the GPL as
+* it is applied to this Source Code. View the full text of the exception
+* in the file doc/FLOSS-exception.txt in this software distribution, or
+* online at http://secondlife.com/developers/opensource/flossexception
+*
+* By copying, modifying or distributing this software, you acknowledge
+* that you have read and understood your obligations described above,
+* and agree to abide by those obligations.
+*
+* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+* COMPLETENESS OR PERFORMANCE.
+* $/LicenseInfo$
+*/
+#include <cstdio>
+#include <cstdlib>
+#include <sstream>
+#include <map>
+
+#include "llcrashlogger.h"
+#include "linden_common.h"
+#include "llstring.h"
+#include "indra_constants.h" // CRASH_BEHAVIOR_ASK, CRASH_SETTING_NAME
+#include "llerror.h"
+#include "lltimer.h"
+#include "lldir.h"
+#include "llsdserialize.h"
+#include "lliopipe.h"
+#include "llpumpio.h"
+#include "llhttpclient.h"
+#include "llsdserialize.h"
+
+LLPumpIO* gServicePump;
+BOOL gBreak = false;
+BOOL gSent = false;
+
+class LLCrashLoggerResponder : public LLHTTPClient::Responder
+{
+public:
+ LLCrashLoggerResponder()
+ {
+ }
+
+ virtual void error(U32 status, const std::string& reason)
+ {
+ gBreak = true;
+ }
+
+ virtual void result(const LLSD& content)
+ {
+ gBreak = true;
+ gSent = true;
+ }
+};
+
+bool LLCrashLoggerText::mainLoop()
+{
+ std::cout << "Entering main loop" << std::endl;
+ sendCrashLogs();
+ return true;
+}
+
+void LLCrashLoggerText::updateApplication(LLString message)
+{
+ LLCrashLogger::updateApplication(message);
+ std::cout << message << std::endl;
+}
+
+LLCrashLogger::LLCrashLogger() :
+mSentCrashLogs(false)
+{
+
+}
+
+LLCrashLogger::~LLCrashLogger()
+{
+
+}
+
+void LLCrashLogger::gatherFiles()
+{
+
+ /*
+ //TODO:This function needs to be reimplemented somewhere in here...
+ if(!previous_crash && is_crash_log)
+ {
+ // Make sure the file isn't too old.
+ double age = difftime(gLaunchTime, stat_data.st_mtimespec.tv_sec);
+
+ // llinfos << "age is " << age << llendl;
+
+ if(age > 60.0)
+ {
+ // The file was last modified more than 60 seconds before the crash reporter was launched. Assume it's stale.
+ llwarns << "File " << mFilename << " is too old!" << llendl;
+ return;
+ }
+ }
+ */
+
+ updateApplication("Gathering logs...");
+
+ // Figure out the filename of the debug log
+ LLString db_file_name = gDirUtilp->getExpandedFilename(LL_PATH_LOGS,"debug_info.log").c_str();
+ std::ifstream debug_log_file(db_file_name.c_str());
+
+ // Look for it in the debug_info.log file
+ if (debug_log_file.is_open())
+ {
+ LLSDSerialize::fromXML(mDebugLog, debug_log_file);
+ mFileMap["SecondLifeLog"] = mDebugLog["SLLog"].asString();
+ mFileMap["SettingsXml"] = mDebugLog["SettingsFilename"].asString();
+ LLHTTPClient::setCABundle(mDebugLog["CAFilename"].asString());
+ llinfos << "Using log file from debug log " << mFileMap["SecondLifeLog"] << llendl;
+ llinfos << "Using settings file from debug log " << mFileMap["SettingsXml"] << llendl;
+ }
+ else
+ {
+ // Figure out the filename of the second life log
+ LLHTTPClient::setCABundle(gDirUtilp->getCAFile());
+ mFileMap["SecondLifeLog"] = gDirUtilp->getExpandedFilename(LL_PATH_LOGS,"SecondLife.log");
+ mFileMap["SettingsXml"] = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS,"settings.xml");
+ }
+
+ gatherPlatformSpecificFiles();
+
+ //Use the debug log to reconstruct the URL to send the crash report to
+ mCrashHost = "https://";
+ mCrashHost += mDebugLog["CurrentSimHost"].asString();
+ mCrashHost += ":12043/crash/report";
+ mAltCrashHost = "https://";
+ mAltCrashHost += mDebugLog["GridUtilHost"].asString();
+ mAltCrashHost += ":12043/crash/report";
+
+ mCrashInfo["DebugLog"] = mDebugLog;
+ mFileMap["StatsLog"] = gDirUtilp->getExpandedFilename(LL_PATH_LOGS,"stats.log");
+ mFileMap["StackTrace"] = gDirUtilp->getExpandedFilename(LL_PATH_LOGS,"stack_trace.log");
+
+ updateApplication("Encoding files...");
+
+ for(std::map<LLString, LLString>::iterator itr = mFileMap.begin(); itr != mFileMap.end(); ++itr)
+ {
+ std::ifstream f((*itr).second.c_str());
+ if(!f.is_open())
+ {
+ std::cout << "Can't find file " << (*itr).second.c_str() << std::endl;
+ continue;
+ }
+ std::stringstream s;
+ s << f.rdbuf();
+ mCrashInfo[(*itr).first] = s.str();
+ }
+}
+
+LLSD LLCrashLogger::constructPostData()
+{
+ LLSD ret;
+
+ if(mCrashInPreviousExec)
+ {
+ mCrashInfo["CrashInPreviousExecution"] = "Y";
+ }
+
+ return mCrashInfo;
+}
+
+S32 LLCrashLogger::loadCrashBehaviorSetting()
+{
+ std::string filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, CRASH_SETTINGS_FILE);
+
+ mCrashSettings.loadFromFile(filename);
+
+ S32 value = mCrashSettings.getS32(CRASH_BEHAVIOR_SETTING);
+
+ if (value < CRASH_BEHAVIOR_ASK || CRASH_BEHAVIOR_NEVER_SEND < value) return CRASH_BEHAVIOR_ASK;
+
+ return value;
+}
+
+bool LLCrashLogger::saveCrashBehaviorSetting(S32 crash_behavior)
+{
+ if (crash_behavior < CRASH_BEHAVIOR_ASK) return false;
+ if (crash_behavior > CRASH_BEHAVIOR_NEVER_SEND) return false;
+
+ mCrashSettings.setS32(CRASH_BEHAVIOR_SETTING, crash_behavior);
+ std::string filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, CRASH_SETTINGS_FILE);
+
+ mCrashSettings.saveToFile(filename, FALSE);
+
+ return true;
+}
+
+bool LLCrashLogger::sendCrashLogs()
+{
+ gatherFiles();
+
+ LLSD post_data;
+ post_data = constructPostData();
+
+ updateApplication("Sending reports...");
+
+ std::string dump_path = gDirUtilp->getExpandedFilename(LL_PATH_LOGS,
+ "SecondLifeCrashReport");
+ std::string report_file = dump_path + ".log";
+
+ std::ofstream out_file(report_file.c_str());
+ LLSDSerialize::toPrettyXML(post_data, out_file);
+ out_file.close();
+ LLHTTPClient::post(mCrashHost, post_data, new LLCrashLoggerResponder(), 5);
+
+ gBreak = false;
+ while(!gBreak)
+ {
+ updateApplication("Sending logs...");
+ }
+
+ //util.* servers no longer have a public interface, so there's no alternate server anymore.
+ //leaving this in if we decide we need another alternate server for crash report receiving.
+ /*
+ if(!gSent)
+ {
+ gBreak = false;
+ LLHTTPClient::post(mAltCrashHost, post_data, new LLCrashLoggerResponder(), 5);
+
+ while(!gBreak)
+ {
+ updateApplication("Sending logs to Alternate Server...");
+ }
+ }
+ */
+
+ mSentCrashLogs = gSent;
+
+ return true;
+}
+
+void LLCrashLogger::updateApplication(LLString message)
+{
+ gServicePump->pump();
+ gServicePump->callback();
+}
+
+bool LLCrashLogger::init()
+{
+ // We assume that all the logs we're looking for reside on the current drive
+ gDirUtilp->initAppDirs("SecondLife");
+
+ // Default to the product name "Second Life" (this is overridden by the -name argument)
+ mProductName = "Second Life";
+
+ mCrashSettings.declareS32(CRASH_BEHAVIOR_SETTING, CRASH_BEHAVIOR_ASK, "Controls behavior when viewer crashes "
+ "(0 = ask before sending crash report, 1 = always send crash report, 2 = never send crash report)");
+
+ llinfos << "Loading crash behavior setting" << llendl;
+ mCrashBehavior = loadCrashBehaviorSetting();
+
+ //Run through command line options
+ if(getOption("previous").isDefined())
+ {
+ llinfos << "Previous execution did not remove SecondLife.exec_marker" << llendl;
+ mCrashInPreviousExec = TRUE;
+ }
+
+ if(getOption("dialog").isDefined())
+ {
+ llinfos << "Show the user dialog" << llendl;
+ mCrashBehavior = CRASH_BEHAVIOR_ASK;
+ }
+
+ LLSD server = getOption("user");
+ if(server.isDefined())
+ {
+ mGridName = server.asString();
+ llinfos << "Got userserver " << mGridName << llendl;
+ }
+ else
+ {
+ mGridName = "agni";
+ }
+
+ LLSD name = getOption("name");
+ if(name.isDefined())
+ {
+ mProductName = name.asString();
+ }
+
+ // If user doesn't want to send, bail out
+ if (mCrashBehavior == CRASH_BEHAVIOR_NEVER_SEND)
+ {
+ llinfos << "Crash behavior is never_send, quitting" << llendl;
+ return false;
+ }
+
+ gServicePump = new LLPumpIO(gAPRPoolp);
+ gServicePump->prime(gAPRPoolp);
+ LLHTTPClient::setPump(*gServicePump);
+ return true;
+}
diff --git a/indra/llcrashlogger/llcrashlogger.h b/indra/llcrashlogger/llcrashlogger.h
index d3218ab81c..b827bb9925 100755
--- a/indra/llcrashlogger/llcrashlogger.h
+++ b/indra/llcrashlogger/llcrashlogger.h
@@ -1,85 +1,85 @@
-/**
-* @file llcrashlogger.h
-* @brief Crash Logger Definition
-*
-* $LicenseInfo:firstyear=2003&license=viewergpl$
-*
-* Copyright (c) 2003-2007, Linden Research, Inc.
-*
-* Second Life Viewer Source Code
-* The source code in this file ("Source Code") is provided by Linden Lab
-* to you under the terms of the GNU General Public License, version 2.0
-* ("GPL"), unless you have obtained a separate licensing agreement
-* ("Other License"), formally executed by you and Linden Lab. Terms of
-* the GPL can be found in doc/GPL-license.txt in this distribution, or
-* online at http://secondlife.com/developers/opensource/gplv2
-*
-* There are special exceptions to the terms and conditions of the GPL as
-* it is applied to this Source Code. View the full text of the exception
-* in the file doc/FLOSS-exception.txt in this software distribution, or
-* online at http://secondlife.com/developers/opensource/flossexception
-*
-* By copying, modifying or distributing this software, you acknowledge
-* that you have read and understood your obligations described above,
-* and agree to abide by those obligations.
-*
-* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
-* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
-* COMPLETENESS OR PERFORMANCE.
-* $/LicenseInfo$
-*/
-#ifndef LLCRASHLOGGER_H
-#define LLCRASHLOGGER_H
-
-#include <vector>
-
-#include "linden_common.h"
-
-#include "llapp.h"
-#include "llsd.h"
-#include "llcontrol.h"
-
-class LLCrashLogger : public LLApp
-{
-public:
- LLCrashLogger();
- virtual ~LLCrashLogger();
- S32 loadCrashBehaviorSetting();
- void gatherFiles();
- virtual void gatherPlatformSpecificFiles() {}
- bool saveCrashBehaviorSetting(S32 crash_behavior);
- bool sendCrashLogs();
- LLSD constructPostData();
- virtual void updateApplication(LLString message = "");
- virtual bool init();
- virtual bool mainLoop() = 0;
- virtual bool cleanup() { return true; }
- void setUserText(LLString& text) { mCrashInfo["UserNotes"] = text; }
- S32 getCrashBehavior() { return mCrashBehavior; }
-protected:
- S32 mCrashBehavior;
- BOOL mCrashInPreviousExec;
- std::map<LLString, LLString> mFileMap;
- static const int mMaxSendSize = 200000;
- LLString mGridName;
- LLControlGroup mCrashSettings;
- LLString mProductName;
- LLSD mCrashInfo;
- LLString mCrashHost;
- LLString mAltCrashHost;
- LLSD mDebugLog;
- bool mSentCrashLogs;
-};
-
-class LLCrashLoggerText : public LLCrashLogger
-{
-public:
- LLCrashLoggerText(void) {}
- ~LLCrashLoggerText(void) {}
-
- virtual bool mainLoop();
- virtual void updateApplication(LLString message = "");
-};
-
-
-#endif //LLCRASHLOGGER_H
+/**
+* @file llcrashlogger.h
+* @brief Crash Logger Definition
+*
+* $LicenseInfo:firstyear=2003&license=viewergpl$
+*
+* Copyright (c) 2003-2007, Linden Research, Inc.
+*
+* Second Life Viewer Source Code
+* The source code in this file ("Source Code") is provided by Linden Lab
+* to you under the terms of the GNU General Public License, version 2.0
+* ("GPL"), unless you have obtained a separate licensing agreement
+* ("Other License"), formally executed by you and Linden Lab. Terms of
+* the GPL can be found in doc/GPL-license.txt in this distribution, or
+* online at http://secondlife.com/developers/opensource/gplv2
+*
+* There are special exceptions to the terms and conditions of the GPL as
+* it is applied to this Source Code. View the full text of the exception
+* in the file doc/FLOSS-exception.txt in this software distribution, or
+* online at http://secondlife.com/developers/opensource/flossexception
+*
+* By copying, modifying or distributing this software, you acknowledge
+* that you have read and understood your obligations described above,
+* and agree to abide by those obligations.
+*
+* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+* COMPLETENESS OR PERFORMANCE.
+* $/LicenseInfo$
+*/
+#ifndef LLCRASHLOGGER_H
+#define LLCRASHLOGGER_H
+
+#include <vector>
+
+#include "linden_common.h"
+
+#include "llapp.h"
+#include "llsd.h"
+#include "llcontrol.h"
+
+class LLCrashLogger : public LLApp
+{
+public:
+ LLCrashLogger();
+ virtual ~LLCrashLogger();
+ S32 loadCrashBehaviorSetting();
+ void gatherFiles();
+ virtual void gatherPlatformSpecificFiles() {}
+ bool saveCrashBehaviorSetting(S32 crash_behavior);
+ bool sendCrashLogs();
+ LLSD constructPostData();
+ virtual void updateApplication(LLString message = "");
+ virtual bool init();
+ virtual bool mainLoop() = 0;
+ virtual bool cleanup() { return true; }
+ void setUserText(LLString& text) { mCrashInfo["UserNotes"] = text; }
+ S32 getCrashBehavior() { return mCrashBehavior; }
+protected:
+ S32 mCrashBehavior;
+ BOOL mCrashInPreviousExec;
+ std::map<LLString, LLString> mFileMap;
+ static const int mMaxSendSize = 200000;
+ LLString mGridName;
+ LLControlGroup mCrashSettings;
+ LLString mProductName;
+ LLSD mCrashInfo;
+ LLString mCrashHost;
+ LLString mAltCrashHost;
+ LLSD mDebugLog;
+ bool mSentCrashLogs;
+};
+
+class LLCrashLoggerText : public LLCrashLogger
+{
+public:
+ LLCrashLoggerText(void) {}
+ ~LLCrashLoggerText(void) {}
+
+ virtual bool mainLoop();
+ virtual void updateApplication(LLString message = "");
+};
+
+
+#endif //LLCRASHLOGGER_H
diff --git a/indra/newview/English.lproj/InfoPlist.strings b/indra/newview/English.lproj/InfoPlist.strings
index a4383ffbeb..dff6ab4cbb 100644
--- a/indra/newview/English.lproj/InfoPlist.strings
+++ b/indra/newview/English.lproj/InfoPlist.strings
@@ -1,5 +1,5 @@
/* Localized versions of Info.plist keys */
CFBundleName = "Second Life";
-CFBundleShortVersionString = "Second Life version 1.18.6.2";
-CFBundleGetInfoString = "Second Life version 1.18.6.2, Copyright 2004-2007 Linden Research, Inc.";
+CFBundleShortVersionString = "Second Life version 1.18.6.3";
+CFBundleGetInfoString = "Second Life version 1.18.6.3, Copyright 2004-2007 Linden Research, Inc.";
diff --git a/indra/newview/Info-SecondLife.plist b/indra/newview/Info-SecondLife.plist
index c753469212..73117e1e06 100644
--- a/indra/newview/Info-SecondLife.plist
+++ b/indra/newview/Info-SecondLife.plist
@@ -32,7 +32,7 @@
</dict>
</array>
<key>CFBundleVersion</key>
- <string>1.18.6.2</string>
+ <string>1.18.6.3</string>
<key>CSResourcesFileMapped</key>
<true/>
</dict>
diff --git a/indra/newview/llpanellogin.cpp b/indra/newview/llpanellogin.cpp
index 7e97622c8b..2cac860423 100644
--- a/indra/newview/llpanellogin.cpp
+++ b/indra/newview/llpanellogin.cpp
@@ -526,6 +526,7 @@ void LLPanelLogin::show(const LLRect &rect,
{
new LLPanelLogin(rect, show_server, callback, callback_data);
+#if LL_LIBXUL_ENABLED
LLWebBrowserCtrl* web_browser = LLUICtrlFactory::getWebBrowserCtrlByName(sInstance, "login_html");
if (!web_browser) return;
@@ -538,6 +539,7 @@ void LLPanelLogin::show(const LLRect &rect,
// Make sure that focus always goes here (and use the latest sInstance that was just created)
gFocusMgr.setDefaultKeyboardFocus(web_browser);
+#endif
}
@@ -560,12 +562,14 @@ void LLPanelLogin::setAlwaysRefresh(bool refresh)
{
if (LLStartUp::getStartupState() >= STATE_LOGIN_CLEANUP) return;
+#if LL_LIBXUL_ENABLED
LLWebBrowserCtrl* web_browser = LLUICtrlFactory::getWebBrowserCtrlByName(sInstance, "login_html");
if (web_browser)
{
web_browser->setAlwaysRefresh(refresh);
}
+#endif
}
@@ -576,8 +580,6 @@ void LLPanelLogin::loadLoginPage()
LLURLSimString::sInstance.parse();
- LLWebBrowserCtrl* web_browser = LLUICtrlFactory::getWebBrowserCtrlByName(sInstance, "login_html");
-
std::ostringstream oStr;
LLString location;
@@ -689,8 +691,12 @@ void LLPanelLogin::loadLoginPage()
oStr << "&show_grid=TRUE";
#endif
+#if LL_LIBXUL_ENABLED
+ LLWebBrowserCtrl* web_browser = LLUICtrlFactory::getWebBrowserCtrlByName(sInstance, "login_html");
+
// navigate to the "real" page
web_browser->navigateTo( oStr.str() );
+#endif
}
#if LL_LIBXUL_ENABLED
diff --git a/indra/newview/llurldispatcher.cpp b/indra/newview/llurldispatcher.cpp
index f8ebced8b9..6fec904239 100644
--- a/indra/newview/llurldispatcher.cpp
+++ b/indra/newview/llurldispatcher.cpp
@@ -38,6 +38,7 @@
#include "llfloaterurldisplay.h"
#include "llfloaterdirectory.h"
#include "llfloaterhtml.h"
+#include "llfloaterworldmap.h"
#include "llpanellogin.h"
#include "llstartup.h" // gStartupState
#include "llurlsimstring.h"
@@ -238,12 +239,17 @@ void LLURLDispatcherImpl::regionHandleCallback(U64 region_handle, const std::str
LLVector3d global_pos = from_region_handle(region_handle);
global_pos += LLVector3d(local_pos);
gAgent.teleportViaLocation(global_pos);
+ if(gFloaterWorldMap)
+ {
+ gFloaterWorldMap->trackLocation(global_pos);
+ }
}
else
{
// display informational floater, allow user to click teleport btn
LLFloaterURLDisplay* url_displayp = LLFloaterURLDisplay::getInstance(LLSD());
+
url_displayp->displayParcelInfo(region_handle, local_pos);
if(snapshot_id.notNull())
{
diff --git a/indra/newview/llviewerparcelmgr.cpp b/indra/newview/llviewerparcelmgr.cpp
index 2844cf9356..eaea0438fa 100644
--- a/indra/newview/llviewerparcelmgr.cpp
+++ b/indra/newview/llviewerparcelmgr.cpp
@@ -1475,7 +1475,11 @@ void LLViewerParcelMgr::processParcelProperties(LLMessageSystem *msg, void **use
msg->getBOOLFast(_PREHASH_ParcelData, _PREHASH_RegionDenyAnonymous, region_deny_anonymous_override );
msg->getBOOLFast(_PREHASH_ParcelData, _PREHASH_RegionDenyIdentified, region_deny_identified_override ); // Deprecated
msg->getBOOLFast(_PREHASH_ParcelData, _PREHASH_RegionDenyTransacted, region_deny_transacted_override ); // Deprecated
- msg->getBOOLFast(_PREHASH_AgeVerificationBlock, _PREHASH_RegionDenyAgeUnverified, region_deny_age_unverified_override );
+ if (msg->getNumberOfBlocksFast(_PREHASH_AgeVerificationBlock))
+ {
+ // this block was added later and may not be on older sims, so we have to test its existence first
+ msg->getBOOLFast(_PREHASH_AgeVerificationBlock, _PREHASH_RegionDenyAgeUnverified, region_deny_age_unverified_override );
+ }
msg->getS32("ParcelData", "OtherCleanTime", other_clean_time );
diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py
index 5775af68a1..abd3b269f6 100755
--- a/indra/newview/viewer_manifest.py
+++ b/indra/newview/viewer_manifest.py
@@ -80,12 +80,11 @@ class ViewerManifest(LLManifest):
self.path('words.*.txt')
# Local HTML files (e.g. loading screen)
- if self.prefix("html/*"):
- self.path("*.html")
- self.path("*.gif")
- self.path("*.jpg")
- self.path("*.css")
- self.end_prefix("html/*")
+ if self.prefix(src="html"):
+ self.path("*.png")
+ self.path("*/*/*.html")
+ self.path("*/*/*.gif")
+ self.end_prefix("html")
self.end_prefix("skins")
self.path("releasenotes.txt")