girl 4.2.0 → 4.3.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3e6e47afe34c123e702c013b4b2f71c3ef836902edd8ab7508b9fe666c2052c7
4
- data.tar.gz: 673a5b27d4863a9c1daa34abc94536e7c7d68549363071e73d9f57a1db4056bc
3
+ metadata.gz: 43a48060a5cd6624864bceaa00824b736918f484b5a9342f67a7e885b401b276
4
+ data.tar.gz: f08b961719f618da8833746996c9bb66698a35e1d43526e63dd2792df2ed53da
5
5
  SHA512:
6
- metadata.gz: 1c105f47f7cfd38572adef3c40be156e88fe1b767d6144cd923154e57c19a5508fbaaaff325e2c252f8371ca97c621a8a6b5ce020381c8738b2529bade9840b9
7
- data.tar.gz: 3b13786e8062bad65c975e48340c2b1deae88be8965862543bd644783b3ecbab6b446c2e872a64169a8380fef0679d7c504c6fdbfbe08995d5ae2662b67319b8
6
+ metadata.gz: aa1c6709b604a13c80b9b4c66f09ae80f5ceb7714c8d8f3f0d9ee7cd906f1179399e8f75f31e8e8763bef0eb0ea62f4ddc46b646585833d75a4fdc07fc84c0f6
7
+ data.tar.gz: 5443ef6598cc196a27dcf50ec0e0f8d39cf65cc01a268092c0f2b9db2d1add65b1ee33eba8bdce17bd1be8b3e256fcc37bf731aecd4a3bee62d35eb198074934
@@ -776,7 +776,8 @@ module Girl
776
776
  domain: domain, # 目的地
777
777
  wbuff: btun_wbuff, # 写前
778
778
  rbuff: '', # 暂存当前块没收全的流量
779
- wait_bytes: 0 # 还差多少字节收全当前块
779
+ wait_bytes: 0, # 还差多少字节收全当前块
780
+ lbuff: '' # 流量截断在长度前缀处
780
781
  }
781
782
 
782
783
  src_info[ :dst_id ] = dst_id
@@ -808,7 +809,6 @@ module Girl
808
809
  # pack a chunk
809
810
  #
810
811
  def pack_a_chunk( data )
811
- # puts "debug pack a chunk"
812
812
  data = @custom.encode( data )
813
813
  "#{ [ data.bytesize ].pack( 'n' ) }#{ data }"
814
814
  end
@@ -1289,22 +1289,44 @@ module Girl
1289
1289
  end
1290
1290
 
1291
1291
  until data.empty? do
1292
- rbuff = btun_info[ :rbuff ]
1293
1292
  wait_bytes = btun_info[ :wait_bytes ]
1294
1293
 
1295
1294
  if wait_bytes > 0 then
1296
1295
  len = wait_bytes
1297
1296
  # puts "debug wait bytes #{ len }"
1298
1297
  else
1299
- if data.bytesize <= 2 then
1300
- # puts "debug unexpect data length #{ data.bytesize }"
1301
- close_btun( btun )
1302
- return
1303
- end
1298
+ lbuff = btun_info[ :lbuff ]
1299
+
1300
+ if lbuff.empty? then
1301
+ # 长度缓存为空,从读到的流量里取长度
1302
+ # 两个字节以下,记进长度缓存
1303
+ if data.bytesize <= 2 then
1304
+ # puts "debug set btun.lbuff #{ data.inspect }"
1305
+ btun_info[ :lbuff ] = data
1306
+ return
1307
+ end
1304
1308
 
1305
- len = data[ 0, 2 ].unpack( 'n' ).first
1306
- # puts "debug read len #{ len }"
1307
- data = data[ 2..-1 ]
1309
+ len = data[ 0, 2 ].unpack( 'n' ).first
1310
+ data = data[ 2..-1 ]
1311
+ elsif lbuff.bytesize == 1 then
1312
+ # 长度缓存记有一个字节,补一个字节
1313
+ lbuff = "#{ lbuff }#{ data[ 0 ] }"
1314
+
1315
+ if data.bytesize == 1 then
1316
+ # puts "debug add btun.lbuff a byte #{ data.inspect }"
1317
+ btun_info[ :lbuff ] = lbuff
1318
+ return
1319
+ end
1320
+
1321
+ # 使用长度缓存
1322
+ len = lbuff.unpack( 'n' ).first
1323
+ btun_info[ :lbuff ].clear
1324
+ data = data[ 1..-1 ]
1325
+ else
1326
+ # 使用长度缓存
1327
+ len = lbuff.unpack( 'n' ).first
1328
+ btun_info[ :lbuff ].clear
1329
+ end
1308
1330
  end
