mongrel 0.2.0
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/COPYING +504 -0
- data/LICENSE +504 -0
- data/README +117 -0
- data/Rakefile +30 -0
- data/doc/rdoc/classes/Mongrel.html +144 -0
- data/doc/rdoc/classes/Mongrel/Error404Handler.html +171 -0
- data/doc/rdoc/classes/Mongrel/Error404Handler.src/M000023.html +18 -0
- data/doc/rdoc/classes/Mongrel/Error404Handler.src/M000024.html +18 -0
- data/doc/rdoc/classes/Mongrel/HeaderOut.html +167 -0
- data/doc/rdoc/classes/Mongrel/HeaderOut.src/M000013.html +18 -0
- data/doc/rdoc/classes/Mongrel/HeaderOut.src/M000014.html +21 -0
- data/doc/rdoc/classes/Mongrel/HttpHandler.html +159 -0
- data/doc/rdoc/classes/Mongrel/HttpHandler.src/M000019.html +17 -0
- data/doc/rdoc/classes/Mongrel/HttpParser.html +271 -0
- data/doc/rdoc/classes/Mongrel/HttpParser.src/M000001.html +28 -0
- data/doc/rdoc/classes/Mongrel/HttpParser.src/M000002.html +29 -0
- data/doc/rdoc/classes/Mongrel/HttpParser.src/M000003.html +29 -0
- data/doc/rdoc/classes/Mongrel/HttpParser.src/M000004.html +41 -0
- data/doc/rdoc/classes/Mongrel/HttpParser.src/M000005.html +27 -0
- data/doc/rdoc/classes/Mongrel/HttpParser.src/M000006.html +27 -0
- data/doc/rdoc/classes/Mongrel/HttpParser.src/M000007.html +28 -0
- data/doc/rdoc/classes/Mongrel/HttpRequest.html +177 -0
- data/doc/rdoc/classes/Mongrel/HttpRequest.src/M000025.html +30 -0
- data/doc/rdoc/classes/Mongrel/HttpResponse.html +202 -0
- data/doc/rdoc/classes/Mongrel/HttpResponse.src/M000020.html +21 -0
- data/doc/rdoc/classes/Mongrel/HttpResponse.src/M000021.html +20 -0
- data/doc/rdoc/classes/Mongrel/HttpResponse.src/M000022.html +25 -0
- data/doc/rdoc/classes/Mongrel/HttpServer.html +336 -0
- data/doc/rdoc/classes/Mongrel/HttpServer.src/M000008.html +26 -0
- data/doc/rdoc/classes/Mongrel/HttpServer.src/M000009.html +58 -0
- data/doc/rdoc/classes/Mongrel/HttpServer.src/M000010.html +22 -0
- data/doc/rdoc/classes/Mongrel/HttpServer.src/M000011.html +18 -0
- data/doc/rdoc/classes/Mongrel/HttpServer.src/M000012.html +18 -0
- data/doc/rdoc/classes/Mongrel/URIClassifier.html +257 -0
- data/doc/rdoc/classes/Mongrel/URIClassifier.src/M000015.html +54 -0
- data/doc/rdoc/classes/Mongrel/URIClassifier.src/M000016.html +50 -0
- data/doc/rdoc/classes/Mongrel/URIClassifier.src/M000017.html +36 -0
- data/doc/rdoc/classes/Mongrel/URIClassifier.src/M000018.html +73 -0
- data/doc/rdoc/created.rid +1 -0
- data/doc/rdoc/files/COPYING.html +756 -0
- data/doc/rdoc/files/LICENSE.html +756 -0
- data/doc/rdoc/files/README.html +273 -0
- data/doc/rdoc/files/ext/http11/http11_c.html +101 -0
- data/doc/rdoc/files/lib/mongrel_rb.html +111 -0
- data/doc/rdoc/fr_class_index.html +35 -0
- data/doc/rdoc/fr_file_index.html +31 -0
- data/doc/rdoc/fr_method_index.html +51 -0
- data/doc/rdoc/index.html +24 -0
- data/doc/rdoc/rdoc-style.css +208 -0
- data/examples/camping/blog.rb +300 -0
- data/examples/camping/tepee.rb +168 -0
- data/examples/simpletest.rb +16 -0
- data/examples/webrick_compare.rb +20 -0
- data/ext/http11/MANIFEST +0 -0
- data/ext/http11/ext_help.h +14 -0
- data/ext/http11/extconf.rb +6 -0
- data/ext/http11/http11.c +436 -0
- data/ext/http11/http11_parser.c +918 -0
- data/ext/http11/http11_parser.h +37 -0
- data/ext/http11/tst.h +40 -0
- data/ext/http11/tst_cleanup.c +24 -0
- data/ext/http11/tst_delete.c +146 -0
- data/ext/http11/tst_grow_node_free_list.c +38 -0
- data/ext/http11/tst_init.c +41 -0
- data/ext/http11/tst_insert.c +192 -0
- data/ext/http11/tst_search.c +54 -0
- data/lib/mongrel.rb +298 -0
- data/setup.rb +1360 -0
- data/test/test_http11.rb +38 -0
- data/test/test_response.rb +44 -0
- data/test/test_uriclassifier.rb +104 -0
- data/test/test_ws.rb +33 -0
- data/tools/rakehelp.rb +99 -0
- metadata +132 -0
data/test/test_http11.rb
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'http11'
|
3
|
+
|
4
|
+
|
5
|
+
class HttpParserTest < Test::Unit::TestCase
|
6
|
+
|
7
|
+
def test_parse_simple
|
8
|
+
parser = HttpParser.new
|
9
|
+
req = {}
|
10
|
+
http = "GET / HTTP/1.1\r\n\r\n"
|
11
|
+
nread = parser.execute(req, http);
|
12
|
+
assert nread == http.length, "Failed to parse the full HTTP request"
|
13
|
+
assert parser.finished?, "Parser didn't finish"
|
14
|
+
assert !parser.error?, "Parser had error"
|
15
|
+
assert nread == parser.nread, "Number read returned from execute does not match"
|
16
|
+
parser.reset
|
17
|
+
assert parser.nread == 0, "Number read after reset should be 0"
|
18
|
+
end
|
19
|
+
|
20
|
+
|
21
|
+
def test_parse_error
|
22
|
+
parser = HttpParser.new
|
23
|
+
req = {}
|
24
|
+
bad_http = "GET / SsUTF/1.1"
|
25
|
+
|
26
|
+
error = false
|
27
|
+
begin
|
28
|
+
nread = parser.execute(req, bad_http)
|
29
|
+
rescue => details
|
30
|
+
error = true
|
31
|
+
end
|
32
|
+
|
33
|
+
assert error, "failed to throw exception"
|
34
|
+
assert !parser.finished?, "Parser shouldn't be finished"
|
35
|
+
assert parser.error?, "Parser SHOULD have error"
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'mongrel'
|
3
|
+
|
4
|
+
include Mongrel
|
5
|
+
|
6
|
+
class ResponseTest < Test::Unit::TestCase
|
7
|
+
|
8
|
+
def test_response_headers
|
9
|
+
out = StringIO.new
|
10
|
+
resp = HttpResponse.new(out)
|
11
|
+
resp.status = 200
|
12
|
+
resp.header["Accept"] = "text/plain"
|
13
|
+
resp.header["X-Whatever"] = "stuff"
|
14
|
+
resp.body.write("test")
|
15
|
+
resp.finished
|
16
|
+
|
17
|
+
assert out.length > 0, "output didn't have data"
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_response_200
|
21
|
+
io = StringIO.new
|
22
|
+
resp = HttpResponse.new(io)
|
23
|
+
resp.start do |head,out|
|
24
|
+
head["Accept"] = "text/plain"
|
25
|
+
out.write("tested")
|
26
|
+
out.write("hello!")
|
27
|
+
end
|
28
|
+
assert io.length > 0, "output didn't have data"
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_response_404
|
32
|
+
io = StringIO.new
|
33
|
+
|
34
|
+
resp = HttpResponse.new(io)
|
35
|
+
resp.start(404) do |head,out|
|
36
|
+
head['Accept'] = "text/plain"
|
37
|
+
out.write("NOT FOUND")
|
38
|
+
end
|
39
|
+
|
40
|
+
assert io.length > 0, "output didn't have data"
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
|
@@ -0,0 +1,104 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'net/http'
|
3
|
+
require 'mongrel'
|
4
|
+
require 'benchmark'
|
5
|
+
|
6
|
+
include Mongrel
|
7
|
+
|
8
|
+
class URIClassifierTest < Test::Unit::TestCase
|
9
|
+
|
10
|
+
def test_uri_finding
|
11
|
+
u = URIClassifier.new
|
12
|
+
u.register("/test", 1)
|
13
|
+
|
14
|
+
sn,pi,val = u.resolve("/test")
|
15
|
+
assert val != nil, "didn't resolve"
|
16
|
+
assert_equal 1, val, "wrong value"
|
17
|
+
assert_equal "/test",sn, "wrong SCRIPT_NAME"
|
18
|
+
end
|
19
|
+
|
20
|
+
|
21
|
+
def test_uri_prefix_ops
|
22
|
+
test = "/pre/fix/test"
|
23
|
+
prefix = "/pre"
|
24
|
+
|
25
|
+
u = URIClassifier.new
|
26
|
+
u.register(prefix,1)
|
27
|
+
|
28
|
+
sn,pi,val = u.resolve(test)
|
29
|
+
assert val != nil, "didn't resolve"
|
30
|
+
assert_equal prefix,sn, "wrong script name"
|
31
|
+
assert_equal test[sn.length .. -1],pi, "wrong path info"
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_not_finding
|
35
|
+
test = "/cant/find/me"
|
36
|
+
u = URIClassifier.new
|
37
|
+
u.register(test, 1)
|
38
|
+
|
39
|
+
sn,pi,val = u.resolve("/nope/not/here")
|
40
|
+
assert_equal nil,sn, "shouldn't be found"
|
41
|
+
assert_equal nil,pi, "shouldn't be found"
|
42
|
+
assert_equal nil,val, "shouldn't be found"
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_exceptions
|
46
|
+
u = URIClassifier.new
|
47
|
+
|
48
|
+
u.register("test", 1)
|
49
|
+
|
50
|
+
failed = false
|
51
|
+
begin
|
52
|
+
u.register("test", 1)
|
53
|
+
rescue => e
|
54
|
+
failed = true
|
55
|
+
end
|
56
|
+
|
57
|
+
assert failed, "it didn't fail as expected"
|
58
|
+
|
59
|
+
failed = false
|
60
|
+
begin
|
61
|
+
u.register("", 1)
|
62
|
+
rescue => e
|
63
|
+
failed = true
|
64
|
+
end
|
65
|
+
|
66
|
+
assert failed, "it didn't fail as expected"
|
67
|
+
end
|
68
|
+
|
69
|
+
|
70
|
+
def test_register_unregister
|
71
|
+
u = URIClassifier.new
|
72
|
+
|
73
|
+
100.times do
|
74
|
+
u.register("stuff", 1)
|
75
|
+
val = u.unregister("stuff")
|
76
|
+
assert_equal 1,val, "didn't get the right return value"
|
77
|
+
end
|
78
|
+
|
79
|
+
u.register("things",1)
|
80
|
+
sn,pi,val = u.resolve("things")
|
81
|
+
assert_equal 1, val, "result doesn't match"
|
82
|
+
|
83
|
+
u.unregister("things")
|
84
|
+
sn,pi,val = u.resolve("things")
|
85
|
+
assert_equal nil, val, "result should be nil"
|
86
|
+
|
87
|
+
end
|
88
|
+
|
89
|
+
|
90
|
+
def test_performance
|
91
|
+
count = 8500
|
92
|
+
u = URIClassifier.new
|
93
|
+
u.register("stuff",1)
|
94
|
+
|
95
|
+
res = Benchmark.measure { count.times { u.resolve("stuff") } }
|
96
|
+
|
97
|
+
reg_unreg = Benchmark.measure { count.times { u.register("other",1); u.unregister("other"); } }
|
98
|
+
|
99
|
+
puts "\nRESOLVE(#{count}): #{res}"
|
100
|
+
puts "REG_UNREG(#{count}): #{reg_unreg}"
|
101
|
+
end
|
102
|
+
|
103
|
+
end
|
104
|
+
|
data/test/test_ws.rb
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'net/http'
|
3
|
+
require 'mongrel'
|
4
|
+
require 'timeout'
|
5
|
+
|
6
|
+
include Mongrel;
|
7
|
+
|
8
|
+
class TestHandler < Mongrel::HttpHandler
|
9
|
+
attr_reader :ran_test
|
10
|
+
|
11
|
+
def process(request, response)
|
12
|
+
@ran_test = true
|
13
|
+
response.socket.write("HTTP/1.1 200 OK\r\nContent-Type: text/plain\r\n\r\nhello!\n")
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
|
18
|
+
class WSTest < Test::Unit::TestCase
|
19
|
+
|
20
|
+
def test_simple_server
|
21
|
+
h = HttpServer.new("0.0.0.0", 9998)
|
22
|
+
tester = TestHandler.new
|
23
|
+
h.register("/test", tester)
|
24
|
+
h.run
|
25
|
+
|
26
|
+
sleep(1)
|
27
|
+
res = Net::HTTP.get(URI.parse('http://localhost:9998/test'))
|
28
|
+
assert res != nil, "Didn't get a response"
|
29
|
+
assert tester.ran_test, "Handler didn't really run"
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
|
data/tools/rakehelp.rb
ADDED
@@ -0,0 +1,99 @@
|
|
1
|
+
|
2
|
+
def make(makedir)
|
3
|
+
Dir.chdir(makedir) do
|
4
|
+
sh 'make'
|
5
|
+
end
|
6
|
+
end
|
7
|
+
|
8
|
+
|
9
|
+
def extconf(dir)
|
10
|
+
Dir.chdir(dir) do ruby "extconf.rb" end
|
11
|
+
end
|
12
|
+
|
13
|
+
|
14
|
+
def setup_tests
|
15
|
+
Rake::TestTask.new do |t|
|
16
|
+
t.libs << "test"
|
17
|
+
t.test_files = FileList['test/test*.rb']
|
18
|
+
t.verbose = true
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
|
23
|
+
def setup_clean otherfiles
|
24
|
+
files = ['build/*', '**/*.o', '**/*.so', '**/*.a', 'lib/*-*', '**/*.log'] + otherfiles
|
25
|
+
CLEAN.include(files)
|
26
|
+
end
|
27
|
+
|
28
|
+
|
29
|
+
def setup_rdoc files
|
30
|
+
Rake::RDocTask.new do |rdoc|
|
31
|
+
rdoc.rdoc_dir = 'doc/rdoc'
|
32
|
+
rdoc.options << '--line-numbers'
|
33
|
+
rdoc.rdoc_files.add(files)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
|
38
|
+
def setup_extension(dir, extension)
|
39
|
+
ext = "ext/#{dir}"
|
40
|
+
ext_so = "#{ext}/#{extension}.#{Config::CONFIG['DLEXT']}"
|
41
|
+
ext_files = FileList[
|
42
|
+
"#{ext}/*.c",
|
43
|
+
"#{ext}/*.h",
|
44
|
+
"#{ext}/extconf.rb",
|
45
|
+
"#{ext}/Makefile",
|
46
|
+
"lib"
|
47
|
+
]
|
48
|
+
|
49
|
+
task "lib" do
|
50
|
+
directory "lib"
|
51
|
+
end
|
52
|
+
|
53
|
+
desc "Builds just the #{extension} extension"
|
54
|
+
task extension.to_sym => ["#{ext}/Makefile", ext_so ]
|
55
|
+
|
56
|
+
file "#{ext}/Makefile" => ["#{ext}/extconf.rb"] do
|
57
|
+
extconf "#{ext}"
|
58
|
+
end
|
59
|
+
|
60
|
+
file ext_so => ext_files do
|
61
|
+
make "#{ext}"
|
62
|
+
cp ext_so, "lib"
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
|
67
|
+
def setup_gem(pkg_name, pkg_version, author, summary, executables, test_file)
|
68
|
+
pkg_version = pkg_version
|
69
|
+
pkg_name = pkg_name
|
70
|
+
pkg_file_name = "#{pkg_name}-#{pkg_version}"
|
71
|
+
|
72
|
+
spec = Gem::Specification.new do |s|
|
73
|
+
s.name = pkg_name
|
74
|
+
s.version = pkg_version
|
75
|
+
s.platform = Gem::Platform::RUBY
|
76
|
+
s.author = author
|
77
|
+
s.summary = summary
|
78
|
+
s.test_file = test_file
|
79
|
+
s.has_rdoc = true
|
80
|
+
s.extra_rdoc_files = [ "README" ]
|
81
|
+
|
82
|
+
s.files = %w(COPYING LICENSE ext/http11/MANIFEST README Rakefile setup.rb) +
|
83
|
+
Dir.glob("{bin,doc,test,lib}/**/*") +
|
84
|
+
Dir.glob("ext/**/*.{h,c,rb}") +
|
85
|
+
Dir.glob("examples/**/*.rb") +
|
86
|
+
Dir.glob("tools/*.rb")
|
87
|
+
|
88
|
+
s.require_path = "lib"
|
89
|
+
s.extensions = FileList["ext/**/extconf.rb"].to_a
|
90
|
+
|
91
|
+
s.executables = executables
|
92
|
+
s.bindir = "bin"
|
93
|
+
end
|
94
|
+
|
95
|
+
Rake::GemPackageTask.new(spec) do |p|
|
96
|
+
p.gem_spec = spec
|
97
|
+
p.need_tar = true
|
98
|
+
end
|
99
|
+
end
|
metadata
ADDED
@@ -0,0 +1,132 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
rubygems_version: 0.8.11
|
3
|
+
specification_version: 1
|
4
|
+
name: mongrel
|
5
|
+
version: !ruby/object:Gem::Version
|
6
|
+
version: 0.2.0
|
7
|
+
date: 2006-01-31 00:00:00 -05:00
|
8
|
+
summary: An experimental fast simple web server for Ruby.
|
9
|
+
require_paths:
|
10
|
+
- lib
|
11
|
+
email:
|
12
|
+
homepage:
|
13
|
+
rubyforge_project:
|
14
|
+
description:
|
15
|
+
autorequire:
|
16
|
+
default_executable:
|
17
|
+
bindir: bin
|
18
|
+
has_rdoc: true
|
19
|
+
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">"
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 0.0.0
|
24
|
+
version:
|
25
|
+
platform: ruby
|
26
|
+
signing_key:
|
27
|
+
cert_chain:
|
28
|
+
authors:
|
29
|
+
- Zed A. Shaw
|
30
|
+
files:
|
31
|
+
- COPYING
|
32
|
+
- LICENSE
|
33
|
+
- ext/http11/MANIFEST
|
34
|
+
- README
|
35
|
+
- Rakefile
|
36
|
+
- setup.rb
|
37
|
+
- doc/rdoc
|
38
|
+
- doc/rdoc/classes
|
39
|
+
- doc/rdoc/created.rid
|
40
|
+
- doc/rdoc/files
|
41
|
+
- doc/rdoc/fr_class_index.html
|
42
|
+
- doc/rdoc/fr_file_index.html
|
43
|
+
- doc/rdoc/fr_method_index.html
|
44
|
+
- doc/rdoc/index.html
|
45
|
+
- doc/rdoc/rdoc-style.css
|
46
|
+
- doc/rdoc/classes/Mongrel
|
47
|
+
- doc/rdoc/classes/Mongrel.html
|
48
|
+
- doc/rdoc/classes/Mongrel/Error404Handler.html
|
49
|
+
- doc/rdoc/classes/Mongrel/Error404Handler.src
|
50
|
+
- doc/rdoc/classes/Mongrel/HeaderOut.html
|
51
|
+
- doc/rdoc/classes/Mongrel/HeaderOut.src
|
52
|
+
- doc/rdoc/classes/Mongrel/HttpHandler.html
|
53
|
+
- doc/rdoc/classes/Mongrel/HttpHandler.src
|
54
|
+
- doc/rdoc/classes/Mongrel/HttpParser.html
|
55
|
+
- doc/rdoc/classes/Mongrel/HttpParser.src
|
56
|
+
- doc/rdoc/classes/Mongrel/HttpRequest.html
|
57
|
+
- doc/rdoc/classes/Mongrel/HttpRequest.src
|
58
|
+
- doc/rdoc/classes/Mongrel/HttpResponse.html
|
59
|
+
- doc/rdoc/classes/Mongrel/HttpResponse.src
|
60
|
+
- doc/rdoc/classes/Mongrel/HttpServer.html
|
61
|
+
- doc/rdoc/classes/Mongrel/HttpServer.src
|
62
|
+
- doc/rdoc/classes/Mongrel/URIClassifier.html
|
63
|
+
- doc/rdoc/classes/Mongrel/URIClassifier.src
|
64
|
+
- doc/rdoc/classes/Mongrel/Error404Handler.src/M000023.html
|
65
|
+
- doc/rdoc/classes/Mongrel/Error404Handler.src/M000024.html
|
66
|
+
- doc/rdoc/classes/Mongrel/HeaderOut.src/M000013.html
|
67
|
+
- doc/rdoc/classes/Mongrel/HeaderOut.src/M000014.html
|
68
|
+
- doc/rdoc/classes/Mongrel/HttpHandler.src/M000019.html
|
69
|
+
- doc/rdoc/classes/Mongrel/HttpParser.src/M000001.html
|
70
|
+
- doc/rdoc/classes/Mongrel/HttpParser.src/M000002.html
|
71
|
+
- doc/rdoc/classes/Mongrel/HttpParser.src/M000003.html
|
72
|
+
- doc/rdoc/classes/Mongrel/HttpParser.src/M000004.html
|
73
|
+
- doc/rdoc/classes/Mongrel/HttpParser.src/M000005.html
|
74
|
+
- doc/rdoc/classes/Mongrel/HttpParser.src/M000006.html
|
75
|
+
- doc/rdoc/classes/Mongrel/HttpParser.src/M000007.html
|
76
|
+
- doc/rdoc/classes/Mongrel/HttpRequest.src/M000025.html
|
77
|
+
- doc/rdoc/classes/Mongrel/HttpResponse.src/M000020.html
|
78
|
+
- doc/rdoc/classes/Mongrel/HttpResponse.src/M000021.html
|
79
|
+
- doc/rdoc/classes/Mongrel/HttpResponse.src/M000022.html
|
80
|
+
- doc/rdoc/classes/Mongrel/HttpServer.src/M000008.html
|
81
|
+
- doc/rdoc/classes/Mongrel/HttpServer.src/M000009.html
|
82
|
+
- doc/rdoc/classes/Mongrel/HttpServer.src/M000010.html
|
83
|
+
- doc/rdoc/classes/Mongrel/HttpServer.src/M000011.html
|
84
|
+
- doc/rdoc/classes/Mongrel/HttpServer.src/M000012.html
|
85
|
+
- doc/rdoc/classes/Mongrel/URIClassifier.src/M000015.html
|
86
|
+
- doc/rdoc/classes/Mongrel/URIClassifier.src/M000016.html
|
87
|
+
- doc/rdoc/classes/Mongrel/URIClassifier.src/M000017.html
|
88
|
+
- doc/rdoc/classes/Mongrel/URIClassifier.src/M000018.html
|
89
|
+
- doc/rdoc/files/COPYING.html
|
90
|
+
- doc/rdoc/files/ext
|
91
|
+
- doc/rdoc/files/lib
|
92
|
+
- doc/rdoc/files/LICENSE.html
|
93
|
+
- doc/rdoc/files/README.html
|
94
|
+
- doc/rdoc/files/ext/http11
|
95
|
+
- doc/rdoc/files/ext/http11/http11_c.html
|
96
|
+
- doc/rdoc/files/lib/mongrel_rb.html
|
97
|
+
- test/test_http11.rb
|
98
|
+
- test/test_response.rb
|
99
|
+
- test/test_uriclassifier.rb
|
100
|
+
- test/test_ws.rb
|
101
|
+
- lib/mongrel.rb
|
102
|
+
- ext/http11/ext_help.h
|
103
|
+
- ext/http11/http11_parser.h
|
104
|
+
- ext/http11/tst.h
|
105
|
+
- ext/http11/http11.c
|
106
|
+
- ext/http11/http11_parser.c
|
107
|
+
- ext/http11/tst_cleanup.c
|
108
|
+
- ext/http11/tst_delete.c
|
109
|
+
- ext/http11/tst_grow_node_free_list.c
|
110
|
+
- ext/http11/tst_init.c
|
111
|
+
- ext/http11/tst_insert.c
|
112
|
+
- ext/http11/tst_search.c
|
113
|
+
- ext/http11/extconf.rb
|
114
|
+
- examples/simpletest.rb
|
115
|
+
- examples/webrick_compare.rb
|
116
|
+
- examples/camping/blog.rb
|
117
|
+
- examples/camping/tepee.rb
|
118
|
+
- tools/rakehelp.rb
|
119
|
+
test_files:
|
120
|
+
- test/test_ws.rb
|
121
|
+
rdoc_options: []
|
122
|
+
|
123
|
+
extra_rdoc_files:
|
124
|
+
- README
|
125
|
+
executables: []
|
126
|
+
|
127
|
+
extensions:
|
128
|
+
- ext/http11/extconf.rb
|
129
|
+
requirements: []
|
130
|
+
|
131
|
+
dependencies: []
|
132
|
+
|