diff options
author | Sebastien Braun | 2010-07-17 16:43:08 +0200 |
---|---|---|
committer | Sebastien Braun | 2010-07-17 16:58:25 +0200 |
commit | 2ad0ca683dfade47078a2aafce9921ca238a9436 (patch) | |
tree | 1a0d8f8ef5c4b52c9016077ba0ea7b0f2609143e /src/pvs.cpp | |
parent | Make McastSender work with a pre-opened socket (diff) | |
download | pvs-2ad0ca683dfade47078a2aafce9921ca238a9436.tar.gz pvs-2ad0ca683dfade47078a2aafce9921ca238a9436.tar.xz pvs-2ad0ca683dfade47078a2aafce9921ca238a9436.zip |
Implement UI and pvsDaemon components for outgoing Multicast Transfer
Diffstat (limited to 'src/pvs.cpp')
-rw-r--r-- | src/pvs.cpp | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/src/pvs.cpp b/src/pvs.cpp index 2069e36..c7fe5ce 100644 --- a/src/pvs.cpp +++ b/src/pvs.cpp @@ -15,6 +15,8 @@ #include "src/net/pvsMsg.h" #include "src/net/pvsServiceDiscovery.h" #include "src/net/pvsDiscoveredServer.h" +#include "src/net/mcast/McastConfiguration.h" +#include "src/net/pvsOutgoingMulticastTransfer.h" // D-Bus #include "pvsadaptor.h" @@ -38,6 +40,7 @@ PVS::PVS() : loadCommands(); _blankScreen = NULL; _vncPort = -1; + _masterMcastConfig = new McastConfiguration(this); // add a notify to the allow file, so we get informed when the file is changed QString watchPath("/home/"); @@ -176,6 +179,17 @@ void PVS::onCommand(PVSMsg cmdMessage) unlock(); return; } + if (ident.compare("MCASTFTRETRY") == 0) + { + QStringList fields = message.split(':'); + if (fields[0].compare(getUserName()) == 0) + { + quint64 id = fields[0].toULongLong(); + PVSOutgoingMulticastTransfer* transfer = _outgoingTransfers.value(id, 0); + if (transfer) + transfer->retry(); + } + } #ifdef never // prototype @@ -627,3 +641,49 @@ void PVS::signalHandler(int signal) } +bool PVS::createMulticastTransfer(QString const& objectPath, quint64& transferID, QString& errorReason) +{ + transferID = generateMcastTransferID(); + + PVSOutgoingMulticastTransfer* transfer = new PVSOutgoingMulticastTransfer(getUserName(), transferID, objectPath, this); + if (transfer->isError()) + { + errorReason = transfer->reason(); + delete transfer; + return false; + } + + _outgoingTransfers.insert(transferID, transfer); + connect(transfer, SIGNAL(started(qulonglong)), SIGNAL(outgoingMulticastTransferStarted(qulonglong))); + connect(transfer, SIGNAL(finished(qulonglong)), SIGNAL(outgoingMulticastTransferFinished(qulonglong))); + connect(transfer, SIGNAL(failed(qulonglong, QString const)), SIGNAL(outgoingMulticastTransferFailed(qulonglong, QString const))); + connect(transfer, SIGNAL(progress(qulonglong, qulonglong, qulonglong)), SIGNAL(outgoingMulticastTransferProgress(qulonglong, qulonglong, qulonglong))); + connect(transfer, SIGNAL(announce(PVSMsg)), _pvsServerConnection, SLOT(sendMessage(PVSMsg))); + QTimer::singleShot(0, transfer, SLOT(start())); + errorReason = ""; + return true; +} + +void PVS::cancelOutgoingMulticastTransfer(quint64 transferID) +{ + PVSOutgoingMulticastTransfer* transfer = _outgoingTransfers.value(transferID, 0); + + if (transfer) + { + delete transfer; + } +} + +quint64 PVS::generateMcastTransferID() +{ + static quint64 nodeID = 0; + static quint16 counter = 0; + + if (!nodeID) + { + QDataStream(QCryptographicHash::hash(getUserName().toLocal8Bit(), QCryptographicHash::Md5)) >> nodeID; + } + + return (nodeID & Q_UINT64_C(0xffffffffffff0000)) | (quint64)(++counter); +} + |