diff --git a/PeerNetQt/src/bdboot.txt b/PeerNetQt/src/bdboot.txt
index efbe875e8..ca09072ee 100644
--- a/PeerNetQt/src/bdboot.txt
+++ b/PeerNetQt/src/bdboot.txt
@@ -1,500 +1,500 @@
-203.217.170.217 30874
-80.78.101.200 61523
-77.39.38.204 37985
-202.133.55.164 33171
-178.218.48.18 1099
-96.51.81.67 34848
-80.252.240.10 35691
-78.234.176.210 1127
-109.110.92.246 32296
-87.2.122.2 62144
-178.121.100.139 20767
-85.210.38.111 20002
-91.203.26.250 35691
-95.190.88.173 6881
-85.210.38.111 19969
-188.112.100.65 48383
-87.179.236.249 59052
-86.208.6.127 12626
-61.94.131.92 20868
-78.100.208.50 49167
-76.105.119.12 51907
-77.232.141.42 1091
-92.126.119.204 64747
-123.48.140.103 61951
-94.64.163.174 57313
-69.108.1.1 56567
-178.251.108.66 61945
-115.118.45.148 35892
-88.170.1.199 60144
-190.167.138.244 26974
-182.177.82.129 27209
-24.15.140.50 39343
-86.97.72.240 54516
-112.205.59.68 62449
-197.1.100.218 40227
-116.71.174.200 26046
-188.114.16.34 53426
-122.150.252.60 29049
-46.247.199.83 51000
-193.151.81.140 2541
-69.171.163.146 38809
-95.79.92.140 27822
-189.115.166.104 40939
-188.134.60.83 34466
-83.128.66.50 23306
-217.173.21.18 44913
-75.37.76.247 54498
-182.18.209.111 55175
-78.87.36.96 52234
-217.151.50.135 34663
-178.177.15.116 64559
-213.108.169.251 52642
-82.44.220.175 17627
-174.59.66.22 45542
-68.102.204.198 45538
-46.240.114.178 1035
-92.73.220.200 37808
-184.155.124.198 1760
-116.68.205.230 17766
-93.6.71.124 6881
-27.106.45.102 17129
-78.224.127.28 51413
-62.198.147.128 53000
-50.53.11.193 20252
-190.250.203.79 28940
-122.168.160.76 64204
-142.68.150.203 25265
-77.111.38.57 6112
-178.158.129.156 53156
-80.90.168.147 12107
-82.36.28.38 53598
-80.245.125.101 18281
-78.9.112.104 60101
-81.236.213.187 55702
-77.37.173.222 17952
-87.120.81.236 24099
-94.143.40.37 15029
-46.138.56.95 12460
-82.170.50.47 12077
-70.65.69.190 61162
-95.139.201.69 26942
-137.186.166.21 60083
-61.36.189.19 28156
-109.196.27.89 19426
-88.218.40.50 64051
-95.134.37.74 19759
-178.176.213.37 62907
-67.191.251.240 6948
-74.13.82.14 23671
-175.142.137.43 16580
-69.231.200.182 1232
-118.100.188.133 26823
-65.0.147.109 52384
-173.180.193.221 45097
-108.18.183.88 28878
-178.123.26.34 35691
-118.175.28.40 62040
-67.182.148.53 52368
-71.235.255.153 42753
-178.131.149.74 1024
-89.254.200.15 29205
-71.137.205.162 58833
-2.102.201.255 56665
-115.137.13.82 32102
-95.134.241.47 14246
-94.181.132.96 41286
-118.100.202.71 15457
-24.64.255.168 60790
-182.185.162.177 49767
-82.229.248.131 53867
-84.126.150.250 48969
-94.196.180.219 29278
-89.189.169.9 64036
-71.23.6.10 33593
-89.134.11.198 5920
-92.99.142.104 40298
-111.255.13.248 8303
-88.224.46.15 12428
-187.147.33.33 10324
-85.227.133.190 7180
-122.164.119.251 16089
-195.1.121.159 49701
-66.57.69.241 10926
-94.31.150.58 35691
-188.49.91.110 40169
-210.203.254.254 51413
-85.210.38.111 19949
-85.210.38.111 19909
-96.48.192.208 53836
-182.64.124.126 38168
-88.172.13.116 51413
-109.92.112.129 22936
-117.196.161.248 51910
-82.84.223.109 56185
-190.232.74.186 10033
-85.166.14.181 23781
-78.14.205.151 24322
-93.125.159.58 58601
-78.14.205.151 24519
-109.228.69.62 47894
-142.68.95.81 19369
-81.9.142.95 18940
-109.254.45.134 57844
-125.27.17.134 12232
-86.28.116.226 2668
-180.194.46.228 8276
-90.176.46.150 21697
-98.210.187.110 19898
-178.65.64.14 57445
-67.234.252.161 11927
-74.32.95.253 53323
-89.83.53.151 65024
-94.190.193.155 55228
-188.24.117.90 62312
-212.104.80.34 31862
-109.197.112.31 61609
-195.97.110.132 52875
-74.88.46.11 61209
-109.187.214.177 15322
-46.162.95.240 52703
-178.203.129.209 47916
-84.237.163.170 41656
-109.124.82.91 16013
-80.95.21.118 42418
-41.228.227.238 31781
-85.26.164.93 16730
-49.49.125.183 13162
-124.8.223.131 16880
-77.120.141.223 37934
-24.215.67.68 22373
-62.176.15.8 10243
-189.115.31.189 13424
-108.28.196.97 29891
-79.175.118.223 14775
-119.42.69.50 27990
-123.178.142.202 17496
-80.216.132.26 50931
-121.54.54.36 3023
-195.114.142.104 51981
-178.203.144.149 18216
-90.23.215.122 38441
-88.173.100.176 54193
-83.134.13.245 6880
-92.142.104.243 48000
-186.206.12.33 8291
-109.254.49.13 15322
-95.34.58.144 48642
-91.217.91.11 39192
-144.85.175.55 51319
-88.189.82.239 5666
-89.163.47.59 42236
-61.26.132.128 20467
-85.141.182.218 26551
-124.86.55.118 12808
-174.89.132.196 60002
-93.81.173.161 20440
-90.155.221.225 39205
-70.78.210.9 1298
-95.190.121.226 31234
-109.53.138.103 50703
-93.132.90.224 5188
-89.134.230.77 62153
-134.106.236.73 32092
-78.92.198.104 40643
-77.85.131.21 21310
-85.210.38.111 20071
-41.224.125.14 55307
-189.69.114.40 1076
-67.188.133.52 41610
-84.212.113.134 37675
-41.230.228.52 29852
-178.90.39.54 15769
-85.210.38.111 20040
-99.241.83.62 1723
-174.78.66.72 38024
-31.47.172.92 1044
-119.246.23.104 7579
-84.101.63.207 18016
-79.105.169.154 22075
-212.178.11.237 36412
-118.173.147.186 12775
-76.183.242.116 56806
-178.162.242.146 37592
-85.210.38.111 20029
-109.203.19.10 47776
-188.95.214.180 25538
-41.137.23.157 21536
-85.210.38.111 19869
-76.174.241.230 59344
-218.186.99.145 21190
-189.82.4.53 47779
-2.82.216.224 28160
-85.210.38.111 19951
-187.0.225.7 60317
-46.48.170.112 39721
-85.210.38.111 19868
-164.8.221.24 31547
-91.139.186.168 27947
-95.211.8.11 25896
-69.198.251.177 22146
-68.93.74.85 25378
-122.176.245.208 45682
-125.59.156.33 32401
-134.106.236.63 7584
-83.128.120.21 51431
-95.52.104.115 14112
-85.210.38.111 19898
-109.70.52.238 44500
-95.26.117.116 64874
-85.210.38.111 19957
-88.149.180.60 51414
-201.75.105.21 43298
-78.100.236.49 40809
-92.49.178.248 21131
-92.154.124.137 47816
-90.220.199.212 42682
-46.177.118.125 48545
-85.210.38.111 19828
-207.81.138.15 1975
-46.187.39.136 44658
-109.229.0.181 11795
-85.210.38.111 19693
+71.64.109.64 54232
+216.108.187.36 22975
+140.122.103.182 13143
88.186.107.212 8660
-101.140.84.139 61461
-81.234.194.192 61049
-95.30.219.148 46630
-95.30.94.188 37915
-186.32.81.120 13178
-116.199.161.210 18875
-78.112.75.247 16969
-112.164.232.8 17207
-85.210.38.111 19790
-201.6.182.65 29017
-92.114.3.126 35521
-46.185.40.138 35691
-85.210.38.111 19849
-71.203.222.193 11243
-88.198.183.157 32257
-85.151.56.108 50040
-107.10.32.153 6881
-89.47.86.152 63650
-85.210.38.111 20044
-88.179.250.21 42329
-221.153.66.253 40650
-95.27.131.41 42799
-77.80.249.28 32894
-98.221.3.209 23762
+84.3.163.246 44384
+92.37.54.96 11558
+94.21.92.231 38888
+78.8.66.173 25367
+83.230.136.117 13910
+66.229.58.188 43794
+46.211.230.178 15475
+213.113.105.94 38453
+92.81.13.245 39663
+88.125.45.122 30097
+92.133.95.85 52910
+85.210.38.111 15658
+114.17.132.233 19663
+88.104.22.104 27257
+109.9.10.137 18441
+217.27.42.102 63452
+92.44.86.3 16896
+84.228.48.61 10335
+81.232.49.39 16471
+188.18.63.93 23310
+173.186.45.157 37950
+76.200.122.172 55578
+94.213.103.5 37531
+92.142.169.56 13452
+80.202.97.14 64178
+85.66.15.212 40149
+79.83.138.75 43384
+76.20.98.207 37009
+78.144.232.59 57786
+86.30.240.5 55315
+85.210.38.111 15685
+189.155.48.178 14898
+74.13.82.14 23671
+89.217.155.87 51413
+83.240.122.86 20710
+117.195.46.183 50932
+193.231.163.24 20385
+112.140.12.221 10677
+189.235.140.51 27844
+121.169.204.131 23467
+92.81.221.104 51868
+89.211.184.120 38643
+62.201.84.120 36698
+175.110.122.13 16029
+84.43.183.51 27571
+85.210.38.111 15692
+85.210.38.111 15666
+131.123.1.227 55013
+78.72.37.248 58953
+85.210.38.111 15638
+85.210.38.111 15667
+85.210.38.111 15620
+95.211.8.11 1140
88.178.72.2 7812
-93.103.72.182 49529
-79.131.185.51 28886
-213.107.66.202 41381
-95.80.59.11 55494
-69.118.24.163 43611
-120.51.210.154 443
-85.210.38.111 19695
-90.149.130.169 39191
-83.157.69.174 20504
+85.210.38.111 15728
+189.129.2.99 23463
+85.210.38.111 15674
+76.107.46.7 16170
+85.210.38.111 15808
+211.217.145.63 58587
+110.55.23.91 20417
+2.82.216.224 28160
+85.210.38.111 15612
+85.210.38.111 15774
+85.210.38.111 15681
+85.210.38.111 15593
+85.210.38.111 15631
+78.58.1.213 39032
+93.96.27.58 58144
+85.210.38.111 15682
+85.210.38.111 15590
+85.210.38.111 15603
+85.21.159.120 33978
+85.210.38.111 15632
+85.210.38.111 15597
+85.210.38.111 15644
+76.105.119.12 51907
+61.36.189.19 28156
+82.44.220.175 17627
+71.235.255.153 42753
+173.180.193.221 45097
+118.175.28.40 62040
+62.68.146.175 35691
+91.179.145.10 33893
+109.70.52.238 44500
+81.9.142.95 18940
+80.95.21.118 42418
+142.68.150.203 25265
+109.124.82.91 16013
+142.68.95.81 19369
+108.28.196.97 29891
+123.178.142.202 17496
+78.100.236.49 40809
+89.134.230.77 62153
+95.34.58.144 48642
+99.241.83.62 1723
+31.47.172.92 1044
+67.188.133.52 41610
+144.85.175.55 51319
+79.105.169.154 22075
+186.206.12.33 8291
+85.235.253.178 15010
+88.149.180.60 51414
+78.112.75.247 16969
+83.128.120.21 51431
+79.135.216.60 51652
+164.8.221.24 31547
+188.95.214.180 25538
+95.30.219.148 46630
+50.90.175.187 60001
+24.3.223.212 43041
+68.93.74.85 25378
+76.174.241.230 59344
+125.59.156.33 32401
+124.244.217.44 50221
+187.0.225.7 60317
+86.28.116.226 2668
130.243.191.202 24410
+93.103.72.182 49529
+77.80.249.28 32894
109.207.196.189 14146
-65.96.192.106 20277
-68.2.142.67 39571
-85.210.38.111 20024
-189.103.144.5 12351
-78.48.11.9 46913
+90.149.130.169 39191
+107.10.32.153 6881
+71.203.222.193 11243
+79.131.185.51 28886
174.42.210.123 35053
-94.30.130.58 18116
-88.171.224.208 54755
-85.210.38.111 20043
-62.147.204.92 7812
-188.80.161.77 52343
-77.41.99.77 60590
-85.210.38.111 20033
-178.123.85.47 38504
-92.248.226.221 55061
-216.137.133.89 44376
-201.11.235.148 33618
-85.210.38.111 19789
-178.223.136.94 10060
-78.137.52.144 19547
-78.139.231.192 50734
-85.210.38.111 19954
-221.24.70.141 61625
-69.199.102.6 48234
-85.15.70.92 53210
-85.210.38.111 19992
-82.244.203.153 21428
-76.199.97.225 62729
-189.82.213.9 61402
-50.88.148.45 38303
-87.10.130.213 26436
-176.14.55.15 51813
-110.254.168.210 40626
-80.60.161.46 53490
+120.51.210.154 443
+213.107.66.202 41381
+62.165.228.234 24958
217.197.6.47 30000
93.152.129.100 26707
-62.165.228.234 24958
-85.210.38.111 19866
+86.106.214.64 35691
+77.78.172.9 23574
+85.15.70.92 53210
+78.139.231.192 50734
+93.132.90.224 5188
174.1.101.83 9406
187.127.72.162 21380
-84.247.22.75 25850
-46.186.54.192 26016
-61.210.66.191 36578
-178.94.154.111 23923
-109.110.94.70 30954
-95.52.255.62 63245
-82.224.136.52 7890
-91.116.191.138 4662
-213.250.22.253 50254
-85.210.38.111 19926
-87.228.93.4 51915
-62.228.21.148 15495
-200.86.205.61 34635
-94.59.178.235 10379
1.175.139.234 27959
-65.94.96.85 48004
-88.152.129.72 29440
-109.93.217.79 11526
-95.211.8.11 1140
-50.104.19.222 27902
-77.66.238.64 41810
-85.210.38.111 19935
-27.32.111.217 40217
-178.222.42.90 29384
-80.149.19.153 32528
-92.142.169.56 13452
-217.211.244.154 24932
-1.83.139.64 16001
-46.72.130.102 55045
-85.210.38.111 19894
-178.235.29.152 41661
-59.113.155.14 21775
-221.145.157.133 41323
-78.144.43.115 42272
-83.145.228.244 23147
-69.59.103.85 22750
-85.210.38.111 19697
-93.81.73.84 44144
+200.86.205.61 34635
+91.116.191.138 4662
+221.24.70.141 61625
84.40.83.186 1660
-121.167.12.118 39840
-79.100.162.25 54856
-178.49.145.136 12665
-85.210.38.111 19784
-217.164.118.188 13026
-83.26.8.229 9849
-63.234.11.132 27352
-125.27.93.175 16816
-83.193.168.78 44075
-174.53.219.63 57942
-85.210.38.111 19955
-46.1.73.188 6881
-190.44.21.47 17082
-85.210.38.111 19749
-85.210.38.111 20025
-78.229.223.205 36531
-90.220.124.142 39540
-79.113.218.66 63123
-79.116.206.103 58889
-24.1.118.110 27704
-85.210.38.111 19851
-79.119.95.94 46983
-77.232.20.26 43250
-223.218.101.122 62548
-41.227.56.179 22716
-95.90.231.148 35420
+217.211.244.154 24932
94.101.207.170 62580
-78.14.205.151 24211
-85.210.38.111 19962
-112.119.180.21 59328
-81.92.179.110 47662
-85.210.38.111 19736
-46.185.19.224 21714
-88.135.170.12 13761
-61.18.255.9 50239
-94.188.38.151 63933
-86.106.214.64 35691
-82.232.0.124 9156
-24.64.255.14 42832
-189.121.6.224 45063
-86.62.100.113 44610
-220.224.225.94 23365
-85.210.38.111 19755
-75.23.9.181 51498
-89.102.166.183 18088
+178.222.42.90 29384
+78.229.223.205 36531
+69.59.103.85 22750
+77.232.20.26 43250
+190.44.21.47 17082
+65.94.96.85 48004
+27.32.111.217 40217
+79.113.248.160 59750
+77.41.71.131 43240
+79.164.138.217 20214
+84.0.14.117 34245
46.9.235.202 6881
-78.25.142.245 25505
-94.181.187.209 38043
-67.166.179.95 51679
-93.12.199.146 50797
-98.183.153.23 39212
-213.5.222.186 3142
-84.238.34.216 55202
-85.210.38.111 19826
+178.235.29.152 41661
+134.106.236.63 7584
+188.26.171.65 37450
213.245.73.220 15641
90.191.77.198 44825
-75.137.112.233 16873
-93.100.44.38 23175
-223.217.219.211 21119
-183.83.51.187 12904
-99.66.229.86 30732
+69.122.99.119 54701
98.64.93.81 46213
-62.65.221.25 59745
-93.139.101.103 58439
-88.187.80.252 49180
-188.26.171.65 37450
-93.24.229.80 20696
-94.21.112.229 46570
-124.6.181.195 30186
-188.48.117.225 16814
-81.234.250.180 28382
-122.118.26.19 24793
-178.90.16.213 23732
-89.122.61.69 49001
-46.158.127.89 57492
-94.180.186.80 38312
-92.149.49.162 7816
-91.225.23.236 35691
-68.118.94.35 33288
-92.246.222.219 11335
-99.70.88.225 43139
-88.78.69.59 31441
-90.148.148.73 34106
-188.52.71.90 13213
-85.210.38.111 20045
-212.152.53.78 14254
-115.23.249.109 16823
-85.210.38.111 19724
-67.162.186.239 28803
-89.217.250.98 16190
-85.210.38.111 19999
+111.250.168.97 22261
109.251.146.80 51027
-92.149.49.162 7812
-91.66.51.19 33548
-84.41.72.126 49059
-85.210.38.111 19915
-178.117.36.48 26529
-85.210.38.111 19730
-91.202.134.248 54118
-87.252.162.209 43996
-24.55.87.176 27129
-85.210.38.111 19739
-85.210.38.111 19905
76.216.226.150 34974
-85.210.38.111 19692
-85.210.38.111 19893
-85.210.38.111 20067
-85.210.38.111 19831
-85.210.38.111 20008
-85.210.38.111 19883
-85.210.38.111 20015
-85.210.38.111 19984
-85.210.38.111 19794
-85.210.38.111 19972
-85.210.38.111 19728
-85.210.38.111 19766
-85.210.38.111 19923
-85.210.38.111 19997
-85.210.38.111 19764
-85.210.38.111 19900
-85.210.38.111 19791
-85.210.38.111 19970
+184.166.168.30 35691
+67.162.186.239 28803
+189.1.29.210 65123
+124.8.223.131 16880
+61.18.255.9 50239
+114.45.68.143 8856
+85.210.38.111 15779
+93.183.216.171 16220
+82.226.181.145 43643
+99.99.189.213 10061
+119.74.167.148 20643
+88.189.63.143 20348
+77.28.179.245 48808
+88.187.80.252 49180
+99.66.229.86 30732
+186.136.77.234 14974
+60.48.219.49 16407
+93.12.199.146 50797
+119.15.212.95 9787
+123.2.57.90 18763
+24.1.118.110 27704
+77.241.136.193 48402
+81.228.144.87 48865
+24.79.172.54 20661
+201.95.29.34 20932
+60.51.122.36 16881
+87.250.168.72 26497
+81.4.163.154 48066
+85.210.38.111 15613
+122.118.26.19 24793
+85.210.38.111 15780
+124.191.35.38 50369
+85.210.38.111 15781
+92.50.80.105 49232
+200.206.196.18 38972
+80.57.236.73 44357
+85.210.38.111 15790
+151.83.37.110 58558
+85.210.38.111 15610
+77.34.110.130 13687
+85.210.38.111 15794
+85.210.38.111 15669
+65.34.76.217 62453
+213.150.55.196 15030
+84.29.225.174 6881
+94.196.193.82 39512
+60.8.87.30 12543
+85.210.38.111 15615
+46.164.30.196 19818
+46.183.2.146 37299
+79.92.2.217 43791
+85.210.38.111 15617
+213.60.50.230 39805
+83.239.183.218 46153
+121.7.22.119 36748
+176.14.115.172 52218
+173.61.88.200 59733
+70.31.157.90 16667
+85.210.38.111 15751
+84.228.209.103 56467
+124.244.43.30 48033
+188.4.223.46 56420
+173.66.20.234 6881
+81.236.195.180 18203
+151.27.33.148 10016
+24.64.255.14 42832
+85.210.38.111 15594
+85.210.38.111 15706
+85.210.38.111 15784
+70.140.96.89 39408
+85.210.38.111 15626
+78.101.171.111 32349
+81.152.33.128 60371
+79.119.95.94 46983
+84.41.72.126 49059
+200.96.131.61 11189
+91.217.91.11 39192
+157.157.203.120 60474
+96.48.200.166 29285
+2.102.201.65 56665
+125.26.253.83 32071
+111.192.15.183 16001
+74.56.99.15 30046
+85.210.38.111 15694
+213.111.220.24 60004
+78.244.100.110 51623
+85.235.24.51 51413
+85.210.38.111 15599
+86.95.163.76 52413
+76.226.84.74 26334
+85.210.38.111 15625
+119.155.117.63 51550
+85.210.38.111 15662
+195.34.242.110 35352
+194.112.217.73 11279
+142.161.198.77 44740
+89.240.201.241 10371
+82.232.0.124 9156
+80.234.99.71 21756
+112.225.28.127 16001
+85.210.38.111 15697
+75.138.42.54 6881
+71.136.39.215 1171
+85.210.38.111 15585
+85.210.38.111 15704
+58.115.83.248 15959
+90.142.190.91 49688
+85.210.38.111 15665
+85.210.38.111 15712
+85.210.38.111 15715
+85.210.38.111 15641
+187.149.168.72 25300
+1.160.232.123 18254
+85.210.38.111 15623
+85.210.38.111 15647
+216.110.99.160 16749
+85.210.38.111 15679
+99.116.4.75 35916
+122.19.243.220 48788
+122.133.5.65 47338
+218.166.126.94 17175
+61.178.17.210 15152
+77.242.145.133 51413
+82.254.41.81 57189
+173.217.246.214 13494
+46.118.224.174 63196
+80.186.135.251 37585
+85.210.38.111 15713
+109.94.66.154 62185
+188.2.33.6 47050
+89.89.18.218 13783
+68.193.187.110 39233
+151.15.11.42 35363
+220.241.211.145 33830
+84.209.76.94 39078
+68.174.120.114 50424
+85.210.38.111 15608
+85.210.38.111 15643
+142.167.140.26 45059
+85.210.38.111 15671
+85.210.38.111 15708
+89.77.18.144 57420
+78.159.38.59 41621
+87.56.51.50 39107
+2.50.21.232 53135
+85.210.38.111 15604
+151.20.181.199 39886
+85.210.38.111 15711
+182.64.118.74 11244
+85.210.38.111 15607
+213.16.121.172 7380
+90.216.117.77 26903
+77.206.26.166 49807
+124.169.135.216 20627
+85.210.38.111 15652
+85.210.38.111 15621
+123.238.65.20 60431
+85.210.38.111 15655
+134.106.236.73 32092
+85.210.38.111 15660
+67.45.198.80 10275
+85.210.38.111 15677
+85.210.38.111 15605
+85.210.38.111 15614
+78.96.192.198 20544
+178.122.91.204 50491
+82.244.203.153 21428
+95.166.77.224 51413
+79.111.48.157 42921
+109.63.170.93 51767
+124.180.53.163 24425
+85.210.38.111 15709
+88.162.79.68 12574
+188.226.4.247 61384
+96.3.14.184 14029
+66.177.245.122 10328
+125.178.8.35 51413
+85.210.38.111 15691
+178.203.129.209 47916
+121.16.195.218 33700
+96.254.114.126 26982
+70.65.69.190 61162
+189.26.147.115 23755
+113.53.178.125 11685
+98.14.74.49 50918
+87.126.123.205 55118
+77.77.59.2 7868
+24.162.155.137 23221
+69.111.152.82 58513
+93.106.57.71 17012
+126.10.205.181 26408
+62.147.204.92 7812
+202.161.27.236 29020
+91.66.51.19 33548
+178.203.144.149 18216
+85.210.38.111 15645
+77.120.20.53 19094
+88.170.1.199 60144
+69.125.102.230 64736
+85.210.38.111 15701
+142.177.163.124 24663
+212.15.159.70 52349
+77.70.96.130 14146
+221.190.131.95 46545
+182.64.117.176 19106
+81.53.57.54 27721
+93.21.120.104 50100
+87.229.13.157 51888
+174.5.200.186 22115
+201.210.6.209 15475
+85.210.38.111 15722
+77.37.236.54 6881
+79.114.69.125 12563
+201.43.14.4 17607
+220.145.224.43 51188
+201.15.217.137 38971
+221.202.84.134 8793
+85.210.38.111 15723
+201.78.165.4 58026
+86.150.142.72 49740
+46.47.102.170 6881
+219.79.181.184 35997
+85.210.38.111 15664
+89.181.200.105 21518
+67.160.20.111 46292
+187.39.23.126 22015
+95.165.134.29 55258
+85.247.202.169 32566
+75.25.147.26 51413
+85.210.38.111 15737
+89.157.128.104 33931
+94.41.220.97 61538
+50.22.214.88 15003
+188.95.111.46 41736
+2.226.2.251 46917
+85.241.42.187 45224
+91.154.8.204 44742
+77.35.141.3 33457
+85.210.38.111 15690
+86.135.109.40 17662
+88.189.82.239 5666
+85.210.38.111 15739
+217.24.244.196 46851
+94.27.71.210 38180
+88.148.38.107 23695
+114.32.10.189 6882
+190.177.150.208 61830
+85.210.38.111 15627
+85.210.38.111 15640
+59.113.155.14 21775
+88.161.167.243 18722
+76.122.32.160 13272
+85.210.38.111 15648
+85.210.38.111 15747
+85.210.38.111 15606
+92.154.124.137 47816
+213.22.190.219 59746
+67.167.245.246 63188
+24.7.144.73 29585
+178.46.48.131 22442
+218.67.244.18 18119
+189.61.101.171 44535
+85.210.38.111 15591
+83.20.118.241 14433
+77.100.181.253 53042
+85.210.38.111 15668
+95.78.238.94 54157
+201.75.12.64 8599
+86.6.193.240 59203
+85.210.38.111 15628
+88.198.183.157 32257
+80.149.19.153 32528
+85.210.38.111 15639
+85.210.38.111 15622
+92.52.37.169 24456
+140.184.38.236 26038
+76.22.208.42 48036
+198.53.231.242 41343
+190.105.1.61 31276
+85.210.38.111 15609
+85.210.38.111 15589
+85.210.38.111 15611
+216.249.207.179 49264
+85.210.38.111 15600
+91.205.174.9 64081
+85.210.38.111 15676
+85.27.92.249 6881
+89.235.211.154 54082
+95.79.114.90 54480
+94.98.237.189 22423
+174.50.75.23 40107
+50.8.231.183 6895
+199.15.222.2 41932
+85.210.38.111 15654
+85.210.38.111 15727
+123.89.205.188 27728
+85.210.38.111 15587
+85.210.38.111 15661
+85.210.38.111 15672
+193.251.90.143 64101
+94.19.219.159 62495
+85.210.38.111 15588
+76.227.0.63 31540
+85.210.38.111 15680
+85.210.38.111 15598
+85.210.38.111 15642
+85.210.38.111 15683
+174.116.40.53 18169
+85.210.38.111 15673
+85.210.38.111 15601
+85.210.38.111 15616
+85.210.38.111 15596
+46.188.4.2 32546
+85.210.38.111 15633
+85.210.38.111 15663
+85.210.38.111 15761
+85.210.38.111 15651
+85.210.38.111 15684
+85.210.38.111 15602
+85.210.38.111 15618
+85.210.38.111 15759
+85.210.38.111 15649
+85.210.38.111 15734
+85.210.38.111 15586
+85.210.38.111 15689
+85.210.38.111 15688
+85.210.38.111 15716
+178.171.98.228 35691
+94.99.70.34 13738
diff --git a/PeerNetQt/src/genTestNet.py b/PeerNetQt/src/genTestNet.py
index bcbdf7d9c..8fea3929a 100755
--- a/PeerNetQt/src/genTestNet.py
+++ b/PeerNetQt/src/genTestNet.py
@@ -67,6 +67,26 @@ def generateNet(basefolder, npeers, nfriends, fracProxy, fracRelay, nguis):
fd = open(scriptfilename, 'w');
fd.write('#!/bin/sh\n\n');
+ #
+ analysisfilename = '%s/checkforerrs.sh' % (basefolder);
+ fd2 = open(analysisfilename, 'w');
+ fd2.write('#!/bin/sh\n\n');
+
+ #
+ warningfilename = '%s/checkforwarnings.sh' % (basefolder);
+ fd3 = open(warningfilename, 'w');
+ fd3.write('#!/bin/sh\n\n');
+
+ #
+ exprfilename = '%s/checkforexpr.sh' % (basefolder);
+ fd4 = open(exprfilename, 'w');
+ fd4.write('#!/bin/sh\n\n');
+ fd4.write('if [$# -lt 2]\n');
+ fd4.write('then\n');
+ fd4.write(' echo \"script needs expression as argument\"\n');
+ fd4.write('fi\n\n')
+
+
for i in range(npeers):
random.shuffle(shuffledIdxs);
print 'Peer %d : %s' % (i+1, ids[i]);
@@ -77,8 +97,11 @@ def generateNet(basefolder, npeers, nfriends, fracProxy, fracRelay, nguis):
friends = [];
for j in range(nfriends):
fid = shuffledIdxs[j];
- print '\t\tIdx: %d Port: %d Id: %s' % (fid, ports[fid], ids[fid])
- friends.append(ids[fid]);
+ if (fid != i):
+ print '\t\tIdx: %d Port: %d Id: %s' % (fid, ports[fid], ids[fid])
+ friends.append(ids[fid]);
+ else:
+ print '\t\tSkipping Self as Peer!'
folder = '%s/%s' % (basefolder, folders[i]);
if (os.path.exists(folder)):
@@ -96,8 +119,30 @@ def generateNet(basefolder, npeers, nfriends, fracProxy, fracRelay, nguis):
fd.write('./run.sh &\n');
fd.write('cd ..\n\n');
+ fd2.write('echo ------------ PEER FOLDER: %s\n' % folders[i]);
+ fd2.write('cd %s\n' % folders[i]);
+ fd2.write('grep -n ERROR pn.log\n');
+ fd2.write('cd ..\n\n');
+
+ fd3.write('echo ------------ PEER FOLDER: %s\n' % folders[i]);
+ fd3.write('cd %s\n' % folders[i]);
+ fd3.write('grep -n WARNING pn.log\n');
+ fd3.write('cd ..\n\n');
+
+ fd4.write('echo ------------ PEER FOLDER: %s\n' % folders[i]);
+ fd4.write('cd %s\n' % folders[i]);
+ fd4.write('grep -n -A 10 $1 pn.log\n');
+ fd4.write('cd ..\n\n');
+
fd.close();
+ fd2.close();
+ fd3.close();
+ fd4.close();
+
os.chmod(scriptfilename, stat.S_IRUSR | stat.S_IWUSR | stat.S_IXUSR | stat.S_IRGRP | stat.S_IROTH);
+ os.chmod(analysisfilename, stat.S_IRUSR | stat.S_IWUSR | stat.S_IXUSR | stat.S_IRGRP | stat.S_IROTH);
+ os.chmod(warningfilename, stat.S_IRUSR | stat.S_IWUSR | stat.S_IXUSR | stat.S_IRGRP | stat.S_IROTH);
+ os.chmod(exprfilename, stat.S_IRUSR | stat.S_IWUSR | stat.S_IXUSR | stat.S_IRGRP | stat.S_IROTH);
return;
@@ -133,8 +178,8 @@ def makePeerRunScript(folder, gui, port, proxyblock, proxyrange, relayblock, rel
fd.write('#/bin/sh\n\n');
fd.write('EXEC=%s\n\n' % execpath);
- fd.write(('$EXEC %s -l -p %d -r %d-%d -R %d-%d -c . > /dev/null 2>&1' % (noguistr, port, proxyblock, proxyblock+proxyrange, relayblock, relayblock+relayrange)));
- #fd.write(('$EXEC %s -l -p %d -r %d-%d -R %d-%d -c . > pn.log 2>&1' % (noguistr, port, proxyblock, proxyblock+proxyrange, relayblock, relayblock+relayrange)));
+ #fd.write(('$EXEC %s -l -p %d -r %d-%d -R %d-%d -c . > /dev/null 2>&1' % (noguistr, port, proxyblock, proxyblock+proxyrange, relayblock, relayblock+relayrange)));
+ fd.write(('$EXEC %s -l -p %d -r %d-%d -R %d-%d -c . > pn.log 2>&1' % (noguistr, port, proxyblock, proxyblock+proxyrange, relayblock, relayblock+relayrange)));
fd.close();
os.chmod(filename, stat.S_IRUSR | stat.S_IWUSR | stat.S_IXUSR | stat.S_IRGRP | stat.S_IROTH);
diff --git a/PeerNetQt/src/mainwindow.cpp b/PeerNetQt/src/mainwindow.cpp
index 4d0424275..dc7734373 100644
--- a/PeerNetQt/src/mainwindow.cpp
+++ b/PeerNetQt/src/mainwindow.cpp
@@ -242,14 +242,22 @@ void MainWindow::updateNetPeers()
int nRelayPeers = 0;
-#define PTW_COL_PEERID 0
-#define PTW_COL_DHT_STATUS 1
-#define PTW_COL_DHT_ADDRESS 2
-#define PTW_COL_DHT_UPDATETS 3
+#define PTW_COL_PEERID 0
+#define PTW_COL_DHT_STATUS 1
+
+#define PTW_COL_PEER_CONNECT_STATUS 2
+#define PTW_COL_PEER_CONNECT_MODE 3
+#define PTW_COL_PEER_REQ_STATUS 4
+
+#define PTW_COL_PEER_CB_MSG 5
-#define PTW_COL_PEER_STATUS 4
-#define PTW_COL_PEER_ADDRESS 5
-#define PTW_COL_PEER_UPDATETS 6
+// These aren't that important.
+#define PTW_COL_PEER_CB_MODE 6
+#define PTW_COL_PEER_CB_PROXY 7
+
+#define PTW_COL_DHT_ADDRESS 8
+#define PTW_COL_DHT_UPDATETS 9
+
/* clear old entries */
int itemCount = peerTreeWidget->topLevelItemCount();
@@ -276,6 +284,7 @@ void MainWindow::updateNetPeers()
}
}
+ time_t now = time(NULL);
for(it = peerIds.begin(); it != peerIds.end(); it++)
{
/* find the entry */
@@ -302,7 +311,7 @@ void MainWindow::updateNetPeers()
/* update the data */
PeerStatus status;
mPeerNet->get_peer_status(*it, status);
- time_t now = time(NULL);
+
std::ostringstream dhtipstr;
if ((status.mDhtState == PN_DHT_STATE_ONLINE) || (status.mDhtState == PN_DHT_STATE_UNREACHABLE))
@@ -314,25 +323,73 @@ void MainWindow::updateNetPeers()
std::ostringstream dhtupdatestr;
dhtupdatestr << now - status.mDhtUpdateTS << " secs ago";
- std::ostringstream peeripstr;
- //if (status.mPeerState == PN_PEER_STATE_ONLINE)
- {
- peeripstr << inet_ntoa(status.mPeerAddr.sin_addr);
- peeripstr << ":" << ntohs(status.mPeerAddr.sin_port);
- }
-
- std::ostringstream peerupdatestr;
- peerupdatestr << now - status.mPeerUpdateTS << " secs ago";
-
+ //std::ostringstream peerupdatestr;
+ //peerupdatestr << now - status.mPeerUpdateTS << " secs ago";
+
+
peer_item -> setData(PTW_COL_PEERID, Qt::DisplayRole, QString::fromStdString(*it));
peer_item -> setData(PTW_COL_DHT_STATUS, Qt::DisplayRole, QString::fromStdString(status.mDhtStatusMsg));
peer_item -> setData(PTW_COL_DHT_ADDRESS, Qt::DisplayRole, QString::fromStdString(dhtipstr.str()));
peer_item -> setData(PTW_COL_DHT_UPDATETS, Qt::DisplayRole, QString::fromStdString(dhtupdatestr.str()));
- peer_item -> setData(PTW_COL_PEER_STATUS, Qt::DisplayRole, QString::fromStdString(status.mPeerStatusMsg));
- peer_item -> setData(PTW_COL_PEER_ADDRESS, Qt::DisplayRole, QString::fromStdString(peeripstr.str()));
- peer_item -> setData(PTW_COL_PEER_UPDATETS, Qt::DisplayRole, QString::fromStdString(peerupdatestr.str()));
+ // NOW CONNECT STATE
+ std::ostringstream cpmstr;
+ switch(status.mPeerConnectMode)
+ {
+ case BITDHT_CONNECT_MODE_DIRECT:
+ cpmstr << "Direct";
+ break;
+ case BITDHT_CONNECT_MODE_PROXY:
+ cpmstr << "Proxy VIA ";
+ bdStdPrintId(cpmstr, &(status.mPeerConnectProxyId));
+ break;
+ case BITDHT_CONNECT_MODE_RELAY:
+ cpmstr << "Relay VIA ";
+ bdStdPrintId(cpmstr, &(status.mPeerConnectProxyId));
+ break;
+ default:
+ cpmstr << "None";
+ break;
+ }
+
+ peer_item -> setData(PTW_COL_PEER_CONNECT_STATUS, Qt::DisplayRole, QString::fromStdString(status.mPeerConnectMsg));
+ if (status.mPeerConnectState == PN_PEER_CONN_DISCONNECTED)
+ {
+ peer_item -> setData(PTW_COL_PEER_CONNECT_MODE, Qt::DisplayRole, "");
+ }
+ else
+ {
+ peer_item -> setData(PTW_COL_PEER_CONNECT_MODE, Qt::DisplayRole, QString::fromStdString(cpmstr.str()));
+ }
+
+ // NOW REQ STATE.
+ std::ostringstream reqstr;
+ switch(status.mPeerReqState)
+ {
+ case PN_PEER_REQ_RUNNING:
+ reqstr << "Request Active";
+ break;
+ case PN_PEER_REQ_STOPPED:
+ reqstr << "No Request";
+ break;
+ default:
+ reqstr << "Unknown";
+ break;
+ }
+ peer_item -> setData(PTW_COL_PEER_REQ_STATUS, Qt::DisplayRole, QString::fromStdString(reqstr.str()));
+
+
+ // NOW CB
+ std::ostringstream cbmstr;
+ cpmstr << status.mPeerCbMode;
+
+ std::ostringstream cbpstr;
+ bdStdPrintId(cbpstr, &(status.mPeerCbProxyId));
+
+ peer_item -> setData(PTW_COL_PEER_CB_MSG, Qt::DisplayRole, QString::fromStdString(status.mPeerCbMsg));
+ peer_item -> setData(PTW_COL_PEER_CB_MODE, Qt::DisplayRole, QString::fromStdString(cbmstr.str()));
+ peer_item -> setData(PTW_COL_PEER_CB_PROXY, Qt::DisplayRole, QString::fromStdString(cbpstr.str()));
switch(status.mDhtState)
@@ -353,24 +410,25 @@ void MainWindow::updateNetPeers()
}
- switch(status.mPeerState)
+ switch(status.mPeerConnectState)
{
default:
- case PN_PEER_STATE_DISCONNECTED:
+ case PN_PEER_CONN_DISCONNECTED:
nDisconnPeers++;
break;
- case PN_PEER_STATE_CONNECTED:
+ case PN_PEER_CONN_UDP_STARTED:
+ case PN_PEER_CONN_CONNECTED:
{
switch(status.mPeerConnectMode)
{
default:
- case PN_CONNECT_UDP_DIRECT:
+ case BITDHT_CONNECT_MODE_DIRECT:
nDirectPeers++;
break;
- case PN_CONNECT_UDP_PROXY:
+ case BITDHT_CONNECT_MODE_PROXY:
nProxyPeers++;
break;
- case PN_CONNECT_UDP_RELAY:
+ case BITDHT_CONNECT_MODE_RELAY:
nRelayPeers++;
break;
}
@@ -407,27 +465,23 @@ void MainWindow::updateNetPeers()
/* update the data */
PeerStatus status;
mPeerNet->get_failedpeer_status(*it, status);
- time_t now = time(NULL);
-
- std::ostringstream peeripstr;
- //if (status.mPeerState == PN_PEER_STATE_ONLINE)
- {
- peeripstr << inet_ntoa(status.mPeerAddr.sin_addr);
- peeripstr << ":" << ntohs(status.mPeerAddr.sin_port);
- }
-
- std::ostringstream peerupdatestr;
- peerupdatestr << now - status.mPeerUpdateTS << " secs ago";
-
peer_item -> setData(PTW_COL_PEERID, Qt::DisplayRole, QString::fromStdString(*it));
peer_item -> setData(PTW_COL_DHT_STATUS, Qt::DisplayRole, "Unknown Peer");
peer_item -> setData(PTW_COL_DHT_ADDRESS, Qt::DisplayRole, "");
peer_item -> setData(PTW_COL_DHT_UPDATETS, Qt::DisplayRole, "");
-
- peer_item -> setData(PTW_COL_PEER_STATUS, Qt::DisplayRole, QString::fromStdString(status.mPeerStatusMsg));
- peer_item -> setData(PTW_COL_PEER_ADDRESS, Qt::DisplayRole, QString::fromStdString(peeripstr.str()));
- peer_item -> setData(PTW_COL_PEER_UPDATETS, Qt::DisplayRole, QString::fromStdString(peerupdatestr.str()));
+
+ // NOW CONNECT STATE
+ peer_item -> setData(PTW_COL_PEER_CONNECT_STATUS, Qt::DisplayRole, QString::fromStdString(status.mPeerConnectMsg));
+ peer_item -> setData(PTW_COL_PEER_CONNECT_MODE, Qt::DisplayRole, "");
+ peer_item -> setData(PTW_COL_PEER_REQ_STATUS, Qt::DisplayRole, "None");
+
+ // NOW CB
+ peer_item -> setData(PTW_COL_PEER_CB_MSG, Qt::DisplayRole, QString::fromStdString(status.mPeerCbMsg));
+ peer_item -> setData(PTW_COL_PEER_CB_MODE, Qt::DisplayRole, "");
+ peer_item -> setData(PTW_COL_PEER_CB_PROXY, Qt::DisplayRole, "None");
+
+
}
diff --git a/PeerNetQt/src/mainwindow.ui b/PeerNetQt/src/mainwindow.ui
index 842986b4d..4206d7f49 100644
--- a/PeerNetQt/src/mainwindow.ui
+++ b/PeerNetQt/src/mainwindow.ui
@@ -160,6 +160,36 @@
Dht Status
+
+
+ Connect Status
+
+
+
+
+ Connect Mode
+
+
+
+
+ Request Status
+
+
+
+
+ Cb Status
+
+
+
+
+ Cb Mode
+
+
+
+
+ Cb Address
+
+
Dht Address
@@ -170,21 +200,6 @@
Dht Update
-
-
- Connect Status
-
-
-
-
- Connect Address
-
-
-
-
- Connect Update
-
-
diff --git a/PeerNetQt/src/netstatebox.cc b/PeerNetQt/src/netstatebox.cc
index ea0fe76ab..8d070b542 100644
--- a/PeerNetQt/src/netstatebox.cc
+++ b/PeerNetQt/src/netstatebox.cc
@@ -153,13 +153,13 @@ PeerNetStateBox::PeerNetStateBox()
/* Parameters set externally */
mStunDhtSet = false;
- //time_t mStunDhtTS;
- //bool mStunDhtStable;
+ time_t mStunDhtTS = 0;
+ bool mStunDhtStable = false;
//struct sockaddr_in mStunDhtAddr;
mStunProxySet = false;
- //time_t mStunProxyTS;
- //bool mStunProxyStable;
+ time_t mStunProxyTS = 0;
+ bool mStunProxyStable = false;
//struct sockaddr_in mStunProxyAddr;
mUPnPSet = false;
diff --git a/PeerNetQt/src/peernet.cc b/PeerNetQt/src/peernet.cc
index f3f5bafaa..f32676b68 100644
--- a/PeerNetQt/src/peernet.cc
+++ b/PeerNetQt/src/peernet.cc
@@ -16,7 +16,7 @@ PeerNet::PeerNet(std::string id, std::string configpath, uint16_t port)
{
mDoUdpStackRestrictions = false;
mLocalNetTesting = false;
-
+ mMinuteTS = 0;
std::cerr << "PeerNet::PeerNet()" << std::endl;
std::cerr << "Using Id: " << id;
@@ -263,10 +263,33 @@ int PeerNet::add_peer(std::string id)
it->second.mDhtState = PN_DHT_STATE_SEARCHING;
it->second.mDhtUpdateTS = time(NULL);
- it->second.mPeerStatusMsg = "Disconnected";
- bdsockaddr_clear(&(it->second.mPeerAddr));
- it->second.mPeerState = PN_PEER_STATE_DISCONNECTED;
- it->second.mPeerUpdateTS = time(NULL);
+ // Initialise Everything.
+
+ it->second.mPeerReqStatusMsg = "Just Added";
+ it->second.mPeerReqState = PN_PEER_REQ_STOPPED;
+ it->second.mPeerReqMode = 0;
+ //it->second.mPeerReqProxyId;
+ it->second.mPeerReqTS = time(NULL);
+
+ it->second.mPeerCbMsg = "No CB Yet";
+ it->second.mPeerCbMode = 0;
+ it->second.mPeerCbPoint = 0;
+ //it->second.mPeerCbProxyId = 0;
+ //it->second.mPeerCbDestId = 0;
+ it->second.mPeerCbTS = 0;
+
+ it->second.mPeerConnectState = PN_PEER_CONN_DISCONNECTED;
+ it->second.mPeerConnectMsg = "Disconnected";
+ it->second.mPeerConnectFd = 0;
+ it->second.mPeerConnectMode = 0;
+ //it->second.mPeerConnectProxyId;
+ it->second.mPeerConnectPoint = 0;
+
+ it->second.mPeerConnectUdpTS = 0;
+ it->second.mPeerConnectTS = 0;
+ it->second.mPeerConnectClosedTS = 0;
+
+ bdsockaddr_clear(&(it->second.mPeerConnectAddr));
addedPeer = true;
}
@@ -508,11 +531,13 @@ int PeerNet::get_failedpeer_status(std::string id, PeerStatus &status)
int PeerNet::get_relayends(std::list &relayEnds)
{
mRelayReceiver->getRelayEnds(relayEnds);
+ return 1;
}
int PeerNet::get_relayproxies(std::list &relayProxies)
{
mRelayReceiver->getRelayProxies(relayProxies);
+ return 1;
}
@@ -662,8 +687,7 @@ int PeerNet::dhtNodeCallback(const bdId *id, uint32_t peerflags)
#endif
}
- if ((peerflags & BITDHT_PEER_STATUS_DHT_APPL)
- && (peerflags & BITDHT_PEER_STATUS_DHT_APPL_VERSION))
+ if (peerflags & BITDHT_PEER_STATUS_DHT_ENGINE_VERSION)
{
#ifdef PEERNET_DEBUG
std::cerr << "PeerNet::dhtNodeCallback() Passing Local Peer to DhtStunner: ";
@@ -721,13 +745,13 @@ int PeerNet::dhtPeerCallback(const bdId *id, uint32_t status)
break;
case BITDHT_MGR_QUERY_PEER_OFFLINE:
{
- it->second.mDhtStatusMsg = "Peer Offline";
+ it->second.mDhtStatusMsg = "Offline";
it->second.mDhtState = PN_DHT_STATE_OFFLINE;
}
break;
case BITDHT_MGR_QUERY_PEER_UNREACHABLE:
{
- it->second.mDhtStatusMsg = "Peer Unreachable";
+ it->second.mDhtStatusMsg = "Unreachable";
it->second.mDhtState = PN_DHT_STATE_UNREACHABLE;
it->second.mDhtAddr = id->addr;
@@ -736,7 +760,7 @@ int PeerNet::dhtPeerCallback(const bdId *id, uint32_t status)
break;
case BITDHT_MGR_QUERY_PEER_ONLINE:
{
- it->second.mDhtStatusMsg = "Peer Online";
+ it->second.mDhtStatusMsg = "Online";
it->second.mDhtState = PN_DHT_STATE_ONLINE;
it->second.mDhtAddr = id->addr;
@@ -764,13 +788,10 @@ int PeerNet::dhtPeerCallback(const bdId *id, uint32_t status)
int PeerNet::OnlinePeerCallback_locked(const bdId *id, uint32_t status, PeerStatus *peerStatus)
{
- if ((peerStatus->mPeerState == PN_PEER_STATE_CONNECTION_INITIATED) ||
- (peerStatus->mPeerState == PN_PEER_STATE_CONNECTION_AUTHORISED) ||
- (peerStatus->mPeerState == PN_PEER_STATE_UDP_STARTED) ||
- (peerStatus->mPeerState == PN_PEER_STATE_CONNECTED))
+ if (peerStatus->mPeerConnectState != PN_PEER_CONN_DISCONNECTED)
{
- std::cerr << "dhtPeerCallback. Peer Online, but connection already underway: ";
+ std::cerr << "dhtPeerCallback. WARNING Ignoring Callback. Peer Online, but connection already underway: ";
bdStdPrintId(std::cerr, id);
std::cerr << std::endl;
}
@@ -797,12 +818,9 @@ int PeerNet::OnlinePeerCallback_locked(const bdId *id, uint32_t status, PeerStat
int PeerNet::UnreachablePeerCallback_locked(const bdId *id, uint32_t status, PeerStatus *peerStatus)
{
- if ((peerStatus->mPeerState == PN_PEER_STATE_CONNECTION_INITIATED) ||
- (peerStatus->mPeerState == PN_PEER_STATE_CONNECTION_AUTHORISED) ||
- (peerStatus->mPeerState == PN_PEER_STATE_UDP_STARTED) ||
- (peerStatus->mPeerState == PN_PEER_STATE_CONNECTED))
+ if (peerStatus->mPeerConnectState != PN_PEER_CONN_DISCONNECTED)
{
- std::cerr << "dhtPeerCallback. Peer Unreachable, but connection already underway: ";
+ std::cerr << "dhtPeerCallback. WARNING Ignoring Callback, Peer Unreachable, but connection already underway: ";
bdStdPrintId(std::cerr, id);
std::cerr << std::endl;
@@ -889,6 +907,32 @@ int PeerNet::dhtValueCallback(const bdNodeId *id, std::string key, uint32_t stat
return 1;
}
+PeerStatus *PeerNet::getPeerStatus_locked(const bdId *peerId)
+{
+ std::cerr << "PeerNet::getPeerStatus_locked() for: ";
+ bdStdPrintId(std::cerr,peerId);
+ std::cerr << std::endl;
+
+ std::ostringstream str;
+ bdStdPrintNodeId(str, &(peerId->id));
+ std::string id = str.str();
+
+ /* check if they are in our friend list */
+ std::map::iterator it = mPeers.find(id);
+
+ if (it == mPeers.end())
+ {
+ std::cerr << "PeerNet::getPeerStatus_locked() WARNING Failed to find PeerStatus for: ";
+ bdStdPrintId(std::cerr,peerId);
+ std::cerr << std::endl;
+
+ return NULL;
+ }
+ return &(it->second);
+}
+
+
+
int PeerNet::dhtConnectCallback(const bdId *srcId, const bdId *proxyId, const bdId *destId,
uint32_t mode, uint32_t point, uint32_t cbtype, uint32_t errcode)
{
@@ -915,6 +959,7 @@ int PeerNet::dhtConnectCallback(const bdId *srcId, const bdId *proxyId, const bd
*/
bdId peerId;
+ time_t now = time(NULL);
switch(point)
{
@@ -1169,7 +1214,79 @@ int PeerNet::dhtConnectCallback(const bdId *srcId, const bdId *proxyId, const bd
std::cerr << " ErrorType: " << errtype;
std::cerr << std::endl;
+ bdStackMutex stack(mPeerMutex); /********** LOCKED MUTEX ***************/
+
+ PeerStatus *ps = getPeerStatus_locked(&peerId);
+ if (ps)
+ {
+ ps->mPeerCbMsg = "ERROR : ";
+ ps->mPeerCbMsg += decodeConnectionError(errcode);
+ ps->mPeerCbMode = mode;
+ ps->mPeerCbPoint = point;
+ ps->mPeerCbProxyId = *proxyId;
+ ps->mPeerCbDestId = peerId;
+ ps->mPeerCbTS = now;
+ }
+ else
+ {
+ std::cerr << "dhtConnectionCallback() ";
+ std::cerr << "ERROR Unknown Peer";
+ std::cerr << std::endl;
+ }
+ }
+ break;
+
+ case BITDHT_CONNECT_CB_REQUEST:
+ {
+ std::cerr << "dhtConnectionCallback() Local Connection Request Feedback:";
+ bdStdPrintId(std::cerr, &(peerId));
+ std::cerr << std::endl;
+ std::cerr << "dhtConnectionCallback() Proxy:";
+ bdStdPrintId(std::cerr, proxyId);
+ std::cerr << std::endl;
+
+ if (point != BD_PROXY_CONNECTION_START_POINT)
+ {
+ std::cerr << "dhtConnectionCallback() ERROR Cannot find PeerStatus";
+ std::cerr << std::endl;
+ return 0;
+ }
+
+ bdStackMutex stack(mPeerMutex); /********** LOCKED MUTEX ***************/
+
+ PeerStatus *ps = getPeerStatus_locked(&peerId);
+ if (ps)
+ {
+ if (errcode)
+ {
+ ps->mPeerReqStatusMsg = "STOPPED: ";
+ ps->mPeerReqStatusMsg += decodeConnectionError(errcode);
+ ps->mPeerReqState = PN_PEER_REQ_STOPPED;
+ ps->mPeerReqTS = now;
+ }
+ else // a new connection attempt.
+ {
+ ps->mPeerReqStatusMsg = "Connect Attempt";
+ ps->mPeerReqState = PN_PEER_REQ_RUNNING;
+ ps->mPeerReqMode = mode;
+ ps->mPeerReqProxyId = *proxyId;
+ ps->mPeerReqTS = now;
+
+ // This also is flagged into the instant Cb info.
+ ps->mPeerCbMsg = "Local Connect Attempt";
+ ps->mPeerCbMode = mode;
+ ps->mPeerCbPoint = point;
+ ps->mPeerCbProxyId = *proxyId;
+ ps->mPeerCbDestId = peerId;
+ ps->mPeerCbTS = now;
+ }
+ }
+ else
+ {
+ std::cerr << "dhtConnectionCallback() ERROR Cannot find PeerStatus";
+ std::cerr << std::endl;
+ }
}
break;
@@ -1223,6 +1340,7 @@ int PeerNet::minuteTick()
netStateTick();
mRelayReceiver->checkRelays();
}
+ return 1;
}
#define DHT_PEERS_ACTIVE 2
@@ -1244,6 +1362,8 @@ int PeerNet::netStateTick()
{
mNetStateBox.setAddressStunProxy(&extAddr, extStable != 0);
}
+
+ return 1;
}
@@ -1253,6 +1373,7 @@ int PeerNet::doActions()
std::cerr << "PeerNet::doActions()" << std::endl;
#endif
+ time_t now = time(NULL);
while(mActions.size() > 0)
{
@@ -1280,12 +1401,16 @@ int PeerNet::doActions()
std::cerr << " mode: " << action.mMode;
std::cerr << std::endl;
+ bool connectionRequested = false;
+
if ((action.mMode == BITDHT_CONNECT_MODE_DIRECT) ||
(action.mMode == BITDHT_CONNECT_MODE_RELAY))
{
struct sockaddr_in laddr; // We zero this address. The DHT layer should be able to handle this!
sockaddr_clear(&laddr);
- mUdpBitDht->ConnectionRequest(&laddr, &(action.mDestId.id), action.mMode);
+ uint32_t start = 1;
+ mUdpBitDht->ConnectionRequest(&laddr, &(action.mDestId.id), action.mMode, start);
+ connectionRequested = true;
}
else if (action.mMode == BITDHT_CONNECT_MODE_PROXY)
{
@@ -1302,7 +1427,9 @@ int PeerNet::doActions()
std::cerr << " is OkGo as we have Stable Own External Proxy Address";
std::cerr << std::endl;
- mUdpBitDht->ConnectionRequest(&extaddr, &(action.mDestId.id), action.mMode);
+ int start = 1;
+ mUdpBitDht->ConnectionRequest(&extaddr, &(action.mDestId.id), action.mMode, start);
+ connectionRequested = true;
}
else
{
@@ -1320,6 +1447,26 @@ int PeerNet::doActions()
std::cerr << std::endl;
}
}
+
+ if (connectionRequested)
+ {
+ bdStackMutex stack(mPeerMutex); /********** LOCKED MUTEX ***************/
+
+ PeerStatus *ps = getPeerStatus_locked(&(action.mDestId));
+ if (ps)
+ {
+ ps->mPeerReqStatusMsg = "Connect Request";
+ ps->mPeerReqState = PN_PEER_REQ_RUNNING;
+ ps->mPeerReqMode = action.mMode;
+ ps->mPeerReqTS = now;
+ }
+ else
+ {
+ std::cerr << "PeerAction: Connect ERROR Cannot find PeerStatus";
+ std::cerr << std::endl;
+ }
+ }
+
}
break;
@@ -1335,6 +1482,44 @@ int PeerNet::doActions()
mUdpBitDht->ConnectionAuth(&(action.mSrcId), &(action.mProxyId), &(action.mDestId),
action.mMode, action.mPoint, action.mAnswer);
+
+ // Only feedback to the gui if we are at END.
+ if (action.mPoint == BD_PROXY_CONNECTION_END_POINT)
+ {
+ bdStackMutex stack(mPeerMutex); /********** LOCKED MUTEX ***************/
+
+ PeerStatus *ps = getPeerStatus_locked(&(action.mSrcId));
+ if (ps)
+ {
+ if (action.mAnswer)
+ {
+ ps->mPeerCbMsg = "WE DENIED AUTH: ERROR : ";
+ ps->mPeerCbMsg += decodeConnectionError(action.mAnswer);
+ }
+ else
+ {
+ ps->mPeerCbMsg = "We AUTHED";
+ }
+ ps->mPeerCbMode = action.mMode;
+ ps->mPeerCbPoint = action.mPoint;
+ ps->mPeerCbProxyId = action.mProxyId;
+ ps->mPeerCbDestId = action.mSrcId;
+ ps->mPeerCbTS = now;
+ }
+ // Not an error if AUTH_DENIED - cos we don't know them! (so won't be in peerList).
+ else if (action.mAnswer | BITDHT_CONNECT_ERROR_AUTH_DENIED)
+ {
+ std::cerr << "PeerAction Authorise Connection ";
+ std::cerr << "Denied Unknown Peer";
+ std::cerr << std::endl;
+ }
+ else
+ {
+ std::cerr << "PeerAction Authorise Connection ";
+ std::cerr << "ERROR Unknown Peer & !DENIED ???";
+ std::cerr << std::endl;
+ }
+ }
}
break;
@@ -1458,29 +1643,38 @@ int PeerNet::checkConnectionAllowed(const bdId *peerId, int mode)
/* flag as failed */
it->second.mId = id;
- it->second.mPeerAddr = peerId->addr;
it->second.mDhtStatusMsg = "Unknown";
it->second.mDhtState = PN_DHT_STATE_UNKNOWN;
it->second.mDhtUpdateTS = now;
- it->second.mPeerStatusMsg = "Denied Non-Friend";
- it->second.mPeerState = PN_PEER_STATE_DENIED_NOT_FRIEND;
- it->second.mPeerUpdateTS = now;
+ it->second.mPeerReqStatusMsg = "Denied Non-Friend";
+ it->second.mPeerReqState = PN_PEER_REQ_STOPPED;
+ it->second.mPeerReqTS = now;
+ it->second.mPeerReqMode = 0;
+ //it->second.mPeerProxyId;
+ it->second.mPeerReqTS = now;
+ it->second.mPeerCbMsg = "Denied Non-Friend";
+
+ it->second.mPeerConnectMsg = "Denied Non-Friend";
+ it->second.mPeerConnectState = PN_PEER_CONN_DISCONNECTED;
+
+
return 0;
//return NOT_FRIEND;
}
/* are a friend */
- if (it->second.mPeerState == PN_PEER_STATE_CONNECTED)
+ if (it->second.mPeerConnectState == PN_PEER_CONN_CONNECTED)
{
- std::cerr << "PeerNet::checkConnectionAllowed() Peer Already Connected, DENIED";
+ std::cerr << "PeerNet::checkConnectionAllowed() ERROR Peer Already Connected, DENIED";
std::cerr << std::endl;
- it->second.mPeerStatusMsg = "2nd Connection Attempt!";
- it->second.mPeerUpdateTS = now;
+ // STATUS UPDATE DONE IN ACTION.
+ //it->second.mPeerStatusMsg = "2nd Connection Attempt!";
+ //it->second.mPeerUpdateTS = now;
return 0;
//return ALREADY_CONNECTED;
}
@@ -1500,15 +1694,14 @@ int PeerNet::checkConnectionAllowed(const bdId *peerId, int mode)
}
#endif
- it->second.mPeerAddr = peerId->addr;
- it->second.mPeerStatusMsg = "Connection Authorised";
- it->second.mPeerState = PN_PEER_STATE_CONNECTION_AUTHORISED;
- it->second.mPeerUpdateTS = now;
-
return 1;
//return CONNECTION_OKAY;
}
+
+
+
+
void PeerNet::initiateConnection(const bdId *srcId, const bdId *proxyId, const bdId *destId, uint32_t mode, uint32_t loc, uint32_t answer)
{
std::cerr << "PeerNet::initiateConnection()";
@@ -1550,6 +1743,15 @@ void PeerNet::initiateConnection(const bdId *srcId, const bdId *proxyId, const b
std::map::iterator it = mPeers.find(peerId);
if (it == mPeers.end())
{
+ std::cerr << "PeerNet::initiateConnection() ERROR Peer not found";
+ std::cerr << std::endl;
+ return;
+ }
+
+ if (it->second.mPeerConnectState != PN_PEER_CONN_DISCONNECTED)
+ {
+ std::cerr << "PeerNet::initiateConnection() ERROR Peer is not Disconnected";
+ std::cerr << std::endl;
return;
}
@@ -1581,8 +1783,10 @@ void PeerNet::initiateConnection(const bdId *srcId, const bdId *proxyId, const b
return;
}
- it->second.mPeerFd = fd;
-
+ it->second.mPeerConnectFd = fd;
+ it->second.mPeerConnectProxyId = *proxyId;
+ it->second.mPeerConnectPeerId = peerConnectId;
+
#define PEERNET_DIRECT_CONN_PERIOD 5
#define PEERNET_PROXY_CONN_PERIOD 30
@@ -1616,9 +1820,9 @@ void PeerNet::initiateConnection(const bdId *srcId, const bdId *proxyId, const b
}
/* store results in Status */
- it->second.mPeerStatusMsg = "UDP started";
- it->second.mPeerState = PN_PEER_STATE_UDP_STARTED;
- it->second.mPeerConnTS = time(NULL);
+ it->second.mPeerConnectMsg = "UDP started";
+ it->second.mPeerConnectState = PN_PEER_CONN_UDP_STARTED;
+ it->second.mPeerConnectUdpTS = time(NULL);
it->second.mPeerConnectMode = mode;
it->second.mPeerConnectPoint = loc;
@@ -1672,10 +1876,7 @@ int PeerNet::installRelayConnection(const bdId *srcId, const bdId *destId)
return 0;
//return CONNECT_MODE_OVERLOADED;
}
-
- /* these todo */
- std::cerr << "PeerNet::installRelayConnection() TODO";
- std::cerr << std::endl;
+ return 0;
}
@@ -1709,37 +1910,81 @@ void PeerNet::monitorConnections()
time_t now = time(NULL);
for(it = mPeers.begin(); it != mPeers.end(); it++)
{
- if (it->second.mPeerState == PN_PEER_STATE_UDP_STARTED)
+ if (it->second.mPeerConnectState == PN_PEER_CONN_UDP_STARTED)
{
std::cerr << "PeerNet::monitorConnections() Connection in progress to: " << it->second.mId;
std::cerr << std::endl;
- int fd = it->second.mPeerFd;
+ int fd = it->second.mPeerConnectFd;
if (tou_connected(fd))
{
std::cerr << "PeerNet::monitorConnections() InProgress Connection Now Active: " << it->second.mId;
std::cerr << std::endl;
/* switch state! */
- it->second.mPeerState = PN_PEER_STATE_CONNECTED;
- it->second.mPeerStatusMsg = "Connected!";
+ it->second.mPeerConnectState = PN_PEER_CONN_CONNECTED;
+ it->second.mPeerConnectTS = time(NULL);
+
+ std::ostringstream msg;
+ msg << "Connected in " << it->second.mPeerConnectTS - it->second.mPeerConnectUdpTS;
+ msg << " secs";
+ it->second.mPeerConnectMsg = msg.str();
+
+ // Remove the Connection Request.
+ if (it->second.mPeerReqState == PN_PEER_REQ_RUNNING)
+ {
+ std::cerr << "PeerNet::monitorConnections() Request Active, Stopping Request";
+ std::cerr << std::endl;
+
+
+ struct sockaddr_in tmpaddr;
+ bdsockaddr_clear(&tmpaddr);
+ int start = 0;
+ mUdpBitDht->ConnectionRequest(&tmpaddr, &(it->second.mPeerConnectPeerId.id), it->second.mPeerConnectMode, start);
+ }
+ // only an error if we initiated the connection.
+ else if (it->second.mPeerConnectPoint == BD_PROXY_CONNECTION_START_POINT)
+ {
+ std::cerr << "PeerNet::monitorConnections() ERROR Request not active, can't stop";
+ std::cerr << std::endl;
+ }
+
}
- else if (now - it->second.mPeerConnTS > PEERNET_CONNECT_TIMEOUT)
+ else if (now - it->second.mPeerConnectUdpTS > PEERNET_CONNECT_TIMEOUT)
{
std::cerr << "PeerNet::monitorConnections() InProgress Connection Failed: " << it->second.mId;
std::cerr << std::endl;
/* shut id down */
- it->second.mPeerState = PN_PEER_STATE_UDP_FAILED;
- it->second.mPeerStatusMsg = "UDP Failed";
+ it->second.mPeerConnectState = PN_PEER_CONN_DISCONNECTED;
+ it->second.mPeerConnectMsg = "UDP Failed";
tou_close(fd);
+
+ if (it->second.mPeerReqState == PN_PEER_REQ_RUNNING)
+ {
+ std::cerr << "PeerNet::monitorConnections() Request Active (Paused)... restarting";
+ std::cerr << std::endl;
+
+ // tell it to keep going.
+ struct sockaddr_in tmpaddr;
+ bdsockaddr_clear(&tmpaddr);
+ int start = 1;
+ mUdpBitDht->ConnectionRequest(&tmpaddr, &(it->second.mPeerConnectPeerId.id), it->second.mPeerConnectMode, start);
+ }
+ // only an error if we initiated the connection.
+ else if (it->second.mPeerConnectPoint == BD_PROXY_CONNECTION_START_POINT)
+ {
+ std::cerr << "PeerNet::monitorConnections() ERROR Request not active, can't stop";
+ std::cerr << std::endl;
+ }
+
}
}
- if (it->second.mPeerState == PN_PEER_STATE_CONNECTED)
+ if (it->second.mPeerConnectState == PN_PEER_CONN_CONNECTED)
{
/* fd should be valid, check it */
- int fd = it->second.mPeerFd;
+ int fd = it->second.mPeerConnectFd;
if (tou_connected(fd))
{
/* check for traffic */
@@ -1749,33 +1994,16 @@ void PeerNet::monitorConnections()
if (read > 0)
{
std::string msg(buf);
- std::cerr << "TS: " << time(NULL) << " From: " << it->second.mId;
- std::cerr << " RawMsg: " << msg;
- std::cerr << std::endl;
-
-#if 1
for(int i = 0; i < msg.size(); )
{
if (msg[i] == '^')
- {
msg.erase(i,1);
- }
else
- {
i++;
- }
}
-#endif
+
if (msg.size() > 0)
{
- //std::cerr << "PeerNet::monitorConnections() Read from Connection: " << it->second.mId;
- //std::cerr << std::endl;
- //std::cerr << "PeerNet::monitorConnections() CleanedMsg: " << msg;
- //std::cerr << std::endl;
- std::cerr << "TS: " << time(NULL) << " From: " << it->second.mId;
- std::cerr << " RawMsg: " << msg;
- std::cerr << std::endl;
-
it->second.mPeerIncoming += msg;
}
}
@@ -1785,8 +2013,12 @@ void PeerNet::monitorConnections()
std::cerr << "PeerNet::monitorConnections() Active Connection Closed: " << it->second.mId;
std::cerr << std::endl;
- it->second.mPeerState = PN_PEER_STATE_UDP_CLOSED;
- it->second.mPeerStatusMsg = "Connection Closed";
+ it->second.mPeerConnectState = PN_PEER_CONN_DISCONNECTED;
+ it->second.mPeerConnectClosedTS = time(NULL);
+ std::ostringstream msg;
+ msg << "Closed, Alive for: " << it->second.mPeerConnectClosedTS - it->second.mPeerConnectTS;
+ msg << " secs";
+ it->second.mPeerConnectMsg = msg.str();
tou_close(fd);
}
}
@@ -1798,17 +2030,17 @@ void PeerNet::sendMessage(std::string msg)
{
bdStackMutex stack(mPeerMutex); /********** LOCKED MUTEX ***************/
- std::cerr << "PeerNet::sendMessage() : " << msg;
- std::cerr << std::endl;
+ //std::cerr << "PeerNet::sendMessage() : " << msg;
+ //std::cerr << std::endl;
std::map::iterator it;
for(it = mPeers.begin(); it != mPeers.end(); it++)
{
- if (it->second.mPeerState == PN_PEER_STATE_CONNECTED)
+ if (it->second.mPeerConnectState == PN_PEER_CONN_CONNECTED)
{
/* fd should be valid, check it */
- int fd = it->second.mPeerFd;
+ int fd = it->second.mPeerConnectFd;
if (tou_connected(fd))
{
int written = tou_write(fd, msg.c_str(), msg.size());
@@ -1820,8 +2052,8 @@ void PeerNet::sendMessage(std::string msg)
}
else
{
- std::cerr << "PeerNet::sendMessage() Sent to " << it->second.mId;
- std::cerr << std::endl;
+ //std::cerr << "PeerNet::sendMessage() Sent to " << it->second.mId;
+ //std::cerr << std::endl;
}
}
}
diff --git a/PeerNetQt/src/peernet.h b/PeerNetQt/src/peernet.h
index 6e24a3b01..8ce77ccf2 100644
--- a/PeerNetQt/src/peernet.h
+++ b/PeerNetQt/src/peernet.h
@@ -29,6 +29,7 @@
#define PN_DHT_STATE_UNREACHABLE 4
#define PN_DHT_STATE_ONLINE 5
+#if 0
#define PN_PEER_STATE_DISCONNECTED 1
#define PN_PEER_STATE_DENIED_NOT_FRIEND 2
#define PN_PEER_STATE_DENIED_UNAVAILABLE_MODE 3
@@ -40,12 +41,20 @@
#define PN_PEER_STATE_CONNECTION_AUTHORISED 8
#define PN_PEER_STATE_UDP_STARTED 9
#define PN_PEER_STATE_CONNECTED 10
+#endif
-#define PN_CONNECT_UDP_DIRECT 1
-#define PN_CONNECT_UDP_PROXY 2
-#define PN_CONNECT_UDP_RELAY 3
+//#define PN_CONNECT_UDP_DIRECT 1
+//#define PN_CONNECT_UDP_PROXY 2
+//#define PN_CONNECT_UDP_RELAY 3
+#define PN_PEER_CONN_DISCONNECTED 1
+#define PN_PEER_CONN_UDP_STARTED 2
+#define PN_PEER_CONN_CONNECTED 3
+
+
+#define PN_PEER_REQ_STOPPED 1
+#define PN_PEER_REQ_RUNNING 2
class DhtPeer
{
@@ -64,17 +73,39 @@ class PeerStatus
struct sockaddr_in mDhtAddr;
time_t mDhtUpdateTS;
- /* Connection Status */
- std::string mPeerStatusMsg;
- uint32_t mPeerState;
- struct sockaddr_in mPeerAddr;
- time_t mPeerUpdateTS;
-
- int mPeerFd;
+ /* Connection Request Status */
+ std::string mPeerReqStatusMsg;
+ uint32_t mPeerReqState;
+ uint32_t mPeerReqMode;
+ bdId mPeerReqProxyId;
+ time_t mPeerReqTS;
+
+ /* Callback Info */
+ std::string mPeerCbMsg;
+ uint32_t mPeerCbMode;
+ uint32_t mPeerCbPoint;
+ bdId mPeerCbProxyId;
+ bdId mPeerCbDestId;
+ time_t mPeerCbTS;
+
+
+ /* Actual Connection Status */
+ uint32_t mPeerConnectState;
+ std::string mPeerConnectMsg;
+ int mPeerConnectFd;
uint32_t mPeerConnectMode;
+ bdId mPeerConnectPeerId;
+ bdId mPeerConnectProxyId;
+ struct sockaddr_in mPeerConnectAddr;
uint32_t mPeerConnectPoint;
- time_t mPeerConnTS;
+
+ time_t mPeerConnectUdpTS;
+ time_t mPeerConnectTS;
+ time_t mPeerConnectClosedTS;
+
+ /* Chat Messages */
std::string mPeerIncoming;
+
};
@@ -185,6 +216,10 @@ int UnreachablePeerCallback_locked(const bdId *id,
private:
+ // Utility functions.
+ PeerStatus *getPeerStatus_locked(const bdId *peerId);
+
+
/* The Two Stacks */
UdpStack *mUdpStack;
UdpStack *mUdpProxyStack;