[X2go-Commits] x2goclient.git - master (branch) updated: 3.99.0.1-3-gec87644

X2go dev team git-admin at x2go.org
Tue Nov 22 11:33:33 CET 2011


The branch, master has been updated
       via  ec8764469157522d3126a69499835c75e0e81a3a (commit)
      from  c80c9f52dcb2b45a2ab9a951695b4c66d9662192 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit ec8764469157522d3126a69499835c75e0e81a3a
Author: Oleksandr Shneyder <oleksandr.shneyder at treuchtlingen.de>
Date:   Tue Nov 22 11:32:26 2011 +0100

    QTcpSocket working not correct with some Antiviral software ( for example Avast) under windows. Fixing this by replacing it with Winsocks

-----------------------------------------------------------------------

Summary of changes:
 debian/changelog       |    4 +
 onmainwindow_part2.cpp |    2 +-
 onmainwindow_part4.cpp |  229 ++++++++++++++++++++++++++++++-----------------
 sshprocess.cpp         |   29 ++++--
 4 files changed, 171 insertions(+), 93 deletions(-)

The diff of changes is:
diff --git a/debian/changelog b/debian/changelog
index a938f1d..0fcd9e8 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,8 +1,12 @@
 x2goclient (3.99.0.2-0~x2go1) UNRELEASED; urgency=low
 
+  [ Mike Gabriel ]
   * New upstream version (3.99.0.2):
     - Continue development...
 
+  [ Oleksandr Shneyder ]
+  * QTcpSocket working not correct with some Antiviral software ( for example Avast) under windows. Fixing this by replacing it with Winsocks
+
  -- Mike Gabriel <mike.gabriel at das-netzwerkteam.de>  Thu, 13 Oct 2011 01:59:41 +0200
 
 x2goclient (3.99.0.1-0~x2go1) unstable; urgency=low
diff --git a/onmainwindow_part2.cpp b/onmainwindow_part2.cpp
index 702c447..ac5ecd4 100644
--- a/onmainwindow_part2.cpp
+++ b/onmainwindow_part2.cpp
@@ -1569,7 +1569,7 @@ void ONMainWindow::slotRetResumeSess ( bool result,
               this,SLOT ( slotTunnelOk() ) );
 
     localGraphicPort=resumingSession.grPort;
-    int iport=localGraphicPort.toInt() +1;
+    int iport=localGraphicPort.toInt() +1000;
     while ( iport == resumingSession.sndPort.toInt() ||
             iport == resumingSession.fsPort.toInt() ||
             isServerRunning ( iport ) )
diff --git a/onmainwindow_part4.cpp b/onmainwindow_part4.cpp
index a6102d6..76fd224 100644
--- a/onmainwindow_part4.cpp
+++ b/onmainwindow_part4.cpp
@@ -230,9 +230,72 @@ void ONMainWindow::cleanAskPass()
 }
 
 
+#ifdef Q_OS_WIN
+#include <windows.h>
+#include <winsock2.h>
+#include <ws2tcpip.h>
+#endif
+
 
 bool ONMainWindow::isServerRunning ( int port )
 {
+#ifdef Q_OS_WIN
+    SOCKET ConnectSocket = INVALID_SOCKET;
+    struct sockaddr_in saServer;
+    hostent* localHost;
+    char* localIP;
+    int iResult;
+    WSADATA wsaData;
+    
+    struct in_addr addr = { 0 };
+    
+    iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);
+    if (iResult != 0) 
+    {
+        x2goDebug<<"WARNING: WSAStartup failed: "<< iResult<<endl;
+        return false;
+    }
+    
+    addr.s_addr = inet_addr("127.0.0.1");
+    if (addr.s_addr == INADDR_NONE) 
+    {
+            x2goDebug<< "WARNING:  The IPv4 address entered must be a legal address\n";
+            return false;
+    }
+    
+
+    localHost = gethostbyaddr((char*)&addr,4, AF_INET);
+    if(!localHost)
+    {
+      x2goDebug<<"WARNING: gethostbyaddr failed: "<<WSAGetLastError()<<endl;
+      return false;
+    }
+    x2goDebug<<"got localhost"<<endl;
+    
+    localIP = inet_ntoa (*(struct in_addr *)*localHost->h_addr_list);
+
+    saServer.sin_family = AF_INET;
+    saServer.sin_addr.s_addr = inet_addr(localIP);
+    saServer.sin_port = htons(port);
+
+    ConnectSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
+    if (ConnectSocket == INVALID_SOCKET)
+    {
+        x2goDebug<<"WARNING: socket failed with error: "<< WSAGetLastError()<<endl;
+        return false;
+    }
+
+    iResult = ::connect( ConnectSocket, (SOCKADDR*) &saServer, sizeof(saServer));
+    if (iResult == SOCKET_ERROR)
+    {
+        closesocket(ConnectSocket);
+        x2goDebug<<"Port is free: "<<port<<endl;
+        return false;
+    }
+    closesocket(ConnectSocket);
+    x2goDebug<<"Port already used: "<<port<<endl;
+    return true;
+#endif
     QTcpSocket tcpSocket ( 0 );
     tcpSocket.connectToHost ( "127.0.0.1",port );
 
