girl 9.1.2 → 9.1.3

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.
@@ -38,24 +38,24 @@ module Girl
38
38
  is_debug,
39
39
  is_server_fastopen )
40
40
 
41
- @nameserver_addrs = nameservers.map{ | n | Socket.sockaddr_in( 53, n ) }
41
+ @nameserver_addrs = nameservers.map{|n| Socket.sockaddr_in(53, n)}
42
42
  @reset_traff_day = reset_traff_day
43
- @update_roles = [ :dns, :dst, :mem, :p2, :proxy, :rsv ] # 参与淘汰的角色
43
+ @update_roles = [:dns, :dst, :mem, :p2, :proxy, :rsv] # 参与淘汰的角色
44
44
  @updates_limit = 1011 - ims.size # 淘汰池上限,1015(mac) - info, infod, memd, proxyd, p2ds(=ims)
45
45
  @eliminate_count = 0 # 淘汰次数
46
46
  @reads = [] # 读池
47
47
  @writes = [] # 写池
48
48
  @roles = {} # sock => :dns / :dst / :infod / :mem / :memd / :p2 / :p2d / :proxy / :proxyd / :rsv
49
49
  @updates = {} # sock => updated_at
50
- @proxy_infos = {} # proxy => { :addrinfo :im :paused_dsts :paused_p2s :rbuff :src_infos :wbuff }
51
- @im_infos = {} # im => { :addrinfo :in :out :p2d :p2d_host :p2d_port :proxy }
52
- @mem_infos = {} # mem => { :wbuff }
53
- @dst_infos = {} # dst => { :closing :connected :domain :im :ip :overflowing :port :proxy :rbuffs :src_id :wbuff }
54
- @dns_infos = {} # dns => { :domain :im :port :proxy :src_id }
55
- @rsv_infos = {} # rsv => { :domain :im :near_id :proxy }
56
- @resolv_caches = {} # domain => [ ip, created_at, im ]
57
- @p2d_infos = {} # p2d => { :im }
58
- @p2_infos = {} # p2 => { :addrinfo :closing :im :overflowing :p2_id :wbuff }
50
+ @proxy_infos = {} # proxy => {:addrinfo :im :paused_dsts :paused_p2s :rbuff :src_infos :wbuff}
51
+ @im_infos = {} # im => {:addrinfo :in :out :p2d :p2d_host :p2d_port :proxy}
52
+ @mem_infos = {} # mem => {:wbuff}
53
+ @dst_infos = {} # dst => {:closing :connected :domain :im :ip :overflowing :port :proxy :rbuffs :src_id :wbuff}
54
+ @dns_infos = {} # dns => {:domain :im :port :proxy :src_id}
55
+ @rsv_infos = {} # rsv => {:domain :im :near_id :proxy}
56
+ @resolv_caches = {} # domain => [ip, created_at, im]
57
+ @p2d_infos = {} # p2d => {:im}
58
+ @p2_infos = {} # p2 => {:addrinfo :closing :im :overflowing :p2_id :wbuff}
59
59
 
60
60
  @head_len = head_len
61
61
  @h_a_new_source = h_a_new_source
@@ -85,10 +85,10 @@ module Girl
85
85
  @is_debug = is_debug
86
86
  @is_server_fastopen = is_server_fastopen
87
87
 
88
- init_im_infos( ims, p2d_host, p2d_port )
89
- new_a_proxyd( proxyd_port )
90
- new_a_infod( proxyd_port )
91
- new_a_memd( memd_port )
88
+ init_im_infos(ims, p2d_host, p2d_port)
89
+ new_a_proxyd(proxyd_port)
90
+ new_a_infod(proxyd_port)
91
+ new_a_memd(memd_port)
92
92
  end
93
93
 
94
94
  def looping
@@ -97,51 +97,51 @@ module Girl
97
97
  loop_check_traff
98
98
 
99
99
  loop do
100
- rs, ws = IO.select( @reads, @writes )
100
+ rs, ws = IO.select(@reads, @writes)
101
101
 
102
- rs.each do | sock |
103
- role = @roles[ sock ]
102
+ rs.each do |sock|
103
+ role = @roles[sock]
104
104
 
105
105
  case role
106
- when :dns then
107
- read_dns( sock )
108
- when :dst then
109
- read_dst( sock )
110
- when :infod then
111
- read_infod( sock )
112
- when :mem then
113
- read_mem( sock )
114
- when :memd then
115
- read_memd( sock )
116
- when :p2 then
117
- read_p2( sock )
118
- when :p2d then
119
- read_p2d( sock )
120
- when :rsv then
121
- read_rsv( sock )
122
- when :proxy then
123
- read_proxy( sock )
124
- when :proxyd then
125
- read_proxyd( sock )
106
+ when :dns
107
+ read_dns(sock)
108
+ when :dst
109
+ read_dst(sock)
110
+ when :infod
111
+ read_infod(sock)
112
+ when :mem
113
+ read_mem(sock)
114
+ when :memd
115
+ read_memd(sock)
116
+ when :p2
117
+ read_p2(sock)
118
+ when :p2d
119
+ read_p2d(sock)
120
+ when :rsv
121
+ read_rsv(sock)
122
+ when :proxy
123
+ read_proxy(sock)
124
+ when :proxyd
125
+ read_proxyd(sock)
126
126
  else
127
- close_sock( sock )
127
+ close_sock(sock)
128
128
  end
129
129
  end
130
130
 
131
- ws.each do | sock |
132
- role = @roles[ sock ]
131
+ ws.each do |sock|
132
+ role = @roles[sock]
133
133
 
134
134
  case role
135
- when :dst then
136
- write_dst( sock )
137
- when :mem then
138
- write_mem( sock )
139
- when :p2 then
140
- write_p2( sock )
141
- when :proxy then
142
- write_proxy( sock )
135
+ when :dst
136
+ write_dst(sock)
137
+ when :mem
138
+ write_mem(sock)
139
+ when :p2
140
+ write_p2(sock)
141
+ when :proxy
142
+ write_proxy(sock)
143
143
  else
144
- close_sock( sock )
144
+ close_sock(sock)
145
145
  end
146
146
  end
147
147
  end
@@ -156,279 +156,276 @@ module Girl
156
156
 
157
157
  private
158
158
 
159
- def add_dst_wbuff( dst, data )
159
+ def add_dst_wbuff(dst, data)
160
160
  return if dst.nil? || dst.closed? || data.nil? || data.empty?
161
- dst_info = @dst_infos[ dst ]
162
- dst_info[ :wbuff ] << data
163
- bytesize = dst_info[ :wbuff ].bytesize
164
- im = dst_info[ :im ]
165
- src_id = dst_info[ :src_id ]
166
- domain = dst_info[ :domain ]
167
-
168
- if bytesize >= CLOSE_ABOVE then
169
- puts "close overflow dst #{ src_id } #{ domain }"
170
- close_dst( dst )
161
+ dst_info = @dst_infos[dst]
162
+ dst_info[:wbuff] << data
163
+ bytesize = dst_info[:wbuff].bytesize
164
+ im = dst_info[:im]
165
+ src_id = dst_info[:src_id]
166
+ domain = dst_info[:domain]
167
+
168
+ if bytesize >= CLOSE_ABOVE
169
+ puts "close overflow dst #{src_id} #{domain}"
170
+ close_dst(dst)
171
171
  return
172
172
  end
173
173
 
174
- if !dst_info[ :overflowing ] && ( bytesize >= WBUFF_LIMIT ) then
175
- proxy = dst_info[ :proxy ]
176
- puts "add h_dst_overflow #{ im } #{ src_id } #{ domain }"
177
- msg = "#{ @h_dst_overflow }#{ [ src_id ].pack( 'Q>' ) }"
178
- add_proxy_wbuff( proxy, pack_a_chunk( msg ) )
179
- dst_info[ :overflowing ] = true
174
+ if !dst_info[:overflowing] && (bytesize >= WBUFF_LIMIT)
175
+ proxy = dst_info[:proxy]
176
+ puts "add h_dst_overflow #{im} #{src_id} #{domain}"
177
+ msg = "#{@h_dst_overflow}#{[src_id].pack('Q>')}"
178
+ add_proxy_wbuff(proxy, pack_a_chunk(msg))
179
+ dst_info[:overflowing] = true
180
180
  end
181
181
 
182
- add_write( dst )
182
+ add_write(dst)
183
183
  end
184
184
 
185
- def add_mem_wbuff( mem, data )
185
+ def add_mem_wbuff(mem, data)
186
186
  return if mem.nil? || mem.closed? || data.nil? || data.empty?
187
- mem_info = @mem_infos[ mem ]
188
- mem_info[ :wbuff ] << data
189
- add_write( mem )
187
+ mem_info = @mem_infos[mem]
188
+ mem_info[:wbuff] << data
189
+ add_write(mem)
190
190
  end
191
191
 
192
- def add_p2_wbuff( p2, data )
192
+ def add_p2_wbuff(p2, data)
193
193
  return if p2.nil? || p2.closed? || data.nil? || data.empty?
194
- p2_info = @p2_infos[ p2 ]
195
- im = p2_info[ :im ]
196
- im_info = @im_infos[ im ]
194
+ p2_info = @p2_infos[p2]
195
+ im = p2_info[:im]
196
+ im_info = @im_infos[im]
197
197
 
198
- unless im_info then
199
- close_p2( p2 )
198
+ unless im_info
199
+ close_p2(p2)
200
200
  return
201
201
  end
202
202
 
203
- p2_info[ :wbuff ] << data
204
- bytesize = p2_info[ :wbuff ].bytesize
205
- p2_id = p2_info[ :p2_id ]
203
+ p2_info[:wbuff] << data
204
+ bytesize = p2_info[:wbuff].bytesize
205
+ p2_id = p2_info[:p2_id]
206
206
 
207
- if bytesize >= CLOSE_ABOVE then
208
- puts "close overflow p2 #{ p2_id }"
209
- close_p2( p2 )
207
+ if bytesize >= CLOSE_ABOVE
208
+ puts "close overflow p2 #{p2_id}"
209
+ close_p2(p2)
210
210
  return
211
211
  end
212
212
 
213
- if !p2_info[ :overflowing ] && ( bytesize >= WBUFF_LIMIT ) then
214
- proxy = im_info[ :proxy ]
215
- puts "add h_p2_overflow #{ im } #{ p2_id }"
216
- msg = "#{ @h_p2_overflow }#{ [ p2_id ].pack( 'Q>' ) }"
217
- add_proxy_wbuff( proxy, pack_a_chunk( msg ) )
218
- p2_info[ :overflowing ] = true
213
+ if !p2_info[:overflowing] && (bytesize >= WBUFF_LIMIT)
214
+ proxy = im_info[:proxy]
215
+ puts "add h_p2_overflow #{im} #{p2_id}"
216
+ msg = "#{@h_p2_overflow}#{[p2_id].pack('Q>')}"
217
+ add_proxy_wbuff(proxy, pack_a_chunk(msg))
218
+ p2_info[:overflowing] = true
219
219
  end
220
220
 
221
- add_write( p2 )
221
+ add_write(p2)
222
222
  end
223
223
 
224
- def add_proxy_wbuff( proxy, data )
224
+ def add_proxy_wbuff(proxy, data)
225
225
  return if proxy.nil? || proxy.closed? || data.nil? || data.empty?
