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