Exemple #1
0
 static void PrepareChild(ConfigurationManager configurationManager, ChildConfigurationManager childConfigurationManager, string fullFilename, ChildInfo child)
 {
     if (childConfigurationManager.InstanceType == InstanceType.Static)
     {
         if (child.TrySpawn())
         {
             Logger.Write(LogLevel.Notice, "Started fastcgi daemon [static] with pid {0} and config file {1}", child.Process.Id, Path.GetFileName(fullFilename));
             Thread.Sleep(500);
             // TODO: improve this (it's used to wait for the child to be ready)
         }
         else
         {
             Logger.Write(LogLevel.Error, "Couldn't start child with config file {0}", fullFilename);
         }
     }
     else
     {
         Socket socket;
         if (FastCgi.Server.TryCreateSocket(childConfigurationManager, out socket))
         {
             var server = new GenericServer <Connection> (socket, child);
             server.Start(configurationManager.Stoppable, (int)childConfigurationManager.Backlog);
         }
     }
 }
Exemple #2
0
        static void PrepareAutomaticChild(ConfigurationManager configurationManager, string frontSocket, ChildInfo child, uint backlog)
        {
            Socket socket;

            if (FastCgi.Server.TryCreateUnixSocket(frontSocket, out socket, "660"))
            {
                var server = new GenericServer <Connection> (socket, child);
                server.Start(configurationManager.Stoppable, (int)backlog);
            }
        }
Exemple #3
0
        public static void StartChildren(FileInfo[] configFiles, ConfigurationManager configurationManager)
        {
            if (configFiles == null)
                throw new ArgumentNullException ("configFiles");
            if (configurationManager == null)
                throw new ArgumentNullException ("configurationManager");
            foreach (FileInfo fileInfo in configFiles) {
                if (fileInfo == null)
                    continue;
                Logger.Write (LogLevel.Debug, "Loading {0}", fileInfo.Name);
                var childConfigurationManager = new ChildConfigurationManager ();
                string configFile = fileInfo.FullName;
                if (!childConfigurationManager.TryLoadXmlConfig (configFile))
                    continue;
                string user = childConfigurationManager.User;
                string fastCgiCommand = configurationManager.FastCgiCommand;

                Func<bool, Process> spawner;
                if (Platform.IsUnix) {
                    if (String.IsNullOrEmpty (user)) {
                        Logger.Write (LogLevel.Warning, "Configuration file {0} didn't specify username, defaulting to file owner", fileInfo.Name);
                        user = UnixFileSystemInfo.GetFileSystemEntry (configFile).OwnerUser.UserName;
                    }

                    spawner = onDemand => Spawner.RunAs (user, Spawner.SpawnChild, configFile, fastCgiCommand, onDemand);
                } else {
                    Logger.Write (LogLevel.Warning, "Configuration file {0} didn't specify username, defaulting to the current one", fileInfo.Name);
                    spawner = onDemand => Spawner.SpawnChild (configFile, fastCgiCommand, onDemand);
                }
                var child = new ChildInfo { Spawner = spawner, ConfigurationManager = childConfigurationManager, Name = configFile, OnDemand = childConfigurationManager.InstanceType == InstanceType.Dynamic };
                children.Add (child);
                if (child.OnDemand){
                    Socket socket;
                    if (FastCgi.Server.TryCreateSocket (childConfigurationManager, out socket)) {
                        var server = new GenericServer<Connection> (socket, child);
                        server.Start (configurationManager.Stoppable, (int)childConfigurationManager.Backlog);
                    }

                } else {
                    if (child.TrySpawn ()) {
                        Logger.Write (LogLevel.Notice, "Started fastcgi daemon [static] with pid {0} and config file {1}", child.Process.Id, Path.GetFileName (configFile));
                    } else {
                        Logger.Write (LogLevel.Error, "Couldn't start child with config file {0}", configFile);
                    }
                }
            }
        }
		static void PrepareChild (ConfigurationManager configurationManager, ChildConfigurationManager childConfigurationManager, string fullFilename, ChildInfo child)
		{
			if (childConfigurationManager.InstanceType == InstanceType.Static) {
				if (child.TrySpawn ()) {
					Logger.Write (LogLevel.Notice, "Started fastcgi daemon [static] with pid {0} and config file {1}", child.Process.Id, Path.GetFileName (fullFilename));
					Thread.Sleep (500);
					// TODO: improve this (it's used to wait for the child to be ready)
				}
				else
					Logger.Write (LogLevel.Error, "Couldn't start child with config file {0}", fullFilename);
			}
			else {
				Socket socket;
				if (FastCgi.Server.TryCreateSocket (childConfigurationManager, out socket)) {
					var server = new GenericServer<Connection> (socket, child);
					server.Start (configurationManager.Stoppable, (int)childConfigurationManager.Backlog);
				}
			}
		}
		static void PrepareAutomaticChild (ConfigurationManager configurationManager, string frontSocket, ChildInfo child, uint backlog)
		{
			Socket socket;
			if (FastCgi.Server.TryCreateUnixSocket (frontSocket, out socket, "660")) {
				var server = new GenericServer<Connection> (socket, child);
				server.Start (configurationManager.Stoppable, (int)backlog);
			}
		}
