1
1
use anyhow:: Result ;
2
+ use log:: trace;
2
3
use std:: {
3
4
io:: { BufRead , BufReader , Read } ,
4
5
net:: TcpStream ,
@@ -14,15 +15,18 @@ pub struct HttpRequestRaw {
14
15
15
16
impl HttpRequestRaw {
16
17
pub fn from_tcp ( stream : & TcpStream ) -> Result < HttpRequestRaw > {
18
+ trace ! ( "trying to convert TCP message into HTTP request" ) ;
17
19
let mut buf_reader = BufReader :: new ( stream) ;
18
20
19
21
let mut request_line = String :: new ( ) ;
20
22
let mut headers = Vec :: new ( ) ;
21
23
let mut body = Vec :: new ( ) ;
22
24
25
+ trace ! ( "read request line" ) ;
23
26
buf_reader. read_line ( & mut request_line) ?;
24
27
25
28
let mut line = String :: new ( ) ;
29
+ trace ! ( "proceed to read read headers" ) ;
26
30
while buf_reader. read_line ( & mut line) ? > 0 {
27
31
if line. trim ( ) . is_empty ( ) {
28
32
break ;
@@ -43,13 +47,16 @@ impl HttpRequestRaw {
43
47
. iter ( )
44
48
. find ( |header| header. name == "Content-Length" )
45
49
{
50
+ trace ! ( "found Content-Length header, using value to read body" ) ;
46
51
let content_len: usize = content_len. value . parse ( ) ?;
47
52
if content_len > 0 {
53
+ trace ! ( "read body ({} bytes)" , content_len) ;
48
54
body = vec ! [ 0 ; content_len] ;
49
55
buf_reader. read_exact ( & mut body) ?;
50
56
}
51
57
}
52
58
59
+ trace ! ( "finish processing TCP stream" ) ;
53
60
Ok ( HttpRequestRaw {
54
61
request_line,
55
62
headers,
0 commit comments