File indexing completed on 2024-12-01 06:49:19
0001 /* 0002 SPDX-FileCopyrightText: 2011 Ilia Kats <ilia-kats@gmx.net> 0003 SPDX-FileCopyrightText: 2011-2013 Lamarque V. Souza <lamarque@kde.org> 0004 SPDX-FileCopyrightText: 2013 Jan Grulich <jgrulich@redhat.com> 0005 0006 SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL 0007 */ 0008 0009 #ifndef NETWORKMANAGERQT_ACTIVECONNECTION_H 0010 #define NETWORKMANAGERQT_ACTIVECONNECTION_H 0011 0012 #include <QObject> 0013 #include <QSharedPointer> 0014 0015 #include "connection.h" 0016 #include "dhcp4config.h" 0017 #include "dhcp6config.h" 0018 #include "ipconfig.h" 0019 #include <networkmanagerqt/networkmanagerqt_export.h> 0020 0021 namespace NetworkManager 0022 { 0023 class ActiveConnectionPrivate; 0024 0025 /** 0026 * An active connection 0027 */ 0028 class NETWORKMANAGERQT_EXPORT ActiveConnection : public QObject 0029 { 0030 Q_OBJECT 0031 0032 public: 0033 typedef QSharedPointer<ActiveConnection> Ptr; 0034 typedef QList<Ptr> List; 0035 /** 0036 * Enum describing possible active connection states 0037 */ 0038 enum State { 0039 Unknown = 0, /**< The active connection is in an unknown state */ 0040 Activating, /**< The connection is activating */ 0041 Activated, /**< The connection is activated */ 0042 Deactivating, /**< The connection is being torn down and cleaned up */ 0043 Deactivated, /**< The connection is no longer active */ 0044 }; 0045 0046 enum Reason { 0047 UknownReason = 0, /**< The reason for the active connection state change is unknown */ 0048 None, /**< No reason was given for the active connection state change */ 0049 UserDisconnected, /**< The active connection changed state because the user disconnected it */ 0050 DeviceDisconnected, /**< The active connection changed state because the device it was using was disconnected */ 0051 ServiceStopped, /**< The service providing the VPN connection was stopped */ 0052 IpConfigInvalid, /**< The IP config of the active connection was invalid */ 0053 ConnectTimeout, /**< The connection attempt to the VPN service timed out */ 0054 ServiceStartTimeout, /**< A timeout occurred while starting the service providing the VPN connection */ 0055 ServiceStartFailed, /**< Starting the service providing the VPN connection failed */ 0056 NoSecrets, /**< Necessary secrets for the connection were not provided */ 0057 LoginFailed, /**< Authentication to the server failed */ 0058 ConnectionRemoved, /**< The connection was deleted from settings */ 0059 DependencyFailed, /**< Master connection of this connection failed to activate */ 0060 DeviceRealizeFailed, /**< Could not create the software device link */ 0061 DeviceRemoved, /**< The device this connection depended on disappeared */ 0062 }; 0063 0064 /** 0065 * Creates a new ActiveConnection object. 0066 * 0067 * @param path the DBus path of the device 0068 */ 0069 explicit ActiveConnection(const QString &path, QObject *parent = nullptr); 0070 0071 /** 0072 * Destroys an ActiveConnection object. 0073 */ 0074 ~ActiveConnection() override; 0075 0076 /** 0077 * Returns true is this object holds a valid connection 0078 */ 0079 bool isValid() const; 0080 /** 0081 * Return path of the connection object 0082 */ 0083 QString path() const; 0084 /** 0085 * Returns a valid NetworkManager::Connection object 0086 */ 0087 Connection::Ptr connection() const; 0088 /** 0089 * Whether this connection has the default IPv4 route 0090 */ 0091 bool default4() const; 0092 /** 0093 * Whether this connection has the default IPv6 route 0094 */ 0095 bool default6() const; 0096 /** 0097 * The Ip4Config object describing the configuration of the 0098 * connection. Only valid when the connection is in the 0099 * NM_ACTIVE_CONNECTION_STATE_ACTIVATED state 0100 */ 0101 IpConfig ipV4Config() const; 0102 /** 0103 * The Ip6Config object describing the configuration of the 0104 * connection. Only valid when the connection is in the 0105 * NM_ACTIVE_CONNECTION_STATE_ACTIVATED state 0106 */ 0107 IpConfig ipV6Config() const; 0108 /** 0109 * The Dhcp4Config object describing the DHCP options 0110 * returned by the DHCP server (assuming the connection used DHCP). Only 0111 * valid when the connection is in the NM_ACTIVE_CONNECTION_STATE_ACTIVATED 0112 * state 0113 */ 0114 Dhcp4Config::Ptr dhcp4Config() const; 0115 /** 0116 * The Dhcp6Config object describing the DHCP options 0117 * returned by the DHCP server (assuming the connection used DHCP). Only 0118 * valid when the connection is in the NM_ACTIVE_CONNECTION_STATE_ACTIVATED 0119 * state 0120 */ 0121 Dhcp6Config::Ptr dhcp6Config() const; 0122 /** 0123 * The Id of the connection 0124 */ 0125 QString id() const; 0126 /** 0127 * The type of the connection 0128 */ 0129 NetworkManager::ConnectionSettings::ConnectionType type() const; 0130 /** 0131 * Returns the uni of master device if the connection is a slave. 0132 */ 0133 QString master() const; 0134 /** 0135 * The path of the specific object associated with the connection. 0136 */ 0137 QString specificObject() const; 0138 /** 0139 * The current state of the connection 0140 */ 0141 NetworkManager::ActiveConnection::State state() const; 0142 /** 0143 * Whether this is a VPN connection 0144 */ 0145 bool vpn() const; 0146 /** 0147 * The UUID of the connection. 0148 */ 0149 QString uuid() const; 0150 /** 0151 * List of devices UNIs which are part of this connection. 0152 */ 0153 QStringList devices() const; 0154 0155 Q_SIGNALS: 0156 /** 0157 * This signal is emitted when the connection path has changed 0158 */ 0159 void connectionChanged(const NetworkManager::Connection::Ptr &connection); 0160 /** 0161 * The state of the default IPv4 route changed 0162 */ 0163 void default4Changed(bool isDefault); 0164 /** 0165 * The state of the default IPv6 route changed 0166 */ 0167 void default6Changed(bool isDefault); 0168 /** 0169 * Emitted when the DHCP configuration for IPv4 of this network has changed. 0170 */ 0171 void dhcp4ConfigChanged(); 0172 /** 0173 * Emitted when the DHCP configuration for IPv6 of this network has changed. 0174 */ 0175 void dhcp6ConfigChanged(); 0176 /** 0177 * Emitted when the IPv4 configuration of this network has changed. 0178 */ 0179 void ipV4ConfigChanged(); 0180 /** 0181 * Emitted when the IPv6 configuration of this network has changed. 0182 */ 0183 void ipV6ConfigChanged(); 0184 /** 0185 * The @p id changed 0186 */ 0187 void idChanged(const QString &id); 0188 /** 0189 * The @p type changed 0190 */ 0191 void typeChanged(NetworkManager::ConnectionSettings::ConnectionType type); 0192 /** 0193 * The master device changed. 0194 */ 0195 void masterChanged(const QString &uni); 0196 /** 0197 * The @p path to the specific object changed 0198 */ 0199 void specificObjectChanged(const QString &path); 0200 /** 0201 * The @p state changed 0202 */ 0203 void stateChanged(NetworkManager::ActiveConnection::State state); 0204 /** 0205 * The @p state changed because of reason @p reason 0206 * (never emitted in runtime NM < 1.8.0) 0207 */ 0208 void stateChangedReason(NetworkManager::ActiveConnection::State state, NetworkManager::ActiveConnection::Reason reason); 0209 /** 0210 * The VPN property changed. 0211 */ 0212 void vpnChanged(bool isVpn); 0213 /** 0214 * The @p uuid changed. 0215 */ 0216 void uuidChanged(const QString &uuid); 0217 /** 0218 * The list of devices changed. 0219 */ 0220 void devicesChanged(); 0221 0222 protected: 0223 NETWORKMANAGERQT_NO_EXPORT explicit ActiveConnection(ActiveConnectionPrivate &dd, QObject *parent = nullptr); 0224 0225 ActiveConnectionPrivate *const d_ptr; 0226 0227 private: 0228 Q_DECLARE_PRIVATE(ActiveConnection) 0229 }; 0230 0231 } // namespace NetworkManager 0232 #endif // NETWORKMANAGERQT_ACTIVECONNECTION_H