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 +1 @@
1
- <area shape="rect" href="$classPassenger_1_1StandardApplicationPool.html" title="A standard implementation of ApplicationPool for single&#45;process environments." alt="" coords="5,81,237,105">
1
+ <area shape="rect" href="$classPassenger_1_1StandardApplicationPool.html" title="A standard implementation of ApplicationPool for single&#45;process environments." alt="" coords="5,80,251,107">
@@ -1 +1 @@
1
- 6bca4c1eba3f28f05e85d3cd797cf5c4
1
+ 1cf90f56fca0d37b32c4cf4625b36b20
@@ -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: Member List</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>
@@ -23,22 +23,22 @@
23
23
  </div>
24
24
  </div>
25
25
  <div class="contents">
26
- <h1>Passenger::Application::Session Member List</h1>This is the complete list of members for <a class="el" href="classPassenger_1_1Application_1_1Session.html">Passenger::Application::Session</a>, including all inherited members.<p><table>
27
- <tr class="memlist"><td><a class="el" href="classPassenger_1_1Application_1_1Session.html#ddfeda914b17749a70016f5eb384f8a9">closeStream</a>()=0</td><td><a class="el" href="classPassenger_1_1Application_1_1Session.html">Passenger::Application::Session</a></td><td><code> [pure virtual]</code></td></tr>
28
- <tr class="memlist"><td><a class="el" href="classPassenger_1_1Application_1_1Session.html#7f9ad70e75d21130d914d2134061c757">discardStream</a>()=0</td><td><a class="el" href="classPassenger_1_1Application_1_1Session.html">Passenger::Application::Session</a></td><td><code> [pure virtual]</code></td></tr>
29
- <tr class="memlist"><td><a class="el" href="classPassenger_1_1Application_1_1Session.html#2215bec32917c48d1a9f6386b88d018b">getPid</a>() const =0</td><td><a class="el" href="classPassenger_1_1Application_1_1Session.html">Passenger::Application::Session</a></td><td><code> [pure virtual]</code></td></tr>
30
- <tr class="memlist"><td><a class="el" href="classPassenger_1_1Application_1_1Session.html#2631b6d6b4927ec66b1f620df15d8c6e">getStream</a>() const =0</td><td><a class="el" href="classPassenger_1_1Application_1_1Session.html">Passenger::Application::Session</a></td><td><code> [pure virtual]</code></td></tr>
31
- <tr class="memlist"><td><a class="el" href="classPassenger_1_1Application_1_1Session.html#2091e4b60dcbe42ab80fa387610fd669">sendBodyBlock</a>(const char *block, unsigned int size)</td><td><a class="el" href="classPassenger_1_1Application_1_1Session.html">Passenger::Application::Session</a></td><td><code> [inline, virtual]</code></td></tr>
32
- <tr class="memlist"><td><a class="el" href="classPassenger_1_1Application_1_1Session.html#78a4c93fd80f6d913f092c488ea4d360">sendHeaders</a>(const char *headers, unsigned int size)</td><td><a class="el" href="classPassenger_1_1Application_1_1Session.html">Passenger::Application::Session</a></td><td><code> [inline, virtual]</code></td></tr>
33
- <tr class="memlist"><td><a class="el" href="classPassenger_1_1Application_1_1Session.html#4fee03667f626d68c565495bcb19771a">sendHeaders</a>(const string &amp;headers)</td><td><a class="el" href="classPassenger_1_1Application_1_1Session.html">Passenger::Application::Session</a></td><td><code> [inline, virtual]</code></td></tr>
34
- <tr class="memlist"><td><a class="el" href="classPassenger_1_1Application_1_1Session.html#17b4b6e4c47ec8941a099e229d2944f2">setReaderTimeout</a>(unsigned int msec)=0</td><td><a class="el" href="classPassenger_1_1Application_1_1Session.html">Passenger::Application::Session</a></td><td><code> [pure virtual]</code></td></tr>
35
- <tr class="memlist"><td><a class="el" href="classPassenger_1_1Application_1_1Session.html#4236abbdf69e10ded00c756de24433e9">setWriterTimeout</a>(unsigned int msec)=0</td><td><a class="el" href="classPassenger_1_1Application_1_1Session.html">Passenger::Application::Session</a></td><td><code> [pure virtual]</code></td></tr>
36
- <tr class="memlist"><td><a class="el" href="classPassenger_1_1Application_1_1Session.html#45ad442dc1f4e7b73782bb3395d9e97d">shutdownReader</a>()=0</td><td><a class="el" href="classPassenger_1_1Application_1_1Session.html">Passenger::Application::Session</a></td><td><code> [pure virtual]</code></td></tr>
37
- <tr class="memlist"><td><a class="el" href="classPassenger_1_1Application_1_1Session.html#dff449398adb872c93a9572ae4b701fb">shutdownWriter</a>()=0</td><td><a class="el" href="classPassenger_1_1Application_1_1Session.html">Passenger::Application::Session</a></td><td><code> [pure virtual]</code></td></tr>
38
- <tr class="memlist"><td><a class="el" href="classPassenger_1_1Application_1_1Session.html#4fcaf0670234f7fb2ea6de4b8d8ef38c">~Session</a>()</td><td><a class="el" href="classPassenger_1_1Application_1_1Session.html">Passenger::Application::Session</a></td><td><code> [inline, virtual]</code></td></tr>
26
+ <h1>Passenger::Application::Application::Session Member List</h1>This is the complete list of members for <a class="el" href="classPassenger_1_1Application_1_1Session.html">Passenger::Application::Application::Session</a>, including all inherited members.<p><table>
27
+ <tr class="memlist"><td><a class="el" href="classPassenger_1_1Application_1_1Session.html#bc463c55e17fe5784f351ac699f20ce4">closeStream</a>()=0</td><td><a class="el" href="classPassenger_1_1Application_1_1Session.html">Passenger::Application::Application::Session</a></td><td><code> [pure virtual]</code></td></tr>
28
+ <tr class="memlist"><td><a class="el" href="classPassenger_1_1Application_1_1Session.html#f092d4757e2d460c6f6f979473c1c4ba">discardStream</a>()=0</td><td><a class="el" href="classPassenger_1_1Application_1_1Session.html">Passenger::Application::Application::Session</a></td><td><code> [pure virtual]</code></td></tr>
29
+ <tr class="memlist"><td><a class="el" href="classPassenger_1_1Application_1_1Session.html#19cdd7428efcff759bae674fafe2dc5b">getPid</a>() const =0</td><td><a class="el" href="classPassenger_1_1Application_1_1Session.html">Passenger::Application::Application::Session</a></td><td><code> [pure virtual]</code></td></tr>
30
+ <tr class="memlist"><td><a class="el" href="classPassenger_1_1Application_1_1Session.html#fc8050e44db34aee17bc79520ba3c7dd">getStream</a>() const =0</td><td><a class="el" href="classPassenger_1_1Application_1_1Session.html">Passenger::Application::Application::Session</a></td><td><code> [pure virtual]</code></td></tr>
31
+ <tr class="memlist"><td><a class="el" href="classPassenger_1_1Application_1_1Session.html#012b2ee56c8b514f800c1ce3cee8c11b">sendBodyBlock</a>(const char *block, unsigned int size)</td><td><a class="el" href="classPassenger_1_1Application_1_1Session.html">Passenger::Application::Application::Session</a></td><td><code> [inline, virtual]</code></td></tr>
32
+ <tr class="memlist"><td><a class="el" href="classPassenger_1_1Application_1_1Session.html#fc3ecd1067d5bdb0e514c366de7bdcc9">sendHeaders</a>(const char *headers, unsigned int size)</td><td><a class="el" href="classPassenger_1_1Application_1_1Session.html">Passenger::Application::Application::Session</a></td><td><code> [inline, virtual]</code></td></tr>
33
+ <tr class="memlist"><td><a class="el" href="classPassenger_1_1Application_1_1Session.html#5ad6f1c3bca11a1083d53e2aff9f81d9">sendHeaders</a>(const string &amp;headers)</td><td><a class="el" href="classPassenger_1_1Application_1_1Session.html">Passenger::Application::Application::Session</a></td><td><code> [inline, virtual]</code></td></tr>
34
+ <tr class="memlist"><td><a class="el" href="classPassenger_1_1Application_1_1Session.html#b4487fdd198a3a2e2bde74e5d3c2396e">setReaderTimeout</a>(unsigned int msec)=0</td><td><a class="el" href="classPassenger_1_1Application_1_1Session.html">Passenger::Application::Application::Session</a></td><td><code> [pure virtual]</code></td></tr>
35
+ <tr class="memlist"><td><a class="el" href="classPassenger_1_1Application_1_1Session.html#e279c219606fd20048bde44a150c5b17">setWriterTimeout</a>(unsigned int msec)=0</td><td><a class="el" href="classPassenger_1_1Application_1_1Session.html">Passenger::Application::Application::Session</a></td><td><code> [pure virtual]</code></td></tr>
36
+ <tr class="memlist"><td><a class="el" href="classPassenger_1_1Application_1_1Session.html#95ea71f3a7e2cb1d66681285371cbabe">shutdownReader</a>()=0</td><td><a class="el" href="classPassenger_1_1Application_1_1Session.html">Passenger::Application::Application::Session</a></td><td><code> [pure virtual]</code></td></tr>
37
+ <tr class="memlist"><td><a class="el" href="classPassenger_1_1Application_1_1Session.html#bfb2a4f08a0fa24a97e75c9a96205bba">shutdownWriter</a>()=0</td><td><a class="el" href="classPassenger_1_1Application_1_1Session.html">Passenger::Application::Application::Session</a></td><td><code> [pure virtual]</code></td></tr>
38
+ <tr class="memlist"><td><a class="el" href="classPassenger_1_1Application_1_1Session.html#a1659ee23386eec51cf1d297897e8e9f">~Session</a>()</td><td><a class="el" href="classPassenger_1_1Application_1_1Session.html">Passenger::Application::Application::Session</a></td><td><code> [inline, virtual]</code></td></tr>
39
39
  </table></div>
