From 9bfd14efd09cfafa0cf7d7896e663ed392c96ff7 Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Sat, 2 May 2020 14:56:26 -0400 Subject: don't kill the agent if it fails to parse a message --- src/bin/rbw-agent/agent.rs | 9 +++++++++ src/bin/rbw-agent/sock.rs | 9 +++++++-- 2 files changed, 16 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/bin/rbw-agent/agent.rs b/src/bin/rbw-agent/agent.rs index e80e1c6..9021569 100644 --- a/src/bin/rbw-agent/agent.rs +++ b/src/bin/rbw-agent/agent.rs @@ -118,6 +118,15 @@ async fn handle_request( .recv() .await .context("failed to receive incoming message")?; + let req = match req { + Ok(msg) => msg, + Err(error) => { + sock.send(&rbw::protocol::Response::Error { error }) + .await + .context("failed to send response")?; + return Ok(()); + } + }; let set_timeout = match &req.action { rbw::protocol::Action::Login => { crate::actions::login(sock, state.clone(), req.tty.as_deref()) diff --git a/src/bin/rbw-agent/sock.rs b/src/bin/rbw-agent/sock.rs index 688f87a..bb2d6fb 100644 --- a/src/bin/rbw-agent/sock.rs +++ b/src/bin/rbw-agent/sock.rs @@ -26,14 +26,19 @@ impl Sock { Ok(()) } - pub async fn recv(&mut self) -> anyhow::Result { + pub async fn recv( + &mut self, + ) -> anyhow::Result> + { let Self(sock) = self; let mut buf = tokio::io::BufStream::new(sock); let mut line = String::new(); buf.read_line(&mut line) .await .context("failed to read message from socket")?; - Ok(serde_json::from_str(&line).context("failed to parse message")?) + Ok(serde_json::from_str(&line).map_err(|e| { + format!("failed to parse message '{}': {}", line, e) + })) } } -- cgit v1.2.3-54-g00ecf