unicorn 5.1.0 → 5.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ad413ab1a47428cacfbcae82684d4cbe36e77d33
4
- data.tar.gz: 752c0ca2043e8e5e05558a7eb515b53f5e3107d0
3
+ metadata.gz: 75575863e5a09d4ac351269084628052c8ec554c
4
+ data.tar.gz: 5f7fc37e895b8982c3076fc56642ec90d8632d46
5
5
  SHA512:
6
- metadata.gz: 7ca49a70bdc5a632797db82b10f30af7b3b4db10f856ef81b275d4e5b939454191aaae1883d0bb83129c7a95d3a697faec6e51ae2438ba5588f70ee6d04b73e7
7
- data.tar.gz: d28bc86a89d0ebb29ecaec72f363e6c0991ab71e22c4ed43d44b9e6b8cc8c8b03939de84c005a91b8473d833cf691f42cb2c3684f5ac1d1c91c4af87c7f78fad
6
+ metadata.gz: 85c7d9f5d6c3056508758a7375809d477ee7e640167470711e4fda53e7f6c52ea6688e708fde80af5e54262dcdd218c0ef9fc966221c1e30762b0bdabf5c41fb
7
+ data.tar.gz: 1829ab9e474b1932617c97e37d6efa1075c1c147f8aa726777478741b5ae9106a163194647e03ff8d73786017dd2142afad8804d16625fde48876e10dc0e3a30
data/.olddoc.yml CHANGED
@@ -1,8 +1,8 @@
1
1
  ---
2
- cgit_url: http://bogomips.org/unicorn.git
2
+ cgit_url: https://bogomips.org/unicorn.git
3
3
  git_url: git://bogomips.org/unicorn.git
4
- rdoc_url: http://unicorn.bogomips.org/
5
- ml_url: http://bogomips.org/unicorn-public/
4
+ rdoc_url: https://bogomips.org/unicorn/
5
+ ml_url: https://bogomips.org/unicorn-public/
6
6
  merge_html:
7
7
  unicorn_1: Documentation/unicorn.1.html
8
8
  unicorn_rails_1: Documentation/unicorn_rails.1.html
@@ -181,7 +181,7 @@ the unicorn config file.
181
181
  * [Rack RDoc][2]
182
182
  * [Rackup HowTo][3]
183
183
 
184
- [1]: http://unicorn.bogomips.org/
184
+ [1]: https://bogomips.org/unicorn/
185
185
  [2]: http://www.rubydoc.info/github/rack/rack/
186
186
  [3]: https://github.com/rack/rack/wiki/tutorial-rackup-howto
187
- [4]: http://unicorn.bogomips.org/SIGNALS.html
187
+ [4]: https://bogomips.org/unicorn/SIGNALS.html
@@ -169,7 +169,7 @@ used by Unicorn.
169
169
  * [Rack RDoc][2]
170
170
  * [Rackup HowTo][3]
171
171
 
172
- [1]: http://unicorn.bogomips.org/
172
+ [1]: https://bogomips.org/unicorn/
173
173
  [2]: http://www.rubydoc.info/github/rack/rack/
174
174
  [3]: https://github.com/rack/rack/wiki/tutorial-rackup-howto
175
- [4]: http://unicorn.bogomips.org/SIGNALS.html
175
+ [4]: https://bogomips.org/unicorn/SIGNALS.html
data/FAQ CHANGED
@@ -7,7 +7,7 @@ drained entirely by the application. This may happen when request
7
7
  bodies are gzipped, as unicorn reads request body data lazily to avoid
8
8
  overhead from bad requests.
9
9
 
10
- Ref: http://mid.gmane.org/FC91211E-FD32-432C-92FC-0318714C2170@zendesk.com
10
+ Ref: https://bogomips.org/unicorn-public/FC91211E-FD32-432C-92FC-0318714C2170@zendesk.com/
11
11
 
12
12
  === Why aren't my Rails log files rotated when I use SIGUSR1?
13
13
 
data/GIT-VERSION-FILE CHANGED
@@ -1 +1 @@
1
- GIT_VERSION = 5.1.0
1
+ GIT_VERSION = 5.2.0
data/GIT-VERSION-GEN CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
- DEF_VER = "v5.1.0"
2
+ DEF_VER = "v5.2.0"
3
3
  CONSTANT = "Unicorn::Const::UNICORN_VERSION"
4
4
  RVF = "lib/unicorn/version.rb"
5
5
  GVF = "GIT-VERSION-FILE"
data/GNUmakefile CHANGED
@@ -183,13 +183,13 @@ doc: .document $(ext)/unicorn_http.c man html .olddoc.yml $(PLACEHOLDERS)
183
183
  install -m644 $(man1_paths) doc/
184
184
  tar cf - $$(git ls-files examples/) | (cd doc && tar xf -)
185
185
 
186
- # publishes docs to http://unicorn.bogomips.org
186
+ # publishes docs to https://bogomips.org/unicorn/
187
187
  publish_doc:
188
188
  -git set-file-times
189
189
  $(MAKE) doc
190
190
  $(MAKE) doc_gz
191
191
  chmod 644 $$(find doc -type f)
192
- $(RSYNC) -av doc/ unicorn.bogomips.org:/srv/unicorn/
192
+ $(RSYNC) -av doc/ bogomips.org:/srv/bogomips/unicorn/
193
193
  git ls-files | xargs touch
194
194
 
195
195
  # Create gzip variants of the same timestamp as the original so nginx
@@ -219,7 +219,7 @@ fix-perms:
219
219
  gem: $(pkggem)
220
220
 
221
221
  install-gem: $(pkggem)
222
- gem install $(CURDIR)/$<
222
+ gem install --local $(CURDIR)/$<
223
223
 
224
224
  $(pkggem): .manifest fix-perms
225
225
  gem build $(rfpackage).gemspec
data/HACKING CHANGED
@@ -57,7 +57,7 @@ Please wrap documentation at 72 characters-per-line or less (long URLs
57
57
  are exempt) so it is comfortably readable from terminals.
58
58
 
59
59
  When referencing mailing list posts, use
60
- <tt>http://bogomips.org/unicorn-public/$MESSAGE_ID/</tt> if possible
60
+ <tt>https://bogomips.org/unicorn-public/$MESSAGE_ID/</tt> if possible
61
61
  since the Message-ID remains searchable even if a particular site
62
62
  becomes unavailable.
63
63
 
data/ISSUES CHANGED
@@ -2,8 +2,8 @@
2
2
 
3
3
  mailto:unicorn-public@bogomips.org is the best place to report bugs,
4
4
  submit patches and/or obtain support after you have searched the
