mirror of
https://github.com/opensim/opensim.git
synced 2026-08-08 10:15:33 +08:00
Merge branch 'master' into careminster
This commit is contained in:
@@ -98,7 +98,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Gods
|
||||
/// <param name="godID">The person doing the kicking</param>
|
||||
/// <param name="sessionID">The session of the person doing the kicking</param>
|
||||
/// <param name="agentID">the person that is being kicked</param>
|
||||
/// <param name="kickflags">This isn't used apparently</param>
|
||||
/// <param name="kickflags">Tells what to do to the user</param>
|
||||
/// <param name="reason">The message to send to the user after it's been turned into a field</param>
|
||||
public void KickUser(UUID godID, UUID sessionID, UUID agentID, uint kickflags, byte[] reason)
|
||||
{
|
||||
@@ -110,39 +110,56 @@ namespace OpenSim.Region.CoreModules.Avatar.Gods
|
||||
{
|
||||
if (m_scene.Permissions.IsGod(godID))
|
||||
{
|
||||
if (agentID == kickUserID)
|
||||
if (kickflags == 0)
|
||||
{
|
||||
string reasonStr = Utils.BytesToString(reason);
|
||||
if (agentID == kickUserID)
|
||||
{
|
||||
string reasonStr = Utils.BytesToString(reason);
|
||||
|
||||
m_scene.ForEachClient(
|
||||
delegate(IClientAPI controller)
|
||||
{
|
||||
if (controller.AgentId != godID)
|
||||
controller.Kick(reasonStr);
|
||||
}
|
||||
);
|
||||
|
||||
// This is a bit crude. It seems the client will be null before it actually stops the thread
|
||||
// The thread will kill itself eventually :/
|
||||
// Is there another way to make sure *all* clients get this 'inter region' message?
|
||||
m_scene.ForEachScenePresence(
|
||||
delegate(ScenePresence p)
|
||||
{
|
||||
if (p.UUID != godID && !p.IsChildAgent)
|
||||
{
|
||||
// Possibly this should really be p.Close() though that method doesn't send a close
|
||||
// to the client
|
||||
p.ControllingClient.Close();
|
||||
m_scene.ForEachClient(
|
||||
delegate(IClientAPI controller)
|
||||
{
|
||||
if (controller.AgentId != godID)
|
||||
controller.Kick(reasonStr);
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_scene.SceneGraph.removeUserCount(!sp.IsChildAgent);
|
||||
);
|
||||
|
||||
sp.ControllingClient.Kick(Utils.BytesToString(reason));
|
||||
sp.ControllingClient.Close();
|
||||
// This is a bit crude. It seems the client will be null before it actually stops the thread
|
||||
// The thread will kill itself eventually :/
|
||||
// Is there another way to make sure *all* clients get this 'inter region' message?
|
||||
m_scene.ForEachScenePresence(
|
||||
delegate(ScenePresence p)
|
||||
{
|
||||
if (p.UUID != godID && !p.IsChildAgent)
|
||||
{
|
||||
// Possibly this should really be p.Close() though that method doesn't send a close
|
||||
// to the client
|
||||
p.ControllingClient.Close();
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_scene.SceneGraph.removeUserCount(!sp.IsChildAgent);
|
||||
|
||||
sp.ControllingClient.Kick(Utils.BytesToString(reason));
|
||||
sp.ControllingClient.Close();
|
||||
}
|
||||
}
|
||||
|
||||
if (kickflags == 1)
|
||||
{
|
||||
sp.AllowMovement = false;
|
||||
m_dialogModule.SendAlertToUser(agentID, Utils.BytesToString(reason));
|
||||
m_dialogModule.SendAlertToUser(godID, "User Frozen");
|
||||
}
|
||||
|
||||
if (kickflags == 2)
|
||||
{
|
||||
sp.AllowMovement = true;
|
||||
m_dialogModule.SendAlertToUser(agentID, Utils.BytesToString(reason));
|
||||
m_dialogModule.SendAlertToUser(godID, "User Unfrozen");
|
||||
}
|
||||
}
|
||||
else
|
||||
|
||||
@@ -602,9 +602,12 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm
|
||||
ListenerInfo info =
|
||||
ListenerInfo.FromData(localID, itemID, hostID, item);
|
||||
|
||||
if (!m_listeners.ContainsKey((int)item[2]))
|
||||
m_listeners.Add((int)item[2], new List<ListenerInfo>());
|
||||
m_listeners[(int)item[2]].Add(info);
|
||||
lock (m_listeners)
|
||||
{
|
||||
if (!m_listeners.ContainsKey((int)item[2]))
|
||||
m_listeners.Add((int)item[2], new List<ListenerInfo>());
|
||||
m_listeners[(int)item[2]].Add(info);
|
||||
}
|
||||
|
||||
idx+=6;
|
||||
}
|
||||
|
||||
@@ -453,6 +453,8 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||
/// <summary>
|
||||
/// Resolve path to a working FileStream
|
||||
/// </summary>
|
||||
/// <param name="path"></param>
|
||||
/// <returns></returns>
|
||||
private Stream GetStream(string path)
|
||||
{
|
||||
if (File.Exists(path))
|
||||
@@ -499,8 +501,9 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||
WebResponse response = request.GetResponse();
|
||||
Stream file = response.GetResponseStream();
|
||||
|
||||
if (response.ContentType != "application/x-oar")
|
||||
throw new Exception(String.Format("{0} does not identify an OAR file", uri.ToString()));
|
||||
// justincc: gonna ignore the content type for now and just try anything
|
||||
//if (response.ContentType != "application/x-oar")
|
||||
// throw new Exception(String.Format("{0} does not identify an OAR file", uri.ToString()));
|
||||
|
||||
if (response.ContentLength == 0)
|
||||
throw new Exception(String.Format("{0} returned an empty file", uri.ToString()));
|
||||
|
||||
@@ -800,30 +800,31 @@ namespace OpenSim.Region.CoreModules.World.Permissions
|
||||
}
|
||||
|
||||
protected bool GenericParcelOwnerPermission(UUID user, ILandObject parcel, ulong groupPowers)
|
||||
{
|
||||
bool permission = false;
|
||||
|
||||
{
|
||||
if (parcel.LandData.OwnerID == user)
|
||||
{
|
||||
permission = true;
|
||||
// Returning immediately so that group deeded objects on group deeded land don't trigger a NRE on
|
||||
// the subsequent redundant checks when using lParcelMediaCommandList()
|
||||
// See http://opensimulator.org/mantis/view.php?id=3999 for more details
|
||||
return true;
|
||||
}
|
||||
|
||||
if (parcel.LandData.IsGroupOwned && IsGroupMember(parcel.LandData.GroupID, user, groupPowers))
|
||||
{
|
||||
permission = true;
|
||||
return true;
|
||||
}
|
||||
|
||||
if (IsEstateManager(user))
|
||||
{
|
||||
permission = true;
|
||||
return true;
|
||||
}
|
||||
|
||||
if (IsAdministrator(user))
|
||||
{
|
||||
permission = true;
|
||||
return true;
|
||||
}
|
||||
|
||||
return permission;
|
||||
return false;
|
||||
}
|
||||
|
||||
protected bool GenericParcelPermission(UUID user, Vector3 pos, ulong groupPowers)
|
||||
|
||||
Reference in New Issue
Block a user