[X2Go-Commits] x2goclient2.git - master (branch) updated: 23b595523da9554529cb2874112b3b3dad4614db

X2Go dev team git-admin at x2go.org
Tue Mar 12 17:57:48 CET 2013


The branch, master has been updated
       via  23b595523da9554529cb2874112b3b3dad4614db (commit)
      from  3f2d20b4cc2804a5cd0b68e6f3113c1d9bbf53e4 (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 23b595523da9554529cb2874112b3b3dad4614db
Author: Oleksandr Shneyder <o.shneyder at phoca-gmbh.de>
Date:   Tue Mar 12 17:57:13 2013 +0100

    Add class X2GoSession. Continue development

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

Summary of changes:
 configuratorserver.cpp                |    8 +--
 profile.cpp                           |   84 +++++++++++++++++++++++++++---
 profile.h                             |   22 ++++++--
 sessionform.cpp                       |    1 +
 sessionstatusframe.cpp                |   25 +++++++++
 sessionstatusframe.h                  |    5 ++
 sessionstatusframeapplications.cpp    |    6 +++
 sessionstatusframeapplications.h      |    5 ++
 sessionstatusframestatus.cpp          |   71 ++++++++++++++++----------
 sessionstatusframestatus.h            |    6 +++
 sshconnection.cpp                     |   46 ++++++++++++-----
 sshconnection.h                       |    3 ++
 sshconnectionguiinteraction.cpp       |   22 ++++----
 sshconnectionguiinteraction.h         |   14 +++--
 x2gobroker.cpp                        |   90 ++++++++++++++++++++++++++++++---
 x2gobroker.h                          |    4 ++
 x2goclient2.pro                       |    6 ++-
 x2gosession.cpp                       |   81 +++++++++++++++++++++++++++++
 sessionstatusframe.h => x2gosession.h |   40 ++++++++-------
 19 files changed, 447 insertions(+), 92 deletions(-)
 create mode 100644 x2gosession.cpp
 copy sessionstatusframe.h => x2gosession.h (66%)

The diff of changes is:
diff --git a/configuratorserver.cpp b/configuratorserver.cpp
index 54606ca..749d9b4 100644
--- a/configuratorserver.cpp
+++ b/configuratorserver.cpp
@@ -44,9 +44,9 @@ void ConfiguratorServer::apply()
 
     profile->set_proxy(cbProxy->isChecked());
     if(rbProxySSH->isChecked())
-        profile->set_proxyType(Profile::SSH);
+        profile->set_proxyType(SshConnection::PROXYSSH);
     else
-        profile->set_proxyType(Profile::HTTP);
+        profile->set_proxyType(SshConnection::PROXYHTTP);
     profile->set_proxyHost(leProxyHost->text());
     profile->set_proxyPort(sbProxyPort->value());
     profile->set_proxySameLogin(cbSameLogin->isChecked());
@@ -86,8 +86,8 @@ void ConfiguratorServer::init()
     leKey->setText(profile->get_key());
     cbAutoLogin->setChecked(profile->get_autoLogin());
     cbProxy->setChecked(profile->get_proxy());
-    rbProxySSH->setChecked(profile->get_proxyType()!=Profile::HTTP);
-    rbProxyHTTP->setChecked(profile->get_proxyType()==Profile::HTTP);
+    rbProxySSH->setChecked(profile->get_proxyType()!=SshConnection::PROXYHTTP);
+    rbProxyHTTP->setChecked(profile->get_proxyType()==SshConnection::PROXYHTTP);
     leProxyHost->setText(profile->get_proxyHost());
     sbProxyPort->setValue(profile->get_proxyPort());
     cbSameLogin->setChecked(profile->get_proxySameLogin());
diff --git a/profile.cpp b/profile.cpp
index 0ea82ec..36a02de 100644
--- a/profile.cpp
+++ b/profile.cpp
@@ -26,6 +26,8 @@
 #include "x2goclientconfig.h"
 #include "x2goclientconfigdetail.h"
 #include "x2gosettings.h"
+#include "x2gosession.h"
+#include "x2gobroker.h"
 #include <QDebug>
 #include <QPushButton>
 #include <QScrollBar>
@@ -49,6 +51,7 @@ Profile::Profile(QString id, QWidget* parent, Qt::WindowFlags f): QFrame(parent,
     startDragPoint=-1;
     f2SettingsConnector=0;
     setFixedWidth(PROFILE_HEIGHT);
+    session=new X2GoSession(this);
 
     connect(X2GoApplication::instance()->get_profileForm(), SIGNAL(signalViewPortResized()), this, SLOT(slotUpdateProfileWidget()));
     connect(X2GoApplication::instance()->get_profileForm(), SIGNAL(signalProfilesScrolled()), this, SLOT(slotUpdateProfileWidget()));
@@ -58,12 +61,13 @@ Profile::Profile(QString id, QWidget* parent, Qt::WindowFlags f): QFrame(parent,
     connect(this, SIGNAL(signalDragFinished()), X2GoApplication::instance()->get_workArea(), SLOT(slotScrollToNearestForm()));
     connect(this, SIGNAL(signalSelected(Profile*)), X2GoApplication::instance(), SIGNAL(signalProfilesSelectionChanged(Profile*)));
     connect(X2GoApplication::instance(), SIGNAL(signalProfilesSelectionChanged(Profile*)),this, SLOT(slotProfileSelected(Profile*)));
+    connect(session, SIGNAL(signalStatusChanged(X2GoSession::SessionStatus)), this, SLOT(slotSessionStatusChanged(X2GoSession::SessionStatus)));
 }
 
 
 Profile::~Profile()
 {
-
+    delete session;
 }
 
 void Profile::setDefaultValues()
@@ -106,6 +110,7 @@ void Profile::setDefaultValues()
     exportFSTunnel=true;
     encodeFS=false;
     remoteFSEncoding="UTF-8";
+    brokerSelectSessionRequestId=-1;
 #ifdef Q_OS_WIN
     localFSEncoding=tr ( "WINDOWS-1252" );
 #endif
@@ -117,6 +122,39 @@ void Profile::setDefaultValues()
 #endif
 }
 
+
+void Profile::slotSessionStatusChanged(X2GoSession::SessionStatus status)
+{
+    switch(status)
+    {
+    case X2GoSession::NOTRUNNING:
+        lSessionStatus->setText(tr("not running"));
+        break;
+    case X2GoSession::STARTING:
+        lSessionStatus->setText(tr("starting"));
+        break;
+    case X2GoSession::RESUMING:
+        lSessionStatus->setText(tr("resuming"));
+        break;
+    case X2GoSession::TERMINATING:
+        lSessionStatus->setText(tr("terminating"));
+        break;
+    case X2GoSession::SUSPENDING:
+        lSessionStatus->setText(tr("susepnding"));
+        break;
+    case X2GoSession::RUNNING:
+        lSessionStatus->setText(tr("running"));
+        break;
+    }
+}
+
+
+void Profile::slotBrokerProfileSelectRequestFinished(bool success, QString answer, int pid)
+{
+    X2GoApplication::instance()->get_broker()->profileSelected(success, answer, pid, this);
+}
+
+
 int Profile::getProfileIndex()
 {
     QList<Profile*>* profiles=X2GoApplication::instance()->getProfiles();
@@ -213,12 +251,46 @@ void Profile::initWidget()
     lProfileShort->setStyleSheet("border-image: url(:svg/transparent.svg); \
                             border-top: 0px transparent; border-bottom: 0px transparent; \
                              border-right: 0px transparent; border-left: 0px transparent");
-    connect(pbSettings, SIGNAL(clicked(bool)), this, SLOT(slotSelectProfile()));
-    connect(pbSettings, SIGNAL(clicked(bool)), X2GoApplication::instance()->get_workArea(), SLOT(slotScrollToProfileSettingsForm()));
+
+    connect(pbSettings, SIGNAL(clicked(bool)), this, SLOT(slotConfigProfile()));
+    connect(pbStart, SIGNAL(clicked(bool)), this, SLOT(slotStartSession()));
+    connect(pbTerminate, SIGNAL(clicked(bool)), this, SLOT(slotTerminateSession()));
+    connect(pbSuspend, SIGNAL(clicked(bool)), this, SLOT(slotSuspendSession()));
+
     pbSettings->setDisabled(X2GoApplication::instance()->get_clientConfig()->get_disallowSessionEdit().get_value().toBool());
+    pbSuspend->setEnabled(false);
+    pbTerminate->setEnabled(false);
     updateProfileDetails();
 }
 
+void Profile::slotConfigProfile()
+{
+    slotSelectProfile();
+    X2GoApplication::instance()->get_workArea()->slotScrollToProfileSettingsForm();
+}
+
+void Profile::slotStartSession()
+{
+    session->slotStartSession();
+    slotSwitchToSession();
+}
+
+void Profile::slotSuspendSession()
+{
+    slotSwitchToSession();
+}
+
+void Profile::slotTerminateSession()
+{
+    slotSwitchToSession();
+}
+
+void Profile::slotSwitchToSession()
+{
+    slotSelectProfile();
+    X2GoApplication::instance()->get_workArea()->slotScrollToSessionForm();
+}
+
 void Profile::updateProfileDetails()
 {
     QFontMetrics fm(lSessionInfo->font());
@@ -422,9 +494,9 @@ void Profile::loadProfile()
     LOAD_VALUE(String, remoteFSEncoding, "iconvto");
     settings->endGroup();
     if(confProxyType=="SSH")
-        proxyType=SSH;
+        proxyType=SshConnection::PROXYSSH;
     else
-        proxyType=HTTP;
+        proxyType=SshConnection::PROXYHTTP;
 }
 
 void Profile::saveProfile()
@@ -433,7 +505,7 @@ void Profile::saveProfile()
     settings->beginGroup(profileId);
 
     QString confProxyType="SSH";
-    if(proxyType==HTTP)
+    if(proxyType==SshConnection::PROXYHTTP)
         confProxyType="HTTP";
 
     QByteArray ba;
diff --git a/profile.h b/profile.h
index 3d9b610..ca02fae 100644
--- a/profile.h
+++ b/profile.h
@@ -1,5 +1,5 @@
 /**************************************************************************
-*   Copyright (C) 2005-2012 by Oleksandr Shneyder                         *
+*   Copyright (C) 2005-2013 by Oleksandr Shneyder                         *
 *   o.shneyder at phoca-gmbh.de                                              *
 *                                                                         *
 *   This program is free software; you can redistribute it and/or modify  *
@@ -23,16 +23,18 @@
 
 #include <QFrame>
 #include "x2goapplication.h"
+#include "sshconnection.h"
 #include <QPixmap>
 #include "ui_profile.h"
+#include "x2gosession.h"
 #define PROFILE_HEIGHT 90
 
 class Profile : public QFrame, public Ui_Profile
 {
     Q_OBJECT
 public:
-    enum ProxyType {SSH, HTTP};
     enum SpeedType {MODEM, ISDN, ADSL, WAN, LAN};
+    X2GO_PROPERTY(int, brokerSelectSessionRequestId)
 
     X2GO_PROPERTY(QString, profileName)
     X2GO_PROPERTY(QString, profileId)
@@ -44,7 +46,7 @@ public:
     X2GO_PROPERTY(QString, key)
     X2GO_PROPERTY(bool, autoLogin)
     X2GO_PROPERTY(bool, proxy)
-    X2GO_PROPERTY(ProxyType, proxyType)
+    X2GO_PROPERTY(SshConnection::ProxyType, proxyType)
     X2GO_PROPERTY(QString, proxyHost)
     X2GO_PROPERTY(int, proxyPort)
     X2GO_PROPERTY(QString, proxyLogin)
@@ -93,6 +95,9 @@ public:
     X2GO_PROPERTY(bool, encodeFS)
     X2GO_PROPERTY(QString, localFSEncoding)
     X2GO_PROPERTY(QString, remoteFSEncoding)
+
+    X2GO_RO_PROPERTY(X2GoSession*, session)
+
 public:
     Profile(QString id, QWidget* parent = 0, Qt::WindowFlags f = 0);
     virtual ~Profile();
@@ -104,6 +109,13 @@ public slots:
     void slotUpdateProfileWidget();
     void slotProfileSelected(Profile* profile);
     void slotSelectProfile();
+    void slotConfigProfile();
+    void slotSwitchToSession();
+    void slotStartSession();
+    void slotTerminateSession();
+    void slotSuspendSession();
+    void slotBrokerProfileSelectRequestFinished(bool success, QString answer, int pid);
+
 private:
     bool inited;
     bool selected;
@@ -115,6 +127,10 @@ private:
     void setupRegularWidget();
     void setupSelectedWidget();
     void setDefaultValues();
+
+private slots:
+    void slotSessionStatusChanged(X2GoSession::SessionStatus status);
+
 protected:
     virtual void  mouseMoveEvent ( QMouseEvent * event );
     virtual void  mousePressEvent ( QMouseEvent * event );
diff --git a/sessionform.cpp b/sessionform.cpp
index 3db5c57..9194f60 100644
--- a/sessionform.cpp
+++ b/sessionform.cpp
@@ -68,4 +68,5 @@ SessionForm::~SessionForm()
 void SessionForm::updateProfile()
 {
     profileName->setText(profile->get_profileName());
+    statusFrame->setSession(profile->get_session());
 }
diff --git a/sessionstatusframe.cpp b/sessionstatusframe.cpp
index 6ad9691..8a3a794 100644
--- a/sessionstatusframe.cpp
+++ b/sessionstatusframe.cpp
@@ -23,11 +23,14 @@
 #include "sessionstatusframestatus.h"
 #include "sessionstatusframeapplications.h"
 
+#include "x2gosession.h"
 
 SessionStatusFrame::SessionStatusFrame(QWidget* parent, Qt::WindowFlags f): QFrame(parent, f)
 {
     setupUi(this);
 
+    session=0;
+
     frStatus=new SessionStatusFrameStatus(this);
     frApps=new SessionStatusFrameApplications(this);
     ((QVBoxLayout*)layout())->addWidget(frStatus);
@@ -57,3 +60,25 @@ void SessionStatusFrame::setFrame(QPushButton* button)
     frStatus->setVisible(pbStatus->isChecked());
     frApps->setVisible(pbApps->isChecked());
 }
+
+
+void SessionStatusFrame::setSession(X2GoSession* session)
+{
+    if(this->session)
+        disconnect(this->session, SIGNAL(signalStatusChanged(X2GoSession::SessionStatus)),
+                   this, SLOT(slotSessionStatusChanged(X2GoSession::SessionStatus)));
+    this->session=session;
+    connect(session, SIGNAL(signalStatusChanged(X2GoSession::SessionStatus)),
+            this, SLOT(slotSessionStatusChanged(X2GoSession::SessionStatus)));
+    frApps->setSession(session);
+    frStatus->setSession(session);
+    slotSessionStatusChanged(session->get_status());
+}
+
+void SessionStatusFrame::slotSessionStatusChanged(X2GoSession::SessionStatus status)
+{
+    pbStatus->setChecked(true);
+    setFrame(pbStatus);
+    pbApps->setVisible(status== X2GoSession::RUNNING);
+    pbFolders->setVisible(status== X2GoSession::RUNNING);
+}
diff --git a/sessionstatusframe.h b/sessionstatusframe.h
index 39f9be9..9845544 100644
--- a/sessionstatusframe.h
+++ b/sessionstatusframe.h
@@ -21,6 +21,8 @@
 #ifndef SESSIONSTATUSFRAME_H
 #define SESSIONSTATUSFRAME_H
 
+#include "x2goapplication.h"
+#include "x2gosession.h"
 #include <QFrame>
 #include "ui_sessionstatusframe.h"
 
@@ -30,11 +32,14 @@ class SessionStatusFrameApplications;
 class SessionStatusFrame : public QFrame, public Ui_SessionStatusFrame
 {
     Q_OBJECT
+    X2GO_RO_PROPERTY(X2GoSession*, session)
 public:
     explicit SessionStatusFrame(QWidget* parent = 0, Qt::WindowFlags f = 0);
     virtual ~SessionStatusFrame();
+    void setSession(X2GoSession* session);
 private slots:
     void slotSetTabFrames();
+    void slotSessionStatusChanged(X2GoSession::SessionStatus status);
 private:
     void setFrame(QPushButton* button);
 private:
diff --git a/sessionstatusframeapplications.cpp b/sessionstatusframeapplications.cpp
index 249bbcc..f6a827e 100644
--- a/sessionstatusframeapplications.cpp
+++ b/sessionstatusframeapplications.cpp
@@ -23,6 +23,7 @@
 
 SessionStatusFrameApplications::SessionStatusFrameApplications(QWidget* parent, Qt::WindowFlags f): QFrame(parent, f)
 {
+    session=0;
     setupUi(this);
 }
 
@@ -30,3 +31,8 @@ SessionStatusFrameApplications::~SessionStatusFrameApplications()
 {
 
 }
+
+void SessionStatusFrameApplications::setSession(X2GoSession* session)
+{
+    this->session=session;
+}
diff --git a/sessionstatusframeapplications.h b/sessionstatusframeapplications.h
index 4fc8567..58d6a8f 100644
--- a/sessionstatusframeapplications.h
+++ b/sessionstatusframeapplications.h
@@ -22,15 +22,20 @@
 #ifndef SESSIONSTATUSFRAMEAPPLICATIONS_H
 #define SESSIONSTATUSFRAMEAPPLICATIONS_H
 
+
 #include <QFrame>
 #include "ui_sessionstatusframeapplications.h"
 
+class X2GoSession;
 class SessionStatusFrameApplications : public QFrame, public Ui_SessionStatusFrameApplications
 {
     Q_OBJECT
 public:
     explicit SessionStatusFrameApplications(QWidget* parent = 0, Qt::WindowFlags f = 0);
     virtual ~SessionStatusFrameApplications();
+    void setSession(X2GoSession* session);
+private:
+    X2GoSession* session;
 };
 
 #endif // SESSIONSTATUSFRAMEAPPLICATIONS_H
diff --git a/sessionstatusframestatus.cpp b/sessionstatusframestatus.cpp
index 66926c9..9178742 100644
--- a/sessionstatusframestatus.cpp
+++ b/sessionstatusframestatus.cpp
@@ -23,38 +23,15 @@
 #include <QScrollBar>
 #include "x2goapplication.h"
 #include "workarea.h"
+#include "x2gosession.h"
+#include "profile.h"
 
 SessionStatusFrameStatus::SessionStatusFrameStatus(QWidget* parent, Qt::WindowFlags f): QFrame(parent, f)
 {
+    session=0;
     setupUi(this);
     teAdvancedStatus->hide();
 
-    teAdvancedStatus->append("yxcyxjcbnmsdbamfnbsdmnfbmnsad\nardjgjhasdgjhasdg\nasdhaskjdhjkasd");
-    teAdvancedStatus->append("yxcyxjcbnmsdbamfnbsdmnfbmnsad\nardjgjhasdgjhasdg\nasdhaskjdhjkasd");
-    teAdvancedStatus->append("yxcyxjcbnmsdbamfnbsdmnfbmnsad\nardjgjhasdgjhasdg\nasdhaskjdhjkasd");
-    teAdvancedStatus->append("yxcyxjcbnmsdbamfnbsdmnfbmnsad\nardjgjhasdgjhasdg\nasdhaskjdhjkasd");
-    teAdvancedStatus->append("yxcyxjcbnmsdbamfnbsdmnfbmnsad\nardjgjhasdgjhasdg\nasdhaskjdhjkasd");
-    teAdvancedStatus->append("yxcyxjcbnmsdbamfnbsdmnfbmnsad\nardjgjhasdgjhasdg\nasdhaskjdhjkasd");
-    teAdvancedStatus->append("yxcyxjcbnmsdbamfnbsdmnfbmnsad\nardjgjhasdgjhasdg\nasdhaskjdhjkasd");
-    teAdvancedStatus->append("yxcyxjcbnmsdbamfnbsdmnfbmnsad\nardjgjhasdgjhasdg\nasdhaskjdhjkasd");
-    teAdvancedStatus->append("yxcyxjcbnmsdbamfnbsdmnfbmnsad\nardjgjhasdgjhasdg\nasdhaskjdhjkasd");
-    teAdvancedStatus->append("yxcyxjcbnmsdbamfnbsdmnfbmnsad\nardjgjhasdgjhasdg\nasdhaskjdhjkasd");
-    teAdvancedStatus->append("yxcyxjcbnmsdbamfnbsdmnfbmnsad\nardjgjhasdgjhasdg\nasdhaskjdhjkasd");
-    teAdvancedStatus->append("yxcyxjcbnmsdbamfnbsdmnfbmnsad\nardjgjhasdgjhasdg\nasdhaskjdhjkasd");
-    teAdvancedStatus->append("yxcyxjcbnmsdbamfnbsdmnfbmnsad\nardjgjhasdgjhasdg\nasdhaskjdhjkasd");
-    teAdvancedStatus->append("yxcyxjcbnmsdbamfnbsdmnfbmnsad\nardjgjhasdgjhasdg\nasdhaskjdhjkasd");
-    teAdvancedStatus->append("yxcyxjcbnmsdbamfnbsdmnfbmnsad\nardjgjhasdgjhasdg\nasdhaskjdhjkasd");
-    teAdvancedStatus->append("yxcyxjcbnmsdbamfnbsdmnfbmnsad\nardjgjhasdgjhasdg\nasdhaskjdhjkasd");
-    teAdvancedStatus->append("yxcyxjcbnmsdbamfnbsdmnfbmnsad\nardjgjhasdgjhasdg\nasdhaskjdhjkasd");
-    teAdvancedStatus->append("yxcyxjcbnmsdbamfnbsdmnfbmnsad\nardjgjhasdgjhasdg\nasdhaskjdhjkasd");
-    teAdvancedStatus->append("yxcyxjcbnmsdbamfnbsdmnfbmnsad\nardjgjhasdgjhasdg\nasdhaskjdhjkasd");
-    teAdvancedStatus->append("yxcyxjcbnmsdbamfnbsdmnfbmnsad\nardjgjhasdgjhasdg\nasdhaskjdhjkasd");
-    teAdvancedStatus->append("yxcyxjcbnmsdbamfnbsdmnfbmnsad\nardjgjhasdgjhasdg\nasdhaskjdhjkasd");
-    teAdvancedStatus->append("yxcyxjcbnmsdbamfnbsdmnfbmnsad\nardjgjhasdgjhasdg\nasdhaskjdhjkasd");
-    teAdvancedStatus->append("yxcyxjcbnmsdbamfnbsdmnfbmnsad\nardjgjhasdgjhasdg\nasdhaskjdhjkasd");
-    teAdvancedStatus->append("yxcyxjcbnmsdbamfnbsdmnfbmnsad\nardjgjhasdgjhasdg\nasdhaskjdhjkasd");
-    teAdvancedStatus->append("yxcyxjcbnmsdbamfnbsdmnfbmnsad\nardjgjhasdgjhasdg\nasdhaskjdhjkasd");
-
     teAdvancedStatus->verticalScrollBar()->setStyleSheet(
         "background-color:transparent;border-top:0px;border-left:0px;border-right:0px;border-bottom:0px");
     connect(cbDetails, SIGNAL(clicked()), this, SLOT(SlotDetailCliecked()));
@@ -76,3 +53,45 @@ void SessionStatusFrameStatus::checkWorkAreaScrolling()
     X2GoApplication::instance()->get_workArea()->set_animateNextScroll(false);
     X2GoApplication::instance()->get_workArea()->slotScrollToSessionForm();
 }
+
+void SessionStatusFrameStatus::setSession(X2GoSession* session)
+{
+    if(this->session)
+        disconnect(this->session, SIGNAL(signalStatusChanged(X2GoSession::SessionStatus)),
+                   this, SLOT(slotSessionStatusChanged(X2GoSession::SessionStatus)));
+    this->session=session;
+    connect(session, SIGNAL(signalStatusChanged(X2GoSession::SessionStatus)), this,
+            SLOT(slotSessionStatusChanged(X2GoSession::SessionStatus)));
+    this->session=session;
+    slotSessionStatusChanged(session->get_status());
+    lServer->setText(session->get_profile()->get_server());
+    lLogin->setText(session->get_profile()->get_user());
+    lSID->setText(QString::null);
+    lDisplay->setText(QString::null);
+    lCrTime->setText(QString::null);
+}
+
+void SessionStatusFrameStatus::slotSessionStatusChanged(X2GoSession::SessionStatus status)
+{
+    switch(status)
+    {
+    case X2GoSession::NOTRUNNING:
+        lStatus->setText(tr("not running"));
+        break;
+    case X2GoSession::STARTING:
+        lStatus->setText(tr("starting"));
+        break;
+    case X2GoSession::RESUMING:
+        lStatus->setText(tr("resuming"));
+        break;
+    case X2GoSession::TERMINATING:
+        lStatus->setText(tr("terminating"));
+        break;
+    case X2GoSession::SUSPENDING:
+        lStatus->setText(tr("susepnding"));
+        break;
+    case X2GoSession::RUNNING:
+        lStatus->setText(tr("running"));
+        break;
+    }
+}
diff --git a/sessionstatusframestatus.h b/sessionstatusframestatus.h
index 0a1d17c..35bbb11 100644
--- a/sessionstatusframestatus.h
+++ b/sessionstatusframestatus.h
@@ -23,6 +23,7 @@
 
 #include <QFrame>
 #include "ui_sessionstatusframestatus.h"
+#include "x2gosession.h"
 
 class SessionStatusFrameStatus : public QFrame, public Ui_SessionStatusFrameStatus
 {
@@ -31,8 +32,13 @@ public:
     explicit SessionStatusFrameStatus(QWidget* parent = 0, Qt::WindowFlags f = 0);
     virtual ~SessionStatusFrameStatus();
     void checkWorkAreaScrolling();
+    void setSession(X2GoSession* session);
+public slots:
+    void slotSessionStatusChanged(X2GoSession::SessionStatus status);
 private slots:
     void SlotDetailCliecked();
+private:
+    X2GoSession* session;
 };
 
 #endif // SESSIONSTATUSFRAMESTATUS_H
diff --git a/sshconnection.cpp b/sshconnection.cpp
index 29f22cf..899faea 100644
--- a/sshconnection.cpp
+++ b/sshconnection.cpp
@@ -90,10 +90,12 @@ SshConnection::SshConnection(QObject* parent, QString host, int port, bool accep
     reverseTunnel=false;
     kerberos=krbLogin;
     kerberos=false;
+
     if(!guiInteractor)
     {
         guiInteractor=new SshConnectionGuiInteraction(parent);
     }
+    connect(guiInteractor, SIGNAL(signalInteraction(SshConnection*)), this, SLOT(slotSignalInteractionRecived(SshConnection*)));
 }
 
 //private constructor for reverse tunnel connections
@@ -165,17 +167,25 @@ SshConnection::~SshConnection()
     qDebug()<<"ssh connection destructor";
 }
 
+void SshConnection::slotSignalInteractionRecived(SshConnection* requester)
+{
+    if(requester==this)
+        emit signalInteraction();
+}
+
+
 void SshConnection::run()
 {
     disconnectSessionFlag=false;
 #warning implement ssh proxy code
     if ( !isLibSshInited )
     {
+        qDebug()<<"initing libssh"<<endl;
         if ( ssh_init() !=0 )
         {
             QString err=tr ( "Can not initialize libssh" );
             qDebug()<<err<<endl;
-            guiInteractor->critical(err, MessageBox::OK);
+            guiInteractor->critical(this, err, MessageBox::OK);
             emit signalError ( (int)CONNECTION, err );
             return;
         }
@@ -195,7 +205,7 @@ void SshConnection::run()
     {
         QString err=tr ( "Can not create ssh session" );
         qDebug()<<err<<endl;
-        guiInteractor->critical(err, MessageBox::OK);
+        guiInteractor->critical(this, "<b>"+user+"@"+host+"</b><br><br>"+err, MessageBox::OK);
         emit signalError ( (int)CONNECTION, err);
         if ( reverseTunnel )
             emit signalIoError ( reverseTunnelCreator, err, "" );
@@ -221,9 +231,9 @@ void SshConnection::run()
         proxysocket = tcpProxySocket->socketDescriptor();
         if (!tcpProxySocket->waitForConnected(30000))
         {
-            QString message=tr ( "Can not connect to proxy server" );
+            QString message=tr ( "Can not connect to proxy server" )+"("+proxyServer+":"+proxyPort+")";
             qDebug()<<message<<endl;
-            guiInteractor->critical(message, MessageBox::OK);
+            guiInteractor->critical(this, "<b>"+user+"@"+host+"</b><br><br>"+message, MessageBox::OK);
             emit signalError ( (int)CONNECTION, message );
             ssh_free ( my_ssh_session );
             my_ssh_session=0;
@@ -239,7 +249,7 @@ void SshConnection::run()
         QString message=tr ( "Can not connect to " ) +host+":"+QString::number ( port );
         message+=" - "+err;
         qDebug()<<message;
-        guiInteractor->critical(message, MessageBox::OK);
+        guiInteractor->critical(this, message, MessageBox::OK);
         emit signalError ((int)CONNECTION, message);
         if ( reverseTunnel )
             emit signalIoError ( reverseTunnelCreator, message, err);
@@ -251,7 +261,7 @@ void SshConnection::run()
     int state=serverAuth ( errMsg );
     if ( state != SSH_SERVER_KNOWN_OK )
     {
-        guiInteractor->critical(errMsg, MessageBox::OK);
+        guiInteractor->critical(this, "<b>"+user+"@"+host+"</b><br><br>"+errMsg, MessageBox::OK);
         emit signalError ((int)SERVERAUTH, errMsg);
         ssh_disconnect ( my_ssh_session );
         ssh_free ( my_ssh_session );
@@ -275,7 +285,7 @@ void SshConnection::run()
         if (!kerberos)
             err=ssh_get_error ( my_ssh_session );
         QString message=tr ( "Authentication failed" );
-        guiInteractor->critical(message, MessageBox::OK);
+        guiInteractor->critical(this, "<b>"+user+"@"+host+"</b><br><br>"+message, MessageBox::OK);
         message+=" - "+err+"\n"+authErrors.join ( "\n" );
         qDebug()<<message;
         emit signalError ((int)USERAUTH,  message );
@@ -305,7 +315,7 @@ void SshConnection::run()
             QString message=tr ( "channel_forward_listen failed" );
             message+=" - "+err;
             qDebug()<<message;
-            guiInteractor->critical(message, MessageBox::OK);
+            guiInteractor->critical(this, "<b>"+user+"@"+host+"</b><br><br>"+message, MessageBox::OK);
             emit signalIoError ( reverseTunnelCreator, message, err );
             ssh_disconnect ( my_ssh_session );
             ssh_free ( my_ssh_session );
@@ -400,7 +410,7 @@ int SshConnection::serverAuth(QString& errorMsg)
             errorMsg= tr ( "The server is unknown: ")+ host+":"+QString::number(port)+"\n"+
                       tr("Do you trust the host key?\nPublic key hash: " )+ " - "+hexa;
             free ( hexa );
-            if(guiInteractor->warning(errorMsg, MessageBox::YES| MessageBox::NO) != MessageBox::YES)
+            if(guiInteractor->warning(this, errorMsg, MessageBox::YES| MessageBox::NO) != MessageBox::YES)
             {
                 errorMsg=tr ( "Host key verification failed" );
                 break;
@@ -420,8 +430,12 @@ int SshConnection::serverAuth(QString& errorMsg)
 bool SshConnection::userAuth()
 {
     if(user.length()<=0)
-        if  (guiInteractor->input(tr("Enter user name"),tr("User:"),user,QLineEdit::Password)!=MessageBox::OK)
+    {
+        if  (guiInteractor->input(this, tr("Enter user name for connection to ")+"<b>"+host+"</b>",tr("User:"),
+                                  user,QLineEdit::Password)!=MessageBox::OK)
             return false;
+        ssh_options_set ( my_ssh_session, SSH_OPTIONS_USER, user.toAscii() );
+    }
     if ( autoLogin )
         if ( userAuthAuto() )
             return true;
@@ -438,7 +452,8 @@ bool SshConnection::userAuthAuto()
     int rc = ssh_userauth_autopubkey ( my_ssh_session, "" );
     while(rc != SSH_AUTH_SUCCESS)
     {
-        if(guiInteractor->input(tr("Enter passphrase to decrypt a key"),tr("Passphrase:"), keyPhrase,QLineEdit::Password)!=MessageBox::OK)
+        if(guiInteractor->input(this, tr("Enter passphrase to decrypt a key for ")+"<b>"+user+"@"+host+"</b>",tr("Passphrase:"),
+                                keyPhrase,QLineEdit::Password)!=MessageBox::OK)
             return false;
         rc = ssh_userauth_autopubkey ( my_ssh_session, keyPhrase.toAscii() );
     }
@@ -472,7 +487,8 @@ bool SshConnection::userAuthWithKey()
     ssh_private_key prkey=privatekey_from_file(my_ssh_session, keyName.toAscii(), 0,"");
     while(!prkey)
     {
-        if(guiInteractor->input(tr("Enter passphrase to decrypt a key"),tr("Passphrase:"), keyPhrase, QLineEdit::Password)!=MessageBox::OK)
+        if(guiInteractor->input(this, tr("Enter passphrase to decrypt a key for ")+"<b>"+user+"@"+host+"</b>",
+                                tr("Passphrase:"), keyPhrase, QLineEdit::Password)!=MessageBox::OK)
             break;
         prkey=privatekey_from_file(my_ssh_session, keyName.toAscii(), 0,keyPhrase.toAscii());
     }
@@ -516,13 +532,15 @@ bool SshConnection::userAuthWithKey()
 bool SshConnection::userAuthWithPass()
 {
     if(pass.length()<=0)
-        if(guiInteractor->input(tr("Enter password"),tr("Password:"), pass, QLineEdit::Password)!=MessageBox::OK)
+        if(guiInteractor->input(this, tr("Enter password for ")+"<b>"+user+"@"+host+"</b>",tr("Password:"),
+                                pass, QLineEdit::Password)!=MessageBox::OK)
             return false;
 
     int rc = ssh_userauth_password ( my_ssh_session, NULL, pass.toAscii() );
     while ( rc != SSH_AUTH_SUCCESS )
     {
-        if(guiInteractor->input(tr("Enter password"),tr("Password:"), pass, QLineEdit::Password)!=MessageBox::OK)
+        if(guiInteractor->input(this, tr("Enter password for ")+"<b>"+user+"@"+host+"</b>",tr("Password:"),
+                                pass, QLineEdit::Password)!=MessageBox::OK)
         {
 
             QString err=ssh_get_error ( my_ssh_session );
diff --git a/sshconnection.h b/sshconnection.h
index 81171ab..80e16ca 100644
--- a/sshconnection.h
+++ b/sshconnection.h
@@ -145,6 +145,8 @@ private:
     void copy();
 protected:
     void run();
+private slots:
+    void slotSignalInteractionRecived(SshConnection* requester);
 signals:
     void signalError(int, QString);
     void signalIoError(SshProcess* caller, QString error, QString lastSessionError);
@@ -157,6 +159,7 @@ signals:
 
     void signalConnectionOk( QString host);
     void signalReverseListenOk(SshProcess* creator);
+    void signalInteraction();
 };
 
 #endif // SSHCONNECTION_H
diff --git a/sshconnectionguiinteraction.cpp b/sshconnectionguiinteraction.cpp
index d70d166..3c061f8 100644
--- a/sshconnectionguiinteraction.cpp
+++ b/sshconnectionguiinteraction.cpp
@@ -34,41 +34,42 @@ SshConnectionGuiInteraction::~SshConnectionGuiInteraction()
 
 }
 
-MessageBox::Buttons SshConnectionGuiInteraction::critical(QString text, int buttons)
+MessageBox::Buttons SshConnectionGuiInteraction::critical(SshConnection* requester, QString text, int buttons)
 {
-    unsigned long int id=addRequest(CRITICAL, text, buttons);
+    unsigned long int id=addRequest(requester, CRITICAL, text, buttons);
     QString input;
     return result(id, input);
 }
 
-MessageBox::Buttons SshConnectionGuiInteraction::information(QString text, int buttons)
+MessageBox::Buttons SshConnectionGuiInteraction::information(SshConnection* requester, QString text, int buttons)
 {
-    unsigned long int id=addRequest(INFORMATION, text, buttons);
+    unsigned long int id=addRequest(requester, INFORMATION, text, buttons);
     QString input;
     return result(id, input);
 }
 
-MessageBox::Buttons SshConnectionGuiInteraction::warning(QString text, int buttons)
+MessageBox::Buttons SshConnectionGuiInteraction::warning(SshConnection* requester, QString text, int buttons)
 {
-    unsigned long int id=  addRequest(WARNING, text, buttons);
+    unsigned long int id=  addRequest(requester, WARNING, text, buttons);
     QString input;
     return result(id, input);
 }
 
 
-MessageBox::Buttons SshConnectionGuiInteraction::input(QString text, QString inputLabel, QString& input,
+MessageBox::Buttons SshConnectionGuiInteraction::input(SshConnection* requester, QString text, QString inputLabel, QString& input,
         QLineEdit::EchoMode echoMode, QString pixPath)
 {
-    unsigned long int id= addRequest(INPUT, text, MessageBox::OK| MessageBox::CANCEL, inputLabel, input, echoMode, pixPath);
+    unsigned long int id= addRequest(requester, INPUT, text, MessageBox::OK| MessageBox::CANCEL, inputLabel, input, echoMode, pixPath);
     return result(id, input);
 }
 
-long unsigned int SshConnectionGuiInteraction::addRequest(SshConnectionGuiInteraction::BoxType type,
+long unsigned int SshConnectionGuiInteraction::addRequest(SshConnection* requester, SshConnectionGuiInteraction::BoxType type,
         QString text, int buttons, QString inputLabel,
         QString input, QLineEdit::EchoMode echoMode,
         QString pixPath)
 {
     InteractionRequest req;
+    req.requester=requester;
     req.processed=false;
     req.boxType=type;
     req.text=text;
@@ -122,6 +123,7 @@ void SshConnectionGuiInteraction::slotCheckRequests()
     QLineEdit::EchoMode echoMode;
     QString pixPath;
     unsigned long int id;
+    SshConnection* requester;
     mutex.lock();
     foreach (InteractionRequest req, requests)
     {
@@ -134,11 +136,13 @@ void SshConnectionGuiInteraction::slotCheckRequests()
         echoMode=req.echoMode;
         pixPath=req.pixPath;
         id=req.id;
+	requester=req.requester;
         break;
     }
     mutex.unlock();
     if(haveReq)
     {
+        emit signalInteraction(requester);
         switch(boxType)
         {
         case INFORMATION:
diff --git a/sshconnectionguiinteraction.h b/sshconnectionguiinteraction.h
index df462c9..3d14052 100644
--- a/sshconnectionguiinteraction.h
+++ b/sshconnectionguiinteraction.h
@@ -29,16 +29,17 @@ GUI thread and can not use GUI elements
 #include <QTimer>
 #include <QThread>
 
+class SshConnection;
 class SshConnectionGuiInteraction: public QThread
 {
     Q_OBJECT
 public:
     explicit SshConnectionGuiInteraction(QObject* parent = 0);
     virtual ~SshConnectionGuiInteraction();
-    MessageBox::Buttons critical(QString text, int buttons);
-    MessageBox::Buttons warning(QString text, int buttons);
-    MessageBox::Buttons information(QString text, int buttons);
-    MessageBox::Buttons input(QString text, QString inputLabel, QString& input,
+    MessageBox::Buttons critical(SshConnection* requester, QString text, int buttons);
+    MessageBox::Buttons warning(SshConnection* requester, QString text, int buttons);
+    MessageBox::Buttons information(SshConnection* requester, QString text, int buttons);
+    MessageBox::Buttons input(SshConnection* requester, QString text, QString inputLabel, QString& input,
                               QLineEdit::EchoMode echoMode=QLineEdit::Normal, QString pixPath=QString::null);
 private:
     enum BoxType {WARNING, CRITICAL, INFORMATION, INPUT};
@@ -50,6 +51,7 @@ private:
         QString text;
         QString inputLabel;
         QString input;
+        SshConnection* requester;
         QLineEdit::EchoMode echoMode;
         QString pixPath;
         unsigned long int id;
@@ -62,7 +64,7 @@ private:
     unsigned long int currentId;
     QMutex mutex;
 private:
-    unsigned long int addRequest(BoxType type, QString text, int buttons, QString inputLabel=QString::null,
+    unsigned long int addRequest(SshConnection* requester, BoxType type, QString text, int buttons, QString inputLabel=QString::null,
                                  QString input=QString::null,
                                  QLineEdit::EchoMode echoMode=QLineEdit::Normal,
                                  QString pixPath=QString::null);
@@ -70,6 +72,8 @@ private:
 
 private slots:
     void slotCheckRequests();
+signals:
+    void signalInteraction(SshConnection* requester);
 };
 
 #endif // SSHCONNECTIONGUIINTERACTION_H
diff --git a/x2gobroker.cpp b/x2gobroker.cpp
index 555f8ff..80a1bf7 100644
--- a/x2gobroker.cpp
+++ b/x2gobroker.cpp
@@ -28,6 +28,8 @@
 #include "x2goclientconfig.h"
 #include "messagebox.h"
 #include "sshconnection.h"
+#include "profile.h"
+#include "x2gosession.h"
 
 X2GoBroker::X2GoBroker(QObject* parent): QObject(parent)
 {
@@ -50,7 +52,10 @@ X2GoBroker::X2GoBroker(QObject* parent): QObject(parent)
     }
     if(brokerType==SSH)
     {
-        sshConnection=new SshConnection(this, url.host(), url.port(), cfg->get_autoAddToKnownHosts().get_value().toBool(),
+        int port=22;
+        if(url.port()!=-1)
+            port=url.port();
+        sshConnection=new SshConnection(this, url.host(), port, cfg->get_autoAddToKnownHosts().get_value().toBool(),
                                         user, pass, cfg->get_brokerSSHKey().get_value().toString(),
                                         cfg->get_defaultBrockerAutoLogin().get_value().toBool());
         connect(sshConnection, SIGNAL(signalConnectionOk(QString)), this, SLOT(slotSshConnectionOk()));
@@ -150,6 +155,30 @@ void X2GoBroker::slotGetUserSessions()
     }
 }
 
+void X2GoBroker::selectProfile(Profile* profile)
+{
+    if(brokerType==HTTP)
+    {
+        QString req;
+        QTextStream ( &req ) <<
+                             "task=selectsession&"<<
+                             "sid="<<profile->get_profileId()<<"&"<<
+                             "user="<<user<<"&"<<
+                             "password="<<pass<<"&"<<
+                             "authid="<<authId;
+        httpSessionAnswer.close();
+        httpSessionAnswer.setData ( 0,0 );
+        profile->set_brokerSelectSessionRequestId(http->post ( url.path(),req.toUtf8(),&httpSessionAnswer ));
+    }
+    if(brokerType==SSH)
+    {
+        sshConnection->executeCommand ( url.path() +" --authid "+
+                                        X2GoApplication::instance()->get_clientConfig()->get_authId().get_value().toString()+
+                                        " --task selectsession --sid \\\""+profile->get_profileId()+"\\\"",
+                                        profile, SLOT (slotBrokerProfileSelectRequestFinished(bool, QString, int )));
+    }
+}
+
 void X2GoBroker::slotRequestFinished(int id, bool error)
 {
     if ( error )
@@ -165,10 +194,60 @@ void X2GoBroker::slotRequestFinished(int id, bool error)
     {
         slotListSessions(true, answer,0);
     }
-//     if (id == selSessRequest)
-//     {
-//         slotSelectSession(true,answer,0);
-//     }
+    else
+    {
+        foreach( Profile* pr, *(X2GoApplication::instance()->getProfiles()))
+        {
+            if(pr->get_brokerSelectSessionRequestId()==id)
+            {
+                profileSelected(true, answer,0, pr);
+            }
+            break;
+        }
+    }
+}
+
+void X2GoBroker::profileSelected(bool success, QString answer, int, Profile* profile)
+{
+    if(!success)
+    {
+        MessageBox::critical("<b>"+tr("Error")+"</b><br>"+answer,MessageBox::OK);
+        X2GoApplication::exit(-1);
+    }
+    if(!checkAccess(answer))
+    {
+        getLoginData();
+        slotGetUserSessions();
+        return;
+    }
+    QString sinfo=answer;
+    QStringList lst=sinfo.split("SERVER:",QString::SkipEmptyParts);
+    int keyStartPos=sinfo.indexOf("-----BEGIN DSA PRIVATE KEY-----");
+    if(keyStartPos==-1)
+        keyStartPos=sinfo.indexOf("-----BEGIN RSA PRIVATE KEY-----");
+    QString endStr="-----END DSA PRIVATE KEY-----";
+    int keyEndPos=sinfo.indexOf(endStr);
+    if(keyEndPos==-1)
+    {
+        endStr="-----END RSA PRIVATE KEY-----";
+        keyEndPos=sinfo.indexOf(endStr);
+    }
+    if (! (keyEndPos == -1 || keyStartPos == -1 || lst.size()==0))
+        profile->set_key(sinfo.mid(keyStartPos, keyEndPos+endStr.length()-keyStartPos));;
+    QString serverLine=(lst[1].split("\n"))[0];
+    QStringList words=serverLine.split(":",QString::SkipEmptyParts);
+    profile->set_server(words[0]);
+    if (words.count()>1)
+        profile->set_SSHPort(words[1].toUInt());
+
+#warning read session data for suspended sessions
+    /*    if (sinfo.indexOf("SESSION_INFO")!=-1)
+        {
+            QStringList lst=sinfo.split("SESSION_INFO:",QString::SkipEmptyParts);
+            config->sessiondata=(lst[1].split("\n"))[0];
+            x2goDebug<<"session data: "<<config->sessiondata<<"\n";
+        }*/
+    profile->get_session()->startSession();
 }
 
 void X2GoBroker::slotListSessions(bool success, QString answer, int)
