bayserver-core 3.0.2 → 3.3.1

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.
Files changed (76) hide show
  1. checksums.yaml +4 -4
  2. data/lib/baykit/bayserver/agent/command_receiver.rb +2 -0
  3. data/lib/baykit/bayserver/agent/grand_agent.rb +145 -133
  4. data/lib/baykit/bayserver/agent/letters/accepted_letter.rb +17 -0
  5. data/lib/baykit/bayserver/agent/letters/closed_letter.rb +14 -0
  6. data/lib/baykit/bayserver/agent/letters/connected_letter.rb +14 -0
  7. data/lib/baykit/bayserver/agent/letters/error_letter.rb +16 -0
  8. data/lib/baykit/bayserver/agent/letters/letter.rb +19 -0
  9. data/lib/baykit/bayserver/agent/letters/package.rb +9 -0
  10. data/lib/baykit/bayserver/agent/letters/read_letter.rb +20 -0
  11. data/lib/baykit/bayserver/agent/letters/wrote_letter.rb +17 -0
  12. data/lib/baykit/bayserver/agent/monitor/grand_agent_monitor.rb +49 -49
  13. data/lib/baykit/bayserver/agent/multiplexer/job_multiplexer.rb +47 -32
  14. data/lib/baykit/bayserver/agent/multiplexer/job_multiplexer_base.rb +5 -0
  15. data/lib/baykit/bayserver/agent/multiplexer/multiplexer_base.rb +12 -28
  16. data/lib/baykit/bayserver/agent/multiplexer/plain_transporter.rb +20 -5
  17. data/lib/baykit/bayserver/agent/multiplexer/spider_multiplexer.rb +125 -87
  18. data/lib/baykit/bayserver/agent/multiplexer/spin_multiplexer.rb +24 -19
  19. data/lib/baykit/bayserver/agent/multiplexer/taxi_multiplexer.rb +21 -15
  20. data/lib/baykit/bayserver/bay_log.rb +20 -16
  21. data/lib/baykit/bayserver/bayserver.rb +8 -15
  22. data/lib/baykit/bayserver/common/cities.rb +1 -1
  23. data/lib/baykit/bayserver/common/inbound_ship.rb +5 -45
  24. data/lib/baykit/bayserver/common/inbound_ship_store.rb +0 -1
  25. data/lib/baykit/bayserver/common/multiplexer.rb +5 -1
  26. data/lib/baykit/bayserver/{agent/multiplexer → common}/rudder_state.rb +42 -11
  27. data/lib/baykit/bayserver/common/rudder_state_store.rb +63 -0
  28. data/lib/baykit/bayserver/{agent/multiplexer → common}/transporter.rb +2 -4
  29. data/lib/baykit/bayserver/common/warp_ship.rb +12 -7
  30. data/lib/baykit/bayserver/{agent/multiplexer → common}/write_unit.rb +2 -4
  31. data/lib/baykit/bayserver/docker/base/inbound_data_listener.rb +0 -1
  32. data/lib/baykit/bayserver/docker/base/port_base.rb +5 -5
  33. data/lib/baykit/bayserver/docker/base/warp_base.rb +7 -4
  34. data/lib/baykit/bayserver/docker/built_in/built_in_city_docker.rb +1 -1
  35. data/lib/baykit/bayserver/docker/built_in/built_in_harbor_docker.rb +25 -2
  36. data/lib/baykit/bayserver/docker/built_in/built_in_log_docker.rb +43 -35
  37. data/lib/baykit/bayserver/docker/harbor.rb +14 -0
  38. data/lib/baykit/bayserver/docker/send_file/file_content.rb +66 -0
  39. data/lib/baykit/bayserver/docker/send_file/file_content_handler.rb +113 -29
  40. data/lib/baykit/bayserver/docker/send_file/file_store.rb +117 -0
  41. data/lib/baykit/bayserver/docker/send_file/send_file_docker.rb +13 -5
  42. data/lib/baykit/bayserver/docker/send_file/send_file_ship.rb +11 -2
  43. data/lib/baykit/bayserver/docker/send_file/wait_file_ship.rb +92 -0
  44. data/lib/baykit/bayserver/mem_usage.rb +2 -0
  45. data/lib/baykit/bayserver/protocol/packet.rb +2 -1
  46. data/lib/baykit/bayserver/protocol/packet_part_accessor.rb +5 -5
  47. data/lib/baykit/bayserver/protocol/protocol_exception.rb +7 -1
  48. data/lib/baykit/bayserver/rudders/io_rudder.rb +2 -2
  49. data/lib/baykit/bayserver/rudders/rudder.rb +4 -0
  50. data/lib/baykit/bayserver/rudders/rudder_base.rb +21 -0
  51. data/lib/baykit/bayserver/tours/req_content_handler.rb +13 -13
  52. data/lib/baykit/bayserver/tours/tour.rb +18 -13
  53. data/lib/baykit/bayserver/tours/tour_req.rb +13 -15
  54. data/lib/baykit/bayserver/tours/tour_res.rb +42 -19
  55. data/lib/baykit/bayserver/util/cgi_util.rb +7 -2
  56. data/lib/baykit/bayserver/util/headers.rb +2 -2
  57. data/lib/baykit/bayserver/util/http_status.rb +7 -0
  58. data/lib/baykit/bayserver/util/http_util.rb +16 -0
  59. data/lib/baykit/bayserver/util/nio_selector.rb +103 -0
  60. data/lib/baykit/bayserver/util/rb_selector.rb +55 -0
  61. data/lib/baykit/bayserver/util/selector.rb +43 -80
  62. data/lib/baykit/bayserver/util/simple_buffer.rb +1 -1
  63. data/lib/baykit/bayserver/version.rb +1 -1
  64. metadata +24 -21
  65. data/lib/baykit/bayserver/agent/accept_handler.rb +0 -71
  66. data/lib/baykit/bayserver/agent/channel_listener.rb +0 -35
  67. data/lib/baykit/bayserver/agent/letter.rb +0 -30
  68. data/lib/baykit/bayserver/agent/transporter/data_listener.rb +0 -38
  69. data/lib/baykit/bayserver/agent/transporter/package.rb +0 -0
  70. data/lib/baykit/bayserver/agent/transporter/spin_read_transporter.rb +0 -111
  71. data/lib/baykit/bayserver/agent/transporter/spin_write_transporter.rb +0 -125
  72. data/lib/baykit/bayserver/agent/transporter/transporter.rb +0 -332
  73. data/lib/baykit/bayserver/docker/built_in/log_boat.rb +0 -71
  74. data/lib/baykit/bayserver/tours/send_file_yacht.rb +0 -97
  75. data/lib/baykit/bayserver/watercraft/boat.rb +0 -43
  76. data/lib/baykit/bayserver/watercraft/yacht.rb +0 -42