1309
1331
 
1310
1332
  chunk = data[ 0, len ]
@@ -1312,7 +1334,7 @@ module Girl
1312
1334
 
1313
1335
  if chunk_size == len then
1314
1336
  # 取完整了
1315
- chunk = @custom.decode( "#{ rbuff }#{ chunk }" )
1337
+ chunk = @custom.decode( "#{ btun_info[ :rbuff ] }#{ chunk }" )
1316
1338
  # puts "debug decode and add src.wbuff #{ chunk.bytesize }"
1317
1339
  add_src_wbuff( src, chunk )
1318
1340
  btun_info[ :rbuff ].clear
@@ -523,7 +523,6 @@ module Girl
523
523
  # pack a chunk
524
524
  #
525
525
  def pack_a_chunk( data )
526
- # puts "debug pack a chunk"
527
526
  data = @custom.encode( data )
528
527
  "#{ [ data.bytesize ].pack( 'n' ) }#{ data }"
529
528
  end
@@ -826,7 +825,8 @@ module Girl
826
825
  dst: nil, # 对应dst
827
826
  domain_port: nil, # dst的目的地和端口
828
827
  rbuff: '', # 暂存当前块没收全的流量
829
- wait_bytes: 0 # 还差多少字节收全当前块
828
+ wait_bytes: 0, # 还差多少字节收全当前块
829
+ lbuff: '' # 流量截断在长度前缀处
830
830
  }
831
831
 
832
832
  add_read( atun, :atun )
@@ -922,22 +922,44 @@ module Girl
922
922
  end
923
923
 
924
924
  until data.empty? do
925
- rbuff = atun_info[ :rbuff ]
926
925
  wait_bytes = atun_info[ :wait_bytes ]
927
926
 
928
927
  if wait_bytes > 0 then
929
928
  len = wait_bytes
930
929
  # puts "debug wait bytes #{ len }"
931
930
  else
932
- if data.bytesize <= 2 then
933
- # puts "debug unexpect data length #{ data.bytesize }"
934
- close_atun( atun )
935
- return
936
- end
931
+ lbuff = atun_info[ :lbuff ]
932
+
933
+ if lbuff.empty? then
934
+ # 长度缓存为空,从读到的流量里取长度
935
+ # 两个字节以下,记进长度缓存
936
+ if data.bytesize <= 2 then
937
+ # puts "debug set atun.lbuff #{ data.inspect }"
938
+ atun_info[ :lbuff ] = data
939
+ return
940
+ end
941
+
942
+ len = data[ 0, 2 ].unpack( 'n' ).first
943
+ data = data[ 2..-1 ]
944
+ elsif lbuff.bytesize == 1 then
945
+ # 长度缓存记有一个字节,补一个字节
946
+ lbuff = "#{ lbuff }#{ data[ 0 ] }"
937
947
 
938
- len = data[ 0, 2 ].unpack( 'n' ).first
939
- # puts "debug read len #{ len }"
940
- data = data[ 2..-1 ]
948
+ if data.bytesize == 1 then
949
+ # puts "debug add atun.lbuff a byte #{ data.inspect }"
950
+ atun_info[ :lbuff ] = lbuff
951
+ return
952
+ end
953
+
954
+ # 使用长度缓存
955
+ len = lbuff.unpack( 'n' ).first
956
+ atun_info[ :lbuff ].clear
957
+ data = data[ 1..-1 ]
958
+ else
959
+ # 使用长度缓存
960
+ len = lbuff.unpack( 'n' ).first
961
+ atun_info[ :lbuff ].clear
962
+ end
941
963
  end
942
964
 
943
965
  chunk = data[ 0, len ]