@@ -186,7 +265,6 @@ void X2GoBroker::slotListSessions(bool success, QString answer, int)
     }
     createIniFile(answer);
     emit signalSessionsLoaded();
-
 }
 
 void X2GoBroker::createIniFile(const QString& content)
diff --git a/x2gobroker.h b/x2gobroker.h
index a101f40..c1d3828 100644
--- a/x2gobroker.h
+++ b/x2gobroker.h
@@ -29,6 +29,8 @@
 #include <QTime>
 #include "x2goapplication.h"
 #include "sshconnection.h"
+
+class Profile;
 class QHttp;
 
 class X2GoBroker : public QObject
@@ -39,6 +41,8 @@ class X2GoBroker : public QObject
 public:
     explicit X2GoBroker(QObject* parent = 0);
     virtual ~X2GoBroker();
+    void selectProfile(Profile* profile);
+    void profileSelected( bool success, QString answer, int pid, Profile* profile);
 private:
     enum {SSH,HTTP} brokerType;
     QString user;
diff --git a/x2goclient2.pro b/x2goclient2.pro
index 59167ba..bbd5e5e 100755
--- a/x2goclient2.pro
+++ b/x2goclient2.pro
@@ -64,7 +64,8 @@ SOURCES += main.cpp \
            sessionstatusframe.cpp \
            sessionstatusframestatus.cpp \
            sessionstatusframeapplications.cpp \
-           profile.cpp
+           profile.cpp \
+           x2gosession.cpp
 
 HEADERS += mainwindow.h \
            workarea.h \
@@ -97,7 +98,8 @@ HEADERS += mainwindow.h \
            sessionstatusframe.h \
            sessionstatusframestatus.h \
            sessionstatusframeapplications.h \
-           profile.h
+           profile.h \
+           x2gosession.h
 
 LIBS += -lssh
 
diff --git a/x2gosession.cpp b/x2gosession.cpp
new file mode 100644
index 0000000..6610b49
--- /dev/null
+++ b/x2gosession.cpp
@@ -0,0 +1,81 @@
+/**************************************************************************
+*   Copyright (C) 2005-2013 by Oleksandr Shneyder                         *
+*   o.shneyder at phoca-gmbh.de                                              *
+*                                                                         *
+*   This program is free software; you can redistribute it and/or modify  *
+*   it under the terms of the GNU General Public License as published by  *
+*   the Free Software Foundation; either version 2 of the License, or     *
+*   (at your option) any later version.                                   *
+*                                                                         *
+*   This program is distributed in the hope that it will be useful,       *
+*   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
+*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
+*   GNU General Public License for more details.                          *
+*                                                                         *
+*   You should have received a copy of the GNU General Public License     *
+*   along with this program; if not, write to the                         *
+*   Free Software Foundation, Inc.,                                       *
+*   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
+***************************************************************************/
+
+#include "x2gosession.h"
+#include "profile.h"
+#include "sshconnection.h"
+#include "x2goclientconfig.h"
+#include "messagebox.h"
+#include "workarea.h"
+#include "sessionform.h"
+#include "x2gobroker.h"
+
+X2GoSession::X2GoSession(Profile* profile)
+{
+    this->profile=profile;
+    status=NOTRUNNING;
+    sshConnection=0;
+}
+
+X2GoSession::~X2GoSession()
+{
+
+}
+
+
+void X2GoSession::slotStartSession()
+{
+    status=STARTING;
+    emit signalStatusChanged(status);
+    if(sshConnection)
+        delete sshConnection;
+    if(X2GoApplication::instance()->get_broker())
+        X2GoApplication::instance()->get_broker()->selectProfile(profile);
+    else
+        startSession();
+
+}
+void X2GoSession::startSession()
+{
+    sshConnection=new SshConnection(this, profile->get_server(), profile->get_SSHPort(),
+                                    X2GoApplication::instance()->get_clientConfig()->get_autoAddToKnownHosts().get_value().toBool(),
+                                    profile->get_user(),
+                                    QString::null/*pass*/, profile->get_key(),profile->get_autoLogin(), false /*krblogin*/,
+                                    profile->get_proxy(), profile->get_proxyType(), profile->get_proxyHost(), profile->get_proxyPort(),
+                                    profile->get_proxyLogin(), QString::null/*proxyPassword*/, profile->get_proxyKey(),
+                                    profile->get_proxyAutoLogin());
+
+    connect(sshConnection, SIGNAL(signalConnectionOk(QString)), this, SLOT(slotSshConnectionOk(QString)));
+    connect(sshConnection, SIGNAL(signalError(int,QString)), this, SLOT(slotSshConnectionFailed(int,QString)));
+    sshConnection->start();
+}
+
+
+void X2GoSession::slotSshConnectionFailed(int, QString)
+{
+    status=NOTRUNNING;
+    emit signalStatusChanged(status);
+}
+
+
+void X2GoSession::slotSshConnectionOk(QString)
+{
+
+}
diff --git a/sessionstatusframe.h b/x2gosession.h
similarity index 66%
copy from sessionstatusframe.h
copy to x2gosession.h
index 39f9be9..bc43fdc 100644
--- a/sessionstatusframe.h
+++ b/x2gosession.h
@@ -18,28 +18,34 @@
 *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
 ***************************************************************************/
 
