summaryrefslogtreecommitdiffstats
path: root/src/pvs.cpp
diff options
context:
space:
mode:
authorSebastien Braun2010-10-03 23:27:39 +0200
committerSebastien Braun2010-10-05 22:12:25 +0200
commit5bcf831e1734be78d9468631926e875a5b05e11f (patch)
tree9424928fc4a25bc1ec60598d05db709773c7e438 /src/pvs.cpp
parentAssorted Multicast Fixes: (diff)
downloadpvs-5bcf831e1734be78d9468631926e875a5b05e11f.tar.gz
pvs-5bcf831e1734be78d9468631926e875a5b05e11f.tar.xz
pvs-5bcf831e1734be78d9468631926e875a5b05e11f.zip
Implement Network-wide Configuration Interface for Multicast File Transfer
Diffstat (limited to 'src/pvs.cpp')
-rw-r--r--src/pvs.cpp58
1 files changed, 57 insertions, 1 deletions
diff --git a/src/pvs.cpp b/src/pvs.cpp
index 9bd36d6..df21468 100644
--- a/src/pvs.cpp
+++ b/src/pvs.cpp
@@ -45,7 +45,10 @@ PVS::PVS() :
loadCommands();
_blankScreen = NULL;
_vncPort = -1;
+
+ QSettings settings;
_masterMcastConfig = new McastConfiguration(this);
+ _masterMcastConfig->loadFrom(&settings);
// add a notify to the allow file, so we get informed when the file is changed
QString watchPath("/home/");
@@ -234,6 +237,11 @@ void PVS::onCommand(PVSMsg cmdMessage)
qDebug() << "Ignoring malformed MCASTFTANNOUNCE command: " << message;
return;
}
+ if (ident.compare("MCASTFTCONFIG") == 0)
+ {
+ loadMcastConfig(message);
+ return;
+ }
#ifdef never
// prototype
@@ -735,7 +743,8 @@ void PVS::cancelIncomingMulticastTransfer(qulonglong transferID)
void PVS::setMulticastInterface(QString const& interfaceName)
{
QSettings settings;
- settings.setValue("multicast/interface", interfaceName);
+ _masterMcastConfig->multicastInterface(interfaceName);
+ _masterMcastConfig->writeTo(&settings, "multicast");
settings.sync();
}
@@ -814,3 +823,50 @@ void PVS::incomingMulticastTransferDelete(qulonglong transferID)
_incomingTransfers.remove(transferID);
transfer->deleteLater();
}
+
+void PVS::loadMcastConfig(QString const& message)
+{
+ QByteArray ba = QByteArray::fromBase64(message.toAscii());
+ QDataStream d(&ba, QIODevice::ReadOnly);
+ quint16 ver, udpp, dp, sp, mtu, wsz;
+ quint32 rate;
+ QString addr;
+ bool useudp;
+
+ d >> ver;
+ if(ver != 1)
+ {
+ ConsoleLog writeLine(QString("Unable to decode multicast configuration message: Unknown version %1").arg(ver));
+ return;
+ }
+
+ d >> addr
+ >> udpp
+ >> dp
+ >> sp
+ >> mtu
+ >> wsz
+ >> rate
+ >> useudp;
+ if(d.status() != QDataStream::Ok)
+ {
+ ConsoleLog writeLine(QString("Unable to decode multicast configuration message: There was an error reading"));
+ return;
+ }
+
+ _masterMcastConfig->multicastUDPPortBase(udpp);
+ _masterMcastConfig->multicastDPort(dp);
+ _masterMcastConfig->multicastSPort(sp);
+ _masterMcastConfig->multicastMTU(mtu);
+ _masterMcastConfig->multicastWinSize(wsz);
+ _masterMcastConfig->multicastRate(rate);
+ _masterMcastConfig->multicastAddress(addr);
+ _masterMcastConfig->multicastUseUDP(useudp);
+
+ QSettings settings;
+ _masterMcastConfig->writeTo(&settings, "multicast");
+ settings.sync();
+
+ ConsoleLog writeLine(QString("Reconfigured multicast filetransfer to IP %1, UDP port base %2, destination port %3, source port %4, MTU %5, Window Size %6, rate %7, %8using UDP")
+ .arg(addr).arg(udpp).arg(dp).arg(sp).arg(mtu).arg(wsz).arg(rate).arg(useudp ? "" : "not "));
+}