[PATCH v2 1/2] bearer: replace mm_bearer_report_disconnection with mm_bearer_report_status
Aleksander Morgado
aleksander at lanedo.com
Thu Sep 19 01:33:05 PDT 2013
On 09/19/2013 10:12 AM, Ben Chan wrote:
> This patch replaces mm_bearer_report_disconnection() with a more generic
> mm_bearer_report_status(), which allows reporting a change of bearer
> status other than MM_BEARER_STATUS_DISCONNECTED.
> ---
Instead of passing a MMBearerStatus value; it probably is a good idea to
have a new enumeration considering other things. E.g. in the option/hso
bearer we have report_connection_status() which is the method used by
the modem object to notify about unsolicited messages received during
connection/disconnection sequence. This method uses a new enum with the
following values:
typedef enum {
MM_BROADBAND_BEARER_HSO_CONNECTION_STATUS_UNKNOWN,
MM_BROADBAND_BEARER_HSO_CONNECTION_STATUS_CONNECTED,
MM_BROADBAND_BEARER_HSO_CONNECTION_STATUS_CONNECTION_FAILED,
MM_BROADBAND_BEARER_HSO_CONNECTION_STATUS_DISCONNECTED
} MMBroadbandBearerHsoConnectionStatus;
The generic report_status() could handle all these. Something like:
typedef enum {
MM_BEARER_CONNECTION_STATUS_UNKNOWN,
MM_BEARER_CONNECTION_STATUS_CONNECTED,
MM_BEARER_CONNECTION_STATUS_CONNECTION_FAILED,
MM_BEARER_CONNECTION_STATUS_DISCONNECTING,
MM_BEARER_CONNECTION_STATUS_DISCONNECTED,
} MMBearerConnectionStatus.
The 'disconnecting' case could be used by the Huawei plugin to notify
about a disconnection that will need further plugin action to finally
report disconnected (see the other email).
> plugins/altair/mm-broadband-modem-altair-lte.c | 2 +-
> plugins/huawei/mm-broadband-bearer-huawei.c | 2 +-
> plugins/icera/mm-broadband-bearer-icera.c | 4 ++--
> plugins/mbm/mm-broadband-bearer-mbm.c | 2 +-
> plugins/novatel/mm-broadband-bearer-novatel-lte.c | 2 +-
> plugins/option/mm-broadband-bearer-hso.c | 2 +-
> src/mm-bearer-qmi.c | 13 +++++++------
> src/mm-bearer.c | 10 +++++-----
> src/mm-bearer.h | 6 +++---
> src/mm-broadband-bearer.c | 13 +++++++------
> 10 files changed, 29 insertions(+), 27 deletions(-)
>
> diff --git a/plugins/altair/mm-broadband-modem-altair-lte.c b/plugins/altair/mm-broadband-modem-altair-lte.c
> index 4fceff8..4082715 100644
> --- a/plugins/altair/mm-broadband-modem-altair-lte.c
> +++ b/plugins/altair/mm-broadband-modem-altair-lte.c
> @@ -518,7 +518,7 @@ static void
> bearer_list_report_disconnect_status_foreach (MMBearer *bearer,
> gpointer *user_data)
> {
> - mm_bearer_report_disconnection (bearer);
> + mm_bearer_report_status (bearer, MM_BEARER_STATUS_DISCONNECTED);
> }
>
> static void
> diff --git a/plugins/huawei/mm-broadband-bearer-huawei.c b/plugins/huawei/mm-broadband-bearer-huawei.c
> index 233102f..9251622 100644
> --- a/plugins/huawei/mm-broadband-bearer-huawei.c
> +++ b/plugins/huawei/mm-broadband-bearer-huawei.c
> @@ -653,7 +653,7 @@ mm_broadband_bearer_huawei_report_connection_status (MMBroadbandBearerHuawei *se
> * handle network-initiated disconnection here. */
> if (!connected) {
> mm_dbg ("Disconnect bearer '%s'", mm_bearer_get_path (MM_BEARER (self)));
> - mm_bearer_report_disconnection (MM_BEARER (self));
> + mm_bearer_report_status (MM_BEARER (self), MM_BEARER_STATUS_DISCONNECTED);
> }
> }
>
> diff --git a/plugins/icera/mm-broadband-bearer-icera.c b/plugins/icera/mm-broadband-bearer-icera.c
> index b7ea8df..1ad06ad 100644
> --- a/plugins/icera/mm-broadband-bearer-icera.c
> +++ b/plugins/icera/mm-broadband-bearer-icera.c
> @@ -402,7 +402,7 @@ report_disconnect_status (MMBroadbandBearerIcera *self,
> case MM_BROADBAND_BEARER_ICERA_CONNECTION_STATUS_DISCONNECTED:
> if (!ctx) {
> mm_dbg ("Received spontaneous %%IPDPACT disconnect");
> - mm_bearer_report_disconnection (MM_BEARER (self));
> + mm_bearer_report_status (MM_BEARER (self), MM_BEARER_STATUS_DISCONNECTED);
> break;
> }
>
> @@ -798,7 +798,7 @@ report_connect_status (MMBroadbandBearerIcera *self,
> }
>
> /* Just ensure we mark ourselves as being disconnected... */
> - mm_bearer_report_disconnection (MM_BEARER (self));
> + mm_bearer_report_status (MM_BEARER (self), MM_BEARER_STATUS_DISCONNECTED);
> return;
> }
>
> diff --git a/plugins/mbm/mm-broadband-bearer-mbm.c b/plugins/mbm/mm-broadband-bearer-mbm.c
> index e4f9983..060526b 100644
> --- a/plugins/mbm/mm-broadband-bearer-mbm.c
> +++ b/plugins/mbm/mm-broadband-bearer-mbm.c
> @@ -159,7 +159,7 @@ mm_broadband_bearer_mbm_report_connection_status (MMBroadbandBearerMbm *self,
> dial_3gpp_context_complete_and_free (ctx);
> } else {
> /* Just ensure we mark ourselves as being disconnected... */
> - mm_bearer_report_disconnection (MM_BEARER (self));
> + mm_bearer_report_status (MM_BEARER (self), MM_BEARER_STATUS_DISCONNECTED);
> }
> break;
> }
> diff --git a/plugins/novatel/mm-broadband-bearer-novatel-lte.c b/plugins/novatel/mm-broadband-bearer-novatel-lte.c
> index 4681c6e..797daf0 100644
> --- a/plugins/novatel/mm-broadband-bearer-novatel-lte.c
> +++ b/plugins/novatel/mm-broadband-bearer-novatel-lte.c
> @@ -130,7 +130,7 @@ poll_connection_ready (MMBaseModem *modem,
> }
>
> if (is_qmistatus_disconnected (result)) {
> - mm_bearer_report_disconnection (MM_BEARER (bearer));
> + mm_bearer_report_status (MM_BEARER (bearer), MM_BEARER_STATUS_DISCONNECTED);
> g_source_remove (bearer->priv->connection_poller);
> bearer->priv->connection_poller = 0;
> }
> diff --git a/plugins/option/mm-broadband-bearer-hso.c b/plugins/option/mm-broadband-bearer-hso.c
> index 7da13aa..b887dd6 100644
> --- a/plugins/option/mm-broadband-bearer-hso.c
> +++ b/plugins/option/mm-broadband-bearer-hso.c
> @@ -408,7 +408,7 @@ mm_broadband_bearer_hso_report_connection_status (MMBroadbandBearerHso *self,
> }
>
> /* Just ensure we mark ourselves as being disconnected... */
> - mm_bearer_report_disconnection (MM_BEARER (self));
> + mm_bearer_report_status (MM_BEARER (self), MM_BEARER_STATUS_DISCONNECTED);
> return;
> }
>
> diff --git a/src/mm-bearer-qmi.c b/src/mm-bearer-qmi.c
> index 00d17c5..0458c9f 100644
> --- a/src/mm-bearer-qmi.c
> +++ b/src/mm-bearer-qmi.c
> @@ -1186,13 +1186,14 @@ disconnect (MMBearer *_self,
> /*****************************************************************************/
>
> static void
> -report_disconnection (MMBearer *self)
> +report_status (MMBearer *self, MMBearerStatus status)
> {
> - /* Cleanup all connection related data */
> - reset_bearer_connection (MM_BEARER_QMI (self), TRUE, TRUE);
> + if (status == MM_BEARER_STATUS_DISCONNECTED)
> + /* Cleanup all connection related data */
> + reset_bearer_connection (MM_BEARER_QMI (self), TRUE, TRUE);
>
> - /* Chain up parent's report_disconection() */
> - MM_BEARER_CLASS (mm_bearer_qmi_parent_class)->report_disconnection (self);
> + /* Chain up parent's report_status() */
> + MM_BEARER_CLASS (mm_bearer_qmi_parent_class)->report_status (self, status);
> }
>
> /*****************************************************************************/
> @@ -1253,5 +1254,5 @@ mm_bearer_qmi_class_init (MMBearerQmiClass *klass)
> bearer_class->connect_finish = connect_finish;
> bearer_class->disconnect = disconnect;
> bearer_class->disconnect_finish = disconnect_finish;
> - bearer_class->report_disconnection = report_disconnection;
> + bearer_class->report_status = report_status;
> }
> diff --git a/src/mm-bearer.c b/src/mm-bearer.c
> index 8c9a93c..3fdec62 100644
> --- a/src/mm-bearer.c
> +++ b/src/mm-bearer.c
> @@ -974,17 +974,17 @@ mm_bearer_disconnect_force (MMBearer *self)
> /*****************************************************************************/
>
> static void
> -report_disconnection (MMBearer *self)
> +report_status (MMBearer *self, MMBearerStatus status)
> {
> /* In the generic bearer implementation we just need to reset the
> * interface status */
> - bearer_update_status (self, MM_BEARER_STATUS_DISCONNECTED);
> + bearer_update_status (self, status);
> }
>
> void
> -mm_bearer_report_disconnection (MMBearer *self)
> +mm_bearer_report_status (MMBearer *self, MMBearerStatus status)
> {
> - return MM_BEARER_GET_CLASS (self)->report_disconnection (self);
> + return MM_BEARER_GET_CLASS (self)->report_status (self, status);
> }
>
> static void
> @@ -1160,7 +1160,7 @@ mm_bearer_class_init (MMBearerClass *klass)
> object_class->finalize = finalize;
> object_class->dispose = dispose;
>
> - klass->report_disconnection = report_disconnection;
> + klass->report_status = report_status;
>
> properties[PROP_CONNECTION] =
> g_param_spec_object (MM_BEARER_CONNECTION,
> diff --git a/src/mm-bearer.h b/src/mm-bearer.h
> index cc71bfd..993b01e 100644
> --- a/src/mm-bearer.h
> +++ b/src/mm-bearer.h
> @@ -92,8 +92,8 @@ struct _MMBearerClass {
> GAsyncResult *res,
> GError **error);
>
> - /* Report disconnection */
> - void (* report_disconnection) (MMBearer *bearer);
> + /* Report status of this bearer */
> + void (* report_status) (MMBearer *bearer, MMBearerStatus status);
> };
>
> GType mm_bearer_get_type (void);
> @@ -123,6 +123,6 @@ gboolean mm_bearer_disconnect_finish (MMBearer *self,
>
> void mm_bearer_disconnect_force (MMBearer *self);
>
> -void mm_bearer_report_disconnection (MMBearer *self);
> +void mm_bearer_report_status (MMBearer *self, MMBearerStatus status);
>
> #endif /* MM_BEARER_H */
> diff --git a/src/mm-broadband-bearer.c b/src/mm-broadband-bearer.c
> index f8f449d..b7e9389 100644
> --- a/src/mm-broadband-bearer.c
> +++ b/src/mm-broadband-bearer.c
> @@ -1785,13 +1785,14 @@ disconnect (MMBearer *self,
> /*****************************************************************************/
>
> static void
> -report_disconnection (MMBearer *self)
> +report_status (MMBearer *self, MMBearerStatus status)
> {
> - /* Cleanup all connection related data */
> - reset_bearer_connection (MM_BROADBAND_BEARER (self));
> + if (status == MM_BEARER_STATUS_DISCONNECTED)
> + /* Cleanup all connection related data */
> + reset_bearer_connection (MM_BROADBAND_BEARER (self));
>
> - /* Chain up parent's report_disconection() */
> - MM_BEARER_CLASS (mm_broadband_bearer_parent_class)->report_disconnection (self);
> + /* Chain up parent's report_status() */
> + MM_BEARER_CLASS (mm_broadband_bearer_parent_class)->report_status (self, status);
> }
>
> /*****************************************************************************/
> @@ -2052,7 +2053,7 @@ mm_broadband_bearer_class_init (MMBroadbandBearerClass *klass)
> bearer_class->connect_finish = connect_finish;
> bearer_class->disconnect = disconnect;
> bearer_class->disconnect_finish = disconnect_finish;
> - bearer_class->report_disconnection = report_disconnection;
> + bearer_class->report_status = report_status;
>
> klass->connect_3gpp = connect_3gpp;
> klass->connect_3gpp_finish = detailed_connect_finish;
>
--
Aleksander
More information about the ModemManager-devel
mailing list