aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/bin/rbw-agent/agent.rs9
-rw-r--r--src/bin/rbw-agent/sock.rs9
2 files changed, 16 insertions, 2 deletions
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<rbw::protocol::Request> {
+ pub async fn recv(
+ &mut self,
+ ) -> anyhow::Result<std::result::Result<rbw::protocol::Request, String>>
+ {
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)
+ }))
}
}