226
- proxy_info = @proxy_infos[ proxy ]
227
- proxy_info[ :wbuff ] << data
228
- bytesize = proxy_info[ :wbuff ].bytesize
226
+ proxy_info = @proxy_infos[proxy]
227
+ proxy_info[:wbuff] << data
228
+ bytesize = proxy_info[:wbuff].bytesize
229
229
 
230
- if bytesize >= CLOSE_ABOVE then
231
- puts "close overflow proxy #{ proxy_info[ :im ] }"
232
- close_proxy( proxy )
230
+ if bytesize >= CLOSE_ABOVE
231
+ puts "close overflow proxy #{proxy_info[:im]}"
232
+ close_proxy(proxy)
233
233
  return
234
234
  end
235
235
 
236
- add_write( proxy )
236
+ add_write(proxy)
237
237
  end
238
238
 
239
- def add_read( sock, role = nil )
240
- return if sock.nil? || sock.closed? || @reads.include?( sock )
239
+ def add_read(sock, role = nil)
240
+ return if sock.nil? || sock.closed? || @reads.include?(sock)
241
241
  @reads << sock
242
242
 
243
- if role then
244
- @roles[ sock ] = role
243
+ if role
244
+ @roles[sock] = role
245
245
  else
246
- role = @roles[ sock ]
246
+ role = @roles[sock]
247
247
  end
248
248
 
249
- if @update_roles.include?( role ) then
250
- set_update( sock )
249
+ if @update_roles.include?(role)
250
+ set_update(sock)
251
251
  end
252
252
  end
253
253
 
254
- def add_write( sock )
255
- return if sock.nil? || sock.closed? || @writes.include?( sock )
254
+ def add_write(sock)
255
+ return if sock.nil? || sock.closed? || @writes.include?(sock)
256
256
  @writes << sock
257
- role = @roles[ sock ]
258
-
259
- if @update_roles.include?( role ) then
260
- set_update( sock )
261
- end
257
+ role = @roles[sock]
258
+ set_update(sock) if @update_roles.include?(role)
262
259
  end
263
260
 
264
261
  def check_expire_dnses
265
262
  now = Time.new
266
263
 
267
- @dns_infos.select{ | dns, _ | now.to_i - @updates[ dns ].to_i >= @expire_short_after }.each do | dns, info |
268
- puts "expire dns #{ info[ :im ] } #{ info[ :domain ] }" if @is_debug
269
- close_dns( dns )
264
+ @dns_infos.select{|dns, _| now.to_i - @updates[dns].to_i >= @expire_short_after}.each do |dns, info|
265
+ puts "expire dns #{info[:im]} #{info[:domain]}" if @is_debug
266
+ close_dns(dns)
270
267
  end
271
268
  end
272
269
 
273
270
  def check_expire_dsts
274
271
  now = Time.new
275
272
 
276
- @dst_infos.select{ | dst, info | info[ :connected ] ? ( now.to_i - @updates[ dst ].to_i >= @expire_long_after ) : ( now.to_i - @updates[ dst ].to_i >= @expire_connecting ) }.each do | dst, info |
277
- puts "expire dst #{ info[ :im ] } #{ info[ :domain ] }" if @is_debug
278
- close_dst( dst )
273
+ @dst_infos.select{|dst, info| info[:connected] ? (now.to_i - @updates[dst].to_i >= @expire_long_after) : (now.to_i - @updates[dst].to_i >= @expire_connecting)}.each do |dst, info|
274
+ puts "expire dst #{info[:im]} #{info[:domain]}" if @is_debug
275
+ close_dst(dst)
279
276
  end
280
277
  end
281
278
 
282
279
  def check_expire_mems
283
280
  now = Time.new
284
281
 
285
- @mem_infos.select{ | mem, _ | now.to_i - @updates[ mem ].to_i >= @expire_short_after }.each do | mem, _ |
282
+ @mem_infos.select{|mem, _| now.to_i - @updates[mem].to_i >= @expire_short_after}.each do |mem, _|
286
283
  puts "expire mem" if @is_debug
287
- close_mem( mem )
284
+ close_mem(mem)
288
285
  end
289
286
  end
290
287
 
291
288
  def check_expire_p2s
292
289
  now = Time.new
293
290
 
294
- @p2_infos.select{ | p2, _ | now.to_i - @updates[ p2 ].to_i >= @expire_long_after }.each do | p2, info |
295
- puts "expire p2 #{ info[ :im ] } #{ info[ :p2_id ] }" if @is_debug
296
- close_p2( p2 )
291
+ @p2_infos.select{|p2, _| now.to_i - @updates[p2].to_i >= @expire_long_after}.each do |p2, info|
292
+ puts "expire p2 #{info[:im]} #{info[:p2_id]}" if @is_debug
293
+ close_p2(p2)
297
294
  end
298
295
  end
299
296
 
300
297
  def check_expire_proxies
301
298
  now = Time.new
302
299
 
303
- @proxy_infos.select{ | proxy, _ | now.to_i - @updates[ proxy ].to_i >= @expire_long_after }.each do | proxy, info |
304
- puts "expire proxy #{ info[ :im ] }"
305
- close_proxy( proxy )
300
+ @proxy_infos.select{|proxy, _| now.to_i - @updates[proxy].to_i >= @expire_long_after}.each do |proxy, info|
301
+ puts "expire proxy #{info[:im]}"
302
+ close_proxy(proxy)
306
303
  end
307
304
  end
308
305
 
309
306
  def check_expire_rsvs
310
307
  now = Time.new
311
308
 
312
- @rsv_infos.select{ | rsv, _ | now.to_i - @updates[ rsv ].to_i >= @expire_short_after }.each do | rsv, info |
313
- puts "expire rsv #{ info[ :im ] } #{ info[ :domain ] }" if @is_debug
314
- close_rsv( rsv )
309
+ @rsv_infos.select{|rsv, _| now.to_i - @updates[rsv].to_i >= @expire_short_after}.each do |rsv, info|
310
+ puts "expire rsv #{info[:im]} #{info[:domain]}" if @is_debug
311
+ close_rsv(rsv)
315
312
  end
316
313
  end
317
314
 
318
- def check_expire_srcs( proxy )
315
+ def check_expire_srcs(proxy)
319
316
  return if proxy.nil? || proxy.closed?
320
- proxy_info = @proxy_infos[ proxy ]
321
- im = proxy_info[ :im ]
317
+ proxy_info = @proxy_infos[proxy]
318
+ im = proxy_info[:im]
322
319
  now = Time.new
323
320
 
324
- proxy_info[ :src_infos ].select{ | _, info | info[ :dst ].nil? && ( now.to_i - info[ :created_at ].to_i >= @expire_short_after ) }.each do | src_id, _ |
325
- puts "expire src info #{ im } #{ src_id }" if @is_debug
326
- proxy_info[ :src_infos ].delete( src_id )
321
+ proxy_info[:src_infos].select{|_, info| info[:dst].nil? && (now.to_i - info[:created_at].to_i >= @expire_short_after)}.each do |src_id, _|
322
+ puts "expire src info #{im} #{src_id}" if @is_debug
323
+ proxy_info[:src_infos].delete(src_id)
327
324
  end
328
325
  end
329
326
 
330
- def close_dns( dns )
327
+ def close_dns(dns)
331
328
  return nil if dns.nil? || dns.closed?
332
- close_sock( dns )
333
- dns_info = @dns_infos.delete( dns )
334
- puts "close dns #{ dns_info[ :im ] } #{ dns_info[ :domain ] }" if @is_debug
329
+ close_sock(dns)
330
+ dns_info = @dns_infos.delete(dns)
331
+ puts "close dns #{dns_info[:im]} #{dns_info[:domain]}" if @is_debug
335
332
  dns_info
336
333
  end
337
334
 
338
- def close_dst( dst )
335
+ def close_dst(dst)
339
336
  return nil if dst.nil? || dst.closed?
340
- close_sock( dst )
341
- dst_info = @dst_infos.delete( dst )
342
- im = dst_info[ :im ]
343
- src_id = dst_info[ :src_id ]
344
- domain = dst_info[ :domain ]
345
- puts "close dst #{ im } #{ src_id } #{ domain }" if @is_debug
346
- proxy = dst_info[ :proxy ]
347
-
348
- unless proxy.closed? then
349
- proxy_info = @proxy_infos[ proxy ]
350
- proxy_info[ :paused_dsts ].delete( dst )
351
- proxy_info[ :src_infos ].delete( src_id )
352
- puts "add h_dst_close #{ im } #{ src_id }" if @is_debug
353
- msg = "#{ @h_dst_close }#{ [ src_id ].pack( 'Q>' ) }"
354
- add_proxy_wbuff( proxy, pack_a_chunk( msg ) )
337
+ close_sock(dst)
338
+ dst_info = @dst_infos.delete(dst)
339
+ im = dst_info[:im]
340
+ src_id = dst_info[:src_id]
341
+ domain = dst_info[:domain]
342
+ puts "close dst #{im} #{src_id} #{domain}" if @is_debug
343
+ proxy = dst_info[:proxy]
344
+
345
+ unless proxy.closed?
346
+ proxy_info = @proxy_infos[proxy]
347
+ proxy_info[:paused_dsts].delete(dst)
348
+ proxy_info[:src_infos].delete(src_id)
349
+ puts "add h_dst_close #{im} #{src_id}" if @is_debug
350
+ msg = "#{@h_dst_close}#{[src_id].pack('Q>')}"
351
+ add_proxy_wbuff(proxy, pack_a_chunk(msg))
355
352
  end
356
353
 
357
354
  dst_info
358
355
  end
359
356
 
360
- def close_mem( mem )
357
+ def close_mem(mem)
361
358
  return nil if mem.nil? || mem.closed?
362
- close_sock( mem )
363
- @mem_infos.delete( mem )
359
+ close_sock(mem)
360
+ @mem_infos.delete(mem)
364
361
  end
365
362
 
366
- def close_p2( p2 )
363
+ def close_p2(p2)
367
364
  return nil if p2.nil? || p2.closed?
368
- close_sock( p2 )
369
- p2_info = @p2_infos.delete( p2 )
370
- im = p2_info[ :im ]
371
- p2_id = p2_info[ :p2_id ]
372
- puts "close p2 #{ im } #{ p2_id }"
373
- im_info = @im_infos[ im ]
374
-
375
- if im_info then
376
- proxy = im_info[ :proxy ]
377
-
378
- if proxy && !proxy.closed? then
379
- proxy_info = @proxy_infos[ proxy ]
380
- proxy_info[ :paused_p2s ].delete( p2 )
381
- puts "add h_p2_close #{ im } #{ p2_id }"
382
- msg = "#{ @h_p2_close }#{ [ p2_id ].pack( 'Q>' ) }"
383
- add_proxy_wbuff( proxy, pack_a_chunk( msg ) )
365
+ close_sock(p2)
366
+ p2_info = @p2_infos.delete(p2)
367
+ im = p2_info[:im]
368
+ p2_id = p2_info[:p2_id]
369
+ puts "close p2 #{im} #{p2_id}"
370
+ im_info = @im_infos[im]
371
+
372
+ if im_info
373
+ proxy = im_info[:proxy]
374
+
375
+ if proxy && !proxy.closed?
376
+ proxy_info = @proxy_infos[proxy]
377
+ proxy_info[:paused_p2s].delete(p2)
378
+ puts "add h_p2_close #{im} #{p2_id}"
379
+ msg = "#{@h_p2_close}#{[p2_id].pack('Q>')}"
380
+ add_proxy_wbuff(proxy, pack_a_chunk(msg))
384
381
  end
