diff options
Diffstat (limited to 'sip/src/transport')
-rw-r--r-- | sip/src/transport/tcp.rs | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/sip/src/transport/tcp.rs b/sip/src/transport/tcp.rs index efe433d..58dfb7e 100644 --- a/sip/src/transport/tcp.rs +++ b/sip/src/transport/tcp.rs @@ -4,7 +4,7 @@ use anyhow::Result; use log::debug; use std::str::FromStr; use tokio::{ - io::{AsyncBufReadExt, AsyncWriteExt, BufReader, BufWriter}, + io::{AsyncBufReadExt, AsyncReadExt, AsyncWriteExt, BufReader, BufWriter}, net::{ tcp::{OwnedReadHalf, OwnedWriteHalf}, TcpStream, @@ -34,8 +34,18 @@ impl Transport for TcpTransport { while !message.ends_with("\r\n\r\n") { g.read_line(&mut message).await?; } - let mesg = Message::from_str(message.trim())?; + let mut mesg = Message::from_str(message.trim())?; debug!("<- {mesg}"); + + let cl = mesg + .content_length() + .transpose()? + .map(|e| e.0) + .unwrap_or_default(); + let mut body = vec![0u8; cl]; + g.read_exact(&mut body).await?; + *mesg.body_mut() = String::from_utf8_lossy_owned(body); + Ok(mesg) } async fn send(&self, request: Message) -> Result<()> { |