unicorn 5.3.1 → 5.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/.manifest +2 -0
- data/.olddoc.yml +1 -1
- data/Application_Timeouts +4 -4
- data/Documentation/unicorn.1.txt +1 -1
- data/Documentation/unicorn_rails.1.txt +6 -8
- data/GIT-VERSION-FILE +1 -1
- data/GIT-VERSION-GEN +1 -1
- data/GNUmakefile +6 -1
- data/ISSUES +10 -10
- data/LATEST +22 -102
- data/LICENSE +2 -2
- data/Links +9 -7
- data/NEWS +107 -0
- data/README +13 -6
- data/Sandbox +2 -2
- data/bin/unicorn +3 -1
- data/bin/unicorn_rails +2 -2
- data/examples/logrotate.conf +1 -1
- data/examples/nginx.conf +3 -2
- data/ext/unicorn_http/common_field_optimization.h +24 -6
- data/ext/unicorn_http/extconf.rb +30 -0
- data/ext/unicorn_http/global_variables.h +2 -2
- data/ext/unicorn_http/httpdate.c +2 -2
- data/ext/unicorn_http/unicorn_http.c +229 -219
- data/ext/unicorn_http/unicorn_http.rl +19 -9
- data/lib/unicorn/configurator.rb +13 -2
- data/lib/unicorn/http_request.rb +2 -2
- data/lib/unicorn/http_response.rb +3 -2
- data/lib/unicorn/http_server.rb +21 -23
- data/lib/unicorn/launcher.rb +1 -1
- data/lib/unicorn/socket_helper.rb +4 -3
- data/lib/unicorn/util.rb +3 -3
- data/lib/unicorn/version.rb +1 -1
- data/lib/unicorn/worker.rb +16 -2
- data/lib/unicorn.rb +26 -9
- data/man/man1/unicorn.1 +7 -5
- data/man/man1/unicorn_rails.1 +11 -11
- data/t/README +4 -4
- data/t/hijack.ru +12 -0
- data/t/t0200-rack-hijack.sh +22 -1
- data/t/t0301-no-default-middleware-ignored-in-config.sh +25 -0
- data/t/t0301.ru +13 -0
- data/test/exec/test_exec.rb +6 -7
- data/test/unit/test_ccc.rb +1 -1
- data/test/unit/test_droplet.rb +1 -1
- data/test/unit/test_http_parser.rb +16 -0
- data/test/unit/test_request.rb +10 -10
- data/test/unit/test_server.rb +5 -5
- data/test/unit/test_signals.rb +2 -2
- data/test/unit/test_socket_helper.rb +4 -4
- data/test/unit/test_util.rb +25 -0
- data/unicorn.gemspec +1 -1
- metadata +5 -4
@@ -15,7 +15,7 @@
|
|
15
15
|
#include "global_variables.h"
|
16
16
|
#include "c_util.h"
|
17
17
|
|
18
|
-
void init_unicorn_httpdate(
|
18
|
+
void init_unicorn_httpdate(void);
|
19
19
|
|
20
20
|
#define UH_FL_CHUNKED 0x1
|
21
21
|
#define UH_FL_HASBODY 0x2
|
@@ -28,6 +28,7 @@ void init_unicorn_httpdate(VALUE mark_ary);
|
|
28
28
|
#define UH_FL_HASHEADER 0x100
|
29
29
|
#define UH_FL_TO_CLEAR 0x200
|
30
30
|
#define UH_FL_RESSTART 0x400 /* for check_client_connection */
|
31
|
+
#define UH_FL_HIJACK 0x800
|
31
32
|
|
32
33
|
/* all of these flags need to be set for keepalive to be supported */
|
33
34
|
#define UH_FL_KEEPALIVE (UH_FL_KAVERSION | UH_FL_REQEOF | UH_FL_HASHEADER)
|
@@ -286,12 +287,12 @@ static void write_value(struct http_parser *hp,
|
|
286
287
|
/** Machine **/
|
287
288
|
|
288
289
|
|
289
|
-
#line
|
290
|
+
#line 394 "unicorn_http.rl"
|
290
291
|
|
291
292
|
|
292
293
|
/** Data **/
|
293
294
|
|
294
|
-
#line
|
295
|
+
#line 296 "unicorn_http.c"
|
295
296
|
static const int http_parser_start = 1;
|
296
297
|
static const int http_parser_first_final = 122;
|
297
298
|
static const int http_parser_error = 0;
|
@@ -302,7 +303,7 @@ static const int http_parser_en_Trailers = 114;
|
|
302
303
|
static const int http_parser_en_main = 1;
|
303
304
|
|
304
305
|
|
305
|
-
#line
|
306
|
+
#line 398 "unicorn_http.rl"
|
306
307
|
|
307
308
|
static void http_parser_init(struct http_parser *hp)
|
308
309
|
{
|
@@ -315,12 +316,12 @@ static void http_parser_init(struct http_parser *hp)
|
|
315
316
|
hp->len.content = 0;
|
316
317
|
hp->cont = Qfalse; /* zero on MRI, should be optimized away by above */
|
317
318
|
|
318
|
-
#line
|
319
|
+
#line 320 "unicorn_http.c"
|
319
320
|
{
|
320
321
|
cs = http_parser_start;
|
321
322
|
}
|
322
323
|
|
323
|
-
#line
|
324
|
+
#line 410 "unicorn_http.rl"
|
324
325
|
hp->cs = cs;
|
325
326
|
}
|
326
327
|
|
@@ -348,7 +349,7 @@ http_parser_execute(struct http_parser *hp, char *buffer, size_t len)
|
|
348
349
|
goto skip_chunk_data_hack;
|
349
350
|
}
|
350
351
|
|
351
|
-
#line
|
352
|
+
#line 353 "unicorn_http.c"
|
352
353
|
{
|
353
354
|
if ( p == pe )
|
354
355
|
goto _test_eof;
|
@@ -383,14 +384,14 @@ st0:
|
|
383
384
|
cs = 0;
|
384
385
|
goto _out;
|
385
386
|
tr0:
|
386
|
-
#line
|
387
|
+
#line 290 "unicorn_http.rl"
|
387
388
|
{MARK(mark, p); }
|
388
389
|
goto st2;
|
389
390
|
st2:
|
390
391
|
if ( ++p == pe )
|
391
392
|
goto _test_eof2;
|
392
393
|
case 2:
|
393
|
-
#line
|
394
|
+
#line 395 "unicorn_http.c"
|
394
395
|
switch( (*p) ) {
|
395
396
|
case 32: goto tr3;
|
396
397
|
case 33: goto st49;
|
@@ -416,14 +417,14 @@ case 2:
|
|
416
417
|
goto st49;
|
417
418
|
goto st0;
|
418
419
|
tr3:
|
419
|
-
#line
|
420
|
+
#line 299 "unicorn_http.rl"
|
420
421
|
{ request_method(hp, PTR_TO(mark), LEN(mark, p)); }
|
421
422
|
goto st3;
|
422
423
|
st3:
|
423
424
|
if ( ++p == pe )
|
424
425
|
goto _test_eof3;
|
425
426
|
case 3:
|
426
|
-
#line
|
427
|
+
#line 428 "unicorn_http.c"
|
427
428
|
switch( (*p) ) {
|
428
429
|
case 42: goto tr5;
|
429
430
|
case 47: goto tr6;
|
@@ -432,21 +433,21 @@ case 3:
|
|
432
433
|
}
|
433
434
|
goto st0;
|
434
435
|
tr5:
|
435
|
-
#line
|
436
|
+
#line 290 "unicorn_http.rl"
|
436
437
|
{MARK(mark, p); }
|
437
438
|
goto st4;
|
438
439
|
st4:
|
439
440
|
if ( ++p == pe )
|
440
441
|
goto _test_eof4;
|
441
442
|
case 4:
|
442
|
-
#line
|
443
|
+
#line 444 "unicorn_http.c"
|
443
444
|
switch( (*p) ) {
|
444
445
|
case 32: goto tr8;
|
445
446
|
case 35: goto tr9;
|
446
447
|
}
|
447
448
|
goto st0;
|
448
449
|
tr8:
|
449
|
-
#line
|
450
|
+
#line 304 "unicorn_http.rl"
|
450
451
|
{
|
451
452
|
VALUE str;
|
452
453
|
|
@@ -464,23 +465,23 @@ tr8:
|
|
464
465
|
}
|
465
466
|
goto st5;
|
466
467
|
tr42:
|
467
|
-
#line
|
468
|
+
#line 290 "unicorn_http.rl"
|
468
469
|
{MARK(mark, p); }
|
469
|
-
#line
|
470
|
+
#line 319 "unicorn_http.rl"
|
470
471
|
{
|
471
472
|
VALIDATE_MAX_URI_LENGTH(LEN(mark, p), FRAGMENT);
|
472
473
|
rb_hash_aset(hp->env, g_fragment, STR_NEW(mark, p));
|
473
474
|
}
|
474
475
|
goto st5;
|
475
476
|
tr45:
|
476
|
-
#line
|
477
|
+
#line 319 "unicorn_http.rl"
|
477
478
|
{
|
478
479
|
VALIDATE_MAX_URI_LENGTH(LEN(mark, p), FRAGMENT);
|
479
480
|
rb_hash_aset(hp->env, g_fragment, STR_NEW(mark, p));
|
480
481
|
}
|
481
482
|
goto st5;
|
482
483
|
tr49:
|
483
|
-
#line
|
484
|
+
#line 329 "unicorn_http.rl"
|
484
485
|
{
|
485
486
|
VALUE val;
|
486
487
|
|
@@ -491,7 +492,7 @@ tr49:
|
|
491
492
|
if (!STR_CSTR_EQ(val, "*"))
|
492
493
|
rb_hash_aset(hp->env, g_path_info, val);
|
493
494
|
}
|
494
|
-
#line
|
495
|
+
#line 304 "unicorn_http.rl"
|
495
496
|
{
|
496
497
|
VALUE str;
|
497
498
|
|
@@ -509,14 +510,14 @@ tr49:
|
|
509
510
|
}
|
510
511
|
goto st5;
|
511
512
|
tr55:
|
512
|
-
#line 322 "unicorn_http.rl"
|
513
|
-
{MARK(start.query, p); }
|
514
513
|
#line 323 "unicorn_http.rl"
|
514
|
+
{MARK(start.query, p); }
|
515
|
+
#line 324 "unicorn_http.rl"
|
515
516
|
{
|
516
517
|
VALIDATE_MAX_URI_LENGTH(LEN(start.query, p), QUERY_STRING);
|
517
518
|
rb_hash_aset(hp->env, g_query_string, STR_NEW(start.query, p));
|
518
519
|
}
|
519
|
-
#line
|
520
|
+
#line 304 "unicorn_http.rl"
|
520
521
|
{
|
521
522
|
VALUE str;
|
522
523
|
|
@@ -534,12 +535,12 @@ tr55:
|
|
534
535
|
}
|
535
536
|
goto st5;
|
536
537
|
tr59:
|
537
|
-
#line
|
538
|
+
#line 324 "unicorn_http.rl"
|
538
539
|
{
|
539
540
|
VALIDATE_MAX_URI_LENGTH(LEN(start.query, p), QUERY_STRING);
|
540
541
|
rb_hash_aset(hp->env, g_query_string, STR_NEW(start.query, p));
|
541
542
|
}
|
542
|
-
#line
|
543
|
+
#line 304 "unicorn_http.rl"
|
543
544
|
{
|
544
545
|
VALUE str;
|
545
546
|
|
@@ -560,19 +561,19 @@ st5:
|
|
560
561
|
if ( ++p == pe )
|
561
562
|
goto _test_eof5;
|
562
563
|
case 5:
|
563
|
-
#line
|
564
|
+
#line 565 "unicorn_http.c"
|
564
565
|
if ( (*p) == 72 )
|
565
566
|
goto tr10;
|
566
567
|
goto st0;
|
567
568
|
tr10:
|
568
|
-
#line
|
569
|
+
#line 290 "unicorn_http.rl"
|
569
570
|
{MARK(mark, p); }
|
570
571
|
goto st6;
|
571
572
|
st6:
|
572
573
|
if ( ++p == pe )
|
573
574
|
goto _test_eof6;
|
574
575
|
case 6:
|
575
|
-
#line
|
576
|
+
#line 577 "unicorn_http.c"
|
576
577
|
if ( (*p) == 84 )
|
577
578
|
goto st7;
|
578
579
|
goto st0;
|
@@ -632,34 +633,34 @@ case 13:
|
|
632
633
|
goto st13;
|
633
634
|
goto st0;
|
634
635
|
tr18:
|
635
|
-
#line
|
636
|
+
#line 328 "unicorn_http.rl"
|
636
637
|
{ http_version(hp, PTR_TO(mark), LEN(mark, p)); }
|
637
638
|
goto st14;
|
638
639
|
tr26:
|
639
|
-
#line
|
640
|
+
#line 296 "unicorn_http.rl"
|
640
641
|
{ MARK(mark, p); }
|
641
|
-
#line
|
642
|
+
#line 298 "unicorn_http.rl"
|
642
643
|
{ write_cont_value(hp, buffer, p); }
|
643
644
|
goto st14;
|
644
645
|
tr29:
|
645
|
-
#line
|
646
|
+
#line 298 "unicorn_http.rl"
|
646
647
|
{ write_cont_value(hp, buffer, p); }
|
647
648
|
goto st14;
|
648
649
|
tr36:
|
649
|
-
#line 295 "unicorn_http.rl"
|
650
|
-
{ MARK(mark, p); }
|
651
650
|
#line 296 "unicorn_http.rl"
|
651
|
+
{ MARK(mark, p); }
|
652
|
+
#line 297 "unicorn_http.rl"
|
652
653
|
{ write_value(hp, buffer, p); }
|
653
654
|
goto st14;
|
654
655
|
tr39:
|
655
|
-
#line
|
656
|
+
#line 297 "unicorn_http.rl"
|
656
657
|
{ write_value(hp, buffer, p); }
|
657
658
|
goto st14;
|
658
659
|
st14:
|
659
660
|
if ( ++p == pe )
|
660
661
|
goto _test_eof14;
|
661
662
|
case 14:
|
662
|
-
#line
|
663
|
+
#line 664 "unicorn_http.c"
|
663
664
|
switch( (*p) ) {
|
664
665
|
case 9: goto st15;
|
665
666
|
case 10: goto tr21;
|
@@ -688,14 +689,14 @@ case 14:
|
|
688
689
|
goto tr23;
|
689
690
|
goto st0;
|
690
691
|
tr25:
|
691
|
-
#line
|
692
|
+
#line 296 "unicorn_http.rl"
|
692
693
|
{ MARK(mark, p); }
|
693
694
|
goto st15;
|
694
695
|
st15:
|
695
696
|
if ( ++p == pe )
|
696
697
|
goto _test_eof15;
|
697
698
|
case 15:
|
698
|
-
#line
|
699
|
+
#line 700 "unicorn_http.c"
|
699
700
|
switch( (*p) ) {
|
700
701
|
case 9: goto tr25;
|
701
702
|
case 10: goto tr26;
|
@@ -707,14 +708,14 @@ case 15:
|
|
707
708
|
goto st0;
|
708
709
|
goto tr24;
|
709
710
|
tr24:
|
710
|
-
#line
|
711
|
+
#line 296 "unicorn_http.rl"
|
711
712
|
{ MARK(mark, p); }
|
712
713
|
goto st16;
|
713
714
|
st16:
|
714
715
|
if ( ++p == pe )
|
715
716
|
goto _test_eof16;
|
716
717
|
case 16:
|
717
|
-
#line
|
718
|
+
#line 719 "unicorn_http.c"
|
718
719
|
switch( (*p) ) {
|
719
720
|
case 10: goto tr29;
|
720
721
|
case 13: goto tr30;
|
@@ -727,39 +728,39 @@ case 16:
|
|
727
728
|
goto st0;
|
728
729
|
goto st16;
|
729
730
|
tr19:
|
730
|
-
#line
|
731
|
+
#line 328 "unicorn_http.rl"
|
731
732
|
{ http_version(hp, PTR_TO(mark), LEN(mark, p)); }
|
732
733
|
goto st17;
|
733
734
|
tr27:
|
734
|
-
#line
|
735
|
+
#line 296 "unicorn_http.rl"
|
735
736
|
{ MARK(mark, p); }
|
736
|
-
#line
|
737
|
+
#line 298 "unicorn_http.rl"
|
737
738
|
{ write_cont_value(hp, buffer, p); }
|
738
739
|
goto st17;
|
739
740
|
tr30:
|
740
|
-
#line
|
741
|
+
#line 298 "unicorn_http.rl"
|
741
742
|
{ write_cont_value(hp, buffer, p); }
|
742
743
|
goto st17;
|
743
744
|
tr37:
|
744
|
-
#line 295 "unicorn_http.rl"
|
745
|
-
{ MARK(mark, p); }
|
746
745
|
#line 296 "unicorn_http.rl"
|
746
|
+
{ MARK(mark, p); }
|
747
|
+
#line 297 "unicorn_http.rl"
|
747
748
|
{ write_value(hp, buffer, p); }
|
748
749
|
goto st17;
|
749
750
|
tr40:
|
750
|
-
#line
|
751
|
+
#line 297 "unicorn_http.rl"
|
751
752
|
{ write_value(hp, buffer, p); }
|
752
753
|
goto st17;
|
753
754
|
st17:
|
754
755
|
if ( ++p == pe )
|
755
756
|
goto _test_eof17;
|
756
757
|
case 17:
|
757
|
-
#line
|
758
|
+
#line 759 "unicorn_http.c"
|
758
759
|
if ( (*p) == 10 )
|
759
760
|
goto st14;
|
760
761
|
goto st0;
|
761
762
|
tr21:
|
762
|
-
#line
|
763
|
+
#line 344 "unicorn_http.rl"
|
763
764
|
{
|
764
765
|
finalize_header(hp);
|
765
766
|
|
@@ -780,7 +781,7 @@ tr21:
|
|
780
781
|
}
|
781
782
|
goto st122;
|
782
783
|
tr104:
|
783
|
-
#line
|
784
|
+
#line 304 "unicorn_http.rl"
|
784
785
|
{
|
785
786
|
VALUE str;
|
786
787
|
|
@@ -796,7 +797,7 @@ tr104:
|
|
796
797
|
rb_hash_aset(hp->env, g_request_path, str);
|
797
798
|
}
|
798
799
|
}
|
799
|
-
#line
|
800
|
+
#line 344 "unicorn_http.rl"
|
800
801
|
{
|
801
802
|
finalize_header(hp);
|
802
803
|
|
@@ -817,14 +818,14 @@ tr104:
|
|
817
818
|
}
|
818
819
|
goto st122;
|
819
820
|
tr108:
|
820
|
-
#line
|
821
|
+
#line 290 "unicorn_http.rl"
|
821
822
|
{MARK(mark, p); }
|
822
|
-
#line
|
823
|
+
#line 319 "unicorn_http.rl"
|
823
824
|
{
|
824
825
|
VALIDATE_MAX_URI_LENGTH(LEN(mark, p), FRAGMENT);
|
825
826
|
rb_hash_aset(hp->env, g_fragment, STR_NEW(mark, p));
|
826
827
|
}
|
827
|
-
#line
|
828
|
+
#line 344 "unicorn_http.rl"
|
828
829
|
{
|
829
830
|
finalize_header(hp);
|
830
831
|
|
@@ -845,12 +846,12 @@ tr108:
|
|
845
846
|
}
|
846
847
|
goto st122;
|
847
848
|
tr112:
|
848
|
-
#line
|
849
|
+
#line 319 "unicorn_http.rl"
|
849
850
|
{
|
850
851
|
VALIDATE_MAX_URI_LENGTH(LEN(mark, p), FRAGMENT);
|
851
852
|
rb_hash_aset(hp->env, g_fragment, STR_NEW(mark, p));
|
852
853
|
}
|
853
|
-
#line
|
854
|
+
#line 344 "unicorn_http.rl"
|
854
855
|
{
|
855
856
|
finalize_header(hp);
|
856
857
|
|
@@ -871,7 +872,7 @@ tr112:
|
|
871
872
|
}
|
872
873
|
goto st122;
|
873
874
|
tr117:
|
874
|
-
#line
|
875
|
+
#line 329 "unicorn_http.rl"
|
875
876
|
{
|
876
877
|
VALUE val;
|
877
878
|
|
@@ -882,7 +883,7 @@ tr117:
|
|
882
883
|
if (!STR_CSTR_EQ(val, "*"))
|
883
884
|
rb_hash_aset(hp->env, g_path_info, val);
|
884
885
|
}
|
885
|
-
#line
|
886
|
+
#line 304 "unicorn_http.rl"
|
886
887
|
{
|
887
888
|
VALUE str;
|
888
889
|
|
@@ -898,7 +899,7 @@ tr117:
|
|
898
899
|
rb_hash_aset(hp->env, g_request_path, str);
|
899
900
|
}
|
900
901
|
}
|
901
|
-
#line
|
902
|
+
#line 344 "unicorn_http.rl"
|
902
903
|
{
|
903
904
|
finalize_header(hp);
|
904
905
|
|
@@ -919,14 +920,14 @@ tr117:
|
|
919
920
|
}
|
920
921
|
goto st122;
|
921
922
|
tr124:
|
922
|
-
#line 322 "unicorn_http.rl"
|
923
|
-
{MARK(start.query, p); }
|
924
923
|
#line 323 "unicorn_http.rl"
|
924
|
+
{MARK(start.query, p); }
|
925
|
+
#line 324 "unicorn_http.rl"
|
925
926
|
{
|
926
927
|
VALIDATE_MAX_URI_LENGTH(LEN(start.query, p), QUERY_STRING);
|
927
928
|
rb_hash_aset(hp->env, g_query_string, STR_NEW(start.query, p));
|
928
929
|
}
|
929
|
-
#line
|
930
|
+
#line 304 "unicorn_http.rl"
|
930
931
|
{
|
931
932
|
VALUE str;
|
932
933
|
|
@@ -942,7 +943,7 @@ tr124:
|
|
942
943
|
rb_hash_aset(hp->env, g_request_path, str);
|
943
944
|
}
|
944
945
|
}
|
945
|
-
#line
|
946
|
+
#line 344 "unicorn_http.rl"
|
946
947
|
{
|
947
948
|
finalize_header(hp);
|
948
949
|
|
@@ -963,12 +964,12 @@ tr124:
|
|
963
964
|
}
|
964
965
|
goto st122;
|
965
966
|
tr129:
|
966
|
-
#line
|
967
|
+
#line 324 "unicorn_http.rl"
|
967
968
|
{
|
968
969
|
VALIDATE_MAX_URI_LENGTH(LEN(start.query, p), QUERY_STRING);
|
969
970
|
rb_hash_aset(hp->env, g_query_string, STR_NEW(start.query, p));
|
970
971
|
}
|
971
|
-
#line
|
972
|
+
#line 304 "unicorn_http.rl"
|
972
973
|
{
|
973
974
|
VALUE str;
|
974
975
|
|
@@ -984,7 +985,7 @@ tr129:
|
|
984
985
|
rb_hash_aset(hp->env, g_request_path, str);
|
985
986
|
}
|
986
987
|
}
|
987
|
-
#line
|
988
|
+
#line 344 "unicorn_http.rl"
|
988
989
|
{
|
989
990
|
finalize_header(hp);
|
990
991
|
|
@@ -1008,10 +1009,10 @@ st122:
|
|
1008
1009
|
if ( ++p == pe )
|
1009
1010
|
goto _test_eof122;
|
1010
1011
|
case 122:
|
1011
|
-
#line
|
1012
|
+
#line 1013 "unicorn_http.c"
|
1012
1013
|
goto st0;
|
1013
1014
|
tr105:
|
1014
|
-
#line
|
1015
|
+
#line 304 "unicorn_http.rl"
|
1015
1016
|
{
|
1016
1017
|
VALUE str;
|
1017
1018
|
|
@@ -1029,23 +1030,23 @@ tr105:
|
|
1029
1030
|
}
|
1030
1031
|
goto st18;
|
1031
1032
|
tr109:
|
1032
|
-
#line
|
1033
|
+
#line 290 "unicorn_http.rl"
|
1033
1034
|
{MARK(mark, p); }
|
1034
|
-
#line
|
1035
|
+
#line 319 "unicorn_http.rl"
|
1035
1036
|
{
|
1036
1037
|
VALIDATE_MAX_URI_LENGTH(LEN(mark, p), FRAGMENT);
|
1037
1038
|
rb_hash_aset(hp->env, g_fragment, STR_NEW(mark, p));
|
1038
1039
|
}
|
1039
1040
|
goto st18;
|
1040
1041
|
tr113:
|
1041
|
-
#line
|
1042
|
+
#line 319 "unicorn_http.rl"
|
1042
1043
|
{
|
1043
1044
|
VALIDATE_MAX_URI_LENGTH(LEN(mark, p), FRAGMENT);
|
1044
1045
|
rb_hash_aset(hp->env, g_fragment, STR_NEW(mark, p));
|
1045
1046
|
}
|
1046
1047
|
goto st18;
|
1047
1048
|
tr118:
|
1048
|
-
#line
|
1049
|
+
#line 329 "unicorn_http.rl"
|
1049
1050
|
{
|
1050
1051
|
VALUE val;
|
1051
1052
|
|
@@ -1056,7 +1057,7 @@ tr118:
|
|
1056
1057
|
if (!STR_CSTR_EQ(val, "*"))
|
1057
1058
|
rb_hash_aset(hp->env, g_path_info, val);
|
1058
1059
|
}
|
1059
|
-
#line
|
1060
|
+
#line 304 "unicorn_http.rl"
|
1060
1061
|
{
|
1061
1062
|
VALUE str;
|
1062
1063
|
|
@@ -1074,14 +1075,14 @@ tr118:
|
|
1074
1075
|
}
|
1075
1076
|
goto st18;
|
1076
1077
|
tr125:
|
1077
|
-
#line 322 "unicorn_http.rl"
|
1078
|
-
{MARK(start.query, p); }
|
1079
1078
|
#line 323 "unicorn_http.rl"
|
1079
|
+
{MARK(start.query, p); }
|
1080
|
+
#line 324 "unicorn_http.rl"
|
1080
1081
|
{
|
1081
1082
|
VALIDATE_MAX_URI_LENGTH(LEN(start.query, p), QUERY_STRING);
|
1082
1083
|
rb_hash_aset(hp->env, g_query_string, STR_NEW(start.query, p));
|
1083
1084
|
}
|
1084
|
-
#line
|
1085
|
+
#line 304 "unicorn_http.rl"
|
1085
1086
|
{
|
1086
1087
|
VALUE str;
|
1087
1088
|
|
@@ -1099,12 +1100,12 @@ tr125:
|
|
1099
1100
|
}
|
1100
1101
|
goto st18;
|
1101
1102
|
tr130:
|
1102
|
-
#line
|
1103
|
+
#line 324 "unicorn_http.rl"
|
1103
1104
|
{
|
1104
1105
|
VALIDATE_MAX_URI_LENGTH(LEN(start.query, p), QUERY_STRING);
|
1105
1106
|
rb_hash_aset(hp->env, g_query_string, STR_NEW(start.query, p));
|
1106
1107
|
}
|
1107
|
-
#line
|
1108
|
+
#line 304 "unicorn_http.rl"
|
1108
1109
|
{
|
1109
1110
|
VALUE str;
|
1110
1111
|
|
@@ -1125,25 +1126,25 @@ st18:
|
|
1125
1126
|
if ( ++p == pe )
|
1126
1127
|
goto _test_eof18;
|
1127
1128
|
case 18:
|
1128
|
-
#line
|
1129
|
+
#line 1130 "unicorn_http.c"
|
1129
1130
|
if ( (*p) == 10 )
|
1130
1131
|
goto tr21;
|
1131
1132
|
goto st0;
|
1132
1133
|
tr23:
|
1133
|
-
#line 291 "unicorn_http.rl"
|
1134
|
-
{ MARK(start.field, p); }
|
1135
1134
|
#line 292 "unicorn_http.rl"
|
1135
|
+
{ MARK(start.field, p); }
|
1136
|
+
#line 293 "unicorn_http.rl"
|
1136
1137
|
{ snake_upcase_char(deconst(p)); }
|
1137
1138
|
goto st19;
|
1138
1139
|
tr32:
|
1139
|
-
#line
|
1140
|
+
#line 293 "unicorn_http.rl"
|
1140
1141
|
{ snake_upcase_char(deconst(p)); }
|
1141
1142
|
goto st19;
|
1142
1143
|
st19:
|
1143
1144
|
if ( ++p == pe )
|
1144
1145
|
goto _test_eof19;
|
1145
1146
|
case 19:
|
1146
|
-
#line
|
1147
|
+
#line 1148 "unicorn_http.c"
|
1147
1148
|
switch( (*p) ) {
|
1148
1149
|
case 33: goto tr32;
|
1149
1150
|
case 58: goto tr33;
|
@@ -1169,18 +1170,18 @@ case 19:
|
|
1169
1170
|
goto tr32;
|
1170
1171
|
goto st0;
|
1171
1172
|
tr35:
|
1172
|
-
#line
|
1173
|
+
#line 296 "unicorn_http.rl"
|
1173
1174
|
{ MARK(mark, p); }
|
1174
1175
|
goto st20;
|
1175
1176
|
tr33:
|
1176
|
-
#line
|
1177
|
+
#line 295 "unicorn_http.rl"
|
1177
1178
|
{ hp->s.field_len = LEN(start.field, p); }
|
1178
1179
|
goto st20;
|
1179
1180
|
st20:
|
1180
1181
|
if ( ++p == pe )
|
1181
1182
|
goto _test_eof20;
|
1182
1183
|
case 20:
|
1183
|
-
#line
|
1184
|
+
#line 1185 "unicorn_http.c"
|
1184
1185
|
switch( (*p) ) {
|
1185
1186
|
case 9: goto tr35;
|
1186
1187
|
case 10: goto tr36;
|
@@ -1192,14 +1193,14 @@ case 20:
|
|
1192
1193
|
goto st0;
|
1193
1194
|
goto tr34;
|
1194
1195
|
tr34:
|
1195
|
-
#line
|
1196
|
+
#line 296 "unicorn_http.rl"
|
1196
1197
|
{ MARK(mark, p); }
|
1197
1198
|
goto st21;
|
1198
1199
|
st21:
|
1199
1200
|
if ( ++p == pe )
|
1200
1201
|
goto _test_eof21;
|
1201
1202
|
case 21:
|
1202
|
-
#line
|
1203
|
+
#line 1204 "unicorn_http.c"
|
1203
1204
|
switch( (*p) ) {
|
1204
1205
|
case 10: goto tr39;
|
1205
1206
|
case 13: goto tr40;
|
@@ -1212,7 +1213,7 @@ case 21:
|
|
1212
1213
|
goto st0;
|
1213
1214
|
goto st21;
|
1214
1215
|
tr9:
|
1215
|
-
#line
|
1216
|
+
#line 304 "unicorn_http.rl"
|
1216
1217
|
{
|
1217
1218
|
VALUE str;
|
1218
1219
|
|
@@ -1230,7 +1231,7 @@ tr9:
|
|
1230
1231
|
}
|
1231
1232
|
goto st22;
|
1232
1233
|
tr50:
|
1233
|
-
#line
|
1234
|
+
#line 329 "unicorn_http.rl"
|
1234
1235
|
{
|
1235
1236
|
VALUE val;
|
1236
1237
|
|
@@ -1241,7 +1242,7 @@ tr50:
|
|
1241
1242
|
if (!STR_CSTR_EQ(val, "*"))
|
1242
1243
|
rb_hash_aset(hp->env, g_path_info, val);
|
1243
1244
|
}
|
1244
|
-
#line
|
1245
|
+
#line 304 "unicorn_http.rl"
|
1245
1246
|
{
|
1246
1247
|
VALUE str;
|
1247
1248
|
|
@@ -1259,14 +1260,14 @@ tr50:
|
|
1259
1260
|
}
|
1260
1261
|
goto st22;
|
1261
1262
|
tr56:
|
1262
|
-
#line 322 "unicorn_http.rl"
|
1263
|
-
{MARK(start.query, p); }
|
1264
1263
|
#line 323 "unicorn_http.rl"
|
1264
|
+
{MARK(start.query, p); }
|
1265
|
+
#line 324 "unicorn_http.rl"
|
1265
1266
|
{
|
1266
1267
|
VALIDATE_MAX_URI_LENGTH(LEN(start.query, p), QUERY_STRING);
|
1267
1268
|
rb_hash_aset(hp->env, g_query_string, STR_NEW(start.query, p));
|
1268
1269
|
}
|
1269
|
-
#line
|
1270
|
+
#line 304 "unicorn_http.rl"
|
1270
1271
|
{
|
1271
1272
|
VALUE str;
|
1272
1273
|
|
@@ -1284,12 +1285,12 @@ tr56:
|
|
1284
1285
|
}
|
1285
1286
|
goto st22;
|
1286
1287
|
tr60:
|
1287
|
-
#line
|
1288
|
+
#line 324 "unicorn_http.rl"
|
1288
1289
|
{
|
1289
1290
|
VALIDATE_MAX_URI_LENGTH(LEN(start.query, p), QUERY_STRING);
|
1290
1291
|
rb_hash_aset(hp->env, g_query_string, STR_NEW(start.query, p));
|
1291
1292
|
}
|
1292
|
-
#line
|
1293
|
+
#line 304 "unicorn_http.rl"
|
1293
1294
|
{
|
1294
1295
|
VALUE str;
|
1295
1296
|
|
@@ -1310,7 +1311,7 @@ st22:
|
|
1310
1311
|
if ( ++p == pe )
|
1311
1312
|
goto _test_eof22;
|
1312
1313
|
case 22:
|
1313
|
-
#line
|
1314
|
+
#line 1315 "unicorn_http.c"
|
1314
1315
|
switch( (*p) ) {
|
1315
1316
|
case 32: goto tr42;
|
1316
1317
|
case 35: goto st0;
|
@@ -1321,14 +1322,14 @@ case 22:
|
|
1321
1322
|
goto st0;
|
1322
1323
|
goto tr41;
|
1323
1324
|
tr41:
|
1324
|
-
#line
|
1325
|
+
#line 290 "unicorn_http.rl"
|
1325
1326
|
{MARK(mark, p); }
|
1326
1327
|
goto st23;
|
1327
1328
|
st23:
|
1328
1329
|
if ( ++p == pe )
|
1329
1330
|
goto _test_eof23;
|
1330
1331
|
case 23:
|
1331
|
-
#line
|
1332
|
+
#line 1333 "unicorn_http.c"
|
1332
1333
|
switch( (*p) ) {
|
1333
1334
|
case 32: goto tr45;
|
1334
1335
|
case 35: goto st0;
|
@@ -1339,14 +1340,14 @@ case 23:
|
|
1339
1340
|
goto st0;
|
1340
1341
|
goto st23;
|
1341
1342
|
tr43:
|
1342
|
-
#line
|
1343
|
+
#line 290 "unicorn_http.rl"
|
1343
1344
|
{MARK(mark, p); }
|
1344
1345
|
goto st24;
|
1345
1346
|
st24:
|
1346
1347
|
if ( ++p == pe )
|
1347
1348
|
goto _test_eof24;
|
1348
1349
|
case 24:
|
1349
|
-
#line
|
1350
|
+
#line 1351 "unicorn_http.c"
|
1350
1351
|
if ( (*p) < 65 ) {
|
1351
1352
|
if ( 48 <= (*p) && (*p) <= 57 )
|
1352
1353
|
goto st25;
|
@@ -1370,20 +1371,20 @@ case 25:
|
|
1370
1371
|
goto st23;
|
1371
1372
|
goto st0;
|
1372
1373
|
tr6:
|
1373
|
-
#line
|
1374
|
+
#line 290 "unicorn_http.rl"
|
1374
1375
|
{MARK(mark, p); }
|
1375
1376
|
goto st26;
|
1376
1377
|
tr76:
|
1377
|
-
#line
|
1378
|
+
#line 303 "unicorn_http.rl"
|
1378
1379
|
{ rb_hash_aset(hp->env, g_http_host, STR_NEW(mark, p)); }
|
1379
|
-
#line
|
1380
|
+
#line 290 "unicorn_http.rl"
|
1380
1381
|
{MARK(mark, p); }
|
1381
1382
|
goto st26;
|
1382
1383
|
st26:
|
1383
1384
|
if ( ++p == pe )
|
1384
1385
|
goto _test_eof26;
|
1385
1386
|
case 26:
|
1386
|
-
#line
|
1387
|
+
#line 1388 "unicorn_http.c"
|
1387
1388
|
switch( (*p) ) {
|
1388
1389
|
case 32: goto tr49;
|
1389
1390
|
case 35: goto tr50;
|
@@ -1421,7 +1422,7 @@ case 28:
|
|
1421
1422
|
goto st26;
|
1422
1423
|
goto st0;
|
1423
1424
|
tr52:
|
1424
|
-
#line
|
1425
|
+
#line 329 "unicorn_http.rl"
|
1425
1426
|
{
|
1426
1427
|
VALUE val;
|
1427
1428
|
|
@@ -1437,7 +1438,7 @@ st29:
|
|
1437
1438
|
if ( ++p == pe )
|
1438
1439
|
goto _test_eof29;
|
1439
1440
|
case 29:
|
1440
|
-
#line
|
1441
|
+
#line 1442 "unicorn_http.c"
|
1441
1442
|
switch( (*p) ) {
|
1442
1443
|
case 32: goto tr55;
|
1443
1444
|
case 35: goto tr56;
|
@@ -1448,14 +1449,14 @@ case 29:
|
|
1448
1449
|
goto st0;
|
1449
1450
|
goto tr54;
|
1450
1451
|
tr54:
|
1451
|
-
#line
|
1452
|
+
#line 323 "unicorn_http.rl"
|
1452
1453
|
{MARK(start.query, p); }
|
1453
1454
|
goto st30;
|
1454
1455
|
st30:
|
1455
1456
|
if ( ++p == pe )
|
1456
1457
|
goto _test_eof30;
|
1457
1458
|
case 30:
|
1458
|
-
#line
|
1459
|
+
#line 1460 "unicorn_http.c"
|
1459
1460
|
switch( (*p) ) {
|
1460
1461
|
case 32: goto tr59;
|
1461
1462
|
case 35: goto tr60;
|
@@ -1466,14 +1467,14 @@ case 30:
|
|
1466
1467
|
goto st0;
|
1467
1468
|
goto st30;
|
1468
1469
|
tr57:
|
1469
|
-
#line
|
1470
|
+
#line 323 "unicorn_http.rl"
|
1470
1471
|
{MARK(start.query, p); }
|
1471
1472
|
goto st31;
|
1472
1473
|
st31:
|
1473
1474
|
if ( ++p == pe )
|
1474
1475
|
goto _test_eof31;
|
1475
1476
|
case 31:
|
1476
|
-
#line
|
1477
|
+
#line 1478 "unicorn_http.c"
|
1477
1478
|
if ( (*p) < 65 ) {
|
1478
1479
|
if ( 48 <= (*p) && (*p) <= 57 )
|
1479
1480
|
goto st32;
|
@@ -1497,58 +1498,58 @@ case 32:
|
|
1497
1498
|
goto st30;
|
1498
1499
|
goto st0;
|
1499
1500
|
tr7:
|
1500
|
-
#line
|
1501
|
+
#line 290 "unicorn_http.rl"
|
1501
1502
|
{MARK(mark, p); }
|
1502
|
-
#line
|
1503
|
+
#line 294 "unicorn_http.rl"
|
1503
1504
|
{ downcase_char(deconst(p)); }
|
1504
1505
|
goto st33;
|
1505
1506
|
st33:
|
1506
1507
|
if ( ++p == pe )
|
1507
1508
|
goto _test_eof33;
|
1508
1509
|
case 33:
|
1509
|
-
#line
|
1510
|
+
#line 1511 "unicorn_http.c"
|
1510
1511
|
switch( (*p) ) {
|
1511
1512
|
case 84: goto tr63;
|
1512
1513
|
case 116: goto tr63;
|
1513
1514
|
}
|
1514
1515
|
goto st0;
|
1515
1516
|
tr63:
|
1516
|
-
#line
|
1517
|
+
#line 294 "unicorn_http.rl"
|
1517
1518
|
{ downcase_char(deconst(p)); }
|
1518
1519
|
goto st34;
|
1519
1520
|
st34:
|
1520
1521
|
if ( ++p == pe )
|
1521
1522
|
goto _test_eof34;
|
1522
1523
|
case 34:
|
1523
|
-
#line
|
1524
|
+
#line 1525 "unicorn_http.c"
|
1524
1525
|
switch( (*p) ) {
|
1525
1526
|
case 84: goto tr64;
|
1526
1527
|
case 116: goto tr64;
|
1527
1528
|
}
|
1528
1529
|
goto st0;
|
1529
1530
|
tr64:
|
1530
|
-
#line
|
1531
|
+
#line 294 "unicorn_http.rl"
|
1531
1532
|
{ downcase_char(deconst(p)); }
|
1532
1533
|
goto st35;
|
1533
1534
|
st35:
|
1534
1535
|
if ( ++p == pe )
|
1535
1536
|
goto _test_eof35;
|
1536
1537
|
case 35:
|
1537
|
-
#line
|
1538
|
+
#line 1539 "unicorn_http.c"
|
1538
1539
|
switch( (*p) ) {
|
1539
1540
|
case 80: goto tr65;
|
1540
1541
|
case 112: goto tr65;
|
1541
1542
|
}
|
1542
1543
|
goto st0;
|
1543
1544
|
tr65:
|
1544
|
-
#line
|
1545
|
+
#line 294 "unicorn_http.rl"
|
1545
1546
|
{ downcase_char(deconst(p)); }
|
1546
1547
|
goto st36;
|
1547
1548
|
st36:
|
1548
1549
|
if ( ++p == pe )
|
1549
1550
|
goto _test_eof36;
|
1550
1551
|
case 36:
|
1551
|
-
#line
|
1552
|
+
#line 1553 "unicorn_http.c"
|
1552
1553
|
switch( (*p) ) {
|
1553
1554
|
case 58: goto tr66;
|
1554
1555
|
case 83: goto tr67;
|
@@ -1556,7 +1557,7 @@ case 36:
|
|
1556
1557
|
}
|
1557
1558
|
goto st0;
|
1558
1559
|
tr66:
|
1559
|
-
#line
|
1560
|
+
#line 300 "unicorn_http.rl"
|
1560
1561
|
{
|
1561
1562
|
rb_hash_aset(hp->env, g_rack_url_scheme, STR_NEW(mark, p));
|
1562
1563
|
}
|
@@ -1565,7 +1566,7 @@ st37:
|
|
1565
1566
|
if ( ++p == pe )
|
1566
1567
|
goto _test_eof37;
|
1567
1568
|
case 37:
|
1568
|
-
#line
|
1569
|
+
#line 1570 "unicorn_http.c"
|
1569
1570
|
if ( (*p) == 47 )
|
1570
1571
|
goto st38;
|
1571
1572
|
goto st0;
|
@@ -1653,14 +1654,14 @@ case 42:
|
|
1653
1654
|
goto st40;
|
1654
1655
|
goto st0;
|
1655
1656
|
tr72:
|
1656
|
-
#line
|
1657
|
+
#line 290 "unicorn_http.rl"
|
1657
1658
|
{MARK(mark, p); }
|
1658
1659
|
goto st43;
|
1659
1660
|
st43:
|
1660
1661
|
if ( ++p == pe )
|
1661
1662
|
goto _test_eof43;
|
1662
1663
|
case 43:
|
1663
|
-
#line
|
1664
|
+
#line 1665 "unicorn_http.c"
|
1664
1665
|
switch( (*p) ) {
|
1665
1666
|
case 37: goto st41;
|
1666
1667
|
case 47: goto tr76;
|
@@ -1712,14 +1713,14 @@ case 44:
|
|
1712
1713
|
goto st0;
|
1713
1714
|
goto st40;
|
1714
1715
|
tr73:
|
1715
|
-
#line
|
1716
|
+
#line 290 "unicorn_http.rl"
|
1716
1717
|
{MARK(mark, p); }
|
1717
1718
|
goto st45;
|
1718
1719
|
st45:
|
1719
1720
|
if ( ++p == pe )
|
1720
1721
|
goto _test_eof45;
|
1721
1722
|
case 45:
|
1722
|
-
#line
|
1723
|
+
#line 1724 "unicorn_http.c"
|
1723
1724
|
switch( (*p) ) {
|
1724
1725
|
case 37: goto st41;
|
1725
1726
|
case 47: goto st0;
|
@@ -1797,14 +1798,14 @@ case 47:
|
|
1797
1798
|
goto st0;
|
1798
1799
|
goto st40;
|
1799
1800
|
tr67:
|
1800
|
-
#line
|
1801
|
+
#line 294 "unicorn_http.rl"
|
1801
1802
|
{ downcase_char(deconst(p)); }
|
1802
1803
|
goto st48;
|
1803
1804
|
st48:
|
1804
1805
|
if ( ++p == pe )
|
1805
1806
|
goto _test_eof48;
|
1806
1807
|
case 48:
|
1807
|
-
#line
|
1808
|
+
#line 1809 "unicorn_http.c"
|
1808
1809
|
if ( (*p) == 58 )
|
1809
1810
|
goto tr66;
|
1810
1811
|
goto st0;
|
@@ -2320,14 +2321,14 @@ case 67:
|
|
2320
2321
|
goto tr3;
|
2321
2322
|
goto st0;
|
2322
2323
|
tr2:
|
2323
|
-
#line
|
2324
|
+
#line 290 "unicorn_http.rl"
|
2324
2325
|
{MARK(mark, p); }
|
2325
2326
|
goto st68;
|
2326
2327
|
st68:
|
2327
2328
|
if ( ++p == pe )
|
2328
2329
|
goto _test_eof68;
|
2329
2330
|
case 68:
|
2330
|
-
#line
|
2331
|
+
#line 2332 "unicorn_http.c"
|
2331
2332
|
switch( (*p) ) {
|
2332
2333
|
case 32: goto tr3;
|
2333
2334
|
case 33: goto st49;
|
@@ -2411,14 +2412,14 @@ case 70:
|
|
2411
2412
|
goto st51;
|
2412
2413
|
goto st0;
|
2413
2414
|
tr100:
|
2414
|
-
#line
|
2415
|
+
#line 299 "unicorn_http.rl"
|
2415
2416
|
{ request_method(hp, PTR_TO(mark), LEN(mark, p)); }
|
2416
2417
|
goto st71;
|
2417
2418
|
st71:
|
2418
2419
|
if ( ++p == pe )
|
2419
2420
|
goto _test_eof71;
|
2420
2421
|
case 71:
|
2421
|
-
#line
|
2422
|
+
#line 2423 "unicorn_http.c"
|
2422
2423
|
switch( (*p) ) {
|
2423
2424
|
case 42: goto tr101;
|
2424
2425
|
case 47: goto tr102;
|
@@ -2427,14 +2428,14 @@ case 71:
|
|
2427
2428
|
}
|
2428
2429
|
goto st0;
|
2429
2430
|
tr101:
|
2430
|
-
#line
|
2431
|
+
#line 290 "unicorn_http.rl"
|
2431
2432
|
{MARK(mark, p); }
|
2432
2433
|
goto st72;
|
2433
2434
|
st72:
|
2434
2435
|
if ( ++p == pe )
|
2435
2436
|
goto _test_eof72;
|
2436
2437
|
case 72:
|
2437
|
-
#line
|
2438
|
+
#line 2439 "unicorn_http.c"
|
2438
2439
|
switch( (*p) ) {
|
2439
2440
|
case 10: goto tr104;
|
2440
2441
|
case 13: goto tr105;
|
@@ -2443,7 +2444,7 @@ case 72:
|
|
2443
2444
|
}
|
2444
2445
|
goto st0;
|
2445
2446
|
tr106:
|
2446
|
-
#line
|
2447
|
+
#line 304 "unicorn_http.rl"
|
2447
2448
|
{
|
2448
2449
|
VALUE str;
|
2449
2450
|
|
@@ -2461,7 +2462,7 @@ tr106:
|
|
2461
2462
|
}
|
2462
2463
|
goto st73;
|
2463
2464
|
tr119:
|
2464
|
-
#line
|
2465
|
+
#line 329 "unicorn_http.rl"
|
2465
2466
|
{
|
2466
2467
|
VALUE val;
|
2467
2468
|
|
@@ -2472,7 +2473,7 @@ tr119:
|
|
2472
2473
|
if (!STR_CSTR_EQ(val, "*"))
|
2473
2474
|
rb_hash_aset(hp->env, g_path_info, val);
|
2474
2475
|
}
|
2475
|
-
#line
|
2476
|
+
#line 304 "unicorn_http.rl"
|
2476
2477
|
{
|
2477
2478
|
VALUE str;
|
2478
2479
|
|
@@ -2490,14 +2491,14 @@ tr119:
|
|
2490
2491
|
}
|
2491
2492
|
goto st73;
|
2492
2493
|
tr126:
|
2493
|
-
#line 322 "unicorn_http.rl"
|
2494
|
-
{MARK(start.query, p); }
|
2495
2494
|
#line 323 "unicorn_http.rl"
|
2495
|
+
{MARK(start.query, p); }
|
2496
|
+
#line 324 "unicorn_http.rl"
|
2496
2497
|
{
|
2497
2498
|
VALIDATE_MAX_URI_LENGTH(LEN(start.query, p), QUERY_STRING);
|
2498
2499
|
rb_hash_aset(hp->env, g_query_string, STR_NEW(start.query, p));
|
2499
2500
|
}
|
2500
|
-
#line
|
2501
|
+
#line 304 "unicorn_http.rl"
|
2501
2502
|
{
|
2502
2503
|
VALUE str;
|
2503
2504
|
|
@@ -2515,12 +2516,12 @@ tr126:
|
|
2515
2516
|
}
|
2516
2517
|
goto st73;
|
2517
2518
|
tr131:
|
2518
|
-
#line
|
2519
|
+
#line 324 "unicorn_http.rl"
|
2519
2520
|
{
|
2520
2521
|
VALIDATE_MAX_URI_LENGTH(LEN(start.query, p), QUERY_STRING);
|
2521
2522
|
rb_hash_aset(hp->env, g_query_string, STR_NEW(start.query, p));
|
2522
2523
|
}
|
2523
|
-
#line
|
2524
|
+
#line 304 "unicorn_http.rl"
|
2524
2525
|
{
|
2525
2526
|
VALUE str;
|
2526
2527
|
|
@@ -2541,7 +2542,7 @@ st73:
|
|
2541
2542
|
if ( ++p == pe )
|
2542
2543
|
goto _test_eof73;
|
2543
2544
|
case 73:
|
2544
|
-
#line
|
2545
|
+
#line 2546 "unicorn_http.c"
|
2545
2546
|
switch( (*p) ) {
|
2546
2547
|
case 10: goto tr108;
|
2547
2548
|
case 13: goto tr109;
|
@@ -2554,14 +2555,14 @@ case 73:
|
|
2554
2555
|
goto st0;
|
2555
2556
|
goto tr107;
|
2556
2557
|
tr107:
|
2557
|
-
#line
|
2558
|
+
#line 290 "unicorn_http.rl"
|
2558
2559
|
{MARK(mark, p); }
|
2559
2560
|
goto st74;
|
2560
2561
|
st74:
|
2561
2562
|
if ( ++p == pe )
|
2562
2563
|
goto _test_eof74;
|
2563
2564
|
case 74:
|
2564
|
-
#line
|
2565
|
+
#line 2566 "unicorn_http.c"
|
2565
2566
|
switch( (*p) ) {
|
2566
2567
|
case 10: goto tr112;
|
2567
2568
|
case 13: goto tr113;
|
@@ -2574,14 +2575,14 @@ case 74:
|
|
2574
2575
|
goto st0;
|
2575
2576
|
goto st74;
|
2576
2577
|
tr110:
|
2577
|
-
#line
|
2578
|
+
#line 290 "unicorn_http.rl"
|
2578
2579
|
{MARK(mark, p); }
|
2579
2580
|
goto st75;
|
2580
2581
|
st75:
|
2581
2582
|
if ( ++p == pe )
|
2582
2583
|
goto _test_eof75;
|
2583
2584
|
case 75:
|
2584
|
-
#line
|
2585
|
+
#line 2586 "unicorn_http.c"
|
2585
2586
|
if ( (*p) < 65 ) {
|
2586
2587
|
if ( 48 <= (*p) && (*p) <= 57 )
|
2587
2588
|
goto st76;
|
@@ -2605,20 +2606,20 @@ case 76:
|
|
2605
2606
|
goto st74;
|
2606
2607
|
goto st0;
|
2607
2608
|
tr102:
|
2608
|
-
#line
|
2609
|
+
#line 290 "unicorn_http.rl"
|
2609
2610
|
{MARK(mark, p); }
|
2610
2611
|
goto st77;
|
2611
2612
|
tr147:
|
2612
|
-
#line
|
2613
|
+
#line 303 "unicorn_http.rl"
|
2613
2614
|
{ rb_hash_aset(hp->env, g_http_host, STR_NEW(mark, p)); }
|
2614
|
-
#line
|
2615
|
+
#line 290 "unicorn_http.rl"
|
2615
2616
|
{MARK(mark, p); }
|
2616
2617
|
goto st77;
|
2617
2618
|
st77:
|
2618
2619
|
if ( ++p == pe )
|
2619
2620
|
goto _test_eof77;
|
2620
2621
|
case 77:
|
2621
|
-
#line
|
2622
|
+
#line 2623 "unicorn_http.c"
|
2622
2623
|
switch( (*p) ) {
|
2623
2624
|
case 10: goto tr117;
|
2624
2625
|
case 13: goto tr118;
|
@@ -2658,7 +2659,7 @@ case 79:
|
|
2658
2659
|
goto st77;
|
2659
2660
|
goto st0;
|
2660
2661
|
tr121:
|
2661
|
-
#line
|
2662
|
+
#line 329 "unicorn_http.rl"
|
2662
2663
|
{
|
2663
2664
|
VALUE val;
|
2664
2665
|
|
@@ -2674,7 +2675,7 @@ st80:
|
|
2674
2675
|
if ( ++p == pe )
|
2675
2676
|
goto _test_eof80;
|
2676
2677
|
case 80:
|
2677
|
-
#line
|
2678
|
+
#line 2679 "unicorn_http.c"
|
2678
2679
|
switch( (*p) ) {
|
2679
2680
|
case 10: goto tr124;
|
2680
2681
|
case 13: goto tr125;
|
@@ -2687,14 +2688,14 @@ case 80:
|
|
2687
2688
|
goto st0;
|
2688
2689
|
goto tr123;
|
2689
2690
|
tr123:
|
2690
|
-
#line
|
2691
|
+
#line 323 "unicorn_http.rl"
|
2691
2692
|
{MARK(start.query, p); }
|
2692
2693
|
goto st81;
|
2693
2694
|
st81:
|
2694
2695
|
if ( ++p == pe )
|
2695
2696
|
goto _test_eof81;
|
2696
2697
|
case 81:
|
2697
|
-
#line
|
2698
|
+
#line 2699 "unicorn_http.c"
|
2698
2699
|
switch( (*p) ) {
|
2699
2700
|
case 10: goto tr129;
|
2700
2701
|
case 13: goto tr130;
|
@@ -2707,14 +2708,14 @@ case 81:
|
|
2707
2708
|
goto st0;
|
2708
2709
|
goto st81;
|
2709
2710
|
tr127:
|
2710
|
-
#line
|
2711
|
+
#line 323 "unicorn_http.rl"
|
2711
2712
|
{MARK(start.query, p); }
|
2712
2713
|
goto st82;
|
2713
2714
|
st82:
|
2714
2715
|
if ( ++p == pe )
|
2715
2716
|
goto _test_eof82;
|
2716
2717
|
case 82:
|
2717
|
-
#line
|
2718
|
+
#line 2719 "unicorn_http.c"
|
2718
2719
|
if ( (*p) < 65 ) {
|
2719
2720
|
if ( 48 <= (*p) && (*p) <= 57 )
|
2720
2721
|
goto st83;
|
@@ -2738,58 +2739,58 @@ case 83:
|
|
2738
2739
|
goto st81;
|
2739
2740
|
goto st0;
|
2740
2741
|
tr103:
|
2741
|
-
#line
|
2742
|
+
#line 290 "unicorn_http.rl"
|
2742
2743
|
{MARK(mark, p); }
|
2743
|
-
#line
|
2744
|
+
#line 294 "unicorn_http.rl"
|
2744
2745
|
{ downcase_char(deconst(p)); }
|
2745
2746
|
goto st84;
|
2746
2747
|
st84:
|
2747
2748
|
if ( ++p == pe )
|
2748
2749
|
goto _test_eof84;
|
2749
2750
|
case 84:
|
2750
|
-
#line
|
2751
|
+
#line 2752 "unicorn_http.c"
|
2751
2752
|
switch( (*p) ) {
|
2752
2753
|
case 84: goto tr134;
|
2753
2754
|
case 116: goto tr134;
|
2754
2755
|
}
|
2755
2756
|
goto st0;
|
2756
2757
|
tr134:
|
2757
|
-
#line
|
2758
|
+
#line 294 "unicorn_http.rl"
|
2758
2759
|
{ downcase_char(deconst(p)); }
|
2759
2760
|
goto st85;
|
2760
2761
|
st85:
|
2761
2762
|
if ( ++p == pe )
|
2762
2763
|
goto _test_eof85;
|
2763
2764
|
case 85:
|
2764
|
-
#line
|
2765
|
+
#line 2766 "unicorn_http.c"
|
2765
2766
|
switch( (*p) ) {
|
2766
2767
|
case 84: goto tr135;
|
2767
2768
|
case 116: goto tr135;
|
2768
2769
|
}
|
2769
2770
|
goto st0;
|
2770
2771
|
tr135:
|
2771
|
-
#line
|
2772
|
+
#line 294 "unicorn_http.rl"
|
2772
2773
|
{ downcase_char(deconst(p)); }
|
2773
2774
|
goto st86;
|
2774
2775
|
st86:
|
2775
2776
|
if ( ++p == pe )
|
2776
2777
|
goto _test_eof86;
|
2777
2778
|
case 86:
|
2778
|
-
#line
|
2779
|
+
#line 2780 "unicorn_http.c"
|
2779
2780
|
switch( (*p) ) {
|
2780
2781
|
case 80: goto tr136;
|
2781
2782
|
case 112: goto tr136;
|
2782
2783
|
}
|
2783
2784
|
goto st0;
|
2784
2785
|
tr136:
|
2785
|
-
#line
|
2786
|
+
#line 294 "unicorn_http.rl"
|
2786
2787
|
{ downcase_char(deconst(p)); }
|
2787
2788
|
goto st87;
|
2788
2789
|
st87:
|
2789
2790
|
if ( ++p == pe )
|
2790
2791
|
goto _test_eof87;
|
2791
2792
|
case 87:
|
2792
|
-
#line
|
2793
|
+
#line 2794 "unicorn_http.c"
|
2793
2794
|
switch( (*p) ) {
|
2794
2795
|
case 58: goto tr137;
|
2795
2796
|
case 83: goto tr138;
|
@@ -2797,7 +2798,7 @@ case 87:
|
|
2797
2798
|
}
|
2798
2799
|
goto st0;
|
2799
2800
|
tr137:
|
2800
|
-
#line
|
2801
|
+
#line 300 "unicorn_http.rl"
|
2801
2802
|
{
|
2802
2803
|
rb_hash_aset(hp->env, g_rack_url_scheme, STR_NEW(mark, p));
|
2803
2804
|
}
|
@@ -2806,7 +2807,7 @@ st88:
|
|
2806
2807
|
if ( ++p == pe )
|
2807
2808
|
goto _test_eof88;
|
2808
2809
|
case 88:
|
2809
|
-
#line
|
2810
|
+
#line 2811 "unicorn_http.c"
|
2810
2811
|
if ( (*p) == 47 )
|
2811
2812
|
goto st89;
|
2812
2813
|
goto st0;
|
@@ -2894,14 +2895,14 @@ case 93:
|
|
2894
2895
|
goto st91;
|
2895
2896
|
goto st0;
|
2896
2897
|
tr143:
|
2897
|
-
#line
|
2898
|
+
#line 290 "unicorn_http.rl"
|
2898
2899
|
{MARK(mark, p); }
|
2899
2900
|
goto st94;
|
2900
2901
|
st94:
|
2901
2902
|
if ( ++p == pe )
|
2902
2903
|
goto _test_eof94;
|
2903
2904
|
case 94:
|
2904
|
-
#line
|
2905
|
+
#line 2906 "unicorn_http.c"
|
2905
2906
|
switch( (*p) ) {
|
2906
2907
|
case 37: goto st92;
|
2907
2908
|
case 47: goto tr147;
|
@@ -2953,14 +2954,14 @@ case 95:
|
|
2953
2954
|
goto st0;
|
2954
2955
|
goto st91;
|
2955
2956
|
tr144:
|
2956
|
-
#line
|
2957
|
+
#line 290 "unicorn_http.rl"
|
2957
2958
|
{MARK(mark, p); }
|
2958
2959
|
goto st96;
|
2959
2960
|
st96:
|
2960
2961
|
if ( ++p == pe )
|
2961
2962
|
goto _test_eof96;
|
2962
2963
|
case 96:
|
2963
|
-
#line
|
2964
|
+
#line 2965 "unicorn_http.c"
|
2964
2965
|
switch( (*p) ) {
|
2965
2966
|
case 37: goto st92;
|
2966
2967
|
case 47: goto st0;
|
@@ -3038,14 +3039,14 @@ case 98:
|
|
3038
3039
|
goto st0;
|
3039
3040
|
goto st91;
|
3040
3041
|
tr138:
|
3041
|
-
#line
|
3042
|
+
#line 294 "unicorn_http.rl"
|
3042
3043
|
{ downcase_char(deconst(p)); }
|
3043
3044
|
goto st99;
|
3044
3045
|
st99:
|
3045
3046
|
if ( ++p == pe )
|
3046
3047
|
goto _test_eof99;
|
3047
3048
|
case 99:
|
3048
|
-
#line
|
3049
|
+
#line 3050 "unicorn_http.c"
|
3049
3050
|
if ( (*p) == 58 )
|
3050
3051
|
goto tr137;
|
3051
3052
|
goto st0;
|
@@ -3065,7 +3066,7 @@ case 100:
|
|
3065
3066
|
goto tr152;
|
3066
3067
|
goto st0;
|
3067
3068
|
tr151:
|
3068
|
-
#line
|
3069
|
+
#line 339 "unicorn_http.rl"
|
3069
3070
|
{
|
3070
3071
|
hp->len.chunk = step_incr(hp->len.chunk, (*p), 16);
|
3071
3072
|
if (hp->len.chunk < 0)
|
@@ -3076,7 +3077,7 @@ st101:
|
|
3076
3077
|
if ( ++p == pe )
|
3077
3078
|
goto _test_eof101;
|
3078
3079
|
case 101:
|
3079
|
-
#line
|
3080
|
+
#line 3081 "unicorn_http.c"
|
3080
3081
|
switch( (*p) ) {
|
3081
3082
|
case 10: goto tr153;
|
3082
3083
|
case 13: goto st102;
|
@@ -3093,7 +3094,7 @@ case 101:
|
|
3093
3094
|
goto tr152;
|
3094
3095
|
goto st0;
|
3095
3096
|
tr153:
|
3096
|
-
#line
|
3097
|
+
#line 368 "unicorn_http.rl"
|
3097
3098
|
{
|
3098
3099
|
HP_FL_SET(hp, INTRAILER);
|
3099
3100
|
cs = http_parser_en_Trailers;
|
@@ -3106,7 +3107,7 @@ st123:
|
|
3106
3107
|
if ( ++p == pe )
|
3107
3108
|
goto _test_eof123;
|
3108
3109
|
case 123:
|
3109
|
-
#line
|
3110
|
+
#line 3111 "unicorn_http.c"
|
3110
3111
|
goto st0;
|
3111
3112
|
st102:
|
3112
3113
|
if ( ++p == pe )
|
@@ -3116,7 +3117,7 @@ case 102:
|
|
3116
3117
|
goto tr153;
|
3117
3118
|
goto st0;
|
3118
3119
|
tr152:
|
3119
|
-
#line
|
3120
|
+
#line 339 "unicorn_http.rl"
|
3120
3121
|
{
|
3121
3122
|
hp->len.chunk = step_incr(hp->len.chunk, (*p), 16);
|
3122
3123
|
if (hp->len.chunk < 0)
|
@@ -3127,7 +3128,7 @@ st103:
|
|
3127
3128
|
if ( ++p == pe )
|
3128
3129
|
goto _test_eof103;
|
3129
3130
|
case 103:
|
3130
|
-
#line
|
3131
|
+
#line 3132 "unicorn_http.c"
|
3131
3132
|
switch( (*p) ) {
|
3132
3133
|
case 10: goto st104;
|
3133
3134
|
case 13: goto st107;
|
@@ -3148,7 +3149,7 @@ st104:
|
|
3148
3149
|
case 104:
|
3149
3150
|
goto tr159;
|
3150
3151
|
tr159:
|
3151
|
-
#line
|
3152
|
+
#line 376 "unicorn_http.rl"
|
3152
3153
|
{
|
3153
3154
|
skip_chunk_data_hack: {
|
3154
3155
|
size_t nr = MIN((size_t)hp->len.chunk, REMAINING);
|
@@ -3170,7 +3171,7 @@ st105:
|
|
3170
3171
|
if ( ++p == pe )
|
3171
3172
|
goto _test_eof105;
|
3172
3173
|
case 105:
|
3173
|
-
#line
|
3174
|
+
#line 3175 "unicorn_http.c"
|
3174
3175
|
switch( (*p) ) {
|
3175
3176
|
case 10: goto st100;
|
3176
3177
|
case 13: goto st106;
|
@@ -3377,30 +3378,30 @@ case 113:
|
|
3377
3378
|
goto st113;
|
3378
3379
|
goto st0;
|
3379
3380
|
tr172:
|
3380
|
-
#line
|
3381
|
+
#line 296 "unicorn_http.rl"
|
3381
3382
|
{ MARK(mark, p); }
|
3382
|
-
#line
|
3383
|
+
#line 298 "unicorn_http.rl"
|
3383
3384
|
{ write_cont_value(hp, buffer, p); }
|
3384
3385
|
goto st114;
|
3385
3386
|
tr175:
|
3386
|
-
#line
|
3387
|
+
#line 298 "unicorn_http.rl"
|
3387
3388
|
{ write_cont_value(hp, buffer, p); }
|
3388
3389
|
goto st114;
|
3389
3390
|
tr182:
|
3390
|
-
#line 295 "unicorn_http.rl"
|
3391
|
-
{ MARK(mark, p); }
|
3392
3391
|
#line 296 "unicorn_http.rl"
|
3392
|
+
{ MARK(mark, p); }
|
3393
|
+
#line 297 "unicorn_http.rl"
|
3393
3394
|
{ write_value(hp, buffer, p); }
|
3394
3395
|
goto st114;
|
3395
3396
|
tr185:
|
3396
|
-
#line
|
3397
|
+
#line 297 "unicorn_http.rl"
|
3397
3398
|
{ write_value(hp, buffer, p); }
|
3398
3399
|
goto st114;
|
3399
3400
|
st114:
|
3400
3401
|
if ( ++p == pe )
|
3401
3402
|
goto _test_eof114;
|
3402
3403
|
case 114:
|
3403
|
-
#line
|
3404
|
+
#line 3405 "unicorn_http.c"
|
3404
3405
|
switch( (*p) ) {
|
3405
3406
|
case 9: goto st115;
|
3406
3407
|
case 10: goto tr167;
|
@@ -3429,14 +3430,14 @@ case 114:
|
|
3429
3430
|
goto tr169;
|
3430
3431
|
goto st0;
|
3431
3432
|
tr171:
|
3432
|
-
#line
|
3433
|
+
#line 296 "unicorn_http.rl"
|
3433
3434
|
{ MARK(mark, p); }
|
3434
3435
|
goto st115;
|
3435
3436
|
st115:
|
3436
3437
|
if ( ++p == pe )
|
3437
3438
|
goto _test_eof115;
|
3438
3439
|
case 115:
|
3439
|
-
#line
|
3440
|
+
#line 3441 "unicorn_http.c"
|
3440
3441
|
switch( (*p) ) {
|
3441
3442
|
case 9: goto tr171;
|
3442
3443
|
case 10: goto tr172;
|
@@ -3448,14 +3449,14 @@ case 115:
|
|
3448
3449
|
goto st0;
|
3449
3450
|
goto tr170;
|
3450
3451
|
tr170:
|
3451
|
-
#line
|
3452
|
+
#line 296 "unicorn_http.rl"
|
3452
3453
|
{ MARK(mark, p); }
|
3453
3454
|
goto st116;
|
3454
3455
|
st116:
|
3455
3456
|
if ( ++p == pe )
|
3456
3457
|
goto _test_eof116;
|
3457
3458
|
case 116:
|
3458
|
-
#line
|
3459
|
+
#line 3460 "unicorn_http.c"
|
3459
3460
|
switch( (*p) ) {
|
3460
3461
|
case 10: goto tr175;
|
3461
3462
|
case 13: goto tr176;
|
@@ -3468,35 +3469,35 @@ case 116:
|
|
3468
3469
|
goto st0;
|
3469
3470
|
goto st116;
|
3470
3471
|
tr173:
|
3471
|
-
#line
|
3472
|
+
#line 296 "unicorn_http.rl"
|
3472
3473
|
{ MARK(mark, p); }
|
3473
|
-
#line
|
3474
|
+
#line 298 "unicorn_http.rl"
|
3474
3475
|
{ write_cont_value(hp, buffer, p); }
|
3475
3476
|
goto st117;
|
3476
3477
|
tr176:
|
3477
|
-
#line
|
3478
|
+
#line 298 "unicorn_http.rl"
|
3478
3479
|
{ write_cont_value(hp, buffer, p); }
|
3479
3480
|
goto st117;
|
3480
3481
|
tr183:
|
3481
|
-
#line 295 "unicorn_http.rl"
|
3482
|
-
{ MARK(mark, p); }
|
3483
3482
|
#line 296 "unicorn_http.rl"
|
3483
|
+
{ MARK(mark, p); }
|
3484
|
+
#line 297 "unicorn_http.rl"
|
3484
3485
|
{ write_value(hp, buffer, p); }
|
3485
3486
|
goto st117;
|
3486
3487
|
tr186:
|
3487
|
-
#line
|
3488
|
+
#line 297 "unicorn_http.rl"
|
3488
3489
|
{ write_value(hp, buffer, p); }
|
3489
3490
|
goto st117;
|
3490
3491
|
st117:
|
3491
3492
|
if ( ++p == pe )
|
3492
3493
|
goto _test_eof117;
|
3493
3494
|
case 117:
|
3494
|
-
#line
|
3495
|
+
#line 3496 "unicorn_http.c"
|
3495
3496
|
if ( (*p) == 10 )
|
3496
3497
|
goto st114;
|
3497
3498
|
goto st0;
|
3498
3499
|
tr167:
|
3499
|
-
#line
|
3500
|
+
#line 363 "unicorn_http.rl"
|
3500
3501
|
{
|
3501
3502
|
cs = http_parser_first_final;
|
3502
3503
|
goto post_exec;
|
@@ -3506,7 +3507,7 @@ st124:
|
|
3506
3507
|
if ( ++p == pe )
|
3507
3508
|
goto _test_eof124;
|
3508
3509
|
case 124:
|
3509
|
-
#line
|
3510
|
+
#line 3511 "unicorn_http.c"
|
3510
3511
|
goto st0;
|
3511
3512
|
st118:
|
3512
3513
|
if ( ++p == pe )
|
@@ -3516,20 +3517,20 @@ case 118:
|
|
3516
3517
|
goto tr167;
|
3517
3518
|
goto st0;
|
3518
3519
|
tr169:
|
3519
|
-
#line 291 "unicorn_http.rl"
|
3520
|
-
{ MARK(start.field, p); }
|
3521
3520
|
#line 292 "unicorn_http.rl"
|
3521
|
+
{ MARK(start.field, p); }
|
3522
|
+
#line 293 "unicorn_http.rl"
|
3522
3523
|
{ snake_upcase_char(deconst(p)); }
|
3523
3524
|
goto st119;
|
3524
3525
|
tr178:
|
3525
|
-
#line
|
3526
|
+
#line 293 "unicorn_http.rl"
|
3526
3527
|
{ snake_upcase_char(deconst(p)); }
|
3527
3528
|
goto st119;
|
3528
3529
|
st119:
|
3529
3530
|
if ( ++p == pe )
|
3530
3531
|
goto _test_eof119;
|
3531
3532
|
case 119:
|
3532
|
-
#line
|
3533
|
+
#line 3534 "unicorn_http.c"
|
3533
3534
|
switch( (*p) ) {
|
3534
3535
|
case 33: goto tr178;
|
3535
3536
|
case 58: goto tr179;
|
@@ -3555,18 +3556,18 @@ case 119:
|
|
3555
3556
|
goto tr178;
|
3556
3557
|
goto st0;
|
3557
3558
|
tr181:
|
3558
|
-
#line
|
3559
|
+
#line 296 "unicorn_http.rl"
|
3559
3560
|
{ MARK(mark, p); }
|
3560
3561
|
goto st120;
|
3561
3562
|
tr179:
|
3562
|
-
#line
|
3563
|
+
#line 295 "unicorn_http.rl"
|
3563
3564
|
{ hp->s.field_len = LEN(start.field, p); }
|
3564
3565
|
goto st120;
|
3565
3566
|
st120:
|
3566
3567
|
if ( ++p == pe )
|
3567
3568
|
goto _test_eof120;
|
3568
3569
|
case 120:
|
3569
|
-
#line
|
3570
|
+
#line 3571 "unicorn_http.c"
|
3570
3571
|
switch( (*p) ) {
|
3571
3572
|
case 9: goto tr181;
|
3572
3573
|
case 10: goto tr182;
|
@@ -3578,14 +3579,14 @@ case 120:
|
|
3578
3579
|
goto st0;
|
3579
3580
|
goto tr180;
|
3580
3581
|
tr180:
|
3581
|
-
#line
|
3582
|
+
#line 296 "unicorn_http.rl"
|
3582
3583
|
{ MARK(mark, p); }
|
3583
3584
|
goto st121;
|
3584
3585
|
st121:
|
3585
3586
|
if ( ++p == pe )
|
3586
3587
|
goto _test_eof121;
|
3587
3588
|
case 121:
|
3588
|
-
#line
|
3589
|
+
#line 3590 "unicorn_http.c"
|
3589
3590
|
switch( (*p) ) {
|
3590
3591
|
case 10: goto tr185;
|
3591
3592
|
case 13: goto tr186;
|
@@ -3726,7 +3727,7 @@ case 121:
|
|
3726
3727
|
_out: {}
|
3727
3728
|
}
|
3728
3729
|
|
3729
|
-
#line
|
3730
|
+
#line 437 "unicorn_http.rl"
|
3730
3731
|
post_exec: /* "_out:" also goes here */
|
3731
3732
|
if (hp->cs != http_parser_error)
|
3732
3733
|
hp->cs = cs;
|
@@ -3901,6 +3902,10 @@ static VALUE HttpParser_clear(VALUE self)
|
|
3901
3902
|
{
|
3902
3903
|
struct http_parser *hp = data_get(self);
|
3903
3904
|
|
3905
|
+
/* we can't safely reuse .buf and .env if hijacked */
|
3906
|
+
if (HP_FL_TEST(hp, HIJACK))
|
3907
|
+
return HttpParser_init(self);
|
3908
|
+
|
3904
3909
|
http_parser_init(hp);
|
3905
3910
|
my_hash_clear(hp->env);
|
3906
3911
|
|
@@ -4107,6 +4112,15 @@ static VALUE HttpParser_env(VALUE self)
|
|
4107
4112
|
return data_get(self)->env;
|
4108
4113
|
}
|
4109
4114
|
|
4115
|
+
static VALUE HttpParser_hijacked_bang(VALUE self)
|
4116
|
+
{
|
4117
|
+
struct http_parser *hp = data_get(self);
|
4118
|
+
|
4119
|
+
HP_FL_SET(hp, HIJACK);
|
4120
|
+
|
4121
|
+
return self;
|
4122
|
+
}
|
4123
|
+
|
4110
4124
|
/**
|
4111
4125
|
* call-seq:
|
4112
4126
|
* parser.filter_body(dst, src) => nil/src
|
@@ -4211,11 +4225,8 @@ static VALUE HttpParser_rssget(VALUE self)
|
|
4211
4225
|
|
4212
4226
|
void Init_unicorn_http(void)
|
4213
4227
|
{
|
4214
|
-
static VALUE mark_ary;
|
4215
4228
|
VALUE mUnicorn, cHttpParser;
|
4216
4229
|
|
4217
|
-
mark_ary = rb_ary_new();
|
4218
|
-
rb_global_variable(&mark_ary);
|
4219
4230
|
mUnicorn = rb_define_module("Unicorn");
|
4220
4231
|
cHttpParser = rb_define_class_under(mUnicorn, "HttpParser", rb_cObject);
|
4221
4232
|
eHttpParserError =
|
@@ -4225,7 +4236,7 @@ void Init_unicorn_http(void)
|
|
4225
4236
|
e414 = rb_define_class_under(mUnicorn, "RequestURITooLongError",
|
4226
4237
|
eHttpParserError);
|
4227
4238
|
|
4228
|
-
init_globals(
|
4239
|
+
init_globals();
|
4229
4240
|
rb_define_alloc_func(cHttpParser, HttpParser_alloc);
|
4230
4241
|
rb_define_method(cHttpParser, "initialize", HttpParser_init, 0);
|
4231
4242
|
rb_define_method(cHttpParser, "clear", HttpParser_clear, 0);
|
@@ -4241,6 +4252,7 @@ void Init_unicorn_http(void)
|
|
4241
4252
|
rb_define_method(cHttpParser, "next?", HttpParser_next, 0);
|
4242
4253
|
rb_define_method(cHttpParser, "buf", HttpParser_buf, 0);
|
4243
4254
|
rb_define_method(cHttpParser, "env", HttpParser_env, 0);
|
4255
|
+
rb_define_method(cHttpParser, "hijacked!", HttpParser_hijacked_bang, 0);
|
4244
4256
|
rb_define_method(cHttpParser, "response_start_sent=", HttpParser_rssset, 1);
|
4245
4257
|
rb_define_method(cHttpParser, "response_start_sent", HttpParser_rssget, 0);
|
4246
4258
|
|
@@ -4261,16 +4273,14 @@ void Init_unicorn_http(void)
|
|
4261
4273
|
|
4262
4274
|
rb_define_singleton_method(cHttpParser, "max_header_len=", set_maxhdrlen, 1);
|
4263
4275
|
|
4264
|
-
init_common_fields(
|
4276
|
+
init_common_fields();
|
4265
4277
|
SET_GLOBAL(g_http_host, "HOST");
|
4266
4278
|
SET_GLOBAL(g_http_trailer, "TRAILER");
|
4267
4279
|
SET_GLOBAL(g_http_transfer_encoding, "TRANSFER_ENCODING");
|
4268
4280
|
SET_GLOBAL(g_content_length, "CONTENT_LENGTH");
|
4269
4281
|
SET_GLOBAL(g_http_connection, "CONNECTION");
|
4270
4282
|
id_set_backtrace = rb_intern("set_backtrace");
|
4271
|
-
init_unicorn_httpdate(
|
4272
|
-
|
4273
|
-
OBJ_FREEZE(mark_ary);
|
4283
|
+
init_unicorn_httpdate();
|
4274
4284
|
|
4275
4285
|
#ifndef HAVE_RB_HASH_CLEAR
|
4276
4286
|
id_clear = rb_intern("clear");
|