385
382
  end
386
383
 
387
384
  p2_info
388
385
  end
389
386
 
390
- def close_proxy( proxy )
387
+ def close_proxy(proxy)
391
388
  return nil if proxy.nil? || proxy.closed?
392
- close_sock( proxy )
393
- proxy_info = @proxy_infos.delete( proxy )
394
- im = proxy_info[ :im ]
395
- puts "close proxy #{ proxy_info[ :addrinfo ].ip_unpack.inspect } #{ im }" if @is_debug
396
- @dst_infos.select{ | _, info | info[ :proxy ] == proxy }.each{ | dst, _ | close_dst( dst ) }
397
- @p2_infos.select{ | _, info | info[ :im ] == im }.each{ | p2, _ | close_p2( p2 ) }
389
+ close_sock(proxy)
390
+ proxy_info = @proxy_infos.delete(proxy)
391
+ im = proxy_info[:im]
392
+ puts "close proxy #{proxy_info[:addrinfo].ip_unpack.inspect} #{im}" if @is_debug
393
+ @dst_infos.select{|_, info| info[:proxy] == proxy}.each{|dst, _| close_dst(dst)}
394
+ @p2_infos.select{|_, info| info[:im] == im}.each{|p2, _| close_p2(p2)}
398
395
  proxy_info
399
396
  end
400
397
 
401
- def close_rsv( rsv )
398
+ def close_rsv(rsv)
402
399
  return nil if rsv.nil? || rsv.closed?
403
- close_sock( rsv )
404
- rsv_info = @rsv_infos.delete( rsv )
405
- puts "close rsv #{ rsv_info[ :im ] } #{ rsv_info[ :domain ] }" if @is_debug
400
+ close_sock(rsv)
401
+ rsv_info = @rsv_infos.delete(rsv)
402
+ puts "close rsv #{rsv_info[:im]} #{rsv_info[:domain]}" if @is_debug
406
403
  rsv_info
407
404
  end
408
405
 
409
- def close_sock( sock )
406
+ def close_sock(sock)
410
407
  return if sock.nil? || sock.closed?
411
408
  sock.close
412
- @reads.delete( sock )
413
- @writes.delete( sock )
414
- @updates.delete( sock )
415
- @roles.delete( sock )
409
+ @reads.delete(sock)
410
+ @writes.delete(sock)
411
+ @updates.delete(sock)
412
+ @roles.delete(sock)
416
413
  end
417
414
 
418
- def deal_msg( data, proxy )
415
+ def deal_msg(data, proxy)
419
416
  return if data.nil? || data.empty? || proxy.nil? || proxy.closed?
420
- proxy_info = @proxy_infos[ proxy ]
421
- im = proxy_info[ :im ]
417
+ proxy_info = @proxy_infos[proxy]
418
+ im = proxy_info[:im]
422
419
  return unless im
423
- h = data[ 0 ]
420
+ h = data[0]
424
421
 
425
422
  case h
426
- when @h_a_new_source then
423
+ when @h_a_new_source
427
424
  return if data.bytesize < 9
428
- check_expire_srcs( proxy )
429
- src_id = data[ 1, 8 ].unpack( 'Q>' ).first
430
- domain_port = data[ 9..-1 ]
431
- puts "got h_a_new_source #{ im } #{ src_id } #{ domain_port.inspect }" if @is_debug
425
+ check_expire_srcs(proxy)
426
+ src_id = data[1, 8].unpack('Q>').first
427
+ domain_port = data[9..-1]
428
+ puts "got h_a_new_source #{im} #{src_id} #{domain_port.inspect}" if @is_debug
432
429
 
433
430
  src_info = {
434
431
  created_at: Time.new,
@@ -436,125 +433,125 @@ module Girl
436
433
  rbuff: ''
437
434
  }
438
435
 
439
- proxy_info[ :src_infos ][ src_id ] = src_info
440
- resolve_domain_port( domain_port, src_id, proxy, im )
441
- when @h_p1_close then
436
+ proxy_info[:src_infos][src_id] = src_info
437
+ resolve_domain_port(domain_port, src_id, proxy, im)
438
+ when @h_p1_close
442
439
  return if data.bytesize < 9
443
- p2_id = data[ 1, 8 ].unpack( 'Q>' ).first
444
- puts "got h_p1_close #{ im } #{ p2_id }"
445
- p2, _ = @p2_infos.find{ | _, info | ( info[ :im ] == im ) && ( info[ :p2_id ] == p2_id ) }
446
- set_p2_closing( p2 )
447
- when @h_p2_traffic then
440
+ p2_id = data[1, 8].unpack('Q>').first
441
+ puts "got h_p1_close #{im} #{p2_id}"
442
+ p2, _ = @p2_infos.find{|_, info| (info[:im] == im) && (info[:p2_id] == p2_id)}
443
+ set_p2_closing(p2)
444
+ when @h_p2_traffic
448
445
  return if data.bytesize < 9
449
- p2_id = data[ 1, 8 ].unpack( 'Q>' ).first
450
- data = data[ 9..-1 ]
451
- # puts "got h_p2_traffic #{ im } #{ p2_id } #{ data.bytesize }" if @is_debug
452
- p2, _ = @p2_infos.find{ | _, info | ( info[ :im ] == im ) && ( info[ :p2_id ] == p2_id ) }
453
- add_p2_wbuff( p2, data )
454
- when @h_p1_overflow then
446
+ p2_id = data[1, 8].unpack('Q>').first
447
+ data = data[9..-1]
448
+ # puts "got h_p2_traffic #{im} #{p2_id} #{data.bytesize}" if @is_debug
449
+ p2, _ = @p2_infos.find{|_, info| (info[:im] == im) && (info[:p2_id] == p2_id)}
450
+ add_p2_wbuff(p2, data)
451
+ when @h_p1_overflow
455
452
  return if data.bytesize < 9
456
- p2_id = data[ 1, 8 ].unpack( 'Q>' ).first
457
- puts "got h_p1_overflow pause p2 #{ im } #{ p2_id }"
458
- p2, _ = @p2_infos.find{ | _, info | ( info[ :im ] == im ) && ( info[ :p2_id ] == p2_id ) }
459
- @reads.delete( p2 )
460
- proxy_info[ :paused_p2s ].delete( p2 )
461
- when @h_p1_underhalf then
453
+ p2_id = data[1, 8].unpack('Q>').first
454
+ puts "got h_p1_overflow pause p2 #{im} #{p2_id}"
455
+ p2, _ = @p2_infos.find{|_, info| (info[:im] == im) && (info[:p2_id] == p2_id)}
456
+ @reads.delete(p2)
457
+ proxy_info[:paused_p2s].delete(p2)
458
+ when @h_p1_underhalf
462
459
  return if data.bytesize < 9
463
- p2_id = data[ 1, 8 ].unpack( 'Q>' ).first
464
- puts "got h_p1_underhalf #{ im } #{ p2_id }"
465
- p2, _ = @p2_infos.find{ | _, info | ( info[ :im ] == im ) && ( info[ :p2_id ] == p2_id ) }
466
- add_read( p2 )
467
- when @h_query then
460
+ p2_id = data[1, 8].unpack('Q>').first
461
+ puts "got h_p1_underhalf #{im} #{p2_id}"
462
+ p2, _ = @p2_infos.find{|_, info| (info[:im] == im) && (info[:p2_id] == p2_id)}
463
+ add_read(p2)
464
+ when @h_query
468
465
  return if data.bytesize < 10
469
- near_id, type = data[ 1, 9 ].unpack( 'Q>C' )
470
- return unless [ 1, 28 ].include?( type )
471
- domain = data[ 10..-1 ]
466
+ near_id, type = data[1, 9].unpack('Q>C')
467
+ return unless [1, 28].include?(type)
468
+ domain = data[10..-1]
472
469
  return if domain.nil? || domain.empty?
473
- puts "got h_query #{ im } #{ near_id } #{ type } #{ domain.inspect }" if @is_debug
474
- new_a_rsv( domain, near_id, type, proxy, im )
475
- when @h_src_close then
470
+ puts "got h_query #{im} #{near_id} #{type} #{domain.inspect}" if @is_debug
471
+ new_a_rsv(domain, near_id, type, proxy, im)
472
+ when @h_src_close
476
473
  return if data.bytesize < 9
477
- src_id = data[ 1, 8 ].unpack( 'Q>' ).first
478
- puts "got h_src_close #{ im } #{ src_id }" if @is_debug
479
- src_info = proxy_info[ :src_infos ].delete( src_id )
480
- set_dst_closing( src_info[ :dst ] ) if src_info
481
- when @h_traffic then
474
+ src_id = data[1, 8].unpack('Q>').first
475
+ puts "got h_src_close #{im} #{src_id}" if @is_debug
476
+ src_info = proxy_info[:src_infos].delete(src_id)
477
+ set_dst_closing(src_info[:dst]) if src_info
478
+ when @h_traffic
482
479
  return if data.bytesize < 9
483
- src_id = data[ 1, 8 ].unpack( 'Q>' ).first
484
- data = data[ 9..-1 ]
485
- # puts "got h_traffic #{ im } #{ src_id } #{ data.bytesize }" if @is_debug
486
- src_info = proxy_info[ :src_infos ][ src_id ]
480
+ src_id = data[1, 8].unpack('Q>').first
481
+ data = data[9..-1]
482
+ # puts "got h_traffic #{im} #{src_id} #{data.bytesize}" if @is_debug
483
+ src_info = proxy_info[:src_infos][src_id]
487
484
 
488
- if src_info then
489
- dst = src_info[ :dst ]
485
+ if src_info
486
+ dst = src_info[:dst]
490
487
 
491
- if dst then
492
- add_dst_wbuff( dst, data )
488
+ if dst
489
+ add_dst_wbuff(dst, data)
493
490
  else
494
- puts "add src rbuff #{ im } #{ data.bytesize }" if @is_debug
495
- src_info[ :rbuff ] << data
491
+ puts "add src rbuff #{im} #{data.bytesize}" if @is_debug
492
+ src_info[:rbuff] << data
496
493
 
497
- if src_info[ :rbuff ].bytesize >= WBUFF_LIMIT then
494
+ if src_info[:rbuff].bytesize >= WBUFF_LIMIT
498
495
  puts "src rbuff full"
499
- close_proxy( proxy )
496
+ close_proxy(proxy)
500
497
  end
501
498
  end
502
499
  end
503
- when @h_src_overflow then
500
+ when @h_src_overflow
504
501
  return if data.bytesize < 9
505
- src_id = data[ 1, 8 ].unpack( 'Q>' ).first
506
- puts "got h_src_overflow pause dst #{ im } #{ src_id }"
507
- src_info = proxy_info[ :src_infos ][ src_id ]
502
+ src_id = data[1, 8].unpack('Q>').first
503
+ puts "got h_src_overflow pause dst #{im} #{src_id}"
504
+ src_info = proxy_info[:src_infos][src_id]
508
505
 
509
- if src_info then
510
- dst = src_info[ :dst ]
511
- @reads.delete( dst )
506
+ if src_info
507
+ dst = src_info[:dst]
508
+ @reads.delete(dst)
512
509
  # 远端收取目的地比传给近端快,近端收取远端又比传给客户端快(2g wifi),流量即在远端proxy堆积,又在近端src堆积
