コード例 #1
0
 public WebSocketRelayedConnectionListener(TokenProvider tokenProvider, SocketSecurityRole socketSecurityMode, NameSettings nameSettings, BindingContext context)
 {
     this.tokenProvider            = tokenProvider;
     this.nameSettings             = nameSettings;
     this.serviceHost              = new ConfigurationlessServiceHost(this, new Uri[0]);
     this.innerConnectionStatus    = new ConnectionStatusBehavior();
     this.connectivitySettings     = context.BindingParameters.Find <ConnectivitySettings>();
     this.httpConnectivitySettings = context.BindingParameters.Find <HttpConnectivitySettings>();
 }
コード例 #2
0
            public RelayedOnewayAmqpListenerClient(BindingContext context, RelayedOnewayTransportBindingElement transportBindingElement, System.Uri uri, RelayedOnewayListener listener, EventTraceActivity activity) : base(context, transportBindingElement, uri, true, activity)
            {
                this.listener = listener;
                BinaryMessageEncodingBindingElement binaryMessageEncodingBindingElement = ClientMessageUtility.CreateInnerEncodingBindingElement(context);

                this.encoder                  = binaryMessageEncodingBindingElement.CreateMessageEncoderFactory().Encoder;
                this.messageWrapper           = new MessageWrapper(this.encoder);
                this.bufferManager            = BufferManager.CreateBufferManager(transportBindingElement.MaxBufferPoolSize, transportBindingElement.MaxBufferSize);
                base.IsListener               = true;
                this.connectivitySettings     = context.BindingParameters.Find <ConnectivitySettings>();
                this.httpConnectivitySettings = context.BindingParameters.Find <HttpConnectivitySettings>();
            }
コード例 #3
0
        public RelayedSocketElement(BindingContext context, NameSettings nameSettings, TokenProvider tokenProvider, SocketSecurityRole socketSecurityMode)
        {
            this.context            = context;
            this.nameSettings       = nameSettings;
            this.tokenProvider      = tokenProvider;
            this.socketSecurityMode = socketSecurityMode;
            ConnectivitySettingsEndpointBehavior connectivitySettingsEndpointBehavior = null;
            ConnectivitySettings     connectivitySetting     = this.context.BindingParameters.Find <ConnectivitySettings>();
            HttpConnectivitySettings httpConnectivitySetting = this.context.BindingParameters.Find <HttpConnectivitySettings>();

            if (connectivitySetting != null || httpConnectivitySetting != null)
            {
                connectivitySettingsEndpointBehavior = new ConnectivitySettingsEndpointBehavior(connectivitySetting, httpConnectivitySetting);
            }
            this.connectionListener = new RelayedSocketListener(this.tokenProvider, this.nameSettings, this.socketSecurityMode, connectivitySettingsEndpointBehavior);
        }
コード例 #4
0
 public AmqpRelay(Uri serviceBusUri, TokenProvider tokenProvider, ConnectivitySettings connectivitySettings = null, HttpConnectivitySettings httpConnectivitySettings = null)
 {
     this.serviceBusUri = serviceBusUri;
     if (tokenProvider != null)
     {
         this.tokenRenewer = new AmqpRelay.TokenRenewer(tokenProvider, this.serviceBusUri.AbsoluteUri, "Listen");
     }
     this.RelayClientAuthorizationRequired = true;
     this.IsDynamic                = true;
     this.State                    = AmqpObjectState.Start;
     this.ListenerType             = Microsoft.ServiceBus.ListenerType.RoutedHttp;
     this.onAmqpObjectClosed       = new EventHandler(this.OnAmqpObjectClosed);
     this.ThisLock                 = new object();
     this.connectivitySettings     = connectivitySettings;
     this.httpConnectivitySettings = httpConnectivitySettings;
     this.activity                 = new EventTraceActivity();
 }
コード例 #5
0
 public ConnectivitySettingsEndpointBehavior(ConnectivitySettings connectivitySettings, HttpConnectivitySettings httpConnectivitySettings)
 {
     this.connectivitySettings     = connectivitySettings;
     this.httpConnectivitySettings = httpConnectivitySettings;
 }