@@ -283,16 +346,16 @@ void ONMainWindow::startXOrg ()
 
     QStringList args;
     QString exec;
-    if(internalX==XMING)
-       exec=appDir+"\\xming\\Xming.exe";
-    if(internalX==VCXSRV)
-       exec=appDir+"\\vcxsrv\\vcxsrv.exe";
+    if (internalX==XMING)
+        exec=appDir+"\\xming\\Xming.exe";
+    if (internalX==VCXSRV)
+        exec=appDir+"\\vcxsrv\\vcxsrv.exe";
     winServersReady=false;
     x2goDebug<<"using internal X: "<<useInternalX;
 //#ifdef CFGCLIENT
     if (!useInternalX || internalX!=XMING)
     {
-        if(!useInternalX)
+        if (!useInternalX)
             exec=xorgExe;
         QString cmdLine;
         if (startXorgOnStart)
@@ -307,12 +370,12 @@ void ONMainWindow::startXOrg ()
             case SAPP:
                 cmdLine=xorgSAppOptions;
                 break;
-	    case WIN:
+            case WIN:
                 cmdLine=xorgWinOptions;
-		x2goDebug<<"WxH:"<<xorgWidth<<"x"<<xorgHeight<<endl;
+                x2goDebug<<"WxH:"<<xorgWidth<<"x"<<xorgHeight<<endl;
                 cmdLine.replace("%w",xorgWidth);
                 cmdLine.replace("%h",xorgHeight);
-		x2goDebug<<cmdLine<<endl;
+                x2goDebug<<cmdLine<<endl;
                 break;
             }
         }
@@ -328,7 +391,7 @@ void ONMainWindow::startXOrg ()
     xorg=new QProcess ( 0 );
     if (useInternalX && (internalX==XMING))
     {
-      
+
         QString workingDir=appDir+"\\xming";
         QStringList env=QProcess::systemEnvironment();
         env<<"GLWIN_ENABLE_DEBUG=0";
@@ -347,7 +410,7 @@ void ONMainWindow::startXOrg ()
         xorg->setEnvironment ( env );
         xorg-> setWorkingDirectory ( workingDir);
     }
-    
+
     x2goDebug<<"running"<<exec<<" "<<args.join(" ");
     xorg->start ( exec, args );
 
@@ -363,9 +426,9 @@ void ONMainWindow::startXOrg ()
 // #ifdef CFGCLIENT
     if ( !useInternalX || internalX!= XMING)
     {
-	 //check connection in slot and launch setWinServerReady
-	 waitingForX=0;
-         QTimer::singleShot(1000, this, SLOT(slotCheckXOrgConnection()));
+        //check connection in slot and launch setWinServerReady
+        waitingForX=0;
+        QTimer::singleShot(1000, this, SLOT(slotCheckXOrgConnection()));
     }
 // #endif
 }
