diff options
author | Melanie | 2010-12-15 08:18:02 +0100 |
---|---|---|
committer | Melanie | 2010-12-15 08:18:02 +0100 |
commit | ee1e725e394fbc15a6539f309ecebf21b70f73b0 (patch) | |
tree | 050fe40406cf0a906d0bf98e97f4c99e23dbfb61 /OpenSim/Region/CoreModules | |
parent | Fix casts in llSetPayPrice (diff) | |
parent | Merge branch 'master' into careminster-presence-refactor (diff) | |
download | opensim-SC-ee1e725e394fbc15a6539f309ecebf21b70f73b0.zip opensim-SC-ee1e725e394fbc15a6539f309ecebf21b70f73b0.tar.gz opensim-SC-ee1e725e394fbc15a6539f309ecebf21b70f73b0.tar.bz2 opensim-SC-ee1e725e394fbc15a6539f309ecebf21b70f73b0.tar.xz |
Merge branch 'careminster-presence-refactor' of ssh://3dhosting.de/var/git/careminster into careminster-presence-refactor
Diffstat (limited to 'OpenSim/Region/CoreModules')
4 files changed, 165 insertions, 34 deletions
diff --git a/OpenSim/Region/CoreModules/Scripting/HttpRequest/ScriptsHttpRequests.cs b/OpenSim/Region/CoreModules/Scripting/HttpRequest/ScriptsHttpRequests.cs index d78931a..e4a2461 100644 --- a/OpenSim/Region/CoreModules/Scripting/HttpRequest/ScriptsHttpRequests.cs +++ b/OpenSim/Region/CoreModules/Scripting/HttpRequest/ScriptsHttpRequests.cs | |||
@@ -341,6 +341,10 @@ namespace OpenSim.Region.CoreModules.Scripting.HttpRequest | |||
341 | try | 341 | try |
342 | { | 342 | { |
343 | Request = (HttpWebRequest) WebRequest.Create(Url); | 343 | Request = (HttpWebRequest) WebRequest.Create(Url); |
344 | |||
345 | //This works around some buggy HTTP Servers like Lighttpd | ||
346 | Request.ServicePoint.Expect100Continue = false; | ||
347 | |||
344 | Request.Method = HttpMethod; | 348 | Request.Method = HttpMethod; |
345 | Request.ContentType = HttpMIMEType; | 349 | Request.ContentType = HttpMIMEType; |
346 | 350 | ||
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Grid/RemoteGridServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Grid/RemoteGridServiceConnector.cs index 16e25e6..dfba0d6 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Grid/RemoteGridServiceConnector.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Grid/RemoteGridServiceConnector.cs | |||
@@ -41,8 +41,7 @@ using GridRegion = OpenSim.Services.Interfaces.GridRegion; | |||
41 | 41 | ||
42 | namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Grid | 42 | namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Grid |
43 | { | 43 | { |
44 | public class RemoteGridServicesConnector : | 44 | public class RemoteGridServicesConnector : ISharedRegionModule, IGridService |
45 | GridServicesConnector, ISharedRegionModule, IGridService | ||
46 | { | 45 | { |
47 | private static readonly ILog m_log = | 46 | private static readonly ILog m_log = |
48 | LogManager.GetLogger( | 47 | LogManager.GetLogger( |
@@ -51,6 +50,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Grid | |||
51 | private bool m_Enabled = false; | 50 | private bool m_Enabled = false; |
52 | 51 | ||
53 | private IGridService m_LocalGridService; | 52 | private IGridService m_LocalGridService; |
53 | private IGridService m_RemoteGridService; | ||
54 | 54 | ||
55 | public RemoteGridServicesConnector() | 55 | public RemoteGridServicesConnector() |
56 | { | 56 | { |
@@ -73,7 +73,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Grid | |||
73 | get { return "RemoteGridServicesConnector"; } | 73 | get { return "RemoteGridServicesConnector"; } |
74 | } | 74 | } |
75 | 75 | ||
76 | public override void Initialise(IConfigSource source) | 76 | public void Initialise(IConfigSource source) |
77 | { | 77 | { |
78 | IConfig moduleConfig = source.Configs["Modules"]; | 78 | IConfig moduleConfig = source.Configs["Modules"]; |
79 | if (moduleConfig != null) | 79 | if (moduleConfig != null) |
@@ -97,9 +97,8 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Grid | |||
97 | return; | 97 | return; |
98 | } | 98 | } |
99 | 99 | ||
100 | base.Initialise(source); | ||
101 | |||
102 | m_LocalGridService = new LocalGridServicesConnector(source); | 100 | m_LocalGridService = new LocalGridServicesConnector(source); |
101 | m_RemoteGridService = new GridServicesConnector(source); | ||
103 | } | 102 | } |
104 | 103 | ||
105 | public void PostInitialise() | 104 | public void PostInitialise() |
@@ -135,61 +134,61 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Grid | |||
135 | 134 | ||
136 | #region IGridService | 135 | #region IGridService |
137 | 136 | ||
138 | public override string RegisterRegion(UUID scopeID, GridRegion regionInfo) | 137 | public string RegisterRegion(UUID scopeID, GridRegion regionInfo) |
139 | { | 138 | { |
140 | string msg = m_LocalGridService.RegisterRegion(scopeID, regionInfo); | 139 | string msg = m_LocalGridService.RegisterRegion(scopeID, regionInfo); |
141 | 140 | ||
142 | if (msg == String.Empty) | 141 | if (msg == String.Empty) |
143 | return base.RegisterRegion(scopeID, regionInfo); | 142 | return m_RemoteGridService.RegisterRegion(scopeID, regionInfo); |
144 | 143 | ||
145 | return msg; | 144 | return msg; |
146 | } | 145 | } |
147 | 146 | ||
148 | public override bool DeregisterRegion(UUID regionID) | 147 | public bool DeregisterRegion(UUID regionID) |
149 | { | 148 | { |
150 | if (m_LocalGridService.DeregisterRegion(regionID)) | 149 | if (m_LocalGridService.DeregisterRegion(regionID)) |
151 | return base.DeregisterRegion(regionID); | 150 | return m_RemoteGridService.DeregisterRegion(regionID); |
152 | 151 | ||
153 | return false; | 152 | return false; |
154 | } | 153 | } |
155 | 154 | ||
156 | public override List<GridRegion> GetNeighbours(UUID scopeID, UUID regionID) | 155 | public List<GridRegion> GetNeighbours(UUID scopeID, UUID regionID) |
157 | { | 156 | { |
158 | return base.GetNeighbours(scopeID, regionID); | 157 | return m_RemoteGridService.GetNeighbours(scopeID, regionID); |
159 | } | 158 | } |
160 | 159 | ||
161 | public override GridRegion GetRegionByUUID(UUID scopeID, UUID regionID) | 160 | public GridRegion GetRegionByUUID(UUID scopeID, UUID regionID) |
162 | { | 161 | { |
163 | GridRegion rinfo = m_LocalGridService.GetRegionByUUID(scopeID, regionID); | 162 | GridRegion rinfo = m_LocalGridService.GetRegionByUUID(scopeID, regionID); |
164 | if (rinfo == null) | 163 | if (rinfo == null) |
165 | rinfo = base.GetRegionByUUID(scopeID, regionID); | 164 | rinfo = m_RemoteGridService.GetRegionByUUID(scopeID, regionID); |
166 | 165 | ||
167 | return rinfo; | 166 | return rinfo; |
168 | } | 167 | } |
169 | 168 | ||
170 | public override GridRegion GetRegionByPosition(UUID scopeID, int x, int y) | 169 | public GridRegion GetRegionByPosition(UUID scopeID, int x, int y) |
171 | { | 170 | { |
172 | GridRegion rinfo = m_LocalGridService.GetRegionByPosition(scopeID, x, y); | 171 | GridRegion rinfo = m_LocalGridService.GetRegionByPosition(scopeID, x, y); |
173 | if (rinfo == null) | 172 | if (rinfo == null) |
174 | rinfo = base.GetRegionByPosition(scopeID, x, y); | 173 | rinfo = m_RemoteGridService.GetRegionByPosition(scopeID, x, y); |
175 | 174 | ||
176 | return rinfo; | 175 | return rinfo; |
177 | } | 176 | } |
178 | 177 | ||
179 | public override GridRegion GetRegionByName(UUID scopeID, string regionName) | 178 | public GridRegion GetRegionByName(UUID scopeID, string regionName) |
180 | { | 179 | { |
181 | GridRegion rinfo = m_LocalGridService.GetRegionByName(scopeID, regionName); | 180 | GridRegion rinfo = m_LocalGridService.GetRegionByName(scopeID, regionName); |
182 | if (rinfo == null) | 181 | if (rinfo == null) |
183 | rinfo = base.GetRegionByName(scopeID, regionName); | 182 | rinfo = m_RemoteGridService.GetRegionByName(scopeID, regionName); |
184 | 183 | ||
185 | return rinfo; | 184 | return rinfo; |
186 | } | 185 | } |
187 | 186 | ||
188 | public override List<GridRegion> GetRegionsByName(UUID scopeID, string name, int maxNumber) | 187 | public List<GridRegion> GetRegionsByName(UUID scopeID, string name, int maxNumber) |
189 | { | 188 | { |
190 | List<GridRegion> rinfo = m_LocalGridService.GetRegionsByName(scopeID, name, maxNumber); | 189 | List<GridRegion> rinfo = m_LocalGridService.GetRegionsByName(scopeID, name, maxNumber); |
191 | //m_log.DebugFormat("[REMOTE GRID CONNECTOR]: Local GetRegionsByName {0} found {1} regions", name, rinfo.Count); | 190 | //m_log.DebugFormat("[REMOTE GRID CONNECTOR]: Local GetRegionsByName {0} found {1} regions", name, rinfo.Count); |
192 | List<GridRegion> grinfo = base.GetRegionsByName(scopeID, name, maxNumber); | 191 | List<GridRegion> grinfo = m_RemoteGridService.GetRegionsByName(scopeID, name, maxNumber); |
193 | 192 | ||
194 | if (grinfo != null) | 193 | if (grinfo != null) |
195 | { | 194 | { |
@@ -202,13 +201,79 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Grid | |||
202 | return rinfo; | 201 | return rinfo; |
203 | } | 202 | } |
204 | 203 | ||
205 | // Let's not override GetRegionRange -- let's get them all from the grid server | 204 | public virtual List<GridRegion> GetRegionRange(UUID scopeID, int xmin, int xmax, int ymin, int ymax) |
205 | { | ||
206 | List<GridRegion> rinfo = m_LocalGridService.GetRegionRange(scopeID, xmin, xmax, ymin, ymax); | ||
207 | //m_log.DebugFormat("[REMOTE GRID CONNECTOR]: Local GetRegionRange {0} found {1} regions", name, rinfo.Count); | ||
208 | List<GridRegion> grinfo = m_RemoteGridService.GetRegionRange(scopeID, xmin, xmax, ymin, ymax); | ||
209 | |||
210 | if (grinfo != null) | ||
211 | { | ||
212 | //m_log.DebugFormat("[REMOTE GRID CONNECTOR]: Remote GetRegionRange {0} found {1} regions", name, grinfo.Count); | ||
213 | foreach (GridRegion r in grinfo) | ||
214 | if (rinfo.Find(delegate(GridRegion gr) { return gr.RegionID == r.RegionID; }) == null) | ||
215 | rinfo.Add(r); | ||
216 | } | ||
217 | |||
218 | return rinfo; | ||
219 | } | ||
220 | |||
221 | public List<GridRegion> GetDefaultRegions(UUID scopeID) | ||
222 | { | ||
223 | List<GridRegion> rinfo = m_LocalGridService.GetDefaultRegions(scopeID); | ||
224 | //m_log.DebugFormat("[REMOTE GRID CONNECTOR]: Local GetDefaultRegions {0} found {1} regions", name, rinfo.Count); | ||
225 | List<GridRegion> grinfo = m_RemoteGridService.GetDefaultRegions(scopeID); | ||
226 | |||
227 | if (grinfo != null) | ||
228 | { | ||
229 | //m_log.DebugFormat("[REMOTE GRID CONNECTOR]: Remote GetDefaultRegions {0} found {1} regions", name, grinfo.Count); | ||
230 | foreach (GridRegion r in grinfo) | ||
231 | if (rinfo.Find(delegate(GridRegion gr) { return gr.RegionID == r.RegionID; }) == null) | ||
232 | rinfo.Add(r); | ||
233 | } | ||
234 | |||
235 | return rinfo; | ||
236 | } | ||
237 | |||
238 | public List<GridRegion> GetFallbackRegions(UUID scopeID, int x, int y) | ||
239 | { | ||
240 | List<GridRegion> rinfo = m_LocalGridService.GetFallbackRegions(scopeID, x, y); | ||
241 | //m_log.DebugFormat("[REMOTE GRID CONNECTOR]: Local GetFallbackRegions {0} found {1} regions", name, rinfo.Count); | ||
242 | List<GridRegion> grinfo = m_RemoteGridService.GetFallbackRegions(scopeID, x, y); | ||
243 | |||
244 | if (grinfo != null) | ||
245 | { | ||
246 | //m_log.DebugFormat("[REMOTE GRID CONNECTOR]: Remote GetFallbackRegions {0} found {1} regions", name, grinfo.Count); | ||
247 | foreach (GridRegion r in grinfo) | ||
248 | if (rinfo.Find(delegate(GridRegion gr) { return gr.RegionID == r.RegionID; }) == null) | ||
249 | rinfo.Add(r); | ||
250 | } | ||
251 | |||
252 | return rinfo; | ||
253 | } | ||
254 | |||
255 | public List<GridRegion> GetHyperlinks(UUID scopeID) | ||
256 | { | ||
257 | List<GridRegion> rinfo = m_LocalGridService.GetHyperlinks(scopeID); | ||
258 | //m_log.DebugFormat("[REMOTE GRID CONNECTOR]: Local GetHyperlinks {0} found {1} regions", name, rinfo.Count); | ||
259 | List<GridRegion> grinfo = m_RemoteGridService.GetHyperlinks(scopeID); | ||
260 | |||
261 | if (grinfo != null) | ||
262 | { | ||
263 | //m_log.DebugFormat("[REMOTE GRID CONNECTOR]: Remote GetHyperlinks {0} found {1} regions", name, grinfo.Count); | ||
264 | foreach (GridRegion r in grinfo) | ||
265 | if (rinfo.Find(delegate(GridRegion gr) { return gr.RegionID == r.RegionID; }) == null) | ||
266 | rinfo.Add(r); | ||
267 | } | ||
268 | |||
269 | return rinfo; | ||
270 | } | ||
206 | 271 | ||
207 | public override int GetRegionFlags(UUID scopeID, UUID regionID) | 272 | public int GetRegionFlags(UUID scopeID, UUID regionID) |
208 | { | 273 | { |
209 | int flags = m_LocalGridService.GetRegionFlags(scopeID, regionID); | 274 | int flags = m_LocalGridService.GetRegionFlags(scopeID, regionID); |
210 | if (flags == -1) | 275 | if (flags == -1) |
211 | flags = base.GetRegionFlags(scopeID, regionID); | 276 | flags = m_RemoteGridService.GetRegionFlags(scopeID, regionID); |
212 | 277 | ||
213 | return flags; | 278 | return flags; |
214 | } | 279 | } |
diff --git a/OpenSim/Region/CoreModules/World/WorldMap/MapSearchModule.cs b/OpenSim/Region/CoreModules/World/WorldMap/MapSearchModule.cs index d2c3afb..334dcb0 100644 --- a/OpenSim/Region/CoreModules/World/WorldMap/MapSearchModule.cs +++ b/OpenSim/Region/CoreModules/World/WorldMap/MapSearchModule.cs | |||
@@ -93,13 +93,13 @@ namespace OpenSim.Region.CoreModules.World.WorldMap | |||
93 | } | 93 | } |
94 | 94 | ||
95 | // try to fetch from GridServer | 95 | // try to fetch from GridServer |
96 | List<GridRegion> regionInfos = m_scene.GridService.GetRegionsByName(UUID.Zero, mapName, 20); | 96 | List<GridRegion> regionInfos = m_scene.GridService.GetRegionsByName(m_scene.RegionInfo.ScopeID, mapName, 20); |
97 | if (regionInfos == null) | 97 | if (regionInfos == null) |
98 | { | 98 | { |
99 | m_log.Warn("[MAPSEARCHMODULE]: RequestNamedRegions returned null. Old gridserver?"); | 99 | m_log.Warn("[MAPSEARCHMODULE]: RequestNamedRegions returned null. Old gridserver?"); |
100 | // service wasn't available; maybe still an old GridServer. Try the old API, though it will return only one region | 100 | // service wasn't available; maybe still an old GridServer. Try the old API, though it will return only one region |
101 | regionInfos = new List<GridRegion>(); | 101 | regionInfos = new List<GridRegion>(); |
102 | GridRegion info = m_scene.GridService.GetRegionByName(UUID.Zero, mapName); | 102 | GridRegion info = m_scene.GridService.GetRegionByName(m_scene.RegionInfo.ScopeID, mapName); |
103 | if (info != null) regionInfos.Add(info); | 103 | if (info != null) regionInfos.Add(info); |
104 | } | 104 | } |
105 | 105 | ||
diff --git a/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs b/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs index 9869f4a..e3ba190 100644 --- a/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs +++ b/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs | |||
@@ -33,6 +33,7 @@ using System.Drawing.Imaging; | |||
33 | using System.IO; | 33 | using System.IO; |
34 | using System.Net; | 34 | using System.Net; |
35 | using System.Reflection; | 35 | using System.Reflection; |
36 | using System.Runtime.Remoting.Messaging; | ||
36 | using System.Threading; | 37 | using System.Threading; |
37 | using log4net; | 38 | using log4net; |
38 | using Nini.Config; | 39 | using Nini.Config; |
@@ -413,11 +414,13 @@ namespace OpenSim.Region.CoreModules.World.WorldMap | |||
413 | } | 414 | } |
414 | } | 415 | } |
415 | 416 | ||
417 | private int nAsyncRequests = 0; | ||
416 | /// <summary> | 418 | /// <summary> |
417 | /// Processing thread main() loop for doing remote mapitem requests | 419 | /// Processing thread main() loop for doing remote mapitem requests |
418 | /// </summary> | 420 | /// </summary> |
419 | public void process() | 421 | public void process() |
420 | { | 422 | { |
423 | const int MAX_ASYNC_REQUESTS = 20; | ||
421 | try | 424 | try |
422 | { | 425 | { |
423 | while (true) | 426 | while (true) |
@@ -437,10 +440,16 @@ namespace OpenSim.Region.CoreModules.World.WorldMap | |||
437 | dorequest = false; | 440 | dorequest = false; |
438 | } | 441 | } |
439 | 442 | ||
440 | if (dorequest) | 443 | if (dorequest && !m_blacklistedregions.ContainsKey(st.regionhandle)) |
441 | { | 444 | { |
442 | OSDMap response = RequestMapItemsAsync("", st.agentID, st.flags, st.EstateID, st.godlike, st.itemtype, st.regionhandle); | 445 | while (nAsyncRequests >= MAX_ASYNC_REQUESTS) // hit the break |
443 | RequestMapItemsCompleted(response); | 446 | Thread.Sleep(80); |
447 | |||
448 | RequestMapItemsDelegate d = RequestMapItemsAsync; | ||
449 | d.BeginInvoke(st.agentID, st.flags, st.EstateID, st.godlike, st.itemtype, st.regionhandle, RequestMapItemsCompleted, null); | ||
450 | //OSDMap response = RequestMapItemsAsync(st.agentID, st.flags, st.EstateID, st.godlike, st.itemtype, st.regionhandle); | ||
451 | //RequestMapItemsCompleted(response); | ||
452 | Interlocked.Increment(ref nAsyncRequests); | ||
444 | } | 453 | } |
445 | } | 454 | } |
446 | 455 | ||
@@ -469,8 +478,18 @@ namespace OpenSim.Region.CoreModules.World.WorldMap | |||
469 | /// Sends the mapitem response to the IClientAPI | 478 | /// Sends the mapitem response to the IClientAPI |
470 | /// </summary> | 479 | /// </summary> |
471 | /// <param name="response">The OSDMap Response for the mapitem</param> | 480 | /// <param name="response">The OSDMap Response for the mapitem</param> |
472 | private void RequestMapItemsCompleted(OSDMap response) | 481 | private void RequestMapItemsCompleted(IAsyncResult iar) |
473 | { | 482 | { |
483 | AsyncResult result = (AsyncResult)iar; | ||
484 | RequestMapItemsDelegate icon = (RequestMapItemsDelegate)result.AsyncDelegate; | ||
485 | |||
486 | OSDMap response = (OSDMap)icon.EndInvoke(iar); | ||
487 | |||
488 | Interlocked.Decrement(ref nAsyncRequests); | ||
489 | |||
490 | if (!response.ContainsKey("requestID")) | ||
491 | return; | ||
492 | |||
474 | UUID requestID = response["requestID"].AsUUID(); | 493 | UUID requestID = response["requestID"].AsUUID(); |
475 | 494 | ||
476 | if (requestID != UUID.Zero) | 495 | if (requestID != UUID.Zero) |
@@ -538,6 +557,8 @@ namespace OpenSim.Region.CoreModules.World.WorldMap | |||
538 | EnqueueMapItemRequest(st); | 557 | EnqueueMapItemRequest(st); |
539 | } | 558 | } |
540 | 559 | ||
560 | private delegate OSDMap RequestMapItemsDelegate(UUID id, uint flags, | ||
561 | uint EstateID, bool godlike, uint itemtype, ulong regionhandle); | ||
541 | /// <summary> | 562 | /// <summary> |
542 | /// Does the actual remote mapitem request | 563 | /// Does the actual remote mapitem request |
543 | /// This should be called from an asynchronous thread | 564 | /// This should be called from an asynchronous thread |
@@ -552,9 +573,10 @@ namespace OpenSim.Region.CoreModules.World.WorldMap | |||
552 | /// <param name="itemtype">passed in from packet</param> | 573 | /// <param name="itemtype">passed in from packet</param> |
553 | /// <param name="regionhandle">Region we're looking up</param> | 574 | /// <param name="regionhandle">Region we're looking up</param> |
554 | /// <returns></returns> | 575 | /// <returns></returns> |
555 | private OSDMap RequestMapItemsAsync(string httpserver, UUID id, uint flags, | 576 | private OSDMap RequestMapItemsAsync(UUID id, uint flags, |
556 | uint EstateID, bool godlike, uint itemtype, ulong regionhandle) | 577 | uint EstateID, bool godlike, uint itemtype, ulong regionhandle) |
557 | { | 578 | { |
579 | string httpserver = ""; | ||
558 | bool blacklisted = false; | 580 | bool blacklisted = false; |
559 | lock (m_blacklistedregions) | 581 | lock (m_blacklistedregions) |
560 | { | 582 | { |
@@ -593,7 +615,7 @@ namespace OpenSim.Region.CoreModules.World.WorldMap | |||
593 | if (!m_blacklistedregions.ContainsKey(regionhandle)) | 615 | if (!m_blacklistedregions.ContainsKey(regionhandle)) |
594 | m_blacklistedregions.Add(regionhandle, Environment.TickCount); | 616 | m_blacklistedregions.Add(regionhandle, Environment.TickCount); |
595 | } | 617 | } |
596 | m_log.InfoFormat("[WORLD MAP]: Blacklisted region {0}", regionhandle.ToString()); | 618 | //m_log.InfoFormat("[WORLD MAP]: Blacklisted region {0}", regionhandle.ToString()); |
597 | } | 619 | } |
598 | } | 620 | } |
599 | 621 | ||
@@ -638,7 +660,7 @@ namespace OpenSim.Region.CoreModules.World.WorldMap | |||
638 | os = mapitemsrequest.GetRequestStream(); | 660 | os = mapitemsrequest.GetRequestStream(); |
639 | os.Write(buffer, 0, buffer.Length); //Send it | 661 | os.Write(buffer, 0, buffer.Length); //Send it |
640 | os.Close(); | 662 | os.Close(); |
641 | //m_log.DebugFormat("[WORLD MAP]: Getting MapItems from Sim {0}", httpserver); | 663 | //m_log.DebugFormat("[WORLD MAP]: Getting MapItems from {0}", httpserver); |
642 | } | 664 | } |
643 | catch (WebException ex) | 665 | catch (WebException ex) |
644 | { | 666 | { |
@@ -654,15 +676,22 @@ namespace OpenSim.Region.CoreModules.World.WorldMap | |||
654 | 676 | ||
655 | return responseMap; | 677 | return responseMap; |
656 | } | 678 | } |
679 | catch | ||
680 | { | ||
681 | m_log.DebugFormat("[WORLD MAP]: RequestMapItems failed for {0}", httpserver); | ||
682 | responseMap["connect"] = OSD.FromBoolean(false); | ||
683 | return responseMap; | ||
684 | } | ||
657 | 685 | ||
658 | string response_mapItems_reply = null; | 686 | string response_mapItems_reply = null; |
659 | { // get the response | 687 | { // get the response |
688 | StreamReader sr = null; | ||
660 | try | 689 | try |
661 | { | 690 | { |
662 | WebResponse webResponse = mapitemsrequest.GetResponse(); | 691 | WebResponse webResponse = mapitemsrequest.GetResponse(); |
663 | if (webResponse != null) | 692 | if (webResponse != null) |
664 | { | 693 | { |
665 | StreamReader sr = new StreamReader(webResponse.GetResponseStream()); | 694 | sr = new StreamReader(webResponse.GetResponseStream()); |
666 | response_mapItems_reply = sr.ReadToEnd().Trim(); | 695 | response_mapItems_reply = sr.ReadToEnd().Trim(); |
667 | } | 696 | } |
668 | else | 697 | else |
@@ -683,6 +712,24 @@ namespace OpenSim.Region.CoreModules.World.WorldMap | |||
683 | 712 | ||
684 | return responseMap; | 713 | return responseMap; |
685 | } | 714 | } |
715 | catch | ||
716 | { | ||
717 | m_log.DebugFormat("[WORLD MAP]: RequestMapItems failed for {0}", httpserver); | ||
718 | responseMap["connect"] = OSD.FromBoolean(false); | ||
719 | lock (m_blacklistedregions) | ||
720 | { | ||
721 | if (!m_blacklistedregions.ContainsKey(regionhandle)) | ||
722 | m_blacklistedregions.Add(regionhandle, Environment.TickCount); | ||
723 | } | ||
724 | |||
725 | return responseMap; | ||
726 | } | ||
727 | finally | ||
728 | { | ||
729 | if (sr != null) | ||
730 | sr.Close(); | ||
731 | } | ||
732 | |||
686 | OSD rezResponse = null; | 733 | OSD rezResponse = null; |
687 | try | 734 | try |
688 | { | 735 | { |
@@ -691,14 +738,29 @@ namespace OpenSim.Region.CoreModules.World.WorldMap | |||
691 | responseMap = (OSDMap)rezResponse; | 738 | responseMap = (OSDMap)rezResponse; |
692 | responseMap["requestID"] = OSD.FromUUID(requestID); | 739 | responseMap["requestID"] = OSD.FromUUID(requestID); |
693 | } | 740 | } |
694 | catch (Exception) | 741 | catch (Exception ex) |
695 | { | 742 | { |
696 | //m_log.InfoFormat("[OGP]: exception on parse of rez reply {0}", ex.Message); | 743 | m_log.InfoFormat("[WORLD MAP]: exception on parse of RequestMapItems reply from {0}: {1}", httpserver, ex.Message); |
697 | responseMap["connect"] = OSD.FromBoolean(false); | 744 | responseMap["connect"] = OSD.FromBoolean(false); |
745 | lock (m_blacklistedregions) | ||
746 | { | ||
747 | if (!m_blacklistedregions.ContainsKey(regionhandle)) | ||
748 | m_blacklistedregions.Add(regionhandle, Environment.TickCount); | ||
749 | } | ||
698 | 750 | ||
699 | return responseMap; | 751 | return responseMap; |
700 | } | 752 | } |
701 | } | 753 | } |
754 | |||
755 | if (!responseMap.ContainsKey(itemtype.ToString())) // remote sim doesnt have the stated region handle | ||
756 | { | ||
757 | if (!m_blacklistedregions.ContainsKey(regionhandle)) | ||
758 | { | ||
759 | m_log.DebugFormat("[WORLD MAP]: Remote sim does not have the stated region. Blacklisting."); | ||
760 | m_blacklistedregions.Add(regionhandle, Environment.TickCount); | ||
761 | } | ||
762 | } | ||
763 | |||
702 | return responseMap; | 764 | return responseMap; |
703 | } | 765 | } |
704 | 766 | ||