aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Grid/GridServer/GridManager.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Grid/GridServer/GridManager.cs')
-rw-r--r--OpenSim/Grid/GridServer/GridManager.cs70
1 files changed, 70 insertions, 0 deletions
diff --git a/OpenSim/Grid/GridServer/GridManager.cs b/OpenSim/Grid/GridServer/GridManager.cs
index ed474c5..1e8ac00 100644
--- a/OpenSim/Grid/GridServer/GridManager.cs
+++ b/OpenSim/Grid/GridServer/GridManager.cs
@@ -188,6 +188,26 @@ namespace OpenSim.Grid.GridServer
188 return regions; 188 return regions;
189 } 189 }
190 190
191 public List<RegionProfileData> GetRegions(string name, int maxNum)
192 {
193 List<RegionProfileData> regions = new List<RegionProfileData>();
194 foreach (IGridDataPlugin plugin in _plugins)
195 {
196 try
197 {
198 int num = maxNum - regions.Count;
199 List <RegionProfileData> profiles = plugin.GetRegionsByName(name, (uint)num);
200 if (profiles != null) regions.AddRange(profiles);
201 }
202 catch
203 {
204 m_log.Warn("[storage]: Unable to query regionblock via " + plugin.Name);
205 }
206 }
207
208 return regions;
209 }
210
191 /// <summary> 211 /// <summary>
192 /// Returns a XML String containing a list of the neighbouring regions 212 /// Returns a XML String containing a list of the neighbouring regions
193 /// </summary> 213 /// </summary>
@@ -877,6 +897,56 @@ namespace OpenSim.Grid.GridServer
877 } 897 }
878 898
879 /// <summary> 899 /// <summary>
900 /// Returns up to <code>maxNumber</code> profiles of regions that have a name starting with <code>name</code>
901 /// </summary>
902 /// <param name="request"></param>
903 /// <returns></returns>
904 public XmlRpcResponse XmlRpcSearchForRegionMethod(XmlRpcRequest request)
905 {
906 Hashtable requestData = (Hashtable)request.Params[0];
907
908 if (!requestData.ContainsKey("name") || !requestData.Contains("maxNumber"))
909 {
910 m_log.Warn("[DATA] Invalid region-search request; missing name or maxNumber");
911 return new XmlRpcResponse(500, "Missing name or maxNumber in region search request");
912 }
913
914 Hashtable responseData = new Hashtable();
915
916 string name = (string)requestData["name"];
917 int maxNumber = Convert.ToInt32((string)requestData["maxNumber"]);
918 if (maxNumber == 0 || name.Length < 3)
919 {
920 // either we didn't want any, or we were too unspecific
921 responseData["numFound"] = 0;
922 }
923 else
924 {
925 List<RegionProfileData> sims = GetRegions(name, maxNumber);
926
927 responseData["numFound"] = sims.Count;
928 for (int i = 0; i < sims.Count; ++i)
929 {
930 RegionProfileData sim = sims[i];
931 string prefix = "region" + i + ".";
932 responseData[prefix + "region_name"] = sim.regionName;
933 responseData[prefix + "region_UUID"] = sim.UUID.ToString();
934 responseData[prefix + "region_locx"] = sim.regionLocX.ToString();
935 responseData[prefix + "region_locy"] = sim.regionLocY.ToString();
936 responseData[prefix + "sim_ip"] = sim.serverIP.ToString();
937 responseData[prefix + "sim_port"] = sim.serverPort.ToString();
938 responseData[prefix + "remoting_port"] = sim.remotingPort.ToString();
939 responseData[prefix + "http_port"] = sim.httpPort.ToString();
940 responseData[prefix + "map_UUID"] = sim.regionMapTextureID.ToString();
941 }
942 }
943
944 XmlRpcResponse response = new XmlRpcResponse();
945 response.Value = responseData;
946 return response;
947 }
948
949 /// <summary>
880 /// Performs a REST Get Operation 950 /// Performs a REST Get Operation
881 /// </summary> 951 /// </summary>
882 /// <param name="request"></param> 952 /// <param name="request"></param>