passenger 3.0.7 → 3.0.8

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 (439) hide show
  1. data/NEWS +27 -0
  2. data/README +1 -1
  3. data/bin/passenger-install-nginx-module +3 -1
  4. data/build/config.rb +2 -1
  5. data/build/cxx_tests.rb +7 -3
  6. data/build/documentation.rb +5 -40
  7. data/build/nginx.rb +0 -1
  8. data/build/packaging.rb +0 -6
  9. data/build/rake_extensions.rb +5 -0
  10. data/doc/Architectural overview.html +344 -77
  11. data/doc/Security of user switching support.html +338 -71
  12. data/doc/Users guide Apache with comments.html +4830 -0
  13. data/doc/Users guide Apache.html +695 -428
  14. data/doc/Users guide Apache.idmap.txt +80 -0
  15. data/doc/Users guide Apache.txt +5 -5
  16. data/doc/Users guide Nginx.html +591 -313
  17. data/doc/Users guide Nginx.txt +9 -3
  18. data/doc/Users guide Standalone.html +344 -77
  19. data/ext/boost/src/pthread/thread.cpp +1 -1
  20. data/ext/common/AccountsDatabase.h +1 -1
  21. data/ext/common/Constants.h +2 -2
  22. data/ext/common/Logging.h +2 -1
  23. data/ext/common/LoggingAgent/FilterSupport.h +107 -3
  24. data/ext/common/Session.h +1 -1
  25. data/ext/common/Utils.cpp +2 -0
  26. data/ext/common/Utils/Dechunker.h +232 -0
  27. data/ext/common/Utils/HttpHeaderBufferer.h +165 -0
  28. data/ext/common/Utils/StrIntUtils.cpp +51 -15
  29. data/ext/common/Utils/StrIntUtils.h +3 -0
  30. data/ext/common/Utils/StreamBoyerMooreHorspool.h +506 -0
  31. data/ext/nginx/Configuration.c +36 -282
  32. data/ext/nginx/ContentHandler.c +17 -0
  33. data/ext/nginx/HelperAgent.cpp +397 -39
  34. data/ext/oxt/tracable_exception.cpp +3 -1
  35. data/ext/ruby/extconf.rb +1 -0
  36. data/ext/ruby/passenger_native_support.c +3 -0
  37. data/helper-scripts/prespawn +113 -31
  38. data/lib/phusion_passenger.rb +2 -2
  39. data/lib/phusion_passenger/standalone/runtime_installer.rb +3 -2
  40. data/lib/phusion_passenger/standalone/start_command.rb +12 -12
  41. data/test/cxx/DechunkerTest.cpp +216 -0
  42. data/test/cxx/FilterSupportTest.cpp +31 -4
  43. data/test/cxx/HttpHeaderBuffererTest.cpp +203 -0
  44. data/test/cxx/UtilsTest.cpp +46 -3
  45. data/test/integration_tests/hello_world_rack_spec.rb +7 -0
  46. data/test/stub/rack/config.ru +6 -1
  47. data/test/stub/rails_apps/1.2/empty/public/dispatch.cgi +1 -1
  48. data/test/stub/rails_apps/1.2/empty/public/dispatch.fcgi +1 -1
  49. data/test/stub/rails_apps/1.2/empty/public/dispatch.rb +1 -1
  50. data/test/stub/rails_apps/2.0/empty/public/dispatch.cgi +1 -1
  51. data/test/stub/rails_apps/2.0/empty/public/dispatch.fcgi +1 -1
  52. data/test/stub/rails_apps/2.0/empty/public/dispatch.rb +1 -1
  53. data/test/stub/rails_apps/2.2/empty/public/dispatch.cgi +1 -1
  54. data/test/stub/rails_apps/2.2/empty/public/dispatch.fcgi +1 -1
  55. data/test/stub/rails_apps/2.2/empty/public/dispatch.rb +1 -1
  56. metadata +20 -403
  57. data/doc/Doxyfile +0 -241
  58. data/doc/cxxapi/AbstractSpawnManager_8h_source.html +0 -141
  59. data/doc/cxxapi/Account_8h_source.html +0 -206
  60. data/doc/cxxapi/AccountsDatabase_8h_source.html +0 -161
  61. data/doc/cxxapi/AgentBase_8h_source.html +0 -70
  62. data/doc/cxxapi/AgentsStarter_8h_source.html +0 -112
  63. data/doc/cxxapi/BCrypt_8h_source.html +0 -104
  64. data/doc/cxxapi/Blowfish_8h_source.html +0 -134
  65. data/doc/cxxapi/Bucket_8h_source.html +0 -118
  66. data/doc/cxxapi/Constants_8h_source.html +0 -79
  67. data/doc/cxxapi/ContentHandler_8h_source.html +0 -95
  68. data/doc/cxxapi/DirectoryMapper_8h_source.html +0 -311
  69. data/doc/cxxapi/EventedClient_8h_source.html +0 -733
  70. data/doc/cxxapi/EventedMessageServer_8h_source.html +0 -358
  71. data/doc/cxxapi/EventedServer_8h_source.html +0 -326
  72. data/doc/cxxapi/Exceptions_8h_source.html +0 -393
  73. data/doc/cxxapi/FileDescriptor_8h_source.html +0 -324
  74. data/doc/cxxapi/Hooks_8h_source.html +0 -76
  75. data/doc/cxxapi/HttpStatusExtractor_8h_source.html +0 -382
  76. data/doc/cxxapi/IniFile_8h_source.html +0 -527
  77. data/doc/cxxapi/Logging_8h_source.html +0 -796
  78. data/doc/cxxapi/MessageChannel_8h_source.html +0 -776
  79. data/doc/cxxapi/MessageClient_8h_source.html +0 -328
  80. data/doc/cxxapi/MessageReadersWriters_8h_source.html +0 -539
  81. data/doc/cxxapi/MessageServer_8h_source.html +0 -612
  82. data/doc/cxxapi/PoolOptions_8h_source.html +0 -549
  83. data/doc/cxxapi/Process_8h_source.html +0 -286
  84. data/doc/cxxapi/RandomGenerator_8h_source.html +0 -191
  85. data/doc/cxxapi/ResourceLocator_8h_source.html +0 -166
  86. data/doc/cxxapi/SafeLibev_8h_source.html +0 -180
  87. data/doc/cxxapi/ScgiRequestParser_8h_source.html +0 -406
  88. data/doc/cxxapi/ServerInstanceDir_8h_source.html +0 -378
  89. data/doc/cxxapi/Session_8h_source.html +0 -501
  90. data/doc/cxxapi/SpawnManager_8h_source.html +0 -647
  91. data/doc/cxxapi/StaticContentHandler_8h_source.html +0 -69
  92. data/doc/cxxapi/StaticString_8h_source.html +0 -329
  93. data/doc/cxxapi/StringListCreator_8h_source.html +0 -114
  94. data/doc/cxxapi/Utils_8h_source.html +0 -469
  95. data/doc/cxxapi/annotated.html +0 -87
  96. data/doc/cxxapi/apache2_2Configuration_8h_source.html +0 -82
  97. data/doc/cxxapi/classAgentWatcher-members.html +0 -54
  98. data/doc/cxxapi/classAgentWatcher.html +0 -419
  99. data/doc/cxxapi/classClient-members.html +0 -38
  100. data/doc/cxxapi/classClient.html +0 -123
  101. data/doc/cxxapi/classHooks-members.html +0 -40
  102. data/doc/cxxapi/classHooks.html +0 -153
  103. data/doc/cxxapi/classPassenger_1_1AbstractSpawnManager-members.html +0 -40
  104. data/doc/cxxapi/classPassenger_1_1AbstractSpawnManager.html +0 -187
  105. data/doc/cxxapi/classPassenger_1_1AbstractSpawnManager__inherit__graph.map +0 -3
  106. data/doc/cxxapi/classPassenger_1_1AbstractSpawnManager__inherit__graph.md5 +0 -1
  107. data/doc/cxxapi/classPassenger_1_1AbstractSpawnManager__inherit__graph.png +0 -0
  108. data/doc/cxxapi/classPassenger_1_1ArgumentException-members.html +0 -36
  109. data/doc/cxxapi/classPassenger_1_1ArgumentException.html +0 -56
  110. data/doc/cxxapi/classPassenger_1_1ArrayMessage-members.html +0 -37
  111. data/doc/cxxapi/classPassenger_1_1ArrayMessage.html +0 -113
  112. data/doc/cxxapi/classPassenger_1_1BufferedUpload-members.html +0 -38
  113. data/doc/cxxapi/classPassenger_1_1BufferedUpload.html +0 -112
  114. data/doc/cxxapi/classPassenger_1_1BusyException-members.html +0 -36
  115. data/doc/cxxapi/classPassenger_1_1BusyException.html +0 -54
  116. data/doc/cxxapi/classPassenger_1_1ConfigurationException-members.html +0 -36
  117. data/doc/cxxapi/classPassenger_1_1ConfigurationException.html +0 -51
  118. data/doc/cxxapi/classPassenger_1_1DirectoryMapper-members.html +0 -41
  119. data/doc/cxxapi/classPassenger_1_1DirectoryMapper.html +0 -223
  120. data/doc/cxxapi/classPassenger_1_1EOFException-members.html +0 -36
  121. data/doc/cxxapi/classPassenger_1_1EOFException.html +0 -61
  122. data/doc/cxxapi/classPassenger_1_1EOFException__inherit__graph.map +0 -3
  123. data/doc/cxxapi/classPassenger_1_1EOFException__inherit__graph.md5 +0 -1
  124. data/doc/cxxapi/classPassenger_1_1EOFException__inherit__graph.png +0 -0
  125. data/doc/cxxapi/classPassenger_1_1EventFd-members.html +0 -36
  126. data/doc/cxxapi/classPassenger_1_1EventFd.html +0 -52
  127. data/doc/cxxapi/classPassenger_1_1EventedClient-members.html +0 -59
  128. data/doc/cxxapi/classPassenger_1_1EventedClient.html +0 -531
  129. data/doc/cxxapi/classPassenger_1_1EventedMessageServer-members.html +0 -37
  130. data/doc/cxxapi/classPassenger_1_1EventedMessageServer.html +0 -59
  131. data/doc/cxxapi/classPassenger_1_1EventedMessageServer__inherit__graph.map +0 -3
  132. data/doc/cxxapi/classPassenger_1_1EventedMessageServer__inherit__graph.md5 +0 -1
  133. data/doc/cxxapi/classPassenger_1_1EventedMessageServer__inherit__graph.png +0 -0
  134. data/doc/cxxapi/classPassenger_1_1EventedServer-members.html +0 -37
  135. data/doc/cxxapi/classPassenger_1_1EventedServer.html +0 -93
  136. data/doc/cxxapi/classPassenger_1_1EventedServer__inherit__graph.map +0 -3
  137. data/doc/cxxapi/classPassenger_1_1EventedServer__inherit__graph.md5 +0 -1
  138. data/doc/cxxapi/classPassenger_1_1EventedServer__inherit__graph.png +0 -0
  139. data/doc/cxxapi/classPassenger_1_1FileDescriptor-members.html +0 -41
  140. data/doc/cxxapi/classPassenger_1_1FileDescriptor.html +0 -178
  141. data/doc/cxxapi/classPassenger_1_1FileDescriptorPair-members.html +0 -36
  142. data/doc/cxxapi/classPassenger_1_1FileDescriptorPair.html +0 -52
  143. data/doc/cxxapi/classPassenger_1_1FileNotFoundException-members.html +0 -36
  144. data/doc/cxxapi/classPassenger_1_1FileNotFoundException.html +0 -58
  145. data/doc/cxxapi/classPassenger_1_1FileNotFoundException__inherit__graph.map +0 -3
  146. data/doc/cxxapi/classPassenger_1_1FileNotFoundException__inherit__graph.md5 +0 -1
  147. data/doc/cxxapi/classPassenger_1_1FileNotFoundException__inherit__graph.png +0 -0
  148. data/doc/cxxapi/classPassenger_1_1FileSystemException-members.html +0 -41
  149. data/doc/cxxapi/classPassenger_1_1FileSystemException.html +0 -66
  150. data/doc/cxxapi/classPassenger_1_1FileSystemException__inherit__graph.map +0 -3
  151. data/doc/cxxapi/classPassenger_1_1FileSystemException__inherit__graph.md5 +0 -1
  152. data/doc/cxxapi/classPassenger_1_1FileSystemException__inherit__graph.png +0 -0
  153. data/doc/cxxapi/classPassenger_1_1HttpStatusExtractor-members.html +0 -39
  154. data/doc/cxxapi/classPassenger_1_1HttpStatusExtractor.html +0 -128
  155. data/doc/cxxapi/classPassenger_1_1IOException-members.html +0 -36
  156. data/doc/cxxapi/classPassenger_1_1IOException.html +0 -61
  157. data/doc/cxxapi/classPassenger_1_1IOException__inherit__graph.map +0 -4
  158. data/doc/cxxapi/classPassenger_1_1IOException__inherit__graph.md5 +0 -1
  159. data/doc/cxxapi/classPassenger_1_1IOException__inherit__graph.png +0 -0
  160. data/doc/cxxapi/classPassenger_1_1MessageChannel-members.html +0 -57
  161. data/doc/cxxapi/classPassenger_1_1MessageChannel.html +0 -839
  162. data/doc/cxxapi/classPassenger_1_1MessageServer-members.html +0 -49
  163. data/doc/cxxapi/classPassenger_1_1MessageServer.html +0 -407
  164. data/doc/cxxapi/classPassenger_1_1MessageServer_1_1ClientContext-members.html +0 -36
  165. data/doc/cxxapi/classPassenger_1_1MessageServer_1_1ClientContext.html +0 -58
  166. data/doc/cxxapi/classPassenger_1_1MessageServer_1_1ClientContext__inherit__graph.map +0 -3
  167. data/doc/cxxapi/classPassenger_1_1MessageServer_1_1ClientContext__inherit__graph.md5 +0 -1
  168. data/doc/cxxapi/classPassenger_1_1MessageServer_1_1ClientContext__inherit__graph.png +0 -0
  169. data/doc/cxxapi/classPassenger_1_1MessageServer_1_1CommonClientContext-members.html +0 -41
  170. data/doc/cxxapi/classPassenger_1_1MessageServer_1_1CommonClientContext.html +0 -165
  171. data/doc/cxxapi/classPassenger_1_1MessageServer_1_1CommonClientContext__inherit__graph.map +0 -3
  172. data/doc/cxxapi/classPassenger_1_1MessageServer_1_1CommonClientContext__inherit__graph.md5 +0 -1
  173. data/doc/cxxapi/classPassenger_1_1MessageServer_1_1CommonClientContext__inherit__graph.png +0 -0
  174. data/doc/cxxapi/classPassenger_1_1MessageServer_1_1Handler-members.html +0 -39
  175. data/doc/cxxapi/classPassenger_1_1MessageServer_1_1Handler.html +0 -173
  176. data/doc/cxxapi/classPassenger_1_1Process-members.html +0 -44
  177. data/doc/cxxapi/classPassenger_1_1Process.html +0 -290
  178. data/doc/cxxapi/classPassenger_1_1RandomGenerator-members.html +0 -37
  179. data/doc/cxxapi/classPassenger_1_1RandomGenerator.html +0 -79
  180. data/doc/cxxapi/classPassenger_1_1ResourceLocator-members.html +0 -36
  181. data/doc/cxxapi/classPassenger_1_1ResourceLocator.html +0 -51
  182. data/doc/cxxapi/classPassenger_1_1RuntimeException-members.html +0 -36
  183. data/doc/cxxapi/classPassenger_1_1RuntimeException.html +0 -54
  184. data/doc/cxxapi/classPassenger_1_1SafeLibev-members.html +0 -36
  185. data/doc/cxxapi/classPassenger_1_1SafeLibev.html +0 -51
  186. data/doc/cxxapi/classPassenger_1_1ScalarMessage-members.html +0 -37
  187. data/doc/cxxapi/classPassenger_1_1ScalarMessage.html +0 -76
  188. data/doc/cxxapi/classPassenger_1_1ScgiRequestParser-members.html +0 -50
  189. data/doc/cxxapi/classPassenger_1_1ScgiRequestParser.html +0 -285
  190. data/doc/cxxapi/classPassenger_1_1SecurityException-members.html +0 -36
  191. data/doc/cxxapi/classPassenger_1_1SecurityException.html +0 -56
  192. data/doc/cxxapi/classPassenger_1_1Session-members.html +0 -53
  193. data/doc/cxxapi/classPassenger_1_1Session.html +0 -556
  194. data/doc/cxxapi/classPassenger_1_1Session__inherit__graph.map +0 -3
  195. data/doc/cxxapi/classPassenger_1_1Session__inherit__graph.md5 +0 -1
  196. data/doc/cxxapi/classPassenger_1_1Session__inherit__graph.png +0 -0
  197. data/doc/cxxapi/classPassenger_1_1SpawnException-members.html +0 -39
  198. data/doc/cxxapi/classPassenger_1_1SpawnException.html +0 -101
  199. data/doc/cxxapi/classPassenger_1_1SpawnManager-members.html +0 -42
  200. data/doc/cxxapi/classPassenger_1_1SpawnManager.html +0 -292
  201. data/doc/cxxapi/classPassenger_1_1SpawnManager__inherit__graph.map +0 -3
  202. data/doc/cxxapi/classPassenger_1_1SpawnManager__inherit__graph.md5 +0 -1
  203. data/doc/cxxapi/classPassenger_1_1SpawnManager__inherit__graph.png +0 -0
  204. data/doc/cxxapi/classPassenger_1_1StandardSession-members.html +0 -54
  205. data/doc/cxxapi/classPassenger_1_1StandardSession.html +0 -394
  206. data/doc/cxxapi/classPassenger_1_1StandardSession__inherit__graph.map +0 -3
  207. data/doc/cxxapi/classPassenger_1_1StandardSession__inherit__graph.md5 +0 -1
  208. data/doc/cxxapi/classPassenger_1_1StandardSession__inherit__graph.png +0 -0
  209. data/doc/cxxapi/classPassenger_1_1StaticString-members.html +0 -36
  210. data/doc/cxxapi/classPassenger_1_1StaticString.html +0 -56
  211. data/doc/cxxapi/classPassenger_1_1SyntaxError-members.html +0 -36
  212. data/doc/cxxapi/classPassenger_1_1SyntaxError.html +0 -54
  213. data/doc/cxxapi/classPassenger_1_1SystemException-members.html +0 -40
  214. data/doc/cxxapi/classPassenger_1_1SystemException.html +0 -155
  215. data/doc/cxxapi/classPassenger_1_1SystemException__inherit__graph.map +0 -4
  216. data/doc/cxxapi/classPassenger_1_1SystemException__inherit__graph.md5 +0 -1
  217. data/doc/cxxapi/classPassenger_1_1SystemException__inherit__graph.png +0 -0
  218. data/doc/cxxapi/classPassenger_1_1TimeRetrievalException-members.html +0 -40
  219. data/doc/cxxapi/classPassenger_1_1TimeRetrievalException.html +0 -61
  220. data/doc/cxxapi/classPassenger_1_1TimeRetrievalException__inherit__graph.map +0 -3
  221. data/doc/cxxapi/classPassenger_1_1TimeRetrievalException__inherit__graph.md5 +0 -1
  222. data/doc/cxxapi/classPassenger_1_1TimeRetrievalException__inherit__graph.png +0 -0
  223. data/doc/cxxapi/classPassenger_1_1TimeoutException-members.html +0 -36
  224. data/doc/cxxapi/classPassenger_1_1TimeoutException.html +0 -54
  225. data/doc/cxxapi/classPassenger_1_1Uint16Message-members.html +0 -36
  226. data/doc/cxxapi/classPassenger_1_1Uint16Message.html +0 -51
  227. data/doc/cxxapi/classPassenger_1_1Uint32Message-members.html +0 -36
  228. data/doc/cxxapi/classPassenger_1_1Uint32Message.html +0 -51
  229. data/doc/cxxapi/classServer-members.html +0 -36
  230. data/doc/cxxapi/classServer.html +0 -49
  231. data/doc/cxxapi/classServerInstanceDirToucher-members.html +0 -36
  232. data/doc/cxxapi/classServerInstanceDirToucher.html +0 -47
  233. data/doc/cxxapi/classes.html +0 -52
  234. data/doc/cxxapi/definitions_8h_source.html +0 -36
  235. data/doc/cxxapi/doxygen.css +0 -532
  236. data/doc/cxxapi/doxygen.png +0 -0
  237. data/doc/cxxapi/files.html +0 -76
  238. data/doc/cxxapi/ftv2blank.png +0 -0
  239. data/doc/cxxapi/ftv2doc.png +0 -0
  240. data/doc/cxxapi/ftv2folderclosed.png +0 -0
  241. data/doc/cxxapi/ftv2folderopen.png +0 -0
  242. data/doc/cxxapi/ftv2lastnode.png +0 -0
  243. data/doc/cxxapi/ftv2link.png +0 -0
  244. data/doc/cxxapi/ftv2mlastnode.png +0 -0
  245. data/doc/cxxapi/ftv2mnode.png +0 -0
  246. data/doc/cxxapi/ftv2node.png +0 -0
  247. data/doc/cxxapi/ftv2plastnode.png +0 -0
  248. data/doc/cxxapi/ftv2pnode.png +0 -0
  249. data/doc/cxxapi/ftv2vertline.png +0 -0
  250. data/doc/cxxapi/functions.html +0 -103
  251. data/doc/cxxapi/functions_0x62.html +0 -82
  252. data/doc/cxxapi/functions_0x63.html +0 -102
  253. data/doc/cxxapi/functions_0x64.html +0 -102
  254. data/doc/cxxapi/functions_0x65.html +0 -88
  255. data/doc/cxxapi/functions_0x66.html +0 -100
  256. data/doc/cxxapi/functions_0x67.html +0 -167
  257. data/doc/cxxapi/functions_0x68.html +0 -88
  258. data/doc/cxxapi/functions_0x69.html +0 -96
  259. data/doc/cxxapi/functions_0x6b.html +0 -80
  260. data/doc/cxxapi/functions_0x6c.html +0 -88
  261. data/doc/cxxapi/functions_0x6d.html +0 -88
  262. data/doc/cxxapi/functions_0x6e.html +0 -86
  263. data/doc/cxxapi/functions_0x6f.html +0 -94
  264. data/doc/cxxapi/functions_0x70.html +0 -94
  265. data/doc/cxxapi/functions_0x72.html +0 -110
  266. data/doc/cxxapi/functions_0x73.html +0 -171
  267. data/doc/cxxapi/functions_0x74.html +0 -85
  268. data/doc/cxxapi/functions_0x75.html +0 -85
  269. data/doc/cxxapi/functions_0x77.html +0 -92
  270. data/doc/cxxapi/functions_0x7e.html +0 -79
  271. data/doc/cxxapi/functions_enum.html +0 -49
  272. data/doc/cxxapi/functions_eval.html +0 -67
  273. data/doc/cxxapi/functions_func.html +0 -531
  274. data/doc/cxxapi/functions_vars.html +0 -278
  275. data/doc/cxxapi/graph_legend.dot +0 -22
  276. data/doc/cxxapi/graph_legend.html +0 -92
  277. data/doc/cxxapi/graph_legend.png +0 -0
  278. data/doc/cxxapi/group__Core.html +0 -46
  279. data/doc/cxxapi/group__Core.map +0 -3
  280. data/doc/cxxapi/group__Core.png +0 -0
  281. data/doc/cxxapi/group__Exceptions.html +0 -53
  282. data/doc/cxxapi/group__Hooks.html +0 -42
  283. data/doc/cxxapi/group__Hooks.map +0 -3
  284. data/doc/cxxapi/group__Hooks.png +0 -0
  285. data/doc/cxxapi/group__Support.html +0 -538
  286. data/doc/cxxapi/hierarchy.html +0 -101
  287. data/doc/cxxapi/index.html +0 -16
  288. data/doc/cxxapi/inherit__graph__0.map +0 -3
  289. data/doc/cxxapi/inherit__graph__0.md5 +0 -1
  290. data/doc/cxxapi/inherit__graph__0.png +0 -0
  291. data/doc/cxxapi/inherit__graph__1.map +0 -3
  292. data/doc/cxxapi/inherit__graph__1.md5 +0 -1
  293. data/doc/cxxapi/inherit__graph__1.png +0 -0
  294. data/doc/cxxapi/inherit__graph__10.map +0 -3
  295. data/doc/cxxapi/inherit__graph__10.md5 +0 -1
  296. data/doc/cxxapi/inherit__graph__10.png +0 -0
  297. data/doc/cxxapi/inherit__graph__11.map +0 -4
  298. data/doc/cxxapi/inherit__graph__11.md5 +0 -1
  299. data/doc/cxxapi/inherit__graph__11.png +0 -0
  300. data/doc/cxxapi/inherit__graph__12.map +0 -3
  301. data/doc/cxxapi/inherit__graph__12.md5 +0 -1
  302. data/doc/cxxapi/inherit__graph__12.png +0 -0
  303. data/doc/cxxapi/inherit__graph__13.map +0 -3
  304. data/doc/cxxapi/inherit__graph__13.md5 +0 -1
  305. data/doc/cxxapi/inherit__graph__13.png +0 -0
  306. data/doc/cxxapi/inherit__graph__14.map +0 -3
  307. data/doc/cxxapi/inherit__graph__14.md5 +0 -1
  308. data/doc/cxxapi/inherit__graph__14.png +0 -0
  309. data/doc/cxxapi/inherit__graph__15.map +0 -3
  310. data/doc/cxxapi/inherit__graph__15.md5 +0 -1
  311. data/doc/cxxapi/inherit__graph__15.png +0 -0
  312. data/doc/cxxapi/inherit__graph__16.map +0 -5
  313. data/doc/cxxapi/inherit__graph__16.md5 +0 -1
  314. data/doc/cxxapi/inherit__graph__16.png +0 -0
  315. data/doc/cxxapi/inherit__graph__17.map +0 -3
  316. data/doc/cxxapi/inherit__graph__17.md5 +0 -1
  317. data/doc/cxxapi/inherit__graph__17.png +0 -0
  318. data/doc/cxxapi/inherit__graph__18.map +0 -3
  319. data/doc/cxxapi/inherit__graph__18.md5 +0 -1
  320. data/doc/cxxapi/inherit__graph__18.png +0 -0
  321. data/doc/cxxapi/inherit__graph__19.map +0 -4
  322. data/doc/cxxapi/inherit__graph__19.md5 +0 -1
  323. data/doc/cxxapi/inherit__graph__19.png +0 -0
  324. data/doc/cxxapi/inherit__graph__2.map +0 -3
  325. data/doc/cxxapi/inherit__graph__2.md5 +0 -1
  326. data/doc/cxxapi/inherit__graph__2.png +0 -0
  327. data/doc/cxxapi/inherit__graph__20.map +0 -3
  328. data/doc/cxxapi/inherit__graph__20.md5 +0 -1
  329. data/doc/cxxapi/inherit__graph__20.png +0 -0
  330. data/doc/cxxapi/inherit__graph__21.map +0 -3
  331. data/doc/cxxapi/inherit__graph__21.md5 +0 -1
  332. data/doc/cxxapi/inherit__graph__21.png +0 -0
  333. data/doc/cxxapi/inherit__graph__22.map +0 -3
  334. data/doc/cxxapi/inherit__graph__22.md5 +0 -1
  335. data/doc/cxxapi/inherit__graph__22.png +0 -0
  336. data/doc/cxxapi/inherit__graph__23.map +0 -3
  337. data/doc/cxxapi/inherit__graph__23.md5 +0 -1
  338. data/doc/cxxapi/inherit__graph__23.png +0 -0
  339. data/doc/cxxapi/inherit__graph__24.map +0 -3
  340. data/doc/cxxapi/inherit__graph__24.md5 +0 -1
  341. data/doc/cxxapi/inherit__graph__24.png +0 -0
  342. data/doc/cxxapi/inherit__graph__25.map +0 -3
  343. data/doc/cxxapi/inherit__graph__25.md5 +0 -1
  344. data/doc/cxxapi/inherit__graph__25.png +0 -0
  345. data/doc/cxxapi/inherit__graph__26.map +0 -3
  346. data/doc/cxxapi/inherit__graph__26.md5 +0 -1
  347. data/doc/cxxapi/inherit__graph__26.png +0 -0
  348. data/doc/cxxapi/inherit__graph__27.map +0 -3
  349. data/doc/cxxapi/inherit__graph__27.md5 +0 -1
  350. data/doc/cxxapi/inherit__graph__27.png +0 -0
  351. data/doc/cxxapi/inherit__graph__28.map +0 -3
  352. data/doc/cxxapi/inherit__graph__28.md5 +0 -1
  353. data/doc/cxxapi/inherit__graph__28.png +0 -0
  354. data/doc/cxxapi/inherit__graph__29.map +0 -3
  355. data/doc/cxxapi/inherit__graph__29.md5 +0 -1
  356. data/doc/cxxapi/inherit__graph__29.png +0 -0
  357. data/doc/cxxapi/inherit__graph__3.map +0 -4
  358. data/doc/cxxapi/inherit__graph__3.md5 +0 -1
  359. data/doc/cxxapi/inherit__graph__3.png +0 -0
  360. data/doc/cxxapi/inherit__graph__30.map +0 -3
  361. data/doc/cxxapi/inherit__graph__30.md5 +0 -1
  362. data/doc/cxxapi/inherit__graph__30.png +0 -0
  363. data/doc/cxxapi/inherit__graph__31.map +0 -4
  364. data/doc/cxxapi/inherit__graph__31.md5 +0 -1
  365. data/doc/cxxapi/inherit__graph__31.png +0 -0
  366. data/doc/cxxapi/inherit__graph__32.map +0 -3
  367. data/doc/cxxapi/inherit__graph__32.md5 +0 -1
  368. data/doc/cxxapi/inherit__graph__32.png +0 -0
  369. data/doc/cxxapi/inherit__graph__33.map +0 -3
  370. data/doc/cxxapi/inherit__graph__33.md5 +0 -1
  371. data/doc/cxxapi/inherit__graph__33.png +0 -0
  372. data/doc/cxxapi/inherit__graph__34.map +0 -3
  373. data/doc/cxxapi/inherit__graph__34.md5 +0 -1
  374. data/doc/cxxapi/inherit__graph__34.png +0 -0
  375. data/doc/cxxapi/inherit__graph__35.map +0 -3
  376. data/doc/cxxapi/inherit__graph__35.md5 +0 -1
  377. data/doc/cxxapi/inherit__graph__35.png +0 -0
  378. data/doc/cxxapi/inherit__graph__36.map +0 -5
  379. data/doc/cxxapi/inherit__graph__36.md5 +0 -1
  380. data/doc/cxxapi/inherit__graph__36.png +0 -0
  381. data/doc/cxxapi/inherit__graph__37.map +0 -3
  382. data/doc/cxxapi/inherit__graph__37.md5 +0 -1
  383. data/doc/cxxapi/inherit__graph__37.png +0 -0
  384. data/doc/cxxapi/inherit__graph__38.map +0 -3
  385. data/doc/cxxapi/inherit__graph__38.md5 +0 -1
  386. data/doc/cxxapi/inherit__graph__38.png +0 -0
  387. data/doc/cxxapi/inherit__graph__39.map +0 -3
  388. data/doc/cxxapi/inherit__graph__39.md5 +0 -1
  389. data/doc/cxxapi/inherit__graph__39.png +0 -0
  390. data/doc/cxxapi/inherit__graph__4.map +0 -3
  391. data/doc/cxxapi/inherit__graph__4.md5 +0 -1
  392. data/doc/cxxapi/inherit__graph__4.png +0 -0
  393. data/doc/cxxapi/inherit__graph__40.map +0 -3
  394. data/doc/cxxapi/inherit__graph__40.md5 +0 -1
  395. data/doc/cxxapi/inherit__graph__40.png +0 -0
  396. data/doc/cxxapi/inherit__graph__41.map +0 -3
  397. data/doc/cxxapi/inherit__graph__41.md5 +0 -1
  398. data/doc/cxxapi/inherit__graph__41.png +0 -0
  399. data/doc/cxxapi/inherit__graph__5.map +0 -3
  400. data/doc/cxxapi/inherit__graph__5.md5 +0 -1
  401. data/doc/cxxapi/inherit__graph__5.png +0 -0
  402. data/doc/cxxapi/inherit__graph__6.map +0 -3
  403. data/doc/cxxapi/inherit__graph__6.md5 +0 -1
  404. data/doc/cxxapi/inherit__graph__6.png +0 -0
  405. data/doc/cxxapi/inherit__graph__7.map +0 -3
  406. data/doc/cxxapi/inherit__graph__7.md5 +0 -1
  407. data/doc/cxxapi/inherit__graph__7.png +0 -0
  408. data/doc/cxxapi/inherit__graph__8.map +0 -3
  409. data/doc/cxxapi/inherit__graph__8.md5 +0 -1
  410. data/doc/cxxapi/inherit__graph__8.png +0 -0
  411. data/doc/cxxapi/inherit__graph__9.map +0 -3
  412. data/doc/cxxapi/inherit__graph__9.md5 +0 -1
  413. data/doc/cxxapi/inherit__graph__9.png +0 -0
  414. data/doc/cxxapi/inherits.html +0 -165
  415. data/doc/cxxapi/main.html +0 -28
  416. data/doc/cxxapi/modules.html +0 -36
  417. data/doc/cxxapi/namespacePassenger.html +0 -585
  418. data/doc/cxxapi/namespacemembers.html +0 -190
  419. data/doc/cxxapi/namespacemembers_enum.html +0 -48
  420. data/doc/cxxapi/namespacemembers_eval.html +0 -57
  421. data/doc/cxxapi/namespacemembers_func.html +0 -114
  422. data/doc/cxxapi/namespacemembers_type.html +0 -54
  423. data/doc/cxxapi/namespaces.html +0 -37
  424. data/doc/cxxapi/nginx_2Configuration_8h_source.html +0 -126
  425. data/doc/cxxapi/ngx__http__passenger__module_8h_source.html +0 -95
  426. data/doc/cxxapi/structPassenger_1_1MessageServer_1_1DisconnectEventBroadcastGuard-members.html +0 -36
  427. data/doc/cxxapi/structPassenger_1_1MessageServer_1_1DisconnectEventBroadcastGuard.html +0 -51
  428. data/doc/cxxapi/structPassenger_1_1PoolOptions-members.html +0 -67
  429. data/doc/cxxapi/structPassenger_1_1PoolOptions.html +0 -647
  430. data/doc/cxxapi/structPassenger_1_1StaticString_1_1Hash-members.html +0 -36
  431. data/doc/cxxapi/structPassenger_1_1StaticString_1_1Hash.html +0 -51
  432. data/doc/cxxapi/tab_b.gif +0 -0
  433. data/doc/cxxapi/tab_l.gif +0 -0
  434. data/doc/cxxapi/tab_r.gif +0 -0
  435. data/doc/cxxapi/tabs.css +0 -105
  436. data/doc/cxxapi/tree.html +0 -249
  437. data/doc/template/horo.rb +0 -613
  438. data/ext/libev/config.h +0 -122
  439. data/ext/nginx/HttpStatusExtractor.h +0 -351
