From ce3329047d378a14006ce74ec273ac59e3375303 Mon Sep 17 00:00:00 2001 From: Sebastian Date: Wed, 12 May 2010 19:42:27 +0200 Subject: initial import of latest svn version --- src/core/vncConnection.cpp | 261 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 261 insertions(+) create mode 100644 src/core/vncConnection.cpp (limited to 'src/core/vncConnection.cpp') diff --git a/src/core/vncConnection.cpp b/src/core/vncConnection.cpp new file mode 100644 index 0000000..1864e77 --- /dev/null +++ b/src/core/vncConnection.cpp @@ -0,0 +1,261 @@ +/* +# Copyright (c) 2009 - OpenSLX Project, Computer Center University of Freiburg +# +# This program is free software distributed under the GPL version 2. +# See http://openslx.org/COPYING +# +# If you have any feedback please consult http://openslx.org/feedback and +# send your suggestions, praise, or complaints to feedback@openslx.org +# +# General information about OpenSLX can be found at http://openslx.org/ +# ----------------------------------------------------------------------------- +# src/core/vncConnection.cpp +# ----------------------------------------------------------------------------- +*/ + + +#include "vncConnection.h" +#include +#include +#include +#include + + +//***********************************************************************************// +// VNCConnection // +//***********************************************************************************// + + + +VNCConnection::VNCConnection(QString newPass) +{ + thread = NULL; + pwSet = false; + if (newPass != "") + { + password = newPass; + pwSet = true; + } + else + password = ""; + first = true; + view_only = true; + locked = false; + myFrame = NULL; +} + +VNCConnection::~VNCConnection() +{ + setDead(); +} + +bool VNCConnection::initClient(VNCConnectInfo* newConInfo) +{ + int argc = newConInfo->getCount(); + char** argv = newConInfo->getArguments(); + + if (argc > 0) + { + + stringHost = QString(argv[0]); + + /*QString cropHost = colonSplitter(stringHost, true); + QString cropPort = colonSplitter(stringHost, false);*/ + _host = colonSplitter(stringHost, true); + _port = colonSplitter(stringHost, false); + /*if (!(cropHost.size())) + cropHost = stringHost; + if (!(cropPort.size())) + _port = 5900; + password = newConInfo->getPassword(); + _host = cropHost; + thread = new VNCClientThread(_host, 5900, password , 0, 500);*/ + if (!(_host.size())) + _host = stringHost; + if (!(_port.size())) + _port = QString("5900"); + thread = new VNCClientThread(_host, string2Int(_port), newConInfo->getPassword(), 0, 500); + connect(thread, SIGNAL(finished()), this, SIGNAL(finished())); + + return true; + } + + rfbClientLog("init failed\n"); + emit finished(); + return false; +} + +/* + * disconnect and terminate the current connection and set a new one. + */ +void VNCConnection::reInitClientWithQuality(int quality) +{ + disconnect(thread, SIGNAL(finished()), this, SIGNAL(finished())); + thread->terminate = true; + thread = new VNCClientThread(_host, string2Int(_port), password , quality, 500); + connect(thread, SIGNAL(finished()), this, SIGNAL(finished())); +} + +bool VNCConnection::isOK() +{ + return thread != NULL && thread->isRunning(); +} + +bool VNCConnection::viewOnly() +{ + return view_only; +} + +void VNCConnection::setDead() +{ + if (thread != NULL) + { + disconnect(thread, SIGNAL(finished()), this, SIGNAL(finished())); + if (thread->isRunning()) + { + thread->terminate = true; + thread->wait(2000); + } + delete thread; + thread = NULL; + } +} + +void VNCConnection::clear() +{ + setDead(); + + if (myFrame) + { + myFrame = NULL; + } +} + +void VNCConnection::setFrame(ConnectionFrame* newFrame) +{ + if (newFrame) + { + if (myFrame) + { + // TODO: Tell it that we left? + } + myFrame = newFrame; + if (thread != NULL) myFrame->setToolTip(thread->getDesktopName()); + myFrame->setRatio(ratio); + myFrame->setOversized(overSized); + } +} + +ConnectionFrame* VNCConnection::getFrame() +{ + return myFrame; +} + +char* VNCConnection::getPassword(rfbClient* myClient) +{ + // better off somewhere else? + + QString tmpPassword; + QString serverHost(myClient->serverHost); + QString cropHost = colonSplitter(serverHost, true); + if (!(cropHost.size())) + cropHost = serverHost; + if (PVSClient* selfConnection = PVSConnectionManager::getManager()->getClientFromIp(cropHost)) // no candidate means false call anyway + { + tmpPassword = selfConnection->getPassword(); + } + else + { + tmpPassword = ""; + ConsoleLog writeError("Couldn't find a matching connection to retrieve a password from!"); + } + if (tmpPassword.length() > 8) // shorten if pw is too long + { + std::cout << "VNCConnection::getPassword() given password too long, cutting it down to 8 chars!" << std::endl; + tmpPassword = tmpPassword.mid(0,8); + } + + + char* pw = new char[9]; + strcpy(pw, tmpPassword.toUtf8().data()); + return pw; +} + +QString VNCConnection::getPassword() +{ + return password; +} + +bool VNCConnection::getPWSet() +{ + return pwSet; +} + +QString VNCConnection::getDesktopName() +{ + if (_desktopName.isNull() && thread != NULL && thread->isRunning()) _desktopName = thread->getDesktopName(); + return _desktopName; +} + +VNCClientThread* VNCConnection::getVNCClientThread() +{ + if (thread) + return thread; + return NULL; +} + + + +//***********************************************************************************// +// VNCConnectInfo // +//***********************************************************************************// + + + +VNCConnectInfo::VNCConnectInfo() +{ + count = 0; + arguments = NULL; + password = ""; + passwordSupplied = false; +} + +VNCConnectInfo::VNCConnectInfo(int newCount, char** newArgs, QString pass) +{ + if (pass == "") + setArguments(newCount, newArgs); + else + setArguments(newCount, newArgs, pass); +} + +VNCConnectInfo::~VNCConnectInfo() +{ + if (arguments) + delete[] arguments; +} + +void VNCConnectInfo::setArguments(int newCount, char** newArgs, QString pass) +{ + count = newCount; + arguments = newArgs; + if (pass != "") + { + password = pass; + passwordSupplied = true; + } +} + +int VNCConnectInfo::getCount() +{ + return count; +} + +char** VNCConnectInfo::getArguments() +{ + return arguments; +} + +QString VNCConnectInfo::getPassword() +{ + return password; +} -- cgit v1.2.3-55-g7522