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 authentification 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