1
0
mirror of https://invent.kde.org/network/krdc synced 2024-07-01 07:14:24 +00:00

rdp: Proxy and Gateway settings

Add settings menu for both proxy and gateway settings, and hooks the settings to the rdpsession.c and FreeRDP.

BUG:482395
This commit is contained in:
Akseli Lahtinen 2024-04-16 12:20:23 +00:00
parent cbb8170d44
commit 70d6bbfbdd
6 changed files with 687 additions and 282 deletions

1
.gitignore vendored
View File

@ -21,3 +21,4 @@ CMakeLists.txt.user*
*.unc-backup*
.cache
compile_commands.json
.clang-format

View File

@ -115,6 +115,26 @@
<entry name="TlsSecLevel" type="Int">
<default>1</default>
</entry>
<entry name="ProxyProtocol" type="Int">
<default>0</default>
</entry>
<entry name="ProxyUsername" type="String">
</entry>
<entry name="ProxyPassword" type="String">
</entry>
<entry name="ProxyHost" type="String">
</entry>
<entry name="GatewayTransportType" type="Int">
<default>0</default>
</entry>
<entry name="GatewayUsername" type="String">
</entry>
<entry name="GatewayPassword" type="String">
</entry>
<entry name="GatewayServer" type="String">
</entry>
<entry name="GatewayDomain" type="String">
</entry>
</group>
<group name="NX">
<entry name="NxWidth" type="Int">

View File

