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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4a5f46d1721cdfa12068de247463e0b44225c073d236928a30ffe726b81ad341
4
- data.tar.gz: e53f2852e23d3e6679c1c961fdac1189663fa840729a9dc7bbac812c27fdbbf6
3
+ metadata.gz: 3a8d2cfcbc87835a4412869ae872fb7cba49c48b8e4f94c81cf5678b39f34746
4
+ data.tar.gz: c39358930d074c99c8260c9207d821ab6f94f6bb424cc0d32af0165c1218d196
5
5
  SHA512:
6
- metadata.gz: d378a5d52df695c89a77ae9532c75bb19cf3c4b3a3de765e480f6ae8a7f09bfe3d77e8e7686a71e825a6ba7207061a9a467df758b21283f73f3056b7b0a4e0d3
7
- data.tar.gz: 668f2a7d06f4e07dd0ad5adcd22a7fbc4bbd3c0bc7931fa4e0fa801c62b197fbefd52a13532feed14e877d36e9b047008033243f8dc682853cb03aeaa2dcdd9a
6
+ metadata.gz: 6c64ac875943bafca20918e9a44a8588ddc77cff74ce52965facf4014fa79c87e8b7fb95164419bed4c015d90765330d2f4700b04c1cafe33c08cc4483f4e482
7
+ data.tar.gz: ce6fe66c73e8bbc676ac8d23c1de988c89dbcead089fc6c4c7ae65845954f48306926c6beb5d6abc8d3f07bf8f8ec2c4e2ea1b0694830530887b334be14bc855
@@ -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
- unless info[ :p2_addr ]
179
- info[ :p2_addr ] = data[ 9..-1 ]
180
- # puts "debug peer addr #{ Addrinfo.new( info[ :p2_addr ] ).ip_unpack.inspect } #{ Time.new }"
181
- info[ :last_traffic_at ] = now
182
- send_heartbeat( p1 )
183
- loop_send_status( p1 )
184
- end
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
- p2_addr: nil, # 远端地址
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 30
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, info[ :p2_addr ] )
758
+ send_pack( p1, ctlmsg, target_addr )
739
759
  end
740
760
 
741
761
  def send_pack( sock, data, target_sockaddr )
@@ -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
- unless info[ :p1_addr ]
232
- info[ :p1_addr ] = data[ 9..-1 ]
233
- # puts "debug peer addr #{ Addrinfo.new( info[ :p1_addr ] ).ip_unpack.inspect } #{ Time.new }"
234
- info[ :last_traffic_at ] = now
235
- send_heartbeat( p2 )
236
- loop_send_status( p2 )
237
- end
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
- p1_addr: nil, # 远端地址
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 30
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, info[ :p1_addr ] )
815
+ send_pack( p2, ctlmsg, target_addr )
799
816
  end
800
817
 
801
818
  def send_pack( sock, data, target_sockaddr )
@@ -1,3 +1,3 @@
1
1
  module P2p2
2
- VERSION = "0.9.0"
2
+ VERSION = "0.10.0"
3
3
  end
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.9.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-28 00:00:00.000000000 Z
11
+ date: 2019-08-30 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: 内网里的任意应用,访问另一个内网里的应用服务端。
14
14
  email: