From ef43f98686b8b6530f9e04bf6e0cdc6b72328fa2 Mon Sep 17 00:00:00 2001 From: "Justin Clark-Casey (justincc)" Date: Sat, 18 Dec 2010 00:45:56 +0000 Subject: [PATCH 1/9] Raise maximum iar version that master can load to 1.x, so that it can load its own iars (oops) --- .../Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs index acf2c3ef97..603070614c 100644 --- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs +++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs @@ -54,7 +54,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver /// The maximum major version of archive that we can read. Minor versions shouldn't need a max number since version /// bumps here should be compatible. /// - public static int MAX_MAJOR_VERSION = 0; + public static int MAX_MAJOR_VERSION = 1; protected TarArchiveReader archive; From bf9555eaee34da11bba3d191b3ba37e2a681fde7 Mon Sep 17 00:00:00 2001 From: "Justin Clark-Casey (justincc)" Date: Sat, 18 Dec 2010 00:57:09 +0000 Subject: [PATCH 2/9] minor: add [-p|--profile=] to usage line that pops up if save iar console command isn't valid --- .../Avatar/Inventory/Archiver/InventoryArchiverModule.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverModule.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverModule.cs index 1e1809544b..79bd39e0bd 100644 --- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverModule.cs @@ -124,7 +124,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver scene.AddCommand( this, "save iar", - "save iar [--p|-profile=] []", + "save iar [--p|-profile=] []", "Save user inventory archive (IAR).", " is the user's first name." + Environment.NewLine + " is the user's last name." + Environment.NewLine @@ -358,7 +358,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver if (mainParams.Count < 6) { m_log.Error( - "[INVENTORY ARCHIVER]: usage is load iar [--merge] []"); + "[INVENTORY ARCHIVER]: usage is load iar [--merge] []"); return; } @@ -404,7 +404,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver if (mainParams.Count < 6) { m_log.Error( - "[INVENTORY ARCHIVER]: usage is save iar []"); + "[INVENTORY ARCHIVER]: usage is save iar [--p|-profile=] []"); return; } From 223264047e22b235386cac3517a0b3c6b7133851 Mon Sep 17 00:00:00 2001 From: "Justin Clark-Casey (justincc)" Date: Sat, 18 Dec 2010 00:59:37 +0000 Subject: [PATCH 3/9] uncomment "load iar" help lines which added the --merge option --- .../Avatar/Inventory/Archiver/InventoryArchiverModule.cs | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverModule.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverModule.cs index 79bd39e0bd..b1c2a3c683 100644 --- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverModule.cs @@ -109,12 +109,10 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver scene.AddCommand( this, "load iar", - "load iar []", - //"load iar [--merge] []", + "load iar [--merge] []", "Load user inventory archive (IAR).", - //"--merge is an option which merges the loaded IAR with existing inventory folders where possible, rather than always creating new ones" - //+ " is user's first name." + Environment.NewLine - " is user's first name." + Environment.NewLine + "--merge is an option which merges the loaded IAR with existing inventory folders where possible, rather than always creating new ones" + + " is user's first name." + Environment.NewLine + " is user's last name." + Environment.NewLine + " is the path inside the user's inventory where the IAR should be loaded." + Environment.NewLine + " is the user's password." + Environment.NewLine From d576d7c0a6b0d2de2b68ab46877a61fbc9e3cce5 Mon Sep 17 00:00:00 2001 From: Diva Canto Date: Sat, 18 Dec 2010 17:36:37 -0800 Subject: [PATCH 4/9] Replaced HttpServer_OpenSim.dll with a version that locks certain ops in HttpForm -- mantis #5128. --- bin/HttpServer_OpenSim.dll | Bin 114176 -> 116224 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/bin/HttpServer_OpenSim.dll b/bin/HttpServer_OpenSim.dll index 06bdf60baecdabd2056fc86626c50fb39e01fca5..cdd4655abb3074c240d92fef569f1b27bfb1126d 100644 GIT binary patch literal 116224 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 literal 114176 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