コード例 #6
0
        private BindingElement BuildInnerBindingElement(BindingContext context)
        {
            SocketConnectionBindingElement socketConnectionBindingElement = null;
            NameSettings nameSetting = context.BindingParameters.Find <NameSettings>();
            NameSettings relayClientAuthenticationType = nameSetting;

            if (nameSetting == null)
            {
                relayClientAuthenticationType = new NameSettings();
                context.BindingParameters.Add(relayClientAuthenticationType);
            }
            relayClientAuthenticationType.ServiceSettings.TransportProtection           = (this.transportProtectionEnabled ? RelayTransportProtectionMode.EndToEnd : RelayTransportProtectionMode.None);
            relayClientAuthenticationType.ServiceSettings.RelayClientAuthenticationType = this.RelayClientAuthenticationType;
            relayClientAuthenticationType.ServiceSettings.IsDynamic = this.IsDynamic;
            TokenProvider tokenProvider = TokenProviderUtility.CreateTokenProvider(context);

            switch (this.relayedConnectionMode)
            {
            case TcpRelayConnectionMode.Relayed:
            {
                if (relayClientAuthenticationType.ServiceSettings.ListenerType != ListenerType.RelayedHttp)
                {
                    relayClientAuthenticationType.ServiceSettings.ListenerType = ListenerType.RelayedConnection;
                }
                ConnectivitySettings     connectivitySetting     = context.BindingParameters.Find <ConnectivitySettings>();
                HttpConnectivitySettings httpConnectivitySetting = context.BindingParameters.Find <HttpConnectivitySettings>();
                socketConnectionBindingElement = new SocketConnectionBindingElement(new ConnectivityModeConnectionElement(tokenProvider, (this.transportProtectionEnabled ? SocketSecurityRole.SslClient : SocketSecurityRole.None), context, relayClientAuthenticationType, connectivitySetting, httpConnectivitySetting));
                break;
            }

            case TcpRelayConnectionMode.Hybrid:
            {
                if (base.ChannelInitializationTimeout < TimeSpan.FromSeconds(60))
                {
                    base.ChannelInitializationTimeout = TimeSpan.FromSeconds(60);
                }
                relayClientAuthenticationType.ServiceSettings.ListenerType = ListenerType.DirectConnection;
                socketConnectionBindingElement = new SocketConnectionBindingElement(new HybridConnectionElement(context, this, relayClientAuthenticationType, tokenProvider));
                break;
            }

            default:
            {
                goto case TcpRelayConnectionMode.Relayed;
            }
            }
            socketConnectionBindingElement.ChannelInitializationTimeout        = base.ChannelInitializationTimeout;
            socketConnectionBindingElement.ConnectionBufferSize                = base.ConnectionBufferSize;
            socketConnectionBindingElement.ConnectionPoolSettings.GroupName    = this.ConnectionPoolSettings.GroupName;
            socketConnectionBindingElement.ConnectionPoolSettings.IdleTimeout  = this.ConnectionPoolSettings.IdleTimeout;
            socketConnectionBindingElement.ConnectionPoolSettings.LeaseTimeout = this.ConnectionPoolSettings.LeaseTimeout;
            socketConnectionBindingElement.ConnectionPoolSettings.MaxOutboundConnectionsPerEndpoint = this.ConnectionPoolSettings.MaxOutboundConnectionsPerEndpoint;
            socketConnectionBindingElement.ExposeConnectionProperty   = base.ExposeConnectionProperty;
            socketConnectionBindingElement.HostNameComparisonMode     = base.HostNameComparisonMode;
            socketConnectionBindingElement.InheritBaseAddressSettings = base.InheritBaseAddressSettings;
            socketConnectionBindingElement.ListenBacklog          = this.ListenBacklog;
            socketConnectionBindingElement.ManualAddressing       = base.ManualAddressing;
            socketConnectionBindingElement.MaxBufferPoolSize      = this.MaxBufferPoolSize;
            socketConnectionBindingElement.MaxBufferSize          = base.MaxBufferSize;
            socketConnectionBindingElement.MaxOutputDelay         = base.MaxOutputDelay;
            socketConnectionBindingElement.MaxPendingAccepts      = base.MaxPendingAccepts;
            socketConnectionBindingElement.MaxPendingConnections  = base.MaxPendingConnections;
            socketConnectionBindingElement.MaxReceivedMessageSize = this.MaxReceivedMessageSize;
            socketConnectionBindingElement.TransferMode           = base.TransferMode;
            socketConnectionBindingElement.TeredoEnabled          = false;
            return(socketConnectionBindingElement);
        }
