diff options
author | Melanie | 2013-02-07 20:51:51 +0000 |
---|---|---|
committer | Melanie | 2013-02-07 20:51:51 +0000 |
commit | 45f5a6a6db16538d864ff90ab6952aea13007514 (patch) | |
tree | 48583f7c77afd88a4760ea9db9159741f659fe5b | |
parent | Rename Bounciness to Restitution (diff) | |
parent | Change passed PhysicsParameter value from float to the more general string value (diff) | |
download | opensim-SC_OLD-45f5a6a6db16538d864ff90ab6952aea13007514.zip opensim-SC_OLD-45f5a6a6db16538d864ff90ab6952aea13007514.tar.gz opensim-SC_OLD-45f5a6a6db16538d864ff90ab6952aea13007514.tar.bz2 opensim-SC_OLD-45f5a6a6db16538d864ff90ab6952aea13007514.tar.xz |
Merge branch 'master' into careminster
Conflicts:
bin/HttpServer_OpenSim.dll
-rw-r--r-- | OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs | 46 | ||||
-rw-r--r-- | OpenSim/Framework/Servers/HttpServer/Interfaces/IHttpServer.cs | 10 | ||||
-rw-r--r-- | OpenSim/Framework/Servers/HttpServer/WebsocketServerHandler.cs | 1085 | ||||
-rw-r--r-- | OpenSim/Framework/Servers/Tests/OSHttpTests.cs | 5 | ||||
-rw-r--r-- | OpenSim/Region/OptionalModules/Example/WebSocketEchoTest/WebSocketEchoModule.cs | 174 | ||||
-rwxr-xr-x | OpenSim/Region/OptionalModules/PhysicsParameters/PhysicsParameters.cs | 19 | ||||
-rwxr-xr-x | OpenSim/Region/Physics/BulletSPlugin/BSParam.cs | 34 | ||||
-rw-r--r-- | OpenSim/Region/Physics/BulletSPlugin/BSScene.cs | 41 | ||||
-rwxr-xr-x | OpenSim/Region/Physics/Manager/IPhysicsParameters.cs | 6 | ||||
-rw-r--r-- | bin/HttpServer_OpenSim.pdb | bin | 413184 -> 343552 bytes | |||
-rw-r--r-- | bin/HttpServer_OpenSim.xml | 5802 | ||||
-rw-r--r-- | prebuild.xml | 3 |
12 files changed, 4280 insertions, 2945 deletions
diff --git a/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs b/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs index e3f2e7a..27af009 100644 --- a/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs +++ b/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs | |||
@@ -54,6 +54,16 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
54 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | 54 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); |
55 | private HttpServerLogWriter httpserverlog = new HttpServerLogWriter(); | 55 | private HttpServerLogWriter httpserverlog = new HttpServerLogWriter(); |
56 | 56 | ||
57 | |||
58 | /// <summary> | ||
59 | /// This is a pending websocket request before it got an sucessful upgrade response. | ||
60 | /// The consumer must call handler.HandshakeAndUpgrade() to signal to the handler to | ||
61 | /// start the connection and optionally provide an origin authentication method. | ||
62 | /// </summary> | ||
63 | /// <param name="servicepath"></param> | ||
64 | /// <param name="handler"></param> | ||
65 | public delegate void WebSocketRequestDelegate(string servicepath, WebSocketHttpServerHandler handler); | ||
66 | |||
57 | /// <summary> | 67 | /// <summary> |
58 | /// Gets or sets the debug level. | 68 | /// Gets or sets the debug level. |
59 | /// </summary> | 69 | /// </summary> |
@@ -87,6 +97,9 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
87 | protected Dictionary<string, PollServiceEventArgs> m_pollHandlers = | 97 | protected Dictionary<string, PollServiceEventArgs> m_pollHandlers = |
88 | new Dictionary<string, PollServiceEventArgs>(); | 98 | new Dictionary<string, PollServiceEventArgs>(); |
89 | 99 | ||
100 | protected Dictionary<string, WebSocketRequestDelegate> m_WebSocketHandlers = | ||
101 | new Dictionary<string, WebSocketRequestDelegate>(); | ||
102 | |||
90 | protected uint m_port; | 103 | protected uint m_port; |
91 | protected uint m_sslport; | 104 | protected uint m_sslport; |
92 | protected bool m_ssl; | 105 | protected bool m_ssl; |
@@ -170,6 +183,22 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
170 | } | 183 | } |
171 | } | 184 | } |
172 | 185 | ||
186 | public void AddWebSocketHandler(string servicepath, WebSocketRequestDelegate handler) | ||
187 | { | ||
188 | lock (m_WebSocketHandlers) | ||
189 | { | ||
190 | if (!m_WebSocketHandlers.ContainsKey(servicepath)) | ||
191 | m_WebSocketHandlers.Add(servicepath, handler); | ||
192 | } | ||
193 | } | ||
194 | |||
195 | public void RemoveWebSocketHandler(string servicepath) | ||
196 | { | ||
197 | lock (m_WebSocketHandlers) | ||
198 | if (m_WebSocketHandlers.ContainsKey(servicepath)) | ||
199 | m_WebSocketHandlers.Remove(servicepath); | ||
200 | } | ||
201 | |||
173 | public List<string> GetStreamHandlerKeys() | 202 | public List<string> GetStreamHandlerKeys() |
174 | { | 203 | { |
175 | lock (m_streamHandlers) | 204 | lock (m_streamHandlers) |
@@ -410,9 +439,24 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
410 | 439 | ||
411 | public void OnHandleRequestIOThread(IHttpClientContext context, IHttpRequest request) | 440 | public void OnHandleRequestIOThread(IHttpClientContext context, IHttpRequest request) |
412 | { | 441 | { |
442 | |||
413 | OSHttpRequest req = new OSHttpRequest(context, request); | 443 | OSHttpRequest req = new OSHttpRequest(context, request); |
444 | WebSocketRequestDelegate dWebSocketRequestDelegate = null; | ||
445 | lock (m_WebSocketHandlers) | ||
446 | { | ||
447 | if (m_WebSocketHandlers.ContainsKey(req.RawUrl)) | ||
448 | dWebSocketRequestDelegate = m_WebSocketHandlers[req.RawUrl]; | ||
449 | } | ||
450 | if (dWebSocketRequestDelegate != null) | ||
451 | { | ||
452 | dWebSocketRequestDelegate(req.Url.AbsolutePath, new WebSocketHttpServerHandler(req, context, 8192)); | ||
453 | return; | ||
454 | } | ||
455 | |||
414 | OSHttpResponse resp = new OSHttpResponse(new HttpResponse(context, request),context); | 456 | OSHttpResponse resp = new OSHttpResponse(new HttpResponse(context, request),context); |
457 | |||
415 | HandleRequest(req, resp); | 458 | HandleRequest(req, resp); |
459 | |||
416 | 460 | ||
417 | // !!!HACK ALERT!!! | 461 | // !!!HACK ALERT!!! |
418 | // There seems to be a bug in the underlying http code that makes subsequent requests | 462 | // There seems to be a bug in the underlying http code that makes subsequent requests |
@@ -501,7 +545,7 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
501 | LogIncomingToStreamHandler(request, requestHandler); | 545 | LogIncomingToStreamHandler(request, requestHandler); |
502 | 546 | ||
503 | response.ContentType = requestHandler.ContentType; // Lets do this defaulting before in case handler has varying content type. | 547 | response.ContentType = requestHandler.ContentType; // Lets do this defaulting before in case handler has varying content type. |
504 | 548 | ||
505 | if (requestHandler is IStreamedRequestHandler) | 549 | if (requestHandler is IStreamedRequestHandler) |
506 | { | 550 | { |
507 | IStreamedRequestHandler streamedRequestHandler = requestHandler as IStreamedRequestHandler; | 551 | IStreamedRequestHandler streamedRequestHandler = requestHandler as IStreamedRequestHandler; |
diff --git a/OpenSim/Framework/Servers/HttpServer/Interfaces/IHttpServer.cs b/OpenSim/Framework/Servers/HttpServer/Interfaces/IHttpServer.cs index 13b5dd3..71ca3ff 100644 --- a/OpenSim/Framework/Servers/HttpServer/Interfaces/IHttpServer.cs +++ b/OpenSim/Framework/Servers/HttpServer/Interfaces/IHttpServer.cs | |||
@@ -98,7 +98,17 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
98 | bool AddXmlRPCHandler(string method, XmlRpcMethod handler, bool keepAlive); | 98 | bool AddXmlRPCHandler(string method, XmlRpcMethod handler, bool keepAlive); |
99 | 99 | ||
100 | bool AddJsonRPCHandler(string method, JsonRPCMethod handler); | 100 | bool AddJsonRPCHandler(string method, JsonRPCMethod handler); |
101 | |||
102 | /// <summary> | ||
103 | /// Websocket HTTP server handlers. | ||
104 | /// </summary> | ||
105 | /// <param name="servicepath"></param> | ||
106 | /// <param name="handler"></param> | ||
107 | void AddWebSocketHandler(string servicepath, BaseHttpServer.WebSocketRequestDelegate handler); | ||
108 | |||
101 | 109 | ||
110 | void RemoveWebSocketHandler(string servicepath); | ||
111 | |||
102 | /// <summary> | 112 | /// <summary> |
103 | /// Gets the XML RPC handler for given method name | 113 | /// Gets the XML RPC handler for given method name |
104 | /// </summary> | 114 | /// </summary> |
diff --git a/OpenSim/Framework/Servers/HttpServer/WebsocketServerHandler.cs b/OpenSim/Framework/Servers/HttpServer/WebsocketServerHandler.cs new file mode 100644 index 0000000..cfb1605 --- /dev/null +++ b/OpenSim/Framework/Servers/HttpServer/WebsocketServerHandler.cs | |||
@@ -0,0 +1,1085 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://opensimulator.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSimulator Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | */ | ||
27 | |||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using System.IO; | ||
31 | using System.Security.Cryptography; | ||
32 | using System.Text; | ||
33 | using HttpServer; | ||
34 | |||
35 | namespace OpenSim.Framework.Servers.HttpServer | ||
36 | { | ||
37 | // Sealed class. If you're going to unseal it, implement IDisposable. | ||
38 | /// <summary> | ||
39 | /// This class implements websockets. It grabs the network context from C#Webserver and utilizes it directly as a tcp streaming service | ||
40 | /// </summary> | ||
41 | public sealed class WebSocketHttpServerHandler : BaseRequestHandler | ||
42 | { | ||
43 | |||
44 | private class WebSocketState | ||
45 | { | ||
46 | public List<byte> ReceivedBytes; | ||
47 | public int ExpectedBytes; | ||
48 | public WebsocketFrameHeader Header; | ||
49 | public bool FrameComplete; | ||
50 | public WebSocketFrame ContinuationFrame; | ||
51 | } | ||
52 | |||
53 | /// <summary> | ||
54 | /// Binary Data will trigger this event | ||
55 | /// </summary> | ||
56 | public event DataDelegate OnData; | ||
57 | |||
58 | /// <summary> | ||
59 | /// Textual Data will trigger this event | ||
60 | /// </summary> | ||
61 | public event TextDelegate OnText; | ||
62 | |||
63 | /// <summary> | ||
64 | /// A ping request form the other side will trigger this event. | ||
65 | /// This class responds to the ping automatically. You shouldn't send a pong. | ||
66 | /// it's informational. | ||
67 | /// </summary> | ||
68 | public event PingDelegate OnPing; | ||
69 | |||
70 | /// <summary> | ||
71 | /// This is a response to a ping you sent. | ||
72 | /// </summary> | ||
73 | public event PongDelegate OnPong; | ||
74 | |||
75 | /// <summary> | ||
76 | /// This is a regular HTTP Request... This may be removed in the future. | ||
77 | /// </summary> | ||
78 | public event RegularHttpRequestDelegate OnRegularHttpRequest; | ||
79 | |||
80 | /// <summary> | ||
81 | /// When the upgrade from a HTTP request to a Websocket is completed, this will be fired | ||
82 | /// </summary> | ||
83 | public event UpgradeCompletedDelegate OnUpgradeCompleted; | ||
84 | |||
85 | /// <summary> | ||
86 | /// If the upgrade failed, this will be fired | ||
87 | /// </summary> | ||
88 | public event UpgradeFailedDelegate OnUpgradeFailed; | ||
89 | |||
90 | /// <summary> | ||
91 | /// When the websocket is closed, this will be fired. | ||
92 | /// </summary> | ||
93 | public event CloseDelegate OnClose; | ||
94 | |||
95 | /// <summary> | ||
96 | /// Set this delegate to allow your module to validate the origin of the | ||
97 | /// Websocket request. Primary line of defense against cross site scripting | ||
98 | /// </summary> | ||
99 | public ValidateHandshake HandshakeValidateMethodOverride = null; | ||
100 | |||
101 | private OSHttpRequest _request; | ||
102 | private HTTPNetworkContext _networkContext; | ||
103 | private IHttpClientContext _clientContext; | ||
104 | |||
105 | private int _pingtime = 0; | ||
106 | private byte[] _buffer; | ||
107 | private int _bufferPosition; | ||
108 | private int _bufferLength; | ||
109 | private bool _closing; | ||
110 | private bool _upgraded; | ||
111 | |||
112 | private const string HandshakeAcceptText = | ||
113 | "HTTP/1.1 101 Switching Protocols\r\n" + | ||
114 | "upgrade: websocket\r\n" + | ||
115 | "Connection: Upgrade\r\n" + | ||
116 | "sec-websocket-accept: {0}\r\n\r\n";// + | ||
117 | //"{1}"; | ||
118 | |||
119 | private const string HandshakeDeclineText = | ||
120 | "HTTP/1.1 {0} {1}\r\n" + | ||
121 | "Connection: close\r\n\r\n"; | ||
122 | |||
123 | /// <summary> | ||
124 | /// Mysterious constant defined in RFC6455 to append to the client provided security key | ||
125 | /// </summary> | ||
126 | private const string WebsocketHandshakeAcceptHashConstant = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"; | ||
127 | |||
128 | public WebSocketHttpServerHandler(OSHttpRequest preq, IHttpClientContext pContext, int bufferlen) | ||
129 | : base(preq.HttpMethod, preq.Url.OriginalString) | ||
130 | { | ||
131 | _request = preq; | ||
132 | _networkContext = pContext.GiveMeTheNetworkStreamIKnowWhatImDoing(); | ||
133 | _clientContext = pContext; | ||
134 | _bufferLength = bufferlen; | ||
135 | _buffer = new byte[_bufferLength]; | ||
136 | } | ||
137 | |||
138 | // Sealed class implments destructor and an internal dispose method. complies with C# unmanaged resource best practices. | ||
139 | ~WebSocketHttpServerHandler() | ||
140 | { | ||
141 | Dispose(); | ||
142 | |||
143 | } | ||
144 | |||
145 | /// <summary> | ||
146 | /// Sets the length of the stream buffer | ||
147 | /// </summary> | ||
148 | /// <param name="pChunk">Byte length.</param> | ||
149 | public void SetChunksize(int pChunk) | ||
150 | { | ||
151 | if (!_upgraded) | ||
152 | { | ||
153 | _buffer = new byte[pChunk]; | ||
154 | } | ||
155 | else | ||
156 | { | ||
157 | throw new InvalidOperationException("You must set the chunksize before the connection is upgraded"); | ||
158 | } | ||
159 | } | ||
160 | |||
161 | /// <summary> | ||
162 | /// This is the famous nagle. | ||
163 | /// </summary> | ||
164 | public bool NoDelay_TCP_Nagle | ||
165 | { | ||
166 | get | ||
167 | { | ||
168 | if (_networkContext != null && _networkContext.Socket != null) | ||
169 | { | ||
170 | return _networkContext.Socket.NoDelay; | ||
171 | } | ||
172 | else | ||
173 | { | ||
174 | throw new InvalidOperationException("The socket has been shutdown"); | ||
175 | } | ||
176 | } | ||
177 | set | ||
178 | { | ||
179 | if (_networkContext != null && _networkContext.Socket != null) | ||
180 | _networkContext.Socket.NoDelay = value; | ||
181 | else | ||
182 | { | ||
183 | throw new InvalidOperationException("The socket has been shutdown"); | ||
184 | } | ||
185 | } | ||
186 | } | ||
187 | |||
188 | /// <summary> | ||
189 | /// This triggers the websocket to start the upgrade process... | ||
190 | /// This is a Generalized Networking 'common sense' helper method. Some people expect to call Start() instead | ||
191 | /// of the more context appropriate HandshakeAndUpgrade() | ||
192 | /// </summary> | ||
193 | public void Start() | ||
194 | { | ||
195 | HandshakeAndUpgrade(); | ||
196 | } | ||
197 | |||
198 | /// <summary> | ||
199 | /// This triggers the websocket start the upgrade process | ||
200 | /// </summary> | ||
201 | public void HandshakeAndUpgrade() | ||
202 | { | ||
203 | string webOrigin = string.Empty; | ||
204 | string websocketKey = string.Empty; | ||
205 | string acceptKey = string.Empty; | ||
206 | string accepthost = string.Empty; | ||
207 | if (!string.IsNullOrEmpty(_request.Headers["origin"])) | ||
208 | webOrigin = _request.Headers["origin"]; | ||
209 | |||
210 | if (!string.IsNullOrEmpty(_request.Headers["sec-websocket-key"])) | ||
211 | websocketKey = _request.Headers["sec-websocket-key"]; | ||
212 | |||
213 | if (!string.IsNullOrEmpty(_request.Headers["host"])) | ||
214 | accepthost = _request.Headers["host"]; | ||
215 | |||
216 | if (string.IsNullOrEmpty(_request.Headers["upgrade"])) | ||
217 | { | ||
218 | FailUpgrade(OSHttpStatusCode.ClientErrorBadRequest, "no upgrade request submitted"); | ||
219 | } | ||
220 | |||
221 | string connectionheader = _request.Headers["upgrade"]; | ||
222 | if (connectionheader.ToLower() != "websocket") | ||
223 | { | ||
224 | FailUpgrade(OSHttpStatusCode.ClientErrorBadRequest, "no connection upgrade request submitted"); | ||
225 | } | ||
226 | |||
227 | // If the object consumer provided a method to validate the origin, we should call it and give the client a success or fail. | ||
228 | // If not.. we should accept any. The assumption here is that there would be no Websocket handlers registered in baseHTTPServer unless | ||
229 | // Something asked for it... | ||
230 | if (HandshakeValidateMethodOverride != null) | ||
231 | { | ||
232 | if (HandshakeValidateMethodOverride(webOrigin, websocketKey, accepthost)) | ||
233 | { | ||
234 | acceptKey = GenerateAcceptKey(websocketKey); | ||
235 | string rawaccept = string.Format(HandshakeAcceptText, acceptKey); | ||
236 | SendUpgradeSuccess(rawaccept); | ||
237 | |||
238 | } | ||
239 | else | ||
240 | { | ||
241 | FailUpgrade(OSHttpStatusCode.ClientErrorForbidden, "Origin Validation Failed"); | ||
242 | } | ||
243 | } | ||
244 | else | ||
245 | { | ||
246 | acceptKey = GenerateAcceptKey(websocketKey); | ||
247 | string rawaccept = string.Format(HandshakeAcceptText, acceptKey); | ||
248 | SendUpgradeSuccess(rawaccept); | ||
249 | } | ||
250 | } | ||
251 | |||
252 | /// <summary> | ||
253 | /// Generates a handshake response key string based on the client's | ||
254 | /// provided key to prove to the client that we're allowing the Websocket | ||
255 | /// upgrade of our own free will and we were not coerced into doing it. | ||
256 | /// </summary> | ||
257 | /// <param name="key">Client provided security key</param> | ||
258 | /// <returns></returns> | ||
259 | private static string GenerateAcceptKey(string key) | ||
260 | { | ||
261 | if (string.IsNullOrEmpty(key)) | ||
262 | return string.Empty; | ||
263 | |||
264 | string acceptkey = key + WebsocketHandshakeAcceptHashConstant; | ||
265 | |||
266 | SHA1 hashobj = SHA1.Create(); | ||
267 | string ret = Convert.ToBase64String(hashobj.ComputeHash(Encoding.UTF8.GetBytes(acceptkey))); | ||
268 | hashobj.Clear(); | ||
269 | |||
270 | return ret; | ||
271 | } | ||
272 | |||
273 | /// <summary> | ||
274 | /// Informs the otherside that we accepted their upgrade request | ||
275 | /// </summary> | ||
276 | /// <param name="pHandshakeResponse">The HTTP 1.1 101 response that says Yay \o/ </param> | ||
277 | private void SendUpgradeSuccess(string pHandshakeResponse) | ||
278 | { | ||
279 | // Create a new websocket state so we can keep track of data in between network reads. | ||
280 | WebSocketState socketState = new WebSocketState() { ReceivedBytes = new List<byte>(), Header = WebsocketFrameHeader.HeaderDefault(), FrameComplete = true}; | ||
281 | |||
282 | byte[] bhandshakeResponse = Encoding.UTF8.GetBytes(pHandshakeResponse); | ||
283 | try | ||
284 | { | ||
285 | |||
286 | // Begin reading the TCP stream before writing the Upgrade success message to the other side of the stream. | ||
287 | _networkContext.Stream.BeginRead(_buffer, 0, _bufferLength, OnReceive, socketState); | ||
288 | |||
289 | // Write the upgrade handshake success message | ||
290 | _networkContext.Stream.Write(bhandshakeResponse, 0, bhandshakeResponse.Length); | ||
291 | _networkContext.Stream.Flush(); | ||
292 | _upgraded = true; | ||
293 | UpgradeCompletedDelegate d = OnUpgradeCompleted; | ||
294 | if (d != null) | ||
295 | d(this, new UpgradeCompletedEventArgs()); | ||
296 | } | ||
297 | catch (IOException fail) | ||
298 | { | ||
299 | Close(string.Empty); | ||
300 | } | ||
301 | catch (ObjectDisposedException fail) | ||
302 | { | ||
303 | Close(string.Empty); | ||
304 | } | ||
305 | |||
306 | } | ||
307 | |||
308 | /// <summary> | ||
309 | /// The server has decided not to allow the upgrade to a websocket for some reason. The Http 1.1 response that says Nay >:( | ||
310 | /// </summary> | ||
311 | /// <param name="pCode">HTTP Status reflecting the reason why</param> | ||
312 | /// <param name="pMessage">Textual reason for the upgrade fail</param> | ||
313 | private void FailUpgrade(OSHttpStatusCode pCode, string pMessage ) | ||
314 | { | ||
315 | string handshakeResponse = string.Format(HandshakeDeclineText, (int)pCode, pMessage.Replace("\n", string.Empty).Replace("\r", string.Empty)); | ||
316 | byte[] bhandshakeResponse = Encoding.UTF8.GetBytes(handshakeResponse); | ||
317 | _networkContext.Stream.Write(bhandshakeResponse, 0, bhandshakeResponse.Length); | ||
318 | _networkContext.Stream.Flush(); | ||
319 | _networkContext.Stream.Dispose(); | ||
320 | |||
321 | UpgradeFailedDelegate d = OnUpgradeFailed; | ||
322 | if (d != null) | ||
323 | d(this,new UpgradeFailedEventArgs()); | ||
324 | } | ||
325 | |||
326 | |||
327 | /// <summary> | ||
328 | /// This is our ugly Async OnReceive event handler. | ||
329 | /// This chunks the input stream based on the length of the provided buffer and processes out | ||
330 | /// as many frames as it can. It then moves the unprocessed data to the beginning of the buffer. | ||
331 | /// </summary> | ||
332 | /// <param name="ar">Our Async State from beginread</param> | ||
333 | private void OnReceive(IAsyncResult ar) | ||
334 | { | ||
335 | WebSocketState _socketState = ar.AsyncState as WebSocketState; | ||
336 | try | ||
337 | { | ||
338 | int bytesRead = _networkContext.Stream.EndRead(ar); | ||
339 | if (bytesRead == 0) | ||
340 | { | ||
341 | // Do Disconnect | ||
342 | _networkContext.Stream.Dispose(); | ||
343 | _networkContext = null; | ||
344 | return; | ||
345 | } | ||
346 | _bufferPosition += bytesRead; | ||
347 | |||
348 | if (_bufferPosition > _bufferLength) | ||
349 | { | ||
350 | // Message too big for chunksize.. not sure how this happened... | ||
351 | //Close(string.Empty); | ||
352 | } | ||
353 | |||
354 | int offset = 0; | ||
355 | bool headerread = true; | ||
356 | int headerforwardposition = 0; | ||
357 | while (headerread && offset < bytesRead) | ||
358 | { | ||
359 | if (_socketState.FrameComplete) | ||
360 | { | ||
361 | WebsocketFrameHeader pheader = WebsocketFrameHeader.ZeroHeader; | ||
362 | |||
363 | headerread = WebSocketReader.TryReadHeader(_buffer, offset, _bufferPosition - offset, out pheader, | ||
364 | out headerforwardposition); | ||
365 | offset += headerforwardposition; | ||
366 | |||
367 | if (headerread) | ||
368 | { | ||
369 | _socketState.FrameComplete = false; | ||
370 | |||
371 | if (pheader.PayloadLen > 0) | ||
372 | { | ||
373 | if ((int) pheader.PayloadLen > _bufferPosition - offset) | ||
374 | { | ||
375 | byte[] writebytes = new byte[_bufferPosition - offset]; | ||
376 | |||
377 | Buffer.BlockCopy(_buffer, offset, writebytes, 0, (int) _bufferPosition - offset); | ||
378 | _socketState.ExpectedBytes = (int) pheader.PayloadLen; | ||
379 | _socketState.ReceivedBytes.AddRange(writebytes); | ||
380 | _socketState.Header = pheader; // We need to add the header so that we can unmask it | ||
381 | offset += (int) _bufferPosition - offset; | ||
382 | } | ||
383 | else | ||
384 | { | ||
385 | byte[] writebytes = new byte[pheader.PayloadLen]; | ||
386 | Buffer.BlockCopy(_buffer, offset, writebytes, 0, (int) pheader.PayloadLen); | ||
387 | WebSocketReader.Mask(pheader.Mask, writebytes); | ||
388 | pheader.IsMasked = false; | ||
389 | _socketState.FrameComplete = true; | ||
390 | _socketState.ReceivedBytes.AddRange(writebytes); | ||
391 | _socketState.Header = pheader; | ||
392 | offset += (int) pheader.PayloadLen; | ||
393 | } | ||
394 | } | ||
395 | else | ||
396 | { | ||
397 | pheader.Mask = 0; | ||
398 | _socketState.FrameComplete = true; | ||
399 | _socketState.Header = pheader; | ||
400 | } | ||
401 | |||
402 | |||
403 | |||
404 | if (_socketState.FrameComplete) | ||
405 | { | ||
406 | ProcessFrame(_socketState); | ||
407 | _socketState.Header.SetDefault(); | ||
408 | _socketState.ReceivedBytes.Clear(); | ||
409 | _socketState.ExpectedBytes = 0; | ||
410 | |||
411 | } | ||
412 | |||
413 | } | ||
414 | } | ||
415 | else | ||
416 | { | ||
417 | WebsocketFrameHeader frameHeader = _socketState.Header; | ||
418 | int bytesleft = _socketState.ExpectedBytes - _socketState.ReceivedBytes.Count; | ||
419 | |||
420 | if (bytesleft > _bufferPosition) | ||
421 | { | ||
422 | byte[] writebytes = new byte[_bufferPosition]; | ||
423 | |||
424 | Buffer.BlockCopy(_buffer, offset, writebytes, 0, (int) _bufferPosition); | ||
425 | _socketState.ReceivedBytes.AddRange(writebytes); | ||
426 | _socketState.Header = frameHeader; // We need to add the header so that we can unmask it | ||
427 | offset += (int) _bufferPosition; | ||
428 | } | ||
429 | else | ||
430 | { | ||
431 | byte[] writebytes = new byte[_bufferPosition]; | ||
432 | Buffer.BlockCopy(_buffer, offset, writebytes, 0, (int) _bufferPosition); | ||
433 | _socketState.FrameComplete = true; | ||
434 | _socketState.ReceivedBytes.AddRange(writebytes); | ||
435 | _socketState.Header = frameHeader; | ||
436 | offset += (int) _bufferPosition; | ||
437 | } | ||
438 | if (_socketState.FrameComplete) | ||
439 | { | ||
440 | ProcessFrame(_socketState); | ||
441 | _socketState.Header.SetDefault(); | ||
442 | _socketState.ReceivedBytes.Clear(); | ||
443 | _socketState.ExpectedBytes = 0; | ||
444 | // do some processing | ||
445 | } | ||
446 | |||
447 | } | ||
448 | } | ||
449 | if (offset > 0) | ||
450 | { | ||
451 | // If the buffer is maxed out.. we can just move the cursor. Nothing to move to the beginning. | ||
452 | if (offset <_buffer.Length) | ||
453 | Buffer.BlockCopy(_buffer, offset, _buffer, 0, _bufferPosition - offset); | ||
454 | _bufferPosition -= offset; | ||
455 | } | ||
456 | if (_networkContext.Stream != null && _networkContext.Stream.CanRead && !_closing) | ||
457 | { | ||
458 | _networkContext.Stream.BeginRead(_buffer, _bufferPosition, _bufferLength - _bufferPosition, OnReceive, | ||
459 | _socketState); | ||
460 | } | ||
461 | else | ||
462 | { | ||
463 | // We can't read the stream anymore... | ||
464 | } | ||
465 | |||
466 | } | ||
467 | catch (IOException fail) | ||
468 | { | ||
469 | Close(string.Empty); | ||
470 | } | ||
471 | catch (ObjectDisposedException fail) | ||
472 | { | ||
473 | Close(string.Empty); | ||
474 | } | ||
475 | } | ||
476 | |||
477 | /// <summary> | ||
478 | /// Sends a string to the other side | ||
479 | /// </summary> | ||
480 | /// <param name="message">the string message that is to be sent</param> | ||
481 | public void SendMessage(string message) | ||
482 | { | ||
483 | byte[] messagedata = Encoding.UTF8.GetBytes(message); | ||
484 | WebSocketFrame textMessageFrame = new WebSocketFrame() { Header = WebsocketFrameHeader.HeaderDefault(), WebSocketPayload = messagedata }; | ||
485 | textMessageFrame.Header.Opcode = WebSocketReader.OpCode.Text; | ||
486 | textMessageFrame.Header.IsEnd = true; | ||
487 | SendSocket(textMessageFrame.ToBytes()); | ||
488 | |||
489 | } | ||
490 | |||
491 | public void SendData(byte[] data) | ||
492 | { | ||
493 | WebSocketFrame dataMessageFrame = new WebSocketFrame() { Header = WebsocketFrameHeader.HeaderDefault(), WebSocketPayload = data}; | ||
494 | dataMessageFrame.Header.IsEnd = true; | ||
495 | dataMessageFrame.Header.Opcode = WebSocketReader.OpCode.Binary; | ||
496 | SendSocket(dataMessageFrame.ToBytes()); | ||
497 | |||
498 | } | ||
499 | |||
500 | /// <summary> | ||
501 | /// Writes raw bytes to the websocket. Unframed data will cause disconnection | ||
502 | /// </summary> | ||
503 | /// <param name="data"></param> | ||
504 | private void SendSocket(byte[] data) | ||
505 | { | ||
506 | if (!_closing) | ||
507 | { | ||
508 | try | ||
509 | { | ||
510 | |||
511 | _networkContext.Stream.Write(data, 0, data.Length); | ||
512 | } | ||
513 | catch (IOException) | ||
514 | { | ||
515 | |||
516 | } | ||
517 | } | ||
518 | } | ||
519 | |||
520 | /// <summary> | ||
521 | /// Sends a Ping check to the other side. The other side SHOULD respond as soon as possible with a pong frame. This interleaves with incoming fragmented frames. | ||
522 | /// </summary> | ||
523 | public void SendPingCheck() | ||
524 | { | ||
525 | WebSocketFrame pingFrame = new WebSocketFrame() { Header = WebsocketFrameHeader.HeaderDefault(), WebSocketPayload = new byte[0] }; | ||
526 | pingFrame.Header.Opcode = WebSocketReader.OpCode.Ping; | ||
527 | pingFrame.Header.IsEnd = true; | ||
528 | _pingtime = Util.EnvironmentTickCount(); | ||
529 | SendSocket(pingFrame.ToBytes()); | ||
530 | } | ||
531 | |||
532 | /// <summary> | ||
533 | /// Closes the websocket connection. Sends a close message to the other side if it hasn't already done so. | ||
534 | /// </summary> | ||
535 | /// <param name="message"></param> | ||
536 | public void Close(string message) | ||
537 | { | ||
538 | if (_networkContext.Stream != null) | ||
539 | { | ||
540 | if (_networkContext.Stream.CanWrite) | ||
541 | { | ||
542 | byte[] messagedata = Encoding.UTF8.GetBytes(message); | ||
543 | WebSocketFrame closeResponseFrame = new WebSocketFrame() | ||
544 | { | ||
545 | Header = WebsocketFrameHeader.HeaderDefault(), | ||
546 | WebSocketPayload = messagedata | ||
547 | }; | ||
548 | closeResponseFrame.Header.Opcode = WebSocketReader.OpCode.Close; | ||
549 | closeResponseFrame.Header.PayloadLen = (ulong) messagedata.Length; | ||
550 | closeResponseFrame.Header.IsEnd = true; | ||
551 | SendSocket(closeResponseFrame.ToBytes()); | ||
552 | } | ||
553 | } | ||
554 | CloseDelegate closeD = OnClose; | ||
555 | if (closeD != null) | ||
556 | { | ||
557 | closeD(this, new CloseEventArgs()); | ||
558 | } | ||
559 | |||
560 | _closing = true; | ||
561 | } | ||
562 | |||
563 | /// <summary> | ||
564 | /// Processes a websocket frame and triggers consumer events | ||
565 | /// </summary> | ||
566 | /// <param name="psocketState">We need to modify the websocket state here depending on the frame</param> | ||
567 | private void ProcessFrame(WebSocketState psocketState) | ||
568 | { | ||
569 | if (psocketState.Header.IsMasked) | ||
570 | { | ||
571 | byte[] unmask = psocketState.ReceivedBytes.ToArray(); | ||
572 | WebSocketReader.Mask(psocketState.Header.Mask, unmask); | ||
573 | psocketState.ReceivedBytes = new List<byte>(unmask); | ||
574 | } | ||
575 | |||
576 | switch (psocketState.Header.Opcode) | ||
577 | { | ||
578 | case WebSocketReader.OpCode.Ping: | ||
579 | PingDelegate pingD = OnPing; | ||
580 | if (pingD != null) | ||
581 | { | ||
582 | pingD(this, new PingEventArgs()); | ||
583 | } | ||
584 | |||
585 | WebSocketFrame pongFrame = new WebSocketFrame(){Header = WebsocketFrameHeader.HeaderDefault(),WebSocketPayload = new byte[0]}; | ||
586 | pongFrame.Header.Opcode = WebSocketReader.OpCode.Pong; | ||
587 | pongFrame.Header.IsEnd = true; | ||
588 | SendSocket(pongFrame.ToBytes()); | ||
589 | break; | ||
590 | case WebSocketReader.OpCode.Pong: | ||
591 | |||
592 | PongDelegate pongD = OnPong; | ||
593 | if (pongD != null) | ||
594 | { | ||
595 | pongD(this, new PongEventArgs(){PingResponseMS = Util.EnvironmentTickCountSubtract(Util.EnvironmentTickCount(),_pingtime)}); | ||
596 | } | ||
597 | break; | ||
598 | case WebSocketReader.OpCode.Binary: | ||
599 | if (!psocketState.Header.IsEnd) // Not done, so we need to store this and wait for the end frame. | ||
600 | { | ||
601 | psocketState.ContinuationFrame = new WebSocketFrame | ||
602 | { | ||
603 | Header = psocketState.Header, | ||
604 | WebSocketPayload = | ||
605 | psocketState.ReceivedBytes.ToArray() | ||
606 | }; | ||
607 | } | ||
608 | else | ||
609 | { | ||
610 | // Send Done Event! | ||
611 | DataDelegate dataD = OnData; | ||
612 | if (dataD != null) | ||
613 | { | ||
614 | dataD(this,new WebsocketDataEventArgs(){Data = psocketState.ReceivedBytes.ToArray()}); | ||
615 | } | ||
616 | } | ||
617 | break; | ||
618 | case WebSocketReader.OpCode.Text: | ||
619 | if (!psocketState.Header.IsEnd) // Not done, so we need to store this and wait for the end frame. | ||
620 | { | ||
621 | psocketState.ContinuationFrame = new WebSocketFrame | ||
622 | { | ||
623 | Header = psocketState.Header, | ||
624 | WebSocketPayload = | ||
625 | psocketState.ReceivedBytes.ToArray() | ||
626 | }; | ||
627 | } | ||
628 | else | ||
629 | { | ||
630 | TextDelegate textD = OnText; | ||
631 | if (textD != null) | ||
632 | { | ||
633 | textD(this, new WebsocketTextEventArgs() { Data = Encoding.UTF8.GetString(psocketState.ReceivedBytes.ToArray()) }); | ||
634 | } | ||
635 | |||
636 | // Send Done Event! | ||
637 | } | ||
638 | break; | ||
639 | case WebSocketReader.OpCode.Continue: // Continuation. Multiple frames worth of data for one message. Only valid when not using Control Opcodes | ||
640 | //Console.WriteLine("currhead " + psocketState.Header.IsEnd); | ||
641 | //Console.WriteLine("Continuation! " + psocketState.ContinuationFrame.Header.IsEnd); | ||
642 | byte[] combineddata = new byte[psocketState.ReceivedBytes.Count+psocketState.ContinuationFrame.WebSocketPayload.Length]; | ||
643 | byte[] newdata = psocketState.ReceivedBytes.ToArray(); | ||
644 | Buffer.BlockCopy(psocketState.ContinuationFrame.WebSocketPayload, 0, combineddata, 0, psocketState.ContinuationFrame.WebSocketPayload.Length); | ||
645 | Buffer.BlockCopy(newdata, 0, combineddata, | ||
646 | psocketState.ContinuationFrame.WebSocketPayload.Length, newdata.Length); | ||
647 | psocketState.ContinuationFrame.WebSocketPayload = combineddata; | ||
648 | psocketState.Header.PayloadLen = (ulong)combineddata.Length; | ||
649 | if (psocketState.Header.IsEnd) | ||
650 | { | ||
651 | if (psocketState.ContinuationFrame.Header.Opcode == WebSocketReader.OpCode.Text) | ||
652 | { | ||
653 | // Send Done event | ||
654 | TextDelegate textD = OnText; | ||
655 | if (textD != null) | ||
656 | { | ||
657 | textD(this, new WebsocketTextEventArgs() { Data = Encoding.UTF8.GetString(combineddata) }); | ||
658 | } | ||
659 | } | ||
660 | else if (psocketState.ContinuationFrame.Header.Opcode == WebSocketReader.OpCode.Binary) | ||
661 | { | ||
662 | // Send Done event | ||
663 | DataDelegate dataD = OnData; | ||
664 | if (dataD != null) | ||
665 | { | ||
666 | dataD(this, new WebsocketDataEventArgs() { Data = combineddata }); | ||
667 | } | ||
668 | } | ||
669 | else | ||
670 | { | ||
671 | // protocol violation | ||
672 | } | ||
673 | psocketState.ContinuationFrame = null; | ||
674 | } | ||
675 | break; | ||
676 | case WebSocketReader.OpCode.Close: | ||
677 | Close(string.Empty); | ||
678 | |||
679 | break; | ||
680 | |||
681 | } | ||
682 | psocketState.Header.SetDefault(); | ||
683 | psocketState.ReceivedBytes.Clear(); | ||
684 | psocketState.ExpectedBytes = 0; | ||
685 | } | ||
686 | public void Dispose() | ||
687 | { | ||
688 | if (_networkContext != null && _networkContext.Stream != null) | ||
689 | { | ||
690 | if (_networkContext.Stream.CanWrite) | ||
691 | _networkContext.Stream.Flush(); | ||
692 | _networkContext.Stream.Close(); | ||
693 | _networkContext.Stream.Dispose(); | ||
694 | _networkContext.Stream = null; | ||
695 | } | ||
696 | |||
697 | if (_request != null && _request.InputStream != null) | ||
698 | { | ||
699 | _request.InputStream.Close(); | ||
700 | _request.InputStream.Dispose(); | ||
701 | _request = null; | ||
702 | } | ||
703 | |||
704 | if (_clientContext != null) | ||
705 | { | ||
706 | _clientContext.Close(); | ||
707 | _clientContext = null; | ||
708 | } | ||
709 | } | ||
710 | } | ||
711 | |||
712 | /// <summary> | ||
713 | /// Reads a byte stream and returns Websocket frames. | ||
714 | /// </summary> | ||
715 | public class WebSocketReader | ||
716 | { | ||
717 | /// <summary> | ||
718 | /// Bit to determine if the frame read on the stream is the last frame in a sequence of fragmented frames | ||
719 | /// </summary> | ||
720 | private const byte EndBit = 0x80; | ||
721 | |||
722 | /// <summary> | ||
723 | /// These are the Frame Opcodes | ||
724 | /// </summary> | ||
725 | public enum OpCode | ||
726 | { | ||
727 | // Data Opcodes | ||
728 | Continue = 0x0, | ||
729 | Text = 0x1, | ||
730 | Binary = 0x2, | ||
731 | |||
732 | // Control flow Opcodes | ||
733 | Close = 0x8, | ||
734 | Ping = 0x9, | ||
735 | Pong = 0xA | ||
736 | } | ||
737 | |||
738 | /// <summary> | ||
739 | /// Masks and Unmasks data using the frame mask. Mask is applied per octal | ||
740 | /// Note: Frames from clients MUST be masked | ||
741 | /// Note: Frames from servers MUST NOT be masked | ||
742 | /// </summary> | ||
743 | /// <param name="pMask">Int representing 32 bytes of mask data. Mask is applied per octal</param> | ||
744 | /// <param name="pBuffer"></param> | ||
745 | public static void Mask(int pMask, byte[] pBuffer) | ||
746 | { | ||
747 | byte[] maskKey = BitConverter.GetBytes(pMask); | ||
748 | int currentMaskIndex = 0; | ||
749 | for (int i = 0; i < pBuffer.Length; i++) | ||
750 | { | ||
751 | pBuffer[i] = (byte)(pBuffer[i] ^ maskKey[currentMaskIndex]); | ||
752 | if (currentMaskIndex == 3) | ||
753 | { | ||
754 | currentMaskIndex = 0; | ||
755 | } | ||
756 | else | ||
757 | { | ||
758 | currentMaskIndex++; | ||
759 | |||
760 | } | ||
761 | |||
762 | } | ||
763 | } | ||
764 | |||
765 | /// <summary> | ||
766 | /// Attempts to read a header off the provided buffer. Returns true, exports a WebSocketFrameheader, | ||
767 | /// and an int to move the buffer forward when it reads a header. False when it can't read a header | ||
768 | /// </summary> | ||
769 | /// <param name="pBuffer">Bytes read from the stream</param> | ||
770 | /// <param name="pOffset">Starting place in the stream to begin trying to read from</param> | ||
771 | /// <param name="length">Lenth in the stream to try and read from. Provided for cases where the | ||
772 | /// buffer's length is larger then the data in it</param> | ||
773 | /// <param name="oHeader">Outputs the read WebSocket frame header</param> | ||
774 | /// <param name="moveBuffer">Informs the calling stream to move the buffer forward</param> | ||
775 | /// <returns>True if it got a header, False if it didn't get a header</returns> | ||
776 | public static bool TryReadHeader(byte[] pBuffer, int pOffset, int length, out WebsocketFrameHeader oHeader, | ||
777 | out int moveBuffer) | ||
778 | { | ||
779 | oHeader = WebsocketFrameHeader.ZeroHeader; | ||
780 | int minumheadersize = 2; | ||
781 | if (length > pBuffer.Length - pOffset) | ||
782 | throw new ArgumentOutOfRangeException("The Length specified was larger the byte array supplied"); | ||
783 | if (length < minumheadersize) | ||
784 | { | ||
785 | moveBuffer = 0; | ||
786 | return false; | ||
787 | } | ||
788 | |||
789 | byte nibble1 = (byte)(pBuffer[pOffset] & 0xF0); //FIN/RSV1/RSV2/RSV3 | ||
790 | byte nibble2 = (byte)(pBuffer[pOffset] & 0x0F); // Opcode block | ||
791 | |||
792 | oHeader = new WebsocketFrameHeader(); | ||
793 | oHeader.SetDefault(); | ||
794 | |||
795 | if ((nibble1 & WebSocketReader.EndBit) == WebSocketReader.EndBit) | ||
796 | { | ||
797 | oHeader.IsEnd = true; | ||
798 | } | ||
799 | else | ||
800 | { | ||
801 | oHeader.IsEnd = false; | ||
802 | } | ||
803 | //Opcode | ||
804 | oHeader.Opcode = (WebSocketReader.OpCode)nibble2; | ||
805 | //Mask | ||
806 | oHeader.IsMasked = Convert.ToBoolean((pBuffer[pOffset + 1] & 0x80) >> 7); | ||
807 | |||
808 | // Payload length | ||
809 | oHeader.PayloadLen = (byte)(pBuffer[pOffset + 1] & 0x7F); | ||
810 | |||
811 | int index = 2; // LargerPayload length starts at byte 3 | ||
812 | |||
813 | switch (oHeader.PayloadLen) | ||
814 | { | ||
815 | case 126: | ||
816 | minumheadersize += 2; | ||
817 | if (length < minumheadersize) | ||
818 | { | ||
819 | moveBuffer = 0; | ||
820 | return false; | ||
821 | } | ||
822 | Array.Reverse(pBuffer, pOffset + index, 2); // two bytes | ||
823 | oHeader.PayloadLen = BitConverter.ToUInt16(pBuffer, pOffset + index); | ||
824 | index += 2; | ||
825 | break; | ||
826 | case 127: // we got more this is a bigger frame | ||
827 | // 8 bytes - uint64 - most significant bit 0 network byte order | ||
828 | minumheadersize += 8; | ||
829 | if (length < minumheadersize) | ||
830 | { | ||
831 | moveBuffer = 0; | ||
832 | return false; | ||
833 | } | ||
834 | Array.Reverse(pBuffer, pOffset + index, 8); | ||
835 | oHeader.PayloadLen = BitConverter.ToUInt64(pBuffer, pOffset + index); | ||
836 | index += 8; | ||
837 | break; | ||
838 | |||
839 | } | ||
840 | //oHeader.PayloadLeft = oHeader.PayloadLen; // Start the count in case it's chunked over the network. This is different then frame fragmentation | ||
841 | if (oHeader.IsMasked) | ||
842 | { | ||
843 | minumheadersize += 4; | ||
844 | if (length < minumheadersize) | ||
845 | { | ||
846 | moveBuffer = 0; | ||
847 | return false; | ||
848 | } | ||
849 | oHeader.Mask = BitConverter.ToInt32(pBuffer, pOffset + index); | ||
850 | index += 4; | ||
851 | } | ||
852 | moveBuffer = index; | ||
853 | return true; | ||
854 | |||
855 | } | ||
856 | } | ||
857 | |||
858 | /// <summary> | ||
859 | /// RFC6455 Websocket Frame | ||
860 | /// </summary> | ||
861 | public class WebSocketFrame | ||
862 | { | ||
863 | /* | ||
864 | * RFC6455 | ||
865 | nib 0 1 2 3 4 5 6 7 | ||
866 | byt 0 1 2 3 | ||
867 | dec 0 1 2 3 | ||
868 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | ||
869 | +-+-+-+-+-------+-+-------------+-------------------------------+ | ||
870 | |F|R|R|R| opcode|M| Payload len | Extended payload length | | ||
871 | |I|S|S|S| (4) |A| (7) | (16/64) + | ||
872 | |N|V|V|V| |S| | (if payload len==126/127) | | ||
873 | | |1|2|3| |K| | + | ||
874 | +-+-+-+-+-------+-+-------------+ - - - - - - - - - - - - - - - + | ||
875 | | Extended payload length continued, if payload len == 127 | | ||
876 | + - - - - - - - - - - - - - - - +-------------------------------+ | ||
877 | | |Masking-key, if MASK set to 1 | | ||
878 | +-------------------------------+-------------------------------+ | ||
879 | | Masking-key (continued) | Payload Data | | ||
880 | +-------------------------------- - - - - - - - - - - - - - - - + | ||
881 | : Payload Data continued ... : | ||
882 | + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + | ||
883 | | Payload Data continued ... | | ||
884 | +---------------------------------------------------------------+ | ||
885 | |||
886 | * When reading these, the frames are possibly fragmented and interleaved with control frames | ||
887 | * the fragmented frames are not interleaved with data frames. Just control frames | ||
888 | */ | ||
889 | public static readonly WebSocketFrame DefaultFrame = new WebSocketFrame(){Header = new WebsocketFrameHeader(),WebSocketPayload = new byte[0]}; | ||
890 | public WebsocketFrameHeader Header; | ||
891 | public byte[] WebSocketPayload; | ||
892 | |||
893 | public byte[] ToBytes() | ||
894 | { | ||
895 | Header.PayloadLen = (ulong)WebSocketPayload.Length; | ||
896 | return Header.ToBytes(WebSocketPayload); | ||
897 | } | ||
898 | |||
899 | } | ||
900 | |||
901 | public struct WebsocketFrameHeader | ||
902 | { | ||
903 | //public byte CurrentMaskIndex; | ||
904 | /// <summary> | ||
905 | /// The last frame in a sequence of fragmented frames or the one and only frame for this message. | ||
906 | /// </summary> | ||
907 | public bool IsEnd; | ||
908 | |||
909 | /// <summary> | ||
910 | /// Returns whether the payload data is masked or not. Data from Clients MUST be masked, Data from Servers MUST NOT be masked | ||
911 | /// </summary> | ||
912 | public bool IsMasked; | ||
913 | |||
914 | /// <summary> | ||
915 | /// A set of cryptologically sound random bytes XoR-ed against the payload octally. Looped | ||
916 | /// </summary> | ||
917 | public int Mask; | ||
918 | /* | ||
919 | byt 0 1 2 3 | ||
920 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | ||
921 | +---------------+---------------+---------------+---------------+ | ||
922 | | Octal 1 | Octal 2 | Octal 3 | Octal 4 | | ||
923 | +---------------+---------------+---------------+---------------+ | ||
924 | */ | ||
925 | |||
926 | |||
927 | public WebSocketReader.OpCode Opcode; | ||
928 | |||
929 | public UInt64 PayloadLen; | ||
930 | //public UInt64 PayloadLeft; | ||
931 | // Payload is X + Y | ||
932 | //public UInt64 ExtensionDataLength; | ||
933 | //public UInt64 ApplicationDataLength; | ||
934 | public static readonly WebsocketFrameHeader ZeroHeader = WebsocketFrameHeader.HeaderDefault(); | ||
935 | |||
936 | public void SetDefault() | ||
937 | { | ||
938 | |||
939 | //CurrentMaskIndex = 0; | ||
940 | IsEnd = true; | ||
941 | IsMasked = true; | ||
942 | Mask = 0; | ||
943 | Opcode = WebSocketReader.OpCode.Close; | ||
944 | // PayloadLeft = 0; | ||
945 | PayloadLen = 0; | ||
946 | // ExtensionDataLength = 0; | ||
947 | // ApplicationDataLength = 0; | ||
948 | |||
949 | } | ||
950 | |||
951 | /// <summary> | ||
952 | /// Returns a byte array representing the Frame header | ||
953 | /// </summary> | ||
954 | /// <param name="payload">This is the frame data payload. The header describes the size of the payload. | ||
955 | /// If payload is null, a Zero sized payload is assumed</param> | ||
956 | /// <returns>Returns a byte array representing the frame header</returns> | ||
957 | public byte[] ToBytes(byte[] payload) | ||
958 | { | ||
959 | List<byte> result = new List<byte>(); | ||
960 | |||
961 | // Squeeze in our opcode and our ending bit. | ||
962 | result.Add((byte)((byte)Opcode | (IsEnd?0x80:0x00) )); | ||
963 | |||
964 | // Again with the three different byte interpretations of size.. | ||
965 | |||
966 | //bytesize | ||
967 | if (PayloadLen <= 125) | ||
968 | { | ||
969 | result.Add((byte) PayloadLen); | ||
970 | } //Uint16 | ||
971 | else if (PayloadLen <= ushort.MaxValue) | ||
972 | { | ||
973 | result.Add(126); | ||
974 | byte[] payloadLengthByte = BitConverter.GetBytes(Convert.ToUInt16(PayloadLen)); | ||
975 | Array.Reverse(payloadLengthByte); | ||
976 | result.AddRange(payloadLengthByte); | ||
977 | } //UInt64 | ||
978 | else | ||
979 | { | ||
980 | result.Add(127); | ||
981 | byte[] payloadLengthByte = BitConverter.GetBytes(PayloadLen); | ||
982 | Array.Reverse(payloadLengthByte); | ||
983 | result.AddRange(payloadLengthByte); | ||
984 | } | ||
985 | |||
986 | // Only add a payload if it's not null | ||
987 | if (payload != null) | ||
988 | { | ||
989 | result.AddRange(payload); | ||
990 | } | ||
991 | return result.ToArray(); | ||
992 | } | ||
993 | |||
994 | /// <summary> | ||
995 | /// A Helper method to define the defaults | ||
996 | /// </summary> | ||
997 | /// <returns></returns> | ||
998 | |||
999 | public static WebsocketFrameHeader HeaderDefault() | ||
1000 | { | ||
1001 | return new WebsocketFrameHeader | ||
1002 | { | ||
1003 | //CurrentMaskIndex = 0, | ||
1004 | IsEnd = false, | ||
1005 | IsMasked = true, | ||
1006 | Mask = 0, | ||
1007 | Opcode = WebSocketReader.OpCode.Close, | ||
1008 | //PayloadLeft = 0, | ||
1009 | PayloadLen = 0, | ||
1010 | // ExtensionDataLength = 0, | ||
1011 | // ApplicationDataLength = 0 | ||
1012 | }; | ||
1013 | } | ||
1014 | } | ||
1015 | |||
1016 | public delegate void DataDelegate(object sender, WebsocketDataEventArgs data); | ||
1017 | |||
1018 | public delegate void TextDelegate(object sender, WebsocketTextEventArgs text); | ||
1019 | |||
1020 | public delegate void PingDelegate(object sender, PingEventArgs pingdata); | ||
1021 | |||
1022 | public delegate void PongDelegate(object sender, PongEventArgs pongdata); | ||
1023 | |||
1024 | public delegate void RegularHttpRequestDelegate(object sender, RegularHttpRequestEvnetArgs request); | ||
1025 | |||
1026 | public delegate void UpgradeCompletedDelegate(object sender, UpgradeCompletedEventArgs completeddata); | ||
1027 | |||
1028 | public delegate void UpgradeFailedDelegate(object sender, UpgradeFailedEventArgs faileddata); | ||
1029 | |||
1030 | public delegate void CloseDelegate(object sender, CloseEventArgs closedata); | ||
1031 | |||
1032 | public delegate bool ValidateHandshake(string pWebOrigin, string pWebSocketKey, string pHost); | ||
1033 | |||
1034 | |||
1035 | public class WebsocketDataEventArgs : EventArgs | ||
1036 | { | ||
1037 | public byte[] Data; | ||
1038 | } | ||
1039 | |||
1040 | public class WebsocketTextEventArgs : EventArgs | ||
1041 | { | ||
1042 | public string Data; | ||
1043 | } | ||
1044 | |||
1045 | public class PingEventArgs : EventArgs | ||
1046 | { | ||
1047 | /// <summary> | ||
1048 | /// The ping event can arbitrarily contain data | ||
1049 | /// </summary> | ||
1050 | public byte[] Data; | ||
1051 | } | ||
1052 | |||
1053 | public class PongEventArgs : EventArgs | ||
1054 | { | ||
1055 | /// <summary> | ||
1056 | /// The pong event can arbitrarily contain data | ||
1057 | /// </summary> | ||
1058 | public byte[] Data; | ||
1059 | |||
1060 | public int PingResponseMS; | ||
1061 | |||
1062 | } | ||
1063 | |||
1064 | public class RegularHttpRequestEvnetArgs : EventArgs | ||
1065 | { | ||
1066 | |||
1067 | } | ||
1068 | |||
1069 | public class UpgradeCompletedEventArgs : EventArgs | ||
1070 | { | ||
1071 | |||
1072 | } | ||
1073 | |||
1074 | public class UpgradeFailedEventArgs : EventArgs | ||
1075 | { | ||
1076 | |||
1077 | } | ||
1078 | |||
1079 | public class CloseEventArgs : EventArgs | ||
1080 | { | ||
1081 | |||
1082 | } | ||
1083 | |||
1084 | |||
1085 | } | ||
diff --git a/OpenSim/Framework/Servers/Tests/OSHttpTests.cs b/OpenSim/Framework/Servers/Tests/OSHttpTests.cs index 50f306e..deae45c 100644 --- a/OpenSim/Framework/Servers/Tests/OSHttpTests.cs +++ b/OpenSim/Framework/Servers/Tests/OSHttpTests.cs | |||
@@ -70,6 +70,11 @@ namespace OpenSim.Framework.Servers.Tests | |||
70 | public void Close() { } | 70 | public void Close() { } |
71 | public bool EndWhenDone { get { return false;} set { return;}} | 71 | public bool EndWhenDone { get { return false;} set { return;}} |
72 | 72 | ||
73 | public HTTPNetworkContext GiveMeTheNetworkStreamIKnowWhatImDoing() | ||
74 | { | ||
75 | return new HTTPNetworkContext(); | ||
76 | } | ||
77 | |||
73 | public event EventHandler<DisconnectedEventArgs> Disconnected = delegate { }; | 78 | public event EventHandler<DisconnectedEventArgs> Disconnected = delegate { }; |
74 | /// <summary> | 79 | /// <summary> |
75 | /// A request have been received in the context. | 80 | /// A request have been received in the context. |
diff --git a/OpenSim/Region/OptionalModules/Example/WebSocketEchoTest/WebSocketEchoModule.cs b/OpenSim/Region/OptionalModules/Example/WebSocketEchoTest/WebSocketEchoModule.cs new file mode 100644 index 0000000..112ba4e --- /dev/null +++ b/OpenSim/Region/OptionalModules/Example/WebSocketEchoTest/WebSocketEchoModule.cs | |||
@@ -0,0 +1,174 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://opensimulator.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSimulator Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | */ | ||
27 | |||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using System.Reflection; | ||
31 | using OpenSim.Framework.Servers; | ||
32 | using Mono.Addins; | ||
33 | using log4net; | ||
34 | using Nini.Config; | ||
35 | using OpenSim.Region.Framework.Interfaces; | ||
36 | using OpenSim.Region.Framework.Scenes; | ||
37 | |||
38 | using OpenSim.Framework.Servers.HttpServer; | ||
39 | |||
40 | |||
41 | namespace OpenSim.Region.OptionalModules.WebSocketEchoModule | ||
42 | { | ||
43 | |||
44 | [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "WebSocketEchoModule")] | ||
45 | public class WebSocketEchoModule : ISharedRegionModule | ||
46 | { | ||
47 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | ||
48 | private bool enabled; | ||
49 | public string Name { get { return "WebSocketEchoModule"; } } | ||
50 | |||
51 | public Type ReplaceableInterface { get { return null; } } | ||
52 | |||
53 | |||
54 | private HashSet<WebSocketHttpServerHandler> _activeHandlers = new HashSet<WebSocketHttpServerHandler>(); | ||
55 | |||
56 | public void Initialise(IConfigSource pConfig) | ||
57 | { | ||
58 | enabled =(pConfig.Configs["WebSocketEcho"] != null); | ||
59 | if (enabled) | ||
60 | m_log.DebugFormat("[WebSocketEchoModule]: INITIALIZED MODULE"); | ||
61 | } | ||
62 | |||
63 | /// <summary> | ||
64 | /// This method sets up the callback to WebSocketHandlerCallback below when a HTTPRequest comes in for /echo | ||
65 | /// </summary> | ||
66 | public void PostInitialise() | ||
67 | { | ||
68 | if (enabled) | ||
69 | MainServer.Instance.AddWebSocketHandler("/echo", WebSocketHandlerCallback); | ||
70 | } | ||
71 | |||
72 | // This gets called by BaseHttpServer and gives us an opportunity to set things on the WebSocket handler before we turn it on | ||
73 | public void WebSocketHandlerCallback(string path, WebSocketHttpServerHandler handler) | ||
74 | { | ||
75 | SubscribeToEvents(handler); | ||
76 | handler.SetChunksize(8192); | ||
77 | handler.NoDelay_TCP_Nagle = true; | ||
78 | handler.HandshakeAndUpgrade(); | ||
79 | } | ||
80 | |||
81 | //These are our normal events | ||
82 | public void SubscribeToEvents(WebSocketHttpServerHandler handler) | ||
83 | { | ||
84 | handler.OnClose += HandlerOnOnClose; | ||
85 | handler.OnText += HandlerOnOnText; | ||
86 | handler.OnUpgradeCompleted += HandlerOnOnUpgradeCompleted; | ||
87 | handler.OnData += HandlerOnOnData; | ||
88 | handler.OnPong += HandlerOnOnPong; | ||
89 | } | ||
90 | |||
91 | public void UnSubscribeToEvents(WebSocketHttpServerHandler handler) | ||
92 | { | ||
93 | handler.OnClose -= HandlerOnOnClose; | ||
94 | handler.OnText -= HandlerOnOnText; | ||
95 | handler.OnUpgradeCompleted -= HandlerOnOnUpgradeCompleted; | ||
96 | handler.OnData -= HandlerOnOnData; | ||
97 | handler.OnPong -= HandlerOnOnPong; | ||
98 | } | ||
99 | |||
100 | private void HandlerOnOnPong(object sender, PongEventArgs pongdata) | ||
101 | { | ||
102 | m_log.Info("[WebSocketEchoModule]: Got a pong.. ping time: " + pongdata.PingResponseMS); | ||
103 | } | ||
104 | |||
105 | private void HandlerOnOnData(object sender, WebsocketDataEventArgs data) | ||
106 | { | ||
107 | WebSocketHttpServerHandler obj = sender as WebSocketHttpServerHandler; | ||
108 | obj.SendData(data.Data); | ||
109 | m_log.Info("[WebSocketEchoModule]: We received a bunch of ugly non-printable bytes"); | ||
110 | obj.SendPingCheck(); | ||
111 | } | ||
112 | |||
113 | |||
114 | private void HandlerOnOnUpgradeCompleted(object sender, UpgradeCompletedEventArgs completeddata) | ||
115 | { | ||
116 | WebSocketHttpServerHandler obj = sender as WebSocketHttpServerHandler; | ||
117 | _activeHandlers.Add(obj); | ||
118 | } | ||
119 | |||
120 | private void HandlerOnOnText(object sender, WebsocketTextEventArgs text) | ||
121 | { | ||
122 | WebSocketHttpServerHandler obj = sender as WebSocketHttpServerHandler; | ||
123 | obj.SendMessage(text.Data); | ||
124 | m_log.Info("[WebSocketEchoModule]: We received this: " + text.Data); | ||
125 | } | ||
126 | |||
127 | // Remove the references to our handler | ||
128 | private void HandlerOnOnClose(object sender, CloseEventArgs closedata) | ||
129 | { | ||
130 | WebSocketHttpServerHandler obj = sender as WebSocketHttpServerHandler; | ||
131 | UnSubscribeToEvents(obj); | ||
132 | |||
133 | lock (_activeHandlers) | ||
134 | _activeHandlers.Remove(obj); | ||
135 | obj.Dispose(); | ||
136 | } | ||
137 | |||
138 | // Shutting down.. so shut down all sockets. | ||
139 | // Note.. this should be done outside of an ienumerable if you're also hook to the close event. | ||
140 | public void Close() | ||
141 | { | ||
142 | if (!enabled) | ||
143 | return; | ||
144 | |||
145 | // We convert this to a for loop so we're not in in an IEnumerable when the close | ||
146 | //call triggers an event which then removes item from _activeHandlers that we're enumerating | ||
147 | WebSocketHttpServerHandler[] items = new WebSocketHttpServerHandler[_activeHandlers.Count]; | ||
148 | _activeHandlers.CopyTo(items); | ||
149 | |||
150 | for (int i = 0; i < items.Length; i++) | ||
151 | { | ||
152 | items[i].Close(string.Empty); | ||
153 | items[i].Dispose(); | ||
154 | } | ||
155 | _activeHandlers.Clear(); | ||
156 | MainServer.Instance.RemoveWebSocketHandler("/echo"); | ||
157 | } | ||
158 | |||
159 | public void AddRegion(Scene scene) | ||
160 | { | ||
161 | m_log.DebugFormat("[WebSocketEchoModule]: REGION {0} ADDED", scene.RegionInfo.RegionName); | ||
162 | } | ||
163 | |||
164 | public void RemoveRegion(Scene scene) | ||
165 | { | ||
166 | m_log.DebugFormat("[WebSocketEchoModule]: REGION {0} REMOVED", scene.RegionInfo.RegionName); | ||
167 | } | ||
168 | |||
169 | public void RegionLoaded(Scene scene) | ||
170 | { | ||
171 | m_log.DebugFormat("[WebSocketEchoModule]: REGION {0} LOADED", scene.RegionInfo.RegionName); | ||
172 | } | ||
173 | } | ||
174 | } \ No newline at end of file | ||
diff --git a/OpenSim/Region/OptionalModules/PhysicsParameters/PhysicsParameters.cs b/OpenSim/Region/OptionalModules/PhysicsParameters/PhysicsParameters.cs index 40f7fbc..3083a33 100755 --- a/OpenSim/Region/OptionalModules/PhysicsParameters/PhysicsParameters.cs +++ b/OpenSim/Region/OptionalModules/PhysicsParameters/PhysicsParameters.cs | |||
@@ -146,7 +146,7 @@ namespace OpenSim.Region.OptionalModules.PhysicsParameters | |||
146 | { | 146 | { |
147 | foreach (PhysParameterEntry ppe in physScene.GetParameterList()) | 147 | foreach (PhysParameterEntry ppe in physScene.GetParameterList()) |
148 | { | 148 | { |
149 | float val = 0.0f; | 149 | string val = string.Empty; |
150 | if (physScene.GetPhysicsParameter(ppe.name, out val)) | 150 | if (physScene.GetPhysicsParameter(ppe.name, out val)) |
151 | { | 151 | { |
152 | WriteOut(" {0}/{1} = {2}", scene.RegionInfo.RegionName, ppe.name, val); | 152 | WriteOut(" {0}/{1} = {2}", scene.RegionInfo.RegionName, ppe.name, val); |
@@ -159,7 +159,7 @@ namespace OpenSim.Region.OptionalModules.PhysicsParameters | |||
159 | } | 159 | } |
160 | else | 160 | else |
161 | { | 161 | { |
162 | float val = 0.0f; | 162 | string val = string.Empty; |
163 | if (physScene.GetPhysicsParameter(parm, out val)) | 163 | if (physScene.GetPhysicsParameter(parm, out val)) |
164 | { | 164 | { |
165 | WriteOut(" {0}/{1} = {2}", scene.RegionInfo.RegionName, parm, val); | 165 | WriteOut(" {0}/{1} = {2}", scene.RegionInfo.RegionName, parm, val); |
@@ -185,21 +185,12 @@ namespace OpenSim.Region.OptionalModules.PhysicsParameters | |||
185 | return; | 185 | return; |
186 | } | 186 | } |
187 | string parm = "xxx"; | 187 | string parm = "xxx"; |
188 | float val = 0f; | 188 | string valparm = String.Empty; |
189 | uint localID = (uint)PhysParameterEntry.APPLY_TO_NONE; // set default value | 189 | uint localID = (uint)PhysParameterEntry.APPLY_TO_NONE; // set default value |
190 | try | 190 | try |
191 | { | 191 | { |
192 | parm = cmdparms[2]; | 192 | parm = cmdparms[2]; |
193 | string valparm = cmdparms[3].ToLower(); | 193 | valparm = cmdparms[3].ToLower(); |
194 | if (valparm == "true") | ||
195 | val = PhysParameterEntry.NUMERIC_TRUE; | ||
196 | else | ||
197 | { | ||
198 | if (valparm == "false") | ||
199 | val = PhysParameterEntry.NUMERIC_FALSE; | ||
200 | else | ||
201 | val = float.Parse(valparm, Culture.NumberFormatInfo); | ||
202 | } | ||
203 | if (cmdparms.Length > 4) | 194 | if (cmdparms.Length > 4) |
204 | { | 195 | { |
205 | if (cmdparms[4].ToLower() == "all") | 196 | if (cmdparms[4].ToLower() == "all") |
@@ -224,7 +215,7 @@ namespace OpenSim.Region.OptionalModules.PhysicsParameters | |||
224 | IPhysicsParameters physScene = scene.PhysicsScene as IPhysicsParameters; | 215 | IPhysicsParameters physScene = scene.PhysicsScene as IPhysicsParameters; |
225 | if (physScene != null) | 216 | if (physScene != null) |
226 | { | 217 | { |
227 | if (!physScene.SetPhysicsParameter(parm, val, localID)) | 218 | if (!physScene.SetPhysicsParameter(parm, valparm, localID)) |
228 | { | 219 | { |
229 | WriteError("Failed set of parameter '{0}' for region '{1}'", parm, scene.RegionInfo.RegionName); | 220 | WriteError("Failed set of parameter '{0}' for region '{1}'", parm, scene.RegionInfo.RegionName); |
230 | } | 221 | } |
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSParam.cs b/OpenSim/Region/Physics/BulletSPlugin/BSParam.cs index 965c382..601c78c 100755 --- a/OpenSim/Region/Physics/BulletSPlugin/BSParam.cs +++ b/OpenSim/Region/Physics/BulletSPlugin/BSParam.cs | |||
@@ -641,24 +641,6 @@ public static class BSParam | |||
641 | return (b == ConfigurationParameters.numericTrue ? true : false); | 641 | return (b == ConfigurationParameters.numericTrue ? true : false); |
642 | } | 642 | } |
643 | 643 | ||
644 | private static void ResetBroadphasePoolTainted(BSScene pPhysScene, float v) | ||
645 | { | ||
646 | BSScene physScene = pPhysScene; | ||
647 | physScene.TaintedObject("BSParam.ResetBroadphasePoolTainted", delegate() | ||
648 | { | ||
649 | physScene.PE.ResetBroadphasePool(physScene.World); | ||
650 | }); | ||
651 | } | ||
652 | |||
653 | private static void ResetConstraintSolverTainted(BSScene pPhysScene, float v) | ||
654 | { | ||
655 | BSScene physScene = pPhysScene; | ||
656 | physScene.TaintedObject("BSParam.ResetConstraintSolver", delegate() | ||
657 | { | ||
658 | physScene.PE.ResetConstraintSolver(physScene.World); | ||
659 | }); | ||
660 | } | ||
661 | |||
662 | // Search through the parameter definitions and return the matching | 644 | // Search through the parameter definitions and return the matching |
663 | // ParameterDefn structure. | 645 | // ParameterDefn structure. |
664 | // Case does not matter as names are compared after converting to lower case. | 646 | // Case does not matter as names are compared after converting to lower case. |
@@ -722,6 +704,22 @@ public static class BSParam | |||
722 | } | 704 | } |
723 | } | 705 | } |
724 | 706 | ||
707 | private static void ResetBroadphasePoolTainted(BSScene pPhysScene, float v) | ||
708 | { | ||
709 | BSScene physScene = pPhysScene; | ||
710 | physScene.TaintedObject("BSParam.ResetBroadphasePoolTainted", delegate() | ||
711 | { | ||
712 | physScene.PE.ResetBroadphasePool(physScene.World); | ||
713 | }); | ||
714 | } | ||
725 | 715 | ||
716 | private static void ResetConstraintSolverTainted(BSScene pPhysScene, float v) | ||
717 | { | ||
718 | BSScene physScene = pPhysScene; | ||
719 | physScene.TaintedObject("BSParam.ResetConstraintSolver", delegate() | ||
720 | { | ||
721 | physScene.PE.ResetConstraintSolver(physScene.World); | ||
722 | }); | ||
723 | } | ||
726 | } | 724 | } |
727 | } | 725 | } |
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs b/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs index 6cd72f2..f8a0c1e 100644 --- a/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs +++ b/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs | |||
@@ -876,14 +876,39 @@ public sealed class BSScene : PhysicsScene, IPhysicsParameters | |||
876 | // will use the next time since it's pinned and shared memory. | 876 | // will use the next time since it's pinned and shared memory. |
877 | // Some of the values require calling into the physics engine to get the new | 877 | // Some of the values require calling into the physics engine to get the new |
878 | // value activated ('terrainFriction' for instance). | 878 | // value activated ('terrainFriction' for instance). |
879 | public bool SetPhysicsParameter(string parm, float val, uint localID) | 879 | public bool SetPhysicsParameter(string parm, string val, uint localID) |
880 | { | 880 | { |
881 | bool ret = false; | 881 | bool ret = false; |
882 | |||
883 | float valf = 0f; | ||
884 | if (val.ToLower() == "true") | ||
885 | { | ||
886 | valf = PhysParameterEntry.NUMERIC_TRUE; | ||
887 | } | ||
888 | else | ||
889 | { | ||
890 | if (val.ToLower() == "false") | ||
891 | { | ||
892 | valf = PhysParameterEntry.NUMERIC_FALSE; | ||
893 | } | ||
894 | else | ||
895 | { | ||
896 | try | ||
897 | { | ||
898 | valf = float.Parse(val); | ||
899 | } | ||
900 | catch | ||
901 | { | ||
902 | valf = 0f; | ||
903 | } | ||
904 | } | ||
905 | } | ||
906 | |||
882 | BSParam.ParameterDefn theParam; | 907 | BSParam.ParameterDefn theParam; |
883 | if (BSParam.TryGetParameter(parm, out theParam)) | 908 | if (BSParam.TryGetParameter(parm, out theParam)) |
884 | { | 909 | { |
885 | // Set the value in the C# code | 910 | // Set the value in the C# code |
886 | theParam.setter(this, parm, localID, val); | 911 | theParam.setter(this, parm, localID, valf); |
887 | 912 | ||
888 | // Optionally set the parameter in the unmanaged code | 913 | // Optionally set the parameter in the unmanaged code |
889 | if (theParam.onObject != null) | 914 | if (theParam.onObject != null) |
@@ -898,16 +923,16 @@ public sealed class BSScene : PhysicsScene, IPhysicsParameters | |||
898 | case PhysParameterEntry.APPLY_TO_NONE: | 923 | case PhysParameterEntry.APPLY_TO_NONE: |
899 | // This will cause a call into the physical world if some operation is specified (SetOnObject). | 924 | // This will cause a call into the physical world if some operation is specified (SetOnObject). |
900 | objectIDs.Add(TERRAIN_ID); | 925 | objectIDs.Add(TERRAIN_ID); |
901 | TaintedUpdateParameter(parm, objectIDs, val); | 926 | TaintedUpdateParameter(parm, objectIDs, valf); |
902 | break; | 927 | break; |
903 | case PhysParameterEntry.APPLY_TO_ALL: | 928 | case PhysParameterEntry.APPLY_TO_ALL: |
904 | lock (PhysObjects) objectIDs = new List<uint>(PhysObjects.Keys); | 929 | lock (PhysObjects) objectIDs = new List<uint>(PhysObjects.Keys); |
905 | TaintedUpdateParameter(parm, objectIDs, val); | 930 | TaintedUpdateParameter(parm, objectIDs, valf); |
906 | break; | 931 | break; |
907 | default: | 932 | default: |
908 | // setting only one localID | 933 | // setting only one localID |
909 | objectIDs.Add(localID); | 934 | objectIDs.Add(localID); |
910 | TaintedUpdateParameter(parm, objectIDs, val); | 935 | TaintedUpdateParameter(parm, objectIDs, valf); |
911 | break; | 936 | break; |
912 | } | 937 | } |
913 | } | 938 | } |
@@ -942,14 +967,14 @@ public sealed class BSScene : PhysicsScene, IPhysicsParameters | |||
942 | 967 | ||
943 | // Get parameter. | 968 | // Get parameter. |
944 | // Return 'false' if not able to get the parameter. | 969 | // Return 'false' if not able to get the parameter. |
945 | public bool GetPhysicsParameter(string parm, out float value) | 970 | public bool GetPhysicsParameter(string parm, out string value) |
946 | { | 971 | { |
947 | float val = 0f; | 972 | string val = String.Empty; |
948 | bool ret = false; | 973 | bool ret = false; |
949 | BSParam.ParameterDefn theParam; | 974 | BSParam.ParameterDefn theParam; |
950 | if (BSParam.TryGetParameter(parm, out theParam)) | 975 | if (BSParam.TryGetParameter(parm, out theParam)) |
951 | { | 976 | { |
952 | val = theParam.getter(this); | 977 | val = theParam.getter(this).ToString(); |
953 | ret = true; | 978 | ret = true; |
954 | } | 979 | } |
955 | value = val; | 980 | value = val; |
diff --git a/OpenSim/Region/Physics/Manager/IPhysicsParameters.cs b/OpenSim/Region/Physics/Manager/IPhysicsParameters.cs index b8676ba..31a397c 100755 --- a/OpenSim/Region/Physics/Manager/IPhysicsParameters.cs +++ b/OpenSim/Region/Physics/Manager/IPhysicsParameters.cs | |||
@@ -60,14 +60,14 @@ namespace OpenSim.Region.Physics.Manager | |||
60 | 60 | ||
61 | // Set parameter on a specific or all instances. | 61 | // Set parameter on a specific or all instances. |
62 | // Return 'false' if not able to set the parameter. | 62 | // Return 'false' if not able to set the parameter. |
63 | bool SetPhysicsParameter(string parm, float value, uint localID); | 63 | bool SetPhysicsParameter(string parm, string value, uint localID); |
64 | 64 | ||
65 | // Get parameter. | 65 | // Get parameter. |
66 | // Return 'false' if not able to get the parameter. | 66 | // Return 'false' if not able to get the parameter. |
67 | bool GetPhysicsParameter(string parm, out float value); | 67 | bool GetPhysicsParameter(string parm, out string value); |
68 | 68 | ||
69 | // Get parameter from a particular object | 69 | // Get parameter from a particular object |
70 | // TODO: | 70 | // TODO: |
71 | // bool GetPhysicsParameter(string parm, out float value, uint localID); | 71 | // bool GetPhysicsParameter(string parm, out string value, uint localID); |
72 | } | 72 | } |
73 | } | 73 | } |
diff --git a/bin/HttpServer_OpenSim.pdb b/bin/HttpServer_OpenSim.pdb index b9161e1..f56e891 100644 --- a/bin/HttpServer_OpenSim.pdb +++ b/bin/HttpServer_OpenSim.pdb | |||
Binary files differ | |||
diff --git a/bin/HttpServer_OpenSim.xml b/bin/HttpServer_OpenSim.xml index d31bcca..fa88fc7 100644 --- a/bin/HttpServer_OpenSim.xml +++ b/bin/HttpServer_OpenSim.xml | |||
@@ -4,922 +4,421 @@ | |||
4 | <name>HttpServer_OpenSim</name> | 4 | <name>HttpServer_OpenSim</name> |
5 | </assembly> | 5 | </assembly> |
6 | <members> | 6 | <members> |
7 | <member name="T:HttpServer.Sessions.IHttpSessionStore"> | 7 | <member name="T:HttpServer.RealmHandler"> |
8 | <summary> | ||
9 | A session store is used to store and load sessions on a media. | ||
10 | The default implementation (<see cref="T:HttpServer.Sessions.MemorySessionStore"/>) saves/retrieves sessions from memory. | ||
11 | </summary> | ||
12 | </member> | ||
13 | <member name="M:HttpServer.Sessions.IHttpSessionStore.Create"> | ||
14 | <summary> | ||
15 | Creates a new http session with a generated id. | ||
16 | </summary> | ||
17 | <returns>A <see cref="T:HttpServer.Sessions.IHttpSession"/> object</returns> | ||
18 | </member> | ||
19 | <member name="M:HttpServer.Sessions.IHttpSessionStore.Create(System.String)"> | ||
20 | <summary> | 8 | <summary> |
21 | Creates a new http session with a specific id | 9 | Delegate used to find a realm/domain. |
22 | </summary> | 10 | </summary> |
23 | <param name="id">Id used to identify the new cookie..</param> | 11 | <param name="domain"></param> |
24 | <returns>A <see cref="T:HttpServer.Sessions.IHttpSession"/> object.</returns> | 12 | <returns></returns> |
25 | <remarks> | 13 | <remarks> |
26 | Id should be generated by the store implementation if it's null or <see cref="F:System.String.Empty"/>. | 14 | Realms are used during HTTP Authentication |
27 | </remarks> | 15 | </remarks> |
16 | <seealso cref="T:HttpServer.Authentication.AuthenticationModule"/> | ||
17 | <seealso cref="T:HttpServer.Authentication.AuthenticationHandler"/> | ||
28 | </member> | 18 | </member> |
29 | <member name="M:HttpServer.Sessions.IHttpSessionStore.Load(System.String)"> | 19 | <member name="T:HttpServer.HttpServer"> |
30 | <summary> | ||
31 | Load an existing session. | ||
32 | </summary> | ||
33 | <param name="sessionId">Session id (usually retrieved from a client side cookie).</param> | ||
34 | <returns>A session if found; otherwise null.</returns> | ||
35 | </member> | ||
36 | <member name="M:HttpServer.Sessions.IHttpSessionStore.Save(HttpServer.Sessions.IHttpSession)"> | ||
37 | <summary> | ||
38 | Save an updated session to the store. | ||
39 | </summary> | ||
40 | <param name="session">Session id (usually retrieved from a client side cookie).</param> | ||
41 | <exception cref="T:System.ArgumentException">If Id property have not been specified.</exception> | ||
42 | </member> | ||
43 | <member name="M:HttpServer.Sessions.IHttpSessionStore.AddUnused(HttpServer.Sessions.IHttpSession)"> | ||
44 | <summary> | ||
45 | We use the flyweight pattern which reuses small objects | ||
46 | instead of creating new each time. | ||
47 | </summary> | ||
48 | <param name="session">Unused session that should be reused next time Create is called.</param> | ||
49 | </member> | ||
50 | <member name="M:HttpServer.Sessions.IHttpSessionStore.Cleanup"> | ||
51 | <summary> | ||
52 | Remove expired sessions | ||
53 | </summary> | ||
54 | </member> | ||
55 | <member name="M:HttpServer.Sessions.IHttpSessionStore.Remove(System.String)"> | ||
56 | <summary> | ||
57 | Remove a session | ||
58 | </summary> | ||
59 | <param name="sessionId">id of the session.</param> | ||
60 | </member> | ||
61 | <member name="P:HttpServer.Sessions.IHttpSessionStore.Item(System.String)"> | ||
62 | <summary> | ||
63 | Load a session from the store | ||
64 | </summary> | ||
65 | <param name="sessionId"></param> | ||
66 | <returns>null if session is not found.</returns> | ||
67 | </member> | ||
68 | <member name="P:HttpServer.Sessions.IHttpSessionStore.ExpireTime"> | ||
69 | <summary> | ||
70 | Number of minutes before a session expires. | ||
71 | </summary> | ||
72 | <value>Default time is 20 minutes.</value> | ||
73 | </member> | ||
74 | <member name="T:HttpServer.IHttpRequest"> | ||
75 | <summary> | ||
76 | Contains server side HTTP request information. | ||
77 | </summary> | ||
78 | </member> | ||
79 | <member name="M:HttpServer.IHttpRequest.AddHeader(System.String,System.String)"> | ||
80 | <summary> | ||
81 | Called during parsing of a <see cref="T:HttpServer.IHttpRequest"/>. | ||
82 | </summary> | ||
83 | <param name="name">Name of the header, should not be URL encoded</param> | ||
84 | <param name="value">Value of the header, should not be URL encoded</param> | ||
85 | <exception cref="T:HttpServer.Exceptions.BadRequestException">If a header is incorrect.</exception> | ||
86 | </member> | ||
87 | <member name="M:HttpServer.IHttpRequest.AddToBody(System.Byte[],System.Int32,System.Int32)"> | ||
88 | <summary> | 20 | <summary> |
89 | Add bytes to the body | 21 | A complete HTTP server, you need to add a module to it to be able to handle incoming requests. |
90 | </summary> | 22 | </summary> |
91 | <param name="bytes">buffer to read bytes from</param> | 23 | <example> |
92 | <param name="offset">where to start read</param> | 24 | <code> |
93 | <param name="length">number of bytes to read</param> | 25 | // this small example will add two web site modules, thus handling |
94 | <returns>Number of bytes actually read (same as length unless we got all body bytes).</returns> | 26 | // two different sites. In reality you should add Controller modules or something |
95 | <exception cref="T:System.InvalidOperationException">If body is not writable</exception> | 27 | // two the website modules to be able to handle different requests. |
96 | <exception cref="T:System.ArgumentNullException"><c>bytes</c> is null.</exception> | 28 | HttpServer server = new HttpServer(); |
97 | <exception cref="T:System.ArgumentOutOfRangeException"><c>offset</c> is out of range.</exception> | 29 | server.Add(new WebSiteModule("www.gauffin.com", "Gauffin Telecom AB")); |
30 | server.Add(new WebSiteModule("www.vapadi.se", "Remote PBX")); | ||
31 | |||
32 | // start regular http | ||
33 | server.Start(IPAddress.Any, 80); | ||
34 | |||
35 | // start https | ||
36 | server.Start(IPAddress.Any, 443, myCertificate); | ||
37 | </code> | ||
38 | </example> | ||
39 | <seealso cref="T:HttpServer.HttpModules.HttpModule"/> | ||
40 | <seealso cref="T:HttpServer.HttpModules.FileModule"/> | ||
41 | <seealso cref="T:HttpServer.HttpListener"/> | ||
98 | </member> | 42 | </member> |
99 | <member name="M:HttpServer.IHttpRequest.Clear"> | 43 | <member name="M:HttpServer.HttpServer.#ctor(HttpServer.IComponentProvider)"> |
100 | <summary> | 44 | <summary> |
101 | Clear everything in the request | 45 | Initializes a new instance of the <see cref="T:HttpServer.HttpServer"/> class. |
102 | </summary> | 46 | </summary> |
47 | <param name="provider">Used to get all components used in the server..</param> | ||
103 | </member> | 48 | </member> |
104 | <member name="M:HttpServer.IHttpRequest.DecodeBody(HttpServer.FormDecoders.FormDecoderProvider)"> | 49 | <member name="M:HttpServer.HttpServer.#ctor"> |
105 | <summary> | 50 | <summary> |
106 | Decode body into a form. | 51 | Initializes a new instance of the <see cref="T:HttpServer.HttpServer"/> class. |
107 | </summary> | 52 | </summary> |
108 | <param name="providers">A list with form decoders.</param> | ||
109 | <exception cref="T:System.IO.InvalidDataException">If body contents is not valid for the chosen decoder.</exception> | ||
110 | <exception cref="T:System.InvalidOperationException">If body is still being transferred.</exception> | ||
111 | </member> | 53 | </member> |
112 | <member name="M:HttpServer.IHttpRequest.SetCookies(HttpServer.RequestCookies)"> | 54 | <member name="M:HttpServer.HttpServer.#ctor(HttpServer.FormDecoders.FormDecoderProvider)"> |
113 | <summary> | 55 | <summary> |
114 | Sets the cookies. | 56 | Initializes a new instance of the <see cref="T:HttpServer.HttpServer"/> class. |
115 | </summary> | 57 | </summary> |
116 | <param name="cookies">The cookies.</param> | 58 | <param name="decoderProvider">Form decoders are used to convert different types of posted data to the <see cref="T:HttpServer.HttpInput"/> object types.</param> |
59 | <seealso cref="T:HttpServer.FormDecoders.IFormDecoder"/> | ||
60 | <seealso cref="P:HttpServer.HttpServer.FormDecoderProviders"/> | ||
117 | </member> | 61 | </member> |
118 | <member name="M:HttpServer.IHttpRequest.CreateResponse(HttpServer.IHttpClientContext)"> | 62 | <member name="M:HttpServer.HttpServer.#ctor(HttpServer.Sessions.IHttpSessionStore)"> |
119 | <summary> | 63 | <summary> |
120 | Create a response object. | 64 | Initializes a new instance of the <see cref="T:HttpServer.HttpServer"/> class. |
121 | </summary> | 65 | </summary> |
122 | <param name="context">Context for the connected client.</param> | 66 | <param name="sessionStore">A session store is used to save and retrieve sessions</param> |
123 | <returns>A new <see cref="T:HttpServer.IHttpResponse"/>.</returns> | 67 | <seealso cref="T:HttpServer.Sessions.IHttpSessionStore"/> |
124 | </member> | 68 | </member> |
125 | <member name="P:HttpServer.IHttpRequest.AcceptTypes"> | 69 | <member name="M:HttpServer.HttpServer.#ctor(HttpServer.ILogWriter)"> |
126 | <summary> | 70 | <summary> |
127 | Gets kind of types accepted by the client. | 71 | Initializes a new instance of the <see cref="T:HttpServer.HttpServer"/> class. |
128 | </summary> | 72 | </summary> |
73 | <param name="logWriter">The log writer.</param> | ||
74 | <seealso cref="P:HttpServer.HttpServer.LogWriter"/> | ||
129 | </member> | 75 | </member> |
130 | <member name="P:HttpServer.IHttpRequest.Body"> | 76 | <member name="M:HttpServer.HttpServer.#ctor(HttpServer.FormDecoders.FormDecoderProvider,HttpServer.ILogWriter)"> |
131 | <summary> | 77 | <summary> |
132 | Gets or sets body stream. | 78 | Initializes a new instance of the <see cref="T:HttpServer.HttpServer"/> class. |
133 | </summary> | 79 | </summary> |
80 | <param name="decoderProvider">Form decoders are used to convert different types of posted data to the <see cref="T:HttpServer.HttpInput"/> object types.</param> | ||
81 | <param name="logWriter">The log writer.</param> | ||
82 | <seealso cref="T:HttpServer.FormDecoders.IFormDecoder"/> | ||
83 | <seealso cref="P:HttpServer.HttpServer.FormDecoderProviders"/> | ||
84 | <seealso cref="P:HttpServer.HttpServer.LogWriter"/> | ||
134 | </member> | 85 | </member> |
135 | <member name="P:HttpServer.IHttpRequest.BodyIsComplete"> | 86 | <member name="M:HttpServer.HttpServer.#ctor(HttpServer.FormDecoders.FormDecoderProvider,HttpServer.Sessions.IHttpSessionStore,HttpServer.ILogWriter)"> |
136 | <summary> | 87 | <summary> |
137 | Gets whether the body is complete. | 88 | Initializes a new instance of the <see cref="T:HttpServer.HttpServer"/> class. |
138 | </summary> | 89 | </summary> |
90 | <param name="decoderProvider">Form decoders are used to convert different types of posted data to the <see cref="T:HttpServer.HttpInput"/> object types.</param> | ||
91 | <param name="sessionStore">A session store is used to save and retrieve sessions</param> | ||
92 | <param name="logWriter">The log writer.</param> | ||
93 | <seealso cref="T:HttpServer.FormDecoders.IFormDecoder"/> | ||
94 | <seealso cref="P:HttpServer.HttpServer.FormDecoderProviders"/> | ||
95 | <seealso cref="P:HttpServer.HttpServer.LogWriter"/> | ||
96 | <seealso cref="T:HttpServer.Sessions.IHttpSessionStore"/> | ||
139 | </member> | 97 | </member> |
140 | <member name="P:HttpServer.IHttpRequest.Connection"> | 98 | <member name="M:HttpServer.HttpServer.Add(HttpServer.Rules.IRule)"> |
141 | <summary> | 99 | <summary> |
142 | Gets or sets kind of connection used for the session. | 100 | Adds the specified rule. |
143 | </summary> | 101 | </summary> |
102 | <param name="rule">The rule.</param> | ||
144 | </member> | 103 | </member> |
145 | <member name="P:HttpServer.IHttpRequest.ContentLength"> | 104 | <member name="M:HttpServer.HttpServer.Add(HttpServer.HttpModules.HttpModule)"> |
146 | <summary> | 105 | <summary> |
147 | Gets or sets number of bytes in the body. | 106 | Add a <see cref="T:HttpServer.HttpModules.HttpModule"/> to the server. |
148 | </summary> | 107 | </summary> |
108 | <param name="module">mode to add</param> | ||
149 | </member> | 109 | </member> |
150 | <member name="P:HttpServer.IHttpRequest.Cookies"> | 110 | <member name="M:HttpServer.HttpServer.DecodeBody(HttpServer.IHttpRequest)"> |
151 | <summary> | 111 | <summary> |
152 | Gets cookies that was sent with the request. | 112 | Decodes the request body. |
153 | </summary> | 113 | </summary> |
114 | <param name="request">The request.</param> | ||
115 | <exception cref="T:HttpServer.Exceptions.InternalServerException">Failed to decode form data.</exception> | ||
154 | </member> | 116 | </member> |
155 | <member name="P:HttpServer.IHttpRequest.Form"> | 117 | <member name="M:HttpServer.HttpServer.ErrorPage(HttpServer.IHttpResponse,System.Net.HttpStatusCode,System.String)"> |
156 | <summary> | 118 | <summary> |
157 | Gets form parameters. | 119 | Generate a HTTP error page (that will be added to the response body). |
120 | response status code is also set. | ||
158 | </summary> | 121 | </summary> |
122 | <param name="response">Response that the page will be generated in.</param> | ||
123 | <param name="error"><see cref="T:System.Net.HttpStatusCode"/>.</param> | ||
124 | <param name="body">response body contents.</param> | ||
159 | </member> | 125 | </member> |
160 | <member name="P:HttpServer.IHttpRequest.Headers"> | 126 | <member name="M:HttpServer.HttpServer.ErrorPage(HttpServer.IHttpResponse,HttpServer.Exceptions.HttpException)"> |
161 | <summary> | 127 | <summary> |
162 | Gets headers sent by the client. | 128 | Generate a HTTP error page (that will be added to the response body). |
129 | response status code is also set. | ||
163 | </summary> | 130 | </summary> |
131 | <param name="response">Response that the page will be generated in.</param> | ||
132 | <param name="err">exception.</param> | ||
164 | </member> | 133 | </member> |
165 | <member name="P:HttpServer.IHttpRequest.HttpVersion"> | 134 | <member name="M:HttpServer.HttpServer.GetRealm(HttpServer.IHttpRequest)"> |
166 | <summary> | 135 | <summary> |
167 | Gets or sets version of HTTP protocol that's used. | 136 | Realms are used by the <see cref="T:HttpServer.Authentication.AuthenticationModule"/>s. |
168 | </summary> | 137 | </summary> |
169 | <remarks> | 138 | <param name="request">HTTP request</param> |
170 | Probably <see cref="F:HttpServer.HttpHelper.HTTP10"/> or <see cref="F:HttpServer.HttpHelper.HTTP11"/>. | 139 | <returns>domain/realm.</returns> |
171 | </remarks> | ||
172 | <seealso cref="T:HttpServer.HttpHelper"/> | ||
173 | </member> | 140 | </member> |
174 | <member name="P:HttpServer.IHttpRequest.IsAjax"> | 141 | <member name="M:HttpServer.HttpServer.HandleRequest(HttpServer.IHttpClientContext,HttpServer.IHttpRequest,HttpServer.IHttpResponse,HttpServer.Sessions.IHttpSession)"> |
175 | <summary> | 142 | <summary> |
176 | Gets whether the request was made by Ajax (Asynchronous JavaScript) | 143 | Process an incoming request. |
177 | </summary> | 144 | </summary> |
145 | <param name="context">connection to client</param> | ||
146 | <param name="request">request information</param> | ||
147 | <param name="response">response that should be filled</param> | ||
148 | <param name="session">session information</param> | ||
178 | </member> | 149 | </member> |
179 | <member name="P:HttpServer.IHttpRequest.Method"> | 150 | <member name="M:HttpServer.HttpServer.OnClientDisconnected(HttpServer.IHttpClientContext,System.Net.Sockets.SocketError)"> |
180 | <summary> | 151 | <summary> |
181 | Gets or sets requested method. | 152 | Can be overloaded to implement stuff when a client have been connected. |
182 | </summary> | 153 | </summary> |
183 | <remarks> | 154 | <remarks> |
184 | Will always be in upper case. | 155 | Default implementation does nothing. |
185 | </remarks> | 156 | </remarks> |
186 | <see cref="P:HttpServer.IHttpRequest.Method"/> | 157 | <param name="client">client that disconnected</param> |
187 | </member> | 158 | <param name="error">disconnect reason</param> |
188 | <member name="P:HttpServer.IHttpRequest.Param"> | ||
189 | <summary> | ||
190 | Gets parameter from <see cref="P:HttpServer.IHttpRequest.QueryString"/> or <see cref="P:HttpServer.IHttpRequest.Form"/>. | ||
191 | </summary> | ||
192 | </member> | ||
193 | <member name="P:HttpServer.IHttpRequest.QueryString"> | ||
194 | <summary> | ||
195 | Gets variables sent in the query string | ||
196 | </summary> | ||
197 | </member> | ||
198 | <member name="P:HttpServer.IHttpRequest.Uri"> | ||
199 | <summary> | ||
200 | Gets or sets requested URI. | ||
201 | </summary> | ||
202 | </member> | 159 | </member> |
203 | <member name="P:HttpServer.IHttpRequest.UriParts"> | 160 | <member name="M:HttpServer.HttpServer.ProcessAuthentication(HttpServer.IHttpRequest,HttpServer.IHttpResponse,HttpServer.Sessions.IHttpSession)"> |
204 | <summary> | 161 | <summary> |
205 | Gets URI absolute path divided into parts. | 162 | Handle authentication |
206 | </summary> | 163 | </summary> |
207 | <example> | 164 | <param name="request"></param> |
208 | // URI is: http://gauffin.com/code/tiny/ | 165 | <param name="response"></param> |
209 | Console.WriteLine(request.UriParts[0]); // result: code | 166 | <param name="session"></param> |
210 | Console.WriteLine(request.UriParts[1]); // result: tiny | 167 | <returns>true if request can be handled; false if not.</returns> |
211 | </example> | 168 | <exception cref="T:HttpServer.Exceptions.BadRequestException">Invalid authorization header</exception> |
212 | <remarks> | ||
213 | If you're using controllers than the first part is controller name, | ||
214 | the second part is method name and the third part is Id property. | ||
215 | </remarks> | ||
216 | <seealso cref="P:HttpServer.IHttpRequest.Uri"/> | ||
217 | </member> | 169 | </member> |
218 | <member name="P:HttpServer.IHttpRequest.UriPath"> | 170 | <member name="M:HttpServer.HttpServer.RequestAuthentication(HttpServer.Authentication.AuthenticationModule,HttpServer.IHttpRequest,HttpServer.IHttpResponse)"> |
219 | <summary> | 171 | <summary> |
220 | Gets or sets path and query. | 172 | Will request authentication. |
221 | </summary> | 173 | </summary> |
222 | <see cref="P:HttpServer.IHttpRequest.Uri"/> | ||
223 | <remarks> | 174 | <remarks> |
224 | Are only used during request parsing. Cannot be set after "Host" header have been | 175 | Sends respond to client, nothing else can be done with the response after this. |
225 | added. | ||
226 | </remarks> | 176 | </remarks> |
177 | <param name="mod"></param> | ||
178 | <param name="request"></param> | ||
179 | <param name="response"></param> | ||
227 | </member> | 180 | </member> |
228 | <member name="T:HttpServer.IHttpContextHandler"> | 181 | <member name="M:HttpServer.HttpServer.OnRequest(System.Object,HttpServer.RequestEventArgs)"> |
229 | <summary> | ||
230 | Class that receives Requests from a <see cref="T:HttpServer.IHttpClientContext"/>. | ||
231 | </summary> | ||
232 | </member> | ||
233 | <member name="M:HttpServer.IHttpContextHandler.ClientDisconnected(HttpServer.IHttpClientContext,System.Net.Sockets.SocketError)"> | ||
234 | <summary> | ||
235 | Client have been disconnected. | ||
236 | </summary> | ||
237 | <param name="client">Client that was disconnected.</param> | ||
238 | <param name="error">Reason</param> | ||
239 | <see cref="T:HttpServer.IHttpClientContext"/> | ||
240 | </member> | ||
241 | <member name="M:HttpServer.IHttpContextHandler.RequestReceived(HttpServer.IHttpClientContext,HttpServer.IHttpRequest)"> | ||
242 | <summary> | ||
243 | Invoked when a client context have received a new HTTP request | ||
244 | </summary> | ||
245 | <param name="client">Client that received the request.</param> | ||
246 | <param name="request">Request that was received.</param> | ||
247 | <see cref="T:HttpServer.IHttpClientContext"/> | ||
248 | </member> | ||
249 | <member name="T:HttpServer.Helpers.GetIdTitle"> | ||
250 | <summary> | ||
251 | Delegate used by <see cref="M:HttpServer.Helpers.FormHelper.Select(System.String,System.Collections.IEnumerable,HttpServer.Helpers.GetIdTitle,System.Object,System.Boolean)"/> to populate select options. | ||
252 | </summary> | ||
253 | <param name="obj">current object (for instance a User).</param> | ||
254 | <param name="id">Text that should be displayed in the value part of a <optiongt;-tag.</param> | ||
255 | <param name="title">Text shown in the select list.</param> | ||
256 | <example> | ||
257 | // Class that is going to be used in a SELECT-tag. | ||
258 | public class User | ||
259 | { | ||
260 | private readonly string _realName; | ||
261 | private readonly int _id; | ||
262 | public User(int id, string realName) | ||
263 | { | ||
264 | _id = id; | ||
265 | _realName = realName; | ||
266 | } | ||
267 | public string RealName | ||
268 | { | ||
269 | get { return _realName; } | ||
270 | } | ||
271 | |||
272 | public int Id | ||
273 | { | ||
274 | get { return _id; } | ||
275 | } | ||
276 | } | ||
277 | |||
278 | // Using an inline delegate to generate the select list | ||
279 | public void UserInlineDelegate() | ||
280 | { | ||
281 | List<User> items = new List<User>(); | ||
282 | items.Add(new User(1, "adam")); | ||
283 | items.Add(new User(2, "bertial")); | ||
284 | items.Add(new User(3, "david")); | ||
285 | string htmlSelect = Select("users", "users", items, delegate(object o, out object id, out object value) | ||
286 | { | ||
287 | User user = (User)o; | ||
288 | id = user.Id; | ||
289 | value = user.RealName; | ||
290 | }, 2, true); | ||
291 | } | ||
292 | |||
293 | // Using an method as delegate to generate the select list. | ||
294 | public void UseExternalDelegate() | ||
295 | { | ||
296 | List<User> items = new List<User>(); | ||
297 | items.Add(new User(1, "adam")); | ||
298 | items.Add(new User(2, "bertial")); | ||
299 | items.Add(new User(3, "david")); | ||
300 | string htmlSelect = Select("users", "users", items, UserOptions, 1, true); | ||
301 | } | ||
302 | |||
303 | // delegate returning id and title | ||
304 | public static void UserOptions(object o, out object id, out object title) | ||
305 | { | ||
306 | User user = (User)o; | ||
307 | id = user.Id; | ||
308 | value = user.RealName; | ||
309 | } /// </example> | ||
310 | </member> | ||
311 | <member name="T:HttpServer.Exceptions.ForbiddenException"> | ||
312 | <summary> | ||
313 | The server understood the request, but is refusing to fulfill it. | ||
314 | Authorization will not help and the request SHOULD NOT be repeated. | ||
315 | If the request method was not HEAD and the server wishes to make public why the request has not been fulfilled, | ||
316 | it SHOULD describe the reason for the refusal in the entity. If the server does not wish to make this information | ||
317 | available to the client, the status code 404 (Not Found) can be used instead. | ||
318 | |||
319 | Text taken from: http://www.submissionchamber.com/help-guides/error-codes.php | ||
320 | </summary> | ||
321 | </member> | ||
322 | <member name="T:HttpServer.Exceptions.HttpException"> | ||
323 | <summary> | ||
324 | All HTTP based exceptions will derive this class. | ||
325 | </summary> | ||
326 | </member> | ||
327 | <member name="M:HttpServer.Exceptions.HttpException.#ctor(System.Net.HttpStatusCode,System.String)"> | ||
328 | <summary> | ||
329 | Create a new HttpException | ||
330 | </summary> | ||
331 | <param name="code">http status code (sent in the response)</param> | ||
332 | <param name="message">error description</param> | ||
333 | </member> | ||
334 | <member name="M:HttpServer.Exceptions.HttpException.#ctor(System.Net.HttpStatusCode,System.String,System.Exception)"> | ||
335 | <summary> | ||
336 | Create a new HttpException | ||
337 | </summary> | ||
338 | <param name="code">http status code (sent in the response)</param> | ||
339 | <param name="message">error description</param> | ||
340 | <param name="inner">inner exception</param> | ||
341 | </member> | ||
342 | <member name="P:HttpServer.Exceptions.HttpException.HttpStatusCode"> | ||
343 | <summary> | ||
344 | status code to use in the response. | ||
345 | </summary> | ||
346 | </member> | ||
347 | <member name="M:HttpServer.Exceptions.ForbiddenException.#ctor(System.String)"> | ||
348 | <summary> | ||
349 | Initializes a new instance of the <see cref="T:HttpServer.Exceptions.ForbiddenException"/> class. | ||
350 | </summary> | ||
351 | <param name="errorMsg">error message</param> | ||
352 | </member> | ||
353 | <member name="T:HttpServer.Sessions.MemorySession"> | ||
354 | <summary> | ||
355 | A session stored in memory. | ||
356 | </summary> | ||
357 | </member> | ||
358 | <member name="T:HttpServer.Sessions.IHttpSession"> | ||
359 | <summary> | ||
360 | Interface for sessions | ||
361 | </summary> | ||
362 | </member> | ||
363 | <member name="M:HttpServer.Sessions.IHttpSession.Clear"> | ||
364 | <summary> | ||
365 | Remove everything from the session | ||
366 | </summary> | ||
367 | </member> | ||
368 | <member name="M:HttpServer.Sessions.IHttpSession.Clear(System.Boolean)"> | ||
369 | <summary> | ||
370 | Remove everything from the session | ||
371 | </summary> | ||
372 | <param name="expires">True if the session is cleared due to expiration</param> | ||
373 | </member> | ||
374 | <member name="P:HttpServer.Sessions.IHttpSession.Id"> | ||
375 | <summary> | ||
376 | Session id | ||
377 | </summary> | ||
378 | </member> | ||
379 | <member name="P:HttpServer.Sessions.IHttpSession.Item(System.String)"> | ||
380 | <summary> | ||
381 | Should | ||
382 | </summary> | ||
383 | <param name="name">Name of the session variable</param> | ||
384 | <returns>null if it's not set</returns> | ||
385 | <exception cref="T:System.Runtime.Serialization.SerializationException">If the object cant be serialized.</exception> | ||
386 | </member> | ||
387 | <member name="P:HttpServer.Sessions.IHttpSession.Accessed"> | ||
388 | <summary> | ||
389 | When the session was last accessed. | ||
390 | This property is touched by the http server each time the | ||
391 | session is requested. | ||
392 | </summary> | ||
393 | </member> | ||
394 | <member name="P:HttpServer.Sessions.IHttpSession.Count"> | ||
395 | <summary> | ||
396 | Number of session variables. | ||
397 | </summary> | ||
398 | </member> | ||
399 | <member name="E:HttpServer.Sessions.IHttpSession.BeforeClear"> | ||
400 | <summary> | ||
401 | Event triggered upon clearing the session | ||
402 | </summary> | ||
403 | </member> | ||
404 | <member name="M:HttpServer.Sessions.MemorySession.#ctor(System.String)"> | ||
405 | <summary> | 182 | <summary> |
406 | 183 | Received from a <see cref="T:HttpServer.IHttpClientContext"/> when a request have been parsed successfully. | |
407 | </summary> | 184 | </summary> |
408 | <param name="id">A unique id used by the sessions store to identify the session</param> | 185 | <param name="source"><see cref="T:HttpServer.IHttpClientContext"/> that received the request.</param> |
186 | <param name="args">The request.</param> | ||
409 | </member> | 187 | </member> |
410 | <member name="M:HttpServer.Sessions.MemorySession.SetId(System.String)"> | 188 | <member name="M:HttpServer.HttpServer.ProcessRequestWrapper(HttpServer.IHttpClientContext,HttpServer.IHttpRequest)"> |
411 | <summary> | 189 | <summary> |
412 | Id | 190 | To be able to track request count. |
413 | </summary> | 191 | </summary> |
414 | <param name="id"></param> | 192 | <param name="context"></param> |
193 | <param name="request"></param> | ||
415 | </member> | 194 | </member> |
416 | <member name="M:HttpServer.Sessions.MemorySession.Clear"> | 195 | <member name="M:HttpServer.HttpServer.Start(System.Net.IPAddress,System.Int32)"> |
417 | <summary> | 196 | <summary> |
418 | Remove everything from the session | 197 | Start the web server using regular HTTP. |
419 | </summary> | 198 | </summary> |
199 | <param name="address">IP Address to listen on, use <c>IpAddress.Any </c>to accept connections on all IP addresses/network cards.</param> | ||
200 | <param name="port">Port to listen on. 80 can be a good idea =)</param> | ||
201 | <exception cref="T:System.ArgumentNullException"><c>address</c> is null.</exception> | ||
202 | <exception cref="T:System.ArgumentException">Port must be a positive number.</exception> | ||
420 | </member> | 203 | </member> |
421 | <member name="M:HttpServer.Sessions.MemorySession.Clear(System.Boolean)"> | 204 | <member name="M:HttpServer.HttpServer.Start(System.Net.IPAddress,System.Int32,System.Security.Cryptography.X509Certificates.X509Certificate)"> |
422 | <summary> | 205 | <summary> |
423 | Clears the specified expire. | 206 | Accept secure connections. |
424 | </summary> | 207 | </summary> |
425 | <param name="expires">True if the session is cleared due to expiration</param> | 208 | <param name="address">IP Address to listen on, use <see cref="F:System.Net.IPAddress.Any"/> to accept connections on all IP Addresses / network cards.</param> |
209 | <param name="port">Port to listen on. 80 can be a good idea =)</param> | ||
210 | <param name="certificate">Certificate to use</param> | ||
211 | <exception cref="T:System.ArgumentNullException"><c>address</c> is null.</exception> | ||
212 | <exception cref="T:System.ArgumentException">Port must be a positive number.</exception> | ||
426 | </member> | 213 | </member> |
427 | <member name="M:HttpServer.Sessions.MemorySession.Dispose"> | 214 | <member name="M:HttpServer.HttpServer.Stop"> |
428 | <summary> | 215 | <summary> |
429 | Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. | 216 | shut down the server and listeners |
430 | </summary> | 217 | </summary> |
431 | <filterpriority>2</filterpriority> | ||
432 | </member> | 218 | </member> |
433 | <member name="P:HttpServer.Sessions.MemorySession.Id"> | 219 | <member name="M:HttpServer.HttpServer.WriteLog(HttpServer.LogPrio,System.String)"> |
434 | <summary> | 220 | <summary> |
435 | Session id | 221 | write an entry to the log file |
436 | </summary> | 222 | </summary> |
223 | <param name="prio">importance of the message</param> | ||
224 | <param name="message">log message</param> | ||
437 | </member> | 225 | </member> |
438 | <member name="P:HttpServer.Sessions.MemorySession.Item(System.String)"> | 226 | <member name="M:HttpServer.HttpServer.WriteLog(System.Object,HttpServer.LogPrio,System.String)"> |
439 | <summary> | 227 | <summary> |
440 | Should | 228 | write an entry to the log file |
441 | </summary> | 229 | </summary> |
442 | <param name="name">Name of the session variable</param> | 230 | <param name="source">object that wrote the message</param> |
443 | <returns>null if it's not set</returns> | 231 | <param name="prio">importance of the message</param> |
232 | <param name="message">log message</param> | ||
444 | </member> | 233 | </member> |
445 | <member name="P:HttpServer.Sessions.MemorySession.Accessed"> | 234 | <member name="P:HttpServer.HttpServer.Current"> |
446 | <summary> | 235 | <summary> |
447 | when the session was last accessed. | 236 | Server that is handling the current request. |
448 | </summary> | 237 | </summary> |
449 | <remarks> | 238 | <remarks> |
450 | Used to determine when the session should be removed. | 239 | Will be set as soon as a request arrives to the <see cref="T:HttpServer.HttpServer"/> object. |
451 | </remarks> | 240 | </remarks> |
452 | </member> | 241 | </member> |
453 | <member name="P:HttpServer.Sessions.MemorySession.Count"> | 242 | <member name="P:HttpServer.HttpServer.AuthenticationModules"> |
454 | <summary> | ||
455 | Number of values in the session | ||
456 | </summary> | ||
457 | </member> | ||
458 | <member name="P:HttpServer.Sessions.MemorySession.Changed"> | ||
459 | <summary> | ||
460 | Flag to indicate that the session have been changed | ||
461 | and should be saved into the session store. | ||
462 | </summary> | ||
463 | </member> | ||
464 | <member name="E:HttpServer.Sessions.MemorySession.BeforeClear"> | ||
465 | <summary> | ||
466 | Event triggered upon clearing the session | ||
467 | </summary> | ||
468 | </member> | ||
469 | <member name="T:HttpServer.ResponseCookie"> | ||
470 | <summary> | ||
471 | cookie being sent back to the browser. | ||
472 | </summary> | ||
473 | <seealso cref="T:HttpServer.ResponseCookie"/> | ||
474 | </member> | ||
475 | <member name="T:HttpServer.RequestCookie"> | ||
476 | <summary> | ||
477 | cookie sent by the client/browser | ||
478 | </summary> | ||
479 | <seealso cref="T:HttpServer.ResponseCookie"/> | ||
480 | </member> | ||
481 | <member name="M:HttpServer.RequestCookie.#ctor(System.String,System.String)"> | ||
482 | <summary> | ||
483 | Constructor. | ||
484 | </summary> | ||
485 | <param name="id">cookie identifier</param> | ||
486 | <param name="content">cookie content</param> | ||
487 | <exception cref="T:System.ArgumentNullException">id or content is null</exception> | ||
488 | <exception cref="T:System.ArgumentException">id is empty</exception> | ||
489 | </member> | ||
490 | <member name="M:HttpServer.RequestCookie.ToString"> | ||
491 | <summary> | ||
492 | Gets the cookie HTML representation. | ||
493 | </summary> | ||
494 | <returns>cookie string</returns> | ||
495 | </member> | ||
496 | <member name="P:HttpServer.RequestCookie.Name"> | ||
497 | <summary> | ||
498 | Gets the cookie identifier. | ||
499 | </summary> | ||
500 | </member> | ||
501 | <member name="P:HttpServer.RequestCookie.Value"> | ||
502 | <summary> | ||
503 | Cookie value. Set to null to remove cookie. | ||
504 | </summary> | ||
505 | </member> | ||
506 | <member name="M:HttpServer.ResponseCookie.#ctor(System.String,System.String,System.DateTime)"> | ||
507 | <summary> | ||
508 | Constructor. | ||
509 | </summary> | ||
510 | <param name="id">cookie identifier</param> | ||
511 | <param name="content">cookie content</param> | ||
512 | <param name="expiresAt">cookie expiration date. Use DateTime.MinValue for session cookie.</param> | ||
513 | <exception cref="T:System.ArgumentNullException">id or content is null</exception> | ||
514 | <exception cref="T:System.ArgumentException">id is empty</exception> | ||
515 | </member> | ||
516 | <member name="M:HttpServer.ResponseCookie.#ctor(System.String,System.String,System.DateTime,System.String,System.String)"> | ||
517 | <summary> | ||
518 | Create a new cookie | ||
519 | </summary> | ||
520 | <param name="name">name identifying the cookie</param> | ||
521 | <param name="value">cookie value</param> | ||
522 | <param name="expires">when the cookie expires. Setting DateTime.MinValue will delete the cookie when the session is closed.</param> | ||
523 | <param name="path">Path to where the cookie is valid</param> | ||
524 | <param name="domain">Domain that the cookie is valid for.</param> | ||
525 | </member> | ||
526 | <member name="M:HttpServer.ResponseCookie.#ctor(HttpServer.RequestCookie,System.DateTime)"> | ||
527 | <summary> | ||
528 | Create a new cookie | ||
529 | </summary> | ||
530 | <param name="cookie">Name and value will be used</param> | ||
531 | <param name="expires">when the cookie expires.</param> | ||
532 | </member> | ||
533 | <member name="M:HttpServer.ResponseCookie.ToString"> | ||
534 | <summary> | ||
535 | Gets the cookie HTML representation. | ||
536 | </summary> | ||
537 | <returns>cookie string</returns> | ||
538 | </member> | ||
539 | <member name="P:HttpServer.ResponseCookie.Expires"> | ||
540 | <summary> | ||
541 | When the cookie expires. | ||
542 | DateTime.MinValue means that the cookie expires when the session do so. | ||
543 | </summary> | ||
544 | </member> | ||
545 | <member name="P:HttpServer.ResponseCookie.Path"> | ||
546 | <summary> | ||
547 | Cookie is only valid under this path. | ||
548 | </summary> | ||
549 | </member> | ||
550 | <member name="T:HttpServer.IHttpClientContext"> | ||
551 | <summary> | ||
552 | Contains a connection to a browser/client. | ||
553 | </summary> | ||
554 | </member> | ||
555 | <member name="M:HttpServer.IHttpClientContext.Disconnect(System.Net.Sockets.SocketError)"> | ||
556 | <summary> | ||
557 | Disconnect from client | ||
558 | </summary> | ||
559 | <param name="error">error to report in the <see cref="E:HttpServer.IHttpClientContext.Disconnected"/> event.</param> | ||
560 | </member> | ||
561 | <member name="M:HttpServer.IHttpClientContext.Respond(System.String,System.Net.HttpStatusCode,System.String,System.String,System.String)"> | ||
562 | <summary> | ||
563 | Send a response. | ||
564 | </summary> | ||
565 | <param name="httpVersion">Either <see cref="F:HttpServer.HttpHelper.HTTP10"/> or <see cref="F:HttpServer.HttpHelper.HTTP11"/></param> | ||
566 | <param name="statusCode">HTTP status code</param> | ||
567 | <param name="reason">reason for the status code.</param> | ||
568 | <param name="body">HTML body contents, can be null or empty.</param> | ||
569 | <param name="contentType">A content type to return the body as, i.e. 'text/html' or 'text/plain', defaults to 'text/html' if null or empty</param> | ||
570 | <exception cref="T:System.ArgumentException">If <paramref name="httpVersion"/> is invalid.</exception> | ||
571 | </member> | ||
572 | <member name="M:HttpServer.IHttpClientContext.Respond(System.String,System.Net.HttpStatusCode,System.String)"> | ||
573 | <summary> | ||
574 | Send a response. | ||
575 | </summary> | ||
576 | <param name="httpVersion">Either <see cref="F:HttpServer.HttpHelper.HTTP10"/> or <see cref="F:HttpServer.HttpHelper.HTTP11"/></param> | ||
577 | <param name="statusCode">HTTP status code</param> | ||
578 | <param name="reason">reason for the status code.</param> | ||
579 | </member> | ||
580 | <member name="M:HttpServer.IHttpClientContext.Respond(System.String)"> | ||
581 | <summary> | ||
582 | Send a response. | ||
583 | </summary> | ||
584 | <exception cref="T:System.ArgumentNullException"></exception> | ||
585 | </member> | ||
586 | <member name="M:HttpServer.IHttpClientContext.Send(System.Byte[])"> | ||
587 | <summary> | ||
588 | send a whole buffer | ||
589 | </summary> | ||
590 | <param name="buffer">buffer to send</param> | ||
591 | <exception cref="T:System.ArgumentNullException"></exception> | ||
592 | </member> | ||
593 | <member name="M:HttpServer.IHttpClientContext.Send(System.Byte[],System.Int32,System.Int32)"> | ||
594 | <summary> | ||
595 | Send data using the stream | ||
596 | </summary> | ||
597 | <param name="buffer">Contains data to send</param> | ||
598 | <param name="offset">Start position in buffer</param> | ||
599 | <param name="size">number of bytes to send</param> | ||
600 | <exception cref="T:System.ArgumentNullException"></exception> | ||
601 | <exception cref="T:System.ArgumentOutOfRangeException"></exception> | ||
602 | </member> | ||
603 | <member name="M:HttpServer.IHttpClientContext.Close"> | ||
604 | <summary> | ||
605 | Closes the streams and disposes of the unmanaged resources | ||
606 | </summary> | ||
607 | </member> | ||
608 | <member name="P:HttpServer.IHttpClientContext.Secured"> | ||
609 | <summary> | 243 | <summary> |
610 | Using SSL or other encryption method. | 244 | Modules used for authentication. The module that is is added first is used as |
245 | the default authentication module. | ||
611 | </summary> | 246 | </summary> |
247 | <remarks>Use the corresponding property | ||
248 | in the <see cref="T:HttpServer.HttpModules.WebSiteModule"/> if you are using multiple websites.</remarks> | ||
612 | </member> | 249 | </member> |
613 | <member name="P:HttpServer.IHttpClientContext.IsSecured"> | 250 | <member name="P:HttpServer.HttpServer.FormDecoderProviders"> |
614 | <summary> | 251 | <summary> |
615 | Using SSL or other encryption method. | 252 | Form decoder providers are used to decode request body (which normally contains form data). |
616 | </summary> | 253 | </summary> |
617 | </member> | 254 | </member> |
618 | <member name="E:HttpServer.IHttpClientContext.Disconnected"> | 255 | <member name="P:HttpServer.HttpServer.ServerName"> |
619 | <summary> | 256 | <summary> |
620 | The context have been disconnected. | 257 | Server name sent in HTTP responses. |
621 | </summary> | 258 | </summary> |
622 | <remarks> | 259 | <remarks> |
623 | Event can be used to clean up a context, or to reuse it. | 260 | Do NOT include version in name, since it makes it |
261 | easier for hackers. | ||
624 | </remarks> | 262 | </remarks> |
625 | </member> | 263 | </member> |
626 | <member name="E:HttpServer.IHttpClientContext.RequestReceived"> | 264 | <member name="P:HttpServer.HttpServer.SessionCookieName"> |
627 | <summary> | ||
628 | A request have been received in the context. | ||
629 | </summary> | ||
630 | </member> | ||
631 | <member name="T:HttpServer.DisconnectedEventArgs"> | ||
632 | <summary> | ||
633 | A <see cref="T:HttpServer.IHttpClientContext"/> have been disconnected. | ||
634 | </summary> | ||
635 | </member> | ||
636 | <member name="M:HttpServer.DisconnectedEventArgs.#ctor(System.Net.Sockets.SocketError)"> | ||
637 | <summary> | ||
638 | Initializes a new instance of the <see cref="T:HttpServer.DisconnectedEventArgs"/> class. | ||
639 | </summary> | ||
640 | <param name="error">Reason to disconnection.</param> | ||
641 | </member> | ||
642 | <member name="P:HttpServer.DisconnectedEventArgs.Error"> | ||
643 | <summary> | ||
644 | Gets reason to why client disconnected. | ||
645 | </summary> | ||
646 | </member> | ||
647 | <member name="T:HttpServer.RequestEventArgs"> | ||
648 | <summary> | ||
649 | |||
650 | </summary> | ||
651 | </member> | ||
652 | <member name="M:HttpServer.RequestEventArgs.#ctor(HttpServer.IHttpRequest)"> | ||
653 | <summary> | ||
654 | Initializes a new instance of the <see cref="T:HttpServer.RequestEventArgs"/> class. | ||
655 | </summary> | ||
656 | <param name="request">The request.</param> | ||
657 | </member> | ||
658 | <member name="P:HttpServer.RequestEventArgs.Request"> | ||
659 | <summary> | ||
660 | Gets received request. | ||
661 | </summary> | ||
662 | </member> | ||
663 | <member name="T:HttpServer.HttpListenerBase"> | ||
664 | <summary> | ||
665 | Contains a listener that doesn't do anything with the connections. | ||
666 | </summary> | ||
667 | </member> | ||
668 | <member name="M:HttpServer.HttpListenerBase.#ctor(System.Net.IPAddress,System.Int32,HttpServer.IHttpContextFactory)"> | ||
669 | <summary> | ||
670 | Listen for regular HTTP connections | ||
671 | </summary> | ||
672 | <param name="address">IP Address to accept connections on</param> | ||
673 | <param name="port">TCP Port to listen on, default HTTP port is 80.</param> | ||
674 | <param name="factory">Factory used to create <see cref="T:HttpServer.IHttpClientContext"/>es.</param> | ||
675 | <exception cref="T:System.ArgumentNullException"><c>address</c> is null.</exception> | ||
676 | <exception cref="T:System.ArgumentException">Port must be a positive number.</exception> | ||
677 | </member> | ||
678 | <member name="M:HttpServer.HttpListenerBase.#ctor(System.Net.IPAddress,System.Int32,HttpServer.IHttpContextFactory,System.Security.Cryptography.X509Certificates.X509Certificate)"> | ||
679 | <summary> | ||
680 | Initializes a new instance of the <see cref="T:HttpServer.HttpListenerBase"/> class. | ||
681 | </summary> | ||
682 | <param name="address">IP Address to accept connections on</param> | ||
683 | <param name="port">TCP Port to listen on, default HTTPS port is 443</param> | ||
684 | <param name="factory">Factory used to create <see cref="T:HttpServer.IHttpClientContext"/>es.</param> | ||
685 | <param name="certificate">Certificate to use</param> | ||
686 | </member> | ||
687 | <member name="M:HttpServer.HttpListenerBase.#ctor(System.Net.IPAddress,System.Int32,HttpServer.IHttpContextFactory,System.Security.Cryptography.X509Certificates.X509Certificate,System.Security.Authentication.SslProtocols)"> | ||
688 | <summary> | ||
689 | Initializes a new instance of the <see cref="T:HttpServer.HttpListenerBase"/> class. | ||
690 | </summary> | ||
691 | <param name="address">IP Address to accept connections on</param> | ||
692 | <param name="port">TCP Port to listen on, default HTTPS port is 443</param> | ||
693 | <param name="factory">Factory used to create <see cref="T:HttpServer.IHttpClientContext"/>es.</param> | ||
694 | <param name="certificate">Certificate to use</param> | ||
695 | <param name="protocol">which HTTPS protocol to use, default is TLS.</param> | ||
696 | </member> | ||
697 | <member name="M:HttpServer.HttpListenerBase.OnAccept(System.IAsyncResult)"> | ||
698 | <exception cref="T:System.Exception"><c>Exception</c>.</exception> | ||
699 | </member> | ||
700 | <member name="M:HttpServer.HttpListenerBase.RetryBeginAccept"> | ||
701 | <summary> | 265 | <summary> |
702 | Will try to accept connections one more time. | 266 | Name of cookie where session id is stored. |
703 | </summary> | 267 | </summary> |
704 | <exception cref="T:System.Exception">If any exceptions is thrown.</exception> | ||
705 | </member> | 268 | </member> |
706 | <member name="M:HttpServer.HttpListenerBase.OnAcceptingSocket(System.Net.Sockets.Socket)"> | 269 | <member name="P:HttpServer.HttpServer.LogWriter"> |
707 | <summary> | 270 | <summary> |
708 | Can be used to create filtering of new connections. | 271 | Specified where logging should go. |
709 | </summary> | 272 | </summary> |
710 | <param name="socket">Accepted socket</param> | 273 | <seealso cref="T:HttpServer.NullLogWriter"/> |
711 | <returns>true if connection can be accepted; otherwise false.</returns> | 274 | <seealso cref="T:HttpServer.ConsoleLogWriter"/> |
275 | <seealso cref="P:HttpServer.HttpServer.LogWriter"/> | ||
712 | </member> | 276 | </member> |
713 | <member name="M:HttpServer.HttpListenerBase.Start(System.Int32)"> | 277 | <member name="P:HttpServer.HttpServer.BackLog"> |
714 | <summary> | 278 | <summary> |
715 | Start listen for new connections | 279 | Number of connections that can wait to be accepted by the server. |
716 | </summary> | 280 | </summary> |
717 | <param name="backlog">Number of connections that can stand in a queue to be accepted.</param> | 281 | <remarks>Default is 10.</remarks> |
718 | <exception cref="T:System.InvalidOperationException">Listener have already been started.</exception> | ||
719 | </member> | 282 | </member> |
720 | <member name="M:HttpServer.HttpListenerBase.Stop"> | 283 | <member name="P:HttpServer.HttpServer.MaxRequestCount"> |
721 | <summary> | 284 | <summary> |
722 | Stop the listener | 285 | Gets or sets maximum number of allowed simultaneous requests. |
723 | </summary> | 286 | </summary> |
724 | <exception cref="T:System.Net.Sockets.SocketException"></exception> | 287 | <remarks> |
288 | <para> | ||
289 | This property is useful in busy systems. The HTTP server | ||
290 | will start queuing new requests if this limit is hit, instead | ||
291 | of trying to process all incoming requests directly. | ||
292 | </para> | ||
293 | <para> | ||
294 | The default number if allowed simultaneous requests are 10. | ||
295 | </para> | ||
296 | </remarks> | ||
725 | </member> | 297 | </member> |
726 | <member name="P:HttpServer.HttpListenerBase.LogWriter"> | 298 | <member name="P:HttpServer.HttpServer.MaxQueueSize"> |
727 | <summary> | 299 | <summary> |
728 | Gives you a change to receive log entries for all internals of the HTTP library. | 300 | Gets or sets maximum number of requests queuing to be handled. |
729 | </summary> | 301 | </summary> |
730 | <remarks> | 302 | <remarks> |
731 | You may not switch log writer after starting the listener. | 303 | <para> |
304 | The WebServer will start turning requests away if response code | ||
305 | <see cref="F:System.Net.HttpStatusCode.ServiceUnavailable"/> to indicate that the server | ||
306 | is too busy to be able to handle the request. | ||
307 | </para> | ||
732 | </remarks> | 308 | </remarks> |
733 | </member> | 309 | </member> |
734 | <member name="P:HttpServer.HttpListenerBase.UseTraceLogs"> | 310 | <member name="E:HttpServer.HttpServer.RealmWanted"> |
735 | <summary> | 311 | <summary> |
736 | True if we should turn on trace logs. | 312 | Realms are used during HTTP authentication. |
313 | Default realm is same as server name. | ||
737 | </summary> | 314 | </summary> |
738 | </member> | 315 | </member> |
739 | <member name="E:HttpServer.HttpListenerBase.ExceptionThrown"> | 316 | <member name="E:HttpServer.HttpServer.ExceptionThrown"> |
740 | <summary> | 317 | <summary> |
741 | Catch exceptions not handled by the listener. | 318 | Let's to receive unhandled exceptions from the threads. |
742 | </summary> | 319 | </summary> |
743 | <remarks> | 320 | <remarks> |
744 | Exceptions will be thrown during debug mode if this event is not used, | 321 | Exceptions will be thrown during debug mode if this event is not used, |
745 | exceptions will be printed to console and suppressed during release mode. | 322 | exceptions will be printed to console and suppressed during release mode. |
746 | </remarks> | 323 | </remarks> |
747 | </member> | 324 | </member> |
748 | <member name="E:HttpServer.HttpListenerBase.RequestReceived"> | 325 | <member name="T:HttpServer.HttpModules.ResourceFileModule"> |
749 | <summary> | 326 | <summary> |
750 | A request have been received from a <see cref="T:HttpServer.IHttpClientContext"/>. | 327 | Serves files that are stored in embedded resources. |
751 | </summary> | 328 | </summary> |
752 | </member> | 329 | </member> |
753 | <member name="T:HttpServer.FormDecoders.MultipartDecoder"> | 330 | <member name="T:HttpServer.HttpModules.HttpModule"> |
754 | <summary> | 331 | <summary> |
755 | 332 | A HttpModule can be used to serve Uri's. The module itself | |
333 | decides if it should serve a Uri or not. In this way, you can | ||
334 | get a very flexible http application since you can let multiple modules | ||
335 | serve almost similar urls. | ||
756 | </summary> | 336 | </summary> |
757 | <remarks> | 337 | <remarks> |
758 | http://www.faqs.org/rfcs/rfc1867.html | 338 | Throw <see cref="T:HttpServer.Exceptions.UnauthorizedException"/> if you are using a <see cref="T:HttpServer.Authentication.AuthenticationModule"/> and want to prompt for user name/password. |
759 | </remarks> | 339 | </remarks> |
760 | </member> | 340 | </member> |
761 | <member name="T:HttpServer.FormDecoders.IFormDecoder"> | 341 | <member name="M:HttpServer.HttpModules.HttpModule.Process(HttpServer.IHttpRequest,HttpServer.IHttpResponse,HttpServer.Sessions.IHttpSession)"> |
762 | <summary> | ||
763 | Interface for form content decoders. | ||
764 | </summary> | ||
765 | </member> | ||
766 | <member name="M:HttpServer.FormDecoders.IFormDecoder.Decode(System.IO.Stream,System.String,System.Text.Encoding)"> | ||
767 | <summary> | ||
768 | |||
769 | </summary> | ||
770 | <param name="stream">Stream containing the content</param> | ||
771 | <param name="contentType">Content type (with any additional info like boundry). Content type is always supplied in lower case</param> | ||
772 | <param name="encoding">Stream enconding</param> | ||
773 | <returns>A http form, or null if content could not be parsed.</returns> | ||
774 | <exception cref="T:System.IO.InvalidDataException">If contents in the stream is not valid input data.</exception> | ||
775 | </member> | ||
776 | <member name="M:HttpServer.FormDecoders.IFormDecoder.CanParse(System.String)"> | ||
777 | <summary> | ||
778 | Checks if the decoder can handle the mime type | ||
779 | </summary> | ||
780 | <param name="contentType">Content type (with any additional info like boundry). Content type is always supplied in lower case.</param> | ||
781 | <returns>True if the decoder can parse the specified content type</returns> | ||
782 | </member> | ||
783 | <member name="F:HttpServer.FormDecoders.MultipartDecoder.MimeType"> | ||
784 | <summary> | ||
785 | multipart/form-data | ||
786 | </summary> | ||
787 | </member> | ||
788 | <member name="F:HttpServer.FormDecoders.MultipartDecoder.FormData"> | ||
789 | <summary> | ||
790 | form-data | ||
791 | </summary> | ||
792 | </member> | ||
793 | <member name="M:HttpServer.FormDecoders.MultipartDecoder.Decode(System.IO.Stream,System.String,System.Text.Encoding)"> | ||
794 | <summary> | ||
795 | |||
796 | </summary> | ||
797 | <param name="stream">Stream containing the content</param> | ||
798 | <param name="contentType">Content type (with any additional info like boundry). Content type is always supplied in lower case</param> | ||
799 | <param name="encoding">Stream enconding</param> | ||
800 | <returns>A http form, or null if content could not be parsed.</returns> | ||
801 | <exception cref="T:System.IO.InvalidDataException">If contents in the stream is not valid input data.</exception> | ||
802 | <exception cref="T:System.ArgumentNullException">If any parameter is null</exception> | ||
803 | </member> | ||
804 | <member name="M:HttpServer.FormDecoders.MultipartDecoder.CanParse(System.String)"> | ||
805 | <summary> | ||
806 | Checks if the decoder can handle the mime type | ||
807 | </summary> | ||
808 | <param name="contentType">Content type (with any additional info like boundry). Content type is always supplied in lower case.</param> | ||
809 | <returns>True if the decoder can parse the specified content type</returns> | ||
810 | </member> | ||
811 | <member name="T:HttpServer.Exceptions.NotFoundException"> | ||
812 | <summary> | ||
813 | The requested resource was not found in the web server. | ||
814 | </summary> | ||
815 | </member> | ||
816 | <member name="M:HttpServer.Exceptions.NotFoundException.#ctor(System.String,System.Exception)"> | ||
817 | <summary> | ||
818 | Create a new exception | ||
819 | </summary> | ||
820 | <param name="message">message describing the error</param> | ||
821 | <param name="inner">inner exception</param> | ||
822 | </member> | ||
823 | <member name="M:HttpServer.Exceptions.NotFoundException.#ctor(System.String)"> | ||
824 | <summary> | ||
825 | Create a new exception | ||
826 | </summary> | ||
827 | <param name="message">message describing the error</param> | ||
828 | </member> | ||
829 | <member name="T:HttpServer.Authentication.AuthenticationHandler"> | ||
830 | <summary> | 342 | <summary> |
831 | Delegate used to let authentication modules authenticate the user name and password. | 343 | Method that process the url |
832 | </summary> | 344 | </summary> |
833 | <param name="realm">Realm that the user want to authenticate in</param> | 345 | <param name="request">Information sent by the browser about the request</param> |
834 | <param name="userName">User name specified by client</param> | 346 | <param name="response">Information that is being sent back to the client.</param> |
835 | <param name="token">Can either be user password or implementation specific token.</param> | 347 | <param name="session">Session used to </param> |
836 | <param name="login">object that will be stored in a session variable called <see cref="F:HttpServer.Authentication.AuthenticationModule.AuthenticationTag"/> if authentication was successful.</param> | 348 | <returns>true if this module handled the request.</returns> |
837 | <exception cref="T:HttpServer.Exceptions.ForbiddenException">throw forbidden exception if too many attempts have been made.</exception> | ||
838 | <remarks> | ||
839 | <para> | ||
840 | Use <see cref="P:HttpServer.Authentication.DigestAuthentication.TokenIsHA1"/> to specify that the token is a HA1 token. (MD5 generated | ||
841 | string from realm, user name and password); Md5String(userName + ":" + realm + ":" + password); | ||
842 | </para> | ||
843 | </remarks> | ||
844 | </member> | 349 | </member> |
845 | <member name="T:HttpServer.Authentication.AuthenticationRequiredHandler"> | 350 | <member name="M:HttpServer.HttpModules.HttpModule.SetLogWriter(HttpServer.ILogWriter)"> |
846 | <summary> | 351 | <summary> |
847 | Let's you decide on a system level if authentication is required. | 352 | Set the log writer to use. |
848 | </summary> | 353 | </summary> |
849 | <param name="request">HTTP request from client</param> | 354 | <param name="writer">logwriter to use.</param> |
850 | <returns>true if user should be authenticated.</returns> | ||
851 | <remarks>throw <see cref="T:HttpServer.Exceptions.ForbiddenException"/> if no more attempts are allowed.</remarks> | ||
852 | <exception cref="T:HttpServer.Exceptions.ForbiddenException">If no more attempts are allowed</exception> | ||
853 | </member> | 355 | </member> |
854 | <member name="T:HttpServer.Authentication.AuthenticationModule"> | 356 | <member name="M:HttpServer.HttpModules.HttpModule.Write(HttpServer.LogPrio,System.String)"> |
855 | <summary> | 357 | <summary> |
856 | Authentication modules are used to implement different | 358 | Log something. |
857 | kind of HTTP authentication. | ||
858 | </summary> | 359 | </summary> |
360 | <param name="prio">importance of log message</param> | ||
361 | <param name="message">message</param> | ||
859 | </member> | 362 | </member> |
860 | <member name="F:HttpServer.Authentication.AuthenticationModule.AuthenticationTag"> | 363 | <member name="P:HttpServer.HttpModules.HttpModule.AllowSecondaryProcessing"> |
861 | <summary> | 364 | <summary> |
862 | Tag used for authentication. | 365 | If true specifies that the module doesn't consume the processing of a request so that subsequent modules |
366 | can continue processing afterwards. Default is false. | ||
863 | </summary> | 367 | </summary> |
864 | </member> | 368 | </member> |
865 | <member name="M:HttpServer.Authentication.AuthenticationModule.#ctor(HttpServer.Authentication.AuthenticationHandler,HttpServer.Authentication.AuthenticationRequiredHandler)"> | 369 | <member name="M:HttpServer.HttpModules.ResourceFileModule.#ctor"> |
866 | <summary> | 370 | <summary> |
867 | Initializes a new instance of the <see cref="T:HttpServer.Authentication.AuthenticationModule"/> class. | 371 | Initializes a new instance of the <see cref="T:HttpServer.HttpModules.ResourceFileModule"/> class. |
372 | Runs <see cref="M:HttpServer.HttpModules.ResourceFileModule.AddDefaultMimeTypes"/> to make sure the basic mime types are available, they can be cleared later | ||
373 | through the use of <see cref="P:HttpServer.HttpModules.ResourceFileModule.MimeTypes"/> if desired. | ||
868 | </summary> | 374 | </summary> |
869 | <param name="authenticator">Delegate used to provide information used during authentication.</param> | ||
870 | <param name="authenticationRequiredHandler">Delegate used to determine if authentication is required (may be null).</param> | ||
871 | </member> | 375 | </member> |
872 | <member name="M:HttpServer.Authentication.AuthenticationModule.#ctor(HttpServer.Authentication.AuthenticationHandler)"> | 376 | <member name="M:HttpServer.HttpModules.ResourceFileModule.#ctor(HttpServer.ILogWriter)"> |
873 | <summary> | 377 | <summary> |
874 | Initializes a new instance of the <see cref="T:HttpServer.Authentication.AuthenticationModule"/> class. | 378 | Initializes a new instance of the <see cref="T:HttpServer.HttpModules.ResourceFileModule"/> class. |
379 | Runs <see cref="M:HttpServer.HttpModules.ResourceFileModule.AddDefaultMimeTypes"/> to make sure the basic mime types are available, they can be cleared later | ||
380 | through the use of <see cref="P:HttpServer.HttpModules.ResourceFileModule.MimeTypes"/> if desired. | ||
875 | </summary> | 381 | </summary> |
876 | <param name="authenticator">Delegate used to provide information used during authentication.</param> | 382 | <param name="logWriter">The log writer to use when logging events</param> |
877 | </member> | 383 | </member> |
878 | <member name="M:HttpServer.Authentication.AuthenticationModule.CreateResponse(System.String,System.Object[])"> | 384 | <member name="M:HttpServer.HttpModules.ResourceFileModule.AddDefaultMimeTypes"> |
879 | <summary> | 385 | <summary> |
880 | Create a response that can be sent in the WWW-Authenticate header. | 386 | Mimtypes that this class can handle per default |
881 | </summary> | 387 | </summary> |
882 | <param name="realm">Realm that the user should authenticate in</param> | ||
883 | <param name="options">Array with optional options.</param> | ||
884 | <returns>A correct authentication request.</returns> | ||
885 | <exception cref="T:System.ArgumentNullException">If realm is empty or null.</exception> | ||
886 | </member> | 388 | </member> |
887 | <member name="M:HttpServer.Authentication.AuthenticationModule.Authenticate(System.String,System.String,System.String,System.Object[])"> | 389 | <member name="M:HttpServer.HttpModules.ResourceFileModule.AddResources(System.String,System.Reflection.Assembly,System.String)"> |
888 | <summary> | 390 | <summary> |
889 | An authentication response have been received from the web browser. | 391 | Loads resources from a namespace in the given assembly to an uri |
890 | Check if it's correct | ||
891 | </summary> | 392 | </summary> |
892 | <param name="authenticationHeader">Contents from the Authorization header</param> | 393 | <param name="toUri">The uri to map the resources to</param> |
893 | <param name="realm">Realm that should be authenticated</param> | 394 | <param name="fromAssembly">The assembly in which the resources reside</param> |
894 | <param name="httpVerb">GET/POST/PUT/DELETE etc.</param> | 395 | <param name="fromNamespace">The namespace from which to load the resources</param> |
895 | <param name="options">options to specific implementations</param> | 396 | <usage> |
896 | <returns>Authentication object that is stored for the request. A user class or something like that.</returns> | 397 | resourceLoader.LoadResources("/user/", typeof(User).Assembly, "MyLib.Models.User.Views"); |
897 | <exception cref="T:System.ArgumentException">if <paramref name="authenticationHeader"/> is invalid</exception> | 398 | |
898 | <exception cref="T:System.ArgumentNullException">If any of the parameters is empty or null.</exception> | 399 | will make ie the resource MyLib.Models.User.Views.stylesheet.css accessible via /user/stylesheet.css |
400 | </usage> | ||
401 | <returns>The amount of loaded files, giving you the possibility of making sure the resources needed gets loaded</returns> | ||
899 | </member> | 402 | </member> |
900 | <member name="M:HttpServer.Authentication.AuthenticationModule.CheckAuthentication(System.String,System.String,System.String@,System.Object@)"> | 403 | <member name="M:HttpServer.HttpModules.ResourceFileModule.CanHandle(HttpServer.IHttpRequest)"> |
901 | <summary> | 404 | <summary> |
902 | Used to invoke the authentication delegate that is used to lookup the user name/realm. | 405 | Returns true if the module can handle the request |
903 | </summary> | 406 | </summary> |
904 | <param name="realm">Realm (domain) that user want to authenticate in</param> | ||
905 | <param name="userName">User name</param> | ||
906 | <param name="password">Password used for validation. Some implementations got password in clear text, they are then sent to client.</param> | ||
907 | <param name="login">object that will be stored in the request to help you identify the user if authentication was successful.</param> | ||
908 | <returns>true if authentication was successful</returns> | ||
909 | </member> | 407 | </member> |
910 | <member name="M:HttpServer.Authentication.AuthenticationModule.AuthenticationRequired(HttpServer.IHttpRequest)"> | 408 | <member name="M:HttpServer.HttpModules.ResourceFileModule.Process(HttpServer.IHttpRequest,HttpServer.IHttpResponse,HttpServer.Sessions.IHttpSession)"> |
911 | <summary> | 409 | <summary> |
912 | Determines if authentication is required. | 410 | Method that process the url |
913 | </summary> | 411 | </summary> |
914 | <param name="request">HTTP request from browser</param> | 412 | <param name="request">Information sent by the browser about the request</param> |
915 | <returns>true if user should be authenticated.</returns> | 413 | <param name="response">Information that is being sent back to the client.</param> |
916 | <remarks>throw <see cref="T:HttpServer.Exceptions.ForbiddenException"/> from your delegate if no more attempts are allowed.</remarks> | 414 | <param name="session">Session used to </param> |
917 | <exception cref="T:HttpServer.Exceptions.ForbiddenException">If no more attempts are allowed</exception> | 415 | <returns>true if this module handled the request.</returns> |
918 | </member> | 416 | </member> |
919 | <member name="P:HttpServer.Authentication.AuthenticationModule.Name"> | 417 | <member name="P:HttpServer.HttpModules.ResourceFileModule.MimeTypes"> |
920 | <summary> | 418 | <summary> |
921 | name used in HTTP request. | 419 | List with all mime-type that are allowed. |
922 | </summary> | 420 | </summary> |
421 | <remarks>All other mime types will result in a Forbidden http status code.</remarks> | ||
923 | </member> | 422 | </member> |
924 | <member name="T:HttpServer.HttpInput"> | 423 | <member name="T:HttpServer.HttpInput"> |
925 | <summary> | 424 | <summary> |
@@ -1062,444 +561,216 @@ | |||
1062 | <param name="name"></param> | 561 | <param name="name"></param> |
1063 | <returns>Returns <see cref="F:HttpServer.HttpInputItem.Empty"/> if item was not found.</returns> | 562 | <returns>Returns <see cref="F:HttpServer.HttpInputItem.Empty"/> if item was not found.</returns> |
1064 | </member> | 563 | </member> |
1065 | <member name="T:HttpServer.Check"> | 564 | <member name="T:HttpServer.Exceptions.ForbiddenException"> |
1066 | <summary> | ||
1067 | Small design by contract implementation. | ||
1068 | </summary> | ||
1069 | </member> | ||
1070 | <member name="M:HttpServer.Check.NotEmpty(System.String,System.String)"> | ||
1071 | <summary> | ||
1072 | Check whether a parameter is empty. | ||
1073 | </summary> | ||
1074 | <param name="value">Parameter value</param> | ||
1075 | <param name="parameterOrErrorMessage">Parameter name, or error description.</param> | ||
1076 | <exception cref="T:System.ArgumentException">value is empty.</exception> | ||
1077 | </member> | ||
1078 | <member name="M:HttpServer.Check.Require(System.Object,System.String)"> | ||
1079 | <summary> | ||
1080 | Checks whether a parameter is null. | ||
1081 | </summary> | ||
1082 | <param name="value">Parameter value</param> | ||
1083 | <param name="parameterOrErrorMessage">Parameter name, or error description.</param> | ||
1084 | <exception cref="T:System.ArgumentNullException">value is null.</exception> | ||
1085 | </member> | ||
1086 | <member name="M:HttpServer.Check.Min(System.Int32,System.Object,System.String)"> | ||
1087 | <summary> | ||
1088 | Checks whether a parameter is null. | ||
1089 | </summary> | ||
1090 | <param name="minValue"></param> | ||
1091 | <param name="value">Parameter value</param> | ||
1092 | <param name="parameterOrErrorMessage">Parameter name, or error description.</param> | ||
1093 | <exception cref="T:System.ArgumentException">value is null.</exception> | ||
1094 | </member> | ||
1095 | <member name="T:HttpServer.Method"> | ||
1096 | <summary> | ||
1097 | Contains all HTTP Methods (according to the HTTP 1.1 specification) | ||
1098 | <para> | ||
1099 | See: http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html | ||
1100 | </para> | ||
1101 | </summary> | ||
1102 | </member> | ||
1103 | <member name="F:HttpServer.Method.Delete"> | ||
1104 | <summary> | ||
1105 | The DELETE method requests that the origin server delete the resource identified by the Request-URI. | ||
1106 | </summary> | ||
1107 | <remarks> | ||
1108 | <para> | ||
1109 | This method MAY be overridden by human intervention (or other means) on the origin server. | ||
1110 | The client cannot be guaranteed that the operation has been carried out, even if the status code | ||
1111 | returned from the origin server indicates that the action has been completed successfully. | ||
1112 | </para> | ||
1113 | <para> | ||
1114 | However, the server SHOULD NOT indicate success unless, at the time the response is given, | ||
1115 | it intends to delete the resource or move it to an inaccessible location. | ||
1116 | </para> | ||
1117 | <para> | ||
1118 | A successful response SHOULD be 200 (OK) if the response includes an entity describing the status, | ||
1119 | 202 (Accepted) if the action has not yet been enacted, | ||
1120 | or 204 (No Content) if the action has been enacted but the response does not include an entity. | ||
1121 | </para> | ||
1122 | <para> | ||
1123 | If the request passes through a cache and the Request-URI identifies one or more currently cached entities, | ||
1124 | those entries SHOULD be treated as stale. Responses to this method are not cacheable. | ||
1125 | </para> | ||
1126 | </remarks> | ||
1127 | </member> | ||
1128 | <member name="F:HttpServer.Method.Get"> | ||
1129 | <summary> | ||
1130 | The GET method means retrieve whatever information (in the form of an entity) is identified by the Request-URI. | ||
1131 | </summary> | ||
1132 | <remarks> | ||
1133 | <para> | ||
1134 | If the Request-URI refers to a data-producing process, it is the produced data which shall be returned as the | ||
1135 | entity in the response and not the source text of the process, unless that text happens to be the output of the process. | ||
1136 | </para> | ||
1137 | <para> | ||
1138 | The semantics of the GET method change to a "conditional GET" if the request message includes an | ||
1139 | If-Modified-Since, If-Unmodified-Since, If-Match, If-None-Match, or If-Range header field. | ||
1140 | A conditional GET method requests that the entity be transferred only under the circumstances described | ||
1141 | by the conditional header field(s). The conditional GET method is intended to reduce unnecessary network | ||
1142 | usage by allowing cached entities to be refreshed without requiring multiple requests or transferring | ||
1143 | data already held by the client. | ||
1144 | </para> | ||
1145 | </remarks> | ||
1146 | </member> | ||
1147 | <member name="F:HttpServer.Method.Header"> | ||
1148 | <summary> | 565 | <summary> |
1149 | The HEAD method is identical to GET except that the server MUST NOT return a message-body in the response. | 566 | The server understood the request, but is refusing to fulfill it. |
1150 | </summary> | 567 | Authorization will not help and the request SHOULD NOT be repeated. |
1151 | <remarks> | 568 | If the request method was not HEAD and the server wishes to make public why the request has not been fulfilled, |
1152 | The meta information contained in the HTTP headers in response to a HEAD request SHOULD be identical to the | 569 | it SHOULD describe the reason for the refusal in the entity. If the server does not wish to make this information |
1153 | information sent in response to a GET request. This method can be used for obtaining meta information about | 570 | available to the client, the status code 404 (Not Found) can be used instead. |
1154 | the entity implied by the request without transferring the entity-body itself. | ||
1155 | 571 | ||
1156 | This method is often used for testing hypertext links for validity, accessibility, and recent modification. | 572 | Text taken from: http://www.submissionchamber.com/help-guides/error-codes.php |
1157 | </remarks> | ||
1158 | </member> | ||
1159 | <member name="F:HttpServer.Method.Options"> | ||
1160 | <summary> | ||
1161 | <para>The OPTIONS method represents a request for information about the communication options available on the request/response chain identified by the Request-URI.</para> | ||
1162 | </summary> | 573 | </summary> |
1163 | <remarks> | ||
1164 | <para>This method allows the client to determine the options and/or requirements associated with a resource, or the capabilities of a server, without implying a resource action or initiating a resource retrieval.</para> | ||
1165 | </remarks> | ||
1166 | </member> | 574 | </member> |
1167 | <member name="F:HttpServer.Method.Post"> | 575 | <member name="T:HttpServer.Exceptions.HttpException"> |
1168 | <summary> | 576 | <summary> |
1169 | The POST method is used to request that the origin server accept the entity enclosed | 577 | All HTTP based exceptions will derive this class. |
1170 | in the request as a new subordinate of the resource identified by the Request-URI in the Request-Line. | ||
1171 | </summary> | 578 | </summary> |
1172 | <remarks> | ||
1173 | POST is designed to allow a uniform method to cover the following functions: | ||
1174 | <list type="bullet"> | ||
1175 | <item> | ||
1176 | Annotation of existing resources; | ||
1177 | </item><item> | ||
1178 | Posting a message to a bulletin board, newsgroup, mailing list, or similar group of articles; | ||
1179 | </item><item> | ||
1180 | Providing a block of data, such as the result of submitting a form, to a data-handling process; | ||
1181 | </item><item> | ||
1182 | Extending a database through an append operation. | ||
1183 | </item> | ||
1184 | </list> | ||
1185 | <para> | ||
1186 | If a resource has been created on the origin server, the response SHOULD be 201 (Created) and | ||
1187 | contain an entity which describes the status of the request and refers to the new resource, and a | ||
1188 | Location header (see section 14.30). | ||
1189 | </para> | ||
1190 | <para> | ||
1191 | The action performed by the POST method might not result in a resource that can be identified by a URI. | ||
1192 | In this case, either 200 (OK) or 204 (No Content) is the appropriate response status, depending on | ||
1193 | whether or not the response includes an entity that describes the result. | ||
1194 | </para><para> | ||
1195 | Responses to this method are not cacheable, unless the response includes appropriate Cache-Control | ||
1196 | or Expires header fields. However, the 303 (See Other) response can be used to direct the user agent | ||
1197 | to retrieve a cacheable resource. | ||
1198 | </para> | ||
1199 | </remarks> | ||
1200 | </member> | 579 | </member> |
1201 | <member name="F:HttpServer.Method.Put"> | 580 | <member name="M:HttpServer.Exceptions.HttpException.#ctor(System.Net.HttpStatusCode,System.String)"> |
1202 | <summary> | 581 | <summary> |
1203 | The PUT method requests that the enclosed entity be stored under the supplied Request-URI. | 582 | Create a new HttpException |
1204 | </summary> | 583 | </summary> |
1205 | <remarks> | 584 | <param name="code">http status code (sent in the response)</param> |
1206 | <list type="bullet"> | 585 | <param name="message">error description</param> |
1207 | <item> | ||
1208 | If the Request-URI refers to an already existing resource, the enclosed entity SHOULD be considered as a | ||
1209 | modified version of the one residing on the origin server. | ||
1210 | </item><item> | ||
1211 | If the Request-URI does not point to an existing resource, and that URI is capable of being defined as a new | ||
1212 | resource by the requesting user agent, the origin server can create the resource with that URI. | ||
1213 | </item><item> | ||
1214 | If a new resource is created, the origin server MUST inform the user agent via the 201 (Created) response. | ||
1215 | </item><item> | ||
1216 | If an existing resource is modified, either the 200 (OK) or 204 (No Content) response codes SHOULD be sent to | ||
1217 | indicate successful completion of the request. | ||
1218 | </item><item> | ||
1219 | If the resource could not be created or modified with the Request-URI, an appropriate error response SHOULD be | ||
1220 | given that reflects the nature of the problem. | ||
1221 | </item> | ||
1222 | </list> | ||
1223 | <para> | ||
1224 | The recipient of the entity MUST NOT ignore any Content-* (e.g. Content-Range) headers that it does not | ||
1225 | understand or implement and MUST return a 501 (Not Implemented) response in such cases. | ||
1226 | </para> | ||
1227 | </remarks> | ||
1228 | </member> | 586 | </member> |
1229 | <member name="F:HttpServer.Method.Trace"> | 587 | <member name="M:HttpServer.Exceptions.HttpException.#ctor(System.Net.HttpStatusCode,System.String,System.Exception)"> |
1230 | <summary> | 588 | <summary> |
1231 | The TRACE method is used to invoke a remote, application-layer loop- back of the request message. | 589 | Create a new HttpException |
1232 | </summary> | 590 | </summary> |
591 | <param name="code">http status code (sent in the response)</param> | ||
592 | <param name="message">error description</param> | ||
593 | <param name="inner">inner exception</param> | ||
1233 | </member> | 594 | </member> |
1234 | <member name="T:HttpServer.Methods"> | 595 | <member name="P:HttpServer.Exceptions.HttpException.HttpStatusCode"> |
1235 | <summary> | 596 | <summary> |
1236 | Contains all HTTP Methods (according to the HTTP 1.1 specification) | 597 | status code to use in the response. |
1237 | <para> | ||
1238 | See: http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html | ||
1239 | </para> | ||
1240 | </summary> | 598 | </summary> |
1241 | </member> | 599 | </member> |
1242 | <member name="F:HttpServer.Methods.Delete"> | 600 | <member name="M:HttpServer.Exceptions.ForbiddenException.#ctor(System.String)"> |
1243 | <summary> | 601 | <summary> |
1244 | The DELETE method requests that the origin server delete the resource identified by the Request-URI. | 602 | Initializes a new instance of the <see cref="T:HttpServer.Exceptions.ForbiddenException"/> class. |
1245 | </summary> | 603 | </summary> |
1246 | <remarks> | 604 | <param name="errorMsg">error message</param> |
1247 | <para> | ||
1248 | This method MAY be overridden by human intervention (or other means) on the origin server. | ||
1249 | The client cannot be guaranteed that the operation has been carried out, even if the status code | ||
1250 | returned from the origin server indicates that the action has been completed successfully. | ||
1251 | </para> | ||
1252 | <para> | ||
1253 | However, the server SHOULD NOT indicate success unless, at the time the response is given, | ||
1254 | it intends to delete the resource or move it to an inaccessible location. | ||
1255 | </para> | ||
1256 | <para> | ||
1257 | A successful response SHOULD be 200 (OK) if the response includes an entity describing the status, | ||
1258 | 202 (Accepted) if the action has not yet been enacted, | ||
1259 | or 204 (No Content) if the action has been enacted but the response does not include an entity. | ||
1260 | </para> | ||
1261 | <para> | ||
1262 | If the request passes through a cache and the Request-URI identifies one or more currently cached entities, | ||
1263 | those entries SHOULD be treated as stale. Responses to this method are not cacheable. | ||
1264 | </para> | ||
1265 | </remarks> | ||
1266 | </member> | 605 | </member> |
1267 | <member name="F:HttpServer.Methods.Get"> | 606 | <member name="T:HttpServer.RequestCookies"> |
1268 | <summary> | 607 | <summary> |
1269 | The GET method means retrieve whatever information (in the form of an entity) is identified by the Request-URI. | 608 | This class is created as a wrapper, since there are two different cookie types in .Net (Cookie and HttpCookie). |
609 | The framework might switch class in the future and we dont want to have to replace all instances | ||
1270 | </summary> | 610 | </summary> |
1271 | <remarks> | ||
1272 | <para> | ||
1273 | If the Request-URI refers to a data-producing process, it is the produced data which shall be returned as the | ||
1274 | entity in the response and not the source text of the process, unless that text happens to be the output of the process. | ||
1275 | </para> | ||
1276 | <para> | ||
1277 | The semantics of the GET method change to a "conditional GET" if the request message includes an | ||
1278 | If-Modified-Since, If-Unmodified-Since, If-Match, If-None-Match, or If-Range header field. | ||
1279 | A conditional GET method requests that the entity be transferred only under the circumstances described | ||
1280 | by the conditional header field(s). The conditional GET method is intended to reduce unnecessary network | ||
1281 | usage by allowing cached entities to be refreshed without requiring multiple requests or transferring | ||
1282 | data already held by the client. | ||
1283 | </para> | ||
1284 | </remarks> | ||
1285 | </member> | 611 | </member> |
1286 | <member name="F:HttpServer.Methods.Header"> | 612 | <member name="M:HttpServer.RequestCookies.#ctor(System.String)"> |
1287 | <summary> | 613 | <summary> |
1288 | The HEAD method is identical to GET except that the server MUST NOT return a message-body in the response. | 614 | Let's copy all the cookies. |
1289 | </summary> | 615 | </summary> |
1290 | <remarks> | 616 | <param name="cookies">value from cookie header.</param> |
1291 | The meta information contained in the HTTP headers in response to a HEAD request SHOULD be identical to the | ||
1292 | information sent in response to a GET request. This method can be used for obtaining meta information about | ||
1293 | the entity implied by the request without transferring the entity-body itself. | ||
1294 | |||
1295 | This method is often used for testing hypertext links for validity, accessibility, and recent modification. | ||
1296 | </remarks> | ||
1297 | </member> | 617 | </member> |
1298 | <member name="F:HttpServer.Methods.Options"> | 618 | <member name="M:HttpServer.RequestCookies.Add(HttpServer.RequestCookie)"> |
1299 | <summary> | 619 | <summary> |
1300 | <para>The OPTIONS method represents a request for information about the communication options available on the request/response chain identified by the Request-URI.</para> | 620 | Adds a cookie in the collection. |
1301 | </summary> | 621 | </summary> |
1302 | <remarks> | 622 | <param name="cookie">cookie to add</param> |
1303 | <para>This method allows the client to determine the options and/or requirements associated with a resource, or the capabilities of a server, without implying a resource action or initiating a resource retrieval.</para> | 623 | <exception cref="T:System.ArgumentNullException">cookie is null</exception> |
1304 | </remarks> | ||
1305 | </member> | 624 | </member> |
1306 | <member name="F:HttpServer.Methods.Post"> | 625 | <member name="M:HttpServer.RequestCookies.GetEnumerator"> |
1307 | <summary> | 626 | <summary> |
1308 | The POST method is used to request that the origin server accept the entity enclosed | 627 | Gets a collection enumerator on the cookie list. |
1309 | in the request as a new subordinate of the resource identified by the Request-URI in the Request-Line. | ||
1310 | </summary> | 628 | </summary> |
1311 | <remarks> | 629 | <returns>collection enumerator</returns> |
1312 | POST is designed to allow a uniform method to cover the following functions: | ||
1313 | <list type="bullet"> | ||
1314 | <item> | ||
1315 | Annotation of existing resources; | ||
1316 | </item><item> | ||
1317 | Posting a message to a bulletin board, newsgroup, mailing list, or similar group of articles; | ||
1318 | </item><item> | ||
1319 | Providing a block of data, such as the result of submitting a form, to a data-handling process; | ||
1320 | </item><item> | ||
1321 | Extending a database through an append operation. | ||
1322 | </item> | ||
1323 | </list> | ||
1324 | <para> | ||
1325 | If a resource has been created on the origin server, the response SHOULD be 201 (Created) and | ||
1326 | contain an entity which describes the status of the request and refers to the new resource, and a | ||
1327 | Location header (see section 14.30). | ||
1328 | </para> | ||
1329 | <para> | ||
1330 | The action performed by the POST method might not result in a resource that can be identified by a URI. | ||
1331 | In this case, either 200 (OK) or 204 (No Content) is the appropriate response status, depending on | ||
1332 | whether or not the response includes an entity that describes the result. | ||
1333 | </para><para> | ||
1334 | Responses to this method are not cacheable, unless the response includes appropriate Cache-Control | ||
1335 | or Expires header fields. However, the 303 (See Other) response can be used to direct the user agent | ||
1336 | to retrieve a cacheable resource. | ||
1337 | </para> | ||
1338 | </remarks> | ||
1339 | </member> | 630 | </member> |
1340 | <member name="F:HttpServer.Methods.Put"> | 631 | <member name="M:HttpServer.RequestCookies.Clear"> |
1341 | <summary> | 632 | <summary> |
1342 | The PUT method requests that the enclosed entity be stored under the supplied Request-URI. | 633 | Remove all cookies. |
1343 | </summary> | 634 | </summary> |
1344 | <remarks> | ||
1345 | <list type="bullet"> | ||
1346 | <item> | ||
1347 | If the Request-URI refers to an already existing resource, the enclosed entity SHOULD be considered as a | ||
1348 | modified version of the one residing on the origin server. | ||
1349 | </item><item> | ||
1350 | If the Request-URI does not point to an existing resource, and that URI is capable of being defined as a new | ||
1351 | resource by the requesting user agent, the origin server can create the resource with that URI. | ||
1352 | </item><item> | ||
1353 | If a new resource is created, the origin server MUST inform the user agent via the 201 (Created) response. | ||
1354 | </item><item> | ||
1355 | If an existing resource is modified, either the 200 (OK) or 204 (No Content) response codes SHOULD be sent to | ||
1356 | indicate successful completion of the request. | ||
1357 | </item><item> | ||
1358 | If the resource could not be created or modified with the Request-URI, an appropriate error response SHOULD be | ||
1359 | given that reflects the nature of the problem. | ||
1360 | </item> | ||
1361 | </list> | ||
1362 | <para> | ||
1363 | The recipient of the entity MUST NOT ignore any Content-* (e.g. Content-Range) headers that it does not | ||
1364 | understand or implement and MUST return a 501 (Not Implemented) response in such cases. | ||
1365 | </para> | ||
1366 | </remarks> | ||
1367 | </member> | 635 | </member> |
1368 | <member name="F:HttpServer.Methods.Trace"> | 636 | <member name="M:HttpServer.RequestCookies.System#Collections#Generic#IEnumerable{HttpServer#RequestCookie}#GetEnumerator"> |
1369 | <summary> | 637 | <summary> |
1370 | The TRACE method is used to invoke a remote, application-layer loop- back of the request message. | 638 | Returns an enumerator that iterates through the collection. |
1371 | </summary> | 639 | </summary> |
640 | |||
641 | <returns> | ||
642 | A <see cref="T:System.Collections.Generic.IEnumerator`1"></see> that can be used to iterate through the collection. | ||
643 | </returns> | ||
644 | <filterpriority>1</filterpriority> | ||
1372 | </member> | 645 | </member> |
1373 | <member name="T:HttpServer.LogPrio"> | 646 | <member name="M:HttpServer.RequestCookies.Remove(System.String)"> |
1374 | <summary> | 647 | <summary> |
1375 | Priority for log entries | 648 | Remove a cookie from the collection. |
1376 | </summary> | 649 | </summary> |
1377 | <seealso cref="T:HttpServer.ILogWriter"/> | 650 | <param name="cookieName">Name of cookie.</param> |
1378 | </member> | 651 | </member> |
1379 | <member name="F:HttpServer.LogPrio.Trace"> | 652 | <member name="P:HttpServer.RequestCookies.Count"> |
1380 | <summary> | 653 | <summary> |
1381 | Very detailed logs to be able to follow the flow of the program. | 654 | Gets the count of cookies in the collection. |
1382 | </summary> | 655 | </summary> |
1383 | </member> | 656 | </member> |
1384 | <member name="F:HttpServer.LogPrio.Debug"> | 657 | <member name="P:HttpServer.RequestCookies.Item(System.String)"> |
1385 | <summary> | 658 | <summary> |
1386 | Logs to help debug errors in the application | 659 | Gets the cookie of a given identifier (null if not existing). |
1387 | </summary> | 660 | </summary> |
1388 | </member> | 661 | </member> |
1389 | <member name="F:HttpServer.LogPrio.Info"> | 662 | <member name="T:HttpServer.IHttpClientContext"> |
1390 | <summary> | 663 | <summary> |
1391 | Information to be able to keep track of state changes etc. | 664 | Contains a connection to a browser/client. |
1392 | </summary> | 665 | </summary> |
1393 | </member> | 666 | </member> |
1394 | <member name="F:HttpServer.LogPrio.Warning"> | 667 | <member name="M:HttpServer.IHttpClientContext.Disconnect(System.Net.Sockets.SocketError)"> |
1395 | <summary> | 668 | <summary> |
1396 | Something did not go as we expected, but it's no problem. | 669 | Disconnect from client |
1397 | </summary> | 670 | </summary> |
671 | <param name="error">error to report in the <see cref="E:HttpServer.IHttpClientContext.Disconnected"/> event.</param> | ||
1398 | </member> | 672 | </member> |
1399 | <member name="F:HttpServer.LogPrio.Error"> | 673 | <member name="M:HttpServer.IHttpClientContext.Respond(System.String,System.Net.HttpStatusCode,System.String,System.String,System.String)"> |
1400 | <summary> | 674 | <summary> |
1401 | Something that should not fail failed, but we can still keep | 675 | Send a response. |
1402 | on going. | ||
1403 | </summary> | 676 | </summary> |
677 | <param name="httpVersion">Either <see cref="F:HttpServer.HttpHelper.HTTP10"/> or <see cref="F:HttpServer.HttpHelper.HTTP11"/></param> | ||
678 | <param name="statusCode">HTTP status code</param> | ||
679 | <param name="reason">reason for the status code.</param> | ||
680 | <param name="body">HTML body contents, can be null or empty.</param> | ||
681 | <param name="contentType">A content type to return the body as, i.e. 'text/html' or 'text/plain', defaults to 'text/html' if null or empty</param> | ||
682 | <exception cref="T:System.ArgumentException">If <paramref name="httpVersion"/> is invalid.</exception> | ||
1404 | </member> | 683 | </member> |
1405 | <member name="F:HttpServer.LogPrio.Fatal"> | 684 | <member name="M:HttpServer.IHttpClientContext.Respond(System.String,System.Net.HttpStatusCode,System.String)"> |
1406 | <summary> | 685 | <summary> |
1407 | Something failed, and we cannot handle it properly. | 686 | Send a response. |
1408 | </summary> | 687 | </summary> |
688 | <param name="httpVersion">Either <see cref="F:HttpServer.HttpHelper.HTTP10"/> or <see cref="F:HttpServer.HttpHelper.HTTP11"/></param> | ||
689 | <param name="statusCode">HTTP status code</param> | ||
690 | <param name="reason">reason for the status code.</param> | ||
1409 | </member> | 691 | </member> |
1410 | <member name="T:HttpServer.ILogWriter"> | 692 | <member name="M:HttpServer.IHttpClientContext.Respond(System.String)"> |
1411 | <summary> | 693 | <summary> |
1412 | Interface used to write to log files. | 694 | Send a response. |
1413 | </summary> | 695 | </summary> |
696 | <exception cref="T:System.ArgumentNullException"></exception> | ||
1414 | </member> | 697 | </member> |
1415 | <member name="M:HttpServer.ILogWriter.Write(System.Object,HttpServer.LogPrio,System.String)"> | 698 | <member name="M:HttpServer.IHttpClientContext.Send(System.Byte[])"> |
1416 | <summary> | 699 | <summary> |
1417 | Write an entry to the log file. | 700 | send a whole buffer |
1418 | </summary> | 701 | </summary> |
1419 | <param name="source">object that is writing to the log</param> | 702 | <param name="buffer">buffer to send</param> |
1420 | <param name="priority">importance of the log message</param> | 703 | <exception cref="T:System.ArgumentNullException"></exception> |
1421 | <param name="message">the message</param> | ||
1422 | </member> | 704 | </member> |
1423 | <member name="T:HttpServer.ConsoleLogWriter"> | 705 | <member name="M:HttpServer.IHttpClientContext.Send(System.Byte[],System.Int32,System.Int32)"> |
1424 | <summary> | 706 | <summary> |
1425 | This class writes to the console. It colors the output depending on the logprio and includes a 3-level stacktrace (in debug mode) | 707 | Send data using the stream |
1426 | </summary> | 708 | </summary> |
1427 | <seealso cref="T:HttpServer.ILogWriter"/> | 709 | <param name="buffer">Contains data to send</param> |
710 | <param name="offset">Start position in buffer</param> | ||
711 | <param name="size">number of bytes to send</param> | ||
712 | <exception cref="T:System.ArgumentNullException"></exception> | ||
713 | <exception cref="T:System.ArgumentOutOfRangeException"></exception> | ||
1428 | </member> | 714 | </member> |
1429 | <member name="F:HttpServer.ConsoleLogWriter.Instance"> | 715 | <member name="M:HttpServer.IHttpClientContext.Close"> |
1430 | <summary> | 716 | <summary> |
1431 | The actual instance of this class. | 717 | Closes the streams and disposes of the unmanaged resources |
1432 | </summary> | 718 | </summary> |
1433 | </member> | 719 | </member> |
1434 | <member name="M:HttpServer.ConsoleLogWriter.Write(System.Object,HttpServer.LogPrio,System.String)"> | 720 | <member name="P:HttpServer.IHttpClientContext.Secured"> |
1435 | <summary> | 721 | <summary> |
1436 | Logwriters the specified source. | 722 | Using SSL or other encryption method. |
1437 | </summary> | 723 | </summary> |
1438 | <param name="source">object that wrote the logentry.</param> | ||
1439 | <param name="prio">Importance of the log message</param> | ||
1440 | <param name="message">The message.</param> | ||
1441 | </member> | 724 | </member> |
1442 | <member name="M:HttpServer.ConsoleLogWriter.GetColor(HttpServer.LogPrio)"> | 725 | <member name="P:HttpServer.IHttpClientContext.IsSecured"> |
1443 | <summary> | 726 | <summary> |
1444 | Get color for the specified logprio | 727 | Using SSL or other encryption method. |
1445 | </summary> | 728 | </summary> |
1446 | <param name="prio">prio for the log entry</param> | ||
1447 | <returns>A <see cref="T:System.ConsoleColor"/> for the prio</returns> | ||
1448 | </member> | 729 | </member> |
1449 | <member name="T:HttpServer.NullLogWriter"> | 730 | <member name="E:HttpServer.IHttpClientContext.Disconnected"> |
1450 | <summary> | 731 | <summary> |
1451 | Default log writer, writes everything to null (nowhere). | 732 | The context have been disconnected. |
1452 | </summary> | 733 | </summary> |
1453 | <seealso cref="T:HttpServer.ILogWriter"/> | 734 | <remarks> |
735 | Event can be used to clean up a context, or to reuse it. | ||
736 | </remarks> | ||
1454 | </member> | 737 | </member> |
1455 | <member name="F:HttpServer.NullLogWriter.Instance"> | 738 | <member name="E:HttpServer.IHttpClientContext.RequestReceived"> |
1456 | <summary> | 739 | <summary> |
1457 | The logging instance. | 740 | A request have been received in the context. |
1458 | </summary> | 741 | </summary> |
1459 | </member> | 742 | </member> |
1460 | <member name="M:HttpServer.NullLogWriter.Write(System.Object,HttpServer.LogPrio,System.String)"> | 743 | <member name="T:HttpServer.DisconnectedEventArgs"> |
1461 | <summary> | 744 | <summary> |
1462 | Writes everything to null | 745 | A <see cref="T:HttpServer.IHttpClientContext"/> have been disconnected. |
1463 | </summary> | 746 | </summary> |
1464 | <param name="source">object that wrote the log entry.</param> | ||
1465 | <param name="prio">Importance of the log message</param> | ||
1466 | <param name="message">The message.</param> | ||
1467 | </member> | 747 | </member> |
1468 | <member name="T:HttpServer.IComponentProvider"> | 748 | <member name="M:HttpServer.DisconnectedEventArgs.#ctor(System.Net.Sockets.SocketError)"> |
1469 | <summary> | 749 | <summary> |
1470 | Inversion of control interface. | 750 | Initializes a new instance of the <see cref="T:HttpServer.DisconnectedEventArgs"/> class. |
1471 | </summary> | 751 | </summary> |
752 | <param name="error">Reason to disconnection.</param> | ||
1472 | </member> | 753 | </member> |
1473 | <member name="M:HttpServer.IComponentProvider.AddInstance``1(System.Object)"> | 754 | <member name="P:HttpServer.DisconnectedEventArgs.Error"> |
1474 | <summary> | 755 | <summary> |
1475 | Add a component instance | 756 | Gets reason to why client disconnected. |
1476 | </summary> | 757 | </summary> |
1477 | <typeparam name="T">Interface type</typeparam> | ||
1478 | <param name="instance">Instance to add</param> | ||
1479 | </member> | 758 | </member> |
1480 | <member name="M:HttpServer.IComponentProvider.Get``1"> | 759 | <member name="T:HttpServer.RequestEventArgs"> |
1481 | <summary> | 760 | <summary> |
1482 | Get a component. | 761 | |
1483 | </summary> | 762 | </summary> |
1484 | <typeparam name="T">Interface type</typeparam> | ||
1485 | <returns>Component if registered, otherwise null.</returns> | ||
1486 | <remarks> | ||
1487 | Component will get created if needed. | ||
1488 | </remarks> | ||
1489 | </member> | 763 | </member> |
1490 | <member name="M:HttpServer.IComponentProvider.Contains(System.Type)"> | 764 | <member name="M:HttpServer.RequestEventArgs.#ctor(HttpServer.IHttpRequest)"> |
1491 | <summary> | 765 | <summary> |
1492 | Checks if the specified component interface have been added. | 766 | Initializes a new instance of the <see cref="T:HttpServer.RequestEventArgs"/> class. |
1493 | </summary> | 767 | </summary> |
1494 | <param name="interfaceType"></param> | 768 | <param name="request">The request.</param> |
1495 | <returns>true if found; otherwise false.</returns> | ||
1496 | </member> | 769 | </member> |
1497 | <member name="M:HttpServer.IComponentProvider.Add``2"> | 770 | <member name="P:HttpServer.RequestEventArgs.Request"> |
1498 | <summary> | 771 | <summary> |
1499 | Add a component. | 772 | Gets received request. |
1500 | </summary> | 773 | </summary> |
1501 | <typeparam name="InterfaceType">Type being requested.</typeparam> | ||
1502 | <typeparam name="InstanceType">Type being created.</typeparam> | ||
1503 | </member> | 774 | </member> |
1504 | <member name="T:HttpServer.HttpParam"> | 775 | <member name="T:HttpServer.HttpParam"> |
1505 | <summary> | 776 | <summary> |
@@ -1555,55 +826,125 @@ | |||
1555 | <param name="name"></param> | 826 | <param name="name"></param> |
1556 | <returns>Item if found; otherwise HttpInputItem.EmptyLanguageNode</returns> | 827 | <returns>Item if found; otherwise HttpInputItem.EmptyLanguageNode</returns> |
1557 | </member> | 828 | </member> |
1558 | <member name="T:HttpServer.HttpForm"> | 829 | <member name="T:HttpServer.HttpFile"> |
1559 | <summary>Container for posted form data</summary> | 830 | <summary> |
831 | Container class for posted files | ||
832 | </summary> | ||
1560 | </member> | 833 | </member> |
1561 | <member name="F:HttpServer.HttpForm.EmptyForm"> | 834 | <member name="M:HttpServer.HttpFile.#ctor(System.String,System.String,System.String,System.String)"> |
1562 | <summary>Instance to help mark a non-initialized form</summary> | 835 | <summary> |
836 | Creates a container for a posted file | ||
837 | </summary> | ||
838 | <param name="name">The identifier of the post field</param> | ||
839 | <param name="filename">The file path</param> | ||
840 | <param name="contentType">The content type of the file</param> | ||
841 | <param name="uploadFilename">The name of the file uploaded</param> | ||
842 | <exception cref="T:System.ArgumentNullException">If any parameter is null or empty</exception> | ||
1563 | </member> | 843 | </member> |
1564 | <member name="M:HttpServer.HttpForm.#ctor"> | 844 | <member name="M:HttpServer.HttpFile.#ctor(System.String,System.String,System.String)"> |
1565 | <summary>Initializes a form container with the specified name</summary> | 845 | <summary> |
846 | Creates a container for a posted file <see cref="M:HttpServer.HttpFile.#ctor(System.String,System.String,System.String,System.String)"/> | ||
847 | </summary> | ||
848 | <exception cref="T:System.ArgumentNullException">If any parameter is null or empty</exception> | ||
1566 | </member> | 849 | </member> |
1567 | <member name="M:HttpServer.HttpForm.#ctor(HttpServer.HttpInput)"> | 850 | <member name="M:HttpServer.HttpFile.Finalize"> |
851 | <summary>Destructor disposing the file</summary> | ||
852 | </member> | ||
853 | <member name="M:HttpServer.HttpFile.Dispose(System.Boolean)"> | ||
1568 | <summary> | 854 | <summary> |
1569 | Makes a deep copy of the input | 855 | Deletes the temporary file |
1570 | </summary> | 856 | </summary> |
1571 | <param name="input">The input to copy</param> | 857 | <param name="disposing">True if manual dispose</param> |
1572 | </member> | 858 | </member> |
1573 | <member name="M:HttpServer.HttpForm.AddFile(HttpServer.HttpFile)"> | 859 | <member name="M:HttpServer.HttpFile.Dispose"> |
1574 | <summary> | 860 | <summary> |
1575 | Adds a file to the collection of posted files | 861 | Disposing interface, cleans up managed resources (the temporary file) and suppresses finalization |
1576 | </summary> | 862 | </summary> |
1577 | <param name="file">The file to add</param> | ||
1578 | <exception cref="T:System.ArgumentException">If the file is already added</exception> | ||
1579 | <exception cref="T:System.ArgumentNullException">If file is null</exception> | ||
1580 | <exception cref="T:System.InvalidOperationException">If the instance is HttpForm.EmptyForm which cannot be modified</exception> | ||
1581 | </member> | 863 | </member> |
1582 | <member name="M:HttpServer.HttpForm.ContainsFile(System.String)"> | 864 | <member name="P:HttpServer.HttpFile.Name"> |
1583 | <summary> | 865 | <summary> |
1584 | Checks if the form contains a specified file | 866 | The name/id of the file |
1585 | </summary> | 867 | </summary> |
1586 | <param name="name">Field name of the file parameter</param> | ||
1587 | <returns>True if the file exists</returns> | ||
1588 | <exception cref="T:System.InvalidOperationException">If the instance is HttpForm.EmptyForm which cannot be modified</exception> | ||
1589 | </member> | 868 | </member> |
1590 | <member name="M:HttpServer.HttpForm.GetFile(System.String)"> | 869 | <member name="P:HttpServer.HttpFile.Filename"> |
1591 | <summary> | 870 | <summary> |
1592 | Retrieves a file held by by the form | 871 | The full file path |
1593 | </summary> | 872 | </summary> |
1594 | <param name="name">The identifier of the file</param> | ||
1595 | <returns>The requested file or null if the file was not found</returns> | ||
1596 | <exception cref="T:System.ArgumentNullException">If name is null or empty</exception> | ||
1597 | <exception cref="T:System.InvalidOperationException">If the instance is HttpForm.EmptyForm which cannot be modified</exception> | ||
1598 | </member> | 873 | </member> |
1599 | <member name="M:HttpServer.HttpForm.Clear"> | 874 | <member name="P:HttpServer.HttpFile.UploadFilename"> |
1600 | <summary>Disposes all held HttpFile's and resets values</summary> | 875 | <summary> |
876 | The name of the uploaded file | ||
877 | </summary> | ||
1601 | </member> | 878 | </member> |
1602 | <member name="P:HttpServer.HttpForm.Files"> | 879 | <member name="P:HttpServer.HttpFile.ContentType"> |
1603 | <summary> | 880 | <summary> |
1604 | Retrieves the number of files added to the <see cref="T:HttpServer.HttpForm"/> | 881 | The type of file |
1605 | </summary> | 882 | </summary> |
1606 | <returns>0 if no files are added</returns> | 883 | </member> |
884 | <member name="T:HttpServer.FormDecoders.XmlDecoder"> | ||
885 | <summary> | ||
886 | This decoder converts XML documents to form items. | ||
887 | Each element becomes a subitem in the form, and each attribute becomes an item. | ||
888 | </summary> | ||
889 | <example> | ||
890 | // xml: <hello id="1">something<world id="2">data</world></hello> | ||
891 | // result: | ||
892 | // form["hello"].Value = "something" | ||
893 | // form["hello"]["id"].Value = 1 | ||
894 | // form["hello"]["world]["id"].Value = 1 | ||
895 | // form["hello"]["world"].Value = "data" | ||
896 | </example> | ||
897 | <remarks> | ||
898 | The original xml document is stored in form["__xml__"].Value. | ||
899 | </remarks> | ||
900 | </member> | ||
901 | <member name="T:HttpServer.FormDecoders.IFormDecoder"> | ||
902 | <summary> | ||
903 | Interface for form content decoders. | ||
904 | </summary> | ||
905 | </member> | ||
906 | <member name="M:HttpServer.FormDecoders.IFormDecoder.Decode(System.IO.Stream,System.String,System.Text.Encoding)"> | ||
907 | <summary> | ||
908 | |||
909 | </summary> | ||
910 | <param name="stream">Stream containing the content</param> | ||
911 | <param name="contentType">Content type (with any additional info like boundry). Content type is always supplied in lower case</param> | ||
912 | <param name="encoding">Stream enconding</param> | ||
913 | <returns>A http form, or null if content could not be parsed.</returns> | ||
914 | <exception cref="T:System.IO.InvalidDataException">If contents in the stream is not valid input data.</exception> | ||
915 | </member> | ||
916 | <member name="M:HttpServer.FormDecoders.IFormDecoder.CanParse(System.String)"> | ||
917 | <summary> | ||
918 | Checks if the decoder can handle the mime type | ||
919 | </summary> | ||
920 | <param name="contentType">Content type (with any additional info like boundry). Content type is always supplied in lower case.</param> | ||
921 | <returns>True if the decoder can parse the specified content type</returns> | ||
922 | </member> | ||
923 | <member name="M:HttpServer.FormDecoders.XmlDecoder.Decode(System.IO.Stream,System.String,System.Text.Encoding)"> | ||
924 | <summary> | ||
925 | |||
926 | </summary> | ||
927 | <param name="stream">Stream containing the content</param> | ||
928 | <param name="contentType">Content type (with any additional info like boundry). Content type is always supplied in lower case</param> | ||
929 | <param name="encoding">Stream encoding</param> | ||
930 | Note: contentType and encoding are not used? | ||
931 | <returns>A http form, or null if content could not be parsed.</returns> | ||
932 | <exception cref="T:System.IO.InvalidDataException"></exception> | ||
933 | </member> | ||
934 | <member name="M:HttpServer.FormDecoders.XmlDecoder.TraverseNode(HttpServer.IHttpInput,System.Xml.XmlNode)"> | ||
935 | <summary> | ||
936 | Recursive function that will go through an xml element and store it's content | ||
937 | to the form item. | ||
938 | </summary> | ||
939 | <param name="item">(parent) Item in form that content should be added to.</param> | ||
940 | <param name="node">Node that should be parsed.</param> | ||
941 | </member> | ||
942 | <member name="M:HttpServer.FormDecoders.XmlDecoder.CanParse(System.String)"> | ||
943 | <summary> | ||
944 | Checks if the decoder can handle the mime type | ||
945 | </summary> | ||
946 | <param name="contentType">Content type (with any additional info like boundry). Content type is always supplied in lower case.</param> | ||
947 | <returns>True if the decoder can parse the specified content type</returns> | ||
1607 | </member> | 948 | </member> |
1608 | <member name="T:HttpServer.Helpers.ObjectForm"> | 949 | <member name="T:HttpServer.Helpers.ObjectForm"> |
1609 | <summary> | 950 | <summary> |
@@ -1722,405 +1063,397 @@ | |||
1722 | </summary> | 1063 | </summary> |
1723 | <returns>html</returns> | 1064 | <returns>html</returns> |
1724 | </member> | 1065 | </member> |
1725 | <member name="T:HttpServer.FormDecoders.FormDecoderProvider"> | 1066 | <member name="T:HttpServer.FormDecoders.MultipartDecoder"> |
1726 | <summary> | ||
1727 | This provider is used to let us implement any type of form decoding we want without | ||
1728 | having to rewrite anything else in the server. | ||
1729 | </summary> | ||
1730 | </member> | ||
1731 | <member name="M:HttpServer.FormDecoders.FormDecoderProvider.Decode(System.String,System.IO.Stream,System.Text.Encoding)"> | ||
1732 | <summary> | 1067 | <summary> |
1733 | 1068 | ||
1734 | </summary> | 1069 | </summary> |
1735 | <param name="contentType">Should contain boundary and type, as in: multipart/form-data; boundary=---------------------------230051238959</param> | 1070 | <remarks> |
1736 | <param name="stream">Stream containing form data.</param> | 1071 | http://www.faqs.org/rfcs/rfc1867.html |
1737 | <param name="encoding">Encoding used when decoding the stream</param> | 1072 | </remarks> |
1738 | <returns><see cref="F:HttpServer.HttpInput.Empty"/> if no parser was found.</returns> | ||
1739 | <exception cref="T:System.ArgumentException">If stream is null or not readable.</exception> | ||
1740 | <exception cref="T:System.IO.InvalidDataException">If stream contents cannot be decoded properly.</exception> | ||
1741 | </member> | 1073 | </member> |
1742 | <member name="M:HttpServer.FormDecoders.FormDecoderProvider.Add(HttpServer.FormDecoders.IFormDecoder)"> | 1074 | <member name="F:HttpServer.FormDecoders.MultipartDecoder.MimeType"> |
1743 | <summary> | 1075 | <summary> |
1744 | Add a decoder. | 1076 | multipart/form-data |
1745 | </summary> | 1077 | </summary> |
1746 | <param name="decoder"></param> | ||
1747 | <exception cref="T:System.ArgumentNullException"></exception> | ||
1748 | </member> | 1078 | </member> |
1749 | <member name="P:HttpServer.FormDecoders.FormDecoderProvider.Count"> | 1079 | <member name="F:HttpServer.FormDecoders.MultipartDecoder.FormData"> |
1750 | <summary> | 1080 | <summary> |
1751 | Number of added decoders. | 1081 | form-data |
1752 | </summary> | 1082 | </summary> |
1753 | </member> | 1083 | </member> |
1754 | <member name="P:HttpServer.FormDecoders.FormDecoderProvider.Decoders"> | 1084 | <member name="M:HttpServer.FormDecoders.MultipartDecoder.Decode(System.IO.Stream,System.String,System.Text.Encoding)"> |
1755 | <summary> | 1085 | <summary> |
1756 | Use with care. | 1086 | |
1757 | </summary> | 1087 | </summary> |
1088 | <param name="stream">Stream containing the content</param> | ||
1089 | <param name="contentType">Content type (with any additional info like boundry). Content type is always supplied in lower case</param> | ||
1090 | <param name="encoding">Stream enconding</param> | ||
1091 | <returns>A http form, or null if content could not be parsed.</returns> | ||
1092 | <exception cref="T:System.IO.InvalidDataException">If contents in the stream is not valid input data.</exception> | ||
1093 | <exception cref="T:System.ArgumentNullException">If any parameter is null</exception> | ||
1758 | </member> | 1094 | </member> |
1759 | <member name="P:HttpServer.FormDecoders.FormDecoderProvider.DefaultDecoder"> | 1095 | <member name="M:HttpServer.FormDecoders.MultipartDecoder.CanParse(System.String)"> |
1760 | <summary> | 1096 | <summary> |
1761 | Decoder used for unknown content types. | 1097 | Checks if the decoder can handle the mime type |
1762 | </summary> | 1098 | </summary> |
1099 | <param name="contentType">Content type (with any additional info like boundry). Content type is always supplied in lower case.</param> | ||
1100 | <returns>True if the decoder can parse the specified content type</returns> | ||
1763 | </member> | 1101 | </member> |
1764 | <member name="T:HttpServer.ExceptionHandler"> | 1102 | <member name="T:HttpServer.Exceptions.BadRequestException"> |
1765 | <summary> | 1103 | <summary> |
1766 | We dont want to let the server to die due to exceptions thrown in worker threads. | 1104 | The request could not be understood by the server due to malformed syntax. |
1767 | therefore we use this delegate to give you a change to handle uncaught exceptions. | 1105 | The client SHOULD NOT repeat the request without modifications. |
1106 | |||
1107 | Text taken from: http://www.submissionchamber.com/help-guides/error-codes.php | ||
1768 | </summary> | 1108 | </summary> |
1769 | <param name="source">Class that the exception was thrown in.</param> | ||
1770 | <param name="exception">Exception</param> | ||
1771 | <remarks> | ||
1772 | Server will throw a InternalServerException in release version if you dont | ||
1773 | handle this delegate. | ||
1774 | </remarks> | ||
1775 | </member> | 1109 | </member> |
1776 | <member name="T:HttpServer.HttpClientContext"> | 1110 | <member name="M:HttpServer.Exceptions.BadRequestException.#ctor(System.String)"> |
1777 | <summary> | 1111 | <summary> |
1778 | Contains a connection to a browser/client. | 1112 | Create a new bad request exception. |
1779 | </summary> | 1113 | </summary> |
1780 | <remarks> | 1114 | <param name="errMsg">reason to why the request was bad.</param> |
1781 | Remember to <see cref="M:HttpServer.HttpClientContext.Start"/> after you have hooked the <see cref="E:HttpServer.HttpClientContext.RequestReceived"/> event. | ||
1782 | </remarks> | ||
1783 | TODO: Maybe this class should be broken up into HttpClientChannel and HttpClientContext? | ||
1784 | </member> | 1115 | </member> |
1785 | <member name="M:HttpServer.HttpClientContext.#ctor(System.Boolean,System.Net.IPEndPoint,System.IO.Stream,HttpServer.IRequestParserFactory,System.Int32,System.Net.Sockets.Socket)"> | 1116 | <member name="M:HttpServer.Exceptions.BadRequestException.#ctor(System.String,System.Exception)"> |
1786 | <summary> | 1117 | <summary> |
1787 | Initializes a new instance of the <see cref="T:HttpServer.HttpClientContext"/> class. | 1118 | Create a new bad request exception. |
1788 | </summary> | 1119 | </summary> |
1789 | <param name="secured">true if the connection is secured (SSL/TLS)</param> | 1120 | <param name="errMsg">reason to why the request was bad.</param> |
1790 | <param name="remoteEndPoint">client that connected.</param> | 1121 | <param name="inner">inner exception</param> |
1791 | <param name="stream">Stream used for communication</param> | ||
1792 | <param name="parserFactory">Used to create a <see cref="T:HttpServer.IHttpRequestParser"/>.</param> | ||
1793 | <param name="bufferSize">Size of buffer to use when reading data. Must be at least 4096 bytes.</param> | ||
1794 | <exception cref="T:System.Net.Sockets.SocketException">If <see cref="M:System.Net.Sockets.Socket.BeginReceive(System.Byte[],System.Int32,System.Int32,System.Net.Sockets.SocketFlags,System.AsyncCallback,System.Object)"/> fails</exception> | ||
1795 | <exception cref="T:System.ArgumentException">Stream must be writable and readable.</exception> | ||
1796 | </member> | 1122 | </member> |
1797 | <member name="M:HttpServer.HttpClientContext.OnBodyBytesReceived(System.Object,HttpServer.Parser.BodyEventArgs)"> | 1123 | <member name="T:HttpServer.ResponseCookies"> |
1798 | <summary> | 1124 | <summary> |
1799 | Process incoming body bytes. | 1125 | Cookies that should be set. |
1800 | </summary> | 1126 | </summary> |
1801 | <param name="sender"><see cref="T:HttpServer.IHttpRequestParser"/></param> | ||
1802 | <param name="e">Bytes</param> | ||
1803 | </member> | 1127 | </member> |
1804 | <member name="M:HttpServer.HttpClientContext.OnHeaderReceived(System.Object,HttpServer.Parser.HeaderEventArgs)"> | 1128 | <member name="M:HttpServer.ResponseCookies.Add(HttpServer.ResponseCookie)"> |
1805 | <summary> | 1129 | <summary> |
1806 | 1130 | Adds a cookie in the collection. | |
1807 | </summary> | 1131 | </summary> |
1808 | <param name="sender"></param> | 1132 | <param name="cookie">cookie to add</param> |
1809 | <param name="e"></param> | 1133 | <exception cref="T:System.ArgumentNullException">cookie is null</exception> |
1810 | </member> | 1134 | </member> |
1811 | <member name="M:HttpServer.HttpClientContext.Start"> | 1135 | <member name="M:HttpServer.ResponseCookies.Add(HttpServer.RequestCookie,System.DateTime)"> |
1812 | <summary> | 1136 | <summary> |
1813 | Start reading content. | 1137 | Copy a request cookie |
1814 | </summary> | 1138 | </summary> |
1815 | <remarks> | 1139 | <param name="cookie"></param> |
1816 | Make sure to call base.Start() if you override this method. | 1140 | <param name="expires">When the cookie should expire</param> |
1817 | </remarks> | ||
1818 | </member> | 1141 | </member> |
1819 | <member name="M:HttpServer.HttpClientContext.Cleanup"> | 1142 | <member name="M:HttpServer.ResponseCookies.GetEnumerator"> |
1820 | <summary> | 1143 | <summary> |
1821 | Clean up context. | 1144 | Gets a collection enumerator on the cookie list. |
1822 | </summary> | 1145 | </summary> |
1823 | <remarks> | 1146 | <returns>collection enumerator</returns> |
1824 | Make sure to call base.Cleanup() if you override the method. | ||
1825 | </remarks> | ||
1826 | </member> | 1147 | </member> |
1827 | <member name="M:HttpServer.HttpClientContext.Disconnect(System.Net.Sockets.SocketError)"> | 1148 | <member name="M:HttpServer.ResponseCookies.Clear"> |
1828 | <summary> | 1149 | <summary> |
1829 | Disconnect from client | 1150 | Remove all cookies |
1830 | </summary> | 1151 | </summary> |
1831 | <param name="error">error to report in the <see cref="E:HttpServer.HttpClientContext.Disconnected"/> event.</param> | ||
1832 | </member> | 1152 | </member> |
1833 | <member name="M:HttpServer.HttpClientContext.Respond(System.String,System.Net.HttpStatusCode,System.String,System.String,System.String)"> | 1153 | <member name="M:HttpServer.ResponseCookies.System#Collections#Generic#IEnumerable{HttpServer#ResponseCookie}#GetEnumerator"> |
1834 | <summary> | 1154 | <summary> |
1835 | Send a response. | 1155 | Returns an enumerator that iterates through the collection. |
1836 | </summary> | 1156 | </summary> |
1837 | <param name="httpVersion">Either <see cref="F:HttpServer.HttpHelper.HTTP10"/> or <see cref="F:HttpServer.HttpHelper.HTTP11"/></param> | 1157 | |
1838 | <param name="statusCode">HTTP status code</param> | 1158 | <returns> |
1839 | <param name="reason">reason for the status code.</param> | 1159 | A <see cref="T:System.Collections.Generic.IEnumerator`1"></see> that can be used to iterate through the collection. |
1840 | <param name="body">HTML body contents, can be null or empty.</param> | 1160 | </returns> |
1841 | <param name="contentType">A content type to return the body as, i.e. 'text/html' or 'text/plain', defaults to 'text/html' if null or empty</param> | 1161 | <filterpriority>1</filterpriority> |
1842 | <exception cref="T:System.ArgumentException">If <paramref name="httpVersion"/> is invalid.</exception> | ||
1843 | </member> | 1162 | </member> |
1844 | <member name="M:HttpServer.HttpClientContext.Respond(System.String,System.Net.HttpStatusCode,System.String)"> | 1163 | <member name="P:HttpServer.ResponseCookies.Count"> |
1845 | <summary> | 1164 | <summary> |
1846 | Send a response. | 1165 | Gets the count of cookies in the collection. |
1847 | </summary> | 1166 | </summary> |
1848 | <param name="httpVersion">Either <see cref="F:HttpServer.HttpHelper.HTTP10"/> or <see cref="F:HttpServer.HttpHelper.HTTP11"/></param> | ||
1849 | <param name="statusCode">HTTP status code</param> | ||
1850 | <param name="reason">reason for the status code.</param> | ||
1851 | </member> | 1167 | </member> |
1852 | <member name="M:HttpServer.HttpClientContext.Respond(System.String)"> | 1168 | <member name="P:HttpServer.ResponseCookies.Item(System.String)"> |
1853 | <summary> | 1169 | <summary> |
1854 | Send a response. | 1170 | Gets the cookie of a given identifier (null if not existing). |
1855 | </summary> | 1171 | </summary> |
1856 | <exception cref="T:System.ArgumentNullException"></exception> | ||
1857 | </member> | 1172 | </member> |
1858 | <member name="M:HttpServer.HttpClientContext.Send(System.Byte[])"> | 1173 | <member name="T:HttpServer.ResponseCookie"> |
1859 | <summary> | 1174 | <summary> |
1860 | send a whole buffer | 1175 | cookie being sent back to the browser. |
1861 | </summary> | 1176 | </summary> |
1862 | <param name="buffer">buffer to send</param> | 1177 | <seealso cref="T:HttpServer.ResponseCookie"/> |
1863 | <exception cref="T:System.ArgumentNullException"></exception> | ||
1864 | </member> | 1178 | </member> |
1865 | <member name="M:HttpServer.HttpClientContext.Send(System.Byte[],System.Int32,System.Int32)"> | 1179 | <member name="T:HttpServer.RequestCookie"> |
1866 | <summary> | 1180 | <summary> |
1867 | Send data using the stream | 1181 | cookie sent by the client/browser |
1868 | </summary> | 1182 | </summary> |
1869 | <param name="buffer">Contains data to send</param> | 1183 | <seealso cref="T:HttpServer.ResponseCookie"/> |
1870 | <param name="offset">Start position in buffer</param> | ||
1871 | <param name="size">number of bytes to send</param> | ||
1872 | <exception cref="T:System.ArgumentNullException"></exception> | ||
1873 | <exception cref="T:System.ArgumentOutOfRangeException"></exception> | ||
1874 | </member> | 1184 | </member> |
1875 | <member name="E:HttpServer.HttpClientContext.Cleaned"> | 1185 | <member name="M:HttpServer.RequestCookie.#ctor(System.String,System.String)"> |
1876 | <summary> | 1186 | <summary> |
1877 | This context have been cleaned, which means that it can be reused. | 1187 | Constructor. |
1878 | </summary> | 1188 | </summary> |
1189 | <param name="id">cookie identifier</param> | ||
1190 | <param name="content">cookie content</param> | ||
1191 | <exception cref="T:System.ArgumentNullException">id or content is null</exception> | ||
1192 | <exception cref="T:System.ArgumentException">id is empty</exception> | ||
1879 | </member> | 1193 | </member> |
1880 | <member name="E:HttpServer.HttpClientContext.Started"> | 1194 | <member name="M:HttpServer.RequestCookie.ToString"> |
1881 | <summary> | 1195 | <summary> |
1882 | Context have been started (a new client have connected) | 1196 | Gets the cookie HTML representation. |
1883 | </summary> | 1197 | </summary> |
1198 | <returns>cookie string</returns> | ||
1884 | </member> | 1199 | </member> |
1885 | <member name="P:HttpServer.HttpClientContext.CurrentRequest"> | 1200 | <member name="P:HttpServer.RequestCookie.Name"> |
1886 | <summary> | 1201 | <summary> |
1887 | Overload to specify own type. | 1202 | Gets the cookie identifier. |
1888 | </summary> | 1203 | </summary> |
1889 | <remarks> | ||
1890 | Must be specified before the context is being used. | ||
1891 | </remarks> | ||
1892 | </member> | 1204 | </member> |
1893 | <member name="P:HttpServer.HttpClientContext.Secured"> | 1205 | <member name="P:HttpServer.RequestCookie.Value"> |
1894 | <summary> | 1206 | <summary> |
1895 | Using SSL or other encryption method. | 1207 | Cookie value. Set to null to remove cookie. |
1896 | </summary> | 1208 | </summary> |
1897 | </member> | 1209 | </member> |
1898 | <member name="P:HttpServer.HttpClientContext.IsSecured"> | 1210 | <member name="M:HttpServer.ResponseCookie.#ctor(System.String,System.String,System.DateTime)"> |
1899 | <summary> | 1211 | <summary> |
1900 | Using SSL or other encryption method. | 1212 | Constructor. |
1901 | </summary> | 1213 | </summary> |
1214 | <param name="id">cookie identifier</param> | ||
1215 | <param name="content">cookie content</param> | ||
1216 | <param name="expiresAt">cookie expiration date. Use DateTime.MinValue for session cookie.</param> | ||
1217 | <exception cref="T:System.ArgumentNullException">id or content is null</exception> | ||
1218 | <exception cref="T:System.ArgumentException">id is empty</exception> | ||
1902 | </member> | 1219 | </member> |
1903 | <member name="P:HttpServer.HttpClientContext.LogWriter"> | 1220 | <member name="M:HttpServer.ResponseCookie.#ctor(System.String,System.String,System.DateTime,System.String,System.String)"> |
1904 | <summary> | 1221 | <summary> |
1905 | Specify which logger to use. | 1222 | Create a new cookie |
1906 | </summary> | 1223 | </summary> |
1224 | <param name="name">name identifying the cookie</param> | ||
1225 | <param name="value">cookie value</param> | ||
1226 | <param name="expires">when the cookie expires. Setting DateTime.MinValue will delete the cookie when the session is closed.</param> | ||
1227 | <param name="path">Path to where the cookie is valid</param> | ||
1228 | <param name="domain">Domain that the cookie is valid for.</param> | ||
1907 | </member> | 1229 | </member> |
1908 | <member name="P:HttpServer.HttpClientContext.Stream"> | 1230 | <member name="M:HttpServer.ResponseCookie.#ctor(HttpServer.RequestCookie,System.DateTime)"> |
1909 | <summary> | 1231 | <summary> |
1910 | Gets or sets the network stream. | 1232 | Create a new cookie |
1911 | </summary> | 1233 | </summary> |
1234 | <param name="cookie">Name and value will be used</param> | ||
1235 | <param name="expires">when the cookie expires.</param> | ||
1912 | </member> | 1236 | </member> |
1913 | <member name="P:HttpServer.HttpClientContext.RemoteAddress"> | 1237 | <member name="M:HttpServer.ResponseCookie.ToString"> |
1914 | <summary> | 1238 | <summary> |
1915 | Gets or sets IP address that the client connected from. | 1239 | Gets the cookie HTML representation. |
1916 | </summary> | 1240 | </summary> |
1241 | <returns>cookie string</returns> | ||
1917 | </member> | 1242 | </member> |
1918 | <member name="P:HttpServer.HttpClientContext.RemotePort"> | 1243 | <member name="P:HttpServer.ResponseCookie.Expires"> |
1919 | <summary> | 1244 | <summary> |
1920 | Gets or sets port that the client connected from. | 1245 | When the cookie expires. |
1246 | DateTime.MinValue means that the cookie expires when the session do so. | ||
1921 | </summary> | 1247 | </summary> |
1922 | </member> | 1248 | </member> |
1923 | <member name="E:HttpServer.HttpClientContext.Disconnected"> | 1249 | <member name="P:HttpServer.ResponseCookie.Path"> |
1924 | <summary> | 1250 | <summary> |
1925 | The context have been disconnected. | 1251 | Cookie is only valid under this path. |
1926 | </summary> | 1252 | </summary> |
1927 | <remarks> | ||
1928 | Event can be used to clean up a context, or to reuse it. | ||
1929 | </remarks> | ||
1930 | </member> | 1253 | </member> |
1931 | <member name="E:HttpServer.HttpClientContext.RequestReceived"> | 1254 | <member name="T:HttpServer.IComponentProvider"> |
1932 | <summary> | 1255 | <summary> |
1933 | A request have been received in the context. | 1256 | Inversion of control interface. |
1934 | </summary> | 1257 | </summary> |
1935 | </member> | 1258 | </member> |
1936 | <member name="T:HttpServer.Helpers.XmlHelper"> | 1259 | <member name="M:HttpServer.IComponentProvider.AddInstance``1(System.Object)"> |
1937 | <summary> | 1260 | <summary> |
1938 | Helpers to make XML handling easier | 1261 | Add a component instance |
1939 | </summary> | 1262 | </summary> |
1263 | <typeparam name="T">Interface type</typeparam> | ||
1264 | <param name="instance">Instance to add</param> | ||
1940 | </member> | 1265 | </member> |
1941 | <member name="M:HttpServer.Helpers.XmlHelper.Serialize(System.Object)"> | 1266 | <member name="M:HttpServer.IComponentProvider.Get``1"> |
1942 | <summary> | 1267 | <summary> |
1943 | Serializes object to XML. | 1268 | Get a component. |
1944 | </summary> | 1269 | </summary> |
1945 | <param name="value">object to serialize.</param> | 1270 | <typeparam name="T">Interface type</typeparam> |
1946 | <returns>XML</returns> | 1271 | <returns>Component if registered, otherwise null.</returns> |
1947 | <remarks> | 1272 | <remarks> |
1948 | Removes name spaces and adds indentation | 1273 | Component will get created if needed. |
1949 | </remarks> | 1274 | </remarks> |
1950 | </member> | 1275 | </member> |
1951 | <member name="M:HttpServer.Helpers.XmlHelper.Deserialize``1(System.String)"> | 1276 | <member name="M:HttpServer.IComponentProvider.Contains(System.Type)"> |
1952 | <summary> | ||
1953 | Create an object from a XML string | ||
1954 | </summary> | ||
1955 | <typeparam name="T">Type of object</typeparam> | ||
1956 | <param name="xml">XML string</param> | ||
1957 | <returns>object</returns> | ||
1958 | </member> | ||
1959 | <member name="T:HttpServer.FormDecoders.UrlDecoder"> | ||
1960 | <summary> | 1277 | <summary> |
1961 | Can handle application/x-www-form-urlencoded | 1278 | Checks if the specified component interface have been added. |
1962 | </summary> | 1279 | </summary> |
1280 | <param name="interfaceType"></param> | ||
1281 | <returns>true if found; otherwise false.</returns> | ||
1963 | </member> | 1282 | </member> |
1964 | <member name="M:HttpServer.FormDecoders.UrlDecoder.Decode(System.IO.Stream,System.String,System.Text.Encoding)"> | 1283 | <member name="M:HttpServer.IComponentProvider.Add``2"> |
1965 | <summary> | 1284 | <summary> |
1285 | Add a component. | ||
1966 | </summary> | 1286 | </summary> |
1967 | <param name="stream">Stream containing the content</param> | 1287 | <typeparam name="InterfaceType">Type being requested.</typeparam> |
1968 | <param name="contentType">Content type (with any additional info like boundry). Content type is always supplied in lower case</param> | 1288 | <typeparam name="InstanceType">Type being created.</typeparam> |
1969 | <param name="encoding">Stream encoding</param> | ||
1970 | <returns> | ||
1971 | A HTTP form, or null if content could not be parsed. | ||
1972 | </returns> | ||
1973 | <exception cref="T:System.IO.InvalidDataException">If contents in the stream is not valid input data.</exception> | ||
1974 | </member> | 1289 | </member> |
1975 | <member name="M:HttpServer.FormDecoders.UrlDecoder.CanParse(System.String)"> | 1290 | <member name="T:HttpServer.HttpListenerBase"> |
1976 | <summary> | 1291 | <summary> |
1977 | Checks if the decoder can handle the mime type | 1292 | Contains a listener that doesn't do anything with the connections. |
1978 | </summary> | 1293 | </summary> |
1979 | <param name="contentType">Content type (with any additional info like boundry). Content type is always supplied in lower case.</param> | ||
1980 | <returns>True if the decoder can parse the specified content type</returns> | ||
1981 | </member> | 1294 | </member> |
1982 | <member name="T:HttpServer.ClientAcceptedEventArgs"> | 1295 | <member name="M:HttpServer.HttpListenerBase.#ctor(System.Net.IPAddress,System.Int32,HttpServer.IHttpContextFactory)"> |
1983 | <summary> | 1296 | <summary> |
1984 | Invoked when a client have been accepted by the <see cref="T:HttpServer.HttpListener"/> | 1297 | Listen for regular HTTP connections |
1985 | </summary> | 1298 | </summary> |
1986 | <remarks> | 1299 | <param name="address">IP Address to accept connections on</param> |
1987 | Can be used to revoke incoming connections | 1300 | <param name="port">TCP Port to listen on, default HTTP port is 80.</param> |
1988 | </remarks> | 1301 | <param name="factory">Factory used to create <see cref="T:HttpServer.IHttpClientContext"/>es.</param> |
1302 | <exception cref="T:System.ArgumentNullException"><c>address</c> is null.</exception> | ||
1303 | <exception cref="T:System.ArgumentException">Port must be a positive number.</exception> | ||
1989 | </member> | 1304 | </member> |
1990 | <member name="M:HttpServer.ClientAcceptedEventArgs.#ctor(System.Net.Sockets.Socket)"> | 1305 | <member name="M:HttpServer.HttpListenerBase.#ctor(System.Net.IPAddress,System.Int32,HttpServer.IHttpContextFactory,System.Security.Cryptography.X509Certificates.X509Certificate)"> |
1991 | <summary> | 1306 | <summary> |
1992 | Initializes a new instance of the <see cref="T:HttpServer.ClientAcceptedEventArgs"/> class. | 1307 | Initializes a new instance of the <see cref="T:HttpServer.HttpListenerBase"/> class. |
1993 | </summary> | 1308 | </summary> |
1994 | <param name="socket">The socket.</param> | 1309 | <param name="address">IP Address to accept connections on</param> |
1310 | <param name="port">TCP Port to listen on, default HTTPS port is 443</param> | ||
1311 | <param name="factory">Factory used to create <see cref="T:HttpServer.IHttpClientContext"/>es.</param> | ||
1312 | <param name="certificate">Certificate to use</param> | ||
1995 | </member> | 1313 | </member> |
1996 | <member name="M:HttpServer.ClientAcceptedEventArgs.Revoke"> | 1314 | <member name="M:HttpServer.HttpListenerBase.#ctor(System.Net.IPAddress,System.Int32,HttpServer.IHttpContextFactory,System.Security.Cryptography.X509Certificates.X509Certificate,System.Security.Authentication.SslProtocols)"> |
1997 | <summary> | 1315 | <summary> |
1998 | Client may not be handled. | 1316 | Initializes a new instance of the <see cref="T:HttpServer.HttpListenerBase"/> class. |
1999 | </summary> | 1317 | </summary> |
1318 | <param name="address">IP Address to accept connections on</param> | ||
1319 | <param name="port">TCP Port to listen on, default HTTPS port is 443</param> | ||
1320 | <param name="factory">Factory used to create <see cref="T:HttpServer.IHttpClientContext"/>es.</param> | ||
1321 | <param name="certificate">Certificate to use</param> | ||
1322 | <param name="protocol">which HTTPS protocol to use, default is TLS.</param> | ||
2000 | </member> | 1323 | </member> |
2001 | <member name="P:HttpServer.ClientAcceptedEventArgs.Socket"> | 1324 | <member name="M:HttpServer.HttpListenerBase.OnAccept(System.IAsyncResult)"> |
2002 | <summary> | 1325 | <exception cref="T:System.Exception"><c>Exception</c>.</exception> |
2003 | Accepted socket. | ||
2004 | </summary> | ||
2005 | </member> | 1326 | </member> |
2006 | <member name="P:HttpServer.ClientAcceptedEventArgs.Revoked"> | 1327 | <member name="M:HttpServer.HttpListenerBase.RetryBeginAccept"> |
2007 | <summary> | 1328 | <summary> |
2008 | Client should be revoked. | 1329 | Will try to accept connections one more time. |
2009 | </summary> | 1330 | </summary> |
1331 | <exception cref="T:System.Exception">If any exceptions is thrown.</exception> | ||
2010 | </member> | 1332 | </member> |
2011 | <member name="T:HttpServer.Sessions.HttpSessionClearedArgs"> | 1333 | <member name="M:HttpServer.HttpListenerBase.OnAcceptingSocket(System.Net.Sockets.Socket)"> |
2012 | <summary> | 1334 | <summary> |
2013 | Arguments sent when a <see cref="T:HttpServer.Sessions.IHttpSession"/> is cleared | 1335 | Can be used to create filtering of new connections. |
2014 | </summary> | 1336 | </summary> |
1337 | <param name="socket">Accepted socket</param> | ||
1338 | <returns>true if connection can be accepted; otherwise false.</returns> | ||
2015 | </member> | 1339 | </member> |
2016 | <member name="M:HttpServer.Sessions.HttpSessionClearedArgs.#ctor(System.Boolean)"> | 1340 | <member name="M:HttpServer.HttpListenerBase.Start(System.Int32)"> |
2017 | <summary> | 1341 | <summary> |
2018 | Instantiates the arguments for the event | 1342 | Start listen for new connections |
2019 | </summary> | 1343 | </summary> |
2020 | <param name="expired">True if the session is cleared due to expiration</param> | 1344 | <param name="backlog">Number of connections that can stand in a queue to be accepted.</param> |
1345 | <exception cref="T:System.InvalidOperationException">Listener have already been started.</exception> | ||
2021 | </member> | 1346 | </member> |
2022 | <member name="P:HttpServer.Sessions.HttpSessionClearedArgs.Expired"> | 1347 | <member name="M:HttpServer.HttpListenerBase.Stop"> |
2023 | <summary> | 1348 | <summary> |
2024 | Returns true if the session is cleared due to expiration | 1349 | Stop the listener |
2025 | </summary> | 1350 | </summary> |
1351 | <exception cref="T:System.Net.Sockets.SocketException"></exception> | ||
2026 | </member> | 1352 | </member> |
2027 | <member name="T:HttpServer.Sessions.HttpSessionClearedHandler"> | 1353 | <member name="P:HttpServer.HttpListenerBase.LogWriter"> |
2028 | <summary> | 1354 | <summary> |
2029 | Delegate for when a IHttpSession is cleared | 1355 | Gives you a change to receive log entries for all internals of the HTTP library. |
2030 | </summary> | 1356 | </summary> |
2031 | <param name="session"><see cref="T:HttpServer.Sessions.IHttpSession"/> this is being cleared.</param> | 1357 | <remarks> |
2032 | <param name="args">Arguments for the clearing</param> | 1358 | You may not switch log writer after starting the listener. |
1359 | </remarks> | ||
2033 | </member> | 1360 | </member> |
2034 | <member name="T:HttpServer.Parser.HeaderEventArgs"> | 1361 | <member name="P:HttpServer.HttpListenerBase.UseTraceLogs"> |
2035 | <summary> | 1362 | <summary> |
2036 | Event arguments used when a new header have been parsed. | 1363 | True if we should turn on trace logs. |
2037 | </summary> | 1364 | </summary> |
2038 | </member> | 1365 | </member> |
2039 | <member name="M:HttpServer.Parser.HeaderEventArgs.#ctor(System.String,System.String)"> | 1366 | <member name="E:HttpServer.HttpListenerBase.ExceptionThrown"> |
2040 | <summary> | 1367 | <summary> |
2041 | Initializes a new instance of the <see cref="T:HttpServer.Parser.HeaderEventArgs"/> class. | 1368 | Catch exceptions not handled by the listener. |
2042 | </summary> | 1369 | </summary> |
2043 | <param name="name">Name of header.</param> | 1370 | <remarks> |
2044 | <param name="value">Header value.</param> | 1371 | Exceptions will be thrown during debug mode if this event is not used, |
1372 | exceptions will be printed to console and suppressed during release mode. | ||
1373 | </remarks> | ||
2045 | </member> | 1374 | </member> |
2046 | <member name="M:HttpServer.Parser.HeaderEventArgs.#ctor"> | 1375 | <member name="E:HttpServer.HttpListenerBase.RequestReceived"> |
2047 | <summary> | 1376 | <summary> |
2048 | Initializes a new instance of the <see cref="T:HttpServer.Parser.HeaderEventArgs"/> class. | 1377 | A request have been received from a <see cref="T:HttpServer.IHttpClientContext"/>. |
2049 | </summary> | 1378 | </summary> |
2050 | </member> | 1379 | </member> |
2051 | <member name="P:HttpServer.Parser.HeaderEventArgs.Name"> | 1380 | <member name="T:HttpServer.HttpListener"> |
2052 | <summary> | 1381 | <summary> |
2053 | Gets or sets header name. | 1382 | New implementation of the HTTP listener. |
2054 | </summary> | 1383 | </summary> |
1384 | <remarks> | ||
1385 | Use the <c>Create</c> methods to create a default listener. | ||
1386 | </remarks> | ||
2055 | </member> | 1387 | </member> |
2056 | <member name="P:HttpServer.Parser.HeaderEventArgs.Value"> | 1388 | <member name="M:HttpServer.HttpListener.#ctor(System.Net.IPAddress,System.Int32,HttpServer.IHttpContextFactory)"> |
2057 | <summary> | 1389 | <summary> |
2058 | Gets or sets header value. | 1390 | Initializes a new instance of the <see cref="T:HttpServer.HttpListener"/> class. |
2059 | </summary> | 1391 | </summary> |
1392 | <param name="address">IP Address to accept connections on</param> | ||
1393 | <param name="port">TCP Port to listen on, default HTTP port is 80.</param> | ||
1394 | <param name="factory">Factory used to create <see cref="T:HttpServer.IHttpClientContext"/>es.</param> | ||
1395 | <exception cref="T:System.ArgumentNullException"><c>address</c> is null.</exception> | ||
1396 | <exception cref="T:System.ArgumentException">Port must be a positive number.</exception> | ||
2060 | </member> | 1397 | </member> |
2061 | <member name="T:HttpServer.Helpers.ResourceManager"> | 1398 | <member name="M:HttpServer.HttpListener.#ctor(System.Net.IPAddress,System.Int32,HttpServer.IHttpContextFactory,System.Security.Cryptography.X509Certificates.X509Certificate)"> |
2062 | <summary>Class to handle loading of resource files</summary> | ||
2063 | </member> | ||
2064 | <member name="M:HttpServer.Helpers.ResourceManager.#ctor"> | ||
2065 | <summary> | 1399 | <summary> |
2066 | Initializes a new instance of the <see cref="T:HttpServer.Helpers.ResourceManager"/> class. | 1400 | Initializes a new instance of the <see cref="T:HttpServer.HttpListener"/> class. |
2067 | </summary> | 1401 | </summary> |
1402 | <param name="address">The address.</param> | ||
1403 | <param name="port">The port.</param> | ||
1404 | <param name="factory">The factory.</param> | ||
1405 | <param name="certificate">The certificate.</param> | ||
2068 | </member> | 1406 | </member> |
2069 | <member name="M:HttpServer.Helpers.ResourceManager.#ctor(HttpServer.ILogWriter)"> | 1407 | <member name="M:HttpServer.HttpListener.#ctor(System.Net.IPAddress,System.Int32,HttpServer.IHttpContextFactory,System.Security.Cryptography.X509Certificates.X509Certificate,System.Security.Authentication.SslProtocols)"> |
2070 | <summary> | 1408 | <summary> |
2071 | Initializes a new instance of the <see cref="T:HttpServer.Helpers.ResourceManager"/> class. | 1409 | Initializes a new instance of the <see cref="T:HttpServer.HttpListener"/> class. |
2072 | </summary> | 1410 | </summary> |
2073 | <param name="writer">logger.</param> | 1411 | <param name="address">The address.</param> |
1412 | <param name="port">The port.</param> | ||
1413 | <param name="factory">The factory.</param> | ||
1414 | <param name="certificate">The certificate.</param> | ||
1415 | <param name="protocol">The protocol.</param> | ||
2074 | </member> | 1416 | </member> |
2075 | <member name="M:HttpServer.Helpers.ResourceManager.LoadResources(System.String,System.Reflection.Assembly,System.String)"> | 1417 | <member name="M:HttpServer.HttpListener.Create(System.Net.IPAddress,System.Int32)"> |
2076 | <summary> | 1418 | <summary> |
2077 | Loads resources from a namespace in the given assembly to an URI | 1419 | Creates a new <see cref="T:HttpServer.HttpListener"/> instance with default factories. |
2078 | </summary> | 1420 | </summary> |
2079 | <param name="toUri">The URI to map the resources to</param> | 1421 | <param name="address">Address that the listener should accept connections on.</param> |
2080 | <param name="fromAssembly">The assembly in which the resources reside</param> | 1422 | <param name="port">Port that listener should accept connections on.</param> |
2081 | <param name="fromNamespace">The namespace from which to load the resources</param> | 1423 | <returns>Created HTTP listener.</returns> |
2082 | <usage> | ||
2083 | <code> | ||
2084 | resourceLoader.LoadResources("/user/", typeof(User).Assembly, "MyLib.Models.User.Views"); | ||
2085 | </code> | ||
2086 | Will make the resource MyLib.Models.User.Views.list.Haml accessible via /user/list.haml or /user/list/ | ||
2087 | </usage> | ||
2088 | <returns>The amount of loaded files, giving you the possibility of making sure the resources needed gets loaded</returns> | ||
2089 | <exception cref="T:System.InvalidOperationException">If a resource has already been mapped to an uri</exception> | ||
2090 | </member> | 1424 | </member> |
2091 | <member name="M:HttpServer.Helpers.ResourceManager.GetResourceStream(System.String)"> | 1425 | <member name="M:HttpServer.HttpListener.Create(System.Net.IPAddress,System.Int32,System.Security.Cryptography.X509Certificates.X509Certificate)"> |
2092 | <summary> | 1426 | <summary> |
2093 | Retrieves a stream for the specified resource path if loaded otherwise null | 1427 | Creates a new <see cref="T:HttpServer.HttpListener"/> instance with default factories. |
2094 | </summary> | 1428 | </summary> |
2095 | <param name="path">Path to the resource to retrieve a stream for</param> | 1429 | <param name="address">Address that the listener should accept connections on.</param> |
2096 | <returns>A stream or null if the resource couldn't be found</returns> | 1430 | <param name="port">Port that listener should accept connections on.</param> |
1431 | <param name="certificate">Certificate to use</param> | ||
1432 | <returns>Created HTTP listener.</returns> | ||
2097 | </member> | 1433 | </member> |
2098 | <member name="M:HttpServer.Helpers.ResourceManager.GetFiles(System.String)"> | 1434 | <member name="M:HttpServer.HttpListener.Create(System.Net.IPAddress,System.Int32,System.Security.Cryptography.X509Certificates.X509Certificate,System.Security.Authentication.SslProtocols)"> |
2099 | <summary> | 1435 | <summary> |
2100 | Fetch all files from the resource that matches the specified arguments. | 1436 | Creates a new <see cref="T:HttpServer.HttpListener"/> instance with default factories. |
2101 | </summary> | 1437 | </summary> |
2102 | <param name="path">The path to the resource to extract</param> | 1438 | <param name="address">Address that the listener should accept connections on.</param> |
2103 | <returns> | 1439 | <param name="port">Port that listener should accept connections on.</param> |
2104 | a list of files if found; or an empty array if no files are found. | 1440 | <param name="certificate">Certificate to use</param> |
2105 | </returns> | 1441 | <param name="protocol">which HTTPS protocol to use, default is TLS.</param> |
2106 | <exception cref="T:System.ArgumentException">Search path must end with an asterisk for finding arbitrary files</exception> | 1442 | <returns>Created HTTP listener.</returns> |
2107 | </member> | 1443 | </member> |
2108 | <member name="M:HttpServer.Helpers.ResourceManager.GetFiles(System.String,System.String)"> | 1444 | <member name="M:HttpServer.HttpListener.OnAcceptingSocket(System.Net.Sockets.Socket)"> |
2109 | <summary> | 1445 | <summary> |
2110 | Fetch all files from the resource that matches the specified arguments. | 1446 | Can be used to create filtering of new connections. |
2111 | </summary> | 1447 | </summary> |
2112 | <param name="path">Where the file should reside.</param> | 1448 | <param name="socket">Accepted socket</param> |
2113 | <param name="filename">Files to check</param> | ||
2114 | <returns> | 1449 | <returns> |
2115 | a list of files if found; or an empty array if no files are found. | 1450 | true if connection can be accepted; otherwise false. |
2116 | </returns> | 1451 | </returns> |
2117 | </member> | 1452 | </member> |
2118 | <member name="M:HttpServer.Helpers.ResourceManager.ContainsResource(System.String)"> | 1453 | <member name="E:HttpServer.HttpListener.Accepted"> |
2119 | <summary> | 1454 | <summary> |
2120 | Returns whether or not the loader has an instance of the file requested | 1455 | A client have been accepted, but not handled, by the listener. |
2121 | </summary> | 1456 | </summary> |
2122 | <param name="filename">The name of the template/file</param> | ||
2123 | <returns>True if the loader can provide the file</returns> | ||
2124 | </member> | 1457 | </member> |
2125 | <member name="T:HttpServer.Rules.RedirectRule"> | 1458 | <member name="T:HttpServer.Rules.RedirectRule"> |
2126 | <summary> | 1459 | <summary> |
@@ -2200,50 +1533,6 @@ | |||
2200 | <c>true</c> means that a redirect response is sent to the client. | 1533 | <c>true</c> means that a redirect response is sent to the client. |
2201 | </remarks> | 1534 | </remarks> |
2202 | </member> | 1535 | </member> |
2203 | <member name="T:HttpServer.RequestQueue"> | ||
2204 | <summary> | ||
2205 | Used to queue incoming requests. | ||
2206 | </summary> | ||
2207 | </member> | ||
2208 | <member name="M:HttpServer.RequestQueue.#ctor(HttpServer.ProcessRequestHandler)"> | ||
2209 | <summary> | ||
2210 | Initializes a new instance of the <see cref="T:HttpServer.RequestQueue"/> class. | ||
2211 | </summary> | ||
2212 | <param name="handler">Called when a request should be processed.</param> | ||
2213 | </member> | ||
2214 | <member name="M:HttpServer.RequestQueue.QueueThread"> | ||
2215 | <summary> | ||
2216 | Used to process queued requests. | ||
2217 | </summary> | ||
2218 | </member> | ||
2219 | <member name="P:HttpServer.RequestQueue.MaxRequestCount"> | ||
2220 | <summary> | ||
2221 | Gets or sets maximum number of allowed simultaneous requests. | ||
2222 | </summary> | ||
2223 | </member> | ||
2224 | <member name="P:HttpServer.RequestQueue.MaxQueueSize"> | ||
2225 | <summary> | ||
2226 | Gets or sets maximum number of requests queuing to be handled. | ||
2227 | </summary> | ||
2228 | </member> | ||
2229 | <member name="P:HttpServer.RequestQueue.CurrentRequestCount"> | ||
2230 | <summary> | ||
2231 | Specifies how many requests the HTTP server is currently processing. | ||
2232 | </summary> | ||
2233 | </member> | ||
2234 | <member name="T:HttpServer.RequestQueue.QueueItem"> | ||
2235 | <summary> | ||
2236 | Used two queue incoming requests to avoid | ||
2237 | thread starvation. | ||
2238 | </summary> | ||
2239 | </member> | ||
2240 | <member name="T:HttpServer.ProcessRequestHandler"> | ||
2241 | <summary> | ||
2242 | Method used to process a queued request | ||
2243 | </summary> | ||
2244 | <param name="context">Context that the request was received from.</param> | ||
2245 | <param name="request">Request to process.</param> | ||
2246 | </member> | ||
2247 | <member name="T:HttpServer.Parser.HttpRequestParser"> | 1536 | <member name="T:HttpServer.Parser.HttpRequestParser"> |
2248 | <summary> | 1537 | <summary> |
2249 | Parses a HTTP request directly from a stream | 1538 | Parses a HTTP request directly from a stream |
@@ -2380,516 +1669,349 @@ | |||
2380 | A header have been received. | 1669 | A header have been received. |
2381 | </summary> | 1670 | </summary> |
2382 | </member> | 1671 | </member> |
2383 | <member name="T:HttpServer.IHttpResponse"> | 1672 | <member name="T:HttpServer.IHttpRequest"> |
2384 | <summary> | ||
2385 | Response that is sent back to the web browser / client. | ||
2386 | |||
2387 | A response can be sent if different ways. The easiest one is | ||
2388 | to just fill the Body stream with content, everything else | ||
2389 | will then be taken care of by the framework. The default content-type | ||
2390 | is text/html, you should change it if you send anything else. | ||
2391 | |||
2392 | The second and slighty more complex way is to send the response | ||
2393 | as parts. Start with sending the header using the SendHeaders method and | ||
2394 | then you can send the body using SendBody method, but do not forget | ||
2395 | to set ContentType and ContentLength before doing so. | ||
2396 | </summary> | ||
2397 | <example> | ||
2398 | public void MyHandler(IHttpRequest request, IHttpResponse response) | ||
2399 | { | ||
2400 | |||
2401 | } | ||
2402 | </example> | ||
2403 | </member> | ||
2404 | <member name="M:HttpServer.IHttpResponse.AddHeader(System.String,System.String)"> | ||
2405 | <summary> | ||
2406 | Add another header to the document. | ||
2407 | </summary> | ||
2408 | <param name="name">Name of the header, case sensitive, use lower cases.</param> | ||
2409 | <param name="value">Header values can span over multiple lines as long as each line starts with a white space. New line chars should be \r\n</param> | ||
2410 | <exception cref="T:System.InvalidOperationException">If headers already been sent.</exception> | ||
2411 | <exception cref="T:System.ArgumentException">If value conditions have not been met.</exception> | ||
2412 | <remarks>Adding any header will override the default ones and those specified by properties.</remarks> | ||
2413 | </member> | ||
2414 | <member name="M:HttpServer.IHttpResponse.Send"> | ||
2415 | <summary> | ||
2416 | Send headers and body to the browser. | ||
2417 | </summary> | ||
2418 | <exception cref="T:System.InvalidOperationException">If content have already been sent.</exception> | ||
2419 | </member> | ||
2420 | <member name="M:HttpServer.IHttpResponse.SendBody(System.Byte[],System.Int32,System.Int32)"> | ||
2421 | <summary> | ||
2422 | Make sure that you have specified ContentLength and sent the headers first. | ||
2423 | </summary> | ||
2424 | <param name="buffer"></param> | ||
2425 | <exception cref="T:System.InvalidOperationException">If headers have not been sent.</exception> | ||
2426 | <see cref="M:HttpServer.IHttpResponse.SendHeaders"/> | ||
2427 | <param name="offset">offest of first byte to send</param> | ||
2428 | <param name="count">number of bytes to send.</param> | ||
2429 | <seealso cref="M:HttpServer.IHttpResponse.Send"/> | ||
2430 | <seealso cref="M:HttpServer.IHttpResponse.SendHeaders"/> | ||
2431 | <remarks>This method can be used if you want to send body contents without caching them first. This | ||
2432 | is recommended for larger files to keep the memory usage low.</remarks> | ||
2433 | </member> | ||
2434 | <member name="M:HttpServer.IHttpResponse.SendBody(System.Byte[])"> | ||
2435 | <summary> | ||
2436 | Make sure that you have specified ContentLength and sent the headers first. | ||
2437 | </summary> | ||
2438 | <param name="buffer"></param> | ||
2439 | <exception cref="T:System.InvalidOperationException">If headers have not been sent.</exception> | ||
2440 | <see cref="M:HttpServer.IHttpResponse.SendHeaders"/> | ||
2441 | <seealso cref="M:HttpServer.IHttpResponse.Send"/> | ||
2442 | <seealso cref="M:HttpServer.IHttpResponse.SendHeaders"/> | ||
2443 | <remarks>This method can be used if you want to send body contents without caching them first. This | ||
2444 | is recommended for larger files to keep the memory usage low.</remarks> | ||
2445 | </member> | ||
2446 | <member name="M:HttpServer.IHttpResponse.SendHeaders"> | ||
2447 | <summary> | ||
2448 | Send headers to the client. | ||
2449 | </summary> | ||
2450 | <exception cref="T:System.InvalidOperationException">If headers already been sent.</exception> | ||
2451 | <seealso cref="M:HttpServer.IHttpResponse.AddHeader(System.String,System.String)"/> | ||
2452 | <seealso cref="M:HttpServer.IHttpResponse.Send"/> | ||
2453 | <seealso cref="M:HttpServer.IHttpResponse.SendBody(System.Byte[])"/> | ||
2454 | </member> | ||
2455 | <member name="M:HttpServer.IHttpResponse.Redirect(System.Uri)"> | ||
2456 | <summary> | ||
2457 | Redirect client to somewhere else using the 302 status code. | ||
2458 | </summary> | ||
2459 | <param name="uri">Destination of the redirect</param> | ||
2460 | <exception cref="T:System.InvalidOperationException">If headers already been sent.</exception> | ||
2461 | <remarks>You can not do anything more with the request when a redirect have been done. This should be your last | ||
2462 | action.</remarks> | ||
2463 | </member> | ||
2464 | <member name="M:HttpServer.IHttpResponse.Redirect(System.String)"> | ||
2465 | <summary> | ||
2466 | redirect to somewhere | ||
2467 | </summary> | ||
2468 | <param name="url">where the redirect should go</param> | ||
2469 | <remarks> | ||
2470 | No body are allowed when doing redirects. | ||
2471 | </remarks> | ||
2472 | </member> | ||
2473 | <member name="P:HttpServer.IHttpResponse.Body"> | ||
2474 | <summary> | ||
2475 | The body stream is used to cache the body contents | ||
2476 | before sending everything to the client. It's the simplest | ||
2477 | way to serve documents. | ||
2478 | </summary> | ||
2479 | </member> | ||
2480 | <member name="P:HttpServer.IHttpResponse.ProtocolVersion"> | ||
2481 | <summary> | 1673 | <summary> |
2482 | Defines the version of the HTTP Response for applications where it's required | 1674 | Contains server side HTTP request information. |
2483 | for this to be forced. | ||
2484 | </summary> | 1675 | </summary> |
2485 | </member> | 1676 | </member> |
2486 | <member name="P:HttpServer.IHttpResponse.Chunked"> | 1677 | <member name="M:HttpServer.IHttpRequest.AddHeader(System.String,System.String)"> |
2487 | <summary> | 1678 | <summary> |
2488 | The chunked encoding modifies the body of a message in order to | 1679 | Called during parsing of a <see cref="T:HttpServer.IHttpRequest"/>. |
2489 | transfer it as a series of chunks, each with its own size indicator, | ||
2490 | followed by an OPTIONAL trailer containing entity-header fields. This | ||
2491 | allows dynamically produced content to be transferred along with the | ||
2492 | information necessary for the recipient to verify that it has | ||
2493 | received the full message. | ||
2494 | </summary> | 1680 | </summary> |
1681 | <param name="name">Name of the header, should not be URL encoded</param> | ||
1682 | <param name="value">Value of the header, should not be URL encoded</param> | ||
1683 | <exception cref="T:HttpServer.Exceptions.BadRequestException">If a header is incorrect.</exception> | ||
2495 | </member> | 1684 | </member> |
2496 | <member name="P:HttpServer.IHttpResponse.Connection"> | 1685 | <member name="M:HttpServer.IHttpRequest.AddToBody(System.Byte[],System.Int32,System.Int32)"> |
2497 | <summary> | 1686 | <summary> |
2498 | Kind of connection | 1687 | Add bytes to the body |
2499 | </summary> | 1688 | </summary> |
1689 | <param name="bytes">buffer to read bytes from</param> | ||
1690 | <param name="offset">where to start read</param> | ||
1691 | <param name="length">number of bytes to read</param> | ||
1692 | <returns>Number of bytes actually read (same as length unless we got all body bytes).</returns> | ||
1693 | <exception cref="T:System.InvalidOperationException">If body is not writable</exception> | ||
1694 | <exception cref="T:System.ArgumentNullException"><c>bytes</c> is null.</exception> | ||
1695 | <exception cref="T:System.ArgumentOutOfRangeException"><c>offset</c> is out of range.</exception> | ||
2500 | </member> | 1696 | </member> |
2501 | <member name="P:HttpServer.IHttpResponse.Encoding"> | 1697 | <member name="M:HttpServer.IHttpRequest.Clear"> |
2502 | <summary> | 1698 | <summary> |
2503 | Encoding to use when sending stuff to the client. | 1699 | Clear everything in the request |
2504 | </summary> | 1700 | </summary> |
2505 | <remarks>Default is UTF8</remarks> | ||
2506 | </member> | 1701 | </member> |
2507 | <member name="P:HttpServer.IHttpResponse.KeepAlive"> | 1702 | <member name="M:HttpServer.IHttpRequest.DecodeBody(HttpServer.FormDecoders.FormDecoderProvider)"> |
2508 | <summary> | 1703 | <summary> |
2509 | Number of seconds to keep connection alive | 1704 | Decode body into a form. |
2510 | </summary> | 1705 | </summary> |
2511 | <remarks>Only used if Connection property is set to ConnectionType.KeepAlive</remarks> | 1706 | <param name="providers">A list with form decoders.</param> |
1707 | <exception cref="T:System.IO.InvalidDataException">If body contents is not valid for the chosen decoder.</exception> | ||
1708 | <exception cref="T:System.InvalidOperationException">If body is still being transferred.</exception> | ||
2512 | </member> | 1709 | </member> |
2513 | <member name="P:HttpServer.IHttpResponse.Status"> | 1710 | <member name="M:HttpServer.IHttpRequest.SetCookies(HttpServer.RequestCookies)"> |
2514 | <summary> | 1711 | <summary> |
2515 | Status code that is sent to the client. | 1712 | Sets the cookies. |
2516 | </summary> | 1713 | </summary> |
2517 | <remarks>Default is HttpStatusCode.Ok</remarks> | 1714 | <param name="cookies">The cookies.</param> |
2518 | </member> | 1715 | </member> |
2519 | <member name="P:HttpServer.IHttpResponse.Reason"> | 1716 | <member name="M:HttpServer.IHttpRequest.CreateResponse(HttpServer.IHttpClientContext)"> |
2520 | <summary> | 1717 | <summary> |
2521 | Information about why a specific status code was used. | 1718 | Create a response object. |
2522 | </summary> | 1719 | </summary> |
1720 | <param name="context">Context for the connected client.</param> | ||
1721 | <returns>A new <see cref="T:HttpServer.IHttpResponse"/>.</returns> | ||
2523 | </member> | 1722 | </member> |
2524 | <member name="P:HttpServer.IHttpResponse.ContentLength"> | 1723 | <member name="P:HttpServer.IHttpRequest.AcceptTypes"> |
2525 | <summary> | 1724 | <summary> |
2526 | Size of the body. MUST be specified before sending the header, | 1725 | Gets kind of types accepted by the client. |
2527 | unless property Chunked is set to true. | ||
2528 | </summary> | 1726 | </summary> |
2529 | </member> | 1727 | </member> |
2530 | <member name="P:HttpServer.IHttpResponse.ContentType"> | 1728 | <member name="P:HttpServer.IHttpRequest.Body"> |
2531 | <summary> | 1729 | <summary> |
2532 | Kind of content in the body | 1730 | Gets or sets body stream. |
2533 | </summary> | 1731 | </summary> |
2534 | <remarks>Default is text/html</remarks> | ||
2535 | </member> | 1732 | </member> |
2536 | <member name="P:HttpServer.IHttpResponse.HeadersSent"> | 1733 | <member name="P:HttpServer.IHttpRequest.BodyIsComplete"> |
2537 | <summary> | 1734 | <summary> |
2538 | Headers have been sent to the client- | 1735 | Gets whether the body is complete. |
2539 | </summary> | 1736 | </summary> |
2540 | <remarks>You can not send any additional headers if they have already been sent.</remarks> | ||
2541 | </member> | 1737 | </member> |
2542 | <member name="P:HttpServer.IHttpResponse.Sent"> | 1738 | <member name="P:HttpServer.IHttpRequest.Connection"> |
2543 | <summary> | 1739 | <summary> |
2544 | The whole response have been sent. | 1740 | Gets or sets kind of connection used for the session. |
2545 | </summary> | 1741 | </summary> |
2546 | </member> | 1742 | </member> |
2547 | <member name="P:HttpServer.IHttpResponse.Cookies"> | 1743 | <member name="P:HttpServer.IHttpRequest.ContentLength"> |
2548 | <summary> | 1744 | <summary> |
2549 | Cookies that should be created/changed. | 1745 | Gets or sets number of bytes in the body. |
2550 | </summary> | 1746 | </summary> |
2551 | </member> | 1747 | </member> |
2552 | <member name="T:HttpServer.ConnectionType"> | 1748 | <member name="P:HttpServer.IHttpRequest.Cookies"> |
2553 | <summary> | 1749 | <summary> |
2554 | Type of HTTP connection | 1750 | Gets cookies that was sent with the request. |
2555 | </summary> | 1751 | </summary> |
2556 | </member> | 1752 | </member> |
2557 | <member name="F:HttpServer.ConnectionType.Close"> | 1753 | <member name="P:HttpServer.IHttpRequest.Form"> |
2558 | <summary> | 1754 | <summary> |
2559 | Connection is closed after each request-response | 1755 | Gets form parameters. |
2560 | </summary> | 1756 | </summary> |
2561 | </member> | 1757 | </member> |
2562 | <member name="F:HttpServer.ConnectionType.KeepAlive"> | 1758 | <member name="P:HttpServer.IHttpRequest.Headers"> |
2563 | <summary> | 1759 | <summary> |
2564 | Connection is kept alive for X seconds (unless another request have been made) | 1760 | Gets headers sent by the client. |
2565 | </summary> | 1761 | </summary> |
2566 | </member> | 1762 | </member> |
2567 | <member name="T:HttpServer.HttpResponse"> | 1763 | <member name="P:HttpServer.IHttpRequest.HttpVersion"> |
2568 | <summary> | 1764 | <summary> |
2569 | Response that is sent back to the web browser / client. | 1765 | Gets or sets version of HTTP protocol that's used. |
2570 | </summary> | 1766 | </summary> |
2571 | <remarks> | 1767 | <remarks> |
2572 | <para> | 1768 | Probably <see cref="F:HttpServer.HttpHelper.HTTP10"/> or <see cref="F:HttpServer.HttpHelper.HTTP11"/>. |
2573 | A response can be sent if different ways. The easiest one is | ||
2574 | to just fill the Body stream with content, everything else | ||
2575 | will then be taken care of by the framework. The default content-type | ||
2576 | is text/html, you should change it if you send anything else. | ||
2577 | </para><para> | ||
2578 | The second and slightly more complex way is to send the response | ||
2579 | as parts. Start with sending the header using the SendHeaders method and | ||
2580 | then you can send the body using SendBody method, but do not forget | ||
2581 | to set <see cref="P:HttpServer.HttpResponse.ContentType"/> and <see cref="P:HttpServer.HttpResponse.ContentLength"/> before doing so. | ||
2582 | </para> | ||
2583 | </remarks> | 1769 | </remarks> |
2584 | <example> | 1770 | <seealso cref="T:HttpServer.HttpHelper"/> |
2585 | <code> | ||
2586 | // Example using response body. | ||
2587 | class MyModule : HttpModule | ||
2588 | { | ||
2589 | public override bool Process(IHttpRequest request, IHttpResponse response, IHttpSession session) | ||
2590 | { | ||
2591 | StreamWriter writer = new StreamWriter(response.Body); | ||
2592 | writer.WriteLine("Hello dear World!"); | ||
2593 | writer.Flush(); | ||
2594 | |||
2595 | // return true to tell webserver that we've handled the url | ||
2596 | return true; | ||
2597 | } | ||
2598 | } | ||
2599 | </code> | ||
2600 | </example> | ||
2601 | todo: add two examples, using SendHeaders/SendBody and just the Body stream. | ||
2602 | </member> | ||
2603 | <member name="M:HttpServer.HttpResponse.#ctor(HttpServer.IHttpClientContext,HttpServer.IHttpRequest)"> | ||
2604 | <summary> | ||
2605 | Initializes a new instance of the <see cref="T:HttpServer.IHttpResponse"/> class. | ||
2606 | </summary> | ||
2607 | <param name="context">Client that send the <see cref="T:HttpServer.IHttpRequest"/>.</param> | ||
2608 | <param name="request">Contains information of what the client want to receive.</param> | ||
2609 | <exception cref="T:System.ArgumentException"><see cref="P:HttpServer.IHttpRequest.HttpVersion"/> cannot be empty.</exception> | ||
2610 | </member> | ||
2611 | <member name="M:HttpServer.HttpResponse.#ctor(HttpServer.IHttpClientContext,System.String,HttpServer.ConnectionType)"> | ||
2612 | <summary> | ||
2613 | Initializes a new instance of the <see cref="T:HttpServer.IHttpResponse"/> class. | ||
2614 | </summary> | ||
2615 | <param name="context">Client that send the <see cref="T:HttpServer.IHttpRequest"/>.</param> | ||
2616 | <param name="httpVersion">Version of HTTP protocol that the client uses.</param> | ||
2617 | <param name="connectionType">Type of HTTP connection used.</param> | ||
2618 | </member> | ||
2619 | <member name="M:HttpServer.HttpResponse.AddHeader(System.String,System.String)"> | ||
2620 | <summary> | ||
2621 | Add another header to the document. | ||
2622 | </summary> | ||
2623 | <param name="name">Name of the header, case sensitive, use lower cases.</param> | ||
2624 | <param name="value">Header values can span over multiple lines as long as each line starts with a white space. New line chars should be \r\n</param> | ||
2625 | <exception cref="T:System.InvalidOperationException">If headers already been sent.</exception> | ||
2626 | <exception cref="T:System.ArgumentException">If value conditions have not been met.</exception> | ||
2627 | <remarks>Adding any header will override the default ones and those specified by properties.</remarks> | ||
2628 | </member> | ||
2629 | <member name="M:HttpServer.HttpResponse.Send"> | ||
2630 | <summary> | ||
2631 | Send headers and body to the browser. | ||
2632 | </summary> | ||
2633 | <exception cref="T:System.InvalidOperationException">If content have already been sent.</exception> | ||
2634 | </member> | ||
2635 | <member name="M:HttpServer.HttpResponse.SendBody(System.Byte[],System.Int32,System.Int32)"> | ||
2636 | <summary> | ||
2637 | Make sure that you have specified <see cref="P:HttpServer.HttpResponse.ContentLength"/> and sent the headers first. | ||
2638 | </summary> | ||
2639 | <param name="buffer"></param> | ||
2640 | <exception cref="T:System.InvalidOperationException">If headers have not been sent.</exception> | ||
2641 | <see cref="M:HttpServer.HttpResponse.SendHeaders"/> | ||
2642 | <param name="offset">offset of first byte to send</param> | ||
2643 | <param name="count">number of bytes to send.</param> | ||
2644 | <seealso cref="M:HttpServer.HttpResponse.Send"/> | ||
2645 | <seealso cref="M:HttpServer.HttpResponse.SendHeaders"/> | ||
2646 | <remarks>This method can be used if you want to send body contents without caching them first. This | ||
2647 | is recommended for larger files to keep the memory usage low.</remarks> | ||
2648 | </member> | ||
2649 | <member name="M:HttpServer.HttpResponse.SendBody(System.Byte[])"> | ||
2650 | <summary> | ||
2651 | Make sure that you have specified <see cref="P:HttpServer.HttpResponse.ContentLength"/> and sent the headers first. | ||
2652 | </summary> | ||
2653 | <param name="buffer"></param> | ||
2654 | <exception cref="T:System.InvalidOperationException">If headers have not been sent.</exception> | ||
2655 | <see cref="M:HttpServer.HttpResponse.SendHeaders"/> | ||
2656 | <seealso cref="M:HttpServer.HttpResponse.Send"/> | ||
2657 | <seealso cref="M:HttpServer.HttpResponse.SendHeaders"/> | ||
2658 | <remarks>This method can be used if you want to send body contents without caching them first. This | ||
2659 | is recommended for larger files to keep the memory usage low.</remarks> | ||
2660 | </member> | ||
2661 | <member name="M:HttpServer.HttpResponse.SendHeaders"> | ||
2662 | <summary> | ||
2663 | Send headers to the client. | ||
2664 | </summary> | ||
2665 | <exception cref="T:System.InvalidOperationException">If headers already been sent.</exception> | ||
2666 | <seealso cref="M:HttpServer.HttpResponse.AddHeader(System.String,System.String)"/> | ||
2667 | <seealso cref="M:HttpServer.HttpResponse.Send"/> | ||
2668 | <seealso cref="M:HttpServer.HttpResponse.SendBody(System.Byte[])"/> | ||
2669 | </member> | 1771 | </member> |
2670 | <member name="M:HttpServer.HttpResponse.Redirect(System.Uri)"> | 1772 | <member name="P:HttpServer.IHttpRequest.IsAjax"> |
2671 | <summary> | 1773 | <summary> |
2672 | Redirect client to somewhere else using the 302 status code. | 1774 | Gets whether the request was made by Ajax (Asynchronous JavaScript) |
2673 | </summary> | 1775 | </summary> |
2674 | <param name="uri">Destination of the redirect</param> | ||
2675 | <exception cref="T:System.InvalidOperationException">If headers already been sent.</exception> | ||
2676 | <remarks>You can not do anything more with the request when a redirect have been done. This should be your last | ||
2677 | action.</remarks> | ||
2678 | </member> | 1776 | </member> |
2679 | <member name="M:HttpServer.HttpResponse.Redirect(System.String)"> | 1777 | <member name="P:HttpServer.IHttpRequest.Method"> |
2680 | <summary> | 1778 | <summary> |
2681 | redirect to somewhere | 1779 | Gets or sets requested method. |
2682 | </summary> | 1780 | </summary> |
2683 | <param name="url">where the redirect should go</param> | ||
2684 | <remarks> | 1781 | <remarks> |
2685 | No body are allowed when doing redirects. | 1782 | Will always be in upper case. |
2686 | </remarks> | 1783 | </remarks> |
1784 | <see cref="P:HttpServer.IHttpRequest.Method"/> | ||
2687 | </member> | 1785 | </member> |
2688 | <member name="P:HttpServer.HttpResponse.Body"> | 1786 | <member name="P:HttpServer.IHttpRequest.Param"> |
2689 | <summary> | ||
2690 | The body stream is used to cache the body contents | ||
2691 | before sending everything to the client. It's the simplest | ||
2692 | way to serve documents. | ||
2693 | </summary> | ||
2694 | </member> | ||
2695 | <member name="P:HttpServer.HttpResponse.Chunked"> | ||
2696 | <summary> | ||
2697 | The chunked encoding modifies the body of a message in order to | ||
2698 | transfer it as a series of chunks, each with its own size indicator, | ||
2699 | followed by an OPTIONAL trailer containing entity-header fields. This | ||
2700 | allows dynamically produced content to be transferred along with the | ||
2701 | information necessary for the recipient to verify that it has | ||
2702 | received the full message. | ||
2703 | </summary> | ||
2704 | </member> | ||
2705 | <member name="P:HttpServer.HttpResponse.ProtocolVersion"> | ||
2706 | <summary> | 1787 | <summary> |
2707 | Defines the version of the HTTP Response for applications where it's required | 1788 | Gets parameter from <see cref="P:HttpServer.IHttpRequest.QueryString"/> or <see cref="P:HttpServer.IHttpRequest.Form"/>. |
2708 | for this to be forced. | ||
2709 | </summary> | 1789 | </summary> |
2710 | </member> | 1790 | </member> |
2711 | <member name="P:HttpServer.HttpResponse.Connection"> | 1791 | <member name="P:HttpServer.IHttpRequest.QueryString"> |
2712 | <summary> | 1792 | <summary> |
2713 | Kind of connection | 1793 | Gets variables sent in the query string |
2714 | </summary> | 1794 | </summary> |
2715 | </member> | 1795 | </member> |
2716 | <member name="P:HttpServer.HttpResponse.Encoding"> | 1796 | <member name="P:HttpServer.IHttpRequest.Uri"> |
2717 | <summary> | 1797 | <summary> |
2718 | Encoding to use when sending stuff to the client. | 1798 | Gets or sets requested URI. |
2719 | </summary> | 1799 | </summary> |
2720 | <remarks>Default is UTF8</remarks> | ||
2721 | </member> | 1800 | </member> |
2722 | <member name="P:HttpServer.HttpResponse.KeepAlive"> | 1801 | <member name="P:HttpServer.IHttpRequest.UriParts"> |
2723 | <summary> | 1802 | <summary> |
2724 | Number of seconds to keep connection alive | 1803 | Gets URI absolute path divided into parts. |
2725 | </summary> | 1804 | </summary> |
2726 | <remarks>Only used if Connection property is set to <see cref="F:HttpServer.ConnectionType.KeepAlive"/>.</remarks> | 1805 | <example> |
1806 | // URI is: http://gauffin.com/code/tiny/ | ||
1807 | Console.WriteLine(request.UriParts[0]); // result: code | ||
1808 | Console.WriteLine(request.UriParts[1]); // result: tiny | ||
1809 | </example> | ||
1810 | <remarks> | ||
1811 | If you're using controllers than the first part is controller name, | ||
1812 | the second part is method name and the third part is Id property. | ||
1813 | </remarks> | ||
1814 | <seealso cref="P:HttpServer.IHttpRequest.Uri"/> | ||
2727 | </member> | 1815 | </member> |
2728 | <member name="P:HttpServer.HttpResponse.Status"> | 1816 | <member name="P:HttpServer.IHttpRequest.UriPath"> |
2729 | <summary> | 1817 | <summary> |
2730 | Status code that is sent to the client. | 1818 | Gets or sets path and query. |
2731 | </summary> | 1819 | </summary> |
2732 | <remarks>Default is <see cref="F:System.Net.HttpStatusCode.OK"/></remarks> | 1820 | <see cref="P:HttpServer.IHttpRequest.Uri"/> |
1821 | <remarks> | ||
1822 | Are only used during request parsing. Cannot be set after "Host" header have been | ||
1823 | added. | ||
1824 | </remarks> | ||
2733 | </member> | 1825 | </member> |
2734 | <member name="P:HttpServer.HttpResponse.Reason"> | 1826 | <member name="T:HttpServer.Helpers.Implementations.PrototypeImp"> |
2735 | <summary> | 1827 | <summary> |
2736 | Information about why a specific status code was used. | 1828 | PrototypeJS implementation of the javascript functions. |
2737 | </summary> | 1829 | </summary> |
2738 | </member> | 1830 | </member> |
2739 | <member name="P:HttpServer.HttpResponse.ContentLength"> | 1831 | <member name="T:HttpServer.Helpers.JavascriptHelperImplementation"> |
2740 | <summary> | 1832 | <summary> |
2741 | Size of the body. MUST be specified before sending the header, | 1833 | Purpose of this class is to create a javascript toolkit independent javascript helper. |
2742 | unless property Chunked is set to true. | ||
2743 | </summary> | 1834 | </summary> |
2744 | </member> | 1835 | </member> |
2745 | <member name="P:HttpServer.HttpResponse.ContentType"> | 1836 | <member name="M:HttpServer.Helpers.JavascriptHelperImplementation.GenerateOptions(System.Text.StringBuilder,System.String[],System.Boolean)"> |
2746 | <summary> | 1837 | <summary> |
2747 | Kind of content in the body | 1838 | Generates a list with JS options. |
2748 | </summary> | 1839 | </summary> |
2749 | <remarks>Default type is "text/html"</remarks> | 1840 | <param name="sb">StringBuilder that the options should be added to.</param> |
1841 | <param name="options">the javascript options. name, value pairs. each string value should be escaped by YOU!</param> | ||
1842 | <param name="startWithComma">true if we should start with a comma.</param> | ||
2750 | </member> | 1843 | </member> |
2751 | <member name="P:HttpServer.HttpResponse.HeadersSent"> | 1844 | <member name="M:HttpServer.Helpers.JavascriptHelperImplementation.RemoveJavascriptOptions(System.String[])"> |
2752 | <summary> | 1845 | <summary> |
2753 | Headers have been sent to the client- | 1846 | Removes any javascript parameters from an array of parameters |
2754 | </summary> | 1847 | </summary> |
2755 | <remarks>You can not send any additional headers if they have already been sent.</remarks> | 1848 | <param name="options">The array of parameters to remove javascript params from</param> |
1849 | <returns>An array of html parameters</returns> | ||
2756 | </member> | 1850 | </member> |
2757 | <member name="P:HttpServer.HttpResponse.Sent"> | 1851 | <member name="M:HttpServer.Helpers.JavascriptHelperImplementation.AjaxFormOnSubmit(System.String[])"> |
2758 | <summary> | 1852 | <summary> |
2759 | The whole response have been sent. | 1853 | javascript action that should be added to the "onsubmit" event in the form tag. |
2760 | </summary> | 1854 | </summary> |
1855 | <returns></returns> | ||
1856 | <remarks>All javascript option names should end with colon.</remarks> | ||
1857 | <example> | ||
1858 | <code> | ||
1859 | JSHelper.AjaxRequest("/user/show/1", "onsuccess:", "$('userInfo').update(result);"); | ||
1860 | </code> | ||
1861 | </example> | ||
2761 | </member> | 1862 | </member> |
2762 | <member name="P:HttpServer.HttpResponse.Cookies"> | 1863 | <member name="M:HttpServer.Helpers.JavascriptHelperImplementation.AjaxRequest(System.String,System.String[])"> |
2763 | <summary> | 1864 | <summary> |
2764 | Cookies that should be created/changed. | 1865 | Requests a url through ajax |
2765 | </summary> | 1866 | </summary> |
1867 | <param name="url">url to fetch</param> | ||
1868 | <param name="options">optional options in format "key, value, key, value", used in JS request object.</param> | ||
1869 | <returns>a link tag</returns> | ||
1870 | <remarks>All javascript option names should end with colon.</remarks> | ||
1871 | <example> | ||
1872 | <code> | ||
1873 | JSHelper.AjaxRequest("/user/show/1", "onsuccess:", "$('userInfo').update(result);"); | ||
1874 | </code> | ||
1875 | </example> | ||
2766 | </member> | 1876 | </member> |
2767 | <member name="T:HttpServer.HttpInputItem"> | 1877 | <member name="M:HttpServer.Helpers.JavascriptHelperImplementation.AjaxUpdater(System.String,System.String,System.String[])"> |
2768 | <summary> | 1878 | <summary> |
2769 | represents a HTTP input item. Each item can have multiple sub items, a sub item | 1879 | Ajax requests that updates an element with |
2770 | is made in a HTML form by using square brackets | 1880 | the fetched content |
2771 | </summary> | 1881 | </summary> |
1882 | <param name="url">Url to fetch content from</param> | ||
1883 | <param name="targetId">element to update</param> | ||
1884 | <param name="options">optional options in format "key, value, key, value", used in JS updater object.</param> | ||
1885 | <returns>A link tag.</returns> | ||
1886 | <remarks>All javascript option names should end with colon.</remarks> | ||
2772 | <example> | 1887 | <example> |
2773 | // <input type="text" name="user[FirstName]" value="jonas" /> becomes: | 1888 | <code> |
2774 | Console.WriteLine("Value: {0}", form["user"]["FirstName"].Value); | 1889 | JSHelper.AjaxUpdater("/user/show/1", "userInfo", "onsuccess:", "alert('Successful!');"); |
1890 | </code> | ||
2775 | </example> | 1891 | </example> |
2776 | <remarks> | ||
2777 | All names in a form SHOULD be in lowercase. | ||
2778 | </remarks> | ||
2779 | </member> | 1892 | </member> |
2780 | <member name="F:HttpServer.HttpInputItem.Empty"> | 1893 | <member name="M:HttpServer.Helpers.JavascriptHelperImplementation.DialogLink(System.String,System.String,System.String[])"> |
2781 | <summary> Representation of a non-initialized <see cref="T:HttpServer.HttpInputItem"/>.</summary> | ||
2782 | </member> | ||
2783 | <member name="M:HttpServer.HttpInputItem.#ctor(System.String,System.String)"> | ||
2784 | <summary> | 1894 | <summary> |
2785 | Initializes an input item setting its name/identifier and value | 1895 | A link that pop ups a Dialog (overlay div) |
2786 | </summary> | 1896 | </summary> |
2787 | <param name="name">Parameter name/id</param> | 1897 | <param name="url">url to contents of dialog</param> |
2788 | <param name="value">Parameter value</param> | 1898 | <param name="title">link title</param> |
2789 | </member> | 1899 | <returns>A "a"-tag that popups a dialog when clicked</returns> |
2790 | <member name="M:HttpServer.HttpInputItem.#ctor(HttpServer.HttpInputItem)"> | 1900 | <param name="htmlAttributes">name/value of html attributes</param> |
2791 | <summary>Creates a deep copy of the item specified</summary> | 1901 | <example> |
2792 | <param name="item">The item to copy</param> | 1902 | WebHelper.DialogLink("/user/show/1", "show user", "onmouseover", "alert('booh!');"); |
2793 | <remarks>The function makes a deep copy of quite a lot which can be slow</remarks> | 1903 | </example> |
2794 | </member> | 1904 | </member> |
2795 | <member name="M:HttpServer.HttpInputItem.Add(System.String)"> | 1905 | <member name="M:HttpServer.Helpers.JavascriptHelperImplementation.CloseDialog"> |
2796 | <summary> | 1906 | <summary> |
2797 | Add another value to this item | 1907 | Close a javascript dialog window/div. |
2798 | </summary> | 1908 | </summary> |
2799 | <param name="value">Value to add.</param> | 1909 | <returns>javascript for closing a dialog.</returns> |
2800 | <exception cref="T:System.InvalidOperationException">Cannot add stuff to <see cref="F:HttpServer.HttpInput.Empty"/>.</exception> | 1910 | <see cref="M:HttpServer.Helpers.JavascriptHelperImplementation.DialogLink(System.String,System.String,System.String[])"/> |
2801 | </member> | 1911 | </member> |
2802 | <member name="M:HttpServer.HttpInputItem.Contains(System.String)"> | 1912 | <member name="M:HttpServer.Helpers.JavascriptHelperImplementation.CreateDialog(System.String,System.String,System.String[])"> |
2803 | <summary> | 1913 | <summary> |
2804 | checks if a sub-item exists (and has a value). | 1914 | Creates a new modal dialog window |
2805 | </summary> | 1915 | </summary> |
2806 | <param name="name">name in lower case</param> | 1916 | <param name="url">url to open in window.</param> |
2807 | <returns>true if the sub-item exists and has a value; otherwise false.</returns> | 1917 | <param name="title">window title (may not be supported by all js implementations)</param> |
2808 | </member> | 1918 | <param name="options"></param> |
2809 | <member name="M:HttpServer.HttpInputItem.ToString"> | 1919 | <returns></returns> |
2810 | <summary> Returns a formatted representation of the instance with the values of all contained parameters </summary> | ||
2811 | </member> | 1920 | </member> |
2812 | <member name="M:HttpServer.HttpInputItem.ToString(System.String,System.Boolean)"> | 1921 | <member name="M:HttpServer.Helpers.Implementations.PrototypeImp.AjaxRequest(System.String,System.String[])"> |
2813 | <summary> | 1922 | <summary> |
2814 | Outputs the string in a formatted manner | 1923 | Requests a url through ajax |
2815 | </summary> | 1924 | </summary> |
2816 | <param name="prefix">A prefix to append, used internally</param> | 1925 | <param name="url">url to fetch. Url is NOT enclosed in quotes by the implementation. You need to do that yourself.</param> |
2817 | <param name="asQuerySting">produce a query string</param> | 1926 | <param name="options">optional options in format "key, value, key, value", used in JS request object. All keys should end with colon.</param> |
1927 | <returns>a link tag</returns> | ||
1928 | <remarks>onclick attribute is used by this method.</remarks> | ||
1929 | <example> | ||
1930 | <code> | ||
1931 | // plain text | ||
1932 | JSHelper.AjaxRequest("'/user/show/1'"); | ||
1933 | |||
1934 | // ajax request using this.href | ||
1935 | string link = "<a href=\"/user/call/1\" onclick=\"" + JSHelper.AjaxRequest("this.href") + "/<call user</a>"; | ||
1936 | </code> | ||
1937 | </example> | ||
2818 | </member> | 1938 | </member> |
2819 | <member name="M:HttpServer.HttpInputItem.Add(System.String,System.String)"> | 1939 | <member name="M:HttpServer.Helpers.Implementations.PrototypeImp.Contains(System.Collections.Generic.IEnumerable{System.String},System.String)"> |
2820 | <summary> | 1940 | <summary> |
2821 | Add a sub item. | 1941 | Determins if a list of strings contains a specific value |
2822 | </summary> | 1942 | </summary> |
2823 | <param name="name">Can contain array formatting, the item is then parsed and added in multiple levels</param> | 1943 | <param name="options">options to check in</param> |
2824 | <param name="value">Value to add.</param> | 1944 | <param name="value">value to find</param> |
2825 | <exception cref="T:System.ArgumentNullException">Argument is null.</exception> | 1945 | <returns>true if value was found</returns> |
2826 | <exception cref="T:System.InvalidOperationException">Cannot add stuff to <see cref="F:HttpServer.HttpInput.Empty"/>.</exception> | 1946 | <remarks>case insensitive</remarks> |
2827 | </member> | 1947 | </member> |
2828 | <member name="M:HttpServer.HttpInputItem.System#Collections#Generic#IEnumerable{HttpServer#HttpInputItem}#GetEnumerator"> | 1948 | <member name="M:HttpServer.Helpers.Implementations.PrototypeImp.AjaxUpdater(System.String,System.String,System.String[])"> |
2829 | <summary> | 1949 | <summary> |
2830 | Returns an enumerator that iterates through the collection. | 1950 | Ajax requests that updates an element with |
1951 | the fetched content | ||
2831 | </summary> | 1952 | </summary> |
2832 | 1953 | <param name="url">URL to fetch. URL is NOT enclosed in quotes by the implementation. You need to do that yourself.</param> | |
2833 | <returns> | 1954 | <param name="targetId">element to update</param> |
2834 | A <see cref="T:System.Collections.Generic.IEnumerator`1"></see> that can be used to iterate through the collection. | 1955 | <param name="options">options in format "key, value, key, value". All keys should end with colon.</param> |
2835 | </returns> | 1956 | <returns>A link tag.</returns> |
2836 | <filterpriority>1</filterpriority> | 1957 | <example> |
1958 | <code> | ||
1959 | JSHelper.AjaxUpdater("'/user/show/1'", "user", "onsuccess:", "alert('hello');", "asynchronous:", "true"); | ||
1960 | </code> | ||
1961 | </example> | ||
2837 | </member> | 1962 | </member> |
2838 | <member name="M:HttpServer.HttpInputItem.GetEnumerator"> | 1963 | <member name="M:HttpServer.Helpers.Implementations.PrototypeImp.DialogLink(System.String,System.String,System.String[])"> |
2839 | <summary> | 1964 | <summary> |
2840 | Returns an enumerator that iterates through a collection. | 1965 | A link that pop ups a Dialog (overlay div) |
2841 | </summary> | 1966 | </summary> |
2842 | 1967 | <param name="url">URL to contents of dialog</param> | |
1968 | <param name="title">link title</param> | ||
1969 | <param name="htmlAttributes">name, value, name, value</param> | ||
2843 | <returns> | 1970 | <returns> |
2844 | An <see cref="T:System.Collections.IEnumerator"></see> object that can be used to iterate through the collection. | 1971 | A "a"-tag that popups a dialog when clicked |
2845 | </returns> | 1972 | </returns> |
2846 | <filterpriority>2</filterpriority> | 1973 | <remarks><para>Requires Control.Modal found here: http://livepipe.net/projects/control_modal/</para> |
1974 | And the following JavaScript (load it in application.js): | ||
1975 | <code> | ||
1976 | Event.observe(window, 'load', | ||
1977 | function() { | ||
1978 | document.getElementsByClassName('modal').each(function(link){ new Control.Modal(link); }); | ||
1979 | } | ||
1980 | ); | ||
1981 | </code> | ||
1982 | </remarks> | ||
1983 | <example> | ||
1984 | WebHelper.DialogLink("/user/show/1", "show user", "onmouseover", "alert('booh!');"); | ||
1985 | </example> | ||
2847 | </member> | 1986 | </member> |
2848 | <member name="M:HttpServer.HttpInputItem.ToString(System.String)"> | 1987 | <member name="M:HttpServer.Helpers.Implementations.PrototypeImp.CreateDialog(System.String,System.String,System.String[])"> |
2849 | <summary> | 1988 | <summary> |
2850 | Outputs the string in a formatted manner | 1989 | create a modal dialog (usually using DIVs) |
2851 | </summary> | 1990 | </summary> |
2852 | <param name="prefix">A prefix to append, used internally</param> | 1991 | <param name="url">url to fetch</param> |
1992 | <param name="title">dialog title</param> | ||
1993 | <param name="options">javascript/html attributes. javascript options ends with colon ':'.</param> | ||
2853 | <returns></returns> | 1994 | <returns></returns> |
2854 | </member> | 1995 | </member> |
2855 | <member name="P:HttpServer.HttpInputItem.Count"> | 1996 | <member name="M:HttpServer.Helpers.Implementations.PrototypeImp.CloseDialog"> |
2856 | <summary> | ||
2857 | Number of values | ||
2858 | </summary> | ||
2859 | </member> | ||
2860 | <member name="P:HttpServer.HttpInputItem.Item(System.String)"> | ||
2861 | <summary> | ||
2862 | Get a sub item | ||
2863 | </summary> | ||
2864 | <param name="name">name in lower case.</param> | ||
2865 | <returns><see cref="F:HttpServer.HttpInputItem.Empty"/> if no item was found.</returns> | ||
2866 | </member> | ||
2867 | <member name="P:HttpServer.HttpInputItem.Name"> | ||
2868 | <summary> | ||
2869 | Name of item (in lower case). | ||
2870 | </summary> | ||
2871 | </member> | ||
2872 | <member name="P:HttpServer.HttpInputItem.Value"> | ||
2873 | <summary> | ||
2874 | Returns the first value, or null if no value exist. | ||
2875 | </summary> | ||
2876 | </member> | ||
2877 | <member name="P:HttpServer.HttpInputItem.LastValue"> | ||
2878 | <summary> | ||
2879 | Returns the last value, or null if no value exist. | ||
2880 | </summary> | ||
2881 | </member> | ||
2882 | <member name="P:HttpServer.HttpInputItem.Values"> | ||
2883 | <summary> | 1997 | <summary> |
2884 | Returns the list with values. | 1998 | Close a javascript dialog window/div. |
2885 | </summary> | 1999 | </summary> |
2000 | <returns>javascript for closing a dialog.</returns> | ||
2001 | <see cref="M:HttpServer.Helpers.Implementations.PrototypeImp.DialogLink(System.String,System.String,System.String[])"/> | ||
2886 | </member> | 2002 | </member> |
2887 | <member name="P:HttpServer.HttpInputItem.HttpServer#IHttpInput#Item(System.String)"> | 2003 | <member name="M:HttpServer.Helpers.Implementations.PrototypeImp.AjaxFormOnSubmit(System.String[])"> |
2888 | <summary> | 2004 | <summary> |
2889 | 2005 | javascript action that should be added to the "onsubmit" event in the form tag. | |
2890 | </summary> | 2006 | </summary> |
2891 | <param name="name">name in lower case</param> | 2007 | <param name="options">remember to encapsulate strings in ''</param> |
2892 | <returns></returns> | 2008 | <returns></returns> |
2009 | <remarks>All javascript option names should end with colon.</remarks> | ||
2010 | <example> | ||
2011 | <code> | ||
2012 | JSHelper.AjaxRequest("/user/show/1", "onsuccess:", "$('userInfo').update(result);"); | ||
2013 | </code> | ||
2014 | </example> | ||
2893 | </member> | 2015 | </member> |
2894 | <member name="T:HttpServer.Helpers.FormHelper"> | 2016 | <member name="T:HttpServer.Helpers.FormHelper"> |
2895 | <summary> | 2017 | <summary> |
@@ -3109,40 +2231,262 @@ | |||
3109 | </summary> | 2231 | </summary> |
3110 | <returns></returns> | 2232 | <returns></returns> |
3111 | </member> | 2233 | </member> |
3112 | <member name="M:HttpServer.ComponentProvider.AddInstance``1(System.Object)"> | 2234 | <member name="T:HttpServer.ExceptionHandler"> |
3113 | <summary> | 2235 | <summary> |
3114 | Add a component instance | 2236 | We dont want to let the server to die due to exceptions thrown in worker threads. |
2237 | therefore we use this delegate to give you a change to handle uncaught exceptions. | ||
3115 | </summary> | 2238 | </summary> |
3116 | <typeparam name="T">Interface type</typeparam> | 2239 | <param name="source">Class that the exception was thrown in.</param> |
3117 | <param name="instance">Instance to add</param> | 2240 | <param name="exception">Exception</param> |
2241 | <remarks> | ||
2242 | Server will throw a InternalServerException in release version if you dont | ||
2243 | handle this delegate. | ||
2244 | </remarks> | ||
3118 | </member> | 2245 | </member> |
3119 | <member name="M:HttpServer.ComponentProvider.Get``1"> | 2246 | <member name="T:HttpServer.Authentication.DigestAuthentication"> |
3120 | <summary> | 2247 | <summary> |
3121 | Get a component. | 2248 | Implements HTTP Digest authentication. It's more secure than Basic auth since password is |
2249 | encrypted with a "key" from the server. | ||
3122 | </summary> | 2250 | </summary> |
3123 | <typeparam name="T">Interface type</typeparam> | ||
3124 | <returns>Component if registered, otherwise null.</returns> | ||
3125 | <remarks> | 2251 | <remarks> |
3126 | Component will get created if needed. | 2252 | Keep in mind that the password is encrypted with MD5. Use a combination of SSL and digest auth to be secure. |
3127 | </remarks> | 2253 | </remarks> |
3128 | </member> | 2254 | </member> |
3129 | <member name="M:HttpServer.ComponentProvider.Create(HttpServer.ComponentProvider.TypeInformation)"> | 2255 | <member name="T:HttpServer.Authentication.AuthenticationModule"> |
3130 | <exception cref="T:System.InvalidOperationException">If instance cannot be created.</exception> | 2256 | <summary> |
2257 | Authentication modules are used to implement different | ||
2258 | kind of HTTP authentication. | ||
2259 | </summary> | ||
3131 | </member> | 2260 | </member> |
3132 | <member name="M:HttpServer.ComponentProvider.Contains(System.Type)"> | 2261 | <member name="F:HttpServer.Authentication.AuthenticationModule.AuthenticationTag"> |
3133 | <summary> | 2262 | <summary> |
3134 | Checks if the specified component interface have been added. | 2263 | Tag used for authentication. |
3135 | </summary> | 2264 | </summary> |
3136 | <param name="interfaceType"></param> | ||
3137 | <returns>true if found; otherwise false.</returns> | ||
3138 | </member> | 2265 | </member> |
3139 | <member name="M:HttpServer.ComponentProvider.Add``2"> | 2266 | <member name="M:HttpServer.Authentication.AuthenticationModule.#ctor(HttpServer.Authentication.AuthenticationHandler,HttpServer.Authentication.AuthenticationRequiredHandler)"> |
3140 | <summary> | 2267 | <summary> |
3141 | Add a component. | 2268 | Initializes a new instance of the <see cref="T:HttpServer.Authentication.AuthenticationModule"/> class. |
3142 | </summary> | 2269 | </summary> |
3143 | <typeparam name="InterfaceType">Type being requested.</typeparam> | 2270 | <param name="authenticator">Delegate used to provide information used during authentication.</param> |
3144 | <typeparam name="InstanceType">Type being created.</typeparam> | 2271 | <param name="authenticationRequiredHandler">Delegate used to determine if authentication is required (may be null).</param> |
3145 | <exception cref="T:System.InvalidOperationException">Type have already been mapped.</exception> | 2272 | </member> |
2273 | <member name="M:HttpServer.Authentication.AuthenticationModule.#ctor(HttpServer.Authentication.AuthenticationHandler)"> | ||
2274 | <summary> | ||
2275 | Initializes a new instance of the <see cref="T:HttpServer.Authentication.AuthenticationModule"/> class. | ||
2276 | </summary> | ||
2277 | <param name="authenticator">Delegate used to provide information used during authentication.</param> | ||
2278 | </member> | ||
2279 | <member name="M:HttpServer.Authentication.AuthenticationModule.CreateResponse(System.String,System.Object[])"> | ||
2280 | <summary> | ||
2281 | Create a response that can be sent in the WWW-Authenticate header. | ||
2282 | </summary> | ||
2283 | <param name="realm">Realm that the user should authenticate in</param> | ||
2284 | <param name="options">Array with optional options.</param> | ||
2285 | <returns>A correct authentication request.</returns> | ||
2286 | <exception cref="T:System.ArgumentNullException">If realm is empty or null.</exception> | ||
2287 | </member> | ||
2288 | <member name="M:HttpServer.Authentication.AuthenticationModule.Authenticate(System.String,System.String,System.String,System.Object[])"> | ||
2289 | <summary> | ||
2290 | An authentication response have been received from the web browser. | ||
2291 | Check if it's correct | ||
2292 | </summary> | ||
2293 | <param name="authenticationHeader">Contents from the Authorization header</param> | ||
2294 | <param name="realm">Realm that should be authenticated</param> | ||
2295 | <param name="httpVerb">GET/POST/PUT/DELETE etc.</param> | ||
2296 | <param name="options">options to specific implementations</param> | ||
2297 | <returns>Authentication object that is stored for the request. A user class or something like that.</returns> | ||
2298 | <exception cref="T:System.ArgumentException">if <paramref name="authenticationHeader"/> is invalid</exception> | ||
2299 | <exception cref="T:System.ArgumentNullException">If any of the parameters is empty or null.</exception> | ||
2300 | </member> | ||
2301 | <member name="M:HttpServer.Authentication.AuthenticationModule.CheckAuthentication(System.String,System.String,System.String@,System.Object@)"> | ||
2302 | <summary> | ||
2303 | Used to invoke the authentication delegate that is used to lookup the user name/realm. | ||
2304 | </summary> | ||
2305 | <param name="realm">Realm (domain) that user want to authenticate in</param> | ||
2306 | <param name="userName">User name</param> | ||
2307 | <param name="password">Password used for validation. Some implementations got password in clear text, they are then sent to client.</param> | ||
2308 | <param name="login">object that will be stored in the request to help you identify the user if authentication was successful.</param> | ||
2309 | <returns>true if authentication was successful</returns> | ||
2310 | </member> | ||
2311 | <member name="M:HttpServer.Authentication.AuthenticationModule.AuthenticationRequired(HttpServer.IHttpRequest)"> | ||
2312 | <summary> | ||
2313 | Determines if authentication is required. | ||
2314 | </summary> | ||
2315 | <param name="request">HTTP request from browser</param> | ||
2316 | <returns>true if user should be authenticated.</returns> | ||
2317 | <remarks>throw <see cref="T:HttpServer.Exceptions.ForbiddenException"/> from your delegate if no more attempts are allowed.</remarks> | ||
2318 | <exception cref="T:HttpServer.Exceptions.ForbiddenException">If no more attempts are allowed</exception> | ||
2319 | </member> | ||
2320 | <member name="P:HttpServer.Authentication.AuthenticationModule.Name"> | ||
2321 | <summary> | ||
2322 | name used in HTTP request. | ||
2323 | </summary> | ||
2324 | </member> | ||
2325 | <member name="M:HttpServer.Authentication.DigestAuthentication.#ctor(HttpServer.Authentication.AuthenticationHandler,HttpServer.Authentication.AuthenticationRequiredHandler)"> | ||
2326 | <summary> | ||
2327 | Initializes a new instance of the <see cref="T:HttpServer.Authentication.DigestAuthentication"/> class. | ||
2328 | </summary> | ||
2329 | <param name="authenticator">Delegate used to provide information used during authentication.</param> | ||
2330 | <param name="authenticationRequiredHandler">Delegate used to determine if authentication is required (may be null).</param> | ||
2331 | </member> | ||
2332 | <member name="M:HttpServer.Authentication.DigestAuthentication.#ctor(HttpServer.Authentication.AuthenticationHandler)"> | ||
2333 | <summary> | ||
2334 | Initializes a new instance of the <see cref="T:HttpServer.Authentication.DigestAuthentication"/> class. | ||
2335 | </summary> | ||
2336 | <param name="authenticator">Delegate used to provide information used during authentication.</param> | ||
2337 | </member> | ||
2338 | <member name="F:HttpServer.Authentication.DigestAuthentication.DisableNonceCheck"> | ||
2339 | <summary> | ||
2340 | Used by test classes to be able to use hardcoded values | ||
2341 | </summary> | ||
2342 | </member> | ||
2343 | <member name="M:HttpServer.Authentication.DigestAuthentication.Authenticate(System.String,System.String,System.String,System.Object[])"> | ||
2344 | <summary> | ||
2345 | An authentication response have been received from the web browser. | ||
2346 | Check if it's correct | ||
2347 | </summary> | ||
2348 | <param name="authenticationHeader">Contents from the Authorization header</param> | ||
2349 | <param name="realm">Realm that should be authenticated</param> | ||
2350 | <param name="httpVerb">GET/POST/PUT/DELETE etc.</param> | ||
2351 | <param name="options">First option: true if username/password is correct but not cnonce</param> | ||
2352 | <returns> | ||
2353 | Authentication object that is stored for the request. A user class or something like that. | ||
2354 | </returns> | ||
2355 | <exception cref="T:System.ArgumentException">if authenticationHeader is invalid</exception> | ||
2356 | <exception cref="T:System.ArgumentNullException">If any of the paramters is empty or null.</exception> | ||
2357 | </member> | ||
2358 | <member name="M:HttpServer.Authentication.DigestAuthentication.Encrypt(System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.String)"> | ||
2359 | <summary> | ||
2360 | Encrypts parameters into a Digest string | ||
2361 | </summary> | ||
2362 | <param name="realm">Realm that the user want to log into.</param> | ||
2363 | <param name="userName">User logging in</param> | ||
2364 | <param name="password">Users password.</param> | ||
2365 | <param name="method">HTTP method.</param> | ||
2366 | <param name="uri">Uri/domain that generated the login prompt.</param> | ||
2367 | <param name="qop">Quality of Protection.</param> | ||
2368 | <param name="nonce">"Number used ONCE"</param> | ||
2369 | <param name="nc">Hexadecimal request counter.</param> | ||
2370 | <param name="cnonce">"Client Number used ONCE"</param> | ||
2371 | <returns>Digest encrypted string</returns> | ||
2372 | </member> | ||
2373 | <member name="M:HttpServer.Authentication.DigestAuthentication.Encrypt(System.String,System.String,System.String,System.String,System.String,System.String)"> | ||
2374 | <summary> | ||
2375 | |||
2376 | </summary> | ||
2377 | <param name="ha1">Md5 hex encoded "userName:realm:password", without the quotes.</param> | ||
2378 | <param name="ha2">Md5 hex encoded "method:uri", without the quotes</param> | ||
2379 | <param name="qop">Quality of Protection</param> | ||
2380 | <param name="nonce">"Number used ONCE"</param> | ||
2381 | <param name="nc">Hexadecimal request counter.</param> | ||
2382 | <param name="cnonce">Client number used once</param> | ||
2383 | <returns></returns> | ||
2384 | </member> | ||
2385 | <member name="M:HttpServer.Authentication.DigestAuthentication.CreateResponse(System.String,System.Object[])"> | ||
2386 | <summary> | ||
2387 | Create a response that can be sent in the WWW-Authenticate header. | ||
2388 | </summary> | ||
2389 | <param name="realm">Realm that the user should authenticate in</param> | ||
2390 | <param name="options">First options specifies if true if username/password is correct but not cnonce.</param> | ||
2391 | <returns>A correct auth request.</returns> | ||
2392 | <exception cref="T:System.ArgumentNullException">If realm is empty or null.</exception> | ||
2393 | </member> | ||
2394 | <member name="M:HttpServer.Authentication.DigestAuthentication.Decode(System.String,System.Text.Encoding)"> | ||
2395 | <summary> | ||
2396 | Decodes authorization header value | ||
2397 | </summary> | ||
2398 | <param name="buffer">header value</param> | ||
2399 | <param name="encoding">Encoding that the buffer is in</param> | ||
2400 | <returns>All headers and their values if successful; otherwise null</returns> | ||
2401 | <example> | ||
2402 | NameValueCollection header = DigestAuthentication.Decode("response=\"6629fae49393a05397450978507c4ef1\",\r\nc=00001", Encoding.ASCII); | ||
2403 | </example> | ||
2404 | <remarks>Can handle lots of whitespaces and new lines without failing.</remarks> | ||
2405 | </member> | ||
2406 | <member name="M:HttpServer.Authentication.DigestAuthentication.GetCurrentNonce"> | ||
2407 | <summary> | ||
2408 | Gets the current nonce. | ||
2409 | </summary> | ||
2410 | <returns></returns> | ||
2411 | </member> | ||
2412 | <member name="M:HttpServer.Authentication.DigestAuthentication.GetMD5HashBinHex2(System.String)"> | ||
2413 | <summary> | ||
2414 | Gets the Md5 hash bin hex2. | ||
2415 | </summary> | ||
2416 | <param name="toBeHashed">To be hashed.</param> | ||
2417 | <returns></returns> | ||
2418 | </member> | ||
2419 | <member name="M:HttpServer.Authentication.DigestAuthentication.IsValidNonce(System.String)"> | ||
2420 | <summary> | ||
2421 | determines if the nonce is valid or has expired. | ||
2422 | </summary> | ||
2423 | <param name="nonce">nonce value (check wikipedia for info)</param> | ||
2424 | <returns>true if the nonce has not expired.</returns> | ||
2425 | </member> | ||
2426 | <member name="P:HttpServer.Authentication.DigestAuthentication.Name"> | ||
2427 | <summary> | ||
2428 | name used in http request. | ||
2429 | </summary> | ||
2430 | </member> | ||
2431 | <member name="P:HttpServer.Authentication.DigestAuthentication.TokenIsHA1"> | ||
2432 | <summary> | ||
2433 | Gets or sets whether the token supplied in <see cref="T:HttpServer.Authentication.AuthenticationHandler"/> is a | ||
2434 | HA1 generated string. | ||
2435 | </summary> | ||
2436 | </member> | ||
2437 | <member name="T:HttpServer.HttpHelper"> | ||
2438 | <summary> | ||
2439 | Generic helper functions for HTTP | ||
2440 | </summary> | ||
2441 | </member> | ||
2442 | <member name="F:HttpServer.HttpHelper.HTTP10"> | ||
2443 | <summary> | ||
2444 | Version string for HTTP v1.0 | ||
2445 | </summary> | ||
2446 | </member> | ||
2447 | <member name="F:HttpServer.HttpHelper.HTTP11"> | ||
2448 | <summary> | ||
2449 | Version string for HTTP v1.1 | ||
2450 | </summary> | ||
2451 | </member> | ||
2452 | <member name="F:HttpServer.HttpHelper.EmptyUri"> | ||
2453 | <summary> | ||
2454 | An empty URI | ||
2455 | </summary> | ||
2456 | </member> | ||
2457 | <member name="M:HttpServer.HttpHelper.ParseQueryString(System.String)"> | ||
2458 | <summary> | ||
2459 | Parses a query string. | ||
2460 | </summary> | ||
2461 | <param name="queryString">Query string (URI encoded)</param> | ||
2462 | <returns>A <see cref="T:HttpServer.HttpInput"/> object if successful; otherwise <see cref="F:HttpServer.HttpInput.Empty"/></returns> | ||
2463 | <exception cref="T:System.ArgumentNullException"><c>queryString</c> is null.</exception> | ||
2464 | <exception cref="T:System.FormatException">If string cannot be parsed.</exception> | ||
2465 | </member> | ||
2466 | <member name="T:HttpServer.Authentication.AuthenticationHandler"> | ||
2467 | <summary> | ||
2468 | Delegate used to let authentication modules authenticate the user name and password. | ||
2469 | </summary> | ||
2470 | <param name="realm">Realm that the user want to authenticate in</param> | ||
2471 | <param name="userName">User name specified by client</param> | ||
2472 | <param name="token">Can either be user password or implementation specific token.</param> | ||
2473 | <param name="login">object that will be stored in a session variable called <see cref="F:HttpServer.Authentication.AuthenticationModule.AuthenticationTag"/> if authentication was successful.</param> | ||
2474 | <exception cref="T:HttpServer.Exceptions.ForbiddenException">throw forbidden exception if too many attempts have been made.</exception> | ||
2475 | <remarks> | ||
2476 | <para> | ||
2477 | Use <see cref="P:HttpServer.Authentication.DigestAuthentication.TokenIsHA1"/> to specify that the token is a HA1 token. (MD5 generated | ||
2478 | string from realm, user name and password); Md5String(userName + ":" + realm + ":" + password); | ||
2479 | </para> | ||
2480 | </remarks> | ||
2481 | </member> | ||
2482 | <member name="T:HttpServer.Authentication.AuthenticationRequiredHandler"> | ||
2483 | <summary> | ||
2484 | Let's you decide on a system level if authentication is required. | ||
2485 | </summary> | ||
2486 | <param name="request">HTTP request from client</param> | ||
2487 | <returns>true if user should be authenticated.</returns> | ||
2488 | <remarks>throw <see cref="T:HttpServer.Exceptions.ForbiddenException"/> if no more attempts are allowed.</remarks> | ||
2489 | <exception cref="T:HttpServer.Exceptions.ForbiddenException">If no more attempts are allowed</exception> | ||
3146 | </member> | 2490 | </member> |
3147 | <member name="T:HttpServer.Parser.BodyEventArgs"> | 2491 | <member name="T:HttpServer.Parser.BodyEventArgs"> |
3148 | <summary> | 2492 | <summary> |
@@ -3177,6 +2521,284 @@ | |||
3177 | Gets or sets offset in buffer where to start processing. | 2521 | Gets or sets offset in buffer where to start processing. |
3178 | </summary> | 2522 | </summary> |
3179 | </member> | 2523 | </member> |
2524 | <member name="T:HttpServer.Method"> | ||
2525 | <summary> | ||
2526 | Contains all HTTP Methods (according to the HTTP 1.1 specification) | ||
2527 | <para> | ||
2528 | See: http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html | ||
2529 | </para> | ||
2530 | </summary> | ||
2531 | </member> | ||
2532 | <member name="F:HttpServer.Method.Delete"> | ||
2533 | <summary> | ||
2534 | The DELETE method requests that the origin server delete the resource identified by the Request-URI. | ||
2535 | </summary> | ||
2536 | <remarks> | ||
2537 | <para> | ||
2538 | This method MAY be overridden by human intervention (or other means) on the origin server. | ||
2539 | The client cannot be guaranteed that the operation has been carried out, even if the status code | ||
2540 | returned from the origin server indicates that the action has been completed successfully. | ||
2541 | </para> | ||
2542 | <para> | ||
2543 | However, the server SHOULD NOT indicate success unless, at the time the response is given, | ||
2544 | it intends to delete the resource or move it to an inaccessible location. | ||
2545 | </para> | ||
2546 | <para> | ||
2547 | A successful response SHOULD be 200 (OK) if the response includes an entity describing the status, | ||
2548 | 202 (Accepted) if the action has not yet been enacted, | ||
2549 | or 204 (No Content) if the action has been enacted but the response does not include an entity. | ||
2550 | </para> | ||
2551 | <para> | ||
2552 | If the request passes through a cache and the Request-URI identifies one or more currently cached entities, | ||
2553 | those entries SHOULD be treated as stale. Responses to this method are not cacheable. | ||
2554 | </para> | ||
2555 | </remarks> | ||
2556 | </member> | ||
2557 | <member name="F:HttpServer.Method.Get"> | ||
2558 | <summary> | ||
2559 | The GET method means retrieve whatever information (in the form of an entity) is identified by the Request-URI. | ||
2560 | </summary> | ||
2561 | <remarks> | ||
2562 | <para> | ||
2563 | If the Request-URI refers to a data-producing process, it is the produced data which shall be returned as the | ||
2564 | entity in the response and not the source text of the process, unless that text happens to be the output of the process. | ||
2565 | </para> | ||
2566 | <para> | ||
2567 | The semantics of the GET method change to a "conditional GET" if the request message includes an | ||
2568 | If-Modified-Since, If-Unmodified-Since, If-Match, If-None-Match, or If-Range header field. | ||
2569 | A conditional GET method requests that the entity be transferred only under the circumstances described | ||
2570 | by the conditional header field(s). The conditional GET method is intended to reduce unnecessary network | ||
2571 | usage by allowing cached entities to be refreshed without requiring multiple requests or transferring | ||
2572 | data already held by the client. | ||
2573 | </para> | ||
2574 | </remarks> | ||
2575 | </member> | ||
2576 | <member name="F:HttpServer.Method.Header"> | ||
2577 | <summary> | ||
2578 | The HEAD method is identical to GET except that the server MUST NOT return a message-body in the response. | ||
2579 | </summary> | ||
2580 | <remarks> | ||
2581 | The meta information contained in the HTTP headers in response to a HEAD request SHOULD be identical to the | ||
2582 | information sent in response to a GET request. This method can be used for obtaining meta information about | ||
2583 | the entity implied by the request without transferring the entity-body itself. | ||
2584 | |||
2585 | This method is often used for testing hypertext links for validity, accessibility, and recent modification. | ||
2586 | </remarks> | ||
2587 | </member> | ||
2588 | <member name="F:HttpServer.Method.Options"> | ||
2589 | <summary> | ||
2590 | <para>The OPTIONS method represents a request for information about the communication options available on the request/response chain identified by the Request-URI.</para> | ||
2591 | </summary> | ||
2592 | <remarks> | ||
2593 | <para>This method allows the client to determine the options and/or requirements associated with a resource, or the capabilities of a server, without implying a resource action or initiating a resource retrieval.</para> | ||
2594 | </remarks> | ||
2595 | </member> | ||
2596 | <member name="F:HttpServer.Method.Post"> | ||
2597 | <summary> | ||
2598 | The POST method is used to request that the origin server accept the entity enclosed | ||
2599 | in the request as a new subordinate of the resource identified by the Request-URI in the Request-Line. | ||
2600 | </summary> | ||
2601 | <remarks> | ||
2602 | POST is designed to allow a uniform method to cover the following functions: | ||
2603 | <list type="bullet"> | ||
2604 | <item> | ||
2605 | Annotation of existing resources; | ||
2606 | </item><item> | ||
2607 | Posting a message to a bulletin board, newsgroup, mailing list, or similar group of articles; | ||
2608 | </item><item> | ||
2609 | Providing a block of data, such as the result of submitting a form, to a data-handling process; | ||
2610 | </item><item> | ||
2611 | Extending a database through an append operation. | ||
2612 | </item> | ||
2613 | </list> | ||
2614 | <para> | ||
2615 | If a resource has been created on the origin server, the response SHOULD be 201 (Created) and | ||
2616 | contain an entity which describes the status of the request and refers to the new resource, and a | ||
2617 | Location header (see section 14.30). | ||
2618 | </para> | ||
2619 | <para> | ||
2620 | The action performed by the POST method might not result in a resource that can be identified by a URI. | ||
2621 | In this case, either 200 (OK) or 204 (No Content) is the appropriate response status, depending on | ||
2622 | whether or not the response includes an entity that describes the result. | ||
2623 | </para><para> | ||
2624 | Responses to this method are not cacheable, unless the response includes appropriate Cache-Control | ||
2625 | or Expires header fields. However, the 303 (See Other) response can be used to direct the user agent | ||
2626 | to retrieve a cacheable resource. | ||
2627 | </para> | ||
2628 | </remarks> | ||
2629 | </member> | ||
2630 | <member name="F:HttpServer.Method.Put"> | ||
2631 | <summary> | ||
2632 | The PUT method requests that the enclosed entity be stored under the supplied Request-URI. | ||
2633 | </summary> | ||
2634 | <remarks> | ||
2635 | <list type="bullet"> | ||
2636 | <item> | ||
2637 | If the Request-URI refers to an already existing resource, the enclosed entity SHOULD be considered as a | ||
2638 | modified version of the one residing on the origin server. | ||
2639 | </item><item> | ||
2640 | If the Request-URI does not point to an existing resource, and that URI is capable of being defined as a new | ||
2641 | resource by the requesting user agent, the origin server can create the resource with that URI. | ||
2642 | </item><item> | ||
2643 | If a new resource is created, the origin server MUST inform the user agent via the 201 (Created) response. | ||
2644 | </item><item> | ||
2645 | If an existing resource is modified, either the 200 (OK) or 204 (No Content) response codes SHOULD be sent to | ||
2646 | indicate successful completion of the request. | ||
2647 | </item><item> | ||
2648 | If the resource could not be created or modified with the Request-URI, an appropriate error response SHOULD be | ||
2649 | given that reflects the nature of the problem. | ||
2650 | </item> | ||
2651 | </list> | ||
2652 | <para> | ||
2653 | The recipient of the entity MUST NOT ignore any Content-* (e.g. Content-Range) headers that it does not | ||
2654 | understand or implement and MUST return a 501 (Not Implemented) response in such cases. | ||
2655 | </para> | ||
2656 | </remarks> | ||
2657 | </member> | ||
2658 | <member name="F:HttpServer.Method.Trace"> | ||
2659 | <summary> | ||
2660 | The TRACE method is used to invoke a remote, application-layer loop- back of the request message. | ||
2661 | </summary> | ||
2662 | </member> | ||
2663 | <member name="T:HttpServer.Methods"> | ||
2664 | <summary> | ||
2665 | Contains all HTTP Methods (according to the HTTP 1.1 specification) | ||
2666 | <para> | ||
2667 | See: http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html | ||
2668 | </para> | ||
2669 | </summary> | ||
2670 | </member> | ||
2671 | <member name="F:HttpServer.Methods.Delete"> | ||
2672 | <summary> | ||
2673 | The DELETE method requests that the origin server delete the resource identified by the Request-URI. | ||
2674 | </summary> | ||
2675 | <remarks> | ||
2676 | <para> | ||
2677 | This method MAY be overridden by human intervention (or other means) on the origin server. | ||
2678 | The client cannot be guaranteed that the operation has been carried out, even if the status code | ||
2679 | returned from the origin server indicates that the action has been completed successfully. | ||
2680 | </para> | ||
2681 | <para> | ||
2682 | However, the server SHOULD NOT indicate success unless, at the time the response is given, | ||
2683 | it intends to delete the resource or move it to an inaccessible location. | ||
2684 | </para> | ||
2685 | <para> | ||
2686 | A successful response SHOULD be 200 (OK) if the response includes an entity describing the status, | ||
2687 | 202 (Accepted) if the action has not yet been enacted, | ||
2688 | or 204 (No Content) if the action has been enacted but the response does not include an entity. | ||
2689 | </para> | ||
2690 | <para> | ||
2691 | If the request passes through a cache and the Request-URI identifies one or more currently cached entities, | ||
2692 | those entries SHOULD be treated as stale. Responses to this method are not cacheable. | ||
2693 | </para> | ||
2694 | </remarks> | ||
2695 | </member> | ||
2696 | <member name="F:HttpServer.Methods.Get"> | ||
2697 | <summary> | ||
2698 | The GET method means retrieve whatever information (in the form of an entity) is identified by the Request-URI. | ||
2699 | </summary> | ||
2700 | <remarks> | ||
2701 | <para> | ||
2702 | If the Request-URI refers to a data-producing process, it is the produced data which shall be returned as the | ||
2703 | entity in the response and not the source text of the process, unless that text happens to be the output of the process. | ||
2704 | </para> | ||
2705 | <para> | ||
2706 | The semantics of the GET method change to a "conditional GET" if the request message includes an | ||
2707 | If-Modified-Since, If-Unmodified-Since, If-Match, If-None-Match, or If-Range header field. | ||
2708 | A conditional GET method requests that the entity be transferred only under the circumstances described | ||
2709 | by the conditional header field(s). The conditional GET method is intended to reduce unnecessary network | ||
2710 | usage by allowing cached entities to be refreshed without requiring multiple requests or transferring | ||
2711 | data already held by the client. | ||
2712 | </para> | ||
2713 | </remarks> | ||
2714 | </member> | ||
2715 | <member name="F:HttpServer.Methods.Header"> | ||
2716 | <summary> | ||
2717 | The HEAD method is identical to GET except that the server MUST NOT return a message-body in the response. | ||
2718 | </summary> | ||
2719 | <remarks> | ||
2720 | The meta information contained in the HTTP headers in response to a HEAD request SHOULD be identical to the | ||
2721 | information sent in response to a GET request. This method can be used for obtaining meta information about | ||
2722 | the entity implied by the request without transferring the entity-body itself. | ||
2723 | |||
2724 | This method is often used for testing hypertext links for validity, accessibility, and recent modification. | ||
2725 | </remarks> | ||
2726 | </member> | ||
2727 | <member name="F:HttpServer.Methods.Options"> | ||
2728 | <summary> | ||
2729 | <para>The OPTIONS method represents a request for information about the communication options available on the request/response chain identified by the Request-URI.</para> | ||
2730 | </summary> | ||
2731 | <remarks> | ||
2732 | <para>This method allows the client to determine the options and/or requirements associated with a resource, or the capabilities of a server, without implying a resource action or initiating a resource retrieval.</para> | ||
2733 | </remarks> | ||
2734 | </member> | ||
2735 | <member name="F:HttpServer.Methods.Post"> | ||
2736 | <summary> | ||
2737 | The POST method is used to request that the origin server accept the entity enclosed | ||
2738 | in the request as a new subordinate of the resource identified by the Request-URI in the Request-Line. | ||
2739 | </summary> | ||
2740 | <remarks> | ||
2741 | POST is designed to allow a uniform method to cover the following functions: | ||
2742 | <list type="bullet"> | ||
2743 | <item> | ||
2744 | Annotation of existing resources; | ||
2745 | </item><item> | ||
2746 | Posting a message to a bulletin board, newsgroup, mailing list, or similar group of articles; | ||
2747 | </item><item> | ||
2748 | Providing a block of data, such as the result of submitting a form, to a data-handling process; | ||
2749 | </item><item> | ||
2750 | Extending a database through an append operation. | ||
2751 | </item> | ||
2752 | </list> | ||
2753 | <para> | ||
2754 | If a resource has been created on the origin server, the response SHOULD be 201 (Created) and | ||
2755 | contain an entity which describes the status of the request and refers to the new resource, and a | ||
2756 | Location header (see section 14.30). | ||
2757 | </para> | ||
2758 | <para> | ||
2759 | The action performed by the POST method might not result in a resource that can be identified by a URI. | ||
2760 | In this case, either 200 (OK) or 204 (No Content) is the appropriate response status, depending on | ||
2761 | whether or not the response includes an entity that describes the result. | ||
2762 | </para><para> | ||
2763 | Responses to this method are not cacheable, unless the response includes appropriate Cache-Control | ||
2764 | or Expires header fields. However, the 303 (See Other) response can be used to direct the user agent | ||
2765 | to retrieve a cacheable resource. | ||
2766 | </para> | ||
2767 | </remarks> | ||
2768 | </member> | ||
2769 | <member name="F:HttpServer.Methods.Put"> | ||
2770 | <summary> | ||
2771 | The PUT method requests that the enclosed entity be stored under the supplied Request-URI. | ||
2772 | </summary> | ||
2773 | <remarks> | ||
2774 | <list type="bullet"> | ||
2775 | <item> | ||
2776 | If the Request-URI refers to an already existing resource, the enclosed entity SHOULD be considered as a | ||
2777 | modified version of the one residing on the origin server. | ||
2778 | </item><item> | ||
2779 | If the Request-URI does not point to an existing resource, and that URI is capable of being defined as a new | ||
2780 | resource by the requesting user agent, the origin server can create the resource with that URI. | ||
2781 | </item><item> | ||
2782 | If a new resource is created, the origin server MUST inform the user agent via the 201 (Created) response. | ||
2783 | </item><item> | ||
2784 | If an existing resource is modified, either the 200 (OK) or 204 (No Content) response codes SHOULD be sent to | ||
2785 | indicate successful completion of the request. | ||
2786 | </item><item> | ||
2787 | If the resource could not be created or modified with the Request-URI, an appropriate error response SHOULD be | ||
2788 | given that reflects the nature of the problem. | ||
2789 | </item> | ||
2790 | </list> | ||
2791 | <para> | ||
2792 | The recipient of the entity MUST NOT ignore any Content-* (e.g. Content-Range) headers that it does not | ||
2793 | understand or implement and MUST return a 501 (Not Implemented) response in such cases. | ||
2794 | </para> | ||
2795 | </remarks> | ||
2796 | </member> | ||
2797 | <member name="F:HttpServer.Methods.Trace"> | ||
2798 | <summary> | ||
2799 | The TRACE method is used to invoke a remote, application-layer loop- back of the request message. | ||
2800 | </summary> | ||
2801 | </member> | ||
3180 | <member name="T:HttpServer.HttpContextFactory"> | 2802 | <member name="T:HttpServer.HttpContextFactory"> |
3181 | <summary> | 2803 | <summary> |
3182 | Used to create and reuse contexts. | 2804 | Used to create and reuse contexts. |
@@ -3364,178 +2986,247 @@ | |||
3364 | </summary> | 2986 | </summary> |
3365 | <param name="disposing">true to release both managed and unmanaged resources; false to release only unmanaged resources.</param> | 2987 | <param name="disposing">true to release both managed and unmanaged resources; false to release only unmanaged resources.</param> |
3366 | </member> | 2988 | </member> |
3367 | <member name="T:HttpServer.HttpModules.ResourceFileModule"> | 2989 | <member name="T:HttpServer.ClientAcceptedEventArgs"> |
3368 | <summary> | 2990 | <summary> |
3369 | Serves files that are stored in embedded resources. | 2991 | Invoked when a client have been accepted by the <see cref="T:HttpServer.HttpListener"/> |
3370 | </summary> | 2992 | </summary> |
2993 | <remarks> | ||
2994 | Can be used to revoke incoming connections | ||
2995 | </remarks> | ||
3371 | </member> | 2996 | </member> |
3372 | <member name="T:HttpServer.HttpModules.HttpModule"> | 2997 | <member name="M:HttpServer.ClientAcceptedEventArgs.#ctor(System.Net.Sockets.Socket)"> |
3373 | <summary> | 2998 | <summary> |
3374 | A HttpModule can be used to serve Uri's. The module itself | 2999 | Initializes a new instance of the <see cref="T:HttpServer.ClientAcceptedEventArgs"/> class. |
3375 | decides if it should serve a Uri or not. In this way, you can | ||
3376 | get a very flexible http application since you can let multiple modules | ||
3377 | serve almost similar urls. | ||
3378 | </summary> | 3000 | </summary> |
3379 | <remarks> | 3001 | <param name="socket">The socket.</param> |
3380 | Throw <see cref="T:HttpServer.Exceptions.UnauthorizedException"/> if you are using a <see cref="T:HttpServer.Authentication.AuthenticationModule"/> and want to prompt for user name/password. | ||
3381 | </remarks> | ||
3382 | </member> | 3002 | </member> |
3383 | <member name="M:HttpServer.HttpModules.HttpModule.Process(HttpServer.IHttpRequest,HttpServer.IHttpResponse,HttpServer.Sessions.IHttpSession)"> | 3003 | <member name="M:HttpServer.ClientAcceptedEventArgs.Revoke"> |
3384 | <summary> | 3004 | <summary> |
3385 | Method that process the url | 3005 | Client may not be handled. |
3386 | </summary> | 3006 | </summary> |
3387 | <param name="request">Information sent by the browser about the request</param> | ||
3388 | <param name="response">Information that is being sent back to the client.</param> | ||
3389 | <param name="session">Session used to </param> | ||
3390 | <returns>true if this module handled the request.</returns> | ||
3391 | </member> | 3007 | </member> |
3392 | <member name="M:HttpServer.HttpModules.HttpModule.SetLogWriter(HttpServer.ILogWriter)"> | 3008 | <member name="P:HttpServer.ClientAcceptedEventArgs.Socket"> |
3393 | <summary> | 3009 | <summary> |
3394 | Set the log writer to use. | 3010 | Accepted socket. |
3395 | </summary> | 3011 | </summary> |
3396 | <param name="writer">logwriter to use.</param> | ||
3397 | </member> | 3012 | </member> |
3398 | <member name="M:HttpServer.HttpModules.HttpModule.Write(HttpServer.LogPrio,System.String)"> | 3013 | <member name="P:HttpServer.ClientAcceptedEventArgs.Revoked"> |
3399 | <summary> | 3014 | <summary> |
3400 | Log something. | 3015 | Client should be revoked. |
3401 | </summary> | 3016 | </summary> |
3402 | <param name="prio">importance of log message</param> | ||
3403 | <param name="message">message</param> | ||
3404 | </member> | 3017 | </member> |
3405 | <member name="P:HttpServer.HttpModules.HttpModule.AllowSecondaryProcessing"> | 3018 | <member name="T:HttpServer.Sessions.MemorySession"> |
3406 | <summary> | 3019 | <summary> |
3407 | If true specifies that the module doesn't consume the processing of a request so that subsequent modules | 3020 | A session stored in memory. |
3408 | can continue processing afterwards. Default is false. | ||
3409 | </summary> | 3021 | </summary> |
3410 | </member> | 3022 | </member> |
3411 | <member name="M:HttpServer.HttpModules.ResourceFileModule.#ctor"> | 3023 | <member name="T:HttpServer.Sessions.IHttpSession"> |
3412 | <summary> | 3024 | <summary> |
3413 | Initializes a new instance of the <see cref="T:HttpServer.HttpModules.ResourceFileModule"/> class. | 3025 | Interface for sessions |
3414 | Runs <see cref="M:HttpServer.HttpModules.ResourceFileModule.AddDefaultMimeTypes"/> to make sure the basic mime types are available, they can be cleared later | ||
3415 | through the use of <see cref="P:HttpServer.HttpModules.ResourceFileModule.MimeTypes"/> if desired. | ||
3416 | </summary> | 3026 | </summary> |
3417 | </member> | 3027 | </member> |
3418 | <member name="M:HttpServer.HttpModules.ResourceFileModule.#ctor(HttpServer.ILogWriter)"> | 3028 | <member name="M:HttpServer.Sessions.IHttpSession.Clear"> |
3419 | <summary> | 3029 | <summary> |
3420 | Initializes a new instance of the <see cref="T:HttpServer.HttpModules.ResourceFileModule"/> class. | 3030 | Remove everything from the session |
3421 | Runs <see cref="M:HttpServer.HttpModules.ResourceFileModule.AddDefaultMimeTypes"/> to make sure the basic mime types are available, they can be cleared later | ||
3422 | through the use of <see cref="P:HttpServer.HttpModules.ResourceFileModule.MimeTypes"/> if desired. | ||
3423 | </summary> | 3031 | </summary> |
3424 | <param name="logWriter">The log writer to use when logging events</param> | ||
3425 | </member> | 3032 | </member> |
3426 | <member name="M:HttpServer.HttpModules.ResourceFileModule.AddDefaultMimeTypes"> | 3033 | <member name="M:HttpServer.Sessions.IHttpSession.Clear(System.Boolean)"> |
3427 | <summary> | 3034 | <summary> |
3428 | Mimtypes that this class can handle per default | 3035 | Remove everything from the session |
3429 | </summary> | 3036 | </summary> |
3037 | <param name="expires">True if the session is cleared due to expiration</param> | ||
3430 | </member> | 3038 | </member> |
3431 | <member name="M:HttpServer.HttpModules.ResourceFileModule.AddResources(System.String,System.Reflection.Assembly,System.String)"> | 3039 | <member name="P:HttpServer.Sessions.IHttpSession.Id"> |
3432 | <summary> | 3040 | <summary> |
3433 | Loads resources from a namespace in the given assembly to an uri | 3041 | Session id |
3434 | </summary> | 3042 | </summary> |
3435 | <param name="toUri">The uri to map the resources to</param> | 3043 | </member> |
3436 | <param name="fromAssembly">The assembly in which the resources reside</param> | 3044 | <member name="P:HttpServer.Sessions.IHttpSession.Item(System.String)"> |
3437 | <param name="fromNamespace">The namespace from which to load the resources</param> | 3045 | <summary> |
3438 | <usage> | 3046 | Should |
3439 | resourceLoader.LoadResources("/user/", typeof(User).Assembly, "MyLib.Models.User.Views"); | 3047 | </summary> |
3048 | <param name="name">Name of the session variable</param> | ||
3049 | <returns>null if it's not set</returns> | ||
3050 | <exception cref="T:System.Runtime.Serialization.SerializationException">If the object cant be serialized.</exception> | ||
3051 | </member> | ||
3052 | <member name="P:HttpServer.Sessions.IHttpSession.Accessed"> | ||
3053 | <summary> | ||
3054 | When the session was last accessed. | ||
3055 | This property is touched by the http server each time the | ||
3056 | session is requested. | ||
3057 | </summary> | ||
3058 | </member> | ||
3059 | <member name="P:HttpServer.Sessions.IHttpSession.Count"> | ||
3060 | <summary> | ||
3061 | Number of session variables. | ||
3062 | </summary> | ||
3063 | </member> | ||
3064 | <member name="E:HttpServer.Sessions.IHttpSession.BeforeClear"> | ||
3065 | <summary> | ||
3066 | Event triggered upon clearing the session | ||
3067 | </summary> | ||
3068 | </member> | ||
3069 | <member name="M:HttpServer.Sessions.MemorySession.#ctor(System.String)"> | ||
3070 | <summary> | ||
3440 | 3071 | ||
3441 | will make ie the resource MyLib.Models.User.Views.stylesheet.css accessible via /user/stylesheet.css | 3072 | </summary> |
3442 | </usage> | 3073 | <param name="id">A unique id used by the sessions store to identify the session</param> |
3443 | <returns>The amount of loaded files, giving you the possibility of making sure the resources needed gets loaded</returns> | ||
3444 | </member> | 3074 | </member> |
3445 | <member name="M:HttpServer.HttpModules.ResourceFileModule.CanHandle(HttpServer.IHttpRequest)"> | 3075 | <member name="M:HttpServer.Sessions.MemorySession.SetId(System.String)"> |
3446 | <summary> | 3076 | <summary> |
3447 | Returns true if the module can handle the request | 3077 | Id |
3448 | </summary> | 3078 | </summary> |
3079 | <param name="id"></param> | ||
3449 | </member> | 3080 | </member> |
3450 | <member name="M:HttpServer.HttpModules.ResourceFileModule.Process(HttpServer.IHttpRequest,HttpServer.IHttpResponse,HttpServer.Sessions.IHttpSession)"> | 3081 | <member name="M:HttpServer.Sessions.MemorySession.Clear"> |
3451 | <summary> | 3082 | <summary> |
3452 | Method that process the url | 3083 | Remove everything from the session |
3453 | </summary> | 3084 | </summary> |
3454 | <param name="request">Information sent by the browser about the request</param> | ||
3455 | <param name="response">Information that is being sent back to the client.</param> | ||
3456 | <param name="session">Session used to </param> | ||
3457 | <returns>true if this module handled the request.</returns> | ||
3458 | </member> | 3085 | </member> |
3459 | <member name="P:HttpServer.HttpModules.ResourceFileModule.MimeTypes"> | 3086 | <member name="M:HttpServer.Sessions.MemorySession.Clear(System.Boolean)"> |
3460 | <summary> | 3087 | <summary> |
3461 | List with all mime-type that are allowed. | 3088 | Clears the specified expire. |
3462 | </summary> | 3089 | </summary> |
3463 | <remarks>All other mime types will result in a Forbidden http status code.</remarks> | 3090 | <param name="expires">True if the session is cleared due to expiration</param> |
3464 | </member> | 3091 | </member> |
3465 | <member name="T:HttpServer.HttpModules.FileModule"> | 3092 | <member name="M:HttpServer.Sessions.MemorySession.Dispose"> |
3466 | <summary> | 3093 | <summary> |
3467 | The purpose of this module is to serve files. | 3094 | Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. |
3468 | </summary> | 3095 | </summary> |
3096 | <filterpriority>2</filterpriority> | ||
3469 | </member> | 3097 | </member> |
3470 | <member name="M:HttpServer.HttpModules.FileModule.#ctor(System.String,System.String,System.Boolean)"> | 3098 | <member name="P:HttpServer.Sessions.MemorySession.Id"> |
3471 | <summary> | 3099 | <summary> |
3472 | Initializes a new instance of the <see cref="T:HttpServer.HttpModules.FileModule"/> class. | 3100 | Session id |
3473 | </summary> | 3101 | </summary> |
3474 | <param name="baseUri">Uri to serve, for instance "/files/"</param> | ||
3475 | <param name="basePath">Path on hard drive where we should start looking for files</param> | ||
3476 | <param name="useLastModifiedHeader">If true a Last-Modifed header will be sent upon requests urging web browser to cache files</param> | ||
3477 | </member> | 3102 | </member> |
3478 | <member name="M:HttpServer.HttpModules.FileModule.#ctor(System.String,System.String)"> | 3103 | <member name="P:HttpServer.Sessions.MemorySession.Item(System.String)"> |
3479 | <summary> | 3104 | <summary> |
3480 | Initializes a new instance of the <see cref="T:HttpServer.HttpModules.FileModule"/> class. | 3105 | Should |
3481 | </summary> | 3106 | </summary> |
3482 | <param name="baseUri">Uri to serve, for instance "/files/"</param> | 3107 | <param name="name">Name of the session variable</param> |
3483 | <param name="basePath">Path on hard drive where we should start looking for files</param> | 3108 | <returns>null if it's not set</returns> |
3484 | </member> | 3109 | </member> |
3485 | <member name="M:HttpServer.HttpModules.FileModule.AddDefaultMimeTypes"> | 3110 | <member name="P:HttpServer.Sessions.MemorySession.Accessed"> |
3486 | <summary> | 3111 | <summary> |
3487 | Mimtypes that this class can handle per default | 3112 | when the session was last accessed. |
3488 | </summary> | 3113 | </summary> |
3114 | <remarks> | ||
3115 | Used to determine when the session should be removed. | ||
3116 | </remarks> | ||
3489 | </member> | 3117 | </member> |
3490 | <member name="M:HttpServer.HttpModules.FileModule.CanHandle(System.Uri)"> | 3118 | <member name="P:HttpServer.Sessions.MemorySession.Count"> |
3491 | <summary> | 3119 | <summary> |
3492 | Determines if the request should be handled by this module. | 3120 | Number of values in the session |
3493 | Invoked by the <see cref="T:HttpServer.HttpServer"/> | ||
3494 | </summary> | 3121 | </summary> |
3495 | <param name="uri"></param> | ||
3496 | <returns>true if this module should handle it.</returns> | ||
3497 | </member> | 3122 | </member> |
3498 | <member name="M:HttpServer.HttpModules.FileModule.GetPath(System.Uri)"> | 3123 | <member name="P:HttpServer.Sessions.MemorySession.Changed"> |
3499 | <exception cref="T:HttpServer.Exceptions.BadRequestException">Illegal path</exception> | 3124 | <summary> |
3125 | Flag to indicate that the session have been changed | ||
3126 | and should be saved into the session store. | ||
3127 | </summary> | ||
3500 | </member> | 3128 | </member> |
3501 | <member name="M:HttpServer.HttpModules.FileModule.Contains(System.String,System.Collections.Generic.IEnumerable{System.String})"> | 3129 | <member name="E:HttpServer.Sessions.MemorySession.BeforeClear"> |
3502 | <summary> | 3130 | <summary> |
3503 | check if source contains any of the chars. | 3131 | Event triggered upon clearing the session |
3504 | </summary> | 3132 | </summary> |
3505 | <param name="source"></param> | ||
3506 | <param name="chars"></param> | ||
3507 | <returns></returns> | ||
3508 | </member> | 3133 | </member> |
3509 | <member name="M:HttpServer.HttpModules.FileModule.Process(HttpServer.IHttpRequest,HttpServer.IHttpResponse,HttpServer.Sessions.IHttpSession)"> | 3134 | <member name="T:HttpServer.HttpModules.ReverseProxyModule"> |
3510 | <summary> | 3135 | <summary> |
3511 | Method that process the Uri. | 3136 | A reverse proxy are used to act as a bridge between local (protected/hidden) websites |
3137 | and public clients. | ||
3138 | |||
3139 | A typical usage is to allow web servers on non standard ports to still be available | ||
3140 | to the public clients, or allow web servers on private ips to be available. | ||
3141 | </summary> | ||
3142 | </member> | ||
3143 | <member name="M:HttpServer.HttpModules.ReverseProxyModule.#ctor(System.String,System.String)"> | ||
3144 | <summary> | ||
3145 | |||
3146 | </summary> | ||
3147 | <param name="source">Base url requested from browser</param> | ||
3148 | <param name="destination">Base url on private web server</param> | ||
3149 | <example> | ||
3150 | // this will return contents from http://192.168.1.128/view/jonas when client requests http://www.gauffin.com/user/view/jonas | ||
3151 | _server.Add(new ReverseProxyModule("http://www.gauffin.com/user/", "http://192.168.1.128/"); | ||
3152 | </example> | ||
3153 | </member> | ||
3154 | <member name="M:HttpServer.HttpModules.ReverseProxyModule.CanHandle(System.Uri)"> | ||
3155 | <summary> | ||
3156 | Method that determines if an url should be handled or not by the module | ||
3157 | </summary> | ||
3158 | <param name="uri">Url requested by the client.</param> | ||
3159 | <returns>true if module should handle the url.</returns> | ||
3160 | </member> | ||
3161 | <member name="M:HttpServer.HttpModules.ReverseProxyModule.Process(HttpServer.IHttpRequest,HttpServer.IHttpResponse,HttpServer.Sessions.IHttpSession)"> | ||
3162 | <summary> | ||
3163 | Method that process the url | ||
3512 | </summary> | 3164 | </summary> |
3513 | <param name="request">Information sent by the browser about the request</param> | 3165 | <param name="request">Information sent by the browser about the request</param> |
3514 | <param name="response">Information that is being sent back to the client.</param> | 3166 | <param name="response">Information that is being sent back to the client.</param> |
3515 | <param name="session">Session used to </param> | 3167 | <param name="session">Session used to </param> |
3516 | <exception cref="T:HttpServer.Exceptions.InternalServerException">Failed to find file extension</exception> | ||
3517 | <exception cref="T:HttpServer.Exceptions.ForbiddenException">File type is forbidden.</exception> | ||
3518 | </member> | 3168 | </member> |
3519 | <member name="M:HttpServer.HttpModules.FileModule.GetFileExtension(System.String)"> | 3169 | <member name="T:HttpServer.FormDecoders.UrlDecoder"> |
3520 | <summary> | 3170 | <summary> |
3521 | return a file extension from an absolute Uri path (or plain filename) | 3171 | Can handle application/x-www-form-urlencoded |
3522 | </summary> | 3172 | </summary> |
3523 | <param name="uri"></param> | ||
3524 | <returns></returns> | ||
3525 | </member> | 3173 | </member> |
3526 | <member name="P:HttpServer.HttpModules.FileModule.MimeTypes"> | 3174 | <member name="M:HttpServer.FormDecoders.UrlDecoder.Decode(System.IO.Stream,System.String,System.Text.Encoding)"> |
3527 | <summary> | 3175 | <summary> |
3528 | List with all mime-type that are allowed. | ||
3529 | </summary> | 3176 | </summary> |
3530 | <remarks>All other mime types will result in a Forbidden http status code.</remarks> | 3177 | <param name="stream">Stream containing the content</param> |
3178 | <param name="contentType">Content type (with any additional info like boundry). Content type is always supplied in lower case</param> | ||
3179 | <param name="encoding">Stream encoding</param> | ||
3180 | <returns> | ||
3181 | A HTTP form, or null if content could not be parsed. | ||
3182 | </returns> | ||
3183 | <exception cref="T:System.IO.InvalidDataException">If contents in the stream is not valid input data.</exception> | ||
3531 | </member> | 3184 | </member> |
3532 | <member name="P:HttpServer.HttpModules.FileModule.ForbiddenChars"> | 3185 | <member name="M:HttpServer.FormDecoders.UrlDecoder.CanParse(System.String)"> |
3533 | <summary> | 3186 | <summary> |
3534 | characters that may not exist in a path. | 3187 | Checks if the decoder can handle the mime type |
3188 | </summary> | ||
3189 | <param name="contentType">Content type (with any additional info like boundry). Content type is always supplied in lower case.</param> | ||
3190 | <returns>True if the decoder can parse the specified content type</returns> | ||
3191 | </member> | ||
3192 | <member name="T:HttpServer.FormDecoders.FormDecoderProvider"> | ||
3193 | <summary> | ||
3194 | This provider is used to let us implement any type of form decoding we want without | ||
3195 | having to rewrite anything else in the server. | ||
3196 | </summary> | ||
3197 | </member> | ||
3198 | <member name="M:HttpServer.FormDecoders.FormDecoderProvider.Decode(System.String,System.IO.Stream,System.Text.Encoding)"> | ||
3199 | <summary> | ||
3200 | |||
3201 | </summary> | ||
3202 | <param name="contentType">Should contain boundary and type, as in: multipart/form-data; boundary=---------------------------230051238959</param> | ||
3203 | <param name="stream">Stream containing form data.</param> | ||
3204 | <param name="encoding">Encoding used when decoding the stream</param> | ||
3205 | <returns><see cref="F:HttpServer.HttpInput.Empty"/> if no parser was found.</returns> | ||
3206 | <exception cref="T:System.ArgumentException">If stream is null or not readable.</exception> | ||
3207 | <exception cref="T:System.IO.InvalidDataException">If stream contents cannot be decoded properly.</exception> | ||
3208 | </member> | ||
3209 | <member name="M:HttpServer.FormDecoders.FormDecoderProvider.Add(HttpServer.FormDecoders.IFormDecoder)"> | ||
3210 | <summary> | ||
3211 | Add a decoder. | ||
3212 | </summary> | ||
3213 | <param name="decoder"></param> | ||
3214 | <exception cref="T:System.ArgumentNullException"></exception> | ||
3215 | </member> | ||
3216 | <member name="P:HttpServer.FormDecoders.FormDecoderProvider.Count"> | ||
3217 | <summary> | ||
3218 | Number of added decoders. | ||
3219 | </summary> | ||
3220 | </member> | ||
3221 | <member name="P:HttpServer.FormDecoders.FormDecoderProvider.Decoders"> | ||
3222 | <summary> | ||
3223 | Use with care. | ||
3224 | </summary> | ||
3225 | </member> | ||
3226 | <member name="P:HttpServer.FormDecoders.FormDecoderProvider.DefaultDecoder"> | ||
3227 | <summary> | ||
3228 | Decoder used for unknown content types. | ||
3535 | </summary> | 3229 | </summary> |
3536 | <example> | ||
3537 | fileMod.ForbiddenChars = new string[]{ "\\", "..", ":" }; | ||
3538 | </example> | ||
3539 | </member> | 3230 | </member> |
3540 | <member name="T:HttpServer.Exceptions.InternalServerException"> | 3231 | <member name="T:HttpServer.Exceptions.InternalServerException"> |
3541 | <summary> | 3232 | <summary> |
@@ -3560,73 +3251,425 @@ | |||
3560 | <param name="message">error message.</param> | 3251 | <param name="message">error message.</param> |
3561 | <param name="inner">inner exception.</param> | 3252 | <param name="inner">inner exception.</param> |
3562 | </member> | 3253 | </member> |
3563 | <member name="T:HttpServer.Rules.RegexRedirectRule"> | 3254 | <member name="T:HttpServer.IHttpResponse"> |
3564 | <summary> | 3255 | <summary> |
3565 | Class to make dynamic binding of redirects. Instead of having to specify a number of similar redirect rules | 3256 | Response that is sent back to the web browser / client. |
3566 | a regular expression can be used to identify redirect URLs and their targets. | 3257 | |
3258 | A response can be sent if different ways. The easiest one is | ||
3259 | to just fill the Body stream with content, everything else | ||
3260 | will then be taken care of by the framework. The default content-type | ||
3261 | is text/html, you should change it if you send anything else. | ||
3262 | |||
3263 | The second and slighty more complex way is to send the response | ||
3264 | as parts. Start with sending the header using the SendHeaders method and | ||
3265 | then you can send the body using SendBody method, but do not forget | ||
3266 | to set ContentType and ContentLength before doing so. | ||
3567 | </summary> | 3267 | </summary> |
3568 | <example> | 3268 | <example> |
3569 | <![CDATA[ | 3269 | public void MyHandler(IHttpRequest request, IHttpResponse response) |
3570 | new RegexRedirectRule("/(?<target>[a-z0-9]+)", "/users/${target}?find=true", RegexOptions.IgnoreCase) | 3270 | { |
3571 | ]]> | 3271 | |
3272 | } | ||
3572 | </example> | 3273 | </example> |
3573 | </member> | 3274 | </member> |
3574 | <member name="M:HttpServer.Rules.RegexRedirectRule.#ctor(System.String,System.String)"> | 3275 | <member name="M:HttpServer.IHttpResponse.AddHeader(System.String,System.String)"> |
3575 | <summary> | 3276 | <summary> |
3576 | Initializes a new instance of the <see cref="T:HttpServer.Rules.RegexRedirectRule"/> class. | 3277 | Add another header to the document. |
3577 | </summary> | 3278 | </summary> |
3578 | <param name="fromUrlExpression">Expression to match URL</param> | 3279 | <param name="name">Name of the header, case sensitive, use lower cases.</param> |
3579 | <param name="toUrlExpression">Expression to generate URL</param> | 3280 | <param name="value">Header values can span over multiple lines as long as each line starts with a white space. New line chars should be \r\n</param> |
3580 | <example> | 3281 | <exception cref="T:System.InvalidOperationException">If headers already been sent.</exception> |
3581 | <![CDATA[ | 3282 | <exception cref="T:System.ArgumentException">If value conditions have not been met.</exception> |
3582 | server.Add(new RegexRedirectRule("/(?<first>[a-zA-Z0-9]+)", "/user/${first}")); | 3283 | <remarks>Adding any header will override the default ones and those specified by properties.</remarks> |
3583 | Result of ie. /employee1 will then be /user/employee1 | ||
3584 | ]]> | ||
3585 | </example> | ||
3586 | </member> | 3284 | </member> |
3587 | <member name="M:HttpServer.Rules.RegexRedirectRule.#ctor(System.String,System.String,System.Text.RegularExpressions.RegexOptions)"> | 3285 | <member name="M:HttpServer.IHttpResponse.Send"> |
3588 | <summary> | 3286 | <summary> |
3589 | Initializes a new instance of the <see cref="T:HttpServer.Rules.RegexRedirectRule"/> class. | 3287 | Send headers and body to the browser. |
3590 | </summary> | 3288 | </summary> |
3591 | <param name="fromUrlExpression">Expression to match URL</param> | 3289 | <exception cref="T:System.InvalidOperationException">If content have already been sent.</exception> |
3592 | <param name="toUrlExpression">Expression to generate URL</param> | ||
3593 | <param name="options">Regular expression options to use, can be null</param> | ||
3594 | <example> | ||
3595 | <![CDATA[ | ||
3596 | server.Add(new RegexRedirectRule("/(?<first>[a-zA-Z0-9]+)", "/user/{first}", RegexOptions.IgnoreCase)); | ||
3597 | Result of ie. /employee1 will then be /user/employee1 | ||
3598 | ]]> | ||
3599 | </example> | ||
3600 | </member> | 3290 | </member> |
3601 | <member name="M:HttpServer.Rules.RegexRedirectRule.#ctor(System.String,System.String,System.Text.RegularExpressions.RegexOptions,System.Boolean)"> | 3291 | <member name="M:HttpServer.IHttpResponse.SendBody(System.Byte[],System.Int32,System.Int32)"> |
3602 | <summary> | 3292 | <summary> |
3603 | Initializes a new instance of the <see cref="T:HttpServer.Rules.RegexRedirectRule"/> class. | 3293 | Make sure that you have specified ContentLength and sent the headers first. |
3294 | </summary> | ||
3295 | <param name="buffer"></param> | ||
3296 | <exception cref="T:System.InvalidOperationException">If headers have not been sent.</exception> | ||
3297 | <see cref="M:HttpServer.IHttpResponse.SendHeaders"/> | ||
3298 | <param name="offset">offest of first byte to send</param> | ||
3299 | <param name="count">number of bytes to send.</param> | ||
3300 | <seealso cref="M:HttpServer.IHttpResponse.Send"/> | ||
3301 | <seealso cref="M:HttpServer.IHttpResponse.SendHeaders"/> | ||
3302 | <remarks>This method can be used if you want to send body contents without caching them first. This | ||
3303 | is recommended for larger files to keep the memory usage low.</remarks> | ||
3304 | </member> | ||
3305 | <member name="M:HttpServer.IHttpResponse.SendBody(System.Byte[])"> | ||
3306 | <summary> | ||
3307 | Make sure that you have specified ContentLength and sent the headers first. | ||
3308 | </summary> | ||
3309 | <param name="buffer"></param> | ||
3310 | <exception cref="T:System.InvalidOperationException">If headers have not been sent.</exception> | ||
3311 | <see cref="M:HttpServer.IHttpResponse.SendHeaders"/> | ||
3312 | <seealso cref="M:HttpServer.IHttpResponse.Send"/> | ||
3313 | <seealso cref="M:HttpServer.IHttpResponse.SendHeaders"/> | ||
3314 | <remarks>This method can be used if you want to send body contents without caching them first. This | ||
3315 | is recommended for larger files to keep the memory usage low.</remarks> | ||
3316 | </member> | ||
3317 | <member name="M:HttpServer.IHttpResponse.SendHeaders"> | ||
3318 | <summary> | ||
3319 | Send headers to the client. | ||
3320 | </summary> | ||
3321 | <exception cref="T:System.InvalidOperationException">If headers already been sent.</exception> | ||
3322 | <seealso cref="M:HttpServer.IHttpResponse.AddHeader(System.String,System.String)"/> | ||
3323 | <seealso cref="M:HttpServer.IHttpResponse.Send"/> | ||
3324 | <seealso cref="M:HttpServer.IHttpResponse.SendBody(System.Byte[])"/> | ||
3325 | </member> | ||
3326 | <member name="M:HttpServer.IHttpResponse.Redirect(System.Uri)"> | ||
3327 | <summary> | ||
3328 | Redirect client to somewhere else using the 302 status code. | ||
3329 | </summary> | ||
3330 | <param name="uri">Destination of the redirect</param> | ||
3331 | <exception cref="T:System.InvalidOperationException">If headers already been sent.</exception> | ||
3332 | <remarks>You can not do anything more with the request when a redirect have been done. This should be your last | ||
3333 | action.</remarks> | ||
3334 | </member> | ||
3335 | <member name="M:HttpServer.IHttpResponse.Redirect(System.String)"> | ||
3336 | <summary> | ||
3337 | redirect to somewhere | ||
3338 | </summary> | ||
3339 | <param name="url">where the redirect should go</param> | ||
3340 | <remarks> | ||
3341 | No body are allowed when doing redirects. | ||
3342 | </remarks> | ||
3343 | </member> | ||
3344 | <member name="P:HttpServer.IHttpResponse.Body"> | ||
3345 | <summary> | ||
3346 | The body stream is used to cache the body contents | ||
3347 | before sending everything to the client. It's the simplest | ||
3348 | way to serve documents. | ||
3349 | </summary> | ||
3350 | </member> | ||
3351 | <member name="P:HttpServer.IHttpResponse.ProtocolVersion"> | ||
3352 | <summary> | ||
3353 | Defines the version of the HTTP Response for applications where it's required | ||
3354 | for this to be forced. | ||
3355 | </summary> | ||
3356 | </member> | ||
3357 | <member name="P:HttpServer.IHttpResponse.Chunked"> | ||
3358 | <summary> | ||
3359 | The chunked encoding modifies the body of a message in order to | ||
3360 | transfer it as a series of chunks, each with its own size indicator, | ||
3361 | followed by an OPTIONAL trailer containing entity-header fields. This | ||
3362 | allows dynamically produced content to be transferred along with the | ||
3363 | information necessary for the recipient to verify that it has | ||
3364 | received the full message. | ||
3365 | </summary> | ||
3366 | </member> | ||
3367 | <member name="P:HttpServer.IHttpResponse.Connection"> | ||
3368 | <summary> | ||
3369 | Kind of connection | ||
3370 | </summary> | ||
3371 | </member> | ||
3372 | <member name="P:HttpServer.IHttpResponse.Encoding"> | ||
3373 | <summary> | ||
3374 | Encoding to use when sending stuff to the client. | ||
3375 | </summary> | ||
3376 | <remarks>Default is UTF8</remarks> | ||
3377 | </member> | ||
3378 | <member name="P:HttpServer.IHttpResponse.KeepAlive"> | ||
3379 | <summary> | ||
3380 | Number of seconds to keep connection alive | ||
3381 | </summary> | ||
3382 | <remarks>Only used if Connection property is set to ConnectionType.KeepAlive</remarks> | ||
3383 | </member> | ||
3384 | <member name="P:HttpServer.IHttpResponse.Status"> | ||
3385 | <summary> | ||
3386 | Status code that is sent to the client. | ||
3387 | </summary> | ||
3388 | <remarks>Default is HttpStatusCode.Ok</remarks> | ||
3389 | </member> | ||
3390 | <member name="P:HttpServer.IHttpResponse.Reason"> | ||
3391 | <summary> | ||
3392 | Information about why a specific status code was used. | ||
3393 | </summary> | ||
3394 | </member> | ||
3395 | <member name="P:HttpServer.IHttpResponse.ContentLength"> | ||
3396 | <summary> | ||
3397 | Size of the body. MUST be specified before sending the header, | ||
3398 | unless property Chunked is set to true. | ||
3399 | </summary> | ||
3400 | </member> | ||
3401 | <member name="P:HttpServer.IHttpResponse.ContentType"> | ||
3402 | <summary> | ||
3403 | Kind of content in the body | ||
3404 | </summary> | ||
3405 | <remarks>Default is text/html</remarks> | ||
3406 | </member> | ||
3407 | <member name="P:HttpServer.IHttpResponse.HeadersSent"> | ||
3408 | <summary> | ||
3409 | Headers have been sent to the client- | ||
3410 | </summary> | ||
3411 | <remarks>You can not send any additional headers if they have already been sent.</remarks> | ||
3412 | </member> | ||
3413 | <member name="P:HttpServer.IHttpResponse.Sent"> | ||
3414 | <summary> | ||
3415 | The whole response have been sent. | ||
3416 | </summary> | ||
3417 | </member> | ||
3418 | <member name="P:HttpServer.IHttpResponse.Cookies"> | ||
3419 | <summary> | ||
3420 | Cookies that should be created/changed. | ||
3421 | </summary> | ||
3422 | </member> | ||
3423 | <member name="T:HttpServer.ConnectionType"> | ||
3424 | <summary> | ||
3425 | Type of HTTP connection | ||
3426 | </summary> | ||
3427 | </member> | ||
3428 | <member name="F:HttpServer.ConnectionType.Close"> | ||
3429 | <summary> | ||
3430 | Connection is closed after each request-response | ||
3431 | </summary> | ||
3432 | </member> | ||
3433 | <member name="F:HttpServer.ConnectionType.KeepAlive"> | ||
3434 | <summary> | ||
3435 | Connection is kept alive for X seconds (unless another request have been made) | ||
3436 | </summary> | ||
3437 | </member> | ||
3438 | <member name="T:HttpServer.HttpModules.WebSiteModule"> | ||
3439 | <summary> | ||
3440 | The website module let's you handle multiple websites in the same server. | ||
3441 | It uses the "Host" header to check which site you want. | ||
3442 | </summary> | ||
3443 | <remarks>It's recommended that you do not | ||
3444 | add any other modules to HttpServer if you are using the website module. Instead, | ||
3445 | add all wanted modules to each website.</remarks> | ||
3446 | </member> | ||
3447 | <member name="M:HttpServer.HttpModules.WebSiteModule.#ctor(System.String,System.String)"> | ||
3448 | <summary> | ||
3449 | |||
3450 | </summary> | ||
3451 | <param name="host">domain name that should be handled.</param> | ||
3452 | <param name="name"></param> | ||
3453 | </member> | ||
3454 | <member name="M:HttpServer.HttpModules.WebSiteModule.Process(HttpServer.IHttpRequest,HttpServer.IHttpResponse,HttpServer.Sessions.IHttpSession)"> | ||
3455 | <summary> | ||
3456 | Method that process the url | ||
3457 | </summary> | ||
3458 | <param name="request">Information sent by the browser about the request</param> | ||
3459 | <param name="response">Information that is being sent back to the client.</param> | ||
3460 | <param name="session">Session used to </param> | ||
3461 | </member> | ||
3462 | <member name="P:HttpServer.HttpModules.WebSiteModule.SiteName"> | ||
3463 | <summary> | ||
3464 | Name of site. | ||
3465 | </summary> | ||
3466 | </member> | ||
3467 | <member name="T:HttpServer.HttpModules.HttpModuleExceptionEventArgs"> | ||
3468 | <summary> | ||
3469 | Used to inform http server that | ||
3470 | </summary> | ||
3471 | </member> | ||
3472 | <member name="M:HttpServer.HttpModules.HttpModuleExceptionEventArgs.#ctor(System.Exception)"> | ||
3473 | <summary> | ||
3474 | Eventarguments used when an exception is thrown by a module | ||
3475 | </summary> | ||
3476 | <param name="e">the exception</param> | ||
3477 | </member> | ||
3478 | <member name="P:HttpServer.HttpModules.HttpModuleExceptionEventArgs.Exception"> | ||
3479 | <summary> | ||
3480 | Exception thrown in a module | ||
3481 | </summary> | ||
3482 | </member> | ||
3483 | <member name="T:HttpServer.HttpInputItem"> | ||
3484 | <summary> | ||
3485 | represents a HTTP input item. Each item can have multiple sub items, a sub item | ||
3486 | is made in a HTML form by using square brackets | ||
3604 | </summary> | 3487 | </summary> |
3605 | <param name="fromUrlExpression">Expression to match URL</param> | ||
3606 | <param name="toUrlExpression">Expression to generate URL</param> | ||
3607 | <param name="options">Regular expression options to apply</param> | ||
3608 | <param name="shouldRedirect"><c>true</c> if request should be redirected, <c>false</c> if the request URI should be replaced.</param> | ||
3609 | <example> | 3488 | <example> |
3610 | <![CDATA[ | 3489 | // <input type="text" name="user[FirstName]" value="jonas" /> becomes: |
3611 | server.Add(new RegexRedirectRule("/(?<first>[a-zA-Z0-9]+)", "/user/${first}", RegexOptions.None)); | 3490 | Console.WriteLine("Value: {0}", form["user"]["FirstName"].Value); |
3612 | Result of ie. /employee1 will then be /user/employee1 | ||
3613 | ]]> | ||
3614 | </example> | 3491 | </example> |
3492 | <remarks> | ||
3493 | All names in a form SHOULD be in lowercase. | ||
3494 | </remarks> | ||
3495 | </member> | ||
3496 | <member name="F:HttpServer.HttpInputItem.Empty"> | ||
3497 | <summary> Representation of a non-initialized <see cref="T:HttpServer.HttpInputItem"/>.</summary> | ||
3498 | </member> | ||
3499 | <member name="M:HttpServer.HttpInputItem.#ctor(System.String,System.String)"> | ||
3500 | <summary> | ||
3501 | Initializes an input item setting its name/identifier and value | ||
3502 | </summary> | ||
3503 | <param name="name">Parameter name/id</param> | ||
3504 | <param name="value">Parameter value</param> | ||
3505 | </member> | ||
3506 | <member name="M:HttpServer.HttpInputItem.#ctor(HttpServer.HttpInputItem)"> | ||
3507 | <summary>Creates a deep copy of the item specified</summary> | ||
3508 | <param name="item">The item to copy</param> | ||
3509 | <remarks>The function makes a deep copy of quite a lot which can be slow</remarks> | ||
3510 | </member> | ||
3511 | <member name="M:HttpServer.HttpInputItem.Add(System.String)"> | ||
3512 | <summary> | ||
3513 | Add another value to this item | ||
3514 | </summary> | ||
3515 | <param name="value">Value to add.</param> | ||
3516 | <exception cref="T:System.InvalidOperationException">Cannot add stuff to <see cref="F:HttpServer.HttpInput.Empty"/>.</exception> | ||
3517 | </member> | ||
3518 | <member name="M:HttpServer.HttpInputItem.Contains(System.String)"> | ||
3519 | <summary> | ||
3520 | checks if a sub-item exists (and has a value). | ||
3521 | </summary> | ||
3522 | <param name="name">name in lower case</param> | ||
3523 | <returns>true if the sub-item exists and has a value; otherwise false.</returns> | ||
3524 | </member> | ||
3525 | <member name="M:HttpServer.HttpInputItem.ToString"> | ||
3526 | <summary> Returns a formatted representation of the instance with the values of all contained parameters </summary> | ||
3527 | </member> | ||
3528 | <member name="M:HttpServer.HttpInputItem.ToString(System.String,System.Boolean)"> | ||
3529 | <summary> | ||
3530 | Outputs the string in a formatted manner | ||
3531 | </summary> | ||
3532 | <param name="prefix">A prefix to append, used internally</param> | ||
3533 | <param name="asQuerySting">produce a query string</param> | ||
3534 | </member> | ||
3535 | <member name="M:HttpServer.HttpInputItem.Add(System.String,System.String)"> | ||
3536 | <summary> | ||
3537 | Add a sub item. | ||
3538 | </summary> | ||
3539 | <param name="name">Can contain array formatting, the item is then parsed and added in multiple levels</param> | ||
3540 | <param name="value">Value to add.</param> | ||
3615 | <exception cref="T:System.ArgumentNullException">Argument is null.</exception> | 3541 | <exception cref="T:System.ArgumentNullException">Argument is null.</exception> |
3616 | <seealso cref="P:HttpServer.Rules.RedirectRule.ShouldRedirect"/> | 3542 | <exception cref="T:System.InvalidOperationException">Cannot add stuff to <see cref="F:HttpServer.HttpInput.Empty"/>.</exception> |
3617 | </member> | 3543 | </member> |
3618 | <member name="M:HttpServer.Rules.RegexRedirectRule.Process(HttpServer.IHttpRequest,HttpServer.IHttpResponse)"> | 3544 | <member name="M:HttpServer.HttpInputItem.System#Collections#Generic#IEnumerable{HttpServer#HttpInputItem}#GetEnumerator"> |
3619 | <summary> | 3545 | <summary> |
3620 | Process the incoming request. | 3546 | Returns an enumerator that iterates through the collection. |
3621 | </summary> | 3547 | </summary> |
3622 | <param name="request">incoming HTTP request</param> | 3548 | |
3623 | <param name="response">outgoing HTTP response</param> | 3549 | <returns> |
3624 | <returns>true if response should be sent to the browser directly (no other rules or modules will be processed).</returns> | 3550 | A <see cref="T:System.Collections.Generic.IEnumerator`1"></see> that can be used to iterate through the collection. |
3625 | <remarks> | 3551 | </returns> |
3626 | returning true means that no modules will get the request. Returning true is typically being done | 3552 | <filterpriority>1</filterpriority> |
3627 | for redirects. | 3553 | </member> |
3628 | </remarks> | 3554 | <member name="M:HttpServer.HttpInputItem.GetEnumerator"> |
3629 | <exception cref="T:System.ArgumentNullException">If request or response is null</exception> | 3555 | <summary> |
3556 | Returns an enumerator that iterates through a collection. | ||
3557 | </summary> | ||
3558 | |||
3559 | <returns> | ||
3560 | An <see cref="T:System.Collections.IEnumerator"></see> object that can be used to iterate through the collection. | ||
3561 | </returns> | ||
3562 | <filterpriority>2</filterpriority> | ||
3563 | </member> | ||
3564 | <member name="M:HttpServer.HttpInputItem.ToString(System.String)"> | ||
3565 | <summary> | ||
3566 | Outputs the string in a formatted manner | ||
3567 | </summary> | ||
3568 | <param name="prefix">A prefix to append, used internally</param> | ||
3569 | <returns></returns> | ||
3570 | </member> | ||
3571 | <member name="P:HttpServer.HttpInputItem.Count"> | ||
3572 | <summary> | ||
3573 | Number of values | ||
3574 | </summary> | ||
3575 | </member> | ||
3576 | <member name="P:HttpServer.HttpInputItem.Item(System.String)"> | ||
3577 | <summary> | ||
3578 | Get a sub item | ||
3579 | </summary> | ||
3580 | <param name="name">name in lower case.</param> | ||
3581 | <returns><see cref="F:HttpServer.HttpInputItem.Empty"/> if no item was found.</returns> | ||
3582 | </member> | ||
3583 | <member name="P:HttpServer.HttpInputItem.Name"> | ||
3584 | <summary> | ||
3585 | Name of item (in lower case). | ||
3586 | </summary> | ||
3587 | </member> | ||
3588 | <member name="P:HttpServer.HttpInputItem.Value"> | ||
3589 | <summary> | ||
3590 | Returns the first value, or null if no value exist. | ||
3591 | </summary> | ||
3592 | </member> | ||
3593 | <member name="P:HttpServer.HttpInputItem.LastValue"> | ||
3594 | <summary> | ||
3595 | Returns the last value, or null if no value exist. | ||
3596 | </summary> | ||
3597 | </member> | ||
3598 | <member name="P:HttpServer.HttpInputItem.Values"> | ||
3599 | <summary> | ||
3600 | Returns the list with values. | ||
3601 | </summary> | ||
3602 | </member> | ||
3603 | <member name="P:HttpServer.HttpInputItem.HttpServer#IHttpInput#Item(System.String)"> | ||
3604 | <summary> | ||
3605 | |||
3606 | </summary> | ||
3607 | <param name="name">name in lower case</param> | ||
3608 | <returns></returns> | ||
3609 | </member> | ||
3610 | <member name="T:HttpServer.Helpers.ResourceManager"> | ||
3611 | <summary>Class to handle loading of resource files</summary> | ||
3612 | </member> | ||
3613 | <member name="M:HttpServer.Helpers.ResourceManager.#ctor"> | ||
3614 | <summary> | ||
3615 | Initializes a new instance of the <see cref="T:HttpServer.Helpers.ResourceManager"/> class. | ||
3616 | </summary> | ||
3617 | </member> | ||
3618 | <member name="M:HttpServer.Helpers.ResourceManager.#ctor(HttpServer.ILogWriter)"> | ||
3619 | <summary> | ||
3620 | Initializes a new instance of the <see cref="T:HttpServer.Helpers.ResourceManager"/> class. | ||
3621 | </summary> | ||
3622 | <param name="writer">logger.</param> | ||
3623 | </member> | ||
3624 | <member name="M:HttpServer.Helpers.ResourceManager.LoadResources(System.String,System.Reflection.Assembly,System.String)"> | ||
3625 | <summary> | ||
3626 | Loads resources from a namespace in the given assembly to an URI | ||
3627 | </summary> | ||
3628 | <param name="toUri">The URI to map the resources to</param> | ||
3629 | <param name="fromAssembly">The assembly in which the resources reside</param> | ||
3630 | <param name="fromNamespace">The namespace from which to load the resources</param> | ||
3631 | <usage> | ||
3632 | <code> | ||
3633 | resourceLoader.LoadResources("/user/", typeof(User).Assembly, "MyLib.Models.User.Views"); | ||
3634 | </code> | ||
3635 | Will make the resource MyLib.Models.User.Views.list.Haml accessible via /user/list.haml or /user/list/ | ||
3636 | </usage> | ||
3637 | <returns>The amount of loaded files, giving you the possibility of making sure the resources needed gets loaded</returns> | ||
3638 | <exception cref="T:System.InvalidOperationException">If a resource has already been mapped to an uri</exception> | ||
3639 | </member> | ||
3640 | <member name="M:HttpServer.Helpers.ResourceManager.GetResourceStream(System.String)"> | ||
3641 | <summary> | ||
3642 | Retrieves a stream for the specified resource path if loaded otherwise null | ||
3643 | </summary> | ||
3644 | <param name="path">Path to the resource to retrieve a stream for</param> | ||
3645 | <returns>A stream or null if the resource couldn't be found</returns> | ||
3646 | </member> | ||
3647 | <member name="M:HttpServer.Helpers.ResourceManager.GetFiles(System.String)"> | ||
3648 | <summary> | ||
3649 | Fetch all files from the resource that matches the specified arguments. | ||
3650 | </summary> | ||
3651 | <param name="path">The path to the resource to extract</param> | ||
3652 | <returns> | ||
3653 | a list of files if found; or an empty array if no files are found. | ||
3654 | </returns> | ||
3655 | <exception cref="T:System.ArgumentException">Search path must end with an asterisk for finding arbitrary files</exception> | ||
3656 | </member> | ||
3657 | <member name="M:HttpServer.Helpers.ResourceManager.GetFiles(System.String,System.String)"> | ||
3658 | <summary> | ||
3659 | Fetch all files from the resource that matches the specified arguments. | ||
3660 | </summary> | ||
3661 | <param name="path">Where the file should reside.</param> | ||
3662 | <param name="filename">Files to check</param> | ||
3663 | <returns> | ||
3664 | a list of files if found; or an empty array if no files are found. | ||
3665 | </returns> | ||
3666 | </member> | ||
3667 | <member name="M:HttpServer.Helpers.ResourceManager.ContainsResource(System.String)"> | ||
3668 | <summary> | ||
3669 | Returns whether or not the loader has an instance of the file requested | ||
3670 | </summary> | ||
3671 | <param name="filename">The name of the template/file</param> | ||
3672 | <returns>True if the loader can provide the file</returns> | ||
3630 | </member> | 3673 | </member> |
3631 | <member name="T:HttpServer.Parser.RequestLineEventArgs"> | 3674 | <member name="T:HttpServer.Parser.RequestLineEventArgs"> |
3632 | <summary> | 3675 | <summary> |
@@ -3664,908 +3707,849 @@ | |||
3664 | Gets or sets requested URI path. | 3707 | Gets or sets requested URI path. |
3665 | </summary> | 3708 | </summary> |
3666 | </member> | 3709 | </member> |
3667 | <member name="T:HttpServer.RealmHandler"> | 3710 | <member name="T:HttpServer.IHttpContextHandler"> |
3668 | <summary> | 3711 | <summary> |
3669 | Delegate used to find a realm/domain. | 3712 | Class that receives Requests from a <see cref="T:HttpServer.IHttpClientContext"/>. |
3713 | </summary> | ||
3714 | </member> | ||
3715 | <member name="M:HttpServer.IHttpContextHandler.ClientDisconnected(HttpServer.IHttpClientContext,System.Net.Sockets.SocketError)"> | ||
3716 | <summary> | ||
3717 | Client have been disconnected. | ||
3718 | </summary> | ||
3719 | <param name="client">Client that was disconnected.</param> | ||
3720 | <param name="error">Reason</param> | ||
3721 | <see cref="T:HttpServer.IHttpClientContext"/> | ||
3722 | </member> | ||
3723 | <member name="M:HttpServer.IHttpContextHandler.RequestReceived(HttpServer.IHttpClientContext,HttpServer.IHttpRequest)"> | ||
3724 | <summary> | ||
3725 | Invoked when a client context have received a new HTTP request | ||
3726 | </summary> | ||
3727 | <param name="client">Client that received the request.</param> | ||
3728 | <param name="request">Request that was received.</param> | ||
3729 | <see cref="T:HttpServer.IHttpClientContext"/> | ||
3730 | </member> | ||
3731 | <member name="T:HttpServer.HttpForm"> | ||
3732 | <summary>Container for posted form data</summary> | ||
3733 | </member> | ||
3734 | <member name="F:HttpServer.HttpForm.EmptyForm"> | ||
3735 | <summary>Instance to help mark a non-initialized form</summary> | ||
3736 | </member> | ||
3737 | <member name="M:HttpServer.HttpForm.#ctor"> | ||
3738 | <summary>Initializes a form container with the specified name</summary> | ||
3739 | </member> | ||
3740 | <member name="M:HttpServer.HttpForm.#ctor(HttpServer.HttpInput)"> | ||
3741 | <summary> | ||
3742 | Makes a deep copy of the input | ||
3743 | </summary> | ||
3744 | <param name="input">The input to copy</param> | ||
3745 | </member> | ||
3746 | <member name="M:HttpServer.HttpForm.AddFile(HttpServer.HttpFile)"> | ||
3747 | <summary> | ||
3748 | Adds a file to the collection of posted files | ||
3749 | </summary> | ||
3750 | <param name="file">The file to add</param> | ||
3751 | <exception cref="T:System.ArgumentException">If the file is already added</exception> | ||
3752 | <exception cref="T:System.ArgumentNullException">If file is null</exception> | ||
3753 | <exception cref="T:System.InvalidOperationException">If the instance is HttpForm.EmptyForm which cannot be modified</exception> | ||
3754 | </member> | ||
3755 | <member name="M:HttpServer.HttpForm.ContainsFile(System.String)"> | ||
3756 | <summary> | ||
3757 | Checks if the form contains a specified file | ||
3758 | </summary> | ||
3759 | <param name="name">Field name of the file parameter</param> | ||
3760 | <returns>True if the file exists</returns> | ||
3761 | <exception cref="T:System.InvalidOperationException">If the instance is HttpForm.EmptyForm which cannot be modified</exception> | ||
3762 | </member> | ||
3763 | <member name="M:HttpServer.HttpForm.GetFile(System.String)"> | ||
3764 | <summary> | ||
3765 | Retrieves a file held by by the form | ||
3766 | </summary> | ||
3767 | <param name="name">The identifier of the file</param> | ||
3768 | <returns>The requested file or null if the file was not found</returns> | ||
3769 | <exception cref="T:System.ArgumentNullException">If name is null or empty</exception> | ||
3770 | <exception cref="T:System.InvalidOperationException">If the instance is HttpForm.EmptyForm which cannot be modified</exception> | ||
3771 | </member> | ||
3772 | <member name="M:HttpServer.HttpForm.Clear"> | ||
3773 | <summary>Disposes all held HttpFile's and resets values</summary> | ||
3774 | </member> | ||
3775 | <member name="P:HttpServer.HttpForm.Files"> | ||
3776 | <summary> | ||
3777 | Retrieves the number of files added to the <see cref="T:HttpServer.HttpForm"/> | ||
3778 | </summary> | ||
3779 | <returns>0 if no files are added</returns> | ||
3780 | </member> | ||
3781 | <member name="T:HttpServer.HttpClientContext"> | ||
3782 | <summary> | ||
3783 | Contains a connection to a browser/client. | ||
3670 | </summary> | 3784 | </summary> |
3671 | <param name="domain"></param> | ||
3672 | <returns></returns> | ||
3673 | <remarks> | 3785 | <remarks> |
3674 | Realms are used during HTTP Authentication | 3786 | Remember to <see cref="M:HttpServer.HttpClientContext.Start"/> after you have hooked the <see cref="E:HttpServer.HttpClientContext.RequestReceived"/> event. |
3675 | </remarks> | 3787 | </remarks> |
3676 | <seealso cref="T:HttpServer.Authentication.AuthenticationModule"/> | 3788 | TODO: Maybe this class should be broken up into HttpClientChannel and HttpClientContext? |
3677 | <seealso cref="T:HttpServer.Authentication.AuthenticationHandler"/> | ||
3678 | </member> | 3789 | </member> |
3679 | <member name="T:HttpServer.HttpServer"> | 3790 | <member name="M:HttpServer.HttpClientContext.#ctor(System.Boolean,System.Net.IPEndPoint,System.IO.Stream,HttpServer.IRequestParserFactory,System.Int32,System.Net.Sockets.Socket)"> |
3680 | <summary> | 3791 | <summary> |
3681 | A complete HTTP server, you need to add a module to it to be able to handle incoming requests. | 3792 | Initializes a new instance of the <see cref="T:HttpServer.HttpClientContext"/> class. |
3682 | </summary> | 3793 | </summary> |
3683 | <example> | 3794 | <param name="secured">true if the connection is secured (SSL/TLS)</param> |
3684 | <code> | 3795 | <param name="remoteEndPoint">client that connected.</param> |
3685 | // this small example will add two web site modules, thus handling | 3796 | <param name="stream">Stream used for communication</param> |
3686 | // two different sites. In reality you should add Controller modules or something | 3797 | <param name="parserFactory">Used to create a <see cref="T:HttpServer.IHttpRequestParser"/>.</param> |
3687 | // two the website modules to be able to handle different requests. | 3798 | <param name="bufferSize">Size of buffer to use when reading data. Must be at least 4096 bytes.</param> |
3688 | HttpServer server = new HttpServer(); | 3799 | <exception cref="T:System.Net.Sockets.SocketException">If <see cref="M:System.Net.Sockets.Socket.BeginReceive(System.Byte[],System.Int32,System.Int32,System.Net.Sockets.SocketFlags,System.AsyncCallback,System.Object)"/> fails</exception> |
3689 | server.Add(new WebSiteModule("www.gauffin.com", "Gauffin Telecom AB")); | 3800 | <exception cref="T:System.ArgumentException">Stream must be writable and readable.</exception> |
3690 | server.Add(new WebSiteModule("www.vapadi.se", "Remote PBX")); | 3801 | </member> |
3691 | 3802 | <member name="M:HttpServer.HttpClientContext.OnBodyBytesReceived(System.Object,HttpServer.Parser.BodyEventArgs)"> | |
3692 | // start regular http | 3803 | <summary> |
3693 | server.Start(IPAddress.Any, 80); | 3804 | Process incoming body bytes. |
3805 | </summary> | ||
3806 | <param name="sender"><see cref="T:HttpServer.IHttpRequestParser"/></param> | ||
3807 | <param name="e">Bytes</param> | ||
3808 | </member> | ||
3809 | <member name="M:HttpServer.HttpClientContext.OnHeaderReceived(System.Object,HttpServer.Parser.HeaderEventArgs)"> | ||
3810 | <summary> | ||
3694 | 3811 | ||
3695 | // start https | 3812 | </summary> |
3696 | server.Start(IPAddress.Any, 443, myCertificate); | 3813 | <param name="sender"></param> |
3697 | </code> | 3814 | <param name="e"></param> |
3698 | </example> | ||
3699 | <seealso cref="T:HttpServer.HttpModules.HttpModule"/> | ||
3700 | <seealso cref="T:HttpServer.HttpModules.FileModule"/> | ||
3701 | <seealso cref="T:HttpServer.HttpListener"/> | ||
3702 | </member> | 3815 | </member> |
3703 | <member name="M:HttpServer.HttpServer.#ctor(HttpServer.IComponentProvider)"> | 3816 | <member name="M:HttpServer.HttpClientContext.Start"> |
3704 | <summary> | 3817 | <summary> |
3705 | Initializes a new instance of the <see cref="T:HttpServer.HttpServer"/> class. | 3818 | Start reading content. |
3706 | </summary> | 3819 | </summary> |
3707 | <param name="provider">Used to get all components used in the server..</param> | 3820 | <remarks> |
3821 | Make sure to call base.Start() if you override this method. | ||
3822 | </remarks> | ||
3708 | </member> | 3823 | </member> |
3709 | <member name="M:HttpServer.HttpServer.#ctor"> | 3824 | <member name="M:HttpServer.HttpClientContext.Cleanup"> |
3710 | <summary> | 3825 | <summary> |
3711 | Initializes a new instance of the <see cref="T:HttpServer.HttpServer"/> class. | 3826 | Clean up context. |
3712 | </summary> | 3827 | </summary> |
3828 | <remarks> | ||
3829 | Make sure to call base.Cleanup() if you override the method. | ||
3830 | </remarks> | ||
3713 | </member> | 3831 | </member> |
3714 | <member name="M:HttpServer.HttpServer.#ctor(HttpServer.FormDecoders.FormDecoderProvider)"> | 3832 | <member name="M:HttpServer.HttpClientContext.Disconnect(System.Net.Sockets.SocketError)"> |
3715 | <summary> | 3833 | <summary> |
3716 | Initializes a new instance of the <see cref="T:HttpServer.HttpServer"/> class. | 3834 | Disconnect from client |
3717 | </summary> | 3835 | </summary> |
3718 | <param name="decoderProvider">Form decoders are used to convert different types of posted data to the <see cref="T:HttpServer.HttpInput"/> object types.</param> | 3836 | <param name="error">error to report in the <see cref="E:HttpServer.HttpClientContext.Disconnected"/> event.</param> |
3719 | <seealso cref="T:HttpServer.FormDecoders.IFormDecoder"/> | ||
3720 | <seealso cref="P:HttpServer.HttpServer.FormDecoderProviders"/> | ||
3721 | </member> | 3837 | </member> |
3722 | <member name="M:HttpServer.HttpServer.#ctor(HttpServer.Sessions.IHttpSessionStore)"> | 3838 | <member name="M:HttpServer.HttpClientContext.Respond(System.String,System.Net.HttpStatusCode,System.String,System.String,System.String)"> |
3723 | <summary> | 3839 | <summary> |
3724 | Initializes a new instance of the <see cref="T:HttpServer.HttpServer"/> class. | 3840 | Send a response. |
3725 | </summary> | 3841 | </summary> |
3726 | <param name="sessionStore">A session store is used to save and retrieve sessions</param> | 3842 | <param name="httpVersion">Either <see cref="F:HttpServer.HttpHelper.HTTP10"/> or <see cref="F:HttpServer.HttpHelper.HTTP11"/></param> |
3727 | <seealso cref="T:HttpServer.Sessions.IHttpSessionStore"/> | 3843 | <param name="statusCode">HTTP status code</param> |
3844 | <param name="reason">reason for the status code.</param> | ||
3845 | <param name="body">HTML body contents, can be null or empty.</param> | ||
3846 | <param name="contentType">A content type to return the body as, i.e. 'text/html' or 'text/plain', defaults to 'text/html' if null or empty</param> | ||
3847 | <exception cref="T:System.ArgumentException">If <paramref name="httpVersion"/> is invalid.</exception> | ||
3728 | </member> | 3848 | </member> |
3729 | <member name="M:HttpServer.HttpServer.#ctor(HttpServer.ILogWriter)"> | 3849 | <member name="M:HttpServer.HttpClientContext.Respond(System.String,System.Net.HttpStatusCode,System.String)"> |
3730 | <summary> | 3850 | <summary> |
3731 | Initializes a new instance of the <see cref="T:HttpServer.HttpServer"/> class. | 3851 | Send a response. |
3732 | </summary> | 3852 | </summary> |
3733 | <param name="logWriter">The log writer.</param> | 3853 | <param name="httpVersion">Either <see cref="F:HttpServer.HttpHelper.HTTP10"/> or <see cref="F:HttpServer.HttpHelper.HTTP11"/></param> |
3734 | <seealso cref="P:HttpServer.HttpServer.LogWriter"/> | 3854 | <param name="statusCode">HTTP status code</param> |
3855 | <param name="reason">reason for the status code.</param> | ||
3735 | </member> | 3856 | </member> |
3736 | <member name="M:HttpServer.HttpServer.#ctor(HttpServer.FormDecoders.FormDecoderProvider,HttpServer.ILogWriter)"> | 3857 | <member name="M:HttpServer.HttpClientContext.Respond(System.String)"> |
3737 | <summary> | 3858 | <summary> |
3738 | Initializes a new instance of the <see cref="T:HttpServer.HttpServer"/> class. | 3859 | Send a response. |
3739 | </summary> | 3860 | </summary> |
3740 | <param name="decoderProvider">Form decoders are used to convert different types of posted data to the <see cref="T:HttpServer.HttpInput"/> object types.</param> | 3861 | <exception cref="T:System.ArgumentNullException"></exception> |
3741 | <param name="logWriter">The log writer.</param> | ||
3742 | <seealso cref="T:HttpServer.FormDecoders.IFormDecoder"/> | ||
3743 | <seealso cref="P:HttpServer.HttpServer.FormDecoderProviders"/> | ||
3744 | <seealso cref="P:HttpServer.HttpServer.LogWriter"/> | ||
3745 | </member> | 3862 | </member> |
3746 | <member name="M:HttpServer.HttpServer.#ctor(HttpServer.FormDecoders.FormDecoderProvider,HttpServer.Sessions.IHttpSessionStore,HttpServer.ILogWriter)"> | 3863 | <member name="M:HttpServer.HttpClientContext.Send(System.Byte[])"> |
3747 | <summary> | 3864 | <summary> |
3748 | Initializes a new instance of the <see cref="T:HttpServer.HttpServer"/> class. | 3865 | send a whole buffer |
3749 | </summary> | 3866 | </summary> |
3750 | <param name="decoderProvider">Form decoders are used to convert different types of posted data to the <see cref="T:HttpServer.HttpInput"/> object types.</param> | 3867 | <param name="buffer">buffer to send</param> |
3751 | <param name="sessionStore">A session store is used to save and retrieve sessions</param> | 3868 | <exception cref="T:System.ArgumentNullException"></exception> |
3752 | <param name="logWriter">The log writer.</param> | ||
3753 | <seealso cref="T:HttpServer.FormDecoders.IFormDecoder"/> | ||
3754 | <seealso cref="P:HttpServer.HttpServer.FormDecoderProviders"/> | ||
3755 | <seealso cref="P:HttpServer.HttpServer.LogWriter"/> | ||
3756 | <seealso cref="T:HttpServer.Sessions.IHttpSessionStore"/> | ||
3757 | </member> | 3869 | </member> |
3758 | <member name="M:HttpServer.HttpServer.Add(HttpServer.Rules.IRule)"> | 3870 | <member name="M:HttpServer.HttpClientContext.Send(System.Byte[],System.Int32,System.Int32)"> |
3759 | <summary> | 3871 | <summary> |
3760 | Adds the specified rule. | 3872 | Send data using the stream |
3761 | </summary> | 3873 | </summary> |
3762 | <param name="rule">The rule.</param> | 3874 | <param name="buffer">Contains data to send</param> |
3875 | <param name="offset">Start position in buffer</param> | ||
3876 | <param name="size">number of bytes to send</param> | ||
3877 | <exception cref="T:System.ArgumentNullException"></exception> | ||
3878 | <exception cref="T:System.ArgumentOutOfRangeException"></exception> | ||
3763 | </member> | 3879 | </member> |
3764 | <member name="M:HttpServer.HttpServer.Add(HttpServer.HttpModules.HttpModule)"> | 3880 | <member name="E:HttpServer.HttpClientContext.Cleaned"> |
3765 | <summary> | 3881 | <summary> |
3766 | Add a <see cref="T:HttpServer.HttpModules.HttpModule"/> to the server. | 3882 | This context have been cleaned, which means that it can be reused. |
3767 | </summary> | 3883 | </summary> |
3768 | <param name="module">mode to add</param> | ||
3769 | </member> | 3884 | </member> |
3770 | <member name="M:HttpServer.HttpServer.DecodeBody(HttpServer.IHttpRequest)"> | 3885 | <member name="E:HttpServer.HttpClientContext.Started"> |
3771 | <summary> | 3886 | <summary> |
3772 | Decodes the request body. | 3887 | Context have been started (a new client have connected) |
3773 | </summary> | 3888 | </summary> |
3774 | <param name="request">The request.</param> | ||
3775 | <exception cref="T:HttpServer.Exceptions.InternalServerException">Failed to decode form data.</exception> | ||
3776 | </member> | 3889 | </member> |
3777 | <member name="M:HttpServer.HttpServer.ErrorPage(HttpServer.IHttpResponse,System.Net.HttpStatusCode,System.String)"> | 3890 | <member name="P:HttpServer.HttpClientContext.CurrentRequest"> |
3778 | <summary> | 3891 | <summary> |
3779 | Generate a HTTP error page (that will be added to the response body). | 3892 | Overload to specify own type. |
3780 | response status code is also set. | ||
3781 | </summary> | 3893 | </summary> |
3782 | <param name="response">Response that the page will be generated in.</param> | 3894 | <remarks> |
3783 | <param name="error"><see cref="T:System.Net.HttpStatusCode"/>.</param> | 3895 | Must be specified before the context is being used. |
3784 | <param name="body">response body contents.</param> | 3896 | </remarks> |
3785 | </member> | 3897 | </member> |
3786 | <member name="M:HttpServer.HttpServer.ErrorPage(HttpServer.IHttpResponse,HttpServer.Exceptions.HttpException)"> | 3898 | <member name="P:HttpServer.HttpClientContext.Secured"> |
3787 | <summary> | 3899 | <summary> |
3788 | Generate a HTTP error page (that will be added to the response body). | 3900 | Using SSL or other encryption method. |
3789 | response status code is also set. | ||
3790 | </summary> | 3901 | </summary> |
3791 | <param name="response">Response that the page will be generated in.</param> | ||
3792 | <param name="err">exception.</param> | ||
3793 | </member> | 3902 | </member> |
3794 | <member name="M:HttpServer.HttpServer.GetRealm(HttpServer.IHttpRequest)"> | 3903 | <member name="P:HttpServer.HttpClientContext.IsSecured"> |
3795 | <summary> | 3904 | <summary> |
3796 | Realms are used by the <see cref="T:HttpServer.Authentication.AuthenticationModule"/>s. | 3905 | Using SSL or other encryption method. |
3797 | </summary> | 3906 | </summary> |
3798 | <param name="request">HTTP request</param> | ||
3799 | <returns>domain/realm.</returns> | ||
3800 | </member> | 3907 | </member> |
3801 | <member name="M:HttpServer.HttpServer.HandleRequest(HttpServer.IHttpClientContext,HttpServer.IHttpRequest,HttpServer.IHttpResponse,HttpServer.Sessions.IHttpSession)"> | 3908 | <member name="P:HttpServer.HttpClientContext.LogWriter"> |
3802 | <summary> | 3909 | <summary> |
3803 | Process an incoming request. | 3910 | Specify which logger to use. |
3804 | </summary> | 3911 | </summary> |
3805 | <param name="context">connection to client</param> | ||
3806 | <param name="request">request information</param> | ||
3807 | <param name="response">response that should be filled</param> | ||
3808 | <param name="session">session information</param> | ||
3809 | </member> | 3912 | </member> |
3810 | <member name="M:HttpServer.HttpServer.OnClientDisconnected(HttpServer.IHttpClientContext,System.Net.Sockets.SocketError)"> | 3913 | <member name="P:HttpServer.HttpClientContext.Stream"> |
3811 | <summary> | 3914 | <summary> |
3812 | Can be overloaded to implement stuff when a client have been connected. | 3915 | Gets or sets the network stream. |
3813 | </summary> | 3916 | </summary> |
3814 | <remarks> | ||
3815 | Default implementation does nothing. | ||
3816 | </remarks> | ||
3817 | <param name="client">client that disconnected</param> | ||
3818 | <param name="error">disconnect reason</param> | ||
3819 | </member> | 3917 | </member> |
3820 | <member name="M:HttpServer.HttpServer.ProcessAuthentication(HttpServer.IHttpRequest,HttpServer.IHttpResponse,HttpServer.Sessions.IHttpSession)"> | 3918 | <member name="P:HttpServer.HttpClientContext.RemoteAddress"> |
3821 | <summary> | 3919 | <summary> |
3822 | Handle authentication | 3920 | Gets or sets IP address that the client connected from. |
3823 | </summary> | 3921 | </summary> |
3824 | <param name="request"></param> | ||
3825 | <param name="response"></param> | ||
3826 | <param name="session"></param> | ||
3827 | <returns>true if request can be handled; false if not.</returns> | ||
3828 | <exception cref="T:HttpServer.Exceptions.BadRequestException">Invalid authorization header</exception> | ||
3829 | </member> | 3922 | </member> |
3830 | <member name="M:HttpServer.HttpServer.RequestAuthentication(HttpServer.Authentication.AuthenticationModule,HttpServer.IHttpRequest,HttpServer.IHttpResponse)"> | 3923 | <member name="P:HttpServer.HttpClientContext.RemotePort"> |
3831 | <summary> | 3924 | <summary> |
3832 | Will request authentication. | 3925 | Gets or sets port that the client connected from. |
3926 | </summary> | ||
3927 | </member> | ||
3928 | <member name="E:HttpServer.HttpClientContext.Disconnected"> | ||
3929 | <summary> | ||
3930 | The context have been disconnected. | ||
3833 | </summary> | 3931 | </summary> |
3834 | <remarks> | 3932 | <remarks> |
3835 | Sends respond to client, nothing else can be done with the response after this. | 3933 | Event can be used to clean up a context, or to reuse it. |
3836 | </remarks> | 3934 | </remarks> |
3837 | <param name="mod"></param> | ||
3838 | <param name="request"></param> | ||
3839 | <param name="response"></param> | ||
3840 | </member> | 3935 | </member> |
3841 | <member name="M:HttpServer.HttpServer.OnRequest(System.Object,HttpServer.RequestEventArgs)"> | 3936 | <member name="E:HttpServer.HttpClientContext.RequestReceived"> |
3842 | <summary> | 3937 | <summary> |
3843 | Received from a <see cref="T:HttpServer.IHttpClientContext"/> when a request have been parsed successfully. | 3938 | A request have been received in the context. |
3844 | </summary> | 3939 | </summary> |
3845 | <param name="source"><see cref="T:HttpServer.IHttpClientContext"/> that received the request.</param> | ||
3846 | <param name="args">The request.</param> | ||
3847 | </member> | 3940 | </member> |
3848 | <member name="M:HttpServer.HttpServer.ProcessRequestWrapper(HttpServer.IHttpClientContext,HttpServer.IHttpRequest)"> | 3941 | <member name="T:HttpServer.Helpers.XmlHelper"> |
3849 | <summary> | 3942 | <summary> |
3850 | To be able to track request count. | 3943 | Helpers to make XML handling easier |
3851 | </summary> | 3944 | </summary> |
3852 | <param name="context"></param> | ||
3853 | <param name="request"></param> | ||
3854 | </member> | 3945 | </member> |
3855 | <member name="M:HttpServer.HttpServer.Start(System.Net.IPAddress,System.Int32)"> | 3946 | <member name="M:HttpServer.Helpers.XmlHelper.Serialize(System.Object)"> |
3856 | <summary> | 3947 | <summary> |
3857 | Start the web server using regular HTTP. | 3948 | Serializes object to XML. |
3858 | </summary> | 3949 | </summary> |
3859 | <param name="address">IP Address to listen on, use <c>IpAddress.Any </c>to accept connections on all IP addresses/network cards.</param> | 3950 | <param name="value">object to serialize.</param> |
3860 | <param name="port">Port to listen on. 80 can be a good idea =)</param> | 3951 | <returns>XML</returns> |
3861 | <exception cref="T:System.ArgumentNullException"><c>address</c> is null.</exception> | 3952 | <remarks> |
3862 | <exception cref="T:System.ArgumentException">Port must be a positive number.</exception> | 3953 | Removes name spaces and adds indentation |
3954 | </remarks> | ||
3863 | </member> | 3955 | </member> |
3864 | <member name="M:HttpServer.HttpServer.Start(System.Net.IPAddress,System.Int32,System.Security.Cryptography.X509Certificates.X509Certificate)"> | 3956 | <member name="M:HttpServer.Helpers.XmlHelper.Deserialize``1(System.String)"> |
3865 | <summary> | 3957 | <summary> |
3866 | Accept secure connections. | 3958 | Create an object from a XML string |
3867 | </summary> | 3959 | </summary> |
3868 | <param name="address">IP Address to listen on, use <see cref="F:System.Net.IPAddress.Any"/> to accept connections on all IP Addresses / network cards.</param> | 3960 | <typeparam name="T">Type of object</typeparam> |
3869 | <param name="port">Port to listen on. 80 can be a good idea =)</param> | 3961 | <param name="xml">XML string</param> |
3870 | <param name="certificate">Certificate to use</param> | 3962 | <returns>object</returns> |
3871 | <exception cref="T:System.ArgumentNullException"><c>address</c> is null.</exception> | ||
3872 | <exception cref="T:System.ArgumentException">Port must be a positive number.</exception> | ||
3873 | </member> | 3963 | </member> |
3874 | <member name="M:HttpServer.HttpServer.Stop"> | 3964 | <member name="M:HttpServer.FormDecoders.HttpMultipart.ReadLine"> |
3875 | <summary> | 3965 | <summary> |
3876 | shut down the server and listeners | 3966 | |
3877 | </summary> | 3967 | </summary> |
3968 | <returns></returns> | ||
3969 | <exception cref="T:System.ArgumentOutOfRangeException"></exception> | ||
3970 | <exception cref="T:System.ObjectDisposedException"></exception> | ||
3878 | </member> | 3971 | </member> |
3879 | <member name="M:HttpServer.HttpServer.WriteLog(HttpServer.LogPrio,System.String)"> | 3972 | <member name="T:HttpServer.FormDecoders.HttpMultipart.Element"> |
3973 | <summary>Represents a field in a multipart form</summary> | ||
3974 | </member> | ||
3975 | <member name="T:HttpServer.Check"> | ||
3880 | <summary> | 3976 | <summary> |
3881 | write an entry to the log file | 3977 | Small design by contract implementation. |
3882 | </summary> | 3978 | </summary> |
3883 | <param name="prio">importance of the message</param> | ||
3884 | <param name="message">log message</param> | ||
3885 | </member> | 3979 | </member> |
3886 | <member name="M:HttpServer.HttpServer.WriteLog(System.Object,HttpServer.LogPrio,System.String)"> | 3980 | <member name="M:HttpServer.Check.NotEmpty(System.String,System.String)"> |
3887 | <summary> | 3981 | <summary> |
3888 | write an entry to the log file | 3982 | Check whether a parameter is empty. |
3889 | </summary> | 3983 | </summary> |
3890 | <param name="source">object that wrote the message</param> | 3984 | <param name="value">Parameter value</param> |
3891 | <param name="prio">importance of the message</param> | 3985 | <param name="parameterOrErrorMessage">Parameter name, or error description.</param> |
3892 | <param name="message">log message</param> | 3986 | <exception cref="T:System.ArgumentException">value is empty.</exception> |
3893 | </member> | 3987 | </member> |
3894 | <member name="P:HttpServer.HttpServer.Current"> | 3988 | <member name="M:HttpServer.Check.Require(System.Object,System.String)"> |
3895 | <summary> | 3989 | <summary> |
3896 | Server that is handling the current request. | 3990 | Checks whether a parameter is null. |
3897 | </summary> | 3991 | </summary> |
3898 | <remarks> | 3992 | <param name="value">Parameter value</param> |
3899 | Will be set as soon as a request arrives to the <see cref="T:HttpServer.HttpServer"/> object. | 3993 | <param name="parameterOrErrorMessage">Parameter name, or error description.</param> |
3900 | </remarks> | 3994 | <exception cref="T:System.ArgumentNullException">value is null.</exception> |
3901 | </member> | 3995 | </member> |
3902 | <member name="P:HttpServer.HttpServer.AuthenticationModules"> | 3996 | <member name="M:HttpServer.Check.Min(System.Int32,System.Object,System.String)"> |
3903 | <summary> | 3997 | <summary> |
3904 | Modules used for authentication. The module that is is added first is used as | 3998 | Checks whether a parameter is null. |
3905 | the default authentication module. | ||
3906 | </summary> | 3999 | </summary> |
3907 | <remarks>Use the corresponding property | 4000 | <param name="minValue"></param> |
3908 | in the <see cref="T:HttpServer.HttpModules.WebSiteModule"/> if you are using multiple websites.</remarks> | 4001 | <param name="value">Parameter value</param> |
4002 | <param name="parameterOrErrorMessage">Parameter name, or error description.</param> | ||
4003 | <exception cref="T:System.ArgumentException">value is null.</exception> | ||
3909 | </member> | 4004 | </member> |
3910 | <member name="P:HttpServer.HttpServer.FormDecoderProviders"> | 4005 | <member name="T:HttpServer.LogPrio"> |
3911 | <summary> | 4006 | <summary> |
3912 | Form decoder providers are used to decode request body (which normally contains form data). | 4007 | Priority for log entries |
3913 | </summary> | 4008 | </summary> |
4009 | <seealso cref="T:HttpServer.ILogWriter"/> | ||
3914 | </member> | 4010 | </member> |
3915 | <member name="P:HttpServer.HttpServer.ServerName"> | 4011 | <member name="F:HttpServer.LogPrio.Trace"> |
3916 | <summary> | 4012 | <summary> |
3917 | Server name sent in HTTP responses. | 4013 | Very detailed logs to be able to follow the flow of the program. |
3918 | </summary> | 4014 | </summary> |
3919 | <remarks> | ||
3920 | Do NOT include version in name, since it makes it | ||
3921 | easier for hackers. | ||
3922 | </remarks> | ||
3923 | </member> | 4015 | </member> |
3924 | <member name="P:HttpServer.HttpServer.SessionCookieName"> | 4016 | <member name="F:HttpServer.LogPrio.Debug"> |
3925 | <summary> | 4017 | <summary> |
3926 | Name of cookie where session id is stored. | 4018 | Logs to help debug errors in the application |
3927 | </summary> | 4019 | </summary> |
3928 | </member> | 4020 | </member> |
3929 | <member name="P:HttpServer.HttpServer.LogWriter"> | 4021 | <member name="F:HttpServer.LogPrio.Info"> |
3930 | <summary> | 4022 | <summary> |
3931 | Specified where logging should go. | 4023 | Information to be able to keep track of state changes etc. |
3932 | </summary> | 4024 | </summary> |
3933 | <seealso cref="T:HttpServer.NullLogWriter"/> | ||
3934 | <seealso cref="T:HttpServer.ConsoleLogWriter"/> | ||
3935 | <seealso cref="P:HttpServer.HttpServer.LogWriter"/> | ||
3936 | </member> | 4025 | </member> |
3937 | <member name="P:HttpServer.HttpServer.BackLog"> | 4026 | <member name="F:HttpServer.LogPrio.Warning"> |
3938 | <summary> | 4027 | <summary> |
3939 | Number of connections that can wait to be accepted by the server. | 4028 | Something did not go as we expected, but it's no problem. |
3940 | </summary> | 4029 | </summary> |
3941 | <remarks>Default is 10.</remarks> | ||
3942 | </member> | 4030 | </member> |
3943 | <member name="P:HttpServer.HttpServer.MaxRequestCount"> | 4031 | <member name="F:HttpServer.LogPrio.Error"> |
3944 | <summary> | 4032 | <summary> |
3945 | Gets or sets maximum number of allowed simultaneous requests. | 4033 | Something that should not fail failed, but we can still keep |
4034 | on going. | ||
3946 | </summary> | 4035 | </summary> |
3947 | <remarks> | ||
3948 | <para> | ||
3949 | This property is useful in busy systems. The HTTP server | ||
3950 | will start queuing new requests if this limit is hit, instead | ||
3951 | of trying to process all incoming requests directly. | ||
3952 | </para> | ||
3953 | <para> | ||
3954 | The default number if allowed simultaneous requests are 10. | ||
3955 | </para> | ||
3956 | </remarks> | ||
3957 | </member> | 4036 | </member> |
3958 | <member name="P:HttpServer.HttpServer.MaxQueueSize"> | 4037 | <member name="F:HttpServer.LogPrio.Fatal"> |
3959 | <summary> | 4038 | <summary> |
3960 | Gets or sets maximum number of requests queuing to be handled. | 4039 | Something failed, and we cannot handle it properly. |
3961 | </summary> | 4040 | </summary> |
3962 | <remarks> | ||
3963 | <para> | ||
3964 | The WebServer will start turning requests away if response code | ||
3965 | <see cref="F:System.Net.HttpStatusCode.ServiceUnavailable"/> to indicate that the server | ||
3966 | is too busy to be able to handle the request. | ||
3967 | </para> | ||
3968 | </remarks> | ||
3969 | </member> | 4041 | </member> |
3970 | <member name="E:HttpServer.HttpServer.RealmWanted"> | 4042 | <member name="T:HttpServer.ILogWriter"> |
3971 | <summary> | 4043 | <summary> |
3972 | Realms are used during HTTP authentication. | 4044 | Interface used to write to log files. |
3973 | Default realm is same as server name. | ||
3974 | </summary> | 4045 | </summary> |
3975 | </member> | 4046 | </member> |
3976 | <member name="E:HttpServer.HttpServer.ExceptionThrown"> | 4047 | <member name="M:HttpServer.ILogWriter.Write(System.Object,HttpServer.LogPrio,System.String)"> |
3977 | <summary> | 4048 | <summary> |
3978 | Let's to receive unhandled exceptions from the threads. | 4049 | Write an entry to the log file. |
3979 | </summary> | 4050 | </summary> |
3980 | <remarks> | 4051 | <param name="source">object that is writing to the log</param> |
3981 | Exceptions will be thrown during debug mode if this event is not used, | 4052 | <param name="priority">importance of the log message</param> |
3982 | exceptions will be printed to console and suppressed during release mode. | 4053 | <param name="message">the message</param> |
3983 | </remarks> | ||
3984 | </member> | 4054 | </member> |
3985 | <member name="T:HttpServer.Exceptions.UnauthorizedException"> | 4055 | <member name="T:HttpServer.ConsoleLogWriter"> |
3986 | <summary> | 4056 | <summary> |
3987 | The request requires user authentication. The response MUST include a | 4057 | This class writes to the console. It colors the output depending on the logprio and includes a 3-level stacktrace (in debug mode) |
3988 | WWW-Authenticate header field (section 14.47) containing a challenge | ||
3989 | applicable to the requested resource. | ||
3990 | |||
3991 | The client MAY repeat the request with a suitable Authorization header | ||
3992 | field (section 14.8). If the request already included Authorization | ||
3993 | credentials, then the 401 response indicates that authorization has been | ||
3994 | refused for those credentials. If the 401 response contains the same challenge | ||
3995 | as the prior response, and the user agent has already attempted authentication | ||
3996 | at least once, then the user SHOULD be presented the entity that was given in the response, | ||
3997 | since that entity might include relevant diagnostic information. | ||
3998 | |||
3999 | HTTP access authentication is explained in rfc2617: | ||
4000 | http://www.ietf.org/rfc/rfc2617.txt | ||
4001 | |||
4002 | (description is taken from | ||
4003 | http://www.submissionchamber.com/help-guides/error-codes.php#sec10.4.2) | ||
4004 | </summary> | 4058 | </summary> |
4059 | <seealso cref="T:HttpServer.ILogWriter"/> | ||
4005 | </member> | 4060 | </member> |
4006 | <member name="M:HttpServer.Exceptions.UnauthorizedException.#ctor"> | 4061 | <member name="F:HttpServer.ConsoleLogWriter.Instance"> |
4007 | <summary> | 4062 | <summary> |
4008 | Create a new unauhtorized exception. | 4063 | The actual instance of this class. |
4009 | </summary> | 4064 | </summary> |
4010 | <seealso cref="T:HttpServer.Exceptions.UnauthorizedException"/> | ||
4011 | </member> | 4065 | </member> |
4012 | <member name="M:HttpServer.Exceptions.UnauthorizedException.#ctor(System.String,System.Exception)"> | 4066 | <member name="M:HttpServer.ConsoleLogWriter.Write(System.Object,HttpServer.LogPrio,System.String)"> |
4013 | <summary> | 4067 | <summary> |
4014 | Create a new unauhtorized exception. | 4068 | Logwriters the specified source. |
4015 | </summary> | 4069 | </summary> |
4016 | <param name="message">reason to why the request was unauthorized.</param> | 4070 | <param name="source">object that wrote the logentry.</param> |
4017 | <param name="inner">inner exception</param> | 4071 | <param name="prio">Importance of the log message</param> |
4072 | <param name="message">The message.</param> | ||
4018 | </member> | 4073 | </member> |
4019 | <member name="M:HttpServer.Exceptions.UnauthorizedException.#ctor(System.String)"> | 4074 | <member name="M:HttpServer.ConsoleLogWriter.GetColor(HttpServer.LogPrio)"> |
4020 | <summary> | 4075 | <summary> |
4021 | Create a new unauhtorized exception. | 4076 | Get color for the specified logprio |
4022 | </summary> | 4077 | </summary> |
4023 | <param name="message">reason to why the request was unauthorized.</param> | 4078 | <param name="prio">prio for the log entry</param> |
4079 | <returns>A <see cref="T:System.ConsoleColor"/> for the prio</returns> | ||
4024 | </member> | 4080 | </member> |
4025 | <member name="T:HttpServer.ContentType"> | 4081 | <member name="T:HttpServer.NullLogWriter"> |
4026 | <summary> | 4082 | <summary> |
4027 | Lists content type mime types. | 4083 | Default log writer, writes everything to null (nowhere). |
4028 | </summary> | 4084 | </summary> |
4085 | <seealso cref="T:HttpServer.ILogWriter"/> | ||
4029 | </member> | 4086 | </member> |
4030 | <member name="F:HttpServer.ContentType.Text"> | 4087 | <member name="F:HttpServer.NullLogWriter.Instance"> |
4031 | <summary> | 4088 | <summary> |
4032 | text/plain | 4089 | The logging instance. |
4033 | </summary> | 4090 | </summary> |
4034 | </member> | 4091 | </member> |
4035 | <member name="F:HttpServer.ContentType.Html"> | 4092 | <member name="M:HttpServer.NullLogWriter.Write(System.Object,HttpServer.LogPrio,System.String)"> |
4036 | <summary> | 4093 | <summary> |
4037 | text/haml | 4094 | Writes everything to null |
4038 | </summary> | 4095 | </summary> |
4096 | <param name="source">object that wrote the log entry.</param> | ||
4097 | <param name="prio">Importance of the log message</param> | ||
4098 | <param name="message">The message.</param> | ||
4039 | </member> | 4099 | </member> |
4040 | <member name="F:HttpServer.ContentType.Javascript"> | 4100 | <member name="T:HttpServer.HttpResponse"> |
4041 | <summary> | 4101 | <summary> |
4042 | content type for javascript documents = application/javascript | 4102 | Response that is sent back to the web browser / client. |
4043 | </summary> | 4103 | </summary> |
4044 | <remarks> | 4104 | <remarks> |
4045 | <para> | 4105 | <para> |
4046 | RFC 4329 states that text/javascript have been superseeded by | 4106 | A response can be sent if different ways. The easiest one is |
4047 | application/javascript. You might still want to check browser versions | 4107 | to just fill the Body stream with content, everything else |
4048 | since older ones do not support application/javascript. | 4108 | will then be taken care of by the framework. The default content-type |
4109 | is text/html, you should change it if you send anything else. | ||
4110 | </para><para> | ||
4111 | The second and slightly more complex way is to send the response | ||
4112 | as parts. Start with sending the header using the SendHeaders method and | ||
4113 | then you can send the body using SendBody method, but do not forget | ||
4114 | to set <see cref="P:HttpServer.HttpResponse.ContentType"/> and <see cref="P:HttpServer.HttpResponse.ContentLength"/> before doing so. | ||
4049 | </para> | 4115 | </para> |
4050 | <para>Browser support: http://krijnhoetmer.nl/stuff/javascript/mime-types/</para> | ||
4051 | </remarks> | 4116 | </remarks> |
4117 | <example> | ||
4118 | <code> | ||
4119 | // Example using response body. | ||
4120 | class MyModule : HttpModule | ||
4121 | { | ||
4122 | public override bool Process(IHttpRequest request, IHttpResponse response, IHttpSession session) | ||
4123 | { | ||
4124 | StreamWriter writer = new StreamWriter(response.Body); | ||
4125 | writer.WriteLine("Hello dear World!"); | ||
4126 | writer.Flush(); | ||
4127 | |||
4128 | // return true to tell webserver that we've handled the url | ||
4129 | return true; | ||
4130 | } | ||
4131 | } | ||
4132 | </code> | ||
4133 | </example> | ||
4134 | todo: add two examples, using SendHeaders/SendBody and just the Body stream. | ||
4052 | </member> | 4135 | </member> |
4053 | <member name="F:HttpServer.ContentType.Xml"> | 4136 | <member name="M:HttpServer.HttpResponse.#ctor(HttpServer.IHttpClientContext,HttpServer.IHttpRequest)"> |
4054 | <summary> | 4137 | <summary> |
4055 | text/xml | 4138 | Initializes a new instance of the <see cref="T:HttpServer.IHttpResponse"/> class. |
4056 | </summary> | 4139 | </summary> |
4140 | <param name="context">Client that send the <see cref="T:HttpServer.IHttpRequest"/>.</param> | ||
4141 | <param name="request">Contains information of what the client want to receive.</param> | ||
4142 | <exception cref="T:System.ArgumentException"><see cref="P:HttpServer.IHttpRequest.HttpVersion"/> cannot be empty.</exception> | ||
4057 | </member> | 4143 | </member> |
4058 | <member name="T:HttpServer.ContentTypes"> | 4144 | <member name="M:HttpServer.HttpResponse.#ctor(HttpServer.IHttpClientContext,System.String,HttpServer.ConnectionType)"> |
4059 | <summary> | 4145 | <summary> |
4060 | A list of content types | 4146 | Initializes a new instance of the <see cref="T:HttpServer.IHttpResponse"/> class. |
4061 | </summary> | 4147 | </summary> |
4148 | <param name="context">Client that send the <see cref="T:HttpServer.IHttpRequest"/>.</param> | ||
4149 | <param name="httpVersion">Version of HTTP protocol that the client uses.</param> | ||
4150 | <param name="connectionType">Type of HTTP connection used.</param> | ||
4062 | </member> | 4151 | </member> |
4063 | <member name="M:HttpServer.ContentTypes.#ctor(System.String)"> | 4152 | <member name="M:HttpServer.HttpResponse.AddHeader(System.String,System.String)"> |
4064 | <summary> | 4153 | <summary> |
4065 | 4154 | Add another header to the document. | |
4066 | </summary> | 4155 | </summary> |
4067 | <param name="types">Semicolon separated content types.</param> | 4156 | <param name="name">Name of the header, case sensitive, use lower cases.</param> |
4157 | <param name="value">Header values can span over multiple lines as long as each line starts with a white space. New line chars should be \r\n</param> | ||
4158 | <exception cref="T:System.InvalidOperationException">If headers already been sent.</exception> | ||
4159 | <exception cref="T:System.ArgumentException">If value conditions have not been met.</exception> | ||
4160 | <remarks>Adding any header will override the default ones and those specified by properties.</remarks> | ||
4068 | </member> | 4161 | </member> |
4069 | <member name="M:HttpServer.ContentTypes.GetEnumerator"> | 4162 | <member name="M:HttpServer.HttpResponse.Send"> |
4070 | <summary> | 4163 | <summary> |
4071 | Returns an enumerator that iterates through a collection. | 4164 | Send headers and body to the browser. |
4072 | </summary> | 4165 | </summary> |
4073 | <returns> | 4166 | <exception cref="T:System.InvalidOperationException">If content have already been sent.</exception> |
4074 | An <see cref="T:System.Collections.IEnumerator"/> object that can be used to iterate through the collection. | ||
4075 | </returns> | ||
4076 | </member> | 4167 | </member> |
4077 | <member name="M:HttpServer.ContentTypes.Contains(System.String)"> | 4168 | <member name="M:HttpServer.HttpResponse.SendBody(System.Byte[],System.Int32,System.Int32)"> |
4078 | <summary> | 4169 | <summary> |
4079 | Searches for the specified type | 4170 | Make sure that you have specified <see cref="P:HttpServer.HttpResponse.ContentLength"/> and sent the headers first. |
4080 | </summary> | 4171 | </summary> |
4081 | <param name="type">Can also be a part of a type (searching for "xml" would return true for "application/xml").</param> | 4172 | <param name="buffer"></param> |
4082 | <returns>true if type was found.</returns> | 4173 | <exception cref="T:System.InvalidOperationException">If headers have not been sent.</exception> |
4174 | <see cref="M:HttpServer.HttpResponse.SendHeaders"/> | ||
4175 | <param name="offset">offset of first byte to send</param> | ||
4176 | <param name="count">number of bytes to send.</param> | ||
4177 | <seealso cref="M:HttpServer.HttpResponse.Send"/> | ||
4178 | <seealso cref="M:HttpServer.HttpResponse.SendHeaders"/> | ||
4179 | <remarks>This method can be used if you want to send body contents without caching them first. This | ||
4180 | is recommended for larger files to keep the memory usage low.</remarks> | ||
4083 | </member> | 4181 | </member> |
4084 | <member name="P:HttpServer.ContentTypes.First"> | 4182 | <member name="M:HttpServer.HttpResponse.SendBody(System.Byte[])"> |
4085 | <summary> | 4183 | <summary> |
4086 | Get this first content type. | 4184 | Make sure that you have specified <see cref="P:HttpServer.HttpResponse.ContentLength"/> and sent the headers first. |
4087 | </summary> | 4185 | </summary> |
4186 | <param name="buffer"></param> | ||
4187 | <exception cref="T:System.InvalidOperationException">If headers have not been sent.</exception> | ||
4188 | <see cref="M:HttpServer.HttpResponse.SendHeaders"/> | ||
4189 | <seealso cref="M:HttpServer.HttpResponse.Send"/> | ||
4190 | <seealso cref="M:HttpServer.HttpResponse.SendHeaders"/> | ||
4191 | <remarks>This method can be used if you want to send body contents without caching them first. This | ||
4192 | is recommended for larger files to keep the memory usage low.</remarks> | ||
4088 | </member> | 4193 | </member> |
4089 | <member name="P:HttpServer.ContentTypes.Item(System.String)"> | 4194 | <member name="M:HttpServer.HttpResponse.SendHeaders"> |
4090 | <summary> | 4195 | <summary> |
4091 | Fetch a content type | 4196 | Send headers to the client. |
4092 | </summary> | 4197 | </summary> |
4093 | <param name="type">Part of type ("xml" would return "application/xml")</param> | 4198 | <exception cref="T:System.InvalidOperationException">If headers already been sent.</exception> |
4094 | <returns></returns> | 4199 | <seealso cref="M:HttpServer.HttpResponse.AddHeader(System.String,System.String)"/> |
4095 | <remarks>All content types are in lower case.</remarks> | 4200 | <seealso cref="M:HttpServer.HttpResponse.Send"/> |
4201 | <seealso cref="M:HttpServer.HttpResponse.SendBody(System.Byte[])"/> | ||
4096 | </member> | 4202 | </member> |
4097 | <member name="T:HttpServer.Sessions.MemorySessionStore"> | 4203 | <member name="M:HttpServer.HttpResponse.Redirect(System.Uri)"> |
4098 | <summary> | 4204 | <summary> |
4099 | Session store using memory for each session. | 4205 | Redirect client to somewhere else using the 302 status code. |
4100 | </summary> | 4206 | </summary> |
4207 | <param name="uri">Destination of the redirect</param> | ||
4208 | <exception cref="T:System.InvalidOperationException">If headers already been sent.</exception> | ||
4209 | <remarks>You can not do anything more with the request when a redirect have been done. This should be your last | ||
4210 | action.</remarks> | ||
4101 | </member> | 4211 | </member> |
4102 | <member name="M:HttpServer.Sessions.MemorySessionStore.#ctor"> | 4212 | <member name="M:HttpServer.HttpResponse.Redirect(System.String)"> |
4103 | <summary> | 4213 | <summary> |
4104 | Initializes the class setting the expirationtimer to clean the session every minute | 4214 | redirect to somewhere |
4105 | </summary> | 4215 | </summary> |
4216 | <param name="url">where the redirect should go</param> | ||
4217 | <remarks> | ||
4218 | No body are allowed when doing redirects. | ||
4219 | </remarks> | ||
4106 | </member> | 4220 | </member> |
4107 | <member name="M:HttpServer.Sessions.MemorySessionStore.Cleanup(System.Object)"> | 4221 | <member name="P:HttpServer.HttpResponse.Body"> |
4108 | <summary> | 4222 | <summary> |
4109 | Delegate for the cleanup timer | 4223 | The body stream is used to cache the body contents |
4224 | before sending everything to the client. It's the simplest | ||
4225 | way to serve documents. | ||
4110 | </summary> | 4226 | </summary> |
4111 | </member> | 4227 | </member> |
4112 | <member name="M:HttpServer.Sessions.MemorySessionStore.Create"> | 4228 | <member name="P:HttpServer.HttpResponse.Chunked"> |
4113 | <summary> | 4229 | <summary> |
4114 | Creates a new http session | 4230 | The chunked encoding modifies the body of a message in order to |
4231 | transfer it as a series of chunks, each with its own size indicator, | ||
4232 | followed by an OPTIONAL trailer containing entity-header fields. This | ||
4233 | allows dynamically produced content to be transferred along with the | ||
4234 | information necessary for the recipient to verify that it has | ||
4235 | received the full message. | ||
4115 | </summary> | 4236 | </summary> |
4116 | <returns></returns> | ||
4117 | </member> | 4237 | </member> |
4118 | <member name="M:HttpServer.Sessions.MemorySessionStore.Create(System.String)"> | 4238 | <member name="P:HttpServer.HttpResponse.ProtocolVersion"> |
4119 | <summary> | 4239 | <summary> |
4120 | Creates a new http session with a specific id | 4240 | Defines the version of the HTTP Response for applications where it's required |
4241 | for this to be forced. | ||
4121 | </summary> | 4242 | </summary> |
4122 | <param name="id">Id used to identify the new cookie..</param> | ||
4123 | <returns>A <see cref="T:HttpServer.Sessions.IHttpSession"/> object.</returns> | ||
4124 | <remarks> | ||
4125 | Id should be generated by the store implementation if it's null or <see cref="F:System.String.Empty"/>. | ||
4126 | </remarks> | ||
4127 | </member> | 4243 | </member> |
4128 | <member name="M:HttpServer.Sessions.MemorySessionStore.Load(System.String)"> | 4244 | <member name="P:HttpServer.HttpResponse.Connection"> |
4129 | <summary> | 4245 | <summary> |
4130 | Load an existing session. | 4246 | Kind of connection |
4131 | </summary> | 4247 | </summary> |
4132 | <param name="sessionId"></param> | ||
4133 | <returns></returns> | ||
4134 | </member> | 4248 | </member> |
4135 | <member name="M:HttpServer.Sessions.MemorySessionStore.Save(HttpServer.Sessions.IHttpSession)"> | 4249 | <member name="P:HttpServer.HttpResponse.Encoding"> |
4136 | <summary> | 4250 | <summary> |
4137 | Save an updated session to the store. | 4251 | Encoding to use when sending stuff to the client. |
4138 | </summary> | 4252 | </summary> |
4139 | <param name="session"></param> | 4253 | <remarks>Default is UTF8</remarks> |
4140 | </member> | 4254 | </member> |
4141 | <member name="M:HttpServer.Sessions.MemorySessionStore.AddUnused(HttpServer.Sessions.IHttpSession)"> | 4255 | <member name="P:HttpServer.HttpResponse.KeepAlive"> |
4142 | <summary> | 4256 | <summary> |
4143 | We use the flyweight pattern which reuses small objects | 4257 | Number of seconds to keep connection alive |
4144 | instead of creating new each time. | ||
4145 | </summary> | 4258 | </summary> |
4146 | <param name="session">EmptyLanguageNode (unused) session that should be reused next time Create is called.</param> | 4259 | <remarks>Only used if Connection property is set to <see cref="F:HttpServer.ConnectionType.KeepAlive"/>.</remarks> |
4147 | </member> | 4260 | </member> |
4148 | <member name="M:HttpServer.Sessions.MemorySessionStore.Cleanup"> | 4261 | <member name="P:HttpServer.HttpResponse.Status"> |
4149 | <summary> | 4262 | <summary> |
4150 | Remove expired sessions | 4263 | Status code that is sent to the client. |
4151 | </summary> | 4264 | </summary> |
4265 | <remarks>Default is <see cref="F:System.Net.HttpStatusCode.OK"/></remarks> | ||
4152 | </member> | 4266 | </member> |
4153 | <member name="M:HttpServer.Sessions.MemorySessionStore.Remove(System.String)"> | 4267 | <member name="P:HttpServer.HttpResponse.Reason"> |
4154 | <summary> | 4268 | <summary> |
4155 | Remove a session | 4269 | Information about why a specific status code was used. |
4156 | </summary> | 4270 | </summary> |
4157 | <param name="sessionId">id of the session.</param> | ||
4158 | </member> | 4271 | </member> |
4159 | <member name="P:HttpServer.Sessions.MemorySessionStore.Item(System.String)"> | 4272 | <member name="P:HttpServer.HttpResponse.ContentLength"> |
4160 | <summary> | 4273 | <summary> |
4161 | Load a session from the store | 4274 | Size of the body. MUST be specified before sending the header, |
4275 | unless property Chunked is set to true. | ||
4162 | </summary> | 4276 | </summary> |
4163 | <param name="sessionId"></param> | ||
4164 | <returns>null if session is not found.</returns> | ||
4165 | </member> | 4277 | </member> |
4166 | <member name="P:HttpServer.Sessions.MemorySessionStore.ExpireTime"> | 4278 | <member name="P:HttpServer.HttpResponse.ContentType"> |
4167 | <summary> | 4279 | <summary> |
4168 | Number of minutes before a session expires. | 4280 | Kind of content in the body |
4169 | Default is 20 minutes. | ||
4170 | </summary> | 4281 | </summary> |
4282 | <remarks>Default type is "text/html"</remarks> | ||
4171 | </member> | 4283 | </member> |
4172 | <member name="T:HttpServer.Helpers.WebHelper"> | 4284 | <member name="P:HttpServer.HttpResponse.HeadersSent"> |
4173 | <summary> | 4285 | <summary> |
4174 | Webhelper provides helpers for common tasks in HTML. | 4286 | Headers have been sent to the client- |
4175 | </summary> | 4287 | </summary> |
4288 | <remarks>You can not send any additional headers if they have already been sent.</remarks> | ||
4176 | </member> | 4289 | </member> |
4177 | <member name="F:HttpServer.Helpers.WebHelper.JSImplementation"> | 4290 | <member name="P:HttpServer.HttpResponse.Sent"> |
4178 | <summary> | 4291 | <summary> |
4179 | Used to let the website use different javascript libraries. | 4292 | The whole response have been sent. |
4180 | Default is <see cref="T:HttpServer.Helpers.Implementations.PrototypeImp"/> | ||
4181 | </summary> | 4293 | </summary> |
4182 | </member> | 4294 | </member> |
4183 | <member name="M:HttpServer.Helpers.WebHelper.AjaxRequest(System.String,System.String,System.String[])"> | 4295 | <member name="P:HttpServer.HttpResponse.Cookies"> |
4184 | <summary> | 4296 | <summary> |
4185 | Creates a link that invokes through ajax. | 4297 | Cookies that should be created/changed. |
4186 | </summary> | 4298 | </summary> |
4187 | <param name="url">url to fetch</param> | ||
4188 | <param name="title">link title</param> | ||
4189 | <param name="options"> | ||
4190 | optional options in format "key, value, key, value". | ||
4191 | Javascript options starts with ':'. | ||
4192 | </param> | ||
4193 | <returns>a link tag</returns> | ||
4194 | <example> | ||
4195 | WebHelper.AjaxRequest("/users/add/", "Add user", "method:", "post", "onclick", "validate('this');"); | ||
4196 | </example> | ||
4197 | </member> | 4299 | </member> |
4198 | <member name="M:HttpServer.Helpers.WebHelper.AjaxUpdater(System.String,System.String,System.String,System.String[])"> | 4300 | <member name="T:HttpServer.Exceptions.NotFoundException"> |
4199 | <summary> | 4301 | <summary> |
4200 | Builds a link that updates an element with the fetched ajax content. | 4302 | The requested resource was not found in the web server. |
4201 | </summary> | 4303 | </summary> |
4202 | <param name="url">Url to fetch content from</param> | ||
4203 | <param name="title">link title</param> | ||
4204 | <param name="targetId">html element to update with the results of the ajax request.</param> | ||
4205 | <param name="options">optional options in format "key, value, key, value"</param> | ||
4206 | <returns>A link tag.</returns> | ||
4207 | </member> | 4304 | </member> |
4208 | <member name="M:HttpServer.Helpers.WebHelper.DialogLink(System.String,System.String,System.String[])"> | 4305 | <member name="M:HttpServer.Exceptions.NotFoundException.#ctor(System.String,System.Exception)"> |
4209 | <summary> | 4306 | <summary> |
4210 | A link that pop ups a Dialog (overlay div) | 4307 | Create a new exception |
4211 | </summary> | 4308 | </summary> |
4212 | <param name="url">url to contents of dialog</param> | 4309 | <param name="message">message describing the error</param> |
4213 | <param name="title">link title</param> | 4310 | <param name="inner">inner exception</param> |
4214 | <param name="htmlAttributes">name/value of html attributes.</param> | ||
4215 | <returns>A "a"-tag that popups a dialog when clicked</returns> | ||
4216 | <example> | ||
4217 | WebHelper.DialogLink("/user/show/1", "show user", "onmouseover", "alert('booh!');"); | ||
4218 | </example> | ||
4219 | </member> | 4311 | </member> |
4220 | <member name="M:HttpServer.Helpers.WebHelper.CreateDialog(System.String,System.String,System.String[])"> | 4312 | <member name="M:HttpServer.Exceptions.NotFoundException.#ctor(System.String)"> |
4221 | <summary> | 4313 | <summary> |
4222 | Create/Open a dialog box using ajax | 4314 | Create a new exception |
4223 | </summary> | 4315 | </summary> |
4224 | <param name="url"></param> | 4316 | <param name="message">message describing the error</param> |
4225 | <param name="title"></param> | ||
4226 | <param name="parameters"></param> | ||
4227 | <returns></returns> | ||
4228 | </member> | 4317 | </member> |
4229 | <member name="M:HttpServer.Helpers.WebHelper.CloseDialog"> | 4318 | <member name="T:HttpServer.Sessions.MemorySessionStore"> |
4230 | <summary> | 4319 | <summary> |
4231 | Close a javascript dialog window/div. | 4320 | Session store using memory for each session. |
4232 | </summary> | 4321 | </summary> |
4233 | <returns>javascript for closing a dialog.</returns> | ||
4234 | <see cref="M:HttpServer.Helpers.WebHelper.DialogLink(System.String,System.String,System.String[])"/> | ||
4235 | </member> | 4322 | </member> |
4236 | <member name="M:HttpServer.Helpers.WebHelper.FormStart(System.String,System.String,System.Boolean)"> | 4323 | <member name="T:HttpServer.Sessions.IHttpSessionStore"> |
4237 | <summary> | 4324 | <summary> |
4238 | Create a <form> tag. | 4325 | A session store is used to store and load sessions on a media. |
4326 | The default implementation (<see cref="T:HttpServer.Sessions.MemorySessionStore"/>) saves/retrieves sessions from memory. | ||
4239 | </summary> | 4327 | </summary> |
4240 | <param name="name">name of form</param> | ||
4241 | <param name="action">action to invoke on submit</param> | ||
4242 | <param name="isAjax">form should be posted as ajax</param> | ||
4243 | <returns>html code</returns> | ||
4244 | <example> | ||
4245 | WebHelper.FormStart("frmLogin", "/user/login", Request.IsAjax); | ||
4246 | </example> | ||
4247 | </member> | 4328 | </member> |
4248 | <member name="M:HttpServer.Helpers.WebHelper.Link(System.String,System.String,System.String[])"> | 4329 | <member name="M:HttpServer.Sessions.IHttpSessionStore.Create"> |
4249 | <summary> | 4330 | <summary> |
4250 | Create a link tag. | 4331 | Creates a new http session with a generated id. |
4251 | </summary> | 4332 | </summary> |
4252 | <param name="url">url to go to</param> | 4333 | <returns>A <see cref="T:HttpServer.Sessions.IHttpSession"/> object</returns> |
4253 | <param name="title">link title (text that is displayed)</param> | ||
4254 | <param name="htmlAttributes">html attributes, name, value, name, value</param> | ||
4255 | <returns>html code</returns> | ||
4256 | <example> | ||
4257 | WebHelper.Link("/user/show/1", "Show user", "id", "showUser", "onclick", "return confirm('Are you shure?');"); | ||
4258 | </example> | ||
4259 | </member> | 4334 | </member> |
4260 | <member name="M:HttpServer.Helpers.WebHelper.BuildLink(System.String,System.String,System.String[])"> | 4335 | <member name="M:HttpServer.Sessions.IHttpSessionStore.Create(System.String)"> |
4261 | <summary> | 4336 | <summary> |
4262 | Build a link | 4337 | Creates a new http session with a specific id |
4263 | </summary> | 4338 | </summary> |
4264 | <param name="url">url to go to.</param> | 4339 | <param name="id">Id used to identify the new cookie..</param> |
4265 | <param name="title">title of link (displayed text)</param> | 4340 | <returns>A <see cref="T:HttpServer.Sessions.IHttpSession"/> object.</returns> |
4266 | <param name="htmlAttributes">extra html attributes.</param> | 4341 | <remarks> |
4267 | <returns>a complete link</returns> | 4342 | Id should be generated by the store implementation if it's null or <see cref="F:System.String.Empty"/>. |
4343 | </remarks> | ||
4268 | </member> | 4344 | </member> |
4269 | <member name="M:HttpServer.Helpers.WebHelper.BuildLink(System.String,System.String,System.String[],System.String[])"> | 4345 | <member name="M:HttpServer.Sessions.IHttpSessionStore.Load(System.String)"> |
4270 | <summary> | 4346 | <summary> |
4271 | Build a link | 4347 | Load an existing session. |
4272 | </summary> | 4348 | </summary> |
4273 | <param name="url">url to go to.</param> | 4349 | <param name="sessionId">Session id (usually retrieved from a client side cookie).</param> |
4274 | <param name="title">title of link (displayed text)</param> | 4350 | <returns>A session if found; otherwise null.</returns> |
4275 | <param name="htmlAttributes">extra html attributes.</param> | ||
4276 | <returns>a complete link</returns> | ||
4277 | <param name="options">more options</param> | ||
4278 | </member> | 4351 | </member> |
4279 | <member name="M:HttpServer.Helpers.WebHelper.Select(System.String,System.Collections.ICollection,HttpServer.Helpers.GetIdTitle,System.Object,System.Boolean)"> | 4352 | <member name="M:HttpServer.Sessions.IHttpSessionStore.Save(HttpServer.Sessions.IHttpSession)"> |
4280 | <summary> | 4353 | <summary> |
4281 | Obsolete | 4354 | Save an updated session to the store. |
4282 | </summary> | 4355 | </summary> |
4283 | <param name="name">Obsolete</param> | 4356 | <param name="session">Session id (usually retrieved from a client side cookie).</param> |
4284 | <param name="collection">Obsolete</param> | 4357 | <exception cref="T:System.ArgumentException">If Id property have not been specified.</exception> |
4285 | <param name="getIdTitle">Obsolete</param> | ||
4286 | <param name="selectedValue">Obsolete</param> | ||
4287 | <param name="firstEmpty">Obsolete</param> | ||
4288 | <returns>Obsolete</returns> | ||
4289 | </member> | 4358 | </member> |
4290 | <member name="M:HttpServer.Helpers.WebHelper.Select(System.String,System.String,System.Collections.ICollection,HttpServer.Helpers.GetIdTitle,System.Object,System.Boolean)"> | 4359 | <member name="M:HttpServer.Sessions.IHttpSessionStore.AddUnused(HttpServer.Sessions.IHttpSession)"> |
4291 | <summary> | 4360 | <summary> |
4292 | Obsolete | 4361 | We use the flyweight pattern which reuses small objects |
4362 | instead of creating new each time. | ||
4293 | </summary> | 4363 | </summary> |
4294 | <param name="name">Obsolete</param> | 4364 | <param name="session">Unused session that should be reused next time Create is called.</param> |
4295 | <param name="id">Obsolete</param> | ||
4296 | <param name="collection">Obsolete</param> | ||
4297 | <param name="getIdTitle">Obsolete</param> | ||
4298 | <param name="selectedValue">Obsolete</param> | ||
4299 | <param name="firstEmpty">Obsolete</param> | ||
4300 | <returns>Obsolete</returns> | ||
4301 | </member> | 4365 | </member> |
4302 | <member name="M:HttpServer.Helpers.WebHelper.List(System.Collections.Generic.IEnumerable{System.Object},System.String)"> | 4366 | <member name="M:HttpServer.Sessions.IHttpSessionStore.Cleanup"> |
4303 | <summary> | 4367 | <summary> |
4304 | Render errors into a UL with class "errors" | 4368 | Remove expired sessions |
4305 | </summary> | 4369 | </summary> |
4306 | <param name="className">class used by UL-tag.</param> | ||
4307 | <param name="theList">items to list</param> | ||
4308 | <returns>an unordered html list.</returns> | ||
4309 | </member> | 4370 | </member> |
4310 | <member name="M:HttpServer.Helpers.WebHelper.List(System.Collections.Specialized.NameValueCollection,System.String)"> | 4371 | <member name="M:HttpServer.Sessions.IHttpSessionStore.Remove(System.String)"> |
4311 | <summary> | 4372 | <summary> |
4312 | Render errors into a UL with class "errors" | 4373 | Remove a session |
4313 | </summary> | 4374 | </summary> |
4314 | <param name="className">class used by UL-tag.</param> | 4375 | <param name="sessionId">id of the session.</param> |
4315 | <param name="theList">items to list</param> | ||
4316 | <returns>an unordered html list.</returns> | ||
4317 | </member> | 4376 | </member> |
4318 | <member name="M:HttpServer.Helpers.WebHelper.Errors(System.Collections.Specialized.NameValueCollection)"> | 4377 | <member name="P:HttpServer.Sessions.IHttpSessionStore.Item(System.String)"> |
4319 | <summary> | 4378 | <summary> |
4320 | Render errors into a UL with class "errors" | 4379 | Load a session from the store |
4321 | </summary> | 4380 | </summary> |
4322 | <param name="errors"></param> | 4381 | <param name="sessionId"></param> |
4323 | <returns></returns> | 4382 | <returns>null if session is not found.</returns> |
4324 | </member> | 4383 | </member> |
4325 | <member name="M:HttpServer.Helpers.WebHelper.GenerateHtmlAttributes(System.Text.StringBuilder,System.String[],System.String[])"> | 4384 | <member name="P:HttpServer.Sessions.IHttpSessionStore.ExpireTime"> |
4326 | <summary> | 4385 | <summary> |
4327 | Generates a list with html attributes. | 4386 | Number of minutes before a session expires. |
4328 | </summary> | 4387 | </summary> |
4329 | <param name="sb">StringBuilder that the options should be added to.</param> | 4388 | <value>Default time is 20 minutes.</value> |
4330 | <param name="firstOptions">attributes set by user.</param> | ||
4331 | <param name="secondOptions">attributes set by any of the helper classes.</param> | ||
4332 | </member> | 4389 | </member> |
4333 | <member name="M:HttpServer.Helpers.WebHelper.GenerateHtmlAttributes(System.Text.StringBuilder,System.String[])"> | 4390 | <member name="M:HttpServer.Sessions.MemorySessionStore.#ctor"> |
4334 | <summary> | 4391 | <summary> |
4335 | Generates a list with html attributes. | 4392 | Initializes the class setting the expirationtimer to clean the session every minute |
4336 | </summary> | 4393 | </summary> |
4337 | <param name="sb">StringBuilder that the options should be added to.</param> | ||
4338 | <param name="options"></param> | ||
4339 | </member> | 4394 | </member> |
4340 | <member name="T:HttpServer.Helpers.JavascriptHelperImplementation"> | 4395 | <member name="M:HttpServer.Sessions.MemorySessionStore.Cleanup(System.Object)"> |
4341 | <summary> | 4396 | <summary> |
4342 | Purpose of this class is to create a javascript toolkit independent javascript helper. | 4397 | Delegate for the cleanup timer |
4343 | </summary> | 4398 | </summary> |
4344 | </member> | 4399 | </member> |
4345 | <member name="M:HttpServer.Helpers.JavascriptHelperImplementation.GenerateOptions(System.Text.StringBuilder,System.String[],System.Boolean)"> | 4400 | <member name="M:HttpServer.Sessions.MemorySessionStore.Create"> |
4346 | <summary> | 4401 | <summary> |
4347 | Generates a list with JS options. | 4402 | Creates a new http session |
4348 | </summary> | 4403 | </summary> |
4349 | <param name="sb">StringBuilder that the options should be added to.</param> | 4404 | <returns></returns> |
4350 | <param name="options">the javascript options. name, value pairs. each string value should be escaped by YOU!</param> | ||
4351 | <param name="startWithComma">true if we should start with a comma.</param> | ||
4352 | </member> | 4405 | </member> |
4353 | <member name="M:HttpServer.Helpers.JavascriptHelperImplementation.RemoveJavascriptOptions(System.String[])"> | 4406 | <member name="M:HttpServer.Sessions.MemorySessionStore.Create(System.String)"> |
4354 | <summary> | 4407 | <summary> |
4355 | Removes any javascript parameters from an array of parameters | 4408 | Creates a new http session with a specific id |
4356 | </summary> | 4409 | </summary> |
4357 | <param name="options">The array of parameters to remove javascript params from</param> | 4410 | <param name="id">Id used to identify the new cookie..</param> |
4358 | <returns>An array of html parameters</returns> | 4411 | <returns>A <see cref="T:HttpServer.Sessions.IHttpSession"/> object.</returns> |
4412 | <remarks> | ||
4413 | Id should be generated by the store implementation if it's null or <see cref="F:System.String.Empty"/>. | ||
4414 | </remarks> | ||
4359 | </member> | 4415 | </member> |
4360 | <member name="M:HttpServer.Helpers.JavascriptHelperImplementation.AjaxFormOnSubmit(System.String[])"> | 4416 | <member name="M:HttpServer.Sessions.MemorySessionStore.Load(System.String)"> |
4361 | <summary> | 4417 | <summary> |
4362 | javascript action that should be added to the "onsubmit" event in the form tag. | 4418 | Load an existing session. |
4363 | </summary> | 4419 | </summary> |
4420 | <param name="sessionId"></param> | ||
4364 | <returns></returns> | 4421 | <returns></returns> |
4365 | <remarks>All javascript option names should end with colon.</remarks> | ||
4366 | <example> | ||
4367 | <code> | ||
4368 | JSHelper.AjaxRequest("/user/show/1", "onsuccess:", "$('userInfo').update(result);"); | ||
4369 | </code> | ||
4370 | </example> | ||
4371 | </member> | 4422 | </member> |
4372 | <member name="M:HttpServer.Helpers.JavascriptHelperImplementation.AjaxRequest(System.String,System.String[])"> | 4423 | <member name="M:HttpServer.Sessions.MemorySessionStore.Save(HttpServer.Sessions.IHttpSession)"> |
4373 | <summary> | 4424 | <summary> |
4374 | Requests a url through ajax | 4425 | Save an updated session to the store. |
4375 | </summary> | 4426 | </summary> |
4376 | <param name="url">url to fetch</param> | 4427 | <param name="session"></param> |
4377 | <param name="options">optional options in format "key, value, key, value", used in JS request object.</param> | ||
4378 | <returns>a link tag</returns> | ||
4379 | <remarks>All javascript option names should end with colon.</remarks> | ||
4380 | <example> | ||
4381 | <code> | ||
4382 | JSHelper.AjaxRequest("/user/show/1", "onsuccess:", "$('userInfo').update(result);"); | ||
4383 | </code> | ||
4384 | </example> | ||
4385 | </member> | 4428 | </member> |
4386 | <member name="M:HttpServer.Helpers.JavascriptHelperImplementation.AjaxUpdater(System.String,System.String,System.String[])"> | 4429 | <member name="M:HttpServer.Sessions.MemorySessionStore.AddUnused(HttpServer.Sessions.IHttpSession)"> |
4387 | <summary> | 4430 | <summary> |
4388 | Ajax requests that updates an element with | 4431 | We use the flyweight pattern which reuses small objects |
4389 | the fetched content | 4432 | instead of creating new each time. |
4390 | </summary> | 4433 | </summary> |
4391 | <param name="url">Url to fetch content from</param> | 4434 | <param name="session">EmptyLanguageNode (unused) session that should be reused next time Create is called.</param> |
4392 | <param name="targetId">element to update</param> | ||
4393 | <param name="options">optional options in format "key, value, key, value", used in JS updater object.</param> | ||
4394 | <returns>A link tag.</returns> | ||
4395 | <remarks>All javascript option names should end with colon.</remarks> | ||
4396 | <example> | ||
4397 | <code> | ||
4398 | JSHelper.AjaxUpdater("/user/show/1", "userInfo", "onsuccess:", "alert('Successful!');"); | ||
4399 | </code> | ||
4400 | </example> | ||
4401 | </member> | 4435 | </member> |
4402 | <member name="M:HttpServer.Helpers.JavascriptHelperImplementation.DialogLink(System.String,System.String,System.String[])"> | 4436 | <member name="M:HttpServer.Sessions.MemorySessionStore.Cleanup"> |
4403 | <summary> | 4437 | <summary> |
4404 | A link that pop ups a Dialog (overlay div) | 4438 | Remove expired sessions |
4405 | </summary> | 4439 | </summary> |
4406 | <param name="url">url to contents of dialog</param> | ||
4407 | <param name="title">link title</param> | ||
4408 | <returns>A "a"-tag that popups a dialog when clicked</returns> | ||
4409 | <param name="htmlAttributes">name/value of html attributes</param> | ||
4410 | <example> | ||
4411 | WebHelper.DialogLink("/user/show/1", "show user", "onmouseover", "alert('booh!');"); | ||
4412 | </example> | ||
4413 | </member> | 4440 | </member> |
4414 | <member name="M:HttpServer.Helpers.JavascriptHelperImplementation.CloseDialog"> | 4441 | <member name="M:HttpServer.Sessions.MemorySessionStore.Remove(System.String)"> |
4415 | <summary> | 4442 | <summary> |
4416 | Close a javascript dialog window/div. | 4443 | Remove a session |
4417 | </summary> | 4444 | </summary> |
4418 | <returns>javascript for closing a dialog.</returns> | 4445 | <param name="sessionId">id of the session.</param> |
4419 | <see cref="M:HttpServer.Helpers.JavascriptHelperImplementation.DialogLink(System.String,System.String,System.String[])"/> | ||
4420 | </member> | 4446 | </member> |
4421 | <member name="M:HttpServer.Helpers.JavascriptHelperImplementation.CreateDialog(System.String,System.String,System.String[])"> | 4447 | <member name="P:HttpServer.Sessions.MemorySessionStore.Item(System.String)"> |
4422 | <summary> | 4448 | <summary> |
4423 | Creates a new modal dialog window | 4449 | Load a session from the store |
4424 | </summary> | 4450 | </summary> |
4425 | <param name="url">url to open in window.</param> | 4451 | <param name="sessionId"></param> |
4426 | <param name="title">window title (may not be supported by all js implementations)</param> | 4452 | <returns>null if session is not found.</returns> |
4427 | <param name="options"></param> | ||
4428 | <returns></returns> | ||
4429 | </member> | 4453 | </member> |
4430 | <member name="M:HttpServer.FormDecoders.HttpMultipart.ReadLine"> | 4454 | <member name="P:HttpServer.Sessions.MemorySessionStore.ExpireTime"> |
4431 | <summary> | 4455 | <summary> |
4432 | 4456 | Number of minutes before a session expires. | |
4457 | Default is 20 minutes. | ||
4433 | </summary> | 4458 | </summary> |
4434 | <returns></returns> | ||
4435 | <exception cref="T:System.ArgumentOutOfRangeException"></exception> | ||
4436 | <exception cref="T:System.ObjectDisposedException"></exception> | ||
4437 | </member> | 4459 | </member> |
4438 | <member name="T:HttpServer.FormDecoders.HttpMultipart.Element"> | 4460 | <member name="T:HttpServer.Sessions.HttpSessionClearedArgs"> |
4439 | <summary>Represents a field in a multipart form</summary> | ||
4440 | </member> | ||
4441 | <member name="T:HttpServer.Exceptions.BadRequestException"> | ||
4442 | <summary> | 4461 | <summary> |
4443 | The request could not be understood by the server due to malformed syntax. | 4462 | Arguments sent when a <see cref="T:HttpServer.Sessions.IHttpSession"/> is cleared |
4444 | The client SHOULD NOT repeat the request without modifications. | ||
4445 | |||
4446 | Text taken from: http://www.submissionchamber.com/help-guides/error-codes.php | ||
4447 | </summary> | 4463 | </summary> |
4448 | </member> | 4464 | </member> |
4449 | <member name="M:HttpServer.Exceptions.BadRequestException.#ctor(System.String)"> | 4465 | <member name="M:HttpServer.Sessions.HttpSessionClearedArgs.#ctor(System.Boolean)"> |
4450 | <summary> | 4466 | <summary> |
4451 | Create a new bad request exception. | 4467 | Instantiates the arguments for the event |
4452 | </summary> | 4468 | </summary> |
4453 | <param name="errMsg">reason to why the request was bad.</param> | 4469 | <param name="expired">True if the session is cleared due to expiration</param> |
4454 | </member> | 4470 | </member> |
4455 | <member name="M:HttpServer.Exceptions.BadRequestException.#ctor(System.String,System.Exception)"> | 4471 | <member name="P:HttpServer.Sessions.HttpSessionClearedArgs.Expired"> |
4456 | <summary> | 4472 | <summary> |
4457 | Create a new bad request exception. | 4473 | Returns true if the session is cleared due to expiration |
4458 | </summary> | 4474 | </summary> |
4459 | <param name="errMsg">reason to why the request was bad.</param> | ||
4460 | <param name="inner">inner exception</param> | ||
4461 | </member> | 4475 | </member> |
4462 | <member name="T:HttpServer.HttpFile"> | 4476 | <member name="T:HttpServer.Sessions.HttpSessionClearedHandler"> |
4463 | <summary> | 4477 | <summary> |
4464 | Container class for posted files | 4478 | Delegate for when a IHttpSession is cleared |
4465 | </summary> | 4479 | </summary> |
4480 | <param name="session"><see cref="T:HttpServer.Sessions.IHttpSession"/> this is being cleared.</param> | ||
4481 | <param name="args">Arguments for the clearing</param> | ||
4466 | </member> | 4482 | </member> |
4467 | <member name="M:HttpServer.HttpFile.#ctor(System.String,System.String,System.String,System.String)"> | 4483 | <member name="T:HttpServer.RequestQueue"> |
4468 | <summary> | 4484 | <summary> |
4469 | Creates a container for a posted file | 4485 | Used to queue incoming requests. |
4470 | </summary> | 4486 | </summary> |
4471 | <param name="name">The identifier of the post field</param> | ||
4472 | <param name="filename">The file path</param> | ||
4473 | <param name="contentType">The content type of the file</param> | ||
4474 | <param name="uploadFilename">The name of the file uploaded</param> | ||
4475 | <exception cref="T:System.ArgumentNullException">If any parameter is null or empty</exception> | ||
4476 | </member> | 4487 | </member> |
4477 | <member name="M:HttpServer.HttpFile.#ctor(System.String,System.String,System.String)"> | 4488 | <member name="M:HttpServer.RequestQueue.#ctor(HttpServer.ProcessRequestHandler)"> |
4478 | <summary> | 4489 | <summary> |
4479 | Creates a container for a posted file <see cref="M:HttpServer.HttpFile.#ctor(System.String,System.String,System.String,System.String)"/> | 4490 | Initializes a new instance of the <see cref="T:HttpServer.RequestQueue"/> class. |
4480 | </summary> | 4491 | </summary> |
4481 | <exception cref="T:System.ArgumentNullException">If any parameter is null or empty</exception> | 4492 | <param name="handler">Called when a request should be processed.</param> |
4482 | </member> | ||
4483 | <member name="M:HttpServer.HttpFile.Finalize"> | ||
4484 | <summary>Destructor disposing the file</summary> | ||
4485 | </member> | 4493 | </member> |
4486 | <member name="M:HttpServer.HttpFile.Dispose(System.Boolean)"> | 4494 | <member name="M:HttpServer.RequestQueue.QueueThread"> |
4487 | <summary> | 4495 | <summary> |
4488 | Deletes the temporary file | 4496 | Used to process queued requests. |
4489 | </summary> | 4497 | </summary> |
4490 | <param name="disposing">True if manual dispose</param> | ||
4491 | </member> | 4498 | </member> |
4492 | <member name="M:HttpServer.HttpFile.Dispose"> | 4499 | <member name="P:HttpServer.RequestQueue.MaxRequestCount"> |
4493 | <summary> | 4500 | <summary> |
4494 | Disposing interface, cleans up managed resources (the temporary file) and suppresses finalization | 4501 | Gets or sets maximum number of allowed simultaneous requests. |
4495 | </summary> | 4502 | </summary> |
4496 | </member> | 4503 | </member> |
4497 | <member name="P:HttpServer.HttpFile.Name"> | 4504 | <member name="P:HttpServer.RequestQueue.MaxQueueSize"> |
4498 | <summary> | 4505 | <summary> |
4499 | The name/id of the file | 4506 | Gets or sets maximum number of requests queuing to be handled. |
4500 | </summary> | 4507 | </summary> |
4501 | </member> | 4508 | </member> |
4502 | <member name="P:HttpServer.HttpFile.Filename"> | 4509 | <member name="P:HttpServer.RequestQueue.CurrentRequestCount"> |
4503 | <summary> | 4510 | <summary> |
4504 | The full file path | 4511 | Specifies how many requests the HTTP server is currently processing. |
4505 | </summary> | 4512 | </summary> |
4506 | </member> | 4513 | </member> |
4507 | <member name="P:HttpServer.HttpFile.UploadFilename"> | 4514 | <member name="T:HttpServer.RequestQueue.QueueItem"> |
4508 | <summary> | 4515 | <summary> |
4509 | The name of the uploaded file | 4516 | Used two queue incoming requests to avoid |
4517 | thread starvation. | ||
4510 | </summary> | 4518 | </summary> |
4511 | </member> | 4519 | </member> |
4512 | <member name="P:HttpServer.HttpFile.ContentType"> | 4520 | <member name="T:HttpServer.ProcessRequestHandler"> |
4513 | <summary> | 4521 | <summary> |
4514 | The type of file | 4522 | Method used to process a queued request |
4515 | </summary> | 4523 | </summary> |
4524 | <param name="context">Context that the request was received from.</param> | ||
4525 | <param name="request">Request to process.</param> | ||
4516 | </member> | 4526 | </member> |
4517 | <member name="T:HttpServer.Helpers.JSHelper"> | 4527 | <member name="T:HttpServer.Parser.HeaderEventArgs"> |
4518 | <summary> | 4528 | <summary> |
4519 | Will contain helper functions for javascript. | 4529 | Event arguments used when a new header have been parsed. |
4520 | </summary> | 4530 | </summary> |
4521 | </member> | 4531 | </member> |
4522 | <member name="M:HttpServer.Helpers.JSHelper.AjaxRequest(System.String,System.String[])"> | 4532 | <member name="M:HttpServer.Parser.HeaderEventArgs.#ctor(System.String,System.String)"> |
4523 | <summary> | 4533 | <summary> |
4524 | Requests a url through ajax | 4534 | Initializes a new instance of the <see cref="T:HttpServer.Parser.HeaderEventArgs"/> class. |
4525 | </summary> | 4535 | </summary> |
4526 | <param name="url">url to fetch. Url is NOT enclosed in quotes by the implementation. You need to do that yourself.</param> | 4536 | <param name="name">Name of header.</param> |
4527 | <param name="options">optional options in format "key, value, key, value", used in JS request object. All keys should end with colon.</param> | 4537 | <param name="value">Header value.</param> |
4528 | <returns>a link tag</returns> | ||
4529 | <remarks>onclick attribute is used by this method.</remarks> | ||
4530 | <example> | ||
4531 | <code> | ||
4532 | // plain text | ||
4533 | JSHelper.AjaxRequest("'/user/show/1'"); | ||
4534 | |||
4535 | // ajax request using this.href | ||
4536 | string link = "<a href=\"/user/call/1\" onclick=\"" + JSHelper.AjaxRequest("this.href") + "/<call user</a>"; | ||
4537 | </code> | ||
4538 | </example> | ||
4539 | </member> | 4538 | </member> |
4540 | <member name="M:HttpServer.Helpers.JSHelper.AjaxUpdater(System.String,System.String,System.String[])"> | 4539 | <member name="M:HttpServer.Parser.HeaderEventArgs.#ctor"> |
4541 | <summary> | 4540 | <summary> |
4542 | Ajax requests that updates an element with | 4541 | Initializes a new instance of the <see cref="T:HttpServer.Parser.HeaderEventArgs"/> class. |
4543 | the fetched content | ||
4544 | </summary> | 4542 | </summary> |
4545 | <param name="url">url to fetch. Url is NOT enclosed in quotes by the implementation. You need to do that yourself.</param> | ||
4546 | <param name="targetId">element to update</param> | ||
4547 | <param name="options">options in format "key, value, key, value". All keys should end with colon.</param> | ||
4548 | <returns>A link tag.</returns> | ||
4549 | <example> | ||
4550 | <code> | ||
4551 | JSHelper.AjaxUpdater("'/user/show/1'", "user", "onsuccess:", "alert('hello');", "asynchronous:", "true"); | ||
4552 | </code> | ||
4553 | </example> | ||
4554 | </member> | 4543 | </member> |
4555 | <member name="M:HttpServer.Helpers.JSHelper.CreateDialog(System.String,System.String,System.String[])"> | 4544 | <member name="P:HttpServer.Parser.HeaderEventArgs.Name"> |
4556 | <summary> | 4545 | <summary> |
4557 | Opens contents in a dialog window. | 4546 | Gets or sets header name. |
4558 | </summary> | 4547 | </summary> |
4559 | <param name="url">url to contents of dialog</param> | ||
4560 | <param name="title">link title</param> | ||
4561 | <param name="options">name, value, name, value, all parameter names should end with colon.</param> | ||
4562 | </member> | 4548 | </member> |
4563 | <member name="M:HttpServer.Helpers.JSHelper.CloseDialog"> | 4549 | <member name="P:HttpServer.Parser.HeaderEventArgs.Value"> |
4564 | <summary> | 4550 | <summary> |
4565 | Close a javascript dialog window/div. | 4551 | Gets or sets header value. |
4566 | </summary> | 4552 | </summary> |
4567 | <returns>javascript for closing a dialog.</returns> | ||
4568 | <see cref="M:HttpServer.Helpers.JSHelper.CreateDialog(System.String,System.String,System.String[])"/> | ||
4569 | </member> | 4553 | </member> |
4570 | <member name="T:HttpServer.HttpRequest"> | 4554 | <member name="T:HttpServer.HttpRequest"> |
4571 | <summary> | 4555 | <summary> |
@@ -4743,34 +4727,108 @@ | |||
4743 | Gets cookies that was sent with the request. | 4727 | Gets cookies that was sent with the request. |
4744 | </summary> | 4728 | </summary> |
4745 | </member> | 4729 | </member> |
4746 | <member name="T:HttpServer.HttpModules.WebSiteModule"> | 4730 | <member name="M:HttpServer.ComponentProvider.AddInstance``1(System.Object)"> |
4747 | <summary> | 4731 | <summary> |
4748 | The website module let's you handle multiple websites in the same server. | 4732 | Add a component instance |
4749 | It uses the "Host" header to check which site you want. | ||
4750 | </summary> | 4733 | </summary> |
4751 | <remarks>It's recommended that you do not | 4734 | <typeparam name="T">Interface type</typeparam> |
4752 | add any other modules to HttpServer if you are using the website module. Instead, | 4735 | <param name="instance">Instance to add</param> |
4753 | add all wanted modules to each website.</remarks> | ||
4754 | </member> | 4736 | </member> |
4755 | <member name="M:HttpServer.HttpModules.WebSiteModule.#ctor(System.String,System.String)"> | 4737 | <member name="M:HttpServer.ComponentProvider.Get``1"> |
4756 | <summary> | 4738 | <summary> |
4757 | 4739 | Get a component. | |
4758 | </summary> | 4740 | </summary> |
4759 | <param name="host">domain name that should be handled.</param> | 4741 | <typeparam name="T">Interface type</typeparam> |
4760 | <param name="name"></param> | 4742 | <returns>Component if registered, otherwise null.</returns> |
4743 | <remarks> | ||
4744 | Component will get created if needed. | ||
4745 | </remarks> | ||
4761 | </member> | 4746 | </member> |
4762 | <member name="M:HttpServer.HttpModules.WebSiteModule.Process(HttpServer.IHttpRequest,HttpServer.IHttpResponse,HttpServer.Sessions.IHttpSession)"> | 4747 | <member name="M:HttpServer.ComponentProvider.Create(HttpServer.ComponentProvider.TypeInformation)"> |
4748 | <exception cref="T:System.InvalidOperationException">If instance cannot be created.</exception> | ||
4749 | </member> | ||
4750 | <member name="M:HttpServer.ComponentProvider.Contains(System.Type)"> | ||
4763 | <summary> | 4751 | <summary> |
4764 | Method that process the url | 4752 | Checks if the specified component interface have been added. |
4765 | </summary> | 4753 | </summary> |
4766 | <param name="request">Information sent by the browser about the request</param> | 4754 | <param name="interfaceType"></param> |
4767 | <param name="response">Information that is being sent back to the client.</param> | 4755 | <returns>true if found; otherwise false.</returns> |
4768 | <param name="session">Session used to </param> | ||
4769 | </member> | 4756 | </member> |
4770 | <member name="P:HttpServer.HttpModules.WebSiteModule.SiteName"> | 4757 | <member name="M:HttpServer.ComponentProvider.Add``2"> |
4771 | <summary> | 4758 | <summary> |
4772 | Name of site. | 4759 | Add a component. |
4760 | </summary> | ||
4761 | <typeparam name="InterfaceType">Type being requested.</typeparam> | ||
4762 | <typeparam name="InstanceType">Type being created.</typeparam> | ||
4763 | <exception cref="T:System.InvalidOperationException">Type have already been mapped.</exception> | ||
4764 | </member> | ||
4765 | <member name="T:HttpServer.Rules.RegexRedirectRule"> | ||
4766 | <summary> | ||
4767 | Class to make dynamic binding of redirects. Instead of having to specify a number of similar redirect rules | ||
4768 | a regular expression can be used to identify redirect URLs and their targets. | ||
4769 | </summary> | ||
4770 | <example> | ||
4771 | <![CDATA[ | ||
4772 | new RegexRedirectRule("/(?<target>[a-z0-9]+)", "/users/${target}?find=true", RegexOptions.IgnoreCase) | ||
4773 | ]]> | ||
4774 | </example> | ||
4775 | </member> | ||
4776 | <member name="M:HttpServer.Rules.RegexRedirectRule.#ctor(System.String,System.String)"> | ||
4777 | <summary> | ||
4778 | Initializes a new instance of the <see cref="T:HttpServer.Rules.RegexRedirectRule"/> class. | ||
4779 | </summary> | ||
4780 | <param name="fromUrlExpression">Expression to match URL</param> | ||
4781 | <param name="toUrlExpression">Expression to generate URL</param> | ||
4782 | <example> | ||
4783 | <![CDATA[ | ||
4784 | server.Add(new RegexRedirectRule("/(?<first>[a-zA-Z0-9]+)", "/user/${first}")); | ||
4785 | Result of ie. /employee1 will then be /user/employee1 | ||
4786 | ]]> | ||
4787 | </example> | ||
4788 | </member> | ||
4789 | <member name="M:HttpServer.Rules.RegexRedirectRule.#ctor(System.String,System.String,System.Text.RegularExpressions.RegexOptions)"> | ||
4790 | <summary> | ||
4791 | Initializes a new instance of the <see cref="T:HttpServer.Rules.RegexRedirectRule"/> class. | ||
4792 | </summary> | ||
4793 | <param name="fromUrlExpression">Expression to match URL</param> | ||
4794 | <param name="toUrlExpression">Expression to generate URL</param> | ||
4795 | <param name="options">Regular expression options to use, can be null</param> | ||
4796 | <example> | ||
4797 | <![CDATA[ | ||
4798 | server.Add(new RegexRedirectRule("/(?<first>[a-zA-Z0-9]+)", "/user/{first}", RegexOptions.IgnoreCase)); | ||
4799 | Result of ie. /employee1 will then be /user/employee1 | ||
4800 | ]]> | ||
4801 | </example> | ||
4802 | </member> | ||
4803 | <member name="M:HttpServer.Rules.RegexRedirectRule.#ctor(System.String,System.String,System.Text.RegularExpressions.RegexOptions,System.Boolean)"> | ||
4804 | <summary> | ||
4805 | Initializes a new instance of the <see cref="T:HttpServer.Rules.RegexRedirectRule"/> class. | ||
4806 | </summary> | ||
4807 | <param name="fromUrlExpression">Expression to match URL</param> | ||
4808 | <param name="toUrlExpression">Expression to generate URL</param> | ||
4809 | <param name="options">Regular expression options to apply</param> | ||
4810 | <param name="shouldRedirect"><c>true</c> if request should be redirected, <c>false</c> if the request URI should be replaced.</param> | ||
4811 | <example> | ||
4812 | <![CDATA[ | ||
4813 | server.Add(new RegexRedirectRule("/(?<first>[a-zA-Z0-9]+)", "/user/${first}", RegexOptions.None)); | ||
4814 | Result of ie. /employee1 will then be /user/employee1 | ||
4815 | ]]> | ||
4816 | </example> | ||
4817 | <exception cref="T:System.ArgumentNullException">Argument is null.</exception> | ||
4818 | <seealso cref="P:HttpServer.Rules.RedirectRule.ShouldRedirect"/> | ||
4819 | </member> | ||
4820 | <member name="M:HttpServer.Rules.RegexRedirectRule.Process(HttpServer.IHttpRequest,HttpServer.IHttpResponse)"> | ||
4821 | <summary> | ||
4822 | Process the incoming request. | ||
4773 | </summary> | 4823 | </summary> |
4824 | <param name="request">incoming HTTP request</param> | ||
4825 | <param name="response">outgoing HTTP response</param> | ||
4826 | <returns>true if response should be sent to the browser directly (no other rules or modules will be processed).</returns> | ||
4827 | <remarks> | ||
4828 | returning true means that no modules will get the request. Returning true is typically being done | ||
4829 | for redirects. | ||
4830 | </remarks> | ||
4831 | <exception cref="T:System.ArgumentNullException">If request or response is null</exception> | ||
4774 | </member> | 4832 | </member> |
4775 | <member name="T:HttpServer.Helpers.ResourceInfo"> | 4833 | <member name="T:HttpServer.Helpers.ResourceInfo"> |
4776 | <summary> | 4834 | <summary> |
@@ -4812,30 +4870,6 @@ | |||
4812 | <member name="P:HttpServer.Helpers.ResourceInfo.ResourceName"> | 4870 | <member name="P:HttpServer.Helpers.ResourceInfo.ResourceName"> |
4813 | <summary>Retrieves the full path name to the resource file</summary> | 4871 | <summary>Retrieves the full path name to the resource file</summary> |
4814 | </member> | 4872 | </member> |
4815 | <member name="T:HttpServer.RequestParserFactory"> | ||
4816 | <summary> | ||
4817 | Creates request parsers when needed. | ||
4818 | </summary> | ||
4819 | </member> | ||
4820 | <member name="T:HttpServer.IRequestParserFactory"> | ||
4821 | <summary> | ||
4822 | Creates request parsers when needed. | ||
4823 | </summary> | ||
4824 | </member> | ||
4825 | <member name="M:HttpServer.IRequestParserFactory.CreateParser(HttpServer.ILogWriter)"> | ||
4826 | <summary> | ||
4827 | Create a new request parser. | ||
4828 | </summary> | ||
4829 | <param name="logWriter">Used when logging should be enabled.</param> | ||
4830 | <returns>A new request parser.</returns> | ||
4831 | </member> | ||
4832 | <member name="M:HttpServer.RequestParserFactory.CreateParser(HttpServer.ILogWriter)"> | ||
4833 | <summary> | ||
4834 | Create a new request parser. | ||
4835 | </summary> | ||
4836 | <param name="logWriter">Used when logging should be enabled.</param> | ||
4837 | <returns>A new request parser.</returns> | ||
4838 | </member> | ||
4839 | <member name="T:HttpServer.Authentication.BasicAuthentication"> | 4873 | <member name="T:HttpServer.Authentication.BasicAuthentication"> |
4840 | <summary> | 4874 | <summary> |
4841 | The "basic" authentication scheme is based on the model that the | 4875 | The "basic" authentication scheme is based on the model that the |
@@ -4921,533 +4955,499 @@ | |||
4921 | Adding bytes to body | 4955 | Adding bytes to body |
4922 | </summary> | 4956 | </summary> |
4923 | </member> | 4957 | </member> |
4924 | <member name="T:HttpServer.FormDecoders.XmlDecoder"> | 4958 | <member name="T:HttpServer.Helpers.JSHelper"> |
4925 | <summary> | ||
4926 | This decoder converts XML documents to form items. | ||
4927 | Each element becomes a subitem in the form, and each attribute becomes an item. | ||
4928 | </summary> | ||
4929 | <example> | ||
4930 | // xml: <hello id="1">something<world id="2">data</world></hello> | ||
4931 | // result: | ||
4932 | // form["hello"].Value = "something" | ||
4933 | // form["hello"]["id"].Value = 1 | ||
4934 | // form["hello"]["world]["id"].Value = 1 | ||
4935 | // form["hello"]["world"].Value = "data" | ||
4936 | </example> | ||
4937 | <remarks> | ||
4938 | The original xml document is stored in form["__xml__"].Value. | ||
4939 | </remarks> | ||
4940 | </member> | ||
4941 | <member name="M:HttpServer.FormDecoders.XmlDecoder.Decode(System.IO.Stream,System.String,System.Text.Encoding)"> | ||
4942 | <summary> | ||
4943 | |||
4944 | </summary> | ||
4945 | <param name="stream">Stream containing the content</param> | ||
4946 | <param name="contentType">Content type (with any additional info like boundry). Content type is always supplied in lower case</param> | ||
4947 | <param name="encoding">Stream encoding</param> | ||
4948 | Note: contentType and encoding are not used? | ||
4949 | <returns>A http form, or null if content could not be parsed.</returns> | ||
4950 | <exception cref="T:System.IO.InvalidDataException"></exception> | ||
4951 | </member> | ||
4952 | <member name="M:HttpServer.FormDecoders.XmlDecoder.TraverseNode(HttpServer.IHttpInput,System.Xml.XmlNode)"> | ||
4953 | <summary> | ||
4954 | Recursive function that will go through an xml element and store it's content | ||
4955 | to the form item. | ||
4956 | </summary> | ||
4957 | <param name="item">(parent) Item in form that content should be added to.</param> | ||
4958 | <param name="node">Node that should be parsed.</param> | ||
4959 | </member> | ||
4960 | <member name="M:HttpServer.FormDecoders.XmlDecoder.CanParse(System.String)"> | ||
4961 | <summary> | ||
4962 | Checks if the decoder can handle the mime type | ||
4963 | </summary> | ||
4964 | <param name="contentType">Content type (with any additional info like boundry). Content type is always supplied in lower case.</param> | ||
4965 | <returns>True if the decoder can parse the specified content type</returns> | ||
4966 | </member> | ||
4967 | <member name="T:HttpServer.ResponseCookies"> | ||
4968 | <summary> | ||
4969 | Cookies that should be set. | ||
4970 | </summary> | ||
4971 | </member> | ||
4972 | <member name="M:HttpServer.ResponseCookies.Add(HttpServer.ResponseCookie)"> | ||
4973 | <summary> | 4959 | <summary> |
4974 | Adds a cookie in the collection. | 4960 | Will contain helper functions for javascript. |
4975 | </summary> | 4961 | </summary> |
4976 | <param name="cookie">cookie to add</param> | ||
4977 | <exception cref="T:System.ArgumentNullException">cookie is null</exception> | ||
4978 | </member> | 4962 | </member> |
4979 | <member name="M:HttpServer.ResponseCookies.Add(HttpServer.RequestCookie,System.DateTime)"> | 4963 | <member name="M:HttpServer.Helpers.JSHelper.AjaxRequest(System.String,System.String[])"> |
4980 | <summary> | 4964 | <summary> |
4981 | Copy a request cookie | 4965 | Requests a url through ajax |
4982 | </summary> | 4966 | </summary> |
4983 | <param name="cookie"></param> | 4967 | <param name="url">url to fetch. Url is NOT enclosed in quotes by the implementation. You need to do that yourself.</param> |
4984 | <param name="expires">When the cookie should expire</param> | 4968 | <param name="options">optional options in format "key, value, key, value", used in JS request object. All keys should end with colon.</param> |
4969 | <returns>a link tag</returns> | ||
4970 | <remarks>onclick attribute is used by this method.</remarks> | ||
4971 | <example> | ||
4972 | <code> | ||
4973 | // plain text | ||
4974 | JSHelper.AjaxRequest("'/user/show/1'"); | ||
4975 | |||
4976 | // ajax request using this.href | ||
4977 | string link = "<a href=\"/user/call/1\" onclick=\"" + JSHelper.AjaxRequest("this.href") + "/<call user</a>"; | ||
4978 | </code> | ||
4979 | </example> | ||
4985 | </member> | 4980 | </member> |
4986 | <member name="M:HttpServer.ResponseCookies.GetEnumerator"> | 4981 | <member name="M:HttpServer.Helpers.JSHelper.AjaxUpdater(System.String,System.String,System.String[])"> |
4987 | <summary> | 4982 | <summary> |
4988 | Gets a collection enumerator on the cookie list. | 4983 | Ajax requests that updates an element with |
4984 | the fetched content | ||
4989 | </summary> | 4985 | </summary> |
4990 | <returns>collection enumerator</returns> | 4986 | <param name="url">url to fetch. Url is NOT enclosed in quotes by the implementation. You need to do that yourself.</param> |
4987 | <param name="targetId">element to update</param> | ||
4988 | <param name="options">options in format "key, value, key, value". All keys should end with colon.</param> | ||
4989 | <returns>A link tag.</returns> | ||
4990 | <example> | ||
4991 | <code> | ||
4992 | JSHelper.AjaxUpdater("'/user/show/1'", "user", "onsuccess:", "alert('hello');", "asynchronous:", "true"); | ||
4993 | </code> | ||
4994 | </example> | ||
4991 | </member> | 4995 | </member> |
4992 | <member name="M:HttpServer.ResponseCookies.Clear"> | 4996 | <member name="M:HttpServer.Helpers.JSHelper.CreateDialog(System.String,System.String,System.String[])"> |
4993 | <summary> | 4997 | <summary> |
4994 | Remove all cookies | 4998 | Opens contents in a dialog window. |
4995 | </summary> | 4999 | </summary> |
5000 | <param name="url">url to contents of dialog</param> | ||
5001 | <param name="title">link title</param> | ||
5002 | <param name="options">name, value, name, value, all parameter names should end with colon.</param> | ||
4996 | </member> | 5003 | </member> |
4997 | <member name="M:HttpServer.ResponseCookies.System#Collections#Generic#IEnumerable{HttpServer#ResponseCookie}#GetEnumerator"> | 5004 | <member name="M:HttpServer.Helpers.JSHelper.CloseDialog"> |
4998 | <summary> | 5005 | <summary> |
4999 | Returns an enumerator that iterates through the collection. | 5006 | Close a javascript dialog window/div. |
5000 | </summary> | 5007 | </summary> |
5001 | 5008 | <returns>javascript for closing a dialog.</returns> | |
5002 | <returns> | 5009 | <see cref="M:HttpServer.Helpers.JSHelper.CreateDialog(System.String,System.String,System.String[])"/> |
5003 | A <see cref="T:System.Collections.Generic.IEnumerator`1"></see> that can be used to iterate through the collection. | ||
5004 | </returns> | ||
5005 | <filterpriority>1</filterpriority> | ||
5006 | </member> | 5010 | </member> |
5007 | <member name="P:HttpServer.ResponseCookies.Count"> | 5011 | <member name="T:HttpServer.ContentType"> |
5008 | <summary> | 5012 | <summary> |
5009 | Gets the count of cookies in the collection. | 5013 | Lists content type mime types. |
5010 | </summary> | 5014 | </summary> |
5011 | </member> | 5015 | </member> |
5012 | <member name="P:HttpServer.ResponseCookies.Item(System.String)"> | 5016 | <member name="F:HttpServer.ContentType.Text"> |
5013 | <summary> | 5017 | <summary> |
5014 | Gets the cookie of a given identifier (null if not existing). | 5018 | text/plain |
5015 | </summary> | 5019 | </summary> |
5016 | </member> | 5020 | </member> |
5017 | <member name="T:HttpServer.RequestCookies"> | 5021 | <member name="F:HttpServer.ContentType.Html"> |
5018 | <summary> | 5022 | <summary> |
5019 | This class is created as a wrapper, since there are two different cookie types in .Net (Cookie and HttpCookie). | 5023 | text/haml |
5020 | The framework might switch class in the future and we dont want to have to replace all instances | ||
5021 | </summary> | 5024 | </summary> |
5022 | </member> | 5025 | </member> |
5023 | <member name="M:HttpServer.RequestCookies.#ctor(System.String)"> | 5026 | <member name="F:HttpServer.ContentType.Javascript"> |
5024 | <summary> | 5027 | <summary> |
5025 | Let's copy all the cookies. | 5028 | content type for javascript documents = application/javascript |
5026 | </summary> | 5029 | </summary> |
5027 | <param name="cookies">value from cookie header.</param> | 5030 | <remarks> |
5031 | <para> | ||
5032 | RFC 4329 states that text/javascript have been superseeded by | ||
5033 | application/javascript. You might still want to check browser versions | ||
5034 | since older ones do not support application/javascript. | ||
5035 | </para> | ||
5036 | <para>Browser support: http://krijnhoetmer.nl/stuff/javascript/mime-types/</para> | ||
5037 | </remarks> | ||
5028 | </member> | 5038 | </member> |
5029 | <member name="M:HttpServer.RequestCookies.Add(HttpServer.RequestCookie)"> | 5039 | <member name="F:HttpServer.ContentType.Xml"> |
5030 | <summary> | 5040 | <summary> |
5031 | Adds a cookie in the collection. | 5041 | text/xml |
5032 | </summary> | 5042 | </summary> |
5033 | <param name="cookie">cookie to add</param> | ||
5034 | <exception cref="T:System.ArgumentNullException">cookie is null</exception> | ||
5035 | </member> | 5043 | </member> |
5036 | <member name="M:HttpServer.RequestCookies.GetEnumerator"> | 5044 | <member name="T:HttpServer.ContentTypes"> |
5037 | <summary> | 5045 | <summary> |
5038 | Gets a collection enumerator on the cookie list. | 5046 | A list of content types |
5039 | </summary> | 5047 | </summary> |
5040 | <returns>collection enumerator</returns> | ||
5041 | </member> | 5048 | </member> |
5042 | <member name="M:HttpServer.RequestCookies.Clear"> | 5049 | <member name="M:HttpServer.ContentTypes.#ctor(System.String)"> |
5043 | <summary> | 5050 | <summary> |
5044 | Remove all cookies. | 5051 | |
5045 | </summary> | 5052 | </summary> |
5053 | <param name="types">Semicolon separated content types.</param> | ||
5046 | </member> | 5054 | </member> |
5047 | <member name="M:HttpServer.RequestCookies.System#Collections#Generic#IEnumerable{HttpServer#RequestCookie}#GetEnumerator"> | 5055 | <member name="M:HttpServer.ContentTypes.GetEnumerator"> |
5048 | <summary> | 5056 | <summary> |
5049 | Returns an enumerator that iterates through the collection. | 5057 | Returns an enumerator that iterates through a collection. |
5050 | </summary> | 5058 | </summary> |
5051 | |||
5052 | <returns> | 5059 | <returns> |
5053 | A <see cref="T:System.Collections.Generic.IEnumerator`1"></see> that can be used to iterate through the collection. | 5060 | An <see cref="T:System.Collections.IEnumerator"/> object that can be used to iterate through the collection. |
5054 | </returns> | 5061 | </returns> |
5055 | <filterpriority>1</filterpriority> | ||
5056 | </member> | 5062 | </member> |
5057 | <member name="M:HttpServer.RequestCookies.Remove(System.String)"> | 5063 | <member name="M:HttpServer.ContentTypes.Contains(System.String)"> |
5058 | <summary> | ||
5059 | Remove a cookie from the collection. | ||
5060 | </summary> | ||
5061 | <param name="cookieName">Name of cookie.</param> | ||
5062 | </member> | ||
5063 | <member name="P:HttpServer.RequestCookies.Count"> | ||
5064 | <summary> | ||
5065 | Gets the count of cookies in the collection. | ||
5066 | </summary> | ||
5067 | </member> | ||
5068 | <member name="P:HttpServer.RequestCookies.Item(System.String)"> | ||
5069 | <summary> | 5064 | <summary> |
5070 | Gets the cookie of a given identifier (null if not existing). | 5065 | Searches for the specified type |
5071 | </summary> | 5066 | </summary> |
5067 | <param name="type">Can also be a part of a type (searching for "xml" would return true for "application/xml").</param> | ||
5068 | <returns>true if type was found.</returns> | ||
5072 | </member> | 5069 | </member> |
5073 | <member name="T:HttpServer.HttpListener"> | 5070 | <member name="P:HttpServer.ContentTypes.First"> |
5074 | <summary> | 5071 | <summary> |
5075 | New implementation of the HTTP listener. | 5072 | Get this first content type. |
5076 | </summary> | 5073 | </summary> |
5077 | <remarks> | ||
5078 | Use the <c>Create</c> methods to create a default listener. | ||
5079 | </remarks> | ||
5080 | </member> | 5074 | </member> |
5081 | <member name="M:HttpServer.HttpListener.#ctor(System.Net.IPAddress,System.Int32,HttpServer.IHttpContextFactory)"> | 5075 | <member name="P:HttpServer.ContentTypes.Item(System.String)"> |
5082 | <summary> | 5076 | <summary> |
5083 | Initializes a new instance of the <see cref="T:HttpServer.HttpListener"/> class. | 5077 | Fetch a content type |
5084 | </summary> | 5078 | </summary> |
5085 | <param name="address">IP Address to accept connections on</param> | 5079 | <param name="type">Part of type ("xml" would return "application/xml")</param> |
5086 | <param name="port">TCP Port to listen on, default HTTP port is 80.</param> | 5080 | <returns></returns> |
5087 | <param name="factory">Factory used to create <see cref="T:HttpServer.IHttpClientContext"/>es.</param> | 5081 | <remarks>All content types are in lower case.</remarks> |
5088 | <exception cref="T:System.ArgumentNullException"><c>address</c> is null.</exception> | ||
5089 | <exception cref="T:System.ArgumentException">Port must be a positive number.</exception> | ||
5090 | </member> | 5082 | </member> |
5091 | <member name="M:HttpServer.HttpListener.#ctor(System.Net.IPAddress,System.Int32,HttpServer.IHttpContextFactory,System.Security.Cryptography.X509Certificates.X509Certificate)"> | 5083 | <member name="T:HttpServer.RequestParserFactory"> |
5092 | <summary> | 5084 | <summary> |
5093 | Initializes a new instance of the <see cref="T:HttpServer.HttpListener"/> class. | 5085 | Creates request parsers when needed. |
5094 | </summary> | 5086 | </summary> |
5095 | <param name="address">The address.</param> | ||
5096 | <param name="port">The port.</param> | ||
5097 | <param name="factory">The factory.</param> | ||
5098 | <param name="certificate">The certificate.</param> | ||
5099 | </member> | 5087 | </member> |
5100 | <member name="M:HttpServer.HttpListener.#ctor(System.Net.IPAddress,System.Int32,HttpServer.IHttpContextFactory,System.Security.Cryptography.X509Certificates.X509Certificate,System.Security.Authentication.SslProtocols)"> | 5088 | <member name="T:HttpServer.IRequestParserFactory"> |
5101 | <summary> | 5089 | <summary> |
5102 | Initializes a new instance of the <see cref="T:HttpServer.HttpListener"/> class. | 5090 | Creates request parsers when needed. |
5103 | </summary> | 5091 | </summary> |
5104 | <param name="address">The address.</param> | ||
5105 | <param name="port">The port.</param> | ||
5106 | <param name="factory">The factory.</param> | ||
5107 | <param name="certificate">The certificate.</param> | ||
5108 | <param name="protocol">The protocol.</param> | ||
5109 | </member> | 5092 | </member> |
5110 | <member name="M:HttpServer.HttpListener.Create(System.Net.IPAddress,System.Int32)"> | 5093 | <member name="M:HttpServer.IRequestParserFactory.CreateParser(HttpServer.ILogWriter)"> |
5111 | <summary> | 5094 | <summary> |
5112 | Creates a new <see cref="T:HttpServer.HttpListener"/> instance with default factories. | 5095 | Create a new request parser. |
5113 | </summary> | 5096 | </summary> |
5114 | <param name="address">Address that the listener should accept connections on.</param> | 5097 | <param name="logWriter">Used when logging should be enabled.</param> |
5115 | <param name="port">Port that listener should accept connections on.</param> | 5098 | <returns>A new request parser.</returns> |
5116 | <returns>Created HTTP listener.</returns> | ||
5117 | </member> | 5099 | </member> |
5118 | <member name="M:HttpServer.HttpListener.Create(System.Net.IPAddress,System.Int32,System.Security.Cryptography.X509Certificates.X509Certificate)"> | 5100 | <member name="M:HttpServer.RequestParserFactory.CreateParser(HttpServer.ILogWriter)"> |
5119 | <summary> | 5101 | <summary> |
5120 | Creates a new <see cref="T:HttpServer.HttpListener"/> instance with default factories. | 5102 | Create a new request parser. |
5121 | </summary> | 5103 | </summary> |
5122 | <param name="address">Address that the listener should accept connections on.</param> | 5104 | <param name="logWriter">Used when logging should be enabled.</param> |
5123 | <param name="port">Port that listener should accept connections on.</param> | 5105 | <returns>A new request parser.</returns> |
5124 | <param name="certificate">Certificate to use</param> | ||
5125 | <returns>Created HTTP listener.</returns> | ||
5126 | </member> | 5106 | </member> |
5127 | <member name="M:HttpServer.HttpListener.Create(System.Net.IPAddress,System.Int32,System.Security.Cryptography.X509Certificates.X509Certificate,System.Security.Authentication.SslProtocols)"> | 5107 | <member name="T:HttpServer.Exceptions.UnauthorizedException"> |
5128 | <summary> | 5108 | <summary> |
5129 | Creates a new <see cref="T:HttpServer.HttpListener"/> instance with default factories. | 5109 | The request requires user authentication. The response MUST include a |
5110 | WWW-Authenticate header field (section 14.47) containing a challenge | ||
5111 | applicable to the requested resource. | ||
5112 | |||
5113 | The client MAY repeat the request with a suitable Authorization header | ||
5114 | field (section 14.8). If the request already included Authorization | ||
5115 | credentials, then the 401 response indicates that authorization has been | ||
5116 | refused for those credentials. If the 401 response contains the same challenge | ||
5117 | as the prior response, and the user agent has already attempted authentication | ||
5118 | at least once, then the user SHOULD be presented the entity that was given in the response, | ||
5119 | since that entity might include relevant diagnostic information. | ||
5120 | |||
5121 | HTTP access authentication is explained in rfc2617: | ||
5122 | http://www.ietf.org/rfc/rfc2617.txt | ||
5123 | |||
5124 | (description is taken from | ||
5125 | http://www.submissionchamber.com/help-guides/error-codes.php#sec10.4.2) | ||
5130 | </summary> | 5126 | </summary> |
5131 | <param name="address">Address that the listener should accept connections on.</param> | ||
5132 | <param name="port">Port that listener should accept connections on.</param> | ||
5133 | <param name="certificate">Certificate to use</param> | ||
5134 | <param name="protocol">which HTTPS protocol to use, default is TLS.</param> | ||
5135 | <returns>Created HTTP listener.</returns> | ||
5136 | </member> | 5127 | </member> |
5137 | <member name="M:HttpServer.HttpListener.OnAcceptingSocket(System.Net.Sockets.Socket)"> | 5128 | <member name="M:HttpServer.Exceptions.UnauthorizedException.#ctor"> |
5138 | <summary> | 5129 | <summary> |
5139 | Can be used to create filtering of new connections. | 5130 | Create a new unauhtorized exception. |
5140 | </summary> | 5131 | </summary> |
5141 | <param name="socket">Accepted socket</param> | 5132 | <seealso cref="T:HttpServer.Exceptions.UnauthorizedException"/> |
5142 | <returns> | ||
5143 | true if connection can be accepted; otherwise false. | ||
5144 | </returns> | ||
5145 | </member> | 5133 | </member> |
5146 | <member name="E:HttpServer.HttpListener.Accepted"> | 5134 | <member name="M:HttpServer.Exceptions.UnauthorizedException.#ctor(System.String,System.Exception)"> |
5147 | <summary> | 5135 | <summary> |
5148 | A client have been accepted, but not handled, by the listener. | 5136 | Create a new unauhtorized exception. |
5149 | </summary> | 5137 | </summary> |
5138 | <param name="message">reason to why the request was unauthorized.</param> | ||
5139 | <param name="inner">inner exception</param> | ||
5150 | </member> | 5140 | </member> |
5151 | <member name="T:HttpServer.HttpHelper"> | 5141 | <member name="M:HttpServer.Exceptions.UnauthorizedException.#ctor(System.String)"> |
5152 | <summary> | 5142 | <summary> |
5153 | Generic helper functions for HTTP | 5143 | Create a new unauhtorized exception. |
5154 | </summary> | 5144 | </summary> |
5145 | <param name="message">reason to why the request was unauthorized.</param> | ||
5155 | </member> | 5146 | </member> |
5156 | <member name="F:HttpServer.HttpHelper.HTTP10"> | 5147 | <member name="T:HttpServer.HttpModules.FileModule"> |
5157 | <summary> | 5148 | <summary> |
5158 | Version string for HTTP v1.0 | 5149 | The purpose of this module is to serve files. |
5159 | </summary> | 5150 | </summary> |
5160 | </member> | 5151 | </member> |
5161 | <member name="F:HttpServer.HttpHelper.HTTP11"> | 5152 | <member name="M:HttpServer.HttpModules.FileModule.#ctor(System.String,System.String,System.Boolean)"> |
5162 | <summary> | 5153 | <summary> |
5163 | Version string for HTTP v1.1 | 5154 | Initializes a new instance of the <see cref="T:HttpServer.HttpModules.FileModule"/> class. |
5164 | </summary> | 5155 | </summary> |
5156 | <param name="baseUri">Uri to serve, for instance "/files/"</param> | ||
5157 | <param name="basePath">Path on hard drive where we should start looking for files</param> | ||
5158 | <param name="useLastModifiedHeader">If true a Last-Modifed header will be sent upon requests urging web browser to cache files</param> | ||
5165 | </member> | 5159 | </member> |
5166 | <member name="F:HttpServer.HttpHelper.EmptyUri"> | 5160 | <member name="M:HttpServer.HttpModules.FileModule.#ctor(System.String,System.String)"> |
5167 | <summary> | 5161 | <summary> |
5168 | An empty URI | 5162 | Initializes a new instance of the <see cref="T:HttpServer.HttpModules.FileModule"/> class. |
5169 | </summary> | 5163 | </summary> |
5164 | <param name="baseUri">Uri to serve, for instance "/files/"</param> | ||
5165 | <param name="basePath">Path on hard drive where we should start looking for files</param> | ||
5170 | </member> | 5166 | </member> |
5171 | <member name="M:HttpServer.HttpHelper.ParseQueryString(System.String)"> | 5167 | <member name="M:HttpServer.HttpModules.FileModule.AddDefaultMimeTypes"> |
5172 | <summary> | 5168 | <summary> |
5173 | Parses a query string. | 5169 | Mimtypes that this class can handle per default |
5174 | </summary> | 5170 | </summary> |
5175 | <param name="queryString">Query string (URI encoded)</param> | ||
5176 | <returns>A <see cref="T:HttpServer.HttpInput"/> object if successful; otherwise <see cref="F:HttpServer.HttpInput.Empty"/></returns> | ||
5177 | <exception cref="T:System.ArgumentNullException"><c>queryString</c> is null.</exception> | ||
5178 | <exception cref="T:System.FormatException">If string cannot be parsed.</exception> | ||
5179 | </member> | 5171 | </member> |
5180 | <member name="T:HttpServer.HttpModules.ReverseProxyModule"> | 5172 | <member name="M:HttpServer.HttpModules.FileModule.CanHandle(System.Uri)"> |
5181 | <summary> | 5173 | <summary> |
5182 | A reverse proxy are used to act as a bridge between local (protected/hidden) websites | 5174 | Determines if the request should be handled by this module. |
5183 | and public clients. | 5175 | Invoked by the <see cref="T:HttpServer.HttpServer"/> |
5184 | |||
5185 | A typical usage is to allow web servers on non standard ports to still be available | ||
5186 | to the public clients, or allow web servers on private ips to be available. | ||
5187 | </summary> | 5176 | </summary> |
5177 | <param name="uri"></param> | ||
5178 | <returns>true if this module should handle it.</returns> | ||
5188 | </member> | 5179 | </member> |
5189 | <member name="M:HttpServer.HttpModules.ReverseProxyModule.#ctor(System.String,System.String)"> | 5180 | <member name="M:HttpServer.HttpModules.FileModule.GetPath(System.Uri)"> |
5190 | <summary> | 5181 | <exception cref="T:HttpServer.Exceptions.BadRequestException">Illegal path</exception> |
5191 | |||
5192 | </summary> | ||
5193 | <param name="source">Base url requested from browser</param> | ||
5194 | <param name="destination">Base url on private web server</param> | ||
5195 | <example> | ||
5196 | // this will return contents from http://192.168.1.128/view/jonas when client requests http://www.gauffin.com/user/view/jonas | ||
5197 | _server.Add(new ReverseProxyModule("http://www.gauffin.com/user/", "http://192.168.1.128/"); | ||
5198 | </example> | ||
5199 | </member> | 5182 | </member> |
5200 | <member name="M:HttpServer.HttpModules.ReverseProxyModule.CanHandle(System.Uri)"> | 5183 | <member name="M:HttpServer.HttpModules.FileModule.Contains(System.String,System.Collections.Generic.IEnumerable{System.String})"> |
5201 | <summary> | 5184 | <summary> |
5202 | Method that determines if an url should be handled or not by the module | 5185 | check if source contains any of the chars. |
5203 | </summary> | 5186 | </summary> |
5204 | <param name="uri">Url requested by the client.</param> | 5187 | <param name="source"></param> |
5205 | <returns>true if module should handle the url.</returns> | 5188 | <param name="chars"></param> |
5189 | <returns></returns> | ||
5206 | </member> | 5190 | </member> |
5207 | <member name="M:HttpServer.HttpModules.ReverseProxyModule.Process(HttpServer.IHttpRequest,HttpServer.IHttpResponse,HttpServer.Sessions.IHttpSession)"> | 5191 | <member name="M:HttpServer.HttpModules.FileModule.Process(HttpServer.IHttpRequest,HttpServer.IHttpResponse,HttpServer.Sessions.IHttpSession)"> |
5208 | <summary> | 5192 | <summary> |
5209 | Method that process the url | 5193 | Method that process the Uri. |
5210 | </summary> | 5194 | </summary> |
5211 | <param name="request">Information sent by the browser about the request</param> | 5195 | <param name="request">Information sent by the browser about the request</param> |
5212 | <param name="response">Information that is being sent back to the client.</param> | 5196 | <param name="response">Information that is being sent back to the client.</param> |
5213 | <param name="session">Session used to </param> | 5197 | <param name="session">Session used to </param> |
5198 | <exception cref="T:HttpServer.Exceptions.InternalServerException">Failed to find file extension</exception> | ||
5199 | <exception cref="T:HttpServer.Exceptions.ForbiddenException">File type is forbidden.</exception> | ||
5214 | </member> | 5200 | </member> |
5215 | <member name="T:HttpServer.HttpModules.HttpModuleExceptionEventArgs"> | 5201 | <member name="M:HttpServer.HttpModules.FileModule.GetFileExtension(System.String)"> |
5216 | <summary> | 5202 | <summary> |
5217 | Used to inform http server that | 5203 | return a file extension from an absolute Uri path (or plain filename) |
5218 | </summary> | 5204 | </summary> |
5205 | <param name="uri"></param> | ||
5206 | <returns></returns> | ||
5219 | </member> | 5207 | </member> |
5220 | <member name="M:HttpServer.HttpModules.HttpModuleExceptionEventArgs.#ctor(System.Exception)"> | 5208 | <member name="P:HttpServer.HttpModules.FileModule.MimeTypes"> |
5221 | <summary> | 5209 | <summary> |
5222 | Eventarguments used when an exception is thrown by a module | 5210 | List with all mime-type that are allowed. |
5223 | </summary> | 5211 | </summary> |
5224 | <param name="e">the exception</param> | 5212 | <remarks>All other mime types will result in a Forbidden http status code.</remarks> |
5225 | </member> | 5213 | </member> |
5226 | <member name="P:HttpServer.HttpModules.HttpModuleExceptionEventArgs.Exception"> | 5214 | <member name="P:HttpServer.HttpModules.FileModule.ForbiddenChars"> |
5227 | <summary> | 5215 | <summary> |
5228 | Exception thrown in a module | 5216 | characters that may not exist in a path. |
5229 | </summary> | 5217 | </summary> |
5218 | <example> | ||
5219 | fileMod.ForbiddenChars = new string[]{ "\\", "..", ":" }; | ||
5220 | </example> | ||
5230 | </member> | 5221 | </member> |
5231 | <member name="T:HttpServer.Helpers.Implementations.PrototypeImp"> | 5222 | <member name="T:HttpServer.Helpers.WebHelper"> |
5232 | <summary> | 5223 | <summary> |
5233 | PrototypeJS implementation of the javascript functions. | 5224 | Webhelper provides helpers for common tasks in HTML. |
5234 | </summary> | 5225 | </summary> |
5235 | </member> | 5226 | </member> |
5236 | <member name="M:HttpServer.Helpers.Implementations.PrototypeImp.AjaxRequest(System.String,System.String[])"> | 5227 | <member name="F:HttpServer.Helpers.WebHelper.JSImplementation"> |
5237 | <summary> | 5228 | <summary> |
5238 | Requests a url through ajax | 5229 | Used to let the website use different javascript libraries. |
5230 | Default is <see cref="T:HttpServer.Helpers.Implementations.PrototypeImp"/> | ||
5239 | </summary> | 5231 | </summary> |
5240 | <param name="url">url to fetch. Url is NOT enclosed in quotes by the implementation. You need to do that yourself.</param> | ||
5241 | <param name="options">optional options in format "key, value, key, value", used in JS request object. All keys should end with colon.</param> | ||
5242 | <returns>a link tag</returns> | ||
5243 | <remarks>onclick attribute is used by this method.</remarks> | ||
5244 | <example> | ||
5245 | <code> | ||
5246 | // plain text | ||
5247 | JSHelper.AjaxRequest("'/user/show/1'"); | ||
5248 | |||
5249 | // ajax request using this.href | ||
5250 | string link = "<a href=\"/user/call/1\" onclick=\"" + JSHelper.AjaxRequest("this.href") + "/<call user</a>"; | ||
5251 | </code> | ||
5252 | </example> | ||
5253 | </member> | 5232 | </member> |
5254 | <member name="M:HttpServer.Helpers.Implementations.PrototypeImp.Contains(System.Collections.Generic.IEnumerable{System.String},System.String)"> | 5233 | <member name="M:HttpServer.Helpers.WebHelper.AjaxRequest(System.String,System.String,System.String[])"> |
5255 | <summary> | 5234 | <summary> |
5256 | Determins if a list of strings contains a specific value | 5235 | Creates a link that invokes through ajax. |
5257 | </summary> | 5236 | </summary> |
5258 | <param name="options">options to check in</param> | 5237 | <param name="url">url to fetch</param> |
5259 | <param name="value">value to find</param> | 5238 | <param name="title">link title</param> |
5260 | <returns>true if value was found</returns> | 5239 | <param name="options"> |
5261 | <remarks>case insensitive</remarks> | 5240 | optional options in format "key, value, key, value". |
5241 | Javascript options starts with ':'. | ||
5242 | </param> | ||
5243 | <returns>a link tag</returns> | ||
5244 | <example> | ||
5245 | WebHelper.AjaxRequest("/users/add/", "Add user", "method:", "post", "onclick", "validate('this');"); | ||
5246 | </example> | ||
5262 | </member> | 5247 | </member> |
5263 | <member name="M:HttpServer.Helpers.Implementations.PrototypeImp.AjaxUpdater(System.String,System.String,System.String[])"> | 5248 | <member name="M:HttpServer.Helpers.WebHelper.AjaxUpdater(System.String,System.String,System.String,System.String[])"> |
5264 | <summary> | 5249 | <summary> |
5265 | Ajax requests that updates an element with | 5250 | Builds a link that updates an element with the fetched ajax content. |
5266 | the fetched content | ||
5267 | </summary> | 5251 | </summary> |
5268 | <param name="url">URL to fetch. URL is NOT enclosed in quotes by the implementation. You need to do that yourself.</param> | 5252 | <param name="url">Url to fetch content from</param> |
5269 | <param name="targetId">element to update</param> | 5253 | <param name="title">link title</param> |
5270 | <param name="options">options in format "key, value, key, value". All keys should end with colon.</param> | 5254 | <param name="targetId">html element to update with the results of the ajax request.</param> |
5255 | <param name="options">optional options in format "key, value, key, value"</param> | ||
5271 | <returns>A link tag.</returns> | 5256 | <returns>A link tag.</returns> |
5272 | <example> | ||
5273 | <code> | ||
5274 | JSHelper.AjaxUpdater("'/user/show/1'", "user", "onsuccess:", "alert('hello');", "asynchronous:", "true"); | ||
5275 | </code> | ||
5276 | </example> | ||
5277 | </member> | 5257 | </member> |
5278 | <member name="M:HttpServer.Helpers.Implementations.PrototypeImp.DialogLink(System.String,System.String,System.String[])"> | 5258 | <member name="M:HttpServer.Helpers.WebHelper.DialogLink(System.String,System.String,System.String[])"> |
5279 | <summary> | 5259 | <summary> |
5280 | A link that pop ups a Dialog (overlay div) | 5260 | A link that pop ups a Dialog (overlay div) |
5281 | </summary> | 5261 | </summary> |
5282 | <param name="url">URL to contents of dialog</param> | 5262 | <param name="url">url to contents of dialog</param> |
5283 | <param name="title">link title</param> | 5263 | <param name="title">link title</param> |
5284 | <param name="htmlAttributes">name, value, name, value</param> | 5264 | <param name="htmlAttributes">name/value of html attributes.</param> |
5285 | <returns> | 5265 | <returns>A "a"-tag that popups a dialog when clicked</returns> |
5286 | A "a"-tag that popups a dialog when clicked | ||
5287 | </returns> | ||
5288 | <remarks><para>Requires Control.Modal found here: http://livepipe.net/projects/control_modal/</para> | ||
5289 | And the following JavaScript (load it in application.js): | ||
5290 | <code> | ||
5291 | Event.observe(window, 'load', | ||
5292 | function() { | ||
5293 | document.getElementsByClassName('modal').each(function(link){ new Control.Modal(link); }); | ||
5294 | } | ||
5295 | ); | ||
5296 | </code> | ||
5297 | </remarks> | ||
5298 | <example> | 5266 | <example> |
5299 | WebHelper.DialogLink("/user/show/1", "show user", "onmouseover", "alert('booh!');"); | 5267 | WebHelper.DialogLink("/user/show/1", "show user", "onmouseover", "alert('booh!');"); |
5300 | </example> | 5268 | </example> |
5301 | </member> | 5269 | </member> |
5302 | <member name="M:HttpServer.Helpers.Implementations.PrototypeImp.CreateDialog(System.String,System.String,System.String[])"> | 5270 | <member name="M:HttpServer.Helpers.WebHelper.CreateDialog(System.String,System.String,System.String[])"> |
5303 | <summary> | 5271 | <summary> |
5304 | create a modal dialog (usually using DIVs) | 5272 | Create/Open a dialog box using ajax |
5305 | </summary> | 5273 | </summary> |
5306 | <param name="url">url to fetch</param> | 5274 | <param name="url"></param> |
5307 | <param name="title">dialog title</param> | 5275 | <param name="title"></param> |
5308 | <param name="options">javascript/html attributes. javascript options ends with colon ':'.</param> | 5276 | <param name="parameters"></param> |
5309 | <returns></returns> | 5277 | <returns></returns> |
5310 | </member> | 5278 | </member> |
5311 | <member name="M:HttpServer.Helpers.Implementations.PrototypeImp.CloseDialog"> | 5279 | <member name="M:HttpServer.Helpers.WebHelper.CloseDialog"> |
5312 | <summary> | 5280 | <summary> |
5313 | Close a javascript dialog window/div. | 5281 | Close a javascript dialog window/div. |
5314 | </summary> | 5282 | </summary> |
5315 | <returns>javascript for closing a dialog.</returns> | 5283 | <returns>javascript for closing a dialog.</returns> |
5316 | <see cref="M:HttpServer.Helpers.Implementations.PrototypeImp.DialogLink(System.String,System.String,System.String[])"/> | 5284 | <see cref="M:HttpServer.Helpers.WebHelper.DialogLink(System.String,System.String,System.String[])"/> |
5317 | </member> | 5285 | </member> |
5318 | <member name="M:HttpServer.Helpers.Implementations.PrototypeImp.AjaxFormOnSubmit(System.String[])"> | 5286 | <member name="M:HttpServer.Helpers.WebHelper.FormStart(System.String,System.String,System.Boolean)"> |
5319 | <summary> | 5287 | <summary> |
5320 | javascript action that should be added to the "onsubmit" event in the form tag. | 5288 | Create a <form> tag. |
5321 | </summary> | 5289 | </summary> |
5322 | <param name="options">remember to encapsulate strings in ''</param> | 5290 | <param name="name">name of form</param> |
5323 | <returns></returns> | 5291 | <param name="action">action to invoke on submit</param> |
5324 | <remarks>All javascript option names should end with colon.</remarks> | 5292 | <param name="isAjax">form should be posted as ajax</param> |
5293 | <returns>html code</returns> | ||
5325 | <example> | 5294 | <example> |
5326 | <code> | 5295 | WebHelper.FormStart("frmLogin", "/user/login", Request.IsAjax); |
5327 | JSHelper.AjaxRequest("/user/show/1", "onsuccess:", "$('userInfo').update(result);"); | ||
5328 | </code> | ||
5329 | </example> | 5296 | </example> |
5330 | </member> | 5297 | </member> |
5331 | <member name="T:HttpServer.Authentication.DigestAuthentication"> | 5298 | <member name="M:HttpServer.Helpers.WebHelper.Link(System.String,System.String,System.String[])"> |
5332 | <summary> | ||
5333 | Implements HTTP Digest authentication. It's more secure than Basic auth since password is | ||
5334 | encrypted with a "key" from the server. | ||
5335 | </summary> | ||
5336 | <remarks> | ||
5337 | Keep in mind that the password is encrypted with MD5. Use a combination of SSL and digest auth to be secure. | ||
5338 | </remarks> | ||
5339 | </member> | ||
5340 | <member name="M:HttpServer.Authentication.DigestAuthentication.#ctor(HttpServer.Authentication.AuthenticationHandler,HttpServer.Authentication.AuthenticationRequiredHandler)"> | ||
5341 | <summary> | ||
5342 | Initializes a new instance of the <see cref="T:HttpServer.Authentication.DigestAuthentication"/> class. | ||
5343 | </summary> | ||
5344 | <param name="authenticator">Delegate used to provide information used during authentication.</param> | ||
5345 | <param name="authenticationRequiredHandler">Delegate used to determine if authentication is required (may be null).</param> | ||
5346 | </member> | ||
5347 | <member name="M:HttpServer.Authentication.DigestAuthentication.#ctor(HttpServer.Authentication.AuthenticationHandler)"> | ||
5348 | <summary> | ||
5349 | Initializes a new instance of the <see cref="T:HttpServer.Authentication.DigestAuthentication"/> class. | ||
5350 | </summary> | ||
5351 | <param name="authenticator">Delegate used to provide information used during authentication.</param> | ||
5352 | </member> | ||
5353 | <member name="F:HttpServer.Authentication.DigestAuthentication.DisableNonceCheck"> | ||
5354 | <summary> | 5299 | <summary> |
5355 | Used by test classes to be able to use hardcoded values | 5300 | Create a link tag. |
5356 | </summary> | 5301 | </summary> |
5302 | <param name="url">url to go to</param> | ||
5303 | <param name="title">link title (text that is displayed)</param> | ||
5304 | <param name="htmlAttributes">html attributes, name, value, name, value</param> | ||
5305 | <returns>html code</returns> | ||
5306 | <example> | ||
5307 | WebHelper.Link("/user/show/1", "Show user", "id", "showUser", "onclick", "return confirm('Are you shure?');"); | ||
5308 | </example> | ||
5357 | </member> | 5309 | </member> |
5358 | <member name="M:HttpServer.Authentication.DigestAuthentication.Authenticate(System.String,System.String,System.String,System.Object[])"> | 5310 | <member name="M:HttpServer.Helpers.WebHelper.BuildLink(System.String,System.String,System.String[])"> |
5359 | <summary> | 5311 | <summary> |
5360 | An authentication response have been received from the web browser. | 5312 | Build a link |
5361 | Check if it's correct | ||
5362 | </summary> | 5313 | </summary> |
5363 | <param name="authenticationHeader">Contents from the Authorization header</param> | 5314 | <param name="url">url to go to.</param> |
5364 | <param name="realm">Realm that should be authenticated</param> | 5315 | <param name="title">title of link (displayed text)</param> |
5365 | <param name="httpVerb">GET/POST/PUT/DELETE etc.</param> | 5316 | <param name="htmlAttributes">extra html attributes.</param> |
5366 | <param name="options">First option: true if username/password is correct but not cnonce</param> | 5317 | <returns>a complete link</returns> |
5367 | <returns> | ||
5368 | Authentication object that is stored for the request. A user class or something like that. | ||
5369 | </returns> | ||
5370 | <exception cref="T:System.ArgumentException">if authenticationHeader is invalid</exception> | ||
5371 | <exception cref="T:System.ArgumentNullException">If any of the paramters is empty or null.</exception> | ||
5372 | </member> | 5318 | </member> |
5373 | <member name="M:HttpServer.Authentication.DigestAuthentication.Encrypt(System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.String)"> | 5319 | <member name="M:HttpServer.Helpers.WebHelper.BuildLink(System.String,System.String,System.String[],System.String[])"> |
5374 | <summary> | 5320 | <summary> |
5375 | Encrypts parameters into a Digest string | 5321 | Build a link |
5376 | </summary> | 5322 | </summary> |
5377 | <param name="realm">Realm that the user want to log into.</param> | 5323 | <param name="url">url to go to.</param> |
5378 | <param name="userName">User logging in</param> | 5324 | <param name="title">title of link (displayed text)</param> |
5379 | <param name="password">Users password.</param> | 5325 | <param name="htmlAttributes">extra html attributes.</param> |
5380 | <param name="method">HTTP method.</param> | 5326 | <returns>a complete link</returns> |
5381 | <param name="uri">Uri/domain that generated the login prompt.</param> | 5327 | <param name="options">more options</param> |
5382 | <param name="qop">Quality of Protection.</param> | ||
5383 | <param name="nonce">"Number used ONCE"</param> | ||
5384 | <param name="nc">Hexadecimal request counter.</param> | ||
5385 | <param name="cnonce">"Client Number used ONCE"</param> | ||
5386 | <returns>Digest encrypted string</returns> | ||
5387 | </member> | 5328 | </member> |
5388 | <member name="M:HttpServer.Authentication.DigestAuthentication.Encrypt(System.String,System.String,System.String,System.String,System.String,System.String)"> | 5329 | <member name="M:HttpServer.Helpers.WebHelper.Select(System.String,System.Collections.ICollection,HttpServer.Helpers.GetIdTitle,System.Object,System.Boolean)"> |
5389 | <summary> | 5330 | <summary> |
5390 | 5331 | Obsolete | |
5391 | </summary> | 5332 | </summary> |
5392 | <param name="ha1">Md5 hex encoded "userName:realm:password", without the quotes.</param> | 5333 | <param name="name">Obsolete</param> |
5393 | <param name="ha2">Md5 hex encoded "method:uri", without the quotes</param> | 5334 | <param name="collection">Obsolete</param> |
5394 | <param name="qop">Quality of Protection</param> | 5335 | <param name="getIdTitle">Obsolete</param> |
5395 | <param name="nonce">"Number used ONCE"</param> | 5336 | <param name="selectedValue">Obsolete</param> |
5396 | <param name="nc">Hexadecimal request counter.</param> | 5337 | <param name="firstEmpty">Obsolete</param> |
5397 | <param name="cnonce">Client number used once</param> | 5338 | <returns>Obsolete</returns> |
5398 | <returns></returns> | ||
5399 | </member> | 5339 | </member> |
5400 | <member name="M:HttpServer.Authentication.DigestAuthentication.CreateResponse(System.String,System.Object[])"> | 5340 | <member name="M:HttpServer.Helpers.WebHelper.Select(System.String,System.String,System.Collections.ICollection,HttpServer.Helpers.GetIdTitle,System.Object,System.Boolean)"> |
5401 | <summary> | 5341 | <summary> |
5402 | Create a response that can be sent in the WWW-Authenticate header. | 5342 | Obsolete |
5403 | </summary> | 5343 | </summary> |
5404 | <param name="realm">Realm that the user should authenticate in</param> | 5344 | <param name="name">Obsolete</param> |
5405 | <param name="options">First options specifies if true if username/password is correct but not cnonce.</param> | 5345 | <param name="id">Obsolete</param> |
5406 | <returns>A correct auth request.</returns> | 5346 | <param name="collection">Obsolete</param> |
5407 | <exception cref="T:System.ArgumentNullException">If realm is empty or null.</exception> | 5347 | <param name="getIdTitle">Obsolete</param> |
5348 | <param name="selectedValue">Obsolete</param> | ||
5349 | <param name="firstEmpty">Obsolete</param> | ||
5350 | <returns>Obsolete</returns> | ||
5408 | </member> | 5351 | </member> |
5409 | <member name="M:HttpServer.Authentication.DigestAuthentication.Decode(System.String,System.Text.Encoding)"> | 5352 | <member name="M:HttpServer.Helpers.WebHelper.List(System.Collections.Generic.IEnumerable{System.Object},System.String)"> |
5410 | <summary> | 5353 | <summary> |
5411 | Decodes authorization header value | 5354 | Render errors into a UL with class "errors" |
5412 | </summary> | 5355 | </summary> |
5413 | <param name="buffer">header value</param> | 5356 | <param name="className">class used by UL-tag.</param> |
5414 | <param name="encoding">Encoding that the buffer is in</param> | 5357 | <param name="theList">items to list</param> |
5415 | <returns>All headers and their values if successful; otherwise null</returns> | 5358 | <returns>an unordered html list.</returns> |
5416 | <example> | ||
5417 | NameValueCollection header = DigestAuthentication.Decode("response=\"6629fae49393a05397450978507c4ef1\",\r\nc=00001", Encoding.ASCII); | ||
5418 | </example> | ||
5419 | <remarks>Can handle lots of whitespaces and new lines without failing.</remarks> | ||
5420 | </member> | 5359 | </member> |
5421 | <member name="M:HttpServer.Authentication.DigestAuthentication.GetCurrentNonce"> | 5360 | <member name="M:HttpServer.Helpers.WebHelper.List(System.Collections.Specialized.NameValueCollection,System.String)"> |
5422 | <summary> | 5361 | <summary> |
5423 | Gets the current nonce. | 5362 | Render errors into a UL with class "errors" |
5424 | </summary> | 5363 | </summary> |
5425 | <returns></returns> | 5364 | <param name="className">class used by UL-tag.</param> |
5365 | <param name="theList">items to list</param> | ||
5366 | <returns>an unordered html list.</returns> | ||
5426 | </member> | 5367 | </member> |
5427 | <member name="M:HttpServer.Authentication.DigestAuthentication.GetMD5HashBinHex2(System.String)"> | 5368 | <member name="M:HttpServer.Helpers.WebHelper.Errors(System.Collections.Specialized.NameValueCollection)"> |
5428 | <summary> | 5369 | <summary> |
5429 | Gets the Md5 hash bin hex2. | 5370 | Render errors into a UL with class "errors" |
5430 | </summary> | 5371 | </summary> |
5431 | <param name="toBeHashed">To be hashed.</param> | 5372 | <param name="errors"></param> |
5432 | <returns></returns> | 5373 | <returns></returns> |
5433 | </member> | 5374 | </member> |
5434 | <member name="M:HttpServer.Authentication.DigestAuthentication.IsValidNonce(System.String)"> | 5375 | <member name="M:HttpServer.Helpers.WebHelper.GenerateHtmlAttributes(System.Text.StringBuilder,System.String[],System.String[])"> |
5435 | <summary> | 5376 | <summary> |
5436 | determines if the nonce is valid or has expired. | 5377 | Generates a list with html attributes. |
5437 | </summary> | 5378 | </summary> |
5438 | <param name="nonce">nonce value (check wikipedia for info)</param> | 5379 | <param name="sb">StringBuilder that the options should be added to.</param> |
5439 | <returns>true if the nonce has not expired.</returns> | 5380 | <param name="firstOptions">attributes set by user.</param> |
5381 | <param name="secondOptions">attributes set by any of the helper classes.</param> | ||
5440 | </member> | 5382 | </member> |
5441 | <member name="P:HttpServer.Authentication.DigestAuthentication.Name"> | 5383 | <member name="M:HttpServer.Helpers.WebHelper.GenerateHtmlAttributes(System.Text.StringBuilder,System.String[])"> |
5442 | <summary> | 5384 | <summary> |
5443 | name used in http request. | 5385 | Generates a list with html attributes. |
5444 | </summary> | 5386 | </summary> |
5387 | <param name="sb">StringBuilder that the options should be added to.</param> | ||
5388 | <param name="options"></param> | ||
5445 | </member> | 5389 | </member> |
5446 | <member name="P:HttpServer.Authentication.DigestAuthentication.TokenIsHA1"> | 5390 | <member name="T:HttpServer.Helpers.GetIdTitle"> |
5447 | <summary> | 5391 | <summary> |
5448 | Gets or sets whether the token supplied in <see cref="T:HttpServer.Authentication.AuthenticationHandler"/> is a | 5392 | Delegate used by <see cref="M:HttpServer.Helpers.FormHelper.Select(System.String,System.Collections.IEnumerable,HttpServer.Helpers.GetIdTitle,System.Object,System.Boolean)"/> to populate select options. |
5449 | HA1 generated string. | ||
5450 | </summary> | 5393 | </summary> |
5394 | <param name="obj">current object (for instance a User).</param> | ||
5395 | <param name="id">Text that should be displayed in the value part of a <optiongt;-tag.</param> | ||
5396 | <param name="title">Text shown in the select list.</param> | ||
5397 | <example> | ||
5398 | // Class that is going to be used in a SELECT-tag. | ||
5399 | public class User | ||
5400 | { | ||
5401 | private readonly string _realName; | ||
5402 | private readonly int _id; | ||
5403 | public User(int id, string realName) | ||
5404 | { | ||
5405 | _id = id; | ||
5406 | _realName = realName; | ||
5407 | } | ||
5408 | public string RealName | ||
5409 | { | ||
5410 | get { return _realName; } | ||
5411 | } | ||
5412 | |||
5413 | public int Id | ||
5414 | { | ||
5415 | get { return _id; } | ||
5416 | } | ||
5417 | } | ||
5418 | |||
5419 | // Using an inline delegate to generate the select list | ||
5420 | public void UserInlineDelegate() | ||
5421 | { | ||
5422 | List<User> items = new List<User>(); | ||
5423 | items.Add(new User(1, "adam")); | ||
5424 | items.Add(new User(2, "bertial")); | ||
5425 | items.Add(new User(3, "david")); | ||
5426 | string htmlSelect = Select("users", "users", items, delegate(object o, out object id, out object value) | ||
5427 | { | ||
5428 | User user = (User)o; | ||
5429 | id = user.Id; | ||
5430 | value = user.RealName; | ||
5431 | }, 2, true); | ||
5432 | } | ||
5433 | |||
5434 | // Using an method as delegate to generate the select list. | ||
5435 | public void UseExternalDelegate() | ||
5436 | { | ||
5437 | List<User> items = new List<User>(); | ||
5438 | items.Add(new User(1, "adam")); | ||
5439 | items.Add(new User(2, "bertial")); | ||
5440 | items.Add(new User(3, "david")); | ||
5441 | string htmlSelect = Select("users", "users", items, UserOptions, 1, true); | ||
5442 | } | ||
5443 | |||
5444 | // delegate returning id and title | ||
5445 | public static void UserOptions(object o, out object id, out object title) | ||
5446 | { | ||
5447 | User user = (User)o; | ||
5448 | id = user.Id; | ||
5449 | value = user.RealName; | ||
5450 | } /// </example> | ||
5451 | </member> | 5451 | </member> |
5452 | </members> | 5452 | </members> |
5453 | </doc> | 5453 | </doc> |
diff --git a/prebuild.xml b/prebuild.xml index 0a4c914..51a4e8b 100644 --- a/prebuild.xml +++ b/prebuild.xml | |||
@@ -1587,6 +1587,8 @@ | |||
1587 | </Files> | 1587 | </Files> |
1588 | </Project> | 1588 | </Project> |
1589 | 1589 | ||
1590 | |||
1591 | |||
1590 | <Project frameworkVersion="v3_5" name="OpenSim.Region.ClientStack.LindenCaps" path="OpenSim/Region/ClientStack/Linden/Caps" type="Library"> | 1592 | <Project frameworkVersion="v3_5" name="OpenSim.Region.ClientStack.LindenCaps" path="OpenSim/Region/ClientStack/Linden/Caps" type="Library"> |
1591 | <Configuration name="Debug"> | 1593 | <Configuration name="Debug"> |
1592 | <Options> | 1594 | <Options> |
@@ -1631,6 +1633,7 @@ | |||
1631 | </Files> | 1633 | </Files> |
1632 | </Project> | 1634 | </Project> |
1633 | 1635 | ||
1636 | |||
1634 | <Project frameworkVersion="v3_5" name="OpenSim.Region.CoreModules" path="OpenSim/Region/CoreModules" type="Library"> | 1637 | <Project frameworkVersion="v3_5" name="OpenSim.Region.CoreModules" path="OpenSim/Region/CoreModules" type="Library"> |
1635 | <Configuration name="Debug"> | 1638 | <Configuration name="Debug"> |
1636 | <Options> | 1639 | <Options> |