passenger 2.1.3 → 2.2.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of passenger might be problematic. Click here for more details.

Files changed (398) hide show
  1. data/DEVELOPERS.TXT +2 -0
  2. data/INSTALL +3 -1
  3. data/LICENSE +19 -355
  4. data/NEWS +3 -0
  5. data/README +11 -4
  6. data/Rakefile +435 -236
  7. data/bin/passenger-config +20 -14
  8. data/bin/passenger-install-apache2-module +67 -201
  9. data/bin/passenger-install-nginx-module +477 -0
  10. data/bin/passenger-make-enterprisey +17 -12
  11. data/bin/passenger-memory-stats +33 -23
  12. data/bin/passenger-spawn-server +17 -12
  13. data/bin/passenger-status +18 -13
  14. data/bin/passenger-stress-test +17 -12
  15. data/doc/{Users guide.html → Users guide Apache.html } +79 -61
  16. data/doc/{Users guide.txt → Users guide Apache.txt } +43 -939
  17. data/doc/Users guide Nginx.html +2276 -0
  18. data/doc/Users guide Nginx.txt +776 -0
  19. data/doc/cxxapi/ApplicationPoolServer_8h-source.html +9 -4
  20. data/doc/cxxapi/ApplicationPool_8h-source.html +9 -4
  21. data/doc/cxxapi/Application_8h-source.html +26 -21
  22. data/doc/cxxapi/Bucket_8h-source.html +54 -44
  23. data/doc/cxxapi/CachedFileStat_8h-source.html +9 -4
  24. data/doc/cxxapi/Configuration_8h-source.html +357 -339
  25. data/doc/cxxapi/DirectoryMapper_8h-source.html +294 -280
  26. data/doc/cxxapi/DummySpawnManager_8h-source.html +9 -4
  27. data/doc/cxxapi/Exceptions_8h-source.html +9 -4
  28. data/doc/cxxapi/FileChecker_8h-source.html +9 -4
  29. data/doc/cxxapi/Hooks_8h-source.html +50 -40
  30. data/doc/cxxapi/Logging_8h-source.html +9 -4
  31. data/doc/cxxapi/MessageChannel_8h-source.html +20 -15
  32. data/doc/cxxapi/PoolOptions_8h-source.html +10 -5
  33. data/doc/cxxapi/SpawnManager_8h-source.html +9 -4
  34. data/doc/cxxapi/StandardApplicationPool_8h-source.html +10 -5
  35. data/doc/cxxapi/SystemTime_8h-source.html +9 -4
  36. data/doc/cxxapi/Utils_8h-source.html +242 -214
  37. data/doc/cxxapi/annotated.html +4 -28
  38. data/doc/cxxapi/classClient-members.html +4 -4
  39. data/doc/cxxapi/classClient.html +14 -11
  40. data/doc/cxxapi/classHooks-members.html +4 -5
  41. data/doc/cxxapi/classHooks.html +26 -24
  42. data/doc/cxxapi/classPassenger_1_1Application-members.html +4 -4
  43. data/doc/cxxapi/classPassenger_1_1Application.html +40 -37
  44. data/doc/cxxapi/classPassenger_1_1ApplicationPool-members.html +4 -4
  45. data/doc/cxxapi/classPassenger_1_1ApplicationPool.html +95 -92
  46. data/doc/cxxapi/classPassenger_1_1ApplicationPoolServer-members.html +4 -4
  47. data/doc/cxxapi/classPassenger_1_1ApplicationPoolServer.html +26 -23
  48. data/doc/cxxapi/classPassenger_1_1ApplicationPool__inherit__graph.map +1 -1
  49. data/doc/cxxapi/classPassenger_1_1ApplicationPool__inherit__graph.md5 +1 -1
  50. data/doc/cxxapi/classPassenger_1_1ApplicationPool__inherit__graph.png +0 -0
  51. data/doc/cxxapi/classPassenger_1_1Application_1_1Session-members.html +17 -17
  52. data/doc/cxxapi/classPassenger_1_1Application_1_1Session.html +139 -136
  53. data/doc/cxxapi/classPassenger_1_1BufferedUpload-members.html +4 -4
  54. data/doc/cxxapi/classPassenger_1_1BufferedUpload.html +13 -10
  55. data/doc/cxxapi/classPassenger_1_1BusyException-members.html +4 -4
  56. data/doc/cxxapi/classPassenger_1_1BusyException.html +11 -8
  57. data/doc/cxxapi/classPassenger_1_1ConfigurationException-members.html +4 -4
  58. data/doc/cxxapi/classPassenger_1_1ConfigurationException.html +11 -8
  59. data/doc/cxxapi/classPassenger_1_1DirectoryMapper-members.html +4 -5
  60. data/doc/cxxapi/classPassenger_1_1DirectoryMapper.html +45 -43
  61. data/doc/cxxapi/classPassenger_1_1DummySpawnManager-members.html +4 -4
  62. data/doc/cxxapi/classPassenger_1_1DummySpawnManager.html +13 -10
  63. data/doc/cxxapi/classPassenger_1_1FileChecker-members.html +4 -4
  64. data/doc/cxxapi/classPassenger_1_1FileChecker.html +22 -19
  65. data/doc/cxxapi/classPassenger_1_1FileNotFoundException-members.html +4 -4
  66. data/doc/cxxapi/classPassenger_1_1FileNotFoundException.html +12 -9
  67. data/doc/cxxapi/classPassenger_1_1FileNotFoundException__inherit__graph.map +1 -1
  68. data/doc/cxxapi/classPassenger_1_1FileNotFoundException__inherit__graph.md5 +1 -1
  69. data/doc/cxxapi/classPassenger_1_1FileNotFoundException__inherit__graph.png +0 -0
  70. data/doc/cxxapi/classPassenger_1_1FileSystemException-members.html +4 -4
  71. data/doc/cxxapi/classPassenger_1_1FileSystemException.html +14 -11
  72. data/doc/cxxapi/classPassenger_1_1FileSystemException__inherit__graph.map +1 -1
  73. data/doc/cxxapi/classPassenger_1_1FileSystemException__inherit__graph.md5 +1 -1
  74. data/doc/cxxapi/classPassenger_1_1FileSystemException__inherit__graph.png +0 -0
  75. data/doc/cxxapi/classPassenger_1_1IOException-members.html +4 -4
  76. data/doc/cxxapi/classPassenger_1_1IOException.html +12 -9
  77. data/doc/cxxapi/classPassenger_1_1IOException__inherit__graph.map +1 -1
  78. data/doc/cxxapi/classPassenger_1_1IOException__inherit__graph.md5 +1 -1
  79. data/doc/cxxapi/classPassenger_1_1IOException__inherit__graph.png +0 -0
  80. data/doc/cxxapi/classPassenger_1_1MessageChannel-members.html +4 -4
  81. data/doc/cxxapi/classPassenger_1_1MessageChannel.html +228 -225
  82. data/doc/cxxapi/classPassenger_1_1RuntimeException-members.html +4 -4
  83. data/doc/cxxapi/classPassenger_1_1RuntimeException.html +11 -8
  84. data/doc/cxxapi/classPassenger_1_1SpawnException-members.html +4 -4
  85. data/doc/cxxapi/classPassenger_1_1SpawnException.html +14 -11
  86. data/doc/cxxapi/classPassenger_1_1SpawnManager-members.html +4 -4
  87. data/doc/cxxapi/classPassenger_1_1SpawnManager.html +50 -47
  88. data/doc/cxxapi/classPassenger_1_1StandardApplicationPool-members.html +4 -4
  89. data/doc/cxxapi/classPassenger_1_1StandardApplicationPool.html +73 -70
  90. data/doc/cxxapi/classPassenger_1_1StandardApplicationPool__inherit__graph.map +1 -1
  91. data/doc/cxxapi/classPassenger_1_1StandardApplicationPool__inherit__graph.md5 +1 -1
  92. data/doc/cxxapi/classPassenger_1_1StandardApplicationPool__inherit__graph.png +0 -0
  93. data/doc/cxxapi/classPassenger_1_1SystemException-members.html +4 -4
  94. data/doc/cxxapi/classPassenger_1_1SystemException.html +17 -14
  95. data/doc/cxxapi/classPassenger_1_1SystemException__inherit__graph.map +1 -1
  96. data/doc/cxxapi/classPassenger_1_1SystemException__inherit__graph.md5 +1 -1
  97. data/doc/cxxapi/classPassenger_1_1SystemException__inherit__graph.png +0 -0
  98. data/doc/cxxapi/classPassenger_1_1SystemTime-members.html +4 -4
  99. data/doc/cxxapi/classPassenger_1_1SystemTime.html +14 -11
  100. data/doc/cxxapi/classes.html +35 -0
  101. data/doc/cxxapi/definitions_8h-source.html +9 -4
  102. data/doc/cxxapi/doxygen.css +311 -303
  103. data/doc/cxxapi/files.html +9 -18
  104. data/doc/cxxapi/functions.html +5 -224
  105. data/doc/cxxapi/functions_func.html +5 -185
  106. data/doc/cxxapi/functions_type.html +4 -4
  107. data/doc/cxxapi/functions_vars.html +4 -4
  108. data/doc/cxxapi/graph_legend.dot +19 -19
  109. data/doc/cxxapi/graph_legend.html +5 -5
  110. data/doc/cxxapi/graph_legend.png +0 -0
  111. data/doc/cxxapi/group__Configuration.html +11 -13
  112. data/doc/cxxapi/group__Configuration.png +0 -0
  113. data/doc/cxxapi/group__Core.html +10 -12
  114. data/doc/cxxapi/group__Core.png +0 -0
  115. data/doc/cxxapi/group__Exceptions.html +5 -7
  116. data/doc/cxxapi/group__Hooks.html +5 -7
  117. data/doc/cxxapi/group__Hooks.png +0 -0
  118. data/doc/cxxapi/group__Support.html +5 -624
  119. data/doc/cxxapi/hierarchy.html +6 -6
  120. data/doc/cxxapi/inherit__graph__0.map +1 -1
  121. data/doc/cxxapi/inherit__graph__0.md5 +1 -1
  122. data/doc/cxxapi/inherit__graph__0.png +0 -0
  123. data/doc/cxxapi/inherit__graph__1.map +1 -1
  124. data/doc/cxxapi/inherit__graph__1.md5 +1 -1
  125. data/doc/cxxapi/inherit__graph__1.png +0 -0
  126. data/doc/cxxapi/inherit__graph__10.map +1 -1
  127. data/doc/cxxapi/inherit__graph__10.md5 +1 -1
  128. data/doc/cxxapi/inherit__graph__10.png +0 -0
  129. data/doc/cxxapi/inherit__graph__11.map +1 -1
  130. data/doc/cxxapi/inherit__graph__11.md5 +1 -1
  131. data/doc/cxxapi/inherit__graph__11.png +0 -0
  132. data/doc/cxxapi/inherit__graph__12.map +1 -1
  133. data/doc/cxxapi/inherit__graph__12.md5 +1 -1
  134. data/doc/cxxapi/inherit__graph__12.png +0 -0
  135. data/doc/cxxapi/inherit__graph__13.map +1 -2
  136. data/doc/cxxapi/inherit__graph__13.md5 +1 -1
  137. data/doc/cxxapi/inherit__graph__13.png +0 -0
  138. data/doc/cxxapi/inherit__graph__14.map +2 -1
  139. data/doc/cxxapi/inherit__graph__14.md5 +1 -1
  140. data/doc/cxxapi/inherit__graph__14.png +0 -0
  141. data/doc/cxxapi/inherit__graph__15.map +1 -1
  142. data/doc/cxxapi/inherit__graph__15.md5 +1 -1
  143. data/doc/cxxapi/inherit__graph__15.png +0 -0
  144. data/doc/cxxapi/inherit__graph__16.map +1 -1
  145. data/doc/cxxapi/inherit__graph__16.md5 +1 -1
  146. data/doc/cxxapi/inherit__graph__16.png +0 -0
  147. data/doc/cxxapi/inherit__graph__17.map +1 -1
  148. data/doc/cxxapi/inherit__graph__17.md5 +1 -1
  149. data/doc/cxxapi/inherit__graph__17.png +0 -0
  150. data/doc/cxxapi/inherit__graph__18.map +1 -1
  151. data/doc/cxxapi/inherit__graph__18.md5 +1 -1
  152. data/doc/cxxapi/inherit__graph__18.png +0 -0
  153. data/doc/cxxapi/inherit__graph__19.map +1 -1
  154. data/doc/cxxapi/inherit__graph__19.md5 +1 -1
  155. data/doc/cxxapi/inherit__graph__19.png +0 -0
  156. data/doc/cxxapi/inherit__graph__2.map +1 -1
  157. data/doc/cxxapi/inherit__graph__2.md5 +1 -1
  158. data/doc/cxxapi/inherit__graph__2.png +0 -0
  159. data/doc/cxxapi/inherit__graph__20.map +2 -2
  160. data/doc/cxxapi/inherit__graph__20.md5 +1 -1
  161. data/doc/cxxapi/inherit__graph__20.png +0 -0
  162. data/doc/cxxapi/inherit__graph__21.map +1 -1
  163. data/doc/cxxapi/inherit__graph__21.md5 +1 -1
  164. data/doc/cxxapi/inherit__graph__21.png +0 -0
  165. data/doc/cxxapi/inherit__graph__3.map +1 -1
  166. data/doc/cxxapi/inherit__graph__3.md5 +1 -1
  167. data/doc/cxxapi/inherit__graph__3.png +0 -0
  168. data/doc/cxxapi/inherit__graph__4.map +1 -1
  169. data/doc/cxxapi/inherit__graph__4.md5 +1 -1
  170. data/doc/cxxapi/inherit__graph__4.png +0 -0
  171. data/doc/cxxapi/inherit__graph__5.map +1 -2
  172. data/doc/cxxapi/inherit__graph__5.md5 +1 -1
  173. data/doc/cxxapi/inherit__graph__5.png +0 -0
  174. data/doc/cxxapi/inherit__graph__6.map +2 -1
  175. data/doc/cxxapi/inherit__graph__6.md5 +1 -1
  176. data/doc/cxxapi/inherit__graph__6.png +0 -0
  177. data/doc/cxxapi/inherit__graph__7.map +1 -1
  178. data/doc/cxxapi/inherit__graph__7.md5 +1 -1
  179. data/doc/cxxapi/inherit__graph__7.png +0 -0
  180. data/doc/cxxapi/inherit__graph__8.map +1 -1
  181. data/doc/cxxapi/inherit__graph__8.md5 +1 -1
  182. data/doc/cxxapi/inherit__graph__8.png +0 -0
  183. data/doc/cxxapi/inherit__graph__9.map +1 -1
  184. data/doc/cxxapi/inherit__graph__9.md5 +1 -1
  185. data/doc/cxxapi/inherit__graph__9.png +0 -0
  186. data/doc/cxxapi/inherits.html +41 -41
  187. data/doc/cxxapi/main.html +4 -4
  188. data/doc/cxxapi/modules.html +4 -5
  189. data/doc/cxxapi/structPassenger_1_1AnythingToString-members.html +4 -4
  190. data/doc/cxxapi/structPassenger_1_1AnythingToString.html +13 -10
  191. data/doc/cxxapi/structPassenger_1_1AnythingToString_3_01vector_3_01string_01_4_01_4-members.html +5 -5
  192. data/doc/cxxapi/structPassenger_1_1AnythingToString_3_01vector_3_01string_01_4_01_4.html +16 -13
  193. data/doc/cxxapi/structPassenger_1_1PoolOptions-members.html +4 -4
  194. data/doc/cxxapi/structPassenger_1_1PoolOptions.html +63 -60
  195. data/doc/cxxapi/tabs.css +5 -2
  196. data/doc/cxxapi/tree.html +7 -81
  197. data/doc/rdoc/classes/ConditionVariable.html +59 -59
  198. data/doc/rdoc/classes/Exception.html +11 -11
  199. data/doc/rdoc/classes/GC.html +4 -4
  200. data/doc/rdoc/classes/IO.html +14 -14
  201. data/doc/rdoc/classes/PhusionPassenger.html +75 -20
  202. data/doc/rdoc/classes/PhusionPassenger/AbstractInstaller.html +153 -0
  203. data/doc/rdoc/classes/PhusionPassenger/AbstractRequestHandler.html +125 -130
  204. data/doc/rdoc/classes/PhusionPassenger/AbstractServer.html +236 -236
  205. data/doc/rdoc/classes/PhusionPassenger/AbstractServerCollection.html +213 -213
  206. data/doc/rdoc/classes/PhusionPassenger/AdminTools.html +28 -28
  207. data/doc/rdoc/classes/PhusionPassenger/AdminTools/ControlProcess.html +91 -75
  208. data/doc/rdoc/classes/PhusionPassenger/AppInitError.html +10 -10
  209. data/doc/rdoc/classes/PhusionPassenger/Application.html +64 -64
  210. data/doc/rdoc/classes/PhusionPassenger/ConsoleTextTemplate.html +34 -34
  211. data/doc/rdoc/classes/PhusionPassenger/FrameworkInitError.html +13 -13
  212. data/doc/rdoc/classes/PhusionPassenger/HTMLTemplate.html +30 -30
  213. data/doc/rdoc/classes/PhusionPassenger/InitializationError.html +10 -10
  214. data/doc/rdoc/classes/PhusionPassenger/MessageChannel.html +136 -136
  215. data/doc/rdoc/classes/PhusionPassenger/NativeSupport.html +24 -24
  216. data/doc/rdoc/classes/PhusionPassenger/Rack/ApplicationSpawner.html +42 -42
  217. data/doc/rdoc/classes/PhusionPassenger/Rack/RequestHandler.html +55 -53
  218. data/doc/rdoc/classes/PhusionPassenger/Railz.html +1 -1
  219. data/doc/rdoc/classes/PhusionPassenger/Railz/ApplicationSpawner.html +25 -30
  220. data/doc/rdoc/classes/PhusionPassenger/Railz/CGIFixed.html +23 -23
  221. data/doc/rdoc/classes/PhusionPassenger/Railz/FrameworkSpawner.html +116 -117
  222. data/doc/rdoc/classes/PhusionPassenger/Railz/RequestHandler.html +22 -22
  223. data/doc/rdoc/classes/PhusionPassenger/SpawnManager.html +118 -124
  224. data/doc/rdoc/classes/PhusionPassenger/UnknownError.html +10 -10
  225. data/doc/rdoc/classes/PhusionPassenger/Utils.html +354 -354
  226. data/doc/rdoc/classes/PhusionPassenger/VersionNotFound.html +9 -9
  227. data/doc/rdoc/classes/PhusionPassenger/WSGI/ApplicationSpawner.html +37 -37
  228. data/doc/rdoc/classes/PlatformInfo.html +282 -261
  229. data/doc/rdoc/classes/RakeExtensions.html +7 -7
  230. data/doc/rdoc/classes/Signal.html +26 -26
  231. data/doc/rdoc/created.rid +1 -1
  232. data/doc/rdoc/files/DEVELOPERS_TXT.html +6 -1
  233. data/doc/rdoc/files/README.html +15 -6
  234. data/doc/rdoc/files/ext/phusion_passenger/native_support_c.html +1 -1
  235. data/doc/rdoc/files/lib/phusion_passenger/abstract_installer_rb.html +129 -0
  236. data/doc/rdoc/files/lib/phusion_passenger/abstract_request_handler_rb.html +20 -13
  237. data/doc/rdoc/files/lib/phusion_passenger/abstract_server_collection_rb.html +19 -13
  238. data/doc/rdoc/files/lib/phusion_passenger/abstract_server_rb.html +19 -13
  239. data/doc/rdoc/files/lib/phusion_passenger/admin_tools/control_process_rb.html +31 -1
  240. data/doc/rdoc/files/lib/phusion_passenger/admin_tools_rb.html +31 -1
  241. data/doc/rdoc/files/lib/phusion_passenger/application_rb.html +19 -13
  242. data/doc/rdoc/files/lib/phusion_passenger/console_text_template_rb.html +19 -13
  243. data/doc/rdoc/files/lib/phusion_passenger/constants_rb.html +21 -12
  244. data/doc/rdoc/files/lib/phusion_passenger/dependencies_rb.html +19 -13
  245. data/doc/rdoc/files/lib/phusion_passenger/events_rb.html +19 -13
  246. data/doc/rdoc/files/lib/phusion_passenger/exceptions_rb.html +19 -13
  247. data/doc/rdoc/files/lib/phusion_passenger/html_template_rb.html +19 -13
  248. data/doc/rdoc/files/lib/phusion_passenger/message_channel_rb.html +19 -13
  249. data/doc/rdoc/files/lib/phusion_passenger/packaging_rb.html +122 -0
  250. data/doc/rdoc/files/lib/phusion_passenger/platform_info_rb.html +19 -13
  251. data/doc/rdoc/files/lib/phusion_passenger/rack/application_spawner_rb.html +22 -12
  252. data/doc/rdoc/files/lib/phusion_passenger/rack/request_handler_rb.html +21 -12
  253. data/doc/rdoc/files/lib/phusion_passenger/railz/application_spawner_rb.html +19 -13
  254. data/doc/rdoc/files/lib/phusion_passenger/railz/cgi_fixed_rb.html +1 -1
  255. data/doc/rdoc/files/lib/phusion_passenger/railz/framework_spawner_rb.html +19 -13
  256. data/doc/rdoc/files/lib/phusion_passenger/railz/request_handler_rb.html +21 -12
  257. data/doc/rdoc/files/lib/phusion_passenger/simple_benchmarking_rb.html +19 -13
  258. data/doc/rdoc/files/lib/phusion_passenger/spawn_manager_rb.html +19 -13
  259. data/doc/rdoc/files/lib/phusion_passenger/utils_rb.html +27 -21
  260. data/doc/rdoc/files/lib/phusion_passenger/wsgi/application_spawner_rb.html +21 -12
  261. data/doc/rdoc/files/misc/rake/extensions_rb.html +21 -12
  262. data/doc/rdoc/fr_class_index.html +1 -0
  263. data/doc/rdoc/fr_file_index.html +2 -0
  264. data/doc/rdoc/fr_method_index.html +116 -112
  265. data/doc/users_guide_snippets/analysis_and_system_maintenance_tools.txt +144 -0
  266. data/doc/users_guide_snippets/appendix_a_about.txt +13 -0
  267. data/doc/users_guide_snippets/appendix_b_terminology.txt +63 -0
  268. data/doc/users_guide_snippets/appendix_c_spawning_methods.txt +304 -0
  269. data/doc/users_guide_snippets/global_queueing_explained.txt +78 -0
  270. data/doc/users_guide_snippets/rackup_specifications.txt +75 -0
  271. data/doc/users_guide_snippets/rails_spawn_method.txt +48 -0
  272. data/doc/users_guide_snippets/tips.txt +173 -0
  273. data/ext/apache2/Bucket.cpp +17 -12
  274. data/ext/apache2/Bucket.h +17 -12
  275. data/ext/apache2/Configuration.cpp +17 -12
  276. data/ext/apache2/Configuration.h +27 -14
  277. data/ext/apache2/DirectoryMapper.h +21 -12
  278. data/ext/apache2/Hooks.cpp +67 -21
  279. data/ext/apache2/Hooks.h +17 -12
  280. data/ext/apache2/mod_passenger.c +17 -12
  281. data/ext/{apache2 → common}/Application.h +19 -14
  282. data/ext/{apache2 → common}/ApplicationPool.h +17 -12
  283. data/ext/{apache2 → common}/ApplicationPoolServer.h +18 -72
  284. data/ext/{apache2 → common}/ApplicationPoolServerExecutable.cpp +45 -104
  285. data/ext/common/ApplicationPoolStatusReporter.h +212 -0
  286. data/ext/{apache2 → common}/CachedFileStat.cpp +17 -12
  287. data/ext/{apache2 → common}/CachedFileStat.h +17 -12
  288. data/ext/{apache2 → common}/DummySpawnManager.h +17 -12
  289. data/ext/{apache2 → common}/Exceptions.h +17 -12
  290. data/ext/{apache2 → common}/FileChecker.h +17 -12
  291. data/ext/common/Logging.cpp +65 -0
  292. data/ext/{apache2 → common}/Logging.h +17 -12
  293. data/ext/{apache2 → common}/MessageChannel.h +17 -12
  294. data/ext/{apache2 → common}/PoolOptions.h +17 -12
  295. data/ext/{apache2 → common}/SpawnManager.h +17 -12
  296. data/ext/{apache2 → common}/StandardApplicationPool.h +17 -12
  297. data/ext/common/StaticString.h +147 -0
  298. data/ext/common/SystemTime.cpp +33 -0
  299. data/ext/{apache2 → common}/SystemTime.h +17 -12
  300. data/ext/{apache2 → common}/Utils.cpp +69 -12
  301. data/ext/{apache2 → common}/Utils.h +41 -12
  302. data/ext/nginx/Configuration.c +1091 -0
  303. data/ext/nginx/Configuration.h +71 -0
  304. data/ext/nginx/ContentHandler.c +1154 -0
  305. data/ext/nginx/ContentHandler.h +64 -0
  306. data/ext/nginx/HelperServer.cpp +857 -0
  307. data/ext/nginx/HttpStatusExtractor.h +161 -0
  308. data/ext/nginx/ScgiRequestParser.h +317 -0
  309. data/ext/nginx/StaticContentHandler.c +222 -0
  310. data/ext/nginx/StaticContentHandler.h +37 -0
  311. data/ext/nginx/config +41 -0
  312. data/ext/nginx/ngx_http_passenger_module.c +572 -0
  313. data/ext/nginx/ngx_http_passenger_module.h +72 -0
  314. data/ext/oxt/backtrace.cpp +8 -1
  315. data/ext/oxt/system_calls.cpp +40 -0
  316. data/ext/oxt/system_calls.hpp +14 -7
  317. data/ext/phusion_passenger/extconf.rb +17 -12
  318. data/ext/phusion_passenger/native_support.c +19 -12
  319. data/lib/phusion_passenger/abstract_installer.rb +196 -0
  320. data/lib/phusion_passenger/abstract_request_handler.rb +19 -24
  321. data/lib/phusion_passenger/abstract_server.rb +17 -12
  322. data/lib/phusion_passenger/abstract_server_collection.rb +17 -12
  323. data/lib/phusion_passenger/admin_tools.rb +23 -0
  324. data/lib/phusion_passenger/admin_tools/control_process.rb +39 -13
  325. data/lib/phusion_passenger/application.rb +17 -12
  326. data/lib/phusion_passenger/console_text_template.rb +17 -12
  327. data/lib/phusion_passenger/constants.rb +22 -11
  328. data/lib/phusion_passenger/dependencies.rb +47 -12
  329. data/lib/phusion_passenger/events.rb +17 -12
  330. data/lib/phusion_passenger/exceptions.rb +17 -12
  331. data/lib/phusion_passenger/html_template.rb +17 -12
  332. data/lib/phusion_passenger/message_channel.rb +17 -12
  333. data/lib/phusion_passenger/packaging.rb +39 -0
  334. data/lib/phusion_passenger/platform_info.rb +48 -22
  335. data/lib/phusion_passenger/rack/application_spawner.rb +22 -11
  336. data/lib/phusion_passenger/rack/request_handler.rb +21 -12
  337. data/lib/phusion_passenger/railz/application_spawner.rb +23 -23
  338. data/lib/phusion_passenger/railz/framework_spawner.rb +18 -14
  339. data/lib/phusion_passenger/railz/request_handler.rb +18 -11
  340. data/lib/phusion_passenger/simple_benchmarking.rb +17 -12
  341. data/lib/phusion_passenger/spawn_manager.rb +17 -20
  342. data/lib/phusion_passenger/templates/{apache_must_be_compiled_with_compatible_mpm.txt.erb → apache2/apache_must_be_compiled_with_compatible_mpm.txt.erb} +0 -0
  343. data/lib/phusion_passenger/templates/{apache2_config_snippets.txt.erb → apache2/config_snippets.txt.erb} +0 -0
  344. data/lib/phusion_passenger/templates/{deployment_example.txt.erb → apache2/deployment_example.txt.erb} +0 -0
  345. data/lib/phusion_passenger/templates/{no_write_permission_to_passenger_root.txt.erb → apache2/no_write_permission_to_passenger_root.txt.erb} +0 -0
  346. data/lib/phusion_passenger/templates/{possible_solutions_for_compilation_and_installation_problems.txt.erb → apache2/possible_solutions_for_compilation_and_installation_problems.txt.erb} +0 -0
  347. data/lib/phusion_passenger/templates/{run_installer_as_root.txt.erb → apache2/run_installer_as_root.txt.erb} +0 -0
  348. data/lib/phusion_passenger/templates/{welcome.txt.erb → apache2/welcome.txt.erb} +0 -0
  349. data/lib/phusion_passenger/templates/nginx/ask_for_extra_configure_flags.txt.erb +8 -0
  350. data/lib/phusion_passenger/templates/nginx/cannot_write_to_dir.txt.erb +11 -0
  351. data/lib/phusion_passenger/templates/nginx/config_snippets.txt.erb +17 -0
  352. data/lib/phusion_passenger/templates/nginx/config_snippets_inserted.txt.erb +20 -0
  353. data/lib/phusion_passenger/templates/nginx/confirm_extra_configure_flags.txt.erb +5 -0
  354. data/lib/phusion_passenger/templates/nginx/deployment_example.txt.erb +22 -0
  355. data/lib/phusion_passenger/templates/nginx/pcre_could_not_be_downloaded.txt.erb +11 -0
  356. data/lib/phusion_passenger/templates/nginx/pcre_could_not_be_extracted.txt.erb +11 -0
  357. data/lib/phusion_passenger/templates/nginx/possible_solutions_for_compilation_and_installation_problems.txt.erb +11 -0
  358. data/lib/phusion_passenger/templates/nginx/possible_solutions_for_download_and_extraction_problems.txt.erb +20 -0
  359. data/lib/phusion_passenger/templates/nginx/query_download_and_install.txt.erb +21 -0
  360. data/lib/phusion_passenger/templates/nginx/run_installer_as_root.txt.erb +8 -0
  361. data/lib/phusion_passenger/templates/nginx/welcome.txt.erb +15 -0
  362. data/lib/phusion_passenger/utils.rb +20 -15
  363. data/lib/phusion_passenger/wsgi/application_spawner.rb +18 -11
  364. data/lib/phusion_passenger/wsgi/request_handler.py +23 -0
  365. data/misc/copy_boost_headers.rb +23 -0
  366. data/misc/find_owner_pipe_leaks.rb +18 -11
  367. data/misc/rake/cplusplus.rb +18 -11
  368. data/misc/rake/extensions.rb +21 -14
  369. data/misc/render_error_pages.rb +18 -11
  370. data/test/ApplicationPoolServerTest.cpp +1 -3
  371. data/test/ApplicationPoolServer_ApplicationPoolTest.cpp +1 -1
  372. data/test/CxxTestMain.cpp +19 -3
  373. data/test/HttpStatusExtractorTest.cpp +181 -0
  374. data/test/ScgiRequestParserTest.cpp +337 -0
  375. data/test/StaticStringTest.cpp +51 -0
  376. data/test/UtilsTest.cpp +32 -0
  377. data/test/config.yml.example +5 -0
  378. data/test/{integration_tests.rb → integration_tests/apache2_tests.rb} +7 -299
  379. data/test/integration_tests/hello_world_rack_spec.rb +36 -0
  380. data/test/integration_tests/hello_world_wsgi_spec.rb +41 -0
  381. data/test/integration_tests/mycook_spec.rb +192 -0
  382. data/test/integration_tests/nginx_tests.rb +98 -0
  383. data/test/ruby/rack/application_spawner_spec.rb +40 -0
  384. data/test/stub/nginx/koi-utf +109 -0
  385. data/test/stub/nginx/koi-win +103 -0
  386. data/test/stub/nginx/mime.types +70 -0
  387. data/test/stub/nginx/nginx.conf.erb +57 -0
  388. data/test/stub/nginx/win-utf +126 -0
  389. data/test/stub/rails_apps/mycook/app/controllers/uploads_controller.rb +4 -0
  390. data/test/stub/rails_apps/mycook/config/routes.rb +1 -1
  391. data/test/stub/wsgi/passenger_wsgi.pyc +0 -0
  392. data/test/support/Support.h +40 -0
  393. data/test/support/nginx_controller.rb +98 -0
  394. data/test/support/test_helper.rb +79 -0
  395. metadata +1091 -1028
  396. data/benchmark/DummyRequestHandler.cpp +0 -101
  397. data/ext/apache2/Logging.cpp +0 -60
  398. data/ext/apache2/SystemTime.cpp +0 -28
