ln.http/ln.http/HttpRequestContext.cs

67 lines
2.3 KiB
C#

using System;
using System.Collections.Generic;
using System.IO;
using System.Net;
using ln.collections;
namespace ln.http;
public sealed class HttpRequestContext : IDisposable
{
public Listener Listener { get; }
public IPEndPoint LocalEndpoint => Listener.LocalEndpoint;
public HttpConnection HttpConnection { get; }
public Stream ConnectionStream { get; }
public HttpRequest Request { get; protected set; }
public HttpResponse Response { get; set; }
public HttpRequestContext ParentContext { get; }
public HttpPrincipal AuthenticatedPrincipal { get; set; }
Dictionary<string, String> _parameters = new Dictionary<string, string>();
public HttpRequestContext(HttpRequestContext parentContext, HttpRequest request)
: this(parentContext.Listener, parentContext.HttpConnection, parentContext.ConnectionStream, request)
{
ParentContext = parentContext;
}
public HttpRequestContext(Listener listener, HttpConnection httpConnection, Stream connectionStream, HttpRequest request)
{
Listener = listener;
Request = request;
HttpConnection = httpConnection;
ConnectionStream = connectionStream;
}
protected HttpRequestContext(Listener listener, HttpConnection httpConnection, Stream connectionStream)
{
Listener = listener;
HttpConnection = httpConnection;
ConnectionStream = connectionStream;
}
public void Dispose()
{
Request?.Dispose();
Response?.Dispose();
}
public bool ContainsParameter(string parameterName) => _parameters.ContainsKey(parameterName);
public String GetParameter(String parameterName) => GetParameter(parameterName, null);
public String GetParameter(String parameterName, String defaultValue)
{
if (!_parameters.TryGetValue(parameterName, out string value))
value = defaultValue;
return value;
}
public bool TryGetParameter(String parameterName, out string parameterValue) =>
_parameters.TryGetValue(parameterName, out parameterValue);
public void SetParameter(String parameterName, String parameterValue) =>
_parameters[parameterName] = parameterValue;
public IEnumerable<string> ParameterNames => _parameters.Keys;
}