aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs')
-rw-r--r--OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs87
1 files changed, 68 insertions, 19 deletions
diff --git a/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs b/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs
index 8a0340f..eefcdad 100644
--- a/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs
+++ b/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs
@@ -334,6 +334,7 @@ namespace OpenSim.Framework.Servers.HttpServer
334 StreamReader reader = new StreamReader(requestStream, encoding); 334 StreamReader reader = new StreamReader(requestStream, encoding);
335 335
336 string requestBody = reader.ReadToEnd(); 336 string requestBody = reader.ReadToEnd();
337 reader.Close();
337 338
338 Hashtable keysvals = new Hashtable(); 339 Hashtable keysvals = new Hashtable();
339 Hashtable headervals = new Hashtable(); 340 Hashtable headervals = new Hashtable();
@@ -642,7 +643,7 @@ namespace OpenSim.Framework.Servers.HttpServer
642 // Every month or so this will wrap and give bad numbers, not really a problem 643 // Every month or so this will wrap and give bad numbers, not really a problem
643 // since its just for reporting 644 // since its just for reporting
644 int tickdiff = requestEndTick - requestStartTick; 645 int tickdiff = requestEndTick - requestStartTick;
645 if (tickdiff > 3000 && requestHandler != null && requestHandler.Name != "GetTexture") 646 if (tickdiff > 3000 && (requestHandler == null || requestHandler.Name == null || requestHandler.Name != "GetTexture"))
646 { 647 {
647 m_log.InfoFormat( 648 m_log.InfoFormat(
648 "[BASE HTTP SERVER]: Slow handling of {0} {1} {2} {3} {4} from {5} took {6}ms", 649 "[BASE HTTP SERVER]: Slow handling of {0} {1} {2} {3} {4} from {5} took {6}ms",
@@ -1476,10 +1477,40 @@ namespace OpenSim.Framework.Servers.HttpServer
1476 1477
1477 internal byte[] DoHTTPGruntWork(Hashtable responsedata, OSHttpResponse response) 1478 internal byte[] DoHTTPGruntWork(Hashtable responsedata, OSHttpResponse response)
1478 { 1479 {
1479 //m_log.Info("[BASE HTTP SERVER]: Doing HTTP Grunt work with response"); 1480 int responsecode;
1480 int responsecode = (int)responsedata["int_response_code"]; 1481 string responseString = String.Empty;
1481 string responseString = (string)responsedata["str_response_string"]; 1482 byte[] responseData = null;
1482 string contentType = (string)responsedata["content_type"]; 1483 string contentType;
1484
1485 if (responsedata == null)
1486 {
1487 responsecode = 500;
1488 responseString = "No response could be obtained";
1489 contentType = "text/plain";
1490 responsedata = new Hashtable();
1491 }
1492 else
1493 {
1494 try
1495 {
1496 //m_log.Info("[BASE HTTP SERVER]: Doing HTTP Grunt work with response");
1497 responsecode = (int)responsedata["int_response_code"];
1498 if (responsedata["bin_response_data"] != null)
1499 responseData = (byte[])responsedata["bin_response_data"];
1500 else
1501 responseString = (string)responsedata["str_response_string"];
1502 contentType = (string)responsedata["content_type"];
1503 if (responseString == null)
1504 responseString = String.Empty;
1505 }
1506 catch
1507 {
1508 responsecode = 500;
1509 responseString = "No response could be obtained";
1510 contentType = "text/plain";
1511 responsedata = new Hashtable();
1512 }
1513 }
1483 1514
1484 if (responsedata.ContainsKey("error_status_text")) 1515 if (responsedata.ContainsKey("error_status_text"))
1485 { 1516 {
@@ -1524,25 +1555,40 @@ namespace OpenSim.Framework.Servers.HttpServer
1524 1555
1525 response.AddHeader("Content-Type", contentType); 1556 response.AddHeader("Content-Type", contentType);
1526 1557
1558 if (responsedata.ContainsKey("headers"))
1559 {
1560 Hashtable headerdata = (Hashtable)responsedata["headers"];
1561
1562 foreach (string header in headerdata.Keys)
1563 response.AddHeader(header, (string)headerdata[header]);
1564 }
1565
1527 byte[] buffer; 1566 byte[] buffer;
1528 1567
1529 if (!(contentType.Contains("image") 1568 if (responseData != null)
1530 || contentType.Contains("x-shockwave-flash")
1531 || contentType.Contains("application/x-oar")
1532 || contentType.Contains("application/vnd.ll.mesh")))
1533 { 1569 {
1534 // Text 1570 buffer = responseData;
1535 buffer = Encoding.UTF8.GetBytes(responseString);
1536 } 1571 }
1537 else 1572 else
1538 { 1573 {
1539 // Binary! 1574 if (!(contentType.Contains("image")
1540 buffer = Convert.FromBase64String(responseString); 1575 || contentType.Contains("x-shockwave-flash")
1541 } 1576 || contentType.Contains("application/x-oar")
1577 || contentType.Contains("application/vnd.ll.mesh")))
1578 {
1579 // Text
1580 buffer = Encoding.UTF8.GetBytes(responseString);
1581 }
1582 else
1583 {
1584 // Binary!
1585 buffer = Convert.FromBase64String(responseString);
1586 }
1542 1587
1543 response.SendChunked = false; 1588 response.SendChunked = false;
1544 response.ContentLength64 = buffer.Length; 1589 response.ContentLength64 = buffer.Length;
1545 response.ContentEncoding = Encoding.UTF8; 1590 response.ContentEncoding = Encoding.UTF8;
1591 }
1546 1592
1547 return buffer; 1593 return buffer;
1548 } 1594 }
@@ -1622,7 +1668,8 @@ namespace OpenSim.Framework.Servers.HttpServer
1622 m_httpListener2.Start(64); 1668 m_httpListener2.Start(64);
1623 1669
1624 // Long Poll Service Manager with 3 worker threads a 25 second timeout for no events 1670 // Long Poll Service Manager with 3 worker threads a 25 second timeout for no events
1625 m_PollServiceManager = new PollServiceRequestManager(this, 3, 25000); 1671// m_PollServiceManager = new PollServiceRequestManager(this, 3, 25000);
1672 m_PollServiceManager = new PollServiceRequestManager(this, 4, 25000);
1626 HTTPDRunning = true; 1673 HTTPDRunning = true;
1627 1674
1628 //HttpListenerContext context; 1675 //HttpListenerContext context;
@@ -1656,7 +1703,9 @@ namespace OpenSim.Framework.Servers.HttpServer
1656 1703
1657 public void httpServerException(object source, Exception exception) 1704 public void httpServerException(object source, Exception exception)
1658 { 1705 {
1659 m_log.Error(String.Format("[BASE HTTP SERVER]: {0} had an exception: {1} ", source.ToString(), exception.Message), exception); 1706 if (source.ToString() == "HttpServer.HttpListener" && exception.ToString().StartsWith("Mono.Security.Protocol.Tls.TlsException"))
1707 return;
1708 m_log.ErrorFormat("[BASE HTTP SERVER]: {0} had an exception {1}", source.ToString(), exception.ToString());
1660 /* 1709 /*
1661 if (HTTPDRunning)// && NotSocketErrors > 5) 1710 if (HTTPDRunning)// && NotSocketErrors > 5)
1662 { 1711 {