mobile: move old MM modem properties parsing in NMModemOld
This commit is contained in:
@@ -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);
|
||||
|
||||
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_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);
|
||||
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
|
||||
|
@@ -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) {
|
||||
|
@@ -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,
|
||||
|
@@ -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;
|
||||
@@ -633,6 +635,14 @@ nm_modem_get_path (NMModem *self)
|
||||
return NM_MODEM_GET_PRIVATE (self)->path;
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
@@ -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);
|
||||
|
||||
@@ -831,6 +849,14 @@ nm_modem_class_init (NMModemClass *klass)
|
||||
NULL,
|
||||
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,
|
||||
|
@@ -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,
|
||||
|
Reference in New Issue
Block a user