@@ -29,7 +29,7 @@ use crate::proto::h1::{
29
29
use crate :: proto:: RequestHead ;
30
30
use crate :: proto:: { BodyLength , MessageHead , RequestLine } ;
31
31
32
- const MAX_HEADERS : usize = 100 ;
32
+ pub ( crate ) const DEFAULT_MAX_HEADERS : usize = 100 ;
33
33
const AVERAGE_HEADER_SIZE : usize = 30 ; // totally scientific
34
34
#[ cfg( feature = "server" ) ]
35
35
const MAX_URI_LEN : usize = ( u16:: MAX - 1 ) as usize ;
@@ -139,9 +139,10 @@ impl Http1Transaction for Server {
139
139
// but we *never* read any of it until after httparse has assigned
140
140
// values into it. By not zeroing out the stack memory, this saves
141
141
// a good ~5% on pipeline benchmarks.
142
- let mut headers_indices = [ MaybeUninit :: < HeaderIndices > :: uninit ( ) ; MAX_HEADERS ] ;
142
+ let mut headers_indices = vec ! [ MaybeUninit :: <HeaderIndices >:: uninit( ) ; ctx . h1_max_headers ] ;
143
143
{
144
- let mut headers = [ MaybeUninit :: < httparse:: Header < ' _ > > :: uninit ( ) ; MAX_HEADERS ] ;
144
+ let mut headers =
145
+ vec ! [ MaybeUninit :: <httparse:: Header <' _>>:: uninit( ) ; ctx. h1_max_headers] ;
145
146
trace ! ( bytes = buf. len( ) , "Request.parse" ) ;
146
147
let mut req = httparse:: Request :: new ( & mut [ ] ) ;
147
148
let bytes = buf. as_ref ( ) ;
@@ -966,9 +967,11 @@ impl Http1Transaction for Client {
966
967
967
968
// Loop to skip information status code headers (100 Continue, etc).
968
969
loop {
969
- let mut headers_indices = [ MaybeUninit :: < HeaderIndices > :: uninit ( ) ; MAX_HEADERS ] ;
970
+ let mut headers_indices =
971
+ vec ! [ MaybeUninit :: <HeaderIndices >:: uninit( ) ; ctx. h1_max_headers] ;
970
972
let ( len, status, reason, version, headers_len) = {
971
- let mut headers = [ MaybeUninit :: < httparse:: Header < ' _ > > :: uninit ( ) ; MAX_HEADERS ] ;
973
+ let mut headers =
974
+ vec ! [ MaybeUninit :: <httparse:: Header <' _>>:: uninit( ) ; ctx. h1_max_headers] ;
972
975
trace ! ( bytes = buf. len( ) , "Response.parse" ) ;
973
976
let mut res = httparse:: Response :: new ( & mut [ ] ) ;
974
977
let bytes = buf. as_ref ( ) ;
@@ -1610,6 +1613,7 @@ mod tests {
1610
1613
cached_headers : & mut None ,
1611
1614
req_method : & mut method,
1612
1615
h1_parser_config : Default :: default ( ) ,
1616
+ h1_max_headers : DEFAULT_MAX_HEADERS ,
1613
1617
h1_header_read_timeout : None ,
1614
1618
h1_header_read_timeout_fut : & mut None ,
1615
1619
h1_header_read_timeout_running : & mut false ,
@@ -1641,6 +1645,7 @@ mod tests {
1641
1645
cached_headers : & mut None ,
1642
1646
req_method : & mut Some ( crate :: Method :: GET ) ,
1643
1647
h1_parser_config : Default :: default ( ) ,
1648
+ h1_max_headers : DEFAULT_MAX_HEADERS ,
1644
1649
h1_header_read_timeout : None ,
1645
1650
h1_header_read_timeout_fut : & mut None ,
1646
1651
h1_header_read_timeout_running : & mut false ,
@@ -1667,6 +1672,7 @@ mod tests {
1667
1672
cached_headers : & mut None ,
1668
1673
req_method : & mut None ,
1669
1674
h1_parser_config : Default :: default ( ) ,
1675
+ h1_max_headers : DEFAULT_MAX_HEADERS ,
1670
1676
h1_header_read_timeout : None ,
1671
1677
h1_header_read_timeout_fut : & mut None ,
1672
1678
h1_header_read_timeout_running : & mut false ,
@@ -1691,6 +1697,7 @@ mod tests {
1691
1697
cached_headers : & mut None ,
1692
1698
req_method : & mut Some ( crate :: Method :: GET ) ,
1693
1699
h1_parser_config : Default :: default ( ) ,
1700
+ h1_max_headers : DEFAULT_MAX_HEADERS ,
1694
1701
h1_header_read_timeout : None ,
1695
1702
h1_header_read_timeout_fut : & mut None ,
1696
1703
h1_header_read_timeout_running : & mut false ,
@@ -1717,6 +1724,7 @@ mod tests {
1717
1724
cached_headers : & mut None ,
1718
1725
req_method : & mut Some ( crate :: Method :: GET ) ,
1719
1726
h1_parser_config : Default :: default ( ) ,
1727
+ h1_max_headers : DEFAULT_MAX_HEADERS ,
1720
1728
h1_header_read_timeout : None ,
1721
1729
h1_header_read_timeout_fut : & mut None ,
1722
1730
h1_header_read_timeout_running : & mut false ,
@@ -1747,6 +1755,7 @@ mod tests {
1747
1755
cached_headers : & mut None ,
1748
1756
req_method : & mut Some ( crate :: Method :: GET ) ,
1749
1757
h1_parser_config,
1758
+ h1_max_headers : DEFAULT_MAX_HEADERS ,
1750
1759
h1_header_read_timeout : None ,
1751
1760
h1_header_read_timeout_fut : & mut None ,
1752
1761
h1_header_read_timeout_running : & mut false ,
@@ -1774,6 +1783,7 @@ mod tests {
1774
1783
cached_headers : & mut None ,
1775
1784
req_method : & mut Some ( crate :: Method :: GET ) ,
1776
1785
h1_parser_config : Default :: default ( ) ,
1786
+ h1_max_headers : DEFAULT_MAX_HEADERS ,
1777
1787
h1_header_read_timeout : None ,
1778
1788
h1_header_read_timeout_fut : & mut None ,
1779
1789
h1_header_read_timeout_running : & mut false ,
@@ -1796,6 +1806,7 @@ mod tests {
1796
1806
cached_headers : & mut None ,
1797
1807
req_method : & mut None ,
1798
1808
h1_parser_config : Default :: default ( ) ,
1809
+ h1_max_headers : DEFAULT_MAX_HEADERS ,
1799
1810
h1_header_read_timeout : None ,
1800
1811
h1_header_read_timeout_fut : & mut None ,
1801
1812
h1_header_read_timeout_running : & mut false ,
@@ -1839,6 +1850,7 @@ mod tests {
1839
1850
cached_headers : & mut None ,
1840
1851
req_method : & mut None ,
1841
1852
h1_parser_config : Default :: default ( ) ,
1853
+ h1_max_headers : DEFAULT_MAX_HEADERS ,
1842
1854
h1_header_read_timeout : None ,
1843
1855
h1_header_read_timeout_fut : & mut None ,
1844
1856
h1_header_read_timeout_running : & mut false ,
@@ -1863,6 +1875,7 @@ mod tests {
1863
1875
cached_headers : & mut None ,
1864
1876
req_method : & mut None ,
1865
1877
h1_parser_config : Default :: default ( ) ,
1878
+ h1_max_headers : DEFAULT_MAX_HEADERS ,
1866
1879
h1_header_read_timeout : None ,
1867
1880
h1_header_read_timeout_fut : & mut None ,
1868
1881
h1_header_read_timeout_running : & mut false ,
@@ -2096,6 +2109,7 @@ mod tests {
2096
2109
cached_headers: & mut None ,
2097
2110
req_method: & mut Some ( Method :: GET ) ,
2098
2111
h1_parser_config: Default :: default ( ) ,
2112
+ h1_max_headers: DEFAULT_MAX_HEADERS ,
2099
2113
h1_header_read_timeout: None ,
2100
2114
h1_header_read_timeout_fut: & mut None ,
2101
2115
h1_header_read_timeout_running: & mut false ,
@@ -2120,6 +2134,7 @@ mod tests {
2120
2134
cached_headers : & mut None ,
2121
2135
req_method : & mut Some ( m) ,
2122
2136
h1_parser_config : Default :: default ( ) ,
2137
+ h1_max_headers : DEFAULT_MAX_HEADERS ,
2123
2138
h1_header_read_timeout : None ,
2124
2139
h1_header_read_timeout_fut : & mut None ,
2125
2140
h1_header_read_timeout_running : & mut false ,
@@ -2144,6 +2159,7 @@ mod tests {
2144
2159
cached_headers : & mut None ,
2145
2160
req_method : & mut Some ( Method :: GET ) ,
2146
2161
h1_parser_config : Default :: default ( ) ,
2162
+ h1_max_headers : DEFAULT_MAX_HEADERS ,
2147
2163
h1_header_read_timeout : None ,
2148
2164
h1_header_read_timeout_fut : & mut None ,
2149
2165
h1_header_read_timeout_running : & mut false ,
@@ -2663,6 +2679,7 @@ mod tests {
2663
2679
cached_headers : & mut None ,
2664
2680
req_method : & mut Some ( Method :: GET ) ,
2665
2681
h1_parser_config : Default :: default ( ) ,
2682
+ h1_max_headers : DEFAULT_MAX_HEADERS ,
2666
2683
h1_header_read_timeout : None ,
2667
2684
h1_header_read_timeout_fut : & mut None ,
2668
2685
h1_header_read_timeout_running : & mut false ,
@@ -2751,6 +2768,7 @@ mod tests {
2751
2768
cached_headers : & mut headers,
2752
2769
req_method : & mut None ,
2753
2770
h1_parser_config : Default :: default ( ) ,
2771
+ h1_max_headers : DEFAULT_MAX_HEADERS ,
2754
2772
h1_header_read_timeout : None ,
2755
2773
h1_header_read_timeout_fut : & mut None ,
2756
2774
h1_header_read_timeout_running : & mut false ,
@@ -2795,6 +2813,7 @@ mod tests {
2795
2813
cached_headers : & mut headers,
2796
2814
req_method : & mut None ,
2797
2815
h1_parser_config : Default :: default ( ) ,
2816
+ h1_max_headers : DEFAULT_MAX_HEADERS ,
2798
2817
h1_header_read_timeout : None ,
2799
2818
h1_header_read_timeout_fut : & mut None ,
2800
2819
h1_header_read_timeout_running : & mut false ,
0 commit comments