40
- <hr size="1"><address style="text-align: right;"><small>Generated on Tue Mar 31 14:00:30 2009 for Passenger by&nbsp;
40
+ <hr size="1"><address style="text-align: right;"><small>Generated on Wed Apr 8 22:35:12 2009 for Passenger by&nbsp;
41
41
  <a href="http://www.doxygen.org/index.html">
42
- <img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
42
+ <img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
43
43
  </body>
44
44
  </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
- <title>Passenger: Passenger::Application::Session Class Reference</title>
4
- <link href="doxygen.css" rel="stylesheet" type="text/css">
3
+ <title>Passenger: Passenger::Application::Application::Session Class Reference</title>
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>
@@ -25,159 +25,123 @@
25
25
  </div>
26
26
  </div>
27
27
  <div class="contents">
28
- <h1>Passenger::Application::Session Class Reference</h1><!-- doxytag: class="Passenger::Application::Session" --><code>#include &lt;<a class="el" href="Application_8h-source.html">Application.h</a>&gt;</code>
28
+ <h1>Passenger::Application::Application::Session Class Reference</h1><!-- doxytag: class="Passenger::Application::Session" -->Represents the life time of a single request/response pair of a Ruby on Rails or Rack application.
29
+ <a href="#_details">More...</a>
29
30
  <p>
30
- Inherited by Passenger::Application::StandardSession, and Passenger::ApplicationPoolServer::RemoteSession.
31
+ <code>#include &lt;<a class="el" href="Application_8h-source.html">Application.h</a>&gt;</code>
31
32
  <p>
32
-
33
- <p>
34
- <a href="classPassenger_1_1Application_1_1Session-members.html">List of all members.</a><hr><a name="_details"></a><h2>Detailed Description</h2>
35
- Represents the life time of a single request/response pair of a Ruby on Rails or Rack application.
33
+ Inherited by Passenger::Application::Application::StandardSession, and Passenger::ApplicationPoolServer::ApplicationPoolServer::RemoteSession.
36
34
  <p>
37
- <a class="el" href="classPassenger_1_1Application_1_1Session.html" title="Represents the life time of a single request/response pair of a Ruby on Rails or...">Session</a> is used to forward a single HTTP request to a Ruby on Rails/Rack application. A <a class="el" href="classPassenger_1_1Application_1_1Session.html" title="Represents the life time of a single request/response pair of a Ruby on Rails or...">Session</a> has two communication channels: one for reading data from the application, and one for writing data to the application.<p>
38
- In general, a session object is to be used in the following manner:<p>
39
- <ol type=1>
40
- <li>Convert the HTTP request headers into a string, as expected by <a class="el" href="classPassenger_1_1Application_1_1Session.html#78a4c93fd80f6d913f092c488ea4d360" title="Send HTTP request headers to the application.">sendHeaders()</a>. Then send that string by calling <a class="el" href="classPassenger_1_1Application_1_1Session.html#78a4c93fd80f6d913f092c488ea4d360" title="Send HTTP request headers to the application.">sendHeaders()</a>.</li><li>In case of a POST of PUT request, send the HTTP request body by calling <a class="el" href="classPassenger_1_1Application_1_1Session.html#2091e4b60dcbe42ab80fa387610fd669" title="Send a chunk of HTTP request body data to the application.">sendBodyBlock()</a>, possibly multiple times.</li><li>Shutdown the writer channel since you're now done sending data.</li><li>The HTTP response can now be read through the reader channel (<a class="el" href="classPassenger_1_1Application_1_1Session.html#2631b6d6b4927ec66b1f620df15d8c6e" title="Get the I/O stream&#39;s file descriptor.">getStream()</a>).</li><li>When the HTTP response has been read, the session must be closed. This is done by destroying the <a class="el" href="classPassenger_1_1Application_1_1Session.html" title="Represents the life time of a single request/response pair of a Ruby on Rails or...">Session</a> object.</li></ol>
35
+
41
36
  <p>
