internal override bool IsMatch(BindingElement b)
        {
            if (!base.IsMatch(b))
            {
                return(false);
            }
            TcpRelayTransportBindingElement tcpRelayTransportBindingElement = b as TcpRelayTransportBindingElement;

            if (tcpRelayTransportBindingElement == null)
            {
                return(false);
            }
            if (this.listenBacklog != tcpRelayTransportBindingElement.listenBacklog)
            {
                return(false);
            }
            if (this.transportProtectionEnabled != tcpRelayTransportBindingElement.transportProtectionEnabled)
            {
                return(false);
            }
            if (!this.connectionPoolSettings.IsMatch(tcpRelayTransportBindingElement.connectionPoolSettings))
            {
                return(false);
            }
            return(true);
        }
 public HybridConnectionElement(BindingContext context, TcpRelayTransportBindingElement transportBindingElement, NameSettings nameSettings, TokenProvider tokenProvider)
 {
     this.context                 = context;
     this.nameSettings            = nameSettings;
     this.tokenProvider           = tokenProvider;
     this.transportBindingElement = transportBindingElement;
 }
 protected TcpRelayTransportBindingElement(TcpRelayTransportBindingElement elementToBeCloned) : base(elementToBeCloned)
 {
     this.relayClientAuthenticationType = elementToBeCloned.relayClientAuthenticationType;
     this.relayedConnectionMode         = elementToBeCloned.relayedConnectionMode;
     this.listenBacklog = elementToBeCloned.listenBacklog;
     this.transportProtectionEnabled = elementToBeCloned.transportProtectionEnabled;
     this.connectionPoolSettings     = elementToBeCloned.connectionPoolSettings.Clone();
     this.IsDynamic = elementToBeCloned.IsDynamic;
 }
 private void InitializeFrom(TcpRelayTransportBindingElement transport, BinaryMessageEncodingBindingElement encoding)
 {
     Microsoft.ServiceBus.Diagnostics.DiagnosticUtility.DebugAssert(transport != null, "Invalid (null) transport value.");
     Microsoft.ServiceBus.Diagnostics.DiagnosticUtility.DebugAssert(encoding != null, "Invalid (null) encoding value.");
     this.MaxBufferPoolSize      = transport.MaxBufferPoolSize;
     this.MaxBufferSize          = transport.MaxBufferSize;
     this.MaxConnections         = transport.MaxPendingConnections;
     this.ListenBacklog          = transport.ListenBacklog;
     this.MaxReceivedMessageSize = transport.MaxReceivedMessageSize;
     this.TransferMode           = transport.TransferMode;
     this.transport.TransportProtectionEnabled = transport.TransportProtectionEnabled;
     this.ConnectionMode = transport.ConnectionMode;
     this.ReaderQuotas   = encoding.ReaderQuotas;
 }
        protected bool IsBindingElementsMatch(TcpRelayTransportBindingElement transport, BinaryMessageEncodingBindingElement encoding)
        {
            if (!this.transport.IsMatch(transport))
            {
                return(false);
            }
            Type type = typeof(BindingElement);
            BinaryMessageEncodingBindingElement binaryMessageEncodingBindingElement = this.encoding;

            object[] objArray = new object[] { encoding };
            if (!(bool)InvokeHelper.InvokeInstanceMethod(type, binaryMessageEncodingBindingElement, "IsMatch", objArray))
            {
                return(false);
            }
            return(true);
        }