@@ -1,10 +1,10 @@
1
1
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2
2
  <html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
3
3
  <title>Passenger: ApplicationPoolServer.h Source File</title>
4
- <link href="doxygen.css" rel="stylesheet" type="text/css">
5
4
  <link href="tabs.css" rel="stylesheet" type="text/css">
5
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
6
6
  </head><body>
7
- <!-- Generated by Doxygen 1.5.5 -->
7
+ <!-- Generated by Doxygen 1.5.8 -->
8
8
  <div class="navigation" id="top">
9
9
  <div class="tabs">
10
10
  <ul>
@@ -14,6 +14,11 @@
14
14
  <li class="current"><a href="files.html"><span>Files</span></a></li>
15
15
  </ul>
16
16
  </div>
17
+ <div class="tabs">
18
+ <ul>
19
+ <li><a href="files.html"><span>File&nbsp;List</span></a></li>
20
+ </ul>
21
+ </div>
17
22
  <h1>ApplicationPoolServer.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
18
23
  <a name="l00002"></a>00002 <span class="comment"> * Phusion Passenger - http://www.modrails.com/</span>
19
24
  <a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2008 Phusion</span>
@@ -821,8 +826,8 @@
821
826
  <a name="l00805"></a>00805
822
827
  <a name="l00806"></a>00806 <span class="preprocessor">#endif </span><span class="comment">/* _PASSENGER_APPLICATION_POOL_SERVER_H_ */</span>
