nginxtra 1.0.15.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (363) hide show
  1. data/VERSION +1 -0
  2. data/bin/nginxtra +5 -0
  3. data/lib/nginxtra.rb +12 -0
  4. data/lib/nginxtra/action.rb +36 -0
  5. data/lib/nginxtra/actions/compile.rb +60 -0
  6. data/lib/nginxtra/actions/install.rb +99 -0
  7. data/lib/nginxtra/actions/reload.rb +14 -0
  8. data/lib/nginxtra/actions/restart.rb +15 -0
  9. data/lib/nginxtra/actions/start.rb +53 -0
  10. data/lib/nginxtra/actions/status.rb +31 -0
  11. data/lib/nginxtra/actions/stop.rb +14 -0
  12. data/lib/nginxtra/cli.rb +77 -0
  13. data/lib/nginxtra/config.rb +339 -0
  14. data/lib/nginxtra/error.rb +13 -0
  15. data/lib/nginxtra/status.rb +57 -0
  16. data/src/nginx/CHANGES +5630 -0
  17. data/src/nginx/CHANGES.ru +5716 -0
  18. data/src/nginx/LICENSE +25 -0
  19. data/src/nginx/README +3 -0
  20. data/src/nginx/auto/cc/acc +15 -0
  21. data/src/nginx/auto/cc/bcc +72 -0
  22. data/src/nginx/auto/cc/ccc +46 -0
  23. data/src/nginx/auto/cc/conf +189 -0
  24. data/src/nginx/auto/cc/gcc +183 -0
  25. data/src/nginx/auto/cc/icc +121 -0
  26. data/src/nginx/auto/cc/msvc +138 -0
  27. data/src/nginx/auto/cc/name +101 -0
  28. data/src/nginx/auto/cc/owc +104 -0
  29. data/src/nginx/auto/cc/sunc +158 -0
  30. data/src/nginx/auto/define +12 -0
  31. data/src/nginx/auto/endianess +45 -0
  32. data/src/nginx/auto/feature +123 -0
  33. data/src/nginx/auto/have +12 -0
  34. data/src/nginx/auto/have_headers +12 -0
  35. data/src/nginx/auto/headers +13 -0
  36. data/src/nginx/auto/include +61 -0
  37. data/src/nginx/auto/init +51 -0
  38. data/src/nginx/auto/install +184 -0
  39. data/src/nginx/auto/lib/conf +83 -0
  40. data/src/nginx/auto/lib/geoip/conf +79 -0
  41. data/src/nginx/auto/lib/google-perftools/conf +45 -0
  42. data/src/nginx/auto/lib/libatomic/conf +43 -0
  43. data/src/nginx/auto/lib/libatomic/make +14 -0
  44. data/src/nginx/auto/lib/libgd/conf +83 -0
  45. data/src/nginx/auto/lib/libxslt/conf +156 -0
  46. data/src/nginx/auto/lib/make +32 -0
  47. data/src/nginx/auto/lib/md5/conf +103 -0
  48. data/src/nginx/auto/lib/md5/make +96 -0
  49. data/src/nginx/auto/lib/md5/makefile.bcc +22 -0
  50. data/src/nginx/auto/lib/md5/makefile.msvc +22 -0
  51. data/src/nginx/auto/lib/md5/makefile.owc +11 -0
  52. data/src/nginx/auto/lib/openssl/conf +74 -0
  53. data/src/nginx/auto/lib/openssl/make +67 -0
  54. data/src/nginx/auto/lib/openssl/makefile.bcc +18 -0
  55. data/src/nginx/auto/lib/openssl/makefile.msvc +14 -0
  56. data/src/nginx/auto/lib/pcre/conf +180 -0
  57. data/src/nginx/auto/lib/pcre/make +64 -0
  58. data/src/nginx/auto/lib/pcre/makefile.bcc +26 -0
  59. data/src/nginx/auto/lib/pcre/makefile.msvc +22 -0
  60. data/src/nginx/auto/lib/pcre/makefile.owc +24 -0
  61. data/src/nginx/auto/lib/perl/conf +60 -0
  62. data/src/nginx/auto/lib/perl/make +36 -0
  63. data/src/nginx/auto/lib/sha1/conf +79 -0
  64. data/src/nginx/auto/lib/sha1/make +96 -0
  65. data/src/nginx/auto/lib/sha1/makefile.bcc +22 -0
  66. data/src/nginx/auto/lib/sha1/makefile.msvc +22 -0
  67. data/src/nginx/auto/lib/sha1/makefile.owc +11 -0
  68. data/src/nginx/auto/lib/test +40 -0
  69. data/src/nginx/auto/lib/zlib/conf +76 -0
  70. data/src/nginx/auto/lib/zlib/make +114 -0
  71. data/src/nginx/auto/lib/zlib/makefile.bcc +15 -0
  72. data/src/nginx/auto/lib/zlib/makefile.msvc +14 -0
  73. data/src/nginx/auto/lib/zlib/makefile.owc +14 -0
  74. data/src/nginx/auto/lib/zlib/patch.zlib.h +10 -0
  75. data/src/nginx/auto/make +417 -0
  76. data/src/nginx/auto/modules +479 -0
  77. data/src/nginx/auto/nohave +12 -0
  78. data/src/nginx/auto/options +490 -0
  79. data/src/nginx/auto/os/conf +105 -0
  80. data/src/nginx/auto/os/darwin +116 -0
  81. data/src/nginx/auto/os/freebsd +136 -0
  82. data/src/nginx/auto/os/linux +152 -0
  83. data/src/nginx/auto/os/solaris +60 -0
  84. data/src/nginx/auto/os/win32 +29 -0
  85. data/src/nginx/auto/sources +518 -0
  86. data/src/nginx/auto/stubs +8 -0
  87. data/src/nginx/auto/summary +114 -0
  88. data/src/nginx/auto/types/sizeof +83 -0
  89. data/src/nginx/auto/types/typedef +77 -0
  90. data/src/nginx/auto/types/uintptr_t +42 -0
  91. data/src/nginx/auto/types/value +12 -0
  92. data/src/nginx/auto/unix +719 -0
  93. data/src/nginx/conf/fastcgi.conf +24 -0
  94. data/src/nginx/conf/fastcgi_params +23 -0
  95. data/src/nginx/conf/koi-utf +109 -0
  96. data/src/nginx/conf/koi-win +103 -0
  97. data/src/nginx/conf/mime.types +80 -0
  98. data/src/nginx/conf/nginx.conf +118 -0
  99. data/src/nginx/conf/scgi_params +15 -0
  100. data/src/nginx/conf/uwsgi_params +15 -0
  101. data/src/nginx/conf/win-utf +126 -0
  102. data/src/nginx/configure +108 -0
  103. data/src/nginx/contrib/README +15 -0
  104. data/src/nginx/contrib/geo2nginx.pl +58 -0
  105. data/src/nginx/contrib/unicode2nginx/koi-utf +131 -0
  106. data/src/nginx/contrib/unicode2nginx/unicode-to-nginx.pl +45 -0
  107. data/src/nginx/contrib/unicode2nginx/win-utf +130 -0
  108. data/src/nginx/html/50x.html +18 -0
  109. data/src/nginx/html/index.html +8 -0
  110. data/src/nginx/man/nginx.8 +202 -0
  111. data/src/nginx/src/core/nginx.c +1333 -0
  112. data/src/nginx/src/core/nginx.h +20 -0
  113. data/src/nginx/src/core/ngx_array.c +147 -0
  114. data/src/nginx/src/core/ngx_array.h +53 -0
  115. data/src/nginx/src/core/ngx_buf.c +218 -0
  116. data/src/nginx/src/core/ngx_buf.h +162 -0
  117. data/src/nginx/src/core/ngx_conf_file.c +1506 -0
  118. data/src/nginx/src/core/ngx_conf_file.h +348 -0
  119. data/src/nginx/src/core/ngx_config.h +134 -0
  120. data/src/nginx/src/core/ngx_connection.c +1074 -0
  121. data/src/nginx/src/core/ngx_connection.h +195 -0
  122. data/src/nginx/src/core/ngx_core.h +95 -0
  123. data/src/nginx/src/core/ngx_cpuinfo.c +139 -0
  124. data/src/nginx/src/core/ngx_crc.h +39 -0
  125. data/src/nginx/src/core/ngx_crc32.c +129 -0
  126. data/src/nginx/src/core/ngx_crc32.h +79 -0
  127. data/src/nginx/src/core/ngx_crypt.c +238 -0
  128. data/src/nginx/src/core/ngx_crypt.h +20 -0
  129. data/src/nginx/src/core/ngx_cycle.c +1379 -0
  130. data/src/nginx/src/core/ngx_cycle.h +142 -0
  131. data/src/nginx/src/core/ngx_file.c +993 -0
  132. data/src/nginx/src/core/ngx_file.h +151 -0
  133. data/src/nginx/src/core/ngx_hash.c +976 -0
  134. data/src/nginx/src/core/ngx_hash.h +122 -0
  135. data/src/nginx/src/core/ngx_inet.c +1008 -0
  136. data/src/nginx/src/core/ngx_inet.h +120 -0
  137. data/src/nginx/src/core/ngx_list.c +71 -0
  138. data/src/nginx/src/core/ngx_list.h +83 -0
  139. data/src/nginx/src/core/ngx_log.c +459 -0
  140. data/src/nginx/src/core/ngx_log.h +250 -0
  141. data/src/nginx/src/core/ngx_md5.c +289 -0
  142. data/src/nginx/src/core/ngx_md5.h +60 -0
  143. data/src/nginx/src/core/ngx_murmurhash.c +50 -0
  144. data/src/nginx/src/core/ngx_murmurhash.h +19 -0
  145. data/src/nginx/src/core/ngx_open_file_cache.c +882 -0
  146. data/src/nginx/src/core/ngx_open_file_cache.h +119 -0
  147. data/src/nginx/src/core/ngx_output_chain.c +673 -0
  148. data/src/nginx/src/core/ngx_palloc.c +433 -0
  149. data/src/nginx/src/core/ngx_palloc.h +95 -0
  150. data/src/nginx/src/core/ngx_parse.c +249 -0
  151. data/src/nginx/src/core/ngx_parse.h +24 -0
  152. data/src/nginx/src/core/ngx_queue.c +80 -0
  153. data/src/nginx/src/core/ngx_queue.h +112 -0
  154. data/src/nginx/src/core/ngx_radix_tree.c +291 -0
  155. data/src/nginx/src/core/ngx_radix_tree.h +46 -0
  156. data/src/nginx/src/core/ngx_rbtree.c +383 -0
  157. data/src/nginx/src/core/ngx_rbtree.h +84 -0
  158. data/src/nginx/src/core/ngx_regex.c +206 -0
  159. data/src/nginx/src/core/ngx_regex.h +56 -0
  160. data/src/nginx/src/core/ngx_resolver.c +2201 -0
  161. data/src/nginx/src/core/ngx_resolver.h +149 -0
  162. data/src/nginx/src/core/ngx_sha1.h +31 -0
  163. data/src/nginx/src/core/ngx_shmtx.c +284 -0
  164. data/src/nginx/src/core/ngx_shmtx.h +38 -0
  165. data/src/nginx/src/core/ngx_slab.c +701 -0
  166. data/src/nginx/src/core/ngx_slab.h +54 -0
  167. data/src/nginx/src/core/ngx_spinlock.c +53 -0
  168. data/src/nginx/src/core/ngx_string.c +1837 -0
  169. data/src/nginx/src/core/ngx_string.h +231 -0
  170. data/src/nginx/src/core/ngx_times.c +407 -0
  171. data/src/nginx/src/core/ngx_times.h +51 -0
  172. data/src/nginx/src/event/modules/ngx_aio_module.c +171 -0
  173. data/src/nginx/src/event/modules/ngx_devpoll_module.c +569 -0
  174. data/src/nginx/src/event/modules/ngx_epoll_module.c +833 -0
  175. data/src/nginx/src/event/modules/ngx_eventport_module.c +602 -0
  176. data/src/nginx/src/event/modules/ngx_kqueue_module.c +785 -0
  177. data/src/nginx/src/event/modules/ngx_poll_module.c +443 -0
  178. data/src/nginx/src/event/modules/ngx_rtsig_module.c +735 -0
  179. data/src/nginx/src/event/modules/ngx_select_module.c +435 -0
  180. data/src/nginx/src/event/modules/ngx_win32_select_module.c +400 -0
  181. data/src/nginx/src/event/ngx_event.c +1275 -0
  182. data/src/nginx/src/event/ngx_event.h +573 -0
  183. data/src/nginx/src/event/ngx_event_accept.c +428 -0
  184. data/src/nginx/src/event/ngx_event_busy_lock.c +286 -0
  185. data/src/nginx/src/event/ngx_event_busy_lock.h +65 -0
  186. data/src/nginx/src/event/ngx_event_connect.c +258 -0
  187. data/src/nginx/src/event/ngx_event_connect.h +76 -0
  188. data/src/nginx/src/event/ngx_event_mutex.c +70 -0
  189. data/src/nginx/src/event/ngx_event_openssl.c +2382 -0
  190. data/src/nginx/src/event/ngx_event_openssl.h +162 -0
  191. data/src/nginx/src/event/ngx_event_pipe.c +996 -0
  192. data/src/nginx/src/event/ngx_event_pipe.h +95 -0
  193. data/src/nginx/src/event/ngx_event_posted.c +173 -0
  194. data/src/nginx/src/event/ngx_event_posted.h +75 -0
  195. data/src/nginx/src/event/ngx_event_timer.c +159 -0
  196. data/src/nginx/src/event/ngx_event_timer.h +102 -0
  197. data/src/nginx/src/http/modules/ngx_http_access_module.c +384 -0
  198. data/src/nginx/src/http/modules/ngx_http_addition_filter_module.c +250 -0
  199. data/src/nginx/src/http/modules/ngx_http_auth_basic_module.c +478 -0
  200. data/src/nginx/src/http/modules/ngx_http_autoindex_module.c +701 -0
  201. data/src/nginx/src/http/modules/ngx_http_browser_module.c +713 -0
  202. data/src/nginx/src/http/modules/ngx_http_charset_filter_module.c +1681 -0
  203. data/src/nginx/src/http/modules/ngx_http_chunked_filter_module.c +242 -0
  204. data/src/nginx/src/http/modules/ngx_http_dav_module.c +1141 -0
  205. data/src/nginx/src/http/modules/ngx_http_degradation_module.c +243 -0
  206. data/src/nginx/src/http/modules/ngx_http_empty_gif_module.c +140 -0
  207. data/src/nginx/src/http/modules/ngx_http_fastcgi_module.c +2916 -0
  208. data/src/nginx/src/http/modules/ngx_http_flv_module.c +254 -0
  209. data/src/nginx/src/http/modules/ngx_http_geo_module.c +1441 -0
  210. data/src/nginx/src/http/modules/ngx_http_geoip_module.c +671 -0
  211. data/src/nginx/src/http/modules/ngx_http_gzip_filter_module.c +1206 -0
  212. data/src/nginx/src/http/modules/ngx_http_gzip_static_module.c +299 -0
  213. data/src/nginx/src/http/modules/ngx_http_headers_filter_module.c +616 -0
  214. data/src/nginx/src/http/modules/ngx_http_image_filter_module.c +1489 -0
  215. data/src/nginx/src/http/modules/ngx_http_index_module.c +516 -0
  216. data/src/nginx/src/http/modules/ngx_http_limit_req_module.c +809 -0
  217. data/src/nginx/src/http/modules/ngx_http_limit_zone_module.c +553 -0
  218. data/src/nginx/src/http/modules/ngx_http_log_module.c +1357 -0
  219. data/src/nginx/src/http/modules/ngx_http_map_module.c +575 -0
  220. data/src/nginx/src/http/modules/ngx_http_memcached_module.c +624 -0
  221. data/src/nginx/src/http/modules/ngx_http_mp4_module.c +3000 -0
  222. data/src/nginx/src/http/modules/ngx_http_not_modified_filter_module.c +143 -0
  223. data/src/nginx/src/http/modules/ngx_http_proxy_module.c +2831 -0
  224. data/src/nginx/src/http/modules/ngx_http_random_index_module.c +317 -0
  225. data/src/nginx/src/http/modules/ngx_http_range_filter_module.c +855 -0
  226. data/src/nginx/src/http/modules/ngx_http_realip_module.c +476 -0
  227. data/src/nginx/src/http/modules/ngx_http_referer_module.c +613 -0
  228. data/src/nginx/src/http/modules/ngx_http_rewrite_module.c +1019 -0
  229. data/src/nginx/src/http/modules/ngx_http_scgi_module.c +1714 -0
  230. data/src/nginx/src/http/modules/ngx_http_secure_link_module.c +355 -0
  231. data/src/nginx/src/http/modules/ngx_http_split_clients_module.c +242 -0
  232. data/src/nginx/src/http/modules/ngx_http_ssi_filter_module.c +2913 -0
  233. data/src/nginx/src/http/modules/ngx_http_ssi_filter_module.h +114 -0
  234. data/src/nginx/src/http/modules/ngx_http_ssl_module.c +652 -0
  235. data/src/nginx/src/http/modules/ngx_http_ssl_module.h +52 -0
  236. data/src/nginx/src/http/modules/ngx_http_static_module.c +278 -0
  237. data/src/nginx/src/http/modules/ngx_http_stub_status_module.c +144 -0
  238. data/src/nginx/src/http/modules/ngx_http_sub_filter_module.c +716 -0
  239. data/src/nginx/src/http/modules/ngx_http_upstream_ip_hash_module.c +237 -0
  240. data/src/nginx/src/http/modules/ngx_http_userid_filter_module.c +846 -0
  241. data/src/nginx/src/http/modules/ngx_http_uwsgi_module.c +1774 -0
  242. data/src/nginx/src/http/modules/ngx_http_xslt_filter_module.c +984 -0
  243. data/src/nginx/src/http/modules/perl/Makefile.PL +42 -0
  244. data/src/nginx/src/http/modules/perl/nginx.pm +137 -0
  245. data/src/nginx/src/http/modules/perl/nginx.xs +986 -0
  246. data/src/nginx/src/http/modules/perl/ngx_http_perl_module.c +1076 -0
  247. data/src/nginx/src/http/modules/perl/ngx_http_perl_module.h +67 -0
  248. data/src/nginx/src/http/modules/perl/typemap +3 -0
  249. data/src/nginx/src/http/ngx_http.c +2073 -0
  250. data/src/nginx/src/http/ngx_http.h +160 -0
  251. data/src/nginx/src/http/ngx_http_busy_lock.c +307 -0
  252. data/src/nginx/src/http/ngx_http_busy_lock.h +54 -0
  253. data/src/nginx/src/http/ngx_http_cache.h +148 -0
  254. data/src/nginx/src/http/ngx_http_config.h +75 -0
  255. data/src/nginx/src/http/ngx_http_copy_filter_module.c +300 -0
  256. data/src/nginx/src/http/ngx_http_core_module.c +4736 -0
  257. data/src/nginx/src/http/ngx_http_core_module.h +541 -0
  258. data/src/nginx/src/http/ngx_http_file_cache.c +1715 -0
  259. data/src/nginx/src/http/ngx_http_header_filter_module.c +623 -0
  260. data/src/nginx/src/http/ngx_http_parse.c +1734 -0
  261. data/src/nginx/src/http/ngx_http_parse_time.c +276 -0
  262. data/src/nginx/src/http/ngx_http_postpone_filter_module.c +178 -0
  263. data/src/nginx/src/http/ngx_http_request.c +3181 -0
  264. data/src/nginx/src/http/ngx_http_request.h +573 -0
  265. data/src/nginx/src/http/ngx_http_request_body.c +644 -0
  266. data/src/nginx/src/http/ngx_http_script.c +1752 -0
  267. data/src/nginx/src/http/ngx_http_script.h +257 -0
  268. data/src/nginx/src/http/ngx_http_special_response.c +789 -0
  269. data/src/nginx/src/http/ngx_http_upstream.c +4555 -0
  270. data/src/nginx/src/http/ngx_http_upstream.h +350 -0
  271. data/src/nginx/src/http/ngx_http_upstream_round_robin.c +791 -0
  272. data/src/nginx/src/http/ngx_http_upstream_round_robin.h +85 -0
  273. data/src/nginx/src/http/ngx_http_variables.c +2053 -0
  274. data/src/nginx/src/http/ngx_http_variables.h +115 -0
  275. data/src/nginx/src/http/ngx_http_write_filter_module.c +315 -0
  276. data/src/nginx/src/mail/ngx_mail.c +542 -0
  277. data/src/nginx/src/mail/ngx_mail.h +407 -0
  278. data/src/nginx/src/mail/ngx_mail_auth_http_module.c +1452 -0
  279. data/src/nginx/src/mail/ngx_mail_core_module.c +553 -0
  280. data/src/nginx/src/mail/ngx_mail_handler.c +773 -0
  281. data/src/nginx/src/mail/ngx_mail_imap_handler.c +457 -0
  282. data/src/nginx/src/mail/ngx_mail_imap_module.c +253 -0
  283. data/src/nginx/src/mail/ngx_mail_imap_module.h +39 -0
  284. data/src/nginx/src/mail/ngx_mail_parse.c +885 -0
  285. data/src/nginx/src/mail/ngx_mail_pop3_handler.c +500 -0
  286. data/src/nginx/src/mail/ngx_mail_pop3_module.c +264 -0
  287. data/src/nginx/src/mail/ngx_mail_pop3_module.h +38 -0
  288. data/src/nginx/src/mail/ngx_mail_proxy_module.c +1089 -0
  289. data/src/nginx/src/mail/ngx_mail_smtp_handler.c +872 -0
  290. data/src/nginx/src/mail/ngx_mail_smtp_module.c +308 -0
  291. data/src/nginx/src/mail/ngx_mail_smtp_module.h +45 -0
  292. data/src/nginx/src/mail/ngx_mail_ssl_module.c +491 -0
  293. data/src/nginx/src/mail/ngx_mail_ssl_module.h +52 -0
  294. data/src/nginx/src/misc/ngx_cpp_test_module.cpp +27 -0
  295. data/src/nginx/src/misc/ngx_google_perftools_module.c +126 -0
  296. data/src/nginx/src/os/unix/ngx_aio_read.c +109 -0
  297. data/src/nginx/src/os/unix/ngx_aio_read_chain.c +78 -0
  298. data/src/nginx/src/os/unix/ngx_aio_write.c +109 -0
  299. data/src/nginx/src/os/unix/ngx_aio_write_chain.c +100 -0
  300. data/src/nginx/src/os/unix/ngx_alloc.c +90 -0
  301. data/src/nginx/src/os/unix/ngx_alloc.h +45 -0
  302. data/src/nginx/src/os/unix/ngx_atomic.h +311 -0
  303. data/src/nginx/src/os/unix/ngx_channel.c +258 -0
  304. data/src/nginx/src/os/unix/ngx_channel.h +34 -0
  305. data/src/nginx/src/os/unix/ngx_daemon.c +69 -0
  306. data/src/nginx/src/os/unix/ngx_darwin.h +20 -0
  307. data/src/nginx/src/os/unix/ngx_darwin_config.h +96 -0
  308. data/src/nginx/src/os/unix/ngx_darwin_init.c +166 -0
  309. data/src/nginx/src/os/unix/ngx_darwin_sendfile_chain.c +366 -0
  310. data/src/nginx/src/os/unix/ngx_errno.c +87 -0
  311. data/src/nginx/src/os/unix/ngx_errno.h +68 -0
  312. data/src/nginx/src/os/unix/ngx_file_aio_read.c +208 -0
  313. data/src/nginx/src/os/unix/ngx_files.c +566 -0
  314. data/src/nginx/src/os/unix/ngx_files.h +343 -0
  315. data/src/nginx/src/os/unix/ngx_freebsd.h +24 -0
  316. data/src/nginx/src/os/unix/ngx_freebsd_config.h +119 -0
  317. data/src/nginx/src/os/unix/ngx_freebsd_init.c +259 -0
  318. data/src/nginx/src/os/unix/ngx_freebsd_rfork_thread.c +756 -0
  319. data/src/nginx/src/os/unix/ngx_freebsd_rfork_thread.h +122 -0
  320. data/src/nginx/src/os/unix/ngx_freebsd_sendfile_chain.c +436 -0
  321. data/src/nginx/src/os/unix/ngx_gcc_atomic_amd64.h +82 -0
  322. data/src/nginx/src/os/unix/ngx_gcc_atomic_ppc.h +155 -0
  323. data/src/nginx/src/os/unix/ngx_gcc_atomic_sparc64.h +82 -0
  324. data/src/nginx/src/os/unix/ngx_gcc_atomic_x86.h +127 -0
  325. data/src/nginx/src/os/unix/ngx_linux.h +18 -0
  326. data/src/nginx/src/os/unix/ngx_linux_aio_read.c +137 -0
  327. data/src/nginx/src/os/unix/ngx_linux_config.h +117 -0
  328. data/src/nginx/src/os/unix/ngx_linux_init.c +91 -0
  329. data/src/nginx/src/os/unix/ngx_linux_sendfile_chain.c +378 -0
  330. data/src/nginx/src/os/unix/ngx_os.h +84 -0
  331. data/src/nginx/src/os/unix/ngx_posix_config.h +153 -0
  332. data/src/nginx/src/os/unix/ngx_posix_init.c +124 -0
  333. data/src/nginx/src/os/unix/ngx_process.c +590 -0
  334. data/src/nginx/src/os/unix/ngx_process.h +87 -0
  335. data/src/nginx/src/os/unix/ngx_process_cycle.c +1390 -0
  336. data/src/nginx/src/os/unix/ngx_process_cycle.h +61 -0
  337. data/src/nginx/src/os/unix/ngx_pthread_thread.c +278 -0
  338. data/src/nginx/src/os/unix/ngx_readv_chain.c +258 -0
  339. data/src/nginx/src/os/unix/ngx_recv.c +180 -0
  340. data/src/nginx/src/os/unix/ngx_send.c +73 -0
  341. data/src/nginx/src/os/unix/ngx_setproctitle.c +135 -0
  342. data/src/nginx/src/os/unix/ngx_setproctitle.h +52 -0
  343. data/src/nginx/src/os/unix/ngx_shmem.c +126 -0
  344. data/src/nginx/src/os/unix/ngx_shmem.h +29 -0
  345. data/src/nginx/src/os/unix/ngx_socket.c +116 -0
  346. data/src/nginx/src/os/unix/ngx_socket.h +64 -0
  347. data/src/nginx/src/os/unix/ngx_solaris.h +16 -0
  348. data/src/nginx/src/os/unix/ngx_solaris_config.h +107 -0
  349. data/src/nginx/src/os/unix/ngx_solaris_init.c +75 -0
  350. data/src/nginx/src/os/unix/ngx_solaris_sendfilev_chain.c +251 -0
  351. data/src/nginx/src/os/unix/ngx_sunpro_amd64.il +43 -0
  352. data/src/nginx/src/os/unix/ngx_sunpro_atomic_sparc64.h +61 -0
  353. data/src/nginx/src/os/unix/ngx_sunpro_sparc64.il +36 -0
  354. data/src/nginx/src/os/unix/ngx_sunpro_x86.il +44 -0
  355. data/src/nginx/src/os/unix/ngx_thread.h +128 -0
  356. data/src/nginx/src/os/unix/ngx_time.c +104 -0
  357. data/src/nginx/src/os/unix/ngx_time.h +66 -0
  358. data/src/nginx/src/os/unix/ngx_udp_recv.c +115 -0
  359. data/src/nginx/src/os/unix/ngx_user.c +109 -0
  360. data/src/nginx/src/os/unix/ngx_user.h +24 -0
  361. data/src/nginx/src/os/unix/ngx_writev_chain.c +181 -0
  362. data/src/nginx/src/os/unix/rfork_thread.S +73 -0
  363. metadata +419 -0
