p2p2 0.12.0 → 0.13.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: 7aa63a6c12f8e8b3b84c0196b2722ec6b4180b54aab43e611523206c126cc3f2
4
- data.tar.gz: 6cfa8c63577bd98a1a4384cced2e2b515cdf892c1eea205a2c14c89bd38dc37d
3
+ metadata.gz: 89df8a602b433ccee8fcd513d2c981f00fecec8e43fe87880b556e35f7d8501f
4
+ data.tar.gz: 5b038d3b9e91156b8a2daec9f8f68709c7e26f7dbbaac24fef988021402123a9
5
5
  SHA512:
6
- metadata.gz: 470798efe2ac947d1315df539d6f294d6ce5145804f7791d2c1e16da2d608495301be0a8a2b8959d912d58c1c2caeeb6095ffe55ed91f3024f9e15e98f82b24b
7
- data.tar.gz: 546f3e7791143b82c1583e80871832394ec1fc5e2ebd65bc3c4e29dca1358c022221c2c448a1529730140eeab0f764fcd0de4f1cdd8bdc099b4034ded342ad42
6
+ metadata.gz: 429c289884013dcc5c38f053bdeb1bd633717fb7693bd3338587b82bbbfb8d502d4d8796b3c3d51692a070793564604cb724be8be9af62621bff4e7c4b382496
7
+ data.tar.gz: 3b5a22f02861ab18197630475857722c0bc51a7ab3954b375a0e218306b3f1b6d2a1950fa2a96b47f0ee9c40b5b000b3dec4402d911c88aae9f01a34257c2957
@@ -186,6 +186,7 @@ module P2p2
186
186
  # puts "debug p2 addr #{ Addrinfo.new( info[ :p2_addr ] ).ip_unpack.inspect } #{ Time.new }"
187
187
  info[ :last_traffic_at ] = now
188
188
  loop_send_status( p1 )
189
+ loop_expire( p1 )
189
190
  when A_NEW_APP
190
191
  return if sockaddr != info[ :p2_addr ]
191
192
 
@@ -612,26 +613,36 @@ module P2p2
612
613
 
613
614
  send_pack( p1, @title, @p2pd_sockaddr )
614
615
  add_read( p1 )
615
- loop_expire( p1 )
616
+ loop_send_char( p1 )
616
617
  end
617
618
 
618
- def loop_expire( p1 )
619
+ def loop_send_char( p1 )
619
620
  Thread.new do
620
- loop do
621
- sleep 60
621
+ is_timeout = true
622
622
 
623
- break if p1.closed?
623
+ 12.times do
624
+ sleep 5
625
+
626
+ if p1.closed?
627
+ is_timeout = false
628
+ break
629
+ end
624
630
 
625
631
  p1_info = @infos[ p1 ]
626
632
 
627
- if p1_info[ :p2_addr ].nil? || ( Time.new - p1_info[ :last_traffic_at ] > EXPIRE_AFTER )
628
- @mutex.synchronize do
629
- @ctlw.write( [ CTL_CLOSE, p1.object_id ].pack( 'CQ>' ) )
630
- end
631
- else
632
- @mutex.synchronize do
633
- send_heartbeat( p1, p1_info[ :p2_addr ] )
634
- end
633
+ if p1_info[ :peer_addr ]
634
+ is_timeout = false
635
+ break
636
+ end
637
+
638
+ @mutex.synchronize do
639
+ send_pack( p1, [ rand( 128 ) ].pack( 'C' ), @p2pd_sockaddr )
640
+ end
641
+ end
642
+
643
+ if is_timeout
644
+ @mutex.synchronize do
645
+ @ctlw.write( [ CTL_CLOSE, p1.object_id ].pack( 'CQ>' ) )
635
646
  end
636
647
  end
637
648
  end
@@ -639,7 +650,7 @@ module P2p2
639
650
 
640
651
  def loop_send_heartbeat( p1 )
641
652
  Thread.new do
642
- 30.times do
653
+ 20.times do
643
654
  break if p1.closed?
644
655
 
645
656
  p1_info = @infos[ p1 ]
@@ -650,6 +661,35 @@ module P2p2
650
661
 
651
662
  sleep STATUS_INTERVAL
652
663
  end
664
+
665
+ if !p1.closed?
666
+ p1_info = @infos[ p1 ]
667
+
668
+ unless p1_info[ :p2_addr ]
669
+ @mutex.synchronize do
670
+ @ctlw.write( [ CTL_CLOSE, p1.object_id ].pack( 'CQ>' ) )
671
+ end
672
+ end
673
+ end
674
+ end
675
+ end
676
+
677
+ def loop_expire( p1 )
678
+ Thread.new do
679
+ loop do
680
+ sleep 5
681
+ break if p1.closed?
682
+
683
+ p1_info = @infos[ p1 ]
684
+
685
+ @mutex.synchronize do
686
+ if Time.new - p1_info[ :last_traffic_at ] > EXPIRE_AFTER
687
+ @ctlw.write( [ CTL_CLOSE, p1.object_id ].pack( 'CQ>' ) )
688
+ else
689
+ send_heartbeat( p1, p1_info[ :p2_addr ] )
690
+ end
691
+ end
692
+ end
653
693
  end
654
694
  end
655
695
 
@@ -239,6 +239,7 @@ module P2p2
239
239
  # puts "debug p1 addr #{ Addrinfo.new( info[ :p1_addr ] ).ip_unpack.inspect } #{ Time.new }"
240
240
  info[ :last_traffic_at ] = now
241
241
  loop_send_status( p2 )