Exemple #6
0
        public static void StartChildren(FileInfo[] configFiles, ConfigurationManager configurationManager)
        {
            if (configFiles == null)
            {
                throw new ArgumentNullException("configFiles");
            }
            if (configurationManager == null)
            {
                throw new ArgumentNullException("configurationManager");
            }
            foreach (FileInfo fileInfo in configFiles)
            {
                if (fileInfo == null)
                {
                    continue;
                }
                Logger.Write(LogLevel.Debug, "Loading {0}", fileInfo.Name);
                var    childConfigurationManager = new ChildConfigurationManager();
                string configFile = fileInfo.FullName;
                if (!childConfigurationManager.TryLoadXmlConfig(configFile))
                {
                    continue;
                }
                string user           = childConfigurationManager.User;
                string fastCgiCommand = configurationManager.FastCgiCommand;

                Func <bool, Process> spawner;
                if (Platform.IsUnix)
                {
                    if (String.IsNullOrEmpty(user))
                    {
                        Logger.Write(LogLevel.Warning, "Configuration file {0} didn't specify username, defaulting to file owner", fileInfo.Name);
                        user = UnixFileSystemInfo.GetFileSystemEntry(configFile).OwnerUser.UserName;
                    }

                    spawner = onDemand => Spawner.RunAs(user, Spawner.SpawnChild, configFile, fastCgiCommand, onDemand);
                }
                else
                {
                    Logger.Write(LogLevel.Warning, "Configuration file {0} didn't specify username, defaulting to the current one", fileInfo.Name);
                    spawner = onDemand => Spawner.SpawnChild(configFile, fastCgiCommand, onDemand);
                }
                var child = new ChildInfo {
                    Spawner = spawner, ConfigurationManager = childConfigurationManager, Name = configFile, OnDemand = childConfigurationManager.InstanceType == InstanceType.Dynamic
                };
                children.Add(child);
                if (child.OnDemand)
                {
                    Socket socket;
                    if (FastCgi.Server.TryCreateSocket(childConfigurationManager, out socket))
                    {
                        var server = new GenericServer <Connection> (socket, child);
                        server.Start(configurationManager.Stoppable, (int)childConfigurationManager.Backlog);
                    }
                }
                else
                {
                    if (child.TrySpawn())
                    {
                        Logger.Write(LogLevel.Notice, "Started fastcgi daemon [static] with pid {0} and config file {1}", child.Process.Id, Path.GetFileName(configFile));
                    }
                    else
                    {
                        Logger.Write(LogLevel.Error, "Couldn't start child with config file {0}", configFile);
                    }
                }
            }
        }