mirror of
git://slackware.nl/current.git
synced 2025-01-08 05:24:13 +01:00
185 lines
6.7 KiB
Diff
185 lines
6.7 KiB
Diff
|
Support >=free-rdp-1.1.0.
|
||
|
|
||
|
https://git.reviewboard.kde.org/r/115059/
|
||
|
|
||
|
diff --git a/rdp/rdpview.cpp b/rdp/rdpview.cpp
|
||
|
index 0d14e04691549e084b58501cd10ca2382ef25c63..9062ba5fa060284a679f0c9bc211ab7dd6972c0a 100644
|
||
|
--- a/rdp/rdpview.cpp
|
||
|
+++ b/rdp/rdpview.cpp
|
||
|
@@ -158,71 +158,58 @@ bool RdpView::start()
|
||
|
width = this->parentWidget()->size().width();
|
||
|
height = this->parentWidget()->size().height();
|
||
|
}
|
||
|
- arguments << "-g" << QString::number(width) + 'x' + QString::number(height);
|
||
|
+ arguments << "-decorations"; // put this option first so we can detect xfreerdp < 1.1
|
||
|
+ arguments << "/w:" + QString::number(width);
|
||
|
+ arguments << "/h:" + QString::number(height);
|
||
|
|
||
|
- arguments << "-k" << keymapToXfreerdp(m_hostPreferences->keyboardLayout());
|
||
|
+ arguments << "/kbd:" + keymapToXfreerdp(m_hostPreferences->keyboardLayout());
|
||
|
|
||
|
if (!m_url.userName().isEmpty()) {
|
||
|
// if username contains a domain, it needs to be set with another parameter
|
||
|
if (m_url.userName().contains('\\')) {
|
||
|
const QStringList splittedName = m_url.userName().split('\\');
|
||
|
- arguments << "-d" << splittedName.at(0);
|
||
|
- arguments << "-u" << splittedName.at(1);
|
||
|
+ arguments << "/d:" + splittedName.at(0);
|
||
|
+ arguments << "/u:" + splittedName.at(1);
|
||
|
} else {
|
||
|
- arguments << "-u" << m_url.userName();
|
||
|
+ arguments << "/u:" + m_url.userName();
|
||
|
}
|
||
|
} else {
|
||
|
- arguments << "-u" << "";
|
||
|
+ arguments << "-u:";
|
||
|
}
|
||
|
|
||
|
- if (!m_url.password().isNull())
|
||
|
- arguments << "-p" << m_url.password();
|
||
|
-
|
||
|
- arguments << "-D"; // request the window has no decorations
|
||
|
- arguments << "-X" << QString::number(m_container->winId());
|
||
|
- arguments << "-a" << QString::number((m_hostPreferences->colorDepth() + 1) * 8);
|
||
|
-
|
||
|
- switch (m_hostPreferences->sound()) {
|
||
|
- case 1:
|
||
|
- arguments << "-o";
|
||
|
- break;
|
||
|
- case 0:
|
||
|
- arguments << "--plugin" << "rdpsnd";
|
||
|
- break;
|
||
|
- case 2:
|
||
|
- default:
|
||
|
- break;
|
||
|
- }
|
||
|
+ arguments << "/parent-window:" + QString::number(m_container->winId());
|
||
|
+ arguments << "/bpp:" + QString::number((m_hostPreferences->colorDepth() + 1) * 8);
|
||
|
+ arguments << "/audio-mode:" + m_hostPreferences->sound();
|
||
|
|
||
|
if (!m_hostPreferences->shareMedia().isEmpty()) {
|
||
|
QStringList shareMedia;
|
||
|
- shareMedia << "--plugin" << "rdpdr" << "--data" << "disk:media:" + m_hostPreferences->shareMedia() << "--";
|
||
|
+ shareMedia << "/drive:media," + m_hostPreferences->shareMedia();
|
||
|
arguments += shareMedia;
|
||
|
}
|
||
|
|
||
|
QString performance;
|
||
|
switch (m_hostPreferences->performance()) {
|
||
|
case 0:
|
||
|
- performance = 'm';
|
||
|
+ performance = "modem";
|
||
|
break;
|
||
|
case 1:
|
||
|
- performance = 'b';
|
||
|
+ performance = "broadband";
|
||
|
break;
|
||
|
case 2:
|
||
|
- performance = 'l';
|
||
|
+ performance = "lan";
|
||
|
break;
|
||
|
default:
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
- arguments << "-x" << performance;
|
||
|
+ arguments << "/network:" + performance;
|
||
|
|
||
|
if (m_hostPreferences->console()) {
|
||
|
- arguments << "-0";
|
||
|
+ arguments << "/admin";
|
||
|
}
|
||
|
|
||
|
if (m_hostPreferences->remoteFX()) {
|
||
|
- arguments << "--rfx";
|
||
|
+ arguments << "/rfx";
|
||
|
}
|
||
|
|
||
|
if (!m_hostPreferences->extraOptions().isEmpty()) {
|
||
|
@@ -233,16 +220,21 @@ bool RdpView::start()
|
||
|
// krdc has no support for certificate management yet; it would not be possbile to connect to any host:
|
||
|
// "The host key for example.com has changed" ...
|
||
|
// "Add correct host key in ~/.freerdp/known_hosts to get rid of this message."
|
||
|
- arguments << "--ignore-certificate";
|
||
|
+ arguments << "/cert-ignore";
|
||
|
|
||
|
// clipboard sharing is activated in KRDC; user can disable it at runtime
|
||
|
- arguments << "--plugin" << "cliprdr";
|
||
|
+ arguments << "/clipboard";
|
||
|
|
||
|
- arguments << "-t" << QString::number(m_port);
|
||
|
- arguments << m_host;
|
||
|
+ arguments << "/port:" + QString::number(m_port);
|
||
|
+ arguments << "/v:" + m_host;
|
||
|
|
||
|
kDebug(5012) << "Starting xfreerdp with arguments:" << arguments;
|
||
|
|
||
|
+ //avoid printing the password in debug
|
||
|
+ if (!m_url.password().isNull()) {
|
||
|
+ arguments << "/p:" + m_url.password();
|
||
|
+ }
|
||
|
+
|
||
|
setStatus(Connecting);
|
||
|
|
||
|
connect(m_process, SIGNAL(error(QProcess::ProcessError)), SLOT(processError(QProcess::ProcessError)));
|
||
|
@@ -302,7 +294,7 @@ void RdpView::connectionError()
|
||
|
|
||
|
void RdpView::processError(QProcess::ProcessError error)
|
||
|
{
|
||
|
- kDebug(5012) << "processError:" << error;
|
||
|
+ kDebug(5012) << error;
|
||
|
if (m_quitFlag) // do not try to show error messages while quitting (prevent crashes)
|
||
|
return;
|
||
|
|
||
|
@@ -319,33 +311,13 @@ void RdpView::processError(QProcess::ProcessError error)
|
||
|
void RdpView::receivedStandardError()
|
||
|
{
|
||
|
const QString output(m_process->readAllStandardError());
|
||
|
- kDebug(5012) << "receivedStandardError:" << output;
|
||
|
- QString line;
|
||
|
- int i = 0;
|
||
|
- while (!(line = output.section('\n', i, i)).isEmpty()) {
|
||
|
-
|
||
|
- // the following error is issued by freerdp because of a bug in freerdp 1.0.1 and below;
|
||
|
- // see: https://github.com/FreeRDP/FreeRDP/pull/576
|
||
|
- //"X Error of failed request: BadWindow (invalid Window parameter)
|
||
|
- // Major opcode of failed request: 7 (X_ReparentWindow)
|
||
|
- // Resource id in failed request: 0x71303348
|
||
|
- // Serial number of failed request: 36
|
||
|
- // Current serial number in output stream: 36"
|
||
|
- if (line.contains(QLatin1String("X_ReparentWindow"))) {
|
||
|
- KMessageBox::error(0, i18n("The version of \"xfreerdp\" you are using is too old.\n"
|
||
|
- "xfreerdp 1.0.2 or greater is required."),
|
||
|
- i18n("RDP Failure"));
|
||
|
- connectionError();
|
||
|
- return;
|
||
|
- }
|
||
|
- i++;
|
||
|
- }
|
||
|
+ kDebug(5012) << output;
|
||
|
}
|
||
|
|
||
|
void RdpView::receivedStandardOutput()
|
||
|
{
|
||
|
const QString output(m_process->readAllStandardOutput());
|
||
|
- kDebug(5012) << "receivedStandardOutput:" << output;
|
||
|
+ kDebug(5012) << output;
|
||
|
QString line;
|
||
|
int i = 0;
|
||
|
while (!(line = output.section('\n', i, i)).isEmpty()) {
|
||
|
@@ -373,6 +345,14 @@ void RdpView::receivedStandardOutput()
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
+ // we no longer support freerdp < 1.1, we only support versions with the new interface
|
||
|
+ if (line.contains(QLatin1String("invalid option: -decorations"))) {
|
||
|
+ KMessageBox::error(0, i18n("The version of \"xfreerdp\" you are using is too old.\n"
|
||
|
+ "xfreerdp 1.1 or greater is required."),
|
||
|
+ i18n("RDP Failure"));
|
||
|
+ connectionError();
|
||
|
+ return;
|
||
|
+ }
|
||
|
i++;
|
||
|
}
|
||
|
}
|