diff options
author | Melanie Thielker | 2008-09-07 20:09:11 +0000 |
---|---|---|
committer | Melanie Thielker | 2008-09-07 20:09:11 +0000 |
commit | 58d79b33ff507a1d861d1196a925d2d09ad1c3f2 (patch) | |
tree | 0b4c898b5885bb2c6d16346744f06f8c4b17fe77 | |
parent | Return 0 for no wind and 0 for no clouds from (diff) | |
download | opensim-SC-58d79b33ff507a1d861d1196a925d2d09ad1c3f2.zip opensim-SC-58d79b33ff507a1d861d1196a925d2d09ad1c3f2.tar.gz opensim-SC-58d79b33ff507a1d861d1196a925d2d09ad1c3f2.tar.bz2 opensim-SC-58d79b33ff507a1d861d1196a925d2d09ad1c3f2.tar.xz |
Mantis #2142
Thank you, HomerHorwitz, for a patch that fixes landmark teleport
and about landmarks with the new OMV types.
-rw-r--r-- | OpenSim/Framework/AssetLandmark.cs | 3 | ||||
-rw-r--r-- | OpenSim/Framework/Util.cs | 15 | ||||
-rw-r--r-- | OpenSim/Region/Communications/OGS1/OGS1GridServices.cs | 63 | ||||
-rw-r--r-- | OpenSim/Region/Environment/Modules/World/Land/LandManagementModule.cs | 2 |
4 files changed, 51 insertions, 32 deletions
diff --git a/OpenSim/Framework/AssetLandmark.cs b/OpenSim/Framework/AssetLandmark.cs index cf663ee..d636d34 100644 --- a/OpenSim/Framework/AssetLandmark.cs +++ b/OpenSim/Framework/AssetLandmark.cs | |||
@@ -53,7 +53,8 @@ namespace OpenSim.Framework | |||
53 | string[] parts = temp.Split('\n'); | 53 | string[] parts = temp.Split('\n'); |
54 | int.TryParse(parts[0].Substring(17, 1), out Version); | 54 | int.TryParse(parts[0].Substring(17, 1), out Version); |
55 | UUID.TryParse(parts[1].Substring(10, 36), out RegionID); | 55 | UUID.TryParse(parts[1].Substring(10, 36), out RegionID); |
56 | Vector3.TryParse(parts[2].Substring(10, parts[2].Length - 10), out Position); | 56 | // the vector is stored with spaces as separators, not with commas ("10.3 32.5 43" instead of "10.3, 32.5, 43") |
57 | Vector3.TryParse(parts[2].Substring(10, parts[2].Length - 10).Replace(" ", ","), out Position); | ||
57 | ulong.TryParse(parts[3].Substring(14, parts[3].Length - 14), out RegionHandle); | 58 | ulong.TryParse(parts[3].Substring(14, parts[3].Length - 14), out RegionHandle); |
58 | } | 59 | } |
59 | } | 60 | } |
diff --git a/OpenSim/Framework/Util.cs b/OpenSim/Framework/Util.cs index de42bf8..427832d 100644 --- a/OpenSim/Framework/Util.cs +++ b/OpenSim/Framework/Util.cs | |||
@@ -727,6 +727,21 @@ namespace OpenSim.Framework | |||
727 | return client.Send(url, 6000); | 727 | return client.Send(url, 6000); |
728 | } | 728 | } |
729 | 729 | ||
730 | /// <summary> | ||
731 | /// Converts a byte array in big endian order into an ulong. | ||
732 | /// </summary> | ||
733 | /// <param name="bytes"> | ||
734 | /// The array of bytes | ||
735 | /// </param> | ||
736 | /// <returns> | ||
737 | /// The extracted ulong | ||
738 | /// </returns> | ||
739 | public static ulong BytesToUInt64Big(byte[] bytes) { | ||
740 | if(bytes.Length < 8) return 0; | ||
741 | return ((ulong)bytes[0] << 56) | ((ulong)bytes[1] << 48) | ((ulong)bytes[2] << 40) | ((ulong)bytes[3] << 32) | | ||
742 | ((ulong)bytes[4] << 24) | ((ulong)bytes[5] << 16) | ((ulong)bytes[6] << 8) | (ulong)bytes[7]; | ||
743 | } | ||
744 | |||
730 | // used for RemoteParcelRequest (for "About Landmark") | 745 | // used for RemoteParcelRequest (for "About Landmark") |
731 | public static UUID BuildFakeParcelID(ulong regionHandle, uint x, uint y) { | 746 | public static UUID BuildFakeParcelID(ulong regionHandle, uint x, uint y) { |
732 | byte[] bytes = { | 747 | byte[] bytes = { |
diff --git a/OpenSim/Region/Communications/OGS1/OGS1GridServices.cs b/OpenSim/Region/Communications/OGS1/OGS1GridServices.cs index aaeca4b..2538eaf 100644 --- a/OpenSim/Region/Communications/OGS1/OGS1GridServices.cs +++ b/OpenSim/Region/Communications/OGS1/OGS1GridServices.cs | |||
@@ -1674,42 +1674,45 @@ namespace OpenSim.Region.Communications.OGS1 | |||
1674 | IList paramList = new ArrayList(); | 1674 | IList paramList = new ArrayList(); |
1675 | paramList.Add(hash); | 1675 | paramList.Add(hash); |
1676 | 1676 | ||
1677 | // this might be cached, as we probably requested it just a moment ago... | ||
1678 | RegionInfo info = RequestNeighbourInfo(regionHandle); | ||
1679 | |||
1680 | try | 1677 | try |
1681 | { | 1678 | { |
1682 | XmlRpcRequest request = new XmlRpcRequest("land_data", paramList); | 1679 | // this might be cached, as we probably requested it just a moment ago... |
1683 | string uri = "http://" + info.ExternalEndPoint.Address + ":" + info.HttpPort + "/"; | 1680 | RegionInfo info = RequestNeighbourInfo(regionHandle); |
1684 | XmlRpcResponse response = request.Send(uri, 10000); | 1681 | if (info != null) // just to be sure |
1685 | if (response.IsFault) | 1682 | { |
1686 | { | 1683 | XmlRpcRequest request = new XmlRpcRequest("land_data", paramList); |
1687 | m_log.ErrorFormat("[OGS1 GRID SERVICES] remote call returned an error: {0}", response.FaultString); | 1684 | string uri = "http://" + info.ExternalEndPoint.Address + ":" + info.HttpPort + "/"; |
1688 | } | 1685 | XmlRpcResponse response = request.Send(uri, 10000); |
1689 | else | 1686 | if (response.IsFault) |
1690 | { | 1687 | { |
1691 | hash = (Hashtable)response.Value; | 1688 | m_log.ErrorFormat("[OGS1 GRID SERVICES] remote call returned an error: {0}", response.FaultString); |
1692 | try { | ||
1693 | landData = new LandData(); | ||
1694 | landData.AABBMax = Vector3.Parse((string)hash["AABBMax"]); | ||
1695 | landData.AABBMin = Vector3.Parse((string)hash["AABBMin"]); | ||
1696 | landData.Area = Convert.ToInt32(hash["Area"]); | ||
1697 | landData.AuctionID = Convert.ToUInt32(hash["AuctionID"]); | ||
1698 | landData.Description = (string)hash["Description"]; | ||
1699 | landData.Flags = Convert.ToUInt32(hash["Flags"]); | ||
1700 | landData.GlobalID = new UUID((string)hash["GlobalID"]); | ||
1701 | landData.Name = (string)hash["Name"]; | ||
1702 | landData.OwnerID = new UUID((string)hash["OwnerID"]); | ||
1703 | landData.SalePrice = Convert.ToInt32(hash["SalePrice"]); | ||
1704 | landData.SnapshotID = new UUID((string)hash["SnapshotID"]); | ||
1705 | landData.UserLocation = Vector3.Parse((string)hash["UserLocation"]); | ||
1706 | m_log.DebugFormat("[OGS1 GRID SERVICES] Got land data for parcel {0}", landData.Name); | ||
1707 | } | 1689 | } |
1708 | catch (Exception e) | 1690 | else |
1709 | { | 1691 | { |
1710 | m_log.Error("[OGS1 GRID SERVICES] Got exception while parsing land-data:", e); | 1692 | hash = (Hashtable)response.Value; |
1693 | try { | ||
1694 | landData = new LandData(); | ||
1695 | landData.AABBMax = Vector3.Parse((string)hash["AABBMax"]); | ||
1696 | landData.AABBMin = Vector3.Parse((string)hash["AABBMin"]); | ||
1697 | landData.Area = Convert.ToInt32(hash["Area"]); | ||
1698 | landData.AuctionID = Convert.ToUInt32(hash["AuctionID"]); | ||
1699 | landData.Description = (string)hash["Description"]; | ||
1700 | landData.Flags = Convert.ToUInt32(hash["Flags"]); | ||
1701 | landData.GlobalID = new UUID((string)hash["GlobalID"]); | ||
1702 | landData.Name = (string)hash["Name"]; | ||
1703 | landData.OwnerID = new UUID((string)hash["OwnerID"]); | ||
1704 | landData.SalePrice = Convert.ToInt32(hash["SalePrice"]); | ||
1705 | landData.SnapshotID = new UUID((string)hash["SnapshotID"]); | ||
1706 | landData.UserLocation = Vector3.Parse((string)hash["UserLocation"]); | ||
1707 | m_log.DebugFormat("[OGS1 GRID SERVICES] Got land data for parcel {0}", landData.Name); | ||
1708 | } | ||
1709 | catch (Exception e) | ||
1710 | { | ||
1711 | m_log.Error("[OGS1 GRID SERVICES] Got exception while parsing land-data:", e); | ||
1712 | } | ||
1711 | } | 1713 | } |
1712 | } | 1714 | } |
1715 | else m_log.WarnFormat("[OGS1 GRID SERVICES] Couldn't find region with handle {0}", regionHandle); | ||
1713 | } | 1716 | } |
1714 | catch (Exception e) | 1717 | catch (Exception e) |
1715 | { | 1718 | { |
diff --git a/OpenSim/Region/Environment/Modules/World/Land/LandManagementModule.cs b/OpenSim/Region/Environment/Modules/World/Land/LandManagementModule.cs index e5bdafc..f4ba9a3 100644 --- a/OpenSim/Region/Environment/Modules/World/Land/LandManagementModule.cs +++ b/OpenSim/Region/Environment/Modules/World/Land/LandManagementModule.cs | |||
@@ -1111,7 +1111,7 @@ namespace OpenSim.Region.Environment.Modules.World.Land | |||
1111 | { | 1111 | { |
1112 | // if you do a "About Landmark" on a landmark a second time, the viewer sends the | 1112 | // if you do a "About Landmark" on a landmark a second time, the viewer sends the |
1113 | // region_handle it got earlier via RegionHandleRequest | 1113 | // region_handle it got earlier via RegionHandleRequest |
1114 | ulong regionHandle = Helpers.BytesToUInt64((byte[])hash["region_handle"]); | 1114 | ulong regionHandle = Util.BytesToUInt64Big((byte[])hash["region_handle"]); |
1115 | parcelID = Util.BuildFakeParcelID(regionHandle, x, y); | 1115 | parcelID = Util.BuildFakeParcelID(regionHandle, x, y); |
1116 | } | 1116 | } |
1117 | else if (regionID == m_scene.RegionInfo.RegionID) | 1117 | else if (regionID == m_scene.RegionInfo.RegionID) |