class HttpServer
Implements a simple HTTP-server by using John W. Small's (jsmall@laser.net) ruby-generic-server: GServer.
Constants
- CRLF
- DEFAULT_HEADER
Default header for the server name
- HTTP_PROTO
- SERVER_NAME
- StatusCodeMapping
Mapping of status codes and error messages
Public Class Methods
new(handle_obj, port = 8080, host = DEFAULT_HOST, maxConnections = 4, stdlog = $stdout, audit = true, debug = true)
click to toggle source
handle_obj specifies the object, that receives calls from
request_handler and ip_auth_handler
Calls superclass method
GServer.new
# File lib/xmlrpc/httpserver.rb, line 16 def initialize(handle_obj, port = 8080, host = DEFAULT_HOST, maxConnections = 4, stdlog = $stdout, audit = true, debug = true) @handler = handle_obj super(port, host, maxConnections, stdlog, audit, debug) end
Private Instance Methods
http_date( aTime )
click to toggle source
Returns a string which represents the time as rfc1123-date of HTTP-date
# File lib/xmlrpc/httpserver.rb, line 115 def http_date( aTime ) # :doc: aTime.gmtime.strftime( "%a, %d %b %Y %H:%M:%S GMT" ) end
http_header(header=nil)
click to toggle source
Generates a Hash with the HTTP headers
# File lib/xmlrpc/httpserver.rb, line 104 def http_header(header=nil) # :doc: new_header = Table.new(DEFAULT_HEADER) new_header.update(header) unless header.nil? new_header["Connection"] = "close" new_header["Date"] = http_date(Time.now) new_header end
http_resp(status_code, status_message=nil, header=nil, body=nil)
click to toggle source
Returns a string which includes the status code message as, http headers, and body for the response.
# File lib/xmlrpc/httpserver.rb, line 121 def http_resp(status_code, status_message=nil, header=nil, body=nil) # :doc: status_message ||= StatusCodeMapping[status_code] str = "" str << "#{HTTP_PROTO} #{status_code} #{status_message}" << CRLF http_header(header).writeTo(str) str << CRLF str << body unless body.nil? str end
serve(io)
click to toggle source
Handles the HTTP request and writes the response back to the client,
io.
If an Exception is raised while handling the request, the client will receive a 500 “Internal Server Error” message.
# File lib/xmlrpc/httpserver.rb, line 136 def serve(io) # :doc: # perform IP authentication unless @handler.ip_auth_handler(io) io << http_resp(403, "Forbidden") return end # parse first line if io.gets =~ /^(\S+)\s+(\S+)\s+(\S+)/ request = Request.new(io, $1, $2, $3) else io << http_resp(400, "Bad Request") return end # parse HTTP headers while (line=io.gets) !~ /^(\n|\r)/ if line =~ /^([\w-]+):\s*(.*)$/ request.header[$1] = $2.strip end end io.binmode response = Response.new # execute request handler @handler.request_handler(request, response) # write response back to the client io << http_resp(response.status, response.status_message, response.header, response.body) rescue Exception io << http_resp(500, "Internal Server Error") end