5
- {email archives}[http://bogomips.org/unicorn-public/] and
6
- {documentation}[http://unicorn.bogomips.org/].
5
+ {email archives}[https://bogomips.org/unicorn-public/] and
6
+ {documentation}[https://bogomips.org/unicorn/].
7
7
 
8
8
  * No subscription will ever be required to email us
9
9
  * Cc: all participants in a thread or commit, as subscription is optional
@@ -12,7 +12,7 @@ submit patches and/or obtain support after you have searched the
12
12
  * Do not send HTML mail or images, it will be flagged as spam
13
13
  * Anonymous and pseudonymous messages will always be welcome.
14
14
  * The email submission port (587) is enabled on the bogomips.org MX:
15
- http://bogomips.org/unicorn-public/20141004232241.GA23908@dcvr.yhbt.net/t/
15
+ https://bogomips.org/unicorn-public/20141004232241.GA23908@dcvr.yhbt.net/t/
16
16
 
17
17
  If your issue is of a sensitive nature or you're just shy in public,
18
18
  then feel free to email us privately at mailto:unicorn@bogomips.org
@@ -67,7 +67,7 @@ document distributed with git) on guidelines for patch submission.
67
67
  * private: mailto:unicorn@bogomips.org
68
68
  * nntp://news.gmane.org/gmane.comp.lang.ruby.unicorn.general
69
69
  * nntp://news.public-inbox.org/inbox.comp.lang.ruby.unicorn
70
- * http://bogomips.org/unicorn-public/
70
+ * https://bogomips.org/unicorn-public/
71
71
 
72
72
  Mailing list subscription is optional, so Cc: all participants.
73
73
 
@@ -78,9 +78,9 @@ You can follow along via NNTP:
78
78
 
79
79
  Or Atom feeds:
80
80
 
81
- http://bogomips.org/unicorn-public/new.atom
81
+ https://bogomips.org/unicorn-public/new.atom
82
82
 
83
- The HTML archives at http://bogomips.org/unicorn-public/
83
+ The HTML archives at https://bogomips.org/unicorn-public/
84
84
  also has links to per-thread Atom feeds and downloadable
85
85
  mboxes.
86
86
 
data/KNOWN_ISSUES CHANGED
@@ -9,7 +9,7 @@ acceptable solution. Those issues are documented here.
9
9
  handlers.
10
10
 
11
11
  * Issues with FreeBSD jails can be worked around as documented by Tatsuya Ono:
12
- http://mid.gmane.org/CAHBuKRj09FdxAgzsefJWotexw-7JYZGJMtgUp_dhjPz9VbKD6Q@mail.gmail.com
12
+ https://bogomips.org/unicorn-public/CAHBuKRj09FdxAgzsefJWotexw-7JYZGJMtgUp_dhjPz9VbKD6Q@mail.gmail.com/
13
13
 
14
14
  * PRNGs (pseudo-random number generators) loaded before forking
15
15
  (e.g. "preload_app true") may need to have their internal state
@@ -60,7 +60,7 @@ acceptable solution. Those issues are documented here.
60
60
  application to use Rails 2.3.2 and you have no other choice, then
61
61
  you may edit your unicorn gemspec and remove the Rack dependency.
62
62
 
63
- ref: http://mid.gmane.org/20091014221552.GA30624@dcvr.yhbt.net
63
+ ref: https://bogomips.org/unicorn-public/20091014221552.GA30624@dcvr.yhbt.net/
64
64
  Note: the workaround described in the article above only made
65
65
  the issue more subtle and we didn't notice them immediately.
66
66
 
data/Links CHANGED
@@ -26,7 +26,7 @@ or services behind them.
26
26
  * {raindrops}[http://raindrops.bogomips.org/] - real-time stats for
27
27
  preforking Rack servers
28
28
 
29
- * {UnXF}[http://bogomips.org/unxf/] Un-X-Forward* the Rack environment,
29
+ * {UnXF}[https://bogomips.org/unxf/] Un-X-Forward* the Rack environment,
30
30
  useful since unicorn is designed to be deployed behind a reverse proxy.
31
31
 
32
32
  === unicorn is written to work with
@@ -52,5 +52,5 @@ or services behind them.
52
52
  * {Mongrel}[http://rubygems.org/gems/mongrel] - the awesome webserver
53
53
  unicorn is based on
54
54
 
55
- * {david}[http://bogomips.org/david.git] - a tool to explain why you need
55
+ * {david}[https://bogomips.org/david.git] - a tool to explain why you need
56
56
  nginx in front of unicorn
data/README CHANGED
@@ -82,7 +82,7 @@ You can get the latest source via git from the following locations
82
82
 
83
83
  You may browse the code from the web:
84
84
 
85
- * http://bogomips.org/unicorn.git
85
+ * https://bogomips.org/unicorn.git
86
86
  * http://repo.or.cz/w/unicorn.git (gitweb)
87
87
 
88
88
  See the HACKING guide on how to contribute and build prerelease gems
@@ -128,7 +128,7 @@ All feedback (bug reports, user/development dicussion, patches, pull
128
128
  requests) go to the mailing list/newsgroup. See the ISSUES document for
129
129
  information on the {mailing list}[mailto:unicorn-public@bogomips.org].
130
130
 
131
- The mailing list is archived at http://bogomips.org/unicorn-public/
131
+ The mailing list is archived at https://bogomips.org/unicorn-public/
132
132
  Read-only NNTP access is available at:
133
133
  nntp://news.public-inbox.org/inbox.comp.lang.ruby.unicorn and
134
134
  nntp://news.gmane.org/gmane.comp.lang.ruby.unicorn.general
data/SIGNALS CHANGED
@@ -8,7 +8,7 @@ should be possible to easily share process management scripts between
8
8
  Unicorn and nginx.
9
9
 
10
10
  One example init script is distributed with unicorn:
11
- http://unicorn.bogomips.org/examples/init.sh
11
+ https://bogomips.org/unicorn/examples/init.sh
12
12
 
13
13
  === Master Process
14
14
 
data/Sandbox CHANGED
@@ -34,7 +34,7 @@ is the primary issue with sandboxing tools such as Bundler and Isolate.
34
34
  If you're bundling unicorn, use "bundle exec unicorn" (or "bundle exec
35
35
  unicorn_rails") to start unicorn with the correct environment variables
36
36
 
37
- ref: http://mid.gmane.org/9ECF07C4-5216-47BE-961D-AFC0F0C82060@internetfamo.us
37
+ ref: https://bogomips.org/unicorn-public/9ECF07C4-5216-47BE-961D-AFC0F0C82060@internetfamo.us/
38
38
 
39
39
  Otherwise (if you choose to not sandbox your unicorn installation), we
40
40
  expect the tips for Isolate (below) apply, too.
@@ -43,7 +43,8 @@ expect the tips for Isolate (below) apply, too.
43
43
 
44
44
  This is no longer be an issue as of bundler 0.9.17
45
45
 
46
- ref: http://mid.gmane.org/8FC34B23-5994-41CC-B5AF-7198EF06909E@tramchase.com
46
+ ref:
47
+ https://bogomips.org/unicorn-public/8FC34B23-5994-41CC-B5AF-7198EF06909E@tramchase.com/
47
48
 
48
49
  === BUNDLE_GEMFILE for Capistrano users
49
50
 
data/TODO CHANGED
@@ -1,5 +1,3 @@
1
1
  * Documentation improvements
2
2
 
3
3
  * improve test suite
4
-
5
- * Rack 2.x support (when Rack 2.x exists)
@@ -1,2 +1,2 @@
1
- # see {Unicorn::OobGC}[http://unicorn.bogomips.org/Unicorn/OobGC.html]
1
+ # see {Unicorn::OobGC}[https://bogomips.org/unicorn/Unicorn/OobGC.html]
2
2
  # Unicorn::OobGC was broken in Unicorn v3.3.1 - v3.6.1 and fixed in v3.6.2
data/examples/init.sh CHANGED
@@ -1,7 +1,16 @@
1
1
  #!/bin/sh
2
2
  set -e
3
+ ### BEGIN INIT INFO
4
+ # Provides: unicorn
5
+ # Required-Start: $local_fs $network
6
+ # Required-Stop: $local_fs $network
7
+ # Default-Start: 2 3 4 5
8
+ # Default-Stop: 0 1 6
9
+ # Short-Description: Start/stop unicorn Rack app server
10
+ ### END INIT INFO
11
+
3
12
  # Example init script, this can be used with nginx, too,
4
- # since nginx and unicorn accept the same signals
13
+ # since nginx and unicorn accept the same signals.
5
14
 
6
15
  # Feel free to change any of the following variables for your app:
7
16
  TIMEOUT=${TIMEOUT-60}
@@ -9,21 +18,22 @@ APP_ROOT=/home/x/my_app/current
9
18
  PID=$APP_ROOT/tmp/pids/unicorn.pid
10
19
  CMD="/usr/bin/unicorn -D -c $APP_ROOT/config/unicorn.rb"
11
20
  INIT_CONF=$APP_ROOT/config/init.conf
21
+ UPGRADE_DELAY=${UPGRADE_DELAY-2}
12
22
  action="$1"
13
23
  set -u
14
24
 
15
25
  test -f "$INIT_CONF" && . $INIT_CONF
16
26
 
17
- old_pid="$PID.oldbin"
27
+ OLD="$PID.oldbin"
18
28
 
19
29
  cd $APP_ROOT || exit 1
20
30
 
21
31
  sig () {
22
- test -s "$PID" && kill -$1 `cat $PID`
32
+ test -s "$PID" && kill -$1 $(cat $PID)
23
33
  }
24
34
 
25
35
  oldsig () {
26
- test -s $old_pid && kill -$1 `cat $old_pid`
36
+ test -s "$OLD" && kill -$1 $(cat $OLD)
27
37
  }
28
38
 
29
39
  case $action in
@@ -45,18 +55,36 @@ restart|reload)
45
55
  $CMD
46
56
  ;;
47
57
  upgrade)
48
- if sig USR2 && sleep 2 && sig 0 && oldsig QUIT
58
+ if oldsig 0
59
+ then
60
+ echo >&2 "Old upgraded process still running with $OLD"
61
+ exit 1
62
+ fi
63
+
64
+ cur_pid=
65
+ if test -s "$PID"
66
+ then
67
+ cur_pid=$(cat $PID)
68
+ fi
69
+
70
+ if test -n "$cur_pid" &&
71
+ kill -USR2 "$cur_pid" &&
72
+ sleep $UPGRADE_DELAY &&
73
+ new_pid=$(cat $PID) &&
74
+ test x"$new_pid" != x"$cur_pid" &&
75
+ kill -0 "$new_pid" &&
76
+ kill -QUIT "$cur_pid"
49
77
  then
50
78
  n=$TIMEOUT
51
- while test -s $old_pid && test $n -ge 0
79
+ while kill -0 "$cur_pid" 2>/dev/null && test $n -ge 0
52
80
  do
53
81
  printf '.' && sleep 1 && n=$(( $n - 1 ))
54
82
  done
55
83
  echo
56
84
 
57
- if test $n -lt 0 && test -s $old_pid
85
+ if test $n -lt 0 && kill -0 "$cur_pid" 2>/dev/null
58
86
  then
59
- echo >&2 "$old_pid still exists after $TIMEOUT seconds"
87
+ echo >&2 "$cur_pid still running after $TIMEOUT seconds"
60
88
  exit 1
61
89
  fi
62
90
  exit 0
@@ -3,6 +3,9 @@
3
3
  #
4
4
  # See the logrotate(8) manpage for more information:
5
5
  # http://linux.die.net/man/8/logrotate
6
+ #
7
+ # public logrotate-related discussion in our archives:
8
+ # https://bogomips.org/unicorn-public/?q=logrotate
6
9
 
7
10
  # Modify the following glob to match the logfiles your app writes to:
8
11
  /var/log/unicorn_app/*.log {
@@ -22,7 +25,19 @@
22
25
  # config. Unicorn supports the USR1 signal and we send it
23
26
  # as our "lastaction" action:
24
27
  lastaction
25
- # assuming your pid file is in /var/run/unicorn_app/pid
28
+ # For systemd users, assuming you use two services
29
+ # (as recommended) to allow zero-downtime upgrades.
30
+ # Only one service needs to be started, but signaling
31
+ # both here is harmless as long as they're both enabled
32
+ systemctl kill -s SIGUSR1 unicorn@1.service
33
+ systemctl kill -s SIGUSR1 unicorn@2.service
34
+
35
+ # Examples for other process management systems appreciated
36
+ # Mail us at unicorn-public@bogomips.org
37
+ # (see above for archives)
38
+
39
+ # If you use a pid file and assuming your pid file
40
+ # is in /var/run/unicorn_app/pid
26
41
  pid=/var/run/unicorn_app/pid
27
42
  test -s $pid && kill -USR1 "$(cat $pid)"
28
43
  endscript
data/examples/nginx.conf CHANGED
@@ -112,7 +112,7 @@ http {
112
112
  # try_files directive appeared in in nginx 0.7.27 and has stabilized
113
113
  # over time. Older versions of nginx (e.g. 0.6.x) requires
114
114
  # "if (!-f $request_filename)" which was less efficient:
115
- # http://bogomips.org/unicorn.git/tree/examples/nginx.conf?id=v3.3.1#n127
115
+ # https://bogomips.org/unicorn.git/tree/examples/nginx.conf?id=v3.3.1#n127
116
116
  try_files $uri/index.html $uri.html $uri @app;
117
117
 
118
118
  location @app {
@@ -1,9 +1,9 @@
1
1
  # Minimal sample configuration file for Unicorn (not Rack) when used
2
2
  # with daemonization (unicorn -D) started in your working directory.
3
3
  #
4
- # See http://unicorn.bogomips.org/Unicorn/Configurator.html for complete
4
+ # See https://bogomips.org/unicorn/Unicorn/Configurator.html for complete
5
5
  # documentation.
6
- # See also http://unicorn.bogomips.org/examples/unicorn.conf.rb for
6
+ # See also https://bogomips.org/unicorn/examples/unicorn.conf.rb for
7
7
  # a more verbose configuration using more features.
8
8
 
9
9
  listen 2007 # by default Unicorn listens on port 8080
@@ -2,10 +2,10 @@
2
2
  #
3
3
  # This configuration file documents many features of Unicorn
4
4
  # that may not be needed for some applications. See
5
- # http://unicorn.bogomips.org/examples/unicorn.conf.minimal.rb
5
+ # https://bogomips.org/unicorn/examples/unicorn.conf.minimal.rb
6
6
  # for a much simpler configuration file.
7
7
  #
8
- # See http://unicorn.bogomips.org/Unicorn/Configurator.html for complete
8
+ # See https://bogomips.org/unicorn/Unicorn/Configurator.html for complete
9
9
  # documentation.
10
10
 
11
11
  # Use at least one worker per core if you're on a dedicated server,
@@ -24,5 +24,10 @@ ExecReload = /bin/kill -HUP $MAINPID
24
24
  # adding a few seconds for scheduling differences:
25
25
  TimeoutStopSec = 62
26
26
 
27
+ # Only kill the master process, it may be harmful to signal
28
+ # workers via default "control-group" setting since some
29
+ # Ruby extensions and applications misbehave on interrupts
30
+ KillMode = process
31
+
27
32
  [Install]
28
33
  WantedBy = multi-user.target
@@ -297,7 +297,7 @@ static const int http_parser_first_final = 122;
297
297
  static const int http_parser_error = 0;
298
298
 
299
299
  static const int http_parser_en_ChunkedBody = 100;
300
- static const int http_parser_en_ChunkedBody_chunk_chunk_end = 106;
300
+ static const int http_parser_en_ChunkedBody_chunk_chunk_end = 105;
301
301
  static const int http_parser_en_Trailers = 114;
302
302
  static const int http_parser_en_main = 1;
303
303
 
@@ -463,7 +463,7 @@ tr8:
463
463
  }
464
464
  }
465
465
  goto st5;
466
- tr37:
466
+ tr42:
467
467
  #line 289 "unicorn_http.rl"
468
468
  {MARK(mark, p); }
469
469
  #line 318 "unicorn_http.rl"
@@ -472,14 +472,14 @@ tr37:
472
472
  rb_hash_aset(hp->env, g_fragment, STR_NEW(mark, p));
473
473
  }
474
474
  goto st5;
475
- tr40:
475
+ tr45:
476
476
  #line 318 "unicorn_http.rl"
477
477
  {
478
478
  VALIDATE_MAX_URI_LENGTH(LEN(mark, p), FRAGMENT);
479
479
  rb_hash_aset(hp->env, g_fragment, STR_NEW(mark, p));
480
480
  }
481
481
  goto st5;
482
- tr44:
482
+ tr49:
483
483
  #line 328 "unicorn_http.rl"
484
484
  {
485
485
  VALUE val;
@@ -508,7 +508,7 @@ tr44:
508
508
  }
509
509
  }
510
510
  goto st5;
511
- tr50:
511
+ tr55:
512
512
  #line 322 "unicorn_http.rl"
513
513
  {MARK(start.query, p); }
514
514
  #line 323 "unicorn_http.rl"
@@ -533,7 +533,7 @@ tr50:
533
533
  }
534
534
  }
535
535
  goto st5;
536
- tr54:
536
+ tr59:
537
537
  #line 323 "unicorn_http.rl"
538
538
  {
539
539
  VALIDATE_MAX_URI_LENGTH(LEN(start.query, p), QUERY_STRING);
@@ -624,8 +624,10 @@ st13:
624
624
  if ( ++p == pe )
625
625
  goto _test_eof13;
626
626
  case 13:
627
- if ( (*p) == 13 )
628
- goto tr18;
627
+ switch( (*p) ) {
628
+ case 10: goto tr18;
629
+ case 13: goto tr19;
630
+ }
629
631
  if ( 48 <= (*p) && (*p) <= 57 )
630
632
  goto st13;
631
633
  goto st0;
@@ -633,23 +635,23 @@ tr18:
633
635
  #line 327 "unicorn_http.rl"
634
636
  { http_version(hp, PTR_TO(mark), LEN(mark, p)); }
635
637
  goto st14;
636
- tr25:
638
+ tr26:
637
639
  #line 295 "unicorn_http.rl"
638
640
  { MARK(mark, p); }
639
641
  #line 297 "unicorn_http.rl"
640
642
  { write_cont_value(hp, buffer, p); }
641
643
  goto st14;
642
- tr27:
644
+ tr29:
643
645
  #line 297 "unicorn_http.rl"
644
646
  { write_cont_value(hp, buffer, p); }
645
647
  goto st14;
646
- tr33:
648
+ tr36:
647
649
  #line 295 "unicorn_http.rl"
648
650
  { MARK(mark, p); }
649
651
  #line 296 "unicorn_http.rl"
650
652
  { write_value(hp, buffer, p); }
651
653
  goto st14;
652
- tr35:
654
+ tr39:
653
655
  #line 296 "unicorn_http.rl"
654
656
  { write_value(hp, buffer, p); }
655
657
  goto st14;
@@ -657,78 +659,127 @@ st14:
657
659
  if ( ++p == pe )
658
660
  goto _test_eof14;
659
661
  case 14:
660
- #line 661 "unicorn_http.c"
661
- if ( (*p) == 10 )
662
- goto st15;
663
- goto st0;
664
- st15:
665
- if ( ++p == pe )
666
- goto _test_eof15;
667
- case 15:
662
+ #line 663 "unicorn_http.c"
668
663
  switch( (*p) ) {
669
- case 9: goto st16;
664
+ case 9: goto st15;
665
+ case 10: goto tr21;
670
666
  case 13: goto st18;
671
- case 32: goto st16;
672
- case 33: goto tr22;
673
- case 124: goto tr22;
674
- case 126: goto tr22;
667
+ case 32: goto st15;
668
+ case 33: goto tr23;
669
+ case 124: goto tr23;
670
+ case 126: goto tr23;
675
671
  }
676
672
  if ( (*p) < 45 ) {
677
673
  if ( (*p) > 39 ) {
678
674
  if ( 42 <= (*p) && (*p) <= 43 )
679
- goto tr22;
675
+ goto tr23;
680
676
  } else if ( (*p) >= 35 )
681
- goto tr22;
677
+ goto tr23;
682
678
  } else if ( (*p) > 46 ) {
683
679
  if ( (*p) < 65 ) {
684
680
  if ( 48 <= (*p) && (*p) <= 57 )
685
- goto tr22;
681
+ goto tr23;
686
682
  } else if ( (*p) > 90 ) {
687
683
  if ( 94 <= (*p) && (*p) <= 122 )
688
- goto tr22;
684
+ goto tr23;
689
685
  } else
690
- goto tr22;
686
+ goto tr23;
691
687
  } else
692
- goto tr22;
688
+ goto tr23;
693
689
  goto st0;
694
- tr24:
690
+ tr25:
695
691
  #line 295 "unicorn_http.rl"
696
692
  { MARK(mark, p); }
697
- goto st16;
698
- st16:
693
+ goto st15;
694
+ st15:
699
695
  if ( ++p == pe )
700
- goto _test_eof16;
701
- case 16:
702
- #line 703 "unicorn_http.c"
696
+ goto _test_eof15;
697
+ case 15:
698
+ #line 699 "unicorn_http.c"
703
699
  switch( (*p) ) {
704
- case 9: goto tr24;
705
- case 13: goto tr25;
706
- case 32: goto tr24;
700
+ case 9: goto tr25;
701
+ case 10: goto tr26;
702
+ case 13: goto tr27;
703
+ case 32: goto tr25;
707
704
  case 127: goto st0;
708
705
  }
709
706
  if ( 0 <= (*p) && (*p) <= 31 )
710
707
  goto st0;
711
- goto tr23;
712
- tr23:
708
+ goto tr24;
709
+ tr24:
713
710
  #line 295 "unicorn_http.rl"
714
711
  { MARK(mark, p); }
715
- goto st17;
716
- st17:
712
+ goto st16;
713
+ st16:
717
714
  if ( ++p == pe )
718
- goto _test_eof17;
719
- case 17:
720
- #line 721 "unicorn_http.c"
715
+ goto _test_eof16;
716
+ case 16:
717
+ #line 718 "unicorn_http.c"
721
718
  switch( (*p) ) {
722
- case 13: goto tr27;
719
+ case 10: goto tr29;
720
+ case 13: goto tr30;
723
721
  case 127: goto st0;
724
722
  }
725
723
  if ( (*p) > 8 ) {
726
- if ( 10 <= (*p) && (*p) <= 31 )
724
+ if ( 11 <= (*p) && (*p) <= 31 )
727
725
  goto st0;
728
726
  } else if ( (*p) >= 0 )
729
727
  goto st0;
728
+ goto st16;
729
+ tr19:
730
+ #line 327 "unicorn_http.rl"
731
+ { http_version(hp, PTR_TO(mark), LEN(mark, p)); }
732
+ goto st17;
733
+ tr27:
734
+ #line 295 "unicorn_http.rl"
735
+ { MARK(mark, p); }
736
+ #line 297 "unicorn_http.rl"
737
+ { write_cont_value(hp, buffer, p); }
738
+ goto st17;
739
+ tr30:
740
+ #line 297 "unicorn_http.rl"
741
+ { write_cont_value(hp, buffer, p); }
730
742
  goto st17;
731
- tr99:
743
+ tr37:
744
+ #line 295 "unicorn_http.rl"
745
+ { MARK(mark, p); }
746
+ #line 296 "unicorn_http.rl"
747
+ { write_value(hp, buffer, p); }
748
+ goto st17;
749
+ tr40:
750
+ #line 296 "unicorn_http.rl"
751
+ { write_value(hp, buffer, p); }
752
+ goto st17;
753
+ st17:
754
+ if ( ++p == pe )
755
+ goto _test_eof17;
756
+ case 17:
757
+ #line 758 "unicorn_http.c"
758
+ if ( (*p) == 10 )
759
+ goto st14;
760
+ goto st0;
761
+ tr21:
762
+ #line 343 "unicorn_http.rl"
763
+ {
764
+ finalize_header(hp);
765
+
766
+ cs = http_parser_first_final;
767
+ if (HP_FL_TEST(hp, HASBODY)) {
768
+ HP_FL_SET(hp, INBODY);
769
+ if (HP_FL_TEST(hp, CHUNKED))
770
+ cs = http_parser_en_ChunkedBody;
771
+ } else {
772
+ HP_FL_SET(hp, REQEOF);
773
+ assert(!HP_FL_TEST(hp, CHUNKED) && "chunked encoding without body!");
774
+ }
775
+ /*
776
+ * go back to Ruby so we can call the Rack application, we'll reenter
777
+ * the parser iff the body needs to be processed.
778
+ */
779
+ goto post_exec;
780
+ }
781
+ goto st122;
782
+ tr104:
732
783
  #line 303 "unicorn_http.rl"
733
784
  {
734
785
  VALUE str;
@@ -745,8 +796,27 @@ tr99:
745
796
  rb_hash_aset(hp->env, g_request_path, str);
746
797
  }
747
798
  }
748
- goto st18;
749
- tr102:
799
+ #line 343 "unicorn_http.rl"
800
+ {
801
+ finalize_header(hp);
802
+
803
+ cs = http_parser_first_final;
804
+ if (HP_FL_TEST(hp, HASBODY)) {
805
+ HP_FL_SET(hp, INBODY);
806
+ if (HP_FL_TEST(hp, CHUNKED))
807
+ cs = http_parser_en_ChunkedBody;
808
+ } else {
809
+ HP_FL_SET(hp, REQEOF);
810
+ assert(!HP_FL_TEST(hp, CHUNKED) && "chunked encoding without body!");
811
+ }
812
+ /*
813
+ * go back to Ruby so we can call the Rack application, we'll reenter
814
+ * the parser iff the body needs to be processed.
815
+ */
816
+ goto post_exec;
817
+ }
818
+ goto st122;
819
+ tr108:
750
820
  #line 289 "unicorn_http.rl"
751
821
  {MARK(mark, p); }
752
822
  #line 318 "unicorn_http.rl"
@@ -754,15 +824,53 @@ tr102:
754
824
  VALIDATE_MAX_URI_LENGTH(LEN(mark, p), FRAGMENT);
755
825
  rb_hash_aset(hp->env, g_fragment, STR_NEW(mark, p));
756
826
  }
757
- goto st18;
758
- tr105:
827
+ #line 343 "unicorn_http.rl"
828
+ {
829
+ finalize_header(hp);
830
+
831
+ cs = http_parser_first_final;
832
+ if (HP_FL_TEST(hp, HASBODY)) {
833
+ HP_FL_SET(hp, INBODY);
834
+ if (HP_FL_TEST(hp, CHUNKED))
835
+ cs = http_parser_en_ChunkedBody;
836
+ } else {
837
+ HP_FL_SET(hp, REQEOF);
838
+ assert(!HP_FL_TEST(hp, CHUNKED) && "chunked encoding without body!");
839
+ }
840
+ /*
841
+ * go back to Ruby so we can call the Rack application, we'll reenter
842
+ * the parser iff the body needs to be processed.
843
+ */
844
+ goto post_exec;
845
+ }
846
+ goto st122;
847
+ tr112:
759
848
  #line 318 "unicorn_http.rl"
760
849
  {
761
850
  VALIDATE_MAX_URI_LENGTH(LEN(mark, p), FRAGMENT);
762
851
  rb_hash_aset(hp->env, g_fragment, STR_NEW(mark, p));
763
852
  }
764
- goto st18;
765
- tr109:
853
+ #line 343 "unicorn_http.rl"
854
+ {
855
+ finalize_header(hp);
856
+
857
+ cs = http_parser_first_final;
858
+ if (HP_FL_TEST(hp, HASBODY)) {
859
+ HP_FL_SET(hp, INBODY);
860
+ if (HP_FL_TEST(hp, CHUNKED))
861
+ cs = http_parser_en_ChunkedBody;
862
+ } else {
863
+ HP_FL_SET(hp, REQEOF);
864
+ assert(!HP_FL_TEST(hp, CHUNKED) && "chunked encoding without body!");
865
+ }
866
+ /*
867
+ * go back to Ruby so we can call the Rack application, we'll reenter
868
+ * the parser iff the body needs to be processed.
869
+ */
870
+ goto post_exec;
871
+ }
872
+ goto st122;
873
+ tr117:
766
874
  #line 328 "unicorn_http.rl"
767
875
  {
768
876
  VALUE val;
@@ -790,8 +898,27 @@ tr109:
790
898
  rb_hash_aset(hp->env, g_request_path, str);
791
899
  }
792
900
  }
793
- goto st18;
794
- tr115:
901
+ #line 343 "unicorn_http.rl"
902
+ {
903
+ finalize_header(hp);
904
+
905
+ cs = http_parser_first_final;
906
+ if (HP_FL_TEST(hp, HASBODY)) {
907
+ HP_FL_SET(hp, INBODY);
908
+ if (HP_FL_TEST(hp, CHUNKED))
909
+ cs = http_parser_en_ChunkedBody;
910
+ } else {
911
+ HP_FL_SET(hp, REQEOF);
912
+ assert(!HP_FL_TEST(hp, CHUNKED) && "chunked encoding without body!");
913
+ }
914
+ /*
915
+ * go back to Ruby so we can call the Rack application, we'll reenter
916
+ * the parser iff the body needs to be processed.
917
+ */
918
+ goto post_exec;
919
+ }
920
+ goto st122;
921
+ tr124:
795
922
  #line 322 "unicorn_http.rl"
796
923
  {MARK(start.query, p); }
797
924
  #line 323 "unicorn_http.rl"
@@ -815,8 +942,27 @@ tr115:
815
942
  rb_hash_aset(hp->env, g_request_path, str);
816
943
  }
817
944
  }
818
- goto st18;
819
- tr119:
945
+ #line 343 "unicorn_http.rl"
946
+ {
947
+ finalize_header(hp);
948
+
949
+ cs = http_parser_first_final;
950
+ if (HP_FL_TEST(hp, HASBODY)) {
951
+ HP_FL_SET(hp, INBODY);
952
+ if (HP_FL_TEST(hp, CHUNKED))
953
+ cs = http_parser_en_ChunkedBody;
954
+ } else {
955
+ HP_FL_SET(hp, REQEOF);
956
+ assert(!HP_FL_TEST(hp, CHUNKED) && "chunked encoding without body!");
957
+ }
958
+ /*
959
+ * go back to Ruby so we can call the Rack application, we'll reenter
960
+ * the parser iff the body needs to be processed.
961
+ */
962
+ goto post_exec;
963
+ }
964
+ goto st122;
965
+ tr129:
820
966
  #line 323 "unicorn_http.rl"
821
967
  {
822
968
  VALIDATE_MAX_URI_LENGTH(LEN(start.query, p), QUERY_STRING);
@@ -838,16 +984,6 @@ tr119:
838
984
  rb_hash_aset(hp->env, g_request_path, str);
839
985
  }
840
986
  }
