diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs
index 7834a8326d..e008ff46b8 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs
@@ -30,6 +30,7 @@ using System.Collections;
using System.Collections.Generic;
using System.Runtime.Remoting.Lifetime;
using System.Text;
+using System.Net;
using OpenMetaverse;
using Nini.Config;
using OpenSim;
@@ -548,6 +549,34 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
osTeleportAgent(agent, World.RegionInfo.RegionName, position, lookat);
}
+ // Functions that get information from the agent itself.
+ //
+ // osGetAgentIP - this is used to determine the IP address of
+ //the client. This is needed to help configure other in world
+ //resources based on the IP address of the clients connected.
+ //I think High is a good risk level for this, as it is an
+ //information leak.
+ public string osGetAgentIP(string agent)
+ {
+ CheckThreatLevel(ThreatLevel.High, "osGetAgentIP");
+
+ UUID avatarID = (UUID)agent;
+
+ m_host.AddScriptLPS(1);
+ if (World.Entities.ContainsKey((UUID)agent) && World.Entities[avatarID] is ScenePresence)
+ {
+ ScenePresence target = (ScenePresence)World.Entities[avatarID];
+ EndPoint ep = target.ControllingClient.GetClientInfo().userEP;
+ if (ep is IPEndPoint)
+ {
+ IPEndPoint ip = (IPEndPoint)ep;
+ return ip.Address.ToString();
+ }
+ }
+ // fall through case, just return nothing
+ return "";
+ }
+
// Adam's super super custom animation functions
public void osAvatarPlayAnimation(string avatar, string animation)
{
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs
index 1150d76edb..c3c5cecbc5 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs
@@ -67,6 +67,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces
void osSetParcelMediaURL(string url);
void osSetPrimFloatOnWater(int floatYN);
+ // Avatar Info Commands
+ string osGetAgentIP(string agent);
+
// Teleport commands
void osTeleportAgent(string agent, string regionName, LSL_Types.Vector3 position, LSL_Types.Vector3 lookat);
void osTeleportAgent(string agent, uint regionX, uint regionY, LSL_Types.Vector3 position, LSL_Types.Vector3 lookat);
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs
index 6ba8b20c05..d8b9f1fa80 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs
@@ -143,6 +143,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
m_OSSL_Functions.osTeleportAgent(agent, position, lookat);
}
+ // Avatar info functions
+ public string osGetAgentIP(string agent)
+ {
+ return m_OSSL_Functions.osGetAgentIP(agent);
+ }
+
// Animation Functions
public void osAvatarPlayAnimation(string avatar, string animation)
diff --git a/prebuild.xml b/prebuild.xml
index 2531e0b7b8..85e429dbb5 100644
--- a/prebuild.xml
+++ b/prebuild.xml
@@ -1895,6 +1895,7 @@
../../../../bin/
+