42
- A usage example is shown in <a class="el" href="classPassenger_1_1Application.html#34636f796ff3924ad5ec142aaa581379" title="Connect to this application instance with the purpose of sending a request to the...">Application::connect()</a>. <table border="0" cellpadding="0" cellspacing="0">
37
+ <a href="classPassenger_1_1Application_1_1Session-members.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
43
38
  <tr><td></td></tr>
44
39
  <tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
45
- <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4fcaf0670234f7fb2ea6de4b8d8ef38c"></a><!-- doxytag: member="Passenger::Application::Session::~Session" ref="4fcaf0670234f7fb2ea6de4b8d8ef38c" args="()" -->
46
- virtual&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1Application_1_1Session.html#4fcaf0670234f7fb2ea6de4b8d8ef38c">~Session</a> ()</td></tr>
40
+ <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a1659ee23386eec51cf1d297897e8e9f"></a><!-- doxytag: member="Passenger::Application::Session::~Session" ref="a1659ee23386eec51cf1d297897e8e9f" args="()" -->
41
+ virtual&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1Application_1_1Session.html#a1659ee23386eec51cf1d297897e8e9f">~Session</a> ()</td></tr>
47
42
 
48
43
  <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Implementing classes might throw arbitrary exceptions. <br></td></tr>
49
- <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1Application_1_1Session.html#78a4c93fd80f6d913f092c488ea4d360">sendHeaders</a> (const char *headers, unsigned int size)</td></tr>
44
+ <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1Application_1_1Session.html#fc3ecd1067d5bdb0e514c366de7bdcc9">sendHeaders</a> (const char *headers, unsigned int size)</td></tr>
50
45
 
51
- <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Send HTTP request headers to the application. <a href="#78a4c93fd80f6d913f092c488ea4d360"></a><br></td></tr>
52
- <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1Application_1_1Session.html#4fee03667f626d68c565495bcb19771a">sendHeaders</a> (const string &amp;headers)</td></tr>
46
+ <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Send HTTP request headers to the application. <a href="#fc3ecd1067d5bdb0e514c366de7bdcc9"></a><br></td></tr>
47
+ <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1Application_1_1Session.html#5ad6f1c3bca11a1083d53e2aff9f81d9">sendHeaders</a> (const string &amp;headers)</td></tr>
53
48
 
54
- <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Convenience shortcut for <a class="el" href="classPassenger_1_1Application_1_1Session.html#78a4c93fd80f6d913f092c488ea4d360" title="Send HTTP request headers to the application.">sendHeaders(const char *, unsigned int)</a>. <a href="#4fee03667f626d68c565495bcb19771a"></a><br></td></tr>
55
- <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1Application_1_1Session.html#2091e4b60dcbe42ab80fa387610fd669">sendBodyBlock</a> (const char *block, unsigned int size)</td></tr>
49
+ <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Convenience shortcut for <a class="el" href="classPassenger_1_1Application_1_1Session.html#fc3ecd1067d5bdb0e514c366de7bdcc9" title="Send HTTP request headers to the application.">sendHeaders(const char *, unsigned int)</a>. <a href="#5ad6f1c3bca11a1083d53e2aff9f81d9"></a><br></td></tr>
50
+ <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1Application_1_1Session.html#012b2ee56c8b514f800c1ce3cee8c11b">sendBodyBlock</a> (const char *block, unsigned int size)</td></tr>
56
51
 
57
- <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Send a chunk of HTTP request body data to the application. <a href="#2091e4b60dcbe42ab80fa387610fd669"></a><br></td></tr>
58
- <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1Application_1_1Session.html#2631b6d6b4927ec66b1f620df15d8c6e">getStream</a> () const =0</td></tr>
52
+ <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Send a chunk of HTTP request body data to the application. <a href="#012b2ee56c8b514f800c1ce3cee8c11b"></a><br></td></tr>
53
+ <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1Application_1_1Session.html#fc8050e44db34aee17bc79520ba3c7dd">getStream</a> () const =0</td></tr>
59
54
 
60
- <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get the I/O stream's file descriptor. <a href="#2631b6d6b4927ec66b1f620df15d8c6e"></a><br></td></tr>
61
- <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1Application_1_1Session.html#17b4b6e4c47ec8941a099e229d2944f2">setReaderTimeout</a> (unsigned int msec)=0</td></tr>
55
+ <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get the I/O stream's file descriptor. <a href="#fc8050e44db34aee17bc79520ba3c7dd"></a><br></td></tr>
56
+ <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1Application_1_1Session.html#b4487fdd198a3a2e2bde74e5d3c2396e">setReaderTimeout</a> (unsigned int msec)=0</td></tr>
62
57
 
63
- <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set the timeout value for reading data from the I/O stream. <a href="#17b4b6e4c47ec8941a099e229d2944f2"></a><br></td></tr>
64
- <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1Application_1_1Session.html#4236abbdf69e10ded00c756de24433e9">setWriterTimeout</a> (unsigned int msec)=0</td></tr>
58
+ <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set the timeout value for reading data from the I/O stream. <a href="#b4487fdd198a3a2e2bde74e5d3c2396e"></a><br></td></tr>
59
+ <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1Application_1_1Session.html#e279c219606fd20048bde44a150c5b17">setWriterTimeout</a> (unsigned int msec)=0</td></tr>
65
60
 
66
- <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set the timeout value for writing data from the I/O stream. <a href="#4236abbdf69e10ded00c756de24433e9"></a><br></td></tr>
67
- <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1Application_1_1Session.html#45ad442dc1f4e7b73782bb3395d9e97d">shutdownReader</a> ()=0</td></tr>
61
+ <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set the timeout value for writing data from the I/O stream. <a href="#e279c219606fd20048bde44a150c5b17"></a><br></td></tr>
62
+ <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1Application_1_1Session.html#95ea71f3a7e2cb1d66681285371cbabe">shutdownReader</a> ()=0</td></tr>
68
63
 
69
- <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Indicate that we don't want to read data anymore from the I/O stream. <a href="#45ad442dc1f4e7b73782bb3395d9e97d"></a><br></td></tr>
70
- <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1Application_1_1Session.html#dff449398adb872c93a9572ae4b701fb">shutdownWriter</a> ()=0</td></tr>
64
+ <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Indicate that we don't want to read data anymore from the I/O stream. <a href="#95ea71f3a7e2cb1d66681285371cbabe"></a><br></td></tr>
65
+ <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1Application_1_1Session.html#bfb2a4f08a0fa24a97e75c9a96205bba">shutdownWriter</a> ()=0</td></tr>
71
66
 
72
- <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Indicate that we don't want to write data anymore to the I/O stream. <a href="#dff449398adb872c93a9572ae4b701fb"></a><br></td></tr>
73
- <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1Application_1_1Session.html#ddfeda914b17749a70016f5eb384f8a9">closeStream</a> ()=0</td></tr>
67
+ <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Indicate that we don't want to write data anymore to the I/O stream. <a href="#bfb2a4f08a0fa24a97e75c9a96205bba"></a><br></td></tr>
68
+ <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1Application_1_1Session.html#bc463c55e17fe5784f351ac699f20ce4">closeStream</a> ()=0</td></tr>
74
69
 
75
- <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Close the I/O stream. <a href="#ddfeda914b17749a70016f5eb384f8a9"></a><br></td></tr>
76
- <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="7f9ad70e75d21130d914d2134061c757"></a><!-- doxytag: member="Passenger::Application::Session::discardStream" ref="7f9ad70e75d21130d914d2134061c757" args="()=0" -->
77
- virtual void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1Application_1_1Session.html#7f9ad70e75d21130d914d2134061c757">discardStream</a> ()=0</td></tr>
70
+ <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Close the I/O stream. <a href="#bc463c55e17fe5784f351ac699f20ce4"></a><br></td></tr>
71
+ <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f092d4757e2d460c6f6f979473c1c4ba"></a><!-- doxytag: member="Passenger::Application::Session::discardStream" ref="f092d4757e2d460c6f6f979473c1c4ba" args="()=0" -->
72
+ virtual void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1Application_1_1Session.html#f092d4757e2d460c6f6f979473c1c4ba">discardStream</a> ()=0</td></tr>
78
73
 
79
74
  <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Discard the I/O stream's file descriptor, so that <a class="el" href="classPassenger_1_1Application_1_1Session.html" title="Represents the life time of a single request/response pair of a Ruby on Rails or...">Session</a> won't automatically closed it upon Session's destruction. <br></td></tr>
80
- <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="2215bec32917c48d1a9f6386b88d018b"></a><!-- doxytag: member="Passenger::Application::Session::getPid" ref="2215bec32917c48d1a9f6386b88d018b" args="() const =0" -->
81
- virtual pid_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1Application_1_1Session.html#2215bec32917c48d1a9f6386b88d018b">getPid</a> () const =0</td></tr>
75
+ <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="19cdd7428efcff759bae674fafe2dc5b"></a><!-- doxytag: member="Passenger::Application::Session::getPid" ref="19cdd7428efcff759bae674fafe2dc5b" args="() const =0" -->
76
+ virtual pid_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1Application_1_1Session.html#19cdd7428efcff759bae674fafe2dc5b">getPid</a> () const =0</td></tr>
82
77
 
83
78
  <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get the process ID of the application instance that belongs to this session. <br></td></tr>
84
79
  </table>
85
- <hr><h2>Member Function Documentation</h2>
86
- <a class="anchor" name="78a4c93fd80f6d913f092c488ea4d360"></a><!-- doxytag: member="Passenger::Application::Session::sendHeaders" ref="78a4c93fd80f6d913f092c488ea4d360" args="(const char *headers, unsigned int size)" -->
80
+ <hr><a name="_details"></a><h2>Detailed Description</h2>
81
+ Represents the life time of a single request/response pair of a Ruby on Rails or Rack application.
82
+ <p>
83
+ <a class="el" href="classPassenger_1_1Application_1_1Session.html" title="Represents the life time of a single request/response pair of a Ruby on Rails or...">Session</a> is used to forward a single HTTP request to a Ruby on Rails/Rack application. A <a class="el" href="classPassenger_1_1Application_1_1Session.html" title="Represents the life time of a single request/response pair of a Ruby on Rails or...">Session</a> has two communication channels: one for reading data from the application, and one for writing data to the application.<p>
84
+ In general, a session object is to be used in the following manner:<p>
85
+ <ol type=1>
86
+ <li>Convert the HTTP request headers into a string, as expected by <a class="el" href="classPassenger_1_1Application_1_1Session.html#fc3ecd1067d5bdb0e514c366de7bdcc9" title="Send HTTP request headers to the application.">sendHeaders()</a>. Then send that string by calling <a class="el" href="classPassenger_1_1Application_1_1Session.html#fc3ecd1067d5bdb0e514c366de7bdcc9" title="Send HTTP request headers to the application.">sendHeaders()</a>.</li><li>In case of a POST of PUT request, send the HTTP request body by calling <a class="el" href="classPassenger_1_1Application_1_1Session.html#012b2ee56c8b514f800c1ce3cee8c11b" title="Send a chunk of HTTP request body data to the application.">sendBodyBlock()</a>, possibly multiple times.</li><li>Shutdown the writer channel since you're now done sending data.</li><li>The HTTP response can now be read through the reader channel (<a class="el" href="classPassenger_1_1Application_1_1Session.html#fc8050e44db34aee17bc79520ba3c7dd" title="Get the I/O stream&#39;s file descriptor.">getStream()</a>).</li><li>When the HTTP response has been read, the session must be closed. This is done by destroying the <a class="el" href="classPassenger_1_1Application_1_1Session.html" title="Represents the life time of a single request/response pair of a Ruby on Rails or...">Session</a> object.</li></ol>
87
+ <p>
88
+ A usage example is shown in <a class="el" href="classPassenger_1_1Application.html#34636f796ff3924ad5ec142aaa581379" title="Connect to this application instance with the purpose of sending a request to the...">Application::connect()</a>. <hr><h2>Member Function Documentation</h2>
89
+ <a class="anchor" name="bc463c55e17fe5784f351ac699f20ce4"></a><!-- doxytag: member="Passenger::Application::Session::closeStream" ref="bc463c55e17fe5784f351ac699f20ce4" args="()=0" -->
87
90
  <div class="memitem">
88
91
  <div class="memproto">
89
92
  <table class="memname">
90
93
  <tr>
91
- <td class="memname">virtual void Passenger::Application::Session::sendHeaders </td>
94
+ <td class="memname">virtual void Passenger::Application::Application::Session::closeStream </td>
92
95
  <td>(</td>
93
- <td class="paramtype">const char *&nbsp;</td>
94
- <td class="paramname"> <em>headers</em>, </td>
95
- </tr>
96
- <tr>
97
- <td class="paramkey"></td>
98
- <td></td>
99
- <td class="paramtype">unsigned int&nbsp;</td>
100
- <td class="paramname"> <em>size</em></td><td>&nbsp;</td>
101
- </tr>
102
- <tr>
103
- <td></td>
104
- <td>)</td>
105
- <td></td><td></td><td width="100%"><code> [inline, virtual]</code></td>
96
+ <td class="paramname"> </td>
97
+ <td>&nbsp;)&nbsp;</td>
98
+ <td><code> [pure virtual]</code></td>
106
99
  </tr>