841
- goto st18;
842
- st18:
843
- if ( ++p == pe )
844
- goto _test_eof18;
845
- case 18:
846
- #line 847 "unicorn_http.c"
847
- if ( (*p) == 10 )
848
- goto tr28;
849
- goto st0;
850
- tr28:
851
987
  #line 343 "unicorn_http.rl"
852
988
  {
853
989
  finalize_header(hp);
@@ -872,15 +1008,134 @@ st122:
872
1008
  if ( ++p == pe )
873
1009
  goto _test_eof122;
874
1010
  case 122:
875
- #line 876 "unicorn_http.c"
1011
+ #line 1012 "unicorn_http.c"
876
1012
  goto st0;
877
- tr22:
1013
+ tr105:
1014
+ #line 303 "unicorn_http.rl"
1015
+ {
1016
+ VALUE str;
1017
+
1018
+ VALIDATE_MAX_URI_LENGTH(LEN(mark, p), REQUEST_URI);
1019
+ str = rb_hash_aset(hp->env, g_request_uri, STR_NEW(mark, p));
1020
+ /*
1021
+ * "OPTIONS * HTTP/1.1\r\n" is a valid request, but we can't have '*'
1022
+ * in REQUEST_PATH or PATH_INFO or else Rack::Lint will complain
1023
+ */
1024
+ if (STR_CSTR_EQ(str, "*")) {
1025
+ str = rb_str_new(NULL, 0);
1026
+ rb_hash_aset(hp->env, g_path_info, str);
1027
+ rb_hash_aset(hp->env, g_request_path, str);
1028
+ }
1029
+ }
1030
+ goto st18;
1031
+ tr109:
1032
+ #line 289 "unicorn_http.rl"
1033
+ {MARK(mark, p); }
1034
+ #line 318 "unicorn_http.rl"
1035
+ {
1036
+ VALIDATE_MAX_URI_LENGTH(LEN(mark, p), FRAGMENT);
1037
+ rb_hash_aset(hp->env, g_fragment, STR_NEW(mark, p));
1038
+ }
1039
+ goto st18;
1040
+ tr113:
1041
+ #line 318 "unicorn_http.rl"
1042
+ {
1043
+ VALIDATE_MAX_URI_LENGTH(LEN(mark, p), FRAGMENT);
1044
+ rb_hash_aset(hp->env, g_fragment, STR_NEW(mark, p));
1045
+ }
1046
+ goto st18;
1047
+ tr118:
1048
+ #line 328 "unicorn_http.rl"
1049
+ {
1050
+ VALUE val;
1051
+
1052
+ VALIDATE_MAX_URI_LENGTH(LEN(mark, p), REQUEST_PATH);
1053
+ val = rb_hash_aset(hp->env, g_request_path, STR_NEW(mark, p));
1054
+
1055
+ /* rack says PATH_INFO must start with "/" or be empty */
1056
+ if (!STR_CSTR_EQ(val, "*"))
1057
+ rb_hash_aset(hp->env, g_path_info, val);
1058
+ }
1059
+ #line 303 "unicorn_http.rl"
1060
+ {
1061
+ VALUE str;
1062
+
1063
+ VALIDATE_MAX_URI_LENGTH(LEN(mark, p), REQUEST_URI);
1064
+ str = rb_hash_aset(hp->env, g_request_uri, STR_NEW(mark, p));
1065
+ /*
1066
+ * "OPTIONS * HTTP/1.1\r\n" is a valid request, but we can't have '*'
1067
+ * in REQUEST_PATH or PATH_INFO or else Rack::Lint will complain
1068
+ */
1069
+ if (STR_CSTR_EQ(str, "*")) {
1070
+ str = rb_str_new(NULL, 0);
1071
+ rb_hash_aset(hp->env, g_path_info, str);
1072
+ rb_hash_aset(hp->env, g_request_path, str);
1073
+ }
1074
+ }
1075
+ goto st18;
1076
+ tr125:
1077
+ #line 322 "unicorn_http.rl"
1078
+ {MARK(start.query, p); }
1079
+ #line 323 "unicorn_http.rl"
1080
+ {
1081
+ VALIDATE_MAX_URI_LENGTH(LEN(start.query, p), QUERY_STRING);
1082
+ rb_hash_aset(hp->env, g_query_string, STR_NEW(start.query, p));
1083
+ }
1084
+ #line 303 "unicorn_http.rl"
1085
+ {
1086
+ VALUE str;
1087
+
1088
+ VALIDATE_MAX_URI_LENGTH(LEN(mark, p), REQUEST_URI);
1089
+ str = rb_hash_aset(hp->env, g_request_uri, STR_NEW(mark, p));
1090
+ /*
1091
+ * "OPTIONS * HTTP/1.1\r\n" is a valid request, but we can't have '*'
1092
+ * in REQUEST_PATH or PATH_INFO or else Rack::Lint will complain
1093
+ */
1094
+ if (STR_CSTR_EQ(str, "*")) {
1095
+ str = rb_str_new(NULL, 0);
1096
+ rb_hash_aset(hp->env, g_path_info, str);
1097
+ rb_hash_aset(hp->env, g_request_path, str);
1098
+ }
1099
+ }
1100
+ goto st18;
1101
+ tr130:
1102
+ #line 323 "unicorn_http.rl"
1103
+ {
1104
+ VALIDATE_MAX_URI_LENGTH(LEN(start.query, p), QUERY_STRING);
1105
+ rb_hash_aset(hp->env, g_query_string, STR_NEW(start.query, p));
1106
+ }
1107
+ #line 303 "unicorn_http.rl"
1108
+ {
1109
+ VALUE str;
1110
+
1111
+ VALIDATE_MAX_URI_LENGTH(LEN(mark, p), REQUEST_URI);
1112
+ str = rb_hash_aset(hp->env, g_request_uri, STR_NEW(mark, p));
1113
+ /*
1114
+ * "OPTIONS * HTTP/1.1\r\n" is a valid request, but we can't have '*'
1115
+ * in REQUEST_PATH or PATH_INFO or else Rack::Lint will complain
1116
+ */
1117
+ if (STR_CSTR_EQ(str, "*")) {
1118
+ str = rb_str_new(NULL, 0);
1119
+ rb_hash_aset(hp->env, g_path_info, str);
1120
+ rb_hash_aset(hp->env, g_request_path, str);
1121
+ }
1122
+ }
1123
+ goto st18;
1124
+ st18:
1125
+ if ( ++p == pe )
1126
+ goto _test_eof18;
1127
+ case 18:
1128
+ #line 1129 "unicorn_http.c"
1129
+ if ( (*p) == 10 )
1130
+ goto tr21;
1131
+ goto st0;
1132
+ tr23:
878
1133
  #line 291 "unicorn_http.rl"
879
1134
  { MARK(start.field, p); }
880
1135
  #line 292 "unicorn_http.rl"
881
1136
  { snake_upcase_char(deconst(p)); }
882
1137
  goto st19;
883
- tr29:
1138
+ tr32:
884
1139
  #line 292 "unicorn_http.rl"
885
1140
  { snake_upcase_char(deconst(p)); }
886
1141
  goto st19;
@@ -888,36 +1143,36 @@ st19:
888
1143
  if ( ++p == pe )
889
1144
  goto _test_eof19;
890
1145
  case 19:
891
- #line 892 "unicorn_http.c"
1146
+ #line 1147 "unicorn_http.c"
892
1147
  switch( (*p) ) {
893
- case 33: goto tr29;
894
- case 58: goto tr30;
895
- case 124: goto tr29;
896
- case 126: goto tr29;
1148
+ case 33: goto tr32;
1149
+ case 58: goto tr33;
1150
+ case 124: goto tr32;
1151
+ case 126: goto tr32;
897
1152
  }
898
1153
  if ( (*p) < 45 ) {
899
1154
  if ( (*p) > 39 ) {
900
1155
  if ( 42 <= (*p) && (*p) <= 43 )
901
- goto tr29;
1156
+ goto tr32;
902
1157
  } else if ( (*p) >= 35 )
903
- goto tr29;
1158
+ goto tr32;
904
1159
  } else if ( (*p) > 46 ) {
905
1160
  if ( (*p) < 65 ) {
906
1161
  if ( 48 <= (*p) && (*p) <= 57 )
907
- goto tr29;
1162
+ goto tr32;
908
1163
  } else if ( (*p) > 90 ) {
909
1164
  if ( 94 <= (*p) && (*p) <= 122 )
910
- goto tr29;
1165
+ goto tr32;
911
1166
  } else
912
- goto tr29;
1167
+ goto tr32;
913
1168
  } else
914
- goto tr29;
1169
+ goto tr32;
915
1170
  goto st0;
916
- tr32:
1171
+ tr35:
917
1172
  #line 295 "unicorn_http.rl"
918
1173
  { MARK(mark, p); }
919
1174
  goto st20;
920
- tr30:
1175
+ tr33:
921
1176
  #line 294 "unicorn_http.rl"
922
1177
  { hp->s.field_len = LEN(start.field, p); }
923
1178
  goto st20;
@@ -925,17 +1180,18 @@ st20:
925
1180
  if ( ++p == pe )
926
1181
  goto _test_eof20;
927
1182
  case 20:
928
- #line 929 "unicorn_http.c"
1183
+ #line 1184 "unicorn_http.c"
929
1184
  switch( (*p) ) {
930
- case 9: goto tr32;
931
- case 13: goto tr33;
932
- case 32: goto tr32;
1185
+ case 9: goto tr35;
1186
+ case 10: goto tr36;
1187
+ case 13: goto tr37;
1188
+ case 32: goto tr35;
933
1189
  case 127: goto st0;
934
1190
  }
935
1191
  if ( 0 <= (*p) && (*p) <= 31 )
936
1192
  goto st0;
937
- goto tr31;
938
- tr31:
1193
+ goto tr34;
1194
+ tr34:
939
1195
  #line 295 "unicorn_http.rl"
940
1196
  { MARK(mark, p); }
941
1197
  goto st21;
@@ -943,13 +1199,14 @@ st21:
943
1199
  if ( ++p == pe )
944
1200
  goto _test_eof21;
945
1201
  case 21:
946
- #line 947 "unicorn_http.c"
1202
+ #line 1203 "unicorn_http.c"
947
1203
  switch( (*p) ) {
948
- case 13: goto tr35;
1204
+ case 10: goto tr39;
1205
+ case 13: goto tr40;
949
1206
  case 127: goto st0;
950
1207
  }
951
1208
  if ( (*p) > 8 ) {
952
- if ( 10 <= (*p) && (*p) <= 31 )
1209
+ if ( 11 <= (*p) && (*p) <= 31 )
953
1210
  goto st0;
954
1211
  } else if ( (*p) >= 0 )
955
1212
  goto st0;
@@ -972,7 +1229,7 @@ tr9:
972
1229
  }
