PATH-292: Ensuring that the terrain linkset is not visible and/or editable to a non-estate non-god agent.
parent
518bc51e66
commit
1503338ddc
|
|
@ -173,6 +173,12 @@ bool LLPathfindingManager::isAllowAlterPermanent()
|
|||
return (!isPathfindingEnabledForCurrentRegion() || (getAgentState() == kAgentStateUnfrozen));
|
||||
}
|
||||
|
||||
bool LLPathfindingManager::isAllowViewTerrainProperties() const
|
||||
{
|
||||
LLViewerRegion* region = getCurrentRegion();
|
||||
return (gAgent.isGodlike() || ((region != NULL) && region->canManageEstate()));
|
||||
}
|
||||
|
||||
LLPathfindingManager::agent_state_slot_t LLPathfindingManager::registerAgentStateSignal(agent_state_callback_t pAgentStateCallback)
|
||||
{
|
||||
return mAgentStateSignal.connect(pAgentStateCallback);
|
||||
|
|
@ -231,13 +237,18 @@ LLPathfindingManager::ELinksetsRequestStatus LLPathfindingManager::requestGetLin
|
|||
}
|
||||
else
|
||||
{
|
||||
LinksetsResponderPtr linksetsResponderPtr(new LinksetsResponder(pLinksetsCallback, true, true));
|
||||
bool doRequestTerrain = isAllowViewTerrainProperties();
|
||||
LinksetsResponderPtr linksetsResponderPtr(new LinksetsResponder(pLinksetsCallback, true, doRequestTerrain));
|
||||
|
||||
LLHTTPClient::ResponderPtr objectLinksetsResponder = new ObjectLinksetsResponder(objectLinksetsURL, linksetsResponderPtr);
|
||||
LLHTTPClient::ResponderPtr terrainLinksetsResponder = new TerrainLinksetsResponder(terrainLinksetsURL, linksetsResponderPtr);
|
||||
|
||||
LLHTTPClient::get(objectLinksetsURL, objectLinksetsResponder);
|
||||
LLHTTPClient::get(terrainLinksetsURL, terrainLinksetsResponder);
|
||||
|
||||
if (doRequestTerrain)
|
||||
{
|
||||
LLHTTPClient::ResponderPtr terrainLinksetsResponder = new TerrainLinksetsResponder(terrainLinksetsURL, linksetsResponderPtr);
|
||||
LLHTTPClient::get(terrainLinksetsURL, terrainLinksetsResponder);
|
||||
}
|
||||
|
||||
status = kLinksetsRequestStarted;
|
||||
}
|
||||
|
||||
|
|
@ -257,7 +268,12 @@ LLPathfindingManager::ELinksetsRequestStatus LLPathfindingManager::requestSetLin
|
|||
else
|
||||
{
|
||||
LLSD objectPostData = pLinksetList->encodeObjectFields(pLinksetUse, pA, pB, pC, pD);
|
||||
LLSD terrainPostData = pLinksetList->encodeTerrainFields(pLinksetUse, pA, pB, pC, pD);
|
||||
LLSD terrainPostData;
|
||||
if (isAllowViewTerrainProperties())
|
||||
{
|
||||
terrainPostData = pLinksetList->encodeTerrainFields(pLinksetUse, pA, pB, pC, pD);
|
||||
}
|
||||
|
||||
if (objectPostData.isUndefined() && terrainPostData.isUndefined())
|
||||
{
|
||||
status = kLinksetsRequestCompleted;
|
||||
|
|
@ -362,7 +378,7 @@ std::string LLPathfindingManager::getCapabilityURLForCurrentRegion(const std::st
|
|||
{
|
||||
std::string capabilityURL("");
|
||||
|
||||
LLViewerRegion* region = gAgent.getRegion();
|
||||
LLViewerRegion* region = getCurrentRegion();
|
||||
if (region != NULL)
|
||||
{
|
||||
capabilityURL = region->getCapability(pCapabilityName);
|
||||
|
|
@ -377,6 +393,11 @@ std::string LLPathfindingManager::getCapabilityURLForCurrentRegion(const std::st
|
|||
return capabilityURL;
|
||||
}
|
||||
|
||||
LLViewerRegion *LLPathfindingManager::getCurrentRegion() const
|
||||
{
|
||||
return gAgent.getRegion();
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
// AgentStateResponder
|
||||
//---------------------------------------------------------------------------
|
||||
|
|
|
|||
|
|
@ -38,6 +38,7 @@
|
|||
#include "llpathfindinglinksetlist.h"
|
||||
|
||||
class LLFloater;
|
||||
class LLViewerRegion;
|
||||
|
||||
class LLPathfindingManager : public LLSingleton<LLPathfindingManager>
|
||||
{
|
||||
|
|
@ -70,6 +71,7 @@ public:
|
|||
bool isPathfindingEnabledForCurrentRegion() const;
|
||||
|
||||
bool isAllowAlterPermanent();
|
||||
bool isAllowViewTerrainProperties() const;
|
||||
|
||||
agent_state_slot_t registerAgentStateSignal(agent_state_callback_t pAgentStateCallback);
|
||||
EAgentState getAgentState();
|
||||
|
|
@ -95,6 +97,7 @@ private:
|
|||
std::string getTerrainLinksetsURLForCurrentRegion() const;
|
||||
|
||||
std::string getCapabilityURLForCurrentRegion(const std::string &pCapabilityName) const;
|
||||
LLViewerRegion *getCurrentRegion() const;
|
||||
|
||||
agent_state_signal_t mAgentStateSignal;
|
||||
EAgentState mAgentState;
|
||||
|
|
|
|||
Loading…
Reference in New Issue