p2p2 0.9.0 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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:
|