Пример #6
0
        public HybridConnectionInitiator(BindingContext context, TcpRelayTransportBindingElement transportBindingElement, int bufferSize, TokenProvider tokenProvider, RelayTransportProtectionMode transportProtection)
        {
            this.bufferSize = bufferSize;
            NameSettings nameSetting = new NameSettings();

            nameSetting.ServiceSettings.TransportProtection = transportProtection;
            nameSetting.ServiceSettings.ListenerType        = ListenerType.HybridConnection;
            IConnectionElement relayedSocketElement = new RelayedSocketElement(context, nameSetting, tokenProvider, SocketSecurityRole.None);

            this.relayedSocketInitiator = (new DemuxSocketElement(relayedSocketElement, "relayed")).CreateInitiator(bufferSize);
            IConnectionElement demuxSocketElement = new DemuxSocketElement(relayedSocketElement, "direct");
            Binding            binding            = HybridConnectionElement.CreateDirectControlBindingElement(context, transportBindingElement, demuxSocketElement);

            this.directSocketInitiator = new DirectSocketInitiator(bufferSize, binding);
            this.connectionId          = Guid.NewGuid();
        }
        public HybridConnectionListener(BindingContext context, TcpRelayTransportBindingElement transportBindingElement, int bufferSize, Uri uri, NameSettings nameSettings, TokenProvider tokenProvider)
        {
            this.bufferSize = bufferSize;
            IConnectionElement relayedSocketElement = new RelayedSocketElement(context, nameSettings, tokenProvider, SocketSecurityRole.None);
            DemuxSocketManager demuxSocketManager   = new DemuxSocketManager(relayedSocketElement, bufferSize, uri);
            IConnectionElement demuxSocketElement   = new DemuxSocketElement(relayedSocketElement, "relayed", demuxSocketManager);

            this.relayedSocketListener = demuxSocketElement.CreateListener(bufferSize, uri);
            this.relayedSocketAcceptor = new HybridConnectionListener.ConnectionAcceptor(this, this.relayedSocketListener, HybridConnectionListener.HybridConnectionSocketType.Relayed);
            IConnectionElement connectionElement = new DemuxSocketElement(relayedSocketElement, "direct", demuxSocketManager);
            Binding            binding           = HybridConnectionElement.CreateDirectControlBindingElement(context, transportBindingElement, connectionElement);

            this.directSocketListener = (new DirectSocketElement(binding)).CreateListener(bufferSize, uri);
            this.directSocketAcceptor = new HybridConnectionListener.ConnectionAcceptor(this, this.directSocketListener, HybridConnectionListener.HybridConnectionSocketType.Direct);
            this.connectionQueue      = new InputQueue <HybridConnection>();
            this.connectionTable      = new Dictionary <Guid, HybridConnection>();
        }
Пример #8
0
        private BindingContext CreateInnerListenerBindingContext(BindingContext context)
        {
            BinaryMessageEncodingBindingElement binaryMessageEncodingBindingElement = ClientMessageUtility.CreateInnerEncodingBindingElement(context);
            NameSettings nameSetting = context.BindingParameters.Find <NameSettings>();
            TcpRelayTransportBindingElement tcpRelayTransportBindingElement = new TcpRelayTransportBindingElement(this.RelayClientAuthenticationType)
            {
                ManualAddressing           = base.ManualAddressing,
                HostNameComparisonMode     = this.HostNameComparisonMode,
                MaxBufferPoolSize          = this.MaxBufferPoolSize,
                MaxBufferSize              = this.MaxBufferSize,
                MaxReceivedMessageSize     = this.MaxReceivedMessageSize,
                TransferMode               = System.ServiceModel.TransferMode.Streamed,
                TransportProtectionEnabled = nameSetting.ServiceSettings.TransportProtection != RelayTransportProtectionMode.None
            };

            tcpRelayTransportBindingElement.ConnectionPoolSettings.MaxOutboundConnectionsPerEndpoint = 100;
            tcpRelayTransportBindingElement.IsDynamic = nameSetting.ServiceSettings.IsDynamic;
            BindingElement[] bindingElementArray = new BindingElement[] { binaryMessageEncodingBindingElement, tcpRelayTransportBindingElement };
            CustomBinding    customBinding       = new CustomBinding(bindingElementArray)
            {
                CloseTimeout   = context.Binding.CloseTimeout,
                Name           = context.Binding.Name,
                Namespace      = context.Binding.Namespace,
                OpenTimeout    = context.Binding.OpenTimeout,
                ReceiveTimeout = context.Binding.ReceiveTimeout,
                SendTimeout    = context.Binding.SendTimeout
            };
            BindingParameterCollection bindingParameterCollection = new BindingParameterCollection();

            foreach (object bindingParameter in context.BindingParameters)
            {
                if (bindingParameter is MessageEncodingBindingElement)
                {
                    continue;
                }
                bindingParameterCollection.Add(bindingParameter);
            }
            Uri sbUri = RelayedHttpUtility.ConvertToSbUri(context.ListenUriBaseAddress);

            return(new BindingContext(customBinding, bindingParameterCollection, sbUri, context.ListenUriRelativeAddress, context.ListenUriMode));
        }
