summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Swiften/Base/BoostRandomGenerator.cpp27
-rw-r--r--Swiften/Base/RandomGenerator.cpp4
-rw-r--r--Swiften/Base/SConscript2
-rw-r--r--Swiften/Base/StdRandomGenerator.cpp33
-rw-r--r--Swiften/Base/StdRandomGenerator.h (renamed from Swiften/Base/BoostRandomGenerator.h)10
-rw-r--r--Swiften/Network/PlatformDomainNameServiceQuery.cpp4
-rw-r--r--Swiften/QA/ConcurrentFileTransferTest/ConcurrentFileTransferTest.cpp4
-rw-r--r--Swiften/QA/FileTransferTest/FileTransferTest.cpp5
8 files changed, 47 insertions, 42 deletions
diff --git a/Swiften/Base/BoostRandomGenerator.cpp b/Swiften/Base/BoostRandomGenerator.cpp
deleted file mode 100644
index d893d4d..0000000
--- a/Swiften/Base/BoostRandomGenerator.cpp
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright (c) 2012-2016 Isode Limited.
- * All rights reserved.
- * See the COPYING file for more information.
- */
-
-#include <Swiften/Base/BoostRandomGenerator.h>
-
-#include <ctime>
-#include <numeric>
-
-#include <boost/random/uniform_int.hpp>
-#include <boost/random/variate_generator.hpp>
-
-namespace Swift {
-
-BoostRandomGenerator::BoostRandomGenerator() {
- // FIXME: Not a good seed
- generator.seed(static_cast<unsigned int>(std::time(nullptr)));
-}
-
-int BoostRandomGenerator::generateRandomInteger(int maximum) {
- boost::uniform_int<> distribution(0, maximum);
- return distribution(generator);
-}
-
-}
diff --git a/Swiften/Base/RandomGenerator.cpp b/Swiften/Base/RandomGenerator.cpp
index f0d8804..e43c01a 100644
--- a/Swiften/Base/RandomGenerator.cpp
+++ b/Swiften/Base/RandomGenerator.cpp
@@ -1,15 +1,13 @@
/*
* Copyright (c) 2012 Isode Limited.
* All rights reserved.
* See the COPYING file for more information.
*/
#include <Swiften/Base/RandomGenerator.h>
namespace Swift {
-RandomGenerator::~RandomGenerator() {
-
-}
+RandomGenerator::~RandomGenerator() = default;
}
diff --git a/Swiften/Base/SConscript b/Swiften/Base/SConscript
index de502c2..1f48f19 100644
--- a/Swiften/Base/SConscript
+++ b/Swiften/Base/SConscript
@@ -1,23 +1,23 @@
Import("swiften_env")
objects = swiften_env.SwiftenObject([
- "BoostRandomGenerator.cpp",
"ByteArray.cpp",
"DateTime.cpp",
"Error.cpp",
"FileSize.cpp",
"IDGenerator.cpp",
"Log.cpp",
"LogSerializers.cpp",
"Path.cpp",
"Paths.cpp",
"RandomGenerator.cpp",
"Regex.cpp",
"SafeAllocator.cpp",
"SafeByteArray.cpp",
"SimpleIDGenerator.cpp",
+ "StdRandomGenerator.cpp",
"String.cpp",
"URL.cpp",
"sleep.cpp",
])
swiften_env.Append(SWIFTEN_OBJECTS = [objects])
diff --git a/Swiften/Base/StdRandomGenerator.cpp b/Swiften/Base/StdRandomGenerator.cpp
new file mode 100644
index 0000000..8b1dee0
--- /dev/null
+++ b/Swiften/Base/StdRandomGenerator.cpp
@@ -0,0 +1,33 @@
+/*
+ * Copyright (c) 2012-2017 Isode Limited.
+ * All rights reserved.
+ * See the COPYING file for more information.
+ */
+
+#include <Swiften/Base/StdRandomGenerator.h>
+
+#include <algorithm>
+#include <functional>
+
+namespace {
+ template<class T = std::mt19937, std::size_t N = T::state_size>
+ typename std::enable_if<!!N, T>::type createSeededRandomEngine() {
+ typename T::result_type random_data[N];
+ std::random_device source;
+ std::generate(std::begin(random_data), std::end(random_data), std::ref(source));
+ std::seed_seq seeds(std::begin(random_data), std::end(random_data));
+ return T(seeds);
+ }
+}
+
+namespace Swift {
+
+StdRandomGenerator::StdRandomGenerator() : generator(createSeededRandomEngine()) {
+}
+
+int StdRandomGenerator::generateRandomInteger(int maximum) {
+ std::uniform_int_distribution<> distribution(0, maximum);
+ return distribution(generator);
+}
+
+}
diff --git a/Swiften/Base/BoostRandomGenerator.h b/Swiften/Base/StdRandomGenerator.h
index ff715c3..4cc5e95 100644
--- a/Swiften/Base/BoostRandomGenerator.h
+++ b/Swiften/Base/StdRandomGenerator.h
@@ -1,25 +1,25 @@
/*
- * Copyright (c) 2012-2016 Isode Limited.
+ * Copyright (c) 2012-2017 Isode Limited.
* All rights reserved.
* See the COPYING file for more information.
*/
#pragma once
-#include <boost/random/mersenne_twister.hpp>
+#include <random>
#include <Swiften/Base/API.h>
#include <Swiften/Base/Override.h>
#include <Swiften/Base/RandomGenerator.h>
namespace Swift {
- class SWIFTEN_API BoostRandomGenerator : public RandomGenerator {
+ class SWIFTEN_API StdRandomGenerator : public RandomGenerator {
public:
- BoostRandomGenerator();
+ StdRandomGenerator();
int generateRandomInteger(int max) SWIFTEN_OVERRIDE;
private:
- boost::mt19937 generator;
+ std::mt19937 generator;
};
}
diff --git a/Swiften/Network/PlatformDomainNameServiceQuery.cpp b/Swiften/Network/PlatformDomainNameServiceQuery.cpp
index 5cffcdb..a5d180b 100644
--- a/Swiften/Network/PlatformDomainNameServiceQuery.cpp
+++ b/Swiften/Network/PlatformDomainNameServiceQuery.cpp
@@ -2,62 +2,62 @@
* Copyright (c) 2010-2016 Isode Limited.
* All rights reserved.
* See the COPYING file for more information.
*/
#include <boost/asio.hpp>
#include <Swiften/Network/PlatformDomainNameServiceQuery.h>
#pragma GCC diagnostic ignored "-Wold-style-cast"
#include <Swiften/Base/Platform.h>
#include <stdlib.h>
#include <boost/numeric/conversion/cast.hpp>
#ifdef SWIFTEN_PLATFORM_WINDOWS
#undef UNICODE
#include <windows.h>
#include <windns.h>
#ifndef DNS_TYPE_SRV
#define DNS_TYPE_SRV 33
#endif
#else
#include <arpa/nameser.h>
#include <arpa/nameser_compat.h>
#include <resolv.h>
#endif
#include <boost/bind.hpp>
#include <Swiften/Base/ByteArray.h>
#include <Swiften/EventLoop/EventLoop.h>
-#include <Swiften/Base/BoostRandomGenerator.h>
#include <Swiften/Base/Log.h>
+#include <Swiften/Base/StdRandomGenerator.h>
#include <Swiften/Network/PlatformDomainNameResolver.h>
using namespace Swift;
namespace Swift {
PlatformDomainNameServiceQuery::PlatformDomainNameServiceQuery(const boost::optional<std::string>& serviceName, EventLoop* eventLoop, PlatformDomainNameResolver* resolver) : PlatformDomainNameQuery(resolver), eventLoop(eventLoop), serviceValid(false) {
if (!!serviceName) {
service = *serviceName;
serviceValid = true;
}
}
PlatformDomainNameServiceQuery::~PlatformDomainNameServiceQuery() {
}
void PlatformDomainNameServiceQuery::run() {
getResolver()->addQueryToQueue(shared_from_this());
}
void PlatformDomainNameServiceQuery::runBlocking() {
if (!serviceValid) {
emitError();
return;
}
SWIFT_LOG(debug) << "Querying " << service << std::endl;
std::vector<DomainNameServiceQuery::Result> records;
@@ -145,41 +145,41 @@ void PlatformDomainNameServiceQuery::runBlocking() {
record.weight = boost::numeric_cast<int>(ns_get16(currentEntry));
currentEntry += 2;
// Port
if (currentEntry + 2 >= messageEnd) {
emitError();
return;
}
record.port = boost::numeric_cast<int>(ns_get16(currentEntry));
currentEntry += 2;
// Hostname
if (currentEntry >= messageEnd) {
emitError();
return;
}
ByteArray entry;
entry.resize(NS_MAXDNAME);
entryLength = dn_expand(messageStart, messageEnd, currentEntry, reinterpret_cast<char*>(vecptr(entry)), entry.size());
if (entryLength < 0) {
emitError();
return;
}
record.hostname = std::string(reinterpret_cast<const char*>(vecptr(entry)));
records.push_back(record);
currentEntry += entryLength;
answersCount--;
}
#endif
- BoostRandomGenerator generator;
+ StdRandomGenerator generator;
DomainNameServiceQuery::sortResults(records, generator);
//std::cout << "Sending out " << records.size() << " SRV results " << std::endl;
eventLoop->postEvent(boost::bind(boost::ref(onResult), records), shared_from_this());
}
void PlatformDomainNameServiceQuery::emitError() {
eventLoop->postEvent(boost::bind(boost::ref(onResult), std::vector<DomainNameServiceQuery::Result>()), shared_from_this());
}
}
diff --git a/Swiften/QA/ConcurrentFileTransferTest/ConcurrentFileTransferTest.cpp b/Swiften/QA/ConcurrentFileTransferTest/ConcurrentFileTransferTest.cpp
index 664a87b..22ee9d7 100644
--- a/Swiften/QA/ConcurrentFileTransferTest/ConcurrentFileTransferTest.cpp
+++ b/Swiften/QA/ConcurrentFileTransferTest/ConcurrentFileTransferTest.cpp
@@ -1,71 +1,71 @@
/*
* Copyright (c) 2015-2016 Isode Limited.
* All rights reserved.
* See the COPYING file for more information.
*/
#include <fstream>
#include <map>
#include <string>
#include <boost/filesystem.hpp>
#include <boost/numeric/conversion/cast.hpp>
-#include <Swiften/Base/BoostRandomGenerator.h>
#include <Swiften/Base/Debug.h>
#include <Swiften/Base/Log.h>
#include <Swiften/Base/sleep.h>
+#include <Swiften/Base/StdRandomGenerator.h>
#include <Swiften/Client/Client.h>
#include <Swiften/Client/ClientXMLTracer.h>
#include <Swiften/Disco/ClientDiscoManager.h>
#include <Swiften/Disco/EntityCapsProvider.h>
#include <Swiften/Elements/Presence.h>
#include <Swiften/EventLoop/SimpleEventLoop.h>
#include <Swiften/FileTransfer/FileReadBytestream.h>
#include <Swiften/FileTransfer/FileTransferManager.h>
#include <Swiften/FileTransfer/FileWriteBytestream.h>
#include <Swiften/FileTransfer/OutgoingFileTransfer.h>
#include <Swiften/FileTransfer/ReadBytestream.h>
#include <Swiften/Network/BoostNetworkFactories.h>
#include <Swiften/Network/Timer.h>
#include <Swiften/Network/TimerFactory.h>
using namespace Swift;
static const std::string CLIENT_NAME = "Swiften FT Test";
static const std::string CLIENT_NODE = "http://swift.im";
static std::shared_ptr<SimpleEventLoop> eventLoop;
static std::shared_ptr<BoostNetworkFactories> networkFactories;
-BoostRandomGenerator randGen;
+StdRandomGenerator randGen;
enum Candidate {
InBandBytestream = 1,
S5B_Direct = 2,
S5B_Proxied = 4,
S5B_Assisted = 8,
};
class ConcurrentFileTransferTest {
public:
ConcurrentFileTransferTest(int clientACandidates, int clientBCandidates) : clientACandidates_(clientACandidates), clientBCandidates_(clientBCandidates) {
}
private:
int clientACandidates_;
std::shared_ptr<Client> clientA_;
std::map<std::string, ByteArray> clientASendFiles_;
int clientBCandidates_;
std::shared_ptr<Client> clientB_;
};
/**
* This program tests the concurrent transfer of multiple file-transfers.
*
*/
int main(int argc, char** argv) {
int failedTests = 0;
diff --git a/Swiften/QA/FileTransferTest/FileTransferTest.cpp b/Swiften/QA/FileTransferTest/FileTransferTest.cpp
index b627b30..ebdb36a 100644
--- a/Swiften/QA/FileTransferTest/FileTransferTest.cpp
+++ b/Swiften/QA/FileTransferTest/FileTransferTest.cpp
@@ -1,70 +1,71 @@
/*
* Copyright (c) 2014-2016 Isode Limited.
* All rights reserved.
* See the COPYING file for more information.
*/
#include <fstream>
#include <boost/algorithm/string.hpp>
#include <boost/filesystem.hpp>
#include <boost/numeric/conversion/cast.hpp>
-#include <Swiften/Base/BoostRandomGenerator.h>
+
#include <Swiften/Base/Debug.h>
#include <Swiften/Base/Log.h>
#include <Swiften/Base/sleep.h>
+#include <Swiften/Base/StdRandomGenerator.h>
#include <Swiften/Client/Client.h>
#include <Swiften/Client/ClientXMLTracer.h>
#include <Swiften/Disco/ClientDiscoManager.h>
#include <Swiften/Disco/EntityCapsProvider.h>
#include <Swiften/Elements/Presence.h>
#include <Swiften/EventLoop/SimpleEventLoop.h>
#include <Swiften/FileTransfer/FileReadBytestream.h>
#include <Swiften/FileTransfer/FileTransferManager.h>
#include <Swiften/FileTransfer/FileWriteBytestream.h>
#include <Swiften/FileTransfer/OutgoingFileTransfer.h>
#include <Swiften/FileTransfer/ReadBytestream.h>
#include <Swiften/Network/BoostNetworkFactories.h>
#include <Swiften/Network/Timer.h>
#include <Swiften/Network/TimerFactory.h>
using namespace Swift;
static const std::string CLIENT_NAME = "Swiften FT Test";
static const std::string CLIENT_NODE = "http://swift.im";
static std::shared_ptr<SimpleEventLoop> eventLoop;
static std::shared_ptr<BoostNetworkFactories> networkFactories;
-BoostRandomGenerator randGen;
+StdRandomGenerator randGen;
enum Candidate {
InBandBytestream = 1,
S5B_Direct = 2,
S5B_Proxied = 4,
S5B_Assisted = 8,
};
class FileTransferTest {
public:
FileTransferTest(int senderCandidates, int receiverCandidates) : senderCandidates_(senderCandidates), senderError_(FileTransferError::UnknownError), senderIsDone_(false), receiverCandidates_(receiverCandidates), receiverError_(FileTransferError::UnknownError), receiverIsDone_(false) {
sender_ = std::make_shared<Client>(JID(getenv("SWIFT_FILETRANSFERTEST_JID")), getenv("SWIFT_FILETRANSFERTEST_PASS"), networkFactories.get());
sender_->onDisconnected.connect(boost::bind(&FileTransferTest::handleSenderDisconnected, this, _1));
sender_->onConnected.connect(boost::bind(&FileTransferTest::handleSenderConnected, this));
sender_->getEntityCapsProvider()->onCapsChanged.connect(boost::bind(&FileTransferTest::handleSenderCapsChanged, this, _1));
receiver_ = std::make_shared<Client>(JID(getenv("SWIFT_FILETRANSFERTEST2_JID")), getenv("SWIFT_FILETRANSFERTEST2_PASS"), networkFactories.get());
receiver_->onConnected.connect(boost::bind(&FileTransferTest::handleReceiverConnected, this));
receiver_->onDisconnected.connect(boost::bind(&FileTransferTest::handleReceiverDisconnected, this, _1));
senderTracer_ = new ClientXMLTracer(sender_.get());
receiverTracer_ = new ClientXMLTracer(receiver_.get());
ClientOptions options;
options.useTLS = ClientOptions::NeverUseTLS;
options.useStreamCompression = false;
options.useStreamResumption = false;
options.useAcks = false;
sender_->connect(options);