diff --git a/OpenSim/Framework/Capabilities/CapsUtil.cs b/OpenSim/Framework/Capabilities/CapsUtil.cs
index faf2708541..0334e4b4a2 100644
--- a/OpenSim/Framework/Capabilities/CapsUtil.cs
+++ b/OpenSim/Framework/Capabilities/CapsUtil.cs
@@ -41,7 +41,7 @@ namespace OpenSim.Framework.Capabilities
///
public static string GetCapsSeedPath(string capsObjectPath)
{
- return "CAPS/" + capsObjectPath + "0000/";
+ return "/CAPS/" + capsObjectPath + "0000/";
}
///
diff --git a/OpenSim/Framework/RegionInfo.cs b/OpenSim/Framework/RegionInfo.cs
index d57d4e93d4..a006f3e031 100644
--- a/OpenSim/Framework/RegionInfo.cs
+++ b/OpenSim/Framework/RegionInfo.cs
@@ -116,20 +116,8 @@ namespace OpenSim.Framework
///
public string ServerURI
{
- get {
- if ( m_serverURI != string.Empty ) {
- return m_serverURI;
- } else {
- return "http://" + m_externalHostName + ":" + m_httpPort + "/";
- }
- }
- set {
- if ( value.EndsWith("/") ) {
- m_serverURI = value;
- } else {
- m_serverURI = value + '/';
- }
- }
+ get { return m_serverURI; }
+ set { m_serverURI = value; }
}
protected string m_serverURI;
@@ -154,7 +142,6 @@ namespace OpenSim.Framework
public SimpleRegionInfo()
{
- m_serverURI = string.Empty;
}
public SimpleRegionInfo(uint regionLocX, uint regionLocY, IPEndPoint internalEndPoint, string externalUri)
@@ -164,7 +151,6 @@ namespace OpenSim.Framework
m_internalEndPoint = internalEndPoint;
m_externalHostName = externalUri;
- m_serverURI = string.Empty;
}
public SimpleRegionInfo(uint regionLocX, uint regionLocY, string externalUri, uint port)
@@ -175,7 +161,6 @@ namespace OpenSim.Framework
m_externalHostName = externalUri;
m_internalEndPoint = new IPEndPoint(IPAddress.Parse("0.0.0.0"), (int) port);
- m_serverURI = string.Empty;
}
public SimpleRegionInfo(RegionInfo ConvertFrom)
@@ -465,7 +450,6 @@ namespace OpenSim.Framework
configMember =
new ConfigurationMember(xmlNode, description, loadConfigurationOptions, handleIncomingConfiguration, !skipConsoleConfig);
configMember.performConfigurationRetrieve();
- m_serverURI = string.Empty;
}
public RegionInfo(uint regionLocX, uint regionLocY, IPEndPoint internalEndPoint, string externalUri)
@@ -475,12 +459,10 @@ namespace OpenSim.Framework
m_internalEndPoint = internalEndPoint;
m_externalHostName = externalUri;
- m_serverURI = string.Empty;
}
public RegionInfo()
{
- m_serverURI = string.Empty;
}
public EstateSettings EstateSettings
@@ -570,23 +552,10 @@ namespace OpenSim.Framework
///
/// A well-formed URI for the host region server (namely "http://" + ExternalHostName)
///
-
public string ServerURI
{
- get {
- if ( m_serverURI != string.Empty ) {
- return m_serverURI;
- } else {
- return "http://" + m_externalHostName + ":" + m_httpPort + "/";
- }
- }
- set {
- if ( value.EndsWith("/") ) {
- m_serverURI = value;
- } else {
- m_serverURI = value + '/';
- }
- }
+ get { return m_serverURI; }
+ set { m_serverURI = value; }
}
public string RegionName
diff --git a/OpenSim/Framework/Serialization/ArchiveConstants.cs b/OpenSim/Framework/Serialization/ArchiveConstants.cs
index 7a9b33dc8c..2c5e0018ec 100644
--- a/OpenSim/Framework/Serialization/ArchiveConstants.cs
+++ b/OpenSim/Framework/Serialization/ArchiveConstants.cs
@@ -112,6 +112,7 @@ namespace OpenSim.Framework.Serialization
ASSET_TYPE_TO_EXTENSION[(sbyte)AssetType.LostAndFoundFolder] = ASSET_EXTENSION_SEPARATOR + "lostandfoundfolder.txt"; // Not sure if we'll ever see this
ASSET_TYPE_TO_EXTENSION[(sbyte)AssetType.LSLBytecode] = ASSET_EXTENSION_SEPARATOR + "bytecode.lso";
ASSET_TYPE_TO_EXTENSION[(sbyte)AssetType.LSLText] = ASSET_EXTENSION_SEPARATOR + "script.lsl";
+ ASSET_TYPE_TO_EXTENSION[(sbyte)AssetType.Mesh] = ASSET_EXTENSION_SEPARATOR + "mesh.llmesh";
ASSET_TYPE_TO_EXTENSION[(sbyte)AssetType.Notecard] = ASSET_EXTENSION_SEPARATOR + "notecard.txt";
ASSET_TYPE_TO_EXTENSION[(sbyte)AssetType.Object] = ASSET_EXTENSION_SEPARATOR + "object.xml";
ASSET_TYPE_TO_EXTENSION[(sbyte)AssetType.RootFolder] = ASSET_EXTENSION_SEPARATOR + "rootfolder.txt"; // Not sure if we'll ever see this
@@ -135,6 +136,7 @@ namespace OpenSim.Framework.Serialization
EXTENSION_TO_ASSET_TYPE[ASSET_EXTENSION_SEPARATOR + "lostandfoundfolder.txt"] = (sbyte)AssetType.LostAndFoundFolder;
EXTENSION_TO_ASSET_TYPE[ASSET_EXTENSION_SEPARATOR + "bytecode.lso"] = (sbyte)AssetType.LSLBytecode;
EXTENSION_TO_ASSET_TYPE[ASSET_EXTENSION_SEPARATOR + "script.lsl"] = (sbyte)AssetType.LSLText;
+ EXTENSION_TO_ASSET_TYPE[ASSET_EXTENSION_SEPARATOR + "mesh.llmesh"] = (sbyte)AssetType.Mesh;
EXTENSION_TO_ASSET_TYPE[ASSET_EXTENSION_SEPARATOR + "notecard.txt"] = (sbyte)AssetType.Notecard;
EXTENSION_TO_ASSET_TYPE[ASSET_EXTENSION_SEPARATOR + "object.xml"] = (sbyte)AssetType.Object;
EXTENSION_TO_ASSET_TYPE[ASSET_EXTENSION_SEPARATOR + "rootfolder.txt"] = (sbyte)AssetType.RootFolder;
diff --git a/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs b/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs
index 0c1e5e013b..ba8c1941a8 100644
--- a/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs
+++ b/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs
@@ -348,7 +348,7 @@ namespace OpenSim.Framework.Servers.HttpServer
{
try
{
- //m_log.Debug("[BASE HTTP SERVER]: Handling request to " + request.RawUrl);
+// m_log.Debug("[BASE HTTP SERVER]: Handling request to " + request.RawUrl);
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US", true);
@@ -376,7 +376,7 @@ namespace OpenSim.Framework.Servers.HttpServer
string path = request.RawUrl;
string handlerKey = GetHandlerKey(request.HttpMethod, path);
- //m_log.DebugFormat("[BASE HTTP SERVER]: Handling {0} request for {1}", request.HttpMethod, path);
+// m_log.DebugFormat("[BASE HTTP SERVER]: Handling {0} request for {1}", request.HttpMethod, path);
if (TryGetStreamHandler(handlerKey, out requestHandler))
{
diff --git a/OpenSim/Region/Application/OpenSimBase.cs b/OpenSim/Region/Application/OpenSimBase.cs
index 7e0a886e35..c5ee385af5 100644
--- a/OpenSim/Region/Application/OpenSimBase.cs
+++ b/OpenSim/Region/Application/OpenSimBase.cs
@@ -336,8 +336,8 @@ namespace OpenSim
//regionInfo.originRegionID = regionInfo.RegionID;
// set initial ServerURI
+ regionInfo.ServerURI = "http://" + regionInfo.ExternalHostName + ":" + regionInfo.InternalEndPoint.Port;
regionInfo.HttpPort = m_httpServerPort;
- regionInfo.ServerURI = "http://" + regionInfo.ExternalHostName + ":" + regionInfo.HttpPort.ToString() + "/";
regionInfo.osSecret = m_osSecret;
diff --git a/OpenSim/Region/CoreModules/Avatar/Chat/ChatModule.cs b/OpenSim/Region/CoreModules/Avatar/Chat/ChatModule.cs
index 2a590f193c..8ab43915ce 100644
--- a/OpenSim/Region/CoreModules/Avatar/Chat/ChatModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Chat/ChatModule.cs
@@ -169,7 +169,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Chat
// sanity check:
if (c.Sender == null)
{
- m_log.ErrorFormat("[CHAT] OnChatFromClient from {0} has empty Sender field!", sender);
+ m_log.ErrorFormat("[CHAT]: OnChatFromClient from {0} has empty Sender field!", sender);
return;
}
@@ -234,8 +234,12 @@ namespace OpenSim.Region.CoreModules.Avatar.Chat
if (message.Length >= 1000) // libomv limit
message = message.Substring(0, 1000);
- // m_log.DebugFormat("[CHAT]: DCTA: fromID {0} fromName {1}, cType {2}, sType {3}", fromID, fromName, c.Type, sourceType);
+// m_log.DebugFormat(
+// "[CHAT]: DCTA: fromID {0} fromName {1}, region{2}, cType {3}, sType {4}",
+// fromID, fromName, scene.RegionInfo.RegionName, c.Type, sourceType);
+ HashSet receiverIDs = new HashSet();
+
foreach (Scene s in m_scenes)
{
s.ForEachScenePresence(
@@ -250,13 +254,17 @@ namespace OpenSim.Region.CoreModules.Avatar.Chat
// objects on a parcel with access restrictions
if (c.Sender == null || Presencecheck.IsEitherBannedOrRestricted(c.Sender.AgentId) != true)
{
- TrySendChatMessage(presence, fromPos, regionPos, fromID, fromNamePrefix+fromName, c.Type, message, sourceType);
+ if (TrySendChatMessage(presence, fromPos, regionPos, fromID, fromNamePrefix + fromName, c.Type, message, sourceType))
+ receiverIDs.Add(presence.UUID);
}
}
}
);
}
+
+ (scene as Scene).EventManager.TriggerOnChatToClients(
+ fromID, receiverIDs, message, c.Type, fromPos, fromName, sourceType, ChatAudibleLevel.Fully);
}
static private Vector3 CenterOfRegion = new Vector3(128, 128, 30);
@@ -294,6 +302,8 @@ namespace OpenSim.Region.CoreModules.Avatar.Chat
}
// m_log.DebugFormat("[CHAT] Broadcast: fromID {0} fromName {1}, cType {2}, sType {3}", fromID, fromName, cType, sourceType);
+ HashSet receiverIDs = new HashSet();
+
if (c.Scene != null)
{
((Scene)c.Scene).ForEachScenePresence
@@ -314,18 +324,33 @@ namespace OpenSim.Region.CoreModules.Avatar.Chat
client.SendChatMessage(c.Message, (byte)cType, CenterOfRegion, fromName, fromID,
(byte)sourceType, (byte)ChatAudibleLevel.Fully);
+ receiverIDs.Add(presence.UUID);
}
);
+ (c.Scene as Scene).EventManager.TriggerOnChatToClients(
+ fromID, receiverIDs, c.Message, cType, CenterOfRegion, fromName, sourceType, ChatAudibleLevel.Fully);
}
}
-
- protected virtual void TrySendChatMessage(ScenePresence presence, Vector3 fromPos, Vector3 regionPos,
+ ///
+ /// Try to send a message to the given presence
+ ///
+ /// The receiver
+ ///
+ /// /param>
+ ///
+ ///
+ ///
+ ///
+ ///
+ /// true if the message was sent to the receiver, false if it was not sent due to failing a
+ /// precondition
+ protected virtual bool TrySendChatMessage(ScenePresence presence, Vector3 fromPos, Vector3 regionPos,
UUID fromAgentID, string fromName, ChatTypeEnum type,
string message, ChatSourceType src)
{
// don't send stuff to child agents
- if (presence.IsChildAgent) return;
+ if (presence.IsChildAgent) return false;
Vector3 fromRegionPos = fromPos + regionPos;
Vector3 toRegionPos = presence.AbsolutePosition +
@@ -338,12 +363,14 @@ namespace OpenSim.Region.CoreModules.Avatar.Chat
type == ChatTypeEnum.Say && dis > m_saydistance ||
type == ChatTypeEnum.Shout && dis > m_shoutdistance)
{
- return;
+ return false;
}
// TODO: should change so the message is sent through the avatar rather than direct to the ClientView
presence.ControllingClient.SendChatMessage(message, (byte) type, fromPos, fromName,
- fromAgentID,(byte)src,(byte)ChatAudibleLevel.Fully);
+ fromAgentID, (byte)src, (byte)ChatAudibleLevel.Fully);
+
+ return true;
}
Dictionary Timers = new Dictionary();
diff --git a/OpenSim/Region/CoreModules/Avatar/InstantMessage/MessageTransferModule.cs b/OpenSim/Region/CoreModules/Avatar/InstantMessage/MessageTransferModule.cs
index 80adc4648d..d8e0f968bb 100644
--- a/OpenSim/Region/CoreModules/Avatar/InstantMessage/MessageTransferModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/InstantMessage/MessageTransferModule.cs
@@ -598,7 +598,7 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage
try
{
- XmlRpcResponse GridResp = GridReq.Send(reginfo.ServerURI, 3000);
+ XmlRpcResponse GridResp = GridReq.Send("http://" + reginfo.ExternalHostName + ":" + reginfo.HttpPort, 3000);
Hashtable responseData = (Hashtable)GridResp.Value;
@@ -620,8 +620,8 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage
}
catch (WebException e)
{
- m_log.ErrorFormat("[GRID INSTANT MESSAGE]: Error sending message to {0}} the host didn't respond ({2})",
- reginfo.ServerURI, e.Message);
+ m_log.ErrorFormat("[GRID INSTANT MESSAGE]: Error sending message to http://{0}:{1} the host didn't respond ({2})",
+ reginfo.ExternalHostName, reginfo.HttpPort, e.Message);
}
return false;
diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs
index c1df827069..55005572ba 100644
--- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs
@@ -33,6 +33,7 @@ using System.Reflection;
using System.Threading;
using System.Text;
using System.Xml;
+using System.Xml.Linq;
using log4net;
using OpenMetaverse;
using OpenSim.Framework;
@@ -50,6 +51,12 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
{
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
+ ///
+ /// The maximum major version of archive that we can read. Minor versions shouldn't need a max number since version
+ /// bumps here should be compatible.
+ ///
+ public static int MAX_MAJOR_VERSION = 0;
+
protected TarArchiveReader archive;
private UserAccount m_userInfo;
@@ -133,7 +140,11 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
while ((data = archive.ReadEntry(out filePath, out entryType)) != null)
{
- if (filePath.StartsWith(ArchiveConstants.ASSETS_PATH))
+ if (filePath == ArchiveConstants.CONTROL_FILE_PATH)
+ {
+ LoadControlFile(filePath, data);
+ }
+ else if (filePath.StartsWith(ArchiveConstants.ASSETS_PATH))
{
if (LoadAsset(filePath, data))
successfulAssetRestores++;
@@ -461,5 +472,29 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
return false;
}
}
+
+ ///
+ /// Load control file
+ ///
+ ///
+ ///
+ protected void LoadControlFile(string path, byte[] data)
+ {
+ XDocument doc = XDocument.Parse(Encoding.ASCII.GetString(data));
+ XElement archiveElement = doc.Element("archive");
+ int majorVersion = int.Parse(archiveElement.Attribute("major_version").Value);
+ int minorVersion = int.Parse(archiveElement.Attribute("minor_version").Value);
+ string version = string.Format("{0}.{1}", majorVersion, minorVersion);
+
+ if (majorVersion > MAX_MAJOR_VERSION)
+ {
+ throw new Exception(
+ string.Format(
+ "The IAR you are trying to load has major version number of {0} but this version of OpenSim can only load IARs with major version number {1} and below",
+ majorVersion, MAX_MAJOR_VERSION));
+ }
+
+ m_log.InfoFormat("[INVENTORY ARCHIVER]: Loading IAR with version {0}", version);
+ }
}
}
\ No newline at end of file
diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs
index bae5a7a289..249a8b4b9c 100644
--- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs
@@ -123,9 +123,6 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
try
{
- // We're almost done. Just need to write out the control file now
- m_archiveWriter.WriteFile(ArchiveConstants.CONTROL_FILE_PATH, Create0p1ControlFile());
- m_log.InfoFormat("[ARCHIVER]: Added control file to archive.");
m_archiveWriter.Close();
}
catch (Exception e)
@@ -216,7 +213,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
public void Execute()
{
try
- {
+ {
InventoryFolderBase inventoryFolder = null;
InventoryItemBase inventoryItem = null;
InventoryFolderBase rootFolder = m_scene.InventoryService.GetRootFolder(m_userInfo.PrincipalID);
@@ -277,6 +274,11 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
m_archiveWriter = new TarArchiveWriter(m_saveStream);
+ // Write out control file. This has to be done first so that subsequent loaders will see this file first
+ // XXX: I know this is a weak way of doing it since external non-OAR aware tar executables will not do this
+ m_archiveWriter.WriteFile(ArchiveConstants.CONTROL_FILE_PATH, Create0p1ControlFile());
+ m_log.InfoFormat("[INVENTORY ARCHIVER]: Added control file to archive.");
+
if (inventoryFolder != null)
{
m_log.DebugFormat(
@@ -399,13 +401,17 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
///
public static string Create0p1ControlFile()
{
+ int majorVersion = 0, minorVersion = 1;
+
+ m_log.InfoFormat("[INVENTORY ARCHIVER]: Creating version {0}.{1} IAR", majorVersion, minorVersion);
+
StringWriter sw = new StringWriter();
XmlTextWriter xtw = new XmlTextWriter(sw);
xtw.Formatting = Formatting.Indented;
xtw.WriteStartDocument();
xtw.WriteStartElement("archive");
- xtw.WriteAttributeString("major_version", "0");
- xtw.WriteAttributeString("minor_version", "1");
+ xtw.WriteAttributeString("major_version", majorVersion.ToString());
+ xtw.WriteAttributeString("minor_version", minorVersion.ToString());
xtw.WriteEndElement();
xtw.Flush();
diff --git a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
index 9a0e7351e8..2921b0d07a 100644
--- a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
@@ -327,21 +327,43 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
// OK, it got this agent. Let's close some child agents
sp.CloseChildAgents(newRegionX, newRegionY);
- IClientIPEndpoint ipepClient;
+
if (NeedsNewAgent(oldRegionX, newRegionX, oldRegionY, newRegionY))
{
//sp.ControllingClient.SendTeleportProgress(teleportFlags, "Creating agent...");
+
#region IP Translation for NAT
- // Uses ipepClient above
+ IClientIPEndpoint ipepClient;
if (sp.ClientView.TryGet(out ipepClient))
{
- endPoint.Address = NetworkUtil.GetIPFor(ipepClient.EndPoint, endPoint.Address);
+ capsPath
+ = "http://"
+ + NetworkUtil.GetHostFor(ipepClient.EndPoint, finalDestination.ExternalHostName)
+ + ":"
+ + finalDestination.HttpPort
+ + CapsUtil.GetCapsSeedPath(agentCircuit.CapsPath);
+ }
+ else
+ {
+ capsPath
+ = "http://"
+ + finalDestination.ExternalHostName
+ + ":"
+ + finalDestination.HttpPort
+ + CapsUtil.GetCapsSeedPath(agentCircuit.CapsPath);
}
#endregion
- capsPath = finalDestination.ServerURI + CapsUtil.GetCapsSeedPath(agentCircuit.CapsPath);
if (eq != null)
{
+ #region IP Translation for NAT
+ // Uses ipepClient above
+ if (sp.ClientView.TryGet(out ipepClient))
+ {
+ endPoint.Address = NetworkUtil.GetIPFor(ipepClient.EndPoint, endPoint.Address);
+ }
+ #endregion
+
eq.EnableSimulator(destinationHandle, endPoint, sp.UUID);
// ES makes the client send a UseCircuitCode message to the destination,
@@ -360,7 +382,8 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
else
{
agentCircuit.CapsPath = sp.Scene.CapsModule.GetChildSeed(sp.UUID, reg.RegionHandle);
- capsPath = finalDestination.ServerURI + CapsUtil.GetCapsSeedPath(agentCircuit.CapsPath);
+ capsPath = "http://" + finalDestination.ExternalHostName + ":" + finalDestination.HttpPort
+ + "/CAPS/" + agentCircuit.CapsPath + "0000/";
}
// Expect avatar crossing is a heavy-duty function at the destination.
@@ -495,8 +518,8 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
protected virtual void SetCallbackURL(AgentData agent, RegionInfo region)
{
- agent.CallbackURI = region.ServerURI + "agent/" + agent.AgentID.ToString() + "/" + region.RegionID.ToString() + "/release/";
- m_log.Debug("Set callback URL to " + agent.CallbackURI);
+ agent.CallbackURI = "http://" + region.ExternalHostName + ":" + region.HttpPort +
+ "/agent/" + agent.AgentID.ToString() + "/" + region.RegionID.ToString() + "/release/";
}
@@ -839,8 +862,8 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
cAgent.Position = pos;
if (isFlying)
cAgent.ControlFlags |= (uint)AgentManager.ControlFlags.AGENT_CONTROL_FLY;
- cAgent.CallbackURI = m_scene.RegionInfo.ServerURI +
- "agent/" + agent.UUID.ToString() + "/" + m_scene.RegionInfo.RegionID.ToString() + "/release/";
+ cAgent.CallbackURI = "http://" + m_scene.RegionInfo.ExternalHostName + ":" + m_scene.RegionInfo.HttpPort +
+ "/agent/" + agent.UUID.ToString() + "/" + m_scene.RegionInfo.RegionID.ToString() + "/release/";
if (!m_scene.SimulationService.UpdateAgent(neighbourRegion, cAgent))
{
@@ -865,7 +888,10 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
neighbourRegion.RegionHandle);
return agent;
}
- string capsPath = neighbourRegion.ServerURI + CapsUtil.GetCapsSeedPath(agentcaps);
+ // TODO Should construct this behind a method
+ string capsPath =
+ "http://" + neighbourRegion.ExternalHostName + ":" + neighbourRegion.HttpPort
+ + "/CAPS/" + agentcaps /*circuitdata.CapsPath*/ + "0000/";
m_log.DebugFormat("[ENTITY TRANSFER MODULE]: Sending new CAPS seed url {0} to client {1}", capsPath, agent.UUID);
@@ -1193,7 +1219,8 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
y = y / Constants.RegionSize;
m_log.Info("[ENTITY TRANSFER MODULE]: Starting to inform client about neighbour " + x + ", " + y + "(" + endPoint.ToString() + ")");
- string capsPath = reg.ServerURI + CapsUtil.GetCapsSeedPath(a.CapsPath);
+ string capsPath = "http://" + reg.ExternalHostName + ":" + reg.HttpPort
+ + "/CAPS/" + a.CapsPath + "0000/";
string reason = String.Empty;
diff --git a/OpenSim/Region/CoreModules/InterGrid/OpenGridProtocolModule.cs b/OpenSim/Region/CoreModules/InterGrid/OpenGridProtocolModule.cs
index 2dd7767d76..fd0e879e05 100644
--- a/OpenSim/Region/CoreModules/InterGrid/OpenGridProtocolModule.cs
+++ b/OpenSim/Region/CoreModules/InterGrid/OpenGridProtocolModule.cs
@@ -595,12 +595,12 @@ namespace OpenSim.Region.CoreModules.InterGrid
// DEPRECATED
responseMap["seed_capability"]
= OSD.FromString(
- regionCapsHttpProtocol + httpaddr + ":" + reg.HttpPort + "/" + CapsUtil.GetCapsSeedPath(userCap.CapsObjectPath));
+ regionCapsHttpProtocol + httpaddr + ":" + reg.HttpPort + CapsUtil.GetCapsSeedPath(userCap.CapsObjectPath));
// REPLACEMENT
responseMap["region_seed_capability"]
= OSD.FromString(
- regionCapsHttpProtocol + httpaddr + ":" + reg.HttpPort + "/" + CapsUtil.GetCapsSeedPath(userCap.CapsObjectPath));
+ regionCapsHttpProtocol + httpaddr + ":" + reg.HttpPort + CapsUtil.GetCapsSeedPath(userCap.CapsObjectPath));
responseMap["rez_avatar"] = OSD.FromString(rezHttpProtocol + httpaddr + ":" + urlport + rezAvatarPath);
responseMap["rez_avatar/rez"] = OSD.FromString(rezHttpProtocol + httpaddr + ":" + urlport + rezAvatarPath);
diff --git a/OpenSim/Region/CoreModules/World/Archiver/ArchiveReadRequest.cs b/OpenSim/Region/CoreModules/World/Archiver/ArchiveReadRequest.cs
index 7d77a7715f..1f85278863 100644
--- a/OpenSim/Region/CoreModules/World/Archiver/ArchiveReadRequest.cs
+++ b/OpenSim/Region/CoreModules/World/Archiver/ArchiveReadRequest.cs
@@ -53,7 +53,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
///
- /// The maximum major version of OAR that we can read. Minor versions shouldn't need a number since version
+ /// The maximum major version of OAR that we can read. Minor versions shouldn't need a max number since version
/// bumps here should be compatible.
///
public static int MAX_MAJOR_VERSION = 0;
@@ -499,17 +499,11 @@ namespace OpenSim.Region.CoreModules.World.Archiver
///
///
///
- private void LoadControlFile(string path, byte[] data)
+ protected void LoadControlFile(string path, byte[] data)
{
- //Create the XmlNamespaceManager.
- NameTable nt = new NameTable();
- XmlNamespaceManager nsmgr = new XmlNamespaceManager(nt);
-
- // Create the XmlParserContext.
+ XmlNamespaceManager nsmgr = new XmlNamespaceManager(new NameTable());
XmlParserContext context = new XmlParserContext(null, nsmgr, null, XmlSpace.None);
-
- XmlTextReader xtr
- = new XmlTextReader(Encoding.ASCII.GetString(data), XmlNodeType.Document, context);
+ XmlTextReader xtr = new XmlTextReader(Encoding.ASCII.GetString(data), XmlNodeType.Document, context);
RegionSettings currentRegionSettings = m_scene.RegionInfo.RegionSettings;
@@ -548,10 +542,9 @@ namespace OpenSim.Region.CoreModules.World.Archiver
currentRegionSettings.LoadedCreationID = xtr.ReadElementContentAsString();
}
}
-
}
currentRegionSettings.Save();
}
}
-}
+}
\ No newline at end of file
diff --git a/OpenSim/Region/CoreModules/World/Archiver/ArchiveWriteRequestPreparation.cs b/OpenSim/Region/CoreModules/World/Archiver/ArchiveWriteRequestPreparation.cs
index 43789af9ec..1687d06350 100644
--- a/OpenSim/Region/CoreModules/World/Archiver/ArchiveWriteRequestPreparation.cs
+++ b/OpenSim/Region/CoreModules/World/Archiver/ArchiveWriteRequestPreparation.cs
@@ -171,7 +171,8 @@ namespace OpenSim.Region.CoreModules.World.Archiver
m_log.InfoFormat("[ARCHIVER]: Creating archive file. This may take some time.");
- // Write out control file
+ // Write out control file. This has to be done first so that subsequent loaders will see this file first
+ // XXX: I know this is a weak way of doing it since external non-OAR aware tar executables will not do this
archiveWriter.WriteFile(ArchiveConstants.CONTROL_FILE_PATH, Create0p2ControlFile(options));
m_log.InfoFormat("[ARCHIVER]: Added control file to archive.");
diff --git a/OpenSim/Region/CoreModules/World/Archiver/AssetsRequest.cs b/OpenSim/Region/CoreModules/World/Archiver/AssetsRequest.cs
index a1451ce705..d4a09b45f7 100644
--- a/OpenSim/Region/CoreModules/World/Archiver/AssetsRequest.cs
+++ b/OpenSim/Region/CoreModules/World/Archiver/AssetsRequest.cs
@@ -188,7 +188,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver
m_log.ErrorFormat(
"[ARCHIVER]: (... {0} more not shown)", uuids.Count - MAX_UUID_DISPLAY_ON_TIMEOUT);
- m_log.Error("[ARCHIVER]: OAR save aborted.");
+ m_log.Error("[ARCHIVER]: OAR save aborted. PLEASE DO NOT USE THIS OAR, IT WILL BE INCOMPLETE.");
}
catch (Exception e)
{
diff --git a/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs b/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs
index fdbbccfbab..a182eeae7d 100644
--- a/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs
+++ b/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs
@@ -147,7 +147,7 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
string regionimage = "regionImage" + m_scene.RegionInfo.RegionID.ToString();
regionimage = regionimage.Replace("-", "");
- m_log.Info("[WORLD MAP]: JPEG Map location: " + m_scene.RegionInfo.ServerURI + "/index.php?method=" + regionimage);
+ m_log.Info("[WORLD MAP]: JPEG Map location: http://" + m_scene.RegionInfo.ExternalEndPoint.Address.ToString() + ":" + m_scene.RegionInfo.HttpPort.ToString() + "/index.php?method=" + regionimage);
MainServer.Instance.AddHTTPHandler(regionimage, OnHTTPGetMapImage);
MainServer.Instance.AddLLSDHandler(
@@ -579,7 +579,7 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
if (mreg != null)
{
- httpserver = mreg.ServerURI + "MAP/MapItems/" + regionhandle.ToString();
+ httpserver = "http://" + mreg.ExternalEndPoint.Address.ToString() + ":" + mreg.HttpPort + "/MAP/MapItems/" + regionhandle.ToString();
lock (m_cachedRegionMapItemsAddress)
{
if (!m_cachedRegionMapItemsAddress.ContainsKey(regionhandle))
diff --git a/OpenSim/Region/Framework/Scenes/EventManager.cs b/OpenSim/Region/Framework/Scenes/EventManager.cs
index e923932690..33069dab3c 100644
--- a/OpenSim/Region/Framework/Scenes/EventManager.cs
+++ b/OpenSim/Region/Framework/Scenes/EventManager.cs
@@ -296,6 +296,17 @@ namespace OpenSim.Region.Framework.Scenes
public delegate void ChatFromClientEvent(Object sender, OSChatMessage chat);
public event ChatFromClientEvent OnChatFromClient;
+ ///
+ /// ChatToClientsEvent is triggered via ChatModule (or
+ /// substitutes thereof) when a chat message is actually sent to clients. Clients will only be sent a
+ /// received chat message if they satisfy various conditions (within audible range, etc.)
+ ///
+ public delegate void ChatToClientsEvent(
+ UUID senderID, HashSet receiverIDs,
+ string message, ChatTypeEnum type, Vector3 fromPos, string fromName,
+ ChatSourceType src, ChatAudibleLevel level);
+ public event ChatToClientsEvent OnChatToClients;
+
///
/// ChatBroadcastEvent is called via Scene when a broadcast chat message
/// from world comes in
@@ -1627,6 +1638,30 @@ namespace OpenSim.Region.Framework.Scenes
}
}
}
+
+ public void TriggerOnChatToClients(
+ UUID senderID, HashSet receiverIDs,
+ string message, ChatTypeEnum type, Vector3 fromPos, string fromName,
+ ChatSourceType src, ChatAudibleLevel level)
+ {
+ ChatToClientsEvent handler = OnChatToClients;
+ if (handler != null)
+ {
+ foreach (ChatToClientsEvent d in handler.GetInvocationList())
+ {
+ try
+ {
+ d(senderID, receiverIDs, message, type, fromPos, fromName, src, level);
+ }
+ catch (Exception e)
+ {
+ m_log.ErrorFormat(
+ "[EVENT MANAGER]: Delegate for TriggerOnChatToClients failed - continuing. {0} {1}",
+ e.Message, e.StackTrace);
+ }
+ }
+ }
+ }
public void TriggerOnChatBroadcast(Object sender, OSChatMessage chat)
{
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
index 06e3c0ea07..618f4258eb 100644
--- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs
+++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
@@ -3329,8 +3329,6 @@ namespace OpenSim.Region.Framework.Scenes
public void CopyTo(AgentData cAgent)
{
- cAgent.CallbackURI = m_callbackURI;
-
cAgent.AgentID = UUID;
cAgent.RegionID = Scene.RegionInfo.RegionID;
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
index f55bd120b7..3249ae2a2d 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
@@ -9637,10 +9637,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
// do that one last, it will cause a ParcelPropertiesUpdate
landObject.SetMediaUrl(url);
- // now send to all (non-child) agents
+ // now send to all (non-child) agents in the parcel
World.ForEachScenePresence(delegate(ScenePresence sp)
{
- if (!sp.IsChildAgent)
+ if (!sp.IsChildAgent && (sp.currentParcelUUID == landData.GlobalID))
{
sp.ControllingClient.SendParcelMediaUpdate(landData.MediaURL,
landData.MediaID,
@@ -9670,10 +9670,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
// the commandList contained a start/stop/... command, too
if (presence == null)
{
- // send to all (non-child) agents
+ // send to all (non-child) agents in the parcel
World.ForEachScenePresence(delegate(ScenePresence sp)
{
- if (!sp.IsChildAgent)
+ if (!sp.IsChildAgent && (sp.currentParcelUUID == landData.GlobalID))
{
sp.ControllingClient.SendParcelMediaCommand(0x4, // TODO what is this?
(ParcelMediaCommandEnum)commandToSend,
diff --git a/OpenSim/Server/Handlers/Hypergrid/HomeAgentHandlers.cs b/OpenSim/Server/Handlers/Hypergrid/HomeAgentHandlers.cs
index a1bcba6a37..f64a07973e 100644
--- a/OpenSim/Server/Handlers/Hypergrid/HomeAgentHandlers.cs
+++ b/OpenSim/Server/Handlers/Hypergrid/HomeAgentHandlers.cs
@@ -124,7 +124,6 @@ namespace OpenSim.Server.Handlers.Hypergrid
UUID uuid = UUID.Zero;
string regionname = string.Empty;
string gatekeeper_host = string.Empty;
- string server_uri = string.Empty;
int gatekeeper_port = 0;
IPEndPoint client_ipaddress = null;
@@ -174,7 +173,6 @@ namespace OpenSim.Server.Handlers.Hypergrid
destination.RegionLocX = x;
destination.RegionLocY = y;
destination.RegionName = regionname;
-
AgentCircuitData aCircuit = new AgentCircuitData();
try
diff --git a/OpenSim/Services/Connectors/Hypergrid/GatekeeperServiceConnector.cs b/OpenSim/Services/Connectors/Hypergrid/GatekeeperServiceConnector.cs
index 4231be1f66..479a80e297 100644
--- a/OpenSim/Services/Connectors/Hypergrid/GatekeeperServiceConnector.cs
+++ b/OpenSim/Services/Connectors/Hypergrid/GatekeeperServiceConnector.cs
@@ -63,12 +63,12 @@ namespace OpenSim.Services.Connectors.Hypergrid
protected override string AgentPath()
{
- return "foreignagent/";
+ return "/foreignagent/";
}
protected override string ObjectPath()
{
- return "foreignobject/";
+ return "/foreignobject/";
}
public bool LinkRegion(GridRegion info, out UUID regionID, out ulong realHandle, out string externalName, out string imageURL, out string reason)
@@ -86,11 +86,12 @@ namespace OpenSim.Services.Connectors.Hypergrid
paramList.Add(hash);
XmlRpcRequest request = new XmlRpcRequest("link_region", paramList);
- m_log.Debug("[GATEKEEPER SERVICE CONNECTOR]: Linking to " + info.ServerURI);
+ string uri = "http://" + ((info.ServerURI != null && info.ServerURI != string.Empty && !info.ServerURI.StartsWith("http:")) ? info.ServerURI : info.ExternalEndPoint.Address + ":" + info.HttpPort + "/");
+ m_log.Debug("[GATEKEEPER SERVICE CONNECTOR]: Linking to " + uri);
XmlRpcResponse response = null;
try
{
- response = request.Send(info.ServerURI, 10000);
+ response = request.Send(uri, 10000);
}
catch (Exception e)
{
@@ -107,8 +108,8 @@ namespace OpenSim.Services.Connectors.Hypergrid
}
hash = (Hashtable)response.Value;
- foreach (Object o in hash)
- m_log.Debug(">> " + ((DictionaryEntry)o).Key + ":" + ((DictionaryEntry)o).Value);
+ //foreach (Object o in hash)
+ // m_log.Debug(">> " + ((DictionaryEntry)o).Key + ":" + ((DictionaryEntry)o).Value);
try
{
bool success = false;
@@ -116,20 +117,16 @@ namespace OpenSim.Services.Connectors.Hypergrid
if (success)
{
UUID.TryParse((string)hash["uuid"], out regionID);
- //m_log.Debug(">> HERE, uuid: " + regionID);
+ //m_log.Debug(">> HERE, uuid: " + uuid);
if ((string)hash["handle"] != null)
{
realHandle = Convert.ToUInt64((string)hash["handle"]);
//m_log.Debug(">> HERE, realHandle: " + realHandle);
}
- if (hash["region_image"] != null) {
+ if (hash["region_image"] != null)
imageURL = (string)hash["region_image"];
- //m_log.Debug(">> HERE, imageURL: " + imageURL);
- }
- if (hash["external_name"] != null) {
+ if (hash["external_name"] != null)
externalName = (string)hash["external_name"];
- //m_log.Debug(">> HERE, externalName: " + externalName);
- }
}
}
@@ -191,15 +188,16 @@ namespace OpenSim.Services.Connectors.Hypergrid
paramList.Add(hash);
XmlRpcRequest request = new XmlRpcRequest("get_region", paramList);
- //m_log.Debug("[GATEKEEPER SERVICE CONNECTOR]: contacting " + gatekeeper.ServerURI);
+ string uri = "http://" + ((gatekeeper.ServerURI != null && gatekeeper.ServerURI != string.Empty && !gatekeeper.ServerURI.StartsWith("http:")) ? gatekeeper.ServerURI : gatekeeper.ExternalEndPoint.Address + ":" + gatekeeper.HttpPort + "/");
+ m_log.Debug("[GATEKEEPER SERVICE CONNECTOR]: contacting " + uri);
XmlRpcResponse response = null;
try
{
- response = request.Send(gatekeeper.ServerURI, 10000);
+ response = request.Send(uri, 10000);
}
catch (Exception e)
{
- //m_log.Debug("[GATEKEEPER SERVICE CONNECTOR]: Exception " + e.Message);
+ m_log.Debug("[GATEKEEPER SERVICE CONNECTOR]: Exception " + e.Message);
return null;
}
@@ -238,24 +236,21 @@ namespace OpenSim.Services.Connectors.Hypergrid
if (hash["region_name"] != null)
{
region.RegionName = (string)hash["region_name"];
- //m_log.Debug(">> HERE, region_name: " + region.RegionName);
+ //m_log.Debug(">> HERE, name: " + region.RegionName);
}
if (hash["hostname"] != null)
region.ExternalHostName = (string)hash["hostname"];
- //m_log.Debug(">> HERE, hostname: " + region.ExternalHostName);
if (hash["http_port"] != null)
{
uint p = 0;
UInt32.TryParse((string)hash["http_port"], out p);
region.HttpPort = p;
- //m_log.Debug(">> HERE, http_port: " + region.HttpPort);
}
if (hash["internal_port"] != null)
{
int p = 0;
Int32.TryParse((string)hash["internal_port"], out p);
region.InternalEndPoint = new IPEndPoint(IPAddress.Parse("0.0.0.0"), p);
- //m_log.Debug(">> HERE, internal_port: " + region.InternalEndPoint);
}
// Successful return
diff --git a/OpenSim/Services/Connectors/Land/LandServiceConnector.cs b/OpenSim/Services/Connectors/Land/LandServiceConnector.cs
index 10499e28b9..539b2ccb89 100644
--- a/OpenSim/Services/Connectors/Land/LandServiceConnector.cs
+++ b/OpenSim/Services/Connectors/Land/LandServiceConnector.cs
@@ -84,7 +84,8 @@ namespace OpenSim.Services.Connectors
if (info != null) // just to be sure
{
XmlRpcRequest request = new XmlRpcRequest("land_data", paramList);
- XmlRpcResponse response = request.Send(info.ServerURI, 10000);
+ string uri = "http://" + info.ExternalEndPoint.Address + ":" + info.HttpPort + "/";
+ XmlRpcResponse response = request.Send(uri, 10000);
if (response.IsFault)
{
m_log.ErrorFormat("[LAND CONNECTOR]: remote call returned an error: {0}", response.FaultString);
diff --git a/OpenSim/Services/Connectors/Neighbour/NeighbourServiceConnector.cs b/OpenSim/Services/Connectors/Neighbour/NeighbourServiceConnector.cs
index 9c57a40701..0a982f8d57 100644
--- a/OpenSim/Services/Connectors/Neighbour/NeighbourServiceConnector.cs
+++ b/OpenSim/Services/Connectors/Neighbour/NeighbourServiceConnector.cs
@@ -87,7 +87,7 @@ namespace OpenSim.Services.Connectors
public bool DoHelloNeighbourCall(GridRegion region, RegionInfo thisRegion)
{
- string uri = region.ServerURI + "/region/" + thisRegion.RegionID + "/";
+ string uri = "http://" + region.ExternalEndPoint.Address + ":" + region.HttpPort + "/region/" + thisRegion.RegionID + "/";
//m_log.Debug(" >>> DoHelloNeighbourCall <<< " + uri);
WebRequest HelloNeighbourRequest = WebRequest.Create(uri);
diff --git a/OpenSim/Services/Connectors/SimianGrid/SimianGridServiceConnector.cs b/OpenSim/Services/Connectors/SimianGrid/SimianGridServiceConnector.cs
index f86eba31f4..4fc2a6d1c7 100644
--- a/OpenSim/Services/Connectors/SimianGrid/SimianGridServiceConnector.cs
+++ b/OpenSim/Services/Connectors/SimianGrid/SimianGridServiceConnector.cs
@@ -147,6 +147,8 @@ namespace OpenSim.Services.Connectors.SimianGrid
Vector3d minPosition = new Vector3d(regionInfo.RegionLocX, regionInfo.RegionLocY, 0.0);
Vector3d maxPosition = minPosition + new Vector3d(Constants.RegionSize, Constants.RegionSize, 4096.0);
+ string httpAddress = "http://" + regionInfo.ExternalHostName + ":" + regionInfo.HttpPort + "/";
+
OSDMap extraData = new OSDMap
{
{ "ServerURI", OSD.FromString(regionInfo.ServerURI) },
@@ -168,7 +170,7 @@ namespace OpenSim.Services.Connectors.SimianGrid
{ "Name", regionInfo.RegionName },
{ "MinPosition", minPosition.ToString() },
{ "MaxPosition", maxPosition.ToString() },
- { "Address", regionInfo.ServerURI },
+ { "Address", httpAddress },
{ "Enabled", "1" },
{ "ExtraData", OSDParser.SerializeJsonString(extraData) }
};
diff --git a/OpenSim/Services/Connectors/Simulation/SimulationServiceConnector.cs b/OpenSim/Services/Connectors/Simulation/SimulationServiceConnector.cs
index f855fdeead..385ba31bba 100644
--- a/OpenSim/Services/Connectors/Simulation/SimulationServiceConnector.cs
+++ b/OpenSim/Services/Connectors/Simulation/SimulationServiceConnector.cs
@@ -72,7 +72,7 @@ namespace OpenSim.Services.Connectors.Simulation
protected virtual string AgentPath()
{
- return "agent/";
+ return "/agent/";
}
public bool CreateAgent(GridRegion destination, AgentCircuitData aCircuit, uint flags, out string reason)
@@ -104,7 +104,26 @@ namespace OpenSim.Services.Connectors.Simulation
return false;
}
- string uri = destination.ServerURI + AgentPath() + aCircuit.AgentID + "/";
+ string uri = string.Empty;
+
+ // HACK -- Simian grid make it work!!!
+ if (destination.ServerURI != null && destination.ServerURI != string.Empty && !destination.ServerURI.StartsWith("http:"))
+ uri = "http://" + destination.ServerURI + AgentPath() + aCircuit.AgentID + "/";
+ else
+ {
+ try
+ {
+ uri = "http://" + destination.ExternalEndPoint.Address + ":" + destination.HttpPort + AgentPath() + aCircuit.AgentID + "/";
+ }
+ catch (Exception e)
+ {
+ m_log.Debug("[REMOTE SIMULATION CONNECTOR]: Unable to resolve external endpoint on agent create. Reason: " + e.Message);
+ reason = e.Message;
+ return false;
+ }
+ }
+
+ //Console.WriteLine(" >>> DoCreateChildAgentCall <<< " + uri);
AgentCreateRequest = (HttpWebRequest)WebRequest.Create(uri);
AgentCreateRequest.Method = "POST";
@@ -258,7 +277,17 @@ namespace OpenSim.Services.Connectors.Simulation
private bool UpdateAgent(GridRegion destination, IAgentData cAgentData)
{
// Eventually, we want to use a caps url instead of the agentID
- string uri = destination.ServerURI + AgentPath() + cAgentData.AgentID + "/";
+ string uri = string.Empty;
+ try
+ {
+ uri = "http://" + destination.ExternalEndPoint.Address + ":" + destination.HttpPort + AgentPath() + cAgentData.AgentID + "/";
+ }
+ catch (Exception e)
+ {
+ m_log.Debug("[REMOTE SIMULATION CONNECTOR]: Unable to resolve external endpoint on agent update. Reason: " + e.Message);
+ return false;
+ }
+ //Console.WriteLine(" >>> DoAgentUpdateCall <<< " + uri);
HttpWebRequest ChildUpdateRequest = (HttpWebRequest)WebRequest.Create(uri);
ChildUpdateRequest.Method = "PUT";
@@ -358,7 +387,8 @@ namespace OpenSim.Services.Connectors.Simulation
agent = null;
if (ext == null) return false;
// Eventually, we want to use a caps url instead of the agentID
- string uri = destination.ServerURI + AgentPath() + id + "/" + destination.RegionID.ToString() + "/";
+ string uri = "http://" + destination.ExternalEndPoint.Address + ":" + destination.HttpPort + AgentPath() + id + "/" + destination.RegionID.ToString() + "/";
+ //Console.WriteLine(" >>> DoRetrieveRootAgentCall <<< " + uri);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
request.Method = "GET";
@@ -379,6 +409,7 @@ namespace OpenSim.Services.Connectors.Simulation
sr = new StreamReader(webResponse.GetResponseStream());
reply = sr.ReadToEnd().Trim();
+ //Console.WriteLine("[REMOTE SIMULATION CONNECTOR]: ChilAgentUpdate reply was " + reply);
}
catch (WebException ex)
@@ -399,6 +430,7 @@ namespace OpenSim.Services.Connectors.Simulation
OSDMap args = Util.GetOSDMap(reply);
if (args == null)
{
+ //Console.WriteLine("[REMOTE SIMULATION CONNECTOR]: Error getting OSDMap from reply");
return false;
}
@@ -407,6 +439,7 @@ namespace OpenSim.Services.Connectors.Simulation
return true;
}
+ //Console.WriteLine("[REMOTE SIMULATION CONNECTOR]: DoRetrieveRootAgentCall returned status " + webResponse.StatusCode);
return false;
}
@@ -448,8 +481,18 @@ namespace OpenSim.Services.Connectors.Simulation
private bool CloseAgent(GridRegion destination, UUID id, bool ChildOnly)
{
- string uri = destination.ServerURI + AgentPath() + id + "/" + destination.RegionID.ToString() + "/";
+ string uri = string.Empty;
+ try
+ {
+ uri = "http://" + destination.ExternalEndPoint.Address + ":" + destination.HttpPort + AgentPath() + id + "/" + destination.RegionID.ToString() + "/";
+ }
+ catch (Exception e)
+ {
+ m_log.Debug("[REMOTE SIMULATION CONNECTOR]: Unable to resolve external endpoint on agent close. Reason: " + e.Message);
+ return false;
+ }
+ //Console.WriteLine(" >>> DoCloseAgentCall <<< " + uri);
WebRequest request = WebRequest.Create(uri);
request.Method = "DELETE";
@@ -511,7 +554,7 @@ namespace OpenSim.Services.Connectors.Simulation
IPEndPoint ext = destination.ExternalEndPoint;
if (ext == null) return false;
string uri
- = destination.ServerURI + ObjectPath() + sog.UUID + "/";
+ = "http://" + destination.ExternalEndPoint.Address + ":" + destination.HttpPort + ObjectPath() + sog.UUID + "/";
//m_log.Debug(" >>> DoCreateObjectCall <<< " + uri);
WebRequest ObjectCreateRequest = WebRequest.Create(uri);
diff --git a/OpenSim/Services/GridService/GridService.cs b/OpenSim/Services/GridService/GridService.cs
index 125c2be8cf..e7988d6e93 100644
--- a/OpenSim/Services/GridService/GridService.cs
+++ b/OpenSim/Services/GridService/GridService.cs
@@ -479,7 +479,7 @@ namespace OpenSim.Services.GridService
OpenSim.Data.RegionFlags flags = (OpenSim.Data.RegionFlags)Convert.ToInt32(r.Data["flags"]);
MainConsole.Instance.Output(String.Format("{0,-20} {1}\n{2,-20} {3}\n{4,-39} {5}\n\n",
r.RegionName, r.RegionID,
- String.Format("{0},{1}", r.posX, r.posY), r.Data["serverURI"],
+ String.Format("{0},{1}", r.posX, r.posY), "http://" + r.Data["serverIP"].ToString() + ":" + r.Data["serverPort"].ToString(),
r.Data["owner_uuid"].ToString(), flags.ToString()));
}
return;
diff --git a/OpenSim/Services/GridService/HypergridLinker.cs b/OpenSim/Services/GridService/HypergridLinker.cs
index 74e864b8aa..b86fb6f01c 100644
--- a/OpenSim/Services/GridService/HypergridLinker.cs
+++ b/OpenSim/Services/GridService/HypergridLinker.cs
@@ -127,7 +127,7 @@ namespace OpenSim.Services.GridService
if (MainConsole.Instance != null)
{
MainConsole.Instance.Commands.AddCommand("hypergrid", false, "link-region",
- "link-region [] ",
+ "link-region :[:] ",
"Link a hypergrid region", RunCommand);
MainConsole.Instance.Commands.AddCommand("hypergrid", false, "unlink-region",
"unlink-region or : ",
@@ -198,7 +198,11 @@ namespace OpenSim.Services.GridService
return null;
}
- public bool TryCreateLink(UUID scopeID, int xloc, int yloc, string externalRegionName, uint externalPort, string externalHostName, out GridRegion regInfo, out string reason)
+
+
+ // From the command line and the 2 above
+ public bool TryCreateLink(UUID scopeID, int xloc, int yloc,
+ string externalRegionName, uint externalPort, string externalHostName, out GridRegion regInfo, out string reason)
{
m_log.DebugFormat("[HYPERGRID LINKER]: Link to {0}:{1}:{2}, in {3}-{4}", externalHostName, externalPort, externalRegionName, xloc, yloc);
@@ -213,11 +217,8 @@ namespace OpenSim.Services.GridService
// Big HACK for Simian Grid !!!
// We need to clean up all URLs used in OpenSim !!!
- if (externalHostName.Contains("/")) {
+ if (externalHostName.Contains("/"))
regInfo.ServerURI = externalHostName;
- } else {
- regInfo.ServerURI = "http://" + externalHostName + ":" + externalPort.ToString();
- }
try
{
@@ -508,16 +509,12 @@ namespace OpenSim.Services.GridService
int xloc, yloc;
uint externalPort;
string externalHostName;
- string serverURI;
try
{
xloc = Convert.ToInt32(cmdparams[0]);
yloc = Convert.ToInt32(cmdparams[1]);
externalPort = Convert.ToUInt32(cmdparams[3]);
externalHostName = cmdparams[2];
- if ( cmdparams.Length == 4 ) {
-
- }
//internalPort = Convert.ToUInt32(cmdparams[4]);
//remotingPort = Convert.ToUInt32(cmdparams[5]);
}
diff --git a/OpenSim/Services/HypergridService/GatekeeperService.cs b/OpenSim/Services/HypergridService/GatekeeperService.cs
index 9e961636ce..3f5c4f1400 100644
--- a/OpenSim/Services/HypergridService/GatekeeperService.cs
+++ b/OpenSim/Services/HypergridService/GatekeeperService.cs
@@ -157,7 +157,7 @@ namespace OpenSim.Services.HypergridService
string regionimage = "regionImage" + region.RegionID.ToString();
regionimage = regionimage.Replace("-", "");
- imageURL = region.ServerURI + "index.php?method=" + regionimage;
+ imageURL = "http://" + region.ExternalHostName + ":" + region.HttpPort + "/index.php?method=" + regionimage;
return true;
}
diff --git a/OpenSim/Services/HypergridService/UserAgentService.cs b/OpenSim/Services/HypergridService/UserAgentService.cs
index aed2dc8bd2..eb6433cc6f 100644
--- a/OpenSim/Services/HypergridService/UserAgentService.cs
+++ b/OpenSim/Services/HypergridService/UserAgentService.cs
@@ -136,7 +136,6 @@ namespace OpenSim.Services.HypergridService
m_log.DebugFormat("[USER AGENT SERVICE]: Request to login user {0} {1} (@{2}) to grid {3}",
agentCircuit.firstname, agentCircuit.lastname, ((clientIP == null) ? "stored IP" : clientIP.Address.ToString()),
gatekeeper.ExternalHostName +":"+ gatekeeper.HttpPort);
- m_log.Debug("gatekeeper serveruri -> " + gatekeeper.ServerURI );
// Take the IP address + port of the gatekeeper (reg) plus the info of finalDestination
GridRegion region = new GridRegion(gatekeeper);
@@ -146,12 +145,12 @@ namespace OpenSim.Services.HypergridService
region.RegionLocY = finalDestination.RegionLocY;
// Generate a new service session
- agentCircuit.ServiceSessionID = region.ServerURI + ";" + UUID.Random();
+ agentCircuit.ServiceSessionID = "http://" + region.ExternalHostName + ":" + region.HttpPort + ";" + UUID.Random();
TravelingAgentInfo old = UpdateTravelInfo(agentCircuit, region);
bool success = false;
string myExternalIP = string.Empty;
- string gridName = gatekeeper.ServerURI;
+ string gridName = "http://" + gatekeeper.ExternalHostName + ":" + gatekeeper.HttpPort;
if (m_GridName == gridName)
success = m_GatekeeperService.LoginAgent(agentCircuit, finalDestination, out reason);
else
@@ -160,7 +159,7 @@ namespace OpenSim.Services.HypergridService
if (!success)
{
m_log.DebugFormat("[USER AGENT SERVICE]: Unable to login user {0} {1} to grid {2}, reason: {3}",
- agentCircuit.firstname, agentCircuit.lastname, region.ServerURI, reason);
+ agentCircuit.firstname, agentCircuit.lastname, region.ExternalHostName + ":" + region.HttpPort, reason);
// restore the old travel info
lock (m_TravelingAgents)
@@ -211,7 +210,7 @@ namespace OpenSim.Services.HypergridService
m_TravelingAgents[agentCircuit.SessionID] = travel;
}
travel.UserID = agentCircuit.AgentID;
- travel.GridExternalName = region.ServerURI;
+ travel.GridExternalName = "http://" + region.ExternalHostName + ":" + region.HttpPort;
travel.ServiceToken = agentCircuit.ServiceSessionID;
if (old != null)
travel.ClientIPAddress = old.ClientIPAddress;
diff --git a/OpenSim/Services/Interfaces/IGridService.cs b/OpenSim/Services/Interfaces/IGridService.cs
index a0d270c165..cce8f2c357 100644
--- a/OpenSim/Services/Interfaces/IGridService.cs
+++ b/OpenSim/Services/Interfaces/IGridService.cs
@@ -115,20 +115,8 @@ namespace OpenSim.Services.Interfaces
///
public string ServerURI
{
- get {
- if ( m_serverURI != string.Empty ) {
- return m_serverURI;
- } else {
- return "http://" + m_externalHostName + ":" + m_httpPort + "/";
- }
- }
- set {
- if ( value.EndsWith("/") ) {
- m_serverURI = value;
- } else {
- m_serverURI = value + '/';
- }
- }
+ get { return m_serverURI; }
+ set { m_serverURI = value; }
}
protected string m_serverURI;
@@ -176,7 +164,6 @@ namespace OpenSim.Services.Interfaces
public GridRegion()
{
- m_serverURI = string.Empty;
}
public GridRegion(int regionLocX, int regionLocY, IPEndPoint internalEndPoint, string externalUri)
diff --git a/OpenSim/Services/LLLoginService/LLLoginResponse.cs b/OpenSim/Services/LLLoginService/LLLoginResponse.cs
index e98cc22db1..011cad89e8 100644
--- a/OpenSim/Services/LLLoginService/LLLoginResponse.cs
+++ b/OpenSim/Services/LLLoginService/LLLoginResponse.cs
@@ -339,7 +339,34 @@ namespace OpenSim.Services.LLLoginService
private void FillOutSeedCap(AgentCircuitData aCircuit, GridRegion destination, IPEndPoint ipepClient)
{
- SeedCapability = destination.ServerURI + CapsUtil.GetCapsSeedPath(aCircuit.CapsPath);
+ string capsSeedPath = String.Empty;
+
+ // Don't use the following! It Fails for logging into any region not on the same port as the http server!
+ // Kept here so it doesn't happen again!
+ // response.SeedCapability = regionInfo.ServerURI + capsSeedPath;
+
+ #region IP Translation for NAT
+ if (ipepClient != null)
+ {
+ capsSeedPath
+ = "http://"
+ + NetworkUtil.GetHostFor(ipepClient.Address, destination.ExternalHostName)
+ + ":"
+ + destination.HttpPort
+ + CapsUtil.GetCapsSeedPath(aCircuit.CapsPath);
+ }
+ else
+ {
+ capsSeedPath
+ = "http://"
+ + destination.ExternalHostName
+ + ":"
+ + destination.HttpPort
+ + CapsUtil.GetCapsSeedPath(aCircuit.CapsPath);
+ }
+ #endregion
+
+ SeedCapability = capsSeedPath;
}
private void SetDefaultValues()
diff --git a/prebuild.xml b/prebuild.xml
index 13a0bd3412..1e2459b2f5 100644
--- a/prebuild.xml
+++ b/prebuild.xml
@@ -1417,6 +1417,7 @@
+