Example #1
0
        public void RunHosts()
        {
            // You get one shot at startup.
            Udbus.v4v.v4vConnection connection = TryV4VConnection(Log_io_debug);

            if (connection == null) // If failed to connect to V4V
            {
                // Continue attempting to setup in another thread.
                this.log.Warning("Failed to connect to V4V. Continuing to establish V4V connection in another thread");
                RunHostsInAnotherThread();
            }    // Ends if failed to connect to V4V
            else // Else connected to V4V
            {
                // Try setting up the service connection.
                Udbus.Core.ServiceConnectionParams serviceConnectionParams = TryServiceConnectionParams(connection);

                if (serviceConnectionParams == null) // If failed to set up service connection
                {
                    RunHostsInAnotherThread();
                }    // Ends if failed to set up service connection
                else // Else setup service connection
                {
                    FinishRunHosts(connection, serviceConnectionParams);
                } // Ends else setup service connection
            }     // Ends else connected to V4V
        }
Example #2
0
 private void InitFields()
 {
     this.connection = null;
     this.serviceConnectionParams = null;
     this.threadInfo       = default(DbusUtils.VisitorThreadInfo);
     this.threadSignalLoop = null;
     this.hosts            = null;
 }
Example #3
0
        private void RunHostsThread()
        {
            log.Info("Setting up running hosts in another thread");
            Udbus.v4v.v4vConnection            connection = null;
            Udbus.Core.ServiceConnectionParams serviceConnectionParams = null;
            DbusHosts.GetV4vConnection(out connection, out serviceConnectionParams, Log_io_debug, this.eventStop, log);

            log.Info("Established service connection");
            FinishRunHosts(connection, serviceConnectionParams);
            log.Info("Finished setting up running hosts in another thread");
        }
Example #4
0
        public static void GetV4vConnection(out Udbus.v4v.v4vConnection connection, out Udbus.Core.ServiceConnectionParams serviceConnectionParams,
            Udbus.Serialization.UdbusDelegates.D_io_debug io_debug, System.Threading.ManualResetEvent stop,
            Udbus.Core.Logging.ILog log)
        {
            connection = null;
            serviceConnectionParams = null;

            while (serviceConnectionParams == null)
            {
                using (Udbus.v4v.v4vConnection connectionTemp = KeepTryingToConnectToV4V(io_debug, stop, log))
                {
                    if (connectionTemp != null) // If got v4v connection
                    {
                        Udbus.v4v.v4vConnection connectionTemp2 = connectionTemp.Release();
                        try
                        {
                            Udbus.Core.ServiceConnectionParams serviceConnectionParamsTemp = TryServiceConnectionParams(connectionTemp2, log);

                            if (serviceConnectionParamsTemp == null) // If failed to create service connection
                            {
                                connectionTemp.Swap(connectionTemp2);

                            } // Ends if failed to create service connection
                            else // Else created service connection
                            {
                                serviceConnectionParams = serviceConnectionParamsTemp;
                                connection = connectionTemp2;

                            } // Ends else created service connection
                        }
                        catch (Exception /*ex*/)
                        {
                            connectionTemp.Swap(connectionTemp2);
                            throw;
                        }

                    } // Ends if got v4v connection
                } // Ends using v4vConnection

                if (serviceConnectionParams == null) // If failed to create connection
                {
                    // Wait a while.
                    System.Threading.Thread.Sleep(ConnectionWaitMilliseconds);

                } // Ends if failed to create connection
            } // Ends while trying to setup service connection
        }
