p2p2 0.17.0 → 0.22.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/head.rb +2 -1
- data/lib/p2p2/p1_worker.rb +63 -51
- data/lib/p2p2/p2_worker.rb +48 -31
- data/lib/p2p2/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ed5928f54a6129f64cc843748d5f337d9f5fdccfed90239b9a594bf6ecd577bc
|
4
|
+
data.tar.gz: 1ec20b3e82bf69b5e371ceb89dcc666b97f0a2407072647271e481c7a3166e4e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2b35b3bc6a54ceb236aee2f9258580c381397619dcdfbe4dfd3ea61c8c6deeda1e6e188a64b6921794d801fd2838f5db3c7e00462be3cebfe5158e589356a8ff
|
7
|
+
data.tar.gz: 9bd26990e4e3aff5285a10b011c322251ba3c64f5379e02172d70f16d9624355c8a9ec3f194b108c3681b966b38749d4bded464a9c9588bf3aca4e7645026e3f
|
data/lib/p2p2/head.rb
CHANGED
@@ -6,11 +6,12 @@ module P2p2
|
|
6
6
|
RESUME_BELOW = 50_000 # 降到多少以下恢复写
|
7
7
|
EXPIRE_NEW = 10 # 创建之后多久没有流量进来,过期
|
8
8
|
EXPIRE_AFTER = 300 # 多久没有新流量,过期
|
9
|
-
CHECK_EXPIRE_INTERVAL =
|
9
|
+
CHECK_EXPIRE_INTERVAL = 60 # 检查过期间隔
|
10
10
|
STATUS_INTERVAL = 0.5 # 发送状态间隔
|
11
11
|
SEND_STATUS_UNTIL = 10 # 持续的告之对面状态,直到没有流量往来,持续多少秒
|
12
12
|
BREAK_SEND_MISS = 10_000 # miss包个数上限,达到上限忽略要后面的段,可控碎片缓存
|
13
13
|
CONFUSE_UNTIL = 5 # 混淆前几个包
|
14
|
+
HEARTBEAT_INTERVAL = 5 # 心跳间隔
|
14
15
|
UPDATE_ROOM_INTERVAL = 60 # 刷新房间间隔
|
15
16
|
PEER_ADDR = 1
|
16
17
|
HEARTBEAT = 2
|
data/lib/p2p2/p1_worker.rb
CHANGED
@@ -28,8 +28,7 @@ module P2p2
|
|
28
28
|
#
|
29
29
|
def looping
|
30
30
|
puts "#{ Time.new } looping"
|
31
|
-
|
32
|
-
loop_check_expire
|
31
|
+
loop_heartbeat
|
33
32
|
loop_check_status
|
34
33
|
|
35
34
|
loop do
|
@@ -80,67 +79,65 @@ module P2p2
|
|
80
79
|
private
|
81
80
|
|
82
81
|
##
|
83
|
-
# loop
|
82
|
+
# loop heartbeat
|
84
83
|
#
|
85
|
-
def
|
84
|
+
def loop_heartbeat( check_at = Time.new )
|
86
85
|
Thread.new do
|
87
86
|
loop do
|
88
|
-
sleep
|
87
|
+
sleep HEARTBEAT_INTERVAL
|
89
88
|
|
90
89
|
@mutex.synchronize do
|
91
|
-
if !@tund.closed? && @tund_info[ :peer_addr ].nil?
|
92
|
-
add_tund_ctlmsg( @room, @p2pd_addr )
|
93
|
-
next_tick
|
94
|
-
end
|
95
|
-
end
|
96
|
-
end
|
97
|
-
end
|
98
|
-
end
|
99
|
-
|
100
|
-
##
|
101
|
-
# loop check expire
|
102
|
-
#
|
103
|
-
def loop_check_expire
|
104
|
-
Thread.new do
|
105
|
-
loop do
|
106
|
-
sleep CHECK_EXPIRE_INTERVAL
|
107
|
-
|
108
|
-
@mutex.synchronize do
|
109
|
-
need_trigger = false
|
110
90
|
now = Time.new
|
111
91
|
|
112
|
-
|
113
|
-
if
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
92
|
+
unless @tund.closed?
|
93
|
+
if @tund_info[ :peer_addr ]
|
94
|
+
if @tund_info[ :tun_addr ]
|
95
|
+
if now - check_at >= CHECK_EXPIRE_INTERVAL
|
96
|
+
if now - @tund_info[ :last_recv_at ] > EXPIRE_AFTER
|
97
|
+
puts "#{ Time.new } expire tund"
|
98
|
+
set_is_closing( @tund )
|
99
|
+
else
|
100
|
+
@tund_info[ :dst_exts ].each do | dst_local_port, dst_ext |
|
101
|
+
if dst_ext[ :dst ].closed? && ( now - dst_ext[ :last_continue_at ] > EXPIRE_AFTER )
|
102
|
+
puts "#{ Time.new } expire dst ext #{ dst_local_port }"
|
103
|
+
del_dst_ext( dst_local_port )
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
@dst_infos.each do | dst, dst_info |
|
109
|
+
if dst_info[ :last_recv_at ].nil? && ( now - dst_info[ :created_at ] > EXPIRE_NEW )
|
110
|
+
puts "#{ Time.new } expire dst"
|
111
|
+
set_is_closing( dst )
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
check_at = now
|
124
116
|
end
|
125
|
-
end
|
126
|
-
end
|
127
117
|
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
118
|
+
# puts "debug2 heartbeat"
|
119
|
+
add_tund_ctlmsg( pack_a_heartbeat )
|
120
|
+
next_tick
|
121
|
+
elsif now - @tund_info[ :created_at ] > EXPIRE_NEW
|
122
|
+
# no tun addr
|
123
|
+
puts "#{ Time.new } expire new tund"
|
124
|
+
set_is_closing( @tund )
|
125
|
+
next_tick
|
126
|
+
end
|
127
|
+
else
|
128
|
+
# no peer addr
|
129
|
+
if now - check_at >= UPDATE_ROOM_INTERVAL
|
130
|
+
data = @room
|
131
|
+
check_at = now
|
132
|
+
else
|
133
|
+
data = [ rand( 128 ) ].pack( 'C' )
|
134
|
+
end
|
133
135
|
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
need_trigger = true
|
136
|
+
# puts "debug2 update room"
|
137
|
+
add_tund_ctlmsg( data, @p2pd_addr )
|
138
|
+
next_tick
|
138
139
|
end
|
139
140
|
end
|
140
|
-
|
141
|
-
if need_trigger
|
142
|
-
next_tick
|
143
|
-
end
|
144
141
|
end
|
145
142
|
end
|
146
143
|
end
|
@@ -252,6 +249,8 @@ module P2p2
|
|
252
249
|
# is match tun addr
|
253
250
|
#
|
254
251
|
def is_match_tun_addr( addrinfo )
|
252
|
+
return false unless @tund_info[ :tun_addr ]
|
253
|
+
|
255
254
|
from_addr = addrinfo.to_sockaddr
|
256
255
|
|
257
256
|
if from_addr != @tund_info[ :tun_addr ]
|
@@ -260,6 +259,7 @@ module P2p2
|
|
260
259
|
end
|
261
260
|
|
262
261
|
@tund_info[ :last_recv_at ] = Time.new
|
262
|
+
|
263
263
|
true
|
264
264
|
end
|
265
265
|
|
@@ -539,6 +539,10 @@ module P2p2
|
|
539
539
|
tund.sendmsg( data, 0, to_addr )
|
540
540
|
rescue IO::WaitWritable, Errno::EINTR
|
541
541
|
return
|
542
|
+
rescue Errno::EHOSTUNREACH, Errno::ENETUNREACH => e
|
543
|
+
puts "#{ Time.new } #{ e.class }, close tund"
|
544
|
+
close_tund( tund )
|
545
|
+
return
|
542
546
|
end
|
543
547
|
|
544
548
|
@tund_info[ :ctlmsgs ].shift
|
@@ -557,6 +561,10 @@ module P2p2
|
|
557
561
|
tund.sendmsg( data, 0, @tund_info[ :tun_addr ] )
|
558
562
|
rescue IO::WaitWritable, Errno::EINTR
|
559
563
|
return
|
564
|
+
rescue Errno::EHOSTUNREACH, Errno::ENETUNREACH => e
|
565
|
+
puts "#{ Time.new } #{ e.class }, close tund"
|
566
|
+
close_tund( tund )
|
567
|
+
return
|
560
568
|
end
|
561
569
|
end
|
562
570
|
end
|
@@ -625,6 +633,10 @@ module P2p2
|
|
625
633
|
tund.sendmsg( data, 0, @tund_info[ :tun_addr ] )
|
626
634
|
rescue IO::WaitWritable, Errno::EINTR
|
627
635
|
return
|
636
|
+
rescue Errno::EHOSTUNREACH, Errno::ENETUNREACH => e
|
637
|
+
puts "#{ Time.new } #{ e.class }, close tund"
|
638
|
+
close_tund( tund )
|
639
|
+
return
|
628
640
|
end
|
629
641
|
|
630
642
|
# puts "debug2 written pack #{ pack_id }"
|
data/lib/p2p2/p2_worker.rb
CHANGED
@@ -28,7 +28,7 @@ module P2p2
|
|
28
28
|
#
|
29
29
|
def looping
|
30
30
|
puts "#{ Time.new } looping"
|
31
|
-
|
31
|
+
loop_heartbeat
|
32
32
|
loop_check_status
|
33
33
|
|
34
34
|
loop do
|
@@ -81,49 +81,51 @@ module P2p2
|
|
81
81
|
private
|
82
82
|
|
83
83
|
##
|
84
|
-
# loop
|
84
|
+
# loop heartbeat
|
85
85
|
#
|
86
|
-
def
|
86
|
+
def loop_heartbeat( check_at = Time.new )
|
87
87
|
Thread.new do
|
88
88
|
loop do
|
89
|
-
sleep
|
89
|
+
sleep HEARTBEAT_INTERVAL
|
90
90
|
|
91
91
|
@mutex.synchronize do
|
92
|
-
need_trigger = false
|
93
92
|
now = Time.new
|
94
93
|
|
95
|
-
if @tun && !@tun.closed? && @tun_info[ :
|
96
|
-
if
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
94
|
+
if @tun && !@tun.closed? && @tun_info[ :peer_addr ]
|
95
|
+
if @tun_info[ :tund_addr ]
|
96
|
+
if now - check_at >= CHECK_EXPIRE_INTERVAL
|
97
|
+
if now - @tun_info[ :last_recv_at ] > EXPIRE_AFTER
|
98
|
+
puts "#{ Time.new } expire tun"
|
99
|
+
set_is_closing( @tun )
|
100
|
+
else
|
101
|
+
@tun_info[ :src_exts ].each do | src_id, src_ext |
|
102
|
+
if src_ext[ :src ].closed? && ( now - src_ext[ :last_continue_at ] > EXPIRE_AFTER )
|
103
|
+
puts "#{ Time.new } expire src ext #{ src_id }"
|
104
|
+
del_src_ext( src_id )
|
105
|
+
end
|
106
|
+
end
|
107
107
|
end
|
108
|
-
end
|
109
|
-
end
|
110
108
|
|
111
|
-
|
112
|
-
|
109
|
+
@src_infos.each do | src, src_info |
|
110
|
+
if src_info[ :last_recv_at ].nil? && ( now - src_info[ :created_at ] > EXPIRE_NEW )
|
111
|
+
puts "#{ Time.new } expire src"
|
112
|
+
set_is_closing( src )
|
113
|
+
end
|
114
|
+
end
|
113
115
|
|
114
|
-
|
115
|
-
|
116
|
+
check_at = now
|
117
|
+
end
|
116
118
|
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
119
|
+
# puts "debug2 heartbeat"
|
120
|
+
add_tun_ctlmsg( pack_a_heartbeat )
|
121
|
+
next_tick
|
122
|
+
elsif now - @tun_info[ :created_at ] > EXPIRE_NEW
|
123
|
+
# no tund addr
|
124
|
+
puts "#{ Time.new } expire new tun"
|
125
|
+
set_is_closing( @tun )
|
126
|
+
next_tick
|
121
127
|
end
|
122
128
|
end
|
123
|
-
|
124
|
-
if need_trigger
|
125
|
-
next_tick
|
126
|
-
end
|
127
129
|
end
|
128
130
|
end
|
129
131
|
end
|
@@ -275,6 +277,8 @@ module P2p2
|
|
275
277
|
# is match tund addr
|
276
278
|
#
|
277
279
|
def is_match_tund_addr( addrinfo )
|
280
|
+
return false unless @tun_info[ :tund_addr ]
|
281
|
+
|
278
282
|
from_addr = addrinfo.to_sockaddr
|
279
283
|
|
280
284
|
if from_addr != @tun_info[ :tund_addr ]
|
@@ -283,6 +287,7 @@ module P2p2
|
|
283
287
|
end
|
284
288
|
|
285
289
|
@tun_info[ :last_recv_at ] = Time.new
|
290
|
+
|
286
291
|
true
|
287
292
|
end
|
288
293
|
|
@@ -560,6 +565,10 @@ module P2p2
|
|
560
565
|
tun.sendmsg( data, 0, to_addr )
|
561
566
|
rescue IO::WaitWritable, Errno::EINTR
|
562
567
|
return
|
568
|
+
rescue Errno::EHOSTUNREACH, Errno::ENETUNREACH => e
|
569
|
+
puts "#{ Time.new } #{ e.class }, close tun"
|
570
|
+
close_tun( tun )
|
571
|
+
return
|
563
572
|
end
|
564
573
|
|
565
574
|
@tun_info[ :ctlmsgs ].shift
|
@@ -578,6 +587,10 @@ module P2p2
|
|
578
587
|
tun.sendmsg( data, 0, @tun_info[ :tund_addr ] )
|
579
588
|
rescue IO::WaitWritable, Errno::EINTR
|
580
589
|
return
|
590
|
+
rescue Errno::EHOSTUNREACH, Errno::ENETUNREACH => e
|
591
|
+
puts "#{ Time.new } #{ e.class }, close tun"
|
592
|
+
close_tun( tun )
|
593
|
+
return
|
581
594
|
end
|
582
595
|
end
|
583
596
|
end
|
@@ -646,6 +659,10 @@ module P2p2
|
|
646
659
|
tun.sendmsg( data, 0, @tun_info[ :tund_addr ] )
|
647
660
|
rescue IO::WaitWritable, Errno::EINTR
|
648
661
|
return
|
662
|
+
rescue Errno::EHOSTUNREACH, Errno::ENETUNREACH => e
|
663
|
+
puts "#{ Time.new } #{ e.class }, close tun"
|
664
|
+
close_tun( tun )
|
665
|
+
return
|
649
666
|
end
|
650
667
|
|
651
668
|
# puts "debug2 written pack #{ pack_id }"
|
data/lib/p2p2/version.rb
CHANGED
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.
|
4
|
+
version: 0.22.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- takafan
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-07-
|
11
|
+
date: 2020-07-08 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: 内网里的任意应用,访问另一个内网里的应用服务端。
|
14
14
|
email:
|