diff options
-rw-r--r-- | NetworkManager-r4012-use-modem-manager.patch | 499 | ||||
-rw-r--r-- | nm-applet-r866-use-modem-manager.patch | 4 |
2 files changed, 161 insertions, 342 deletions
diff --git a/NetworkManager-r4012-use-modem-manager.patch b/NetworkManager-r4012-use-modem-manager.patch index 0629e423..6254692a 100644 --- a/NetworkManager-r4012-use-modem-manager.patch +++ b/NetworkManager-r4012-use-modem-manager.patch @@ -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 diff --git a/nm-applet-r866-use-modem-manager.patch b/nm-applet-r866-use-modem-manager.patch index efcfc64c..8a848e2b 100644 --- a/nm-applet-r866-use-modem-manager.patch +++ b/nm-applet-r866-use-modem-manager.patch @@ -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, |