X-Git-Url: https://vcs.maemo.org/git/?a=blobdiff_plain;f=src%2Fmain.c;h=000847d6692319e55989900a5cf93f44026dff25;hb=67a2843d9cdf1c961c98151fcb2224b2fbe3d03f;hp=da9ba455a76e5c6e6a07c7a844bc913a41d5aaf6;hpb=ffb18df525c7435ec77ecb5ceac14cb357ca57d7;p=connman diff --git a/src/main.c b/src/main.c index da9ba45..000847d 100644 --- a/src/main.c +++ b/src/main.c @@ -43,14 +43,21 @@ static void sig_term(int sig) g_main_loop_quit(main_loop); } -static gchar *option_interface = NULL; +static void disconnect_callback(DBusConnection *conn, void *user_data) +{ + DBG("D-Bus disconnect"); + + g_main_loop_quit(main_loop); +} + +static gchar *option_device = NULL; static gboolean option_detach = TRUE; static gboolean option_compat = FALSE; static gboolean option_debug = FALSE; static GOptionEntry options[] = { - { "interface", 'i', 0, G_OPTION_ARG_STRING, &option_interface, - "Specify network interface", "IFACE" }, + { "device", 'i', 0, G_OPTION_ARG_STRING, &option_device, + "Specify network device/interface", "DEV" }, { "nodaemon", 'n', G_OPTION_FLAG_REVERSE, G_OPTION_ARG_NONE, &option_detach, "Don't fork daemon to background" }, @@ -69,8 +76,10 @@ int main(int argc, char *argv[]) DBusError err; struct sigaction sa; +#ifdef NEED_THREADS if (g_thread_supported() == FALSE) g_thread_init(NULL); +#endif context = g_option_context_new(NULL); g_option_context_add_main_entries(context, options, NULL); @@ -101,10 +110,12 @@ int main(int argc, char *argv[]) main_loop = g_main_loop_new(NULL, FALSE); +#ifdef NEED_THREADS if (dbus_threads_init_default() == FALSE) { fprintf(stderr, "Can't init usage of threads\n"); exit(1); } +#endif dbus_error_init(&err); @@ -118,6 +129,8 @@ int main(int argc, char *argv[]) exit(1); } + g_dbus_set_disconnect_function(conn, disconnect_callback, NULL, NULL); + if (option_compat == TRUE) { if (g_dbus_request_name(conn, NM_SERVICE, NULL) == FALSE) { fprintf(stderr, "Can't register compat service\n"); @@ -127,21 +140,21 @@ int main(int argc, char *argv[]) __connman_log_init(option_detach, option_debug); - __connman_element_init(); + __connman_storage_init(); + + __connman_element_init(conn, option_device); __connman_agent_init(conn); __connman_manager_init(conn, option_compat); - __connman_plugin_init(); + __connman_profile_init(conn); __connman_rtnl_init(); - __connman_network_init(conn); - - __connman_iface_init(conn, option_interface); + __connman_plugin_init(); - g_free(option_interface); + g_free(option_device); memset(&sa, 0, sizeof(sa)); sa.sa_handler = sig_term; @@ -150,13 +163,11 @@ int main(int argc, char *argv[]) g_main_loop_run(main_loop); - __connman_iface_cleanup(); - - __connman_network_cleanup(); + __connman_plugin_cleanup(); __connman_rtnl_cleanup(); - __connman_plugin_cleanup(); + __connman_profile_cleanup(); __connman_manager_cleanup(); @@ -164,9 +175,11 @@ int main(int argc, char *argv[]) __connman_element_cleanup(); + __connman_storage_cleanup(); + __connman_log_cleanup(); - g_dbus_cleanup_connection(conn); + dbus_connection_unref(conn); g_main_loop_unref(main_loop);