Merge branch 'master' of ssh://opensimulator.org/var/git/opensim

bullet-2.82
Diva Canto 2014-05-22 10:16:19 -07:00
commit b7c7293c7a
27 changed files with 303 additions and 129 deletions

View File

@ -56,8 +56,8 @@ namespace OpenSim.Groups
private IGroupsServicesConnector m_groupData = null; private IGroupsServicesConnector m_groupData = null;
// Config Options // Config Options
private bool m_groupMessagingEnabled = false; private bool m_groupMessagingEnabled;
private bool m_debugEnabled = true; private bool m_debugEnabled;
/// <summary> /// <summary>
/// If enabled, module only tries to send group IMs to online users by querying cached presence information. /// If enabled, module only tries to send group IMs to online users by querying cached presence information.
@ -120,7 +120,7 @@ namespace OpenSim.Groups
return; return;
} }
m_debugEnabled = groupsConfig.GetBoolean("DebugEnabled", true); m_debugEnabled = groupsConfig.GetBoolean("MessagingDebugEnabled", m_debugEnabled);
m_log.InfoFormat( m_log.InfoFormat(
"[Groups.Messaging]: GroupsMessagingModule enabled with MessageOnlineOnly = {0}, DebugEnabled = {1}", "[Groups.Messaging]: GroupsMessagingModule enabled with MessageOnlineOnly = {0}, DebugEnabled = {1}",
@ -140,6 +140,14 @@ namespace OpenSim.Groups
scene.EventManager.OnMakeChildAgent += OnMakeChildAgent; scene.EventManager.OnMakeChildAgent += OnMakeChildAgent;
scene.EventManager.OnIncomingInstantMessage += OnGridInstantMessage; scene.EventManager.OnIncomingInstantMessage += OnGridInstantMessage;
scene.EventManager.OnClientLogin += OnClientLogin; scene.EventManager.OnClientLogin += OnClientLogin;
scene.AddCommand(
"Debug",
this,
"debug groups messaging verbose",
"debug groups messaging verbose <true|false>",
"This setting turns on very verbose groups messaging debugging",
HandleDebugGroupsMessagingVerbose);
} }
public void RegionLoaded(Scene scene) public void RegionLoaded(Scene scene)
@ -227,6 +235,26 @@ namespace OpenSim.Groups
#endregion #endregion
private void HandleDebugGroupsMessagingVerbose(object modules, string[] args)
{
if (args.Length < 5)
{
MainConsole.Instance.Output("Usage: debug groups messaging verbose <true|false>");
return;
}
bool verbose = false;
if (!bool.TryParse(args[4], out verbose))
{
MainConsole.Instance.Output("Usage: debug groups messaging verbose <true|false>");
return;
}
m_debugEnabled = verbose;
MainConsole.Instance.OutputFormat("{0} verbose logging set to {1}", Name, m_debugEnabled);
}
/// <summary> /// <summary>
/// Not really needed, but does confirm that the group exists. /// Not really needed, but does confirm that the group exists.
/// </summary> /// </summary>
@ -255,6 +283,8 @@ namespace OpenSim.Groups
public void SendMessageToGroup( public void SendMessageToGroup(
GridInstantMessage im, UUID groupID, UUID sendingAgentForGroupCalls, Func<GroupMembersData, bool> sendCondition) GridInstantMessage im, UUID groupID, UUID sendingAgentForGroupCalls, Func<GroupMembersData, bool> sendCondition)
{ {
int requestStartTick = Environment.TickCount;
UUID fromAgentID = new UUID(im.fromAgentID); UUID fromAgentID = new UUID(im.fromAgentID);
// Unlike current XmlRpcGroups, Groups V2 can accept UUID.Zero when a perms check for the requesting agent // Unlike current XmlRpcGroups, Groups V2 can accept UUID.Zero when a perms check for the requesting agent
@ -287,8 +317,6 @@ namespace OpenSim.Groups
// "[Groups.Messaging]: SendMessageToGroup called for group {0} with {1} visible members, {2} online", // "[Groups.Messaging]: SendMessageToGroup called for group {0} with {1} visible members, {2} online",
// groupID, groupMembersCount, groupMembers.Count()); // groupID, groupMembersCount, groupMembers.Count());
int requestStartTick = Environment.TickCount;
im.imSessionID = groupID.Guid; im.imSessionID = groupID.Guid;
im.fromGroup = true; im.fromGroup = true;
IClientAPI thisClient = GetActiveClient(fromAgentID); IClientAPI thisClient = GetActiveClient(fromAgentID);

View File

@ -104,7 +104,7 @@ namespace OpenSim.OfflineIM
using (MemoryStream mstream = new MemoryStream()) using (MemoryStream mstream = new MemoryStream())
{ {
XmlWriterSettings settings = new XmlWriterSettings(); XmlWriterSettings settings = new XmlWriterSettings();
settings.Encoding = Encoding.UTF8; settings.Encoding = Util.UTF8NoBomEncoding;
using (XmlWriter writer = XmlWriter.Create(mstream, settings)) using (XmlWriter writer = XmlWriter.Create(mstream, settings))
{ {
@ -112,7 +112,7 @@ namespace OpenSim.OfflineIM
writer.Flush(); writer.Flush();
} }
imXml = Util.UTF8.GetString(mstream.ToArray()); imXml = Util.UTF8NoBomEncoding.GetString(mstream.ToArray());
} }
OfflineIMData data = new OfflineIMData(); OfflineIMData data = new OfflineIMData();

View File

@ -321,6 +321,8 @@ namespace OpenSim.Framework
Mac = args["mac"].AsString(); Mac = args["mac"].AsString();
if (args["id0"] != null) if (args["id0"] != null)
Id0 = args["id0"].AsString(); Id0 = args["id0"].AsString();
if (args["teleport_flags"] != null)
teleportFlags = args["teleport_flags"].AsUInteger();
if (args["start_pos"] != null) if (args["start_pos"] != null)
Vector3.TryParse(args["start_pos"].AsString(), out startpos); Vector3.TryParse(args["start_pos"].AsString(), out startpos);

View File

@ -90,14 +90,14 @@ namespace OpenSim.Framework.Servers.HttpServer
} }
catch (Exception e) catch (Exception e)
{ {
m_log.Debug(string.Format("JsonRpc request '{0}' failed", method), e); m_log.Debug(string.Format("JsonRpc request '{0}' to {1} failed", method, uri), e);
return false; return false;
} }
if (!response.ContainsKey("_Result")) if (!response.ContainsKey("_Result"))
{ {
m_log.DebugFormat("JsonRpc request '{0}' returned an invalid response: {1}", m_log.DebugFormat("JsonRpc request '{0}' to {1} returned an invalid response: {2}",
method, OSDParser.SerializeJsonString(response)); method, uri, OSDParser.SerializeJsonString(response));
return false; return false;
} }
response = (OSDMap)response["_Result"]; response = (OSDMap)response["_Result"];
@ -107,15 +107,15 @@ namespace OpenSim.Framework.Servers.HttpServer
if (response.ContainsKey("error")) if (response.ContainsKey("error"))
{ {
data = response["error"]; data = response["error"];
m_log.DebugFormat("JsonRpc request '{0}' returned an error: {1}", m_log.DebugFormat("JsonRpc request '{0}' to {1} returned an error: {2}",
method, OSDParser.SerializeJsonString(data)); method, uri, OSDParser.SerializeJsonString(data));
return false; return false;
} }
if (!response.ContainsKey("result")) if (!response.ContainsKey("result"))
{ {
m_log.DebugFormat("JsonRpc request '{0}' returned an invalid response: {1}", m_log.DebugFormat("JsonRpc request '{0}' to {1} returned an invalid response: {2}",
method, OSDParser.SerializeJsonString(response)); method, uri, OSDParser.SerializeJsonString(response));
return false; return false;
} }
@ -161,14 +161,14 @@ namespace OpenSim.Framework.Servers.HttpServer
} }
catch (Exception e) catch (Exception e)
{ {
m_log.Debug(string.Format("JsonRpc request '{0}' failed", method), e); m_log.Debug(string.Format("JsonRpc request '{0}' to {1} failed", method, uri), e);
return false; return false;
} }
if (!response.ContainsKey("_Result")) if (!response.ContainsKey("_Result"))
{ {
m_log.DebugFormat("JsonRpc request '{0}' returned an invalid response: {1}", m_log.DebugFormat("JsonRpc request '{0}' to {1} returned an invalid response: {2}",
method, OSDParser.SerializeJsonString(response)); method, uri, OSDParser.SerializeJsonString(response));
return false; return false;
} }
response = (OSDMap)response["_Result"]; response = (OSDMap)response["_Result"];
@ -176,8 +176,8 @@ namespace OpenSim.Framework.Servers.HttpServer
if (response.ContainsKey("error")) if (response.ContainsKey("error"))
{ {
data = response["error"]; data = response["error"];
m_log.DebugFormat("JsonRpc request '{0}' returned an error: {1}", m_log.DebugFormat("JsonRpc request '{0}' to {1} returned an error: {2}",
method, OSDParser.SerializeJsonString(data)); method, uri, OSDParser.SerializeJsonString(data));
return false; return false;
} }

