aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Services
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Services')
-rw-r--r--OpenSim/Services/Connectors/Land/LandServicesConnector.cs2
-rw-r--r--OpenSim/Services/Connectors/Neighbour/NeighbourServicesConnector.cs2
-rw-r--r--OpenSim/Services/Connectors/SimianGrid/SimianGridMaptileModule.cs4
-rw-r--r--OpenSim/Services/Connectors/Simulation/SimulationDataService.cs10
-rw-r--r--OpenSim/Services/GridService/GridService.cs9
-rw-r--r--OpenSim/Services/Interfaces/IGridService.cs33
-rw-r--r--OpenSim/Services/LLLoginService/LLLoginResponse.cs36
-rw-r--r--OpenSim/Services/LLLoginService/LLLoginService.cs5
8 files changed, 84 insertions, 17 deletions
diff --git a/OpenSim/Services/Connectors/Land/LandServicesConnector.cs b/OpenSim/Services/Connectors/Land/LandServicesConnector.cs
index 30a73a4..644331a 100644
--- a/OpenSim/Services/Connectors/Land/LandServicesConnector.cs
+++ b/OpenSim/Services/Connectors/Land/LandServicesConnector.cs
@@ -78,7 +78,7 @@ namespace OpenSim.Services.Connectors
78 try 78 try
79 { 79 {
80 uint xpos = 0, ypos = 0; 80 uint xpos = 0, ypos = 0;
81 Utils.LongToUInts(regionHandle, out xpos, out ypos); 81 Util.RegionHandleToWorldLoc(regionHandle, out xpos, out ypos);
82 GridRegion info = m_GridService.GetRegionByPosition(scopeID, (int)xpos, (int)ypos); 82 GridRegion info = m_GridService.GetRegionByPosition(scopeID, (int)xpos, (int)ypos);
83 if (info != null) // just to be sure 83 if (info != null) // just to be sure
84 { 84 {
diff --git a/OpenSim/Services/Connectors/Neighbour/NeighbourServicesConnector.cs b/OpenSim/Services/Connectors/Neighbour/NeighbourServicesConnector.cs
index 774fe2a..beead97 100644
--- a/OpenSim/Services/Connectors/Neighbour/NeighbourServicesConnector.cs
+++ b/OpenSim/Services/Connectors/Neighbour/NeighbourServicesConnector.cs
@@ -69,7 +69,7 @@ namespace OpenSim.Services.Connectors
69 public virtual GridRegion HelloNeighbour(ulong regionHandle, RegionInfo thisRegion) 69 public virtual GridRegion HelloNeighbour(ulong regionHandle, RegionInfo thisRegion)
70 { 70 {
71 uint x = 0, y = 0; 71 uint x = 0, y = 0;
72 Utils.LongToUInts(regionHandle, out x, out y); 72 Util.RegionHandleToWorldLoc(regionHandle, out x, out y);
73 GridRegion regInfo = m_GridService.GetRegionByPosition(thisRegion.ScopeID, (int)x, (int)y); 73 GridRegion regInfo = m_GridService.GetRegionByPosition(thisRegion.ScopeID, (int)x, (int)y);
74 if ((regInfo != null) && 74 if ((regInfo != null) &&
75 // Don't remote-call this instance; that's a startup hickup 75 // Don't remote-call this instance; that's a startup hickup
diff --git a/OpenSim/Services/Connectors/SimianGrid/SimianGridMaptileModule.cs b/OpenSim/Services/Connectors/SimianGrid/SimianGridMaptileModule.cs
index b999509..71334ee 100644
--- a/OpenSim/Services/Connectors/SimianGrid/SimianGridMaptileModule.cs
+++ b/OpenSim/Services/Connectors/SimianGrid/SimianGridMaptileModule.cs
@@ -201,8 +201,8 @@ namespace OpenSim.Services.Connectors.SimianGrid
201 NameValueCollection requestArgs = new NameValueCollection 201 NameValueCollection requestArgs = new NameValueCollection
202 { 202 {
203 { "RequestMethod", "xAddMapTile" }, 203 { "RequestMethod", "xAddMapTile" },
204 { "X", scene.RegionInfo.RegionLocX.ToString() }, 204 { "X", scene.RegionInfo.LegacyRegionLocX.ToString() },
205 { "Y", scene.RegionInfo.RegionLocY.ToString() }, 205 { "Y", scene.RegionInfo.LegacyRegionLocY.ToString() },
206 { "ContentType", "image/png" }, 206 { "ContentType", "image/png" },
207 { "EncodedData", System.Convert.ToBase64String(pngData) } 207 { "EncodedData", System.Convert.ToBase64String(pngData) }
208 }; 208 };
diff --git a/OpenSim/Services/Connectors/Simulation/SimulationDataService.cs b/OpenSim/Services/Connectors/Simulation/SimulationDataService.cs
index 504fcaf..2cbf967 100644
--- a/OpenSim/Services/Connectors/Simulation/SimulationDataService.cs
+++ b/OpenSim/Services/Connectors/Simulation/SimulationDataService.cs
@@ -100,6 +100,11 @@ namespace OpenSim.Services.Connectors
100 return m_database.LoadObjects(regionUUID); 100 return m_database.LoadObjects(regionUUID);
101 } 101 }
102 102
103 public void StoreTerrain(TerrainData terrain, UUID regionID)
104 {
105 m_database.StoreTerrain(terrain, regionID);
106 }
107
103 public void StoreTerrain(double[,] terrain, UUID regionID) 108 public void StoreTerrain(double[,] terrain, UUID regionID)
104 { 109 {
105 m_database.StoreTerrain(terrain, regionID); 110 m_database.StoreTerrain(terrain, regionID);
@@ -110,6 +115,11 @@ namespace OpenSim.Services.Connectors
110 return m_database.LoadTerrain(regionID); 115 return m_database.LoadTerrain(regionID);
111 } 116 }
112 117
118 public TerrainData LoadTerrain(UUID regionID, int pSizeX, int pSizeY, int pSizeZ)
119 {
120 return m_database.LoadTerrain(regionID, pSizeX, pSizeY, pSizeZ);
121 }
122
113 public void StoreLandObject(ILandObject Parcel) 123 public void StoreLandObject(ILandObject Parcel)
114 { 124 {
115 m_database.StoreLandObject(Parcel); 125 m_database.StoreLandObject(Parcel);
diff --git a/OpenSim/Services/GridService/GridService.cs b/OpenSim/Services/GridService/GridService.cs
index e72b7f9..aa7ffc1 100644
--- a/OpenSim/Services/GridService/GridService.cs
+++ b/OpenSim/Services/GridService/GridService.cs
@@ -347,6 +347,11 @@ namespace OpenSim.Services.GridService
347 return null; 347 return null;
348 } 348 }
349 349
350 // Get a region given its base coordinates.
351 // NOTE: this is NOT 'get a region by some point in the region'. The coordinate MUST
352 // be the base coordinate of the region.
353 // The snapping is technically unnecessary but is harmless because regions are always
354 // multiples of the legacy region size (256).
350 public GridRegion GetRegionByPosition(UUID scopeID, int x, int y) 355 public GridRegion GetRegionByPosition(UUID scopeID, int x, int y)
351 { 356 {
352 int snapX = (int)(x / Constants.RegionSize) * (int)Constants.RegionSize; 357 int snapX = (int)(x / Constants.RegionSize) * (int)Constants.RegionSize;
@@ -441,6 +446,8 @@ namespace OpenSim.Services.GridService
441 RegionData rdata = new RegionData(); 446 RegionData rdata = new RegionData();
442 rdata.posX = (int)rinfo.RegionLocX; 447 rdata.posX = (int)rinfo.RegionLocX;
443 rdata.posY = (int)rinfo.RegionLocY; 448 rdata.posY = (int)rinfo.RegionLocY;
449 rdata.sizeX = rinfo.RegionSizeX;
450 rdata.sizeY = rinfo.RegionSizeY;
444 rdata.RegionID = rinfo.RegionID; 451 rdata.RegionID = rinfo.RegionID;
445 rdata.RegionName = rinfo.RegionName; 452 rdata.RegionName = rinfo.RegionName;
446 rdata.Data = rinfo.ToKeyValuePairs(); 453 rdata.Data = rinfo.ToKeyValuePairs();
@@ -454,6 +461,8 @@ namespace OpenSim.Services.GridService
454 GridRegion rinfo = new GridRegion(rdata.Data); 461 GridRegion rinfo = new GridRegion(rdata.Data);
455 rinfo.RegionLocX = rdata.posX; 462 rinfo.RegionLocX = rdata.posX;
456 rinfo.RegionLocY = rdata.posY; 463 rinfo.RegionLocY = rdata.posY;
464 rinfo.RegionSizeX = rdata.sizeX;
465 rinfo.RegionSizeY = rdata.sizeY;
457 rinfo.RegionID = rdata.RegionID; 466 rinfo.RegionID = rdata.RegionID;
458 rinfo.RegionName = rdata.RegionName; 467 rinfo.RegionName = rdata.RegionName;
459 rinfo.ScopeID = rdata.ScopeID; 468 rinfo.ScopeID = rdata.ScopeID;
diff --git a/OpenSim/Services/Interfaces/IGridService.cs b/OpenSim/Services/Interfaces/IGridService.cs
index 88ac5b3..e1a3cef 100644
--- a/OpenSim/Services/Interfaces/IGridService.cs
+++ b/OpenSim/Services/Interfaces/IGridService.cs
@@ -168,12 +168,12 @@ namespace OpenSim.Services.Interfaces
168 /// <summary> 168 /// <summary>
169 /// The co-ordinate of this region. 169 /// The co-ordinate of this region.
170 /// </summary> 170 /// </summary>
171 public int RegionCoordX { get { return RegionLocX / (int)Constants.RegionSize; } } 171 public int RegionCoordX { get { return (int)Util.WorldToRegionLoc((uint)RegionLocX); } }
172 172
173 /// <summary> 173 /// <summary>
174 /// The co-ordinate of this region 174 /// The co-ordinate of this region
175 /// </summary> 175 /// </summary>
176 public int RegionCoordY { get { return RegionLocY / (int)Constants.RegionSize; } } 176 public int RegionCoordY { get { return (int)Util.WorldToRegionLoc((uint)RegionLocY); } }
177 177
178 /// <summary> 178 /// <summary>
179 /// The location of this region in meters. 179 /// The location of this region in meters.
@@ -185,6 +185,9 @@ namespace OpenSim.Services.Interfaces
185 } 185 }
186 protected int m_regionLocX; 186 protected int m_regionLocX;
187 187
188 public int RegionSizeX { get; set; }
189 public int RegionSizeY { get; set; }
190
188 /// <summary> 191 /// <summary>
189 /// The location of this region in meters. 192 /// The location of this region in meters.
190 /// </summary> 193 /// </summary>
@@ -222,6 +225,8 @@ namespace OpenSim.Services.Interfaces
222 { 225 {
223 m_regionLocX = regionLocX; 226 m_regionLocX = regionLocX;
224 m_regionLocY = regionLocY; 227 m_regionLocY = regionLocY;
228 RegionSizeX = (int)Constants.RegionSize;
229 RegionSizeY = (int)Constants.RegionSize;
225 230
226 m_internalEndPoint = internalEndPoint; 231 m_internalEndPoint = internalEndPoint;
227 m_externalHostName = externalUri; 232 m_externalHostName = externalUri;
@@ -231,6 +236,8 @@ namespace OpenSim.Services.Interfaces
231 { 236 {
232 m_regionLocX = regionLocX; 237 m_regionLocX = regionLocX;
233 m_regionLocY = regionLocY; 238 m_regionLocY = regionLocY;
239 RegionSizeX = (int)Constants.RegionSize;
240 RegionSizeY = (int)Constants.RegionSize;
234 241
235 m_externalHostName = externalUri; 242 m_externalHostName = externalUri;
236 243
@@ -239,15 +246,19 @@ namespace OpenSim.Services.Interfaces
239 246
240 public GridRegion(uint xcell, uint ycell) 247 public GridRegion(uint xcell, uint ycell)
241 { 248 {
242 m_regionLocX = (int)(xcell * Constants.RegionSize); 249 m_regionLocX = (int)Util.RegionToWorldLoc(xcell);
243 m_regionLocY = (int)(ycell * Constants.RegionSize); 250 m_regionLocY = (int)Util.RegionToWorldLoc(ycell);
251 RegionSizeX = (int)Constants.RegionSize;
252 RegionSizeY = (int)Constants.RegionSize;
244 } 253 }
245 254
246 public GridRegion(RegionInfo ConvertFrom) 255 public GridRegion(RegionInfo ConvertFrom)
247 { 256 {
248 m_regionName = ConvertFrom.RegionName; 257 m_regionName = ConvertFrom.RegionName;
249 m_regionLocX = (int)(ConvertFrom.RegionLocX * Constants.RegionSize); 258 m_regionLocX = (int)(ConvertFrom.RegionWorldLocX);
250 m_regionLocY = (int)(ConvertFrom.RegionLocY * Constants.RegionSize); 259 m_regionLocY = (int)(ConvertFrom.RegionWorldLocY);
260 RegionSizeX = (int)ConvertFrom.RegionSizeX;
261 RegionSizeY = (int)ConvertFrom.RegionSizeY;
251 m_internalEndPoint = ConvertFrom.InternalEndPoint; 262 m_internalEndPoint = ConvertFrom.InternalEndPoint;
252 m_externalHostName = ConvertFrom.ExternalHostName; 263 m_externalHostName = ConvertFrom.ExternalHostName;
253 m_httpPort = ConvertFrom.HttpPort; 264 m_httpPort = ConvertFrom.HttpPort;
@@ -266,6 +277,8 @@ namespace OpenSim.Services.Interfaces
266 m_regionName = ConvertFrom.RegionName; 277 m_regionName = ConvertFrom.RegionName;
267 m_regionLocX = ConvertFrom.RegionLocX; 278 m_regionLocX = ConvertFrom.RegionLocX;
268 m_regionLocY = ConvertFrom.RegionLocY; 279 m_regionLocY = ConvertFrom.RegionLocY;
280 RegionSizeX = ConvertFrom.RegionSizeX;
281 RegionSizeY = ConvertFrom.RegionSizeY;
269 m_internalEndPoint = ConvertFrom.InternalEndPoint; 282 m_internalEndPoint = ConvertFrom.InternalEndPoint;
270 m_externalHostName = ConvertFrom.ExternalHostName; 283 m_externalHostName = ConvertFrom.ExternalHostName;
271 m_httpPort = ConvertFrom.HttpPort; 284 m_httpPort = ConvertFrom.HttpPort;
@@ -373,6 +386,8 @@ namespace OpenSim.Services.Interfaces
373 kvp["uuid"] = RegionID.ToString(); 386 kvp["uuid"] = RegionID.ToString();
374 kvp["locX"] = RegionLocX.ToString(); 387 kvp["locX"] = RegionLocX.ToString();
375 kvp["locY"] = RegionLocY.ToString(); 388 kvp["locY"] = RegionLocY.ToString();
389 kvp["sizeX"] = RegionSizeX.ToString();
390 kvp["sizeY"] = RegionSizeY.ToString();
376 kvp["regionName"] = RegionName; 391 kvp["regionName"] = RegionName;
377 kvp["serverIP"] = ExternalHostName; //ExternalEndPoint.Address.ToString(); 392 kvp["serverIP"] = ExternalHostName; //ExternalEndPoint.Address.ToString();
378 kvp["serverHttpPort"] = HttpPort.ToString(); 393 kvp["serverHttpPort"] = HttpPort.ToString();
@@ -399,6 +414,12 @@ namespace OpenSim.Services.Interfaces
399 if (kvp.ContainsKey("locY")) 414 if (kvp.ContainsKey("locY"))
400 RegionLocY = Convert.ToInt32((string)kvp["locY"]); 415 RegionLocY = Convert.ToInt32((string)kvp["locY"]);
401 416
417 if (kvp.ContainsKey("sizeX"))
418 RegionSizeX = Convert.ToInt32((string)kvp["sizeX"]);
419
420 if (kvp.ContainsKey("sizeY"))
421 RegionSizeY = Convert.ToInt32((string)kvp["sizeY"]);
422
402 if (kvp.ContainsKey("regionName")) 423 if (kvp.ContainsKey("regionName"))
403 RegionName = (string)kvp["regionName"]; 424 RegionName = (string)kvp["regionName"];
404 425
diff --git a/OpenSim/Services/LLLoginService/LLLoginResponse.cs b/OpenSim/Services/LLLoginService/LLLoginResponse.cs
index 6ab5258..ff51f09 100644
--- a/OpenSim/Services/LLLoginService/LLLoginResponse.cs
+++ b/OpenSim/Services/LLLoginService/LLLoginResponse.cs
@@ -254,11 +254,12 @@ namespace OpenSim.Services.LLLoginService
254 Currency = currency; 254 Currency = currency;
255 ClassifiedFee = classifiedFee; 255 ClassifiedFee = classifiedFee;
256 256
257
258 FillOutHomeData(pinfo, home); 257 FillOutHomeData(pinfo, home);
259 LookAt = String.Format("[r{0},r{1},r{2}]", lookAt.X, lookAt.Y, lookAt.Z); 258 LookAt = String.Format("[r{0},r{1},r{2}]", lookAt.X, lookAt.Y, lookAt.Z);
260 259
261 FillOutRegionData(destination); 260 FillOutRegionData(destination);
261 m_log.DebugFormat("[LOGIN RESPONSE] LLLoginResponse create. sizeX={0}, sizeY={1}", RegionSizeX, RegionSizeY);
262 Util.PrintCallStack();
262 263
263 FillOutSeedCap(aCircuit, destination, clientIP); 264 FillOutSeedCap(aCircuit, destination, clientIP);
264 265
@@ -361,7 +362,9 @@ namespace OpenSim.Services.LLLoginService
361 362
362 private void FillOutHomeData(GridUserInfo pinfo, GridRegion home) 363 private void FillOutHomeData(GridUserInfo pinfo, GridRegion home)
363 { 364 {
364 int x = 1000 * (int)Constants.RegionSize, y = 1000 * (int)Constants.RegionSize; 365 // int x = 1000 * (int)Constants.RegionSize, y = 1000 * (int)Constants.RegionSize;
366 int x = (int)Util.RegionToWorldLoc(1000);
367 int y = (int)Util.RegionToWorldLoc(1000);
365 if (home != null) 368 if (home != null)
366 { 369 {
367 x = home.RegionLocX; 370 x = home.RegionLocX;
@@ -384,6 +387,8 @@ namespace OpenSim.Services.LLLoginService
384 SimPort = (uint)endPoint.Port; 387 SimPort = (uint)endPoint.Port;
385 RegionX = (uint)destination.RegionLocX; 388 RegionX = (uint)destination.RegionLocX;
386 RegionY = (uint)destination.RegionLocY; 389 RegionY = (uint)destination.RegionLocY;
390 RegionSizeX = destination.RegionSizeX;
391 RegionSizeY = destination.RegionSizeY;
387 } 392 }
388 393
389 private void FillOutSeedCap(AgentCircuitData aCircuit, GridRegion destination, IPEndPoint ipepClient) 394 private void FillOutSeedCap(AgentCircuitData aCircuit, GridRegion destination, IPEndPoint ipepClient)
@@ -433,10 +438,23 @@ namespace OpenSim.Services.LLLoginService
433 ErrorReason = "key"; 438 ErrorReason = "key";
434 welcomeMessage = "Welcome to OpenSim!"; 439 welcomeMessage = "Welcome to OpenSim!";
435 seedCapability = String.Empty; 440 seedCapability = String.Empty;
436 home = "{'region_handle':[r" + (1000*Constants.RegionSize).ToString() + ",r" + (1000*Constants.RegionSize).ToString() + "], 'position':[r" + 441 home = "{'region_handle':[r"
437 userProfile.homepos.X.ToString() + ",r" + userProfile.homepos.Y.ToString() + ",r" + 442 + Util.RegionToWorldLoc(1000).ToString()
438 userProfile.homepos.Z.ToString() + "], 'look_at':[r" + userProfile.homelookat.X.ToString() + ",r" + 443 + ",r"
439 userProfile.homelookat.Y.ToString() + ",r" + userProfile.homelookat.Z.ToString() + "]}"; 444 + Util.RegionToWorldLoc(1000).ToString()
445 + "], 'position':[r"
446 + userProfile.homepos.X.ToString()
447 + ",r"
448 + userProfile.homepos.Y.ToString()
449 + ",r"
450 + userProfile.homepos.Z.ToString()
451 + "], 'look_at':[r"
452 + userProfile.homelookat.X.ToString()
453 + ",r"
454 + userProfile.homelookat.Y.ToString()
455 + ",r"
456 + userProfile.homelookat.Z.ToString()
457 + "]}";
440 lookAt = "[r0.99949799999999999756,r0.03166859999999999814,r0]"; 458 lookAt = "[r0.99949799999999999756,r0.03166859999999999814,r0]";
441 RegionX = (uint) 255232; 459 RegionX = (uint) 255232;
442 RegionY = (uint) 254976; 460 RegionY = (uint) 254976;
@@ -529,6 +547,9 @@ namespace OpenSim.Services.LLLoginService
529 responseData["message"] = welcomeMessage; 547 responseData["message"] = welcomeMessage;
530 responseData["region_x"] = (Int32)(RegionX); 548 responseData["region_x"] = (Int32)(RegionX);
531 responseData["region_y"] = (Int32)(RegionY); 549 responseData["region_y"] = (Int32)(RegionY);
550 responseData["region_size_x"] = (Int32)RegionSizeX;
551 responseData["region_size_y"] = (Int32)RegionSizeY;
552 m_log.DebugFormat("[LOGIN RESPONSE] returning sizeX={0}, sizeY={1}", RegionSizeX, RegionSizeY);
532 553
533 if (searchURL != String.Empty) 554 if (searchURL != String.Empty)
534 responseData["search"] = searchURL; 555 responseData["search"] = searchURL;
@@ -918,6 +939,9 @@ namespace OpenSim.Services.LLLoginService
918 set { regionY = value; } 939 set { regionY = value; }
919 } 940 }
920 941
942 public int RegionSizeX { get; private set; }
943 public int RegionSizeY { get; private set; }
944
921 public string SunTexture 945 public string SunTexture
922 { 946 {
923 get { return sunTexture; } 947 get { return sunTexture; }
diff --git a/OpenSim/Services/LLLoginService/LLLoginService.cs b/OpenSim/Services/LLLoginService/LLLoginService.cs
index fe43582..150c2c0 100644
--- a/OpenSim/Services/LLLoginService/LLLoginService.cs
+++ b/OpenSim/Services/LLLoginService/LLLoginService.cs
@@ -50,6 +50,8 @@ namespace OpenSim.Services.LLLoginService
50 public class LLLoginService : ILoginService 50 public class LLLoginService : ILoginService
51 { 51 {
52 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 52 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
53 private static readonly string LogHeader = "[LLOGIN SERVICE]";
54
53 private static bool Initialized = false; 55 private static bool Initialized = false;
54 56
55 protected IUserAccountService m_UserAccountService; 57 protected IUserAccountService m_UserAccountService;
@@ -389,6 +391,7 @@ namespace OpenSim.Services.LLLoginService
389 if (guinfo == null) 391 if (guinfo == null)
390 { 392 {
391 // something went wrong, make something up, so that we don't have to test this anywhere else 393 // something went wrong, make something up, so that we don't have to test this anywhere else
394 m_log.DebugFormat("{0} Failed to fetch GridUserInfo. Creating empty GridUserInfo as home", LogHeader);
392 guinfo = new GridUserInfo(); 395 guinfo = new GridUserInfo();
393 guinfo.LastPosition = guinfo.HomePosition = new Vector3(128, 128, 30); 396 guinfo.LastPosition = guinfo.HomePosition = new Vector3(128, 128, 30);
394 } 397 }
@@ -681,7 +684,7 @@ namespace OpenSim.Services.LLLoginService
681 private GridRegion FindAlternativeRegion(UUID scopeID) 684 private GridRegion FindAlternativeRegion(UUID scopeID)
682 { 685 {
683 List<GridRegion> hyperlinks = null; 686 List<GridRegion> hyperlinks = null;
684 List<GridRegion> regions = m_GridService.GetFallbackRegions(scopeID, 1000 * (int)Constants.RegionSize, 1000 * (int)Constants.RegionSize); 687 List<GridRegion> regions = m_GridService.GetFallbackRegions(scopeID, (int)Util.RegionToWorldLoc(1000), (int)Util.RegionToWorldLoc(1000));
685 if (regions != null && regions.Count > 0) 688 if (regions != null && regions.Count > 0)
686 { 689 {
687 hyperlinks = m_GridService.GetHyperlinks(scopeID); 690 hyperlinks = m_GridService.GetHyperlinks(scopeID);