From 134f86e8d5c414409631b25b8c6f0ee45fbd8631 Mon Sep 17 00:00:00 2001
From: David Walter Seikel
Date: Thu, 3 Nov 2016 21:44:39 +1000
Subject: Initial update to OpenSim 0.8.2.1 source code.
---
.../Servers/HttpServer/BaseStreamHandler.cs | 49 ++++++++++++++++++++--
1 file changed, 46 insertions(+), 3 deletions(-)
(limited to 'OpenSim/Framework/Servers/HttpServer/BaseStreamHandler.cs')
diff --git a/OpenSim/Framework/Servers/HttpServer/BaseStreamHandler.cs b/OpenSim/Framework/Servers/HttpServer/BaseStreamHandler.cs
index 6342983..41aa19b 100644
--- a/OpenSim/Framework/Servers/HttpServer/BaseStreamHandler.cs
+++ b/OpenSim/Framework/Servers/HttpServer/BaseStreamHandler.cs
@@ -26,17 +26,60 @@
*/
using System.IO;
+using System.Net;
+using OpenSim.Framework.ServiceAuth;
namespace OpenSim.Framework.Servers.HttpServer
{
+ ///
+ /// Base streamed request handler.
+ ///
+ ///
+ /// Inheriting classes should override ProcessRequest() rather than Handle()
+ ///
public abstract class BaseStreamHandler : BaseRequestHandler, IStreamedRequestHandler
{
- public abstract byte[] Handle(string path, Stream request,
- IOSHttpRequest httpRequest, IOSHttpResponse httpResponse);
+ protected IServiceAuth m_Auth;
- protected BaseStreamHandler(string httpMethod, string path) : this(httpMethod, path, null, null) {}
+ protected BaseStreamHandler(string httpMethod, string path) : this(httpMethod, path, null, null) { }
protected BaseStreamHandler(string httpMethod, string path, string name, string description)
: base(httpMethod, path, name, description) {}
+
+ protected BaseStreamHandler(string httpMethod, string path, IServiceAuth auth)
+ : base(httpMethod, path, null, null)
+ {
+ m_Auth = auth;
+ }
+
+ public virtual byte[] Handle(
+ string path, Stream request, IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
+ {
+ RequestsReceived++;
+
+ if (m_Auth != null)
+ {
+ HttpStatusCode statusCode;
+
+ if (!m_Auth.Authenticate(httpRequest.Headers, httpResponse.AddHeader, out statusCode))
+ {
+ httpResponse.StatusCode = (int)statusCode;
+ httpResponse.ContentType = "text/plain";
+ return new byte[0];
+ }
+ }
+
+ byte[] result = ProcessRequest(path, request, httpRequest, httpResponse);
+
+ RequestsHandled++;
+
+ return result;
+ }
+
+ protected virtual byte[] ProcessRequest(
+ string path, Stream request, IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
+ {
+ return null;
+ }
}
}
\ No newline at end of file
--
cgit v1.1