mirror of
https://github.com/RetroShare/RetroShare.git
synced 2025-09-22 22:04:53 -04:00
Added small Qt GUI program to test out network connectivity.
This is just the initial check-in much to still do. git-svn-id: http://svn.code.sf.net/p/retroshare/code/branches/v0.5-peernet@4252 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
parent
590ef5bd09
commit
e2a18750c1
9 changed files with 1681 additions and 0 deletions
9
PeerNetQt/src/Notes.txt
Normal file
9
PeerNetQt/src/Notes.txt
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
|
||||||
|
PeerNetQt.
|
||||||
|
|
||||||
|
requires:
|
||||||
|
1) libbitdht.
|
||||||
|
2) tou.
|
||||||
|
3) udp stack.
|
||||||
|
4) forwarding.
|
||||||
|
|
72
PeerNetQt/src/PeerNetQt.pro
Normal file
72
PeerNetQt/src/PeerNetQt.pro
Normal file
|
@ -0,0 +1,72 @@
|
||||||
|
#-------------------------------------------------
|
||||||
|
#
|
||||||
|
# Project created by QtCreator 2011-06-06T19:21:58
|
||||||
|
#
|
||||||
|
#-------------------------------------------------
|
||||||
|
|
||||||
|
TARGET = PeerNetQt
|
||||||
|
TEMPLATE = app
|
||||||
|
|
||||||
|
RCC_DIR = temp/qrc
|
||||||
|
UI_DIR = temp/ui
|
||||||
|
MOC_DIR = temp/moc
|
||||||
|
|
||||||
|
CONFIG += bitdht librs
|
||||||
|
#CONFIG += qt gui uic qrc resources uitools idle bitdht # framecatcher# blogs
|
||||||
|
#QT += network xml script
|
||||||
|
|
||||||
|
SOURCES += main.cpp\
|
||||||
|
mainwindow.cpp \
|
||||||
|
peernet.cc
|
||||||
|
|
||||||
|
HEADERS += mainwindow.h \
|
||||||
|
peernet.h
|
||||||
|
|
||||||
|
FORMS += mainwindow.ui
|
||||||
|
|
||||||
|
|
||||||
|
librs {
|
||||||
|
LIBRS_DIR = ../../libretroshare/src/
|
||||||
|
INCLUDEPATH += $${LIBRS_DIR}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bitdht {
|
||||||
|
BITDHT_DIR = ../../libbitdht/src
|
||||||
|
INCLUDEPATH += . $${BITDHT_DIR}
|
||||||
|
|
||||||
|
# The next line if for compliance with debian packages. Keep it!
|
||||||
|
INCLUDEPATH += ../libbitdht
|
||||||
|
DEFINES *= RS_USE_BITDHT
|
||||||
|
|
||||||
|
LIBS += ../../libbitdht/src/lib/libbitdht.a
|
||||||
|
PRE_TARGETDEPS *= ../../libbitdht/src/lib/libbitdht.a
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
macx {
|
||||||
|
# ENABLE THIS OPTION FOR Univeral Binary BUILD.
|
||||||
|
# CONFIG += ppc x86
|
||||||
|
|
||||||
|
#CONFIG += version_detail_bash_script
|
||||||
|
LIBS += ../../libretroshare/src/lib/libretroshare.a
|
||||||
|
|
||||||
|
LIBS += -lssl -lcrypto -lz -lgpgme -lgpg-error -lassuan
|
||||||
|
LIBS += ../../../miniupnpc-1.0/libminiupnpc.a
|
||||||
|
LIBS += -framework CoreFoundation
|
||||||
|
LIBS += -framework Security
|
||||||
|
|
||||||
|
INCLUDEPATH += .
|
||||||
|
#DEFINES* = MAC_IDLE # for idle feature
|
||||||
|
CONFIG -= uitools
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
############################## Common stuff ######################################
|
||||||
|
|
||||||
|
# On Linux systems that alredy have libssl and libcrypto it is advisable
|
||||||
|
# to rename the patched version of SSL to something like libsslxpgp.a and libcryptoxpg.a
|
||||||
|
|
||||||
|
# ###########################################
|
||||||
|
|
500
PeerNetQt/src/bdboot.txt
Normal file
500
PeerNetQt/src/bdboot.txt
Normal file
|
@ -0,0 +1,500 @@
|
||||||
|
212.139.213.150 11032
|
||||||
|
212.139.213.150 10990
|
||||||
|
85.152.219.110 16300
|
||||||
|
151.64.206.15 26860
|
||||||
|
84.121.123.155 18218
|
||||||
|
193.109.161.129 6881
|
||||||
|
64.121.111.102 29081
|
||||||
|
95.178.41.37 46715
|
||||||
|
99.70.101.170 50784
|
||||||
|
119.203.237.201 46148
|
||||||
|
114.172.79.251 7922
|
||||||
|
24.35.134.70 49031
|
||||||
|
110.201.109.110 16001
|
||||||
|
188.115.181.175 63651
|
||||||
|
85.152.219.110 16466
|
||||||
|
86.101.126.209 45168
|
||||||
|
87.246.21.240 10255
|
||||||
|
79.163.101.143 36097
|
||||||
|
194.247.17.241 22817
|
||||||
|
123.113.36.18 16001
|
||||||
|
188.55.82.33 63068
|
||||||
|
85.152.219.110 16471
|
||||||
|
212.139.213.150 11167
|
||||||
|
84.41.37.179 55364
|
||||||
|
178.72.75.183 53646
|
||||||
|
212.139.213.150 10920
|
||||||
|
195.93.138.193 35691
|
||||||
|
184.57.201.40 49252
|
||||||
|
217.175.171.48 51413
|
||||||
|
85.152.219.110 16277
|
||||||
|
212.139.213.150 10925
|
||||||
|
85.152.219.110 16317
|
||||||
|
121.93.98.221 23082
|
||||||
|
212.139.213.150 10899
|
||||||
|
212.139.213.150 11065
|
||||||
|
81.183.201.252 25094
|
||||||
|
85.152.219.110 16327
|
||||||
|
85.152.219.110 16478
|
||||||
|
85.210.60.130 48512
|
||||||
|
212.139.213.150 10945
|
||||||
|
85.152.219.110 16386
|
||||||
|
212.139.213.150 10869
|
||||||
|
178.149.19.10 55995
|
||||||
|
87.19.184.107 37322
|
||||||
|
85.152.219.110 16382
|
||||||
|
119.152.12.221 53113
|
||||||
|
85.152.219.110 16394
|
||||||
|
2.49.78.158 60971
|
||||||
|
77.243.112.131 33702
|
||||||
|
212.139.213.150 10885
|
||||||
|
212.139.213.150 10905
|
||||||
|
95.30.54.87 36323
|
||||||
|
93.79.180.105 29600
|
||||||
|
212.139.213.150 11128
|
||||||
|
94.228.121.123 59898
|
||||||
|
212.139.213.150 11078
|
||||||
|
88.204.117.27 35691
|
||||||
|
78.176.90.204 34412
|
||||||
|
195.66.100.3 39983
|
||||||
|
81.231.142.85 51709
|
||||||
|
85.172.249.94 26350
|
||||||
|
212.139.213.150 10999
|
||||||
|
212.139.213.150 10857
|
||||||
|
212.139.213.150 11008
|
||||||
|
212.139.213.150 10929
|
||||||
|
89.221.115.221 42474
|
||||||
|
212.139.213.150 10898
|
||||||
|
212.139.213.150 11211
|
||||||
|
92.84.140.193 25245
|
||||||
|
69.245.13.37 52765
|
||||||
|
98.193.26.149 58998
|
||||||
|
76.14.166.121 10553
|
||||||
|
121.215.135.167 11589
|
||||||
|
117.206.235.234 25206
|
||||||
|
87.235.214.29 42817
|
||||||
|
109.173.5.179 16516
|
||||||
|
178.140.91.128 56909
|
||||||
|
72.175.61.150 40290
|
||||||
|
111.241.48.84 54660
|
||||||
|
95.182.88.133 42313
|
||||||
|
93.183.149.239 39456
|
||||||
|
79.173.248.84 1043
|
||||||
|
212.139.213.150 11202
|
||||||
|
212.139.213.150 10937
|
||||||
|
212.139.213.150 11035
|
||||||
|
212.139.213.150 11212
|
||||||
|
119.105.202.44 11184
|
||||||
|
94.178.16.95 16741
|
||||||
|
79.178.121.200 62324
|
||||||
|
78.120.178.227 20444
|
||||||
|
118.36.226.47 45090
|
||||||
|
212.139.213.150 10856
|
||||||
|
85.152.219.110 16504
|
||||||
|
85.152.219.110 16503
|
||||||
|
212.139.213.150 10852
|
||||||
|
85.152.219.110 16402
|
||||||
|
212.139.213.150 11105
|
||||||
|
85.152.219.110 16506
|
||||||
|
85.152.219.110 16509
|
||||||
|
85.232.219.81 18084
|
||||||
|
88.164.58.144 55857
|
||||||
|
82.73.234.131 37018
|
||||||
|
89.38.11.135 51816
|
||||||
|
178.67.37.134 42202
|
||||||
|
85.152.219.110 16511
|
||||||
|
212.139.213.150 11054
|
||||||
|
2.60.177.71 51413
|
||||||
|
94.209.60.137 37161
|
||||||
|
212.139.213.150 11069
|
||||||
|
122.163.55.49 33709
|
||||||
|
110.35.14.46 16394
|
||||||
|
41.240.141.226 58157
|
||||||
|
218.102.151.97 22792
|
||||||
|
112.120.35.208 14845
|
||||||
|
112.134.123.210 46374
|
||||||
|
212.67.133.227 22110
|
||||||
|
85.152.219.110 16408
|
||||||
|
58.0.103.222 13868
|
||||||
|
1.36.170.135 49888
|
||||||
|
118.160.44.124 15529
|
||||||
|
61.219.11.135 12967
|
||||||
|
219.77.101.32 10168
|
||||||
|
123.231.18.70 11935
|
||||||
|
94.23.1.199 45846
|
||||||
|
62.248.204.118 51000
|
||||||
|
99.28.131.130 46291
|
||||||
|
76.121.8.79 16599
|
||||||
|
94.193.177.45 13254
|
||||||
|
91.95.224.125 33937
|
||||||
|
122.161.167.221 22840
|
||||||
|
68.149.78.143 18261
|
||||||
|
94.174.132.84 10493
|
||||||
|
182.89.64.219 4041
|
||||||
|
95.55.22.43 15346
|
||||||
|
84.55.96.240 37839
|
||||||
|
67.82.53.124 5931
|
||||||
|
84.0.215.220 37787
|
||||||
|
81.225.143.195 1256
|
||||||
|
190.189.39.56 27211
|
||||||
|
175.142.195.240 18988
|
||||||
|
59.177.2.234 57683
|
||||||
|
188.220.197.130 51413
|
||||||
|
123.236.87.167 21823
|
||||||
|
118.5.196.178 14373
|
||||||
|
203.253.73.158 29843
|
||||||
|
115.59.105.0 1041
|
||||||
|
66.191.26.174 49995
|
||||||
|
89.147.94.239 38144
|
||||||
|
24.201.212.220 40489
|
||||||
|
184.59.221.228 22428
|
||||||
|
114.46.102.183 16881
|
||||||
|
88.134.99.73 27052
|
||||||
|
94.250.26.27 22979
|
||||||
|
122.178.113.80 58012
|
||||||
|
88.178.72.2 7812
|
||||||
|
98.215.148.74 60357
|
||||||
|
110.164.35.39 44112
|
||||||
|
178.152.0.100 10888
|
||||||
|
212.139.213.150 10972
|
||||||
|
72.200.149.14 15712
|
||||||
|
82.244.138.223 14284
|
||||||
|
82.244.203.153 21428
|
||||||
|
82.232.0.124 9156
|
||||||
|
178.178.240.33 24988
|
||||||
|
212.139.213.150 10943
|
||||||
|
212.139.213.150 11087
|
||||||
|
212.139.213.150 11086
|
||||||
|
92.134.151.100 23522
|
||||||
|
160.114.58.149 37689
|
||||||
|
80.232.240.131 51413
|
||||||
|
91.144.87.105 57933
|
||||||
|
75.119.230.89 1723
|
||||||
|
95.135.73.84 41175
|
||||||
|
118.0.112.234 26755
|
||||||
|
187.15.6.101 58525
|
||||||
|
175.145.223.193 36964
|
||||||
|
94.194.224.35 40927
|
||||||
|
195.138.72.56 35691
|
||||||
|
216.106.197.206 10476
|
||||||
|
188.16.99.201 48712
|
||||||
|
61.196.49.130 53264
|
||||||
|
123.155.206.188 11935
|
||||||
|
122.120.37.152 43097
|
||||||
|
212.139.213.150 11004
|
||||||
|
173.63.78.77 17310
|
||||||
|
89.165.209.72 27145
|
||||||
|
2.60.88.158 61218
|
||||||
|
212.139.213.150 10913
|
||||||
|
71.225.229.119 16709
|
||||||
|
213.37.47.70 20727
|
||||||
|
98.244.167.120 23246
|
||||||
|
173.34.90.46 8222
|
||||||
|
2.104.156.207 26387
|
||||||
|
98.110.89.33 55302
|
||||||
|
80.80.153.149 17610
|
||||||
|
72.213.204.222 33471
|
||||||
|
189.101.32.212 51413
|
||||||
|
118.9.53.170 21739
|
||||||
|
85.227.192.135 40053
|
||||||
|
186.23.58.157 21301
|
||||||
|
212.139.213.150 10930
|
||||||
|
173.56.22.140 51413
|
||||||
|
67.41.137.173 48302
|
||||||
|
212.139.213.150 10895
|
||||||
|
114.38.21.70 11904
|
||||||
|
70.81.118.246 33106
|
||||||
|
72.38.3.58 28012
|
||||||
|
78.29.157.202 52896
|
||||||
|
118.165.101.114 61471
|
||||||
|
84.73.253.37 43354
|
||||||
|
99.99.184.86 55431
|
||||||
|
89.214.191.127 10467
|
||||||
|
122.106.10.173 59931
|
||||||
|
72.27.71.232 11746
|
||||||
|
82.137.212.38 20621
|
||||||
|
60.0.124.214 11935
|
||||||
|
95.171.26.4 52382
|
||||||
|
78.20.54.114 63681
|
||||||
|
80.92.105.91 11255
|
||||||
|
212.139.213.150 11146
|
||||||
|
212.139.213.150 11113
|
||||||
|
212.139.213.150 11124
|
||||||
|
212.139.213.150 10963
|
||||||
|
46.109.115.238 47440
|
||||||
|
2.4.167.74 61574
|
||||||
|
71.58.129.230 41859
|
||||||
|
84.244.4.8 37691
|
||||||
|
213.110.132.160 13564
|
||||||
|
92.244.116.227 34939
|
||||||
|
212.200.207.47 27440
|
||||||
|
24.13.126.175 44715
|
||||||
|
76.89.148.206 28183
|
||||||
|
78.237.125.203 10595
|
||||||
|
62.255.191.244 60457
|
||||||
|
97.118.93.163 16283
|
||||||
|
94.69.47.150 17350
|
||||||
|
99.22.214.100 36244
|
||||||
|
213.107.94.57 55377
|
||||||
|
212.139.213.150 11143
|
||||||
|
78.31.227.221 53171
|
||||||
|
98.113.12.175 41060
|
||||||
|
109.132.186.182 37836
|
||||||
|
2.95.54.76 26871
|
||||||
|
70.120.233.87 60139
|
||||||
|
119.194.58.175 6881
|
||||||
|
202.64.42.71 56584
|
||||||
|
212.139.213.150 11084
|
||||||
|
78.190.140.113 23526
|
||||||
|
194.144.16.142 26935
|
||||||
|
212.139.213.150 10896
|
||||||
|
212.139.213.150 11085
|
||||||
|
92.158.0.211 44981
|
||||||
|
212.139.213.150 11068
|
||||||
|
212.139.213.150 10843
|
||||||
|
212.139.213.150 10900
|
||||||
|
145.236.20.190 52156
|
||||||
|
212.139.213.150 11028
|
||||||
|
112.201.75.180 41616
|
||||||
|
212.139.213.150 10894
|
||||||
|
212.139.213.150 10846
|
||||||
|
212.139.213.150 11197
|
||||||
|
212.139.213.150 10868
|
||||||
|
212.139.213.150 11081
|
||||||
|
88.187.80.252 49180
|
||||||
|
212.139.213.150 11175
|
||||||
|
212.139.213.150 11226
|
||||||
|
81.13.186.186 27652
|
||||||
|
212.139.213.150 11110
|
||||||
|
212.139.213.150 11201
|
||||||
|
212.139.213.150 11213
|
||||||
|
212.139.213.150 11101
|
||||||
|
212.139.213.150 11017
|
||||||
|
212.139.213.150 10936
|
||||||
|
212.139.213.150 10891
|
||||||
|
89.252.227.41 1751
|
||||||
|
212.139.213.150 10870
|
||||||
|
212.139.213.150 11064
|
||||||
|
212.139.213.150 10837
|
||||||
|
212.139.213.150 10941
|
||||||
|
212.139.213.150 10841
|
||||||
|
77.40.134.117 37692
|
||||||
|
213.245.18.98 54416
|
||||||
|
212.139.213.150 11122
|
||||||
|
212.139.213.150 11132
|
||||||
|
212.139.213.150 11127
|
||||||
|
212.139.213.150 10838
|
||||||
|
212.139.213.150 11005
|
||||||
|
212.139.213.150 11092
|
||||||
|
212.139.213.150 11013
|
||||||
|
87.58.253.222 6881
|
||||||
|
212.139.213.150 11219
|
||||||
|
212.139.213.150 11224
|
||||||
|
93.183.159.227 15234
|
||||||
|
109.8.252.86 26646
|
||||||
|
24.118.215.76 7000
|
||||||
|
192.117.97.129 21181
|
||||||
|
119.240.201.43 33331
|
||||||
|
203.142.185.144 27235
|
||||||
|
119.109.89.98 16001
|
||||||
|
212.139.213.150 10983
|
||||||
|
81.82.209.160 45974
|
||||||
|
75.84.23.196 48501
|
||||||
|
76.19.133.240 60301
|
||||||
|
212.139.213.150 11152
|
||||||
|
69.47.128.239 60159
|
||||||
|
109.86.99.249 11362
|
||||||
|
77.38.174.41 58764
|
||||||
|
109.195.211.3 40416
|
||||||
|
95.57.36.113 27439
|
||||||
|
114.164.15.235 6882
|
||||||
|
109.203.147.188 31679
|
||||||
|
212.139.213.150 10956
|
||||||
|
85.152.219.110 16373
|
||||||
|
85.152.219.110 16375
|
||||||
|
85.152.219.110 16374
|
||||||
|
212.139.213.150 10923
|
||||||
|
212.139.213.150 10909
|
||||||
|
212.139.213.150 11002
|
||||||
|
85.152.219.110 16378
|
||||||
|
212.139.213.150 11188
|
||||||
|
212.139.213.150 10848
|
||||||
|
85.152.219.110 16383
|
||||||
|
151.66.162.65 23067
|
||||||
|
85.152.219.110 16387
|
||||||
|
212.139.213.150 11193
|
||||||
|
85.152.219.110 16389
|
||||||
|
212.139.213.150 10977
|
||||||
|
85.152.219.110 16392
|
||||||
|
212.139.213.150 11038
|
||||||
|
212.139.213.150 11147
|
||||||
|
189.60.244.233 15861
|
||||||
|
85.152.219.110 16397
|
||||||
|
212.139.213.150 10971
|
||||||
|
212.139.213.150 10893
|
||||||
|
85.152.219.110 16404
|
||||||
|
85.152.219.110 16418
|
||||||
|
212.139.213.150 10984
|
||||||
|
212.139.213.150 10962
|
||||||
|
212.139.213.150 10839
|
||||||
|
85.152.219.110 16429
|
||||||
|
212.139.213.150 10874
|
||||||
|
85.152.219.110 16437
|
||||||
|
212.139.213.150 10955
|
||||||
|
89.169.104.162 51800
|
||||||
|
212.139.213.150 11136
|
||||||
|
94.113.169.223 20959
|
||||||
|
85.152.219.110 16444
|
||||||
|
212.139.213.150 10917
|
||||||
|
212.139.213.150 11063
|
||||||
|
85.152.219.110 16449
|
||||||
|
212.139.213.150 11050
|
||||||
|
123.228.132.214 59802
|
||||||
|
212.139.213.150 10912
|
||||||
|
212.139.213.150 10966
|
||||||
|
85.152.219.110 16452
|
||||||
|
212.139.213.150 10987
|
||||||
|
212.139.213.150 10924
|
||||||
|
212.139.213.150 10847
|
||||||
|
85.152.219.110 16459
|
||||||
|
89.178.249.16 46584
|
||||||
|
46.32.50.107 6881
|
||||||
|
95.168.230.154 1210
|
||||||
|
113.146.92.42 51413
|
||||||
|
212.139.213.150 10866
|
||||||
|
77.123.47.213 35741
|
||||||
|
111.233.229.16 14221
|
||||||
|
89.201.255.71 21940
|
||||||
|
99.238.211.18 58061
|
||||||
|
112.201.14.0 10301
|
||||||
|
85.152.219.110 16461
|
||||||
|
212.139.213.150 11042
|
||||||
|
94.21.183.178 29943
|
||||||
|
212.139.213.150 10978
|
||||||
|
212.139.213.150 11102
|
||||||
|
84.60.60.147 49860
|
||||||
|
79.136.239.71 16688
|
||||||
|
212.139.213.150 11121
|
||||||
|
88.77.94.222 49860
|
||||||
|
24.1.118.110 27704
|
||||||
|
93.145.89.34 53568
|
||||||
|
85.152.219.110 16464
|
||||||
|
178.73.200.28 45416
|
||||||
|
112.221.10.75 11811
|
||||||
|
212.139.213.150 11010
|
||||||
|
142.161.67.218 50221
|
||||||
|
98.250.169.93 30165
|
||||||
|
88.170.61.126 7465
|
||||||
|
76.28.161.135 64289
|
||||||
|
113.11.4.87 39907
|
||||||
|
27.186.73.219 9371
|
||||||
|
212.139.213.150 10994
|
||||||
|
85.152.219.110 16297
|
||||||
|
212.139.213.150 11022
|
||||||
|
93.116.164.129 32793
|
||||||
|
212.139.213.150 10833
|
||||||
|
95.102.83.196 22931
|
||||||
|
85.152.219.110 16465
|
||||||
|
212.139.213.150 11060
|
||||||
|
82.224.136.52 7812
|
||||||
|
212.139.213.150 11107
|
||||||
|
61.18.118.141 20822
|
||||||
|
85.152.219.110 16299
|
||||||
|
69.76.140.34 16157
|
||||||
|
212.139.213.150 10985
|
||||||
|
212.139.213.150 11046
|
||||||
|
86.58.76.161 44032
|
||||||
|
87.151.74.145 53760
|
||||||
|
80.94.245.157 43332
|
||||||
|
117.196.105.164 15076
|
||||||
|
212.139.213.150 10948
|
||||||
|
173.74.237.177 59850
|
||||||
|
95.25.98.209 40615
|
||||||
|
87.110.2.78 38633
|
||||||
|
79.119.105.174 58851
|
||||||
|
85.152.219.110 16302
|
||||||
|
89.73.211.60 60335
|
||||||
|
212.139.213.150 10836
|
||||||
|
177.16.80.162 40000
|
||||||
|
74.232.225.202 50908
|
||||||
|
212.139.213.150 11067
|
||||||
|
94.137.247.253 52053
|
||||||
|
95.73.252.250 13214
|
||||||
|
85.152.219.110 16467
|
||||||
|
212.139.213.150 11062
|
||||||
|
212.139.213.150 11214
|
||||||
|
196.205.236.76 23958
|
||||||
|
212.139.213.150 11048
|
||||||
|
85.152.219.110 16291
|
||||||
|
212.139.213.150 10961
|
||||||
|
212.139.213.150 10897
|
||||||
|
85.152.219.110 16309
|
||||||
|
212.139.213.150 11218
|
||||||
|
212.139.213.150 10944
|
||||||
|
85.152.219.110 16311
|
||||||
|
212.139.213.150 11015
|
||||||
|
212.139.213.150 11000
|
||||||
|
178.162.242.146 37592
|
||||||
|
212.139.213.150 11161
|
||||||
|
85.152.219.110 16319
|
||||||
|
212.139.213.150 11189
|
||||||
|
212.139.213.150 11033
|
||||||
|
94.190.83.102 33102
|
||||||
|
212.139.213.150 11044
|
||||||
|
212.139.213.150 11144
|
||||||
|
85.152.219.110 16322
|
||||||
|
212.139.213.150 10991
|
||||||
|
212.139.213.150 10975
|
||||||
|
85.152.219.110 16324
|
||||||
|
212.139.213.150 11049
|
||||||
|
85.152.219.110 16295
|
||||||
|
212.139.213.150 11134
|
||||||
|
212.139.213.150 11183
|
||||||
|
85.152.219.110 16284
|
||||||
|
212.139.213.150 11135
|
||||||
|
85.152.219.110 16339
|
||||||
|
212.139.213.150 11168
|
||||||
|
85.152.219.110 16343
|
||||||
|
212.139.213.150 11115
|
||||||
|
212.139.213.150 11047
|
||||||
|
212.139.213.150 10884
|
||||||
|
212.139.213.150 11210
|
||||||
|
85.152.219.110 16469
|
||||||
|
212.139.213.150 11108
|
||||||
|
213.119.89.134 37949
|
||||||
|
212.139.213.150 10919
|
||||||
|
212.139.213.150 11198
|
||||||
|
212.139.213.150 11220
|
||||||
|
88.168.14.141 46232
|
||||||
|
212.139.213.150 11205
|
||||||
|
212.139.213.150 11114
|
||||||
|
212.139.213.150 10952
|
||||||
|
212.139.213.150 11095
|
||||||
|
212.139.213.150 11207
|
||||||
|
212.139.213.150 11082
|
||||||
|
212.139.213.150 10851
|
||||||
|
212.139.213.150 11160
|
||||||
|
212.139.213.150 11109
|
||||||
|
212.139.213.150 11184
|
||||||
|
212.139.213.150 10926
|
||||||
|
212.139.213.150 10844
|
||||||
|
212.139.213.150 10916
|
||||||
|
118.11.81.144 55695
|
||||||
|
212.139.213.150 11153
|
||||||
|
212.139.213.150 10875
|
||||||
|
212.139.213.150 10871
|
||||||
|
212.139.213.150 11204
|
||||||
|
212.139.213.150 10865
|
||||||
|
212.139.213.150 11014
|
||||||
|
212.139.213.150 11229
|
||||||
|
212.139.213.150 11179
|
||||||
|
212.139.213.150 11001
|
||||||
|
212.139.213.150 11029
|
||||||
|
212.139.213.150 10853
|
||||||
|
212.139.213.150 10927
|
||||||
|
212.139.213.150 11140
|
||||||
|
212.139.213.150 11129
|
||||||
|
212.139.213.150 11099
|
||||||
|
212.139.213.150 10969
|
||||||
|
212.139.213.150 10921
|
||||||
|
212.139.213.150 11185
|
24
PeerNetQt/src/main.cpp
Normal file
24
PeerNetQt/src/main.cpp
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
#include <QtGui/QApplication>
|
||||||
|
#include "mainwindow.h"
|
||||||
|
#include "peernet.h"
|
||||||
|
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
QApplication a(argc, argv);
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __APPLE__
|
||||||
|
PeerNet pnet("", "../..", 0); // This is because of the apple APP structure.
|
||||||
|
#else
|
||||||
|
PeerNet pnet("", ".", 0);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
MainWindow w;
|
||||||
|
w.show();
|
||||||
|
|
||||||
|
w.setPeerNet(&pnet);
|
||||||
|
|
||||||
|
|
||||||
|
return a.exec();
|
||||||
|
}
|
263
PeerNetQt/src/mainwindow.cpp
Normal file
263
PeerNetQt/src/mainwindow.cpp
Normal file
|
@ -0,0 +1,263 @@
|
||||||
|
#include "mainwindow.h"
|
||||||
|
#include "ui_mainwindow.h"
|
||||||
|
#include <QTimer>
|
||||||
|
|
||||||
|
#include <sstream>
|
||||||
|
#include <iostream>
|
||||||
|
#include <iomanip>
|
||||||
|
|
||||||
|
MainWindow::MainWindow(QWidget *parent) :
|
||||||
|
QMainWindow(parent),
|
||||||
|
ui(new Ui::MainWindow)
|
||||||
|
{
|
||||||
|
ui->setupUi(this);
|
||||||
|
|
||||||
|
// tick for gui update.
|
||||||
|
QTimer *timer = new QTimer(this);
|
||||||
|
connect(timer, SIGNAL(timeout()), this, SLOT(update()));
|
||||||
|
timer->start(1000);
|
||||||
|
|
||||||
|
// connect add Peer button.
|
||||||
|
connect(ui->addButton, SIGNAL(clicked()), this, SLOT(addPeer()));
|
||||||
|
}
|
||||||
|
|
||||||
|
MainWindow::~MainWindow()
|
||||||
|
{
|
||||||
|
delete ui;
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::changeEvent(QEvent *e)
|
||||||
|
{
|
||||||
|
QMainWindow::changeEvent(e);
|
||||||
|
switch (e->type()) {
|
||||||
|
case QEvent::LanguageChange:
|
||||||
|
ui->retranslateUi(this);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::setPeerNet(PeerNet *pnet)
|
||||||
|
{
|
||||||
|
mPeerNet = pnet;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void MainWindow::update()
|
||||||
|
{
|
||||||
|
//std::cerr << "MainWindow::update()" << std::endl;
|
||||||
|
updateNetStatus();
|
||||||
|
updateDhtPeers();
|
||||||
|
updateNetPeers();
|
||||||
|
updateChat();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void MainWindow::updateNetStatus()
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#define DTW_COL_BUCKET 0
|
||||||
|
#define DTW_COL_IPADDR 1
|
||||||
|
#define DTW_COL_PEERID 2
|
||||||
|
#define DTW_COL_FLAGS 3
|
||||||
|
#define DTW_COL_FOUND 4
|
||||||
|
#define DTW_COL_SEND 5
|
||||||
|
#define DTW_COL_RECV 6
|
||||||
|
|
||||||
|
void MainWindow::updateDhtPeers()
|
||||||
|
{
|
||||||
|
|
||||||
|
/* Hackish display of all Dht peers, should be split into buckets (as children) */
|
||||||
|
|
||||||
|
bdNodeId ownId;
|
||||||
|
mPeerNet->getOwnId(&ownId);
|
||||||
|
|
||||||
|
QString status = QString::fromStdString(mPeerNet->getDhtStatusString());
|
||||||
|
ui->dhtLabel->setText(status);
|
||||||
|
|
||||||
|
std::list<bdPeer> allpeers;
|
||||||
|
std::list<bdPeer>::iterator it;
|
||||||
|
int i;
|
||||||
|
for(i = 0; i < 160; i++)
|
||||||
|
{
|
||||||
|
bdBucket peers;
|
||||||
|
mPeerNet->get_dht_peers(i, peers);
|
||||||
|
|
||||||
|
for(it = peers.entries.begin(); it != peers.entries.end(); it++)
|
||||||
|
{
|
||||||
|
allpeers.push_back(*it);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
QTreeWidget *dhtTreeWidget = ui->dhtTreeWidget;
|
||||||
|
|
||||||
|
dhtTreeWidget->clear();
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
/* clear old entries */
|
||||||
|
int itemCount = dhtTreeWidget->topLevelItemCount();
|
||||||
|
for (int nIndex = 0; nIndex < itemCount;)
|
||||||
|
{
|
||||||
|
QTreeWidgetItem *tmp_item = dhtTreeWidget->topLevelItem(nIndex);
|
||||||
|
std::string tmpid = tmp_item->data(DTW_COL_PEERID, Qt::DisplayRole).toString().toStdString();
|
||||||
|
if (peerIds.end() == std::find(peerIds.begin(), peerIds.end(), tmpid))
|
||||||
|
{
|
||||||
|
peerTreeWidget->removeItemWidget(tmp_item, 0);
|
||||||
|
/* remove it! */
|
||||||
|
itemCount--;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
nIndex++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
time_t now = time(NULL);
|
||||||
|
for(it = allpeers.begin(); it != allpeers.end(); it++)
|
||||||
|
{
|
||||||
|
/* find the entry */
|
||||||
|
QTreeWidgetItem *dht_item = NULL;
|
||||||
|
|
||||||
|
/* insert */
|
||||||
|
dht_item = new QTreeWidgetItem();
|
||||||
|
|
||||||
|
int dist = bdStdBucketDistance(&ownId, &(it->mPeerId.id));
|
||||||
|
std::ostringstream buckstr;
|
||||||
|
buckstr << dist;
|
||||||
|
|
||||||
|
std::ostringstream ipstr;
|
||||||
|
ipstr << inet_ntoa(it->mPeerId.addr.sin_addr);
|
||||||
|
ipstr << ":" << ntohs(it->mPeerId.addr.sin_port);
|
||||||
|
|
||||||
|
std::ostringstream idstr;
|
||||||
|
bdStdPrintNodeId(idstr, &(it->mPeerId.id));
|
||||||
|
|
||||||
|
std::ostringstream flagsstr;
|
||||||
|
flagsstr << "0x" << std::hex << std::setfill('0') << it->mPeerFlags;
|
||||||
|
|
||||||
|
std::ostringstream foundstr;
|
||||||
|
foundstr << now - it->mFoundTime << " secs ago";
|
||||||
|
|
||||||
|
std::ostringstream lastsendstr;
|
||||||
|
lastsendstr << now - it->mLastSendTime << " secs ago";
|
||||||
|
|
||||||
|
std::ostringstream lastrecvstr;
|
||||||
|
lastrecvstr << now - it->mLastRecvTime << " secs ago";
|
||||||
|
|
||||||
|
dht_item -> setData(DTW_COL_BUCKET, Qt::DisplayRole, QString::fromStdString(buckstr.str()));
|
||||||
|
dht_item -> setData(DTW_COL_IPADDR, Qt::DisplayRole, QString::fromStdString(ipstr.str()));
|
||||||
|
dht_item -> setData(DTW_COL_PEERID, Qt::DisplayRole, QString::fromStdString(idstr.str()));
|
||||||
|
dht_item -> setData(DTW_COL_FLAGS, Qt::DisplayRole, QString::fromStdString(flagsstr.str()));
|
||||||
|
|
||||||
|
dht_item -> setData(DTW_COL_FOUND, Qt::DisplayRole, QString::fromStdString(foundstr.str()));
|
||||||
|
dht_item -> setData(DTW_COL_SEND, Qt::DisplayRole, QString::fromStdString(lastsendstr.str()));
|
||||||
|
dht_item -> setData(DTW_COL_RECV, Qt::DisplayRole, QString::fromStdString(lastrecvstr.str()));
|
||||||
|
|
||||||
|
dhtTreeWidget->addTopLevelItem(dht_item);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void MainWindow::updateNetPeers()
|
||||||
|
{
|
||||||
|
QString status = QString::fromStdString(mPeerNet->getPeerStatusString());
|
||||||
|
QString oldstatus = ui->peerLine->text();
|
||||||
|
if (oldstatus != status)
|
||||||
|
{
|
||||||
|
ui->peerLine->setText(status);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
QTreeWidget *peerTreeWidget = ui->peerTreeWidget;
|
||||||
|
|
||||||
|
std::list<std::string> peerIds;
|
||||||
|
std::list<std::string>::iterator it;
|
||||||
|
mPeerNet->get_net_peers(peerIds);
|
||||||
|
|
||||||
|
#define PTW_COL_PEERID 0
|
||||||
|
#define PTW_COL_STATUS 1
|
||||||
|
#define PTW_COL_UPDATETS 2
|
||||||
|
|
||||||
|
/* clear old entries */
|
||||||
|
int itemCount = peerTreeWidget->topLevelItemCount();
|
||||||
|
for (int nIndex = 0; nIndex < itemCount;)
|
||||||
|
{
|
||||||
|
QTreeWidgetItem *tmp_item = peerTreeWidget->topLevelItem(nIndex);
|
||||||
|
std::string tmpid = tmp_item->data(PTW_COL_PEERID, Qt::DisplayRole).toString().toStdString();
|
||||||
|
if (peerIds.end() == std::find(peerIds.begin(), peerIds.end(), tmpid))
|
||||||
|
{
|
||||||
|
peerTreeWidget->removeItemWidget(tmp_item, 0);
|
||||||
|
/* remove it! */
|
||||||
|
itemCount--;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
nIndex++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for(it = peerIds.begin(); it != peerIds.end(); it++)
|
||||||
|
{
|
||||||
|
/* find the entry */
|
||||||
|
QTreeWidgetItem *peer_item = NULL;
|
||||||
|
QString qpeerid = QString::fromStdString(*it);
|
||||||
|
int itemCount = peerTreeWidget->topLevelItemCount();
|
||||||
|
for (int nIndex = 0; nIndex < itemCount; nIndex++)
|
||||||
|
{
|
||||||
|
QTreeWidgetItem *tmp_item = peerTreeWidget->topLevelItem(nIndex);
|
||||||
|
if (tmp_item->data(PTW_COL_PEERID, Qt::DisplayRole).toString() == qpeerid)
|
||||||
|
{
|
||||||
|
peer_item = tmp_item;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!peer_item)
|
||||||
|
{
|
||||||
|
/* insert */
|
||||||
|
peer_item = new QTreeWidgetItem();
|
||||||
|
peerTreeWidget->addTopLevelItem(peer_item);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* update the data */
|
||||||
|
PeerStatus status;
|
||||||
|
mPeerNet->get_peer_status(*it, status);
|
||||||
|
|
||||||
|
std::ostringstream updatestr;
|
||||||
|
time_t now = time(NULL);
|
||||||
|
updatestr << now - status.mUpdateTS << " secs ago";
|
||||||
|
|
||||||
|
peer_item -> setData(PTW_COL_PEERID, Qt::DisplayRole, QString::fromStdString(*it));
|
||||||
|
peer_item -> setData(PTW_COL_STATUS, Qt::DisplayRole, QString::fromStdString(status.mStatusMsg));
|
||||||
|
peer_item -> setData(PTW_COL_UPDATETS, Qt::DisplayRole, QString::fromStdString(updatestr.str()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void MainWindow::addPeer()
|
||||||
|
{
|
||||||
|
std::string id = ui->peerLineEdit->text().toStdString();
|
||||||
|
mPeerNet->add_peer(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void MainWindow::sendChat()
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void MainWindow::updateChat()
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
37
PeerNetQt/src/mainwindow.h
Normal file
37
PeerNetQt/src/mainwindow.h
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
#ifndef MAINWINDOW_H
|
||||||
|
#define MAINWINDOW_H
|
||||||
|
|
||||||
|
#include <QMainWindow>
|
||||||
|
#include "peernet.h"
|
||||||
|
|
||||||
|
namespace Ui {
|
||||||
|
class MainWindow;
|
||||||
|
}
|
||||||
|
|
||||||
|
class MainWindow : public QMainWindow {
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
MainWindow(QWidget *parent = 0);
|
||||||
|
~MainWindow();
|
||||||
|
|
||||||
|
void setPeerNet(PeerNet *pnet);
|
||||||
|
|
||||||
|
void updateNetStatus();
|
||||||
|
void updateDhtPeers();
|
||||||
|
void updateNetPeers();
|
||||||
|
void sendChat();
|
||||||
|
void updateChat();
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
void update();
|
||||||
|
void addPeer();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void changeEvent(QEvent *e);
|
||||||
|
|
||||||
|
private:
|
||||||
|
Ui::MainWindow *ui;
|
||||||
|
PeerNet *mPeerNet;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // MAINWINDOW_H
|
174
PeerNetQt/src/mainwindow.ui
Normal file
174
PeerNetQt/src/mainwindow.ui
Normal file
|
@ -0,0 +1,174 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>MainWindow</class>
|
||||||
|
<widget class="QMainWindow" name="MainWindow">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>644</width>
|
||||||
|
<height>590</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>MainWindow</string>
|
||||||
|
</property>
|
||||||
|
<widget class="QWidget" name="centralWidget">
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout_4">
|
||||||
|
<item>
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="addButton">
|
||||||
|
<property name="text">
|
||||||
|
<string>Add Peer</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLineEdit" name="peerLineEdit"/>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QSplitter" name="splitter">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Vertical</enum>
|
||||||
|
</property>
|
||||||
|
<widget class="QWidget" name="">
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||||
|
<item>
|
||||||
|
<widget class="QLineEdit" name="peerLine">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Peer Details</string>
|
||||||
|
</property>
|
||||||
|
<property name="readOnly">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QTreeWidget" name="peerTreeWidget">
|
||||||
|
<column>
|
||||||
|
<property name="text">
|
||||||
|
<string>PeerId</string>
|
||||||
|
</property>
|
||||||
|
</column>
|
||||||
|
<column>
|
||||||
|
<property name="text">
|
||||||
|
<string>Status</string>
|
||||||
|
</property>
|
||||||
|
</column>
|
||||||
|
<column>
|
||||||
|
<property name="text">
|
||||||
|
<string>Last Update</string>
|
||||||
|
</property>
|
||||||
|
</column>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<widget class="QWidget" name="">
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout_3">
|
||||||
|
<item>
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label_3">
|
||||||
|
<property name="text">
|
||||||
|
<string>Enter to send Chat:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLineEdit" name="chatLineEdit"/>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QTextBrowser" name="chatBrowser"/>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<widget class="QWidget" name="">
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="dhtLabel">
|
||||||
|
<property name="text">
|
||||||
|
<string>DHT Details:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QTreeWidget" name="dhtTreeWidget">
|
||||||
|
<column>
|
||||||
|
<property name="text">
|
||||||
|
<string>Bucket</string>
|
||||||
|
</property>
|
||||||
|
</column>
|
||||||
|
<column>
|
||||||
|
<property name="text">
|
||||||
|
<string>Ip:Port</string>
|
||||||
|
</property>
|
||||||
|
</column>
|
||||||
|
<column>
|
||||||
|
<property name="text">
|
||||||
|
<string>Key</string>
|
||||||
|
</property>
|
||||||
|
</column>
|
||||||
|
<column>
|
||||||
|
<property name="text">
|
||||||
|
<string>StatusFlags</string>
|
||||||
|
</property>
|
||||||
|
</column>
|
||||||
|
<column>
|
||||||
|
<property name="text">
|
||||||
|
<string>Found</string>
|
||||||
|
</property>
|
||||||
|
</column>
|
||||||
|
<column>
|
||||||
|
<property name="text">
|
||||||
|
<string>Last Send</string>
|
||||||
|
</property>
|
||||||
|
</column>
|
||||||
|
<column>
|
||||||
|
<property name="text">
|
||||||
|
<string>Last Recv</string>
|
||||||
|
</property>
|
||||||
|
</column>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<widget class="QMenuBar" name="menuBar">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>644</width>
|
||||||
|
<height>22</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QToolBar" name="mainToolBar">
|
||||||
|
<attribute name="toolBarArea">
|
||||||
|
<enum>TopToolBarArea</enum>
|
||||||
|
</attribute>
|
||||||
|
<attribute name="toolBarBreak">
|
||||||
|
<bool>false</bool>
|
||||||
|
</attribute>
|
||||||
|
</widget>
|
||||||
|
<widget class="QStatusBar" name="statusBar"/>
|
||||||
|
</widget>
|
||||||
|
<layoutdefault spacing="6" margin="11"/>
|
||||||
|
<resources/>
|
||||||
|
<connections/>
|
||||||
|
</ui>
|
512
PeerNetQt/src/peernet.cc
Normal file
512
PeerNetQt/src/peernet.cc
Normal file
|
@ -0,0 +1,512 @@
|
||||||
|
|
||||||
|
#include "peernet.h"
|
||||||
|
#include <iostream>
|
||||||
|
#include <sstream>
|
||||||
|
|
||||||
|
|
||||||
|
#include "bitdht/bdstddht.h"
|
||||||
|
#include "tcponudp/tou.h"
|
||||||
|
#include "util/rsnet.h"
|
||||||
|
|
||||||
|
|
||||||
|
PeerNet::PeerNet(std::string id, std::string configpath, uint16_t port)
|
||||||
|
{
|
||||||
|
std::string dhtVersion = "RS52"; // should come from elsewhere!
|
||||||
|
|
||||||
|
std::cerr << "PeerNet::PeerNet()" << std::endl;
|
||||||
|
std::cerr << "Using Id: " << id;
|
||||||
|
std::cerr << std::endl;
|
||||||
|
std::cerr << "Using Config Path: " << configpath;
|
||||||
|
std::cerr << std::endl;
|
||||||
|
std::cerr << "Converting OwnId to bdNodeId....";
|
||||||
|
std::cerr << std::endl;
|
||||||
|
|
||||||
|
std::cerr << "Loading Configuration";
|
||||||
|
std::cerr << std::endl;
|
||||||
|
|
||||||
|
mConfigFile = configpath + "/peerconfig.txt";
|
||||||
|
mPeersFile = configpath + "/peerlist.txt";
|
||||||
|
std::string bootstrapfile = configpath + "/bdboot.txt";
|
||||||
|
|
||||||
|
srand(time(NULL));
|
||||||
|
|
||||||
|
mPort = 10240 + (rand() % 10240);
|
||||||
|
if (!loadConfig(mConfigFile))
|
||||||
|
{
|
||||||
|
std::cerr << "Failed to loadConfig, Creating random Id/Port";
|
||||||
|
std::cerr << std::endl;
|
||||||
|
|
||||||
|
/* */
|
||||||
|
bdStdRandomNodeId(&mOwnId);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!bdStdLoadNodeId(&mOwnId, id))
|
||||||
|
{
|
||||||
|
std::cerr << "Failed to load Id from FnParameters";
|
||||||
|
std::cerr << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (port > 1024)
|
||||||
|
{
|
||||||
|
mPort = port;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
std::cerr << "Input Id: " << id;
|
||||||
|
std::cerr << std::endl;
|
||||||
|
|
||||||
|
std::cerr << "Own NodeId: ";
|
||||||
|
bdStdPrintNodeId(std::cerr, &mOwnId);
|
||||||
|
std::cerr << std::endl;
|
||||||
|
|
||||||
|
/* standard dht behaviour */
|
||||||
|
bdDhtFunctions *stdfns = new bdStdDht();
|
||||||
|
|
||||||
|
std::cerr << "PeerNet() startup ... creating UdpStack";
|
||||||
|
std::cerr << std::endl;
|
||||||
|
|
||||||
|
|
||||||
|
struct sockaddr_in tmpladdr;
|
||||||
|
sockaddr_clear(&tmpladdr);
|
||||||
|
tmpladdr.sin_port = htons(mPort);
|
||||||
|
mUdpStack = new UdpStack(tmpladdr);
|
||||||
|
|
||||||
|
std::cerr << "PeerNet() startup ... creating UdpBitDht";
|
||||||
|
std::cerr << std::endl;
|
||||||
|
|
||||||
|
/* create dht */
|
||||||
|
mUdpBitDht = new UdpBitDht(mUdpStack, &mOwnId, dhtVersion, bootstrapfile, stdfns);
|
||||||
|
mUdpStack->addReceiver(mUdpBitDht);
|
||||||
|
|
||||||
|
/* setup callback to here */
|
||||||
|
mUdpBitDht->addCallback(this);
|
||||||
|
|
||||||
|
/* setup TOU part */
|
||||||
|
tou_init(mUdpStack);
|
||||||
|
|
||||||
|
/* startup the Udp stuff! */
|
||||||
|
mUdpBitDht->start();
|
||||||
|
mUdpBitDht->startDht();
|
||||||
|
|
||||||
|
// handle configuration.
|
||||||
|
loadPeers(mPeersFile);
|
||||||
|
storeConfig(mConfigFile);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
int PeerNet::getOwnId(bdNodeId *id)
|
||||||
|
{
|
||||||
|
*id = mOwnId;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#define PN_PEER_STATE_UNKNOWN 0
|
||||||
|
#define PN_PEER_STATE_SEARCHING 1
|
||||||
|
#define PN_PEER_STATE_FAILURE 2
|
||||||
|
#define PN_PEER_STATE_OFFLINE 3
|
||||||
|
#define PN_PEER_STATE_UNREACHABLE 4
|
||||||
|
#define PN_PEER_STATE_ONLINE 5
|
||||||
|
|
||||||
|
int PeerNet::add_peer(std::string id)
|
||||||
|
{
|
||||||
|
bdNodeId tmpId;
|
||||||
|
|
||||||
|
if (!bdStdLoadNodeId(&tmpId, id))
|
||||||
|
{
|
||||||
|
std::cerr << "PeerNet::add_peer() Failed to load own Id";
|
||||||
|
std::cerr << std::endl;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::ostringstream str;
|
||||||
|
bdStdPrintNodeId(str, &tmpId);
|
||||||
|
std::string filteredId = str.str();
|
||||||
|
|
||||||
|
std::cerr << "PeerNet::add_peer()";
|
||||||
|
std::cerr << std::endl;
|
||||||
|
|
||||||
|
std::cerr << "Input Id: " << id;
|
||||||
|
std::cerr << std::endl;
|
||||||
|
std::cerr << "Filtered Id: " << id;
|
||||||
|
std::cerr << std::endl;
|
||||||
|
std::cerr << "Final NodeId: ";
|
||||||
|
bdStdPrintNodeId(std::cerr, &tmpId);
|
||||||
|
std::cerr << std::endl;
|
||||||
|
|
||||||
|
if (mPeers.end() == mPeers.find(filteredId))
|
||||||
|
{
|
||||||
|
std::cerr << "Adding New Peer: " << filteredId << std::endl;
|
||||||
|
mPeers[filteredId] = PeerStatus();
|
||||||
|
std::map<std::string, PeerStatus>::iterator it = mPeers.find(filteredId);
|
||||||
|
|
||||||
|
mUdpBitDht->addFindNode(&tmpId, BITDHT_QFLAGS_DO_IDLE);
|
||||||
|
|
||||||
|
it->second.mId = filteredId;
|
||||||
|
it->second.mStatusMsg = "Just Added";
|
||||||
|
it->second.mState = PN_PEER_STATE_SEARCHING;
|
||||||
|
it->second.mUpdateTS = time(NULL);
|
||||||
|
|
||||||
|
storePeers(mPeersFile);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::cerr << "Peer Already Exists, ignoring: " << filteredId << std::endl;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int PeerNet::remove_peer(std::string id)
|
||||||
|
{
|
||||||
|
bdNodeId tmpId;
|
||||||
|
|
||||||
|
if (!bdStdLoadNodeId(&tmpId, id))
|
||||||
|
{
|
||||||
|
std::cerr << "PeerNet::remove_peer() Failed to load own Id";
|
||||||
|
std::cerr << std::endl;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::ostringstream str;
|
||||||
|
bdStdPrintNodeId(str, &tmpId);
|
||||||
|
std::string filteredId = str.str();
|
||||||
|
|
||||||
|
std::map<std::string, PeerStatus>::iterator it = mPeers.find(filteredId);
|
||||||
|
|
||||||
|
if (mPeers.end() != it)
|
||||||
|
{
|
||||||
|
mUdpBitDht->removeFindNode(&tmpId);
|
||||||
|
mPeers.erase(it);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int PeerNet::get_dht_peers(int lvl, bdBucket &peers)
|
||||||
|
{
|
||||||
|
/* must be able to access deep into bitdht, which isn't possible
|
||||||
|
* at the moment! ... add this functionality now!
|
||||||
|
*/
|
||||||
|
|
||||||
|
return mUdpBitDht->getDhtBucket(lvl, peers);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
std::string PeerNet::getDhtStatusString()
|
||||||
|
{
|
||||||
|
std::ostringstream out;
|
||||||
|
int state = mUdpBitDht->stateDht();
|
||||||
|
|
||||||
|
switch(state)
|
||||||
|
{
|
||||||
|
default:
|
||||||
|
out << "Unknown State: " << state << " ";
|
||||||
|
break;
|
||||||
|
case BITDHT_MGR_STATE_OFF:
|
||||||
|
out << "BitDHT OFF ";
|
||||||
|
break;
|
||||||
|
case BITDHT_MGR_STATE_STARTUP:
|
||||||
|
out << "BitDHT Startup ";
|
||||||
|
break;
|
||||||
|
case BITDHT_MGR_STATE_FINDSELF:
|
||||||
|
out << "BitDHT FindSelf ";
|
||||||
|
break;
|
||||||
|
case BITDHT_MGR_STATE_ACTIVE:
|
||||||
|
out << "BitDHT Active ";
|
||||||
|
break;
|
||||||
|
case BITDHT_MGR_STATE_REFRESH:
|
||||||
|
out << "BitDHT Refresh ";
|
||||||
|
break;
|
||||||
|
case BITDHT_MGR_STATE_QUIET:
|
||||||
|
out << "BitDHT Quiet ";
|
||||||
|
break;
|
||||||
|
case BITDHT_MGR_STATE_FAILED:
|
||||||
|
out << "BitDHT Failed ";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
out << " BitNetSize: " << mUdpBitDht->statsNetworkSize();
|
||||||
|
out << " LocalNetSize: " << mUdpBitDht->statsBDVersionSize();
|
||||||
|
|
||||||
|
return out.str();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
std::string PeerNet::getPeerStatusString()
|
||||||
|
{
|
||||||
|
std::ostringstream out;
|
||||||
|
|
||||||
|
out << "OwnId: ";
|
||||||
|
bdStdPrintNodeId(out, &mOwnId);
|
||||||
|
|
||||||
|
out << " LocalPort: " << mPort;
|
||||||
|
|
||||||
|
return out.str();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int PeerNet::get_net_peers(std::list<std::string> &peerIds)
|
||||||
|
{
|
||||||
|
std::map<std::string, PeerStatus>::iterator it;
|
||||||
|
for(it = mPeers.begin(); it != mPeers.end(); it++)
|
||||||
|
{
|
||||||
|
peerIds.push_back(it->first);
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int PeerNet::get_peer_status(std::string id, PeerStatus &status)
|
||||||
|
{
|
||||||
|
std::map<std::string, PeerStatus>::iterator it = mPeers.find(id);
|
||||||
|
if (it != mPeers.end())
|
||||||
|
{
|
||||||
|
status = it->second;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* remember peers */
|
||||||
|
int PeerNet::storePeers(std::string filepath)
|
||||||
|
{
|
||||||
|
std::cerr << "PeerNet::storePeers(" << filepath << ")";
|
||||||
|
std::cerr << std::endl;
|
||||||
|
|
||||||
|
FILE *fd = fopen(filepath.c_str(), "w");
|
||||||
|
if (!fd)
|
||||||
|
{
|
||||||
|
std::cerr << "Failed to StorePeers, Issue Opening file: " << filepath;
|
||||||
|
std::cerr << std::endl;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::map<std::string, PeerStatus>::iterator it;
|
||||||
|
for(it = mPeers.begin(); it != mPeers.end(); it++)
|
||||||
|
{
|
||||||
|
fprintf(fd, "%s\n", (it->first).c_str());
|
||||||
|
}
|
||||||
|
fclose(fd);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int PeerNet::loadPeers(std::string filepath)
|
||||||
|
{
|
||||||
|
FILE *fd = fopen(filepath.c_str(), "r");
|
||||||
|
if (!fd)
|
||||||
|
{
|
||||||
|
std::cerr << "Failed to loadPeers, Issue Opening file: " << filepath;
|
||||||
|
std::cerr << std::endl;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
char line[1024];
|
||||||
|
bool firstline = true;
|
||||||
|
|
||||||
|
std::list<std::string> peerIds;
|
||||||
|
while(1 == fscanf(fd, "%[^\n]\n", line))
|
||||||
|
{
|
||||||
|
std::cerr << "Read Peer: " << line;
|
||||||
|
std::cerr << std::endl;
|
||||||
|
|
||||||
|
std::string id(line);
|
||||||
|
peerIds.push_back(id);
|
||||||
|
}
|
||||||
|
fclose(fd);
|
||||||
|
|
||||||
|
std::list<std::string>::iterator it;
|
||||||
|
for(it = peerIds.begin(); it != peerIds.end(); it++)
|
||||||
|
{
|
||||||
|
add_peer(*it);
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* remember peers */
|
||||||
|
int PeerNet::storeConfig(std::string filepath)
|
||||||
|
{
|
||||||
|
FILE *fd = fopen(filepath.c_str(), "w");
|
||||||
|
if (!fd)
|
||||||
|
{
|
||||||
|
std::cerr << "Failed to StorePeers, Issue Opening file: " << filepath;
|
||||||
|
std::cerr << std::endl;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* store own hash */
|
||||||
|
std::ostringstream ownidstr;
|
||||||
|
bdStdPrintNodeId(ownidstr, &(mOwnId));
|
||||||
|
fprintf(fd, "%s\n", ownidstr.str().c_str());
|
||||||
|
|
||||||
|
fclose(fd);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int PeerNet::loadConfig(std::string filepath)
|
||||||
|
{
|
||||||
|
FILE *fd = fopen(filepath.c_str(), "r");
|
||||||
|
if (!fd)
|
||||||
|
{
|
||||||
|
std::cerr << "Failed to loadConfig, Issue Opening file: " << filepath;
|
||||||
|
std::cerr << std::endl;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
char line[1024];
|
||||||
|
bool firstline = true;
|
||||||
|
|
||||||
|
if (1 == fscanf(fd, "%[^\n]\n", line))
|
||||||
|
{
|
||||||
|
std::string id(line);
|
||||||
|
std::cerr << "Read OwnId: " << line;
|
||||||
|
std::cerr << std::endl;
|
||||||
|
|
||||||
|
if (!bdStdLoadNodeId(&mOwnId, id))
|
||||||
|
{
|
||||||
|
std::cerr << "Failed to load own Id";
|
||||||
|
std::cerr << std::endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fclose(fd);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**** dht Callback ****/
|
||||||
|
int PeerNet::dhtNodeCallback(const bdId *id, uint32_t peerflags)
|
||||||
|
{
|
||||||
|
std::ostringstream str;
|
||||||
|
bdStdPrintNodeId(str, &(id->id));
|
||||||
|
std::string strId = str.str();
|
||||||
|
|
||||||
|
std::map<std::string, PeerStatus>::iterator it = mPeers.find(strId);
|
||||||
|
if (it != mPeers.end())
|
||||||
|
{
|
||||||
|
std::cerr << "PeerNet::dhtNodeCallback() From KNOWN PEER: ";
|
||||||
|
bdStdPrintId(std::cerr, id);
|
||||||
|
std::cerr << " Flags: " << peerflags;
|
||||||
|
std::cerr << std::endl;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int PeerNet::dhtPeerCallback(const bdId *id, uint32_t status)
|
||||||
|
{
|
||||||
|
std::ostringstream str;
|
||||||
|
bdStdPrintNodeId(str, &(id->id));
|
||||||
|
std::string strId = str.str();
|
||||||
|
|
||||||
|
//std::cerr << "PeerNet::dhtPeerCallback()";
|
||||||
|
//std::cerr << std::endl;
|
||||||
|
|
||||||
|
std::map<std::string, PeerStatus>::iterator it = mPeers.find(strId);
|
||||||
|
if (it != mPeers.end())
|
||||||
|
{
|
||||||
|
switch(status)
|
||||||
|
{
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
it->second.mStatusMsg = "Unknown Peer State";
|
||||||
|
it->second.mState = PN_PEER_STATE_UNKNOWN;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case BITDHT_MGR_QUERY_FAILURE:
|
||||||
|
{
|
||||||
|
it->second.mStatusMsg = "Search Failed (is DHT working?)";
|
||||||
|
it->second.mState = PN_PEER_STATE_FAILURE;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case BITDHT_MGR_QUERY_PEER_OFFLINE:
|
||||||
|
{
|
||||||
|
it->second.mStatusMsg = "Peer Offline";
|
||||||
|
it->second.mState = PN_PEER_STATE_OFFLINE;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case BITDHT_MGR_QUERY_PEER_UNREACHABLE:
|
||||||
|
{
|
||||||
|
it->second.mStatusMsg = "Peer Unreachable";
|
||||||
|
it->second.mState = PN_PEER_STATE_UNREACHABLE;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case BITDHT_MGR_QUERY_PEER_ONLINE:
|
||||||
|
{
|
||||||
|
it->second.mStatusMsg = "Peer Online";
|
||||||
|
it->second.mState = PN_PEER_STATE_ONLINE;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
time_t now = time(NULL);
|
||||||
|
it->second.mUpdateTS = now;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
std::cerr << "PeerNet::dhtPeerCallback() Unknown Peer: ";
|
||||||
|
bdStdPrintId(std::cerr, id);
|
||||||
|
std::cerr << " status: " << status;
|
||||||
|
std::cerr << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int PeerNet::dhtValueCallback(const bdNodeId *id, std::string key, uint32_t status)
|
||||||
|
{
|
||||||
|
std::cerr << "PeerNet::dhtValueCallback()";
|
||||||
|
std::cerr << std::endl;
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int PeerNet::dhtConnectCallback(const bdId *srcId, const bdId *proxyId, const bdId *destId,
|
||||||
|
uint32_t mode, uint32_t point, uint32_t cbtype)
|
||||||
|
{
|
||||||
|
std::cerr << "PeerNet::dhtConnectCallback()";
|
||||||
|
std::cerr << std::endl;
|
||||||
|
|
||||||
|
switch(cbtype)
|
||||||
|
{
|
||||||
|
case BITDHT_CONNECT_CB_AUTH:
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case BITDHT_CONNECT_CB_PENDING:
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case BITDHT_CONNECT_CB_START:
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case BITDHT_CONNECT_CB_PROXY:
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
case BITDHT_CONNECT_CB_FAILED:
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
90
PeerNetQt/src/peernet.h
Normal file
90
PeerNetQt/src/peernet.h
Normal file
|
@ -0,0 +1,90 @@
|
||||||
|
#ifndef PEER_NET_INTERFACE_H
|
||||||
|
#define PEER_NET_INTERFACE_H
|
||||||
|
|
||||||
|
/* top-level p2p overlay network interface */
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
#include <list>
|
||||||
|
|
||||||
|
#include "bitdht/bdiface.h"
|
||||||
|
#include "udp/udpstack.h"
|
||||||
|
#include "udp/udpbitdht.h"
|
||||||
|
|
||||||
|
#include "bitdht/bdstddht.h"
|
||||||
|
|
||||||
|
class DhtPeer
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
std::string id;
|
||||||
|
};
|
||||||
|
|
||||||
|
class PeerStatus
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
std::string mId;
|
||||||
|
std::string mStatusMsg;
|
||||||
|
uint32_t mState;
|
||||||
|
time_t mUpdateTS;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class PeerNet: public BitDhtCallback
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
PeerNet(std::string id, std::string bootstrapfile, uint16_t port);
|
||||||
|
/* GUI interface */
|
||||||
|
|
||||||
|
int getOwnId(bdNodeId *id);
|
||||||
|
|
||||||
|
int add_peer(std::string id);
|
||||||
|
int remove_peer(std::string id);
|
||||||
|
|
||||||
|
|
||||||
|
std::string getPeerStatusString();
|
||||||
|
std::string getDhtStatusString();
|
||||||
|
int get_dht_peers(int lvl, bdBucket &peers);
|
||||||
|
//int get_dht_peers(int lvl, std::list<DhtPeer> &peers);
|
||||||
|
int get_net_peers(std::list<std::string> &peerIds);
|
||||||
|
int get_peer_status(std::string peerId, PeerStatus &status);
|
||||||
|
|
||||||
|
/* remember peers */
|
||||||
|
int storePeers(std::string filepath);
|
||||||
|
int loadPeers(std::string filepath);
|
||||||
|
|
||||||
|
int storeConfig(std::string filepath);
|
||||||
|
int loadConfig(std::string filepath);
|
||||||
|
/* under the hood */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**** dht Callback ****/
|
||||||
|
// dummy cos not needed for standard dht behaviour;
|
||||||
|
virtual int dhtNodeCallback(const bdId *id, uint32_t peerflags);
|
||||||
|
|
||||||
|
// must be implemented.
|
||||||
|
virtual int dhtPeerCallback(const bdId *id, uint32_t status);
|
||||||
|
virtual int dhtValueCallback(const bdNodeId *id, std::string key, uint32_t status);
|
||||||
|
|
||||||
|
// connection callback. Not required for basic behaviour, but forced for initial development.
|
||||||
|
virtual int dhtConnectCallback(const bdId *srcId, const bdId *proxyId, const bdId *destId,
|
||||||
|
uint32_t mode, uint32_t point, uint32_t cbtype);
|
||||||
|
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
UdpStack *mUdpStack;
|
||||||
|
UdpBitDht *mUdpBitDht;
|
||||||
|
|
||||||
|
std::map<std::string, PeerStatus> mPeers;
|
||||||
|
|
||||||
|
bdNodeId mOwnId;
|
||||||
|
|
||||||
|
std::string mPeersFile;
|
||||||
|
std::string mConfigFile;
|
||||||
|
|
||||||
|
uint16_t mPort;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
Loading…
Add table
Add a link
Reference in a new issue