Merge branch 'master' into cmickeyb

viewer-2-initial-appearance
Mic Bowman 2011-01-03 17:05:24 -08:00
commit d3987024d7
14 changed files with 112 additions and 56 deletions

View File

@ -489,7 +489,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends
im.imSessionID = im.fromAgentID; im.imSessionID = im.fromAgentID;
// Try the local sim // Try the local sim
UserAccount account = UserAccountService.GetUserAccount(Scene.RegionInfo.ScopeID, agentID); UserAccount account = UserAccountService.GetUserAccount(UUID.Zero, agentID);
im.fromAgentName = (account == null) ? "Unknown" : account.FirstName + " " + account.LastName; im.fromAgentName = (account == null) ? "Unknown" : account.FirstName + " " + account.LastName;
if (LocalFriendshipOffered(friendID, im)) if (LocalFriendshipOffered(friendID, im))

View File

@ -116,7 +116,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends
if (!UUID.TryParse(request["ToID"].ToString(), out toID)) if (!UUID.TryParse(request["ToID"].ToString(), out toID))
return FailureResult(); return FailureResult();
UserAccount account = m_FriendsModule.UserAccountService.GetUserAccount(m_FriendsModule.Scene.RegionInfo.ScopeID, fromID); UserAccount account = m_FriendsModule.UserAccountService.GetUserAccount(UUID.Zero, fromID);
string name = (account == null) ? "Unknown" : account.FirstName + " " + account.LastName; string name = (account == null) ? "Unknown" : account.FirstName + " " + account.LastName;
GridInstantMessage im = new GridInstantMessage(m_FriendsModule.Scene, fromID, name, toID, GridInstantMessage im = new GridInstantMessage(m_FriendsModule.Scene, fromID, name, toID,

View File

@ -1515,7 +1515,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
// If we fail to cross the border, then reset the position of the scene object on that border. // If we fail to cross the border, then reset the position of the scene object on that border.
uint x = 0, y = 0; uint x = 0, y = 0;
Utils.LongToUInts(newRegionHandle, out x, out y); Utils.LongToUInts(newRegionHandle, out x, out y);
GridRegion destination = scene.GridService.GetRegionByPosition(UUID.Zero, (int)x, (int)y); GridRegion destination = scene.GridService.GetRegionByPosition(scene.RegionInfo.ScopeID, (int)x, (int)y);
if (destination != null && !CrossPrimGroupIntoNewRegion(destination, grp, silent)) if (destination != null && !CrossPrimGroupIntoNewRegion(destination, grp, silent))
{ {
grp.OffsetForNewRegion(oldGroupPosition); grp.OffsetForNewRegion(oldGroupPosition);

View File

@ -183,7 +183,7 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement
return returnstring; return returnstring;
} }
UserAccount account = m_Scenes[0].UserAccountService.GetUserAccount(m_Scenes[0].RegionInfo.ScopeID, uuid); UserAccount account = m_Scenes[0].UserAccountService.GetUserAccount(UUID.Zero, uuid);
if (account != null) if (account != null)
{ {

View File

@ -37,6 +37,7 @@ using OpenSim.Region.Framework.Interfaces;
using OpenSim.Server.Base; using OpenSim.Server.Base;
using OpenSim.Server.Handlers.Base; using OpenSim.Server.Handlers.Base;
using OpenSim.Services.Interfaces; using OpenSim.Services.Interfaces;
using OpenMetaverse;
namespace OpenSim.Region.CoreModules.ServiceConnectorsIn.Land namespace OpenSim.Region.CoreModules.ServiceConnectorsIn.Land
@ -121,7 +122,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsIn.Land
#region ILandService #region ILandService
public LandData GetLandData(ulong regionHandle, uint x, uint y, out byte regionAccess) public LandData GetLandData(UUID scopeID, ulong regionHandle, uint x, uint y, out byte regionAccess)
{ {
m_log.DebugFormat("[LAND IN CONNECTOR]: GetLandData for {0}. Count = {1}", m_log.DebugFormat("[LAND IN CONNECTOR]: GetLandData for {0}. Count = {1}",
regionHandle, m_Scenes.Count); regionHandle, m_Scenes.Count);

View File

@ -35,6 +35,7 @@ using OpenSim.Server.Base;
using OpenSim.Region.Framework.Interfaces; using OpenSim.Region.Framework.Interfaces;
using OpenSim.Region.Framework.Scenes; using OpenSim.Region.Framework.Scenes;
using OpenSim.Services.Interfaces; using OpenSim.Services.Interfaces;
using OpenMetaverse;
namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Land namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Land
{ {
@ -116,7 +117,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Land
#region ILandService #region ILandService
public LandData GetLandData(ulong regionHandle, uint x, uint y, out byte regionAccess) public LandData GetLandData(UUID scopeID, ulong regionHandle, uint x, uint y, out byte regionAccess)
{ {
regionAccess = 2; regionAccess = 2;
m_log.DebugFormat("[LAND CONNECTOR]: request for land data in {0} at {1}, {2}", m_log.DebugFormat("[LAND CONNECTOR]: request for land data in {0} at {1}, {2}",

View File

@ -36,6 +36,7 @@ using OpenSim.Region.Framework.Interfaces;
using OpenSim.Region.Framework.Scenes; using OpenSim.Region.Framework.Scenes;
using OpenSim.Services.Interfaces; using OpenSim.Services.Interfaces;
using OpenSim.Server.Base; using OpenSim.Server.Base;
using OpenMetaverse;
namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Land namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Land
@ -109,13 +110,13 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Land
#region ILandService #region ILandService
public override LandData GetLandData(ulong regionHandle, uint x, uint y, out byte regionAccess) public override LandData GetLandData(UUID scopeID, ulong regionHandle, uint x, uint y, out byte regionAccess)
{ {
LandData land = m_LocalService.GetLandData(regionHandle, x, y, out regionAccess); LandData land = m_LocalService.GetLandData(scopeID, regionHandle, x, y, out regionAccess);
if (land != null) if (land != null)
return land; return land;
return base.GetLandData(regionHandle, x, y, out regionAccess); return base.GetLandData(scopeID, regionHandle, x, y, out regionAccess);
} }
#endregion ILandService #endregion ILandService

View File

@ -1510,40 +1510,40 @@ namespace OpenSim.Region.CoreModules.World.Land
if (parcelID == UUID.Zero) if (parcelID == UUID.Zero)
return; return;
ExtendedLandData data = ExtendedLandData data = (ExtendedLandData)parcelInfoCache.Get(parcelID.ToString(),
(ExtendedLandData)parcelInfoCache.Get(parcelID.ToString(), delegate(string id)
delegate(string id) {
{ UUID parcel = UUID.Zero;
UUID parcel = UUID.Zero; UUID.TryParse(id, out parcel);
UUID.TryParse(id, out parcel); // assume we've got the parcelID we just computed in RemoteParcelRequest
// assume we've got the parcelID we just computed in RemoteParcelRequest ExtendedLandData extLandData = new ExtendedLandData();
ExtendedLandData extLandData = new ExtendedLandData(); Util.ParseFakeParcelID(parcel, out extLandData.RegionHandle,
Util.ParseFakeParcelID(parcel, out extLandData.RegionHandle, out extLandData.X, out extLandData.Y);
out extLandData.X, out extLandData.Y); m_log.DebugFormat("[LAND] got parcelinfo request for regionHandle {0}, x/y {1}/{2}",
m_log.DebugFormat("[LAND] got parcelinfo request for regionHandle {0}, x/y {1}/{2}", extLandData.RegionHandle, extLandData.X, extLandData.Y);
extLandData.RegionHandle, extLandData.X, extLandData.Y);
// for this region or for somewhere else? // for this region or for somewhere else?
if (extLandData.RegionHandle == m_scene.RegionInfo.RegionHandle) if (extLandData.RegionHandle == m_scene.RegionInfo.RegionHandle)
{ {
extLandData.LandData = this.GetLandObject(extLandData.X, extLandData.Y).LandData; extLandData.LandData = this.GetLandObject(extLandData.X, extLandData.Y).LandData;
extLandData.RegionAccess = m_scene.RegionInfo.AccessLevel; extLandData.RegionAccess = m_scene.RegionInfo.AccessLevel;
} }
else else
{ {
ILandService landService = m_scene.RequestModuleInterface<ILandService>(); ILandService landService = m_scene.RequestModuleInterface<ILandService>();
extLandData.LandData = landService.GetLandData(extLandData.RegionHandle, extLandData.LandData = landService.GetLandData(m_scene.RegionInfo.ScopeID,
extLandData.X, extLandData.RegionHandle,
extLandData.Y, extLandData.X,
out extLandData.RegionAccess); extLandData.Y,
if (extLandData.LandData == null) out extLandData.RegionAccess);
{ if (extLandData.LandData == null)
// we didn't find the region/land => don't cache {
return null; // we didn't find the region/land => don't cache
} return null;
} }
return extLandData; }
}); return extLandData;
});
if (data != null) // if we found some data, send it if (data != null) // if we found some data, send it
{ {
@ -1557,7 +1557,7 @@ namespace OpenSim.Region.CoreModules.World.Land
// most likely still cached from building the extLandData entry // most likely still cached from building the extLandData entry
uint x = 0, y = 0; uint x = 0, y = 0;
Utils.LongToUInts(data.RegionHandle, out x, out y); Utils.LongToUInts(data.RegionHandle, out x, out y);
info = m_scene.GridService.GetRegionByPosition(UUID.Zero, (int)x, (int)y); info = m_scene.GridService.GetRegionByPosition(m_scene.RegionInfo.ScopeID, (int)x, (int)y);
} }
// we need to transfer the fake parcelID, not the one in landData, so the viewer can match it to the landmark. // we need to transfer the fake parcelID, not the one in landData, so the viewer can match it to the landmark.
m_log.DebugFormat("[LAND] got parcelinfo for parcel {0} in region {1}; sending...", m_log.DebugFormat("[LAND] got parcelinfo for parcel {0} in region {1}; sending...",

View File

@ -43,6 +43,7 @@ namespace OpenSim.Region.Framework.Scenes
public delegate bool PropagatePermissionsHandler(); public delegate bool PropagatePermissionsHandler();
public delegate bool RezObjectHandler(int objectCount, UUID owner, Vector3 objectPosition, Scene scene); public delegate bool RezObjectHandler(int objectCount, UUID owner, Vector3 objectPosition, Scene scene);
public delegate bool DeleteObjectHandler(UUID objectID, UUID deleter, Scene scene); public delegate bool DeleteObjectHandler(UUID objectID, UUID deleter, Scene scene);
public delegate bool TransferObjectHandler(UUID objectID, UUID recipient, Scene scene);
public delegate bool TakeObjectHandler(UUID objectID, UUID stealer, Scene scene); public delegate bool TakeObjectHandler(UUID objectID, UUID stealer, Scene scene);
public delegate bool TakeCopyObjectHandler(UUID objectID, UUID userID, Scene inScene); public delegate bool TakeCopyObjectHandler(UUID objectID, UUID userID, Scene inScene);
public delegate bool DuplicateObjectHandler(int objectCount, UUID objectID, UUID owner, Scene scene, Vector3 objectPosition); public delegate bool DuplicateObjectHandler(int objectCount, UUID objectID, UUID owner, Scene scene, Vector3 objectPosition);
@ -80,10 +81,12 @@ namespace OpenSim.Region.Framework.Scenes
public delegate bool CreateObjectInventoryHandler(int invType, UUID objectID, UUID userID); public delegate bool CreateObjectInventoryHandler(int invType, UUID objectID, UUID userID);
public delegate bool CopyObjectInventoryHandler(UUID itemID, UUID objectID, UUID userID); public delegate bool CopyObjectInventoryHandler(UUID itemID, UUID objectID, UUID userID);
public delegate bool DeleteObjectInventoryHandler(UUID itemID, UUID objectID, UUID userID); public delegate bool DeleteObjectInventoryHandler(UUID itemID, UUID objectID, UUID userID);
public delegate bool TransferObjectInventoryHandler(UUID itemID, UUID objectID, UUID userID);
public delegate bool CreateUserInventoryHandler(int invType, UUID userID); public delegate bool CreateUserInventoryHandler(int invType, UUID userID);
public delegate bool EditUserInventoryHandler(UUID itemID, UUID userID); public delegate bool EditUserInventoryHandler(UUID itemID, UUID userID);
public delegate bool CopyUserInventoryHandler(UUID itemID, UUID userID); public delegate bool CopyUserInventoryHandler(UUID itemID, UUID userID);
public delegate bool DeleteUserInventoryHandler(UUID itemID, UUID userID); public delegate bool DeleteUserInventoryHandler(UUID itemID, UUID userID);
public delegate bool TransferUserInventoryHandler(UUID itemID, UUID userID, UUID recipientID);
public delegate bool TeleportHandler(UUID userID, Scene scene); public delegate bool TeleportHandler(UUID userID, Scene scene);
public delegate bool ControlPrimMediaHandler(UUID userID, UUID primID, int face); public delegate bool ControlPrimMediaHandler(UUID userID, UUID primID, int face);
public delegate bool InteractWithPrimMediaHandler(UUID userID, UUID primID, int face); public delegate bool InteractWithPrimMediaHandler(UUID userID, UUID primID, int face);
@ -107,6 +110,7 @@ namespace OpenSim.Region.Framework.Scenes
public event PropagatePermissionsHandler OnPropagatePermissions; public event PropagatePermissionsHandler OnPropagatePermissions;
public event RezObjectHandler OnRezObject; public event RezObjectHandler OnRezObject;
public event DeleteObjectHandler OnDeleteObject; public event DeleteObjectHandler OnDeleteObject;
public event TransferObjectHandler OnTransferObject;
public event TakeObjectHandler OnTakeObject; public event TakeObjectHandler OnTakeObject;
public event TakeCopyObjectHandler OnTakeCopyObject; public event TakeCopyObjectHandler OnTakeCopyObject;
public event DuplicateObjectHandler OnDuplicateObject; public event DuplicateObjectHandler OnDuplicateObject;
@ -144,10 +148,12 @@ namespace OpenSim.Region.Framework.Scenes
public event CreateObjectInventoryHandler OnCreateObjectInventory; public event CreateObjectInventoryHandler OnCreateObjectInventory;
public event CopyObjectInventoryHandler OnCopyObjectInventory; public event CopyObjectInventoryHandler OnCopyObjectInventory;
public event DeleteObjectInventoryHandler OnDeleteObjectInventory; public event DeleteObjectInventoryHandler OnDeleteObjectInventory;
public event TransferObjectInventoryHandler OnTransferObjectInventory;
public event CreateUserInventoryHandler OnCreateUserInventory; public event CreateUserInventoryHandler OnCreateUserInventory;
public event EditUserInventoryHandler OnEditUserInventory; public event EditUserInventoryHandler OnEditUserInventory;
public event CopyUserInventoryHandler OnCopyUserInventory; public event CopyUserInventoryHandler OnCopyUserInventory;
public event DeleteUserInventoryHandler OnDeleteUserInventory; public event DeleteUserInventoryHandler OnDeleteUserInventory;
public event TransferUserInventoryHandler OnTransferUserInventory;
public event TeleportHandler OnTeleport; public event TeleportHandler OnTeleport;
public event ControlPrimMediaHandler OnControlPrimMedia; public event ControlPrimMediaHandler OnControlPrimMedia;
public event InteractWithPrimMediaHandler OnInteractWithPrimMedia; public event InteractWithPrimMediaHandler OnInteractWithPrimMedia;
@ -264,9 +270,26 @@ namespace OpenSim.Region.Framework.Scenes
} }
} }
// m_log.DebugFormat( return result;
// "[SCENE PERMISSIONS]: CanDeleteObject() fired for object {0}, deleter {1}, result {2}", }
// objectID, deleter, result);
public bool CanTransferObject(UUID objectID, UUID recipient)
{
bool result = true;
TransferObjectHandler handler = OnTransferObject;
if (handler != null)
{
Delegate[] list = handler.GetInvocationList();
foreach (TransferObjectHandler h in list)
{
if (h(objectID, recipient, m_scene) == false)
{
result = false;
break;
}
}
}
return result; return result;
} }
@ -917,6 +940,21 @@ namespace OpenSim.Region.Framework.Scenes
return true; return true;
} }
public bool CanTransferObjectInventory(UUID itemID, UUID objectID, UUID userID)
{
TransferObjectInventoryHandler handler = OnTransferObjectInventory;
if (handler != null)
{
Delegate[] list = handler.GetInvocationList();
foreach (TransferObjectInventoryHandler h in list)
{
if (h(itemID, objectID, userID) == false)
return false;
}
}
return true;
}
/// <summary> /// <summary>
/// Check whether the specified user is allowed to create the given inventory type in their inventory. /// Check whether the specified user is allowed to create the given inventory type in their inventory.
/// </summary> /// </summary>
@ -1001,6 +1039,21 @@ namespace OpenSim.Region.Framework.Scenes
return true; return true;
} }
public bool CanTransferUserInventory(UUID itemID, UUID userID, UUID recipientID)
{
TransferUserInventoryHandler handler = OnTransferUserInventory;
if (handler != null)
{
Delegate[] list = handler.GetInvocationList();
foreach (TransferUserInventoryHandler h in list)
{
if (h(itemID, userID, recipientID) == false)
return false;
}
}
return true;
}
public bool CanTeleport(UUID userID) public bool CanTeleport(UUID userID)
{ {
TeleportHandler handler = OnTeleport; TeleportHandler handler = OnTeleport;

View File

@ -193,7 +193,7 @@ namespace OpenSim.Region.Framework.Scenes
} }
} }
public delegate void SendChildAgentDataUpdateDelegate(AgentPosition cAgentData, ulong regionHandle); public delegate void SendChildAgentDataUpdateDelegate(AgentPosition cAgentData, UUID scopeID, ulong regionHandle);
/// <summary> /// <summary>
/// This informs all neighboring regions about the settings of it's child agent. /// This informs all neighboring regions about the settings of it's child agent.
@ -202,7 +202,7 @@ namespace OpenSim.Region.Framework.Scenes
/// This contains information, such as, Draw Distance, Camera location, Current Position, Current throttle settings, etc. /// This contains information, such as, Draw Distance, Camera location, Current Position, Current throttle settings, etc.
/// ///
/// </summary> /// </summary>
private void SendChildAgentDataUpdateAsync(AgentPosition cAgentData, ulong regionHandle) private void SendChildAgentDataUpdateAsync(AgentPosition cAgentData, UUID scopeID, ulong regionHandle)
{ {
//m_log.Info("[INTERGRID]: Informing neighbors about my agent in " + m_regionInfo.RegionName); //m_log.Info("[INTERGRID]: Informing neighbors about my agent in " + m_regionInfo.RegionName);
try try
@ -245,7 +245,7 @@ namespace OpenSim.Region.Framework.Scenes
if (regionHandle != m_regionInfo.RegionHandle) if (regionHandle != m_regionInfo.RegionHandle)
{ {
SendChildAgentDataUpdateDelegate d = SendChildAgentDataUpdateAsync; SendChildAgentDataUpdateDelegate d = SendChildAgentDataUpdateAsync;
d.BeginInvoke(cAgentData, regionHandle, d.BeginInvoke(cAgentData, m_regionInfo.ScopeID, regionHandle,
SendChildAgentDataUpdateCompleted, SendChildAgentDataUpdateCompleted,
d); d);
} }
@ -273,7 +273,7 @@ namespace OpenSim.Region.Framework.Scenes
//m_commsProvider.InterRegion.TellRegionToCloseChildConnection(regionHandle, agentID); //m_commsProvider.InterRegion.TellRegionToCloseChildConnection(regionHandle, agentID);
uint x = 0, y = 0; uint x = 0, y = 0;
Utils.LongToUInts(regionHandle, out x, out y); Utils.LongToUInts(regionHandle, out x, out y);
GridRegion destination = m_scene.GridService.GetRegionByPosition(UUID.Zero, (int)x, (int)y); GridRegion destination = m_scene.GridService.GetRegionByPosition(m_regionInfo.ScopeID, (int)x, (int)y);
m_scene.SimulationService.CloseAgent(destination, agentID); m_scene.SimulationService.CloseAgent(destination, agentID);
} }

View File

@ -67,7 +67,7 @@ namespace OpenSim.Server.Handlers.Land
m_log.DebugFormat("[LAND HANDLER]: Got request for land data at {0}, {1} for region {2}", x, y, regionHandle); m_log.DebugFormat("[LAND HANDLER]: Got request for land data at {0}, {1} for region {2}", x, y, regionHandle);
byte regionAccess; byte regionAccess;
LandData landData = m_LocalService.GetLandData(regionHandle, x, y, out regionAccess); LandData landData = m_LocalService.GetLandData(UUID.Zero, regionHandle, x, y, out regionAccess);
Hashtable hash = new Hashtable(); Hashtable hash = new Hashtable();
if (landData != null) if (landData != null)
{ {

View File

@ -64,7 +64,7 @@ namespace OpenSim.Services.Connectors
m_GridService = gridServices; m_GridService = gridServices;
} }
public virtual LandData GetLandData(ulong regionHandle, uint x, uint y, out byte regionAccess) public virtual LandData GetLandData(UUID scopeID, ulong regionHandle, uint x, uint y, out byte regionAccess)
{ {
LandData landData = null; LandData landData = null;
Hashtable hash = new Hashtable(); Hashtable hash = new Hashtable();
@ -80,7 +80,7 @@ namespace OpenSim.Services.Connectors
{ {
uint xpos = 0, ypos = 0; uint xpos = 0, ypos = 0;
Utils.LongToUInts(regionHandle, out xpos, out ypos); Utils.LongToUInts(regionHandle, out xpos, out ypos);
GridRegion info = m_GridService.GetRegionByPosition(UUID.Zero, (int)xpos, (int)ypos); GridRegion info = m_GridService.GetRegionByPosition(scopeID, (int)xpos, (int)ypos);
if (info != null) // just to be sure if (info != null) // just to be sure
{ {
XmlRpcRequest request = new XmlRpcRequest("land_data", paramList); XmlRpcRequest request = new XmlRpcRequest("land_data", paramList);

View File

@ -71,7 +71,7 @@ namespace OpenSim.Services.Connectors
{ {
uint x = 0, y = 0; uint x = 0, y = 0;
Utils.LongToUInts(regionHandle, out x, out y); Utils.LongToUInts(regionHandle, out x, out y);
GridRegion regInfo = m_GridService.GetRegionByPosition(UUID.Zero, (int)x, (int)y); GridRegion regInfo = m_GridService.GetRegionByPosition(thisRegion.ScopeID, (int)x, (int)y);
if ((regInfo != null) && if ((regInfo != null) &&
// Don't remote-call this instance; that's a startup hickup // Don't remote-call this instance; that's a startup hickup
!((regInfo.ExternalHostName == thisRegion.ExternalHostName) && (regInfo.HttpPort == thisRegion.HttpPort))) !((regInfo.ExternalHostName == thisRegion.ExternalHostName) && (regInfo.HttpPort == thisRegion.HttpPort)))

View File

@ -33,6 +33,6 @@ namespace OpenSim.Services.Interfaces
{ {
public interface ILandService public interface ILandService
{ {
LandData GetLandData(ulong regionHandle, uint x, uint y, out byte regionAccess); LandData GetLandData(UUID scopeID, ulong regionHandle, uint x, uint y, out byte regionAccess);
} }
} }