diff options
author | Andrew Arnott <andrewarnott@gmail.com> | 2012-12-31 08:17:25 -0800 |
---|---|---|
committer | Andrew Arnott <andrewarnott@gmail.com> | 2012-12-31 08:17:25 -0800 |
commit | 90b6aa8ba9d15e0254eccf05b73b24f334128654 (patch) | |
tree | 45676300b8dbd27931607958f1b66b4f288c259e /src/DotNetOpenAuth.OpenId/OpenId/XriDiscoveryProxyService.cs | |
parent | 187d3c24b6a76ec0898399f738b3a4f82031ceb0 (diff) | |
download | DotNetOpenAuth-90b6aa8ba9d15e0254eccf05b73b24f334128654.zip DotNetOpenAuth-90b6aa8ba9d15e0254eccf05b73b24f334128654.tar.gz DotNetOpenAuth-90b6aa8ba9d15e0254eccf05b73b24f334128654.tar.bz2 |
Fixes build breaks in DNOA.OpenId.
Diffstat (limited to 'src/DotNetOpenAuth.OpenId/OpenId/XriDiscoveryProxyService.cs')
-rw-r--r-- | src/DotNetOpenAuth.OpenId/OpenId/XriDiscoveryProxyService.cs | 37 |
1 files changed, 26 insertions, 11 deletions
diff --git a/src/DotNetOpenAuth.OpenId/OpenId/XriDiscoveryProxyService.cs b/src/DotNetOpenAuth.OpenId/OpenId/XriDiscoveryProxyService.cs index a3e8345..0f9b746 100644 --- a/src/DotNetOpenAuth.OpenId/OpenId/XriDiscoveryProxyService.cs +++ b/src/DotNetOpenAuth.OpenId/OpenId/XriDiscoveryProxyService.cs @@ -10,7 +10,11 @@ namespace DotNetOpenAuth.OpenId { using System.Diagnostics.CodeAnalysis; using System.Globalization; using System.Linq; + using System.Net.Http; + using System.Runtime.CompilerServices; using System.Text; + using System.Threading; + using System.Threading.Tasks; using System.Xml; using DotNetOpenAuth.Configuration; using DotNetOpenAuth.Messaging; @@ -39,28 +43,34 @@ namespace DotNetOpenAuth.OpenId { /// <summary> /// Initializes a new instance of the <see cref="XriDiscoveryProxyService"/> class. /// </summary> - public XriDiscoveryProxyService() { + public XriDiscoveryProxyService(IHostFactories hostFactories) { + Requires.NotNull(hostFactories, "hostFactories"); + this.HostFactories = hostFactories; } + public IHostFactories HostFactories { get; private set; } + #region IDiscoveryService Members /// <summary> /// Performs discovery on the specified identifier. /// </summary> /// <param name="identifier">The identifier to perform discovery on.</param> - /// <param name="requestHandler">The means to place outgoing HTTP requests.</param> - /// <param name="abortDiscoveryChain">if set to <c>true</c>, no further discovery services will be called for this identifier.</param> + /// <param name="cancellationToken">The cancellation token.</param> /// <returns> /// A sequence of service endpoints yielded by discovery. Must not be null, but may be empty. /// </returns> - public IEnumerable<IdentifierDiscoveryResult> Discover(Identifier identifier, IDirectWebRequestHandler requestHandler, out bool abortDiscoveryChain) { - abortDiscoveryChain = false; + public async Task<IdentifierDiscoveryServiceResult> DiscoverAsync(Identifier identifier, CancellationToken cancellationToken) { + Requires.NotNull(identifier, "identifier"); + var xriIdentifier = identifier as XriIdentifier; if (xriIdentifier == null) { - return Enumerable.Empty<IdentifierDiscoveryResult>(); + return new IdentifierDiscoveryServiceResult(Enumerable.Empty<IdentifierDiscoveryResult>()); } - return DownloadXrds(xriIdentifier, requestHandler).XrdElements.CreateServiceEndpoints(xriIdentifier); + var xrds = await DownloadXrdsAsync(xriIdentifier, this.HostFactories, cancellationToken); + var endpoints = xrds.XrdElements.CreateServiceEndpoints(xriIdentifier); + return new IdentifierDiscoveryServiceResult(endpoints); } #endregion @@ -71,14 +81,19 @@ namespace DotNetOpenAuth.OpenId { /// <param name="identifier">The identifier.</param> /// <param name="requestHandler">The request handler.</param> /// <returns>The XRDS document.</returns> - private static XrdsDocument DownloadXrds(XriIdentifier identifier, IDirectWebRequestHandler requestHandler) { + private static async Task<XrdsDocument> DownloadXrdsAsync(XriIdentifier identifier, IHostFactories hostFactories, CancellationToken cancellationToken) { Requires.NotNull(identifier, "identifier"); - Requires.NotNull(requestHandler, "requestHandler"); + Requires.NotNull(hostFactories, "hostFactories"); + XrdsDocument doc; - using (var xrdsResponse = Yadis.Request(requestHandler, GetXrdsUrl(identifier), identifier.IsDiscoverySecureEndToEnd)) { + using (var xrdsResponse = await Yadis.RequestAsync(GetXrdsUrl(identifier), identifier.IsDiscoverySecureEndToEnd, hostFactories, cancellationToken)) { var readerSettings = MessagingUtilities.CreateUntrustedXmlReaderSettings(); - doc = new XrdsDocument(XmlReader.Create(xrdsResponse.ResponseStream, readerSettings)); + await xrdsResponse.Content.LoadIntoBufferAsync(); + using (var xrdsStream = await xrdsResponse.Content.ReadAsStreamAsync()) { + doc = new XrdsDocument(XmlReader.Create(xrdsStream, readerSettings)); + } } + ErrorUtilities.VerifyProtocol(doc.IsXrdResolutionSuccessful, OpenIdStrings.XriResolutionFailed); return doc; } |