summaryrefslogtreecommitdiffstats
path: root/src/DotNetOpenAuth.Core
diff options
context:
space:
mode:
Diffstat (limited to 'src/DotNetOpenAuth.Core')
-rw-r--r--src/DotNetOpenAuth.Core/Messaging/Channel.cs62
-rw-r--r--src/DotNetOpenAuth.Core/Messaging/MessagingUtilities.cs4
2 files changed, 33 insertions, 33 deletions
diff --git a/src/DotNetOpenAuth.Core/Messaging/Channel.cs b/src/DotNetOpenAuth.Core/Messaging/Channel.cs
index 359257c..5420e5f 100644
--- a/src/DotNetOpenAuth.Core/Messaging/Channel.cs
+++ b/src/DotNetOpenAuth.Core/Messaging/Channel.cs
@@ -280,7 +280,7 @@ namespace DotNetOpenAuth.Messaging {
/// </summary>
/// <param name="message">The one-way message to send</param>
/// <returns>The pending user agent redirect based message to be sent as an HttpResponse.</returns>
- public async Task<HttpResponseMessage> PrepareResponseAsync(IProtocolMessage message, CancellationToken cancellationToken) {
+ public async Task<HttpResponseMessage> PrepareResponseAsync(IProtocolMessage message, CancellationToken cancellationToken = default(CancellationToken)) {
Requires.NotNull(message, "message");
await this.ProcessOutgoingMessageAsync(message, cancellationToken);
@@ -664,38 +664,42 @@ namespace DotNetOpenAuth.Messaging {
}
}
- IDictionary<string, string> responseFields;
- IDirectResponseProtocolMessage responseMessage;
-
- using (var httpClient = this.HostFactories.CreateHttpClient()) {
- try {
- using (HttpResponseMessage response = await httpClient.SendAsync(webRequest, cancellationToken)) {
- response.EnsureSuccessStatusCode();
- if (response.Content == null) {
- return null;
- }
-
- responseFields = await this.ReadFromResponseCoreAsync(response);
- if (responseFields == null) {
- return null;
- }
-
- responseMessage = this.MessageFactory.GetNewResponseMessage(request, responseFields);
- if (responseMessage == null) {
- return null;
+ try {
+ using (var httpClient = this.HostFactories.CreateHttpClient()) {
+ using (var response = await httpClient.SendAsync(webRequest, cancellationToken)) {
+ if (response.IsSuccessStatusCode) {
+ if (response.Content == null) {
+ return null;
+ }
+
+ var responseFields = await this.ReadFromResponseCoreAsync(response);
+ if (responseFields == null) {
+ return null;
+ }
+
+ var responseMessage = this.MessageFactory.GetNewResponseMessage(request, responseFields);
+ if (responseMessage == null) {
+ return null;
+ }
+
+ this.OnReceivingDirectResponse(response, responseMessage);
+
+ var messageAccessor = this.MessageDescriptions.GetAccessor(responseMessage);
+ messageAccessor.Deserialize(responseFields);
+
+ return responseMessage;
+ } else {
+ var errorContent = await response.Content.ReadAsStringAsync();
+ Logger.Http.ErrorFormat(
+ "Error received in HTTP response: {0} {1}\n{2}", (int)response.StatusCode, response.ReasonPhrase, errorContent);
+ response.EnsureSuccessStatusCode(); // throw so we can wrap it in our catch block.
+ throw Assumes.NotReachable();
}
-
- this.OnReceivingDirectResponse(response, responseMessage);
}
- } catch (HttpRequestException ex) {
- throw ErrorUtilities.Wrap(ex, "Error sending HTTP request or receiving response.");
}
+ } catch (HttpRequestException requestException) {
+ throw ErrorUtilities.Wrap(requestException, "Error sending HTTP request or receiving response.");
}
-
- var messageAccessor = this.MessageDescriptions.GetAccessor(responseMessage);
- messageAccessor.Deserialize(responseFields);
-
- return responseMessage;
}
protected virtual HttpMessageHandler WrapMessageHandler(HttpMessageHandler innerHandler) {
diff --git a/src/DotNetOpenAuth.Core/Messaging/MessagingUtilities.cs b/src/DotNetOpenAuth.Core/Messaging/MessagingUtilities.cs
index 4740b4b..5286f84 100644
--- a/src/DotNetOpenAuth.Core/Messaging/MessagingUtilities.cs
+++ b/src/DotNetOpenAuth.Core/Messaging/MessagingUtilities.cs
@@ -392,10 +392,6 @@ namespace DotNetOpenAuth.Messaging {
responseContext = new HttpResponseWrapper(HttpContext.Current.Response);
}
- if (!cancellationToken.CanBeCanceled) {
- cancellationToken = responseContext.ClientDisconnectedToken;
- }
-
responseContext.StatusCode = (int)response.StatusCode;
responseContext.StatusDescription = response.ReasonPhrase;
foreach (var header in response.Headers) {