@@ -0,0 +1,92 @@
1
+ require 'baykit/bayserver/tours/tour'
2
+ require 'baykit/bayserver/common/read_only_ship'
3
+
4
+ module Baykit
5
+ module BayServer
6
+ module Docker
7
+ module SendFile
8
+ class WaitFileShip < Baykit::BayServer::Common::ReadOnlyShip
9
+
10
+ include Baykit::BayServer::Agent
11
+ include Baykit::BayServer::Tours
12
+
13
+ attr :file_content
14
+ attr :handler
15
+
16
+ attr :tour
17
+ attr :tour_id
18
+ def initialize()
19
+ @file_content = nil
20
+ @handler = nil
21
+ end
22
+
23
+ def init(rd, tp, tur, file_content, handler)
24
+ super(tur.ship.agent_id, rd, tp)
25
+ @tour = tur
26
+ @tour_id = tur.tour_id
27
+ @file_content = file_content
28
+ @handler = handler
29
+ end
30
+
31
+ def to_s
32
+ return "agt#" + @agent_id.to_s + " wait_file#" + @ship_id.to_s + "/" + @object_id.to_s
33
+ end
34
+
35
+ ######################################################
36
+ # Implements Reusable
37
+ ######################################################
38
+
39
+ def reset
40
+ super
41
+ @file_content = nil
42
+ @tour_id = 0
43
+ @tour = nil
44
+ end
45
+
46
+ ######################################################
47
+ # Implements ReadOnlyShip
48
+ ######################################################
49
+
50
+ def notify_read(buf)
51
+
52
+ BayLog.debug("%s file read completed", self)
53
+
54
+ begin
55
+ @handler.send_file_from_cache
56
+ rescue HttpException => e
57
+ begin
58
+ @tour.res.send_error(Tour::TOUR_ID_NOCHECK, e.status, e.message)
59
+ rescue IOError => ex
60
+ notify_error(ex)
61
+ return NextSocketAction::CLOSE
62
+ end
63
+ end
64
+
65
+ return NextSocketAction::CONTINUE
66
+ end
67
+
68
+ def notify_error(e)
69
+ BayLog.debug_e(e, "%s Error notified", self)
70
+ begin
71
+ @tour.res.send_error(@tour_id, HttpStatus.INTERNAL_SERVER_ERROR, null, e)
72
+ rescue IOError => ex
73
+ BayLog.debug_e(ex)
74
+ end
75
+ end
76
+
77
+ def notify_eof()
78
+ raise Sink.new
79
+ end
80
+
81
+ def notify_close
82
+ end
83
+
84
+ def check_timeout(duration_sec)
85
+ return false
86
+ end
87
+
88
+ end
89
+ end
90
+ end
91
+ end
92
+ end
@@ -5,6 +5,7 @@ require 'baykit/bayserver/protocol/protocol_handler_store'
5
5
  require 'baykit/bayserver/protocol/packet_store'