Example #5
0
        internal static com.citrix.xenclient.xenmgr.diag.diagService CreateDbusDiag(out Udbus.Core.ServiceConnectionParams serviceConnectionParams,
                                                                                    Udbus.Core.Logging.ILog log, Udbus.Serialization.UdbusDelegates.D_io_debug io_debug)
        {
            // Create a V4V connection.
            Udbus.v4v.v4vConnection           connection;
            System.Threading.ManualResetEvent stop = new System.Threading.ManualResetEvent(false);
            DbusHosts.GetV4vConnection(out connection, out serviceConnectionParams,
                                       io_debug, stop,
                                       log
                                       );

            // Use dbus interface to xenmgr.diag.
            Udbus.Serialization.DbusConnectionParameters dbusConnectionParameters = com.citrix.xenclient.xenmgr.diag.diagService.DefaultConnectionParameters;
            dbusConnectionParameters.Destination = "com.citrix.xenclient.xenmgr";
            com.citrix.xenclient.xenmgr.diag.diagService diag = com.citrix.xenclient.xenmgr.diag.diagService.Create(serviceConnectionParams, dbusConnectionParameters);

            return(diag);
        }
Example #6
0
        public static void GetV4vConnection(out Udbus.v4v.v4vConnection connection, out Udbus.Core.ServiceConnectionParams serviceConnectionParams,
                                            Udbus.Serialization.UdbusDelegates.D_io_debug io_debug, System.Threading.ManualResetEvent stop,
                                            Udbus.Core.Logging.ILog log)
        {
            connection = null;
            serviceConnectionParams = null;

            while (serviceConnectionParams == null)
            {
                using (Udbus.v4v.v4vConnection connectionTemp = KeepTryingToConnectToV4V(io_debug, stop, log))
                {
                    if (connectionTemp != null) // If got v4v connection
                    {
                        Udbus.v4v.v4vConnection connectionTemp2 = connectionTemp.Release();
                        try
                        {
                            Udbus.Core.ServiceConnectionParams serviceConnectionParamsTemp = TryServiceConnectionParams(connectionTemp2, log);

                            if (serviceConnectionParamsTemp == null) // If failed to create service connection
                            {
                                connectionTemp.Swap(connectionTemp2);
                            }    // Ends if failed to create service connection
                            else // Else created service connection
                            {
                                serviceConnectionParams = serviceConnectionParamsTemp;
                                connection = connectionTemp2;
                            } // Ends else created service connection
                        }
                        catch (Exception /*ex*/)
                        {
                            connectionTemp.Swap(connectionTemp2);
                            throw;
                        }
                    } // Ends if got v4v connection
                }     // Ends using v4vConnection

                if (serviceConnectionParams == null) // If failed to create connection
                {
                    // Wait a while.
                    System.Threading.Thread.Sleep(ConnectionWaitMilliseconds);
                } // Ends if failed to create connection
            }     // Ends while trying to setup service connection
        }
Example #7
0
        static private Udbus.Core.ServiceConnectionParams TryServiceConnectionParams(Udbus.v4v.v4vConnection connection, Udbus.Core.Logging.ILog log)
        {
            Udbus.Core.ServiceConnectionParams result = null;

            try
            {
                Udbus.Core.ServiceConnectionParams create = new Udbus.Core.ServiceConnectionParams(connection);
                result = create;
            }
            catch (Udbus.Serialization.Exceptions.UdbusAuthorisationException authex)
            {
                log.Exception("Authorisation Error creating ServiceConnectionParams. {0}", authex);
            }
            catch (Exception ex)
            {
                log.Exception("Error creating ServiceConnectionParams. {0}", ex);
            }
            return(result);
        }
