class Invoker::Power::HttpParser

Attributes

host[RW]
parser[RW]
protocol[RW]

Public Class Methods

new(protocol) click to toggle source
# File lib/invoker/power/http_parser.rb, line 6
def initialize(protocol)
  @protocol = protocol
  @parser = HTTP::Parser.new
  @header = {}
  initialize_message_content
  parser.on_headers_complete { complete_headers_received }
  parser.on_header_field { |field_name| @last_key = field_name }
  parser.on_header_value { |field_value| header_value_received(field_value) }

  parser.on_message_complete { complete_message_received }
end

Public Instance Methods

<<(data) click to toggle source
# File lib/invoker/power/http_parser.rb, line 38
def << data
  @full_message.write(data)
  parser << data
end
header_value_received(value) click to toggle source
# File lib/invoker/power/http_parser.rb, line 23
def header_value_received(value)
  @header[@last_key] = value
end
on_headers_complete(&block) click to toggle source

define a callback for invoking when complete header is parsed

# File lib/invoker/power/http_parser.rb, line 19
def on_headers_complete(&block)
  @on_headers_complete_callback = block
end
on_message_complete(&block) click to toggle source

define a callback to invoke when a full http message is received

# File lib/invoker/power/http_parser.rb, line 28
def on_message_complete(&block)
  @on_message_complete_callback = block
end
reset() click to toggle source
# File lib/invoker/power/http_parser.rb, line 32
def reset
  @header = {}
  initialize_message_content
  parser.reset
end

Private Instance Methods

complete_headers_received() click to toggle source

gets invoker when complete header is received

# File lib/invoker/power/http_parser.rb, line 61
def complete_headers_received
  if @on_headers_complete_callback
    @on_headers_complete_callback.call(@header)
  end
end
complete_message_received() click to toggle source
# File lib/invoker/power/http_parser.rb, line 45
def complete_message_received
  full_message_string = @full_message.string.dup
  if full_message_string =~ /\r\n\r\n/
    full_message_string.sub!(/\r\n\r\n/, "\r\nX_FORWARDED_PROTO: #{protocol}\r\n\r\n")
  end
  if @on_message_complete_callback
    @on_message_complete_callback.call(full_message_string)
  end
end
initialize_message_content() click to toggle source
# File lib/invoker/power/http_parser.rb, line 55
def initialize_message_content
  @full_message = StringIO.new
  @full_message.set_encoding('ASCII-8BIT')
end