aboutsummaryrefslogtreecommitdiffstats
path: root/src/bin/rbw-agent
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2020-07-25 04:33:51 -0400
committerJesse Luehrs <doy@tozt.net>2020-07-25 04:33:51 -0400
commit6b38682d711fb74feddcc06c4da18f8e771858df (patch)
tree52c36bba21247f0abb7062f87e3e0745dd496b4f /src/bin/rbw-agent
parent56e9b720bade5dcdc6505952c1bf81bdeca26bcd (diff)
downloadrbw-6b38682d711fb74feddcc06c4da18f8e771858df.tar.gz
rbw-6b38682d711fb74feddcc06c4da18f8e771858df.zip
implement rbw unlocked
Diffstat (limited to 'src/bin/rbw-agent')
-rw-r--r--src/bin/rbw-agent/actions.rs14
-rw-r--r--src/bin/rbw-agent/agent.rs9
2 files changed, 23 insertions, 0 deletions
diff --git a/src/bin/rbw-agent/actions.rs b/src/bin/rbw-agent/actions.rs
index a01f510..1a5a3c5 100644
--- a/src/bin/rbw-agent/actions.rs
+++ b/src/bin/rbw-agent/actions.rs
@@ -357,6 +357,20 @@ pub async fn lock(
Ok(())
}
+pub async fn check_lock(
+ sock: &mut crate::sock::Sock,
+ state: std::sync::Arc<tokio::sync::RwLock<crate::agent::State>>,
+ _tty: Option<&str>,
+) -> anyhow::Result<()> {
+ if state.read().await.needs_unlock() {
+ return Err(anyhow::anyhow!("agent is locked"));
+ }
+
+ respond_ack(sock).await?;
+
+ Ok(())
+}
+
pub async fn sync(
sock: &mut crate::sock::Sock,
ack: bool,
diff --git a/src/bin/rbw-agent/agent.rs b/src/bin/rbw-agent/agent.rs
index 2d9b08e..23f684b 100644
--- a/src/bin/rbw-agent/agent.rs
+++ b/src/bin/rbw-agent/agent.rs
@@ -143,6 +143,15 @@ async fn handle_request(
.await?;
true
}
+ rbw::protocol::Action::CheckLock => {
+ crate::actions::check_lock(
+ sock,
+ state.clone(),
+ req.tty.as_deref(),
+ )
+ .await?;
+ false
+ }
rbw::protocol::Action::Lock => {
crate::actions::lock(sock, state.clone()).await?;
false