@ -136,6 +136,15 @@ QWidget *RdpHostPreferences::createProtocolSpecificConfigPage()
rdpUi.kcfg_KeyboardLayout->setCurrentIndex(keymap2int(keyboardLayout()));
rdpUi.kcfg_ShareMedia->setText(shareMedia());
rdpUi.kcfg_TlsSecLevel->setCurrentIndex(int(tlsSecLevel()));
rdpUi.kcfg_ProxyProtocol->setCurrentIndex(int(proxyProtocol()));
rdpUi.kcfg_ProxyUsername->setText(proxyUsername());
rdpUi.kcfg_ProxyPassword->setPassword(proxyPassword());
rdpUi.kcfg_ProxyHost->setText(proxyHost());
rdpUi.kcfg_GatewayTransportType->setCurrentIndex(int(gatewayTransportType()));
rdpUi.kcfg_GatewayUsername->setText(gatewayUsername());
rdpUi.kcfg_GatewayPassword->setPassword(gatewayPassword());
rdpUi.kcfg_GatewayServer->setText(gatewayServer());
rdpUi.kcfg_GatewayDomain->setText(gatewayDomain());
// Have to call updateWidthHeight() here
// We leverage the final part of this function to enable/disable kcfg_Height and kcfg_Width
@ -215,6 +224,15 @@ void RdpHostPreferences::acceptConfig()
setSound(Sound(rdpUi.kcfg_Sound->currentIndex()));
setShareMedia(rdpUi.kcfg_ShareMedia->text());
setTlsSecLevel(TlsSecLevel(rdpUi.kcfg_TlsSecLevel->currentIndex()));
setProxyProtocol(ProxyProtocol(rdpUi.kcfg_ProxyProtocol->currentIndex()));
setProxyUsername(rdpUi.kcfg_ProxyUsername->text());
setProxyPassword(rdpUi.kcfg_ProxyPassword->password());
setProxyHost(rdpUi.kcfg_ProxyHost->text());
setGatewayTransportType(GatewayTransportType(rdpUi.kcfg_GatewayTransportType->currentIndex()));
setGatewayUsername(rdpUi.kcfg_GatewayUsername->text());
setGatewayPassword(rdpUi.kcfg_GatewayPassword->password());
setGatewayServer(rdpUi.kcfg_GatewayServer->text());
setGatewayDomain(rdpUi.kcfg_GatewayDomain->text());
}
bool RdpHostPreferences::scaleToSize() const
@ -318,3 +336,87 @@ RdpHostPreferences::TlsSecLevel RdpHostPreferences::tlsSecLevel() const
{
return TlsSecLevel(m_configGroup.readEntry("tlsSecLevel", Settings::tlsSecLevel()));
}
// Proxy settings
RdpHostPreferences::ProxyProtocol RdpHostPreferences::proxyProtocol() const
{
return ProxyProtocol(m_configGroup.readEntry("proxyProtocol", Settings::proxyProtocol()));
}
void RdpHostPreferences::setProxyProtocol(RdpHostPreferences::ProxyProtocol proxyProtocol)
{
m_configGroup.writeEntry("proxyProtocol", int(proxyProtocol));
}
QString RdpHostPreferences::proxyUsername() const
{
return QString(m_configGroup.readEntry("proxyUsername", Settings::proxyUsername()));
}
void RdpHostPreferences::setProxyUsername(const QString &proxyUsername)
{
m_configGroup.writeEntry("proxyUsername", proxyUsername);
}
QString RdpHostPreferences::proxyPassword() const
{
return QString(m_configGroup.readEntry("proxyPassword", Settings::proxyPassword()));
}
void RdpHostPreferences::setProxyPassword(const QString &proxyPassword)
{
m_configGroup.writeEntry("proxyPassword", proxyPassword);
}
QString RdpHostPreferences::proxyHost() const
{
return QString(m_configGroup.readEntry("proxyHost", Settings::proxyHost()));
}
void RdpHostPreferences::setProxyHost(const QString &proxyHost)
{
m_configGroup.writeEntry("proxyHost", proxyHost);
}
// Gateway settings
RdpHostPreferences::GatewayTransportType RdpHostPreferences::gatewayTransportType() const
{
return GatewayTransportType(m_configGroup.readEntry("gatewayTransportType", int(Settings::gatewayTransportType())));
}
void RdpHostPreferences::setGatewayTransportType(RdpHostPreferences::GatewayTransportType gatewayTransportType)
{
m_configGroup.writeEntry("gatewayTransportType", int(gatewayTransportType));
}
QString RdpHostPreferences::gatewayUsername() const
{
return QString(m_configGroup.readEntry("gatewayUsername", Settings::gatewayUsername()));
}
void RdpHostPreferences::setGatewayUsername(const QString &gatewayUsername)
{
m_configGroup.writeEntry("gatewayUsername", gatewayUsername);
}
QString RdpHostPreferences::gatewayPassword() const
{
return QString(m_configGroup.readEntry("gatewayPassword", Settings::gatewayPassword()));
}
void RdpHostPreferences::setGatewayPassword(const QString &gatewayPassword)
{
m_configGroup.writeEntry("gatewayPassword", gatewayPassword);
}
QString RdpHostPreferences::gatewayServer() const
{
return QString(m_configGroup.readEntry("gatewayServer", Settings::gatewayServer()));
}
void RdpHostPreferences::setGatewayServer(const QString &gatewayServer)
{
m_configGroup.writeEntry("gatewayServer", gatewayServer);
}
QString RdpHostPreferences::gatewayDomain() const
{
return QString(m_configGroup.readEntry("gatewayDomain", Settings::gatewayDomain()));
}
void RdpHostPreferences::setGatewayDomain(const QString &gatewayDomain)
{
m_configGroup.writeEntry("gatewayDomain", gatewayDomain);
}

View File

@ -57,6 +57,10 @@ public:
Bit256,
};
enum class ProxyProtocol { HTTP, SOCKS };
enum class GatewayTransportType { Auto, HTTP, RPC };
explicit RdpHostPreferences(KConfigGroup configGroup, QObject *parent = nullptr);
~RdpHostPreferences() override;
@ -85,6 +89,35 @@ public:
TlsSecLevel tlsSecLevel() const;
void setTlsSecLevel(TlsSecLevel tlsSecLevel);
// Proxy settings
ProxyProtocol proxyProtocol() const;
void setProxyProtocol(ProxyProtocol proxyProtocol);
QString proxyUsername() const;
void setProxyUsername(const QString &proxyUsername);
QString proxyPassword() const;
void setProxyPassword(const QString &proxyPassword);
QString proxyHost() const;
void setProxyHost(const QString &proxyHost);
// Gateway settings
GatewayTransportType gatewayTransportType() const;
void setGatewayTransportType(GatewayTransportType gatewayTransportType);
QString gatewayUsername() const;
void setGatewayUsername(const QString &gatewayUsername);
QString gatewayPassword() const;
void setGatewayPassword(const QString &gatewayPassword);
QString gatewayServer() const;
void setGatewayServer(const QString &gatewayServer);
QString gatewayDomain() const;
void setGatewayDomain(const QString &gatewayDomain);
protected:
QWidget *createProtocolSpecificConfigPage() override;
void acceptConfig() override;

