public Microsoft.ServiceBus.Channels.IConnection Connect(Uri uri, TimeSpan timeout)
        {
            EventTraceActivity eventTraceActivity = new EventTraceActivity();
            TimeoutHelper      timeoutHelper      = new TimeoutHelper(timeout);
            WebStream          webStream          = (new WebStream(uri, "connection", this.useHttpsMode, eventTraceActivity, uri)).Open();

            Microsoft.ServiceBus.Channels.IConnection webStreamConnection = new WebStreamConnection(uri, this.bufferSize, eventTraceActivity, webStream, uri);
            webStreamConnection = SecureSocketUtil.InitiateSecureClientUpgradeIfNeeded(webStreamConnection, null, this.socketSecurityRole, uri.Host, timeoutHelper.RemainingTime());
            SocketMessageHelper socketMessageHelper = new SocketMessageHelper();
            Message             message             = Message.CreateMessage(socketMessageHelper.MessageVersion, "RelayedConnect", new ConnectMessage(uri));

            TrackingIdHeader.TryAddOrUpdate(message.Headers, eventTraceActivity.ActivityId.ToString());
            if (this.tokenProvider != null)
            {
                string        absoluteUri = RelayedHttpUtility.ConvertToHttpUri(uri).AbsoluteUri;
                SecurityToken token       = this.tokenProvider.GetToken(absoluteUri, "Send", false, timeoutHelper.RemainingTime());
                message.Headers.Add(new RelayTokenHeader(token));
            }
            socketMessageHelper.SendMessage(webStreamConnection, message, timeoutHelper.RemainingTime());
            Message message1 = socketMessageHelper.ReceiveMessage(webStreamConnection, timeoutHelper.RemainingTime());

            if (message1.IsFault)
            {
                throw ErrorUtility.ConvertToError(MessageFault.CreateFault(message1, 65536));
            }
            return(webStreamConnection);
        }
		public RelayedSocketInitiator(int bufferSize, TokenProvider tokenProvider, SocketSecurityRole socketSecurityMode)
		{
			this.bufferSize = bufferSize;
			this.tokenProvider = tokenProvider;
			this.socketSecurityMode = socketSecurityMode;
			if (this.tokenProvider != null)
			{
				this.socketSecurityMode = SocketSecurityRole.SslClient;
			}
			this.messageHelper = new SocketMessageHelper();
		}
Beispiel #3
0
 public RelayedConnectionSession(int bufferSize, Uri uri, TokenProvider tokenProvider, SocketSecurityRole socketSecurityMode, Guid id, RelayedSocketListener listener, EventTraceActivity activity)
 {
     this.bufferSize         = bufferSize;
     this.uri                = uri;
     this.tokenProvider      = tokenProvider;
     this.socketSecurityMode = socketSecurityMode;
     this.id       = id;
     this.listener = listener;
     this.Activity = activity;
     if (this.tokenProvider != null)
     {
         this.socketSecurityMode = SocketSecurityRole.SslClient;
     }
     this.messageHelper = new SocketMessageHelper();
     this.mutex         = new object();
 }
        private void SendRelayedConnectAndReceiveResponse(ClientWebSocketConnection connection, TimeoutHelper timeoutHelper)
        {
            SocketMessageHelper socketMessageHelper = new SocketMessageHelper();
            Message             message             = Message.CreateMessage(socketMessageHelper.MessageVersion, "RelayedConnect", new ConnectMessage(connection.Uri));

            TrackingIdHeader.TryAddOrUpdate(message.Headers, connection.Activity.ActivityId.ToString());
            if (this.tokenProvider != null)
            {
                string        absoluteUri = RelayedHttpUtility.ConvertToHttpUri(connection.Uri).AbsoluteUri;
                SecurityToken token       = this.tokenProvider.GetToken(absoluteUri, "Send", false, timeoutHelper.RemainingTime());
                message.Headers.Add(new RelayTokenHeader(token));
            }
            socketMessageHelper.SendMessage(connection, message, timeoutHelper.RemainingTime());
            Message message1 = socketMessageHelper.ReceiveMessage(connection, timeoutHelper.RemainingTime());

            if (message1.IsFault)
            {
                throw ErrorUtility.ConvertToError(MessageFault.CreateFault(message1, 65536));
            }
        }
Beispiel #5
0
        public void Initialize(Uri uri, int bufferSize, Binding innerBinding)
        {
            this.uri        = uri;
            this.bufferSize = bufferSize;
            ServiceEndpoint serviceEndpoint = this.serviceHost.AddServiceEndpoint(typeof(IRelayedConnectionControl), innerBinding, this.uri);

            serviceEndpoint.Behaviors.Add(this.nameSettings);
            TransportClientEndpointBehavior transportClientEndpointBehavior = new TransportClientEndpointBehavior(this.tokenProvider);

            serviceEndpoint.Behaviors.Add(transportClientEndpointBehavior);
            serviceEndpoint.Behaviors.Add(this.innerConnectionStatus);
            if (this.connectivitySettings != null || this.httpConnectivitySettings != null)
            {
                WebSocketRelayedConnectionListener.ConnectivitySettingsEndpointBehavior connectivitySettingsEndpointBehavior = new WebSocketRelayedConnectionListener.ConnectivitySettingsEndpointBehavior(this.connectivitySettings, this.httpConnectivitySettings);
                serviceEndpoint.Behaviors.Add(connectivitySettingsEndpointBehavior);
            }
            ServiceErrorHandlerBehavior serviceErrorHandlerBehavior = new ServiceErrorHandlerBehavior();

            serviceErrorHandlerBehavior.HandleError += new EventHandler <ServiceErrorEventArgs>((object s, ServiceErrorEventArgs e) => Fx.Exception.TraceHandled(e.Exception, "WebSocketRelayedConnectionListener.IErrorHandler.HandleError", null));
            this.serviceHost.Description.Behaviors.Add(serviceErrorHandlerBehavior);
            this.messageHelper = new SocketMessageHelper();
        }
Beispiel #6
0
 public ReceiveMessageAsyncResult(SocketMessageHelper messageHelper, Microsoft.ServiceBus.Channels.IConnection connection, TimeSpan timeout, AsyncCallback callback, object state) : base(timeout, callback, state)
 {
     this.messageHelper = messageHelper;
     this.Connection    = connection;
 }