aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region
diff options
context:
space:
mode:
authorMelanie2010-10-23 00:21:42 +0100
committerMelanie2010-10-23 00:21:42 +0100
commit7f74dc1b14d3ef31a9f20bb3a76ef8d587779f7e (patch)
tree73f156f1f7dc7d199a946d351828c7e725ebfbda /OpenSim/Region
parentChange some exception to use ToString(). e.Message is not sufficient to fix (diff)
parentMerge branch 'master' of ssh://opensimulator.org/var/git/opensim (diff)
downloadopensim-SC-7f74dc1b14d3ef31a9f20bb3a76ef8d587779f7e.zip
opensim-SC-7f74dc1b14d3ef31a9f20bb3a76ef8d587779f7e.tar.gz
opensim-SC-7f74dc1b14d3ef31a9f20bb3a76ef8d587779f7e.tar.bz2
opensim-SC-7f74dc1b14d3ef31a9f20bb3a76ef8d587779f7e.tar.xz
Merge branch 'master' into careminster-presence-refactor
Diffstat (limited to 'OpenSim/Region')
-rw-r--r--OpenSim/Region/Application/OpenSimBase.cs2
-rw-r--r--OpenSim/Region/CoreModules/Avatar/Chat/ChatModule.cs43
-rw-r--r--OpenSim/Region/CoreModules/Avatar/InstantMessage/MessageTransferModule.cs6
-rw-r--r--OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs37
-rw-r--r--OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs18
-rw-r--r--OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs49
-rw-r--r--OpenSim/Region/CoreModules/InterGrid/OpenGridProtocolModule.cs4
-rw-r--r--OpenSim/Region/CoreModules/World/Archiver/ArchiveReadRequest.cs17
-rw-r--r--OpenSim/Region/CoreModules/World/Archiver/ArchiveWriteRequestPreparation.cs3
-rw-r--r--OpenSim/Region/CoreModules/World/Archiver/AssetsRequest.cs2
-rw-r--r--OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs4
-rw-r--r--OpenSim/Region/Framework/Scenes/EventManager.cs35
-rw-r--r--OpenSim/Region/Framework/Scenes/ScenePresence.cs2
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs8
14 files changed, 176 insertions, 54 deletions
diff --git a/OpenSim/Region/Application/OpenSimBase.cs b/OpenSim/Region/Application/OpenSimBase.cs
index 7e0a886..c5ee385 100644
--- a/OpenSim/Region/Application/OpenSimBase.cs
+++ b/OpenSim/Region/Application/OpenSimBase.cs
@@ -336,8 +336,8 @@ namespace OpenSim
336 //regionInfo.originRegionID = regionInfo.RegionID; 336 //regionInfo.originRegionID = regionInfo.RegionID;
337 337
338 // set initial ServerURI 338 // set initial ServerURI
339 regionInfo.ServerURI = "http://" + regionInfo.ExternalHostName + ":" + regionInfo.InternalEndPoint.Port;
339 regionInfo.HttpPort = m_httpServerPort; 340 regionInfo.HttpPort = m_httpServerPort;
340 regionInfo.ServerURI = "http://" + regionInfo.ExternalHostName + ":" + regionInfo.HttpPort.ToString() + "/";
341 341
342 regionInfo.osSecret = m_osSecret; 342 regionInfo.osSecret = m_osSecret;
343 343
diff --git a/OpenSim/Region/CoreModules/Avatar/Chat/ChatModule.cs b/OpenSim/Region/CoreModules/Avatar/Chat/ChatModule.cs
index 2a590f1..8ab4391 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
169 // sanity check: 169 // sanity check:
170 if (c.Sender == null) 170 if (c.Sender == null)
171 { 171 {
172 m_log.ErrorFormat("[CHAT] OnChatFromClient from {0} has empty Sender field!", sender); 172 m_log.ErrorFormat("[CHAT]: OnChatFromClient from {0} has empty Sender field!", sender);
173 return; 173 return;
174 } 174 }
175 175
@@ -234,8 +234,12 @@ namespace OpenSim.Region.CoreModules.Avatar.Chat
234 if (message.Length >= 1000) // libomv limit 234 if (message.Length >= 1000) // libomv limit
235 message = message.Substring(0, 1000); 235 message = message.Substring(0, 1000);
236 236
237 // m_log.DebugFormat("[CHAT]: DCTA: fromID {0} fromName {1}, cType {2}, sType {3}", fromID, fromName, c.Type, sourceType); 237// m_log.DebugFormat(
238// "[CHAT]: DCTA: fromID {0} fromName {1}, region{2}, cType {3}, sType {4}",
239// fromID, fromName, scene.RegionInfo.RegionName, c.Type, sourceType);
238 240
241 HashSet<UUID> receiverIDs = new HashSet<UUID>();
242
239 foreach (Scene s in m_scenes) 243 foreach (Scene s in m_scenes)
240 { 244 {
241 s.ForEachScenePresence( 245 s.ForEachScenePresence(
@@ -250,13 +254,17 @@ namespace OpenSim.Region.CoreModules.Avatar.Chat
250 // objects on a parcel with access restrictions 254 // objects on a parcel with access restrictions
251 if (c.Sender == null || Presencecheck.IsEitherBannedOrRestricted(c.Sender.AgentId) != true) 255 if (c.Sender == null || Presencecheck.IsEitherBannedOrRestricted(c.Sender.AgentId) != true)
252 { 256 {
253 TrySendChatMessage(presence, fromPos, regionPos, fromID, fromNamePrefix+fromName, c.Type, message, sourceType); 257 if (TrySendChatMessage(presence, fromPos, regionPos, fromID, fromNamePrefix + fromName, c.Type, message, sourceType))
258 receiverIDs.Add(presence.UUID);
254 } 259 }
255 } 260 }
256 261
257 } 262 }
258 ); 263 );
259 } 264 }
265
266 (scene as Scene).EventManager.TriggerOnChatToClients(
267 fromID, receiverIDs, message, c.Type, fromPos, fromName, sourceType, ChatAudibleLevel.Fully);
260 } 268 }
261 269
262 static private Vector3 CenterOfRegion = new Vector3(128, 128, 30); 270 static private Vector3 CenterOfRegion = new Vector3(128, 128, 30);
@@ -294,6 +302,8 @@ namespace OpenSim.Region.CoreModules.Avatar.Chat
294 } 302 }
295 303
296 // m_log.DebugFormat("[CHAT] Broadcast: fromID {0} fromName {1}, cType {2}, sType {3}", fromID, fromName, cType, sourceType); 304 // m_log.DebugFormat("[CHAT] Broadcast: fromID {0} fromName {1}, cType {2}, sType {3}", fromID, fromName, cType, sourceType);
305 HashSet<UUID> receiverIDs = new HashSet<UUID>();
306
297 if (c.Scene != null) 307 if (c.Scene != null)
298 { 308 {
299 ((Scene)c.Scene).ForEachScenePresence 309 ((Scene)c.Scene).ForEachScenePresence
@@ -314,18 +324,33 @@ namespace OpenSim.Region.CoreModules.Avatar.Chat
314 324
315 client.SendChatMessage(c.Message, (byte)cType, CenterOfRegion, fromName, fromID, 325 client.SendChatMessage(c.Message, (byte)cType, CenterOfRegion, fromName, fromID,
316 (byte)sourceType, (byte)ChatAudibleLevel.Fully); 326 (byte)sourceType, (byte)ChatAudibleLevel.Fully);
327 receiverIDs.Add(presence.UUID);
317 } 328 }
318 ); 329 );
330 (c.Scene as Scene).EventManager.TriggerOnChatToClients(
331 fromID, receiverIDs, c.Message, cType, CenterOfRegion, fromName, sourceType, ChatAudibleLevel.Fully);
319 } 332 }
320 } 333 }
321 334
322 335 /// <summary>
323 protected virtual void TrySendChatMessage(ScenePresence presence, Vector3 fromPos, Vector3 regionPos, 336 /// Try to send a message to the given presence
337 /// </summary>
338 /// <param name="presence">The receiver</param>
339 /// <param name="fromPos"></param>
340 /// <param name="regionPos">/param>
341 /// <param name="fromAgentID"></param>
342 /// <param name="fromName"></param>
343 /// <param name="type"></param>
344 /// <param name="message"></param>
345 /// <param name="src"></param>
346 /// <returns>true if the message was sent to the receiver, false if it was not sent due to failing a
347 /// precondition</returns>
348 protected virtual bool TrySendChatMessage(ScenePresence presence, Vector3 fromPos, Vector3 regionPos,
324 UUID fromAgentID, string fromName, ChatTypeEnum type, 349 UUID fromAgentID, string fromName, ChatTypeEnum type,
325 string message, ChatSourceType src) 350 string message, ChatSourceType src)
326 { 351 {
327 // don't send stuff to child agents 352 // don't send stuff to child agents
328 if (presence.IsChildAgent) return; 353 if (presence.IsChildAgent) return false;
329 354
330 Vector3 fromRegionPos = fromPos + regionPos; 355 Vector3 fromRegionPos = fromPos + regionPos;
331 Vector3 toRegionPos = presence.AbsolutePosition + 356 Vector3 toRegionPos = presence.AbsolutePosition +
@@ -338,12 +363,14 @@ namespace OpenSim.Region.CoreModules.Avatar.Chat
338 type == ChatTypeEnum.Say && dis > m_saydistance || 363 type == ChatTypeEnum.Say && dis > m_saydistance ||
339 type == ChatTypeEnum.Shout && dis > m_shoutdistance) 364 type == ChatTypeEnum.Shout && dis > m_shoutdistance)
340 { 365 {
341 return; 366 return false;
342 } 367 }
343 368
344 // TODO: should change so the message is sent through the avatar rather than direct to the ClientView 369 // TODO: should change so the message is sent through the avatar rather than direct to the ClientView
345 presence.ControllingClient.SendChatMessage(message, (byte) type, fromPos, fromName, 370 presence.ControllingClient.SendChatMessage(message, (byte) type, fromPos, fromName,
346 fromAgentID,(byte)src,(byte)ChatAudibleLevel.Fully); 371 fromAgentID, (byte)src, (byte)ChatAudibleLevel.Fully);
372
373 return true;
347 } 374 }
348 375
349 Dictionary<UUID, System.Threading.Timer> Timers = new Dictionary<UUID, System.Threading.Timer>(); 376 Dictionary<UUID, System.Threading.Timer> Timers = new Dictionary<UUID, System.Threading.Timer>();
diff --git a/OpenSim/Region/CoreModules/Avatar/InstantMessage/MessageTransferModule.cs b/OpenSim/Region/CoreModules/Avatar/InstantMessage/MessageTransferModule.cs
index 80adc46..d8e0f96 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
598 try 598 try
599 { 599 {
600 600
601 XmlRpcResponse GridResp = GridReq.Send(reginfo.ServerURI, 3000); 601 XmlRpcResponse GridResp = GridReq.Send("http://" + reginfo.ExternalHostName + ":" + reginfo.HttpPort, 3000);
602 602
603 Hashtable responseData = (Hashtable)GridResp.Value; 603 Hashtable responseData = (Hashtable)GridResp.Value;
604 604
@@ -620,8 +620,8 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage
620 } 620 }
621 catch (WebException e) 621 catch (WebException e)
622 { 622 {
623 m_log.ErrorFormat("[GRID INSTANT MESSAGE]: Error sending message to {0}} the host didn't respond ({2})", 623 m_log.ErrorFormat("[GRID INSTANT MESSAGE]: Error sending message to http://{0}:{1} the host didn't respond ({2})",
624 reginfo.ServerURI, e.Message); 624 reginfo.ExternalHostName, reginfo.HttpPort, e.Message);
625 } 625 }
626 626
627 return false; 627 return false;
diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs
index c1df827..5500557 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;
33using System.Threading; 33using System.Threading;
34using System.Text; 34using System.Text;
35using System.Xml; 35using System.Xml;
36using System.Xml.Linq;
36using log4net; 37using log4net;
37using OpenMetaverse; 38using OpenMetaverse;
38using OpenSim.Framework; 39using OpenSim.Framework;
@@ -50,6 +51,12 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
50 { 51 {
51 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 52 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
52 53
54 /// <summary>
55 /// The maximum major version of archive that we can read. Minor versions shouldn't need a max number since version
56 /// bumps here should be compatible.
57 /// </summary>
58 public static int MAX_MAJOR_VERSION = 0;
59
53 protected TarArchiveReader archive; 60 protected TarArchiveReader archive;
54 61
55 private UserAccount m_userInfo; 62 private UserAccount m_userInfo;
@@ -133,7 +140,11 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
133 140
134 while ((data = archive.ReadEntry(out filePath, out entryType)) != null) 141 while ((data = archive.ReadEntry(out filePath, out entryType)) != null)
135 { 142 {
136 if (filePath.StartsWith(ArchiveConstants.ASSETS_PATH)) 143 if (filePath == ArchiveConstants.CONTROL_FILE_PATH)
144 {
145 LoadControlFile(filePath, data);
146 }
147 else if (filePath.StartsWith(ArchiveConstants.ASSETS_PATH))
137 { 148 {
138 if (LoadAsset(filePath, data)) 149 if (LoadAsset(filePath, data))
139 successfulAssetRestores++; 150 successfulAssetRestores++;
@@ -461,5 +472,29 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
461 return false; 472 return false;
462 } 473 }
463 } 474 }
475
476 /// <summary>
477 /// Load control file
478 /// </summary>
479 /// <param name="path"></param>
480 /// <param name="data"></param>
481 protected void LoadControlFile(string path, byte[] data)
482 {
483 XDocument doc = XDocument.Parse(Encoding.ASCII.GetString(data));
484 XElement archiveElement = doc.Element("archive");
485 int majorVersion = int.Parse(archiveElement.Attribute("major_version").Value);
486 int minorVersion = int.Parse(archiveElement.Attribute("minor_version").Value);
487 string version = string.Format("{0}.{1}", majorVersion, minorVersion);
488
489 if (majorVersion > MAX_MAJOR_VERSION)
490 {
491 throw new Exception(
492 string.Format(
493 "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",
494 majorVersion, MAX_MAJOR_VERSION));
495 }
496
497 m_log.InfoFormat("[INVENTORY ARCHIVER]: Loading IAR with version {0}", version);
498 }
464 } 499 }
465} \ No newline at end of file 500} \ 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 bae5a7a..249a8b4 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
123 123
124 try 124 try
125 { 125 {
126 // We're almost done. Just need to write out the control file now
127 m_archiveWriter.WriteFile(ArchiveConstants.CONTROL_FILE_PATH, Create0p1ControlFile());
128 m_log.InfoFormat("[ARCHIVER]: Added control file to archive.");
129 m_archiveWriter.Close(); 126 m_archiveWriter.Close();
130 } 127 }
131 catch (Exception e) 128 catch (Exception e)
@@ -216,7 +213,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
216 public void Execute() 213 public void Execute()
217 { 214 {
218 try 215 try
219 { 216 {
220 InventoryFolderBase inventoryFolder = null; 217 InventoryFolderBase inventoryFolder = null;
221 InventoryItemBase inventoryItem = null; 218 InventoryItemBase inventoryItem = null;
222 InventoryFolderBase rootFolder = m_scene.InventoryService.GetRootFolder(m_userInfo.PrincipalID); 219 InventoryFolderBase rootFolder = m_scene.InventoryService.GetRootFolder(m_userInfo.PrincipalID);
@@ -277,6 +274,11 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
277 274
278 m_archiveWriter = new TarArchiveWriter(m_saveStream); 275 m_archiveWriter = new TarArchiveWriter(m_saveStream);
279 276
277 // Write out control file. This has to be done first so that subsequent loaders will see this file first
278 // XXX: I know this is a weak way of doing it since external non-OAR aware tar executables will not do this
279 m_archiveWriter.WriteFile(ArchiveConstants.CONTROL_FILE_PATH, Create0p1ControlFile());
280 m_log.InfoFormat("[INVENTORY ARCHIVER]: Added control file to archive.");
281
280 if (inventoryFolder != null) 282 if (inventoryFolder != null)
281 { 283 {
282 m_log.DebugFormat( 284 m_log.DebugFormat(
@@ -399,13 +401,17 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
399 /// <returns></returns> 401 /// <returns></returns>
400 public static string Create0p1ControlFile() 402 public static string Create0p1ControlFile()
401 { 403 {
404 int majorVersion = 0, minorVersion = 1;
405
406 m_log.InfoFormat("[INVENTORY ARCHIVER]: Creating version {0}.{1} IAR", majorVersion, minorVersion);
407
402 StringWriter sw = new StringWriter(); 408 StringWriter sw = new StringWriter();
403 XmlTextWriter xtw = new XmlTextWriter(sw); 409 XmlTextWriter xtw = new XmlTextWriter(sw);
404 xtw.Formatting = Formatting.Indented; 410 xtw.Formatting = Formatting.Indented;
405 xtw.WriteStartDocument(); 411 xtw.WriteStartDocument();
406 xtw.WriteStartElement("archive"); 412 xtw.WriteStartElement("archive");
407 xtw.WriteAttributeString("major_version", "0"); 413 xtw.WriteAttributeString("major_version", majorVersion.ToString());
408 xtw.WriteAttributeString("minor_version", "1"); 414 xtw.WriteAttributeString("minor_version", minorVersion.ToString());
409 xtw.WriteEndElement(); 415 xtw.WriteEndElement();
410 416
411 xtw.Flush(); 417 xtw.Flush();
diff --git a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
index 9a0e735..2921b0d 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
327 327
328 // OK, it got this agent. Let's close some child agents 328 // OK, it got this agent. Let's close some child agents
329 sp.CloseChildAgents(newRegionX, newRegionY); 329 sp.CloseChildAgents(newRegionX, newRegionY);
330 IClientIPEndpoint ipepClient; 330
331 if (NeedsNewAgent(oldRegionX, newRegionX, oldRegionY, newRegionY)) 331 if (NeedsNewAgent(oldRegionX, newRegionX, oldRegionY, newRegionY))
332 { 332 {
333 //sp.ControllingClient.SendTeleportProgress(teleportFlags, "Creating agent..."); 333 //sp.ControllingClient.SendTeleportProgress(teleportFlags, "Creating agent...");
334
334 #region IP Translation for NAT 335 #region IP Translation for NAT
335 // Uses ipepClient above 336 IClientIPEndpoint ipepClient;
336 if (sp.ClientView.TryGet(out ipepClient)) 337 if (sp.ClientView.TryGet(out ipepClient))
337 { 338 {
338 endPoint.Address = NetworkUtil.GetIPFor(ipepClient.EndPoint, endPoint.Address); 339 capsPath
340 = "http://"
341 + NetworkUtil.GetHostFor(ipepClient.EndPoint, finalDestination.ExternalHostName)
342 + ":"
343 + finalDestination.HttpPort
344 + CapsUtil.GetCapsSeedPath(agentCircuit.CapsPath);
345 }
346 else
347 {
348 capsPath
349 = "http://"
350 + finalDestination.ExternalHostName
351 + ":"
352 + finalDestination.HttpPort
353 + CapsUtil.GetCapsSeedPath(agentCircuit.CapsPath);
339 } 354 }
340 #endregion 355 #endregion
341 capsPath = finalDestination.ServerURI + CapsUtil.GetCapsSeedPath(agentCircuit.CapsPath);
342 356
343 if (eq != null) 357 if (eq != null)
344 { 358 {
359 #region IP Translation for NAT
360 // Uses ipepClient above
361 if (sp.ClientView.TryGet(out ipepClient))
362 {
363 endPoint.Address = NetworkUtil.GetIPFor(ipepClient.EndPoint, endPoint.Address);
364 }
365 #endregion
366
345 eq.EnableSimulator(destinationHandle, endPoint, sp.UUID); 367 eq.EnableSimulator(destinationHandle, endPoint, sp.UUID);
346 368
347 // ES makes the client send a UseCircuitCode message to the destination, 369 // ES makes the client send a UseCircuitCode message to the destination,
@@ -360,7 +382,8 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
360 else 382 else
361 { 383 {
362 agentCircuit.CapsPath = sp.Scene.CapsModule.GetChildSeed(sp.UUID, reg.RegionHandle); 384 agentCircuit.CapsPath = sp.Scene.CapsModule.GetChildSeed(sp.UUID, reg.RegionHandle);
363 capsPath = finalDestination.ServerURI + CapsUtil.GetCapsSeedPath(agentCircuit.CapsPath); 385 capsPath = "http://" + finalDestination.ExternalHostName + ":" + finalDestination.HttpPort
386 + "/CAPS/" + agentCircuit.CapsPath + "0000/";
364 } 387 }
365 388
366 // Expect avatar crossing is a heavy-duty function at the destination. 389 // Expect avatar crossing is a heavy-duty function at the destination.
@@ -495,8 +518,8 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
495 518
496 protected virtual void SetCallbackURL(AgentData agent, RegionInfo region) 519 protected virtual void SetCallbackURL(AgentData agent, RegionInfo region)
497 { 520 {
498 agent.CallbackURI = region.ServerURI + "agent/" + agent.AgentID.ToString() + "/" + region.RegionID.ToString() + "/release/"; 521 agent.CallbackURI = "http://" + region.ExternalHostName + ":" + region.HttpPort +
499 m_log.Debug("Set callback URL to " + agent.CallbackURI); 522 "/agent/" + agent.AgentID.ToString() + "/" + region.RegionID.ToString() + "/release/";
500 523
501 } 524 }
502 525
@@ -839,8 +862,8 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
839 cAgent.Position = pos; 862 cAgent.Position = pos;
840 if (isFlying) 863 if (isFlying)
841 cAgent.ControlFlags |= (uint)AgentManager.ControlFlags.AGENT_CONTROL_FLY; 864 cAgent.ControlFlags |= (uint)AgentManager.ControlFlags.AGENT_CONTROL_FLY;
842 cAgent.CallbackURI = m_scene.RegionInfo.ServerURI + 865 cAgent.CallbackURI = "http://" + m_scene.RegionInfo.ExternalHostName + ":" + m_scene.RegionInfo.HttpPort +
843 "agent/" + agent.UUID.ToString() + "/" + m_scene.RegionInfo.RegionID.ToString() + "/release/"; 866 "/agent/" + agent.UUID.ToString() + "/" + m_scene.RegionInfo.RegionID.ToString() + "/release/";
844 867
845 if (!m_scene.SimulationService.UpdateAgent(neighbourRegion, cAgent)) 868 if (!m_scene.SimulationService.UpdateAgent(neighbourRegion, cAgent))
846 { 869 {
@@ -865,7 +888,10 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
865 neighbourRegion.RegionHandle); 888 neighbourRegion.RegionHandle);
866 return agent; 889 return agent;
867 } 890 }
868 string capsPath = neighbourRegion.ServerURI + CapsUtil.GetCapsSeedPath(agentcaps); 891 // TODO Should construct this behind a method
892 string capsPath =
893 "http://" + neighbourRegion.ExternalHostName + ":" + neighbourRegion.HttpPort
894 + "/CAPS/" + agentcaps /*circuitdata.CapsPath*/ + "0000/";
869 895
870 m_log.DebugFormat("[ENTITY TRANSFER MODULE]: Sending new CAPS seed url {0} to client {1}", capsPath, agent.UUID); 896 m_log.DebugFormat("[ENTITY TRANSFER MODULE]: Sending new CAPS seed url {0} to client {1}", capsPath, agent.UUID);
871 897
@@ -1193,7 +1219,8 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
1193 y = y / Constants.RegionSize; 1219 y = y / Constants.RegionSize;
1194 m_log.Info("[ENTITY TRANSFER MODULE]: Starting to inform client about neighbour " + x + ", " + y + "(" + endPoint.ToString() + ")"); 1220 m_log.Info("[ENTITY TRANSFER MODULE]: Starting to inform client about neighbour " + x + ", " + y + "(" + endPoint.ToString() + ")");
1195 1221
1196 string capsPath = reg.ServerURI + CapsUtil.GetCapsSeedPath(a.CapsPath); 1222 string capsPath = "http://" + reg.ExternalHostName + ":" + reg.HttpPort
1223 + "/CAPS/" + a.CapsPath + "0000/";
1197 1224
1198 string reason = String.Empty; 1225 string reason = String.Empty;
1199 1226
diff --git a/OpenSim/Region/CoreModules/InterGrid/OpenGridProtocolModule.cs b/OpenSim/Region/CoreModules/InterGrid/OpenGridProtocolModule.cs
index 2dd7767..fd0e879 100644
--- a/OpenSim/Region/CoreModules/InterGrid/OpenGridProtocolModule.cs
+++ b/OpenSim/Region/CoreModules/InterGrid/OpenGridProtocolModule.cs
@@ -595,12 +595,12 @@ namespace OpenSim.Region.CoreModules.InterGrid
595 // DEPRECATED 595 // DEPRECATED
596 responseMap["seed_capability"] 596 responseMap["seed_capability"]
597 = OSD.FromString( 597 = OSD.FromString(
598 regionCapsHttpProtocol + httpaddr + ":" + reg.HttpPort + "/" + CapsUtil.GetCapsSeedPath(userCap.CapsObjectPath)); 598 regionCapsHttpProtocol + httpaddr + ":" + reg.HttpPort + CapsUtil.GetCapsSeedPath(userCap.CapsObjectPath));
599 599
600 // REPLACEMENT 600 // REPLACEMENT
601 responseMap["region_seed_capability"] 601 responseMap["region_seed_capability"]
602 = OSD.FromString( 602 = OSD.FromString(
603 regionCapsHttpProtocol + httpaddr + ":" + reg.HttpPort + "/" + CapsUtil.GetCapsSeedPath(userCap.CapsObjectPath)); 603 regionCapsHttpProtocol + httpaddr + ":" + reg.HttpPort + CapsUtil.GetCapsSeedPath(userCap.CapsObjectPath));
604 604
605 responseMap["rez_avatar"] = OSD.FromString(rezHttpProtocol + httpaddr + ":" + urlport + rezAvatarPath); 605 responseMap["rez_avatar"] = OSD.FromString(rezHttpProtocol + httpaddr + ":" + urlport + rezAvatarPath);
606 responseMap["rez_avatar/rez"] = OSD.FromString(rezHttpProtocol + httpaddr + ":" + urlport + rezAvatarPath); 606 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 7d77a77..1f85278 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
53 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 53 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
54 54
55 /// <summary> 55 /// <summary>
56 /// The maximum major version of OAR that we can read. Minor versions shouldn't need a number since version 56 /// The maximum major version of OAR that we can read. Minor versions shouldn't need a max number since version
57 /// bumps here should be compatible. 57 /// bumps here should be compatible.
58 /// </summary> 58 /// </summary>
59 public static int MAX_MAJOR_VERSION = 0; 59 public static int MAX_MAJOR_VERSION = 0;
@@ -499,17 +499,11 @@ namespace OpenSim.Region.CoreModules.World.Archiver
499 /// </summary> 499 /// </summary>
500 /// <param name="path"></param> 500 /// <param name="path"></param>
501 /// <param name="data"></param> 501 /// <param name="data"></param>
502 private void LoadControlFile(string path, byte[] data) 502 protected void LoadControlFile(string path, byte[] data)
503 { 503 {
504 //Create the XmlNamespaceManager. 504 XmlNamespaceManager nsmgr = new XmlNamespaceManager(new NameTable());
505 NameTable nt = new NameTable();
506 XmlNamespaceManager nsmgr = new XmlNamespaceManager(nt);
507
508 // Create the XmlParserContext.
509 XmlParserContext context = new XmlParserContext(null, nsmgr, null, XmlSpace.None); 505 XmlParserContext context = new XmlParserContext(null, nsmgr, null, XmlSpace.None);
510 506 XmlTextReader xtr = new XmlTextReader(Encoding.ASCII.GetString(data), XmlNodeType.Document, context);
511 XmlTextReader xtr
512 = new XmlTextReader(Encoding.ASCII.GetString(data), XmlNodeType.Document, context);
513 507
514 RegionSettings currentRegionSettings = m_scene.RegionInfo.RegionSettings; 508 RegionSettings currentRegionSettings = m_scene.RegionInfo.RegionSettings;
515 509
@@ -548,10 +542,9 @@ namespace OpenSim.Region.CoreModules.World.Archiver
548 currentRegionSettings.LoadedCreationID = xtr.ReadElementContentAsString(); 542 currentRegionSettings.LoadedCreationID = xtr.ReadElementContentAsString();
549 } 543 }
550 } 544 }
551
552 } 545 }
553 546
554 currentRegionSettings.Save(); 547 currentRegionSettings.Save();
555 } 548 }
556 } 549 }
557} 550} \ 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 43789af..1687d06 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
171 171
172 m_log.InfoFormat("[ARCHIVER]: Creating archive file. This may take some time."); 172 m_log.InfoFormat("[ARCHIVER]: Creating archive file. This may take some time.");
173 173
174 // Write out control file 174 // Write out control file. This has to be done first so that subsequent loaders will see this file first
175 // XXX: I know this is a weak way of doing it since external non-OAR aware tar executables will not do this
175 archiveWriter.WriteFile(ArchiveConstants.CONTROL_FILE_PATH, Create0p2ControlFile(options)); 176 archiveWriter.WriteFile(ArchiveConstants.CONTROL_FILE_PATH, Create0p2ControlFile(options));
176 m_log.InfoFormat("[ARCHIVER]: Added control file to archive."); 177 m_log.InfoFormat("[ARCHIVER]: Added control file to archive.");
177 178
diff --git a/OpenSim/Region/CoreModules/World/Archiver/AssetsRequest.cs b/OpenSim/Region/CoreModules/World/Archiver/AssetsRequest.cs
index a1451ce..d4a09b4 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
188 m_log.ErrorFormat( 188 m_log.ErrorFormat(
189 "[ARCHIVER]: (... {0} more not shown)", uuids.Count - MAX_UUID_DISPLAY_ON_TIMEOUT); 189 "[ARCHIVER]: (... {0} more not shown)", uuids.Count - MAX_UUID_DISPLAY_ON_TIMEOUT);
190 190
191 m_log.Error("[ARCHIVER]: OAR save aborted."); 191 m_log.Error("[ARCHIVER]: OAR save aborted. PLEASE DO NOT USE THIS OAR, IT WILL BE INCOMPLETE.");
192 } 192 }
193 catch (Exception e) 193 catch (Exception e)
194 { 194 {
diff --git a/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs b/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs
index fdbbccf..a182eea 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
147 147
148 string regionimage = "regionImage" + m_scene.RegionInfo.RegionID.ToString(); 148 string regionimage = "regionImage" + m_scene.RegionInfo.RegionID.ToString();
149 regionimage = regionimage.Replace("-", ""); 149 regionimage = regionimage.Replace("-", "");
150 m_log.Info("[WORLD MAP]: JPEG Map location: " + m_scene.RegionInfo.ServerURI + "/index.php?method=" + regionimage); 150 m_log.Info("[WORLD MAP]: JPEG Map location: http://" + m_scene.RegionInfo.ExternalEndPoint.Address.ToString() + ":" + m_scene.RegionInfo.HttpPort.ToString() + "/index.php?method=" + regionimage);
151 151
152 MainServer.Instance.AddHTTPHandler(regionimage, OnHTTPGetMapImage); 152 MainServer.Instance.AddHTTPHandler(regionimage, OnHTTPGetMapImage);
153 MainServer.Instance.AddLLSDHandler( 153 MainServer.Instance.AddLLSDHandler(
@@ -579,7 +579,7 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
579 579
580 if (mreg != null) 580 if (mreg != null)
581 { 581 {
582 httpserver = mreg.ServerURI + "MAP/MapItems/" + regionhandle.ToString(); 582 httpserver = "http://" + mreg.ExternalEndPoint.Address.ToString() + ":" + mreg.HttpPort + "/MAP/MapItems/" + regionhandle.ToString();
583 lock (m_cachedRegionMapItemsAddress) 583 lock (m_cachedRegionMapItemsAddress)
584 { 584 {
585 if (!m_cachedRegionMapItemsAddress.ContainsKey(regionhandle)) 585 if (!m_cachedRegionMapItemsAddress.ContainsKey(regionhandle))
diff --git a/OpenSim/Region/Framework/Scenes/EventManager.cs b/OpenSim/Region/Framework/Scenes/EventManager.cs
index e923932..33069da 100644
--- a/OpenSim/Region/Framework/Scenes/EventManager.cs
+++ b/OpenSim/Region/Framework/Scenes/EventManager.cs
@@ -297,6 +297,17 @@ namespace OpenSim.Region.Framework.Scenes
297 public event ChatFromClientEvent OnChatFromClient; 297 public event ChatFromClientEvent OnChatFromClient;
298 298
299 /// <summary> 299 /// <summary>
300 /// ChatToClientsEvent is triggered via ChatModule (or
301 /// substitutes thereof) when a chat message is actually sent to clients. Clients will only be sent a
302 /// received chat message if they satisfy various conditions (within audible range, etc.)
303 /// </summary>
304 public delegate void ChatToClientsEvent(
305 UUID senderID, HashSet<UUID> receiverIDs,
306 string message, ChatTypeEnum type, Vector3 fromPos, string fromName,
307 ChatSourceType src, ChatAudibleLevel level);
308 public event ChatToClientsEvent OnChatToClients;
309
310 /// <summary>
300 /// ChatBroadcastEvent is called via Scene when a broadcast chat message 311 /// ChatBroadcastEvent is called via Scene when a broadcast chat message
301 /// from world comes in 312 /// from world comes in
302 /// </summary> 313 /// </summary>
@@ -1627,6 +1638,30 @@ namespace OpenSim.Region.Framework.Scenes
1627 } 1638 }
1628 } 1639 }
1629 } 1640 }
1641
1642 public void TriggerOnChatToClients(
1643 UUID senderID, HashSet<UUID> receiverIDs,
1644 string message, ChatTypeEnum type, Vector3 fromPos, string fromName,
1645 ChatSourceType src, ChatAudibleLevel level)
1646 {
1647 ChatToClientsEvent handler = OnChatToClients;
1648 if (handler != null)
1649 {
1650 foreach (ChatToClientsEvent d in handler.GetInvocationList())
1651 {
1652 try
1653 {
1654 d(senderID, receiverIDs, message, type, fromPos, fromName, src, level);
1655 }
1656 catch (Exception e)
1657 {
1658 m_log.ErrorFormat(
1659 "[EVENT MANAGER]: Delegate for TriggerOnChatToClients failed - continuing. {0} {1}",
1660 e.Message, e.StackTrace);
1661 }
1662 }
1663 }
1664 }
1630 1665
1631 public void TriggerOnChatBroadcast(Object sender, OSChatMessage chat) 1666 public void TriggerOnChatBroadcast(Object sender, OSChatMessage chat)
1632 { 1667 {
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
index 06e3c0e..618f425 100644
--- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs
+++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
@@ -3329,8 +3329,6 @@ namespace OpenSim.Region.Framework.Scenes
3329 3329
3330 public void CopyTo(AgentData cAgent) 3330 public void CopyTo(AgentData cAgent)
3331 { 3331 {
3332 cAgent.CallbackURI = m_callbackURI;
3333
3334 cAgent.AgentID = UUID; 3332 cAgent.AgentID = UUID;
3335 cAgent.RegionID = Scene.RegionInfo.RegionID; 3333 cAgent.RegionID = Scene.RegionInfo.RegionID;
3336 3334
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
index f55bd12..3249ae2 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
9637 // do that one last, it will cause a ParcelPropertiesUpdate 9637 // do that one last, it will cause a ParcelPropertiesUpdate
9638 landObject.SetMediaUrl(url); 9638 landObject.SetMediaUrl(url);
9639 9639
9640 // now send to all (non-child) agents 9640 // now send to all (non-child) agents in the parcel
9641 World.ForEachScenePresence(delegate(ScenePresence sp) 9641 World.ForEachScenePresence(delegate(ScenePresence sp)
9642 { 9642 {
9643 if (!sp.IsChildAgent) 9643 if (!sp.IsChildAgent && (sp.currentParcelUUID == landData.GlobalID))
9644 { 9644 {
9645 sp.ControllingClient.SendParcelMediaUpdate(landData.MediaURL, 9645 sp.ControllingClient.SendParcelMediaUpdate(landData.MediaURL,
9646 landData.MediaID, 9646 landData.MediaID,
@@ -9670,10 +9670,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
9670 // the commandList contained a start/stop/... command, too 9670 // the commandList contained a start/stop/... command, too
9671 if (presence == null) 9671 if (presence == null)
9672 { 9672 {
9673 // send to all (non-child) agents 9673 // send to all (non-child) agents in the parcel
9674 World.ForEachScenePresence(delegate(ScenePresence sp) 9674 World.ForEachScenePresence(delegate(ScenePresence sp)
9675 { 9675 {
9676 if (!sp.IsChildAgent) 9676 if (!sp.IsChildAgent && (sp.currentParcelUUID == landData.GlobalID))
9677 { 9677 {
9678 sp.ControllingClient.SendParcelMediaCommand(0x4, // TODO what is this? 9678 sp.ControllingClient.SendParcelMediaCommand(0x4, // TODO what is this?
9679 (ParcelMediaCommandEnum)commandToSend, 9679 (ParcelMediaCommandEnum)commandToSend,