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.
Files changed (72) hide show
  1. data/README +4 -3
  2. data/Rakefile +7 -5
  3. data/bin/mongrel_rails +5 -4
  4. data/bin/mongrel_rails_service +237 -0
  5. data/bin/mongrel_rails_svc +194 -0
  6. data/doc/rdoc/classes/Mongrel.html +1 -4
  7. data/doc/rdoc/classes/Mongrel/Const.html +13 -3
  8. data/doc/rdoc/classes/Mongrel/HeaderOut.html +10 -10
  9. data/doc/rdoc/classes/Mongrel/HeaderOut.src/{M000033.html → M000028.html} +4 -4
  10. data/doc/rdoc/classes/Mongrel/HeaderOut.src/{M000034.html → M000029.html} +7 -7
  11. data/doc/rdoc/classes/Mongrel/HttpRequest.html +5 -5
  12. data/doc/rdoc/classes/Mongrel/HttpRequest.src/M000041.html +39 -0
  13. data/doc/rdoc/classes/Mongrel/HttpResponse.html +36 -36
  14. data/doc/rdoc/classes/Mongrel/HttpResponse.src/M000034.html +21 -0
  15. data/doc/rdoc/classes/Mongrel/HttpResponse.src/{M000041.html → M000035.html} +6 -6
  16. data/doc/rdoc/classes/Mongrel/HttpResponse.src/{M000042.html → M000036.html} +5 -5
  17. data/doc/rdoc/classes/Mongrel/HttpResponse.src/{M000043.html → M000037.html} +5 -5
  18. data/doc/rdoc/classes/Mongrel/HttpResponse.src/{M000044.html → M000038.html} +6 -6
  19. data/doc/rdoc/classes/Mongrel/HttpResponse.src/{M000045.html → M000039.html} +6 -6
  20. data/doc/rdoc/classes/Mongrel/HttpResponse.src/M000040.html +7 -8
  21. data/doc/rdoc/classes/Mongrel/HttpServer.html +47 -28
  22. data/doc/rdoc/classes/Mongrel/HttpServer.src/M000022.html +33 -0
  23. data/doc/rdoc/classes/Mongrel/HttpServer.src/M000023.html +57 -0
  24. data/doc/rdoc/classes/Mongrel/HttpServer.src/M000024.html +46 -0
  25. data/doc/rdoc/classes/Mongrel/HttpServer.src/{M000031.html → M000025.html} +4 -4
  26. data/doc/rdoc/classes/Mongrel/HttpServer.src/{M000032.html → M000026.html} +4 -4
  27. data/doc/rdoc/classes/Mongrel/HttpServer.src/M000027.html +19 -0
  28. data/doc/rdoc/classes/Mongrel/{HttpHandler.html → StopServer.html} +4 -33
  29. data/doc/rdoc/classes/Mongrel/URIClassifier.html +22 -23
  30. data/doc/rdoc/classes/Mongrel/URIClassifier.src/{M000035.html → M000030.html} +0 -0
  31. data/doc/rdoc/classes/Mongrel/URIClassifier.src/{M000036.html → M000031.html} +0 -0
  32. data/doc/rdoc/classes/Mongrel/URIClassifier.src/{M000037.html → M000032.html} +0 -0
  33. data/doc/rdoc/classes/Mongrel/URIClassifier.src/{M000038.html → M000033.html} +0 -0
  34. data/doc/rdoc/created.rid +1 -1
  35. data/doc/rdoc/files/README.html +9 -7
  36. data/doc/rdoc/files/lib/mongrel_rb.html +3 -3
  37. data/doc/rdoc/fr_class_index.html +1 -4
  38. data/doc/rdoc/fr_method_index.html +20 -37
  39. data/examples/mongrel_simple_ctrl.rb +92 -0
  40. data/examples/mongrel_simple_service.rb +116 -0
  41. data/examples/simpletest.rb +3 -1
  42. data/ext/http11/http11_parser.c +176 -263
  43. data/lib/mongrel.rb +56 -343
  44. data/lib/mongrel/cgi.rb +147 -0
  45. data/lib/mongrel/handlers.rb +180 -0
  46. metadata +28 -46
  47. data/doc/rdoc/classes/Mongrel/CGIWrapper.html +0 -346
  48. data/doc/rdoc/classes/Mongrel/CGIWrapper.src/M000047.html +0 -24
  49. data/doc/rdoc/classes/Mongrel/CGIWrapper.src/M000048.html +0 -48
  50. data/doc/rdoc/classes/Mongrel/CGIWrapper.src/M000049.html +0 -34
  51. data/doc/rdoc/classes/Mongrel/CGIWrapper.src/M000050.html +0 -27
  52. data/doc/rdoc/classes/Mongrel/CGIWrapper.src/M000051.html +0 -26
  53. data/doc/rdoc/classes/Mongrel/CGIWrapper.src/M000052.html +0 -18
  54. data/doc/rdoc/classes/Mongrel/CGIWrapper.src/M000053.html +0 -18
  55. data/doc/rdoc/classes/Mongrel/CGIWrapper.src/M000054.html +0 -18
  56. data/doc/rdoc/classes/Mongrel/CGIWrapper.src/M000055.html +0 -19
  57. data/doc/rdoc/classes/Mongrel/DirHandler.html +0 -283
  58. data/doc/rdoc/classes/Mongrel/DirHandler.src/M000022.html +0 -20
  59. data/doc/rdoc/classes/Mongrel/DirHandler.src/M000023.html +0 -42
  60. data/doc/rdoc/classes/Mongrel/DirHandler.src/M000024.html +0 -40
  61. data/doc/rdoc/classes/Mongrel/DirHandler.src/M000025.html +0 -31
  62. data/doc/rdoc/classes/Mongrel/DirHandler.src/M000026.html +0 -38
  63. data/doc/rdoc/classes/Mongrel/DirHandler.src/M000027.html +0 -18
  64. data/doc/rdoc/classes/Mongrel/Error404Handler.html +0 -171
  65. data/doc/rdoc/classes/Mongrel/Error404Handler.src/M000056.html +0 -18
  66. data/doc/rdoc/classes/Mongrel/Error404Handler.src/M000057.html +0 -18
  67. data/doc/rdoc/classes/Mongrel/HttpHandler.src/M000039.html +0 -17
  68. data/doc/rdoc/classes/Mongrel/HttpRequest.src/M000058.html +0 -31
  69. data/doc/rdoc/classes/Mongrel/HttpResponse.src/M000046.html +0 -20
  70. data/doc/rdoc/classes/Mongrel/HttpServer.src/M000028.html +0 -38
  71. data/doc/rdoc/classes/Mongrel/HttpServer.src/M000029.html +0 -64
  72. data/doc/rdoc/classes/Mongrel/HttpServer.src/M000030.html +0 -23
@@ -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.5
7
- date: 2006-02-18 00:00:00 -05:00
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/CGIWrapper.src/M000047.html
75
- - doc/rdoc/classes/Mongrel/CGIWrapper.src/M000048.html
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/M000058.html
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/HttpResponse.src/M000041.html
104
- - doc/rdoc/classes/Mongrel/HttpResponse.src/M000042.html
105
- - doc/rdoc/classes/Mongrel/HttpResponse.src/M000043.html
106
- - doc/rdoc/classes/Mongrel/HttpResponse.src/M000044.html
107
- - doc/rdoc/classes/Mongrel/HttpResponse.src/M000045.html
108
- - doc/rdoc/classes/Mongrel/HttpResponse.src/M000046.html
109
- - doc/rdoc/classes/Mongrel/HttpServer.src/M000028.html
110
- - doc/rdoc/classes/Mongrel/HttpServer.src/M000029.html
111
- - doc/rdoc/classes/Mongrel/HttpServer.src/M000030.html
112
- - doc/rdoc/classes/Mongrel/HttpServer.src/M000031.html
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