1 | /* |
2 | SPDX-FileCopyrightText: 2011 Ilia Kats <ilia-kats@gmx.net> |
3 | SPDX-FileCopyrightText: 2011-2013 Lamarque V. Souza <lamarque@kde.org> |
4 | SPDX-FileCopyrightText: 2013 Jan Grulich <jgrulich@redhat.com> |
5 | |
6 | SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL |
7 | */ |
8 | |
9 | #ifndef NETWORKMANAGERQT_ACTIVECONNECTION_H |
10 | #define NETWORKMANAGERQT_ACTIVECONNECTION_H |
11 | |
12 | #include <QObject> |
13 | #include <QSharedPointer> |
14 | |
15 | #include "connection.h" |
16 | #include "dhcp4config.h" |
17 | #include "dhcp6config.h" |
18 | #include "ipconfig.h" |
19 | #include <networkmanagerqt/networkmanagerqt_export.h> |
20 | |
21 | namespace NetworkManager |
22 | { |
23 | class ActiveConnectionPrivate; |
24 | |
25 | /** |
26 | * An active connection |
27 | */ |
28 | class NETWORKMANAGERQT_EXPORT ActiveConnection : public QObject |
29 | { |
30 | Q_OBJECT |
31 | |
32 | public: |
33 | typedef QSharedPointer<ActiveConnection> Ptr; |
34 | typedef QList<Ptr> List; |
35 | /** |
36 | * Enum describing possible active connection states |
37 | */ |
38 | enum State { |
39 | Unknown = 0, /**< The active connection is in an unknown state */ |
40 | Activating, /**< The connection is activating */ |
41 | Activated, /**< The connection is activated */ |
42 | Deactivating, /**< The connection is being torn down and cleaned up */ |
43 | Deactivated, /**< The connection is no longer active */ |
44 | }; |
45 | |
46 | enum Reason { |
47 | UknownReason = 0, /**< The reason for the active connection state change is unknown */ |
48 | None, /**< No reason was given for the active connection state change */ |
49 | UserDisconnected, /**< The active connection changed state because the user disconnected it */ |
50 | DeviceDisconnected, /**< The active connection changed state because the device it was using was disconnected */ |
51 | ServiceStopped, /**< The service providing the VPN connection was stopped */ |
52 | IpConfigInvalid, /**< The IP config of the active connection was invalid */ |
53 | ConnectTimeout, /**< The connection attempt to the VPN service timed out */ |
54 | ServiceStartTimeout, /**< A timeout occurred while starting the service providing the VPN connection */ |
55 | ServiceStartFailed, /**< Starting the service providing the VPN connection failed */ |
56 | NoSecrets, /**< Necessary secrets for the connection were not provided */ |
57 | LoginFailed, /**< Authentication to the server failed */ |
58 | ConnectionRemoved, /**< The connection was deleted from settings */ |
59 | DependencyFailed, /**< Master connection of this connection failed to activate */ |
60 | DeviceRealizeFailed, /**< Could not create the software device link */ |
61 | DeviceRemoved, /**< The device this connection depended on disappeared */ |
62 | }; |
63 | |
64 | /** |
65 | * Creates a new ActiveConnection object. |
66 | * |
67 | * @param path the DBus path of the device |
68 | */ |
69 | explicit ActiveConnection(const QString &path, QObject *parent = nullptr); |
70 | |
71 | /** |
72 | * Destroys an ActiveConnection object. |
73 | */ |
74 | ~ActiveConnection() override; |
75 | |
76 | /** |
77 | * Returns true is this object holds a valid connection |
78 | */ |
79 | bool isValid() const; |
80 | /** |
81 | * Return path of the connection object |
82 | */ |
83 | QString path() const; |
84 | /** |
85 | * Returns a valid NetworkManager::Connection object |
86 | */ |
87 | Connection::Ptr connection() const; |
88 | /** |
89 | * Whether this connection has the default IPv4 route |
90 | */ |
91 | bool default4() const; |
92 | /** |
93 | * Whether this connection has the default IPv6 route |
94 | */ |
95 | bool default6() const; |
96 | /** |
97 | * The Ip4Config object describing the configuration of the |
98 | * connection. Only valid when the connection is in the |
99 | * NM_ACTIVE_CONNECTION_STATE_ACTIVATED state |
100 | */ |
101 | IpConfig ipV4Config() const; |
102 | /** |
103 | * The Ip6Config object describing the configuration of the |
104 | * connection. Only valid when the connection is in the |
105 | * NM_ACTIVE_CONNECTION_STATE_ACTIVATED state |
106 | */ |
107 | IpConfig ipV6Config() const; |
108 | /** |
109 | * The Dhcp4Config object describing the DHCP options |
110 | * returned by the DHCP server (assuming the connection used DHCP). Only |
111 | * valid when the connection is in the NM_ACTIVE_CONNECTION_STATE_ACTIVATED |
112 | * state |
113 | */ |
114 | Dhcp4Config::Ptr dhcp4Config() const; |
115 | /** |
116 | * The Dhcp6Config object describing the DHCP options |
117 | * returned by the DHCP server (assuming the connection used DHCP). Only |
118 | * valid when the connection is in the NM_ACTIVE_CONNECTION_STATE_ACTIVATED |
119 | * state |
120 | */ |
121 | Dhcp6Config::Ptr dhcp6Config() const; |
122 | /** |
123 | * The Id of the connection |
124 | */ |
125 | QString id() const; |
126 | /** |
127 | * The type of the connection |
128 | */ |
129 | NetworkManager::ConnectionSettings::ConnectionType type() const; |
130 | /** |
131 | * Returns the uni of master device if the connection is a slave. |
132 | */ |
133 | QString master() const; |
134 | /** |
135 | * The path of the specific object associated with the connection. |
136 | */ |
137 | QString specificObject() const; |
138 | /** |
139 | * The current state of the connection |
140 | */ |
141 | NetworkManager::ActiveConnection::State state() const; |
142 | /** |
143 | * Whether this is a VPN connection |
144 | */ |
145 | bool vpn() const; |
146 | /** |
147 | * The UUID of the connection. |
148 | */ |
149 | QString uuid() const; |
150 | /** |
151 | * List of devices UNIs which are part of this connection. |
152 | */ |
153 | QStringList devices() const; |
154 | |
155 | Q_SIGNALS: |
156 | /** |
157 | * This signal is emitted when the connection path has changed |
158 | */ |
159 | void connectionChanged(const NetworkManager::Connection::Ptr &connection); |
160 | /** |
161 | * The state of the default IPv4 route changed |
162 | */ |
163 | void default4Changed(bool isDefault); |
164 | /** |
165 | * The state of the default IPv6 route changed |
166 | */ |
167 | void default6Changed(bool isDefault); |
168 | /** |
169 | * Emitted when the DHCP configuration for IPv4 of this network has changed. |
170 | */ |
171 | void dhcp4ConfigChanged(); |
172 | /** |
173 | * Emitted when the DHCP configuration for IPv6 of this network has changed. |
174 | */ |
175 | void dhcp6ConfigChanged(); |
176 | /** |
177 | * Emitted when the IPv4 configuration of this network has changed. |
178 | */ |
179 | void ipV4ConfigChanged(); |
180 | /** |
181 | * Emitted when the IPv6 configuration of this network has changed. |
182 | */ |
183 | void ipV6ConfigChanged(); |
184 | /** |
185 | * The @p id changed |
186 | */ |
187 | void idChanged(const QString &id); |
188 | /** |
189 | * The @p type changed |
190 | */ |
191 | void typeChanged(NetworkManager::ConnectionSettings::ConnectionType type); |
192 | /** |
193 | * The master device changed. |
194 | */ |
195 | void masterChanged(const QString &uni); |
196 | /** |
197 | * The @p path to the specific object changed |
198 | */ |
199 | void specificObjectChanged(const QString &path); |
200 | /** |
201 | * The @p state changed |
202 | */ |
203 | void stateChanged(NetworkManager::ActiveConnection::State state); |
204 | /** |
205 | * The @p state changed because of reason @p reason |
206 | * (never emitted in runtime NM < 1.8.0) |
207 | */ |
208 | void stateChangedReason(NetworkManager::ActiveConnection::State state, NetworkManager::ActiveConnection::Reason reason); |
209 | /** |
210 | * The VPN property changed. |
211 | */ |
212 | void vpnChanged(bool isVpn); |
213 | /** |
214 | * The @p uuid changed. |
215 | */ |
216 | void uuidChanged(const QString &uuid); |
217 | /** |
218 | * The list of devices changed. |
219 | */ |
220 | void devicesChanged(); |
221 | |
222 | protected: |
223 | NETWORKMANAGERQT_NO_EXPORT explicit ActiveConnection(ActiveConnectionPrivate &dd, QObject *parent = nullptr); |
224 | |
225 | ActiveConnectionPrivate *const d_ptr; |
226 | |
227 | private: |
228 | Q_DECLARE_PRIVATE(ActiveConnection) |
229 | }; |
230 | |
231 | } // namespace NetworkManager |
232 | #endif // NETWORKMANAGERQT_ACTIVECONNECTION_H |
233 | |