2
// MonoMac.CoreServices.CFHTTPAuthentication
5
// Martin Baulig (martin.baulig@gmail.com)
7
// Copyright 2012 Xamarin Inc. (http://www.xamarin.com)
10
// Permission is hereby granted, free of charge, to any person obtaining
11
// a copy of this software and associated documentation files (the
12
// "Software"), to deal in the Software without restriction, including
13
// without limitation the rights to use, copy, modify, merge, publish,
14
// distribute, sublicense, and/or sell copies of the Software, and to
15
// permit persons to whom the Software is furnished to do so, subject to
16
// the following conditions:
18
// The above copyright notice and this permission notice shall be
19
// included in all copies or substantial portions of the Software.
21
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
22
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
23
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
24
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
25
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
26
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
27
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
31
using System.Runtime.InteropServices;
32
using MonoMac.Foundation;
33
using MonoMac.CoreFoundation;
34
using MonoMac.ObjCRuntime;
36
namespace MonoMac.CoreServices {
38
public class CFHTTPAuthentication : CFType, INativeObject, IDisposable {
39
internal IntPtr handle;
41
internal CFHTTPAuthentication (IntPtr handle)
42
: this (handle, false)
46
internal CFHTTPAuthentication (IntPtr handle, bool owns)
49
CFObject.CFRetain (handle);
53
[DllImport (Constants.CFNetworkLibrary, EntryPoint="CFHTTPAuthenticationGetTypeID")]
54
public extern static int GetTypeID ();
56
~CFHTTPAuthentication ()
61
protected void CheckHandle ()
63
if (handle == IntPtr.Zero)
64
throw new ObjectDisposedException (GetType ().Name);
67
public void Dispose ()
70
GC.SuppressFinalize (this);
73
public IntPtr Handle {
80
protected virtual void Dispose (bool disposing)
82
if (handle != IntPtr.Zero) {
83
CFObject.CFRelease (handle);
88
[DllImport (Constants.CFNetworkLibrary)]
89
extern static IntPtr CFHTTPAuthenticationCreateFromResponse (IntPtr allocator, IntPtr response);
91
public static CFHTTPAuthentication CreateFromResponse (CFHTTPMessage response)
93
if (response.IsRequest)
94
throw new InvalidOperationException ();
96
var handle = CFHTTPAuthenticationCreateFromResponse (IntPtr.Zero, response.Handle);
97
if (handle == IntPtr.Zero)
100
return new CFHTTPAuthentication (handle);
103
[DllImport (Constants.CFNetworkLibrary)]
104
extern static bool CFHTTPAuthenticationIsValid (IntPtr handle, IntPtr error);
106
public bool IsValid {
107
get { return CFHTTPAuthenticationIsValid (Handle, IntPtr.Zero); }
110
[DllImport (Constants.CFNetworkLibrary)]
111
extern static bool CFHTTPAuthenticationAppliesToRequest (IntPtr handle, IntPtr request);
113
public bool AppliesToRequest (CFHTTPMessage request)
115
if (!request.IsRequest)
116
throw new InvalidOperationException ();
118
return CFHTTPAuthenticationAppliesToRequest (Handle, request.Handle);
121
[DllImport (Constants.CFNetworkLibrary)]
122
extern static bool CFHTTPAuthenticationRequiresAccountDomain (IntPtr handle);
124
public bool RequiresAccountDomain {
125
get { return CFHTTPAuthenticationRequiresAccountDomain (Handle); }
128
[DllImport (Constants.CFNetworkLibrary)]
129
extern static bool CFHTTPAuthenticationRequiresOrderedRequests (IntPtr handle);
131
public bool RequiresOrderedRequests {
132
get { return CFHTTPAuthenticationRequiresOrderedRequests (Handle); }
135
[DllImport (Constants.CFNetworkLibrary)]
136
extern static bool CFHTTPAuthenticationRequiresUserNameAndPassword (IntPtr handle);
138
public bool RequiresUserNameAndPassword {
139
get { return CFHTTPAuthenticationRequiresUserNameAndPassword (Handle); }
142
[DllImport (Constants.CFNetworkLibrary)]
143
extern static IntPtr CFHTTPAuthenticationCopyMethod (IntPtr handle);
145
public string GetMethod ()
147
var ptr = CFHTTPAuthenticationCopyMethod (Handle);
148
if (ptr == IntPtr.Zero)
150
using (var method = new CFString (ptr))