Skip to content

Commit d150750

Browse files
committed
fix: Modifying network configuration displays errors
When connecting to a hidden network, update the configuration according to the network encryption status pms: BUG-313003
1 parent 86a5fd7 commit d150750

File tree

5 files changed

+58
-36
lines changed

5 files changed

+58
-36
lines changed

dcc-network/qml/SectionSecret.qml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,9 +78,9 @@ DccTitleObject {
7878
switch (root.keyMgmt) {
7979
case "wpa-eap":
8080
root.config802_1x = c ? c : {}
81+
root.eapType = "peap"
8182
if (root.config802_1x && root.config802_1x.hasOwnProperty("eap") && root.config802_1x.eap.length > 0) {
8283
root.eapType = root.config802_1x["eap"][0]
83-
console.log("sss===root.eapType=", root.eapType)
8484
}
8585
switch (root.eapType) {
8686
case "tls":

net-view/operation/nettype.h

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -76,19 +76,20 @@ class NetType
7676
Q_ENUM(NetDeviceStatus)
7777

7878
enum NetManagerFlag {
79-
Net_ServiceNM = 0x00000001, // 使用NM
80-
Net_MonitorNotify = 0x00000002, // 发网络通知
81-
Net_AutoAddConnection = 0x00000004, // 自动添加连接
82-
Net_UseSecretAgent = 0x00000008, // 实现密码代理
83-
Net_CheckPortal = 0x00000010, // 设置检查认证网页
84-
Net_tipsLinkEnabled = 0x00000020, // 可跳转连接
85-
86-
Net_8021xToConnect = 0x00000100, // 连接
87-
Net_8021xToControlCenter = 0x00000200, // 跳转控制中心
88-
Net_8021xSendNotify = 0x00000400, // 发通知
89-
Net_8021xUnderConnect = 0x00000800, // 优先读配置
90-
Net_8021xToControlCenterUnderConnect = Net_8021xUnderConnect | Net_8021xToControlCenter, // 如果设置了此项,则先于配置读取是否直接连接,如果配置中没有,就设置为跳转到控制中心
91-
Net_8021xSendNotifyUnderConnect = Net_8021xUnderConnect | Net_8021xSendNotify, // 如果设置了此项,则先于配置中读取是否直接连接,如果配置中没有,就设置为直接发送消息
79+
Net_ServiceNM = 0x00000001, // 使用NM
80+
Net_MonitorNotify = 0x00000002, // 发网络通知
81+
Net_AutoAddConnection = 0x00000004, // 自动添加连接
82+
Net_UseSecretAgent = 0x00000008, // 实现密码代理
83+
Net_CheckPortal = 0x00000010, // 设置检查认证网页
84+
Net_tipsLinkEnabled = 0x00000020, // 可跳转连接
85+
Net_autoUpdateHiddenConfig = 0x00000040, // 自动更新隐藏网络配置
86+
87+
Net_8021xToConnect = 0x00000100, // 连接
88+
Net_8021xToControlCenter = 0x00000200, // 跳转控制中心
89+
Net_8021xSendNotify = 0x00000400, // 发通知
90+
Net_8021xUnderConnect = 0x00000800, // 优先读配置
91+
Net_8021xToControlCenterUnderConnect = Net_8021xUnderConnect | Net_8021xToControlCenter, // 如果设置了此项,则先于配置读取是否直接连接,如果配置中没有,就设置为跳转到控制中心
92+
Net_8021xSendNotifyUnderConnect = Net_8021xUnderConnect | Net_8021xSendNotify, // 如果设置了此项,则先于配置中读取是否直接连接,如果配置中没有,就设置为直接发送消息
9293

9394
Net_Device = 0x00010000,
9495
Net_VPN = 0x00020000,
@@ -104,7 +105,7 @@ class NetType
104105
Net_VPNChildren = 0x04000000,
105106

106107
//
107-
Net_DockFlags = Net_Device | Net_VPN | Net_SysProxy | Net_Airplane | Net_AirplaneTips | Net_VPNTips | Net_tipsLinkEnabled | Net_UseSecretAgent | Net_CheckPortal | Net_8021xToControlCenterUnderConnect,
108+
Net_DockFlags = Net_Device | Net_VPN | Net_SysProxy | Net_Airplane | Net_AirplaneTips | Net_VPNTips | Net_tipsLinkEnabled | Net_UseSecretAgent | Net_CheckPortal | Net_8021xToControlCenterUnderConnect | Net_autoUpdateHiddenConfig,
108109
Net_LockFlags = Net_Device | Net_VPN | Net_SysProxy | Net_Airplane | Net_AirplaneTips | Net_VPNTips | Net_UseSecretAgent | Net_CheckPortal | Net_8021xSendNotify,
109110
Net_GreeterFlags = Net_Device | Net_Airplane | Net_AirplaneTips | Net_ServiceNM | Net_MonitorNotify | Net_AutoAddConnection | Net_UseSecretAgent | Net_CheckPortal | Net_8021xSendNotify,
110111
Net_DccFlags = Net_Device | Net_VPN | Net_VPNChildren | Net_SysProxy | Net_AppProxy | Net_Hotspot | Net_Airplane | Net_DSL | Net_Details,

net-view/operation/private/netmanagerthreadprivate.cpp

Lines changed: 38 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,6 @@ NetManagerThreadPrivate::NetManagerThreadPrivate()
8888
, m_parentThread(QThread::currentThread())
8989
, m_monitorNetworkNotify(false)
9090
, m_useSecretAgent(true)
91-
, m_autoUpdateHiddenConfig(true)
9291
, m_isInitialized(false)
9392
, m_enabled(true)
9493
, m_autoScanInterval(0)
@@ -199,11 +198,6 @@ void NetManagerThreadPrivate::setEnabled(bool enabled)
199198
m_enabled = enabled;
200199
}
201200

202-
void NetManagerThreadPrivate::setAutoUpdateHiddenConfig(bool autoUpdate)
203-
{
204-
m_autoUpdateHiddenConfig = autoUpdate;
205-
}
206-
207201
void NetManagerThreadPrivate::setAutoScanInterval(int ms)
208202
{
209203
m_autoScanInterval = ms;
@@ -743,7 +737,7 @@ void NetManagerThreadPrivate::doConnectWireless(const QString &id, const QVarian
743737
else
744738
sendRequest(NetManager::InputError, id, err);
745739
} else if (wConnect.needInputIdentify()) { // 未配置,需要输入Identify
746-
if (handle8021xAccessPoint(ap))
740+
if (handle8021xAccessPoint(ap, false))
747741
sendRequest(NetManager::CloseInput, id);
748742
} else if (wConnect.needInputPassword()) {
749743
sendRequest(NetManager::RequestPassword, id, { { "secrets", { secret } } });
@@ -1096,7 +1090,7 @@ void NetManagerThreadPrivate::doGetConnectInfo(const QString &id, NetType::NetIt
10961090
qCWarning(DNC) << "not find Device";
10971091
return;
10981092
}
1099-
1093+
bool hidden = param.value("hidden").toBool();
11001094
ConnectionSettings::Ptr settings;
11011095
for (const NetworkManager::Connection::Ptr &con : netDevice->availableConnections()) {
11021096
NetworkManager::WirelessSetting::Ptr wSetting = con->settings()->setting(NetworkManager::Setting::SettingType::Wireless).staticCast<NetworkManager::WirelessSetting>();
@@ -1105,8 +1099,20 @@ void NetManagerThreadPrivate::doGetConnectInfo(const QString &id, NetType::NetIt
11051099
}
11061100
settings = con->settings();
11071101

1108-
WirelessSecuritySetting::Ptr const sSetting = settings->setting(Setting::SettingType::WirelessSecurity).staticCast<WirelessSecuritySetting>();
1109-
switch (sSetting->keyMgmt()) {
1102+
WirelessSecuritySetting::Ptr sSetting = settings->setting(Setting::SettingType::WirelessSecurity).staticCast<WirelessSecuritySetting>();
1103+
WirelessSecuritySetting::KeyMgmt keyMgmt = sSetting->keyMgmt();
1104+
if (wSetting->hidden()) {
1105+
AccessPoint::Ptr nmAp = netDevice->findAccessPoint(ap->path());
1106+
if (nmAp.isNull()) {
1107+
qCWarning(DNC) << "not find NetworkManager AccessPoint";
1108+
return;
1109+
}
1110+
keyMgmt = getKeyMgmtByAp(nmAp.get());
1111+
sSetting->setKeyMgmt(keyMgmt);
1112+
sSetting->setAuthAlg(WirelessSecuritySetting::None);
1113+
sSetting->setInitialized(true);
1114+
}
1115+
switch (keyMgmt) {
11101116
case WirelessSecuritySetting::Unknown:
11111117
case WirelessSecuritySetting::WpaNone:
11121118
break;
@@ -1160,6 +1166,7 @@ void NetManagerThreadPrivate::doGetConnectInfo(const QString &id, NetType::NetIt
11601166
settings->setId(ap->ssid());
11611167
NetworkManager::WirelessSetting::Ptr wSetting = settings->setting(Setting::SettingType::Wireless).staticCast<WirelessSetting>();
11621168
wSetting->setSsid(ap->ssid().toUtf8());
1169+
wSetting->setHidden(hidden);
11631170
wSetting->setInitialized(true);
11641171
WirelessSecuritySetting::Ptr wsSetting = settings->setting(Setting::WirelessSecurity).dynamicCast<WirelessSecuritySetting>();
11651172
WirelessSecuritySetting::KeyMgmt keyMgmt = getKeyMgmtByAp(nmAp.get());
@@ -1759,6 +1766,7 @@ bool NetManagerThreadPrivate::toShowPage()
17591766
} else if (paramMap.contains("ssid")) {
17601767
QString devPath = paramMap.value("device");
17611768
QString ssid = paramMap.value("ssid");
1769+
bool hidden = paramMap.value("hidden") == "true";
17621770
if (ssid.isEmpty()) {
17631771
clearShowPageCmd();
17641772
return true;
@@ -1771,7 +1779,7 @@ bool NetManagerThreadPrivate::toShowPage()
17711779
}
17721780
for (auto ap : wDev->accessPointItems()) {
17731781
if (ap->ssid() == ssid) {
1774-
doGetConnectInfo(apID(ap), NetType::WirelessItem, QVariantMap());
1782+
doGetConnectInfo(apID(ap), NetType::WirelessItem, { { "hidden", hidden } });
17751783
QDBusMessage message = QDBusMessage::createMethodCall("org.deepin.dde.ControlCenter1", "/org/deepin/dde/ControlCenter1", "org.deepin.dde.ControlCenter1", "Show");
17761784
QDBusConnection::sessionBus().asyncCall(message);
17771785
clearShowPageCmd();
@@ -2546,7 +2554,7 @@ void NetManagerThreadPrivate::sendNetworkNotify(NetworkNotifyType type, const QS
25462554

25472555
void NetManagerThreadPrivate::updateHiddenNetworkConfig(WirelessDevice *wireless)
25482556
{
2549-
if (!m_autoUpdateHiddenConfig || !m_enabled)
2557+
if (!m_flags.testFlag(NetType::Net_autoUpdateHiddenConfig))
25502558
return;
25512559

25522560
DeviceStatus const status = wireless->deviceStatus();
@@ -2682,11 +2690,21 @@ bool NetManagerThreadPrivate::needSetPassword(AccessPoints *accessPoint) const
26822690

26832691
void NetManagerThreadPrivate::handleAccessPointSecure(AccessPoints *accessPoint)
26842692
{
2685-
if (!m_autoUpdateHiddenConfig || !m_enabled)
2693+
if (!m_flags.testFlag(NetType::Net_autoUpdateHiddenConfig))
26862694
return;
26872695

26882696
if (needSetPassword(accessPoint)) {
26892697
if (accessPoint->hidden()) {
2698+
NetworkManager::Device::Ptr device = NetworkManager::findNetworkInterface(accessPoint->devicePath());
2699+
if (device.isNull()) {
2700+
device.reset(new NetworkManager::WirelessDevice(accessPoint->devicePath()));
2701+
}
2702+
NetworkManager::ActiveConnection::Ptr aConn = device->activeConnection();
2703+
NetworkManager::Connection::Ptr conn = aConn->connection();
2704+
if (conn && conn->isUnsaved()) {
2705+
conn->remove();
2706+
}
2707+
// device->disconnectInterface();
26902708
// 隐藏网络逻辑是要输入密码重连,所以后端无等待,前端重连
26912709
// wpa2企业版ap,第一次连接时,需要先删除之前默认创建的conn,然后跳转控制中心完善设置.
26922710
qCInfo(DNC) << "Reconnect hidden wireless, access point path: " << accessPoint->path();
@@ -2695,7 +2713,7 @@ void NetManagerThreadPrivate::handleAccessPointSecure(AccessPoints *accessPoint)
26952713
NetworkManager::AccessPoint::WpaFlags const rsnFlags = nmAp.rsnFlags();
26962714
bool const needIdentify = (wpaFlags.testFlag(NetworkManager::AccessPoint::WpaFlag::KeyMgmt8021x) || rsnFlags.testFlag(NetworkManager::AccessPoint::WpaFlag::KeyMgmt8021x));
26972715
if (needIdentify) {
2698-
handle8021xAccessPoint(accessPoint);
2716+
handle8021xAccessPoint(accessPoint, true);
26992717
return;
27002718
}
27012719
}
@@ -2710,11 +2728,14 @@ void NetManagerThreadPrivate::handleAccessPointSecure(AccessPoints *accessPoint)
27102728
NetWirelessConnect wConnect(dynamic_cast<WirelessDevice *>(*it), accessPoint, this);
27112729
wConnect.setSsid(accessPoint->ssid());
27122730
wConnect.initConnection();
2713-
requestPassword(accessPoint->devicePath(), accessPoint->ssid(), { { "secrets", { wConnect.needSecrets() } } });
2731+
QVariantMap param;
2732+
param.insert("secrets", { wConnect.needSecrets() });
2733+
param.insert("hidden", true);
2734+
requestPassword(accessPoint->devicePath(), accessPoint->ssid(), param);
27142735
}
27152736
}
27162737

2717-
bool NetManagerThreadPrivate::handle8021xAccessPoint(AccessPoints *ap)
2738+
bool NetManagerThreadPrivate::handle8021xAccessPoint(AccessPoints *ap, bool hidden)
27182739
{
27192740
// 每次ap状态变化时都会做一次处理,频繁地向控制中心发送showPage指令,导致控制中心卡顿甚至卡死
27202741
// 故增加防抖措施
@@ -2736,7 +2757,7 @@ bool NetManagerThreadPrivate::handle8021xAccessPoint(AccessPoints *ap)
27362757
}
27372758
switch (flag) {
27382759
case NetType::Net_8021xToControlCenter:
2739-
gotoControlCenter("?device=" + ap->devicePath() + "&ssid=" + ap->ssid());
2760+
gotoControlCenter("?device=" + ap->devicePath() + "&ssid=" + ap->ssid() + (hidden ? "&hidden=true" : ""));
27402761
return true;
27412762
break;
27422763
case NetType::Net_8021xSendNotify:

net-view/operation/private/netmanagerthreadprivate.h

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,6 @@ class NetManagerThreadPrivate : public QObject
5757
void setUseSecretAgent(bool enabled);
5858

5959
void setEnabled(bool enabled);
60-
void setAutoUpdateHiddenConfig(bool autoUpdate);
6160
void setAutoScanInterval(int ms);
6261
void setAutoScanEnabled(bool enabled);
6362
void setServerKey(const QString &serverKey);
@@ -244,7 +243,7 @@ protected Q_SLOTS:
244243
void updateHiddenNetworkConfig(WirelessDevice *wireless);
245244
bool needSetPassword(AccessPoints *accessPoint) const;
246245
void handleAccessPointSecure(AccessPoints *accessPoint);
247-
bool handle8021xAccessPoint(AccessPoints *ap);
246+
bool handle8021xAccessPoint(AccessPoints *ap, bool hidden);
248247
void onPrepareForSleep(bool state);
249248

250249
protected:
@@ -272,7 +271,6 @@ protected Q_SLOTS:
272271
// bool m_loadForNM;
273272
bool m_monitorNetworkNotify;
274273
bool m_useSecretAgent;
275-
bool m_autoUpdateHiddenConfig; // 自动更新隐藏网络配置
276274
bool m_isInitialized;
277275
bool m_enabled;
278276
int m_autoScanInterval;

net-view/operation/private/netwirelessconnect.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
#include "netwirelessconnect.h"
66

77
#include "configsetting.h"
8+
#include "nmnetworkmanager.h"
89

910
#include <NetworkManagerQt/AccessPoint>
1011
#include <NetworkManagerQt/ActiveConnection>
@@ -440,8 +441,9 @@ void NetWirelessConnect::activateConnection()
440441
m_device->connectNetwork(id);
441442
} else {
442443
QVariantMap options;
444+
options.insert("persist", "memory");
443445
options.insert("flags", MANUAL);
444-
// NetworkManager::activateConnection2(conn->path(), m_device->path(), accessPointPath, options);
446+
NetworkManager::activateConnection2(conn->path(), m_device->path(), accessPointPath, options);
445447
}
446448
}
447449

0 commit comments

Comments
 (0)