107
100
  </table>
108
101
  </div>
109
102
  <div class="memdoc">
110
103
 
111
104
  <p>
112
- Send HTTP request headers to the application.
105
+ Close the I/O stream.
113
106
  <p>
114
- The HTTP headers must be converted into CGI headers, and then encoded into a string that matches this grammar:<p>
115
- <div class="fragment"><pre class="fragment">
116
- headers ::= header*
117
- header ::= name NUL value NUL
118
- name ::= notnull+
119
- value ::= notnull+
120
- notnull ::= "\x01" | "\x02" | "\x02" | ... | "\xFF"
121
- NUL = "\x00"
122
- </pre></div><p>
123
- This method should be the first one to be called during the lifetime of a <a class="el" href="classPassenger_1_1Application_1_1Session.html" title="Represents the life time of a single request/response pair of a Ruby on Rails or...">Session</a> object. Otherwise strange things may happen.<p>
124
- <dl compact><dt><b>Parameters:</b></dt><dd>
125
- <table border="0" cellspacing="2" cellpadding="0">
126
- <tr><td valign="top"></td><td valign="top"><em>headers</em>&nbsp;</td><td>The HTTP request headers, converted into CGI headers and encoded as a string, according to the description. </td></tr>
127
- <tr><td valign="top"></td><td valign="top"><em>size</em>&nbsp;</td><td>The size, in bytes, of <code>headers</code>. </td></tr>
128
- </table>
129
- </dl>
130
- <dl class="pre" compact><dt><b>Precondition:</b></dt><dd>headers != NULL </dd></dl>
131
107
  <dl compact><dt><b>Exceptions:</b></dt><dd>
132
108
  <table border="0" cellspacing="2" cellpadding="0">
133
- <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classPassenger_1_1IOException.html" title="Represents an error that occured during an I/O operation.">IOException</a></em>&nbsp;</td><td>The writer channel has already been closed. </td></tr>
134
- <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classPassenger_1_1SystemException.html" title="Represents an error returned by a system call or a standard library call.">SystemException</a></em>&nbsp;</td><td>Something went wrong during writing. </td></tr>
109
+ <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classPassenger_1_1SystemException.html" title="Represents an error returned by a system call or a standard library call.">SystemException</a></em>&nbsp;</td><td>Something went wrong. </td></tr>
135
110
  <tr><td valign="top"></td><td valign="top"><em>boost::thread_interrupted</em>&nbsp;</td><td></td></tr>
136
111
  </table>
137
112
  </dl>
138
113
 
139
114
  </div>
140
115
  </div><p>
141
- <a class="anchor" name="4fee03667f626d68c565495bcb19771a"></a><!-- doxytag: member="Passenger::Application::Session::sendHeaders" ref="4fee03667f626d68c565495bcb19771a" args="(const string &amp;headers)" -->
116
+ <a class="anchor" name="fc8050e44db34aee17bc79520ba3c7dd"></a><!-- doxytag: member="Passenger::Application::Session::getStream" ref="fc8050e44db34aee17bc79520ba3c7dd" args="() const =0" -->
142
117
  <div class="memitem">
143
118
  <div class="memproto">
144
119
  <table class="memname">
145
120
  <tr>
146
- <td class="memname">virtual void Passenger::Application::Session::sendHeaders </td>
121
+ <td class="memname">virtual int Passenger::Application::Application::Session::getStream </td>
147
122
  <td>(</td>
148
- <td class="paramtype">const string &amp;&nbsp;</td>
149
- <td class="paramname"> <em>headers</em> </td>
123
+ <td class="paramname"> </td>
150
124
  <td>&nbsp;)&nbsp;</td>
151
- <td width="100%"><code> [inline, virtual]</code></td>
125
+ <td> const<code> [pure virtual]</code></td>
152
126
  </tr>
153
127
  </table>
154
128
  </div>
155
129
  <div class="memdoc">
156
130
 
157
131
  <p>
158
- Convenience shortcut for <a class="el" href="classPassenger_1_1Application_1_1Session.html#78a4c93fd80f6d913f092c488ea4d360" title="Send HTTP request headers to the application.">sendHeaders(const char *, unsigned int)</a>.
132
+ Get the I/O stream's file descriptor.
159
133
  <p>
160
- <dl compact><dt><b>Parameters:</b></dt><dd>
161
- <table border="0" cellspacing="2" cellpadding="0">
162
- <tr><td valign="top"></td><td valign="top"><em>headers</em>&nbsp;</td><td></td></tr>
163
- </table>
164
- </dl>
165
- <dl compact><dt><b>Exceptions:</b></dt><dd>
166
- <table border="0" cellspacing="2" cellpadding="0">
167
- <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classPassenger_1_1IOException.html" title="Represents an error that occured during an I/O operation.">IOException</a></em>&nbsp;</td><td>The writer channel has already been closed. </td></tr>
168
- <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classPassenger_1_1SystemException.html" title="Represents an error returned by a system call or a standard library call.">SystemException</a></em>&nbsp;</td><td>Something went wrong during writing. </td></tr>
169
- <tr><td valign="top"></td><td valign="top"><em>boost::thread_interrupted</em>&nbsp;</td><td></td></tr>
170
- </table>
171
- </dl>
134
+ This steam is full-duplex, and will be automatically closed upon Session's destruction, unless <a class="el" href="classPassenger_1_1Application_1_1Session.html#f092d4757e2d460c6f6f979473c1c4ba" title="Discard the I/O stream&#39;s file descriptor, so that Session won&#39;t automatically...">discardStream()</a> is called.<p>
135
+ <dl class="pre" compact><dt><b>Precondition:</b></dt><dd>The stream has not been fully closed. </dd></dl>
172
136
 
173
137
  </div>
174
138
  </div><p>
175
- <a class="anchor" name="2091e4b60dcbe42ab80fa387610fd669"></a><!-- doxytag: member="Passenger::Application::Session::sendBodyBlock" ref="2091e4b60dcbe42ab80fa387610fd669" args="(const char *block, unsigned int size)" -->
139
+ <a class="anchor" name="012b2ee56c8b514f800c1ce3cee8c11b"></a><!-- doxytag: member="Passenger::Application::Session::sendBodyBlock" ref="012b2ee56c8b514f800c1ce3cee8c11b" args="(const char *block, unsigned int size)" -->
176
140
  <div class="memitem">
177
141
  <div class="memproto">
