Class: Thin::DeferredRequest

Inherits:
Request
  • Object
show all
Defined in:
lib/htttee/server/ext/thin/deferred_request.rb

Instance Method Summary collapse

Instance Method Details

#envObject



27
28
29
# File 'lib/htttee/server/ext/thin/deferred_request.rb', line 27

def env
  super.merge(RACK_INPUT => body)
end

#parse(data) ⇒ Object



3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/htttee/server/ext/thin/deferred_request.rb', line 3

def parse(data)
  if @parser.finished?  # Header finished, can only be some more body
    body << data
  else                  # Parse more header using the super parser
    @data << data
    raise InvalidRequest, 'Header longer than allowed' if @data.size > MAX_HEADER

    @nparsed = @parser.execute(@env, @data, @nparsed)

    if @parser.finished?
      return super(data) unless @env['HTTP_TRANSFER_ENCODING'] == 'chunked'

      _, initial_body = @data.split("\r\n\r\n")
      initial_body ||= ''

      @body = DeferrableBody.new(initial_body)

      return true # trigger the rack call chain
    end
  end

  return false  # only trigger the rack call chain once, just after the headers are parsed
end