diff options
author | Homer Horwitz | 2008-10-03 23:00:42 +0000 |
---|---|---|
committer | Homer Horwitz | 2008-10-03 23:00:42 +0000 |
commit | 16d68749a457acf079a6737f4ca9a9adb9e53e2f (patch) | |
tree | 901b2c31e53eeb97f30ac46f2b7f406a01e1755a /OpenSim/Region/Communications/OGS1 | |
parent | Fix: Mantis#2326: Fix: privilege escalation through attach from ground (diff) | |
download | opensim-SC-16d68749a457acf079a6737f4ca9a9adb9e53e2f.zip opensim-SC-16d68749a457acf079a6737f4ca9a9adb9e53e2f.tar.gz opensim-SC-16d68749a457acf079a6737f4ca9a9adb9e53e2f.tar.bz2 opensim-SC-16d68749a457acf079a6737f4ca9a9adb9e53e2f.tar.xz |
Add the missing bits for the new region-search:
- Added lookup in the data-layer
- MySQL works
- SQLite doesn't have a grid-db, so it won't work there
- I added MSSQL-code to the best of my knowledge; but I don't know MSSQL :-)
- Added the plumbing up to OGS1GridServices. This speaks with the grid-server
via XMLRPC.
- Modified MapSearchModule to use the new data. It's backward compatible; if
used with an old grid-server, it just returns one found region instead of a
list.
- Refactored a bit.
Note: This updates data, grid-server and region code. No new files.
Diffstat (limited to 'OpenSim/Region/Communications/OGS1')
-rw-r--r-- | OpenSim/Region/Communications/OGS1/OGS1GridServices.cs | 119 |
1 files changed, 76 insertions, 43 deletions
diff --git a/OpenSim/Region/Communications/OGS1/OGS1GridServices.cs b/OpenSim/Region/Communications/OGS1/OGS1GridServices.cs index a2d3823..397062b 100644 --- a/OpenSim/Region/Communications/OGS1/OGS1GridServices.cs +++ b/OpenSim/Region/Communications/OGS1/OGS1GridServices.cs | |||
@@ -352,27 +352,7 @@ namespace OpenSim.Region.Communications.OGS1 | |||
352 | return null; | 352 | return null; |
353 | } | 353 | } |
354 | 354 | ||
355 | uint regX = Convert.ToUInt32((string) responseData["region_locx"]); | 355 | regionInfo = buildRegionInfo(responseData, String.Empty); |
356 | uint regY = Convert.ToUInt32((string) responseData["region_locy"]); | ||
357 | string internalIpStr = (string) responseData["sim_ip"]; | ||
358 | uint port = Convert.ToUInt32(responseData["sim_port"]); | ||
359 | // string externalUri = (string) responseData["sim_uri"]; | ||
360 | |||
361 | IPEndPoint neighbourInternalEndPoint = new IPEndPoint(IPAddress.Parse(internalIpStr), (int) port); | ||
362 | // string neighbourExternalUri = externalUri; | ||
363 | regionInfo = new RegionInfo(regX, regY, neighbourInternalEndPoint, internalIpStr); | ||
364 | |||
365 | regionInfo.RemotingPort = Convert.ToUInt32((string) responseData["remoting_port"]); | ||
366 | regionInfo.RemotingAddress = internalIpStr; | ||
367 | |||
368 | if (responseData.ContainsKey("http_port")) | ||
369 | { | ||
370 | regionInfo.HttpPort = Convert.ToUInt32((string) responseData["http_port"]); | ||
371 | } | ||
372 | |||
373 | regionInfo.RegionID = new UUID((string) responseData["region_UUID"]); | ||
374 | regionInfo.RegionName = (string) responseData["region_name"]; | ||
375 | |||
376 | if (requestData.ContainsKey("regionHandle")) | 356 | if (requestData.ContainsKey("regionHandle")) |
377 | { | 357 | { |
378 | m_remoteRegionInfoCache.Add(Convert.ToUInt64((string) requestData["regionHandle"]), regionInfo); | 358 | m_remoteRegionInfoCache.Add(Convert.ToUInt64((string) requestData["regionHandle"]), regionInfo); |
@@ -479,30 +459,11 @@ namespace OpenSim.Region.Communications.OGS1 | |||
479 | 459 | ||
480 | if (responseData.ContainsKey("error")) | 460 | if (responseData.ContainsKey("error")) |
481 | { | 461 | { |
482 | m_log.Error("[OGS1 GRID SERVICES]: Error received from grid server" + responseData["error"]); | 462 | m_log.ErrorFormat("[OGS1 GRID SERVICES]: Error received from grid server: ", responseData["error"]); |
483 | return null; | 463 | return null; |
484 | } | 464 | } |
485 | 465 | ||
486 | uint regX = Convert.ToUInt32((string) responseData["region_locx"]); | 466 | regionInfo = buildRegionInfo(responseData, ""); |
487 | uint regY = Convert.ToUInt32((string) responseData["region_locy"]); | ||
488 | string internalIpStr = (string) responseData["sim_ip"]; | ||
489 | uint port = Convert.ToUInt32(responseData["sim_port"]); | ||
490 | // string externalUri = (string) responseData["sim_uri"]; | ||
491 | |||
492 | IPEndPoint neighbourInternalEndPoint = new IPEndPoint(IPAddress.Parse(internalIpStr), (int) port); | ||
493 | // string neighbourExternalUri = externalUri; | ||
494 | regionInfo = new RegionInfo(regX, regY, neighbourInternalEndPoint, internalIpStr); | ||
495 | |||
496 | regionInfo.RemotingPort = Convert.ToUInt32((string) responseData["remoting_port"]); | ||
497 | regionInfo.RemotingAddress = internalIpStr; | ||
498 | |||
499 | if (responseData.ContainsKey("http_port")) | ||
500 | { | ||
501 | regionInfo.HttpPort = Convert.ToUInt32((string) responseData["http_port"]); | ||
502 | } | ||
503 | |||
504 | regionInfo.RegionID = new UUID((string) responseData["region_UUID"]); | ||
505 | regionInfo.RegionName = (string) responseData["region_name"]; | ||
506 | 467 | ||
507 | if (!m_remoteRegionInfoCache.ContainsKey(regionInfo.RegionHandle)) | 468 | if (!m_remoteRegionInfoCache.ContainsKey(regionInfo.RegionHandle)) |
508 | m_remoteRegionInfoCache.Add(regionInfo.RegionHandle, regionInfo); | 469 | m_remoteRegionInfoCache.Add(regionInfo.RegionHandle, regionInfo); |
@@ -1676,7 +1637,8 @@ namespace OpenSim.Region.Communications.OGS1 | |||
1676 | else | 1637 | else |
1677 | { | 1638 | { |
1678 | hash = (Hashtable)response.Value; | 1639 | hash = (Hashtable)response.Value; |
1679 | try { | 1640 | try |
1641 | { | ||
1680 | landData = new LandData(); | 1642 | landData = new LandData(); |
1681 | landData.AABBMax = Vector3.Parse((string)hash["AABBMax"]); | 1643 | landData.AABBMax = Vector3.Parse((string)hash["AABBMax"]); |
1682 | landData.AABBMin = Vector3.Parse((string)hash["AABBMin"]); | 1644 | landData.AABBMin = Vector3.Parse((string)hash["AABBMin"]); |
@@ -1745,5 +1707,76 @@ namespace OpenSim.Region.Communications.OGS1 | |||
1745 | response.Value = hash; | 1707 | response.Value = hash; |
1746 | return response; | 1708 | return response; |
1747 | } | 1709 | } |
1710 | |||
1711 | public List<RegionInfo> RequestNamedRegions (string name, int maxNumber) | ||
1712 | { | ||
1713 | // no asking of the local backend first, here, as we have to ask the gridserver anyway. | ||
1714 | Hashtable hash = new Hashtable(); | ||
1715 | hash["name"] = name; | ||
1716 | hash["maxNumber"] = maxNumber.ToString(); | ||
1717 | |||
1718 | IList paramList = new ArrayList(); | ||
1719 | paramList.Add(hash); | ||
1720 | |||
1721 | Hashtable result = XmlRpcSearchForRegionByName(paramList); | ||
1722 | if (result == null) return null; | ||
1723 | |||
1724 | uint numberFound = Convert.ToUInt32(result["numFound"]); | ||
1725 | List<RegionInfo> infos = new List<RegionInfo>(); | ||
1726 | for (int i = 0; i < numberFound; ++i) | ||
1727 | { | ||
1728 | string prefix = "region" + i + "."; | ||
1729 | RegionInfo info = buildRegionInfo(result, prefix); | ||
1730 | infos.Add(info); | ||
1731 | } | ||
1732 | return infos; | ||
1733 | } | ||
1734 | |||
1735 | private RegionInfo buildRegionInfo(Hashtable responseData, string prefix) | ||
1736 | { | ||
1737 | uint regX = Convert.ToUInt32((string) responseData[prefix + "region_locx"]); | ||
1738 | uint regY = Convert.ToUInt32((string) responseData[prefix + "region_locy"]); | ||
1739 | string internalIpStr = (string) responseData[prefix + "sim_ip"]; | ||
1740 | uint port = Convert.ToUInt32(responseData[prefix + "sim_port"]); | ||
1741 | |||
1742 | IPEndPoint neighbourInternalEndPoint = new IPEndPoint(Util.GetHostFromDNS(internalIpStr), (int) port); | ||
1743 | |||
1744 | RegionInfo regionInfo = new RegionInfo(regX, regY, neighbourInternalEndPoint, internalIpStr); | ||
1745 | regionInfo.RemotingPort = Convert.ToUInt32((string) responseData[prefix + "remoting_port"]); | ||
1746 | regionInfo.RemotingAddress = internalIpStr; | ||
1747 | |||
1748 | if (responseData.ContainsKey(prefix + "http_port")) | ||
1749 | { | ||
1750 | regionInfo.HttpPort = Convert.ToUInt32((string) responseData[prefix + "http_port"]); | ||
1751 | } | ||
1752 | |||
1753 | regionInfo.RegionID = new UUID((string) responseData[prefix + "region_UUID"]); | ||
1754 | regionInfo.RegionName = (string) responseData[prefix + "region_name"]; | ||
1755 | |||
1756 | regionInfo.RegionSettings.TerrainImageID = new UUID((string) responseData[prefix + "map_UUID"]); | ||
1757 | return regionInfo; | ||
1758 | } | ||
1759 | |||
1760 | private Hashtable XmlRpcSearchForRegionByName(IList parameters) | ||
1761 | { | ||
1762 | try | ||
1763 | { | ||
1764 | XmlRpcRequest request = new XmlRpcRequest("search_for_region_by_name", parameters); | ||
1765 | XmlRpcResponse resp = request.Send(serversInfo.GridURL, 10000); | ||
1766 | Hashtable respData = (Hashtable) resp.Value; | ||
1767 | if (respData != null && respData.Contains("faultCode")) | ||
1768 | { | ||
1769 | m_log.WarnFormat("[OGS1 GRID SERVICES]: Got an error while contacting GridServer: {0}", respData["faultString"]); | ||
1770 | return null; | ||
1771 | } | ||
1772 | |||
1773 | return respData; | ||
1774 | } | ||
1775 | catch (Exception e) | ||
1776 | { | ||
1777 | m_log.Error("[OGS1 GRID SERVICES]: MapBlockQuery XMLRPC failure: ", e); | ||
1778 | return null; | ||
1779 | } | ||
1780 | } | ||
1748 | } | 1781 | } |
1749 | } \ No newline at end of file | 1782 | } \ No newline at end of file |