@@ -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-
207201void 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
25472555void 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
26832691void 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:
0 commit comments