6
6
  require 'baykit/bayserver/tours/tour_store'
7
7
  require 'baykit/bayserver/common/inbound_ship_store'
8
+ require 'baykit/bayserver/common/rudder_state_store'
8
9
  require 'baykit/bayserver/docker/base/warp_base'
9
10
 
10
11
  require 'baykit/bayserver/util/string_util'
@@ -52,6 +53,7 @@ module Baykit
52
53
  PacketStore.get_stores(@agent_id).each do |store|
53
54
  store.print_usage(indent+1)
54
55
  end
56
+ RudderStateStore.get_store(@agent_id).print_usage(indent+1)
55
57
  TourStore.get_store(@agent_id).print_usage(indent+1);
56
58
  BayServer.cities.cities.each do |city|
57
59
  print_city_usage(nil, city, indent)
@@ -43,7 +43,8 @@ module Baykit
43
43
  end
44
44
 
45
45
  def expand
46
- @buf = StringUtil.realloc(@buf, @buf.length * 2)
46
+ new_len = if @buf.length == 0 then 128 else @buf.length * 2 end
47
+ @buf << "\0" * new_len
47
48
  end
48
49
 
49
50
  def new_header_accessor()
@@ -29,9 +29,9 @@ module Baykit
29
29
  def put_bytes(buf, ofs=0, len=buf.length)
30
30
  if len > 0
31
31
  check_write(len)
32
- #while(@start + @pos + len > @packet.buf.length)
33
- # packet.expand()
34
- #end
32
+ while @start + @pos + len > @packet.buf.length
33
+ packet.expand
34
+ end
35
35
  begin
36
36
  @packet.buf[@start + @pos, len] = buf[ofs, len]
37
37
  rescue IndexError => e
@@ -100,13 +100,13 @@ module Baykit
100
100
  def check_read(len)
101
101
  max_len = (@max_len >= 0) ? @max_len : (@packet.buf_len - @start)
102
102
  if @pos + len > max_len
103
- raise Sink.new("Invalid array index")
103
+ raise IOError.new("Invalid array index: @pos=#{@pos} @max=#{@max_len} len=#{len}")
104
104
  end
105
105
  end
106
106
 
107
107
  def check_write(len)
108
108
  if @max_len > 0 && @pos + len > @max_len
109
- raise Sink.new("Buffer overflow")
109
+ raise IOError.new("Buffer overflow: @pos=#{@pos} @max=#{@max_len} len=#{len}")
110
110
  end
111
111
  end
112
112
 
@@ -1,3 +1,9 @@
1
+ #
2
+ # ProtocolException is thrown when protocol-level violations are detected,
3
+ # such as invalid packet framing or incorrect packet ordering.
4
+ # (Invalid HTTP headers or content length values result in an HttpException,
5
+ # which causes a 400 Bad Request response to be returned to the client.)
6
+ #
1
7
  module Baykit
2
8
  module BayServer
3
9
  module Protocol
@@ -5,7 +11,7 @@ module Baykit
5
11
  def initialize(fmt = nil, *args)