823
828
  </pre></div></div>
824
- <hr size="1"><address style="text-align: right;"><small>Generated on Tue Mar 31 14:00:27 2009 for Passenger by&nbsp;
829
+ <hr size="1"><address style="text-align: right;"><small>Generated on Wed Apr 8 22:35:10 2009 for Passenger by&nbsp;
825
830
  <a href="http://www.doxygen.org/index.html">
826
- <img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
831
+ <img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
827
832
  </body>
828
833
  </html>
@@ -1,10 +1,10 @@
1
1
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2
2
  <html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
3
3
  <title>Passenger: ApplicationPool.h Source File</title>
4
- <link href="doxygen.css" rel="stylesheet" type="text/css">
5
4
  <link href="tabs.css" rel="stylesheet" type="text/css">
5
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
6
6
  </head><body>
7
- <!-- Generated by Doxygen 1.5.5 -->
7
+ <!-- Generated by Doxygen 1.5.8 -->
8
8
  <div class="navigation" id="top">
9
9
  <div class="tabs">
10
10
  <ul>
@@ -14,6 +14,11 @@
14
14
  <li class="current"><a href="files.html"><span>Files</span></a></li>
15
15
  </ul>
16
16
  </div>
17
+ <div class="tabs">
18
+ <ul>
19
+ <li><a href="files.html"><span>File&nbsp;List</span></a></li>
20
+ </ul>
21
+ </div>
17
22
  <h1>ApplicationPool.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
18
23
  <a name="l00002"></a>00002 <span class="comment"> * Phusion Passenger - http://www.modrails.com/</span>
19
24
  <a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2008 Phusion</span>
@@ -214,8 +219,8 @@
214
219
  <a name="l00198"></a>00198
215
220
  <a name="l00199"></a>00199 <span class="preprocessor">#endif </span><span class="comment">/* _PASSENGER_APPLICATION_POOL_H_ */</span>
216
221
  </pre></div></div>
217
- <hr size="1"><address style="text-align: right;"><small>Generated on Tue Mar 31 14:00:27 2009 for Passenger by&nbsp;
222
+ <hr size="1"><address style="text-align: right;"><small>Generated on Wed Apr 8 22:35:10 2009 for Passenger by&nbsp;
218
223
  <a href="http://www.doxygen.org/index.html">
219
- <img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
224
+ <img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
220
225
  </body>
221
226
  </html>
@@ -1,10 +1,10 @@
1
1
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2
2
  <html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
3
3
  <title>Passenger: Application.h Source File</title>
4
- <link href="doxygen.css" rel="stylesheet" type="text/css">
5
4
  <link href="tabs.css" rel="stylesheet" type="text/css">
5
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
6
6
  </head><body>
7
- <!-- Generated by Doxygen 1.5.5 -->
7
+ <!-- Generated by Doxygen 1.5.8 -->
8
8
  <div class="navigation" id="top">
9
9
  <div class="tabs">
10
10
  <ul>
@@ -14,6 +14,11 @@
14
14
  <li class="current"><a href="files.html"><span>Files</span></a></li>
15
15
  </ul>
16
16
  </div>
17
+ <div class="tabs">
18
+ <ul>
19
+ <li><a href="files.html"><span>File&nbsp;List</span></a></li>
20
+ </ul>
21
+ </div>
17
22
  <h1>Application.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
18
23
  <a name="l00002"></a>00002 <span class="comment"> * Phusion Passenger - http://www.modrails.com/</span>
19
24
  <a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2008 Phusion</span>
@@ -99,7 +104,7 @@
99
104
  <a name="l00083"></a>00083 <span class="comment"> /**</span>
100
105
  <a name="l00084"></a>00084 <span class="comment"> * Implementing classes might throw arbitrary exceptions.</span>
101
106
  <a name="l00085"></a>00085 <span class="comment"> */</span>
102
- <a name="l00086"></a><a class="code" href="classPassenger_1_1Application_1_1Session.html#4fcaf0670234f7fb2ea6de4b8d8ef38c">00086</a> <span class="keyword">virtual</span> <a class="code" href="classPassenger_1_1Application_1_1Session.html#4fcaf0670234f7fb2ea6de4b8d8ef38c" title="Implementing classes might throw arbitrary exceptions.">~Session</a>() {}
107
+ <a name="l00086"></a><a class="code" href="classPassenger_1_1Application_1_1Session.html#a1659ee23386eec51cf1d297897e8e9f">00086</a> <span class="keyword">virtual</span> <a class="code" href="classPassenger_1_1Application_1_1Session.html#a1659ee23386eec51cf1d297897e8e9f" title="Implementing classes might throw arbitrary exceptions.">~Session</a>() {}
103
108
  <a name="l00087"></a>00087 <span class="comment"></span>
104
109
  <a name="l00088"></a>00088 <span class="comment"> /**</span>
105
110
  <a name="l00089"></a>00089 <span class="comment"> * Send HTTP request headers to the application. The HTTP headers must be</span>
@@ -125,9 +130,9 @@
125
130
  <a name="l00109"></a>00109 <span class="comment"> * @throws SystemException Something went wrong during writing.</span>
126
131
  <a name="l00110"></a>00110 <span class="comment"> * @throws boost::thread_interrupted</span>
127
132
  <a name="l00111"></a>00111 <span class="comment"> */</span>
128
- <a name="l00112"></a><a class="code" href="classPassenger_1_1Application_1_1Session.html#78a4c93fd80f6d913f092c488ea4d360">00112</a> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classPassenger_1_1Application_1_1Session.html#78a4c93fd80f6d913f092c488ea4d360" title="Send HTTP request headers to the application.">sendHeaders</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *headers, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> size) {
133
+ <a name="l00112"></a><a class="code" href="classPassenger_1_1Application_1_1Session.html#fc3ecd1067d5bdb0e514c366de7bdcc9">00112</a> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classPassenger_1_1Application_1_1Session.html#fc3ecd1067d5bdb0e514c366de7bdcc9" title="Send HTTP request headers to the application.">sendHeaders</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *headers, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> size) {
129
134
  <a name="l00113"></a>00113 TRACE_POINT();
130
- <a name="l00114"></a>00114 <span class="keywordtype">int</span> stream = <a class="code" href="classPassenger_1_1Application_1_1Session.html#2631b6d6b4927ec66b1f620df15d8c6e" title="Get the I/O stream&amp;#39;s file descriptor.">getStream</a>();
135
+ <a name="l00114"></a>00114 <span class="keywordtype">int</span> stream = <a class="code" href="classPassenger_1_1Application_1_1Session.html#fc8050e44db34aee17bc79520ba3c7dd" title="Get the I/O stream&amp;#39;s file descriptor.">getStream</a>();
131
136
  <a name="l00115"></a>00115 <span class="keywordflow">if</span> (stream == -1) {
132
137
  <a name="l00116"></a>00116 <span class="keywordflow">throw</span> <a class="code" href="classPassenger_1_1IOException.html" title="Represents an error that occured during an I/O operation.">IOException</a>(<span class="stringliteral">"Cannot write headers to the request handler "</span>
133
138
  <a name="l00117"></a>00117 <span class="stringliteral">"because the writer stream has already been closed."</span>);
@@ -148,8 +153,8 @@
148
153
  <a name="l00132"></a>00132 <span class="comment"> * @throws SystemException Something went wrong during writing.</span>
149
154
  <a name="l00133"></a>00133 <span class="comment"> * @throws boost::thread_interrupted</span>
150
155
  <a name="l00134"></a>00134 <span class="comment"> */</span>
151
- <a name="l00135"></a><a class="code" href="classPassenger_1_1Application_1_1Session.html#4fee03667f626d68c565495bcb19771a">00135</a> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classPassenger_1_1Application_1_1Session.html#78a4c93fd80f6d913f092c488ea4d360" title="Send HTTP request headers to the application.">sendHeaders</a>(<span class="keyword">const</span> <span class="keywordtype">string</span> &amp;headers) {
152
- <a name="l00136"></a>00136 <a class="code" href="classPassenger_1_1Application_1_1Session.html#78a4c93fd80f6d913f092c488ea4d360" title="Send HTTP request headers to the application.">sendHeaders</a>(headers.c_str(), headers.size());
156
+ <a name="l00135"></a><a class="code" href="classPassenger_1_1Application_1_1Session.html#5ad6f1c3bca11a1083d53e2aff9f81d9">00135</a> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classPassenger_1_1Application_1_1Session.html#5ad6f1c3bca11a1083d53e2aff9f81d9" title="Convenience shortcut for sendHeaders(const char *, unsigned int).">sendHeaders</a>(<span class="keyword">const</span> <span class="keywordtype">string</span> &amp;headers) {
157
+ <a name="l00136"></a>00136 <a class="code" href="classPassenger_1_1Application_1_1Session.html#fc3ecd1067d5bdb0e514c366de7bdcc9" title="Send HTTP request headers to the application.">sendHeaders</a>(headers.c_str(), headers.size());
153
158
  <a name="l00137"></a>00137 }
154
159
  <a name="l00138"></a>00138 <span class="comment"></span>
155
160
  <a name="l00139"></a>00139 <span class="comment"> /**</span>
@@ -166,9 +171,9 @@
166
171
  <a name="l00150"></a>00150 <span class="comment"> * @throws SystemException Something went wrong during writing.</span>
167
172
  <a name="l00151"></a>00151 <span class="comment"> * @throws boost::thread_interrupted</span>
168
173
  <a name="l00152"></a>00152 <span class="comment"> */</span>
169
- <a name="l00153"></a><a class="code" href="classPassenger_1_1Application_1_1Session.html#2091e4b60dcbe42ab80fa387610fd669">00153</a> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classPassenger_1_1Application_1_1Session.html#2091e4b60dcbe42ab80fa387610fd669" title="Send a chunk of HTTP request body data to the application.">sendBodyBlock</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *block, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> size) {
174
+ <a name="l00153"></a><a class="code" href="classPassenger_1_1Application_1_1Session.html#012b2ee56c8b514f800c1ce3cee8c11b">00153</a> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classPassenger_1_1Application_1_1Session.html#012b2ee56c8b514f800c1ce3cee8c11b" title="Send a chunk of HTTP request body data to the application.">sendBodyBlock</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *block, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> size) {
170
175
  <a name="l00154"></a>00154 TRACE_POINT();