178
142
  <table class="memname">
179
143
  <tr>
180
- <td class="memname">virtual void Passenger::Application::Session::sendBodyBlock </td>
144
+ <td class="memname">virtual void Passenger::Application::Application::Session::sendBodyBlock </td>
181
145
  <td>(</td>
182
146
  <td class="paramtype">const char *&nbsp;</td>
183
147
  <td class="paramname"> <em>block</em>, </td>
@@ -191,7 +155,7 @@ Convenience shortcut for <a class="el" href="classPassenger_1_1Application_1_1Se
191
155
  <tr>
192
156
  <td></td>
193
157
  <td>)</td>
194
- <td></td><td></td><td width="100%"><code> [inline, virtual]</code></td>
158
+ <td></td><td></td><td><code> [inline, virtual]</code></td>
195
159
  </tr>
196
160
  </table>
197
161
  </div>
@@ -201,7 +165,7 @@ Convenience shortcut for <a class="el" href="classPassenger_1_1Application_1_1Se
201
165
  Send a chunk of HTTP request body data to the application.
202
166
  <p>
203
167
  You can call this method as many times as is required to transfer the entire HTTP request body.<p>
204
- This method should only be called after a <a class="el" href="classPassenger_1_1Application_1_1Session.html#78a4c93fd80f6d913f092c488ea4d360" title="Send HTTP request headers to the application.">sendHeaders()</a>. Otherwise strange things may happen.<p>
168
+ This method should only be called after a <a class="el" href="classPassenger_1_1Application_1_1Session.html#fc3ecd1067d5bdb0e514c366de7bdcc9" title="Send HTTP request headers to the application.">sendHeaders()</a>. Otherwise strange things may happen.<p>
205
169
  <dl compact><dt><b>Parameters:</b></dt><dd>
206
170
  <table border="0" cellspacing="2" cellpadding="0">
207
171
  <tr><td valign="top"></td><td valign="top"><em>block</em>&nbsp;</td><td>A block of HTTP request body data to send. </td></tr>
@@ -218,82 +182,115 @@ This method should only be called after a <a class="el" href="classPassenger_1_1
218
182
 
219
183
  </div>
220
184
  </div><p>
221
- <a class="anchor" name="2631b6d6b4927ec66b1f620df15d8c6e"></a><!-- doxytag: member="Passenger::Application::Session::getStream" ref="2631b6d6b4927ec66b1f620df15d8c6e" args="() const =0" -->
185
+ <a class="anchor" name="5ad6f1c3bca11a1083d53e2aff9f81d9"></a><!-- doxytag: member="Passenger::Application::Session::sendHeaders" ref="5ad6f1c3bca11a1083d53e2aff9f81d9" args="(const string &amp;headers)" -->
222
186
  <div class="memitem">
223
187
  <div class="memproto">
224
188
  <table class="memname">
225
189
  <tr>
226
- <td class="memname">virtual int Passenger::Application::Session::getStream </td>
190
+ <td class="memname">virtual void Passenger::Application::Application::Session::sendHeaders </td>
227
191
  <td>(</td>
228
- <td class="paramname"> </td>
192
+ <td class="paramtype">const string &amp;&nbsp;</td>
193
+ <td class="paramname"> <em>headers</em> </td>
229
194
  <td>&nbsp;)&nbsp;</td>
230
- <td width="100%"> const<code> [pure virtual]</code></td>
195
+ <td><code> [inline, virtual]</code></td>
231
196
  </tr>
232
197
  </table>
233
198
  </div>
234
199
  <div class="memdoc">
235
200
 
236
201
  <p>
237
- Get the I/O stream's file descriptor.
202
+ Convenience shortcut for <a class="el" href="classPassenger_1_1Application_1_1Session.html#fc3ecd1067d5bdb0e514c366de7bdcc9" title="Send HTTP request headers to the application.">sendHeaders(const char *, unsigned int)</a>.
238
203
  <p>
239
- This steam is full-duplex, and will be automatically closed upon Session's destruction, unless <a class="el" href="classPassenger_1_1Application_1_1Session.html#7f9ad70e75d21130d914d2134061c757" title="Discard the I/O stream&#39;s file descriptor, so that Session won&#39;t automatically...">discardStream()</a> is called.<p>
240
- <dl class="pre" compact><dt><b>Precondition:</b></dt><dd>The stream has not been fully closed. </dd></dl>
204
+ <dl compact><dt><b>Parameters:</b></dt><dd>
205
+ <table border="0" cellspacing="2" cellpadding="0">
206
+ <tr><td valign="top"></td><td valign="top"><em>headers</em>&nbsp;</td><td></td></tr>
207
+ </table>
208
+ </dl>
209
+ <dl compact><dt><b>Exceptions:</b></dt><dd>
210
+ <table border="0" cellspacing="2" cellpadding="0">
211
+ <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classPassenger_1_1IOException.html" title="Represents an error that occured during an I/O operation.">IOException</a></em>&nbsp;</td><td>The writer channel has already been closed. </td></tr>
212
+ <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classPassenger_1_1SystemException.html" title="Represents an error returned by a system call or a standard library call.">SystemException</a></em>&nbsp;</td><td>Something went wrong during writing. </td></tr>
213
+ <tr><td valign="top"></td><td valign="top"><em>boost::thread_interrupted</em>&nbsp;</td><td></td></tr>
214
+ </table>
215
+ </dl>
241
216
 
242
217
  </div>
243
218
  </div><p>
244
- <a class="anchor" name="17b4b6e4c47ec8941a099e229d2944f2"></a><!-- doxytag: member="Passenger::Application::Session::setReaderTimeout" ref="17b4b6e4c47ec8941a099e229d2944f2" args="(unsigned int msec)=0" -->
219
+ <a class="anchor" name="fc3ecd1067d5bdb0e514c366de7bdcc9"></a><!-- doxytag: member="Passenger::Application::Session::sendHeaders" ref="fc3ecd1067d5bdb0e514c366de7bdcc9" args="(const char *headers, unsigned int size)" -->
245
220
  <div class="memitem">
246
221
  <div class="memproto">
247
222
  <table class="memname">
248
223
  <tr>
249
- <td class="memname">virtual void Passenger::Application::Session::setReaderTimeout </td>
224
+ <td class="memname">virtual void Passenger::Application::Application::Session::sendHeaders </td>
250
225
  <td>(</td>
226
+ <td class="paramtype">const char *&nbsp;</td>
227
+ <td class="paramname"> <em>headers</em>, </td>
228
+ </tr>
229
+ <tr>
230
+ <td class="paramkey"></td>
231
+ <td></td>
251
232
  <td class="paramtype">unsigned int&nbsp;</td>
252
- <td class="paramname"> <em>msec</em> </td>
253
- <td>&nbsp;)&nbsp;</td>
254
- <td width="100%"><code> [pure virtual]</code></td>
233
+ <td class="paramname"> <em>size</em></td><td>&nbsp;</td>
234
+ </tr>
235
+ <tr>
236
+ <td></td>
237
+ <td>)</td>
238
+ <td></td><td></td><td><code> [inline, virtual]</code></td>
255
239
  </tr>