View File

@ -484,6 +484,7 @@ namespace OpenSim.Region.CoreModules.Avatar.UserProfiles
{ {
remoteClient.SendAgentAlertMessage( remoteClient.SendAgentAlertMessage(
"Error updating classified", false); "Error updating classified", false);
return;
} }
} }
@ -510,6 +511,7 @@ namespace OpenSim.Region.CoreModules.Avatar.UserProfiles
{ {
remoteClient.SendAgentAlertMessage( remoteClient.SendAgentAlertMessage(
"Error classified delete", false); "Error classified delete", false);
return;
} }
parameters = (OSDMap)Params; parameters = (OSDMap)Params;
@ -612,6 +614,7 @@ namespace OpenSim.Region.CoreModules.Avatar.UserProfiles
{ {
remoteClient.SendAgentAlertMessage( remoteClient.SendAgentAlertMessage(
"Error selecting pick", false); "Error selecting pick", false);
return;
} }
pick = (UserProfilePick) Pick; pick = (UserProfilePick) Pick;
@ -714,6 +717,7 @@ namespace OpenSim.Region.CoreModules.Avatar.UserProfiles
{ {
remoteClient.SendAgentAlertMessage( remoteClient.SendAgentAlertMessage(
"Error updating pick", false); "Error updating pick", false);
return;
} }
m_log.DebugFormat("[PROFILES]: Finish PickInfoUpdate {0} {1}", pick.Name, pick.PickId.ToString()); m_log.DebugFormat("[PROFILES]: Finish PickInfoUpdate {0} {1}", pick.Name, pick.PickId.ToString());
@ -740,6 +744,7 @@ namespace OpenSim.Region.CoreModules.Avatar.UserProfiles
{ {
remoteClient.SendAgentAlertMessage( remoteClient.SendAgentAlertMessage(
"Error picks delete", false); "Error picks delete", false);
return;
} }
} }
#endregion Picks #endregion Picks
@ -807,6 +812,8 @@ namespace OpenSim.Region.CoreModules.Avatar.UserProfiles
object Note = note; object Note = note;
if(!rpc.JsonRpcRequest(ref Note, "avatar_notes_update", serverURI, UUID.Random().ToString())) if(!rpc.JsonRpcRequest(ref Note, "avatar_notes_update", serverURI, UUID.Random().ToString()))
{ {
remoteClient.SendAgentAlertMessage(
"Error updating note", false);
return; return;
} }
} }
@ -916,6 +923,7 @@ namespace OpenSim.Region.CoreModules.Avatar.UserProfiles
{ {
remoteClient.SendAgentAlertMessage( remoteClient.SendAgentAlertMessage(
"Error updating interests", false); "Error updating interests", false);
return;
} }
} }
@ -1044,6 +1052,7 @@ namespace OpenSim.Region.CoreModules.Avatar.UserProfiles
{ {
remoteClient.SendAgentAlertMessage( remoteClient.SendAgentAlertMessage(
"Error updating properties", false); "Error updating properties", false);
return;
} }
RequestAvatarProperties(remoteClient, newProfile.ID); RequestAvatarProperties(remoteClient, newProfile.ID);

View File

@ -761,12 +761,12 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
string reason; string reason;
string version; string version;
if (!Scene.SimulationService.QueryAccess( if (!Scene.SimulationService.QueryAccess(
finalDestination, sp.ControllingClient.AgentId, homeURI, position, out version, out reason)) finalDestination, sp.ControllingClient.AgentId, homeURI, true, position, out version, out reason))
{ {
sp.ControllingClient.SendTeleportFailed(reason); sp.ControllingClient.SendTeleportFailed(reason);
m_log.DebugFormat( m_log.DebugFormat(
"[ENTITY TRANSFER MODULE]: {0} was stopped from teleporting from {1} to {2} because {3}", "[ENTITY TRANSFER MODULE]: {0} was stopped from teleporting from {1} to {2} because: {3}",
sp.Name, sp.Scene.Name, finalDestination.RegionName, reason); sp.Name, sp.Scene.Name, finalDestination.RegionName, reason);
return; return;
@ -1510,7 +1510,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
// Check to see if we have access to the target region. // Check to see if we have access to the target region.
if (neighbourRegion != null if (neighbourRegion != null
&& !scene.SimulationService.QueryAccess(neighbourRegion, agentID, homeURI, newpos, out version, out failureReason)) && !scene.SimulationService.QueryAccess(neighbourRegion, agentID, homeURI, false, newpos, out version, out failureReason))
{ {
// remember banned // remember banned
m_bannedRegionCache.Add(neighbourRegion.RegionHandle, agentID); m_bannedRegionCache.Add(neighbourRegion.RegionHandle, agentID);

View File

@ -311,9 +311,6 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
SceneObjectGroup sog = base.RezObject(remoteClient, itemID, RayEnd, RayStart, RayTargetID, BypassRayCast, RayEndIsIntersection, SceneObjectGroup sog = base.RezObject(remoteClient, itemID, RayEnd, RayStart, RayTargetID, BypassRayCast, RayEndIsIntersection,
RezSelected, RemoveItem, fromTaskID, attachment); RezSelected, RemoveItem, fromTaskID, attachment);
if (sog == null)
remoteClient.SendAgentAlertMessage("Unable to rez: problem accessing inventory or locating assets", false);
return sog; return sog;
} }

View File

@ -797,12 +797,14 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
m_log.WarnFormat( m_log.WarnFormat(
"[InventoryAccessModule]: Could not find asset {0} for item {1} {2} for {3} in RezObject()", "[InventoryAccessModule]: Could not find asset {0} for item {1} {2} for {3} in RezObject()",
assetID, item.Name, item.ID, remoteClient.Name); assetID, item.Name, item.ID, remoteClient.Name);
remoteClient.SendAgentAlertMessage(string.Format("Unable to rez: could not find asset {0} for item {1}.", assetID, item.Name), false);
} }
else else
{ {
m_log.WarnFormat( m_log.WarnFormat(
"[INVENTORY ACCESS MODULE]: Could not find asset {0} for {1} in RezObject()", "[INVENTORY ACCESS MODULE]: Could not find asset {0} for {1} in RezObject()",
assetID, remoteClient.Name); assetID, remoteClient.Name);
remoteClient.SendAgentAlertMessage(string.Format("Unable to rez: could not find asset {0}.", assetID), false);
} }
return null; return null;