973
1230
  }
974
1231
  goto st22;
975
- tr45:
1232
+ tr50:
976
1233
  #line 328 "unicorn_http.rl"
977
1234
  {
978
1235
  VALUE val;
@@ -1001,7 +1258,7 @@ tr45:
1001
1258
  }
1002
1259
  }
1003
1260
  goto st22;
1004
- tr51:
1261
+ tr56:
1005
1262
  #line 322 "unicorn_http.rl"
1006
1263
  {MARK(start.query, p); }
1007
1264
  #line 323 "unicorn_http.rl"
@@ -1026,7 +1283,7 @@ tr51:
1026
1283
  }
1027
1284
  }
1028
1285
  goto st22;
1029
- tr55:
1286
+ tr60:
1030
1287
  #line 323 "unicorn_http.rl"
1031
1288
  {
1032
1289
  VALIDATE_MAX_URI_LENGTH(LEN(start.query, p), QUERY_STRING);
@@ -1053,17 +1310,17 @@ st22:
1053
1310
  if ( ++p == pe )
1054
1311
  goto _test_eof22;
1055
1312
  case 22:
1056
- #line 1057 "unicorn_http.c"
1313
+ #line 1314 "unicorn_http.c"
1057
1314
  switch( (*p) ) {
1058
- case 32: goto tr37;
1315
+ case 32: goto tr42;
1059
1316
  case 35: goto st0;
1060
- case 37: goto tr38;
1317
+ case 37: goto tr43;
1061
1318
  case 127: goto st0;
1062
1319
  }
1063
1320
  if ( 0 <= (*p) && (*p) <= 31 )
1064
1321
  goto st0;
1065
- goto tr36;
1066
- tr36:
1322
+ goto tr41;
1323
+ tr41:
1067
1324
  #line 289 "unicorn_http.rl"
1068
1325
  {MARK(mark, p); }
1069
1326
  goto st23;
@@ -1071,9 +1328,9 @@ st23:
1071
1328
  if ( ++p == pe )
1072
1329
  goto _test_eof23;
1073
1330
  case 23:
1074
- #line 1075 "unicorn_http.c"
1331
+ #line 1332 "unicorn_http.c"
1075
1332
  switch( (*p) ) {
1076
- case 32: goto tr40;
1333
+ case 32: goto tr45;
1077
1334
  case 35: goto st0;
1078
1335
  case 37: goto st24;
1079
1336
  case 127: goto st0;
@@ -1081,7 +1338,7 @@ case 23:
1081
1338
  if ( 0 <= (*p) && (*p) <= 31 )
1082
1339
  goto st0;
1083
1340
  goto st23;
1084
- tr38:
1341
+ tr43:
1085
1342
  #line 289 "unicorn_http.rl"
1086
1343
  {MARK(mark, p); }
1087
1344
  goto st24;
@@ -1089,7 +1346,7 @@ st24:
1089
1346
  if ( ++p == pe )
1090
1347
  goto _test_eof24;
1091
1348
  case 24:
1092
- #line 1093 "unicorn_http.c"
1349
+ #line 1350 "unicorn_http.c"
1093
1350
  if ( (*p) < 65 ) {
1094
1351
  if ( 48 <= (*p) && (*p) <= 57 )
1095
1352
  goto st25;
@@ -1116,7 +1373,7 @@ tr6:
1116
1373
  #line 289 "unicorn_http.rl"
1117
1374
  {MARK(mark, p); }
1118
1375
  goto st26;
1119
- tr71:
1376
+ tr76:
1120
1377
  #line 302 "unicorn_http.rl"
1121
1378
  { rb_hash_aset(hp->env, g_http_host, STR_NEW(mark, p)); }
1122
1379
  #line 289 "unicorn_http.rl"
@@ -1126,12 +1383,12 @@ st26:
1126
1383
  if ( ++p == pe )
1127
1384
  goto _test_eof26;
1128
1385
  case 26:
1129
- #line 1130 "unicorn_http.c"
1386
+ #line 1387 "unicorn_http.c"
1130
1387
  switch( (*p) ) {
1131
- case 32: goto tr44;
1132
- case 35: goto tr45;
1388
+ case 32: goto tr49;
1389
+ case 35: goto tr50;
1133
1390
  case 37: goto st27;
1134
- case 63: goto tr47;
1391
+ case 63: goto tr52;
1135
1392
  case 127: goto st0;
1136
1393
  }
1137
1394
  if ( 0 <= (*p) && (*p) <= 31 )
@@ -1163,7 +1420,7 @@ case 28:
1163
1420
  } else
1164
1421
  goto st26;
1165
1422
  goto st0;
1166
- tr47:
1423
+ tr52:
1167
1424
  #line 328 "unicorn_http.rl"
1168
1425
  {
1169
1426
  VALUE val;
@@ -1180,17 +1437,17 @@ st29:
1180
1437
  if ( ++p == pe )
1181
1438
  goto _test_eof29;
1182
1439
  case 29:
1183
- #line 1184 "unicorn_http.c"
1440
+ #line 1441 "unicorn_http.c"
1184
1441
  switch( (*p) ) {
1185
- case 32: goto tr50;
1186
- case 35: goto tr51;
1187
- case 37: goto tr52;
1442
+ case 32: goto tr55;
1443
+ case 35: goto tr56;
1444
+ case 37: goto tr57;
1188
1445
  case 127: goto st0;
1189
1446
  }
1190
1447
  if ( 0 <= (*p) && (*p) <= 31 )
1191
1448
  goto st0;
1192
- goto tr49;
1193
- tr49:
1449
+ goto tr54;
1450
+ tr54:
1194
1451
  #line 322 "unicorn_http.rl"
1195
1452
  {MARK(start.query, p); }
1196
1453
  goto st30;
@@ -1198,17 +1455,17 @@ st30:
1198
1455
  if ( ++p == pe )
1199
1456
  goto _test_eof30;
1200
1457
  case 30:
1201
- #line 1202 "unicorn_http.c"
1458
+ #line 1459 "unicorn_http.c"
1202
1459
  switch( (*p) ) {
1203
- case 32: goto tr54;
1204
- case 35: goto tr55;
1460
+ case 32: goto tr59;
1461
+ case 35: goto tr60;
1205
1462
  case 37: goto st31;
1206
1463
  case 127: goto st0;
1207
1464
  }
1208
1465
  if ( 0 <= (*p) && (*p) <= 31 )
1209
1466
  goto st0;
1210
1467
  goto st30;
1211
- tr52:
1468
+ tr57:
1212
1469
  #line 322 "unicorn_http.rl"
1213
1470
  {MARK(start.query, p); }
1214
1471
  goto st31;
@@ -1216,7 +1473,7 @@ st31:
1216
1473
  if ( ++p == pe )
1217
1474
  goto _test_eof31;
1218
1475
  case 31:
1219
- #line 1220 "unicorn_http.c"
1476
+ #line 1477 "unicorn_http.c"
1220
1477
  if ( (*p) < 65 ) {
1221
1478
  if ( 48 <= (*p) && (*p) <= 57 )
1222
1479
  goto st32;
@@ -1249,13 +1506,13 @@ st33:
1249
1506
  if ( ++p == pe )
1250
1507
  goto _test_eof33;
1251
1508
  case 33:
1252
- #line 1253 "unicorn_http.c"
1509
+ #line 1510 "unicorn_http.c"
1253
1510
  switch( (*p) ) {
1254
- case 84: goto tr58;
1255
- case 116: goto tr58;
1511
+ case 84: goto tr63;
1512
+ case 116: goto tr63;
1256
1513
  }
1257
1514
  goto st0;
1258
- tr58:
1515
+ tr63:
1259
1516
  #line 293 "unicorn_http.rl"
1260
1517
  { downcase_char(deconst(p)); }
1261
1518
  goto st34;
@@ -1263,13 +1520,13 @@ st34:
1263
1520
  if ( ++p == pe )
1264
1521
  goto _test_eof34;
1265
1522
  case 34:
1266
- #line 1267 "unicorn_http.c"
1523
+ #line 1524 "unicorn_http.c"
1267
1524
  switch( (*p) ) {
1268
- case 84: goto tr59;
1269
- case 116: goto tr59;
1525
+ case 84: goto tr64;
1526
+ case 116: goto tr64;
1270
1527
  }
1271
1528
  goto st0;
1272
- tr59:
1529
+ tr64:
1273
1530
  #line 293 "unicorn_http.rl"
1274
1531
  { downcase_char(deconst(p)); }
1275
1532
  goto st35;
@@ -1277,13 +1534,13 @@ st35:
1277
1534
  if ( ++p == pe )
1278
1535
  goto _test_eof35;
1279
1536
  case 35:
1280
- #line 1281 "unicorn_http.c"
1537
+ #line 1538 "unicorn_http.c"
1281
1538
  switch( (*p) ) {
1282
- case 80: goto tr60;
1283
- case 112: goto tr60;
1539
+ case 80: goto tr65;
1540
+ case 112: goto tr65;
1284
1541
  }
1285
1542
  goto st0;
1286
- tr60:
1543
+ tr65:
1287
1544
  #line 293 "unicorn_http.rl"
1288
1545
  { downcase_char(deconst(p)); }
1289
1546
  goto st36;
@@ -1291,14 +1548,14 @@ st36:
1291
1548
  if ( ++p == pe )
1292
1549
  goto _test_eof36;
1293
1550
  case 36:
1294
- #line 1295 "unicorn_http.c"
1551
+ #line 1552 "unicorn_http.c"
1295
1552
  switch( (*p) ) {
1296
- case 58: goto tr61;
1297
- case 83: goto tr62;
1298
- case 115: goto tr62;
1553
+ case 58: goto tr66;
1554
+ case 83: goto tr67;
1555
+ case 115: goto tr67;
1299
1556
  }
1300
1557
  goto st0;
1301
- tr61:
1558
+ tr66:
1302
1559
  #line 299 "unicorn_http.rl"
1303
1560
  {
1304
1561
  rb_hash_aset(hp->env, g_rack_url_scheme, STR_NEW(mark, p));
@@ -1308,7 +1565,7 @@ st37:
1308
1565
  if ( ++p == pe )
1309
1566
  goto _test_eof37;
1310
1567
  case 37:
1311
- #line 1312 "unicorn_http.c"
1568
+ #line 1569 "unicorn_http.c"
1312
1569
  if ( (*p) == 47 )
1313
1570
  goto st38;
1314
1571
  goto st0;
@@ -1327,8 +1584,8 @@ case 39:
1327
1584
  case 37: goto st41;
1328
1585
  case 47: goto st0;
1329
1586
  case 60: goto st0;
1330
- case 91: goto tr68;
1331
- case 95: goto tr67;
1587
+ case 91: goto tr73;
1588
+ case 95: goto tr72;
1332
1589
  case 127: goto st0;
1333
1590
  }
1334
1591
  if ( (*p) < 45 ) {
@@ -1343,11 +1600,11 @@ case 39:
1343
1600
  goto st0;
1344
1601
  } else if ( (*p) > 90 ) {
1345
1602
  if ( 97 <= (*p) && (*p) <= 122 )
1346
- goto tr67;
1603
+ goto tr72;
1347
1604
  } else
1348
- goto tr67;
1605
+ goto tr72;
1349
1606
  } else
1350
- goto tr67;
1607
+ goto tr72;
1351
1608
  goto st40;
1352
1609
  st40:
1353
1610
  if ( ++p == pe )
@@ -1395,7 +1652,7 @@ case 42:
1395
1652
  } else
1396
1653
  goto st40;
1397
1654
  goto st0;
1398
- tr67:
1655
+ tr72:
1399
1656
  #line 289 "unicorn_http.rl"
1400
1657
  {MARK(mark, p); }
1401
1658
  goto st43;
@@ -1403,10 +1660,10 @@ st43:
1403
1660
  if ( ++p == pe )
1404
1661
  goto _test_eof43;
1405
1662
  case 43:
1406
- #line 1407 "unicorn_http.c"
1663
+ #line 1664 "unicorn_http.c"
1407
1664
  switch( (*p) ) {
1408
1665
  case 37: goto st41;
1409
- case 47: goto tr71;
1666
+ case 47: goto tr76;
1410
1667
  case 58: goto st44;
1411
1668
  case 60: goto st0;
1412
1669
  case 64: goto st39;
@@ -1437,7 +1694,7 @@ st44:
1437
1694
  case 44:
1438
1695
  switch( (*p) ) {
1439
1696
  case 37: goto st41;
1440
- case 47: goto tr71;
1697
+ case 47: goto tr76;
1441
1698
  case 60: goto st0;
1442
1699
  case 64: goto st39;
1443
1700
  case 127: goto st0;
@@ -1454,7 +1711,7 @@ case 44:
1454
1711
  } else
1455
1712
  goto st0;
1456
1713
  goto st40;
1457
- tr68:
1714
+ tr73:
1458
1715
  #line 289 "unicorn_http.rl"
1459
1716
  {MARK(mark, p); }
1460
1717
  goto st45;
@@ -1462,7 +1719,7 @@ st45:
1462
1719
  if ( ++p == pe )
1463
1720
  goto _test_eof45;
1464
1721
  case 45:
1465
- #line 1466 "unicorn_http.c"
1722
+ #line 1723 "unicorn_http.c"
1466
1723
  switch( (*p) ) {
1467
1724
  case 37: goto st41;
1468
1725
  case 47: goto st0;
@@ -1524,7 +1781,7 @@ st47:
1524
1781
  case 47:
1525
1782
  switch( (*p) ) {
1526
1783
  case 37: goto st41;
1527
- case 47: goto tr71;
1784
+ case 47: goto tr76;
1528
1785
  case 58: goto st44;
1529
1786
  case 60: goto st0;
1530
1787
  case 64: goto st39;
@@ -1539,7 +1796,7 @@ case 47:
1539
1796
  } else
1540
1797
  goto st0;
1541
1798
  goto st40;
1542
- tr62:
1799
+ tr67:
1543
1800
  #line 293 "unicorn_http.rl"
1544
1801
  { downcase_char(deconst(p)); }
1545
1802
  goto st48;
@@ -1547,9 +1804,9 @@ st48:
1547
1804
  if ( ++p == pe )
1548
1805
  goto _test_eof48;
1549
1806
  case 48:
1550
- #line 1551 "unicorn_http.c"
1807
+ #line 1808 "unicorn_http.c"
1551
1808
  if ( (*p) == 58 )
1552
- goto tr61;
1809
+ goto tr66;
1553
1810
  goto st0;
1554
1811
  st49:
1555
1812
  if ( ++p == pe )
@@ -2070,7 +2327,7 @@ st68:
2070
2327
  if ( ++p == pe )
2071
2328
  goto _test_eof68;
2072
2329
  case 68:
2073
- #line 2074 "unicorn_http.c"
2330
+ #line 2331 "unicorn_http.c"
2074
2331
  switch( (*p) ) {
2075
2332
  case 32: goto tr3;
2076
2333
  case 33: goto st49;
@@ -2130,7 +2387,7 @@ st70:
2130
2387
  goto _test_eof70;
2131
2388
  case 70:
2132
2389
  switch( (*p) ) {
2133
- case 32: goto tr95;
2390
+ case 32: goto tr100;
2134
2391
  case 33: goto st51;
2135
2392
  case 124: goto st51;
2136
2393
  case 126: goto st51;
@@ -2153,7 +2410,7 @@ case 70:
2153
2410
  } else
2154
2411
  goto st51;
2155
2412
  goto st0;
2156
- tr95:
2413
+ tr100:
2157
2414
  #line 298 "unicorn_http.rl"
2158
2415
  { request_method(hp, PTR_TO(mark), LEN(mark, p)); }
2159
2416
  goto st71;
@@ -2161,15 +2418,15 @@ st71:
2161
2418
  if ( ++p == pe )
2162
2419
  goto _test_eof71;
2163
2420
  case 71:
2164
- #line 2165 "unicorn_http.c"
2421
+ #line 2422 "unicorn_http.c"
2165
2422
  switch( (*p) ) {
2166
- case 42: goto tr96;
2167
- case 47: goto tr97;
2168
- case 72: goto tr98;
2169
- case 104: goto tr98;
2423
+ case 42: goto tr101;
2424
+ case 47: goto tr102;
2425
+ case 72: goto tr103;
2426
+ case 104: goto tr103;
2170
2427
  }
2171
2428
  goto st0;
2172
- tr96:
2429
+ tr101:
2173
2430
  #line 289 "unicorn_http.rl"
2174
2431
  {MARK(mark, p); }
2175
2432
  goto st72;
@@ -2177,14 +2434,15 @@ st72:
2177
2434
  if ( ++p == pe )
2178
2435
  goto _test_eof72;
2179
2436
  case 72:
2180
- #line 2181 "unicorn_http.c"
2437
+ #line 2438 "unicorn_http.c"
2181
2438
  switch( (*p) ) {
2182
- case 13: goto tr99;
2439
+ case 10: goto tr104;
2440
+ case 13: goto tr105;
2183
2441
  case 32: goto tr8;
2184
- case 35: goto tr100;
2442
+ case 35: goto tr106;
2185
2443
  }
2186
2444
  goto st0;
2187
- tr100:
2445
+ tr106:
2188
2446
  #line 303 "unicorn_http.rl"
2189
2447
  {
2190
2448
  VALUE str;
@@ -2202,7 +2460,7 @@ tr100:
2202
2460
  }
2203
2461
  }
2204
2462
  goto st73;
2205
- tr110:
2463
+ tr119:
2206
2464
  #line 328 "unicorn_http.rl"
2207
2465
  {
2208
2466
  VALUE val;
@@ -2231,7 +2489,7 @@ tr110:
2231
2489
  }
2232
2490
  }
2233
2491
  goto st73;
2234
- tr116:
2492
+ tr126:
2235
2493
  #line 322 "unicorn_http.rl"
2236
2494
  {MARK(start.query, p); }
2237
2495
  #line 323 "unicorn_http.rl"
@@ -2256,7 +2514,7 @@ tr116:
2256
2514
  }
2257
2515
  }
2258
2516
  goto st73;
2259
- tr120:
2517
+ tr131:
2260
2518
  #line 323 "unicorn_http.rl"
2261
2519
  {
2262
2520
  VALIDATE_MAX_URI_LENGTH(LEN(start.query, p), QUERY_STRING);
@@ -2283,18 +2541,19 @@ st73:
2283
2541
  if ( ++p == pe )
2284
2542
  goto _test_eof73;
2285
2543
  case 73:
2286
- #line 2287 "unicorn_http.c"
2544
+ #line 2545 "unicorn_http.c"
2287
2545
  switch( (*p) ) {
2288
- case 13: goto tr102;
2289
- case 32: goto tr37;
2546
+ case 10: goto tr108;
2547
+ case 13: goto tr109;
2548
+ case 32: goto tr42;
2290
2549
  case 35: goto st0;
2291
- case 37: goto tr103;
2550
+ case 37: goto tr110;
2292
2551
  case 127: goto st0;
2293
2552
  }
2294
2553
  if ( 0 <= (*p) && (*p) <= 31 )
2295
2554
  goto st0;
2296
- goto tr101;
2297
- tr101:
2555
+ goto tr107;
2556
+ tr107:
2298
2557
  #line 289 "unicorn_http.rl"
2299
2558
  {MARK(mark, p); }
2300
2559
  goto st74;
@@ -2302,10 +2561,11 @@ st74:
2302
2561
  if ( ++p == pe )
2303
2562
  goto _test_eof74;
2304
2563
  case 74:
2305
- #line 2306 "unicorn_http.c"
2564
+ #line 2565 "unicorn_http.c"
2306
2565
  switch( (*p) ) {
2307
- case 13: goto tr105;
2308
- case 32: goto tr40;
2566
+ case 10: goto tr112;
2567
+ case 13: goto tr113;
2568
+ case 32: goto tr45;
2309
2569
  case 35: goto st0;
2310
2570
  case 37: goto st75;
2311
2571
  case 127: goto st0;
@@ -2313,7 +2573,7 @@ case 74:
2313
2573
  if ( 0 <= (*p) && (*p) <= 31 )
2314
2574
  goto st0;
2315
2575
  goto st74;
2316
- tr103:
2576
+ tr110:
2317
2577
  #line 289 "unicorn_http.rl"
2318
2578
  {MARK(mark, p); }
2319
2579
  goto st75;
@@ -2321,7 +2581,7 @@ st75:
2321
2581
  if ( ++p == pe )
2322
2582
  goto _test_eof75;
2323
2583
  case 75:
2324
- #line 2325 "unicorn_http.c"
2584
+ #line 2585 "unicorn_http.c"
2325
2585
  if ( (*p) < 65 ) {
2326
2586
  if ( 48 <= (*p) && (*p) <= 57 )
2327
2587
  goto st76;
@@ -2344,11 +2604,11 @@ case 76:
2344
2604
  } else
2345
2605
  goto st74;
2346
2606
  goto st0;
2347
- tr97:
2607
+ tr102:
2348
2608
  #line 289 "unicorn_http.rl"
2349
2609
  {MARK(mark, p); }
2350
2610
  goto st77;
2351
- tr136:
2611
+ tr147:
2352
2612
  #line 302 "unicorn_http.rl"
2353
2613
  { rb_hash_aset(hp->env, g_http_host, STR_NEW(mark, p)); }
2354
2614
  #line 289 "unicorn_http.rl"
@@ -2358,13 +2618,14 @@ st77:
2358
2618
  if ( ++p == pe )
2359
2619
  goto _test_eof77;
2360
2620
  case 77:
2361
- #line 2362 "unicorn_http.c"
2621
+ #line 2622 "unicorn_http.c"
2362
2622
  switch( (*p) ) {
2363
- case 13: goto tr109;
2364
- case 32: goto tr44;
2365
- case 35: goto tr110;
2623
+ case 10: goto tr117;
2624
+ case 13: goto tr118;
2625
+ case 32: goto tr49;
2626
+ case 35: goto tr119;
2366
2627
  case 37: goto st78;
2367
- case 63: goto tr112;
2628
+ case 63: goto tr121;
2368
2629
  case 127: goto st0;
2369
2630
  }
2370
2631
  if ( 0 <= (*p) && (*p) <= 31 )
@@ -2396,7 +2657,7 @@ case 79:
2396
2657
  } else
2397
2658
  goto st77;
2398
2659
  goto st0;
2399
- tr112:
2660
+ tr121:
2400
2661
  #line 328 "unicorn_http.rl"
2401
2662
  {
2402
2663
  VALUE val;
@@ -2413,18 +2674,19 @@ st80:
2413
2674
  if ( ++p == pe )
2414
2675
  goto _test_eof80;
2415
2676
  case 80:
2416
- #line 2417 "unicorn_http.c"
2677
+ #line 2678 "unicorn_http.c"
2417
2678
  switch( (*p) ) {
2418
- case 13: goto tr115;
2419
- case 32: goto tr50;
2420
- case 35: goto tr116;
2421
- case 37: goto tr117;
2679
+ case 10: goto tr124;
2680
+ case 13: goto tr125;
2681
+ case 32: goto tr55;
2682
+ case 35: goto tr126;
2683
+ case 37: goto tr127;
2422
2684
  case 127: goto st0;
2423
2685
  }
2424
2686
  if ( 0 <= (*p) && (*p) <= 31 )
2425
2687
  goto st0;
2426
- goto tr114;
2427
- tr114:
2688
+ goto tr123;
2689
+ tr123:
2428
2690
  #line 322 "unicorn_http.rl"
2429
2691
  {MARK(start.query, p); }
2430
2692
  goto st81;
@@ -2432,18 +2694,19 @@ st81:
2432
2694
  if ( ++p == pe )
2433
2695
  goto _test_eof81;
2434
2696
  case 81:
2435
- #line 2436 "unicorn_http.c"
2697
+ #line 2698 "unicorn_http.c"
2436
2698
  switch( (*p) ) {
2437
- case 13: goto tr119;
2438
- case 32: goto tr54;
2439
- case 35: goto tr120;
2699
+ case 10: goto tr129;
2700
+ case 13: goto tr130;
2701
+ case 32: goto tr59;
2702
+ case 35: goto tr131;
2440
2703
  case 37: goto st82;
2441
2704
  case 127: goto st0;
2442
2705
  }
2443
2706
  if ( 0 <= (*p) && (*p) <= 31 )
2444
2707
  goto st0;
2445
2708
  goto st81;
2446
- tr117:
2709
+ tr127:
2447
2710
  #line 322 "unicorn_http.rl"
2448
2711
  {MARK(start.query, p); }
2449
2712
  goto st82;
@@ -2451,7 +2714,7 @@ st82:
2451
2714
  if ( ++p == pe )
2452
2715
  goto _test_eof82;
2453
2716
  case 82:
2454
- #line 2455 "unicorn_http.c"
2717
+ #line 2718 "unicorn_http.c"
2455
2718
  if ( (*p) < 65 ) {
2456
2719
  if ( 48 <= (*p) && (*p) <= 57 )
2457
2720
  goto st83;
@@ -2474,7 +2737,7 @@ case 83:
2474
2737
  } else
2475
2738
  goto st81;
2476
2739
  goto st0;
2477
- tr98:
2740
+ tr103:
2478
2741
  #line 289 "unicorn_http.rl"
2479
2742
  {MARK(mark, p); }
2480
2743
  #line 293 "unicorn_http.rl"
@@ -2484,13 +2747,13 @@ st84:
2484
2747
  if ( ++p == pe )
2485
2748
  goto _test_eof84;
2486
2749
  case 84:
2487
- #line 2488 "unicorn_http.c"
2750
+ #line 2751 "unicorn_http.c"
2488
2751
  switch( (*p) ) {
2489
- case 84: goto tr123;
2490
- case 116: goto tr123;
2752
+ case 84: goto tr134;
2753
+ case 116: goto tr134;
2491
2754
  }
2492
2755
  goto st0;
2493
- tr123:
2756
+ tr134:
2494
2757
  #line 293 "unicorn_http.rl"
2495
2758
  { downcase_char(deconst(p)); }
2496
2759
  goto st85;
@@ -2498,13 +2761,13 @@ st85:
2498
2761
  if ( ++p == pe )
2499
2762
  goto _test_eof85;
2500
2763
  case 85:
2501
- #line 2502 "unicorn_http.c"
2764
+ #line 2765 "unicorn_http.c"
2502
2765
  switch( (*p) ) {
2503
- case 84: goto tr124;
2504
- case 116: goto tr124;
2766
+ case 84: goto tr135;
2767
+ case 116: goto tr135;
2505
2768
  }
2506
2769
  goto st0;
2507
- tr124:
2770
+ tr135:
2508
2771
  #line 293 "unicorn_http.rl"
2509
2772
  { downcase_char(deconst(p)); }
2510
2773
  goto st86;
@@ -2512,13 +2775,13 @@ st86:
2512
2775
  if ( ++p == pe )
2513
2776
  goto _test_eof86;
2514
2777
  case 86:
2515
- #line 2516 "unicorn_http.c"
2778
+ #line 2779 "unicorn_http.c"
2516
2779
  switch( (*p) ) {
2517
- case 80: goto tr125;
2518
- case 112: goto tr125;
2780
+ case 80: goto tr136;
2781
+ case 112: goto tr136;
2519
2782
  }
2520
2783
  goto st0;
2521
- tr125:
2784
+ tr136:
2522
2785
  #line 293 "unicorn_http.rl"
2523
2786
  { downcase_char(deconst(p)); }
2524
2787
  goto st87;
@@ -2526,14 +2789,14 @@ st87:
2526
2789
  if ( ++p == pe )
2527
2790
  goto _test_eof87;
2528
2791
  case 87:
2529
- #line 2530 "unicorn_http.c"
2792
+ #line 2793 "unicorn_http.c"
2530
2793
  switch( (*p) ) {
2531
- case 58: goto tr126;
2532
- case 83: goto tr127;
2533
- case 115: goto tr127;
2794
+ case 58: goto tr137;
2795
+ case 83: goto tr138;
2796
+ case 115: goto tr138;
2534
2797
  }
2535
2798
  goto st0;
2536
- tr126:
2799
+ tr137:
2537
2800
  #line 299 "unicorn_http.rl"
2538
2801
  {
2539
2802
  rb_hash_aset(hp->env, g_rack_url_scheme, STR_NEW(mark, p));
@@ -2543,7 +2806,7 @@ st88:
2543
2806
  if ( ++p == pe )
2544
2807
  goto _test_eof88;
2545
2808
  case 88:
2546
- #line 2547 "unicorn_http.c"
2809
+ #line 2810 "unicorn_http.c"
2547
2810
  if ( (*p) == 47 )
2548
2811
  goto st89;
2549
2812
  goto st0;
@@ -2562,8 +2825,8 @@ case 90:
2562
2825
  case 37: goto st92;
2563
2826
  case 47: goto st0;
2564
2827
  case 60: goto st0;
2565
- case 91: goto tr133;
2566
- case 95: goto tr132;
2828
+ case 91: goto tr144;
2829
+ case 95: goto tr143;
2567
2830
  case 127: goto st0;
2568
2831
  }
2569
2832
  if ( (*p) < 45 ) {
@@ -2578,11 +2841,11 @@ case 90:
2578
2841
  goto st0;
2579
2842
  } else if ( (*p) > 90 ) {
2580
2843
  if ( 97 <= (*p) && (*p) <= 122 )
2581
- goto tr132;
2844
+ goto tr143;
2582
2845
  } else
2583
- goto tr132;
2846
+ goto tr143;
2584
2847
  } else
2585
- goto tr132;
2848
+ goto tr143;
2586
2849
  goto st91;
2587
2850
  st91:
2588
2851
  if ( ++p == pe )
@@ -2630,7 +2893,7 @@ case 93:
2630
2893
  } else
2631
2894
  goto st91;
2632
2895
  goto st0;
2633
- tr132:
2896
+ tr143:
2634
2897
  #line 289 "unicorn_http.rl"
2635
2898
  {MARK(mark, p); }
2636
2899
  goto st94;
@@ -2638,10 +2901,10 @@ st94:
2638
2901
  if ( ++p == pe )
2639
2902
  goto _test_eof94;
2640
2903
  case 94:
2641
- #line 2642 "unicorn_http.c"
2904
+ #line 2905 "unicorn_http.c"
2642
2905
  switch( (*p) ) {
2643
2906
  case 37: goto st92;
2644
- case 47: goto tr136;
2907
+ case 47: goto tr147;
2645
2908
  case 58: goto st95;
2646
2909
  case 60: goto st0;
2647
2910
  case 64: goto st90;
@@ -2672,7 +2935,7 @@ st95:
2672
2935
  case 95:
2673
2936
  switch( (*p) ) {
2674
2937
  case 37: goto st92;
2675
- case 47: goto tr136;
2938
+ case 47: goto tr147;
2676
2939
  case 60: goto st0;
2677
2940
  case 64: goto st90;
2678
2941
  case 127: goto st0;
@@ -2689,7 +2952,7 @@ case 95:
2689
2952
  } else
2690
2953
  goto st0;
2691
2954
  goto st91;
2692
- tr133:
2955
+ tr144:
2693
2956
  #line 289 "unicorn_http.rl"
2694
2957
  {MARK(mark, p); }
2695
2958
  goto st96;
@@ -2697,7 +2960,7 @@ st96:
2697
2960
  if ( ++p == pe )
2698
2961
  goto _test_eof96;
2699
2962
  case 96:
2700
- #line 2701 "unicorn_http.c"
2963
+ #line 2964 "unicorn_http.c"
2701
2964
  switch( (*p) ) {
2702
2965
  case 37: goto st92;
2703
2966
  case 47: goto st0;
@@ -2759,7 +3022,7 @@ st98:
2759
3022
  case 98:
2760
3023
  switch( (*p) ) {
2761
3024
  case 37: goto st92;
2762
- case 47: goto tr136;
3025
+ case 47: goto tr147;
2763
3026
  case 58: goto st95;
2764
3027
  case 60: goto st0;
2765
3028
  case 64: goto st90;
@@ -2774,7 +3037,7 @@ case 98:
2774
3037
  } else
2775
3038
  goto st0;
2776
3039
  goto st91;
2777
- tr127:
3040
+ tr138:
2778
3041
  #line 293 "unicorn_http.rl"
2779
3042
  { downcase_char(deconst(p)); }
2780
3043
  goto st99;
@@ -2782,26 +3045,26 @@ st99:
2782
3045
  if ( ++p == pe )
2783
3046
  goto _test_eof99;
2784
3047
  case 99:
2785
- #line 2786 "unicorn_http.c"
3048
+ #line 3049 "unicorn_http.c"
2786
3049
  if ( (*p) == 58 )
2787
- goto tr126;
3050
+ goto tr137;
2788
3051
  goto st0;
2789
3052
  st100:
2790
3053
  if ( ++p == pe )
2791
3054
  goto _test_eof100;
2792
3055
  case 100:
2793
3056
  if ( (*p) == 48 )
2794
- goto tr140;
3057
+ goto tr151;
2795
3058
  if ( (*p) < 65 ) {
2796
3059
  if ( 49 <= (*p) && (*p) <= 57 )
2797
- goto tr141;
3060
+ goto tr152;
2798
3061
  } else if ( (*p) > 70 ) {
2799
3062
  if ( 97 <= (*p) && (*p) <= 102 )
2800
- goto tr141;
3063
+ goto tr152;
2801
3064
  } else
2802
- goto tr141;
3065
+ goto tr152;
2803
3066
  goto st0;
2804
- tr140:
3067
+ tr151:
2805
3068
  #line 338 "unicorn_http.rl"
2806
3069
  {
2807
3070
  hp->len.chunk = step_incr(hp->len.chunk, (*p), 16);
@@ -2813,29 +3076,23 @@ st101:
2813
3076
  if ( ++p == pe )
2814
3077
  goto _test_eof101;
2815
3078
  case 101:
2816
- #line 2817 "unicorn_http.c"
3079
+ #line 3080 "unicorn_http.c"
2817
3080
  switch( (*p) ) {
3081
+ case 10: goto tr153;
2818
3082
  case 13: goto st102;
2819
- case 48: goto tr140;
3083
+ case 48: goto tr151;
2820
3084
  case 59: goto st111;
2821
3085
  }
2822
3086
  if ( (*p) < 65 ) {
2823
3087
  if ( 49 <= (*p) && (*p) <= 57 )
2824
- goto tr141;
3088
+ goto tr152;
2825
3089
  } else if ( (*p) > 70 ) {
2826
3090
  if ( 97 <= (*p) && (*p) <= 102 )
2827
- goto tr141;
3091
+ goto tr152;
2828
3092
  } else
2829
- goto tr141;
2830
- goto st0;
2831
- st102:
2832
- if ( ++p == pe )
2833
- goto _test_eof102;
2834
- case 102:
2835
- if ( (*p) == 10 )
2836
- goto tr144;
3093
+ goto tr152;
2837
3094
  goto st0;
2838
- tr144:
3095
+ tr153:
2839
3096
  #line 367 "unicorn_http.rl"
2840
3097
  {
2841
3098
  HP_FL_SET(hp, INTRAILER);
@@ -2849,9 +3106,16 @@ st123:
2849
3106
  if ( ++p == pe )
2850
3107
  goto _test_eof123;
2851
3108
  case 123:
2852
- #line 2853 "unicorn_http.c"
3109
+ #line 3110 "unicorn_http.c"
3110
+ goto st0;
3111
+ st102:
3112
+ if ( ++p == pe )
3113
+ goto _test_eof102;
3114
+ case 102:
3115
+ if ( (*p) == 10 )
3116
+ goto tr153;
2853
3117
  goto st0;
2854
- tr141:
3118
+ tr152:
2855
3119
  #line 338 "unicorn_http.rl"
2856
3120
  {
2857
3121
  hp->len.chunk = step_incr(hp->len.chunk, (*p), 16);
@@ -2863,33 +3127,27 @@ st103:
2863
3127
  if ( ++p == pe )
2864
3128
  goto _test_eof103;
2865
3129
  case 103:
2866
- #line 2867 "unicorn_http.c"
3130
+ #line 3131 "unicorn_http.c"
2867
3131
  switch( (*p) ) {
2868
- case 13: goto st104;
3132
+ case 10: goto st104;
3133
+ case 13: goto st107;
2869
3134
  case 59: goto st108;
2870
3135
  }
2871
3136
  if ( (*p) < 65 ) {
2872
3137
  if ( 48 <= (*p) && (*p) <= 57 )
2873
- goto tr141;
3138
+ goto tr152;
2874
3139
  } else if ( (*p) > 70 ) {
2875
3140
  if ( 97 <= (*p) && (*p) <= 102 )
2876
- goto tr141;
3141
+ goto tr152;
2877
3142
  } else
2878
- goto tr141;
3143
+ goto tr152;
2879
3144
  goto st0;
2880
3145
  st104:
2881
3146
  if ( ++p == pe )
2882
3147
  goto _test_eof104;
2883
3148
  case 104:
2884
- if ( (*p) == 10 )
2885
- goto st105;
2886
- goto st0;
2887
- st105:
2888
- if ( ++p == pe )
2889
- goto _test_eof105;
2890
- case 105:
2891
- goto tr148;
2892
- tr148:
3149
+ goto tr159;
3150
+ tr159:
2893
3151
  #line 375 "unicorn_http.rl"
2894
3152
  {
2895
3153
  skip_chunk_data_hack: {
@@ -2904,31 +3162,41 @@ tr148:
2904
3162
  goto post_exec;
2905
3163
  } else {
2906
3164
  p--;
2907
- {goto st106;}
3165
+ {goto st105;}
2908
3166
  }
2909
3167
  }}
2910
- goto st106;
3168
+ goto st105;
3169
+ st105:
3170
+ if ( ++p == pe )
3171
+ goto _test_eof105;
3172
+ case 105:
3173
+ #line 3174 "unicorn_http.c"
3174
+ switch( (*p) ) {
3175
+ case 10: goto st100;
3176
+ case 13: goto st106;
3177
+ }
3178
+ goto st0;
2911
3179
  st106:
2912
3180
  if ( ++p == pe )
2913
3181
  goto _test_eof106;
2914
3182
  case 106:
2915
- #line 2916 "unicorn_http.c"
2916
- if ( (*p) == 13 )
2917
- goto st107;
3183
+ if ( (*p) == 10 )
3184
+ goto st100;
2918
3185
  goto st0;
2919
3186
  st107:
2920
3187
  if ( ++p == pe )
2921
3188
  goto _test_eof107;
2922
3189
  case 107:
2923
3190
  if ( (*p) == 10 )
2924
- goto st100;
3191
+ goto st104;
2925
3192
  goto st0;
2926
3193
  st108:
2927
3194
  if ( ++p == pe )
2928
3195
  goto _test_eof108;
2929
3196
  case 108:
2930
3197
  switch( (*p) ) {
2931
- case 13: goto st104;
3198
+ case 10: goto st104;
3199
+ case 13: goto st107;
2932
3200
  case 32: goto st108;
2933
3201
  case 33: goto st109;
2934
3202
  case 59: goto st108;
@@ -2959,7 +3227,8 @@ st109:
2959
3227
  goto _test_eof109;
2960
3228
  case 109:
2961
3229
  switch( (*p) ) {
2962
- case 13: goto st104;
3230
+ case 10: goto st104;
3231
+ case 13: goto st107;
2963
3232
  case 33: goto st109;
2964
3233
  case 59: goto st108;
2965
3234
  case 61: goto st110;
@@ -2989,7 +3258,8 @@ st110:
2989
3258
  goto _test_eof110;
2990
3259
  case 110:
2991
3260
  switch( (*p) ) {
2992
- case 13: goto st104;
3261
+ case 10: goto st104;
3262
+ case 13: goto st107;
2993
3263
  case 33: goto st110;
2994
3264
  case 59: goto st108;
2995
3265
  case 124: goto st110;
@@ -3018,6 +3288,7 @@ st111:
3018
3288
  goto _test_eof111;
3019
3289
  case 111:
3020
3290
  switch( (*p) ) {
3291
+ case 10: goto tr153;
3021
3292
  case 13: goto st102;
3022
3293
  case 32: goto st111;
3023
3294
  case 33: goto st112;
@@ -3049,6 +3320,7 @@ st112:
3049
3320
  goto _test_eof112;
3050
3321
  case 112:
3051
3322
  switch( (*p) ) {
3323
+ case 10: goto tr153;
3052
3324
  case 13: goto st102;
3053
3325
  case 33: goto st112;
3054
3326
  case 59: goto st111;
@@ -3079,6 +3351,7 @@ st113:
3079
3351
  goto _test_eof113;
3080
3352
  case 113:
3081
3353
  switch( (*p) ) {
3354
+ case 10: goto tr153;
3082
3355
  case 13: goto st102;
3083
3356
  case 33: goto st113;
3084
3357
  case 59: goto st111;
@@ -3103,37 +3376,59 @@ case 113:
3103
3376
  } else
3104
3377
  goto st113;
3105
3378
  goto st0;
3379
+ tr172:
3380
+ #line 295 "unicorn_http.rl"
3381
+ { MARK(mark, p); }
3382
+ #line 297 "unicorn_http.rl"
3383
+ { write_cont_value(hp, buffer, p); }
3384
+ goto st114;
3385
+ tr175:
3386
+ #line 297 "unicorn_http.rl"
3387
+ { write_cont_value(hp, buffer, p); }
3388
+ goto st114;
3389
+ tr182:
3390
+ #line 295 "unicorn_http.rl"
3391
+ { MARK(mark, p); }
3392
+ #line 296 "unicorn_http.rl"
3393
+ { write_value(hp, buffer, p); }
3394
+ goto st114;
3395
+ tr185:
3396
+ #line 296 "unicorn_http.rl"
3397
+ { write_value(hp, buffer, p); }
3398
+ goto st114;
3106
3399
  st114:
3107
3400
  if ( ++p == pe )
3108
3401
  goto _test_eof114;
3109
3402
  case 114:
3403
+ #line 3404 "unicorn_http.c"
3110
3404
  switch( (*p) ) {
3111
3405
  case 9: goto st115;
3406
+ case 10: goto tr167;
3112
3407
  case 13: goto st118;
3113
3408
  case 32: goto st115;
3114
- case 33: goto tr157;
3115
- case 124: goto tr157;
3116
- case 126: goto tr157;
3409
+ case 33: goto tr169;
3410
+ case 124: goto tr169;
3411
+ case 126: goto tr169;
3117
3412
  }
3118
3413
  if ( (*p) < 45 ) {
3119
3414
  if ( (*p) > 39 ) {
3120
3415
  if ( 42 <= (*p) && (*p) <= 43 )
3121
- goto tr157;
3416
+ goto tr169;
3122
3417
  } else if ( (*p) >= 35 )
3123
- goto tr157;
3418
+ goto tr169;
3124
3419
  } else if ( (*p) > 46 ) {
3125
3420
  if ( (*p) < 65 ) {
3126
3421
  if ( 48 <= (*p) && (*p) <= 57 )
3127
- goto tr157;
3422
+ goto tr169;
3128
3423
  } else if ( (*p) > 90 ) {
3129
3424
  if ( 94 <= (*p) && (*p) <= 122 )
3130
- goto tr157;
3425
+ goto tr169;
3131
3426
  } else
3132
- goto tr157;
3427
+ goto tr169;
3133
3428
  } else
3134
- goto tr157;
3429
+ goto tr169;
3135
3430
  goto st0;
3136
- tr159:
3431
+ tr171:
3137
3432
  #line 295 "unicorn_http.rl"
3138
3433
  { MARK(mark, p); }
3139
3434
  goto st115;
@@ -3141,17 +3436,18 @@ st115:
3141
3436
  if ( ++p == pe )
3142
3437
  goto _test_eof115;
3143
3438
  case 115:
3144
- #line 3145 "unicorn_http.c"
3439
+ #line 3440 "unicorn_http.c"
3145
3440
  switch( (*p) ) {
3146
- case 9: goto tr159;
3147
- case 13: goto tr160;
3148
- case 32: goto tr159;
3441
+ case 9: goto tr171;
3442
+ case 10: goto tr172;
3443
+ case 13: goto tr173;
3444
+ case 32: goto tr171;
3149
3445
  case 127: goto st0;
3150
3446
  }
3151
3447
  if ( 0 <= (*p) && (*p) <= 31 )
3152
3448
  goto st0;
3153
- goto tr158;
3154
- tr158:
3449
+ goto tr170;
3450
+ tr170:
3155
3451
  #line 295 "unicorn_http.rl"
3156
3452
  { MARK(mark, p); }
3157
3453
  goto st116;
@@ -3159,34 +3455,35 @@ st116:
3159
3455
  if ( ++p == pe )
3160
3456
  goto _test_eof116;
3161
3457
  case 116:
3162
- #line 3163 "unicorn_http.c"
3458
+ #line 3459 "unicorn_http.c"
3163
3459
  switch( (*p) ) {
3164
- case 13: goto tr162;
3460
+ case 10: goto tr175;
3461
+ case 13: goto tr176;
3165
3462
  case 127: goto st0;
3166
3463
  }
3167
3464
  if ( (*p) > 8 ) {
3168
- if ( 10 <= (*p) && (*p) <= 31 )
3465
+ if ( 11 <= (*p) && (*p) <= 31 )
3169
3466
  goto st0;
3170
3467
  } else if ( (*p) >= 0 )
3171
3468
  goto st0;
3172
3469
  goto st116;
3173
- tr160:
3470
+ tr173:
3174
3471
  #line 295 "unicorn_http.rl"
3175
3472
  { MARK(mark, p); }
3176
3473
  #line 297 "unicorn_http.rl"
3177
3474
  { write_cont_value(hp, buffer, p); }
3178
3475
  goto st117;
3179
- tr162:
3476
+ tr176:
3180
3477
  #line 297 "unicorn_http.rl"
3181
3478
  { write_cont_value(hp, buffer, p); }
3182
3479
  goto st117;
3183
- tr169:
3480
+ tr183:
3184
3481
  #line 295 "unicorn_http.rl"
3185
3482
  { MARK(mark, p); }
3186
3483
  #line 296 "unicorn_http.rl"
3187
3484
  { write_value(hp, buffer, p); }
3188
3485
  goto st117;
3189
- tr171:
3486
+ tr186:
3190
3487
  #line 296 "unicorn_http.rl"
3191
3488
  { write_value(hp, buffer, p); }
3192
3489
  goto st117;
@@ -3194,18 +3491,11 @@ st117:
3194
3491
  if ( ++p == pe )
3195
3492
  goto _test_eof117;
3196
3493
  case 117:
3197
- #line 3198 "unicorn_http.c"
3494
+ #line 3495 "unicorn_http.c"
3198
3495
  if ( (*p) == 10 )
3199
3496
  goto st114;
3200
3497
  goto st0;
3201
- st118:
3202
- if ( ++p == pe )
3203
- goto _test_eof118;
3204
- case 118:
3205
- if ( (*p) == 10 )
3206
- goto tr164;
3207
- goto st0;
3208
- tr164:
3498
+ tr167:
3209
3499
  #line 362 "unicorn_http.rl"
3210
3500
  {
3211
3501
  cs = http_parser_first_final;
@@ -3216,15 +3506,22 @@ st124:
3216
3506
  if ( ++p == pe )
3217
3507
  goto _test_eof124;
3218
3508
  case 124:
3219
- #line 3220 "unicorn_http.c"
3509
+ #line 3510 "unicorn_http.c"
3220
3510
  goto st0;
3221
- tr157:
3511
+ st118:
3512
+ if ( ++p == pe )
3513
+ goto _test_eof118;
3514
+ case 118:
3515
+ if ( (*p) == 10 )
3516
+ goto tr167;
3517
+ goto st0;
3518
+ tr169:
3222
3519
  #line 291 "unicorn_http.rl"
3223
3520
  { MARK(start.field, p); }
3224
3521
  #line 292 "unicorn_http.rl"
3225
3522
  { snake_upcase_char(deconst(p)); }
3226
3523
  goto st119;
3227
- tr165:
3524
+ tr178:
3228
3525
  #line 292 "unicorn_http.rl"
3229
3526
  { snake_upcase_char(deconst(p)); }
3230
3527
  goto st119;
@@ -3232,36 +3529,36 @@ st119:
3232
3529
  if ( ++p == pe )
3233
3530
  goto _test_eof119;
3234
3531
  case 119:
3235
- #line 3236 "unicorn_http.c"
3532
+ #line 3533 "unicorn_http.c"
3236
3533
  switch( (*p) ) {
3237
- case 33: goto tr165;
3238
- case 58: goto tr166;
3239
- case 124: goto tr165;
3240
- case 126: goto tr165;
3534
+ case 33: goto tr178;
3535
+ case 58: goto tr179;
3536
+ case 124: goto tr178;
3537
+ case 126: goto tr178;
3241
3538
  }
3242
3539
  if ( (*p) < 45 ) {
3243
3540
  if ( (*p) > 39 ) {
3244
3541
  if ( 42 <= (*p) && (*p) <= 43 )
3245
- goto tr165;
3542
+ goto tr178;
3246
3543
  } else if ( (*p) >= 35 )
3247
- goto tr165;
3544
+ goto tr178;
3248
3545
  } else if ( (*p) > 46 ) {
3249
3546
  if ( (*p) < 65 ) {
3250
3547
  if ( 48 <= (*p) && (*p) <= 57 )
3251
- goto tr165;
3548
+ goto tr178;
3252
3549
  } else if ( (*p) > 90 ) {
3253
3550
  if ( 94 <= (*p) && (*p) <= 122 )
3254
- goto tr165;
3551
+ goto tr178;
3255
3552
  } else
3256
- goto tr165;
3553
+ goto tr178;
3257
3554
  } else
3258
- goto tr165;
3555
+ goto tr178;
3259
3556
  goto st0;
3260
- tr168:
3557
+ tr181:
3261
3558
  #line 295 "unicorn_http.rl"
3262
3559
  { MARK(mark, p); }
3263
3560
  goto st120;
3264
- tr166:
3561
+ tr179:
3265
3562
  #line 294 "unicorn_http.rl"
3266
3563
  { hp->s.field_len = LEN(start.field, p); }
3267
3564
  goto st120;
@@ -3269,17 +3566,18 @@ st120:
3269
3566
  if ( ++p == pe )
3270
3567
  goto _test_eof120;
3271
3568
  case 120:
3272
- #line 3273 "unicorn_http.c"
3569
+ #line 3570 "unicorn_http.c"
3273
3570
  switch( (*p) ) {
3274
- case 9: goto tr168;
3275
- case 13: goto tr169;
3276
- case 32: goto tr168;
3571
+ case 9: goto tr181;
3572
+ case 10: goto tr182;
3573
+ case 13: goto tr183;
3574
+ case 32: goto tr181;
3277
3575
  case 127: goto st0;
3278
3576
  }
3279
3577
  if ( 0 <= (*p) && (*p) <= 31 )
3280
3578
  goto st0;
3281
- goto tr167;
3282
- tr167:
3579
+ goto tr180;
3580
+ tr180:
3283
3581
  #line 295 "unicorn_http.rl"
3284
3582
  { MARK(mark, p); }
3285
3583
  goto st121;
@@ -3287,13 +3585,14 @@ st121:
3287
3585
  if ( ++p == pe )
3288
3586
  goto _test_eof121;
3289
3587
  case 121:
3290
- #line 3291 "unicorn_http.c"
3588
+ #line 3589 "unicorn_http.c"
3291
3589
  switch( (*p) ) {
3292
- case 13: goto tr171;
3590
+ case 10: goto tr185;
3591
+ case 13: goto tr186;
3293
3592
  case 127: goto st0;
3294
3593
  }
3295
3594
  if ( (*p) > 8 ) {
3296
- if ( 10 <= (*p) && (*p) <= 31 )
3595
+ if ( 11 <= (*p) && (*p) <= 31 )
3297
3596
  goto st0;
3298
3597
  } else if ( (*p) >= 0 )
3299
3598
  goto st0;
@@ -3315,8 +3614,8 @@ case 121:
3315
3614
  _test_eof15: cs = 15; goto _test_eof;
3316
3615
  _test_eof16: cs = 16; goto _test_eof;
3317
3616
  _test_eof17: cs = 17; goto _test_eof;
3318
- _test_eof18: cs = 18; goto _test_eof;
3319
3617
  _test_eof122: cs = 122; goto _test_eof;
3618
+ _test_eof18: cs = 18; goto _test_eof;
3320
3619
  _test_eof19: cs = 19; goto _test_eof;
3321
3620
  _test_eof20: cs = 20; goto _test_eof;
3322
3621
  _test_eof21: cs = 21; goto _test_eof;
@@ -3400,8 +3699,8 @@ case 121:
3400
3699
  _test_eof99: cs = 99; goto _test_eof;
3401
3700
  _test_eof100: cs = 100; goto _test_eof;
3402
3701
  _test_eof101: cs = 101; goto _test_eof;
3403
- _test_eof102: cs = 102; goto _test_eof;
3404
3702
  _test_eof123: cs = 123; goto _test_eof;
3703
+ _test_eof102: cs = 102; goto _test_eof;
3405
3704
  _test_eof103: cs = 103; goto _test_eof;
3406
3705
  _test_eof104: cs = 104; goto _test_eof;
3407
3706
  _test_eof105: cs = 105; goto _test_eof;
@@ -3417,8 +3716,8 @@ case 121:
3417
3716
  _test_eof115: cs = 115; goto _test_eof;
3418
3717
  _test_eof116: cs = 116; goto _test_eof;
3419
3718
  _test_eof117: cs = 117; goto _test_eof;
3420
- _test_eof118: cs = 118; goto _test_eof;
3421
3719
  _test_eof124: cs = 124; goto _test_eof;
3720
+ _test_eof118: cs = 118; goto _test_eof;
3422
3721
  _test_eof119: cs = 119; goto _test_eof;
3423
3722
  _test_eof120: cs = 120; goto _test_eof;
3424
3723
  _test_eof121: cs = 121; goto _test_eof;