static void disconnect_owancall_ready (MMBaseModem *modem, GAsyncResult *res, DisconnectContext *ctx) { GError *error = NULL; /* Ignore errors for now */ mm_base_modem_at_command_full_finish (MM_BASE_MODEM (modem), res, &error); if (error) { mm_dbg ("Disconnection failed (not fatal): %s", error->message); g_error_free (error); } g_simple_async_result_set_op_res_gboolean (ctx->result, TRUE); disconnect_context_complete_and_free (ctx); }
static void disconnect_context_step (DisconnectContext *ctx) { switch (ctx->step) { case DISCONNECT_STEP_FIRST: /* Fall down */ ctx->step++; case DISCONNECT_STEP_STOP_NETWORK_IPV4: if (ctx->packet_data_handle_ipv4) { QmiMessageWdsStopNetworkInput *input; input = qmi_message_wds_stop_network_input_new (); qmi_message_wds_stop_network_input_set_packet_data_handle (input, ctx->packet_data_handle_ipv4, NULL); ctx->running_ipv4 = TRUE; ctx->running_ipv6 = FALSE; qmi_client_wds_stop_network (ctx->client_ipv4, input, 10, NULL, (GAsyncReadyCallback)stop_network_ready, ctx); return; } /* Fall down */ ctx->step++; case DISCONNECT_STEP_STOP_NETWORK_IPV6: if (ctx->packet_data_handle_ipv6) { QmiMessageWdsStopNetworkInput *input; input = qmi_message_wds_stop_network_input_new (); qmi_message_wds_stop_network_input_set_packet_data_handle (input, ctx->packet_data_handle_ipv6, NULL); ctx->running_ipv4 = FALSE; ctx->running_ipv6 = TRUE; qmi_client_wds_stop_network (ctx->client_ipv6, input, 10, NULL, (GAsyncReadyCallback)stop_network_ready, ctx); return; } /* Fall down */ ctx->step++; case DISCONNECT_STEP_LAST: if (!ctx->error_ipv4 && !ctx->error_ipv6) g_simple_async_result_set_op_res_gboolean (ctx->result, TRUE); else { GError *error; /* If both set, IPv4 error preferred */ if (ctx->error_ipv4) { error = ctx->error_ipv4; ctx->error_ipv4 = NULL; } else { error = ctx->error_ipv6; ctx->error_ipv6 = NULL; } g_simple_async_result_take_error (ctx->result, error); } disconnect_context_complete_and_free (ctx); return; } }