module Envoy::Server::Web

Public Instance Methods

close(code) click to toggle source
# File lib/envoy/server/web.rb, line 28
def close code
  case code
  when 502
    send_page 502, "Bad Gateway", "The service isn't running, and couldn't be started." 
  end
  close_connection(true)
end
fail(status, title, message) click to toggle source
# File lib/envoy/server/web.rb, line 23
def fail (status, title, message)
  send_page(500, title, message)
  close_connection true
end
post_init() click to toggle source
# File lib/envoy/server/web.rb, line 9
def post_init
  @header = ""
  @connection = "close"
end
receive_binary_data(data) click to toggle source
# File lib/envoy/server/web.rb, line 67
def receive_binary_data data
  @channel.stream data
end
receive_line(line) click to toggle source
# File lib/envoy/server/web.rb, line 40
def receive_line line
  @first_line ||= line
  if line == ""
    trunk = Trunk.trunks[@host].sample || (return fail(404, "Not Found", "No trunk for #{@host}.#{$zone}"))
    @header << "Connection: #{@connection}\r\n\r\n"
    @channel = Channel.new(trunk, self, @header)
    @channel.message "%s %s" % [Socket.unpack_sockaddr_in(get_peername)[1], @first_line]
    set_text_mode
  elsif line =~ /^connection:\s*upgrade$/i
    @connection = "upgrade"
  elsif line =~ /^keep-alive:/i
  elsif line =~ /^host:\s*([^:]*)/i
    @host = $1
    raise "Request for #{@host} is not in #{$zone}" unless @host.end_with?($zone)
    @host = @host[0...-$zone.length]
    @host = @host.split(".").last
    @header << line + "\r\n"
  elsif @header.size > 4096
    return fail(400, "Bad Request", "Header's too long for my liking")
  else
    @header << line + "\r\n"
  end
rescue RuntimeError => e
  send_page 500, "Internal Server Error", e.inspect
  close_connection true
end
send_page(status, title, message) click to toggle source
# File lib/envoy/server/web.rb, line 14
def send_page status, title, message
  send_data "HTTP/1.0 #{status} Message\r\n"
  send_data "Content-Type: text/html\r\n"
  send_data "\r\n"
  send_data "<title>#{title}</title>\r\n"
  send_data "<h1>#{title}</h1>\r\n"
  send_data "<p>#{message}\r\n"
end
unbind() click to toggle source
# File lib/envoy/server/web.rb, line 36
def unbind
  @channel.trunk.channels.delete @channel.id if @channel
end