diff options
author | Dan Williams <dcbw@redhat.com> | 2013-05-29 14:20:45 -0500 |
---|---|---|
committer | Dan Williams <dcbw@redhat.com> | 2013-06-03 12:59:49 -0500 |
commit | d6f1d096043afe6cb4d410a3b78ea72f617841cf (patch) | |
tree | 434eaa0a692ffc48ed2d2b3936e7c3951f25da5e | |
parent | 88b26172d64c352b5dc703edce9a2bb9adc399e5 (diff) | |
download | NetworkManager-d6f1d096043afe6cb4d410a3b78ea72f617841cf.tar.gz |
mobile: move old MM modem properties parsing in NMModemOld
-rw-r--r-- | src/modem-manager/nm-modem-manager.c | 132 | ||||
-rw-r--r-- | src/modem-manager/nm-modem-old.c | 63 | ||||
-rw-r--r-- | src/modem-manager/nm-modem-old.h | 6 | ||||
-rw-r--r-- | src/modem-manager/nm-modem.c | 26 | ||||
-rw-r--r-- | src/modem-manager/nm-modem.h | 3 |
5 files changed, 115 insertions, 115 deletions
diff --git a/src/modem-manager/nm-modem-manager.c b/src/modem-manager/nm-modem-manager.c index 86aea1b8db..c125c5e401 100644 --- a/src/modem-manager/nm-modem-manager.c +++ b/src/modem-manager/nm-modem-manager.c @@ -102,121 +102,47 @@ clear_modem_manager_support (NMModemManager *self) } } -static gboolean -get_modem_properties (DBusGConnection *connection, - const char *path, - char **device, - char **data_device, - char **driver, - guint32 *type, - guint32 *ip_method, - guint32 *ip_timeout, - MMOldModemState *state) -{ - DBusGProxy *proxy; - GError *err = NULL; - GHashTable *props = NULL; - GHashTableIter iter; - const char *prop; - GValue *value; - - proxy = dbus_g_proxy_new_for_name (connection, - MM_OLD_DBUS_SERVICE, - path, - "org.freedesktop.DBus.Properties"); - - if (!dbus_g_proxy_call_with_timeout (proxy, "GetAll", 15000, &err, - G_TYPE_STRING, MM_OLD_DBUS_INTERFACE_MODEM, - G_TYPE_INVALID, - DBUS_TYPE_G_MAP_OF_VARIANT, &props, - G_TYPE_INVALID)) { - nm_log_warn (LOGD_MB, "could not get modem properties: %s %s", - err ? dbus_g_error_get_name (err) : "(none)", - err ? err->message : "(unknown)"); - g_clear_error (&err); - goto out; - } - - if (!props) { - nm_log_warn (LOGD_MB, "no modem properties found"); - goto out; - } - - g_hash_table_iter_init (&iter, props); - while (g_hash_table_iter_next (&iter, (gpointer) &prop, (gpointer) &value)) { - if (g_strcmp0 (prop, "Type") == 0) - *type = g_value_get_uint (value); - else if (g_strcmp0 (prop, "MasterDevice") == 0) - *device = g_value_dup_string (value); - else if (g_strcmp0 (prop, "IpMethod") == 0) - *ip_method = g_value_get_uint (value); - else if (g_strcmp0 (prop, "Device") == 0) - *data_device = g_value_dup_string (value); - else if (g_strcmp0 (prop, "Driver") == 0) - *driver = g_value_dup_string (value); - else if (g_strcmp0 (prop, "IpTimeout") == 0) - *ip_timeout = g_value_get_uint (value); - else if (g_strcmp0 (prop, "State") == 0) - *state = g_value_get_uint (value); - } - g_hash_table_unref (props); - - out: - g_object_unref (proxy); - - return *data_device && *driver; -} - static void create_modem (NMModemManager *self, const char *path) { + DBusGProxy *proxy; + GError *error = NULL; NMModem *modem = NULL; - char *data_device = NULL, *driver = NULL, *master_device = NULL; - uint modem_type = MM_OLD_MODEM_TYPE_UNKNOWN; - uint ip_method = MM_MODEM_IP_METHOD_PPP; - uint ip_timeout = 0; - MMOldModemState state = MM_OLD_MODEM_STATE_UNKNOWN; + GHashTable *properties; if (g_hash_table_lookup (self->priv->modems, path)) { nm_log_warn (LOGD_MB, "modem with path %s already exists, ignoring", path); return; } - if (!get_modem_properties (nm_dbus_manager_get_connection (self->priv->dbus_mgr), - path, &master_device, &data_device, &driver, - &modem_type, &ip_method, &ip_timeout, &state)) - return; - - if (modem_type == MM_OLD_MODEM_TYPE_UNKNOWN) { - nm_log_warn (LOGD_MB, "modem with path %s has unknown type, ignoring", path); - return; - } - - if (!master_device || !strlen (master_device)) { - nm_log_warn (LOGD_MB, "modem with path %s has unknown device, ignoring", path); - return; - } - - if (!driver || !strlen (driver)) { - nm_log_warn (LOGD_MB, "modem with path %s has unknown driver, ignoring", path); - return; - } - - if (!data_device || !strlen (data_device)) { - nm_log_warn (LOGD_MB, "modem with path %s has unknown data device, ignoring", path); - return; - } - - modem = nm_modem_old_new (path, data_device, ip_method, modem_type, state); - g_free (data_device); - - if (modem) { - g_object_set (G_OBJECT (modem), NM_MODEM_IP_TIMEOUT, ip_timeout, NULL); - g_hash_table_insert (self->priv->modems, g_strdup (path), modem); - g_signal_emit (self, signals[MODEM_ADDED], 0, modem, driver); + proxy = dbus_g_proxy_new_for_name (nm_dbus_manager_get_connection (self->priv->dbus_mgr), + MM_OLD_DBUS_SERVICE, + path, + DBUS_INTERFACE_PROPERTIES); + g_assert (proxy); + if (dbus_g_proxy_call_with_timeout (proxy, "GetAll", 15000, &error, + G_TYPE_STRING, MM_OLD_DBUS_INTERFACE_MODEM, + G_TYPE_INVALID, + DBUS_TYPE_G_MAP_OF_VARIANT, &properties, + G_TYPE_INVALID)) { + /* Success, create the modem */ + modem = nm_modem_old_new (path, properties, &error); + if (modem) { + g_hash_table_insert (self->priv->modems, g_strdup (path), modem); + g_signal_emit (self, signals[MODEM_ADDED], 0, modem, nm_modem_get_driver (modem)); + } else { + nm_log_warn (LOGD_MB, "failed to create modem: %s", + error ? error->message : "(unknown)"); + } + g_hash_table_destroy (properties); + } else { + nm_log_warn (LOGD_MB, "could not get modem properties: %s %s", + error ? dbus_g_error_get_name (error) : "(none)", + error ? error->message : "(unknown)"); } - g_free (driver); + g_object_unref (proxy); + g_clear_error (&error); } static void diff --git a/src/modem-manager/nm-modem-old.c b/src/modem-manager/nm-modem-old.c index 9ab3fd7404..dad773214a 100644 --- a/src/modem-manager/nm-modem-old.c +++ b/src/modem-manager/nm-modem-old.c @@ -969,25 +969,74 @@ nm_modem_old_get_capabilities (NMModemOld *self, /*****************************************************************************/ NMModem * -nm_modem_old_new (const char *path, - const char *data_device, - guint32 ip_method, - guint32 modem_type, - MMOldModemState state) +nm_modem_old_new (const char *path, GHashTable *properties, GError **error) { NMDeviceModemCapabilities caps = NM_DEVICE_MODEM_CAPABILITY_NONE; NMModemOld *self; + GHashTableIter iter; + const char *prop; + GValue *value; + const char *data_device = NULL; + const char *driver = NULL; + const char *master_device = NULL; + guint32 modem_type = MM_OLD_MODEM_TYPE_UNKNOWN; + guint32 ip_method = MM_MODEM_IP_METHOD_PPP; + guint32 ip_timeout = 0; + MMOldModemState state = MM_OLD_MODEM_STATE_UNKNOWN; g_return_val_if_fail (path != NULL, NULL); - g_return_val_if_fail (data_device != NULL, NULL); - g_return_val_if_fail (modem_type != MM_OLD_MODEM_TYPE_UNKNOWN, NULL); + g_return_val_if_fail (properties != NULL, NULL); + + g_hash_table_iter_init (&iter, properties); + while (g_hash_table_iter_next (&iter, (gpointer) &prop, (gpointer) &value)) { + if (g_strcmp0 (prop, "Type") == 0) + modem_type = g_value_get_uint (value); + else if (g_strcmp0 (prop, "MasterDevice") == 0) + master_device = g_value_get_string (value); + else if (g_strcmp0 (prop, "IpMethod") == 0) + ip_method = g_value_get_uint (value); + else if (g_strcmp0 (prop, "Device") == 0) + data_device = g_value_get_string (value); + else if (g_strcmp0 (prop, "Driver") == 0) + driver = g_value_get_string (value); + else if (g_strcmp0 (prop, "IpTimeout") == 0) + ip_timeout = g_value_get_uint (value); + else if (g_strcmp0 (prop, "State") == 0) + state = g_value_get_uint (value); + } + + if (modem_type == MM_OLD_MODEM_TYPE_UNKNOWN) { + g_set_error (error, NM_MODEM_ERROR, NM_MODEM_ERROR_INITIALIZATION_FAILED, + "Unhandled modem type %d", modem_type); + return NULL; + } + + if (!master_device || !strlen (master_device)) { + g_set_error_literal (error, NM_MODEM_ERROR, NM_MODEM_ERROR_INITIALIZATION_FAILED, + "Failed to retrieve modem master device."); + return NULL; + } + + if (!driver || !strlen (driver)) { + g_set_error_literal (error, NM_MODEM_ERROR, NM_MODEM_ERROR_INITIALIZATION_FAILED, + "Failed to retrieve modem driver."); + return NULL; + } + + if (!data_device || !strlen (data_device)) { + g_set_error_literal (error, NM_MODEM_ERROR, NM_MODEM_ERROR_INITIALIZATION_FAILED, + "Failed to retrieve modem data device."); + return NULL; + } self = (NMModemOld *) g_object_new (NM_TYPE_MODEM_OLD, NM_MODEM_PATH, path, + NM_MODEM_DRIVER, driver, NM_MODEM_UID, data_device, NM_MODEM_CONTROL_PORT, NULL, NM_MODEM_DATA_PORT, data_device, NM_MODEM_IP_METHOD, ip_method, + NM_MODEM_IP_TIMEOUT, ip_timeout, NM_MODEM_CONNECTED, (state == MM_OLD_MODEM_STATE_CONNECTED), NULL); if (self) { diff --git a/src/modem-manager/nm-modem-old.h b/src/modem-manager/nm-modem-old.h index eee859214b..aa551c8a78 100644 --- a/src/modem-manager/nm-modem-old.h +++ b/src/modem-manager/nm-modem-old.h @@ -46,11 +46,7 @@ typedef struct { GType nm_modem_old_get_type (void); -NMModem *nm_modem_old_new (const char *path, - const char *data_device, - guint32 ip_method, - guint32 modem_type, - MMOldModemState state); +NMModem *nm_modem_old_new (const char *path, GHashTable *properties, GError **error); void nm_modem_old_get_capabilities (NMModemOld *self, NMDeviceModemCapabilities *modem_caps, diff --git a/src/modem-manager/nm-modem.c b/src/modem-manager/nm-modem.c index d44f41f54c..87cefd7f4a 100644 --- a/src/modem-manager/nm-modem.c +++ b/src/modem-manager/nm-modem.c @@ -42,6 +42,7 @@ enum { PROP_DATA_PORT, PROP_PATH, PROP_UID, + PROP_DRIVER, PROP_IP_METHOD, PROP_IP_TIMEOUT, PROP_ENABLED, @@ -53,6 +54,7 @@ enum { typedef struct { char *uid; char *path; + char *driver; char *control_port; char *data_port; char *ppp_iface; @@ -634,6 +636,14 @@ nm_modem_get_path (NMModem *self) } const char * +nm_modem_get_driver (NMModem *self) +{ + g_return_val_if_fail (NM_IS_MODEM (self), NULL); + + return NM_MODEM_GET_PRIVATE (self)->driver; +} + +const char * nm_modem_get_control_port (NMModem *self) { g_return_val_if_fail (NM_IS_MODEM (self), NULL); @@ -704,6 +714,9 @@ get_property (GObject *object, guint prop_id, case PROP_PATH: g_value_set_string (value, priv->path); break; + case PROP_DRIVER: + g_value_set_string (value, priv->driver); + break; case PROP_CONTROL_PORT: g_value_set_string (value, priv->control_port); break; @@ -742,6 +755,10 @@ set_property (GObject *object, guint prop_id, /* Construct only */ priv->path = g_value_dup_string (value); break; + case PROP_DRIVER: + /* Construct only */ + priv->driver = g_value_dup_string (value); + break; case PROP_CONTROL_PORT: priv->control_port = g_value_dup_string (value); break; @@ -790,6 +807,7 @@ finalize (GObject *object) g_free (priv->uid); g_free (priv->path); + g_free (priv->driver); g_free (priv->control_port); g_free (priv->data_port); @@ -832,6 +850,14 @@ nm_modem_class_init (NMModemClass *klass) G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property + (object_class, PROP_DRIVER, + g_param_spec_string (NM_MODEM_DRIVER, + "Driver", + "Driver", + NULL, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + + g_object_class_install_property (object_class, PROP_CONTROL_PORT, g_param_spec_string (NM_MODEM_CONTROL_PORT, "Control port", diff --git a/src/modem-manager/nm-modem.h b/src/modem-manager/nm-modem.h index e50a8aed90..be3150444e 100644 --- a/src/modem-manager/nm-modem.h +++ b/src/modem-manager/nm-modem.h @@ -38,6 +38,7 @@ G_BEGIN_DECLS #define NM_MODEM_UID "uid" #define NM_MODEM_PATH "path" +#define NM_MODEM_DRIVER "driver" #define NM_MODEM_CONTROL_PORT "control-port" #define NM_MODEM_DATA_PORT "data-port" #define NM_MODEM_IP_METHOD "ip-method" @@ -61,6 +62,7 @@ typedef enum { NM_MODEM_ERROR_CONNECTION_NOT_CDMA, /*< nick=ConnectionNotCdma >*/ NM_MODEM_ERROR_CONNECTION_INVALID, /*< nick=ConnectionInvalid >*/ NM_MODEM_ERROR_CONNECTION_INCOMPATIBLE, /*< nick=ConnectionIncompatible >*/ + NM_MODEM_ERROR_INITIALIZATION_FAILED, /*< nick=InitializationFailed >*/ } NMModemError; #define NM_MODEM_ERROR (nm_modem_error_quark ()) @@ -121,6 +123,7 @@ const char *nm_modem_get_path (NMModem *modem); const char *nm_modem_get_uid (NMModem *modem); const char *nm_modem_get_control_port (NMModem *modem); const char *nm_modem_get_data_port (NMModem *modem); +const char *nm_modem_get_driver (NMModem *modem); gboolean nm_modem_check_connection_compatible (NMModem *self, NMConnection *connection, |