void LLParcel::setMediaDesc(const std::string& desc) { // The escaping here must match the escaping in the database // abstraction layer. mMediaDesc = desc; mMediaDesc = rawstr_to_utf8(mMediaDesc); }
void LLParcel::setName(const std::string& name) { // The escaping here must match the escaping in the database // abstraction layer. mName = name; mName = rawstr_to_utf8(mName); //LLStringFn::replace_nonprintable_in_ascii(mName, LL_UNKNOWN_CHAR); }
void LLParcel::setMediaType(const std::string& type) { // The escaping here must match the escaping in the database // abstraction layer. mMediaType = type; mMediaType = rawstr_to_utf8(mMediaType); // This code attempts to preserve legacy movie functioning if(mMediaType.empty() && ! mMediaURL.empty()) { setMediaType(std::string("video/vnd.secondlife.qt.legacy")); } }
void LLParcel::setMediaType(const std::string& type) { // The escaping here must match the escaping in the database // abstraction layer. mMediaType = type; mMediaType = rawstr_to_utf8(mMediaType); // // This legacy code prevents any media different from video from working on OpenSim // if(mMediaType.empty() && ! mMediaURL.empty()) // { // setMediaType(std::string("video/vnd.secondlife.qt.legacy")); // } }
void LLCrashLogger::gatherFiles() { llinfos << "Gathering logs..." << llendl; LLSD static_sd; LLSD dynamic_sd; bool has_logs = readDebugFromXML( static_sd, "static_debug_info.log" ); has_logs |= readDebugFromXML( dynamic_sd, "dynamic_debug_info.log" ); if ( has_logs ) { mDebugLog = static_sd; mergeLogs(dynamic_sd); mCrashInPreviousExec = mDebugLog["CrashNotHandled"].asBoolean(); mFileMap["SecondLifeLog"] = mDebugLog["SLLog"].asString(); mFileMap["SettingsXml"] = mDebugLog["SettingsFilename"].asString(); if(mDebugLog.has("CAFilename")) { LLCurl::setCAFile(mDebugLog["CAFilename"].asString()); } else { LLCurl::setCAFile(gDirUtilp->getCAFile()); } 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 LLCurl::setCAFile(gDirUtilp->getCAFile()); mFileMap["SecondLifeLog"] = gDirUtilp->getExpandedFilename(LL_PATH_LOGS,"SecondLife.log"); mFileMap["SettingsXml"] = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS,"settings.xml"); } if(mCrashInPreviousExec) { // Restarting after freeze. // Replace the log file ext with .old, since the // instance that launched this process has overwritten // SecondLife.log std::string log_filename = mFileMap["SecondLifeLog"]; log_filename.replace(log_filename.size() - 4, 4, ".old"); mFileMap["SecondLifeLog"] = log_filename; } gatherPlatformSpecificFiles(); mCrashInfo["DebugLog"] = mDebugLog; mFileMap["StatsLog"] = gDirUtilp->getExpandedFilename(LL_PATH_DUMP,"stats.log"); // Singu Note: we have just started again, log has been renamed mFileMap["SecondLifeLog"] = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, OLD_LOG_FILE); llinfos << "Encoding files..." << llendl; for(std::map<std::string, std::string>::iterator itr = mFileMap.begin(); itr != mFileMap.end(); ++itr) { std::ifstream f((*itr).second.c_str()); if(!f.is_open()) { llinfos << "Can't find file " << (*itr).second << llendl; continue; } std::stringstream s; s << f.rdbuf(); std::string crash_info = s.str(); if(itr->first == "SecondLifeLog") { if(!mCrashInfo["DebugLog"].has("StartupState")) { mCrashInfo["DebugLog"]["StartupState"] = getStartupStateFromLog(crash_info); } trimSLLog(crash_info); } mCrashInfo[(*itr).first] = LLStringFn::strip_invalid_xml(rawstr_to_utf8(crash_info)); } std::string minidump_path; // Add minidump as binary. bool has_minidump = mDebugLog.has("MinidumpPath"); if (has_minidump) minidump_path = mDebugLog["MinidumpPath"].asString(); if (has_minidump) { has_minidump = readMinidump(minidump_path); } if (!has_minidump) //Viewer was probably so hosed it couldn't write remaining data. Try brute force. { //Look for a filename at least 30 characters long in the dump dir which contains the characters MDMP as the first 4 characters in the file. typedef std::vector<std::string> vec; std::string pathname = gDirUtilp->getExpandedFilename(LL_PATH_DUMP,""); vec file_vec = gDirUtilp->getFilesInDir(pathname); for(vec::const_iterator iter=file_vec.begin(); iter!=file_vec.end(); ++iter) { if ( ( iter->length() > 30 ) && (iter->rfind(".log") != (iter->length()-4) ) ) { std::string fullname = pathname + *iter; std::ifstream fdat( fullname.c_str(), std::ifstream::binary); if (fdat) { char buf[5]; fdat.read(buf,4); fdat.close(); if (!strncmp(buf,"MDMP",4)) { minidump_path = *iter; has_minidump = readMinidump(fullname); mDebugLog["MinidumpPath"] = fullname; } } } } } }
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 std::string db_file_name = gDirUtilp->getExpandedFilename(LL_PATH_LOGS,"debug_info.log"); 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); mCrashInPreviousExec = mDebugLog["CrashNotHandled"].asBoolean(); mFileMap["InWorldzLog"] = mDebugLog["SLLog"].asString(); mFileMap["SettingsXml"] = mDebugLog["SettingsFilename"].asString(); if(mDebugLog.has("CAFilename")) { LLCurl::setCAFile(mDebugLog["CAFilename"].asString()); } else { LLCurl::setCAFile(gDirUtilp->getCAFile()); } llinfos << "Using log file from debug log " << mFileMap["InWorldzLog"] << llendl; llinfos << "Using settings file from debug log " << mFileMap["SettingsXml"] << llendl; } else { // Figure out the filename of the InWorldz log LLCurl::setCAFile(gDirUtilp->getCAFile()); mFileMap["InWorldzLog"] = gDirUtilp->getExpandedFilename(LL_PATH_LOGS,"InWorldz.log"); mFileMap["SettingsXml"] = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS,"settings.xml"); } #if !LL_DARWIN if(mCrashInPreviousExec) #else #endif { // Replace the log file ext with .old, since the // instance that launched this process has overwritten // InWorldz.log std::string log_filename = mFileMap["InWorldzLog"]; log_filename.replace(log_filename.size() - 4, 4, ".old"); mFileMap["InWorldzLog"] = log_filename; } gatherPlatformSpecificFiles(); //Use the debug log to reconstruct the URL to send the crash report to if(mDebugLog.has("CurrentSimHost")) { mCrashHost = "https://"; mCrashHost += mDebugLog["CurrentSimHost"].asString(); mCrashHost += ":12043/crash/report"; } else if(mDebugLog.has("GridName")) { // This is a 'little' hacky, but its the best simple solution. std::string grid_host = mDebugLog["GridName"].asString(); LLStringUtil::toLower(grid_host); mCrashHost = "https://login."; mCrashHost += grid_host; mCrashHost += ".lindenlab.com:12043/crash/report"; } // Use login servers as the alternate, since they are already load balanced and have a known name mAltCrashHost = "https://login.agni.lindenlab.com: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<std::string, std::string>::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 << std::endl; continue; } std::stringstream s; s << f.rdbuf(); std::string crash_info = s.str(); if(itr->first == "InWorldzLog") { if(!mCrashInfo["DebugLog"].has("StartupState")) { mCrashInfo["DebugLog"]["StartupState"] = getStartupStateFromLog(crash_info); } trimSLLog(crash_info); } mCrashInfo[(*itr).first] = rawstr_to_utf8(crash_info); } }
#include "lllayoutstack.h" #include "llagent.h" #include "llnotificationsutil.h" #include "lltoastnotifypanel.h" #include "lltooltip.h" #include "llviewerregion.h" #include "llviewertexteditor.h" #include "llworld.h" #include "lluiconstants.h" #include "llsidetray.h"//for blocked objects panel static LLDefaultChildRegistry::Register<LLChatHistory> r("chat_history"); const static std::string NEW_LINE(rawstr_to_utf8("\n")); const static std::string SLURL_APP_AGENT = "secondlife:///app/agent/"; const static std::string SLURL_ABOUT = "/about"; // support for secondlife:///app/objectim/{UUID}/ SLapps class LLObjectIMHandler : public LLCommandHandler { public: // requests will be throttled from a non-trusted browser LLObjectIMHandler() : LLCommandHandler("objectim", UNTRUSTED_THROTTLE) {} bool handle(const LLSD& params, const LLSD& query_map, LLMediaCtrl* web) { if (params.size() < 1) {