unicorn 5.7.0 → 6.1.0

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.
@@ -14,6 +14,7 @@
14
14
  #include "common_field_optimization.h"
15
15
  #include "global_variables.h"
16
16
  #include "c_util.h"
17
+ #include "epollexclusive.h"
17
18
 
18
19
  void init_unicorn_httpdate(void);
19
20
 
@@ -67,18 +68,6 @@ struct http_parser {
67
68
  static ID id_set_backtrace, id_is_chunked_p;
68
69
  static VALUE cHttpParser;
69
70
 
70
- #ifdef HAVE_RB_HASH_CLEAR /* Ruby >= 2.0 */
71
- # define my_hash_clear(h) (void)rb_hash_clear(h)
72
- #else /* !HAVE_RB_HASH_CLEAR - Ruby <= 1.9.3 */
73
-
74
- static ID id_clear;
75
-
76
- static void my_hash_clear(VALUE h)
77
- {
78
- rb_funcall(h, id_clear, 0);
79
- }
80
- #endif /* HAVE_RB_HASH_CLEAR */
81
-
82
71
  static void finalize_header(struct http_parser *hp);
83
72
 
84
73
  static void parser_raise(VALUE klass, const char *msg)
@@ -324,12 +313,12 @@ static void write_value(struct http_parser *hp,
324
313
  /** Machine **/
325
314
 
326
315
 
327
- #line 431 "unicorn_http.rl"
316
+ #line 420 "unicorn_http.rl"
328
317
 
329
318
 
330
319
  /** Data **/
331
320
 
332
- #line 333 "unicorn_http.c"
321
+ #line 322 "unicorn_http.c"
333
322
  static const int http_parser_start = 1;
334
323
  static const int http_parser_first_final = 122;
335
324
  static const int http_parser_error = 0;
@@ -340,7 +329,7 @@ static const int http_parser_en_Trailers = 114;
340
329
  static const int http_parser_en_main = 1;
341
330
 
342
331
 
343
- #line 435 "unicorn_http.rl"
332
+ #line 424 "unicorn_http.rl"
344
333
 
345
334
  static void http_parser_init(struct http_parser *hp)
346
335
  {
@@ -353,12 +342,12 @@ static void http_parser_init(struct http_parser *hp)
353
342
  hp->len.content = 0;
354
343
  hp->cont = Qfalse; /* zero on MRI, should be optimized away by above */
355
344
 
356
- #line 357 "unicorn_http.c"
345
+ #line 346 "unicorn_http.c"
357
346
  {
358
347
  cs = http_parser_start;
359
348
  }
360
349
 
361
- #line 447 "unicorn_http.rl"
350
+ #line 436 "unicorn_http.rl"
362
351
  hp->cs = cs;
363
352
  }
364
353
 
@@ -386,7 +375,7 @@ http_parser_execute(struct http_parser *hp, char *buffer, size_t len)
386
375
  goto skip_chunk_data_hack;
387
376
  }
388
377
 
389
- #line 390 "unicorn_http.c"
378
+ #line 379 "unicorn_http.c"
390
379
  {
391
380
  if ( p == pe )
392
381
  goto _test_eof;
@@ -421,14 +410,14 @@ st0:
421
410
  cs = 0;
422
411
  goto _out;
423
412
  tr0:
424
- #line 327 "unicorn_http.rl"
413
+ #line 316 "unicorn_http.rl"
425
414
  {MARK(mark, p); }
426
415
  goto st2;
427
416
  st2:
428
417
  if ( ++p == pe )
429
418
  goto _test_eof2;
430
419
  case 2:
431
- #line 432 "unicorn_http.c"
420
+ #line 421 "unicorn_http.c"
432
421
  switch( (*p) ) {
433
422
  case 32: goto tr3;
434
423
  case 33: goto st49;
@@ -454,14 +443,14 @@ case 2:
454
443
  goto st49;
455
444
  goto st0;
456
445
  tr3:
457
- #line 336 "unicorn_http.rl"
446
+ #line 325 "unicorn_http.rl"
458
447
  { request_method(hp, PTR_TO(mark), LEN(mark, p)); }
459
448
  goto st3;
460
449
  st3:
461
450
  if ( ++p == pe )
462
451
  goto _test_eof3;
463
452
  case 3:
464
- #line 465 "unicorn_http.c"
453
+ #line 454 "unicorn_http.c"
465
454
  switch( (*p) ) {
466
455
  case 42: goto tr5;
467
456
  case 47: goto tr6;
@@ -470,21 +459,21 @@ case 3:
470
459
  }
471
460
  goto st0;
472
461
  tr5:
473
- #line 327 "unicorn_http.rl"
462
+ #line 316 "unicorn_http.rl"
474
463
  {MARK(mark, p); }
475
464
  goto st4;
476
465
  st4:
477
466
  if ( ++p == pe )
478
467
  goto _test_eof4;
479
468
  case 4:
480
- #line 481 "unicorn_http.c"
469
+ #line 470 "unicorn_http.c"
481
470
  switch( (*p) ) {
482
471
  case 32: goto tr8;
483
472
  case 35: goto tr9;
484
473
  }
485
474
  goto st0;
486
475
  tr8:
487
- #line 341 "unicorn_http.rl"
476
+ #line 330 "unicorn_http.rl"
488
477
  {
489
478
  VALUE str;
490
479
 
@@ -502,23 +491,23 @@ tr8:
502
491
  }
503
492
  goto st5;
504
493
  tr42:
505
- #line 327 "unicorn_http.rl"
494
+ #line 316 "unicorn_http.rl"
506
495
  {MARK(mark, p); }
507
- #line 356 "unicorn_http.rl"
496
+ #line 345 "unicorn_http.rl"
508
497
  {
509
498
  VALIDATE_MAX_URI_LENGTH(LEN(mark, p), FRAGMENT);
510
499
  rb_hash_aset(hp->env, g_fragment, STR_NEW(mark, p));
511
500
  }
512
501
  goto st5;
513
502
  tr45:
514
- #line 356 "unicorn_http.rl"
503
+ #line 345 "unicorn_http.rl"
515
504
  {
516
505
  VALIDATE_MAX_URI_LENGTH(LEN(mark, p), FRAGMENT);
517
506
  rb_hash_aset(hp->env, g_fragment, STR_NEW(mark, p));
518
507
  }
519
508
  goto st5;
520
509
  tr49:
521
- #line 366 "unicorn_http.rl"
510
+ #line 355 "unicorn_http.rl"
522
511
  {
523
512
  VALUE val;
524
513
 
@@ -529,7 +518,7 @@ tr49:
529
518
  if (!STR_CSTR_EQ(val, "*"))
530
519
  rb_hash_aset(hp->env, g_path_info, val);
531
520
  }
532
- #line 341 "unicorn_http.rl"
521
+ #line 330 "unicorn_http.rl"
533
522
  {
534
523
  VALUE str;
535
524
 
@@ -547,14 +536,14 @@ tr49:
547
536
  }
548
537
  goto st5;
549
538
  tr55:
550
- #line 360 "unicorn_http.rl"
539
+ #line 349 "unicorn_http.rl"
551
540
  {MARK(start.query, p); }
552
- #line 361 "unicorn_http.rl"
541
+ #line 350 "unicorn_http.rl"
553
542
  {
554
543
  VALIDATE_MAX_URI_LENGTH(LEN(start.query, p), QUERY_STRING);
555
544
  rb_hash_aset(hp->env, g_query_string, STR_NEW(start.query, p));
556
545
  }
557
- #line 341 "unicorn_http.rl"
546
+ #line 330 "unicorn_http.rl"
558
547
  {
559
548
  VALUE str;
560
549
 
@@ -572,12 +561,12 @@ tr55:
572
561
  }
573
562
  goto st5;
574
563
  tr59:
575
- #line 361 "unicorn_http.rl"
564
+ #line 350 "unicorn_http.rl"
576
565
  {
577
566
  VALIDATE_MAX_URI_LENGTH(LEN(start.query, p), QUERY_STRING);
578
567
  rb_hash_aset(hp->env, g_query_string, STR_NEW(start.query, p));
579
568
  }
580
- #line 341 "unicorn_http.rl"
569
+ #line 330 "unicorn_http.rl"
581
570
  {
582
571
  VALUE str;
583
572
 
@@ -598,19 +587,19 @@ st5:
598
587
  if ( ++p == pe )
599
588
  goto _test_eof5;
600
589
  case 5:
601
- #line 602 "unicorn_http.c"
590
+ #line 591 "unicorn_http.c"
602
591
  if ( (*p) == 72 )
603
592
  goto tr10;
604
593
  goto st0;
605
594
  tr10:
606
- #line 327 "unicorn_http.rl"
595
+ #line 316 "unicorn_http.rl"
607
596
  {MARK(mark, p); }
608
597
  goto st6;
609
598
  st6:
610
599
  if ( ++p == pe )
611
600
  goto _test_eof6;
612
601
  case 6:
613
- #line 614 "unicorn_http.c"
602
+ #line 603 "unicorn_http.c"
614
603
  if ( (*p) == 84 )
615
604
  goto st7;
616
605
  goto st0;
@@ -670,34 +659,34 @@ case 13:
670
659
  goto st13;
671
660
  goto st0;
672
661
  tr18:
673
- #line 365 "unicorn_http.rl"
662
+ #line 354 "unicorn_http.rl"
674
663
  { http_version(hp, PTR_TO(mark), LEN(mark, p)); }
675
664
  goto st14;
676
665
  tr26:
677
- #line 333 "unicorn_http.rl"
666
+ #line 322 "unicorn_http.rl"
678
667
  { MARK(mark, p); }
679
- #line 335 "unicorn_http.rl"
668
+ #line 324 "unicorn_http.rl"
680
669
  { write_cont_value(hp, buffer, p); }
681
670
  goto st14;
682
671
  tr29:
683
- #line 335 "unicorn_http.rl"
672
+ #line 324 "unicorn_http.rl"
684
673
  { write_cont_value(hp, buffer, p); }
685
674
  goto st14;
686
675
  tr36:
687
- #line 333 "unicorn_http.rl"
676
+ #line 322 "unicorn_http.rl"
688
677
  { MARK(mark, p); }
689
- #line 334 "unicorn_http.rl"
678
+ #line 323 "unicorn_http.rl"
690
679
  { write_value(hp, buffer, p); }
691
680
  goto st14;
692
681
  tr39:
693
- #line 334 "unicorn_http.rl"
682
+ #line 323 "unicorn_http.rl"
694
683
  { write_value(hp, buffer, p); }
695
684
  goto st14;
696
685
  st14:
697
686
  if ( ++p == pe )
698
687
  goto _test_eof14;
699
688
  case 14:
700
- #line 701 "unicorn_http.c"
689
+ #line 690 "unicorn_http.c"
701
690
  switch( (*p) ) {
702
691
  case 9: goto st15;
703
692
  case 10: goto tr21;
@@ -726,14 +715,14 @@ case 14:
726
715
  goto tr23;
727
716
  goto st0;
728
717
  tr25:
729
- #line 333 "unicorn_http.rl"
718
+ #line 322 "unicorn_http.rl"
730
719
  { MARK(mark, p); }
731
720
  goto st15;
732
721
  st15:
733
722
  if ( ++p == pe )
734
723
  goto _test_eof15;
735
724
  case 15:
736
- #line 737 "unicorn_http.c"
725
+ #line 726 "unicorn_http.c"
737
726
  switch( (*p) ) {
738
727
  case 9: goto tr25;
739
728
  case 10: goto tr26;
@@ -745,14 +734,14 @@ case 15:
745
734
  goto st0;
746
735
  goto tr24;
747
736
  tr24:
748
- #line 333 "unicorn_http.rl"
737
+ #line 322 "unicorn_http.rl"
749
738
  { MARK(mark, p); }
750
739
  goto st16;
751
740
  st16:
752
741
  if ( ++p == pe )
753
742
  goto _test_eof16;
754
743
  case 16:
755
- #line 756 "unicorn_http.c"
744
+ #line 745 "unicorn_http.c"
756
745
  switch( (*p) ) {
757
746
  case 10: goto tr29;
758
747
  case 13: goto tr30;
@@ -765,39 +754,39 @@ case 16:
765
754
  goto st0;
766
755
  goto st16;
767
756
  tr19:
768
- #line 365 "unicorn_http.rl"
757
+ #line 354 "unicorn_http.rl"
769
758
  { http_version(hp, PTR_TO(mark), LEN(mark, p)); }
770
759
  goto st17;
771
760
  tr27:
772
- #line 333 "unicorn_http.rl"
761
+ #line 322 "unicorn_http.rl"
773
762
  { MARK(mark, p); }
774
- #line 335 "unicorn_http.rl"
763
+ #line 324 "unicorn_http.rl"
775
764
  { write_cont_value(hp, buffer, p); }
776
765
  goto st17;
777
766
  tr30:
778
- #line 335 "unicorn_http.rl"
767
+ #line 324 "unicorn_http.rl"
779
768
  { write_cont_value(hp, buffer, p); }
780
769
  goto st17;
781
770
  tr37:
782
- #line 333 "unicorn_http.rl"
771
+ #line 322 "unicorn_http.rl"
783
772
  { MARK(mark, p); }
784
- #line 334 "unicorn_http.rl"
773
+ #line 323 "unicorn_http.rl"
785
774
  { write_value(hp, buffer, p); }
786
775
  goto st17;
787
776
  tr40:
788
- #line 334 "unicorn_http.rl"
777
+ #line 323 "unicorn_http.rl"
789
778
  { write_value(hp, buffer, p); }
790
779
  goto st17;
791
780
  st17:
792
781
  if ( ++p == pe )
793
782
  goto _test_eof17;
794
783
  case 17:
795
- #line 796 "unicorn_http.c"
784
+ #line 785 "unicorn_http.c"
796
785
  if ( (*p) == 10 )
797
786
  goto st14;
798
787
  goto st0;
799
788
  tr21:
800
- #line 381 "unicorn_http.rl"
789
+ #line 370 "unicorn_http.rl"
801
790
  {
802
791
  finalize_header(hp);
803
792
 
@@ -818,7 +807,7 @@ tr21:
818
807
  }
819
808
  goto st122;
820
809
  tr104:
821
- #line 341 "unicorn_http.rl"
810
+ #line 330 "unicorn_http.rl"
822
811
  {
823
812
  VALUE str;
824
813
 
@@ -834,7 +823,7 @@ tr104:
834
823
  rb_hash_aset(hp->env, g_request_path, str);
835
824
  }
836
825
  }
837
- #line 381 "unicorn_http.rl"
826
+ #line 370 "unicorn_http.rl"
838
827
  {
839
828
  finalize_header(hp);
840
829
 
@@ -855,14 +844,14 @@ tr104:
855
844
  }
856
845
  goto st122;
857
846
  tr108:
858
- #line 327 "unicorn_http.rl"
847
+ #line 316 "unicorn_http.rl"
859
848
  {MARK(mark, p); }
860
- #line 356 "unicorn_http.rl"
849
+ #line 345 "unicorn_http.rl"
861
850
  {
862
851
  VALIDATE_MAX_URI_LENGTH(LEN(mark, p), FRAGMENT);
863
852
  rb_hash_aset(hp->env, g_fragment, STR_NEW(mark, p));
864
853
  }
865
- #line 381 "unicorn_http.rl"
854
+ #line 370 "unicorn_http.rl"
866
855
  {
867
856
  finalize_header(hp);
868
857
 
@@ -883,12 +872,12 @@ tr108:
883
872
  }
884
873
  goto st122;
885
874
  tr112:
886
- #line 356 "unicorn_http.rl"
875
+ #line 345 "unicorn_http.rl"
887
876
  {
888
877
  VALIDATE_MAX_URI_LENGTH(LEN(mark, p), FRAGMENT);
889
878
  rb_hash_aset(hp->env, g_fragment, STR_NEW(mark, p));
890
879
  }
891
- #line 381 "unicorn_http.rl"
880
+ #line 370 "unicorn_http.rl"
892
881
  {
893
882
  finalize_header(hp);
894
883
 
@@ -909,7 +898,7 @@ tr112:
909
898
  }
910
899
  goto st122;
911
900
  tr117:
912
- #line 366 "unicorn_http.rl"
901
+ #line 355 "unicorn_http.rl"
913
902
  {
914
903
  VALUE val;
915
904
 
@@ -920,7 +909,7 @@ tr117:
920
909
  if (!STR_CSTR_EQ(val, "*"))
921
910
  rb_hash_aset(hp->env, g_path_info, val);
922
911
  }
923
- #line 341 "unicorn_http.rl"
912
+ #line 330 "unicorn_http.rl"
924
913
  {
925
914
  VALUE str;
926
915
 
@@ -936,7 +925,7 @@ tr117:
936
925
  rb_hash_aset(hp->env, g_request_path, str);
937
926
  }
938
927
  }
939
- #line 381 "unicorn_http.rl"
928
+ #line 370 "unicorn_http.rl"
940
929
  {
941
930
  finalize_header(hp);
942
931
 
@@ -957,14 +946,14 @@ tr117:
957
946
  }
958
947
  goto st122;
959
948
  tr124:
960
- #line 360 "unicorn_http.rl"
949
+ #line 349 "unicorn_http.rl"
961
950
  {MARK(start.query, p); }
962
- #line 361 "unicorn_http.rl"
951
+ #line 350 "unicorn_http.rl"
963
952
  {
964
953
  VALIDATE_MAX_URI_LENGTH(LEN(start.query, p), QUERY_STRING);
965
954
  rb_hash_aset(hp->env, g_query_string, STR_NEW(start.query, p));
966
955
  }
967
- #line 341 "unicorn_http.rl"
956
+ #line 330 "unicorn_http.rl"
968
957
  {
969
958
  VALUE str;
970
959
 
@@ -980,7 +969,7 @@ tr124:
980
969
  rb_hash_aset(hp->env, g_request_path, str);
981
970
  }
982
971
  }
983
- #line 381 "unicorn_http.rl"
972
+ #line 370 "unicorn_http.rl"
984
973
  {
985
974
  finalize_header(hp);
986
975
 
@@ -1001,12 +990,12 @@ tr124:
1001
990
  }
1002
991
  goto st122;
1003
992
  tr129:
1004
- #line 361 "unicorn_http.rl"
993
+ #line 350 "unicorn_http.rl"
1005
994
  {
1006
995
  VALIDATE_MAX_URI_LENGTH(LEN(start.query, p), QUERY_STRING);
1007
996
  rb_hash_aset(hp->env, g_query_string, STR_NEW(start.query, p));
1008
997
  }
1009
- #line 341 "unicorn_http.rl"
998
+ #line 330 "unicorn_http.rl"
1010
999
  {
1011
1000
  VALUE str;
1012
1001
 
@@ -1022,7 +1011,7 @@ tr129:
1022
1011
  rb_hash_aset(hp->env, g_request_path, str);
1023
1012
  }
1024
1013
  }
1025
- #line 381 "unicorn_http.rl"
1014
+ #line 370 "unicorn_http.rl"
1026
1015
  {
1027
1016
  finalize_header(hp);
1028
1017
 
@@ -1046,10 +1035,10 @@ st122:
1046
1035
  if ( ++p == pe )
1047
1036
  goto _test_eof122;
1048
1037
  case 122:
1049
- #line 1050 "unicorn_http.c"
1038
+ #line 1039 "unicorn_http.c"
1050
1039
  goto st0;
1051
1040
  tr105:
1052
- #line 341 "unicorn_http.rl"
1041
+ #line 330 "unicorn_http.rl"
1053
1042
  {
1054
1043
  VALUE str;
1055
1044
 
@@ -1067,23 +1056,23 @@ tr105:
1067
1056
  }
1068
1057
  goto st18;
1069
1058
  tr109:
1070
- #line 327 "unicorn_http.rl"
1059
+ #line 316 "unicorn_http.rl"
1071
1060
  {MARK(mark, p); }
1072
- #line 356 "unicorn_http.rl"
1061
+ #line 345 "unicorn_http.rl"
1073
1062
  {
1074
1063
  VALIDATE_MAX_URI_LENGTH(LEN(mark, p), FRAGMENT);
1075
1064
  rb_hash_aset(hp->env, g_fragment, STR_NEW(mark, p));
1076
1065
  }
1077
1066
  goto st18;
1078
1067
  tr113:
1079
- #line 356 "unicorn_http.rl"
1068
+ #line 345 "unicorn_http.rl"
1080
1069
  {
1081
1070
  VALIDATE_MAX_URI_LENGTH(LEN(mark, p), FRAGMENT);
1082
1071
  rb_hash_aset(hp->env, g_fragment, STR_NEW(mark, p));
1083
1072
  }
1084
1073
  goto st18;
1085
1074
  tr118:
1086
- #line 366 "unicorn_http.rl"
1075
+ #line 355 "unicorn_http.rl"
1087
1076
  {
1088
1077
  VALUE val;
1089
1078
 
@@ -1094,7 +1083,7 @@ tr118:
1094
1083
  if (!STR_CSTR_EQ(val, "*"))
1095
1084
  rb_hash_aset(hp->env, g_path_info, val);
1096
1085
  }
1097
- #line 341 "unicorn_http.rl"
1086
+ #line 330 "unicorn_http.rl"
1098
1087
  {
1099
1088
  VALUE str;
1100
1089
 
@@ -1112,14 +1101,14 @@ tr118:
1112
1101
  }
1113
1102
  goto st18;
1114
1103
  tr125:
1115
- #line 360 "unicorn_http.rl"
1104
+ #line 349 "unicorn_http.rl"
1116
1105
  {MARK(start.query, p); }
1117
- #line 361 "unicorn_http.rl"
1106
+ #line 350 "unicorn_http.rl"
1118
1107
  {
1119
1108
  VALIDATE_MAX_URI_LENGTH(LEN(start.query, p), QUERY_STRING);
1120
1109
  rb_hash_aset(hp->env, g_query_string, STR_NEW(start.query, p));
1121
1110
  }
1122
- #line 341 "unicorn_http.rl"
1111
+ #line 330 "unicorn_http.rl"
1123
1112
  {
1124
1113
  VALUE str;
1125
1114
 
@@ -1137,12 +1126,12 @@ tr125:
1137
1126
  }
1138
1127
  goto st18;
1139
1128
  tr130:
1140
- #line 361 "unicorn_http.rl"
1129
+ #line 350 "unicorn_http.rl"
1141
1130
  {
1142
1131
  VALIDATE_MAX_URI_LENGTH(LEN(start.query, p), QUERY_STRING);
1143
1132
  rb_hash_aset(hp->env, g_query_string, STR_NEW(start.query, p));
1144
1133
  }
1145
- #line 341 "unicorn_http.rl"
1134
+ #line 330 "unicorn_http.rl"
1146
1135
  {
1147
1136
  VALUE str;
1148
1137
 
@@ -1163,25 +1152,25 @@ st18:
1163
1152
  if ( ++p == pe )
1164
1153
  goto _test_eof18;
1165
1154
  case 18:
1166
- #line 1167 "unicorn_http.c"
1155
+ #line 1156 "unicorn_http.c"
1167
1156
  if ( (*p) == 10 )
1168
1157
  goto tr21;
1169
1158
  goto st0;
1170
1159
  tr23:
1171
- #line 329 "unicorn_http.rl"
1160
+ #line 318 "unicorn_http.rl"
1172
1161
  { MARK(start.field, p); }
1173
- #line 330 "unicorn_http.rl"
1162
+ #line 319 "unicorn_http.rl"
1174
1163
  { snake_upcase_char(deconst(p)); }
1175
1164
  goto st19;
1176
1165
  tr32:
1177
- #line 330 "unicorn_http.rl"
1166
+ #line 319 "unicorn_http.rl"
1178
1167
  { snake_upcase_char(deconst(p)); }
1179
1168
  goto st19;
1180
1169
  st19:
1181
1170
  if ( ++p == pe )
1182
1171
  goto _test_eof19;
1183
1172
  case 19:
1184
- #line 1185 "unicorn_http.c"
1173
+ #line 1174 "unicorn_http.c"
1185
1174
  switch( (*p) ) {
1186
1175
  case 33: goto tr32;
1187
1176
  case 58: goto tr33;
@@ -1207,18 +1196,18 @@ case 19:
1207
1196
  goto tr32;
1208
1197
  goto st0;
1209
1198
  tr35:
1210
- #line 333 "unicorn_http.rl"
1199
+ #line 322 "unicorn_http.rl"
1211
1200
  { MARK(mark, p); }
1212
1201
  goto st20;
1213
1202
  tr33:
1214
- #line 332 "unicorn_http.rl"
1203
+ #line 321 "unicorn_http.rl"
1215
1204
  { hp->s.field_len = LEN(start.field, p); }
1216
1205
  goto st20;
1217
1206
  st20:
1218
1207
  if ( ++p == pe )
1219
1208
  goto _test_eof20;
1220
1209
  case 20:
1221
- #line 1222 "unicorn_http.c"
1210
+ #line 1211 "unicorn_http.c"
1222
1211
  switch( (*p) ) {
1223
1212
  case 9: goto tr35;
1224
1213
  case 10: goto tr36;
@@ -1230,14 +1219,14 @@ case 20:
1230
1219
  goto st0;
1231
1220
  goto tr34;
1232
1221
  tr34:
1233
- #line 333 "unicorn_http.rl"
1222
+ #line 322 "unicorn_http.rl"
1234
1223
  { MARK(mark, p); }
1235
1224
  goto st21;
1236
1225
  st21:
1237
1226
  if ( ++p == pe )
1238
1227
  goto _test_eof21;
1239
1228
  case 21:
1240
- #line 1241 "unicorn_http.c"
1229
+ #line 1230 "unicorn_http.c"
1241
1230
  switch( (*p) ) {
1242
1231
  case 10: goto tr39;
1243
1232
  case 13: goto tr40;
@@ -1250,7 +1239,7 @@ case 21:
1250
1239
  goto st0;
1251
1240
  goto st21;
1252
1241
  tr9:
1253
- #line 341 "unicorn_http.rl"
1242
+ #line 330 "unicorn_http.rl"
1254
1243
  {
1255
1244
  VALUE str;
1256
1245
 
@@ -1268,7 +1257,7 @@ tr9:
1268
1257
  }
1269
1258
  goto st22;
1270
1259
  tr50:
1271
- #line 366 "unicorn_http.rl"
1260
+ #line 355 "unicorn_http.rl"
1272
1261
  {
1273
1262
  VALUE val;
1274
1263
 
@@ -1279,7 +1268,7 @@ tr50:
1279
1268
  if (!STR_CSTR_EQ(val, "*"))
1280
1269
  rb_hash_aset(hp->env, g_path_info, val);
1281
1270
  }
1282
- #line 341 "unicorn_http.rl"
1271
+ #line 330 "unicorn_http.rl"
1283
1272
  {
1284
1273
  VALUE str;
1285
1274
 
@@ -1297,14 +1286,14 @@ tr50:
1297
1286
  }
1298
1287
  goto st22;
1299
1288
  tr56:
1300
- #line 360 "unicorn_http.rl"
1289
+ #line 349 "unicorn_http.rl"
1301
1290
  {MARK(start.query, p); }
1302
- #line 361 "unicorn_http.rl"
1291
+ #line 350 "unicorn_http.rl"
1303
1292
  {
1304
1293
  VALIDATE_MAX_URI_LENGTH(LEN(start.query, p), QUERY_STRING);
1305
1294
  rb_hash_aset(hp->env, g_query_string, STR_NEW(start.query, p));
1306
1295
  }
1307
- #line 341 "unicorn_http.rl"
1296
+ #line 330 "unicorn_http.rl"
1308
1297
  {
1309
1298
  VALUE str;
1310
1299
 
@@ -1322,12 +1311,12 @@ tr56:
1322
1311
  }
1323
1312
  goto st22;
1324
1313
  tr60:
1325
- #line 361 "unicorn_http.rl"
1314
+ #line 350 "unicorn_http.rl"
1326
1315
  {
1327
1316
  VALIDATE_MAX_URI_LENGTH(LEN(start.query, p), QUERY_STRING);
1328
1317
  rb_hash_aset(hp->env, g_query_string, STR_NEW(start.query, p));
1329
1318
  }
1330
- #line 341 "unicorn_http.rl"
1319
+ #line 330 "unicorn_http.rl"
1331
1320
  {
1332
1321
  VALUE str;
1333
1322
 
@@ -1348,7 +1337,7 @@ st22:
1348
1337
  if ( ++p == pe )
1349
1338
  goto _test_eof22;
1350
1339
  case 22:
1351
- #line 1352 "unicorn_http.c"
1340
+ #line 1341 "unicorn_http.c"
1352
1341
  switch( (*p) ) {
1353
1342
  case 32: goto tr42;
1354
1343
  case 35: goto st0;
@@ -1359,14 +1348,14 @@ case 22:
1359
1348
  goto st0;
1360
1349
  goto tr41;
1361
1350
  tr41:
1362
- #line 327 "unicorn_http.rl"
1351
+ #line 316 "unicorn_http.rl"
1363
1352
  {MARK(mark, p); }
1364
1353
  goto st23;
1365
1354
  st23:
1366
1355
  if ( ++p == pe )
1367
1356
  goto _test_eof23;
1368
1357
  case 23:
1369
- #line 1370 "unicorn_http.c"
1358
+ #line 1359 "unicorn_http.c"
1370
1359
  switch( (*p) ) {
1371
1360
  case 32: goto tr45;
1372
1361
  case 35: goto st0;
@@ -1377,14 +1366,14 @@ case 23:
1377
1366
  goto st0;
1378
1367
  goto st23;
1379
1368
  tr43:
1380
- #line 327 "unicorn_http.rl"
1369
+ #line 316 "unicorn_http.rl"
1381
1370
  {MARK(mark, p); }
1382
1371
  goto st24;
1383
1372
  st24:
1384
1373
  if ( ++p == pe )
1385
1374
  goto _test_eof24;
1386
1375
  case 24:
1387
- #line 1388 "unicorn_http.c"
1376
+ #line 1377 "unicorn_http.c"
1388
1377
  if ( (*p) < 65 ) {
1389
1378
  if ( 48 <= (*p) && (*p) <= 57 )
1390
1379
  goto st25;
@@ -1408,20 +1397,20 @@ case 25:
1408
1397
  goto st23;
1409
1398
  goto st0;
1410
1399
  tr6:
1411
- #line 327 "unicorn_http.rl"
1400
+ #line 316 "unicorn_http.rl"
1412
1401
  {MARK(mark, p); }
1413
1402
  goto st26;
1414
1403
  tr76:
1415
- #line 340 "unicorn_http.rl"
1404
+ #line 329 "unicorn_http.rl"
1416
1405
  { rb_hash_aset(hp->env, g_http_host, STR_NEW(mark, p)); }
1417
- #line 327 "unicorn_http.rl"
1406
+ #line 316 "unicorn_http.rl"
1418
1407
  {MARK(mark, p); }
1419
1408
  goto st26;
1420
1409
  st26:
1421
1410
  if ( ++p == pe )
1422
1411
  goto _test_eof26;
1423
1412
  case 26:
1424
- #line 1425 "unicorn_http.c"
1413
+ #line 1414 "unicorn_http.c"
1425
1414
  switch( (*p) ) {
1426
1415
  case 32: goto tr49;
1427
1416
  case 35: goto tr50;
@@ -1459,7 +1448,7 @@ case 28:
1459
1448
  goto st26;
1460
1449
  goto st0;
1461
1450
  tr52:
1462
- #line 366 "unicorn_http.rl"
1451
+ #line 355 "unicorn_http.rl"
1463
1452
  {
1464
1453
  VALUE val;
1465
1454
 
@@ -1475,7 +1464,7 @@ st29:
1475
1464
  if ( ++p == pe )
1476
1465
  goto _test_eof29;
1477
1466
  case 29:
1478
- #line 1479 "unicorn_http.c"
1467
+ #line 1468 "unicorn_http.c"
1479
1468
  switch( (*p) ) {
1480
1469
  case 32: goto tr55;
1481
1470
  case 35: goto tr56;
@@ -1486,14 +1475,14 @@ case 29:
1486
1475
  goto st0;
1487
1476
  goto tr54;
1488
1477
  tr54:
1489
- #line 360 "unicorn_http.rl"
1478
+ #line 349 "unicorn_http.rl"
1490
1479
  {MARK(start.query, p); }
1491
1480
  goto st30;
1492
1481
  st30:
1493
1482
  if ( ++p == pe )
1494
1483
  goto _test_eof30;
1495
1484
  case 30:
1496
- #line 1497 "unicorn_http.c"
1485
+ #line 1486 "unicorn_http.c"
1497
1486
  switch( (*p) ) {
1498
1487
  case 32: goto tr59;
1499
1488
  case 35: goto tr60;
@@ -1504,14 +1493,14 @@ case 30:
1504
1493
  goto st0;
1505
1494
  goto st30;
1506
1495
  tr57:
1507
- #line 360 "unicorn_http.rl"
1496
+ #line 349 "unicorn_http.rl"
1508
1497
  {MARK(start.query, p); }
1509
1498
  goto st31;
1510
1499
  st31:
1511
1500
  if ( ++p == pe )
1512
1501
  goto _test_eof31;
1513
1502
  case 31:
1514
- #line 1515 "unicorn_http.c"
1503
+ #line 1504 "unicorn_http.c"
1515
1504
  if ( (*p) < 65 ) {
1516
1505
  if ( 48 <= (*p) && (*p) <= 57 )
1517
1506
  goto st32;
@@ -1535,58 +1524,58 @@ case 32:
1535
1524
  goto st30;
1536
1525
  goto st0;
1537
1526
  tr7:
1538
- #line 327 "unicorn_http.rl"
1527
+ #line 316 "unicorn_http.rl"
1539
1528
  {MARK(mark, p); }
1540
- #line 331 "unicorn_http.rl"
1529
+ #line 320 "unicorn_http.rl"
1541
1530
  { downcase_char(deconst(p)); }
1542
1531
  goto st33;
1543
1532
  st33:
1544
1533
  if ( ++p == pe )
1545
1534
  goto _test_eof33;
1546
1535
  case 33:
1547
- #line 1548 "unicorn_http.c"
1536
+ #line 1537 "unicorn_http.c"
1548
1537
  switch( (*p) ) {
1549
1538
  case 84: goto tr63;
1550
1539
  case 116: goto tr63;
1551
1540
  }
1552
1541
  goto st0;
1553
1542
  tr63:
1554
- #line 331 "unicorn_http.rl"
1543
+ #line 320 "unicorn_http.rl"
1555
1544
  { downcase_char(deconst(p)); }
1556
1545
  goto st34;
1557
1546
  st34:
1558
1547
  if ( ++p == pe )
1559
1548
  goto _test_eof34;
1560
1549
  case 34:
1561
- #line 1562 "unicorn_http.c"
1550
+ #line 1551 "unicorn_http.c"
1562
1551
  switch( (*p) ) {
1563
1552
  case 84: goto tr64;
1564
1553
  case 116: goto tr64;
1565
1554
  }
1566
1555
  goto st0;
1567
1556
  tr64:
1568
- #line 331 "unicorn_http.rl"
1557
+ #line 320 "unicorn_http.rl"
1569
1558
  { downcase_char(deconst(p)); }
1570
1559
  goto st35;
1571
1560
  st35:
1572
1561
  if ( ++p == pe )
1573
1562
  goto _test_eof35;
1574
1563
  case 35:
1575
- #line 1576 "unicorn_http.c"
1564
+ #line 1565 "unicorn_http.c"
1576
1565
  switch( (*p) ) {
1577
1566
  case 80: goto tr65;
1578
1567
  case 112: goto tr65;
1579
1568
  }
1580
1569
  goto st0;
1581
1570
  tr65:
1582
- #line 331 "unicorn_http.rl"
1571
+ #line 320 "unicorn_http.rl"
1583
1572
  { downcase_char(deconst(p)); }
1584
1573
  goto st36;
1585
1574
  st36:
1586
1575
  if ( ++p == pe )
1587
1576
  goto _test_eof36;
1588
1577
  case 36:
1589
- #line 1590 "unicorn_http.c"
1578
+ #line 1579 "unicorn_http.c"
1590
1579
  switch( (*p) ) {
1591
1580
  case 58: goto tr66;
1592
1581
  case 83: goto tr67;
@@ -1594,7 +1583,7 @@ case 36:
1594
1583
  }
1595
1584
  goto st0;
1596
1585
  tr66:
1597
- #line 337 "unicorn_http.rl"
1586
+ #line 326 "unicorn_http.rl"
1598
1587
  {
1599
1588
  rb_hash_aset(hp->env, g_rack_url_scheme, STR_NEW(mark, p));
1600
1589
  }
@@ -1603,7 +1592,7 @@ st37:
1603
1592
  if ( ++p == pe )
1604
1593
  goto _test_eof37;
1605
1594
  case 37:
1606
- #line 1607 "unicorn_http.c"
1595
+ #line 1596 "unicorn_http.c"
1607
1596
  if ( (*p) == 47 )
1608
1597
  goto st38;
1609
1598
  goto st0;
@@ -1691,14 +1680,14 @@ case 42:
1691
1680
  goto st40;
1692
1681
  goto st0;
1693
1682
  tr72:
1694
- #line 327 "unicorn_http.rl"
1683
+ #line 316 "unicorn_http.rl"
1695
1684
  {MARK(mark, p); }
1696
1685
  goto st43;
1697
1686
  st43:
1698
1687
  if ( ++p == pe )
1699
1688
  goto _test_eof43;
1700
1689
  case 43:
1701
- #line 1702 "unicorn_http.c"
1690
+ #line 1691 "unicorn_http.c"
1702
1691
  switch( (*p) ) {
1703
1692
  case 37: goto st41;
1704
1693
  case 47: goto tr76;
@@ -1750,14 +1739,14 @@ case 44:
1750
1739
  goto st0;
1751
1740
  goto st40;
1752
1741
  tr73:
1753
- #line 327 "unicorn_http.rl"
1742
+ #line 316 "unicorn_http.rl"
1754
1743
  {MARK(mark, p); }
1755
1744
  goto st45;
1756
1745
  st45:
1757
1746
  if ( ++p == pe )
1758
1747
  goto _test_eof45;
1759
1748
  case 45:
1760
- #line 1761 "unicorn_http.c"
1749
+ #line 1750 "unicorn_http.c"
1761
1750
  switch( (*p) ) {
1762
1751
  case 37: goto st41;
1763
1752
  case 47: goto st0;
@@ -1835,14 +1824,14 @@ case 47:
1835
1824
  goto st0;
1836
1825
  goto st40;
1837
1826
  tr67:
1838
- #line 331 "unicorn_http.rl"
1827
+ #line 320 "unicorn_http.rl"
1839
1828
  { downcase_char(deconst(p)); }
1840
1829
  goto st48;
1841
1830
  st48:
1842
1831
  if ( ++p == pe )
1843
1832
  goto _test_eof48;
1844
1833
  case 48:
1845
- #line 1846 "unicorn_http.c"
1834
+ #line 1835 "unicorn_http.c"
1846
1835
  if ( (*p) == 58 )
1847
1836
  goto tr66;
1848
1837
  goto st0;
@@ -2358,14 +2347,14 @@ case 67:
2358
2347
  goto tr3;
2359
2348
  goto st0;
2360
2349
  tr2:
2361
- #line 327 "unicorn_http.rl"
2350
+ #line 316 "unicorn_http.rl"
2362
2351
  {MARK(mark, p); }
2363
2352
  goto st68;
2364
2353
  st68:
2365
2354
  if ( ++p == pe )
2366
2355
  goto _test_eof68;
2367
2356
  case 68:
2368
- #line 2369 "unicorn_http.c"
2357
+ #line 2358 "unicorn_http.c"
2369
2358
  switch( (*p) ) {
2370
2359
  case 32: goto tr3;
2371
2360
  case 33: goto st49;
@@ -2449,14 +2438,14 @@ case 70:
2449
2438
  goto st51;
2450
2439
  goto st0;
2451
2440
  tr100:
2452
- #line 336 "unicorn_http.rl"
2441
+ #line 325 "unicorn_http.rl"
2453
2442
  { request_method(hp, PTR_TO(mark), LEN(mark, p)); }
2454
2443
  goto st71;
2455
2444
  st71:
2456
2445
  if ( ++p == pe )
2457
2446
  goto _test_eof71;
2458
2447
  case 71:
2459
- #line 2460 "unicorn_http.c"
2448
+ #line 2449 "unicorn_http.c"
2460
2449
  switch( (*p) ) {
2461
2450
  case 42: goto tr101;
2462
2451
  case 47: goto tr102;
@@ -2465,14 +2454,14 @@ case 71:
2465
2454
  }
2466
2455
  goto st0;
2467
2456
  tr101:
2468
- #line 327 "unicorn_http.rl"
2457
+ #line 316 "unicorn_http.rl"
2469
2458
  {MARK(mark, p); }
2470
2459
  goto st72;
2471
2460
  st72:
2472
2461
  if ( ++p == pe )
2473
2462
  goto _test_eof72;
2474
2463
  case 72:
2475
- #line 2476 "unicorn_http.c"
2464
+ #line 2465 "unicorn_http.c"
2476
2465
  switch( (*p) ) {
2477
2466
  case 10: goto tr104;
2478
2467
  case 13: goto tr105;
@@ -2481,7 +2470,7 @@ case 72:
2481
2470
  }
2482
2471
  goto st0;
2483
2472
  tr106:
2484
- #line 341 "unicorn_http.rl"
2473
+ #line 330 "unicorn_http.rl"
2485
2474
  {
2486
2475
  VALUE str;
2487
2476
 
@@ -2499,7 +2488,7 @@ tr106:
2499
2488
  }
2500
2489
  goto st73;
2501
2490
  tr119:
2502
- #line 366 "unicorn_http.rl"
2491
+ #line 355 "unicorn_http.rl"
2503
2492
  {
2504
2493
  VALUE val;
2505
2494
 
@@ -2510,7 +2499,7 @@ tr119:
2510
2499
  if (!STR_CSTR_EQ(val, "*"))
2511
2500
  rb_hash_aset(hp->env, g_path_info, val);
2512
2501
  }
2513
- #line 341 "unicorn_http.rl"
2502
+ #line 330 "unicorn_http.rl"
2514
2503
  {
2515
2504
  VALUE str;
2516
2505
 
@@ -2528,14 +2517,14 @@ tr119:
2528
2517
  }
2529
2518
  goto st73;
2530
2519
  tr126:
2531
- #line 360 "unicorn_http.rl"
2520
+ #line 349 "unicorn_http.rl"
2532
2521
  {MARK(start.query, p); }
2533
- #line 361 "unicorn_http.rl"
2522
+ #line 350 "unicorn_http.rl"
2534
2523
  {
2535
2524
  VALIDATE_MAX_URI_LENGTH(LEN(start.query, p), QUERY_STRING);
2536
2525
  rb_hash_aset(hp->env, g_query_string, STR_NEW(start.query, p));
2537
2526
  }
2538
- #line 341 "unicorn_http.rl"
2527
+ #line 330 "unicorn_http.rl"
2539
2528
  {
2540
2529
  VALUE str;
2541
2530
 
@@ -2553,12 +2542,12 @@ tr126:
2553
2542
  }
2554
2543
  goto st73;
2555
2544
  tr131:
2556
- #line 361 "unicorn_http.rl"
2545
+ #line 350 "unicorn_http.rl"
2557
2546
  {
2558
2547
  VALIDATE_MAX_URI_LENGTH(LEN(start.query, p), QUERY_STRING);
2559
2548
  rb_hash_aset(hp->env, g_query_string, STR_NEW(start.query, p));
2560
2549
  }
2561
- #line 341 "unicorn_http.rl"
2550
+ #line 330 "unicorn_http.rl"
2562
2551
  {
2563
2552
  VALUE str;
2564
2553
 
@@ -2579,7 +2568,7 @@ st73:
2579
2568
  if ( ++p == pe )
2580
2569
  goto _test_eof73;
2581
2570
  case 73:
2582
- #line 2583 "unicorn_http.c"
2571
+ #line 2572 "unicorn_http.c"
2583
2572
  switch( (*p) ) {
2584
2573
  case 10: goto tr108;
2585
2574
  case 13: goto tr109;
@@ -2592,14 +2581,14 @@ case 73:
2592
2581
  goto st0;
2593
2582
  goto tr107;
2594
2583
  tr107:
2595
- #line 327 "unicorn_http.rl"
2584
+ #line 316 "unicorn_http.rl"
2596
2585
  {MARK(mark, p); }
2597
2586
  goto st74;
2598
2587
  st74:
2599
2588
  if ( ++p == pe )
2600
2589
  goto _test_eof74;
2601
2590
  case 74:
2602
- #line 2603 "unicorn_http.c"
2591
+ #line 2592 "unicorn_http.c"
2603
2592
  switch( (*p) ) {
2604
2593
  case 10: goto tr112;
2605
2594
  case 13: goto tr113;
@@ -2612,14 +2601,14 @@ case 74:
2612
2601
  goto st0;
2613
2602
  goto st74;
2614
2603
  tr110:
2615
- #line 327 "unicorn_http.rl"
2604
+ #line 316 "unicorn_http.rl"
2616
2605
  {MARK(mark, p); }
2617
2606
  goto st75;
2618
2607
  st75:
2619
2608
  if ( ++p == pe )
2620
2609
  goto _test_eof75;
2621
2610
  case 75:
2622
- #line 2623 "unicorn_http.c"
2611
+ #line 2612 "unicorn_http.c"
2623
2612
  if ( (*p) < 65 ) {
2624
2613
  if ( 48 <= (*p) && (*p) <= 57 )
2625
2614
  goto st76;
@@ -2643,20 +2632,20 @@ case 76:
2643
2632
  goto st74;
2644
2633
  goto st0;
2645
2634
  tr102:
2646
- #line 327 "unicorn_http.rl"
2635
+ #line 316 "unicorn_http.rl"
2647
2636
  {MARK(mark, p); }
2648
2637
  goto st77;
2649
2638
  tr147:
2650
- #line 340 "unicorn_http.rl"
2639
+ #line 329 "unicorn_http.rl"
2651
2640
  { rb_hash_aset(hp->env, g_http_host, STR_NEW(mark, p)); }
2652
- #line 327 "unicorn_http.rl"
2641
+ #line 316 "unicorn_http.rl"
2653
2642
  {MARK(mark, p); }
2654
2643
  goto st77;
2655
2644
  st77:
2656
2645
  if ( ++p == pe )
2657
2646
  goto _test_eof77;
2658
2647
  case 77:
2659
- #line 2660 "unicorn_http.c"
2648
+ #line 2649 "unicorn_http.c"
2660
2649
  switch( (*p) ) {
2661
2650
  case 10: goto tr117;
2662
2651
  case 13: goto tr118;
@@ -2696,7 +2685,7 @@ case 79:
2696
2685
  goto st77;
2697
2686
  goto st0;
2698
2687
  tr121:
2699
- #line 366 "unicorn_http.rl"
2688
+ #line 355 "unicorn_http.rl"
2700
2689
  {
2701
2690
  VALUE val;
2702
2691
 
@@ -2712,7 +2701,7 @@ st80:
2712
2701
  if ( ++p == pe )
2713
2702
  goto _test_eof80;
2714
2703
  case 80:
2715
- #line 2716 "unicorn_http.c"
2704
+ #line 2705 "unicorn_http.c"
2716
2705
  switch( (*p) ) {
2717
2706
  case 10: goto tr124;
2718
2707
  case 13: goto tr125;
@@ -2725,14 +2714,14 @@ case 80:
2725
2714
  goto st0;
2726
2715
  goto tr123;
2727
2716
  tr123:
2728
- #line 360 "unicorn_http.rl"
2717
+ #line 349 "unicorn_http.rl"
2729
2718
  {MARK(start.query, p); }
2730
2719
  goto st81;
2731
2720
  st81:
2732
2721
  if ( ++p == pe )
2733
2722
  goto _test_eof81;
2734
2723
  case 81:
2735
- #line 2736 "unicorn_http.c"
2724
+ #line 2725 "unicorn_http.c"
2736
2725
  switch( (*p) ) {
2737
2726
  case 10: goto tr129;
2738
2727
  case 13: goto tr130;
@@ -2745,14 +2734,14 @@ case 81:
2745
2734
  goto st0;
2746
2735
  goto st81;
2747
2736
  tr127:
2748
- #line 360 "unicorn_http.rl"
2737
+ #line 349 "unicorn_http.rl"
2749
2738
  {MARK(start.query, p); }
2750
2739
  goto st82;
2751
2740
  st82:
2752
2741
  if ( ++p == pe )
2753
2742
  goto _test_eof82;
2754
2743
  case 82:
2755
- #line 2756 "unicorn_http.c"
2744
+ #line 2745 "unicorn_http.c"
2756
2745
  if ( (*p) < 65 ) {
2757
2746
  if ( 48 <= (*p) && (*p) <= 57 )
2758
2747
  goto st83;
@@ -2776,58 +2765,58 @@ case 83:
2776
2765
  goto st81;
2777
2766
  goto st0;
2778
2767
  tr103:
2779
- #line 327 "unicorn_http.rl"
2768
+ #line 316 "unicorn_http.rl"
2780
2769
  {MARK(mark, p); }
2781
- #line 331 "unicorn_http.rl"
2770
+ #line 320 "unicorn_http.rl"
2782
2771
  { downcase_char(deconst(p)); }
2783
2772
  goto st84;
2784
2773
  st84:
2785
2774
  if ( ++p == pe )
2786
2775
  goto _test_eof84;
2787
2776
  case 84:
2788
- #line 2789 "unicorn_http.c"
2777
+ #line 2778 "unicorn_http.c"
2789
2778
  switch( (*p) ) {
2790
2779
  case 84: goto tr134;
2791
2780
  case 116: goto tr134;
2792
2781
  }
2793
2782
  goto st0;
2794
2783
  tr134:
2795
- #line 331 "unicorn_http.rl"
2784
+ #line 320 "unicorn_http.rl"
2796
2785
  { downcase_char(deconst(p)); }
2797
2786
  goto st85;
2798
2787
  st85:
2799
2788
  if ( ++p == pe )
2800
2789
  goto _test_eof85;
2801
2790
  case 85:
2802
- #line 2803 "unicorn_http.c"
2791
+ #line 2792 "unicorn_http.c"
2803
2792
  switch( (*p) ) {
2804
2793
  case 84: goto tr135;
2805
2794
  case 116: goto tr135;
2806
2795
  }
2807
2796
  goto st0;
2808
2797
  tr135:
2809
- #line 331 "unicorn_http.rl"
2798
+ #line 320 "unicorn_http.rl"
2810
2799
  { downcase_char(deconst(p)); }
2811
2800
  goto st86;
2812
2801
  st86:
2813
2802
  if ( ++p == pe )
2814
2803
  goto _test_eof86;
2815
2804
  case 86:
2816
- #line 2817 "unicorn_http.c"
2805
+ #line 2806 "unicorn_http.c"
2817
2806
  switch( (*p) ) {
2818
2807
  case 80: goto tr136;
2819
2808
  case 112: goto tr136;
2820
2809
  }
2821
2810
  goto st0;
2822
2811
  tr136:
2823
- #line 331 "unicorn_http.rl"
2812
+ #line 320 "unicorn_http.rl"
2824
2813
  { downcase_char(deconst(p)); }
2825
2814
  goto st87;
2826
2815
  st87:
2827
2816
  if ( ++p == pe )
2828
2817
  goto _test_eof87;
2829
2818
  case 87:
2830
- #line 2831 "unicorn_http.c"
2819
+ #line 2820 "unicorn_http.c"
2831
2820
  switch( (*p) ) {
2832
2821
  case 58: goto tr137;
2833
2822
  case 83: goto tr138;
@@ -2835,7 +2824,7 @@ case 87:
2835
2824
  }
2836
2825
  goto st0;
2837
2826
  tr137:
2838
- #line 337 "unicorn_http.rl"
2827
+ #line 326 "unicorn_http.rl"
2839
2828
  {
2840
2829
  rb_hash_aset(hp->env, g_rack_url_scheme, STR_NEW(mark, p));
2841
2830
  }
@@ -2844,7 +2833,7 @@ st88:
2844
2833
  if ( ++p == pe )
2845
2834
  goto _test_eof88;
2846
2835
  case 88:
2847
- #line 2848 "unicorn_http.c"
2836
+ #line 2837 "unicorn_http.c"
2848
2837
  if ( (*p) == 47 )
2849
2838
  goto st89;
2850
2839
  goto st0;
@@ -2932,14 +2921,14 @@ case 93:
2932
2921
  goto st91;
2933
2922
  goto st0;
2934
2923
  tr143:
2935
- #line 327 "unicorn_http.rl"
2924
+ #line 316 "unicorn_http.rl"
2936
2925
  {MARK(mark, p); }
2937
2926
  goto st94;
2938
2927
  st94:
2939
2928
  if ( ++p == pe )
2940
2929
  goto _test_eof94;
2941
2930
  case 94:
2942
- #line 2943 "unicorn_http.c"
2931
+ #line 2932 "unicorn_http.c"
2943
2932
  switch( (*p) ) {
2944
2933
  case 37: goto st92;
2945
2934
  case 47: goto tr147;
@@ -2991,14 +2980,14 @@ case 95:
2991
2980
  goto st0;
2992
2981
  goto st91;
2993
2982
  tr144:
2994
- #line 327 "unicorn_http.rl"
2983
+ #line 316 "unicorn_http.rl"
2995
2984
  {MARK(mark, p); }
2996
2985
  goto st96;
2997
2986
  st96:
2998
2987
  if ( ++p == pe )
2999
2988
  goto _test_eof96;
3000
2989
  case 96:
3001
- #line 3002 "unicorn_http.c"
2990
+ #line 2991 "unicorn_http.c"
3002
2991
  switch( (*p) ) {
3003
2992
  case 37: goto st92;
3004
2993
  case 47: goto st0;
@@ -3076,14 +3065,14 @@ case 98:
3076
3065
  goto st0;
3077
3066
  goto st91;
3078
3067
  tr138:
3079
- #line 331 "unicorn_http.rl"
3068
+ #line 320 "unicorn_http.rl"
3080
3069
  { downcase_char(deconst(p)); }
3081
3070
  goto st99;
3082
3071
  st99:
3083
3072
  if ( ++p == pe )
3084
3073
  goto _test_eof99;
3085
3074
  case 99:
3086
- #line 3087 "unicorn_http.c"
3075
+ #line 3076 "unicorn_http.c"
3087
3076
  if ( (*p) == 58 )
3088
3077
  goto tr137;
3089
3078
  goto st0;
@@ -3103,7 +3092,7 @@ case 100:
3103
3092
  goto tr152;
3104
3093
  goto st0;
3105
3094
  tr151:
3106
- #line 376 "unicorn_http.rl"
3095
+ #line 365 "unicorn_http.rl"
3107
3096
  {
3108
3097
  hp->len.chunk = step_incr(hp->len.chunk, (*p), 16);
3109
3098
  if (hp->len.chunk < 0)
@@ -3114,7 +3103,7 @@ st101:
3114
3103
  if ( ++p == pe )
3115
3104
  goto _test_eof101;
3116
3105
  case 101:
3117
- #line 3118 "unicorn_http.c"
3106
+ #line 3107 "unicorn_http.c"
3118
3107
  switch( (*p) ) {
3119
3108
  case 10: goto tr153;
3120
3109
  case 13: goto st102;
@@ -3131,7 +3120,7 @@ case 101:
3131
3120
  goto tr152;
3132
3121
  goto st0;
3133
3122
  tr153:
3134
- #line 405 "unicorn_http.rl"
3123
+ #line 394 "unicorn_http.rl"
3135
3124
  {
3136
3125
  HP_FL_SET(hp, INTRAILER);
3137
3126
  cs = http_parser_en_Trailers;
@@ -3144,7 +3133,7 @@ st123:
3144
3133
  if ( ++p == pe )
3145
3134
  goto _test_eof123;
3146
3135
  case 123:
3147
- #line 3148 "unicorn_http.c"
3136
+ #line 3137 "unicorn_http.c"
3148
3137
  goto st0;
3149
3138
  st102:
3150
3139
  if ( ++p == pe )
@@ -3154,7 +3143,7 @@ case 102:
3154
3143
  goto tr153;
3155
3144
  goto st0;
3156
3145
  tr152:
3157
- #line 376 "unicorn_http.rl"
3146
+ #line 365 "unicorn_http.rl"
3158
3147
  {
3159
3148
  hp->len.chunk = step_incr(hp->len.chunk, (*p), 16);
3160
3149
  if (hp->len.chunk < 0)
@@ -3165,7 +3154,7 @@ st103:
3165
3154
  if ( ++p == pe )
3166
3155
  goto _test_eof103;
3167
3156
  case 103:
3168
- #line 3169 "unicorn_http.c"
3157
+ #line 3158 "unicorn_http.c"
3169
3158
  switch( (*p) ) {
3170
3159
  case 10: goto st104;
3171
3160
  case 13: goto st107;
@@ -3186,7 +3175,7 @@ st104:
3186
3175
  case 104:
3187
3176
  goto tr159;
3188
3177
  tr159:
3189
- #line 413 "unicorn_http.rl"
3178
+ #line 402 "unicorn_http.rl"
3190
3179
  {
3191
3180
  skip_chunk_data_hack: {
3192
3181
  size_t nr = MIN((size_t)hp->len.chunk, REMAINING);
@@ -3208,7 +3197,7 @@ st105:
3208
3197
  if ( ++p == pe )
3209
3198
  goto _test_eof105;
3210
3199
  case 105:
3211
- #line 3212 "unicorn_http.c"
3200
+ #line 3201 "unicorn_http.c"
3212
3201
  switch( (*p) ) {
3213
3202
  case 10: goto st100;
3214
3203
  case 13: goto st106;
@@ -3415,30 +3404,30 @@ case 113:
3415
3404
  goto st113;
3416
3405
  goto st0;
3417
3406
  tr172:
3418
- #line 333 "unicorn_http.rl"
3407
+ #line 322 "unicorn_http.rl"
3419
3408
  { MARK(mark, p); }
3420
- #line 335 "unicorn_http.rl"
3409
+ #line 324 "unicorn_http.rl"
3421
3410
  { write_cont_value(hp, buffer, p); }
3422
3411
  goto st114;
3423
3412
  tr175:
3424
- #line 335 "unicorn_http.rl"
3413
+ #line 324 "unicorn_http.rl"
3425
3414
  { write_cont_value(hp, buffer, p); }
3426
3415
  goto st114;
3427
3416
  tr182:
3428
- #line 333 "unicorn_http.rl"
3417
+ #line 322 "unicorn_http.rl"
3429
3418
  { MARK(mark, p); }
3430
- #line 334 "unicorn_http.rl"
3419
+ #line 323 "unicorn_http.rl"
3431
3420
  { write_value(hp, buffer, p); }
3432
3421
  goto st114;
3433
3422
  tr185:
3434
- #line 334 "unicorn_http.rl"
3423
+ #line 323 "unicorn_http.rl"
3435
3424
  { write_value(hp, buffer, p); }
3436
3425
  goto st114;
3437
3426
  st114:
3438
3427
  if ( ++p == pe )
3439
3428
  goto _test_eof114;
3440
3429
  case 114:
3441
- #line 3442 "unicorn_http.c"
3430
+ #line 3431 "unicorn_http.c"
3442
3431
  switch( (*p) ) {
3443
3432
  case 9: goto st115;
3444
3433
  case 10: goto tr167;
@@ -3467,14 +3456,14 @@ case 114:
3467
3456
  goto tr169;
3468
3457
  goto st0;
3469
3458
  tr171:
3470
- #line 333 "unicorn_http.rl"
3459
+ #line 322 "unicorn_http.rl"
3471
3460
  { MARK(mark, p); }
3472
3461
  goto st115;
3473
3462
  st115:
3474
3463
  if ( ++p == pe )
3475
3464
  goto _test_eof115;
3476
3465
  case 115:
3477
- #line 3478 "unicorn_http.c"
3466
+ #line 3467 "unicorn_http.c"
3478
3467
  switch( (*p) ) {
3479
3468
  case 9: goto tr171;
3480
3469
  case 10: goto tr172;
@@ -3486,14 +3475,14 @@ case 115:
3486
3475
  goto st0;
3487
3476
  goto tr170;
3488
3477
  tr170:
3489
- #line 333 "unicorn_http.rl"
3478
+ #line 322 "unicorn_http.rl"
3490
3479
  { MARK(mark, p); }
3491
3480
  goto st116;
3492
3481
  st116:
3493
3482
  if ( ++p == pe )
3494
3483
  goto _test_eof116;
3495
3484
  case 116:
3496
- #line 3497 "unicorn_http.c"
3485
+ #line 3486 "unicorn_http.c"
3497
3486
  switch( (*p) ) {
3498
3487
  case 10: goto tr175;
3499
3488
  case 13: goto tr176;
@@ -3506,35 +3495,35 @@ case 116:
3506
3495
  goto st0;
3507
3496
  goto st116;
3508
3497
  tr173:
3509
- #line 333 "unicorn_http.rl"
3498
+ #line 322 "unicorn_http.rl"
3510
3499
  { MARK(mark, p); }
3511
- #line 335 "unicorn_http.rl"
3500
+ #line 324 "unicorn_http.rl"
3512
3501
  { write_cont_value(hp, buffer, p); }
3513
3502
  goto st117;
3514
3503
  tr176:
3515
- #line 335 "unicorn_http.rl"
3504
+ #line 324 "unicorn_http.rl"
3516
3505
  { write_cont_value(hp, buffer, p); }
3517
3506
  goto st117;
3518
3507
  tr183:
3519
- #line 333 "unicorn_http.rl"
3508
+ #line 322 "unicorn_http.rl"
3520
3509
  { MARK(mark, p); }
3521
- #line 334 "unicorn_http.rl"
3510
+ #line 323 "unicorn_http.rl"
3522
3511
  { write_value(hp, buffer, p); }
3523
3512
  goto st117;
3524
3513
  tr186:
3525
- #line 334 "unicorn_http.rl"
3514
+ #line 323 "unicorn_http.rl"
3526
3515
  { write_value(hp, buffer, p); }
3527
3516
  goto st117;
3528
3517
  st117:
3529
3518
  if ( ++p == pe )
3530
3519
  goto _test_eof117;
3531
3520
  case 117:
3532
- #line 3533 "unicorn_http.c"
3521
+ #line 3522 "unicorn_http.c"
3533
3522
  if ( (*p) == 10 )
3534
3523
  goto st114;
3535
3524
  goto st0;
3536
3525
  tr167:
3537
- #line 400 "unicorn_http.rl"
3526
+ #line 389 "unicorn_http.rl"
3538
3527
  {
3539
3528
  cs = http_parser_first_final;
3540
3529
  goto post_exec;
@@ -3544,7 +3533,7 @@ st124:
3544
3533
  if ( ++p == pe )
3545
3534
  goto _test_eof124;
3546
3535
  case 124:
3547
- #line 3548 "unicorn_http.c"
3536
+ #line 3537 "unicorn_http.c"
3548
3537
  goto st0;
3549
3538
  st118:
3550
3539
  if ( ++p == pe )
@@ -3554,20 +3543,20 @@ case 118:
3554
3543
  goto tr167;
3555
3544
  goto st0;
3556
3545
  tr169:
3557
- #line 329 "unicorn_http.rl"
3546
+ #line 318 "unicorn_http.rl"
3558
3547
  { MARK(start.field, p); }
3559
- #line 330 "unicorn_http.rl"
3548
+ #line 319 "unicorn_http.rl"
3560
3549
  { snake_upcase_char(deconst(p)); }
3561
3550
  goto st119;
3562
3551
  tr178:
3563
- #line 330 "unicorn_http.rl"
3552
+ #line 319 "unicorn_http.rl"
3564
3553
  { snake_upcase_char(deconst(p)); }
3565
3554
  goto st119;
3566
3555
  st119:
3567
3556
  if ( ++p == pe )
3568
3557
  goto _test_eof119;
3569
3558
  case 119:
3570
- #line 3571 "unicorn_http.c"
3559
+ #line 3560 "unicorn_http.c"
3571
3560
  switch( (*p) ) {
3572
3561
  case 33: goto tr178;
3573
3562
  case 58: goto tr179;
@@ -3593,18 +3582,18 @@ case 119:
3593
3582
  goto tr178;
3594
3583
  goto st0;
3595
3584
  tr181:
3596
- #line 333 "unicorn_http.rl"
3585
+ #line 322 "unicorn_http.rl"
3597
3586
  { MARK(mark, p); }
3598
3587
  goto st120;
3599
3588
  tr179:
3600
- #line 332 "unicorn_http.rl"
3589
+ #line 321 "unicorn_http.rl"
3601
3590
  { hp->s.field_len = LEN(start.field, p); }
3602
3591
  goto st120;
3603
3592
  st120:
3604
3593
  if ( ++p == pe )
3605
3594
  goto _test_eof120;
3606
3595
  case 120:
3607
- #line 3608 "unicorn_http.c"
3596
+ #line 3597 "unicorn_http.c"
3608
3597
  switch( (*p) ) {
3609
3598
  case 9: goto tr181;
3610
3599
  case 10: goto tr182;
@@ -3616,14 +3605,14 @@ case 120:
3616
3605
  goto st0;
3617
3606
  goto tr180;
3618
3607
  tr180:
3619
- #line 333 "unicorn_http.rl"
3608
+ #line 322 "unicorn_http.rl"
3620
3609
  { MARK(mark, p); }
3621
3610
  goto st121;
3622
3611
  st121:
3623
3612
  if ( ++p == pe )
3624
3613
  goto _test_eof121;
3625
3614
  case 121:
3626
- #line 3627 "unicorn_http.c"
3615
+ #line 3616 "unicorn_http.c"
3627
3616
  switch( (*p) ) {
3628
3617
  case 10: goto tr185;
3629
3618
  case 13: goto tr186;
@@ -3764,7 +3753,7 @@ case 121:
3764
3753
  _out: {}
3765
3754
  }
3766
3755
 
3767
- #line 474 "unicorn_http.rl"
3756
+ #line 463 "unicorn_http.rl"
3768
3757
  post_exec: /* "_out:" also goes here */
3769
3758
  if (hp->cs != http_parser_error)
3770
3759
  hp->cs = cs;
@@ -3944,7 +3933,7 @@ static VALUE HttpParser_clear(VALUE self)
3944
3933
  return HttpParser_init(self);
3945
3934
 
3946
3935
  http_parser_init(hp);
3947
- my_hash_clear(hp->env);
3936
+ rb_hash_clear(hp->env);
3948
3937
 
3949
3938
  return self;
3950
3939
  }
@@ -4273,6 +4262,7 @@ void Init_unicorn_http(void)
4273
4262
  e414 = rb_define_class_under(mUnicorn, "RequestURITooLongError",
4274
4263
  eHttpParserError);
4275
4264
 
4265
+ id_uminus = rb_intern("-@");
4276
4266
  init_globals();
4277
4267
  rb_define_alloc_func(cHttpParser, HttpParser_alloc);
4278
4268
  rb_define_method(cHttpParser, "initialize", HttpParser_init, 0);
@@ -4323,5 +4313,7 @@ void Init_unicorn_http(void)
4323
4313
  id_clear = rb_intern("clear");
4324
4314
  #endif
4325
4315
  id_is_chunked_p = rb_intern("is_chunked?");
4316
+
4317
+ init_epollexclusive(mUnicorn);
4326
4318
  }
4327
4319
  #undef SET_GLOBAL