ln.http/router/VirtualHostRouter.cs

44 lines
1.5 KiB
C#

using System;
using System.Collections.Generic;
using ln.http.exceptions;
using ln.types;
namespace ln.http.router
{
public class VirtualHostRouter : HttpRouter
{
public HttpRouter DefaultRoute { get; set; }
Dictionary<string, HttpRouter> virtualHosts = new Dictionary<string, HttpRouter>();
public VirtualHostRouter()
{
}
public VirtualHostRouter(HttpRouter defaultRoute)
{
DefaultRoute = defaultRoute;
}
public VirtualHostRouter(IEnumerable<KeyValuePair<string, HttpRouter>> routes)
{
foreach (KeyValuePair<string, HttpRouter> route in routes)
virtualHosts.Add(route.Key, route.Value);
}
public VirtualHostRouter(HttpRouter defaultRoute,IEnumerable<KeyValuePair<string, HttpRouter>> routes)
:this(routes)
{
DefaultRoute = defaultRoute;
}
public VirtualHostRouter(VirtualHostRouter source)
: this(source.virtualHosts) { }
public override IHTTPResource FindResource(HttpRequest httpRequest)
{
if (virtualHosts.TryGetValue(httpRequest.Hostname, out HttpRouter virtualHost))
return virtualHost.FindResource(httpRequest);
if (DefaultRoute != null)
return DefaultRoute.FindResource(httpRequest);
throw new HttpException(410, String.Format("Gone. Hostname {0} not found on this server.",httpRequest.Hostname));
}
}
}