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 +4 -4
- data/lib/p2p2/p1.rb +54 -14
- data/lib/p2p2/p2.rb +56 -14
- data/lib/p2p2/p2pd.rb +1 -9
- data/lib/p2p2/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 89df8a602b433ccee8fcd513d2c981f00fecec8e43fe87880b556e35f7d8501f
|
4
|
+
data.tar.gz: 5b038d3b9e91156b8a2daec9f8f68709c7e26f7dbbaac24fef988021402123a9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 429c289884013dcc5c38f053bdeb1bd633717fb7693bd3338587b82bbbfb8d502d4d8796b3c3d51692a070793564604cb724be8be9af62621bff4e7c4b382496
|
7
|
+
data.tar.gz: 3b5a22f02861ab18197630475857722c0bc51a7ab3954b375a0e218306b3f1b6d2a1950fa2a96b47f0ee9c40b5b000b3dec4402d911c88aae9f01a34257c2957
|
data/lib/p2p2/p1.rb
CHANGED
@@ -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
|
-
|
616
|
+
loop_send_char( p1 )
|
616
617
|
end
|
617
618
|
|
618
|
-
def
|
619
|
+
def loop_send_char( p1 )
|
619
620
|
Thread.new do
|
620
|
-
|
621
|
-
sleep 60
|
621
|
+
is_timeout = true
|
622
622
|
|
623
|
-
|
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[ :
|
628
|
-
|
629
|
-
|
630
|
-
|
631
|
-
|
632
|
-
|
633
|
-
|
634
|
-
|
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
|
-
|
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
|
|
data/lib/p2p2/p2.rb
CHANGED
@@ -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
|
-
|
646
|
+
loop_send_char( p2 )
|
646
647
|
end
|
647
648
|
|
648
|
-
def
|
649
|
+
def loop_send_char( p2 )
|
649
650
|
Thread.new do
|
650
|
-
|
651
|
-
sleep 60
|
651
|
+
is_timeout = true
|
652
652
|
|
653
|
-
|
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[ :
|
658
|
-
|
659
|
-
|
660
|
-
|
661
|
-
|
662
|
-
|
663
|
-
|
664
|
-
|
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
|
-
|
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
|
|
data/lib/p2p2/p2pd.rb
CHANGED
@@ -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 }"
|
data/lib/p2p2/version.rb
CHANGED