@@ -1,3 +0,0 @@
1
- <map id="G" name="G">
2
- <area shape="rect" id="node2" href="$classPassenger_1_1IOException.html" title="Represents an error that occured during an I/O operation." alt="" coords="12,5,183,35"/>
3
- </map>
@@ -1 +0,0 @@
1
- 27b7b3ead2ef03ef9e37e8bc68b381c6
@@ -1,36 +0,0 @@
1
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
- <html xmlns="http://www.w3.org/1999/xhtml">
3
- <head>
4
- <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
5
- <title>Passenger: Member List</title>
6
- <link href="tabs.css" rel="stylesheet" type="text/css"/>
7
- <link href="doxygen.css" rel="stylesheet" type="text/css"/>
8
- </head>
9
- <body>
10
- <!-- Generated by Doxygen 1.6.2 -->
11
- <div class="navigation" id="top">
12
- <div class="tabs">
13
- <ul>
14
- <li><a href="main.html"><span>Main&nbsp;Page</span></a></li>
15
- <li><a href="modules.html"><span>Modules</span></a></li>
16
- <li><a href="namespaces.html"><span>Namespaces</span></a></li>
17
- <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
18
- <li><a href="files.html"><span>Files</span></a></li>
19
- </ul>
20
- </div>
21
- <div class="tabs">
22
- <ul>
23
- <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
24
- <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
25
- <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
26
- </ul>
27
- </div>
28
- </div>
29
- <div class="contents">
30
- <h1>Passenger::EventFd Member List</h1>This is the complete list of members for <a class="el" href="classPassenger_1_1EventFd.html">Passenger::EventFd</a>, including all inherited members.<table>
31
- </table></div>
32
- <hr size="1"/><address style="text-align: right;"><small>Generated by&nbsp;
33
- <a href="http://www.doxygen.org/index.html">
34
- <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.2 </small></address>
35
- </body>
36
- </html>
@@ -1,52 +0,0 @@
1
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
- <html xmlns="http://www.w3.org/1999/xhtml">
3
- <head>
4
- <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
5
- <title>Passenger: Passenger::EventFd Class Reference</title>
6
- <link href="tabs.css" rel="stylesheet" type="text/css"/>
7
- <link href="doxygen.css" rel="stylesheet" type="text/css"/>
8
- </head>
9
- <body>
10
- <!-- Generated by Doxygen 1.6.2 -->
11
- <div class="navigation" id="top">
12
- <div class="tabs">
13
- <ul>
14
- <li><a href="main.html"><span>Main&nbsp;Page</span></a></li>
15
- <li><a href="modules.html"><span>Modules</span></a></li>
16
- <li><a href="namespaces.html"><span>Namespaces</span></a></li>
17
- <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
18
- <li><a href="files.html"><span>Files</span></a></li>
19
- </ul>
20
- </div>
21
- <div class="tabs">
22
- <ul>
23
- <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
24
- <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
25
- <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
26
- </ul>
27
- </div>
28
- <div class="navpath"><a class="el" href="namespacePassenger.html">Passenger</a>::<a class="el" href="classPassenger_1_1EventFd.html">EventFd</a>
29
- </div>
30
- </div>
31
- <div class="contents">
32
- <h1>Passenger::EventFd Class Reference</h1><!-- doxytag: class="Passenger::EventFd" -->
33
- <p>A synchronization mechanism that's implemented with file descriptors, and as such can be used in combination with select() and friends.
34
- <a href="#_details">More...</a></p>
35
-
36
- <p><code>#include &lt;<a class="el" href="FileDescriptor_8h_source.html">FileDescriptor.h</a>&gt;</code></p>
37
-
38
- <p><a href="classPassenger_1_1EventFd-members.html">List of all members.</a></p>
39
- <table border="0" cellpadding="0" cellspacing="0">
40
- </table>
41
- <hr/><a name="_details"></a><h2>Detailed Description</h2>
42
- <p>A synchronization mechanism that's implemented with file descriptors, and as such can be used in combination with select() and friends. </p>
43
- <p>One can wait for an event on an <a class="el" href="classPassenger_1_1EventFd.html" title="A synchronization mechanism that&#39;s implemented with file descriptors, and as...">EventFd</a> by select()ing it on read events. Another thread can signal the <a class="el" href="classPassenger_1_1EventFd.html" title="A synchronization mechanism that&#39;s implemented with file descriptors, and as...">EventFd</a> by calling notify(). </p>
44
- <hr/>The documentation for this class was generated from the following file:<ul>
45
- <li><a class="el" href="FileDescriptor_8h_source.html">FileDescriptor.h</a></li>
46
- </ul>
47
- </div>
48
- <hr size="1"/><address style="text-align: right;"><small>Generated by&nbsp;
49
- <a href="http://www.doxygen.org/index.html">
50
- <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.2 </small></address>
51
- </body>
52
- </html>
@@ -1,59 +0,0 @@
1
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
- <html xmlns="http://www.w3.org/1999/xhtml">
3
- <head>
4
- <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
5
- <title>Passenger: Member List</title>
6
- <link href="tabs.css" rel="stylesheet" type="text/css"/>
7
- <link href="doxygen.css" rel="stylesheet" type="text/css"/>
8
- </head>
9
- <body>
10
- <!-- Generated by Doxygen 1.6.2 -->
11
- <div class="navigation" id="top">
12
- <div class="tabs">
13
- <ul>
14
- <li><a href="main.html"><span>Main&nbsp;Page</span></a></li>
15
- <li><a href="modules.html"><span>Modules</span></a></li>
16
- <li><a href="namespaces.html"><span>Namespaces</span></a></li>
17
- <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
18
- <li><a href="files.html"><span>Files</span></a></li>
19
- </ul>
20
- </div>
21
- <div class="tabs">
22
- <ul>
23
- <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
24
- <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
25
- <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
26
- </ul>
27
- </div>
28
- </div>
29
- <div class="contents">
30
- <h1>Passenger::EventedClient Member List</h1>This is the complete list of members for <a class="el" href="classPassenger_1_1EventedClient.html">Passenger::EventedClient</a>, including all inherited members.<table>
31
- <tr class="memlist"><td><a class="el" href="classPassenger_1_1EventedClient.html#a9161e34ddc473c00fe4df8fdb1d1baef">closeWrite</a>()</td><td><a class="el" href="classPassenger_1_1EventedClient.html">Passenger::EventedClient</a></td><td><code> [inline]</code></td></tr>
32
- <tr class="memlist"><td><a class="el" href="classPassenger_1_1EventedClient.html#a408b593d118c3483bcef8118a7edba0f">detach</a>()</td><td><a class="el" href="classPassenger_1_1EventedClient.html">Passenger::EventedClient</a></td><td><code> [inline]</code></td></tr>
33
- <tr class="memlist"><td><a class="el" href="classPassenger_1_1EventedClient.html#a5b1a3011165ea9a47f6fe668a5010a20">disconnect</a>(bool force=false)</td><td><a class="el" href="classPassenger_1_1EventedClient.html">Passenger::EventedClient</a></td><td><code> [inline]</code></td></tr>
34
- <tr class="memlist"><td><a class="el" href="classPassenger_1_1EventedClient.html#a931edf284fed32f74ebf9dc35d993f17a627c2190c3a4dc848dc1a332ef9f5105">DISCONNECT_FULL</a> enum value</td><td><a class="el" href="classPassenger_1_1EventedClient.html">Passenger::EventedClient</a></td><td></td></tr>
35
- <tr class="memlist"><td><a class="el" href="classPassenger_1_1EventedClient.html#a931edf284fed32f74ebf9dc35d993f17a232760bee5b535fd40e609ff8c088693">DISCONNECT_WRITE</a> enum value</td><td><a class="el" href="classPassenger_1_1EventedClient.html">Passenger::EventedClient</a></td><td></td></tr>
36
- <tr class="memlist"><td><a class="el" href="classPassenger_1_1EventedClient.html#ac3c45bfa7ac30b6d59ef08dc296f3c4e">EventedClient</a>(struct ev_loop *loop, const FileDescriptor &amp;_fd)</td><td><a class="el" href="classPassenger_1_1EventedClient.html">Passenger::EventedClient</a></td><td><code> [inline]</code></td></tr>
37
- <tr class="memlist"><td><a class="el" href="classPassenger_1_1EventedClient.html#a4473719c16cae760e1811b7ccb1dc491">fd</a></td><td><a class="el" href="classPassenger_1_1EventedClient.html">Passenger::EventedClient</a></td><td></td></tr>
38
- <tr class="memlist"><td><a class="el" href="classPassenger_1_1EventedClient.html#a50436eb8ec0cc38b5a7278962e98a22c">ioAllowed</a>() const </td><td><a class="el" href="classPassenger_1_1EventedClient.html">Passenger::EventedClient</a></td><td><code> [inline]</code></td></tr>
39
- <tr class="memlist"><td><a class="el" href="classPassenger_1_1EventedClient.html#a56ac52f1a4e77c49f72202d16e588f2f">notifyReads</a>(bool enable)</td><td><a class="el" href="classPassenger_1_1EventedClient.html">Passenger::EventedClient</a></td><td><code> [inline]</code></td></tr>
40
- <tr class="memlist"><td><a class="el" href="classPassenger_1_1EventedClient.html#a742805d40508b0af89eb2ed2c1e50060">onDetach</a></td><td><a class="el" href="classPassenger_1_1EventedClient.html">Passenger::EventedClient</a></td><td></td></tr>
41
- <tr class="memlist"><td><a class="el" href="classPassenger_1_1EventedClient.html#a211210ecd85eb2da47d200215132bb2d">onDisconnect</a></td><td><a class="el" href="classPassenger_1_1EventedClient.html">Passenger::EventedClient</a></td><td></td></tr>
42
- <tr class="memlist"><td><a class="el" href="classPassenger_1_1EventedClient.html#a22e93ce2be05a4f47dbeba95d79a79b9">onPendingDataFlushed</a></td><td><a class="el" href="classPassenger_1_1EventedClient.html">Passenger::EventedClient</a></td><td></td></tr>
43
- <tr class="memlist"><td><a class="el" href="classPassenger_1_1EventedClient.html#a155988f311fba920bef3031f3d9b6f6a">onReadable</a></td><td><a class="el" href="classPassenger_1_1EventedClient.html">Passenger::EventedClient</a></td><td></td></tr>
44
- <tr class="memlist"><td><a class="el" href="classPassenger_1_1EventedClient.html#a9522b2c5a42d75a93ed865e74510818f">onSystemError</a></td><td><a class="el" href="classPassenger_1_1EventedClient.html">Passenger::EventedClient</a></td><td></td></tr>
45
- <tr class="memlist"><td><a class="el" href="classPassenger_1_1EventedClient.html#a0a032e54979b074641ffda807648a6e2">pendingWrites</a>() const </td><td><a class="el" href="classPassenger_1_1EventedClient.html">Passenger::EventedClient</a></td><td><code> [inline]</code></td></tr>
46
- <tr class="memlist"><td><a class="el" href="classPassenger_1_1EventedClient.html#a129f6d6a6123c9af1999eca4ae04a75a">readWatcherActive</a>() const </td><td><a class="el" href="classPassenger_1_1EventedClient.html">Passenger::EventedClient</a></td><td><code> [inline]</code></td></tr>
47
- <tr class="memlist"><td><a class="el" href="classPassenger_1_1EventedClient.html#aec0aee41bd623d7a3f3cd8ae201ba717">ref</a>()</td><td><a class="el" href="classPassenger_1_1EventedClient.html">Passenger::EventedClient</a></td><td><code> [inline]</code></td></tr>
48
- <tr class="memlist"><td><a class="el" href="classPassenger_1_1EventedClient.html#ac1eb48c0d5382a97facbf9af40924849">setOutboxLimit</a>(unsigned int size)</td><td><a class="el" href="classPassenger_1_1EventedClient.html">Passenger::EventedClient</a></td><td><code> [inline]</code></td></tr>
49
- <tr class="memlist"><td><a class="el" href="classPassenger_1_1EventedClient.html#a1e480f15dfd339ff781f8daedc5b8190">unref</a>()</td><td><a class="el" href="classPassenger_1_1EventedClient.html">Passenger::EventedClient</a></td><td><code> [inline]</code></td></tr>
50
- <tr class="memlist"><td><a class="el" href="classPassenger_1_1EventedClient.html#a793c843b7ba01cc1bb2c568c6539b9e0">userData</a></td><td><a class="el" href="classPassenger_1_1EventedClient.html">Passenger::EventedClient</a></td><td></td></tr>
51
- <tr class="memlist"><td><a class="el" href="classPassenger_1_1EventedClient.html#aa07723456786b9f18b973bd88ff51e27">write</a>(const StaticString data[], unsigned int count)</td><td><a class="el" href="classPassenger_1_1EventedClient.html">Passenger::EventedClient</a></td><td><code> [inline]</code></td></tr>
52
- <tr class="memlist"><td><a class="el" href="classPassenger_1_1EventedClient.html#aca719fb03ade09839827a16caa0e6e30">writeAllowed</a>() const </td><td><a class="el" href="classPassenger_1_1EventedClient.html">Passenger::EventedClient</a></td><td><code> [inline]</code></td></tr>
53
- <tr class="memlist"><td><a class="el" href="classPassenger_1_1EventedClient.html#afc0934988a978a25538b7d8f2566c90a">writeErrorAction</a></td><td><a class="el" href="classPassenger_1_1EventedClient.html">Passenger::EventedClient</a></td><td></td></tr>
54
- </table></div>
55
- <hr size="1"/><address style="text-align: right;"><small>Generated by&nbsp;
56
- <a href="http://www.doxygen.org/index.html">
57
- <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.2 </small></address>
58
- </body>
59
- </html>
@@ -1,531 +0,0 @@
1
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
- <html xmlns="http://www.w3.org/1999/xhtml">
3
- <head>
4
- <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
5
- <title>Passenger: Passenger::EventedClient Class Reference</title>
6
- <link href="tabs.css" rel="stylesheet" type="text/css"/>
7
- <link href="doxygen.css" rel="stylesheet" type="text/css"/>
8
- </head>
9
- <body>
10
- <!-- Generated by Doxygen 1.6.2 -->
11
- <div class="navigation" id="top">
12
- <div class="tabs">
13
- <ul>
14
- <li><a href="main.html"><span>Main&nbsp;Page</span></a></li>
15
- <li><a href="modules.html"><span>Modules</span></a></li>
16
- <li><a href="namespaces.html"><span>Namespaces</span></a></li>
17
- <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
18
- <li><a href="files.html"><span>Files</span></a></li>
19
- </ul>
20
- </div>
21
- <div class="tabs">
22
- <ul>
23
- <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
24
- <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
25
- <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
26
- </ul>
27
- </div>
28
- <div class="navpath"><a class="el" href="namespacePassenger.html">Passenger</a>::<a class="el" href="classPassenger_1_1EventedClient.html">EventedClient</a>
29
- </div>
30
- </div>
31
- <div class="contents">
32
- <h1>Passenger::EventedClient Class Reference</h1><!-- doxytag: class="Passenger::EventedClient" -->
33
- <p>A utility class for making I/O handling in non-blocking libev evented servers much easier.
34
- <a href="#_details">More...</a></p>
35
-
36
- <p><code>#include &lt;<a class="el" href="EventedClient_8h_source.html">EventedClient.h</a>&gt;</code></p>
37
-
38
- <p>Inherited by Passenger::EventedMessageClient.</p>
39
-
40
- <p><a href="classPassenger_1_1EventedClient-members.html">List of all members.</a></p>
41
- <table border="0" cellpadding="0" cellspacing="0">
42
- <tr><td colspan="2"><h2>Public Types</h2></td></tr>
43
- <tr><td class="memItemLeft" align="right" valign="top">enum &nbsp;</td><td class="memItemRight" valign="bottom">{ <a class="el" href="classPassenger_1_1EventedClient.html#a931edf284fed32f74ebf9dc35d993f17a627c2190c3a4dc848dc1a332ef9f5105">DISCONNECT_FULL</a>,
44
- <a class="el" href="classPassenger_1_1EventedClient.html#a931edf284fed32f74ebf9dc35d993f17a232760bee5b535fd40e609ff8c088693">DISCONNECT_WRITE</a>
45
- }</td></tr>
46
- <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight"><p>Controls what to do when a write error is encountered. </p>
47
- <a href="classPassenger_1_1EventedClient.html#a931edf284fed32f74ebf9dc35d993f17">More...</a><br/></td></tr>
48
- <tr><td colspan="2"><h2>Public Member Functions</h2></td></tr>
49
- <tr><td class="memItemLeft" align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1EventedClient.html#ac3c45bfa7ac30b6d59ef08dc296f3c4e">EventedClient</a> (struct ev_loop *loop, const <a class="el" href="classPassenger_1_1FileDescriptor.html">FileDescriptor</a> &amp;_fd)</td></tr>
50
- <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Creates a new <a class="el" href="classPassenger_1_1EventedClient.html" title="A utility class for making I/O handling in non-blocking libev evented servers much...">EventedClient</a> with the given libev loop and file descriptor. <a href="#ac3c45bfa7ac30b6d59ef08dc296f3c4e"></a><br/></td></tr>
51
- <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aec0aee41bd623d7a3f3cd8ae201ba717"></a><!-- doxytag: member="Passenger::EventedClient::ref" ref="aec0aee41bd623d7a3f3cd8ae201ba717" args="()" -->
52
- void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1EventedClient.html#aec0aee41bd623d7a3f3cd8ae201ba717">ref</a> ()</td></tr>
53
- <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Increase reference count. <br/></td></tr>
54
- <tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1EventedClient.html#a1e480f15dfd339ff781f8daedc5b8190">unref</a> ()</td></tr>
55
- <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Decrease reference count. <a href="#a1e480f15dfd339ff781f8daedc5b8190"></a><br/></td></tr>
56
- <tr><td class="memItemLeft" align="right" valign="top">bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1EventedClient.html#a50436eb8ec0cc38b5a7278962e98a22c">ioAllowed</a> () const </td></tr>
57
- <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns whether it is allowed to perform some kind of I/O with this client, either reading or writing. <a href="#a50436eb8ec0cc38b5a7278962e98a22c"></a><br/></td></tr>
58
- <tr><td class="memItemLeft" align="right" valign="top">bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1EventedClient.html#aca719fb03ade09839827a16caa0e6e30">writeAllowed</a> () const </td></tr>
59
- <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns whether it is allowed to write data to the client. <a href="#aca719fb03ade09839827a16caa0e6e30"></a><br/></td></tr>
60
- <tr><td class="memItemLeft" align="right" valign="top">bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1EventedClient.html#a129f6d6a6123c9af1999eca4ae04a75a">readWatcherActive</a> () const </td></tr>
61
- <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Used by unit tests. <a href="#a129f6d6a6123c9af1999eca4ae04a75a"></a><br/></td></tr>
62
- <tr><td class="memItemLeft" align="right" valign="top">size_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1EventedClient.html#a0a032e54979b074641ffda807648a6e2">pendingWrites</a> () const </td></tr>
63
- <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the number of bytes that are scheduled to be sent to the client at a later time. <a href="#a0a032e54979b074641ffda807648a6e2"></a><br/></td></tr>
64
- <tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1EventedClient.html#a56ac52f1a4e77c49f72202d16e588f2f">notifyReads</a> (bool enable)</td></tr>
65
- <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sets whether you're interested in read events. <a href="#a56ac52f1a4e77c49f72202d16e588f2f"></a><br/></td></tr>
66
- <tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1EventedClient.html#ac1eb48c0d5382a97facbf9af40924849">setOutboxLimit</a> (unsigned int size)</td></tr>
67
- <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sets a limit on the client outbox. <a href="#ac1eb48c0d5382a97facbf9af40924849"></a><br/></td></tr>
68
- <tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1EventedClient.html#aa07723456786b9f18b973bd88ff51e27">write</a> (const <a class="el" href="classPassenger_1_1StaticString.html">StaticString</a> data[], unsigned int count)</td></tr>
69
- <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sends data to this client. <a href="#aa07723456786b9f18b973bd88ff51e27"></a><br/></td></tr>
70
- <tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1EventedClient.html#a9161e34ddc473c00fe4df8fdb1d1baef">closeWrite</a> ()</td></tr>
71
- <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Close only the writer side of the client connection. <a href="#a9161e34ddc473c00fe4df8fdb1d1baef"></a><br/></td></tr>
72
- <tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1EventedClient.html#a5b1a3011165ea9a47f6fe668a5010a20">disconnect</a> (bool force=false)</td></tr>
73
- <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Disconnects the client. <a href="#a5b1a3011165ea9a47f6fe668a5010a20"></a><br/></td></tr>
74
- <tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classPassenger_1_1FileDescriptor.html">FileDescriptor</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1EventedClient.html#a408b593d118c3483bcef8118a7edba0f">detach</a> ()</td></tr>
75
- <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Detaches the client file descriptor so that this <a class="el" href="classPassenger_1_1EventedClient.html" title="A utility class for making I/O handling in non-blocking libev evented servers much...">EventedClient</a> no longer has any control over it. <a href="#a408b593d118c3483bcef8118a7edba0f"></a><br/></td></tr>
76
- <tr><td colspan="2"><h2>Public Attributes</h2></td></tr>
77
- <tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classPassenger_1_1FileDescriptor.html">FileDescriptor</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1EventedClient.html#a4473719c16cae760e1811b7ccb1dc491">fd</a></td></tr>
78
- <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The client's file descriptor. <a href="#a4473719c16cae760e1811b7ccb1dc491"></a><br/></td></tr>
79
- <tr><td class="memItemLeft" align="right" valign="top">enum <br class="typebreak"/>
80
- Passenger::EventedClient:: { ... } &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1EventedClient.html#afc0934988a978a25538b7d8f2566c90a">writeErrorAction</a></td></tr>
81
- <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Controls what to do when a write error is encountered. <a href="#afc0934988a978a25538b7d8f2566c90a"></a><br/></td></tr>
82
- <tr><td class="memItemLeft" align="right" valign="top">Callback&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1EventedClient.html#a155988f311fba920bef3031f3d9b6f6a">onReadable</a></td></tr>
83
- <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Called when the file descriptor becomes readable and read notifications are enabled (see <code>notifyRead()</code>). <a href="#a155988f311fba920bef3031f3d9b6f6a"></a><br/></td></tr>
84
- <tr><td class="memItemLeft" align="right" valign="top">Callback&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1EventedClient.html#a211210ecd85eb2da47d200215132bb2d">onDisconnect</a></td></tr>
85
- <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Called when the client is disconnected. <a href="#a211210ecd85eb2da47d200215132bb2d"></a><br/></td></tr>
86
- <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a742805d40508b0af89eb2ed2c1e50060"></a><!-- doxytag: member="Passenger::EventedClient::onDetach" ref="a742805d40508b0af89eb2ed2c1e50060" args="" -->
87
- Callback&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1EventedClient.html#a742805d40508b0af89eb2ed2c1e50060">onDetach</a></td></tr>
88
- <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Called when <code><a class="el" href="classPassenger_1_1EventedClient.html#a408b593d118c3483bcef8118a7edba0f" title="Detaches the client file descriptor so that this EventedClient no longer has any...">detach()</a></code> is called for the first time. <br/></td></tr>
89
- <tr><td class="memItemLeft" align="right" valign="top">Callback&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1EventedClient.html#a22e93ce2be05a4f47dbeba95d79a79b9">onPendingDataFlushed</a></td></tr>
90
- <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Called after all pending outgoing data have been written out. <a href="#a22e93ce2be05a4f47dbeba95d79a79b9"></a><br/></td></tr>
91
- <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9522b2c5a42d75a93ed865e74510818f"></a><!-- doxytag: member="Passenger::EventedClient::onSystemError" ref="a9522b2c5a42d75a93ed865e74510818f" args="" -->
92
- SystemErrorCallback&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1EventedClient.html#a9522b2c5a42d75a93ed865e74510818f">onSystemError</a></td></tr>
93
- <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">System call errors are reported with this callback. <br/></td></tr>
94
- <tr><td class="memItemLeft" align="right" valign="top">void *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1EventedClient.html#a793c843b7ba01cc1bb2c568c6539b9e0">userData</a></td></tr>
95
- <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight"><a class="el" href="classPassenger_1_1EventedClient.html" title="A utility class for making I/O handling in non-blocking libev evented servers much...">EventedClient</a> doesn't do anything with this. <a href="#a793c843b7ba01cc1bb2c568c6539b9e0"></a><br/></td></tr>
96
- </table>
97
- <hr/><a name="_details"></a><h2>Detailed Description</h2>
98
- <p>A utility class for making I/O handling in non-blocking libev evented servers much easier. </p>
99
- <ul>
100
- <li>An <a class="el" href="classPassenger_1_1EventedClient.html" title="A utility class for making I/O handling in non-blocking libev evented servers much...">EventedClient</a> is associated with a reference counted file descriptor.</li>
101
- <li>It contains connection state information (i.e. whether the connection is established or closed). Callbacks are provided for watching connection state changes (e.g. <code>onDisconnect</code>).</li>
102
- <li>It provides reference counting features for simpler memory management (<code><a class="el" href="classPassenger_1_1EventedClient.html#aec0aee41bd623d7a3f3cd8ae201ba717" title="Increase reference count.">ref()</a></code> and <code><a class="el" href="classPassenger_1_1EventedClient.html#a1e480f15dfd339ff781f8daedc5b8190" title="Decrease reference count.">unref()</a></code>).</li>
103
- <li>It installs input and output readiness watchers that are unregistered when the <a class="el" href="classPassenger_1_1EventedClient.html" title="A utility class for making I/O handling in non-blocking libev evented servers much...">EventedClient</a> is destroyed. One can hook into input readiness watcher with the <code>onReadable</code> callback.</li>
104
- <li>Makes zero-copy writes easy. The <code>write()</code> method accepts an array of buffers. Whenever possible, all of these buffers are written out in the given order, using a single system call, without copying them into a single temporary buffer.</li>
105
- <li>Makes non-blocking writes easy. Normally a write() system call on a non-blocking socket can fail with EAGAIN if the socket send buffer is full. <a class="el" href="classPassenger_1_1EventedClient.html" title="A utility class for making I/O handling in non-blocking libev evented servers much...">EventedClient</a> schedules the data to be sent later when the socket is writable again. It automatically integrates into the main loop in order to do this. This allows one to have write operations occur concurrently with read operations. In case too many scheduled writes are being piled up, <a class="el" href="classPassenger_1_1EventedClient.html" title="A utility class for making I/O handling in non-blocking libev evented servers much...">EventedClient</a> is smart enough to temporarily disable read notifications and wait until everything is written out before enabling read notifications again. The definition of "too many" is customizable (<code><a class="el" href="classPassenger_1_1EventedClient.html#ac1eb48c0d5382a97facbf9af40924849" title="Sets a limit on the client outbox.">setOutboxLimit()</a></code>).</li>
106
- <li>EventedClient's <code>disconnect</code> method respects pending writes. It will disconnect after all pending outgoing data have been written out.</li>
107
- </ul>
108
- <h2>Basic usage</h2>
109
- <p>Construct an <a class="el" href="classPassenger_1_1EventedClient.html" title="A utility class for making I/O handling in non-blocking libev evented servers much...">EventedClient</a> with a libev loop and a file descriptor:</p>
110
- <div class="fragment"><pre class="fragment"> <a class="code" href="classPassenger_1_1EventedClient.html#ac3c45bfa7ac30b6d59ef08dc296f3c4e" title="Creates a new EventedClient with the given libev loop and file descriptor.">EventedClient</a> *client = <span class="keyword">new</span> <a class="code" href="classPassenger_1_1EventedClient.html#ac3c45bfa7ac30b6d59ef08dc296f3c4e" title="Creates a new EventedClient with the given libev loop and file descriptor.">EventedClient</a>(loop, <a class="code" href="classPassenger_1_1EventedClient.html#a4473719c16cae760e1811b7ccb1dc491" title="The client&amp;#39;s file descriptor.">fd</a>);
111
- </pre></div><p>You are probably interested in read readiness notifications on <code>fd</code>. However these notifications are disabled by default. You need to set the <code>onReadable</code> callback (which is called every time the fd is readable) and enable read notifications.</p>
112
- <div class="fragment"><pre class="fragment"> <span class="keywordtype">void</span> <a class="code" href="classPassenger_1_1EventedClient.html#a155988f311fba920bef3031f3d9b6f6a" title="Called when the file descriptor becomes readable and read notifications are enabled...">onReadable</a>(<a class="code" href="classPassenger_1_1EventedClient.html#ac3c45bfa7ac30b6d59ef08dc296f3c4e" title="Creates a new EventedClient with the given libev loop and file descriptor.">EventedClient</a> *client) {
113
- <span class="comment">// do whatever you want</span>
114
- }
115
-
116
- ...
117
- client-&gt;onReadable = <a class="code" href="classPassenger_1_1EventedClient.html#a155988f311fba920bef3031f3d9b6f6a" title="Called when the file descriptor becomes readable and read notifications are enabled...">onReadable</a>;
118
- client-&gt;notifyReads(<span class="keyword">true</span>);
119
- </pre></div><h2>Error handling</h2>
120
- <p><a class="el" href="classPassenger_1_1EventedClient.html" title="A utility class for making I/O handling in non-blocking libev evented servers much...">EventedClient</a> never raises exceptions, except when your callbacks do. It reports errors with the <code>onSystemError</code> callback. That said, <a class="el" href="classPassenger_1_1EventedClient.html" title="A utility class for making I/O handling in non-blocking libev evented servers much...">EventedClient</a> is exception-aware and will ensure that its internal state stays consistent even when your callbacks throw exceptions. </p>
121
- <hr/><h2>Member Enumeration Documentation</h2>
122
- <a class="anchor" id="a931edf284fed32f74ebf9dc35d993f17"></a><!-- doxytag: member="Passenger::EventedClient::@1" ref="a931edf284fed32f74ebf9dc35d993f17" args="" -->
123
- <div class="memitem">
124
- <div class="memproto">
125
- <table class="memname">
126
- <tr>
127
- <td class="memname">anonymous enum</td>
128
- </tr>
129
- </table>
130
- </div>
131
- <div class="memdoc">
132
-
133
- <p>Controls what to do when a write error is encountered. </p>
134
- <dl><dt><b>Enumerator: </b></dt><dd><table border="0" cellspacing="2" cellpadding="0">
135
- <tr><td valign="top"><em><a class="anchor" id="a931edf284fed32f74ebf9dc35d993f17a627c2190c3a4dc848dc1a332ef9f5105"></a><!-- doxytag: member="DISCONNECT_FULL" ref="a931edf284fed32f74ebf9dc35d993f17a627c2190c3a4dc848dc1a332ef9f5105" args="" -->DISCONNECT_FULL</em>&nbsp;</td><td>
136
- <p>Forcefully disconnect the client. </p>
137
- </td></tr>
138
- <tr><td valign="top"><em><a class="anchor" id="a931edf284fed32f74ebf9dc35d993f17a232760bee5b535fd40e609ff8c088693"></a><!-- doxytag: member="DISCONNECT_WRITE" ref="a931edf284fed32f74ebf9dc35d993f17a232760bee5b535fd40e609ff8c088693" args="" -->DISCONNECT_WRITE</em>&nbsp;</td><td>
139
- <p>Close the writer side of the connection, but continue allowing reading. </p>
140
- </td></tr>
141
- </table>
142
- </dd>
143
- </dl>
144
-
145
- </div>
146
- </div>
147
- <hr/><h2>Constructor &amp; Destructor Documentation</h2>
148
- <a class="anchor" id="ac3c45bfa7ac30b6d59ef08dc296f3c4e"></a><!-- doxytag: member="Passenger::EventedClient::EventedClient" ref="ac3c45bfa7ac30b6d59ef08dc296f3c4e" args="(struct ev_loop *loop, const FileDescriptor &amp;_fd)" -->
149
- <div class="memitem">
150
- <div class="memproto">
151
- <table class="memname">
152
- <tr>
153
- <td class="memname">Passenger::EventedClient::EventedClient </td>
154
- <td>(</td>
155
- <td class="paramtype">struct ev_loop *&nbsp;</td>
156
- <td class="paramname"> <em>loop</em>, </td>
157
- </tr>
158
- <tr>
159
- <td class="paramkey"></td>
160
- <td></td>
161
- <td class="paramtype">const <a class="el" href="classPassenger_1_1FileDescriptor.html">FileDescriptor</a> &amp;&nbsp;</td>
162
- <td class="paramname"> <em>_fd</em></td><td>&nbsp;</td>
163
- </tr>
164
- <tr>
165
- <td></td>
166
- <td>)</td>
167
- <td></td><td></td><td><code> [inline]</code></td>
168
- </tr>
169
- </table>
170
- </div>
171
- <div class="memdoc">
172
-
173
- <p>Creates a new <a class="el" href="classPassenger_1_1EventedClient.html" title="A utility class for making I/O handling in non-blocking libev evented servers much...">EventedClient</a> with the given libev loop and file descriptor. </p>
174
- <p>The initial reference count is 1. </p>
175
-
176
- </div>
177
- </div>
178
- <hr/><h2>Member Function Documentation</h2>
179
- <a class="anchor" id="a9161e34ddc473c00fe4df8fdb1d1baef"></a><!-- doxytag: member="Passenger::EventedClient::closeWrite" ref="a9161e34ddc473c00fe4df8fdb1d1baef" args="()" -->
180
- <div class="memitem">
181
- <div class="memproto">
182
- <table class="memname">
183
- <tr>
184
- <td class="memname">void Passenger::EventedClient::closeWrite </td>
185
- <td>(</td>
186
- <td class="paramname"></td>
187
- <td>&nbsp;)&nbsp;</td>
188
- <td><code> [inline]</code></td>
189
- </tr>
190
- </table>
191
- </div>
192
- <div class="memdoc">
193
-
194
- <p>Close only the writer side of the client connection. </p>
195
- <p>After calling this method, subsequent write() calls won't do anything anymore. Any pending outgoing data will be sent out whenever the opportunity arises.</p>
196
- <p>This function does nothing if the client is being disconnected, already disconnected or if only the writer side is closed. </p>
197
-
198
- </div>
199
- </div>
200
- <a class="anchor" id="a408b593d118c3483bcef8118a7edba0f"></a><!-- doxytag: member="Passenger::EventedClient::detach" ref="a408b593d118c3483bcef8118a7edba0f" args="()" -->
201
- <div class="memitem">
202
- <div class="memproto">
203
- <table class="memname">
204
- <tr>
205
- <td class="memname"><a class="el" href="classPassenger_1_1FileDescriptor.html">FileDescriptor</a> Passenger::EventedClient::detach </td>
206
- <td>(</td>
207
- <td class="paramname"></td>
208
- <td>&nbsp;)&nbsp;</td>
209
- <td><code> [inline]</code></td>
210
- </tr>
211
- </table>
212
- </div>
213
- <div class="memdoc">
214
-
215
- <p>Detaches the client file descriptor so that this <a class="el" href="classPassenger_1_1EventedClient.html" title="A utility class for making I/O handling in non-blocking libev evented servers much...">EventedClient</a> no longer has any control over it. </p>
216
- <p>Any <a class="el" href="classPassenger_1_1EventedClient.html" title="A utility class for making I/O handling in non-blocking libev evented servers much...">EventedClient</a> I/O watchers on the client file descriptor will be stopped and further I/O on the file descriptor via <a class="el" href="classPassenger_1_1EventedClient.html" title="A utility class for making I/O handling in non-blocking libev evented servers much...">EventedClient</a> will become impossible. Any pending outgoing data will be discarded. The original client file descriptor is returned and <code>onDetach</code> is called. Subsequent calls to this function will return -1 and will no longer call <code>onDetach</code>.</p>
217
- <dl class="post"><dt><b>Postcondition:</b></dt><dd>!ioAllowed() </dd>
218
- <dd>
219
- fd == -1 </dd></dl>
220
-
221
- </div>
222
- </div>
223
- <a class="anchor" id="a5b1a3011165ea9a47f6fe668a5010a20"></a><!-- doxytag: member="Passenger::EventedClient::disconnect" ref="a5b1a3011165ea9a47f6fe668a5010a20" args="(bool force=false)" -->
224
- <div class="memitem">
225
- <div class="memproto">
226
- <table class="memname">
227
- <tr>
228
- <td class="memname">void Passenger::EventedClient::disconnect </td>
229
- <td>(</td>
230
- <td class="paramtype">bool&nbsp;</td>
231
- <td class="paramname"> <em>force</em> = <code>false</code></td>
232
- <td>&nbsp;)&nbsp;</td>
233
- <td><code> [inline]</code></td>
234
- </tr>
235
- </table>
236
- </div>
237
- <div class="memdoc">
238
-
239
- <p>Disconnects the client. </p>
240
- <p>This actually closes the underlying file descriptor, even if the <a class="el" href="classPassenger_1_1FileDescriptor.html" title="Wrapper class around a file descriptor integer, for RAII behavior.">FileDescriptor</a> object still has references.</p>
241
- <p>If <em>force</em> is true then the client will be disconnected immediately, and any pending outgoing data will be discarded. Otherwise the client will be disconnected after all pending outgoing data have been sent; in the mean time no new data can be received from or sent to the client.</p>
242
- <p>After the client has actually been disconnected (which may be either immediately or after a short period of time), a disconnect event will be emitted.</p>
243
- <p>If the client connection has already been closed then this method does nothing. If the client connection is being closed (because there's pending outgoing data) then the behavior depends on the <code>force</code> argument: if true then the connection is closed immediately and the pending data is discarded, otherwise this method does nothing.</p>
244
- <p>The <code>onDisconnect</code> callback will be called after the file descriptor is closed, which is either immediately or after all pending data has been sent out. </p>
245
-
246
- </div>
247
- </div>
248
- <a class="anchor" id="a50436eb8ec0cc38b5a7278962e98a22c"></a><!-- doxytag: member="Passenger::EventedClient::ioAllowed" ref="a50436eb8ec0cc38b5a7278962e98a22c" args="() const " -->
249
- <div class="memitem">
250
- <div class="memproto">
251
- <table class="memname">
252
- <tr>
253
- <td class="memname">bool Passenger::EventedClient::ioAllowed </td>
254
- <td>(</td>
255
- <td class="paramname"></td>
256
- <td>&nbsp;)&nbsp;</td>
257
- <td> const<code> [inline]</code></td>
258
- </tr>
259
- </table>
260
- </div>
261
- <div class="memdoc">
262
-
263
- <p>Returns whether it is allowed to perform some kind of I/O with this client, either reading or writing. </p>
264
- <p>Usually true, and false when the client is either being disconnected or has been disconnected. A return value of false indicates that <code>fd</code> might be -1, but even when it isn't -1 you shouldn't access <code>fd</code> anymore. When the connection is half-closed (e.g. after <a class="el" href="classPassenger_1_1EventedClient.html#a9161e34ddc473c00fe4df8fdb1d1baef" title="Close only the writer side of the client connection.">closeWrite()</a> has been called) the return value is still be true. Only when I/O of any kind is disallowed will this function return false. </p>
265
-
266
- </div>
267
- </div>
268
- <a class="anchor" id="a56ac52f1a4e77c49f72202d16e588f2f"></a><!-- doxytag: member="Passenger::EventedClient::notifyReads" ref="a56ac52f1a4e77c49f72202d16e588f2f" args="(bool enable)" -->
269
- <div class="memitem">
270
- <div class="memproto">
271
- <table class="memname">
272
- <tr>
273
- <td class="memname">void Passenger::EventedClient::notifyReads </td>
274
- <td>(</td>
275
- <td class="paramtype">bool&nbsp;</td>
276
- <td class="paramname"> <em>enable</em></td>
277
- <td>&nbsp;)&nbsp;</td>
278
- <td><code> [inline]</code></td>
279
- </tr>
280
- </table>
281
- </div>
282
- <div class="memdoc">
283
-
284
- <p>Sets whether you're interested in read events. </p>
285
- <p>This will start or stop the input readiness watcher appropriately according to the current state.</p>
286
- <p>If the client connection is already being closed or has already been closed then this method does nothing. </p>
287
-
288
- </div>
289
- </div>
290
- <a class="anchor" id="a0a032e54979b074641ffda807648a6e2"></a><!-- doxytag: member="Passenger::EventedClient::pendingWrites" ref="a0a032e54979b074641ffda807648a6e2" args="() const " -->
291
- <div class="memitem">
292
- <div class="memproto">
293
- <table class="memname">
294
- <tr>
295
- <td class="memname">size_t Passenger::EventedClient::pendingWrites </td>
296
- <td>(</td>
297
- <td class="paramname"></td>
298
- <td>&nbsp;)&nbsp;</td>
299
- <td> const<code> [inline]</code></td>
300
- </tr>
301
- </table>
302
- </div>
303
- <div class="memdoc">
304
-
305
- <p>Returns the number of bytes that are scheduled to be sent to the client at a later time. </p>
306
- <dl class="see"><dt><b>See also:</b></dt><dd>write() </dd></dl>
307
-
308
- </div>
309
- </div>
310
- <a class="anchor" id="a129f6d6a6123c9af1999eca4ae04a75a"></a><!-- doxytag: member="Passenger::EventedClient::readWatcherActive" ref="a129f6d6a6123c9af1999eca4ae04a75a" args="() const " -->
311
- <div class="memitem">
312
- <div class="memproto">
313
- <table class="memname">
314
- <tr>
315
- <td class="memname">bool Passenger::EventedClient::readWatcherActive </td>
316
- <td>(</td>
317
- <td class="paramname"></td>
318
- <td>&nbsp;)&nbsp;</td>
319
- <td> const<code> [inline]</code></td>
320
- </tr>
321
- </table>
322
- </div>
323
- <div class="memdoc">
324
-
325
- <p>Used by unit tests. </p>
326
-
327
- </div>
328
- </div>
329
- <a class="anchor" id="ac1eb48c0d5382a97facbf9af40924849"></a><!-- doxytag: member="Passenger::EventedClient::setOutboxLimit" ref="ac1eb48c0d5382a97facbf9af40924849" args="(unsigned int size)" -->
330
- <div class="memitem">
331
- <div class="memproto">
332
- <table class="memname">
333
- <tr>
334
- <td class="memname">void Passenger::EventedClient::setOutboxLimit </td>
335
- <td>(</td>
336
- <td class="paramtype">unsigned int&nbsp;</td>
337
- <td class="paramname"> <em>size</em></td>
338
- <td>&nbsp;)&nbsp;</td>
339
- <td><code> [inline]</code></td>
340
- </tr>
341
- </table>
342
- </div>
343
- <div class="memdoc">
344
-
345
- <p>Sets a limit on the client outbox. </p>
346
- <p>The outbox is where data is stored that could not be immediately sent to the client, e.g. because of network congestion. Whenver the outbox's size grows past this limit, <a class="el" href="classPassenger_1_1EventedClient.html" title="A utility class for making I/O handling in non-blocking libev evented servers much...">EventedClient</a> will enter a state in which it will stop listening for read events and instead concentrate on sending out all pending data.</p>
347
- <p>Setting this to 0 means that the outbox has an unlimited size. Please note however that this also means that the outbox's memory could grow unbounded if the client is too slow at receiving data.</p>
348
- <p>The default value is some non-zero value.</p>
349
- <p>If the client connection is already being closed or has already been closed then this method does nothing. </p>
350
-
351
- </div>
352
- </div>
353
- <a class="anchor" id="a1e480f15dfd339ff781f8daedc5b8190"></a><!-- doxytag: member="Passenger::EventedClient::unref" ref="a1e480f15dfd339ff781f8daedc5b8190" args="()" -->
354
- <div class="memitem">
355
- <div class="memproto">
356
- <table class="memname">
357
- <tr>
358
- <td class="memname">void Passenger::EventedClient::unref </td>
359
- <td>(</td>
360
- <td class="paramname"></td>
361
- <td>&nbsp;)&nbsp;</td>
362
- <td><code> [inline]</code></td>
363
- </tr>
364
- </table>
365
- </div>
366
- <div class="memdoc">
367
-
368
- <p>Decrease reference count. </p>
369
- <p>Upon reaching 0, this <a class="el" href="classPassenger_1_1EventedClient.html" title="A utility class for making I/O handling in non-blocking libev evented servers much...">EventedClient</a> object will be destroyed. </p>
370
-
371
- </div>
372
- </div>
373
- <a class="anchor" id="aa07723456786b9f18b973bd88ff51e27"></a><!-- doxytag: member="Passenger::EventedClient::write" ref="aa07723456786b9f18b973bd88ff51e27" args="(const StaticString data[], unsigned int count)" -->
374
- <div class="memitem">
375
- <div class="memproto">
376
- <table class="memname">
377
- <tr>
378
- <td class="memname">void Passenger::EventedClient::write </td>
379
- <td>(</td>
380
- <td class="paramtype">const <a class="el" href="classPassenger_1_1StaticString.html">StaticString</a>&nbsp;</td>
381
- <td class="paramname"> <em>data</em>[], </td>
382
- </tr>
383
- <tr>
384
- <td class="paramkey"></td>
385
- <td></td>
386
- <td class="paramtype">unsigned int&nbsp;</td>
387
- <td class="paramname"> <em>count</em></td><td>&nbsp;</td>
388
- </tr>
389
- <tr>
390
- <td></td>
391
- <td>)</td>
392
- <td></td><td></td><td><code> [inline]</code></td>
393
- </tr>
394
- </table>
395
- </div>
396
- <div class="memdoc">
397
-
398
- <p>Sends data to this client. </p>
399
- <p>This method will try to send the data immediately (in which no intermediate copies of the data will be made), but if the client is not yet ready to receive data (e.g. because of network congestion) then the data will be buffered and scheduled for sending later.</p>
400
- <p>If an I/O error was encountered then the action taken depends on the value of <em>writeActionError</em>. By default it is DISCONNECT_FULL, meaning the client connection will be closed by calling <code>disconnect(true)</code>. This means this method could potentially call the <code>onDisconnect</code> callback.</p>
401
- <p>If the client connection is already being closed, has already been closed or if the writer side is closed, then this method does nothing.</p>
402
- <p>The <code>onPendingDataFlushed</code> callback will be called after this data and whatever existing pending data have been written out. That may either be immediately or after a short period of of time. </p>
403
-
404
- </div>
405
- </div>
406
- <a class="anchor" id="aca719fb03ade09839827a16caa0e6e30"></a><!-- doxytag: member="Passenger::EventedClient::writeAllowed" ref="aca719fb03ade09839827a16caa0e6e30" args="() const " -->
407
- <div class="memitem">
408
- <div class="memproto">
409
- <table class="memname">
410
- <tr>
411
- <td class="memname">bool Passenger::EventedClient::writeAllowed </td>
412
- <td>(</td>
413
- <td class="paramname"></td>
414
- <td>&nbsp;)&nbsp;</td>
415
- <td> const<code> [inline]</code></td>
416
- </tr>
417
- </table>
418
- </div>
419
- <div class="memdoc">
420
-
421
- <p>Returns whether it is allowed to write data to the client. </p>
422
- <p>Usually true, and false when the client is either being disconnected or has been disconnected or when the writer side of the client connection has been closed. write() will do nothing if this function returns false. </p>
423
-
424
- </div>
425
- </div>
426
- <hr/><h2>Member Data Documentation</h2>
427
- <a class="anchor" id="a4473719c16cae760e1811b7ccb1dc491"></a><!-- doxytag: member="Passenger::EventedClient::fd" ref="a4473719c16cae760e1811b7ccb1dc491" args="" -->
428
- <div class="memitem">
429
- <div class="memproto">
430
- <table class="memname">
431
- <tr>
432
- <td class="memname"><a class="el" href="classPassenger_1_1FileDescriptor.html">FileDescriptor</a> <a class="el" href="classPassenger_1_1EventedClient.html#a4473719c16cae760e1811b7ccb1dc491">Passenger::EventedClient::fd</a></td>
433
- </tr>
434
- </table>
435
- </div>
436
- <div class="memdoc">
437
-
438
- <p>The client's file descriptor. </p>
439
- <p>Could be -1: see <code><a class="el" href="classPassenger_1_1EventedClient.html#a50436eb8ec0cc38b5a7278962e98a22c" title="Returns whether it is allowed to perform some kind of I/O with this client, either...">ioAllowed()</a></code>. </p>
440
-
441
- </div>
442
- </div>
443
- <a class="anchor" id="a211210ecd85eb2da47d200215132bb2d"></a><!-- doxytag: member="Passenger::EventedClient::onDisconnect" ref="a211210ecd85eb2da47d200215132bb2d" args="" -->
444
- <div class="memitem">
445
- <div class="memproto">
446
- <table class="memname">
447
- <tr>
448
- <td class="memname">Callback <a class="el" href="classPassenger_1_1EventedClient.html#a211210ecd85eb2da47d200215132bb2d">Passenger::EventedClient::onDisconnect</a></td>
449
- </tr>
450
- </table>
451
- </div>
452
- <div class="memdoc">
453
-
454
- <p>Called when the client is disconnected. </p>
455
- <p>This happens either immediately when <code><a class="el" href="classPassenger_1_1EventedClient.html#a5b1a3011165ea9a47f6fe668a5010a20" title="Disconnects the client.">disconnect()</a></code> is called, or a short amount of time later. See the documentation for that function for details.</p>
456
- <p>Please note that destroying an <a class="el" href="classPassenger_1_1EventedClient.html" title="A utility class for making I/O handling in non-blocking libev evented servers much...">EventedClient</a> object does *not* cause this callback to be called. </p>
457
-
458
- </div>
459
- </div>
460
- <a class="anchor" id="a22e93ce2be05a4f47dbeba95d79a79b9"></a><!-- doxytag: member="Passenger::EventedClient::onPendingDataFlushed" ref="a22e93ce2be05a4f47dbeba95d79a79b9" args="" -->
461
- <div class="memitem">
462
- <div class="memproto">
463
- <table class="memname">
464
- <tr>
465
- <td class="memname">Callback <a class="el" href="classPassenger_1_1EventedClient.html#a22e93ce2be05a4f47dbeba95d79a79b9">Passenger::EventedClient::onPendingDataFlushed</a></td>
466
- </tr>
467
- </table>
468
- </div>
469
- <div class="memdoc">
470
-
471
- <p>Called after all pending outgoing data have been written out. </p>
472
- <p>If <code>write()</code> can be completed immediately without scheduling data for later, then <code>write()</code> will call this callback immediately after writing. </p>
473
-
474
- </div>
475
- </div>
476
- <a class="anchor" id="a155988f311fba920bef3031f3d9b6f6a"></a><!-- doxytag: member="Passenger::EventedClient::onReadable" ref="a155988f311fba920bef3031f3d9b6f6a" args="" -->
477
- <div class="memitem">
478
- <div class="memproto">
479
- <table class="memname">
480
- <tr>
481
- <td class="memname">Callback <a class="el" href="classPassenger_1_1EventedClient.html#a155988f311fba920bef3031f3d9b6f6a">Passenger::EventedClient::onReadable</a></td>
482
- </tr>
483
- </table>
484
- </div>
485
- <div class="memdoc">
486
-
487
- <p>Called when the file descriptor becomes readable and read notifications are enabled (see <code>notifyRead()</code>). </p>
488
- <p>When there's too much pending outgoing data, readability notifications are temporarily disabled; see <code>write()</code> for details. </p>
489
-
490
- </div>
491
- </div>
492
- <a class="anchor" id="a793c843b7ba01cc1bb2c568c6539b9e0"></a><!-- doxytag: member="Passenger::EventedClient::userData" ref="a793c843b7ba01cc1bb2c568c6539b9e0" args="" -->
493
- <div class="memitem">
494
- <div class="memproto">
495
- <table class="memname">
496
- <tr>
497
- <td class="memname">void* <a class="el" href="classPassenger_1_1EventedClient.html#a793c843b7ba01cc1bb2c568c6539b9e0">Passenger::EventedClient::userData</a></td>
498
- </tr>
499
- </table>
500
- </div>
501
- <div class="memdoc">
502
-
503
- <p><a class="el" href="classPassenger_1_1EventedClient.html" title="A utility class for making I/O handling in non-blocking libev evented servers much...">EventedClient</a> doesn't do anything with this. </p>
504
- <p>Set it to whatever you want. </p>
505
-
506
- </div>
507
- </div>
508
- <a class="anchor" id="afc0934988a978a25538b7d8f2566c90a"></a><!-- doxytag: member="Passenger::EventedClient::writeErrorAction" ref="afc0934988a978a25538b7d8f2566c90a" args="" -->
509
- <div class="memitem">
510
- <div class="memproto">
511
- <table class="memname">
512
- <tr>
513
- <td class="memname">enum { ... } <a class="el" href="classPassenger_1_1EventedClient.html#afc0934988a978a25538b7d8f2566c90a">Passenger::EventedClient::writeErrorAction</a></td>
514
- </tr>
515
- </table>
516
- </div>
517
- <div class="memdoc">
518
-
519
- <p>Controls what to do when a write error is encountered. </p>
520
-
521
- </div>
522
- </div>
523
- <hr/>The documentation for this class was generated from the following file:<ul>
524
- <li><a class="el" href="EventedClient_8h_source.html">EventedClient.h</a></li>
525
- </ul>
526
- </div>
527
- <hr size="1"/><address style="text-align: right;"><small>Generated by&nbsp;
528
- <a href="http://www.doxygen.org/index.html">
529
- <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.2 </small></address>
530
- </body>
531
- </html>