Skip to content
This repository has been archived by the owner on Feb 12, 2023. It is now read-only.

Commit

Permalink
feat: load bootstrap nodes directly from JSON
Browse files Browse the repository at this point in the history
This allows us to easily update the list of bootstrap nodes.
  • Loading branch information
sudden6 committed Mar 1, 2019
1 parent 8fbffa9 commit 1f2bdf3
Show file tree
Hide file tree
Showing 5 changed files with 38 additions and 0 deletions.
1 change: 1 addition & 0 deletions res.qrc
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
<RCC>
<qresource prefix="/conf">
<file alias="settings.ini">res/settings.ini</file>
<file alias="nodes.json">res/nodes.json</file>
</qresource>
<qresource prefix="/font">
<file alias="DejaVuSans.ttf">res/font/DejaVuSans.ttf</file>
Expand Down
1 change: 1 addition & 0 deletions res/nodes.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"last_scan":1551037926,"last_refresh":1551037868,"nodes":[{"ipv4":"node.tox.biribiri.org","ipv6":"-","port":33445,"tcp_ports":[3389,33445],"public_key":"F404ABAA1C99A9D37D61AB54898F56793E1DEF8BD46B1038B9D822E8460FAB67","maintainer":"nurupo","location":"US","status_udp":true,"status_tcp":true,"version":"1000002009","motd":"Welcome, stranger #2692. I'm up for 1d 20h 51m 48s, running since Feb 22 23:00:18 UTC. If I get outdated, please ping my maintainer at nurupo.contributions@gmail.com","last_ping":1551037926},{"ipv4":"85.172.30.117","ipv6":"-","port":33445,"tcp_ports":[33445],"public_key":"8E7D0B859922EF569298B4D261A8CCB5FEA14FB91ED412A7603A585A25698832","maintainer":"ray65536","location":"RU","status_udp":true,"status_tcp":true,"version":"1000002008","motd":"Ray's Tox Node. TOX ID:3C3D6DB24D24754393679E59F198EF45EE26835AEF7EA3E3ECEA40E204F2B828BE86DF012ABF","last_ping":1551037928},{"ipv4":"194.249.212.109","ipv6":"2001:1470:fbfe::109","port":33445,"tcp_ports":[33445,3389],"public_key":"3CEE1F054081E7A011234883BC4FC39F661A55B73637A5AC293DDF1251D9432B","maintainer":"fluke571","location":"SI","status_udp":true,"status_tcp":true,"version":"1000002008","motd":"tox-bootstrapd","last_ping":1551037928},{"ipv4":"185.25.116.107","ipv6":"2a00:7a60:0:746b::3","port":33445,"tcp_ports":[3389,33445],"public_key":"DA4E4ED4B697F2E9B000EEFE3A34B554ACD3F45F5C96EAEA2516DD7FF9AF7B43","maintainer":"MAH69K","location":"UA","status_udp":true,"status_tcp":true,"version":"1000002008","motd":"Saluton! Mia Tox ID: B229B7BD68FC66C2716EAB8671A461906321C764782D7B3EDBB650A315F6C458EF744CE89F07. Scribu! ;)","last_ping":1551037927},{"ipv4":"tox.verdict.gg","ipv6":"-","port":33445,"tcp_ports":[3389,33445],"public_key":"1C5293AEF2114717547B39DA8EA6F1E331E5E358B35F9B6B5F19317911C5F976","maintainer":"Deliran","location":"DE","status_udp":true,"status_tcp":true,"version":"1000002008","motd":"Praise The Sun!","last_ping":1551037927},{"ipv4":"tox1.a68366.com","ipv6":"tox1.a68366.com","port":33445,"tcp_ports":[33445,3389],"public_key":"AEC204B9A4501412D5F0BB67D9C81B5DB3EE6ADA64122D32A3E9B093D544327D","maintainer":"a68366","location":"FR","status_udp":true,"status_tcp":true,"version":"1000002009","motd":"Since 26.12.2015","last_ping":1551037927},{"ipv4":"163.172.136.118","ipv6":"2001:bc8:4400:2100::13:41d","port":33445,"tcp_ports":[3389,33445],"public_key":"2C289F9F37C20D09DA83565588BF496FAB3764853FA38141817A72E3F18ACA0B","maintainer":"LittleVulpix","location":"FR","status_udp":true,"status_tcp":true,"version":"1000002008","motd":"Running toktok/c-toxcore now. LittleTox - your friendly neighbourhood tox node!","last_ping":1551037927},{"ipv4":"78.46.73.141","ipv6":"2a01:4f8:120:4091::3","port":33445,"tcp_ports":[33445,3389],"public_key":"02807CF4F8BB8FB390CC3794BDF1E8449E9A8392C5D3F2200019DA9F1E812E46","maintainer":"Sorunome","location":"DE","status_udp":true,"status_tcp":true,"version":"1000002008","motd":"Keep calm and pony on!","last_ping":1551037927},{"ipv4":"tox.initramfs.io","ipv6":"tox.initramfs.io","port":33445,"tcp_ports":[3389,33445],"public_key":"3F0A45A268367C1BEA652F258C85F4A66DA76BCAA667A49E770BCC4917AB6A25","maintainer":"initramfs","location":"TW","status_udp":true,"status_tcp":true,"version":"1000002008","motd":"initramfs' Tox DHT Node","last_ping":1551037927},{"ipv4":"46.229.52.198","ipv6":"-","port":33445,"tcp_ports":[],"public_key":"813C8F4187833EF0655B10F7752141A352248462A567529A38B6BBF73E979307","maintainer":"Stranger","location":"UA","status_udp":true,"status_tcp":false,"version":"1000002008","motd":"Freedom to parrots!","last_ping":1551037926},{"ipv4":"tox.ngc.zone","ipv6":"tox.ngc.zone","port":33445,"tcp_ports":[33445,3389],"public_key":"15E9C309CFCB79FDDF0EBA057DABB49FE15F3803B1BFF06536AE2E5BA5E4690E","maintainer":"Nolz","location":"DE","status_udp":true,"status_tcp":true,"version":"1000002008","motd":"Unlike Others","last_ping":1551037927},{"ipv4":"144.217.167.73","ipv6":"-","port":33445,"tcp_ports":[3389,33445],"public_key":"7E5668E0EE09E19F320AD47902419331FFEE147BB3606769CFBE921A2A2FD34C","maintainer":"velusip","location":"CA","status_udp":true,"status_tcp":true,"version":"1000002008","motd":"Jera","last_ping":1551037926},{"ipv4":"tox.abilinski.com","ipv6":"-","port":33445,"tcp_ports":[33445],"public_key":"10C00EB250C3233E343E2AEBA07115A5C28920E9C8D29492F6D00B29049EDC7E","maintainer":"AnthonyBilinski","location":"CA","status_udp":true,"status_tcp":true,"version":"1000002009","motd":"Running https://github.com/toktok/c-toxcore v0.2.9. qTox best Tox! Contact: AC18841E56CCDEE16E93E10E6AB2765BE54277D67F1372921B5B418A6B330D3D3FAFA60B0931","last_ping":1551037926},{"ipv4":"tmux.ru","ipv6":"-","port":33445,"tcp_ports":[33445],"public_key":"7467AFA626D3246343170B309BA5BDC975DF3924FC9D7A5917FBFA9F5CD5CD38","maintainer":"nrn","location":"RU","status_udp":true,"status_tcp":true,"version":"1000002008","motd":"https://t.me/nyoroon","last_ping":1551037928},{"ipv4":"37.48.122.22","ipv6":"2001:1af8:4700:a115:6::b","port":33445,"tcp_ports":[33445,3389],"public_key":"1B5A8AB25FFFB66620A531C4646B47F0F32B74C547B30AF8BD8266CA50A3AB59","maintainer":"Pokemon","location":"NL","status_udp":true,"status_tcp":true,"version":"1000002008","motd":"Those who would give up essential Liberty, to purchase a little temporary Safety, deserve neither Liberty nor Safety","last_ping":1551037927},{"ipv4":"tox.novg.net","ipv6":"-","port":33445,"tcp_ports":[33445,3389],"public_key":"D527E5847F8330D628DAB1814F0A422F6DC9D0A300E6C357634EE2DA88C35463","maintainer":"blind_oracle","location":"NL","status_udp":true,"status_tcp":true,"version":"1000002008","motd":"tox-bootstrapd","last_ping":1551037927},{"ipv4":"95.31.18.227","ipv6":"-","port":33445,"tcp_ports":[33445],"public_key":"257744DBF57BE3E117FE05D145B5F806089428D4DCE4E3D0D50616AA16D9417E","maintainer":"ky0uraku","location":"RU","status_udp":true,"status_tcp":true,"version":"1000002008","motd":"Vive le TOX","last_ping":1551037928},{"ipv4":"185.14.30.213","ipv6":"2a00:1ca8:a7::e8b","port":443,"tcp_ports":[33445,3389,443],"public_key":"2555763C8C460495B14157D234DD56B86300A2395554BCAE4621AC345B8C1B1B","maintainer":"dvor","location":"NL","status_udp":true,"status_tcp":true,"version":"1000002008","motd":"Just another tox node.","last_ping":1551037927},{"ipv4":"198.199.98.108","ipv6":"2604:a880:1:20::32f:1001","port":33445,"tcp_ports":[3389,33445],"public_key":"BEF0CFB37AF874BD17B9A8F9FE64C75521DB95A37D33C5BDB00E9CF58659C04F","maintainer":"Cody","location":"US","status_udp":true,"status_tcp":true,"version":"1000002008","motd":"tox-bootstrapd","last_ping":1551037926},{"ipv4":"52.53.185.100","ipv6":"-","port":33445,"tcp_ports":[33445],"public_key":"A04F5FE1D006871588C8EC163676458C1EC75B20B4A147433D271E1E85DAF839","maintainer":"kpp","location":"US","status_udp":true,"status_tcp":true,"version":"3000000007","motd":"Hi from tox-rs! I'm up 10 days 07 hours 00 minutes. TCP: incoming 77.8M, outgoing 68.2M, UDP: incoming 152.4M, outgoing 160.2M","last_ping":1551037928},{"ipv4":"tox.kurnevsky.net","ipv6":"tox.kurnevsky.net","port":33445,"tcp_ports":[33445],"public_key":"82EF82BA33445A1F91A7DB27189ECFC0C013E06E3DA71F588ED692BED625EC23","maintainer":"kurnevsky","location":"NL","status_udp":true,"status_tcp":true,"version":"3000000006","motd":"Hi from tox-rs! I'm up 01 days 05 hours 34 minutes.","last_ping":1551037928},{"ipv4":"tox.yikifish.com","ipv6":"-","port":33445,"tcp_ports":[33445],"public_key":"8EF12E275BA9CD7D56625D4950F2058B06D5905D0650A1FE76AF18DB986DF760","maintainer":"ytexas","location":"CN","status_udp":true,"status_tcp":true,"version":"1000002008","motd":"tox-bootstrapd","last_ping":1551037928},{"ipv4":"tox-node.loskiq.it","ipv6":"-","port":33445,"tcp_ports":[],"public_key":"88124F3C18C6CFA8778B7679B7329A333616BD27A4DFB562D476681315CF143D","maintainer":"loskiq","location":"RU","status_udp":false,"status_tcp":false,"version":"1000002008","motd":"Telegram: https://t.me/loskiq","last_ping":1541159265},{"ipv4":"79.140.30.52","ipv6":"-","port":33445,"tcp_ports":[],"public_key":"FFAC871E85B1E1487F87AE7C76726AE0E60318A85F6A1669E04C47EB8DC7C72D","maintainer":"warlomak","location":"RU","status_udp":false,"status_tcp":false,"version":"2016010100","motd":"tox-easy-bootstrap","last_ping":1540145505}]}
26 changes: 26 additions & 0 deletions src/net/bootstrapnodeupdater.cpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
#include "bootstrapnodeupdater.h"

