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 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: