diff options
Diffstat (limited to 'src/DotNetOpenAuth.OpenId/OpenId/IdentifierDiscoveryServices.cs')
-rw-r--r-- | src/DotNetOpenAuth.OpenId/OpenId/IdentifierDiscoveryServices.cs | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/src/DotNetOpenAuth.OpenId/OpenId/IdentifierDiscoveryServices.cs b/src/DotNetOpenAuth.OpenId/OpenId/IdentifierDiscoveryServices.cs index 1b20d4e..a515033 100644 --- a/src/DotNetOpenAuth.OpenId/OpenId/IdentifierDiscoveryServices.cs +++ b/src/DotNetOpenAuth.OpenId/OpenId/IdentifierDiscoveryServices.cs @@ -7,6 +7,9 @@ namespace DotNetOpenAuth.OpenId { using System.Collections.Generic; using System.Linq; + using System.Runtime.CompilerServices; + using System.Threading; + using System.Threading.Tasks; using DotNetOpenAuth.Configuration; using DotNetOpenAuth.Messaging; using Validation; @@ -33,7 +36,7 @@ namespace DotNetOpenAuth.OpenId { Requires.NotNull(host, "host"); this.host = host; - this.discoveryServices.AddRange(OpenIdElement.Configuration.RelyingParty.DiscoveryServices.CreateInstances(true)); + this.discoveryServices.AddRange(OpenIdElement.Configuration.RelyingParty.DiscoveryServices.CreateInstances(true, host.HostFactories)); } /// <summary> @@ -47,16 +50,16 @@ namespace DotNetOpenAuth.OpenId { /// Performs discovery on the specified identifier. /// </summary> /// <param name="identifier">The identifier to discover services for.</param> + /// <param name="cancellationToken">The cancellation token.</param> /// <returns>A non-null sequence of services discovered for the identifier.</returns> - public IEnumerable<IdentifierDiscoveryResult> Discover(Identifier identifier) { + public async Task<IEnumerable<IdentifierDiscoveryResult>> DiscoverAsync(Identifier identifier, CancellationToken cancellationToken) { Requires.NotNull(identifier, "identifier"); IEnumerable<IdentifierDiscoveryResult> results = Enumerable.Empty<IdentifierDiscoveryResult>(); foreach (var discoverer in this.DiscoveryServices) { - bool abortDiscoveryChain; - var discoveryResults = discoverer.Discover(identifier, this.host.WebRequestHandler, out abortDiscoveryChain).CacheGeneratedResults(); - results = results.Concat(discoveryResults); - if (abortDiscoveryChain) { + var discoveryResults = await discoverer.DiscoverAsync(identifier, cancellationToken); + results = results.Concat(discoveryResults.Results.CacheGeneratedResults()); + if (discoveryResults.AbortDiscoveryChain) { Logger.OpenId.InfoFormat("Further discovery on '{0}' was stopped by the {1} discovery service.", identifier, discoverer.GetType().Name); break; } |