#include <QDirIterator>
#include <QFile>
#include <QJsonArray>
#include <QJsonDocument>
#include <QJsonObject>
Expand All @@ -12,6 +14,7 @@ const QUrl NodeListAddress{"https://nodes.tox.chat/json"};
const QLatin1Literal jsonNodeArrayName{"nodes"};
const QLatin1Literal emptyAddress{"-"};
const QRegularExpression ToxPkRegEx(QString("(^|\\s)[A-Fa-f0-9]{%1}($|\\s)").arg(64));
const QLatin1Literal builtinNodesFile{":/conf/nodes.json"};
} // namespace

namespace NodeFields {
Expand Down Expand Up @@ -47,6 +50,29 @@ void BootstrapNodeUpdater::requestBootstrapNodes()
nam.get(request);
}

/**
* @brief Loads the list of built in boostrap nodes
* @return List of bootstrapnodes on success, empty list on error
*/
QList<DhtServer> BootstrapNodeUpdater::loadDefaultBootstrapNodes()
{
QFile nodesFile{builtinNodesFile};
if (!nodesFile.open(QIODevice::ReadOnly | QIODevice::Text)) {
qWarning() << "Couldn't read bootstrap nodes";
return {};
}

QString nodesJson = nodesFile.readAll();
nodesFile.close();
QJsonDocument d = QJsonDocument::fromJson(nodesJson.toUtf8());
if (d.isNull()) {
qWarning() << "Failed to parse JSON document";
return {};
}

return jsonToNodeList(d);
}

