2 using System.Security.Cryptography.X509Certificates;
\r
8 internal abstract class HttpProvider
\r
12 protected static int _defaultMaxResponseHeadersLength;
\r
13 protected static int _defaultMaxRedirectsNum = 50;
\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
38 protected bool _isAborted;
\r
39 protected long _contentLength = -1L;
\r
44 #endregion /* Fields */
\r
46 #region Constructors and Factory Methods
\r
47 protected HttpProvider(Uri uri)
\r
50 _headers = new WebHeaderCollection(true);
\r
51 _allowAutoRedirect = true;
\r
52 _proxy = GlobalProxySelection.Select;
\r
55 public static HttpProvider GetHttpProvider(Uri uri)
\r
57 return new VMWHttpProvider(uri);
\r
60 public static HttpProvider GetHttpProvider(string provider, Uri uri)
\r
62 Type type = Type.GetType(provider, true);
\r
64 return GetHttpProvider(type, uri);
\r
65 //log it as an error
\r
66 return new VMWHttpProvider(uri);
\r
69 public static HttpProvider GetHttpProvider(Type provider, Uri uri)
\r
73 return (HttpProvider)Activator.CreateInstance(provider,
\r
74 new object[]{uri});
\r
78 //log it as an error
\r
79 return new VMWHttpProvider(uri);
\r
86 internal virtual WebHeaderCollection Headers
\r
88 get{return _headers;}
\r
91 if(IsRequestStarted ())
\r
92 throw new InvalidOperationException("Connection already opened");
\r
93 WebHeaderCollection newHeaders = new WebHeaderCollection (true);
\r
94 int count = value.Count;
\r
95 for (int i = 0; i < count; i++)
\r
96 newHeaders.Add (value.GetKey (i), value.Get (i));
\r
98 _headers = newHeaders;
\r
102 internal virtual bool AllowAutoRedirect
\r
104 get{return _allowAutoRedirect;}
\r
105 set{_allowAutoRedirect = value;}
\r
108 internal virtual bool AllowWriteStreamBuffering
\r
110 get{return _allowWriteStreamBuffering;}
\r
111 set{_allowWriteStreamBuffering = value;}
\r
114 internal virtual string ConnectionGroupName
\r
116 get{return _connectionGroupName;}
\r
117 set{_connectionGroupName = value;}
\r
120 internal virtual HttpContinueDelegate ContinueDelegate
\r
122 get{return _continueDelegate;}
\r
123 set{_continueDelegate = value;}
\r
126 internal virtual CookieContainer CookieContainer
\r
128 get{return _cookieContainer;}
\r
129 set{_cookieContainer = value;}
\r
132 internal virtual ICredentials Credentials
\r
134 get{return _credentials;}
\r
135 set{_credentials = value;}
\r
137 internal static int DefaultMaxResponseHeadersLength
\r
139 get{return _defaultMaxResponseHeadersLength;}
\r
142 if (value < 0 && value != -1)
\r
143 throw new ArgumentOutOfRangeException("Argument should be positive");
\r
144 _defaultMaxResponseHeadersLength = value;
\r
148 internal virtual bool KeepAlive
\r
150 get{return _keepAlive;}
\r
151 set{_keepAlive = value;}
\r
154 internal virtual int MaxAutoRedirections
\r
156 get{return _maxAutoRedirections;}
\r
160 throw new ArgumentException("Must be > 0", "value");
\r
161 _maxAutoRedirections = value;
\r
165 internal virtual int MaximumResponseHeadersLength
\r
167 get{return _maxResponseHeadersLength;}
\r
170 if (IsRequestStarted())
\r
172 throw new InvalidOperationException("Request has been already submitted.");
\r
174 if (value < 0 && value != -1)
\r
175 throw new ArgumentOutOfRangeException("The argument must be positive or -1");
\r
176 _maxResponseHeadersLength = value;
\r
180 internal virtual string MediaType
\r
182 get{return _mediaType;}
\r
183 set{_mediaType = value;}
\r
186 internal virtual string MethodName
\r
188 get{return _methodName;}
\r
191 if (value == null || value.Trim () == "")
\r
192 throw new ArgumentException ("not a valid method");
\r
194 _methodName = value;
\r
197 internal virtual bool Pipelined
\r
199 get{return _pipelined;}
\r
200 set{_pipelined = value;}
\r
203 internal virtual bool PreAuthenticate
\r
205 get { return _preAuthenticate; }
\r
206 set { _preAuthenticate = value; }
\r
209 internal virtual Version ProtocolVersion
\r
211 get{return _version;}
\r
214 if (value != HttpVersion.Version10 && value != HttpVersion.Version11)
\r
215 throw new ArgumentException ("value");
\r
220 internal virtual IWebProxy Proxy
\r
222 get{return _proxy;}
\r
225 if(IsRequestStarted())
\r
226 throw new InvalidOperationException("Request already has been submitted");
\r
228 throw new ArgumentNullException("value");
\r
229 if(!(value is WebProxy))
\r
230 throw new NotImplementedException("The supported proxy objects only of type System.Net.WebProxy");
\r
234 internal virtual int ReadWriteTimeout
\r
236 get{return _readWriteTimeout;}
\r
239 if (IsRequestStarted())
\r
240 throw new InvalidOperationException("Request has been submitted.");
\r
242 if (value < 0 && value != -1)
\r
243 throw new ArgumentOutOfRangeException("value");
\r
245 _readWriteTimeout = value;
\r
249 internal virtual bool SendChunked
\r
251 get{return _sendChunked;}
\r
254 if(IsRequestStarted ())
\r
255 throw new InvalidOperationException("Request has been submitted.");
\r
256 _sendChunked = value;
\r
260 internal virtual ServicePoint ServicePoint
\r
262 get{return _servicePoint;}
\r
265 internal virtual int Timeout
\r
267 get{return _timeout;}
\r
271 throw new ArgumentOutOfRangeException ("value");
\r
277 internal virtual long ContentLength
\r
279 get{return _contentLength;}
\r
283 throw new ArgumentOutOfRangeException("value", "The Content-Length property value must be positive");
\r
284 _contentLength = value;
\r
294 public virtual Uri GetOriginalAddress()
\r
296 return _originalUri;
\r
299 public virtual X509CertificateCollection GetX509Certificates()
\r
301 if(_certificates == null)
\r
302 _certificates = new X509CertificateCollection();
\r
303 return _certificates;
\r
306 public abstract bool IsRequestStarted();
\r
308 public abstract Uri GetAddress();
\r
310 public abstract bool IsHaveResponse();
\r
312 public abstract void Abort();
\r
314 public abstract Stream GetRequestStream();
\r
316 public abstract WebResponse GetResponse();
\r
318 public abstract IAsyncResult BeginGetRequestStream(AsyncCallback callback, object state);
\r
320 public abstract Stream EndGetRequestStream(IAsyncResult asyncResult);
\r
322 public abstract IAsyncResult BeginGetResponse(AsyncCallback callback, object state);
\r
324 public abstract WebResponse EndGetResponse(IAsyncResult asyncResult);
\r