aboutsummaryrefslogtreecommitdiff
path: root/src/mm-modem-gsm-network.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mm-modem-gsm-network.c')
-rw-r--r--src/mm-modem-gsm-network.c52
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);
}