aboutsummaryrefslogtreecommitdiffstats
path: root/lib/xmlrpc
diff options
context:
space:
mode:
authorhsbt <hsbt@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2014-08-15 01:21:18 +0000
committerhsbt <hsbt@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2014-08-15 01:21:18 +0000
commite5c9e568937873d32370298ccca2484e96ca2e03 (patch)
tree75bc07ecaa3f39532244363a053b8c2c14ad84b8 /lib/xmlrpc
parent90037145dd3cce95e0a7719f5153fc9aa7d087b7 (diff)
downloadruby-e5c9e568937873d32370298ccca2484e96ca2e03.tar.gz
* lib/gserver.rb: removed unmaintained code.
[ruby-core:40313][Feature #5480] * lib/xmlrpc/httpserver.rb: ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@47187 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib/xmlrpc')
-rw-r--r--lib/xmlrpc/httpserver.rb173
1 files changed, 0 insertions, 173 deletions
diff --git a/lib/xmlrpc/httpserver.rb b/lib/xmlrpc/httpserver.rb
deleted file mode 100644
index f7185ff2dd..0000000000
--- a/lib/xmlrpc/httpserver.rb
+++ /dev/null
@@ -1,173 +0,0 @@
-# Copyright (C) 2001, 2002, 2003 by Michael Neumann (mneumann@ntecs.de)
-#
-# $Id$
-#
-
-
-require "gserver"
-
-# Implements a simple HTTP-server by using John W. Small's (jsmall@laser.net)
-# ruby-generic-server: GServer.
-class HttpServer < GServer
-
- ##
- # +handle_obj+ specifies the object, that receives calls from +request_handler+
- # and +ip_auth_handler+
- 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
-
- CRLF = "\r\n"
- HTTP_PROTO = "HTTP/1.0"
- SERVER_NAME = "HttpServer (Ruby #{RUBY_VERSION})"
-
- # Default header for the server name
- DEFAULT_HEADER = {
- "Server" => SERVER_NAME
- }
-
- # Mapping of status codes and error messages
- StatusCodeMapping = {
- 200 => "OK",
- 400 => "Bad Request",
- 403 => "Forbidden",
- 405 => "Method Not Allowed",
- 411 => "Length Required",
- 500 => "Internal Server Error"
- }
-
- class Request
- attr_reader :data, :header, :method, :path, :proto
-
- def initialize(data, method=nil, path=nil, proto=nil)
- @header, @data = Table.new, data
- @method, @path, @proto = method, path, proto
- end
-
- def content_length
- len = @header['Content-Length']
- return nil if len.nil?
- return len.to_i
- end
-
- end
-
- class Response
- attr_reader :header
- attr_accessor :body, :status, :status_message
-
- def initialize(status=200)
- @status = status
- @status_message = nil
- @header = Table.new
- end
- end
-
- # A case-insensitive Hash class for HTTP header
- class Table
- include Enumerable
-
- def initialize(hash={})
- @hash = hash
- update(hash)
- end
-
- def [](key)
- @hash[key.to_s.capitalize]
- end
-
- def []=(key, value)
- @hash[key.to_s.capitalize] = value
- end
-
- def update(hash)
- hash.each {|k,v| self[k] = v}
- self
- end
-
- def each
- @hash.each {|k,v| yield k.capitalize, v }
- end
-
- # Output the Hash table for the HTTP header
- def writeTo(port)
- each { |k,v| port << "#{k}: #{v}" << CRLF }
- end
- end # class Table
-
-
- # Generates a Hash with the HTTP headers
- 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
-
- # Returns a string which represents the time as rfc1123-date of HTTP-date
- def http_date( aTime ) # :doc:
- aTime.gmtime.strftime( "%a, %d %b %Y %H:%M:%S GMT" )
- end
-
- # Returns a string which includes the status code message as,
- # http headers, and body for the response.
- 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
-
- # 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.
- 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
-
-end # class HttpServer
-