From 5e20e6b27929509311504b1a1e1eb58d80714176 Mon Sep 17 00:00:00 2001 From: Jfreegman Date: Sat, 17 Sep 2016 21:38:32 -0400 Subject: [PATCH] Switch to using json DHT nodes file Parsing json manually like this is ugly, but this allows us to use the json formatted nodeslist file at nodes.tox.chat instead of having to update the list by hand. We could also potentially use curl to fetch the list and update it automatically. --- misc/DHTnodes | 39 +------------- src/bootstrap.c | 133 ++++++++++++++++++++++++++++++++--------------- src/bootstrap.h | 7 +-- src/misc_tools.c | 12 ++++- src/misc_tools.h | 6 +-- 5 files changed, 109 insertions(+), 88 deletions(-) diff --git a/misc/DHTnodes b/misc/DHTnodes index 4e65dfd..bdaefc6 100644 --- a/misc/DHTnodes +++ b/misc/DHTnodes @@ -1,38 +1 @@ -144.76.60.215 33445 04119E835DF3E78BACF0F84235B300546AF8B936F035185E2A8E9E0A67C8924F -23.226.230.47 33445 A09162D68618E742FFBCA1C2C70385E6679604B2D80EA6E84AD0996A1AC8A074 -195.154.119.113 33445 E398A69646B8CEACA9F0B84F553726C1C49270558C57DF5F3C368F05A7D71354 -biribiri.org 33445 F404ABAA1C99A9D37D61AB54898F56793E1DEF8BD46B1038B9D822E8460FAB67 -46.38.239.179 33445 F5A1A38EFB6BD3C2C8AF8B10D85F0F89E931704D349F1D0720C3C4059AF2440A -178.62.250.138 33445 788236D34978D1D5BD822F0A5BEBD2C53C64CC31CD3149350EE27D4D9A2F9B6B -130.133.110.14 33445 461FA3776EF0FA655F1A05477DF1B3B614F7D6B124F7DB1DD4FE3C08B03B640F -104.167.101.29 33445 5918AC3C06955962A75AD7DF4F80A5D7C34F7DB9E1498D2E0495DE35B3FE8A57 -205.185.116.116 33445 A179B09749AC826FF01F37A9613F6B57118AE014D4196A0E1105A98F93A54702 -198.98.51.198 33445 1D5A5F2F5D6233058BF0259B09622FB40B482E4FA0931EB8FD3AB8E7BF7DAF6F -80.232.246.79 33445 CF6CECA0A14A31717CC8501DA51BE27742B70746956E6676FF423A529F91ED5D -108.61.165.198 33445 8E7D0B859922EF569298B4D261A8CCB5FEA14FB91ED412A7603A585A25698832 -212.71.252.109 33445 C4CEB8C7AC607C6B374E2E782B3C00EA3A63B80D4910B8649CCACDD19F260819 -194.249.212.109 33445 3CEE1F054081E7A011234883BC4FC39F661A55B73637A5AC293DDF1251D9432B -185.25.116.107 33445 DA4E4ED4B697F2E9B000EEFE3A34B554ACD3F45F5C96EAEA2516DD7FF9AF7B43 -192.99.168.140 33445 6A4D0607A296838434A6A7DDF99F50EF9D60A2C510BBF31FE538A25CB6B4652F -46.101.197.175 443 CD133B521159541FB1D326DE9850F5E56A6C724B5B8E5EB5CD8D950408E95707 -95.215.46.114 33445 5823FB947FF24CF83DDFAC3F3BAA18F96EA2018B16CC08429CB97FA502F40C23 -5.189.176.217 5190 2B2137E094F743AC8BD44652C55F41DFACC502F125E99E4FE24D40537489E32F -148.251.23.146 2306 7AED21F94D82B05774F697B209628CD5A9AD17E0C073D9329076A4C28ED28147 -104.223.122.15 33445 0FB96EEBFB1650DDB52E70CF773DDFCABE25A95CC3BB50FC251082E4B63EF82A -78.47.114.252 33445 1C5293AEF2114717547B39DA8EA6F1E331E5E358B35F9B6B5F19317911C5F976 -d4rk4.ru 1813 53737F6D47FA6BD2808F378E339AF45BF86F39B64E79D6D491C53A1D522E7039 -81.4.110.149 33445 9E7BD4793FFECA7F32238FA2361040C09025ED3333744483CA6F3039BFF0211E -95.31.20.151 33445 9CA69BB74DE7C056D1CC6B16AB8A0A38725C0349D187D8996766958584D39340 -104.233.104.126 33445 EDEE8F2E839A57820DE3DA4156D88350E53D4161447068A3457EE8F59F362414 -51.254.84.212 33445 AEC204B9A4501412D5F0BB67D9C81B5DB3EE6ADA64122D32A3E9B093D544327D -home.vikingmakt.com.br 33445 188E072676404ED833A4E947DC1D223DF8EFEBE5F5258573A236573688FB9761 -5.135.59.163 33445 2D320F971EF2CA18004416C2AAE7BA52BF7949DB34EA8E2E21AF67BD367BE211 -185.58.206.164 33445 24156472041E5F220D1FA11D9DF32F7AD697D59845701CDD7BE7D1785EB9DB39 -188.244.38.183 33445 15A0F9684E2423F9F46CFA5A50B562AE42525580D840CC50E518192BF333EE38 -mrflibble.c4.ee 33445 FAAB17014F42F7F20949F61E55F66A73C230876812A9737F5F6D2DCE4D9E4207 -82.211.31.116 33445 AF97B76392A6474AF2FD269220FDCF4127D86A42EF3A242DF53A40A268A2CD7C -128.199.199.197 33445 B05C8869DBB4EDDD308F43C1A974A20A725A36EACCA123862FDE9945BF9D3E09 -103.230.156.174 33445 5C4C7A60183D668E5BD8B3780D1288203E2F1BAE4EEF03278019E21F86174C1D -91.121.66.124 33445 4E3F7D37295664BBD0741B6DBCB6431D6CD77FC4105338C2FC31567BF5C8224A -92.54.84.70 33445 5625A62618CB4FCA70E147A71B29695F38CC65FF0CBD68AD46254585BE564802 -tox1.privacydragon.me 33445 31910C0497D347FF160D6F3A6C0E317BAFA71E8E03BC4CBB2A185C9D4FB8B31E +{"last_scan":1474137109,"nodes":[{"ipv4":"tox.zodiaclabs.org","ipv6":"v6.tox.zodiaclabs.org","port":33445,"tcp_ports":[33445,3389],"public_key":"A09162D68618E742FFBCA1C2C70385E6679604B2D80EA6E84AD0996A1AC8A074","maintainer":"stal","location":"US","status_udp":true,"status_tcp":true,"version":"2016010100","motd":"I am the bone of my code;\nNIH is my body and str8c is my blood.\nI have overflowed a thousand buffers.\nUnknown to SIGSEGV, nor to abort();\nHave withstood pain to create fast programs;\nYet my code will always be unsafe.\nSo as I pray, rock solid straight C.","last_ping":1474137098},{"ipv4":"biribiri.org","ipv6":"-","port":33445,"tcp_ports":[33445,3389],"public_key":"F404ABAA1C99A9D37D61AB54898F56793E1DEF8BD46B1038B9D822E8460FAB67","maintainer":"nurupo","location":"US","status_udp":true,"status_tcp":true,"version":"2016010100","motd":"Welcome, stranger #3783. I'm up for 1d 14h 23m 12s, running since Sep 16 04:08:25 UTC. If I get outdated, please ping my maintainer at nurupo.contributions@gmail.com","last_ping":1474137098},{"ipv4":"178.62.250.138","ipv6":"2a03:b0c0:2:d0::16:1","port":33445,"tcp_ports":[3389,33445],"public_key":"788236D34978D1D5BD822F0A5BEBD2C53C64CC31CD3149350EE27D4D9A2F9B6B","maintainer":"Impyy","location":"NL","status_udp":true,"status_tcp":true,"version":"2016010100","motd":"Impy's kickin' bootstrap node","last_ping":1474137097},{"ipv4":"130.133.110.14","ipv6":"2001:6f8:1c3c:babe::14:1","port":33445,"tcp_ports":[33445],"public_key":"461FA3776EF0FA655F1A05477DF1B3B614F7D6B124F7DB1DD4FE3C08B03B640F","maintainer":"Manolis","location":"DE","status_udp":true,"status_tcp":true,"version":"2016010100","motd":"Spline tox bootstrap node","last_ping":1474137101},{"ipv4":"205.185.116.116","ipv6":"-","port":33445,"tcp_ports":[3389,33445],"public_key":"A179B09749AC826FF01F37A9613F6B57118AE014D4196A0E1105A98F93A54702","maintainer":"Busindre","location":"US","status_udp":true,"status_tcp":true,"version":"2014101200","motd":"tox-bootstrapd","last_ping":1474137098},{"ipv4":"198.98.51.198","ipv6":"2605:6400:1:fed5:22:45af:ec10:f329","port":33445,"tcp_ports":[33445,3389,443],"public_key":"1D5A5F2F5D6233058BF0259B09622FB40B482E4FA0931EB8FD3AB8E7BF7DAF6F","maintainer":"Busindre","location":"US","status_udp":true,"status_tcp":true,"version":"2014101200","motd":"tox-bootstrapd","last_ping":1474137098},{"ipv4":"139.162.217.110","ipv6":"-","port":33445,"tcp_ports":[33445,3389],"public_key":"0EEBE6304F4B3F6549F39A87FBB45751929F4833BA6AC5F35B6DFA79D01B4523","maintainer":"Kr9r0x","location":"GB","status_udp":true,"status_tcp":true,"version":"2016010100","motd":"tox-bootstrapd","last_ping":1474137097},{"ipv4":"194.249.212.109","ipv6":"2001:1470:fbfe::109","port":33445,"tcp_ports":[3389,443,33445],"public_key":"3CEE1F054081E7A011234883BC4FC39F661A55B73637A5AC293DDF1251D9432B","maintainer":"fluke571","location":"SI","status_udp":true,"status_tcp":true,"version":"2016010100","motd":"tox-bootstrapd","last_ping":1474137098},{"ipv4":"185.25.116.107","ipv6":"2a00:7a60:0:746b::3","port":33445,"tcp_ports":[33445,3389],"public_key":"DA4E4ED4B697F2E9B000EEFE3A34B554ACD3F45F5C96EAEA2516DD7FF9AF7B43","maintainer":"MAH69K","location":"UA","status_udp":true,"status_tcp":true,"version":"","motd":"","last_ping":1474137102},{"ipv4":"192.99.168.140","ipv6":"-","port":33445,"tcp_ports":[33445,3389],"public_key":"6A4D0607A296838434A6A7DDF99F50EF9D60A2C510BBF31FE538A25CB6B4652F","maintainer":"WIeschie","location":"CA","status_udp":true,"status_tcp":true,"version":"2014101200","motd":"tox-bootstrapd","last_ping":1474137098},{"ipv4":"95.215.46.114","ipv6":"2a02:7aa0:1619::bdbd:17b8","port":33445,"tcp_ports":[33445,3389],"public_key":"5823FB947FF24CF83DDFAC3F3BAA18F96EA2018B16CC08429CB97FA502F40C23","maintainer":"Rotkaermota","location":"SE","status_udp":true,"status_tcp":true,"version":"","motd":"","last_ping":1474137102},{"ipv4":"5.189.176.217","ipv6":"2a02:c200:1:10:3:1:605:1337","port":5190,"tcp_ports":[33445,5190,3389],"public_key":"2B2137E094F743AC8BD44652C55F41DFACC502F125E99E4FE24D40537489E32F","maintainer":"tastytea","location":"DE","status_udp":true,"status_tcp":true,"version":"","motd":"","last_ping":1474137101},{"ipv4":"148.251.23.146","ipv6":"2a01:4f8:201:8493::2","port":2306,"tcp_ports":[33445,2306],"public_key":"7AED21F94D82B05774F697B209628CD5A9AD17E0C073D9329076A4C28ED28147","maintainer":"pucetox","location":"DE","status_udp":true,"status_tcp":true,"version":"2016010100","motd":"by pucetox,\n sync your nodes here tox.0x10k.com/bootstrapd-conf , \n for communication: 1D1C0B992DEB6D7F18561176F7F5E572BCC7F2BA5CFA7E9E437B9134122CE96D906A6119F9D2","last_ping":1474137097},{"ipv4":"104.223.122.15","ipv6":"2607:ff48:aa81:800::35eb:1","port":33445,"tcp_ports":[3389,33445],"public_key":"0FB96EEBFB1650DDB52E70CF773DDFCABE25A95CC3BB50FC251082E4B63EF82A","maintainer":"ru_maniac","location":"US","status_udp":true,"status_tcp":true,"version":"2016010100","motd":"tox id for queries and general info: EBD2A7B649ABB10ED9F47E5113F04000F39D46F087CEB62FCCE1069471FD6915256D197F2A97","last_ping":1474137098},{"ipv4":"tox.verdict.gg","ipv6":"-","port":33445,"tcp_ports":[33445,3389],"public_key":"1C5293AEF2114717547B39DA8EA6F1E331E5E358B35F9B6B5F19317911C5F976","maintainer":"Deliran","location":"DE","status_udp":true,"status_tcp":true,"version":"2016010100","motd":"Since 2015","last_ping":1474137098},{"ipv4":"d4rk4.ru","ipv6":"-","port":1813,"tcp_ports":[1813],"public_key":"53737F6D47FA6BD2808F378E339AF45BF86F39B64E79D6D491C53A1D522E7039","maintainer":"D4rk4","location":"RU","status_udp":true,"status_tcp":true,"version":"2016010100","motd":"TOX ID: 35EDC07AEB18B163E07EE33F6CDDA63969F394FF6A617CEAB22A7EBBEAAAF854C0EDFBD46898","last_ping":1474137102},{"ipv4":"81.4.110.149","ipv6":"2a00:d880:3:2::8bdc:f19","port":33445,"tcp_ports":[33445,3389],"public_key":"9E7BD4793FFECA7F32238FA2361040C09025ED3333744483CA6F3039BFF0211E","maintainer":"tibietigni","location":"NL","status_udp":true,"status_tcp":true,"version":"2016010100","motd":"Tibietigni.com node. Tox_id for communication: D36CC0B702621F48FDBC540A57124A744E5133C932E65ACCEBCABF2586A02455171717175989","last_ping":1474137097},{"ipv4":"95.31.20.151","ipv6":"-","port":33445,"tcp_ports":[3389],"public_key":"9CA69BB74DE7C056D1CC6B16AB8A0A38725C0349D187D8996766958584D39340","maintainer":"IgorNovgorodov","location":"RU","status_udp":true,"status_tcp":true,"version":"2016010100","motd":"happy-new-year","last_ping":1474137101},{"ipv4":"51.254.84.212","ipv6":"2001:41d0:a:1a3b::18","port":33445,"tcp_ports":[3389,33445],"public_key":"AEC204B9A4501412D5F0BB67D9C81B5DB3EE6ADA64122D32A3E9B093D544327D","maintainer":"a68366","location":"FR","status_udp":true,"status_tcp":true,"version":"2016010100","motd":"Since 26.12.2015","last_ping":1474137097},{"ipv4":"5.135.59.163","ipv6":"-","port":33445,"tcp_ports":[3389,33445],"public_key":"2D320F971EF2CA18004416C2AAE7BA52BF7949DB34EA8E2E21AF67BD367BE211","maintainer":"Skey","location":"FR","status_udp":true,"status_tcp":true,"version":"2014101200","motd":"tox-bootstrapd","last_ping":1474137097},{"ipv4":"185.58.206.164","ipv6":"2a02:f680:1:1100::3313","port":33445,"tcp_ports":[3389,33445],"public_key":"24156472041E5F220D1FA11D9DF32F7AD697D59845701CDD7BE7D1785EB9DB39","maintainer":"ru_maniac","location":"RU","status_udp":true,"status_tcp":true,"version":"2016010100","motd":"please note: running on iphy's fork!\nmore info on the matter: goo.gl/Gz5KhK \u0026 goo.gl/i2TZJr\n\ntox id for queries and general info: EBD2A7B649ABB10ED9F47E5113F04000F39D46F087CEB62FCCE1069471FD6915256D197F2A97","last_ping":1474137098},{"ipv4":"128.199.199.197","ipv6":"2400:6180:0:d0::17a:a001","port":33445,"tcp_ports":[3389,33445],"public_key":"B05C8869DBB4EDDD308F43C1A974A20A725A36EACCA123862FDE9945BF9D3E09","maintainer":"wiiaam","location":"SG","status_udp":true,"status_tcp":true,"version":"2016010100","motd":"apt-get install antox","last_ping":1474137098},{"ipv4":"bootybay.club","ipv6":"-","port":33445,"tcp_ports":[3389,33445],"public_key":"0CB9D8D636F8E3D71CF44A3019408A846B7BEDFA2810853355DB58C0A36BFE38","maintainer":"AssPirate","location":"AU","status_udp":true,"status_tcp":true,"version":"2016010100","motd":"tox-bootstrapd","last_ping":1474137098},{"ipv4":"91.121.66.124","ipv6":"2001:41d0:1:757c::1","port":33445,"tcp_ports":[33445],"public_key":"4E3F7D37295664BBD0741B6DBCB6431D6CD77FC4105338C2FC31567BF5C8224A","maintainer":"h4nt3r","location":"FR","status_udp":true,"status_tcp":true,"version":"2016010100","motd":"tox id for queries and general info: 3BC3C6875508A2EC86BE3E35E4FA9155E444CFA96671AE7D7D0D2585A0A5FA38E071A5E463E5","last_ping":1474137097},{"ipv4":"195.93.190.6","ipv6":"2a01:d0:ffff:a8a::2","port":33445,"tcp_ports":[33445],"public_key":"FB4CE0DDEFEED45F26917053E5D24BDDA0FA0A3D83A672A9DA2375928B37023D","maintainer":"strngr","location":"UA","status_udp":true,"status_tcp":true,"version":"","motd":"","last_ping":1474137105},{"ipv4":"loki.uplinklabs.net","ipv6":"loki.uplinklabs.net","port":33445,"tcp_ports":[3389,33445],"public_key":"1A56EA3EDF5DF4C0AEABBF3C2E4E603890F87E983CAC8A0D532A335F2C6E3E1F","maintainer":"AbacusAvenger","location":"US","status_udp":true,"status_tcp":true,"version":"2016010100","motd":"tox-bootstrapd","last_ping":1474137098},{"ipv4":"95.215.44.78","ipv6":"2a02:7aa0:1619::c6fe:d0cb","port":33445,"tcp_ports":[33445,3389],"public_key":"672DBE27B4ADB9D5FB105A6BB648B2F8FDB89B3323486A7A21968316E012023C","maintainer":"HooinKyoma","location":"SE","status_udp":true,"status_tcp":true,"version":"2016010100","motd":"Thanx to Hooin Kyoma","last_ping":1474137098},{"ipv4":"tox.ntp.moscow","ipv6":"tox.ntp.moscow","port":33445,"tcp_ports":[33445,3389],"public_key":"80EF8660D9C5ACE1577BAB031375A0F08284CBFD9F810A857955DCC87377FC4D","maintainer":"abbat","location":"RU","status_udp":true,"status_tcp":true,"version":"2016010100","motd":"tox-easy-bootstrap","last_ping":1474137098},{"ipv4":"146.185.136.123","ipv6":"2a03:b0c0:0:1010::389:1","port":33445,"tcp_ports":[33445,443,3389],"public_key":"09993FAF174DFFDC515B398A2EFC5639C4E6D7B736FC864F89786B50EAF88C1A","maintainer":"LittleVulpix","location":"NL","status_udp":true,"status_tcp":true,"version":"2016010100","motd":"LittleTox - your friendly neighbourhood tox node from the land of windmills!","last_ping":1474137097},{"ipv4":"163.172.136.118","ipv6":"2001:bc8:4400:2100::1c:50f","port":33445,"tcp_ports":[33445,3389],"public_key":"2C289F9F37C20D09DA83565588BF496FAB3764853FA38141817A72E3F18ACA0B","maintainer":"LittleVulpix","location":"FR","status_udp":true,"status_tcp":true,"version":"2016010100","motd":"LittleTox - your friendly neighbourhood tox node!","last_ping":1474137097},{"ipv4":"37.97.185.116","ipv6":"-","port":33445,"tcp_ports":[33445],"public_key":"E59A0E71ADA20D35BD1B0957059D7EF7E7792B3D680AE25C6F4DBBA09114D165","maintainer":"Yani","location":"NL","status_udp":true,"status_tcp":true,"version":"2016010100","motd":"Yani's node of pleasure and leisure","last_ping":1474137097},{"ipv4":"193.124.186.205","ipv6":"2a02:f680:1:1100::542a","port":5228,"tcp_ports":[443,3389,33445],"public_key":"9906D65F2A4751068A59D30505C5FC8AE1A95E0843AE9372EAFA3BAB6AC16C2C","maintainer":"Cactus","location":"RU","status_udp":true,"status_tcp":true,"version":"2016010100","motd":"tox-bootstrapd","last_ping":1474137098},{"ipv4":"80.87.193.193","ipv6":"2a01:230:2:6::46a8","port":33445,"tcp_ports":[33445,3389],"public_key":"B38255EE4B054924F6D79A5E6E5889EC94B6ADF6FE9906F97A3D01E3D083223A","maintainer":"linxon","location":"RU","status_udp":true,"status_tcp":true,"version":"2016010100","motd":"Free Linxon's TOX Bootstrap node","last_ping":1474137098},{"ipv4":"initramfs.io","ipv6":"-","port":33445,"tcp_ports":[33445,3389],"public_key":"3F0A45A268367C1BEA652F258C85F4A66DA76BCAA667A49E770BCC4917AB6A25","maintainer":"initramfs","location":"TW","status_udp":true,"status_tcp":true,"version":"2016010100","motd":"initramfs' Tox DHT Node","last_ping":1474137099},{"ipv4":"tox.neverlocate.me","ipv6":"-","port":33445,"tcp_ports":[33445],"public_key":"49183DBF0E865713154069D1C7C7A2732ED78CF32C4D76AF5304FE31C5FEB81A","maintainer":"brandon","location":"US","status_udp":true,"status_tcp":true,"version":"2016010100","motd":"tox-bootstrapd","last_ping":1474137102},{"ipv4":"shigure.eve.moe","ipv6":"shigure.eve.moe","port":33445,"tcp_ports":[3389,33445],"public_key":"1A480A53FAF2CBBFCC382D786C43E69EEE23F22C7C23A7CFEB6180A373E23E54","maintainer":"EveNeko","location":"GB","status_udp":true,"status_tcp":true,"version":"2016010100","motd":"tox-bootstrapd@shigure.eve.moe","last_ping":1474137098},{"ipv4":"tox.deadteam.org","ipv6":"tox.deadteam.org","port":33445,"tcp_ports":[33445],"public_key":"C7D284129E83877D63591F14B3F658D77FF9BA9BA7293AEB2BDFBFE1A803AF47","maintainer":"DeadTeam","location":"DE","status_udp":true,"status_tcp":true,"version":"2016010100","motd":"Vive le TOX","last_ping":1474137101},{"ipv4":"prok.pw","ipv6":"-","port":33445,"tcp_ports":[3389,33445],"public_key":"69C3FEBB977687B64FA0213BDEB89A43463BB48DED288150CFFB6429EFF82436","maintainer":"Prototik","location":"RU","status_udp":true,"status_tcp":true,"version":"2016010100","motd":"Have a nice chatting!","last_ping":1474137098},{"ipv4":"maggie.prok.pw","ipv6":"maggie.prok.pw","port":33445,"tcp_ports":[33445,3389],"public_key":"B75583B6D967DB8AD7C6D3B6F9318194BCC79B2FEF18F69E2DF275B779E7AA30","maintainer":"Prototik","location":"DE","status_udp":true,"status_tcp":true,"version":"2016010100","motd":"Maggie wants a pacifier","last_ping":1474137101},{"ipv4":"108.61.165.198","ipv6":"2001:19f0:5000:8121:5054:ff:fe1c:9ded","port":33445,"tcp_ports":[],"public_key":"8E7D0B859922EF569298B4D261A8CCB5FEA14FB91ED412A7603A585A25698832","maintainer":"ray65536","location":"NL","status_udp":true,"status_tcp":false,"version":"2016010100","motd":"Ray's Tox Node","last_ping":1474137101},{"ipv4":"92.54.84.70","ipv6":"-","port":33445,"tcp_ports":[],"public_key":"5625A62618CB4FCA70E147A71B29695F38CC65FF0CBD68AD46254585BE564802","maintainer":"t3mp","location":"RU","status_udp":true,"status_tcp":false,"version":"2016010100","motd":"tox-bootstrapd","last_ping":1474137102},{"ipv4":"srv1.ricin.im","ipv6":"-","port":1337,"tcp_ports":[],"public_key":"3651DAB570D7F60381F87B19D6935EE7F5FE01308DCE71C4B69993150C6A903C","maintainer":"Ricin.im","location":"FR","status_udp":true,"status_tcp":false,"version":"2016010100","motd":"Ricin.im Tox node. Enjoy babes \u003c3","last_ping":1474137101},{"ipv4":"46.101.197.175","ipv6":"2a03:b0c0:3:d0::ac:5001","port":443,"tcp_ports":[443,33445,3389],"public_key":"CD133B521159541FB1D326DE9850F5E56A6C724B5B8E5EB5CD8D950408E95707","maintainer":"clearmartin","location":"DE","status_udp":false,"status_tcp":true,"version":"","motd":"","last_ping":1474137105},{"ipv4":"toxnode.nek0.net","ipv6":"toxnode.nek0.net","port":33445,"tcp_ports":[3389,33445],"public_key":"20965721D32CE50C3E837DD75B33908B33037E6225110BFF209277AEAF3F9639","maintainer":"Phsm","location":"UA","status_udp":false,"status_tcp":true,"version":"","motd":"","last_ping":1474137107},{"ipv4":"sorunome.de","ipv6":"sorunome.de","port":33445,"tcp_ports":[33445,3389],"public_key":"02807CF4F8BB8FB390CC3794BDF1E8449E9A8392C5D3F2200019DA9F1E812E46","maintainer":"Sorunome","location":"DE","status_udp":false,"status_tcp":true,"version":"","motd":"","last_ping":1474137105},{"ipv4":"hibiki.eve.moe","ipv6":"hibiki.eve.moe","port":33445,"tcp_ports":[33445],"public_key":"D3EB45181B343C2C222A5BCF72B760638E15ED87904625AAD351C594EEFAE03E","maintainer":"EveNeko","location":"US","status_udp":false,"status_tcp":true,"version":"","motd":"","last_ping":1474137098},{"ipv4":"46.229.52.198","ipv6":"-","port":33445,"tcp_ports":[33445],"public_key":"813C8F4187833EF0655B10F7752141A352248462A567529A38B6BBF73E979307","maintainer":"Stranger","location":"UA","status_udp":false,"status_tcp":true,"version":"","motd":"","last_ping":1474137109},{"ipv4":"144.76.60.215","ipv6":"2a01:4f8:191:64d6::1","port":33445,"tcp_ports":[],"public_key":"04119E835DF3E78BACF0F84235B300546AF8B936F035185E2A8E9E0A67C8924F","maintainer":"sonOfRa","location":"DE","status_udp":false,"status_tcp":false,"version":"","motd":"","last_ping":0},{"ipv4":"195.154.119.113","ipv6":"2001:bc8:3698:101::1","port":33445,"tcp_ports":[],"public_key":"E398A69646B8CEACA9F0B84F553726C1C49270558C57DF5F3C368F05A7D71354","maintainer":"Munrek","location":"FR","status_udp":false,"status_tcp":false,"version":"","motd":"","last_ping":0},{"ipv4":"46.38.239.179","ipv6":"-","port":33445,"tcp_ports":[],"public_key":"F5A1A38EFB6BD3C2C8AF8B10D85F0F89E931704D349F1D0720C3C4059AF2440A","maintainer":"MartinSchröder","location":"DE","status_udp":false,"status_tcp":false,"version":"","motd":"","last_ping":0},{"ipv4":"104.167.101.29","ipv6":"-","port":33445,"tcp_ports":[],"public_key":"5918AC3C06955962A75AD7DF4F80A5D7C34F7DB9E1498D2E0495DE35B3FE8A57","maintainer":"noisykeyboard","location":"CA","status_udp":false,"status_tcp":false,"version":"","motd":"","last_ping":0},{"ipv4":"80.232.246.79","ipv6":"-","port":33445,"tcp_ports":[],"public_key":"CF6CECA0A14A31717CC8501DA51BE27742B70746956E6676FF423A529F91ED5D","maintainer":"fUNKIAM","location":"LV","status_udp":false,"status_tcp":false,"version":"","motd":"","last_ping":0},{"ipv4":"104.233.104.126","ipv6":"-","port":33445,"tcp_ports":[],"public_key":"EDEE8F2E839A57820DE3DA4156D88350E53D4161447068A3457EE8F59F362414","maintainer":"wildermesser","location":"CA","status_udp":false,"status_tcp":false,"version":"","motd":"","last_ping":0},{"ipv4":"home.vikingmakt.com.br","ipv6":"-","port":33445,"tcp_ports":[],"public_key":"188E072676404ED833A4E947DC1D223DF8EFEBE5F5258573A236573688FB9761","maintainer":"umgeher","location":"BR","status_udp":false,"status_tcp":false,"version":"","motd":"","last_ping":0},{"ipv4":"188.244.38.183","ipv6":"2001:470:de00:2:20c:29ff:fe68:354f","port":33445,"tcp_ports":[],"public_key":"15A0F9684E2423F9F46CFA5A50B562AE42525580D840CC50E518192BF333EE38","maintainer":"gem","location":"RU","status_udp":false,"status_tcp":false,"version":"","motd":"","last_ping":0},{"ipv4":"mrflibble.c4.ee","ipv6":"2a02:16e0:0:12::4","port":33445,"tcp_ports":[],"public_key":"FAAB17014F42F7F20949F61E55F66A73C230876812A9737F5F6D2DCE4D9E4207","maintainer":"mrflibble","location":"GB","status_udp":false,"status_tcp":false,"version":"","motd":"","last_ping":0},{"ipv4":"82.211.31.116","ipv6":"-","port":33445,"tcp_ports":[],"public_key":"AF97B76392A6474AF2FD269220FDCF4127D86A42EF3A242DF53A40A268A2CD7C","maintainer":"Net.Verified","location":"RU","status_udp":false,"status_tcp":false,"version":"","motd":"","last_ping":0},{"ipv4":"tox1.privacydragon.me","ipv6":"-","port":33445,"tcp_ports":[],"public_key":"31910C0497D347FF160D6F3A6C0E317BAFA71E8E03BC4CBB2A185C9D4FB8B31E","maintainer":"PrivacyDragon","location":"US","status_udp":false,"status_tcp":false,"version":"","motd":"","last_ping":0},{"ipv4":"zawertun.net","ipv6":"-","port":33445,"tcp_ports":[],"public_key":"5521952892FBD5C185DF7180DB4DEF69D7844DEEE79B1F75A634ED9DF656756E","maintainer":"ZaWertun","location":"NL","status_udp":false,"status_tcp":false,"version":"","motd":"","last_ping":0},{"ipv4":"87.98.168.93","ipv6":"-","port":33445,"tcp_ports":[],"public_key":"C3F6C06A624FAE086DA94604A7838DB495769807EC055FADA36EBF2D4484FB33","maintainer":"_kinka_","location":"ES","status_udp":false,"status_tcp":false,"version":"","motd":"","last_ping":0},{"ipv4":"185.61.253.189","ipv6":"2a04:ee00:0:9:20c:29ff:fe27:ad96","port":33445,"tcp_ports":[],"public_key":"73EEBCB4CBBE56BF0E0F01881DDD88C6B250BAE92CF487BE3FBE02FD830CE200","maintainer":"MAXL-SPB","location":"RU","status_udp":false,"status_tcp":false,"version":"","motd":"","last_ping":0},{"ipv4":"109.75.40.105","ipv6":"2001:470:70d6::1","port":33445,"tcp_ports":[],"public_key":"2B9CD794424FD579044EC2FC5252B23DF8B4AAF239C25074F70B1090C3F8C83A","maintainer":"nek","location":"AM","status_udp":false,"status_tcp":false,"version":"","motd":"","last_ping":0},{"ipv4":"185.120.34.64","ipv6":"2a06:8ec0:1:bb::3862","port":33445,"tcp_ports":[],"public_key":"728925473812C7AAC482BE7250BCCAD0B8CB9F737BF3D42ABD34459C1768F854","maintainer":"Kostik","location":"GB","status_udp":false,"status_tcp":false,"version":"","motd":"","last_ping":0}]} diff --git a/src/bootstrap.c b/src/bootstrap.c index adb4e76..0d45e33 100644 --- a/src/bootstrap.c +++ b/src/bootstrap.c @@ -1,7 +1,7 @@ /* bootstrap.c * * - * Copyright (C) 2014 Toxic All Rights Reserved. + * Copyright (C) 2016 Toxic All Rights Reserved. * * This file is part of Toxic. * @@ -37,11 +37,23 @@ extern struct arg_opts arg_opts; /* Time to wait between bootstrap attempts */ #define TRY_BOOTSTRAP_INTERVAL 5 +#define IPv4_MAX_SIZE 64 +#define PORT_MAX_SIZE 5 -#define MIN_NODE_LINE 50 /* IP: 7 + port: 5 + key: 38 + spaces: 2 = 70. ! (& e.g. tox.chat = 8) */ -#define MAX_NODE_LINE 256 /* Approx max number of chars in a sever line (name + port + key) */ +#define IPV4_JSON_VALUE "\"ipv4\":\"" +#define IPV4_JSON_VALUE_LEN (sizeof(IPV4_JSON_VALUE) - 1) + +#define PORT_JSON_VALUE "\"port\":" +#define PORT_JSON_VALUE_LEN (sizeof(PORT_JSON_VALUE) - 1) + +#define KEY_JSON_VALUE "\"public_key\":\"" +#define KEY_JSON_VALUE_LEN (sizeof(KEY_JSON_VALUE) - 1) + +#define MIN_NODE_LINE 50 /* IP: 7 + port: 5 + key: 38 + spaces: 2 = 70. ! (& e.g. tox.chat = 8) */ +#define MAX_NODE_LINE 300 /* Max number of chars in a sever line (name + port + key) */ #define MAXNODES 50 #define NODELEN (MAX_NODE_LINE - TOX_PUBLIC_KEY_SIZE - 7) +#define MAX_NODELIST_SIZE (1024 * MAXNODES) static struct toxNodes { size_t lines; @@ -50,67 +62,104 @@ static struct toxNodes { char keys[MAXNODES][TOX_PUBLIC_KEY_SIZE]; } toxNodes; -/* Load the DHT nodelist to memory. +/* Load the DHT nodelist to memory from json formatted nodes file obtained at https://nodes.tox.chat/json. * * Return 0 on success. * Return -1 if nodelist file cannot be opened. - * Return -2 if nodelist file does not contain any valid node entries. + * Return -2 if nodelist file cannot be parsed. + * Return -3 if nodelist file does not contain any valid node entries. */ int load_DHT_nodelist(void) { - const char *filename = !arg_opts.nodes_path[0] ? PACKAGE_DATADIR "/DHTnodes" : arg_opts.nodes_path; - FILE *fp = fopen(filename, "r"); if (fp == NULL) return -1; - char line[MAX_NODE_LINE]; + char line[MAX_NODELIST_SIZE]; - while (fgets(line, sizeof(line), fp) && toxNodes.lines < MAXNODES) { - size_t line_len = strlen(line); + if (fgets(line, sizeof(line), fp) == NULL) { + return -2; + } - if (line_len >= MIN_NODE_LINE && line_len <= MAX_NODE_LINE) { - const char *name = strtok(line, " "); - const char *port_str = strtok(NULL, " "); - const char *key_ascii = strtok(NULL, " "); + const char *line_start = line; - if (name == NULL || port_str == NULL || key_ascii == NULL) - continue; + while ((line_start = strstr(line_start + 1, IPV4_JSON_VALUE)) && toxNodes.lines < MAXNODES) { + /* Extract IPv4 address */ + const char *ip_start = strstr(line_start, IPV4_JSON_VALUE); - long int port = strtol(port_str, NULL, 10); - - if (port <= 0 || port > MAX_PORT_RANGE) - continue; - - size_t key_len = strlen(key_ascii); - size_t name_len = strlen(name); - - if (key_len < TOX_PUBLIC_KEY_SIZE * 2 || name_len >= NODELEN) - continue; - - snprintf(toxNodes.nodes[toxNodes.lines], sizeof(toxNodes.nodes[toxNodes.lines]), "%s", name); - toxNodes.nodes[toxNodes.lines][NODELEN - 1] = 0; - toxNodes.ports[toxNodes.lines] = port; - - /* remove possible trailing newline from key string */ - char real_ascii_key[TOX_PUBLIC_KEY_SIZE * 2 + 1]; - memcpy(real_ascii_key, key_ascii, TOX_PUBLIC_KEY_SIZE * 2); - key_len = TOX_PUBLIC_KEY_SIZE * 2; - real_ascii_key[key_len] = '\0'; - - if (hex_string_to_bin(real_ascii_key, key_len, toxNodes.keys[toxNodes.lines], TOX_PUBLIC_KEY_SIZE) == -1) - continue; - - toxNodes.lines++; + // TODO: These strlen() calls are very inefficient. Should probably keep track of length manually. + if (ip_start == NULL || strlen(ip_start) < IPV4_JSON_VALUE_LEN) { + continue; } + + ip_start += IPV4_JSON_VALUE_LEN; + int ip_len = char_find(0, ip_start, '"'); + + if (ip_len == 0 || ip_len > IPv4_MAX_SIZE) { + continue; + } + + char ipv4_string[ip_len + 1]; + memcpy(ipv4_string, ip_start, ip_len); + ipv4_string[ip_len] = 0; + + /* Extract port */ + const char *port_start = strstr(ip_start, PORT_JSON_VALUE); + + if (!port_start || strlen(port_start) < PORT_JSON_VALUE_LEN) { + continue; + } + + port_start += PORT_JSON_VALUE_LEN; + int port_len = char_find(0, port_start, ','); + + if (port_len == 0 || port_len > PORT_MAX_SIZE) { + continue; + } + + char port_string[port_len + 1]; + memcpy(port_string, port_start, port_len); + port_string[port_len] = 0; + + long int port = strtol(port_string, NULL, 10); + + if (port <= 0 || port > MAX_PORT_RANGE) + continue; + + /* Extract key */ + const char *key_start = strstr(port_start, KEY_JSON_VALUE); + + if (!key_start || strlen(key_start) < KEY_JSON_VALUE_LEN) { + continue; + } + + key_start += KEY_JSON_VALUE_LEN; + int key_len = char_find(0, key_start, '"'); + + if (key_len != TOX_PUBLIC_KEY_SIZE * 2) { + continue; + } + + char key_string[TOX_PUBLIC_KEY_SIZE * 2 + 1]; + memcpy(key_string, key_start, TOX_PUBLIC_KEY_SIZE * 2); + key_string[TOX_PUBLIC_KEY_SIZE * 2] = 0; + + /* Add IP-Port-Key to nodes list */ + snprintf(toxNodes.nodes[toxNodes.lines], sizeof(toxNodes.nodes[toxNodes.lines]), "%s", ipv4_string); + toxNodes.ports[toxNodes.lines] = port; + + if (hex_string_to_bin(key_string, key_len, toxNodes.keys[toxNodes.lines], TOX_PUBLIC_KEY_SIZE) == -1) + continue; + + toxNodes.lines++; } fclose(fp); if (toxNodes.lines == 0) - return -2; + return -3; return 0; } diff --git a/src/bootstrap.h b/src/bootstrap.h index f442ce2..e3dfab5 100644 --- a/src/bootstrap.h +++ b/src/bootstrap.h @@ -1,7 +1,7 @@ /* bootstrap.h * * - * Copyright (C) 2014 Toxic All Rights Reserved. + * Copyright (C) 2016 Toxic All Rights Reserved. * * This file is part of Toxic. * @@ -23,10 +23,11 @@ /* Manages connection to the Tox DHT network. */ void do_tox_connection(Tox *m); -/* Load the DHT nodelist to memory. +/* Load the DHT nodelist to memory from json formatted nodes file obtained attempts https://nodes.tox.chat/json. * * Return 0 on success. * Return -1 if nodelist file cannot be opened. - * Return -2 if nodelist file does not contain any valid node entries. + * Return -2 if nodelist file cannot be parsed. + * Return -3 if nodelist file does not contain any valid node entries. */ int load_DHT_nodelist(void); diff --git a/src/misc_tools.c b/src/misc_tools.c index b737a7c..438e748 100644 --- a/src/misc_tools.c +++ b/src/misc_tools.c @@ -367,9 +367,13 @@ size_t copy_tox_str(char *msg, size_t size, const char *data, size_t length) } /* returns index of the first instance of ch in s starting at idx. - returns length of s if char not found */ + returns length of s if char not found or 0 if s is NULL. */ int char_find(int idx, const char *s, char ch) { + if (!s) { + return 0; + } + int i = idx; for (i = idx; s[i]; ++i) { @@ -381,9 +385,13 @@ int char_find(int idx, const char *s, char ch) } /* returns index of the last instance of ch in s starting at len. - returns 0 if char not found (skips 0th index). */ + returns 0 if char not found or s is NULL (skips 0th index). */ int char_rfind(const char *s, char ch, int len) { + if (!s) { + return 0; + } + int i = 0; for (i = len; i > 0; --i) { diff --git a/src/misc_tools.h b/src/misc_tools.h index f4875b8..8d109a3 100644 --- a/src/misc_tools.h +++ b/src/misc_tools.h @@ -136,11 +136,11 @@ int get_group_nick_truncate(Tox *m, char *buf, int peernum, int groupnum); size_t copy_tox_str(char *msg, size_t size, const char *data, size_t length); /* returns index of the first instance of ch in s starting at idx. - returns length of s if char not found */ + returns length of s if char not found or 0 if s is NULL. */ int char_find(int idx, const char *s, char ch); -/* returns index of the last instance of ch in s - returns 0 if char not found */ +/* returns index of the last instance of ch in s starting at len. + returns 0 if char not found or s is NULL (skips 0th index). */ int char_rfind(const char *s, char ch, int len); /* Converts bytes to appropriate unit and puts in buf as a string */