@@ -1649,30 +1649,25 @@ async fn server_req_respond<'buf, 'st, R: AsyncRead, W: AsyncWrite>(
16491649
16501650 // Send response header
16511651
1652- let mut headers = [ http1:: EMPTY_HEADER ; HEADERS_MAX ] ;
1653- let mut headers_len = 0 ;
1652+ let mut headers = ArrayVec :: < http1:: Header , HEADERS_MAX > :: new ( ) ;
16541653
16551654 for h in rdata. headers . iter ( ) {
1656- if headers_len >= headers. len ( ) {
1655+ if headers. remaining_capacity ( ) == 0 {
16571656 return Err ( Error :: BadMessage ) ;
16581657 }
16591658
1660- headers[ headers_len ] = http1:: Header {
1659+ headers. push ( http1:: Header {
16611660 name : h. name ,
16621661 value : h. value ,
1663- } ;
1664-
1665- headers_len += 1 ;
1662+ } ) ;
16661663 }
16671664
1668- let headers = & headers[ ..headers_len] ;
1669-
16701665 let mut resp_take = resp. take ( ) . unwrap ( ) ;
16711666
16721667 let ( header, prepare_body) = match resp_take. prepare_header (
16731668 rdata. code ,
16741669 rdata. reason ,
1675- headers,
1670+ & headers,
16761671 http1:: BodySize :: Known ( rdata. body . len ( ) ) ,
16771672 resp_state,
16781673 ) {
@@ -3573,8 +3568,7 @@ where
35733568 }
35743569
35753570 let ( header, mut prepare_body) = {
3576- let mut headers = [ http1:: EMPTY_HEADER ; HEADERS_MAX ] ;
3577- let mut headers_len = 0 ;
3571+ let mut headers = ArrayVec :: < http1:: Header , HEADERS_MAX > :: new ( ) ;
35783572
35793573 for h in rdata. headers . iter ( ) {
35803574 // Don't send these headers
@@ -3586,26 +3580,22 @@ where
35863580 continue ;
35873581 }
35883582
3589- if headers_len >= headers. len ( ) {
3583+ if headers. remaining_capacity ( ) == 0 {
35903584 return Err ( Error :: BadMessage ) ;
35913585 }
35923586
3593- headers[ headers_len ] = http1:: Header {
3587+ headers. push ( http1:: Header {
35943588 name : h. name ,
35953589 value : h. value ,
3596- } ;
3597-
3598- headers_len += 1 ;
3590+ } ) ;
35993591 }
36003592
3601- let headers = & headers[ ..headers_len] ;
3602-
36033593 let mut resp_take = resp. take ( ) . unwrap ( ) ;
36043594
36053595 match resp_take. prepare_header (
36063596 rdata. code ,
36073597 rdata. reason ,
3608- headers,
3598+ & headers,
36093599 http1:: BodySize :: Known ( rdata. body . len ( ) ) ,
36103600 resp_state,
36113601 ) {
@@ -3652,8 +3642,8 @@ where
36523642 // Send response header
36533643
36543644 let ( header, mut prepare_body) = {
3655- let mut headers = [ http1 :: EMPTY_HEADER ; HEADERS_MAX ] ;
3656- let mut headers_len = 0 ;
3645+ let mut ws_ext = ArrayVec :: < u8 , 512 > :: new ( ) ;
3646+ let mut headers = ArrayVec :: < http1 :: Header , HEADERS_MAX > :: new ( ) ;
36573647
36583648 let mut body_size = http1:: BodySize :: Unknown ;
36593649
@@ -3680,67 +3670,57 @@ where
36803670 }
36813671 }
36823672
3683- if headers_len >= headers. len ( ) {
3673+ if headers. remaining_capacity ( ) == 0 {
36843674 return Err ( Error :: BadMessage ) ;
36853675 }
36863676
3687- headers[ headers_len ] = http1:: Header {
3677+ headers. push ( http1:: Header {
36883678 name : h. name ,
36893679 value : h. value ,
3690- } ;
3691-
3692- headers_len += 1 ;
3680+ } ) ;
36933681 }
36943682
36953683 if body_size == http1:: BodySize :: Unknown && !rdata. more {
36963684 body_size = http1:: BodySize :: Known ( rdata. body . len ( ) ) ;
36973685 }
36983686
3699- let mut ws_ext = ArrayVec :: < u8 , 512 > :: new ( ) ;
3700-
37013687 if let Some ( ws_req_data) = & ws_req_data {
37023688 let accept_data = & ws_req_data. accept ;
37033689
3704- if headers_len + 4 > headers. len ( ) {
3690+ if headers. remaining_capacity ( ) < 4 {
37053691 return Err ( Error :: BadMessage ) ;
37063692 }
37073693
3708- headers[ headers_len ] = http1:: Header {
3694+ headers. push ( http1:: Header {
37093695 name : "Upgrade" ,
37103696 value : b"websocket" ,
3711- } ;
3712- headers_len += 1 ;
3697+ } ) ;
37133698
3714- headers[ headers_len ] = http1:: Header {
3699+ headers. push ( http1:: Header {
37153700 name : "Connection" ,
37163701 value : b"Upgrade" ,
3717- } ;
3718- headers_len += 1 ;
3702+ } ) ;
37193703
3720- headers[ headers_len ] = http1:: Header {
3704+ headers. push ( http1:: Header {
37213705 name : "Sec-WebSocket-Accept" ,
37223706 value : accept_data. as_bytes ( ) ,
3723- } ;
3724- headers_len += 1 ;
3707+ } ) ;
37253708
37263709 if let Some ( ( config, _) ) = & ws_req_data. deflate_config {
37273710 if write_ws_ext_header_value ( config, & mut ws_ext) . is_err ( ) {
37283711 return Err ( Error :: Compression ) ;
37293712 }
37303713
3731- headers[ headers_len ] = http1:: Header {
3714+ headers. push ( http1:: Header {
37323715 name : "Sec-WebSocket-Extensions" ,
37333716 value : ws_ext. as_ref ( ) ,
3734- } ;
3735- headers_len += 1 ;
3717+ } ) ;
37363718 }
37373719 }
37383720
3739- let headers = & headers[ ..headers_len] ;
3740-
37413721 let mut resp_take = resp. take ( ) . unwrap ( ) ;
37423722
3743- match resp_take. prepare_header ( rdata. code , rdata. reason , headers, body_size, resp_state) {
3723+ match resp_take. prepare_header ( rdata. code , rdata. reason , & headers, body_size, resp_state) {
37443724 Ok ( ret) => ret,
37453725 Err ( e) => {
37463726 * resp = Some ( resp_take) ;
0 commit comments