From 747ca59f52632162ee7a5216bf26c5becbb0f3b7 Mon Sep 17 00:00:00 2001 From: gotoyuzo Date: Fri, 13 Aug 2004 04:24:16 +0000 Subject: [PATCH] * lib/webrick/httputils.rb (WEBrick::HTTPUtils.parse_range_header): fix regex for range-spec. * lib/webrick/httpservlet/filehandler.rb (WEBrick::HTTPServlet::DefaultFileHandler#make_partial_content): multipart/byteranges response was broken. * lib/webrick/httpservlet/erbhandler.rb (WEBrick::HTTPServlet::ERBHandler#do_GET): should select media type by suffix of script filename. * lib/xmlrpc/server.rb: refine example code. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@6763 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 15 +++++++++++++++ lib/webrick/httpservlet/erbhandler.rb | 3 ++- lib/webrick/httpservlet/filehandler.rb | 8 ++++++-- lib/webrick/httputils.rb | 2 +- lib/xmlrpc/server.rb | 2 +- 5 files changed, 25 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index ebfdd81770..83ed15bd99 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,18 @@ +Fri Aug 13 13:23:17 2004 GOTOU Yuuzou + + * lib/webrick/httputils.rb (WEBrick::HTTPUtils.parse_range_header): + fix regex for range-spec. + + * lib/webrick/httpservlet/filehandler.rb + (WEBrick::HTTPServlet::DefaultFileHandler#make_partial_content): + multipart/byteranges response was broken. + + * lib/webrick/httpservlet/erbhandler.rb + (WEBrick::HTTPServlet::ERBHandler#do_GET): should select media type + by suffix of script filename. + + * lib/xmlrpc/server.rb: refine example code. + Wed Aug 11 17:17:50 2004 WATANABE Hirofumi * configure.in (RPATHFLAG): stop setting RPATHFLAG on Interix. diff --git a/lib/webrick/httpservlet/erbhandler.rb b/lib/webrick/httpservlet/erbhandler.rb index 40b7a57610..b9d5e65b65 100644 --- a/lib/webrick/httpservlet/erbhandler.rb +++ b/lib/webrick/httpservlet/erbhandler.rb @@ -29,7 +29,8 @@ module WEBrick begin data = open(@script_filename){|io| io.read } res.body = evaluate(ERB.new(data), req, res) - res['content-type'] = "text/html" + res['content-type'] = + HTTPUtils::mime_type(@script_filename, @config[:MimeTypes]) rescue StandardError => ex raise rescue Exception => ex diff --git a/lib/webrick/httpservlet/filehandler.rb b/lib/webrick/httpservlet/filehandler.rb index 9e1a439b14..8525d7bb1b 100644 --- a/lib/webrick/httpservlet/filehandler.rb +++ b/lib/webrick/httpservlet/filehandler.rb @@ -72,13 +72,15 @@ module WEBrick def make_partial_content(req, res, filename, filesize) mtype = HTTPUtils::mime_type(filename, @config[:MimeTypes]) unless ranges = HTTPUtils::parse_range_header(req['range']) - raise BadRequest, "Unrecognized range-spec: \"#{range}\"" + raise HTTPStatus::BadRequest, + "Unrecognized range-spec: \"#{req['range']}\"" end open(filename, "rb"){|io| if ranges.size > 1 + time = Time.now boundary = "#{time.sec}_#{time.usec}_#{Process::pid}" body = '' - ranges.each{|r| + ranges.each{|range| first, last = prepare_range(range, filesize) next if first < 0 io.pos = first @@ -92,6 +94,8 @@ module WEBrick } raise HTTPStatus::RequestRangeNotSatisfiable if body.empty? body << "--" << boundary << "--" << CRLF + res["content-type"] = "multipart/byteranges; boundary=#{boundary}" + res.body = body elsif range = ranges[0] first, last = prepare_range(range, filesize) raise HTTPStatus::RequestRangeNotSatisfiable if first < 0 diff --git a/lib/webrick/httputils.rb b/lib/webrick/httputils.rb index 79ea9d1f47..bae281ca1a 100644 --- a/lib/webrick/httputils.rb +++ b/lib/webrick/httputils.rb @@ -167,7 +167,7 @@ module WEBrick case range_spec when /^(\d+)-(\d+)/ then $1.to_i .. $2.to_i when /^(\d+)-/ then $1.to_i .. -1 - when /^(\d+)/ then -($1.to_i) .. -1 + when /^-(\d+)/ then -($1.to_i) .. -1 else return nil end } diff --git a/lib/xmlrpc/server.rb b/lib/xmlrpc/server.rb index 0fabd3861e..0ef3ca4c93 100644 --- a/lib/xmlrpc/server.rb +++ b/lib/xmlrpc/server.rb @@ -762,7 +762,7 @@ end end httpserver = WEBrick::HTTPServer.new(:Port => 8080) - httpserver.mount("RPC2", s) + httpserver.mount("/RPC2", s) trap("HUP") { httpserver.shutdown } # use 1 instead of "HUP" on Windows httpserver.start == Description