Example #8
0
        private void FinishRunHosts(Udbus.v4v.v4vConnection connection, Udbus.Core.ServiceConnectionParams serviceConnectionParams)
        {
            this.connection = connection;
            this.serviceConnectionParams = serviceConnectionParams;

            log.Info("Connection helloed with name {0} and signalName {1}", serviceConnectionParams.Name, serviceConnectionParams.SignalName);
            System.Uri uriBase = new System.Uri(Udbus.WCF.Constants.BaseAddress);

            new Udbus.WCF.Service.Host.Init.InitHostMakerRegistry();
            new global::XenClientGuestService.wcf.Hosts.Init.InitHostMakerRegistry();
            Udbus.WCF.Service.Host.RegistryDictionaryHolder registry = Udbus.WCF.Service.Host.HostMakerRegistry.RegistryDictionaryClone;

            log.Info("Launching hosts...");

            // Build all hosts including "special" properties host.
            ICollection <Udbus.WCF.Service.Host.ServiceHostCreationData> hostdata = Udbus.WCF.Service.Host.HostMakerRegistry.BuildAllHosts(
                registry.Values
                , new Udbus.WCF.Host.WCFServiceParams(serviceConnectionParams)
                , new Uri[] { uriBase }
                );

            System.ServiceModel.NetNamedPipeBinding namedpipeBinding = new System.ServiceModel.NetNamedPipeBinding();
            System.ServiceModel.Channels.Binding    binding          = namedpipeBinding;
            binding.SendTimeout    = TimeSpan.MaxValue;
            binding.ReceiveTimeout = TimeSpan.MaxValue;

            foreach (Udbus.WCF.Service.Host.ServiceHostCreationData host in hostdata)
            {
                host.Host.AddServiceEndpoint(host.CreationParams.ContractType, binding, host.CreationParams.RelativeName);
            }

            this.hosts = hostdata.Select <Udbus.WCF.Service.Host.ServiceHostCreationData, System.ServiceModel.ServiceHost>(Udbus.WCF.Service.Host.ServiceHostCreationData.DataToHost);
            DbusUtils.RunHosts(hosts);

            this.threadInfo = RunSignalsAsync(out this.threadSignalLoop, serviceConnectionParams);
        }
Example #9
0
 static public ICollection <Udbus.WCF.Service.Host.ServiceHostCreationData> BuildAllHosts(IEnumerable <Udbus.WCF.Service.Host.IMakeServiceHostCreationData> hostMakers,
                                                                                          Udbus.Core.ServiceConnectionParams serviceparams, System.Uri[] uriBase, params Type[] exclude)
 {
     return(BuildAllHosts(hostMakers, new Udbus.WCF.Host.WCFServiceParams(serviceparams), uriBase, exclude));
 }
Example #10
0
 private void InitFields()
 {
     this.connection = null;
     this.serviceConnectionParams = null;
     this.threadInfo = default(DbusUtils.VisitorThreadInfo);
     this.threadSignalLoop = null;
     this.hosts = null;
 }
Example #11
0
        private void FinishRunHosts(Udbus.v4v.v4vConnection connection, Udbus.Core.ServiceConnectionParams serviceConnectionParams)
        {
            this.connection = connection;
            this.serviceConnectionParams = serviceConnectionParams;

            log.Info("Connection helloed with name {0} and signalName {1}", serviceConnectionParams.Name, serviceConnectionParams.SignalName);
            System.Uri uriBase = new System.Uri(Udbus.WCF.Constants.BaseAddress);

            new Udbus.WCF.Service.Host.Init.InitHostMakerRegistry();
            new global::XenClientGuestService.wcf.Hosts.Init.InitHostMakerRegistry();
            Udbus.WCF.Service.Host.RegistryDictionaryHolder registry = Udbus.WCF.Service.Host.HostMakerRegistry.RegistryDictionaryClone;

            log.Info("Launching hosts...");

            // Build all hosts including "special" properties host.
            ICollection<Udbus.WCF.Service.Host.ServiceHostCreationData> hostdata = Udbus.WCF.Service.Host.HostMakerRegistry.BuildAllHosts(
                registry.Values
                , new Udbus.WCF.Host.WCFServiceParams(serviceConnectionParams)
                , new Uri[] { uriBase }
            );

            System.ServiceModel.NetNamedPipeBinding namedpipeBinding = new System.ServiceModel.NetNamedPipeBinding();
            System.ServiceModel.Channels.Binding binding = namedpipeBinding;
            binding.SendTimeout = TimeSpan.MaxValue;
            binding.ReceiveTimeout = TimeSpan.MaxValue;

            foreach (Udbus.WCF.Service.Host.ServiceHostCreationData host in hostdata)
            {
                host.Host.AddServiceEndpoint(host.CreationParams.ContractType, binding, host.CreationParams.RelativeName);
            }

            this.hosts = hostdata.Select<Udbus.WCF.Service.Host.ServiceHostCreationData, System.ServiceModel.ServiceHost>(Udbus.WCF.Service.Host.ServiceHostCreationData.DataToHost);
            DbusUtils.RunHosts(hosts);

            this.threadInfo = RunSignalsAsync(out this.threadSignalLoop, serviceConnectionParams);
        }
