class Api2cart::Daemon::ProxyConnectionHandler

Public Instance Methods

handle_proxy_connection(client_socket) click to toggle source
# File lib/api2cart/daemon/proxy_connection_handler.rb, line 5
def handle_proxy_connection(client_socket)
  client_socket = Reel::Spy.new client_socket

  http_message = read_http_message(client_socket)

  response = if not_proxy_request?(http_message)
               bad_request
             else
               begin
                 processed_message = process_client_request(http_message)
                 send_request_to_remote_server(http_message.request_host, http_message.request_port, processed_message)
               rescue Exception => e
                 puts "! Problem connecting to server: #{e.inspect}"
                 internal_server_error(e)
               end
             end

  send_response_to_client(client_socket, response)
end

Protected Instance Methods

bad_request() click to toggle source
# File lib/api2cart/daemon/proxy_connection_handler.rb, line 64
    def bad_request
      <<MESSAGE
HTTP/1.1 400 Bad Request
Content-Length: 0
Connection: close
Status: 400 Bad Request

MESSAGE
    end
internal_server_error(exception) click to toggle source
# File lib/api2cart/daemon/proxy_connection_handler.rb, line 54
    def internal_server_error(exception)
      <<MESSAGE + exception.inspect
HTTP/1.1 500 Internal Server Error
Content-Length: #{exception.inspect.bytesize}
Connection: close
Status: 500 Internal Server Error

MESSAGE
    end
not_proxy_request?(http_message) click to toggle source
# File lib/api2cart/daemon/proxy_connection_handler.rb, line 50
def not_proxy_request?(http_message)
  URI.parse(http_message.request_url).host.nil?
end
process_client_request(client_request) click to toggle source
# File lib/api2cart/daemon/proxy_connection_handler.rb, line 27
def process_client_request(client_request)
  parsed_request_url = URI.parse client_request.request_url
  client_request.message.gsub client_request.request_url, parsed_request_url.request_uri
end
read_http_message(socket) click to toggle source
# File lib/api2cart/daemon/proxy_connection_handler.rb, line 32
def read_http_message(socket)
  HTTPMessageReader.new(socket).read_http_message
end
send_request_to_remote_server(host, port, request) click to toggle source
# File lib/api2cart/daemon/proxy_connection_handler.rb, line 36
def send_request_to_remote_server(host, port, request)
  remote_server_socket = TCPSocket.new host, port
  remote_server_socket = Celluloid::IO::TCPSocket.from_ruby_socket remote_server_socket
  remote_server_socket = Reel::Spy.new remote_server_socket

  remote_server_socket.write request
  read_http_message(remote_server_socket).message
end
send_response_to_client(client_socket, response) click to toggle source
# File lib/api2cart/daemon/proxy_connection_handler.rb, line 45
def send_response_to_client(client_socket, response)
  client_socket.write response
  client_socket.close
end