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