passenger 2.2.9 → 2.2.10

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 (435) hide show
  1. data/NEWS +10 -0
  2. data/doc/Architectural overview.html +202 -65
  3. data/doc/Security of user switching support.html +200 -63
  4. data/doc/Users guide Apache.html +266 -129
  5. data/doc/Users guide Nginx.html +234 -97
  6. data/doc/cxxapi/AbstractSpawnManager_8h-source.html +138 -0
  7. data/doc/cxxapi/Account_8h-source.html +202 -0
  8. data/doc/cxxapi/AccountsDatabase_8h-source.html +158 -0
  9. data/doc/cxxapi/AgentsStarter_8h-source.html +79 -0
  10. data/doc/cxxapi/BCrypt_8h-source.html +101 -0
  11. data/doc/cxxapi/BacktracesServer_8h-source.html +87 -0
  12. data/doc/cxxapi/Base64_8h-source.html +85 -0
  13. data/doc/cxxapi/Blowfish_8h-source.html +131 -0
  14. data/doc/cxxapi/Bucket_8h-source.html +1 -1
  15. data/doc/cxxapi/CachedFileStat_8h-source.html +49 -157
  16. data/doc/cxxapi/Configuration_8h-source.html +1 -1
  17. data/doc/cxxapi/Constants_8h-source.html +71 -0
  18. data/doc/cxxapi/ContentHandler_8h-source.html +92 -0
  19. data/doc/cxxapi/DirectoryMapper_8h-source.html +1 -1
  20. data/doc/cxxapi/Exceptions_8h-source.html +332 -236
  21. data/doc/cxxapi/FileChangeChecker_8h-source.html +237 -0
  22. data/doc/cxxapi/FileDescriptor_8h-source.html +206 -0
  23. data/doc/cxxapi/Hooks_8h-source.html +1 -1
  24. data/doc/cxxapi/HttpStatusExtractor_8h-source.html +378 -0
  25. data/doc/cxxapi/LoggingServer_8h-source.html +165 -0
  26. data/doc/cxxapi/Logging_8h-source.html +580 -112
  27. data/doc/cxxapi/MessageChannel_8h-source.html +789 -599
  28. data/doc/cxxapi/MessageClient_8h-source.html +297 -0
  29. data/doc/cxxapi/MessageServer_8h-source.html +607 -0
  30. data/doc/cxxapi/PoolOptions_8h-source.html +471 -278
  31. data/doc/cxxapi/Process_8h-source.html +272 -0
  32. data/doc/cxxapi/RandomGenerator_8h-source.html +156 -0
  33. data/doc/cxxapi/ResourceLocator_8h-source.html +104 -0
  34. data/doc/cxxapi/ScgiRequestParser_8h-source.html +399 -0
  35. data/doc/cxxapi/ServerInstanceDir_8h-source.html +356 -0
  36. data/doc/cxxapi/Session_8h-source.html +483 -0
  37. data/doc/cxxapi/SpawnManager_8h-source.html +590 -546
  38. data/doc/cxxapi/StaticContentHandler_8h-source.html +65 -0
  39. data/doc/cxxapi/StaticString_8h-source.html +214 -0
  40. data/doc/cxxapi/StringListCreator_8h-source.html +111 -0
  41. data/doc/cxxapi/SystemTime_8h-source.html +191 -78
  42. data/doc/cxxapi/Timer_8h-source.html +157 -0
  43. data/doc/cxxapi/Utils_8h-source.html +621 -434
  44. data/doc/cxxapi/Version_8h-source.html +59 -0
  45. data/doc/cxxapi/annotated.html +1 -1
  46. data/doc/cxxapi/apache2_2Configuration_8h-source.html +79 -0
  47. data/doc/cxxapi/classAgentWatcher-members.html +50 -0
  48. data/doc/cxxapi/classAgentWatcher.html +445 -0
  49. data/doc/cxxapi/classClient-members.html +4 -3
  50. data/doc/cxxapi/classClient.html +50 -46
  51. data/doc/cxxapi/classHooks-members.html +1 -1
  52. data/doc/cxxapi/classHooks.html +1 -1
  53. data/doc/cxxapi/classPassenger_1_1AbstractSpawnManager-members.html +37 -0
  54. data/doc/cxxapi/classPassenger_1_1AbstractSpawnManager.html +191 -0
  55. data/doc/cxxapi/classPassenger_1_1AbstractSpawnManager__inherit__graph.map +1 -0
  56. data/doc/cxxapi/classPassenger_1_1AbstractSpawnManager__inherit__graph.md5 +1 -0
  57. data/doc/cxxapi/classPassenger_1_1AbstractSpawnManager__inherit__graph.png +0 -0
  58. data/doc/cxxapi/{classPassenger_1_1DummySpawnManager-members.html → classPassenger_1_1ArgumentException-members.html} +3 -2
  59. data/doc/cxxapi/classPassenger_1_1ArgumentException.html +52 -0
  60. data/doc/cxxapi/classPassenger_1_1BacktracesServer-members.html +36 -0
  61. data/doc/cxxapi/classPassenger_1_1BacktracesServer.html +107 -0
  62. data/doc/cxxapi/classPassenger_1_1BacktracesServer__inherit__graph.map +1 -0
  63. data/doc/cxxapi/classPassenger_1_1BacktracesServer__inherit__graph.md5 +1 -0
  64. data/doc/cxxapi/classPassenger_1_1BacktracesServer__inherit__graph.png +0 -0
  65. data/doc/cxxapi/classPassenger_1_1BufferedUpload-members.html +3 -3
  66. data/doc/cxxapi/classPassenger_1_1BufferedUpload.html +18 -34
  67. data/doc/cxxapi/classPassenger_1_1BusyException-members.html +2 -1
  68. data/doc/cxxapi/classPassenger_1_1BusyException.html +3 -2
  69. data/doc/cxxapi/classPassenger_1_1ConfigurationException-members.html +2 -1
  70. data/doc/cxxapi/classPassenger_1_1ConfigurationException.html +3 -2
  71. data/doc/cxxapi/classPassenger_1_1DirectoryMapper-members.html +1 -1
  72. data/doc/cxxapi/classPassenger_1_1DirectoryMapper.html +1 -1
  73. data/doc/cxxapi/{classPassenger_1_1FileChecker-members.html → classPassenger_1_1EOFException-members.html} +3 -4
  74. data/doc/cxxapi/classPassenger_1_1EOFException.html +57 -0
  75. data/doc/cxxapi/classPassenger_1_1EOFException__inherit__graph.map +1 -0
  76. data/doc/cxxapi/classPassenger_1_1EOFException__inherit__graph.md5 +1 -0
  77. data/doc/cxxapi/classPassenger_1_1EOFException__inherit__graph.png +0 -0
  78. data/doc/cxxapi/classPassenger_1_1EventFd-members.html +33 -0
  79. data/doc/cxxapi/classPassenger_1_1EventFd.html +49 -0
  80. data/doc/cxxapi/classPassenger_1_1FileChangeChecker-members.html +37 -0
  81. data/doc/cxxapi/classPassenger_1_1FileChangeChecker.html +166 -0
  82. data/doc/cxxapi/classPassenger_1_1FileDescriptor-members.html +37 -0
  83. data/doc/cxxapi/classPassenger_1_1FileDescriptor.html +159 -0
  84. data/doc/cxxapi/classPassenger_1_1FileNotFoundException-members.html +2 -1
  85. data/doc/cxxapi/classPassenger_1_1FileNotFoundException.html +3 -2
  86. data/doc/cxxapi/classPassenger_1_1FileSystemException-members.html +2 -1
  87. data/doc/cxxapi/classPassenger_1_1FileSystemException.html +3 -2
  88. data/doc/cxxapi/{classPassenger_1_1ApplicationPoolServer-members.html → classPassenger_1_1HttpStatusExtractor-members.html} +6 -5
  89. data/doc/cxxapi/classPassenger_1_1HttpStatusExtractor.html +128 -0
  90. data/doc/cxxapi/classPassenger_1_1IOException-members.html +2 -1
  91. data/doc/cxxapi/classPassenger_1_1IOException.html +4 -3
  92. data/doc/cxxapi/classPassenger_1_1IOException__inherit__graph.map +2 -1
  93. data/doc/cxxapi/classPassenger_1_1IOException__inherit__graph.md5 +1 -1
  94. data/doc/cxxapi/classPassenger_1_1IOException__inherit__graph.png +0 -0
  95. data/doc/cxxapi/classPassenger_1_1MemZeroGuard-members.html +36 -0
  96. data/doc/cxxapi/classPassenger_1_1MemZeroGuard.html +147 -0
  97. data/doc/cxxapi/classPassenger_1_1MessageChannel-members.html +12 -5
  98. data/doc/cxxapi/classPassenger_1_1MessageChannel.html +267 -34
  99. data/doc/cxxapi/classPassenger_1_1MessageServer-members.html +46 -0
  100. data/doc/cxxapi/classPassenger_1_1MessageServer.html +438 -0
  101. data/doc/cxxapi/classPassenger_1_1MessageServer_1_1ClientContext-members.html +33 -0
  102. data/doc/cxxapi/classPassenger_1_1MessageServer_1_1ClientContext.html +56 -0
  103. data/doc/cxxapi/classPassenger_1_1MessageServer_1_1ClientContext__inherit__graph.map +1 -0
  104. data/doc/cxxapi/classPassenger_1_1MessageServer_1_1ClientContext__inherit__graph.md5 +1 -0
  105. data/doc/cxxapi/classPassenger_1_1MessageServer_1_1ClientContext__inherit__graph.png +0 -0
  106. data/doc/cxxapi/classPassenger_1_1MessageServer_1_1CommonClientContext-members.html +38 -0
  107. data/doc/cxxapi/classPassenger_1_1MessageServer_1_1CommonClientContext.html +175 -0
  108. data/doc/cxxapi/classPassenger_1_1MessageServer_1_1CommonClientContext__inherit__graph.map +1 -0
  109. data/doc/cxxapi/classPassenger_1_1MessageServer_1_1CommonClientContext__inherit__graph.md5 +1 -0
  110. data/doc/cxxapi/classPassenger_1_1MessageServer_1_1CommonClientContext__inherit__graph.png +0 -0
  111. data/doc/cxxapi/classPassenger_1_1MessageServer_1_1Handler-members.html +36 -0
  112. data/doc/cxxapi/classPassenger_1_1MessageServer_1_1Handler.html +176 -0
  113. data/doc/cxxapi/classPassenger_1_1MessageServer_1_1Handler__inherit__graph.map +1 -0
  114. data/doc/cxxapi/classPassenger_1_1MessageServer_1_1Handler__inherit__graph.md5 +1 -0
  115. data/doc/cxxapi/classPassenger_1_1MessageServer_1_1Handler__inherit__graph.png +0 -0
  116. data/doc/cxxapi/classPassenger_1_1Process-members.html +40 -0
  117. data/doc/cxxapi/classPassenger_1_1Process.html +266 -0
  118. data/doc/cxxapi/classPassenger_1_1RandomGenerator-members.html +33 -0
  119. data/doc/cxxapi/classPassenger_1_1RandomGenerator.html +51 -0
  120. data/doc/cxxapi/classPassenger_1_1RuntimeException-members.html +2 -1
  121. data/doc/cxxapi/classPassenger_1_1RuntimeException.html +3 -2
  122. data/doc/cxxapi/classPassenger_1_1ScgiRequestParser-members.html +47 -0
  123. data/doc/cxxapi/classPassenger_1_1ScgiRequestParser.html +302 -0
  124. data/doc/cxxapi/classPassenger_1_1SecurityException-members.html +33 -0
  125. data/doc/cxxapi/classPassenger_1_1SecurityException.html +52 -0
  126. data/doc/cxxapi/classPassenger_1_1Session-members.html +50 -0
  127. data/doc/cxxapi/classPassenger_1_1Session.html +577 -0
  128. data/doc/cxxapi/classPassenger_1_1Session__inherit__graph.map +1 -0
  129. data/doc/cxxapi/classPassenger_1_1Session__inherit__graph.md5 +1 -0
  130. data/doc/cxxapi/classPassenger_1_1Session__inherit__graph.png +0 -0
  131. data/doc/cxxapi/classPassenger_1_1SpawnException-members.html +2 -1
  132. data/doc/cxxapi/classPassenger_1_1SpawnException.html +5 -4
  133. data/doc/cxxapi/classPassenger_1_1SpawnManager-members.html +8 -5
  134. data/doc/cxxapi/classPassenger_1_1SpawnManager.html +127 -45
  135. data/doc/cxxapi/classPassenger_1_1SpawnManager__inherit__graph.map +1 -0
  136. data/doc/cxxapi/classPassenger_1_1SpawnManager__inherit__graph.md5 +1 -0
  137. data/doc/cxxapi/classPassenger_1_1SpawnManager__inherit__graph.png +0 -0
  138. data/doc/cxxapi/classPassenger_1_1StandardSession-members.html +51 -0
  139. data/doc/cxxapi/classPassenger_1_1StandardSession.html +415 -0
  140. data/doc/cxxapi/classPassenger_1_1StandardSession__inherit__graph.map +1 -0
  141. data/doc/cxxapi/classPassenger_1_1StandardSession__inherit__graph.md5 +1 -0
  142. data/doc/cxxapi/classPassenger_1_1StandardSession__inherit__graph.png +0 -0
  143. data/doc/cxxapi/classPassenger_1_1StaticString-members.html +33 -0
  144. data/doc/cxxapi/classPassenger_1_1StaticString.html +54 -0
  145. data/doc/cxxapi/classPassenger_1_1SystemException-members.html +2 -1
  146. data/doc/cxxapi/classPassenger_1_1SystemException.html +4 -3
  147. data/doc/cxxapi/classPassenger_1_1SystemException__inherit__graph.map +1 -0
  148. data/doc/cxxapi/classPassenger_1_1SystemException__inherit__graph.md5 +1 -1
  149. data/doc/cxxapi/classPassenger_1_1SystemException__inherit__graph.png +0 -0
  150. data/doc/cxxapi/classPassenger_1_1SystemTime-members.html +9 -1
  151. data/doc/cxxapi/classPassenger_1_1SystemTime.html +92 -8
  152. data/doc/cxxapi/classPassenger_1_1TimeRetrievalException-members.html +37 -0
  153. data/doc/cxxapi/classPassenger_1_1TimeRetrievalException.html +57 -0
  154. data/doc/cxxapi/classPassenger_1_1TimeRetrievalException__inherit__graph.map +1 -0
  155. data/doc/cxxapi/classPassenger_1_1TimeRetrievalException__inherit__graph.md5 +1 -0
  156. data/doc/cxxapi/classPassenger_1_1TimeRetrievalException__inherit__graph.png +0 -0
  157. data/doc/cxxapi/classPassenger_1_1TimeoutException-members.html +33 -0
  158. data/doc/cxxapi/classPassenger_1_1TimeoutException.html +50 -0
  159. data/doc/cxxapi/{classPassenger_1_1Application-members.html → classPassenger_1_1Timer-members.html} +8 -7
  160. data/doc/cxxapi/classPassenger_1_1Timer.html +163 -0
  161. data/doc/cxxapi/classServer-members.html +33 -0
  162. data/doc/cxxapi/classServer.html +46 -0
  163. data/doc/cxxapi/classServerInstanceDirToucher-members.html +33 -0
  164. data/doc/cxxapi/classServerInstanceDirToucher.html +43 -0
  165. data/doc/cxxapi/classes.html +1 -1
  166. data/doc/cxxapi/definitions_8h-source.html +1 -1
  167. data/doc/cxxapi/files.html +1 -1
  168. data/doc/cxxapi/functions.html +1 -1
  169. data/doc/cxxapi/{functions_type.html → functions_enum.html} +7 -5
  170. data/doc/cxxapi/functions_eval.html +55 -0
  171. data/doc/cxxapi/functions_func.html +1 -1
  172. data/doc/cxxapi/functions_vars.html +106 -9
  173. data/doc/cxxapi/graph_legend.html +1 -1
  174. data/doc/cxxapi/group__Configuration.html +1 -1
  175. data/doc/cxxapi/group__Core.html +1 -1
  176. data/doc/cxxapi/group__Exceptions.html +17 -1
  177. data/doc/cxxapi/group__Hooks.html +1 -1
  178. data/doc/cxxapi/group__Support.html +1 -1
  179. data/doc/cxxapi/hierarchy.html +34 -12
  180. data/doc/cxxapi/inherit__graph__0.map +1 -1
  181. data/doc/cxxapi/inherit__graph__0.md5 +1 -1
  182. data/doc/cxxapi/inherit__graph__0.png +0 -0
  183. data/doc/cxxapi/inherit__graph__1.map +1 -1
  184. data/doc/cxxapi/inherit__graph__1.md5 +1 -1
  185. data/doc/cxxapi/inherit__graph__1.png +0 -0
  186. data/doc/cxxapi/inherit__graph__10.map +1 -1
  187. data/doc/cxxapi/inherit__graph__10.md5 +1 -1
  188. data/doc/cxxapi/inherit__graph__10.png +0 -0
  189. data/doc/cxxapi/inherit__graph__11.map +1 -1
  190. data/doc/cxxapi/inherit__graph__11.md5 +1 -1
  191. data/doc/cxxapi/inherit__graph__11.png +0 -0
  192. data/doc/cxxapi/inherit__graph__12.map +1 -1
  193. data/doc/cxxapi/inherit__graph__12.md5 +1 -1
  194. data/doc/cxxapi/inherit__graph__12.png +0 -0
  195. data/doc/cxxapi/inherit__graph__13.map +1 -1
  196. data/doc/cxxapi/inherit__graph__13.md5 +1 -1
  197. data/doc/cxxapi/inherit__graph__13.png +0 -0
  198. data/doc/cxxapi/inherit__graph__14.map +3 -2
  199. data/doc/cxxapi/inherit__graph__14.md5 +1 -1
  200. data/doc/cxxapi/inherit__graph__14.png +0 -0
  201. data/doc/cxxapi/inherit__graph__15.map +1 -1
  202. data/doc/cxxapi/inherit__graph__15.md5 +1 -1
  203. data/doc/cxxapi/inherit__graph__15.png +0 -0
  204. data/doc/cxxapi/inherit__graph__16.map +1 -1
  205. data/doc/cxxapi/inherit__graph__16.md5 +1 -1
  206. data/doc/cxxapi/inherit__graph__16.png +0 -0
  207. data/doc/cxxapi/inherit__graph__17.map +1 -1
  208. data/doc/cxxapi/inherit__graph__17.md5 +1 -1
  209. data/doc/cxxapi/inherit__graph__17.png +0 -0
  210. data/doc/cxxapi/inherit__graph__18.map +2 -1
  211. data/doc/cxxapi/inherit__graph__18.md5 +1 -1
  212. data/doc/cxxapi/inherit__graph__18.png +0 -0
  213. data/doc/cxxapi/inherit__graph__19.map +1 -1
  214. data/doc/cxxapi/inherit__graph__19.md5 +1 -1
  215. data/doc/cxxapi/inherit__graph__19.png +0 -0
  216. data/doc/cxxapi/inherit__graph__2.map +1 -1
  217. data/doc/cxxapi/inherit__graph__2.md5 +1 -1
  218. data/doc/cxxapi/inherit__graph__2.png +0 -0
  219. data/doc/cxxapi/inherit__graph__20.map +1 -2
  220. data/doc/cxxapi/inherit__graph__20.md5 +1 -1
  221. data/doc/cxxapi/inherit__graph__20.png +0 -0
  222. data/doc/cxxapi/inherit__graph__21.map +1 -1
  223. data/doc/cxxapi/inherit__graph__21.md5 +1 -1
  224. data/doc/cxxapi/inherit__graph__21.png +0 -0
  225. data/doc/cxxapi/inherit__graph__22.map +1 -0
  226. data/doc/cxxapi/inherit__graph__22.md5 +1 -0
  227. data/doc/cxxapi/inherit__graph__22.png +0 -0
  228. data/doc/cxxapi/inherit__graph__23.map +1 -0
  229. data/doc/cxxapi/inherit__graph__23.md5 +1 -0
  230. data/doc/cxxapi/inherit__graph__23.png +0 -0
  231. data/doc/cxxapi/inherit__graph__24.map +1 -0
  232. data/doc/cxxapi/inherit__graph__24.md5 +1 -0
  233. data/doc/cxxapi/inherit__graph__24.png +0 -0
  234. data/doc/cxxapi/inherit__graph__25.map +1 -0
  235. data/doc/cxxapi/inherit__graph__25.md5 +1 -0
  236. data/doc/cxxapi/inherit__graph__25.png +0 -0
  237. data/doc/cxxapi/inherit__graph__26.map +1 -0
  238. data/doc/cxxapi/inherit__graph__26.md5 +1 -0
  239. data/doc/cxxapi/inherit__graph__26.png +0 -0
  240. data/doc/cxxapi/inherit__graph__27.map +2 -0
  241. data/doc/cxxapi/inherit__graph__27.md5 +1 -0
  242. data/doc/cxxapi/inherit__graph__27.png +0 -0
  243. data/doc/cxxapi/inherit__graph__28.map +1 -0
  244. data/doc/cxxapi/inherit__graph__28.md5 +1 -0
  245. data/doc/cxxapi/inherit__graph__28.png +0 -0
  246. data/doc/cxxapi/inherit__graph__29.map +1 -0
  247. data/doc/cxxapi/inherit__graph__29.md5 +1 -0
  248. data/doc/cxxapi/inherit__graph__29.png +0 -0
  249. data/doc/cxxapi/inherit__graph__3.map +2 -1
  250. data/doc/cxxapi/inherit__graph__3.md5 +1 -1
  251. data/doc/cxxapi/inherit__graph__3.png +0 -0
  252. data/doc/cxxapi/inherit__graph__30.map +1 -0
  253. data/doc/cxxapi/inherit__graph__30.md5 +1 -0
  254. data/doc/cxxapi/inherit__graph__30.png +0 -0
  255. data/doc/cxxapi/inherit__graph__31.map +3 -0
  256. data/doc/cxxapi/inherit__graph__31.md5 +1 -0
  257. data/doc/cxxapi/inherit__graph__31.png +0 -0
  258. data/doc/cxxapi/inherit__graph__32.map +1 -0
  259. data/doc/cxxapi/inherit__graph__32.md5 +1 -0
  260. data/doc/cxxapi/inherit__graph__32.png +0 -0
  261. data/doc/cxxapi/inherit__graph__33.map +1 -0
  262. data/doc/cxxapi/inherit__graph__33.md5 +1 -0
  263. data/doc/cxxapi/inherit__graph__33.png +0 -0
  264. data/doc/cxxapi/inherit__graph__34.map +1 -0
  265. data/doc/cxxapi/inherit__graph__34.md5 +1 -0
  266. data/doc/cxxapi/inherit__graph__34.png +0 -0
  267. data/doc/cxxapi/inherit__graph__35.map +1 -0
  268. data/doc/cxxapi/inherit__graph__35.md5 +1 -0
  269. data/doc/cxxapi/inherit__graph__35.png +0 -0
  270. data/doc/cxxapi/inherit__graph__36.map +1 -0
  271. data/doc/cxxapi/inherit__graph__36.md5 +1 -0
  272. data/doc/cxxapi/inherit__graph__36.png +0 -0
  273. data/doc/cxxapi/inherit__graph__4.map +1 -1
  274. data/doc/cxxapi/inherit__graph__4.md5 +1 -1
  275. data/doc/cxxapi/inherit__graph__4.png +0 -0
  276. data/doc/cxxapi/inherit__graph__5.map +1 -1
  277. data/doc/cxxapi/inherit__graph__5.md5 +1 -1
  278. data/doc/cxxapi/inherit__graph__5.png +0 -0
  279. data/doc/cxxapi/inherit__graph__6.map +1 -2
  280. data/doc/cxxapi/inherit__graph__6.md5 +1 -1
  281. data/doc/cxxapi/inherit__graph__6.png +0 -0
  282. data/doc/cxxapi/inherit__graph__7.map +1 -1
  283. data/doc/cxxapi/inherit__graph__7.md5 +1 -1
  284. data/doc/cxxapi/inherit__graph__7.png +0 -0
  285. data/doc/cxxapi/inherit__graph__8.map +1 -1
  286. data/doc/cxxapi/inherit__graph__8.md5 +1 -1
  287. data/doc/cxxapi/inherit__graph__8.png +0 -0
  288. data/doc/cxxapi/inherit__graph__9.map +1 -1
  289. data/doc/cxxapi/inherit__graph__9.md5 +1 -1
  290. data/doc/cxxapi/inherit__graph__9.png +0 -0
  291. data/doc/cxxapi/inherits.html +81 -41
  292. data/doc/cxxapi/main.html +1 -1
  293. data/doc/cxxapi/md5_8h-source.html +121 -0
  294. data/doc/cxxapi/modules.html +1 -1
  295. data/doc/cxxapi/namespacePassenger.html +651 -0
  296. data/doc/cxxapi/namespacemembers.html +155 -0
  297. data/doc/cxxapi/namespacemembers_enum.html +46 -0
  298. data/doc/cxxapi/namespacemembers_eval.html +52 -0
  299. data/doc/cxxapi/namespacemembers_func.html +139 -0
  300. data/doc/cxxapi/namespacemembers_type.html +50 -0
  301. data/doc/cxxapi/namespaces.html +34 -0
  302. data/doc/cxxapi/nginx_2Configuration_8h-source.html +114 -0
  303. data/doc/cxxapi/ngx__http__passenger__module_8h-source.html +91 -0
  304. data/doc/cxxapi/structPassenger_1_1AnythingToString-members.html +2 -1
  305. data/doc/cxxapi/structPassenger_1_1AnythingToString.html +3 -2
  306. data/doc/cxxapi/structPassenger_1_1AnythingToString_3_01vector_3_01string_01_4_01_4-members.html +2 -1
  307. data/doc/cxxapi/structPassenger_1_1AnythingToString_3_01vector_3_01string_01_4_01_4.html +3 -2
  308. data/doc/cxxapi/structPassenger_1_1MessageServer_1_1DisconnectEventBroadcastGuard-members.html +33 -0
  309. data/doc/cxxapi/structPassenger_1_1MessageServer_1_1DisconnectEventBroadcastGuard.html +49 -0
  310. data/doc/cxxapi/structPassenger_1_1PoolOptions-members.html +19 -7
  311. data/doc/cxxapi/structPassenger_1_1PoolOptions.html +323 -53
  312. data/doc/cxxapi/structPassenger_1_1StaticString_1_1Hash-members.html +33 -0
  313. data/doc/cxxapi/structPassenger_1_1StaticString_1_1Hash.html +49 -0
  314. data/ext/common/MessageChannel.h +48 -4
  315. data/ext/common/Version.h +1 -1
  316. data/ext/nginx/HttpStatusExtractor.h +1 -0
  317. data/ext/nginx/ScgiRequestParser.h +1 -0
  318. data/ext/phusion_passenger/native_support.c +5 -1
  319. data/lib/phusion_passenger/constants.rb +1 -1
  320. data/lib/phusion_passenger/message_channel.rb +45 -3
  321. data/lib/phusion_passenger/rack/application_spawner.rb +4 -0
  322. data/lib/phusion_passenger/railz/application_spawner.rb +19 -1
  323. data/lib/phusion_passenger/utils.rb +3 -3
  324. data/lib/phusion_passenger/utils/rewindable_input.rb +5 -0
  325. data/test/MessageChannelTest.cpp +9 -1
  326. data/test/stub/message_channel.rb +1 -1
  327. data/test/stub/message_channel_2.rb +1 -1
  328. data/test/stub/message_channel_3.rb +2 -2
  329. metadata +173 -113
  330. data/doc/cxxapi/ApplicationPoolServer_8h-source.html +0 -833
  331. data/doc/cxxapi/ApplicationPool_8h-source.html +0 -226
  332. data/doc/cxxapi/Application_8h-source.html +0 -553
  333. data/doc/cxxapi/DummySpawnManager_8h-source.html +0 -130
  334. data/doc/cxxapi/FileChecker_8h-source.html +0 -134
  335. data/doc/cxxapi/StandardApplicationPool_8h-source.html +0 -842
  336. data/doc/cxxapi/classPassenger_1_1Application.html +0 -231
  337. data/doc/cxxapi/classPassenger_1_1ApplicationPool-members.html +0 -41
  338. data/doc/cxxapi/classPassenger_1_1ApplicationPool.html +0 -323
  339. data/doc/cxxapi/classPassenger_1_1ApplicationPoolServer.html +0 -227
  340. data/doc/cxxapi/classPassenger_1_1ApplicationPool__inherit__graph.map +0 -1
  341. data/doc/cxxapi/classPassenger_1_1ApplicationPool__inherit__graph.md5 +0 -1
  342. data/doc/cxxapi/classPassenger_1_1ApplicationPool__inherit__graph.png +0 -0
  343. data/doc/cxxapi/classPassenger_1_1Application_1_1Session-members.html +0 -44
  344. data/doc/cxxapi/classPassenger_1_1Application_1_1Session.html +0 -403
  345. data/doc/cxxapi/classPassenger_1_1DummySpawnManager.html +0 -53
  346. data/doc/cxxapi/classPassenger_1_1FileChecker.html +0 -124
  347. data/doc/cxxapi/classPassenger_1_1StandardApplicationPool-members.html +0 -44
  348. data/doc/cxxapi/classPassenger_1_1StandardApplicationPool.html +0 -342
  349. data/doc/cxxapi/classPassenger_1_1StandardApplicationPool__inherit__graph.map +0 -1
  350. data/doc/cxxapi/classPassenger_1_1StandardApplicationPool__inherit__graph.md5 +0 -1
  351. data/doc/cxxapi/classPassenger_1_1StandardApplicationPool__inherit__graph.png +0 -0
  352. data/doc/rdoc/classes/ConditionVariable.html +0 -194
  353. data/doc/rdoc/classes/Exception.html +0 -120
  354. data/doc/rdoc/classes/GC.html +0 -113
  355. data/doc/rdoc/classes/IO.html +0 -169
  356. data/doc/rdoc/classes/PhusionPassenger.html +0 -239
  357. data/doc/rdoc/classes/PhusionPassenger/AbstractInstaller.html +0 -153
  358. data/doc/rdoc/classes/PhusionPassenger/AbstractRequestHandler.html +0 -517
  359. data/doc/rdoc/classes/PhusionPassenger/AbstractServer.html +0 -719
  360. data/doc/rdoc/classes/PhusionPassenger/AbstractServer/ServerAlreadyStarted.html +0 -97
  361. data/doc/rdoc/classes/PhusionPassenger/AbstractServer/ServerError.html +0 -96
  362. data/doc/rdoc/classes/PhusionPassenger/AbstractServer/ServerNotStarted.html +0 -97
  363. data/doc/rdoc/classes/PhusionPassenger/AbstractServer/UnknownMessage.html +0 -96
  364. data/doc/rdoc/classes/PhusionPassenger/AbstractServerCollection.html +0 -598
  365. data/doc/rdoc/classes/PhusionPassenger/AdminTools.html +0 -140
  366. data/doc/rdoc/classes/PhusionPassenger/AdminTools/ControlProcess.html +0 -317
  367. data/doc/rdoc/classes/PhusionPassenger/AdminTools/ControlProcess/Instance.html +0 -138
  368. data/doc/rdoc/classes/PhusionPassenger/AppInitError.html +0 -154
  369. data/doc/rdoc/classes/PhusionPassenger/Application.html +0 -283
  370. data/doc/rdoc/classes/PhusionPassenger/ConsoleTextTemplate.html +0 -172
  371. data/doc/rdoc/classes/PhusionPassenger/FrameworkInitError.html +0 -145
  372. data/doc/rdoc/classes/PhusionPassenger/HTMLTemplate.html +0 -175
  373. data/doc/rdoc/classes/PhusionPassenger/InitializationError.html +0 -141
  374. data/doc/rdoc/classes/PhusionPassenger/InvalidPath.html +0 -92
  375. data/doc/rdoc/classes/PhusionPassenger/MessageChannel.html +0 -489
  376. data/doc/rdoc/classes/PhusionPassenger/NativeSupport.html +0 -350
  377. data/doc/rdoc/classes/PhusionPassenger/Rack.html +0 -91
  378. data/doc/rdoc/classes/PhusionPassenger/Rack/ApplicationSpawner.html +0 -188
  379. data/doc/rdoc/classes/PhusionPassenger/Rack/RequestHandler.html +0 -199
  380. data/doc/rdoc/classes/PhusionPassenger/Railz.html +0 -95
  381. data/doc/rdoc/classes/PhusionPassenger/Railz/ApplicationSpawner.html +0 -438
  382. data/doc/rdoc/classes/PhusionPassenger/Railz/ApplicationSpawner/Error.html +0 -98
  383. data/doc/rdoc/classes/PhusionPassenger/Railz/CGIFixed.html +0 -200
  384. data/doc/rdoc/classes/PhusionPassenger/Railz/FrameworkSpawner.html +0 -436
  385. data/doc/rdoc/classes/PhusionPassenger/Railz/FrameworkSpawner/Error.html +0 -98
  386. data/doc/rdoc/classes/PhusionPassenger/Railz/RequestHandler.html +0 -155
  387. data/doc/rdoc/classes/PhusionPassenger/SpawnManager.html +0 -402
  388. data/doc/rdoc/classes/PhusionPassenger/UnknownError.html +0 -125
  389. data/doc/rdoc/classes/PhusionPassenger/Utils.html +0 -805
  390. data/doc/rdoc/classes/PhusionPassenger/Utils/PseudoIO.html +0 -169
  391. data/doc/rdoc/classes/PhusionPassenger/Utils/RewindableInput.html +0 -247
  392. data/doc/rdoc/classes/PhusionPassenger/Utils/RewindableInput/Tempfile.html +0 -120
  393. data/doc/rdoc/classes/PhusionPassenger/VersionNotFound.html +0 -140
  394. data/doc/rdoc/classes/PhusionPassenger/WSGI.html +0 -89
  395. data/doc/rdoc/classes/PhusionPassenger/WSGI/ApplicationSpawner.html +0 -188
  396. data/doc/rdoc/classes/PlatformInfo.html +0 -866
  397. data/doc/rdoc/classes/RakeExtensions.html +0 -197
  398. data/doc/rdoc/classes/Signal.html +0 -139
  399. data/doc/rdoc/created.rid +0 -1
  400. data/doc/rdoc/files/DEVELOPERS_TXT.html +0 -255
  401. data/doc/rdoc/files/README.html +0 -157
  402. data/doc/rdoc/files/ext/phusion_passenger/native_support_c.html +0 -92
  403. data/doc/rdoc/files/lib/phusion_passenger/abstract_installer_rb.html +0 -129
  404. data/doc/rdoc/files/lib/phusion_passenger/abstract_request_handler_rb.html +0 -129
  405. data/doc/rdoc/files/lib/phusion_passenger/abstract_server_collection_rb.html +0 -126
  406. data/doc/rdoc/files/lib/phusion_passenger/abstract_server_rb.html +0 -128
  407. data/doc/rdoc/files/lib/phusion_passenger/admin_tools/control_process_rb.html +0 -130
  408. data/doc/rdoc/files/lib/phusion_passenger/admin_tools_rb.html +0 -122
  409. data/doc/rdoc/files/lib/phusion_passenger/application_rb.html +0 -127
  410. data/doc/rdoc/files/lib/phusion_passenger/console_text_template_rb.html +0 -126
  411. data/doc/rdoc/files/lib/phusion_passenger/constants_rb.html +0 -122
  412. data/doc/rdoc/files/lib/phusion_passenger/dependencies_rb.html +0 -134
  413. data/doc/rdoc/files/lib/phusion_passenger/events_rb.html +0 -122
  414. data/doc/rdoc/files/lib/phusion_passenger/exceptions_rb.html +0 -122
  415. data/doc/rdoc/files/lib/phusion_passenger/html_template_rb.html +0 -126
  416. data/doc/rdoc/files/lib/phusion_passenger/message_channel_rb.html +0 -120
  417. data/doc/rdoc/files/lib/phusion_passenger/packaging_rb.html +0 -122
  418. data/doc/rdoc/files/lib/phusion_passenger/platform_info_rb.html +0 -127
  419. data/doc/rdoc/files/lib/phusion_passenger/rack/application_spawner_rb.html +0 -133
  420. data/doc/rdoc/files/lib/phusion_passenger/rack/request_handler_rb.html +0 -125
  421. data/doc/rdoc/files/lib/phusion_passenger/railz/application_spawner_rb.html +0 -140
  422. data/doc/rdoc/files/lib/phusion_passenger/railz/cgi_fixed_rb.html +0 -126
  423. data/doc/rdoc/files/lib/phusion_passenger/railz/framework_spawner_rb.html +0 -145
  424. data/doc/rdoc/files/lib/phusion_passenger/railz/request_handler_rb.html +0 -125
  425. data/doc/rdoc/files/lib/phusion_passenger/simple_benchmarking_rb.html +0 -122
  426. data/doc/rdoc/files/lib/phusion_passenger/spawn_manager_rb.html +0 -159
  427. data/doc/rdoc/files/lib/phusion_passenger/utils/rewindable_input_rb.html +0 -100
  428. data/doc/rdoc/files/lib/phusion_passenger/utils_rb.html +0 -174
  429. data/doc/rdoc/files/lib/phusion_passenger/wsgi/application_spawner_rb.html +0 -129
  430. data/doc/rdoc/files/misc/rake/extensions_rb.html +0 -130
  431. data/doc/rdoc/fr_class_index.html +0 -93
  432. data/doc/rdoc/fr_file_index.html +0 -77
  433. data/doc/rdoc/fr_method_index.html +0 -212
  434. data/doc/rdoc/index.html +0 -26
  435. data/doc/rdoc/rdoc-style.css +0 -187