コード例 #7
0
        public ConnectivityModeConnectionElement(TokenProvider tokenProvider, SocketSecurityRole socketSecurityMode, BindingContext context, NameSettings nameSettings, ConnectivitySettings connectivitySettings, HttpConnectivitySettings httpConnectivitySettings)
        {
            this.tokenProvider = tokenProvider;
            this.SecurityMode  = socketSecurityMode;
            this.cache         = new ConnectivityModeCache(connectivitySettings, httpConnectivitySettings);
            if (context == null || !(context.ListenUriBaseAddress != null))
            {
                return;
            }
            InternalConnectivityMode internalConnectivityMode = this.cache.GetInternalConnectivityMode(context.ListenUriBaseAddress);

            switch (internalConnectivityMode)
            {
            case InternalConnectivityMode.Tcp:
            {
                this.connectionElement = new RelayedSocketElement(context, nameSettings, this.tokenProvider, this.SecurityMode);
                return;
            }

            case InternalConnectivityMode.Http:
            {
                this.connectionElement = new WebStreamRelayedConnectionElement(this.tokenProvider, this.SecurityMode, context, nameSettings, false);
                return;
            }

            case InternalConnectivityMode.Https:
            {
                this.connectionElement = new WebStreamRelayedConnectionElement(this.tokenProvider, this.SecurityMode, context, nameSettings, true);
                return;
            }

            case InternalConnectivityMode.HttpsWebSocket:
            {
                this.connectionElement = new WebSocketRelayedConnectionElement(this.tokenProvider, this.SecurityMode, context, nameSettings);
                return;
            }
            }
            throw new InvalidOperationException(SRClient.UnsupportedConnectivityMode(internalConnectivityMode));
        }
コード例 #8
0
                public AmqpRelayedConnection(RelayedOnewayListener.RelayedOnewayAmqpListenerClient client, System.Uri via, ConnectivitySettings connectivitySettings, HttpConnectivitySettings httpConnectivitySettings) : base(via)
                {
                    this.communicationState    = CommunicationState.Created;
                    this.client                = client;
                    this.receivedMessages      = new InputQueue <Message>();
                    this.amqpRelay             = new AmqpRelay(client.Uri, client.TokenProvider, connectivitySettings, httpConnectivitySettings);
                    this.amqpRelay.Connecting += new EventHandler((object s, EventArgs e) => base.RaiseClosed(this, e));
                    this.amqpRelay.Offline    += new EventHandler((object s, EventArgs e) => base.RaiseFaulted(this, e));
                    ServiceSettings serviceSettings = client.listener.nameSettings.ServiceSettings;

                    if (serviceSettings.RelayClientAuthenticationType == RelayClientAuthenticationType.None)
                    {
                        this.amqpRelay.RelayClientAuthorizationRequired = false;
                    }
                    this.amqpRelay.DisplayName               = client.listener.nameSettings.DisplayName;
                    this.amqpRelay.ListenerType              = serviceSettings.ListenerType;
                    this.amqpRelay.IsDynamic                 = serviceSettings.IsDynamic;
                    this.amqpRelay.ClientAgent               = serviceSettings.ClientAgent;
                    this.amqpRelay.PublishToRegistry         = serviceSettings.IsDiscoverable;
                    this.amqpRelay.TransportSecurityRequired = serviceSettings.TransportProtection == RelayTransportProtectionMode.EndToEnd;
                }
コード例 #9
0
 public ConnectivityModeCache(ConnectivitySettings connectivitySettings, HttpConnectivitySettings httpConnectivitySettings)
 {
     this.connectivitySettings     = connectivitySettings;
     this.httpConnectivitySettings = httpConnectivitySettings;
 }
コード例 #10
0
        internal static InternalConnectivityMode GetInternalConnectivityMode(ConnectivitySettings connectivitySettings, HttpConnectivitySettings httpConnectivitySettings, Uri uri)
        {
            if (connectivitySettings == null && httpConnectivitySettings == null && ServiceBusEnvironment.SystemConnectivity.Mode == ConnectivityMode.AutoDetect && ConnectivityModeHelper.OverrideInternalConnectivityMode.HasValue)
            {
                return(ConnectivityModeHelper.OverrideInternalConnectivityMode.Value);
            }
            ConnectivityMode connectivityMode = (connectivitySettings != null ? connectivitySettings.Mode : ServiceBusEnvironment.SystemConnectivity.Mode);

            return(ConnectivityModeHelper.GetInternalConnectivityMode(connectivityMode, (httpConnectivitySettings != null ? httpConnectivitySettings.Mode : HttpConnectivityMode.AutoDetect), uri));
        }