diff options
author | Andrew Arnott <andrewarnott@gmail.com> | 2008-09-03 07:38:39 -0700 |
---|---|---|
committer | Andrew <andrewarnott@gmail.com> | 2008-09-03 07:38:39 -0700 |
commit | 2ca76eb03e338554782d66d4c167c8e3cc592d9e (patch) | |
tree | bdaf58067f24cc31a8a5215b6e812b93bad4b6b7 | |
parent | 730b0c4332591e2358263f8e0a767d4a8448831a (diff) | |
download | DotNetOpenAuth-2ca76eb03e338554782d66d4c167c8e3cc592d9e.zip DotNetOpenAuth-2ca76eb03e338554782d66d4c167c8e3cc592d9e.tar.gz DotNetOpenAuth-2ca76eb03e338554782d66d4c167c8e3cc592d9e.tar.bz2 |
A bit of Channel refactoring.
-rw-r--r-- | src/DotNetOAuth.Test/Messaging/ChannelTests.cs | 4 | ||||
-rw-r--r-- | src/DotNetOAuth.Test/Mocks/TestChannel.cs | 4 | ||||
-rw-r--r-- | src/DotNetOAuth/Messaging/Channel.cs | 46 | ||||
-rw-r--r-- | src/DotNetOAuth/OAuthChannel.cs | 52 |
4 files changed, 56 insertions, 50 deletions
diff --git a/src/DotNetOAuth.Test/Messaging/ChannelTests.cs b/src/DotNetOAuth.Test/Messaging/ChannelTests.cs index 3f93cc2..80d38f7 100644 --- a/src/DotNetOAuth.Test/Messaging/ChannelTests.cs +++ b/src/DotNetOAuth.Test/Messaging/ChannelTests.cs @@ -38,7 +38,7 @@ namespace DotNetOAuth.Test.Messaging { Headers = headers,
InputStream = new MemoryStream(),
};
- IProtocolMessage requestMessage = this.channel.Receive(request);
+ IProtocolMessage requestMessage = this.channel.ReadFromRequest(request);
Assert.IsNotNull(requestMessage);
Assert.IsInstanceOfType(requestMessage, typeof(TestMessage));
TestMessage testMessage = (TestMessage)requestMessage;
@@ -64,7 +64,7 @@ namespace DotNetOAuth.Test.Messaging { InputStream = ms,
};
- IProtocolMessage requestMessage = this.channel.Receive(request);
+ IProtocolMessage requestMessage = this.channel.ReadFromRequest(request);
Assert.IsNotNull(requestMessage);
Assert.IsInstanceOfType(requestMessage, typeof(TestMessage));
TestMessage testMessage = (TestMessage)requestMessage;
diff --git a/src/DotNetOAuth.Test/Mocks/TestChannel.cs b/src/DotNetOAuth.Test/Mocks/TestChannel.cs index bc2ed1e..1920a38 100644 --- a/src/DotNetOAuth.Test/Mocks/TestChannel.cs +++ b/src/DotNetOAuth.Test/Mocks/TestChannel.cs @@ -16,11 +16,11 @@ namespace DotNetOAuth.Test.Mocks { : base(new TestMessageTypeProvider()) {
}
- protected override IProtocolMessage Request(IDirectedProtocolMessage request) {
+ protected internal override IProtocolMessage Request(IDirectedProtocolMessage request) {
throw new NotImplementedException();
}
- protected internal override IProtocolMessage Receive(System.IO.Stream responseStream) {
+ protected internal override IProtocolMessage ReadFromResponse(System.IO.Stream responseStream) {
throw new NotImplementedException();
}
diff --git a/src/DotNetOAuth/Messaging/Channel.cs b/src/DotNetOAuth/Messaging/Channel.cs index fe03b5f..825f018 100644 --- a/src/DotNetOAuth/Messaging/Channel.cs +++ b/src/DotNetOAuth/Messaging/Channel.cs @@ -70,14 +70,6 @@ namespace DotNetOAuth.Messaging { }
/// <summary>
- /// Gets or sets the message that came in as a request, if any.
- /// </summary>
- /// <remarks>
- /// This message is used to help determine how to transmit the response.
- /// </remarks>
- internal IProtocolMessage RequestInProcess { get; set; }
-
- /// <summary>
/// Gets a tool that can figure out what kind of message is being received
/// so it can be deserialized.
/// </summary>
@@ -101,6 +93,20 @@ 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");
}
@@ -116,7 +122,7 @@ namespace DotNetOAuth.Messaging { } else {
ProtocolException exception = message as ProtocolException;
if (exception != null) {
- if (this.RequestInProcess is IDirectedProtocolMessage) {
+ if (inResponseTo is IDirectedProtocolMessage) {
this.ReportErrorAsDirectResponse(exception);
} else {
this.ReportErrorToUser(exception);
@@ -135,8 +141,8 @@ namespace DotNetOAuth.Messaging { /// <remarks>
/// Requires an HttpContext.Current context.
/// </remarks>
- internal IProtocolMessage Receive() {
- return this.Receive(new HttpRequestInfo(HttpContext.Current.Request));
+ internal IProtocolMessage ReadFromRequest() {
+ return this.ReadFromRequest(new HttpRequestInfo(HttpContext.Current.Request));
}
/// <summary>
@@ -144,7 +150,7 @@ namespace DotNetOAuth.Messaging { /// </summary>
/// <param name="request">The request to search for an embedded message.</param>
/// <returns>The deserialized message, if one is found. Null otherwise.</returns>
- protected internal virtual IProtocolMessage Receive(HttpRequestInfo request) {
+ protected internal virtual IProtocolMessage ReadFromRequest(HttpRequestInfo request) {
if (request == null) {
throw new ArgumentNullException("request");
}
@@ -163,7 +169,14 @@ namespace DotNetOAuth.Messaging { /// </summary>
/// <param name="responseStream">The response that is anticipated to contain an OAuth message.</param>
/// <returns>The deserialized message, if one is found. Null otherwise.</returns>
- protected internal abstract IProtocolMessage Receive(Stream responseStream);
+ protected internal abstract IProtocolMessage ReadFromResponse(Stream responseStream);
+
+ /// <summary>
+ /// Sends a direct message to a remote party and waits for the response.
+ /// </summary>
+ /// <param name="request">The message to send.</param>
+ /// <returns>The remote party's response.</returns>
+ protected internal abstract IProtocolMessage Request(IDirectedProtocolMessage request);
/// <summary>
/// Deserializes a dictionary of values into a message.
@@ -205,13 +218,6 @@ namespace DotNetOAuth.Messaging { }
/// <summary>
- /// Sends a direct message to a remote party and waits for the response.
- /// </summary>
- /// <param name="request">The message to send.</param>
- /// <returns>The remote party's response.</returns>
- protected abstract IProtocolMessage Request(IDirectedProtocolMessage request);
-
- /// <summary>
/// Queues an indirect message for transmittal via the user agent.
/// </summary>
/// <param name="message">The message to send.</param>
diff --git a/src/DotNetOAuth/OAuthChannel.cs b/src/DotNetOAuth/OAuthChannel.cs index bfd80da..6271954 100644 --- a/src/DotNetOAuth/OAuthChannel.cs +++ b/src/DotNetOAuth/OAuthChannel.cs @@ -30,7 +30,7 @@ namespace DotNetOAuth { /// </summary>
/// <param name="request">The HTTP request to search.</param>
/// <returns>A dictionary of data in the request. Should never be null, but may be empty.</returns>
- protected internal override IProtocolMessage Receive(HttpRequestInfo request) {
+ protected internal override IProtocolMessage ReadFromRequest(HttpRequestInfo request) {
if (request == null) {
throw new ArgumentNullException("request");
}
@@ -62,7 +62,7 @@ namespace DotNetOAuth { }
// We didn't find an OAuth authorization header. Revert to other payload methods.
- return base.Receive(request);
+ return base.ReadFromRequest(request);
}
/// <summary>
@@ -70,7 +70,7 @@ namespace DotNetOAuth { /// </summary>
/// <param name="responseStream">The response that is anticipated to contain an OAuth message.</param>
/// <returns>The deserialized message, if one is found. Null otherwise.</returns>
- protected internal override IProtocolMessage Receive(Stream responseStream) {
+ protected internal override IProtocolMessage ReadFromResponse(Stream responseStream) {
if (responseStream == null) {
throw new ArgumentNullException("responseStream");
}
@@ -83,33 +83,11 @@ namespace DotNetOAuth { }
/// <summary>
- /// Queues a message for sending in the response stream where the fields
- /// are sent in the response stream in querystring style.
- /// </summary>
- /// <param name="response">The message to send as a response.</param>
- /// <remarks>
- /// This method implements spec V1.0 section 5.3.
- /// </remarks>
- protected override void SendDirectMessageResponse(IProtocolMessage response) {
- MessageSerializer serializer = MessageSerializer.Get(response.GetType());
- var fields = serializer.Serialize(response);
- string responseBody = MessagingUtilities.CreateQueryString(fields);
-
- Response encodedResponse = new Response {
- Body = Encoding.UTF8.GetBytes(responseBody),
- OriginalMessage = response,
- Status = System.Net.HttpStatusCode.OK,
- Headers = new System.Net.WebHeaderCollection(),
- };
- this.QueueIndirectOrResponseMessage(encodedResponse);
- }
-
- /// <summary>
/// Sends a direct message to a remote party and waits for the response.
/// </summary>
/// <param name="request">The message to send.</param>
/// <returns>The remote party's response.</returns>
- protected override IProtocolMessage Request(IDirectedProtocolMessage request) {
+ protected internal override IProtocolMessage Request(IDirectedProtocolMessage request) {
if (request == null) {
throw new ArgumentNullException("request");
}
@@ -152,6 +130,28 @@ namespace DotNetOAuth { }
/// <summary>
+ /// Queues a message for sending in the response stream where the fields
+ /// are sent in the response stream in querystring style.
+ /// </summary>
+ /// <param name="response">The message to send as a response.</param>
+ /// <remarks>
+ /// This method implements spec V1.0 section 5.3.
+ /// </remarks>
+ protected override void SendDirectMessageResponse(IProtocolMessage response) {
+ MessageSerializer serializer = MessageSerializer.Get(response.GetType());
+ var fields = serializer.Serialize(response);
+ string responseBody = MessagingUtilities.CreateQueryString(fields);
+
+ Response encodedResponse = new Response {
+ Body = Encoding.UTF8.GetBytes(responseBody),
+ OriginalMessage = response,
+ Status = System.Net.HttpStatusCode.OK,
+ Headers = new System.Net.WebHeaderCollection(),
+ };
+ this.QueueIndirectOrResponseMessage(encodedResponse);
+ }
+
+ /// <summary>
/// Reports an error to the user via the user agent.
/// </summary>
/// <param name="exception">The error information.</param>
|