merge
commit
e925bb8fc4
|
|
@ -40,6 +40,7 @@
|
|||
#include "llsdutil_math.h"
|
||||
#include "message.h"
|
||||
#include "u64.h"
|
||||
#include "llregionflags.h"
|
||||
|
||||
static const F32 SOME_BIG_NUMBER = 1000.0f;
|
||||
static const F32 SOME_BIG_NEG_NUMBER = -1000.0f;
|
||||
|
|
@ -627,8 +628,8 @@ void LLParcel::unpackMessage(LLMessageSystem* msg)
|
|||
void LLParcel::packAccessEntries(LLMessageSystem* msg,
|
||||
const std::map<LLUUID,LLAccessEntry>& list)
|
||||
{
|
||||
access_map_const_iterator cit = list.begin();
|
||||
access_map_const_iterator end = list.end();
|
||||
LLAccessEntry::map::const_iterator cit = list.begin();
|
||||
LLAccessEntry::map::const_iterator end = list.end();
|
||||
|
||||
if (cit == end)
|
||||
{
|
||||
|
|
@ -679,9 +680,28 @@ void LLParcel::unpackAccessEntries(LLMessageSystem* msg,
|
|||
}
|
||||
|
||||
|
||||
void LLParcel::unpackExperienceEntries( LLMessageSystem* msg, U32 type )
|
||||
{
|
||||
LLUUID id;
|
||||
|
||||
S32 i;
|
||||
S32 count = msg->getNumberOfBlocksFast(_PREHASH_List);
|
||||
for (i = 0; i < count; i++)
|
||||
{
|
||||
msg->getUUIDFast(_PREHASH_List, _PREHASH_ID, id, i);
|
||||
|
||||
if (id.notNull())
|
||||
{
|
||||
mExperienceKeys[id]=type;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
void LLParcel::expirePasses(S32 now)
|
||||
{
|
||||
access_map_iterator itor = mAccessList.begin();
|
||||
LLAccessEntry::map::iterator itor = mAccessList.begin();
|
||||
while (itor != mAccessList.end())
|
||||
{
|
||||
const LLAccessEntry& entry = (*itor).second;
|
||||
|
|
@ -771,7 +791,7 @@ BOOL LLParcel::addToAccessList(const LLUUID& agent_id, S32 time)
|
|||
// Can't add owner to these lists
|
||||
return FALSE;
|
||||
}
|
||||
access_map_iterator itor = mAccessList.begin();
|
||||
LLAccessEntry::map::iterator itor = mAccessList.begin();
|
||||
while (itor != mAccessList.end())
|
||||
{
|
||||
const LLAccessEntry& entry = (*itor).second;
|
||||
|
|
@ -816,7 +836,7 @@ BOOL LLParcel::addToBanList(const LLUUID& agent_id, S32 time)
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
access_map_iterator itor = mBanList.begin();
|
||||
LLAccessEntry::map::iterator itor = mBanList.begin();
|
||||
while (itor != mBanList.end())
|
||||
{
|
||||
const LLAccessEntry& entry = (*itor).second;
|
||||
|
|
@ -852,7 +872,7 @@ BOOL remove_from_access_array(std::map<LLUUID,LLAccessEntry>* list,
|
|||
const LLUUID& agent_id)
|
||||
{
|
||||
BOOL removed = FALSE;
|
||||
access_map_iterator itor = list->begin();
|
||||
LLAccessEntry::map::iterator itor = list->begin();
|
||||
while (itor != list->end())
|
||||
{
|
||||
const LLAccessEntry& entry = (*itor).second;
|
||||
|
|
@ -1097,7 +1117,8 @@ void LLParcel::clearParcel()
|
|||
void LLParcel::dump()
|
||||
{
|
||||
llinfos << "parcel " << mLocalID << " area " << mArea << llendl;
|
||||
llinfos << " name <" << mName << ">" << llendl;
|
||||
|
||||
llinfos << " name <" << mName << ">" << llendl;
|
||||
llinfos << " desc <" << mDesc << ">" << llendl;
|
||||
}
|
||||
|
||||
|
|
@ -1195,3 +1216,47 @@ LLParcel::ECategory category_ui_string_to_category(const std::string& s)
|
|||
// is a distinct option from "None" and "Other"
|
||||
return LLParcel::C_ANY;
|
||||
}
|
||||
|
||||
LLAccessEntry::map LLParcel::getExperienceKeysByType( U32 type ) const
|
||||
{
|
||||
LLAccessEntry::map access;
|
||||
LLAccessEntry entry;
|
||||
xp_type_map_t::const_iterator it = mExperienceKeys.begin();
|
||||
for(/**/; it != mExperienceKeys.end(); ++it)
|
||||
{
|
||||
if(it->second == type)
|
||||
{
|
||||
entry.mID = it->first;
|
||||
access[entry.mID] = entry;
|
||||
}
|
||||
}
|
||||
return access;
|
||||
}
|
||||
|
||||
void LLParcel::clearExperienceKeysByType( U32 type )
|
||||
{
|
||||
xp_type_map_t::iterator it = mExperienceKeys.begin();
|
||||
while(it != mExperienceKeys.end())
|
||||
{
|
||||
if(it->second == type)
|
||||
{
|
||||
mExperienceKeys.erase(it++);
|
||||
}
|
||||
else
|
||||
{
|
||||
++it;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void LLParcel::setExperienceKeyType( const LLUUID& experience_key, U32 type )
|
||||
{
|
||||
if(type == EXPERIENCE_KEY_TYPE_NONE)
|
||||
{
|
||||
mExperienceKeys.erase(experience_key);
|
||||
}
|
||||
else
|
||||
{
|
||||
mExperienceKeys[experience_key] = type;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -130,9 +130,11 @@ class LLSD;
|
|||
class LLAccessEntry
|
||||
{
|
||||
public:
|
||||
|
||||
typedef std::map<LLUUID,LLAccessEntry> map;
|
||||
|
||||
LLAccessEntry()
|
||||
: mID(),
|
||||
mTime(0),
|
||||
: mTime(0),
|
||||
mFlags(0)
|
||||
{}
|
||||
|
||||
|
|
@ -141,8 +143,6 @@ public:
|
|||
U32 mFlags; // Not used - currently should always be zero
|
||||
};
|
||||
|
||||
typedef std::map<LLUUID,LLAccessEntry>::iterator access_map_iterator;
|
||||
typedef std::map<LLUUID,LLAccessEntry>::const_iterator access_map_const_iterator;
|
||||
|
||||
class LLParcel
|
||||
{
|
||||
|
|
@ -320,6 +320,9 @@ public:
|
|||
void unpackAccessEntries(LLMessageSystem* msg,
|
||||
std::map<LLUUID,LLAccessEntry>* list);
|
||||
|
||||
void unpackExperienceEntries(LLMessageSystem* msg, U32 type);
|
||||
|
||||
|
||||
void setAABBMin(const LLVector3& min) { mAABBMin = min; }
|
||||
void setAABBMax(const LLVector3& max) { mAABBMax = max; }
|
||||
|
||||
|
|
@ -665,6 +668,16 @@ public:
|
|||
std::map<LLUUID,LLAccessEntry> mTempBanList;
|
||||
std::map<LLUUID,LLAccessEntry> mTempAccessList;
|
||||
|
||||
typedef std::map<LLUUID, U32> xp_type_map_t;
|
||||
|
||||
void setExperienceKeyType(const LLUUID& experience_key, U32 type);
|
||||
U32 getExperienceKeyType(const LLUUID& experience_key)const;
|
||||
LLAccessEntry::map getExperienceKeysByType(U32 type)const;
|
||||
void clearExperienceKeysByType(U32 type);
|
||||
|
||||
private:
|
||||
xp_type_map_t mExperienceKeys;
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -90,8 +90,10 @@ const U32 PF_DEFAULT = PF_ALLOW_FLY
|
|||
| PF_USE_ESTATE_VOICE_CHAN;
|
||||
|
||||
// Access list flags
|
||||
const U32 AL_ACCESS = (1 << 0);
|
||||
const U32 AL_BAN = (1 << 1);
|
||||
const U32 AL_ACCESS = (1 << 0);
|
||||
const U32 AL_BAN = (1 << 1);
|
||||
const U32 AL_ALLOW_EXPERIENCE = (1 << 3);
|
||||
const U32 AL_BLOCK_EXPERIENCE = (1 << 4);
|
||||
//const U32 AL_RENTER = (1 << 2);
|
||||
|
||||
// Block access return values. BA_ALLOWED is the only success case
|
||||
|
|
|
|||
|
|
@ -376,13 +376,16 @@ void LLFloaterAuction::doResetParcel()
|
|||
msg->sendReliable(region->getHost());
|
||||
|
||||
// Clear the access lists
|
||||
clearParcelAccessLists(parcelp, region);
|
||||
clearParcelAccessList(parcelp, region, AL_ACCESS);
|
||||
clearParcelAccessList(parcelp, region, AL_BAN);
|
||||
clearParcelAccessList(parcelp, region, AL_ALLOW_EXPERIENCE);
|
||||
clearParcelAccessList(parcelp, region, AL_BLOCK_EXPERIENCE);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
void LLFloaterAuction::clearParcelAccessLists(LLParcel* parcel, LLViewerRegion* region)
|
||||
void LLFloaterAuction::clearParcelAccessList(LLParcel* parcel, LLViewerRegion* region, U32 list)
|
||||
{
|
||||
if (!region || !parcel) return;
|
||||
|
||||
|
|
@ -391,15 +394,12 @@ void LLFloaterAuction::clearParcelAccessLists(LLParcel* parcel, LLViewerRegion*
|
|||
|
||||
LLMessageSystem* msg = gMessageSystem;
|
||||
|
||||
// Clear access list
|
||||
// parcel->mAccessList.clear();
|
||||
|
||||
msg->newMessageFast(_PREHASH_ParcelAccessListUpdate);
|
||||
msg->nextBlockFast(_PREHASH_AgentData);
|
||||
msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID() );
|
||||
msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID() );
|
||||
msg->nextBlockFast(_PREHASH_Data);
|
||||
msg->addU32Fast(_PREHASH_Flags, AL_ACCESS);
|
||||
msg->addU32Fast(_PREHASH_Flags, list);
|
||||
msg->addS32(_PREHASH_LocalID, parcel->getLocalID() );
|
||||
msg->addUUIDFast(_PREHASH_TransactionID, transactionUUID);
|
||||
msg->addS32Fast(_PREHASH_SequenceID, 1); // sequence_id
|
||||
|
|
@ -412,27 +412,6 @@ void LLFloaterAuction::clearParcelAccessLists(LLParcel* parcel, LLViewerRegion*
|
|||
msg->addU32Fast(_PREHASH_Flags, 0 );
|
||||
|
||||
msg->sendReliable( region->getHost() );
|
||||
|
||||
// Send message for empty ban list
|
||||
//parcel->mBanList.clear();
|
||||
msg->newMessageFast(_PREHASH_ParcelAccessListUpdate);
|
||||
msg->nextBlockFast(_PREHASH_AgentData);
|
||||
msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID() );
|
||||
msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID() );
|
||||
msg->nextBlockFast(_PREHASH_Data);
|
||||
msg->addU32Fast(_PREHASH_Flags, AL_BAN);
|
||||
msg->addS32(_PREHASH_LocalID, parcel->getLocalID() );
|
||||
msg->addUUIDFast(_PREHASH_TransactionID, transactionUUID);
|
||||
msg->addS32Fast(_PREHASH_SequenceID, 1); // sequence_id
|
||||
msg->addS32Fast(_PREHASH_Sections, 0); // num_sections
|
||||
|
||||
// pack an empty block since there will be no data
|
||||
msg->nextBlockFast(_PREHASH_List);
|
||||
msg->addUUIDFast(_PREHASH_ID, LLUUID::null );
|
||||
msg->addS32Fast(_PREHASH_Time, 0 );
|
||||
msg->addU32Fast(_PREHASH_Flags, 0 );
|
||||
|
||||
msg->sendReliable( region->getHost() );
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -67,7 +67,7 @@ private:
|
|||
|
||||
void doResetParcel();
|
||||
void doSellToAnyone();
|
||||
void clearParcelAccessLists( LLParcel* parcel, LLViewerRegion* region );
|
||||
void clearParcelAccessList( LLParcel* parcel, LLViewerRegion* region, U32 list);
|
||||
void cleanupAndClose();
|
||||
|
||||
private:
|
||||
|
|
|
|||
|
|
@ -2398,7 +2398,7 @@ void LLPanelLandAccess::refresh()
|
|||
getChild<LLUICtrl>("AccessList")->setToolTipArg(LLStringExplicit("[LISTED]"), llformat("%d",count));
|
||||
getChild<LLUICtrl>("AccessList")->setToolTipArg(LLStringExplicit("[MAX]"), llformat("%d",PARCEL_MAX_ACCESS_LIST));
|
||||
|
||||
for (access_map_const_iterator cit = parcel->mAccessList.begin();
|
||||
for (LLAccessEntry::map::const_iterator cit = parcel->mAccessList.begin();
|
||||
cit != parcel->mAccessList.end(); ++cit)
|
||||
{
|
||||
const LLAccessEntry& entry = (*cit).second;
|
||||
|
|
@ -2444,7 +2444,7 @@ void LLPanelLandAccess::refresh()
|
|||
getChild<LLUICtrl>("BannedList")->setToolTipArg(LLStringExplicit("[LISTED]"), llformat("%d",count));
|
||||
getChild<LLUICtrl>("BannedList")->setToolTipArg(LLStringExplicit("[MAX]"), llformat("%d",PARCEL_MAX_ACCESS_LIST));
|
||||
|
||||
for (access_map_const_iterator cit = parcel->mBanList.begin();
|
||||
for (LLAccessEntry::map::const_iterator cit = parcel->mBanList.begin();
|
||||
cit != parcel->mBanList.end(); ++cit)
|
||||
{
|
||||
const LLAccessEntry& entry = (*cit).second;
|
||||
|
|
@ -2752,8 +2752,8 @@ void LLPanelLandAccess::callbackAvatarCBAccess(const uuid_vec_t& ids)
|
|||
LLUUID id = ids[0];
|
||||
LLParcel* parcel = mParcel->getParcel();
|
||||
if (parcel)
|
||||
{
|
||||
parcel->addToAccessList(id, 0);
|
||||
{
|
||||
parcel->addToAccessList(id, 0);
|
||||
LLViewerParcelMgr::getInstance()->sendParcelAccessListUpdate(AL_ACCESS);
|
||||
refresh();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -124,6 +124,8 @@
|
|||
#pragma warning (disable:4702)
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
extern void on_new_message(const LLSD& msg);
|
||||
|
||||
//
|
||||
|
|
@ -146,6 +148,7 @@ extern bool gShiftFrame;
|
|||
bool check_offer_throttle(const std::string& from_name, bool check_only);
|
||||
bool check_asset_previewable(const LLAssetType::EType asset_type);
|
||||
static void process_money_balance_reply_extended(LLMessageSystem* msg);
|
||||
bool handle_trusted_experiences_notification(const LLSD&);
|
||||
|
||||
//inventory offer throttle globals
|
||||
LLFrameTimer gThrottleTimer;
|
||||
|
|
@ -5735,65 +5738,89 @@ bool handle_prompt_for_maturity_level_change_and_reteleport_callback(const LLSD&
|
|||
// some of the server notifications need special handling. This is where we do that.
|
||||
bool handle_special_notification(std::string notificationID, LLSD& llsdBlock)
|
||||
{
|
||||
U8 regionAccess = static_cast<U8>(llsdBlock["_region_access"].asInteger());
|
||||
std::string regionMaturity = LLViewerRegion::accessToString(regionAccess);
|
||||
LLStringUtil::toLower(regionMaturity);
|
||||
llsdBlock["REGIONMATURITY"] = regionMaturity;
|
||||
bool returnValue = false;
|
||||
LLNotificationPtr maturityLevelNotification;
|
||||
std::string notifySuffix = "_Notify";
|
||||
if (regionAccess == SIM_ACCESS_MATURE)
|
||||
if(llsdBlock.has("_region_access"))
|
||||
{
|
||||
if (gAgent.isTeen())
|
||||
U8 regionAccess = static_cast<U8>(llsdBlock["_region_access"].asInteger());
|
||||
std::string regionMaturity = LLViewerRegion::accessToString(regionAccess);
|
||||
LLStringUtil::toLower(regionMaturity);
|
||||
llsdBlock["REGIONMATURITY"] = regionMaturity;
|
||||
LLNotificationPtr maturityLevelNotification;
|
||||
std::string notifySuffix = "_Notify";
|
||||
if (regionAccess == SIM_ACCESS_MATURE)
|
||||
{
|
||||
gAgent.clearTeleportRequest();
|
||||
maturityLevelNotification = LLNotificationsUtil::add(notificationID+"_AdultsOnlyContent", llsdBlock);
|
||||
returnValue = true;
|
||||
if (gAgent.isTeen())
|
||||
{
|
||||
gAgent.clearTeleportRequest();
|
||||
maturityLevelNotification = LLNotificationsUtil::add(notificationID+"_AdultsOnlyContent", llsdBlock);
|
||||
returnValue = true;
|
||||
|
||||
notifySuffix = "_NotifyAdultsOnly";
|
||||
notifySuffix = "_NotifyAdultsOnly";
|
||||
}
|
||||
else if (gAgent.prefersPG())
|
||||
{
|
||||
maturityLevelNotification = LLNotificationsUtil::add(notificationID+"_Change", llsdBlock, llsdBlock, handle_prompt_for_maturity_level_change_callback);
|
||||
returnValue = true;
|
||||
}
|
||||
else if (LLStringUtil::compareStrings(notificationID, "RegionEntryAccessBlocked") == 0)
|
||||
{
|
||||
maturityLevelNotification = LLNotificationsUtil::add(notificationID+"_PreferencesOutOfSync", llsdBlock, llsdBlock);
|
||||
returnValue = true;
|
||||
}
|
||||
}
|
||||
else if (gAgent.prefersPG())
|
||||
else if (regionAccess == SIM_ACCESS_ADULT)
|
||||
{
|
||||
maturityLevelNotification = LLNotificationsUtil::add(notificationID+"_Change", llsdBlock, llsdBlock, handle_prompt_for_maturity_level_change_callback);
|
||||
returnValue = true;
|
||||
if (!gAgent.isAdult())
|
||||
{
|
||||
gAgent.clearTeleportRequest();
|
||||
maturityLevelNotification = LLNotificationsUtil::add(notificationID+"_AdultsOnlyContent", llsdBlock);
|
||||
returnValue = true;
|
||||
|
||||
notifySuffix = "_NotifyAdultsOnly";
|
||||
}
|
||||
else if (gAgent.prefersPG() || gAgent.prefersMature())
|
||||
{
|
||||
maturityLevelNotification = LLNotificationsUtil::add(notificationID+"_Change", llsdBlock, llsdBlock, handle_prompt_for_maturity_level_change_callback);
|
||||
returnValue = true;
|
||||
}
|
||||
else if (LLStringUtil::compareStrings(notificationID, "RegionEntryAccessBlocked") == 0)
|
||||
{
|
||||
maturityLevelNotification = LLNotificationsUtil::add(notificationID+"_PreferencesOutOfSync", llsdBlock, llsdBlock);
|
||||
returnValue = true;
|
||||
}
|
||||
}
|
||||
else if (LLStringUtil::compareStrings(notificationID, "RegionEntryAccessBlocked") == 0)
|
||||
|
||||
if ((maturityLevelNotification == NULL) || maturityLevelNotification->isIgnored())
|
||||
{
|
||||
maturityLevelNotification = LLNotificationsUtil::add(notificationID+"_PreferencesOutOfSync", llsdBlock, llsdBlock);
|
||||
returnValue = true;
|
||||
// Given a simple notification if no maturityLevelNotification is set or it is ignore
|
||||
LLNotificationsUtil::add(notificationID + notifySuffix, llsdBlock);
|
||||
}
|
||||
}
|
||||
else if (regionAccess == SIM_ACCESS_ADULT)
|
||||
{
|
||||
if (!gAgent.isAdult())
|
||||
{
|
||||
gAgent.clearTeleportRequest();
|
||||
maturityLevelNotification = LLNotificationsUtil::add(notificationID+"_AdultsOnlyContent", llsdBlock);
|
||||
returnValue = true;
|
||||
|
||||
notifySuffix = "_NotifyAdultsOnly";
|
||||
}
|
||||
else if (gAgent.prefersPG() || gAgent.prefersMature())
|
||||
{
|
||||
maturityLevelNotification = LLNotificationsUtil::add(notificationID+"_Change", llsdBlock, llsdBlock, handle_prompt_for_maturity_level_change_callback);
|
||||
returnValue = true;
|
||||
}
|
||||
else if (LLStringUtil::compareStrings(notificationID, "RegionEntryAccessBlocked") == 0)
|
||||
{
|
||||
maturityLevelNotification = LLNotificationsUtil::add(notificationID+"_PreferencesOutOfSync", llsdBlock, llsdBlock);
|
||||
returnValue = true;
|
||||
}
|
||||
}
|
||||
|
||||
if ((maturityLevelNotification == NULL) || maturityLevelNotification->isIgnored())
|
||||
{
|
||||
// Given a simple notification if no maturityLevelNotification is set or it is ignore
|
||||
LLNotificationsUtil::add(notificationID + notifySuffix, llsdBlock);
|
||||
}
|
||||
|
||||
return returnValue;
|
||||
}
|
||||
|
||||
bool handle_trusted_experiences_notification(const LLSD& llsdBlock)
|
||||
{
|
||||
if(llsdBlock.has("trusted_experiences"))
|
||||
{
|
||||
std::ostringstream str;
|
||||
const LLSD& experiences = llsdBlock["trusted_experiences"];
|
||||
LLSD::array_const_iterator it = experiences.beginArray();
|
||||
for(/**/; it != experiences.endArray(); ++it)
|
||||
{
|
||||
str<<LLSLURL("experience", it->asUUID(), "profile").getSLURLString() << "\n";
|
||||
}
|
||||
std::string str_list = str.str();
|
||||
if(!str_list.empty())
|
||||
{
|
||||
LLNotificationsUtil::add("TrustedExperiencesAvailable", LLSD::emptyMap().with("EXPERIENCE_LIST", (LLSD)str_list));
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// some of the server notifications need special handling. This is where we do that.
|
||||
bool handle_teleport_access_blocked(LLSD& llsdBlock)
|
||||
{
|
||||
|
|
@ -5877,22 +5904,7 @@ bool handle_teleport_access_blocked(LLSD& llsdBlock)
|
|||
LLNotificationsUtil::add(notificationID + notifySuffix, llsdBlock);
|
||||
}
|
||||
}
|
||||
if(llsdBlock.has("trusted_experiences"))
|
||||
{
|
||||
std::ostringstream str;
|
||||
const LLSD& experiences = llsdBlock["trusted_experiences"];
|
||||
LLSD::array_const_iterator it = experiences.beginArray();
|
||||
for(/**/; it != experiences.endArray(); ++it)
|
||||
{
|
||||
str<<LLSLURL("experience", it->asUUID(), "profile").getSLURLString() << "\n";
|
||||
}
|
||||
std::string str_list = str.str();
|
||||
if(!str_list.empty())
|
||||
{
|
||||
LLNotificationsUtil::add("TrustedExperiencesAvailable", LLSD::emptyMap().with("EXPERIENCE_LIST", (LLSD)str_list));
|
||||
returnValue = true;
|
||||
}
|
||||
}
|
||||
|
||||
return returnValue;
|
||||
}
|
||||
|
||||
|
|
@ -5921,6 +5933,9 @@ bool attempt_standard_notification(LLMessageSystem* msgsystem)
|
|||
llwarns << "attempt_standard_notification: Attempted to read notification parameter data into LLSD but failed:" << llsdRaw << llendl;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
handle_trusted_experiences_notification(llsdBlock);
|
||||
|
||||
if (
|
||||
(notificationID == "RegionEntryAccessBlocked") ||
|
||||
|
|
@ -6004,6 +6019,7 @@ bool attempt_standard_notification(LLMessageSystem* msgsystem)
|
|||
}
|
||||
|
||||
LLNotificationsUtil::add(notificationID, llsdBlock);
|
||||
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
|
|
|||
|
|
@ -205,8 +205,8 @@ void LLViewerParcelMgr::dump()
|
|||
mCurrentParcel->dump();
|
||||
llinfos << "banning " << mCurrentParcel->mBanList.size() << llendl;
|
||||
|
||||
access_map_const_iterator cit = mCurrentParcel->mBanList.begin();
|
||||
access_map_const_iterator end = mCurrentParcel->mBanList.end();
|
||||
LLAccessEntry::map::const_iterator cit = mCurrentParcel->mBanList.begin();
|
||||
LLAccessEntry::map::const_iterator end = mCurrentParcel->mBanList.end();
|
||||
for ( ; cit != end; ++cit)
|
||||
{
|
||||
llinfos << "ban id " << (*cit).first << llendl;
|
||||
|
|
@ -892,7 +892,7 @@ void LLViewerParcelMgr::sendParcelAccessListRequest(U32 flags)
|
|||
if (!region) return;
|
||||
|
||||
LLMessageSystem *msg = gMessageSystem;
|
||||
|
||||
|
||||
|
||||
if (flags & AL_BAN)
|
||||
{
|
||||
|
|
@ -902,6 +902,14 @@ void LLViewerParcelMgr::sendParcelAccessListRequest(U32 flags)
|
|||
{
|
||||
mCurrentParcel->mAccessList.clear();
|
||||
}
|
||||
if (flags & AL_ALLOW_EXPERIENCE)
|
||||
{
|
||||
mCurrentParcel->clearExperienceKeysByType(EXPERIENCE_KEY_TYPE_ALLOWED);
|
||||
}
|
||||
if (flags & AL_BLOCK_EXPERIENCE)
|
||||
{
|
||||
mCurrentParcel->clearExperienceKeysByType(EXPERIENCE_KEY_TYPE_BLOCKED);
|
||||
}
|
||||
|
||||
// Only the headers differ
|
||||
msg->newMessageFast(_PREHASH_ParcelAccessListRequest);
|
||||
|
|
@ -1657,7 +1665,7 @@ void LLViewerParcelMgr::processParcelProperties(LLMessageSystem *msg, void **use
|
|||
}
|
||||
|
||||
// Request access list information for this land
|
||||
parcel_mgr.sendParcelAccessListRequest(AL_ACCESS | AL_BAN);
|
||||
parcel_mgr.sendParcelAccessListRequest(AL_ACCESS | AL_BAN | AL_ALLOW_EXPERIENCE | AL_BLOCK_EXPERIENCE);
|
||||
|
||||
// Request dwell for this land, if it's not public land.
|
||||
parcel_mgr.mSelectedDwell = DWELL_NAN;
|
||||
|
|
@ -1822,6 +1830,14 @@ void LLViewerParcelMgr::processParcelAccessListReply(LLMessageSystem *msg, void
|
|||
{
|
||||
parcel->unpackAccessEntries(msg, &(parcel->mBanList) );
|
||||
}
|
||||
else if (message_flags & AL_ALLOW_EXPERIENCE)
|
||||
{
|
||||
parcel->unpackExperienceEntries(msg, EXPERIENCE_KEY_TYPE_ALLOWED);
|
||||
}
|
||||
else if (message_flags & AL_BLOCK_EXPERIENCE)
|
||||
{
|
||||
parcel->unpackExperienceEntries(msg, EXPERIENCE_KEY_TYPE_BLOCKED);
|
||||
}
|
||||
/*else if (message_flags & AL_RENTER)
|
||||
{
|
||||
parcel->unpackAccessEntries(msg, &(parcel->mRenterList) );
|
||||
|
|
@ -1856,10 +1872,6 @@ void LLViewerParcelMgr::processParcelDwellReply(LLMessageSystem* msg, void**)
|
|||
|
||||
void LLViewerParcelMgr::sendParcelAccessListUpdate(U32 which)
|
||||
{
|
||||
|
||||
LLUUID transactionUUID;
|
||||
transactionUUID.generate();
|
||||
|
||||
if (!mSelected)
|
||||
{
|
||||
return;
|
||||
|
|
@ -1868,125 +1880,92 @@ void LLViewerParcelMgr::sendParcelAccessListUpdate(U32 which)
|
|||
LLViewerRegion* region = LLWorld::getInstance()->getRegionFromPosGlobal( mWestSouth );
|
||||
if (!region) return;
|
||||
|
||||
LLMessageSystem* msg = gMessageSystem;
|
||||
|
||||
LLParcel* parcel = mCurrentParcel;
|
||||
if (!parcel) return;
|
||||
|
||||
if (which & AL_ACCESS)
|
||||
{
|
||||
S32 count = parcel->mAccessList.size();
|
||||
S32 num_sections = (S32) ceil(count/PARCEL_MAX_ENTRIES_PER_PACKET);
|
||||
S32 sequence_id = 1;
|
||||
BOOL start_message = TRUE;
|
||||
BOOL initial = TRUE;
|
||||
|
||||
access_map_const_iterator cit = parcel->mAccessList.begin();
|
||||
access_map_const_iterator end = parcel->mAccessList.end();
|
||||
while ( (cit != end) || initial )
|
||||
{
|
||||
if (start_message)
|
||||
{
|
||||
msg->newMessageFast(_PREHASH_ParcelAccessListUpdate);
|
||||
msg->nextBlockFast(_PREHASH_AgentData);
|
||||
msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID() );
|
||||
msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID() );
|
||||
msg->nextBlockFast(_PREHASH_Data);
|
||||
msg->addU32Fast(_PREHASH_Flags, AL_ACCESS);
|
||||
msg->addS32(_PREHASH_LocalID, parcel->getLocalID() );
|
||||
msg->addUUIDFast(_PREHASH_TransactionID, transactionUUID);
|
||||
msg->addS32Fast(_PREHASH_SequenceID, sequence_id);
|
||||
msg->addS32Fast(_PREHASH_Sections, num_sections);
|
||||
start_message = FALSE;
|
||||
|
||||
if (initial && (cit == end))
|
||||
{
|
||||
// pack an empty block if there will be no data
|
||||
msg->nextBlockFast(_PREHASH_List);
|
||||
msg->addUUIDFast(_PREHASH_ID, LLUUID::null );
|
||||
msg->addS32Fast(_PREHASH_Time, 0 );
|
||||
msg->addU32Fast(_PREHASH_Flags, 0 );
|
||||
}
|
||||
|
||||
initial = FALSE;
|
||||
sequence_id++;
|
||||
|
||||
}
|
||||
|
||||
while ( (cit != end) && (msg->getCurrentSendTotal() < MTUBYTES))
|
||||
{
|
||||
|
||||
const LLAccessEntry& entry = (*cit).second;
|
||||
|
||||
msg->nextBlockFast(_PREHASH_List);
|
||||
msg->addUUIDFast(_PREHASH_ID, entry.mID );
|
||||
msg->addS32Fast(_PREHASH_Time, entry.mTime );
|
||||
msg->addU32Fast(_PREHASH_Flags, entry.mFlags );
|
||||
++cit;
|
||||
}
|
||||
|
||||
start_message = TRUE;
|
||||
msg->sendReliable( region->getHost() );
|
||||
}
|
||||
sendParcelAccessListUpdate(AL_ACCESS, parcel->mAccessList, region, parcel->getLocalID());
|
||||
}
|
||||
|
||||
if (which & AL_BAN)
|
||||
{
|
||||
S32 count = parcel->mBanList.size();
|
||||
S32 num_sections = (S32) ceil(count/PARCEL_MAX_ENTRIES_PER_PACKET);
|
||||
S32 sequence_id = 1;
|
||||
BOOL start_message = TRUE;
|
||||
BOOL initial = TRUE;
|
||||
sendParcelAccessListUpdate(AL_BAN, parcel->mBanList, region, parcel->getLocalID());
|
||||
}
|
||||
|
||||
access_map_const_iterator cit = parcel->mBanList.begin();
|
||||
access_map_const_iterator end = parcel->mBanList.end();
|
||||
while ( (cit != end) || initial )
|
||||
{
|
||||
if (start_message)
|
||||
{
|
||||
msg->newMessageFast(_PREHASH_ParcelAccessListUpdate);
|
||||
msg->nextBlockFast(_PREHASH_AgentData);
|
||||
msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID() );
|
||||
msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID() );
|
||||
msg->nextBlockFast(_PREHASH_Data);
|
||||
msg->addU32Fast(_PREHASH_Flags, AL_BAN);
|
||||
msg->addS32(_PREHASH_LocalID, parcel->getLocalID() );
|
||||
msg->addUUIDFast(_PREHASH_TransactionID, transactionUUID);
|
||||
msg->addS32Fast(_PREHASH_SequenceID, sequence_id);
|
||||
msg->addS32Fast(_PREHASH_Sections, num_sections);
|
||||
start_message = FALSE;
|
||||
|
||||
if (initial && (cit == end))
|
||||
{
|
||||
// pack an empty block if there will be no data
|
||||
msg->nextBlockFast(_PREHASH_List);
|
||||
msg->addUUIDFast(_PREHASH_ID, LLUUID::null );
|
||||
msg->addS32Fast(_PREHASH_Time, 0 );
|
||||
msg->addU32Fast(_PREHASH_Flags, 0 );
|
||||
}
|
||||
|
||||
initial = FALSE;
|
||||
sequence_id++;
|
||||
|
||||
}
|
||||
|
||||
while ( (cit != end) && (msg->getCurrentSendTotal() < MTUBYTES))
|
||||
{
|
||||
const LLAccessEntry& entry = (*cit).second;
|
||||
|
||||
msg->nextBlockFast(_PREHASH_List);
|
||||
msg->addUUIDFast(_PREHASH_ID, entry.mID );
|
||||
msg->addS32Fast(_PREHASH_Time, entry.mTime );
|
||||
msg->addU32Fast(_PREHASH_Flags, entry.mFlags );
|
||||
++cit;
|
||||
}
|
||||
|
||||
start_message = TRUE;
|
||||
msg->sendReliable( region->getHost() );
|
||||
}
|
||||
if(which & AL_ALLOW_EXPERIENCE)
|
||||
{
|
||||
sendParcelAccessListUpdate(AL_ALLOW_EXPERIENCE, parcel->getExperienceKeysByType(EXPERIENCE_KEY_TYPE_ALLOWED), region, parcel->getLocalID());
|
||||
}
|
||||
if(which & AL_BLOCK_EXPERIENCE)
|
||||
{
|
||||
sendParcelAccessListUpdate(AL_BLOCK_EXPERIENCE, parcel->getExperienceKeysByType(EXPERIENCE_KEY_TYPE_BLOCKED), region, parcel->getLocalID());
|
||||
}
|
||||
}
|
||||
|
||||
void LLViewerParcelMgr::sendParcelAccessListUpdate(U32 flags, const LLAccessEntry::map& entries, LLViewerRegion* region, S32 parcel_local_id)
|
||||
{
|
||||
S32 count = entries.size();
|
||||
S32 num_sections = (S32) ceil(count/PARCEL_MAX_ENTRIES_PER_PACKET);
|
||||
S32 sequence_id = 1;
|
||||
BOOL start_message = TRUE;
|
||||
BOOL initial = TRUE;
|
||||
|
||||
LLUUID transactionUUID;
|
||||
transactionUUID.generate();
|
||||
|
||||
|
||||
LLMessageSystem* msg = gMessageSystem;
|
||||
|
||||
LLAccessEntry::map::const_iterator cit = entries.begin();
|
||||
LLAccessEntry::map::const_iterator end = entries.end();
|
||||
while ( (cit != end) || initial )
|
||||
{
|
||||
if (start_message)
|
||||
{
|
||||
msg->newMessageFast(_PREHASH_ParcelAccessListUpdate);
|
||||
msg->nextBlockFast(_PREHASH_AgentData);
|
||||
msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID() );
|
||||
msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID() );
|
||||
msg->nextBlockFast(_PREHASH_Data);
|
||||
msg->addU32Fast(_PREHASH_Flags, flags);
|
||||
msg->addS32(_PREHASH_LocalID, parcel_local_id);
|
||||
msg->addUUIDFast(_PREHASH_TransactionID, transactionUUID);
|
||||
msg->addS32Fast(_PREHASH_SequenceID, sequence_id);
|
||||
msg->addS32Fast(_PREHASH_Sections, num_sections);
|
||||
start_message = FALSE;
|
||||
|
||||
if (initial && (cit == end))
|
||||
{
|
||||
// pack an empty block if there will be no data
|
||||
msg->nextBlockFast(_PREHASH_List);
|
||||
msg->addUUIDFast(_PREHASH_ID, LLUUID::null );
|
||||
msg->addS32Fast(_PREHASH_Time, 0 );
|
||||
msg->addU32Fast(_PREHASH_Flags, 0 );
|
||||
}
|
||||
|
||||
initial = FALSE;
|
||||
sequence_id++;
|
||||
|
||||
}
|
||||
|
||||
while ( (cit != end) && (msg->getCurrentSendTotal() < MTUBYTES))
|
||||
{
|
||||
const LLAccessEntry& entry = (*cit).second;
|
||||
|
||||
msg->nextBlockFast(_PREHASH_List);
|
||||
msg->addUUIDFast(_PREHASH_ID, entry.mID );
|
||||
msg->addS32Fast(_PREHASH_Time, entry.mTime );
|
||||
msg->addU32Fast(_PREHASH_Flags, entry.mFlags );
|
||||
++cit;
|
||||
}
|
||||
|
||||
start_message = TRUE;
|
||||
msg->sendReliable( region->getHost() );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void LLViewerParcelMgr::deedLandToGroup()
|
||||
{
|
||||
std::string group_name;
|
||||
|
|
|
|||
|
|
@ -220,6 +220,10 @@ public:
|
|||
// Takes an Access List flag, like AL_ACCESS or AL_BAN
|
||||
void sendParcelAccessListUpdate(U32 which);
|
||||
|
||||
static void sendParcelAccessListUpdate(U32 flags, const std::map<LLUUID, class LLAccessEntry>& entries, LLViewerRegion* region, S32 parcel_local_id);
|
||||
static void sendParcelExperienceUpdate( const U32 flags, uuid_vec_t experience_ids, LLViewerRegion* region, S32 parcel_local_id );
|
||||
|
||||
|
||||
// Takes an Access List flag, like AL_ACCESS or AL_BAN
|
||||
void sendParcelAccessListRequest(U32 flags);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue