44 lines
1.5 KiB
C#
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));
|
|||
|
}
|
|||
|
}
|
|||
|
}
|