5 // Atsushi Enomoto <atsushi@ximian.com>
7 // Copyright (C) 2010 Novell, Inc. http://www.novell.com
9 // Permission is hereby granted, free of charge, to any person obtaining
10 // a copy of this software and associated documentation files (the
11 // "Software"), to deal in the Software without restriction, including
12 // without limitation the rights to use, copy, modify, merge, publish,
13 // distribute, sublicense, and/or sell copies of the Software, and to
14 // permit persons to whom the Software is furnished to do so, subject to
15 // the following conditions:
17 // The above copyright notice and this permission notice shall be
18 // included in all copies or substantial portions of the Software.
20 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
23 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
24 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
25 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
29 using System.Collections.Generic;
30 using System.Collections.Specialized;
33 using System.Security.Principal;
34 using System.ServiceModel;
36 using System.Threading;
39 namespace System.ServiceModel.Channels.Http
41 abstract class HttpContextInfo
43 public abstract NameValueCollection QueryString { get; }
44 public abstract Uri RequestUrl { get; }
45 public abstract string HttpMethod { get; }
46 public abstract void Abort ();
48 public abstract string User { get; }
49 public abstract string Password { get; }
50 public abstract void ReturnUnauthorized ();
53 class HttpStandaloneContextInfo : HttpContextInfo
55 public HttpStandaloneContextInfo (HttpListenerContext ctx)
60 HttpListenerContext ctx;
62 public HttpListenerContext Source {
66 public override NameValueCollection QueryString {
67 get { return ctx.Request.QueryString; }
69 public override Uri RequestUrl {
70 get { return ctx.Request.Url; }
72 public override string HttpMethod {
73 get { return ctx.Request.HttpMethod; }
75 public override void Abort ()
77 ctx.Response.Abort ();
80 public override string User {
81 get { return ctx.User != null ? ((HttpListenerBasicIdentity) ctx.User.Identity).Name : null; }
84 public override string Password {
85 get { return ctx.User != null ? ((HttpListenerBasicIdentity) ctx.User.Identity).Password : null; }
88 public override void ReturnUnauthorized ()
90 ctx.Response.StatusCode = 401;
94 class AspNetHttpContextInfo : HttpContextInfo
96 public AspNetHttpContextInfo (HttpContext ctx)
103 public HttpContext Source {
107 public override NameValueCollection QueryString {
108 get { return ctx.Request.QueryString; }
110 public override Uri RequestUrl {
111 get { return ctx.Request.Url; }
113 public override string HttpMethod {
114 get { return ctx.Request.HttpMethod; }
117 public override void Abort ()
119 ctx.Response.Close ();
122 public override string User {
123 get { return ctx.User != null ? ((GenericIdentity) ctx.User.Identity).Name : null; }
126 // FIXME: how to acquire this?
127 public override string Password {
131 public override void ReturnUnauthorized ()
133 ctx.Response.StatusCode = 401;