diff --git a/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs b/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs
index 468eeb4f68..256a971fdd 100644
--- a/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs
+++ b/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs
@@ -135,16 +135,22 @@ namespace OpenSim.ApplicationPlugins.RemoteController
availableMethods["admin_restart"] = XmlRpcRestartMethod;
availableMethods["admin_load_heightmap"] = XmlRpcLoadHeightmapMethod;
availableMethods["admin_save_heightmap"] = XmlRpcSaveHeightmapMethod;
+
+ // Agent management
+ availableMethods["admin_teleport_agent"] = XmlRpcTeleportAgentMethod;
+
// User management
availableMethods["admin_create_user"] = XmlRpcCreateUserMethod;
availableMethods["admin_create_user_email"] = XmlRpcCreateUserMethod;
availableMethods["admin_exists_user"] = XmlRpcUserExistsMethod;
availableMethods["admin_update_user"] = XmlRpcUpdateUserAccountMethod;
+
// Region state management
availableMethods["admin_load_xml"] = XmlRpcLoadXMLMethod;
availableMethods["admin_save_xml"] = XmlRpcSaveXMLMethod;
availableMethods["admin_load_oar"] = XmlRpcLoadOARMethod;
availableMethods["admin_save_oar"] = XmlRpcSaveOARMethod;
+
// Estate access list management
availableMethods["admin_acl_clear"] = XmlRpcAccessListClear;
availableMethods["admin_acl_add"] = XmlRpcAccessListAdd;
@@ -3073,6 +3079,112 @@ namespace OpenSim.ApplicationPlugins.RemoteController
return response;
}
+ public XmlRpcResponse XmlRpcTeleportAgentMethod(XmlRpcRequest request, IPEndPoint remoteClient)
+ {
+ XmlRpcResponse response = new XmlRpcResponse();
+ Hashtable responseData = new Hashtable();
+
+ try
+ {
+ responseData["success"] = true;
+
+ Hashtable requestData = (Hashtable)request.Params[0];
+
+ CheckStringParameters(request, new string[] {"password"});
+
+ FailIfRemoteAdminNotAllowed((string)requestData["password"], remoteClient.Address.ToString());
+
+ UUID agentId;
+ string regionName = null;
+ Vector3 pos, lookAt;
+ bool agentSpecified = false;
+ ScenePresence sp = null;
+
+ if (requestData.Contains("agent_first_name") && requestData.Contains("agent_last_name"))
+ {
+ string firstName = requestData["agent_first_name"].ToString();
+ string lastName = requestData["agent_last_name"].ToString();
+ m_application.SceneManager.TryGetRootScenePresenceByName(firstName, lastName, out sp);
+
+ if (sp == null)
+ throw new Exception(
+ string.Format(
+ "No agent found with agent_first_name {0} and agent_last_name {1}", firstName, lastName));
+ }
+ else if (requestData.Contains("agent_id"))
+ {
+ string rawAgentId = (string)requestData["agent_id"];
+
+ if (!UUID.TryParse(rawAgentId, out agentId))
+ throw new Exception(string.Format("agent_id {0} does not have the correct id format", rawAgentId));
+
+ m_application.SceneManager.TryGetRootScenePresence(agentId, out sp);
+
+ if (sp == null)
+ throw new Exception(string.Format("No agent with agent_id {0} found in this simulator", agentId));
+ }
+ else
+ {
+ throw new Exception("No agent_id or agent_first_name and agent_last_name parameters specified");
+ }
+
+ if (requestData.Contains("region_name"))
+ regionName = (string)requestData["region_name"];
+
+ pos.X = ParseFloat(requestData, "pos_x", sp.AbsolutePosition.X);
+ pos.Y = ParseFloat(requestData, "pos_y", sp.AbsolutePosition.Y);
+ pos.Z = ParseFloat(requestData, "pos_z", sp.AbsolutePosition.Z);
+ lookAt.X = ParseFloat(requestData, "lookat_x", sp.Lookat.X);
+ lookAt.Y = ParseFloat(requestData, "lookat_y", sp.Lookat.Y);
+ lookAt.Z = ParseFloat(requestData, "lookat_z", sp.Lookat.Z);
+
+ sp.Scene.RequestTeleportLocation(
+ sp.ControllingClient, regionName, pos, lookAt, (uint)Constants.TeleportFlags.ViaLocation);
+ }
+ catch (Exception e)
+ {
+ m_log.ErrorFormat("[RADMIN]: admin_teleport_agent exception: {0}{1}", e.Message, e.StackTrace);
+
+ responseData["success"] = false;
+ responseData["error"] = e.Message;
+ }
+ finally
+ {
+ response.Value = responseData;
+ }
+
+ return response;
+ }
+
+ ///
+ /// Parse a float with the given parameter name from a request data hash table.
+ ///
+ ///
+ /// Will throw an exception if parameter is not a float.
+ /// Will not throw if parameter is not found, passes back default value instead.
+ ///
+ ///
+ ///
+ ///
+ ///
+ private static float ParseFloat(Hashtable requestData, string paramName, float defaultVal)
+ {
+ if (requestData.Contains(paramName))
+ {
+ string rawVal = (string)requestData[paramName];
+ float val;
+
+ if (!float.TryParse(rawVal, out val))
+ throw new Exception(string.Format("{0} {1} is not a valid float", paramName, rawVal));
+ else
+ return val;
+ }
+ else
+ {
+ return defaultVal;
+ }
+ }
+
private static void CheckStringParameters(XmlRpcRequest request, string[] param)
{
Hashtable requestData = (Hashtable) request.Params[0];
@@ -3252,6 +3364,7 @@ namespace OpenSim.ApplicationPlugins.RemoteController
return false;
}
}
+
private bool LoadHeightmap(string file, UUID regionID)
{
m_log.InfoFormat("[RADMIN]: Terrain Loading: {0}", file);
diff --git a/OpenSim/Capabilities/CapsHandlers.cs b/OpenSim/Capabilities/CapsHandlers.cs
index a0e9ebca47..1709f46c9c 100644
--- a/OpenSim/Capabilities/CapsHandlers.cs
+++ b/OpenSim/Capabilities/CapsHandlers.cs
@@ -51,11 +51,10 @@ namespace OpenSim.Framework.Capabilities
/// supplied BaseHttpServer.
///
/// base HTTP server
- /// host name of the HTTP
- /// server
+ /// host name of the HTTP server
/// HTTP port
public CapsHandlers(BaseHttpServer httpListener, string httpListenerHostname, uint httpListenerPort)
- : this (httpListener,httpListenerHostname,httpListenerPort, false)
+ : this(httpListener,httpListenerHostname,httpListenerPort, false)
{
}
@@ -88,44 +87,52 @@ namespace OpenSim.Framework.Capabilities
/// handler to be removed
public void Remove(string capsName)
{
- m_httpListener.RemoveStreamHandler("POST", m_capsHandlers[capsName].Path);
- m_httpListener.RemoveStreamHandler("GET", m_capsHandlers[capsName].Path);
- m_capsHandlers.Remove(capsName);
+ lock (m_capsHandlers)
+ {
+ m_httpListener.RemoveStreamHandler("POST", m_capsHandlers[capsName].Path);
+ m_httpListener.RemoveStreamHandler("GET", m_capsHandlers[capsName].Path);
+ m_capsHandlers.Remove(capsName);
+ }
}
public bool ContainsCap(string cap)
{
- return m_capsHandlers.ContainsKey(cap);
+ lock (m_capsHandlers)
+ return m_capsHandlers.ContainsKey(cap);
}
///
/// The indexer allows us to treat the CapsHandlers object
/// in an intuitive dictionary like way.
///
- ///
+ ///
/// The indexer will throw an exception when you try to
/// retrieve a cap handler for a cap that is not contained in
/// CapsHandlers.
- ///
+ ///
public IRequestHandler this[string idx]
{
get
{
- return m_capsHandlers[idx];
+ lock (m_capsHandlers)
+ return m_capsHandlers[idx];
}
set
{
- if (m_capsHandlers.ContainsKey(idx))
+ lock (m_capsHandlers)
{
- m_httpListener.RemoveStreamHandler("POST", m_capsHandlers[idx].Path);
- m_capsHandlers.Remove(idx);
+ if (m_capsHandlers.ContainsKey(idx))
+ {
+ m_httpListener.RemoveStreamHandler("POST", m_capsHandlers[idx].Path);
+ m_capsHandlers.Remove(idx);
+ }
+
+ if (null == value) return;
+
+ m_capsHandlers[idx] = value;
+ m_httpListener.AddStreamHandler(value);
}
-
- if (null == value) return;
-
- m_capsHandlers[idx] = value;
- m_httpListener.AddStreamHandler(value);
}
}
@@ -137,9 +144,12 @@ namespace OpenSim.Framework.Capabilities
{
get
{
- string[] __keys = new string[m_capsHandlers.Keys.Count];
- m_capsHandlers.Keys.CopyTo(__keys, 0);
- return __keys;
+ lock (m_capsHandlers)
+ {
+ string[] __keys = new string[m_capsHandlers.Keys.Count];
+ m_capsHandlers.Keys.CopyTo(__keys, 0);
+ return __keys;
+ }
}
}
@@ -157,15 +167,19 @@ namespace OpenSim.Framework.Capabilities
protocol = "https://";
string baseUrl = protocol + m_httpListenerHostName + ":" + m_httpListenerPort.ToString();
- foreach (string capsName in m_capsHandlers.Keys)
- {
- if (excludeSeed && "SEED" == capsName)
- continue;
- caps[capsName] = baseUrl + m_capsHandlers[capsName].Path;
+ lock (m_capsHandlers)
+ {
+ foreach (string capsName in m_capsHandlers.Keys)
+ {
+ if (excludeSeed && "SEED" == capsName)
+ continue;
+
+ caps[capsName] = baseUrl + m_capsHandlers[capsName].Path;
+ }
}
return caps;
}
}
-}
+}
\ No newline at end of file
diff --git a/OpenSim/Capabilities/Handlers/UploadBakedTexture/UploadBakedTextureHandler.cs b/OpenSim/Capabilities/Handlers/UploadBakedTexture/UploadBakedTextureHandler.cs
index e3bf8cfc76..b7ca7030bc 100644
--- a/OpenSim/Capabilities/Handlers/UploadBakedTexture/UploadBakedTextureHandler.cs
+++ b/OpenSim/Capabilities/Handlers/UploadBakedTexture/UploadBakedTextureHandler.cs
@@ -77,8 +77,6 @@ namespace OpenSim.Capabilities.Handlers
{
try
{
-// m_log.Debug("[CAPS]: UploadBakedTexture Request in region: " + m_regionName);
-
string capsBase = "/CAPS/" + m_HostCapsObj.CapsObjectPath;
string uploaderPath = Util.RandomClass.Next(5000, 8000).ToString("0000");
diff --git a/OpenSim/Framework/Console/RemoteConsole.cs b/OpenSim/Framework/Console/RemoteConsole.cs
index 07de27a2fc..eabb62dd01 100644
--- a/OpenSim/Framework/Console/RemoteConsole.cs
+++ b/OpenSim/Framework/Console/RemoteConsole.cs
@@ -232,9 +232,8 @@ namespace OpenSim.Framework.Console
string uri = "/ReadResponses/" + sessionID.ToString() + "/";
- m_Server.AddPollServiceHTTPHandler(uri, HandleHttpPoll,
- new PollServiceEventArgs(null, HasEvents, GetEvents, NoEvents,
- sessionID));
+ m_Server.AddPollServiceHTTPHandler(
+ uri, new PollServiceEventArgs(null, HasEvents, GetEvents, NoEvents, sessionID));
XmlDocument xmldoc = new XmlDocument();
XmlNode xmlnode = xmldoc.CreateNode(XmlNodeType.XmlDeclaration,
@@ -266,11 +265,6 @@ namespace OpenSim.Framework.Console
return reply;
}
- private Hashtable HandleHttpPoll(Hashtable request)
- {
- return new Hashtable();
- }
-
private Hashtable HandleHttpCloseSession(Hashtable request)
{
DoExpire();
diff --git a/OpenSim/Framework/IScene.cs b/OpenSim/Framework/IScene.cs
index 76b731f0f3..7b0fe374c7 100644
--- a/OpenSim/Framework/IScene.cs
+++ b/OpenSim/Framework/IScene.cs
@@ -90,9 +90,9 @@ namespace OpenSim.Framework
///
/// Is the agent denoted by the given agentID a child presence in this scene?
///
- ///
+ ///
/// Used by ClientView when a 'kick everyone' or 'estate message' occurs
- ///
+ ///
/// AvatarID to lookup
/// true if the presence is a child agent, false if the presence is a root exception
///
diff --git a/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs b/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs
index 04739feab2..2c0d8f0f63 100644
--- a/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs
+++ b/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs
@@ -227,21 +227,17 @@ namespace OpenSim.Framework.Servers.HttpServer
return new List(m_HTTPHandlers.Keys);
}
- public bool AddPollServiceHTTPHandler(string methodName, GenericHTTPMethod handler, PollServiceEventArgs args)
+ public bool AddPollServiceHTTPHandler(string methodName, PollServiceEventArgs args)
{
- bool pollHandlerResult = false;
lock (m_pollHandlers)
{
if (!m_pollHandlers.ContainsKey(methodName))
{
- m_pollHandlers.Add(methodName,args);
- pollHandlerResult = true;
+ m_pollHandlers.Add(methodName, args);
+ return true;
}
}
- if (pollHandlerResult)
- return AddHTTPHandler(methodName, handler);
-
return false;
}
@@ -1871,8 +1867,6 @@ namespace OpenSim.Framework.Servers.HttpServer
{
lock (m_pollHandlers)
m_pollHandlers.Remove(path);
-
- RemoveHTTPHandler(httpMethod, path);
}
public bool RemoveAgentHandler(string agent, IHttpAgentHandler handler)
diff --git a/OpenSim/Framework/Servers/HttpServer/Interfaces/IHttpServer.cs b/OpenSim/Framework/Servers/HttpServer/Interfaces/IHttpServer.cs
index fd77984c22..db58f6f468 100644
--- a/OpenSim/Framework/Servers/HttpServer/Interfaces/IHttpServer.cs
+++ b/OpenSim/Framework/Servers/HttpServer/Interfaces/IHttpServer.cs
@@ -77,8 +77,8 @@ namespace OpenSim.Framework.Servers.HttpServer
/// true if the handler was successfully registered, false if a handler with the same name already existed.
///
bool AddHTTPHandler(string methodName, GenericHTTPMethod handler);
-
- bool AddPollServiceHTTPHandler(string methodName, GenericHTTPMethod handler, PollServiceEventArgs args);
+
+ bool AddPollServiceHTTPHandler(string methodName, PollServiceEventArgs args);
///
/// Adds a LLSD handler, yay.
diff --git a/OpenSim/Region/Application/OpenSimBase.cs b/OpenSim/Region/Application/OpenSimBase.cs
index e8e4f19a32..50baa56e23 100644
--- a/OpenSim/Region/Application/OpenSimBase.cs
+++ b/OpenSim/Region/Application/OpenSimBase.cs
@@ -62,6 +62,7 @@ namespace OpenSim
// These are the names of the plugin-points extended by this
// class during system startup.
+ //
private const string PLUGIN_ASSET_CACHE = "/OpenSim/AssetCache";
private const string PLUGIN_ASSET_SERVER_CLIENT = "/OpenSim/AssetClient";
diff --git a/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/EventQueueGetModule.cs b/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/EventQueueGetModule.cs
index 9f27abc5e7..8ba6f61caa 100644
--- a/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/EventQueueGetModule.cs
+++ b/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/EventQueueGetModule.cs
@@ -361,7 +361,6 @@ namespace OpenSim.Region.ClientStack.Linden
// This will persist this beyond the expiry of the caps handlers
MainServer.Instance.AddPollServiceHTTPHandler(
capsBase + EventQueueGetUUID.ToString() + "/",
- EventQueuePoll,
new PollServiceEventArgs(null, HasEvents, GetEvents, NoEvents, agentID));
Random rnd = new Random(Environment.TickCount);
@@ -578,11 +577,6 @@ namespace OpenSim.Region.ClientStack.Linden
// return responsedata;
// }
- public Hashtable EventQueuePoll(Hashtable request)
- {
- return new Hashtable();
- }
-
// public Hashtable EventQueuePath2(Hashtable request)
// {
// string capuuid = (string)request["uri"]; //path.Replace("/CAPS/EQG/","");
diff --git a/OpenSim/Region/ClientStack/Linden/Caps/UploadBakedTextureModule.cs b/OpenSim/Region/ClientStack/Linden/Caps/UploadBakedTextureModule.cs
index e61815fd4a..45d6071c24 100644
--- a/OpenSim/Region/ClientStack/Linden/Caps/UploadBakedTextureModule.cs
+++ b/OpenSim/Region/ClientStack/Linden/Caps/UploadBakedTextureModule.cs
@@ -104,7 +104,7 @@ namespace OpenSim.Region.ClientStack.Linden
"UploadBakedTexture",
new RestStreamHandler(
"POST",
- "/CAPS/" + m_uploadBakedTexturePath,
+ "/CAPS/" + caps.CapsObjectPath + m_uploadBakedTexturePath,
new UploadBakedTextureHandler(
caps, m_scene.AssetService, m_persistBakedTextures).UploadBakedTexture));
}
diff --git a/OpenSim/Region/CoreModules/Scripting/LSLHttp/UrlModule.cs b/OpenSim/Region/CoreModules/Scripting/LSLHttp/UrlModule.cs
index 458426b440..f5683f055e 100644
--- a/OpenSim/Region/CoreModules/Scripting/LSLHttp/UrlModule.cs
+++ b/OpenSim/Region/CoreModules/Scripting/LSLHttp/UrlModule.cs
@@ -91,11 +91,6 @@ namespace OpenSim.Region.CoreModules.Scripting.LSLHttp
get { return null; }
}
- private Hashtable HandleHttpPoll(Hashtable request)
- {
- return new Hashtable();
- }
-
public string Name
{
get { return "UrlModule"; }
@@ -171,9 +166,9 @@ namespace OpenSim.Region.CoreModules.Scripting.LSLHttp
string uri = "/lslhttp/" + urlcode.ToString();
- m_HttpServer.AddPollServiceHTTPHandler(uri,HandleHttpPoll,
- new PollServiceEventArgs(HttpRequestHandler,HasEvents, GetEvents, NoEvents,
- urlcode));
+ m_HttpServer.AddPollServiceHTTPHandler(
+ uri,
+ new PollServiceEventArgs(HttpRequestHandler, HasEvents, GetEvents, NoEvents, urlcode));
engine.PostScriptEvent(itemID, "http_request", new Object[] { urlcode.ToString(), "URL_REQUEST_GRANTED", url });
}
@@ -213,9 +208,9 @@ namespace OpenSim.Region.CoreModules.Scripting.LSLHttp
string uri = "/lslhttps/" + urlcode.ToString() + "/";
- m_HttpsServer.AddPollServiceHTTPHandler(uri,HandleHttpPoll,
- new PollServiceEventArgs(HttpRequestHandler,HasEvents, GetEvents, NoEvents,
- urlcode));
+ m_HttpsServer.AddPollServiceHTTPHandler(
+ uri,
+ new PollServiceEventArgs(HttpRequestHandler, HasEvents, GetEvents, NoEvents, urlcode));
engine.PostScriptEvent(itemID, "http_request", new Object[] { urlcode.ToString(), "URL_REQUEST_GRANTED", url });
}
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index 171443e540..f9ae39caa9 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -3241,36 +3241,37 @@ namespace OpenSim.Region.Framework.Scenes
// Avatar is already disposed :/
}
- m_log.Debug("[Scene] Beginning OnRemovePresence");
- m_eventManager.TriggerOnRemovePresence(agentID);
- m_log.Debug("[Scene] Finished OnRemovePresence");
-
- if (AttachmentsModule != null && !avatar.IsChildAgent && avatar.PresenceType != PresenceType.Npc)
- AttachmentsModule.SaveChangedAttachments(avatar);
-
- if (AttachmentsModule != null && !avatar.IsChildAgent && avatar.PresenceType != PresenceType.Npc)
- AttachmentsModule.SaveChangedAttachments(avatar);
-
- ForEachClient(
- delegate(IClientAPI client)
- {
- //We can safely ignore null reference exceptions. It means the avatar is dead and cleaned up anyway
- try { client.SendKillObject(avatar.RegionHandle, new List { avatar.LocalId }); }
- catch (NullReferenceException) { }
- });
-
- IAgentAssetTransactions agentTransactions = this.RequestModuleInterface();
- if (agentTransactions != null)
+ try
{
- agentTransactions.RemoveAgentAssetTransactions(agentID);
+ m_eventManager.TriggerOnRemovePresence(agentID);
+
+ if (AttachmentsModule != null && !avatar.IsChildAgent && avatar.PresenceType != PresenceType.Npc)
+ AttachmentsModule.SaveChangedAttachments(avatar);
+
+ ForEachClient(
+ delegate(IClientAPI client)
+ {
+ //We can safely ignore null reference exceptions. It means the avatar is dead and cleaned up anyway
+ try { client.SendKillObject(avatar.RegionHandle, new List { avatar.LocalId }); }
+ catch (NullReferenceException) { }
+ });
+
+ IAgentAssetTransactions agentTransactions = this.RequestModuleInterface();
+ if (agentTransactions != null)
+ {
+ agentTransactions.RemoveAgentAssetTransactions(agentID);
+ }
+ }
+ finally
+ {
+ // Always clean these structures up so that any failure above doesn't cause them to remain in the
+ // scene with possibly bad effects (e.g. continually timing out on unacked packets and triggering
+ // the same cleanup exception continually.
+ // TODO: This should probably extend to the whole method, but we don't want to also catch the NRE
+ // since this would hide the underlying failure and other associated problems.
+ m_sceneGraph.RemoveScenePresence(agentID);
+ m_clientManager.Remove(agentID);
}
-
- // Remove the avatar from the scene
- m_log.Debug("[Scene] Begin RemoveScenePresence");
- m_sceneGraph.RemoveScenePresence(agentID);
- m_log.Debug("[Scene] Finished RemoveScenePresence. Removing the client manager");
- m_clientManager.Remove(agentID);
- m_log.Debug("[Scene] Removed the client manager. Firing avatar.close");
try
{
@@ -4390,7 +4391,7 @@ namespace OpenSim.Region.Framework.Scenes
///
public void ForEachRootScenePresence(Action action)
{
- if(m_sceneGraph != null)
+ if (m_sceneGraph != null)
{
m_sceneGraph.ForEachAvatar(action);
}
@@ -4470,9 +4471,9 @@ namespace OpenSim.Region.Framework.Scenes
return m_sceneGraph.GetGroupByPrim(localID);
}
- public override bool TryGetScenePresence(UUID avatarId, out ScenePresence avatar)
+ public override bool TryGetScenePresence(UUID agentID, out ScenePresence sp)
{
- return m_sceneGraph.TryGetScenePresence(avatarId, out avatar);
+ return m_sceneGraph.TryGetScenePresence(agentID, out sp);
}
public bool TryGetAvatarByName(string avatarName, out ScenePresence avatar)
diff --git a/OpenSim/Region/Framework/Scenes/SceneBase.cs b/OpenSim/Region/Framework/Scenes/SceneBase.cs
index 0fd5164380..29ab071d21 100644
--- a/OpenSim/Region/Framework/Scenes/SceneBase.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneBase.cs
@@ -193,6 +193,12 @@ namespace OpenSim.Region.Framework.Scenes
return false;
}
+ ///
+ /// Try to get a scene presence from the scene
+ ///
+ ///
+ /// null if there is no scene presence with the given agent id
+ /// true if there was a scene presence with the given id, false otherwise.
public abstract bool TryGetScenePresence(UUID agentID, out ScenePresence scenePresence);
#endregion
diff --git a/OpenSim/Region/Framework/Scenes/SceneManager.cs b/OpenSim/Region/Framework/Scenes/SceneManager.cs
index 82458e2acf..d73a959ab6 100644
--- a/OpenSim/Region/Framework/Scenes/SceneManager.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneManager.cs
@@ -545,23 +545,20 @@ namespace OpenSim.Region.Framework.Scenes
return false;
}
- public bool TryGetAvatarsScene(UUID avatarId, out Scene scene)
+ public bool TryGetRootScenePresence(UUID avatarId, out ScenePresence avatar)
{
- ScenePresence avatar = null;
-
lock (m_localScenes)
{
- foreach (Scene mScene in m_localScenes)
+ foreach (Scene scene in m_localScenes)
{
- if (mScene.TryGetScenePresence(avatarId, out avatar))
- {
- scene = mScene;
+ avatar = scene.GetScenePresence(avatarId);
+
+ if (avatar != null && !avatar.IsChildAgent)
return true;
- }
}
}
- scene = null;
+ avatar = null;
return false;
}
@@ -590,6 +587,22 @@ namespace OpenSim.Region.Framework.Scenes
return false;
}
+ public bool TryGetRootScenePresenceByName(string firstName, string lastName, out ScenePresence sp)
+ {
+ lock (m_localScenes)
+ {
+ foreach (Scene scene in m_localScenes)
+ {
+ sp = scene.GetScenePresence(firstName, lastName);
+ if (sp != null && !sp.IsChildAgent)
+ return true;
+ }
+ }
+
+ sp = null;
+ return false;
+ }
+
public void ForEachScene(Action action)
{
lock (m_localScenes)
diff --git a/bin/Nini.dll b/bin/Nini.dll
index c421005ba3..2d16d95aca 100755
Binary files a/bin/Nini.dll and b/bin/Nini.dll differ
diff --git a/bin/OpenMetaverse.Rendering.Meshmerizer.dll b/bin/OpenMetaverse.Rendering.Meshmerizer.dll
index a6dec04461..e0a3aa5844 100755
Binary files a/bin/OpenMetaverse.Rendering.Meshmerizer.dll and b/bin/OpenMetaverse.Rendering.Meshmerizer.dll differ
diff --git a/bin/OpenMetaverse.StructuredData.dll b/bin/OpenMetaverse.StructuredData.dll
index ed0a2d6446..aa05418763 100755
Binary files a/bin/OpenMetaverse.StructuredData.dll and b/bin/OpenMetaverse.StructuredData.dll differ
diff --git a/bin/OpenMetaverse.dll b/bin/OpenMetaverse.dll
index 37ec47a7a8..523f5a77ac 100755
Binary files a/bin/OpenMetaverse.dll and b/bin/OpenMetaverse.dll differ
diff --git a/bin/OpenMetaverseTypes.dll b/bin/OpenMetaverseTypes.dll
index 6f7fbacb5a..e3356c9503 100755
Binary files a/bin/OpenMetaverseTypes.dll and b/bin/OpenMetaverseTypes.dll differ