fn read_headers()

in src/vtok_rpc/src/transport.rs [94:126]


    fn read_headers<R: BufRead>(reader: &mut R) -> Result<HttpHeaders> {
        let mut content_length = None;

        loop {
            let mut ln = String::new();
            reader.read_line(&mut ln).map_err(Error::IoError)?;
            let ln = ln.as_str().trim();

            if ln.len() == 0 {
                break;
            }

            let mut iter = ln.split(": ");
            match (iter.next(), iter.next()) {
                (Some("Content-Length"), Some(len)) => {
                    let len = len.parse::<usize>().map_err(|_| Error::ParseError)?;
                    content_length = Some(len);
                }
                (Some("Content-Type"), Some("application/json")) => (),
                _ => return Err(Error::ParseError),
            }
        }

        match content_length {
            Some(content_length) => {
                if content_length > Self::MAX_BODY_LEN {
                    return Err(Error::MsgLen);
                }
                Ok(HttpHeaders { content_length })
            }
            _ => Err(Error::ParseError),
        }
    }