Пример #9
0
 protected bool IsBindingElementsMatch(TcpRelayTransportBindingElement transport, BinaryMessageEncodingBindingElement encoding, ReliableSessionBindingElement session)
 {
     if (!base.IsBindingElementsMatch(transport, encoding))
     {
         return(false);
     }
     if (this.reliableSession.Enabled)
     {
         Type type = typeof(BindingElement);
         ReliableSessionBindingElement reliableSessionBindingElement = this.session;
         object[] objArray = new object[] { session };
         if (!(bool)InvokeHelper.InvokeInstanceMethod(type, reliableSessionBindingElement, "IsMatch", objArray))
         {
             return(false);
         }
     }
     else if (session != null)
     {
         return(false);
     }
     return(true);
 }
 private void Initialize()
 {
     this.transport = new TcpRelayTransportBindingElement();
     this.encoding  = new BinaryMessageEncodingBindingElement();
 }
 protected NetTcpRelayBindingBase(TcpRelayTransportBindingElement transport, BinaryMessageEncodingBindingElement encoding, NetTcpRelaySecurity security) : this()
 {
     this.security = security;
     this.InitializeFrom(transport, encoding);
 }
Пример #12
0
 protected NetTcpRelayBinding(TcpRelayTransportBindingElement transport, BinaryMessageEncodingBindingElement encoding, ReliableSessionBindingElement session, NetTcpRelaySecurity security) : base(transport, encoding, security)
 {
     this.Initialize();
     this.ReliableSession.Enabled = session != null;
     this.InitializeFrom(session);
 }
