diff options
author | Andrew Arnott <andrewarnott@gmail.com> | 2008-09-09 17:23:26 -0700 |
---|---|---|
committer | Andrew <andrewarnott@gmail.com> | 2008-09-09 17:23:26 -0700 |
commit | 32ac38940a40a70c171eedc72b4aacdbba692279 (patch) | |
tree | af919b96edd57fcf05d9c98fac66edcd807c3e5c /src/DotNetOAuth/Messaging/Channel.cs | |
parent | 6f2ee87f545b26ed320aad94be5fd042c409f5f9 (diff) | |
download | DotNetOpenAuth-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.cs | 76 |
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>
|