Fix problems with overlong directory names: phase #1
[mono.git] / mcs / class / System / System.Net / GlobalProxySelection.cs
1 //
2 // System.Net.GlobalProxySelection
3 //
4 // Author:
5 //   Lawrence Pit (loz@cable.a2000.nl)
6 //
7
8 //
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:
16 // 
17 // The above copyright notice and this permission notice shall be
18 // included in all copies or substantial portions of the Software.
19 // 
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.
27 //
28
29 using System;
30 using System.Collections;
31 using System.Configuration;
32 using System.IO;
33 using System.Runtime.Serialization;
34 #if NET_2_0
35 using System.Net.Configuration;
36 #endif
37
38 namespace System.Net 
39 {
40 #if NET_2_0
41         [ObsoleteAttribute("Use WebRequest.DefaultProxy instead")]
42 #endif
43         public class GlobalProxySelection
44         {
45                 // Constructors
46                 public GlobalProxySelection() { }
47                 
48                 // Properties
49
50 #if !NET_2_0
51                 volatile static IWebProxy proxy;
52                 static readonly object lockobj = new object ();
53                 
54                 static IWebProxy GetProxy ()
55                 {
56                         lock (lockobj) {
57                                 if (proxy != null)
58                                         return proxy;
59
60                                 object p = ConfigurationSettings.GetConfig ("system.net/defaultProxy");
61                                 if (p == null)
62                                         p = new EmptyWebProxy ();
63                                 proxy = (IWebProxy) p;
64                         }
65
66                         return proxy;
67                 }
68 #endif
69                 
70                 public static IWebProxy Select {
71 #if NET_2_0
72                         get { return WebRequest.DefaultWebProxy; }
73                         set { WebRequest.DefaultWebProxy = value; }
74 #else
75                         get { return GetProxy (); }
76                         set {
77                                 if (value == null)
78                                         throw new ArgumentNullException ("GlobalProxySelection.Select",
79                                                         "null IWebProxy not allowed. Use GetEmptyWebProxy ()");
80                                 proxy = value; 
81                         }
82 #endif
83                 }
84                 
85                 // Methods
86                 
87                 public static IWebProxy GetEmptyWebProxy()
88                 {
89                         // must return a new one each time, as the credentials
90                         // can be set
91                         return new EmptyWebProxy ();    
92                 }
93                 
94                 // Internal Classes
95                 
96                 internal class EmptyWebProxy : IWebProxy {
97                         private ICredentials credentials = null;
98                         
99                         internal EmptyWebProxy () { }
100                         
101                         public ICredentials Credentials {
102                                 get { return credentials; } 
103                                 set { credentials = value; }
104                         }
105
106                         public Uri GetProxy (Uri destination)
107                         {
108                                 return destination;
109                         }
110
111                         public bool IsBypassed (Uri host)
112                         {
113                                 return true; // pass directly to host
114                         }
115                 }
116         }               
117 }