mongrel 0.3.13.4 → 1.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/README +1 -75
- data/Rakefile +14 -14
- data/bin/mongrel_rails +35 -23
- data/doc/rdoc/classes/IO.html +12 -12
- data/doc/rdoc/classes/IO.src/{M000001.html → M000003.html} +0 -0
- data/doc/rdoc/classes/IO.src/{M000002.html → M000004.html} +0 -0
- data/doc/rdoc/classes/Kernel.html +11 -11
- data/doc/rdoc/classes/Kernel.src/{M000010.html → M000012.html} +0 -0
- data/doc/rdoc/classes/Kernel.src/{M000011.html → M000013.html} +0 -0
- data/doc/rdoc/classes/Mongrel.html +3 -3
- data/doc/rdoc/classes/Mongrel/CGIWrapper.html +77 -69
- data/doc/rdoc/classes/Mongrel/CGIWrapper.src/M000115.html +12 -19
- data/doc/rdoc/classes/Mongrel/CGIWrapper.src/M000116.html +34 -12
- data/doc/rdoc/classes/Mongrel/CGIWrapper.src/M000117.html +21 -5
- data/doc/rdoc/classes/Mongrel/CGIWrapper.src/M000118.html +19 -5
- data/doc/rdoc/classes/Mongrel/CGIWrapper.src/M000119.html +12 -5
- data/doc/rdoc/classes/Mongrel/CGIWrapper.src/M000120.html +5 -6
- data/doc/rdoc/classes/Mongrel/CGIWrapper.src/M000121.html +18 -0
- data/doc/rdoc/classes/Mongrel/CGIWrapper.src/M000122.html +18 -0
- data/doc/rdoc/classes/Mongrel/CGIWrapper.src/M000123.html +19 -0
- data/doc/rdoc/classes/Mongrel/Camping.html +8 -8
- data/doc/rdoc/classes/Mongrel/Camping.src/M000041.html +22 -0
- data/doc/rdoc/classes/Mongrel/Camping/CampingHandler.html +31 -12
- data/doc/rdoc/classes/Mongrel/Camping/CampingHandler.src/M000042.html +20 -0
- data/doc/rdoc/classes/Mongrel/Camping/CampingHandler.src/M000043.html +58 -0
- data/doc/rdoc/classes/Mongrel/Command/Base.html +75 -73
- data/doc/rdoc/classes/Mongrel/Command/Base.src/M000018.html +11 -5
- data/doc/rdoc/classes/Mongrel/Command/Base.src/M000019.html +29 -5
- data/doc/rdoc/classes/Mongrel/Command/Base.src/M000020.html +5 -5
- data/doc/rdoc/classes/Mongrel/Command/Base.src/M000021.html +5 -5
- data/doc/rdoc/classes/Mongrel/Command/Base.src/M000022.html +5 -9
- data/doc/rdoc/classes/Mongrel/Command/Base.src/M000023.html +5 -5
- data/doc/rdoc/classes/Mongrel/Command/Base.src/M000024.html +9 -5
- data/doc/rdoc/classes/Mongrel/Command/Base.src/M000025.html +5 -5
- data/doc/rdoc/classes/Mongrel/Command/Base.src/M000026.html +5 -11
- data/doc/rdoc/classes/Mongrel/Command/Base.src/M000027.html +5 -11
- data/doc/rdoc/classes/Mongrel/Command/Base.src/M000028.html +11 -5
- data/doc/rdoc/classes/Mongrel/Command/Base.src/M000029.html +24 -0
- data/doc/rdoc/classes/Mongrel/Command/Base.src/M000030.html +18 -0
- data/doc/rdoc/classes/Mongrel/Command/Registry.html +20 -20
- data/doc/rdoc/classes/Mongrel/Command/Registry.src/M000031.html +7 -45
- data/doc/rdoc/classes/Mongrel/Command/Registry.src/{M000030.html → M000032.html} +0 -0
- data/doc/rdoc/classes/Mongrel/Command/Registry.src/M000033.html +58 -0
- data/doc/rdoc/classes/Mongrel/Configurator.html +163 -140
- data/doc/rdoc/classes/Mongrel/Configurator.src/M000093.html +14 -8
- data/doc/rdoc/classes/Mongrel/Configurator.src/M000094.html +18 -7
- data/doc/rdoc/classes/Mongrel/Configurator.src/M000095.html +5 -10
- data/doc/rdoc/classes/Mongrel/Configurator.src/M000096.html +8 -5
- data/doc/rdoc/classes/Mongrel/Configurator.src/M000097.html +7 -25
- data/doc/rdoc/classes/Mongrel/Configurator.src/M000098.html +10 -6
- data/doc/rdoc/classes/Mongrel/Configurator.src/M000099.html +5 -26
- data/doc/rdoc/classes/Mongrel/Configurator.src/M000100.html +25 -20
- data/doc/rdoc/classes/Mongrel/Configurator.src/M000101.html +6 -5
- data/doc/rdoc/classes/Mongrel/Configurator.src/M000102.html +26 -11
- data/doc/rdoc/classes/Mongrel/Configurator.src/M000103.html +20 -6
- data/doc/rdoc/classes/Mongrel/Configurator.src/M000104.html +5 -5
- data/doc/rdoc/classes/Mongrel/Configurator.src/M000105.html +11 -9
- data/doc/rdoc/classes/Mongrel/Configurator.src/M000106.html +6 -9
- data/doc/rdoc/classes/Mongrel/Configurator.src/M000107.html +5 -5
- data/doc/rdoc/classes/Mongrel/Configurator.src/M000108.html +9 -21
- data/doc/rdoc/classes/Mongrel/Configurator.src/M000109.html +9 -5
- data/doc/rdoc/classes/Mongrel/Configurator.src/M000110.html +5 -23
- data/doc/rdoc/classes/Mongrel/Configurator.src/M000111.html +21 -5
- data/doc/rdoc/classes/Mongrel/Configurator.src/M000112.html +18 -0
- data/doc/rdoc/classes/Mongrel/Configurator.src/M000113.html +36 -0
- data/doc/rdoc/classes/Mongrel/Configurator.src/M000114.html +18 -0
- data/doc/rdoc/classes/Mongrel/Const.html +8 -9
- data/doc/rdoc/classes/Mongrel/DeflateFilter.html +19 -12
- data/doc/rdoc/classes/Mongrel/DeflateFilter.src/{M000121.html → M000124.html} +5 -5
- data/doc/rdoc/classes/Mongrel/DeflateFilter.src/{M000122.html → M000125.html} +9 -14
- data/doc/rdoc/classes/Mongrel/DirHandler.html +43 -43
- data/doc/rdoc/classes/Mongrel/DirHandler.src/M000051.html +8 -25
- data/doc/rdoc/classes/Mongrel/DirHandler.src/M000052.html +29 -50
- data/doc/rdoc/classes/Mongrel/DirHandler.src/M000053.html +25 -26
- data/doc/rdoc/classes/Mongrel/DirHandler.src/M000054.html +52 -5
- data/doc/rdoc/classes/Mongrel/DirHandler.src/M000055.html +39 -0
- data/doc/rdoc/classes/Mongrel/DirHandler.src/M000056.html +18 -0
- data/doc/rdoc/classes/Mongrel/Error404Handler.html +11 -11
- data/doc/rdoc/classes/Mongrel/Error404Handler.src/{M000123.html → M000126.html} +4 -4
- data/doc/rdoc/classes/Mongrel/Error404Handler.src/{M000124.html → M000127.html} +4 -4
- data/doc/rdoc/classes/Mongrel/HeaderOut.html +15 -10
- data/doc/rdoc/classes/Mongrel/HeaderOut.src/M000066.html +21 -0
- data/doc/rdoc/classes/Mongrel/HeaderOut.src/M000067.html +21 -0
- data/doc/rdoc/classes/Mongrel/HttpHandler.html +25 -23
- data/doc/rdoc/classes/Mongrel/HttpHandler.src/M000072.html +4 -4
- data/doc/rdoc/classes/Mongrel/HttpHandler.src/{M000071.html → M000073.html} +3 -3
- data/doc/rdoc/classes/Mongrel/{HttpHandlerPlugin.src/M000012.html → HttpHandler.src/M000074.html} +4 -4
- data/doc/rdoc/classes/Mongrel/HttpHandlerPlugin.html +22 -21
- data/doc/rdoc/classes/Mongrel/HttpHandlerPlugin.src/M000014.html +4 -6
- data/doc/rdoc/classes/Mongrel/HttpHandlerPlugin.src/M000015.html +4 -4
- data/doc/rdoc/classes/Mongrel/HttpHandlerPlugin.src/M000016.html +19 -0
- data/doc/rdoc/classes/Mongrel/{HttpHandler.src/M000070.html → HttpHandlerPlugin.src/M000017.html} +4 -4
- data/doc/rdoc/classes/Mongrel/HttpParser.html +44 -42
- data/doc/rdoc/classes/Mongrel/HttpParser.src/M000044.html +6 -7
- data/doc/rdoc/classes/Mongrel/HttpParser.src/M000045.html +7 -37
- data/doc/rdoc/classes/Mongrel/HttpParser.src/M000046.html +7 -5
- data/doc/rdoc/classes/Mongrel/HttpParser.src/M000047.html +37 -5
- data/doc/rdoc/classes/Mongrel/HttpParser.src/M000048.html +5 -6
- data/doc/rdoc/classes/Mongrel/HttpParser.src/{M000042.html → M000049.html} +5 -6
- data/doc/rdoc/classes/Mongrel/HttpParser.src/{M000043.html → M000050.html} +6 -7
- data/doc/rdoc/classes/Mongrel/HttpRequest.html +37 -40
- data/doc/rdoc/classes/Mongrel/HttpRequest.src/M000133.html +37 -7
- data/doc/rdoc/classes/Mongrel/HttpRequest.src/M000134.html +28 -7
- data/doc/rdoc/classes/Mongrel/HttpRequest.src/M000135.html +16 -19
- data/doc/rdoc/classes/Mongrel/HttpRequest.src/M000136.html +20 -0
- data/doc/rdoc/classes/Mongrel/HttpRequest.src/M000137.html +20 -0
- data/doc/rdoc/classes/Mongrel/HttpRequest.src/M000138.html +32 -0
- data/doc/rdoc/classes/Mongrel/HttpResponse.html +95 -85
- data/doc/rdoc/classes/Mongrel/HttpResponse.src/M000075.html +12 -13
- data/doc/rdoc/classes/Mongrel/HttpResponse.src/M000076.html +7 -9
- data/doc/rdoc/classes/Mongrel/HttpResponse.src/M000077.html +13 -9
- data/doc/rdoc/classes/Mongrel/HttpResponse.src/M000078.html +9 -9
- data/doc/rdoc/classes/Mongrel/HttpResponse.src/M000079.html +9 -18
- data/doc/rdoc/classes/Mongrel/HttpResponse.src/M000080.html +9 -8
- data/doc/rdoc/classes/Mongrel/HttpResponse.src/M000081.html +18 -7
- data/doc/rdoc/classes/Mongrel/HttpResponse.src/M000082.html +8 -7
- data/doc/rdoc/classes/Mongrel/HttpResponse.src/M000083.html +7 -7
- data/doc/rdoc/classes/Mongrel/HttpResponse.src/M000084.html +7 -5
- data/doc/rdoc/classes/Mongrel/HttpResponse.src/M000085.html +20 -0
- data/doc/rdoc/classes/Mongrel/HttpResponse.src/M000086.html +18 -0
- data/doc/rdoc/classes/Mongrel/HttpServer.html +59 -63
- data/doc/rdoc/classes/Mongrel/HttpServer.src/M000057.html +12 -19
- data/doc/rdoc/classes/Mongrel/HttpServer.src/M000058.html +87 -8
- data/doc/rdoc/classes/Mongrel/HttpServer.src/M000059.html +19 -9
- data/doc/rdoc/classes/Mongrel/HttpServer.src/M000060.html +8 -49
- data/doc/rdoc/classes/Mongrel/HttpServer.src/M000061.html +16 -21
- data/doc/rdoc/classes/Mongrel/HttpServer.src/M000062.html +52 -5
- data/doc/rdoc/classes/Mongrel/HttpServer.src/M000063.html +21 -9
- data/doc/rdoc/classes/Mongrel/{HeaderOut.src → HttpServer.src}/M000064.html +5 -5
- data/doc/rdoc/classes/Mongrel/HttpServer.src/M000065.html +22 -0
- data/doc/rdoc/classes/Mongrel/Rails/RailsConfigurator.html +27 -25
- data/doc/rdoc/classes/Mongrel/Rails/RailsConfigurator.src/M000034.html +24 -13
- data/doc/rdoc/classes/Mongrel/Rails/RailsConfigurator.src/{M000033.html → M000035.html} +11 -11
- data/doc/rdoc/classes/Mongrel/Rails/RailsConfigurator.src/M000036.html +26 -0
- data/doc/rdoc/classes/Mongrel/Rails/RailsHandler.html +24 -26
- data/doc/rdoc/classes/Mongrel/Rails/RailsHandler.src/M000037.html +10 -8
- data/doc/rdoc/classes/Mongrel/Rails/RailsHandler.src/M000038.html +43 -12
- data/doc/rdoc/classes/Mongrel/Rails/RailsHandler.src/M000039.html +20 -0
- data/doc/rdoc/classes/Mongrel/Rails/RailsHandler.src/M000040.html +25 -0
- data/doc/rdoc/classes/Mongrel/RedirectHandler.html +10 -10
- data/doc/rdoc/classes/Mongrel/RedirectHandler.src/{M000128.html → M000131.html} +8 -8
- data/doc/rdoc/classes/Mongrel/RedirectHandler.src/{M000129.html → M000132.html} +13 -13
- data/doc/rdoc/classes/Mongrel/StatisticsFilter.html +20 -20
- data/doc/rdoc/classes/Mongrel/StatisticsFilter.src/{M000125.html → M000128.html} +10 -10
- data/doc/rdoc/classes/Mongrel/StatisticsFilter.src/{M000126.html → M000129.html} +10 -10
- data/doc/rdoc/classes/Mongrel/StatisticsFilter.src/{M000127.html → M000130.html} +4 -4
- data/doc/rdoc/classes/Mongrel/Stats.html +43 -42
- data/doc/rdoc/classes/Mongrel/Stats.src/M000139.html +6 -5
- data/doc/rdoc/classes/Mongrel/Stats.src/M000140.html +10 -5
- data/doc/rdoc/classes/Mongrel/Stats.src/M000141.html +13 -5
- data/doc/rdoc/classes/Mongrel/Stats.src/M000142.html +5 -10
- data/doc/rdoc/classes/Mongrel/Stats.src/M000143.html +5 -7
- data/doc/rdoc/classes/Mongrel/Stats.src/{M000136.html → M000144.html} +5 -6
- data/doc/rdoc/classes/Mongrel/Stats.src/M000145.html +23 -0
- data/doc/rdoc/classes/Mongrel/Stats.src/M000146.html +20 -0
- data/doc/rdoc/classes/Mongrel/StatusHandler.html +21 -21
- data/doc/rdoc/classes/Mongrel/StatusHandler.src/M000068.html +5 -29
- data/doc/rdoc/classes/Mongrel/StatusHandler.src/M000069.html +11 -7
- data/doc/rdoc/classes/Mongrel/StatusHandler.src/M000070.html +42 -0
- data/doc/rdoc/classes/Mongrel/StatusHandler.src/M000071.html +20 -0
- data/doc/rdoc/classes/Mongrel/URIClassifier.html +58 -55
- data/doc/rdoc/classes/Mongrel/URIClassifier.src/M000087.html +5 -26
- data/doc/rdoc/classes/Mongrel/URIClassifier.src/M000088.html +5 -38
- data/doc/rdoc/classes/Mongrel/URIClassifier.src/M000089.html +18 -15
- data/doc/rdoc/classes/Mongrel/URIClassifier.src/M000090.html +25 -57
- data/doc/rdoc/classes/Mongrel/URIClassifier.src/M000091.html +36 -0
- data/doc/rdoc/classes/Mongrel/URIClassifier.src/M000092.html +83 -0
- data/doc/rdoc/classes/MongrelDbg.html +25 -25
- data/doc/rdoc/classes/MongrelDbg.src/M000007.html +11 -9
- data/doc/rdoc/classes/MongrelDbg.src/M000008.html +7 -8
- data/doc/rdoc/classes/MongrelDbg.src/M000009.html +9 -5
- data/doc/rdoc/classes/MongrelDbg.src/M000010.html +21 -0
- data/doc/rdoc/classes/MongrelDbg.src/M000011.html +18 -0
- data/doc/rdoc/classes/{Sync.html → Mutex.html} +50 -19
- data/doc/rdoc/classes/Mutex.src/M000001.html +24 -0
- data/doc/rdoc/classes/Mutex.src/M000002.html +32 -0
- data/doc/rdoc/classes/RequestLog/Access.html +5 -5
- data/doc/rdoc/classes/RequestLog/Access.src/{M000144.html → M000147.html} +0 -0
- data/doc/rdoc/classes/RequestLog/Files.html +5 -5
- data/doc/rdoc/classes/RequestLog/Files.src/{M000145.html → M000148.html} +0 -0
- data/doc/rdoc/classes/RequestLog/Objects.html +5 -5
- data/doc/rdoc/classes/RequestLog/Objects.src/{M000147.html → M000150.html} +0 -0
- data/doc/rdoc/classes/RequestLog/Params.html +5 -5
- data/doc/rdoc/classes/RequestLog/Params.src/{M000148.html → M000151.html} +0 -0
- data/doc/rdoc/classes/RequestLog/Threads.html +5 -5
- data/doc/rdoc/classes/RequestLog/Threads.src/{M000146.html → M000149.html} +0 -0
- data/doc/rdoc/classes/TCPServer.html +10 -10
- data/doc/rdoc/classes/TCPServer.src/{M000003.html → M000005.html} +0 -0
- data/doc/rdoc/created.rid +1 -1
- data/doc/rdoc/files/COPYING.html +1 -1
- data/doc/rdoc/files/LICENSE.html +1 -1
- data/doc/rdoc/files/README.html +11 -100
- data/doc/rdoc/files/ext/http11/http11_c.html +1 -1
- data/doc/rdoc/files/lib/mongrel/camping_rb.html +2 -2
- data/doc/rdoc/files/lib/mongrel/cgi_rb.html +2 -2
- data/doc/rdoc/files/lib/mongrel/command_rb.html +2 -2
- data/doc/rdoc/files/lib/mongrel/configurator_rb.html +1 -1
- data/doc/rdoc/files/lib/mongrel/debug_rb.html +2 -2
- data/doc/rdoc/files/lib/mongrel/handlers_rb.html +3 -2
- data/doc/rdoc/files/lib/mongrel/init_rb.html +2 -2
- data/doc/rdoc/files/lib/mongrel/rails_rb.html +2 -3
- data/doc/rdoc/files/lib/mongrel/stats_rb.html +2 -2
- data/doc/rdoc/files/lib/mongrel/tcphack_rb.html +2 -2
- data/doc/rdoc/files/lib/mongrel_rb.html +5 -3
- data/doc/rdoc/files/lib/mutex_fix_rb.html +108 -0
- data/doc/rdoc/fr_class_index.html +1 -1
- data/doc/rdoc/fr_file_index.html +1 -0
- data/doc/rdoc/fr_method_index.html +151 -148
- data/ext/http11/http11.c +2 -2
- data/lib/mongrel.rb +85 -38
- data/lib/mongrel/camping.rb +17 -4
- data/lib/mongrel/configurator.rb +11 -7
- data/lib/mongrel/handlers.rb +30 -27
- data/lib/mongrel/mime_types.yml +615 -0
- data/lib/mongrel/rails.rb +21 -28
- data/lib/mutex_fix.rb +34 -0
- data/test/test_handlers.rb +16 -4
- data/test/test_http11.rb +8 -0
- data/test/test_request_progress.rb +45 -2
- data/test/test_response.rb +31 -0
- metadata +95 -71
- data/bin/mongrel_rails_service +0 -246
- data/bin/mongrel_rails_svc +0 -307
- data/doc/rdoc/classes/Mongrel/CGIWrapper.src/M000112.html +0 -25
- data/doc/rdoc/classes/Mongrel/CGIWrapper.src/M000113.html +0 -47
- data/doc/rdoc/classes/Mongrel/CGIWrapper.src/M000114.html +0 -34
- data/doc/rdoc/classes/Mongrel/Camping.src/M000039.html +0 -22
- data/doc/rdoc/classes/Mongrel/Camping/CampingHandler.src/M000040.html +0 -18
- data/doc/rdoc/classes/Mongrel/Camping/CampingHandler.src/M000041.html +0 -51
- data/doc/rdoc/classes/Mongrel/Command/Base.src/M000016.html +0 -24
- data/doc/rdoc/classes/Mongrel/Command/Base.src/M000017.html +0 -42
- data/doc/rdoc/classes/Mongrel/Command/Registry.src/M000029.html +0 -20
- data/doc/rdoc/classes/Mongrel/Configurator.src/M000091.html +0 -27
- data/doc/rdoc/classes/Mongrel/Configurator.src/M000092.html +0 -31
- data/doc/rdoc/classes/Mongrel/DirHandler.src/M000049.html +0 -21
- data/doc/rdoc/classes/Mongrel/DirHandler.src/M000050.html +0 -43
- data/doc/rdoc/classes/Mongrel/HeaderOut.src/M000065.html +0 -18
- data/doc/rdoc/classes/Mongrel/HttpHandlerPlugin.src/M000013.html +0 -17
- data/doc/rdoc/classes/Mongrel/HttpRequest.src/M000130.html +0 -47
- data/doc/rdoc/classes/Mongrel/HttpRequest.src/M000131.html +0 -37
- data/doc/rdoc/classes/Mongrel/HttpRequest.src/M000132.html +0 -29
- data/doc/rdoc/classes/Mongrel/HttpResponse.src/M000073.html +0 -25
- data/doc/rdoc/classes/Mongrel/HttpResponse.src/M000074.html +0 -20
- data/doc/rdoc/classes/Mongrel/HttpServer.src/M000055.html +0 -25
- data/doc/rdoc/classes/Mongrel/HttpServer.src/M000056.html +0 -91
- data/doc/rdoc/classes/Mongrel/Rails/RailsConfigurator.src/M000032.html +0 -37
- data/doc/rdoc/classes/Mongrel/Rails/RailsHandler.src/M000035.html +0 -23
- data/doc/rdoc/classes/Mongrel/Rails/RailsHandler.src/M000036.html +0 -54
- data/doc/rdoc/classes/Mongrel/Stats.src/M000137.html +0 -23
- data/doc/rdoc/classes/Mongrel/Stats.src/M000138.html +0 -26
- data/doc/rdoc/classes/Mongrel/StatusHandler.src/M000066.html +0 -18
- data/doc/rdoc/classes/Mongrel/StatusHandler.src/M000067.html +0 -24
- data/doc/rdoc/classes/Mongrel/URIClassifier.src/M000085.html +0 -18
- data/doc/rdoc/classes/Mongrel/URIClassifier.src/M000086.html +0 -18
- data/doc/rdoc/classes/MongrelDbg.src/M000005.html +0 -24
- data/doc/rdoc/classes/MongrelDbg.src/M000006.html +0 -20
|
@@ -54,13 +54,13 @@
|
|
|
54
54
|
<a href="classes/Mongrel/TimeoutError.html">Mongrel::TimeoutError</a><br />
|
|
55
55
|
<a href="classes/Mongrel/URIClassifier.html">Mongrel::URIClassifier</a><br />
|
|
56
56
|
<a href="classes/MongrelDbg.html">MongrelDbg</a><br />
|
|
57
|
+
<a href="classes/Mutex.html">Mutex</a><br />
|
|
57
58
|
<a href="classes/RequestLog.html">RequestLog</a><br />
|
|
58
59
|
<a href="classes/RequestLog/Access.html">RequestLog::Access</a><br />
|
|
59
60
|
<a href="classes/RequestLog/Files.html">RequestLog::Files</a><br />
|
|
60
61
|
<a href="classes/RequestLog/Objects.html">RequestLog::Objects</a><br />
|
|
61
62
|
<a href="classes/RequestLog/Params.html">RequestLog::Params</a><br />
|
|
62
63
|
<a href="classes/RequestLog/Threads.html">RequestLog::Threads</a><br />
|
|
63
|
-
<a href="classes/Sync.html">Sync</a><br />
|
|
64
64
|
<a href="classes/TCPServer.html">TCPServer</a><br />
|
|
65
65
|
</div>
|
|
66
66
|
</div>
|
data/doc/rdoc/fr_file_index.html
CHANGED
|
@@ -35,6 +35,7 @@
|
|
|
35
35
|
<a href="files/lib/mongrel/rails_rb.html">lib/mongrel/rails.rb</a><br />
|
|
36
36
|
<a href="files/lib/mongrel/stats_rb.html">lib/mongrel/stats.rb</a><br />
|
|
37
37
|
<a href="files/lib/mongrel/tcphack_rb.html">lib/mongrel/tcphack.rb</a><br />
|
|
38
|
+
<a href="files/lib/mutex_fix_rb.html">lib/mutex_fix.rb</a><br />
|
|
38
39
|
</div>
|
|
39
40
|
</div>
|
|
40
41
|
</body>
|
|
@@ -20,154 +20,157 @@
|
|
|
20
20
|
<div id="index">
|
|
21
21
|
<h1 class="section-bar">Methods</h1>
|
|
22
22
|
<div id="index-entries">
|
|
23
|
-
<a href="classes/Mongrel/HeaderOut.html#
|
|
24
|
-
<a href="classes/Mongrel/DirHandler.html#
|
|
25
|
-
<a href="classes/Mongrel/CGIWrapper.html#
|
|
26
|
-
<a href="classes/MongrelDbg.html#
|
|
27
|
-
<a href="classes/Mongrel/DirHandler.html#
|
|
28
|
-
<a href="classes/Mongrel/Configurator.html#
|
|
29
|
-
<a href="classes/Mongrel/Configurator.html#
|
|
30
|
-
<a href="classes/Mongrel/Configurator.html#
|
|
31
|
-
<a href="classes/IO.html#
|
|
32
|
-
<a href="classes/Mongrel/Command/Registry.html#
|
|
33
|
-
<a href="classes/
|
|
34
|
-
<a href="classes/
|
|
35
|
-
<a href="classes/Mongrel/HttpServer.html#
|
|
36
|
-
<a href="classes/Mongrel/Configurator.html#
|
|
37
|
-
<a href="classes/Mongrel/Configurator.html#
|
|
38
|
-
<a href="classes/Mongrel/StatusHandler.html#
|
|
39
|
-
<a href="classes/Mongrel/HttpResponse.html#
|
|
40
|
-
<a href="classes/Mongrel/HttpResponse.html#
|
|
41
|
-
<a href="classes/Mongrel/StatisticsFilter.html#
|
|
42
|
-
<a href="classes/Mongrel/Stats.html#
|
|
43
|
-
<a href="classes/MongrelDbg.html#
|
|
44
|
-
<a href="classes/Mongrel/CGIWrapper.html#
|
|
45
|
-
<a href="classes/Mongrel/HttpParser.html#
|
|
46
|
-
<a href="classes/Mongrel/HttpRequest.html#
|
|
47
|
-
<a href="classes/Mongrel/HttpParser.html#
|
|
48
|
-
<a href="classes/Mongrel/Command/Base.html#
|
|
49
|
-
<a href="classes/Mongrel/HttpParser.html#
|
|
50
|
-
<a href="classes/Mongrel/HttpResponse.html#
|
|
51
|
-
<a href="classes/Mongrel/HttpParser.html#
|
|
52
|
-
<a href="classes/Mongrel/HttpServer.html#
|
|
53
|
-
<a href="classes/Mongrel/CGIWrapper.html#
|
|
54
|
-
<a href="classes/Mongrel/Command/Base.html#
|
|
55
|
-
<a href="classes/TCPServer.html#
|
|
56
|
-
<a href="classes/TCPServer.html#
|
|
57
|
-
<a href="classes/Mongrel/URIClassifier.html#
|
|
58
|
-
<a href="classes/Mongrel/Configurator.html#
|
|
59
|
-
<a href="classes/Mongrel/Configurator.html#
|
|
60
|
-
<a href="classes/Mongrel/Configurator.html#
|
|
61
|
-
<a href="classes/Mongrel/Configurator.html#
|
|
62
|
-
<a href="classes/Mongrel/Configurator.html#
|
|
63
|
-
<a href="classes/
|
|
64
|
-
<a href="classes/
|
|
65
|
-
<a href="classes/
|
|
66
|
-
<a href="classes/Mongrel/
|
|
67
|
-
<a href="classes/Mongrel/
|
|
68
|
-
<a href="classes/Mongrel/
|
|
69
|
-
<a href="classes/Mongrel/
|
|
70
|
-
<a href="classes/Mongrel/
|
|
71
|
-
<a href="classes/Mongrel/
|
|
72
|
-
<a href="classes/Mongrel/
|
|
73
|
-
<a href="classes/Mongrel/
|
|
74
|
-
<a href="classes/Mongrel/
|
|
75
|
-
<a href="classes/Mongrel/
|
|
76
|
-
<a href="classes/Mongrel/
|
|
77
|
-
<a href="classes/Mongrel/
|
|
78
|
-
<a href="classes/Mongrel/
|
|
79
|
-
<a href="classes/Mongrel/
|
|
80
|
-
<a href="classes/Mongrel/
|
|
81
|
-
<a href="classes/Mongrel/
|
|
82
|
-
<a href="classes/Mongrel/
|
|
83
|
-
<a href="classes/Mongrel/
|
|
84
|
-
<a href="classes/Mongrel/
|
|
85
|
-
<a href="classes/Mongrel/
|
|
86
|
-
<a href="classes/Mongrel/
|
|
87
|
-
<a href="classes/
|
|
88
|
-
<a href="classes/
|
|
89
|
-
<a href="classes/
|
|
90
|
-
<a href="classes/Mongrel/
|
|
91
|
-
<a href="classes/Mongrel/
|
|
92
|
-
<a href="classes/Mongrel/
|
|
93
|
-
<a href="classes/Mongrel/
|
|
94
|
-
<a href="classes/Mongrel/
|
|
95
|
-
<a href="classes/Mongrel/
|
|
96
|
-
<a href="classes/Mongrel/
|
|
97
|
-
<a href="classes/Mongrel/
|
|
98
|
-
<a href="classes/
|
|
99
|
-
<a href="classes/Mongrel/Rails/RailsHandler.html#
|
|
100
|
-
<a href="classes/Mongrel/
|
|
101
|
-
<a href="classes/RequestLog/
|
|
102
|
-
<a href="classes/RequestLog/
|
|
103
|
-
<a href="classes/Mongrel/
|
|
104
|
-
<a href="classes/
|
|
105
|
-
<a href="classes/
|
|
106
|
-
<a href="classes/
|
|
107
|
-
<a href="classes/
|
|
108
|
-
<a href="classes/
|
|
109
|
-
<a href="classes/Mongrel/
|
|
110
|
-
<a href="classes/Mongrel/
|
|
111
|
-
<a href="classes/Mongrel/
|
|
112
|
-
<a href="classes/Mongrel/HttpRequest.html#
|
|
113
|
-
<a href="classes/Mongrel/
|
|
114
|
-
<a href="classes/Mongrel/
|
|
115
|
-
<a href="classes/Mongrel/
|
|
116
|
-
<a href="classes/Mongrel/URIClassifier.html#
|
|
117
|
-
<a href="classes/Mongrel/
|
|
118
|
-
<a href="classes/Mongrel/Rails/
|
|
119
|
-
<a href="classes/Mongrel/
|
|
120
|
-
<a href="classes/Mongrel/
|
|
121
|
-
<a href="classes/Mongrel/
|
|
122
|
-
<a href="classes/Mongrel/
|
|
123
|
-
<a href="classes/Mongrel/
|
|
124
|
-
<a href="classes/Mongrel/
|
|
125
|
-
<a href="classes/Mongrel/
|
|
126
|
-
<a href="classes/Mongrel/
|
|
127
|
-
<a href="classes/Mongrel/
|
|
128
|
-
<a href="classes/Mongrel/
|
|
129
|
-
<a href="classes/Mongrel/
|
|
130
|
-
<a href="classes/Mongrel/
|
|
131
|
-
<a href="classes/Mongrel/
|
|
132
|
-
<a href="classes/Mongrel/
|
|
133
|
-
<a href="classes/Mongrel/
|
|
134
|
-
<a href="classes/Mongrel/
|
|
135
|
-
<a href="classes/Mongrel/
|
|
136
|
-
<a href="classes/Mongrel/
|
|
137
|
-
<a href="classes/Mongrel/
|
|
138
|
-
<a href="classes/Mongrel/
|
|
139
|
-
<a href="classes/Mongrel/DirHandler.html#
|
|
140
|
-
<a href="classes/Mongrel/
|
|
141
|
-
<a href="classes/Mongrel/HttpResponse.html#
|
|
142
|
-
<a href="classes/Mongrel/
|
|
143
|
-
<a href="classes/Mongrel/
|
|
144
|
-
<a href="classes/Mongrel/
|
|
145
|
-
<a href="classes/Mongrel/
|
|
146
|
-
<a href="classes/Mongrel/HttpResponse.html#
|
|
147
|
-
<a href="classes/Mongrel/
|
|
148
|
-
<a href="classes/Mongrel/
|
|
149
|
-
<a href="classes/Mongrel/CGIWrapper.html#
|
|
150
|
-
<a href="classes/Mongrel/
|
|
151
|
-
<a href="classes/Mongrel/
|
|
152
|
-
<a href="classes/Mongrel/
|
|
153
|
-
<a href="classes/Mongrel/
|
|
154
|
-
<a href="classes/Mongrel/
|
|
155
|
-
<a href="classes/
|
|
156
|
-
<a href="classes/
|
|
157
|
-
<a href="classes/
|
|
158
|
-
<a href="classes/
|
|
159
|
-
<a href="classes/Mongrel/
|
|
160
|
-
<a href="classes/
|
|
161
|
-
<a href="classes/Mongrel/
|
|
162
|
-
<a href="classes/Mongrel/
|
|
163
|
-
<a href="classes/Mongrel/
|
|
164
|
-
<a href="classes/Mongrel/
|
|
165
|
-
<a href="classes/Mongrel/Command/Base.html#M000024">
|
|
166
|
-
<a href="classes/Mongrel/Command/Base.html#M000027">
|
|
167
|
-
<a href="classes/Mongrel/Command/Base.html#
|
|
168
|
-
<a href="classes/Mongrel/Command/Base.html#
|
|
169
|
-
<a href="classes/Mongrel/
|
|
170
|
-
<a href="classes/Mongrel/
|
|
23
|
+
<a href="classes/Mongrel/HeaderOut.html#M000067">[]= (Mongrel::HeaderOut)</a><br />
|
|
24
|
+
<a href="classes/Mongrel/DirHandler.html#M000056">add_mime_type (Mongrel::DirHandler)</a><br />
|
|
25
|
+
<a href="classes/Mongrel/CGIWrapper.html#M000120">args (Mongrel::CGIWrapper)</a><br />
|
|
26
|
+
<a href="classes/MongrelDbg.html#M000009">begin_trace (MongrelDbg)</a><br />
|
|
27
|
+
<a href="classes/Mongrel/DirHandler.html#M000052">can_serve (Mongrel::DirHandler)</a><br />
|
|
28
|
+
<a href="classes/Mongrel/Configurator.html#M000094">change_privilege (Mongrel::Configurator)</a><br />
|
|
29
|
+
<a href="classes/Mongrel/Configurator.html#M000098">cloaker (Mongrel::Configurator)</a><br />
|
|
30
|
+
<a href="classes/Mongrel/Configurator.html#M000097">cloaking_class (Mongrel::Configurator)</a><br />
|
|
31
|
+
<a href="classes/IO.html#M000004">close (IO)</a><br />
|
|
32
|
+
<a href="classes/Mongrel/Command/Registry.html#M000031">commands (Mongrel::Command::Registry)</a><br />
|
|
33
|
+
<a href="classes/MongrelDbg.html#M000007">configure (MongrelDbg)</a><br />
|
|
34
|
+
<a href="classes/Mongrel/Command/Base.html#M000020">configure (Mongrel::Command::Base)</a><br />
|
|
35
|
+
<a href="classes/Mongrel/HttpServer.html#M000061">configure_socket_options (Mongrel::HttpServer)</a><br />
|
|
36
|
+
<a href="classes/Mongrel/Configurator.html#M000102">daemonize (Mongrel::Configurator)</a><br />
|
|
37
|
+
<a href="classes/Mongrel/Configurator.html#M000111">debug (Mongrel::Configurator)</a><br />
|
|
38
|
+
<a href="classes/Mongrel/StatusHandler.html#M000070">describe_listener (Mongrel::StatusHandler)</a><br />
|
|
39
|
+
<a href="classes/Mongrel/HttpResponse.html#M000086">done (Mongrel::HttpResponse)</a><br />
|
|
40
|
+
<a href="classes/Mongrel/HttpResponse.html#M000085">done= (Mongrel::HttpResponse)</a><br />
|
|
41
|
+
<a href="classes/Mongrel/StatisticsFilter.html#M000130">dump (Mongrel::StatisticsFilter)</a><br />
|
|
42
|
+
<a href="classes/Mongrel/Stats.html#M000142">dump (Mongrel::Stats)</a><br />
|
|
43
|
+
<a href="classes/MongrelDbg.html#M000010">end_trace (MongrelDbg)</a><br />
|
|
44
|
+
<a href="classes/Mongrel/CGIWrapper.html#M000121">env_table (Mongrel::CGIWrapper)</a><br />
|
|
45
|
+
<a href="classes/Mongrel/HttpParser.html#M000048">error? (Mongrel::HttpParser)</a><br />
|
|
46
|
+
<a href="classes/Mongrel/HttpRequest.html#M000136">escape (Mongrel::HttpRequest)</a><br />
|
|
47
|
+
<a href="classes/Mongrel/HttpParser.html#M000047">execute (Mongrel::HttpParser)</a><br />
|
|
48
|
+
<a href="classes/Mongrel/Command/Base.html#M000030">failure (Mongrel::Command::Base)</a><br />
|
|
49
|
+
<a href="classes/Mongrel/HttpParser.html#M000046">finish (Mongrel::HttpParser)</a><br />
|
|
50
|
+
<a href="classes/Mongrel/HttpResponse.html#M000084">finished (Mongrel::HttpResponse)</a><br />
|
|
51
|
+
<a href="classes/Mongrel/HttpParser.html#M000049">finished? (Mongrel::HttpParser)</a><br />
|
|
52
|
+
<a href="classes/Mongrel/HttpServer.html#M000060">graceful_shutdown (Mongrel::HttpServer)</a><br />
|
|
53
|
+
<a href="classes/Mongrel/CGIWrapper.html#M000116">header (Mongrel::CGIWrapper)</a><br />
|
|
54
|
+
<a href="classes/Mongrel/Command/Base.html#M000022">help (Mongrel::Command::Base)</a><br />
|
|
55
|
+
<a href="classes/TCPServer.html#M000006">initialize (TCPServer)</a><br />
|
|
56
|
+
<a href="classes/TCPServer.html#M000005">initialize_with_backlog (TCPServer)</a><br />
|
|
57
|
+
<a href="classes/Mongrel/URIClassifier.html#M000088">inspect (Mongrel::URIClassifier)</a><br />
|
|
58
|
+
<a href="classes/Mongrel/Configurator.html#M000110">join (Mongrel::Configurator)</a><br />
|
|
59
|
+
<a href="classes/Mongrel/Configurator.html#M000100">listener (Mongrel::Configurator)</a><br />
|
|
60
|
+
<a href="classes/Mongrel/Configurator.html#M000105">load_mime_map (Mongrel::Configurator)</a><br />
|
|
61
|
+
<a href="classes/Mongrel/Configurator.html#M000103">load_plugins (Mongrel::Configurator)</a><br />
|
|
62
|
+
<a href="classes/Mongrel/Configurator.html#M000104">load_yaml (Mongrel::Configurator)</a><br />
|
|
63
|
+
<a href="classes/Mutex.html#M000001">lock (Mutex)</a><br />
|
|
64
|
+
<a href="classes/Mongrel/Configurator.html#M000114">log (Mongrel::Configurator)</a><br />
|
|
65
|
+
<a href="classes/Kernel.html#M000013">log_open_files (Kernel)</a><br />
|
|
66
|
+
<a href="classes/Mongrel/Rails/RailsHandler.html#M000039">log_threads_waiting_for (Mongrel::Rails::RailsHandler)</a><br />
|
|
67
|
+
<a href="classes/Mongrel/Stats.html#M000144">mean (Mongrel::Stats)</a><br />
|
|
68
|
+
<a href="classes/Mongrel/Command/Base.html#M000019">new (Mongrel::Command::Base)</a><br />
|
|
69
|
+
<a href="classes/Mongrel/StatisticsFilter.html#M000128">new (Mongrel::StatisticsFilter)</a><br />
|
|
70
|
+
<a href="classes/Mongrel/Rails/RailsHandler.html#M000037">new (Mongrel::Rails::RailsHandler)</a><br />
|
|
71
|
+
<a href="classes/Mongrel/URIClassifier.html#M000089">new (Mongrel::URIClassifier)</a><br />
|
|
72
|
+
<a href="classes/Mongrel/Configurator.html#M000093">new (Mongrel::Configurator)</a><br />
|
|
73
|
+
<a href="classes/Mongrel/DirHandler.html#M000051">new (Mongrel::DirHandler)</a><br />
|
|
74
|
+
<a href="classes/Mongrel/RedirectHandler.html#M000131">new (Mongrel::RedirectHandler)</a><br />
|
|
75
|
+
<a href="classes/Mongrel/DeflateFilter.html#M000124">new (Mongrel::DeflateFilter)</a><br />
|
|
76
|
+
<a href="classes/Mongrel/HttpResponse.html#M000075">new (Mongrel::HttpResponse)</a><br />
|
|
77
|
+
<a href="classes/Mongrel/Camping/CampingHandler.html#M000042">new (Mongrel::Camping::CampingHandler)</a><br />
|
|
78
|
+
<a href="classes/Mongrel/HttpRequest.html#M000133">new (Mongrel::HttpRequest)</a><br />
|
|
79
|
+
<a href="classes/Mongrel/HttpServer.html#M000057">new (Mongrel::HttpServer)</a><br />
|
|
80
|
+
<a href="classes/Mongrel/CGIWrapper.html#M000115">new (Mongrel::CGIWrapper)</a><br />
|
|
81
|
+
<a href="classes/Mongrel/Error404Handler.html#M000126">new (Mongrel::Error404Handler)</a><br />
|
|
82
|
+
<a href="classes/Mongrel/Stats.html#M000139">new (Mongrel::Stats)</a><br />
|
|
83
|
+
<a href="classes/Mongrel/StatusHandler.html#M000068">new (Mongrel::StatusHandler)</a><br />
|
|
84
|
+
<a href="classes/Mongrel/HttpParser.html#M000044">new (Mongrel::HttpParser)</a><br />
|
|
85
|
+
<a href="classes/Mongrel/HttpHandlerPlugin.html#M000016">new (Mongrel::HttpHandlerPlugin)</a><br />
|
|
86
|
+
<a href="classes/Mongrel/HeaderOut.html#M000066">new (Mongrel::HeaderOut)</a><br />
|
|
87
|
+
<a href="classes/Mongrel/HttpParser.html#M000050">nread (Mongrel::HttpParser)</a><br />
|
|
88
|
+
<a href="classes/IO.html#M000003">open (IO)</a><br />
|
|
89
|
+
<a href="classes/Kernel.html#M000012">open (Kernel)</a><br />
|
|
90
|
+
<a href="classes/Mongrel/Command/Base.html#M000018">options (Mongrel::Command::Base)</a><br />
|
|
91
|
+
<a href="classes/Mongrel/CGIWrapper.html#M000118">out (Mongrel::CGIWrapper)</a><br />
|
|
92
|
+
<a href="classes/Mongrel/Configurator.html#M000106">plugin (Mongrel::Configurator)</a><br />
|
|
93
|
+
<a href="classes/Mongrel/Command/Registry.html#M000032">print_command_list (Mongrel::Command::Registry)</a><br />
|
|
94
|
+
<a href="classes/Mongrel/DirHandler.html#M000055">process (Mongrel::DirHandler)</a><br />
|
|
95
|
+
<a href="classes/Mongrel/DeflateFilter.html#M000125">process (Mongrel::DeflateFilter)</a><br />
|
|
96
|
+
<a href="classes/Mongrel/HttpHandler.html#M000074">process (Mongrel::HttpHandler)</a><br />
|
|
97
|
+
<a href="classes/Mongrel/StatusHandler.html#M000071">process (Mongrel::StatusHandler)</a><br />
|
|
98
|
+
<a href="classes/RequestLog/Access.html#M000147">process (RequestLog::Access)</a><br />
|
|
99
|
+
<a href="classes/Mongrel/Rails/RailsHandler.html#M000038">process (Mongrel::Rails::RailsHandler)</a><br />
|
|
100
|
+
<a href="classes/Mongrel/Camping/CampingHandler.html#M000043">process (Mongrel::Camping::CampingHandler)</a><br />
|
|
101
|
+
<a href="classes/RequestLog/Files.html#M000148">process (RequestLog::Files)</a><br />
|
|
102
|
+
<a href="classes/RequestLog/Threads.html#M000149">process (RequestLog::Threads)</a><br />
|
|
103
|
+
<a href="classes/Mongrel/Error404Handler.html#M000127">process (Mongrel::Error404Handler)</a><br />
|
|
104
|
+
<a href="classes/Mongrel/StatisticsFilter.html#M000129">process (Mongrel::StatisticsFilter)</a><br />
|
|
105
|
+
<a href="classes/Mongrel/HttpHandlerPlugin.html#M000017">process (Mongrel::HttpHandlerPlugin)</a><br />
|
|
106
|
+
<a href="classes/RequestLog/Objects.html#M000150">process (RequestLog::Objects)</a><br />
|
|
107
|
+
<a href="classes/Mongrel/RedirectHandler.html#M000132">process (Mongrel::RedirectHandler)</a><br />
|
|
108
|
+
<a href="classes/RequestLog/Params.html#M000151">process (RequestLog::Params)</a><br />
|
|
109
|
+
<a href="classes/Mongrel/HttpServer.html#M000058">process_client (Mongrel::HttpServer)</a><br />
|
|
110
|
+
<a href="classes/Mongrel/HttpRequest.html#M000138">query_parse (Mongrel::HttpRequest)</a><br />
|
|
111
|
+
<a href="classes/Mongrel/Rails/RailsConfigurator.html#M000034">rails (Mongrel::Rails::RailsConfigurator)</a><br />
|
|
112
|
+
<a href="classes/Mongrel/HttpRequest.html#M000134">read_body (Mongrel::HttpRequest)</a><br />
|
|
113
|
+
<a href="classes/Mongrel/HttpRequest.html#M000135">read_socket (Mongrel::HttpRequest)</a><br />
|
|
114
|
+
<a href="classes/Mongrel/HttpServer.html#M000059">reap_dead_workers (Mongrel::HttpServer)</a><br />
|
|
115
|
+
<a href="classes/Mongrel/Configurator.html#M000107">redirect (Mongrel::Configurator)</a><br />
|
|
116
|
+
<a href="classes/Mongrel/URIClassifier.html#M000090">register (Mongrel::URIClassifier)</a><br />
|
|
117
|
+
<a href="classes/Mongrel/HttpServer.html#M000063">register (Mongrel::HttpServer)</a><br />
|
|
118
|
+
<a href="classes/Mongrel/Rails/RailsHandler.html#M000040">reload! (Mongrel::Rails::RailsHandler)</a><br />
|
|
119
|
+
<a href="classes/Mongrel/Rails/RailsConfigurator.html#M000035">reload! (Mongrel::Rails::RailsConfigurator)</a><br />
|
|
120
|
+
<a href="classes/Mongrel/Configurator.html#M000095">remove_pid_file (Mongrel::Configurator)</a><br />
|
|
121
|
+
<a href="classes/Mongrel/HttpHandler.html#M000072">request_begins (Mongrel::HttpHandler)</a><br />
|
|
122
|
+
<a href="classes/Mongrel/HttpHandlerPlugin.html#M000014">request_begins (Mongrel::HttpHandlerPlugin)</a><br />
|
|
123
|
+
<a href="classes/Mongrel/HttpHandler.html#M000073">request_progress (Mongrel::HttpHandler)</a><br />
|
|
124
|
+
<a href="classes/Mongrel/HttpHandlerPlugin.html#M000015">request_progress (Mongrel::HttpHandlerPlugin)</a><br />
|
|
125
|
+
<a href="classes/Mongrel/HttpResponse.html#M000077">reset (Mongrel::HttpResponse)</a><br />
|
|
126
|
+
<a href="classes/Mongrel/HttpParser.html#M000045">reset (Mongrel::HttpParser)</a><br />
|
|
127
|
+
<a href="classes/Mongrel/Stats.html#M000140">reset (Mongrel::Stats)</a><br />
|
|
128
|
+
<a href="classes/Mongrel/URIClassifier.html#M000092">resolve (Mongrel::URIClassifier)</a><br />
|
|
129
|
+
<a href="classes/Mongrel/Configurator.html#M000099">resolve_defaults (Mongrel::Configurator)</a><br />
|
|
130
|
+
<a href="classes/Mongrel/Command/Base.html#M000023">run (Mongrel::Command::Base)</a><br />
|
|
131
|
+
<a href="classes/Mongrel/Configurator.html#M000108">run (Mongrel::Configurator)</a><br />
|
|
132
|
+
<a href="classes/Mongrel/Command/Registry.html#M000033">run (Mongrel::Command::Registry)</a><br />
|
|
133
|
+
<a href="classes/Mongrel/HttpServer.html#M000062">run (Mongrel::HttpServer)</a><br />
|
|
134
|
+
<a href="classes/Mongrel/Configurator.html#M000112">run_config (Mongrel::Configurator)</a><br />
|
|
135
|
+
<a href="classes/Mongrel/Stats.html#M000141">sample (Mongrel::Stats)</a><br />
|
|
136
|
+
<a href="classes/Mongrel/Stats.html#M000145">sd (Mongrel::Stats)</a><br />
|
|
137
|
+
<a href="classes/Mongrel/HttpResponse.html#M000080">send_body (Mongrel::HttpResponse)</a><br />
|
|
138
|
+
<a href="classes/Mongrel/CGIWrapper.html#M000117">send_cookies (Mongrel::CGIWrapper)</a><br />
|
|
139
|
+
<a href="classes/Mongrel/DirHandler.html#M000053">send_dir_listing (Mongrel::DirHandler)</a><br />
|
|
140
|
+
<a href="classes/Mongrel/DirHandler.html#M000054">send_file (Mongrel::DirHandler)</a><br />
|
|
141
|
+
<a href="classes/Mongrel/HttpResponse.html#M000081">send_file (Mongrel::HttpResponse)</a><br />
|
|
142
|
+
<a href="classes/Mongrel/HttpResponse.html#M000079">send_header (Mongrel::HttpResponse)</a><br />
|
|
143
|
+
<a href="classes/Mongrel/HttpResponse.html#M000078">send_status (Mongrel::HttpResponse)</a><br />
|
|
144
|
+
<a href="classes/Mongrel/Rails/RailsConfigurator.html#M000036">setup_rails_signals (Mongrel::Rails::RailsConfigurator)</a><br />
|
|
145
|
+
<a href="classes/Mongrel/Configurator.html#M000113">setup_signals (Mongrel::Configurator)</a><br />
|
|
146
|
+
<a href="classes/Mongrel/HttpResponse.html#M000082">socket_error (Mongrel::HttpResponse)</a><br />
|
|
147
|
+
<a href="classes/Mongrel/Camping.html#M000041">start (Mongrel::Camping)</a><br />
|
|
148
|
+
<a href="classes/Mongrel/HttpResponse.html#M000076">start (Mongrel::HttpResponse)</a><br />
|
|
149
|
+
<a href="classes/Mongrel/CGIWrapper.html#M000119">status (Mongrel::CGIWrapper)</a><br />
|
|
150
|
+
<a href="classes/Mongrel/CGIWrapper.html#M000122">stdinput (Mongrel::CGIWrapper)</a><br />
|
|
151
|
+
<a href="classes/Mongrel/CGIWrapper.html#M000123">stdoutput (Mongrel::CGIWrapper)</a><br />
|
|
152
|
+
<a href="classes/Mongrel/Configurator.html#M000109">stop (Mongrel::Configurator)</a><br />
|
|
153
|
+
<a href="classes/Mongrel/HttpServer.html#M000065">stop (Mongrel::HttpServer)</a><br />
|
|
154
|
+
<a href="classes/Mongrel/StatusHandler.html#M000069">table (Mongrel::StatusHandler)</a><br />
|
|
155
|
+
<a href="classes/Mongrel/Stats.html#M000146">tick (Mongrel::Stats)</a><br />
|
|
156
|
+
<a href="classes/Mongrel/Stats.html#M000143">to_s (Mongrel::Stats)</a><br />
|
|
157
|
+
<a href="classes/MongrelDbg.html#M000008">trace (MongrelDbg)</a><br />
|
|
158
|
+
<a href="classes/MongrelDbg.html#M000011">tracing? (MongrelDbg)</a><br />
|
|
159
|
+
<a href="classes/Mongrel/HttpRequest.html#M000137">unescape (Mongrel::HttpRequest)</a><br />
|
|
160
|
+
<a href="classes/Mutex.html#M000002">unlock (Mutex)</a><br />
|
|
161
|
+
<a href="classes/Mongrel/HttpServer.html#M000064">unregister (Mongrel::HttpServer)</a><br />
|
|
162
|
+
<a href="classes/Mongrel/URIClassifier.html#M000091">unregister (Mongrel::URIClassifier)</a><br />
|
|
163
|
+
<a href="classes/Mongrel/Configurator.html#M000101">uri (Mongrel::Configurator)</a><br />
|
|
164
|
+
<a href="classes/Mongrel/URIClassifier.html#M000087">uris (Mongrel::URIClassifier)</a><br />
|
|
165
|
+
<a href="classes/Mongrel/Command/Base.html#M000024">valid? (Mongrel::Command::Base)</a><br />
|
|
166
|
+
<a href="classes/Mongrel/Command/Base.html#M000027">valid_dir? (Mongrel::Command::Base)</a><br />
|
|
167
|
+
<a href="classes/Mongrel/Command/Base.html#M000025">valid_exists? (Mongrel::Command::Base)</a><br />
|
|
168
|
+
<a href="classes/Mongrel/Command/Base.html#M000026">valid_file? (Mongrel::Command::Base)</a><br />
|
|
169
|
+
<a href="classes/Mongrel/Command/Base.html#M000029">valid_group? (Mongrel::Command::Base)</a><br />
|
|
170
|
+
<a href="classes/Mongrel/Command/Base.html#M000028">valid_user? (Mongrel::Command::Base)</a><br />
|
|
171
|
+
<a href="classes/Mongrel/Command/Base.html#M000021">validate (Mongrel::Command::Base)</a><br />
|
|
172
|
+
<a href="classes/Mongrel/HttpResponse.html#M000083">write (Mongrel::HttpResponse)</a><br />
|
|
173
|
+
<a href="classes/Mongrel/Configurator.html#M000096">write_pid_file (Mongrel::Configurator)</a><br />
|
|
171
174
|
</div>
|
|
172
175
|
</div>
|
|
173
176
|
</body>
|
data/ext/http11/http11.c
CHANGED
|
@@ -54,7 +54,7 @@ static VALUE global_port_80;
|
|
|
54
54
|
/* Defines the maximum allowed lengths for various input elements.*/
|
|
55
55
|
DEF_MAX_LENGTH(FIELD_NAME, 256);
|
|
56
56
|
DEF_MAX_LENGTH(FIELD_VALUE, 80 * 1024);
|
|
57
|
-
DEF_MAX_LENGTH(REQUEST_URI, 1024 *
|
|
57
|
+
DEF_MAX_LENGTH(REQUEST_URI, 1024 * 12);
|
|
58
58
|
DEF_MAX_LENGTH(REQUEST_PATH, 1024);
|
|
59
59
|
DEF_MAX_LENGTH(QUERY_STRING, (1024 * 10));
|
|
60
60
|
DEF_MAX_LENGTH(HEADER, (1024 * (80 + 32)));
|
|
@@ -556,7 +556,7 @@ void Init_http11()
|
|
|
556
556
|
DEF_GLOBAL(server_protocol, "SERVER_PROTOCOL");
|
|
557
557
|
DEF_GLOBAL(server_protocol_value, "HTTP/1.1");
|
|
558
558
|
DEF_GLOBAL(http_host, "HTTP_HOST");
|
|
559
|
-
DEF_GLOBAL(mongrel_version, "Mongrel 0
|
|
559
|
+
DEF_GLOBAL(mongrel_version, "Mongrel 1.0");
|
|
560
560
|
DEF_GLOBAL(server_software, "SERVER_SOFTWARE");
|
|
561
561
|
DEF_GLOBAL(port_80, "80");
|
|
562
562
|
|
data/lib/mongrel.rb
CHANGED
|
@@ -6,10 +6,18 @@
|
|
|
6
6
|
|
|
7
7
|
$mongrel_debug_client = false
|
|
8
8
|
|
|
9
|
+
require 'rubygems'
|
|
9
10
|
require 'socket'
|
|
10
11
|
require 'http11'
|
|
11
12
|
require 'tempfile'
|
|
12
|
-
|
|
13
|
+
begin
|
|
14
|
+
require 'fastthread'
|
|
15
|
+
rescue RuntimeError => e
|
|
16
|
+
warn "fastthread not loaded: #{ e.message }"
|
|
17
|
+
rescue LoadError
|
|
18
|
+
ensure
|
|
19
|
+
require 'thread'
|
|
20
|
+
end
|
|
13
21
|
require 'stringio'
|
|
14
22
|
require 'mongrel/cgi'
|
|
15
23
|
require 'mongrel/handlers'
|
|
@@ -18,8 +26,8 @@ require 'mongrel/tcphack'
|
|
|
18
26
|
require 'yaml'
|
|
19
27
|
require 'mongrel/configurator'
|
|
20
28
|
require 'time'
|
|
21
|
-
require 'rubygems'
|
|
22
29
|
require 'etc'
|
|
30
|
+
require 'uri'
|
|
23
31
|
|
|
24
32
|
|
|
25
33
|
# Mongrel module containing all of the classes (include C extensions) for running
|
|
@@ -47,6 +55,7 @@ module Mongrel
|
|
|
47
55
|
# Used to stop the HttpServer via Thread.raise.
|
|
48
56
|
class StopServer < Exception; end
|
|
49
57
|
|
|
58
|
+
|
|
50
59
|
# Thrown at a thread when it is timed out.
|
|
51
60
|
class TimeoutError < Exception; end
|
|
52
61
|
|
|
@@ -95,7 +104,6 @@ module Mongrel
|
|
|
95
104
|
}
|
|
96
105
|
|
|
97
106
|
|
|
98
|
-
|
|
99
107
|
# Frequently used constants when constructing requests or responses. Many times
|
|
100
108
|
# the constant just refers to a string with the same contents. Using these constants
|
|
101
109
|
# gave about a 3% to 10% performance improvement over using the strings directly.
|
|
@@ -117,9 +125,8 @@ module Mongrel
|
|
|
117
125
|
REQUEST_URI='REQUEST_URI'.freeze
|
|
118
126
|
REQUEST_PATH='REQUEST_PATH'.freeze
|
|
119
127
|
|
|
120
|
-
MONGREL_VERSION="0
|
|
128
|
+
MONGREL_VERSION="1.0".freeze
|
|
121
129
|
|
|
122
|
-
# TODO: this use of a base for tempfiles needs to be looked at for security problems
|
|
123
130
|
MONGREL_TMP_BASE="mongrel".freeze
|
|
124
131
|
|
|
125
132
|
# The standard empty 404 response for bad requests. Use Error4040Handler for custom stuff.
|
|
@@ -158,13 +165,16 @@ module Mongrel
|
|
|
158
165
|
HTTP_IF_MODIFIED_SINCE="HTTP_IF_MODIFIED_SINCE".freeze
|
|
159
166
|
HTTP_IF_NONE_MATCH="HTTP_IF_NONE_MATCH".freeze
|
|
160
167
|
REDIRECT = "HTTP/1.1 302 Found\r\nLocation: %s\r\nConnection: close\r\n\r\n".freeze
|
|
168
|
+
HOST = "HOST".freeze
|
|
161
169
|
end
|
|
162
170
|
|
|
171
|
+
|
|
163
172
|
# Basically a Hash with one extra parameter for the HTTP body, mostly used internally.
|
|
164
173
|
class HttpParams < Hash
|
|
165
174
|
attr_accessor :http_body
|
|
166
175
|
end
|
|
167
176
|
|
|
177
|
+
|
|
168
178
|
# When a handler is found for a registered URI then this class is constructed
|
|
169
179
|
# and passed to your HttpHandler::process method. You should assume that
|
|
170
180
|
# *one* handler processes all requests. Included in the HttpRequest is a
|
|
@@ -185,23 +195,24 @@ module Mongrel
|
|
|
185
195
|
# You don't really call this. It's made for you.
|
|
186
196
|
# Main thing it does is hook up the params, and store any remaining
|
|
187
197
|
# body data into the HttpRequest.body attribute.
|
|
188
|
-
|
|
189
|
-
# TODO: Implement tempfile removal when the request is done.
|
|
190
|
-
def initialize(params, socket, dispatcher)
|
|
198
|
+
def initialize(params, socket, dispatchers)
|
|
191
199
|
@params = params
|
|
192
200
|
@socket = socket
|
|
193
|
-
|
|
194
|
-
|
|
201
|
+
@dispatchers = dispatchers
|
|
202
|
+
content_length = @params[Const::CONTENT_LENGTH].to_i
|
|
203
|
+
remain = content_length - @params.http_body.length
|
|
195
204
|
|
|
196
|
-
|
|
197
|
-
|
|
205
|
+
# tell all dispatchers the request has begun
|
|
206
|
+
@dispatchers.each do |dispatcher|
|
|
207
|
+
dispatcher.request_begins(@params)
|
|
208
|
+
end unless @dispatchers.nil? || @dispatchers.empty?
|
|
198
209
|
|
|
199
210
|
# Some clients (like FF1.0) report 0 for body and then send a body. This will probably truncate them but at least the request goes through usually.
|
|
200
211
|
if remain <= 0
|
|
201
212
|
# we've got everything, pack it up
|
|
202
213
|
@body = StringIO.new
|
|
203
|
-
@body.write params.http_body
|
|
204
|
-
|
|
214
|
+
@body.write @params.http_body
|
|
215
|
+
update_request_progress(0, content_length)
|
|
205
216
|
elsif remain > 0
|
|
206
217
|
# must read more data to complete body
|
|
207
218
|
if remain > Const::MAX_BODY
|
|
@@ -213,30 +224,42 @@ module Mongrel
|
|
|
213
224
|
@body = StringIO.new
|
|
214
225
|
end
|
|
215
226
|
|
|
216
|
-
@body.write params.http_body
|
|
217
|
-
read_body(remain, content_length
|
|
227
|
+
@body.write @params.http_body
|
|
228
|
+
read_body(remain, content_length)
|
|
218
229
|
end
|
|
219
230
|
|
|
220
|
-
@body.rewind if body
|
|
231
|
+
@body.rewind if @body
|
|
221
232
|
end
|
|
222
233
|
|
|
234
|
+
# updates all dispatchers about our progress
|
|
235
|
+
def update_request_progress(clen, total)
|
|
236
|
+
return if @dispatchers.nil? || @dispatchers.empty?
|
|
237
|
+
@dispatchers.each do |dispatcher|
|
|
238
|
+
dispatcher.request_progress(@params, clen, total)
|
|
239
|
+
end
|
|
240
|
+
end
|
|
241
|
+
private :update_request_progress
|
|
223
242
|
|
|
224
243
|
# Does the heavy lifting of properly reading the larger body requests in
|
|
225
244
|
# small chunks. It expects @body to be an IO object, @socket to be valid,
|
|
226
245
|
# and will set @body = nil if the request fails. It also expects any initial
|
|
227
246
|
# part of the body that has been read to be in the @body already.
|
|
228
|
-
def read_body(remain, total
|
|
247
|
+
def read_body(remain, total)
|
|
229
248
|
begin
|
|
230
249
|
# write the odd sized chunk first
|
|
250
|
+
@params.http_body = read_socket(remain % Const::CHUNK_SIZE)
|
|
251
|
+
|
|
252
|
+
remain -= @body.write(@params.http_body)
|
|
231
253
|
|
|
232
|
-
|
|
233
|
-
dispatcher.request_progress(params, remain, total) if dispatcher
|
|
254
|
+
update_request_progress(remain, total)
|
|
234
255
|
|
|
235
256
|
# then stream out nothing but perfectly sized chunks
|
|
236
257
|
until remain <= 0 or @socket.closed?
|
|
237
|
-
remain -= @body.write(read_socket(Const::CHUNK_SIZE))
|
|
238
258
|
# ASSUME: we are writing to a disk and these writes always write the requested amount
|
|
239
|
-
|
|
259
|
+
@params.http_body = read_socket(Const::CHUNK_SIZE)
|
|
260
|
+
remain -= @body.write(@params.http_body)
|
|
261
|
+
|
|
262
|
+
update_request_progress(remain, total)
|
|
240
263
|
end
|
|
241
264
|
rescue Object
|
|
242
265
|
STDERR.puts "ERROR reading http body: #$!"
|
|
@@ -247,7 +270,7 @@ module Mongrel
|
|
|
247
270
|
@body = nil # signals that there was a problem
|
|
248
271
|
end
|
|
249
272
|
end
|
|
250
|
-
|
|
273
|
+
|
|
251
274
|
def read_socket(len)
|
|
252
275
|
if !@socket.closed?
|
|
253
276
|
data = @socket.read(len)
|
|
@@ -313,17 +336,25 @@ module Mongrel
|
|
|
313
336
|
# semantics for Hash (where doing an insert replaces) is not there.
|
|
314
337
|
class HeaderOut
|
|
315
338
|
attr_reader :out
|
|
339
|
+
attr_accessor :allowed_duplicates
|
|
316
340
|
|
|
317
341
|
def initialize(out)
|
|
342
|
+
@sent = {}
|
|
343
|
+
@allowed_duplicates = {"Set-Cookie" => true, "Set-Cookie2" => true,
|
|
344
|
+
"Warning" => true, "WWW-Authenticate" => true}
|
|
318
345
|
@out = out
|
|
319
346
|
end
|
|
320
347
|
|
|
321
348
|
# Simply writes "#{key}: #{value}" to an output buffer.
|
|
322
349
|
def[]=(key,value)
|
|
323
|
-
@
|
|
350
|
+
if not @sent.has_key?(key) or @allowed_duplicates.has_key?(key)
|
|
351
|
+
@sent[key] = true
|
|
352
|
+
@out.write(Const::HEADER_FORMAT % [key, value])
|
|
353
|
+
end
|
|
324
354
|
end
|
|
325
355
|
end
|
|
326
356
|
|
|
357
|
+
|
|
327
358
|
# Writes and controls your response to the client using the HTTP/1.1 specification.
|
|
328
359
|
# You use it by simply doing:
|
|
329
360
|
#
|
|
@@ -484,6 +515,7 @@ module Mongrel
|
|
|
484
515
|
|
|
485
516
|
end
|
|
486
517
|
|
|
518
|
+
|
|
487
519
|
# This is the main driver of Mongrel, while the Mongrel::HttpParser and Mongrel::URIClassifier
|
|
488
520
|
# make up the majority of how the server functions. It's a very simple class that just
|
|
489
521
|
# has a thread accepting connections and a simple HttpServer.process_client function
|
|
@@ -524,8 +556,6 @@ module Mongrel
|
|
|
524
556
|
# The timeout parameter is a sleep timeout (in hundredths of a second) that is placed between
|
|
525
557
|
# socket.accept calls in order to give the server a cheap throttle time. It defaults to 0 and
|
|
526
558
|
# actually if it is 0 then the sleep is not done at all.
|
|
527
|
-
#
|
|
528
|
-
# TODO: Find out if anyone actually uses the timeout option since it seems to cause problems on FBSD.
|
|
529
559
|
def initialize(host, port, num_processors=(2**30-1), timeout=0)
|
|
530
560
|
@socket = TCPServer.new(host, port)
|
|
531
561
|
@classifier = URIClassifier.new
|
|
@@ -537,7 +567,6 @@ module Mongrel
|
|
|
537
567
|
@death_time = 60
|
|
538
568
|
end
|
|
539
569
|
|
|
540
|
-
|
|
541
570
|
# Does the majority of the IO processing. It has been written in Ruby using
|
|
542
571
|
# about 7 different IO processing strategies and no matter how it's done
|
|
543
572
|
# the performance just does not improve. It is currently carefully constructed
|
|
@@ -559,15 +588,24 @@ module Mongrel
|
|
|
559
588
|
nparsed = parser.execute(params, data, nparsed)
|
|
560
589
|
|
|
561
590
|
if parser.finished?
|
|
591
|
+
if not params[Const::REQUEST_PATH]
|
|
592
|
+
# it might be a dumbass full host request header
|
|
593
|
+
uri = URI.parse(params[Const::REQUEST_URI])
|
|
594
|
+
params[Const::REQUEST_PATH] = uri.request_uri
|
|
595
|
+
end
|
|
596
|
+
|
|
597
|
+
raise "No REQUEST PATH" if not params[Const::REQUEST_PATH]
|
|
598
|
+
|
|
562
599
|
script_name, path_info, handlers = @classifier.resolve(params[Const::REQUEST_PATH])
|
|
563
600
|
|
|
564
601
|
if handlers
|
|
565
602
|
params[Const::PATH_INFO] = path_info
|
|
566
603
|
params[Const::SCRIPT_NAME] = script_name
|
|
567
604
|
params[Const::REMOTE_ADDR] = params[Const::HTTP_X_FORWARDED_FOR] || client.peeraddr.last
|
|
568
|
-
notifier = handlers[0].request_notify ? handlers[0] : nil
|
|
569
605
|
|
|
570
|
-
|
|
606
|
+
# select handlers that want more detailed request notification
|
|
607
|
+
notifiers = handlers.select { |h| h.request_notify }
|
|
608
|
+
request = HttpRequest.new(params, client, notifiers)
|
|
571
609
|
|
|
572
610
|
# in the case of large file uploads the user could close the socket, so skip those requests
|
|
573
611
|
break if request.body == nil # nil signals from HttpRequest::initialize that the request was aborted
|
|
@@ -654,10 +692,17 @@ module Mongrel
|
|
|
654
692
|
end
|
|
655
693
|
|
|
656
694
|
def configure_socket_options
|
|
657
|
-
|
|
695
|
+
case RUBY_PLATFORM
|
|
696
|
+
when /linux/
|
|
658
697
|
# 9 is currently TCP_DEFER_ACCEPT
|
|
659
|
-
$tcp_defer_accept_opts = [9,1]
|
|
660
|
-
$tcp_cork_opts = [3,1]
|
|
698
|
+
$tcp_defer_accept_opts = [Socket::SOL_TCP, 9, 1]
|
|
699
|
+
$tcp_cork_opts = [Socket::SOL_TCP, 3, 1]
|
|
700
|
+
when /freebsd/
|
|
701
|
+
# Use the HTTP accept filter if available.
|
|
702
|
+
# The struct made by pack() is defined in /usr/include/sys/socket.h as accept_filter_arg
|
|
703
|
+
unless `/sbin/sysctl -nq net.inet.accf.http`.empty?
|
|
704
|
+
$tcp_defer_accept_opts = [Socket::SOL_SOCKET, Socket::SO_ACCEPTFILTER, ['httpready', nil].pack('a16a240')]
|
|
705
|
+
end
|
|
661
706
|
end
|
|
662
707
|
end
|
|
663
708
|
|
|
@@ -668,13 +713,18 @@ module Mongrel
|
|
|
668
713
|
|
|
669
714
|
configure_socket_options
|
|
670
715
|
|
|
671
|
-
|
|
716
|
+
if $tcp_defer_accept_opts
|
|
717
|
+
@socket.setsockopt(*$tcp_defer_accept_opts) rescue nil
|
|
718
|
+
end
|
|
672
719
|
|
|
673
720
|
@acceptor = Thread.new do
|
|
674
721
|
while true
|
|
675
722
|
begin
|
|
676
723
|
client = @socket.accept
|
|
677
|
-
|
|
724
|
+
|
|
725
|
+
if $tcp_cork_opts
|
|
726
|
+
client.setsockopt(*$tcp_cork_opts) rescue nil
|
|
727
|
+
end
|
|
678
728
|
|
|
679
729
|
worker_list = @workers.list
|
|
680
730
|
|
|
@@ -683,8 +733,7 @@ module Mongrel
|
|
|
683
733
|
client.close rescue Object
|
|
684
734
|
reap_dead_workers("max processors")
|
|
685
735
|
else
|
|
686
|
-
thread = Thread.new { process_client(
|
|
687
|
-
thread.abort_on_exception = true
|
|
736
|
+
thread = Thread.new(client) {|c| process_client(c) }
|
|
688
737
|
thread[:started_on] = Time.now
|
|
689
738
|
@workers.add(thread)
|
|
690
739
|
|
|
@@ -704,14 +753,12 @@ module Mongrel
|
|
|
704
753
|
STDERR.puts $!.backtrace.join("\n") if $mongrel_debug_client
|
|
705
754
|
end
|
|
706
755
|
end
|
|
707
|
-
|
|
708
756
|
graceful_shutdown
|
|
709
757
|
end
|
|
710
758
|
|
|
711
759
|
return @acceptor
|
|
712
760
|
end
|
|
713
761
|
|
|
714
|
-
|
|
715
762
|
# Simply registers a handler with the internal URIClassifier. When the URI is
|
|
716
763
|
# found in the prefix of a request then your handler's HttpHandler::process method
|
|
717
764
|
# is called. See Mongrel::URIClassifier#register for more information.
|