View File

@ -6,140 +6,11 @@
<rect>
<x>0</x>
<y>0</y>
<width>560</width>
<height>340</height>
<width>948</width>
<height>1097</height>
</rect>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="8" column="0">
<widget class="QLabel" name="shareMediaLabel">
<property name="text">
<string>Share Media:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="5" column="1">
<widget class="KComboBox" name="kcfg_ColorDepth">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>280</width>
<height>0</height>
</size>
</property>
<item>
<property name="text">
<string>Use Best Available</string>
</property>
</item>
<item>
<property name="text">
<string>True Color with Alpha (32 Bit)</string>
</property>
</item>
<item>
<property name="text">
<string>True Color (24 Bit)</string>
</property>
</item>
<item>
<property name="text">
<string>High Color (16 Bit)</string>
</property>
</item>
<item>
<property name="text">
<string>Low Color (8 Bit)</string>
</property>
</item>
</widget>
</item>
<item row="2" column="1">
<layout class="QHBoxLayout">
<item>
<widget class="QLabel" name="widthLabel">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string>&amp;Width:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<property name="buddy">
<cstring>kcfg_Width</cstring>
</property>
</widget>
</item>
<item>
<widget class="QSpinBox" name="kcfg_Width">
<property name="enabled">
<bool>false</bool>
</property>
<property name="whatsThis">
<string>This is the width of the remote desktop. You can only change this value manually if you select Custom as desktop resolution above.</string>
</property>
<property name="maximum">
<number>9999</number>
</property>
<property name="value">
<number>800</number>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="heightLabel">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string>H&amp;eight:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<property name="buddy">
<cstring>kcfg_Height</cstring>
</property>
</widget>
</item>
<item>
<widget class="QSpinBox" name="kcfg_Height">
<property name="enabled">
<bool>false</bool>
</property>
<property name="whatsThis">
<string>This is the height of the remote desktop. You can only change this value manually if you select Custom as desktop resolution above.</string>
</property>
<property name="maximum">
<number>9999</number>
</property>
<property name="value">
<number>600</number>
</property>
</widget>
</item>
</layout>
</item>
<item row="4" column="0">
<widget class="QLabel" name="accelerationLabel">
<property name="text">
<string>Acceleration:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="9" column="1">
<spacer>
<property name="orientation">
@ -153,19 +24,6 @@
</property>
</spacer>
</item>
<item row="5" column="0">
<widget class="QLabel" name="colorDepthLabel">
<property name="text">
<string>Color &amp;depth:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<property name="buddy">
<cstring>kcfg_ColorDepth</cstring>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="resolutionLabel">
<property name="text">
@ -176,102 +34,6 @@
</property>
</widget>
</item>
<item row="6" column="0">
<widget class="QLabel" name="layoutLabel">
<property name="text">
<string>&amp;Keyboard layout:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<property name="buddy">
<cstring>kcfg_KeyboardLayout</cstring>
</property>
</widget>
</item>
<item row="7" column="1">
<widget class="KComboBox" name="kcfg_Sound">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>280</width>
<height>0</height>
</size>
</property>
<item>
<property name="text">
<string>On This Computer</string>
</property>
</item>
<item>
<property name="text">
<string>On Remote Computer</string>
</property>
</item>
<item>
<property name="text">
<string>Disable Sound</string>
</property>
</item>
</widget>
</item>
<item row="1" column="1">
<widget class="KComboBox" name="kcfg_Resolution">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>280</width>
<height>0</height>
</size>
</property>
<property name="whatsThis">
<string>Here you can specify the resolution of the remote desktop. This resolution determines the size of the desktop that will be presented to you.</string>
</property>
<property name="currentIndex">
<number>0</number>
</property>
<item>
<property name="text">
<string>Small (1280x720)</string>
</property>
</item>
<item>
<property name="text">
<string>Medium (1600x900)</string>
</property>
</item>
<item>
<property name="text">
<string>Large (1920x1080)</string>
</property>
</item>
<item>
<property name="text">
<string>Current Window Size</string>
</property>
</item>
<item>
<property name="text">
<string>Current Screen Resolution</string>
</property>
</item>
<item>
<property name="text">
<string>Custom Resolution (...)</string>
</property>
</item>
</widget>
</item>
<item row="4" column="1">
<widget class="KComboBox" name="kcfg_Acceleration">
<property name="sizePolicy">
@ -308,6 +70,58 @@
</item>
</widget>
</item>
<item row="7" column="0">
<widget class="QLabel" name="soundLabel">
<property name="text">
<string comment="label for soundsettings in preferences dialog">Sound:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<property name="buddy">
<cstring>kcfg_Sound</cstring>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="accelerationLabel">
<property name="text">
<string>Acceleration:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="9" column="0">
<widget class="QLabel" name="TlsSecLevelLabel">
<property name="text">
<string>TLS security level:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<property name="buddy">
<cstring>kcfg_TlsSecLevel</cstring>
</property>
</widget>
</item>
<item row="8" column="1">
<widget class="KUrlRequester" name="kcfg_ShareMedia">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="mode">
<set>KFile::Directory|KFile::ExistingOnly|KFile::LocalOnly</set>
</property>
<property name="acceptMode">
<enum>QFileDialog::AcceptOpen</enum>
</property>
</widget>
</item>
<item row="6" column="1">
<widget class="KComboBox" name="kcfg_KeyboardLayout">
<property name="sizePolicy">
@ -515,6 +329,78 @@
</item>
</widget>
</item>
<item row="5" column="1">
<widget class="KComboBox" name="kcfg_ColorDepth">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>280</width>
<height>0</height>
</size>
</property>
<item>
<property name="text">
<string>Use Best Available</string>
</property>
</item>
<item>
<property name="text">
<string>True Color with Alpha (32 Bit)</string>
</property>
</item>
<item>
<property name="text">
<string>True Color (24 Bit)</string>
</property>
</item>
<item>
<property name="text">
<string>High Color (16 Bit)</string>
</property>
</item>
<item>
<property name="text">
<string>Low Color (8 Bit)</string>
</property>
</item>
</widget>
</item>
<item row="7" column="1">
<widget class="KComboBox" name="kcfg_Sound">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>280</width>
<height>0</height>
</size>
</property>
<item>
<property name="text">
<string>On This Computer</string>
</property>
</item>
<item>
<property name="text">
<string>On Remote Computer</string>
</property>
</item>
<item>
<property name="text">
<string>Disable Sound</string>
</property>
</item>
</widget>
</item>
<item row="3" column="1">
<widget class="QCheckBox" name="kcfg_ScaleToSize">
<property name="minimumSize">
@ -531,48 +417,6 @@
</property>
</widget>
</item>
<item row="8" column="1">
<widget class="KUrlRequester" name="kcfg_ShareMedia">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="mode">
<set>KFile::Directory|KFile::ExistingOnly|KFile::LocalOnly</set>
</property>
<property name="acceptMode">
<enum>QFileDialog::AcceptOpen</enum>
</property>
</widget>
</item>
<item row="7" column="0">
<widget class="QLabel" name="soundLabel">
<property name="text">
<string comment="label for soundsettings in preferences dialog">Sound:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<property name="buddy">
<cstring>kcfg_Sound</cstring>
</property>
</widget>
</item>
<item row="9" column="0">
<widget class="QLabel" name="TlsSecLevelLabel">
<property name="text">
<string>TLS security level:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<property name="buddy">
<cstring>kcfg_TlsSecLevel</cstring>
</property>
</widget>
</item>
<item row="9" column="1">
<widget class="KComboBox" name="kcfg_TlsSecLevel">
<property name="sizePolicy">
@ -619,6 +463,351 @@
</item>
</widget>
</item>
<item row="6" column="0">
<widget class="QLabel" name="layoutLabel">
<property name="text">
<string>&amp;Keyboard layout:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<property name="buddy">
<cstring>kcfg_KeyboardLayout</cstring>
</property>
</widget>
</item>
<item row="2" column="1">
<layout class="QHBoxLayout">
<item>
<widget class="QLabel" name="widthLabel">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string>&amp;Width:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<property name="buddy">
<cstring>kcfg_Width</cstring>
</property>
</widget>
</item>
<item>
<widget class="QSpinBox" name="kcfg_Width">
<property name="enabled">
<bool>false</bool>
</property>
<property name="whatsThis">
<string>This is the width of the remote desktop. You can only change this value manually if you select Custom as desktop resolution above.</string>
</property>
<property name="maximum">
<number>9999</number>
</property>
<property name="value">
<number>800</number>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="heightLabel">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string>H&amp;eight:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<property name="buddy">
<cstring>kcfg_Height</cstring>
</property>
</widget>
</item>
<item>
<widget class="QSpinBox" name="kcfg_Height">
<property name="enabled">
<bool>false</bool>
</property>
<property name="whatsThis">
<string>This is the height of the remote desktop. You can only change this value manually if you select Custom as desktop resolution above.</string>
</property>
<property name="maximum">
<number>9999</number>
</property>
<property name="value">
<number>600</number>
</property>
</widget>
</item>
</layout>
</item>
<item row="8" column="0">
<widget class="QLabel" name="shareMediaLabel">
<property name="text">
<string>Share Media:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="KComboBox" name="kcfg_Resolution">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>280</width>
<height>0</height>
</size>
</property>
<property name="whatsThis">
<string>Here you can specify the resolution of the remote desktop. This resolution determines the size of the desktop that will be presented to you.</string>
</property>
<property name="currentIndex">
<number>0</number>
</property>
<item>
<property name="text">
<string>Small (1280x720)</string>
</property>
</item>
<item>
<property name="text">
<string>Medium (1600x900)</string>
</property>
</item>
<item>
<property name="text">
<string>Large (1920x1080)</string>
</property>
</item>
<item>
<property name="text">
<string>Current Window Size</string>
</property>
</item>
<item>
<property name="text">
<string>Current Screen Resolution</string>
</property>
</item>
<item>
<property name="text">
<string>Custom Resolution (...)</string>
</property>
</item>
</widget>
</item>
<item row="12" column="0" colspan="2">
<widget class="QTabWidget" name="advancedNetworkSettingsTabs">
<property name="currentIndex">
<number>0</number>
</property>
<widget class="QWidget" name="proxySettingsTab">
<attribute name="title">
<string>Proxy</string>
</attribute>
<layout class="QVBoxLayout" name="verticalLayout_4">
<item>
<layout class="QFormLayout" name="proxyFormLayout">
<item row="0" column="0">
<widget class="QLabel" name="protocolLabel">
<property name="text">
<string>Protocol:</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QComboBox" name="kcfg_ProxyProtocol">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<item>
<property name="text">
<string>HTTP</string>
</property>
</item>
<item>
<property name="text">
<string>SOCKS</string>
</property>
</item>
</widget>
</item>
<item row="2" column="1">
<widget class="KLineEdit" name="kcfg_ProxyUsername"/>
</item>
<item row="3" column="0">
<widget class="QLabel" name="pPasswordLabel">
<property name="text">
<string>Password:</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="KPasswordLineEdit" name="kcfg_ProxyPassword"/>
</item>
<item row="2" column="0">
<widget class="QLabel" name="pUsernameLabel">
<property name="text">
<string>Username:</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="pHostLabel">
<property name="text">
<string>Server:</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="KLineEdit" name="kcfg_ProxyHost">
<property name="placeholderText">
<string>host:port</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
<widget class="QWidget" name="gatewaySettingsTab">
<attribute name="title">
<string>Gateway</string>
</attribute>
<layout class="QVBoxLayout" name="verticalLayout_9">
<item>
<layout class="QFormLayout" name="gatewayFormLayout">
<item row="1" column="0">
<widget class="QLabel" name="gServerLabel">
<property name="text">
<string>Server:</string>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="gUsernameLabel">
<property name="text">
<string>Username:</string>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="gPasswordLabel">
<property name="text">
<string>Password:</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="KLineEdit" name="kcfg_GatewayServer">
<property name="placeholderText">
<string>host:port</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="KLineEdit" name="kcfg_GatewayUsername"/>
</item>
<item row="4" column="1">
<widget class="KPasswordLineEdit" name="kcfg_GatewayPassword"/>
</item>
<item row="0" column="0">
<widget class="QLabel" name="gTransportTypeLabel">
<property name="text">
<string>Transport type:</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QComboBox" name="kcfg_GatewayTransportType">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<item>
<property name="text">
<string>Auto</string>
</property>
</item>
<item>
<property name="text">
<string>HTTP</string>
</property>
</item>
<item>
<property name="text">
<string>RPC</string>
</property>
</item>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="gDomainLabel">
<property name="text">
<string>Domain:</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="KLineEdit" name="kcfg_GatewayDomain"/>
</item>
</layout>
</item>
</layout>
</widget>
</widget>
</item>
<item row="5" column="0">
<widget class="QLabel" name="colorDepthLabel">
<property name="text">
<string>Color &amp;depth:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<property name="buddy">
<cstring>kcfg_ColorDepth</cstring>
</property>
</widget>
</item>
<item row="11" column="0" colspan="2" alignment="Qt::AlignHCenter|Qt::AlignVCenter">
<widget class="QLabel" name="advancedNetworkSettingsLabel">
<property name="text">
<string>Advanced Network Settings</string>
</property>
<property name="wordWrap">
<bool>false</bool>
</property>
</widget>
</item>
<item row="10" column="0">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
<customwidgets>
@ -627,11 +816,21 @@
<extends>QComboBox</extends>
<header>kcombobox.h</header>
</customwidget>
<customwidget>
<class>KLineEdit</class>
<extends>QLineEdit</extends>
<header>klineedit.h</header>
</customwidget>
<customwidget>
<class>KUrlRequester</class>
<extends>QWidget</extends>
<header>kurlrequester.h</header>
</customwidget>
<customwidget>
<class>KPasswordLineEdit</class>
<extends>QWidget</extends>
<header>kpasswordlineedit.h</header>
</customwidget>
</customwidgets>
<tabstops>
<tabstop>kcfg_Width</tabstop>