@@ -373,31 +436,31 @@ void ONMainWindow::startXOrg ()
 void ONMainWindow::slotCheckXOrgConnection()
 {
     ++waitingForX;
-    if(isServerRunning(6000+xDisplay))
+    if (isServerRunning(6000+xDisplay))
     {
-      x2goDebug<<"X is started";
-      slotSetWinServersReady();
+        x2goDebug<<"X is started";
+        slotSetWinServersReady();
     }
     else
     {
-      if(waitingForX > 10)
-      {
-         QMessageBox::critical (
-            0,QString::null,
-            tr ( "Can't start X Server\n"
-                 "Please check your installation" ) );
-         close();
-      }
-      else
-      {
-        x2goDebug<<"waiting for X";
-	QTimer::singleShot(1000, this, SLOT(slotCheckXOrgConnection()));	
-      }
+        if (waitingForX > 10)
+        {
+            QMessageBox::critical (
+                0,QString::null,
+                tr ( "Can't start X Server\n"
+                     "Please check your installation" ) );
+            close();
+        }
+        else
+        {
+            x2goDebug<<"waiting for X";
+            QTimer::singleShot(1000, this, SLOT(slotCheckXOrgConnection()));
+        }
     }
 }
 
 WinServerStarter::WinServerStarter ( daemon server, ONMainWindow * par ) :
-QThread ( 0 )
+        QThread ( 0 )
 {
     mode=server;
     parent=par;
@@ -714,31 +777,31 @@ void ONMainWindow::xorgSettings()
     x2goDebug<<"getting xorg settings"<<endl;
 
     X2goSettings st ( "settings" );
-    
+
     useInternalX=(st.setting()->value("useintx",true).toBool());
-    
+
     xorgExe=(st.setting()->value("xexec","C:\\program files\\vcxsrv\\vcxsrv.exe").toString());
     xorgOptions=(st.setting()->value("options","-multiwindow -notrayicon -clipboard").toString());
     startXorgOnStart=(st.setting()->value("onstart",true).toBool());
     xorgWinOptions=(st.setting()->value("optionswin","-screen 0 %wx%h -notrayicon -clipboard").toString());
     xorgFSOptions=(st.setting()->value("optionsfs","-fullscreen -notrayicon -clipboard").toString());
     xorgSAppOptions=(st.setting()->value("optionssingle","-multiwindow -notrayicon -clipboard").toString());
-    
-    if(QFile::exists(appDir+"\\vcxsrv"))
-      internalX=VCXSRV;
-    if(QFile::exists(appDir+"\\xming"))
-      internalX=XMING;
-    if(useInternalX)
-    {
-      startXorgOnStart=(internalX==XMING);
-      xorgOptions="-multiwindow -notrayicon -clipboard";
-      if(internalX==VCXSRV)
-      {
+
+    if (QFile::exists(appDir+"\\vcxsrv"))
+        internalX=VCXSRV;
+    if (QFile::exists(appDir+"\\xming"))
+        internalX=XMING;
+    if (useInternalX)
+    {
+        startXorgOnStart=(internalX==XMING);
+        xorgOptions="-multiwindow -notrayicon -clipboard";
+        if (internalX==VCXSRV)
+        {
 // 	xorgWinOptions="-screen 0 %wx%h -notrayicon -clipboard";
-	xorgWinOptions="-multiwindow -notrayicon -clipboard";
-        xorgFSOptions="-fullscreen -notrayicon -clipboard";
-        xorgSAppOptions="-multiwindow -notrayicon -clipboard";
-      }
+            xorgWinOptions="-multiwindow -notrayicon -clipboard";
+            xorgFSOptions="-fullscreen -notrayicon -clipboard";
+            xorgSAppOptions="-multiwindow -notrayicon -clipboard";
+        }
     }
 
 }
@@ -955,7 +1018,7 @@ QString ONMainWindow::getCurrentUname()
 
 QString ONMainWindow::getCurrentPass()
 {
-    return pass->text();   
+    return pass->text();
 }
 
 void ONMainWindow::slotDetachProxyWindow()
@@ -1385,8 +1448,8 @@ void ONMainWindow::initPassDlg()
 
     pass->hide();
     passPrompt->hide();
-    
-    
+
+
     cbLayout=new QComboBox(passForm);
     cbLayout->addItems(defaultLayout);
     cbLayout->setFocusPolicy(Qt::NoFocus);
@@ -1398,15 +1461,15 @@ void ONMainWindow::initPassDlg()
     cbLayoutLay->addWidget(cbLayout);
     cbLayoutLay->addStretch();
 
-    
+
     ok=new QPushButton ( tr ( "Ok" ),passForm );
     setWidgetStyle ( ok );
     cancel=new QPushButton ( tr ( "Cancel" ),passForm );
     setWidgetStyle ( cancel );
     ok->hide();
     cancel->hide();
-    
-    
+
+
 
     pal.setColor ( QPalette::Button, QColor ( 255,255,255,0 ) );
     pal.setColor ( QPalette::Window, QColor ( 255,255,255,255 ) );
@@ -1414,7 +1477,7 @@ void ONMainWindow::initPassDlg()
     cbLayout->setPalette ( pal );
     ok->setPalette ( pal );
     cancel->setPalette ( pal );
-    
+
 
 
 #ifndef Q_WS_HILDON
@@ -1497,12 +1560,12 @@ void ONMainWindow::initPassDlg()
         wapiWindowRect ( ok->winId(),r );
 #endif
     }
