gboolean nm_active_connection_get_default6 (NMActiveConnection *self) { g_return_val_if_fail (NM_IS_ACTIVE_CONNECTION (self), FALSE); return NM_ACTIVE_CONNECTION_GET_PRIVATE (self)->is_default6; }
guint64 nm_active_connection_version_id_get (NMActiveConnection *self) { g_return_val_if_fail (NM_IS_ACTIVE_CONNECTION (self), 0); return NM_ACTIVE_CONNECTION_GET_PRIVATE (self)->version_id; }
NMAuthSubject * nm_active_connection_get_subject (NMActiveConnection *self) { g_return_val_if_fail (NM_IS_ACTIVE_CONNECTION (self), NULL); return NM_ACTIVE_CONNECTION_GET_PRIVATE (self)->subject; }
gboolean nm_active_connection_get_user_requested (NMActiveConnection *self) { g_return_val_if_fail (NM_IS_ACTIVE_CONNECTION (self), FALSE); return nm_auth_subject_is_unix_process (NM_ACTIVE_CONNECTION_GET_PRIVATE (self)->subject); }
/** * nm_active_connection_get_master_ready: * @self: the #NMActiveConnection * * Returns: %TRUE if the connection has a master connection, and that * master connection is ready to accept slaves. Otherwise %FALSE. */ gboolean nm_active_connection_get_master_ready (NMActiveConnection *self) { g_return_val_if_fail (NM_IS_ACTIVE_CONNECTION (self), FALSE); return NM_ACTIVE_CONNECTION_GET_PRIVATE (self)->master_ready; }
NMDevice * nm_active_connection_get_device (NMActiveConnection *self) { g_return_val_if_fail (NM_IS_ACTIVE_CONNECTION (self), NULL); return NM_ACTIVE_CONNECTION_GET_PRIVATE (self)->device; }
void nm_active_connection_set_settings_connection (NMActiveConnection *self, NMSettingsConnection *connection) { NMActiveConnectionPrivate *priv; g_return_if_fail (NM_IS_ACTIVE_CONNECTION (self)); priv = NM_ACTIVE_CONNECTION_GET_PRIVATE (self); g_return_if_fail (NM_IS_SETTINGS_CONNECTION (connection)); g_return_if_fail (!priv->settings_connection); g_return_if_fail (!priv->applied_connection); /* Can't change connection after the ActiveConnection is exported over D-Bus. * * Later, we want to change the settings-connection of an activated connection. * When doing that, this changes the assumption that the settings-connection * never changes (once it's set). That has effects for NMVpnConnection and * NMActivationRequest. * For example, we'd have to cancel all pending seret requests. */ g_return_if_fail (!nm_exported_object_is_exported (NM_EXPORTED_OBJECT (self))); _set_settings_connection (self, connection); priv->applied_connection = nm_simple_connection_new_clone (NM_CONNECTION (priv->settings_connection)); nm_connection_clear_secrets (priv->applied_connection); }
/** * nm_active_connection_set_master: * @self: the #NMActiveConnection * @master: if the activation depends on another device (ie, bond or bridge * master to which this device will be enslaved) pass the #NMActiveConnection * that this activation request is a child of * * Sets the master active connection of @self. */ void nm_active_connection_set_master (NMActiveConnection *self, NMActiveConnection *master) { NMActiveConnectionPrivate *priv; g_return_if_fail (NM_IS_ACTIVE_CONNECTION (self)); g_return_if_fail (NM_IS_ACTIVE_CONNECTION (master)); priv = NM_ACTIVE_CONNECTION_GET_PRIVATE (self); /* Master is write-once, and must be set before exporting the object */ g_return_if_fail (priv->master == NULL); g_return_if_fail (!nm_exported_object_is_exported (NM_EXPORTED_OBJECT (self))); if (priv->device) { /* Note, the master ActiveConnection may not yet have a device */ g_return_if_fail (priv->device != nm_active_connection_get_device (master)); } _LOGD ("set master %p, %s, state %s", master, nm_active_connection_get_settings_connection_id (master), state_to_string (nm_active_connection_get_state (master))); priv->master = g_object_ref (master); g_signal_connect (priv->master, "notify::" NM_ACTIVE_CONNECTION_STATE, (GCallback) master_state_cb, self); check_master_ready (self); }
static void dispose (GObject *object) { NMActiveConnection *self = NM_ACTIVE_CONNECTION (object); NMActiveConnectionPrivate *priv = NM_ACTIVE_CONNECTION_GET_PRIVATE (self); _LOGD ("disposing"); if (priv->chain) { nm_auth_chain_unref (priv->chain); priv->chain = NULL; } g_free (priv->specific_object); priv->specific_object = NULL; _set_settings_connection (self, NULL); g_clear_object (&priv->applied_connection); _device_cleanup (self); if (priv->master) { g_signal_handlers_disconnect_by_func (priv->master, (GCallback) master_state_cb, self); } g_clear_object (&priv->master); if (priv->parent) unwatch_parent (self); g_clear_object (&priv->subject); G_OBJECT_CLASS (nm_active_connection_parent_class)->dispose (object); }
NMSettingsConnection * _nm_active_connection_get_settings_connection (NMActiveConnection *self) { g_return_val_if_fail (NM_IS_ACTIVE_CONNECTION (self), NULL); return NM_ACTIVE_CONNECTION_GET_PRIVATE (self)->settings_connection; }
static GObject* constructor (GType type, guint n_construct_params, GObjectConstructParam *construct_params) { NMObject *object; NMActiveConnectionPrivate *priv; object = (NMObject *) G_OBJECT_CLASS (nm_active_connection_parent_class)->constructor (type, n_construct_params, construct_params); if (!object) return NULL; priv = NM_ACTIVE_CONNECTION_GET_PRIVATE (object); priv->proxy = dbus_g_proxy_new_for_name (nm_object_get_connection (object), NM_DBUS_SERVICE, nm_object_get_path (object), NM_DBUS_INTERFACE_ACTIVE_CONNECTION); register_for_property_changed (NM_ACTIVE_CONNECTION (object)); return G_OBJECT (object); }
NMActiveConnection * nm_active_connection_get_master (NMActiveConnection *self) { g_return_val_if_fail (NM_IS_ACTIVE_CONNECTION (self), NULL); return NM_ACTIVE_CONNECTION_GET_PRIVATE (self)->master; }
static void auth_done (NMAuthChain *chain, GError *error, GDBusMethodInvocation *unused, gpointer user_data) { NMActiveConnection *self = NM_ACTIVE_CONNECTION (user_data); NMActiveConnectionPrivate *priv = NM_ACTIVE_CONNECTION_GET_PRIVATE (self); NMAuthCallResult result; g_assert (priv->chain == chain); g_assert (priv->result_func != NULL); /* Must stay alive over the callback */ g_object_ref (self); if (error) { priv->result_func (self, FALSE, error->message, priv->user_data1, priv->user_data2); goto done; } /* Caller has had a chance to obtain authorization, so we only need to * check for 'yes' here. */ result = nm_auth_chain_get_result (chain, NM_AUTH_PERMISSION_NETWORK_CONTROL); if (result != NM_AUTH_CALL_RESULT_YES) { priv->result_func (self, FALSE, "Not authorized to control networking.", priv->user_data1, priv->user_data2); goto done; } if (priv->wifi_shared_permission) { result = nm_auth_chain_get_result (chain, priv->wifi_shared_permission); if (result != NM_AUTH_CALL_RESULT_YES) { priv->result_func (self, FALSE, "Not authorized to share connections via wifi.", priv->user_data1, priv->user_data2); goto done; } } /* Otherwise authorized and available to activate */ priv->result_func (self, TRUE, NULL, priv->user_data1, priv->user_data2); done: nm_auth_chain_unref (chain); priv->chain = NULL; priv->result_func = NULL; priv->user_data1 = NULL; priv->user_data2 = NULL; g_object_unref (self); }
void nm_active_connection_set_state (NMActiveConnection *self, NMActiveConnectionState new_state) { NMActiveConnectionPrivate *priv = NM_ACTIVE_CONNECTION_GET_PRIVATE (self); NMActiveConnectionState old_state; if (priv->state == new_state) return; /* DEACTIVATED is a terminal state */ if (priv->state == NM_ACTIVE_CONNECTION_STATE_DEACTIVATED) g_return_if_fail (new_state != NM_ACTIVE_CONNECTION_STATE_DEACTIVATED); _LOGD ("set state %s (was %s)", state_to_string (new_state), state_to_string (priv->state)); old_state = priv->state; priv->state = new_state; priv->state_set = TRUE; _notify (self, PROP_STATE); check_master_ready (self); if ( new_state == NM_ACTIVE_CONNECTION_STATE_ACTIVATED || old_state == NM_ACTIVE_CONNECTION_STATE_ACTIVATED) { nm_settings_connection_update_timestamp (priv->settings_connection, (guint64) time (NULL), TRUE); } if (priv->device) { if ( old_state < NM_ACTIVE_CONNECTION_STATE_ACTIVATED && new_state >= NM_ACTIVE_CONNECTION_STATE_ACTIVATED && priv->pending_activation_id) { nm_device_remove_pending_action (priv->device, priv->pending_activation_id, TRUE); g_clear_pointer (&priv->pending_activation_id, g_free); } } if ( new_state == NM_ACTIVE_CONNECTION_STATE_ACTIVATED || old_state == NM_ACTIVE_CONNECTION_STATE_ACTIVATED) { _notify (self, PROP_IP4_CONFIG); _notify (self, PROP_DHCP4_CONFIG); _notify (self, PROP_IP6_CONFIG); _notify (self, PROP_DHCP6_CONFIG); } if (priv->state == NM_ACTIVE_CONNECTION_STATE_DEACTIVATED) { /* Device is no longer relevant when deactivated. So remove it and * emit property change notification so clients re-read the value, * which will be NULL due to conditions in get_property(). */ _device_cleanup (self); _notify (self, PROP_DEVICES); } }
/** * nm_active_connection_get_scope: * @connection: a #NMActiveConnection * * Gets the scope of the active connection. * * Returns: the connection's scope **/ NMConnectionScope nm_active_connection_get_scope (NMActiveConnection *connection) { g_return_val_if_fail (NM_IS_ACTIVE_CONNECTION (connection), NM_CONNECTION_SCOPE_UNKNOWN); /* Make sure service_name and scope are up-to-date */ nm_active_connection_get_service_name (connection); return NM_ACTIVE_CONNECTION_GET_PRIVATE (connection)->scope; }
static void nm_active_connection_init (NMActiveConnection *self) { NMActiveConnectionPrivate *priv = NM_ACTIVE_CONNECTION_GET_PRIVATE (self); _LOGT ("creating"); priv->version_id = _version_id_new (); }
gboolean nm_active_connection_set_device (NMActiveConnection *self, NMDevice *device) { NMActiveConnectionPrivate *priv; gs_unref_object NMDevice *old_device = NULL; g_return_val_if_fail (NM_IS_ACTIVE_CONNECTION (self), FALSE); g_return_val_if_fail (!device || NM_IS_DEVICE (device), FALSE); priv = NM_ACTIVE_CONNECTION_GET_PRIVATE (self); if (device == priv->device) return TRUE; _LOGD ("set device %s%s%s [%p]", NM_PRINT_FMT_QUOTED (device && nm_device_get_iface (device), "\"", nm_device_get_iface (device), "\"", device ? "(unknown)" : "(null)"), device); old_device = priv->device ? g_object_ref (priv->device) : NULL; _device_cleanup (self); if (device) { /* Device obviously can't be its own master */ g_return_val_if_fail (!priv->master || device != nm_active_connection_get_device (priv->master), FALSE); priv->device = g_object_ref (device); g_signal_connect (device, NM_DEVICE_STATE_CHANGED, G_CALLBACK (device_state_changed), self); g_signal_connect (device, "notify::master", G_CALLBACK (device_master_changed), self); g_signal_connect (device, "notify::" NM_DEVICE_METERED, G_CALLBACK (device_metered_changed), self); if (!priv->assumed) { priv->pending_activation_id = g_strdup_printf ("activation::%p", (void *)self); nm_device_add_pending_action (device, priv->pending_activation_id, TRUE); } } else { /* The ActiveConnection's device can only be cleared after the * connection is activated. */ g_warn_if_fail (priv->state > NM_ACTIVE_CONNECTION_STATE_UNKNOWN); priv->device = NULL; } _notify (self, PROP_INT_DEVICE); g_signal_emit (self, signals[DEVICE_CHANGED], 0, priv->device, old_device); _notify (self, PROP_DEVICES); return TRUE; }
static gboolean demarshal_service (NMObject *object, GParamSpec *pspec, GValue *value, gpointer field) { NMActiveConnectionPrivate *priv = NM_ACTIVE_CONNECTION_GET_PRIVATE (object); if (_nm_object_demarshal_generic (object, pspec, value, field)) { priv->scope = get_scope_for_service_name (priv->service_name); return TRUE; } return FALSE; }
void nm_active_connection_set_state (NMActiveConnection *self, NMActiveConnectionState new_state) { NMActiveConnectionPrivate *priv = NM_ACTIVE_CONNECTION_GET_PRIVATE (self); if (priv->state != new_state) { priv->state = new_state; g_object_notify (G_OBJECT (self), NM_ACTIVE_CONNECTION_STATE); } }
static void unwatch_parent (NMActiveConnection *self) { NMActiveConnectionPrivate *priv = NM_ACTIVE_CONNECTION_GET_PRIVATE (self); g_signal_handlers_disconnect_by_func (priv->parent, (GCallback) parent_state_cb, self); g_object_weak_unref ((GObject *) priv->parent, parent_destroyed, self); priv->parent = NULL; }
static void finalize (GObject *object) { NMActiveConnectionPrivate *priv = NM_ACTIVE_CONNECTION_GET_PRIVATE (object); g_free (priv->service_name); g_free (priv->connection); g_free (priv->specific_object); G_OBJECT_CLASS (nm_active_connection_parent_class)->finalize (object); }
const char * nm_active_connection_get_settings_connection_id (NMActiveConnection *self) { NMSettingsConnection *con; g_return_val_if_fail (NM_IS_ACTIVE_CONNECTION (self), NULL); con = NM_ACTIVE_CONNECTION_GET_PRIVATE (self)->settings_connection; return con ? nm_connection_get_id (NM_CONNECTION (con)) : NULL; }
static void constructed (GObject *object) { NMActiveConnection *self = (NMActiveConnection *) object; NMActiveConnectionPrivate *priv = NM_ACTIVE_CONNECTION_GET_PRIVATE (self); G_OBJECT_CLASS (nm_active_connection_parent_class)->constructed (object); _LOGD ("constructed (%s, version-id %llu)", G_OBJECT_TYPE_NAME (self), (long long unsigned) priv->version_id); g_return_if_fail (priv->subject); }
guint64 nm_active_connection_version_id_bump (NMActiveConnection *self) { NMActiveConnectionPrivate *priv; g_return_val_if_fail (NM_IS_ACTIVE_CONNECTION (self), 0); priv = NM_ACTIVE_CONNECTION_GET_PRIVATE (self); priv->version_id = _version_id_new (); _LOGT ("new version-id %llu", (long long unsigned) priv->version_id); return priv->version_id; }
/** * nm_active_connection_set_parent: * @self: the #NMActiveConnection * @parent: The #NMActiveConnection that must be active before the manager * can proceed progressing the device to disconnected state for us. * * Sets the parent connection of @self. A "parent-active" signal will be * emitted when the parent connection becomes active. */ void nm_active_connection_set_parent (NMActiveConnection *self, NMActiveConnection *parent) { NMActiveConnectionPrivate *priv = NM_ACTIVE_CONNECTION_GET_PRIVATE (self); g_return_if_fail (priv->parent == NULL); priv->parent = parent; g_signal_connect (priv->parent, "notify::" NM_ACTIVE_CONNECTION_STATE, (GCallback) parent_state_cb, self); g_object_weak_ref ((GObject *) priv->parent, parent_destroyed, self); }
void nm_active_connection_set_assumed (NMActiveConnection *self, gboolean assumed) { NMActiveConnectionPrivate *priv = NM_ACTIVE_CONNECTION_GET_PRIVATE (self); g_return_if_fail (priv->assumed == FALSE); priv->assumed = assumed; if (priv->pending_activation_id) { nm_device_remove_pending_action (priv->device, priv->pending_activation_id, TRUE); g_clear_pointer (&priv->pending_activation_id, g_free); } }
void nm_active_connection_set_specific_object (NMActiveConnection *self, const char *specific_object) { NMActiveConnectionPrivate *priv = NM_ACTIVE_CONNECTION_GET_PRIVATE (self); if (g_strcmp0 (priv->specific_object, specific_object) == 0) return; g_free (priv->specific_object); priv->specific_object = g_strdup (specific_object); g_object_notify (G_OBJECT (self), NM_ACTIVE_CONNECTION_SPECIFIC_OBJECT); }
static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { NMActiveConnection *self = (NMActiveConnection *) object; NMActiveConnectionPrivate *priv = NM_ACTIVE_CONNECTION_GET_PRIVATE (self); const char *tmp; NMSettingsConnection *con; switch (prop_id) { case PROP_INT_SETTINGS_CONNECTION: /* construct-only */ con = g_value_get_object (value); if (con) { _set_settings_connection (self, con); priv->applied_connection = nm_simple_connection_new_clone ((NMConnection *) priv->settings_connection); nm_connection_clear_secrets (priv->applied_connection); } break; case PROP_INT_DEVICE: /* construct-only */ nm_active_connection_set_device (self, g_value_get_object (value)); break; case PROP_INT_SUBJECT: priv->subject = g_value_dup_object (value); break; case PROP_INT_MASTER: nm_active_connection_set_master (self, g_value_get_object (value)); break; case PROP_SPECIFIC_OBJECT: tmp = g_value_get_string (value); /* NM uses "/" to mean NULL */ if (g_strcmp0 (tmp, "/") != 0) priv->specific_object = g_strdup (tmp); break; case PROP_DEFAULT: priv->is_default = !!g_value_get_boolean (value); break; case PROP_DEFAULT6: priv->is_default6 = !!g_value_get_boolean (value); break; case PROP_VPN: priv->vpn = g_value_get_boolean (value); break; case PROP_MASTER: break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } }
void nm_active_connection_set_default6 (NMActiveConnection *self, gboolean is_default6) { NMActiveConnectionPrivate *priv; g_return_if_fail (NM_IS_ACTIVE_CONNECTION (self)); priv = NM_ACTIVE_CONNECTION_GET_PRIVATE (self); if (priv->is_default6 == is_default6) return; priv->is_default6 = is_default6; g_object_notify (G_OBJECT (self), NM_ACTIVE_CONNECTION_DEFAULT6); }
void nm_active_connection_clear_secrets (NMActiveConnection *self) { NMActiveConnectionPrivate *priv; g_return_if_fail (NM_IS_ACTIVE_CONNECTION (self)); priv = NM_ACTIVE_CONNECTION_GET_PRIVATE (self); if (nm_settings_connection_has_unmodified_applied_connection (priv->settings_connection, priv->applied_connection, NM_SETTING_COMPARE_FLAG_NONE)) nm_connection_clear_secrets ((NMConnection *) priv->settings_connection); nm_connection_clear_secrets (priv->applied_connection); }