diff options
Diffstat (limited to 'src/mm-modem-gsm-network.c')
-rw-r--r-- | src/mm-modem-gsm-network.c | 52 |
1 files changed, 45 insertions, 7 deletions
diff --git a/src/mm-modem-gsm-network.c b/src/mm-modem-gsm-network.c index c302dead..2bf75236 100644 --- a/src/mm-modem-gsm-network.c +++ b/src/mm-modem-gsm-network.c @@ -23,14 +23,14 @@ static void impl_gsm_modem_get_signal_quality (MMModemGsmNetwork *modem, DBusGMethodInvocation *context); static void impl_gsm_modem_set_band (MMModemGsmNetwork *modem, - MMModemGsmNetworkBand band, + MMModemGsmBand band, DBusGMethodInvocation *context); static void impl_gsm_modem_get_band (MMModemGsmNetwork *modem, DBusGMethodInvocation *context); static void impl_gsm_modem_set_network_mode (MMModemGsmNetwork *modem, - MMModemGsmNetworkMode mode, + MMModemGsmMode mode, DBusGMethodInvocation *context); static void impl_gsm_modem_get_network_mode (MMModemGsmNetwork *modem, @@ -264,7 +264,7 @@ mm_modem_gsm_network_get_signal_quality (MMModemGsmNetwork *self, void mm_modem_gsm_network_set_band (MMModemGsmNetwork *self, - MMModemGsmNetworkBand band, + MMModemGsmBand band, MMModemFn callback, gpointer user_data) { @@ -293,7 +293,7 @@ mm_modem_gsm_network_get_band (MMModemGsmNetwork *self, void mm_modem_gsm_network_set_mode (MMModemGsmNetwork *self, - MMModemGsmNetworkMode mode, + MMModemGsmMode mode, MMModemFn callback, gpointer user_data) { @@ -358,7 +358,7 @@ mm_modem_gsm_network_registration_info (MMModemGsmNetwork *self, void mm_modem_gsm_network_mode (MMModemGsmNetwork *self, - MMModemGsmNetworkMode mode) + MMModemGsmMode mode) { g_return_if_fail (MM_IS_MODEM_GSM_NETWORK (self)); @@ -406,11 +406,39 @@ impl_gsm_modem_get_signal_quality (MMModemGsmNetwork *modem, mm_modem_gsm_network_get_signal_quality (modem, uint_call_done, context); } +static gboolean +check_for_single_value (guint32 value) +{ + gboolean found = FALSE; + guint32 i; + + for (i = 1; i <= 32; i++) { + if (value & 0x1) { + if (found) + return FALSE; /* More than one bit set */ + found = TRUE; + } + value >>= 1; + } + + return TRUE; +} + static void impl_gsm_modem_set_band (MMModemGsmNetwork *modem, - MMModemGsmNetworkBand band, + MMModemGsmBand band, DBusGMethodInvocation *context) { + if (!check_for_single_value (band)) { + GError *error; + + error = g_error_new_literal (MM_MODEM_ERROR, MM_MODEM_ERROR_OPERATION_NOT_SUPPORTED, + "Invalid arguments (more than one value given)"); + dbus_g_method_return_error (context, error); + g_error_free (error); + return; + } + mm_modem_gsm_network_set_band (modem, band, async_call_done, context); } @@ -423,9 +451,19 @@ impl_gsm_modem_get_band (MMModemGsmNetwork *modem, static void impl_gsm_modem_set_network_mode (MMModemGsmNetwork *modem, - MMModemGsmNetworkMode mode, + MMModemGsmMode mode, DBusGMethodInvocation *context) { + if (!check_for_single_value (mode)) { + GError *error; + + error = g_error_new_literal (MM_MODEM_ERROR, MM_MODEM_ERROR_OPERATION_NOT_SUPPORTED, + "Invalid arguments (more than one value given)"); + dbus_g_method_return_error (context, error); + g_error_free (error); + return; + } + mm_modem_gsm_network_set_mode (modem, mode, async_call_done, context); } |