summaryrefslogtreecommitdiffstats
path: root/src/DotNetOAuth/Messaging/Channel.cs
diff options
context:
space:
mode:
authorAndrew Arnott <andrewarnott@gmail.com>2008-09-09 17:23:26 -0700
committerAndrew <andrewarnott@gmail.com>2008-09-09 17:23:26 -0700
commit32ac38940a40a70c171eedc72b4aacdbba692279 (patch)
treeaf919b96edd57fcf05d9c98fac66edcd807c3e5c /src/DotNetOAuth/Messaging/Channel.cs
parent6f2ee87f545b26ed320aad94be5fd042c409f5f9 (diff)
downloadDotNetOpenAuth-32ac38940a40a70c171eedc72b4aacdbba692279.zip
DotNetOpenAuth-32ac38940a40a70c171eedc72b4aacdbba692279.tar.gz
DotNetOpenAuth-32ac38940a40a70c171eedc72b4aacdbba692279.tar.bz2
Refactored the exception handling in the channel stack.
Diffstat (limited to 'src/DotNetOAuth/Messaging/Channel.cs')
-rw-r--r--src/DotNetOAuth/Messaging/Channel.cs76
1 files changed, 30 insertions, 46 deletions
diff --git a/src/DotNetOAuth/Messaging/Channel.cs b/src/DotNetOAuth/Messaging/Channel.cs
index 2c5e225..2ab3636 100644
--- a/src/DotNetOAuth/Messaging/Channel.cs
+++ b/src/DotNetOAuth/Messaging/Channel.cs
@@ -7,6 +7,8 @@
namespace DotNetOAuth.Messaging {
using System;
using System.Collections.Generic;
+ using System.Diagnostics;
+ using System.Globalization;
using System.IO;
using System.Net;
using System.Text;
@@ -93,44 +95,33 @@ namespace DotNetOAuth.Messaging {
/// </summary>
/// <param name="message">The one-way message to send</param>
internal void Send(IProtocolMessage message) {
- this.Send(message, null);
- }
-
- /// <summary>
- /// Queues an indirect message (either a request or response)
- /// or direct message response for transmission to a remote party.
- /// </summary>
- /// <param name="message">The one-way message to send</param>
- /// <param name="inResponseTo">
- /// If <paramref name="message"/> is a response to an incoming message, this is the incoming message.
- /// This is useful for error scenarios in deciding just how to send the response message.
- /// May be null.
- /// </param>
- internal void Send(IProtocolMessage message, IProtocolMessage inResponseTo) {
if (message == null) {
throw new ArgumentNullException("message");
}
- var directedMessage = message as IDirectedProtocolMessage;
- if (directedMessage == null) {
- // This is a response to a direct message.
- this.SendDirectMessageResponse(message);
- } else {
- if (directedMessage.Recipient != null) {
- // This is an indirect message request or reply.
- this.SendIndirectMessage(directedMessage);
- } else {
- ProtocolException exception = message as ProtocolException;
- if (exception != null) {
- if (inResponseTo is IDirectedProtocolMessage) {
- this.ReportErrorAsDirectResponse(exception);
- } else {
- this.ReportErrorToUser(exception);
- }
- } else {
- throw new InvalidOperationException(MessagingStrings.DirectedMessageMissingRecipient);
+ switch (message.Transport) {
+ case MessageTransport.Direct:
+ // This is a response to a direct message.
+ this.SendDirectMessageResponse(message);
+ break;
+ case MessageTransport.Indirect:
+ var directedMessage = message as IDirectedProtocolMessage;
+ if (directedMessage == null) {
+ throw new ArgumentException(
+ string.Format(
+ CultureInfo.CurrentCulture,
+ MessagingStrings.IndirectMessagesMustImplementIDirectedProtocolMessage,
+ typeof(IDirectedProtocolMessage).FullName),
+ "message");
}
- }
+ if (directedMessage.Recipient == null) {
+ throw new ArgumentException(MessagingStrings.DirectedMessageMissingRecipient, "message");
+ }
+ this.SendIndirectMessage(directedMessage);
+ break;
+ default:
+ Debug.Fail("Unrecogized MessageTransport value.");
+ throw new ArgumentException();
}
}
@@ -249,6 +240,9 @@ namespace DotNetOAuth.Messaging {
if (message == null) {
throw new ArgumentNullException("message");
}
+ if (message.Recipient == null) {
+ throw new ArgumentException(MessagingStrings.DirectedMessageMissingRecipient, "message");
+ }
if (fields == null) {
throw new ArgumentNullException("fields");
}
@@ -279,6 +273,9 @@ namespace DotNetOAuth.Messaging {
if (message == null) {
throw new ArgumentNullException("message");
}
+ if (message.Recipient == null) {
+ throw new ArgumentException(MessagingStrings.DirectedMessageMissingRecipient, "message");
+ }
if (fields == null) {
throw new ArgumentNullException("fields");
}
@@ -319,19 +316,6 @@ namespace DotNetOAuth.Messaging {
protected abstract void SendDirectMessageResponse(IProtocolMessage response);
/// <summary>
- /// Reports an error to the user via the user agent.
- /// </summary>
- /// <param name="exception">The error information.</param>
- protected abstract void ReportErrorToUser(ProtocolException exception);
-
- /// <summary>
- /// Sends an error result directly to the calling remote party according to the
- /// rules of the protocol.
- /// </summary>
- /// <param name="exception">The error information.</param>
- protected abstract void ReportErrorAsDirectResponse(ProtocolException exception);
-
- /// <summary>
/// Calculates a fairly accurate estimation on the size of a message that contains
/// a given set of fields.
/// </summary>