From d18fbb98b7f51d46eb3e716c59a8e76bc772bad1 Mon Sep 17 00:00:00 2001
From: teravus
Date: Sun, 3 Feb 2013 07:44:45 -0500
Subject: Adds the ability to load more then one IClientNetworkServer thereby
 allowing additional client stacks.   Use comma separated values in
 clientstack_plugin in your config.

---
 bin/OpenSimDefaults.ini | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'bin')

diff --git a/bin/OpenSimDefaults.ini b/bin/OpenSimDefaults.ini
index c60579b..cc08094 100644
--- a/bin/OpenSimDefaults.ini
+++ b/bin/OpenSimDefaults.ini
@@ -58,7 +58,7 @@
     ; ##
 
     ; Set this to the DLL containing the client stack to use.
-    clientstack_plugin="OpenSim.Region.ClientStack.LindenUDP.dll"
+    clientstack_plugin="OpenSim.Region.ClientStack.LindenUDP.dll,OpenSim.Region.ClientStack.TCPJSONStream.dll"
 
     ; ##
     ; ## REGIONS
-- 
cgit v1.1


From 29d521e2733bf8dc11cfdbdad104f9f141f7c895 Mon Sep 17 00:00:00 2001
From: teravus
Date: Sun, 3 Feb 2013 07:56:31 -0500
Subject: Changing OpenSimDefaults back to default

---
 bin/OpenSimDefaults.ini | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'bin')

diff --git a/bin/OpenSimDefaults.ini b/bin/OpenSimDefaults.ini
index cc08094..c60579b 100644
--- a/bin/OpenSimDefaults.ini
+++ b/bin/OpenSimDefaults.ini
@@ -58,7 +58,7 @@
     ; ##
 
     ; Set this to the DLL containing the client stack to use.
-    clientstack_plugin="OpenSim.Region.ClientStack.LindenUDP.dll,OpenSim.Region.ClientStack.TCPJSONStream.dll"
+    clientstack_plugin="OpenSim.Region.ClientStack.LindenUDP.dll"
 
     ; ##
     ; ## REGIONS
-- 
cgit v1.1


From 1dc09d8e8f4a6caa321d0227722af97ee4aeed6a Mon Sep 17 00:00:00 2001
From: teravus
Date: Tue, 5 Feb 2013 18:02:25 -0500
Subject: We're not really done here..    but we're getting there.  Socket Read
 is working..    Still have to do Header.ToBytes and compose a websocket frame
 with a payload.

---
 bin/HttpServer_OpenSim.dll |  Bin 115712 -> 116224 bytes
 bin/HttpServer_OpenSim.pdb |  Bin 413184 -> 302592 bytes
 bin/HttpServer_OpenSim.xml | 6398 ++++++++++++++++++++++----------------------
 3 files changed, 3199 insertions(+), 3199 deletions(-)

(limited to 'bin')

diff --git a/bin/HttpServer_OpenSim.dll b/bin/HttpServer_OpenSim.dll
index d910bb9..9cd1e08 100755
Binary files a/bin/HttpServer_OpenSim.dll and b/bin/HttpServer_OpenSim.dll differ
diff --git a/bin/HttpServer_OpenSim.pdb b/bin/HttpServer_OpenSim.pdb
index b9161e1..d20a0c5 100644
Binary files a/bin/HttpServer_OpenSim.pdb and b/bin/HttpServer_OpenSim.pdb differ
diff --git a/bin/HttpServer_OpenSim.xml b/bin/HttpServer_OpenSim.xml
index d31bcca..fa88fc7 100644
--- a/bin/HttpServer_OpenSim.xml
+++ b/bin/HttpServer_OpenSim.xml
@@ -4,547 +4,659 @@
         <name>HttpServer_OpenSim</name>
     </assembly>
     <members>
-        <member name="T:HttpServer.Sessions.IHttpSessionStore">
-            <summary>
-            A session store is used to store and load sessions on a media.
-            The default implementation (<see cref="T:HttpServer.Sessions.MemorySessionStore"/>) saves/retrieves sessions from memory.
-            </summary>
-        </member>
-        <member name="M:HttpServer.Sessions.IHttpSessionStore.Create">
+        <member name="T:HttpServer.RealmHandler">
             <summary>
-            Creates a new http session with a generated id.
+            Delegate used to find a realm/domain.
             </summary>
-            <returns>A <see cref="T:HttpServer.Sessions.IHttpSession"/> object</returns>
+            <param name="domain"></param>
+            <returns></returns>
+            <remarks>
+            Realms are used during HTTP Authentication
+            </remarks>
+            <seealso cref="T:HttpServer.Authentication.AuthenticationModule"/>
+            <seealso cref="T:HttpServer.Authentication.AuthenticationHandler"/>
         </member>
-        <member name="M:HttpServer.Sessions.IHttpSessionStore.Create(System.String)">
+        <member name="T:HttpServer.HttpServer">
             <summary>
-            Creates a new http session with a specific id
+            A complete HTTP server, you need to add a module to it to be able to handle incoming requests.
             </summary>
-            <param name="id">Id used to identify the new cookie..</param>
-            <returns>A <see cref="T:HttpServer.Sessions.IHttpSession"/> object.</returns>
-            <remarks>
-            Id should be generated by the store implementation if it's null or <see cref="F:System.String.Empty"/>.
-            </remarks>
+            <example>
+            <code>
+            // this small example will add two web site modules, thus handling
+            // two different sites. In reality you should add Controller modules or something
+            // two the website modules to be able to handle different requests.
+            HttpServer server = new HttpServer();
+            server.Add(new WebSiteModule("www.gauffin.com", "Gauffin Telecom AB"));
+            server.Add(new WebSiteModule("www.vapadi.se", "Remote PBX"));
+            
+            // start regular http
+            server.Start(IPAddress.Any, 80);
+            
+            // start https
+            server.Start(IPAddress.Any, 443, myCertificate);
+            </code>
+            </example>
+            <seealso cref="T:HttpServer.HttpModules.HttpModule"/>
+            <seealso cref="T:HttpServer.HttpModules.FileModule"/>
+            <seealso cref="T:HttpServer.HttpListener"/>
         </member>
-        <member name="M:HttpServer.Sessions.IHttpSessionStore.Load(System.String)">
+        <member name="M:HttpServer.HttpServer.#ctor(HttpServer.IComponentProvider)">
             <summary>
-            Load an existing session.
+            Initializes a new instance of the <see cref="T:HttpServer.HttpServer"/> class.
             </summary>
-            <param name="sessionId">Session id (usually retrieved from a client side cookie).</param>
-            <returns>A session if found; otherwise null.</returns>
+            <param name="provider">Used to get all components used in the server..</param>
         </member>
-        <member name="M:HttpServer.Sessions.IHttpSessionStore.Save(HttpServer.Sessions.IHttpSession)">
+        <member name="M:HttpServer.HttpServer.#ctor">
             <summary>
-            Save an updated session to the store.
+            Initializes a new instance of the <see cref="T:HttpServer.HttpServer"/> class.
             </summary>
-            <param name="session">Session id (usually retrieved from a client side cookie).</param>
-            <exception cref="T:System.ArgumentException">If Id property have not been specified.</exception>
         </member>
-        <member name="M:HttpServer.Sessions.IHttpSessionStore.AddUnused(HttpServer.Sessions.IHttpSession)">
+        <member name="M:HttpServer.HttpServer.#ctor(HttpServer.FormDecoders.FormDecoderProvider)">
             <summary>
-            We use the flyweight pattern which reuses small objects
-            instead of creating new each time.
+            Initializes a new instance of the <see cref="T:HttpServer.HttpServer"/> class.
             </summary>
-            <param name="session">Unused session that should be reused next time Create is called.</param>
+            <param name="decoderProvider">Form decoders are used to convert different types of posted data to the <see cref="T:HttpServer.HttpInput"/> object types.</param>
+            <seealso cref="T:HttpServer.FormDecoders.IFormDecoder"/>
+            <seealso cref="P:HttpServer.HttpServer.FormDecoderProviders"/>
         </member>
-        <member name="M:HttpServer.Sessions.IHttpSessionStore.Cleanup">
+        <member name="M:HttpServer.HttpServer.#ctor(HttpServer.Sessions.IHttpSessionStore)">
             <summary>
-            Remove expired sessions
+            Initializes a new instance of the <see cref="T:HttpServer.HttpServer"/> class.
             </summary>
+            <param name="sessionStore">A session store is used to save and retrieve sessions</param>
+            <seealso cref="T:HttpServer.Sessions.IHttpSessionStore"/>
         </member>
-        <member name="M:HttpServer.Sessions.IHttpSessionStore.Remove(System.String)">
+        <member name="M:HttpServer.HttpServer.#ctor(HttpServer.ILogWriter)">
             <summary>
-            Remove a session
+            Initializes a new instance of the <see cref="T:HttpServer.HttpServer"/> class.
             </summary>
-            <param name="sessionId">id of the session.</param>
+            <param name="logWriter">The log writer.</param>
+            <seealso cref="P:HttpServer.HttpServer.LogWriter"/>
         </member>
-        <member name="P:HttpServer.Sessions.IHttpSessionStore.Item(System.String)">
+        <member name="M:HttpServer.HttpServer.#ctor(HttpServer.FormDecoders.FormDecoderProvider,HttpServer.ILogWriter)">
             <summary>
-            Load a session from the store
+            Initializes a new instance of the <see cref="T:HttpServer.HttpServer"/> class.
             </summary>
-            <param name="sessionId"></param>
-            <returns>null if session is not found.</returns>
+            <param name="decoderProvider">Form decoders are used to convert different types of posted data to the <see cref="T:HttpServer.HttpInput"/> object types.</param>
+            <param name="logWriter">The log writer.</param>
+            <seealso cref="T:HttpServer.FormDecoders.IFormDecoder"/>
+            <seealso cref="P:HttpServer.HttpServer.FormDecoderProviders"/>
+            <seealso cref="P:HttpServer.HttpServer.LogWriter"/>
         </member>
-        <member name="P:HttpServer.Sessions.IHttpSessionStore.ExpireTime">
+        <member name="M:HttpServer.HttpServer.#ctor(HttpServer.FormDecoders.FormDecoderProvider,HttpServer.Sessions.IHttpSessionStore,HttpServer.ILogWriter)">
             <summary>
-            Number of minutes before a session expires.
+            Initializes a new instance of the <see cref="T:HttpServer.HttpServer"/> class.
             </summary>
-            <value>Default time is 20 minutes.</value>
+            <param name="decoderProvider">Form decoders are used to convert different types of posted data to the <see cref="T:HttpServer.HttpInput"/> object types.</param>
+            <param name="sessionStore">A session store is used to save and retrieve sessions</param>
+            <param name="logWriter">The log writer.</param>
+            <seealso cref="T:HttpServer.FormDecoders.IFormDecoder"/>
+            <seealso cref="P:HttpServer.HttpServer.FormDecoderProviders"/>
+            <seealso cref="P:HttpServer.HttpServer.LogWriter"/>
+            <seealso cref="T:HttpServer.Sessions.IHttpSessionStore"/>
         </member>
-        <member name="T:HttpServer.IHttpRequest">
+        <member name="M:HttpServer.HttpServer.Add(HttpServer.Rules.IRule)">
             <summary>
-            Contains server side HTTP request information.
+            Adds the specified rule.
             </summary>
+            <param name="rule">The rule.</param>
         </member>
-        <member name="M:HttpServer.IHttpRequest.AddHeader(System.String,System.String)">
+        <member name="M:HttpServer.HttpServer.Add(HttpServer.HttpModules.HttpModule)">
             <summary>
-            Called during parsing of a <see cref="T:HttpServer.IHttpRequest"/>.
+            Add a <see cref="T:HttpServer.HttpModules.HttpModule"/> to the server.
             </summary>
-            <param name="name">Name of the header, should not be URL encoded</param>
-            <param name="value">Value of the header, should not be URL encoded</param>
-            <exception cref="T:HttpServer.Exceptions.BadRequestException">If a header is incorrect.</exception>
+            <param name="module">mode to add</param>
         </member>
-        <member name="M:HttpServer.IHttpRequest.AddToBody(System.Byte[],System.Int32,System.Int32)">
+        <member name="M:HttpServer.HttpServer.DecodeBody(HttpServer.IHttpRequest)">
             <summary>
-            Add bytes to the body
+            Decodes the request body.
             </summary>
-            <param name="bytes">buffer to read bytes from</param>
-            <param name="offset">where to start read</param>
-            <param name="length">number of bytes to read</param>
-            <returns>Number of bytes actually read (same as length unless we got all body bytes).</returns>
-            <exception cref="T:System.InvalidOperationException">If body is not writable</exception>
-            <exception cref="T:System.ArgumentNullException"><c>bytes</c> is null.</exception>
-            <exception cref="T:System.ArgumentOutOfRangeException"><c>offset</c> is out of range.</exception>
+            <param name="request">The request.</param>
+            <exception cref="T:HttpServer.Exceptions.InternalServerException">Failed to decode form data.</exception>
         </member>
-        <member name="M:HttpServer.IHttpRequest.Clear">
+        <member name="M:HttpServer.HttpServer.ErrorPage(HttpServer.IHttpResponse,System.Net.HttpStatusCode,System.String)">
             <summary>
-            Clear everything in the request
+            Generate a HTTP error page (that will be added to the response body).
+            response status code is also set.
             </summary>
+            <param name="response">Response that the page will be generated in.</param>
+            <param name="error"><see cref="T:System.Net.HttpStatusCode"/>.</param>
+            <param name="body">response body contents.</param>
         </member>
-        <member name="M:HttpServer.IHttpRequest.DecodeBody(HttpServer.FormDecoders.FormDecoderProvider)">
+        <member name="M:HttpServer.HttpServer.ErrorPage(HttpServer.IHttpResponse,HttpServer.Exceptions.HttpException)">
             <summary>
-            Decode body into a form.
+            Generate a HTTP error page (that will be added to the response body).
+            response status code is also set.
             </summary>
-            <param name="providers">A list with form decoders.</param>
-            <exception cref="T:System.IO.InvalidDataException">If body contents is not valid for the chosen decoder.</exception>
-            <exception cref="T:System.InvalidOperationException">If body is still being transferred.</exception>
+            <param name="response">Response that the page will be generated in.</param>
+            <param name="err">exception.</param>
         </member>
-        <member name="M:HttpServer.IHttpRequest.SetCookies(HttpServer.RequestCookies)">
+        <member name="M:HttpServer.HttpServer.GetRealm(HttpServer.IHttpRequest)">
             <summary>
-            Sets the cookies.
+            Realms are used by the <see cref="T:HttpServer.Authentication.AuthenticationModule"/>s.
             </summary>
-            <param name="cookies">The cookies.</param>
+            <param name="request">HTTP request</param>
+            <returns>domain/realm.</returns>
         </member>
-        <member name="M:HttpServer.IHttpRequest.CreateResponse(HttpServer.IHttpClientContext)">
+        <member name="M:HttpServer.HttpServer.HandleRequest(HttpServer.IHttpClientContext,HttpServer.IHttpRequest,HttpServer.IHttpResponse,HttpServer.Sessions.IHttpSession)">
             <summary>
-            Create a response object.
+            Process an incoming request.
             </summary>
-            <param name="context">Context for the connected client.</param>
-            <returns>A new <see cref="T:HttpServer.IHttpResponse"/>.</returns>
+            <param name="context">connection to client</param>
+            <param name="request">request information</param>
+            <param name="response">response that should be filled</param>
+            <param name="session">session information</param>
         </member>
-        <member name="P:HttpServer.IHttpRequest.AcceptTypes">
+        <member name="M:HttpServer.HttpServer.OnClientDisconnected(HttpServer.IHttpClientContext,System.Net.Sockets.SocketError)">
             <summary>
-            Gets kind of types accepted by the client.
+            Can be overloaded to implement stuff when a client have been connected.
             </summary>
+            <remarks>
+            Default implementation does nothing.
+            </remarks>
+            <param name="client">client that disconnected</param>
+            <param name="error">disconnect reason</param>
         </member>
-        <member name="P:HttpServer.IHttpRequest.Body">
+        <member name="M:HttpServer.HttpServer.ProcessAuthentication(HttpServer.IHttpRequest,HttpServer.IHttpResponse,HttpServer.Sessions.IHttpSession)">
             <summary>
-            Gets or sets body stream.
+            Handle authentication
             </summary>
+            <param name="request"></param>
+            <param name="response"></param>
+            <param name="session"></param>
+            <returns>true if request can be handled; false if not.</returns>
+            <exception cref="T:HttpServer.Exceptions.BadRequestException">Invalid authorization header</exception>
         </member>
-        <member name="P:HttpServer.IHttpRequest.BodyIsComplete">
+        <member name="M:HttpServer.HttpServer.RequestAuthentication(HttpServer.Authentication.AuthenticationModule,HttpServer.IHttpRequest,HttpServer.IHttpResponse)">
             <summary>
-            Gets whether the body is complete.
+            Will request authentication.
             </summary>
+            <remarks>
+            Sends respond to client, nothing else can be done with the response after this.
+            </remarks>
+            <param name="mod"></param>
+            <param name="request"></param>
+            <param name="response"></param>
         </member>
-        <member name="P:HttpServer.IHttpRequest.Connection">
+        <member name="M:HttpServer.HttpServer.OnRequest(System.Object,HttpServer.RequestEventArgs)">
             <summary>
-            Gets or sets kind of connection used for the session.
+            Received from a <see cref="T:HttpServer.IHttpClientContext"/> when a request have been parsed successfully.
             </summary>
+            <param name="source"><see cref="T:HttpServer.IHttpClientContext"/> that received the request.</param>
+            <param name="args">The request.</param>
         </member>
-        <member name="P:HttpServer.IHttpRequest.ContentLength">
+        <member name="M:HttpServer.HttpServer.ProcessRequestWrapper(HttpServer.IHttpClientContext,HttpServer.IHttpRequest)">
             <summary>
-            Gets or sets number of bytes in the body.
+            To be able to track request count.
             </summary>
+            <param name="context"></param>
+            <param name="request"></param>
         </member>
-        <member name="P:HttpServer.IHttpRequest.Cookies">
+        <member name="M:HttpServer.HttpServer.Start(System.Net.IPAddress,System.Int32)">
             <summary>
-            Gets cookies that was sent with the request.
+            Start the web server using regular HTTP.
             </summary>
+            <param name="address">IP Address to listen on, use <c>IpAddress.Any </c>to accept connections on all IP addresses/network cards.</param>
+            <param name="port">Port to listen on. 80 can be a good idea =)</param>
+            <exception cref="T:System.ArgumentNullException"><c>address</c> is null.</exception>
+            <exception cref="T:System.ArgumentException">Port must be a positive number.</exception>
         </member>
-        <member name="P:HttpServer.IHttpRequest.Form">
+        <member name="M:HttpServer.HttpServer.Start(System.Net.IPAddress,System.Int32,System.Security.Cryptography.X509Certificates.X509Certificate)">
             <summary>
-            Gets form parameters.
+            Accept secure connections.
             </summary>
+            <param name="address">IP Address to listen on, use <see cref="F:System.Net.IPAddress.Any"/> to accept connections on all IP Addresses / network cards.</param>
+            <param name="port">Port to listen on. 80 can be a good idea =)</param>
+            <param name="certificate">Certificate to use</param>
+            <exception cref="T:System.ArgumentNullException"><c>address</c> is null.</exception>
+            <exception cref="T:System.ArgumentException">Port must be a positive number.</exception>
         </member>
-        <member name="P:HttpServer.IHttpRequest.Headers">
+        <member name="M:HttpServer.HttpServer.Stop">
             <summary>
-            Gets headers sent by the client.
+            shut down the server and listeners
             </summary>
         </member>
-        <member name="P:HttpServer.IHttpRequest.HttpVersion">
+        <member name="M:HttpServer.HttpServer.WriteLog(HttpServer.LogPrio,System.String)">
             <summary>
-            Gets or sets version of HTTP protocol that's used. 
+            write an entry to the log file
             </summary>
-            <remarks>
-            Probably <see cref="F:HttpServer.HttpHelper.HTTP10"/> or <see cref="F:HttpServer.HttpHelper.HTTP11"/>.
-            </remarks>
-            <seealso cref="T:HttpServer.HttpHelper"/>
+            <param name="prio">importance of the message</param>
+            <param name="message">log message</param>
         </member>
-        <member name="P:HttpServer.IHttpRequest.IsAjax">
+        <member name="M:HttpServer.HttpServer.WriteLog(System.Object,HttpServer.LogPrio,System.String)">
             <summary>
-            Gets whether the request was made by Ajax (Asynchronous JavaScript)
+            write an entry to the log file
             </summary>
+            <param name="source">object that wrote the message</param>
+            <param name="prio">importance of the message</param>
+            <param name="message">log message</param>
         </member>
-        <member name="P:HttpServer.IHttpRequest.Method">
+        <member name="P:HttpServer.HttpServer.Current">
             <summary>
-            Gets or sets requested method.
+            Server that is handling the current request.
             </summary>
             <remarks>
-            Will always be in upper case.
+            Will be set as soon as a request arrives to the <see cref="T:HttpServer.HttpServer"/> object.
             </remarks>
-            <see cref="P:HttpServer.IHttpRequest.Method"/>
         </member>
-        <member name="P:HttpServer.IHttpRequest.Param">
+        <member name="P:HttpServer.HttpServer.AuthenticationModules">
             <summary>
-            Gets parameter from <see cref="P:HttpServer.IHttpRequest.QueryString"/> or <see cref="P:HttpServer.IHttpRequest.Form"/>.
-            </summary>
-        </member>
-        <member name="P:HttpServer.IHttpRequest.QueryString">
-            <summary>
-            Gets variables sent in the query string
+            Modules used for authentication. The module that is is added first is used as 
+            the default authentication module.
             </summary>
+            <remarks>Use the corresponding property
+            in the <see cref="T:HttpServer.HttpModules.WebSiteModule"/> if you are using multiple websites.</remarks>
         </member>
-        <member name="P:HttpServer.IHttpRequest.Uri">
+        <member name="P:HttpServer.HttpServer.FormDecoderProviders">
             <summary>
-            Gets or sets requested URI.
+            Form decoder providers are used to decode request body (which normally contains form data).
             </summary>
         </member>
-        <member name="P:HttpServer.IHttpRequest.UriParts">
+        <member name="P:HttpServer.HttpServer.ServerName">
             <summary>
-            Gets URI absolute path divided into parts.
+            Server name sent in HTTP responses.
             </summary>
-            <example>
-            // URI is: http://gauffin.com/code/tiny/
-            Console.WriteLine(request.UriParts[0]); // result: code
-            Console.WriteLine(request.UriParts[1]); // result: tiny
-            </example>
             <remarks>
-            If you're using controllers than the first part is controller name,
-            the second part is method name and the third part is Id property.
+            Do NOT include version in name, since it makes it 
+            easier for hackers.
             </remarks>
-            <seealso cref="P:HttpServer.IHttpRequest.Uri"/>
         </member>
-        <member name="P:HttpServer.IHttpRequest.UriPath">
+        <member name="P:HttpServer.HttpServer.SessionCookieName">
             <summary>
-            Gets or sets path and query.
+            Name of cookie where session id is stored.
             </summary>
-            <see cref="P:HttpServer.IHttpRequest.Uri"/>
-            <remarks>
-            Are only used during request parsing. Cannot be set after "Host" header have been
-            added.
-            </remarks>
         </member>
-        <member name="T:HttpServer.IHttpContextHandler">
+        <member name="P:HttpServer.HttpServer.LogWriter">
             <summary>
-            Class that receives Requests from a <see cref="T:HttpServer.IHttpClientContext"/>.
+            Specified where logging should go.
             </summary>
+            <seealso cref="T:HttpServer.NullLogWriter"/>
+            <seealso cref="T:HttpServer.ConsoleLogWriter"/>
+            <seealso cref="P:HttpServer.HttpServer.LogWriter"/>
         </member>
-        <member name="M:HttpServer.IHttpContextHandler.ClientDisconnected(HttpServer.IHttpClientContext,System.Net.Sockets.SocketError)">
+        <member name="P:HttpServer.HttpServer.BackLog">
             <summary>
-            Client have been disconnected.
+            Number of connections that can wait to be accepted by the server.
             </summary>
-            <param name="client">Client that was disconnected.</param>
-            <param name="error">Reason</param>
-            <see cref="T:HttpServer.IHttpClientContext"/>
+            <remarks>Default is 10.</remarks>
         </member>
-        <member name="M:HttpServer.IHttpContextHandler.RequestReceived(HttpServer.IHttpClientContext,HttpServer.IHttpRequest)">
+        <member name="P:HttpServer.HttpServer.MaxRequestCount">
             <summary>
-            Invoked when a client context have received a new HTTP request
+            Gets or sets maximum number of allowed simultaneous requests.
             </summary>
-            <param name="client">Client that received the request.</param>
-            <param name="request">Request that was received.</param>
-            <see cref="T:HttpServer.IHttpClientContext"/>
+            <remarks>
+            <para>
+            This property is useful in busy systems. The HTTP server
+            will start queuing new requests if this limit is hit, instead
+            of trying to process all incoming requests directly.
+            </para>
+            <para>
+            The default number if allowed simultaneous requests are 10.
+            </para>
+            </remarks>
         </member>
-        <member name="T:HttpServer.Helpers.GetIdTitle">
+        <member name="P:HttpServer.HttpServer.MaxQueueSize">
             <summary>
-            Delegate used by <see cref="M:HttpServer.Helpers.FormHelper.Select(System.String,System.Collections.IEnumerable,HttpServer.Helpers.GetIdTitle,System.Object,System.Boolean)"/> to populate select options.
+            Gets or sets maximum number of requests queuing to be handled.
             </summary>
-            <param name="obj">current object (for instance a User).</param>
-            <param name="id">Text that should be displayed in the value part of a &lt;optiongt;-tag.</param>
-            <param name="title">Text shown in the select list.</param>
-            <example>
-            // Class that is going to be used in a SELECT-tag.
-            public class User
-            {
-                private readonly string _realName;
-                private readonly int _id;
-                public User(int id, string realName)
-                {
-                    _id = id;
-                    _realName = realName;
-                }
-                public string RealName
-                {
-                    get { return _realName; }
-                }
-            
-                public int Id
-                {
-                    get { return _id; }
-                }
-            }
-            
-            // Using an inline delegate to generate the select list
-            public void UserInlineDelegate()
-            {
-                List&lt;User&gt; items = new List&lt;User&gt;();
-                items.Add(new User(1, "adam"));
-                items.Add(new User(2, "bertial"));
-                items.Add(new User(3, "david"));
-                string htmlSelect = Select("users", "users", items, delegate(object o, out object id, out object value)
-                                                                    {
-                                                                        User user = (User)o;
-                                                                        id = user.Id;
-                                                                        value = user.RealName;
-                                                                    }, 2, true);
-            }
-            
-            // Using an method as delegate to generate the select list.
-            public void UseExternalDelegate()
-            {
-                List&lt;User&gt; items = new List&lt;User&gt;();
-                items.Add(new User(1, "adam"));
-                items.Add(new User(2, "bertial"));
-                items.Add(new User(3, "david"));
-                string htmlSelect = Select("users", "users", items, UserOptions, 1, true);
-            }
-            
-            // delegate returning id and title
-            public static void UserOptions(object o, out object id, out object title)
-            {
-                User user = (User)o;
-                id = user.Id;
-                value = user.RealName;
-            }    /// </example>
+            <remarks>
+            <para>
+            The WebServer will start turning requests away if response code
+            <see cref="F:System.Net.HttpStatusCode.ServiceUnavailable"/> to indicate that the server
+            is too busy to be able to handle the request.
+            </para>
+            </remarks>
         </member>
-        <member name="T:HttpServer.Exceptions.ForbiddenException">
+        <member name="E:HttpServer.HttpServer.RealmWanted">
             <summary>
-            The server understood the request, but is refusing to fulfill it. 
-            Authorization will not help and the request SHOULD NOT be repeated. 
-            If the request method was not HEAD and the server wishes to make public why the request has not been fulfilled, 
-            it SHOULD describe the reason for the refusal in the entity. If the server does not wish to make this information 
-            available to the client, the status code 404 (Not Found) can be used instead.
-            
-            Text taken from: http://www.submissionchamber.com/help-guides/error-codes.php
+            Realms are used during HTTP authentication.
+            Default realm is same as server name.
             </summary>
         </member>
-        <member name="T:HttpServer.Exceptions.HttpException">
+        <member name="E:HttpServer.HttpServer.ExceptionThrown">
             <summary>
-            All HTTP based exceptions will derive this class.
+            Let's to receive unhandled exceptions from the threads.
             </summary>
+            <remarks>
+            Exceptions will be thrown during debug mode if this event is not used,
+            exceptions will be printed to console and suppressed during release mode.
+            </remarks>
         </member>
-        <member name="M:HttpServer.Exceptions.HttpException.#ctor(System.Net.HttpStatusCode,System.String)">
+        <member name="T:HttpServer.HttpModules.ResourceFileModule">
             <summary>
-            Create a new HttpException
+            Serves files that are stored in embedded resources.
             </summary>
-            <param name="code">http status code (sent in the response)</param>
-            <param name="message">error description</param>
         </member>
-        <member name="M:HttpServer.Exceptions.HttpException.#ctor(System.Net.HttpStatusCode,System.String,System.Exception)">
+        <member name="T:HttpServer.HttpModules.HttpModule">
             <summary>
-            Create a new HttpException
+            A HttpModule can be used to serve Uri's. The module itself
+            decides if it should serve a Uri or not. In this way, you can
+            get a very flexible http application since you can let multiple modules
+            serve almost similar urls.
             </summary>
-            <param name="code">http status code (sent in the response)</param>
-            <param name="message">error description</param>
-            <param name="inner">inner exception</param>
+            <remarks>
+            Throw <see cref="T:HttpServer.Exceptions.UnauthorizedException"/> if you are using a <see cref="T:HttpServer.Authentication.AuthenticationModule"/> and want to prompt for user name/password.
+            </remarks>
         </member>
-        <member name="P:HttpServer.Exceptions.HttpException.HttpStatusCode">
+        <member name="M:HttpServer.HttpModules.HttpModule.Process(HttpServer.IHttpRequest,HttpServer.IHttpResponse,HttpServer.Sessions.IHttpSession)">
             <summary>
-            status code to use in the response.
+            Method that process the url
             </summary>
+            <param name="request">Information sent by the browser about the request</param>
+            <param name="response">Information that is being sent back to the client.</param>
+            <param name="session">Session used to </param>
+            <returns>true if this module handled the request.</returns>
         </member>
-        <member name="M:HttpServer.Exceptions.ForbiddenException.#ctor(System.String)">
+        <member name="M:HttpServer.HttpModules.HttpModule.SetLogWriter(HttpServer.ILogWriter)">
             <summary>
-            Initializes a new instance of the <see cref="T:HttpServer.Exceptions.ForbiddenException"/> class.
+            Set the log writer to use.
             </summary>
-            <param name="errorMsg">error message</param>
+            <param name="writer">logwriter to use.</param>
         </member>
-        <member name="T:HttpServer.Sessions.MemorySession">
+        <member name="M:HttpServer.HttpModules.HttpModule.Write(HttpServer.LogPrio,System.String)">
             <summary>
-            A session stored in memory.
+            Log something.
             </summary>
+            <param name="prio">importance of log message</param>
+            <param name="message">message</param>
         </member>
-        <member name="T:HttpServer.Sessions.IHttpSession">
+        <member name="P:HttpServer.HttpModules.HttpModule.AllowSecondaryProcessing">
             <summary>
-            Interface for sessions
+            If true specifies that the module doesn't consume the processing of a request so that subsequent modules
+            can continue processing afterwards. Default is false.
             </summary>
         </member>
-        <member name="M:HttpServer.Sessions.IHttpSession.Clear">
+        <member name="M:HttpServer.HttpModules.ResourceFileModule.#ctor">
             <summary>
-            Remove everything from the session
+            Initializes a new instance of the <see cref="T:HttpServer.HttpModules.ResourceFileModule"/> class.
+            Runs <see cref="M:HttpServer.HttpModules.ResourceFileModule.AddDefaultMimeTypes"/> to make sure the basic mime types are available, they can be cleared later
+            through the use of <see cref="P:HttpServer.HttpModules.ResourceFileModule.MimeTypes"/> if desired.
             </summary>
         </member>
-        <member name="M:HttpServer.Sessions.IHttpSession.Clear(System.Boolean)">
+        <member name="M:HttpServer.HttpModules.ResourceFileModule.#ctor(HttpServer.ILogWriter)">
             <summary>
-            Remove everything from the session
+            Initializes a new instance of the <see cref="T:HttpServer.HttpModules.ResourceFileModule"/> class.
+            Runs <see cref="M:HttpServer.HttpModules.ResourceFileModule.AddDefaultMimeTypes"/> to make sure the basic mime types are available, they can be cleared later
+            through the use of <see cref="P:HttpServer.HttpModules.ResourceFileModule.MimeTypes"/> if desired.
             </summary>
-            <param name="expires">True if the session is cleared due to expiration</param>
+            <param name="logWriter">The log writer to use when logging events</param>
         </member>
-        <member name="P:HttpServer.Sessions.IHttpSession.Id">
+        <member name="M:HttpServer.HttpModules.ResourceFileModule.AddDefaultMimeTypes">
             <summary>
-            Session id
+            Mimtypes that this class can handle per default
             </summary>
         </member>
-        <member name="P:HttpServer.Sessions.IHttpSession.Item(System.String)">
+        <member name="M:HttpServer.HttpModules.ResourceFileModule.AddResources(System.String,System.Reflection.Assembly,System.String)">
             <summary>
-            Should 
+            Loads resources from a namespace in the given assembly to an uri
             </summary>
-            <param name="name">Name of the session variable</param>
-            <returns>null if it's not set</returns>
-            <exception cref="T:System.Runtime.Serialization.SerializationException">If the object cant be serialized.</exception>
+            <param name="toUri">The uri to map the resources to</param>
+            <param name="fromAssembly">The assembly in which the resources reside</param>
+            <param name="fromNamespace">The namespace from which to load the resources</param>
+            <usage>
+            resourceLoader.LoadResources("/user/", typeof(User).Assembly, "MyLib.Models.User.Views");
+            
+            will make ie the resource MyLib.Models.User.Views.stylesheet.css accessible via /user/stylesheet.css
+            </usage>
+            <returns>The amount of loaded files, giving you the possibility of making sure the resources needed gets loaded</returns>
         </member>
-        <member name="P:HttpServer.Sessions.IHttpSession.Accessed">
+        <member name="M:HttpServer.HttpModules.ResourceFileModule.CanHandle(HttpServer.IHttpRequest)">
             <summary>
-            When the session was last accessed.
-            This property is touched by the http server each time the
-            session is requested.
+            Returns true if the module can handle the request
             </summary>
         </member>
-        <member name="P:HttpServer.Sessions.IHttpSession.Count">
+        <member name="M:HttpServer.HttpModules.ResourceFileModule.Process(HttpServer.IHttpRequest,HttpServer.IHttpResponse,HttpServer.Sessions.IHttpSession)">
             <summary>
-            Number of session variables.
+            Method that process the url
             </summary>
+            <param name="request">Information sent by the browser about the request</param>
+            <param name="response">Information that is being sent back to the client.</param>
+            <param name="session">Session used to </param>
+            <returns>true if this module handled the request.</returns>
         </member>
-        <member name="E:HttpServer.Sessions.IHttpSession.BeforeClear">
+        <member name="P:HttpServer.HttpModules.ResourceFileModule.MimeTypes">
             <summary>
-            Event triggered upon clearing the session
+            List with all mime-type that are allowed. 
             </summary>
+            <remarks>All other mime types will result in a Forbidden http status code.</remarks>
         </member>
-        <member name="M:HttpServer.Sessions.MemorySession.#ctor(System.String)">
+        <member name="T:HttpServer.HttpInput">
             <summary>
-            
+            Contains some kind of input from the browser/client.
+            can be QueryString, form data or any other request body content.
             </summary>
-            <param name="id">A unique id used by the sessions store to identify the session</param>
         </member>
-        <member name="M:HttpServer.Sessions.MemorySession.SetId(System.String)">
+        <member name="T:HttpServer.IHttpInput">
             <summary>
-            Id
+            Base class for request data containers
             </summary>
-            <param name="id"></param>
         </member>
-        <member name="M:HttpServer.Sessions.MemorySession.Clear">
+        <member name="M:HttpServer.IHttpInput.Add(System.String,System.String)">
             <summary>
-            Remove everything from the session
+            Adds a parameter mapped to the presented name
             </summary>
+            <param name="name">The name to map the parameter to</param>
+            <param name="value">The parameter value</param>
         </member>
-        <member name="M:HttpServer.Sessions.MemorySession.Clear(System.Boolean)">
+        <member name="M:HttpServer.IHttpInput.Contains(System.String)">
             <summary>
-            Clears the specified expire.
+            Returns true if the container contains the requested parameter
             </summary>
-            <param name="expires">True if the session is cleared due to expiration</param>
+            <param name="name">Parameter id</param>
+            <returns>True if parameter exists</returns>
         </member>
-        <member name="M:HttpServer.Sessions.MemorySession.Dispose">
+        <member name="P:HttpServer.IHttpInput.Item(System.String)">
             <summary>
-            Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
+            Returns a request parameter
             </summary>
-            <filterpriority>2</filterpriority>
+            <param name="name">The name associated with the parameter</param>
+            <returns></returns>
         </member>
-        <member name="P:HttpServer.Sessions.MemorySession.Id">
+        <member name="F:HttpServer.HttpInput.Empty">
+            <summary> Representation of a non-initialized class instance </summary>
+        </member>
+        <member name="F:HttpServer.HttpInput._ignoreChanges">
+            <summary> Variable telling the class that it is non-initialized <see cref="F:HttpServer.HttpInput.Empty"/> </summary>
+        </member>
+        <member name="M:HttpServer.HttpInput.#ctor(System.String)">
             <summary>
-            Session id
+            Initializes a new instance of the <see cref="T:HttpServer.HttpInput"/> class.
             </summary>
+            <param name="name">form name.</param>
         </member>
-        <member name="P:HttpServer.Sessions.MemorySession.Item(System.String)">
+        <member name="M:HttpServer.HttpInput.#ctor(System.String,System.Boolean)">
             <summary>
-            Should 
+            Initializes a new instance of the <see cref="T:HttpServer.HttpInput"/> class.
             </summary>
-            <param name="name">Name of the session variable</param>
-            <returns>null if it's not set</returns>
+            <param name="name">form name.</param>
+            <param name="ignoreChanges">if set to <c>true</c> all changes will be ignored. </param>
+            <remarks>this constructor should only be used by Empty</remarks>
         </member>
-        <member name="P:HttpServer.Sessions.MemorySession.Accessed">
+        <member name="M:HttpServer.HttpInput.#ctor(HttpServer.HttpInput)">
+            <summary>Creates a deep copy of the HttpInput class</summary>
+            <param name="input">The object to copy</param>
+            <remarks>The function makes a deep copy of quite a lot which can be slow</remarks>
+        </member>
+        <member name="M:HttpServer.HttpInput.Add(System.String,System.String)">
             <summary>
-            when the session was last accessed.
+            Add a new element. Form array elements are parsed
+            and added in a correct hierarchy.
             </summary>
-            <remarks>
-            Used to determine when the session should be removed.
-            </remarks>
+            <param name="name">Name is converted to lower case.</param>
+            <param name="value"></param>
+            <exception cref="T:System.ArgumentNullException"><c>name</c> is null.</exception>
+            <exception cref="T:System.InvalidOperationException">Cannot add stuff to <see cref="F:HttpServer.HttpInput.Empty"/>.</exception>
         </member>
-        <member name="P:HttpServer.Sessions.MemorySession.Count">
+        <member name="M:HttpServer.HttpInput.Contains(System.String)">
             <summary>
-            Number of values in the session
+            Returns true if the class contains a <see cref="T:HttpServer.HttpInput"/> with the corresponding name.
             </summary>
+            <param name="name">The field/query string name</param>
+            <returns>True if the value exists</returns>
         </member>
-        <member name="P:HttpServer.Sessions.MemorySession.Changed">
+        <member name="M:HttpServer.HttpInput.ParseItem(System.String,System.String)">
             <summary>
-            Flag to indicate that the session have been changed
-            and should be saved into the session store.
+            Parses an item and returns it.
+            This function is primarily used to parse array items as in user[name].
             </summary>
+            <param name="name"></param>
+            <param name="value"></param>
+            <returns></returns>
         </member>
-        <member name="E:HttpServer.Sessions.MemorySession.BeforeClear">
+        <member name="M:HttpServer.HttpInput.ToString">
+            <summary> Outputs the instance representing all its values joined together </summary>
+            <returns></returns>
+        </member>
+        <member name="M:HttpServer.HttpInput.ToString(System.Boolean)">
+            <summary>Returns all items as an unescaped query string.</summary>
+            <returns></returns>
+        </member>
+        <member name="M:HttpServer.HttpInput.ExtractOne(System.String)">
             <summary>
-            Event triggered upon clearing the session
+            Extracts one parameter from an array
             </summary>
+            <param name="value">Containing the string array</param>
+            <returns>All but the first value</returns>
+            <example>
+            string test1 = ExtractOne("system[user][extension][id]");
+            string test2 = ExtractOne(test1);
+            string test3 = ExtractOne(test2);
+            // test1 = user[extension][id]
+            // test2 = extension[id]
+            // test3 = id
+            </example>
         </member>
-        <member name="T:HttpServer.ResponseCookie">
+        <member name="M:HttpServer.HttpInput.Clear">
+            <summary>Resets all data contained by class</summary>
+        </member>
+        <member name="M:HttpServer.HttpInput.System#Collections#Generic#IEnumerable{HttpServer#HttpInputItem}#GetEnumerator">
             <summary>
-            cookie being sent back to the browser.
+            Returns an enumerator that iterates through the collection.
             </summary>
-            <seealso cref="T:HttpServer.ResponseCookie"/>
+            
+            <returns>
+            A <see cref="T:System.Collections.Generic.IEnumerator`1"></see> that can be used to iterate through the collection.
+            </returns>
+            <filterpriority>1</filterpriority>
         </member>
-        <member name="T:HttpServer.RequestCookie">
+        <member name="M:HttpServer.HttpInput.GetEnumerator">
             <summary>
-            cookie sent by the client/browser
+            Returns an enumerator that iterates through a collection.
             </summary>
-            <seealso cref="T:HttpServer.ResponseCookie"/>
+            
+            <returns>
+            An <see cref="T:System.Collections.IEnumerator"></see> object that can be used to iterate through the collection.
+            </returns>
+            <filterpriority>2</filterpriority>
         </member>
-        <member name="M:HttpServer.RequestCookie.#ctor(System.String,System.String)">
+        <member name="P:HttpServer.HttpInput.Name">
             <summary>
-            Constructor.
+            Form name as lower case
             </summary>
-            <param name="id">cookie identifier</param>
-            <param name="content">cookie content</param>
-            <exception cref="T:System.ArgumentNullException">id or content is null</exception>
-            <exception cref="T:System.ArgumentException">id is empty</exception>
         </member>
-        <member name="M:HttpServer.RequestCookie.ToString">
+        <member name="P:HttpServer.HttpInput.Item(System.String)">
             <summary>
-            Gets the cookie HTML representation.
+            Get a form item.
             </summary>
-            <returns>cookie string</returns>
+            <param name="name"></param>
+            <returns>Returns <see cref="F:HttpServer.HttpInputItem.Empty"/> if item was not found.</returns>
         </member>
-        <member name="P:HttpServer.RequestCookie.Name">
+        <member name="T:HttpServer.Exceptions.ForbiddenException">
             <summary>
-            Gets the cookie identifier.
+            The server understood the request, but is refusing to fulfill it. 
+            Authorization will not help and the request SHOULD NOT be repeated. 
+            If the request method was not HEAD and the server wishes to make public why the request has not been fulfilled, 
+            it SHOULD describe the reason for the refusal in the entity. If the server does not wish to make this information 
+            available to the client, the status code 404 (Not Found) can be used instead.
+            
+            Text taken from: http://www.submissionchamber.com/help-guides/error-codes.php
             </summary>
         </member>
-        <member name="P:HttpServer.RequestCookie.Value">
+        <member name="T:HttpServer.Exceptions.HttpException">
             <summary>
-            Cookie value. Set to null to remove cookie.
+            All HTTP based exceptions will derive this class.
             </summary>
         </member>
-        <member name="M:HttpServer.ResponseCookie.#ctor(System.String,System.String,System.DateTime)">
+        <member name="M:HttpServer.Exceptions.HttpException.#ctor(System.Net.HttpStatusCode,System.String)">
             <summary>
-            Constructor.
+            Create a new HttpException
             </summary>
-            <param name="id">cookie identifier</param>
-            <param name="content">cookie content</param>
-            <param name="expiresAt">cookie expiration date. Use DateTime.MinValue for session cookie.</param>
-            <exception cref="T:System.ArgumentNullException">id or content is null</exception>
-            <exception cref="T:System.ArgumentException">id is empty</exception>
+            <param name="code">http status code (sent in the response)</param>
+            <param name="message">error description</param>
         </member>
-        <member name="M:HttpServer.ResponseCookie.#ctor(System.String,System.String,System.DateTime,System.String,System.String)">
+        <member name="M:HttpServer.Exceptions.HttpException.#ctor(System.Net.HttpStatusCode,System.String,System.Exception)">
             <summary>
-            Create a new cookie
+            Create a new HttpException
             </summary>
-            <param name="name">name identifying the cookie</param>
-            <param name="value">cookie value</param>
-            <param name="expires">when the cookie expires. Setting DateTime.MinValue will delete the cookie when the session is closed.</param>
-            <param name="path">Path to where the cookie is valid</param>
-            <param name="domain">Domain that the cookie is valid for.</param>
+            <param name="code">http status code (sent in the response)</param>
+            <param name="message">error description</param>
+            <param name="inner">inner exception</param>
         </member>
-        <member name="M:HttpServer.ResponseCookie.#ctor(HttpServer.RequestCookie,System.DateTime)">
+        <member name="P:HttpServer.Exceptions.HttpException.HttpStatusCode">
             <summary>
-            Create a new cookie
+            status code to use in the response.
             </summary>
-            <param name="cookie">Name and value will be used</param>
-            <param name="expires">when the cookie expires.</param>
         </member>
-        <member name="M:HttpServer.ResponseCookie.ToString">
+        <member name="M:HttpServer.Exceptions.ForbiddenException.#ctor(System.String)">
             <summary>
-            Gets the cookie HTML representation.
+            Initializes a new instance of the <see cref="T:HttpServer.Exceptions.ForbiddenException"/> class.
             </summary>
-            <returns>cookie string</returns>
+            <param name="errorMsg">error message</param>
         </member>
-        <member name="P:HttpServer.ResponseCookie.Expires">
+        <member name="T:HttpServer.RequestCookies">
             <summary>
-            When the cookie expires.
-            DateTime.MinValue means that the cookie expires when the session do so.
+            This class is created as a wrapper, since there are two different cookie types in .Net (Cookie and HttpCookie).
+            The framework might switch class in the future and we dont want to have to replace all instances
             </summary>
         </member>
-        <member name="P:HttpServer.ResponseCookie.Path">
+        <member name="M:HttpServer.RequestCookies.#ctor(System.String)">
             <summary>
-            Cookie is only valid under this path.
+            Let's copy all the cookies.
+            </summary>
+            <param name="cookies">value from cookie header.</param>
+        </member>
+        <member name="M:HttpServer.RequestCookies.Add(HttpServer.RequestCookie)">
+            <summary>
+            Adds a cookie in the collection.
+            </summary>
+            <param name="cookie">cookie to add</param>
+            <exception cref="T:System.ArgumentNullException">cookie is null</exception>
+        </member>
+        <member name="M:HttpServer.RequestCookies.GetEnumerator">
+            <summary>
+            Gets a collection enumerator on the cookie list.
+            </summary>
+            <returns>collection enumerator</returns>
+        </member>
+        <member name="M:HttpServer.RequestCookies.Clear">
+            <summary>
+            Remove all cookies.
+            </summary>
+        </member>
+        <member name="M:HttpServer.RequestCookies.System#Collections#Generic#IEnumerable{HttpServer#RequestCookie}#GetEnumerator">
+            <summary>
+            Returns an enumerator that iterates through the collection.
+            </summary>
+            
+            <returns>
+            A <see cref="T:System.Collections.Generic.IEnumerator`1"></see> that can be used to iterate through the collection.
+            </returns>
+            <filterpriority>1</filterpriority>
+        </member>
+        <member name="M:HttpServer.RequestCookies.Remove(System.String)">
+            <summary>
+            Remove a cookie from the collection.
+            </summary>
+            <param name="cookieName">Name of cookie.</param>
+        </member>
+        <member name="P:HttpServer.RequestCookies.Count">
+            <summary>
+            Gets the count of cookies in the collection.
+            </summary>
+        </member>
+        <member name="P:HttpServer.RequestCookies.Item(System.String)">
+            <summary>
+            Gets the cookie of a given identifier (null if not existing).
             </summary>
         </member>
         <member name="T:HttpServer.IHttpClientContext">
@@ -660,102 +772,130 @@
             Gets received request.
             </summary>
         </member>
-        <member name="T:HttpServer.HttpListenerBase">
+        <member name="T:HttpServer.HttpParam">
             <summary>
-            Contains a listener that doesn't do anything with the connections.
+            Returns item either from a form or a query string (checks them in that order)
             </summary>
         </member>
-        <member name="M:HttpServer.HttpListenerBase.#ctor(System.Net.IPAddress,System.Int32,HttpServer.IHttpContextFactory)">
+        <member name="F:HttpServer.HttpParam.Empty">
+            <summary> Representation of a non-initialized HttpParam </summary>
+        </member>
+        <member name="M:HttpServer.HttpParam.#ctor(HttpServer.IHttpInput,HttpServer.IHttpInput)">
+            <summary>Initialises the class to hold a value either from a post request or a querystring request</summary>		
+        </member>
+        <member name="M:HttpServer.HttpParam.Add(System.String,System.String)">
             <summary>
-            Listen for regular HTTP connections
+            The add method is not availible for HttpParam
+            since HttpParam checks both Request.Form and Request.QueryString
             </summary>
-            <param name="address">IP Address to accept connections on</param>
-            <param name="port">TCP Port to listen on, default HTTP port is 80.</param>
-            <param name="factory">Factory used to create <see cref="T:HttpServer.IHttpClientContext"/>es.</param>
-            <exception cref="T:System.ArgumentNullException"><c>address</c> is null.</exception>
-            <exception cref="T:System.ArgumentException">Port must be a positive number.</exception>
+            <param name="name">name identifying the value</param>
+            <param name="value">value to add</param>
+            <exception cref="T:System.NotImplementedException"></exception>
         </member>
-        <member name="M:HttpServer.HttpListenerBase.#ctor(System.Net.IPAddress,System.Int32,HttpServer.IHttpContextFactory,System.Security.Cryptography.X509Certificates.X509Certificate)">
+        <member name="M:HttpServer.HttpParam.Contains(System.String)">
             <summary>
-            Initializes a new instance of the <see cref="T:HttpServer.HttpListenerBase"/> class.
+            Checks whether the form or querystring has the specified value
             </summary>
-            <param name="address">IP Address to accept connections on</param>
-            <param name="port">TCP Port to listen on, default HTTPS port is 443</param>
-            <param name="factory">Factory used to create <see cref="T:HttpServer.IHttpClientContext"/>es.</param>
-            <param name="certificate">Certificate to use</param>
+            <param name="name">Name, case sensitive</param>
+            <returns>true if found; otherwise false.</returns>
         </member>
-        <member name="M:HttpServer.HttpListenerBase.#ctor(System.Net.IPAddress,System.Int32,HttpServer.IHttpContextFactory,System.Security.Cryptography.X509Certificates.X509Certificate,System.Security.Authentication.SslProtocols)">
+        <member name="M:HttpServer.HttpParam.System#Collections#Generic#IEnumerable{HttpServer#HttpInputItem}#GetEnumerator">
             <summary>
-            Initializes a new instance of the <see cref="T:HttpServer.HttpListenerBase"/> class.
+            Returns an enumerator that iterates through the collection.
             </summary>
-            <param name="address">IP Address to accept connections on</param>
-            <param name="port">TCP Port to listen on, default HTTPS port is 443</param>
-            <param name="factory">Factory used to create <see cref="T:HttpServer.IHttpClientContext"/>es.</param>
-            <param name="certificate">Certificate to use</param>
-            <param name="protocol">which HTTPS protocol to use, default is TLS.</param>
+            
+            <returns>
+            A <see cref="T:System.Collections.Generic.IEnumerator`1"></see> that can be used to iterate through the collection.
+            </returns>
+            <filterpriority>1</filterpriority>
         </member>
-        <member name="M:HttpServer.HttpListenerBase.OnAccept(System.IAsyncResult)">
-            <exception cref="T:System.Exception"><c>Exception</c>.</exception>
+        <member name="M:HttpServer.HttpParam.GetEnumerator">
+            <summary>
+            Returns an enumerator that iterates through a collection.
+            </summary>
+            
+            <returns>
+            An <see cref="T:System.Collections.IEnumerator"></see> object that can be used to iterate through the collection.
+            </returns>
+            <filterpriority>2</filterpriority>
         </member>
-        <member name="M:HttpServer.HttpListenerBase.RetryBeginAccept">
+        <member name="P:HttpServer.HttpParam.Item(System.String)">
             <summary>
-            Will try to accept connections one more time.
+            Fetch an item from the form or querystring (in that order).
             </summary>
-            <exception cref="T:System.Exception">If any exceptions is thrown.</exception>
+            <param name="name"></param>
+            <returns>Item if found; otherwise HttpInputItem.EmptyLanguageNode</returns>
         </member>
-        <member name="M:HttpServer.HttpListenerBase.OnAcceptingSocket(System.Net.Sockets.Socket)">
+        <member name="T:HttpServer.HttpFile">
             <summary>
-            Can be used to create filtering of new connections.
+            Container class for posted files
             </summary>
-            <param name="socket">Accepted socket</param>
-            <returns>true if connection can be accepted; otherwise false.</returns>
         </member>
-        <member name="M:HttpServer.HttpListenerBase.Start(System.Int32)">
+        <member name="M:HttpServer.HttpFile.#ctor(System.String,System.String,System.String,System.String)">
             <summary>
-            Start listen for new connections
+            Creates a container for a posted file
             </summary>
-            <param name="backlog">Number of connections that can stand in a queue to be accepted.</param>
-            <exception cref="T:System.InvalidOperationException">Listener have already been started.</exception>
+            <param name="name">The identifier of the post field</param>
+            <param name="filename">The file path</param>
+            <param name="contentType">The content type of the file</param>
+            <param name="uploadFilename">The name of the file uploaded</param>
+            <exception cref="T:System.ArgumentNullException">If any parameter is null or empty</exception>
         </member>
-        <member name="M:HttpServer.HttpListenerBase.Stop">
+        <member name="M:HttpServer.HttpFile.#ctor(System.String,System.String,System.String)">
             <summary>
-            Stop the listener
+            Creates a container for a posted file <see cref="M:HttpServer.HttpFile.#ctor(System.String,System.String,System.String,System.String)"/>
             </summary>
-            <exception cref="T:System.Net.Sockets.SocketException"></exception>
+            <exception cref="T:System.ArgumentNullException">If any parameter is null or empty</exception>
         </member>
-        <member name="P:HttpServer.HttpListenerBase.LogWriter">
+        <member name="M:HttpServer.HttpFile.Finalize">
+            <summary>Destructor disposing the file</summary>
+        </member>
+        <member name="M:HttpServer.HttpFile.Dispose(System.Boolean)">
             <summary>
-            Gives you a change to receive log entries for all internals of the HTTP library.
+            Deletes the temporary file
             </summary>
-            <remarks>
-            You may not switch log writer after starting the listener.
-            </remarks>
+            <param name="disposing">True if manual dispose</param>
         </member>
-        <member name="P:HttpServer.HttpListenerBase.UseTraceLogs">
+        <member name="M:HttpServer.HttpFile.Dispose">
             <summary>
-            True if we should turn on trace logs.
+            Disposing interface, cleans up managed resources (the temporary file) and suppresses finalization
             </summary>
         </member>
-        <member name="E:HttpServer.HttpListenerBase.ExceptionThrown">
+        <member name="P:HttpServer.HttpFile.Name">
             <summary>
-            Catch exceptions not handled by the listener.
+            The name/id of the file
             </summary>
-            <remarks>
-            Exceptions will be thrown during debug mode if this event is not used,
-            exceptions will be printed to console and suppressed during release mode.
-            </remarks>
         </member>
-        <member name="E:HttpServer.HttpListenerBase.RequestReceived">
+        <member name="P:HttpServer.HttpFile.Filename">
             <summary>
-            A request have been received from a <see cref="T:HttpServer.IHttpClientContext"/>.
+            The full file path
             </summary>
         </member>
-        <member name="T:HttpServer.FormDecoders.MultipartDecoder">
+        <member name="P:HttpServer.HttpFile.UploadFilename">
             <summary>
-            
+            The name of the uploaded file
+            </summary>
+        </member>
+        <member name="P:HttpServer.HttpFile.ContentType">
+            <summary>
+            The type of file
+            </summary>
+        </member>
+        <member name="T:HttpServer.FormDecoders.XmlDecoder">
+            <summary>
+            This decoder converts XML documents to form items.
+            Each element becomes a subitem in the form, and each attribute becomes an item.
             </summary>
+            <example>
+            // xml: <hello id="1">something<world id="2">data</world></hello>
+            // result: 
+            // form["hello"].Value = "something"
+            // form["hello"]["id"].Value = 1
+            // form["hello"]["world]["id"].Value = 1
+            // form["hello"]["world"].Value = "data"
+            </example>
             <remarks>
-            http://www.faqs.org/rfcs/rfc1867.html
+            The original xml document is stored in form["__xml__"].Value.
             </remarks>
         </member>
         <member name="T:HttpServer.FormDecoders.IFormDecoder">
@@ -780,257 +920,237 @@
             <param name="contentType">Content type (with any additional info like boundry). Content type is always supplied in lower case.</param>
             <returns>True if the decoder can parse the specified content type</returns>
         </member>
-        <member name="F:HttpServer.FormDecoders.MultipartDecoder.MimeType">
-            <summary>
-            multipart/form-data
-            </summary>
-        </member>
-        <member name="F:HttpServer.FormDecoders.MultipartDecoder.FormData">
-            <summary>
-            form-data
-            </summary>
-        </member>
-        <member name="M:HttpServer.FormDecoders.MultipartDecoder.Decode(System.IO.Stream,System.String,System.Text.Encoding)">
+        <member name="M:HttpServer.FormDecoders.XmlDecoder.Decode(System.IO.Stream,System.String,System.Text.Encoding)">
             <summary>
             
             </summary>
             <param name="stream">Stream containing the content</param>
             <param name="contentType">Content type (with any additional info like boundry). Content type is always supplied in lower case</param>
-            <param name="encoding">Stream enconding</param>
+            <param name="encoding">Stream encoding</param>
+            Note: contentType and encoding are not used?
             <returns>A http form, or null if content could not be parsed.</returns>
-            <exception cref="T:System.IO.InvalidDataException">If contents in the stream is not valid input data.</exception>
-            <exception cref="T:System.ArgumentNullException">If any parameter is null</exception>
+            <exception cref="T:System.IO.InvalidDataException"></exception>
         </member>
-        <member name="M:HttpServer.FormDecoders.MultipartDecoder.CanParse(System.String)">
+        <member name="M:HttpServer.FormDecoders.XmlDecoder.TraverseNode(HttpServer.IHttpInput,System.Xml.XmlNode)">
+            <summary>
+            Recursive function that will go through an xml element and store it's content 
+            to the form item.
+            </summary>
+            <param name="item">(parent) Item in form that content should be added to.</param>
+            <param name="node">Node that should be parsed.</param>
+        </member>
+        <member name="M:HttpServer.FormDecoders.XmlDecoder.CanParse(System.String)">
             <summary>
             Checks if the decoder can handle the mime type
             </summary>
             <param name="contentType">Content type (with any additional info like boundry). Content type is always supplied in lower case.</param>
             <returns>True if the decoder can parse the specified content type</returns>
         </member>
-        <member name="T:HttpServer.Exceptions.NotFoundException">
+        <member name="T:HttpServer.Helpers.ObjectForm">
             <summary>
-            The requested resource was not found in the web server.
+            The object form class takes an object and creates form items for it.
             </summary>
         </member>
-        <member name="M:HttpServer.Exceptions.NotFoundException.#ctor(System.String,System.Exception)">
+        <member name="M:HttpServer.Helpers.ObjectForm.#ctor(System.String,System.String,System.Object,System.String)">
             <summary>
-            Create a new exception
+            Initializes a new instance of the <see cref="T:HttpServer.Helpers.ObjectForm"/> class.
             </summary>
-            <param name="message">message describing the error</param>
-            <param name="inner">inner exception</param>
+            <param name="method"></param>
+            <param name="name">form name *and* id.</param>
+            <param name="action">action to do when form is posted.</param>
+            <param name="obj"></param>
         </member>
-        <member name="M:HttpServer.Exceptions.NotFoundException.#ctor(System.String)">
+        <member name="M:HttpServer.Helpers.ObjectForm.#ctor(System.String,System.String,System.Object)">
             <summary>
-            Create a new exception
+            Initializes a new instance of the <see cref="T:HttpServer.Helpers.ObjectForm"/> class.
             </summary>
-            <param name="message">message describing the error</param>
+            <param name="name">form name *and* id.</param>
+            <param name="action">action to do when form is posted.</param>
+            <param name="obj">object to get values from</param>
         </member>
-        <member name="T:HttpServer.Authentication.AuthenticationHandler">
+        <member name="M:HttpServer.Helpers.ObjectForm.#ctor(System.String,System.Object)">
             <summary>
-            Delegate used to let authentication modules authenticate the user name and password.
+            Initializes a new instance of the <see cref="T:HttpServer.Helpers.ObjectForm"/> class.
             </summary>
-            <param name="realm">Realm that the user want to authenticate in</param>
-            <param name="userName">User name specified by client</param>
-            <param name="token">Can either be user password or implementation specific token.</param>
-            <param name="login">object that will be stored in a session variable called <see cref="F:HttpServer.Authentication.AuthenticationModule.AuthenticationTag"/> if authentication was successful.</param>
-            <exception cref="T:HttpServer.Exceptions.ForbiddenException">throw forbidden exception if too many attempts have been made.</exception>
-            <remarks>
-            <para>
-            Use <see cref="P:HttpServer.Authentication.DigestAuthentication.TokenIsHA1"/> to specify that the token is a HA1 token. (MD5 generated
-            string from realm, user name and password); Md5String(userName + ":" + realm + ":" + password);
-            </para>
-            </remarks>
+            <param name="action">form action.</param>
+            <param name="obj">object to get values from.</param>
         </member>
-        <member name="T:HttpServer.Authentication.AuthenticationRequiredHandler">
+        <member name="M:HttpServer.Helpers.ObjectForm.Begin">
             <summary>
-            Let's you decide on a system level if authentication is required.
+            write out the FORM-tag.
             </summary>
-            <param name="request">HTTP request from client</param>
-            <returns>true if user should be authenticated.</returns>
-            <remarks>throw <see cref="T:HttpServer.Exceptions.ForbiddenException"/> if no more attempts are allowed.</remarks>
-            <exception cref="T:HttpServer.Exceptions.ForbiddenException">If no more attempts are allowed</exception>
+            <returns>generated html code</returns>
         </member>
-        <member name="T:HttpServer.Authentication.AuthenticationModule">
+        <member name="M:HttpServer.Helpers.ObjectForm.Begin(System.Boolean)">
             <summary>
-            Authentication modules are used to implement different
-            kind of HTTP authentication.
+            Writeout the form tag
             </summary>
+            <param name="isAjax">form should be posted through ajax.</param>
+            <returns>generated html code</returns>
         </member>
-        <member name="F:HttpServer.Authentication.AuthenticationModule.AuthenticationTag">
+        <member name="M:HttpServer.Helpers.ObjectForm.Tb(System.String,System.Object[])">
             <summary>
-            Tag used for authentication.
+            Generates a text box.
             </summary>
+            <param name="propertyName"></param>
+            <param name="options"></param>
+            <returns>generated html code</returns>
         </member>
-        <member name="M:HttpServer.Authentication.AuthenticationModule.#ctor(HttpServer.Authentication.AuthenticationHandler,HttpServer.Authentication.AuthenticationRequiredHandler)">
+        <member name="M:HttpServer.Helpers.ObjectForm.Pb(System.String,System.Object[])">
             <summary>
-            Initializes a new instance of the <see cref="T:HttpServer.Authentication.AuthenticationModule"/> class.
+            password box
             </summary>
-            <param name="authenticator">Delegate used to provide information used during authentication.</param>
-            <param name="authenticationRequiredHandler">Delegate used to determine if authentication is required (may be null).</param>
+            <param name="propertyName"></param>
+            <param name="options"></param>
+            <returns>generated html code</returns>
         </member>
-        <member name="M:HttpServer.Authentication.AuthenticationModule.#ctor(HttpServer.Authentication.AuthenticationHandler)">
+        <member name="M:HttpServer.Helpers.ObjectForm.Hidden(System.String,System.Object[])">
             <summary>
-            Initializes a new instance of the <see cref="T:HttpServer.Authentication.AuthenticationModule"/> class.
+            Hiddens the specified property name.
             </summary>
-            <param name="authenticator">Delegate used to provide information used during authentication.</param>
+            <param name="propertyName">Name of the property.</param>
+            <param name="options">The options.</param>
+            <returns>generated html code</returns>
         </member>
-        <member name="M:HttpServer.Authentication.AuthenticationModule.CreateResponse(System.String,System.Object[])">
+        <member name="M:HttpServer.Helpers.ObjectForm.Label(System.String,System.String)">
             <summary>
-            Create a response that can be sent in the WWW-Authenticate header.
+            Labels the specified property name.
             </summary>
-            <param name="realm">Realm that the user should authenticate in</param>
-            <param name="options">Array with optional options.</param>
-            <returns>A correct authentication request.</returns>
-            <exception cref="T:System.ArgumentNullException">If realm is empty or null.</exception>
+            <param name="propertyName">property in object.</param>
+            <param name="label">caption</param>
+            <returns>generated html code</returns>
         </member>
-        <member name="M:HttpServer.Authentication.AuthenticationModule.Authenticate(System.String,System.String,System.String,System.Object[])">
+        <member name="M:HttpServer.Helpers.ObjectForm.Cb(System.String,System.String,System.Object[])">
             <summary>
-            An authentication response have been received from the web browser.
-            Check if it's correct
+            Generate a checkbox
             </summary>
-            <param name="authenticationHeader">Contents from the Authorization header</param>
-            <param name="realm">Realm that should be authenticated</param>
-            <param name="httpVerb">GET/POST/PUT/DELETE etc.</param>
-            <param name="options">options to specific implementations</param>
-            <returns>Authentication object that is stored for the request. A user class or something like that.</returns>
-            <exception cref="T:System.ArgumentException">if <paramref name="authenticationHeader"/> is invalid</exception>
-            <exception cref="T:System.ArgumentNullException">If any of the parameters is empty or null.</exception>
-        </member>
-        <member name="M:HttpServer.Authentication.AuthenticationModule.CheckAuthentication(System.String,System.String,System.String@,System.Object@)">
+            <param name="propertyName">property in object</param>
+            <param name="value">checkbox value</param>
+            <param name="options">additional html attributes.</param>
+            <returns>generated html code</returns>
+        </member>
+        <member name="M:HttpServer.Helpers.ObjectForm.Select(System.String,System.String,System.String,System.Object[])">
             <summary>
-            Used to invoke the authentication delegate that is used to lookup the user name/realm.
+            Write a html select tag
             </summary>
-            <param name="realm">Realm (domain) that user want to authenticate in</param>
-            <param name="userName">User name</param>
-            <param name="password">Password used for validation. Some implementations got password in clear text, they are then sent to client.</param>
-            <param name="login">object that will be stored in the request to help you identify the user if authentication was successful.</param>
-            <returns>true if authentication was successful</returns>
+            <param name="propertyName">object property.</param>
+            <param name="idColumn">id column</param>
+            <param name="titleColumn">The title column.</param>
+            <param name="options">The options.</param>
+            <returns></returns>
         </member>
-        <member name="M:HttpServer.Authentication.AuthenticationModule.AuthenticationRequired(HttpServer.IHttpRequest)">
+        <member name="M:HttpServer.Helpers.ObjectForm.Select(System.String,System.Collections.IEnumerable,System.String,System.String,System.Object[])">
             <summary>
-            Determines if authentication is required.
+            Selects the specified property name.
             </summary>
-            <param name="request">HTTP request from browser</param>
-            <returns>true if user should be authenticated.</returns>
-            <remarks>throw <see cref="T:HttpServer.Exceptions.ForbiddenException"/> from your delegate if no more attempts are allowed.</remarks>
-            <exception cref="T:HttpServer.Exceptions.ForbiddenException">If no more attempts are allowed</exception>
+            <param name="propertyName">Name of the property.</param>
+            <param name="items">The items.</param>
+            <param name="idColumn">The id column.</param>
+            <param name="titleColumn">The title column.</param>
+            <param name="options">The options.</param>
+            <returns></returns>
         </member>
-        <member name="P:HttpServer.Authentication.AuthenticationModule.Name">
+        <member name="M:HttpServer.Helpers.ObjectForm.Submit(System.String)">
             <summary>
-            name used in HTTP request.
+            Write a submit tag.
             </summary>
+            <param name="value">button caption</param>
+            <returns>html submit tag</returns>
         </member>
-        <member name="T:HttpServer.HttpInput">
+        <member name="M:HttpServer.Helpers.ObjectForm.End">
             <summary>
-            Contains some kind of input from the browser/client.
-            can be QueryString, form data or any other request body content.
+            html end form tag
             </summary>
+            <returns>html</returns>
         </member>
-        <member name="T:HttpServer.IHttpInput">
+        <member name="T:HttpServer.FormDecoders.MultipartDecoder">
             <summary>
-            Base class for request data containers
+            
             </summary>
+            <remarks>
+            http://www.faqs.org/rfcs/rfc1867.html
+            </remarks>
         </member>
-        <member name="M:HttpServer.IHttpInput.Add(System.String,System.String)">
+        <member name="F:HttpServer.FormDecoders.MultipartDecoder.MimeType">
             <summary>
-            Adds a parameter mapped to the presented name
+            multipart/form-data
             </summary>
-            <param name="name">The name to map the parameter to</param>
-            <param name="value">The parameter value</param>
         </member>
-        <member name="M:HttpServer.IHttpInput.Contains(System.String)">
+        <member name="F:HttpServer.FormDecoders.MultipartDecoder.FormData">
             <summary>
-            Returns true if the container contains the requested parameter
+            form-data
             </summary>
-            <param name="name">Parameter id</param>
-            <returns>True if parameter exists</returns>
         </member>
-        <member name="P:HttpServer.IHttpInput.Item(System.String)">
+        <member name="M:HttpServer.FormDecoders.MultipartDecoder.Decode(System.IO.Stream,System.String,System.Text.Encoding)">
             <summary>
-            Returns a request parameter
+            
             </summary>
-            <param name="name">The name associated with the parameter</param>
-            <returns></returns>
-        </member>
-        <member name="F:HttpServer.HttpInput.Empty">
-            <summary> Representation of a non-initialized class instance </summary>
-        </member>
-        <member name="F:HttpServer.HttpInput._ignoreChanges">
-            <summary> Variable telling the class that it is non-initialized <see cref="F:HttpServer.HttpInput.Empty"/> </summary>
+            <param name="stream">Stream containing the content</param>
+            <param name="contentType">Content type (with any additional info like boundry). Content type is always supplied in lower case</param>
+            <param name="encoding">Stream enconding</param>
+            <returns>A http form, or null if content could not be parsed.</returns>
+            <exception cref="T:System.IO.InvalidDataException">If contents in the stream is not valid input data.</exception>
+            <exception cref="T:System.ArgumentNullException">If any parameter is null</exception>
         </member>
-        <member name="M:HttpServer.HttpInput.#ctor(System.String)">
+        <member name="M:HttpServer.FormDecoders.MultipartDecoder.CanParse(System.String)">
             <summary>
-            Initializes a new instance of the <see cref="T:HttpServer.HttpInput"/> class.
+            Checks if the decoder can handle the mime type
             </summary>
-            <param name="name">form name.</param>
+            <param name="contentType">Content type (with any additional info like boundry). Content type is always supplied in lower case.</param>
+            <returns>True if the decoder can parse the specified content type</returns>
         </member>
-        <member name="M:HttpServer.HttpInput.#ctor(System.String,System.Boolean)">
+        <member name="T:HttpServer.Exceptions.BadRequestException">
             <summary>
-            Initializes a new instance of the <see cref="T:HttpServer.HttpInput"/> class.
+            The request could not be understood by the server due to malformed syntax. 
+            The client SHOULD NOT repeat the request without modifications.
+            
+            Text taken from: http://www.submissionchamber.com/help-guides/error-codes.php
             </summary>
-            <param name="name">form name.</param>
-            <param name="ignoreChanges">if set to <c>true</c> all changes will be ignored. </param>
-            <remarks>this constructor should only be used by Empty</remarks>
-        </member>
-        <member name="M:HttpServer.HttpInput.#ctor(HttpServer.HttpInput)">
-            <summary>Creates a deep copy of the HttpInput class</summary>
-            <param name="input">The object to copy</param>
-            <remarks>The function makes a deep copy of quite a lot which can be slow</remarks>
         </member>
-        <member name="M:HttpServer.HttpInput.Add(System.String,System.String)">
+        <member name="M:HttpServer.Exceptions.BadRequestException.#ctor(System.String)">
             <summary>
-            Add a new element. Form array elements are parsed
-            and added in a correct hierarchy.
+            Create a new bad request exception.
             </summary>
-            <param name="name">Name is converted to lower case.</param>
-            <param name="value"></param>
-            <exception cref="T:System.ArgumentNullException"><c>name</c> is null.</exception>
-            <exception cref="T:System.InvalidOperationException">Cannot add stuff to <see cref="F:HttpServer.HttpInput.Empty"/>.</exception>
+            <param name="errMsg">reason to why the request was bad.</param>
         </member>
-        <member name="M:HttpServer.HttpInput.Contains(System.String)">
+        <member name="M:HttpServer.Exceptions.BadRequestException.#ctor(System.String,System.Exception)">
             <summary>
-            Returns true if the class contains a <see cref="T:HttpServer.HttpInput"/> with the corresponding name.
+            Create a new bad request exception.
             </summary>
-            <param name="name">The field/query string name</param>
-            <returns>True if the value exists</returns>
+            <param name="errMsg">reason to why the request was bad.</param>
+            <param name="inner">inner exception</param>
         </member>
-        <member name="M:HttpServer.HttpInput.ParseItem(System.String,System.String)">
+        <member name="T:HttpServer.ResponseCookies">
             <summary>
-            Parses an item and returns it.
-            This function is primarily used to parse array items as in user[name].
+            Cookies that should be set.
             </summary>
-            <param name="name"></param>
-            <param name="value"></param>
-            <returns></returns>
         </member>
-        <member name="M:HttpServer.HttpInput.ToString">
-            <summary> Outputs the instance representing all its values joined together </summary>
-            <returns></returns>
+        <member name="M:HttpServer.ResponseCookies.Add(HttpServer.ResponseCookie)">
+            <summary>
+            Adds a cookie in the collection.
+            </summary>
+            <param name="cookie">cookie to add</param>
+            <exception cref="T:System.ArgumentNullException">cookie is null</exception>
         </member>
-        <member name="M:HttpServer.HttpInput.ToString(System.Boolean)">
-            <summary>Returns all items as an unescaped query string.</summary>
-            <returns></returns>
+        <member name="M:HttpServer.ResponseCookies.Add(HttpServer.RequestCookie,System.DateTime)">
+            <summary>
+            Copy a request cookie
+            </summary>
+            <param name="cookie"></param>
+            <param name="expires">When the cookie should expire</param>
         </member>
-        <member name="M:HttpServer.HttpInput.ExtractOne(System.String)">
+        <member name="M:HttpServer.ResponseCookies.GetEnumerator">
             <summary>
-            Extracts one parameter from an array
+            Gets a collection enumerator on the cookie list.
             </summary>
-            <param name="value">Containing the string array</param>
-            <returns>All but the first value</returns>
-            <example>
-            string test1 = ExtractOne("system[user][extension][id]");
-            string test2 = ExtractOne(test1);
-            string test3 = ExtractOne(test2);
-            // test1 = user[extension][id]
-            // test2 = extension[id]
-            // test3 = id
-            </example>
+            <returns>collection enumerator</returns>
         </member>
-        <member name="M:HttpServer.HttpInput.Clear">
-            <summary>Resets all data contained by class</summary>
+        <member name="M:HttpServer.ResponseCookies.Clear">
+            <summary>
+            Remove all cookies
+            </summary>
         </member>
-        <member name="M:HttpServer.HttpInput.System#Collections#Generic#IEnumerable{HttpServer#HttpInputItem}#GetEnumerator">
+        <member name="M:HttpServer.ResponseCookies.System#Collections#Generic#IEnumerable{HttpServer#ResponseCookie}#GetEnumerator">
             <summary>
             Returns an enumerator that iterates through the collection.
             </summary>
@@ -1040,2593 +1160,2516 @@
             </returns>
             <filterpriority>1</filterpriority>
         </member>
-        <member name="M:HttpServer.HttpInput.GetEnumerator">
+        <member name="P:HttpServer.ResponseCookies.Count">
             <summary>
-            Returns an enumerator that iterates through a collection.
+            Gets the count of cookies in the collection.
             </summary>
-            
-            <returns>
-            An <see cref="T:System.Collections.IEnumerator"></see> object that can be used to iterate through the collection.
-            </returns>
-            <filterpriority>2</filterpriority>
         </member>
-        <member name="P:HttpServer.HttpInput.Name">
+        <member name="P:HttpServer.ResponseCookies.Item(System.String)">
             <summary>
-            Form name as lower case
+            Gets the cookie of a given identifier (null if not existing).
             </summary>
         </member>
-        <member name="P:HttpServer.HttpInput.Item(System.String)">
+        <member name="T:HttpServer.ResponseCookie">
             <summary>
-            Get a form item.
+            cookie being sent back to the browser.
             </summary>
-            <param name="name"></param>
-            <returns>Returns <see cref="F:HttpServer.HttpInputItem.Empty"/> if item was not found.</returns>
+            <seealso cref="T:HttpServer.ResponseCookie"/>
         </member>
-        <member name="T:HttpServer.Check">
+        <member name="T:HttpServer.RequestCookie">
             <summary>
-            Small design by contract implementation.
+            cookie sent by the client/browser
             </summary>
+            <seealso cref="T:HttpServer.ResponseCookie"/>
         </member>
-        <member name="M:HttpServer.Check.NotEmpty(System.String,System.String)">
+        <member name="M:HttpServer.RequestCookie.#ctor(System.String,System.String)">
             <summary>
-            Check whether a parameter is empty.
+            Constructor.
             </summary>
-            <param name="value">Parameter value</param>
-            <param name="parameterOrErrorMessage">Parameter name, or error description.</param>
-            <exception cref="T:System.ArgumentException">value is empty.</exception>
+            <param name="id">cookie identifier</param>
+            <param name="content">cookie content</param>
+            <exception cref="T:System.ArgumentNullException">id or content is null</exception>
+            <exception cref="T:System.ArgumentException">id is empty</exception>
         </member>
-        <member name="M:HttpServer.Check.Require(System.Object,System.String)">
+        <member name="M:HttpServer.RequestCookie.ToString">
             <summary>
-            Checks whether a parameter is null.
+            Gets the cookie HTML representation.
             </summary>
-            <param name="value">Parameter value</param>
-            <param name="parameterOrErrorMessage">Parameter name, or error description.</param>
-            <exception cref="T:System.ArgumentNullException">value is null.</exception>
+            <returns>cookie string</returns>
         </member>
-        <member name="M:HttpServer.Check.Min(System.Int32,System.Object,System.String)">
+        <member name="P:HttpServer.RequestCookie.Name">
             <summary>
-            Checks whether a parameter is null.
+            Gets the cookie identifier.
             </summary>
-            <param name="minValue"></param>
-            <param name="value">Parameter value</param>
-            <param name="parameterOrErrorMessage">Parameter name, or error description.</param>
-            <exception cref="T:System.ArgumentException">value is null.</exception>
         </member>
-        <member name="T:HttpServer.Method">
+        <member name="P:HttpServer.RequestCookie.Value">
             <summary>
-            Contains all HTTP Methods (according to the HTTP 1.1 specification)
-            <para>
-            See: http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html
-            </para>
+            Cookie value. Set to null to remove cookie.
             </summary>
         </member>
-        <member name="F:HttpServer.Method.Delete">
+        <member name="M:HttpServer.ResponseCookie.#ctor(System.String,System.String,System.DateTime)">
             <summary>
-            The DELETE method requests that the origin server delete the resource identified by the Request-URI.
+            Constructor.
             </summary>
-            <remarks>
-            <para>
-            This method MAY be overridden by human intervention (or other means) on the origin server. 
-            The client cannot be guaranteed that the operation has been carried out, even if the status code 
-            returned from the origin server indicates that the action has been completed successfully. 
-            </para>
-            <para>
-            However, the server SHOULD NOT indicate success unless, at the time the response is given, 
-            it intends to delete the resource or move it to an inaccessible location.
-            </para>
-            <para>
-            A successful response SHOULD be 200 (OK) if the response includes an entity describing the status, 
-            202 (Accepted) if the action has not yet been enacted, 
-            or 204 (No Content) if the action has been enacted but the response does not include an entity.
-            </para>
-            <para>
-            If the request passes through a cache and the Request-URI identifies one or more currently cached entities, 
-            those entries SHOULD be treated as stale. Responses to this method are not cacheable. 
-            </para>
-            </remarks>
-        </member>
-        <member name="F:HttpServer.Method.Get">
-            <summary>
-            The GET method means retrieve whatever information (in the form of an entity) is identified by the Request-URI.
-            </summary>
-            <remarks>
-            <para>
-            If the Request-URI refers to a data-producing process, it is the produced data which shall be returned as the 
-            entity in the response and not the source text of the process, unless that text happens to be the output of the process.
-            </para>
-            <para>
-            The semantics of the GET method change to a "conditional GET" if the request message includes an 
-            If-Modified-Since, If-Unmodified-Since, If-Match, If-None-Match, or If-Range header field. 
-            A conditional GET method requests that the entity be transferred only under the circumstances described 
-            by the conditional header field(s). The conditional GET method is intended to reduce unnecessary network 
-            usage by allowing cached entities to be refreshed without requiring multiple requests or transferring 
-            data already held by the client.
-            </para>
-            </remarks>
-        </member>
-        <member name="F:HttpServer.Method.Header">
-            <summary>
-            The HEAD method is identical to GET except that the server MUST NOT return a message-body in the response. 
-            </summary>
-            <remarks>
-            The meta information contained in the HTTP headers in response to a HEAD request SHOULD be identical to the
-             information sent in response to a GET request. This method can be used for obtaining meta information about 
-            the entity implied by the request without transferring the entity-body itself. 
-            
-            This method is often used for testing hypertext links for validity, accessibility, and recent modification.
-            </remarks>
-        </member>
-        <member name="F:HttpServer.Method.Options">
-            <summary>
-            <para>The OPTIONS method represents a request for information about the communication options available on the request/response chain identified by the Request-URI.</para>
-            </summary>
-            <remarks>
-            <para>This method allows the client to determine the options and/or requirements associated with a resource, or the capabilities of a server, without implying a resource action or initiating a resource retrieval.</para>
-            </remarks>
-        </member>
-        <member name="F:HttpServer.Method.Post">
-            <summary>
-            The POST method is used to request that the origin server accept the entity enclosed 
-            in the request as a new subordinate of the resource identified by the Request-URI in the Request-Line.
-            </summary>
-            <remarks>
-            POST is designed to allow a uniform method to cover the following functions:
-            <list type="bullet">
-            <item>
-            Annotation of existing resources;
-            </item><item>
-            Posting a message to a bulletin board, newsgroup, mailing list, or similar group of articles;
-            </item><item>
-            Providing a block of data, such as the result of submitting a form, to a data-handling process;
-            </item><item>
-            Extending a database through an append operation.
-            </item>
-            </list>
-            <para>
-            If a resource has been created on the origin server, the response SHOULD be 201 (Created) and 
-            contain an entity which describes the status of the request and refers to the new resource, and a 
-            Location header (see section 14.30).
-            </para>
-            <para>
-             The action performed by the POST method might not result in a resource that can be identified by a URI. 
-            In this case, either 200 (OK) or 204 (No Content) is the appropriate response status, depending on 
-            whether or not the response includes an entity that describes the result.
-            </para><para>
-            Responses to this method are not cacheable, unless the response includes appropriate Cache-Control 
-            or Expires header fields. However, the 303 (See Other) response can be used to direct the user agent 
-            to retrieve a cacheable resource. 
-            </para>
-            </remarks>
-        </member>
-        <member name="F:HttpServer.Method.Put">
-            <summary>
-            The PUT method requests that the enclosed entity be stored under the supplied Request-URI.
-            </summary>
-            <remarks>
-            <list type="bullet">
-            <item>
-            If the Request-URI refers to an already existing resource, the enclosed entity SHOULD be considered as a 
-            modified version of the one residing on the origin server. 
-            </item><item>
-            If the Request-URI does not point to an existing resource, and that URI is capable of being defined as a new 
-            resource by the requesting user agent, the origin server can create the resource with that URI. 
-            </item><item>
-            If a new resource is created, the origin server MUST inform the user agent via the 201 (Created) response. 
-            </item><item>
-            If an existing resource is modified, either the 200 (OK) or 204 (No Content) response codes SHOULD be sent to 
-            indicate successful completion of the request. 
-            </item><item>
-            If the resource could not be created or modified with the Request-URI, an appropriate error response SHOULD be 
-            given that reflects the nature of the problem. 
-            </item>
-            </list>
-            <para>
-            The recipient of the entity MUST NOT ignore any Content-* (e.g. Content-Range) headers that it does not 
-            understand or implement and MUST return a 501 (Not Implemented) response in such cases.
-            </para>
-            </remarks>
+            <param name="id">cookie identifier</param>
+            <param name="content">cookie content</param>
+            <param name="expiresAt">cookie expiration date. Use DateTime.MinValue for session cookie.</param>
+            <exception cref="T:System.ArgumentNullException">id or content is null</exception>
+            <exception cref="T:System.ArgumentException">id is empty</exception>
         </member>
-        <member name="F:HttpServer.Method.Trace">
+        <member name="M:HttpServer.ResponseCookie.#ctor(System.String,System.String,System.DateTime,System.String,System.String)">
             <summary>
-            The TRACE method is used to invoke a remote, application-layer loop- back of the request message.
+            Create a new cookie
             </summary>
+            <param name="name">name identifying the cookie</param>
+            <param name="value">cookie value</param>
+            <param name="expires">when the cookie expires. Setting DateTime.MinValue will delete the cookie when the session is closed.</param>
+            <param name="path">Path to where the cookie is valid</param>
+            <param name="domain">Domain that the cookie is valid for.</param>
         </member>
-        <member name="T:HttpServer.Methods">
+        <member name="M:HttpServer.ResponseCookie.#ctor(HttpServer.RequestCookie,System.DateTime)">
             <summary>
-            Contains all HTTP Methods (according to the HTTP 1.1 specification)
-            <para>
-            See: http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html
-            </para>
+            Create a new cookie
             </summary>
+            <param name="cookie">Name and value will be used</param>
+            <param name="expires">when the cookie expires.</param>
         </member>
-        <member name="F:HttpServer.Methods.Delete">
+        <member name="M:HttpServer.ResponseCookie.ToString">
             <summary>
-            The DELETE method requests that the origin server delete the resource identified by the Request-URI.
+            Gets the cookie HTML representation.
             </summary>
-            <remarks>
-            <para>
-            This method MAY be overridden by human intervention (or other means) on the origin server. 
-            The client cannot be guaranteed that the operation has been carried out, even if the status code 
-            returned from the origin server indicates that the action has been completed successfully. 
-            </para>
-            <para>
-            However, the server SHOULD NOT indicate success unless, at the time the response is given, 
-            it intends to delete the resource or move it to an inaccessible location.
-            </para>
-            <para>
-            A successful response SHOULD be 200 (OK) if the response includes an entity describing the status, 
-            202 (Accepted) if the action has not yet been enacted, 
-            or 204 (No Content) if the action has been enacted but the response does not include an entity.
-            </para>
-            <para>
-            If the request passes through a cache and the Request-URI identifies one or more currently cached entities, 
-            those entries SHOULD be treated as stale. Responses to this method are not cacheable. 
-            </para>
-            </remarks>
+            <returns>cookie string</returns>
         </member>
-        <member name="F:HttpServer.Methods.Get">
+        <member name="P:HttpServer.ResponseCookie.Expires">
             <summary>
-            The GET method means retrieve whatever information (in the form of an entity) is identified by the Request-URI.
+            When the cookie expires.
+            DateTime.MinValue means that the cookie expires when the session do so.
             </summary>
-            <remarks>
-            <para>
-            If the Request-URI refers to a data-producing process, it is the produced data which shall be returned as the 
-            entity in the response and not the source text of the process, unless that text happens to be the output of the process.
-            </para>
-            <para>
-            The semantics of the GET method change to a "conditional GET" if the request message includes an 
-            If-Modified-Since, If-Unmodified-Since, If-Match, If-None-Match, or If-Range header field. 
-            A conditional GET method requests that the entity be transferred only under the circumstances described 
-            by the conditional header field(s). The conditional GET method is intended to reduce unnecessary network 
-            usage by allowing cached entities to be refreshed without requiring multiple requests or transferring 
-            data already held by the client.
-            </para>
-            </remarks>
         </member>
-        <member name="F:HttpServer.Methods.Header">
+        <member name="P:HttpServer.ResponseCookie.Path">
             <summary>
-            The HEAD method is identical to GET except that the server MUST NOT return a message-body in the response. 
+            Cookie is only valid under this path.
             </summary>
-            <remarks>
-            The meta information contained in the HTTP headers in response to a HEAD request SHOULD be identical to the
-             information sent in response to a GET request. This method can be used for obtaining meta information about 
-            the entity implied by the request without transferring the entity-body itself. 
-            
-            This method is often used for testing hypertext links for validity, accessibility, and recent modification.
-            </remarks>
         </member>
-        <member name="F:HttpServer.Methods.Options">
+        <member name="T:HttpServer.IComponentProvider">
             <summary>
-            <para>The OPTIONS method represents a request for information about the communication options available on the request/response chain identified by the Request-URI.</para>
+            Inversion of control interface.
             </summary>
-            <remarks>
-            <para>This method allows the client to determine the options and/or requirements associated with a resource, or the capabilities of a server, without implying a resource action or initiating a resource retrieval.</para>
-            </remarks>
         </member>
-        <member name="F:HttpServer.Methods.Post">
+        <member name="M:HttpServer.IComponentProvider.AddInstance``1(System.Object)">
             <summary>
-            The POST method is used to request that the origin server accept the entity enclosed 
-            in the request as a new subordinate of the resource identified by the Request-URI in the Request-Line.
+            Add a component instance
             </summary>
-            <remarks>
-            POST is designed to allow a uniform method to cover the following functions:
-            <list type="bullet">
-            <item>
-            Annotation of existing resources;
-            </item><item>
-            Posting a message to a bulletin board, newsgroup, mailing list, or similar group of articles;
-            </item><item>
-            Providing a block of data, such as the result of submitting a form, to a data-handling process;
-            </item><item>
-            Extending a database through an append operation.
-            </item>
-            </list>
-            <para>
-            If a resource has been created on the origin server, the response SHOULD be 201 (Created) and 
-            contain an entity which describes the status of the request and refers to the new resource, and a 
-            Location header (see section 14.30).
-            </para>
-            <para>
-             The action performed by the POST method might not result in a resource that can be identified by a URI. 
-            In this case, either 200 (OK) or 204 (No Content) is the appropriate response status, depending on 
-            whether or not the response includes an entity that describes the result.
-            </para><para>
-            Responses to this method are not cacheable, unless the response includes appropriate Cache-Control 
-            or Expires header fields. However, the 303 (See Other) response can be used to direct the user agent 
-            to retrieve a cacheable resource. 
-            </para>
-            </remarks>
+            <typeparam name="T">Interface type</typeparam>
+            <param name="instance">Instance to add</param>
         </member>
-        <member name="F:HttpServer.Methods.Put">
+        <member name="M:HttpServer.IComponentProvider.Get``1">
             <summary>
-            The PUT method requests that the enclosed entity be stored under the supplied Request-URI.
+            Get a component.
             </summary>
+            <typeparam name="T">Interface type</typeparam>
+            <returns>Component if registered, otherwise null.</returns>
             <remarks>
-            <list type="bullet">
-            <item>
-            If the Request-URI refers to an already existing resource, the enclosed entity SHOULD be considered as a 
-            modified version of the one residing on the origin server. 
-            </item><item>
-            If the Request-URI does not point to an existing resource, and that URI is capable of being defined as a new 
-            resource by the requesting user agent, the origin server can create the resource with that URI. 
-            </item><item>
-            If a new resource is created, the origin server MUST inform the user agent via the 201 (Created) response. 
-            </item><item>
-            If an existing resource is modified, either the 200 (OK) or 204 (No Content) response codes SHOULD be sent to 
-            indicate successful completion of the request. 
-            </item><item>
-            If the resource could not be created or modified with the Request-URI, an appropriate error response SHOULD be 
-            given that reflects the nature of the problem. 
-            </item>
-            </list>
-            <para>
-            The recipient of the entity MUST NOT ignore any Content-* (e.g. Content-Range) headers that it does not 
-            understand or implement and MUST return a 501 (Not Implemented) response in such cases.
-            </para>
+            Component will get created if needed.
             </remarks>
         </member>
-        <member name="F:HttpServer.Methods.Trace">
-            <summary>
-            The TRACE method is used to invoke a remote, application-layer loop- back of the request message.
-            </summary>
-        </member>
-        <member name="T:HttpServer.LogPrio">
-            <summary>
-            Priority for log entries
-            </summary>
-            <seealso cref="T:HttpServer.ILogWriter"/>
-        </member>
-        <member name="F:HttpServer.LogPrio.Trace">
-            <summary>
-            Very detailed logs to be able to follow the flow of the program.
-            </summary>
-        </member>
-        <member name="F:HttpServer.LogPrio.Debug">
-            <summary>
-            Logs to help debug errors in the application
-            </summary>
-        </member>
-        <member name="F:HttpServer.LogPrio.Info">
+        <member name="M:HttpServer.IComponentProvider.Contains(System.Type)">
             <summary>
-            Information to be able to keep track of state changes etc.
+            Checks if the specified component interface have been added.
             </summary>
+            <param name="interfaceType"></param>
+            <returns>true if found; otherwise false.</returns>
         </member>
-        <member name="F:HttpServer.LogPrio.Warning">
+        <member name="M:HttpServer.IComponentProvider.Add``2">
             <summary>
-            Something did not go as we expected, but it's no problem.
+            Add a component.
             </summary>
+            <typeparam name="InterfaceType">Type being requested.</typeparam>
+            <typeparam name="InstanceType">Type being created.</typeparam>
         </member>
-        <member name="F:HttpServer.LogPrio.Error">
+        <member name="T:HttpServer.HttpListenerBase">
             <summary>
-            Something that should not fail failed, but we can still keep
-            on going.
+            Contains a listener that doesn't do anything with the connections.
             </summary>
         </member>
-        <member name="F:HttpServer.LogPrio.Fatal">
+        <member name="M:HttpServer.HttpListenerBase.#ctor(System.Net.IPAddress,System.Int32,HttpServer.IHttpContextFactory)">
             <summary>
-            Something failed, and we cannot handle it properly.
+            Listen for regular HTTP connections
             </summary>
+            <param name="address">IP Address to accept connections on</param>
+            <param name="port">TCP Port to listen on, default HTTP port is 80.</param>
+            <param name="factory">Factory used to create <see cref="T:HttpServer.IHttpClientContext"/>es.</param>
+            <exception cref="T:System.ArgumentNullException"><c>address</c> is null.</exception>
+            <exception cref="T:System.ArgumentException">Port must be a positive number.</exception>
         </member>
-        <member name="T:HttpServer.ILogWriter">
+        <member name="M:HttpServer.HttpListenerBase.#ctor(System.Net.IPAddress,System.Int32,HttpServer.IHttpContextFactory,System.Security.Cryptography.X509Certificates.X509Certificate)">
             <summary>
-            Interface used to write to log files.
+            Initializes a new instance of the <see cref="T:HttpServer.HttpListenerBase"/> class.
             </summary>
+            <param name="address">IP Address to accept connections on</param>
+            <param name="port">TCP Port to listen on, default HTTPS port is 443</param>
+            <param name="factory">Factory used to create <see cref="T:HttpServer.IHttpClientContext"/>es.</param>
+            <param name="certificate">Certificate to use</param>
         </member>
-        <member name="M:HttpServer.ILogWriter.Write(System.Object,HttpServer.LogPrio,System.String)">
+        <member name="M:HttpServer.HttpListenerBase.#ctor(System.Net.IPAddress,System.Int32,HttpServer.IHttpContextFactory,System.Security.Cryptography.X509Certificates.X509Certificate,System.Security.Authentication.SslProtocols)">
             <summary>
-            Write an entry to the log file.
+            Initializes a new instance of the <see cref="T:HttpServer.HttpListenerBase"/> class.
             </summary>
-            <param name="source">object that is writing to the log</param>
-            <param name="priority">importance of the log message</param>
-            <param name="message">the message</param>
+            <param name="address">IP Address to accept connections on</param>
+            <param name="port">TCP Port to listen on, default HTTPS port is 443</param>
+            <param name="factory">Factory used to create <see cref="T:HttpServer.IHttpClientContext"/>es.</param>
+            <param name="certificate">Certificate to use</param>
+            <param name="protocol">which HTTPS protocol to use, default is TLS.</param>
         </member>
-        <member name="T:HttpServer.ConsoleLogWriter">
-            <summary>
-            This class writes to the console. It colors the output depending on the logprio and includes a 3-level stacktrace (in debug mode)
-            </summary>
-            <seealso cref="T:HttpServer.ILogWriter"/>
+        <member name="M:HttpServer.HttpListenerBase.OnAccept(System.IAsyncResult)">
+            <exception cref="T:System.Exception"><c>Exception</c>.</exception>
         </member>
-        <member name="F:HttpServer.ConsoleLogWriter.Instance">
+        <member name="M:HttpServer.HttpListenerBase.RetryBeginAccept">
             <summary>
-            The actual instance of this class.
+            Will try to accept connections one more time.
             </summary>
+            <exception cref="T:System.Exception">If any exceptions is thrown.</exception>
         </member>
-        <member name="M:HttpServer.ConsoleLogWriter.Write(System.Object,HttpServer.LogPrio,System.String)">
+        <member name="M:HttpServer.HttpListenerBase.OnAcceptingSocket(System.Net.Sockets.Socket)">
             <summary>
-            Logwriters the specified source.
+            Can be used to create filtering of new connections.
             </summary>
-            <param name="source">object that wrote the logentry.</param>
-            <param name="prio">Importance of the log message</param>
-            <param name="message">The message.</param>
+            <param name="socket">Accepted socket</param>
+            <returns>true if connection can be accepted; otherwise false.</returns>
         </member>
-        <member name="M:HttpServer.ConsoleLogWriter.GetColor(HttpServer.LogPrio)">
+        <member name="M:HttpServer.HttpListenerBase.Start(System.Int32)">
             <summary>
-            Get color for the specified logprio
+            Start listen for new connections
             </summary>
-            <param name="prio">prio for the log entry</param>
-            <returns>A <see cref="T:System.ConsoleColor"/> for the prio</returns>
+            <param name="backlog">Number of connections that can stand in a queue to be accepted.</param>
+            <exception cref="T:System.InvalidOperationException">Listener have already been started.</exception>
         </member>
-        <member name="T:HttpServer.NullLogWriter">
+        <member name="M:HttpServer.HttpListenerBase.Stop">
             <summary>
-            Default log writer, writes everything to null (nowhere).
+            Stop the listener
             </summary>
-            <seealso cref="T:HttpServer.ILogWriter"/>
+            <exception cref="T:System.Net.Sockets.SocketException"></exception>
         </member>
-        <member name="F:HttpServer.NullLogWriter.Instance">
+        <member name="P:HttpServer.HttpListenerBase.LogWriter">
             <summary>
-            The logging instance.
+            Gives you a change to receive log entries for all internals of the HTTP library.
             </summary>
+            <remarks>
+            You may not switch log writer after starting the listener.
+            </remarks>
         </member>
-        <member name="M:HttpServer.NullLogWriter.Write(System.Object,HttpServer.LogPrio,System.String)">
+        <member name="P:HttpServer.HttpListenerBase.UseTraceLogs">
             <summary>
-            Writes everything to null
+            True if we should turn on trace logs.
             </summary>
-            <param name="source">object that wrote the log entry.</param>
-            <param name="prio">Importance of the log message</param>
-            <param name="message">The message.</param>
         </member>
-        <member name="T:HttpServer.IComponentProvider">
+        <member name="E:HttpServer.HttpListenerBase.ExceptionThrown">
             <summary>
-            Inversion of control interface.
+            Catch exceptions not handled by the listener.
             </summary>
+            <remarks>
+            Exceptions will be thrown during debug mode if this event is not used,
+            exceptions will be printed to console and suppressed during release mode.
+            </remarks>
         </member>
-        <member name="M:HttpServer.IComponentProvider.AddInstance``1(System.Object)">
+        <member name="E:HttpServer.HttpListenerBase.RequestReceived">
             <summary>
-            Add a component instance
+            A request have been received from a <see cref="T:HttpServer.IHttpClientContext"/>.
             </summary>
-            <typeparam name="T">Interface type</typeparam>
-            <param name="instance">Instance to add</param>
         </member>
-        <member name="M:HttpServer.IComponentProvider.Get``1">
+        <member name="T:HttpServer.HttpListener">
             <summary>
-            Get a component.
+            New implementation of the HTTP listener.
             </summary>
-            <typeparam name="T">Interface type</typeparam>
-            <returns>Component if registered, otherwise null.</returns>
             <remarks>
-            Component will get created if needed.
+            Use the <c>Create</c> methods to create a default listener.
             </remarks>
         </member>
-        <member name="M:HttpServer.IComponentProvider.Contains(System.Type)">
+        <member name="M:HttpServer.HttpListener.#ctor(System.Net.IPAddress,System.Int32,HttpServer.IHttpContextFactory)">
             <summary>
-            Checks if the specified component interface have been added.
+            Initializes a new instance of the <see cref="T:HttpServer.HttpListener"/> class.
             </summary>
-            <param name="interfaceType"></param>
-            <returns>true if found; otherwise false.</returns>
+            <param name="address">IP Address to accept connections on</param>
+            <param name="port">TCP Port to listen on, default HTTP port is 80.</param>
+            <param name="factory">Factory used to create <see cref="T:HttpServer.IHttpClientContext"/>es.</param>
+            <exception cref="T:System.ArgumentNullException"><c>address</c> is null.</exception>
+            <exception cref="T:System.ArgumentException">Port must be a positive number.</exception>
         </member>
-        <member name="M:HttpServer.IComponentProvider.Add``2">
+        <member name="M:HttpServer.HttpListener.#ctor(System.Net.IPAddress,System.Int32,HttpServer.IHttpContextFactory,System.Security.Cryptography.X509Certificates.X509Certificate)">
             <summary>
-            Add a component.
+            Initializes a new instance of the <see cref="T:HttpServer.HttpListener"/> class.
             </summary>
-            <typeparam name="InterfaceType">Type being requested.</typeparam>
-            <typeparam name="InstanceType">Type being created.</typeparam>
+            <param name="address">The address.</param>
+            <param name="port">The port.</param>
+            <param name="factory">The factory.</param>
+            <param name="certificate">The certificate.</param>
         </member>
-        <member name="T:HttpServer.HttpParam">
+        <member name="M:HttpServer.HttpListener.#ctor(System.Net.IPAddress,System.Int32,HttpServer.IHttpContextFactory,System.Security.Cryptography.X509Certificates.X509Certificate,System.Security.Authentication.SslProtocols)">
             <summary>
-            Returns item either from a form or a query string (checks them in that order)
+            Initializes a new instance of the <see cref="T:HttpServer.HttpListener"/> class.
             </summary>
+            <param name="address">The address.</param>
+            <param name="port">The port.</param>
+            <param name="factory">The factory.</param>
+            <param name="certificate">The certificate.</param>
+            <param name="protocol">The protocol.</param>
         </member>
-        <member name="F:HttpServer.HttpParam.Empty">
-            <summary> Representation of a non-initialized HttpParam </summary>
-        </member>
-        <member name="M:HttpServer.HttpParam.#ctor(HttpServer.IHttpInput,HttpServer.IHttpInput)">
-            <summary>Initialises the class to hold a value either from a post request or a querystring request</summary>		
-        </member>
-        <member name="M:HttpServer.HttpParam.Add(System.String,System.String)">
+        <member name="M:HttpServer.HttpListener.Create(System.Net.IPAddress,System.Int32)">
             <summary>
-            The add method is not availible for HttpParam
-            since HttpParam checks both Request.Form and Request.QueryString
+            Creates a new <see cref="T:HttpServer.HttpListener"/> instance with default factories.
             </summary>
-            <param name="name">name identifying the value</param>
-            <param name="value">value to add</param>
-            <exception cref="T:System.NotImplementedException"></exception>
+            <param name="address">Address that the listener should accept connections on.</param>
+            <param name="port">Port that listener should accept connections on.</param>
+            <returns>Created HTTP listener.</returns>
         </member>
-        <member name="M:HttpServer.HttpParam.Contains(System.String)">
+        <member name="M:HttpServer.HttpListener.Create(System.Net.IPAddress,System.Int32,System.Security.Cryptography.X509Certificates.X509Certificate)">
             <summary>
-            Checks whether the form or querystring has the specified value
+            Creates a new <see cref="T:HttpServer.HttpListener"/> instance with default factories.
             </summary>
-            <param name="name">Name, case sensitive</param>
-            <returns>true if found; otherwise false.</returns>
+            <param name="address">Address that the listener should accept connections on.</param>
+            <param name="port">Port that listener should accept connections on.</param>
+            <param name="certificate">Certificate to use</param>
+            <returns>Created HTTP listener.</returns>
         </member>
-        <member name="M:HttpServer.HttpParam.System#Collections#Generic#IEnumerable{HttpServer#HttpInputItem}#GetEnumerator">
+        <member name="M:HttpServer.HttpListener.Create(System.Net.IPAddress,System.Int32,System.Security.Cryptography.X509Certificates.X509Certificate,System.Security.Authentication.SslProtocols)">
             <summary>
-            Returns an enumerator that iterates through the collection.
+            Creates a new <see cref="T:HttpServer.HttpListener"/> instance with default factories.
             </summary>
-            
-            <returns>
-            A <see cref="T:System.Collections.Generic.IEnumerator`1"></see> that can be used to iterate through the collection.
-            </returns>
-            <filterpriority>1</filterpriority>
+            <param name="address">Address that the listener should accept connections on.</param>
+            <param name="port">Port that listener should accept connections on.</param>
+            <param name="certificate">Certificate to use</param>
+            <param name="protocol">which HTTPS protocol to use, default is TLS.</param>
+            <returns>Created HTTP listener.</returns>
         </member>
-        <member name="M:HttpServer.HttpParam.GetEnumerator">
+        <member name="M:HttpServer.HttpListener.OnAcceptingSocket(System.Net.Sockets.Socket)">
             <summary>
-            Returns an enumerator that iterates through a collection.
+            Can be used to create filtering of new connections.
             </summary>
-            
+            <param name="socket">Accepted socket</param>
             <returns>
-            An <see cref="T:System.Collections.IEnumerator"></see> object that can be used to iterate through the collection.
+            true if connection can be accepted; otherwise false.
             </returns>
-            <filterpriority>2</filterpriority>
         </member>
-        <member name="P:HttpServer.HttpParam.Item(System.String)">
+        <member name="E:HttpServer.HttpListener.Accepted">
             <summary>
-            Fetch an item from the form or querystring (in that order).
+            A client have been accepted, but not handled, by the listener.
             </summary>
-            <param name="name"></param>
-            <returns>Item if found; otherwise HttpInputItem.EmptyLanguageNode</returns>
-        </member>
-        <member name="T:HttpServer.HttpForm">
-            <summary>Container for posted form data</summary>
-        </member>
-        <member name="F:HttpServer.HttpForm.EmptyForm">
-            <summary>Instance to help mark a non-initialized form</summary>
-        </member>
-        <member name="M:HttpServer.HttpForm.#ctor">
-            <summary>Initializes a form container with the specified name</summary>
         </member>
-        <member name="M:HttpServer.HttpForm.#ctor(HttpServer.HttpInput)">
+        <member name="T:HttpServer.Rules.RedirectRule">
             <summary>
-            Makes a deep copy of the input
+            redirects from one URL to another.
             </summary>
-            <param name="input">The input to copy</param>
         </member>
-        <member name="M:HttpServer.HttpForm.AddFile(HttpServer.HttpFile)">
+        <member name="T:HttpServer.Rules.IRule">
             <summary>
-            Adds a file to the collection of posted files
+            Rules are used to perform operations before a request is being handled.
+            Rules can be used to create routing etc.
             </summary>
-            <param name="file">The file to add</param>
-            <exception cref="T:System.ArgumentException">If the file is already added</exception>
-            <exception cref="T:System.ArgumentNullException">If file is null</exception>
-            <exception cref="T:System.InvalidOperationException">If the instance is HttpForm.EmptyForm which cannot be modified</exception>
         </member>
-        <member name="M:HttpServer.HttpForm.ContainsFile(System.String)">
+        <member name="M:HttpServer.Rules.IRule.Process(HttpServer.IHttpRequest,HttpServer.IHttpResponse)">
             <summary>
-            Checks if the form contains a specified file
+            Process the incoming request.
             </summary>
-            <param name="name">Field name of the file parameter</param>
-            <returns>True if the file exists</returns>
-            <exception cref="T:System.InvalidOperationException">If the instance is HttpForm.EmptyForm which cannot be modified</exception>
+            <param name="request">incoming HTTP request</param>
+            <param name="response">outgoing HTTP response</param>
+            <returns>true if response should be sent to the browser directly (no other rules or modules will be processed).</returns>
+            <remarks>
+            returning true means that no modules will get the request. Returning true is typically being done
+            for redirects.
+            </remarks>
+            <exception cref="T:System.ArgumentNullException">If request or response is null.</exception>
         </member>
-        <member name="M:HttpServer.HttpForm.GetFile(System.String)">
+        <member name="M:HttpServer.Rules.RedirectRule.#ctor(System.String,System.String)">
             <summary>
-            Retrieves a file held by by the form
+            Initializes a new instance of the <see cref="T:HttpServer.Rules.RedirectRule"/> class.
             </summary>
-            <param name="name">The identifier of the file</param>
-            <returns>The requested file or null if the file was not found</returns>
-            <exception cref="T:System.ArgumentNullException">If name is null or empty</exception>
-            <exception cref="T:System.InvalidOperationException">If the instance is HttpForm.EmptyForm which cannot be modified</exception>
-        </member>
-        <member name="M:HttpServer.HttpForm.Clear">
-            <summary>Disposes all held HttpFile's and resets values</summary>
+            <param name="fromUrl">Absolute path (no server name)</param>
+            <param name="toUrl">Absolute path (no server name)</param>
+            <example>
+            server.Add(new RedirectRule("/", "/user/index"));
+            </example>
         </member>
-        <member name="P:HttpServer.HttpForm.Files">
+        <member name="M:HttpServer.Rules.RedirectRule.#ctor(System.String,System.String,System.Boolean)">
             <summary>
-            Retrieves the number of files added to the <see cref="T:HttpServer.HttpForm"/>
+            Initializes a new instance of the <see cref="T:HttpServer.Rules.RedirectRule"/> class.
             </summary>
-            <returns>0 if no files are added</returns>
+            <param name="fromUrl">Absolute path (no server name)</param>
+            <param name="toUrl">Absolute path (no server name)</param>
+            <param name="shouldRedirect">true if request should be redirected, false if the request URI should be replaced.</param>
+            <example>
+            server.Add(new RedirectRule("/", "/user/index"));
+            </example>
         </member>
-        <member name="T:HttpServer.Helpers.ObjectForm">
+        <member name="M:HttpServer.Rules.RedirectRule.Process(HttpServer.IHttpRequest,HttpServer.IHttpResponse)">
             <summary>
-            The object form class takes an object and creates form items for it.
+            Process the incoming request.
             </summary>
+            <param name="request">incoming HTTP request</param>
+            <param name="response">outgoing HTTP response</param>
+            <returns>true if response should be sent to the browser directly (no other rules or modules will be processed).</returns>
+            <remarks>
+            returning true means that no modules will get the request. Returning true is typically being done
+            for redirects.
+            </remarks>
         </member>
-        <member name="M:HttpServer.Helpers.ObjectForm.#ctor(System.String,System.String,System.Object,System.String)">
+        <member name="P:HttpServer.Rules.RedirectRule.FromUrl">
             <summary>
-            Initializes a new instance of the <see cref="T:HttpServer.Helpers.ObjectForm"/> class.
+            Gets string to match request URI with.
             </summary>
-            <param name="method"></param>
-            <param name="name">form name *and* id.</param>
-            <param name="action">action to do when form is posted.</param>
-            <param name="obj"></param>
+            <remarks>Is compared to request.Uri.AbsolutePath</remarks>
         </member>
-        <member name="M:HttpServer.Helpers.ObjectForm.#ctor(System.String,System.String,System.Object)">
+        <member name="P:HttpServer.Rules.RedirectRule.ToUrl">
             <summary>
-            Initializes a new instance of the <see cref="T:HttpServer.Helpers.ObjectForm"/> class.
+            Gets where to redirect.
             </summary>
-            <param name="name">form name *and* id.</param>
-            <param name="action">action to do when form is posted.</param>
-            <param name="obj">object to get values from</param>
         </member>
-        <member name="M:HttpServer.Helpers.ObjectForm.#ctor(System.String,System.Object)">
+        <member name="P:HttpServer.Rules.RedirectRule.ShouldRedirect">
             <summary>
-            Initializes a new instance of the <see cref="T:HttpServer.Helpers.ObjectForm"/> class.
+            Gets whether server should redirect client.
             </summary>
-            <param name="action">form action.</param>
-            <param name="obj">object to get values from.</param>
+            <remarks>
+            <c>false</c> means that the rule will replace
+            the current request URI with the new one from this class.
+            <c>true</c> means that a redirect response is sent to the client.
+            </remarks>
         </member>
-        <member name="M:HttpServer.Helpers.ObjectForm.Begin">
+        <member name="T:HttpServer.Parser.HttpRequestParser">
             <summary>
-            write out the FORM-tag.
+            Parses a HTTP request directly from a stream
             </summary>
-            <returns>generated html code</returns>
         </member>
-        <member name="M:HttpServer.Helpers.ObjectForm.Begin(System.Boolean)">
+        <member name="T:HttpServer.IHttpRequestParser">
             <summary>
-            Writeout the form tag
+            Event driven parser used to parse incoming HTTP requests.
             </summary>
-            <param name="isAjax">form should be posted through ajax.</param>
-            <returns>generated html code</returns>
+            <remarks>
+            The parser supports partial messages and keeps the states between
+            each parsed buffer. It's therefore important that the parser gets
+            <see cref="M:HttpServer.IHttpRequestParser.Clear"/>ed if a client disconnects.
+            </remarks>
         </member>
-        <member name="M:HttpServer.Helpers.ObjectForm.Tb(System.String,System.Object[])">
+        <member name="M:HttpServer.IHttpRequestParser.Parse(System.Byte[],System.Int32,System.Int32)">
             <summary>
-            Generates a text box.
+            Parse partial or complete message.
             </summary>
-            <param name="propertyName"></param>
-            <param name="options"></param>
-            <returns>generated html code</returns>
+            <param name="buffer">buffer containing incoming bytes</param>
+            <param name="offset">where in buffer that parsing should start</param>
+            <param name="count">number of bytes to parse</param>
+            <returns>Unparsed bytes left in buffer.</returns>
+            <exception cref="T:HttpServer.Exceptions.BadRequestException"><c>BadRequestException</c>.</exception>
         </member>
-        <member name="M:HttpServer.Helpers.ObjectForm.Pb(System.String,System.Object[])">
+        <member name="M:HttpServer.IHttpRequestParser.Clear">
             <summary>
-            password box
+            Clear parser state.
             </summary>
-            <param name="propertyName"></param>
-            <param name="options"></param>
-            <returns>generated html code</returns>
         </member>
-        <member name="M:HttpServer.Helpers.ObjectForm.Hidden(System.String,System.Object[])">
+        <member name="P:HttpServer.IHttpRequestParser.CurrentState">
             <summary>
-            Hiddens the specified property name.
+            Current state in parser.
             </summary>
-            <param name="propertyName">Name of the property.</param>
-            <param name="options">The options.</param>
-            <returns>generated html code</returns>
         </member>
-        <member name="M:HttpServer.Helpers.ObjectForm.Label(System.String,System.String)">
+        <member name="E:HttpServer.IHttpRequestParser.RequestCompleted">
             <summary>
-            Labels the specified property name.
+            A request have been successfully parsed.
             </summary>
-            <param name="propertyName">property in object.</param>
-            <param name="label">caption</param>
-            <returns>generated html code</returns>
         </member>
-        <member name="M:HttpServer.Helpers.ObjectForm.Cb(System.String,System.String,System.Object[])">
+        <member name="E:HttpServer.IHttpRequestParser.BodyBytesReceived">
             <summary>
-            Generate a checkbox
+            More body bytes have been received.
             </summary>
-            <param name="propertyName">property in object</param>
-            <param name="value">checkbox value</param>
-            <param name="options">additional html attributes.</param>
-            <returns>generated html code</returns>
         </member>
-        <member name="M:HttpServer.Helpers.ObjectForm.Select(System.String,System.String,System.String,System.Object[])">
+        <member name="E:HttpServer.IHttpRequestParser.RequestLineReceived">
             <summary>
-            Write a html select tag
+            Request line have been received.
             </summary>
-            <param name="propertyName">object property.</param>
-            <param name="idColumn">id column</param>
-            <param name="titleColumn">The title column.</param>
-            <param name="options">The options.</param>
-            <returns></returns>
         </member>
-        <member name="M:HttpServer.Helpers.ObjectForm.Select(System.String,System.Collections.IEnumerable,System.String,System.String,System.Object[])">
+        <member name="E:HttpServer.IHttpRequestParser.HeaderReceived">
             <summary>
-            Selects the specified property name.
+            A header have been received.
             </summary>
-            <param name="propertyName">Name of the property.</param>
-            <param name="items">The items.</param>
-            <param name="idColumn">The id column.</param>
-            <param name="titleColumn">The title column.</param>
-            <param name="options">The options.</param>
-            <returns></returns>
         </member>
-        <member name="M:HttpServer.Helpers.ObjectForm.Submit(System.String)">
+        <member name="P:HttpServer.IHttpRequestParser.LogWriter">
             <summary>
-            Write a submit tag.
+            Gets or sets the log writer.
             </summary>
-            <param name="value">button caption</param>
-            <returns>html submit tag</returns>
         </member>
-        <member name="M:HttpServer.Helpers.ObjectForm.End">
+        <member name="M:HttpServer.Parser.HttpRequestParser.#ctor(HttpServer.ILogWriter)">
             <summary>
-            html end form tag
+            Create a new request parser
             </summary>
-            <returns>html</returns>
+            <param name="logWriter">delegate receiving log entries.</param>
         </member>
-        <member name="T:HttpServer.FormDecoders.FormDecoderProvider">
+        <member name="M:HttpServer.Parser.HttpRequestParser.AddToBody(System.Byte[],System.Int32,System.Int32)">
             <summary>
-            This provider is used to let us implement any type of form decoding we want without
-            having to rewrite anything else in the server.
+            Add a number of bytes to the body
             </summary>
+            <param name="buffer">buffer containing more body bytes.</param>
+            <param name="offset">starting offset in buffer</param>
+            <param name="count">number of bytes, from offset, to read.</param>
+            <returns>offset to continue from.</returns>
         </member>
-        <member name="M:HttpServer.FormDecoders.FormDecoderProvider.Decode(System.String,System.IO.Stream,System.Text.Encoding)">
+        <member name="M:HttpServer.Parser.HttpRequestParser.Clear">
             <summary>
-            
+            Remove all state information for the request.
             </summary>
-            <param name="contentType">Should contain boundary and type, as in: multipart/form-data; boundary=---------------------------230051238959</param>
-            <param name="stream">Stream containing form data.</param>
-            <param name="encoding">Encoding used when decoding the stream</param>
-            <returns><see cref="F:HttpServer.HttpInput.Empty"/> if no parser was found.</returns>
-            <exception cref="T:System.ArgumentException">If stream is null or not readable.</exception>
-            <exception cref="T:System.IO.InvalidDataException">If stream contents cannot be decoded properly.</exception>
         </member>
-        <member name="M:HttpServer.FormDecoders.FormDecoderProvider.Add(HttpServer.FormDecoders.IFormDecoder)">
+        <member name="M:HttpServer.Parser.HttpRequestParser.OnFirstLine(System.String)">
             <summary>
-            Add a decoder.
+            Parse request line
             </summary>
-            <param name="decoder"></param>
-            <exception cref="T:System.ArgumentNullException"></exception>
+            <param name="value"></param>
+            <exception cref="T:HttpServer.Exceptions.BadRequestException">If line is incorrect</exception>
+            <remarks>Expects the following format: "Method SP Request-URI SP HTTP-Version CRLF"</remarks>
         </member>
-        <member name="P:HttpServer.FormDecoders.FormDecoderProvider.Count">
+        <member name="M:HttpServer.Parser.HttpRequestParser.OnHeader(System.String,System.String)">
             <summary>
-            Number of added decoders.
+            We've parsed a new header.
             </summary>
+            <param name="name">Name in lower case</param>
+            <param name="value">Value, unmodified.</param>
+            <exception cref="T:HttpServer.Exceptions.BadRequestException">If content length cannot be parsed.</exception>
         </member>
-        <member name="P:HttpServer.FormDecoders.FormDecoderProvider.Decoders">
+        <member name="M:HttpServer.Parser.HttpRequestParser.Parse(System.Byte[],System.Int32,System.Int32)">
             <summary>
-            Use with care.
+            Parse a message
             </summary>
+            <param name="buffer">bytes to parse.</param>
+            <param name="offset">where in buffer that parsing should start</param>
+            <param name="count">number of bytes to parse, starting on <paramref name="offset"/>.</param>
+            <returns>offset (where to start parsing next).</returns>
+            <exception cref="T:HttpServer.Exceptions.BadRequestException"><c>BadRequestException</c>.</exception>
         </member>
-        <member name="P:HttpServer.FormDecoders.FormDecoderProvider.DefaultDecoder">
+        <member name="P:HttpServer.Parser.HttpRequestParser.LogWriter">
             <summary>
-            Decoder used for unknown content types.
+            Gets or sets the log writer.
             </summary>
         </member>
-        <member name="T:HttpServer.ExceptionHandler">
+        <member name="P:HttpServer.Parser.HttpRequestParser.CurrentState">
             <summary>
-            We dont want to let the server to die due to exceptions thrown in worker threads.
-            therefore we use this delegate to give you a change to handle uncaught exceptions.
+            Current state in parser.
             </summary>
-            <param name="source">Class that the exception was thrown in.</param>
-            <param name="exception">Exception</param>
-            <remarks>
-            Server will throw a InternalServerException in release version if you dont
-            handle this delegate.
-            </remarks>
         </member>
-        <member name="T:HttpServer.HttpClientContext">
+        <member name="E:HttpServer.Parser.HttpRequestParser.RequestCompleted">
             <summary>
-            Contains a connection to a browser/client.
+            A request have been successfully parsed.
             </summary>
-            <remarks>
-            Remember to <see cref="M:HttpServer.HttpClientContext.Start"/> after you have hooked the <see cref="E:HttpServer.HttpClientContext.RequestReceived"/> event.
-            </remarks>
-            TODO: Maybe this class should be broken up into HttpClientChannel and HttpClientContext?
         </member>
-        <member name="M:HttpServer.HttpClientContext.#ctor(System.Boolean,System.Net.IPEndPoint,System.IO.Stream,HttpServer.IRequestParserFactory,System.Int32,System.Net.Sockets.Socket)">
+        <member name="E:HttpServer.Parser.HttpRequestParser.BodyBytesReceived">
             <summary>
-            Initializes a new instance of the <see cref="T:HttpServer.HttpClientContext"/> class.
+            More body bytes have been received.
             </summary>
-            <param name="secured">true if the connection is secured (SSL/TLS)</param>
-            <param name="remoteEndPoint">client that connected.</param>
-            <param name="stream">Stream used for communication</param>
-            <param name="parserFactory">Used to create a <see cref="T:HttpServer.IHttpRequestParser"/>.</param>
-            <param name="bufferSize">Size of buffer to use when reading data. Must be at least 4096 bytes.</param>
-            <exception cref="T:System.Net.Sockets.SocketException">If <see cref="M:System.Net.Sockets.Socket.BeginReceive(System.Byte[],System.Int32,System.Int32,System.Net.Sockets.SocketFlags,System.AsyncCallback,System.Object)"/> fails</exception>
-            <exception cref="T:System.ArgumentException">Stream must be writable and readable.</exception>
         </member>
-        <member name="M:HttpServer.HttpClientContext.OnBodyBytesReceived(System.Object,HttpServer.Parser.BodyEventArgs)">
+        <member name="E:HttpServer.Parser.HttpRequestParser.RequestLineReceived">
             <summary>
-            Process incoming body bytes.
+            Request line have been received.
             </summary>
-            <param name="sender"><see cref="T:HttpServer.IHttpRequestParser"/></param>
-            <param name="e">Bytes</param>
         </member>
-        <member name="M:HttpServer.HttpClientContext.OnHeaderReceived(System.Object,HttpServer.Parser.HeaderEventArgs)">
+        <member name="E:HttpServer.Parser.HttpRequestParser.HeaderReceived">
             <summary>
-            
+            A header have been received.
             </summary>
-            <param name="sender"></param>
-            <param name="e"></param>
         </member>
-        <member name="M:HttpServer.HttpClientContext.Start">
+        <member name="T:HttpServer.IHttpRequest">
             <summary>
-            Start reading content.
+            Contains server side HTTP request information.
             </summary>
-            <remarks>
-            Make sure to call base.Start() if you override this method.
-            </remarks>
         </member>
-        <member name="M:HttpServer.HttpClientContext.Cleanup">
+        <member name="M:HttpServer.IHttpRequest.AddHeader(System.String,System.String)">
             <summary>
-            Clean up context.
-            </summary>
-            <remarks>
-            Make sure to call base.Cleanup() if you override the method.
-            </remarks>
+            Called during parsing of a <see cref="T:HttpServer.IHttpRequest"/>.
+            </summary>
+            <param name="name">Name of the header, should not be URL encoded</param>
+            <param name="value">Value of the header, should not be URL encoded</param>
+            <exception cref="T:HttpServer.Exceptions.BadRequestException">If a header is incorrect.</exception>
         </member>
-        <member name="M:HttpServer.HttpClientContext.Disconnect(System.Net.Sockets.SocketError)">
+        <member name="M:HttpServer.IHttpRequest.AddToBody(System.Byte[],System.Int32,System.Int32)">
             <summary>
-            Disconnect from client
+            Add bytes to the body
             </summary>
-            <param name="error">error to report in the <see cref="E:HttpServer.HttpClientContext.Disconnected"/> event.</param>
+            <param name="bytes">buffer to read bytes from</param>
+            <param name="offset">where to start read</param>
+            <param name="length">number of bytes to read</param>
+            <returns>Number of bytes actually read (same as length unless we got all body bytes).</returns>
+            <exception cref="T:System.InvalidOperationException">If body is not writable</exception>
+            <exception cref="T:System.ArgumentNullException"><c>bytes</c> is null.</exception>
+            <exception cref="T:System.ArgumentOutOfRangeException"><c>offset</c> is out of range.</exception>
         </member>
-        <member name="M:HttpServer.HttpClientContext.Respond(System.String,System.Net.HttpStatusCode,System.String,System.String,System.String)">
+        <member name="M:HttpServer.IHttpRequest.Clear">
             <summary>
-            Send a response.
+            Clear everything in the request
             </summary>
-            <param name="httpVersion">Either <see cref="F:HttpServer.HttpHelper.HTTP10"/> or <see cref="F:HttpServer.HttpHelper.HTTP11"/></param>
-            <param name="statusCode">HTTP status code</param>
-            <param name="reason">reason for the status code.</param>
-            <param name="body">HTML body contents, can be null or empty.</param>
-            <param name="contentType">A content type to return the body as, i.e. 'text/html' or 'text/plain', defaults to 'text/html' if null or empty</param>
-            <exception cref="T:System.ArgumentException">If <paramref name="httpVersion"/> is invalid.</exception>
         </member>
-        <member name="M:HttpServer.HttpClientContext.Respond(System.String,System.Net.HttpStatusCode,System.String)">
+        <member name="M:HttpServer.IHttpRequest.DecodeBody(HttpServer.FormDecoders.FormDecoderProvider)">
             <summary>
-            Send a response.
+            Decode body into a form.
             </summary>
-            <param name="httpVersion">Either <see cref="F:HttpServer.HttpHelper.HTTP10"/> or <see cref="F:HttpServer.HttpHelper.HTTP11"/></param>
-            <param name="statusCode">HTTP status code</param>
-            <param name="reason">reason for the status code.</param>
+            <param name="providers">A list with form decoders.</param>
+            <exception cref="T:System.IO.InvalidDataException">If body contents is not valid for the chosen decoder.</exception>
+            <exception cref="T:System.InvalidOperationException">If body is still being transferred.</exception>
         </member>
-        <member name="M:HttpServer.HttpClientContext.Respond(System.String)">
+        <member name="M:HttpServer.IHttpRequest.SetCookies(HttpServer.RequestCookies)">
             <summary>
-            Send a response.
+            Sets the cookies.
             </summary>
-            <exception cref="T:System.ArgumentNullException"></exception>
+            <param name="cookies">The cookies.</param>
         </member>
-        <member name="M:HttpServer.HttpClientContext.Send(System.Byte[])">
+        <member name="M:HttpServer.IHttpRequest.CreateResponse(HttpServer.IHttpClientContext)">
             <summary>
-            send a whole buffer
+            Create a response object.
             </summary>
-            <param name="buffer">buffer to send</param>
-            <exception cref="T:System.ArgumentNullException"></exception>
+            <param name="context">Context for the connected client.</param>
+            <returns>A new <see cref="T:HttpServer.IHttpResponse"/>.</returns>
         </member>
-        <member name="M:HttpServer.HttpClientContext.Send(System.Byte[],System.Int32,System.Int32)">
+        <member name="P:HttpServer.IHttpRequest.AcceptTypes">
             <summary>
-            Send data using the stream
+            Gets kind of types accepted by the client.
             </summary>
-            <param name="buffer">Contains data to send</param>
-            <param name="offset">Start position in buffer</param>
-            <param name="size">number of bytes to send</param>
-            <exception cref="T:System.ArgumentNullException"></exception>
-            <exception cref="T:System.ArgumentOutOfRangeException"></exception>
         </member>
-        <member name="E:HttpServer.HttpClientContext.Cleaned">
+        <member name="P:HttpServer.IHttpRequest.Body">
             <summary>
-            This context have been cleaned, which means that it can be reused.
+            Gets or sets body stream.
             </summary>
         </member>
-        <member name="E:HttpServer.HttpClientContext.Started">
+        <member name="P:HttpServer.IHttpRequest.BodyIsComplete">
             <summary>
-            Context have been started (a new client have connected)
+            Gets whether the body is complete.
             </summary>
         </member>
-        <member name="P:HttpServer.HttpClientContext.CurrentRequest">
+        <member name="P:HttpServer.IHttpRequest.Connection">
             <summary>
-            Overload to specify own type.
+            Gets or sets kind of connection used for the session.
             </summary>
-            <remarks>
-            Must be specified before the context is being used.
-            </remarks>
         </member>
-        <member name="P:HttpServer.HttpClientContext.Secured">
+        <member name="P:HttpServer.IHttpRequest.ContentLength">
             <summary>
-            Using SSL or other encryption method.
+            Gets or sets number of bytes in the body.
             </summary>
         </member>
-        <member name="P:HttpServer.HttpClientContext.IsSecured">
+        <member name="P:HttpServer.IHttpRequest.Cookies">
             <summary>
-            Using SSL or other encryption method.
+            Gets cookies that was sent with the request.
             </summary>
         </member>
-        <member name="P:HttpServer.HttpClientContext.LogWriter">
+        <member name="P:HttpServer.IHttpRequest.Form">
             <summary>
-            Specify which logger to use.
+            Gets form parameters.
             </summary>
         </member>
-        <member name="P:HttpServer.HttpClientContext.Stream">
+        <member name="P:HttpServer.IHttpRequest.Headers">
             <summary>
-            Gets or sets the network stream.
+            Gets headers sent by the client.
             </summary>
         </member>
-        <member name="P:HttpServer.HttpClientContext.RemoteAddress">
+        <member name="P:HttpServer.IHttpRequest.HttpVersion">
             <summary>
-            Gets or sets IP address that the client connected from.
+            Gets or sets version of HTTP protocol that's used. 
             </summary>
+            <remarks>
+            Probably <see cref="F:HttpServer.HttpHelper.HTTP10"/> or <see cref="F:HttpServer.HttpHelper.HTTP11"/>.
+            </remarks>
+            <seealso cref="T:HttpServer.HttpHelper"/>
         </member>
-        <member name="P:HttpServer.HttpClientContext.RemotePort">
+        <member name="P:HttpServer.IHttpRequest.IsAjax">
             <summary>
-            Gets or sets port that the client connected from.
+            Gets whether the request was made by Ajax (Asynchronous JavaScript)
             </summary>
         </member>
-        <member name="E:HttpServer.HttpClientContext.Disconnected">
+        <member name="P:HttpServer.IHttpRequest.Method">
             <summary>
-            The context have been disconnected.
+            Gets or sets requested method.
             </summary>
             <remarks>
-            Event can be used to clean up a context, or to reuse it.
+            Will always be in upper case.
             </remarks>
+            <see cref="P:HttpServer.IHttpRequest.Method"/>
         </member>
-        <member name="E:HttpServer.HttpClientContext.RequestReceived">
+        <member name="P:HttpServer.IHttpRequest.Param">
             <summary>
-            A request have been received in the context.
+            Gets parameter from <see cref="P:HttpServer.IHttpRequest.QueryString"/> or <see cref="P:HttpServer.IHttpRequest.Form"/>.
             </summary>
         </member>
-        <member name="T:HttpServer.Helpers.XmlHelper">
+        <member name="P:HttpServer.IHttpRequest.QueryString">
             <summary>
-            Helpers to make XML handling easier
+            Gets variables sent in the query string
             </summary>
         </member>
-        <member name="M:HttpServer.Helpers.XmlHelper.Serialize(System.Object)">
+        <member name="P:HttpServer.IHttpRequest.Uri">
             <summary>
-            Serializes object to XML.
+            Gets or sets requested URI.
             </summary>
-            <param name="value">object to serialize.</param>
-            <returns>XML</returns>
+        </member>
+        <member name="P:HttpServer.IHttpRequest.UriParts">
+            <summary>
+            Gets URI absolute path divided into parts.
+            </summary>
+            <example>
+            // URI is: http://gauffin.com/code/tiny/
+            Console.WriteLine(request.UriParts[0]); // result: code
+            Console.WriteLine(request.UriParts[1]); // result: tiny
+            </example>
             <remarks>
-            Removes name spaces and adds indentation
+            If you're using controllers than the first part is controller name,
+            the second part is method name and the third part is Id property.
             </remarks>
+            <seealso cref="P:HttpServer.IHttpRequest.Uri"/>
         </member>
-        <member name="M:HttpServer.Helpers.XmlHelper.Deserialize``1(System.String)">
+        <member name="P:HttpServer.IHttpRequest.UriPath">
             <summary>
-            Create an object from a XML string
+            Gets or sets path and query.
             </summary>
-            <typeparam name="T">Type of object</typeparam>
-            <param name="xml">XML string</param>
-            <returns>object</returns>
+            <see cref="P:HttpServer.IHttpRequest.Uri"/>
+            <remarks>
+            Are only used during request parsing. Cannot be set after "Host" header have been
+            added.
+            </remarks>
         </member>
-        <member name="T:HttpServer.FormDecoders.UrlDecoder">
+        <member name="T:HttpServer.Helpers.Implementations.PrototypeImp">
             <summary>
-            Can handle application/x-www-form-urlencoded
+            PrototypeJS implementation of the javascript functions.
             </summary>
         </member>
-        <member name="M:HttpServer.FormDecoders.UrlDecoder.Decode(System.IO.Stream,System.String,System.Text.Encoding)">
+        <member name="T:HttpServer.Helpers.JavascriptHelperImplementation">
             <summary>
+            Purpose of this class is to create a javascript toolkit independent javascript helper.
             </summary>
-            <param name="stream">Stream containing the content</param>
-            <param name="contentType">Content type (with any additional info like boundry). Content type is always supplied in lower case</param>
-            <param name="encoding">Stream encoding</param>
-            <returns>
-            A HTTP form, or null if content could not be parsed.
-            </returns>
-            <exception cref="T:System.IO.InvalidDataException">If contents in the stream is not valid input data.</exception>
         </member>
-        <member name="M:HttpServer.FormDecoders.UrlDecoder.CanParse(System.String)">
+        <member name="M:HttpServer.Helpers.JavascriptHelperImplementation.GenerateOptions(System.Text.StringBuilder,System.String[],System.Boolean)">
             <summary>
-            Checks if the decoder can handle the mime type
+            Generates a list with JS options.
             </summary>
-            <param name="contentType">Content type (with any additional info like boundry). Content type is always supplied in lower case.</param>
-            <returns>True if the decoder can parse the specified content type</returns>
+            <param name="sb">StringBuilder that the options should be added to.</param>
+            <param name="options">the javascript options. name, value pairs. each string value should be escaped by YOU!</param>
+            <param name="startWithComma">true if we should start with a comma.</param>
         </member>
-        <member name="T:HttpServer.ClientAcceptedEventArgs">
+        <member name="M:HttpServer.Helpers.JavascriptHelperImplementation.RemoveJavascriptOptions(System.String[])">
             <summary>
-            Invoked when a client have been accepted by the <see cref="T:HttpServer.HttpListener"/>
+            Removes any javascript parameters from an array of parameters
             </summary>
-            <remarks>
-            Can be used to revoke incoming connections
-            </remarks>
+            <param name="options">The array of parameters to remove javascript params from</param>
+            <returns>An array of html parameters</returns>
         </member>
-        <member name="M:HttpServer.ClientAcceptedEventArgs.#ctor(System.Net.Sockets.Socket)">
+        <member name="M:HttpServer.Helpers.JavascriptHelperImplementation.AjaxFormOnSubmit(System.String[])">
             <summary>
-            Initializes a new instance of the <see cref="T:HttpServer.ClientAcceptedEventArgs"/> class.
+            javascript action that should be added to the "onsubmit" event in the form tag.
             </summary>
-            <param name="socket">The socket.</param>
+            <returns></returns>
+            <remarks>All javascript option names should end with colon.</remarks>
+            <example>
+            <code>
+            JSHelper.AjaxRequest("/user/show/1", "onsuccess:", "$('userInfo').update(result);");
+            </code>
+            </example>
         </member>
-        <member name="M:HttpServer.ClientAcceptedEventArgs.Revoke">
+        <member name="M:HttpServer.Helpers.JavascriptHelperImplementation.AjaxRequest(System.String,System.String[])">
             <summary>
-            Client may not be handled.
+            Requests a url through ajax
             </summary>
+            <param name="url">url to fetch</param>
+            <param name="options">optional options in format "key, value, key, value", used in JS request object.</param>
+            <returns>a link tag</returns>
+            <remarks>All javascript option names should end with colon.</remarks>
+            <example>
+            <code>
+            JSHelper.AjaxRequest("/user/show/1", "onsuccess:", "$('userInfo').update(result);");
+            </code>
+            </example>
         </member>
-        <member name="P:HttpServer.ClientAcceptedEventArgs.Socket">
+        <member name="M:HttpServer.Helpers.JavascriptHelperImplementation.AjaxUpdater(System.String,System.String,System.String[])">
             <summary>
-            Accepted socket.
+            Ajax requests that updates an element with
+            the fetched content
             </summary>
+            <param name="url">Url to fetch content from</param>
+            <param name="targetId">element to update</param>
+            <param name="options">optional options in format "key, value, key, value", used in JS updater object.</param>
+            <returns>A link tag.</returns>
+            <remarks>All javascript option names should end with colon.</remarks>
+            <example>
+            <code>
+            JSHelper.AjaxUpdater("/user/show/1", "userInfo", "onsuccess:", "alert('Successful!');");
+            </code>
+            </example>
         </member>
-        <member name="P:HttpServer.ClientAcceptedEventArgs.Revoked">
+        <member name="M:HttpServer.Helpers.JavascriptHelperImplementation.DialogLink(System.String,System.String,System.String[])">
             <summary>
-            Client should be revoked.
+            A link that pop ups a Dialog (overlay div)
             </summary>
+            <param name="url">url to contents of dialog</param>
+            <param name="title">link title</param>
+            <returns>A "a"-tag that popups a dialog when clicked</returns>
+            <param name="htmlAttributes">name/value of html attributes</param>
+            <example>
+            WebHelper.DialogLink("/user/show/1", "show user", "onmouseover", "alert('booh!');");
+            </example>
         </member>
-        <member name="T:HttpServer.Sessions.HttpSessionClearedArgs">
+        <member name="M:HttpServer.Helpers.JavascriptHelperImplementation.CloseDialog">
             <summary>
-            Arguments sent when a <see cref="T:HttpServer.Sessions.IHttpSession"/> is cleared
+            Close a javascript dialog window/div.
             </summary>
+            <returns>javascript for closing a dialog.</returns>
+            <see cref="M:HttpServer.Helpers.JavascriptHelperImplementation.DialogLink(System.String,System.String,System.String[])"/>
         </member>
-        <member name="M:HttpServer.Sessions.HttpSessionClearedArgs.#ctor(System.Boolean)">
+        <member name="M:HttpServer.Helpers.JavascriptHelperImplementation.CreateDialog(System.String,System.String,System.String[])">
             <summary>
-            Instantiates the arguments for the event
+            Creates a new modal dialog window
             </summary>
-            <param name="expired">True if the session is cleared due to expiration</param>
+            <param name="url">url to open in window.</param>
+            <param name="title">window title (may not be supported by all js implementations)</param>
+            <param name="options"></param>
+            <returns></returns>
         </member>
-        <member name="P:HttpServer.Sessions.HttpSessionClearedArgs.Expired">
+        <member name="M:HttpServer.Helpers.Implementations.PrototypeImp.AjaxRequest(System.String,System.String[])">
             <summary>
-            Returns true if the session is cleared due to expiration
+            Requests a url through ajax
             </summary>
+            <param name="url">url to fetch. Url is NOT enclosed in quotes by the implementation. You need to do that yourself.</param>
+            <param name="options">optional options in format "key, value, key, value", used in JS request object. All keys should end with colon.</param>
+            <returns>a link tag</returns>
+            <remarks>onclick attribute is used by this method.</remarks>
+            <example>
+            <code>
+            // plain text
+            JSHelper.AjaxRequest("'/user/show/1'");
+            
+            // ajax request using this.href
+            string link = "&lt;a href=\"/user/call/1\" onclick=\"" + JSHelper.AjaxRequest("this.href") + "/&lt;call user&lt;/a&gt;";
+            </code>
+            </example>
         </member>
-        <member name="T:HttpServer.Sessions.HttpSessionClearedHandler">
+        <member name="M:HttpServer.Helpers.Implementations.PrototypeImp.Contains(System.Collections.Generic.IEnumerable{System.String},System.String)">
             <summary>
-            Delegate for when a IHttpSession is cleared
+            Determins if a list of strings contains a specific value
             </summary>
-            <param name="session"><see cref="T:HttpServer.Sessions.IHttpSession"/> this is being cleared.</param>
-            <param name="args">Arguments for the clearing</param>
+            <param name="options">options to check in</param>
+            <param name="value">value to find</param>
+            <returns>true if value was found</returns>
+            <remarks>case insensitive</remarks>
         </member>
-        <member name="T:HttpServer.Parser.HeaderEventArgs">
+        <member name="M:HttpServer.Helpers.Implementations.PrototypeImp.AjaxUpdater(System.String,System.String,System.String[])">
             <summary>
-            Event arguments used when a new header have been parsed.
+            Ajax requests that updates an element with
+            the fetched content
             </summary>
+            <param name="url">URL to fetch. URL is NOT enclosed in quotes by the implementation. You need to do that yourself.</param>
+            <param name="targetId">element to update</param>
+            <param name="options">options in format "key, value, key, value". All keys should end with colon.</param>
+            <returns>A link tag.</returns>
+            <example>
+            <code>
+            JSHelper.AjaxUpdater("'/user/show/1'", "user", "onsuccess:", "alert('hello');", "asynchronous:", "true");
+            </code>
+            </example>
         </member>
-        <member name="M:HttpServer.Parser.HeaderEventArgs.#ctor(System.String,System.String)">
+        <member name="M:HttpServer.Helpers.Implementations.PrototypeImp.DialogLink(System.String,System.String,System.String[])">
             <summary>
-            Initializes a new instance of the <see cref="T:HttpServer.Parser.HeaderEventArgs"/> class.
+            A link that pop ups a Dialog (overlay div)
             </summary>
-            <param name="name">Name of header.</param>
-            <param name="value">Header value.</param>
+            <param name="url">URL to contents of dialog</param>
+            <param name="title">link title</param>
+            <param name="htmlAttributes">name, value, name, value</param>
+            <returns>
+            A "a"-tag that popups a dialog when clicked
+            </returns>
+            <remarks><para>Requires Control.Modal found here: http://livepipe.net/projects/control_modal/</para>
+            And the following JavaScript (load it in application.js):
+            <code>
+            Event.observe(window, 'load',
+              function() {
+                document.getElementsByClassName('modal').each(function(link){  new Control.Modal(link);  });
+              }
+            );
+            </code>
+            </remarks>
+            <example>
+            WebHelper.DialogLink("/user/show/1", "show user", "onmouseover", "alert('booh!');");
+            </example>
         </member>
-        <member name="M:HttpServer.Parser.HeaderEventArgs.#ctor">
+        <member name="M:HttpServer.Helpers.Implementations.PrototypeImp.CreateDialog(System.String,System.String,System.String[])">
             <summary>
-            Initializes a new instance of the <see cref="T:HttpServer.Parser.HeaderEventArgs"/> class.
+            create a modal dialog (usually using DIVs)
             </summary>
+            <param name="url">url to fetch</param>
+            <param name="title">dialog title</param>
+            <param name="options">javascript/html attributes. javascript options ends with colon ':'.</param>
+            <returns></returns>
         </member>
-        <member name="P:HttpServer.Parser.HeaderEventArgs.Name">
+        <member name="M:HttpServer.Helpers.Implementations.PrototypeImp.CloseDialog">
             <summary>
-            Gets or sets header name.
+            Close a javascript dialog window/div.
             </summary>
+            <returns>javascript for closing a dialog.</returns>
+            <see cref="M:HttpServer.Helpers.Implementations.PrototypeImp.DialogLink(System.String,System.String,System.String[])"/>
         </member>
-        <member name="P:HttpServer.Parser.HeaderEventArgs.Value">
+        <member name="M:HttpServer.Helpers.Implementations.PrototypeImp.AjaxFormOnSubmit(System.String[])">
             <summary>
-            Gets or sets header value.
+            javascript action that should be added to the "onsubmit" event in the form tag.
             </summary>
+            <param name="options">remember to encapsulate strings in ''</param>
+            <returns></returns>
+            <remarks>All javascript option names should end with colon.</remarks>
+            <example>
+            	<code>
+            JSHelper.AjaxRequest("/user/show/1", "onsuccess:", "$('userInfo').update(result);");
+            </code>
+            </example>
         </member>
-        <member name="T:HttpServer.Helpers.ResourceManager">
-            <summary>Class to handle loading of resource files</summary>
-        </member>
-        <member name="M:HttpServer.Helpers.ResourceManager.#ctor">
+        <member name="T:HttpServer.Helpers.FormHelper">
             <summary>
-            Initializes a new instance of the <see cref="T:HttpServer.Helpers.ResourceManager"/> class.
+            Helpers making it easier to work with forms.
             </summary>
+            <seealso cref="T:HttpServer.Helpers.ObjectForm"/>
         </member>
-        <member name="M:HttpServer.Helpers.ResourceManager.#ctor(HttpServer.ILogWriter)">
+        <member name="F:HttpServer.Helpers.FormHelper.JSImplementation">
             <summary>
-            Initializes a new instance of the <see cref="T:HttpServer.Helpers.ResourceManager"/> class.
+            Used to let the website use different JavaScript libraries.
+            Default is <see cref="T:HttpServer.Helpers.Implementations.PrototypeImp"/>
             </summary>
-            <param name="writer">logger.</param>
         </member>
-        <member name="M:HttpServer.Helpers.ResourceManager.LoadResources(System.String,System.Reflection.Assembly,System.String)">
+        <member name="M:HttpServer.Helpers.FormHelper.Start(System.String,System.String,System.Boolean,System.String[])">
             <summary>
-            Loads resources from a namespace in the given assembly to an URI
+            Create a &lt;form&gt; tag.
             </summary>
-            <param name="toUri">The URI to map the resources to</param>
-            <param name="fromAssembly">The assembly in which the resources reside</param>
-            <param name="fromNamespace">The namespace from which to load the resources</param>
-            <usage>
+            <param name="id">name of form</param>
+            <param name="action">action to invoke on submit</param>
+            <param name="isAjax">form should be posted as Ajax</param>
+            <returns>HTML code</returns>
+            <example>
             <code>
-            resourceLoader.LoadResources("/user/", typeof(User).Assembly, "MyLib.Models.User.Views");
+            // without options
+            WebHelper.FormStart("frmLogin", "/user/login", Request.IsAjax);
+            
+            // with options
+            WebHelper.FormStart("frmLogin", "/user/login", Request.IsAjax, "style", "display:inline", "class", "greenForm");
             </code>
-            Will make the resource MyLib.Models.User.Views.list.Haml accessible via /user/list.haml or /user/list/
-            </usage>
-            <returns>The amount of loaded files, giving you the possibility of making sure the resources needed gets loaded</returns>
-            <exception cref="T:System.InvalidOperationException">If a resource has already been mapped to an uri</exception>
+            </example>
+            <param name="options">HTML attributes or JavaScript options.</param>
+            <remarks>Method will ALWAYS be POST.</remarks>
+            <exception cref="T:System.ArgumentException">options must consist of name, value, name, value</exception>
         </member>
-        <member name="M:HttpServer.Helpers.ResourceManager.GetResourceStream(System.String)">
+        <member name="M:HttpServer.Helpers.FormHelper.Select(System.String,System.Collections.IEnumerable,HttpServer.Helpers.GetIdTitle,System.Object,System.Boolean)">
             <summary>
-            Retrieves a stream for the specified resource path if loaded otherwise null
+            Creates a select list with the values in a collection.
             </summary>
-            <param name="path">Path to the resource to retrieve a stream for</param>
-            <returns>A stream or null if the resource couldn't be found</returns>
+            <param name="name">Name of the SELECT-tag</param>
+            <param name="collection">collection used to generate options.</param>
+            <param name="getIdTitle">delegate used to return id and title from objects.</param>
+            <param name="selectedValue">value that should be marked as selected.</param>
+            <param name="firstEmpty">First row should contain an empty value.</param>
+            <returns>string containing a SELECT-tag.</returns>
+            <seealso cref="T:HttpServer.Helpers.GetIdTitle"/>
         </member>
-        <member name="M:HttpServer.Helpers.ResourceManager.GetFiles(System.String)">
+        <member name="M:HttpServer.Helpers.FormHelper.Select(System.String,System.String,System.Collections.IEnumerable,HttpServer.Helpers.GetIdTitle,System.Object,System.Boolean)">
             <summary>
-            Fetch all files from the resource that matches the specified arguments.
+            Creates a select list with the values in a collection.
             </summary>
-            <param name="path">The path to the resource to extract</param>
-            <returns>
-            a list of files if found; or an empty array if no files are found.
-            </returns>
-            <exception cref="T:System.ArgumentException">Search path must end with an asterisk for finding arbitrary files</exception>
+            <param name="name">Name of the SELECT-tag</param>
+            <param name="id">Id of the SELECT-tag</param>
+            <param name="collection">collection used to generate options.</param>
+            <param name="getIdTitle">delegate used to return id and title from objects.</param>
+            <param name="selectedValue">value that should be marked as selected.</param>
+            <param name="firstEmpty">First row should contain an empty value.</param>
+            <returns>string containing a SELECT-tag.</returns>
+            <seealso cref="T:HttpServer.Helpers.GetIdTitle"/>
+            <example>
+            <code>
+            // Class that is going to be used in a SELECT-tag.
+            public class User
+            {
+                private readonly string _realName;
+                private readonly int _id;
+                public User(int id, string realName)
+                {
+                    _id = id;
+                    _realName = realName;
+                }
+                public string RealName
+                {
+                    get { return _realName; }
+                }
+            
+                public int Id
+                {
+                    get { return _id; }
+                }
+            }
+            
+            // Using an inline delegate to generate the select list
+            public void UserInlineDelegate()
+            {
+                List&lt;User&gt; items = new List&lt;User&gt;();
+                items.Add(new User(1, "adam"));
+                items.Add(new User(2, "bertial"));
+                items.Add(new User(3, "david"));
+                string htmlSelect = Select("users", "users", items, delegate(object o, out object id, out object value)
+                                                                    {
+                                                                        User user = (User)o;
+                                                                        id = user.Id;
+                                                                        value = user.RealName;
+                                                                    }, 2, true);
+            }
+            
+            // Using an method as delegate to generate the select list.
+            public void UseExternalDelegate()
+            {
+                List&lt;User&gt; items = new List&lt;User&gt;();
+                items.Add(new User(1, "adam"));
+                items.Add(new User(2, "bertial"));
+                items.Add(new User(3, "david"));
+                string htmlSelect = Select("users", "users", items, UserOptions, 1, true);
+            }
+            
+            // delegate returning id and title
+            public static void UserOptions(object o, out object id, out object title)
+            {
+                User user = (User)o;
+                id = user.Id;
+                value = user.RealName;
+            }
+            </code>
+            </example>
+            <exception cref="T:System.ArgumentNullException"><c>name</c>, <c>id</c>, <c>collection</c> or <c>getIdTitle</c> is null.</exception>
         </member>
-        <member name="M:HttpServer.Helpers.ResourceManager.GetFiles(System.String,System.String)">
+        <member name="M:HttpServer.Helpers.FormHelper.Select(System.String,System.String,System.Collections.IEnumerable,HttpServer.Helpers.GetIdTitle,System.Object,System.Boolean,System.String[])">
             <summary>
-            Fetch all files from the resource that matches the specified arguments.
+            Creates a select list with the values in a collection.
             </summary>
-            <param name="path">Where the file should reside.</param>
-            <param name="filename">Files to check</param>
-            <returns>
-            a list of files if found; or an empty array if no files are found.
-            </returns>
+            <param name="name">Name of the SELECT-tag</param>
+            <param name="id">Id of the SELECT-tag</param>
+            <param name="collection">collection used to generate options.</param>
+            <param name="getIdTitle">delegate used to return id and title from objects.</param>
+            <param name="selectedValue">value that should be marked as selected.</param>
+            <param name="firstEmpty">First row should contain an empty value.</param>
+            <param name="htmlAttributes">name, value collection of extra HTML attributes.</param>
+            <returns>string containing a SELECT-tag.</returns>
+            <seealso cref="T:HttpServer.Helpers.GetIdTitle"/>
+            <exception cref="T:System.ArgumentNullException"><c>name</c>, <c>id</c>, <c>collection</c> or <c>getIdTitle</c> is null.</exception>
+            <exception cref="T:System.ArgumentException">Invalid HTML attribute list.</exception>
         </member>
-        <member name="M:HttpServer.Helpers.ResourceManager.ContainsResource(System.String)">
+        <member name="M:HttpServer.Helpers.FormHelper.Options(System.Collections.IEnumerable,HttpServer.Helpers.GetIdTitle,System.Object,System.Boolean)">
             <summary>
-            Returns whether or not the loader has an instance of the file requested
+            Generate a list of HTML options
             </summary>
-            <param name="filename">The name of the template/file</param>
-            <returns>True if the loader can provide the file</returns>
+            <param name="collection">collection used to generate options.</param>
+            <param name="getIdTitle">delegate used to return id and title from objects.</param>
+            <param name="selectedValue">value that should be marked as selected.</param>
+            <param name="firstEmpty">First row should contain an empty value.</param>
+            <returns></returns>
+            <exception cref="T:System.ArgumentNullException"><c>collection</c> or <c>getIdTitle</c> is null.</exception>
         </member>
-        <member name="T:HttpServer.Rules.RedirectRule">
-            <summary>
-            redirects from one URL to another.
-            </summary>
+        <member name="M:HttpServer.Helpers.FormHelper.Options(System.Text.StringBuilder,System.Collections.IEnumerable,HttpServer.Helpers.GetIdTitle,System.Object,System.Boolean)">
+            <exception cref="T:System.ArgumentNullException"><c>sb</c> is null.</exception>
         </member>
-        <member name="T:HttpServer.Rules.IRule">
+        <member name="M:HttpServer.Helpers.FormHelper.CheckBox(System.String,System.Object,System.Object,System.String[])">
             <summary>
-            Rules are used to perform operations before a request is being handled.
-            Rules can be used to create routing etc.
+            Creates a check box.
             </summary>
+            <param name="name">element name</param>
+            <param name="value">element value</param>
+            <param name="isChecked">determines if the check box is selected or not. This is done differently depending on the
+            type of variable. A boolean simply triggers checked or not, all other types are compared with "value" to determine if 
+            the box is checked or not. </param>
+            <param name="htmlAttributes">a list with additional attributes (name, value, name, value).</param>
+            <returns>a generated radio button</returns>
         </member>
-        <member name="M:HttpServer.Rules.IRule.Process(HttpServer.IHttpRequest,HttpServer.IHttpResponse)">
+        <member name="M:HttpServer.Helpers.FormHelper.CheckBox(System.String,System.String,System.Object,System.Object,System.String[])">
             <summary>
-            Process the incoming request.
+            Creates a check box.
             </summary>
-            <param name="request">incoming HTTP request</param>
-            <param name="response">outgoing HTTP response</param>
-            <returns>true if response should be sent to the browser directly (no other rules or modules will be processed).</returns>
+            <param name="name">element name</param>
+            <param name="id">element id</param>
+            <param name="value">element value</param>
+            <param name="isChecked">determines if the check box is selected or not. This is done differently depending on the
+            type of variable. A boolean simply triggers checked or not, all other types are compared with "value" to determine if 
+            the box is checked or not. </param>
+            <param name="htmlAttributes">a list with additional attributes (name, value, name, value).</param>
+            <returns>a generated radio button</returns>
             <remarks>
-            returning true means that no modules will get the request. Returning true is typically being done
-            for redirects.
+            value in your business object. (check box will be selected if it matches the element value)
             </remarks>
-            <exception cref="T:System.ArgumentNullException">If request or response is null.</exception>
-        </member>
-        <member name="M:HttpServer.Rules.RedirectRule.#ctor(System.String,System.String)">
-            <summary>
-            Initializes a new instance of the <see cref="T:HttpServer.Rules.RedirectRule"/> class.
-            </summary>
-            <param name="fromUrl">Absolute path (no server name)</param>
-            <param name="toUrl">Absolute path (no server name)</param>
-            <example>
-            server.Add(new RedirectRule("/", "/user/index"));
-            </example>
         </member>
-        <member name="M:HttpServer.Rules.RedirectRule.#ctor(System.String,System.String,System.Boolean)">
+        <member name="M:HttpServer.Helpers.FormHelper.CheckBox(System.String,System.String,System.Object,System.String[])">
             <summary>
-            Initializes a new instance of the <see cref="T:HttpServer.Rules.RedirectRule"/> class.
+            Creates a check box.
             </summary>
-            <param name="fromUrl">Absolute path (no server name)</param>
-            <param name="toUrl">Absolute path (no server name)</param>
-            <param name="shouldRedirect">true if request should be redirected, false if the request URI should be replaced.</param>
-            <example>
-            server.Add(new RedirectRule("/", "/user/index"));
-            </example>
+            <param name="name">element name</param>
+            <param name="id">element id</param>
+            <param name="isChecked">determines if the check box is selected or not. This is done differently depending on the
+            type of variable. A boolean simply triggers checked or not, all other types are compared with "value" to determine if 
+            the box is checked or not. </param>
+            <param name="htmlAttributes">a list with additional attributes (name, value, name, value).</param>
+            <returns>a generated radio button</returns>
+            <remarks>will set value to "1".</remarks>
         </member>
-        <member name="M:HttpServer.Rules.RedirectRule.Process(HttpServer.IHttpRequest,HttpServer.IHttpResponse)">
+        <member name="M:HttpServer.Helpers.FormHelper.RadioButton(System.String,System.Object,System.Object,System.String[])">
             <summary>
-            Process the incoming request.
+            Creates a RadioButton.
             </summary>
-            <param name="request">incoming HTTP request</param>
-            <param name="response">outgoing HTTP response</param>
-            <returns>true if response should be sent to the browser directly (no other rules or modules will be processed).</returns>
-            <remarks>
-            returning true means that no modules will get the request. Returning true is typically being done
-            for redirects.
-            </remarks>
+            <param name="name">element name</param>
+            <param name="value">element value</param>
+            <param name="isSelected">determines if the radio button is selected or not. This is done differently depending on the
+            type of variable. A boolean simply triggers checked or not, all other types are compared with "value" to determine if 
+            the box is checked or not. </param>
+            <param name="htmlAttributes">a list with additional attributes (name, value, name, value).</param>
+            <returns>a generated radio button</returns>
         </member>
-        <member name="P:HttpServer.Rules.RedirectRule.FromUrl">
+        <member name="M:HttpServer.Helpers.FormHelper.RadioButton(System.String,System.String,System.Object,System.Object,System.String[])">
             <summary>
-            Gets string to match request URI with.
+            Creates a RadioButton.
             </summary>
-            <remarks>Is compared to request.Uri.AbsolutePath</remarks>
+            <param name="name">element name</param>
+            <param name="id">element id</param>
+            <param name="value">element value</param>
+            <param name="isSelected">determines if the radio button is selected or not. This is done differently depending on the
+            type of variable. A boolean simply triggers checked or not, all other types are compared with "value" to determine if 
+            the box is checked or not. </param>
+            <param name="htmlAttributes">a list with additional attributes (name, value, name, value).</param>
+            <returns>a generated radio button</returns>
         </member>
-        <member name="P:HttpServer.Rules.RedirectRule.ToUrl">
+        <member name="M:HttpServer.Helpers.FormHelper.End">
             <summary>
-            Gets where to redirect.
+            form close tag
             </summary>
+            <returns></returns>
         </member>
-        <member name="P:HttpServer.Rules.RedirectRule.ShouldRedirect">
+        <member name="T:HttpServer.ExceptionHandler">
             <summary>
-            Gets whether server should redirect client.
+            We dont want to let the server to die due to exceptions thrown in worker threads.
+            therefore we use this delegate to give you a change to handle uncaught exceptions.
             </summary>
+            <param name="source">Class that the exception was thrown in.</param>
+            <param name="exception">Exception</param>
             <remarks>
-            <c>false</c> means that the rule will replace
-            the current request URI with the new one from this class.
-            <c>true</c> means that a redirect response is sent to the client.
+            Server will throw a InternalServerException in release version if you dont
+            handle this delegate.
             </remarks>
         </member>
-        <member name="T:HttpServer.RequestQueue">
+        <member name="T:HttpServer.Authentication.DigestAuthentication">
             <summary>
-            Used to queue incoming requests.
+            Implements HTTP Digest authentication. It's more secure than Basic auth since password is 
+            encrypted with a "key" from the server. 
             </summary>
+            <remarks>
+            Keep in mind that the password is encrypted with MD5. Use a combination of SSL and digest auth to be secure.
+            </remarks>
         </member>
-        <member name="M:HttpServer.RequestQueue.#ctor(HttpServer.ProcessRequestHandler)">
+        <member name="T:HttpServer.Authentication.AuthenticationModule">
             <summary>
-            Initializes a new instance of the <see cref="T:HttpServer.RequestQueue"/> class.
+            Authentication modules are used to implement different
+            kind of HTTP authentication.
             </summary>
-            <param name="handler">Called when a request should be processed.</param>
         </member>
-        <member name="M:HttpServer.RequestQueue.QueueThread">
+        <member name="F:HttpServer.Authentication.AuthenticationModule.AuthenticationTag">
             <summary>
-            Used to process queued requests.
+            Tag used for authentication.
             </summary>
         </member>
-        <member name="P:HttpServer.RequestQueue.MaxRequestCount">
+        <member name="M:HttpServer.Authentication.AuthenticationModule.#ctor(HttpServer.Authentication.AuthenticationHandler,HttpServer.Authentication.AuthenticationRequiredHandler)">
             <summary>
-            Gets or sets maximum number of allowed simultaneous requests.
+            Initializes a new instance of the <see cref="T:HttpServer.Authentication.AuthenticationModule"/> class.
             </summary>
+            <param name="authenticator">Delegate used to provide information used during authentication.</param>
+            <param name="authenticationRequiredHandler">Delegate used to determine if authentication is required (may be null).</param>
         </member>
-        <member name="P:HttpServer.RequestQueue.MaxQueueSize">
+        <member name="M:HttpServer.Authentication.AuthenticationModule.#ctor(HttpServer.Authentication.AuthenticationHandler)">
             <summary>
-            Gets or sets maximum number of requests queuing to be handled.
+            Initializes a new instance of the <see cref="T:HttpServer.Authentication.AuthenticationModule"/> class.
             </summary>
+            <param name="authenticator">Delegate used to provide information used during authentication.</param>
         </member>
-        <member name="P:HttpServer.RequestQueue.CurrentRequestCount">
+        <member name="M:HttpServer.Authentication.AuthenticationModule.CreateResponse(System.String,System.Object[])">
             <summary>
-            Specifies how many requests the HTTP server is currently processing.
+            Create a response that can be sent in the WWW-Authenticate header.
             </summary>
+            <param name="realm">Realm that the user should authenticate in</param>
+            <param name="options">Array with optional options.</param>
+            <returns>A correct authentication request.</returns>
+            <exception cref="T:System.ArgumentNullException">If realm is empty or null.</exception>
         </member>
-        <member name="T:HttpServer.RequestQueue.QueueItem">
+        <member name="M:HttpServer.Authentication.AuthenticationModule.Authenticate(System.String,System.String,System.String,System.Object[])">
             <summary>
-            Used two queue incoming requests to avoid
-            thread starvation.
+            An authentication response have been received from the web browser.
+            Check if it's correct
             </summary>
+            <param name="authenticationHeader">Contents from the Authorization header</param>
+            <param name="realm">Realm that should be authenticated</param>
+            <param name="httpVerb">GET/POST/PUT/DELETE etc.</param>
+            <param name="options">options to specific implementations</param>
+            <returns>Authentication object that is stored for the request. A user class or something like that.</returns>
+            <exception cref="T:System.ArgumentException">if <paramref name="authenticationHeader"/> is invalid</exception>
+            <exception cref="T:System.ArgumentNullException">If any of the parameters is empty or null.</exception>
         </member>
-        <member name="T:HttpServer.ProcessRequestHandler">
+        <member name="M:HttpServer.Authentication.AuthenticationModule.CheckAuthentication(System.String,System.String,System.String@,System.Object@)">
             <summary>
-            Method used to process a queued request
+            Used to invoke the authentication delegate that is used to lookup the user name/realm.
             </summary>
-            <param name="context">Context that the request was received from.</param>
-            <param name="request">Request to process.</param>
+            <param name="realm">Realm (domain) that user want to authenticate in</param>
+            <param name="userName">User name</param>
+            <param name="password">Password used for validation. Some implementations got password in clear text, they are then sent to client.</param>
+            <param name="login">object that will be stored in the request to help you identify the user if authentication was successful.</param>
+            <returns>true if authentication was successful</returns>
         </member>
-        <member name="T:HttpServer.Parser.HttpRequestParser">
+        <member name="M:HttpServer.Authentication.AuthenticationModule.AuthenticationRequired(HttpServer.IHttpRequest)">
             <summary>
-            Parses a HTTP request directly from a stream
+            Determines if authentication is required.
             </summary>
+            <param name="request">HTTP request from browser</param>
+            <returns>true if user should be authenticated.</returns>
+            <remarks>throw <see cref="T:HttpServer.Exceptions.ForbiddenException"/> from your delegate if no more attempts are allowed.</remarks>
+            <exception cref="T:HttpServer.Exceptions.ForbiddenException">If no more attempts are allowed</exception>
         </member>
-        <member name="T:HttpServer.IHttpRequestParser">
+        <member name="P:HttpServer.Authentication.AuthenticationModule.Name">
             <summary>
-            Event driven parser used to parse incoming HTTP requests.
+            name used in HTTP request.
             </summary>
-            <remarks>
-            The parser supports partial messages and keeps the states between
-            each parsed buffer. It's therefore important that the parser gets
-            <see cref="M:HttpServer.IHttpRequestParser.Clear"/>ed if a client disconnects.
-            </remarks>
         </member>
-        <member name="M:HttpServer.IHttpRequestParser.Parse(System.Byte[],System.Int32,System.Int32)">
+        <member name="M:HttpServer.Authentication.DigestAuthentication.#ctor(HttpServer.Authentication.AuthenticationHandler,HttpServer.Authentication.AuthenticationRequiredHandler)">
             <summary>
-            Parse partial or complete message.
+            Initializes a new instance of the <see cref="T:HttpServer.Authentication.DigestAuthentication"/> class.
             </summary>
-            <param name="buffer">buffer containing incoming bytes</param>
-            <param name="offset">where in buffer that parsing should start</param>
-            <param name="count">number of bytes to parse</param>
-            <returns>Unparsed bytes left in buffer.</returns>
-            <exception cref="T:HttpServer.Exceptions.BadRequestException"><c>BadRequestException</c>.</exception>
+            <param name="authenticator">Delegate used to provide information used during authentication.</param>
+            <param name="authenticationRequiredHandler">Delegate used to determine if authentication is required (may be null).</param>
         </member>
-        <member name="M:HttpServer.IHttpRequestParser.Clear">
+        <member name="M:HttpServer.Authentication.DigestAuthentication.#ctor(HttpServer.Authentication.AuthenticationHandler)">
             <summary>
-            Clear parser state.
+            Initializes a new instance of the <see cref="T:HttpServer.Authentication.DigestAuthentication"/> class.
             </summary>
+            <param name="authenticator">Delegate used to provide information used during authentication.</param>
         </member>
-        <member name="P:HttpServer.IHttpRequestParser.CurrentState">
+        <member name="F:HttpServer.Authentication.DigestAuthentication.DisableNonceCheck">
             <summary>
-            Current state in parser.
+            Used by test classes to be able to use hardcoded values
             </summary>
         </member>
-        <member name="E:HttpServer.IHttpRequestParser.RequestCompleted">
+        <member name="M:HttpServer.Authentication.DigestAuthentication.Authenticate(System.String,System.String,System.String,System.Object[])">
             <summary>
-            A request have been successfully parsed.
+            An authentication response have been received from the web browser.
+            Check if it's correct
             </summary>
+            <param name="authenticationHeader">Contents from the Authorization header</param>
+            <param name="realm">Realm that should be authenticated</param>
+            <param name="httpVerb">GET/POST/PUT/DELETE etc.</param>
+            <param name="options">First option: true if username/password is correct but not cnonce</param>
+            <returns>
+            Authentication object that is stored for the request. A user class or something like that.
+            </returns>
+            <exception cref="T:System.ArgumentException">if authenticationHeader is invalid</exception>
+            <exception cref="T:System.ArgumentNullException">If any of the paramters is empty or null.</exception>
         </member>
-        <member name="E:HttpServer.IHttpRequestParser.BodyBytesReceived">
+        <member name="M:HttpServer.Authentication.DigestAuthentication.Encrypt(System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.String)">
             <summary>
-            More body bytes have been received.
+            Encrypts parameters into a Digest string
             </summary>
+            <param name="realm">Realm that the user want to log into.</param>
+            <param name="userName">User logging in</param>
+            <param name="password">Users password.</param>
+            <param name="method">HTTP method.</param>
+            <param name="uri">Uri/domain that generated the login prompt.</param>
+            <param name="qop">Quality of Protection.</param>
+            <param name="nonce">"Number used ONCE"</param>
+            <param name="nc">Hexadecimal request counter.</param>
+            <param name="cnonce">"Client Number used ONCE"</param>
+            <returns>Digest encrypted string</returns>
         </member>
-        <member name="E:HttpServer.IHttpRequestParser.RequestLineReceived">
+        <member name="M:HttpServer.Authentication.DigestAuthentication.Encrypt(System.String,System.String,System.String,System.String,System.String,System.String)">
             <summary>
-            Request line have been received.
+            
             </summary>
+            <param name="ha1">Md5 hex encoded "userName:realm:password", without the quotes.</param>
+            <param name="ha2">Md5 hex encoded "method:uri", without the quotes</param>
+            <param name="qop">Quality of Protection</param>
+            <param name="nonce">"Number used ONCE"</param>
+            <param name="nc">Hexadecimal request counter.</param>
+            <param name="cnonce">Client number used once</param>
+            <returns></returns>
         </member>
-        <member name="E:HttpServer.IHttpRequestParser.HeaderReceived">
+        <member name="M:HttpServer.Authentication.DigestAuthentication.CreateResponse(System.String,System.Object[])">
             <summary>
-            A header have been received.
+            Create a response that can be sent in the WWW-Authenticate header.
             </summary>
+            <param name="realm">Realm that the user should authenticate in</param>
+            <param name="options">First options specifies if true if username/password is correct but not cnonce.</param>
+            <returns>A correct auth request.</returns>
+            <exception cref="T:System.ArgumentNullException">If realm is empty or null.</exception>
         </member>
-        <member name="P:HttpServer.IHttpRequestParser.LogWriter">
+        <member name="M:HttpServer.Authentication.DigestAuthentication.Decode(System.String,System.Text.Encoding)">
             <summary>
-            Gets or sets the log writer.
+            Decodes authorization header value
             </summary>
+            <param name="buffer">header value</param>
+            <param name="encoding">Encoding that the buffer is in</param>
+            <returns>All headers and their values if successful; otherwise null</returns>
+            <example>
+            NameValueCollection header = DigestAuthentication.Decode("response=\"6629fae49393a05397450978507c4ef1\",\r\nc=00001", Encoding.ASCII);
+            </example>
+            <remarks>Can handle lots of whitespaces and new lines without failing.</remarks>
         </member>
-        <member name="M:HttpServer.Parser.HttpRequestParser.#ctor(HttpServer.ILogWriter)">
+        <member name="M:HttpServer.Authentication.DigestAuthentication.GetCurrentNonce">
             <summary>
-            Create a new request parser
+            Gets the current nonce.
             </summary>
-            <param name="logWriter">delegate receiving log entries.</param>
+            <returns></returns>
         </member>
-        <member name="M:HttpServer.Parser.HttpRequestParser.AddToBody(System.Byte[],System.Int32,System.Int32)">
+        <member name="M:HttpServer.Authentication.DigestAuthentication.GetMD5HashBinHex2(System.String)">
             <summary>
-            Add a number of bytes to the body
+            Gets the Md5 hash bin hex2.
             </summary>
-            <param name="buffer">buffer containing more body bytes.</param>
-            <param name="offset">starting offset in buffer</param>
-            <param name="count">number of bytes, from offset, to read.</param>
-            <returns>offset to continue from.</returns>
+            <param name="toBeHashed">To be hashed.</param>
+            <returns></returns>
         </member>
-        <member name="M:HttpServer.Parser.HttpRequestParser.Clear">
+        <member name="M:HttpServer.Authentication.DigestAuthentication.IsValidNonce(System.String)">
             <summary>
-            Remove all state information for the request.
+            determines if the nonce is valid or has expired.
             </summary>
+            <param name="nonce">nonce value (check wikipedia for info)</param>
+            <returns>true if the nonce has not expired.</returns>
         </member>
-        <member name="M:HttpServer.Parser.HttpRequestParser.OnFirstLine(System.String)">
+        <member name="P:HttpServer.Authentication.DigestAuthentication.Name">
             <summary>
-            Parse request line
+            name used in http request.
             </summary>
-            <param name="value"></param>
-            <exception cref="T:HttpServer.Exceptions.BadRequestException">If line is incorrect</exception>
-            <remarks>Expects the following format: "Method SP Request-URI SP HTTP-Version CRLF"</remarks>
         </member>
-        <member name="M:HttpServer.Parser.HttpRequestParser.OnHeader(System.String,System.String)">
+        <member name="P:HttpServer.Authentication.DigestAuthentication.TokenIsHA1">
             <summary>
-            We've parsed a new header.
+            Gets or sets whether the token supplied in <see cref="T:HttpServer.Authentication.AuthenticationHandler"/> is a
+            HA1 generated string.
             </summary>
-            <param name="name">Name in lower case</param>
-            <param name="value">Value, unmodified.</param>
-            <exception cref="T:HttpServer.Exceptions.BadRequestException">If content length cannot be parsed.</exception>
         </member>
-        <member name="M:HttpServer.Parser.HttpRequestParser.Parse(System.Byte[],System.Int32,System.Int32)">
+        <member name="T:HttpServer.HttpHelper">
             <summary>
-            Parse a message
+            Generic helper functions for HTTP
             </summary>
-            <param name="buffer">bytes to parse.</param>
-            <param name="offset">where in buffer that parsing should start</param>
-            <param name="count">number of bytes to parse, starting on <paramref name="offset"/>.</param>
-            <returns>offset (where to start parsing next).</returns>
-            <exception cref="T:HttpServer.Exceptions.BadRequestException"><c>BadRequestException</c>.</exception>
         </member>
-        <member name="P:HttpServer.Parser.HttpRequestParser.LogWriter">
+        <member name="F:HttpServer.HttpHelper.HTTP10">
             <summary>
-            Gets or sets the log writer.
+            Version string for HTTP v1.0
             </summary>
         </member>
-        <member name="P:HttpServer.Parser.HttpRequestParser.CurrentState">
+        <member name="F:HttpServer.HttpHelper.HTTP11">
             <summary>
-            Current state in parser.
+            Version string for HTTP v1.1
             </summary>
         </member>
-        <member name="E:HttpServer.Parser.HttpRequestParser.RequestCompleted">
+        <member name="F:HttpServer.HttpHelper.EmptyUri">
             <summary>
-            A request have been successfully parsed.
+            An empty URI
             </summary>
         </member>
-        <member name="E:HttpServer.Parser.HttpRequestParser.BodyBytesReceived">
+        <member name="M:HttpServer.HttpHelper.ParseQueryString(System.String)">
             <summary>
-            More body bytes have been received.
+            Parses a query string.
             </summary>
+            <param name="queryString">Query string (URI encoded)</param>
+            <returns>A <see cref="T:HttpServer.HttpInput"/> object if successful; otherwise <see cref="F:HttpServer.HttpInput.Empty"/></returns>
+            <exception cref="T:System.ArgumentNullException"><c>queryString</c> is null.</exception>
+            <exception cref="T:System.FormatException">If string cannot be parsed.</exception>
         </member>
-        <member name="E:HttpServer.Parser.HttpRequestParser.RequestLineReceived">
+        <member name="T:HttpServer.Authentication.AuthenticationHandler">
             <summary>
-            Request line have been received.
+            Delegate used to let authentication modules authenticate the user name and password.
             </summary>
+            <param name="realm">Realm that the user want to authenticate in</param>
+            <param name="userName">User name specified by client</param>
+            <param name="token">Can either be user password or implementation specific token.</param>
+            <param name="login">object that will be stored in a session variable called <see cref="F:HttpServer.Authentication.AuthenticationModule.AuthenticationTag"/> if authentication was successful.</param>
+            <exception cref="T:HttpServer.Exceptions.ForbiddenException">throw forbidden exception if too many attempts have been made.</exception>
+            <remarks>
+            <para>
+            Use <see cref="P:HttpServer.Authentication.DigestAuthentication.TokenIsHA1"/> to specify that the token is a HA1 token. (MD5 generated
+            string from realm, user name and password); Md5String(userName + ":" + realm + ":" + password);
+            </para>
+            </remarks>
         </member>
-        <member name="E:HttpServer.Parser.HttpRequestParser.HeaderReceived">
+        <member name="T:HttpServer.Authentication.AuthenticationRequiredHandler">
             <summary>
-            A header have been received.
+            Let's you decide on a system level if authentication is required.
             </summary>
+            <param name="request">HTTP request from client</param>
+            <returns>true if user should be authenticated.</returns>
+            <remarks>throw <see cref="T:HttpServer.Exceptions.ForbiddenException"/> if no more attempts are allowed.</remarks>
+            <exception cref="T:HttpServer.Exceptions.ForbiddenException">If no more attempts are allowed</exception>
         </member>
-        <member name="T:HttpServer.IHttpResponse">
+        <member name="T:HttpServer.Parser.BodyEventArgs">
             <summary>
-            Response that is sent back to the web browser / client.
-            
-            A response can be sent if different ways. The easiest one is
-            to just fill the Body stream with content, everything else
-            will then be taken care of by the framework. The default content-type
-            is text/html, you should change it if you send anything else.
-            
-            The second and slighty more complex way is to send the response
-            as parts. Start with sending the header using the SendHeaders method and 
-            then you can send the body using SendBody method, but do not forget
-            to set ContentType and ContentLength before doing so.
+            Arguments used when more body bytes have come.
             </summary>
-            <example>
-            public void MyHandler(IHttpRequest request, IHttpResponse response)
-            {
-              
-            }
-            </example>
         </member>
-        <member name="M:HttpServer.IHttpResponse.AddHeader(System.String,System.String)">
+        <member name="M:HttpServer.Parser.BodyEventArgs.#ctor(System.Byte[],System.Int32,System.Int32)">
             <summary>
-            Add another header to the document.
+            Initializes a new instance of the <see cref="T:HttpServer.Parser.BodyEventArgs"/> class.
             </summary>
-            <param name="name">Name of the header, case sensitive, use lower cases.</param>
-            <param name="value">Header values can span over multiple lines as long as each line starts with a white space. New line chars should be \r\n</param>
-            <exception cref="T:System.InvalidOperationException">If headers already been sent.</exception>
-            <exception cref="T:System.ArgumentException">If value conditions have not been met.</exception>
-            <remarks>Adding any header will override the default ones and those specified by properties.</remarks>
+            <param name="buffer">buffer that contains the received bytes.</param>
+            <param name="offset">offset in buffer where to start processing.</param>
+            <param name="count">number of bytes from <paramref name="offset"/> that should be parsed.</param>
         </member>
-        <member name="M:HttpServer.IHttpResponse.Send">
+        <member name="M:HttpServer.Parser.BodyEventArgs.#ctor">
             <summary>
-            Send headers and body to the browser.
+            Initializes a new instance of the <see cref="T:HttpServer.Parser.BodyEventArgs"/> class.
             </summary>
-            <exception cref="T:System.InvalidOperationException">If content have already been sent.</exception>
         </member>
-        <member name="M:HttpServer.IHttpResponse.SendBody(System.Byte[],System.Int32,System.Int32)">
+        <member name="P:HttpServer.Parser.BodyEventArgs.Buffer">
             <summary>
-            Make sure that you have specified ContentLength and sent the headers first.
+            Gets or sets buffer that contains the received bytes.
             </summary>
-            <param name="buffer"></param>
-            <exception cref="T:System.InvalidOperationException">If headers have not been sent.</exception>
-            <see cref="M:HttpServer.IHttpResponse.SendHeaders"/>
-            <param name="offset">offest of first byte to send</param>
-            <param name="count">number of bytes to send.</param>
-            <seealso cref="M:HttpServer.IHttpResponse.Send"/>
-            <seealso cref="M:HttpServer.IHttpResponse.SendHeaders"/>
-            <remarks>This method can be used if you want to send body contents without caching them first. This
-            is recommended for larger files to keep the memory usage low.</remarks>
         </member>
-        <member name="M:HttpServer.IHttpResponse.SendBody(System.Byte[])">
+        <member name="P:HttpServer.Parser.BodyEventArgs.Count">
             <summary>
-            Make sure that you have specified ContentLength and sent the headers first.
+            Gets or sets number of bytes from <see cref="P:HttpServer.Parser.BodyEventArgs.Offset"/> that should be parsed.
             </summary>
-            <param name="buffer"></param>
-            <exception cref="T:System.InvalidOperationException">If headers have not been sent.</exception>
-            <see cref="M:HttpServer.IHttpResponse.SendHeaders"/>
-            <seealso cref="M:HttpServer.IHttpResponse.Send"/>
-            <seealso cref="M:HttpServer.IHttpResponse.SendHeaders"/>
-            <remarks>This method can be used if you want to send body contents without caching them first. This
-            is recommended for larger files to keep the memory usage low.</remarks>
         </member>
-        <member name="M:HttpServer.IHttpResponse.SendHeaders">
+        <member name="P:HttpServer.Parser.BodyEventArgs.Offset">
             <summary>
-            Send headers to the client.
+            Gets or sets offset in buffer where to start processing.
             </summary>
-            <exception cref="T:System.InvalidOperationException">If headers already been sent.</exception>
-            <seealso cref="M:HttpServer.IHttpResponse.AddHeader(System.String,System.String)"/>
-            <seealso cref="M:HttpServer.IHttpResponse.Send"/>
-            <seealso cref="M:HttpServer.IHttpResponse.SendBody(System.Byte[])"/>
         </member>
-        <member name="M:HttpServer.IHttpResponse.Redirect(System.Uri)">
+        <member name="T:HttpServer.Method">
             <summary>
-            Redirect client to somewhere else using the 302 status code.
+            Contains all HTTP Methods (according to the HTTP 1.1 specification)
+            <para>
+            See: http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html
+            </para>
             </summary>
-            <param name="uri">Destination of the redirect</param>
-            <exception cref="T:System.InvalidOperationException">If headers already been sent.</exception>
-            <remarks>You can not do anything more with the request when a redirect have been done. This should be your last
-            action.</remarks>
         </member>
-        <member name="M:HttpServer.IHttpResponse.Redirect(System.String)">
+        <member name="F:HttpServer.Method.Delete">
             <summary>
-            redirect to somewhere
+            The DELETE method requests that the origin server delete the resource identified by the Request-URI.
             </summary>
-            <param name="url">where the redirect should go</param>
             <remarks>
-            No body are allowed when doing redirects.
+            <para>
+            This method MAY be overridden by human intervention (or other means) on the origin server. 
+            The client cannot be guaranteed that the operation has been carried out, even if the status code 
+            returned from the origin server indicates that the action has been completed successfully. 
+            </para>
+            <para>
+            However, the server SHOULD NOT indicate success unless, at the time the response is given, 
+            it intends to delete the resource or move it to an inaccessible location.
+            </para>
+            <para>
+            A successful response SHOULD be 200 (OK) if the response includes an entity describing the status, 
+            202 (Accepted) if the action has not yet been enacted, 
+            or 204 (No Content) if the action has been enacted but the response does not include an entity.
+            </para>
+            <para>
+            If the request passes through a cache and the Request-URI identifies one or more currently cached entities, 
+            those entries SHOULD be treated as stale. Responses to this method are not cacheable. 
+            </para>
             </remarks>
         </member>
-        <member name="P:HttpServer.IHttpResponse.Body">
+        <member name="F:HttpServer.Method.Get">
             <summary>
-            The body stream is used to cache the body contents
-            before sending everything to the client. It's the simplest
-            way to serve documents.
+            The GET method means retrieve whatever information (in the form of an entity) is identified by the Request-URI.
             </summary>
+            <remarks>
+            <para>
+            If the Request-URI refers to a data-producing process, it is the produced data which shall be returned as the 
+            entity in the response and not the source text of the process, unless that text happens to be the output of the process.
+            </para>
+            <para>
+            The semantics of the GET method change to a "conditional GET" if the request message includes an 
+            If-Modified-Since, If-Unmodified-Since, If-Match, If-None-Match, or If-Range header field. 
+            A conditional GET method requests that the entity be transferred only under the circumstances described 
+            by the conditional header field(s). The conditional GET method is intended to reduce unnecessary network 
+            usage by allowing cached entities to be refreshed without requiring multiple requests or transferring 
+            data already held by the client.
+            </para>
+            </remarks>
         </member>
-        <member name="P:HttpServer.IHttpResponse.ProtocolVersion">
+        <member name="F:HttpServer.Method.Header">
             <summary>
-            Defines the version of the HTTP Response for applications where it's required
-            for this to be forced.
+            The HEAD method is identical to GET except that the server MUST NOT return a message-body in the response. 
             </summary>
+            <remarks>
+            The meta information contained in the HTTP headers in response to a HEAD request SHOULD be identical to the
+             information sent in response to a GET request. This method can be used for obtaining meta information about 
+            the entity implied by the request without transferring the entity-body itself. 
+            
+            This method is often used for testing hypertext links for validity, accessibility, and recent modification.
+            </remarks>
         </member>
-        <member name="P:HttpServer.IHttpResponse.Chunked">
+        <member name="F:HttpServer.Method.Options">
             <summary>
-            The chunked encoding modifies the body of a message in order to
-            transfer it as a series of chunks, each with its own size indicator,
-            followed by an OPTIONAL trailer containing entity-header fields. This
-            allows dynamically produced content to be transferred along with the
-            information necessary for the recipient to verify that it has
-            received the full message.
+            <para>The OPTIONS method represents a request for information about the communication options available on the request/response chain identified by the Request-URI.</para>
             </summary>
+            <remarks>
+            <para>This method allows the client to determine the options and/or requirements associated with a resource, or the capabilities of a server, without implying a resource action or initiating a resource retrieval.</para>
+            </remarks>
         </member>
-        <member name="P:HttpServer.IHttpResponse.Connection">
+        <member name="F:HttpServer.Method.Post">
             <summary>
-            Kind of connection
+            The POST method is used to request that the origin server accept the entity enclosed 
+            in the request as a new subordinate of the resource identified by the Request-URI in the Request-Line.
             </summary>
+            <remarks>
+            POST is designed to allow a uniform method to cover the following functions:
+            <list type="bullet">
+            <item>
+            Annotation of existing resources;
+            </item><item>
+            Posting a message to a bulletin board, newsgroup, mailing list, or similar group of articles;
+            </item><item>
+            Providing a block of data, such as the result of submitting a form, to a data-handling process;
+            </item><item>
+            Extending a database through an append operation.
+            </item>
+            </list>
+            <para>
+            If a resource has been created on the origin server, the response SHOULD be 201 (Created) and 
+            contain an entity which describes the status of the request and refers to the new resource, and a 
+            Location header (see section 14.30).
+            </para>
+            <para>
+             The action performed by the POST method might not result in a resource that can be identified by a URI. 
+            In this case, either 200 (OK) or 204 (No Content) is the appropriate response status, depending on 
+            whether or not the response includes an entity that describes the result.
+            </para><para>
+            Responses to this method are not cacheable, unless the response includes appropriate Cache-Control 
+            or Expires header fields. However, the 303 (See Other) response can be used to direct the user agent 
+            to retrieve a cacheable resource. 
+            </para>
+            </remarks>
         </member>
-        <member name="P:HttpServer.IHttpResponse.Encoding">
+        <member name="F:HttpServer.Method.Put">
             <summary>
-            Encoding to use when sending stuff to the client.
+            The PUT method requests that the enclosed entity be stored under the supplied Request-URI.
             </summary>
-            <remarks>Default is UTF8</remarks>
+            <remarks>
+            <list type="bullet">
+            <item>
+            If the Request-URI refers to an already existing resource, the enclosed entity SHOULD be considered as a 
+            modified version of the one residing on the origin server. 
+            </item><item>
+            If the Request-URI does not point to an existing resource, and that URI is capable of being defined as a new 
+            resource by the requesting user agent, the origin server can create the resource with that URI. 
+            </item><item>
+            If a new resource is created, the origin server MUST inform the user agent via the 201 (Created) response. 
+            </item><item>
+            If an existing resource is modified, either the 200 (OK) or 204 (No Content) response codes SHOULD be sent to 
+            indicate successful completion of the request. 
+            </item><item>
+            If the resource could not be created or modified with the Request-URI, an appropriate error response SHOULD be 
+            given that reflects the nature of the problem. 
+            </item>
+            </list>
+            <para>
+            The recipient of the entity MUST NOT ignore any Content-* (e.g. Content-Range) headers that it does not 
+            understand or implement and MUST return a 501 (Not Implemented) response in such cases.
+            </para>
+            </remarks>
         </member>
-        <member name="P:HttpServer.IHttpResponse.KeepAlive">
+        <member name="F:HttpServer.Method.Trace">
             <summary>
-            Number of seconds to keep connection alive
+            The TRACE method is used to invoke a remote, application-layer loop- back of the request message.
             </summary>
-            <remarks>Only used if Connection property is set to ConnectionType.KeepAlive</remarks>
         </member>
-        <member name="P:HttpServer.IHttpResponse.Status">
+        <member name="T:HttpServer.Methods">
             <summary>
-            Status code that is sent to the client.
+            Contains all HTTP Methods (according to the HTTP 1.1 specification)
+            <para>
+            See: http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html
+            </para>
             </summary>
-            <remarks>Default is HttpStatusCode.Ok</remarks>
         </member>
-        <member name="P:HttpServer.IHttpResponse.Reason">
+        <member name="F:HttpServer.Methods.Delete">
             <summary>
-            Information about why a specific status code was used.
+            The DELETE method requests that the origin server delete the resource identified by the Request-URI.
             </summary>
+            <remarks>
+            <para>
+            This method MAY be overridden by human intervention (or other means) on the origin server. 
+            The client cannot be guaranteed that the operation has been carried out, even if the status code 
+            returned from the origin server indicates that the action has been completed successfully. 
+            </para>
+            <para>
+            However, the server SHOULD NOT indicate success unless, at the time the response is given, 
+            it intends to delete the resource or move it to an inaccessible location.
+            </para>
+            <para>
+            A successful response SHOULD be 200 (OK) if the response includes an entity describing the status, 
+            202 (Accepted) if the action has not yet been enacted, 
+            or 204 (No Content) if the action has been enacted but the response does not include an entity.
+            </para>
+            <para>
+            If the request passes through a cache and the Request-URI identifies one or more currently cached entities, 
+            those entries SHOULD be treated as stale. Responses to this method are not cacheable. 
+            </para>
+            </remarks>
         </member>
-        <member name="P:HttpServer.IHttpResponse.ContentLength">
+        <member name="F:HttpServer.Methods.Get">
             <summary>
-            Size of the body. MUST be specified before sending the header,
-            unless property Chunked is set to true.
+            The GET method means retrieve whatever information (in the form of an entity) is identified by the Request-URI.
             </summary>
+            <remarks>
+            <para>
+            If the Request-URI refers to a data-producing process, it is the produced data which shall be returned as the 
+            entity in the response and not the source text of the process, unless that text happens to be the output of the process.
+            </para>
+            <para>
+            The semantics of the GET method change to a "conditional GET" if the request message includes an 
+            If-Modified-Since, If-Unmodified-Since, If-Match, If-None-Match, or If-Range header field. 
+            A conditional GET method requests that the entity be transferred only under the circumstances described 
+            by the conditional header field(s). The conditional GET method is intended to reduce unnecessary network 
+            usage by allowing cached entities to be refreshed without requiring multiple requests or transferring 
+            data already held by the client.
+            </para>
+            </remarks>
         </member>
-        <member name="P:HttpServer.IHttpResponse.ContentType">
+        <member name="F:HttpServer.Methods.Header">
             <summary>
-            Kind of content in the body
+            The HEAD method is identical to GET except that the server MUST NOT return a message-body in the response. 
             </summary>
-            <remarks>Default is text/html</remarks>
+            <remarks>
+            The meta information contained in the HTTP headers in response to a HEAD request SHOULD be identical to the
+             information sent in response to a GET request. This method can be used for obtaining meta information about 
+            the entity implied by the request without transferring the entity-body itself. 
+            
+            This method is often used for testing hypertext links for validity, accessibility, and recent modification.
+            </remarks>
         </member>
-        <member name="P:HttpServer.IHttpResponse.HeadersSent">
+        <member name="F:HttpServer.Methods.Options">
             <summary>
-            Headers have been sent to the client-
+            <para>The OPTIONS method represents a request for information about the communication options available on the request/response chain identified by the Request-URI.</para>
             </summary>
-            <remarks>You can not send any additional headers if they have already been sent.</remarks>
+            <remarks>
+            <para>This method allows the client to determine the options and/or requirements associated with a resource, or the capabilities of a server, without implying a resource action or initiating a resource retrieval.</para>
+            </remarks>
         </member>
-        <member name="P:HttpServer.IHttpResponse.Sent">
+        <member name="F:HttpServer.Methods.Post">
             <summary>
-            The whole response have been sent.
+            The POST method is used to request that the origin server accept the entity enclosed 
+            in the request as a new subordinate of the resource identified by the Request-URI in the Request-Line.
             </summary>
+            <remarks>
+            POST is designed to allow a uniform method to cover the following functions:
+            <list type="bullet">
+            <item>
+            Annotation of existing resources;
+            </item><item>
+            Posting a message to a bulletin board, newsgroup, mailing list, or similar group of articles;
+            </item><item>
+            Providing a block of data, such as the result of submitting a form, to a data-handling process;
+            </item><item>
+            Extending a database through an append operation.
+            </item>
+            </list>
+            <para>
+            If a resource has been created on the origin server, the response SHOULD be 201 (Created) and 
+            contain an entity which describes the status of the request and refers to the new resource, and a 
+            Location header (see section 14.30).
+            </para>
+            <para>
+             The action performed by the POST method might not result in a resource that can be identified by a URI. 
+            In this case, either 200 (OK) or 204 (No Content) is the appropriate response status, depending on 
+            whether or not the response includes an entity that describes the result.
+            </para><para>
+            Responses to this method are not cacheable, unless the response includes appropriate Cache-Control 
+            or Expires header fields. However, the 303 (See Other) response can be used to direct the user agent 
+            to retrieve a cacheable resource. 
+            </para>
+            </remarks>
         </member>
-        <member name="P:HttpServer.IHttpResponse.Cookies">
+        <member name="F:HttpServer.Methods.Put">
             <summary>
-            Cookies that should be created/changed.
+            The PUT method requests that the enclosed entity be stored under the supplied Request-URI.
             </summary>
+            <remarks>
+            <list type="bullet">
+            <item>
+            If the Request-URI refers to an already existing resource, the enclosed entity SHOULD be considered as a 
+            modified version of the one residing on the origin server. 
+            </item><item>
+            If the Request-URI does not point to an existing resource, and that URI is capable of being defined as a new 
+            resource by the requesting user agent, the origin server can create the resource with that URI. 
+            </item><item>
+            If a new resource is created, the origin server MUST inform the user agent via the 201 (Created) response. 
+            </item><item>
+            If an existing resource is modified, either the 200 (OK) or 204 (No Content) response codes SHOULD be sent to 
+            indicate successful completion of the request. 
+            </item><item>
+            If the resource could not be created or modified with the Request-URI, an appropriate error response SHOULD be 
+            given that reflects the nature of the problem. 
+            </item>
+            </list>
+            <para>
+            The recipient of the entity MUST NOT ignore any Content-* (e.g. Content-Range) headers that it does not 
+            understand or implement and MUST return a 501 (Not Implemented) response in such cases.
+            </para>
+            </remarks>
         </member>
-        <member name="T:HttpServer.ConnectionType">
+        <member name="F:HttpServer.Methods.Trace">
             <summary>
-            Type of HTTP connection
+            The TRACE method is used to invoke a remote, application-layer loop- back of the request message.
             </summary>
         </member>
-        <member name="F:HttpServer.ConnectionType.Close">
+        <member name="T:HttpServer.HttpContextFactory">
             <summary>
-            Connection is closed after each request-response
+            Used to create and reuse contexts.
             </summary>
         </member>
-        <member name="F:HttpServer.ConnectionType.KeepAlive">
+        <member name="T:HttpServer.IHttpContextFactory">
             <summary>
-            Connection is kept alive for X seconds (unless another request have been made)
+            Used to create <see cref="T:HttpServer.IHttpClientContext"/>es.
             </summary>
         </member>
-        <member name="T:HttpServer.HttpResponse">
+        <member name="M:HttpServer.IHttpContextFactory.CreateContext(System.Net.Sockets.Socket)">
             <summary>
-            Response that is sent back to the web browser / client.
+            Creates a <see cref="T:HttpServer.IHttpClientContext"/> that handles a connected client.
             </summary>
-            <remarks>
-            <para>
-            A response can be sent if different ways. The easiest one is
-            to just fill the Body stream with content, everything else
-            will then be taken care of by the framework. The default content-type
-            is text/html, you should change it if you send anything else.
-            </para><para>
-            The second and slightly more complex way is to send the response
-            as parts. Start with sending the header using the SendHeaders method and 
-            then you can send the body using SendBody method, but do not forget
-            to set <see cref="P:HttpServer.HttpResponse.ContentType"/> and <see cref="P:HttpServer.HttpResponse.ContentLength"/> before doing so.
-            </para>
-            </remarks>
-            <example>
-            <code>
-            // Example using response body.
-            class MyModule : HttpModule
-            {
-            		public override bool Process(IHttpRequest request, IHttpResponse response, IHttpSession session)
-            		{
-            			StreamWriter writer = new StreamWriter(response.Body);
-            			writer.WriteLine("Hello dear World!");
-            			writer.Flush();
-            
-            			// return true to tell webserver that we've handled the url
-            			return true;
-            		}
-            }
-            </code>
-            </example>
-            todo: add two examples, using SendHeaders/SendBody and just the Body stream.
+            <param name="socket">Client socket (accepted by the <see cref="T:HttpServer.HttpListener"/>).</param>
+            <returns>A creates <see cref="T:HttpServer.IHttpClientContext"/>.</returns>
         </member>
-        <member name="M:HttpServer.HttpResponse.#ctor(HttpServer.IHttpClientContext,HttpServer.IHttpRequest)">
+        <member name="M:HttpServer.IHttpContextFactory.CreateSecureContext(System.Net.Sockets.Socket,System.Security.Cryptography.X509Certificates.X509Certificate,System.Security.Authentication.SslProtocols)">
             <summary>
-            Initializes a new instance of the <see cref="T:HttpServer.IHttpResponse"/> class.
+            Create a secure <see cref="T:HttpServer.IHttpClientContext"/>.
             </summary>
-            <param name="context">Client that send the <see cref="T:HttpServer.IHttpRequest"/>.</param>
-            <param name="request">Contains information of what the client want to receive.</param>
-            <exception cref="T:System.ArgumentException"><see cref="P:HttpServer.IHttpRequest.HttpVersion"/> cannot be empty.</exception>
+            <param name="socket">Client socket (accepted by the <see cref="T:HttpServer.HttpListener"/>).</param>
+            <param name="certificate">HTTPS certificate to use.</param>
+            <param name="protocol">Kind of HTTPS protocol. Usually TLS or SSL.</param>
+            <returns>A created <see cref="T:HttpServer.IHttpClientContext"/>.</returns>
         </member>
-        <member name="M:HttpServer.HttpResponse.#ctor(HttpServer.IHttpClientContext,System.String,HttpServer.ConnectionType)">
+        <member name="E:HttpServer.IHttpContextFactory.RequestReceived">
             <summary>
-            Initializes a new instance of the <see cref="T:HttpServer.IHttpResponse"/> class.
+            A request have been received from one of the contexts.
             </summary>
-            <param name="context">Client that send the <see cref="T:HttpServer.IHttpRequest"/>.</param>
-            <param name="httpVersion">Version of HTTP protocol that the client uses.</param>
-            <param name="connectionType">Type of HTTP connection used.</param>
         </member>
-        <member name="M:HttpServer.HttpResponse.AddHeader(System.String,System.String)">
+        <member name="M:HttpServer.HttpContextFactory.#ctor(HttpServer.ILogWriter,System.Int32,HttpServer.IRequestParserFactory)">
             <summary>
-            Add another header to the document.
+            Initializes a new instance of the <see cref="T:HttpServer.HttpContextFactory"/> class.
             </summary>
-            <param name="name">Name of the header, case sensitive, use lower cases.</param>
-            <param name="value">Header values can span over multiple lines as long as each line starts with a white space. New line chars should be \r\n</param>
-            <exception cref="T:System.InvalidOperationException">If headers already been sent.</exception>
-            <exception cref="T:System.ArgumentException">If value conditions have not been met.</exception>
-            <remarks>Adding any header will override the default ones and those specified by properties.</remarks>
+            <param name="writer">The writer.</param>
+            <param name="bufferSize">Amount of bytes to read from the incoming socket stream.</param>
+            <param name="factory">Used to create a request parser.</param>
         </member>
-        <member name="M:HttpServer.HttpResponse.Send">
+        <member name="M:HttpServer.HttpContextFactory.CreateContext(System.Boolean,System.Net.IPEndPoint,System.IO.Stream,System.Net.Sockets.Socket)">
             <summary>
-            Send headers and body to the browser.
+            Create a new context.
             </summary>
-            <exception cref="T:System.InvalidOperationException">If content have already been sent.</exception>
+            <param name="isSecured">true if socket is running HTTPS.</param>
+            <param name="endPoint">Client that connected</param>
+            <param name="stream">Network/SSL stream.</param>
+            <returns>A context.</returns>
         </member>
-        <member name="M:HttpServer.HttpResponse.SendBody(System.Byte[],System.Int32,System.Int32)">
+        <member name="M:HttpServer.HttpContextFactory.CreateNewContext(System.Boolean,System.Net.IPEndPoint,System.IO.Stream,System.Net.Sockets.Socket)">
             <summary>
-            Make sure that you have specified <see cref="P:HttpServer.HttpResponse.ContentLength"/> and sent the headers first.
+            Create a new context.
             </summary>
-            <param name="buffer"></param>
-            <exception cref="T:System.InvalidOperationException">If headers have not been sent.</exception>
-            <see cref="M:HttpServer.HttpResponse.SendHeaders"/>
-            <param name="offset">offset of first byte to send</param>
-            <param name="count">number of bytes to send.</param>
-            <seealso cref="M:HttpServer.HttpResponse.Send"/>
-            <seealso cref="M:HttpServer.HttpResponse.SendHeaders"/>
-            <remarks>This method can be used if you want to send body contents without caching them first. This
-            is recommended for larger files to keep the memory usage low.</remarks>
+            <param name="isSecured">true if HTTPS is used.</param>
+            <param name="endPoint">Remote client</param>
+            <param name="stream">Network stream, <see cref="T:HttpServer.HttpClientContext"/> uses <see cref="T:HttpServer.ReusableSocketNetworkStream"/>.</param>
+            <returns>A new context (always).</returns>
         </member>
-        <member name="M:HttpServer.HttpResponse.SendBody(System.Byte[])">
+        <member name="M:HttpServer.HttpContextFactory.CreateSecureContext(System.Net.Sockets.Socket,System.Security.Cryptography.X509Certificates.X509Certificate,System.Security.Authentication.SslProtocols)">
             <summary>
-            Make sure that you have specified <see cref="P:HttpServer.HttpResponse.ContentLength"/> and sent the headers first.
+            Create a secure <see cref="T:HttpServer.IHttpClientContext"/>.
             </summary>
-            <param name="buffer"></param>
-            <exception cref="T:System.InvalidOperationException">If headers have not been sent.</exception>
-            <see cref="M:HttpServer.HttpResponse.SendHeaders"/>
-            <seealso cref="M:HttpServer.HttpResponse.Send"/>
-            <seealso cref="M:HttpServer.HttpResponse.SendHeaders"/>
-            <remarks>This method can be used if you want to send body contents without caching them first. This
-            is recommended for larger files to keep the memory usage low.</remarks>
+            <param name="socket">Client socket (accepted by the <see cref="T:HttpServer.HttpListener"/>).</param>
+            <param name="certificate">HTTPS certificate to use.</param>
+            <param name="protocol">Kind of HTTPS protocol. Usually TLS or SSL.</param>
+            <returns>
+            A created <see cref="T:HttpServer.IHttpClientContext"/>.
+            </returns>
         </member>
-        <member name="M:HttpServer.HttpResponse.SendHeaders">
+        <member name="M:HttpServer.HttpContextFactory.CreateContext(System.Net.Sockets.Socket)">
             <summary>
-            Send headers to the client.
+            Creates a <see cref="T:HttpServer.IHttpClientContext"/> that handles a connected client.
             </summary>
-            <exception cref="T:System.InvalidOperationException">If headers already been sent.</exception>
-            <seealso cref="M:HttpServer.HttpResponse.AddHeader(System.String,System.String)"/>
-            <seealso cref="M:HttpServer.HttpResponse.Send"/>
-            <seealso cref="M:HttpServer.HttpResponse.SendBody(System.Byte[])"/>
+            <param name="socket">Client socket (accepted by the <see cref="T:HttpServer.HttpListener"/>).</param>
+            <returns>
+            A creates <see cref="T:HttpServer.IHttpClientContext"/>.
+            </returns>
         </member>
-        <member name="M:HttpServer.HttpResponse.Redirect(System.Uri)">
+        <member name="P:HttpServer.HttpContextFactory.UseTraceLogs">
             <summary>
-            Redirect client to somewhere else using the 302 status code.
+             True if detailed trace logs should be written.
             </summary>
-            <param name="uri">Destination of the redirect</param>
-            <exception cref="T:System.InvalidOperationException">If headers already been sent.</exception>
-            <remarks>You can not do anything more with the request when a redirect have been done. This should be your last
-            action.</remarks>
         </member>
-        <member name="M:HttpServer.HttpResponse.Redirect(System.String)">
+        <member name="E:HttpServer.HttpContextFactory.RequestReceived">
             <summary>
-            redirect to somewhere
+            A request have been received from one of the contexts.
             </summary>
-            <param name="url">where the redirect should go</param>
-            <remarks>
-            No body are allowed when doing redirects.
-            </remarks>
         </member>
-        <member name="P:HttpServer.HttpResponse.Body">
+        <member name="T:HttpServer.ReusableSocketNetworkStream">
             <summary>
-            The body stream is used to cache the body contents
-            before sending everything to the client. It's the simplest
-            way to serve documents.
+            Custom network stream to mark sockets as reusable when disposing the stream.
             </summary>
         </member>
-        <member name="P:HttpServer.HttpResponse.Chunked">
+        <member name="M:HttpServer.ReusableSocketNetworkStream.#ctor(System.Net.Sockets.Socket)">
             <summary>
-            The chunked encoding modifies the body of a message in order to
-            transfer it as a series of chunks, each with its own size indicator,
-            followed by an OPTIONAL trailer containing entity-header fields. This
-            allows dynamically produced content to be transferred along with the
-            information necessary for the recipient to verify that it has
-            received the full message.
+                                Creates a new instance of the <see cref="T:System.Net.Sockets.NetworkStream" /> class for the specified <see cref="T:System.Net.Sockets.Socket" />.
             </summary>
+            <param name="socket">
+                                The <see cref="T:System.Net.Sockets.Socket" /> that the <see cref="T:System.Net.Sockets.NetworkStream" /> will use to send and receive data. 
+                            </param>
+            <exception cref="T:System.ArgumentNullException">
+                                The <paramref name="socket" /> parameter is null. 
+                            </exception>
+            <exception cref="T:System.IO.IOException">
+                                The <paramref name="socket" /> parameter is not connected.
+                                -or- 
+                                The <see cref="P:System.Net.Sockets.Socket.SocketType" /> property of the <paramref name="socket" /> parameter is not <see cref="F:System.Net.Sockets.SocketType.Stream" />.
+                                -or- 
+                                The <paramref name="socket" /> parameter is in a nonblocking state. 
+                            </exception>
         </member>
-        <member name="P:HttpServer.HttpResponse.ProtocolVersion">
+        <member name="M:HttpServer.ReusableSocketNetworkStream.#ctor(System.Net.Sockets.Socket,System.Boolean)">
             <summary>
-            Defines the version of the HTTP Response for applications where it's required
-            for this to be forced.
+                                Initializes a new instance of the <see cref="T:System.Net.Sockets.NetworkStream" /> class for the specified <see cref="T:System.Net.Sockets.Socket" /> with the specified <see cref="T:System.Net.Sockets.Socket" /> ownership.
             </summary>
+            <param name="socket">
+                                The <see cref="T:System.Net.Sockets.Socket" /> that the <see cref="T:System.Net.Sockets.NetworkStream" /> will use to send and receive data. 
+                            </param>
+            <param name="ownsSocket">
+                                Set to true to indicate that the <see cref="T:System.Net.Sockets.NetworkStream" /> will take ownership of the <see cref="T:System.Net.Sockets.Socket" />; otherwise, false. 
+                            </param>
+            <exception cref="T:System.ArgumentNullException">
+                                The <paramref name="socket" /> parameter is null. 
+                            </exception>
+            <exception cref="T:System.IO.IOException">
+                                The <paramref name="socket" /> parameter is not connected.
+                                -or- 
+                                the value of the <see cref="P:System.Net.Sockets.Socket.SocketType" /> property of the <paramref name="socket" /> parameter is not <see cref="F:System.Net.Sockets.SocketType.Stream" />.
+                                -or- 
+                                the <paramref name="socket" /> parameter is in a nonblocking state. 
+                            </exception>
         </member>
-        <member name="P:HttpServer.HttpResponse.Connection">
+        <member name="M:HttpServer.ReusableSocketNetworkStream.#ctor(System.Net.Sockets.Socket,System.IO.FileAccess)">
             <summary>
-            Kind of connection
+                                Creates a new instance of the <see cref="T:System.Net.Sockets.NetworkStream" /> class for the specified <see cref="T:System.Net.Sockets.Socket" /> with the specified access rights.
             </summary>
+            <param name="socket">
+                                The <see cref="T:System.Net.Sockets.Socket" /> that the <see cref="T:System.Net.Sockets.NetworkStream" /> will use to send and receive data. 
+                            </param>
+            <param name="access">
+                                A bitwise combination of the <see cref="T:System.IO.FileAccess" /> values that specify the type of access given to the <see cref="T:System.Net.Sockets.NetworkStream" /> over the provided <see cref="T:System.Net.Sockets.Socket" />. 
+                            </param>
+            <exception cref="T:System.ArgumentNullException">
+                                The <paramref name="socket" /> parameter is null. 
+                            </exception>
+            <exception cref="T:System.IO.IOException">
+                                The <paramref name="socket" /> parameter is not connected.
+                                -or- 
+                                the <see cref="P:System.Net.Sockets.Socket.SocketType" /> property of the <paramref name="socket" /> parameter is not <see cref="F:System.Net.Sockets.SocketType.Stream" />.
+                                -or- 
+                                the <paramref name="socket" /> parameter is in a nonblocking state. 
+                            </exception>
         </member>
-        <member name="P:HttpServer.HttpResponse.Encoding">
+        <member name="M:HttpServer.ReusableSocketNetworkStream.#ctor(System.Net.Sockets.Socket,System.IO.FileAccess,System.Boolean)">
             <summary>
-            Encoding to use when sending stuff to the client.
+                                Creates a new instance of the <see cref="T:System.Net.Sockets.NetworkStream" /> class for the specified <see cref="T:System.Net.Sockets.Socket" /> with the specified access rights and the specified <see cref="T:System.Net.Sockets.Socket" /> ownership.
             </summary>
-            <remarks>Default is UTF8</remarks>
+            <param name="socket">
+                                The <see cref="T:System.Net.Sockets.Socket" /> that the <see cref="T:System.Net.Sockets.NetworkStream" /> will use to send and receive data. 
+                            </param>
+            <param name="access">
+                                A bitwise combination of the <see cref="T:System.IO.FileAccess" /> values that specifies the type of access given to the <see cref="T:System.Net.Sockets.NetworkStream" /> over the provided <see cref="T:System.Net.Sockets.Socket" />. 
+                            </param>
+            <param name="ownsSocket">
+                                Set to true to indicate that the <see cref="T:System.Net.Sockets.NetworkStream" /> will take ownership of the <see cref="T:System.Net.Sockets.Socket" />; otherwise, false. 
+                            </param>
+            <exception cref="T:System.ArgumentNullException">
+                                The <paramref name="socket" /> parameter is null. 
+                            </exception>
+            <exception cref="T:System.IO.IOException">
+                                The <paramref name="socket" /> parameter is not connected.
+                                -or- 
+                                The <see cref="P:System.Net.Sockets.Socket.SocketType" /> property of the <paramref name="socket" /> parameter is not <see cref="F:System.Net.Sockets.SocketType.Stream" />.
+                                -or- 
+                                The <paramref name="socket" /> parameter is in a nonblocking state. 
+                            </exception>
         </member>
-        <member name="P:HttpServer.HttpResponse.KeepAlive">
+        <member name="M:HttpServer.ReusableSocketNetworkStream.Close">
             <summary>
-            Number of seconds to keep connection alive
+            Closes the current stream and releases any resources (such as sockets and file handles) associated with the current stream.
             </summary>
-            <remarks>Only used if Connection property is set to <see cref="F:HttpServer.ConnectionType.KeepAlive"/>.</remarks>
         </member>
-        <member name="P:HttpServer.HttpResponse.Status">
+        <member name="M:HttpServer.ReusableSocketNetworkStream.Dispose(System.Boolean)">
             <summary>
-            Status code that is sent to the client.
+            Releases the unmanaged resources used by the <see cref="T:System.Net.Sockets.NetworkStream"/> and optionally releases the managed resources.
             </summary>
-            <remarks>Default is <see cref="F:System.Net.HttpStatusCode.OK"/></remarks>
+            <param name="disposing">true to release both managed and unmanaged resources; false to release only unmanaged resources.</param>
         </member>
-        <member name="P:HttpServer.HttpResponse.Reason">
+        <member name="T:HttpServer.ClientAcceptedEventArgs">
             <summary>
-            Information about why a specific status code was used.
+            Invoked when a client have been accepted by the <see cref="T:HttpServer.HttpListener"/>
             </summary>
+            <remarks>
+            Can be used to revoke incoming connections
+            </remarks>
         </member>
-        <member name="P:HttpServer.HttpResponse.ContentLength">
+        <member name="M:HttpServer.ClientAcceptedEventArgs.#ctor(System.Net.Sockets.Socket)">
             <summary>
-            Size of the body. MUST be specified before sending the header,
-            unless property Chunked is set to true.
+            Initializes a new instance of the <see cref="T:HttpServer.ClientAcceptedEventArgs"/> class.
             </summary>
+            <param name="socket">The socket.</param>
         </member>
-        <member name="P:HttpServer.HttpResponse.ContentType">
+        <member name="M:HttpServer.ClientAcceptedEventArgs.Revoke">
             <summary>
-            Kind of content in the body
+            Client may not be handled.
             </summary>
-            <remarks>Default type is "text/html"</remarks>
         </member>
-        <member name="P:HttpServer.HttpResponse.HeadersSent">
+        <member name="P:HttpServer.ClientAcceptedEventArgs.Socket">
             <summary>
-            Headers have been sent to the client-
+            Accepted socket.
             </summary>
-            <remarks>You can not send any additional headers if they have already been sent.</remarks>
         </member>
-        <member name="P:HttpServer.HttpResponse.Sent">
+        <member name="P:HttpServer.ClientAcceptedEventArgs.Revoked">
             <summary>
-            The whole response have been sent.
+            Client should be revoked.
             </summary>
         </member>
-        <member name="P:HttpServer.HttpResponse.Cookies">
+        <member name="T:HttpServer.Sessions.MemorySession">
             <summary>
-            Cookies that should be created/changed.
+            A session stored in memory.
             </summary>
         </member>
-        <member name="T:HttpServer.HttpInputItem">
+        <member name="T:HttpServer.Sessions.IHttpSession">
             <summary>
-            represents a HTTP input item. Each item can have multiple sub items, a sub item
-            is made in a HTML form by using square brackets
+            Interface for sessions
             </summary>
-            <example>
-              // <input type="text" name="user[FirstName]" value="jonas" /> becomes:
-              Console.WriteLine("Value: {0}", form["user"]["FirstName"].Value);
-            </example>
-            <remarks>
-            All names in a form SHOULD be in lowercase.
-            </remarks>
         </member>
-        <member name="F:HttpServer.HttpInputItem.Empty">
-            <summary> Representation of a non-initialized <see cref="T:HttpServer.HttpInputItem"/>.</summary>
-        </member>
-        <member name="M:HttpServer.HttpInputItem.#ctor(System.String,System.String)">
+        <member name="M:HttpServer.Sessions.IHttpSession.Clear">
             <summary>
-            Initializes an input item setting its name/identifier and value
+            Remove everything from the session
             </summary>
-            <param name="name">Parameter name/id</param>
-            <param name="value">Parameter value</param>
-        </member>
-        <member name="M:HttpServer.HttpInputItem.#ctor(HttpServer.HttpInputItem)">
-            <summary>Creates a deep copy of the item specified</summary>
-            <param name="item">The item to copy</param>
-            <remarks>The function makes a deep copy of quite a lot which can be slow</remarks>
         </member>
-        <member name="M:HttpServer.HttpInputItem.Add(System.String)">
+        <member name="M:HttpServer.Sessions.IHttpSession.Clear(System.Boolean)">
             <summary>
-            Add another value to this item
+            Remove everything from the session
             </summary>
-            <param name="value">Value to add.</param>
-            <exception cref="T:System.InvalidOperationException">Cannot add stuff to <see cref="F:HttpServer.HttpInput.Empty"/>.</exception>
+            <param name="expires">True if the session is cleared due to expiration</param>
         </member>
-        <member name="M:HttpServer.HttpInputItem.Contains(System.String)">
+        <member name="P:HttpServer.Sessions.IHttpSession.Id">
             <summary>
-            checks if a sub-item exists (and has a value).
+            Session id
             </summary>
-            <param name="name">name in lower case</param>
-            <returns>true if the sub-item exists and has a value; otherwise false.</returns>
         </member>
-        <member name="M:HttpServer.HttpInputItem.ToString">
-            <summary> Returns a formatted representation of the instance with the values of all contained parameters </summary>
+        <member name="P:HttpServer.Sessions.IHttpSession.Item(System.String)">
+            <summary>
+            Should 
+            </summary>
+            <param name="name">Name of the session variable</param>
+            <returns>null if it's not set</returns>
+            <exception cref="T:System.Runtime.Serialization.SerializationException">If the object cant be serialized.</exception>
         </member>
-        <member name="M:HttpServer.HttpInputItem.ToString(System.String,System.Boolean)">
+        <member name="P:HttpServer.Sessions.IHttpSession.Accessed">
             <summary>
-            Outputs the string in a formatted manner
+            When the session was last accessed.
+            This property is touched by the http server each time the
+            session is requested.
             </summary>
-            <param name="prefix">A prefix to append, used internally</param>
-            <param name="asQuerySting">produce a query string</param>
         </member>
-        <member name="M:HttpServer.HttpInputItem.Add(System.String,System.String)">
+        <member name="P:HttpServer.Sessions.IHttpSession.Count">
             <summary>
-            Add a sub item.
+            Number of session variables.
             </summary>
-            <param name="name">Can contain array formatting, the item is then parsed and added in multiple levels</param>
-            <param name="value">Value to add.</param>
-            <exception cref="T:System.ArgumentNullException">Argument is null.</exception>
-            <exception cref="T:System.InvalidOperationException">Cannot add stuff to <see cref="F:HttpServer.HttpInput.Empty"/>.</exception>
         </member>
-        <member name="M:HttpServer.HttpInputItem.System#Collections#Generic#IEnumerable{HttpServer#HttpInputItem}#GetEnumerator">
+        <member name="E:HttpServer.Sessions.IHttpSession.BeforeClear">
             <summary>
-            Returns an enumerator that iterates through the collection.
+            Event triggered upon clearing the session
             </summary>
+        </member>
+        <member name="M:HttpServer.Sessions.MemorySession.#ctor(System.String)">
+            <summary>
             
-            <returns>
-            A <see cref="T:System.Collections.Generic.IEnumerator`1"></see> that can be used to iterate through the collection.
-            </returns>
-            <filterpriority>1</filterpriority>
+            </summary>
+            <param name="id">A unique id used by the sessions store to identify the session</param>
         </member>
-        <member name="M:HttpServer.HttpInputItem.GetEnumerator">
+        <member name="M:HttpServer.Sessions.MemorySession.SetId(System.String)">
             <summary>
-            Returns an enumerator that iterates through a collection.
+            Id
             </summary>
-            
-            <returns>
-            An <see cref="T:System.Collections.IEnumerator"></see> object that can be used to iterate through the collection.
-            </returns>
-            <filterpriority>2</filterpriority>
+            <param name="id"></param>
         </member>
-        <member name="M:HttpServer.HttpInputItem.ToString(System.String)">
+        <member name="M:HttpServer.Sessions.MemorySession.Clear">
             <summary>
-            Outputs the string in a formatted manner
+            Remove everything from the session
             </summary>
-            <param name="prefix">A prefix to append, used internally</param>
-            <returns></returns>
         </member>
-        <member name="P:HttpServer.HttpInputItem.Count">
+        <member name="M:HttpServer.Sessions.MemorySession.Clear(System.Boolean)">
             <summary>
-            Number of values
+            Clears the specified expire.
             </summary>
+            <param name="expires">True if the session is cleared due to expiration</param>
         </member>
-        <member name="P:HttpServer.HttpInputItem.Item(System.String)">
+        <member name="M:HttpServer.Sessions.MemorySession.Dispose">
             <summary>
-            Get a sub item
+            Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
             </summary>
-            <param name="name">name in lower case.</param>
-            <returns><see cref="F:HttpServer.HttpInputItem.Empty"/> if no item was found.</returns>
+            <filterpriority>2</filterpriority>
         </member>
-        <member name="P:HttpServer.HttpInputItem.Name">
+        <member name="P:HttpServer.Sessions.MemorySession.Id">
             <summary>
-            Name of item (in lower case).
+            Session id
             </summary>
         </member>
-        <member name="P:HttpServer.HttpInputItem.Value">
+        <member name="P:HttpServer.Sessions.MemorySession.Item(System.String)">
             <summary>
-            Returns the first value, or null if no value exist.
+            Should 
             </summary>
+            <param name="name">Name of the session variable</param>
+            <returns>null if it's not set</returns>
         </member>
-        <member name="P:HttpServer.HttpInputItem.LastValue">
+        <member name="P:HttpServer.Sessions.MemorySession.Accessed">
             <summary>
-            Returns the last value, or null if no value exist.
+            when the session was last accessed.
             </summary>
+            <remarks>
+            Used to determine when the session should be removed.
+            </remarks>
         </member>
-        <member name="P:HttpServer.HttpInputItem.Values">
+        <member name="P:HttpServer.Sessions.MemorySession.Count">
             <summary>
-            Returns the list with values.
+            Number of values in the session
             </summary>
         </member>
-        <member name="P:HttpServer.HttpInputItem.HttpServer#IHttpInput#Item(System.String)">
+        <member name="P:HttpServer.Sessions.MemorySession.Changed">
             <summary>
-            
+            Flag to indicate that the session have been changed
+            and should be saved into the session store.
             </summary>
-            <param name="name">name in lower case</param>
-            <returns></returns>
         </member>
-        <member name="T:HttpServer.Helpers.FormHelper">
+        <member name="E:HttpServer.Sessions.MemorySession.BeforeClear">
             <summary>
-            Helpers making it easier to work with forms.
+            Event triggered upon clearing the session
             </summary>
-            <seealso cref="T:HttpServer.Helpers.ObjectForm"/>
         </member>
-        <member name="F:HttpServer.Helpers.FormHelper.JSImplementation">
+        <member name="T:HttpServer.HttpModules.ReverseProxyModule">
             <summary>
-            Used to let the website use different JavaScript libraries.
-            Default is <see cref="T:HttpServer.Helpers.Implementations.PrototypeImp"/>
+            A reverse proxy are used to act as a bridge between local (protected/hidden) websites
+            and public clients.
+            
+            A typical usage is to allow web servers on non standard ports to still be available
+            to the public clients, or allow web servers on private ips to be available.
             </summary>
         </member>
-        <member name="M:HttpServer.Helpers.FormHelper.Start(System.String,System.String,System.Boolean,System.String[])">
+        <member name="M:HttpServer.HttpModules.ReverseProxyModule.#ctor(System.String,System.String)">
             <summary>
-            Create a &lt;form&gt; tag.
+            
             </summary>
-            <param name="id">name of form</param>
-            <param name="action">action to invoke on submit</param>
-            <param name="isAjax">form should be posted as Ajax</param>
-            <returns>HTML code</returns>
+            <param name="source">Base url requested from browser</param>
+            <param name="destination">Base url on private web server</param>
             <example>
-            <code>
-            // without options
-            WebHelper.FormStart("frmLogin", "/user/login", Request.IsAjax);
-            
-            // with options
-            WebHelper.FormStart("frmLogin", "/user/login", Request.IsAjax, "style", "display:inline", "class", "greenForm");
-            </code>
+            // this will return contents from http://192.168.1.128/view/jonas when client requests http://www.gauffin.com/user/view/jonas
+            _server.Add(new ReverseProxyModule("http://www.gauffin.com/user/", "http://192.168.1.128/");
             </example>
-            <param name="options">HTML attributes or JavaScript options.</param>
-            <remarks>Method will ALWAYS be POST.</remarks>
-            <exception cref="T:System.ArgumentException">options must consist of name, value, name, value</exception>
         </member>
-        <member name="M:HttpServer.Helpers.FormHelper.Select(System.String,System.Collections.IEnumerable,HttpServer.Helpers.GetIdTitle,System.Object,System.Boolean)">
+        <member name="M:HttpServer.HttpModules.ReverseProxyModule.CanHandle(System.Uri)">
             <summary>
-            Creates a select list with the values in a collection.
+            Method that determines if an url should be handled or not by the module
             </summary>
-            <param name="name">Name of the SELECT-tag</param>
-            <param name="collection">collection used to generate options.</param>
-            <param name="getIdTitle">delegate used to return id and title from objects.</param>
-            <param name="selectedValue">value that should be marked as selected.</param>
-            <param name="firstEmpty">First row should contain an empty value.</param>
-            <returns>string containing a SELECT-tag.</returns>
-            <seealso cref="T:HttpServer.Helpers.GetIdTitle"/>
+            <param name="uri">Url requested by the client.</param>
+            <returns>true if module should handle the url.</returns>
         </member>
-        <member name="M:HttpServer.Helpers.FormHelper.Select(System.String,System.String,System.Collections.IEnumerable,HttpServer.Helpers.GetIdTitle,System.Object,System.Boolean)">
+        <member name="M:HttpServer.HttpModules.ReverseProxyModule.Process(HttpServer.IHttpRequest,HttpServer.IHttpResponse,HttpServer.Sessions.IHttpSession)">
             <summary>
-            Creates a select list with the values in a collection.
+            Method that process the url
             </summary>
-            <param name="name">Name of the SELECT-tag</param>
-            <param name="id">Id of the SELECT-tag</param>
-            <param name="collection">collection used to generate options.</param>
-            <param name="getIdTitle">delegate used to return id and title from objects.</param>
-            <param name="selectedValue">value that should be marked as selected.</param>
-            <param name="firstEmpty">First row should contain an empty value.</param>
-            <returns>string containing a SELECT-tag.</returns>
-            <seealso cref="T:HttpServer.Helpers.GetIdTitle"/>
-            <example>
-            <code>
-            // Class that is going to be used in a SELECT-tag.
-            public class User
-            {
-                private readonly string _realName;
-                private readonly int _id;
-                public User(int id, string realName)
-                {
-                    _id = id;
-                    _realName = realName;
-                }
-                public string RealName
-                {
-                    get { return _realName; }
-                }
-            
-                public int Id
-                {
-                    get { return _id; }
-                }
-            }
-            
-            // Using an inline delegate to generate the select list
-            public void UserInlineDelegate()
-            {
-                List&lt;User&gt; items = new List&lt;User&gt;();
-                items.Add(new User(1, "adam"));
-                items.Add(new User(2, "bertial"));
-                items.Add(new User(3, "david"));
-                string htmlSelect = Select("users", "users", items, delegate(object o, out object id, out object value)
-                                                                    {
-                                                                        User user = (User)o;
-                                                                        id = user.Id;
-                                                                        value = user.RealName;
-                                                                    }, 2, true);
-            }
-            
-            // Using an method as delegate to generate the select list.
-            public void UseExternalDelegate()
-            {
-                List&lt;User&gt; items = new List&lt;User&gt;();
-                items.Add(new User(1, "adam"));
-                items.Add(new User(2, "bertial"));
-                items.Add(new User(3, "david"));
-                string htmlSelect = Select("users", "users", items, UserOptions, 1, true);
-            }
-            
-            // delegate returning id and title
-            public static void UserOptions(object o, out object id, out object title)
-            {
-                User user = (User)o;
-                id = user.Id;
-                value = user.RealName;
-            }
-            </code>
-            </example>
-            <exception cref="T:System.ArgumentNullException"><c>name</c>, <c>id</c>, <c>collection</c> or <c>getIdTitle</c> is null.</exception>
+            <param name="request">Information sent by the browser about the request</param>
+            <param name="response">Information that is being sent back to the client.</param>
+            <param name="session">Session used to </param>
         </member>
-        <member name="M:HttpServer.Helpers.FormHelper.Select(System.String,System.String,System.Collections.IEnumerable,HttpServer.Helpers.GetIdTitle,System.Object,System.Boolean,System.String[])">
+        <member name="T:HttpServer.FormDecoders.UrlDecoder">
             <summary>
-            Creates a select list with the values in a collection.
+            Can handle application/x-www-form-urlencoded
             </summary>
-            <param name="name">Name of the SELECT-tag</param>
-            <param name="id">Id of the SELECT-tag</param>
-            <param name="collection">collection used to generate options.</param>
-            <param name="getIdTitle">delegate used to return id and title from objects.</param>
-            <param name="selectedValue">value that should be marked as selected.</param>
-            <param name="firstEmpty">First row should contain an empty value.</param>
-            <param name="htmlAttributes">name, value collection of extra HTML attributes.</param>
-            <returns>string containing a SELECT-tag.</returns>
-            <seealso cref="T:HttpServer.Helpers.GetIdTitle"/>
-            <exception cref="T:System.ArgumentNullException"><c>name</c>, <c>id</c>, <c>collection</c> or <c>getIdTitle</c> is null.</exception>
-            <exception cref="T:System.ArgumentException">Invalid HTML attribute list.</exception>
         </member>
-        <member name="M:HttpServer.Helpers.FormHelper.Options(System.Collections.IEnumerable,HttpServer.Helpers.GetIdTitle,System.Object,System.Boolean)">
+        <member name="M:HttpServer.FormDecoders.UrlDecoder.Decode(System.IO.Stream,System.String,System.Text.Encoding)">
             <summary>
-            Generate a list of HTML options
             </summary>
-            <param name="collection">collection used to generate options.</param>
-            <param name="getIdTitle">delegate used to return id and title from objects.</param>
-            <param name="selectedValue">value that should be marked as selected.</param>
-            <param name="firstEmpty">First row should contain an empty value.</param>
-            <returns></returns>
-            <exception cref="T:System.ArgumentNullException"><c>collection</c> or <c>getIdTitle</c> is null.</exception>
-        </member>
-        <member name="M:HttpServer.Helpers.FormHelper.Options(System.Text.StringBuilder,System.Collections.IEnumerable,HttpServer.Helpers.GetIdTitle,System.Object,System.Boolean)">
-            <exception cref="T:System.ArgumentNullException"><c>sb</c> is null.</exception>
+            <param name="stream">Stream containing the content</param>
+            <param name="contentType">Content type (with any additional info like boundry). Content type is always supplied in lower case</param>
+            <param name="encoding">Stream encoding</param>
+            <returns>
+            A HTTP form, or null if content could not be parsed.
+            </returns>
+            <exception cref="T:System.IO.InvalidDataException">If contents in the stream is not valid input data.</exception>
         </member>
-        <member name="M:HttpServer.Helpers.FormHelper.CheckBox(System.String,System.Object,System.Object,System.String[])">
+        <member name="M:HttpServer.FormDecoders.UrlDecoder.CanParse(System.String)">
             <summary>
-            Creates a check box.
+            Checks if the decoder can handle the mime type
             </summary>
-            <param name="name">element name</param>
-            <param name="value">element value</param>
-            <param name="isChecked">determines if the check box is selected or not. This is done differently depending on the
-            type of variable. A boolean simply triggers checked or not, all other types are compared with "value" to determine if 
-            the box is checked or not. </param>
-            <param name="htmlAttributes">a list with additional attributes (name, value, name, value).</param>
-            <returns>a generated radio button</returns>
+            <param name="contentType">Content type (with any additional info like boundry). Content type is always supplied in lower case.</param>
+            <returns>True if the decoder can parse the specified content type</returns>
         </member>
-        <member name="M:HttpServer.Helpers.FormHelper.CheckBox(System.String,System.String,System.Object,System.Object,System.String[])">
+        <member name="T:HttpServer.FormDecoders.FormDecoderProvider">
             <summary>
-            Creates a check box.
+            This provider is used to let us implement any type of form decoding we want without
+            having to rewrite anything else in the server.
             </summary>
-            <param name="name">element name</param>
-            <param name="id">element id</param>
-            <param name="value">element value</param>
-            <param name="isChecked">determines if the check box is selected or not. This is done differently depending on the
-            type of variable. A boolean simply triggers checked or not, all other types are compared with "value" to determine if 
-            the box is checked or not. </param>
-            <param name="htmlAttributes">a list with additional attributes (name, value, name, value).</param>
-            <returns>a generated radio button</returns>
-            <remarks>
-            value in your business object. (check box will be selected if it matches the element value)
-            </remarks>
         </member>
-        <member name="M:HttpServer.Helpers.FormHelper.CheckBox(System.String,System.String,System.Object,System.String[])">
+        <member name="M:HttpServer.FormDecoders.FormDecoderProvider.Decode(System.String,System.IO.Stream,System.Text.Encoding)">
             <summary>
-            Creates a check box.
+            
             </summary>
-            <param name="name">element name</param>
-            <param name="id">element id</param>
-            <param name="isChecked">determines if the check box is selected or not. This is done differently depending on the
-            type of variable. A boolean simply triggers checked or not, all other types are compared with "value" to determine if 
-            the box is checked or not. </param>
-            <param name="htmlAttributes">a list with additional attributes (name, value, name, value).</param>
-            <returns>a generated radio button</returns>
-            <remarks>will set value to "1".</remarks>
+            <param name="contentType">Should contain boundary and type, as in: multipart/form-data; boundary=---------------------------230051238959</param>
+            <param name="stream">Stream containing form data.</param>
+            <param name="encoding">Encoding used when decoding the stream</param>
+            <returns><see cref="F:HttpServer.HttpInput.Empty"/> if no parser was found.</returns>
+            <exception cref="T:System.ArgumentException">If stream is null or not readable.</exception>
+            <exception cref="T:System.IO.InvalidDataException">If stream contents cannot be decoded properly.</exception>
         </member>
-        <member name="M:HttpServer.Helpers.FormHelper.RadioButton(System.String,System.Object,System.Object,System.String[])">
+        <member name="M:HttpServer.FormDecoders.FormDecoderProvider.Add(HttpServer.FormDecoders.IFormDecoder)">
             <summary>
-            Creates a RadioButton.
+            Add a decoder.
             </summary>
-            <param name="name">element name</param>
-            <param name="value">element value</param>
-            <param name="isSelected">determines if the radio button is selected or not. This is done differently depending on the
-            type of variable. A boolean simply triggers checked or not, all other types are compared with "value" to determine if 
-            the box is checked or not. </param>
-            <param name="htmlAttributes">a list with additional attributes (name, value, name, value).</param>
-            <returns>a generated radio button</returns>
+            <param name="decoder"></param>
+            <exception cref="T:System.ArgumentNullException"></exception>
         </member>
-        <member name="M:HttpServer.Helpers.FormHelper.RadioButton(System.String,System.String,System.Object,System.Object,System.String[])">
+        <member name="P:HttpServer.FormDecoders.FormDecoderProvider.Count">
             <summary>
-            Creates a RadioButton.
+            Number of added decoders.
             </summary>
-            <param name="name">element name</param>
-            <param name="id">element id</param>
-            <param name="value">element value</param>
-            <param name="isSelected">determines if the radio button is selected or not. This is done differently depending on the
-            type of variable. A boolean simply triggers checked or not, all other types are compared with "value" to determine if 
-            the box is checked or not. </param>
-            <param name="htmlAttributes">a list with additional attributes (name, value, name, value).</param>
-            <returns>a generated radio button</returns>
         </member>
-        <member name="M:HttpServer.Helpers.FormHelper.End">
+        <member name="P:HttpServer.FormDecoders.FormDecoderProvider.Decoders">
             <summary>
-            form close tag
+            Use with care.
             </summary>
-            <returns></returns>
         </member>
-        <member name="M:HttpServer.ComponentProvider.AddInstance``1(System.Object)">
+        <member name="P:HttpServer.FormDecoders.FormDecoderProvider.DefaultDecoder">
             <summary>
-            Add a component instance
+            Decoder used for unknown content types.
             </summary>
-            <typeparam name="T">Interface type</typeparam>
-            <param name="instance">Instance to add</param>
         </member>
-        <member name="M:HttpServer.ComponentProvider.Get``1">
+        <member name="T:HttpServer.Exceptions.InternalServerException">
             <summary>
-            Get a component.
+            The server encountered an unexpected condition which prevented it from fulfilling the request.
             </summary>
-            <typeparam name="T">Interface type</typeparam>
-            <returns>Component if registered, otherwise null.</returns>
-            <remarks>
-            Component will get created if needed.
-            </remarks>
-        </member>
-        <member name="M:HttpServer.ComponentProvider.Create(HttpServer.ComponentProvider.TypeInformation)">
-            <exception cref="T:System.InvalidOperationException">If instance cannot be created.</exception>
         </member>
-        <member name="M:HttpServer.ComponentProvider.Contains(System.Type)">
+        <member name="M:HttpServer.Exceptions.InternalServerException.#ctor">
             <summary>
-            Checks if the specified component interface have been added.
+            Initializes a new instance of the <see cref="T:HttpServer.Exceptions.InternalServerException"/> class.
             </summary>
-            <param name="interfaceType"></param>
-            <returns>true if found; otherwise false.</returns>
         </member>
-        <member name="M:HttpServer.ComponentProvider.Add``2">
+        <member name="M:HttpServer.Exceptions.InternalServerException.#ctor(System.String)">
             <summary>
-            Add a component.
+            Initializes a new instance of the <see cref="T:HttpServer.Exceptions.InternalServerException"/> class.
             </summary>
-            <typeparam name="InterfaceType">Type being requested.</typeparam>
-            <typeparam name="InstanceType">Type being created.</typeparam>
-            <exception cref="T:System.InvalidOperationException">Type have already been mapped.</exception>
+            <param name="message">error message.</param>
         </member>
-        <member name="T:HttpServer.Parser.BodyEventArgs">
+        <member name="M:HttpServer.Exceptions.InternalServerException.#ctor(System.String,System.Exception)">
             <summary>
-            Arguments used when more body bytes have come.
+            Initializes a new instance of the <see cref="T:HttpServer.Exceptions.InternalServerException"/> class.
             </summary>
+            <param name="message">error message.</param>
+            <param name="inner">inner exception.</param>
         </member>
-        <member name="M:HttpServer.Parser.BodyEventArgs.#ctor(System.Byte[],System.Int32,System.Int32)">
+        <member name="T:HttpServer.IHttpResponse">
             <summary>
-            Initializes a new instance of the <see cref="T:HttpServer.Parser.BodyEventArgs"/> class.
+            Response that is sent back to the web browser / client.
+            
+            A response can be sent if different ways. The easiest one is
+            to just fill the Body stream with content, everything else
+            will then be taken care of by the framework. The default content-type
+            is text/html, you should change it if you send anything else.
+            
+            The second and slighty more complex way is to send the response
+            as parts. Start with sending the header using the SendHeaders method and 
+            then you can send the body using SendBody method, but do not forget
+            to set ContentType and ContentLength before doing so.
             </summary>
-            <param name="buffer">buffer that contains the received bytes.</param>
-            <param name="offset">offset in buffer where to start processing.</param>
-            <param name="count">number of bytes from <paramref name="offset"/> that should be parsed.</param>
+            <example>
+            public void MyHandler(IHttpRequest request, IHttpResponse response)
+            {
+              
+            }
+            </example>
         </member>
-        <member name="M:HttpServer.Parser.BodyEventArgs.#ctor">
+        <member name="M:HttpServer.IHttpResponse.AddHeader(System.String,System.String)">
             <summary>
-            Initializes a new instance of the <see cref="T:HttpServer.Parser.BodyEventArgs"/> class.
+            Add another header to the document.
             </summary>
+            <param name="name">Name of the header, case sensitive, use lower cases.</param>
+            <param name="value">Header values can span over multiple lines as long as each line starts with a white space. New line chars should be \r\n</param>
+            <exception cref="T:System.InvalidOperationException">If headers already been sent.</exception>
+            <exception cref="T:System.ArgumentException">If value conditions have not been met.</exception>
+            <remarks>Adding any header will override the default ones and those specified by properties.</remarks>
         </member>
-        <member name="P:HttpServer.Parser.BodyEventArgs.Buffer">
+        <member name="M:HttpServer.IHttpResponse.Send">
             <summary>
-            Gets or sets buffer that contains the received bytes.
+            Send headers and body to the browser.
             </summary>
+            <exception cref="T:System.InvalidOperationException">If content have already been sent.</exception>
         </member>
-        <member name="P:HttpServer.Parser.BodyEventArgs.Count">
+        <member name="M:HttpServer.IHttpResponse.SendBody(System.Byte[],System.Int32,System.Int32)">
             <summary>
-            Gets or sets number of bytes from <see cref="P:HttpServer.Parser.BodyEventArgs.Offset"/> that should be parsed.
+            Make sure that you have specified ContentLength and sent the headers first.
             </summary>
+            <param name="buffer"></param>
+            <exception cref="T:System.InvalidOperationException">If headers have not been sent.</exception>
+            <see cref="M:HttpServer.IHttpResponse.SendHeaders"/>
+            <param name="offset">offest of first byte to send</param>
+            <param name="count">number of bytes to send.</param>
+            <seealso cref="M:HttpServer.IHttpResponse.Send"/>
+            <seealso cref="M:HttpServer.IHttpResponse.SendHeaders"/>
+            <remarks>This method can be used if you want to send body contents without caching them first. This
+            is recommended for larger files to keep the memory usage low.</remarks>
         </member>
-        <member name="P:HttpServer.Parser.BodyEventArgs.Offset">
+        <member name="M:HttpServer.IHttpResponse.SendBody(System.Byte[])">
             <summary>
-            Gets or sets offset in buffer where to start processing.
+            Make sure that you have specified ContentLength and sent the headers first.
             </summary>
+            <param name="buffer"></param>
+            <exception cref="T:System.InvalidOperationException">If headers have not been sent.</exception>
+            <see cref="M:HttpServer.IHttpResponse.SendHeaders"/>
+            <seealso cref="M:HttpServer.IHttpResponse.Send"/>
+            <seealso cref="M:HttpServer.IHttpResponse.SendHeaders"/>
+            <remarks>This method can be used if you want to send body contents without caching them first. This
+            is recommended for larger files to keep the memory usage low.</remarks>
         </member>
-        <member name="T:HttpServer.HttpContextFactory">
+        <member name="M:HttpServer.IHttpResponse.SendHeaders">
             <summary>
-            Used to create and reuse contexts.
+            Send headers to the client.
             </summary>
+            <exception cref="T:System.InvalidOperationException">If headers already been sent.</exception>
+            <seealso cref="M:HttpServer.IHttpResponse.AddHeader(System.String,System.String)"/>
+            <seealso cref="M:HttpServer.IHttpResponse.Send"/>
+            <seealso cref="M:HttpServer.IHttpResponse.SendBody(System.Byte[])"/>
         </member>
-        <member name="T:HttpServer.IHttpContextFactory">
+        <member name="M:HttpServer.IHttpResponse.Redirect(System.Uri)">
             <summary>
-            Used to create <see cref="T:HttpServer.IHttpClientContext"/>es.
+            Redirect client to somewhere else using the 302 status code.
             </summary>
+            <param name="uri">Destination of the redirect</param>
+            <exception cref="T:System.InvalidOperationException">If headers already been sent.</exception>
+            <remarks>You can not do anything more with the request when a redirect have been done. This should be your last
+            action.</remarks>
         </member>
-        <member name="M:HttpServer.IHttpContextFactory.CreateContext(System.Net.Sockets.Socket)">
+        <member name="M:HttpServer.IHttpResponse.Redirect(System.String)">
             <summary>
-            Creates a <see cref="T:HttpServer.IHttpClientContext"/> that handles a connected client.
+            redirect to somewhere
             </summary>
-            <param name="socket">Client socket (accepted by the <see cref="T:HttpServer.HttpListener"/>).</param>
-            <returns>A creates <see cref="T:HttpServer.IHttpClientContext"/>.</returns>
+            <param name="url">where the redirect should go</param>
+            <remarks>
+            No body are allowed when doing redirects.
+            </remarks>
         </member>
-        <member name="M:HttpServer.IHttpContextFactory.CreateSecureContext(System.Net.Sockets.Socket,System.Security.Cryptography.X509Certificates.X509Certificate,System.Security.Authentication.SslProtocols)">
+        <member name="P:HttpServer.IHttpResponse.Body">
             <summary>
-            Create a secure <see cref="T:HttpServer.IHttpClientContext"/>.
+            The body stream is used to cache the body contents
+            before sending everything to the client. It's the simplest
+            way to serve documents.
             </summary>
-            <param name="socket">Client socket (accepted by the <see cref="T:HttpServer.HttpListener"/>).</param>
-            <param name="certificate">HTTPS certificate to use.</param>
-            <param name="protocol">Kind of HTTPS protocol. Usually TLS or SSL.</param>
-            <returns>A created <see cref="T:HttpServer.IHttpClientContext"/>.</returns>
         </member>
-        <member name="E:HttpServer.IHttpContextFactory.RequestReceived">
+        <member name="P:HttpServer.IHttpResponse.ProtocolVersion">
             <summary>
-            A request have been received from one of the contexts.
+            Defines the version of the HTTP Response for applications where it's required
+            for this to be forced.
             </summary>
         </member>
-        <member name="M:HttpServer.HttpContextFactory.#ctor(HttpServer.ILogWriter,System.Int32,HttpServer.IRequestParserFactory)">
+        <member name="P:HttpServer.IHttpResponse.Chunked">
             <summary>
-            Initializes a new instance of the <see cref="T:HttpServer.HttpContextFactory"/> class.
+            The chunked encoding modifies the body of a message in order to
+            transfer it as a series of chunks, each with its own size indicator,
+            followed by an OPTIONAL trailer containing entity-header fields. This
+            allows dynamically produced content to be transferred along with the
+            information necessary for the recipient to verify that it has
+            received the full message.
             </summary>
-            <param name="writer">The writer.</param>
-            <param name="bufferSize">Amount of bytes to read from the incoming socket stream.</param>
-            <param name="factory">Used to create a request parser.</param>
         </member>
-        <member name="M:HttpServer.HttpContextFactory.CreateContext(System.Boolean,System.Net.IPEndPoint,System.IO.Stream,System.Net.Sockets.Socket)">
+        <member name="P:HttpServer.IHttpResponse.Connection">
             <summary>
-            Create a new context.
+            Kind of connection
             </summary>
-            <param name="isSecured">true if socket is running HTTPS.</param>
-            <param name="endPoint">Client that connected</param>
-            <param name="stream">Network/SSL stream.</param>
-            <returns>A context.</returns>
         </member>
-        <member name="M:HttpServer.HttpContextFactory.CreateNewContext(System.Boolean,System.Net.IPEndPoint,System.IO.Stream,System.Net.Sockets.Socket)">
+        <member name="P:HttpServer.IHttpResponse.Encoding">
             <summary>
-            Create a new context.
+            Encoding to use when sending stuff to the client.
             </summary>
-            <param name="isSecured">true if HTTPS is used.</param>
-            <param name="endPoint">Remote client</param>
-            <param name="stream">Network stream, <see cref="T:HttpServer.HttpClientContext"/> uses <see cref="T:HttpServer.ReusableSocketNetworkStream"/>.</param>
-            <returns>A new context (always).</returns>
+            <remarks>Default is UTF8</remarks>
         </member>
-        <member name="M:HttpServer.HttpContextFactory.CreateSecureContext(System.Net.Sockets.Socket,System.Security.Cryptography.X509Certificates.X509Certificate,System.Security.Authentication.SslProtocols)">
+        <member name="P:HttpServer.IHttpResponse.KeepAlive">
             <summary>
-            Create a secure <see cref="T:HttpServer.IHttpClientContext"/>.
+            Number of seconds to keep connection alive
             </summary>
-            <param name="socket">Client socket (accepted by the <see cref="T:HttpServer.HttpListener"/>).</param>
-            <param name="certificate">HTTPS certificate to use.</param>
-            <param name="protocol">Kind of HTTPS protocol. Usually TLS or SSL.</param>
-            <returns>
-            A created <see cref="T:HttpServer.IHttpClientContext"/>.
-            </returns>
+            <remarks>Only used if Connection property is set to ConnectionType.KeepAlive</remarks>
         </member>
-        <member name="M:HttpServer.HttpContextFactory.CreateContext(System.Net.Sockets.Socket)">
+        <member name="P:HttpServer.IHttpResponse.Status">
             <summary>
-            Creates a <see cref="T:HttpServer.IHttpClientContext"/> that handles a connected client.
+            Status code that is sent to the client.
             </summary>
-            <param name="socket">Client socket (accepted by the <see cref="T:HttpServer.HttpListener"/>).</param>
-            <returns>
-            A creates <see cref="T:HttpServer.IHttpClientContext"/>.
-            </returns>
+            <remarks>Default is HttpStatusCode.Ok</remarks>
         </member>
-        <member name="P:HttpServer.HttpContextFactory.UseTraceLogs">
+        <member name="P:HttpServer.IHttpResponse.Reason">
             <summary>
-             True if detailed trace logs should be written.
+            Information about why a specific status code was used.
             </summary>
         </member>
-        <member name="E:HttpServer.HttpContextFactory.RequestReceived">
+        <member name="P:HttpServer.IHttpResponse.ContentLength">
             <summary>
-            A request have been received from one of the contexts.
+            Size of the body. MUST be specified before sending the header,
+            unless property Chunked is set to true.
             </summary>
         </member>
-        <member name="T:HttpServer.ReusableSocketNetworkStream">
+        <member name="P:HttpServer.IHttpResponse.ContentType">
             <summary>
-            Custom network stream to mark sockets as reusable when disposing the stream.
+            Kind of content in the body
             </summary>
+            <remarks>Default is text/html</remarks>
         </member>
-        <member name="M:HttpServer.ReusableSocketNetworkStream.#ctor(System.Net.Sockets.Socket)">
+        <member name="P:HttpServer.IHttpResponse.HeadersSent">
             <summary>
-                                Creates a new instance of the <see cref="T:System.Net.Sockets.NetworkStream" /> class for the specified <see cref="T:System.Net.Sockets.Socket" />.
+            Headers have been sent to the client-
             </summary>
-            <param name="socket">
-                                The <see cref="T:System.Net.Sockets.Socket" /> that the <see cref="T:System.Net.Sockets.NetworkStream" /> will use to send and receive data. 
-                            </param>
-            <exception cref="T:System.ArgumentNullException">
-                                The <paramref name="socket" /> parameter is null. 
-                            </exception>
-            <exception cref="T:System.IO.IOException">
-                                The <paramref name="socket" /> parameter is not connected.
-                                -or- 
-                                The <see cref="P:System.Net.Sockets.Socket.SocketType" /> property of the <paramref name="socket" /> parameter is not <see cref="F:System.Net.Sockets.SocketType.Stream" />.
-                                -or- 
-                                The <paramref name="socket" /> parameter is in a nonblocking state. 
-                            </exception>
+            <remarks>You can not send any additional headers if they have already been sent.</remarks>
         </member>
-        <member name="M:HttpServer.ReusableSocketNetworkStream.#ctor(System.Net.Sockets.Socket,System.Boolean)">
+        <member name="P:HttpServer.IHttpResponse.Sent">
             <summary>
-                                Initializes a new instance of the <see cref="T:System.Net.Sockets.NetworkStream" /> class for the specified <see cref="T:System.Net.Sockets.Socket" /> with the specified <see cref="T:System.Net.Sockets.Socket" /> ownership.
+            The whole response have been sent.
             </summary>
-            <param name="socket">
-                                The <see cref="T:System.Net.Sockets.Socket" /> that the <see cref="T:System.Net.Sockets.NetworkStream" /> will use to send and receive data. 
-                            </param>
-            <param name="ownsSocket">
-                                Set to true to indicate that the <see cref="T:System.Net.Sockets.NetworkStream" /> will take ownership of the <see cref="T:System.Net.Sockets.Socket" />; otherwise, false. 
-                            </param>
-            <exception cref="T:System.ArgumentNullException">
-                                The <paramref name="socket" /> parameter is null. 
-                            </exception>
-            <exception cref="T:System.IO.IOException">
-                                The <paramref name="socket" /> parameter is not connected.
-                                -or- 
-                                the value of the <see cref="P:System.Net.Sockets.Socket.SocketType" /> property of the <paramref name="socket" /> parameter is not <see cref="F:System.Net.Sockets.SocketType.Stream" />.
-                                -or- 
-                                the <paramref name="socket" /> parameter is in a nonblocking state. 
-                            </exception>
         </member>
-        <member name="M:HttpServer.ReusableSocketNetworkStream.#ctor(System.Net.Sockets.Socket,System.IO.FileAccess)">
+        <member name="P:HttpServer.IHttpResponse.Cookies">
             <summary>
-                                Creates a new instance of the <see cref="T:System.Net.Sockets.NetworkStream" /> class for the specified <see cref="T:System.Net.Sockets.Socket" /> with the specified access rights.
+            Cookies that should be created/changed.
             </summary>
-            <param name="socket">
-                                The <see cref="T:System.Net.Sockets.Socket" /> that the <see cref="T:System.Net.Sockets.NetworkStream" /> will use to send and receive data. 
-                            </param>
-            <param name="access">
-                                A bitwise combination of the <see cref="T:System.IO.FileAccess" /> values that specify the type of access given to the <see cref="T:System.Net.Sockets.NetworkStream" /> over the provided <see cref="T:System.Net.Sockets.Socket" />. 
-                            </param>
-            <exception cref="T:System.ArgumentNullException">
-                                The <paramref name="socket" /> parameter is null. 
-                            </exception>
-            <exception cref="T:System.IO.IOException">
-                                The <paramref name="socket" /> parameter is not connected.
-                                -or- 
-                                the <see cref="P:System.Net.Sockets.Socket.SocketType" /> property of the <paramref name="socket" /> parameter is not <see cref="F:System.Net.Sockets.SocketType.Stream" />.
-                                -or- 
-                                the <paramref name="socket" /> parameter is in a nonblocking state. 
-                            </exception>
         </member>
-        <member name="M:HttpServer.ReusableSocketNetworkStream.#ctor(System.Net.Sockets.Socket,System.IO.FileAccess,System.Boolean)">
+        <member name="T:HttpServer.ConnectionType">
             <summary>
-                                Creates a new instance of the <see cref="T:System.Net.Sockets.NetworkStream" /> class for the specified <see cref="T:System.Net.Sockets.Socket" /> with the specified access rights and the specified <see cref="T:System.Net.Sockets.Socket" /> ownership.
+            Type of HTTP connection
             </summary>
-            <param name="socket">
-                                The <see cref="T:System.Net.Sockets.Socket" /> that the <see cref="T:System.Net.Sockets.NetworkStream" /> will use to send and receive data. 
-                            </param>
-            <param name="access">
-                                A bitwise combination of the <see cref="T:System.IO.FileAccess" /> values that specifies the type of access given to the <see cref="T:System.Net.Sockets.NetworkStream" /> over the provided <see cref="T:System.Net.Sockets.Socket" />. 
-                            </param>
-            <param name="ownsSocket">
-                                Set to true to indicate that the <see cref="T:System.Net.Sockets.NetworkStream" /> will take ownership of the <see cref="T:System.Net.Sockets.Socket" />; otherwise, false. 
-                            </param>
-            <exception cref="T:System.ArgumentNullException">
-                                The <paramref name="socket" /> parameter is null. 
-                            </exception>
-            <exception cref="T:System.IO.IOException">
-                                The <paramref name="socket" /> parameter is not connected.
-                                -or- 
-                                The <see cref="P:System.Net.Sockets.Socket.SocketType" /> property of the <paramref name="socket" /> parameter is not <see cref="F:System.Net.Sockets.SocketType.Stream" />.
-                                -or- 
-                                The <paramref name="socket" /> parameter is in a nonblocking state. 
-                            </exception>
         </member>
-        <member name="M:HttpServer.ReusableSocketNetworkStream.Close">
+        <member name="F:HttpServer.ConnectionType.Close">
             <summary>
-            Closes the current stream and releases any resources (such as sockets and file handles) associated with the current stream.
+            Connection is closed after each request-response
             </summary>
         </member>
-        <member name="M:HttpServer.ReusableSocketNetworkStream.Dispose(System.Boolean)">
+        <member name="F:HttpServer.ConnectionType.KeepAlive">
             <summary>
-            Releases the unmanaged resources used by the <see cref="T:System.Net.Sockets.NetworkStream"/> and optionally releases the managed resources.
+            Connection is kept alive for X seconds (unless another request have been made)
             </summary>
-            <param name="disposing">true to release both managed and unmanaged resources; false to release only unmanaged resources.</param>
         </member>
-        <member name="T:HttpServer.HttpModules.ResourceFileModule">
+        <member name="T:HttpServer.HttpModules.WebSiteModule">
             <summary>
-            Serves files that are stored in embedded resources.
+            The website module let's you handle multiple websites in the same server.
+            It uses the "Host" header to check which site you want.
             </summary>
+            <remarks>It's recommended that you do not
+            add any other modules to HttpServer if you are using the website module. Instead,
+            add all wanted modules to each website.</remarks>
         </member>
-        <member name="T:HttpServer.HttpModules.HttpModule">
+        <member name="M:HttpServer.HttpModules.WebSiteModule.#ctor(System.String,System.String)">
             <summary>
-            A HttpModule can be used to serve Uri's. The module itself
-            decides if it should serve a Uri or not. In this way, you can
-            get a very flexible http application since you can let multiple modules
-            serve almost similar urls.
+            
             </summary>
-            <remarks>
-            Throw <see cref="T:HttpServer.Exceptions.UnauthorizedException"/> if you are using a <see cref="T:HttpServer.Authentication.AuthenticationModule"/> and want to prompt for user name/password.
-            </remarks>
+            <param name="host">domain name that should be handled.</param>
+            <param name="name"></param>
         </member>
-        <member name="M:HttpServer.HttpModules.HttpModule.Process(HttpServer.IHttpRequest,HttpServer.IHttpResponse,HttpServer.Sessions.IHttpSession)">
+        <member name="M:HttpServer.HttpModules.WebSiteModule.Process(HttpServer.IHttpRequest,HttpServer.IHttpResponse,HttpServer.Sessions.IHttpSession)">
             <summary>
             Method that process the url
             </summary>
             <param name="request">Information sent by the browser about the request</param>
             <param name="response">Information that is being sent back to the client.</param>
             <param name="session">Session used to </param>
-            <returns>true if this module handled the request.</returns>
         </member>
-        <member name="M:HttpServer.HttpModules.HttpModule.SetLogWriter(HttpServer.ILogWriter)">
+        <member name="P:HttpServer.HttpModules.WebSiteModule.SiteName">
             <summary>
-            Set the log writer to use.
+            Name of site.
             </summary>
-            <param name="writer">logwriter to use.</param>
         </member>
-        <member name="M:HttpServer.HttpModules.HttpModule.Write(HttpServer.LogPrio,System.String)">
+        <member name="T:HttpServer.HttpModules.HttpModuleExceptionEventArgs">
             <summary>
-            Log something.
+            Used to inform http server that 
             </summary>
-            <param name="prio">importance of log message</param>
-            <param name="message">message</param>
         </member>
-        <member name="P:HttpServer.HttpModules.HttpModule.AllowSecondaryProcessing">
+        <member name="M:HttpServer.HttpModules.HttpModuleExceptionEventArgs.#ctor(System.Exception)">
             <summary>
-            If true specifies that the module doesn't consume the processing of a request so that subsequent modules
-            can continue processing afterwards. Default is false.
+            Eventarguments used when an exception is thrown by a module
             </summary>
+            <param name="e">the exception</param>
         </member>
-        <member name="M:HttpServer.HttpModules.ResourceFileModule.#ctor">
+        <member name="P:HttpServer.HttpModules.HttpModuleExceptionEventArgs.Exception">
             <summary>
-            Initializes a new instance of the <see cref="T:HttpServer.HttpModules.ResourceFileModule"/> class.
-            Runs <see cref="M:HttpServer.HttpModules.ResourceFileModule.AddDefaultMimeTypes"/> to make sure the basic mime types are available, they can be cleared later
-            through the use of <see cref="P:HttpServer.HttpModules.ResourceFileModule.MimeTypes"/> if desired.
+            Exception thrown in a module
             </summary>
         </member>
-        <member name="M:HttpServer.HttpModules.ResourceFileModule.#ctor(HttpServer.ILogWriter)">
+        <member name="T:HttpServer.HttpInputItem">
             <summary>
-            Initializes a new instance of the <see cref="T:HttpServer.HttpModules.ResourceFileModule"/> class.
-            Runs <see cref="M:HttpServer.HttpModules.ResourceFileModule.AddDefaultMimeTypes"/> to make sure the basic mime types are available, they can be cleared later
-            through the use of <see cref="P:HttpServer.HttpModules.ResourceFileModule.MimeTypes"/> if desired.
+            represents a HTTP input item. Each item can have multiple sub items, a sub item
+            is made in a HTML form by using square brackets
             </summary>
-            <param name="logWriter">The log writer to use when logging events</param>
+            <example>
+              // <input type="text" name="user[FirstName]" value="jonas" /> becomes:
+              Console.WriteLine("Value: {0}", form["user"]["FirstName"].Value);
+            </example>
+            <remarks>
+            All names in a form SHOULD be in lowercase.
+            </remarks>
         </member>
-        <member name="M:HttpServer.HttpModules.ResourceFileModule.AddDefaultMimeTypes">
-            <summary>
-            Mimtypes that this class can handle per default
-            </summary>
+        <member name="F:HttpServer.HttpInputItem.Empty">
+            <summary> Representation of a non-initialized <see cref="T:HttpServer.HttpInputItem"/>.</summary>
         </member>
-        <member name="M:HttpServer.HttpModules.ResourceFileModule.AddResources(System.String,System.Reflection.Assembly,System.String)">
+        <member name="M:HttpServer.HttpInputItem.#ctor(System.String,System.String)">
             <summary>
-            Loads resources from a namespace in the given assembly to an uri
+            Initializes an input item setting its name/identifier and value
             </summary>
-            <param name="toUri">The uri to map the resources to</param>
-            <param name="fromAssembly">The assembly in which the resources reside</param>
-            <param name="fromNamespace">The namespace from which to load the resources</param>
-            <usage>
-            resourceLoader.LoadResources("/user/", typeof(User).Assembly, "MyLib.Models.User.Views");
-            
-            will make ie the resource MyLib.Models.User.Views.stylesheet.css accessible via /user/stylesheet.css
-            </usage>
-            <returns>The amount of loaded files, giving you the possibility of making sure the resources needed gets loaded</returns>
+            <param name="name">Parameter name/id</param>
+            <param name="value">Parameter value</param>
         </member>
-        <member name="M:HttpServer.HttpModules.ResourceFileModule.CanHandle(HttpServer.IHttpRequest)">
-            <summary>
-            Returns true if the module can handle the request
-            </summary>
+        <member name="M:HttpServer.HttpInputItem.#ctor(HttpServer.HttpInputItem)">
+            <summary>Creates a deep copy of the item specified</summary>
+            <param name="item">The item to copy</param>
+            <remarks>The function makes a deep copy of quite a lot which can be slow</remarks>
         </member>
-        <member name="M:HttpServer.HttpModules.ResourceFileModule.Process(HttpServer.IHttpRequest,HttpServer.IHttpResponse,HttpServer.Sessions.IHttpSession)">
+        <member name="M:HttpServer.HttpInputItem.Add(System.String)">
             <summary>
-            Method that process the url
+            Add another value to this item
             </summary>
-            <param name="request">Information sent by the browser about the request</param>
-            <param name="response">Information that is being sent back to the client.</param>
-            <param name="session">Session used to </param>
-            <returns>true if this module handled the request.</returns>
+            <param name="value">Value to add.</param>
+            <exception cref="T:System.InvalidOperationException">Cannot add stuff to <see cref="F:HttpServer.HttpInput.Empty"/>.</exception>
         </member>
-        <member name="P:HttpServer.HttpModules.ResourceFileModule.MimeTypes">
+        <member name="M:HttpServer.HttpInputItem.Contains(System.String)">
             <summary>
-            List with all mime-type that are allowed. 
+            checks if a sub-item exists (and has a value).
             </summary>
-            <remarks>All other mime types will result in a Forbidden http status code.</remarks>
+            <param name="name">name in lower case</param>
+            <returns>true if the sub-item exists and has a value; otherwise false.</returns>
         </member>
-        <member name="T:HttpServer.HttpModules.FileModule">
+        <member name="M:HttpServer.HttpInputItem.ToString">
+            <summary> Returns a formatted representation of the instance with the values of all contained parameters </summary>
+        </member>
+        <member name="M:HttpServer.HttpInputItem.ToString(System.String,System.Boolean)">
             <summary>
-            The purpose of this module is to serve files.
+            Outputs the string in a formatted manner
             </summary>
+            <param name="prefix">A prefix to append, used internally</param>
+            <param name="asQuerySting">produce a query string</param>
         </member>
-        <member name="M:HttpServer.HttpModules.FileModule.#ctor(System.String,System.String,System.Boolean)">
+        <member name="M:HttpServer.HttpInputItem.Add(System.String,System.String)">
             <summary>
-            Initializes a new instance of the <see cref="T:HttpServer.HttpModules.FileModule"/> class.
+            Add a sub item.
             </summary>
-            <param name="baseUri">Uri to serve, for instance "/files/"</param>
-            <param name="basePath">Path on hard drive where we should start looking for files</param>
-            <param name="useLastModifiedHeader">If true a Last-Modifed header will be sent upon requests urging web browser to cache files</param>
+            <param name="name">Can contain array formatting, the item is then parsed and added in multiple levels</param>
+            <param name="value">Value to add.</param>
+            <exception cref="T:System.ArgumentNullException">Argument is null.</exception>
+            <exception cref="T:System.InvalidOperationException">Cannot add stuff to <see cref="F:HttpServer.HttpInput.Empty"/>.</exception>
         </member>
-        <member name="M:HttpServer.HttpModules.FileModule.#ctor(System.String,System.String)">
+        <member name="M:HttpServer.HttpInputItem.System#Collections#Generic#IEnumerable{HttpServer#HttpInputItem}#GetEnumerator">
             <summary>
-            Initializes a new instance of the <see cref="T:HttpServer.HttpModules.FileModule"/> class.
+            Returns an enumerator that iterates through the collection.
             </summary>
-            <param name="baseUri">Uri to serve, for instance "/files/"</param>
-            <param name="basePath">Path on hard drive where we should start looking for files</param>
+            
+            <returns>
+            A <see cref="T:System.Collections.Generic.IEnumerator`1"></see> that can be used to iterate through the collection.
+            </returns>
+            <filterpriority>1</filterpriority>
         </member>
-        <member name="M:HttpServer.HttpModules.FileModule.AddDefaultMimeTypes">
+        <member name="M:HttpServer.HttpInputItem.GetEnumerator">
             <summary>
-            Mimtypes that this class can handle per default
+            Returns an enumerator that iterates through a collection.
             </summary>
+            
+            <returns>
+            An <see cref="T:System.Collections.IEnumerator"></see> object that can be used to iterate through the collection.
+            </returns>
+            <filterpriority>2</filterpriority>
         </member>
-        <member name="M:HttpServer.HttpModules.FileModule.CanHandle(System.Uri)">
+        <member name="M:HttpServer.HttpInputItem.ToString(System.String)">
             <summary>
-            Determines if the request should be handled by this module.
-            Invoked by the <see cref="T:HttpServer.HttpServer"/>
+            Outputs the string in a formatted manner
             </summary>
-            <param name="uri"></param>
-            <returns>true if this module should handle it.</returns>
-        </member>
-        <member name="M:HttpServer.HttpModules.FileModule.GetPath(System.Uri)">
-            <exception cref="T:HttpServer.Exceptions.BadRequestException">Illegal path</exception>
+            <param name="prefix">A prefix to append, used internally</param>
+            <returns></returns>
         </member>
-        <member name="M:HttpServer.HttpModules.FileModule.Contains(System.String,System.Collections.Generic.IEnumerable{System.String})">
+        <member name="P:HttpServer.HttpInputItem.Count">
             <summary>
-            check if source contains any of the chars.
+            Number of values
             </summary>
-            <param name="source"></param>
-            <param name="chars"></param>
-            <returns></returns>
         </member>
-        <member name="M:HttpServer.HttpModules.FileModule.Process(HttpServer.IHttpRequest,HttpServer.IHttpResponse,HttpServer.Sessions.IHttpSession)">
+        <member name="P:HttpServer.HttpInputItem.Item(System.String)">
             <summary>
-            Method that process the Uri.
+            Get a sub item
             </summary>
-            <param name="request">Information sent by the browser about the request</param>
-            <param name="response">Information that is being sent back to the client.</param>
-            <param name="session">Session used to </param>
-            <exception cref="T:HttpServer.Exceptions.InternalServerException">Failed to find file extension</exception>
-            <exception cref="T:HttpServer.Exceptions.ForbiddenException">File type is forbidden.</exception>
+            <param name="name">name in lower case.</param>
+            <returns><see cref="F:HttpServer.HttpInputItem.Empty"/> if no item was found.</returns>
         </member>
-        <member name="M:HttpServer.HttpModules.FileModule.GetFileExtension(System.String)">
+        <member name="P:HttpServer.HttpInputItem.Name">
             <summary>
-            return a file extension from an absolute Uri path (or plain filename)
+            Name of item (in lower case).
             </summary>
-            <param name="uri"></param>
-            <returns></returns>
         </member>
-        <member name="P:HttpServer.HttpModules.FileModule.MimeTypes">
+        <member name="P:HttpServer.HttpInputItem.Value">
             <summary>
-            List with all mime-type that are allowed. 
+            Returns the first value, or null if no value exist.
             </summary>
-            <remarks>All other mime types will result in a Forbidden http status code.</remarks>
         </member>
-        <member name="P:HttpServer.HttpModules.FileModule.ForbiddenChars">
+        <member name="P:HttpServer.HttpInputItem.LastValue">
             <summary>
-            characters that may not  exist in a path.
+            Returns the last value, or null if no value exist.
             </summary>
-            <example>
-            fileMod.ForbiddenChars = new string[]{ "\\", "..", ":" };
-            </example>
         </member>
-        <member name="T:HttpServer.Exceptions.InternalServerException">
+        <member name="P:HttpServer.HttpInputItem.Values">
             <summary>
-            The server encountered an unexpected condition which prevented it from fulfilling the request.
+            Returns the list with values.
             </summary>
         </member>
-        <member name="M:HttpServer.Exceptions.InternalServerException.#ctor">
+        <member name="P:HttpServer.HttpInputItem.HttpServer#IHttpInput#Item(System.String)">
             <summary>
-            Initializes a new instance of the <see cref="T:HttpServer.Exceptions.InternalServerException"/> class.
+            
             </summary>
+            <param name="name">name in lower case</param>
+            <returns></returns>
         </member>
-        <member name="M:HttpServer.Exceptions.InternalServerException.#ctor(System.String)">
+        <member name="T:HttpServer.Helpers.ResourceManager">
+            <summary>Class to handle loading of resource files</summary>
+        </member>
+        <member name="M:HttpServer.Helpers.ResourceManager.#ctor">
             <summary>
-            Initializes a new instance of the <see cref="T:HttpServer.Exceptions.InternalServerException"/> class.
+            Initializes a new instance of the <see cref="T:HttpServer.Helpers.ResourceManager"/> class.
             </summary>
-            <param name="message">error message.</param>
         </member>
-        <member name="M:HttpServer.Exceptions.InternalServerException.#ctor(System.String,System.Exception)">
+        <member name="M:HttpServer.Helpers.ResourceManager.#ctor(HttpServer.ILogWriter)">
             <summary>
-            Initializes a new instance of the <see cref="T:HttpServer.Exceptions.InternalServerException"/> class.
+            Initializes a new instance of the <see cref="T:HttpServer.Helpers.ResourceManager"/> class.
             </summary>
-            <param name="message">error message.</param>
-            <param name="inner">inner exception.</param>
+            <param name="writer">logger.</param>
         </member>
-        <member name="T:HttpServer.Rules.RegexRedirectRule">
+        <member name="M:HttpServer.Helpers.ResourceManager.LoadResources(System.String,System.Reflection.Assembly,System.String)">
             <summary>
-            Class to make dynamic binding of redirects. Instead of having to specify a number of similar redirect rules
-            a regular expression can be used to identify redirect URLs and their targets.
+            Loads resources from a namespace in the given assembly to an URI
             </summary>
-            <example>
-            <![CDATA[
-            new RegexRedirectRule("/(?<target>[a-z0-9]+)", "/users/${target}?find=true", RegexOptions.IgnoreCase)
-            ]]>
-            </example>
+            <param name="toUri">The URI to map the resources to</param>
+            <param name="fromAssembly">The assembly in which the resources reside</param>
+            <param name="fromNamespace">The namespace from which to load the resources</param>
+            <usage>
+            <code>
+            resourceLoader.LoadResources("/user/", typeof(User).Assembly, "MyLib.Models.User.Views");
+            </code>
+            Will make the resource MyLib.Models.User.Views.list.Haml accessible via /user/list.haml or /user/list/
+            </usage>
+            <returns>The amount of loaded files, giving you the possibility of making sure the resources needed gets loaded</returns>
+            <exception cref="T:System.InvalidOperationException">If a resource has already been mapped to an uri</exception>
         </member>
-        <member name="M:HttpServer.Rules.RegexRedirectRule.#ctor(System.String,System.String)">
+        <member name="M:HttpServer.Helpers.ResourceManager.GetResourceStream(System.String)">
             <summary>
-            Initializes a new instance of the <see cref="T:HttpServer.Rules.RegexRedirectRule"/> class.
+            Retrieves a stream for the specified resource path if loaded otherwise null
             </summary>
-            <param name="fromUrlExpression">Expression to match URL</param>
-            <param name="toUrlExpression">Expression to generate URL</param>
-            <example>
-            <![CDATA[
-            server.Add(new RegexRedirectRule("/(?<first>[a-zA-Z0-9]+)", "/user/${first}"));
-            Result of ie. /employee1 will then be /user/employee1
-            ]]>
-            </example>
+            <param name="path">Path to the resource to retrieve a stream for</param>
+            <returns>A stream or null if the resource couldn't be found</returns>
         </member>
-        <member name="M:HttpServer.Rules.RegexRedirectRule.#ctor(System.String,System.String,System.Text.RegularExpressions.RegexOptions)">
+        <member name="M:HttpServer.Helpers.ResourceManager.GetFiles(System.String)">
             <summary>
-            Initializes a new instance of the <see cref="T:HttpServer.Rules.RegexRedirectRule"/> class.
+            Fetch all files from the resource that matches the specified arguments.
             </summary>
-            <param name="fromUrlExpression">Expression to match URL</param>
-            <param name="toUrlExpression">Expression to generate URL</param>
-            <param name="options">Regular expression options to use, can be null</param>
-            <example>
-            <![CDATA[
-            server.Add(new RegexRedirectRule("/(?<first>[a-zA-Z0-9]+)", "/user/{first}", RegexOptions.IgnoreCase));
-            Result of ie. /employee1 will then be /user/employee1
-            ]]>
-            </example>
+            <param name="path">The path to the resource to extract</param>
+            <returns>
+            a list of files if found; or an empty array if no files are found.
+            </returns>
+            <exception cref="T:System.ArgumentException">Search path must end with an asterisk for finding arbitrary files</exception>
         </member>
-        <member name="M:HttpServer.Rules.RegexRedirectRule.#ctor(System.String,System.String,System.Text.RegularExpressions.RegexOptions,System.Boolean)">
+        <member name="M:HttpServer.Helpers.ResourceManager.GetFiles(System.String,System.String)">
             <summary>
-            Initializes a new instance of the <see cref="T:HttpServer.Rules.RegexRedirectRule"/> class.
+            Fetch all files from the resource that matches the specified arguments.
             </summary>
-            <param name="fromUrlExpression">Expression to match URL</param>
-            <param name="toUrlExpression">Expression to generate URL</param>
-            <param name="options">Regular expression options to apply</param>
-            <param name="shouldRedirect"><c>true</c> if request should be redirected, <c>false</c> if the request URI should be replaced.</param>
-            <example>
-            <![CDATA[
-            server.Add(new RegexRedirectRule("/(?<first>[a-zA-Z0-9]+)", "/user/${first}", RegexOptions.None));
-            Result of ie. /employee1 will then be /user/employee1
-            ]]>
-            </example>
-            <exception cref="T:System.ArgumentNullException">Argument is null.</exception>
-            <seealso cref="P:HttpServer.Rules.RedirectRule.ShouldRedirect"/>
+            <param name="path">Where the file should reside.</param>
+            <param name="filename">Files to check</param>
+            <returns>
+            a list of files if found; or an empty array if no files are found.
+            </returns>
         </member>
-        <member name="M:HttpServer.Rules.RegexRedirectRule.Process(HttpServer.IHttpRequest,HttpServer.IHttpResponse)">
+        <member name="M:HttpServer.Helpers.ResourceManager.ContainsResource(System.String)">
             <summary>
-            Process the incoming request.
+            Returns whether or not the loader has an instance of the file requested
             </summary>
-            <param name="request">incoming HTTP request</param>
-            <param name="response">outgoing HTTP response</param>
-            <returns>true if response should be sent to the browser directly (no other rules or modules will be processed).</returns>
-            <remarks>
-            returning true means that no modules will get the request. Returning true is typically being done
-            for redirects.
-            </remarks>
-            <exception cref="T:System.ArgumentNullException">If request or response is null</exception>
+            <param name="filename">The name of the template/file</param>
+            <returns>True if the loader can provide the file</returns>
         </member>
         <member name="T:HttpServer.Parser.RequestLineEventArgs">
             <summary>
@@ -3664,908 +3707,849 @@
             Gets or sets requested URI path.
             </summary>
         </member>
-        <member name="T:HttpServer.RealmHandler">
+        <member name="T:HttpServer.IHttpContextHandler">
+            <summary>
+            Class that receives Requests from a <see cref="T:HttpServer.IHttpClientContext"/>.
+            </summary>
+        </member>
+        <member name="M:HttpServer.IHttpContextHandler.ClientDisconnected(HttpServer.IHttpClientContext,System.Net.Sockets.SocketError)">
+            <summary>
+            Client have been disconnected.
+            </summary>
+            <param name="client">Client that was disconnected.</param>
+            <param name="error">Reason</param>
+            <see cref="T:HttpServer.IHttpClientContext"/>
+        </member>
+        <member name="M:HttpServer.IHttpContextHandler.RequestReceived(HttpServer.IHttpClientContext,HttpServer.IHttpRequest)">
+            <summary>
+            Invoked when a client context have received a new HTTP request
+            </summary>
+            <param name="client">Client that received the request.</param>
+            <param name="request">Request that was received.</param>
+            <see cref="T:HttpServer.IHttpClientContext"/>
+        </member>
+        <member name="T:HttpServer.HttpForm">
+            <summary>Container for posted form data</summary>
+        </member>
+        <member name="F:HttpServer.HttpForm.EmptyForm">
+            <summary>Instance to help mark a non-initialized form</summary>
+        </member>
+        <member name="M:HttpServer.HttpForm.#ctor">
+            <summary>Initializes a form container with the specified name</summary>
+        </member>
+        <member name="M:HttpServer.HttpForm.#ctor(HttpServer.HttpInput)">
+            <summary>
+            Makes a deep copy of the input
+            </summary>
+            <param name="input">The input to copy</param>
+        </member>
+        <member name="M:HttpServer.HttpForm.AddFile(HttpServer.HttpFile)">
+            <summary>
+            Adds a file to the collection of posted files
+            </summary>
+            <param name="file">The file to add</param>
+            <exception cref="T:System.ArgumentException">If the file is already added</exception>
+            <exception cref="T:System.ArgumentNullException">If file is null</exception>
+            <exception cref="T:System.InvalidOperationException">If the instance is HttpForm.EmptyForm which cannot be modified</exception>
+        </member>
+        <member name="M:HttpServer.HttpForm.ContainsFile(System.String)">
+            <summary>
+            Checks if the form contains a specified file
+            </summary>
+            <param name="name">Field name of the file parameter</param>
+            <returns>True if the file exists</returns>
+            <exception cref="T:System.InvalidOperationException">If the instance is HttpForm.EmptyForm which cannot be modified</exception>
+        </member>
+        <member name="M:HttpServer.HttpForm.GetFile(System.String)">
+            <summary>
+            Retrieves a file held by by the form
+            </summary>
+            <param name="name">The identifier of the file</param>
+            <returns>The requested file or null if the file was not found</returns>
+            <exception cref="T:System.ArgumentNullException">If name is null or empty</exception>
+            <exception cref="T:System.InvalidOperationException">If the instance is HttpForm.EmptyForm which cannot be modified</exception>
+        </member>
+        <member name="M:HttpServer.HttpForm.Clear">
+            <summary>Disposes all held HttpFile's and resets values</summary>
+        </member>
+        <member name="P:HttpServer.HttpForm.Files">
+            <summary>
+            Retrieves the number of files added to the <see cref="T:HttpServer.HttpForm"/>
+            </summary>
+            <returns>0 if no files are added</returns>
+        </member>
+        <member name="T:HttpServer.HttpClientContext">
+            <summary>
+            Contains a connection to a browser/client.
+            </summary>
+            <remarks>
+            Remember to <see cref="M:HttpServer.HttpClientContext.Start"/> after you have hooked the <see cref="E:HttpServer.HttpClientContext.RequestReceived"/> event.
+            </remarks>
+            TODO: Maybe this class should be broken up into HttpClientChannel and HttpClientContext?
+        </member>
+        <member name="M:HttpServer.HttpClientContext.#ctor(System.Boolean,System.Net.IPEndPoint,System.IO.Stream,HttpServer.IRequestParserFactory,System.Int32,System.Net.Sockets.Socket)">
+            <summary>
+            Initializes a new instance of the <see cref="T:HttpServer.HttpClientContext"/> class.
+            </summary>
+            <param name="secured">true if the connection is secured (SSL/TLS)</param>
+            <param name="remoteEndPoint">client that connected.</param>
+            <param name="stream">Stream used for communication</param>
+            <param name="parserFactory">Used to create a <see cref="T:HttpServer.IHttpRequestParser"/>.</param>
+            <param name="bufferSize">Size of buffer to use when reading data. Must be at least 4096 bytes.</param>
+            <exception cref="T:System.Net.Sockets.SocketException">If <see cref="M:System.Net.Sockets.Socket.BeginReceive(System.Byte[],System.Int32,System.Int32,System.Net.Sockets.SocketFlags,System.AsyncCallback,System.Object)"/> fails</exception>
+            <exception cref="T:System.ArgumentException">Stream must be writable and readable.</exception>
+        </member>
+        <member name="M:HttpServer.HttpClientContext.OnBodyBytesReceived(System.Object,HttpServer.Parser.BodyEventArgs)">
+            <summary>
+            Process incoming body bytes.
+            </summary>
+            <param name="sender"><see cref="T:HttpServer.IHttpRequestParser"/></param>
+            <param name="e">Bytes</param>
+        </member>
+        <member name="M:HttpServer.HttpClientContext.OnHeaderReceived(System.Object,HttpServer.Parser.HeaderEventArgs)">
+            <summary>
+            
+            </summary>
+            <param name="sender"></param>
+            <param name="e"></param>
+        </member>
+        <member name="M:HttpServer.HttpClientContext.Start">
             <summary>
-            Delegate used to find a realm/domain.
+            Start reading content.
             </summary>
-            <param name="domain"></param>
-            <returns></returns>
             <remarks>
-            Realms are used during HTTP Authentication
+            Make sure to call base.Start() if you override this method.
             </remarks>
-            <seealso cref="T:HttpServer.Authentication.AuthenticationModule"/>
-            <seealso cref="T:HttpServer.Authentication.AuthenticationHandler"/>
-        </member>
-        <member name="T:HttpServer.HttpServer">
-            <summary>
-            A complete HTTP server, you need to add a module to it to be able to handle incoming requests.
-            </summary>
-            <example>
-            <code>
-            // this small example will add two web site modules, thus handling
-            // two different sites. In reality you should add Controller modules or something
-            // two the website modules to be able to handle different requests.
-            HttpServer server = new HttpServer();
-            server.Add(new WebSiteModule("www.gauffin.com", "Gauffin Telecom AB"));
-            server.Add(new WebSiteModule("www.vapadi.se", "Remote PBX"));
-            
-            // start regular http
-            server.Start(IPAddress.Any, 80);
-            
-            // start https
-            server.Start(IPAddress.Any, 443, myCertificate);
-            </code>
-            </example>
-            <seealso cref="T:HttpServer.HttpModules.HttpModule"/>
-            <seealso cref="T:HttpServer.HttpModules.FileModule"/>
-            <seealso cref="T:HttpServer.HttpListener"/>
         </member>
-        <member name="M:HttpServer.HttpServer.#ctor(HttpServer.IComponentProvider)">
+        <member name="M:HttpServer.HttpClientContext.Cleanup">
             <summary>
-            Initializes a new instance of the <see cref="T:HttpServer.HttpServer"/> class.
+            Clean up context.
             </summary>
-            <param name="provider">Used to get all components used in the server..</param>
+            <remarks>
+            Make sure to call base.Cleanup() if you override the method.
+            </remarks>
         </member>
-        <member name="M:HttpServer.HttpServer.#ctor">
+        <member name="M:HttpServer.HttpClientContext.Disconnect(System.Net.Sockets.SocketError)">
             <summary>
-            Initializes a new instance of the <see cref="T:HttpServer.HttpServer"/> class.
+            Disconnect from client
             </summary>
+            <param name="error">error to report in the <see cref="E:HttpServer.HttpClientContext.Disconnected"/> event.</param>
         </member>
-        <member name="M:HttpServer.HttpServer.#ctor(HttpServer.FormDecoders.FormDecoderProvider)">
+        <member name="M:HttpServer.HttpClientContext.Respond(System.String,System.Net.HttpStatusCode,System.String,System.String,System.String)">
             <summary>
-            Initializes a new instance of the <see cref="T:HttpServer.HttpServer"/> class.
+            Send a response.
             </summary>
-            <param name="decoderProvider">Form decoders are used to convert different types of posted data to the <see cref="T:HttpServer.HttpInput"/> object types.</param>
-            <seealso cref="T:HttpServer.FormDecoders.IFormDecoder"/>
-            <seealso cref="P:HttpServer.HttpServer.FormDecoderProviders"/>
+            <param name="httpVersion">Either <see cref="F:HttpServer.HttpHelper.HTTP10"/> or <see cref="F:HttpServer.HttpHelper.HTTP11"/></param>
+            <param name="statusCode">HTTP status code</param>
+            <param name="reason">reason for the status code.</param>
+            <param name="body">HTML body contents, can be null or empty.</param>
+            <param name="contentType">A content type to return the body as, i.e. 'text/html' or 'text/plain', defaults to 'text/html' if null or empty</param>
+            <exception cref="T:System.ArgumentException">If <paramref name="httpVersion"/> is invalid.</exception>
         </member>
-        <member name="M:HttpServer.HttpServer.#ctor(HttpServer.Sessions.IHttpSessionStore)">
+        <member name="M:HttpServer.HttpClientContext.Respond(System.String,System.Net.HttpStatusCode,System.String)">
             <summary>
-            Initializes a new instance of the <see cref="T:HttpServer.HttpServer"/> class.
+            Send a response.
             </summary>
-            <param name="sessionStore">A session store is used to save and retrieve sessions</param>
-            <seealso cref="T:HttpServer.Sessions.IHttpSessionStore"/>
+            <param name="httpVersion">Either <see cref="F:HttpServer.HttpHelper.HTTP10"/> or <see cref="F:HttpServer.HttpHelper.HTTP11"/></param>
+            <param name="statusCode">HTTP status code</param>
+            <param name="reason">reason for the status code.</param>
         </member>
-        <member name="M:HttpServer.HttpServer.#ctor(HttpServer.ILogWriter)">
+        <member name="M:HttpServer.HttpClientContext.Respond(System.String)">
             <summary>
-            Initializes a new instance of the <see cref="T:HttpServer.HttpServer"/> class.
+            Send a response.
             </summary>
-            <param name="logWriter">The log writer.</param>
-            <seealso cref="P:HttpServer.HttpServer.LogWriter"/>
+            <exception cref="T:System.ArgumentNullException"></exception>
         </member>
-        <member name="M:HttpServer.HttpServer.#ctor(HttpServer.FormDecoders.FormDecoderProvider,HttpServer.ILogWriter)">
+        <member name="M:HttpServer.HttpClientContext.Send(System.Byte[])">
             <summary>
-            Initializes a new instance of the <see cref="T:HttpServer.HttpServer"/> class.
+            send a whole buffer
             </summary>
-            <param name="decoderProvider">Form decoders are used to convert different types of posted data to the <see cref="T:HttpServer.HttpInput"/> object types.</param>
-            <param name="logWriter">The log writer.</param>
-            <seealso cref="T:HttpServer.FormDecoders.IFormDecoder"/>
-            <seealso cref="P:HttpServer.HttpServer.FormDecoderProviders"/>
-            <seealso cref="P:HttpServer.HttpServer.LogWriter"/>
+            <param name="buffer">buffer to send</param>
+            <exception cref="T:System.ArgumentNullException"></exception>
         </member>
-        <member name="M:HttpServer.HttpServer.#ctor(HttpServer.FormDecoders.FormDecoderProvider,HttpServer.Sessions.IHttpSessionStore,HttpServer.ILogWriter)">
+        <member name="M:HttpServer.HttpClientContext.Send(System.Byte[],System.Int32,System.Int32)">
             <summary>
-            Initializes a new instance of the <see cref="T:HttpServer.HttpServer"/> class.
+            Send data using the stream
             </summary>
-            <param name="decoderProvider">Form decoders are used to convert different types of posted data to the <see cref="T:HttpServer.HttpInput"/> object types.</param>
-            <param name="sessionStore">A session store is used to save and retrieve sessions</param>
-            <param name="logWriter">The log writer.</param>
-            <seealso cref="T:HttpServer.FormDecoders.IFormDecoder"/>
-            <seealso cref="P:HttpServer.HttpServer.FormDecoderProviders"/>
-            <seealso cref="P:HttpServer.HttpServer.LogWriter"/>
-            <seealso cref="T:HttpServer.Sessions.IHttpSessionStore"/>
+            <param name="buffer">Contains data to send</param>
+            <param name="offset">Start position in buffer</param>
+            <param name="size">number of bytes to send</param>
+            <exception cref="T:System.ArgumentNullException"></exception>
+            <exception cref="T:System.ArgumentOutOfRangeException"></exception>
         </member>
-        <member name="M:HttpServer.HttpServer.Add(HttpServer.Rules.IRule)">
+        <member name="E:HttpServer.HttpClientContext.Cleaned">
             <summary>
-            Adds the specified rule.
+            This context have been cleaned, which means that it can be reused.
             </summary>
-            <param name="rule">The rule.</param>
         </member>
-        <member name="M:HttpServer.HttpServer.Add(HttpServer.HttpModules.HttpModule)">
+        <member name="E:HttpServer.HttpClientContext.Started">
             <summary>
-            Add a <see cref="T:HttpServer.HttpModules.HttpModule"/> to the server.
+            Context have been started (a new client have connected)
             </summary>
-            <param name="module">mode to add</param>
         </member>
-        <member name="M:HttpServer.HttpServer.DecodeBody(HttpServer.IHttpRequest)">
+        <member name="P:HttpServer.HttpClientContext.CurrentRequest">
             <summary>
-            Decodes the request body.
+            Overload to specify own type.
             </summary>
-            <param name="request">The request.</param>
-            <exception cref="T:HttpServer.Exceptions.InternalServerException">Failed to decode form data.</exception>
+            <remarks>
+            Must be specified before the context is being used.
+            </remarks>
         </member>
-        <member name="M:HttpServer.HttpServer.ErrorPage(HttpServer.IHttpResponse,System.Net.HttpStatusCode,System.String)">
+        <member name="P:HttpServer.HttpClientContext.Secured">
             <summary>
-            Generate a HTTP error page (that will be added to the response body).
-            response status code is also set.
+            Using SSL or other encryption method.
             </summary>
-            <param name="response">Response that the page will be generated in.</param>
-            <param name="error"><see cref="T:System.Net.HttpStatusCode"/>.</param>
-            <param name="body">response body contents.</param>
         </member>
-        <member name="M:HttpServer.HttpServer.ErrorPage(HttpServer.IHttpResponse,HttpServer.Exceptions.HttpException)">
+        <member name="P:HttpServer.HttpClientContext.IsSecured">
             <summary>
-            Generate a HTTP error page (that will be added to the response body).
-            response status code is also set.
+            Using SSL or other encryption method.
             </summary>
-            <param name="response">Response that the page will be generated in.</param>
-            <param name="err">exception.</param>
         </member>
-        <member name="M:HttpServer.HttpServer.GetRealm(HttpServer.IHttpRequest)">
+        <member name="P:HttpServer.HttpClientContext.LogWriter">
             <summary>
-            Realms are used by the <see cref="T:HttpServer.Authentication.AuthenticationModule"/>s.
+            Specify which logger to use.
             </summary>
-            <param name="request">HTTP request</param>
-            <returns>domain/realm.</returns>
         </member>
-        <member name="M:HttpServer.HttpServer.HandleRequest(HttpServer.IHttpClientContext,HttpServer.IHttpRequest,HttpServer.IHttpResponse,HttpServer.Sessions.IHttpSession)">
+        <member name="P:HttpServer.HttpClientContext.Stream">
             <summary>
-            Process an incoming request.
+            Gets or sets the network stream.
             </summary>
-            <param name="context">connection to client</param>
-            <param name="request">request information</param>
-            <param name="response">response that should be filled</param>
-            <param name="session">session information</param>
         </member>
-        <member name="M:HttpServer.HttpServer.OnClientDisconnected(HttpServer.IHttpClientContext,System.Net.Sockets.SocketError)">
+        <member name="P:HttpServer.HttpClientContext.RemoteAddress">
             <summary>
-            Can be overloaded to implement stuff when a client have been connected.
+            Gets or sets IP address that the client connected from.
             </summary>
-            <remarks>
-            Default implementation does nothing.
-            </remarks>
-            <param name="client">client that disconnected</param>
-            <param name="error">disconnect reason</param>
         </member>
-        <member name="M:HttpServer.HttpServer.ProcessAuthentication(HttpServer.IHttpRequest,HttpServer.IHttpResponse,HttpServer.Sessions.IHttpSession)">
+        <member name="P:HttpServer.HttpClientContext.RemotePort">
             <summary>
-            Handle authentication
+            Gets or sets port that the client connected from.
             </summary>
-            <param name="request"></param>
-            <param name="response"></param>
-            <param name="session"></param>
-            <returns>true if request can be handled; false if not.</returns>
-            <exception cref="T:HttpServer.Exceptions.BadRequestException">Invalid authorization header</exception>
         </member>
-        <member name="M:HttpServer.HttpServer.RequestAuthentication(HttpServer.Authentication.AuthenticationModule,HttpServer.IHttpRequest,HttpServer.IHttpResponse)">
+        <member name="E:HttpServer.HttpClientContext.Disconnected">
             <summary>
-            Will request authentication.
+            The context have been disconnected.
             </summary>
             <remarks>
-            Sends respond to client, nothing else can be done with the response after this.
+            Event can be used to clean up a context, or to reuse it.
             </remarks>
-            <param name="mod"></param>
-            <param name="request"></param>
-            <param name="response"></param>
         </member>
-        <member name="M:HttpServer.HttpServer.OnRequest(System.Object,HttpServer.RequestEventArgs)">
+        <member name="E:HttpServer.HttpClientContext.RequestReceived">
             <summary>
-            Received from a <see cref="T:HttpServer.IHttpClientContext"/> when a request have been parsed successfully.
+            A request have been received in the context.
             </summary>
-            <param name="source"><see cref="T:HttpServer.IHttpClientContext"/> that received the request.</param>
-            <param name="args">The request.</param>
         </member>
-        <member name="M:HttpServer.HttpServer.ProcessRequestWrapper(HttpServer.IHttpClientContext,HttpServer.IHttpRequest)">
+        <member name="T:HttpServer.Helpers.XmlHelper">
             <summary>
-            To be able to track request count.
+            Helpers to make XML handling easier
             </summary>
-            <param name="context"></param>
-            <param name="request"></param>
         </member>
-        <member name="M:HttpServer.HttpServer.Start(System.Net.IPAddress,System.Int32)">
+        <member name="M:HttpServer.Helpers.XmlHelper.Serialize(System.Object)">
             <summary>
-            Start the web server using regular HTTP.
+            Serializes object to XML.
             </summary>
-            <param name="address">IP Address to listen on, use <c>IpAddress.Any </c>to accept connections on all IP addresses/network cards.</param>
-            <param name="port">Port to listen on. 80 can be a good idea =)</param>
-            <exception cref="T:System.ArgumentNullException"><c>address</c> is null.</exception>
-            <exception cref="T:System.ArgumentException">Port must be a positive number.</exception>
+            <param name="value">object to serialize.</param>
+            <returns>XML</returns>
+            <remarks>
+            Removes name spaces and adds indentation
+            </remarks>
         </member>
-        <member name="M:HttpServer.HttpServer.Start(System.Net.IPAddress,System.Int32,System.Security.Cryptography.X509Certificates.X509Certificate)">
+        <member name="M:HttpServer.Helpers.XmlHelper.Deserialize``1(System.String)">
             <summary>
-            Accept secure connections.
+            Create an object from a XML string
             </summary>
-            <param name="address">IP Address to listen on, use <see cref="F:System.Net.IPAddress.Any"/> to accept connections on all IP Addresses / network cards.</param>
-            <param name="port">Port to listen on. 80 can be a good idea =)</param>
-            <param name="certificate">Certificate to use</param>
-            <exception cref="T:System.ArgumentNullException"><c>address</c> is null.</exception>
-            <exception cref="T:System.ArgumentException">Port must be a positive number.</exception>
+            <typeparam name="T">Type of object</typeparam>
+            <param name="xml">XML string</param>
+            <returns>object</returns>
         </member>
-        <member name="M:HttpServer.HttpServer.Stop">
+        <member name="M:HttpServer.FormDecoders.HttpMultipart.ReadLine">
             <summary>
-            shut down the server and listeners
+            
             </summary>
+            <returns></returns>
+            <exception cref="T:System.ArgumentOutOfRangeException"></exception>
+            <exception cref="T:System.ObjectDisposedException"></exception>
         </member>
-        <member name="M:HttpServer.HttpServer.WriteLog(HttpServer.LogPrio,System.String)">
+        <member name="T:HttpServer.FormDecoders.HttpMultipart.Element">
+            <summary>Represents a field in a multipart form</summary>
+        </member>
+        <member name="T:HttpServer.Check">
             <summary>
-            write an entry to the log file
+            Small design by contract implementation.
             </summary>
-            <param name="prio">importance of the message</param>
-            <param name="message">log message</param>
         </member>
-        <member name="M:HttpServer.HttpServer.WriteLog(System.Object,HttpServer.LogPrio,System.String)">
+        <member name="M:HttpServer.Check.NotEmpty(System.String,System.String)">
             <summary>
-            write an entry to the log file
+            Check whether a parameter is empty.
             </summary>
-            <param name="source">object that wrote the message</param>
-            <param name="prio">importance of the message</param>
-            <param name="message">log message</param>
+            <param name="value">Parameter value</param>
+            <param name="parameterOrErrorMessage">Parameter name, or error description.</param>
+            <exception cref="T:System.ArgumentException">value is empty.</exception>
         </member>
-        <member name="P:HttpServer.HttpServer.Current">
+        <member name="M:HttpServer.Check.Require(System.Object,System.String)">
             <summary>
-            Server that is handling the current request.
+            Checks whether a parameter is null.
             </summary>
-            <remarks>
-            Will be set as soon as a request arrives to the <see cref="T:HttpServer.HttpServer"/> object.
-            </remarks>
+            <param name="value">Parameter value</param>
+            <param name="parameterOrErrorMessage">Parameter name, or error description.</param>
+            <exception cref="T:System.ArgumentNullException">value is null.</exception>
         </member>
-        <member name="P:HttpServer.HttpServer.AuthenticationModules">
+        <member name="M:HttpServer.Check.Min(System.Int32,System.Object,System.String)">
             <summary>
-            Modules used for authentication. The module that is is added first is used as 
-            the default authentication module.
+            Checks whether a parameter is null.
             </summary>
-            <remarks>Use the corresponding property
-            in the <see cref="T:HttpServer.HttpModules.WebSiteModule"/> if you are using multiple websites.</remarks>
+            <param name="minValue"></param>
+            <param name="value">Parameter value</param>
+            <param name="parameterOrErrorMessage">Parameter name, or error description.</param>
+            <exception cref="T:System.ArgumentException">value is null.</exception>
         </member>
-        <member name="P:HttpServer.HttpServer.FormDecoderProviders">
+        <member name="T:HttpServer.LogPrio">
             <summary>
-            Form decoder providers are used to decode request body (which normally contains form data).
+            Priority for log entries
             </summary>
+            <seealso cref="T:HttpServer.ILogWriter"/>
         </member>
-        <member name="P:HttpServer.HttpServer.ServerName">
+        <member name="F:HttpServer.LogPrio.Trace">
             <summary>
-            Server name sent in HTTP responses.
+            Very detailed logs to be able to follow the flow of the program.
             </summary>
-            <remarks>
-            Do NOT include version in name, since it makes it 
-            easier for hackers.
-            </remarks>
         </member>
-        <member name="P:HttpServer.HttpServer.SessionCookieName">
+        <member name="F:HttpServer.LogPrio.Debug">
             <summary>
-            Name of cookie where session id is stored.
+            Logs to help debug errors in the application
             </summary>
         </member>
-        <member name="P:HttpServer.HttpServer.LogWriter">
+        <member name="F:HttpServer.LogPrio.Info">
             <summary>
-            Specified where logging should go.
+            Information to be able to keep track of state changes etc.
             </summary>
-            <seealso cref="T:HttpServer.NullLogWriter"/>
-            <seealso cref="T:HttpServer.ConsoleLogWriter"/>
-            <seealso cref="P:HttpServer.HttpServer.LogWriter"/>
         </member>
-        <member name="P:HttpServer.HttpServer.BackLog">
+        <member name="F:HttpServer.LogPrio.Warning">
             <summary>
-            Number of connections that can wait to be accepted by the server.
+            Something did not go as we expected, but it's no problem.
             </summary>
-            <remarks>Default is 10.</remarks>
         </member>
-        <member name="P:HttpServer.HttpServer.MaxRequestCount">
+        <member name="F:HttpServer.LogPrio.Error">
             <summary>
-            Gets or sets maximum number of allowed simultaneous requests.
+            Something that should not fail failed, but we can still keep
+            on going.
             </summary>
-            <remarks>
-            <para>
-            This property is useful in busy systems. The HTTP server
-            will start queuing new requests if this limit is hit, instead
-            of trying to process all incoming requests directly.
-            </para>
-            <para>
-            The default number if allowed simultaneous requests are 10.
-            </para>
-            </remarks>
         </member>
-        <member name="P:HttpServer.HttpServer.MaxQueueSize">
+        <member name="F:HttpServer.LogPrio.Fatal">
             <summary>
-            Gets or sets maximum number of requests queuing to be handled.
+            Something failed, and we cannot handle it properly.
             </summary>
-            <remarks>
-            <para>
-            The WebServer will start turning requests away if response code
-            <see cref="F:System.Net.HttpStatusCode.ServiceUnavailable"/> to indicate that the server
-            is too busy to be able to handle the request.
-            </para>
-            </remarks>
         </member>
-        <member name="E:HttpServer.HttpServer.RealmWanted">
+        <member name="T:HttpServer.ILogWriter">
             <summary>
-            Realms are used during HTTP authentication.
-            Default realm is same as server name.
+            Interface used to write to log files.
             </summary>
         </member>
-        <member name="E:HttpServer.HttpServer.ExceptionThrown">
+        <member name="M:HttpServer.ILogWriter.Write(System.Object,HttpServer.LogPrio,System.String)">
             <summary>
-            Let's to receive unhandled exceptions from the threads.
+            Write an entry to the log file.
             </summary>
-            <remarks>
-            Exceptions will be thrown during debug mode if this event is not used,
-            exceptions will be printed to console and suppressed during release mode.
-            </remarks>
+            <param name="source">object that is writing to the log</param>
+            <param name="priority">importance of the log message</param>
+            <param name="message">the message</param>
         </member>
-        <member name="T:HttpServer.Exceptions.UnauthorizedException">
+        <member name="T:HttpServer.ConsoleLogWriter">
             <summary>
-            The request requires user authentication. The response MUST include a 
-            WWW-Authenticate header field (section 14.47) containing a challenge 
-            applicable to the requested resource. 
-            
-            The client MAY repeat the request with a suitable Authorization header 
-            field (section 14.8). If the request already included Authorization 
-            credentials, then the 401 response indicates that authorization has been 
-            refused for those credentials. If the 401 response contains the same challenge 
-            as the prior response, and the user agent has already attempted authentication 
-            at least once, then the user SHOULD be presented the entity that was given in the response, 
-            since that entity might include relevant diagnostic information. 
-            
-            HTTP access authentication is explained in rfc2617:
-            http://www.ietf.org/rfc/rfc2617.txt
-            
-            (description is taken from 
-            http://www.submissionchamber.com/help-guides/error-codes.php#sec10.4.2)
+            This class writes to the console. It colors the output depending on the logprio and includes a 3-level stacktrace (in debug mode)
             </summary>
+            <seealso cref="T:HttpServer.ILogWriter"/>
         </member>
-        <member name="M:HttpServer.Exceptions.UnauthorizedException.#ctor">
+        <member name="F:HttpServer.ConsoleLogWriter.Instance">
             <summary>
-            Create a new unauhtorized exception.
+            The actual instance of this class.
             </summary>
-            <seealso cref="T:HttpServer.Exceptions.UnauthorizedException"/>
         </member>
-        <member name="M:HttpServer.Exceptions.UnauthorizedException.#ctor(System.String,System.Exception)">
+        <member name="M:HttpServer.ConsoleLogWriter.Write(System.Object,HttpServer.LogPrio,System.String)">
             <summary>
-            Create a new unauhtorized exception.
+            Logwriters the specified source.
             </summary>
-            <param name="message">reason to why the request was unauthorized.</param>
-            <param name="inner">inner exception</param>
+            <param name="source">object that wrote the logentry.</param>
+            <param name="prio">Importance of the log message</param>
+            <param name="message">The message.</param>
         </member>
-        <member name="M:HttpServer.Exceptions.UnauthorizedException.#ctor(System.String)">
+        <member name="M:HttpServer.ConsoleLogWriter.GetColor(HttpServer.LogPrio)">
             <summary>
-            Create a new unauhtorized exception.
+            Get color for the specified logprio
             </summary>
-            <param name="message">reason to why the request was unauthorized.</param>
+            <param name="prio">prio for the log entry</param>
+            <returns>A <see cref="T:System.ConsoleColor"/> for the prio</returns>
         </member>
-        <member name="T:HttpServer.ContentType">
+        <member name="T:HttpServer.NullLogWriter">
             <summary>
-            Lists content type mime types.
+            Default log writer, writes everything to null (nowhere).
             </summary>
+            <seealso cref="T:HttpServer.ILogWriter"/>
         </member>
-        <member name="F:HttpServer.ContentType.Text">
+        <member name="F:HttpServer.NullLogWriter.Instance">
             <summary>
-            text/plain
+            The logging instance.
             </summary>
         </member>
-        <member name="F:HttpServer.ContentType.Html">
+        <member name="M:HttpServer.NullLogWriter.Write(System.Object,HttpServer.LogPrio,System.String)">
             <summary>
-            text/haml
+            Writes everything to null
             </summary>
+            <param name="source">object that wrote the log entry.</param>
+            <param name="prio">Importance of the log message</param>
+            <param name="message">The message.</param>
         </member>
-        <member name="F:HttpServer.ContentType.Javascript">
+        <member name="T:HttpServer.HttpResponse">
             <summary>
-            content type for javascript documents = application/javascript
+            Response that is sent back to the web browser / client.
             </summary>
             <remarks>
             <para>
-            RFC 4329 states that text/javascript have been superseeded by
-            application/javascript. You might still want to check browser versions
-            since older ones do not support application/javascript.
+            A response can be sent if different ways. The easiest one is
+            to just fill the Body stream with content, everything else
+            will then be taken care of by the framework. The default content-type
+            is text/html, you should change it if you send anything else.
+            </para><para>
+            The second and slightly more complex way is to send the response
+            as parts. Start with sending the header using the SendHeaders method and 
+            then you can send the body using SendBody method, but do not forget
+            to set <see cref="P:HttpServer.HttpResponse.ContentType"/> and <see cref="P:HttpServer.HttpResponse.ContentLength"/> before doing so.
             </para>
-            <para>Browser support: http://krijnhoetmer.nl/stuff/javascript/mime-types/</para>
             </remarks>
-        </member>
-        <member name="F:HttpServer.ContentType.Xml">
-            <summary>
-            text/xml
-            </summary>
-        </member>
-        <member name="T:HttpServer.ContentTypes">
-            <summary>
-            A list of content types
-            </summary>
-        </member>
-        <member name="M:HttpServer.ContentTypes.#ctor(System.String)">
-            <summary>
+            <example>
+            <code>
+            // Example using response body.
+            class MyModule : HttpModule
+            {
+            		public override bool Process(IHttpRequest request, IHttpResponse response, IHttpSession session)
+            		{
+            			StreamWriter writer = new StreamWriter(response.Body);
+            			writer.WriteLine("Hello dear World!");
+            			writer.Flush();
             
-            </summary>
-            <param name="types">Semicolon separated content types.</param>
+            			// return true to tell webserver that we've handled the url
+            			return true;
+            		}
+            }
+            </code>
+            </example>
+            todo: add two examples, using SendHeaders/SendBody and just the Body stream.
         </member>
-        <member name="M:HttpServer.ContentTypes.GetEnumerator">
+        <member name="M:HttpServer.HttpResponse.#ctor(HttpServer.IHttpClientContext,HttpServer.IHttpRequest)">
             <summary>
-            Returns an enumerator that iterates through a collection.
+            Initializes a new instance of the <see cref="T:HttpServer.IHttpResponse"/> class.
             </summary>
-            <returns>
-            An <see cref="T:System.Collections.IEnumerator"/> object that can be used to iterate through the collection.
-            </returns>
+            <param name="context">Client that send the <see cref="T:HttpServer.IHttpRequest"/>.</param>
+            <param name="request">Contains information of what the client want to receive.</param>
+            <exception cref="T:System.ArgumentException"><see cref="P:HttpServer.IHttpRequest.HttpVersion"/> cannot be empty.</exception>
         </member>
-        <member name="M:HttpServer.ContentTypes.Contains(System.String)">
+        <member name="M:HttpServer.HttpResponse.#ctor(HttpServer.IHttpClientContext,System.String,HttpServer.ConnectionType)">
             <summary>
-            Searches for the specified type
+            Initializes a new instance of the <see cref="T:HttpServer.IHttpResponse"/> class.
             </summary>
-            <param name="type">Can also be a part of a type (searching for "xml" would return true for "application/xml").</param>
-            <returns>true if type was found.</returns>
+            <param name="context">Client that send the <see cref="T:HttpServer.IHttpRequest"/>.</param>
+            <param name="httpVersion">Version of HTTP protocol that the client uses.</param>
+            <param name="connectionType">Type of HTTP connection used.</param>
         </member>
-        <member name="P:HttpServer.ContentTypes.First">
+        <member name="M:HttpServer.HttpResponse.AddHeader(System.String,System.String)">
             <summary>
-            Get this first content type.
+            Add another header to the document.
             </summary>
+            <param name="name">Name of the header, case sensitive, use lower cases.</param>
+            <param name="value">Header values can span over multiple lines as long as each line starts with a white space. New line chars should be \r\n</param>
+            <exception cref="T:System.InvalidOperationException">If headers already been sent.</exception>
+            <exception cref="T:System.ArgumentException">If value conditions have not been met.</exception>
+            <remarks>Adding any header will override the default ones and those specified by properties.</remarks>
         </member>
-        <member name="P:HttpServer.ContentTypes.Item(System.String)">
+        <member name="M:HttpServer.HttpResponse.Send">
             <summary>
-            Fetch a content type
+            Send headers and body to the browser.
             </summary>
-            <param name="type">Part of type ("xml" would return "application/xml")</param>
-            <returns></returns>
-            <remarks>All content types are in lower case.</remarks>
+            <exception cref="T:System.InvalidOperationException">If content have already been sent.</exception>
         </member>
-        <member name="T:HttpServer.Sessions.MemorySessionStore">
+        <member name="M:HttpServer.HttpResponse.SendBody(System.Byte[],System.Int32,System.Int32)">
             <summary>
-            Session store using memory for each session.
+            Make sure that you have specified <see cref="P:HttpServer.HttpResponse.ContentLength"/> and sent the headers first.
             </summary>
+            <param name="buffer"></param>
+            <exception cref="T:System.InvalidOperationException">If headers have not been sent.</exception>
+            <see cref="M:HttpServer.HttpResponse.SendHeaders"/>
+            <param name="offset">offset of first byte to send</param>
+            <param name="count">number of bytes to send.</param>
+            <seealso cref="M:HttpServer.HttpResponse.Send"/>
+            <seealso cref="M:HttpServer.HttpResponse.SendHeaders"/>
+            <remarks>This method can be used if you want to send body contents without caching them first. This
+            is recommended for larger files to keep the memory usage low.</remarks>
         </member>
-        <member name="M:HttpServer.Sessions.MemorySessionStore.#ctor">
+        <member name="M:HttpServer.HttpResponse.SendBody(System.Byte[])">
             <summary>
-            Initializes the class setting the expirationtimer to clean the session every minute
+            Make sure that you have specified <see cref="P:HttpServer.HttpResponse.ContentLength"/> and sent the headers first.
             </summary>
+            <param name="buffer"></param>
+            <exception cref="T:System.InvalidOperationException">If headers have not been sent.</exception>
+            <see cref="M:HttpServer.HttpResponse.SendHeaders"/>
+            <seealso cref="M:HttpServer.HttpResponse.Send"/>
+            <seealso cref="M:HttpServer.HttpResponse.SendHeaders"/>
+            <remarks>This method can be used if you want to send body contents without caching them first. This
+            is recommended for larger files to keep the memory usage low.</remarks>
         </member>
-        <member name="M:HttpServer.Sessions.MemorySessionStore.Cleanup(System.Object)">
+        <member name="M:HttpServer.HttpResponse.SendHeaders">
             <summary>
-            Delegate for the cleanup timer
+            Send headers to the client.
             </summary>
+            <exception cref="T:System.InvalidOperationException">If headers already been sent.</exception>
+            <seealso cref="M:HttpServer.HttpResponse.AddHeader(System.String,System.String)"/>
+            <seealso cref="M:HttpServer.HttpResponse.Send"/>
+            <seealso cref="M:HttpServer.HttpResponse.SendBody(System.Byte[])"/>
         </member>
-        <member name="M:HttpServer.Sessions.MemorySessionStore.Create">
+        <member name="M:HttpServer.HttpResponse.Redirect(System.Uri)">
             <summary>
-            Creates a new http session
+            Redirect client to somewhere else using the 302 status code.
             </summary>
-            <returns></returns>
+            <param name="uri">Destination of the redirect</param>
+            <exception cref="T:System.InvalidOperationException">If headers already been sent.</exception>
+            <remarks>You can not do anything more with the request when a redirect have been done. This should be your last
+            action.</remarks>
         </member>
-        <member name="M:HttpServer.Sessions.MemorySessionStore.Create(System.String)">
+        <member name="M:HttpServer.HttpResponse.Redirect(System.String)">
             <summary>
-            Creates a new http session with a specific id
+            redirect to somewhere
             </summary>
-            <param name="id">Id used to identify the new cookie..</param>
-            <returns>A <see cref="T:HttpServer.Sessions.IHttpSession"/> object.</returns>
+            <param name="url">where the redirect should go</param>
             <remarks>
-            Id should be generated by the store implementation if it's null or <see cref="F:System.String.Empty"/>.
+            No body are allowed when doing redirects.
             </remarks>
         </member>
-        <member name="M:HttpServer.Sessions.MemorySessionStore.Load(System.String)">
+        <member name="P:HttpServer.HttpResponse.Body">
             <summary>
-            Load an existing session.
+            The body stream is used to cache the body contents
+            before sending everything to the client. It's the simplest
+            way to serve documents.
             </summary>
-            <param name="sessionId"></param>
-            <returns></returns>
         </member>
-        <member name="M:HttpServer.Sessions.MemorySessionStore.Save(HttpServer.Sessions.IHttpSession)">
+        <member name="P:HttpServer.HttpResponse.Chunked">
             <summary>
-            Save an updated session to the store.
+            The chunked encoding modifies the body of a message in order to
+            transfer it as a series of chunks, each with its own size indicator,
+            followed by an OPTIONAL trailer containing entity-header fields. This
+            allows dynamically produced content to be transferred along with the
+            information necessary for the recipient to verify that it has
+            received the full message.
             </summary>
-            <param name="session"></param>
         </member>
-        <member name="M:HttpServer.Sessions.MemorySessionStore.AddUnused(HttpServer.Sessions.IHttpSession)">
+        <member name="P:HttpServer.HttpResponse.ProtocolVersion">
             <summary>
-            We use the flyweight pattern which reuses small objects
-            instead of creating new each time.
+            Defines the version of the HTTP Response for applications where it's required
+            for this to be forced.
             </summary>
-            <param name="session">EmptyLanguageNode (unused) session that should be reused next time Create is called.</param>
         </member>
-        <member name="M:HttpServer.Sessions.MemorySessionStore.Cleanup">
+        <member name="P:HttpServer.HttpResponse.Connection">
             <summary>
-            Remove expired sessions
+            Kind of connection
             </summary>
         </member>
-        <member name="M:HttpServer.Sessions.MemorySessionStore.Remove(System.String)">
+        <member name="P:HttpServer.HttpResponse.Encoding">
             <summary>
-            Remove a session
+            Encoding to use when sending stuff to the client.
             </summary>
-            <param name="sessionId">id of the session.</param>
+            <remarks>Default is UTF8</remarks>
         </member>
-        <member name="P:HttpServer.Sessions.MemorySessionStore.Item(System.String)">
+        <member name="P:HttpServer.HttpResponse.KeepAlive">
             <summary>
-            Load a session from the store
+            Number of seconds to keep connection alive
             </summary>
-            <param name="sessionId"></param>
-            <returns>null if session is not found.</returns>
+            <remarks>Only used if Connection property is set to <see cref="F:HttpServer.ConnectionType.KeepAlive"/>.</remarks>
         </member>
-        <member name="P:HttpServer.Sessions.MemorySessionStore.ExpireTime">
+        <member name="P:HttpServer.HttpResponse.Status">
             <summary>
-            Number of minutes before a session expires.
-            Default is 20 minutes.
+            Status code that is sent to the client.
             </summary>
+            <remarks>Default is <see cref="F:System.Net.HttpStatusCode.OK"/></remarks>
         </member>
-        <member name="T:HttpServer.Helpers.WebHelper">
+        <member name="P:HttpServer.HttpResponse.Reason">
             <summary>
-            Webhelper provides helpers for common tasks in HTML.
+            Information about why a specific status code was used.
             </summary>
         </member>
-        <member name="F:HttpServer.Helpers.WebHelper.JSImplementation">
+        <member name="P:HttpServer.HttpResponse.ContentLength">
             <summary>
-            Used to let the website use different javascript libraries.
-            Default is <see cref="T:HttpServer.Helpers.Implementations.PrototypeImp"/>
+            Size of the body. MUST be specified before sending the header,
+            unless property Chunked is set to true.
             </summary>
         </member>
-        <member name="M:HttpServer.Helpers.WebHelper.AjaxRequest(System.String,System.String,System.String[])">
+        <member name="P:HttpServer.HttpResponse.ContentType">
             <summary>
-            Creates a link that invokes through ajax.
+            Kind of content in the body
             </summary>
-            <param name="url">url to fetch</param>
-            <param name="title">link title</param>
-            <param name="options">
-            optional options in format "key, value, key, value". 
-            Javascript options starts with ':'.
-            </param>
-            <returns>a link tag</returns>
-            <example>
-            WebHelper.AjaxRequest("/users/add/", "Add user", "method:", "post", "onclick", "validate('this');");
-            </example>
+            <remarks>Default type is "text/html"</remarks>
         </member>
-        <member name="M:HttpServer.Helpers.WebHelper.AjaxUpdater(System.String,System.String,System.String,System.String[])">
+        <member name="P:HttpServer.HttpResponse.HeadersSent">
             <summary>
-            Builds a link that updates an element with the fetched ajax content.
+            Headers have been sent to the client-
             </summary>
-            <param name="url">Url to fetch content from</param>
-            <param name="title">link title</param>
-            <param name="targetId">html element to update with the results of the ajax request.</param>
-            <param name="options">optional options in format "key, value, key, value"</param>
-            <returns>A link tag.</returns>
+            <remarks>You can not send any additional headers if they have already been sent.</remarks>
         </member>
-        <member name="M:HttpServer.Helpers.WebHelper.DialogLink(System.String,System.String,System.String[])">
+        <member name="P:HttpServer.HttpResponse.Sent">
             <summary>
-            A link that pop ups a Dialog (overlay div)
+            The whole response have been sent.
             </summary>
-            <param name="url">url to contents of dialog</param>
-            <param name="title">link title</param>
-            <param name="htmlAttributes">name/value of html attributes.</param>
-            <returns>A "a"-tag that popups a dialog when clicked</returns>
-            <example>
-            WebHelper.DialogLink("/user/show/1", "show user", "onmouseover", "alert('booh!');");
-            </example>
         </member>
-        <member name="M:HttpServer.Helpers.WebHelper.CreateDialog(System.String,System.String,System.String[])">
+        <member name="P:HttpServer.HttpResponse.Cookies">
             <summary>
-            Create/Open a dialog box using ajax
+            Cookies that should be created/changed.
             </summary>
-            <param name="url"></param>
-            <param name="title"></param>
-            <param name="parameters"></param>
-            <returns></returns>
         </member>
-        <member name="M:HttpServer.Helpers.WebHelper.CloseDialog">
+        <member name="T:HttpServer.Exceptions.NotFoundException">
             <summary>
-            Close a javascript dialog window/div.
+            The requested resource was not found in the web server.
             </summary>
-            <returns>javascript for closing a dialog.</returns>
-            <see cref="M:HttpServer.Helpers.WebHelper.DialogLink(System.String,System.String,System.String[])"/>
         </member>
-        <member name="M:HttpServer.Helpers.WebHelper.FormStart(System.String,System.String,System.Boolean)">
+        <member name="M:HttpServer.Exceptions.NotFoundException.#ctor(System.String,System.Exception)">
             <summary>
-            Create a &lt;form&gt; tag.
+            Create a new exception
             </summary>
-            <param name="name">name of form</param>
-            <param name="action">action to invoke on submit</param>
-            <param name="isAjax">form should be posted as ajax</param>
-            <returns>html code</returns>
-            <example>
-            WebHelper.FormStart("frmLogin", "/user/login", Request.IsAjax);
-            </example>
+            <param name="message">message describing the error</param>
+            <param name="inner">inner exception</param>
         </member>
-        <member name="M:HttpServer.Helpers.WebHelper.Link(System.String,System.String,System.String[])">
+        <member name="M:HttpServer.Exceptions.NotFoundException.#ctor(System.String)">
             <summary>
-            Create a link tag.
+            Create a new exception
             </summary>
-            <param name="url">url to go to</param>
-            <param name="title">link title (text that is displayed)</param>
-            <param name="htmlAttributes">html attributes, name, value, name, value</param>
-            <returns>html code</returns>
-            <example>
-            WebHelper.Link("/user/show/1", "Show user", "id", "showUser", "onclick", "return confirm('Are you shure?');");
-            </example>
+            <param name="message">message describing the error</param>
         </member>
-        <member name="M:HttpServer.Helpers.WebHelper.BuildLink(System.String,System.String,System.String[])">
+        <member name="T:HttpServer.Sessions.MemorySessionStore">
             <summary>
-            Build a link
+            Session store using memory for each session.
             </summary>
-            <param name="url">url to go to.</param>
-            <param name="title">title of link (displayed text)</param>
-            <param name="htmlAttributes">extra html attributes.</param>
-            <returns>a complete link</returns>
         </member>
-        <member name="M:HttpServer.Helpers.WebHelper.BuildLink(System.String,System.String,System.String[],System.String[])">
+        <member name="T:HttpServer.Sessions.IHttpSessionStore">
             <summary>
-            Build a link
+            A session store is used to store and load sessions on a media.
+            The default implementation (<see cref="T:HttpServer.Sessions.MemorySessionStore"/>) saves/retrieves sessions from memory.
             </summary>
-            <param name="url">url to go to.</param>
-            <param name="title">title of link (displayed text)</param>
-            <param name="htmlAttributes">extra html attributes.</param>
-            <returns>a complete link</returns>
-            <param name="options">more options</param>
         </member>
-        <member name="M:HttpServer.Helpers.WebHelper.Select(System.String,System.Collections.ICollection,HttpServer.Helpers.GetIdTitle,System.Object,System.Boolean)">
+        <member name="M:HttpServer.Sessions.IHttpSessionStore.Create">
             <summary>
-            Obsolete
+            Creates a new http session with a generated id.
             </summary>
-            <param name="name">Obsolete</param>
-            <param name="collection">Obsolete</param>
-            <param name="getIdTitle">Obsolete</param>
-            <param name="selectedValue">Obsolete</param>
-            <param name="firstEmpty">Obsolete</param>
-            <returns>Obsolete</returns>
+            <returns>A <see cref="T:HttpServer.Sessions.IHttpSession"/> object</returns>
         </member>
-        <member name="M:HttpServer.Helpers.WebHelper.Select(System.String,System.String,System.Collections.ICollection,HttpServer.Helpers.GetIdTitle,System.Object,System.Boolean)">
+        <member name="M:HttpServer.Sessions.IHttpSessionStore.Create(System.String)">
             <summary>
-            Obsolete
+            Creates a new http session with a specific id
             </summary>
-            <param name="name">Obsolete</param>
-            <param name="id">Obsolete</param>
-            <param name="collection">Obsolete</param>
-            <param name="getIdTitle">Obsolete</param>
-            <param name="selectedValue">Obsolete</param>
-            <param name="firstEmpty">Obsolete</param>
-            <returns>Obsolete</returns>
+            <param name="id">Id used to identify the new cookie..</param>
+            <returns>A <see cref="T:HttpServer.Sessions.IHttpSession"/> object.</returns>
+            <remarks>
+            Id should be generated by the store implementation if it's null or <see cref="F:System.String.Empty"/>.
+            </remarks>
         </member>
-        <member name="M:HttpServer.Helpers.WebHelper.List(System.Collections.Generic.IEnumerable{System.Object},System.String)">
+        <member name="M:HttpServer.Sessions.IHttpSessionStore.Load(System.String)">
             <summary>
-            Render errors into a UL with class "errors"
+            Load an existing session.
             </summary>
-            <param name="className">class used by UL-tag.</param>
-            <param name="theList">items to list</param>
-            <returns>an unordered html list.</returns>
+            <param name="sessionId">Session id (usually retrieved from a client side cookie).</param>
+            <returns>A session if found; otherwise null.</returns>
         </member>
-        <member name="M:HttpServer.Helpers.WebHelper.List(System.Collections.Specialized.NameValueCollection,System.String)">
+        <member name="M:HttpServer.Sessions.IHttpSessionStore.Save(HttpServer.Sessions.IHttpSession)">
             <summary>
-            Render errors into a UL with class "errors"
+            Save an updated session to the store.
             </summary>
-            <param name="className">class used by UL-tag.</param>
-            <param name="theList">items to list</param>
-            <returns>an unordered html list.</returns>
+            <param name="session">Session id (usually retrieved from a client side cookie).</param>
+            <exception cref="T:System.ArgumentException">If Id property have not been specified.</exception>
         </member>
-        <member name="M:HttpServer.Helpers.WebHelper.Errors(System.Collections.Specialized.NameValueCollection)">
+        <member name="M:HttpServer.Sessions.IHttpSessionStore.AddUnused(HttpServer.Sessions.IHttpSession)">
             <summary>
-            Render errors into a UL with class "errors"
+            We use the flyweight pattern which reuses small objects
+            instead of creating new each time.
             </summary>
-            <param name="errors"></param>
-            <returns></returns>
+            <param name="session">Unused session that should be reused next time Create is called.</param>
         </member>
-        <member name="M:HttpServer.Helpers.WebHelper.GenerateHtmlAttributes(System.Text.StringBuilder,System.String[],System.String[])">
+        <member name="M:HttpServer.Sessions.IHttpSessionStore.Cleanup">
             <summary>
-            Generates a list with html attributes.
+            Remove expired sessions
             </summary>
-            <param name="sb">StringBuilder that the options should be added to.</param>
-            <param name="firstOptions">attributes set by user.</param>
-            <param name="secondOptions">attributes set by any of the helper classes.</param>
         </member>
-        <member name="M:HttpServer.Helpers.WebHelper.GenerateHtmlAttributes(System.Text.StringBuilder,System.String[])">
+        <member name="M:HttpServer.Sessions.IHttpSessionStore.Remove(System.String)">
             <summary>
-            Generates a list with html attributes.
+            Remove a session
             </summary>
-            <param name="sb">StringBuilder that the options should be added to.</param>
-            <param name="options"></param>
+            <param name="sessionId">id of the session.</param>
         </member>
-        <member name="T:HttpServer.Helpers.JavascriptHelperImplementation">
+        <member name="P:HttpServer.Sessions.IHttpSessionStore.Item(System.String)">
             <summary>
-            Purpose of this class is to create a javascript toolkit independent javascript helper.
+            Load a session from the store
             </summary>
+            <param name="sessionId"></param>
+            <returns>null if session is not found.</returns>
         </member>
-        <member name="M:HttpServer.Helpers.JavascriptHelperImplementation.GenerateOptions(System.Text.StringBuilder,System.String[],System.Boolean)">
+        <member name="P:HttpServer.Sessions.IHttpSessionStore.ExpireTime">
             <summary>
-            Generates a list with JS options.
+            Number of minutes before a session expires.
             </summary>
-            <param name="sb">StringBuilder that the options should be added to.</param>
-            <param name="options">the javascript options. name, value pairs. each string value should be escaped by YOU!</param>
-            <param name="startWithComma">true if we should start with a comma.</param>
+            <value>Default time is 20 minutes.</value>
         </member>
-        <member name="M:HttpServer.Helpers.JavascriptHelperImplementation.RemoveJavascriptOptions(System.String[])">
+        <member name="M:HttpServer.Sessions.MemorySessionStore.#ctor">
             <summary>
-            Removes any javascript parameters from an array of parameters
+            Initializes the class setting the expirationtimer to clean the session every minute
+            </summary>
+        </member>
+        <member name="M:HttpServer.Sessions.MemorySessionStore.Cleanup(System.Object)">
+            <summary>
+            Delegate for the cleanup timer
             </summary>
-            <param name="options">The array of parameters to remove javascript params from</param>
-            <returns>An array of html parameters</returns>
         </member>
-        <member name="M:HttpServer.Helpers.JavascriptHelperImplementation.AjaxFormOnSubmit(System.String[])">
+        <member name="M:HttpServer.Sessions.MemorySessionStore.Create">
             <summary>
-            javascript action that should be added to the "onsubmit" event in the form tag.
+            Creates a new http session
             </summary>
             <returns></returns>
-            <remarks>All javascript option names should end with colon.</remarks>
-            <example>
-            <code>
-            JSHelper.AjaxRequest("/user/show/1", "onsuccess:", "$('userInfo').update(result);");
-            </code>
-            </example>
         </member>
-        <member name="M:HttpServer.Helpers.JavascriptHelperImplementation.AjaxRequest(System.String,System.String[])">
+        <member name="M:HttpServer.Sessions.MemorySessionStore.Create(System.String)">
             <summary>
-            Requests a url through ajax
+            Creates a new http session with a specific id
             </summary>
-            <param name="url">url to fetch</param>
-            <param name="options">optional options in format "key, value, key, value", used in JS request object.</param>
-            <returns>a link tag</returns>
-            <remarks>All javascript option names should end with colon.</remarks>
-            <example>
-            <code>
-            JSHelper.AjaxRequest("/user/show/1", "onsuccess:", "$('userInfo').update(result);");
-            </code>
-            </example>
+            <param name="id">Id used to identify the new cookie..</param>
+            <returns>A <see cref="T:HttpServer.Sessions.IHttpSession"/> object.</returns>
+            <remarks>
+            Id should be generated by the store implementation if it's null or <see cref="F:System.String.Empty"/>.
+            </remarks>
         </member>
-        <member name="M:HttpServer.Helpers.JavascriptHelperImplementation.AjaxUpdater(System.String,System.String,System.String[])">
+        <member name="M:HttpServer.Sessions.MemorySessionStore.Load(System.String)">
             <summary>
-            Ajax requests that updates an element with
-            the fetched content
+            Load an existing session.
             </summary>
-            <param name="url">Url to fetch content from</param>
-            <param name="targetId">element to update</param>
-            <param name="options">optional options in format "key, value, key, value", used in JS updater object.</param>
-            <returns>A link tag.</returns>
-            <remarks>All javascript option names should end with colon.</remarks>
-            <example>
-            <code>
-            JSHelper.AjaxUpdater("/user/show/1", "userInfo", "onsuccess:", "alert('Successful!');");
-            </code>
-            </example>
+            <param name="sessionId"></param>
+            <returns></returns>
         </member>
-        <member name="M:HttpServer.Helpers.JavascriptHelperImplementation.DialogLink(System.String,System.String,System.String[])">
+        <member name="M:HttpServer.Sessions.MemorySessionStore.Save(HttpServer.Sessions.IHttpSession)">
             <summary>
-            A link that pop ups a Dialog (overlay div)
+            Save an updated session to the store.
             </summary>
-            <param name="url">url to contents of dialog</param>
-            <param name="title">link title</param>
-            <returns>A "a"-tag that popups a dialog when clicked</returns>
-            <param name="htmlAttributes">name/value of html attributes</param>
-            <example>
-            WebHelper.DialogLink("/user/show/1", "show user", "onmouseover", "alert('booh!');");
-            </example>
+            <param name="session"></param>
         </member>
-        <member name="M:HttpServer.Helpers.JavascriptHelperImplementation.CloseDialog">
+        <member name="M:HttpServer.Sessions.MemorySessionStore.AddUnused(HttpServer.Sessions.IHttpSession)">
             <summary>
-            Close a javascript dialog window/div.
+            We use the flyweight pattern which reuses small objects
+            instead of creating new each time.
             </summary>
-            <returns>javascript for closing a dialog.</returns>
-            <see cref="M:HttpServer.Helpers.JavascriptHelperImplementation.DialogLink(System.String,System.String,System.String[])"/>
+            <param name="session">EmptyLanguageNode (unused) session that should be reused next time Create is called.</param>
         </member>
-        <member name="M:HttpServer.Helpers.JavascriptHelperImplementation.CreateDialog(System.String,System.String,System.String[])">
+        <member name="M:HttpServer.Sessions.MemorySessionStore.Cleanup">
             <summary>
-            Creates a new modal dialog window
+            Remove expired sessions
             </summary>
-            <param name="url">url to open in window.</param>
-            <param name="title">window title (may not be supported by all js implementations)</param>
-            <param name="options"></param>
-            <returns></returns>
         </member>
-        <member name="M:HttpServer.FormDecoders.HttpMultipart.ReadLine">
+        <member name="M:HttpServer.Sessions.MemorySessionStore.Remove(System.String)">
             <summary>
-            
+            Remove a session
             </summary>
-            <returns></returns>
-            <exception cref="T:System.ArgumentOutOfRangeException"></exception>
-            <exception cref="T:System.ObjectDisposedException"></exception>
+            <param name="sessionId">id of the session.</param>
         </member>
-        <member name="T:HttpServer.FormDecoders.HttpMultipart.Element">
-            <summary>Represents a field in a multipart form</summary>
+        <member name="P:HttpServer.Sessions.MemorySessionStore.Item(System.String)">
+            <summary>
+            Load a session from the store
+            </summary>
+            <param name="sessionId"></param>
+            <returns>null if session is not found.</returns>
         </member>
-        <member name="T:HttpServer.Exceptions.BadRequestException">
+        <member name="P:HttpServer.Sessions.MemorySessionStore.ExpireTime">
             <summary>
-            The request could not be understood by the server due to malformed syntax. 
-            The client SHOULD NOT repeat the request without modifications.
-            
-            Text taken from: http://www.submissionchamber.com/help-guides/error-codes.php
+            Number of minutes before a session expires.
+            Default is 20 minutes.
             </summary>
         </member>
-        <member name="M:HttpServer.Exceptions.BadRequestException.#ctor(System.String)">
+        <member name="T:HttpServer.Sessions.HttpSessionClearedArgs">
             <summary>
-            Create a new bad request exception.
+            Arguments sent when a <see cref="T:HttpServer.Sessions.IHttpSession"/> is cleared
             </summary>
-            <param name="errMsg">reason to why the request was bad.</param>
         </member>
-        <member name="M:HttpServer.Exceptions.BadRequestException.#ctor(System.String,System.Exception)">
+        <member name="M:HttpServer.Sessions.HttpSessionClearedArgs.#ctor(System.Boolean)">
             <summary>
-            Create a new bad request exception.
+            Instantiates the arguments for the event
             </summary>
-            <param name="errMsg">reason to why the request was bad.</param>
-            <param name="inner">inner exception</param>
+            <param name="expired">True if the session is cleared due to expiration</param>
         </member>
-        <member name="T:HttpServer.HttpFile">
+        <member name="P:HttpServer.Sessions.HttpSessionClearedArgs.Expired">
             <summary>
-            Container class for posted files
+            Returns true if the session is cleared due to expiration
             </summary>
         </member>
-        <member name="M:HttpServer.HttpFile.#ctor(System.String,System.String,System.String,System.String)">
+        <member name="T:HttpServer.Sessions.HttpSessionClearedHandler">
             <summary>
-            Creates a container for a posted file
+            Delegate for when a IHttpSession is cleared
             </summary>
-            <param name="name">The identifier of the post field</param>
-            <param name="filename">The file path</param>
-            <param name="contentType">The content type of the file</param>
-            <param name="uploadFilename">The name of the file uploaded</param>
-            <exception cref="T:System.ArgumentNullException">If any parameter is null or empty</exception>
+            <param name="session"><see cref="T:HttpServer.Sessions.IHttpSession"/> this is being cleared.</param>
+            <param name="args">Arguments for the clearing</param>
         </member>
-        <member name="M:HttpServer.HttpFile.#ctor(System.String,System.String,System.String)">
+        <member name="T:HttpServer.RequestQueue">
             <summary>
-            Creates a container for a posted file <see cref="M:HttpServer.HttpFile.#ctor(System.String,System.String,System.String,System.String)"/>
+            Used to queue incoming requests.
             </summary>
-            <exception cref="T:System.ArgumentNullException">If any parameter is null or empty</exception>
         </member>
-        <member name="M:HttpServer.HttpFile.Finalize">
-            <summary>Destructor disposing the file</summary>
+        <member name="M:HttpServer.RequestQueue.#ctor(HttpServer.ProcessRequestHandler)">
+            <summary>
+            Initializes a new instance of the <see cref="T:HttpServer.RequestQueue"/> class.
+            </summary>
+            <param name="handler">Called when a request should be processed.</param>
         </member>
-        <member name="M:HttpServer.HttpFile.Dispose(System.Boolean)">
+        <member name="M:HttpServer.RequestQueue.QueueThread">
             <summary>
-            Deletes the temporary file
+            Used to process queued requests.
             </summary>
-            <param name="disposing">True if manual dispose</param>
         </member>
-        <member name="M:HttpServer.HttpFile.Dispose">
+        <member name="P:HttpServer.RequestQueue.MaxRequestCount">
             <summary>
-            Disposing interface, cleans up managed resources (the temporary file) and suppresses finalization
+            Gets or sets maximum number of allowed simultaneous requests.
             </summary>
         </member>
-        <member name="P:HttpServer.HttpFile.Name">
+        <member name="P:HttpServer.RequestQueue.MaxQueueSize">
             <summary>
-            The name/id of the file
+            Gets or sets maximum number of requests queuing to be handled.
             </summary>
         </member>
-        <member name="P:HttpServer.HttpFile.Filename">
+        <member name="P:HttpServer.RequestQueue.CurrentRequestCount">
             <summary>
-            The full file path
+            Specifies how many requests the HTTP server is currently processing.
             </summary>
         </member>
-        <member name="P:HttpServer.HttpFile.UploadFilename">
+        <member name="T:HttpServer.RequestQueue.QueueItem">
             <summary>
-            The name of the uploaded file
+            Used two queue incoming requests to avoid
+            thread starvation.
             </summary>
         </member>
-        <member name="P:HttpServer.HttpFile.ContentType">
+        <member name="T:HttpServer.ProcessRequestHandler">
             <summary>
-            The type of file
+            Method used to process a queued request
             </summary>
+            <param name="context">Context that the request was received from.</param>
+            <param name="request">Request to process.</param>
         </member>
-        <member name="T:HttpServer.Helpers.JSHelper">
+        <member name="T:HttpServer.Parser.HeaderEventArgs">
             <summary>
-            Will contain helper functions for javascript.
+            Event arguments used when a new header have been parsed.
             </summary>
         </member>
-        <member name="M:HttpServer.Helpers.JSHelper.AjaxRequest(System.String,System.String[])">
+        <member name="M:HttpServer.Parser.HeaderEventArgs.#ctor(System.String,System.String)">
             <summary>
-            Requests a url through ajax
+            Initializes a new instance of the <see cref="T:HttpServer.Parser.HeaderEventArgs"/> class.
             </summary>
-            <param name="url">url to fetch. Url is NOT enclosed in quotes by the implementation. You need to do that yourself.</param>
-            <param name="options">optional options in format "key, value, key, value", used in JS request object. All keys should end with colon.</param>
-            <returns>a link tag</returns>
-            <remarks>onclick attribute is used by this method.</remarks>
-            <example>
-            <code>
-            // plain text
-            JSHelper.AjaxRequest("'/user/show/1'");
-            
-            // ajax request using this.href
-            string link = "&lt;a href=\"/user/call/1\" onclick=\"" + JSHelper.AjaxRequest("this.href") + "/&lt;call user&lt;/a&gt;";
-            </code>
-            </example>
+            <param name="name">Name of header.</param>
+            <param name="value">Header value.</param>
         </member>
-        <member name="M:HttpServer.Helpers.JSHelper.AjaxUpdater(System.String,System.String,System.String[])">
+        <member name="M:HttpServer.Parser.HeaderEventArgs.#ctor">
             <summary>
-            Ajax requests that updates an element with
-            the fetched content
+            Initializes a new instance of the <see cref="T:HttpServer.Parser.HeaderEventArgs"/> class.
             </summary>
-            <param name="url">url to fetch. Url is NOT enclosed in quotes by the implementation. You need to do that yourself.</param>
-            <param name="targetId">element to update</param>
-            <param name="options">options in format "key, value, key, value". All keys should end with colon.</param>
-            <returns>A link tag.</returns>
-            <example>
-            <code>
-            JSHelper.AjaxUpdater("'/user/show/1'", "user", "onsuccess:", "alert('hello');", "asynchronous:", "true");
-            </code>
-            </example>
         </member>
-        <member name="M:HttpServer.Helpers.JSHelper.CreateDialog(System.String,System.String,System.String[])">
+        <member name="P:HttpServer.Parser.HeaderEventArgs.Name">
             <summary>
-            Opens contents in a dialog window.
+            Gets or sets header name.
             </summary>
-            <param name="url">url to contents of dialog</param>
-            <param name="title">link title</param>
-            <param name="options">name, value, name, value, all parameter names should end with colon.</param>
         </member>
-        <member name="M:HttpServer.Helpers.JSHelper.CloseDialog">
+        <member name="P:HttpServer.Parser.HeaderEventArgs.Value">
             <summary>
-            Close a javascript dialog window/div.
+            Gets or sets header value.
             </summary>
-            <returns>javascript for closing a dialog.</returns>
-            <see cref="M:HttpServer.Helpers.JSHelper.CreateDialog(System.String,System.String,System.String[])"/>
         </member>
         <member name="T:HttpServer.HttpRequest">
             <summary>
@@ -4738,39 +4722,113 @@
             Gets whether the request was made by Ajax (Asynchronous JavaScript)
             </summary>
         </member>
-        <member name="P:HttpServer.HttpRequest.Cookies">
+        <member name="P:HttpServer.HttpRequest.Cookies">
+            <summary>
+            Gets cookies that was sent with the request.
+            </summary>
+        </member>
+        <member name="M:HttpServer.ComponentProvider.AddInstance``1(System.Object)">
+            <summary>
+            Add a component instance
+            </summary>
+            <typeparam name="T">Interface type</typeparam>
+            <param name="instance">Instance to add</param>
+        </member>
+        <member name="M:HttpServer.ComponentProvider.Get``1">
+            <summary>
+            Get a component.
+            </summary>
+            <typeparam name="T">Interface type</typeparam>
+            <returns>Component if registered, otherwise null.</returns>
+            <remarks>
+            Component will get created if needed.
+            </remarks>
+        </member>
+        <member name="M:HttpServer.ComponentProvider.Create(HttpServer.ComponentProvider.TypeInformation)">
+            <exception cref="T:System.InvalidOperationException">If instance cannot be created.</exception>
+        </member>
+        <member name="M:HttpServer.ComponentProvider.Contains(System.Type)">
+            <summary>
+            Checks if the specified component interface have been added.
+            </summary>
+            <param name="interfaceType"></param>
+            <returns>true if found; otherwise false.</returns>
+        </member>
+        <member name="M:HttpServer.ComponentProvider.Add``2">
+            <summary>
+            Add a component.
+            </summary>
+            <typeparam name="InterfaceType">Type being requested.</typeparam>
+            <typeparam name="InstanceType">Type being created.</typeparam>
+            <exception cref="T:System.InvalidOperationException">Type have already been mapped.</exception>
+        </member>
+        <member name="T:HttpServer.Rules.RegexRedirectRule">
             <summary>
-            Gets cookies that was sent with the request.
+            Class to make dynamic binding of redirects. Instead of having to specify a number of similar redirect rules
+            a regular expression can be used to identify redirect URLs and their targets.
             </summary>
+            <example>
+            <![CDATA[
+            new RegexRedirectRule("/(?<target>[a-z0-9]+)", "/users/${target}?find=true", RegexOptions.IgnoreCase)
+            ]]>
+            </example>
         </member>
-        <member name="T:HttpServer.HttpModules.WebSiteModule">
+        <member name="M:HttpServer.Rules.RegexRedirectRule.#ctor(System.String,System.String)">
             <summary>
-            The website module let's you handle multiple websites in the same server.
-            It uses the "Host" header to check which site you want.
+            Initializes a new instance of the <see cref="T:HttpServer.Rules.RegexRedirectRule"/> class.
             </summary>
-            <remarks>It's recommended that you do not
-            add any other modules to HttpServer if you are using the website module. Instead,
-            add all wanted modules to each website.</remarks>
+            <param name="fromUrlExpression">Expression to match URL</param>
+            <param name="toUrlExpression">Expression to generate URL</param>
+            <example>
+            <![CDATA[
+            server.Add(new RegexRedirectRule("/(?<first>[a-zA-Z0-9]+)", "/user/${first}"));
+            Result of ie. /employee1 will then be /user/employee1
+            ]]>
+            </example>
         </member>
-        <member name="M:HttpServer.HttpModules.WebSiteModule.#ctor(System.String,System.String)">
+        <member name="M:HttpServer.Rules.RegexRedirectRule.#ctor(System.String,System.String,System.Text.RegularExpressions.RegexOptions)">
             <summary>
-            
+            Initializes a new instance of the <see cref="T:HttpServer.Rules.RegexRedirectRule"/> class.
             </summary>
-            <param name="host">domain name that should be handled.</param>
-            <param name="name"></param>
+            <param name="fromUrlExpression">Expression to match URL</param>
+            <param name="toUrlExpression">Expression to generate URL</param>
+            <param name="options">Regular expression options to use, can be null</param>
+            <example>
+            <![CDATA[
+            server.Add(new RegexRedirectRule("/(?<first>[a-zA-Z0-9]+)", "/user/{first}", RegexOptions.IgnoreCase));
+            Result of ie. /employee1 will then be /user/employee1
+            ]]>
+            </example>
         </member>
-        <member name="M:HttpServer.HttpModules.WebSiteModule.Process(HttpServer.IHttpRequest,HttpServer.IHttpResponse,HttpServer.Sessions.IHttpSession)">
+        <member name="M:HttpServer.Rules.RegexRedirectRule.#ctor(System.String,System.String,System.Text.RegularExpressions.RegexOptions,System.Boolean)">
             <summary>
-            Method that process the url
+            Initializes a new instance of the <see cref="T:HttpServer.Rules.RegexRedirectRule"/> class.
             </summary>
-            <param name="request">Information sent by the browser about the request</param>
-            <param name="response">Information that is being sent back to the client.</param>
-            <param name="session">Session used to </param>
+            <param name="fromUrlExpression">Expression to match URL</param>
+            <param name="toUrlExpression">Expression to generate URL</param>
+            <param name="options">Regular expression options to apply</param>
+            <param name="shouldRedirect"><c>true</c> if request should be redirected, <c>false</c> if the request URI should be replaced.</param>
+            <example>
+            <![CDATA[
+            server.Add(new RegexRedirectRule("/(?<first>[a-zA-Z0-9]+)", "/user/${first}", RegexOptions.None));
+            Result of ie. /employee1 will then be /user/employee1
+            ]]>
+            </example>
+            <exception cref="T:System.ArgumentNullException">Argument is null.</exception>
+            <seealso cref="P:HttpServer.Rules.RedirectRule.ShouldRedirect"/>
         </member>
-        <member name="P:HttpServer.HttpModules.WebSiteModule.SiteName">
+        <member name="M:HttpServer.Rules.RegexRedirectRule.Process(HttpServer.IHttpRequest,HttpServer.IHttpResponse)">
             <summary>
-            Name of site.
+            Process the incoming request.
             </summary>
+            <param name="request">incoming HTTP request</param>
+            <param name="response">outgoing HTTP response</param>
+            <returns>true if response should be sent to the browser directly (no other rules or modules will be processed).</returns>
+            <remarks>
+            returning true means that no modules will get the request. Returning true is typically being done
+            for redirects.
+            </remarks>
+            <exception cref="T:System.ArgumentNullException">If request or response is null</exception>
         </member>
         <member name="T:HttpServer.Helpers.ResourceInfo">
             <summary>
@@ -4812,30 +4870,6 @@
         <member name="P:HttpServer.Helpers.ResourceInfo.ResourceName">
             <summary>Retrieves the full path name to the resource file</summary>
         </member>
-        <member name="T:HttpServer.RequestParserFactory">
-            <summary>
-            Creates request parsers when needed.
-            </summary>
-        </member>
-        <member name="T:HttpServer.IRequestParserFactory">
-            <summary>
-            Creates request parsers when needed.
-            </summary>
-        </member>
-        <member name="M:HttpServer.IRequestParserFactory.CreateParser(HttpServer.ILogWriter)">
-            <summary>
-            Create a new request parser.
-            </summary>
-            <param name="logWriter">Used when logging should be enabled.</param>
-            <returns>A new request parser.</returns>
-        </member>
-        <member name="M:HttpServer.RequestParserFactory.CreateParser(HttpServer.ILogWriter)">
-            <summary>
-            Create a new request parser.
-            </summary>
-            <param name="logWriter">Used when logging should be enabled.</param>
-            <returns>A new request parser.</returns>
-        </member>
         <member name="T:HttpServer.Authentication.BasicAuthentication">
             <summary>
             The "basic" authentication scheme is based on the model that the
@@ -4921,533 +4955,499 @@
             Adding bytes to body
             </summary>
         </member>
-        <member name="T:HttpServer.FormDecoders.XmlDecoder">
-            <summary>
-            This decoder converts XML documents to form items.
-            Each element becomes a subitem in the form, and each attribute becomes an item.
-            </summary>
-            <example>
-            // xml: <hello id="1">something<world id="2">data</world></hello>
-            // result: 
-            // form["hello"].Value = "something"
-            // form["hello"]["id"].Value = 1
-            // form["hello"]["world]["id"].Value = 1
-            // form["hello"]["world"].Value = "data"
-            </example>
-            <remarks>
-            The original xml document is stored in form["__xml__"].Value.
-            </remarks>
-        </member>
-        <member name="M:HttpServer.FormDecoders.XmlDecoder.Decode(System.IO.Stream,System.String,System.Text.Encoding)">
-            <summary>
-            
-            </summary>
-            <param name="stream">Stream containing the content</param>
-            <param name="contentType">Content type (with any additional info like boundry). Content type is always supplied in lower case</param>
-            <param name="encoding">Stream encoding</param>
-            Note: contentType and encoding are not used?
-            <returns>A http form, or null if content could not be parsed.</returns>
-            <exception cref="T:System.IO.InvalidDataException"></exception>
-        </member>
-        <member name="M:HttpServer.FormDecoders.XmlDecoder.TraverseNode(HttpServer.IHttpInput,System.Xml.XmlNode)">
-            <summary>
-            Recursive function that will go through an xml element and store it's content 
-            to the form item.
-            </summary>
-            <param name="item">(parent) Item in form that content should be added to.</param>
-            <param name="node">Node that should be parsed.</param>
-        </member>
-        <member name="M:HttpServer.FormDecoders.XmlDecoder.CanParse(System.String)">
-            <summary>
-            Checks if the decoder can handle the mime type
-            </summary>
-            <param name="contentType">Content type (with any additional info like boundry). Content type is always supplied in lower case.</param>
-            <returns>True if the decoder can parse the specified content type</returns>
-        </member>
-        <member name="T:HttpServer.ResponseCookies">
-            <summary>
-            Cookies that should be set.
-            </summary>
-        </member>
-        <member name="M:HttpServer.ResponseCookies.Add(HttpServer.ResponseCookie)">
-            <summary>
-            Adds a cookie in the collection.
-            </summary>
-            <param name="cookie">cookie to add</param>
-            <exception cref="T:System.ArgumentNullException">cookie is null</exception>
-        </member>
-        <member name="M:HttpServer.ResponseCookies.Add(HttpServer.RequestCookie,System.DateTime)">
-            <summary>
-            Copy a request cookie
-            </summary>
-            <param name="cookie"></param>
-            <param name="expires">When the cookie should expire</param>
-        </member>
-        <member name="M:HttpServer.ResponseCookies.GetEnumerator">
-            <summary>
-            Gets a collection enumerator on the cookie list.
-            </summary>
-            <returns>collection enumerator</returns>
-        </member>
-        <member name="M:HttpServer.ResponseCookies.Clear">
+        <member name="T:HttpServer.Helpers.JSHelper">
             <summary>
-            Remove all cookies
+            Will contain helper functions for javascript.
             </summary>
         </member>
-        <member name="M:HttpServer.ResponseCookies.System#Collections#Generic#IEnumerable{HttpServer#ResponseCookie}#GetEnumerator">
+        <member name="M:HttpServer.Helpers.JSHelper.AjaxRequest(System.String,System.String[])">
             <summary>
-            Returns an enumerator that iterates through the collection.
+            Requests a url through ajax
             </summary>
+            <param name="url">url to fetch. Url is NOT enclosed in quotes by the implementation. You need to do that yourself.</param>
+            <param name="options">optional options in format "key, value, key, value", used in JS request object. All keys should end with colon.</param>
+            <returns>a link tag</returns>
+            <remarks>onclick attribute is used by this method.</remarks>
+            <example>
+            <code>
+            // plain text
+            JSHelper.AjaxRequest("'/user/show/1'");
             
-            <returns>
-            A <see cref="T:System.Collections.Generic.IEnumerator`1"></see> that can be used to iterate through the collection.
-            </returns>
-            <filterpriority>1</filterpriority>
+            // ajax request using this.href
+            string link = "&lt;a href=\"/user/call/1\" onclick=\"" + JSHelper.AjaxRequest("this.href") + "/&lt;call user&lt;/a&gt;";
+            </code>
+            </example>
         </member>
-        <member name="P:HttpServer.ResponseCookies.Count">
+        <member name="M:HttpServer.Helpers.JSHelper.AjaxUpdater(System.String,System.String,System.String[])">
             <summary>
-            Gets the count of cookies in the collection.
+            Ajax requests that updates an element with
+            the fetched content
             </summary>
+            <param name="url">url to fetch. Url is NOT enclosed in quotes by the implementation. You need to do that yourself.</param>
+            <param name="targetId">element to update</param>
+            <param name="options">options in format "key, value, key, value". All keys should end with colon.</param>
+            <returns>A link tag.</returns>
+            <example>
+            <code>
+            JSHelper.AjaxUpdater("'/user/show/1'", "user", "onsuccess:", "alert('hello');", "asynchronous:", "true");
+            </code>
+            </example>
         </member>
-        <member name="P:HttpServer.ResponseCookies.Item(System.String)">
+        <member name="M:HttpServer.Helpers.JSHelper.CreateDialog(System.String,System.String,System.String[])">
             <summary>
-            Gets the cookie of a given identifier (null if not existing).
+            Opens contents in a dialog window.
             </summary>
+            <param name="url">url to contents of dialog</param>
+            <param name="title">link title</param>
+            <param name="options">name, value, name, value, all parameter names should end with colon.</param>
         </member>
-        <member name="T:HttpServer.RequestCookies">
+        <member name="M:HttpServer.Helpers.JSHelper.CloseDialog">
             <summary>
-            This class is created as a wrapper, since there are two different cookie types in .Net (Cookie and HttpCookie).
-            The framework might switch class in the future and we dont want to have to replace all instances
+            Close a javascript dialog window/div.
             </summary>
+            <returns>javascript for closing a dialog.</returns>
+            <see cref="M:HttpServer.Helpers.JSHelper.CreateDialog(System.String,System.String,System.String[])"/>
         </member>
-        <member name="M:HttpServer.RequestCookies.#ctor(System.String)">
+        <member name="T:HttpServer.ContentType">
             <summary>
-            Let's copy all the cookies.
+            Lists content type mime types.
             </summary>
-            <param name="cookies">value from cookie header.</param>
         </member>
-        <member name="M:HttpServer.RequestCookies.Add(HttpServer.RequestCookie)">
+        <member name="F:HttpServer.ContentType.Text">
             <summary>
-            Adds a cookie in the collection.
+            text/plain
             </summary>
-            <param name="cookie">cookie to add</param>
-            <exception cref="T:System.ArgumentNullException">cookie is null</exception>
         </member>
-        <member name="M:HttpServer.RequestCookies.GetEnumerator">
+        <member name="F:HttpServer.ContentType.Html">
             <summary>
-            Gets a collection enumerator on the cookie list.
+            text/haml
             </summary>
-            <returns>collection enumerator</returns>
         </member>
-        <member name="M:HttpServer.RequestCookies.Clear">
+        <member name="F:HttpServer.ContentType.Javascript">
             <summary>
-            Remove all cookies.
+            content type for javascript documents = application/javascript
             </summary>
+            <remarks>
+            <para>
+            RFC 4329 states that text/javascript have been superseeded by
+            application/javascript. You might still want to check browser versions
+            since older ones do not support application/javascript.
+            </para>
+            <para>Browser support: http://krijnhoetmer.nl/stuff/javascript/mime-types/</para>
+            </remarks>
         </member>
-        <member name="M:HttpServer.RequestCookies.System#Collections#Generic#IEnumerable{HttpServer#RequestCookie}#GetEnumerator">
+        <member name="F:HttpServer.ContentType.Xml">
             <summary>
-            Returns an enumerator that iterates through the collection.
+            text/xml
             </summary>
-            
-            <returns>
-            A <see cref="T:System.Collections.Generic.IEnumerator`1"></see> that can be used to iterate through the collection.
-            </returns>
-            <filterpriority>1</filterpriority>
         </member>
-        <member name="M:HttpServer.RequestCookies.Remove(System.String)">
+        <member name="T:HttpServer.ContentTypes">
             <summary>
-            Remove a cookie from the collection.
+            A list of content types
             </summary>
-            <param name="cookieName">Name of cookie.</param>
         </member>
-        <member name="P:HttpServer.RequestCookies.Count">
+        <member name="M:HttpServer.ContentTypes.#ctor(System.String)">
             <summary>
-            Gets the count of cookies in the collection.
+            
             </summary>
+            <param name="types">Semicolon separated content types.</param>
         </member>
-        <member name="P:HttpServer.RequestCookies.Item(System.String)">
+        <member name="M:HttpServer.ContentTypes.GetEnumerator">
             <summary>
-            Gets the cookie of a given identifier (null if not existing).
+            Returns an enumerator that iterates through a collection.
             </summary>
+            <returns>
+            An <see cref="T:System.Collections.IEnumerator"/> object that can be used to iterate through the collection.
+            </returns>
         </member>
-        <member name="T:HttpServer.HttpListener">
+        <member name="M:HttpServer.ContentTypes.Contains(System.String)">
             <summary>
-            New implementation of the HTTP listener.
+            Searches for the specified type
             </summary>
-            <remarks>
-            Use the <c>Create</c> methods to create a default listener.
-            </remarks>
+            <param name="type">Can also be a part of a type (searching for "xml" would return true for "application/xml").</param>
+            <returns>true if type was found.</returns>
         </member>
-        <member name="M:HttpServer.HttpListener.#ctor(System.Net.IPAddress,System.Int32,HttpServer.IHttpContextFactory)">
+        <member name="P:HttpServer.ContentTypes.First">
             <summary>
-            Initializes a new instance of the <see cref="T:HttpServer.HttpListener"/> class.
+            Get this first content type.
             </summary>
-            <param name="address">IP Address to accept connections on</param>
-            <param name="port">TCP Port to listen on, default HTTP port is 80.</param>
-            <param name="factory">Factory used to create <see cref="T:HttpServer.IHttpClientContext"/>es.</param>
-            <exception cref="T:System.ArgumentNullException"><c>address</c> is null.</exception>
-            <exception cref="T:System.ArgumentException">Port must be a positive number.</exception>
         </member>
-        <member name="M:HttpServer.HttpListener.#ctor(System.Net.IPAddress,System.Int32,HttpServer.IHttpContextFactory,System.Security.Cryptography.X509Certificates.X509Certificate)">
+        <member name="P:HttpServer.ContentTypes.Item(System.String)">
             <summary>
-            Initializes a new instance of the <see cref="T:HttpServer.HttpListener"/> class.
+            Fetch a content type
             </summary>
-            <param name="address">The address.</param>
-            <param name="port">The port.</param>
-            <param name="factory">The factory.</param>
-            <param name="certificate">The certificate.</param>
+            <param name="type">Part of type ("xml" would return "application/xml")</param>
+            <returns></returns>
+            <remarks>All content types are in lower case.</remarks>
         </member>
-        <member name="M:HttpServer.HttpListener.#ctor(System.Net.IPAddress,System.Int32,HttpServer.IHttpContextFactory,System.Security.Cryptography.X509Certificates.X509Certificate,System.Security.Authentication.SslProtocols)">
+        <member name="T:HttpServer.RequestParserFactory">
             <summary>
-            Initializes a new instance of the <see cref="T:HttpServer.HttpListener"/> class.
+            Creates request parsers when needed.
             </summary>
-            <param name="address">The address.</param>
-            <param name="port">The port.</param>
-            <param name="factory">The factory.</param>
-            <param name="certificate">The certificate.</param>
-            <param name="protocol">The protocol.</param>
         </member>
-        <member name="M:HttpServer.HttpListener.Create(System.Net.IPAddress,System.Int32)">
+        <member name="T:HttpServer.IRequestParserFactory">
             <summary>
-            Creates a new <see cref="T:HttpServer.HttpListener"/> instance with default factories.
+            Creates request parsers when needed.
             </summary>
-            <param name="address">Address that the listener should accept connections on.</param>
-            <param name="port">Port that listener should accept connections on.</param>
-            <returns>Created HTTP listener.</returns>
         </member>
-        <member name="M:HttpServer.HttpListener.Create(System.Net.IPAddress,System.Int32,System.Security.Cryptography.X509Certificates.X509Certificate)">
+        <member name="M:HttpServer.IRequestParserFactory.CreateParser(HttpServer.ILogWriter)">
             <summary>
-            Creates a new <see cref="T:HttpServer.HttpListener"/> instance with default factories.
+            Create a new request parser.
             </summary>
-            <param name="address">Address that the listener should accept connections on.</param>
-            <param name="port">Port that listener should accept connections on.</param>
-            <param name="certificate">Certificate to use</param>
-            <returns>Created HTTP listener.</returns>
+            <param name="logWriter">Used when logging should be enabled.</param>
+            <returns>A new request parser.</returns>
         </member>
-        <member name="M:HttpServer.HttpListener.Create(System.Net.IPAddress,System.Int32,System.Security.Cryptography.X509Certificates.X509Certificate,System.Security.Authentication.SslProtocols)">
+        <member name="M:HttpServer.RequestParserFactory.CreateParser(HttpServer.ILogWriter)">
             <summary>
-            Creates a new <see cref="T:HttpServer.HttpListener"/> instance with default factories.
+            Create a new request parser.
             </summary>
-            <param name="address">Address that the listener should accept connections on.</param>
-            <param name="port">Port that listener should accept connections on.</param>
-            <param name="certificate">Certificate to use</param>
-            <param name="protocol">which HTTPS protocol to use, default is TLS.</param>
-            <returns>Created HTTP listener.</returns>
+            <param name="logWriter">Used when logging should be enabled.</param>
+            <returns>A new request parser.</returns>
         </member>
-        <member name="M:HttpServer.HttpListener.OnAcceptingSocket(System.Net.Sockets.Socket)">
+        <member name="T:HttpServer.Exceptions.UnauthorizedException">
             <summary>
-            Can be used to create filtering of new connections.
+            The request requires user authentication. The response MUST include a 
+            WWW-Authenticate header field (section 14.47) containing a challenge 
+            applicable to the requested resource. 
+            
+            The client MAY repeat the request with a suitable Authorization header 
+            field (section 14.8). If the request already included Authorization 
+            credentials, then the 401 response indicates that authorization has been 
+            refused for those credentials. If the 401 response contains the same challenge 
+            as the prior response, and the user agent has already attempted authentication 
+            at least once, then the user SHOULD be presented the entity that was given in the response, 
+            since that entity might include relevant diagnostic information. 
+            
+            HTTP access authentication is explained in rfc2617:
+            http://www.ietf.org/rfc/rfc2617.txt
+            
+            (description is taken from 
+            http://www.submissionchamber.com/help-guides/error-codes.php#sec10.4.2)
             </summary>
-            <param name="socket">Accepted socket</param>
-            <returns>
-            true if connection can be accepted; otherwise false.
-            </returns>
         </member>
-        <member name="E:HttpServer.HttpListener.Accepted">
+        <member name="M:HttpServer.Exceptions.UnauthorizedException.#ctor">
             <summary>
-            A client have been accepted, but not handled, by the listener.
+            Create a new unauhtorized exception.
             </summary>
+            <seealso cref="T:HttpServer.Exceptions.UnauthorizedException"/>
         </member>
-        <member name="T:HttpServer.HttpHelper">
+        <member name="M:HttpServer.Exceptions.UnauthorizedException.#ctor(System.String,System.Exception)">
             <summary>
-            Generic helper functions for HTTP
+            Create a new unauhtorized exception.
             </summary>
+            <param name="message">reason to why the request was unauthorized.</param>
+            <param name="inner">inner exception</param>
         </member>
-        <member name="F:HttpServer.HttpHelper.HTTP10">
+        <member name="M:HttpServer.Exceptions.UnauthorizedException.#ctor(System.String)">
             <summary>
-            Version string for HTTP v1.0
+            Create a new unauhtorized exception.
             </summary>
+            <param name="message">reason to why the request was unauthorized.</param>
         </member>
-        <member name="F:HttpServer.HttpHelper.HTTP11">
+        <member name="T:HttpServer.HttpModules.FileModule">
             <summary>
-            Version string for HTTP v1.1
+            The purpose of this module is to serve files.
             </summary>
         </member>
-        <member name="F:HttpServer.HttpHelper.EmptyUri">
+        <member name="M:HttpServer.HttpModules.FileModule.#ctor(System.String,System.String,System.Boolean)">
             <summary>
-            An empty URI
+            Initializes a new instance of the <see cref="T:HttpServer.HttpModules.FileModule"/> class.
             </summary>
+            <param name="baseUri">Uri to serve, for instance "/files/"</param>
+            <param name="basePath">Path on hard drive where we should start looking for files</param>
+            <param name="useLastModifiedHeader">If true a Last-Modifed header will be sent upon requests urging web browser to cache files</param>
         </member>
-        <member name="M:HttpServer.HttpHelper.ParseQueryString(System.String)">
+        <member name="M:HttpServer.HttpModules.FileModule.#ctor(System.String,System.String)">
             <summary>
-            Parses a query string.
+            Initializes a new instance of the <see cref="T:HttpServer.HttpModules.FileModule"/> class.
             </summary>
-            <param name="queryString">Query string (URI encoded)</param>
-            <returns>A <see cref="T:HttpServer.HttpInput"/> object if successful; otherwise <see cref="F:HttpServer.HttpInput.Empty"/></returns>
-            <exception cref="T:System.ArgumentNullException"><c>queryString</c> is null.</exception>
-            <exception cref="T:System.FormatException">If string cannot be parsed.</exception>
+            <param name="baseUri">Uri to serve, for instance "/files/"</param>
+            <param name="basePath">Path on hard drive where we should start looking for files</param>
         </member>
-        <member name="T:HttpServer.HttpModules.ReverseProxyModule">
+        <member name="M:HttpServer.HttpModules.FileModule.AddDefaultMimeTypes">
             <summary>
-            A reverse proxy are used to act as a bridge between local (protected/hidden) websites
-            and public clients.
-            
-            A typical usage is to allow web servers on non standard ports to still be available
-            to the public clients, or allow web servers on private ips to be available.
+            Mimtypes that this class can handle per default
             </summary>
         </member>
-        <member name="M:HttpServer.HttpModules.ReverseProxyModule.#ctor(System.String,System.String)">
+        <member name="M:HttpServer.HttpModules.FileModule.CanHandle(System.Uri)">
             <summary>
-            
+            Determines if the request should be handled by this module.
+            Invoked by the <see cref="T:HttpServer.HttpServer"/>
             </summary>
-            <param name="source">Base url requested from browser</param>
-            <param name="destination">Base url on private web server</param>
-            <example>
-            // this will return contents from http://192.168.1.128/view/jonas when client requests http://www.gauffin.com/user/view/jonas
-            _server.Add(new ReverseProxyModule("http://www.gauffin.com/user/", "http://192.168.1.128/");
-            </example>
+            <param name="uri"></param>
+            <returns>true if this module should handle it.</returns>
         </member>
-        <member name="M:HttpServer.HttpModules.ReverseProxyModule.CanHandle(System.Uri)">
+        <member name="M:HttpServer.HttpModules.FileModule.GetPath(System.Uri)">
+            <exception cref="T:HttpServer.Exceptions.BadRequestException">Illegal path</exception>
+        </member>
+        <member name="M:HttpServer.HttpModules.FileModule.Contains(System.String,System.Collections.Generic.IEnumerable{System.String})">
             <summary>
-            Method that determines if an url should be handled or not by the module
+            check if source contains any of the chars.
             </summary>
-            <param name="uri">Url requested by the client.</param>
-            <returns>true if module should handle the url.</returns>
+            <param name="source"></param>
+            <param name="chars"></param>
+            <returns></returns>
         </member>
-        <member name="M:HttpServer.HttpModules.ReverseProxyModule.Process(HttpServer.IHttpRequest,HttpServer.IHttpResponse,HttpServer.Sessions.IHttpSession)">
+        <member name="M:HttpServer.HttpModules.FileModule.Process(HttpServer.IHttpRequest,HttpServer.IHttpResponse,HttpServer.Sessions.IHttpSession)">
             <summary>
-            Method that process the url
+            Method that process the Uri.
             </summary>
             <param name="request">Information sent by the browser about the request</param>
             <param name="response">Information that is being sent back to the client.</param>
             <param name="session">Session used to </param>
+            <exception cref="T:HttpServer.Exceptions.InternalServerException">Failed to find file extension</exception>
+            <exception cref="T:HttpServer.Exceptions.ForbiddenException">File type is forbidden.</exception>
         </member>
-        <member name="T:HttpServer.HttpModules.HttpModuleExceptionEventArgs">
+        <member name="M:HttpServer.HttpModules.FileModule.GetFileExtension(System.String)">
             <summary>
-            Used to inform http server that 
+            return a file extension from an absolute Uri path (or plain filename)
             </summary>
+            <param name="uri"></param>
+            <returns></returns>
         </member>
-        <member name="M:HttpServer.HttpModules.HttpModuleExceptionEventArgs.#ctor(System.Exception)">
+        <member name="P:HttpServer.HttpModules.FileModule.MimeTypes">
             <summary>
-            Eventarguments used when an exception is thrown by a module
+            List with all mime-type that are allowed. 
             </summary>
-            <param name="e">the exception</param>
+            <remarks>All other mime types will result in a Forbidden http status code.</remarks>
         </member>
-        <member name="P:HttpServer.HttpModules.HttpModuleExceptionEventArgs.Exception">
+        <member name="P:HttpServer.HttpModules.FileModule.ForbiddenChars">
             <summary>
-            Exception thrown in a module
+            characters that may not  exist in a path.
             </summary>
+            <example>
+            fileMod.ForbiddenChars = new string[]{ "\\", "..", ":" };
+            </example>
         </member>
-        <member name="T:HttpServer.Helpers.Implementations.PrototypeImp">
+        <member name="T:HttpServer.Helpers.WebHelper">
             <summary>
-            PrototypeJS implementation of the javascript functions.
+            Webhelper provides helpers for common tasks in HTML.
             </summary>
         </member>
-        <member name="M:HttpServer.Helpers.Implementations.PrototypeImp.AjaxRequest(System.String,System.String[])">
+        <member name="F:HttpServer.Helpers.WebHelper.JSImplementation">
             <summary>
-            Requests a url through ajax
+            Used to let the website use different javascript libraries.
+            Default is <see cref="T:HttpServer.Helpers.Implementations.PrototypeImp"/>
             </summary>
-            <param name="url">url to fetch. Url is NOT enclosed in quotes by the implementation. You need to do that yourself.</param>
-            <param name="options">optional options in format "key, value, key, value", used in JS request object. All keys should end with colon.</param>
-            <returns>a link tag</returns>
-            <remarks>onclick attribute is used by this method.</remarks>
-            <example>
-            <code>
-            // plain text
-            JSHelper.AjaxRequest("'/user/show/1'");
-            
-            // ajax request using this.href
-            string link = "&lt;a href=\"/user/call/1\" onclick=\"" + JSHelper.AjaxRequest("this.href") + "/&lt;call user&lt;/a&gt;";
-            </code>
-            </example>
         </member>
-        <member name="M:HttpServer.Helpers.Implementations.PrototypeImp.Contains(System.Collections.Generic.IEnumerable{System.String},System.String)">
+        <member name="M:HttpServer.Helpers.WebHelper.AjaxRequest(System.String,System.String,System.String[])">
             <summary>
-            Determins if a list of strings contains a specific value
+            Creates a link that invokes through ajax.
             </summary>
-            <param name="options">options to check in</param>
-            <param name="value">value to find</param>
-            <returns>true if value was found</returns>
-            <remarks>case insensitive</remarks>
+            <param name="url">url to fetch</param>
+            <param name="title">link title</param>
+            <param name="options">
+            optional options in format "key, value, key, value". 
+            Javascript options starts with ':'.
+            </param>
+            <returns>a link tag</returns>
+            <example>
+            WebHelper.AjaxRequest("/users/add/", "Add user", "method:", "post", "onclick", "validate('this');");
+            </example>
         </member>
-        <member name="M:HttpServer.Helpers.Implementations.PrototypeImp.AjaxUpdater(System.String,System.String,System.String[])">
+        <member name="M:HttpServer.Helpers.WebHelper.AjaxUpdater(System.String,System.String,System.String,System.String[])">
             <summary>
-            Ajax requests that updates an element with
-            the fetched content
+            Builds a link that updates an element with the fetched ajax content.
             </summary>
-            <param name="url">URL to fetch. URL is NOT enclosed in quotes by the implementation. You need to do that yourself.</param>
-            <param name="targetId">element to update</param>
-            <param name="options">options in format "key, value, key, value". All keys should end with colon.</param>
+            <param name="url">Url to fetch content from</param>
+            <param name="title">link title</param>
+            <param name="targetId">html element to update with the results of the ajax request.</param>
+            <param name="options">optional options in format "key, value, key, value"</param>
             <returns>A link tag.</returns>
-            <example>
-            <code>
-            JSHelper.AjaxUpdater("'/user/show/1'", "user", "onsuccess:", "alert('hello');", "asynchronous:", "true");
-            </code>
-            </example>
         </member>
-        <member name="M:HttpServer.Helpers.Implementations.PrototypeImp.DialogLink(System.String,System.String,System.String[])">
+        <member name="M:HttpServer.Helpers.WebHelper.DialogLink(System.String,System.String,System.String[])">
             <summary>
             A link that pop ups a Dialog (overlay div)
             </summary>
-            <param name="url">URL to contents of dialog</param>
+            <param name="url">url to contents of dialog</param>
             <param name="title">link title</param>
-            <param name="htmlAttributes">name, value, name, value</param>
-            <returns>
-            A "a"-tag that popups a dialog when clicked
-            </returns>
-            <remarks><para>Requires Control.Modal found here: http://livepipe.net/projects/control_modal/</para>
-            And the following JavaScript (load it in application.js):
-            <code>
-            Event.observe(window, 'load',
-              function() {
-                document.getElementsByClassName('modal').each(function(link){  new Control.Modal(link);  });
-              }
-            );
-            </code>
-            </remarks>
+            <param name="htmlAttributes">name/value of html attributes.</param>
+            <returns>A "a"-tag that popups a dialog when clicked</returns>
             <example>
             WebHelper.DialogLink("/user/show/1", "show user", "onmouseover", "alert('booh!');");
             </example>
         </member>
-        <member name="M:HttpServer.Helpers.Implementations.PrototypeImp.CreateDialog(System.String,System.String,System.String[])">
+        <member name="M:HttpServer.Helpers.WebHelper.CreateDialog(System.String,System.String,System.String[])">
             <summary>
-            create a modal dialog (usually using DIVs)
+            Create/Open a dialog box using ajax
             </summary>
-            <param name="url">url to fetch</param>
-            <param name="title">dialog title</param>
-            <param name="options">javascript/html attributes. javascript options ends with colon ':'.</param>
+            <param name="url"></param>
+            <param name="title"></param>
+            <param name="parameters"></param>
             <returns></returns>
         </member>
-        <member name="M:HttpServer.Helpers.Implementations.PrototypeImp.CloseDialog">
+        <member name="M:HttpServer.Helpers.WebHelper.CloseDialog">
             <summary>
             Close a javascript dialog window/div.
             </summary>
             <returns>javascript for closing a dialog.</returns>
-            <see cref="M:HttpServer.Helpers.Implementations.PrototypeImp.DialogLink(System.String,System.String,System.String[])"/>
+            <see cref="M:HttpServer.Helpers.WebHelper.DialogLink(System.String,System.String,System.String[])"/>
         </member>
-        <member name="M:HttpServer.Helpers.Implementations.PrototypeImp.AjaxFormOnSubmit(System.String[])">
+        <member name="M:HttpServer.Helpers.WebHelper.FormStart(System.String,System.String,System.Boolean)">
             <summary>
-            javascript action that should be added to the "onsubmit" event in the form tag.
+            Create a &lt;form&gt; tag.
             </summary>
-            <param name="options">remember to encapsulate strings in ''</param>
-            <returns></returns>
-            <remarks>All javascript option names should end with colon.</remarks>
+            <param name="name">name of form</param>
+            <param name="action">action to invoke on submit</param>
+            <param name="isAjax">form should be posted as ajax</param>
+            <returns>html code</returns>
             <example>
-            	<code>
-            JSHelper.AjaxRequest("/user/show/1", "onsuccess:", "$('userInfo').update(result);");
-            </code>
+            WebHelper.FormStart("frmLogin", "/user/login", Request.IsAjax);
             </example>
         </member>
-        <member name="T:HttpServer.Authentication.DigestAuthentication">
-            <summary>
-            Implements HTTP Digest authentication. It's more secure than Basic auth since password is 
-            encrypted with a "key" from the server. 
-            </summary>
-            <remarks>
-            Keep in mind that the password is encrypted with MD5. Use a combination of SSL and digest auth to be secure.
-            </remarks>
-        </member>
-        <member name="M:HttpServer.Authentication.DigestAuthentication.#ctor(HttpServer.Authentication.AuthenticationHandler,HttpServer.Authentication.AuthenticationRequiredHandler)">
-            <summary>
-            Initializes a new instance of the <see cref="T:HttpServer.Authentication.DigestAuthentication"/> class.
-            </summary>
-            <param name="authenticator">Delegate used to provide information used during authentication.</param>
-            <param name="authenticationRequiredHandler">Delegate used to determine if authentication is required (may be null).</param>
-        </member>
-        <member name="M:HttpServer.Authentication.DigestAuthentication.#ctor(HttpServer.Authentication.AuthenticationHandler)">
-            <summary>
-            Initializes a new instance of the <see cref="T:HttpServer.Authentication.DigestAuthentication"/> class.
-            </summary>
-            <param name="authenticator">Delegate used to provide information used during authentication.</param>
-        </member>
-        <member name="F:HttpServer.Authentication.DigestAuthentication.DisableNonceCheck">
+        <member name="M:HttpServer.Helpers.WebHelper.Link(System.String,System.String,System.String[])">
             <summary>
-            Used by test classes to be able to use hardcoded values
+            Create a link tag.
             </summary>
+            <param name="url">url to go to</param>
+            <param name="title">link title (text that is displayed)</param>
+            <param name="htmlAttributes">html attributes, name, value, name, value</param>
+            <returns>html code</returns>
+            <example>
+            WebHelper.Link("/user/show/1", "Show user", "id", "showUser", "onclick", "return confirm('Are you shure?');");
+            </example>
         </member>
-        <member name="M:HttpServer.Authentication.DigestAuthentication.Authenticate(System.String,System.String,System.String,System.Object[])">
+        <member name="M:HttpServer.Helpers.WebHelper.BuildLink(System.String,System.String,System.String[])">
             <summary>
-            An authentication response have been received from the web browser.
-            Check if it's correct
+            Build a link
             </summary>
-            <param name="authenticationHeader">Contents from the Authorization header</param>
-            <param name="realm">Realm that should be authenticated</param>
-            <param name="httpVerb">GET/POST/PUT/DELETE etc.</param>
-            <param name="options">First option: true if username/password is correct but not cnonce</param>
-            <returns>
-            Authentication object that is stored for the request. A user class or something like that.
-            </returns>
-            <exception cref="T:System.ArgumentException">if authenticationHeader is invalid</exception>
-            <exception cref="T:System.ArgumentNullException">If any of the paramters is empty or null.</exception>
+            <param name="url">url to go to.</param>
+            <param name="title">title of link (displayed text)</param>
+            <param name="htmlAttributes">extra html attributes.</param>
+            <returns>a complete link</returns>
         </member>
-        <member name="M:HttpServer.Authentication.DigestAuthentication.Encrypt(System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.String)">
+        <member name="M:HttpServer.Helpers.WebHelper.BuildLink(System.String,System.String,System.String[],System.String[])">
             <summary>
-            Encrypts parameters into a Digest string
+            Build a link
             </summary>
-            <param name="realm">Realm that the user want to log into.</param>
-            <param name="userName">User logging in</param>
-            <param name="password">Users password.</param>
-            <param name="method">HTTP method.</param>
-            <param name="uri">Uri/domain that generated the login prompt.</param>
-            <param name="qop">Quality of Protection.</param>
-            <param name="nonce">"Number used ONCE"</param>
-            <param name="nc">Hexadecimal request counter.</param>
-            <param name="cnonce">"Client Number used ONCE"</param>
-            <returns>Digest encrypted string</returns>
+            <param name="url">url to go to.</param>
+            <param name="title">title of link (displayed text)</param>
+            <param name="htmlAttributes">extra html attributes.</param>
+            <returns>a complete link</returns>
+            <param name="options">more options</param>
         </member>
-        <member name="M:HttpServer.Authentication.DigestAuthentication.Encrypt(System.String,System.String,System.String,System.String,System.String,System.String)">
+        <member name="M:HttpServer.Helpers.WebHelper.Select(System.String,System.Collections.ICollection,HttpServer.Helpers.GetIdTitle,System.Object,System.Boolean)">
             <summary>
-            
+            Obsolete
             </summary>
-            <param name="ha1">Md5 hex encoded "userName:realm:password", without the quotes.</param>
-            <param name="ha2">Md5 hex encoded "method:uri", without the quotes</param>
-            <param name="qop">Quality of Protection</param>
-            <param name="nonce">"Number used ONCE"</param>
-            <param name="nc">Hexadecimal request counter.</param>
-            <param name="cnonce">Client number used once</param>
-            <returns></returns>
+            <param name="name">Obsolete</param>
+            <param name="collection">Obsolete</param>
+            <param name="getIdTitle">Obsolete</param>
+            <param name="selectedValue">Obsolete</param>
+            <param name="firstEmpty">Obsolete</param>
+            <returns>Obsolete</returns>
         </member>
-        <member name="M:HttpServer.Authentication.DigestAuthentication.CreateResponse(System.String,System.Object[])">
+        <member name="M:HttpServer.Helpers.WebHelper.Select(System.String,System.String,System.Collections.ICollection,HttpServer.Helpers.GetIdTitle,System.Object,System.Boolean)">
             <summary>
-            Create a response that can be sent in the WWW-Authenticate header.
+            Obsolete
             </summary>
-            <param name="realm">Realm that the user should authenticate in</param>
-            <param name="options">First options specifies if true if username/password is correct but not cnonce.</param>
-            <returns>A correct auth request.</returns>
-            <exception cref="T:System.ArgumentNullException">If realm is empty or null.</exception>
+            <param name="name">Obsolete</param>
+            <param name="id">Obsolete</param>
+            <param name="collection">Obsolete</param>
+            <param name="getIdTitle">Obsolete</param>
+            <param name="selectedValue">Obsolete</param>
+            <param name="firstEmpty">Obsolete</param>
+            <returns>Obsolete</returns>
         </member>
-        <member name="M:HttpServer.Authentication.DigestAuthentication.Decode(System.String,System.Text.Encoding)">
+        <member name="M:HttpServer.Helpers.WebHelper.List(System.Collections.Generic.IEnumerable{System.Object},System.String)">
             <summary>
-            Decodes authorization header value
+            Render errors into a UL with class "errors"
             </summary>
-            <param name="buffer">header value</param>
-            <param name="encoding">Encoding that the buffer is in</param>
-            <returns>All headers and their values if successful; otherwise null</returns>
-            <example>
-            NameValueCollection header = DigestAuthentication.Decode("response=\"6629fae49393a05397450978507c4ef1\",\r\nc=00001", Encoding.ASCII);
-            </example>
-            <remarks>Can handle lots of whitespaces and new lines without failing.</remarks>
+            <param name="className">class used by UL-tag.</param>
+            <param name="theList">items to list</param>
+            <returns>an unordered html list.</returns>
         </member>
-        <member name="M:HttpServer.Authentication.DigestAuthentication.GetCurrentNonce">
+        <member name="M:HttpServer.Helpers.WebHelper.List(System.Collections.Specialized.NameValueCollection,System.String)">
             <summary>
-            Gets the current nonce.
+            Render errors into a UL with class "errors"
             </summary>
-            <returns></returns>
+            <param name="className">class used by UL-tag.</param>
+            <param name="theList">items to list</param>
+            <returns>an unordered html list.</returns>
         </member>
-        <member name="M:HttpServer.Authentication.DigestAuthentication.GetMD5HashBinHex2(System.String)">
+        <member name="M:HttpServer.Helpers.WebHelper.Errors(System.Collections.Specialized.NameValueCollection)">
             <summary>
-            Gets the Md5 hash bin hex2.
+            Render errors into a UL with class "errors"
             </summary>
-            <param name="toBeHashed">To be hashed.</param>
+            <param name="errors"></param>
             <returns></returns>
         </member>
-        <member name="M:HttpServer.Authentication.DigestAuthentication.IsValidNonce(System.String)">
+        <member name="M:HttpServer.Helpers.WebHelper.GenerateHtmlAttributes(System.Text.StringBuilder,System.String[],System.String[])">
             <summary>
-            determines if the nonce is valid or has expired.
+            Generates a list with html attributes.
             </summary>
-            <param name="nonce">nonce value (check wikipedia for info)</param>
-            <returns>true if the nonce has not expired.</returns>
+            <param name="sb">StringBuilder that the options should be added to.</param>
+            <param name="firstOptions">attributes set by user.</param>
+            <param name="secondOptions">attributes set by any of the helper classes.</param>
         </member>
-        <member name="P:HttpServer.Authentication.DigestAuthentication.Name">
+        <member name="M:HttpServer.Helpers.WebHelper.GenerateHtmlAttributes(System.Text.StringBuilder,System.String[])">
             <summary>
-            name used in http request.
+            Generates a list with html attributes.
             </summary>
+            <param name="sb">StringBuilder that the options should be added to.</param>
+            <param name="options"></param>
         </member>
-        <member name="P:HttpServer.Authentication.DigestAuthentication.TokenIsHA1">
+        <member name="T:HttpServer.Helpers.GetIdTitle">
             <summary>
-            Gets or sets whether the token supplied in <see cref="T:HttpServer.Authentication.AuthenticationHandler"/> is a
-            HA1 generated string.
+            Delegate used by <see cref="M:HttpServer.Helpers.FormHelper.Select(System.String,System.Collections.IEnumerable,HttpServer.Helpers.GetIdTitle,System.Object,System.Boolean)"/> to populate select options.
             </summary>
+            <param name="obj">current object (for instance a User).</param>
+            <param name="id">Text that should be displayed in the value part of a &lt;optiongt;-tag.</param>
+            <param name="title">Text shown in the select list.</param>
+            <example>
+            // Class that is going to be used in a SELECT-tag.
+            public class User
+            {
+                private readonly string _realName;
+                private readonly int _id;
+                public User(int id, string realName)
+                {
+                    _id = id;
+                    _realName = realName;
+                }
+                public string RealName
+                {
+                    get { return _realName; }
+                }
+            
+                public int Id
+                {
+                    get { return _id; }
+                }
+            }
+            
+            // Using an inline delegate to generate the select list
+            public void UserInlineDelegate()
+            {
+                List&lt;User&gt; items = new List&lt;User&gt;();
+                items.Add(new User(1, "adam"));
+                items.Add(new User(2, "bertial"));
+                items.Add(new User(3, "david"));
+                string htmlSelect = Select("users", "users", items, delegate(object o, out object id, out object value)
+                                                                    {
+                                                                        User user = (User)o;
+                                                                        id = user.Id;
+                                                                        value = user.RealName;
+                                                                    }, 2, true);
+            }
+            
+            // Using an method as delegate to generate the select list.
+            public void UseExternalDelegate()
+            {
+                List&lt;User&gt; items = new List&lt;User&gt;();
+                items.Add(new User(1, "adam"));
+                items.Add(new User(2, "bertial"));
+                items.Add(new User(3, "david"));
+                string htmlSelect = Select("users", "users", items, UserOptions, 1, true);
+            }
+            
+            // delegate returning id and title
+            public static void UserOptions(object o, out object id, out object title)
+            {
+                User user = (User)o;
+                id = user.Id;
+                value = user.RealName;
+            }    /// </example>
         </member>
     </members>
 </doc>
-- 
cgit v1.1


From 4867a7cbbf7302845fff031db5eae6fbf93bf26b Mon Sep 17 00:00:00 2001
From: teravus
Date: Thu, 7 Feb 2013 10:26:48 -0500
Subject: This is the final commit that enables the Websocket handler

---
 bin/HttpServer_OpenSim.dll | Bin 116224 -> 116224 bytes
 bin/HttpServer_OpenSim.pdb | Bin 302592 -> 343552 bytes
 2 files changed, 0 insertions(+), 0 deletions(-)

(limited to 'bin')

diff --git a/bin/HttpServer_OpenSim.dll b/bin/HttpServer_OpenSim.dll
index 9cd1e08..fd7ad74 100755
Binary files a/bin/HttpServer_OpenSim.dll and b/bin/HttpServer_OpenSim.dll differ
diff --git a/bin/HttpServer_OpenSim.pdb b/bin/HttpServer_OpenSim.pdb
index d20a0c5..f56e891 100644
Binary files a/bin/HttpServer_OpenSim.pdb and b/bin/HttpServer_OpenSim.pdb differ
-- 
cgit v1.1