diff options
Diffstat (limited to 'src/DotNetOpenId/UntrustedWebRequest.cs')
-rw-r--r-- | src/DotNetOpenId/UntrustedWebRequest.cs | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/src/DotNetOpenId/UntrustedWebRequest.cs b/src/DotNetOpenId/UntrustedWebRequest.cs index a621a65..4ba07af 100644 --- a/src/DotNetOpenId/UntrustedWebRequest.cs +++ b/src/DotNetOpenId/UntrustedWebRequest.cs @@ -8,6 +8,7 @@ namespace DotNetOpenId { using System.Globalization;
using System.IO;
using System.Net;
+ using System.Net.Cache;
using System.Text.RegularExpressions;
using System.Configuration;
using DotNetOpenId.Configuration;
@@ -70,6 +71,16 @@ namespace DotNetOpenId { /// </summary>
public static TimeSpan Timeout { get; set; }
+ /// <summary>
+ /// Gets or sets the default cache policy to use for HTTP requests.
+ /// </summary>
+ internal static RequestCachePolicy DefaultCachePolicy = HttpWebRequest.DefaultCachePolicy;
+
+ /// <summary>
+ /// Gets or sets the cache that can be used for HTTP requests made during identifier discovery.
+ /// </summary>
+ internal static RequestCachePolicy IdentifierDiscoveryCachePolicy = new System.Net.Cache.HttpRequestCachePolicy(System.Net.Cache.HttpRequestCacheLevel.CacheIfAvailable);
+
internal delegate UntrustedWebResponse MockRequestResponse(Uri uri, byte[] body, string[] acceptTypes);
/// <summary>
/// Used in unit testing to mock HTTP responses to expected requests.
@@ -229,10 +240,10 @@ namespace DotNetOpenId { }
internal static UntrustedWebResponse Request(Uri uri, byte[] body, string[] acceptTypes) {
- return Request(uri, body, acceptTypes, false);
+ return Request(uri, body, acceptTypes, false, DefaultCachePolicy);
}
- internal static UntrustedWebResponse Request(Uri uri, byte[] body, string[] acceptTypes, bool requireSsl) {
+ internal static UntrustedWebResponse Request(Uri uri, byte[] body, string[] acceptTypes, bool requireSsl, RequestCachePolicy cachePolicy) {
// Since we may require SSL for every redirect, we handle each redirect manually
// in order to detect and fail if any redirect sends us to an HTTP url.
// We COULD allow automatic redirect in the cases where HTTPS is not required,
@@ -240,7 +251,7 @@ namespace DotNetOpenId { Uri originalRequestUri = uri;
int i;
for (i = 0; i < MaximumRedirections; i++) {
- UntrustedWebResponse response = RequestInternal(uri, body, acceptTypes, requireSsl, false, originalRequestUri);
+ UntrustedWebResponse response = RequestInternal(uri, body, acceptTypes, requireSsl, false, originalRequestUri, cachePolicy);
if (response.StatusCode == HttpStatusCode.MovedPermanently ||
response.StatusCode == HttpStatusCode.Redirect ||
response.StatusCode == HttpStatusCode.RedirectMethod ||
@@ -254,7 +265,7 @@ namespace DotNetOpenId { }
static UntrustedWebResponse RequestInternal(Uri uri, byte[] body, string[] acceptTypes,
- bool requireSsl, bool avoidSendingExpect100Continue, Uri originalRequestUri) {
+ bool requireSsl, bool avoidSendingExpect100Continue, Uri originalRequestUri, RequestCachePolicy cachePolicy) {
if (uri == null) throw new ArgumentNullException("uri");
if (originalRequestUri == null) throw new ArgumentNullException("originalRequestUri");
if (!isUriAllowable(uri)) throw new ArgumentException(string.Format(CultureInfo.CurrentCulture,
@@ -278,6 +289,7 @@ namespace DotNetOpenId { request.ReadWriteTimeout = (int)ReadWriteTimeout.TotalMilliseconds;
request.Timeout = (int)Timeout.TotalMilliseconds;
request.KeepAlive = false;
+ request.CachePolicy = cachePolicy;
request.UserAgent = UserAgentValue;
if (acceptTypes != null)
request.Accept = string.Join(",", acceptTypes);
@@ -313,7 +325,7 @@ namespace DotNetOpenId { if (response != null) {
if (response.StatusCode == HttpStatusCode.ExpectationFailed) {
if (!avoidSendingExpect100Continue) { // must only try this once more
- return RequestInternal(uri, body, acceptTypes, requireSsl, true, originalRequestUri);
+ return RequestInternal(uri, body, acceptTypes, requireSsl, true, originalRequestUri, cachePolicy);
}
}
return getResponse(originalRequestUri, request.RequestUri, response);
|