From 8465910c79b8e746e04fd581cca2d60399e569b9 Mon Sep 17 00:00:00 2001 From: Jacek Antonelli Date: Fri, 15 Aug 2008 23:45:07 -0500 Subject: Second Life viewer sources 1.18.3.2-RC --- linden/indra/llcommon/indra_constants.h | 1 + linden/indra/llcommon/linden_common.h | 1 + linden/indra/llcommon/llcommon.vcproj | 8 ++- linden/indra/llcommon/llevent.cpp | 1 + linden/indra/llcommon/llextendedstatus.h | 69 +++++++++++++++++++ linden/indra/llcommon/lllivefile.cpp | 7 +- linden/indra/llcommon/lllslconstants.h | 11 +++ linden/indra/llcommon/llmetrics.cpp | 2 +- linden/indra/llcommon/llsys.cpp | 81 ++++++++++++++++------ linden/indra/llcommon/llsys.h | 26 ++++++-- linden/indra/llcommon/llthread.h | 2 +- linden/indra/llcommon/lltimer.cpp | 16 ++++- linden/indra/llcommon/lltimer.h | 5 +- linden/indra/llcommon/lluri.cpp | 111 ------------------------------- linden/indra/llcommon/llversion.h | 37 ----------- linden/indra/llcommon/llversionserver.h | 40 +++++++++++ linden/indra/llcommon/llversionviewer.h | 39 +++++++++++ 17 files changed, 277 insertions(+), 180 deletions(-) create mode 100644 linden/indra/llcommon/llextendedstatus.h delete mode 100644 linden/indra/llcommon/llversion.h create mode 100644 linden/indra/llcommon/llversionserver.h create mode 100644 linden/indra/llcommon/llversionviewer.h (limited to 'linden/indra/llcommon') diff --git a/linden/indra/llcommon/indra_constants.h b/linden/indra/llcommon/indra_constants.h index 21635b5..bd591c5 100644 --- a/linden/indra/llcommon/indra_constants.h +++ b/linden/indra/llcommon/indra_constants.h @@ -136,6 +136,7 @@ const MASK MASK_ALT = 0x0002; const MASK MASK_SHIFT = 0x0004; const MASK MASK_NORMALKEYS = 0x0007; // A real mask - only get the bits for normal modifier keys const MASK MASK_MAC_CONTROL = 0x0008; // Un-mapped Ctrl key on Macs, not used on Windows +const MASK MASK_MODIFIERS = MASK_CONTROL|MASK_ALT|MASK_SHIFT|MASK_MAC_CONTROL; // Special keys go into >128 const KEY KEY_SPECIAL = 0x80; // special keys start here diff --git a/linden/indra/llcommon/linden_common.h b/linden/indra/llcommon/linden_common.h index 5a6018a..24a346c 100644 --- a/linden/indra/llcommon/linden_common.h +++ b/linden/indra/llcommon/linden_common.h @@ -50,6 +50,7 @@ #include "stdtypes.h" #include "lldefs.h" #include "llerror.h" +#include "llextendedstatus.h" #include "llformat.h" #include "llstring.h" #include "lltimer.h" diff --git a/linden/indra/llcommon/llcommon.vcproj b/linden/indra/llcommon/llcommon.vcproj index 5557f94..70006e0 100644 --- a/linden/indra/llcommon/llcommon.vcproj +++ b/linden/indra/llcommon/llcommon.vcproj @@ -385,6 +385,9 @@ RelativePath=".\llevent.h"> + + + RelativePath=".\llversionserver.h"> + + diff --git a/linden/indra/llcommon/llevent.cpp b/linden/indra/llcommon/llevent.cpp index a6c4ef0..9c736c8 100644 --- a/linden/indra/llcommon/llevent.cpp +++ b/linden/indra/llcommon/llevent.cpp @@ -238,6 +238,7 @@ LLEventDispatcher::~LLEventDispatcher() if (impl) { delete impl; + impl = NULL; } } diff --git a/linden/indra/llcommon/llextendedstatus.h b/linden/indra/llcommon/llextendedstatus.h new file mode 100644 index 0000000..a1c998f --- /dev/null +++ b/linden/indra/llcommon/llextendedstatus.h @@ -0,0 +1,69 @@ +/** + * @file llextendedstatus.h + * @date August 2007 + * @brief extended status codes for curl/vfs/resident asset storage and delivery + * + * Copyright (c) 2007-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. + */ + +#ifndef LL_LLEXTENDEDSTATUS_H +#define LL_LLEXTENDEDSTATUS_H + + +typedef S32 LLExtStat; + + +// Status provider groups - Top bits indicate which status type it is +// Zero is common status code (next section) +const LLExtStat LL_EXSTAT_CURL_RESULT = 1L<<30; // serviced by curl - use 1L if we really implement the below +const LLExtStat LL_EXSTAT_RES_RESULT = 2L<<30; // serviced by resident copy +const LLExtStat LL_EXSTAT_VFS_RESULT = 3L<<30; // serviced by vfs + + +// Common Status Codes +// +const LLExtStat LL_EXSTAT_NONE = 0x00000; // No extra info here - sorry! +const LLExtStat LL_EXSTAT_NULL_UUID = 0x10001; // null asset ID +const LLExtStat LL_EXSTAT_NO_UPSTREAM = 0x10002; // attempt to upload without a valid upstream method/provider +const LLExtStat LL_EXSTAT_REQUEST_DROPPED = 0x10003; // request was dropped unserviced +const LLExtStat LL_EXSTAT_NONEXISTENT_FILE = 0x10004; // trying to upload a file that doesn't exist +const LLExtStat LL_EXSTAT_BLOCKED_FILE = 0x10005; // trying to upload a file that we can't open + + +// curl status codes: +// +// Mask off LL_EXSTAT_CURL_RESULT for original result and +// see: libraries/include/curl/curl.h + + +// Memory-Resident status codes: +// None at present + + +// VFS status codes: +const LLExtStat LL_EXSTAT_VFS_CACHED = LL_EXSTAT_VFS_RESULT | 0x0001; +const LLExtStat LL_EXSTAT_VFS_CORRUPT = LL_EXSTAT_VFS_RESULT | 0x0002; + + +#endif // LL_LLEXTENDEDSTATUS_H diff --git a/linden/indra/llcommon/lllivefile.cpp b/linden/indra/llcommon/lllivefile.cpp index f116a2a..17fe210 100644 --- a/linden/indra/llcommon/lllivefile.cpp +++ b/linden/indra/llcommon/lllivefile.cpp @@ -146,8 +146,11 @@ namespace : LLEventTimer(refresh), mLiveFile(f) { } - void tick() - { mLiveFile.checkAndReload(); } + BOOL tick() + { + mLiveFile.checkAndReload(); + return FALSE; + } private: LLLiveFile& mLiveFile; diff --git a/linden/indra/llcommon/lllslconstants.h b/linden/indra/llcommon/lllslconstants.h index afe4a9e..151c7a2 100644 --- a/linden/indra/llcommon/lllslconstants.h +++ b/linden/indra/llcommon/lllslconstants.h @@ -166,4 +166,15 @@ const S32 STRING_TRIM_HEAD = 0x01; const S32 STRING_TRIM_TAIL = 0x02; const S32 STRING_TRIM = STRING_TRIM_HEAD | STRING_TRIM_TAIL; +// llGetObjectDetails +const S32 OBJECT_UNKOWN_DETAIL = -1; +const S32 OBJECT_NAME = 1; +const S32 OBJECT_DESC = 2; +const S32 OBJECT_POS = 3; +const S32 OBJECT_ROT = 4; +const S32 OBJECT_VELOCITY = 5; +const S32 OBJECT_OWNER = 6; +const S32 OBJECT_GROUP = 7; +const S32 OBJECT_CREATOR = 8; + #endif diff --git a/linden/indra/llcommon/llmetrics.cpp b/linden/indra/llcommon/llmetrics.cpp index 583f840..74bd13d 100644 --- a/linden/indra/llcommon/llmetrics.cpp +++ b/linden/indra/llcommon/llmetrics.cpp @@ -67,7 +67,7 @@ void LLMetricsImpl::recordEventDetails(const std::string& location, metrics["location"] = location; metrics["stats"] = stats; - llinfos << "LLMETRICS: " << LLSDOStreamer(metrics) << llendl; + llinfos << "LLMETRICS: " << LLSDNotationStreamer(metrics) << llendl; } // Store this: diff --git a/linden/indra/llcommon/llsys.cpp b/linden/indra/llcommon/llsys.cpp index 25749e1..95b6b55 100644 --- a/linden/indra/llcommon/llsys.cpp +++ b/linden/indra/llcommon/llsys.cpp @@ -46,6 +46,7 @@ #elif LL_DARWIN # include # include +# include #elif LL_LINUX # include # include @@ -482,57 +483,97 @@ LLMemoryInfo::LLMemoryInfo() { } -U32 LLMemoryInfo::getPhysicalMemory() const +#if LL_WINDOWS +static U32 LLMemoryAdjustKBResult(U32 inKB) +{ + // Moved this here from llfloaterabout.cpp + + //! \bug + // For some reason, the reported amount of memory is always wrong. + // The original adjustment assumes it's always off by one meg, however + // errors of as much as 2520 KB have been observed in the value + // returned from the GetMemoryStatusEx function. Here we keep the + // original adjustment from llfoaterabout.cpp until this can be + // fixed somehow. + inKB += 1024; + + return inKB; +} +#endif + +U32 LLMemoryInfo::getPhysicalMemoryKB() const { #if LL_WINDOWS - MEMORYSTATUS state; + MEMORYSTATUSEX state; state.dwLength = sizeof(state); - GlobalMemoryStatus(&state); + GlobalMemoryStatusEx(&state); - return (U32)state.dwTotalPhys; + return LLMemoryAdjustKBResult((U32)(state.ullTotalPhys >> 10)); #elif LL_DARWIN // This might work on Linux as well. Someone check... - unsigned int phys = 0; - int mib[2] = { CTL_HW, HW_PHYSMEM }; + uint64_t phys = 0; + int mib[2] = { CTL_HW, HW_MEMSIZE }; size_t len = sizeof(phys); sysctl(mib, 2, &phys, &len, NULL, 0); - return phys; + return (U32)(phys >> 10); + #elif LL_LINUX + U64 phys = 0; + phys = (U64)(getpagesize()) * (U64)(get_phys_pages()); + return (U32)(phys >> 10); - return getpagesize() * get_phys_pages(); #elif LL_SOLARIS - return getpagesize() * sysconf(_SC_PHYS_PAGES); + U64 phys = 0; + phys = (U64)(getpagesize()) * (U64)(sysconf(_SC_PHYS_PAGES)); + return (U32)(phys >> 10); + #else return 0; #endif } +U32 LLMemoryInfo::getPhysicalMemoryClamped() const +{ + // Return the total physical memory in bytes, but clamp it + // to no more than U32_MAX + + U32 phys_kb = getPhysicalMemoryKB(); + if (phys_kb >= 4194304 /* 4GB in KB */) + { + return U32_MAX; + } + else + { + return phys_kb << 10; + } +} + void LLMemoryInfo::stream(std::ostream& s) const { #if LL_WINDOWS - MEMORYSTATUS state; + MEMORYSTATUSEX state; state.dwLength = sizeof(state); - GlobalMemoryStatus(&state); + GlobalMemoryStatusEx(&state); s << "Percent Memory use: " << (U32)state.dwMemoryLoad << '%' << std::endl; - s << "Total Physical Kb: " << (U32)state.dwTotalPhys/1024 << std::endl; - s << "Avail Physical Kb: " << (U32)state.dwAvailPhys/1024 << std::endl; - s << "Total page Kb: " << (U32)state.dwTotalPageFile/1024 << std::endl; - s << "Avail page Kb: " << (U32)state.dwAvailPageFile/1024 << std::endl; - s << "Total Virtual Kb: " << (U32)state.dwTotalVirtual/1024 << std::endl; - s << "Avail Virtual Kb: " << (U32)state.dwAvailVirtual/1024 << std::endl; + s << "Total Physical KB: " << (U32)(state.ullTotalPhys/1024) << std::endl; + s << "Avail Physical KB: " << (U32)(state.ullAvailPhys/1024) << std::endl; + s << "Total page KB: " << (U32)(state.ullTotalPageFile/1024) << std::endl; + s << "Avail page KB: " << (U32)(state.ullAvailPageFile/1024) << std::endl; + s << "Total Virtual KB: " << (U32)(state.ullTotalVirtual/1024) << std::endl; + s << "Avail Virtual KB: " << (U32)(state.ullAvailVirtual/1024) << std::endl; #elif LL_DARWIN - U64 phys = 0; + uint64_t phys = 0; size_t len = sizeof(phys); if(sysctlbyname("hw.memsize", &phys, &len, NULL, 0) == 0) { - s << "Total Physical Kb: " << phys/1024 << std::endl; + s << "Total Physical KB: " << phys/1024 << std::endl; } else { @@ -543,7 +584,7 @@ void LLMemoryInfo::stream(std::ostream& s) const phys = (U64)(sysconf(_SC_PHYS_PAGES)) * (U64)(sysconf(_SC_PAGESIZE)/1024); - s << "Total Physical Kb: " << phys << std::endl; + s << "Total Physical KB: " << phys << std::endl; #else // *NOTE: This works on linux. What will it do on other systems? FILE* meminfo = LLFile::fopen(MEMINFO_FILE,"rb"); diff --git a/linden/indra/llcommon/llsys.h b/linden/indra/llcommon/llsys.h index 416bd54..66a3465 100644 --- a/linden/indra/llcommon/llsys.h +++ b/linden/indra/llcommon/llsys.h @@ -89,13 +89,31 @@ private: std::string mCPUString; }; +//============================================================================= +// +// CLASS LLMemoryInfo + class LLMemoryInfo + +/*! @brief Class to query the memory subsystem + + @details + Here's how you use an LLMemoryInfo: + + LLMemoryInfo info; +
llinfos << info << llendl; +*/ { public: - LLMemoryInfo(); - void stream(std::ostream& s) const; - - U32 getPhysicalMemory() const; + LLMemoryInfo(); ///< Default constructor + void stream(std::ostream& s) const; ///< output text info to s + + U32 getPhysicalMemoryKB() const; ///< Memory size in KiloBytes + + /*! Memory size in bytes, if total memory is >= 4GB then U32_MAX will + ** be returned. + */ + U32 getPhysicalMemoryClamped() const; ///< Memory size in clamped bytes }; diff --git a/linden/indra/llcommon/llthread.h b/linden/indra/llcommon/llthread.h index c863322..d700592 100644 --- a/linden/indra/llcommon/llthread.h +++ b/linden/indra/llcommon/llthread.h @@ -220,7 +220,7 @@ public: if (0 == res) { delete this; - res = 0; + return 0; } return res; } diff --git a/linden/indra/llcommon/lltimer.cpp b/linden/indra/llcommon/lltimer.cpp index 6077063..177f1de 100644 --- a/linden/indra/llcommon/lltimer.cpp +++ b/linden/indra/llcommon/lltimer.cpp @@ -525,13 +525,27 @@ LLEventTimer::~LLEventTimer() void LLEventTimer::updateClass() { + std::list completed_timers; for (std::list::iterator iter = sActiveList.begin(); iter != sActiveList.end(); ) { LLEventTimer* timer = *iter++; F32 et = timer->mEventTimer.getElapsedTimeF32(); if (et > timer->mPeriod) { timer->mEventTimer.reset(); - timer->tick(); + if ( timer->tick() ) + { + completed_timers.push_back( timer ); + } + } + } + + if ( completed_timers.size() > 0 ) + { + for (std::list::iterator completed_iter = completed_timers.begin(); + completed_iter != completed_timers.end(); + completed_iter++ ) + { + delete *completed_iter; } } } diff --git a/linden/indra/llcommon/lltimer.h b/linden/indra/llcommon/lltimer.h index 37917d0..35f0a7b 100644 --- a/linden/indra/llcommon/lltimer.h +++ b/linden/indra/llcommon/lltimer.h @@ -142,11 +142,12 @@ void secondsToTimecodeString(F32 current_time, char *tcstring); class LLEventTimer { public: - LLEventTimer(F32 period); // period is the amount of time between each call to tick() + LLEventTimer(F32 period); // period is the amount of time between each call to tick() in seconds virtual ~LLEventTimer(); //function to be called at the supplied frequency - virtual void tick() = 0; + // Normally return FALSE; TRUE will delete the timer after the function returns. + virtual BOOL tick() = 0; static void updateClass(); diff --git a/linden/indra/llcommon/lluri.cpp b/linden/indra/llcommon/lluri.cpp index 43d2147..892ac02 100644 --- a/linden/indra/llcommon/lluri.cpp +++ b/linden/indra/llcommon/lluri.cpp @@ -319,117 +319,6 @@ LLURI LLURI::buildHTTP(const std::string& host, return LLURI::buildHTTP(llformat("%s:%u", host.c_str(), port), path, query); } -namespace { - LLURI buildBackboneURL(LLApp* app, - const std::string& p1 = "", - const std::string& p2 = "", - const std::string& p3 = "") - { - std::string host = "localhost:12040"; - - if (app) - { - host = app->getOption("backbone-host-port").asString(); - } - - LLSD path = LLSD::emptyArray(); - if (!p1.empty()) path.append(p1); - if (!p2.empty()) path.append(p2); - if (!p3.empty()) path.append(p3); - - return LLURI::buildHTTP(host, path); - } -} - -#if LL_ENABLE_JANKY_DEPRECATED_WEB_SERVICE_CALLS -// static -LLURI LLURI::buildBulkAgentNamesURI(LLApp* app) -{ - std::string host = "localhost:12040"; - - if (app) - { - host = app->getOption("backbone-host-port").asString(); - } - - LLSD path = LLSD::emptyArray(); - path.append("agent"); - path.append("names"); - - return buildHTTP(host, path); -} - -// static -LLURI LLURI::buildBulkAgentNamesURI(LLApp* app) -{ - std::string host = "localhost:12040"; - - if (app) - { - host = app->getOption("backbone-host-port").asString(); - } - - LLSD path = LLSD::emptyArray(); - path.append("agent"); - path.append("names"); - - return buildHTTP(host, path); -} - -// static -LLURI LLURI::buildAgentSessionURI(const LLUUID& agent_id, LLApp* app) -{ - return buildBackboneURL(app, "agent", agent_id.asString(), "session"); -} - -// static -LLURI LLURI::buildAgentNameURI(const LLUUID& agent_id, LLApp* app) -{ - std::string host = "localhost:12040"; - - if (app) - { - host = app->getOption("backbone-host-port").asString(); - } - - LLSD path = LLSD::emptyArray(); - path.append("agent"); - path.append(agent_id); - path.append("name"); - - return buildHTTP(host, path); -} - -// static -LLURI LLURI::buildAgentNameURI(const LLUUID& agent_id, LLApp* app) -{ - std::string host = "localhost:12040"; - - if (app) - { - host = app->getOption("backbone-host-port").asString(); - } - - LLSD path = LLSD::emptyArray(); - path.append("agent"); - path.append(agent_id); - path.append("name"); - - return buildHTTP(host, path); -} - -// static -LLURI LLURI::buildAgentLoginInfoURI(const LLUUID& agent_id, const std::string& dataserver) -{ - LLSD path = LLSD::emptyArray(); - path.append("agent"); - path.append(agent_id); - path.append("logininfo"); - - return buildHTTP(dataserver, path); -} -#endif // LL_ENABLE_JANKY_DEPRECATED_WEB_SERVICE_CALLS - std::string LLURI::asString() const { if (mScheme.empty()) diff --git a/linden/indra/llcommon/llversion.h b/linden/indra/llcommon/llversion.h deleted file mode 100644 index 00c3039..0000000 --- a/linden/indra/llcommon/llversion.h +++ /dev/null @@ -1,37 +0,0 @@ -/** - * @file llversion.h - * @brief - * - * Copyright (c) 2002-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. - */ - -#ifndef LL_LLVERSION_H -#define LL_LLVERSION_H - -const S32 LL_VERSION_MAJOR = 1; -const S32 LL_VERSION_MINOR = 18; -const S32 LL_VERSION_PATCH = 2; -const S32 LL_VERSION_BUILD = 1; - -#endif diff --git a/linden/indra/llcommon/llversionserver.h b/linden/indra/llcommon/llversionserver.h new file mode 100644 index 0000000..0680501 --- /dev/null +++ b/linden/indra/llcommon/llversionserver.h @@ -0,0 +1,40 @@ +/** + * @file llversionserver.h + * @brief + * + * Copyright (c) 2002-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. + */ + +#ifndef LL_LLVERSIONSERVER_H +#define LL_LLVERSIONSERVER_H + +const S32 LL_VERSION_MAJOR = 1; +const S32 LL_VERSION_MINOR = 18; +const S32 LL_VERSION_PATCH = 2; +const S32 LL_VERSION_BUILD = 0; + +const char * const LL_CHANNEL = "Second Life Server"; + + +#endif diff --git a/linden/indra/llcommon/llversionviewer.h b/linden/indra/llcommon/llversionviewer.h new file mode 100644 index 0000000..8c001e0 --- /dev/null +++ b/linden/indra/llcommon/llversionviewer.h @@ -0,0 +1,39 @@ +/** + * @file llversionviewer.h + * @brief + * + * Copyright (c) 2002-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. + */ + +#ifndef LL_LLVERSIONVIEWER_H +#define LL_LLVERSIONVIEWER_H + +const S32 LL_VERSION_MAJOR = 1; +const S32 LL_VERSION_MINOR = 18; +const S32 LL_VERSION_PATCH = 3; +const S32 LL_VERSION_BUILD = 2; + +const char * const LL_CHANNEL = "Second Life Release"; + +#endif -- cgit v1.1