Пример #13
0
        internal static bool TryCreate(BindingElementCollection elements, out Binding binding)
        {
            Microsoft.ServiceBus.UnifiedSecurityMode unifiedSecurityMode;
            NetTcpRelaySecurity netTcpRelaySecurity;

            binding = null;
            if (elements.Count > 5)
            {
                return(false);
            }
            TcpRelayTransportBindingElement     tcpRelayTransportBindingElement     = null;
            BinaryMessageEncodingBindingElement binaryMessageEncodingBindingElement = null;
            ReliableSessionBindingElement       reliableSessionBindingElement       = null;
            SecurityBindingElement securityBindingElement = null;

            foreach (BindingElement element in elements)
            {
                if (element is SecurityBindingElement)
                {
                    securityBindingElement = element as SecurityBindingElement;
                }
                else if (element is TransportBindingElement)
                {
                    tcpRelayTransportBindingElement = element as TcpRelayTransportBindingElement;
                }
                else if (!(element is MessageEncodingBindingElement))
                {
                    if (!(element is ReliableSessionBindingElement))
                    {
                        continue;
                    }
                    reliableSessionBindingElement = element as ReliableSessionBindingElement;
                }
                else
                {
                    binaryMessageEncodingBindingElement = element as BinaryMessageEncodingBindingElement;
                }
            }
            if (tcpRelayTransportBindingElement == null)
            {
                return(false);
            }
            if (binaryMessageEncodingBindingElement == null)
            {
                return(false);
            }
            TcpRelayTransportSecurity tcpRelayTransportSecurity = new TcpRelayTransportSecurity();

            unifiedSecurityMode = (!tcpRelayTransportBindingElement.TransportProtectionEnabled ? Microsoft.ServiceBus.UnifiedSecurityMode.None | Microsoft.ServiceBus.UnifiedSecurityMode.Message : Microsoft.ServiceBus.UnifiedSecurityMode.Transport | Microsoft.ServiceBus.UnifiedSecurityMode.TransportWithMessageCredential);
            if (!NetTcpRelayBindingBase.TryCreateSecurity(securityBindingElement, tcpRelayTransportBindingElement.RelayClientAuthenticationType, unifiedSecurityMode, reliableSessionBindingElement != null, tcpRelayTransportSecurity, out netTcpRelaySecurity))
            {
                return(false);
            }
            NetTcpRelayBinding netTcpRelayBinding = new NetTcpRelayBinding(tcpRelayTransportBindingElement, binaryMessageEncodingBindingElement, reliableSessionBindingElement, netTcpRelaySecurity);

            if (!netTcpRelayBinding.IsBindingElementsMatch(tcpRelayTransportBindingElement, binaryMessageEncodingBindingElement, reliableSessionBindingElement))
            {
                return(false);
            }
            binding = netTcpRelayBinding;
            return(true);
        }
        internal static Binding CreateDirectControlBindingElement(BindingContext context, TcpRelayTransportBindingElement transportBindingElement, IConnectionElement directDemuxSocketElement)
        {
            SocketConnectionBindingElement socketConnectionBindingElement = new SocketConnectionBindingElement(directDemuxSocketElement)
            {
                ChannelInitializationTimeout = transportBindingElement.ChannelInitializationTimeout,
                ConnectionBufferSize         = transportBindingElement.ConnectionBufferSize
            };

            socketConnectionBindingElement.ConnectionPoolSettings.GroupName    = transportBindingElement.ConnectionPoolSettings.GroupName;
            socketConnectionBindingElement.ConnectionPoolSettings.IdleTimeout  = transportBindingElement.ConnectionPoolSettings.IdleTimeout;
            socketConnectionBindingElement.ConnectionPoolSettings.LeaseTimeout = transportBindingElement.ConnectionPoolSettings.LeaseTimeout;
            socketConnectionBindingElement.ConnectionPoolSettings.MaxOutboundConnectionsPerEndpoint = transportBindingElement.ConnectionPoolSettings.MaxOutboundConnectionsPerEndpoint;
            socketConnectionBindingElement.ListenBacklog          = transportBindingElement.ListenBacklog;
            socketConnectionBindingElement.MaxOutputDelay         = transportBindingElement.MaxOutputDelay;
            socketConnectionBindingElement.MaxPendingAccepts      = transportBindingElement.MaxPendingAccepts;
            socketConnectionBindingElement.MaxPendingConnections  = transportBindingElement.MaxPendingConnections;
            socketConnectionBindingElement.ManualAddressing       = false;
            socketConnectionBindingElement.MaxBufferPoolSize      = (long)1048576;
            socketConnectionBindingElement.MaxBufferSize          = 65536;
            socketConnectionBindingElement.MaxReceivedMessageSize = (long)socketConnectionBindingElement.MaxBufferSize;
            socketConnectionBindingElement.TransferMode           = TransferMode.Buffered;
            BindingElement[] bindingElementArray = new BindingElement[] { ClientMessageUtility.CreateInnerEncodingBindingElement(context), socketConnectionBindingElement };
            Binding          customBinding       = new CustomBinding(bindingElementArray)
            {
                CloseTimeout   = context.Binding.CloseTimeout,
                OpenTimeout    = context.Binding.OpenTimeout,
                ReceiveTimeout = context.Binding.ReceiveTimeout,
                SendTimeout    = context.Binding.SendTimeout
            };

            return(customBinding);
        }