View File

@ -89,35 +89,43 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Authorization
public bool IsAuthorizedForRegion( public bool IsAuthorizedForRegion(
string user, string firstName, string lastName, string regionID, out string message) string user, string firstName, string lastName, string regionID, out string message)
{ {
message = "authorized";
// This should not happen // This should not happen
if (m_Scene.RegionInfo.RegionID.ToString() != regionID) if (m_Scene.RegionInfo.RegionID.ToString() != regionID)
{ {
m_log.WarnFormat("[AuthorizationService]: Service for region {0} received request to authorize for region {1}", m_log.WarnFormat("[AuthorizationService]: Service for region {0} received request to authorize for region {1}",
m_Scene.RegionInfo.RegionID, regionID); m_Scene.RegionInfo.RegionID, regionID);
return true; message = string.Format("Region {0} received request to authorize for region {1}", m_Scene.RegionInfo.RegionID, regionID);
return false;
} }
if (m_accessValue == AccessFlags.None) if (m_accessValue == AccessFlags.None)
{
message = "Authorized";
return true; return true;
}
UUID userID = new UUID(user); UUID userID = new UUID(user);
bool authorized = true;
if ((m_accessValue & AccessFlags.DisallowForeigners) == AccessFlags.DisallowForeigners) if ((m_accessValue & AccessFlags.DisallowForeigners) != 0)
{ {
authorized = m_UserManagement.IsLocalGridUser(userID); if (!m_UserManagement.IsLocalGridUser(userID))
if (!authorized) {
message = "no foreigner users allowed in this region"; message = "No foreign users allowed in this region";
return false;
} }
if (authorized && (m_accessValue & AccessFlags.DisallowResidents) == AccessFlags.DisallowResidents)
{
authorized = m_Scene.Permissions.IsGod(userID) | m_Scene.Permissions.IsAdministrator(userID);
if (!authorized)
message = "only Admins and Managers allowed in this region";
} }
return authorized; if ((m_accessValue & AccessFlags.DisallowResidents) != 0)
{
if (!(m_Scene.Permissions.IsGod(userID) || m_Scene.Permissions.IsAdministrator(userID)))
{
message = "Only Admins and Managers allowed in this region";
return false;
}
}
message = "Authorized";
return true;
} }
} }

View File

@ -264,7 +264,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Simulation
return true; return true;
} }
public bool QueryAccess(GridRegion destination, UUID agentID, string agentHomeURI, Vector3 position, out string version, out string reason) public bool QueryAccess(GridRegion destination, UUID agentID, string agentHomeURI, bool viaTeleport, Vector3 position, out string version, out string reason)
{ {
reason = "Communications failure"; reason = "Communications failure";
version = ServiceVersion; version = ServiceVersion;
@ -277,7 +277,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Simulation
// "[LOCAL SIMULATION CONNECTOR]: Found region {0} {1} to send AgentUpdate", // "[LOCAL SIMULATION CONNECTOR]: Found region {0} {1} to send AgentUpdate",
// s.RegionInfo.RegionName, destination.RegionHandle); // s.RegionInfo.RegionName, destination.RegionHandle);
return m_scenes[destination.RegionID].QueryAccess(agentID, agentHomeURI, position, out reason); return m_scenes[destination.RegionID].QueryAccess(agentID, agentHomeURI, viaTeleport, position, out reason);
} }
//m_log.Debug("[LOCAL COMMS]: region not found for QueryAccess"); //m_log.Debug("[LOCAL COMMS]: region not found for QueryAccess");

View File

@ -207,7 +207,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Simulation
return m_remoteConnector.UpdateAgent(destination, cAgentData); return m_remoteConnector.UpdateAgent(destination, cAgentData);
} }
public bool QueryAccess(GridRegion destination, UUID agentID, string agentHomeURI, Vector3 position, out string version, out string reason) public bool QueryAccess(GridRegion destination, UUID agentID, string agentHomeURI, bool viaTeleport, Vector3 position, out string version, out string reason)
{ {
reason = "Communications failure"; reason = "Communications failure";
version = "Unknown"; version = "Unknown";
@ -216,12 +216,12 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Simulation
return false; return false;
// Try local first // Try local first
if (m_localBackend.QueryAccess(destination, agentID, agentHomeURI, position, out version, out reason)) if (m_localBackend.QueryAccess(destination, agentID, agentHomeURI, viaTeleport, position, out version, out reason))
return true; return true;
// else do the remote thing // else do the remote thing
if (!m_localBackend.IsLocalRegion(destination.RegionID)) if (!m_localBackend.IsLocalRegion(destination.RegionID))
return m_remoteConnector.QueryAccess(destination, agentID, agentHomeURI, position, out version, out reason); return m_remoteConnector.QueryAccess(destination, agentID, agentHomeURI, viaTeleport, position, out version, out reason);
return false; return false;
} }

View File