@@ -945,7 +967,7 @@ module Girl
945
967
 
946
968
  if chunk_size == len then
947
969
  # 取完整了
948
- chunk = @custom.decode( "#{ rbuff }#{ chunk }" )
970
+ chunk = @custom.decode( "#{ atun_info[ :rbuff ] }#{ chunk }" )
949
971
  # puts "debug decode and add dst.wbuff #{ chunk.bytesize }"
950
972
  add_dst_wbuff( dst, chunk )
951
973
  atun_info[ :rbuff ].clear
@@ -824,7 +824,8 @@ module Girl
824
824
  domain: domain, # 目的地
825
825
  wbuff: btun_wbuff, # 写前
826
826
  rbuff: '', # 暂存当前块没收全的流量
827
- wait_bytes: 0 # 还差多少字节收全当前块
827
+ wait_bytes: 0, # 还差多少字节收全当前块
828
+ lbuff: '' # 流量截断在长度前缀处
828
829
  }
829
830
 
830
831
  src_info[ :dst_id ] = dst_id
@@ -1216,22 +1217,44 @@ module Girl
1216
1217
  end
1217
1218
 
1218
1219
  until data.empty? do
1219
- rbuff = btun_info[ :rbuff ]
1220
1220
  wait_bytes = btun_info[ :wait_bytes ]
1221
1221
 
1222
1222
  if wait_bytes > 0 then
1223
1223
  len = wait_bytes
1224
1224
  # puts "debug wait bytes #{ len }"
1225
1225
  else
1226
- if data.bytesize <= 2 then
1227
- # puts "debug unexpect data length #{ data.bytesize }"
1228
- close_btun( btun )
1229
- return
1230
- end
1226
+ lbuff = btun_info[ :lbuff ]
1227
+
1228
+ if lbuff.empty? then
1229
+ # 长度缓存为空,从读到的流量里取长度
1230
+ # 两个字节以下,记进长度缓存
1231
+ if data.bytesize <= 2 then
1232
+ # puts "debug set btun.lbuff #{ data.inspect }"
1233
+ btun_info[ :lbuff ] = data
1234
+ return
1235
+ end
1236
+
1237
+ len = data[ 0, 2 ].unpack( 'n' ).first
1238
+ data = data[ 2..-1 ]
1239
+ elsif lbuff.bytesize == 1 then
1240
+ # 长度缓存记有一个字节,补一个字节
1241
+ lbuff = "#{ lbuff }#{ data[ 0 ] }"
1231
1242
 
1232
- len = data[ 0, 2 ].unpack( 'n' ).first
1233
- # puts "debug read len #{ len }"
1234
- data = data[ 2..-1 ]
1243
+ if data.bytesize == 1 then
1244
+ # puts "debug add btun.lbuff a byte #{ data.inspect }"
1245
+ btun_info[ :lbuff ] = lbuff
1246
+ return
1247
+ end
1248
+
1249
+ # 使用长度缓存
1250
+ len = lbuff.unpack( 'n' ).first
1251
+ btun_info[ :lbuff ].clear
1252
+ data = data[ 1..-1 ]
1253
+ else
1254
+ # 使用长度缓存
1255
+ len = lbuff.unpack( 'n' ).first
1256
+ btun_info[ :lbuff ].clear
1257
+ end
1235
1258
  end
1236
1259
 
1237
1260
  chunk = data[ 0, len ]
@@ -1239,7 +1262,7 @@ module Girl
1239
1262
 
1240
1263
  if chunk_size == len then
1241
1264
  # 取完整了
1242
- chunk = @custom.decode( "#{ rbuff }#{ chunk }" )
1265
+ chunk = @custom.decode( "#{ btun_info[ :rbuff ] }#{ chunk }" )
1243
1266
  # puts "debug read btun decoded #{ chunk.bytesize }"
1244
1267
  add_src_wbuff( src, chunk )
1245
1268
  btun_info[ :rbuff ] = ''
data/lib/girl/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Girl
2
- VERSION = '4.2.0'.freeze
2
+ VERSION = '4.3.0'.freeze
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: girl
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.2.0
4
+ version: 4.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - takafan