-    if(defaultLayout.size()>1)
+    if (defaultLayout.size()>1)
     {
-      layoutPrompt->show();
-      cbLayout->show();
-      slotChangeKbdLayout(cbLayout->currentText());
-      connect (cbLayout,SIGNAL(currentIndexChanged(QString)),this,SLOT(slotChangeKbdLayout(QString)));
+        layoutPrompt->show();
+        cbLayout->show();
+        slotChangeKbdLayout(cbLayout->currentText());
+        connect (cbLayout,SIGNAL(currentIndexChanged(QString)),this,SLOT(slotChangeKbdLayout(QString)));
     }
 }
 
@@ -2176,31 +2239,31 @@ void ONMainWindow::slotStartBroker()
 
 void ONMainWindow::slotGetBrokerSession(const QString& sinfo)
 {
-   //x2goDebug<<"broker session: "<<sinfo;
-   QStringList lst=sinfo.split("SERVER:",QString::SkipEmptyParts);
-   int keyStartPos=sinfo.indexOf("-----BEGIN DSA PRIVATE KEY-----");
-   QString endStr="-----END DSA PRIVATE KEY-----";
-   int keyEndPos=sinfo.indexOf(endStr);
-   if(keyEndPos == -1 || keyStartPos == -1 || lst.size()==0)
-   {
-     //throw error
-      QMessageBox::critical (
-                0,tr ( "Error" ),
-                tr ("Invalid reply from broker") +"<br>"+sinfo);
-
-     close();
-     return;
-   }
-   config.server=(lst[1].split("\n"))[0];
-   config.key=sinfo.mid(keyStartPos, keyEndPos+endStr.length()-keyStartPos);
+    //x2goDebug<<"broker session: "<<sinfo;
+    QStringList lst=sinfo.split("SERVER:",QString::SkipEmptyParts);
+    int keyStartPos=sinfo.indexOf("-----BEGIN DSA PRIVATE KEY-----");
+    QString endStr="-----END DSA PRIVATE KEY-----";
+    int keyEndPos=sinfo.indexOf(endStr);
+    if (keyEndPos == -1 || keyStartPos == -1 || lst.size()==0)
+    {
+        //throw error
+        QMessageBox::critical (
+            0,tr ( "Error" ),
+            tr ("Invalid reply from broker") +"<br>"+sinfo);
+
+        close();
+        return;
+    }
+    config.server=(lst[1].split("\n"))[0];
+    config.key=sinfo.mid(keyStartPos, keyEndPos+endStr.length()-keyStartPos);
 //    x2goDebug<<"server: "<<config.server<<endl<<" key: "<<config.key;
-   if(sinfo.indexOf("SESSION_INFO")!=-1)
-   {
+    if (sinfo.indexOf("SESSION_INFO")!=-1)
+    {
         QStringList lst=sinfo.split("SESSION_INFO:",QString::SkipEmptyParts);
-	config.sessiondata=(lst[1].split("\n"))[0];
+        config.sessiondata=(lst[1].split("\n"))[0];
 // 	x2goDebug<<"data: "<<config.sessiondata;
-   }
-   slotSessEnter();
+    }
+    slotSessEnter();
 }
 
 void ONMainWindow::slotStartNewBrokerSession ( )
