Author: atsushi
Date: 2007-01-11 03:38:26 -0500 (Thu, 11 Jan 2007)
New Revision: 70837
Modified:
trunk/olive/class/System.ServiceModel/System.ServiceModel.Channels/AsymmetricSecurityBindingElement.cs
trunk/olive/class/System.ServiceModel/System.ServiceModel.Channels/ChangeLog
trunk/olive/class/System.ServiceModel/System.ServiceModel.Channels/MessageSecurityBindingSupport.cs
trunk/olive/class/System.ServiceModel/System.ServiceModel.Channels/SecureMessageGenerator.cs
trunk/olive/class/System.ServiceModel/System.ServiceModel.Channels/SecurityChannelFactory.cs
trunk/olive/class/System.ServiceModel/System.ServiceModel.Channels/SecurityChannelListener.cs
trunk/olive/class/System.ServiceModel/System.ServiceModel.Channels/SecurityOutputChannel.cs
trunk/olive/class/System.ServiceModel/System.ServiceModel.Channels/SecurityRequestChannel.cs
trunk/olive/class/System.ServiceModel/System.ServiceModel.Channels/SecurityRequestContext.cs
trunk/olive/class/System.ServiceModel/System.ServiceModel.Channels/SymmetricSecurityBindingElement.cs
Log:
2007-01-11 Atsushi Enomoto <[EMAIL PROTECTED]>
* MessageSecurityBindingSupport.cs : more refactoring.
Made it abstract and added Initiator- and Recipient- classes.
Several members were moved to those derived types.
* AsymmetricSecurityBindingElement.cs,
SymmetricSecurityBindingElement.cs
SecurityChannelFactory.cs, SecurityChannelListener.cs,
SecurityRequestChannel.cs, SecurityOutputChannel.cs,
SecurityRequestContext.cs, SecureMessageGenerator.cs :
All dependent changes by above. Removed ISecurityChannelSource
which became useless.
Modified:
trunk/olive/class/System.ServiceModel/System.ServiceModel.Channels/AsymmetricSecurityBindingElement.cs
===================================================================
---
trunk/olive/class/System.ServiceModel/System.ServiceModel.Channels/AsymmetricSecurityBindingElement.cs
2007-01-11 07:59:44 UTC (rev 70836)
+++
trunk/olive/class/System.ServiceModel/System.ServiceModel.Channels/AsymmetricSecurityBindingElement.cs
2007-01-11 08:38:26 UTC (rev 70837)
@@ -140,7 +140,7 @@
context.BindingParameters.Find<ChannelProtectionRequirements> ();
return new SecurityChannelFactory<TChannel> (
- context.BuildInnerChannelFactory<TChannel> (),
new MessageSecurityBindingSupport (this, manager, requirements));
+ context.BuildInnerChannelFactory<TChannel> (),
new InitiatorMessageSecurityBindingSupport (new
AsymmetricSecurityBindingElementSupport (this), manager, requirements));
}
[MonoTODO]
@@ -165,7 +165,7 @@
context.BindingParameters.Find<ChannelProtectionRequirements> ();
return new SecurityChannelListener<TChannel> (
- context.BuildInnerChannelListener<TChannel> (),
new MessageSecurityBindingSupport (this, manager, requirements));
+ context.BuildInnerChannelListener<TChannel> (),
new RecipientMessageSecurityBindingSupport (new
AsymmetricSecurityBindingElementSupport (this), manager, requirements));
}
public override BindingElement Clone ()
Modified:
trunk/olive/class/System.ServiceModel/System.ServiceModel.Channels/ChangeLog
===================================================================
---
trunk/olive/class/System.ServiceModel/System.ServiceModel.Channels/ChangeLog
2007-01-11 07:59:44 UTC (rev 70836)
+++
trunk/olive/class/System.ServiceModel/System.ServiceModel.Channels/ChangeLog
2007-01-11 08:38:26 UTC (rev 70837)
@@ -1,5 +1,18 @@
2007-01-11 Atsushi Enomoto <[EMAIL PROTECTED]>
+ * MessageSecurityBindingSupport.cs : more refactoring.
+ Made it abstract and added Initiator- and Recipient- classes.
+ Several members were moved to those derived types.
+ * AsymmetricSecurityBindingElement.cs,
+ SymmetricSecurityBindingElement.cs
+ SecurityChannelFactory.cs, SecurityChannelListener.cs,
+ SecurityRequestChannel.cs, SecurityOutputChannel.cs,
+ SecurityRequestContext.cs, SecureMessageGenerator.cs :
+ All dependent changes by above. Removed ISecurityChannelSource
+ which became useless.
+
+2007-01-11 Atsushi Enomoto <[EMAIL PROTECTED]>
+
* SecureMessageGenerator.cs : encryption parts should exist too.
* AsymmetricSecurityBindingElement.cs
SymmetricSecurityBindingElement.cs,
Modified:
trunk/olive/class/System.ServiceModel/System.ServiceModel.Channels/MessageSecurityBindingSupport.cs
===================================================================
---
trunk/olive/class/System.ServiceModel/System.ServiceModel.Channels/MessageSecurityBindingSupport.cs
2007-01-11 07:59:44 UTC (rev 70836)
+++
trunk/olive/class/System.ServiceModel/System.ServiceModel.Channels/MessageSecurityBindingSupport.cs
2007-01-11 08:38:26 UTC (rev 70837)
@@ -66,39 +66,28 @@
}
}
- internal class MessageSecurityBindingSupport
+ internal abstract class MessageSecurityBindingSupport
{
SecurityTokenManager manager;
ChannelProtectionRequirements requirements;
SecurityTokenSerializer serializer;
+ SecurityBindingElementSupport element_support;
// only filled at prepared state.
- SecurityToken encryption_token;
- SecurityToken signing_token;
- SecurityTokenAuthenticator authenticator;
- SecurityTokenResolver auth_token_resolver;
- ChannelFactoryBase factory; // only for client
- ChannelListenerBase listener; // only for service
- SecurityBindingElementSupport element_support;
+ internal SecurityToken encryption_token;
+ internal SecurityToken signing_token;
+ internal SecurityTokenAuthenticator authenticator;
+ internal SecurityTokenResolver auth_token_resolver;
- public MessageSecurityBindingSupport (
- AsymmetricSecurityBindingElement element,
+ protected MessageSecurityBindingSupport (
+ SecurityBindingElementSupport elementSupport,
SecurityTokenManager manager,
ChannelProtectionRequirements requirements)
{
- element_support = new
AsymmetricSecurityBindingElementSupport (element);
+ element_support = elementSupport;
Initialize (manager, requirements);
}
- public MessageSecurityBindingSupport (
- SymmetricSecurityBindingElement element,
- SecurityTokenManager manager,
- ChannelProtectionRequirements requirements)
- {
- element_support = new
SymmetricSecurityBindingElementSupport (element);
- Initialize (manager, requirements);
- }
-
public void Initialize (SecurityTokenManager manager,
ChannelProtectionRequirements requirements)
{
@@ -181,9 +170,22 @@
{
return manager.CreateSecurityTokenAuthenticator
(requirement, out resolver);
}
+ }
- public void ClientPrepare (ChannelFactoryBase factory,
EndpointAddress address)
+ internal class InitiatorMessageSecurityBindingSupport :
MessageSecurityBindingSupport
+ {
+ ChannelFactoryBase factory;
+
+ public InitiatorMessageSecurityBindingSupport (
+ SecurityBindingElementSupport elementSupport,
+ SecurityTokenManager manager,
+ ChannelProtectionRequirements requirements)
+ : base (elementSupport, manager, requirements)
{
+ }
+
+ public void Prepare (ChannelFactoryBase factory,
EndpointAddress address)
+ {
this.factory = factory;
SecurityTokenRequirement r = new
RecipientServiceModelSecurityTokenRequirement ();
@@ -195,7 +197,7 @@
signing_token = GetSigningToken (address,
InitiatorParameters);
}
- public void ClientRelease ()
+ public void Release ()
{
authenticator = null;
@@ -271,36 +273,6 @@
}
}
- public void ServicePrepare (Uri listenUri, ChannelListenerBase
listener)
- {
- this.listener = listener;
-
- SecurityTokenRequirement r = new
RecipientServiceModelSecurityTokenRequirement ();
-
RecipientParameters.CallInitializeSecurityTokenRequirement (r);
-
- authenticator = CreateTokenAuthenticator (r, out
auth_token_resolver);
-
- encryption_token = GetEncryptionToken (listenUri,
InitiatorParameters);
- signing_token = GetSigningToken (listenUri,
RecipientParameters);
- }
-
- public void ServiceRelease ()
- {
- authenticator = null;
-
- IDisposable disposable = signing_token as IDisposable;
- if (disposable != null)
- disposable.Dispose ();
- signing_token = null;
-
- disposable = encryption_token as IDisposable;
- if (disposable != null)
- disposable.Dispose ();
- encryption_token = null;
-
- this.listener = null;
- }
-
public SupportingTokenInfoCollection
CollectInitiatorSupportingTokens (
string action,
EndpointAddress to)
@@ -335,7 +307,50 @@
foreach (SecurityTokenParameters p in s.SignedEncrypted)
l.Add (new SupportingTokenInfo
(GetEncryptionToken (to, p), SecurityTokenAttachmentMode.SignedEncrypted,
required));
}
+ }
+ class RecipientMessageSecurityBindingSupport :
MessageSecurityBindingSupport
+ {
+ ChannelListenerBase listener;
+
+ public RecipientMessageSecurityBindingSupport (
+ SecurityBindingElementSupport elementSupport,
+ SecurityTokenManager manager,
+ ChannelProtectionRequirements requirements)
+ : base (elementSupport, manager, requirements)
+ {
+ }
+
+ public void Prepare (Uri listenUri, ChannelListenerBase
listener)
+ {
+ this.listener = listener;
+
+ SecurityTokenRequirement r = new
RecipientServiceModelSecurityTokenRequirement ();
+
RecipientParameters.CallInitializeSecurityTokenRequirement (r);
+
+ authenticator = CreateTokenAuthenticator (r, out
auth_token_resolver);
+
+ encryption_token = GetEncryptionToken (listenUri,
InitiatorParameters);
+ signing_token = GetSigningToken (listenUri,
RecipientParameters);
+ }
+
+ public void Release ()
+ {
+ authenticator = null;
+
+ IDisposable disposable = signing_token as IDisposable;
+ if (disposable != null)
+ disposable.Dispose ();
+ signing_token = null;
+
+ disposable = encryption_token as IDisposable;
+ if (disposable != null)
+ disposable.Dispose ();
+ encryption_token = null;
+
+ this.listener = null;
+ }
+
public SupportingTokenInfoCollection
CollectRecipientSupportingTokens (
string action,
Uri listenUri)
Modified:
trunk/olive/class/System.ServiceModel/System.ServiceModel.Channels/SecureMessageGenerator.cs
===================================================================
---
trunk/olive/class/System.ServiceModel/System.ServiceModel.Channels/SecureMessageGenerator.cs
2007-01-11 07:59:44 UTC (rev 70836)
+++
trunk/olive/class/System.ServiceModel/System.ServiceModel.Channels/SecureMessageGenerator.cs
2007-01-11 08:38:26 UTC (rev 70837)
@@ -52,18 +52,11 @@
internal class InitiatorMessageSecurityGenerator :
MessageSecurityGenerator
{
EndpointAddress message_to;
+ InitiatorMessageSecurityBindingSupport security;
public InitiatorMessageSecurityGenerator (
Message msg,
- ISecurityChannelSource securitySource,
- EndpointAddress remoteAddress)
- : this (msg, securitySource.Support, remoteAddress)
- {
- }
-
- public InitiatorMessageSecurityGenerator (
- Message msg,
- MessageSecurityBindingSupport security,
+ InitiatorMessageSecurityBindingSupport security,
EndpointAddress messageTo)
: base (msg, security)
{
@@ -72,6 +65,7 @@
if
(!security.InitiatorParameters.InternalHasAsymmetricKey)
throw new InvalidOperationException ("Wrong
security token parameters: it must have an asymmetric key (HasAsymmetricKey).
There is likely a misconfiguration in the custom security binding element.");
+ this.security = security;
this.message_to = messageTo;
}
@@ -107,20 +101,22 @@
public override SupportingTokenInfoCollection
CollectInitiatorSupportingTokens ()
{
- return Security.CollectInitiatorSupportingTokens
(GetAction (), MessageTo);
+ return security.CollectInitiatorSupportingTokens
(GetAction (), MessageTo);
}
}
internal class RecipientMessageSecurityGenerator :
MessageSecurityGenerator
{
+ RecipientMessageSecurityBindingSupport security;
Uri listen_uri;
public RecipientMessageSecurityGenerator (
Message msg,
- MessageSecurityBindingSupport security,
+ RecipientMessageSecurityBindingSupport security,
Uri listenUri)
: base (msg, security)
{
+ this.security = security;
this.listen_uri = listenUri;
}
@@ -156,7 +152,7 @@
public override SupportingTokenInfoCollection
CollectInitiatorSupportingTokens ()
{
- return Security.CollectRecipientSupportingTokens
(GetAction (), listen_uri);
+ return security.CollectRecipientSupportingTokens
(GetAction (), listen_uri);
}
}
Modified:
trunk/olive/class/System.ServiceModel/System.ServiceModel.Channels/SecurityChannelFactory.cs
===================================================================
---
trunk/olive/class/System.ServiceModel/System.ServiceModel.Channels/SecurityChannelFactory.cs
2007-01-11 07:59:44 UTC (rev 70836)
+++
trunk/olive/class/System.ServiceModel/System.ServiceModel.Channels/SecurityChannelFactory.cs
2007-01-11 08:38:26 UTC (rev 70837)
@@ -50,17 +50,17 @@
internal class SecurityChannelFactory<TChannel> :
ChannelFactoryBase<TChannel>
{
IChannelFactory<TChannel> inner;
- MessageSecurityBindingSupport security;
+ InitiatorMessageSecurityBindingSupport security;
public SecurityChannelFactory (
IChannelFactory<TChannel> innerFactory,
- MessageSecurityBindingSupport security)
+ InitiatorMessageSecurityBindingSupport security)
{
this.inner = innerFactory;
this.security = security;
}
- public MessageSecurityBindingSupport SecuritySupport {
+ public InitiatorMessageSecurityBindingSupport SecuritySupport {
get { return security; }
}
Modified:
trunk/olive/class/System.ServiceModel/System.ServiceModel.Channels/SecurityChannelListener.cs
===================================================================
---
trunk/olive/class/System.ServiceModel/System.ServiceModel.Channels/SecurityChannelListener.cs
2007-01-11 07:59:44 UTC (rev 70836)
+++
trunk/olive/class/System.ServiceModel/System.ServiceModel.Channels/SecurityChannelListener.cs
2007-01-11 08:38:26 UTC (rev 70837)
@@ -42,17 +42,17 @@
where TChannel : class, IChannel
{
IChannelListener<TChannel> inner;
- MessageSecurityBindingSupport security;
+ RecipientMessageSecurityBindingSupport security;
public SecurityChannelListener (
IChannelListener<TChannel> innerListener,
- MessageSecurityBindingSupport security)
+ RecipientMessageSecurityBindingSupport security)
{
inner = innerListener;
this.security = security;
}
- public MessageSecurityBindingSupport SecuritySupport {
+ public RecipientMessageSecurityBindingSupport SecuritySupport {
get { return security; }
}
@@ -65,12 +65,12 @@
void AcquireTokens ()
{
- security.ServicePrepare (inner.Uri, this);
+ security.Prepare (inner.Uri, this);
}
void ReleaseTokens ()
{
- security.ServiceRelease ();
+ security.Release ();
}
// ChannelListenerBase
Modified:
trunk/olive/class/System.ServiceModel/System.ServiceModel.Channels/SecurityOutputChannel.cs
===================================================================
---
trunk/olive/class/System.ServiceModel/System.ServiceModel.Channels/SecurityOutputChannel.cs
2007-01-11 07:59:44 UTC (rev 70836)
+++
trunk/olive/class/System.ServiceModel/System.ServiceModel.Channels/SecurityOutputChannel.cs
2007-01-11 08:38:26 UTC (rev 70837)
@@ -47,7 +47,7 @@
namespace System.ServiceModel.Channels
{
- class SecurityOutputChannel : SecurityOutputChannelBase,
ISecurityChannelSource
+ class SecurityOutputChannel : SecurityOutputChannelBase
{
SecurityChannelFactory<IOutputChannel> source;
@@ -55,19 +55,15 @@
: base (innerChannel)
{
this.source = source;
- InitializeSecurityFunctionality (this);
+ InitializeSecurityFunctionality
(source.SecuritySupport);
}
public override ChannelFactoryBase Factory {
get { return source; }
}
-
- public MessageSecurityBindingSupport Support {
- get { return source.SecuritySupport; }
- }
}
- class SecurityOutputSessionChannel : SecurityOutputChannelBase,
ISecurityChannelSource
+ class SecurityOutputSessionChannel : SecurityOutputChannelBase
{
SecurityChannelFactory<IOutputSessionChannel> source;
@@ -75,21 +71,17 @@
: base (innerChannel)
{
this.source = source;
- InitializeSecurityFunctionality (this);
+ InitializeSecurityFunctionality
(source.SecuritySupport);
}
public override ChannelFactoryBase Factory {
get { return source; }
}
-
- public MessageSecurityBindingSupport Support {
- get { return source.SecuritySupport; }
- }
}
abstract class SecurityOutputChannelBase : LayeredOutputChannel
{
- ISecurityChannelSource security;
+ InitiatorMessageSecurityBindingSupport security;
protected SecurityOutputChannelBase (IOutputChannel
innerChannel)
: base (innerChannel)
@@ -98,9 +90,9 @@
Closing += new EventHandler (ReleaseSecurityKey);
}
- protected void InitializeSecurityFunctionality
(ISecurityChannelSource source)
+ protected void InitializeSecurityFunctionality
(InitiatorMessageSecurityBindingSupport security)
{
- this.security = source;
+ this.security = security;
}
protected override IAsyncResult OnBeginSend (Message message,
TimeSpan timeout, AsyncCallback callback, object state)
@@ -128,12 +120,12 @@
void AcquireSecurityKey (object o, EventArgs e)
{
- security.Support.ClientPrepare (Factory, RemoteAddress);
+ security.Prepare (Factory, RemoteAddress);
}
void ReleaseSecurityKey (object o, EventArgs e)
{
- security.Support.ClientRelease ();
+ security.Release ();
}
}
}
Modified:
trunk/olive/class/System.ServiceModel/System.ServiceModel.Channels/SecurityRequestChannel.cs
===================================================================
---
trunk/olive/class/System.ServiceModel/System.ServiceModel.Channels/SecurityRequestChannel.cs
2007-01-11 07:59:44 UTC (rev 70836)
+++
trunk/olive/class/System.ServiceModel/System.ServiceModel.Channels/SecurityRequestChannel.cs
2007-01-11 08:38:26 UTC (rev 70837)
@@ -52,7 +52,7 @@
MessageSecurityBindingSupport Support { get; }
}
- class SecurityRequestChannel : SecurityRequestChannelBase,
ISecurityChannelSource
+ class SecurityRequestChannel : SecurityRequestChannelBase
{
SecurityChannelFactory<IRequestChannel> source;
@@ -60,19 +60,15 @@
: base (innerChannel)
{
this.source = source;
- InitializeSecurityFunctionality (this);
+ InitializeSecurityFunctionality
(source.SecuritySupport);
}
public override ChannelFactoryBase Factory {
get { return source; }
}
-
- public MessageSecurityBindingSupport Support {
- get { return source.SecuritySupport; }
- }
}
- class SecurityRequestSessionChannel : SecurityRequestChannelBase,
ISecurityChannelSource
+ class SecurityRequestSessionChannel : SecurityRequestChannelBase
{
SecurityChannelFactory<IRequestSessionChannel> source;
@@ -80,21 +76,17 @@
: base (innerChannel)
{
this.source = source;
- InitializeSecurityFunctionality (this);
+ InitializeSecurityFunctionality
(source.SecuritySupport);
}
public override ChannelFactoryBase Factory {
get { return source; }
}
-
- public MessageSecurityBindingSupport Support {
- get { return source.SecuritySupport; }
- }
}
abstract class SecurityRequestChannelBase : LayeredRequestChannel
{
- ISecurityChannelSource security;
+ InitiatorMessageSecurityBindingSupport security;
protected SecurityRequestChannelBase (IRequestChannel
innerChannel)
: base (innerChannel)
@@ -103,9 +95,9 @@
Closing += new EventHandler (ReleaseSecurityKey);
}
- protected void InitializeSecurityFunctionality
(ISecurityChannelSource source)
+ protected void InitializeSecurityFunctionality
(InitiatorMessageSecurityBindingSupport security)
{
- this.security = source;
+ this.security = security;
}
protected override IAsyncResult OnBeginRequest (Message
message, TimeSpan timeout, AsyncCallback callback, object state)
@@ -137,17 +129,17 @@
{
// FIXME: provide correct parameters
return MessageSecurityUtility.DecryptMessage (
- message, security.Support);
+ message, security);
}
void AcquireSecurityKey (object o, EventArgs e)
{
- security.Support.ClientPrepare (Factory, RemoteAddress);
+ security.Prepare (Factory, RemoteAddress);
}
void ReleaseSecurityKey (object o, EventArgs e)
{
- security.Support.ClientRelease ();
+ security.Release ();
}
}
}
Modified:
trunk/olive/class/System.ServiceModel/System.ServiceModel.Channels/SecurityRequestContext.cs
===================================================================
---
trunk/olive/class/System.ServiceModel/System.ServiceModel.Channels/SecurityRequestContext.cs
2007-01-11 07:59:44 UTC (rev 70836)
+++
trunk/olive/class/System.ServiceModel/System.ServiceModel.Channels/SecurityRequestContext.cs
2007-01-11 08:38:26 UTC (rev 70837)
@@ -45,7 +45,7 @@
{
internal class SecurityRequestContext : RequestContext
{
- MessageSecurityBindingSupport security;
+ RecipientMessageSecurityBindingSupport security;
SecurityReplyChannel channel;
RequestContext source;
Message msg;
Modified:
trunk/olive/class/System.ServiceModel/System.ServiceModel.Channels/SymmetricSecurityBindingElement.cs
===================================================================
---
trunk/olive/class/System.ServiceModel/System.ServiceModel.Channels/SymmetricSecurityBindingElement.cs
2007-01-11 07:59:44 UTC (rev 70836)
+++
trunk/olive/class/System.ServiceModel/System.ServiceModel.Channels/SymmetricSecurityBindingElement.cs
2007-01-11 08:38:26 UTC (rev 70837)
@@ -118,7 +118,7 @@
context.BindingParameters.Find<ChannelProtectionRequirements> ();
return new SecurityChannelFactory<TChannel> (
- context.BuildInnerChannelFactory<TChannel> (),
new MessageSecurityBindingSupport (this, manager, requirements));
+ context.BuildInnerChannelFactory<TChannel> (),
new InitiatorMessageSecurityBindingSupport (new
SymmetricSecurityBindingElementSupport (this), manager, requirements));
}
[MonoTODO]
@@ -140,7 +140,7 @@
context.BindingParameters.Find<ChannelProtectionRequirements> ();
return new SecurityChannelListener<TChannel> (
- context.BuildInnerChannelListener<TChannel> (),
new MessageSecurityBindingSupport (this, manager, requirements));
+ context.BuildInnerChannelListener<TChannel> (),
new RecipientMessageSecurityBindingSupport (new
SymmetricSecurityBindingElementSupport (this), manager, requirements));
}
public override BindingElement Clone ()
_______________________________________________
Mono-patches maillist - [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches