/*! HELLO command (Handshake request) */ void QwsClientSocket::handleMessageHELLO(const QwMessage &message) { Q_UNUSED(message); qDebug() << this << "Received a HELLO handshake request."; m_sessionState = Qws::StateConnected; emit sessionStateChanged(m_sessionState); sendServerInfo(); }
/*! PASS command (User password). During handshake/connecting this actually triggers the user authentication and causes the server to check the password and login, also load the specific account information from the database and tell all other clients that a user has logged in. */ void QwsClientSocket::handleMessagePASS(const QwMessage &message) { if (m_sessionState == Qws::StateConnected && !user.nickname().isEmpty()) { // We need a handshake first and a nickname. Send the client the session id of its own // session and proceed. user.setCryptedPassword(message.stringArg(0)); user.setLoginTime(QDateTime::currentDateTime()); user.setLastActivity(QDateTime::currentDateTime()); QwsUser loadedUser = m_serverController->hook_readAccount(user.loginName(), Qws::UserTypeAccount); if (!loadedUser.isNull() && loadedUser.password() == user.password()) { // Copy some additional information user.setGroupName(loadedUser.groupName()); user.setPrivileges(loadedUser.privileges()); user.setDownloadSpeedLimit(loadedUser.downloadSpeedLimit()); user.setUploadSpeedLimit(loadedUser.uploadSpeedLimit()); user.setDownloadLimit(loadedUser.downloadLimit()); user.setUploadLimit(loadedUser.uploadLimit()); // Login successful QwMessage reply("201"); reply.appendArg(QString::number(user.userId())); sendMessage(reply); m_sessionState = Qws::StateActive; emit sessionStateChanged(m_sessionState); emit requestedRoomTopic(1); return; } } // If in doubt, fail m_serverController->qwLog(tr("Login failed for '%1'.").arg(user.loginName())); sendError(Qw::ErrorLoginFailed); disconnectClient(); return; }
VBoxSnapshotsWgt::VBoxSnapshotsWgt (QWidget *aParent) : QIWithRetranslateUI <QWidget> (aParent) , mCurSnapshotItem (0) , mEditProtector (false) , mSnapshotActionGroup (new QActionGroup (this)) , mCurStateActionGroup (new QActionGroup (this)) , mRestoreSnapshotAction (new QAction (mSnapshotActionGroup)) , mDeleteSnapshotAction (new QAction (mSnapshotActionGroup)) , mShowSnapshotDetailsAction (new QAction (mSnapshotActionGroup)) , mTakeSnapshotAction (new QAction (mCurStateActionGroup)) , mCloneSnapshotAction(new QAction(mCurStateActionGroup)) , m_fShapshotOperationsAllowed(false) { /* Apply UI decorations */ Ui::VBoxSnapshotsWgt::setupUi (this); mTreeWidget->header()->hide(); /* The snapshots widget is not very useful if there are a lot * of snapshots in a tree and the current Qt style decides not * to draw lines (branches) between the snapshot nodes; it is * then often unclear which snapshot is a child of another. * So on platforms whose styles do not normally draw branches, * we use QWindowsStyle which is present on every platform and * draws required thing like we want. */ // #if defined(RT_OS_DARWIN) || defined(RT_OS_LINUX) || defined(RT_OS_SOLARIS) QWindowsStyle *treeWidgetStyle = new QWindowsStyle; mTreeWidget->setStyle (treeWidgetStyle); connect (mTreeWidget, SIGNAL (destroyed (QObject *)), treeWidgetStyle, SLOT (deleteLater())); // #endif /* ToolBar creation */ UIToolBar *toolBar = new UIToolBar (this); toolBar->setUsesTextLabel (false); toolBar->setIconSize (QSize (22, 22)); toolBar->setSizePolicy (QSizePolicy::Fixed, QSizePolicy::Fixed); toolBar->addAction (mTakeSnapshotAction); toolBar->addSeparator(); toolBar->addAction (mRestoreSnapshotAction); toolBar->addAction (mDeleteSnapshotAction); toolBar->addAction (mShowSnapshotDetailsAction); toolBar->addSeparator(); toolBar->addAction(mCloneSnapshotAction); ((QVBoxLayout*)layout())->insertWidget (0, toolBar); /* Setup actions */ mRestoreSnapshotAction->setIcon(UIIconPool::iconSetFull( QSize (22, 22), QSize (16, 16), ":/snapshot_restore_22px.png", ":/snapshot_restore_16px.png", ":/snapshot_restore_disabled_22px.png", ":/snapshot_restore_disabled_16px.png")); mDeleteSnapshotAction->setIcon(UIIconPool::iconSetFull( QSize (22, 22), QSize (16, 16), ":/snapshot_delete_22px.png", ":/snapshot_delete_16px.png", ":/snapshot_delete_disabled_22px.png", ":/snapshot_delete_disabled_16px.png")); mShowSnapshotDetailsAction->setIcon(UIIconPool::iconSetFull( QSize (22, 22), QSize (16, 16), ":/snapshot_show_details_22px.png", ":/snapshot_show_details_16px.png", ":/snapshot_show_details_disabled_22px.png", ":/snapshot_details_show_disabled_16px.png")); mTakeSnapshotAction->setIcon(UIIconPool::iconSetFull( QSize (22, 22), QSize (16, 16), ":/snapshot_take_22px.png", ":/snapshot_take_16px.png", ":/snapshot_take_disabled_22px.png", ":/snapshot_take_disabled_16px.png")); mCloneSnapshotAction->setIcon(UIIconPool::iconSetFull( QSize (22, 22), QSize (16, 16), ":/vm_clone_22px.png", ":/vm_clone_16px.png", ":/vm_clone_disabled_22px.png", ":/vm_clone_disabled_16px.png")); mRestoreSnapshotAction->setShortcut (QString ("Ctrl+Shift+R")); mDeleteSnapshotAction->setShortcut (QString ("Ctrl+Shift+D")); mShowSnapshotDetailsAction->setShortcut (QString ("Ctrl+Space")); mTakeSnapshotAction->setShortcut (QString ("Ctrl+Shift+S")); mCloneSnapshotAction->setShortcut(QString ("Ctrl+Shift+C")); mAgeUpdateTimer.setSingleShot (true); /* Setup connections */ connect (mTreeWidget, SIGNAL (currentItemChanged (QTreeWidgetItem*, QTreeWidgetItem*)), this, SLOT (onCurrentChanged (QTreeWidgetItem*))); connect (mTreeWidget, SIGNAL (customContextMenuRequested (const QPoint&)), this, SLOT (onContextMenuRequested (const QPoint&))); connect (mTreeWidget, SIGNAL (itemChanged (QTreeWidgetItem*, int)), this, SLOT (onItemChanged (QTreeWidgetItem*))); connect(mTreeWidget, SIGNAL(itemDoubleClicked(QTreeWidgetItem*, int)), this, SLOT (sltItemDoubleClicked(QTreeWidgetItem*))); connect (mTakeSnapshotAction, SIGNAL (triggered()), this, SLOT (sltTakeSnapshot())); connect (mRestoreSnapshotAction, SIGNAL (triggered()), this, SLOT (sltRestoreSnapshot())); connect (mDeleteSnapshotAction, SIGNAL (triggered()), this, SLOT (sltDeleteSnapshot())); connect (mShowSnapshotDetailsAction, SIGNAL (triggered()), this, SLOT (sltShowSnapshotDetails())); connect (mCloneSnapshotAction, SIGNAL(triggered()), this, SLOT(sltCloneSnapshot())); connect (gVBoxEvents, SIGNAL(sigMachineDataChange(QString)), this, SLOT(machineDataChanged(QString))); connect (gVBoxEvents, SIGNAL(sigMachineStateChange(QString, KMachineState)), this, SLOT(machineStateChanged(QString, KMachineState))); connect (gVBoxEvents, SIGNAL(sigSessionStateChange(QString, KSessionState)), this, SLOT(sessionStateChanged(QString, KSessionState))); connect (&mAgeUpdateTimer, SIGNAL (timeout()), this, SLOT (updateSnapshotsAge())); retranslateUi(); }