513
510
  # 这种情况只等待近端src降半,等到降半消息才恢复读dst,忽略proxy降半
514
- proxy_info[ :paused_dsts ].delete( dst )
511
+ proxy_info[:paused_dsts].delete(dst)
515
512
  end
516
- when @h_src_underhalf then
513
+ when @h_src_underhalf
517
514
  return if data.bytesize < 9
518
- src_id = data[ 1, 8 ].unpack( 'Q>' ).first
519
- puts "got h_src_underhalf #{ im } #{ src_id }"
520
- src_info = proxy_info[ :src_infos ][ src_id ]
521
- add_read( src_info[ :dst ] ) if src_info
515
+ src_id = data[1, 8].unpack('Q>').first
516
+ puts "got h_src_underhalf #{im} #{src_id}"
517
+ src_info = proxy_info[:src_infos][src_id]
518
+ add_read(src_info[:dst]) if src_info
522
519
  end
523
520
  end
524
521
 
525
- def decode_to_msgs( data )
522
+ def decode_to_msgs(data)
526
523
  msgs = []
527
524
  part = ''
528
525
 
529
526
  loop do
530
- if data.bytesize <= 2 then
527
+ if data.bytesize <= 2
531
528
  part = data
532
529
  break
533
530
  end
534
531
 
535
- len = data[ 0, 2 ].unpack( 'n' ).first
532
+ len = data[0, 2].unpack('n').first
536
533
 
537
- if len == 0 then
534
+ if len == 0
538
535
  puts "msg zero len?"
539
536
  break
540
537
  end
541
538
 
542
- if data.bytesize < ( 2 + len ) then
539
+ if data.bytesize < (2 + len)
543
540
  part = data
544
541
  break
545
542
  end
546
543
 
547
- msgs << data[ 2, len ]
548
- data = data[ ( 2 + len )..-1 ]
544
+ msgs << data[2, len]
545
+ data = data[(2 + len)..-1]
549
546
  break if data.empty?
550
547
  end
551
548
 
552
- [ msgs, part ]
549
+ [msgs, part]
553
550
  end
554
551
 
555
- def init_im_infos( ims, p2d_host, p2d_port )
556
- ims.sort.each_with_index do | im, i |
557
- @im_infos[ im ] = {
552
+ def init_im_infos(ims, p2d_host, p2d_port)
553
+ ims.sort.each_with_index do |im, i|
554
+ @im_infos[im] = {
558
555
  addrinfo: nil,
559
556
  in: 0,
560
557
  out: 0,
@@ -567,15 +564,15 @@ module Girl
567
564
  end
568
565
 
569
566
  def loop_check_traff
570
- if @reset_traff_day > 0 then
567
+ if @reset_traff_day > 0
571
568
  Thread.new do
572
569
  loop do
573
570
  sleep CHECK_TRAFF_INTERVAL
574
571
  now = Time.new
575
572
 
576
- if ( now.day == @reset_traff_day ) && ( now.hour == 0 ) then
577
- msg = { message_type: 'reset-traffic' }
578
- send_data( @info, JSON.generate( msg ), @infod_addr )
573
+ if (now.day == @reset_traff_day) && (now.hour == 0)
574
+ msg = {message_type: 'reset-traffic'}
575
+ send_data(@info, JSON.generate(msg), @infod_addr)
579
576
  end
580
577
  end
581
578
  end
@@ -586,36 +583,36 @@ module Girl
586
583
  Thread.new do
587
584
  loop do
588
585
  sleep HEARTBEAT_INTERVAL
589
- msg = { message_type: 'heartbeat' }
590
- send_data( @info, JSON.generate( msg ), @infod_addr )
586
+ msg = {message_type: 'heartbeat'}
587
+ send_data(@info, JSON.generate(msg), @infod_addr)
591
588
  end
592
589
  end
593
590
  end
594
591
 
595
- def new_a_dst( domain, ip, port, src_id, proxy )
592
+ def new_a_dst(domain, ip, port, src_id, proxy)
596
593
  return if proxy.nil? || proxy.closed?
597
- proxy_info = @proxy_infos[ proxy ]
598
- im = proxy_info[ :im ]
599
- src_info = proxy_info[ :src_infos ][ src_id ]
594
+ proxy_info = @proxy_infos[proxy]
595
+ im = proxy_info[:im]
596
+ src_info = proxy_info[:src_infos][src_id]
600
597
  return unless src_info
601
598
 
602
599
  check_expire_dsts
603
600
 
604
601
  begin
605
- dst = Socket.new( Socket::AF_INET, Socket::SOCK_STREAM, 0 )
602
+ dst = Socket.new(Socket::AF_INET, Socket::SOCK_STREAM, 0)
606
603
  rescue Exception => e
607
- puts "new a dst #{ e.class } #{ im } #{ domain }:#{ port }"
604
+ puts "new a dst #{e.class} #{im} #{domain}:#{port}"
608
605
  return
609
606
  end
610
607
 
611
- dst.setsockopt( Socket::IPPROTO_TCP, Socket::TCP_NODELAY, 1 )
608
+ dst.setsockopt(Socket::IPPROTO_TCP, Socket::TCP_NODELAY, 1)
612
609
 
613
610
  begin
614
- destination_addr = Socket.sockaddr_in( port, ip )
615
- dst.connect_nonblock( destination_addr )
611
+ destination_addr = Socket.sockaddr_in(port, ip)
612
+ dst.connect_nonblock(destination_addr)
616
613
  rescue IO::WaitWritable
617
614
  rescue Exception => e
618
- puts "connect destination #{ e.class } #{ im } #{ domain }:#{ port }"
615
+ puts "connect destination #{e.class} #{im} #{domain}:#{port}"
619
616
  dst.close
620
617
  return
621
618
  end
@@ -631,56 +628,56 @@ module Girl
631
628
  proxy: proxy,
632
629
  rbuffs: [],
633
630
  src_id: src_id,
634
- wbuff: src_info[ :rbuff ].dup
631
+ wbuff: src_info[:rbuff].dup
635
632
  }
636
633
 
637
- @dst_infos[ dst ] = dst_info
638
- add_read( dst, :dst )
639
- add_write( dst )
640
- src_info[ :dst ] = dst
634
+ @dst_infos[dst] = dst_info
635
+ add_read(dst, :dst)
636
+ add_write(dst)
637
+ src_info[:dst] = dst
641
638
  end
642
639
 
643
- def new_a_infod( infod_port )
640
+ def new_a_infod(infod_port)
644
641
  infod_host = '127.0.0.1'
645
- infod_addr = Socket.sockaddr_in( infod_port, infod_host )
646
- infod = Socket.new( Socket::AF_INET, Socket::SOCK_DGRAM, 0 )
647
- infod.setsockopt( Socket::SOL_SOCKET, Socket::SO_REUSEPORT, 1 ) if RUBY_PLATFORM.include?( 'linux' )
648
- infod.bind( infod_addr )
649
- puts "infod bind on #{ infod_host } #{ infod_port }"
650
- add_read( infod, :infod )
651
- info = Socket.new( Socket::AF_INET, Socket::SOCK_DGRAM, 0 )
642
+ infod_addr = Socket.sockaddr_in(infod_port, infod_host)
643
+ infod = Socket.new(Socket::AF_INET, Socket::SOCK_DGRAM, 0)
644
+ infod.setsockopt(Socket::SOL_SOCKET, Socket::SO_REUSEPORT, 1) if RUBY_PLATFORM.include?('linux')
645
+ infod.bind(infod_addr)
646
+ puts "infod bind on #{infod_host} #{infod_port}"
647
+ add_read(infod, :infod)
648
+ info = Socket.new(Socket::AF_INET, Socket::SOCK_DGRAM, 0)
652
649
  @infod_addr = infod_addr
653
650
  @infod = infod
654
651
  @info = info
655
652
  end
656
653
 
657
- def new_a_memd( memd_port )
654
+ def new_a_memd(memd_port)
658
655
  memd_host = '127.0.0.1'
659
- memd = Socket.new( Socket::AF_INET, Socket::SOCK_STREAM, 0 )
660
- memd.setsockopt( Socket::IPPROTO_TCP, Socket::TCP_NODELAY, 1 )
661
- memd.setsockopt( Socket::SOL_SOCKET, Socket::SO_REUSEPORT, 1 ) if RUBY_PLATFORM.include?( 'linux' )
662
- memd.setsockopt( Socket::IPPROTO_TCP, Socket::TCP_FASTOPEN, 5 ) if @is_server_fastopen
663
- memd.bind( Socket.sockaddr_in( memd_port, memd_host ) )
664
- memd.listen( 5 )
665
- puts "memd listen on #{ memd_host } #{ memd_port }"
666
- add_read( memd, :memd )
656
+ memd = Socket.new(Socket::AF_INET, Socket::SOCK_STREAM, 0)
657
+ memd.setsockopt(Socket::IPPROTO_TCP, Socket::TCP_NODELAY, 1)
658
+ memd.setsockopt(Socket::SOL_SOCKET, Socket::SO_REUSEPORT, 1) if RUBY_PLATFORM.include?('linux')
659
+ memd.setsockopt(Socket::IPPROTO_TCP, Socket::TCP_FASTOPEN, 5) if @is_server_fastopen
660
+ memd.bind(Socket.sockaddr_in(memd_port, memd_host))
661
+ memd.listen(5)
662
+ puts "memd listen on #{memd_host} #{memd_port}"
663
+ add_read(memd, :memd)
667
664
  end
668
665
 
669
- def new_a_rsv( domain, near_id, type, proxy, im )
666
+ def new_a_rsv(domain, near_id, type, proxy, im)
670
667
  check_expire_rsvs
671
- rsv = Socket.new( Socket::AF_INET, Socket::SOCK_DGRAM, 0 )
668
+ rsv = Socket.new(Socket::AF_INET, Socket::SOCK_DGRAM, 0)
672
669
 
673
670
  begin
674
- data = pack_a_query( domain, type )
671
+ data = pack_a_query(domain, type)
675
672
  rescue Exception => e
676
- puts "rsv pack a query #{ e.class } #{ e.message } #{ domain }" if @is_debug
673
+ puts "rsv pack a query #{e.class} #{e.message} #{domain}" if @is_debug
677
674
  return
678
675
  end
679
676
 
680
677
  begin
681
- @nameserver_addrs.each{ | addr | rsv.sendmsg( data, 0, addr ) }
678
+ @nameserver_addrs.each{|addr| rsv.sendmsg(data, 0, addr)}
682
679
  rescue Exception => e
683
- puts "rsv send data #{ e.class }"
680
+ puts "rsv send data #{e.class}"
684
681
  rsv.close
685
682
  return
686
683
  end
@@ -692,197 +689,197 @@ module Girl
692
689
  proxy: proxy
693
690
  }
694
691
 
695
- @rsv_infos[ rsv ] = rsv_info
696
- add_read( rsv, :rsv )
692
+ @rsv_infos[rsv] = rsv_info
693
+ add_read(rsv, :rsv)
697
694
  end
698
695
 
699
- def new_a_p2d( p2d_host, p2d_port, im, proxy )
696
+ def new_a_p2d(p2d_host, p2d_port, im, proxy)
700
697
  begin
