diff options
author | Melanie | 2010-10-23 00:21:42 +0100 |
---|---|---|
committer | Melanie | 2010-10-23 00:21:42 +0100 |
commit | 7f74dc1b14d3ef31a9f20bb3a76ef8d587779f7e (patch) | |
tree | 73f156f1f7dc7d199a946d351828c7e725ebfbda /OpenSim/Region | |
parent | Change some exception to use ToString(). e.Message is not sufficient to fix (diff) | |
parent | Merge branch 'master' of ssh://opensimulator.org/var/git/opensim (diff) | |
download | opensim-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')
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; | |||
33 | using System.Threading; | 33 | using System.Threading; |
34 | using System.Text; | 34 | using System.Text; |
35 | using System.Xml; | 35 | using System.Xml; |
36 | using System.Xml.Linq; | ||
36 | using log4net; | 37 | using log4net; |
37 | using OpenMetaverse; | 38 | using OpenMetaverse; |
38 | using OpenSim.Framework; | 39 | using 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, |