242
+ loop_expire( p2 )
242
243
  when PAIRED
243
244
  return if sockaddr != info[ :p1_addr ]
244
245
 
@@ -642,26 +643,36 @@ module P2p2
642
643
 
643
644
  send_pack( p2, @title, @p2pd_sockaddr )
644
645
  add_read( p2 )
645
- loop_expire( p2 )
646
+ loop_send_char( p2 )
646
647
  end
647
648
 
648
- def loop_expire( p2 )
649
+ def loop_send_char( p2 )
649
650
  Thread.new do
650
- loop do
651
- sleep 60
651
+ is_timeout = true
652
652
 
653
- break if p2.closed?
653
+ 12.times do
654
+ sleep 5
655
+
656
+ if p2.closed?
657
+ is_timeout = false
658
+ break
659
+ end
654
660
 
655
661
  p2_info = @infos[ p2 ]
656
662
 
657
- if p2_info[ :p1_addr ].nil? || ( Time.new - p2_info[ :last_traffic_at ] > EXPIRE_AFTER )
658
- @mutex.synchronize do
659
- @ctlw.write( [ CTL_CLOSE, p2.object_id ].pack( 'CQ>' ) )
660
- end
661
- else
662
- @mutex.synchronize do
663
- send_heartbeat( p2, p2_info[ :p1_addr ] )
664
- end
663
+ if p2_info[ :peer_addr ]
664
+ is_timeout = false
665
+ break
666
+ end
667
+
668
+ @mutex.synchronize do
669
+ send_pack( p2, [ rand( 128 ) ].pack( 'C' ), @p2pd_sockaddr )
670
+ end
671
+ end
672
+
673
+ if is_timeout
674
+ @mutex.synchronize do
675
+ @ctlw.write( [ CTL_CLOSE, p1.object_id ].pack( 'CQ>' ) )
665
676
  end
666
677
  end
667
678
  end
@@ -669,7 +680,7 @@ module P2p2
669
680
 
670
681
  def loop_send_heartbeat( p2 )
671
682
  Thread.new do
672
- 30.times do
683
+ 20.times do
673
684
  break if p2.closed?
674
685
 
675
686
  p2_info = @infos[ p2 ]
@@ -680,6 +691,37 @@ module P2p2
680
691
 
681
692
  sleep STATUS_INTERVAL
682
693
  end
694
+
695
+ if !p2.closed?
696
+ p2_info = @infos[ p2 ]
697
+
698
+ unless p2_info[ :p1_addr ]
699
+ @mutex.synchronize do
700
+ @ctlw.write( [ CTL_CLOSE, p2.object_id ].pack( 'CQ>' ) )
701
+ end
702
+ end
703
+ end
704
+ end
705
+ end
706
+
707
+ def loop_expire( p2 )
708
+ Thread.new do
709
+ loop do
710
+ sleep 5
711
+ break if p2.closed?
712
+
713
+ p2_info = @infos[ p2 ]
714
+
715
+ if Time.new - p2_info[ :last_traffic_at ] > EXPIRE_AFTER
716
+ @mutex.synchronize do
717
+ @ctlw.write( [ CTL_CLOSE, p2.object_id ].pack( 'CQ>' ) )
718
+ end
719
+ else
720
+ @mutex.synchronize do
721
+ send_heartbeat( p2, p2_info[ :p1_addr ] )
722
+ end
723
+ end
724
+ end
683
725
  end
684
726
  end
685
727
 
@@ -88,20 +88,18 @@ module P2p2
88
88
 
89
89
  def read_p2pd( p2pd )
90
90
  data, addrinfo, rflags, *controls = p2pd.recvmsg
91
- return if ( data.bytesize > 255 ) || ( data =~ /\/|\.|\ / )
91
+ return if ( data.bytesize == 1 ) || ( data.bytesize > 255 ) || ( data =~ /\/|\.|\ / )
92
92
 
93
93
  sockaddr = addrinfo.to_sockaddr
94
94
  title_path = File.join( @p2pd_dir, data )
95
95
 
96
96
  unless File.exist?( title_path )
97
97
  write_title( title_path, sockaddr )
98
- send_heartbeat( p2pd, sockaddr )
99
98
  return
100
99
  end
101
100
 
102
101
  if Time.new - File.mtime( title_path ) > 300
103
102
  write_title( title_path, sockaddr )
104
- send_heartbeat( p2pd, sockaddr )
105
103
  return
106
104
  end
107
105
 
@@ -109,7 +107,6 @@ module P2p2
109
107
 
110
108
  if Addrinfo.new( op_sockaddr ).ip_address == addrinfo.ip_address
111
109
  write_title( title_path, sockaddr )
112
- send_heartbeat( p2pd, sockaddr )
113
110
  return
114
111
  end
115
112
 
@@ -126,11 +123,6 @@ module P2p2
126
123
  end
127
124
  end
128
125
 
129
- def send_heartbeat( p2pd, target_addr )
130
- ctlmsg = [ 0, HEARTBEAT, rand( 128 ) ].pack( 'Q>CC' )
131
- send_pack( p2pd, ctlmsg, target_addr )
132
- end
133
-
134
126
  def send_pack( sock, data, target_sockaddr )
135
127
  begin
136
128
  # puts "debug sendmsg #{ data.inspect } #{ Time.new }"
@@ -1,3 +1,3 @@
1
1
  module P2p2
2
- VERSION = "0.12.0"
2
+ VERSION = "0.13.0"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: p2p2
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.12.0
4
+ version: 0.13.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - takafan