1515namespace network {
1616namespace sessionservice {
1717
18+ const QString ProxyTypeAuto = " auto" ;
1819const QString ProxyTypeHttp = " http" ;
1920const QString ProxyTypeHttps = " https" ;
2021const QString ProxyTypeFtp = " ftp" ;
@@ -60,14 +61,19 @@ NetworkProxy::NetworkProxy(QDBusConnection &dbusConnection, NetworkStateHandler
6061 return ;
6162 }
6263 m_proxySettings = new QGSettings (GSettingsIdProxy, QByteArray (), this );
64+ m_proxySettings->setProperty (" type" , ProxyTypeAuto);
6365 connect (m_proxySettings, &QGSettings::changed, this , &NetworkProxy::onConfigChanged);
6466 m_proxyChildSettingsHttp = new QGSettings (GChildProxyHttp, QByteArray (), this );
67+ m_proxyChildSettingsHttp->setProperty (" type" , ProxyTypeHttp);
6568 connect (m_proxyChildSettingsHttp, &QGSettings::changed, this , &NetworkProxy::onConfigChanged);
6669 m_proxyChildSettingsHttps = new QGSettings (GChildProxyHttps, QByteArray (), this );
70+ m_proxyChildSettingsHttps->setProperty (" type" , ProxyTypeHttps);
6771 connect (m_proxyChildSettingsHttps, &QGSettings::changed, this , &NetworkProxy::onConfigChanged);
6872 m_proxyChildSettingsFtp = new QGSettings (GChildProxyFtp, QByteArray (), this );
73+ m_proxyChildSettingsFtp->setProperty (" type" , ProxyTypeFtp);
6974 connect (m_proxyChildSettingsFtp, &QGSettings::changed, this , &NetworkProxy::onConfigChanged);
7075 m_proxyChildSettingsSocks = new QGSettings (GChildProxySocks, QByteArray (), this );
76+ m_proxyChildSettingsSocks->setProperty (" type" , ProxyTypeSocks);
7177 connect (m_proxyChildSettingsSocks, &QGSettings::changed, this , &NetworkProxy::onConfigChanged);
7278 // 如果ip全为空,则自动设置代理为None
7379 QString proxyAuto = m_proxySettings->get (GKeyProxyAuto).toString ();
@@ -147,16 +153,22 @@ void NetworkProxy::GetProxy(const QString &proxyType)
147153 dbusConnection ().send (message ().createErrorReply (QDBusError::InvalidArgs, err));
148154 return ;
149155 }
150- QString host = childSettings->get (GKeyProxyHost).toString ();
151- int port = childSettings->get (GKeyProxyPort).toInt ();
156+ QString host;
157+ int port = 0 ;
158+ if (proxyType == ProxyTypeAuto) {
159+ host = childSettings->get (" autoconfigUrl" ).toString ();
160+ } else {
161+ host = childSettings->get (GKeyProxyHost).toString ();
162+ port = childSettings->get (GKeyProxyPort).toInt ();
163+ }
152164 dbusConnection ().send (message ().createReply ({ host, QString::number (port) }));
153165}
154166
155167void NetworkProxy::SetProxy (const QString &proxyType, const QString &host, const QString &port)
156168{
157169 qCDebug (DSM ()) << QString (" Manager.SetProxy proxyType: %1, host: %2, port: %3" ).arg (proxyType).arg (host).arg (port);
158170 int portInt = port.toInt ();
159- if (portInt < 0 || portInt > 65535 ) {
171+ if (portInt < 0 || portInt >= 65535 ) {
160172 setDelayedReply (true );
161173 dbusConnection ().send (message ().createErrorReply (QDBusError::InvalidArgs, " port number must be an integer between 0 and 65535" ));
162174 return ;
@@ -210,7 +222,16 @@ void NetworkProxy::SetProxyAuthentication(const QString &proxyType, const QStrin
210222 childSettings->set (GKeyProxyAuthenticationPassword, password);
211223}
212224
213- void NetworkProxy::onConfigChanged (const QString &key) { }
225+ void NetworkProxy::onConfigChanged (const QString &key)
226+ {
227+ QGSettings *settings = qobject_cast<QGSettings *>(sender ());
228+ if (!settings)
229+ return ;
230+
231+ if (key == " host" || key == " autoconfigUrl" ) {
232+ emit proxyChanged (settings->property (" type" ).toString (), settings->get (key).toString ());
233+ }
234+ }
214235
215236QGSettings *NetworkProxy::getProxyChildSettings (const QString &proxyType)
216237{
@@ -222,6 +243,8 @@ QGSettings *NetworkProxy::getProxyChildSettings(const QString &proxyType)
222243 return m_proxyChildSettingsFtp;
223244 } else if (proxyType == ProxyTypeSocks) {
224245 return m_proxyChildSettingsSocks;
246+ } else if (proxyType == ProxyTypeAuto) {
247+ return m_proxySettings;
225248 }
226249 qCWarning (DSM ()) << " not a valid proxy type:" << proxyType;
227250 return nullptr ;
0 commit comments