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;