aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Williams <dcbw@redhat.com>2009-11-23 23:32:01 -0800
committerDan Williams <dcbw@redhat.com>2009-11-23 23:32:01 -0800
commite5b5c8339472a37d3a44ac6239fc3d9bdb9ce5cc (patch)
treefd180d7fdb5b3ef20457308a77a83e968b60d374
parent1fe9150f5c9187d5f53db076ab2224bc9dcf7d45 (diff)
hso: disconnect the PDP context that was active (if any)
Instead of always disconnecting context #1.
-rw-r--r--plugins/mm-modem-hso.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/plugins/mm-modem-hso.c b/plugins/mm-modem-hso.c
index 97ff7c36..99c5823d 100644
--- a/plugins/mm-modem-hso.c
+++ b/plugins/mm-modem-hso.c
@@ -296,8 +296,9 @@ disable (MMModem *modem,
{
MMCallbackInfo *info;
MMSerialPort *primary;
+ char *cmd;
+ guint32 cid;
- mm_generic_gsm_set_cid (MM_GENERIC_GSM (modem), 0);
mm_generic_gsm_pending_registration_stop (MM_GENERIC_GSM (modem));
info = mm_callback_info_new (modem, callback, user_data);
@@ -305,7 +306,17 @@ disable (MMModem *modem,
/* Kill any existing connection */
primary = mm_generic_gsm_get_port (MM_GENERIC_GSM (modem), MM_PORT_TYPE_PRIMARY);
g_assert (primary);
- mm_serial_port_queue_command (primary, "AT_OWANCALL=1,0,0", 3, disable_done, info);
+
+ cid = mm_generic_gsm_get_cid (MM_GENERIC_GSM (modem));
+ mm_generic_gsm_set_cid (MM_GENERIC_GSM (modem), 0);
+
+ /* Disconnect the data session of the active connection, if any */
+ if (cid > 0) {
+ cmd = g_strdup_printf ("AT_OWANCALL=%u,0,0", cid);
+ mm_serial_port_queue_command (primary, cmd, 3, disable_done, info);
+ g_free (cmd);
+ } else
+ disable_done (primary, NULL, NULL, info);
}
static void