summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Williams <dcbw@redhat.com>2013-05-29 14:20:45 -0500
committerDan Williams <dcbw@redhat.com>2013-06-03 12:59:49 -0500
commitd6f1d096043afe6cb4d410a3b78ea72f617841cf (patch)
tree434eaa0a692ffc48ed2d2b3936e7c3951f25da5e
parent88b26172d64c352b5dc703edce9a2bb9adc399e5 (diff)
downloadNetworkManager-d6f1d096043afe6cb4d410a3b78ea72f617841cf.tar.gz
mobile: move old MM modem properties parsing in NMModemOld
-rw-r--r--src/modem-manager/nm-modem-manager.c132
-rw-r--r--src/modem-manager/nm-modem-old.c63
-rw-r--r--src/modem-manager/nm-modem-old.h6
-rw-r--r--src/modem-manager/nm-modem.c26
-rw-r--r--src/modem-manager/nm-modem.h3
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,