-#ifndef SESSIONSTATUSFRAME_H
-#define SESSIONSTATUSFRAME_H
+#ifndef X2GOSESSION_H
+#define X2GOSESSION_H
 
-#include <QFrame>
-#include "ui_sessionstatusframe.h"
+#include <QObject>
+#include "x2goapplication.h"
+#include "sshconnection.h"
 
-class SessionStatusFrameStatus;
-class SessionStatusFrameApplications;
-
-class SessionStatusFrame : public QFrame, public Ui_SessionStatusFrame
+class Profile;
+class X2GoSession : public QObject
 {
     Q_OBJECT
 public:
-    explicit SessionStatusFrame(QWidget* parent = 0, Qt::WindowFlags f = 0);
-    virtual ~SessionStatusFrame();
-private slots:
-    void slotSetTabFrames();
-private:
-    void setFrame(QPushButton* button);
+    typedef enum {NOTRUNNING, STARTING, RESUMING, TERMINATING, SUSPENDING, RUNNING} SessionStatus;
 private:
-    SessionStatusFrameStatus* frStatus;
-    SessionStatusFrameApplications* frApps;
+    X2GO_RO_PROPERTY(Profile*, profile)
+    X2GO_RO_PROPERTY(SessionStatus, status)
+    X2GO_RO_PROPERTY(SshConnection*, sshConnection)
+public:
+    X2GoSession(Profile* profile);
+    virtual ~X2GoSession();
+    void startSession();
+public slots:
+    void slotStartSession();
+private slots:
+    void slotSshConnectionOk(QString);
+    void slotSshConnectionFailed(int, QString errorMessage);
+signals:
+    void signalStatusChanged(X2GoSession::SessionStatus status);
 };
 
-#endif // SESSIONSTATUSFRAME_H
+#endif // X2GOSESSION_H


hooks/post-receive
-- 
x2goclient2.git (X2Go Client 2 (rewrite of x2goclient.git))

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 "x2goclient2.git" (X2Go Client 2 (rewrite of x2goclient.git)).




More information about the x2go-commits mailing list