girl 0.90.0 → 0.91.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of girl might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/lib/girl/head.rb +1 -1
- data/lib/girl/proxy_worker.rb +57 -9
- data/lib/girl/proxyd_worker.rb +29 -8
- data/lib/girl/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: 2314c2bce1ab734d24fa40a8709c61af56cb35558652a4d25ba958c71b3a3bf3
|
4
|
+
data.tar.gz: 964ca3642b80f790b444d55db3869109fbb1c746953d2b7777d87f8eb0e17ad0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: db5de1552c3841bf2f34c47c58e0f2c9789a6ed4101e3733654b1da9c557fccd97af0fb2f5c83212c3aa06ffc34630d7ab9e7798a0ebc41c6e41d32c0d742977
|
7
|
+
data.tar.gz: 3ea63129204abcadec92f7d77c7fa7222f700a819a9602c0a03e93134fbb86d3716a24dfbe387bb3e4e2b400fcb80af4c3cd92693ecec07b047c95d402a92ac2
|
data/lib/girl/head.rb
CHANGED
data/lib/girl/proxy_worker.rb
CHANGED
@@ -124,8 +124,28 @@ module Girl
|
|
124
124
|
return if src.closed?
|
125
125
|
src_info = @src_infos[ src ]
|
126
126
|
src_info[ :wbuff ] << data
|
127
|
-
add_write( src )
|
128
127
|
src_info[ :last_recv_at ] = Time.new
|
128
|
+
add_write( src )
|
129
|
+
|
130
|
+
if src_info[ :wbuff ].bytesize >= WBUFF_LIMIT then
|
131
|
+
dst = src_info[ :dst ]
|
132
|
+
|
133
|
+
if dst then
|
134
|
+
dst_info = @dst_infos[ dst ]
|
135
|
+
puts "p#{ Process.pid } #{ Time.new } pause dst #{ dst_info[ :domain ] }"
|
136
|
+
dst_info[ :paused ] = true
|
137
|
+
@reads.delete( dst )
|
138
|
+
else
|
139
|
+
stream = src_info[ :stream ]
|
140
|
+
|
141
|
+
if stream then
|
142
|
+
stream_info = @stream_infos[ stream ]
|
143
|
+
puts "p#{ Process.pid } #{ Time.new } pause stream #{ stream_info[ :domain ] }"
|
144
|
+
stream_info[ :paused ] = true
|
145
|
+
@reads.delete( stream )
|
146
|
+
end
|
147
|
+
end
|
148
|
+
end
|
129
149
|
end
|
130
150
|
|
131
151
|
##
|
@@ -414,6 +434,30 @@ module Girl
|
|
414
434
|
end
|
415
435
|
end
|
416
436
|
|
437
|
+
@dst_infos.select{ | _, dst_info | dst_info[ :paused ] }.each do | dst, dst_info |
|
438
|
+
src = dst_info[ :src ]
|
439
|
+
src_info = @src_infos[ src ]
|
440
|
+
|
441
|
+
if src_info[ :wbuff ].size < RESUME_BELOW then
|
442
|
+
puts "p#{ Process.pid } #{ Time.new } src.wbuff below #{ RESUME_BELOW }, resume dst #{ dst_info[ :domain ] }"
|
443
|
+
dst_info[ :paused ] = false
|
444
|
+
add_read( dst )
|
445
|
+
trigger = true
|
446
|
+
end
|
447
|
+
end
|
448
|
+
|
449
|
+
@stream_infos.select{ | _, stream_info | stream_info[ :paused ] }.each do | stream, stream_info |
|
450
|
+
src = stream_info[ :src ]
|
451
|
+
src_info = @src_infos[ src ]
|
452
|
+
|
453
|
+
if src_info[ :wbuff ].size < RESUME_BELOW then
|
454
|
+
puts "p#{ Process.pid } #{ Time.new } src.wbuff below #{ RESUME_BELOW }, resume stream #{ stream_info[ :domain ] }"
|
455
|
+
stream_info[ :paused ] = false
|
456
|
+
add_read( stream )
|
457
|
+
trigger = true
|
458
|
+
end
|
459
|
+
end
|
460
|
+
|
417
461
|
next_tick if trigger
|
418
462
|
end
|
419
463
|
end
|
@@ -469,7 +513,7 @@ module Girl
|
|
469
513
|
rescue IO::WaitWritable
|
470
514
|
# connect nonblock 必抛 wait writable
|
471
515
|
rescue Exception => e
|
472
|
-
puts "p#{ Process.pid } #{ Time.new } dst connect destination #{ e.class }, close src"
|
516
|
+
puts "p#{ Process.pid } #{ Time.new } dst connect destination #{ domain } #{ src_info[ :destination_port ] } #{ ip_info.ip_address } #{ e.class }, close src"
|
473
517
|
set_src_closing( src )
|
474
518
|
return
|
475
519
|
end
|
@@ -479,8 +523,9 @@ module Girl
|
|
479
523
|
dst_info = {
|
480
524
|
local_port: local_port, # 本地端口
|
481
525
|
src: src, # 对应src
|
482
|
-
domain: domain, #
|
526
|
+
domain: domain, # 目的地
|
483
527
|
wbuff: '', # 写前,从src读到的流量
|
528
|
+
paused: false, # 是否已暂停读
|
484
529
|
closing: false, # 准备关闭
|
485
530
|
closing_read: false, # 准备关闭读
|
486
531
|
closing_write: false # 准备关闭写
|
@@ -540,9 +585,12 @@ module Girl
|
|
540
585
|
data << @custom.encode( src_info[ :rbuff ] )
|
541
586
|
end
|
542
587
|
|
588
|
+
domain = src_info[ :destination_domain ]
|
543
589
|
@stream_infos[ stream ] = {
|
544
|
-
src: src,
|
545
|
-
|
590
|
+
src: src, # 对应src
|
591
|
+
domain: domain, # 目的地
|
592
|
+
wbuff: data, # 写前,写往远端streamd
|
593
|
+
paused: false # 是否已暂停读
|
546
594
|
}
|
547
595
|
|
548
596
|
src_info[ :dst_id ] = dst_id
|
@@ -842,7 +890,7 @@ module Girl
|
|
842
890
|
created_at: Time.new, # 创建时间
|
843
891
|
last_recv_at: nil, # 上一次收到新流量(由dst收到,或者由stream收到)的时间
|
844
892
|
last_sent_at: nil, # 上一次发出流量(由dst发出,或者由stream发出)的时间
|
845
|
-
paused: false, #
|
893
|
+
paused: false, # 是否已暂停读
|
846
894
|
closing: false, # 准备关闭
|
847
895
|
closing_read: false, # 准备关闭读
|
848
896
|
closing_write: false # 准备关闭写
|
@@ -863,10 +911,10 @@ module Girl
|
|
863
911
|
end
|
864
912
|
|
865
913
|
from_addr = addrinfo.to_sockaddr
|
866
|
-
@tun_info[ :last_recv_at ] = Time.new
|
867
914
|
pack_id = data[ 0, 8 ].unpack( 'Q>' ).first
|
868
915
|
return if pack_id != 0
|
869
916
|
|
917
|
+
@tun_info[ :last_recv_at ] = Time.new
|
870
918
|
ctl_num = data[ 8 ].unpack( 'C' ).first
|
871
919
|
|
872
920
|
case ctl_num
|
@@ -1065,7 +1113,7 @@ module Girl
|
|
1065
1113
|
add_write( stream )
|
1066
1114
|
|
1067
1115
|
if stream_info[ :wbuff ].bytesize >= WBUFF_LIMIT then
|
1068
|
-
puts "p#{ Process.pid } #{ Time.new } pause tunnel src #{ src_info[ :
|
1116
|
+
puts "p#{ Process.pid } #{ Time.new } pause tunnel src #{ src_info[ :destination_domain ] }"
|
1069
1117
|
src_info[ :paused ] = true
|
1070
1118
|
@reads.delete( src )
|
1071
1119
|
end
|
@@ -1094,7 +1142,7 @@ module Girl
|
|
1094
1142
|
add_write( dst )
|
1095
1143
|
|
1096
1144
|
if dst_info[ :wbuff ].bytesize >= WBUFF_LIMIT then
|
1097
|
-
puts "p#{ Process.pid } #{ Time.new } pause direct src #{ src_info[ :
|
1145
|
+
puts "p#{ Process.pid } #{ Time.new } pause direct src #{ src_info[ :destination_domain ] }"
|
1098
1146
|
src_info[ :paused ] = true
|
1099
1147
|
@reads.delete( src )
|
1100
1148
|
end
|
data/lib/girl/proxyd_worker.rb
CHANGED
@@ -265,7 +265,7 @@ module Girl
|
|
265
265
|
dst.connect_nonblock( destination_addr )
|
266
266
|
rescue IO::WaitWritable
|
267
267
|
rescue Exception => e
|
268
|
-
puts "p#{ Process.pid } #{ Time.new } connect destination #{ e.class }"
|
268
|
+
puts "p#{ Process.pid } #{ Time.new } connect destination #{ domain_port } #{ e.class }"
|
269
269
|
return false
|
270
270
|
end
|
271
271
|
|
@@ -274,7 +274,7 @@ module Girl
|
|
274
274
|
@dst_infos[ dst ] = {
|
275
275
|
id: dst_id, # id
|
276
276
|
tund: tund, # 对应tund
|
277
|
-
domain_port: domain_port, #
|
277
|
+
domain_port: domain_port, # 目的地和端口
|
278
278
|
rbuff: '', # 对应的streamd没准备好,暂存读到的流量
|
279
279
|
streamd: nil, # 对应的streamd
|
280
280
|
wbuff: '', # 从streamd读到的流量
|
@@ -282,7 +282,7 @@ module Girl
|
|
282
282
|
created_at: Time.new, # 创建时间
|
283
283
|
last_recv_at: nil, # 上一次收到新流量(由streamd收到)的时间
|
284
284
|
last_sent_at: nil, # 上一次发出流量(由streamd发出)的时间
|
285
|
-
paused: false, #
|
285
|
+
paused: false, # 是否已暂停读
|
286
286
|
closing: false, # 准备关闭
|
287
287
|
closing_read: false, # 准备关闭读
|
288
288
|
closing_write: false # 准备关闭写
|
@@ -379,6 +379,18 @@ module Girl
|
|
379
379
|
end
|
380
380
|
end
|
381
381
|
|
382
|
+
@streamd_infos.select{ | _, streamd_info | streamd_info[ :paused ] }.each do | streamd, streamd_info |
|
383
|
+
dst = streamd_info[ :dst ]
|
384
|
+
dst_info = @dst_infos[ dst ]
|
385
|
+
|
386
|
+
if dst_info[ :wbuff ].size < RESUME_BELOW then
|
387
|
+
puts "p#{ Process.pid } #{ Time.new } resume streamd #{ streamd_info[ :domain_port ] }"
|
388
|
+
streamd_info[ :paused ] = false
|
389
|
+
add_read( streamd )
|
390
|
+
trigger = true
|
391
|
+
end
|
392
|
+
end
|
393
|
+
|
382
394
|
next_tick if trigger
|
383
395
|
end
|
384
396
|
end
|
@@ -616,10 +628,10 @@ module Girl
|
|
616
628
|
return
|
617
629
|
end
|
618
630
|
|
619
|
-
tund_info[ :last_recv_at ] = Time.new
|
620
631
|
pack_id = data[ 0, 8 ].unpack( 'Q>' ).first
|
621
632
|
return if pack_id != 0
|
622
633
|
|
634
|
+
tund_info[ :last_recv_at ] = Time.new
|
623
635
|
ctl_num = data[ 8 ].unpack( 'C' ).first
|
624
636
|
|
625
637
|
case ctl_num
|
@@ -667,9 +679,11 @@ module Girl
|
|
667
679
|
tund = tcpd_info[ :tund ]
|
668
680
|
|
669
681
|
@streamd_infos[ streamd ] = {
|
670
|
-
tund: tund,
|
671
|
-
dst: nil,
|
672
|
-
|
682
|
+
tund: tund, # 对应tund
|
683
|
+
dst: nil, # 对应dst
|
684
|
+
domain_port: nil, # dst的目的地和端口
|
685
|
+
wbuff: '', # 写前,写往近端stream
|
686
|
+
paused: false # 是否已暂停读
|
673
687
|
}
|
674
688
|
|
675
689
|
add_read( streamd, :streamd )
|
@@ -704,7 +718,7 @@ module Girl
|
|
704
718
|
add_write( streamd )
|
705
719
|
|
706
720
|
if streamd_info[ :wbuff ].bytesize >= WBUFF_LIMIT then
|
707
|
-
puts "p#{ Process.pid } #{ Time.new } pause dst #{ dst_info[ :
|
721
|
+
puts "p#{ Process.pid } #{ Time.new } pause dst #{ dst_info[ :domain_port ] }"
|
708
722
|
dst_info[ :paused ] = true
|
709
723
|
@reads.delete( dst )
|
710
724
|
end
|
@@ -759,6 +773,7 @@ module Girl
|
|
759
773
|
# puts "debug1 set streamd.dst #{ dst_id }"
|
760
774
|
streamd_info[ :dst ] = dst
|
761
775
|
dst_info = @dst_infos[ dst ]
|
776
|
+
streamd_info[ :domain_port ] = dst_info[ :domain_port ]
|
762
777
|
|
763
778
|
unless dst_info[ :rbuff ].empty? then
|
764
779
|
# puts "debug1 encode and move dst.rbuff to streamd.wbuff"
|
@@ -778,6 +793,12 @@ module Girl
|
|
778
793
|
dst_info[ :wbuff ] << data
|
779
794
|
dst_info[ :last_recv_at ] = Time.new
|
780
795
|
add_write( dst )
|
796
|
+
|
797
|
+
if dst_info[ :wbuff ].bytesize >= WBUFF_LIMIT then
|
798
|
+
puts "p#{ Process.pid } #{ Time.new } pause streamd #{ streamd_info[ :domain_port ] }"
|
799
|
+
streamd_info[ :paused ] = true
|
800
|
+
@reads.delete( streamd )
|
801
|
+
end
|
781
802
|
end
|
782
803
|
end
|
783
804
|
|
data/lib/girl/version.rb
CHANGED