View File

@ -4,6 +4,7 @@
*/
#include "rdpsession.h"
#include "rdphostpreferences.h"
#include <memory>
@ -435,6 +436,55 @@ bool RdpSession::start()
break;
}
const auto proxyHostAddress = QUrl(m_preferences->proxyHost());
if (!proxyHostAddress.isEmpty()) {
int defaultPort = 8080;
switch (m_preferences->proxyProtocol()) {
case RdpHostPreferences::ProxyProtocol::HTTP:
settings->ProxyType = PROXY_TYPE_HTTP;
break;
case RdpHostPreferences::ProxyProtocol::SOCKS:
settings->ProxyType = PROXY_TYPE_SOCKS;
defaultPort = 1080;
break;
default:
settings->ProxyType = PROXY_TYPE_NONE;
break;
}
settings->ProxyHostname = proxyHostAddress.host().toLocal8Bit().data();
settings->ProxyUsername = m_preferences->proxyUsername().toLocal8Bit().data();
settings->ProxyPassword = m_preferences->proxyPassword().toLocal8Bit().data();
settings->ProxyPort = proxyHostAddress.port(defaultPort);
}
const auto gatewayServerAddress = QUrl(m_preferences->proxyHost());
if (!gatewayServerAddress.isEmpty()) {
settings->GatewayHostname = gatewayServerAddress.host().toLocal8Bit().data();
settings->GatewayPort = gatewayServerAddress.port(3389);
settings->GatewayUsername = m_preferences->gatewayUsername().toLocal8Bit().data();
settings->GatewayPassword = m_preferences->gatewayPassword().toLocal8Bit().data();
settings->GatewayDomain = m_preferences->gatewayDomain().toLocal8Bit().data();
switch (m_preferences->gatewayTransportType()) {
case RdpHostPreferences::GatewayTransportType::Auto:
settings->GatewayHttpTransport = true;
settings->GatewayRpcTransport = true;
break;
case RdpHostPreferences::GatewayTransportType::RPC:
settings->GatewayHttpTransport = false;
settings->GatewayRpcTransport = true;
break;
case RdpHostPreferences::GatewayTransportType::HTTP:
settings->GatewayHttpTransport = true;
settings->GatewayRpcTransport = false;
break;
default:
// Auto as default
settings->GatewayHttpTransport = true;
settings->GatewayRpcTransport = true;
break;
}
}
if (!freerdp_connect(m_freerdp)) {
qWarning(KRDC) << "Unable to connect";
emitErrorMessage();