diff options
-rw-r--r-- | doc/contributions.txt | 2 | ||||
-rw-r--r-- | indra/llcommon/llversionviewer.h | 2 | ||||
-rwxr-xr-x | indra/llcrashlogger/llcrashlogger.cpp | 623 | ||||
-rwxr-xr-x | indra/llcrashlogger/llcrashlogger.h | 170 | ||||
-rw-r--r-- | indra/newview/English.lproj/InfoPlist.strings | 4 | ||||
-rw-r--r-- | indra/newview/Info-SecondLife.plist | 2 | ||||
-rw-r--r-- | indra/newview/llpanellogin.cpp | 10 | ||||
-rw-r--r-- | indra/newview/llurldispatcher.cpp | 6 | ||||
-rw-r--r-- | indra/newview/llviewerparcelmgr.cpp | 6 | ||||
-rwxr-xr-x | indra/newview/viewer_manifest.py | 11 |
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") |