@@ -0,0 +1,644 @@
1
+
2
+ /*
3
+ * Copyright (C) Igor Sysoev
4
+ * Copyright (C) Nginx, Inc.
5
+ */
6
+
7
+
8
+ #include <ngx_config.h>
9
+ #include <ngx_core.h>
10
+ #include <ngx_http.h>
11
+
12
+
13
+ static void ngx_http_read_client_request_body_handler(ngx_http_request_t *r);
14
+ static ngx_int_t ngx_http_do_read_client_request_body(ngx_http_request_t *r);
15
+ static ngx_int_t ngx_http_write_request_body(ngx_http_request_t *r,
16
+ ngx_chain_t *body);
17
+ static ngx_int_t ngx_http_read_discarded_request_body(ngx_http_request_t *r);
18
+ static ngx_int_t ngx_http_test_expect(ngx_http_request_t *r);
19
+
20
+
21
+ /*
22
+ * on completion ngx_http_read_client_request_body() adds to
23
+ * r->request_body->bufs one or two bufs:
24
+ * *) one memory buf that was preread in r->header_in;
25
+ * *) one memory or file buf that contains the rest of the body
26
+ */
27
+
28
+ ngx_int_t
29
+ ngx_http_read_client_request_body(ngx_http_request_t *r,
30
+ ngx_http_client_body_handler_pt post_handler)
31
+ {
32
+ size_t preread;
33
+ ssize_t size;
34
+ ngx_buf_t *b;
35
+ ngx_chain_t *cl, **next;
36
+ ngx_temp_file_t *tf;
37
+ ngx_http_request_body_t *rb;
38
+ ngx_http_core_loc_conf_t *clcf;
39
+
40
+ r->main->count++;
41
+
42
+ if (r->request_body || r->discard_body) {
43
+ post_handler(r);
44
+ return NGX_OK;
45
+ }
46
+
47
+ if (ngx_http_test_expect(r) != NGX_OK) {
48
+ return NGX_HTTP_INTERNAL_SERVER_ERROR;
49
+ }
50
+
51
+ rb = ngx_pcalloc(r->pool, sizeof(ngx_http_request_body_t));
52
+ if (rb == NULL) {
53
+ return NGX_HTTP_INTERNAL_SERVER_ERROR;
54
+ }
55
+
56
+ r->request_body = rb;
57
+
58
+ if (r->headers_in.content_length_n < 0) {
59
+ post_handler(r);
60
+ return NGX_OK;
61
+ }
62
+
63
+ clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);
64
+
65
+ if (r->headers_in.content_length_n == 0) {
66
+
67
+ if (r->request_body_in_file_only) {
68
+ tf = ngx_pcalloc(r->pool, sizeof(ngx_temp_file_t));
69
+ if (tf == NULL) {
70
+ return NGX_HTTP_INTERNAL_SERVER_ERROR;
71
+ }
72
+
73
+ tf->file.fd = NGX_INVALID_FILE;
74
+ tf->file.log = r->connection->log;
75
+ tf->path = clcf->client_body_temp_path;
76
+ tf->pool = r->pool;
77
+ tf->warn = "a client request body is buffered to a temporary file";
78
+ tf->log_level = r->request_body_file_log_level;
79
+ tf->persistent = r->request_body_in_persistent_file;
80
+ tf->clean = r->request_body_in_clean_file;
81
+
82
+ if (r->request_body_file_group_access) {
83
+ tf->access = 0660;
84
+ }
85
+
86
+ rb->temp_file = tf;
87
+
88
+ if (ngx_create_temp_file(&tf->file, tf->path, tf->pool,
89
+ tf->persistent, tf->clean, tf->access)
90
+ != NGX_OK)
91
+ {
92
+ return NGX_HTTP_INTERNAL_SERVER_ERROR;
93
+ }
94
+ }
95
+
96
+ post_handler(r);
97
+
98
+ return NGX_OK;
99
+ }
100
+
101
+ rb->post_handler = post_handler;
102
+
103
+ /*
104
+ * set by ngx_pcalloc():
105
+ *
106
+ * rb->bufs = NULL;
107
+ * rb->buf = NULL;
108
+ * rb->rest = 0;
109
+ */
110
+
111
+ preread = r->header_in->last - r->header_in->pos;
112
+
113
+ if (preread) {
114
+
115
+ /* there is the pre-read part of the request body */
116
+
117
+ ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
118
+ "http client request body preread %uz", preread);
119
+
120
+ b = ngx_calloc_buf(r->pool);
121
+ if (b == NULL) {
122
+ return NGX_HTTP_INTERNAL_SERVER_ERROR;
123
+ }
124
+
125
+ b->temporary = 1;
126
+ b->start = r->header_in->pos;
127
+ b->pos = r->header_in->pos;
128
+ b->last = r->header_in->last;
129
+ b->end = r->header_in->end;
130
+
131
+ rb->bufs = ngx_alloc_chain_link(r->pool);
132
+ if (rb->bufs == NULL) {
133
+ return NGX_HTTP_INTERNAL_SERVER_ERROR;
134
+ }
135
+
136
+ rb->bufs->buf = b;
137
+ rb->bufs->next = NULL;
138
+
139
+ rb->buf = b;
140
+
141
+ if ((off_t) preread >= r->headers_in.content_length_n) {
142
+
143
+ /* the whole request body was pre-read */
144
+
145
+ r->header_in->pos += (size_t) r->headers_in.content_length_n;
146
+ r->request_length += r->headers_in.content_length_n;
147
+ b->last = r->header_in->pos;
148
+
149
+ if (r->request_body_in_file_only) {
150
+ if (ngx_http_write_request_body(r, rb->bufs) != NGX_OK) {
151
+ return NGX_HTTP_INTERNAL_SERVER_ERROR;
152
+ }
153
+ }
154
+
155
+ post_handler(r);
156
+
157
+ return NGX_OK;
158
+ }
159
+
160
+ /*
161
+ * to not consider the body as pipelined request in
162
+ * ngx_http_set_keepalive()
163
+ */
164
+ r->header_in->pos = r->header_in->last;
165
+
166
+ r->request_length += preread;
167
+
168
+ rb->rest = r->headers_in.content_length_n - preread;
169
+
170
+ if (rb->rest <= (off_t) (b->end - b->last)) {
171
+
172
+ /* the whole request body may be placed in r->header_in */
173
+
174
+ rb->to_write = rb->bufs;
175
+
176
+ r->read_event_handler = ngx_http_read_client_request_body_handler;
177
+
178
+ return ngx_http_do_read_client_request_body(r);
179
+ }
180
+
181
+ next = &rb->bufs->next;
182
+
183
+ } else {
184
+ b = NULL;
185
+ rb->rest = r->headers_in.content_length_n;
186
+ next = &rb->bufs;
187
+ }
188
+
189
+ size = clcf->client_body_buffer_size;
190
+ size += size >> 2;
191
+
192
+ if (rb->rest < size) {
193
+ size = (ssize_t) rb->rest;
194
+
195
+ if (r->request_body_in_single_buf) {
196
+ size += preread;
197
+ }
198
+
199
+ } else {
200
+ size = clcf->client_body_buffer_size;
201
+
202
+ /* disable copying buffer for r->request_body_in_single_buf */
203
+ b = NULL;
204
+ }
205
+
206
+ rb->buf = ngx_create_temp_buf(r->pool, size);
207
+ if (rb->buf == NULL) {
208
+ return NGX_HTTP_INTERNAL_SERVER_ERROR;
209
+ }
210
+
211
+ cl = ngx_alloc_chain_link(r->pool);
212
+ if (cl == NULL) {
213
+ return NGX_HTTP_INTERNAL_SERVER_ERROR;
214
+ }
215
+
216
+ cl->buf = rb->buf;
217
+ cl->next = NULL;
218
+
219
+ if (b && r->request_body_in_single_buf) {
220
+ size = b->last - b->pos;
221
+ ngx_memcpy(rb->buf->pos, b->pos, size);
222
+ rb->buf->last += size;
223
+
224
+ next = &rb->bufs;
225
+ }
226
+
227
+ *next = cl;
228
+
229
+ if (r->request_body_in_file_only || r->request_body_in_single_buf) {
230
+ rb->to_write = rb->bufs;
231
+
232
+ } else {
233
+ rb->to_write = rb->bufs->next ? rb->bufs->next : rb->bufs;
234
+ }
235
+
236
+ r->read_event_handler = ngx_http_read_client_request_body_handler;
237
+
238
+ return ngx_http_do_read_client_request_body(r);
239
+ }
240
+
241
+
242
+ static void
243
+ ngx_http_read_client_request_body_handler(ngx_http_request_t *r)
244
+ {
245
+ ngx_int_t rc;
246
+
247
+ if (r->connection->read->timedout) {
248
+ r->connection->timedout = 1;
249
+ ngx_http_finalize_request(r, NGX_HTTP_REQUEST_TIME_OUT);
250
+ return;
251
+ }
252
+
253
+ rc = ngx_http_do_read_client_request_body(r);
254
+
255
+ if (rc >= NGX_HTTP_SPECIAL_RESPONSE) {
256
+ ngx_http_finalize_request(r, rc);
257
+ }
258
+ }
259
+
260
+
261
+ static ngx_int_t
262
+ ngx_http_do_read_client_request_body(ngx_http_request_t *r)
263
+ {
264
+ size_t size;
265
+ ssize_t n;
266
+ ngx_buf_t *b;
267
+ ngx_connection_t *c;
268
+ ngx_http_request_body_t *rb;
269
+ ngx_http_core_loc_conf_t *clcf;
270
+
271
+ c = r->connection;
272
+ rb = r->request_body;
273
+
274
+ ngx_log_debug0(NGX_LOG_DEBUG_HTTP, c->log, 0,
275
+ "http read client request body");
276
+
277
+ for ( ;; ) {
278
+ for ( ;; ) {
279
+ if (rb->buf->last == rb->buf->end) {
280
+
281
+ if (ngx_http_write_request_body(r, rb->to_write) != NGX_OK) {
282
+ return NGX_HTTP_INTERNAL_SERVER_ERROR;
283
+ }
284
+
285
+ rb->to_write = rb->bufs->next ? rb->bufs->next : rb->bufs;
286
+ rb->buf->last = rb->buf->start;
287
+ }
288
+
289
+ size = rb->buf->end - rb->buf->last;
290
+
291
+ if ((off_t) size > rb->rest) {
292
+ size = (size_t) rb->rest;
293
+ }
294
+
295
+ n = c->recv(c, rb->buf->last, size);
296
+
297
+ ngx_log_debug1(NGX_LOG_DEBUG_HTTP, c->log, 0,
298
+ "http client request body recv %z", n);
299
+
300
+ if (n == NGX_AGAIN) {
301
+ break;
302
+ }
303
+
304
+ if (n == 0) {
305
+ ngx_log_error(NGX_LOG_INFO, c->log, 0,
306
+ "client closed prematurely connection");
307
+ }
308
+
309
+ if (n == 0 || n == NGX_ERROR) {
310
+ c->error = 1;
311
+ return NGX_HTTP_BAD_REQUEST;
312
+ }
313
+
314
+ rb->buf->last += n;
315
+ rb->rest -= n;
316
+ r->request_length += n;
317
+
318
+ if (rb->rest == 0) {
319
+ break;
320
+ }
321
+
322
+ if (rb->buf->last < rb->buf->end) {
323
+ break;
324
+ }
325
+ }
326
+
327
+ ngx_log_debug1(NGX_LOG_DEBUG_HTTP, c->log, 0,
328
+ "http client request body rest %O", rb->rest);
329
+
330
+ if (rb->rest == 0) {
331
+ break;
332
+ }
333
+
334
+ if (!c->read->ready) {
335
+ clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);
336
+ ngx_add_timer(c->read, clcf->client_body_timeout);
337
+
338
+ if (ngx_handle_read_event(c->read, 0) != NGX_OK) {
339
+ return NGX_HTTP_INTERNAL_SERVER_ERROR;
340
+ }
341
+
342
+ return NGX_AGAIN;
343
+ }
344
+ }
345
+
346
+ if (c->read->timer_set) {
347
+ ngx_del_timer(c->read);
348
+ }
349
+
350
+ if (rb->temp_file || r->request_body_in_file_only) {
351
+
352
+ /* save the last part */
353
+
354
+ if (ngx_http_write_request_body(r, rb->to_write) != NGX_OK) {
355
+ return NGX_HTTP_INTERNAL_SERVER_ERROR;
356
+ }
357
+
358
+ b = ngx_calloc_buf(r->pool);
359
+ if (b == NULL) {
360
+ return NGX_HTTP_INTERNAL_SERVER_ERROR;
361
+ }
362
+
363
+ b->in_file = 1;
364
+ b->file_pos = 0;
365
+ b->file_last = rb->temp_file->file.offset;
366
+ b->file = &rb->temp_file->file;
367
+
368
+ if (rb->bufs->next) {
369
+ rb->bufs->next->buf = b;
370
+
371
+ } else {
372
+ rb->bufs->buf = b;
373
+ }
374
+ }
375
+
376
+ if (rb->bufs->next
377
+ && (r->request_body_in_file_only || r->request_body_in_single_buf))
378
+ {
379
+ rb->bufs = rb->bufs->next;
380
+ }
381
+
382
+ r->read_event_handler = ngx_http_block_reading;
383
+
384
+ rb->post_handler(r);
385
+
386
+ return NGX_OK;
387
+ }
388
+
389
+
390
+ static ngx_int_t
391
+ ngx_http_write_request_body(ngx_http_request_t *r, ngx_chain_t *body)
392
+ {
393
+ ssize_t n;
394
+ ngx_temp_file_t *tf;
395
+ ngx_http_request_body_t *rb;
396
+ ngx_http_core_loc_conf_t *clcf;
397
+
398
+ rb = r->request_body;
399
+
400
+ if (rb->temp_file == NULL) {
401
+ tf = ngx_pcalloc(r->pool, sizeof(ngx_temp_file_t));
402
+ if (tf == NULL) {
403
+ return NGX_ERROR;
404
+ }
405
+
406
+ clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);
407
+
408
+ tf->file.fd = NGX_INVALID_FILE;
409
+ tf->file.log = r->connection->log;
410
+ tf->path = clcf->client_body_temp_path;
411
+ tf->pool = r->pool;
412
+ tf->warn = "a client request body is buffered to a temporary file";
413
+ tf->log_level = r->request_body_file_log_level;
414
+ tf->persistent = r->request_body_in_persistent_file;
415
+ tf->clean = r->request_body_in_clean_file;
416
+
417
+ if (r->request_body_file_group_access) {
418
+ tf->access = 0660;
419
+ }
420
+
421
+ rb->temp_file = tf;
422
+ }
423
+
424
+ n = ngx_write_chain_to_temp_file(rb->temp_file, body);
425
+
426
+ /* TODO: n == 0 or not complete and level event */
427
+
428
+ if (n == NGX_ERROR) {
429
+ return NGX_ERROR;
430
+ }
431
+
432
+ rb->temp_file->offset += n;
433
+
434
+ return NGX_OK;
435
+ }
436
+
437
+
438
+ ngx_int_t
439
+ ngx_http_discard_request_body(ngx_http_request_t *r)
440
+ {
441
+ ssize_t size;
442
+ ngx_event_t *rev;
443
+
444
+ if (r != r->main || r->discard_body) {
445
+ return NGX_OK;
446
+ }
447
+
448
+ if (ngx_http_test_expect(r) != NGX_OK) {
449
+ return NGX_HTTP_INTERNAL_SERVER_ERROR;
450
+ }
451
+
452
+ rev = r->connection->read;
453
+
454
+ ngx_log_debug0(NGX_LOG_DEBUG_HTTP, rev->log, 0, "http set discard body");
455
+
456
+ if (rev->timer_set) {
457
+ ngx_del_timer(rev);
458
+ }
459
+
460
+ if (r->headers_in.content_length_n <= 0 || r->request_body) {
461
+ return NGX_OK;
462
+ }
463
+
464
+ size = r->header_in->last - r->header_in->pos;
465
+
466
+ if (size) {
467
+ if (r->headers_in.content_length_n > size) {
468
+ r->header_in->pos += size;
469
+ r->headers_in.content_length_n -= size;
470
+
471
+ } else {
472
+ r->header_in->pos += (size_t) r->headers_in.content_length_n;
473
+ r->headers_in.content_length_n = 0;
474
+ return NGX_OK;
475
+ }
476
+ }
477
+
478
+ r->read_event_handler = ngx_http_discarded_request_body_handler;
479
+
480
+ if (ngx_handle_read_event(rev, 0) != NGX_OK) {
481
+ return NGX_HTTP_INTERNAL_SERVER_ERROR;
482
+ }
483
+
484
+ if (ngx_http_read_discarded_request_body(r) == NGX_OK) {
485
+ r->lingering_close = 0;
486
+
487
+ } else {
488
+ r->count++;
489
+ r->discard_body = 1;
490
+ }
491
+
492
+ return NGX_OK;
493
+ }
494
+
495
+
496
+ void
497
+ ngx_http_discarded_request_body_handler(ngx_http_request_t *r)
498
+ {
499
+ ngx_int_t rc;
500
+ ngx_msec_t timer;
501
+ ngx_event_t *rev;
502
+ ngx_connection_t *c;
503
+ ngx_http_core_loc_conf_t *clcf;
504
+
505
+ c = r->connection;
506
+ rev = c->read;
507
+
508
+ if (rev->timedout) {
509
+ c->timedout = 1;
510
+ c->error = 1;
511
+ ngx_http_finalize_request(r, NGX_ERROR);
512
+ return;
513
+ }
514
+
515
+ if (r->lingering_time) {
516
+ timer = (ngx_msec_t) (r->lingering_time - ngx_time());
517
+
518
+ if (timer <= 0) {
519
+ r->discard_body = 0;
520
+ r->lingering_close = 0;
521
+ ngx_http_finalize_request(r, NGX_ERROR);
522
+ return;
523
+ }
524
+
525
+ } else {
526
+ timer = 0;
527
+ }
528
+
529
+ rc = ngx_http_read_discarded_request_body(r);
530
+
531
+ if (rc == NGX_OK) {
532
+ r->discard_body = 0;
533
+ r->lingering_close = 0;
534
+ ngx_http_finalize_request(r, NGX_DONE);
535
+ return;
536
+ }
537
+
538
+ /* rc == NGX_AGAIN */
539
+
540
+ if (ngx_handle_read_event(rev, 0) != NGX_OK) {
541
+ c->error = 1;
542
+ ngx_http_finalize_request(r, NGX_ERROR);
543
+ return;
544
+ }
545
+
546
+ if (timer) {
547
+
548
+ clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);
549
+
550
+ timer *= 1000;
551
+
552
+ if (timer > clcf->lingering_timeout) {
553
+ timer = clcf->lingering_timeout;
554
+ }
555
+
556
+ ngx_add_timer(rev, timer);
557
+ }
558
+ }
559
+
560
+
561
+ static ngx_int_t
562
+ ngx_http_read_discarded_request_body(ngx_http_request_t *r)
563
+ {
564
+ size_t size;
565
+ ssize_t n;
566
+ u_char buffer[NGX_HTTP_DISCARD_BUFFER_SIZE];
567
+
568
+ ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
569
+ "http read discarded body");
570
+
571
+ for ( ;; ) {
572
+ if (r->headers_in.content_length_n == 0) {
573
+ r->read_event_handler = ngx_http_block_reading;
574
+ return NGX_OK;
575
+ }
576
+
577
+ if (!r->connection->read->ready) {
578
+ return NGX_AGAIN;
579
+ }
580
+
581
+ size = (r->headers_in.content_length_n > NGX_HTTP_DISCARD_BUFFER_SIZE) ?
582
+ NGX_HTTP_DISCARD_BUFFER_SIZE:
583
+ (size_t) r->headers_in.content_length_n;
584
+
585
+ n = r->connection->recv(r->connection, buffer, size);
586
+
587
+ if (n == NGX_ERROR) {
588
+ r->connection->error = 1;
589
+ return NGX_OK;
590
+ }
591
+
592
+ if (n == NGX_AGAIN) {
593
+ return NGX_AGAIN;
594
+ }
595
+
596
+ if (n == 0) {
597
+ return NGX_OK;
598
+ }
599
+
600
+ r->headers_in.content_length_n -= n;
601
+ }
602
+ }
603
+
604
+
605
+ static ngx_int_t
606
+ ngx_http_test_expect(ngx_http_request_t *r)
607
+ {
608
+ ngx_int_t n;
609
+ ngx_str_t *expect;
610
+
611
+ if (r->expect_tested
612
+ || r->headers_in.expect == NULL
613
+ || r->http_version < NGX_HTTP_VERSION_11)
614
+ {
615
+ return NGX_OK;
616
+ }
617
+
618
+ r->expect_tested = 1;
619
+
620
+ expect = &r->headers_in.expect->value;
621
+
622
+ if (expect->len != sizeof("100-continue") - 1
623
+ || ngx_strncasecmp(expect->data, (u_char *) "100-continue",
624
+ sizeof("100-continue") - 1)
625
+ != 0)
626
+ {
627
+ return NGX_OK;
628
+ }
629
+
630
+ ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
631
+ "send 100 Continue");
632
+
633
+ n = r->connection->send(r->connection,
634
+ (u_char *) "HTTP/1.1 100 Continue" CRLF CRLF,
635
+ sizeof("HTTP/1.1 100 Continue" CRLF CRLF) - 1);
636
+
637
+ if (n == sizeof("HTTP/1.1 100 Continue" CRLF CRLF) - 1) {
638
+ return NGX_OK;
639
+ }
640
+
641
+ /* we assume that such small packet should be send successfully */
642
+
643
+ return NGX_ERROR;
644
+ }