@@ -2249,8 +2312,8 @@ void ONMainWindow::cleanPortable()
     removeDir ( homeDir +"/.ssh" );
     removeDir ( homeDir +"/ssh" );
     removeDir ( homeDir+"/.x2go" );
-    if(cleanAllFiles)
-      removeDir(homeDir+"/.x2goclient");
+    if (cleanAllFiles)
+        removeDir(homeDir+"/.x2goclient");
 }
 
 void ONMainWindow::removeDir ( QString path )
diff --git a/sshprocess.cpp b/sshprocess.cpp
index 41d150c..b045fd0 100644
--- a/sshprocess.cpp
+++ b/sshprocess.cpp
@@ -31,6 +31,7 @@
 SshProcess::SshProcess(SshMasterConnection* master, QObject* parent): QObject(parent)
 {
     masterCon=master;
+    serverSocket=0;
     connect(master,SIGNAL(stdErr(SshProcess*,QByteArray)),this,SLOT(slotStdErr(SshProcess*,QByteArray)));
     connect(master,SIGNAL(ioErr(SshProcess*,QString,QString)),this,SLOT(slotIOerr(SshProcess*,QString,QString)));
     tunnel=false;
@@ -39,9 +40,19 @@ SshProcess::SshProcess(SshMasterConnection* master, QObject* parent): QObject(pa
 
 SshProcess::~SshProcess()
 {
-#ifdef DEBUG      
+#ifdef DEBUG
     x2goDebug<<"ssh process destructor";
 #endif
+    if (serverSocket>0)
+    {
+#ifdef Q_OS_WIN
+        closesocket(serverSocket);
+        WSACleanup();
+
+#else
+        close(serverSocket);
+#endif
+    }
 }
 
 
@@ -59,12 +70,12 @@ void SshProcess::slotCheckNewConnection()
     if (select(serverSocket+1,&rfds,NULL,NULL,&tv)<=0)
         return;
 
-#ifdef DEBUG      
+#ifdef DEBUG
     x2goDebug<<"new tcp connection\n";
 #endif
     int tcpSocket=accept(serverSocket, (struct sockaddr*)&address,&addrlen);
 
-#ifdef DEBUG      
+#ifdef DEBUG
     x2goDebug<<"new socket:"<<tcpSocket<<endl;
 #endif
     masterCon->addChannelConnection(this, tcpSocket, forwardHost, forwardPort, localHost,
@@ -107,7 +118,7 @@ void SshProcess::tunnelLoop()
     connect(timer,SIGNAL(timeout()),this,SLOT(slotCheckNewConnection()));
     timer->start(500);
     emit sshTunnelOk();
-#ifdef DEBUG      
+#ifdef DEBUG
     x2goDebug<<"Direct tunnel: waiting for connections on "<<localHost<<":"<<localPort<<endl;
 #endif
 }
@@ -151,7 +162,7 @@ void SshProcess::slotStdErr(SshProcess* creator, QByteArray data)
 {
     if (creator!=this)
         return;
-#ifdef DEBUG      
+#ifdef DEBUG
     x2goDebug<<"new err data:"<<data<<endl;
 #endif
     stdErrString+=data;
@@ -169,7 +180,7 @@ void SshProcess::slotIOerr(SshProcess* creator, QString message, QString sshSess
 {
     if (creator!=this)
         return;
-#ifdef DEBUG      
+#ifdef DEBUG
     x2goDebug<<"io error:"<<message<<" - "<<sshSessionErr<<endl;
 #endif
     normalExited=false;
@@ -212,14 +223,14 @@ void SshProcess::slotChannelClosed(SshProcess* creator)
         {
             normalExited=false;
             output=stdErrString;
-#ifdef DEBUG      
+#ifdef DEBUG
             x2goDebug<<"have only stderr, something must be wrong"<<endl;
 #endif
-	}
+        }
         else
             output=stdOutString;
     }
-#ifdef DEBUG      
+#ifdef DEBUG
     x2goDebug<<"ssh finished:"<<normalExited<<" - "<<output<<endl;
 #endif
     emit sshFinished(normalExited, output, this);


hooks/post-receive
-- 
x2goclient.git (X2go Client)

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "x2goclient.git" (X2go Client).




More information about the x2go-commits mailing list