p2p2 0.9.0 → 0.10.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/p2p2/p1.rb +35 -15
- data/lib/p2p2/p2.rb +34 -17
- data/lib/p2p2/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3a8d2cfcbc87835a4412869ae872fb7cba49c48b8e4f94c81cf5678b39f34746
|
4
|
+
data.tar.gz: c39358930d074c99c8260c9207d821ab6f94f6bb424cc0d32af0165c1218d196
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6c64ac875943bafca20918e9a44a8588ddc77cff74ce52965facf4014fa79c87e8b7fb95164419bed4c015d90765330d2f4700b04c1cafe33c08cc4483f4e482
|
7
|
+
data.tar.gz: ce6fe66c73e8bbc676ac8d23c1de988c89dbcead089fc6c4c7ae65845954f48306926c6beb5d6abc8d3f07bf8f8ec2c4e2ea1b0694830530887b334be14bc855
|
data/lib/p2p2/p1.rb
CHANGED
@@ -173,15 +173,19 @@ module P2p2
|
|
173
173
|
if app_id == 0
|
174
174
|
case data[ 8 ].unpack( 'C' ).first
|
175
175
|
when PEER_ADDR
|
176
|
-
return if sockaddr != @p2pd_sockaddr
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
176
|
+
return if info[ :peer_addr ] || ( sockaddr != @p2pd_sockaddr )
|
177
|
+
|
178
|
+
peer_addr = data[ 9..-1 ]
|
179
|
+
info[ :peer_addr ] = data[ 9..-1 ]
|
180
|
+
# puts "debug peer addr #{ Addrinfo.new( info[ :peer_addr ] ).ip_unpack.inspect } #{ Time.new }"
|
181
|
+
loop_send_heartbeat( p1 )
|
182
|
+
when HEARTBEAT
|
183
|
+
return if info[ :p2_addr ] || ( sockaddr != info[ :peer_addr ] )
|
184
|
+
|
185
|
+
info[ :p2_addr ] = sockaddr
|
186
|
+
# puts "debug p2 addr #{ Addrinfo.new( info[ :p2_addr ] ).ip_unpack.inspect } #{ Time.new }"
|
187
|
+
info[ :last_traffic_at ] = now
|
188
|
+
loop_send_status( p1 )
|
185
189
|
when A_NEW_APP
|
186
190
|
return if sockaddr != info[ :p2_addr ]
|
187
191
|
|
@@ -588,7 +592,8 @@ module P2p2
|
|
588
592
|
caches: [], # 块读出缓存 [ shadow_id, data ]
|
589
593
|
chunks: [], # 块队列 filename
|
590
594
|
spring: 0, # 块后缀,结块时,如果块队列不为空,则自增,为空,则置为0
|
591
|
-
|
595
|
+
peer_addr: nil, # 对面地址,连发心跳包打洞,离p2pd近的一方通常会撞死几个直到对面出来
|
596
|
+
p2_addr: nil, # p2地址
|
592
597
|
shadow_exts: {}, # 长命信息 shadow_id => {}
|
593
598
|
shadow_ids: {}, # shadow_id => app_id
|
594
599
|
app_ids: {}, # app_id => shadow_id
|
@@ -613,7 +618,7 @@ module P2p2
|
|
613
618
|
def loop_expire( p1 )
|
614
619
|
Thread.new do
|
615
620
|
loop do
|
616
|
-
sleep
|
621
|
+
sleep 60
|
617
622
|
|
618
623
|
break if p1.closed?
|
619
624
|
|
@@ -625,13 +630,29 @@ module P2p2
|
|
625
630
|
end
|
626
631
|
else
|
627
632
|
@mutex.synchronize do
|
628
|
-
send_heartbeat( p1 )
|
633
|
+
send_heartbeat( p1, p1_info[ :p2_addr ] )
|
629
634
|
end
|
630
635
|
end
|
631
636
|
end
|
632
637
|
end
|
633
638
|
end
|
634
639
|
|
640
|
+
def loop_send_heartbeat( p1 )
|
641
|
+
Thread.new do
|
642
|
+
30.times do
|
643
|
+
break if p1.closed?
|
644
|
+
|
645
|
+
p1_info = @infos[ p1 ]
|
646
|
+
|
647
|
+
@mutex.synchronize do
|
648
|
+
send_heartbeat( p1, p1_info[ :peer_addr ] )
|
649
|
+
end
|
650
|
+
|
651
|
+
sleep STATUS_INTERVAL
|
652
|
+
end
|
653
|
+
end
|
654
|
+
end
|
655
|
+
|
635
656
|
def loop_send_status( p1 )
|
636
657
|
Thread.new do
|
637
658
|
loop do
|
@@ -732,10 +753,9 @@ module P2p2
|
|
732
753
|
end
|
733
754
|
end
|
734
755
|
|
735
|
-
def send_heartbeat( p1 )
|
736
|
-
info = @infos[ p1 ]
|
756
|
+
def send_heartbeat( p1, target_addr )
|
737
757
|
ctlmsg = [ 0, HEARTBEAT, rand( 128 ) ].pack( 'Q>CC' )
|
738
|
-
send_pack( p1, ctlmsg,
|
758
|
+
send_pack( p1, ctlmsg, target_addr )
|
739
759
|
end
|
740
760
|
|
741
761
|
def send_pack( sock, data, target_sockaddr )
|
data/lib/p2p2/p2.rb
CHANGED
@@ -211,8 +211,6 @@ module P2p2
|
|
211
211
|
end
|
212
212
|
end
|
213
213
|
|
214
|
-
|
215
|
-
|
216
214
|
##
|
217
215
|
# read p2
|
218
216
|
#
|
@@ -226,15 +224,18 @@ module P2p2
|
|
226
224
|
if shadow_id == 0
|
227
225
|
case data[ 8 ].unpack( 'C' ).first
|
228
226
|
when PEER_ADDR
|
229
|
-
return if sockaddr != @p2pd_sockaddr
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
227
|
+
return if info[ :peer_addr ] || ( sockaddr != @p2pd_sockaddr )
|
228
|
+
|
229
|
+
info[ :peer_addr ] = data[ 9..-1 ]
|
230
|
+
# puts "debug peer addr #{ Addrinfo.new( info[ :peer_addr ] ).ip_unpack.inspect } #{ Time.new }"
|
231
|
+
loop_send_heartbeat( p2 )
|
232
|
+
when HEARTBEAT
|
233
|
+
return if info[ :p1_addr ] || ( sockaddr != info[ :peer_addr ] )
|
234
|
+
|
235
|
+
info[ :p1_addr ] = sockaddr
|
236
|
+
# puts "debug p1 addr #{ Addrinfo.new( info[ :p1_addr ] ).ip_unpack.inspect } #{ Time.new }"
|
237
|
+
info[ :last_traffic_at ] = now
|
238
|
+
loop_send_status( p2 )
|
238
239
|
when PAIRED
|
239
240
|
return if sockaddr != info[ :p1_addr ]
|
240
241
|
|
@@ -616,7 +617,8 @@ module P2p2
|
|
616
617
|
caches: [], # 块读出缓存 [ app_id, data ]
|
617
618
|
chunks: [], # 块队列 filename
|
618
619
|
spring: 0, # 块后缀,结块时,如果块队列不为空,则自增,为空,则置为0
|
619
|
-
|
620
|
+
peer_addr: nil, # 对面地址,连发心跳包打洞,离p2pd近的一方通常会撞死几个直到对面出来
|
621
|
+
p1_addr: nil, # p1地址
|
620
622
|
app_exts: {}, # 传输相关 app_id => {}
|
621
623
|
app_ids: {}, # app_id => shadow_id
|
622
624
|
shadow_ids: {}, # shadow_id => app_id
|
@@ -641,7 +643,7 @@ module P2p2
|
|
641
643
|
def loop_expire( p2 )
|
642
644
|
Thread.new do
|
643
645
|
loop do
|
644
|
-
sleep
|
646
|
+
sleep 60
|
645
647
|
|
646
648
|
break if p2.closed?
|
647
649
|
|
@@ -653,13 +655,29 @@ module P2p2
|
|
653
655
|
end
|
654
656
|
else
|
655
657
|
@mutex.synchronize do
|
656
|
-
send_heartbeat( p2 )
|
658
|
+
send_heartbeat( p2, p2_info[ :p1_addr ] )
|
657
659
|
end
|
658
660
|
end
|
659
661
|
end
|
660
662
|
end
|
661
663
|
end
|
662
664
|
|
665
|
+
def loop_send_heartbeat( p2 )
|
666
|
+
Thread.new do
|
667
|
+
30.times do
|
668
|
+
break if p2.closed?
|
669
|
+
|
670
|
+
p2_info = @infos[ p2 ]
|
671
|
+
|
672
|
+
@mutex.synchronize do
|
673
|
+
send_heartbeat( p2, p2_info[ :peer_addr ] )
|
674
|
+
end
|
675
|
+
|
676
|
+
sleep STATUS_INTERVAL
|
677
|
+
end
|
678
|
+
end
|
679
|
+
end
|
680
|
+
|
663
681
|
def loop_send_status( p2 )
|
664
682
|
Thread.new do
|
665
683
|
loop do
|
@@ -792,10 +810,9 @@ module P2p2
|
|
792
810
|
end
|
793
811
|
end
|
794
812
|
|
795
|
-
def send_heartbeat( p2 )
|
796
|
-
info = @infos[ p2 ]
|
813
|
+
def send_heartbeat( p2, target_addr )
|
797
814
|
ctlmsg = [ 0, HEARTBEAT, rand( 128 ) ].pack( 'Q>CC' )
|
798
|
-
send_pack( p2, ctlmsg,
|
815
|
+
send_pack( p2, ctlmsg, target_addr )
|
799
816
|
end
|
800
817
|
|
801
818
|
def send_pack( sock, data, target_sockaddr )
|
data/lib/p2p2/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: p2p2
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.10.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- takafan
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-08-
|
11
|
+
date: 2019-08-30 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: 内网里的任意应用,访问另一个内网里的应用服务端。
|
14
14
|
email:
|