svn merge -r 88872:89137 svn+ssh://svn.lindenlab.com/svn/linden/qa/qar-652 --> release
Effectively: svn merge -r 87048:88773 svn+ssh://svn.lindenlab.com/svn/linden/branches/Branch_1-22-Server * Plus some gcc4.x fixes In detail: * Bump version numbers to 1.22.0 Server * Updated files for enabled conductor. * Added tarball pulling during deploy for central servers. * DEV-15160 Logins not remembering start location on beta grid * DEV-15167 Random failure with set-classified-stats * DEV-15193 Viewer Passing Through Unsanitized Strings to DB when creating classifieds. * Add --location to the curl invocation in fetch_agni_ws_snapshot * QAR-609 Some Havok4 bug fixes * QAR-460 Automatic XUI selection & Kick-ass Linux Fonts MergeMe * DEV-14704 1.21.1.86182 revealing hidden groups in profile * DEV-14641 Change automated Subject Line messages for IM-to-Email to avoid SPAM association * DEV-15387 Write unit test for LLStringFn::strip_invalid_xml(). * Changed getpass.getuser() to os.getuid() as getuser() was returning the saved-UID of the process (root user, which kic ks off parabuild as parabuild u ser). We want os.getuid() as it correctly returns the parabuild user's uid. / Stupid mistake using os.getuid().. .fixed by using the pwd module to return the unix username given the userid from os.getuid() * QAR-623 More single ref attachment awesomeness testing * Committed temporary fix for running dwell and query-cache on deneb.lindenlab.com, since it's in the DFW colo with the current asset cluster. * DEV-15783 Groups not shown in search wont appear in your profile while using webservice * QAR-642 Even more single ref attachment awesomeness testing From Branch_1-21-Server (which didn't go directly into release) * addinng the phputf8 library found from http://phputf8.sourceforge.net/ and liscensed LGPL. For DEV-15202 * Checking in a fix for settle balance portion proc - the event query was moved. * fix for DEV-15202 - replace non-utf8 with REPLACEMENT CHAR. See jira for more info. * Checking return value from /proc/vault/charge, must get back a string. * removed code used for the browser hud AB test. * Changed TTL from stupid default of 1234 to 5 * DEV-15788 Fixing crashloganalyzer.py cleanup of unparseable crash reports. * DEV-15737 offline scripted IMs not working inprocess_im_using_ws Merge conflict resolutions/fixes include: * Addition of indra/test/llstring_tut.cpp to indra/test/test.vcproj migrated to CMakeLists.txt * Changes to BuildParams, scripts/automated_build_scripts/* reviewed w/ cg * Changes to deploy scripts (scripts/farm, install_indra.py, farm_deploy) based on the 1.22 changes except for mkpersist dir addition (retained from release) * Changes to scripts/crash_report/crashloganalyzer.py retained from 1.22, per Mani * scripts/generate_indra_xml.py, etc/services-station.dtd, indra/newsim/llagentinfo.cpp analyzed carefully by josh * indra/llcommon/llstring.h required fix for client build ("" --> std::basic_string<T>()) in LLStringBase<T> initializer * indra/llphysics/abstract/llphysicsshape.h #include syntax changed from <llmath/llvolume.h> to "llvolume.h" Psst, don't tell anyone, but the dataserver-is-deprecatedmaster
parent
ad33281007
commit
810a0b3dce
|
|
@ -38,7 +38,11 @@
|
|||
// At 45 Hz collisions seem stable and objects seem
|
||||
// to settle down at a reasonable rate.
|
||||
// JC 3/18/2003
|
||||
const F32 PHYSICS_TIMESTEP = 1.f / 45.f;
|
||||
|
||||
// const F32 PHYSICS_TIMESTEP = 1.f / 45.f;
|
||||
// This must be a #define due to anal retentive restrictions on const expressions
|
||||
// CG 2008-06-05
|
||||
#define PHYSICS_TIMESTEP (1.f / 45.f)
|
||||
|
||||
const F32 COLLISION_TOLERANCE = 0.1f;
|
||||
const F32 HALF_COLLISION_TOLERANCE = COLLISION_TOLERANCE * 0.5f;
|
||||
|
|
@ -50,9 +54,9 @@ const U32 DAYS_PER_LINDEN_YEAR = 11;
|
|||
const U32 SEC_PER_LINDEN_DAY = HOURS_PER_LINDEN_DAY * 60 * 60;
|
||||
const U32 SEC_PER_LINDEN_YEAR = DAYS_PER_LINDEN_YEAR * SEC_PER_LINDEN_DAY;
|
||||
|
||||
const F32 REGION_WIDTH_METERS = 256.f;
|
||||
const S32 REGION_WIDTH_UNITS = 256;
|
||||
const U32 REGION_WIDTH_U32 = 256;
|
||||
static const F32 REGION_WIDTH_METERS = 256.f;
|
||||
static const S32 REGION_WIDTH_UNITS = 256;
|
||||
static const U32 REGION_WIDTH_U32 = 256;
|
||||
|
||||
const F32 REGION_HEIGHT_METERS = 4096.f;
|
||||
|
||||
|
|
|
|||
|
|
@ -224,6 +224,7 @@ LLSD LLApp::getOptionData(OptionPriority level)
|
|||
void LLApp::stepFrame()
|
||||
{
|
||||
LLFrameTimer::updateFrameTime();
|
||||
LLFrameTimer::updateFrameCount();
|
||||
LLEventTimer::updateClass();
|
||||
mRunner.run();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -53,7 +53,6 @@ void LLFrameTimer::updateFrameTime()
|
|||
sTotalTime = total_time;
|
||||
sTotalSeconds = U64_to_F64(sTotalTime) * USEC_TO_SEC_F64;
|
||||
sFrameTime = U64_to_F64(sTotalTime - sStartTotalTime) * USEC_TO_SEC_F64;
|
||||
sFrameCount++;
|
||||
}
|
||||
|
||||
void LLFrameTimer::start()
|
||||
|
|
|
|||
|
|
@ -67,10 +67,14 @@ public:
|
|||
return sTotalSeconds;
|
||||
}
|
||||
|
||||
// Call this method once per frame to update the current frame time.
|
||||
// Call this method once per frame to update the current frame time. This is actually called
|
||||
// at some other times as well
|
||||
static void updateFrameTime();
|
||||
|
||||
static S32 getFrameCount() { return sFrameCount; }
|
||||
// Call this method once, and only once, per frame to update the current frame count.
|
||||
static void updateFrameCount() { sFrameCount++; }
|
||||
|
||||
static U32 getFrameCount() { return sFrameCount; }
|
||||
|
||||
static F32 getFrameDeltaTimeF32();
|
||||
|
||||
|
|
|
|||
|
|
@ -68,20 +68,24 @@ protected:
|
|||
U32 countLimit;
|
||||
// maximum number of keys allowed per interval
|
||||
|
||||
U64 interval_usec;
|
||||
// each map covers this time period
|
||||
U64 start_usec;
|
||||
U64 intervalLength; // each map covers this time period (usec or frame number)
|
||||
U64 startTime; // start of the time period (usec or frame number)
|
||||
|
||||
// currMap started counting at this time
|
||||
// prevMap covers the previous interval
|
||||
|
||||
LLKeyThrottleImpl() : prevMap(0), currMap(0),
|
||||
countLimit(0), interval_usec(0),
|
||||
start_usec(0) { };
|
||||
countLimit(0), intervalLength(1),
|
||||
startTime(0) { };
|
||||
|
||||
static U64 getTime()
|
||||
{
|
||||
return LLFrameTimer::getTotalTime();
|
||||
}
|
||||
static U64 getFrame() // Return the current frame number
|
||||
{
|
||||
return (U64) LLFrameTimer::getFrameCount();
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
|
@ -89,17 +93,10 @@ template< class T >
|
|||
class LLKeyThrottle
|
||||
{
|
||||
public:
|
||||
LLKeyThrottle(U32 limit, F32 interval)
|
||||
LLKeyThrottle(U32 limit, F32 interval, BOOL realtime = TRUE) // realtime = FALSE for frame-based throttle, TRUE for usec real-time throttle
|
||||
: m(* new LLKeyThrottleImpl<T>)
|
||||
{
|
||||
// limit is the maximum number of keys
|
||||
// allowed per interval (in seconds)
|
||||
m.countLimit = limit;
|
||||
m.interval_usec = (U64)(interval * USEC_PER_SEC);
|
||||
m.start_usec = LLKeyThrottleImpl<T>::getTime();
|
||||
|
||||
m.prevMap = new typename LLKeyThrottleImpl<T>::EntryMap;
|
||||
m.currMap = new typename LLKeyThrottleImpl<T>::EntryMap;
|
||||
setParameters( limit, interval, realtime );
|
||||
}
|
||||
|
||||
~LLKeyThrottle()
|
||||
|
|
@ -118,18 +115,26 @@ public:
|
|||
// call each time the key wants use
|
||||
State noteAction(const T& id, S32 weight = 1)
|
||||
{
|
||||
U64 now = LLKeyThrottleImpl<T>::getTime();
|
||||
|
||||
if (now >= (m.start_usec + m.interval_usec))
|
||||
U64 now = 0;
|
||||
if ( mIsRealtime )
|
||||
{
|
||||
if (now < (m.start_usec + 2 * m.interval_usec))
|
||||
now = LLKeyThrottleImpl<T>::getTime();
|
||||
}
|
||||
else
|
||||
{
|
||||
now = LLKeyThrottleImpl<T>::getFrame();
|
||||
}
|
||||
|
||||
if (now >= (m.startTime + m.intervalLength))
|
||||
{
|
||||
if (now < (m.startTime + 2 * m.intervalLength))
|
||||
{
|
||||
// prune old data
|
||||
delete m.prevMap;
|
||||
m.prevMap = m.currMap;
|
||||
m.currMap = new typename LLKeyThrottleImpl<T>::EntryMap;
|
||||
|
||||
m.start_usec += m.interval_usec;
|
||||
m.startTime += m.intervalLength;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -139,7 +144,7 @@ public:
|
|||
m.prevMap = new typename LLKeyThrottleImpl<T>::EntryMap;
|
||||
m.currMap = new typename LLKeyThrottleImpl<T>::EntryMap;
|
||||
|
||||
m.start_usec = now;
|
||||
m.startTime = now;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -166,7 +171,7 @@ public:
|
|||
// (now) time.
|
||||
|
||||
// compute current, windowed rate
|
||||
F64 timeInCurrent = ((F64)(now - m.start_usec) / m.interval_usec);
|
||||
F64 timeInCurrent = ((F64)(now - m.startTime) / m.intervalLength);
|
||||
F64 averageCount = curr.count + prevCount * (1.0 - timeInCurrent);
|
||||
|
||||
curr.blocked |= averageCount > m.countLimit;
|
||||
|
|
@ -224,8 +229,46 @@ public:
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
// Get the throttling parameters
|
||||
void getParameters( U32 & out_limit, F32 & out_interval, BOOL & out_realtime )
|
||||
{
|
||||
out_limit = m.countLimit;
|
||||
out_interval = m.intervalLength;
|
||||
out_realtime = mIsRealtime;
|
||||
}
|
||||
|
||||
// Set the throttling behavior
|
||||
void setParameters( U32 limit, F32 interval, BOOL realtime )
|
||||
{
|
||||
// limit is the maximum number of keys
|
||||
// allowed per interval (in seconds or frames)
|
||||
mIsRealtime = realtime;
|
||||
m.countLimit = limit;
|
||||
if ( mIsRealtime )
|
||||
{
|
||||
m.intervalLength = (U64)(interval * USEC_PER_SEC);
|
||||
m.startTime = LLKeyThrottleImpl<T>::getTime();
|
||||
}
|
||||
else
|
||||
{
|
||||
m.intervalLength = (U64)interval;
|
||||
m.startTime = LLKeyThrottleImpl<T>::getFrame();
|
||||
}
|
||||
|
||||
if ( m.intervalLength == 0 )
|
||||
{ // Don't allow zero intervals
|
||||
m.intervalLength = 1;
|
||||
}
|
||||
|
||||
delete m.prevMap;
|
||||
m.prevMap = new typename LLKeyThrottleImpl<T>::EntryMap;
|
||||
delete m.currMap;
|
||||
m.currMap = new typename LLKeyThrottleImpl<T>::EntryMap;
|
||||
}
|
||||
|
||||
protected:
|
||||
LLKeyThrottleImpl<T>& m;
|
||||
BOOL mIsRealtime; // TRUE to be time based (default), FALSE for frame based
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -929,6 +929,32 @@ namespace LLStringFn
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
// https://wiki.lindenlab.com/wiki/Unicode_Guidelines has details on
|
||||
// allowable code points for XML. Specifically, they are:
|
||||
// 0x09, 0x0a, 0x0d, and 0x20 on up. JC
|
||||
std::string strip_invalid_xml(const std::string& input)
|
||||
{
|
||||
std::string output;
|
||||
output.reserve( input.size() );
|
||||
std::string::const_iterator it = input.begin();
|
||||
while (it != input.end())
|
||||
{
|
||||
// Must compare as unsigned for >=
|
||||
// Test most likely match first
|
||||
const unsigned char c = (unsigned char)*it;
|
||||
if ( c >= (unsigned char)0x20 // SPACE
|
||||
|| c == (unsigned char)0x09 // TAB
|
||||
|| c == (unsigned char)0x0a // LINE_FEED
|
||||
|| c == (unsigned char)0x0d ) // CARRIAGE_RETURN
|
||||
{
|
||||
output.push_back(c);
|
||||
}
|
||||
++it;
|
||||
}
|
||||
return output;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -545,6 +545,13 @@ namespace LLStringFn
|
|||
*/
|
||||
void replace_nonprintable_and_pipe(std::basic_string<llwchar>& str,
|
||||
llwchar replacement);
|
||||
|
||||
/**
|
||||
* @brief Remove all characters that are not allowed in XML 1.0.
|
||||
* Returns a copy of the string with those characters removed.
|
||||
* Works with US ASCII and UTF-8 encoded strings. JC
|
||||
*/
|
||||
std::string strip_invalid_xml(const std::string& input);
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
|
|
@ -739,17 +746,9 @@ LLStringBase<T>::LLStringBase(const T* s, size_type n ) : std::basic_string<T>()
|
|||
|
||||
// Init from a substring
|
||||
template<class T>
|
||||
LLStringBase<T>::LLStringBase(const T* s, size_type pos, size_type n ) : std::basic_string<T>()
|
||||
{
|
||||
if( s )
|
||||
{
|
||||
assign(s + pos, n);
|
||||
}
|
||||
else
|
||||
{
|
||||
assign(LLStringBase<T>::null);
|
||||
}
|
||||
}
|
||||
LLStringBase<T>::LLStringBase(const T* s, size_type pos, size_type n )
|
||||
: std::basic_string<T>( (s ? s : std::basic_string<T>() ), pos, n )
|
||||
{ }
|
||||
|
||||
//static
|
||||
template<class T>
|
||||
|
|
|
|||
|
|
@ -33,9 +33,9 @@
|
|||
#define LL_LLVERSIONSERVER_H
|
||||
|
||||
const S32 LL_VERSION_MAJOR = 1;
|
||||
const S32 LL_VERSION_MINOR = 21;
|
||||
const S32 LL_VERSION_PATCH = 1;
|
||||
const S32 LL_VERSION_BUILD = 86526;
|
||||
const S32 LL_VERSION_MINOR = 22;
|
||||
const S32 LL_VERSION_PATCH = 2;
|
||||
const S32 LL_VERSION_BUILD = 87048;
|
||||
|
||||
const char * const LL_CHANNEL = "Second Life Server";
|
||||
|
||||
|
|
|
|||
|
|
@ -111,10 +111,13 @@ std::string LLServiceBuilder::buildServiceURI(
|
|||
const std::string& service_name,
|
||||
const LLSD& option_map)
|
||||
{
|
||||
std::string service_url = buildServiceURI(service_name);
|
||||
|
||||
// Find the Service Name
|
||||
if(!service_url.empty() && option_map.isMap())
|
||||
return russ_format(buildServiceURI(service_name), option_map);
|
||||
}
|
||||
|
||||
std::string russ_format(const std::string& format_str, const LLSD& context)
|
||||
{
|
||||
std::string service_url(format_str);
|
||||
if(!service_url.empty() && context.isMap())
|
||||
{
|
||||
// throw in a ridiculously large limiter to make sure we don't
|
||||
// loop forever with bad input.
|
||||
|
|
@ -134,9 +137,9 @@ std::string LLServiceBuilder::buildServiceURI(
|
|||
std::string::iterator end(service_url.end());
|
||||
std::string::iterator deepest_node(service_url.end());
|
||||
std::string::iterator deepest_node_end(service_url.end());
|
||||
//parse out the variables to replace by going through {}s one at a time,
|
||||
// starting with the "deepest" in series {{}},
|
||||
// and otherwise replacing right-to-left
|
||||
// parse out the variables to replace by going through {}s
|
||||
// one at a time, starting with the "deepest" in series
|
||||
// {{}}, and otherwise replacing right-to-left
|
||||
for(; iter != end; ++iter)
|
||||
{
|
||||
switch(*iter)
|
||||
|
|
@ -171,7 +174,7 @@ std::string LLServiceBuilder::buildServiceURI(
|
|||
// params and straight string substitution, so it's a
|
||||
// known distance of 2 to skip the directive.
|
||||
std::string key(deepest_node + 2, deepest_node_end);
|
||||
LLSD value = option_map[key];
|
||||
LLSD value = context[key];
|
||||
switch(*(deepest_node + 1))
|
||||
{
|
||||
case '$':
|
||||
|
|
@ -184,7 +187,9 @@ std::string LLServiceBuilder::buildServiceURI(
|
|||
}
|
||||
else
|
||||
{
|
||||
llwarns << "Unknown key: " << key << " in option map: " << LLSDOStreamer<LLSDNotationFormatter>(option_map) << llendl;
|
||||
llwarns << "Unknown key: " << key << " in option map: "
|
||||
<< LLSDOStreamer<LLSDNotationFormatter>(context)
|
||||
<< llendl;
|
||||
keep_looping = false;
|
||||
}
|
||||
break;
|
||||
|
|
@ -212,50 +217,3 @@ std::string LLServiceBuilder::buildServiceURI(
|
|||
}
|
||||
return service_url;
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Old, not as good implementation. Phoenix 2007-10-15
|
||||
#if 0
|
||||
// Do brace replacements - NOT CURRENTLY RECURSIVE
|
||||
for(LLSD::map_const_iterator option_itr = option_map.beginMap();
|
||||
option_itr != option_map.endMap();
|
||||
++option_itr)
|
||||
{
|
||||
std::string variable_name = "{$";
|
||||
variable_name.append((*option_itr).first);
|
||||
variable_name.append("}");
|
||||
std::string::size_type find_pos = service_url.find(variable_name);
|
||||
if(find_pos != std::string::npos)
|
||||
{
|
||||
service_url.replace(
|
||||
find_pos,
|
||||
variable_name.length(),
|
||||
(*option_itr).second.asString());
|
||||
continue;
|
||||
}
|
||||
variable_name.assign("{%");
|
||||
variable_name.append((*option_itr).first);
|
||||
variable_name.append("}");
|
||||
find_pos = service_url.find(variable_name);
|
||||
if(find_pos != std::string::npos)
|
||||
{
|
||||
std::string query_str = LLURI::mapToQueryString(
|
||||
(*option_itr).second);
|
||||
service_url.replace(
|
||||
find_pos,
|
||||
variable_name.length(),
|
||||
query_str);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (service_url.find('{') != std::string::npos)
|
||||
{
|
||||
llwarns << "Constructed a likely bogus service URL: " << service_url
|
||||
<< llendl;
|
||||
}
|
||||
|
||||
return service_url;
|
||||
}
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -38,11 +38,24 @@
|
|||
|
||||
class LLSD;
|
||||
|
||||
/**
|
||||
* @brief Format format string according to rules for RUSS.
|
||||
*
|
||||
* This function appears alongside the service builder since the
|
||||
* algorithm was originally implemented there. This can eventually be
|
||||
* moved when someone wants to take the time.
|
||||
* @see https://osiris.lindenlab.com/mediawiki/index.php/Recursive_URL_Substitution_Syntax
|
||||
* @param format_str The input string to format.
|
||||
* @param context A map used for string substitutions.
|
||||
* @return Returns the formatted string. If no match is found for a
|
||||
* substitution target, the braces remain intact.
|
||||
*/
|
||||
std::string russ_format(const std::string& format_str, const LLSD& context);
|
||||
|
||||
/**
|
||||
* @class LLServiceBuilder
|
||||
* @brief This class builds urls for us to use when making web service calls.
|
||||
*/
|
||||
|
||||
class LLServiceBuilder
|
||||
{
|
||||
LOG_CLASS(LLServiceBuilder);
|
||||
|
|
|
|||
|
|
@ -321,7 +321,7 @@ BOOL LLButton::handleMouseDown(S32 x, S32 y, MASK mask)
|
|||
}
|
||||
|
||||
mMouseDownTimer.start();
|
||||
mMouseDownFrame = LLFrameTimer::getFrameCount();
|
||||
mMouseDownFrame = (S32) LLFrameTimer::getFrameCount();
|
||||
|
||||
if (getSoundFlags() & MOUSE_DOWN)
|
||||
{
|
||||
|
|
@ -385,7 +385,7 @@ BOOL LLButton::handleHover(S32 x, S32 y, MASK mask)
|
|||
if (mMouseDownTimer.getStarted() && NULL != mHeldDownCallback)
|
||||
{
|
||||
F32 elapsed = getHeldDownTime();
|
||||
if( mHeldDownDelay <= elapsed && mHeldDownFrameDelay <= LLFrameTimer::getFrameCount() - mMouseDownFrame)
|
||||
if( mHeldDownDelay <= elapsed && mHeldDownFrameDelay <= (S32)LLFrameTimer::getFrameCount() - mMouseDownFrame)
|
||||
{
|
||||
mHeldDownCallback( mCallbackUserData );
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3013,6 +3013,7 @@ void LLAppViewer::idle()
|
|||
static LLTimer idle_timer;
|
||||
|
||||
LLFrameTimer::updateFrameTime();
|
||||
LLFrameTimer::updateFrameCount();
|
||||
LLEventTimer::updateClass();
|
||||
LLCriticalDamp::updateInterpolants();
|
||||
LLMortician::updateClass();
|
||||
|
|
|
|||
|
|
@ -52,6 +52,7 @@ LLFloaterCamera::LLFloaterCamera(const LLSD& val)
|
|||
{
|
||||
setIsChrome(TRUE);
|
||||
|
||||
// For now, only used for size and tooltip strings
|
||||
const BOOL DONT_OPEN = FALSE;
|
||||
LLUICtrlFactory::getInstance()->buildFloater(this, "floater_camera.xml", NULL, DONT_OPEN);
|
||||
|
||||
|
|
|
|||
|
|
@ -55,6 +55,7 @@ set(test_SOURCE_FILES
|
|||
llsdutil_tut.cpp
|
||||
llservicebuilder_tut.cpp
|
||||
llstreamtools_tut.cpp
|
||||
llstring_tut.cpp
|
||||
lltemplatemessagebuilder_tut.cpp
|
||||
lltiming_tut.cpp
|
||||
lltut.cpp
|
||||
|
|
|
|||
Loading…
Reference in New Issue