701
- p2d = Socket.new( Socket::AF_INET, Socket::SOCK_STREAM, 0 )
702
- p2d.setsockopt( Socket::IPPROTO_TCP, Socket::TCP_NODELAY, 1 )
703
- p2d.setsockopt( Socket::SOL_SOCKET, Socket::SO_REUSEPORT, 1 ) if RUBY_PLATFORM.include?( 'linux' )
704
- p2d.setsockopt( Socket::IPPROTO_TCP, Socket::TCP_FASTOPEN, 5 ) if @is_server_fastopen
705
- p2d.bind( Socket.sockaddr_in( p2d_port, p2d_host ) )
706
- p2d.listen( 5 )
707
- puts "p2d listen on #{ p2d_host } #{ p2d_port } #{ im }"
708
- @p2d_infos[ p2d ] = { im: im }
709
- add_read( p2d, :p2d )
698
+ p2d = Socket.new(Socket::AF_INET, Socket::SOCK_STREAM, 0)
699
+ p2d.setsockopt(Socket::IPPROTO_TCP, Socket::TCP_NODELAY, 1)
700
+ p2d.setsockopt(Socket::SOL_SOCKET, Socket::SO_REUSEPORT, 1) if RUBY_PLATFORM.include?('linux')
701
+ p2d.setsockopt(Socket::IPPROTO_TCP, Socket::TCP_FASTOPEN, 5) if @is_server_fastopen
702
+ p2d.bind(Socket.sockaddr_in(p2d_port, p2d_host))
703
+ p2d.listen(5)
704
+ puts "p2d listen on #{p2d_host} #{p2d_port} #{im}"
705
+ @p2d_infos[p2d] = {im: im}
706
+ add_read(p2d, :p2d)
710
707
  rescue Exception => e
711
- puts "new a p2d #{ e.class }"
708
+ puts "new a p2d #{e.class}"
712
709
  end
713
710
 
714
711
  p2d
715
712
  end
716
713
 
717
- def new_a_proxyd( proxyd_port )
714
+ def new_a_proxyd(proxyd_port)
718
715
  proxyd_host = '0.0.0.0'
719
- proxyd = Socket.new( Socket::AF_INET, Socket::SOCK_STREAM, 0 )
720
- proxyd.setsockopt( Socket::IPPROTO_TCP, Socket::TCP_NODELAY, 1 )
721
- proxyd.setsockopt( Socket::SOL_SOCKET, Socket::SO_REUSEPORT, 1 ) if RUBY_PLATFORM.include?( 'linux' )
722
- proxyd.setsockopt( Socket::IPPROTO_TCP, Socket::TCP_FASTOPEN, BACKLOG ) if @is_server_fastopen
723
- proxyd.bind( Socket.sockaddr_in( proxyd_port, proxyd_host ) )
724
- proxyd.listen( BACKLOG )
725
- puts "proxyd listen on #{ proxyd_host } #{ proxyd_port }"
726
- add_read( proxyd, :proxyd )
716
+ proxyd = Socket.new(Socket::AF_INET, Socket::SOCK_STREAM, 0)
717
+ proxyd.setsockopt(Socket::IPPROTO_TCP, Socket::TCP_NODELAY, 1)
718
+ proxyd.setsockopt(Socket::SOL_SOCKET, Socket::SO_REUSEPORT, 1) if RUBY_PLATFORM.include?('linux')
719
+ proxyd.setsockopt(Socket::IPPROTO_TCP, Socket::TCP_FASTOPEN, BACKLOG) if @is_server_fastopen
720
+ proxyd.bind(Socket.sockaddr_in(proxyd_port, proxyd_host))
721
+ proxyd.listen(BACKLOG)
722
+ puts "proxyd listen on #{proxyd_host} #{proxyd_port}"
723
+ add_read(proxyd, :proxyd)
727
724
  end
728
725
 
729
- def pack_a_chunk( msg )
730
- "#{ [ msg.bytesize ].pack( 'n' ) }#{ msg }"
726
+ def pack_a_chunk(msg)
727
+ "#{[msg.bytesize].pack('n')}#{msg}"
731
728
  end
732
729
 
733
- def pack_p2_traffic( p2_id, data )
730
+ def pack_p2_traffic(p2_id, data)
734
731
  chunks = ''
735
732
 
736
733
  loop do
737
- part = data[ 0, 65526 ]
738
- # puts "add h_p2_traffic #{ p2_id } #{ part.bytesize }" if @is_debug
739
- msg = "#{ @h_p2_traffic }#{ [ p2_id ].pack( 'Q>' ) }#{ part }"
740
- chunks << pack_a_chunk( msg )
741
- data = data[ part.bytesize..-1 ]
734
+ part = data[0, 65526]
735
+ # puts "add h_p2_traffic #{p2_id} #{part.bytesize}" if @is_debug
736
+ msg = "#{@h_p2_traffic}#{[p2_id].pack('Q>')}#{part}"
737
+ chunks << pack_a_chunk(msg)
738
+ data = data[part.bytesize..-1]
742
739
  break if data.empty?
743
740
  end
744
741
 
745
742
  chunks
746
743
  end
747
744
 
748
- def pack_traffic( src_id, data )
745
+ def pack_traffic(src_id, data)
749
746
  chunks = ''
750
747
 
751
748
  loop do
752
- part = data[ 0, 65526 ]
753
- # puts "add h_traffic #{ src_id } #{ part.bytesize }" if @is_debug
754
- msg = "#{ @h_traffic }#{ [ src_id ].pack( 'Q>' ) }#{ part }"
755
- chunks << pack_a_chunk( msg )
756
- data = data[ part.bytesize..-1 ]
749
+ part = data[0, 65526]
750
+ # puts "add h_traffic #{src_id} #{part.bytesize}" if @is_debug
751
+ msg = "#{@h_traffic}#{[src_id].pack('Q>')}#{part}"
752
+ chunks << pack_a_chunk(msg)
753
+ data = data[part.bytesize..-1]
757
754
  break if data.empty?
758
755
  end
759
756
 
760
757
  chunks
761
758
  end
762
759
 
763
- def read_dns( dns )
760
+ def read_dns(dns)
764
761
  begin
765
762
  data, addrinfo, rflags, *controls = dns.recvmsg
766
763
  rescue Exception => e
767
- puts "dns recvmsg #{ e.class }"
768
- close_dns( dns )
764
+ puts "dns recvmsg #{e.class}"
765
+ close_dns(dns)
769
766
  return
770
767
  end
771
768
 
772
769
  return if data.empty?
773
770
 
774
771
  begin
775
- ip = seek_ip( data )
772
+ ip = seek_ip(data)
776
773
  rescue Exception => e
777
- puts "seek ip #{ e.class } #{ e.message }"
778
- close_dns( dns )
774
+ puts "seek ip #{e.class} #{e.message}"
775
+ close_dns(dns)
779
776
  return
780
777
  end
781
778
 
782
- dns_info = @dns_infos[ dns ]
783
- domain = dns_info[ :domain ]
779
+ dns_info = @dns_infos[dns]
780
+ domain = dns_info[:domain]
784
781
 
785
- if ip then
786
- port = dns_info[ :port ]
787
- src_id = dns_info[ :src_id ]
788
- proxy = dns_info[ :proxy ]
789
- im = dns_info[ :im ]
790
- puts "got ip #{ im } #{ domain } #{ ip }" if @is_debug
791
- new_a_dst( domain, ip, port, src_id, proxy )
792
- @resolv_caches[ domain ] = [ ip, Time.new, im ]
782
+ if ip
783
+ port = dns_info[:port]
784
+ src_id = dns_info[:src_id]
785
+ proxy = dns_info[:proxy]
786
+ im = dns_info[:im]
787
+ puts "got ip #{im} #{domain} #{ip}" if @is_debug
788
+ new_a_dst(domain, ip, port, src_id, proxy)
789
+ @resolv_caches[domain] = [ip, Time.new, im]
793
790
  else
794
- puts "no ip in answer #{ domain }" if @is_debug
791
+ puts "no ip in answer #{domain}" if @is_debug
795
792
  end
796
793
 
797
- close_dns( dns )
794
+ close_dns(dns)
798
795
  end
799
796
 
800
- def read_dst( dst )
797
+ def read_dst(dst)
801
798
  begin
802
- data = dst.read_nonblock( READ_SIZE )
799
+ data = dst.read_nonblock(READ_SIZE)
803
800
  rescue Errno::ENOTCONN => e
804
801
  return
805
802
  rescue Exception => e
806
- close_dst( dst )
803
+ close_dst(dst)
807
804
  return
808
805
  end
809
806
 
810
- set_update( dst )
811
- dst_info = @dst_infos[ dst ]
812
- proxy = dst_info[ :proxy ]
807
+ set_update(dst)
808
+ dst_info = @dst_infos[dst]
809
+ proxy = dst_info[:proxy]
813
810
 
814
- if proxy.closed? then
815
- close_dst( dst )
811
+ if proxy.closed?
812
+ close_dst(dst)
816
813
  return
817
814
  end
818
815
 
819
- im = dst_info[ :im ]
820
- im_info = @im_infos[ im ]
821
- im_info[ :in ] += data.bytesize if im_info
822
- src_id = dst_info[ :src_id ]
823
- add_proxy_wbuff( proxy, pack_traffic( src_id, data ) )
816
+ im = dst_info[:im]
817
+ im_info = @im_infos[im]
818
+ im_info[:in] += data.bytesize if im_info
819
+ src_id = dst_info[:src_id]
820
+ add_proxy_wbuff(proxy, pack_traffic(src_id, data))
824
821
 
825
- unless proxy.closed? then
826
- proxy_info = @proxy_infos[ proxy ]
827
- bytesize = proxy_info[ :wbuff ].bytesize
822
+ unless proxy.closed?
823
+ proxy_info = @proxy_infos[proxy]
824
+ bytesize = proxy_info[:wbuff].bytesize
828
825
 
829
- if ( bytesize >= WBUFF_LIMIT ) && !proxy_info[ :paused_dsts ].include?( dst ) then
830
- puts "proxy overflow pause dst #{ im } #{ src_id } #{ dst_info[ :domain ] }"
831
- @reads.delete( dst )
832
- proxy_info[ :paused_dsts ] << dst
826
+ if (bytesize >= WBUFF_LIMIT) && !proxy_info[:paused_dsts].include?(dst)
827
+ puts "proxy overflow pause dst #{im} #{src_id} #{dst_info[:domain]}"
828
+ @reads.delete(dst)
829
+ proxy_info[:paused_dsts] << dst
833
830
  end
834
831
  end
835
832
  end
836
833
 
837
- def read_infod( infod )
834
+ def read_infod(infod)
838
835
  begin
839
836
  data, addrinfo, rflags, *controls = infod.recvmsg
840
837
  rescue Exception => e
841
- puts "infod recvmsg #{ e.class }"
838
+ puts "infod recvmsg #{e.class}"
842
839
  return
843
840
  end
844
841
 
845
842
  return if data.empty?
846
843
 
847
844
  begin
848
- msg = JSON.parse( data, symbolize_names: true )
845
+ msg = JSON.parse(data, symbolize_names: true)
849
846
  rescue JSON::ParserError, EncodingError => e
850
- puts "read infod #{ e.class }"
847
+ puts "read infod #{e.class}"
851
848
  return
852
849
  end
853
850
 
854
- message_type = msg[ :message_type ]
851
+ message_type = msg[:message_type]
855
852
 
