diff options
author | Aleksander Morgado <aleksander@aleksander.es> | 2017-03-24 14:55:36 +0100 |
---|---|---|
committer | Aleksander Morgado <aleksander@aleksander.es> | 2017-03-24 21:49:23 +0100 |
commit | 15d135b9c47a0878e3c62906d33c2a5f08546ac1 (patch) | |
tree | fe25e9459117602729446f26df22d06f58f8169d /src/mm-base-bearer.c | |
parent | dd1e281e82726bcf3349a776da53c4158b088724 (diff) |
base-bearer: stop connection status monitoring if no TTY available
On modems with a single TTY for both control and data, we cannot use
the TTY to load connection status once we're in connected mode:
Connection through a plain serial AT port (ttyUSB2)
(ttyUSB2): --> 'ATD*99***2#<CR>'
(ttyUSB2): <-- '<CR><LF>CONNECT 100000000<CR><LF>'
(ttyUSB2): port now connected
Connected bearer '/org/freedesktop/ModemManager1/Bearer/0'
Modem /org/freedesktop/ModemManager1/Modem/0: state changed (connecting -> connected)
Simple connect state (8/8): All done
checking if connected failed: Couldn't check current list of active PDP contexts: No AT port available to run command
checking if connected failed: Couldn't check current list of active PDP contexts: No AT port available to run command
checking if connected failed: Couldn't check current list of active PDP contexts: No AT port available to run command
...
So, disable connection monitoring right away if that situation is
detected:
Connection through a plain serial AT port (ttyUSB2)
(ttyUSB2): --> 'ATD*99***2#<CR>'
(ttyUSB2): <-- '<CR><LF>CONNECT 100000000<CR><LF>'
(ttyUSB2): port now connected
Connected bearer '/org/freedesktop/ModemManager1/Bearer/0'
Modem /org/freedesktop/ModemManager1/Modem/0: state changed (connecting -> connected)
Simple connect state (8/8): All done
Connection monitoring is unsupported by the device
...
https://bugs.freedesktop.org/show_bug.cgi?id=100376
Diffstat (limited to 'src/mm-base-bearer.c')
-rw-r--r-- | src/mm-base-bearer.c | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/src/mm-base-bearer.c b/src/mm-base-bearer.c index 0cca8534..02084dff 100644 --- a/src/mm-base-bearer.c +++ b/src/mm-base-bearer.c @@ -92,6 +92,8 @@ struct _MMBaseBearerPrivate { /* Connection status monitoring */ guint connection_monitor_id; + /* Flag to specify whether connection monitoring is supported or not */ + gboolean load_connection_status_unsupported; /*-- 3GPP specific --*/ guint deferred_3gpp_unregistration_id; @@ -162,7 +164,18 @@ load_connection_status_ready (MMBaseBearer *self, status = MM_BASE_BEARER_GET_CLASS (self)->load_connection_status_finish (self, res, &error); if (status == MM_BEARER_CONNECTION_STATUS_UNKNOWN) { - mm_warn ("checking if connected failed: %s", error->message); + /* Only warn if not reporting an "unsupported" error */ + if (!g_error_matches (error, MM_CORE_ERROR, MM_CORE_ERROR_UNSUPPORTED)) { + mm_warn ("checking if connected failed: %s", error->message); + g_error_free (error); + return; + } + + /* If we're being told that connection monitoring is unsupported, just + * ignore the error and remove the timeout. */ + mm_dbg ("Connection monitoring is unsupported by the device"); + self->priv->load_connection_status_unsupported = TRUE; + connection_monitor_stop (self); g_error_free (error); return; } @@ -176,7 +189,7 @@ load_connection_status_ready (MMBaseBearer *self, static gboolean connection_monitor_cb (MMBaseBearer *self) { - /* If the implementation knows how to update stat values, run it */ + /* If the implementation knows how to load connection status, run it */ MM_BASE_BEARER_GET_CLASS (self)->load_connection_status ( self, (GAsyncReadyCallback)load_connection_status_ready, @@ -192,6 +205,9 @@ connection_monitor_start (MMBaseBearer *self) !MM_BASE_BEARER_GET_CLASS (self)->load_connection_status_finish) return; + if (self->priv->load_connection_status_unsupported) + return; + /* Schedule */ g_assert (!self->priv->connection_monitor_id); self->priv->connection_monitor_id = g_timeout_add_seconds (BEARER_CONNECTION_MONITOR_TIMEOUT, |