Example #12
0
 public WCFServiceParams(Udbus.Core.ServiceConnectionParams ServiceConnectionParams, System.Nullable <Udbus.Serialization.DbusConnectionParameters> DbusConnectionParameters)
 {
     this.ServiceConnectionParams  = ServiceConnectionParams;
     this.DbusConnectionParameters = DbusConnectionParameters;
 }
Example #13
0
 internal com.citrix.xenclient.xenmgr.diag.diagService CreateDbusDiag(out Udbus.Core.ServiceConnectionParams serviceConnectionParams)
 {
     return(CreateDbusDiag(out serviceConnectionParams, this.log, this.Log_Io_Debug));
 }
Example #14
0
 public VisitorThreadInfo(Udbus.Core.ServiceConnectionParams serviceConnectionParams,
                          System.Threading.EventWaitHandle stop)
     : this(serviceConnectionParams.SignalConnector, serviceConnectionParams.SignalVisitor, serviceConnectionParams.ReceiverPool, stop, DefaultTextWriter)
 {
 }
Example #15
0
 public VisitorThreadInfo(Udbus.Core.ServiceConnectionParams serviceConnectionParams)
     : this(serviceConnectionParams.SignalConnector, serviceConnectionParams.SignalVisitor, serviceConnectionParams.ReceiverPool, DefaultWaitHandle(), DefaultTextWriter)
 {
 }
Example #16
0
        private static Udbus.Core.ServiceConnectionParams TryServiceConnectionParams(Udbus.v4v.v4vConnection connection, Udbus.Core.Logging.ILog log)
        {
            Udbus.Core.ServiceConnectionParams result = null;

            try
            {
                Udbus.Core.ServiceConnectionParams create = new Udbus.Core.ServiceConnectionParams(connection);
                result = create;
            }
            catch (Udbus.Serialization.Exceptions.UdbusAuthorisationException authex)
            {
                log.Exception("Authorisation Error creating ServiceConnectionParams. {0}", authex);
            }
            catch (Exception ex)
            {
                log.Exception("Error creating ServiceConnectionParams. {0}", ex);
            }
            return result;
        }
Example #17
0
 public static DbusUtils.VisitorThreadInfo RunSignalsAsync(out System.Threading.Thread threadSignalLoop, Udbus.Core.ServiceConnectionParams serviceConnectionParams)
 {
     DbusUtils.VisitorThreadInfo threadInfo = new DbusUtils.VisitorThreadInfo(serviceConnectionParams);
     threadSignalLoop = DbusUtils.LoopSignalsThread();
     threadSignalLoop.IsBackground = true;
     threadSignalLoop.Start(threadInfo);
     return(threadInfo);
 }
Example #18
0
 public WCFServiceParams(Udbus.Core.ServiceConnectionParams ServiceConnectionParams)
     : this(ServiceConnectionParams, null)
 {
 }
Example #19
0
 static public ICollection <Udbus.WCF.Service.Host.ServiceHostCreationData> BuildAllHosts(Udbus.Core.ServiceConnectionParams serviceparams,
                                                                                          System.Uri uriBase, params Type[] exclude)
 {
     return(BuildAllHosts(serviceparams, new System.Uri[] { uriBase }, exclude));
 }
 public WCFServiceParams(Udbus.Core.ServiceConnectionParams ServiceConnectionParams, System.Nullable<Udbus.Serialization.DbusConnectionParameters> DbusConnectionParameters)
 {
     this.ServiceConnectionParams = ServiceConnectionParams;
     this.DbusConnectionParameters = DbusConnectionParameters;
 }