diff options
author | Dan Williams <dcbw@redhat.com> | 2009-11-23 23:32:01 -0800 |
---|---|---|
committer | Dan Williams <dcbw@redhat.com> | 2009-11-23 23:32:01 -0800 |
commit | e5b5c8339472a37d3a44ac6239fc3d9bdb9ce5cc (patch) | |
tree | fd180d7fdb5b3ef20457308a77a83e968b60d374 | |
parent | 1fe9150f5c9187d5f53db076ab2224bc9dcf7d45 (diff) |
hso: disconnect the PDP context that was active (if any)
Instead of always disconnecting context #1.
-rw-r--r-- | plugins/mm-modem-hso.c | 15 |
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 |