summaryrefslogtreecommitdiffstats
path: root/src/DotNetOpenAuth.Core/Messaging/Channel.cs
diff options
context:
space:
mode:
authorAndrew Arnott <andrewarnott@gmail.com>2013-02-09 23:35:41 -0800
committerAndrew Arnott <andrewarnott@gmail.com>2013-02-09 23:35:41 -0800
commitbfb7f04a6c71b54b27763eccf69c3d26c0764272 (patch)
tree13fab874e73a1cf753abcbf1e2d2f40a84bfdc82 /src/DotNetOpenAuth.Core/Messaging/Channel.cs
parent9a0f8c7233f2f42653a9d38255a32f79e34fa985 (diff)
downloadDotNetOpenAuth-bfb7f04a6c71b54b27763eccf69c3d26c0764272.zip
DotNetOpenAuth-bfb7f04a6c71b54b27763eccf69c3d26c0764272.tar.gz
DotNetOpenAuth-bfb7f04a6c71b54b27763eccf69c3d26c0764272.tar.bz2
Fixes OAuthConsumer twitter sample.
Diffstat (limited to 'src/DotNetOpenAuth.Core/Messaging/Channel.cs')
-rw-r--r--src/DotNetOpenAuth.Core/Messaging/Channel.cs62
1 files changed, 33 insertions, 29 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) {