171
- <a name="l00155"></a>00155 <span class="keywordtype">int</span> stream = <a class="code" href="classPassenger_1_1Application_1_1Session.html#2631b6d6b4927ec66b1f620df15d8c6e" title="Get the I/O stream&amp;#39;s file descriptor.">getStream</a>();
176
+ <a name="l00155"></a>00155 <span class="keywordtype">int</span> stream = <a class="code" href="classPassenger_1_1Application_1_1Session.html#fc8050e44db34aee17bc79520ba3c7dd" title="Get the I/O stream&amp;#39;s file descriptor.">getStream</a>();
172
177
  <a name="l00156"></a>00156 <span class="keywordflow">if</span> (stream == -1) {
173
178
  <a name="l00157"></a>00157 <span class="keywordflow">throw</span> <a class="code" href="classPassenger_1_1IOException.html" title="Represents an error that occured during an I/O operation.">IOException</a>(<span class="stringliteral">"Cannot write request body block to the "</span>
174
179
  <a name="l00158"></a>00158 <span class="stringliteral">"request handler because the writer stream has "</span>
@@ -190,7 +195,7 @@
190
195
  <a name="l00174"></a>00174 <span class="comment"> *</span>
191
196
  <a name="l00175"></a>00175 <span class="comment"> * @pre The stream has not been fully closed.</span>
192
197
  <a name="l00176"></a>00176 <span class="comment"> */</span>
193
- <a name="l00177"></a>00177 <span class="keyword">virtual</span> <span class="keywordtype">int</span> <a class="code" href="classPassenger_1_1Application_1_1Session.html#2631b6d6b4927ec66b1f620df15d8c6e" title="Get the I/O stream&amp;#39;s file descriptor.">getStream</a>() <span class="keyword">const</span> = 0;
198
+ <a name="l00177"></a>00177 <span class="keyword">virtual</span> <span class="keywordtype">int</span> <a class="code" href="classPassenger_1_1Application_1_1Session.html#fc8050e44db34aee17bc79520ba3c7dd" title="Get the I/O stream&amp;#39;s file descriptor.">getStream</a>() <span class="keyword">const</span> = 0;
194
199
  <a name="l00178"></a>00178 <span class="comment"></span>
195
200
  <a name="l00179"></a>00179 <span class="comment"> /**</span>
196
201
  <a name="l00180"></a>00180 <span class="comment"> * Set the timeout value for reading data from the I/O stream.</span>
@@ -201,7 +206,7 @@
201
206
  <a name="l00185"></a>00185 <span class="comment"> * there will be no timeout.</span>
202
207
  <a name="l00186"></a>00186 <span class="comment"> * @throws SystemException Cannot set the timeout.</span>
203
208
  <a name="l00187"></a>00187 <span class="comment"> */</span>
204
- <a name="l00188"></a>00188 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classPassenger_1_1Application_1_1Session.html#17b4b6e4c47ec8941a099e229d2944f2" title="Set the timeout value for reading data from the I/O stream.">setReaderTimeout</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> msec) = 0;
209
+ <a name="l00188"></a>00188 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classPassenger_1_1Application_1_1Session.html#b4487fdd198a3a2e2bde74e5d3c2396e" title="Set the timeout value for reading data from the I/O stream.">setReaderTimeout</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> msec) = 0;
205
210
  <a name="l00189"></a>00189 <span class="comment"></span>
206
211
  <a name="l00190"></a>00190 <span class="comment"> /**</span>
207
212
  <a name="l00191"></a>00191 <span class="comment"> * Set the timeout value for writing data from the I/O stream.</span>
@@ -212,7 +217,7 @@
212
217
  <a name="l00196"></a>00196 <span class="comment"> * there will be no timeout.</span>
213
218
  <a name="l00197"></a>00197 <span class="comment"> * @throws SystemException Cannot set the timeout.</span>
214
219
  <a name="l00198"></a>00198 <span class="comment"> */</span>
215
- <a name="l00199"></a>00199 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classPassenger_1_1Application_1_1Session.html#4236abbdf69e10ded00c756de24433e9" title="Set the timeout value for writing data from the I/O stream.">setWriterTimeout</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> msec) = 0;
220
+ <a name="l00199"></a>00199 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classPassenger_1_1Application_1_1Session.html#e279c219606fd20048bde44a150c5b17" title="Set the timeout value for writing data from the I/O stream.">setWriterTimeout</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> msec) = 0;
216
221
  <a name="l00200"></a>00200 <span class="comment"></span>
217
222
  <a name="l00201"></a>00201 <span class="comment"> /**</span>
218
223
  <a name="l00202"></a>00202 <span class="comment"> * Indicate that we don't want to read data anymore from the I/O stream.</span>
@@ -221,7 +226,7 @@
221
226
  <a name="l00205"></a>00205 <span class="comment"> * @throws SystemException Something went wrong.</span>
222
227
  <a name="l00206"></a>00206 <span class="comment"> * @throws boost::thread_interrupted</span>
223
228
  <a name="l00207"></a>00207 <span class="comment"> */</span>
224
- <a name="l00208"></a>00208 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classPassenger_1_1Application_1_1Session.html#45ad442dc1f4e7b73782bb3395d9e97d" title="Indicate that we don&amp;#39;t want to read data anymore from the I/O stream.">shutdownReader</a>() = 0;
229
+ <a name="l00208"></a>00208 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classPassenger_1_1Application_1_1Session.html#95ea71f3a7e2cb1d66681285371cbabe" title="Indicate that we don&amp;#39;t want to read data anymore from the I/O stream.">shutdownReader</a>() = 0;
225
230
  <a name="l00209"></a>00209 <span class="comment"></span>
226
231
  <a name="l00210"></a>00210 <span class="comment"> /**</span>
227
232
  <a name="l00211"></a>00211 <span class="comment"> * Indicate that we don't want to write data anymore to the I/O stream.</span>
@@ -230,7 +235,7 @@
230
235
  <a name="l00214"></a>00214 <span class="comment"> * @throws SystemException Something went wrong.</span>
231
236
  <a name="l00215"></a>00215 <span class="comment"> * @throws boost::thread_interrupted</span>
232
237
  <a name="l00216"></a>00216 <span class="comment"> */</span>
233
- <a name="l00217"></a>00217 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classPassenger_1_1Application_1_1Session.html#dff449398adb872c93a9572ae4b701fb" title="Indicate that we don&amp;#39;t want to write data anymore to the I/O stream.">shutdownWriter</a>() = 0;
238
+ <a name="l00217"></a>00217 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classPassenger_1_1Application_1_1Session.html#bfb2a4f08a0fa24a97e75c9a96205bba" title="Indicate that we don&amp;#39;t want to write data anymore to the I/O stream.">shutdownWriter</a>() = 0;
234
239
  <a name="l00218"></a>00218 <span class="comment"></span>
235
240
  <a name="l00219"></a>00219 <span class="comment"> /**</span>
236
241
  <a name="l00220"></a>00220 <span class="comment"> * Close the I/O stream.</span>
@@ -238,18 +243,18 @@
238
243
  <a name="l00222"></a>00222 <span class="comment"> * @throws SystemException Something went wrong.</span>
239
244
  <a name="l00223"></a>00223 <span class="comment"> * @throws boost::thread_interrupted</span>
240
245
  <a name="l00224"></a>00224 <span class="comment"> */</span>
241
- <a name="l00225"></a>00225 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classPassenger_1_1Application_1_1Session.html#ddfeda914b17749a70016f5eb384f8a9" title="Close the I/O stream.">closeStream</a>() = 0;
246
+ <a name="l00225"></a>00225 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classPassenger_1_1Application_1_1Session.html#bc463c55e17fe5784f351ac699f20ce4" title="Close the I/O stream.">closeStream</a>() = 0;
242
247
  <a name="l00226"></a>00226 <span class="comment"></span>
243
248
  <a name="l00227"></a>00227 <span class="comment"> /**</span>
244
249
  <a name="l00228"></a>00228 <span class="comment"> * Discard the I/O stream's file descriptor, so that Session won't automatically</span>
245
250
  <a name="l00229"></a>00229 <span class="comment"> * closed it upon Session's destruction.</span>
246
251
  <a name="l00230"></a>00230 <span class="comment"> */</span>
247
- <a name="l00231"></a>00231 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classPassenger_1_1Application_1_1Session.html#7f9ad70e75d21130d914d2134061c757" title="Discard the I/O stream&amp;#39;s file descriptor, so that Session won&amp;#39;t automatically...">discardStream</a>() = 0;
252
+ <a name="l00231"></a>00231 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classPassenger_1_1Application_1_1Session.html#f092d4757e2d460c6f6f979473c1c4ba" title="Discard the I/O stream&amp;#39;s file descriptor, so that Session won&amp;#39;t automatically...">discardStream</a>() = 0;
248
253
  <a name="l00232"></a>00232 <span class="comment"></span>
249
254
  <a name="l00233"></a>00233 <span class="comment"> /**</span>
250
255
  <a name="l00234"></a>00234 <span class="comment"> * Get the process ID of the application instance that belongs to this session.</span>
251
256
  <a name="l00235"></a>00235 <span class="comment"> */</span>
252
- <a name="l00236"></a>00236 <span class="keyword">virtual</span> pid_t <a class="code" href="classPassenger_1_1Application_1_1Session.html#2215bec32917c48d1a9f6386b88d018b" title="Get the process ID of the application instance that belongs to this session.">getPid</a>() <span class="keyword">const</span> = 0;
257
+ <a name="l00236"></a>00236 <span class="keyword">virtual</span> pid_t <a class="code" href="classPassenger_1_1Application_1_1Session.html#19cdd7428efcff759bae674fafe2dc5b" title="Get the process ID of the application instance that belongs to this session.">getPid</a>() <span class="keyword">const</span> = 0;
253
258
  <a name="l00237"></a>00237 };
254
259
  <a name="l00238"></a>00238
255
260
  <a name="l00239"></a>00239 <span class="keyword">private</span>:<span class="comment"></span>
@@ -491,12 +496,12 @@
491
496
  <a name="l00475"></a>00475 <span class="comment"> * session-&gt;sendHeaders(...);</span>
492
497
  <a name="l00476"></a>00476 <span class="comment"> * session-&gt;sendBodyBlock(...);</span>
493
498
  <a name="l00477"></a>00477 <span class="comment"> * // Done sending data, so we close the writer channel.</span>
494
- <a name="l00478"></a>00478 <span class="comment"> * session-&gt;closeWriter();</span>
499
+ <a name="l00478"></a>00478 <span class="comment"> * session-&gt;shutdownWriter();</span>
495
500
  <a name="l00479"></a>00479 <span class="comment"> *</span>
496
501
  <a name="l00480"></a>00480 <span class="comment"> * // Now read the HTTP response.</span>
497
502
  <a name="l00481"></a>00481 <span class="comment"> * string responseData = readAllDataFromSocket(session-&gt;getReader());</span>
498
503
  <a name="l00482"></a>00482 <span class="comment"> * // Done reading data, so we close the reader channel.</span>
499
- <a name="l00483"></a>00483 <span class="comment"> * session-&gt;closeReader();</span>
504
+ <a name="l00483"></a>00483 <span class="comment"> * session-&gt;shutdownReader();</span>
500
505
  <a name="l00484"></a>00484 <span class="comment"> *</span>
501
506
  <a name="l00485"></a>00485 <span class="comment"> * // This session has now finished, so we close the session by resetting</span>
502
507
  <a name="l00486"></a>00486 <span class="comment"> * // the smart pointer to NULL (thereby destroying the Session object).</span>
@@ -541,8 +546,8 @@
541
546
  <a name="l00525"></a>00525
542
547
  <a name="l00526"></a>00526 <span class="preprocessor">#endif </span><span class="comment">/* _PASSENGER_APPLICATION_H_ */</span>
543
548
  </pre></div></div>
544
- <hr size="1"><address style="text-align: right;"><small>Generated on Tue Mar 31 14:00:27 2009 for Passenger by&nbsp;
549
+ <hr size="1"><address style="text-align: right;"><small>Generated on Wed Apr 8 22:35:10 2009 for Passenger by&nbsp;
545
550
  <a href="http://www.doxygen.org/index.html">
546
- <img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
551
+ <img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
547
552
  </body>
548
553
  </html>
@@ -1,10 +1,10 @@
1
1
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2
2
  <html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
3
3
  <title>Passenger: Bucket.h Source File</title>
4
- <link href="doxygen.css" rel="stylesheet" type="text/css">
5
4
  <link href="tabs.css" rel="stylesheet" type="text/css">
5
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
6
6
  </head><body>
7
- <!-- Generated by Doxygen 1.5.5 -->
7
+ <!-- Generated by Doxygen 1.5.8 -->
8
8
  <div class="navigation" id="top">
9
9
  <div class="tabs">
10
10
  <ul>
@@ -14,54 +14,64 @@
14
14
  <li class="current"><a href="files.html"><span>Files</span></a></li>
15
15
  </ul>
16
16
  </div>
17
+ <div class="tabs">
18
+ <ul>
19
+ <li><a href="files.html"><span>File&nbsp;List</span></a></li>
20
+ </ul>
21
+ </div>
17
22
  <h1>Bucket.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
18
23
  <a name="l00002"></a>00002 <span class="comment"> * Phusion Passenger - http://www.modrails.com/</span>
19
- <a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2008 Phusion</span>
24
+ <a name="l00003"></a>00003 <span class="comment"> * Copyright (c) 2008, 2009 Phusion</span>
20
25
  <a name="l00004"></a>00004 <span class="comment"> *</span>
21
- <a name="l00005"></a>00005 <span class="comment"> * Phusion Passenger is a trademark of Hongli Lai &amp; Ninh Bui.</span>
26
+ <a name="l00005"></a>00005 <span class="comment"> * "Phusion Passenger" is a trademark of Hongli Lai &amp; Ninh Bui.</span>
22
27
  <a name="l00006"></a>00006 <span class="comment"> *</span>
23
- <a name="l00007"></a>00007 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
24
- <a name="l00008"></a>00008 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
25
- <a name="l00009"></a>00009 <span class="comment"> * the Free Software Foundation; version 2 of the License.</span>
26
- <a name="l00010"></a>00010 <span class="comment"> *</span>
27
- <a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
28
- <a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
29
- <a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span>
30
- <a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
31
- <a name="l00015"></a>00015 <span class="comment"> *</span>
32
- <a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License along</span>
33
- <a name="l00017"></a>00017 <span class="comment"> * with this program; if not, write to the Free Software Foundation, Inc.,</span>
34
- <a name="l00018"></a>00018 <span class="comment"> * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.</span>
35
- <a name="l00019"></a>00019 <span class="comment"> */</span>
36
- <a name="l00020"></a>00020 <span class="preprocessor">#ifndef _PASSENGER_BUCKET_H_</span>
37
- <a name="l00021"></a>00021 <span class="preprocessor"></span><span class="preprocessor">#define _PASSENGER_BUCKET_H_</span>
38
- <a name="l00022"></a>00022 <span class="preprocessor"></span><span class="comment"></span>
39
- <a name="l00023"></a>00023 <span class="comment">/**</span>
40
- <a name="l00024"></a>00024 <span class="comment"> * apr_bucket_pipe closes a pipe's file descriptor when it has reached</span>
41
- <a name="l00025"></a>00025 <span class="comment"> * end-of-stream, but not when an error has occurred. This behavior is</span>
42
- <a name="l00026"></a>00026 <span class="comment"> * undesirable because it can easily cause file descriptor leaks.</span>
43
- <a name="l00027"></a>00027 <span class="comment"> *</span>
44
- <a name="l00028"></a>00028 <span class="comment"> * passenger_bucket is like apr_bucket_pipe, but it also holds a reference to</span>
45
- <a name="l00029"></a>00029 <span class="comment"> * a Session. When a read error has occured or when end-of-stream has been</span>
46
- <a name="l00030"></a>00030 <span class="comment"> * reached, the Session will be dereferenced, so that the underlying file</span>
47
- <a name="l00031"></a>00031 <span class="comment"> * descriptor is closed.</span>
28
+ <a name="l00007"></a>00007 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining a copy</span>
29
+ <a name="l00008"></a>00008 <span class="comment"> * of this software and associated documentation files (the "Software"), to deal</span>
30
+ <a name="l00009"></a>00009 <span class="comment"> * in the Software without restriction, including without limitation the rights</span>
31
+ <a name="l00010"></a>00010 <span class="comment"> * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell</span>
32
+ <a name="l00011"></a>00011 <span class="comment"> * copies of the Software, and to permit persons to whom the Software is</span>
33
+ <a name="l00012"></a>00012 <span class="comment"> * furnished to do so, subject to the following conditions:</span>
34
+ <a name="l00013"></a>00013 <span class="comment"> *</span>
35
+ <a name="l00014"></a>00014 <span class="comment"> * The above copyright notice and this permission notice shall be included in</span>
36
+ <a name="l00015"></a>00015 <span class="comment"> * all copies or substantial portions of the Software.</span>
37
+ <a name="l00016"></a>00016 <span class="comment"> *</span>
38
+ <a name="l00017"></a>00017 <span class="comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</span>
39
+ <a name="l00018"></a>00018 <span class="comment"> * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</span>
40
+ <a name="l00019"></a>00019 <span class="comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</span>
41
+ <a name="l00020"></a>00020 <span class="comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</span>
42
+ <a name="l00021"></a>00021 <span class="comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,</span>
43
+ <a name="l00022"></a>00022 <span class="comment"> * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN</span>
44
+ <a name="l00023"></a>00023 <span class="comment"> * THE SOFTWARE.</span>
45
+ <a name="l00024"></a>00024 <span class="comment"> */</span>
46
+ <a name="l00025"></a>00025 <span class="preprocessor">#ifndef _PASSENGER_BUCKET_H_</span>
47
+ <a name="l00026"></a>00026 <span class="preprocessor"></span><span class="preprocessor">#define _PASSENGER_BUCKET_H_</span>
48
+ <a name="l00027"></a>00027 <span class="preprocessor"></span><span class="comment"></span>
49
+ <a name="l00028"></a>00028 <span class="comment">/**</span>
50
+ <a name="l00029"></a>00029 <span class="comment"> * apr_bucket_pipe closes a pipe's file descriptor when it has reached</span>
51
+ <a name="l00030"></a>00030 <span class="comment"> * end-of-stream, but not when an error has occurred. This behavior is</span>
52
+ <a name="l00031"></a>00031 <span class="comment"> * undesirable because it can easily cause file descriptor leaks.</span>
48
53
  <a name="l00032"></a>00032 <span class="comment"> *</span>
49
- <a name="l00033"></a>00033 <span class="comment"> * passenger_bucket also ignores the APR_NONBLOCK_READ flag because that's</span>
50
- <a name="l00034"></a>00034 <span class="comment"> * known to cause strange I/O problems.</span>
51
- <a name="l00035"></a>00035 <span class="comment"> */</span>
52
- <a name="l00036"></a>00036
53
- <a name="l00037"></a>00037 <span class="preprocessor">#include &lt;apr_buckets.h&gt;</span>
54
- <a name="l00038"></a>00038 <span class="preprocessor">#include "Application.h"</span>
55
- <a name="l00039"></a>00039
56
- <a name="l00040"></a>00040 apr_bucket *passenger_bucket_create(<a class="code" href="classPassenger_1_1Application.html#d14f673494991460b16246a527ad8ad9" title="Convenient alias for Session smart pointer.">Passenger::Application::SessionPtr</a> session,
57
- <a name="l00041"></a>00041 apr_file_t *pipe,
58
- <a name="l00042"></a>00042 apr_bucket_alloc_t *list);
59
- <a name="l00043"></a>00043
60
- <a name="l00044"></a>00044 <span class="preprocessor">#endif </span><span class="comment">/* _PASSENGER_BUCKET_H_ */</span>
61
- <a name="l00045"></a>00045
54
+ <a name="l00033"></a>00033 <span class="comment"> * passenger_bucket is like apr_bucket_pipe, but it also holds a reference to</span>
55
+ <a name="l00034"></a>00034 <span class="comment"> * a Session. When a read error has occured or when end-of-stream has been</span>
56
+ <a name="l00035"></a>00035 <span class="comment"> * reached, the Session will be dereferenced, so that the underlying file</span>
57
+ <a name="l00036"></a>00036 <span class="comment"> * descriptor is closed.</span>
58
+ <a name="l00037"></a>00037 <span class="comment"> *</span>
59
+ <a name="l00038"></a>00038 <span class="comment"> * passenger_bucket also ignores the APR_NONBLOCK_READ flag because that's</span>
60
+ <a name="l00039"></a>00039 <span class="comment"> * known to cause strange I/O problems.</span>
61
+ <a name="l00040"></a>00040 <span class="comment"> */</span>
62
+ <a name="l00041"></a>00041
63
+ <a name="l00042"></a>00042 <span class="preprocessor">#include &lt;apr_buckets.h&gt;</span>
64
+ <a name="l00043"></a>00043 <span class="preprocessor">#include "Application.h"</span>
65
+ <a name="l00044"></a>00044
66
+ <a name="l00045"></a>00045 apr_bucket *passenger_bucket_create(Passenger::Application::SessionPtr session,
67
+ <a name="l00046"></a>00046 apr_file_t *pipe,
68
+ <a name="l00047"></a>00047 apr_bucket_alloc_t *list);
69
+ <a name="l00048"></a>00048
70
+ <a name="l00049"></a>00049 <span class="preprocessor">#endif </span><span class="comment">/* _PASSENGER_BUCKET_H_ */</span>
71
+ <a name="l00050"></a>00050
62
72
  </pre></div></div>
63
- <hr size="1"><address style="text-align: right;"><small>Generated on Tue Mar 31 14:00:27 2009 for Passenger by&nbsp;
73
+ <hr size="1"><address style="text-align: right;"><small>Generated on Thu Apr 16 19:48:18 2009 for Passenger by&nbsp;
64
74
  <a href="http://www.doxygen.org/index.html">
65
- <img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
75
+ <img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
66
76
  </body>
67
77
  </html>
@@ -1,10 +1,10 @@
1
1
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2
2
  <html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
3
3
  <title>Passenger: CachedFileStat.h Source File</title>
4
- <link href="doxygen.css" rel="stylesheet" type="text/css">
5
4
  <link href="tabs.css" rel="stylesheet" type="text/css">
5
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
6
6
  </head><body>
7
- <!-- Generated by Doxygen 1.5.5 -->
7
+ <!-- Generated by Doxygen 1.5.8 -->
8
8
  <div class="navigation" id="top">
9
9
  <div class="tabs">
10
10
  <ul>
@@ -14,6 +14,11 @@
14
14
  <li class="current"><a href="files.html"><span>Files</span></a></li>
15
15
  </ul>
16
16
  </div>
17
+ <div class="tabs">
18
+ <ul>
19
+ <li><a href="files.html"><span>File&nbsp;List</span></a></li>
20
+ </ul>
21
+ </div>
17
22
  <h1>CachedFileStat.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
18
23
  <a name="l00002"></a>00002 <span class="comment"> * Phusion Passenger - http://www.modrails.com/</span>
19
24
  <a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2009 Phusion</span>
@@ -175,8 +180,8 @@
175
180
  <a name="l00159"></a>00159 <span class="preprocessor">#endif </span><span class="comment">/* _PASSENGER_CACHED_FILE_STAT_H_ */</span>
176
181
  <a name="l00160"></a>00160
177
182
  </pre></div></div>
178
- <hr size="1"><address style="text-align: right;"><small>Generated on Tue Mar 31 14:00:27 2009 for Passenger by&nbsp;
183
+ <hr size="1"><address style="text-align: right;"><small>Generated on Wed Apr 8 22:35:10 2009 for Passenger by&nbsp;
179
184
  <a href="http://www.doxygen.org/index.html">
180
- <img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
185
+ <img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
181
186
  </body>
182
187
  </html>
@@ -1,10 +1,10 @@
1
1
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2
2
  <html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
3
3
  <title>Passenger: Configuration.h Source File</title>
4
- <link href="doxygen.css" rel="stylesheet" type="text/css">
5
4
  <link href="tabs.css" rel="stylesheet" type="text/css">
5
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
6
6
  </head><body>
7
- <!-- Generated by Doxygen 1.5.5 -->
7
+ <!-- Generated by Doxygen 1.5.8 -->
8
8
  <div class="navigation" id="top">
9
9
  <div class="tabs">
10
10
  <ul>
@@ -14,352 +14,370 @@
14
14
  <li class="current"><a href="files.html"><span>Files</span></a></li>
15
15
  </ul>
16
16
  </div>
17
+ <div class="tabs">
18
+ <ul>
19
+ <li><a href="files.html"><span>File&nbsp;List</span></a></li>
20
+ </ul>
21
+ </div>
17
22
  <h1>Configuration.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
18
23
  <a name="l00002"></a>00002 <span class="comment"> * Phusion Passenger - http://www.modrails.com/</span>
19
- <a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2008 Phusion</span>
24
+ <a name="l00003"></a>00003 <span class="comment"> * Copyright (c) 2008, 2009 Phusion</span>
20
25
  <a name="l00004"></a>00004 <span class="comment"> *</span>
21
- <a name="l00005"></a>00005 <span class="comment"> * Phusion Passenger is a trademark of Hongli Lai &amp; Ninh Bui.</span>
26
+ <a name="l00005"></a>00005 <span class="comment"> * "Phusion Passenger" is a trademark of Hongli Lai &amp; Ninh Bui.</span>
22
27
  <a name="l00006"></a>00006 <span class="comment"> *</span>
23
- <a name="l00007"></a>00007 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
24
- <a name="l00008"></a>00008 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
25
- <a name="l00009"></a>00009 <span class="comment"> * the Free Software Foundation; version 2 of the License.</span>
26
- <a name="l00010"></a>00010 <span class="comment"> *</span>
27
- <a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
28
- <a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
29
- <a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span>
30
- <a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
31
- <a name="l00015"></a>00015 <span class="comment"> *</span>
32
- <a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License along</span>
33
- <a name="l00017"></a>00017 <span class="comment"> * with this program; if not, write to the Free Software Foundation, Inc.,</span>
34
- <a name="l00018"></a>00018 <span class="comment"> * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.</span>
35
- <a name="l00019"></a>00019 <span class="comment"> */</span>
36
- <a name="l00020"></a>00020 <span class="preprocessor">#ifndef _PASSENGER_CONFIGURATION_H_</span>
37
- <a name="l00021"></a>00021 <span class="preprocessor"></span><span class="preprocessor">#define _PASSENGER_CONFIGURATION_H_</span>
38
- <a name="l00022"></a>00022 <span class="preprocessor"></span>
39
- <a name="l00023"></a>00023 <span class="preprocessor">#include "Utils.h"</span>
40
- <a name="l00024"></a>00024 <span class="preprocessor">#include "MessageChannel.h"</span>
41
- <a name="l00025"></a>00025
42
- <a name="l00026"></a>00026 <span class="comment">/* The APR headers must come after the Passenger headers. See Hooks.cpp</span>
43
- <a name="l00027"></a>00027 <span class="comment"> * to learn why.</span>
44
- <a name="l00028"></a>00028 <span class="comment"> *</span>
45
- <a name="l00029"></a>00029 <span class="comment"> * MessageChannel.h must be included -- even though we don't actually use</span>
46
- <a name="l00030"></a>00030 <span class="comment"> * MessageChannel.h in here, it's necessary to make sure that apr_want.h</span>
47
- <a name="l00031"></a>00031 <span class="comment"> * doesn't b0rk on 'struct iovec'.</span>
48
- <a name="l00032"></a>00032 <span class="comment"> */</span>
49
- <a name="l00033"></a>00033 <span class="preprocessor">#include &lt;apr_pools.h&gt;</span>
50
- <a name="l00034"></a>00034 <span class="preprocessor">#include &lt;httpd.h&gt;</span>
51
- <a name="l00035"></a>00035 <span class="preprocessor">#include &lt;http_config.h&gt;</span>
52
- <a name="l00036"></a>00036 <span class="comment"></span>
53
- <a name="l00037"></a>00037 <span class="comment">/**</span>
54
- <a name="l00038"></a>00038 <span class="comment"> * @defgroup Configuration Apache module configuration</span>
55
- <a name="l00039"></a>00039 <span class="comment"> * @ingroup Core</span>
56
- <a name="l00040"></a>00040 <span class="comment"> * @{</span>
57
- <a name="l00041"></a>00041 <span class="comment"> */</span>
58
- <a name="l00042"></a>00042 <span class="comment"></span>
59
- <a name="l00043"></a>00043 <span class="comment">/** Module version number. */</span>
60
- <a name="l00044"></a><a class="code" href="group__Configuration.html#ga19398896775408d6ab7fd8ce2acd992">00044</a> <span class="preprocessor">#define PASSENGER_VERSION "2.1.3"</span>
61
- <a name="l00045"></a>00045 <span class="preprocessor"></span>
62
- <a name="l00046"></a>00046 <span class="preprocessor">#ifdef __cplusplus</span>
63
- <a name="l00047"></a>00047 <span class="preprocessor"></span><span class="preprocessor"> #include &lt;set&gt;</span>
64
- <a name="l00048"></a>00048 <span class="preprocessor"> #include &lt;string&gt;</span>
65
- <a name="l00049"></a>00049
66
- <a name="l00050"></a>00050 <span class="keyword">namespace </span>Passenger {
67
- <a name="l00051"></a>00051
68
- <a name="l00052"></a>00052 <span class="keyword">using namespace </span>std;
69
- <a name="l00053"></a>00053 <span class="comment"></span>
70
- <a name="l00054"></a>00054 <span class="comment"> /**</span>
71
- <a name="l00055"></a>00055 <span class="comment"> * Per-directory configuration information.</span>
72
- <a name="l00056"></a>00056 <span class="comment"> *</span>
73
- <a name="l00057"></a>00057 <span class="comment"> * Use the getter methods to query information, because those will return</span>
74
- <a name="l00058"></a>00058 <span class="comment"> * the default value if the value is not specified.</span>
75
- <a name="l00059"></a>00059 <span class="comment"> */</span>
76
- <a name="l00060"></a>00060 <span class="keyword">struct </span>DirConfig {
77
- <a name="l00061"></a>00061 <span class="keyword">enum</span> Threeway { ENABLED, DISABLED, UNSET };
78
- <a name="l00062"></a>00062 <span class="keyword">enum</span> SpawnMethod { SM_UNSET, SM_SMART, SM_SMART_LV2, SM_CONSERVATIVE };
79
- <a name="l00063"></a>00063
80
- <a name="l00064"></a>00064 Threeway enabled;
81
- <a name="l00065"></a>00065
82
- <a name="l00066"></a>00066 std::set&lt;std::string&gt; railsBaseURIs;
83
- <a name="l00067"></a>00067 std::set&lt;std::string&gt; rackBaseURIs;
84
- <a name="l00068"></a>00068 <span class="comment"></span>
85
- <a name="l00069"></a>00069 <span class="comment"> /** Whether to autodetect Rails applications. */</span>
86
- <a name="l00070"></a>00070 Threeway autoDetectRails;
87
- <a name="l00071"></a>00071 <span class="comment"></span>
88
- <a name="l00072"></a>00072 <span class="comment"> /** Whether to autodetect Rack applications. */</span>
89
- <a name="l00073"></a>00073 Threeway autoDetectRack;
90
- <a name="l00074"></a>00074 <span class="comment"></span>
91
- <a name="l00075"></a>00075 <span class="comment"> /** Whether to autodetect WSGI applications. */</span>
92
- <a name="l00076"></a>00076 Threeway autoDetectWSGI;
93
- <a name="l00077"></a>00077 <span class="comment"></span>
94
- <a name="l00078"></a>00078 <span class="comment"> /** Whether mod_rewrite should be allowed for Rails applications. */</span>
95
- <a name="l00079"></a>00079 Threeway allowModRewrite;
96
- <a name="l00080"></a>00080 <span class="comment"></span>
97
- <a name="l00081"></a>00081 <span class="comment"> /** The environment (i.e. value for RAILS_ENV) under which</span>
98
- <a name="l00082"></a>00082 <span class="comment"> * Rails applications should operate. */</span>
99
- <a name="l00083"></a>00083 <span class="keyword">const</span> <span class="keywordtype">char</span> *railsEnv;
100
- <a name="l00084"></a>00084 <span class="comment"></span>
101
- <a name="l00085"></a>00085 <span class="comment"> /** The path to the application's root (for example: RAILS_ROOT</span>
102
- <a name="l00086"></a>00086 <span class="comment"> * for Rails applications, directory containing 'config.ru'</span>
103
- <a name="l00087"></a>00087 <span class="comment"> * for Rack applications). If this value is NULL, the default</span>
104
- <a name="l00088"></a>00088 <span class="comment"> * autodetected path will be used.</span>
105
- <a name="l00089"></a>00089 <span class="comment"> */</span>
106
- <a name="l00090"></a>00090 <span class="keyword">const</span> <span class="keywordtype">char</span> *appRoot;
107
- <a name="l00091"></a>00091 <span class="comment"></span>
108
- <a name="l00092"></a>00092 <span class="comment"> /** The environment (i.e. value for RACK_ENV) under which</span>
109
- <a name="l00093"></a>00093 <span class="comment"> * Rack applications should operate. */</span>
110
- <a name="l00094"></a>00094 <span class="keyword">const</span> <span class="keywordtype">char</span> *rackEnv;
111
- <a name="l00095"></a>00095 <span class="comment"></span>
112
- <a name="l00096"></a>00096 <span class="comment"> /** The Rails spawn method to use. */</span>
113
- <a name="l00097"></a>00097 SpawnMethod spawnMethod;
114
- <a name="l00098"></a>00098 <span class="comment"></span>
115
- <a name="l00099"></a>00099 <span class="comment"> /**</span>
116
- <a name="l00100"></a>00100 <span class="comment"> * The idle timeout, in seconds, of Rails framework spawners.</span>
117
- <a name="l00101"></a>00101 <span class="comment"> * May also be 0 (which indicates that the framework spawner should</span>
118
- <a name="l00102"></a>00102 <span class="comment"> * never idle timeout) or -1 (which means that the value is not specified).</span>
119
- <a name="l00103"></a>00103 <span class="comment"> */</span>
120
- <a name="l00104"></a>00104 <span class="keywordtype">long</span> frameworkSpawnerTimeout;
121
- <a name="l00105"></a>00105 <span class="comment"></span>
122
- <a name="l00106"></a>00106 <span class="comment"> /**</span>
123
- <a name="l00107"></a>00107 <span class="comment"> * The idle timeout, in seconds, of Rails application spawners.</span>
124
- <a name="l00108"></a>00108 <span class="comment"> * May also be 0 (which indicates that the application spawner should</span>
125
- <a name="l00109"></a>00109 <span class="comment"> * never idle timeout) or -1 (which means that the value is not specified).</span>
126
- <a name="l00110"></a>00110 <span class="comment"> */</span>
127
- <a name="l00111"></a>00111 <span class="keywordtype">long</span> appSpawnerTimeout;
128
- <a name="l00112"></a>00112 <span class="comment"></span>
129
- <a name="l00113"></a>00113 <span class="comment"> /**</span>
130
- <a name="l00114"></a>00114 <span class="comment"> * The maximum number of requests that the spawned application may process</span>
131
- <a name="l00115"></a>00115 <span class="comment"> * before exiting. A value of 0 means unlimited.</span>
132
- <a name="l00116"></a>00116 <span class="comment"> */</span>
133
- <a name="l00117"></a>00117 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> maxRequests;
134
- <a name="l00118"></a>00118 <span class="comment"></span>
135
- <a name="l00119"></a>00119 <span class="comment"> /** Indicates whether the maxRequests option was explicitly specified</span>
136
- <a name="l00120"></a>00120 <span class="comment"> * in the directory configuration. */</span>
137
- <a name="l00121"></a>00121 <span class="keywordtype">bool</span> maxRequestsSpecified;
138
- <a name="l00122"></a>00122 <span class="comment"></span>
139
- <a name="l00123"></a>00123 <span class="comment"> /**</span>
140
- <a name="l00124"></a>00124 <span class="comment"> * The maximum amount of memory (in MB) the spawned application may use.</span>
141
- <a name="l00125"></a>00125 <span class="comment"> * A value of 0 means unlimited.</span>
142
- <a name="l00126"></a>00126 <span class="comment"> */</span>
143
- <a name="l00127"></a>00127 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> memoryLimit;
144
- <a name="l00128"></a>00128 <span class="comment"></span>
145
- <a name="l00129"></a>00129 <span class="comment"> /** Indicates whether the memoryLimit option was explicitly specified</span>
146
- <a name="l00130"></a>00130 <span class="comment"> * in the directory configuration. */</span>
147
- <a name="l00131"></a>00131 <span class="keywordtype">bool</span> memoryLimitSpecified;
148
- <a name="l00132"></a>00132
149
- <a name="l00133"></a>00133 Threeway highPerformance;
150
- <a name="l00134"></a>00134 <span class="comment"></span>
151
- <a name="l00135"></a>00135 <span class="comment"> /** Whether global queuing should be used. */</span>
152
- <a name="l00136"></a>00136 Threeway useGlobalQueue;
153
- <a name="l00137"></a>00137 <span class="comment"></span>
154
- <a name="l00138"></a>00138 <span class="comment"> /**</span>
155
- <a name="l00139"></a>00139 <span class="comment"> * Throttle the number of stat() calls on files like</span>
156
- <a name="l00140"></a>00140 <span class="comment"> * restart.txt to the once per given number of seconds.</span>
157
- <a name="l00141"></a>00141 <span class="comment"> */</span>
158
- <a name="l00142"></a>00142 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> statThrottleRate;
159
- <a name="l00143"></a>00143 <span class="comment"></span>
160
- <a name="l00144"></a>00144 <span class="comment"> /** Indicates whether the statThrottleRate option was</span>
161
- <a name="l00145"></a>00145 <span class="comment"> * explicitly specified in the directory configuration. */</span>
162
- <a name="l00146"></a>00146 <span class="keywordtype">bool</span> statThrottleRateSpecified;
163
- <a name="l00147"></a>00147 <span class="comment"></span>
164
- <a name="l00148"></a>00148 <span class="comment"> /** The directory in which Passenger should look for</span>
165
- <a name="l00149"></a>00149 <span class="comment"> * restart.txt. NULL means that the default directory</span>
166
- <a name="l00150"></a>00150 <span class="comment"> * should be used.</span>
167
- <a name="l00151"></a>00151 <span class="comment"> */</span>
168
- <a name="l00152"></a>00152 <span class="keyword">const</span> <span class="keywordtype">char</span> *restartDir;
169
- <a name="l00153"></a>00153
170
- <a name="l00154"></a>00154 <span class="comment">/*************************************/</span>
171
- <a name="l00155"></a>00155
172
- <a name="l00156"></a>00156 <span class="keywordtype">bool</span> isEnabled()<span class="keyword"> const </span>{
173
- <a name="l00157"></a>00157 <span class="keywordflow">return</span> enabled != DISABLED;
174
- <a name="l00158"></a>00158 }
175
- <a name="l00159"></a>00159
176
- <a name="l00160"></a>00160 <span class="keywordtype">string</span> getAppRoot(<span class="keyword">const</span> <span class="keywordtype">char</span> *documentRoot)<span class="keyword"> const </span>{
177
- <a name="l00161"></a>00161 <span class="keywordflow">if</span> (appRoot == NULL) {
178
- <a name="l00162"></a>00162 <span class="keywordflow">return</span> string(documentRoot).append(<span class="stringliteral">"/.."</span>);
179
- <a name="l00163"></a>00163 } <span class="keywordflow">else</span> {
180
- <a name="l00164"></a>00164 <span class="keywordflow">return</span> appRoot;
181
- <a name="l00165"></a>00165 }
182
- <a name="l00166"></a>00166 }
183
- <a name="l00167"></a>00167
184
- <a name="l00168"></a>00168 <span class="keyword">const</span> <span class="keywordtype">char</span> *getRailsEnv()<span class="keyword"> const </span>{
185
- <a name="l00169"></a>00169 <span class="keywordflow">if</span> (railsEnv != NULL) {
186
- <a name="l00170"></a>00170 <span class="keywordflow">return</span> railsEnv;
187
- <a name="l00171"></a>00171 } <span class="keywordflow">else</span> {
188
- <a name="l00172"></a>00172 <span class="keywordflow">return</span> <span class="stringliteral">"production"</span>;
189
- <a name="l00173"></a>00173 }
190
- <a name="l00174"></a>00174 }
191
- <a name="l00175"></a>00175
192
- <a name="l00176"></a>00176 <span class="keyword">const</span> <span class="keywordtype">char</span> *getRackEnv()<span class="keyword"> const </span>{
193
- <a name="l00177"></a>00177 <span class="keywordflow">if</span> (rackEnv != NULL) {
194
- <a name="l00178"></a>00178 <span class="keywordflow">return</span> rackEnv;
195
- <a name="l00179"></a>00179 } <span class="keywordflow">else</span> {
196
- <a name="l00180"></a>00180 <span class="keywordflow">return</span> <span class="stringliteral">"production"</span>;
197
- <a name="l00181"></a>00181 }
198
- <a name="l00182"></a>00182 }
199
- <a name="l00183"></a>00183
200
- <a name="l00184"></a>00184 <span class="keyword">const</span> <span class="keywordtype">char</span> *getSpawnMethodString() {
201
- <a name="l00185"></a>00185 <span class="keywordflow">switch</span> (spawnMethod) {
202
- <a name="l00186"></a>00186 <span class="keywordflow">case</span> SM_SMART:
203
- <a name="l00187"></a>00187 <span class="keywordflow">return</span> <span class="stringliteral">"smart"</span>;
204
- <a name="l00188"></a>00188 <span class="keywordflow">case</span> SM_SMART_LV2:
205
- <a name="l00189"></a>00189 <span class="keywordflow">return</span> <span class="stringliteral">"smart-lv2"</span>;
206
- <a name="l00190"></a>00190 <span class="keywordflow">case</span> SM_CONSERVATIVE:
207
- <a name="l00191"></a>00191 <span class="keywordflow">return</span> <span class="stringliteral">"conservative"</span>;
208
- <a name="l00192"></a>00192 <span class="keywordflow">default</span>:
209
- <a name="l00193"></a>00193 <span class="keywordflow">return</span> <span class="stringliteral">"smart-lv2"</span>;
28
+ <a name="l00007"></a>00007 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining a copy</span>
29
+ <a name="l00008"></a>00008 <span class="comment"> * of this software and associated documentation files (the "Software"), to deal</span>
30
+ <a name="l00009"></a>00009 <span class="comment"> * in the Software without restriction, including without limitation the rights</span>
31
+ <a name="l00010"></a>00010 <span class="comment"> * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell</span>
32
+ <a name="l00011"></a>00011 <span class="comment"> * copies of the Software, and to permit persons to whom the Software is</span>
33
+ <a name="l00012"></a>00012 <span class="comment"> * furnished to do so, subject to the following conditions:</span>
34
+ <a name="l00013"></a>00013 <span class="comment"> *</span>
35
+ <a name="l00014"></a>00014 <span class="comment"> * The above copyright notice and this permission notice shall be included in</span>
36
+ <a name="l00015"></a>00015 <span class="comment"> * all copies or substantial portions of the Software.</span>
37
+ <a name="l00016"></a>00016 <span class="comment"> *</span>
38
+ <a name="l00017"></a>00017 <span class="comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</span>
39
+ <a name="l00018"></a>00018 <span class="comment"> * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</span>
40
+ <a name="l00019"></a>00019 <span class="comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</span>
41
+ <a name="l00020"></a>00020 <span class="comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</span>
42
+ <a name="l00021"></a>00021 <span class="comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,</span>
43
+ <a name="l00022"></a>00022 <span class="comment"> * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN</span>
44
+ <a name="l00023"></a>00023 <span class="comment"> * THE SOFTWARE.</span>
45
+ <a name="l00024"></a>00024 <span class="comment"> */</span>
46
+ <a name="l00025"></a>00025 <span class="preprocessor">#ifndef _PASSENGER_CONFIGURATION_H_</span>
47
+ <a name="l00026"></a>00026 <span class="preprocessor"></span><span class="preprocessor">#define _PASSENGER_CONFIGURATION_H_</span>
48
+ <a name="l00027"></a>00027 <span class="preprocessor"></span>
49
+ <a name="l00028"></a>00028 <span class="preprocessor">#include "Utils.h"</span>
50
+ <a name="l00029"></a>00029 <span class="preprocessor">#include "MessageChannel.h"</span>
51
+ <a name="l00030"></a>00030
52
+ <a name="l00031"></a>00031 <span class="comment">/* The APR headers must come after the Passenger headers. See Hooks.cpp</span>
53
+ <a name="l00032"></a>00032 <span class="comment"> * to learn why.</span>
54
+ <a name="l00033"></a>00033 <span class="comment"> *</span>
55
+ <a name="l00034"></a>00034 <span class="comment"> * MessageChannel.h must be included -- even though we don't actually use</span>
56
+ <a name="l00035"></a>00035 <span class="comment"> * MessageChannel.h in here, it's necessary to make sure that apr_want.h</span>
57
+ <a name="l00036"></a>00036 <span class="comment"> * doesn't b0rk on 'struct iovec'.</span>
58
+ <a name="l00037"></a>00037 <span class="comment"> */</span>
59
+ <a name="l00038"></a>00038 <span class="preprocessor">#include &lt;apr_pools.h&gt;</span>
60
+ <a name="l00039"></a>00039 <span class="preprocessor">#include &lt;httpd.h&gt;</span>
61
+ <a name="l00040"></a>00040 <span class="preprocessor">#include &lt;http_config.h&gt;</span>
62
+ <a name="l00041"></a>00041 <span class="comment"></span>
63
+ <a name="l00042"></a>00042 <span class="comment">/**</span>
64
+ <a name="l00043"></a>00043 <span class="comment"> * @defgroup Configuration Apache module configuration</span>
65
+ <a name="l00044"></a>00044 <span class="comment"> * @ingroup Core</span>
66
+ <a name="l00045"></a>00045 <span class="comment"> * @{</span>
67
+ <a name="l00046"></a>00046 <span class="comment"> */</span>
68
+ <a name="l00047"></a>00047 <span class="comment"></span>
69
+ <a name="l00048"></a>00048 <span class="comment">/** Module version number. */</span>
70
+ <a name="l00049"></a><a class="code" href="group__Configuration.html#ga19398896775408d6ab7fd8ce2acd992">00049</a> <span class="preprocessor">#define PASSENGER_VERSION "2.2.0"</span>
71
+ <a name="l00050"></a>00050 <span class="preprocessor"></span>
72
+ <a name="l00051"></a>00051 <span class="preprocessor">#ifdef __cplusplus</span>
73
+ <a name="l00052"></a>00052 <span class="preprocessor"></span><span class="preprocessor"> #include &lt;set&gt;</span>
74
+ <a name="l00053"></a>00053 <span class="preprocessor"> #include &lt;string&gt;</span>
75
+ <a name="l00054"></a>00054
76
+ <a name="l00055"></a>00055 <span class="keyword">namespace </span>Passenger {
77
+ <a name="l00056"></a>00056
78
+ <a name="l00057"></a>00057 <span class="keyword">using namespace </span>std;
79
+ <a name="l00058"></a>00058 <span class="comment"></span>
80
+ <a name="l00059"></a>00059 <span class="comment"> /**</span>
81
+ <a name="l00060"></a>00060 <span class="comment"> * Per-directory configuration information.</span>
82
+ <a name="l00061"></a>00061 <span class="comment"> *</span>
83
+ <a name="l00062"></a>00062 <span class="comment"> * Use the getter methods to query information, because those will return</span>
84
+ <a name="l00063"></a>00063 <span class="comment"> * the default value if the value is not specified.</span>
85
+ <a name="l00064"></a>00064 <span class="comment"> */</span>
86
+ <a name="l00065"></a>00065 <span class="keyword">struct </span>DirConfig {
87
+ <a name="l00066"></a>00066 <span class="keyword">enum</span> Threeway { ENABLED, DISABLED, UNSET };
88
+ <a name="l00067"></a>00067 <span class="keyword">enum</span> SpawnMethod { SM_UNSET, SM_SMART, SM_SMART_LV2, SM_CONSERVATIVE };
89
+ <a name="l00068"></a>00068
90
+ <a name="l00069"></a>00069 Threeway enabled;
91
+ <a name="l00070"></a>00070
92
+ <a name="l00071"></a>00071 std::set&lt;std::string&gt; railsBaseURIs;
93
+ <a name="l00072"></a>00072 std::set&lt;std::string&gt; rackBaseURIs;
94
+ <a name="l00073"></a>00073 <span class="comment"></span>
95
+ <a name="l00074"></a>00074 <span class="comment"> /** Whether to autodetect Rails applications. */</span>
96
+ <a name="l00075"></a>00075 Threeway autoDetectRails;
97
+ <a name="l00076"></a>00076 <span class="comment"></span>
98
+ <a name="l00077"></a>00077 <span class="comment"> /** Whether to autodetect Rack applications. */</span>
99
+ <a name="l00078"></a>00078 Threeway autoDetectRack;
100
+ <a name="l00079"></a>00079 <span class="comment"></span>
101
+ <a name="l00080"></a>00080 <span class="comment"> /** Whether to autodetect WSGI applications. */</span>
102
+ <a name="l00081"></a>00081 Threeway autoDetectWSGI;
103
+ <a name="l00082"></a>00082 <span class="comment"></span>
104
+ <a name="l00083"></a>00083 <span class="comment"> /** Whether mod_rewrite should be allowed for Rails applications. */</span>
105
+ <a name="l00084"></a>00084 Threeway allowModRewrite;
106
+ <a name="l00085"></a>00085 <span class="comment"></span>
107
+ <a name="l00086"></a>00086 <span class="comment"> /** The environment (i.e. value for RAILS_ENV) under which</span>
108
+ <a name="l00087"></a>00087 <span class="comment"> * Rails applications should operate. */</span>
109
+ <a name="l00088"></a>00088 <span class="keyword">const</span> <span class="keywordtype">char</span> *railsEnv;
110
+ <a name="l00089"></a>00089 <span class="comment"></span>
111
+ <a name="l00090"></a>00090 <span class="comment"> /** The path to the application's root (for example: RAILS_ROOT</span>
112
+ <a name="l00091"></a>00091 <span class="comment"> * for Rails applications, directory containing 'config.ru'</span>
113
+ <a name="l00092"></a>00092 <span class="comment"> * for Rack applications). If this value is NULL, the default</span>
114
+ <a name="l00093"></a>00093 <span class="comment"> * autodetected path will be used.</span>
115
+ <a name="l00094"></a>00094 <span class="comment"> */</span>
116
+ <a name="l00095"></a>00095 <span class="keyword">const</span> <span class="keywordtype">char</span> *appRoot;
117
+ <a name="l00096"></a>00096 <span class="comment"></span>
118
+ <a name="l00097"></a>00097 <span class="comment"> /** The environment (i.e. value for RACK_ENV) under which</span>
119
+ <a name="l00098"></a>00098 <span class="comment"> * Rack applications should operate. */</span>
120
+ <a name="l00099"></a>00099 <span class="keyword">const</span> <span class="keywordtype">char</span> *rackEnv;
121
+ <a name="l00100"></a>00100 <span class="comment"></span>
122
+ <a name="l00101"></a>00101 <span class="comment"> /** The Rails spawn method to use. */</span>
123
+ <a name="l00102"></a>00102 SpawnMethod spawnMethod;
124
+ <a name="l00103"></a>00103 <span class="comment"></span>
125
+ <a name="l00104"></a>00104 <span class="comment"> /**</span>
126
+ <a name="l00105"></a>00105 <span class="comment"> * The idle timeout, in seconds, of Rails framework spawners.</span>
127
+ <a name="l00106"></a>00106 <span class="comment"> * May also be 0 (which indicates that the framework spawner should</span>
128
+ <a name="l00107"></a>00107 <span class="comment"> * never idle timeout) or -1 (which means that the value is not specified).</span>
129
+ <a name="l00108"></a>00108 <span class="comment"> */</span>
130
+ <a name="l00109"></a>00109 <span class="keywordtype">long</span> frameworkSpawnerTimeout;
131
+ <a name="l00110"></a>00110 <span class="comment"></span>
132
+ <a name="l00111"></a>00111 <span class="comment"> /**</span>
133
+ <a name="l00112"></a>00112 <span class="comment"> * The idle timeout, in seconds, of Rails application spawners.</span>
134
+ <a name="l00113"></a>00113 <span class="comment"> * May also be 0 (which indicates that the application spawner should</span>
135
+ <a name="l00114"></a>00114 <span class="comment"> * never idle timeout) or -1 (which means that the value is not specified).</span>
136
+ <a name="l00115"></a>00115 <span class="comment"> */</span>
137
+ <a name="l00116"></a>00116 <span class="keywordtype">long</span> appSpawnerTimeout;
138
+ <a name="l00117"></a>00117 <span class="comment"></span>
139
+ <a name="l00118"></a>00118 <span class="comment"> /**</span>
140
+ <a name="l00119"></a>00119 <span class="comment"> * The maximum number of requests that the spawned application may process</span>
141
+ <a name="l00120"></a>00120 <span class="comment"> * before exiting. A value of 0 means unlimited.</span>
142
+ <a name="l00121"></a>00121 <span class="comment"> */</span>
143
+ <a name="l00122"></a>00122 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> maxRequests;
144
+ <a name="l00123"></a>00123 <span class="comment"></span>
145
+ <a name="l00124"></a>00124 <span class="comment"> /** Indicates whether the maxRequests option was explicitly specified</span>
146
+ <a name="l00125"></a>00125 <span class="comment"> * in the directory configuration. */</span>
147
+ <a name="l00126"></a>00126 <span class="keywordtype">bool</span> maxRequestsSpecified;
148
+ <a name="l00127"></a>00127 <span class="comment"></span>
149
+ <a name="l00128"></a>00128 <span class="comment"> /**</span>
150
+ <a name="l00129"></a>00129 <span class="comment"> * The maximum amount of memory (in MB) the spawned application may use.</span>
151
+ <a name="l00130"></a>00130 <span class="comment"> * A value of 0 means unlimited.</span>
152
+ <a name="l00131"></a>00131 <span class="comment"> */</span>
153
+ <a name="l00132"></a>00132 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> memoryLimit;
154
+ <a name="l00133"></a>00133 <span class="comment"></span>
155
+ <a name="l00134"></a>00134 <span class="comment"> /** Indicates whether the memoryLimit option was explicitly specified</span>
156
+ <a name="l00135"></a>00135 <span class="comment"> * in the directory configuration. */</span>
157
+ <a name="l00136"></a>00136 <span class="keywordtype">bool</span> memoryLimitSpecified;
158
+ <a name="l00137"></a>00137
159
+ <a name="l00138"></a>00138 Threeway highPerformance;
160
+ <a name="l00139"></a>00139 <span class="comment"></span>
161
+ <a name="l00140"></a>00140 <span class="comment"> /** Whether global queuing should be used. */</span>
162
+ <a name="l00141"></a>00141 Threeway useGlobalQueue;
163
+ <a name="l00142"></a>00142 <span class="comment"></span>
164
+ <a name="l00143"></a>00143 <span class="comment"> /**</span>
165
+ <a name="l00144"></a>00144 <span class="comment"> * Throttle the number of stat() calls on files like</span>
166
+ <a name="l00145"></a>00145 <span class="comment"> * restart.txt to the once per given number of seconds.</span>
167
+ <a name="l00146"></a>00146 <span class="comment"> */</span>
168
+ <a name="l00147"></a>00147 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> statThrottleRate;
169
+ <a name="l00148"></a>00148 <span class="comment"></span>
170
+ <a name="l00149"></a>00149 <span class="comment"> /** Indicates whether the statThrottleRate option was</span>
171
+ <a name="l00150"></a>00150 <span class="comment"> * explicitly specified in the directory configuration. */</span>
172
+ <a name="l00151"></a>00151 <span class="keywordtype">bool</span> statThrottleRateSpecified;
173
+ <a name="l00152"></a>00152 <span class="comment"></span>
174
+ <a name="l00153"></a>00153 <span class="comment"> /** The directory in which Passenger should look for</span>
175
+ <a name="l00154"></a>00154 <span class="comment"> * restart.txt. NULL means that the default directory</span>
176
+ <a name="l00155"></a>00155 <span class="comment"> * should be used.</span>
177
+ <a name="l00156"></a>00156 <span class="comment"> */</span>
178
+ <a name="l00157"></a>00157 <span class="keyword">const</span> <span class="keywordtype">char</span> *restartDir;
179
+ <a name="l00158"></a>00158
180
+ <a name="l00159"></a>00159 <span class="comment">/*************************************/</span>
181
+ <a name="l00160"></a>00160
182
+ <a name="l00161"></a>00161 <span class="keywordtype">bool</span> isEnabled()<span class="keyword"> const </span>{
183
+ <a name="l00162"></a>00162 <span class="keywordflow">return</span> enabled != DISABLED;
184
+ <a name="l00163"></a>00163 }
185
+ <a name="l00164"></a>00164
186
+ <a name="l00165"></a>00165 <span class="keywordtype">string</span> getAppRoot(<span class="keyword">const</span> <span class="keywordtype">char</span> *documentRoot)<span class="keyword"> const </span>{
187
+ <a name="l00166"></a>00166 <span class="keywordflow">if</span> (appRoot == NULL) {
188
+ <a name="l00167"></a>00167 <span class="keywordflow">return</span> extractDirName(documentRoot);
189
+ <a name="l00168"></a>00168 } <span class="keywordflow">else</span> {
190
+ <a name="l00169"></a>00169 <span class="keywordflow">return</span> appRoot;
191
+ <a name="l00170"></a>00170 }
192
+ <a name="l00171"></a>00171 }
193
+ <a name="l00172"></a>00172
194
+ <a name="l00173"></a>00173 <span class="keywordtype">string</span> getAppRoot(<span class="keyword">const</span> <span class="keywordtype">string</span> &amp;documentRoot)<span class="keyword"> const </span>{
195
+ <a name="l00174"></a>00174 <span class="keywordflow">if</span> (appRoot == NULL) {
196
+ <a name="l00175"></a>00175 <span class="keywordflow">return</span> extractDirName(documentRoot);
197
+ <a name="l00176"></a>00176 } <span class="keywordflow">else</span> {
198
+ <a name="l00177"></a>00177 <span class="keywordflow">return</span> appRoot;
199
+ <a name="l00178"></a>00178 }
200
+ <a name="l00179"></a>00179 }
201
+ <a name="l00180"></a>00180
202
+ <a name="l00181"></a>00181 <span class="keyword">const</span> <span class="keywordtype">char</span> *getRailsEnv()<span class="keyword"> const </span>{
203
+ <a name="l00182"></a>00182 <span class="keywordflow">if</span> (railsEnv != NULL) {
204
+ <a name="l00183"></a>00183 <span class="keywordflow">return</span> railsEnv;
205
+ <a name="l00184"></a>00184 } <span class="keywordflow">else</span> {
206
+ <a name="l00185"></a>00185 <span class="keywordflow">return</span> <span class="stringliteral">"production"</span>;
207
+ <a name="l00186"></a>00186 }
208
+ <a name="l00187"></a>00187 }
209
+ <a name="l00188"></a>00188
210
+ <a name="l00189"></a>00189 <span class="keyword">const</span> <span class="keywordtype">char</span> *getRackEnv()<span class="keyword"> const </span>{
211
+ <a name="l00190"></a>00190 <span class="keywordflow">if</span> (rackEnv != NULL) {
212
+ <a name="l00191"></a>00191 <span class="keywordflow">return</span> rackEnv;
213
+ <a name="l00192"></a>00192 } <span class="keywordflow">else</span> {
214
+ <a name="l00193"></a>00193 <span class="keywordflow">return</span> <span class="stringliteral">"production"</span>;
210
215
  <a name="l00194"></a>00194 }
211
216
  <a name="l00195"></a>00195 }
212
217
  <a name="l00196"></a>00196
213
- <a name="l00197"></a>00197 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> getMaxRequests() {
214
- <a name="l00198"></a>00198 <span class="keywordflow">if</span> (maxRequestsSpecified) {
215
- <a name="l00199"></a>00199 <span class="keywordflow">return</span> maxRequests;
216
- <a name="l00200"></a>00200 } <span class="keywordflow">else</span> {
217
- <a name="l00201"></a>00201 <span class="keywordflow">return</span> 0;
218
- <a name="l00202"></a>00202 }
219
- <a name="l00203"></a>00203 }
220
- <a name="l00204"></a>00204
221
- <a name="l00205"></a>00205 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> getMemoryLimit() {
222
- <a name="l00206"></a>00206 <span class="keywordflow">if</span> (memoryLimitSpecified) {
223
- <a name="l00207"></a>00207 <span class="keywordflow">return</span> memoryLimit;
224
- <a name="l00208"></a>00208 } <span class="keywordflow">else</span> {
225
- <a name="l00209"></a>00209 <span class="keywordflow">return</span> 200;
226
- <a name="l00210"></a>00210 }
227
- <a name="l00211"></a>00211 }
228
- <a name="l00212"></a>00212
229
- <a name="l00213"></a>00213 <span class="keywordtype">bool</span> highPerformanceMode()<span class="keyword"> const </span>{
230
- <a name="l00214"></a>00214 <span class="keywordflow">return</span> highPerformance == ENABLED;
231
- <a name="l00215"></a>00215 }
232
- <a name="l00216"></a>00216
233
- <a name="l00217"></a>00217 <span class="keywordtype">bool</span> usingGlobalQueue()<span class="keyword"> const </span>{
234
- <a name="l00218"></a>00218 <span class="keywordflow">return</span> useGlobalQueue == ENABLED;
235
- <a name="l00219"></a>00219 }
236
- <a name="l00220"></a>00220
237
- <a name="l00221"></a>00221 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> getStatThrottleRate()<span class="keyword"> const </span>{
238
- <a name="l00222"></a>00222 <span class="keywordflow">if</span> (statThrottleRateSpecified) {
239
- <a name="l00223"></a>00223 <span class="keywordflow">return</span> statThrottleRate;
240
- <a name="l00224"></a>00224 } <span class="keywordflow">else</span> {
241
- <a name="l00225"></a>00225 <span class="keywordflow">return</span> 0;
242
- <a name="l00226"></a>00226 }
243
- <a name="l00227"></a>00227 }
244
- <a name="l00228"></a>00228
245
- <a name="l00229"></a>00229 <span class="keyword">const</span> <span class="keywordtype">char</span> *getRestartDir()<span class="keyword"> const </span>{
246
- <a name="l00230"></a>00230 <span class="keywordflow">if</span> (restartDir != NULL) {
247
- <a name="l00231"></a>00231 <span class="keywordflow">return</span> restartDir;
248
- <a name="l00232"></a>00232 } <span class="keywordflow">else</span> {
249
- <a name="l00233"></a>00233 <span class="keywordflow">return</span> <span class="stringliteral">""</span>;
250
- <a name="l00234"></a>00234 }
251
- <a name="l00235"></a>00235 }
252
- <a name="l00236"></a>00236
253
- <a name="l00237"></a>00237 <span class="comment">/*************************************/</span>
254
- <a name="l00238"></a>00238 };
255
- <a name="l00239"></a>00239 <span class="comment"></span>
256
- <a name="l00240"></a>00240 <span class="comment"> /**</span>
257
- <a name="l00241"></a>00241 <span class="comment"> * Server-wide (global, not per-virtual host) configuration information.</span>
258
- <a name="l00242"></a>00242 <span class="comment"> *</span>
259
- <a name="l00243"></a>00243 <span class="comment"> * Use the getter methods to query information, because those will return</span>
260
- <a name="l00244"></a>00244 <span class="comment"> * the default value if the value is not specified.</span>
261
- <a name="l00245"></a>00245 <span class="comment"> */</span>
262
- <a name="l00246"></a>00246 <span class="keyword">struct </span>ServerConfig {<span class="comment"></span>
263
- <a name="l00247"></a>00247 <span class="comment"> /** The filename of the Ruby interpreter to use. */</span>
264
- <a name="l00248"></a>00248 <span class="keyword">const</span> <span class="keywordtype">char</span> *ruby;
265
- <a name="l00249"></a>00249 <span class="comment"></span>
266
- <a name="l00250"></a>00250 <span class="comment"> /** The Passenger root folder. */</span>
267
- <a name="l00251"></a>00251 <span class="keyword">const</span> <span class="keywordtype">char</span> *root;
268
- <a name="l00252"></a>00252 <span class="comment"></span>
269
- <a name="l00253"></a>00253 <span class="comment"> /** The log verbosity. */</span>
270
- <a name="l00254"></a>00254 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> logLevel;
271
- <a name="l00255"></a>00255 <span class="comment"></span>
272
- <a name="l00256"></a>00256 <span class="comment"> /** The maximum number of simultaneously alive application</span>
273
- <a name="l00257"></a>00257 <span class="comment"> * instances. */</span>
274
- <a name="l00258"></a>00258 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> maxPoolSize;
275
- <a name="l00259"></a>00259 <span class="comment"></span>
276
- <a name="l00260"></a>00260 <span class="comment"> /** Whether the maxPoolSize option was explicitly specified in</span>
277
- <a name="l00261"></a>00261 <span class="comment"> * this server config. */</span>
278
- <a name="l00262"></a>00262 <span class="keywordtype">bool</span> maxPoolSizeSpecified;
279
- <a name="l00263"></a>00263 <span class="comment"></span>
280
- <a name="l00264"></a>00264 <span class="comment"> /** The maximum number of simultaneously alive Rails application</span>
281
- <a name="l00265"></a>00265 <span class="comment"> * that a single Rails application may occupy. */</span>
282
- <a name="l00266"></a>00266 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> maxInstancesPerApp;
283
- <a name="l00267"></a>00267 <span class="comment"></span>
284
- <a name="l00268"></a>00268 <span class="comment"> /** Whether the maxInstancesPerApp option was explicitly specified in</span>
285
- <a name="l00269"></a>00269 <span class="comment"> * this server config. */</span>
286
- <a name="l00270"></a>00270 <span class="keywordtype">bool</span> maxInstancesPerAppSpecified;
287
- <a name="l00271"></a>00271 <span class="comment"></span>
288
- <a name="l00272"></a>00272 <span class="comment"> /** The maximum number of seconds that an application may be</span>
289
- <a name="l00273"></a>00273 <span class="comment"> * idle before it gets terminated. */</span>
290
- <a name="l00274"></a>00274 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> poolIdleTime;
291
- <a name="l00275"></a>00275 <span class="comment"></span>
292
- <a name="l00276"></a>00276 <span class="comment"> /** Whether the poolIdleTime option was explicitly specified in</span>
293
- <a name="l00277"></a>00277 <span class="comment"> * this server config. */</span>
294
- <a name="l00278"></a>00278 <span class="keywordtype">bool</span> poolIdleTimeSpecified;
295
- <a name="l00279"></a>00279 <span class="comment"></span>
296
- <a name="l00280"></a>00280 <span class="comment"> /** Whether user switching support is enabled. */</span>
297
- <a name="l00281"></a>00281 <span class="keywordtype">bool</span> userSwitching;
298
- <a name="l00282"></a>00282 <span class="comment"></span>
299
- <a name="l00283"></a>00283 <span class="comment"> /** Whether the userSwitching option was explicitly specified in</span>
300
- <a name="l00284"></a>00284 <span class="comment"> * this server config. */</span>
301
- <a name="l00285"></a>00285 <span class="keywordtype">bool</span> userSwitchingSpecified;
302
- <a name="l00286"></a>00286 <span class="comment"></span>
303
- <a name="l00287"></a>00287 <span class="comment"> /** The user that applications must run as if user switching</span>
304
- <a name="l00288"></a>00288 <span class="comment"> * fails or is disabled. NULL means the option is not specified.</span>
305
- <a name="l00289"></a>00289 <span class="comment"> */</span>
306
- <a name="l00290"></a>00290 <span class="keyword">const</span> <span class="keywordtype">char</span> *defaultUser;
307
- <a name="l00291"></a>00291 <span class="comment"></span>
308
- <a name="l00292"></a>00292 <span class="comment"> /** The temp directory that Passenger should use. NULL</span>
309
- <a name="l00293"></a>00293 <span class="comment"> * means unspecified.</span>
310
- <a name="l00294"></a>00294 <span class="comment"> */</span>
311
- <a name="l00295"></a>00295 <span class="keyword">const</span> <span class="keywordtype">char</span> *tempDir;
312
- <a name="l00296"></a>00296
313
- <a name="l00297"></a>00297 <span class="keyword">const</span> <span class="keywordtype">char</span> *getDefaultUser()<span class="keyword"> const </span>{
314
- <a name="l00298"></a>00298 <span class="keywordflow">if</span> (defaultUser != NULL) {
315
- <a name="l00299"></a>00299 <span class="keywordflow">return</span> defaultUser;
316
- <a name="l00300"></a>00300 } <span class="keywordflow">else</span> {
317
- <a name="l00301"></a>00301 <span class="keywordflow">return</span> <span class="stringliteral">"nobody"</span>;
318
- <a name="l00302"></a>00302 }
319
- <a name="l00303"></a>00303 }
320
- <a name="l00304"></a>00304
321
- <a name="l00305"></a>00305 <span class="keyword">const</span> <span class="keywordtype">char</span> *getTempDir()<span class="keyword"> const </span>{
322
- <a name="l00306"></a>00306 <span class="keywordflow">if</span> (tempDir != NULL) {
323
- <a name="l00307"></a>00307 <span class="keywordflow">return</span> tempDir;
324
- <a name="l00308"></a>00308 } <span class="keywordflow">else</span> {
325
- <a name="l00309"></a>00309 <span class="keywordflow">return</span> <a class="code" href="group__Support.html#g68f4105c5a8e510520b5ea3eecb66213" title="Return the path name for the directory in which the system stores general temporary...">getSystemTempDir</a>();
326
- <a name="l00310"></a>00310 }
327
- <a name="l00311"></a>00311 }
328
- <a name="l00312"></a>00312 };
329
- <a name="l00313"></a>00313 }
330
- <a name="l00314"></a>00314
331
- <a name="l00315"></a>00315 <span class="keyword">extern</span> <span class="stringliteral">"C"</span> {
332
- <a name="l00316"></a>00316 <span class="preprocessor">#endif</span>
333
- <a name="l00317"></a>00317 <span class="preprocessor"></span><span class="comment"></span>
334
- <a name="l00318"></a>00318 <span class="comment">/** Configuration hook for per-directory configuration structure creation. */</span>
335
- <a name="l00319"></a>00319 <span class="keywordtype">void</span> *<a class="code" href="group__Configuration.html#g92dc583c1fa5f8025149799e356a6c78" title="Configuration hook for per-directory configuration structure creation.">passenger_config_create_dir</a>(apr_pool_t *p, <span class="keywordtype">char</span> *dirspec);
336
- <a name="l00320"></a>00320 <span class="comment"></span>
337
- <a name="l00321"></a>00321 <span class="comment">/** Configuration hook for per-directory configuration structure merging. */</span>
338
- <a name="l00322"></a>00322 <span class="keywordtype">void</span> *<a class="code" href="group__Configuration.html#g17787a036ef3f4dc46ae0acc9da2c7b0" title="Configuration hook for per-directory configuration structure merging.">passenger_config_merge_dir</a>(apr_pool_t *p, <span class="keywordtype">void</span> *basev, <span class="keywordtype">void</span> *addv);
339
- <a name="l00323"></a>00323 <span class="comment"></span>
340
- <a name="l00324"></a>00324 <span class="comment">/** Configuration hook for per-server configuration structure creation. */</span>
341
- <a name="l00325"></a>00325 <span class="keywordtype">void</span> *<a class="code" href="group__Configuration.html#ga93bd8d426649b4e86da38eb67a49178" title="Configuration hook for per-server configuration structure creation.">passenger_config_create_server</a>(apr_pool_t *p, server_rec *s);
342
- <a name="l00326"></a>00326 <span class="comment"></span>
343
- <a name="l00327"></a>00327 <span class="comment">/** Configuration hook for per-server configuration structure merging. */</span>
344
- <a name="l00328"></a>00328 <span class="keywordtype">void</span> *<a class="code" href="group__Configuration.html#g95c963a61867190928d912779952b15e" title="Configuration hook for per-server configuration structure merging.">passenger_config_merge_server</a>(apr_pool_t *p, <span class="keywordtype">void</span> *basev, <span class="keywordtype">void</span> *overridesv);
345
- <a name="l00329"></a>00329
346
- <a name="l00330"></a>00330 <span class="keywordtype">void</span> passenger_config_merge_all_servers(apr_pool_t *pool, server_rec *main_server);
347
- <a name="l00331"></a>00331 <span class="comment"></span>
348
- <a name="l00332"></a>00332 <span class="comment">/** Apache module commands array. */</span>
349
- <a name="l00333"></a>00333 <span class="keyword">extern</span> <span class="keyword">const</span> command_rec <a class="code" href="group__Configuration.html#g21954abbf4018583acb9d8daef3dfd95" title="Apache module commands array.">passenger_commands</a>[];
350
- <a name="l00334"></a>00334
351
- <a name="l00335"></a>00335 <span class="preprocessor">#ifdef __cplusplus</span>
352
- <a name="l00336"></a>00336 <span class="preprocessor"></span> }
353
- <a name="l00337"></a>00337 <span class="preprocessor">#endif</span>
354
- <a name="l00338"></a>00338 <span class="preprocessor"></span><span class="comment"></span>
355
- <a name="l00339"></a>00339 <span class="comment">/**</span>
356
- <a name="l00340"></a>00340 <span class="comment"> * @}</span>
357
- <a name="l00341"></a>00341 <span class="comment"> */</span>
218
+ <a name="l00197"></a>00197 <span class="keyword">const</span> <span class="keywordtype">char</span> *getSpawnMethodString() {
219
+ <a name="l00198"></a>00198 <span class="keywordflow">switch</span> (spawnMethod) {
220
+ <a name="l00199"></a>00199 <span class="keywordflow">case</span> SM_SMART:
221
+ <a name="l00200"></a>00200 <span class="keywordflow">return</span> <span class="stringliteral">"smart"</span>;
222
+ <a name="l00201"></a>00201 <span class="keywordflow">case</span> SM_SMART_LV2:
223
+ <a name="l00202"></a>00202 <span class="keywordflow">return</span> <span class="stringliteral">"smart-lv2"</span>;
224
+ <a name="l00203"></a>00203 <span class="keywordflow">case</span> SM_CONSERVATIVE:
225
+ <a name="l00204"></a>00204 <span class="keywordflow">return</span> <span class="stringliteral">"conservative"</span>;
226
+ <a name="l00205"></a>00205 <span class="keywordflow">default</span>:
227
+ <a name="l00206"></a>00206 <span class="keywordflow">return</span> <span class="stringliteral">"smart-lv2"</span>;
228
+ <a name="l00207"></a>00207 }
229
+ <a name="l00208"></a>00208 }
230
+ <a name="l00209"></a>00209
231
+ <a name="l00210"></a>00210 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> getMaxRequests() {
232
+ <a name="l00211"></a>00211 <span class="keywordflow">if</span> (maxRequestsSpecified) {
233
+ <a name="l00212"></a>00212 <span class="keywordflow">return</span> maxRequests;
234
+ <a name="l00213"></a>00213 } <span class="keywordflow">else</span> {
235
+ <a name="l00214"></a>00214 <span class="keywordflow">return</span> 0;
236
+ <a name="l00215"></a>00215 }
237
+ <a name="l00216"></a>00216 }
238
+ <a name="l00217"></a>00217
239
+ <a name="l00218"></a>00218 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> getMemoryLimit() {
240
+ <a name="l00219"></a>00219 <span class="keywordflow">if</span> (memoryLimitSpecified) {
241
+ <a name="l00220"></a>00220 <span class="keywordflow">return</span> memoryLimit;
242
+ <a name="l00221"></a>00221 } <span class="keywordflow">else</span> {
243
+ <a name="l00222"></a>00222 <span class="keywordflow">return</span> 200;
244
+ <a name="l00223"></a>00223 }
245
+ <a name="l00224"></a>00224 }
246
+ <a name="l00225"></a>00225
247
+ <a name="l00226"></a>00226 <span class="keywordtype">bool</span> highPerformanceMode()<span class="keyword"> const </span>{
248
+ <a name="l00227"></a>00227 <span class="keywordflow">return</span> highPerformance == ENABLED;
249
+ <a name="l00228"></a>00228 }
250
+ <a name="l00229"></a>00229
251
+ <a name="l00230"></a>00230 <span class="keywordtype">bool</span> usingGlobalQueue()<span class="keyword"> const </span>{
252
+ <a name="l00231"></a>00231 <span class="keywordflow">return</span> useGlobalQueue == ENABLED;
253
+ <a name="l00232"></a>00232 }
254
+ <a name="l00233"></a>00233
255
+ <a name="l00234"></a>00234 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> getStatThrottleRate()<span class="keyword"> const </span>{
256
+ <a name="l00235"></a>00235 <span class="keywordflow">if</span> (statThrottleRateSpecified) {
257
+ <a name="l00236"></a>00236 <span class="keywordflow">return</span> statThrottleRate;
258
+ <a name="l00237"></a>00237 } <span class="keywordflow">else</span> {
259
+ <a name="l00238"></a>00238 <span class="keywordflow">return</span> 0;
260
+ <a name="l00239"></a>00239 }
261
+ <a name="l00240"></a>00240 }
262
+ <a name="l00241"></a>00241
263
+ <a name="l00242"></a>00242 <span class="keyword">const</span> <span class="keywordtype">char</span> *getRestartDir()<span class="keyword"> const </span>{
264
+ <a name="l00243"></a>00243 <span class="keywordflow">if</span> (restartDir != NULL) {
265
+ <a name="l00244"></a>00244 <span class="keywordflow">return</span> restartDir;
266
+ <a name="l00245"></a>00245 } <span class="keywordflow">else</span> {
267
+ <a name="l00246"></a>00246 <span class="keywordflow">return</span> <span class="stringliteral">""</span>;
268
+ <a name="l00247"></a>00247 }
269
+ <a name="l00248"></a>00248 }
270
+ <a name="l00249"></a>00249
271
+ <a name="l00250"></a>00250 <span class="comment">/*************************************/</span>
272
+ <a name="l00251"></a>00251 };
273
+ <a name="l00252"></a>00252 <span class="comment"></span>
274
+ <a name="l00253"></a>00253 <span class="comment"> /**</span>
275
+ <a name="l00254"></a>00254 <span class="comment"> * Server-wide (global, not per-virtual host) configuration information.</span>
276
+ <a name="l00255"></a>00255 <span class="comment"> *</span>
277
+ <a name="l00256"></a>00256 <span class="comment"> * Use the getter methods to query information, because those will return</span>
278
+ <a name="l00257"></a>00257 <span class="comment"> * the default value if the value is not specified.</span>
279
+ <a name="l00258"></a>00258 <span class="comment"> */</span>
280
+ <a name="l00259"></a>00259 <span class="keyword">struct </span>ServerConfig {<span class="comment"></span>
281
+ <a name="l00260"></a>00260 <span class="comment"> /** The filename of the Ruby interpreter to use. */</span>
282
+ <a name="l00261"></a>00261 <span class="keyword">const</span> <span class="keywordtype">char</span> *ruby;
283
+ <a name="l00262"></a>00262 <span class="comment"></span>
284
+ <a name="l00263"></a>00263 <span class="comment"> /** The Passenger root folder. */</span>
285
+ <a name="l00264"></a>00264 <span class="keyword">const</span> <span class="keywordtype">char</span> *root;
286
+ <a name="l00265"></a>00265 <span class="comment"></span>
287
+ <a name="l00266"></a>00266 <span class="comment"> /** The log verbosity. */</span>
288
+ <a name="l00267"></a>00267 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> logLevel;
289
+ <a name="l00268"></a>00268 <span class="comment"></span>
290
+ <a name="l00269"></a>00269 <span class="comment"> /** The maximum number of simultaneously alive application</span>
291
+ <a name="l00270"></a>00270 <span class="comment"> * instances. */</span>
292
+ <a name="l00271"></a>00271 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> maxPoolSize;
293
+ <a name="l00272"></a>00272 <span class="comment"></span>
294
+ <a name="l00273"></a>00273 <span class="comment"> /** Whether the maxPoolSize option was explicitly specified in</span>
295
+ <a name="l00274"></a>00274 <span class="comment"> * this server config. */</span>
296
+ <a name="l00275"></a>00275 <span class="keywordtype">bool</span> maxPoolSizeSpecified;
297
+ <a name="l00276"></a>00276 <span class="comment"></span>
298
+ <a name="l00277"></a>00277 <span class="comment"> /** The maximum number of simultaneously alive Rails application</span>
299
+ <a name="l00278"></a>00278 <span class="comment"> * that a single Rails application may occupy. */</span>
300
+ <a name="l00279"></a>00279 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> maxInstancesPerApp;
301
+ <a name="l00280"></a>00280 <span class="comment"></span>
302
+ <a name="l00281"></a>00281 <span class="comment"> /** Whether the maxInstancesPerApp option was explicitly specified in</span>
303
+ <a name="l00282"></a>00282 <span class="comment"> * this server config. */</span>
304
+ <a name="l00283"></a>00283 <span class="keywordtype">bool</span> maxInstancesPerAppSpecified;
305
+ <a name="l00284"></a>00284 <span class="comment"></span>
306
+ <a name="l00285"></a>00285 <span class="comment"> /** The maximum number of seconds that an application may be</span>
307
+ <a name="l00286"></a>00286 <span class="comment"> * idle before it gets terminated. */</span>
308
+ <a name="l00287"></a>00287 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> poolIdleTime;
309
+ <a name="l00288"></a>00288 <span class="comment"></span>
310
+ <a name="l00289"></a>00289 <span class="comment"> /** Whether the poolIdleTime option was explicitly specified in</span>
311
+ <a name="l00290"></a>00290 <span class="comment"> * this server config. */</span>
312
+ <a name="l00291"></a>00291 <span class="keywordtype">bool</span> poolIdleTimeSpecified;
313
+ <a name="l00292"></a>00292 <span class="comment"></span>
314
+ <a name="l00293"></a>00293 <span class="comment"> /** Whether user switching support is enabled. */</span>
315
+ <a name="l00294"></a>00294 <span class="keywordtype">bool</span> userSwitching;
316
+ <a name="l00295"></a>00295 <span class="comment"></span>
317
+ <a name="l00296"></a>00296 <span class="comment"> /** Whether the userSwitching option was explicitly specified in</span>
318
+ <a name="l00297"></a>00297 <span class="comment"> * this server config. */</span>
319
+ <a name="l00298"></a>00298 <span class="keywordtype">bool</span> userSwitchingSpecified;
320
+ <a name="l00299"></a>00299 <span class="comment"></span>
321
+ <a name="l00300"></a>00300 <span class="comment"> /** The user that applications must run as if user switching</span>
322
+ <a name="l00301"></a>00301 <span class="comment"> * fails or is disabled. NULL means the option is not specified.</span>
323
+ <a name="l00302"></a>00302 <span class="comment"> */</span>
324
+ <a name="l00303"></a>00303 <span class="keyword">const</span> <span class="keywordtype">char</span> *defaultUser;
325
+ <a name="l00304"></a>00304 <span class="comment"></span>
326
+ <a name="l00305"></a>00305 <span class="comment"> /** The temp directory that Passenger should use. NULL</span>
327
+ <a name="l00306"></a>00306 <span class="comment"> * means unspecified.</span>
328
+ <a name="l00307"></a>00307 <span class="comment"> */</span>
329
+ <a name="l00308"></a>00308 <span class="keyword">const</span> <span class="keywordtype">char</span> *tempDir;
330
+ <a name="l00309"></a>00309
331
+ <a name="l00310"></a>00310 <span class="keyword">const</span> <span class="keywordtype">char</span> *getDefaultUser()<span class="keyword"> const </span>{
332
+ <a name="l00311"></a>00311 <span class="keywordflow">if</span> (defaultUser != NULL) {
333
+ <a name="l00312"></a>00312 <span class="keywordflow">return</span> defaultUser;
334
+ <a name="l00313"></a>00313 } <span class="keywordflow">else</span> {
335
+ <a name="l00314"></a>00314 <span class="keywordflow">return</span> <span class="stringliteral">"nobody"</span>;
336
+ <a name="l00315"></a>00315 }
337
+ <a name="l00316"></a>00316 }
338
+ <a name="l00317"></a>00317
339
+ <a name="l00318"></a>00318 <span class="keyword">const</span> <span class="keywordtype">char</span> *getTempDir()<span class="keyword"> const </span>{
340
+ <a name="l00319"></a>00319 <span class="keywordflow">if</span> (tempDir != NULL) {
341
+ <a name="l00320"></a>00320 <span class="keywordflow">return</span> tempDir;
342
+ <a name="l00321"></a>00321 } <span class="keywordflow">else</span> {
343
+ <a name="l00322"></a>00322 <span class="keywordflow">return</span> getSystemTempDir();
344
+ <a name="l00323"></a>00323 }
345
+ <a name="l00324"></a>00324 }
346
+ <a name="l00325"></a>00325 };
347
+ <a name="l00326"></a>00326 }
348
+ <a name="l00327"></a>00327
349
+ <a name="l00328"></a>00328 <span class="keyword">extern</span> <span class="stringliteral">"C"</span> {
350
+ <a name="l00329"></a>00329 <span class="preprocessor">#endif</span>
351
+ <a name="l00330"></a>00330 <span class="preprocessor"></span><span class="comment"></span>
352
+ <a name="l00331"></a>00331 <span class="comment">/** Configuration hook for per-directory configuration structure creation. */</span>
353
+ <a name="l00332"></a>00332 <span class="keywordtype">void</span> *<a class="code" href="group__Configuration.html#g92dc583c1fa5f8025149799e356a6c78" title="Configuration hook for per-directory configuration structure creation.">passenger_config_create_dir</a>(apr_pool_t *p, <span class="keywordtype">char</span> *dirspec);
354
+ <a name="l00333"></a>00333 <span class="comment"></span>
355
+ <a name="l00334"></a>00334 <span class="comment">/** Configuration hook for per-directory configuration structure merging. */</span>
356
+ <a name="l00335"></a>00335 <span class="keywordtype">void</span> *<a class="code" href="group__Configuration.html#g17787a036ef3f4dc46ae0acc9da2c7b0" title="Configuration hook for per-directory configuration structure merging.">passenger_config_merge_dir</a>(apr_pool_t *p, <span class="keywordtype">void</span> *basev, <span class="keywordtype">void</span> *addv);
357
+ <a name="l00336"></a>00336 <span class="comment"></span>
358
+ <a name="l00337"></a>00337 <span class="comment">/** Configuration hook for per-server configuration structure creation. */</span>
359
+ <a name="l00338"></a>00338 <span class="keywordtype">void</span> *<a class="code" href="group__Configuration.html#ga93bd8d426649b4e86da38eb67a49178" title="Configuration hook for per-server configuration structure creation.">passenger_config_create_server</a>(apr_pool_t *p, server_rec *s);
360
+ <a name="l00339"></a>00339 <span class="comment"></span>
361
+ <a name="l00340"></a>00340 <span class="comment">/** Configuration hook for per-server configuration structure merging. */</span>
362
+ <a name="l00341"></a>00341 <span class="keywordtype">void</span> *<a class="code" href="group__Configuration.html#g95c963a61867190928d912779952b15e" title="Configuration hook for per-server configuration structure merging.">passenger_config_merge_server</a>(apr_pool_t *p, <span class="keywordtype">void</span> *basev, <span class="keywordtype">void</span> *overridesv);
358
363
  <a name="l00342"></a>00342
359
- <a name="l00343"></a>00343 <span class="preprocessor">#endif </span><span class="comment">/* _PASSENGER_CONFIGURATION_H_ */</span>
364
+ <a name="l00343"></a>00343 <span class="keywordtype">void</span> passenger_config_merge_all_servers(apr_pool_t *pool, server_rec *main_server);
365
+ <a name="l00344"></a>00344 <span class="comment"></span>
366
+ <a name="l00345"></a>00345 <span class="comment">/** Apache module commands array. */</span>
367
+ <a name="l00346"></a>00346 <span class="keyword">extern</span> <span class="keyword">const</span> command_rec <a class="code" href="group__Configuration.html#g21954abbf4018583acb9d8daef3dfd95" title="Apache module commands array.">passenger_commands</a>[];
368
+ <a name="l00347"></a>00347
369
+ <a name="l00348"></a>00348 <span class="preprocessor">#ifdef __cplusplus</span>
370
+ <a name="l00349"></a>00349 <span class="preprocessor"></span> }
371
+ <a name="l00350"></a>00350 <span class="preprocessor">#endif</span>
372
+ <a name="l00351"></a>00351 <span class="preprocessor"></span><span class="comment"></span>
373
+ <a name="l00352"></a>00352 <span class="comment">/**</span>
374
+ <a name="l00353"></a>00353 <span class="comment"> * @}</span>
375
+ <a name="l00354"></a>00354 <span class="comment"> */</span>
376
+ <a name="l00355"></a>00355
377
+ <a name="l00356"></a>00356 <span class="preprocessor">#endif </span><span class="comment">/* _PASSENGER_CONFIGURATION_H_ */</span>
360
378
  </pre></div></div>
361
- <hr size="1"><address style="text-align: right;"><small>Generated on Tue Mar 31 14:00:27 2009 for Passenger by&nbsp;
379
+ <hr size="1"><address style="text-align: right;"><small>Generated on Thu Apr 16 19:48:18 2009 for Passenger by&nbsp;
362
380
  <a href="http://www.doxygen.org/index.html">
363
- <img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
381
+ <img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
364
382
  </body>
365
383
  </html>