summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJens Georg <mail@jensge.org>2022-05-12 19:55:31 +0200
committerJens Georg <mail@jensge.org>2022-05-12 19:55:31 +0200
commit63264717cb5d3775a5301ff65691346481a8f9c3 (patch)
tree018d261e260d8620172f3aea94e2fb700d731bc3 /src
parentd6c0fca58a3b6e7ee3487d1748b8b7dbbd9e6b18 (diff)
downloadrygel-63264717cb5d3775a5301ff65691346481a8f9c3.tar.gz
rygel: Remove rygel-main.vala
This is the old pre-gapplication implementation
Diffstat (limited to 'src')
-rw-r--r--src/rygel/rygel-main.vala333
1 files changed, 0 insertions, 333 deletions
diff --git a/src/rygel/rygel-main.vala b/src/rygel/rygel-main.vala
deleted file mode 100644
index f6c507cd..00000000
--- a/src/rygel/rygel-main.vala
+++ /dev/null
@@ -1,333 +0,0 @@
-/*
- * Copyright (C) 2008 Nokia Corporation.
- * Copyright (C) 2008 Zeeshan Ali (Khattak) <zeeshanak@gnome.org>.
- * Copyright (C) 2012 Openismus GmbH.
- * Copyright (C) 2012 Intel Corporation.
- * Copyright (C) 2014 Jens Georg <mail@jensge.org>
- *
- * Author: Zeeshan Ali (Khattak) <zeeshanak@gnome.org>
- * Jens Georg <jensg@openismus.com>
- * Jens Georg <mail@jensge.org>
- *
- * This file is part of Rygel.
- *
- * Rygel is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * Rygel is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-using Gee;
-using GUPnP;
-using Posix;
-
-internal class Rygel.Main : Object {
- private static int PLUGIN_TIMEOUT = 5;
-
- private PluginLoader plugin_loader;
- private ContextManager context_manager;
- private ArrayList <RootDeviceFactory> factories;
- private ArrayList <RootDevice> root_devices;
-
- private Configuration config;
- private LogHandler log_handler;
- private Acl acl;
-
- private MainLoop main_loop;
-
- private int exit_code;
-
- public bool need_restart;
-
- private Main () throws GLib.Error {
- Environment.set_application_name (_(BuildConfig.PACKAGE_NAME));
-
- this.log_handler = LogHandler.get_default ();
- this.config = MetaConfig.get_default ();
- this.plugin_loader = new PluginLoader ();
- this.root_devices = new ArrayList <RootDevice> ();
- this.factories = new ArrayList <RootDeviceFactory> ();
- this.main_loop = new GLib.MainLoop (null, false);
- this.acl = new Acl ();
-
- this.exit_code = 0;
-
- this.plugin_loader.plugin_available.connect (this.on_plugin_loaded);
-
- Unix.signal_add (ProcessSignal.HUP, () => { this.restart (); return true; });
- Unix.signal_add (ProcessSignal.INT, () => { this.exit (0); return false; });
- Unix.signal_add (ProcessSignal.TERM, () => { this.exit (0); return false; });
- }
-
- public void exit (int exit_code) {
- this.exit_code = exit_code;
-
- this.root_devices = null;
- this.main_loop.quit ();
- }
-
- public void restart () {
- this.need_restart = true;
-
- this.exit (0);
- }
-
- private int run () {
- message (_("Rygel v%s starting…"), BuildConfig.PACKAGE_VERSION);
-
- this.main_loop.run ();
-
- return this.exit_code;
- }
-
- internal void dbus_available () {
- this.context_manager = this.create_context_manager ();
- this.plugin_loader.load_modules ();
-
- var timeout = PLUGIN_TIMEOUT;
- try {
- var config = MetaConfig.get_default ();
- timeout = config.get_int ("plugin",
- "TIMEOUT",
- 0,
- int.MAX);
- } catch (Error error) {};
-
- if (timeout == 0) {
- debug ("Plugin timeout disabled...");
-
- return;
- }
-
- Timeout.add_seconds (timeout, () => {
- if (this.plugin_loader.list_plugins ().size == 0) {
- warning (ngettext ("No plugins found in %d second; giving up…",
- "No plugins found in %d seconds; giving up…",
- PLUGIN_TIMEOUT),
- PLUGIN_TIMEOUT);
-
- this.exit (-82);
- }
-
- return false;
- });
- }
-
-
- private void on_plugin_loaded (PluginLoader plugin_loader,
- Plugin plugin) {
- var iterator = this.factories.iterator ();
- while (iterator.next ()) {
- this.create_device.begin (plugin, iterator.get ());
- }
- }
-
- private ContextManager create_context_manager () {
- int port = 0;
- bool ipv6 = false;
-
- try {
- port = this.config.get_port ();
- } catch (GLib.Error err) {}
-
- try {
- ipv6 = this.config.get_bool ("general", "ipv6");
- } catch (GLib.Error err) {
- debug ("No ipv6 config key found, using default %s", ipv6.to_string ());
- }
-
- // INVALID means "all"
- var family = GLib.SocketFamily.INVALID;
- if (!ipv6) {
- family = GLib.SocketFamily.IPV4;
- }
-
- var manager = ContextManager.create_full (GSSDP.UDAVersion.VERSION_1_0,
- family,
- port);
-
- manager.context_available.connect (this.on_context_available);
- manager.context_unavailable.connect (this.on_context_unavailable);
-
- return manager;
- }
-
- private void on_context_available (GUPnP.ContextManager manager,
- GUPnP.Context context) {
- string[] ifaces = null;
-
- debug ("New network %s (%s) context available. IP: %s",
- context.network,
- context.interface,
- context.host_ip);
-
- context.acl = this.acl;
-
- try {
- ifaces = this.config.get_interfaces ();
- } catch (GLib.Error err) {}
-
- if (ifaces == null ||
- context.interface in ifaces ||
- context.network in ifaces ||
- context.host_ip in ifaces) {
- try {
- var factory = new RootDeviceFactory (context);
- this.factories.add (factory);
-
- var iterator = this.plugin_loader.list_plugins ().iterator ();
- while (iterator.next ()) {
- this.create_device.begin (iterator.get (), factory);
- }
- } catch (GLib.Error err) {
- warning (_("Failed to create root device factory: %s"),
- err.message);
- }
- } else {
- debug ("Ignoring network %s (%s) context.",
- context.network,
- context.interface);
- context.active = false;
- }
- }
-
- private void on_context_unavailable (GUPnP.ContextManager manager,
- GUPnP.Context context) {
- debug ("Network %s (%s) context now unavailable. IP: %s",
- context.network,
- context.interface,
- context.host_ip);
-
- var factory_iter = this.factories.iterator ();
- while (factory_iter.next ()) {
- if (context == factory_iter.get ().context) {
- factory_iter.remove ();
- }
- }
-
- var device_iter = this.root_devices.iterator ();
- while (device_iter.next ()) {
- if (context == device_iter.get ().context) {
- device_iter.remove ();
- }
- }
- }
-
- private async void create_device (Plugin plugin,
- RootDeviceFactory factory) {
- // The call to factory.create(), although synchronous spins the
- // the mainloop and therefore might in turn triger some of the signal
- // handlers here that modify one of the lists that we might be iterating
- // while this function is called. Modification of an ArrayList while
- // iterating it is currently unsuppored and leads to a crash and that is
- // why defer to mainloop here.
- Idle.add (create_device.callback);
- yield;
-
- try {
- var device = factory.create (plugin);
-
- device.available = plugin.active;
-
- // Due to pure evilness of unix sinals this might actually happen
- // if someone shuts down rygel while the call-back is running,
- // leading to a crash on shutdown
- if (this.root_devices != null) {
- this.root_devices.add (device);
-
- plugin.notify["active"].connect (this.on_plugin_active_notify);
- }
- } catch (GLib.Error error) {
- warning (_("Failed to create RootDevice for %s. Reason: %s"),
- plugin.name,
- error.message);
- }
- }
-
- private void on_plugin_active_notify (Object obj,
- ParamSpec spec) {
- if (unlikely (this.root_devices == null)) {
- return;
- }
-
- var plugin = obj as Plugin;
-
- foreach (var device in this.root_devices) {
- if (device.resource_factory == plugin) {
- device.available = plugin.active;
- }
- }
- }
-
- private static void register_default_configurations () {
-
- var cmdline_config = CmdlineConfig.get_default ();
-
- MetaConfig.register_configuration (cmdline_config);
- MetaConfig.register_configuration (EnvironmentConfig.get_default ());
-
- try {
- var config_file = cmdline_config.get_config_file ();
- var user_config = new UserConfig (config_file);
- MetaConfig.register_configuration (user_config);
- } catch (Error error) {
- try {
- var user_config = UserConfig.get_default ();
- MetaConfig.register_configuration (user_config);
- } catch (Error err) {
- warning (_("Failed to load user configuration: %s"), err.message);
- }
- }
- }
-
-
- private static int main (string[] args) {
- Main main = null;
- DBusService service = null;
-
- X.init_threads ();
-
- var original_args = args;
-
- Intl.setlocale (LocaleCategory.ALL, "");
- Intl.bindtextdomain (BuildConfig.GETTEXT_PACKAGE,
- BuildConfig.LOCALEDIR);
- Intl.bind_textdomain_codeset (BuildConfig.GETTEXT_PACKAGE, "UTF-8");
- Intl.textdomain (BuildConfig.GETTEXT_PACKAGE);
-
- try {
- // Parse commandline options
- CmdlineConfig.parse_args (ref args);
- Main.register_default_configurations ();
-
- main = new Main ();
- service = new DBusService (main);
- service.publish ();
- } catch (CmdlineConfigError.VERSION_ONLY err) {
- return 0;
- } catch (GLib.Error err) {
- error ("%s", err.message);
- }
-
- int exit_code = main.run ();
- if (service != null) {
- service.unpublish ();
- }
-
- if (main.need_restart) {
- Posix.execvp (original_args[0], original_args);
- }
-
- return exit_code;
- }
-}
-