void BootstrapNodeUpdater::onRequestComplete(QNetworkReply* reply)
{
if (reply->error() != QNetworkReply::NoError) {
Expand Down
1 change: 1 addition & 0 deletions src/net/bootstrapnodeupdater.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ class BootstrapNodeUpdater : public QObject
public:
explicit BootstrapNodeUpdater(const QNetworkProxy& proxy, QObject* parent = nullptr);
void requestBootstrapNodes();
static QList<DhtServer> loadDefaultBootstrapNodes();

signals:
void availableBootstrapNodes(QList<DhtServer> nodes);
Expand Down
9 changes: 9 additions & 0 deletions test/net/bsu_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -34,11 +34,14 @@ class TestBootstrapNodesUpdater : public QObject
TestBootstrapNodesUpdater();
private slots:
void testOnline();
void testLocal();
};

TestBootstrapNodesUpdater::TestBootstrapNodesUpdater()
{
qRegisterMetaType<QList<DhtServer>>("QList<DhtServer>");
// Contains the builtin nodes list
Q_INIT_RESOURCE(res);
}

void TestBootstrapNodesUpdater::testOnline()
Expand All @@ -55,5 +58,11 @@ void TestBootstrapNodesUpdater::testOnline()
QVERIFY(result.size() > 0); // some data should be returned
}

void TestBootstrapNodesUpdater::testLocal()
{
QList<DhtServer> defaultNodes = BootstrapNodeUpdater::loadDefaultBootstrapNodes();
QVERIFY(defaultNodes.size() > 0);
}

QTEST_GUILESS_MAIN(TestBootstrapNodesUpdater)
#include "bsu_test.moc"

0 comments on commit 1f2bdf3

Please sign in to comment.