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