256
240
  </table>
257
241
  </div>
258
242
  <div class="memdoc">
259
243
 
260
244
  <p>
261
- Set the timeout value for reading data from the I/O stream.
245
+ Send HTTP request headers to the application.
262
246
  <p>
263
- If no data can be read within the timeout period, then the read call will fail with error EAGAIN or EWOULDBLOCK.<p>
247
+ The HTTP headers must be converted into CGI headers, and then encoded into a string that matches this grammar:<p>
248
+ <div class="fragment"><pre class="fragment">
249
+ headers ::= header*
250
+ header ::= name NUL value NUL
251
+ name ::= notnull+
252
+ value ::= notnull+
253
+ notnull ::= "\x01" | "\x02" | "\x02" | ... | "\xFF"
254
+ NUL = "\x00"
255
+ </pre></div><p>
256
+ This method should be the first one to be called during the lifetime of a <a class="el" href="classPassenger_1_1Application_1_1Session.html" title="Represents the life time of a single request/response pair of a Ruby on Rails or...">Session</a> object. Otherwise strange things may happen.<p>
264
257
  <dl compact><dt><b>Parameters:</b></dt><dd>
265
258
  <table border="0" cellspacing="2" cellpadding="0">
266
- <tr><td valign="top"></td><td valign="top"><em>msec</em>&nbsp;</td><td>The timeout, in milliseconds. If 0 is given, there will be no timeout. </td></tr>
259
+ <tr><td valign="top"></td><td valign="top"><em>headers</em>&nbsp;</td><td>The HTTP request headers, converted into CGI headers and encoded as a string, according to the description. </td></tr>
260
+ <tr><td valign="top"></td><td valign="top"><em>size</em>&nbsp;</td><td>The size, in bytes, of <code>headers</code>. </td></tr>
267
261
  </table>
268
262
  </dl>
263
+ <dl class="pre" compact><dt><b>Precondition:</b></dt><dd>headers != NULL </dd></dl>
269
264
  <dl compact><dt><b>Exceptions:</b></dt><dd>
270
265
  <table border="0" cellspacing="2" cellpadding="0">
271
- <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classPassenger_1_1SystemException.html" title="Represents an error returned by a system call or a standard library call.">SystemException</a></em>&nbsp;</td><td>Cannot set the timeout. </td></tr>
266
+ <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classPassenger_1_1IOException.html" title="Represents an error that occured during an I/O operation.">IOException</a></em>&nbsp;</td><td>The writer channel has already been closed. </td></tr>
267
+ <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classPassenger_1_1SystemException.html" title="Represents an error returned by a system call or a standard library call.">SystemException</a></em>&nbsp;</td><td>Something went wrong during writing. </td></tr>
268
+ <tr><td valign="top"></td><td valign="top"><em>boost::thread_interrupted</em>&nbsp;</td><td></td></tr>
272
269
  </table>
273
270
  </dl>
274
271
 
275
272
  </div>
276
273
  </div><p>
277
- <a class="anchor" name="4236abbdf69e10ded00c756de24433e9"></a><!-- doxytag: member="Passenger::Application::Session::setWriterTimeout" ref="4236abbdf69e10ded00c756de24433e9" args="(unsigned int msec)=0" -->
274
+ <a class="anchor" name="b4487fdd198a3a2e2bde74e5d3c2396e"></a><!-- doxytag: member="Passenger::Application::Session::setReaderTimeout" ref="b4487fdd198a3a2e2bde74e5d3c2396e" args="(unsigned int msec)=0" -->
278
275
  <div class="memitem">
279
276
  <div class="memproto">
280
277
  <table class="memname">
281
278
  <tr>
282
- <td class="memname">virtual void Passenger::Application::Session::setWriterTimeout </td>
279
+ <td class="memname">virtual void Passenger::Application::Application::Session::setReaderTimeout </td>
283
280
  <td>(</td>
284
281
  <td class="paramtype">unsigned int&nbsp;</td>
285
282
  <td class="paramname"> <em>msec</em> </td>
286
283
  <td>&nbsp;)&nbsp;</td>
287
- <td width="100%"><code> [pure virtual]</code></td>
284
+ <td><code> [pure virtual]</code></td>
288
285
  </tr>
289
286
  </table>
290
287
  </div>
291
288
  <div class="memdoc">
292
289
 
293
290
  <p>
294
- Set the timeout value for writing data from the I/O stream.
291
+ Set the timeout value for reading data from the I/O stream.
295
292
  <p>
296
- If no data can be written within the timeout period, then the write call will fail with error EAGAIN or EWOULDBLOCK.<p>
293
+ If no data can be read within the timeout period, then the read call will fail with error EAGAIN or EWOULDBLOCK.<p>
297
294
  <dl compact><dt><b>Parameters:</b></dt><dd>
298
295
  <table border="0" cellspacing="2" cellpadding="0">
299
296
  <tr><td valign="top"></td><td valign="top"><em>msec</em>&nbsp;</td><td>The timeout, in milliseconds. If 0 is given, there will be no timeout. </td></tr>
@@ -307,53 +304,58 @@ If no data can be written within the timeout period, then the write call will fa
307
304
 
308
305
  </div>
309
306
  </div><p>
310
- <a class="anchor" name="45ad442dc1f4e7b73782bb3395d9e97d"></a><!-- doxytag: member="Passenger::Application::Session::shutdownReader" ref="45ad442dc1f4e7b73782bb3395d9e97d" args="()=0" -->
307
+ <a class="anchor" name="e279c219606fd20048bde44a150c5b17"></a><!-- doxytag: member="Passenger::Application::Session::setWriterTimeout" ref="e279c219606fd20048bde44a150c5b17" args="(unsigned int msec)=0" -->
311
308
  <div class="memitem">
312
309
  <div class="memproto">
313
310
  <table class="memname">
314
311
  <tr>
315
- <td class="memname">virtual void Passenger::Application::Session::shutdownReader </td>
312
+ <td class="memname">virtual void Passenger::Application::Application::Session::setWriterTimeout </td>
316
313
  <td>(</td>
317
- <td class="paramname"> </td>
314
+ <td class="paramtype">unsigned int&nbsp;</td>
315
+ <td class="paramname"> <em>msec</em> </td>
318
316
  <td>&nbsp;)&nbsp;</td>
319
- <td width="100%"><code> [pure virtual]</code></td>
317
+ <td><code> [pure virtual]</code></td>
320
318
  </tr>
