summaryrefslogblamecommitdiffstats
path: root/source/kde/patch/krdc/krdc_freerdp-1.1.0.patch
blob: 75b51468885a18364ac071db6a8a9ffc2369ea20 (plain) (tree)























































































































































































                                                                                                                    
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++;
     }
 }