67 lines
2.3 KiB
C#
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;
|
|
} |