diff options
author | Dan Williams <dan@ioncontrol.co> | 2025-05-16 09:52:04 -0500 |
---|---|---|
committer | Dan Williams <dan@ioncontrol.co> | 2025-05-16 09:52:04 -0500 |
commit | ec218e7052b7fd85302d1f5c9b01086ef3e562d9 (patch) | |
tree | 5f7a8abb71562c448593c9a593cea015b60849db /src/mm-base-bearer.c | |
parent | a4421095f8464eaf678824a15a8e382a8b653ce5 (diff) | |
parent | 07805265946c154aefe6726f3a049de09ff8dd2f (diff) |
Merge request !1346 from 'disconnect-request'
bearer: add new "disconnect-request" logic
https://gitlab.freedesktop.org/mobile-broadband/ModemManager/-/merge_requests/1346
Diffstat (limited to 'src/mm-base-bearer.c')
-rw-r--r-- | src/mm-base-bearer.c | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/src/mm-base-bearer.c b/src/mm-base-bearer.c index c2ab84cf..f9b86884 100644 --- a/src/mm-base-bearer.c +++ b/src/mm-base-bearer.c @@ -472,7 +472,7 @@ dispatcher_connection_run_ready (MMDispatcherConnection *dispatcher, static void bearer_run_dispatcher_scripts (MMBaseBearer *self, - gboolean connected) + MMDispatcherConnectionEvent event) { MMDispatcherConnection *dispatcher; const gchar *interface; @@ -486,7 +486,7 @@ bearer_run_dispatcher_scripts (MMBaseBearer *self, g_dbus_object_get_object_path (G_DBUS_OBJECT (self->priv->modem)), self->priv->path, interface, - connected, + event, NULL, /* cancellable */ (GAsyncReadyCallback)dispatcher_connection_run_ready, g_object_ref (self)); @@ -500,6 +500,7 @@ bearer_reset_interface_status (MMBaseBearer *self) mm_gdbus_bearer_set_profile_id (MM_GDBUS_BEARER (self), MM_3GPP_PROFILE_ID_UNKNOWN); mm_gdbus_bearer_set_multiplexed (MM_GDBUS_BEARER (self), FALSE); mm_gdbus_bearer_set_connected (MM_GDBUS_BEARER (self), FALSE); + mm_gdbus_bearer_set_disconnect_request (MM_GDBUS_BEARER (self), FALSE); mm_gdbus_bearer_set_suspended (MM_GDBUS_BEARER (self), FALSE); mm_gdbus_bearer_set_interface (MM_GDBUS_BEARER (self), NULL); mm_gdbus_bearer_set_ip4_config ( @@ -531,7 +532,7 @@ bearer_update_status (MMBaseBearer *self, g_autoptr(GString) report = NULL; /* Report disconnection via dispatcher scripts, before resetting the interface */ - bearer_run_dispatcher_scripts (self, FALSE); + bearer_run_dispatcher_scripts (self, MM_DISPATCHER_CONNECTION_EVENT_DISCONNECTED); bearer_reset_interface_status (self); /* Cleanup flag to ignore disconnection reports */ @@ -599,7 +600,7 @@ bearer_update_status_connected (MMBaseBearer *self, connection_monitor_start (self); /* Run dispatcher scripts */ - bearer_run_dispatcher_scripts (self, TRUE); + bearer_run_dispatcher_scripts (self, MM_DISPATCHER_CONNECTION_EVENT_CONNECTED); } /*****************************************************************************/ @@ -1491,11 +1492,14 @@ mm_base_bearer_disconnect_force (MMBaseBearer *self) return; if (self->priv->ignore_disconnection_reports) { - mm_obj_dbg (self, "disconnection should be forced but it's explicitly ignored"); + mm_obj_msg (self, "disconnection should be forced, but we can't. Request disconnection instead."); + mm_gdbus_bearer_set_disconnect_request (MM_GDBUS_BEARER(self), TRUE); + bearer_run_dispatcher_scripts (self, + MM_DISPATCHER_CONNECTION_EVENT_DISCONNECT_REQUEST); return; } - mm_obj_dbg (self, "forcing disconnection"); + mm_obj_msg (self, "forcing disconnection"); /* If currently connecting, try to cancel that operation. */ if (self->priv->status == MM_BEARER_STATUS_CONNECTING) { |