* NetworkAccess.cs: Only mark as flags enum on 2.0.
[mono.git] / mcs / class / System / System.Net / HttpProvider.jvm.cs
1 using System;\r
2 using System.Security.Cryptography.X509Certificates;\r
3 using System.IO;\r
4 \r
5 namespace System.Net\r
6 {\r
7         [Serializable]\r
8         internal abstract class HttpProvider\r
9         {\r
10                 #region Fields\r
11 \r
12                 protected static int _defaultMaxResponseHeadersLength;\r
13                 protected static int _defaultMaxRedirectsNum = 50;\r
14                 \r
15                 protected Uri _originalUri;\r
16                 protected WebHeaderCollection _headers;\r
17                 protected bool _allowAutoRedirect;\r
18                 protected bool _allowWriteStreamBuffering = true;\r
19                 protected X509CertificateCollection _certificates;\r
20                 protected string _connectionGroupName;\r
21                 protected HttpContinueDelegate _continueDelegate;\r
22                 protected CookieContainer _cookieContainer;\r
23                 protected ICredentials _credentials;\r
24                 protected bool _keepAlive = true;\r
25                 protected int _maxResponseHeadersLength = _defaultMaxResponseHeadersLength;\r
26                 protected int _maxAutoRedirections = _defaultMaxRedirectsNum;\r
27                 protected int _readWriteTimeout = 300000;\r
28                 protected string _mediaType = string.Empty;\r
29                 protected string _methodName = "GET";\r
30                 protected bool _pipelined = true;\r
31                 protected bool _preAuthenticate;\r
32                 protected Version _version = HttpVersion.Version11;\r
33                 protected IWebProxy _proxy;\r
34                 protected bool _sendChunked;\r
35                 protected ServicePoint _servicePoint;\r
36                 protected int _timeout = 100000;\r
37 \r
38                 protected bool _isAborted;\r
39                 protected long _contentLength = -1L;\r
40 \r
41                 \r
42                 \r
43 \r
44                 #endregion /* Fields */\r
45 \r
46                 #region Constructors and Factory Methods\r
47                 protected HttpProvider(Uri uri)\r
48                 {\r
49                         _originalUri = uri;\r
50                         _headers = new WebHeaderCollection(true);\r
51                         _allowAutoRedirect = true;\r
52                 }\r
53 \r
54                 public static HttpProvider GetHttpProvider(Uri uri)\r
55                 {\r
56                         return new VMWHttpProvider(uri);\r
57                 }\r
58 \r
59                 public static HttpProvider  GetHttpProvider(string provider, Uri uri)\r
60                 {\r
61                         Type type = Type.GetType(provider, true);\r
62                         if(type != null)\r
63                                 return GetHttpProvider(type, uri);\r
64                         //log it as an error\r
65                         return new VMWHttpProvider(uri);\r
66                 }\r
67 \r
68                 public static HttpProvider GetHttpProvider(Type provider, Uri uri)\r
69                 {\r
70                         try\r
71                         {\r
72                                 return (HttpProvider)Activator.CreateInstance(provider, \r
73                                         new object[]{uri});                     \r
74                         }\r
75                         catch\r
76                         {\r
77                                 //log it as an error\r
78                                 return new VMWHttpProvider(uri);\r
79                         }\r
80                 }\r
81 \r
82                 #endregion\r
83 \r
84                 #region Properties\r
85                 internal virtual WebHeaderCollection Headers\r
86                 {\r
87                         get{return _headers;}\r
88                         set\r
89                         {\r
90                                 if(IsRequestStarted ())\r
91                                         throw new InvalidOperationException("Connection already opened");\r
92                                 WebHeaderCollection newHeaders = new WebHeaderCollection (true);\r
93                                 int count = value.Count;\r
94                                 for (int i = 0; i < count; i++) \r
95                                         newHeaders.Add (value.GetKey (i), value.Get (i));\r
96 \r
97                                 _headers = newHeaders;\r
98                         }\r
99                 }\r
100 \r
101                 internal virtual bool AllowAutoRedirect\r
102                 {\r
103                         get{return _allowAutoRedirect;}\r
104                         set{_allowAutoRedirect = value;}\r
105                 }\r
106 \r
107                 internal virtual bool AllowWriteStreamBuffering\r
108                 {\r
109                         get{return _allowWriteStreamBuffering;}\r
110                         set{_allowWriteStreamBuffering = value;}\r
111                 }\r
112 \r
113                 internal virtual string ConnectionGroupName\r
114                 {\r
115                         get{return _connectionGroupName;}\r
116                         set{_connectionGroupName = value;}\r
117                 }\r
118 \r
119                 internal virtual HttpContinueDelegate ContinueDelegate\r
120                 {\r
121                         get{return _continueDelegate;}\r
122                         set{_continueDelegate = value;}\r
123                 }\r
124 \r
125                 internal virtual CookieContainer CookieContainer\r
126                 {\r
127                         get{return _cookieContainer;}\r
128                         set{_cookieContainer = value;}\r
129                 }\r
130 \r
131                 internal virtual ICredentials Credentials\r
132                 {\r
133                         get{return _credentials;}\r
134                         set{_credentials = value;}\r
135                 }\r
136                 internal static int DefaultMaxResponseHeadersLength\r
137                 {\r
138                         get{return _defaultMaxResponseHeadersLength;}\r
139                         set\r
140                         {\r
141                                 if (value < 0 && value != -1)\r
142                                         throw new ArgumentOutOfRangeException("Argument should be positive");\r
143                                 _defaultMaxResponseHeadersLength = value;\r
144                         }\r
145                 }\r
146 \r
147                 internal virtual bool KeepAlive\r
148                 {\r
149                         get{return _keepAlive;}\r
150                         set{_keepAlive = value;}\r
151                 }\r
152 \r
153                 internal virtual int MaxAutoRedirections\r
154                 {\r
155                         get{return _maxAutoRedirections;}\r
156                         set\r
157                         {\r
158                                 if (value <= 0)\r
159                                         throw new ArgumentException("Must be > 0", "value");\r
160                                 _maxAutoRedirections = value;\r
161                         }\r
162                 }\r
163 \r
164                 internal virtual int MaximumResponseHeadersLength\r
165                 {\r
166                         get{return _maxResponseHeadersLength;}\r
167                         set\r
168                         {\r
169                                 if (IsRequestStarted())\r
170                                 {\r
171                                         throw new InvalidOperationException("Request has been already submitted.");\r
172                                 }\r
173                                 if (value < 0 && value != -1)\r
174                                         throw new ArgumentOutOfRangeException("The argument must be positive or -1");\r
175                                 _maxResponseHeadersLength = value;\r
176                         }\r
177                 }\r
178                 \r
179                 internal virtual string MediaType\r
180                 {\r
181                         get{return _mediaType;}\r
182                         set{_mediaType = value;}\r
183                 }\r
184 \r
185                 internal virtual string MethodName\r
186                 {\r
187                         get{return _methodName;}\r
188                         set\r
189                         {\r
190                                 if (value == null || value.Trim () == "")\r
191                                         throw new ArgumentException ("not a valid method");\r
192 \r
193                                 _methodName = value;\r
194                         }\r
195                 }\r
196                 internal virtual bool Pipelined\r
197                 {\r
198                         get{return _pipelined;}\r
199                         set{_pipelined = value;}\r
200                 }\r
201 \r
202                 internal virtual bool PreAuthenticate \r
203                 { \r
204                         get { return _preAuthenticate; }\r
205                         set { _preAuthenticate = value; }\r
206                 }\r
207 \r
208                 internal virtual Version ProtocolVersion\r
209                 {\r
210                         get{return _version;}\r
211                         set\r
212                         {\r
213                                 if (value != HttpVersion.Version10 && value != HttpVersion.Version11)\r
214                                         throw new ArgumentException ("value");\r
215 \r
216                                 _version = value; \r
217                         }\r
218                 }\r
219                 internal virtual IWebProxy Proxy\r
220                 {\r
221                         get{return _proxy;}\r
222                         set\r
223                         {\r
224                                 if(IsRequestStarted())\r
225                                         throw new InvalidOperationException("Request already has been submitted");\r
226                                 if(value == null)\r
227                                         throw new ArgumentNullException("value");\r
228                                 if(!(value is WebProxy))\r
229                                         throw new NotImplementedException("The supported proxy objects only of type System.Net.WebProxy");\r
230                                 _proxy = value;\r
231                         }\r
232                 }\r
233                 internal virtual int ReadWriteTimeout\r
234                 {\r
235                         get{return _readWriteTimeout;}\r
236                         set\r
237                         {\r
238                                 if (IsRequestStarted())\r
239                                         throw new InvalidOperationException("Request has been submitted.");\r
240 \r
241                                 if (value < 0 && value != -1)\r
242                                         throw new ArgumentOutOfRangeException("value");\r
243 \r
244                                 _readWriteTimeout = value;\r
245                         }\r
246                 }\r
247 \r
248                 internal virtual bool SendChunked\r
249                 {\r
250                         get{return _sendChunked;}\r
251                         set\r
252                         {\r
253                                 if(IsRequestStarted ())\r
254                                         throw new InvalidOperationException("Request has been submitted.");\r
255                                 _sendChunked = value;\r
256                         }\r
257                 }\r
258 \r
259                 internal virtual ServicePoint ServicePoint\r
260                 {\r
261                         get{return _servicePoint;}\r
262                 }\r
263 \r
264                 internal virtual int Timeout\r
265                 {\r
266                         get{return _timeout;}\r
267                         set\r
268                         {\r
269                                 if (value < -1)\r
270                                         throw new ArgumentOutOfRangeException ("value");\r
271 \r
272                                 _timeout = value;\r
273                         }\r
274                 }\r
275 \r
276                 internal virtual long ContentLength\r
277                 {\r
278                         get{return _contentLength;}\r
279                         set\r
280                         {\r
281                                 if(value < 0)\r
282                                         throw new ArgumentOutOfRangeException("value", "The Content-Length property value must be positive");\r
283                                 _contentLength = value;\r
284                         }\r
285                 }\r
286 \r
287 \r
288 \r
289                 #endregion\r
290 \r
291                 #region Methods\r
292 \r
293                 public virtual Uri GetOriginalAddress()\r
294                 {\r
295                         return _originalUri;\r
296                 }\r
297 \r
298                 public virtual X509CertificateCollection GetX509Certificates()\r
299                 {\r
300                         if(_certificates == null)\r
301                                 _certificates = new X509CertificateCollection();\r
302                         return _certificates;\r
303                 }\r
304 \r
305                 public abstract bool IsRequestStarted();\r
306 \r
307                 public abstract Uri GetAddress();\r
308 \r
309                 public abstract bool IsHaveResponse();\r
310 \r
311                 public abstract void Abort();\r
312 \r
313                 public abstract Stream GetRequestStream();\r
314 \r
315                 public abstract WebResponse GetResponse();\r
316 \r
317                 public abstract IAsyncResult BeginGetRequestStream(AsyncCallback callback, object state);\r
318 \r
319                 public abstract Stream EndGetRequestStream(IAsyncResult asyncResult);\r
320 \r
321                 public abstract IAsyncResult BeginGetResponse(AsyncCallback callback, object state);\r
322 \r
323                 public abstract WebResponse EndGetResponse(IAsyncResult asyncResult);\r
324 \r
325 \r
326                 #endregion\r
327 \r
328 \r
329         }\r
330 }\r