mongrel 0.3.5 → 0.3.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README +4 -3
- data/Rakefile +7 -5
- data/bin/mongrel_rails +5 -4
- data/bin/mongrel_rails_service +237 -0
- data/bin/mongrel_rails_svc +194 -0
- data/doc/rdoc/classes/Mongrel.html +1 -4
- data/doc/rdoc/classes/Mongrel/Const.html +13 -3
- data/doc/rdoc/classes/Mongrel/HeaderOut.html +10 -10
- data/doc/rdoc/classes/Mongrel/HeaderOut.src/{M000033.html → M000028.html} +4 -4
- data/doc/rdoc/classes/Mongrel/HeaderOut.src/{M000034.html → M000029.html} +7 -7
- data/doc/rdoc/classes/Mongrel/HttpRequest.html +5 -5
- data/doc/rdoc/classes/Mongrel/HttpRequest.src/M000041.html +39 -0
- data/doc/rdoc/classes/Mongrel/HttpResponse.html +36 -36
- data/doc/rdoc/classes/Mongrel/HttpResponse.src/M000034.html +21 -0
- data/doc/rdoc/classes/Mongrel/HttpResponse.src/{M000041.html → M000035.html} +6 -6
- data/doc/rdoc/classes/Mongrel/HttpResponse.src/{M000042.html → M000036.html} +5 -5
- data/doc/rdoc/classes/Mongrel/HttpResponse.src/{M000043.html → M000037.html} +5 -5
- data/doc/rdoc/classes/Mongrel/HttpResponse.src/{M000044.html → M000038.html} +6 -6
- data/doc/rdoc/classes/Mongrel/HttpResponse.src/{M000045.html → M000039.html} +6 -6
- data/doc/rdoc/classes/Mongrel/HttpResponse.src/M000040.html +7 -8
- data/doc/rdoc/classes/Mongrel/HttpServer.html +47 -28
- data/doc/rdoc/classes/Mongrel/HttpServer.src/M000022.html +33 -0
- data/doc/rdoc/classes/Mongrel/HttpServer.src/M000023.html +57 -0
- data/doc/rdoc/classes/Mongrel/HttpServer.src/M000024.html +46 -0
- data/doc/rdoc/classes/Mongrel/HttpServer.src/{M000031.html → M000025.html} +4 -4
- data/doc/rdoc/classes/Mongrel/HttpServer.src/{M000032.html → M000026.html} +4 -4
- data/doc/rdoc/classes/Mongrel/HttpServer.src/M000027.html +19 -0
- data/doc/rdoc/classes/Mongrel/{HttpHandler.html → StopServer.html} +4 -33
- data/doc/rdoc/classes/Mongrel/URIClassifier.html +22 -23
- data/doc/rdoc/classes/Mongrel/URIClassifier.src/{M000035.html → M000030.html} +0 -0
- data/doc/rdoc/classes/Mongrel/URIClassifier.src/{M000036.html → M000031.html} +0 -0
- data/doc/rdoc/classes/Mongrel/URIClassifier.src/{M000037.html → M000032.html} +0 -0
- data/doc/rdoc/classes/Mongrel/URIClassifier.src/{M000038.html → M000033.html} +0 -0
- data/doc/rdoc/created.rid +1 -1
- data/doc/rdoc/files/README.html +9 -7
- data/doc/rdoc/files/lib/mongrel_rb.html +3 -3
- data/doc/rdoc/fr_class_index.html +1 -4
- data/doc/rdoc/fr_method_index.html +20 -37
- data/examples/mongrel_simple_ctrl.rb +92 -0
- data/examples/mongrel_simple_service.rb +116 -0
- data/examples/simpletest.rb +3 -1
- data/ext/http11/http11_parser.c +176 -263
- data/lib/mongrel.rb +56 -343
- data/lib/mongrel/cgi.rb +147 -0
- data/lib/mongrel/handlers.rb +180 -0
- metadata +28 -46
- data/doc/rdoc/classes/Mongrel/CGIWrapper.html +0 -346
- data/doc/rdoc/classes/Mongrel/CGIWrapper.src/M000047.html +0 -24
- data/doc/rdoc/classes/Mongrel/CGIWrapper.src/M000048.html +0 -48
- data/doc/rdoc/classes/Mongrel/CGIWrapper.src/M000049.html +0 -34
- data/doc/rdoc/classes/Mongrel/CGIWrapper.src/M000050.html +0 -27
- data/doc/rdoc/classes/Mongrel/CGIWrapper.src/M000051.html +0 -26
- data/doc/rdoc/classes/Mongrel/CGIWrapper.src/M000052.html +0 -18
- data/doc/rdoc/classes/Mongrel/CGIWrapper.src/M000053.html +0 -18
- data/doc/rdoc/classes/Mongrel/CGIWrapper.src/M000054.html +0 -18
- data/doc/rdoc/classes/Mongrel/CGIWrapper.src/M000055.html +0 -19
- data/doc/rdoc/classes/Mongrel/DirHandler.html +0 -283
- data/doc/rdoc/classes/Mongrel/DirHandler.src/M000022.html +0 -20
- data/doc/rdoc/classes/Mongrel/DirHandler.src/M000023.html +0 -42
- data/doc/rdoc/classes/Mongrel/DirHandler.src/M000024.html +0 -40
- data/doc/rdoc/classes/Mongrel/DirHandler.src/M000025.html +0 -31
- data/doc/rdoc/classes/Mongrel/DirHandler.src/M000026.html +0 -38
- data/doc/rdoc/classes/Mongrel/DirHandler.src/M000027.html +0 -18
- data/doc/rdoc/classes/Mongrel/Error404Handler.html +0 -171
- data/doc/rdoc/classes/Mongrel/Error404Handler.src/M000056.html +0 -18
- data/doc/rdoc/classes/Mongrel/Error404Handler.src/M000057.html +0 -18
- data/doc/rdoc/classes/Mongrel/HttpHandler.src/M000039.html +0 -17
- data/doc/rdoc/classes/Mongrel/HttpRequest.src/M000058.html +0 -31
- data/doc/rdoc/classes/Mongrel/HttpResponse.src/M000046.html +0 -20
- data/doc/rdoc/classes/Mongrel/HttpServer.src/M000028.html +0 -38
- data/doc/rdoc/classes/Mongrel/HttpServer.src/M000029.html +0 -64
- data/doc/rdoc/classes/Mongrel/HttpServer.src/M000030.html +0 -23
data/lib/mongrel/cgi.rb
ADDED
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
require 'cgi'
|
|
2
|
+
|
|
3
|
+
module Mongrel
|
|
4
|
+
# The beginning of a complete wrapper around Mongrel's internal HTTP processing
|
|
5
|
+
# system but maintaining the original Ruby CGI module. Use this only as a crutch
|
|
6
|
+
# to get existing CGI based systems working. It should handle everything, but please
|
|
7
|
+
# notify me if you see special warnings. This work is still very alpha so I need
|
|
8
|
+
# testers to help work out the various corner cases.
|
|
9
|
+
class CGIWrapper < ::CGI
|
|
10
|
+
public :env_table
|
|
11
|
+
attr_reader :options
|
|
12
|
+
|
|
13
|
+
# these are stripped out of any keys passed to CGIWrapper.header function
|
|
14
|
+
REMOVED_KEYS = [ "nph","status","server","connection","type",
|
|
15
|
+
"charset","length","language","expires"]
|
|
16
|
+
|
|
17
|
+
# Takes an HttpRequest and HttpResponse object, plus any additional arguments
|
|
18
|
+
# normally passed to CGI. These are used internally to create a wrapper around
|
|
19
|
+
# the real CGI while maintaining Mongrel's view of the world.
|
|
20
|
+
def initialize(request, response, *args)
|
|
21
|
+
@request = request
|
|
22
|
+
@response = response
|
|
23
|
+
@args = *args
|
|
24
|
+
@input = StringIO.new(request.body)
|
|
25
|
+
@head = {}
|
|
26
|
+
@out_called = false
|
|
27
|
+
super(*args)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# The header is typically called to send back the header. In our case we
|
|
31
|
+
# collect it into a hash for later usage.
|
|
32
|
+
#
|
|
33
|
+
# nph -- Mostly ignored. It'll output the date.
|
|
34
|
+
# connection -- Completely ignored. Why is CGI doing this?
|
|
35
|
+
# length -- Ignored since Mongrel figures this out from what you write to output.
|
|
36
|
+
#
|
|
37
|
+
def header(options = "text/html")
|
|
38
|
+
# if they pass in a string then just write the Content-Type
|
|
39
|
+
if options.class == String
|
|
40
|
+
@head['Content-Type'] = options unless @head['Content-Type']
|
|
41
|
+
else
|
|
42
|
+
# convert the given options into what Mongrel wants
|
|
43
|
+
@head['Content-Type'] = options['type'] || "text/html"
|
|
44
|
+
@head['Content-Type'] += "; charset=" + options['charset'] if options.has_key? "charset" if options['charset']
|
|
45
|
+
|
|
46
|
+
# setup date only if they use nph
|
|
47
|
+
@head['Date'] = CGI::rfc1123_date(Time.now) if options['nph']
|
|
48
|
+
|
|
49
|
+
# setup the server to use the default or what they set
|
|
50
|
+
@head['Server'] = options['server'] || env_table['SERVER_SOFTWARE']
|
|
51
|
+
|
|
52
|
+
# remaining possible options they can give
|
|
53
|
+
@head['Status'] = options['status'] if options['status']
|
|
54
|
+
@head['Content-Language'] = options['language'] if options['language']
|
|
55
|
+
@head['Expires'] = options['expires'] if options['expires']
|
|
56
|
+
|
|
57
|
+
# drop the keys we don't want anymore
|
|
58
|
+
REMOVED_KEYS.each {|k| options.delete(k) }
|
|
59
|
+
|
|
60
|
+
# finally just convert the rest raw (which puts 'cookie' directly)
|
|
61
|
+
# 'cookie' is translated later as we write the header out
|
|
62
|
+
options.each{|k,v| @head[k] = v}
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
# doing this fakes out the cgi library to think the headers are empty
|
|
66
|
+
# we then do the real headers in the out function call later
|
|
67
|
+
""
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
# Takes any 'cookie' setting and sends it over the Mongrel header,
|
|
71
|
+
# then removes the setting from the options. If cookie is an
|
|
72
|
+
# Array or Hash then it sends those on with .to_s, otherwise
|
|
73
|
+
# it just calls .to_s on it and hopefully your "cookie" can
|
|
74
|
+
# write itself correctly.
|
|
75
|
+
def send_cookies(to)
|
|
76
|
+
# convert the cookies based on the myriad of possible ways to set a cookie
|
|
77
|
+
if @head['cookie']
|
|
78
|
+
cookie = @head['cookie']
|
|
79
|
+
case cookie
|
|
80
|
+
when Array
|
|
81
|
+
cookie.each {|c| to['Set-Cookie'] = c.to_s }
|
|
82
|
+
when Hash
|
|
83
|
+
cookie.each_value {|c| to['Set-Cookie'] = c.to_s}
|
|
84
|
+
else
|
|
85
|
+
to['Set-Cookie'] = options['cookie'].to_s
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
@head.delete('cookie')
|
|
89
|
+
|
|
90
|
+
# @output_cookies seems to never be used, but we'll process it just in case
|
|
91
|
+
@output_cookies.each {|c| to['Set-Cookie'] = c.to_s } if @output_cookies
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
# The dumb thing is people can call header or this or both and in any order.
|
|
96
|
+
# So, we just reuse header and then finalize the HttpResponse the right way.
|
|
97
|
+
# Status is taken from the various options and converted to what Mongrel needs
|
|
98
|
+
# via the CGIWrapper.status function.
|
|
99
|
+
def out(options = "text/html")
|
|
100
|
+
return if @out_called # don't do this more than once
|
|
101
|
+
|
|
102
|
+
header(options)
|
|
103
|
+
|
|
104
|
+
@response.start status do |head, out|
|
|
105
|
+
send_cookies(head)
|
|
106
|
+
|
|
107
|
+
@head.each {|k,v| head[k] = v}
|
|
108
|
+
out.write(yield || "")
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
# Computes the status once, but lazily so that people who call header twice
|
|
113
|
+
# don't get penalized. Because CGI insists on including the options status
|
|
114
|
+
# message in the status we have to do a bit of parsing.
|
|
115
|
+
def status
|
|
116
|
+
if not @status
|
|
117
|
+
stat = @head["Status"]
|
|
118
|
+
stat = stat.split(' ')[0] if stat
|
|
119
|
+
|
|
120
|
+
@status = stat || "200"
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
@status
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
# Used to wrap the normal args variable used inside CGI.
|
|
127
|
+
def args
|
|
128
|
+
@args
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
# Used to wrap the normal env_table variable used inside CGI.
|
|
132
|
+
def env_table
|
|
133
|
+
@request.params
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
# Used to wrap the normal stdinput variable used inside CGI.
|
|
137
|
+
def stdinput
|
|
138
|
+
@input
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
# The stdoutput should be completely bypassed but we'll drop a warning just in case
|
|
142
|
+
def stdoutput
|
|
143
|
+
STDERR.puts "WARNING: Your program is doing something not expected. Please tell Zed that stdoutput was used and what software you are running. Thanks."
|
|
144
|
+
@response.body
|
|
145
|
+
end
|
|
146
|
+
end
|
|
147
|
+
end
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
|
|
2
|
+
module Mongrel
|
|
3
|
+
|
|
4
|
+
# You implement your application handler with this. It's very light giving
|
|
5
|
+
# just the minimum necessary for you to handle a request and shoot back
|
|
6
|
+
# a response. Look at the HttpRequest and HttpResponse objects for how
|
|
7
|
+
# to use them.
|
|
8
|
+
class HttpHandler
|
|
9
|
+
def process(request, response)
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
# The server normally returns a 404 response if an unknown URI is requested, but it
|
|
15
|
+
# also returns a lame empty message. This lets you do a 404 response
|
|
16
|
+
# with a custom message for special URIs.
|
|
17
|
+
class Error404Handler < HttpHandler
|
|
18
|
+
|
|
19
|
+
# Sets the message to return. This is constructed once for the handler
|
|
20
|
+
# so it's pretty efficient.
|
|
21
|
+
def initialize(msg)
|
|
22
|
+
@response = Const::ERROR_404_RESPONSE + msg
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
# Just kicks back the standard 404 response with your special message.
|
|
26
|
+
def process(request, response)
|
|
27
|
+
response.socket.write(@response)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
# Serves the contents of a directory. You give it the path to the root
|
|
34
|
+
# where the files are located, and it tries to find the files based on
|
|
35
|
+
# the PATH_INFO inside the directory. If the requested path is a
|
|
36
|
+
# directory then it returns a simple directory listing.
|
|
37
|
+
#
|
|
38
|
+
# It does a simple protection against going outside it's root path by
|
|
39
|
+
# converting all paths to an absolute expanded path, and then making sure
|
|
40
|
+
# that the final expanded path includes the root path. If it doesn't
|
|
41
|
+
# than it simply gives a 404.
|
|
42
|
+
class DirHandler < HttpHandler
|
|
43
|
+
MIME_TYPES = {
|
|
44
|
+
".css" => "text/css",
|
|
45
|
+
".gif" => "image/gif",
|
|
46
|
+
".htm" => "text/html",
|
|
47
|
+
".html" => "text/html",
|
|
48
|
+
".jpeg" => "image/jpeg",
|
|
49
|
+
".jpg" => "image/jpeg",
|
|
50
|
+
".js" => "text/javascript",
|
|
51
|
+
".png" => "image/png",
|
|
52
|
+
".swf" => "application/x-shockwave-flash",
|
|
53
|
+
".txt" => "text/plain"
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
attr_reader :path
|
|
58
|
+
|
|
59
|
+
# You give it the path to the directory root and an (optional)
|
|
60
|
+
def initialize(path, listing_allowed=true, index_html="index.html")
|
|
61
|
+
@path = File.expand_path(path)
|
|
62
|
+
@listing_allowed=listing_allowed
|
|
63
|
+
@index_html = index_html
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
# Checks if the given path can be served and returns the full path (or nil if not).
|
|
67
|
+
def can_serve(path_info)
|
|
68
|
+
req = File.expand_path(File.join(@path,path_info), @path)
|
|
69
|
+
|
|
70
|
+
if req.index(@path) == 0 and File.exist? req
|
|
71
|
+
# it exists and it's in the right location
|
|
72
|
+
if File.directory? req
|
|
73
|
+
# the request is for a directory
|
|
74
|
+
index = File.join(req, @index_html)
|
|
75
|
+
if File.exist? index
|
|
76
|
+
# serve the index
|
|
77
|
+
return index
|
|
78
|
+
elsif @listing_allowed
|
|
79
|
+
# serve the directory
|
|
80
|
+
req
|
|
81
|
+
else
|
|
82
|
+
# do not serve anything
|
|
83
|
+
return nil
|
|
84
|
+
end
|
|
85
|
+
else
|
|
86
|
+
# it's a file and it's there
|
|
87
|
+
return req
|
|
88
|
+
end
|
|
89
|
+
else
|
|
90
|
+
# does not exist or isn't in the right spot
|
|
91
|
+
return nil
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
# Returns a simplistic directory listing if they're enabled, otherwise a 403.
|
|
97
|
+
# Base is the base URI from the REQUEST_URI, dir is the directory to serve
|
|
98
|
+
# on the file system (comes from can_serve()), and response is the HttpResponse
|
|
99
|
+
# object to send the results on.
|
|
100
|
+
def send_dir_listing(base, dir, response)
|
|
101
|
+
# take off any trailing / so the links come out right
|
|
102
|
+
base.chop! if base[-1] == "/"[-1]
|
|
103
|
+
|
|
104
|
+
if @listing_allowed
|
|
105
|
+
response.start(200) do |head,out|
|
|
106
|
+
head['Content-Type'] = "text/html"
|
|
107
|
+
out << "<html><head><title>Directory Listing</title></head><body>"
|
|
108
|
+
Dir.entries(dir).each do |child|
|
|
109
|
+
next if child == "."
|
|
110
|
+
|
|
111
|
+
if child == ".."
|
|
112
|
+
out << "<a href=\"#{base}/#{child}\">Up to parent..</a><br/>"
|
|
113
|
+
else
|
|
114
|
+
out << "<a href=\"#{base}/#{child}\">#{child}</a><br/>"
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
out << "</body></html>"
|
|
118
|
+
end
|
|
119
|
+
else
|
|
120
|
+
response.start(403) do |head,out|
|
|
121
|
+
out.write("Directory listings not allowed")
|
|
122
|
+
end
|
|
123
|
+
end
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
# Sends the contents of a file back to the user. Not terribly efficient since it's
|
|
128
|
+
# opening and closing the file for each read.
|
|
129
|
+
def send_file(req, response)
|
|
130
|
+
response.start(200) do |head,out|
|
|
131
|
+
# set the mime type from our map based on the ending
|
|
132
|
+
dot_at = req.rindex(".")
|
|
133
|
+
if dot_at
|
|
134
|
+
ext = req[dot_at .. -1]
|
|
135
|
+
if MIME_TYPES[ext]
|
|
136
|
+
head['Content-Type'] = MIME_TYPES[ext]
|
|
137
|
+
end
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
open(req, "rb") do |f|
|
|
141
|
+
out.write(f.read)
|
|
142
|
+
end
|
|
143
|
+
end
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
# Process the request to either serve a file or a directory listing
|
|
148
|
+
# if allowed (based on the listing_allowed paramter to the constructor).
|
|
149
|
+
def process(request, response)
|
|
150
|
+
req = can_serve request.params['PATH_INFO']
|
|
151
|
+
if not req
|
|
152
|
+
# not found, return a 404
|
|
153
|
+
response.start(404) do |head,out|
|
|
154
|
+
out << "File not found"
|
|
155
|
+
end
|
|
156
|
+
else
|
|
157
|
+
begin
|
|
158
|
+
if File.directory? req
|
|
159
|
+
send_dir_listing(request.params["REQUEST_URI"],req, response)
|
|
160
|
+
else
|
|
161
|
+
send_file(req, response)
|
|
162
|
+
end
|
|
163
|
+
rescue => details
|
|
164
|
+
response.reset
|
|
165
|
+
response.start(403) do |head,out|
|
|
166
|
+
out << "Error accessing file: #{details}"
|
|
167
|
+
out << details.backtrace.join("\n")
|
|
168
|
+
end
|
|
169
|
+
end
|
|
170
|
+
end
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
# There is a small number of default mime types for extensions, but
|
|
174
|
+
# this lets you add any others you'll need when serving content.
|
|
175
|
+
def DirHandler::add_mime_type(extension, type)
|
|
176
|
+
MIME_TYPES[extension] = type
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
end
|
|
180
|
+
end
|
metadata
CHANGED
|
@@ -3,8 +3,8 @@ rubygems_version: 0.8.11
|
|
|
3
3
|
specification_version: 1
|
|
4
4
|
name: mongrel
|
|
5
5
|
version: !ruby/object:Gem::Version
|
|
6
|
-
version: 0.3.
|
|
7
|
-
date: 2006-02-
|
|
6
|
+
version: 0.3.6
|
|
7
|
+
date: 2006-02-22 00:00:00 -05:00
|
|
8
8
|
summary: A small fast HTTP library and server that runs Rails, Camping, and Nitro apps.
|
|
9
9
|
require_paths:
|
|
10
10
|
- lib
|
|
@@ -35,6 +35,8 @@ files:
|
|
|
35
35
|
- Rakefile
|
|
36
36
|
- setup.rb
|
|
37
37
|
- bin/mongrel_rails
|
|
38
|
+
- bin/mongrel_rails_service
|
|
39
|
+
- bin/mongrel_rails_svc
|
|
38
40
|
- doc/rdoc/classes
|
|
39
41
|
- doc/rdoc/created.rid
|
|
40
42
|
- doc/rdoc/files
|
|
@@ -50,17 +52,9 @@ files:
|
|
|
50
52
|
- doc/rdoc/classes/PluginFactory.html
|
|
51
53
|
- doc/rdoc/classes/PluginFactory.src
|
|
52
54
|
- doc/rdoc/classes/FactoryError.src/M000001.html
|
|
53
|
-
- doc/rdoc/classes/Mongrel/CGIWrapper.html
|
|
54
|
-
- doc/rdoc/classes/Mongrel/CGIWrapper.src
|
|
55
55
|
- doc/rdoc/classes/Mongrel/Const.html
|
|
56
|
-
- doc/rdoc/classes/Mongrel/DirHandler.html
|
|
57
|
-
- doc/rdoc/classes/Mongrel/DirHandler.src
|
|
58
|
-
- doc/rdoc/classes/Mongrel/Error404Handler.html
|
|
59
|
-
- doc/rdoc/classes/Mongrel/Error404Handler.src
|
|
60
56
|
- doc/rdoc/classes/Mongrel/HeaderOut.html
|
|
61
57
|
- doc/rdoc/classes/Mongrel/HeaderOut.src
|
|
62
|
-
- doc/rdoc/classes/Mongrel/HttpHandler.html
|
|
63
|
-
- doc/rdoc/classes/Mongrel/HttpHandler.src
|
|
64
58
|
- doc/rdoc/classes/Mongrel/HttpParser.html
|
|
65
59
|
- doc/rdoc/classes/Mongrel/HttpParser.src
|
|
66
60
|
- doc/rdoc/classes/Mongrel/HttpRequest.html
|
|
@@ -69,28 +63,11 @@ files:
|
|
|
69
63
|
- doc/rdoc/classes/Mongrel/HttpResponse.src
|
|
70
64
|
- doc/rdoc/classes/Mongrel/HttpServer.html
|
|
71
65
|
- doc/rdoc/classes/Mongrel/HttpServer.src
|
|
66
|
+
- doc/rdoc/classes/Mongrel/StopServer.html
|
|
72
67
|
- doc/rdoc/classes/Mongrel/URIClassifier.html
|
|
73
68
|
- doc/rdoc/classes/Mongrel/URIClassifier.src
|
|
74
|
-
- doc/rdoc/classes/Mongrel/
|
|
75
|
-
- doc/rdoc/classes/Mongrel/
|
|
76
|
-
- doc/rdoc/classes/Mongrel/CGIWrapper.src/M000049.html
|
|
77
|
-
- doc/rdoc/classes/Mongrel/CGIWrapper.src/M000050.html
|
|
78
|
-
- doc/rdoc/classes/Mongrel/CGIWrapper.src/M000051.html
|
|
79
|
-
- doc/rdoc/classes/Mongrel/CGIWrapper.src/M000052.html
|
|
80
|
-
- doc/rdoc/classes/Mongrel/CGIWrapper.src/M000053.html
|
|
81
|
-
- doc/rdoc/classes/Mongrel/CGIWrapper.src/M000054.html
|
|
82
|
-
- doc/rdoc/classes/Mongrel/CGIWrapper.src/M000055.html
|
|
83
|
-
- doc/rdoc/classes/Mongrel/DirHandler.src/M000022.html
|
|
84
|
-
- doc/rdoc/classes/Mongrel/DirHandler.src/M000023.html
|
|
85
|
-
- doc/rdoc/classes/Mongrel/DirHandler.src/M000024.html
|
|
86
|
-
- doc/rdoc/classes/Mongrel/DirHandler.src/M000025.html
|
|
87
|
-
- doc/rdoc/classes/Mongrel/DirHandler.src/M000026.html
|
|
88
|
-
- doc/rdoc/classes/Mongrel/DirHandler.src/M000027.html
|
|
89
|
-
- doc/rdoc/classes/Mongrel/Error404Handler.src/M000056.html
|
|
90
|
-
- doc/rdoc/classes/Mongrel/Error404Handler.src/M000057.html
|
|
91
|
-
- doc/rdoc/classes/Mongrel/HeaderOut.src/M000033.html
|
|
92
|
-
- doc/rdoc/classes/Mongrel/HeaderOut.src/M000034.html
|
|
93
|
-
- doc/rdoc/classes/Mongrel/HttpHandler.src/M000039.html
|
|
69
|
+
- doc/rdoc/classes/Mongrel/HeaderOut.src/M000028.html
|
|
70
|
+
- doc/rdoc/classes/Mongrel/HeaderOut.src/M000029.html
|
|
94
71
|
- doc/rdoc/classes/Mongrel/HttpParser.src/M000015.html
|
|
95
72
|
- doc/rdoc/classes/Mongrel/HttpParser.src/M000016.html
|
|
96
73
|
- doc/rdoc/classes/Mongrel/HttpParser.src/M000017.html
|
|
@@ -98,23 +75,24 @@ files:
|
|
|
98
75
|
- doc/rdoc/classes/Mongrel/HttpParser.src/M000019.html
|
|
99
76
|
- doc/rdoc/classes/Mongrel/HttpParser.src/M000020.html
|
|
100
77
|
- doc/rdoc/classes/Mongrel/HttpParser.src/M000021.html
|
|
101
|
-
- doc/rdoc/classes/Mongrel/HttpRequest.src/
|
|
78
|
+
- doc/rdoc/classes/Mongrel/HttpRequest.src/M000041.html
|
|
79
|
+
- doc/rdoc/classes/Mongrel/HttpResponse.src/M000034.html
|
|
80
|
+
- doc/rdoc/classes/Mongrel/HttpResponse.src/M000035.html
|
|
81
|
+
- doc/rdoc/classes/Mongrel/HttpResponse.src/M000036.html
|
|
82
|
+
- doc/rdoc/classes/Mongrel/HttpResponse.src/M000037.html
|
|
83
|
+
- doc/rdoc/classes/Mongrel/HttpResponse.src/M000038.html
|
|
84
|
+
- doc/rdoc/classes/Mongrel/HttpResponse.src/M000039.html
|
|
102
85
|
- doc/rdoc/classes/Mongrel/HttpResponse.src/M000040.html
|
|
103
|
-
- doc/rdoc/classes/Mongrel/
|
|
104
|
-
- doc/rdoc/classes/Mongrel/
|
|
105
|
-
- doc/rdoc/classes/Mongrel/
|
|
106
|
-
- doc/rdoc/classes/Mongrel/
|
|
107
|
-
- doc/rdoc/classes/Mongrel/
|
|
108
|
-
- doc/rdoc/classes/Mongrel/
|
|
109
|
-
- doc/rdoc/classes/Mongrel/
|
|
110
|
-
- doc/rdoc/classes/Mongrel/
|
|
111
|
-
- doc/rdoc/classes/Mongrel/
|
|
112
|
-
- doc/rdoc/classes/Mongrel/
|
|
113
|
-
- doc/rdoc/classes/Mongrel/HttpServer.src/M000032.html
|
|
114
|
-
- doc/rdoc/classes/Mongrel/URIClassifier.src/M000035.html
|
|
115
|
-
- doc/rdoc/classes/Mongrel/URIClassifier.src/M000036.html
|
|
116
|
-
- doc/rdoc/classes/Mongrel/URIClassifier.src/M000037.html
|
|
117
|
-
- doc/rdoc/classes/Mongrel/URIClassifier.src/M000038.html
|
|
86
|
+
- doc/rdoc/classes/Mongrel/HttpServer.src/M000022.html
|
|
87
|
+
- doc/rdoc/classes/Mongrel/HttpServer.src/M000023.html
|
|
88
|
+
- doc/rdoc/classes/Mongrel/HttpServer.src/M000024.html
|
|
89
|
+
- doc/rdoc/classes/Mongrel/HttpServer.src/M000025.html
|
|
90
|
+
- doc/rdoc/classes/Mongrel/HttpServer.src/M000026.html
|
|
91
|
+
- doc/rdoc/classes/Mongrel/HttpServer.src/M000027.html
|
|
92
|
+
- doc/rdoc/classes/Mongrel/URIClassifier.src/M000030.html
|
|
93
|
+
- doc/rdoc/classes/Mongrel/URIClassifier.src/M000031.html
|
|
94
|
+
- doc/rdoc/classes/Mongrel/URIClassifier.src/M000032.html
|
|
95
|
+
- doc/rdoc/classes/Mongrel/URIClassifier.src/M000033.html
|
|
118
96
|
- doc/rdoc/classes/PluginFactory.src/M000002.html
|
|
119
97
|
- doc/rdoc/classes/PluginFactory.src/M000003.html
|
|
120
98
|
- doc/rdoc/classes/PluginFactory.src/M000004.html
|
|
@@ -144,8 +122,10 @@ files:
|
|
|
144
122
|
- lib/mongrel
|
|
145
123
|
- lib/mongrel.rb
|
|
146
124
|
- lib/pluginfactory.rb
|
|
125
|
+
- lib/mongrel/cgi.rb
|
|
147
126
|
- lib/mongrel/command
|
|
148
127
|
- lib/mongrel/command.rb
|
|
128
|
+
- lib/mongrel/handlers.rb
|
|
149
129
|
- ext/http11/ext_help.h
|
|
150
130
|
- ext/http11/http11_parser.h
|
|
151
131
|
- ext/http11/tst.h
|
|
@@ -158,6 +138,8 @@ files:
|
|
|
158
138
|
- ext/http11/tst_insert.c
|
|
159
139
|
- ext/http11/tst_search.c
|
|
160
140
|
- ext/http11/extconf.rb
|
|
141
|
+
- examples/mongrel_simple_ctrl.rb
|
|
142
|
+
- examples/mongrel_simple_service.rb
|
|
161
143
|
- examples/simpletest.rb
|
|
162
144
|
- examples/webrick_compare.rb
|
|
163
145
|
- examples/camping/blog.rb
|