@@ -0,0 +1,302 @@
1
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2
+ <html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
3
+ <title>Passenger: Passenger::ScgiRequestParser Class Reference</title>
4
+ <link href="tabs.css" rel="stylesheet" type="text/css">
5
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
6
+ </head><body>
7
+ <!-- Generated by Doxygen 1.5.8 -->
8
+ <div class="navigation" id="top">
9
+ <div class="tabs">
10
+ <ul>
11
+ <li><a href="main.html"><span>Main&nbsp;Page</span></a></li>
12
+ <li><a href="modules.html"><span>Modules</span></a></li>
13
+ <li><a href="namespaces.html"><span>Namespaces</span></a></li>
14
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
15
+ <li><a href="files.html"><span>Files</span></a></li>
16
+ </ul>
17
+ </div>
18
+ <div class="tabs">
19
+ <ul>
20
+ <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
21
+ <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
22
+ <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
23
+ </ul>
24
+ </div>
25
+ <div class="navpath"><a class="el" href="namespacePassenger.html">Passenger</a>::<a class="el" href="classPassenger_1_1ScgiRequestParser.html">ScgiRequestParser</a>
26
+ </div>
27
+ </div>
28
+ <div class="contents">
29
+ <h1>Passenger::ScgiRequestParser Class Reference</h1><!-- doxytag: class="Passenger::ScgiRequestParser" -->A parser for SCGI requests.
30
+ <a href="#_details">More...</a>
31
+ <p>
32
+ <code>#include &lt;<a class="el" href="ScgiRequestParser_8h-source.html">ScgiRequestParser.h</a>&gt;</code>
33
+ <p>
34
+
35
+ <p>
36
+ <a href="classPassenger_1_1ScgiRequestParser-members.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
37
+ <tr><td></td></tr>
38
+ <tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
39
+ <tr><td class="memItemLeft" nowrap align="right" valign="top">enum &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1ScgiRequestParser.html#495e2aec6deffd64fd3d53dc81379f8b">ErrorReason</a> { , <br>
40
+ &nbsp;&nbsp;<a class="el" href="classPassenger_1_1ScgiRequestParser.html#495e2aec6deffd64fd3d53dc81379f8b9ba3d5851af9ffae1e9202bc9f73ac5b">LENGTH_STRING_TOO_LARGE</a>,
41
+ <a class="el" href="classPassenger_1_1ScgiRequestParser.html#495e2aec6deffd64fd3d53dc81379f8b876574447523322b9d7b4921e490032d">LIMIT_REACHED</a>,
42
+ <a class="el" href="classPassenger_1_1ScgiRequestParser.html#495e2aec6deffd64fd3d53dc81379f8bfe61dd339024beaed48f6eed6e6f3332">INVALID_LENGTH_STRING</a>,
43
+ <a class="el" href="classPassenger_1_1ScgiRequestParser.html#495e2aec6deffd64fd3d53dc81379f8b44078eaf2ae1ee592d65d122dbda4a44">HEADER_TERMINATOR_EXPECTED</a>,
44
+ <br>
45
+ &nbsp;&nbsp;<a class="el" href="classPassenger_1_1ScgiRequestParser.html#495e2aec6deffd64fd3d53dc81379f8bc162062c109fe310d5923d12b6147add">INVALID_HEADER_DATA</a>
46
+ <br>
47
+ }</td></tr>
48
+
49
+ <tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
50
+ <tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1ScgiRequestParser.html#1108e7ce9162289db8a5b14479325e7a">ScgiRequestParser</a> (unsigned long maxSize=0)</td></tr>
51
+
52
+ <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Create a new <a class="el" href="classPassenger_1_1ScgiRequestParser.html" title="A parser for SCGI requests.">ScgiRequestParser</a>, ready to parse a request. <a href="#1108e7ce9162289db8a5b14479325e7a"></a><br></td></tr>
53
+ <tr><td class="memItemLeft" nowrap align="right" valign="top">unsigned int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1ScgiRequestParser.html#0498c9529029969d5a77e1f74f95baa3">feed</a> (const char *data, unsigned int size)</td></tr>
54
+
55
+ <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Feed SCGI request data to the parser. <a href="#0498c9529029969d5a77e1f74f95baa3"></a><br></td></tr>
56
+ <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a96dbb7c4c642ac74f30ed5b14a64e86"></a><!-- doxytag: member="Passenger::ScgiRequestParser::getHeaderData" ref="a96dbb7c4c642ac74f30ed5b14a64e86" args="() const " -->
57
+ string&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1ScgiRequestParser.html#a96dbb7c4c642ac74f30ed5b14a64e86">getHeaderData</a> () const </td></tr>
58
+
59
+ <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get the raw header data that has been processed so far. <br></td></tr>
60
+ <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="classPassenger_1_1StaticString.html">StaticString</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1ScgiRequestParser.html#82321480ad2f8ac7ba58ff865131f6b4">getHeader</a> (const <a class="el" href="classPassenger_1_1StaticString.html">StaticString</a> &amp;name) const </td></tr>
61
+
62
+ <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get the value of the header with the given name. <a href="#82321480ad2f8ac7ba58ff865131f6b4"></a><br></td></tr>
63
+ <tr><td class="memItemLeft" nowrap align="right" valign="top">bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1ScgiRequestParser.html#d82e358a0ad051ab2bdd2374e9ab4ff8">hasHeader</a> (const <a class="el" href="classPassenger_1_1StaticString.html">StaticString</a> &amp;name) const </td></tr>
64
+
65
+ <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Checks whether there is a header with the given name. <a href="#d82e358a0ad051ab2bdd2374e9ab4ff8"></a><br></td></tr>
66
+ <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="5bd7dbce81c69ae9e3462e84daf09012"></a><!-- doxytag: member="Passenger::ScgiRequestParser::getState" ref="5bd7dbce81c69ae9e3462e84daf09012" args="() const " -->
67
+ State&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1ScgiRequestParser.html#5bd7dbce81c69ae9e3462e84daf09012">getState</a> () const </td></tr>
68
+
69
+ <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get the parser's current state. <br></td></tr>
70
+ <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="classPassenger_1_1ScgiRequestParser.html#495e2aec6deffd64fd3d53dc81379f8b">ErrorReason</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1ScgiRequestParser.html#4114253f47d3e7e5c0dddc3cd11c5596">getErrorReason</a> () const </td></tr>
71
+
72
+ <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the reason why the parser entered the error state. <a href="#4114253f47d3e7e5c0dddc3cd11c5596"></a><br></td></tr>
73
+ <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="5368ed40bf7c896f68d7ffaae164a092"></a><!-- doxytag: member="Passenger::ScgiRequestParser::acceptingInput" ref="5368ed40bf7c896f68d7ffaae164a092" args="() const " -->
74
+ bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1ScgiRequestParser.html#5368ed40bf7c896f68d7ffaae164a092">acceptingInput</a> () const </td></tr>
75
+
76
+ <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Checks whether this parser is still capable of accepting input (that is, that this parser is not in a final state). <br></td></tr>
77
+ </table>
78
+ <hr><a name="_details"></a><h2>Detailed Description</h2>
79
+ A parser for SCGI requests.
80
+ <p>
81
+ It parses the request header and ignores the body data.<p>
82
+ You can use it by constructing a parser object, then feeding data to the parser until it has reached a final state.<p>
83
+ Example: <div class="fragment"><pre class="fragment"> <a class="code" href="classPassenger_1_1ScgiRequestParser.html#1108e7ce9162289db8a5b14479325e7a" title="Create a new ScgiRequestParser, ready to parse a request.">ScgiRequestParser</a> parser;
84
+ <span class="keywordtype">char</span> buf[1024 * 16];
85
+ ssize_t size;
86
+ <span class="keywordtype">unsigned</span> in bytesAccepted;
87
+
88
+ <span class="keywordflow">do</span> {
89
+ size = read(fd, buf, <span class="keyword">sizeof</span>(buf));
90
+ bytesAccepted = parser.feed(buf, size);
91
+ } <span class="keywordflow">while</span> (parser.acceptingInput());
92
+ <span class="comment">// Parser is done when its return value isn't equal to the input size.</span>
93
+
94
+ <span class="comment">// Check whether a parse error occured.</span>
95
+ <span class="keywordflow">if</span> (parser.getState() == ScgiRequestParser::ERROR) {
96
+ bailOut();
97
+ } <span class="keywordflow">else</span> {
98
+ <span class="comment">// All good! Do something with the SCGI header that the parser parsed.</span>
99
+ processHeader(parser.getHeaderData());
100
+
101
+ <span class="comment">// If the last buffer passed to the parser also contains body data,</span>
102
+ <span class="comment">// then the body data starts at 'buf + bytesAccepted'.</span>
103
+ <span class="keywordflow">if</span> (bytesAccepted &lt; size) {
104
+ processBody(buf + bytesAccepted);
105
+ }
106
+ <span class="keywordflow">while</span> (!end_of_file(fd)) {
107
+ ... read(...) ...
108
+ processBody(...);
109
+ }
110
+ }
111
+ </pre></div><p>
112
+ Parser properties:<ul>
113
+ <li>A parser object can only process a single SCGI request. You must discard the existing parser object and create a new one if you want to process another SCGI request.</li><li>This parser checks whether the header netstring is valid. It will enter the error state if it encounters a parse error.</li><li>However, this parser does not perform any validation of the actual header contents. For example, it doesn't check that CONTENT_LENGTH is the first header, or that the SCGI header is present. </li></ul>
114
+ <hr><h2>Member Enumeration Documentation</h2>
115
+ <a class="anchor" name="495e2aec6deffd64fd3d53dc81379f8b"></a><!-- doxytag: member="Passenger::ScgiRequestParser::ErrorReason" ref="495e2aec6deffd64fd3d53dc81379f8b" args="" -->
116
+ <div class="memitem">
117
+ <div class="memproto">
118
+ <table class="memname">
119
+ <tr>
120
+ <td class="memname">enum <a class="el" href="classPassenger_1_1ScgiRequestParser.html#495e2aec6deffd64fd3d53dc81379f8b">Passenger::ScgiRequestParser::ErrorReason</a> </td>
121
+ </tr>
122
+ </table>
123
+ </div>
124
+ <div class="memdoc">
125
+
126
+ <p>
127
+ <dl compact><dt><b>Enumerator: </b></dt><dd>
128
+ <table border="0" cellspacing="2" cellpadding="0">
129
+ <tr><td valign="top"><em><a class="anchor" name="495e2aec6deffd64fd3d53dc81379f8b9ba3d5851af9ffae1e9202bc9f73ac5b"></a><!-- doxytag: member="LENGTH_STRING_TOO_LARGE" ref="495e2aec6deffd64fd3d53dc81379f8b9ba3d5851af9ffae1e9202bc9f73ac5b" args="" -->LENGTH_STRING_TOO_LARGE</em>&nbsp;</td><td>
130
+ The length string is too large.
131
+ <p>
132
+ </td></tr>
133
+ <tr><td valign="top"><em><a class="anchor" name="495e2aec6deffd64fd3d53dc81379f8b876574447523322b9d7b4921e490032d"></a><!-- doxytag: member="LIMIT_REACHED" ref="495e2aec6deffd64fd3d53dc81379f8b876574447523322b9d7b4921e490032d" args="" -->LIMIT_REACHED</em>&nbsp;</td><td>
134
+ The header is larger than the maxSize value provided to the constructor.
135
+ <p>
136
+ </td></tr>
137
+ <tr><td valign="top"><em><a class="anchor" name="495e2aec6deffd64fd3d53dc81379f8bfe61dd339024beaed48f6eed6e6f3332"></a><!-- doxytag: member="INVALID_LENGTH_STRING" ref="495e2aec6deffd64fd3d53dc81379f8bfe61dd339024beaed48f6eed6e6f3332" args="" -->INVALID_LENGTH_STRING</em>&nbsp;</td><td>
138
+ The length string contains an invalid character.
139
+ <p>
140
+ </td></tr>
141
+ <tr><td valign="top"><em><a class="anchor" name="495e2aec6deffd64fd3d53dc81379f8b44078eaf2ae1ee592d65d122dbda4a44"></a><!-- doxytag: member="HEADER_TERMINATOR_EXPECTED" ref="495e2aec6deffd64fd3d53dc81379f8b44078eaf2ae1ee592d65d122dbda4a44" args="" -->HEADER_TERMINATOR_EXPECTED</em>&nbsp;</td><td>
142
+ A header terminator character (",") was expected, but some else was encountered instead.
143
+ <p>
144
+ </td></tr>
145
+ <tr><td valign="top"><em><a class="anchor" name="495e2aec6deffd64fd3d53dc81379f8bc162062c109fe310d5923d12b6147add"></a><!-- doxytag: member="INVALID_HEADER_DATA" ref="495e2aec6deffd64fd3d53dc81379f8bc162062c109fe310d5923d12b6147add" args="" -->INVALID_HEADER_DATA</em>&nbsp;</td><td>
146
+ The header data itself contains errors.
147
+ <p>
148
+ </td></tr>
149
+ </table>
150
+ </dl>
151
+
152
+ </div>
153
+ </div><p>
154
+ <hr><h2>Constructor &amp; Destructor Documentation</h2>
155
+ <a class="anchor" name="1108e7ce9162289db8a5b14479325e7a"></a><!-- doxytag: member="Passenger::ScgiRequestParser::ScgiRequestParser" ref="1108e7ce9162289db8a5b14479325e7a" args="(unsigned long maxSize=0)" -->
156
+ <div class="memitem">
157
+ <div class="memproto">
158
+ <table class="memname">
159
+ <tr>
160
+ <td class="memname">Passenger::ScgiRequestParser::ScgiRequestParser </td>
161
+ <td>(</td>
162
+ <td class="paramtype">unsigned long&nbsp;</td>
163
+ <td class="paramname"> <em>maxSize</em> = <code>0</code> </td>
164
+ <td>&nbsp;)&nbsp;</td>
165
+ <td><code> [inline]</code></td>
166
+ </tr>
167
+ </table>
168
+ </div>
169
+ <div class="memdoc">
170
+
171
+ <p>
172
+ Create a new <a class="el" href="classPassenger_1_1ScgiRequestParser.html" title="A parser for SCGI requests.">ScgiRequestParser</a>, ready to parse a request.
173
+ <p>
174
+ <dl compact><dt><b>Parameters:</b></dt><dd>
175
+ <table border="0" cellspacing="2" cellpadding="0">
176
+ <tr><td valign="top"></td><td valign="top"><em>maxSize</em>&nbsp;</td><td>The maximum size that the SCGI data is allowed to be, or 0 if no limit is desired. </td></tr>
177
+ </table>
178
+ </dl>
179
+
180
+ </div>
181
+ </div><p>
182
+ <hr><h2>Member Function Documentation</h2>
183
+ <a class="anchor" name="0498c9529029969d5a77e1f74f95baa3"></a><!-- doxytag: member="Passenger::ScgiRequestParser::feed" ref="0498c9529029969d5a77e1f74f95baa3" args="(const char *data, unsigned int size)" -->
184
+ <div class="memitem">
185
+ <div class="memproto">
186
+ <table class="memname">
187
+ <tr>
188
+ <td class="memname">unsigned int Passenger::ScgiRequestParser::feed </td>
189
+ <td>(</td>
190
+ <td class="paramtype">const char *&nbsp;</td>
191
+ <td class="paramname"> <em>data</em>, </td>
192
+ </tr>
193
+ <tr>
194
+ <td class="paramkey"></td>
195
+ <td></td>
196
+ <td class="paramtype">unsigned int&nbsp;</td>
197
+ <td class="paramname"> <em>size</em></td><td>&nbsp;</td>
198
+ </tr>
199
+ <tr>
200
+ <td></td>
201
+ <td>)</td>
202
+ <td></td><td></td><td><code> [inline]</code></td>
203
+ </tr>
204
+ </table>
205
+ </div>
206
+ <div class="memdoc">
207
+
208
+ <p>
209
+ Feed SCGI request data to the parser.
210
+ <p>
211
+ <dl compact><dt><b>Parameters:</b></dt><dd>
212
+ <table border="0" cellspacing="2" cellpadding="0">
213
+ <tr><td valign="top"></td><td valign="top"><em>data</em>&nbsp;</td><td>The data to feed. </td></tr>
214
+ <tr><td valign="top"></td><td valign="top"><em>size</em>&nbsp;</td><td>The size of the data, in bytes. </td></tr>
215
+ </table>
216
+ </dl>
217
+ <dl class="return" compact><dt><b>Returns:</b></dt><dd>The number of recognized SCGI header bytes. If this value equals 'size', then it means all data in 'data' is part of the SCGI header. If this value is less than size, then it means only some data in 'data' is part of the SCGI header, and the remaining 'size - result' bytes are part of the request body. </dd></dl>
218
+ <dl class="pre" compact><dt><b>Precondition:</b></dt><dd>size &gt; 0 </dd></dl>
219
+ <dl class="post" compact><dt><b>Postcondition:</b></dt><dd>result &lt;= size <p>
220
+ if result &lt;= size: <a class="el" href="classPassenger_1_1ScgiRequestParser.html#5bd7dbce81c69ae9e3462e84daf09012" title="Get the parser&#39;s current state.">getState()</a> == DONE || <a class="el" href="classPassenger_1_1ScgiRequestParser.html#5bd7dbce81c69ae9e3462e84daf09012" title="Get the parser&#39;s current state.">getState()</a> == ERROR </dd></dl>
221
+
222
+ </div>
223
+ </div><p>
224
+ <a class="anchor" name="4114253f47d3e7e5c0dddc3cd11c5596"></a><!-- doxytag: member="Passenger::ScgiRequestParser::getErrorReason" ref="4114253f47d3e7e5c0dddc3cd11c5596" args="() const " -->
225
+ <div class="memitem">
226
+ <div class="memproto">
227
+ <table class="memname">
228
+ <tr>
229
+ <td class="memname"><a class="el" href="classPassenger_1_1ScgiRequestParser.html#495e2aec6deffd64fd3d53dc81379f8b">ErrorReason</a> Passenger::ScgiRequestParser::getErrorReason </td>
230
+ <td>(</td>
231
+ <td class="paramname"> </td>
232
+ <td>&nbsp;)&nbsp;</td>
233
+ <td> const<code> [inline]</code></td>
234
+ </tr>
235
+ </table>
236
+ </div>
237
+ <div class="memdoc">
238
+
239
+ <p>
240
+ Returns the reason why the parser entered the error state.
241
+ <p>
242
+ <dl class="pre" compact><dt><b>Precondition:</b></dt><dd><a class="el" href="classPassenger_1_1ScgiRequestParser.html#5bd7dbce81c69ae9e3462e84daf09012" title="Get the parser&#39;s current state.">getState()</a> == ERROR </dd></dl>
243
+
244
+ </div>
245
+ </div><p>
246
+ <a class="anchor" name="82321480ad2f8ac7ba58ff865131f6b4"></a><!-- doxytag: member="Passenger::ScgiRequestParser::getHeader" ref="82321480ad2f8ac7ba58ff865131f6b4" args="(const StaticString &amp;name) const " -->
247
+ <div class="memitem">
248
+ <div class="memproto">
249
+ <table class="memname">
250
+ <tr>
251
+ <td class="memname"><a class="el" href="classPassenger_1_1StaticString.html">StaticString</a> Passenger::ScgiRequestParser::getHeader </td>
252
+ <td>(</td>
253
+ <td class="paramtype">const <a class="el" href="classPassenger_1_1StaticString.html">StaticString</a> &amp;&nbsp;</td>
254
+ <td class="paramname"> <em>name</em> </td>
255
+ <td>&nbsp;)&nbsp;</td>
256
+ <td> const<code> [inline]</code></td>
257
+ </tr>
258
+ </table>
259
+ </div>
260
+ <div class="memdoc">
261
+
262
+ <p>
263
+ Get the value of the header with the given name.
264
+ <p>
265
+ Lookup is case-sensitive.<p>
266
+ Returns the empty string if there is no such header.<p>
267
+ <dl class="pre" compact><dt><b>Precondition:</b></dt><dd><a class="el" href="classPassenger_1_1ScgiRequestParser.html#5bd7dbce81c69ae9e3462e84daf09012" title="Get the parser&#39;s current state.">getState()</a> == DONE </dd></dl>
268
+
269
+ </div>
270
+ </div><p>
271
+ <a class="anchor" name="d82e358a0ad051ab2bdd2374e9ab4ff8"></a><!-- doxytag: member="Passenger::ScgiRequestParser::hasHeader" ref="d82e358a0ad051ab2bdd2374e9ab4ff8" args="(const StaticString &amp;name) const " -->
272
+ <div class="memitem">
273
+ <div class="memproto">
274
+ <table class="memname">
275
+ <tr>
276
+ <td class="memname">bool Passenger::ScgiRequestParser::hasHeader </td>
277
+ <td>(</td>
278
+ <td class="paramtype">const <a class="el" href="classPassenger_1_1StaticString.html">StaticString</a> &amp;&nbsp;</td>
279
+ <td class="paramname"> <em>name</em> </td>
280
+ <td>&nbsp;)&nbsp;</td>
281
+ <td> const<code> [inline]</code></td>
282
+ </tr>
283
+ </table>
284
+ </div>
285
+ <div class="memdoc">
286
+
287
+ <p>
288
+ Checks whether there is a header with the given name.
289
+ <p>
290
+ Lookup is case-sensitive.<p>
291
+ <dl class="pre" compact><dt><b>Precondition:</b></dt><dd><a class="el" href="classPassenger_1_1ScgiRequestParser.html#5bd7dbce81c69ae9e3462e84daf09012" title="Get the parser&#39;s current state.">getState()</a> == DONE </dd></dl>
292
+
293
+ </div>
294
+ </div><p>
295
+ <hr>The documentation for this class was generated from the following file:<ul>
296
+ <li><a class="el" href="ScgiRequestParser_8h-source.html">ScgiRequestParser.h</a></ul>
297
+ </div>
298
+ <hr size="1"><address style="text-align: right;"><small>Generated on Sun Feb 21 12:22:48 2010 for Passenger by&nbsp;
299
+ <a href="http://www.doxygen.org/index.html">
300
+ <img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
301
+ </body>
302
+ </html>
@@ -0,0 +1,33 @@
1
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2
+ <html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
3
+ <title>Passenger: Member List</title>
4
+ <link href="tabs.css" rel="stylesheet" type="text/css">
5
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
6
+ </head><body>
7
+ <!-- Generated by Doxygen 1.5.8 -->
8
+ <div class="navigation" id="top">
9
+ <div class="tabs">
10
+ <ul>
11
+ <li><a href="main.html"><span>Main&nbsp;Page</span></a></li>
12
+ <li><a href="modules.html"><span>Modules</span></a></li>
13
+ <li><a href="namespaces.html"><span>Namespaces</span></a></li>
14
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
15
+ <li><a href="files.html"><span>Files</span></a></li>
16
+ </ul>
17
+ </div>
18
+ <div class="tabs">
19
+ <ul>
20
+ <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
21
+ <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
22
+ <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
23
+ </ul>
24
+ </div>
25
+ </div>
26
+ <div class="contents">
27
+ <h1>Passenger::SecurityException Member List</h1>This is the complete list of members for <a class="el" href="classPassenger_1_1SecurityException.html">Passenger::SecurityException</a>, including all inherited members.<p><table>
28
+ </table></div>
29
+ <hr size="1"><address style="text-align: right;"><small>Generated on Sun Feb 21 12:22:48 2010 for Passenger by&nbsp;
30
+ <a href="http://www.doxygen.org/index.html">
31
+ <img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
32
+ </body>
33
+ </html>
@@ -0,0 +1,52 @@
1
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2
+ <html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
3
+ <title>Passenger: Passenger::SecurityException Class Reference</title>
4
+ <link href="tabs.css" rel="stylesheet" type="text/css">
5
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
6
+ </head><body>
7
+ <!-- Generated by Doxygen 1.5.8 -->
8
+ <div class="navigation" id="top">
9
+ <div class="tabs">
10
+ <ul>
11
+ <li><a href="main.html"><span>Main&nbsp;Page</span></a></li>
12
+ <li><a href="modules.html"><span>Modules</span></a></li>
13
+ <li><a href="namespaces.html"><span>Namespaces</span></a></li>
14
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
15
+ <li><a href="files.html"><span>Files</span></a></li>
16
+ </ul>
17
+ </div>
18
+ <div class="tabs">
19
+ <ul>
20
+ <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
21
+ <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
22
+ <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
23
+ </ul>
24
+ </div>
25
+ <div class="navpath"><a class="el" href="namespacePassenger.html">Passenger</a>::<a class="el" href="classPassenger_1_1SecurityException.html">SecurityException</a>
26
+ </div>
27
+ </div>
28
+ <div class="contents">
29
+ <h1>Passenger::SecurityException Class Reference<br>
30
+ <small>
31
+ [<a class="el" href="group__Exceptions.html">Exceptions</a>]</small>
32
+ </h1><!-- doxytag: class="Passenger::SecurityException" -->Represents some kind of security error.
33
+ <a href="#_details">More...</a>
34
+ <p>
35
+ <code>#include &lt;<a class="el" href="Exceptions_8h-source.html">Exceptions.h</a>&gt;</code>
36
+ <p>
37
+ Inherited by Passenger::NonExistentGroupException, and Passenger::NonExistentUserException.
38
+ <p>
39
+
40
+ <p>
41
+ <a href="classPassenger_1_1SecurityException-members.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
42
+ <tr><td></td></tr>
43
+ </table>
44
+ <hr><a name="_details"></a><h2>Detailed Description</h2>
45
+ Represents some kind of security error. <hr>The documentation for this class was generated from the following file:<ul>
46
+ <li><a class="el" href="Exceptions_8h-source.html">Exceptions.h</a></ul>
47
+ </div>
48
+ <hr size="1"><address style="text-align: right;"><small>Generated on Sun Feb 21 12:22:48 2010 for Passenger by&nbsp;
49
+ <a href="http://www.doxygen.org/index.html">
50
+ <img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
51
+ </body>
52
+ </html>
@@ -0,0 +1,50 @@
1
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2
+ <html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
3
+ <title>Passenger: Member List</title>
4
+ <link href="tabs.css" rel="stylesheet" type="text/css">
5
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
6
+ </head><body>
7
+ <!-- Generated by Doxygen 1.5.8 -->
8
+ <div class="navigation" id="top">
9
+ <div class="tabs">
10
+ <ul>
11
+ <li><a href="main.html"><span>Main&nbsp;Page</span></a></li>
12
+ <li><a href="modules.html"><span>Modules</span></a></li>
13
+ <li><a href="namespaces.html"><span>Namespaces</span></a></li>
14
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
15
+ <li><a href="files.html"><span>Files</span></a></li>
16
+ </ul>
17
+ </div>
18
+ <div class="tabs">
19
+ <ul>
20
+ <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
21
+ <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
22
+ <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
23
+ </ul>
24
+ </div>
25
+ </div>
26
+ <div class="contents">
27
+ <h1>Passenger::Session Member List</h1>This is the complete list of members for <a class="el" href="classPassenger_1_1Session.html">Passenger::Session</a>, including all inherited members.<p><table>
28
+ <tr class="memlist"><td><a class="el" href="classPassenger_1_1Session.html#7ab85388f15388cb8e65873d1ad310a5">closeStream</a>()=0</td><td><a class="el" href="classPassenger_1_1Session.html">Passenger::Session</a></td><td><code> [pure virtual]</code></td></tr>
29
+ <tr class="memlist"><td><a class="el" href="classPassenger_1_1Session.html#75344fdfb3c693323877e32884efaa31">discardStream</a>()=0</td><td><a class="el" href="classPassenger_1_1Session.html">Passenger::Session</a></td><td><code> [pure virtual]</code></td></tr>
30
+ <tr class="memlist"><td><a class="el" href="classPassenger_1_1Session.html#eaf4f7097f7b3430dc88e8070cad5899">getConnectPassword</a>() const </td><td><a class="el" href="classPassenger_1_1Session.html">Passenger::Session</a></td><td><code> [inline]</code></td></tr>
31
+ <tr class="memlist"><td><a class="el" href="classPassenger_1_1Session.html#1b58af5493a61bfe4efbd725dcef61a3">getPid</a>() const =0</td><td><a class="el" href="classPassenger_1_1Session.html">Passenger::Session</a></td><td><code> [pure virtual]</code></td></tr>
32
+ <tr class="memlist"><td><a class="el" href="classPassenger_1_1Session.html#7b8a632ebde11544a8ab98fde89954bb">getSocketName</a>() const =0</td><td><a class="el" href="classPassenger_1_1Session.html">Passenger::Session</a></td><td><code> [pure virtual]</code></td></tr>
33
+ <tr class="memlist"><td><a class="el" href="classPassenger_1_1Session.html#b8f084ab143d44f1a9ef8e8ccc841485">getSocketType</a>() const =0</td><td><a class="el" href="classPassenger_1_1Session.html">Passenger::Session</a></td><td><code> [pure virtual]</code></td></tr>
34
+ <tr class="memlist"><td><a class="el" href="classPassenger_1_1Session.html#949c7a46f4bb0c628730ded2041d2489">getStream</a>() const =0</td><td><a class="el" href="classPassenger_1_1Session.html">Passenger::Session</a></td><td><code> [pure virtual]</code></td></tr>
35
+ <tr class="memlist"><td><a class="el" href="classPassenger_1_1Session.html#bbcfa3eb48d38dead20c0d32cab4850b">initiate</a>()=0</td><td><a class="el" href="classPassenger_1_1Session.html">Passenger::Session</a></td><td><code> [pure virtual]</code></td></tr>
36
+ <tr class="memlist"><td><a class="el" href="classPassenger_1_1Session.html#bf1b6ba182a0fc66c8e617f74afafb92">initiated</a>() const =0</td><td><a class="el" href="classPassenger_1_1Session.html">Passenger::Session</a></td><td><code> [pure virtual]</code></td></tr>
37
+ <tr class="memlist"><td><a class="el" href="classPassenger_1_1Session.html#2203d81e25fe5066aed351608deecf7b">sendBodyBlock</a>(const char *block, unsigned int size)</td><td><a class="el" href="classPassenger_1_1Session.html">Passenger::Session</a></td><td><code> [inline, virtual]</code></td></tr>
38
+ <tr class="memlist"><td><a class="el" href="classPassenger_1_1Session.html#8f8a39f78dd2672b00f1ff01e4d6d671">sendHeaders</a>(const char *headers, unsigned int size)</td><td><a class="el" href="classPassenger_1_1Session.html">Passenger::Session</a></td><td><code> [inline, virtual]</code></td></tr>
39
+ <tr class="memlist"><td><a class="el" href="classPassenger_1_1Session.html#8253d81e64adc0dc72b1dc65a5117aba">sendHeaders</a>(const StaticString &amp;headers)</td><td><a class="el" href="classPassenger_1_1Session.html">Passenger::Session</a></td><td><code> [inline, virtual]</code></td></tr>
40
+ <tr class="memlist"><td><a class="el" href="classPassenger_1_1Session.html#5accbd8f7cce66d0ef6695481fdaa39c">setReaderTimeout</a>(unsigned int msec)=0</td><td><a class="el" href="classPassenger_1_1Session.html">Passenger::Session</a></td><td><code> [pure virtual]</code></td></tr>
41
+ <tr class="memlist"><td><a class="el" href="classPassenger_1_1Session.html#21dd749c0c8d22f65c6a914ec2f97c94">setWriterTimeout</a>(unsigned int msec)=0</td><td><a class="el" href="classPassenger_1_1Session.html">Passenger::Session</a></td><td><code> [pure virtual]</code></td></tr>
42
+ <tr class="memlist"><td><a class="el" href="classPassenger_1_1Session.html#c579d233ddc82542c336b2af1f40c4dd">shutdownReader</a>()=0</td><td><a class="el" href="classPassenger_1_1Session.html">Passenger::Session</a></td><td><code> [pure virtual]</code></td></tr>
43
+ <tr class="memlist"><td><a class="el" href="classPassenger_1_1Session.html#8263c568a8ac4567b33728d820cbd920">shutdownWriter</a>()=0</td><td><a class="el" href="classPassenger_1_1Session.html">Passenger::Session</a></td><td><code> [pure virtual]</code></td></tr>
44
+ <tr class="memlist"><td><a class="el" href="classPassenger_1_1Session.html#c982015e84f64dbec70daef8fdbd31d9">~Session</a>()</td><td><a class="el" href="classPassenger_1_1Session.html">Passenger::Session</a></td><td><code> [inline, virtual]</code></td></tr>
45
+ </table></div>
46
+ <hr size="1"><address style="text-align: right;"><small>Generated on Sun Feb 21 12:22:48 2010 for Passenger by&nbsp;
47
+ <a href="http://www.doxygen.org/index.html">
48
+ <img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
49
+ </body>
50
+ </html>
@@ -0,0 +1,577 @@
1
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2
+ <html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
3
+ <title>Passenger: Passenger::Session Class Reference</title>
4
+ <link href="tabs.css" rel="stylesheet" type="text/css">
5
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
6
+ </head><body>
7
+ <!-- Generated by Doxygen 1.5.8 -->
8
+ <div class="navigation" id="top">
9
+ <div class="tabs">
10
+ <ul>
11
+ <li><a href="main.html"><span>Main&nbsp;Page</span></a></li>
12
+ <li><a href="modules.html"><span>Modules</span></a></li>
13
+ <li><a href="namespaces.html"><span>Namespaces</span></a></li>
14
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
15
+ <li><a href="files.html"><span>Files</span></a></li>
16
+ </ul>
17
+ </div>
18
+ <div class="tabs">
19
+ <ul>
20
+ <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
21
+ <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
22
+ <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
23
+ </ul>
24
+ </div>
25
+ <div class="navpath"><a class="el" href="namespacePassenger.html">Passenger</a>::<a class="el" href="classPassenger_1_1Session.html">Session</a>
26
+ </div>
27
+ </div>
28
+ <div class="contents">
29
+ <h1>Passenger::Session Class Reference</h1><!-- doxytag: class="Passenger::Session" -->Represents a single request/response pair of an application process.
30
+ <a href="#_details">More...</a>
31
+ <p>
32
+ <code>#include &lt;<a class="el" href="Session_8h-source.html">Session.h</a>&gt;</code>
33
+ <p>
34
+ <div class="dynheader">
35
+ Inheritance diagram for Passenger::Session:</div>
36
+ <div class="dynsection">
37
+ <p><center><img src="classPassenger_1_1Session__inherit__graph.png" border="0" usemap="#Passenger_1_1Session__inherit__map" alt="Inheritance graph"></center>
38
+ <map name="Passenger_1_1Session__inherit__map">
39
+ <area shape="rect" href="classPassenger_1_1StandardSession.html" title="A &quot;standard&quot; implementation of Session." alt="" coords="5,80,203,107"></map>
40
+ <center><font size="2">[<a target="top" href="graph_legend.html">legend</a>]</font></center></div>
41
+
42
+ <p>
43
+ <a href="classPassenger_1_1Session-members.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
44
+ <tr><td></td></tr>
45
+ <tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
46
+ <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c982015e84f64dbec70daef8fdbd31d9"></a><!-- doxytag: member="Passenger::Session::~Session" ref="c982015e84f64dbec70daef8fdbd31d9" args="()" -->
47
+ virtual&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1Session.html#c982015e84f64dbec70daef8fdbd31d9">~Session</a> ()</td></tr>
48
+
49
+ <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Concrete classes might throw arbitrary exceptions. <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_1Session.html#bbcfa3eb48d38dead20c0d32cab4850b">initiate</a> ()=0</td></tr>
51
+
52
+ <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Initiate the session by connecting to the associated process. <a href="#bbcfa3eb48d38dead20c0d32cab4850b"></a><br></td></tr>
53
+ <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="bf1b6ba182a0fc66c8e617f74afafb92"></a><!-- doxytag: member="Passenger::Session::initiated" ref="bf1b6ba182a0fc66c8e617f74afafb92" args="() const =0" -->
54
+ virtual bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1Session.html#bf1b6ba182a0fc66c8e617f74afafb92">initiated</a> () const =0</td></tr>
55
+
56
+ <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns whether this session has been initiated (that is, whether <a class="el" href="classPassenger_1_1Session.html#bbcfa3eb48d38dead20c0d32cab4850b" title="Initiate the session by connecting to the associated process.">initiate()</a> had been called in the past). <br></td></tr>
57
+ <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual string&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1Session.html#b8f084ab143d44f1a9ef8e8ccc841485">getSocketType</a> () const =0</td></tr>
58
+
59
+ <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the type of the socket that this session is served from, e.g. <a href="#b8f084ab143d44f1a9ef8e8ccc841485"></a><br></td></tr>
60
+ <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual string&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1Session.html#7b8a632ebde11544a8ab98fde89954bb">getSocketName</a> () const =0</td></tr>
61
+
62
+ <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the address of the socket that this session is served from. <a href="#7b8a632ebde11544a8ab98fde89954bb"></a><br></td></tr>
63
+ <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1Session.html#8f8a39f78dd2672b00f1ff01e4d6d671">sendHeaders</a> (const char *headers, unsigned int size)</td></tr>
64
+
65
+ <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Send HTTP request headers to the application. <a href="#8f8a39f78dd2672b00f1ff01e4d6d671"></a><br></td></tr>
66
+ <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1Session.html#8253d81e64adc0dc72b1dc65a5117aba">sendHeaders</a> (const <a class="el" href="classPassenger_1_1StaticString.html">StaticString</a> &amp;headers)</td></tr>
67
+
68
+ <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Convenience shortcut for <a class="el" href="classPassenger_1_1Session.html#8f8a39f78dd2672b00f1ff01e4d6d671" title="Send HTTP request headers to the application.">sendHeaders(const char *, unsigned int)</a>. <a href="#8253d81e64adc0dc72b1dc65a5117aba"></a><br></td></tr>
69
+ <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1Session.html#2203d81e25fe5066aed351608deecf7b">sendBodyBlock</a> (const char *block, unsigned int size)</td></tr>
70
+
71
+ <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Send a chunk of HTTP request body data to the application. <a href="#2203d81e25fe5066aed351608deecf7b"></a><br></td></tr>
72
+ <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1Session.html#949c7a46f4bb0c628730ded2041d2489">getStream</a> () const =0</td></tr>
73
+
74
+ <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns this session's channel's file descriptor. <a href="#949c7a46f4bb0c628730ded2041d2489"></a><br></td></tr>
75
+ <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1Session.html#5accbd8f7cce66d0ef6695481fdaa39c">setReaderTimeout</a> (unsigned int msec)=0</td></tr>
76
+
77
+ <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set the timeout value for reading data from the I/O channel. <a href="#5accbd8f7cce66d0ef6695481fdaa39c"></a><br></td></tr>
78
+ <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1Session.html#21dd749c0c8d22f65c6a914ec2f97c94">setWriterTimeout</a> (unsigned int msec)=0</td></tr>
79
+
80
+ <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set the timeout value for writing data from the I/O channel. <a href="#21dd749c0c8d22f65c6a914ec2f97c94"></a><br></td></tr>
81
+ <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1Session.html#c579d233ddc82542c336b2af1f40c4dd">shutdownReader</a> ()=0</td></tr>
82
+
83
+ <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Indicate that we don't want to read data anymore from the I/O channel. <a href="#c579d233ddc82542c336b2af1f40c4dd"></a><br></td></tr>
84
+ <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1Session.html#8263c568a8ac4567b33728d820cbd920">shutdownWriter</a> ()=0</td></tr>
85
+
86
+ <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Indicate that we don't want to write data anymore to the I/O channel. <a href="#8263c568a8ac4567b33728d820cbd920"></a><br></td></tr>
87
+ <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1Session.html#7ab85388f15388cb8e65873d1ad310a5">closeStream</a> ()=0</td></tr>
88
+
89
+ <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Close the I/O stream. <a href="#7ab85388f15388cb8e65873d1ad310a5"></a><br></td></tr>
90
+ <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1Session.html#75344fdfb3c693323877e32884efaa31">discardStream</a> ()=0</td></tr>
91
+
92
+ <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Discard the I/O channel's file descriptor, so that the destructor won't automatically close it. <a href="#75344fdfb3c693323877e32884efaa31"></a><br></td></tr>
93
+ <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="1b58af5493a61bfe4efbd725dcef61a3"></a><!-- doxytag: member="Passenger::Session::getPid" ref="1b58af5493a61bfe4efbd725dcef61a3" args="() const =0" -->
94
+ virtual pid_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1Session.html#1b58af5493a61bfe4efbd725dcef61a3">getPid</a> () const =0</td></tr>
95
+
96
+ <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get the process ID of the application process that this session belongs to. <br></td></tr>
97
+ <tr><td class="memItemLeft" nowrap align="right" valign="top">const string&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1Session.html#eaf4f7097f7b3430dc88e8070cad5899">getConnectPassword</a> () const </td></tr>
98
+
99
+ <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns this session's process's connect password. <a href="#eaf4f7097f7b3430dc88e8070cad5899"></a><br></td></tr>
100
+ </table>
101
+ <hr><a name="_details"></a><h2>Detailed Description</h2>
102
+ Represents a single request/response pair of an application process.
103
+ <p>
104
+ <a class="el" href="classPassenger_1_1Session.html" title="Represents a single request/response pair of an application process.">Session</a> is used to forward a single HTTP request to an application process, and to read back the HTTP response. A <a class="el" href="classPassenger_1_1Session.html" title="Represents a single request/response pair of an application process.">Session</a> object is to be used in the following manner:<p>
105
+ <ol type=1>
106
+ <li>Serialize the HTTP request headers into a format as expected by <a class="el" href="classPassenger_1_1Session.html#8f8a39f78dd2672b00f1ff01e4d6d671" title="Send HTTP request headers to the application.">sendHeaders()</a>, then send that string by calling <a class="el" href="classPassenger_1_1Session.html#8f8a39f78dd2672b00f1ff01e4d6d671" 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_1Session.html#2203d81e25fe5066aed351608deecf7b" title="Send a chunk of HTTP request body data to the application.">sendBodyBlock()</a>, possibly multiple times.</li><li>Shutdown the writer end of the session channel (<a class="el" href="classPassenger_1_1Session.html#8263c568a8ac4567b33728d820cbd920" title="Indicate that we don&#39;t want to write data anymore to the I/O channel.">shutdownWriter()</a>) since you're now done sending data.</li><li>The HTTP response can now be read through the session channel (<a class="el" href="classPassenger_1_1Session.html#949c7a46f4bb0c628730ded2041d2489" title="Returns this session&#39;s channel&#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_1Session.html" title="Represents a single request/response pair of an application process.">Session</a> object.</li></ol>
107
+ <p>
108
+ A usage example is shown in <a class="el" href="classPassenger_1_1Process.html#a5bd9ad8220bf64e5edf3d025004547a" title="Request a new session from this application process by connecting to its main server...">Process::newSession()</a>.<p>
109
+ <a class="el" href="classPassenger_1_1Session.html" title="Represents a single request/response pair of an application process.">Session</a> is an abstract base class. Concrete implementations can be found in <a class="el" href="classPassenger_1_1StandardSession.html" title="A &quot;standard&quot; implementation of Session.">StandardSession</a> and ApplicationPool::Client::RemoteSession.<p>
110
+ <a class="el" href="classPassenger_1_1Session.html" title="Represents a single request/response pair of an application process.">Session</a> is not guaranteed to be thread-safe. <hr><h2>Member Function Documentation</h2>
111
+ <a class="anchor" name="7ab85388f15388cb8e65873d1ad310a5"></a><!-- doxytag: member="Passenger::Session::closeStream" ref="7ab85388f15388cb8e65873d1ad310a5" args="()=0" -->
112
+ <div class="memitem">
113
+ <div class="memproto">
114
+ <table class="memname">
115
+ <tr>
116
+ <td class="memname">virtual void Passenger::Session::closeStream </td>
117
+ <td>(</td>
118
+ <td class="paramname"> </td>
119
+ <td>&nbsp;)&nbsp;</td>
120
+ <td><code> [pure virtual]</code></td>
121
+ </tr>
122
+ </table>
123
+ </div>
124
+ <div class="memdoc">
125
+
126
+ <p>
127
+ Close the I/O stream.
128
+ <p>
129
+ <dl compact><dt><b>Exceptions:</b></dt><dd>
130
+ <table border="0" cellspacing="2" cellpadding="0">
131
+ <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>
132
+ <tr><td valign="top"></td><td valign="top"><em>boost::thread_interrupted</em>&nbsp;</td><td></td></tr>
133
+ </table>
134
+ </dl>
135
+ <dl class="pre" compact><dt><b>Precondition:</b></dt><dd><a class="el" href="classPassenger_1_1Session.html#bf1b6ba182a0fc66c8e617f74afafb92" title="Returns whether this session has been initiated (that is, whether initiate() had...">initiated()</a> </dd></dl>
136
+ <dl class="post" compact><dt><b>Postcondition:</b></dt><dd><a class="el" href="classPassenger_1_1Session.html#949c7a46f4bb0c628730ded2041d2489" title="Returns this session&#39;s channel&#39;s file descriptor.">getStream()</a> == -1 </dd></dl>
137
+
138
+ <p>Implemented in <a class="el" href="classPassenger_1_1StandardSession.html#f5cdfa78db1fca6303ccd43ac5126b6b">Passenger::StandardSession</a>.</p>
139
+
140
+ </div>
141
+ </div><p>
142
+ <a class="anchor" name="75344fdfb3c693323877e32884efaa31"></a><!-- doxytag: member="Passenger::Session::discardStream" ref="75344fdfb3c693323877e32884efaa31" args="()=0" -->
143
+ <div class="memitem">
144
+ <div class="memproto">
145
+ <table class="memname">
146
+ <tr>
147
+ <td class="memname">virtual void Passenger::Session::discardStream </td>
148
+ <td>(</td>
149
+ <td class="paramname"> </td>
150
+ <td>&nbsp;)&nbsp;</td>
151
+ <td><code> [pure virtual]</code></td>
152
+ </tr>
153
+ </table>
154
+ </div>
155
+ <div class="memdoc">
156
+
157
+ <p>
158
+ Discard the I/O channel's file descriptor, so that the destructor won't automatically close it.
159
+ <p>
160
+ <dl class="pre" compact><dt><b>Precondition:</b></dt><dd><a class="el" href="classPassenger_1_1Session.html#bf1b6ba182a0fc66c8e617f74afafb92" title="Returns whether this session has been initiated (that is, whether initiate() had...">initiated()</a> </dd></dl>
161
+ <dl class="post" compact><dt><b>Postcondition:</b></dt><dd><a class="el" href="classPassenger_1_1Session.html#949c7a46f4bb0c628730ded2041d2489" title="Returns this session&#39;s channel&#39;s file descriptor.">getStream()</a> == -1 </dd></dl>
162
+
163
+ <p>Implemented in <a class="el" href="classPassenger_1_1StandardSession.html#3666d401df82696fe945fcbb66804785">Passenger::StandardSession</a>.</p>
164
+
165
+ </div>
166
+ </div><p>
167
+ <a class="anchor" name="eaf4f7097f7b3430dc88e8070cad5899"></a><!-- doxytag: member="Passenger::Session::getConnectPassword" ref="eaf4f7097f7b3430dc88e8070cad5899" args="() const " -->
168
+ <div class="memitem">
169
+ <div class="memproto">
170
+ <table class="memname">
171
+ <tr>
172
+ <td class="memname">const string Passenger::Session::getConnectPassword </td>
173
+ <td>(</td>
174
+ <td class="paramname"> </td>
175
+ <td>&nbsp;)&nbsp;</td>
176
+ <td> const<code> [inline]</code></td>
177
+ </tr>
178
+ </table>
179
+ </div>
180
+ <div class="memdoc">
181
+
182
+ <p>
183
+ Returns this session's process's connect password.
184
+ <p>
185
+ This password is guaranteed to be valid ASCII.
186
+ </div>
187
+ </div><p>
188
+ <a class="anchor" name="7b8a632ebde11544a8ab98fde89954bb"></a><!-- doxytag: member="Passenger::Session::getSocketName" ref="7b8a632ebde11544a8ab98fde89954bb" args="() const =0" -->
189
+ <div class="memitem">
190
+ <div class="memproto">
191
+ <table class="memname">
192
+ <tr>
193
+ <td class="memname">virtual string Passenger::Session::getSocketName </td>
194
+ <td>(</td>
195
+ <td class="paramname"> </td>
196
+ <td>&nbsp;)&nbsp;</td>
197
+ <td> const<code> [pure virtual]</code></td>
198
+ </tr>
199
+ </table>
200
+ </div>
201
+ <div class="memdoc">
202
+
203
+ <p>
204
+ Returns the address of the socket that this session is served from.
205
+ <p>
206
+ This can be a Unix socket filename or a TCP host:port string like "127.0.0.1:1234".<p>
207
+ <dl class="post" compact><dt><b>Postcondition:</b></dt><dd>!result.empty() </dd></dl>
208
+
209
+ <p>Implemented in <a class="el" href="classPassenger_1_1StandardSession.html#720e98b8dd246eeca004c8e625c0d4d3">Passenger::StandardSession</a>.</p>
210
+
211
+ </div>
212
+ </div><p>
213
+ <a class="anchor" name="b8f084ab143d44f1a9ef8e8ccc841485"></a><!-- doxytag: member="Passenger::Session::getSocketType" ref="b8f084ab143d44f1a9ef8e8ccc841485" args="() const =0" -->
214
+ <div class="memitem">
215
+ <div class="memproto">
216
+ <table class="memname">
217
+ <tr>
218
+ <td class="memname">virtual string Passenger::Session::getSocketType </td>
219
+ <td>(</td>
220
+ <td class="paramname"> </td>
221
+ <td>&nbsp;)&nbsp;</td>
222
+ <td> const<code> [pure virtual]</code></td>
223
+ </tr>
224
+ </table>
225
+ </div>
226
+ <div class="memdoc">
227
+
228
+ <p>
229
+ Returns the type of the socket that this session is served from, e.g.
230
+ <p>
231
+ "unix" indicating a Unix socket.<p>
232
+ <dl class="post" compact><dt><b>Postcondition:</b></dt><dd>!result.empty() </dd></dl>
233
+
234
+ <p>Implemented in <a class="el" href="classPassenger_1_1StandardSession.html#3a59997280d5f7fcaa901716cd8451a2">Passenger::StandardSession</a>.</p>
235
+
236
+ </div>
237
+ </div><p>
238
+ <a class="anchor" name="949c7a46f4bb0c628730ded2041d2489"></a><!-- doxytag: member="Passenger::Session::getStream" ref="949c7a46f4bb0c628730ded2041d2489" args="() const =0" -->
239
+ <div class="memitem">
240
+ <div class="memproto">
241
+ <table class="memname">
242
+ <tr>
243
+ <td class="memname">virtual int Passenger::Session::getStream </td>
244
+ <td>(</td>
245
+ <td class="paramname"> </td>
246
+ <td>&nbsp;)&nbsp;</td>
247
+ <td> const<code> [pure virtual]</code></td>
248
+ </tr>
249
+ </table>
250
+ </div>
251
+ <div class="memdoc">
252
+
253
+ <p>
254
+ Returns this session's channel's file descriptor.
255
+ <p>
256
+ This stream is full-duplex, and will be automatically closed upon Session's destruction, unless <a class="el" href="classPassenger_1_1Session.html#75344fdfb3c693323877e32884efaa31" title="Discard the I/O channel&#39;s file descriptor, so that the destructor won&#39;t automatically...">discardStream()</a> is called.<p>
257
+ <dl class="pre" compact><dt><b>Precondition:</b></dt><dd><a class="el" href="classPassenger_1_1Session.html#bf1b6ba182a0fc66c8e617f74afafb92" title="Returns whether this session has been initiated (that is, whether initiate() had...">initiated()</a> </dd></dl>
258
+ <dl class="return" compact><dt><b>Returns:</b></dt><dd>The file descriptor, or -1 if the I/O channel has already been closed or discarded. </dd></dl>
259
+
260
+ <p>Implemented in <a class="el" href="classPassenger_1_1StandardSession.html#a3491d2151ba3b94c1b19a4f18bade6a">Passenger::StandardSession</a>.</p>
261
+
262
+ </div>
263
+ </div><p>
264
+ <a class="anchor" name="bbcfa3eb48d38dead20c0d32cab4850b"></a><!-- doxytag: member="Passenger::Session::initiate" ref="bbcfa3eb48d38dead20c0d32cab4850b" args="()=0" -->
265
+ <div class="memitem">
266
+ <div class="memproto">
267
+ <table class="memname">
268
+ <tr>
269
+ <td class="memname">virtual void Passenger::Session::initiate </td>
270
+ <td>(</td>
271
+ <td class="paramname"> </td>
272
+ <td>&nbsp;)&nbsp;</td>
273
+ <td><code> [pure virtual]</code></td>
274
+ </tr>
275
+ </table>
276
+ </div>
277
+ <div class="memdoc">
278
+
279
+ <p>
280
+ Initiate the session by connecting to the associated process.
281
+ <p>
282
+ A <a class="el" href="classPassenger_1_1Session.html" title="Represents a single request/response pair of an application process.">Session</a> is not usable until it's initiated.<p>
283
+ <dl compact><dt><b>Exceptions:</b></dt><dd>
284
+ <table border="0" cellspacing="2" cellpadding="0">
285
+ <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>
286
+ <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>Something went wrong. </td></tr>
287
+ <tr><td valign="top"></td><td valign="top"><em>boost::thread_interrupted</em>&nbsp;</td><td></td></tr>
288
+ </table>
289
+ </dl>
290
+
291
+ <p>Implemented in <a class="el" href="classPassenger_1_1StandardSession.html#c283db6faf2fcd1827baf3ebac276677">Passenger::StandardSession</a>.</p>
292
+
293
+ </div>
294
+ </div><p>
295
+ <a class="anchor" name="2203d81e25fe5066aed351608deecf7b"></a><!-- doxytag: member="Passenger::Session::sendBodyBlock" ref="2203d81e25fe5066aed351608deecf7b" args="(const char *block, unsigned int size)" -->
296
+ <div class="memitem">
297
+ <div class="memproto">
298
+ <table class="memname">
299
+ <tr>
300
+ <td class="memname">virtual void Passenger::Session::sendBodyBlock </td>
301
+ <td>(</td>
302
+ <td class="paramtype">const char *&nbsp;</td>
303
+ <td class="paramname"> <em>block</em>, </td>
304
+ </tr>
305
+ <tr>
306
+ <td class="paramkey"></td>
307
+ <td></td>
308
+ <td class="paramtype">unsigned int&nbsp;</td>
309
+ <td class="paramname"> <em>size</em></td><td>&nbsp;</td>
310
+ </tr>
311
+ <tr>
312
+ <td></td>
313
+ <td>)</td>
314
+ <td></td><td></td><td><code> [inline, virtual]</code></td>
315
+ </tr>
316
+ </table>
317
+ </div>
318
+ <div class="memdoc">
319
+
320
+ <p>
321
+ Send a chunk of HTTP request body data to the application.
322
+ <p>
323
+ You can call this method as many times as is required to transfer the entire HTTP request body.<p>
324
+ This method must only be called after a <a class="el" href="classPassenger_1_1Session.html#8f8a39f78dd2672b00f1ff01e4d6d671" title="Send HTTP request headers to the application.">sendHeaders()</a>, otherwise strange things may happen.<p>
325
+ <dl compact><dt><b>Parameters:</b></dt><dd>
326
+ <table border="0" cellspacing="2" cellpadding="0">
327
+ <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>
328
+ <tr><td valign="top"></td><td valign="top"><em>size</em>&nbsp;</td><td>The size, in bytes, of <code>block</code>. </td></tr>
329
+ </table>
330
+ </dl>
331
+ <dl class="pre" compact><dt><b>Precondition:</b></dt><dd><a class="el" href="classPassenger_1_1Session.html#bf1b6ba182a0fc66c8e617f74afafb92" title="Returns whether this session has been initiated (that is, whether initiate() had...">initiated()</a> </dd></dl>
332
+ <dl compact><dt><b>Exceptions:</b></dt><dd>
333
+ <table border="0" cellspacing="2" cellpadding="0">
334
+ <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 I/O channel has already been closed or discarded. </td></tr>
335
+ <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>
336
+ <tr><td valign="top"></td><td valign="top"><em>boost::thread_interrupted</em>&nbsp;</td><td></td></tr>
337
+ </table>
338
+ </dl>
339
+
340
+ </div>
341
+ </div><p>
342
+ <a class="anchor" name="8253d81e64adc0dc72b1dc65a5117aba"></a><!-- doxytag: member="Passenger::Session::sendHeaders" ref="8253d81e64adc0dc72b1dc65a5117aba" args="(const StaticString &amp;headers)" -->
343
+ <div class="memitem">
344
+ <div class="memproto">
345
+ <table class="memname">
346
+ <tr>
347
+ <td class="memname">virtual void Passenger::Session::sendHeaders </td>
348
+ <td>(</td>
349
+ <td class="paramtype">const <a class="el" href="classPassenger_1_1StaticString.html">StaticString</a> &amp;&nbsp;</td>
350
+ <td class="paramname"> <em>headers</em> </td>
351
+ <td>&nbsp;)&nbsp;</td>
352
+ <td><code> [inline, virtual]</code></td>
353
+ </tr>
354
+ </table>
355
+ </div>
356
+ <div class="memdoc">
357
+
358
+ <p>
359
+ Convenience shortcut for <a class="el" href="classPassenger_1_1Session.html#8f8a39f78dd2672b00f1ff01e4d6d671" title="Send HTTP request headers to the application.">sendHeaders(const char *, unsigned int)</a>.
360
+ <p>
361
+ <dl compact><dt><b>Parameters:</b></dt><dd>
362
+ <table border="0" cellspacing="2" cellpadding="0">
363
+ <tr><td valign="top"></td><td valign="top"><em>headers</em>&nbsp;</td><td>The headers </td></tr>
364
+ </table>
365
+ </dl>
366
+ <dl class="pre" compact><dt><b>Precondition:</b></dt><dd><a class="el" href="classPassenger_1_1Session.html#bf1b6ba182a0fc66c8e617f74afafb92" title="Returns whether this session has been initiated (that is, whether initiate() had...">initiated()</a> </dd></dl>
367
+ <dl compact><dt><b>Exceptions:</b></dt><dd>
368
+ <table border="0" cellspacing="2" cellpadding="0">
369
+ <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 I/O channel has already been closed or discarded. </td></tr>
370
+ <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>
371
+ <tr><td valign="top"></td><td valign="top"><em>boost::thread_interrupted</em>&nbsp;</td><td></td></tr>
372
+ </table>
373
+ </dl>
374
+
375
+ </div>
376
+ </div><p>
377
+ <a class="anchor" name="8f8a39f78dd2672b00f1ff01e4d6d671"></a><!-- doxytag: member="Passenger::Session::sendHeaders" ref="8f8a39f78dd2672b00f1ff01e4d6d671" args="(const char *headers, unsigned int size)" -->
378
+ <div class="memitem">
379
+ <div class="memproto">
380
+ <table class="memname">
381
+ <tr>
382
+ <td class="memname">virtual void Passenger::Session::sendHeaders </td>
383
+ <td>(</td>
384
+ <td class="paramtype">const char *&nbsp;</td>
385
+ <td class="paramname"> <em>headers</em>, </td>
386
+ </tr>
387
+ <tr>
388
+ <td class="paramkey"></td>
389
+ <td></td>
390
+ <td class="paramtype">unsigned int&nbsp;</td>
391
+ <td class="paramname"> <em>size</em></td><td>&nbsp;</td>
392
+ </tr>
393
+ <tr>
394
+ <td></td>
395
+ <td>)</td>
396
+ <td></td><td></td><td><code> [inline, virtual]</code></td>
397
+ </tr>
398
+ </table>
399
+ </div>
400
+ <div class="memdoc">
401
+
402
+ <p>
403
+ Send HTTP request headers to the application.
404
+ <p>
405
+ The HTTP headers must be converted into CGI headers, and then encoded into a string that matches this grammar:<p>
406
+ <div class="fragment"><pre class="fragment">
407
+ headers ::= header*
408
+ header ::= name NUL value NUL
409
+ name ::= notnull+
410
+ value ::= notnull+
411
+ notnull ::= "\x01" | "\x02" | "\x02" | ... | "\xFF"
412
+ NUL = "\x00"
413
+ </pre></div><p>
414
+ There must be a header with the name "PASSWORD_CONNECT_PASSWORD", and it must have the same value as the string returned by <a class="el" href="classPassenger_1_1Session.html#eaf4f7097f7b3430dc88e8070cad5899" title="Returns this session&#39;s process&#39;s connect password.">getConnectPassword()</a>.<p>
415
+ This method should be the first one to be called during the lifetime of a <a class="el" href="classPassenger_1_1Session.html" title="Represents a single request/response pair of an application process.">Session</a> object, otherwise strange things may happen.<p>
416
+ <dl compact><dt><b>Parameters:</b></dt><dd>
417
+ <table border="0" cellspacing="2" cellpadding="0">
418
+ <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>
419
+ <tr><td valign="top"></td><td valign="top"><em>size</em>&nbsp;</td><td>The size, in bytes, of <code>headers</code>. </td></tr>
420
+ </table>
421
+ </dl>
422
+ <dl class="pre" compact><dt><b>Precondition:</b></dt><dd>headers != NULL <p>
423
+ <a class="el" href="classPassenger_1_1Session.html#bf1b6ba182a0fc66c8e617f74afafb92" title="Returns whether this session has been initiated (that is, whether initiate() had...">initiated()</a> </dd></dl>
424
+ <dl compact><dt><b>Exceptions:</b></dt><dd>
425
+ <table border="0" cellspacing="2" cellpadding="0">
426
+ <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 I/O channel has already been closed or discarded. </td></tr>
427
+ <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>
428
+ <tr><td valign="top"></td><td valign="top"><em>boost::thread_interrupted</em>&nbsp;</td><td></td></tr>
429
+ </table>
430
+ </dl>
431
+
432
+ </div>
433
+ </div><p>
434
+ <a class="anchor" name="5accbd8f7cce66d0ef6695481fdaa39c"></a><!-- doxytag: member="Passenger::Session::setReaderTimeout" ref="5accbd8f7cce66d0ef6695481fdaa39c" args="(unsigned int msec)=0" -->
435
+ <div class="memitem">
436
+ <div class="memproto">
437
+ <table class="memname">
438
+ <tr>
439
+ <td class="memname">virtual void Passenger::Session::setReaderTimeout </td>
440
+ <td>(</td>
441
+ <td class="paramtype">unsigned int&nbsp;</td>
442
+ <td class="paramname"> <em>msec</em> </td>
443
+ <td>&nbsp;)&nbsp;</td>
444
+ <td><code> [pure virtual]</code></td>
445
+ </tr>
446
+ </table>
447
+ </div>
448
+ <div class="memdoc">
449
+
450
+ <p>
451
+ Set the timeout value for reading data from the I/O channel.
452
+ <p>
453
+ If no data can be read within the timeout period, then the read call will fail with error EAGAIN or EWOULDBLOCK.<p>
454
+ <dl class="pre" compact><dt><b>Precondition:</b></dt><dd>The I/O channel hasn't been closed or discarded. <p>
455
+ <a class="el" href="classPassenger_1_1Session.html#bf1b6ba182a0fc66c8e617f74afafb92" title="Returns whether this session has been initiated (that is, whether initiate() had...">initiated()</a> </dd></dl>
456
+ <dl compact><dt><b>Parameters:</b></dt><dd>
457
+ <table border="0" cellspacing="2" cellpadding="0">
458
+ <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>
459
+ </table>
460
+ </dl>
461
+ <dl compact><dt><b>Exceptions:</b></dt><dd>
462
+ <table border="0" cellspacing="2" cellpadding="0">
463
+ <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>
464
+ </table>
465
+ </dl>
466
+
467
+ <p>Implemented in <a class="el" href="classPassenger_1_1StandardSession.html#960346d8c27ff1ae9017d753e41a159a">Passenger::StandardSession</a>.</p>
468
+
469
+ </div>
470
+ </div><p>
471
+ <a class="anchor" name="21dd749c0c8d22f65c6a914ec2f97c94"></a><!-- doxytag: member="Passenger::Session::setWriterTimeout" ref="21dd749c0c8d22f65c6a914ec2f97c94" args="(unsigned int msec)=0" -->
472
+ <div class="memitem">
473
+ <div class="memproto">
474
+ <table class="memname">
475
+ <tr>
476
+ <td class="memname">virtual void Passenger::Session::setWriterTimeout </td>
477
+ <td>(</td>
478
+ <td class="paramtype">unsigned int&nbsp;</td>
479
+ <td class="paramname"> <em>msec</em> </td>
480
+ <td>&nbsp;)&nbsp;</td>
481
+ <td><code> [pure virtual]</code></td>
482
+ </tr>
483
+ </table>
484
+ </div>
485
+ <div class="memdoc">
486
+
487
+ <p>
488
+ Set the timeout value for writing data from the I/O channel.
489
+ <p>
490
+ If no data can be written within the timeout period, then the write call will fail with error EAGAIN or EWOULDBLOCK.<p>
491
+ <dl class="pre" compact><dt><b>Precondition:</b></dt><dd>The I/O channel hasn't been closed or discarded. <p>
492
+ <a class="el" href="classPassenger_1_1Session.html#bf1b6ba182a0fc66c8e617f74afafb92" title="Returns whether this session has been initiated (that is, whether initiate() had...">initiated()</a> </dd></dl>
493
+ <dl compact><dt><b>Parameters:</b></dt><dd>
494
+ <table border="0" cellspacing="2" cellpadding="0">
495
+ <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>
496
+ </table>
497
+ </dl>
498
+ <dl compact><dt><b>Exceptions:</b></dt><dd>
499
+ <table border="0" cellspacing="2" cellpadding="0">
500
+ <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>
501
+ </table>
502
+ </dl>
503
+
504
+ <p>Implemented in <a class="el" href="classPassenger_1_1StandardSession.html#bb51c323ac0e24011191862f6dec7a75">Passenger::StandardSession</a>.</p>
505
+
506
+ </div>
507
+ </div><p>
508
+ <a class="anchor" name="c579d233ddc82542c336b2af1f40c4dd"></a><!-- doxytag: member="Passenger::Session::shutdownReader" ref="c579d233ddc82542c336b2af1f40c4dd" args="()=0" -->
509
+ <div class="memitem">
510
+ <div class="memproto">
511
+ <table class="memname">
512
+ <tr>
513
+ <td class="memname">virtual void Passenger::Session::shutdownReader </td>
514
+ <td>(</td>
515
+ <td class="paramname"> </td>
516
+ <td>&nbsp;)&nbsp;</td>
517
+ <td><code> [pure virtual]</code></td>
518
+ </tr>
519
+ </table>
520
+ </div>
521
+ <div class="memdoc">
522
+
523
+ <p>
524
+ Indicate that we don't want to read data anymore from the I/O channel.
525
+ <p>
526
+ Calling this method after <a class="el" href="classPassenger_1_1Session.html#7ab85388f15388cb8e65873d1ad310a5" title="Close the I/O stream.">closeStream()</a>/discardStream() is called will have no effect.<p>
527
+ <dl class="pre" compact><dt><b>Precondition:</b></dt><dd><a class="el" href="classPassenger_1_1Session.html#bf1b6ba182a0fc66c8e617f74afafb92" title="Returns whether this session has been initiated (that is, whether initiate() had...">initiated()</a> </dd></dl>
528
+ <dl compact><dt><b>Exceptions:</b></dt><dd>
529
+ <table border="0" cellspacing="2" cellpadding="0">
530
+ <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>
531
+ <tr><td valign="top"></td><td valign="top"><em>boost::thread_interrupted</em>&nbsp;</td><td></td></tr>
532
+ </table>
533
+ </dl>
534
+
535
+ <p>Implemented in <a class="el" href="classPassenger_1_1StandardSession.html#c92d4d081d6145ba8d441c8cf88fae74">Passenger::StandardSession</a>.</p>
536
+
537
+ </div>
538
+ </div><p>
539
+ <a class="anchor" name="8263c568a8ac4567b33728d820cbd920"></a><!-- doxytag: member="Passenger::Session::shutdownWriter" ref="8263c568a8ac4567b33728d820cbd920" args="()=0" -->
540
+ <div class="memitem">
541
+ <div class="memproto">
542
+ <table class="memname">
543
+ <tr>
544
+ <td class="memname">virtual void Passenger::Session::shutdownWriter </td>
545
+ <td>(</td>
546
+ <td class="paramname"> </td>
547
+ <td>&nbsp;)&nbsp;</td>
548
+ <td><code> [pure virtual]</code></td>
549
+ </tr>
550
+ </table>
551
+ </div>
552
+ <div class="memdoc">
553
+
554
+ <p>
555
+ Indicate that we don't want to write data anymore to the I/O channel.
556
+ <p>
557
+ Calling this method after <a class="el" href="classPassenger_1_1Session.html#7ab85388f15388cb8e65873d1ad310a5" title="Close the I/O stream.">closeStream()</a>/discardStream() is called will have no effect.<p>
558
+ <dl class="pre" compact><dt><b>Precondition:</b></dt><dd><a class="el" href="classPassenger_1_1Session.html#bf1b6ba182a0fc66c8e617f74afafb92" title="Returns whether this session has been initiated (that is, whether initiate() had...">initiated()</a> </dd></dl>
559
+ <dl compact><dt><b>Exceptions:</b></dt><dd>
560
+ <table border="0" cellspacing="2" cellpadding="0">
561
+ <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>
562
+ <tr><td valign="top"></td><td valign="top"><em>boost::thread_interrupted</em>&nbsp;</td><td></td></tr>
563
+ </table>
564
+ </dl>
565
+
566
+ <p>Implemented in <a class="el" href="classPassenger_1_1StandardSession.html#045a8f7f849c34086b0832fdba7a2915">Passenger::StandardSession</a>.</p>
567
+
568
+ </div>
569
+ </div><p>
570
+ <hr>The documentation for this class was generated from the following file:<ul>
571
+ <li><a class="el" href="Session_8h-source.html">Session.h</a></ul>
572
+ </div>
573
+ <hr size="1"><address style="text-align: right;"><small>Generated on Sun Feb 21 12:22:48 2010 for Passenger by&nbsp;
574
+ <a href="http://www.doxygen.org/index.html">
575
+ <img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
576
+ </body>
577
+ </html>