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
54 public static HttpProvider GetHttpProvider(Uri uri)
\r
56 return new VMWHttpProvider(uri);
\r
59 public static HttpProvider GetHttpProvider(string provider, Uri uri)
\r
61 Type type = Type.GetType(provider, true);
\r
63 return GetHttpProvider(type, uri);
\r
64 //log it as an error
\r
65 return new VMWHttpProvider(uri);
\r
68 public static HttpProvider GetHttpProvider(Type provider, Uri uri)
\r
72 return (HttpProvider)Activator.CreateInstance(provider,
\r
73 new object[]{uri});
\r
77 //log it as an error
\r
78 return new VMWHttpProvider(uri);
\r
85 internal virtual WebHeaderCollection Headers
\r
87 get{return _headers;}
\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
97 _headers = newHeaders;
\r
101 internal virtual bool AllowAutoRedirect
\r
103 get{return _allowAutoRedirect;}
\r
104 set{_allowAutoRedirect = value;}
\r
107 internal virtual bool AllowWriteStreamBuffering
\r
109 get{return _allowWriteStreamBuffering;}
\r
110 set{_allowWriteStreamBuffering = value;}
\r
113 internal virtual string ConnectionGroupName
\r
115 get{return _connectionGroupName;}
\r
116 set{_connectionGroupName = value;}
\r
119 internal virtual HttpContinueDelegate ContinueDelegate
\r
121 get{return _continueDelegate;}
\r
122 set{_continueDelegate = value;}
\r
125 internal virtual CookieContainer CookieContainer
\r
127 get{return _cookieContainer;}
\r
128 set{_cookieContainer = value;}
\r
131 internal virtual ICredentials Credentials
\r
133 get{return _credentials;}
\r
134 set{_credentials = value;}
\r
136 internal static int DefaultMaxResponseHeadersLength
\r
138 get{return _defaultMaxResponseHeadersLength;}
\r
141 if (value < 0 && value != -1)
\r
142 throw new ArgumentOutOfRangeException("Argument should be positive");
\r
143 _defaultMaxResponseHeadersLength = value;
\r
147 internal virtual bool KeepAlive
\r
149 get{return _keepAlive;}
\r
150 set{_keepAlive = value;}
\r
153 internal virtual int MaxAutoRedirections
\r
155 get{return _maxAutoRedirections;}
\r
159 throw new ArgumentException("Must be > 0", "value");
\r
160 _maxAutoRedirections = value;
\r
164 internal virtual int MaximumResponseHeadersLength
\r
166 get{return _maxResponseHeadersLength;}
\r
169 if (IsRequestStarted())
\r
171 throw new InvalidOperationException("Request has been already submitted.");
\r
173 if (value < 0 && value != -1)
\r
174 throw new ArgumentOutOfRangeException("The argument must be positive or -1");
\r
175 _maxResponseHeadersLength = value;
\r
179 internal virtual string MediaType
\r
181 get{return _mediaType;}
\r
182 set{_mediaType = value;}
\r
185 internal virtual string MethodName
\r
187 get{return _methodName;}
\r
190 if (value == null || value.Trim () == "")
\r
191 throw new ArgumentException ("not a valid method");
\r
193 _methodName = value;
\r
196 internal virtual bool Pipelined
\r
198 get{return _pipelined;}
\r
199 set{_pipelined = value;}
\r
202 internal virtual bool PreAuthenticate
\r
204 get { return _preAuthenticate; }
\r
205 set { _preAuthenticate = value; }
\r
208 internal virtual Version ProtocolVersion
\r
210 get{return _version;}
\r
213 if (value != HttpVersion.Version10 && value != HttpVersion.Version11)
\r
214 throw new ArgumentException ("value");
\r
219 internal virtual IWebProxy Proxy
\r
221 get{return _proxy;}
\r
224 if(IsRequestStarted())
\r
225 throw new InvalidOperationException("Request already has been submitted");
\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
233 internal virtual int ReadWriteTimeout
\r
235 get{return _readWriteTimeout;}
\r
238 if (IsRequestStarted())
\r
239 throw new InvalidOperationException("Request has been submitted.");
\r
241 if (value < 0 && value != -1)
\r
242 throw new ArgumentOutOfRangeException("value");
\r
244 _readWriteTimeout = value;
\r
248 internal virtual bool SendChunked
\r
250 get{return _sendChunked;}
\r
253 if(IsRequestStarted ())
\r
254 throw new InvalidOperationException("Request has been submitted.");
\r
255 _sendChunked = value;
\r
259 internal virtual ServicePoint ServicePoint
\r
261 get{return _servicePoint;}
\r
264 internal virtual int Timeout
\r
266 get{return _timeout;}
\r
270 throw new ArgumentOutOfRangeException ("value");
\r
276 internal virtual long ContentLength
\r
278 get{return _contentLength;}
\r
282 throw new ArgumentOutOfRangeException("value", "The Content-Length property value must be positive");
\r
283 _contentLength = value;
\r
293 public virtual Uri GetOriginalAddress()
\r
295 return _originalUri;
\r
298 public virtual X509CertificateCollection GetX509Certificates()
\r
300 if(_certificates == null)
\r
301 _certificates = new X509CertificateCollection();
\r
302 return _certificates;
\r
305 public abstract bool IsRequestStarted();
\r
307 public abstract Uri GetAddress();
\r
309 public abstract bool IsHaveResponse();
\r
311 public abstract void Abort();
\r
313 public abstract Stream GetRequestStream();
\r
315 public abstract WebResponse GetResponse();
\r
317 public abstract IAsyncResult BeginGetRequestStream(AsyncCallback callback, object state);
\r
319 public abstract Stream EndGetRequestStream(IAsyncResult asyncResult);
\r
321 public abstract IAsyncResult BeginGetResponse(AsyncCallback callback, object state);
\r
323 public abstract WebResponse EndGetResponse(IAsyncResult asyncResult);
\r