aboutsummaryrefslogtreecommitdiff
path: root/src/mm-iface-modem-3gpp-ussd.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mm-iface-modem-3gpp-ussd.c')
-rw-r--r--src/mm-iface-modem-3gpp-ussd.c88
1 files changed, 68 insertions, 20 deletions
diff --git a/src/mm-iface-modem-3gpp-ussd.c b/src/mm-iface-modem-3gpp-ussd.c
index 7c88affc..e89e8e0a 100644
--- a/src/mm-iface-modem-3gpp-ussd.c
+++ b/src/mm-iface-modem-3gpp-ussd.c
@@ -48,6 +48,7 @@ static void interface_disabling_step (DisablingContext *ctx);
typedef enum {
DISABLING_STEP_FIRST,
DISABLING_STEP_DISABLE_UNSOLICITED_RESULT_CODES,
+ DISABLING_STEP_CLEANUP_UNSOLICITED_RESULT_CODES,
DISABLING_STEP_LAST
} DisablingStep;
@@ -123,6 +124,27 @@ disable_unsolicited_result_codes_ready (MMIfaceModem3gppUssd *self,
}
static void
+cleanup_unsolicited_result_codes_ready (MMIfaceModem3gppUssd *self,
+ GAsyncResult *res,
+ DisablingContext *ctx)
+{
+ GError *error = NULL;
+
+ MM_IFACE_MODEM_3GPP_USSD_GET_INTERFACE (self)->cleanup_unsolicited_result_codes_finish (self,
+ res,
+ &error);
+ if (error) {
+ /* This error shouldn't be treated as critical */
+ mm_dbg ("Couldn't cleanup unsolicited result codes: '%s'", error->message);
+ g_error_free (error);
+ }
+
+ /* Go on to next step */
+ ctx->step++;
+ interface_disabling_step (ctx);
+}
+
+static void
interface_disabling_step (DisablingContext *ctx)
{
switch (ctx->step) {
@@ -131,16 +153,18 @@ interface_disabling_step (DisablingContext *ctx)
ctx->step++;
case DISABLING_STEP_DISABLE_UNSOLICITED_RESULT_CODES:
- if (MM_IFACE_MODEM_3GPP_USSD_GET_INTERFACE (ctx->self)->disable_unsolicited_result_codes &&
- MM_IFACE_MODEM_3GPP_USSD_GET_INTERFACE (ctx->self)->disable_unsolicited_result_codes_finish) {
- MM_IFACE_MODEM_3GPP_USSD_GET_INTERFACE (ctx->self)->disable_unsolicited_result_codes (
- ctx->self,
- (GAsyncReadyCallback)disable_unsolicited_result_codes_ready,
- ctx);
- return;
- }
- /* Fall down to next step */
- ctx->step++;
+ MM_IFACE_MODEM_3GPP_USSD_GET_INTERFACE (ctx->self)->disable_unsolicited_result_codes (
+ ctx->self,
+ (GAsyncReadyCallback)disable_unsolicited_result_codes_ready,
+ ctx);
+ return;
+
+ case DISABLING_STEP_CLEANUP_UNSOLICITED_RESULT_CODES:
+ MM_IFACE_MODEM_3GPP_USSD_GET_INTERFACE (ctx->self)->cleanup_unsolicited_result_codes (
+ ctx->self,
+ (GAsyncReadyCallback)cleanup_unsolicited_result_codes_ready,
+ ctx);
+ return;
case DISABLING_STEP_LAST:
/* We are done without errors! */
@@ -169,6 +193,7 @@ static void interface_enabling_step (EnablingContext *ctx);
typedef enum {
ENABLING_STEP_FIRST,
+ ENABLING_STEP_SETUP_UNSOLICITED_RESULT_CODES,
ENABLING_STEP_ENABLE_UNSOLICITED_RESULT_CODES,
ENABLING_STEP_LAST
} EnablingStep;
@@ -224,6 +249,27 @@ mm_iface_modem_3gpp_ussd_enable_finish (MMIfaceModem3gppUssd *self,
}
static void
+setup_unsolicited_result_codes_ready (MMIfaceModem3gppUssd *self,
+ GAsyncResult *res,
+ EnablingContext *ctx)
+{
+ GError *error = NULL;
+
+ MM_IFACE_MODEM_3GPP_USSD_GET_INTERFACE (self)->setup_unsolicited_result_codes_finish (self,
+ res,
+ &error);
+ if (error) {
+ /* This error shouldn't be treated as critical */
+ mm_dbg ("Couldn't setup unsolicited result codes: '%s'", error->message);
+ g_error_free (error);
+ }
+
+ /* Go on to next step */
+ ctx->step++;
+ interface_enabling_step (ctx);
+}
+
+static void
enable_unsolicited_result_codes_ready (MMIfaceModem3gppUssd *self,
GAsyncResult *res,
EnablingContext *ctx)
@@ -252,17 +298,19 @@ interface_enabling_step (EnablingContext *ctx)
/* Fall down to next step */
ctx->step++;
+ case ENABLING_STEP_SETUP_UNSOLICITED_RESULT_CODES:
+ MM_IFACE_MODEM_3GPP_USSD_GET_INTERFACE (ctx->self)->setup_unsolicited_result_codes (
+ ctx->self,
+ (GAsyncReadyCallback)setup_unsolicited_result_codes_ready,
+ ctx);
+ return;
+
case ENABLING_STEP_ENABLE_UNSOLICITED_RESULT_CODES:
- if (MM_IFACE_MODEM_3GPP_USSD_GET_INTERFACE (ctx->self)->enable_unsolicited_result_codes &&
- MM_IFACE_MODEM_3GPP_USSD_GET_INTERFACE (ctx->self)->enable_unsolicited_result_codes_finish) {
- MM_IFACE_MODEM_3GPP_USSD_GET_INTERFACE (ctx->self)->enable_unsolicited_result_codes (
- ctx->self,
- (GAsyncReadyCallback)enable_unsolicited_result_codes_ready,
- ctx);
- return;
- }
- /* Fall down to next step */
- ctx->step++;
+ MM_IFACE_MODEM_3GPP_USSD_GET_INTERFACE (ctx->self)->enable_unsolicited_result_codes (
+ ctx->self,
+ (GAsyncReadyCallback)enable_unsolicited_result_codes_ready,
+ ctx);
+ return;
case ENABLING_STEP_LAST:
/* We are done without errors! */