321
319
  </table>
322
320
  </div>
323
321
  <div class="memdoc">
324
322
 
325
323
  <p>
326
- Indicate that we don't want to read data anymore from the I/O stream.
324
+ Set the timeout value for writing data from the I/O stream.
327
325
  <p>
328
- Calling this method after <a class="el" href="classPassenger_1_1Application_1_1Session.html#ddfeda914b17749a70016f5eb384f8a9" title="Close the I/O stream.">closeStream()</a> is called will have no effect.<p>
326
+ If no data can be written within the timeout period, then the write call will fail with error EAGAIN or EWOULDBLOCK.<p>
327
+ <dl compact><dt><b>Parameters:</b></dt><dd>
328
+ <table border="0" cellspacing="2" cellpadding="0">
329
+ <tr><td valign="top"></td><td valign="top"><em>msec</em>&nbsp;</td><td>The timeout, in milliseconds. If 0 is given, there will be no timeout. </td></tr>
330
+ </table>
331
+ </dl>
329
332
  <dl compact><dt><b>Exceptions:</b></dt><dd>
330
333
  <table border="0" cellspacing="2" cellpadding="0">
331
- <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classPassenger_1_1SystemException.html" title="Represents an error returned by a system call or a standard library call.">SystemException</a></em>&nbsp;</td><td>Something went wrong. </td></tr>
332
- <tr><td valign="top"></td><td valign="top"><em>boost::thread_interrupted</em>&nbsp;</td><td></td></tr>
334
+ <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classPassenger_1_1SystemException.html" title="Represents an error returned by a system call or a standard library call.">SystemException</a></em>&nbsp;</td><td>Cannot set the timeout. </td></tr>
333
335
  </table>
334
336
  </dl>
335
337
 
336
338
  </div>
337
339
  </div><p>
338
- <a class="anchor" name="dff449398adb872c93a9572ae4b701fb"></a><!-- doxytag: member="Passenger::Application::Session::shutdownWriter" ref="dff449398adb872c93a9572ae4b701fb" args="()=0" -->
340
+ <a class="anchor" name="95ea71f3a7e2cb1d66681285371cbabe"></a><!-- doxytag: member="Passenger::Application::Session::shutdownReader" ref="95ea71f3a7e2cb1d66681285371cbabe" args="()=0" -->
339
341
  <div class="memitem">
340
342
  <div class="memproto">
341
343
  <table class="memname">
342
344
  <tr>
343
- <td class="memname">virtual void Passenger::Application::Session::shutdownWriter </td>
345
+ <td class="memname">virtual void Passenger::Application::Application::Session::shutdownReader </td>
344
346
  <td>(</td>
345
347
  <td class="paramname"> </td>
346
348
  <td>&nbsp;)&nbsp;</td>
347
- <td width="100%"><code> [pure virtual]</code></td>
349
+ <td><code> [pure virtual]</code></td>
348
350
  </tr>
349
351
  </table>
350
352
  </div>
351
353
  <div class="memdoc">
352
354
 
353
355
  <p>
354
- Indicate that we don't want to write data anymore to the I/O stream.
356
+ Indicate that we don't want to read data anymore from the I/O stream.
355
357
  <p>
356
- Calling this method after <a class="el" href="classPassenger_1_1Application_1_1Session.html#ddfeda914b17749a70016f5eb384f8a9" title="Close the I/O stream.">closeStream()</a> is called will have no effect.<p>
358
+ Calling this method after <a class="el" href="classPassenger_1_1Application_1_1Session.html#bc463c55e17fe5784f351ac699f20ce4" title="Close the I/O stream.">closeStream()</a> is called will have no effect.<p>
357
359
  <dl compact><dt><b>Exceptions:</b></dt><dd>
358
360
  <table border="0" cellspacing="2" cellpadding="0">
359
361
  <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classPassenger_1_1SystemException.html" title="Represents an error returned by a system call or a standard library call.">SystemException</a></em>&nbsp;</td><td>Something went wrong. </td></tr>
@@ -363,24 +365,25 @@ Calling this method after <a class="el" href="classPassenger_1_1Application_1_1S
363
365
 
364
366
  </div>
365
367
  </div><p>
366
- <a class="anchor" name="ddfeda914b17749a70016f5eb384f8a9"></a><!-- doxytag: member="Passenger::Application::Session::closeStream" ref="ddfeda914b17749a70016f5eb384f8a9" args="()=0" -->
368
+ <a class="anchor" name="bfb2a4f08a0fa24a97e75c9a96205bba"></a><!-- doxytag: member="Passenger::Application::Session::shutdownWriter" ref="bfb2a4f08a0fa24a97e75c9a96205bba" args="()=0" -->
367
369
  <div class="memitem">
368
370
  <div class="memproto">
369
371
  <table class="memname">
370
372
  <tr>
371
- <td class="memname">virtual void Passenger::Application::Session::closeStream </td>
373
+ <td class="memname">virtual void Passenger::Application::Application::Session::shutdownWriter </td>
372
374
  <td>(</td>
373
375
  <td class="paramname"> </td>
374
376
  <td>&nbsp;)&nbsp;</td>
375
- <td width="100%"><code> [pure virtual]</code></td>
377
+ <td><code> [pure virtual]</code></td>
376
378
  </tr>
377
379
  </table>
378
380
  </div>
379
381
  <div class="memdoc">
380
382
 
381
383
  <p>
382
- Close the I/O stream.
384
+ Indicate that we don't want to write data anymore to the I/O stream.
383
385
  <p>
386
+ Calling this method after <a class="el" href="classPassenger_1_1Application_1_1Session.html#bc463c55e17fe5784f351ac699f20ce4" title="Close the I/O stream.">closeStream()</a> is called will have no effect.<p>
384
387
  <dl compact><dt><b>Exceptions:</b></dt><dd>
385
388
  <table border="0" cellspacing="2" cellpadding="0">
386
389
  <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classPassenger_1_1SystemException.html" title="Represents an error returned by a system call or a standard library call.">SystemException</a></em>&nbsp;</td><td>Something went wrong. </td></tr>
@@ -393,8 +396,8 @@ Close the I/O stream.
393
396
  <hr>The documentation for this class was generated from the following file:<ul>
394
397
  <li><a class="el" href="Application_8h-source.html">Application.h</a></ul>
395
398
  </div>
396
- <hr size="1"><address style="text-align: right;"><small>Generated on Tue Mar 31 14:00:30 2009 for Passenger by&nbsp;
399
+ <hr size="1"><address style="text-align: right;"><small>Generated on Wed Apr 8 22:35:12 2009 for Passenger by&nbsp;
397
400
  <a href="http://www.doxygen.org/index.html">
398
- <img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
401
+ <img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
399
402
  </body>
400
403
  </html>