Update the NetworkManager and nm-applet patches.

Update the NetworkManager and nm-applet patches to work with the DBus API reorganization.
This commit is contained in:
Tambet Ingo
2008-08-29 13:13:00 +03:00
parent 424f514b02
commit 3d9fc420d2
2 changed files with 161 additions and 342 deletions

View File

@@ -11,94 +11,43 @@ index b7aa437..b154922 100644
libnm-util/libnm-util.pc
libnm-util/Makefile
diff --git a/introspection/nm-device-cdma.xml b/introspection/nm-device-cdma.xml
index 2b43f8f..33e80cb 100644
index 2b43f8f..22a612b 100644
--- a/introspection/nm-device-cdma.xml
+++ b/introspection/nm-device-cdma.xml
@@ -3,12 +3,28 @@
@@ -2,14 +2,5 @@
<node name="/" xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
<interface name="org.freedesktop.NetworkManager.Device.Cdma">
-
- <signal name="PropertiesChanged">
- <arg name="properties" type="a{sv}" tp:type="String_Variant_Map">
- <tp:docstring>
- A dictionary mapping property names to variant boxed values
- </tp:docstring>
- </arg>
+ <method name="GetSignalQuality">
+ <tp:docstring>
+ Get the current signal quality.
+ </tp:docstring>
+ <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
+ <annotation name="org.freedesktop.DBus.GLib.CSymbol" value="impl_cdma_device_get_signal_quality"/>
+ <arg name="quality" type="u" direction="out">
+ <tp:docstring>
+ Signal quality (percent).
+ </tp:docstring>
+ </arg>
+ </method>
+
+ <signal name="SignalQuality">
+ <tp:docstring>
+ The signal quality changed.
+ </tp:docstring>
+ <arg name="quality" type="u">
+ <tp:docstring>
+ The signal quality (percent).
+ </tp:docstring>
+ </arg>
</signal>
- </signal>
-
</interface>
</node>
diff --git a/introspection/nm-device-gsm.xml b/introspection/nm-device-gsm.xml
index 650d656..753669d 100644
index 650d656..0bf7b08 100644
--- a/introspection/nm-device-gsm.xml
+++ b/introspection/nm-device-gsm.xml
@@ -3,12 +3,39 @@
@@ -2,14 +2,5 @@
<node name="/" xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
<interface name="org.freedesktop.NetworkManager.Device.Gsm">
-
- <signal name="PropertiesChanged">
- <arg name="properties" type="a{sv}" tp:type="String_Variant_Map">
- <tp:docstring>
- A dictionary mapping property names to variant boxed values
- </tp:docstring>
- </arg>
+ <method name="GetSignalQuality">
+ <tp:docstring>
+ Get the current signal quality.
+ </tp:docstring>
+ <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
+ <annotation name="org.freedesktop.DBus.GLib.CSymbol" value="impl_gsm_device_get_signal_quality"/>
+ <arg name="quality" type="u" direction="out">
+ <tp:docstring>
+ Signal quality (percent).
+ </tp:docstring>
+ </arg>
+ </method>
+
+ <signal name="SignalQuality">
+ <tp:docstring>
+ The signal quality changed.
+ </tp:docstring>
+ <arg name="quality" type="u">
+ <tp:docstring>
+ The signal quality (percent).
+ </tp:docstring>
+ </arg>
+ </signal>
+
+ <signal name="NetworkMode">
+ <tp:docstring>
+ The network mode changed.
+ </tp:docstring>
+ <arg name="mode" type="u">
+ <tp:docstring>
+ The new network mode.
+ </tp:docstring>
+ </arg>
</signal>
- </signal>
-
</interface>
</node>
diff --git a/src/Makefile.am b/src/Makefile.am
index 3c4ce75..3f24eb5 100644
--- a/src/Makefile.am
@@ -210,7 +159,7 @@ index c8fa251..432af94 100644
best = dev;
diff --git a/src/modem-manager/Makefile.am b/src/modem-manager/Makefile.am
new file mode 100644
index 0000000..cc84137
index 0000000..d8730b1
--- /dev/null
+++ b/src/modem-manager/Makefile.am
@@ -0,0 +1,41 @@
@@ -223,10 +172,10 @@ index 0000000..cc84137
+noinst_LTLIBRARIES = libmodem-manager.la
+
+libmodem_manager_la_SOURCES = \
+ nm-cdma-modem-device.c \
+ nm-cdma-modem-device.h \
+ nm-gsm-modem-device.c \
+ nm-gsm-modem-device.h \
+ nm-cdma-modem.c \
+ nm-cdma-modem.h \
+ nm-gsm-modem.c \
+ nm-gsm-modem.h \
+ nm-modem-device.c \
+ nm-modem-device.h \
+ nm-modem-manager.h \
@@ -255,17 +204,17 @@ index 0000000..cc84137
+ nm-serial-device-glue.h
+
+CLEANFILES = $(BUILT_SOURCES)
diff --git a/src/modem-manager/nm-cdma-modem-device.c b/src/modem-manager/nm-cdma-modem-device.c
diff --git a/src/modem-manager/nm-cdma-modem.c b/src/modem-manager/nm-cdma-modem.c
new file mode 100644
index 0000000..b674342
index 0000000..fec4540
--- /dev/null
+++ b/src/modem-manager/nm-cdma-modem-device.c
@@ -0,0 +1,315 @@
+++ b/src/modem-manager/nm-cdma-modem.c
@@ -0,0 +1,248 @@
+/* -*- Mode: C; tab-width: 5; indent-tabs-mode: t; c-basic-offset: 5 -*- */
+
+#include <string.h>
+
+#include "nm-cdma-modem-device.h"
+#include "nm-cdma-modem.h"
+#include "nm-modem-types.h"
+#include "nm-device-interface.h"
+#include "nm-device-private.h"
@@ -274,13 +223,11 @@ index 0000000..b674342
+#include "nm-setting-cdma.h"
+#include "nm-utils.h"
+
+static void impl_cdma_device_get_signal_quality (NMCdmaModemDevice *modem, DBusGMethodInvocation *context);
+
+#include "nm-cdma-device-glue.h"
+
+G_DEFINE_TYPE (NMCdmaModemDevice, nm_cdma_modem_device, NM_TYPE_MODEM_DEVICE)
+G_DEFINE_TYPE (NMCdmaModem, nm_cdma_modem, NM_TYPE_MODEM_DEVICE)
+
+#define NM_CDMA_MODEM_DEVICE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_CDMA_MODEM_DEVICE, NMCdmaModemDevicePrivate))
+#define NM_CDMA_MODEM_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_CDMA_MODEM, NMCdmaModemPrivate))
+
+enum {
+ MODEM_STATE_BEGIN,
@@ -289,11 +236,8 @@ index 0000000..b674342
+};
+
+typedef struct {
+ NMDBusManager *dbus_mgr;
+ char *path;
+ DBusGProxy *proxy;
+ int modem_state;
+} NMCdmaModemDevicePrivate;
+} NMCdmaModemPrivate;
+
+enum {
+ SIGNAL_QUALITY,
@@ -304,15 +248,15 @@ index 0000000..b674342
+static guint signals[LAST_SIGNAL] = { 0 };
+
+NMDevice *
+nm_cdma_modem_device_new (const char *path,
+ const char *data_device,
+ const char *driver)
+nm_cdma_modem_new (const char *path,
+ const char *data_device,
+ const char *driver)
+{
+ g_return_val_if_fail (path != NULL, NULL);
+ g_return_val_if_fail (data_device != NULL, NULL);
+ g_return_val_if_fail (driver != NULL, NULL);
+
+ return (NMDevice *) g_object_new (NM_TYPE_CDMA_MODEM_DEVICE,
+ return (NMDevice *) g_object_new (NM_TYPE_CDMA_MODEM,
+ NM_DEVICE_INTERFACE_UDI, path,
+ NM_DEVICE_INTERFACE_IFACE, data_device,
+ NM_DEVICE_INTERFACE_DRIVER, driver,
@@ -322,7 +266,7 @@ index 0000000..b674342
+}
+
+static NMSetting *
+get_setting (NMCdmaModemDevice *device, GType setting_type)
+get_setting (NMCdmaModem *device, GType setting_type)
+{
+ NMActRequest *req;
+ NMSetting *setting = NULL;
@@ -342,8 +286,8 @@ index 0000000..b674342
+static void
+state_machine (DBusGProxy *proxy, DBusGProxyCall *call_id, gpointer user_data)
+{
+ NMCdmaModemDevice *modem = NM_CDMA_MODEM_DEVICE (user_data);
+ NMCdmaModemDevicePrivate *priv = NM_CDMA_MODEM_DEVICE_GET_PRIVATE (modem);
+ NMCdmaModem *modem = NM_CDMA_MODEM (user_data);
+ NMCdmaModemPrivate *priv = NM_CDMA_MODEM_GET_PRIVATE (modem);
+ NMSettingCdma *setting;
+ GError *error = NULL;
+
@@ -353,7 +297,7 @@ index 0000000..b674342
+ dbus_g_proxy_end_call (proxy, call_id, &error, G_TYPE_INVALID);
+
+ if (error) {
+ nm_warning ("CDMA device connection failed: %s", error->message);
+ nm_warning ("CDMA modem connection failed: %s", error->message);
+ nm_device_state_changed (NM_DEVICE (modem), NM_DEVICE_STATE_FAILED, NM_DEVICE_STATE_REASON_NONE);
+ return;
+ }
@@ -361,7 +305,7 @@ index 0000000..b674342
+ switch (priv->modem_state) {
+ case MODEM_STATE_BEGIN:
+ priv->modem_state = MODEM_STATE_ENABLE;
+ dbus_g_proxy_begin_call (nm_modem_device_get_proxy (NM_MODEM_DEVICE (modem)),
+ dbus_g_proxy_begin_call (nm_modem_device_get_proxy (NM_MODEM_DEVICE (modem), NULL),
+ "Enable", state_machine,
+ modem, NULL,
+ G_TYPE_BOOLEAN, TRUE,
@@ -369,7 +313,7 @@ index 0000000..b674342
+ break;
+ case MODEM_STATE_ENABLE:
+ priv->modem_state = MODEM_STATE_CONNECT;
+ dbus_g_proxy_begin_call (nm_modem_device_get_proxy (NM_MODEM_DEVICE (modem)),
+ dbus_g_proxy_begin_call (nm_modem_device_get_proxy (NM_MODEM_DEVICE (modem), NULL),
+ "Connect", state_machine,
+ modem, NULL,
+ G_TYPE_STRING, setting->number,
@@ -388,10 +332,10 @@ index 0000000..b674342
+static NMActStageReturn
+real_act_stage1_prepare (NMDevice *device, NMDeviceStateReason *reason)
+{
+ NMCdmaModemDevicePrivate *priv = NM_CDMA_MODEM_DEVICE_GET_PRIVATE (device);
+ NMCdmaModemPrivate *priv = NM_CDMA_MODEM_GET_PRIVATE (device);
+
+ priv->modem_state = MODEM_STATE_BEGIN;
+ state_machine (priv->proxy, NULL, device);
+ state_machine (NULL, NULL, device);
+
+ return NM_ACT_STAGE_RETURN_POSTPONE;
+}
@@ -479,85 +423,23 @@ index 0000000..b674342
+ nm_device_activate_schedule_stage1_device_prepare (dev);
+}
+
+static void
+signal_quality_proxy (DBusGProxy *proxy, guint32 quality, gpointer user_data)
+{
+ g_signal_emit (NM_CDMA_MODEM_DEVICE (user_data), signals[SIGNAL_QUALITY], 0, quality);
+}
+
+static void
+impl_cdma_device_get_signal_quality (NMCdmaModemDevice *modem, DBusGMethodInvocation *context)
+{
+ /* FIXME */
+}
+
+/*****************************************************************************/
+
+static void
+nm_cdma_modem_device_init (NMCdmaModemDevice *self)
+nm_cdma_modem_init (NMCdmaModem *self)
+{
+ NMCdmaModemDevicePrivate *priv = NM_CDMA_MODEM_DEVICE_GET_PRIVATE (self);
+
+ priv->dbus_mgr = nm_dbus_manager_get ();
+
+ nm_device_set_device_type (NM_DEVICE (self), NM_DEVICE_TYPE_GSM);
+}
+
+static GObject*
+constructor (GType type,
+ guint n_construct_params,
+ GObjectConstructParam *construct_params)
+{
+ GObject *object;
+ NMCdmaModemDevicePrivate *priv;
+
+ object = G_OBJECT_CLASS (nm_cdma_modem_device_parent_class)->constructor (type,
+ n_construct_params,
+ construct_params);
+ if (!object)
+ return NULL;
+
+ priv = NM_CDMA_MODEM_DEVICE_GET_PRIVATE (object);
+
+ priv->proxy = dbus_g_proxy_new_for_name (nm_dbus_manager_get_connection (priv->dbus_mgr),
+ MM_DBUS_SERVICE,
+ nm_device_get_udi (NM_DEVICE (object)),
+ MM_DBUS_INTERFACE_CDMA_MODEM);
+
+ dbus_g_proxy_add_signal (priv->proxy, "SignalQuality", G_TYPE_UINT, G_TYPE_INVALID);
+ dbus_g_proxy_connect_signal (priv->proxy, "SignalQuality",
+ G_CALLBACK (signal_quality_proxy),
+ object,
+ NULL);
+
+ return object;
+}
+
+static void
+finalize (GObject *object)
+{
+ NMCdmaModemDevicePrivate *priv = NM_CDMA_MODEM_DEVICE_GET_PRIVATE (object);
+
+ if (priv->proxy)
+ g_object_unref (priv->proxy);
+
+ g_object_unref (priv->dbus_mgr);
+
+ G_OBJECT_CLASS (nm_cdma_modem_device_parent_class)->finalize (object);
+}
+
+static void
+nm_cdma_modem_device_class_init (NMCdmaModemDeviceClass *klass)
+nm_cdma_modem_class_init (NMCdmaModemClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ NMDeviceClass *device_class = NM_DEVICE_CLASS (klass);
+
+ g_type_class_add_private (object_class, sizeof (NMCdmaModemDevicePrivate));
+ g_type_class_add_private (object_class, sizeof (NMCdmaModemPrivate));
+
+ /* Virtual methods */
+ object_class->constructor = constructor;
+ object_class->finalize = finalize;
+
+ device_class->get_best_auto_connection = real_get_best_auto_connection;
+ device_class->connection_secrets_updated = real_connection_secrets_updated;
+ device_class->act_stage1_prepare = real_act_stage1_prepare;
@@ -567,7 +449,7 @@ index 0000000..b674342
+ g_signal_new ("signal-quality",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (NMCdmaModemDeviceClass, signal_quality),
+ G_STRUCT_OFFSET (NMCdmaModemClass, signal_quality),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__UINT,
+ G_TYPE_NONE, 1,
@@ -576,58 +458,58 @@ index 0000000..b674342
+ dbus_g_object_type_install_info (G_TYPE_FROM_CLASS (klass),
+ &dbus_glib_nm_cdma_device_object_info);
+}
diff --git a/src/modem-manager/nm-cdma-modem-device.h b/src/modem-manager/nm-cdma-modem-device.h
diff --git a/src/modem-manager/nm-cdma-modem.h b/src/modem-manager/nm-cdma-modem.h
new file mode 100644
index 0000000..888d429
index 0000000..5dc3c14
--- /dev/null
+++ b/src/modem-manager/nm-cdma-modem-device.h
+++ b/src/modem-manager/nm-cdma-modem.h
@@ -0,0 +1,36 @@
+/* -*- Mode: C; tab-width: 5; indent-tabs-mode: t; c-basic-offset: 5 -*- */
+
+#ifndef NM_CDMA_MODEM_DEVICE_H
+#define NM_CDMA_MODEM_DEVICE_H
+#ifndef NM_CDMA_MODEM_H
+#define NM_CDMA_MODEM_H
+
+#include <nm-modem-device.h>
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_CDMA_MODEM_DEVICE (nm_cdma_modem_device_get_type ())
+#define NM_CDMA_MODEM_DEVICE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_CDMA_MODEM_DEVICE, NMCdmaModemDevice))
+#define NM_CDMA_MODEM_DEVICE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_CDMA_MODEM_DEVICE, NMCdmaModemDeviceClass))
+#define NM_IS_CDMA_MODEM_DEVICE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_CDMA_MODEM_DEVICE))
+#define NM_IS_CDMA_MODEM_DEVICE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_CDMA_MODEM_DEVICE))
+#define NM_CDMA_MODEM_DEVICE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_CDMA_MODEM_DEVICE, NMCdmaModemDeviceClass))
+#define NM_TYPE_CDMA_MODEM (nm_cdma_modem_get_type ())
+#define NM_CDMA_MODEM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_CDMA_MODEM, NMCdmaModem))
+#define NM_CDMA_MODEM_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_CDMA_MODEM, NMCdmaModemClass))
+#define NM_IS_CDMA_MODEM(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_CDMA_MODEM))
+#define NM_IS_CDMA_MODEM_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_CDMA_MODEM))
+#define NM_CDMA_MODEM_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_CDMA_MODEM, NMCdmaModemClass))
+
+typedef struct {
+ NMModemDevice parent;
+} NMCdmaModemDevice;
+} NMCdmaModem;
+
+typedef struct {
+ NMModemDeviceClass parent;
+
+ /* Signals */
+ void (*signal_quality) (NMModemDevice *device, guint32 quality);
+} NMCdmaModemDeviceClass;
+ void (*signal_quality) (NMCdmaModem *modem, guint32 quality);
+} NMCdmaModemClass;
+
+GType nm_cdma_modem_device_get_type (void);
+GType nm_cdma_modem_get_type (void);
+
+NMDevice *nm_cdma_modem_device_new (const char *path,
+ const char *data_device,
+ const char *driver);
+NMDevice *nm_cdma_modem_new (const char *path,
+ const char *data_device,
+ const char *driver);
+
+G_END_DECLS
+
+#endif /* NM_CDMA_MODEM_DEVICE_H */
diff --git a/src/modem-manager/nm-gsm-modem-device.c b/src/modem-manager/nm-gsm-modem-device.c
+#endif /* NM_CDMA_MODEM_H */
diff --git a/src/modem-manager/nm-gsm-modem.c b/src/modem-manager/nm-gsm-modem.c
new file mode 100644
index 0000000..eb2c4d6
index 0000000..1069cd7
--- /dev/null
+++ b/src/modem-manager/nm-gsm-modem-device.c
@@ -0,0 +1,411 @@
+++ b/src/modem-manager/nm-gsm-modem.c
@@ -0,0 +1,329 @@
+/* -*- Mode: C; tab-width: 5; indent-tabs-mode: t; c-basic-offset: 5 -*- */
+
+#include <string.h>
+#include "nm-gsm-modem-device.h"
+#include "nm-gsm-modem.h"
+#include "nm-device-private.h"
+#include "nm-device-interface.h"
+#include "nm-dbus-manager.h"
@@ -639,13 +521,11 @@ index 0000000..eb2c4d6
+#include "nm-modem-types.h"
+#include "nm-utils.h"
+
+static void impl_gsm_device_get_signal_quality (NMGsmModemDevice *modem, DBusGMethodInvocation *context);
+
+#include "nm-gsm-device-glue.h"
+
+G_DEFINE_TYPE (NMGsmModemDevice, nm_gsm_modem_device, NM_TYPE_MODEM_DEVICE)
+G_DEFINE_TYPE (NMGsmModem, nm_gsm_modem, NM_TYPE_MODEM_DEVICE)
+
+#define NM_GSM_MODEM_DEVICE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_GSM_MODEM_DEVICE, NMGsmModemDevicePrivate))
+#define NM_GSM_MODEM_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_GSM_MODEM, NMGsmModemPrivate))
+
+enum {
+ MODEM_STATE_BEGIN,
@@ -659,33 +539,19 @@ index 0000000..eb2c4d6
+};
+
+typedef struct {
+ NMDBusManager *dbus_mgr;
+ char *path;
+ DBusGProxy *proxy;
+ NMPPPManager *ppp_manager;
+ NMIP4Config *pending_ip4_config;
+
+ int modem_state;
+} NMGsmModemDevicePrivate;
+
+enum {
+ SIGNAL_QUALITY,
+
+ LAST_SIGNAL
+};
+
+static guint signals[LAST_SIGNAL] = { 0 };
+} NMGsmModemPrivate;
+
+NMDevice *
+nm_gsm_modem_device_new (const char *path,
+ const char *data_device,
+ const char *driver)
+nm_gsm_modem_new (const char *path,
+ const char *data_device,
+ const char *driver)
+{
+ g_return_val_if_fail (path != NULL, NULL);
+ g_return_val_if_fail (data_device != NULL, NULL);
+ g_return_val_if_fail (driver != NULL, NULL);
+
+ return (NMDevice *) g_object_new (NM_TYPE_GSM_MODEM_DEVICE,
+ return (NMDevice *) g_object_new (NM_TYPE_GSM_MODEM,
+ NM_DEVICE_INTERFACE_UDI, path,
+ NM_DEVICE_INTERFACE_IFACE, data_device,
+ NM_DEVICE_INTERFACE_DRIVER, driver,
@@ -695,12 +561,12 @@ index 0000000..eb2c4d6
+}
+
+static NMSetting *
+get_setting (NMGsmModemDevice *device, GType setting_type)
+get_setting (NMGsmModem *modem, GType setting_type)
+{
+ NMActRequest *req;
+ NMSetting *setting = NULL;
+
+ req = nm_device_get_act_request (NM_DEVICE (device));
+ req = nm_device_get_act_request (NM_DEVICE (modem));
+ if (req) {
+ NMConnection *connection;
+
@@ -712,11 +578,13 @@ index 0000000..eb2c4d6
+ return setting;
+}
+
+#define get_proxy(dev,iface) (nm_modem_device_get_proxy(NM_MODEM_DEVICE (dev), iface))
+
+static void
+state_machine (DBusGProxy *proxy, DBusGProxyCall *call_id, gpointer user_data)
+{
+ NMGsmModemDevice *modem = NM_GSM_MODEM_DEVICE (user_data);
+ NMGsmModemDevicePrivate *priv = NM_GSM_MODEM_DEVICE_GET_PRIVATE (modem);
+ NMGsmModem *modem = NM_GSM_MODEM (user_data);
+ NMGsmModemPrivate *priv = NM_GSM_MODEM_GET_PRIVATE (modem);
+ NMSettingGsm *setting;
+ const char *secret = NULL;
+ const char *secret_name = NULL;
@@ -744,7 +612,7 @@ index 0000000..eb2c4d6
+ retry_secret = TRUE;
+ priv->modem_state = MODEM_STATE_SET_PIN;
+ } else {
+ nm_warning ("GSM device connection failed: %s", error->message);
+ nm_warning ("GSM modem connection failed: %s", error->message);
+ nm_device_state_changed (NM_DEVICE (modem), NM_DEVICE_STATE_FAILED, NM_DEVICE_STATE_REASON_NONE);
+ return;
+ }
@@ -755,7 +623,7 @@ index 0000000..eb2c4d6
+ switch (priv->modem_state) {
+ case MODEM_STATE_BEGIN:
+ priv->modem_state = MODEM_STATE_ENABLE;
+ dbus_g_proxy_begin_call (nm_modem_device_get_proxy (NM_MODEM_DEVICE (modem)),
+ dbus_g_proxy_begin_call (get_proxy (modem, MM_DBUS_INTERFACE_MODEM),
+ "Enable", state_machine,
+ modem, NULL,
+ G_TYPE_BOOLEAN, TRUE,
@@ -765,7 +633,8 @@ index 0000000..eb2c4d6
+ case MODEM_STATE_SET_PIN:
+ if (secret) {
+ priv->modem_state = MODEM_STATE_ENABLE;
+ dbus_g_proxy_begin_call (priv->proxy, "SetPin", state_machine,
+ dbus_g_proxy_begin_call (get_proxy (modem, MM_DBUS_INTERFACE_MODEM_GSM_CARD),
+ "SetPin", state_machine,
+ modem, NULL,
+ G_TYPE_STRING, secret,
+ G_TYPE_INVALID);
@@ -784,7 +653,8 @@ index 0000000..eb2c4d6
+ case MODEM_STATE_ENABLE:
+ priv->modem_state = MODEM_STATE_SET_APN;
+ if (setting->apn)
+ dbus_g_proxy_begin_call (priv->proxy, "SetAPN", state_machine,
+ dbus_g_proxy_begin_call (get_proxy (modem, MM_DBUS_INTERFACE_MODEM_GSM_NETWORK),
+ "SetAPN", state_machine,
+ modem, NULL,
+ G_TYPE_STRING, setting->apn,
+ G_TYPE_INVALID);
@@ -795,7 +665,8 @@ index 0000000..eb2c4d6
+ case MODEM_STATE_SET_APN:
+ priv->modem_state = MODEM_STATE_SET_BAND;
+ if (setting->band)
+ dbus_g_proxy_begin_call (priv->proxy, "SetBand", state_machine,
+ dbus_g_proxy_begin_call (get_proxy (modem, MM_DBUS_INTERFACE_MODEM_GSM_NETWORK),
+ "SetBand", state_machine,
+ modem, NULL,
+ G_TYPE_UINT, (guint32) setting->band,
+ G_TYPE_INVALID);
@@ -807,7 +678,8 @@ index 0000000..eb2c4d6
+ case MODEM_STATE_SET_BAND:
+ priv->modem_state = MODEM_STATE_SET_NETWORK_MODE;
+ if (setting->network_type)
+ dbus_g_proxy_begin_call (priv->proxy, "SetNetworkMode", state_machine,
+ dbus_g_proxy_begin_call (get_proxy (modem, MM_DBUS_INTERFACE_MODEM_GSM_NETWORK),
+ "SetNetworkMode", state_machine,
+ modem, NULL,
+ G_TYPE_UINT, (guint32) setting->network_type,
+ G_TYPE_INVALID);
@@ -818,7 +690,8 @@ index 0000000..eb2c4d6
+
+ case MODEM_STATE_SET_NETWORK_MODE:
+ priv->modem_state = MODEM_STATE_REGISTER;
+ dbus_g_proxy_begin_call (priv->proxy, "Register", state_machine,
+ dbus_g_proxy_begin_call (get_proxy (modem, MM_DBUS_INTERFACE_MODEM_GSM_NETWORK),
+ "Register", state_machine,
+ modem, NULL,
+ G_TYPE_STRING, setting->network_id ? setting->network_id : "",
+ G_TYPE_INVALID);
@@ -826,7 +699,7 @@ index 0000000..eb2c4d6
+
+ case MODEM_STATE_REGISTER:
+ priv->modem_state = MODEM_STATE_CONNECT;
+ dbus_g_proxy_begin_call (nm_modem_device_get_proxy (NM_MODEM_DEVICE (modem)),
+ dbus_g_proxy_begin_call (get_proxy (modem, MM_DBUS_INTERFACE_MODEM),
+ "Connect", state_machine,
+ modem, NULL,
+ G_TYPE_STRING, setting->number,
@@ -847,10 +720,10 @@ index 0000000..eb2c4d6
+static NMActStageReturn
+real_act_stage1_prepare (NMDevice *device, NMDeviceStateReason *reason)
+{
+ NMGsmModemDevicePrivate *priv = NM_GSM_MODEM_DEVICE_GET_PRIVATE (device);
+ NMGsmModemPrivate *priv = NM_GSM_MODEM_GET_PRIVATE (device);
+
+ priv->modem_state = MODEM_STATE_BEGIN;
+ state_machine (priv->proxy, NULL, device);
+ state_machine (NULL, NULL, device);
+
+ return NM_ACT_STAGE_RETURN_POSTPONE;
+}
@@ -938,151 +811,78 @@ index 0000000..eb2c4d6
+ nm_device_activate_schedule_stage1_device_prepare (dev);
+}
+
+static void
+signal_quality_proxy (DBusGProxy *proxy, guint32 quality, gpointer user_data)
+{
+ g_signal_emit (NM_GSM_MODEM_DEVICE (user_data), signals[SIGNAL_QUALITY], 0, quality);
+}
+
+static void
+impl_gsm_device_get_signal_quality (NMGsmModemDevice *modem, DBusGMethodInvocation *context)
+{
+ /* FIXME */
+}
+
+/*****************************************************************************/
+
+static void
+nm_gsm_modem_device_init (NMGsmModemDevice *self)
+nm_gsm_modem_init (NMGsmModem *self)
+{
+ NMGsmModemDevicePrivate *priv = NM_GSM_MODEM_DEVICE_GET_PRIVATE (self);
+
+ priv->dbus_mgr = nm_dbus_manager_get ();
+
+ nm_device_set_device_type (NM_DEVICE (self), NM_DEVICE_TYPE_GSM);
+}
+
+static GObject*
+constructor (GType type,
+ guint n_construct_params,
+ GObjectConstructParam *construct_params)
+{
+ GObject *object;
+ NMGsmModemDevicePrivate *priv;
+
+ object = G_OBJECT_CLASS (nm_gsm_modem_device_parent_class)->constructor (type,
+ n_construct_params,
+ construct_params);
+ if (!object)
+ return NULL;
+
+ priv = NM_GSM_MODEM_DEVICE_GET_PRIVATE (object);
+
+ priv->proxy = dbus_g_proxy_new_for_name (nm_dbus_manager_get_connection (priv->dbus_mgr),
+ MM_DBUS_SERVICE,
+ nm_device_get_udi (NM_DEVICE (object)),
+ MM_DBUS_INTERFACE_GSM_MODEM);
+
+ dbus_g_proxy_add_signal (priv->proxy, "SignalQuality", G_TYPE_UINT, G_TYPE_INVALID);
+ dbus_g_proxy_connect_signal (priv->proxy, "SignalQuality",
+ G_CALLBACK (signal_quality_proxy),
+ object,
+ NULL);
+
+ return object;
+}
+
+static void
+finalize (GObject *object)
+{
+ NMGsmModemDevicePrivate *priv = NM_GSM_MODEM_DEVICE_GET_PRIVATE (object);
+
+ if (priv->proxy)
+ g_object_unref (priv->proxy);
+
+ g_object_unref (priv->dbus_mgr);
+
+ G_OBJECT_CLASS (nm_gsm_modem_device_parent_class)->finalize (object);
+}
+
+static void
+nm_gsm_modem_device_class_init (NMGsmModemDeviceClass *klass)
+nm_gsm_modem_class_init (NMGsmModemClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ NMDeviceClass *device_class = NM_DEVICE_CLASS (klass);
+
+ g_type_class_add_private (object_class, sizeof (NMGsmModemDevicePrivate));
+ g_type_class_add_private (object_class, sizeof (NMGsmModemPrivate));
+
+ /* Virtual methods */
+ object_class->constructor = constructor;
+ object_class->finalize = finalize;
+
+ device_class->get_best_auto_connection = real_get_best_auto_connection;
+ device_class->connection_secrets_updated = real_connection_secrets_updated;
+ device_class->act_stage1_prepare = real_act_stage1_prepare;
+
+ /* Signals */
+ signals[SIGNAL_QUALITY] =
+ g_signal_new ("signal-quality",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (NMGsmModemDeviceClass, signal_quality),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__UINT,
+ G_TYPE_NONE, 1,
+ G_TYPE_UINT);
+
+ dbus_g_object_type_install_info (G_TYPE_FROM_CLASS (klass),
+ &dbus_glib_nm_gsm_device_object_info);
+}
diff --git a/src/modem-manager/nm-gsm-modem-device.h b/src/modem-manager/nm-gsm-modem-device.h
diff --git a/src/modem-manager/nm-gsm-modem.h b/src/modem-manager/nm-gsm-modem.h
new file mode 100644
index 0000000..535c0f3
index 0000000..8df8265
--- /dev/null
+++ b/src/modem-manager/nm-gsm-modem-device.h
+++ b/src/modem-manager/nm-gsm-modem.h
@@ -0,0 +1,36 @@
+/* -*- Mode: C; tab-width: 5; indent-tabs-mode: t; c-basic-offset: 5 -*- */
+
+#ifndef NM_GSM_MODEM_DEVICE_H
+#define NM_GSM_MODEM_DEVICE_H
+#ifndef NM_GSM_MODEM_H
+#define NM_GSM_MODEM_H
+
+#include <nm-modem-device.h>
+
+G_BEGIN_DECLS
+
+#define NM_TYPE_GSM_MODEM_DEVICE (nm_gsm_modem_device_get_type ())
+#define NM_GSM_MODEM_DEVICE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_GSM_MODEM_DEVICE, NMGsmModemDevice))
+#define NM_GSM_MODEM_DEVICE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_GSM_MODEM_DEVICE, NMGsmModemDeviceClass))
+#define NM_IS_GSM_MODEM_DEVICE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_GSM_MODEM_DEVICE))
+#define NM_IS_GSM_MODEM_DEVICE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_GSM_MODEM_DEVICE))
+#define NM_GSM_MODEM_DEVICE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_GSM_MODEM_DEVICE, NMGsmModemDeviceClass))
+#define NM_TYPE_GSM_MODEM (nm_gsm_modem_get_type ())
+#define NM_GSM_MODEM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_GSM_MODEM, NMGsmModem))
+#define NM_GSM_MODEM_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_GSM_MODEM, NMGsmModemClass))
+#define NM_IS_GSM_MODEM(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_GSM_MODEM))
+#define NM_IS_GSM_MODEM_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_GSM_MODEM))
+#define NM_GSM_MODEM_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_GSM_MODEM, NMGsmModemClass))
+
+typedef struct {
+ NMModemDevice parent;
+} NMGsmModemDevice;
+} NMGsmModem;
+
+typedef struct {
+ NMModemDeviceClass parent;
+
+ /* Signals */
+ void (*signal_quality) (NMModemDevice *device, guint32 quality);
+} NMGsmModemDeviceClass;
+ void (*signal_quality) (NMGsmModem *modem, guint32 quality);
+} NMGsmModemClass;
+
+GType nm_gsm_modem_device_get_type (void);
+GType nm_gsm_modem_get_type (void);
+
+NMDevice *nm_gsm_modem_device_new (const char *path,
+ const char *data_device,
+ const char *driver);
+NMDevice *nm_gsm_modem_new (const char *path,
+ const char *data_device,
+ const char *driver);
+
+G_END_DECLS
+
+#endif /* NM_GSM_MODEM_DEVICE_H */
+#endif /* NM_GSM_MODEM_H */
diff --git a/src/modem-manager/nm-modem-device.c b/src/modem-manager/nm-modem-device.c
new file mode 100644
index 0000000..1292854
index 0000000..bc3ab47
--- /dev/null
+++ b/src/modem-manager/nm-modem-device.c
@@ -0,0 +1,411 @@
@@ -0,0 +1,427 @@
+/* -*- Mode: C; tab-width: 5; indent-tabs-mode: t; c-basic-offset: 5 -*- */
+
+#include <string.h>
@@ -1142,11 +942,24 @@ index 0000000..1292854
+}
+
+DBusGProxy *
+nm_modem_device_get_proxy (NMModemDevice *device)
+nm_modem_device_get_proxy (NMModemDevice *device,
+ const char *interface)
+{
+
+ NMModemDevicePrivate *priv = NM_MODEM_DEVICE_GET_PRIVATE (device);
+ const char *current_iface;
+
+ g_return_val_if_fail (NM_IS_MODEM_DEVICE (device), NULL);
+
+ return NM_MODEM_DEVICE_GET_PRIVATE (device)->proxy;
+ /* Default to the default interface. */
+ if (interface == NULL)
+ interface = MM_DBUS_INTERFACE_MODEM;
+
+ current_iface = dbus_g_proxy_get_interface (priv->proxy);
+ if (!current_iface || strcmp (current_iface, interface))
+ dbus_g_proxy_set_interface (priv->proxy, interface);
+
+ return priv->proxy;
+}
+
+static void
@@ -1298,7 +1111,8 @@ index 0000000..1292854
+ priv->ppp_manager = NULL;
+ }
+
+ dbus_g_proxy_call_no_reply (priv->proxy, "Enable", G_TYPE_BOOLEAN, FALSE, G_TYPE_INVALID);
+ dbus_g_proxy_call_no_reply (nm_modem_device_get_proxy (NM_MODEM_DEVICE (device), NULL),
+ "Enable", G_TYPE_BOOLEAN, FALSE, G_TYPE_INVALID);
+}
+
+static guint32
@@ -1323,7 +1137,8 @@ index 0000000..1292854
+ NMDeviceStateReason reason,
+ gpointer user_data)
+{
+ NMModemDevicePrivate *priv = NM_MODEM_DEVICE_GET_PRIVATE (user_data);
+ NMModemDevice *self = NM_MODEM_DEVICE (user_data);
+ NMModemDevicePrivate *priv = NM_MODEM_DEVICE_GET_PRIVATE (self);
+
+ /* Remove any previous delayed transition to disconnected */
+ if (priv->state_to_disconnected_id) {
@@ -1345,7 +1160,8 @@ index 0000000..1292854
+ case NM_DEVICE_STATE_UNAVAILABLE:
+ case NM_DEVICE_STATE_FAILED:
+ case NM_DEVICE_STATE_DISCONNECTED:
+ dbus_g_proxy_call_no_reply (priv->proxy, "Disconnect", G_TYPE_INVALID);
+ dbus_g_proxy_call_no_reply (nm_modem_device_get_proxy (self, NULL),
+ "Disconnect", G_TYPE_INVALID);
+ break;
+ default:
+ break;
@@ -1496,10 +1312,10 @@ index 0000000..1292854
+}
diff --git a/src/modem-manager/nm-modem-device.h b/src/modem-manager/nm-modem-device.h
new file mode 100644
index 0000000..cc15c3a
index 0000000..c0977cf
--- /dev/null
+++ b/src/modem-manager/nm-modem-device.h
@@ -0,0 +1,42 @@
@@ -0,0 +1,43 @@
+/* -*- Mode: C; tab-width: 5; indent-tabs-mode: t; c-basic-offset: 5 -*- */
+
+#ifndef NM_MODEM_DEVICE_H
@@ -1537,14 +1353,15 @@ index 0000000..cc15c3a
+/* Protected */
+
+NMPPPManager *nm_modem_device_get_ppp_manager (NMModemDevice *device);
+DBusGProxy *nm_modem_device_get_proxy (NMModemDevice *device);
+DBusGProxy *nm_modem_device_get_proxy (NMModemDevice *device,
+ const char *interface);
+
+G_END_DECLS
+
+#endif /* NM_MODEM_DEVICE_H */
diff --git a/src/modem-manager/nm-modem-manager.c b/src/modem-manager/nm-modem-manager.c
new file mode 100644
index 0000000..bf81e9e
index 0000000..693e130
--- /dev/null
+++ b/src/modem-manager/nm-modem-manager.c
@@ -0,0 +1,404 @@
@@ -1553,8 +1370,8 @@ index 0000000..bf81e9e
+#include <string.h>
+#include "nm-modem-manager.h"
+#include "nm-modem-device.h"
+#include "nm-gsm-modem-device.h"
+#include "nm-cdma-modem-device.h"
+#include "nm-gsm-modem.h"
+#include "nm-cdma-modem.h"
+#include "nm-dbus-manager.h"
+#include "nm-utils.h"
+#include "nm-modem-types.h"
@@ -1695,13 +1512,13 @@ index 0000000..bf81e9e
+ }
+
+ if (modem_type == MM_MODEM_TYPE_GSM)
+ device = nm_gsm_modem_device_new (path,
+ data_device,
+ driver);
+ device = nm_gsm_modem_new (path,
+ data_device,
+ driver);
+ else if (modem_type == MM_MODEM_TYPE_CDMA)
+ device = nm_cdma_modem_device_new (path,
+ data_device,
+ driver);
+ device = nm_cdma_modem_new (path,
+ data_device,
+ driver);
+ else
+ g_error ("Invalid modem type");
+
@@ -1995,10 +1812,10 @@ index 0000000..ec62f84
+#endif /* NM_MODEM_MANAGER_H */
diff --git a/src/modem-manager/nm-modem-types.h b/src/modem-manager/nm-modem-types.h
new file mode 100644
index 0000000..ddbea05
index 0000000..83bbbb0
--- /dev/null
+++ b/src/modem-manager/nm-modem-types.h
@@ -0,0 +1,22 @@
@@ -0,0 +1,24 @@
+/* -*- Mode: C; tab-width: 5; indent-tabs-mode: t; c-basic-offset: 5 -*- */
+
+#ifndef NM_MODEM_TYPES_H
@@ -2008,8 +1825,10 @@ index 0000000..ddbea05
+#define MM_DBUS_PATH "/org/freedesktop/ModemManager"
+#define MM_DBUS_INTERFACE "org.freedesktop.ModemManager"
+#define MM_DBUS_INTERFACE_MODEM "org.freedesktop.ModemManager.Modem"
+#define MM_DBUS_INTERFACE_GSM_MODEM "org.freedesktop.ModemManager.Modem.Gsm"
+#define MM_DBUS_INTERFACE_CDMA_MODEM "org.freedesktop.ModemManager.Modem.Cdma"
+#define MM_DBUS_INTERFACE_MODEM_CDMA "org.freedesktop.ModemManager.Modem.Cdma"
+
+#define MM_DBUS_INTERFACE_MODEM_GSM_CARD "org.freedesktop.ModemManager.Modem.Gsm.Card"
+#define MM_DBUS_INTERFACE_MODEM_GSM_NETWORK "org.freedesktop.ModemManager.Modem.Gsm.Network"
+
+#define MM_MODEM_TYPE_UNKNOWN 0
+#define MM_MODEM_TYPE_GSM 1

View File

@@ -148,7 +148,7 @@ index ad125e5..9ae87e1 100644
break;
diff --git a/src/mm-types.h b/src/mm-types.h
new file mode 100644
index 0000000..4c6e514
index 0000000..a1f9979
--- /dev/null
+++ b/src/mm-types.h
@@ -0,0 +1,18 @@
@@ -158,7 +158,7 @@ index 0000000..4c6e514
+#define MM_TYPES_H
+
+#define MM_DBUS_SERVICE "org.freedesktop.ModemManager"
+#define MM_DBUS_INTERFACE_MODEM_GSM "org.freedesktop.ModemManager.Modem.Gsm"
+#define MM_DBUS_INTERFACE_MODEM_GSM "org.freedesktop.ModemManager.Modem.Gsm.Network"
+
+enum {
+ MM_GSM_MODEM_REG_STATUS_IDLE = 0,