mongrel 0.2.2 → 0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/README +27 -25
- data/Rakefile +2 -3
- data/bin/mongrel_rails +114 -0
- data/doc/rdoc/classes/Mongrel.html +30 -0
- data/doc/rdoc/classes/Mongrel.src/M000001.html +18 -0
- data/doc/rdoc/classes/Mongrel/Const.html +2 -2
- data/doc/rdoc/classes/Mongrel/DirHandler.html +84 -21
- data/doc/rdoc/classes/Mongrel/DirHandler.src/M000009.html +7 -18
- data/doc/rdoc/classes/Mongrel/DirHandler.src/M000010.html +26 -9
- data/doc/rdoc/classes/Mongrel/DirHandler.src/M000011.html +27 -26
- data/doc/rdoc/classes/Mongrel/DirHandler.src/M000012.html +31 -0
- data/doc/rdoc/classes/Mongrel/DirHandler.src/M000013.html +38 -0
- data/doc/rdoc/classes/Mongrel/Error404Handler.html +10 -10
- data/doc/rdoc/classes/Mongrel/Error404Handler.src/{M000028.html → M000033.html} +4 -4
- data/doc/rdoc/classes/Mongrel/Error404Handler.src/{M000029.html → M000034.html} +4 -4
- data/doc/rdoc/classes/Mongrel/HeaderOut.html +10 -10
- data/doc/rdoc/classes/Mongrel/HeaderOut.src/{M000017.html → M000019.html} +4 -4
- data/doc/rdoc/classes/Mongrel/HeaderOut.src/{M000018.html → M000020.html} +7 -7
- data/doc/rdoc/classes/Mongrel/HttpHandler.html +5 -5
- data/doc/rdoc/classes/Mongrel/HttpHandler.src/{M000023.html → M000025.html} +3 -3
- data/doc/rdoc/classes/Mongrel/HttpParser.html +35 -35
- data/doc/rdoc/classes/Mongrel/HttpParser.src/M000002.html +5 -6
- data/doc/rdoc/classes/Mongrel/HttpParser.src/M000003.html +7 -7
- data/doc/rdoc/classes/Mongrel/HttpParser.src/M000004.html +8 -20
- data/doc/rdoc/classes/Mongrel/HttpParser.src/M000005.html +20 -6
- data/doc/rdoc/classes/Mongrel/HttpParser.src/M000006.html +5 -5
- data/doc/rdoc/classes/Mongrel/HttpParser.src/M000007.html +5 -6
- data/doc/rdoc/classes/Mongrel/HttpParser.src/{M000001.html → M000008.html} +6 -6
- data/doc/rdoc/classes/Mongrel/HttpRequest.html +5 -5
- data/doc/rdoc/classes/Mongrel/HttpRequest.src/{M000030.html → M000035.html} +17 -17
- data/doc/rdoc/classes/Mongrel/HttpResponse.html +66 -21
- data/doc/rdoc/classes/Mongrel/HttpResponse.src/M000026.html +8 -6
- data/doc/rdoc/classes/Mongrel/HttpResponse.src/M000027.html +7 -12
- data/doc/rdoc/classes/Mongrel/HttpResponse.src/M000028.html +19 -0
- data/doc/rdoc/classes/Mongrel/HttpResponse.src/M000029.html +18 -0
- data/doc/rdoc/classes/Mongrel/HttpResponse.src/M000030.html +20 -0
- data/doc/rdoc/classes/Mongrel/HttpResponse.src/M000031.html +21 -0
- data/doc/rdoc/classes/Mongrel/HttpResponse.src/M000032.html +20 -0
- data/doc/rdoc/classes/Mongrel/HttpServer.html +28 -28
- data/doc/rdoc/classes/Mongrel/HttpServer.src/M000014.html +18 -10
- data/doc/rdoc/classes/Mongrel/HttpServer.src/M000015.html +51 -5
- data/doc/rdoc/classes/Mongrel/HttpServer.src/M000016.html +9 -4
- data/doc/rdoc/classes/Mongrel/HttpServer.src/M000017.html +18 -0
- data/doc/rdoc/classes/Mongrel/HttpServer.src/M000018.html +18 -0
- data/doc/rdoc/classes/Mongrel/URIClassifier.html +31 -21
- data/doc/rdoc/classes/Mongrel/URIClassifier.src/M000021.html +18 -15
- data/doc/rdoc/classes/Mongrel/URIClassifier.src/M000022.html +25 -42
- data/doc/rdoc/classes/Mongrel/URIClassifier.src/M000023.html +36 -0
- data/doc/rdoc/classes/Mongrel/URIClassifier.src/M000024.html +84 -0
- data/doc/rdoc/created.rid +1 -1
- data/doc/rdoc/files/README.html +32 -42
- data/doc/rdoc/files/ext/http11/http11_c.html +1 -1
- data/doc/rdoc/files/lib/mongrel_rb.html +1 -1
- data/doc/rdoc/fr_method_index.html +35 -30
- data/examples/simpletest.rb +16 -6
- data/ext/http11/http11.c +19 -3
- data/ext/http11/tst_search.c +2 -3
- data/lib/mongrel.rb +108 -20
- data/test/test_uriclassifier.rb +22 -1
- metadata +25 -19
- data/doc/rdoc/classes/Mongrel/DirHandler.src/M000008.html +0 -20
- data/doc/rdoc/classes/Mongrel/HttpResponse.src/M000024.html +0 -21
- data/doc/rdoc/classes/Mongrel/HttpResponse.src/M000025.html +0 -20
- data/doc/rdoc/classes/Mongrel/HttpServer.src/M000012.html +0 -31
- data/doc/rdoc/classes/Mongrel/HttpServer.src/M000013.html +0 -64
- data/doc/rdoc/classes/Mongrel/URIClassifier.src/M000019.html +0 -39
- data/doc/rdoc/classes/Mongrel/URIClassifier.src/M000020.html +0 -51
- data/lib/#mongrel.rb# +0 -493
data/README
CHANGED
@@ -11,26 +11,31 @@ scream without too many portability issues.
|
|
11
11
|
|
12
12
|
== Status
|
13
13
|
|
14
|
-
The 0.
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
14
|
+
The 0.3 release is the first official release to start supporting Ruby on Rails
|
15
|
+
and to have a more complete DirHandler for serving directories of files. This release
|
16
|
+
is actually closer to a full functioning web server than the previous releases.
|
17
|
+
|
18
|
+
The Rails support is pretty rough right now, but check out the bin/mongrel_rails file,
|
19
|
+
which should be installed into your PATH if you use a gem. You should be able to
|
20
|
+
do the following to run your Rails applications:
|
21
|
+
|
22
|
+
> cd myrailsapp
|
23
|
+
> mongrel_rails 0.0.0.0 3000
|
24
|
+
|
25
|
+
And then hit http://localhost:3000/ to see your app. One thing is that if you have
|
26
|
+
a public/index.html file then you'll get that served instead of your Rails application.
|
27
|
+
|
28
|
+
People with the daemons gem installed will see that mongrel_rails will go into the
|
29
|
+
background. You can kill it with:
|
30
|
+
|
31
|
+
> kill -TERM `cat log/mongrel-3000.pid`
|
32
|
+
|
33
|
+
Where "3000" is whatever port you told it to listen on when you ran it.
|
34
|
+
|
35
|
+
The file serving is still a little rough and the redirects might not work well, but
|
36
|
+
try it out and tell me about any weird errors. File uploads will definitely have some
|
37
|
+
problems.
|
38
|
+
|
34
39
|
|
35
40
|
== Install
|
36
41
|
|
@@ -43,6 +48,7 @@ who can build it for you.
|
|
43
48
|
|
44
49
|
Finally, the source includes a setup.rb for those who hate RubyGems.
|
45
50
|
|
51
|
+
|
46
52
|
== Usage
|
47
53
|
|
48
54
|
The examples/simpletest.rb file has the following code as the simplest
|
@@ -104,12 +110,8 @@ With the core of Mongrel completed I'm now turning to the next set of features
|
|
104
110
|
to make Mongrel useful for hosting web applications in a heavily utilized
|
105
111
|
production environment. Right now I'm looking at:
|
106
112
|
|
107
|
-
* Fast static file handling with directory listings.
|
108
|
-
* More testing on more platforms.
|
109
113
|
* An idea I've had for an insane caching handler which could speed up quite a
|
110
114
|
few deployments.
|
111
|
-
* General little things most web servers need.
|
112
|
-
* A nice management system or interface for controlling mongrel servers.
|
113
115
|
|
114
116
|
Overall though the goal of Mongrel is to be just enough HTTP to serve a Ruby
|
115
117
|
web application that sits behind a more complete web server. Everything
|
@@ -117,7 +119,7 @@ in the next will focus on actually hosting the major web frameworks for Ruby:
|
|
117
119
|
|
118
120
|
* Camping -- because it's already done (thanks Why).
|
119
121
|
* Ruby on Rails -- that's where my bread is buttered right now.
|
120
|
-
* Nitro --
|
122
|
+
* Nitro -- Nitro folks have already hooked this up and started using it. Nice.
|
121
123
|
* ????? -- Others people might be interested in.
|
122
124
|
|
123
125
|
== Contact
|
data/Rakefile
CHANGED
@@ -9,8 +9,7 @@ include FileUtils
|
|
9
9
|
|
10
10
|
setup_tests
|
11
11
|
setup_clean ["ext/http11/Makefile", "pkg", "lib/*.bundle", "ext/http11/*.bundle"]
|
12
|
-
setup_rdoc ['README', 'LICENSE', 'COPYING', 'lib/*.rb',
|
13
|
-
'doc/**/*.rdoc', 'ext/http11/http11.c']
|
12
|
+
setup_rdoc ['README', 'LICENSE', 'COPYING', 'lib/*.rb', 'doc/**/*.rdoc', 'ext/http11/http11.c']
|
14
13
|
|
15
14
|
desc "Does a full compile, test run"
|
16
15
|
task :default => [:compile, :test]
|
@@ -27,4 +26,4 @@ setup_extension("http11", "http11")
|
|
27
26
|
|
28
27
|
summary = "An experimental fast simple web server for Ruby."
|
29
28
|
test_file = "test/test_ws.rb"
|
30
|
-
setup_gem("mongrel", "0.
|
29
|
+
setup_gem("mongrel", "0.3", "Zed A. Shaw", summary, ['mongrel_rails'], test_file)
|
data/bin/mongrel_rails
ADDED
@@ -0,0 +1,114 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'mongrel'
|
3
|
+
require 'cgi'
|
4
|
+
begin
|
5
|
+
require 'daemons/daemonize'
|
6
|
+
HAVE_DAEMONS=true
|
7
|
+
rescue
|
8
|
+
HAVE_DAEMONS=false
|
9
|
+
end
|
10
|
+
|
11
|
+
|
12
|
+
class CGIFixed < ::CGI
|
13
|
+
public :env_table
|
14
|
+
attr_reader :options
|
15
|
+
|
16
|
+
def initialize(params, data, out, *args)
|
17
|
+
@env_table = params
|
18
|
+
@args = *args
|
19
|
+
@input = StringIO.new(data)
|
20
|
+
@out = out
|
21
|
+
@options = {}
|
22
|
+
super(*args)
|
23
|
+
end
|
24
|
+
|
25
|
+
def header(options = "text/html")
|
26
|
+
if options.class == Hash
|
27
|
+
# passing in a header so need to keep the status around and other options
|
28
|
+
@options = options
|
29
|
+
end
|
30
|
+
|
31
|
+
super(options)
|
32
|
+
end
|
33
|
+
|
34
|
+
def status
|
35
|
+
s = @options["Status"] || @options["status"]
|
36
|
+
s[0 .. s.index(' ')] || "200"
|
37
|
+
end
|
38
|
+
|
39
|
+
def args
|
40
|
+
@args
|
41
|
+
end
|
42
|
+
|
43
|
+
def env_table
|
44
|
+
@env_table
|
45
|
+
end
|
46
|
+
|
47
|
+
def stdinput
|
48
|
+
@input
|
49
|
+
end
|
50
|
+
|
51
|
+
def stdoutput
|
52
|
+
@out
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
|
57
|
+
class RailsHandler < Mongrel::HttpHandler
|
58
|
+
def initialize(dir)
|
59
|
+
@files = Mongrel::DirHandler.new(dir,false)
|
60
|
+
@guard = Mutex.new
|
61
|
+
end
|
62
|
+
|
63
|
+
def process(request, response)
|
64
|
+
# not static, need to talk to rails
|
65
|
+
return if response.socket.closed?
|
66
|
+
|
67
|
+
if @files.can_serve(request.params["PATH_INFO"])
|
68
|
+
@files.process(request,response)
|
69
|
+
else
|
70
|
+
cgi = CGIFixed.new(request.params, request.body, response.socket)
|
71
|
+
begin
|
72
|
+
|
73
|
+
@guard.synchronize do
|
74
|
+
# Rails is not thread safe so must be run entirely within synchronize
|
75
|
+
Dispatcher.dispatch(cgi, ActionController::CgiRequest::DEFAULT_SESSION_OPTIONS, response.body)
|
76
|
+
end
|
77
|
+
|
78
|
+
response.status = cgi.status
|
79
|
+
response.send_status
|
80
|
+
response.send_body
|
81
|
+
rescue Object => rails_error
|
82
|
+
STDERR.puts "calling Dispatcher.dispatch #{rails_error}"
|
83
|
+
STDERR.puts rails_error.backtrace.join("\n")
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
|
90
|
+
if ARGV.length != 2
|
91
|
+
STDERR.puts "usage: mongrel_rails <host> <port>"
|
92
|
+
exit(1)
|
93
|
+
end
|
94
|
+
|
95
|
+
# store this for later since Daemonize insists on going to the / root
|
96
|
+
cwd = Dir.pwd
|
97
|
+
|
98
|
+
if HAVE_DAEMONS
|
99
|
+
STDERR.puts "Running Mongrel in the background. See log/mongrel.log for errors."
|
100
|
+
Daemonize.daemonize(log_file=File.join(cwd,"log","mongrel.log"))
|
101
|
+
else
|
102
|
+
STDERR.puts "Unable to daemonize. Running in foreground. Use CTRL-C to stop."
|
103
|
+
end
|
104
|
+
|
105
|
+
# and go back
|
106
|
+
Dir.chdir(cwd) do
|
107
|
+
require 'config/environment'
|
108
|
+
open(File.join(cwd,"log/mongrel-#{ARGV[1]}.pid"),"w") {|f| f.write(Process.pid) }
|
109
|
+
h = Mongrel::HttpServer.new(ARGV[0], ARGV[1])
|
110
|
+
h.register("/", RailsHandler.new(File.join(cwd,"public")))
|
111
|
+
h.run
|
112
|
+
|
113
|
+
h.acceptor.join
|
114
|
+
end
|
@@ -89,6 +89,13 @@ to service web application requests fast as possible.
|
|
89
89
|
|
90
90
|
</div>
|
91
91
|
|
92
|
+
<div id="method-list">
|
93
|
+
<h3 class="section-bar">Methods</h3>
|
94
|
+
|
95
|
+
<div class="name-list">
|
96
|
+
<a href="#M000001">add_mime_type</a>
|
97
|
+
</div>
|
98
|
+
</div>
|
92
99
|
|
93
100
|
</div>
|
94
101
|
|
@@ -141,6 +148,29 @@ href="Mongrel/Const.html">Mongrel::Const</a>.
|
|
141
148
|
|
142
149
|
|
143
150
|
<!-- if method_list -->
|
151
|
+
<div id="methods">
|
152
|
+
<h3 class="section-bar">Public Instance methods</h3>
|
153
|
+
|
154
|
+
<div id="method-M000001" class="method-detail">
|
155
|
+
<a name="M000001"></a>
|
156
|
+
|
157
|
+
<div class="method-heading">
|
158
|
+
<a href="Mongrel.src/M000001.html" target="Code" class="method-signature"
|
159
|
+
onclick="popupCode('Mongrel.src/M000001.html');return false;">
|
160
|
+
<span class="method-name">add_mime_type</span><span class="method-args">(extension, type)</span>
|
161
|
+
</a>
|
162
|
+
</div>
|
163
|
+
|
164
|
+
<div class="method-description">
|
165
|
+
<p>
|
166
|
+
There is a small number of default mime types for extensions, but this lets
|
167
|
+
you add any others you’ll need when serving content.
|
168
|
+
</p>
|
169
|
+
</div>
|
170
|
+
</div>
|
171
|
+
|
172
|
+
|
173
|
+
</div>
|
144
174
|
|
145
175
|
|
146
176
|
</div>
|
@@ -0,0 +1,18 @@
|
|
1
|
+
<?xml version="1.0" encoding="iso-8859-1"?>
|
2
|
+
<!DOCTYPE html
|
3
|
+
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
4
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
5
|
+
|
6
|
+
<html>
|
7
|
+
<head>
|
8
|
+
<title>add_mime_type (Mongrel)</title>
|
9
|
+
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
10
|
+
<link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
|
11
|
+
</head>
|
12
|
+
<body class="standalone-code">
|
13
|
+
<pre> <span class="ruby-comment cmt"># File lib/mongrel.rb, line 577</span>
|
14
|
+
577: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_mime_type</span>(<span class="ruby-identifier">extension</span>, <span class="ruby-identifier">type</span>)
|
15
|
+
578: <span class="ruby-constant">MIME_TYPES</span>[<span class="ruby-identifier">extension</span>] = <span class="ruby-identifier">type</span>
|
16
|
+
579: <span class="ruby-keyword kw">end</span></pre>
|
17
|
+
</body>
|
18
|
+
</html>
|
@@ -230,7 +230,7 @@ DNS resolves. It is only here for completeness for the CGI standard.
|
|
230
230
|
<td width="3em"> </td>
|
231
231
|
<td class="context-item-desc">
|
232
232
|
The name/host of our server as given by the <a
|
233
|
-
href="HttpServer.html#
|
233
|
+
href="HttpServer.html#M000014">HttpServer.new</a>(host,port) call.
|
234
234
|
|
235
235
|
</td>
|
236
236
|
</tr>
|
@@ -241,7 +241,7 @@ href="HttpServer.html#M000012">HttpServer.new</a>(host,port) call.
|
|
241
241
|
<td width="3em"> </td>
|
242
242
|
<td class="context-item-desc">
|
243
243
|
The port of our server as given by the <a
|
244
|
-
href="HttpServer.html#
|
244
|
+
href="HttpServer.html#M000014">HttpServer.new</a>(host,port) call.
|
245
245
|
|
246
246
|
</td>
|
247
247
|
</tr>
|
@@ -103,10 +103,11 @@ than it simply gives a 404.
|
|
103
103
|
<h3 class="section-bar">Methods</h3>
|
104
104
|
|
105
105
|
<div class="name-list">
|
106
|
-
<a href="#
|
107
|
-
<a href="#
|
108
|
-
<a href="#
|
109
|
-
<a href="#
|
106
|
+
<a href="#M000010">can_serve</a>
|
107
|
+
<a href="#M000009">new</a>
|
108
|
+
<a href="#M000013">process</a>
|
109
|
+
<a href="#M000011">send_dir_listing</a>
|
110
|
+
<a href="#M000012">send_file</a>
|
110
111
|
</div>
|
111
112
|
</div>
|
112
113
|
|
@@ -118,9 +119,35 @@ than it simply gives a 404.
|
|
118
119
|
<div id="section">
|
119
120
|
|
120
121
|
|
122
|
+
<div id="constants-list">
|
123
|
+
<h3 class="section-bar">Constants</h3>
|
124
|
+
|
125
|
+
<div class="name-list">
|
126
|
+
<table summary="Constants">
|
127
|
+
<tr class="top-aligned-row context-row">
|
128
|
+
<td class="context-item-name">MIME_TYPES</td>
|
129
|
+
<td>=</td>
|
130
|
+
<td class="context-item-value">{ ".css" => "text/css", ".gif" => "image/gif", ".htm" => "text/html", ".html" => "text/html", ".jpeg" => "image/jpeg", ".jpg" => "image/jpeg", ".js" => "text/javascript", ".png" => "image/png", ".swf" => "application/x-shockwave-flash", ".txt" => "text/plain"</td>
|
131
|
+
</tr>
|
132
|
+
</table>
|
133
|
+
</div>
|
134
|
+
</div>
|
135
|
+
|
121
136
|
|
122
137
|
|
138
|
+
<div id="attribute-list">
|
139
|
+
<h3 class="section-bar">Attributes</h3>
|
123
140
|
|
141
|
+
<div class="name-list">
|
142
|
+
<table>
|
143
|
+
<tr class="top-aligned-row context-row">
|
144
|
+
<td class="context-item-name">path</td>
|
145
|
+
<td class="context-item-value"> [R] </td>
|
146
|
+
<td class="context-item-desc"></td>
|
147
|
+
</tr>
|
148
|
+
</table>
|
149
|
+
</div>
|
150
|
+
</div>
|
124
151
|
|
125
152
|
|
126
153
|
|
@@ -128,61 +155,97 @@ than it simply gives a 404.
|
|
128
155
|
<div id="methods">
|
129
156
|
<h3 class="section-bar">Public Class methods</h3>
|
130
157
|
|
131
|
-
<div id="method-
|
132
|
-
<a name="
|
158
|
+
<div id="method-M000009" class="method-detail">
|
159
|
+
<a name="M000009"></a>
|
133
160
|
|
134
161
|
<div class="method-heading">
|
135
|
-
<a href="DirHandler.src/
|
136
|
-
onclick="popupCode('DirHandler.src/
|
137
|
-
<span class="method-name">new</span><span class="method-args">(path, listing_allowed=true)</span>
|
162
|
+
<a href="DirHandler.src/M000009.html" target="Code" class="method-signature"
|
163
|
+
onclick="popupCode('DirHandler.src/M000009.html');return false;">
|
164
|
+
<span class="method-name">new</span><span class="method-args">(path, listing_allowed=true, index_html="index.html")</span>
|
138
165
|
</a>
|
139
166
|
</div>
|
140
167
|
|
141
168
|
<div class="method-description">
|
169
|
+
<p>
|
170
|
+
You give it the path to the directory root and an (optional)
|
171
|
+
</p>
|
142
172
|
</div>
|
143
173
|
</div>
|
144
174
|
|
145
175
|
<h3 class="section-bar">Public Instance methods</h3>
|
146
176
|
|
147
|
-
<div id="method-
|
148
|
-
<a name="
|
177
|
+
<div id="method-M000010" class="method-detail">
|
178
|
+
<a name="M000010"></a>
|
149
179
|
|
150
180
|
<div class="method-heading">
|
151
|
-
<a href="DirHandler.src/
|
152
|
-
onclick="popupCode('DirHandler.src/
|
181
|
+
<a href="DirHandler.src/M000010.html" target="Code" class="method-signature"
|
182
|
+
onclick="popupCode('DirHandler.src/M000010.html');return false;">
|
183
|
+
<span class="method-name">can_serve</span><span class="method-args">(path_info)</span>
|
184
|
+
</a>
|
185
|
+
</div>
|
186
|
+
|
187
|
+
<div class="method-description">
|
188
|
+
<p>
|
189
|
+
Checks if the given path can be served and returns the full path (or nil if
|
190
|
+
not).
|
191
|
+
</p>
|
192
|
+
</div>
|
193
|
+
</div>
|
194
|
+
|
195
|
+
<div id="method-M000013" class="method-detail">
|
196
|
+
<a name="M000013"></a>
|
197
|
+
|
198
|
+
<div class="method-heading">
|
199
|
+
<a href="DirHandler.src/M000013.html" target="Code" class="method-signature"
|
200
|
+
onclick="popupCode('DirHandler.src/M000013.html');return false;">
|
153
201
|
<span class="method-name">process</span><span class="method-args">(request, response)</span>
|
154
202
|
</a>
|
155
203
|
</div>
|
156
204
|
|
157
205
|
<div class="method-description">
|
206
|
+
<p>
|
207
|
+
Process the request to either serve a file or a directory listing if
|
208
|
+
allowed (based on the listing_allowed paramter to the constructor).
|
209
|
+
</p>
|
158
210
|
</div>
|
159
211
|
</div>
|
160
212
|
|
161
|
-
<div id="method-
|
162
|
-
<a name="
|
213
|
+
<div id="method-M000011" class="method-detail">
|
214
|
+
<a name="M000011"></a>
|
163
215
|
|
164
216
|
<div class="method-heading">
|
165
|
-
<a href="DirHandler.src/
|
166
|
-
onclick="popupCode('DirHandler.src/
|
217
|
+
<a href="DirHandler.src/M000011.html" target="Code" class="method-signature"
|
218
|
+
onclick="popupCode('DirHandler.src/M000011.html');return false;">
|
167
219
|
<span class="method-name">send_dir_listing</span><span class="method-args">(base, dir, response)</span>
|
168
220
|
</a>
|
169
221
|
</div>
|
170
222
|
|
171
223
|
<div class="method-description">
|
224
|
+
<p>
|
225
|
+
Returns a simplistic directory listing if they’re enabled, otherwise
|
226
|
+
a 403. Base is the base URI from the REQUEST_URI, dir is the directory to
|
227
|
+
serve on the file system (comes from <a
|
228
|
+
href="DirHandler.html#M000010">can_serve</a>()), and response is the <a
|
229
|
+
href="HttpResponse.html">HttpResponse</a> object to send the results on.
|
230
|
+
</p>
|
172
231
|
</div>
|
173
232
|
</div>
|
174
233
|
|
175
|
-
<div id="method-
|
176
|
-
<a name="
|
234
|
+
<div id="method-M000012" class="method-detail">
|
235
|
+
<a name="M000012"></a>
|
177
236
|
|
178
237
|
<div class="method-heading">
|
179
|
-
<a href="DirHandler.src/
|
180
|
-
onclick="popupCode('DirHandler.src/
|
238
|
+
<a href="DirHandler.src/M000012.html" target="Code" class="method-signature"
|
239
|
+
onclick="popupCode('DirHandler.src/M000012.html');return false;">
|
181
240
|
<span class="method-name">send_file</span><span class="method-args">(req, response)</span>
|
182
241
|
</a>
|
183
242
|
</div>
|
184
243
|
|
185
244
|
<div class="method-description">
|
245
|
+
<p>
|
246
|
+
Sends the contents of a file back to the user. Not terribly efficient since
|
247
|
+
it’s opening and closing the file for each read.
|
248
|
+
</p>
|
186
249
|
</div>
|
187
250
|
</div>
|
188
251
|
|