From cd3b7bcb03cf1fa8c5303926c79cebe77dd8af8e Mon Sep 17 00:00:00 2001 From: "Teravus Ovares (Dan Olivares)" Date: Tue, 18 Aug 2009 01:19:01 -0400 Subject: [PATCH] * Update HTTP Server with jhurliman's longheader fix. Changes 1024 with 4096. --- bin/HttpServer_OpenSim.dll | Bin 113664 -> 113664 bytes bin/HttpServer_OpenSim.pdb | Bin 304640 -> 382464 bytes bin/HttpServer_OpenSim.xml | 8152 ++++++++++++++++++------------------ 3 files changed, 4076 insertions(+), 4076 deletions(-) diff --git a/bin/HttpServer_OpenSim.dll b/bin/HttpServer_OpenSim.dll index 287321cf6e413433570ecd86ea6ec7b6cceb86be..54142762af1882a34755f73301d794add78990c8 100644 GIT binary patch literal 113664 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 P`0F^)`~QFc_b~9^JH534 literal 113664 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

A5@3MDTB_=yxe+TJXxvZ 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 G4EztnxFdxC diff --git a/bin/HttpServer_OpenSim.pdb b/bin/HttpServer_OpenSim.pdb index 41a152adafe443a66c8a0ab819408d90cc6fa915..7c00e66ed798ee78a8b7d15a1770127e816607a9 100644 GIT binary patch delta 90176 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⋙sdP3jKwHOjzkGV6p_?k=f%rMTsR$W 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 DvJD=e delta 66540 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 N(`C7H4)-p${QvHDVLbo< diff --git a/bin/HttpServer_OpenSim.xml b/bin/HttpServer_OpenSim.xml index c549ebcbb1..9c3df787bc 100644 --- a/bin/HttpServer_OpenSim.xml +++ b/bin/HttpServer_OpenSim.xml @@ -4,227 +4,79 @@ HttpServer_OpenSim - +

- Interface for sessions + Inversion of control interface. - + - Remove everything from the session + Add a component instance + Interface type + Instance to add - + - Remove everything from the session - - True if the session is cleared due to expiration - - - - Session id - - - - - Should - - Name of the session variable - null if it's not set - If the object cant be serialized. - - - - When the session was last accessed. - This property is touched by the http server each time the - session is requested. - - - - - Number of session variables. - - - - - Event triggered upon clearing the session - - - - - Arguments sent when a is cleared - - - - - Instantiates the arguments for the event - - True if the session is cleared due to expiration - - - - Returns true if the session is cleared due to expiration - - - - - Delegate for when a IHttpSession is cleared - - this is being cleared. - Arguments for the clearing - - - - Contains a listener that doesn't do anything with the connections. - - - - - Listen for regular HTTP connections - - IP Address to accept connections on - TCP Port to listen on, default HTTP port is 80. - Factory used to create es. - address is null. - Port must be a positive number. - - - - Initializes a new instance of the class. - - IP Address to accept connections on - TCP Port to listen on, default HTTPS port is 443 - Factory used to create es. - Certificate to use - - - - Initializes a new instance of the class. - - IP Address to accept connections on - TCP Port to listen on, default HTTPS port is 443 - Factory used to create es. - Certificate to use - which HTTPS protocol to use, default is TLS. - - - Exception. - - - - Will try to accept connections one more time. - - If any exceptions is thrown. - - - - Can be used to create filtering of new connections. - - Accepted socket - true if connection can be accepted; otherwise false. - - - - Start listen for new connections - - Number of connections that can stand in a queue to be accepted. - Listener have already been started. - - - - Stop the listener - - - - - - Gives you a change to receive log entries for all internals of the HTTP library. + Get a component. + Interface type + Component if registered, otherwise null. - You may not switch log writer after starting the listener. + Component will get created if needed. - + - True if we should turn on trace logs. + Checks if the specified component interface have been added. + + true if found; otherwise false. - + - Catch exceptions not handled by the listener. + Add a component. + + Type being requested. + Type being created. + + + + 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. - Exceptions will be thrown during debug mode if this event is not used, - exceptions will be printed to console and suppressed during release mode. + Throw if you are using a and want to prompt for user name/password. - + - A request have been received from a . + Method that process the url + Information sent by the browser about the request + Information that is being sent back to the client. + Session used to + true if this module handled the request. - + - The server encountered an unexpected condition which prevented it from fulfilling the request. + Set the log writer to use. + logwriter to use. - + - All HTTP based exceptions will derive this class. + Log something. + importance of log message + message - + - Create a new HttpException - - http status code (sent in the response) - error description - - - - Create a new HttpException - - http status code (sent in the response) - error description - inner exception - - - - status code to use in the response. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - error message. - - - - Initializes a new instance of the class. - - error message. - inner exception. - - - - Used to inform http server that - - - - - Eventarguments used when an exception is thrown by a module - - the exception - - - - Exception thrown in a module + 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. @@ -267,121 +119,122 @@ Retrieves the full path name to the resource file - + - + The object form class takes an object and creates form items for it. + + + + Initializes a new instance of the class. + + + form name *and* id. + action to do when form is posted. + + + + + Initializes a new instance of the class. + + form name *and* id. + action to do when form is posted. + object to get values from + + + + Initializes a new instance of the class. + + form action. + object to get values from. + + + + write out the FORM-tag. + + generated html code + + + + Writeout the form tag + + form should be posted through ajax. + generated html code + + + + Generates a text box. + + + + generated html code + + + + password box + + + + generated html code + + + + Hiddens the specified property name. + + Name of the property. + The options. + generated html code + + + + Labels the specified property name. + + property in object. + caption + generated html code + + + + Generate a checkbox + + property in object + checkbox value + additional html attributes. + generated html code + + + + Write a html select tag + + object property. + id column + The title column. + The options. - - - - Represents a field in a multipart form - - + - Event arguments used when a new header have been parsed. + Selects the specified property name. + Name of the property. + The items. + The id column. + The title column. + The options. + - + - Initializes a new instance of the class. + Write a submit tag. - Name of header. - Header value. + button caption + html submit tag - + - Initializes a new instance of the class. - - - - - Gets or sets header name. - - - - - Gets or sets header value. - - - - - New implementation of the HTTP listener. - - - Use the Create methods to create a default listener. - - - - - Initializes a new instance of the class. - - IP Address to accept connections on - TCP Port to listen on, default HTTP port is 80. - Factory used to create es. - address is null. - Port must be a positive number. - - - - Initializes a new instance of the class. - - The address. - The port. - The factory. - The certificate. - - - - Initializes a new instance of the class. - - The address. - The port. - The factory. - The certificate. - The protocol. - - - - Creates a new instance with default factories. - - Address that the listener should accept connections on. - Port that listener should accept connections on. - Created HTTP listener. - - - - Creates a new instance with default factories. - - Address that the listener should accept connections on. - Port that listener should accept connections on. - Certificate to use - Created HTTP listener. - - - - Creates a new instance with default factories. - - Address that the listener should accept connections on. - Port that listener should accept connections on. - Certificate to use - which HTTPS protocol to use, default is TLS. - Created HTTP listener. - - - - Can be used to create filtering of new connections. - - Accepted socket - - true if connection can be accepted; otherwise false. - - - - - A client have been accepted, but not handled, by the listener. + html end form tag + html @@ -448,905 +301,280 @@ Content type (with any additional info like boundry). Content type is always supplied in lower case. True if the decoder can parse the specified content type - + - 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. + The server encountered an unexpected condition which prevented it from fulfilling the request. - Class that the exception was thrown in. - Exception + + + + All HTTP based exceptions will derive this class. + + + + + Create a new HttpException + + http status code (sent in the response) + error description + + + + Create a new HttpException + + http status code (sent in the response) + error description + inner exception + + + + status code to use in the response. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + error message. + + + + Initializes a new instance of the class. + + error message. + inner exception. + + + + Session store using memory for each session. + + + + + A session store is used to store and load sessions on a media. + The default implementation () saves/retrieves sessions from memory. + + + + + Creates a new http session with a generated id. + + A object + + + + Creates a new http session with a specific id + + Id used to identify the new cookie.. + A object. - Server will throw a InternalServerException in release version if you dont - handle this delegate. + Id should be generated by the store implementation if it's null or . - + - Implements HTTP Digest authentication. It's more secure than Basic auth since password is - encrypted with a "key" from the server. + Load an existing session. - - Keep in mind that the password is encrypted with MD5. Use a combination of SSL and digest auth to be secure. - + Session id (usually retrieved from a client side cookie). + A session if found; otherwise null. - + - Authentication modules are used to implement different - kind of HTTP authentication. + Save an updated session to the store. + + Session id (usually retrieved from a client side cookie). + If Id property have not been specified. + + + + We use the flyweight pattern which reuses small objects + instead of creating new each time. + + Unused session that should be reused next time Create is called. + + + + Remove expired sessions - + - Tag used for authentication. + Remove a session + + id of the session. + + + + Load a session from the store + + + null if session is not found. + + + + Number of minutes before a session expires. + + Default time is 20 minutes. + + + + Initializes the class setting the expirationtimer to clean the session every minute - + - Initializes a new instance of the class. - - Delegate used to provide information used during authentication. - Delegate used to determine if authentication is required (may be null). - - - - Initializes a new instance of the class. - - Delegate used to provide information used during authentication. - - - - Create a response that can be sent in the WWW-Authenticate header. - - Realm that the user should authenticate in - Array with optional options. - A correct authentication request. - If realm is empty or null. - - - - An authentication response have been received from the web browser. - Check if it's correct - - Contents from the Authorization header - Realm that should be authenticated - GET/POST/PUT/DELETE etc. - options to specific implementations - Authentication object that is stored for the request. A user class or something like that. - if is invalid - If any of the parameters is empty or null. - - - - Used to invoke the authentication delegate that is used to lookup the user name/realm. - - Realm (domain) that user want to authenticate in - User name - Password used for validation. Some implementations got password in clear text, they are then sent to client. - object that will be stored in the request to help you identify the user if authentication was successful. - true if authentication was successful - - - - Determines if authentication is required. - - HTTP request from browser - true if user should be authenticated. - throw from your delegate if no more attempts are allowed. - If no more attempts are allowed - - - - name used in HTTP request. + Delegate for the cleanup timer - + - Initializes a new instance of the class. - - Delegate used to provide information used during authentication. - Delegate used to determine if authentication is required (may be null). - - - - Initializes a new instance of the class. - - Delegate used to provide information used during authentication. - - - - Used by test classes to be able to use hardcoded values - - - - - An authentication response have been received from the web browser. - Check if it's correct - - Contents from the Authorization header - Realm that should be authenticated - GET/POST/PUT/DELETE etc. - First option: true if username/password is correct but not cnonce - - Authentication object that is stored for the request. A user class or something like that. - - if authenticationHeader is invalid - If any of the paramters is empty or null. - - - - Encrypts parameters into a Digest string - - Realm that the user want to log into. - User logging in - Users password. - HTTP method. - Uri/domain that generated the login prompt. - Quality of Protection. - "Number used ONCE" - Hexadecimal request counter. - "Client Number used ONCE" - Digest encrypted string - - - - - - Md5 hex encoded "userName:realm:password", without the quotes. - Md5 hex encoded "method:uri", without the quotes - Quality of Protection - "Number used ONCE" - Hexadecimal request counter. - Client number used once - - - - - Create a response that can be sent in the WWW-Authenticate header. - - Realm that the user should authenticate in - First options specifies if true if username/password is correct but not cnonce. - A correct auth request. - If realm is empty or null. - - - - Decodes authorization header value - - header value - Encoding that the buffer is in - All headers and their values if successful; otherwise null - - NameValueCollection header = DigestAuthentication.Decode("response=\"6629fae49393a05397450978507c4ef1\",\r\nc=00001", Encoding.ASCII); - - Can handle lots of whitespaces and new lines without failing. - - - - Gets the current nonce. + Creates a new http session - + - Gets the Md5 hash bin hex2. + Creates a new http session with a specific id - To be hashed. + Id used to identify the new cookie.. + A object. + + Id should be generated by the store implementation if it's null or . + + + + + Load an existing session. + + - + - determines if the nonce is valid or has expired. + Save an updated session to the store. - nonce value (check wikipedia for info) - true if the nonce has not expired. - - - - name used in http request. - - - - - Gets or sets whether the token supplied in is a - HA1 generated string. - - - - - Class that receives Requests from a . - - - - - Client have been disconnected. - - Client that was disconnected. - Reason - - - - - Invoked when a client context have received a new HTTP request - - Client that received the request. - Request that was received. - - - - - Delegate used to find a realm/domain. - - - - - Realms are used during HTTP Authentication - - - - - - - A complete HTTP server, you need to add a module to it to be able to handle incoming requests. - - - - // 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); - - - - - - - - - Initializes a new instance of the class. - - Used to get all components used in the server.. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - Form decoders are used to convert different types of posted data to the object types. - - - - - - Initializes a new instance of the class. - - A session store is used to save and retrieve sessions - - - - - Initializes a new instance of the class. - - The log writer. - - - - - Initializes a new instance of the class. - - Form decoders are used to convert different types of posted data to the object types. - The log writer. - - - - - - - Initializes a new instance of the class. - - Form decoders are used to convert different types of posted data to the object types. - A session store is used to save and retrieve sessions - The log writer. - - - - - - - - Adds the specified rule. - - The rule. - - - - Add a to the server. - - mode to add - - - - Decodes the request body. - - The request. - Failed to decode form data. - - - - Generate a HTTP error page (that will be added to the response body). - response status code is also set. - - Response that the page will be generated in. - . - response body contents. - - - - Generate a HTTP error page (that will be added to the response body). - response status code is also set. - - Response that the page will be generated in. - exception. - - - - Realms are used by the s. - - HTTP request - domain/realm. - - - - Process an incoming request. - - connection to client - request information - response that should be filled - session information - - - - Can be overloaded to implement stuff when a client have been connected. - - - Default implementation does nothing. - - client that disconnected - disconnect reason - - - - Handle authentication - - - - true if request can be handled; false if not. - Invalid authorization header - + - Will request authentication. + We use the flyweight pattern which reuses small objects + instead of creating new each time. - - Sends respond to client, nothing else can be done with the response after this. - - - - + EmptyLanguageNode (unused) session that should be reused next time Create is called. - + - Received from a when a request have been parsed successfully. - - that received the request. - The request. - - - - To be able to track request count. - - - - - - - Start the web server using regular HTTP. - - IP Address to listen on, use IpAddress.Any to accept connections on all IP addresses/network cards. - Port to listen on. 80 can be a good idea =) - address is null. - Port must be a positive number. - - - - Accept secure connections. - - IP Address to listen on, use to accept connections on all IP Addresses / network cards. - Port to listen on. 80 can be a good idea =) - Certificate to use - address is null. - Port must be a positive number. - - - - shut down the server and listeners + Remove expired sessions - + - write an entry to the log file + Remove a session - importance of the message - log message + id of the session. - + - write an entry to the log file + Load a session from the store - object that wrote the message - importance of the message - log message + + null if session is not found. - + - Server that is handling the current request. - - - Will be set as soon as a request arrives to the object. - - - - - Modules used for authentication. The module that is is added first is used as - the default authentication module. - - Use the corresponding property - in the if you are using multiple websites. - - - - Form decoder providers are used to decode request body (which normally contains form data). + Number of minutes before a session expires. + Default is 20 minutes. - + - Server name sent in HTTP responses. - - - Do NOT include version in name, since it makes it - easier for hackers. - - - - - Name of cookie where session id is stored. + Cookies that should be set. - + - Specified where logging should go. + Adds a cookie in the collection. - - - + cookie to add + cookie is null - + - Number of connections that can wait to be accepted by the server. + Copy a request cookie - Default is 10. + + When the cookie should expire - + - Gets or sets maximum number of allowed simultaneous requests. + Gets a collection enumerator on the cookie list. - - - 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. - - - The default number if allowed simultaneous requests are 10. - - + collection enumerator - + - Gets or sets maximum number of requests queuing to be handled. - - - - The WebServer will start turning requests away if response code - to indicate that the server - is too busy to be able to handle the request. - - - - - - Realms are used during HTTP authentication. - Default realm is same as server name. + Remove all cookies - + - Let's to receive unhandled exceptions from the threads. + Returns an enumerator that iterates through the collection. - - Exceptions will be thrown during debug mode if this event is not used, - exceptions will be printed to console and suppressed during release mode. - - - - - Webhelper provides helpers for common tasks in HTML. - - - - - Used to let the website use different javascript libraries. - Default is - - - - - Creates a link that invokes through ajax. - - url to fetch - link title - - optional options in format "key, value, key, value". - Javascript options starts with ':'. - - a link tag - - WebHelper.AjaxRequest("/users/add/", "Add user", "method:", "post", "onclick", "validate('this');"); - - - - - Builds a link that updates an element with the fetched ajax content. - - Url to fetch content from - link title - html element to update with the results of the ajax request. - optional options in format "key, value, key, value" - A link tag. - - - - A link that pop ups a Dialog (overlay div) - - url to contents of dialog - link title - name/value of html attributes. - A "a"-tag that popups a dialog when clicked - - WebHelper.DialogLink("/user/show/1", "show user", "onmouseover", "alert('booh!');"); - - - - - Create/Open a dialog box using ajax - - - - - - - - - Close a javascript dialog window/div. - - javascript for closing a dialog. - - - - - Create a <form> tag. - - name of form - action to invoke on submit - form should be posted as ajax - html code - - WebHelper.FormStart("frmLogin", "/user/login", Request.IsAjax); - - - - - Create a link tag. - - url to go to - link title (text that is displayed) - html attributes, name, value, name, value - html code - - WebHelper.Link("/user/show/1", "Show user", "id", "showUser", "onclick", "return confirm('Are you shure?');"); - - - - - Build a link - - url to go to. - title of link (displayed text) - extra html attributes. - a complete link - - - - Build a link - - url to go to. - title of link (displayed text) - extra html attributes. - a complete link - more options - - - - Obsolete - - Obsolete - Obsolete - Obsolete - Obsolete - Obsolete - Obsolete - - - - Obsolete - - Obsolete - Obsolete - Obsolete - Obsolete - Obsolete - Obsolete - Obsolete - - - - Render errors into a UL with class "errors" - - class used by UL-tag. - items to list - an unordered html list. - - - - Render errors into a UL with class "errors" - - class used by UL-tag. - items to list - an unordered html list. - - - - Render errors into a UL with class "errors" - - - - - - - Generates a list with html attributes. - - StringBuilder that the options should be added to. - attributes set by user. - attributes set by any of the helper classes. - - - - Generates a list with html attributes. - - StringBuilder that the options should be added to. - - - - - Purpose of this class is to create a javascript toolkit independent javascript helper. - - - - - Generates a list with JS options. - - StringBuilder that the options should be added to. - the javascript options. name, value pairs. each string value should be escaped by YOU! - true if we should start with a comma. - - - - Removes any javascript parameters from an array of parameters - - The array of parameters to remove javascript params from - An array of html parameters - - - - javascript action that should be added to the "onsubmit" event in the form tag. - - - All javascript option names should end with colon. - - - JSHelper.AjaxRequest("/user/show/1", "onsuccess:", "$('userInfo').update(result);"); - - - - - - Requests a url through ajax - - url to fetch - optional options in format "key, value, key, value", used in JS request object. - a link tag - All javascript option names should end with colon. - - - JSHelper.AjaxRequest("/user/show/1", "onsuccess:", "$('userInfo').update(result);"); - - - - - - Ajax requests that updates an element with - the fetched content - - Url to fetch content from - element to update - optional options in format "key, value, key, value", used in JS updater object. - A link tag. - All javascript option names should end with colon. - - - JSHelper.AjaxUpdater("/user/show/1", "userInfo", "onsuccess:", "alert('Successful!');"); - - - - - - A link that pop ups a Dialog (overlay div) - - url to contents of dialog - link title - A "a"-tag that popups a dialog when clicked - name/value of html attributes - - WebHelper.DialogLink("/user/show/1", "show user", "onmouseover", "alert('booh!');"); - - - - - Close a javascript dialog window/div. - - javascript for closing a dialog. - - - - - Creates a new modal dialog window - - url to open in window. - window title (may not be supported by all js implementations) - - - - - - PrototypeJS implementation of the javascript functions. - - - - - Requests a url through ajax - - url to fetch. Url is NOT enclosed in quotes by the implementation. You need to do that yourself. - optional options in format "key, value, key, value", used in JS request object. All keys should end with colon. - a link tag - onclick attribute is used by this method. - - - // 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>"; - - - - - - Determins if a list of strings contains a specific value - - options to check in - value to find - true if value was found - case insensitive - - - - Ajax requests that updates an element with - the fetched content - - URL to fetch. URL is NOT enclosed in quotes by the implementation. You need to do that yourself. - element to update - options in format "key, value, key, value". All keys should end with colon. - A link tag. - - - JSHelper.AjaxUpdater("'/user/show/1'", "user", "onsuccess:", "alert('hello');", "asynchronous:", "true"); - - - - - - A link that pop ups a Dialog (overlay div) - - URL to contents of dialog - link title - name, value, name, value - A "a"-tag that popups a dialog when clicked + A that can be used to iterate through the collection. - Requires Control.Modal found here: http://livepipe.net/projects/control_modal/ - And the following JavaScript (load it in application.js): - - Event.observe(window, 'load', - function() { - document.getElementsByClassName('modal').each(function(link){ new Control.Modal(link); }); - } - ); - - - - WebHelper.DialogLink("/user/show/1", "show user", "onmouseover", "alert('booh!');"); - + 1 - + - create a modal dialog (usually using DIVs) + Gets the count of cookies in the collection. - url to fetch - dialog title - javascript/html attributes. javascript options ends with colon ':'. - - + - Close a javascript dialog window/div. + Gets the cookie of a given identifier (null if not existing). - javascript for closing a dialog. - - + - javascript action that should be added to the "onsubmit" event in the form tag. + Small design by contract implementation. + + + + + Check whether a parameter is empty. + + Parameter value + Parameter name, or error description. + value is empty. + + + + Checks whether a parameter is null. + + Parameter value + Parameter name, or error description. + value is null. + + + + Checks whether a parameter is null. + + + Parameter value + Parameter name, or error description. + value is null. + + + + Parses a HTTP request directly from a stream - remember to encapsulate strings in '' - - All javascript option names should end with colon. - - - JSHelper.AjaxRequest("/user/show/1", "onsuccess:", "$('userInfo').update(result);"); - - @@ -1403,392 +631,110 @@ Gets or sets the log writer. - + - Current state in the parsing. + Create a new request parser + + delegate receiving log entries. + + + + Add a number of bytes to the body + + buffer containing more body bytes. + starting offset in buffer + number of bytes, from offset, to read. + offset to continue from. + + + + Remove all state information for the request. - + - Should parse the request line + Parse request line + + + If line is incorrect + Expects the following format: "Method SP Request-URI SP HTTP-Version CRLF" + + + + We've parsed a new header. + + Name in lower case + Value, unmodified. + If content length cannot be parsed. + + + + Parse a message + + bytes to parse. + where in buffer that parsing should start + number of bytes to parse, starting on . + offset (where to start parsing next). + BadRequestException. + + + + Gets or sets the log writer. - + - Searching for a complete header name + Current state in parser. - + - Searching for colon after header name (ignoring white spaces) + A request have been successfully parsed. - + - Searching for start of header value (ignoring white spaces) + More body bytes have been received. - + - Searching for a complete header value (can span over multiple lines, as long as they are prefixed with one/more whitespaces) + Request line have been received. - + - Adding bytes to body + A header have been received. - + - Contains server side HTTP request information. + The website module let's you handle multiple websites in the same server. + It uses the "Host" header to check which site you want. + 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. - + - Called during parsing of a . - - Name of the header, should not be URL encoded - Value of the header, should not be URL encoded - If a header is incorrect. - - - - Add bytes to the body - - buffer to read bytes from - where to start read - number of bytes to read - Number of bytes actually read (same as length unless we got all body bytes). - If body is not writable - bytes is null. - offset is out of range. - - - - Clear everything in the request - - - - - Decode body into a form. - - A list with form decoders. - If body contents is not valid for the chosen decoder. - If body is still being transferred. - - - - Sets the cookies. - - The cookies. - - - - Create a response object. - - Context for the connected client. - A new . - - - - Gets kind of types accepted by the client. - - - - - Gets or sets body stream. - - - - - Gets whether the body is complete. - - - - - Gets or sets kind of connection used for the session. - - - - - Gets or sets number of bytes in the body. - - - - - Gets cookies that was sent with the request. - - - - - Gets form parameters. - - - - - Gets headers sent by the client. - - - - - Gets or sets version of HTTP protocol that's used. - - - Probably or . - - - - - - Gets whether the request was made by Ajax (Asynchronous JavaScript) - - - - - Gets or sets requested method. - - - Will always be in upper case. - - - - - - Gets parameter from or . - - - - - Gets variables sent in the query string - - - - - Gets or sets requested URI. - - - - - Gets URI absolute path divided into parts. - - - // URI is: http://gauffin.com/code/tiny/ - Console.WriteLine(request.UriParts[0]); // result: code - Console.WriteLine(request.UriParts[1]); // result: tiny - - - 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. - - - - - - Gets or sets path and query. - - - - Are only used during request parsing. Cannot be set after "Host" header have been - added. - - - - - Delegate used to let authentication modules authenticate the user name and password. - - Realm that the user want to authenticate in - User name specified by client - Can either be user password or implementation specific token. - object that will be stored in a session variable called if authentication was successful. - throw forbidden exception if too many attempts have been made. - - - Use to specify that the token is a HA1 token. (MD5 generated - string from realm, user name and password); Md5String(userName + ":" + realm + ":" + password); - - - - - - Let's you decide on a system level if authentication is required. - - HTTP request from client - true if user should be authenticated. - throw if no more attempts are allowed. - If no more attempts are allowed - - - - Serves files that are stored in embedded resources. - - - - - 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. - - - Throw if you are using a and want to prompt for user name/password. - - - - - Method that process the url - - Information sent by the browser about the request - Information that is being sent back to the client. - Session used to - true if this module handled the request. - - - - Set the log writer to use. - - logwriter to use. - - - - Log something. - - importance of log message - message - - - - 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. - - - - - Initializes a new instance of the class. - Runs to make sure the basic mime types are available, they can be cleared later - through the use of if desired. - - - - - Initializes a new instance of the class. - Runs to make sure the basic mime types are available, they can be cleared later - through the use of if desired. - - The log writer to use when logging events - - - - Mimtypes that this class can handle per default - - - - - Loads resources from a namespace in the given assembly to an uri - - The uri to map the resources to - The assembly in which the resources reside - The namespace from which to load the resources - - 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 - - The amount of loaded files, giving you the possibility of making sure the resources needed gets loaded - - - - Returns true if the module can handle the request + domain name that should be handled. + - + Method that process the url Information sent by the browser about the request Information that is being sent back to the client. Session used to - true if this module handled the request. - + - List with all mime-type that are allowed. + Name of site. - All other mime types will result in a Forbidden http status code. - - - - The purpose of this module is to serve files. - - - - - Initializes a new instance of the class. - - Uri to serve, for instance "/files/" - Path on hard drive where we should start looking for files - If true a Last-Modifed header will be sent upon requests urging web browser to cache files - - - - Initializes a new instance of the class. - - Uri to serve, for instance "/files/" - Path on hard drive where we should start looking for files - - - - Mimtypes that this class can handle per default - - - - - Determines if the request should be handled by this module. - Invoked by the - - - true if this module should handle it. - - - Illegal path - - - - check if source contains any of the chars. - - - - - - - - Method that process the Uri. - - Information sent by the browser about the request - Information that is being sent back to the client. - Session used to - Failed to find file extension - File type is forbidden. - - - - return a file extension from an absolute Uri path (or plain filename) - - - - - - - List with all mime-type that are allowed. - - All other mime types will result in a Forbidden http status code. - - - - characters that may not exist in a path. - - - fileMod.ForbiddenChars = new string[]{ "\\", "..", ":" }; - Container for posted form data @@ -1981,84 +927,146 @@ 0 if no files are added - + - Small design by contract implementation. + 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 - + - Check whether a parameter is empty. + Create a new bad request exception. - Parameter value - Parameter name, or error description. - value is empty. + reason to why the request was bad. - + - Checks whether a parameter is null. + Create a new bad request exception. - Parameter value - Parameter name, or error description. - value is null. + reason to why the request was bad. + inner exception - + - Checks whether a parameter is null. - - - Parameter value - Parameter name, or error description. - value is null. - - - - The "basic" authentication scheme is based on the model that the - client must authenticate itself with a user-ID and a password for - each realm. The realm value should be considered an opaque string - which can only be compared for equality with other realms on that - server. The server will service the request only if it can validate - the user-ID and password for the protection space of the Request-URI. - There are no optional authentication parameters. + A session stored in memory. - + - Initializes a new instance of the class. + Interface for sessions - Delegate used to provide information used during authentication. - Delegate used to determine if authentication is required (may be null). - + - Initializes a new instance of the class. + Remove everything from the session - Delegate used to provide information used during authentication. - + - Create a response that can be sent in the WWW-Authenticate header. + Remove everything from the session - Realm that the user should authenticate in - Not used in basic auth - A correct auth request. + True if the session is cleared due to expiration - + - An authentication response have been received from the web browser. - Check if it's correct + Session id - Contents from the Authorization header - Realm that should be authenticated - GET/POST/PUT/DELETE etc. - Not used in basic auth - Authentication object that is stored for the request. A user class or something like that. - if authenticationHeader is invalid - If any of the paramters is empty or null. - + - name used in http request. + Should + + Name of the session variable + null if it's not set + If the object cant be serialized. + + + + When the session was last accessed. + This property is touched by the http server each time the + session is requested. + + + + + Number of session variables. + + + + + Event triggered upon clearing the session + + + + + + + A unique id used by the sessions store to identify the session + + + + Id + + + + + + Remove everything from the session + + + + + Clears the specified expire. + + True if the session is cleared due to expiration + + + + Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. + + 2 + + + + Session id + + + + + Should + + Name of the session variable + null if it's not set + + + + when the session was last accessed. + + + Used to determine when the session should be removed. + + + + + Number of values in the session + + + + + Flag to indicate that the session have been changed + and should be saved into the session store. + + + + + Event triggered upon clearing the session + + + + + redirects from one URL to another. @@ -2080,14 +1088,319 @@ If request or response is null. - + - Delegate used by to populate select options. + Initializes a new instance of the class. - current object (for instance a User). - Text that should be displayed in the value part of a <optiongt;-tag. - Text shown in the select list. + Absolute path (no server name) + Absolute path (no server name) + server.Add(new RedirectRule("/", "/user/index")); + + + + + Initializes a new instance of the class. + + Absolute path (no server name) + Absolute path (no server name) + true if request should be redirected, false if the request URI should be replaced. + + server.Add(new RedirectRule("/", "/user/index")); + + + + + Process the incoming request. + + incoming HTTP request + outgoing HTTP response + true if response should be sent to the browser directly (no other rules or modules will be processed). + + returning true means that no modules will get the request. Returning true is typically being done + for redirects. + + + + + Gets string to match request URI with. + + Is compared to request.Uri.AbsolutePath + + + + Gets where to redirect. + + + + + Gets whether server should redirect client. + + + false means that the rule will replace + the current request URI with the new one from this class. + true means that a redirect response is sent to the client. + + + + + cookie sent by the client/browser + + + + + + Constructor. + + cookie identifier + cookie content + id or content is null + id is empty + + + + Gets the cookie HTML representation. + + cookie string + + + + Gets the cookie identifier. + + + + + Cookie value. Set to null to remove cookie. + + + + + Priority for log entries + + + + + + Very detailed logs to be able to follow the flow of the program. + + + + + Logs to help debug errors in the application + + + + + Information to be able to keep track of state changes etc. + + + + + Something did not go as we expected, but it's no problem. + + + + + Something that should not fail failed, but we can still keep + on going. + + + + + Something failed, and we cannot handle it properly. + + + + + Interface used to write to log files. + + + + + Write an entry to the log file. + + object that is writing to the log + importance of the log message + the message + + + + This class writes to the console. It colors the output depending on the logprio and includes a 3-level stacktrace (in debug mode) + + + + + + The actual instance of this class. + + + + + Logwriters the specified source. + + object that wrote the logentry. + Importance of the log message + The message. + + + + Get color for the specified logprio + + prio for the log entry + A for the prio + + + + Default log writer, writes everything to null (nowhere). + + + + + + The logging instance. + + + + + Writes everything to null + + object that wrote the log entry. + Importance of the log message + The message. + + + + Class that receives Requests from a . + + + + + Client have been disconnected. + + Client that was disconnected. + Reason + + + + + Invoked when a client context have received a new HTTP request + + Client that received the request. + Request that was received. + + + + + Will contain helper functions for javascript. + + + + + Requests a url through ajax + + url to fetch. Url is NOT enclosed in quotes by the implementation. You need to do that yourself. + optional options in format "key, value, key, value", used in JS request object. All keys should end with colon. + a link tag + onclick attribute is used by this method. + + + // 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>"; + + + + + + Ajax requests that updates an element with + the fetched content + + url to fetch. Url is NOT enclosed in quotes by the implementation. You need to do that yourself. + element to update + options in format "key, value, key, value". All keys should end with colon. + A link tag. + + + JSHelper.AjaxUpdater("'/user/show/1'", "user", "onsuccess:", "alert('hello');", "asynchronous:", "true"); + + + + + + Opens contents in a dialog window. + + url to contents of dialog + link title + name, value, name, value, all parameter names should end with colon. + + + + Close a javascript dialog window/div. + + javascript for closing a dialog. + + + + + Helpers making it easier to work with forms. + + + + + + Used to let the website use different JavaScript libraries. + Default is + + + + + Create a <form> tag. + + name of form + action to invoke on submit + form should be posted as Ajax + HTML code + + + // without options + WebHelper.FormStart("frmLogin", "/user/login", Request.IsAjax); + + // with options + WebHelper.FormStart("frmLogin", "/user/login", Request.IsAjax, "style", "display:inline", "class", "greenForm"); + + + HTML attributes or JavaScript options. + Method will ALWAYS be POST. + options must consist of name, value, name, value + + + + Creates a select list with the values in a collection. + + Name of the SELECT-tag + collection used to generate options. + delegate used to return id and title from objects. + value that should be marked as selected. + First row should contain an empty value. + string containing a SELECT-tag. + + + + + Creates a select list with the values in a collection. + + Name of the SELECT-tag + Id of the SELECT-tag + collection used to generate options. + delegate used to return id and title from objects. + value that should be marked as selected. + First row should contain an empty value. + string containing a SELECT-tag. + + + // Class that is going to be used in a SELECT-tag. public class User { @@ -2140,839 +1453,135 @@ User user = (User)o; id = user.Id; value = user.RealName; - } /// + } + + + name, id, collection or getIdTitle is null. - + - 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 + Creates a select list with the values in a collection. + Name of the SELECT-tag + Id of the SELECT-tag + collection used to generate options. + delegate used to return id and title from objects. + value that should be marked as selected. + First row should contain an empty value. + name, value collection of extra HTML attributes. + string containing a SELECT-tag. + + name, id, collection or getIdTitle is null. + Invalid HTML attribute list. - + - Let's copy all the cookies. + Generate a list of HTML options - value from cookie header. + collection used to generate options. + delegate used to return id and title from objects. + value that should be marked as selected. + First row should contain an empty value. + + collection or getIdTitle is null. - - - Adds a cookie in the collection. - - cookie to add - cookie is null + + sb is null. - + - Gets a collection enumerator on the cookie list. + Creates a check box. - collection enumerator + element name + element value + 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. + a list with additional attributes (name, value, name, value). + a generated radio button - + - Remove all cookies. + Creates a check box. - - - - Returns an enumerator that iterates through the collection. - - - - A that can be used to iterate through the collection. - - 1 - - - - Remove a cookie from the collection. - - Name of cookie. - - - - Gets the count of cookies in the collection. - - - - - Gets the cookie of a given identifier (null if not existing). - - - - - 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 - - - - - Create a new bad request exception. - - reason to why the request was bad. - - - - Create a new bad request exception. - - reason to why the request was bad. - inner exception - - - - A session store is used to store and load sessions on a media. - The default implementation () saves/retrieves sessions from memory. - - - - - Creates a new http session with a generated id. - - A object - - - - Creates a new http session with a specific id - - Id used to identify the new cookie.. - A object. + element name + element id + element value + 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. + a list with additional attributes (name, value, name, value). + a generated radio button - Id should be generated by the store implementation if it's null or . + value in your business object. (check box will be selected if it matches the element value) - + - Load an existing session. + Creates a check box. - Session id (usually retrieved from a client side cookie). - A session if found; otherwise null. + element name + element id + 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. + a list with additional attributes (name, value, name, value). + a generated radio button + will set value to "1". - + - Save an updated session to the store. + Creates a RadioButton. - Session id (usually retrieved from a client side cookie). - If Id property have not been specified. + element name + element value + 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. + a list with additional attributes (name, value, name, value). + a generated radio button - + - We use the flyweight pattern which reuses small objects - instead of creating new each time. + Creates a RadioButton. - Unused session that should be reused next time Create is called. + element name + element id + element value + 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. + a list with additional attributes (name, value, name, value). + a generated radio button - + - Remove expired sessions + form close tag - - - - Remove a session - - id of the session. - - - - Load a session from the store - - - null if session is not found. - - - - Number of minutes before a session expires. - - Default time is 20 minutes. - - - - Contains a connection to a browser/client. - - - - - Disconnect from client - - error to report in the event. - - - - Send a response. - - Either or - HTTP status code - reason for the status code. - HTML body contents, can be null or empty. - A content type to return the body as, i.e. 'text/html' or 'text/plain', defaults to 'text/html' if null or empty - If is invalid. - - - - Send a response. - - Either or - HTTP status code - reason for the status code. - - - - Send a response. - - - - - - send a whole buffer - - buffer to send - - - - - Send data using the stream - - Contains data to send - Start position in buffer - number of bytes to send - - - - - - Closes the streams and disposes of the unmanaged resources - - - - - Using SSL or other encryption method. - - - - - Using SSL or other encryption method. - - - - - The context have been disconnected. - - - Event can be used to clean up a context, or to reuse it. - - - - - A request have been received in the context. - - - - - A have been disconnected. - - - - - Initializes a new instance of the class. - - Reason to disconnection. - - - - Gets reason to why client disconnected. - - - - - - - - - - Initializes a new instance of the class. - - The request. - - - - Gets received request. - - - - - cookie being sent back to the browser. - - - - - - cookie sent by the client/browser - - - - - - Constructor. - - cookie identifier - cookie content - id or content is null - id is empty - - - - Gets the cookie HTML representation. - - cookie string - - - - Gets the cookie identifier. - - - - - Cookie value. Set to null to remove cookie. - - - - - Constructor. - - cookie identifier - cookie content - cookie expiration date. Use DateTime.MinValue for session cookie. - id or content is null - id is empty - - - - Create a new cookie - - name identifying the cookie - cookie value - when the cookie expires. Setting DateTime.MinValue will delete the cookie when the session is closed. - Path to where the cookie is valid - Domain that the cookie is valid for. - - - - Create a new cookie - - Name and value will be used - when the cookie expires. - - - - Gets the cookie HTML representation. - - cookie string - - - - When the cookie expires. - DateTime.MinValue means that the cookie expires when the session do so. - - - - - Cookie is only valid under this path. - - - - - Contains all HTTP Methods (according to the HTTP 1.1 specification) - - See: http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html - - - - - - The DELETE method requests that the origin server delete the resource identified by the Request-URI. - - - - 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. - - - 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. - - - 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. - - - 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. - - - - - - The GET method means retrieve whatever information (in the form of an entity) is identified by the Request-URI. - - - - 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. - - - 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. - - - - - - The HEAD method is identical to GET except that the server MUST NOT return a message-body in the response. - - - 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. - - - - - The OPTIONS method represents a request for information about the communication options available on the request/response chain identified by the Request-URI. - - - 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. - - - - - 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. - - - POST is designed to allow a uniform method to cover the following functions: - - - Annotation of existing resources; - - Posting a message to a bulletin board, newsgroup, mailing list, or similar group of articles; - - Providing a block of data, such as the result of submitting a form, to a data-handling process; - - Extending a database through an append operation. - - - - 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). - - - 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. - - 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. - - - - - - The PUT method requests that the enclosed entity be stored under the supplied Request-URI. - - - - - 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. - - 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. - - If a new resource is created, the origin server MUST inform the user agent via the 201 (Created) response. - - 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. - - 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. - - - - 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. - - - - - - The TRACE method is used to invoke a remote, application-layer loop- back of the request message. - - - - - Contains all HTTP Methods (according to the HTTP 1.1 specification) - - See: http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html - - - - - - The DELETE method requests that the origin server delete the resource identified by the Request-URI. - - - - 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. - - - 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. - - - 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. - - - 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. - - - - - - The GET method means retrieve whatever information (in the form of an entity) is identified by the Request-URI. - - - - 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. - - - 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. - - - - - - The HEAD method is identical to GET except that the server MUST NOT return a message-body in the response. - - - 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. - - - - - The OPTIONS method represents a request for information about the communication options available on the request/response chain identified by the Request-URI. - - - 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. - - - - - 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. - - - POST is designed to allow a uniform method to cover the following functions: - - - Annotation of existing resources; - - Posting a message to a bulletin board, newsgroup, mailing list, or similar group of articles; - - Providing a block of data, such as the result of submitting a form, to a data-handling process; - - Extending a database through an append operation. - - - - 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). - - - 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. - - 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. - - - - - - The PUT method requests that the enclosed entity be stored under the supplied Request-URI. - - - - - 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. - - 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. - - If a new resource is created, the origin server MUST inform the user agent via the 201 (Created) response. - - 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. - - 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. - - - - 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. - - - - - - The TRACE method is used to invoke a remote, application-layer loop- back of the request message. - - - - - Generic helper functions for HTTP - - - - - Version string for HTTP v1.0 - - - - - Version string for HTTP v1.1 - - - - - An empty URI - - - - - Parses a query string. - - Query string (URI encoded) - A object if successful; otherwise - queryString is null. - If string cannot be parsed. - - - - The object form class takes an object and creates form items for it. - - - - - Initializes a new instance of the class. - - - form name *and* id. - action to do when form is posted. - - - - - Initializes a new instance of the class. - - form name *and* id. - action to do when form is posted. - object to get values from - - - - Initializes a new instance of the class. - - form action. - object to get values from. - - - - write out the FORM-tag. - - generated html code - - - - Writeout the form tag - - form should be posted through ajax. - generated html code - - - - Generates a text box. - - - - generated html code - - - - password box - - - - generated html code - - - - Hiddens the specified property name. - - Name of the property. - The options. - generated html code - - - - Labels the specified property name. - - property in object. - caption - generated html code - - - - Generate a checkbox - - property in object - checkbox value - additional html attributes. - generated html code - - - - Write a html select tag - - object property. - id column - The title column. - The options. - + - Selects the specified property name. - - Name of the property. - The items. - The id column. - The title column. - The options. - - - - - Write a submit tag. - - button caption - html submit tag - - - - html end form tag - - html - - - - Can handle application/x-www-form-urlencoded + Arguments sent when a is cleared - + + Instantiates the arguments for the event - Stream containing the content - Content type (with any additional info like boundry). Content type is always supplied in lower case - Stream encoding - - A HTTP form, or null if content could not be parsed. - - If contents in the stream is not valid input data. + True if the session is cleared due to expiration - + - Checks if the decoder can handle the mime type - - Content type (with any additional info like boundry). Content type is always supplied in lower case. - True if the decoder can parse the specified content type - - - - The requested resource was not found in the web server. + Returns true if the session is cleared due to expiration - + - Create a new exception - - message describing the error - inner exception - - - - Create a new exception - - message describing the error - - - - Invoked when a client have been accepted by the - - - Can be used to revoke incoming connections - - - - - Initializes a new instance of the class. - - The socket. - - - - Client may not be handled. - - - - - Accepted socket. - - - - - Client should be revoked. + Delegate for when a IHttpSession is cleared + this is being cleared. + Arguments for the clearing @@ -3018,77 +1627,29 @@ Context that the request was received from. Request to process. - + - Used when the request line have been successfully parsed. + Creates request parsers when needed. - + - Initializes a new instance of the class. - - The HTTP method. - The URI path. - The HTTP version. - - - - Initializes a new instance of the class. + Creates request parsers when needed. - + - Gets or sets http method. + Create a new request parser. - - Should be one of the methods declared in . - + Used when logging should be enabled. + A new request parser. - + - Gets or sets the version of the HTTP protocol that the client want to use. + Create a new request parser. - - - - Gets or sets requested URI path. - - - - - Inversion of control interface. - - - - - Add a component instance - - Interface type - Instance to add - - - - Get a component. - - Interface type - Component if registered, otherwise null. - - Component will get created if needed. - - - - - Checks if the specified component interface have been added. - - - true if found; otherwise false. - - - - Add a component. - - Type being requested. - Type being created. + Used when logging should be enabled. + A new request parser. @@ -3459,1557 +2020,6 @@ Cookies that should be created/changed. - - - Contains server side HTTP request information. - - - - - Chars used to split an URL path into multiple parts. - - - - - Assign a form. - - - - - - Creates a new object that is a copy of the current instance. - - - - A new object that is a copy of this instance. - - 2 - - - - Decode body into a form. - - A list with form decoders. - If body contents is not valid for the chosen decoder. - If body is still being transferred. - - - - Cookies - - the cookies - - - - Create a response object. - - A new . - - - - Called during parsing of a . - - Name of the header, should not be URL encoded - Value of the header, should not be URL encoded - If a header is incorrect. - - - - Add bytes to the body - - buffer to read bytes from - where to start read - number of bytes to read - Number of bytes actually read (same as length unless we got all body bytes). - If body is not writable - bytes is null. - offset is out of range. - - - - Clear everything in the request - - - - - Gets or sets a value indicating whether this is secure. - - - - - Path and query (will be merged with the host header) and put in Uri - - - - - - Gets whether the body is complete. - - - - - Gets kind of types accepted by the client. - - - - - Gets or sets body stream. - - - - - Gets or sets kind of connection used for the session. - - - - - Gets or sets number of bytes in the body. - - - - - Gets headers sent by the client. - - - - - Gets or sets version of HTTP protocol that's used. - - - Probably or . - - - - - - Gets or sets requested method. - - - - Will always be in upper case. - - - - - - Gets variables sent in the query string - - - - - Gets or sets requested URI. - - - - - Uri absolute path splitted into parts. - - - // uri is: http://gauffin.com/code/tiny/ - Console.WriteLine(request.UriParts[0]); // result: code - Console.WriteLine(request.UriParts[1]); // result: tiny - - - 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. - - - - - - Gets parameter from or . - - - - - Gets form parameters. - - - - - Gets whether the request was made by Ajax (Asynchronous JavaScript) - - - - - Gets cookies that was sent with the request. - - - - Class to handle loading of resource files - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - logger. - - - - Loads resources from a namespace in the given assembly to an URI - - The URI to map the resources to - The assembly in which the resources reside - The namespace from which to load the resources - - - resourceLoader.LoadResources("/user/", typeof(User).Assembly, "MyLib.Models.User.Views"); - - Will make the resource MyLib.Models.User.Views.list.Haml accessible via /user/list.haml or /user/list/ - - The amount of loaded files, giving you the possibility of making sure the resources needed gets loaded - If a resource has already been mapped to an uri - - - - Retrieves a stream for the specified resource path if loaded otherwise null - - Path to the resource to retrieve a stream for - A stream or null if the resource couldn't be found - - - - Fetch all files from the resource that matches the specified arguments. - - The path to the resource to extract - - a list of files if found; or an empty array if no files are found. - - Search path must end with an asterisk for finding arbitrary files - - - - Fetch all files from the resource that matches the specified arguments. - - Where the file should reside. - Files to check - - a list of files if found; or an empty array if no files are found. - - - - - Returns whether or not the loader has an instance of the file requested - - The name of the template/file - True if the loader can provide the file - - - - Will contain helper functions for javascript. - - - - - Requests a url through ajax - - url to fetch. Url is NOT enclosed in quotes by the implementation. You need to do that yourself. - optional options in format "key, value, key, value", used in JS request object. All keys should end with colon. - a link tag - onclick attribute is used by this method. - - - // 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>"; - - - - - - Ajax requests that updates an element with - the fetched content - - url to fetch. Url is NOT enclosed in quotes by the implementation. You need to do that yourself. - element to update - options in format "key, value, key, value". All keys should end with colon. - A link tag. - - - JSHelper.AjaxUpdater("'/user/show/1'", "user", "onsuccess:", "alert('hello');", "asynchronous:", "true"); - - - - - - Opens contents in a dialog window. - - url to contents of dialog - link title - name, value, name, value, all parameter names should end with colon. - - - - Close a javascript dialog window/div. - - javascript for closing a dialog. - - - - - This provider is used to let us implement any type of form decoding we want without - having to rewrite anything else in the server. - - - - - - - Should contain boundary and type, as in: multipart/form-data; boundary=---------------------------230051238959 - Stream containing form data. - Encoding used when decoding the stream - if no parser was found. - If stream is null or not readable. - If stream contents cannot be decoded properly. - - - - Add a decoder. - - - - - - - Number of added decoders. - - - - - Use with care. - - - - - Decoder used for unknown content types. - - - - - Type of HTTP connection - - - - - Connection is closed after each request-response - - - - - Connection is kept alive for X seconds (unless another request have been made) - - - - - 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 - - - // becomes: - Console.WriteLine("Value: {0}", form["user"]["FirstName"].Value); - - - All names in a form SHOULD be in lowercase. - - - - Representation of a non-initialized . - - - - Initializes an input item setting its name/identifier and value - - Parameter name/id - Parameter value - - - Creates a deep copy of the item specified - The item to copy - The function makes a deep copy of quite a lot which can be slow - - - - Add another value to this item - - Value to add. - Cannot add stuff to . - - - - checks if a sub-item exists (and has a value). - - name in lower case - true if the sub-item exists and has a value; otherwise false. - - - Returns a formatted representation of the instance with the values of all contained parameters - - - - Outputs the string in a formatted manner - - A prefix to append, used internally - produce a query string - - - - Add a sub item. - - Can contain array formatting, the item is then parsed and added in multiple levels - Value to add. - Argument is null. - Cannot add stuff to . - - - - Returns an enumerator that iterates through the collection. - - - - A that can be used to iterate through the collection. - - 1 - - - - Returns an enumerator that iterates through a collection. - - - - An object that can be used to iterate through the collection. - - 2 - - - - Outputs the string in a formatted manner - - A prefix to append, used internally - - - - - Number of values - - - - - Get a sub item - - name in lower case. - if no item was found. - - - - Name of item (in lower case). - - - - - Returns the first value, or null if no value exist. - - - - - Returns the last value, or null if no value exist. - - - - - Returns the list with values. - - - - - - - name in lower case - - - - - Session store using memory for each session. - - - - - Initializes the class setting the expirationtimer to clean the session every minute - - - - - Delegate for the cleanup timer - - - - - Creates a new http session - - - - - - Creates a new http session with a specific id - - Id used to identify the new cookie.. - A object. - - Id should be generated by the store implementation if it's null or . - - - - - Load an existing session. - - - - - - - Save an updated session to the store. - - - - - - We use the flyweight pattern which reuses small objects - instead of creating new each time. - - EmptyLanguageNode (unused) session that should be reused next time Create is called. - - - - Remove expired sessions - - - - - Remove a session - - id of the session. - - - - Load a session from the store - - - null if session is not found. - - - - Number of minutes before a session expires. - Default is 20 minutes. - - - - - redirects from one URL to another. - - - - - Initializes a new instance of the class. - - Absolute path (no server name) - Absolute path (no server name) - - server.Add(new RedirectRule("/", "/user/index")); - - - - - Initializes a new instance of the class. - - Absolute path (no server name) - Absolute path (no server name) - true if request should be redirected, false if the request URI should be replaced. - - server.Add(new RedirectRule("/", "/user/index")); - - - - - Process the incoming request. - - incoming HTTP request - outgoing HTTP response - true if response should be sent to the browser directly (no other rules or modules will be processed). - - returning true means that no modules will get the request. Returning true is typically being done - for redirects. - - - - - Gets string to match request URI with. - - Is compared to request.Uri.AbsolutePath - - - - Gets where to redirect. - - - - - Gets whether server should redirect client. - - - false means that the rule will replace - the current request URI with the new one from this class. - true means that a redirect response is sent to the client. - - - - - Arguments used when more body bytes have come. - - - - - Initializes a new instance of the class. - - buffer that contains the received bytes. - offset in buffer where to start processing. - number of bytes from that should be parsed. - - - - Initializes a new instance of the class. - - - - - Gets or sets buffer that contains the received bytes. - - - - - Gets or sets number of bytes from that should be parsed. - - - - - Gets or sets offset in buffer where to start processing. - - - - - The website module let's you handle multiple websites in the same server. - It uses the "Host" header to check which site you want. - - 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. - - - - - - domain name that should be handled. - - - - - Method that process the url - - Information sent by the browser about the request - Information that is being sent back to the client. - Session used to - - - - Name of site. - - - - - Helpers making it easier to work with forms. - - - - - - Used to let the website use different JavaScript libraries. - Default is - - - - - Create a <form> tag. - - name of form - action to invoke on submit - form should be posted as Ajax - HTML code - - - // without options - WebHelper.FormStart("frmLogin", "/user/login", Request.IsAjax); - - // with options - WebHelper.FormStart("frmLogin", "/user/login", Request.IsAjax, "style", "display:inline", "class", "greenForm"); - - - HTML attributes or JavaScript options. - Method will ALWAYS be POST. - options must consist of name, value, name, value - - - - Creates a select list with the values in a collection. - - Name of the SELECT-tag - collection used to generate options. - delegate used to return id and title from objects. - value that should be marked as selected. - First row should contain an empty value. - string containing a SELECT-tag. - - - - - Creates a select list with the values in a collection. - - Name of the SELECT-tag - Id of the SELECT-tag - collection used to generate options. - delegate used to return id and title from objects. - value that should be marked as selected. - First row should contain an empty value. - string containing a SELECT-tag. - - - - // 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; - } - - - name, id, collection or getIdTitle is null. - - - - Creates a select list with the values in a collection. - - Name of the SELECT-tag - Id of the SELECT-tag - collection used to generate options. - delegate used to return id and title from objects. - value that should be marked as selected. - First row should contain an empty value. - name, value collection of extra HTML attributes. - string containing a SELECT-tag. - - name, id, collection or getIdTitle is null. - Invalid HTML attribute list. - - - - Generate a list of HTML options - - collection used to generate options. - delegate used to return id and title from objects. - value that should be marked as selected. - First row should contain an empty value. - - collection or getIdTitle is null. - - - sb is null. - - - - Creates a check box. - - element name - element value - 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. - a list with additional attributes (name, value, name, value). - a generated radio button - - - - Creates a check box. - - element name - element id - element value - 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. - a list with additional attributes (name, value, name, value). - a generated radio button - - value in your business object. (check box will be selected if it matches the element value) - - - - - Creates a check box. - - element name - element id - 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. - a list with additional attributes (name, value, name, value). - a generated radio button - will set value to "1". - - - - Creates a RadioButton. - - element name - element value - 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. - a list with additional attributes (name, value, name, value). - a generated radio button - - - - Creates a RadioButton. - - element name - element id - element value - 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. - a list with additional attributes (name, value, name, value). - a generated radio button - - - - form close tag - - - - - - 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 - - - - - Initializes a new instance of the class. - - error message - - - - Lists content type mime types. - - - - - text/plain - - - - - text/haml - - - - - content type for javascript documents = application/javascript - - - - 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. - - Browser support: http://krijnhoetmer.nl/stuff/javascript/mime-types/ - - - - - text/xml - - - - - A list of content types - - - - - - - Semicolon separated content types. - - - - Returns an enumerator that iterates through a collection. - - - An object that can be used to iterate through the collection. - - - - - Searches for the specified type - - Can also be a part of a type (searching for "xml" would return true for "application/xml"). - true if type was found. - - - - Get this first content type. - - - - - Fetch a content type - - Part of type ("xml" would return "application/xml") - - All content types are in lower case. - - - - 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. - - - - - - - Base url requested from browser - Base url on private web server - - // 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/"); - - - - - Method that determines if an url should be handled or not by the module - - Url requested by the client. - true if module should handle the url. - - - - Method that process the url - - Information sent by the browser about the request - Information that is being sent back to the client. - Session used to - - - - Contains a connection to a browser/client. - - - Remember to after you have hooked the event. - - TODO: Maybe this class should be broken up into HttpClientChannel and HttpClientContext? - - - - Initializes a new instance of the class. - - true if the connection is secured (SSL/TLS) - client that connected. - Stream used for communication - Used to create a . - Size of buffer to use when reading data. Must be at least 1024 bytes. - If fails - Stream must be writable and readable. - - - - Process incoming body bytes. - - - Bytes - - - - - - - - - - - Start reading content. - - - Make sure to call base.Start() if you override this method. - - - - - Clean up context. - - - Make sure to call base.Cleanup() if you override the method. - - - - - Disconnect from client - - error to report in the event. - - - BadRequestException. - - - - Send a response. - - Either or - HTTP status code - reason for the status code. - HTML body contents, can be null or empty. - A content type to return the body as, i.e. 'text/html' or 'text/plain', defaults to 'text/html' if null or empty - If is invalid. - - - - Send a response. - - Either or - HTTP status code - reason for the status code. - - - - Send a response. - - - - - - send a whole buffer - - buffer to send - - - - - Send data using the stream - - Contains data to send - Start position in buffer - number of bytes to send - - - - - - This context have been cleaned, which means that it can be reused. - - - - - Context have been started (a new client have connected) - - - - - Overload to specify own type. - - - Must be specified before the context is being used. - - - - - Using SSL or other encryption method. - - - - - Using SSL or other encryption method. - - - - - Specify which logger to use. - - - - - Gets or sets the network stream. - - - - - Gets or sets IP address that the client connected from. - - - - - Gets or sets port that the client connected from. - - - - - The context have been disconnected. - - - Event can be used to clean up a context, or to reuse it. - - - - - A request have been received in the context. - - - - - Helpers to make XML handling easier - - - - - Serializes object to XML. - - object to serialize. - XML - - Removes name spaces and adds indentation - - - - - Create an object from a XML string - - Type of object - XML string - object - - - - 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. - - - [a-z0-9]+)", "/users/${target}?find=true", RegexOptions.IgnoreCase) - ]]> - - - - - Initializes a new instance of the class. - - Expression to match URL - Expression to generate URL - - [a-zA-Z0-9]+)", "/user/${first}")); - Result of ie. /employee1 will then be /user/employee1 - ]]> - - - - - Initializes a new instance of the class. - - Expression to match URL - Expression to generate URL - Regular expression options to use, can be null - - [a-zA-Z0-9]+)", "/user/{first}", RegexOptions.IgnoreCase)); - Result of ie. /employee1 will then be /user/employee1 - ]]> - - - - - Initializes a new instance of the class. - - Expression to match URL - Expression to generate URL - Regular expression options to apply - true if request should be redirected, false if the request URI should be replaced. - - [a-zA-Z0-9]+)", "/user/${first}", RegexOptions.None)); - Result of ie. /employee1 will then be /user/employee1 - ]]> - - Argument is null. - - - - - Process the incoming request. - - incoming HTTP request - outgoing HTTP response - true if response should be sent to the browser directly (no other rules or modules will be processed). - - returning true means that no modules will get the request. Returning true is typically being done - for redirects. - - If request or response is null - - - - Parses a HTTP request directly from a stream - - - - - Create a new request parser - - delegate receiving log entries. - - - - Add a number of bytes to the body - - buffer containing more body bytes. - starting offset in buffer - number of bytes, from offset, to read. - offset to continue from. - - - - Remove all state information for the request. - - - - - Parse request line - - - If line is incorrect - Expects the following format: "Method SP Request-URI SP HTTP-Version CRLF" - - - - We've parsed a new header. - - Name in lower case - Value, unmodified. - If content length cannot be parsed. - - - - Parse a message - - bytes to parse. - where in buffer that parsing should start - number of bytes to parse, starting on . - offset (where to start parsing next). - BadRequestException. - - - - Gets or sets the log writer. - - - - - Current state in parser. - - - - - A request have been successfully parsed. - - - - - More body bytes have been received. - - - - - Request line have been received. - - - - - A header have been received. - - - - - Priority for log entries - - - - - - Very detailed logs to be able to follow the flow of the program. - - - - - Logs to help debug errors in the application - - - - - Information to be able to keep track of state changes etc. - - - - - Something did not go as we expected, but it's no problem. - - - - - Something that should not fail failed, but we can still keep - on going. - - - - - Something failed, and we cannot handle it properly. - - - - - Interface used to write to log files. - - - - - Write an entry to the log file. - - object that is writing to the log - importance of the log message - the message - - - - This class writes to the console. It colors the output depending on the logprio and includes a 3-level stacktrace (in debug mode) - - - - - - The actual instance of this class. - - - - - Logwriters the specified source. - - object that wrote the logentry. - Importance of the log message - The message. - - - - Get color for the specified logprio - - prio for the log entry - A for the prio - - - - Default log writer, writes everything to null (nowhere). - - - - - - The logging instance. - - - - - Writes everything to null - - object that wrote the log entry. - Importance of the log message - The message. - - - - Returns item either from a form or a query string (checks them in that order) - - - - Representation of a non-initialized HttpParam - - - Initialises the class to hold a value either from a post request or a querystring request - - - - The add method is not availible for HttpParam - since HttpParam checks both Request.Form and Request.QueryString - - name identifying the value - value to add - - - - - Checks whether the form or querystring has the specified value - - Name, case sensitive - true if found; otherwise false. - - - - Returns an enumerator that iterates through the collection. - - - - A that can be used to iterate through the collection. - - 1 - - - - Returns an enumerator that iterates through a collection. - - - - An object that can be used to iterate through the collection. - - 2 - - - - Fetch an item from the form or querystring (in that order). - - - Item if found; otherwise HttpInputItem.EmptyLanguageNode - - - - Container class for posted files - - - - - Creates a container for a posted file - - The identifier of the post field - The file path - The content type of the file - The name of the file uploaded - If any parameter is null or empty - - - - Creates a container for a posted file - - If any parameter is null or empty - - - Destructor disposing the file - - - - Deletes the temporary file - - True if manual dispose - - - - Disposing interface, cleans up managed resources (the temporary file) and suppresses finalization - - - - - The name/id of the file - - - - - The full file path - - - - - The name of the uploaded file - - - - - The type of file - - Used to create and reuse contexts. @@ -5197,6 +2207,1234 @@ true to release both managed and unmanaged resources; false to release only unmanaged resources. + + + The "basic" authentication scheme is based on the model that the + client must authenticate itself with a user-ID and a password for + each realm. The realm value should be considered an opaque string + which can only be compared for equality with other realms on that + server. The server will service the request only if it can validate + the user-ID and password for the protection space of the Request-URI. + There are no optional authentication parameters. + + + + + Authentication modules are used to implement different + kind of HTTP authentication. + + + + + Tag used for authentication. + + + + + Initializes a new instance of the class. + + Delegate used to provide information used during authentication. + Delegate used to determine if authentication is required (may be null). + + + + Initializes a new instance of the class. + + Delegate used to provide information used during authentication. + + + + Create a response that can be sent in the WWW-Authenticate header. + + Realm that the user should authenticate in + Array with optional options. + A correct authentication request. + If realm is empty or null. + + + + An authentication response have been received from the web browser. + Check if it's correct + + Contents from the Authorization header + Realm that should be authenticated + GET/POST/PUT/DELETE etc. + options to specific implementations + Authentication object that is stored for the request. A user class or something like that. + if is invalid + If any of the parameters is empty or null. + + + + Used to invoke the authentication delegate that is used to lookup the user name/realm. + + Realm (domain) that user want to authenticate in + User name + Password used for validation. Some implementations got password in clear text, they are then sent to client. + object that will be stored in the request to help you identify the user if authentication was successful. + true if authentication was successful + + + + Determines if authentication is required. + + HTTP request from browser + true if user should be authenticated. + throw from your delegate if no more attempts are allowed. + If no more attempts are allowed + + + + name used in HTTP request. + + + + + Initializes a new instance of the class. + + Delegate used to provide information used during authentication. + Delegate used to determine if authentication is required (may be null). + + + + Initializes a new instance of the class. + + Delegate used to provide information used during authentication. + + + + Create a response that can be sent in the WWW-Authenticate header. + + Realm that the user should authenticate in + Not used in basic auth + A correct auth request. + + + + An authentication response have been received from the web browser. + Check if it's correct + + Contents from the Authorization header + Realm that should be authenticated + GET/POST/PUT/DELETE etc. + Not used in basic auth + Authentication object that is stored for the request. A user class or something like that. + if authenticationHeader is invalid + If any of the paramters is empty or null. + + + + name used in http request. + + + + + Used to inform http server that + + + + + Eventarguments used when an exception is thrown by a module + + the exception + + + + Exception thrown in a module + + + + + PrototypeJS implementation of the javascript functions. + + + + + Purpose of this class is to create a javascript toolkit independent javascript helper. + + + + + Generates a list with JS options. + + StringBuilder that the options should be added to. + the javascript options. name, value pairs. each string value should be escaped by YOU! + true if we should start with a comma. + + + + Removes any javascript parameters from an array of parameters + + The array of parameters to remove javascript params from + An array of html parameters + + + + javascript action that should be added to the "onsubmit" event in the form tag. + + + All javascript option names should end with colon. + + + JSHelper.AjaxRequest("/user/show/1", "onsuccess:", "$('userInfo').update(result);"); + + + + + + Requests a url through ajax + + url to fetch + optional options in format "key, value, key, value", used in JS request object. + a link tag + All javascript option names should end with colon. + + + JSHelper.AjaxRequest("/user/show/1", "onsuccess:", "$('userInfo').update(result);"); + + + + + + Ajax requests that updates an element with + the fetched content + + Url to fetch content from + element to update + optional options in format "key, value, key, value", used in JS updater object. + A link tag. + All javascript option names should end with colon. + + + JSHelper.AjaxUpdater("/user/show/1", "userInfo", "onsuccess:", "alert('Successful!');"); + + + + + + A link that pop ups a Dialog (overlay div) + + url to contents of dialog + link title + A "a"-tag that popups a dialog when clicked + name/value of html attributes + + WebHelper.DialogLink("/user/show/1", "show user", "onmouseover", "alert('booh!');"); + + + + + Close a javascript dialog window/div. + + javascript for closing a dialog. + + + + + Creates a new modal dialog window + + url to open in window. + window title (may not be supported by all js implementations) + + + + + + Requests a url through ajax + + url to fetch. Url is NOT enclosed in quotes by the implementation. You need to do that yourself. + optional options in format "key, value, key, value", used in JS request object. All keys should end with colon. + a link tag + onclick attribute is used by this method. + + + // 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>"; + + + + + + Determins if a list of strings contains a specific value + + options to check in + value to find + true if value was found + case insensitive + + + + Ajax requests that updates an element with + the fetched content + + URL to fetch. URL is NOT enclosed in quotes by the implementation. You need to do that yourself. + element to update + options in format "key, value, key, value". All keys should end with colon. + A link tag. + + + JSHelper.AjaxUpdater("'/user/show/1'", "user", "onsuccess:", "alert('hello');", "asynchronous:", "true"); + + + + + + A link that pop ups a Dialog (overlay div) + + URL to contents of dialog + link title + name, value, name, value + + A "a"-tag that popups a dialog when clicked + + Requires Control.Modal found here: http://livepipe.net/projects/control_modal/ + And the following JavaScript (load it in application.js): + + Event.observe(window, 'load', + function() { + document.getElementsByClassName('modal').each(function(link){ new Control.Modal(link); }); + } + ); + + + + WebHelper.DialogLink("/user/show/1", "show user", "onmouseover", "alert('booh!');"); + + + + + create a modal dialog (usually using DIVs) + + url to fetch + dialog title + javascript/html attributes. javascript options ends with colon ':'. + + + + + Close a javascript dialog window/div. + + javascript for closing a dialog. + + + + + javascript action that should be added to the "onsubmit" event in the form tag. + + remember to encapsulate strings in '' + + All javascript option names should end with colon. + + + JSHelper.AjaxRequest("/user/show/1", "onsuccess:", "$('userInfo').update(result);"); + + + + + + Lists content type mime types. + + + + + text/plain + + + + + text/haml + + + + + content type for javascript documents = application/javascript + + + + 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. + + Browser support: http://krijnhoetmer.nl/stuff/javascript/mime-types/ + + + + + text/xml + + + + + A list of content types + + + + + + + Semicolon separated content types. + + + + Returns an enumerator that iterates through a collection. + + + An object that can be used to iterate through the collection. + + + + + Searches for the specified type + + Can also be a part of a type (searching for "xml" would return true for "application/xml"). + true if type was found. + + + + Get this first content type. + + + + + Fetch a content type + + Part of type ("xml" would return "application/xml") + + All content types are in lower case. + + + + Event arguments used when a new header have been parsed. + + + + + Initializes a new instance of the class. + + Name of header. + Header value. + + + + Initializes a new instance of the class. + + + + + Gets or sets header name. + + + + + Gets or sets header value. + + + + + 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. + + + + + + + Base url requested from browser + Base url on private web server + + // 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/"); + + + + + Method that determines if an url should be handled or not by the module + + Url requested by the client. + true if module should handle the url. + + + + Method that process the url + + Information sent by the browser about the request + Information that is being sent back to the client. + Session used to + + + + Contains a connection to a browser/client. + + + Remember to after you have hooked the event. + + TODO: Maybe this class should be broken up into HttpClientChannel and HttpClientContext? + + + + Contains a connection to a browser/client. + + + + + Disconnect from client + + error to report in the event. + + + + Send a response. + + Either or + HTTP status code + reason for the status code. + HTML body contents, can be null or empty. + A content type to return the body as, i.e. 'text/html' or 'text/plain', defaults to 'text/html' if null or empty + If is invalid. + + + + Send a response. + + Either or + HTTP status code + reason for the status code. + + + + Send a response. + + + + + + send a whole buffer + + buffer to send + + + + + Send data using the stream + + Contains data to send + Start position in buffer + number of bytes to send + + + + + + Closes the streams and disposes of the unmanaged resources + + + + + Using SSL or other encryption method. + + + + + Using SSL or other encryption method. + + + + + The context have been disconnected. + + + Event can be used to clean up a context, or to reuse it. + + + + + A request have been received in the context. + + + + + Initializes a new instance of the class. + + true if the connection is secured (SSL/TLS) + client that connected. + Stream used for communication + Used to create a . + Size of buffer to use when reading data. Must be at least 4096 bytes. + If fails + Stream must be writable and readable. + + + + Process incoming body bytes. + + + Bytes + + + + + + + + + + + Start reading content. + + + Make sure to call base.Start() if you override this method. + + + + + Clean up context. + + + Make sure to call base.Cleanup() if you override the method. + + + + + Disconnect from client + + error to report in the event. + + + BadRequestException. + + + + Send a response. + + Either or + HTTP status code + reason for the status code. + HTML body contents, can be null or empty. + A content type to return the body as, i.e. 'text/html' or 'text/plain', defaults to 'text/html' if null or empty + If is invalid. + + + + Send a response. + + Either or + HTTP status code + reason for the status code. + + + + Send a response. + + + + + + send a whole buffer + + buffer to send + + + + + Send data using the stream + + Contains data to send + Start position in buffer + number of bytes to send + + + + + + This context have been cleaned, which means that it can be reused. + + + + + Context have been started (a new client have connected) + + + + + Overload to specify own type. + + + Must be specified before the context is being used. + + + + + Using SSL or other encryption method. + + + + + Using SSL or other encryption method. + + + + + Specify which logger to use. + + + + + Gets or sets the network stream. + + + + + Gets or sets IP address that the client connected from. + + + + + Gets or sets port that the client connected from. + + + + + The context have been disconnected. + + + Event can be used to clean up a context, or to reuse it. + + + + + A request have been received in the context. + + + + + Helpers to make XML handling easier + + + + + Serializes object to XML. + + object to serialize. + XML + + Removes name spaces and adds indentation + + + + + Create an object from a XML string + + Type of object + XML string + object + + + + Can handle application/x-www-form-urlencoded + + + + + + Stream containing the content + Content type (with any additional info like boundry). Content type is always supplied in lower case + Stream encoding + + A HTTP form, or null if content could not be parsed. + + If contents in the stream is not valid input data. + + + + Checks if the decoder can handle the mime type + + Content type (with any additional info like boundry). Content type is always supplied in lower case. + True if the decoder can parse the specified content type + + + + 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 + + + + + Initializes a new instance of the class. + + error message + + + + Invoked when a client have been accepted by the + + + Can be used to revoke incoming connections + + + + + Initializes a new instance of the class. + + The socket. + + + + Client may not be handled. + + + + + Accepted socket. + + + + + Client should be revoked. + + + + Class to handle loading of resource files + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + logger. + + + + Loads resources from a namespace in the given assembly to an URI + + The URI to map the resources to + The assembly in which the resources reside + The namespace from which to load the resources + + + resourceLoader.LoadResources("/user/", typeof(User).Assembly, "MyLib.Models.User.Views"); + + Will make the resource MyLib.Models.User.Views.list.Haml accessible via /user/list.haml or /user/list/ + + The amount of loaded files, giving you the possibility of making sure the resources needed gets loaded + If a resource has already been mapped to an uri + + + + Retrieves a stream for the specified resource path if loaded otherwise null + + Path to the resource to retrieve a stream for + A stream or null if the resource couldn't be found + + + + Fetch all files from the resource that matches the specified arguments. + + The path to the resource to extract + + a list of files if found; or an empty array if no files are found. + + Search path must end with an asterisk for finding arbitrary files + + + + Fetch all files from the resource that matches the specified arguments. + + Where the file should reside. + Files to check + + a list of files if found; or an empty array if no files are found. + + + + + Returns whether or not the loader has an instance of the file requested + + The name of the template/file + True if the loader can provide the file + + + + + + + + + + + Represents a field in a multipart form + + + + This provider is used to let us implement any type of form decoding we want without + having to rewrite anything else in the server. + + + + + + + Should contain boundary and type, as in: multipart/form-data; boundary=---------------------------230051238959 + Stream containing form data. + Encoding used when decoding the stream + if no parser was found. + If stream is null or not readable. + If stream contents cannot be decoded properly. + + + + Add a decoder. + + + + + + + Number of added decoders. + + + + + Use with care. + + + + + Decoder used for unknown content types. + + + + + Delegate used to find a realm/domain. + + + + + Realms are used during HTTP Authentication + + + + + + + A complete HTTP server, you need to add a module to it to be able to handle incoming requests. + + + + // 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); + + + + + + + + + Initializes a new instance of the class. + + Used to get all components used in the server.. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + Form decoders are used to convert different types of posted data to the object types. + + + + + + Initializes a new instance of the class. + + A session store is used to save and retrieve sessions + + + + + Initializes a new instance of the class. + + The log writer. + + + + + Initializes a new instance of the class. + + Form decoders are used to convert different types of posted data to the object types. + The log writer. + + + + + + + Initializes a new instance of the class. + + Form decoders are used to convert different types of posted data to the object types. + A session store is used to save and retrieve sessions + The log writer. + + + + + + + + Adds the specified rule. + + The rule. + + + + Add a to the server. + + mode to add + + + + Decodes the request body. + + The request. + Failed to decode form data. + + + + Generate a HTTP error page (that will be added to the response body). + response status code is also set. + + Response that the page will be generated in. + . + response body contents. + + + + Generate a HTTP error page (that will be added to the response body). + response status code is also set. + + Response that the page will be generated in. + exception. + + + + Realms are used by the s. + + HTTP request + domain/realm. + + + + Process an incoming request. + + connection to client + request information + response that should be filled + session information + + + + Can be overloaded to implement stuff when a client have been connected. + + + Default implementation does nothing. + + client that disconnected + disconnect reason + + + + Handle authentication + + + + + true if request can be handled; false if not. + Invalid authorization header + + + + Will request authentication. + + + Sends respond to client, nothing else can be done with the response after this. + + + + + + + + Received from a when a request have been parsed successfully. + + that received the request. + The request. + + + + To be able to track request count. + + + + + + + Start the web server using regular HTTP. + + IP Address to listen on, use IpAddress.Any to accept connections on all IP addresses/network cards. + Port to listen on. 80 can be a good idea =) + address is null. + Port must be a positive number. + + + + Accept secure connections. + + IP Address to listen on, use to accept connections on all IP Addresses / network cards. + Port to listen on. 80 can be a good idea =) + Certificate to use + address is null. + Port must be a positive number. + + + + shut down the server and listeners + + + + + write an entry to the log file + + importance of the message + log message + + + + write an entry to the log file + + object that wrote the message + importance of the message + log message + + + + Server that is handling the current request. + + + Will be set as soon as a request arrives to the object. + + + + + Modules used for authentication. The module that is is added first is used as + the default authentication module. + + Use the corresponding property + in the if you are using multiple websites. + + + + Form decoder providers are used to decode request body (which normally contains form data). + + + + + Server name sent in HTTP responses. + + + Do NOT include version in name, since it makes it + easier for hackers. + + + + + Name of cookie where session id is stored. + + + + + Specified where logging should go. + + + + + + + + Number of connections that can wait to be accepted by the server. + + Default is 10. + + + + Gets or sets maximum number of allowed simultaneous requests. + + + + 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. + + + The default number if allowed simultaneous requests are 10. + + + + + + Gets or sets maximum number of requests queuing to be handled. + + + + The WebServer will start turning requests away if response code + to indicate that the server + is too busy to be able to handle the request. + + + + + + Realms are used during HTTP authentication. + Default realm is same as server name. + + + + + Let's to receive unhandled exceptions from the threads. + + + Exceptions will be thrown during debug mode if this event is not used, + exceptions will be printed to console and suppressed during release mode. + + @@ -5233,150 +3471,6 @@ Content type (with any additional info like boundry). Content type is always supplied in lower case. True if the decoder can parse the specified content type - - - A session stored in memory. - - - - - - - A unique id used by the sessions store to identify the session - - - - Id - - - - - - Remove everything from the session - - - - - Clears the specified expire. - - True if the session is cleared due to expiration - - - - Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. - - 2 - - - - Session id - - - - - Should - - Name of the session variable - null if it's not set - - - - when the session was last accessed. - - - Used to determine when the session should be removed. - - - - - Number of values in the session - - - - - Flag to indicate that the session have been changed - and should be saved into the session store. - - - - - Event triggered upon clearing the session - - - - - Cookies that should be set. - - - - - Adds a cookie in the collection. - - cookie to add - cookie is null - - - - Copy a request cookie - - - When the cookie should expire - - - - Gets a collection enumerator on the cookie list. - - collection enumerator - - - - Remove all cookies - - - - - Returns an enumerator that iterates through the collection. - - - - A that can be used to iterate through the collection. - - 1 - - - - Gets the count of cookies in the collection. - - - - - Gets the cookie of a given identifier (null if not existing). - - - - - Creates request parsers when needed. - - - - - Creates request parsers when needed. - - - - - Create a new request parser. - - Used when logging should be enabled. - A new request parser. - - - - Create a new request parser. - - Used when logging should be enabled. - A new request parser. - Add a component instance @@ -5412,6 +3506,1142 @@ Type being created. Type have already been mapped. + + + The purpose of this module is to serve files. + + + + + Initializes a new instance of the class. + + Uri to serve, for instance "/files/" + Path on hard drive where we should start looking for files + If true a Last-Modifed header will be sent upon requests urging web browser to cache files + + + + Initializes a new instance of the class. + + Uri to serve, for instance "/files/" + Path on hard drive where we should start looking for files + + + + Mimtypes that this class can handle per default + + + + + Determines if the request should be handled by this module. + Invoked by the + + + true if this module should handle it. + + + Illegal path + + + + check if source contains any of the chars. + + + + + + + + Method that process the Uri. + + Information sent by the browser about the request + Information that is being sent back to the client. + Session used to + Failed to find file extension + File type is forbidden. + + + + return a file extension from an absolute Uri path (or plain filename) + + + + + + + List with all mime-type that are allowed. + + All other mime types will result in a Forbidden http status code. + + + + characters that may not exist in a path. + + + fileMod.ForbiddenChars = new string[]{ "\\", "..", ":" }; + + + + + Contains a listener that doesn't do anything with the connections. + + + + + Listen for regular HTTP connections + + IP Address to accept connections on + TCP Port to listen on, default HTTP port is 80. + Factory used to create es. + address is null. + Port must be a positive number. + + + + Initializes a new instance of the class. + + IP Address to accept connections on + TCP Port to listen on, default HTTPS port is 443 + Factory used to create es. + Certificate to use + + + + Initializes a new instance of the class. + + IP Address to accept connections on + TCP Port to listen on, default HTTPS port is 443 + Factory used to create es. + Certificate to use + which HTTPS protocol to use, default is TLS. + + + Exception. + + + + Will try to accept connections one more time. + + If any exceptions is thrown. + + + + Can be used to create filtering of new connections. + + Accepted socket + true if connection can be accepted; otherwise false. + + + + Start listen for new connections + + Number of connections that can stand in a queue to be accepted. + Listener have already been started. + + + + Stop the listener + + + + + + Gives you a change to receive log entries for all internals of the HTTP library. + + + You may not switch log writer after starting the listener. + + + + + True if we should turn on trace logs. + + + + + Catch exceptions not handled by the listener. + + + Exceptions will be thrown during debug mode if this event is not used, + exceptions will be printed to console and suppressed during release mode. + + + + + A request have been received from a . + + + + + Container class for posted files + + + + + Creates a container for a posted file + + The identifier of the post field + The file path + The content type of the file + The name of the file uploaded + If any parameter is null or empty + + + + Creates a container for a posted file + + If any parameter is null or empty + + + Destructor disposing the file + + + + Deletes the temporary file + + True if manual dispose + + + + Disposing interface, cleans up managed resources (the temporary file) and suppresses finalization + + + + + The name/id of the file + + + + + The full file path + + + + + The name of the uploaded file + + + + + The type of file + + + + + Implements HTTP Digest authentication. It's more secure than Basic auth since password is + encrypted with a "key" from the server. + + + Keep in mind that the password is encrypted with MD5. Use a combination of SSL and digest auth to be secure. + + + + + Initializes a new instance of the class. + + Delegate used to provide information used during authentication. + Delegate used to determine if authentication is required (may be null). + + + + Initializes a new instance of the class. + + Delegate used to provide information used during authentication. + + + + Used by test classes to be able to use hardcoded values + + + + + An authentication response have been received from the web browser. + Check if it's correct + + Contents from the Authorization header + Realm that should be authenticated + GET/POST/PUT/DELETE etc. + First option: true if username/password is correct but not cnonce + + Authentication object that is stored for the request. A user class or something like that. + + if authenticationHeader is invalid + If any of the paramters is empty or null. + + + + Encrypts parameters into a Digest string + + Realm that the user want to log into. + User logging in + Users password. + HTTP method. + Uri/domain that generated the login prompt. + Quality of Protection. + "Number used ONCE" + Hexadecimal request counter. + "Client Number used ONCE" + Digest encrypted string + + + + + + Md5 hex encoded "userName:realm:password", without the quotes. + Md5 hex encoded "method:uri", without the quotes + Quality of Protection + "Number used ONCE" + Hexadecimal request counter. + Client number used once + + + + + Create a response that can be sent in the WWW-Authenticate header. + + Realm that the user should authenticate in + First options specifies if true if username/password is correct but not cnonce. + A correct auth request. + If realm is empty or null. + + + + Decodes authorization header value + + header value + Encoding that the buffer is in + All headers and their values if successful; otherwise null + + NameValueCollection header = DigestAuthentication.Decode("response=\"6629fae49393a05397450978507c4ef1\",\r\nc=00001", Encoding.ASCII); + + Can handle lots of whitespaces and new lines without failing. + + + + Gets the current nonce. + + + + + + Gets the Md5 hash bin hex2. + + To be hashed. + + + + + determines if the nonce is valid or has expired. + + nonce value (check wikipedia for info) + true if the nonce has not expired. + + + + name used in http request. + + + + + Gets or sets whether the token supplied in is a + HA1 generated string. + + + + + Current state in the parsing. + + + + + Should parse the request line + + + + + Searching for a complete header name + + + + + Searching for colon after header name (ignoring white spaces) + + + + + Searching for start of header value (ignoring white spaces) + + + + + Searching for a complete header value (can span over multiple lines, as long as they are prefixed with one/more whitespaces) + + + + + Adding bytes to body + + + + + 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. + + + [a-z0-9]+)", "/users/${target}?find=true", RegexOptions.IgnoreCase) + ]]> + + + + + Initializes a new instance of the class. + + Expression to match URL + Expression to generate URL + + [a-zA-Z0-9]+)", "/user/${first}")); + Result of ie. /employee1 will then be /user/employee1 + ]]> + + + + + Initializes a new instance of the class. + + Expression to match URL + Expression to generate URL + Regular expression options to use, can be null + + [a-zA-Z0-9]+)", "/user/{first}", RegexOptions.IgnoreCase)); + Result of ie. /employee1 will then be /user/employee1 + ]]> + + + + + Initializes a new instance of the class. + + Expression to match URL + Expression to generate URL + Regular expression options to apply + true if request should be redirected, false if the request URI should be replaced. + + [a-zA-Z0-9]+)", "/user/${first}", RegexOptions.None)); + Result of ie. /employee1 will then be /user/employee1 + ]]> + + Argument is null. + + + + + Process the incoming request. + + incoming HTTP request + outgoing HTTP response + true if response should be sent to the browser directly (no other rules or modules will be processed). + + returning true means that no modules will get the request. Returning true is typically being done + for redirects. + + If request or response is null + + + + 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 + + + + + Let's copy all the cookies. + + value from cookie header. + + + + Adds a cookie in the collection. + + cookie to add + cookie is null + + + + Gets a collection enumerator on the cookie list. + + collection enumerator + + + + Remove all cookies. + + + + + Returns an enumerator that iterates through the collection. + + + + A that can be used to iterate through the collection. + + 1 + + + + Remove a cookie from the collection. + + Name of cookie. + + + + Gets the count of cookies in the collection. + + + + + Gets the cookie of a given identifier (null if not existing). + + + + + Arguments used when more body bytes have come. + + + + + Initializes a new instance of the class. + + buffer that contains the received bytes. + offset in buffer where to start processing. + number of bytes from that should be parsed. + + + + Initializes a new instance of the class. + + + + + Gets or sets buffer that contains the received bytes. + + + + + Gets or sets number of bytes from that should be parsed. + + + + + Gets or sets offset in buffer where to start processing. + + + + + Returns item either from a form or a query string (checks them in that order) + + + + Representation of a non-initialized HttpParam + + + Initialises the class to hold a value either from a post request or a querystring request + + + + The add method is not availible for HttpParam + since HttpParam checks both Request.Form and Request.QueryString + + name identifying the value + value to add + + + + + Checks whether the form or querystring has the specified value + + Name, case sensitive + true if found; otherwise false. + + + + Returns an enumerator that iterates through the collection. + + + + A that can be used to iterate through the collection. + + 1 + + + + Returns an enumerator that iterates through a collection. + + + + An object that can be used to iterate through the collection. + + 2 + + + + Fetch an item from the form or querystring (in that order). + + + Item if found; otherwise HttpInputItem.EmptyLanguageNode + + + + 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. + + Class that the exception was thrown in. + Exception + + Server will throw a InternalServerException in release version if you dont + handle this delegate. + + + + + Delegate used to let authentication modules authenticate the user name and password. + + Realm that the user want to authenticate in + User name specified by client + Can either be user password or implementation specific token. + object that will be stored in a session variable called if authentication was successful. + throw forbidden exception if too many attempts have been made. + + + Use to specify that the token is a HA1 token. (MD5 generated + string from realm, user name and password); Md5String(userName + ":" + realm + ":" + password); + + + + + + Let's you decide on a system level if authentication is required. + + HTTP request from client + true if user should be authenticated. + throw if no more attempts are allowed. + If no more attempts are allowed + + + + New implementation of the HTTP listener. + + + Use the Create methods to create a default listener. + + + + + Initializes a new instance of the class. + + IP Address to accept connections on + TCP Port to listen on, default HTTP port is 80. + Factory used to create es. + address is null. + Port must be a positive number. + + + + Initializes a new instance of the class. + + The address. + The port. + The factory. + The certificate. + + + + Initializes a new instance of the class. + + The address. + The port. + The factory. + The certificate. + The protocol. + + + + Creates a new instance with default factories. + + Address that the listener should accept connections on. + Port that listener should accept connections on. + Created HTTP listener. + + + + Creates a new instance with default factories. + + Address that the listener should accept connections on. + Port that listener should accept connections on. + Certificate to use + Created HTTP listener. + + + + Creates a new instance with default factories. + + Address that the listener should accept connections on. + Port that listener should accept connections on. + Certificate to use + which HTTPS protocol to use, default is TLS. + Created HTTP listener. + + + + Can be used to create filtering of new connections. + + Accepted socket + + true if connection can be accepted; otherwise false. + + + + + A client have been accepted, but not handled, by the listener. + + + + + Webhelper provides helpers for common tasks in HTML. + + + + + Used to let the website use different javascript libraries. + Default is + + + + + Creates a link that invokes through ajax. + + url to fetch + link title + + optional options in format "key, value, key, value". + Javascript options starts with ':'. + + a link tag + + WebHelper.AjaxRequest("/users/add/", "Add user", "method:", "post", "onclick", "validate('this');"); + + + + + Builds a link that updates an element with the fetched ajax content. + + Url to fetch content from + link title + html element to update with the results of the ajax request. + optional options in format "key, value, key, value" + A link tag. + + + + A link that pop ups a Dialog (overlay div) + + url to contents of dialog + link title + name/value of html attributes. + A "a"-tag that popups a dialog when clicked + + WebHelper.DialogLink("/user/show/1", "show user", "onmouseover", "alert('booh!');"); + + + + + Create/Open a dialog box using ajax + + + + + + + + + Close a javascript dialog window/div. + + javascript for closing a dialog. + + + + + Create a <form> tag. + + name of form + action to invoke on submit + form should be posted as ajax + html code + + WebHelper.FormStart("frmLogin", "/user/login", Request.IsAjax); + + + + + Create a link tag. + + url to go to + link title (text that is displayed) + html attributes, name, value, name, value + html code + + WebHelper.Link("/user/show/1", "Show user", "id", "showUser", "onclick", "return confirm('Are you shure?');"); + + + + + Build a link + + url to go to. + title of link (displayed text) + extra html attributes. + a complete link + + + + Build a link + + url to go to. + title of link (displayed text) + extra html attributes. + a complete link + more options + + + + Obsolete + + Obsolete + Obsolete + Obsolete + Obsolete + Obsolete + Obsolete + + + + Obsolete + + Obsolete + Obsolete + Obsolete + Obsolete + Obsolete + Obsolete + Obsolete + + + + Render errors into a UL with class "errors" + + class used by UL-tag. + items to list + an unordered html list. + + + + Render errors into a UL with class "errors" + + class used by UL-tag. + items to list + an unordered html list. + + + + Render errors into a UL with class "errors" + + + + + + + Generates a list with html attributes. + + StringBuilder that the options should be added to. + attributes set by user. + attributes set by any of the helper classes. + + + + Generates a list with html attributes. + + StringBuilder that the options should be added to. + + + + + cookie being sent back to the browser. + + + + + + Constructor. + + cookie identifier + cookie content + cookie expiration date. Use DateTime.MinValue for session cookie. + id or content is null + id is empty + + + + Create a new cookie + + name identifying the cookie + cookie value + when the cookie expires. Setting DateTime.MinValue will delete the cookie when the session is closed. + Path to where the cookie is valid + Domain that the cookie is valid for. + + + + Create a new cookie + + Name and value will be used + when the cookie expires. + + + + Gets the cookie HTML representation. + + cookie string + + + + When the cookie expires. + DateTime.MinValue means that the cookie expires when the session do so. + + + + + Cookie is only valid under this path. + + + + + Contains server side HTTP request information. + + + + + Called during parsing of a . + + Name of the header, should not be URL encoded + Value of the header, should not be URL encoded + If a header is incorrect. + + + + Add bytes to the body + + buffer to read bytes from + where to start read + number of bytes to read + Number of bytes actually read (same as length unless we got all body bytes). + If body is not writable + bytes is null. + offset is out of range. + + + + Clear everything in the request + + + + + Decode body into a form. + + A list with form decoders. + If body contents is not valid for the chosen decoder. + If body is still being transferred. + + + + Sets the cookies. + + The cookies. + + + + Create a response object. + + Context for the connected client. + A new . + + + + Gets kind of types accepted by the client. + + + + + Gets or sets body stream. + + + + + Gets whether the body is complete. + + + + + Gets or sets kind of connection used for the session. + + + + + Gets or sets number of bytes in the body. + + + + + Gets cookies that was sent with the request. + + + + + Gets form parameters. + + + + + Gets headers sent by the client. + + + + + Gets or sets version of HTTP protocol that's used. + + + Probably or . + + + + + + Gets whether the request was made by Ajax (Asynchronous JavaScript) + + + + + Gets or sets requested method. + + + Will always be in upper case. + + + + + + Gets parameter from or . + + + + + Gets variables sent in the query string + + + + + Gets or sets requested URI. + + + + + Gets URI absolute path divided into parts. + + + // URI is: http://gauffin.com/code/tiny/ + Console.WriteLine(request.UriParts[0]); // result: code + Console.WriteLine(request.UriParts[1]); // result: tiny + + + 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. + + + + + + Gets or sets path and query. + + + + Are only used during request parsing. Cannot be set after "Host" header have been + added. + + + + + Delegate used by to populate select options. + + current object (for instance a User). + Text that should be displayed in the value part of a <optiongt;-tag. + Text shown in the select list. + + // 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; + } /// + The request requires user authentication. The response MUST include a @@ -5452,5 +4682,775 @@ reason to why the request was unauthorized. + + + The requested resource was not found in the web server. + + + + + Create a new exception + + message describing the error + inner exception + + + + Create a new exception + + message describing the error + + + + Type of HTTP connection + + + + + Connection is closed after each request-response + + + + + Connection is kept alive for X seconds (unless another request have been made) + + + + + A have been disconnected. + + + + + Initializes a new instance of the class. + + Reason to disconnection. + + + + Gets reason to why client disconnected. + + + + + + + + + + Initializes a new instance of the class. + + The request. + + + + Gets received request. + + + + + Contains server side HTTP request information. + + + + + Chars used to split an URL path into multiple parts. + + + + + Assign a form. + + + + + + Creates a new object that is a copy of the current instance. + + + + A new object that is a copy of this instance. + + 2 + + + + Decode body into a form. + + A list with form decoders. + If body contents is not valid for the chosen decoder. + If body is still being transferred. + + + + Cookies + + the cookies + + + + Create a response object. + + A new . + + + + Called during parsing of a . + + Name of the header, should not be URL encoded + Value of the header, should not be URL encoded + If a header is incorrect. + + + + Add bytes to the body + + buffer to read bytes from + where to start read + number of bytes to read + Number of bytes actually read (same as length unless we got all body bytes). + If body is not writable + bytes is null. + offset is out of range. + + + + Clear everything in the request + + + + + Gets or sets a value indicating whether this is secure. + + + + + Path and query (will be merged with the host header) and put in Uri + + + + + + Gets whether the body is complete. + + + + + Gets kind of types accepted by the client. + + + + + Gets or sets body stream. + + + + + Gets or sets kind of connection used for the session. + + + + + Gets or sets number of bytes in the body. + + + + + Gets headers sent by the client. + + + + + Gets or sets version of HTTP protocol that's used. + + + Probably or . + + + + + + Gets or sets requested method. + + + + Will always be in upper case. + + + + + + Gets variables sent in the query string + + + + + Gets or sets requested URI. + + + + + Uri absolute path splitted into parts. + + + // uri is: http://gauffin.com/code/tiny/ + Console.WriteLine(request.UriParts[0]); // result: code + Console.WriteLine(request.UriParts[1]); // result: tiny + + + 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. + + + + + + Gets parameter from or . + + + + + Gets form parameters. + + + + + Gets whether the request was made by Ajax (Asynchronous JavaScript) + + + + + Gets cookies that was sent with the request. + + + + + 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 + + + // becomes: + Console.WriteLine("Value: {0}", form["user"]["FirstName"].Value); + + + All names in a form SHOULD be in lowercase. + + + + Representation of a non-initialized . + + + + Initializes an input item setting its name/identifier and value + + Parameter name/id + Parameter value + + + Creates a deep copy of the item specified + The item to copy + The function makes a deep copy of quite a lot which can be slow + + + + Add another value to this item + + Value to add. + Cannot add stuff to . + + + + checks if a sub-item exists (and has a value). + + name in lower case + true if the sub-item exists and has a value; otherwise false. + + + Returns a formatted representation of the instance with the values of all contained parameters + + + + Outputs the string in a formatted manner + + A prefix to append, used internally + produce a query string + + + + Add a sub item. + + Can contain array formatting, the item is then parsed and added in multiple levels + Value to add. + Argument is null. + Cannot add stuff to . + + + + Returns an enumerator that iterates through the collection. + + + + A that can be used to iterate through the collection. + + 1 + + + + Returns an enumerator that iterates through a collection. + + + + An object that can be used to iterate through the collection. + + 2 + + + + Outputs the string in a formatted manner + + A prefix to append, used internally + + + + + Number of values + + + + + Get a sub item + + name in lower case. + if no item was found. + + + + Name of item (in lower case). + + + + + Returns the first value, or null if no value exist. + + + + + Returns the last value, or null if no value exist. + + + + + Returns the list with values. + + + + + + + name in lower case + + + + + Generic helper functions for HTTP + + + + + Version string for HTTP v1.0 + + + + + Version string for HTTP v1.1 + + + + + An empty URI + + + + + Parses a query string. + + Query string (URI encoded) + A object if successful; otherwise + queryString is null. + If string cannot be parsed. + + + + Used when the request line have been successfully parsed. + + + + + Initializes a new instance of the class. + + The HTTP method. + The URI path. + The HTTP version. + + + + Initializes a new instance of the class. + + + + + Gets or sets http method. + + + Should be one of the methods declared in . + + + + + Gets or sets the version of the HTTP protocol that the client want to use. + + + + + Gets or sets requested URI path. + + + + + Contains all HTTP Methods (according to the HTTP 1.1 specification) + + See: http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html + + + + + + The DELETE method requests that the origin server delete the resource identified by the Request-URI. + + + + 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. + + + 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. + + + 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. + + + 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. + + + + + + The GET method means retrieve whatever information (in the form of an entity) is identified by the Request-URI. + + + + 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. + + + 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. + + + + + + The HEAD method is identical to GET except that the server MUST NOT return a message-body in the response. + + + 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. + + + + + The OPTIONS method represents a request for information about the communication options available on the request/response chain identified by the Request-URI. + + + 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. + + + + + 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. + + + POST is designed to allow a uniform method to cover the following functions: + + + Annotation of existing resources; + + Posting a message to a bulletin board, newsgroup, mailing list, or similar group of articles; + + Providing a block of data, such as the result of submitting a form, to a data-handling process; + + Extending a database through an append operation. + + + + 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). + + + 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. + + 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. + + + + + + The PUT method requests that the enclosed entity be stored under the supplied Request-URI. + + + + + 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. + + 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. + + If a new resource is created, the origin server MUST inform the user agent via the 201 (Created) response. + + 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. + + 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. + + + + 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. + + + + + + The TRACE method is used to invoke a remote, application-layer loop- back of the request message. + + + + + Contains all HTTP Methods (according to the HTTP 1.1 specification) + + See: http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html + + + + + + The DELETE method requests that the origin server delete the resource identified by the Request-URI. + + + + 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. + + + 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. + + + 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. + + + 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. + + + + + + The GET method means retrieve whatever information (in the form of an entity) is identified by the Request-URI. + + + + 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. + + + 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. + + + + + + The HEAD method is identical to GET except that the server MUST NOT return a message-body in the response. + + + 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. + + + + + The OPTIONS method represents a request for information about the communication options available on the request/response chain identified by the Request-URI. + + + 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. + + + + + 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. + + + POST is designed to allow a uniform method to cover the following functions: + + + Annotation of existing resources; + + Posting a message to a bulletin board, newsgroup, mailing list, or similar group of articles; + + Providing a block of data, such as the result of submitting a form, to a data-handling process; + + Extending a database through an append operation. + + + + 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). + + + 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. + + 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. + + + + + + The PUT method requests that the enclosed entity be stored under the supplied Request-URI. + + + + + 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. + + 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. + + If a new resource is created, the origin server MUST inform the user agent via the 201 (Created) response. + + 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. + + 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. + + + + 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. + + + + + + The TRACE method is used to invoke a remote, application-layer loop- back of the request message. + + + + + Serves files that are stored in embedded resources. + + + + + Initializes a new instance of the class. + Runs to make sure the basic mime types are available, they can be cleared later + through the use of if desired. + + + + + Initializes a new instance of the class. + Runs to make sure the basic mime types are available, they can be cleared later + through the use of if desired. + + The log writer to use when logging events + + + + Mimtypes that this class can handle per default + + + + + Loads resources from a namespace in the given assembly to an uri + + The uri to map the resources to + The assembly in which the resources reside + The namespace from which to load the resources + + 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 + + The amount of loaded files, giving you the possibility of making sure the resources needed gets loaded + + + + Returns true if the module can handle the request + + + + + Method that process the url + + Information sent by the browser about the request + Information that is being sent back to the client. + Session used to + true if this module handled the request. + + + + List with all mime-type that are allowed. + + All other mime types will result in a Forbidden http status code. +