856
853
  case message_type
857
- when 'heartbeat' then
858
- @proxy_infos.select{ | _, info | info[ :im ] }.each{ | proxy, _ | add_proxy_wbuff( proxy, pack_a_chunk( @h_heartbeat ) ) }
859
- when 'reset-traffic' then
854
+ when 'heartbeat'
855
+ @proxy_infos.select{|_, info| info[:im]}.each{|proxy, _| add_proxy_wbuff(proxy, pack_a_chunk(@h_heartbeat))}
856
+ when 'reset-traffic'
860
857
  puts "reset traffic"
861
- @im_infos.each{ | _, info | info[ :in ] = info[ :out ] = 0 }
858
+ @im_infos.each{|_, info| info[:in] = info[:out] = 0}
862
859
  end
863
860
  end
864
861
 
865
- def read_mem( mem )
862
+ def read_mem(mem)
866
863
  begin
867
- mem.read_nonblock( READ_SIZE )
864
+ mem.read_nonblock(READ_SIZE)
868
865
  rescue Errno::ENOTCONN => e
869
866
  return
870
867
  rescue Exception => e
871
- close_mem( mem )
868
+ close_mem(mem)
872
869
  return
873
870
  end
874
871
 
875
- set_update( mem )
872
+ set_update(mem)
876
873
  im_arr = []
877
874
 
878
- @im_infos.select{ | _, info | info[ :addrinfo ] }.sort.each do | im, info |
875
+ @im_infos.select{|_, info| info[:addrinfo]}.sort.each do |im, info|
879
876
  im_arr << {
880
877
  im: im,
881
- addrinfo: info[ :addrinfo ].ip_unpack,
882
- in: info[ :in ],
883
- out: info[ :out ],
884
- p2d_host: info[ :p2d_host ],
885
- p2d_port: info[ :p2d_port ]
878
+ addrinfo: info[:addrinfo].ip_unpack,
879
+ in: info[:in],
880
+ out: info[:out],
881
+ p2d_host: info[:p2d_host],
882
+ p2d_port: info[:p2d_port]
886
883
  }
887
884
  end
888
885
 
@@ -908,16 +905,16 @@ module Girl
908
905
  im_arr: im_arr
909
906
  }
910
907
 
911
- add_mem_wbuff( mem, JSON.generate( msg ) )
908
+ add_mem_wbuff(mem, JSON.generate(msg))
912
909
  end
913
910
 
914
- def read_memd( memd )
911
+ def read_memd(memd)
915
912
  check_expire_mems
916
913
 
917
914
  begin
918
915
  mem, addrinfo = memd.accept_nonblock
919
916
  rescue Exception => e
920
- puts "memd accept #{ e.class }"
917
+ puts "memd accept #{e.class}"
921
918
  return
922
919
  end
923
920
 
@@ -925,60 +922,60 @@ module Girl
925
922
  wbuff: ''
926
923
  }
927
924
 
928
- @mem_infos[ mem ] = mem_info
929
- add_read( mem, :mem )
925
+ @mem_infos[mem] = mem_info
926
+ add_read(mem, :mem)
930
927
  end
931
928
 
932
- def read_p2( p2 )
929
+ def read_p2(p2)
933
930
  begin
934
- data = p2.read_nonblock( READ_SIZE )
931
+ data = p2.read_nonblock(READ_SIZE)
935
932
  rescue Errno::ENOTCONN => e
936
933
  return
937
934
  rescue Exception => e
938
- close_p2( p2 )
935
+ close_p2(p2)
939
936
  return
940
937
  end
941
938
 
942
- set_update( p2 )
943
- p2_info = @p2_infos[ p2 ]
944
- im = p2_info[ :im ]
945
- # puts "read p2 #{ im } #{ data.bytesize }" if @is_debug
946
- im_info = @im_infos[ im ]
939
+ set_update(p2)
940
+ p2_info = @p2_infos[p2]
941
+ im = p2_info[:im]
942
+ # puts "read p2 #{im} #{data.bytesize}" if @is_debug
943
+ im_info = @im_infos[im]
947
944
 
948
- unless im_info then
949
- close_p2( p2 )
945
+ unless im_info
946
+ close_p2(p2)
950
947
  return
951
948
  end
952
949
 
953
- proxy = im_info[ :proxy ]
954
- p2_id = p2_info[ :p2_id ]
955
- add_proxy_wbuff( proxy, pack_p2_traffic( p2_id, data ) )
950
+ proxy = im_info[:proxy]
951
+ p2_id = p2_info[:p2_id]
952
+ add_proxy_wbuff(proxy, pack_p2_traffic(p2_id, data))
956
953
 
957
- unless proxy.closed? then
958
- proxy_info = @proxy_infos[ proxy ]
959
- bytesize = proxy_info[ :wbuff ].bytesize
954
+ unless proxy.closed?
955
+ proxy_info = @proxy_infos[proxy]
956
+ bytesize = proxy_info[:wbuff].bytesize
960
957
 
961
- if ( bytesize >= WBUFF_LIMIT ) && !proxy_info[ :paused_p2s ].include?( p2 ) then
962
- puts "proxy overflow pause p2 #{ im } #{ p2_id }"
963
- @reads.delete( p2 )
964
- proxy_info[ :paused_p2s ] << p2
958
+ if (bytesize >= WBUFF_LIMIT) && !proxy_info[:paused_p2s].include?(p2)
959
+ puts "proxy overflow pause p2 #{im} #{p2_id}"
960
+ @reads.delete(p2)
961
+ proxy_info[:paused_p2s] << p2
965
962
  end
966
963
  end
967
964
  end
968
965
 
969
- def read_p2d( p2d )
966
+ def read_p2d(p2d)
970
967
  check_expire_p2s
971
968
 
972
969
  begin
973
970
  p2, addrinfo = p2d.accept_nonblock
974
971
  rescue Exception => e
975
- puts "p2d accept #{ e.class }"
972
+ puts "p2d accept #{e.class}"
976
973
  return
977
974
  end
978
975
 
979
- p2d_info = @p2d_infos[ p2d ]
980
- im = p2d_info[ :im ]
981
- p2_id = rand( ( 2 ** 64 ) - 2 ) + 1
976
+ p2d_info = @p2d_infos[p2d]
977
+ im = p2d_info[:im]
978
+ p2_id = rand((2 ** 64) - 2) + 1
982
979
 
983
980
  p2_info = {
984
981
  addrinfo: addrinfo,
@@ -989,114 +986,114 @@ module Girl
989
986
  wbuff: ''
990
987
  }
991
988
 
992
- @p2_infos[ p2 ] = p2_info
993
- add_read( p2, :p2 )
994
- im_info = @im_infos[ im ]
989
+ @p2_infos[p2] = p2_info
990
+ add_read(p2, :p2)
991
+ im_info = @im_infos[im]
995
992
  return unless im_info
996
- proxy = im_info[ :proxy ]
997
- puts "add h_a_new_p2 #{ im } #{ p2_id }"
998
- msg = "#{ @h_a_new_p2 }#{ [ p2_id ].pack( 'Q>' ) }"
999
- add_proxy_wbuff( proxy, pack_a_chunk( msg ) )
993
+ proxy = im_info[:proxy]
994
+ puts "add h_a_new_p2 #{im} #{p2_id}"
995
+ msg = "#{@h_a_new_p2}#{[p2_id].pack('Q>')}"
996
+ add_proxy_wbuff(proxy, pack_a_chunk(msg))
1000
997
  end
1001
998
 
1002
- def read_rsv( rsv )
999
+ def read_rsv(rsv)
1003
1000
  begin
1004
1001
  data, addrinfo, rflags, *controls = rsv.recvmsg
1005
1002
  rescue Exception => e
1006
- puts "rsv recvmsg #{ e.class }"
1007
- close_rsv( rsv )
1003
+ puts "rsv recvmsg #{e.class}"
1004
+ close_rsv(rsv)
1008
1005
  return
1009
1006
  end
1010
1007
 
1011
1008
  return if data.empty?
1012
1009
 
1013
- if data.bytesize <= 65526 then
1014
- rsv_info = @rsv_infos[ rsv ]
1015
- proxy = rsv_info[ :proxy ]
1016
- near_id = rsv_info[ :near_id ]
1017
- puts "add h_response #{ rsv_info[ :im ] } #{ near_id } #{ rsv_info[ :domain ] } #{ data.bytesize }" if @is_debug
1018
- msg = "#{ @h_response }#{ [ near_id ].pack( 'Q>' ) }#{ data }"
1019
- add_proxy_wbuff( proxy, pack_a_chunk( msg ) )
1010
+ if data.bytesize <= 65526
1011
+ rsv_info = @rsv_infos[rsv]
1012
+ proxy = rsv_info[:proxy]
1013
+ near_id = rsv_info[:near_id]
1014
+ puts "add h_response #{rsv_info[:im]} #{near_id} #{rsv_info[:domain]} #{data.bytesize}" if @is_debug
1015
+ msg = "#{@h_response}#{[near_id].pack('Q>')}#{data}"
1016
+ add_proxy_wbuff(proxy, pack_a_chunk(msg))
1020
1017
  else
1021
- puts "response too big? #{ data.bytesize }"
1018
+ puts "response too big? #{data.bytesize}"
1022
1019
  end
1023
1020
 
1024
- close_rsv( rsv )
1021
+ close_rsv(rsv)
1025
1022
  end
1026
1023
 
1027
- def read_proxy( proxy )
1024
+ def read_proxy(proxy)
1028
1025
  begin
1029
- data = proxy.read_nonblock( READ_SIZE )
1026
+ data = proxy.read_nonblock(READ_SIZE)
1030
1027
  rescue Errno::ENOTCONN => e
1031
1028
  return
1032
1029
  rescue Exception => e
1033
- close_proxy( proxy )
1030
+ close_proxy(proxy)
1034
1031
  return
1035
1032
  end
1036
1033
 
1037
- set_update( proxy )
1038
- proxy_info = @proxy_infos[ proxy ]
1039
- im = proxy_info[ :im ]
1040
- data = "#{ proxy_info[ :rbuff ] }#{ data }"
1034
+ set_update(proxy)
1035
+ proxy_info = @proxy_infos[proxy]
1036
+ im = proxy_info[:im]
1037
+ data = "#{proxy_info[:rbuff]}#{data}"
1041
1038
 
1042
- unless im then
1043
- if data.bytesize < @head_len + 1 then
1044
- proxy_info[ :rbuff ] = data
1039
+ unless im
1040
+ if data.bytesize < @head_len + 1
1041
+ proxy_info[:rbuff] = data
1045
1042
  return
1046
1043
  end
1047
1044
 
1048
- len = data[ @head_len ].unpack( 'C' ).first
1045
+ len = data[@head_len].unpack('C').first
1049
1046
 
1050
- if len == 0 then
1047
+ if len == 0
1051
1048
  puts "im zero len?"
1052
1049
  return
1053
1050
  end
1054
1051
 
1055
- if data.bytesize < @head_len + 1 + len then
1056
- proxy_info[ :rbuff ] = data
1052
+ if data.bytesize < @head_len + 1 + len
1053
+ proxy_info[:rbuff] = data
1057
1054
  return
1058
1055
  end
1059
1056
 
1060
- im = data[ @head_len + 1, len ]
1057
+ im = data[@head_len + 1, len]
1061
1058
 
