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