!&&zU`bZN>YyHL!ZOTOM*~mzQap7W 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

+R^xuKi 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 W{?|UQI;IPQ-$`-(<>&t$2L1;*F0+0B From cf72fece6db782530086724cd704261ccfb8c986 Mon Sep 17 00:00:00 2001 From: Diva Canto Date: Sat, 18 Dec 2010 18:23:51 -0800 Subject: [PATCH 5/9] Replaced the HttpServer_OpenSim.dll with one compiled for .NET 3.5 (the last one was 4.0, and that doesn't work). Also added the corresponding .xml and .pdb, if that makes any difference. --- bin/HttpServer_OpenSim.dll | Bin 116224 -> 115712 bytes bin/HttpServer_OpenSim.pdb | Bin 382464 -> 409088 bytes bin/HttpServer_OpenSim.xml | 8116 ++++++++++++++++++------------------ 3 files changed, 4058 insertions(+), 4058 deletions(-) diff --git a/bin/HttpServer_OpenSim.dll b/bin/HttpServer_OpenSim.dll index cdd4655abb3074c240d92fef569f1b27bfb1126d..d7503a0915af2502889385f98811510dc784a79a 100644 GIT binary patch delta 42025 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 delta 42475 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

mQPwH5sRPtMr2ctzk78XL-BoA8nU$!z(ZF*6H6U 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 - -

- 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. - - - - 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. - - - - - Container to bind resource names to assemblies - - - - - Instantiates an instance of - - The dot seperated uri the resource maps to - The full resource name - The assembly the resource exists in - - - - Retrieves a stream to the resource - - Null if the resource couldn't be located somehow - - - - Retrieves the assembly the resource resides in - - - - - Retrieves the full name/path of the assembly - - - - - Retrieves the extension of the resource - - - - Returns the Uri without extension - - - 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. - - - - - 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 - - - - This decoder converts XML documents to form items. - Each element becomes a subitem in the form, and each attribute becomes an item. - - - // xml: somethingdata - // result: - // form["hello"].Value = "something" - // form["hello"]["id"].Value = 1 - // form["hello"]["world]["id"].Value = 1 - // form["hello"]["world"].Value = "data" - - - The original xml document is stored in form["__xml__"].Value. - - - - - Interface for form content decoders. - - - + + The request could not be understood by the server due to malformed syntax. + The client SHOULD NOT repeat the request without modifications. - - Stream containing the content - Content type (with any additional info like boundry). Content type is always supplied in lower case - Stream enconding - 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 - - - - - - Stream containing the content - Content type (with any additional info like boundry). Content type is always supplied in lower case - Stream encoding - Note: contentType and encoding are not used? - A http form, or null if content could not be parsed. - - - - - Recursive function that will go through an xml element and store it's content - to the form item. - - (parent) Item in form that content should be added to. - Node that should be parsed. - - - - 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 encountered an unexpected condition which prevented it from fulfilling the request. + Text taken from: http://www.submissionchamber.com/help-guides/error-codes.php @@ -331,166 +37,462 @@ status code to use in the response. - + - Initializes a new instance of the class. + Create a new bad request exception. + reason to why the request was bad. - + - Initializes a new instance of the class. + Create a new bad request exception. - error message. + reason to why the request was bad. + inner exception - + - Initializes a new instance of the class. + Implements HTTP Digest authentication. It's more secure than Basic auth since password is + encrypted with a "key" from the server. - 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. - Id should be generated by the store implementation if it's null or . + Keep in mind that the password is encrypted with MD5. Use a combination of SSL and digest auth to be secure. - + - Load an existing session. - - Session id (usually retrieved from a client side cookie). - A session if found; otherwise null. - - - - 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 + Authentication modules are used to implement different + kind of HTTP 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 + Tag used for authentication. - + - 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. + + + + 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. - + - Creates a new http session + 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 with a specific id + Gets the Md5 hash bin hex2. - 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. - - + To be hashed. - + - Save an updated session to the store. + determines if the nonce is valid or has expired. - + nonce value (check wikipedia for info) + true if the nonce has not expired. - + - 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 + name used in http request. - + - Remove a session + Gets or sets whether the token supplied in is a + HA1 generated string. - id of the session. - + - Load a session from the store + 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. - - null if session is not found. + + [a-z0-9]+)", "/users/${target}?find=true", RegexOptions.IgnoreCase) + ]]> + - + - Number of minutes before a session expires. - Default is 20 minutes. + redirects from one URL to another. + + + Rules are used to perform operations before a request is being handled. + Rules can be used to create routing etc. + + + + + 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. + + + + 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. + + + + + 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 + + + + 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 + + + + Interface for sessions + + + + + Remove everything from the session + + + + + 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 + Cookies that should be set. @@ -541,35 +543,29 @@ Gets the cookie of a given identifier (null if not existing). - + - Small design by contract implementation. + Creates request parsers when needed. - + - Check whether a parameter is empty. + Creates request parsers when needed. - Parameter value - Parameter name, or error description. - value is empty. - + - Checks whether a parameter is null. + Create a new request parser. - Parameter value - Parameter name, or error description. - value is null. + Used when logging should be enabled. + A new request parser. - + - Checks whether a parameter is null. + Create a new request parser. - - Parameter value - Parameter name, or error description. - value is null. + Used when logging should be enabled. + A new request parser. @@ -707,33 +703,20 @@ A header have been received. - + - The website module let's you handle multiple websites in the same server. - It uses the "Host" header to check which site you want. + Used to inform http server that - 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. - + - + Eventarguments used when an exception is thrown by a module - domain name that should be handled. - + the exception - + - 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. + Exception thrown in a module @@ -927,78 +910,491 @@ 0 if no files are added - + + + Interface for form content decoders. + + + - 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 + + Stream containing the content + Content type (with any additional info like boundry). Content type is always supplied in lower case + Stream enconding + 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 + + + + Lists content type mime types. - + - Create a new bad request exception. + text/plain - reason to why the request was bad. - + - Create a new bad request exception. + 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 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. + + + + + 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) + + + + + + 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. + + + + + 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. + + + + 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. - reason to why the request was bad. - inner exception A session stored in memory. - - - Interface for sessions - - - - - Remove everything from the session - - - - - 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 - - @@ -1064,113 +1460,624 @@ Event triggered upon clearing the session - + - redirects from one URL to another. + This decoder converts XML documents to form items. + Each element becomes a subitem in the form, and each attribute becomes an item. - - - - Rules are used to perform operations before a request is being handled. - Rules can be used to create routing etc. - - - - - 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. - - - - Initializes a new instance of the class. - - Absolute path (no server name) - Absolute path (no server name) - server.Add(new RedirectRule("/", "/user/index")); + // xml: somethingdata + // result: + // form["hello"].Value = "something" + // form["hello"]["id"].Value = 1 + // form["hello"]["world]["id"].Value = 1 + // form["hello"]["world"].Value = "data" + + + The original xml document is stored in form["__xml__"].Value. + + + + + + + Stream containing the content + Content type (with any additional info like boundry). Content type is always supplied in lower case + Stream encoding + Note: contentType and encoding are not used? + A http form, or null if content could not be parsed. + + + + + Recursive function that will go through an xml element and store it's content + to the form item. + + (parent) Item in form that content should be added to. + Node that should be parsed. + + + + 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 + + + + + + + + + + + Represents a field in a multipart form + + + + The server encountered an unexpected condition which prevented it from fulfilling the request. + + + + + 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. + + + + 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 + + + + + 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/"); - + - Initializes a new instance of the class. + Method that determines if an url should be handled or not by the module - 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")); - + Url requested by the client. + true if module should handle the url. - + - Process the incoming request. + Method that process the url - 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. - + Information sent by the browser about the request + Information that is being sent back to the client. + Session used to - + - Gets string to match request URI with. - - Is compared to request.Uri.AbsolutePath - - - - Gets where to redirect. + Contains all HTTP Methods (according to the HTTP 1.1 specification) + + See: http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html + - + - Gets whether server should redirect client. + The DELETE method requests that the origin server delete the resource identified by the Request-URI. - 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. + + 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. + - + - cookie sent by the client/browser + 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. + + - + - Constructor. + The HEAD method is identical to GET except that the server MUST NOT return a message-body in the response. - cookie identifier - cookie content - id or content is null - id is empty + + 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. + - + - Gets the cookie HTML representation. + The OPTIONS method represents a request for information about the communication options available on the request/response chain identified by the Request-URI. - cookie string + + 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. + - + - Gets the cookie identifier. + 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. - + - Cookie value. Set to null to remove cookie. + 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. + + + + + New implementation of the HTTP listener. + + + Use the Create methods to create a default listener. + + + + + 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 . + + + + + 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. + + + + + 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. @@ -1268,27 +2175,6 @@ 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. @@ -1342,6 +2228,2471 @@ javascript for closing a dialog. + + + 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; + } /// + + + + 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. + + + + + Response that is sent back to the web browser / client. + + A response can be sent if different ways. The easiest one is + to just fill the Body stream with content, everything else + will then be taken care of by the framework. The default content-type + is text/html, you should change it if you send anything else. + + The second and slighty more complex way is to send the response + as parts. Start with sending the header using the SendHeaders method and + then you can send the body using SendBody method, but do not forget + to set ContentType and ContentLength before doing so. + + + public void MyHandler(IHttpRequest request, IHttpResponse response) + { + + } + + + + + Add another header to the document. + + Name of the header, case sensitive, use lower cases. + Header values can span over multiple lines as long as each line starts with a white space. New line chars should be \r\n + If headers already been sent. + If value conditions have not been met. + Adding any header will override the default ones and those specified by properties. + + + + Send headers and body to the browser. + + If content have already been sent. + + + + Make sure that you have specified ContentLength and sent the headers first. + + + If headers have not been sent. + + offest of first byte to send + number of bytes to send. + + + This method can be used if you want to send body contents without caching them first. This + is recommended for larger files to keep the memory usage low. + + + + Make sure that you have specified ContentLength and sent the headers first. + + + If headers have not been sent. + + + + This method can be used if you want to send body contents without caching them first. This + is recommended for larger files to keep the memory usage low. + + + + Send headers to the client. + + If headers already been sent. + + + + + + + Redirect client to somewhere else using the 302 status code. + + Destination of the redirect + If headers already been sent. + You can not do anything more with the request when a redirect have been done. This should be your last + action. + + + + redirect to somewhere + + where the redirect should go + + No body are allowed when doing redirects. + + + + + The body stream is used to cache the body contents + before sending everything to the client. It's the simplest + way to serve documents. + + + + + Defines the version of the HTTP Response for applications where it's required + for this to be forced. + + + + + The chunked encoding modifies the body of a message in order to + transfer it as a series of chunks, each with its own size indicator, + followed by an OPTIONAL trailer containing entity-header fields. This + allows dynamically produced content to be transferred along with the + information necessary for the recipient to verify that it has + received the full message. + + + + + Kind of connection + + + + + Encoding to use when sending stuff to the client. + + Default is UTF8 + + + + Number of seconds to keep connection alive + + Only used if Connection property is set to ConnectionType.KeepAlive + + + + Status code that is sent to the client. + + Default is HttpStatusCode.Ok + + + + Information about why a specific status code was used. + + + + + Size of the body. MUST be specified before sending the header, + unless property Chunked is set to true. + + + + + Kind of content in the body + + Default is text/html + + + + Headers have been sent to the client- + + You can not send any additional headers if they have already been sent. + + + + The whole response have been sent. + + + + + Cookies that should be created/changed. + + + + + Type of HTTP connection + + + + + Connection is closed after each request-response + + + + + Connection is kept alive for X seconds (unless another request have been made) + + + + + 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. + + + + + 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. + + + + + 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. + + + + + 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 + + + + + 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 + + + + + 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 + + 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);"); + + + + + + The request requires user authentication. The response MUST include a + WWW-Authenticate header field (section 14.47) containing a challenge + applicable to the requested resource. + + The client MAY repeat the request with a suitable Authorization header + field (section 14.8). If the request already included Authorization + credentials, then the 401 response indicates that authorization has been + refused for those credentials. If the 401 response contains the same challenge + as the prior response, and the user agent has already attempted authentication + at least once, then the user SHOULD be presented the entity that was given in the response, + since that entity might include relevant diagnostic information. + + HTTP access authentication is explained in rfc2617: + http://www.ietf.org/rfc/rfc2617.txt + + (description is taken from + http://www.submissionchamber.com/help-guides/error-codes.php#sec10.4.2) + + + + + Create a new unauhtorized exception. + + + + + + Create a new unauhtorized exception. + + reason to why the request was unauthorized. + inner exception + + + + Create a new unauhtorized exception. + + reason to why the request was unauthorized. + + + + 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 + + + + 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. + + + + + 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. + + + + + 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. + + Id should be generated by the store implementation if it's null or . + + + + + Load an existing session. + + Session id (usually retrieved from a client side cookie). + A session if found; otherwise null. + + + + 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 + + + + + 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. + + + + 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). + + + + + 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. + + + + 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. + + + + + 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 + + + + + + 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 + + + + + + + http://www.faqs.org/rfcs/rfc1867.html + + + + + multipart/form-data + + + + + form-data + + + + + + + Stream containing the content + Content type (with any additional info like boundry). Content type is always supplied in lower case + Stream enconding + A http form, or null if content could not be parsed. + If contents in the stream is not valid input data. + If any parameter is null + + + + 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 + + + + 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. + + + + + 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[]{ "\\", "..", ":" }; + + + + + 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 + + + + 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 + + + + 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. + + + + + 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 + + + + 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 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. + + + + 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 + + + + 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. + + + + 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. + + + + + 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. + + + + + 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. + + + + + 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. + + + + Container to bind resource names to assemblies + + + + + Instantiates an instance of + + The dot seperated uri the resource maps to + The full resource name + The assembly the resource exists in + + + + Retrieves a stream to the resource + + Null if the resource couldn't be located somehow + + + + Retrieves the assembly the resource resides in + + + + + Retrieves the full name/path of the assembly + + + + + Retrieves the extension of the resource + + + + Returns the Uri without extension + + + Retrieves the full path name to the resource file + Helpers making it easier to work with forms. @@ -1560,28 +4911,115 @@ - + - Arguments sent when a is cleared + 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. + + + + If instance cannot be created. + + + + Checks if the specified component interface have been added. + + + true if found; otherwise false. + + + + Add a component. + + Type being requested. + Type being created. + Type have already been mapped. + + + + Session store using memory for each session. - + - 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 + Initializes the class setting the expirationtimer to clean the session every minute - + - Delegate for when a IHttpSession is cleared + 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. - this is being cleared. - Arguments for the clearing @@ -1627,30 +5065,6 @@ Context that the request was received from. Request to process. - - - 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. - Response that is sent back to the web browser / client. @@ -1687,175 +5101,6 @@ todo: add two examples, using SendHeaders/SendBody and just the Body stream. - - - Response that is sent back to the web browser / client. - - A response can be sent if different ways. The easiest one is - to just fill the Body stream with content, everything else - will then be taken care of by the framework. The default content-type - is text/html, you should change it if you send anything else. - - The second and slighty more complex way is to send the response - as parts. Start with sending the header using the SendHeaders method and - then you can send the body using SendBody method, but do not forget - to set ContentType and ContentLength before doing so. - - - public void MyHandler(IHttpRequest request, IHttpResponse response) - { - - } - - - - - Add another header to the document. - - Name of the header, case sensitive, use lower cases. - Header values can span over multiple lines as long as each line starts with a white space. New line chars should be \r\n - If headers already been sent. - If value conditions have not been met. - Adding any header will override the default ones and those specified by properties. - - - - Send headers and body to the browser. - - If content have already been sent. - - - - Make sure that you have specified ContentLength and sent the headers first. - - - If headers have not been sent. - - offest of first byte to send - number of bytes to send. - - - This method can be used if you want to send body contents without caching them first. This - is recommended for larger files to keep the memory usage low. - - - - Make sure that you have specified ContentLength and sent the headers first. - - - If headers have not been sent. - - - - This method can be used if you want to send body contents without caching them first. This - is recommended for larger files to keep the memory usage low. - - - - Send headers to the client. - - If headers already been sent. - - - - - - - Redirect client to somewhere else using the 302 status code. - - Destination of the redirect - If headers already been sent. - You can not do anything more with the request when a redirect have been done. This should be your last - action. - - - - redirect to somewhere - - where the redirect should go - - No body are allowed when doing redirects. - - - - - The body stream is used to cache the body contents - before sending everything to the client. It's the simplest - way to serve documents. - - - - - Defines the version of the HTTP Response for applications where it's required - for this to be forced. - - - - - The chunked encoding modifies the body of a message in order to - transfer it as a series of chunks, each with its own size indicator, - followed by an OPTIONAL trailer containing entity-header fields. This - allows dynamically produced content to be transferred along with the - information necessary for the recipient to verify that it has - received the full message. - - - - - Kind of connection - - - - - Encoding to use when sending stuff to the client. - - Default is UTF8 - - - - Number of seconds to keep connection alive - - Only used if Connection property is set to ConnectionType.KeepAlive - - - - Status code that is sent to the client. - - Default is HttpStatusCode.Ok - - - - Information about why a specific status code was used. - - - - - Size of the body. MUST be specified before sending the header, - unless property Chunked is set to true. - - - - - Kind of content in the body - - Default is text/html - - - - Headers have been sent to the client- - - You can not send any additional headers if they have already been sent. - - - - The whole response have been sent. - - - - - Cookies that should be created/changed. - - Initializes a new instance of the class. @@ -2207,3250 +5452,5 @@ 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. - - - - - - - - http://www.faqs.org/rfcs/rfc1867.html - - - - - multipart/form-data - - - - - form-data - - - - - - - Stream containing the content - Content type (with any additional info like boundry). Content type is always supplied in lower case - Stream enconding - A http form, or null if content could not be parsed. - If contents in the stream is not valid input data. - If any parameter is null - - - - 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 - - - - 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. - - - - If instance cannot be created. - - - - Checks if the specified component interface have been added. - - - true if found; otherwise false. - - - - Add a component. - - Type being requested. - 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 - WWW-Authenticate header field (section 14.47) containing a challenge - applicable to the requested resource. - - The client MAY repeat the request with a suitable Authorization header - field (section 14.8). If the request already included Authorization - credentials, then the 401 response indicates that authorization has been - refused for those credentials. If the 401 response contains the same challenge - as the prior response, and the user agent has already attempted authentication - at least once, then the user SHOULD be presented the entity that was given in the response, - since that entity might include relevant diagnostic information. - - HTTP access authentication is explained in rfc2617: - http://www.ietf.org/rfc/rfc2617.txt - - (description is taken from - http://www.submissionchamber.com/help-guides/error-codes.php#sec10.4.2) - - - - - Create a new unauhtorized exception. - - - - - - Create a new unauhtorized exception. - - reason to why the request was unauthorized. - inner exception - - - - Create a new unauhtorized exception. - - 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. - From 2a40c8511a972768378452a42aea7a781c30509c Mon Sep 17 00:00:00 2001 From: Marck Date: Sun, 19 Dec 2010 22:59:32 +0100 Subject: [PATCH 6/9] Make long help text for new link-region command syntax more explicit. --- OpenSim/Services/GridService/HypergridLinker.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OpenSim/Services/GridService/HypergridLinker.cs b/OpenSim/Services/GridService/HypergridLinker.cs index 643d0fc114..549c715f92 100644 --- a/OpenSim/Services/GridService/HypergridLinker.cs +++ b/OpenSim/Services/GridService/HypergridLinker.cs @@ -144,7 +144,7 @@ namespace OpenSim.Services.GridService if (MainConsole.Instance != null) { MainConsole.Instance.Commands.AddCommand("hypergrid", false, "link-region", - "link-region []", + "link-region http://:/ []", "Link a HyperGrid Region", RunCommand); MainConsole.Instance.Commands.AddCommand("hypergrid", false, "link-region", "link-region []", From 3b4af8a0dc30e65b6f5c12d9f312f83be7ed240d Mon Sep 17 00:00:00 2001 From: Marck Date: Mon, 20 Dec 2010 01:36:39 +0100 Subject: [PATCH 7/9] Fix osTeleportAgent and osTeleportOwner for the case that GridService is used with a storage provider other than NullRegionData. --- .../Shared/Api/Implementation/OSSL_Api.cs | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs index 5a796b8787..bca08fb771 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs @@ -698,21 +698,15 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api == World.LandChannel.GetLandObject( presence.AbsolutePosition.X, presence.AbsolutePosition.Y).LandData.OwnerID) { - // Check for hostname , attempt to make a hglink + // Check for hostname, attempt to make a HG link, // and convert the regionName to the target region if (regionName.Contains(".") && regionName.Contains(":")) { List regions = World.GridService.GetRegionsByName(World.RegionInfo.ScopeID, regionName, 1); - // Try to link the region - if (regions != null && regions.Count > 0) - { - GridRegion regInfo = regions[0]; - string[] parts = regInfo.RegionName.Split(new char[] { ':' }); - if (parts.Length > 2) - regionName = parts[2]; - else - regionName = parts[0]; - } + string[] parts = regionName.Split(new char[] { ':' }); + if (parts.Length > 2) + regionName = parts[0] + ':' + parts[1] + "/ " + parts[2]; + regionName = "http://" + regionName; } World.RequestTeleportLocation(presence.ControllingClient, regionName, new Vector3((float)position.x, (float)position.y, (float)position.z), From 711283d3ca8534d650c1ee8ed25984e75e7c6052 Mon Sep 17 00:00:00 2001 From: Marck Date: Mon, 20 Dec 2010 02:50:19 +0100 Subject: [PATCH 8/9] More changes to the long help text for console command link-region. --- OpenSim/Services/GridService/HypergridLinker.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/OpenSim/Services/GridService/HypergridLinker.cs b/OpenSim/Services/GridService/HypergridLinker.cs index 549c715f92..c02c81306f 100644 --- a/OpenSim/Services/GridService/HypergridLinker.cs +++ b/OpenSim/Services/GridService/HypergridLinker.cs @@ -143,9 +143,9 @@ namespace OpenSim.Services.GridService if (MainConsole.Instance != null) { - MainConsole.Instance.Commands.AddCommand("hypergrid", false, "link-region", - "link-region http://:/ []", - "Link a HyperGrid Region", RunCommand); + MainConsole.Instance.Commands.AddCommand("hypergrid", false, "link-region", + "link-region []", + "Link a HyperGrid Region. Examples for : http://grid.net:8002/ or http://example.org/path/foo.php", RunCommand); MainConsole.Instance.Commands.AddCommand("hypergrid", false, "link-region", "link-region []", "Link a hypergrid region (deprecated)", RunCommand); From c082254b9d819a055338a3d35862f3c296fe1c94 Mon Sep 17 00:00:00 2001 From: Diva Canto Date: Sun, 19 Dec 2010 19:29:07 -0800 Subject: [PATCH 9/9] Put the coarse location updates back to 50 frames, otherwise the dots on the mini-map come and go noticeably. Also increased the Velocity a bit; I had decreased it to 0.885; now it's 0.9. --- OpenSim/Region/Framework/Scenes/Scene.cs | 2 +- OpenSim/Region/Framework/Scenes/ScenePresence.cs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs index 5517dc3871..c4bd028173 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.cs @@ -150,7 +150,7 @@ namespace OpenSim.Region.Framework.Scenes private int m_update_backup = 200; private int m_update_terrain = 50; // private int m_update_land = 1; - private int m_update_coarse_locations = 80; + private int m_update_coarse_locations = 50; private int frameMS; private int physicsMS2; diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs index 9d72bf6777..46234f9666 100644 --- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs @@ -3206,10 +3206,10 @@ namespace OpenSim.Region.Framework.Scenes m_updateflag = true; - // The magic constant 0.855f seems to make walking feel less jerky, + // The magic constant 0.95f seems to make walking feel less jerky, // probably because it hackishly accounts for the overall latency of // these Velocity updates -- Diva - Velocity = force * .855F; + Velocity = force * .95F; m_forceToApply = null; }