diff options
Diffstat (limited to 'OpenSim/Framework/RegionLoader/Web')
-rw-r--r-- | OpenSim/Framework/RegionLoader/Web/RegionLoaderWebServer.cs | 118 |
1 files changed, 65 insertions, 53 deletions
diff --git a/OpenSim/Framework/RegionLoader/Web/RegionLoaderWebServer.cs b/OpenSim/Framework/RegionLoader/Web/RegionLoaderWebServer.cs index a2f5d9c..c7caf6f 100644 --- a/OpenSim/Framework/RegionLoader/Web/RegionLoaderWebServer.cs +++ b/OpenSim/Framework/RegionLoader/Web/RegionLoaderWebServer.cs | |||
@@ -48,6 +48,9 @@ namespace OpenSim.Framework.RegionLoader.Web | |||
48 | 48 | ||
49 | public RegionInfo[] LoadRegions() | 49 | public RegionInfo[] LoadRegions() |
50 | { | 50 | { |
51 | int tries = 3; | ||
52 | int wait = 2000; | ||
53 | |||
51 | if (m_configSource == null) | 54 | if (m_configSource == null) |
52 | { | 55 | { |
53 | m_log.Error("[WEBLOADER]: Unable to load configuration source!"); | 56 | m_log.Error("[WEBLOADER]: Unable to load configuration source!"); |
@@ -66,63 +69,72 @@ namespace OpenSim.Framework.RegionLoader.Web | |||
66 | } | 69 | } |
67 | else | 70 | else |
68 | { | 71 | { |
69 | RegionInfo[] regionInfos = new RegionInfo[] {}; | 72 | while(tries > 0) |
70 | int regionCount = 0; | 73 | { |
71 | HttpWebRequest webRequest = (HttpWebRequest) WebRequest.Create(url); | 74 | RegionInfo[] regionInfos = new RegionInfo[] {}; |
72 | webRequest.Timeout = 30000; //30 Second Timeout | 75 | int regionCount = 0; |
73 | m_log.DebugFormat("[WEBLOADER]: Sending download request to {0}", url); | 76 | HttpWebRequest webRequest = (HttpWebRequest) WebRequest.Create(url); |
77 | webRequest.Timeout = 30000; //30 Second Timeout | ||
78 | m_log.DebugFormat("[WEBLOADER]: Sending download request to {0}", url); | ||
74 | 79 | ||
75 | try | 80 | try |
76 | { | 81 | { |
77 | HttpWebResponse webResponse = (HttpWebResponse) webRequest.GetResponse(); | 82 | HttpWebResponse webResponse = (HttpWebResponse) webRequest.GetResponse(); |
78 | m_log.Debug("[WEBLOADER]: Downloading region information..."); | 83 | m_log.Debug("[WEBLOADER]: Downloading region information..."); |
79 | StreamReader reader = new StreamReader(webResponse.GetResponseStream()); | 84 | StreamReader reader = new StreamReader(webResponse.GetResponseStream()); |
80 | string xmlSource = String.Empty; | 85 | string xmlSource = String.Empty; |
81 | string tempStr = reader.ReadLine(); | 86 | string tempStr = reader.ReadLine(); |
82 | while (tempStr != null) | 87 | while (tempStr != null) |
83 | { | 88 | { |
84 | xmlSource = xmlSource + tempStr; | 89 | xmlSource = xmlSource + tempStr; |
85 | tempStr = reader.ReadLine(); | 90 | tempStr = reader.ReadLine(); |
86 | } | 91 | } |
87 | m_log.Debug("[WEBLOADER]: Done downloading region information from server. Total Bytes: " + | 92 | m_log.Debug("[WEBLOADER]: Done downloading region information from server. Total Bytes: " + |
88 | xmlSource.Length); | 93 | xmlSource.Length); |
89 | XmlDocument xmlDoc = new XmlDocument(); | 94 | XmlDocument xmlDoc = new XmlDocument(); |
90 | xmlDoc.LoadXml(xmlSource); | 95 | xmlDoc.LoadXml(xmlSource); |
91 | if (xmlDoc.FirstChild.Name == "Regions") | 96 | if (xmlDoc.FirstChild.Name == "Regions") |
92 | { | 97 | { |
93 | regionCount = xmlDoc.FirstChild.ChildNodes.Count; | 98 | regionCount = xmlDoc.FirstChild.ChildNodes.Count; |
94 | 99 | ||
95 | if (regionCount > 0) | 100 | if (regionCount > 0) |
96 | { | 101 | { |
97 | regionInfos = new RegionInfo[regionCount]; | 102 | regionInfos = new RegionInfo[regionCount]; |
98 | int i; | 103 | int i; |
99 | for (i = 0; i < xmlDoc.FirstChild.ChildNodes.Count; i++) | 104 | for (i = 0; i < xmlDoc.FirstChild.ChildNodes.Count; i++) |
100 | { | 105 | { |
101 | m_log.Debug(xmlDoc.FirstChild.ChildNodes[i].OuterXml); | 106 | m_log.Debug(xmlDoc.FirstChild.ChildNodes[i].OuterXml); |
102 | regionInfos[i] = | 107 | regionInfos[i] = |
103 | new RegionInfo("REGION CONFIG #" + (i + 1), xmlDoc.FirstChild.ChildNodes[i],false,m_configSource); | 108 | new RegionInfo("REGION CONFIG #" + (i + 1), xmlDoc.FirstChild.ChildNodes[i],false,m_configSource); |
104 | } | 109 | } |
105 | } | 110 | } |
106 | } | 111 | } |
107 | } | 112 | } |
108 | catch (WebException ex) | 113 | catch (WebException ex) |
109 | { | 114 | { |
110 | if (((HttpWebResponse)ex.Response).StatusCode == HttpStatusCode.NotFound) | 115 | if (((HttpWebResponse)ex.Response).StatusCode == HttpStatusCode.NotFound) |
116 | { | ||
117 | if (!allowRegionless) | ||
118 | throw ex; | ||
119 | } | ||
120 | else | ||
121 | throw ex; | ||
122 | } | ||
123 | |||
124 | if (regionCount > 0 | allowRegionless) | ||
125 | return regionInfos; | ||
126 | |||
127 | m_log.Debug("[WEBLOADER]: Request yielded no regions."); | ||
128 | tries--; | ||
129 | if (tries > 0) | ||
111 | { | 130 | { |
112 | if (!allowRegionless) | 131 | m_log.Debug("[WEBLOADER]: Retrying"); |
113 | throw ex; | 132 | System.Threading.Thread.Sleep(wait); |
114 | } | 133 | } |
115 | else | 134 | } |
116 | throw ex; | ||
117 | } | ||
118 | 135 | ||
119 | if (regionCount > 0 | allowRegionless) | 136 | m_log.Error("[WEBLOADER]: No region configs were available."); |
120 | return regionInfos; | 137 | return null; |
121 | else | ||
122 | { | ||
123 | m_log.Error("[WEBLOADER]: No region configs were available."); | ||
124 | return null; | ||
125 | } | ||
126 | } | 138 | } |
127 | } | 139 | } |
128 | } | 140 | } |