1 2003-04-30 Gonzalo Paniagua Javier <gonzalo@ximian.com>
3 * HtmlizedException.cs: simplified to cope with the new interface.
5 * HttpApplicationFactory.cs: use the application file parser to get the
8 * HttpException.cs: small changes. Needs some more work on
11 2003-03-25 Gonzalo Paniagua Javier <gonzalo@ximian.com>
13 * HttpRequest.cs: fixed Url property.
15 2003-03-24 Gonzalo Paniagua Javier <gonzalo@ximian.com>
17 * HtmlizedException.cs:
18 * HttpException.cs: display the correct line number in error messages.
20 2003-03-22 Gonzalo Paniagua Javier <gonzalo@ximian.com>
22 * HttpCachePolicy.cs: implemented all TODOs.
23 * HttpRequestStream.cs: make it internal.
25 2003-03-18 Gonzalo Paniagua Javier <gonzalo@ximian.com>
27 * HttpContext.cs: implemented RewritePath in other way.
28 * HttpRequest.cs: removed SetPhysicalPath and added SetForm.
29 * HttpServerUtility.cs: implemented Transfer (string, bool).
31 2003-03-16 Daniel Lopez Ridruejo <daniel @ rawbyte.com>
32 * HttpContext.cs : Implemented RewritePath
33 * HttpRequest.cs : Added internal function SetPhysicalPath
35 2003-03-14 Gonzalo Paniagua Javier <gonzalo@ximian.com>
37 * HttpServerUtility.cs: implemented Transfer ().
39 2003-03-13 Gonzalo Paniagua Javier <gonzalo@ximian.com>
41 * HttpRuntime.cs: Cache no longer have a Dispose method.
43 * HttpServerUtility.cs: removed MonoTODO.
45 2003-03-03 Gonzalo Paniagua Javier <gonzalo@ximian.com>
47 * HttpHelper.cs: store the values in an ArrayList to get them in correct
50 2003-02-17 Gonzalo Paniagua Javier <gonzalo@ximian.com>
52 * HttpApplicationFactory.cs: Global.asax takes precedence over
53 global.asax if it exists.
55 * HttpRequest.cs: use allowCrossAppMapping in MapPath.
57 2003-02-17 Gonzalo Paniagua Javier <gonzalo@ximian.com>
59 * HttpApplication.cs: CreateHttpHandler is now internal.
61 * HttpRequest.cs: allow setting QueryStringRaw, which
62 invalidates the data obtained from the previous value. Added internal
65 * HttpServerUtility.cs: implemented Execute and GetLastError.
67 2003-02-17 Gonzalo Paniagua Javier <gonzalo@ximian.com>
69 * HttpServerUtility.cs: style.
71 2003-02-13 Gonzalo Paniagua Javier <gonzalo@ximian.com>
73 * HttpApplication.cs: only execute the EndRequest step on error
74 condition or request marked as completed. This prevent page events from
75 being called when, for example, the url authorization module forbids
78 2003-02-12 Gonzalo Paniagua Javier <gonzalo@ximian.com>
80 * HttpRequest.cs: implemented the indexer.
82 2003-02-11 Gonzalo Paniagua Javier <gonzalo@ximian.com>
84 * HtmlizedException.cs: base class for exceptions that makes it easy to
87 * HttpException.cs: improved error displaying.
89 * HttpRuntime.cs: removed debugging output.
91 2003-02-06 Gonzalo Paniagua Javier <gonzalo@ximian.com>
93 * HttpApplication.cs: display the error instead of hanging when we get
94 any error before the last step of the request.
96 2003-02-04 Tim Haynes <thaynes@openlinksw.com>
98 * HttpApplicationFactory.cs: fixed HttpRuntime.Close() to decrement
101 2003-01-29 Gonzalo Paniagua Javier <gonzalo@ximian.com>
103 * HttpRequest.cs: added BaseVirtualDir property and use it in MapPath.
105 2003-01-17 Gonzalo Paniagua Javier <gonzalo@ximian.com>
107 * HttpRequest.cs: implemented CurrentExecutionFilePath.
109 2003-01-10 Gonzalo Paniagua Javier <gonzalo@ximian.com>
111 * HttpApplication.cs: keep _lasterror if no context. Attach
112 application events *after* modules initialization (if not, User is not
113 set when the user handler is called).
115 * HttpApplicationFactory.cs: made all methods related to
116 AttachEvents static. I will fix OnStart/OnEnd for application and
119 * HttpRequest.cs: don't initialize cookies twice.
121 2003-01-10 Gonzalo Paniagua Javier <gonzalo@ximian.com>
124 (ApplyAppPathModifiers): return the root directory for "".
126 2003-01-08 Gonzalo Paniagua Javier <gonzalo@ximian.com>
128 * HttpUtility.cs: fixed HtmlDecode to avoid ArgumentOutOfRangeException.
130 2003-01-04 Gonzalo Paniagua Javier <gonzalo@ximian.com>
132 * HttpApplication.cs: added new state to handle default authentication.
134 2003-01-03 Gonzalo Paniagua Javier <gonzalo@ximian.com>
136 * HttpContext.cs: removed hack to get the User.
138 2003-01-03 Gonzalo Paniagua Javier <gonzalo@ximian.com>
140 * HttpUtility.cs: fixed bug #36038. Thanks to juancri@tagnet.org for
141 reporting the bug and how to fix it.
143 2002-12-20 Gonzalo Paniagua Javier <gonzalo@ximian.com>
145 * HttpCookie.cs: send 'expires' in the header.
147 2002-12-19 Gonzalo Paniagua Javier <gonzalo@ximian.com>
149 * HttpValueCollection.cs: patch from Botjan Vizin
150 <bostjan.vizin@siol.net> that implements ToString (bool).
152 2002-12-18 Gonzalo Paniagua Javier <gonzalo@ximian.com>
154 * HttpApplicationFactory.cs: add the context as parameter when building
155 the application Type.
157 * HttpCookie.cs: new internal constructor.
158 * HttpCookieCollection.cs: new internal method to make a cookie expire.
160 * HttpRequest.cs: MapPath fixes.
161 * HttpResponse.cs: implemented ApplyAppPathModifier.
162 * HttpRuntime.cs: fixed typo in AppDomainAppVirtualPath.
164 2002-12-17 Gonzalo Paniagua Javier <gonzalo@ximian.com>
166 * HttpContext.cs: hack to create a default user when there's no one.
167 Implemented GetConfig (string).
169 * HttpRequest.cs: fixes to MapPath (string).
171 2002-12-12 Gonzalo Paniagua Javier <gonzalo@ximian.com>
173 * HttpRuntime.cs: avoid nulls and exception when getting resource
176 * StaticFileHandler.cs: added file name to error message.
178 2002-12-05 Gonzalo Paniagua Javier <gonzalo@ximian.com>
180 * HttpResponse.cs: avoid sending chunked content for HTTP/1.1.
182 2002-12-02 Gonzalo Paniagua Javier <gonzalo@ximian.com>
184 * HttpApplicationFactory.cs: get the events from the application class,
185 fire Application/Session Start/End and add the others as application
188 2002-11-30 Gonzalo Paniagua Javier <gonzalo@ximian.com>
190 * HttpApplicationFactory.cs: compile global.asax file if it exists.
192 2002-11-27 Gonzalo Paniagua Javier <gonzalo@ximian.com>
194 * HttpRequest.cs: provide a default Browser until we detect it.
196 (End): do not close the connection here.
197 (Flush (bool)): send the headers when, for example, Redirect () is
200 2002-11-12 Gonzalo Paniagua Javier <gonzalo@ximian.com>
202 * HttpException.cs: simple error output.
204 2002-11-12 Gonzalo Paniagua Javier <gonzalo@ximian.com>
206 * HttpApplication.cs: style.
207 * HttpException.cs: style.
208 * HttpRuntime.cs: only flush the response if there are no errors.
209 Otherwise, write an error output.
210 * HttpWriter.cs: change Unicode to UTF8.
212 2002-11-09 Gonzalo Paniagua Javier <gonzalo@ximian.com>
214 * HttpApplication.cs: don't begin the request using ExecuteNextAsync
215 (it fails to work on NetServ).
217 * HttpWorkerRequest.cs: typo.
219 2002-11-07 Gonzalo Paniagua Javier <gonzalo@ximian.com>
221 * HttpValueCollection.cs: the value may contain trailing '=' as it is
222 UrlEncoded. Don't split name=value based on '='.
224 2002-11-02 Gonzalo Paniagua Javier <gonzalo@ximian.com>
226 * HttpCookie.cs: made GetCookieHeader internal.
228 * HttpRequest.cs: get cookies from request.
230 * HttpResponse.cs: send cookies. Implemented
231 AddFileDependencies (). Added check for _Writer == null in Flush
232 (Patrik ;-). Clear the content if HEAD or SupressContent == true.
233 Removed redirect hack used in old server.
235 2002-10-31 Gonzalo Paniagua Javier <gonzalo@ximian.com>
237 * HttpRequest.cs: fixed GetRawContent (). Now it only tries to read at
238 most ContentLength bytes.
240 * HttpResponse.cs: now it sends the headers. Added
241 X-Powered-By header :-).
243 * HttpRuntime.cs: fixed typo.
245 * HttpValueCollection.cs: cosmetic changes.
247 2002-10-27 Gonzalo Paniagua Javier <gonzalo@ximian.com>
249 * HttpApplication.cs: reenabled a few lines of code
250 (ThreadPool already fixed).
255 * HttpValueCollection.cs:
256 * HttpWriter.cs: Use WebEncoding.Encoding.
258 2002-10-25 Gonzalo Paniagua Javier <gonzalo@ximian.com>
260 * HttpWriter.cs: changed encoding of the writer from Unicode to UTF8.
261 This fixes sending bytes and allows mixing byte with chars.
263 2002-10-25 Gonzalo Paniagua Javier <gonzalo@ximian.com>
265 * HttpResponse.cs: implemented WriteFile methods.
266 * MimeTypes.cs: removed duplicated entries.
268 2002-10-24 Gonzalo Paniagua Javier <gonzalo@ximian.com>
270 * HttpResponse.cs: don't throw exception in a couple of
271 methods not yet implemented.
273 2002-10-08 Gonzalo Paniagua Javier <gonzalo@ximian.com>
275 * HttpApplication.cs: fixed type and handle factories when creating
276 IHttpHandler for a request.
278 2002-10-08 Gonzalo Paniagua Javier <gonzalo@ximian.com>
280 * HttpApplication.cs: use handlers from configuration.
281 * HttpContext.cs: get handlers from ConfigurationSettings.
283 2002-10-02 Gonzalo Paniagua Javier <gonzalo@ximian.com>
285 * HttpMethodNotAllowedHandler.cs:
287 * StaticFileHandler.cs: Modified file.
289 * HttpUtility.cs: implemented all missing methods.
292 2002-09-30 Gonzalo Paniagua Javier <gonzalo@ximian.com>
294 * System.Web/HttpApplication.cs: use the static file handler.
295 * System.Web/HttpForbiddenHandler.cs: handler to forbid access.
296 * System.Web/HttpMethodNotAllowedHandler.cs: handler for method not
299 * System.Web/HttpUtility.cs: finished all UrlDecode methods.
300 * System.Web/MimeTypes.cs: map from file extension to MIME type.
301 * System.Web/StaticFileHandler.cs: serves static files
303 2002-09-28 Gonzalo Paniagua Javier <gonzalo@ximian.com>
305 * System.Web/HttpApplication.cs:
306 * System.Web/HttpApplicationFactory.cs:
307 * System.Web/HttpRequest.cs:
308 * System.Web/HttpRuntime.cs: we are now able to compile pages and use
309 HttpApplication, HttpRuntime and SimpleWorkerRequest.
311 2002-09-25 Gonzalo Paniagua Javier <gonzalo@ximian.com>
313 * HttpApplication.cs: added some missing methods.
314 * HttpApplicationFactory.cs: get event handlers for the application.
315 * HttpAsyncResult.cs: little fixes.
316 * HttpRequest.cs: make Encoding work even with no worker request.
318 2002-08-26 Gonzalo Paniagua Javier <gonzalo@ximian.com>
320 * HttpWorkerRequest.cs: mcs doesn't go crazy. It's just me, that forgot
321 to add HttpMapPath to the list file...
323 2002-08-26 Gonzalo Paniagua Javier <gonzalo@ximian.com>
325 * HttpWorkerRequest.cs: fixes compilation with mcs. I will add a bug
326 report when i get a test case.
328 2002-08-26 Gonzalo Paniagua Javier <gonzalo@ximian.com>
330 * HttpApplicationFactory.cs:
331 * HttpCachePolicy.cs:
332 * HttpResponseHeader.cs:
333 * HttpResponseStream.cs:
334 * HttpResponseStreamProxy.cs:
335 * HttpValueCollection.cs: misc. fixes based on class status page.
337 * IHttpMapPath.cs: New file.
339 * HttpRequest.cs: implemented ContentEncoding.
340 * HttpWorkerRequest.cs: mono-stylized and implemented
341 SendResponseFromMemory.
343 2002-08-18 Gonzalo Paniagua Javier <gonzalo@ximian.com>
345 * HttpContext.cs: reformatted.
346 * HttpStaticObjectsCollection.cs: implemented GetEnumertor, CopyTo and
349 2002-08-05 Patrik Torstensson <ptorsten@hotmail.com>
351 * HttpApplication.cs: Implemented a state machine to allow handling of
352 HttpModules and HttpHandlers. Implementation of async handlers.
354 * HttpApplicationFactory.cs: Factory for creating HttpApplication
355 instances, including caching.
357 * HttpRuntime.cs: Usage of the new HttpApplicationFactory to get a
358 application instance to execute requests in and implementation of
359 request execution (still no request queue).
361 * HttpAsyncResult.cs: New file to handle async module results.
363 * HttpRequest.cs: Change signature of Dispose
364 * HttpResponse.cs: new internal method allowing filtering to happen
365 during the request flow in the state machine.
367 2002-07-28 Gonzalo Paniagua Javier <gonzalo@ximian.com>
369 * HttpApplication.cs: events were not being initialized.
371 2002-07-25 Gonzalo Paniagua Javier <gonzalo@ximian.com>
373 * ProcessModelInfo.cs: fixed compilation.
375 2002-07-25 Tim Coleman <tim@timcoleman.com>
376 * ProcessModelInfo.cs:
378 * HttpParseException.cs:
379 * HttpCompileException.cs:
380 * HttpUnhandledException.cs:
381 Internal constructors added to these
383 2002-07-24 Tim Coleman <tim@timcoleman.com>
385 Fix constructor, reference to shutdownreason.
387 2002-07-24 Tim Coleman <tim@timcoleman.com>
388 * HttpCachePolicy.cs:
389 Added stubbs to this class.
390 * HttpCacheability.cs:
391 * HttpCacheRevalidation.cs:
392 * HttpValidationStatus.cs:
393 * ProcessShutdownReason.cs:
396 Reorder the enumerations (and in some cases make
397 one-based) in order to agree with the .NET
398 implementation, based on the class status page.
400 Implementation of this class.
402 2002-07-23 Tim Coleman <tim@timcoleman.com>
403 * HttpCompileException.cs:
404 * HttpParseException.cs:
405 * HttpUnhandledException.cs:
407 * HttpApplication.cs:
408 * HttpBrowserCapabilities.cs:
409 Added missing methods stubbs and attributes based
410 on the class status page. Also reformatted some
411 source for consistency.
413 2002-07-23 Tim Coleman <tim@timcoleman.com>
414 * HttpUtility.cs: Moved entities hashtable into main
415 class as a static object, so we don't instantiate
416 a new one every time. Also put the hashtable
417 building into a lock block.
419 2002-07-22 Tim Coleman <tim@timcoleman.com>
420 * HttpUtility.cs: Cleanup of the code, implementation
421 of HtmlDecode/HtmlEncode functions
423 2002-07-14 Gonzalo Paniagua Javier <gonzalo@ximian.com>
425 * HttpResponse.cs: quick&dirty hack to make redirection work. Should
426 be out of there once we have SimpleWorkerRequest.
428 2002-07-13 Gonzalo Paniagua Javier <gonzalo@ximian.com>
430 * HttpUtility.cs: little typo, big headache.
432 2002-07-10 Gonzalo Paniagua Javier <gonzalo@ximian.com>
434 * HttpRuntime.cs: don't throw NotImplemented in a couple of methods.
436 2002-06-30 Gonzalo Paniagua Javier <gonzalo@ximian.com>
438 * System.Web/HttpResponse.cs:
440 Fixes based on class status page:
442 - Add attributes (DefaultEvent, ParseChildren).
444 - Explicitly implement some interfaces (IPostBackDataHandler
445 and IPostBackEventHandler).
446 - Implemented some missing methods.
448 2002-06-29 Gonzalo Paniagua Javier <gonzalo@ximian.com>
451 (Session): return null instead of throwing an exception.
454 (HttpMethod): return RequestType if not set.
455 (GetRawContent): return QueryString if we don't have a
458 * HttpUtility.cs: fixed Decode and Encode.
460 2002-06-25 Gonzalo Paniagua Javier <gonzalo@ximian.com>
462 * HttpApplication.cs:
463 * HttpContext.cs: added System.Web.SessionState namespace.
465 * HttpSessionState.cs: removed. It is under
466 System.Web.SessionState.
468 2002-06-10 Duncan Mak <duncan@ximian.com>
470 * HttpBrowserCapabilities.cs (BackgroundSounds): Fixed typo.
472 2002-06-04 Gonzalo Paniagua Javier <gonzalo@ximian.com>
474 * HttpRequest.cs: implemented Browser property.
476 2002-06-03 Gonzalo Paniagua Javier <gonzalo@ximian.com>
478 * HttpBrowserCapabilities.cs: stubbed out.
480 2002-05-18 Miguel de Icaza <miguel@ximian.com>
482 * HttpRuntime.cs: Reformat file.
484 2002-05-07 Duncan Mak <duncan@ximian.com>
486 * HttpBrowserCapabilities.cs: Added, replacing
487 HttpBrowserCapabilites because of typo.
489 * HttpBrowserCapabilites.cs: Removed, replaced by above.
491 * HttpRequest.cs (Browser): Fixed typo.
493 2002-04-12 Patrik Torstensson <patrik.torstensson@labs2.com>
495 * HttpApplication.cs: Minor updates
496 * HttpApplicationState.cs: Ready.
497 * HttpClientCertificate.cs: Signature updates
498 * HttpValueCollection.cs: ready
499 * HttpStaticObjectsCollection.cs: ready
500 * HttpResponseHeader.cs: made internal only
501 * HttpResponse.cs: Signature updates
502 * HttpPostedFile.cs: ready
503 * HttpCacheVaryByHeaders.cs: ready (except communication to policy)
504 * HttpCacheVaryByParams.cs: ready (except communication to policy)
506 System.Web is now over 60% ready..
508 2002-04-11 Patrik Torstensson <patrik.torstensson@labs2.com>
510 * HttpException.cs: 95% ready, only windows dependent code left
511 * HttpFileCollection.cs: Finished.
512 * HttpRequest.cs: Minor fixes and fixed signature problems
513 * HttpResponse.cs: Implementation of missing methods and signature problems
514 * HttpResponseHeader.cs: Fixed signature problems
515 * HttpRuntime.cs: Fixed signature problems
516 * HttpServerUtility.cs: Added support for HttpApplication
517 * HttpSessionState.cs: Fixed signature issues
518 * HttpUtility.cs: fixed signature issues
519 * HttpValueCollection.cs: Support for cookie parsing and fixed signature issues
520 * HttpWorkerRequest.cs: Fixed small signature issue
521 * HttpWriter.cs: Fixed signature issue
522 * HttpApplication.cs: Basic implementation
523 * HttpApplicationState.cs: Small fixes to support major change comming up
524 * HttpBrowserCapabilities.cs: Added Type method
525 * HttpClientCertificate.cs: Almost ready, needs to parse certificate.
526 * HttpContext.cs: Fixed signature issues and added last methods.
527 * HttpCookie.cs: Full implementation
528 * HttpCookieCollection.cs: Full implementation
529 * TraceContext.cs: Methods implemented.
530 * HttpPostedFile.cs: Placeholder
531 * HttpStaticObjectsCollection.cs: Placeholder
532 * HttpModuleCollection.cs: Ready, will be used during the major revamp.
534 * Fixed a number of other small signature problems also (class status page)
537 2002-04-10 Patrik Torstensson <patrik.torstensson@labs2.com>
539 * HttpWorkerRequest.EndOfSendNotification.cs Removed (included in WorkerRequest)
540 * Checkin of all new files (noted in last changenote)
542 2002-04-10 Patrik Torstensson <patrik.torstensson@labs2.com>
544 * HttpContext.cs: First implementation (basic support, few methods left to impl)
545 * HttpException.cs: Partial implementation (basic support)
546 * HttpHelper.cs: Header parse helper, used by runtime (non public)
547 * HttpRequest.cs: Implementation (all methods there, not all fully impl)
548 * HttpRequestStream.cs: Full implementation
549 * HttpResponse.cs: Partial implementation(almost all methods)
550 * HttpResponseHeader.cs: Header helper
551 * HttpResponseStream.cs: Full implementation - Response stream support
552 * HttpResponseStreamProxy.cs: Implementation - filter support
553 * HttpRuntime.cs: Rewrite to support one IHttpModule (use for testing the runtime)
554 * HttpServerUtility.cs: Implemented usage of HttpContext for methods
555 and moved encoding functions to HttpUtility.
557 * HttpUtility.cs: Added encoding/decoding functions from HttpServerUtility and
558 added the Attribute encoding functions.
560 * HttpValueCollection.cs: Implementation.
561 * HttpWorkerRequest.cs: Rewrite and implementation of all methods (ready)
562 * HttpWriter.cs: Implementation (with filter support)
564 * HttpFileCollection: Added dummy class (placeholder)
565 * HttpApplication.cs: Added dummy class (placeholder)
566 * HttpApplicationState.cs: Added dummy class (placeholder)
567 * HttpBrowserCapabilities.cs: Added dummy class (placeholder)
568 * HtttpCachePolicy.cs: Added dummy class (placeholder)
569 * HttpClientCertificate.cs: Added dummy class (placeholder)
570 * HttpSessionState.cs: Added dummy class (placeholder)
571 * TraceContext.cs: Added dummy class (placeholder)
574 2002/04/10 Nick Drochak <ndrochak@gol.com>
576 * HttpServerUtility.cs: Fix build breaker.
578 2002-03-28 Wictor Wilén <wictor@iBizkit.se>
580 * HttpServerUtils.cs : Added some more functionality
582 2002-03-28 Martin Baulig <martin@gnome.org>
584 * HttpServerUtils.cs (UrlDecode): You cannot implicitly cast a
585 char to a string, use ToString() instead.
587 2002-03-16 Gaurav Vaish <gavish@iitk.ac.in>
589 * WebCategoryAttribute.cs
590 : Added private attribute.
592 2002-03-16 Gaurav Vaish <gavish@iitk.ac.in>
594 * HttpRuntime.cs : Stubbed methods for
595 FormatStringResource(...) in agreement with the various
596 overloads available at String.Format(...)
598 2002-01-08 Gaurav Vaish <gavish@iitk.ac.in>
600 * TODOAttribute.cs : Added, as an internal class to the assembly
602 2002-01-03 Nick Drochak <ndrochak@gol.com>
604 * HttpRuntime.cs: remove uneeded exception variable from catch and
605 initialize remaining instance members to avoid compile warnings
607 2002-01-02 Nick Drochak <ndrochak@gol.com>
609 * HttpRuntime.cs: fix spelling error/variable name change.
611 2001-12-18 Gaurav Vaish <gvaish@iitk.ac.in>
613 * HttpRuntime.cs : Initial implementation
615 2001-08-29 Bob Smith <bob@thestuff.net>
617 * HttpWorkerRequest.cs: Partial Implementation.
619 2001-08-16 Bob Smith <bob@thestuff.net>
621 * HttpCookieCollection.cs, HttpCookie.cs: Bug fixes.
623 2001-08-09 Bob Smith <bob@thestuff.net>
625 * BeginEventHandler.cs: Implemented.
626 * EndEventHandler.cs: Implemented.
627 * HttpCacheability.cs: Implemented.
628 * HttpCacheRevalidation.cs: Implemented.
629 * HttpCacheValidateHandler.cs: Implemented.
630 * HttpCookieCollection.cs: Implemented.
631 * HttpCookie.cs: Implemented.
632 * HttpValidationStatus.cs: Implemented.
633 * HttpWorkerRequest.EndOfSendNotification.cs: Implemented.
634 * IHttpAsyncHandler.cs: Implemented.
635 * IHttpHandler.cs: Implemented.
636 * IHttpHandlerFactory.cs: Implemented.
637 * IHttpModule.cs: Implemented.
638 * ProcessShutdownReason.cs: Implemented.
639 * ProcessStatus.cs: Implemented.
640 * TraceMode.cs: Implemented.