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 <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<User> items = new List<User>(); - 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<User> items = new List<User>(); - 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 = "<a href=\"/user/call/1\" onclick=\"" + JSHelper.AjaxRequest("this.href") + "/<call user</a>"; + </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 <form> 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<User> items = new List<User>(); + 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<User> items = new List<User>(); + 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 <form> 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<User> items = new List<User>(); - 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<User> items = new List<User>(); - 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 <form> 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 = "<a href=\"/user/call/1\" onclick=\"" + JSHelper.AjaxRequest("this.href") + "/<call user</a>"; - </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 = "<a href=\"/user/call/1\" onclick=\"" + JSHelper.AjaxRequest("this.href") + "/<call user</a>"; + </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 = "<a href=\"/user/call/1\" onclick=\"" + JSHelper.AjaxRequest("this.href") + "/<call user</a>"; - </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 <form> 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 <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<User> items = new List<User>(); + 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<User> items = new List<User>(); + 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