aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Environment/Modules/Scripting/HttpRequest/ScriptsHttpRequests.cs
diff options
context:
space:
mode:
authorDr Scofield2009-02-06 16:55:34 +0000
committerDr Scofield2009-02-06 16:55:34 +0000
commit9b66108081a8c8cf79faaa6c541554091c40850e (patch)
tree095a232ae5a9de3a9244bcd34da08294f61eeea5 /OpenSim/Region/Environment/Modules/Scripting/HttpRequest/ScriptsHttpRequests.cs
parent* removed superfluous constants class (diff)
downloadopensim-SC_OLD-9b66108081a8c8cf79faaa6c541554091c40850e.zip
opensim-SC_OLD-9b66108081a8c8cf79faaa6c541554091c40850e.tar.gz
opensim-SC_OLD-9b66108081a8c8cf79faaa6c541554091c40850e.tar.bz2
opensim-SC_OLD-9b66108081a8c8cf79faaa6c541554091c40850e.tar.xz
This changeset is the step 1 of 2 in refactoring
OpenSim.Region.Environment into a "framework" part and a modules only part. This first changeset refactors OpenSim.Region.Environment.Scenes, OpenSim.Region.Environment.Interfaces, and OpenSim.Region.Interfaces into OpenSim.Region.Framework.{Interfaces,Scenes} leaving only region modules in OpenSim.Region.Environment. The next step will be to move region modules up from OpenSim.Region.Environment.Modules to OpenSim.Region.CoreModules and then sort out which modules are really core modules and which should move out to forge. I've been very careful to NOT BREAK anything. i hope i've succeeded. as this is the work of a whole week i hope i managed to keep track with the applied patches of the last week --- could any of you that did check in stuff have a look at whether it survived? thx!
Diffstat (limited to '')
-rw-r--r--OpenSim/Region/Environment/Modules/Scripting/HttpRequest/ScriptsHttpRequests.cs183
1 files changed, 100 insertions, 83 deletions
diff --git a/OpenSim/Region/Environment/Modules/Scripting/HttpRequest/ScriptsHttpRequests.cs b/OpenSim/Region/Environment/Modules/Scripting/HttpRequest/ScriptsHttpRequests.cs
index eb9b322..821c60e 100644
--- a/OpenSim/Region/Environment/Modules/Scripting/HttpRequest/ScriptsHttpRequests.cs
+++ b/OpenSim/Region/Environment/Modules/Scripting/HttpRequest/ScriptsHttpRequests.cs
@@ -35,8 +35,8 @@ using OpenMetaverse;
35using Nini.Config; 35using Nini.Config;
36using OpenSim.Framework; 36using OpenSim.Framework;
37using OpenSim.Framework.Servers; 37using OpenSim.Framework.Servers;
38using OpenSim.Region.Environment.Interfaces; 38using OpenSim.Region.Framework.Interfaces;
39using OpenSim.Region.Environment.Scenes; 39using OpenSim.Region.Framework.Scenes;
40using System.Collections; 40using System.Collections;
41 41
42/***************************************************** 42/*****************************************************
@@ -84,14 +84,14 @@ using System.Collections;
84 84
85namespace OpenSim.Region.Environment.Modules.Scripting.HttpRequest 85namespace OpenSim.Region.Environment.Modules.Scripting.HttpRequest
86{ 86{
87 public class HttpRequestModule : IRegionModule, IHttpRequests 87 public class HttpRequestModule : IRegionModule, IHttpRequestModule
88 { 88 {
89 private object HttpListLock = new object(); 89 private object HttpListLock = new object();
90 private int httpTimeout = 30000; 90 private int httpTimeout = 30000;
91 private string m_name = "HttpScriptRequests"; 91 private string m_name = "HttpScriptRequests";
92 92
93 private string m_proxyurl = ""; 93 private string m_proxyurl = "";
94 private string m_proxyexcepts = ""; 94 private string m_proxyexcepts = "";
95 95
96 // <request id, HttpRequestClass> 96 // <request id, HttpRequestClass>
97 private Dictionary<UUID, HttpRequestClass> m_pendingRequests; 97 private Dictionary<UUID, HttpRequestClass> m_pendingRequests;
@@ -102,7 +102,7 @@ namespace OpenSim.Region.Environment.Modules.Scripting.HttpRequest
102 { 102 {
103 } 103 }
104 104
105 #region IHttpRequests Members 105 #region IHttpRequestModule Members
106 106
107 public UUID MakeHttpRequest(string url, string parameters, string body) 107 public UUID MakeHttpRequest(string url, string parameters, string body)
108 { 108 {
@@ -125,22 +125,22 @@ namespace OpenSim.Region.Environment.Modules.Scripting.HttpRequest
125 { 125 {
126 switch (Int32.Parse(parms[i])) 126 switch (Int32.Parse(parms[i]))
127 { 127 {
128 case HttpRequestClass.HTTP_METHOD: 128 case (int)HttpRequestConstants.HTTP_METHOD:
129 129
130 htc.httpMethod = parms[i + 1]; 130 htc.HttpMethod = parms[i + 1];
131 break; 131 break;
132 132
133 case HttpRequestClass.HTTP_MIMETYPE: 133 case (int)HttpRequestConstants.HTTP_MIMETYPE:
134 134
135 htc.httpMIMEType = parms[i + 1]; 135 htc.HttpMIMEType = parms[i + 1];
136 break; 136 break;
137 137
138 case HttpRequestClass.HTTP_BODY_MAXLENGTH: 138 case (int)HttpRequestConstants.HTTP_BODY_MAXLENGTH:
139 139
140 // TODO implement me 140 // TODO implement me
141 break; 141 break;
142 142
143 case HttpRequestClass.HTTP_VERIFY_CERT: 143 case (int)HttpRequestConstants.HTTP_VERIFY_CERT:
144 144
145 // TODO implement me 145 // TODO implement me
146 break; 146 break;
@@ -148,22 +148,22 @@ namespace OpenSim.Region.Environment.Modules.Scripting.HttpRequest
148 } 148 }
149 } 149 }
150 150
151 htc.localID = localID; 151 htc.LocalID = localID;
152 htc.itemID = itemID; 152 htc.ItemID = itemID;
153 htc.url = url; 153 htc.Url = url;
154 htc.reqID = reqID; 154 htc.ReqID = reqID;
155 htc.httpTimeout = httpTimeout; 155 htc.HttpTimeout = httpTimeout;
156 htc.outbound_body = body; 156 htc.OutboundBody = body;
157 htc.response_headers = headers; 157 htc.ResponseHeaders = headers;
158 htc.proxyurl = m_proxyurl; 158 htc.proxyurl = m_proxyurl;
159 htc.proxyexcepts = m_proxyexcepts; 159 htc.proxyexcepts = m_proxyexcepts;
160 160
161 lock (HttpListLock) 161 lock (HttpListLock)
162 { 162 {
163 m_pendingRequests.Add(reqID, htc); 163 m_pendingRequests.Add(reqID, htc);
164 } 164 }
165 165
166 htc.process(); 166 htc.Process();
167 167
168 return reqID; 168 return reqID;
169 } 169 }
@@ -193,7 +193,7 @@ namespace OpenSim.Region.Environment.Modules.Scripting.HttpRequest
193 * it will need some refactoring and this works 'enough' right now 193 * it will need some refactoring and this works 'enough' right now
194 */ 194 */
195 195
196 public HttpRequestClass GetNextCompletedRequest() 196 public IServiceRequest GetNextCompletedRequest()
197 { 197 {
198 lock (HttpListLock) 198 lock (HttpListLock)
199 { 199 {
@@ -203,7 +203,7 @@ namespace OpenSim.Region.Environment.Modules.Scripting.HttpRequest
203 203
204 if (m_pendingRequests.TryGetValue(luid, out tmpReq)) 204 if (m_pendingRequests.TryGetValue(luid, out tmpReq))
205 { 205 {
206 if (tmpReq.finished) 206 if (tmpReq.Finished)
207 { 207 {
208 return tmpReq; 208 return tmpReq;
209 } 209 }
@@ -235,10 +235,10 @@ namespace OpenSim.Region.Environment.Modules.Scripting.HttpRequest
235 { 235 {
236 m_scene = scene; 236 m_scene = scene;
237 237
238 m_scene.RegisterModuleInterface<IHttpRequests>(this); 238 m_scene.RegisterModuleInterface<IHttpRequestModule>(this);
239 239
240 m_proxyurl = config.Configs["Startup"].GetString("HttpProxy"); 240 m_proxyurl = config.Configs["Startup"].GetString("HttpProxy");
241 m_proxyexcepts = config.Configs["Startup"].GetString("HttpProxyExceptions"); 241 m_proxyexcepts = config.Configs["Startup"].GetString("HttpProxyExceptions");
242 242
243 m_pendingRequests = new Dictionary<UUID, HttpRequestClass>(); 243 m_pendingRequests = new Dictionary<UUID, HttpRequestClass>();
244 } 244 }
@@ -264,45 +264,64 @@ namespace OpenSim.Region.Environment.Modules.Scripting.HttpRequest
264 #endregion 264 #endregion
265 } 265 }
266 266
267 public class HttpRequestClass 267 public class HttpRequestClass: IServiceRequest
268 { 268 {
269 // Constants for parameters 269 // Constants for parameters
270 public const int HTTP_BODY_MAXLENGTH = 2; 270 // public const int HTTP_BODY_MAXLENGTH = 2;
271 public const int HTTP_METHOD = 0; 271 // public const int HTTP_METHOD = 0;
272 public const int HTTP_MIMETYPE = 1; 272 // public const int HTTP_MIMETYPE = 1;
273 public const int HTTP_VERIFY_CERT = 3; 273 // public const int HTTP_VERIFY_CERT = 3;
274 public bool finished; 274 private bool _finished;
275 public int httpBodyMaxLen = 2048; // not implemented 275 public bool Finished
276 {
277 get { return _finished; }
278 }
279 // public int HttpBodyMaxLen = 2048; // not implemented
276 280
277 // Parameter members and default values 281 // Parameter members and default values
278 public string httpMethod = "GET"; 282 public string HttpMethod = "GET";
279 public string httpMIMEType = "text/plain;charset=utf-8"; 283 public string HttpMIMEType = "text/plain;charset=utf-8";
284 public int HttpTimeout;
285 // public bool HttpVerifyCert = true; // not implemented
280 private Thread httpThread; 286 private Thread httpThread;
281 public int httpTimeout;
282 public bool httpVerifyCert = true; // not implemented
283 287
284 // Request info 288 // Request info
285 public UUID itemID; 289 private UUID _itemID;
286 public uint localID; 290 public UUID ItemID
287 public DateTime next; 291 {
288 public string outbound_body; 292 get { return _itemID; }
289 public UUID reqID; 293 set { _itemID = value; }
290 public HttpWebRequest request; 294 }
291 public string response_body; 295 private uint _localID;
292 public List<string> response_metadata; 296 public uint LocalID
293 public Dictionary<string, string> response_headers; 297 {
294 public int status; 298 get { return _localID; }
295 public string url; 299 set { _localID = value; }
300 }
301 public DateTime Next;
296 public string proxyurl; 302 public string proxyurl;
297 public string proxyexcepts; 303 public string proxyexcepts;
298 304 public string OutboundBody;
299 public void process() 305 private UUID _reqID;
306 public UUID ReqID
307 {
308 get { return _reqID; }
309 set { _reqID = value; }
310 }
311 public HttpWebRequest Request;
312 public string ResponseBody;
313 public List<string> ResponseMetadata;
314 public Dictionary<string, string> ResponseHeaders;
315 public int Status;
316 public string Url;
317
318 public void Process()
300 { 319 {
301 httpThread = new Thread(SendRequest); 320 httpThread = new Thread(SendRequest);
302 httpThread.Name = "HttpRequestThread"; 321 httpThread.Name = "HttpRequestThread";
303 httpThread.Priority = ThreadPriority.BelowNormal; 322 httpThread.Priority = ThreadPriority.BelowNormal;
304 httpThread.IsBackground = true; 323 httpThread.IsBackground = true;
305 finished = false; 324 _finished = false;
306 httpThread.Start(); 325 httpThread.Start();
307 ThreadTracker.Add(httpThread); 326 ThreadTracker.Add(httpThread);
308 } 327 }
@@ -322,37 +341,35 @@ namespace OpenSim.Region.Environment.Modules.Scripting.HttpRequest
322 341
323 try 342 try
324 { 343 {
325 request = (HttpWebRequest) 344 Request = (HttpWebRequest) WebRequest.Create(Url);
326 WebRequest.Create(url); 345 Request.Method = HttpMethod;
327 request.Method = httpMethod; 346 Request.ContentType = HttpMIMEType;
328 request.ContentType = httpMIMEType; 347 if (proxyurl.Length > 0)
329 if (proxyurl.Length > 0) 348 {
330 { 349 if (proxyexcepts.Length > 0) {
331 if (proxyexcepts.Length > 0) { 350 string[] elist = proxyexcepts.Split(';');
332 string[] elist = proxyexcepts.Split(';'); 351 Request.Proxy = new WebProxy(proxyurl,true,elist);
333 request.Proxy = new WebProxy(proxyurl,true,elist); 352 } else {
334 } else { 353 Request.Proxy = new WebProxy(proxyurl,true);
335 request.Proxy = new WebProxy(proxyurl,true); 354 }
336 } 355 }
337 } 356
338 357 foreach (KeyValuePair<string, string> entry in ResponseHeaders)
339 foreach (KeyValuePair<string, string> entry in response_headers) 358 Request.Headers[entry.Key] = entry.Value;
340 request.Headers[entry.Key] = entry.Value;
341 359
342 // Encode outbound data 360 // Encode outbound data
343 if (outbound_body.Length > 0) { 361 if (OutboundBody.Length > 0) {
344 byte[] data = Encoding.UTF8.GetBytes(outbound_body); 362 byte[] data = Encoding.UTF8.GetBytes(OutboundBody);
345 363
346 request.ContentLength = data.Length; 364 Request.ContentLength = data.Length;
347 Stream bstream = request.GetRequestStream(); 365 Stream bstream = Request.GetRequestStream();
348 bstream.Write(data, 0, data.Length); 366 bstream.Write(data, 0, data.Length);
349 bstream.Close(); 367 bstream.Close();
350 } 368 }
351 369
352 request.Timeout = httpTimeout; 370 Request.Timeout = HttpTimeout;
353 // execute the request 371 // execute the request
354 response = (HttpWebResponse) 372 response = (HttpWebResponse) Request.GetResponse();
355 request.GetResponse();
356 373
357 Stream resStream = response.GetResponseStream(); 374 Stream resStream = response.GetResponseStream();
358 375
@@ -372,23 +389,23 @@ namespace OpenSim.Region.Environment.Modules.Scripting.HttpRequest
372 } 389 }
373 } while (count > 0); // any more data to read? 390 } while (count > 0); // any more data to read?
374 391
375 response_body = sb.ToString(); 392 ResponseBody = sb.ToString();
376 } 393 }
377 catch (Exception e) 394 catch (Exception e)
378 { 395 {
379 if (e is WebException && ((WebException)e).Status == WebExceptionStatus.ProtocolError) 396 if (e is WebException && ((WebException)e).Status == WebExceptionStatus.ProtocolError)
380 { 397 {
381 HttpWebResponse webRsp = (HttpWebResponse)((WebException)e).Response; 398 HttpWebResponse webRsp = (HttpWebResponse)((WebException)e).Response;
382 status = (int)webRsp.StatusCode; 399 Status = (int)webRsp.StatusCode;
383 response_body = webRsp.StatusDescription; 400 ResponseBody = webRsp.StatusDescription;
384 } 401 }
385 else 402 else
386 { 403 {
387 status = (int)OSHttpStatusCode.ClientErrorJoker; 404 Status = (int)OSHttpStatusCode.ClientErrorJoker;
388 response_body = e.Message; 405 ResponseBody = e.Message;
389 } 406 }
390 407
391 finished = true; 408 _finished = true;
392 return; 409 return;
393 } 410 }
394 finally 411 finally
@@ -397,8 +414,8 @@ namespace OpenSim.Region.Environment.Modules.Scripting.HttpRequest
397 response.Close(); 414 response.Close();
398 } 415 }
399 416
400 status = (int)OSHttpStatusCode.SuccessOk; 417 Status = (int)OSHttpStatusCode.SuccessOk;
401 finished = true; 418 _finished = true;
402 } 419 }
403 420
404 public void Stop() 421 public void Stop()