p2p2 0.17.0 → 0.22.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/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:
|