Merge Firestorm LGPL
commit
e0e09481df
1
.hgtags
1
.hgtags
|
|
@ -33,6 +33,7 @@ a27ad24ed75000d96d056aa20495637386e4a53e Firestorm_4.7.5_Release
|
|||
31f9b0f8e9365a87975af3aa73e3f782db17f994 Firestorm_4.7.7_Release
|
||||
6ef63161a501b12536b1a94b74d0084a4b014572 Firestorm_4.7.9_Release
|
||||
ab632018105ccfdf8a9e5ea1a8302badd58b686e Firestorm_5.0.1_Release
|
||||
85a08f4808867882219d3fceeb32f7df0de523b7 Firestorm_5.0.7_Release
|
||||
bb38ff1a763738609e1b3cada6d15fa61e5e84b9 2.1.1-release
|
||||
003dd9461bfa479049afcc34545ab3431b147c7c v2start
|
||||
52d96ad3d39be29147c5b2181b3bb46af6164f0e alpha-3
|
||||
|
|
|
|||
|
|
@ -176,8 +176,6 @@ def main():
|
|||
option_names.append('help')
|
||||
|
||||
option_names.append('m64')
|
||||
option_names.append('upgradecodes=')
|
||||
option_names.append('copy_artwork')
|
||||
|
||||
options, remainder = getopt.getopt(sys.argv[1:], "", option_names)
|
||||
|
||||
|
|
|
|||
|
|
@ -127,9 +127,12 @@ const int HTTP_TRACE_MAX = HTTP_TRACE_CURL_BODIES;
|
|||
// We want to span a few windows to allow transport to slow
|
||||
// after onset of the throttles and then recover without a final
|
||||
// failure. Other systems may need other constants.
|
||||
const int HTTP_RETRY_COUNT_DEFAULT = 8;
|
||||
const int HTTP_RETRY_COUNT_DEFAULT = 5;
|
||||
const int HTTP_RETRY_COUNT_MIN = 0;
|
||||
const int HTTP_RETRY_COUNT_MAX = 100;
|
||||
const HttpTime HTTP_RETRY_BACKOFF_MIN_DEFAULT = 1E6L; // 1 sec
|
||||
const HttpTime HTTP_RETRY_BACKOFF_MAX_DEFAULT = 5E6L; // 5 sec
|
||||
const HttpTime HTTP_RETRY_BACKOFF_MAX = 20E6L; // 20 sec
|
||||
|
||||
const int HTTP_REDIRECTS_DEFAULT = 10;
|
||||
|
||||
|
|
|
|||
|
|
@ -140,6 +140,8 @@ HttpOpRequest::HttpOpRequest()
|
|||
mPolicy503Retries(0),
|
||||
mPolicyRetryAt(HttpTime(0)),
|
||||
mPolicyRetryLimit(HTTP_RETRY_COUNT_DEFAULT),
|
||||
mPolicyMinRetryBackoff(HttpTime(HTTP_RETRY_BACKOFF_MIN_DEFAULT)),
|
||||
mPolicyMaxRetryBackoff(HttpTime(HTTP_RETRY_BACKOFF_MAX_DEFAULT)),
|
||||
mCallbackSSLVerify(NULL)
|
||||
{
|
||||
// *NOTE: As members are added, retry initialization/cleanup
|
||||
|
|
@ -434,6 +436,9 @@ void HttpOpRequest::setupCommon(HttpRequest::policy_t policy_id,
|
|||
mPolicyRetryLimit = options->getRetries();
|
||||
mPolicyRetryLimit = llclamp(mPolicyRetryLimit, HTTP_RETRY_COUNT_MIN, HTTP_RETRY_COUNT_MAX);
|
||||
mTracing = (std::max)(mTracing, llclamp(options->getTrace(), HTTP_TRACE_MIN, HTTP_TRACE_MAX));
|
||||
|
||||
mPolicyMinRetryBackoff = llclamp(options->getMinBackoff(), HttpTime(0), HTTP_RETRY_BACKOFF_MAX);
|
||||
mPolicyMaxRetryBackoff = llclamp(options->getMaxBackoff(), mPolicyMinRetryBackoff, HTTP_RETRY_BACKOFF_MAX);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -232,6 +232,8 @@ public:
|
|||
int mPolicy503Retries;
|
||||
HttpTime mPolicyRetryAt;
|
||||
int mPolicyRetryLimit;
|
||||
HttpTime mPolicyMinRetryBackoff; // initial delay between retries (mcs)
|
||||
HttpTime mPolicyMaxRetryBackoff;
|
||||
}; // end class HttpOpRequest
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -151,20 +151,16 @@ void HttpPolicy::addOp(const HttpOpRequest::ptr_t &op)
|
|||
|
||||
void HttpPolicy::retryOp(const HttpOpRequest::ptr_t &op)
|
||||
{
|
||||
static const HttpTime retry_deltas[] =
|
||||
{
|
||||
250000, // 1st retry in 0.25 S, etc...
|
||||
500000,
|
||||
1000000,
|
||||
2000000,
|
||||
5000000 // ... to every 5.0 S.
|
||||
};
|
||||
static const int delta_max(int(LL_ARRAY_SIZE(retry_deltas)) - 1);
|
||||
static const HttpStatus error_503(503);
|
||||
|
||||
const HttpTime now(totalTime());
|
||||
const int policy_class(op->mReqPolicy);
|
||||
HttpTime delta(retry_deltas[llclamp(op->mPolicyRetries, 0, delta_max)]);
|
||||
|
||||
HttpTime delta_min = op->mPolicyMinRetryBackoff;
|
||||
HttpTime delta_max = op->mPolicyMaxRetryBackoff;
|
||||
// mPolicyRetries limited to 100
|
||||
U32 delta_factor = op->mPolicyRetries <= 10 ? 1 << op->mPolicyRetries : 1024;
|
||||
HttpTime delta = llmin(delta_min * delta_factor, delta_max);
|
||||
bool external_delta(false);
|
||||
|
||||
if (op->mReplyRetryAfter > 0 && op->mReplyRetryAfter < 30)
|
||||
|
|
|
|||
|
|
@ -39,6 +39,8 @@ HttpOptions::HttpOptions() :
|
|||
mTimeout(HTTP_REQUEST_TIMEOUT_DEFAULT),
|
||||
mTransferTimeout(HTTP_REQUEST_XFER_TIMEOUT_DEFAULT),
|
||||
mRetries(HTTP_RETRY_COUNT_DEFAULT),
|
||||
mMinRetryBackoff(HTTP_RETRY_BACKOFF_MIN_DEFAULT),
|
||||
mMaxRetryBackoff(HTTP_RETRY_BACKOFF_MAX_DEFAULT),
|
||||
mUseRetryAfter(HTTP_USE_RETRY_AFTER_DEFAULT),
|
||||
mFollowRedirects(true),
|
||||
mVerifyPeer(false),
|
||||
|
|
@ -81,6 +83,16 @@ void HttpOptions::setRetries(unsigned int retries)
|
|||
mRetries = retries;
|
||||
}
|
||||
|
||||
void HttpOptions::setMinBackoff(HttpTime delay)
|
||||
{
|
||||
mMinRetryBackoff = delay;
|
||||
}
|
||||
|
||||
void HttpOptions::setMaxBackoff(HttpTime delay)
|
||||
{
|
||||
mMaxRetryBackoff = delay;
|
||||
}
|
||||
|
||||
void HttpOptions::setUseRetryAfter(bool use_retry)
|
||||
{
|
||||
mUseRetryAfter = use_retry;
|
||||
|
|
|
|||
|
|
@ -101,13 +101,31 @@ public:
|
|||
|
||||
/// Sets the number of retries on an LLCore::HTTPRequest before the
|
||||
/// request fails.
|
||||
// Default: 8
|
||||
// Default: 5
|
||||
void setRetries(unsigned int retries);
|
||||
unsigned int getRetries() const
|
||||
{
|
||||
return mRetries;
|
||||
}
|
||||
|
||||
/// Sets minimal delay before request retries. In microseconds.
|
||||
/// HttpPolicy will increase delay from min to max with each retry
|
||||
// Default: 1 000 000 mcs
|
||||
void setMinBackoff(HttpTime delay);
|
||||
HttpTime getMinBackoff() const
|
||||
{
|
||||
return mMinRetryBackoff;
|
||||
}
|
||||
|
||||
/// Sets maximum delay before request retries. In microseconds.
|
||||
/// HttpPolicy will increase delay from min to max with each retry
|
||||
// Default: 5 000 000 mcs
|
||||
void setMaxBackoff(HttpTime delay);
|
||||
HttpTime getMaxBackoff() const
|
||||
{
|
||||
return mMaxRetryBackoff;
|
||||
}
|
||||
|
||||
// Default: true
|
||||
void setUseRetryAfter(bool use_retry);
|
||||
bool getUseRetryAfter() const
|
||||
|
|
@ -166,6 +184,8 @@ protected:
|
|||
unsigned int mTimeout;
|
||||
unsigned int mTransferTimeout;
|
||||
unsigned int mRetries;
|
||||
HttpTime mMinRetryBackoff;
|
||||
HttpTime mMaxRetryBackoff;
|
||||
bool mUseRetryAfter;
|
||||
bool mFollowRedirects;
|
||||
bool mVerifyPeer;
|
||||
|
|
|
|||
|
|
@ -897,7 +897,9 @@ LLUrlEntryAgentDisplayName::LLUrlEntryAgentDisplayName()
|
|||
|
||||
std::string LLUrlEntryAgentDisplayName::getName(const LLAvatarName& avatar_name)
|
||||
{
|
||||
return avatar_name.getDisplayName(true);
|
||||
// <FS:Ansariel> Don't force a display name if display names are disabled
|
||||
//return avatar_name.getDisplayName(true);
|
||||
return avatar_name.getDisplayName();
|
||||
}
|
||||
|
||||
//
|
||||
|
|
|
|||
|
|
@ -2146,7 +2146,7 @@ if (WINDOWS)
|
|||
)
|
||||
|
||||
if( ND_BUILD64BIT_ARCH )
|
||||
set( VIEWERMANIFEST_FLAGS --m64 --copy_artwork )
|
||||
set( VIEWERMANIFEST_FLAGS --m64 )
|
||||
set( VIEWERMANIFEST_PACKAGE_FLAGS --m64 )
|
||||
else( ND_BUILD64BIT_ARCH )
|
||||
set( VIEWERMANIFEST_FLAGS "" )
|
||||
|
|
|
|||
|
|
@ -417,6 +417,30 @@
|
|||
desc="osAddAgentToGroup(key avatar, string group_name, string role_name);Adds the avatar to a group under a given role" />
|
||||
<function name="osRezObject" sleep="0.0" energy="10.0"
|
||||
desc="osRezObject(string inventory, vector position, vector velocity, rotation rot, integer param, integer rez_at_root_, integer do_recoil, integer set_die_at_edge, integer check_pos);Rez an object" />
|
||||
<function name="osCollisionSound" sleep="0.0" energy="10.0"
|
||||
desc="void osCollisionSound(string impact_sound, double impact_volume);Sets collision sound to impact_sound with specified volume." />
|
||||
<function name="osDie" sleep="0.0" energy="10.0"
|
||||
desc="float osDie(key objectUUID);Deletes an object depending on the target uuid. Note: Only allow osDie() on objects rezzed by the script prim Group (linkset) or on it self." />
|
||||
<function name="osGetPhysicsEngineName" sleep="0.0" energy="10.0"
|
||||
desc="string osGetPhysicsEngineName();This function returns a string containing the name and version number of the physics engine." />
|
||||
<function name="osGetPhysicsEngineType" sleep="0.0" energy="10.0"
|
||||
desc="string osGetPhysicsEngineType();This function returns a string containing the name of the Physics Engine." />
|
||||
<function name="osRequestSecureURL" sleep="0.0" energy="10.0"
|
||||
desc="void osRequestSecureURL(list options);Requests one HTTPS:// url (opensim version 0.9 or over)" />
|
||||
<function name="osRequestURL" sleep="0.0" energy="10.0"
|
||||
desc="void osRequestURL(list options);Requests one HTTP:// url (opensim version 0.9 or over)" />
|
||||
<function name="osNpcSetProfileAbout" sleep="0.0" energy="10.0"
|
||||
desc="osNpcSetProfileAbout(key npc, string about);Set about in created NPC's profile." />
|
||||
<function name="osNpcSetProfileImage" sleep="0.0" energy="10.0"
|
||||
desc="osNpcSetProfileImage(key npc, string image);Set image in created NPC's profile." />
|
||||
<function name="osGetGender" sleep="0.0" energy="10.0"
|
||||
desc="string osGetGender(key id);Returns a string with one of the following values: 'male', 'female', or 'unknown'. This value is determined by the value selected for the avatar shape in the appearance dialog in the user's viewer. If that value cannot be found for any reason (avatar is not in the region, improperly formatted key, etc.), 'unknown' is returned." />
|
||||
<function name="osGetHealRate" sleep="0.0" energy="10.0"
|
||||
desc="float osGetHealRate(key avatar);Gets the current automatic healing rate in % per second. Default heal rate is now around 0.5% per second. A value of zero can disable automatic heal, current maximum value is 100 % per second." />
|
||||
<function name="osSetHealRate" sleep="0.0" energy="10.0"
|
||||
desc="float osSetHealRate(key avatar, float healrate);Sets the automatic healing rate in % per second. Default heal rate is now around 0.5% per second. A value of zero can disable automatic heal, current maximum value is 100 % per second." />
|
||||
<function name="osDrawFilledEllipse" sleep="0.0" energy="10.0"
|
||||
desc="string osDrawFilledEllipse(string drawList, integer width, integer height);Appends an FillEllipse drawing command to the string provided in drawList and returns the result. The filled ellipse is drawn with the current pen size and color, with the specified width and height (in pixels), centered on a point which is (width/2) pixels to the right of the pen's current X position, and (height/2) pixels below the pen's current Y position. After the filled ellipse is drawn, the width and height values are added to the pen's X and Y position, respectively." />
|
||||
<!-- Windlight specific -->
|
||||
<function name="lsGetWindlightScene" sleep="0.0" energy="10.0"
|
||||
desc="list lsGetWindlightScene(list rules);Return the current Lightshare settings" />
|
||||
|
|
|
|||
|
|
@ -13,6 +13,17 @@
|
|||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>FSEnforceStrictObjectCheck</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Force malformed prims to be treated as invalid. This setting derenders all malformed prims, even those that might not cause obvious issues. Setting to false will allow bad prims to render but can cause crashes.</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>FSUseV2Friends</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
|
|
@ -7800,12 +7811,12 @@
|
|||
<key>Type</key>
|
||||
<string>F32</string>
|
||||
<key>Value</key>
|
||||
<real>10.0</real>
|
||||
<real>40.0</real>
|
||||
</map>
|
||||
<key>LoginSRVPump</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Name of the message pump that handles SRV request</string>
|
||||
<string>Name of the message pump that handles SRV request (deprecated)</string>
|
||||
<key>Persist</key>
|
||||
<integer>0</integer>
|
||||
<key>Type</key>
|
||||
|
|
@ -8650,7 +8661,7 @@
|
|||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>MemoryLogFrequency</key>
|
||||
<map>
|
||||
|
|
|
|||
|
|
@ -1334,7 +1334,10 @@ void FSChatHistory::appendMessage(const LLChat& chat, const LLSD &args, const LL
|
|||
{
|
||||
if (chat.mSourceType == CHAT_SOURCE_AGENT)
|
||||
{
|
||||
std::string name_format = "completename";
|
||||
static LLCachedControl<bool> useDisplayNames(gSavedSettings, "UseDisplayNames");
|
||||
static LLCachedControl<bool> nameTagShowUsernames(gSavedSettings, "NameTagShowUsernames");
|
||||
|
||||
std::string name_format = (useDisplayNames && nameTagShowUsernames) ? "completename" : "displayname";
|
||||
if (is_local && gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES))
|
||||
{
|
||||
name_format = "rlvanonym";
|
||||
|
|
|
|||
|
|
@ -3283,7 +3283,10 @@ bool LLAgent::requestPostCapability(const std::string &capName, LLSD &postData,
|
|||
{
|
||||
std::string url;
|
||||
|
||||
url = getRegion()->getCapability(capName);
|
||||
// <FS:Ansariel> FIRE-21323: Crashfix
|
||||
//url = getRegion()->getCapability(capName);
|
||||
url = getRegion() ? getRegion()->getCapability(capName) : "";
|
||||
// </FS:Ansariel>
|
||||
|
||||
if (url.empty())
|
||||
{
|
||||
|
|
@ -3299,7 +3302,10 @@ bool LLAgent::requestGetCapability(const std::string &capName, httpCallback_t cb
|
|||
{
|
||||
std::string url;
|
||||
|
||||
url = getRegion()->getCapability(capName);
|
||||
// <FS:Ansariel> FIRE-21323: Crashfix
|
||||
//url = getRegion()->getCapability(capName);
|
||||
url = getRegion() ? getRegion()->getCapability(capName) : "";
|
||||
// </FS:Ansariel>
|
||||
|
||||
if (url.empty())
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1518,7 +1518,8 @@ void LLAppViewer::checkMemory()
|
|||
|
||||
if(is_low)
|
||||
{
|
||||
LLMemory::logMemoryInfo() ;
|
||||
// <FS:Ansariel> Causes spammy log output
|
||||
//LLMemory::logMemoryInfo() ;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1362,7 +1362,17 @@ void LLAvatarActions::viewChatHistory(const LLUUID& id)
|
|||
{
|
||||
if (iter->getParticipantID() == id)
|
||||
{
|
||||
LLFloaterReg::showInstance("preview_conversation", iter->getSessionID(), true);
|
||||
// <FS:Ansariel> External chat history option
|
||||
//LLFloaterReg::showInstance("preview_conversation", iter->getSessionID(), true);
|
||||
if (gSavedSettings.getBOOL("FSUseBuiltInHistory"))
|
||||
{
|
||||
LLFloaterReg::showInstance("preview_conversation", iter->getSessionID(), TRUE);
|
||||
}
|
||||
else
|
||||
{
|
||||
gViewerWindow->getWindow()->openFile(LLLogChat::makeLogFileName(iter->getHistoryFileName()));
|
||||
}
|
||||
// </FS:Ansariel>
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
|
@ -1376,6 +1386,7 @@ void LLAvatarActions::viewChatHistory(const LLUUID& id)
|
|||
extended_id[LL_FCP_COMPLETE_NAME] = avatar_name.getCompleteName();
|
||||
// <FS:Ansariel> [Legacy IM logfile names]
|
||||
//extended_id[LL_FCP_ACCOUNT_NAME] = avatar_name.getAccountName();
|
||||
//LLFloaterReg::showInstance("preview_conversation", extended_id, true);
|
||||
if (gSavedSettings.getBOOL("UseLegacyIMLogNames"))
|
||||
{
|
||||
std::string avatar_user_name = avatar_name.getUserName();
|
||||
|
|
@ -1385,8 +1396,16 @@ void LLAvatarActions::viewChatHistory(const LLUUID& id)
|
|||
{
|
||||
extended_id[LL_FCP_ACCOUNT_NAME] = avatar_name.getAccountName();
|
||||
}
|
||||
|
||||
if (gSavedSettings.getBOOL("FSUseBuiltInHistory"))
|
||||
{
|
||||
LLFloaterReg::showInstance("preview_conversation", extended_id, TRUE);
|
||||
}
|
||||
else
|
||||
{
|
||||
gViewerWindow->getWindow()->openFile(LLLogChat::makeLogFileName(extended_id[LL_FCP_ACCOUNT_NAME].asString()));
|
||||
}
|
||||
// </FS:Ansariel> [Legacy IM logfile names]
|
||||
LLFloaterReg::showInstance("preview_conversation", extended_id, true);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1196,7 +1196,10 @@ bool LLFloaterBvhPreview::validateLoopIn(const LLSD& data)
|
|||
|
||||
getChild<LLUICtrl>("loop_in_point")->setValue(LLSD(loop_in_value));
|
||||
// <FS:Sei> FIRE-17277: Allow entering Loop In/Loop Out as frames
|
||||
getChild<LLUICtrl>("loop_in_frames")->setValue(LLSD(loop_in_value / 100.f * (F32)mNumFrames));
|
||||
// <FS:Beq> FIRE-21330: (additional cleanup) make loop out round to an integer
|
||||
// getChild<LLUICtrl>("loop_in_frames")->setValue(LLSD(loop_in_value / 100.f * (F32)mNumFrames));
|
||||
getChild<LLUICtrl>("loop_in_frames")->setValue(LLSD(ll_round(loop_in_value / 100.f * (F32)mNumFrames)));
|
||||
// </FS:Beq>
|
||||
// </FS:Sei>
|
||||
return true;
|
||||
}
|
||||
|
|
@ -1227,7 +1230,10 @@ bool LLFloaterBvhPreview::validateLoopOut(const LLSD& data)
|
|||
|
||||
getChild<LLUICtrl>("loop_out_point")->setValue(LLSD(loop_out_value));
|
||||
// <FS:Sei> FIRE-17277: Allow entering Loop In/Loop Out as frames
|
||||
getChild<LLUICtrl>("loop_out_frames")->setValue(LLSD(loop_out_value / 100.f * (F32)mNumFrames));
|
||||
// <FS:Beq> FIRE-21330: (additional cleanup) make loop out round to an integer
|
||||
// getChild<LLUICtrl>("loop_out_frames")->setValue(LLSD(loop_out_value / 100.f * (F32)mNumFrames));
|
||||
getChild<LLUICtrl>("loop_out_frames")->setValue(LLSD(ll_round(loop_out_value / 100.f * (F32)mNumFrames)));
|
||||
// </FS:Beq>
|
||||
// </FS:Sei>
|
||||
return true;
|
||||
}
|
||||
|
|
@ -1249,9 +1255,12 @@ bool LLFloaterBvhPreview::validateLoopInFrames(const LLSD& data)
|
|||
{
|
||||
loop_in_value = 0.f;
|
||||
}
|
||||
else if (loop_in_value > 100.f)
|
||||
// <FS:Beq> FIRE-21330: Max value for the ctrl is 1000 not 100.
|
||||
// else if (loop_in_value > 100.f)
|
||||
else if (loop_in_value > 1000.f)
|
||||
{
|
||||
loop_in_value = 100.f;
|
||||
// loop_in_value = 100.f;
|
||||
loop_in_value = 1000.f;
|
||||
}
|
||||
else if (loop_in_value > loop_out_value)
|
||||
{
|
||||
|
|
@ -1278,9 +1287,12 @@ bool LLFloaterBvhPreview::validateLoopOutFrames(const LLSD& data)
|
|||
{
|
||||
loop_out_value = 0.f;
|
||||
}
|
||||
else if (loop_out_value > 100.f)
|
||||
// <FS:Beq> FIRE-21330: Max value for the ctrl is 1000 not 100.
|
||||
// else if (loop_out_value > 100.f)
|
||||
else if (loop_out_value > 1000.f)
|
||||
{
|
||||
loop_out_value = 100.f;
|
||||
// loop_out_value = 100.f;
|
||||
loop_out_value = 1000.f;
|
||||
}
|
||||
else if (loop_out_value < loop_in_value)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -3075,15 +3075,21 @@ void LLIMMgr::addMessage(
|
|||
if (!dontIgnoreAdHocFromFriends || (dontIgnoreAdHocFromFriends && LLAvatarTracker::instance().getBuddyInfo(other_participant_id) == NULL))
|
||||
{
|
||||
static LLCachedControl<bool> reportIgnoredAdHocSession(gSavedSettings, "FSReportIgnoredAdHocSession");
|
||||
LL_INFOS() << "Ignoring conference (ad-hoc) chat from " << new_session_id.asString() << LL_ENDL;
|
||||
//<FS:Beq> [FIRE-21385] Add inviter name/UUID to ad-hoc ignored messages
|
||||
LLSD args;
|
||||
args["AVATAR_NAME"] = LLSLURL("agent", other_participant_id, "about").getSLURLString();
|
||||
// LL_INFOS() << "Ignoring conference (ad-hoc) chat from " << new_session_id.asString() << LL_ENDL;
|
||||
LL_INFOS() << "Ignoring conference (ad-hoc) chat from " << args["AVATAR_NAME"] << LL_ENDL;
|
||||
if (!gIMMgr->leaveSession(new_session_id))
|
||||
{
|
||||
LL_WARNS() << "Ad-hoc session " << new_session_id.asString() << " does not exist." << LL_ENDL;
|
||||
}
|
||||
else if (reportIgnoredAdHocSession)
|
||||
{
|
||||
report_to_nearby_chat(LLTrans::getString("IgnoredAdHocSession"));
|
||||
// report_to_nearby_chat(LLTrans::getString("IgnoredAdHocSession"));
|
||||
report_to_nearby_chat(LLTrans::getString("IgnoredAdHocSession", args));
|
||||
}
|
||||
//</FS:Beq>
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -42,6 +42,7 @@
|
|||
#include "bufferstream.h"
|
||||
#include "llcorehttputil.h"
|
||||
#include "llviewermenu.h"
|
||||
#include "llviewernetwork.h"
|
||||
|
||||
// History (may be apocryphal)
|
||||
//
|
||||
|
|
@ -554,7 +555,13 @@ void LLInventoryModelBackgroundFetch::bulkFetch()
|
|||
// OnIdle it will be called anyway due to Add flag for processed item.
|
||||
// It seems like in some cases we are updaiting on fail (no flag),
|
||||
// but is there anything to update?
|
||||
gInventory.notifyObservers();
|
||||
// <FS:Ansariel> FIRE-21376: Inventory not loading properly on OpenSim
|
||||
//gInventory.notifyObservers();
|
||||
if (LLGridManager::getInstance()->isInSecondLife())
|
||||
{
|
||||
gInventory.notifyObservers();
|
||||
}
|
||||
// </FS:Ansariel>
|
||||
}
|
||||
|
||||
if ((mFetchCount > max_concurrent_fetches) ||
|
||||
|
|
@ -873,6 +880,12 @@ void BGFolderHttpHandler::processData(LLSD & content, LLCore::HttpResponse * res
|
|||
titem->setParent(lost_uuid);
|
||||
titem->updateParentOnServer(FALSE);
|
||||
gInventory.updateItem(titem);
|
||||
// <FS:Ansariel> FIRE-21376: Inventory not loading properly on OpenSim
|
||||
if (!LLGridManager::getInstance()->isInSecondLife())
|
||||
{
|
||||
gInventory.notifyObservers();
|
||||
}
|
||||
// </FS:Ansariel>
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -945,6 +958,13 @@ void BGFolderHttpHandler::processData(LLSD & content, LLCore::HttpResponse * res
|
|||
{
|
||||
fetcher->setAllFoldersFetched();
|
||||
}
|
||||
|
||||
// <FS:Ansariel> FIRE-21376: Inventory not loading properly on OpenSim
|
||||
if (!LLGridManager::getInstance()->isInSecondLife())
|
||||
{
|
||||
gInventory.notifyObservers();
|
||||
}
|
||||
// </FS:Ansariel>
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -987,6 +1007,13 @@ void BGFolderHttpHandler::processFailure(LLCore::HttpStatus status, LLCore::Http
|
|||
fetcher->setAllFoldersFetched();
|
||||
}
|
||||
}
|
||||
|
||||
// <FS:Ansariel> FIRE-21376: Inventory not loading properly on OpenSim
|
||||
if (!LLGridManager::getInstance()->isInSecondLife())
|
||||
{
|
||||
gInventory.notifyObservers();
|
||||
}
|
||||
// </FS:Ansariel>
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -1024,6 +1051,13 @@ void BGFolderHttpHandler::processFailure(const char * const reason, LLCore::Http
|
|||
fetcher->setAllFoldersFetched();
|
||||
}
|
||||
}
|
||||
|
||||
// <FS:Ansariel> FIRE-21376: Inventory not loading properly on OpenSim
|
||||
if (!LLGridManager::getInstance()->isInSecondLife())
|
||||
{
|
||||
gInventory.notifyObservers();
|
||||
}
|
||||
// </FS:Ansariel>
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -63,6 +63,8 @@
|
|||
#include <boost/scoped_ptr.hpp>
|
||||
#include <sstream>
|
||||
|
||||
const S32 LOGIN_MAX_RETRIES = 3;
|
||||
|
||||
class LLLoginInstance::Disposable {
|
||||
public:
|
||||
virtual ~Disposable() {}
|
||||
|
|
@ -625,13 +627,16 @@ void LLLoginInstance::constructAuthParams(LLPointer<LLCredential> user_credentia
|
|||
request_params["host_id"] = gSavedSettings.getString("HostID");
|
||||
request_params["extended_errors"] = true; // request message_id and message_args
|
||||
|
||||
// Specify desired timeout/retry options
|
||||
LLSD http_params;
|
||||
http_params["timeout"] = gSavedSettings.getF32("LoginSRVTimeout");
|
||||
http_params["retries"] = LOGIN_MAX_RETRIES;
|
||||
|
||||
mRequestData.clear();
|
||||
mRequestData["method"] = "login_to_simulator";
|
||||
mRequestData["params"] = request_params;
|
||||
mRequestData["options"] = requested_options;
|
||||
|
||||
mRequestData["cfg_srv_timeout"] = gSavedSettings.getF32("LoginSRVTimeout");
|
||||
mRequestData["cfg_srv_pump"] = gSavedSettings.getString("LoginSRVPump");
|
||||
mRequestData["http_params"] = http_params;
|
||||
}
|
||||
|
||||
bool LLLoginInstance::handleLoginEvent(const LLSD& event)
|
||||
|
|
|
|||
|
|
@ -37,6 +37,25 @@ using namespace std;
|
|||
unsigned char static_unique_id[] = {0,0,0,0,0,0};
|
||||
bool static has_static_unique_id = false;
|
||||
|
||||
#if LL_WINDOWS
|
||||
class FSComInitialize
|
||||
{
|
||||
HRESULT mHR;
|
||||
public:
|
||||
FSComInitialize()
|
||||
{
|
||||
mHR = CoInitializeEx( 0, COINIT_MULTITHREADED );
|
||||
if( FAILED( mHR ) )
|
||||
LL_DEBUGS( "AppInit" ) << "Failed to initialize COM library. Error code = 0x" << hex << mHR << LL_ENDL;
|
||||
}
|
||||
|
||||
~FSComInitialize()
|
||||
{
|
||||
if( SUCCEEDED( mHR ) )
|
||||
CoUninitialize();
|
||||
}
|
||||
};
|
||||
#endif
|
||||
// get an unique machine id.
|
||||
// NOT THREAD SAFE - do before setting up threads.
|
||||
// MAC Address doesn't work for Windows 7 since the first returned hardware MAC address changes with each reboot, Go figure??
|
||||
|
|
@ -59,12 +78,18 @@ S32 LLMachineID::init()
|
|||
// Step 1: --------------------------------------------------
|
||||
// Initialize COM. ------------------------------------------
|
||||
|
||||
hres = CoInitializeEx(0, COINIT_MULTITHREADED);
|
||||
if (FAILED(hres))
|
||||
{
|
||||
LL_DEBUGS("AppInit") << "Failed to initialize COM library. Error code = 0x" << hex << hres << LL_ENDL;
|
||||
return 1; // Program has failed.
|
||||
}
|
||||
// <FS:ND> Do not fail in case CoInitialize fails as it can be harmless
|
||||
|
||||
//hres = CoInitializeEx(0, COINIT_MULTITHREADED);
|
||||
//if (FAILED(hres))
|
||||
//{
|
||||
// LL_DEBUGS("AppInit") << "Failed to initialize COM library. Error code = 0x" << hex << hres << LL_ENDL;
|
||||
// return 1; // Program has failed.
|
||||
//}
|
||||
|
||||
FSComInitialize comInit;
|
||||
|
||||
// </FS:ND>
|
||||
|
||||
// Step 2: --------------------------------------------------
|
||||
// Set general COM security levels --------------------------
|
||||
|
|
@ -89,7 +114,7 @@ S32 LLMachineID::init()
|
|||
if (FAILED(hres))
|
||||
{
|
||||
LL_WARNS("AppInit") << "Failed to initialize security. Error code = 0x" << hex << hres << LL_ENDL;
|
||||
CoUninitialize();
|
||||
// CoUninitialize(); <FS:ND/> Counitialize will be handled by RAII class
|
||||
return 1; // Program has failed.
|
||||
}
|
||||
|
||||
|
|
@ -107,7 +132,7 @@ S32 LLMachineID::init()
|
|||
if (FAILED(hres))
|
||||
{
|
||||
LL_WARNS("AppInit") << "Failed to create IWbemLocator object." << " Err code = 0x" << hex << hres << LL_ENDL;
|
||||
CoUninitialize();
|
||||
// CoUninitialize(); <FS:ND/> Counitialize will be handled by RAII class
|
||||
return 1; // Program has failed.
|
||||
}
|
||||
|
||||
|
|
@ -134,7 +159,7 @@ S32 LLMachineID::init()
|
|||
{
|
||||
LL_WARNS("AppInit") << "Could not connect. Error code = 0x" << hex << hres << LL_ENDL;
|
||||
pLoc->Release();
|
||||
CoUninitialize();
|
||||
// CoUninitialize(); <FS:ND/> Counitialize will be handled by RAII class
|
||||
return 1; // Program has failed.
|
||||
}
|
||||
|
||||
|
|
@ -160,7 +185,7 @@ S32 LLMachineID::init()
|
|||
LL_WARNS("AppInit") << "Could not set proxy blanket. Error code = 0x" << hex << hres << LL_ENDL;
|
||||
pSvc->Release();
|
||||
pLoc->Release();
|
||||
CoUninitialize();
|
||||
// CoUninitialize(); <FS:ND/> Counitialize will be handled by RAII class
|
||||
return 1; // Program has failed.
|
||||
}
|
||||
|
||||
|
|
@ -181,7 +206,7 @@ S32 LLMachineID::init()
|
|||
LL_WARNS("AppInit") << "Query for operating system name failed." << " Error code = 0x" << hex << hres << LL_ENDL;
|
||||
pSvc->Release();
|
||||
pLoc->Release();
|
||||
CoUninitialize();
|
||||
// CoUninitialize(); <FS:ND/> Counitialize will be handled by RAII class
|
||||
return 1; // Program has failed.
|
||||
}
|
||||
|
||||
|
|
@ -236,7 +261,7 @@ S32 LLMachineID::init()
|
|||
pLoc->Release();
|
||||
if (pEnumerator)
|
||||
pEnumerator->Release();
|
||||
CoUninitialize();
|
||||
// CoUninitialize(); <FS:ND/> Counitialize will be handled by RAII class
|
||||
ret_code=0;
|
||||
#else
|
||||
unsigned char * staticPtr = (unsigned char *)(&static_unique_id[0]);
|
||||
|
|
|
|||
|
|
@ -1564,28 +1564,6 @@ void LLPanelMainInventory::onCustomAction(const LLSD& userdata)
|
|||
}
|
||||
LLFloaterReg::showInstance("linkreplace", params);
|
||||
}
|
||||
|
||||
// <FS:Ansariel> Inventory Links Replace
|
||||
if (command_name == "replace_links")
|
||||
{
|
||||
LLSD params;
|
||||
LLFolderViewItem* current_item = getActivePanel()->getRootFolder()->getCurSelectedItem();
|
||||
if (current_item)
|
||||
{
|
||||
LLInvFVBridge* bridge = (LLInvFVBridge*)current_item->getViewModelItem();
|
||||
|
||||
if (bridge)
|
||||
{
|
||||
LLInventoryObject* obj = bridge->getInventoryObject();
|
||||
if (obj && obj->getType() != LLAssetType::AT_CATEGORY && obj->getActualType() != LLAssetType::AT_LINK_FOLDER)
|
||||
{
|
||||
params = LLSD(obj->getUUID());
|
||||
}
|
||||
}
|
||||
}
|
||||
LLFloaterReg::showInstance("fs_linkreplace", params);
|
||||
}
|
||||
// </FS:Ansariel>
|
||||
}
|
||||
|
||||
void LLPanelMainInventory::onVisibilityChange( BOOL new_visibility )
|
||||
|
|
|
|||
|
|
@ -201,7 +201,22 @@ void LLPhysicsShapeBuilderUtil::determinePhysicsShape( const LLPhysicsVolumePara
|
|||
}
|
||||
else if ( volume_params.isSculpt() ) // Is a sculpt of any kind (mesh or legacy)
|
||||
{
|
||||
specOut.mType = volume_params.isMeshSculpt() ? PhysicsShapeSpecification::USER_MESH : PhysicsShapeSpecification::SCULPT;
|
||||
//<FS:Beq> [BUG-134006] Viewer code is not aligned to server code when calculating physics shape for thin objects.
|
||||
specOut.mType = PhysicsShapeSpecification::INVALID;
|
||||
if (volume_params.isMeshSculpt()){
|
||||
static const float SHAPE_BUILDER_CONVEXIFICATION_SIZE_MESH = 0.5;
|
||||
// it's a mesh and only one size is smaller than min.
|
||||
for (S32 i = 0; i < 3; ++i)
|
||||
{
|
||||
if (scale[i] < SHAPE_BUILDER_CONVEXIFICATION_SIZE_MESH)
|
||||
{
|
||||
specOut.mType = PhysicsShapeSpecification::PRIM_CONVEX;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (specOut.mType == PhysicsShapeSpecification::INVALID)
|
||||
//</FS:Beq>
|
||||
specOut.mType = volume_params.isMeshSculpt() ? PhysicsShapeSpecification::USER_MESH : PhysicsShapeSpecification::SCULPT;
|
||||
}
|
||||
else // Resort to mesh
|
||||
{
|
||||
|
|
|
|||
|
|
@ -515,7 +515,7 @@ void LLViewerAssetStorage::assetRequestCoro(
|
|||
}
|
||||
|
||||
// <FS:Ansariel> [UDP Assets]
|
||||
bool with_http = false;
|
||||
bool with_http = true;
|
||||
bool is_temp = false;
|
||||
LLViewerAssetStatsFF::record_enqueue(atype, with_http, is_temp);
|
||||
// </FS:Ansariel> [UDP Assets]
|
||||
|
|
|
|||
|
|
@ -10402,6 +10402,13 @@ class LLViewCheckHUDAttachments : public view_listener_t
|
|||
}
|
||||
};
|
||||
|
||||
// <FS:Ansariel> Disable Show HUD attachments if prevented by RLVa
|
||||
bool enable_show_HUD_attachments()
|
||||
{
|
||||
return (!LLPipeline::sShowHUDAttachments || !rlv_handler_t::isEnabled() || !gRlvAttachmentLocks.hasLockedHUD());
|
||||
};
|
||||
// </FS:Ansariel>
|
||||
|
||||
class LLEditEnableTakeOff : public view_listener_t
|
||||
{
|
||||
bool handleEvent(const LLSD& userdata)
|
||||
|
|
@ -11105,6 +11112,7 @@ void initialize_menus()
|
|||
view_listener_t::addMenu(new LLViewStatusAway(), "View.Status.CheckAway");
|
||||
view_listener_t::addMenu(new LLViewStatusDoNotDisturb(), "View.Status.CheckDoNotDisturb");
|
||||
view_listener_t::addMenu(new LLViewCheckHUDAttachments(), "View.CheckHUDAttachments");
|
||||
enable.add("View.EnableHUDAttachments", boost::bind(&enable_show_HUD_attachments)); // <FS:Ansariel> Disable Show HUD attachments if prevented by RLVa
|
||||
// <FS:Zi> Add reset camera angles menu
|
||||
view_listener_t::addMenu(new LLViewResetCameraAngles(), "View.ResetCameraAngles");
|
||||
// </FS:Zi>
|
||||
|
|
|
|||
|
|
@ -373,7 +373,33 @@ U32 LLVOVolume::processUpdateMessage(LLMessageSystem *mesgsys,
|
|||
|
||||
// Unpack volume data
|
||||
LLVolumeParams volume_params;
|
||||
LLVolumeMessage::unpackVolumeParams(&volume_params, mesgsys, _PREHASH_ObjectData, block_num);
|
||||
// <FS:Beq> Extend the bogus volume error handling to the other code path
|
||||
//LLVolumeMessage::unpackVolumeParams(&volume_params, mesgsys, _PREHASH_ObjectData, block_num);
|
||||
BOOL res = LLVolumeMessage::unpackVolumeParams(&volume_params, mesgsys, _PREHASH_ObjectData, block_num);
|
||||
if (!res)
|
||||
{
|
||||
//<FS:Beq> Improved bad object handling courtesy of Drake.
|
||||
std::string region_name = "unknown region";
|
||||
if (getRegion())
|
||||
{
|
||||
region_name = getRegion()->getName();
|
||||
if (gSavedSettings.getBOOL("FSEnforceStrictObjectCheck"))
|
||||
{
|
||||
LL_WARNS() << "An invalid object (" << getID() << ") has been removed (FSEnforceStrictObjectCheck)" << LL_ENDL;
|
||||
getRegion()->addCacheMissFull(getLocalID()); // force cache skip the object
|
||||
}
|
||||
}
|
||||
LL_WARNS() << "Bogus volume parameters in object " << getID() << " @ " << getPositionRegion()
|
||||
<< " in " << region_name << LL_ENDL;
|
||||
|
||||
if (gSavedSettings.getBOOL("FSEnforceStrictObjectCheck"))
|
||||
{
|
||||
gObjectList.killObject(this);
|
||||
return (INVALID_UPDATE);
|
||||
}
|
||||
// </FS:Beq>
|
||||
}
|
||||
|
||||
volume_params.setSculptID(sculpt_id, sculpt_type);
|
||||
|
||||
if (setVolume(volume_params, 0))
|
||||
|
|
@ -389,6 +415,31 @@ U32 LLVOVolume::processUpdateMessage(LLMessageSystem *mesgsys,
|
|||
//
|
||||
|
||||
S32 result = unpackTEMessage(mesgsys, _PREHASH_ObjectData, (S32) block_num);
|
||||
//<FS:Beq> Improved bad object handling courtesy of Drake.
|
||||
if (TEM_INVALID == result)
|
||||
{
|
||||
// There's something bogus in the data that we're unpacking.
|
||||
dp->dumpBufferToLog();
|
||||
std::string region_name = "unknown region";
|
||||
if (getRegion())
|
||||
{
|
||||
region_name = getRegion()->getName();
|
||||
if (gSavedSettings.getBOOL("FSEnforceStrictObjectCheck"))
|
||||
{
|
||||
LL_WARNS() << "An invalid object (" << getID() << ") has been removed (FSEnforceStrictObjectCheck)" << LL_ENDL;
|
||||
getRegion()->addCacheMissFull(getLocalID()); // force cache skip
|
||||
}
|
||||
}
|
||||
|
||||
LL_WARNS() << "Bogus TE data in object " << getID() << " @ " << getPositionRegion()
|
||||
<< " in " << region_name << LL_ENDL;
|
||||
if (gSavedSettings.getBOOL("FSEnforceStrictObjectCheck"))
|
||||
{
|
||||
gObjectList.killObject(this);
|
||||
return (INVALID_UPDATE);
|
||||
}
|
||||
}
|
||||
// </FS:Beq>
|
||||
if (result & teDirtyBits)
|
||||
{
|
||||
updateTEData();
|
||||
|
|
@ -406,13 +457,33 @@ U32 LLVOVolume::processUpdateMessage(LLMessageSystem *mesgsys,
|
|||
BOOL res = LLVolumeMessage::unpackVolumeParams(&volume_params, *dp);
|
||||
if (!res)
|
||||
{
|
||||
LL_WARNS() << "Bogus volume parameters in object " << getID() << LL_ENDL;
|
||||
LL_WARNS() << getRegion()->getOriginGlobal() << LL_ENDL;
|
||||
//<FS:Beq> Improved bad object handling courtesy of Drake.
|
||||
//LL_WARNS() << "Bogus volume parameters in object " << getID() << LL_ENDL;
|
||||
//LL_WARNS() << getRegion()->getOriginGlobal() << LL_ENDL;
|
||||
std::string region_name = "unknown region";
|
||||
if (getRegion())
|
||||
{
|
||||
region_name = getRegion()->getName();
|
||||
if (gSavedSettings.getBOOL("FSEnforceStrictObjectCheck"))
|
||||
{
|
||||
LL_WARNS() << "An invalid object (" << getID() << ") has been removed (FSEnforceStrictObjectCheck)" << LL_ENDL;
|
||||
getRegion()->addCacheMissFull(getLocalID()); // force cache skip the object
|
||||
}
|
||||
}
|
||||
LL_WARNS() << "Bogus volume parameters in object " << getID() << " @ " << getPositionRegion()
|
||||
<< " in " << region_name << LL_ENDL;
|
||||
// <FS:Beq> [FIRE-16995] [CRASH] Continuous crashing upon entering 3 adjacent sims incl. Hathian, D8, Devil's Pocket
|
||||
// A bad object entry in a .slc simobject cache can result in an unreadable/unusable volume
|
||||
// This leaves the volume in an uncertain state and can result in a crash when later code access an uninitialised pointer
|
||||
// return an INVALID_UPDATE instead
|
||||
return(INVALID_UPDATE);
|
||||
// <FS:Beq> July 2017 Change backed out due to side effects. FIRE-16995 still an exposure.
|
||||
// return(INVALID_UPDATE);
|
||||
// NOTE: An option here would be to correctly return the media status using "retval |= INVALID_UPDATE"
|
||||
if (gSavedSettings.getBOOL("FSEnforceStrictObjectCheck"))
|
||||
{
|
||||
gObjectList.killObject(this);
|
||||
return (INVALID_UPDATE);
|
||||
}
|
||||
// </FS:Beq>
|
||||
}
|
||||
|
||||
|
|
@ -427,14 +498,34 @@ U32 LLVOVolume::processUpdateMessage(LLMessageSystem *mesgsys,
|
|||
{
|
||||
// There's something bogus in the data that we're unpacking.
|
||||
dp->dumpBufferToLog();
|
||||
LL_WARNS() << "Flushing cache files" << LL_ENDL;
|
||||
//<FS:Beq> Improved bad object handling courtesy of Drake.
|
||||
//LL_WARNS() << "Flushing cache files" << LL_ENDL;
|
||||
|
||||
if(LLVOCache::instanceExists() && getRegion())
|
||||
//if(LLVOCache::instanceExists() && getRegion())
|
||||
//{
|
||||
// LLVOCache::getInstance()->removeEntry(getRegion()->getHandle()) ;
|
||||
//}
|
||||
//
|
||||
//LL_WARNS() << "Bogus TE data in " << getID() << LL_ENDL;
|
||||
std::string region_name = "unknown region";
|
||||
if (getRegion())
|
||||
{
|
||||
LLVOCache::getInstance()->removeEntry(getRegion()->getHandle()) ;
|
||||
region_name = getRegion()->getName();
|
||||
if (gSavedSettings.getBOOL("FSEnforceStrictObjectCheck"))
|
||||
{
|
||||
LL_WARNS() << "An invalid object (" << getID() << ") has been removed (FSEnforceStrictObjectCheck)" << LL_ENDL;
|
||||
getRegion()->addCacheMissFull(getLocalID()); // force cache skip
|
||||
}
|
||||
}
|
||||
|
||||
LL_WARNS() << "Bogus TE data in " << getID() << LL_ENDL;
|
||||
|
||||
LL_WARNS() << "Bogus TE data in object " << getID() << " @ " << getPositionRegion()
|
||||
<< " in " << region_name << LL_ENDL;
|
||||
if (gSavedSettings.getBOOL("FSEnforceStrictObjectCheck"))
|
||||
{
|
||||
gObjectList.killObject(this);
|
||||
return (INVALID_UPDATE);
|
||||
}
|
||||
// </FS:Beq>
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
|||
|
|
@ -363,7 +363,8 @@ LLSimInfo* LLWorldMap::simInfoFromHandle(const U64 handle)
|
|||
//{
|
||||
// return it->second;
|
||||
std::map<U64, LLSimInfo*>::const_iterator it;
|
||||
for (it = LLWorldMap::getInstance()->mSimInfoMap.begin(); it != LLWorldMap::getInstance()->mSimInfoMap.end(); ++it)
|
||||
std::map<U64, LLSimInfo*>::const_iterator end = LLWorldMap::instance().mSimInfoMap.end();
|
||||
for (it = LLWorldMap::instance().mSimInfoMap.begin(); it != end; ++it)
|
||||
{
|
||||
const U64 hndl = (*it).first;
|
||||
LLSimInfo* info = (*it).second;
|
||||
|
|
|
|||
|
|
@ -376,8 +376,13 @@ void LLWorldMapView::draw()
|
|||
gGL.setColorMask(true, true);
|
||||
|
||||
// Draw per sim overlayed information (names, mature, offline...)
|
||||
for (LLWorldMap::sim_info_map_t::const_iterator it = LLWorldMap::getInstance()->getRegionMap().begin();
|
||||
it != LLWorldMap::getInstance()->getRegionMap().end(); ++it)
|
||||
// <FS:Ansariel> Performance tweak
|
||||
//for (LLWorldMap::sim_info_map_t::const_iterator it = LLWorldMap::getInstance()->getRegionMap().begin();
|
||||
// it != LLWorldMap::getInstance()->getRegionMap().end(); ++it)
|
||||
LLWorldMap::sim_info_map_t::const_iterator end_it = LLWorldMap::instance().getRegionMap().end();
|
||||
for (LLWorldMap::sim_info_map_t::const_iterator it = LLWorldMap::instance().getRegionMap().begin();
|
||||
it != end_it; ++it)
|
||||
// </FS:Ansariel>
|
||||
{
|
||||
U64 handle = it->first;
|
||||
LLSimInfo* info = it->second;
|
||||
|
|
@ -767,6 +772,7 @@ bool LLWorldMapView::drawMipmapLevel(S32 width, S32 height, S32 level, bool load
|
|||
pos_NE[VY] += tile_width;
|
||||
|
||||
// Iterate through the tiles on screen: we just need to ask for one tile every tile_width meters
|
||||
LLWorldMap* world_map = LLWorldMap::getInstance(); // <FS:Ansariel> Performance tweak
|
||||
U32 grid_x, grid_y;
|
||||
for (F64 index_y = pos_SW[VY]; index_y < pos_NE[VY]; index_y += tile_width)
|
||||
{
|
||||
|
|
@ -777,7 +783,10 @@ bool LLWorldMapView::drawMipmapLevel(S32 width, S32 height, S32 level, bool load
|
|||
// Convert to the mipmap level coordinates for that point (i.e. which tile to we hit)
|
||||
LLWorldMipmap::globalToMipmap(pos_global[VX], pos_global[VY], level, &grid_x, &grid_y);
|
||||
// Get the tile. Note: NULL means that the image does not exist (so it's considered "complete" as far as fetching is concerned)
|
||||
LLPointer<LLViewerFetchedTexture> simimage = LLWorldMap::getInstance()->getObjectsTile(grid_x, grid_y, level, load);
|
||||
// <FS:Ansariel> Performance tweak
|
||||
//LLPointer<LLViewerFetchedTexture> simimage = LLWorldMap::getInstance()->getObjectsTile(grid_x, grid_y, level, load);
|
||||
LLPointer<LLViewerFetchedTexture> simimage = world_map->getObjectsTile(grid_x, grid_y, level, load);
|
||||
// </FS:Ansariel>
|
||||
if (simimage)
|
||||
{
|
||||
// Checks that the image has a valid texture
|
||||
|
|
@ -943,10 +952,16 @@ void LLWorldMapView::drawItems()
|
|||
bool show_mature = mature_enabled && showMatureEvents;
|
||||
bool show_adult = adult_enabled && showAdultEvents;
|
||||
|
||||
// <FS:Ansariel> Performance tweak
|
||||
LLWorldMap* world_map = LLWorldMap::getInstance();
|
||||
|
||||
for (handle_list_t::iterator iter = mVisibleRegions.begin(); iter != mVisibleRegions.end(); ++iter)
|
||||
{
|
||||
U64 handle = *iter;
|
||||
LLSimInfo* info = LLWorldMap::getInstance()->simInfoFromHandle(handle);
|
||||
// <FS:Ansariel> Performance tweak
|
||||
//LLSimInfo* info = LLWorldMap::getInstance()->simInfoFromHandle(handle);
|
||||
LLSimInfo* info = world_map->simInfoFromHandle(handle);
|
||||
// </FS:Ansariel>
|
||||
if ((info == NULL) || (info->isDown()))
|
||||
{
|
||||
continue;
|
||||
|
|
@ -995,10 +1010,16 @@ void LLWorldMapView::drawAgents()
|
|||
{
|
||||
static LLUIColor map_avatar_color = LLUIColorTable::instance().getColor("MapAvatarColor", LLColor4::white);
|
||||
|
||||
// <FS:Ansariel> Performance tweak
|
||||
LLWorldMap* world_map = LLWorldMap::getInstance();
|
||||
|
||||
for (handle_list_t::iterator iter = mVisibleRegions.begin(); iter != mVisibleRegions.end(); ++iter)
|
||||
{
|
||||
U64 handle = *iter;
|
||||
LLSimInfo* siminfo = LLWorldMap::getInstance()->simInfoFromHandle(handle);
|
||||
// <FS:Ansariel> Performance tweak
|
||||
//LLSimInfo* siminfo = LLWorldMap::getInstance()->simInfoFromHandle(handle);
|
||||
LLSimInfo* siminfo = world_map->simInfoFromHandle(handle);
|
||||
// </FS:Ansariel>
|
||||
if ((siminfo == NULL) || (siminfo->isDown()))
|
||||
{
|
||||
continue;
|
||||
|
|
|
|||
|
|
@ -312,7 +312,7 @@ public:
|
|||
}
|
||||
XMLRPC_RequestSetData(request, xparams);
|
||||
|
||||
mTransaction.reset(new LLXMLRPCTransaction(mUri, request));
|
||||
mTransaction.reset(new LLXMLRPCTransaction(mUri, request, true, command.has("http_params")? LLSD(command["http_params"]) : LLSD()));
|
||||
mPreviousStatus = mTransaction->status(NULL);
|
||||
|
||||
// Free the XMLRPC_REQUEST object and the attached data values.
|
||||
|
|
|
|||
|
|
@ -208,7 +208,7 @@ public:
|
|||
std::string mCertStore;
|
||||
LLSD mErrorCertData;
|
||||
|
||||
Impl(const std::string& uri, XMLRPC_REQUEST request, bool useGzip);
|
||||
Impl(const std::string& uri, XMLRPC_REQUEST request, bool useGzip, const LLSD& httpParams);
|
||||
Impl(const std::string& uri,
|
||||
const std::string& method, LLXMLRPCValue params, bool useGzip);
|
||||
~Impl();
|
||||
|
|
@ -219,7 +219,7 @@ public:
|
|||
void setHttpStatus(const LLCore::HttpStatus &status);
|
||||
|
||||
private:
|
||||
void init(XMLRPC_REQUEST request, bool useGzip);
|
||||
void init(XMLRPC_REQUEST request, bool useGzip, const LLSD& httpParams);
|
||||
};
|
||||
|
||||
LLXMLRPCTransaction::Handler::Handler(LLCore::HttpRequest::ptr_t &request,
|
||||
|
|
@ -309,13 +309,13 @@ void LLXMLRPCTransaction::Handler::onCompleted(LLCore::HttpHandle handle,
|
|||
//=========================================================================
|
||||
|
||||
LLXMLRPCTransaction::Impl::Impl(const std::string& uri,
|
||||
XMLRPC_REQUEST request, bool useGzip)
|
||||
XMLRPC_REQUEST request, bool useGzip, const LLSD& httpParams)
|
||||
: mHttpRequest(),
|
||||
mStatus(LLXMLRPCTransaction::StatusNotStarted),
|
||||
mURI(uri),
|
||||
mResponse(0)
|
||||
{
|
||||
init(request, useGzip);
|
||||
init(request, useGzip, httpParams);
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -331,7 +331,7 @@ LLXMLRPCTransaction::Impl::Impl(const std::string& uri,
|
|||
XMLRPC_RequestSetRequestType(request, xmlrpc_request_call);
|
||||
XMLRPC_RequestSetData(request, params.getValue());
|
||||
|
||||
init(request, useGzip);
|
||||
init(request, useGzip, LLSD());
|
||||
// DEV-28398: without this XMLRPC_RequestFree() call, it looks as though
|
||||
// the 'request' object is simply leaked. It's less clear to me whether we
|
||||
// should also ask to free request value data (second param 1), since the
|
||||
|
|
@ -339,7 +339,7 @@ LLXMLRPCTransaction::Impl::Impl(const std::string& uri,
|
|||
XMLRPC_RequestFree(request, 1);
|
||||
}
|
||||
|
||||
void LLXMLRPCTransaction::Impl::init(XMLRPC_REQUEST request, bool useGzip)
|
||||
void LLXMLRPCTransaction::Impl::init(XMLRPC_REQUEST request, bool useGzip, const LLSD& httpParams)
|
||||
{
|
||||
LLCore::HttpOptions::ptr_t httpOpts;
|
||||
LLCore::HttpHeaders::ptr_t httpHeaders;
|
||||
|
|
@ -353,7 +353,15 @@ void LLXMLRPCTransaction::Impl::init(XMLRPC_REQUEST request, bool useGzip)
|
|||
// LLRefCounted starts with a 1 ref, so don't add a ref in the smart pointer
|
||||
httpOpts = LLCore::HttpOptions::ptr_t(new LLCore::HttpOptions());
|
||||
|
||||
httpOpts->setTimeout(40L);
|
||||
// delay between repeats will start from 5 sec and grow to 20 sec with each repeat
|
||||
httpOpts->setMinBackoff(5E6L);
|
||||
httpOpts->setMaxBackoff(20E6L);
|
||||
|
||||
httpOpts->setTimeout(httpParams.has("timeout") ? httpParams["timeout"].asInteger() : 40L);
|
||||
if (httpParams.has("retries"))
|
||||
{
|
||||
httpOpts->setRetries(httpParams["retries"].asInteger());
|
||||
}
|
||||
|
||||
bool vefifySSLCert = !gSavedSettings.getBOOL("NoVerifySSLCert");
|
||||
mCertStore = gSavedSettings.getString("CertStore");
|
||||
|
|
@ -520,8 +528,8 @@ void LLXMLRPCTransaction::Impl::setHttpStatus(const LLCore::HttpStatus &status)
|
|||
|
||||
|
||||
LLXMLRPCTransaction::LLXMLRPCTransaction(
|
||||
const std::string& uri, XMLRPC_REQUEST request, bool useGzip)
|
||||
: impl(* new Impl(uri, request, useGzip))
|
||||
const std::string& uri, XMLRPC_REQUEST request, bool useGzip, const LLSD& httpParams)
|
||||
: impl(* new Impl(uri, request, useGzip, httpParams))
|
||||
{ }
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -85,7 +85,7 @@ class LLXMLRPCTransaction
|
|||
{
|
||||
public:
|
||||
LLXMLRPCTransaction(const std::string& uri,
|
||||
XMLRPC_REQUEST request, bool useGzip = true);
|
||||
XMLRPC_REQUEST request, bool useGzip = true, const LLSD& httpParams = LLSD());
|
||||
// does not take ownership of the request object
|
||||
// request can be freed as soon as the transaction is constructed
|
||||
|
||||
|
|
|
|||
|
|
@ -816,8 +816,10 @@ void LLPipeline::throttleNewMemoryAllocation(BOOL disable)
|
|||
if(sMemAllocationThrottled)
|
||||
{
|
||||
//send out notification
|
||||
LLNotification::Params params("LowMemory");
|
||||
LLNotifications::instance().add(params);
|
||||
// <FS:Ansariel> Disable annoying notification
|
||||
//LLNotification::Params params("LowMemory");
|
||||
//LLNotifications::instance().add(params);
|
||||
// </FS:Ansariel>
|
||||
|
||||
//release some memory.
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6586,7 +6586,7 @@ Setzen Sie den Editorpfad in Anführungszeichen
|
|||
Ignoriere Gruppenchat von [NAME].
|
||||
</string>
|
||||
<string name="IgnoredAdHocSession">
|
||||
Eine Einladung zu einer Konferenz wurde aufgrund der aktuellen Einstellungen automatisch ignoriert.
|
||||
Eine Einladung zu einer Konferenz durch [AVATAR_NAME] wurde aufgrund der aktuellen Einstellungen automatisch ignoriert.
|
||||
</string>
|
||||
|
||||
<!-- <FS:Ansariel> Radar notifications -->
|
||||
|
|
|
|||
|
|
@ -261,6 +261,7 @@ Maximum animation length is [MAX_LENGTH] seconds.
|
|||
follows="left|top"
|
||||
height="23"
|
||||
increment="1"
|
||||
decimal_digits="0"
|
||||
label="In (frm)"
|
||||
label_width="70"
|
||||
layout="topleft"
|
||||
|
|
@ -275,6 +276,7 @@ Maximum animation length is [MAX_LENGTH] seconds.
|
|||
follows="left|top"
|
||||
height="23"
|
||||
increment="1"
|
||||
decimal_digits="0"
|
||||
label="Out (frm)"
|
||||
layout="topleft"
|
||||
left_pad="10"
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@
|
|||
height="435"
|
||||
save_rect="true"
|
||||
single_instance="true"
|
||||
reuse_instance="false"
|
||||
can_resize="true"
|
||||
can_minimize="true"
|
||||
can_close="true"
|
||||
|
|
|
|||
|
|
@ -347,6 +347,8 @@
|
|||
function="View.CheckHUDAttachments" />
|
||||
<menu_item_check.on_click
|
||||
function="View.ShowHUDAttachments" />
|
||||
<menu_item_check.on_enable
|
||||
function="View.EnableHUDAttachments" />
|
||||
</menu_item_check>
|
||||
|
||||
<menu_item_separator/>
|
||||
|
|
|
|||
|
|
@ -2948,7 +2948,7 @@ Try enclosing path to the editor with double quotes.
|
|||
<string name="QP_WL_None">None</string>
|
||||
|
||||
<string name="GroupChatMuteNotice">Muting group chat from [NAME].</string>
|
||||
<string name="IgnoredAdHocSession">You've been invited to a conference (ad-hoc) chat, but viewer automatically ignored it because of your settings.</string>
|
||||
<string name="IgnoredAdHocSession">You've been invited to a conference (ad-hoc) chat by [AVATAR_NAME], but viewer automatically ignored it because of your settings.</string>
|
||||
|
||||
<!-- <FS:Ansariel> Radar notifications -->
|
||||
<string name="camera_no_focus">The camera cannot focus user [AVATARNAME] because they are outside your draw distance.</string>
|
||||
|
|
|
|||
|
|
@ -5950,7 +5950,7 @@ Spróbuj załączyć ścieżkę do edytora w cytowaniu.
|
|||
Wyciszanie czatu grupowego [NAME].
|
||||
</string>
|
||||
<string name="IgnoredAdHocSession">
|
||||
Zostałeś/aś zaproszony/a do konferencji (czatu ad-hoc), ale przeglądarka automatycznie ją zignorowała ze względu na Twoje ustawienia.
|
||||
Zostałeś/aś zaproszony/a do konferencji (czatu ad-hoc) przez [AVATAR_NAME], ale przeglądarka automatycznie ją zignorowała ze względu na Twoje ustawienia.
|
||||
</string>
|
||||
<string name="camera_no_focus">
|
||||
Kamera nie może skupić się na [AVATARNAME], ponieważ jest on/ona poza polem widzenia.
|
||||
|
|
|
|||
|
|
@ -481,7 +481,7 @@ Nur große Parzellen können in der Suche aufgeführt werden.
|
|||
</text>
|
||||
<panel name="Allowed_layout_panel">
|
||||
<text label="Immer erlauben" name="AllowedText">
|
||||
Immer verbannt ([COUNT]/[MAX])
|
||||
Immer zulässig ([COUNT]/[MAX])
|
||||
</text>
|
||||
<name_list name="AccessList" tool_tip="([LISTED] aufgeführt, [MAX] max)"/>
|
||||
<button label="Hinzufügen" name="add_allowed"/>
|
||||
|
|
@ -489,7 +489,7 @@ Nur große Parzellen können in der Suche aufgeführt werden.
|
|||
</panel>
|
||||
<panel name="Banned_layout_panel">
|
||||
<text label="Verbannen" name="BanCheck">
|
||||
Verbannte Einwohner ([COUNT]/[MAX])
|
||||
Immer verbannt ([COUNT]/[MAX])
|
||||
</text>
|
||||
<name_list name="BannedList" tool_tip="([LISTED] aufgeführt, [MAX] max)"/>
|
||||
<button label="Hinzufügen" name="add_banned"/>
|
||||
|
|
|
|||
|
|
@ -63,10 +63,7 @@ class ViewerManifest(LLManifest,FSViewerManifest):
|
|||
# files during the build (see copy_w_viewer_manifest
|
||||
# and copy_l_viewer_manifest targets)
|
||||
return 'package' in self.args['actions']
|
||||
|
||||
def do_copy_artwork( self ):
|
||||
return self.args.has_key( 'copy_artwork' )
|
||||
|
||||
|
||||
def construct(self):
|
||||
super(ViewerManifest, self).construct()
|
||||
self.path(src="../../scripts/messages/message_template.msg", dst="app_settings/message_template.msg")
|
||||
|
|
@ -83,7 +80,7 @@ class ViewerManifest(LLManifest,FSViewerManifest):
|
|||
self.end_prefix("app_settings")
|
||||
# </FS:LO>
|
||||
|
||||
if self.is_packaging_viewer() or self.do_copy_artwork():
|
||||
if self.is_packaging_viewer():
|
||||
if self.prefix(src="app_settings"):
|
||||
self.exclude("logcontrol.xml")
|
||||
self.exclude("logcontrol-dev.xml")
|
||||
|
|
@ -173,12 +170,12 @@ class ViewerManifest(LLManifest,FSViewerManifest):
|
|||
self.path("*.xml")
|
||||
self.end_prefix("fonts")
|
||||
|
||||
# AO: Include firestorm resources
|
||||
# <FS:AO> Include firestorm resources
|
||||
if self.prefix(src="fs_resources"):
|
||||
self.path("*.txt")
|
||||
self.path("*.lsl")
|
||||
self.path("*.lsltxt")
|
||||
self.end_prefix("fs_resources");
|
||||
self.path("*.txt")
|
||||
self.path("*.lsl")
|
||||
self.path("*.lsltxt")
|
||||
self.end_prefix("fs_resources");
|
||||
|
||||
# skins
|
||||
if self.prefix(src="skins"):
|
||||
|
|
@ -208,21 +205,6 @@ class ViewerManifest(LLManifest,FSViewerManifest):
|
|||
self.path("*.jpg")
|
||||
self.path("*.png")
|
||||
self.end_prefix("*/themes/*/textures")
|
||||
|
||||
# <FS:AO> - We intentionally do not package xui for themes, the reasoning is:
|
||||
# Themes are defined as color/texture mods, not structual mods. Structural changes are done as "skins".
|
||||
# If a color is mentioned in xui, it can be refactored to use a more generic reference color, and
|
||||
# then overwritten by the theme-specific colors.xml. This saves us from having to maintain more XUI
|
||||
# in more places than needed, and over time allows more and more of the viewer to be adjusted using
|
||||
# only color definitions.
|
||||
|
||||
## FS:Ansariel: Fix packaging for xui folders in themes (FIRE-6859)
|
||||
#if self.prefix(src="*/themes/*/xui"):
|
||||
# self.path("*/*.xml")
|
||||
# self.path("*/widgets/*.xml")
|
||||
# self.end_prefix("*/themes/*/xui")
|
||||
# </FS:AO>
|
||||
|
||||
self.path("*/*.xml")
|
||||
|
||||
# Local HTML files (e.g. loading screen)
|
||||
|
|
@ -333,8 +315,7 @@ class ViewerManifest(LLManifest,FSViewerManifest):
|
|||
|
||||
def app_name_oneword(self):
|
||||
return ''.join(self.app_name().split())
|
||||
|
||||
|
||||
|
||||
def icon_path(self):
|
||||
# <FS:ND> Add -os for oss builds
|
||||
if self.fs_flavor() == 'oss':
|
||||
|
|
@ -342,7 +323,6 @@ class ViewerManifest(LLManifest,FSViewerManifest):
|
|||
# </FS:ND>
|
||||
return "icons/" + self.channel_type()
|
||||
|
||||
|
||||
def extract_names(self,src):
|
||||
try:
|
||||
contrib_file = open(src,'r')
|
||||
|
|
@ -433,7 +413,6 @@ class Windows_i686_Manifest(ViewerManifest):
|
|||
"slplugin.exe")
|
||||
|
||||
self.path2basename("../viewer_components/updater/scripts/windows", "update_install.bat")
|
||||
|
||||
# Get shared libs from the shared libs staging directory
|
||||
if self.prefix(src=os.path.join(os.pardir, 'sharedlibs', self.args['configuration']),
|
||||
dst=""):
|
||||
|
|
@ -466,15 +445,6 @@ class Windows_i686_Manifest(ViewerManifest):
|
|||
self.path("fmodex64.dll")
|
||||
except:
|
||||
print "Skipping fmodex audio library(assuming other audio engine)"
|
||||
|
||||
# Get Leap Motion SDK
|
||||
try:
|
||||
if self.args['configuration'].lower() == 'debug':
|
||||
self.path("Leapd.dll")
|
||||
else:
|
||||
self.path("Leap.dll")
|
||||
except:
|
||||
print "Leap Motion library was not found"
|
||||
|
||||
# For textures
|
||||
if self.args['configuration'].lower() == 'debug':
|
||||
|
|
@ -809,7 +779,6 @@ class Windows_i686_Manifest(ViewerManifest):
|
|||
NSIS_path = os.path.expandvars('${ProgramFiles}\\NSIS\\Unicode\\makensis.exe')
|
||||
if not os.path.exists(NSIS_path):
|
||||
NSIS_path = os.path.expandvars('${ProgramFiles(x86)}\\NSIS\\Unicode\\makensis.exe')
|
||||
|
||||
installer_created=False
|
||||
nsis_attempts=3
|
||||
nsis_retry_wait=15
|
||||
|
|
|
|||
Loading…
Reference in New Issue