1062
- if @im_infos.any? && !@im_infos.include?( im ) then
1063
- puts "unknown im #{ im.inspect }"
1059
+ if @im_infos.any? && !@im_infos.include?(im)
1060
+ puts "unknown im #{im.inspect}"
1064
1061
  return
1065
1062
  end
1066
1063
 
1067
- puts "got im #{ im }"
1068
- proxy_info[ :im ] = im
1069
- im_info = @im_infos[ im ]
1064
+ puts "got im #{im}"
1065
+ proxy_info[:im] = im
1066
+ im_info = @im_infos[im]
1070
1067
 
1071
- if im_info then
1072
- im_info[ :proxy ] = proxy
1073
- im_info[ :addrinfo ] = proxy_info[ :addrinfo ]
1074
- im_info[ :p2d ] = new_a_p2d( im_info[ :p2d_host ], im_info[ :p2d_port ], im, proxy ) unless im_info[ :p2d ]
1068
+ if im_info
1069
+ im_info[:proxy] = proxy
1070
+ im_info[:addrinfo] = proxy_info[:addrinfo]
1071
+ im_info[:p2d] = new_a_p2d(im_info[:p2d_host], im_info[:p2d_port], im, proxy) unless im_info[:p2d]
1075
1072
  end
1076
1073
 
1077
- add_proxy_wbuff( proxy, pack_a_chunk( @h_heartbeat ) )
1078
- data = data[ ( @head_len + 1 + len )..-1 ]
1074
+ add_proxy_wbuff(proxy, pack_a_chunk(@h_heartbeat))
1075
+ data = data[(@head_len + 1 + len)..-1]
1079
1076
  return if data.empty?
1080
1077
  end
1081
1078
 
1082
- im_info = @im_infos[ im ]
1083
- im_info[ :in ] += data.bytesize if im_info
1084
- msgs, part = decode_to_msgs( data )
1085
- msgs.each{ | msg | deal_msg( msg, proxy ) }
1086
- proxy_info[ :rbuff ] = part
1079
+ im_info = @im_infos[im]
1080
+ im_info[:in] += data.bytesize if im_info
1081
+ msgs, part = decode_to_msgs(data)
1082
+ msgs.each{|msg| deal_msg(msg, proxy)}
1083
+ proxy_info[:rbuff] = part
1087
1084
  end
1088
1085
 
1089
- def read_proxyd( proxyd )
1086
+ def read_proxyd(proxyd)
1090
1087
  check_expire_proxies
1091
1088
 
1092
1089
  begin
1093
1090
  proxy, addrinfo = proxyd.accept_nonblock
1094
1091
  rescue Exception => e
1095
- puts "accept a proxy #{ e.class }"
1092
+ puts "accept a proxy #{e.class}"
1096
1093
  return
1097
1094
  end
1098
1095
 
1099
- puts "accept a proxy #{ addrinfo.ip_unpack.inspect }"
1096
+ puts "accept a proxy #{addrinfo.ip_unpack.inspect}"
1100
1097
 
1101
1098
  proxy_info = {
1102
1099
  addrinfo: addrinfo,
@@ -1104,61 +1101,61 @@ module Girl
1104
1101
  paused_dsts: [],
1105
1102
  paused_p2s: [],
1106
1103
  rbuff: '',
1107
- src_infos: {}, # src_id => { :created_at :dst :rbuff }
1104
+ src_infos: {}, # src_id => {:created_at :dst :rbuff}
1108
1105
  wbuff: ''
1109
1106
  }
1110
1107
 
1111
- @proxy_infos[ proxy ] = proxy_info
1112
- add_read( proxy, :proxy )
1108
+ @proxy_infos[proxy] = proxy_info
1109
+ add_read(proxy, :proxy)
1113
1110
  end
1114
1111
 
1115
- def resolve_domain_port( domain_port, src_id, proxy, im )
1112
+ def resolve_domain_port(domain_port, src_id, proxy, im)
1116
1113
  return if domain_port.nil? || domain_port.empty?
1117
- colon_idx = domain_port.rindex( ':' )
1114
+ colon_idx = domain_port.rindex(':')
1118
1115
  return unless colon_idx
1119
1116
 
1120
- domain = domain_port[ 0...colon_idx ]
1121
- port = domain_port[ ( colon_idx + 1 )..-1 ].to_i
1117
+ domain = domain_port[0...colon_idx]
1118
+ port = domain_port[(colon_idx + 1)..-1].to_i
1122
1119
 