6
12
  super(if fmt == nil
7
13
  nil
8
- elsif args == nil
14
+ elsif args.empty?
9
15
  sprintf("%s", fmt)
10
16
  else
11
17
  sprintf(fmt, *args)
@@ -1,10 +1,10 @@
1
1
  require 'baykit/bayserver/rudders/rudder'
2
+ require 'baykit/bayserver/rudders/rudder_base'
2
3
 
3
4
  module Baykit
4
5
  module BayServer
5
6
  module Rudders
6
- class IORudder
7
- include Rudder
7
+ class IORudder < RudderBase
8
8
 
9
9
  attr :io
10
10
  attr :non_blocking
@@ -23,6 +23,10 @@ module Baykit
23
23
  def close
24
24
  raise NotImplementedError.new
25
25
  end
26
+
27
+ def closed?
28
+ raise NotImplementedError.new
29
+ end
26
30
  end
27
31
  end
28
32
  end
@@ -0,0 +1,21 @@
1
+
2
+ module Baykit
3
+ module BayServer
4
+ module Rudders
5
+ class RudderBase
6
+ include Rudder # implements
7
+
8
+ attr :closed
9
+
10
+ def close
11
+ @closed = true
12
+ end
13
+
14
+ def closed?
15
+ return @closed
16
+ end
17
+
18
+ end
19
+ end
20
+ end
21
+ end
@@ -15,26 +15,26 @@ module Baykit
15
15
  raise NotImplementedError.new
16
16
  end
17
17
 
18
- end
18
+ #DEV_NULL = nil
19
19
 
20
- class DevNullReqContentHandler
21
- include ReqContentHandler # implements
22
- def on_read_req_content(tur, buf, start, len)
23
- end
20
+ class DevNullReqContentHandler
21
+ include ReqContentHandler # implements
22
+ def on_read_req_content(tur, buf, start, len)
23
+ end
24
24
 
25
- def on_end_req_content(tur)
26
- end
25
+ def on_end_req_content(tur)
26
+ end
27
27
 
28
- def on_abort_req(tur)
29
- return false
30
- end
31
- end
28
+ def on_abort_req(tur)
29
+ return false
30
+ end
32
31
 
33
- module ReqContentHandler
34
- DEV_NULL = DevNullReqContentHandler.new()
32
+ end
35
33
  end
36
34
  end
37
35
  end
38
36
  end
39
37
 
38
+ Baykit::BayServer::Tours::ReqContentHandler::DEV_NULL = Baykit::BayServer::Tours::ReqContentHandler::DevNullReqContentHandler.new
39
+
40
40
 
@@ -17,10 +17,11 @@ module Baykit
17
17
  class TourState
18
18
  UNINITIALIZED = 0
19
19
  PREPARING = 1
20
- RUNNING = 2
21
- ABORTED = 3
22
- ENDED = 4
23
- ZOMBIE = 5
20
+ READING = 2
21
+ RUNNING = 3
22
+ ABORTED = 4
23
+ ENDED = 5
24
+ ZOMBIE = 6
24
25
  end
25
26
 
26
27
  # class variables
@@ -65,7 +66,7 @@ module Baykit
65
66
  end
66
67
 
67
68
  def to_s()
68
- return "#{@ship} tours##{@tour_id}/#{@obj_id}[key=#{@req.key}]"
69
+ return "#{@ship} tur##{@tour_id}/#{@obj_id}[key=#{@req.key}]"
69
70
  end
70
71
 
71
72
  ######################################################
@@ -110,7 +111,11 @@ module Baykit
110
111
  end
111
112
 
112
113
  def go
113
- change_state(TOUR_ID_NOCHECK, TourState::RUNNING)
114
+ if(req.headers.content_length > 0)
115
+ change_state(TOUR_ID_NOCHECK, TourState::READING)
116
+ else
117
+ change_state(TOUR_ID_NOCHECK, TourState::RUNNING)
118
+ end
114
119
 
115
120
  city = @ship.port_docker.find_city(@req.req_host)
116
121
  if city == nil
@@ -121,23 +126,23 @@ module Baykit
121
126
  if city == nil
122
127
  raise HttpException.new HttpStatus::NOT_FOUND, @req.uri
123
128
  else
124
- begin
125
- city.enter(self)
126
- rescue HttpException => e
127
- change_state(TOUR_ID_NOCHECK, TourState::ABORTED)
128
- raise e
129
- end
129
+ city.enter(self)
130
130
  end
131
131
  end
132
132
 
133
133
  def valid?()
134
- return @state == TourState::PREPARING || @state == TourState::RUNNING
134
+ return @state == TourState::PREPARING || @state == TourState::READING || @state == TourState::RUNNING
135
135
  end
136
136
 
137
137
  def preparing?()
138
138
  return @state == TourState::PREPARING
139
139
  end
140
140
 
141
+ def reading?()
142
+ return @state == TourState::READING
143
+ end
144
+
145
+
141
146
  def running?()
142
147
  return @state == TourState::RUNNING
143
148
  end
@@ -8,6 +8,7 @@ module Baykit
8
8
  class TourReq
9
9
  include Baykit::BayServer::Util::Reusable # implements
10
10
 
11
+ include Baykit::BayServer
11
12
  include Baykit::BayServer::Protocol
12
13
  include Baykit::BayServer::Util
13
14
 
@@ -123,8 +124,12 @@ module Baykit
123
124
  @tour.check_tour_id(check_id)
124
125
 
125
126
  data_passed = false
126
- if !@tour.running?
127
- BayLog.debug("%s tour is not running.", @tour)
127
+ if @tour.error != nil
128
+ # If has error, only read content. (Do not call content handler)
129
+ BayLog.debug("%s tour has error.", @tour)
130
+
131
+ elsif !@tour.reading?
132
+ raise HttpException.new(HttpStatus.BAD_REQUEST, "%s tour is not reading.", @tour)
128
133
 
129
134
  elsif @content_handler == nil
130
135
  BayLog.warn("%s content read, but no content handler", tour)
@@ -132,17 +137,13 @@ module Baykit
132
137
  elsif @bytes_posted + len > @bytes_limit
133
138
  raise ProtocolException.new("Read data exceed content-length: %d/%d", @bytes_posted + len, @bytes_limit)
134
139
 
135
- elsif @tour.error != nil
136
- # If has error, only read content. (Do not call content handler)
137
- BayLog.debug("%s tour has error.", @tour)
138
-
139
140
  else
140
141
  @content_handler.on_read_req_content(@tour, data, start, len, &callback)
141
142
  data_passed = true
142
143
  end
143
144
 
144
145
  @bytes_posted += len
145
- BayLog.debug("%s read content: len=%d posted=%d limit=%d consumed=%d",
146
+ BayLog.debug("%s post req content: len=%d posted=%d limit=%d consumed=%d",
146
147
  @tour, len, @bytes_posted, @bytes_limit, @bytes_consumed)
147
148
 
148
149
  if !data_passed
@@ -166,6 +167,7 @@ module Baykit
166
167
  if @ended
167
168
  raise Sink.new("#{@tour} Request content is already ended")
168
169
  end
170
+ @tour.change_state(Tour::TOUR_ID_NOCHECK, Tour::TourState::RUNNING)
169
171
 
170
172
  if @bytes_limit >= 0 && @bytes_posted != @bytes_limit
171
173
  raise ProtocolException.new("Read data exceed content-length: #{@bytes_posted}/#{@bytes_limit}")
@@ -203,16 +205,12 @@ module Baykit
203
205
  #@tour.change_state(Tour::TOUR_ID_NOCHECK, Tour::TourState::ABORTED)
204
206
  return true
205
207
 
206
- elsif @tour.running?
208
+ elsif @tour.reading?
207
209
  aborted = true
208
210
  if @content_handler != nil
209
211
  aborted = @content_handler.on_abort_req(@tour)
210
212
  end
211
213
 
212
- #if aborted
213
- # @tour.change_state(Tour::TOUR_ID_NOCHECK, Tour::TourState::ABORTED)
214
- #end
215
-
216
214
  return aborted
217
215
  else
218
216
  BayLog.debug("%s tour is not preparing or not running", @tour)
@@ -225,9 +223,9 @@ module Baykit
225
223
  if hnd == nil
226
224
  raise Sink.new("nil")
227
225
  end
228
- if @content_handler != nil
229
- raise Sink.new("content handler already set")
230
- end
226
+ #if @content_handler != nil
227
+ # raise Sink.new("content handler already set")
228
+ #end
231
229
 
232
230
  @content_handler = hnd
233
231
  end
@@ -3,7 +3,6 @@ require 'baykit/bayserver/protocol/protocol_exception'
3
3
  require 'baykit/bayserver/agent/multiplexer/plain_transporter'
4
4
  require 'baykit/bayserver/taxi/taxi_runner'
5
5
  require 'baykit/bayserver/docker/harbor'
6
- require 'baykit/bayserver/tours/send_file_yacht'
7
6
  require 'baykit/bayserver/tours/read_file_taxi'
8
7
  require 'baykit/bayserver/tours/content_consume_listener'
9
8
 
@@ -22,7 +21,6 @@ module Baykit
22
21
  include Baykit::BayServer::Docker
23
22
  include Baykit::BayServer::Tours
24
23
  include Baykit::BayServer::Taxi
25
- include Baykit::BayServer::Agent::Transporter
26
24
 
27
25
  attr :tour
28
26
 
@@ -35,7 +33,6 @@ module Baykit
35
33
  attr :res_consume_listener
36
34
 
37
35
  attr_accessor :header_sent
38
- attr :yacht
39
36
 
40
37
  ###########################
41
38
  # Response Content info
@@ -55,7 +52,6 @@ module Baykit
55
52
  end
56
53
 
57
54
  def init()
58
- @yacht = SendFileYacht.new()
59
55
  end
60
56
 
61
57
  def to_s()
@@ -69,9 +65,6 @@ module Baykit
69
65
  def reset()
70
66
  @charset = nil
71
67
  @header_sent = false
72
- if @yacht != nil
73
- @yacht.reset()
74
- end
75
68
 
76
69
  @available = false
77
70
  @res_consume_listener = nil
@@ -124,7 +117,42 @@ module Baykit
124
117
  end
125
118
 
126
119
  begin
127
- @tour.ship.send_headers(@tour.ship_id, @tour)
120
+ handled = false
121
+ if !@tour.error_handling && @tour.res.headers.status >= 400
122
+ trouble = BayServer.harbor.trouble
123
+ if trouble != nil
124
+ cmd = trouble.find(tur.res.headers.status)
125
+ if cmd != nil
126
+ err_tour = get_error_tour
127
+ err_tour.req.uri = cmd.target
128
+ @tour.req.headers.copy_to(err_tour.req.headers)
129
+ @tour.res.headers.copy_to(err_tour.res.headers)
130
+ err_tour.req.remote_port = @tour.req.remote_port
131
+ err_tour.req.remote_address = @tour.req.remote_address
132
+ err_tour.req.server_address = @tour.req.server_address
133
+ err_tour.req.server_port = @tour.req.server_port
134
+ err_tour.req.server_name = @tour.req.server_name
135
+ err_tour.res.header_sent = @tour.res.header_sent
136
+ @tour.change_state(Tour::TOUR_ID_NOCHECK, Tour::TourState::ZOMBIE)
137
+ case cmd.method
138
+ when :GUIDE
139
+ err_tour.go
140
+ when :TEXT
141
+ @protocol_handler.send_headers(err_tour)
142
+ data = cmd.target
143
+ err_tour.res.send_res_content(Tour::TOUR_ID_NOCHECK, data, 0, data.length)
144
+ err_tour.end_res_content(Tour::TOUR_ID_NOCHECK)
145
+ when :REROUTE
146
+ err_tour.res.send_http_exception(Tour::TOUR_ID_NOCHECK, HttpException.moved_temp(cmd.target))
147
+ end
148
+ handled = true
149
+ end
150
+ end
151
+ end
152
+
153
+ if !handled
154
+ @tour.ship.send_headers(@tour.ship_id, @tour)
155
+ end
128
156
  rescue IOError => e
129
157
  BayLog.debug_e(e, "%s abort: %s", @tour, e)
130
158
  @tour.change_state(Tour::TOUR_ID_NOCHECK, Tour::TourState::ABORTED)
@@ -149,7 +177,7 @@ module Baykit
149
177
  raise e
150
178
  ensure
151
179
  @header_sent = true
152
- end_content(chk_tour_id)
180
+ end_res_content(chk_tour_id)
153
181
  end
154
182
  end
155
183
 
@@ -162,10 +190,6 @@ module Baykit
162
190
  @available = true
163
191
  end
164
192
 
165
- def detach_consume_listener
166
- @res_consume_listener = nil
167
- end
168
-
169
193
  def send_res_content(chk_tour_id, buf, ofs, len)
170
194
  @tour.check_tour_id(chk_tour_id)
171
195
  BayLog.debug("%s sendContent len=%d", @tour, len)
@@ -281,6 +305,9 @@ module Baykit
281
305
 
282
306
  def consumed(check_id, length)
283
307
  @tour.check_tour_id(check_id)
308
+ if @res_consume_listener == nil
309
+ raise Sink.new("Response consume listener is null")
310
+ end
284
311
 
285
312
  @bytes_consumed += length
286
313
 
@@ -297,12 +324,8 @@ module Baykit
297
324
  resume = true
298
325
  end
299
326
 
300
- if !@tour.zombie?
301
- if @res_consume_listener == nil
302
- BayLog.debug("%s Consume listener is null, so can not invoke callback", self)
303
- else
304
- @res_consume_listener.call(length, resume)
305
- end
327
+ if @tour.running?
328
+ @res_consume_listener.call(length, resume)
306
329
  end
307
330
  end
308
331
 
@@ -1,3 +1,4 @@
1
+ require 'date'
1
2
  require 'baykit/bayserver/util/string_util'
2
3
 
3
4
  module Baykit
@@ -105,8 +106,12 @@ module Baykit
105
106
  end
106
107
  end
107
108
 
108
- add_env(REMOTE_ADDR, tur.req.remote_address, &block)
109
- add_env(REMOTE_PORT, tur.req.remote_port, &block)
109
+ if tur.req.remote_address
110
+ add_env(REMOTE_ADDR, tur.req.remote_address, &block)
111
+ end
112
+ if tur.req.remote_port
113
+ add_env(REMOTE_PORT, tur.req.remote_port, &block)
114
+ end
110
115
  #add_env(REMOTE_USER, "unknown")
111
116
 
112
117
  add_env(REQUEST_SCHEME, tur.is_secure ? "https": "http", &block)
@@ -36,7 +36,7 @@ module Baykit
36
36
  CONNECTION_CLOSE = 1
37
37
  CONNECTION_KEEP_ALIVE = 2
38
38
  CONNECTION_UPGRADE = 3
39
- CONNECTION_UNKOWN = 4
39
+ CONNECTION_UNKNOWN = 4
40
40
 
41
41
  attr :status
42
42
  attr :headers
@@ -185,7 +185,7 @@ module Baykit
185
185
  when "upgrade" then
186
186
  return CONNECTION_UPGRADE
187
187
  else
188
- return CONNECTION_UNKOWN
188
+ return CONNECTION_UNKNOWN
189
189
  end
190
190
  end
191
191
  end
@@ -29,6 +29,7 @@ module Baykit
29
29
  end
30
30
  @status = {}
31
31
  @initialized = false
32
+ @desc_ok = nil
32
33
 
33
34
  def self.init(bcf_file)
34
35
  if(@initialized)
@@ -42,10 +43,16 @@ module Baykit
42
43
  @status[kv.key.to_i] = kv.value
43
44
  end
44
45
  end
46
+
47
+ @desc_ok = @status[OK]
45
48
  @initialized = true
46
49
  end
47
50
 
48
51
  def self.description(status_code)
52
+ if status_code == OK
53
+ return @desc_ok
54
+ end
55
+
49
56
  desc = @status[status_code]
50
57
  if(desc == nil)
51
58
  BayLog.error("Status #{status_code} is invalid.")
@@ -5,12 +5,14 @@ require 'baykit/bayserver/util/string_util'
5
5
  require 'baykit/bayserver/util/char_util'
6
6
  require 'baykit/bayserver/util/headers'
7
7
  require 'baykit/bayserver/util/http_util'
8
+ require 'baykit/bayserver/protocol/protocol_exception'
8
9
 
9
10
  module Baykit
10
11
  module BayServer
11
12
  module Util
12
13
  class HttpUtil
13
14
  include Baykit::BayServer::Util
15
+ include Baykit::BayServer::Protocol
14
16
 
15
17
  MAX_LINE_LEN = 5000
16
18
 
@@ -151,6 +153,20 @@ module Baykit
151
153
  return nil
152
154
  end
153
155
  end
156
+
157
+ def HttpUtil.check_uri(uri)
158
+ if uri == nil
159
+ raise ProtocolException, "path is null"
160
+ end
161
+
162
+ if uri.include?("\x00")
163
+ raise ProtocolException, "path contains null byte"
164
+ end
165
+
166
+ if uri.each_char.any? { |ch| (ch.ord < 0x20) || (ch.ord == 0x7f) }
167
+ raise ProtocolException, "path contains control character"
168
+ end
169
+ end
154
170
  end
155
171
  end
156
172
  end