[packagekit] Patch to add connman network stack support

Zhu, Peter J peter.j.zhu at intel.com
Sat May 30 22:32:28 PDT 2009


Zhu, Peter J wrote on Sunday, May 31, 2009 11:29 AM
> Hi All,
>
> In case you didn't know what ConnMan is, the Connection
> Manager provides a daemon for managing internet
> connections within embedded devices running the Linux
> operating system. The Connection Manager is designed to
> be slim and to use as few resources as possible, so it
> can be easily integrated in other Moblin-based systems.
>
http://moblin.org/projects/connection-manager to know more about connman

> Here is a patch to to add ConnMan network stack support
> for PackageKit, which is against Package 0.4.7. Please
> comments.
>
> diff -urN PackageKit-0.4.7/config.h
> PackageKit-0.4.7-new/config.h ---
> PackageKit-0.4.7/config.h   2009-04-25 04:11:13.000000000
> +0800 +++ PackageKit-0.4.7-new/config.h       2009-05-30
>  15:53:36.000000000 +0800 @@ -14,7 +14,7 @@ #define
> GETTEXT_PACKAGE "PackageKit"
>
>  /* Define to 1 if you have the <archive.h> header file.
> */ -#define HAVE_ARCHIVE_H 1
> +/* #undef HAVE_ARCHIVE_H */
>
>  /* Define to 1 if you have the `bind_textdomain_codeset'
>  function. */ #define HAVE_BIND_TEXTDOMAIN_CODESET 1
> @@ -35,7 +35,7 @@
>  #define HAVE_EXECINFO_H 1
>
>  /* Define to 1 if you have the
> `gdk_app_launch_context_new' function. */ -#define
> HAVE_GDK_APP_LAUNCH_CONTEXT_NEW 1 +/* #undef
> HAVE_GDK_APP_LAUNCH_CONTEXT_NEW */
>
>  /* Define if the GNU gettext() function is already
>  present or preinstalled. */ #define HAVE_GETTEXT 1
> @@ -113,6 +113,9 @@
>  /* Alternative user for running the PackageKit backend */
>  #define PK_BACKEND_USER "root"
>
> +/* define if Connection Manager is installed */
> +#define PK_BUILD_CONNMAN 1
> +
>  /* Defined if gcov is enabled to force a rebuild due to
>  config.h changing */ /* #undef PK_BUILD_GCOV */
>
> @@ -123,10 +126,10 @@
>  /* #undef PK_BUILD_GPROF */
>
>  /* Build local code */
> -#define PK_BUILD_LOCAL 1
> +/* #undef PK_BUILD_LOCAL */
>
>  /* define if NetworkManager is installed */
> -#define PK_BUILD_NETWORKMANAGER 1
> +/* #undef PK_BUILD_NETWORKMANAGER */
>
>  /* Defined if we have gcc 3.3 and thus the new gcov
>  format */ /* #undef PK_HAVE_GCC33_GCOV */
> diff -urN PackageKit-0.4.7/config.h.in
> PackageKit-0.4.7-new/config.h.in ---
> PackageKit-0.4.7/config.h.in        2009-05-05
> 23:14:40.000000000 +0800 +++
>  PackageKit-0.4.7-new/config.h.in    2009-05-30
>  15:53:36.000000000 +0800 @@ -112,6 +112,9 @@ /*
> Alternative user for running the PackageKit backend */
> #undef PK_BACKEND_USER
>
> +/* define if Connection Manager is installed */
> +#undef PK_BUILD_CONNMAN
> +
>  /* Defined if gcov is enabled to force a rebuild due to
>  config.h changing */ #undef PK_BUILD_GCOV
>
> diff -urN PackageKit-0.4.7/configure.ac
> PackageKit-0.4.7-new/configure.ac ---
> PackageKit-0.4.7/configure.ac       2009-05-05
> 22:44:31.000000000 +0800 +++
>  PackageKit-0.4.7-new/configure.ac   2009-05-30
> 15:53:36.000000000 +0800 @@ -277,6 +277,20 @@
> AC_SUBST(LIBNM_LIBS)
>
>  dnl
> ---------------------------------------------------------------------------
> +dnl - Is ConnMan available? +dnl
> ---------------------------------------------------------------------------
> +PKG_CHECK_MODULES(CONNMAN, connman,
> PK_BUILD_CONNMAN="yes", PK_BUILD_CONNMAN="no") +if test
> "x$PK_BUILD_CONNMAN" = "xyes"; then +
> with_networking_stack="ConnMan" +
> AC_DEFINE(PK_BUILD_CONNMAN, 1, [define if Connection
> Manager is installed]) +fi +
> +AM_CONDITIONAL(PK_BUILD_CONNMAN, test x$PK_BUILD_CONNMAN
> = xyes) +AC_SUBST(CONNMAN_CFLAGS) +AC_SUBST(CONNMAN_LIBS)
> +
> +
> +dnl
>  ---------------------------------------------------------------------------
>  dnl - Is docbook2man available? dnl
>  ---------------------------------------------------------------------------
> AC_PATH_PROG(DOCBOOK2MAN, docbook2man, no)
> diff -urN PackageKit-0.4.7/etc/PackageKit.conf.in
> PackageKit-0.4.7-new/etc/PackageKit.conf.in ---
> PackageKit-0.4.7/etc/PackageKit.conf.in     2009-05-05
> 17:38:10.000000000 +0800 +++
>  PackageKit-0.4.7-new/etc/PackageKit.conf.in 2009-05-30
>  15:02:52.000000000 +0800 @@ -13,8 +13,14 @@ #
> default=true UseNetworkManager=true
>
> -# If NetworkManager is not available, then use the
> presence of a default
> -# route to indicate a viable network connection.
> +# Use Connman where available. If disabled, then Connman
> state will be ignored. +#
> +# default=true
> +UseNetworkConnman=true
> +
> +
> +# If neither NetworkManager nor ConnMan is not
> available, then use the presence +# of default route to
>  indicate a viable network connection. # If disabled, and
>  no NM, then the network is assumed to be always online. #
>  # default=true
> diff -urN PackageKit-0.4.7/src/Makefile.am
> PackageKit-0.4.7-new/src/Makefile.am ---
> PackageKit-0.4.7/src/Makefile.am    2009-05-05
> 17:38:10.000000000 +0800 +++
>         PackageKit-0.4.7-new/src/Makefile.am
>         2009-05-30 20:32:05.000000000 +0800 @@ -15,6
>         +15,7 @@ $(POLKIT_CFLAGS)
> \ $(PYTHON_CFLAGS)                                \
> $(LIBNM_CFLAGS)                                 \ +
> $(CONNMAN_CFLAGS)                               \
>         -DPACKAGE_LOCALE_DIR=\"$(localedir)\"           \
>         -DBINDIR=\"$(bindir)\"                          \
>         -DSBINDIR=\"$(sbindir)\"                        \
> @@ -63,6 +64,7 @@
>         pk-post-trans.c                                 \
>         pk-post-trans.h                                 \
>         pk-network-nm.h                                 \
> +       pk-network-connman.h                            \
>         pk-network-unix.c                               \
>         pk-network-unix.h                               \
>         pk-time.h                                       \
> @@ -104,6 +106,14 @@
>         pk-network-nm-dummy.c
>  endif
>
> +if PK_BUILD_CONNMAN
> +shared_SOURCES +=                                      \
> +       pk-network-connman.c
> +else
> +shared_SOURCES +=                                      \
> +       pk-network-connman-dummy.c
> +endif
> +
>  if PK_BUILD_GIO
>  shared_SOURCES +=                                      \
>         pk-file-monitor-gio.c                           \
> @@ -135,6 +145,7 @@
>         $(GLIB_LIBS)                                    \
>         $(GMODULE_LIBS)                                 \
>         $(LIBNM_LIBS)                                   \
> +       $(CONNMAN_LIBS)                                 \
>         $(DBUS_LIBS)                                    \
>         $(SQLITE_LIBS)                                  \
>         $(PK_GLIB_LIBS)                                 \
> @@ -201,6 +212,7 @@
>         $(DBUS_LIBS)                                    \
>         $(SQLITE_LIBS)                                  \
>         $(LIBNM_LIBS)                                   \
> +       $(CONNMAN_LIBS)                                 \
>         $(PK_GLIB_LIBS)                                 \
>         $(POLKIT_LIBS)                                  \
>         $(GIO_LIBS)                                     \
> diff -urN PackageKit-0.4.7/src/pk-marshal.h
> PackageKit-0.4.7-new/src/pk-marshal.h ---
> PackageKit-0.4.7/src/pk-marshal.h   2009-04-19
> 18:52:52.000000000 +0800 +++
>
>
> PackageKit-0.4.7-new/src/pk-marshal.h       2009-05-30
> 20:32:05.000000000 +0800 @@ -297,6 +297,14 @@ gpointer
> invocation_hint, gpointer      marshal_data);
>
> +/* VOID:STRING,BOXED (pk-marshal.list:38) */
> +extern void pk_marshal_VOID__STRING_BOXED (GClosure
> *closure, +
> GValue       *return_value, +
> guint         n_param_values, +
> const GValue *param_values, +
> gpointer      invocation_hint, +
> gpointer      marshal_data); +
>  G_END_DECLS
>
>  #endif /* __pk_marshal_MARSHAL_H__ */
> diff -urN PackageKit-0.4.7/src/pk-marshal.list
> PackageKit-0.4.7-new/src/pk-marshal.list ---
> PackageKit-0.4.7/src/pk-marshal.list        2009-03-26
> 23:36:06.000000000 +0800 +++
>  PackageKit-0.4.7-new/src/pk-marshal.list    2009-05-30
>  20:32:05.000000000 +0800 @@ -35,4 +35,4 @@
>  VOID:STRING,STRING,BOOL,STRING,UINT,STRING,UINT,STRING
> VOID:POINTER,UINT,STRING VOID:POINTER,UINT,UINT -
> +VOID:STRING,BOXED
> diff -urN PackageKit-0.4.7/src/pk-network.c
> PackageKit-0.4.7-new/src/pk-network.c ---
> PackageKit-0.4.7/src/pk-network.c   2009-05-05
> 17:02:35.000000000 +0800 +++
>  PackageKit-0.4.7-new/src/pk-network.c       2009-05-30
>  20:32:05.000000000 +0800 @@ -46,6 +46,7 @@ #include
>  "egg-dbus-monitor.h" #include "pk-network.h" #include
> "pk-network-nm.h" +#include "pk-network-connman.h"
>  #include "pk-network-unix.h"
>  #include "pk-marshal.h"
>  #include "pk-conf.h"
> @@ -62,11 +63,14 @@
>  struct _PkNetworkPrivate
>  {
>         gboolean                 use_nm;
> +       gboolean                 use_connman;
>         gboolean                 use_unix;
>         PkNetworkNm             *net_nm;
> +       PkNetworkConnman        *net_connman;
>         PkNetworkUnix           *net_unix;
>         PkConf                  *conf;
>         EggDbusMonitor          *nm_bus;
> +       EggDbusMonitor          *connman_bus;
>  };
>
>  enum {
> @@ -93,6 +97,8 @@
>         /* use the correct backend */
>         if (network->priv->use_nm)
>                 return pk_network_nm_get_network_state
> (network->priv->net_nm); +       if
> (network->priv->use_connman) +               return
>         pk_network_connman_get_network_state
>                 (network->priv->net_connman); if
>         (network->priv->use_unix) return
> pk_network_unix_get_network_state
>  (network->priv->net_unix); return
> PK_NETWORK_ENUM_ONLINE; @@ -113,6 +119,20 @@ }
>
>  /**
> + * pk_network_connman_network_changed_cb:
> + **/
> +static void
> +pk_network_connman_network_changed_cb (PkNetworkConnman
> *net_connman, gboolean online, PkNetwork *network) +{
> +        PkNetworkEnum state;
> +
> +        g_return_if_fail (PK_IS_NETWORK (network));
> +
> +        state = pk_network_get_network_state (network);
> +        g_signal_emit (network, signals
> [PK_NETWORK_STATE_CHANGED], 0, state); +}
> +
> +/**
>   * pk_network_unix_network_changed_cb:
>   **/
>  static void
> @@ -147,18 +167,22 @@
>  static void
>  pk_network_init (PkNetwork *network)
>  {
> -       gboolean nm_alive;
> +       gboolean nm_alive, connman_alive;
>         network->priv = PK_NETWORK_GET_PRIVATE (network);
>         network->priv->conf = pk_conf_new ();
>         network->priv->net_nm = pk_network_nm_new ();
>         g_signal_connect (network->priv->net_nm,
>                           "state-changed", G_CALLBACK
> (pk_network_nm_network_changed_cb), network); +
> network->priv->net_connman = pk_network_connman_new (); +
> g_signal_connect (network->priv->net_connman,
>         "state-changed", +
>         G_CALLBACK
>
> (pk_network_connman_network_changed_cb), network);
> network->priv->net_unix = pk_network_unix_new ();
> g_signal_connect (network->priv->net_unix,
> "state-changed", G_CALLBACK
> (pk_network_unix_network_changed_cb), network);
>
>         /* get the defaults from the config file */
>         network->priv->use_nm = pk_conf_get_bool
> (network->priv->conf, "UseNetworkManager"); +
>         network->priv->use_connman = pk_conf_get_bool
> (network->priv->conf, "UseNetworkConnman");
> network->priv->use_unix = pk_conf_get_bool
> (network->priv->conf, "UseNetworkHeuristic");
>
>         /* check if NM is on the bus */
> @@ -178,7 +202,26 @@
>                 egg_warning ("UseNetworkManager true, but
>                 not built with NM support");
>         network->priv->use_nm = FALSE; }
> +#endif
> +       /* check if ConnMan is on the bus */
> +       network->priv->connman_bus = egg_dbus_monitor_new
> (); +       egg_dbus_monitor_assign
> (network->priv->connman_bus, EGG_DBUS_MONITOR_SYSTEM,
> "org.moblin.connman"); +       connman_alive =
> egg_dbus_monitor_is_connected
> (network->priv->connman_bus); + +       /* NetworkManager
> isn't up, so we can't use it */ +       if
> (network->priv->use_connman && !connman_alive) { +
> egg_warning ("UseNetworkConnman true, but
> org.moblin.connman not up"); +
> network->priv->use_connman = FALSE; +       } + +#if
> !PK_BUILD_CONNMAN +       /* check we can actually use
> the default */ +       if (network->priv->use_connman) {
> +               egg_warning ("UseNetworkConnman true, but
> not built with ConnMan support"); +
> network->priv->use_connman = FALSE; +       }
>  #endif
> +
>  }
>
>  /**
> @@ -196,7 +239,9 @@
>         g_return_if_fail (network->priv != NULL);
>         g_object_unref (network->priv->conf);
>         g_object_unref (network->priv->nm_bus);
> +       g_object_unref (network->priv->connman_bus);
>         g_object_unref (network->priv->net_nm);
> +       g_object_unref (network->priv->net_connman);
>         g_object_unref (network->priv->net_unix);
>         G_OBJECT_CLASS
>  (pk_network_parent_class)->finalize (object); }
> diff -urN PackageKit-0.4.7/src/pk-network-connman.c
> PackageKit-0.4.7-new/src/pk-network-connman.c ---
> PackageKit-0.4.7/src/pk-network-connman.c   1970-01-01
> 08:00:00.000000000 +0800 +++
> PackageKit-0.4.7-new/src/pk-network-connman.c
> 2009-05-30 20:32:05.000000000 +0800 @@ -0,0 +1,315 @@ +/*
> -*- Mode: C; tab-width: 8; indent-tabs-mode: t;
> c-basic-offset: 8 -*- + * + * Copyright (C) 2007-2009
> Intel Corporation. All rights reserved. + * + * Licensed
> under the GNU General Public License Version 2 + *
> + * This program is free software; you can redistribute
> it and/or modify + * it under the terms of the GNU
> General Public License as published by + * the Free
> Software Foundation; either version 2 of the License, or
> + * (at your option) any later version. + *
> + * This program 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 General Public
> License for more details. + *
> + * You should have received a copy of the GNU General
> Public License + * along with this program; if not, write
> to the Free Software + * Foundation, Inc., 59 Temple
> Place - Suite 330, Boston, MA 02111-1307, USA. + */
> +
> +#include "config.h"
> +
> +#include <stdlib.h>
> +#include <stdio.h>
> +#include <time.h>
> +#include <errno.h>
> +
> +#include <string.h>
> +#include <sys/time.h>
> +#include <sys/types.h>
> +#ifdef HAVE_UNISTD_H
> +#include <unistd.h>
> +#endif /* HAVE_UNISTD_H */
> +
> +#include <sys/wait.h>
> +#include <fcntl.h>
> +
> +#include <glib/gi18n.h>
> +#include <glib.h>
> +#include <dbus/dbus-glib.h>
> +
> +#include "egg-debug.h"
> +#include "pk-network-connman.h"
> +#include "pk-marshal.h"
> +
> +static void     pk_network_connman_finalize
> (GObject          *object); +
> +#define PK_NETWORK_CONNMAN_GET_PRIVATE(o)
> (G_TYPE_INSTANCE_GET_PRIVATE ((o),
> PK_TYPE_NETWORK_CONNMAN, PkNetworkConnmanPrivate)) + +/**
> + * PkNetworkConnmanPrivate:
> + *
> + * Private #PkNetworkConnman data
> + **/
> +struct _PkNetworkConnmanPrivate
> +{
> +       DBusGConnection         *bus;
> +        DBusGProxy              *proxy_connman;
> +};
> +
> +enum {
> +       PK_NETWORK_CONNMAN_STATE_CHANGED,
> +       PK_NETWORK_CONNMAN_LAST_SIGNAL
> +};
> +
> +static guint signals [PK_NETWORK_CONNMAN_LAST_SIGNAL] =
> { 0 }; +
> +G_DEFINE_TYPE (PkNetworkConnman, pk_network_connman,
> G_TYPE_OBJECT) +
> +#define CONNMAN_DBUS_NAME "org.moblin.connman"
> +
> +
> +#define CONNMAN_MANAGER_DBUS_INTERFACE CONNMAN_DBUS_NAME
> ".Manager" +#define CONNMAN_SERVICE_DBUS_INTERFACE
> CONNMAN_DBUS_NAME ".Service" +#define
> CONNMAN_MANAGER_DBUS_PATH "/" +
> +
> +
> +static void iterate_list(const GValue *value, gpointer
> user_data) +{
> +        GSList **list = user_data;
> +        gchar *path = g_value_dup_boxed(value);
> +
> +        if (path == NULL)
> +                return;
> +
> +        *list = g_slist_append(*list, path);
> +}
> +
> +
> +/**
> + *  *
> pk_network_nm_get_active_connection_type_for_device: + *
> **/ +static PkNetworkEnum
> +pk_network_connman_get_connection_type (const GValue
> *value) +{
> +        const char *type = value ?
> g_value_get_string(value) : NULL; +
> +        if (type == NULL)
> +                return PK_NETWORK_ENUM_UNKNOWN;
> +        else if (g_str_equal(type, "ethernet") == TRUE)
> +                return PK_NETWORK_ENUM_WIRED;
> +        else if (g_str_equal(type, "wifi") == TRUE)
> +                return PK_NETWORK_ENUM_WIFI;
> +        else if (g_str_equal(type, "wimax") == TRUE)
> +                return PK_NETWORK_ENUM_MOBILE;
> +
> +        return PK_NETWORK_ENUM_UNKNOWN;
> +}
> +
> +
> +
> +/**
> + * pk_network_connman_get_network_state:
> + * @network_connman: a valid #PkNetworkConnman instance
> + *
> + * Return value: %TRUE if the network_connman is online
> + **/
> +PkNetworkEnum
> +pk_network_connman_get_network_state (PkNetworkConnman
> *network_connman) +{
> +        DBusGProxy *proxy, *proxy_service;
> +       GError *error = NULL;
> +       GHashTable *hash_manager = NULL, *hash_service =
> NULL; +       GValue *value;
> +        GSList *list, *services_list = NULL;
> +        DBusGConnection *connection =
> network_connman->priv->bus; +        gchar *state;
> +       PkNetworkEnum type;
> +
> +       g_return_val_if_fail (PK_IS_NETWORK_CONNMAN
> (network_connman), PK_NETWORK_ENUM_UNKNOWN); +
> proxy = network_connman->priv->proxy_connman; +
> proxy_service = NULL; +
> +       /* get services  */
> +       dbus_g_proxy_call (proxy, "GetProperties",
> &error, G_TYPE_INVALID, +
> dbus_g_type_get_map ("GHashTable", G_TYPE_STRING,
> G_TYPE_VALUE), &hash_manager, G_TYPE_INVALID); + +
> if (error != NULL || hash_manager == NULL) { +
> if (error) +                       g_clear_error (&error);
> +               return PK_NETWORK_ENUM_UNKNOWN;
> +       }
> +
> +       value = g_hash_table_lookup(hash_manager,
> "State"); +        state = value ?
> g_value_dup_string(value) : NULL; +
> +        if (g_str_equal(state, "online") == FALSE)
> +               return PK_NETWORK_ENUM_OFFLINE;
> +
> +       value = g_hash_table_lookup(hash_manager,
> "Services"); +        if (value == NULL)
> +               return PK_NETWORK_ENUM_UNKNOWN;
> +
> +       dbus_g_type_collection_value_iterate (value,
> iterate_list, &services_list); +
> +       for (list = services_list; list; list =
> list->next) { +                gchar *path = list->data;
> +
> +                egg_debug ("service path is %s", path);
> +
> +                proxy_service =
> dbus_g_proxy_new_for_name(connection, +
> CONNMAN_DBUS_NAME, path, CONNMAN_SERVICE_DBUS_INTERFACE);
> +                if (proxy_service != NULL) +
> break; +        }
> +
> +        for (list = services_list; list; list =
> list->next) { +               gchar *path = list->data;
> +               g_free (path);
> +       }
> +       g_slist_free (services_list);
> +
> +       if (proxy_service == NULL)
> +               return PK_NETWORK_ENUM_UNKNOWN;
> +
> +       /* now proxy_service point to first available
> service*/ +       /* get connection type for it*/
> +        dbus_g_proxy_call (proxy_service,
> "GetProperties", &error, G_TYPE_INVALID, +
> dbus_g_type_get_map ("GHashTable", G_TYPE_STRING,
> G_TYPE_VALUE), &hash_service, G_TYPE_INVALID); + +
> if (error != NULL || hash_service == NULL) { +
> if (error) +                        g_clear_error
> (&error); +                return PK_NETWORK_ENUM_OFFLINE;
> +        }
> +
> +        value = g_hash_table_lookup(hash_service,
> "Type"); +       type =
> pk_network_connman_get_connection_type (value); +
> +       egg_debug ("network type is %s",
> pk_network_enum_to_text (type)); +       g_object_unref
> (proxy_service); +       return type;
> +}
> +
> +/**
> + * pk_network_connman_state_changed
> + **/
> +static void
> +pk_network_connman_state_changed (DBusGProxy *proxy,
> const char *property, +
> GValue *value, gpointer user_data) +{
> +       gboolean ret;
> +       PkNetworkConnman *network_connman =
> (PkNetworkConnman *) user_data; +
> +       g_return_if_fail (PK_IS_NETWORK_CONNMAN
> (network_connman)); +
> +       if (g_str_equal(property, "State") == TRUE) {
> +                gchar *state;
> +
> +                state = g_value_dup_string(value);
> +               if (g_str_equal(state, "online") == TRUE)
> +                       ret = TRUE;
> +               else
> +                       ret = FALSE;
> +               g_signal_emit (network_connman, signals
> [PK_NETWORK_CONNMAN_STATE_CHANGED], 0, ret); +        }
> +
> +}
> +
> +/**
> + * pk_network_connman_class_init:
> + * @klass: The PkNetworkConnmanClass
> + **/
> +static void
> +pk_network_connman_class_init (PkNetworkConnmanClass
> *klass) +{
> +       GObjectClass *object_class = G_OBJECT_CLASS
> (klass); +       object_class->finalize =
> pk_network_connman_finalize; +       signals
> [PK_NETWORK_CONNMAN_STATE_CHANGED] = +
> g_signal_new ("state-changed", +
> G_TYPE_FROM_CLASS (object_class), G_SIGNAL_RUN_LAST, +
> 0, NULL, NULL, g_cclosure_marshal_VOID__UINT, +
> G_TYPE_NONE, 1, G_TYPE_UINT); +
> g_type_class_add_private (klass, sizeof
> (PkNetworkConnmanPrivate)); +} +
> +/**
> + * pk_network_connman_init:
> + * @network_connman: This class instance
> + **/
> +static void
> +pk_network_connman_init (PkNetworkConnman
> *network_connman) +{
> +       GError *error = NULL;
> +        DBusGProxy *proxy;
> +
> +       network_connman->priv =
> PK_NETWORK_CONNMAN_GET_PRIVATE (network_connman); +
> +        network_connman->priv->proxy_connman = NULL;
> +
> +
> dbus_g_object_register_marshaller(pk_marshal_VOID__STRING_BOXED,
> +
> G_TYPE_NONE, G_TYPE_STRING, +
> G_TYPE_VALUE, G_TYPE_INVALID); + +       /* get system
> connection */ +       network_connman->priv->bus =
> dbus_g_bus_get (DBUS_BUS_SYSTEM, &error); +       if
> (network_connman->priv->bus == NULL) { +
> egg_warning ("Couldn't connect to system bus: %s",
> error->message); +               g_error_free (error); +
> return; +       }
> +
> +        proxy = dbus_g_proxy_new_for_name_owner
> (network_connman->priv->bus, +
> CONNMAN_DBUS_NAME, CONNMAN_MANAGER_DBUS_PATH,
> CONNMAN_MANAGER_DBUS_INTERFACE, &error); +
> network_connman->priv->proxy_connman = proxy; + +
> if (error != NULL) { +                egg_warning
> ("Cannot connect to connman: %s", error->message); +
> g_error_free (error); +                return;
> +        }
> +       dbus_g_proxy_add_signal(proxy, "PropertyChanged",
> +                                G_TYPE_STRING,
> G_TYPE_VALUE, G_TYPE_INVALID); +
> dbus_g_proxy_connect_signal(proxy, "PropertyChanged", +
> G_CALLBACK(pk_network_connman_state_changed),
> network_connman, NULL); + +
> +}
> +
> +/**
> + * pk_network_connman_finalize:
> + * @object: The object to finalize
> + **/
> +static void
> +pk_network_connman_finalize (GObject *object)
> +{
> +       PkNetworkConnman *network_connman;
> +       g_return_if_fail (object != NULL);
> +       g_return_if_fail (PK_IS_NETWORK_CONNMAN (object));
> +       network_connman = PK_NETWORK_CONNMAN (object);
> +
> +       g_return_if_fail (network_connman->priv != NULL);
> +
> +        if (network_connman->priv->proxy_connman != NULL)
> +               g_object_unref
> (network_connman->priv->proxy_connman); +
> +       G_OBJECT_CLASS
> (pk_network_connman_parent_class)->finalize (object); +}
> +
> +/**
> + * pk_network_connman_new:
> + *
> + * Return value: a new PkNetworkConnman object.
> + **/
> +PkNetworkConnman *
> +pk_network_connman_new (void)
> +
> +{
> +       PkNetworkConnman *network_connman;
> +       network_connman = g_object_new
> (PK_TYPE_NETWORK_CONNMAN, NULL); +       return
> PK_NETWORK_CONNMAN (network_connman); +}
> +
> diff -urN PackageKit-0.4.7/src/pk-network-connman-dummy.c
> PackageKit-0.4.7-new/src/pk-network-connman-dummy.c ---
> PackageKit-0.4.7/src/pk-network-connman-dummy.c
> 1970-01-01 08:00:00.000000000 +0800 +++
> PackageKit-0.4.7-new/src/pk-network-connman-dummy.c
> 2009-05-30 20:32:05.000000000 +0800 @@ -0,0 +1,137 @@ +/*
> -*- Mode: C; tab-width: 8; indent-tabs-mode: t;
> c-basic-offset: 8 -*- + * + * Copyright (C) 2007-2009
> Intel Corporation. All rights reserved. + * + * Licensed
> under the GNU General Public License Version 2 + *
> + * This program is free software; you can redistribute
> it and/or modify + * it under the terms of the GNU
> General Public License as published by + * the Free
> Software Foundation; either version 2 of the License, or
> + * (at your option) any later version. + *
> + * This program 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 General Public
> License for more details. + *
> + * You should have received a copy of the GNU General
> Public License + * along with this program; if not, write
> to the Free Software + * Foundation, Inc., 59 Temple
> Place - Suite 330, Boston, MA 02111-1307, USA. + */
> +
> +#include "config.h"
> +
> +#include <stdlib.h>
> +#include <stdio.h>
> +#include <time.h>
> +#include <errno.h>
> +
> +#include <string.h>
> +#include <sys/time.h>
> +#include <sys/types.h>
> +#ifdef HAVE_UNISTD_H
> +#include <unistd.h>
> +#endif /* HAVE_UNISTD_H */
> +
> +#include <sys/wait.h>
> +#include <fcntl.h>
> +
> +#include <glib/gi18n.h>
> +
> +#include "egg-debug.h"
> +#include "pk-network-connman.h"
> +#include "pk-marshal.h"
> +
> +static void     pk_network_connman_finalize
> (GObject          *object); +
> +#define PK_NETWORK_CONNMAN_GET_PRIVATE(o)
> (G_TYPE_INSTANCE_GET_PRIVATE ((o),
> PK_TYPE_NETWORK_CONNMAN, PkNetworkConnmanPrivate)) + +/**
> + * PkNetworkConnmanPrivate:
> + *
> + * Private #PkNetworkConnman data
> + **/
> +struct _PkNetworkConnmanPrivate
> +{
> +       guint                    callback_id;
> +};
> +
> +enum {
> +       PK_NETWORK_CONNMAN_STATE_CHANGED,
> +       PK_NETWORK_CONNMAN_LAST_SIGNAL
> +};
> +
> +static guint signals [PK_NETWORK_CONNMAN_LAST_SIGNAL] =
> { 0 }; +
> +G_DEFINE_TYPE (PkNetworkConnman, pk_network_connman,
> G_TYPE_OBJECT) +
> +/**
> + * pk_network_connman_get_network_state:
> + * @network_connman: a valid #PkNetworkConnman instance
> + *
> + * Return value: always %TRUE - this method should never
> be called + **/
> +PkNetworkEnum
> +pk_network_connman_get_network_state (PkNetworkConnman
> *network_connman) +{
> +       g_return_val_if_fail (PK_IS_NETWORK_CONNMAN
> (network_connman), PK_NETWORK_ENUM_UNKNOWN); +       /*
> don't do any checks */ +       return
> PK_NETWORK_ENUM_ONLINE; +}
> +
> +/**
> + * pk_network_connman_class_init:
> + * @klass: The PkNetworkConnmanClass
> + **/
> +static void
> +pk_network_connman_class_init (PkNetworkConnmanClass
> *klass) +{
> +       GObjectClass *object_class = G_OBJECT_CLASS
> (klass); +       object_class->finalize =
> pk_network_connman_finalize; +       signals
> [PK_NETWORK_CONNMAN_STATE_CHANGED] = +
> g_signal_new ("state-changed", +
> G_TYPE_FROM_CLASS (object_class), G_SIGNAL_RUN_LAST, +
> 0, NULL, NULL, g_cclosure_marshal_VOID__UINT, +
> G_TYPE_NONE, 1, G_TYPE_UINT); +
> g_type_class_add_private (klass, sizeof
> (PkNetworkConnmanPrivate)); +} +
> +/**
> + * pk_network_connman_init:
> + * @network_connman: This class instance
> + **/
> +static void
> +pk_network_connman_init (PkNetworkConnman
> *network_connman) +{
> +       network_connman->priv =
> PK_NETWORK_CONNMAN_GET_PRIVATE (network_connman); +}
> +
> +/**
> + * pk_network_connman_finalize:
> + * @object: The object to finalize
> + **/
> +static void
> +pk_network_connman_finalize (GObject *object)
> +{
> +       PkNetworkConnman *network_connman;
> +       g_return_if_fail (object != NULL);
> +       g_return_if_fail (PK_IS_NETWORK_CONNMAN (object));
> +       network_connman = PK_NETWORK_CONNMAN (object);
> +
> +       g_return_if_fail (network_connman->priv != NULL);
> +       G_OBJECT_CLASS
> (pk_network_connman_parent_class)->finalize (object); +}
> +
> +/**
> + * pk_network_connman_new:
> + *
> + * Return value: a new PkNetworkConnman object.
> + **/
> +PkNetworkConnman *
> +pk_network_connman_new (void)
> +{
> +       PkNetworkConnman *network_connman;
> +       network_connman = g_object_new
> (PK_TYPE_NETWORK_CONNMAN, NULL); +       return
> PK_NETWORK_CONNMAN (network_connman); +}
> +
> diff -urN PackageKit-0.4.7/src/pk-network-connman.h
> PackageKit-0.4.7-new/src/pk-network-connman.h ---
> PackageKit-0.4.7/src/pk-network-connman.h   1970-01-01
> 08:00:00.000000000 +0800 +++
> PackageKit-0.4.7-new/src/pk-network-connman.h
> 2009-05-30 20:32:05.000000000 +0800 @@ -0,0 +1,68 @@ +/*
> -*- Mode: C; tab-width: 8; indent-tabs-mode: t;
> c-basic-offset: 8 -*- + * + * Copyright (C) 2007-2009
> Intel Corporation. All rights reserved. + * + * Licensed
> under the GNU General Public License Version 2 + *
> + * This program is free software; you can redistribute
> it and/or modify + * it under the terms of the GNU
> General Public License as published by + * the Free
> Software Foundation; either version 2 of the License, or
> + * (at your option) any later version. + *
> + * This program 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 General Public
> License for more details. + *
> + * You should have received a copy of the GNU General
> Public License + * along with this program; if not, write
> to the Free Software + * Foundation, Inc., 59 Temple
> Place - Suite 330, Boston, MA 02111-1307, USA. + */
> +
> +/**
> + * SECTION:pk-network-connman
> + * @short_description: An ConnmMan access GObject
> + *
> + * This allows a switchable network backend.
> + */
> +
> +#ifndef __PK_NETWORK_CONNMAN_H
> +#define __PK_NETWORK_CONNMAN_H
> +
> +#include <glib-object.h>
> +#include <packagekit-glib/packagekit.h>
> +
> +G_BEGIN_DECLS
> +
> +#define PK_TYPE_NETWORK_CONNMAN
> (pk_network_connman_get_type ()) +#define
> PK_NETWORK_CONNMAN(o)
> (G_TYPE_CHECK_INSTANCE_CAST ((o),
> PK_TYPE_NETWORK_CONNMAN, PkNetworkConnman)) +#define
> PK_NETWORK_CONNMAN_CLASS(k)
> (G_TYPE_CHECK_CLASS_CAST((k), PK_TYPE_NETWORK_CONNMAN,
> PkNetworkConnmanClass)) +#define PK_IS_NETWORK_CONNMAN(o)
> (G_TYPE_CHECK_INSTANCE_TYPE ((o),
> PK_TYPE_NETWORK_CONNMAN)) +#define
> PK_IS_NETWORK_CONNMAN_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE
> ((k), PK_TYPE_NETWORK_CONNMAN)) +#define
> PK_NETWORK_CONNMAN_GET_CLASS(o)
> (G_TYPE_INSTANCE_GET_CLASS ((o), PK_TYPE_NETWORK_CONNMAN,
> PkNetworkConnmanClass)) +#define PK_NETWORK_CONNMAN_ERROR
> (pk_network_connman_error_quark ()) +#define
> PK_NETWORK_CONNMAN_TYPE_ERROR
> (pk_network_connman_error_get_type ()) + +typedef struct
> _PkNetworkConnmanPrivate        PkNetworkConnmanPrivate;
> +typedef struct _PkNetworkConnman       PkNetworkConnman;
> +typedef struct _PkNetworkConnmanClass
> PkNetworkConnmanClass; + +struct _PkNetworkConnman +{ +
> GObject                        parent; +
> PkNetworkConnmanPrivate        *priv; +}; + +struct
> _PkNetworkConnmanClass +{ +       GObjectClass
> parent_class; +}; + +GType
> pk_network_connman_get_type             (void);
> +PkNetworkConnman*      pk_network_connman_new
> (void); +PkNetworkEnum
> pk_network_connman_get_network_state    (PkNetworkConnman
> *network_connman); + +G_END_DECLS + +#endif /*
> __PK_NETWORK_CONNMAN_H */ +
>
> Thanks,
> Peter
> _______________________________________________
> PackageKit mailing list
> PackageKit at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/packagekit




More information about the PackageKit mailing list