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); }
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>(); }
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)); }
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); }
protected NetTcpRelayBinding(TcpRelayTransportBindingElement transport, BinaryMessageEncodingBindingElement encoding, ReliableSessionBindingElement session, NetTcpRelaySecurity security) : base(transport, encoding, security) { this.Initialize(); this.ReliableSession.Enabled = session != null; this.InitializeFrom(session); }
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); }