p2p2 0.12.0 → 0.13.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: 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