@ -143,8 +143,11 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
} }
//m_log.DebugFormat("MAP NAME=({0})", mapName); List<GridRegion> regionInfos = m_scene.GridService.GetRegionsByName(m_scene.RegionInfo.ScopeID, mapName, 20);
string mapNameOrig = mapName;
if (regionInfos.Count == 0)
{
// Hack to get around the fact that ll V3 now drops the port from the // Hack to get around the fact that ll V3 now drops the port from the
// map name. See https://jira.secondlife.com/browse/VWR-28570 // map name. See https://jira.secondlife.com/browse/VWR-28570
// //
@ -153,7 +156,6 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
// or url encode if possible. // or url encode if possible.
// the hacks we do with this viewer... // the hacks we do with this viewer...
// //
string mapNameOrig = mapName;
if (mapName.Contains("|")) if (mapName.Contains("|"))
mapName = mapName.Replace('|', ':'); mapName = mapName.Replace('|', ':');
if (mapName.Contains("+")) if (mapName.Contains("+"))
@ -161,10 +163,12 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
if (mapName.Contains("!")) if (mapName.Contains("!"))
mapName = mapName.Replace('!', '/'); mapName = mapName.Replace('!', '/');
// try to fetch from GridServer if (mapName != mapNameOrig)
List<GridRegion> regionInfos = m_scene.GridService.GetRegionsByName(m_scene.RegionInfo.ScopeID, mapName, 20); regionInfos = m_scene.GridService.GetRegionsByName(m_scene.RegionInfo.ScopeID, mapName, 20);
}
m_log.DebugFormat("[MAPSEARCHMODULE]: search {0} returned {1} regions. Flags={2}", mapName, regionInfos.Count, flags); m_log.DebugFormat("[MAPSEARCHMODULE]: search {0} returned {1} regions. Flags={2}", mapName, regionInfos.Count, flags);
if (regionInfos.Count > 0) if (regionInfos.Count > 0)
{ {
foreach (GridRegion info in regionInfos) foreach (GridRegion info in regionInfos)
@ -178,7 +182,7 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
data.MapImageId = info.TerrainImage; data.MapImageId = info.TerrainImage;
// ugh! V2-3 is very sensitive about the result being // ugh! V2-3 is very sensitive about the result being
// exactly the same as the requested name // exactly the same as the requested name
if (regionInfos.Count == 1 && mapNameOrig.Contains("|") || mapNameOrig.Contains("+")) if (regionInfos.Count == 1 && (mapName != mapNameOrig))
data.Name = mapNameOrig; data.Name = mapNameOrig;
else else
data.Name = info.RegionName; data.Name = info.RegionName;

View File

@ -3865,7 +3865,7 @@ namespace OpenSim.Region.Framework.Scenes
if (!AuthorizationService.IsAuthorizedForRegion( if (!AuthorizationService.IsAuthorizedForRegion(
agent.AgentID.ToString(), agent.firstname, agent.lastname, RegionInfo.RegionID.ToString(), out reason)) agent.AgentID.ToString(), agent.firstname, agent.lastname, RegionInfo.RegionID.ToString(), out reason))
{ {
m_log.WarnFormat("[CONNECTION BEGIN]: Denied access to: {0} ({1} {2}) at {3} because {4}", m_log.WarnFormat("[CONNECTION BEGIN]: Denied access to: {0} ({1} {2}) at {3} because: {4}",
agent.AgentID, agent.firstname, agent.lastname, RegionInfo.RegionName, reason); agent.AgentID, agent.firstname, agent.lastname, RegionInfo.RegionName, reason);
return false; return false;
@ -5463,9 +5463,9 @@ namespace OpenSim.Region.Framework.Scenes
/// <param name='position'></param> /// <param name='position'></param>
/// <param name='reason'></param> /// <param name='reason'></param>
/// <returns></returns> /// <returns></returns>
public bool QueryAccess(UUID agentID, string agentHomeURI, Vector3 position, out string reason) public bool QueryAccess(UUID agentID, string agentHomeURI, bool viaTeleport, Vector3 position, out string reason)
{ {
reason = "You are banned from the region"; reason = string.Empty;
if (Permissions.IsGod(agentID)) if (Permissions.IsGod(agentID))
{ {
@ -5525,10 +5525,11 @@ namespace OpenSim.Region.Framework.Scenes
catch (Exception e) catch (Exception e)
{ {
m_log.DebugFormat("[SCENE]: Exception authorizing agent: {0} "+ e.StackTrace, e.Message); m_log.DebugFormat("[SCENE]: Exception authorizing agent: {0} "+ e.StackTrace, e.Message);
reason = "Error authorizing agent: " + e.Message;
return false; return false;
} }
if (position == Vector3.Zero) // Teleport if (viaTeleport)
{ {
if (!RegionInfo.EstateSettings.AllowDirectTeleport) if (!RegionInfo.EstateSettings.AllowDirectTeleport)
{ {
@ -5568,6 +5569,7 @@ namespace OpenSim.Region.Framework.Scenes
if (!TestLandRestrictions(agentID, out reason, ref posX, ref posY)) if (!TestLandRestrictions(agentID, out reason, ref posX, ref posY))
{ {
// m_log.DebugFormat("[SCENE]: Denying {0} because they are banned on all parcels", agentID); // m_log.DebugFormat("[SCENE]: Denying {0} because they are banned on all parcels", agentID);
reason = "You are banned from the region on all parcels";
return false; return false;
} }
} }
@ -5575,14 +5577,23 @@ namespace OpenSim.Region.Framework.Scenes
{ {
ILandObject land = LandChannel.GetLandObject(position.X, position.Y); ILandObject land = LandChannel.GetLandObject(position.X, position.Y);
if (land == null) if (land == null)
{
reason = "No parcel found";
return false; return false;
}
bool banned = land.IsBannedFromLand(agentID); bool banned = land.IsBannedFromLand(agentID);
bool restricted = land.IsRestrictedFromLand(agentID); bool restricted = land.IsRestrictedFromLand(agentID);
if (banned || restricted) if (banned || restricted)
{
if (banned)
reason = "You are banned from the parcel";
else
reason = "The parcel is restricted";
return false; return false;
} }
}
reason = String.Empty; reason = String.Empty;
return true; return true;

View File

@ -751,7 +751,7 @@ namespace OpenSim.Region.Framework.Scenes
Vector3 bbox; Vector3 bbox;
float offsetHeight; float offsetHeight;
bool single = m_part.ParentGroup.Scene.GetObjectsToRez(rezAsset.Data, false, out objlist, out veclist, out bbox, out offsetHeight); m_part.ParentGroup.Scene.GetObjectsToRez(rezAsset.Data, false, out objlist, out veclist, out bbox, out offsetHeight);
for (int i = 0; i < objlist.Count; i++) for (int i = 0; i < objlist.Count; i++)
{ {

View File

@ -208,7 +208,6 @@ namespace OpenSim.Region.Framework.Scenes
// private int m_lastColCount = -1; //KF: Look for Collision chnages // private int m_lastColCount = -1; //KF: Look for Collision chnages
// private int m_updateCount = 0; //KF: Update Anims for a while // private int m_updateCount = 0; //KF: Update Anims for a while
// private static readonly int UPDATE_COUNT = 10; // how many frames to update for // private static readonly int UPDATE_COUNT = 10; // how many frames to update for
private List<uint> m_lastColliders = new List<uint>();
private TeleportFlags m_teleportFlags; private TeleportFlags m_teleportFlags;
public TeleportFlags TeleportFlags public TeleportFlags TeleportFlags
@ -271,8 +270,6 @@ namespace OpenSim.Region.Framework.Scenes
//private int m_moveToPositionStateStatus; //private int m_moveToPositionStateStatus;
//***************************************************** //*****************************************************
private object m_collisionEventLock = new Object();
private int m_movementAnimationUpdateCounter = 0; private int m_movementAnimationUpdateCounter = 0;
public Vector3 PrevSitOffset { get; set; } public Vector3 PrevSitOffset { get; set; }
@ -3777,10 +3774,15 @@ namespace OpenSim.Region.Framework.Scenes
if (!IsChildAgent) if (!IsChildAgent)
return; return;
//m_log.Debug(" >>> ChildAgentPositionUpdate <<< " + rRegionX + "-" + rRegionY); // m_log.DebugFormat(
// "[SCENE PRESENCE]: ChildAgentPositionUpdate for {0} in {1}, tRegion {2},{3}, rRegion {4},{5}, pos {6}",
// Name, Scene.Name, tRegionX, tRegionY, rRegionX, rRegionY, cAgentData.Position);
// Find the distance (in meters) between the two regions // Find the distance (in meters) between the two regions
uint shiftx = Util.RegionToWorldLoc(rRegionX - tRegionX); // XXX: We cannot use Util.RegionLocToHandle() here because a negative value will silently overflow the
uint shifty = Util.RegionToWorldLoc(rRegionY - tRegionY); // uint
int shiftx = (int)(((int)rRegionX - (int)tRegionX) * Constants.RegionSize);
int shifty = (int)(((int)rRegionY - (int)tRegionY) * Constants.RegionSize);
Vector3 offset = new Vector3(shiftx, shifty, 0f); Vector3 offset = new Vector3(shiftx, shifty, 0f);

View File

@ -45,7 +45,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
{ {
public static class OpenSimTerrainCompressor public static class OpenSimTerrainCompressor
{ {
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); // private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
#pragma warning disable 414 #pragma warning disable 414
private static string LogHeader = "[TERRAIN COMPRESSOR]"; private static string LogHeader = "[TERRAIN COMPRESSOR]";

View File

@ -55,8 +55,8 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
private IGroupsServicesConnector m_groupData = null; private IGroupsServicesConnector m_groupData = null;
// Config Options // Config Options
private bool m_groupMessagingEnabled = false; private bool m_groupMessagingEnabled;
private bool m_debugEnabled = true; private bool m_debugEnabled;
/// <summary> /// <summary>
/// If enabled, module only tries to send group IMs to online users by querying cached presence information. /// If enabled, module only tries to send group IMs to online users by querying cached presence information.
@ -113,7 +113,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
if (m_messageOnlineAgentsOnly) if (m_messageOnlineAgentsOnly)
m_usersOnlineCache = new ExpiringCache<UUID, PresenceInfo[]>(); m_usersOnlineCache = new ExpiringCache<UUID, PresenceInfo[]>();
m_debugEnabled = groupsConfig.GetBoolean("DebugEnabled", true); m_debugEnabled = groupsConfig.GetBoolean("MessagingDebugEnabled", m_debugEnabled);
} }
m_log.InfoFormat( m_log.InfoFormat(
@ -127,6 +127,14 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
return; return;
scene.RegisterModuleInterface<IGroupsMessagingModule>(this); scene.RegisterModuleInterface<IGroupsMessagingModule>(this);
scene.AddCommand(
"Debug",
this,
"debug groups messaging verbose",
"debug groups messaging verbose <true|false>",
"This setting turns on very verbose groups messaging debugging",
HandleDebugGroupsMessagingVerbose);
} }
public void RegionLoaded(Scene scene) public void RegionLoaded(Scene scene)
@ -218,6 +226,26 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
#endregion #endregion
private void HandleDebugGroupsMessagingVerbose(object modules, string[] args)
{
if (args.Length < 5)
{
MainConsole.Instance.Output("Usage: debug groups messaging verbose <true|false>");
return;
}
bool verbose = false;
if (!bool.TryParse(args[4], out verbose))
{
MainConsole.Instance.Output("Usage: debug groups messaging verbose <true|false>");
return;
}
m_debugEnabled = verbose;
MainConsole.Instance.OutputFormat("{0} verbose logging set to {1}", Name, m_debugEnabled);
}
/// <summary> /// <summary>
/// Not really needed, but does confirm that the group exists. /// Not really needed, but does confirm that the group exists.
/// </summary> /// </summary>
@ -246,6 +274,8 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
public void SendMessageToGroup( public void SendMessageToGroup(
GridInstantMessage im, UUID groupID, UUID sendingAgentForGroupCalls, Func<GroupMembersData, bool> sendCondition) GridInstantMessage im, UUID groupID, UUID sendingAgentForGroupCalls, Func<GroupMembersData, bool> sendCondition)
{ {
int requestStartTick = Environment.TickCount;
List<GroupMembersData> groupMembers = m_groupData.GetGroupMembers(sendingAgentForGroupCalls, groupID); List<GroupMembersData> groupMembers = m_groupData.GetGroupMembers(sendingAgentForGroupCalls, groupID);
int groupMembersCount = groupMembers.Count; int groupMembersCount = groupMembers.Count;
HashSet<string> attemptDeliveryUuidSet = null; HashSet<string> attemptDeliveryUuidSet = null;
@ -287,8 +317,6 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
groupID, groupMembers.Count); groupID, groupMembers.Count);
} }
int requestStartTick = Environment.TickCount;
foreach (GroupMembersData member in groupMembers) foreach (GroupMembersData member in groupMembers)
{ {
if (sendCondition != null) if (sendCondition != null)
@ -315,7 +343,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
// Copy Message // Copy Message
GridInstantMessage msg = new GridInstantMessage(); GridInstantMessage msg = new GridInstantMessage();
msg.imSessionID = groupID.Guid; msg.imSessionID = im.imSessionID;
msg.fromAgentName = im.fromAgentName; msg.fromAgentName = im.fromAgentName;
msg.message = im.message; msg.message = im.message;
msg.dialog = im.dialog; msg.dialog = im.dialog;
@ -336,27 +364,45 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
IClientAPI client = GetActiveClient(member.AgentID); IClientAPI client = GetActiveClient(member.AgentID);
if (client == null) if (client == null)
{ {
int startTick = Environment.TickCount;
// If they're not local, forward across the grid // If they're not local, forward across the grid
if (m_debugEnabled) m_log.DebugFormat("[GROUPS-MESSAGING]: Delivering to {0} via Grid", member.AgentID);
m_msgTransferModule.SendInstantMessage(msg, delegate(bool success) { }); m_msgTransferModule.SendInstantMessage(msg, delegate(bool success) { });
if (m_debugEnabled)
m_log.DebugFormat(
"[GROUPS-MESSAGING]: Delivering to {0} via grid took {1} ms",
member.AgentID, Environment.TickCount - startTick);
} }
else else
{ {
// Deliver locally, directly int startTick = Environment.TickCount;
if (m_debugEnabled) m_log.DebugFormat("[GROUPS-MESSAGING]: Passing to ProcessMessageFromGroupSession to deliver to {0} locally", client.Name);
ProcessMessageFromGroupSession(msg, client); ProcessMessageFromGroupSession(msg, client);
// Deliver locally, directly
if (m_debugEnabled)
m_log.DebugFormat(
"[GROUPS-MESSAGING]: Delivering to {0} locally took {1} ms",
member.AgentID, Environment.TickCount - startTick);
} }
} }
else else
{ {
int startTick = Environment.TickCount;
m_msgTransferModule.HandleUndeliverableMessage(msg, delegate(bool success) { }); m_msgTransferModule.HandleUndeliverableMessage(msg, delegate(bool success) { });
if (m_debugEnabled)
m_log.DebugFormat(
"[GROUPS-MESSAGING]: Handling undeliverable message for {0} took {1} ms",
member.AgentID, Environment.TickCount - startTick);
} }
} }
// Temporary for assessing how long it still takes to send messages to large online groups. if (m_debugEnabled)
if (m_messageOnlineAgentsOnly)
m_log.DebugFormat( m_log.DebugFormat(
"[GROUPS-MESSAGING]: SendMessageToGroup for group {0} with {1} members, {2} candidates for delivery took {3}ms", "[GROUPS-MESSAGING]: Total SendMessageToGroup for group {0} with {1} members, {2} candidates for delivery took {3} ms",
groupID, groupMembersCount, attemptDeliveryUuidSet.Count(), Environment.TickCount - requestStartTick); groupID, groupMembersCount, attemptDeliveryUuidSet.Count(), Environment.TickCount - requestStartTick);
} }
@ -420,7 +466,10 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
private void ProcessMessageFromGroupSession(GridInstantMessage msg, IClientAPI client) private void ProcessMessageFromGroupSession(GridInstantMessage msg, IClientAPI client)
{ {
if (m_debugEnabled) m_log.DebugFormat("[GROUPS-MESSAGING]: Session message from {0} going to agent {1}", msg.fromAgentName, msg.toAgentID); if (m_debugEnabled)
m_log.DebugFormat(
"[GROUPS-MESSAGING]: Session message from {0} going to agent {1}, sessionID {2}, type {3}",
msg.fromAgentName, msg.toAgentID, msg.imSessionID, (InstantMessageDialog)msg.dialog);
UUID AgentID = new UUID(msg.fromAgentID); UUID AgentID = new UUID(msg.fromAgentID);
UUID GroupID = new UUID(msg.imSessionID); UUID GroupID = new UUID(msg.imSessionID);
@ -588,15 +637,15 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
// Don't log any normal IMs (privacy!) // Don't log any normal IMs (privacy!)
if (m_debugEnabled && im.dialog != (byte)InstantMessageDialog.MessageFromAgent) if (m_debugEnabled && im.dialog != (byte)InstantMessageDialog.MessageFromAgent)
{ {
m_log.WarnFormat("[GROUPS-MESSAGING]: IM: fromGroup({0})", im.fromGroup ? "True" : "False"); m_log.DebugFormat("[GROUPS-MESSAGING]: IM: fromGroup({0})", im.fromGroup ? "True" : "False");
m_log.WarnFormat("[GROUPS-MESSAGING]: IM: Dialog({0})", (InstantMessageDialog)im.dialog); m_log.DebugFormat("[GROUPS-MESSAGING]: IM: Dialog({0})", (InstantMessageDialog)im.dialog);
m_log.WarnFormat("[GROUPS-MESSAGING]: IM: fromAgentID({0})", im.fromAgentID); m_log.DebugFormat("[GROUPS-MESSAGING]: IM: fromAgentID({0})", im.fromAgentID);
m_log.WarnFormat("[GROUPS-MESSAGING]: IM: fromAgentName({0})", im.fromAgentName); m_log.DebugFormat("[GROUPS-MESSAGING]: IM: fromAgentName({0})", im.fromAgentName);
m_log.WarnFormat("[GROUPS-MESSAGING]: IM: imSessionID({0})", im.imSessionID); m_log.DebugFormat("[GROUPS-MESSAGING]: IM: imSessionID({0})", im.imSessionID);
m_log.WarnFormat("[GROUPS-MESSAGING]: IM: message({0})", im.message); m_log.DebugFormat("[GROUPS-MESSAGING]: IM: message({0})", im.message);
m_log.WarnFormat("[GROUPS-MESSAGING]: IM: offline({0})", im.offline); m_log.DebugFormat("[GROUPS-MESSAGING]: IM: offline({0})", im.offline);
m_log.WarnFormat("[GROUPS-MESSAGING]: IM: toAgentID({0})", im.toAgentID); m_log.DebugFormat("[GROUPS-MESSAGING]: IM: toAgentID({0})", im.toAgentID);
m_log.WarnFormat("[GROUPS-MESSAGING]: IM: binaryBucket({0})", OpenMetaverse.Utils.BytesToHexString(im.binaryBucket, "BinaryBucket")); m_log.DebugFormat("[GROUPS-MESSAGING]: IM: binaryBucket({0})", OpenMetaverse.Utils.BytesToHexString(im.binaryBucket, "BinaryBucket"));
} }
} }
@ -607,7 +656,8 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
/// </summary> /// </summary>
private IClientAPI GetActiveClient(UUID agentID) private IClientAPI GetActiveClient(UUID agentID)
{ {
if (m_debugEnabled) m_log.WarnFormat("[GROUPS-MESSAGING]: Looking for local client {0}", agentID); if (m_debugEnabled)
m_log.DebugFormat("[GROUPS-MESSAGING]: Looking for local client {0}", agentID);
IClientAPI child = null; IClientAPI child = null;
@ -619,12 +669,16 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
{ {
if (!sp.IsChildAgent) if (!sp.IsChildAgent)
{ {
if (m_debugEnabled) m_log.WarnFormat("[GROUPS-MESSAGING]: Found root agent for client : {0}", sp.ControllingClient.Name); if (m_debugEnabled)
m_log.DebugFormat("[GROUPS-MESSAGING]: Found root agent for client : {0}", sp.ControllingClient.Name);
return sp.ControllingClient; return sp.ControllingClient;
} }
else else
{ {
if (m_debugEnabled) m_log.WarnFormat("[GROUPS-MESSAGING]: Found child agent for client : {0}", sp.ControllingClient.Name); if (m_debugEnabled)
m_log.DebugFormat("[GROUPS-MESSAGING]: Found child agent for client : {0}", sp.ControllingClient.Name);
child = sp.ControllingClient; child = sp.ControllingClient;
} }
} }
@ -633,12 +687,15 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
// If we didn't find a root, then just return whichever child we found, or null if none // If we didn't find a root, then just return whichever child we found, or null if none
if (child == null) if (child == null)
{ {
if (m_debugEnabled) m_log.WarnFormat("[GROUPS-MESSAGING]: Could not find local client for agent : {0}", agentID); if (m_debugEnabled)
m_log.DebugFormat("[GROUPS-MESSAGING]: Could not find local client for agent : {0}", agentID);
} }
else else
{ {
if (m_debugEnabled) m_log.WarnFormat("[GROUPS-MESSAGING]: Returning child agent for client : {0}", child.Name); if (m_debugEnabled)
m_log.DebugFormat("[GROUPS-MESSAGING]: Returning child agent for client : {0}", child.Name);
} }
return child; return child;
} }

View File

@ -357,7 +357,10 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
private void OnInstantMessage(IClientAPI remoteClient, GridInstantMessage im) private void OnInstantMessage(IClientAPI remoteClient, GridInstantMessage im)
{ {
if (m_debugEnabled) m_log.DebugFormat("[GROUPS]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); if (m_debugEnabled)
m_log.DebugFormat(
"[GROUPS]: {0} called for {1}, message type {2}",
System.Reflection.MethodBase.GetCurrentMethod().Name, remoteClient.Name, (InstantMessageDialog)im.dialog);
// Group invitations // Group invitations
if ((im.dialog == (byte)InstantMessageDialog.GroupInvitationAccept) || (im.dialog == (byte)InstantMessageDialog.GroupInvitationDecline)) if ((im.dialog == (byte)InstantMessageDialog.GroupInvitationAccept) || (im.dialog == (byte)InstantMessageDialog.GroupInvitationDecline))
@ -551,6 +554,9 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
UUID noticeID = new UUID(im.imSessionID); UUID noticeID = new UUID(im.imSessionID);
if (m_debugEnabled)
m_log.DebugFormat("[GROUPS]: Requesting notice {0} for {1}", noticeID, remoteClient.AgentId);
GroupNoticeInfo notice = m_groupData.GetGroupNotice(GetRequestingAgentID(remoteClient), noticeID); GroupNoticeInfo notice = m_groupData.GetGroupNotice(GetRequestingAgentID(remoteClient), noticeID);
if (notice != null) if (notice != null)
{ {
@ -572,6 +578,13 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
remoteClient.SendInventoryItemCreateUpdate(itemCopy, 0); remoteClient.SendInventoryItemCreateUpdate(itemCopy, 0);
} }
else
{
if (m_debugEnabled)
m_log.DebugFormat(
"[GROUPS]: Could not find notice {0} for {1} on GroupNoticeInventoryAccepted.",
noticeID, remoteClient.AgentId);
}
} }
// Interop, received special 210 code for ejecting a group member // Interop, received special 210 code for ejecting a group member

View File

@ -132,6 +132,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups.Tests
MessageTransferModule mtm = new MessageTransferModule(); MessageTransferModule mtm = new MessageTransferModule();
GroupsModule gm = new GroupsModule(); GroupsModule gm = new GroupsModule();
GroupsMessagingModule gmm = new GroupsMessagingModule(); GroupsMessagingModule gmm = new GroupsMessagingModule();
MockGroupsServicesConnector mgsc = new MockGroupsServicesConnector();
IConfigSource configSource = new IniConfigSource(); IConfigSource configSource = new IniConfigSource();
@ -149,7 +150,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups.Tests
config.Set("MessagingEnabled", true); config.Set("MessagingEnabled", true);
} }
SceneHelpers.SetupSceneModules(scene, configSource, new MockGroupsServicesConnector(), mtm, gm, gmm); SceneHelpers.SetupSceneModules(scene, configSource, mgsc, mtm, gm, gmm);
UUID userId = TestHelpers.ParseTail(0x1); UUID userId = TestHelpers.ParseTail(0x1);
string subjectText = "newman"; string subjectText = "newman";
@ -185,6 +186,12 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups.Tests
Assert.That(spReceivedMessages.Count, Is.EqualTo(1)); Assert.That(spReceivedMessages.Count, Is.EqualTo(1));
Assert.That(spReceivedMessages[0].message, Is.EqualTo(combinedSubjectMessage)); Assert.That(spReceivedMessages[0].message, Is.EqualTo(combinedSubjectMessage));
List<GroupNoticeData> notices = mgsc.GetGroupNotices(UUID.Zero, groupID);
Assert.AreEqual(1, notices.Count);
// OpenSimulator (possibly also SL) transport the notice ID as the session ID!
Assert.AreEqual(notices[0].NoticeID.Guid, spReceivedMessages[0].imSessionID);
Assert.That(sp2ReceivedMessages.Count, Is.EqualTo(0)); Assert.That(sp2ReceivedMessages.Count, Is.EqualTo(0));
} }

View File

@ -132,6 +132,10 @@ namespace OpenSim.Server.Handlers.Simulation
// m_log.DebugFormat("[AGENT HANDLER]: Received QUERYACCESS with {0}", (string)request["body"]); // m_log.DebugFormat("[AGENT HANDLER]: Received QUERYACCESS with {0}", (string)request["body"]);
OSDMap args = Utils.GetOSDMap((string)request["body"]); OSDMap args = Utils.GetOSDMap((string)request["body"]);
bool viaTeleport = true;
if (args.ContainsKey("viaTeleport"))
viaTeleport = args["viaTeleport"].AsBoolean();
Vector3 position = Vector3.Zero; Vector3 position = Vector3.Zero;
if (args.ContainsKey("position")) if (args.ContainsKey("position"))
position = Vector3.Parse(args["position"].AsString()); position = Vector3.Parse(args["position"].AsString());
@ -145,7 +149,7 @@ namespace OpenSim.Server.Handlers.Simulation
string reason; string reason;
string version; string version;
bool result = m_SimulationService.QueryAccess(destination, agentID, agentHomeURI, position, out version, out reason); bool result = m_SimulationService.QueryAccess(destination, agentID, agentHomeURI, viaTeleport, position, out version, out reason);
responsedata["int_response_code"] = HttpStatusCode.OK; responsedata["int_response_code"] = HttpStatusCode.OK;

View File

@ -105,7 +105,7 @@ namespace OpenSim.Services.Connectors
catch (Exception e) catch (Exception e)
{ {
m_log.WarnFormat("[AUTHORIZATION CONNECTOR]: Unable to send authorize {0} for region {1} error thrown during comms with remote server. Reason: {2}", userID, regionID, e.Message); m_log.WarnFormat("[AUTHORIZATION CONNECTOR]: Unable to send authorize {0} for region {1} error thrown during comms with remote server. Reason: {2}", userID, regionID, e.Message);
message = ""; message = e.Message;
return m_ResponseOnFailure; return m_ResponseOnFailure;
} }
if (response == null) if (response == null)

View File

@ -282,7 +282,7 @@ namespace OpenSim.Services.Connectors.Simulation
} }
public bool QueryAccess(GridRegion destination, UUID agentID, string agentHomeURI, Vector3 position, out string version, out string reason) public bool QueryAccess(GridRegion destination, UUID agentID, string agentHomeURI, bool viaTeleport, Vector3 position, out string version, out string reason)
{ {
reason = "Failed to contact destination"; reason = "Failed to contact destination";
version = "Unknown"; version = "Unknown";
@ -296,6 +296,7 @@ namespace OpenSim.Services.Connectors.Simulation
string uri = destination.ServerURI + AgentPath() + agentID + "/" + destination.RegionID.ToString() + "/"; string uri = destination.ServerURI + AgentPath() + agentID + "/" + destination.RegionID.ToString() + "/";
OSDMap request = new OSDMap(); OSDMap request = new OSDMap();
request.Add("viaTeleport", OSD.FromBoolean(viaTeleport));
request.Add("position", OSD.FromString(position.ToString())); request.Add("position", OSD.FromString(position.ToString()));
if (agentHomeURI != null) if (agentHomeURI != null)
request.Add("agent_home_uri", OSD.FromString(agentHomeURI)); request.Add("agent_home_uri", OSD.FromString(agentHomeURI));

View File

@ -249,7 +249,7 @@ namespace OpenSim.Services.HypergridService
if (!IsWithinSuitcaseTree(principalID, folderID)) if (!IsWithinSuitcaseTree(principalID, folderID))
{ {
m_log.DebugFormat("[HG SUITCASE INVENTORY SERVICE]: GetFolderContent: folder {0} is not within Suitcase tree", folderID); m_log.DebugFormat("[HG SUITCASE INVENTORY SERVICE]: GetFolderContent: folder {0} (user {1}) is not within Suitcase tree", folderID, principalID);
return new InventoryCollection(); return new InventoryCollection();
} }
@ -269,7 +269,7 @@ namespace OpenSim.Services.HypergridService
// make sure the given folder exists under the suitcase tree of this user // make sure the given folder exists under the suitcase tree of this user
if (!IsWithinSuitcaseTree(principalID, folderID)) if (!IsWithinSuitcaseTree(principalID, folderID))
{ {
m_log.DebugFormat("[HG SUITCASE INVENTORY SERVICE]: GetFolderItems: folder {0} is not within Suitcase tree", folderID); m_log.DebugFormat("[HG SUITCASE INVENTORY SERVICE]: GetFolderItems: folder {0} (user {1}) is not within Suitcase tree", folderID, principalID);
return new List<InventoryItemBase>(); return new List<InventoryItemBase>();
} }
@ -284,7 +284,7 @@ namespace OpenSim.Services.HypergridService
if (!IsWithinSuitcaseTree(folder.Owner, folder.ParentID)) if (!IsWithinSuitcaseTree(folder.Owner, folder.ParentID))
{ {
m_log.DebugFormat("[HG SUITCASE INVENTORY SERVICE]: AddFolder: folder {0} is not within Suitcase tree", folder.ParentID); m_log.DebugFormat("[HG SUITCASE INVENTORY SERVICE]: AddFolder: folder {0} (user {1}) is not within Suitcase tree", folder.ParentID, folder.Owner);
return false; return false;
} }
@ -306,7 +306,7 @@ namespace OpenSim.Services.HypergridService
//m_log.DebugFormat("[HG SUITCASE INVENTORY SERVICE]: Update folder {0}, version {1}", folder.ID, folder.Version); //m_log.DebugFormat("[HG SUITCASE INVENTORY SERVICE]: Update folder {0}, version {1}", folder.ID, folder.Version);
if (!IsWithinSuitcaseTree(folder.Owner, folder.ID)) if (!IsWithinSuitcaseTree(folder.Owner, folder.ID))
{ {
m_log.DebugFormat("[HG SUITCASE INVENTORY SERVICE]: UpdateFolder: folder {0}/{1} is not within Suitcase tree", folder.Name, folder.ID); m_log.DebugFormat("[HG SUITCASE INVENTORY SERVICE]: UpdateFolder: folder {0}/{1} (user {2}) is not within Suitcase tree", folder.Name, folder.ID, folder.Owner);
return false; return false;
} }
@ -318,13 +318,13 @@ namespace OpenSim.Services.HypergridService
{ {
if (!IsWithinSuitcaseTree(folder.Owner, folder.ID)) if (!IsWithinSuitcaseTree(folder.Owner, folder.ID))
{ {
m_log.DebugFormat("[HG SUITCASE INVENTORY SERVICE]: MoveFolder: folder {0} is not within Suitcase tree", folder.ID); m_log.DebugFormat("[HG SUITCASE INVENTORY SERVICE]: MoveFolder: folder {0} (user {1}) is not within Suitcase tree", folder.ID, folder.Owner);
return false; return false;
} }
if (!IsWithinSuitcaseTree(folder.Owner, folder.ParentID)) if (!IsWithinSuitcaseTree(folder.Owner, folder.ParentID))
{ {
m_log.DebugFormat("[HG SUITCASE INVENTORY SERVICE]: MoveFolder: folder {0} is not within Suitcase tree", folder.ParentID); m_log.DebugFormat("[HG SUITCASE INVENTORY SERVICE]: MoveFolder: folder {0} (user {1}) is not within Suitcase tree", folder.ParentID, folder.Owner);
return false; return false;
} }
@ -349,7 +349,7 @@ namespace OpenSim.Services.HypergridService
// make sure the given folder's parent folder exists under the suitcase tree of this user // make sure the given folder's parent folder exists under the suitcase tree of this user
if (!IsWithinSuitcaseTree(item.Owner, item.Folder)) if (!IsWithinSuitcaseTree(item.Owner, item.Folder))
{ {
m_log.DebugFormat("[HG SUITCASE INVENTORY SERVICE]: AddItem: folder {0} is not within Suitcase tree", item.Folder); m_log.DebugFormat("[HG SUITCASE INVENTORY SERVICE]: AddItem: folder {0} (user {1}) is not within Suitcase tree", item.Folder, item.Owner);
return false; return false;
} }
@ -362,7 +362,7 @@ namespace OpenSim.Services.HypergridService
{ {
if (!IsWithinSuitcaseTree(item.Owner, item.Folder)) if (!IsWithinSuitcaseTree(item.Owner, item.Folder))
{ {
m_log.DebugFormat("[HG SUITCASE INVENTORY SERVICE]: UpdateItem: folder {0} is not within Suitcase tree", item.Folder); m_log.DebugFormat("[HG SUITCASE INVENTORY SERVICE]: UpdateItem: folder {0} (user {1}) is not within Suitcase tree", item.Folder, item.Owner);
return false; return false;
} }
@ -378,7 +378,7 @@ namespace OpenSim.Services.HypergridService
{ {
if (!IsWithinSuitcaseTree(item.Owner, item.Folder)) if (!IsWithinSuitcaseTree(item.Owner, item.Folder))
{ {
m_log.DebugFormat("[HG SUITCASE INVENTORY SERVICE]: MoveItems: folder {0} is not within Suitcase tree", item.Folder); m_log.DebugFormat("[HG SUITCASE INVENTORY SERVICE]: MoveItems: folder {0} (user {1}) is not within Suitcase tree", item.Folder, item.Owner);
return false; return false;
} }
} }
@ -389,7 +389,7 @@ namespace OpenSim.Services.HypergridService
InventoryItemBase originalItem = base.GetItem(item); InventoryItemBase originalItem = base.GetItem(item);
if (!IsWithinSuitcaseTree(originalItem.Owner, originalItem.Folder)) if (!IsWithinSuitcaseTree(originalItem.Owner, originalItem.Folder))
{ {
m_log.DebugFormat("[HG SUITCASE INVENTORY SERVICE]: MoveItems: folder {0} is not within Suitcase tree", originalItem.Folder); m_log.DebugFormat("[HG SUITCASE INVENTORY SERVICE]: MoveItems: folder {0} (user {1}) is not within Suitcase tree", item.Folder, item.Owner);
return false; return false;
} }
} }
@ -414,8 +414,8 @@ namespace OpenSim.Services.HypergridService
if (!IsWithinSuitcaseTree(it.Owner, it.Folder) && !IsPartOfAppearance(it.Owner, it.ID)) if (!IsWithinSuitcaseTree(it.Owner, it.Folder) && !IsPartOfAppearance(it.Owner, it.ID))
{ {
m_log.DebugFormat("[HG SUITCASE INVENTORY SERVICE]: Item {0}/{1} (folder {2}) is not within Suitcase tree or Appearance", m_log.DebugFormat("[HG SUITCASE INVENTORY SERVICE]: GetItem: item {0}/{1} (folder {2}) (user {3}) is not within Suitcase tree or Appearance",
it.Name, it.ID, it.Folder); it.Name, it.ID, it.Folder, it.Owner);
return null; return null;
} }
@ -437,8 +437,8 @@ namespace OpenSim.Services.HypergridService
{ {
if (!IsWithinSuitcaseTree(f.Owner, f.ID)) if (!IsWithinSuitcaseTree(f.Owner, f.ID))
{ {
m_log.DebugFormat("[HG SUITCASE INVENTORY SERVICE]: Folder {0}/{1} is not within Suitcase tree", m_log.DebugFormat("[HG SUITCASE INVENTORY SERVICE]: GetFolder: folder {0}/{1} (user {2}) is not within Suitcase tree",
f.Name, f.ID); f.Name, f.ID, f.Owner);
return null; return null;
} }
} }

View File

@ -83,11 +83,12 @@ namespace OpenSim.Services.Interfaces
/// <param name="destination">Desired destination</param> /// <param name="destination">Desired destination</param>
/// <param name="agentID">The visitor's User ID</param> /// <param name="agentID">The visitor's User ID</param>
/// <param name="agentHomeURI">The visitor's Home URI. Will be missing (null) in older OpenSims.</param> /// <param name="agentHomeURI">The visitor's Home URI. Will be missing (null) in older OpenSims.</param>
/// <param name="viaTeleport">True: via teleport; False: via cross (walking)</param>
/// <param name="position">Position in the region</param> /// <param name="position">Position in the region</param>
/// <param name="version"></param> /// <param name="version"></param>
/// <param name="reason">[out] Optional error message</param> /// <param name="reason">[out] Optional error message</param>
/// <returns>True: ok; False: not allowed</returns> /// <returns>True: ok; False: not allowed</returns>
bool QueryAccess(GridRegion destination, UUID agentID, string agentHomeURI, Vector3 position, out string version, out string reason); bool QueryAccess(GridRegion destination, UUID agentID, string agentHomeURI, bool viaTeleport, Vector3 position, out string version, out string reason);
/// <summary> /// <summary>
/// Message from receiving region to departing region, telling it got contacted by the client. /// Message from receiving region to departing region, telling it got contacted by the client.

View File

@ -324,7 +324,29 @@ namespace OpenSim.Tests.Common.Mock
public List<GroupNoticeData> GetGroupNotices(UUID requestingAgentID, UUID groupID) public List<GroupNoticeData> GetGroupNotices(UUID requestingAgentID, UUID groupID)
{ {
XGroup group = GetXGroup(groupID, null);
if (group == null)
return null; return null;
List<GroupNoticeData> notices = new List<GroupNoticeData>();
foreach (XGroupNotice notice in group.notices.Values)
{
GroupNoticeData gnd = new GroupNoticeData()
{
NoticeID = notice.noticeID,
Timestamp = notice.timestamp,
FromName = notice.fromName,
Subject = notice.subject,
HasAttachment = notice.hasAttachment,
AssetType = (byte)notice.assetType
};
notices.Add(gnd);
}
return notices;
} }
public GroupNoticeInfo GetGroupNotice(UUID requestingAgentID, UUID noticeID) public GroupNoticeInfo GetGroupNotice(UUID requestingAgentID, UUID noticeID)

View File

@ -1033,9 +1033,12 @@
; Applies Flotsam Group only. V2 has this always on, no other option ; Applies Flotsam Group only. V2 has this always on, no other option
; MessageOnlineUsersOnly = false ; MessageOnlineUsersOnly = false
;; This makes the Groups modules very chatty on the console. ;; This makes the Group module very chatty on the console.
; DebugEnabled = false ; DebugEnabled = false
; This makes the Group Messaging module very chatty on the console.
; DebugMessagingEnabled = false
;; XmlRpc Security settings. These must match those set on your backend ;; XmlRpc Security settings. These must match those set on your backend
;; groups service if the service is using these keys ;; groups service if the service is using these keys
; XmlRpcServiceReadKey = 1234 ; XmlRpcServiceReadKey = 1234

View File

@ -1661,9 +1661,12 @@
; Enable Group Notices ; Enable Group Notices
;NoticesEnabled = true ;NoticesEnabled = true
; This makes the Groups modules very chatty on the console. ; This makes the Group module very chatty on the console.
DebugEnabled = false DebugEnabled = false
; This makes the Groups Messaging module very chatty on the console.
DebugMessagingEnabled = false
; Groups data is cached for this number of seconds before another request is made to the groups service ; Groups data is cached for this number of seconds before another request is made to the groups service
; Set to 0 to disable the cache. ; Set to 0 to disable the cache.
; Default is 30 seconds ; Default is 30 seconds