1123
- if ( domain !~ /^(?=^.{3,255}$)[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+$/ ) || ( domain =~ /^((0\.\d{1,3}\.\d{1,3}\.\d{1,3})|(10\.\d{1,3}\.\d{1,3}\.\d{1,3})|(127\.\d{1,3}\.\d{1,3}\.\d{1,3})|(169\.254\.\d{1,3}\.\d{1,3})|(172\.((1[6-9])|(2\d)|(3[01]))\.\d{1,3}\.\d{1,3})|(192\.168\.\d{1,3}\.\d{1,3})|(255\.255\.255\.255)|(localhost))$/ ) then
1120
+ if (domain !~ /^(?=^.{3,255}$)[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+$/) || (domain =~ /^((0\.\d{1,3}\.\d{1,3}\.\d{1,3})|(10\.\d{1,3}\.\d{1,3}\.\d{1,3})|(127\.\d{1,3}\.\d{1,3}\.\d{1,3})|(169\.254\.\d{1,3}\.\d{1,3})|(172\.((1[6-9])|(2\d)|(3[01]))\.\d{1,3}\.\d{1,3})|(192\.168\.\d{1,3}\.\d{1,3})|(255\.255\.255\.255)|(localhost))$/)
1124
1121
  # 忽略非法域名,内网地址
1125
- puts "ignore #{ domain }"
1122
+ puts "ignore #{domain}"
1126
1123
  return
1127
1124
  end
1128
1125
 
1129
- if domain =~ /^\d{1,3}\.\d{1,3}\.\d{1,3}.\d{1,3}$/ then
1126
+ if domain =~ /^\d{1,3}\.\d{1,3}\.\d{1,3}.\d{1,3}$/
1130
1127
  # ipv4
1131
- new_a_dst( domain, domain, port, src_id, proxy )
1128
+ new_a_dst(domain, domain, port, src_id, proxy)
1132
1129
  return
1133
1130
  end
1134
1131
 
1135
- resolv_cache = @resolv_caches[ domain ]
1132
+ resolv_cache = @resolv_caches[domain]
1136
1133
 
1137
- if resolv_cache then
1134
+ if resolv_cache
1138
1135
  ip, created_at, im = resolv_cache
1139
1136
 
1140
- if Time.new - created_at < @expire_resolv_cache then
1141
- new_a_dst( domain, ip, port, src_id, proxy )
1137
+ if Time.new - created_at < @expire_resolv_cache
1138
+ new_a_dst(domain, ip, port, src_id, proxy)
1142
1139
  return
1143
1140
  end
1144
1141
 
1145
- @resolv_caches.delete( domain )
1142
+ @resolv_caches.delete(domain)
1146
1143
  end
1147
1144
 
1148
1145
  begin
1149
- data = pack_a_query( domain )
1146
+ data = pack_a_query(domain)
1150
1147
  rescue Exception => e
1151
- puts "dns pack a query #{ e.class } #{ e.message } #{ domain }" if @is_debug
1148
+ puts "dns pack a query #{e.class} #{e.message} #{domain}" if @is_debug
1152
1149
  return
1153
1150
  end
1154
1151
 
1155
1152
  check_expire_dnses
1156
- dns = Socket.new( Socket::AF_INET, Socket::SOCK_DGRAM, 0 )
1153
+ dns = Socket.new(Socket::AF_INET, Socket::SOCK_DGRAM, 0)
1157
1154
 
1158
1155
  begin
1159
- @nameserver_addrs.each{ | addr | dns.sendmsg( data, 0, addr ) }
1156
+ @nameserver_addrs.each{|addr| dns.sendmsg(data, 0, addr)}
1160
1157
  rescue Exception => e
1161
- puts "dns send data #{ e.class } #{ domain }"
1158
+ puts "dns send data #{e.class} #{domain}"
1162
1159
  dns.close
1163
1160
  return
1164
1161
  end
@@ -1171,60 +1168,60 @@ module Girl
1171
1168
  src_id: src_id
1172
1169
  }
1173
1170
 
1174
- @dns_infos[ dns ] = dns_info
1175
- add_read( dns, :dns )
1171
+ @dns_infos[dns] = dns_info
1172
+ add_read(dns, :dns)
1176
1173
  end
1177
1174
 
1178
- def send_data( sock, data, target_addr )
1175
+ def send_data(sock, data, target_addr)
1179
1176
  begin
1180
- sock.sendmsg( data, 0, target_addr )
1177
+ sock.sendmsg(data, 0, target_addr)
1181
1178
  rescue Exception => e
1182
- puts "sendmsg #{ e.class }"
1179
+ puts "sendmsg #{e.class}"
1183
1180
  end
1184
1181
  end
1185
1182
 
1186
- def set_dst_closing( dst )
1183
+ def set_dst_closing(dst)
1187
1184
  return if dst.nil? || dst.closed?
1188
- dst_info = @dst_infos[ dst ]
1189
- return if dst_info.nil? || dst_info[ :closing ]
1190
- dst_info[ :closing ] = true
1191
- add_write( dst )
1185
+ dst_info = @dst_infos[dst]
1186
+ return if dst_info.nil? || dst_info[:closing]
1187
+ dst_info[:closing] = true
1188
+ add_write(dst)
1192
1189
  end
1193
1190
 
1194
- def set_p2_closing( p2 )
1191
+ def set_p2_closing(p2)
1195
1192
  return if p2.nil? || p2.closed?
1196
- p2_info = @p2_infos[ p2 ]
1197
- return if p2_info.nil? || p2_info[ :closing ]
1198
- p2_info[ :closing ] = true
1199
- add_write( p2 )
1193
+ p2_info = @p2_infos[p2]
1194
+ return if p2_info.nil? || p2_info[:closing]
1195
+ p2_info[:closing] = true
1196
+ add_write(p2)
1200
1197
  end
1201
1198
 
1202
- def set_update( sock )
1203
- @updates[ sock ] = Time.new
1199
+ def set_update(sock)
1200
+ @updates[sock] = Time.new
1204
1201
 
1205
- if @updates_limit - @updates.size <= 20 then
1206
- puts "updates #{ @updates.size }"
1202
+ if @updates_limit - @updates.size <= 20
1203
+ puts "updates #{@updates.size}"
1207
1204
  end
1208
1205
 
1209
- if @updates.size >= @updates_limit then
1206
+ if @updates.size >= @updates_limit
1210
1207
  puts "eliminate updates"
1211
1208
 
1212
- @updates.keys.each do | _sock |
1213
- case @roles[ _sock ]
1209
+ @updates.keys.each do |_sock|
1210
+ case @roles[_sock]
1214
1211
  when :dns
1215
- close_dns( _sock )
1212
+ close_dns(_sock)
1216
1213
  when :dst
1217
- close_dst( _sock )
1214
+ close_dst(_sock)
1218
1215
  when :mem
1219
- close_mem( _sock )
1216
+ close_mem(_sock)
1220
1217
  when :p2
1221
- close_p2( _sock )
1218
+ close_p2(_sock)
1222
1219
  when :proxy
1223
- close_proxy( _sock )
1220
+ close_proxy(_sock)
1224
1221
  when :rsv
1225
- close_rsv( _sock )
1222
+ close_rsv(_sock)
1226
1223
  else
1227
- close_sock( _sock )
1224
+ close_sock(_sock)
1228
1225
  end
1229
1226
  end
1230
1227
 
@@ -1232,175 +1229,175 @@ module Girl
1232
1229
  end
1233
1230
  end
1234
1231
 
1235
- def write_dst( dst )
1236
- if dst.closed? then
1232
+ def write_dst(dst)
1233
+ if dst.closed?
1237
1234
  puts "write closed dst?"
1238
1235
  return
1239
1236
  end
1240
1237
 
1241
- dst_info = @dst_infos[ dst ]
1242
- dst_info[ :connected ] = true
1243
- data = dst_info[ :wbuff ]
1238
+ dst_info = @dst_infos[dst]
1239
+ dst_info[:connected] = true
1240
+ data = dst_info[:wbuff]
1244
1241
 
1245
- if data.empty? then
1246
- if dst_info[ :closing ] then
1247
- close_dst( dst )
1242
+ if data.empty?
1243
+ if dst_info[:closing]
1244
+ close_dst(dst)
1248
1245
  else
1249
- @writes.delete( dst )
1246
+ @writes.delete(dst)
1250
1247
  end
1251
1248
 
1252
1249
  return
1253
1250
  end
1254
1251
 
1255
1252
  begin
1256
- written = dst.write_nonblock( data )
1253
+ written = dst.write_nonblock(data)
1257
1254
  rescue Errno::EINPROGRESS
1258
1255
  return
1259
1256
  rescue Exception => e
1260
- close_dst( dst )
1257
+ close_dst(dst)
1261
1258
  return
1262
1259
  end
1263
1260
 
1264
- set_update( dst )
1265
- im = dst_info[ :im ]
1266
- im_info = @im_infos[ im ]
1267
- im_info[ :out ] += written if im_info
1268
- data = data[ written..-1 ]
1269
- dst_info[ :wbuff ] = data
1270
- bytesize = dst_info[ :wbuff ].bytesize
1261
+ set_update(dst)
1262
+ im = dst_info[:im]
1263
+ im_info = @im_infos[im]
1264
+ im_info[:out] += written if im_info
1265
+ data = data[written..-1]
1266
+ dst_info[:wbuff] = data
1267
+ bytesize = dst_info[:wbuff].bytesize
1271
1268
 
1272
- if dst_info[ :overflowing ] && ( bytesize < RESUME_BELOW ) then
1273
- proxy = dst_info[ :proxy ]
1274
- src_id = dst_info[ :src_id ]
1275
- puts "add h_dst_underhalf #{ im } #{ src_id } #{ dst_info[ :domain ] }"
1276
- msg = "#{ @h_dst_underhalf }#{ [ src_id ].pack( 'Q>' ) }"
1277
- add_proxy_wbuff( proxy, pack_a_chunk( msg ) )
1278
- dst_info[ :overflowing ] = false
1269
+ if dst_info[:overflowing] && (bytesize < RESUME_BELOW)
1270
+ proxy = dst_info[:proxy]
1271
+ src_id = dst_info[:src_id]
1272
+ puts "add h_dst_underhalf #{im} #{src_id} #{dst_info[:domain]}"
1273
+ msg = "#{@h_dst_underhalf}#{[src_id].pack('Q>')}"
1274
+ add_proxy_wbuff(proxy, pack_a_chunk(msg))
1275
+ dst_info[:overflowing] = false
1279
1276
  end
1280
1277
  end
1281
1278
 
1282
- def write_mem( mem )
1283
- if mem.closed? then
1279
+ def write_mem(mem)
1280
+ if mem.closed?
1284
1281
  puts "write closed mem?"
1285
1282
  return
1286
1283
  end
1287
1284
 
1288
- mem_info = @mem_infos[ mem ]
1289
- data = mem_info[ :wbuff ]
1285
+ mem_info = @mem_infos[mem]
1286
+ data = mem_info[:wbuff]
1290
1287
 
1291
- if data.empty? then
1292
- @writes.delete( mem )
1293
- close_mem( mem )
1288
+ if data.empty?
1289
+ @writes.delete(mem)
1290
+ close_mem(mem)
1294
1291
  return
1295
1292
  end
1296
1293
 
1297
1294
  begin
1298
- written = mem.write_nonblock( data )
1295
+ written = mem.write_nonblock(data)
1299
1296
  rescue Errno::EINPROGRESS
1300
1297
  return
1301
1298
  rescue Exception => e
1302
- close_mem( mem )
1299
+ close_mem(mem)
1303
1300
  return
1304
1301
  end
1305
1302
 
1306
- set_update( mem )
1307
- data = data[ written..-1 ]
1308
- mem_info[ :wbuff ] = data
1303
+ set_update(mem)
1304
+ data = data[written..-1]
1305
+ mem_info[:wbuff] = data
1309
1306
  end
1310
1307
 
1311
- def write_p2( p2 )
1312
- if p2.closed? then
1308
+ def write_p2(p2)
1309
+ if p2.closed?
1313
1310
  puts "write closed p2?"
1314
1311
  return
1315
1312
  end
1316
1313
 
1317
- p2_info = @p2_infos[ p2 ]
1318
- im = p2_info[ :im ]
1319
- im_info = @im_infos[ im ]
1314
+ p2_info = @p2_infos[p2]
1315
+ im = p2_info[:im]
1316
+ im_info = @im_infos[im]
1320
1317
 
1321
- unless im_info then
1322
- close_p2( p2 )
1318
+ unless im_info
1319
+ close_p2(p2)
1323
1320
  return
1324
1321
  end
1325
1322
 
1326
- data = p2_info[ :wbuff ]
1323
+ data = p2_info[:wbuff]
1327
1324
 
1328
- if data.empty? then
1329
- if p2_info[ :closing ] then
1330
- close_p2( p2 )
1325
+ if data.empty?
1326
+ if p2_info[:closing]
1327
+ close_p2(p2)
1331
1328
  else
1332
- @writes.delete( p2 )
1329
+ @writes.delete(p2)
1333
1330
  end
1334
1331
 
1335
1332
  return
1336
1333
  end
1337
1334
 
1338
1335
  begin
1339
- written = p2.write_nonblock( data )
1336
+ written = p2.write_nonblock(data)
1340
1337
  rescue Errno::EINPROGRESS
1341
1338
  return
1342
1339
  rescue Exception => e
1343
- close_p2( p2 )
1340
+ close_p2(p2)
1344
1341
  return
1345
1342
  end
1346
1343
 
1347
- set_update( p2 )
1348
- data = data[ written..-1 ]
1349
- p2_info[ :wbuff ] = data
1350
- bytesize = p2_info[ :wbuff ].bytesize
1344
+ set_update(p2)
1345
+ data = data[written..-1]
1346
+ p2_info[:wbuff] = data
1347
+ bytesize = p2_info[:wbuff].bytesize
1351
1348
 
1352
- if p2_info[ :overflowing ] && ( bytesize < RESUME_BELOW ) then
1353
- proxy = im_info[ :proxy ]
1354
- p2_id = p2_info[ :p2_id ]
1355
- puts "add h_p2_underhalf #{ im } #{ p2_id }"
1356
- msg = "#{ @h_p2_underhalf }#{ [ p2_id ].pack( 'Q>' ) }"
1357
- add_proxy_wbuff( proxy, pack_a_chunk( msg ) )
1358
- p2_info[ :overflowing ] = false
1349
+ if p2_info[:overflowing] && (bytesize < RESUME_BELOW)
1350
+ proxy = im_info[:proxy]
1351
+ p2_id = p2_info[:p2_id]
1352
+ puts "add h_p2_underhalf #{im} #{p2_id}"
1353
+ msg = "#{@h_p2_underhalf}#{[p2_id].pack('Q>')}"
1354
+ add_proxy_wbuff(proxy, pack_a_chunk(msg))
1355
+ p2_info[:overflowing] = false
1359
1356
  end
1360
1357
  end
1361
1358
 
1362
- def write_proxy( proxy )
1363
- if proxy.closed? then
1359
+ def write_proxy(proxy)
1360
+ if proxy.closed?
1364
1361
  puts "write closed proxy?"
1365
1362
  return
1366
1363
  end
1367
1364
 
1368
- proxy_info = @proxy_infos[ proxy ]
1369
- data = proxy_info[ :wbuff ]
1365
+ proxy_info = @proxy_infos[proxy]
1366
+ data = proxy_info[:wbuff]
1370
1367
 
1371
- if data.empty? then
1372
- @writes.delete( proxy )
1368
+ if data.empty?
1369
+ @writes.delete(proxy)
1373
1370
  return
1374
1371
  end
1375
1372
 
1376
1373
  begin
1377
- written = proxy.write_nonblock( data )
1374
+ written = proxy.write_nonblock(data)
1378
1375
  rescue Errno::EINPROGRESS
1379
1376
  return
1380
1377
  rescue Exception => e
1381
- close_proxy( proxy )
1378
+ close_proxy(proxy)
1382
1379
  return
1383
1380
  end
1384
1381
 
1385
- set_update( proxy )
1386
- im = proxy_info[ :im ]
1387
- im_info = @im_infos[ im ]
1388
- im_info[ :out ] += written if im_info
1389
- data = data[ written..-1 ]
1390
- proxy_info[ :wbuff ] = data
1391
- bytesize = proxy_info[ :wbuff ].bytesize
1382
+ set_update(proxy)
1383
+ im = proxy_info[:im]
1384
+ im_info = @im_infos[im]
1385
+ im_info[:out] += written if im_info
1386
+ data = data[written..-1]
1387
+ proxy_info[:wbuff] = data
1388
+ bytesize = proxy_info[:wbuff].bytesize
1392
1389
 
1393
- if bytesize < RESUME_BELOW then
1394
- if proxy_info[ :paused_dsts ].any? then
1395
- puts "proxy underhalf resume dsts #{ im } #{ proxy_info[ :paused_dsts ].size }"
1396
- proxy_info[ :paused_dsts ].each{ | dst | add_read( dst ) }
1397
- proxy_info[ :paused_dsts ].clear
1390
+ if bytesize < RESUME_BELOW
1391
+ if proxy_info[:paused_dsts].any?
1392
+ puts "proxy underhalf resume dsts #{im} #{proxy_info[:paused_dsts].size}"
1393
+ proxy_info[:paused_dsts].each{|dst| add_read(dst)}
1394
+ proxy_info[:paused_dsts].clear
1398
1395
  end
1399
1396
 
1400
- if proxy_info[ :paused_p2s ].any? then
1401
- puts "proxy underhalf resume p2s #{ im } #{ proxy_info[ :paused_p2s ].size }"
1402
- proxy_info[ :paused_p2s ].each{ | p2 | add_read( p2 ) }
1403
- proxy_info[ :paused_p2s ].clear
1397
+ if proxy_info[:paused_p2s].any?
1398
+ puts "proxy underhalf resume p2s #{im} #{proxy_info[:paused_p2s].size}"
1399
+ proxy_info[:paused_p2s].each{|p2| add_read(p2)}
1400
+ proxy_info[:paused_p2s].clear
1404
1401
  end
1405
1402
  end
1406
1403
  end