diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/mm-bearer-qmi.c | 14 | ||||
-rw-r--r-- | src/mm-bearer.c | 16 | ||||
-rw-r--r-- | src/mm-bearer.h | 15 | ||||
-rw-r--r-- | src/mm-broadband-bearer.c | 16 |
4 files changed, 42 insertions, 19 deletions
diff --git a/src/mm-bearer-qmi.c b/src/mm-bearer-qmi.c index 00d17c59..fef58819 100644 --- a/src/mm-bearer-qmi.c +++ b/src/mm-bearer-qmi.c @@ -1186,13 +1186,15 @@ disconnect (MMBearer *_self, /*****************************************************************************/ static void -report_disconnection (MMBearer *self) +report_connection_status (MMBearer *self, + MMBearerConnectionStatus status) { - /* Cleanup all connection related data */ - reset_bearer_connection (MM_BEARER_QMI (self), TRUE, TRUE); + if (status == MM_BEARER_CONNECTION_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_connection_status() */ + MM_BEARER_CLASS (mm_bearer_qmi_parent_class)->report_connection_status (self, status); } /*****************************************************************************/ @@ -1253,5 +1255,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_connection_status = report_connection_status; } diff --git a/src/mm-bearer.c b/src/mm-bearer.c index 8c9a93c8..f57ea8be 100644 --- a/src/mm-bearer.c +++ b/src/mm-bearer.c @@ -974,17 +974,25 @@ mm_bearer_disconnect_force (MMBearer *self) /*****************************************************************************/ static void -report_disconnection (MMBearer *self) +report_connection_status (MMBearer *self, + MMBearerConnectionStatus status) { + /* The only status expected at this point is DISCONNECTED. + * No other status should have been given to the generic implementation + * of report_connection_status (it would be an error). + */ + g_assert (status == MM_BEARER_CONNECTION_STATUS_DISCONNECTED); + /* In the generic bearer implementation we just need to reset the * interface status */ bearer_update_status (self, MM_BEARER_STATUS_DISCONNECTED); } void -mm_bearer_report_disconnection (MMBearer *self) +mm_bearer_report_connection_status (MMBearer *self, + MMBearerConnectionStatus status) { - return MM_BEARER_GET_CLASS (self)->report_disconnection (self); + return MM_BEARER_GET_CLASS (self)->report_connection_status (self, status); } static void @@ -1160,7 +1168,7 @@ mm_bearer_class_init (MMBearerClass *klass) object_class->finalize = finalize; object_class->dispose = dispose; - klass->report_disconnection = report_disconnection; + klass->report_connection_status = report_connection_status; properties[PROP_CONNECTION] = g_param_spec_object (MM_BEARER_CONNECTION, diff --git a/src/mm-bearer.h b/src/mm-bearer.h index cc71bfd1..dc217c50 100644 --- a/src/mm-bearer.h +++ b/src/mm-bearer.h @@ -67,6 +67,13 @@ typedef enum { /*< underscore_name=mm_bearer_status >*/ MM_BEARER_STATUS_CONNECTED, } MMBearerStatus; +typedef enum { /*< underscore_name=mm_bearer_connection_status >*/ + MM_BEARER_CONNECTION_STATUS_UNKNOWN, + MM_BEARER_CONNECTION_STATUS_DISCONNECTED, + MM_BEARER_CONNECTION_STATUS_CONNECTED, + MM_BEARER_CONNECTION_STATUS_CONNECTION_FAILED, +} MMBearerConnectionStatus; + struct _MMBearer { MmGdbusBearerSkeleton parent; MMBearerPrivate *priv; @@ -92,8 +99,9 @@ struct _MMBearerClass { GAsyncResult *res, GError **error); - /* Report disconnection */ - void (* report_disconnection) (MMBearer *bearer); + /* Report connection status of this bearer */ + void (* report_connection_status) (MMBearer *bearer, + MMBearerConnectionStatus status); }; GType mm_bearer_get_type (void); @@ -123,6 +131,7 @@ 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_connection_status (MMBearer *self, + MMBearerConnectionStatus status); #endif /* MM_BEARER_H */ diff --git a/src/mm-broadband-bearer.c b/src/mm-broadband-bearer.c index f8f449d0..33b4ca73 100644 --- a/src/mm-broadband-bearer.c +++ b/src/mm-broadband-bearer.c @@ -1785,13 +1785,17 @@ disconnect (MMBearer *self, /*****************************************************************************/ static void -report_disconnection (MMBearer *self) +report_connection_status (MMBearer *self, + MMBearerConnectionStatus status) { - /* Cleanup all connection related data */ - reset_bearer_connection (MM_BROADBAND_BEARER (self)); + if (status == MM_BEARER_CONNECTION_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_connection_status() */ + MM_BEARER_CLASS (mm_broadband_bearer_parent_class)->report_connection_status ( + self, + status); } /*****************************************************************************/ @@ -2052,7 +2056,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_connection_status = report_connection_status; klass->connect_3gpp = connect_3gpp; klass->connect_3gpp_finish = detailed_connect_finish; |