From 2749e181133cec9f413b297f7601a3d264d95b5f Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Wed, 22 Jul 2020 01:05:53 +0100 Subject: [PATCH] before line-based ? --- src/cmdlistener.rs | 25 +++++++++++++++++++------ src/commands.rs | 12 ++++++++++++ src/imports.rs | 1 + src/lib.rs | 1 + 4 files changed, 33 insertions(+), 6 deletions(-) create mode 100644 src/commands.rs diff --git a/src/cmdlistener.rs b/src/cmdlistener.rs index e95d143e..68992b7e 100644 --- a/src/cmdlistener.rs +++ b/src/cmdlistener.rs @@ -12,22 +12,29 @@ use uds::UnixStreamExt; //use uds::UnixListenerExt; use pwd::Passwd; +use serde_json::ser::Serializer; +use serde_json::de::{IoRead,Deserializer,StreamDeserializer}; + const SOCKET_PATH : &str = "command.socket"; // xxx pub struct CommandListener { listener : UnixListener, } -struct CommandStream { - conn : UnixStream, +struct CommandStream<'de> { euid : Result, + read : StreamDeserializer<'de,IoRead>, + MgmtCommand>, + write : UnixStream, } type CSE = anyhow::Error; -impl CommandStream { - #[throws(CSE)] - pub fn mainloop(&mut self) { +impl CommandStream<'_> { + pub fn mainloop(self) -> Result<(),CSE> { + loop { + + } } } @@ -84,7 +91,13 @@ impl CommandListener { })().unwrap_or_else(|e| format!("", e.0)); write!(&mut desc, " user={}", user_desc)?; - let mut cs = CommandStream { conn, euid }; + let read = conn.try_clone().context("dup the command stream")?; + let write = conn; + let read = BufReader::new(read); + let read = IoRead::new(read); + let read = StreamDeserializer::new(read); + + let cs = CommandStream { read, write, euid }; cs.mainloop()?; >::Ok(()) diff --git a/src/commands.rs b/src/commands.rs new file mode 100644 index 00000000..ac607f44 --- /dev/null +++ b/src/commands.rs @@ -0,0 +1,12 @@ + +use crate::imports::*; + +#[derive(Serialize,Deserialize)] +pub enum MgmtCommand { + Noop { } +} + +#[derive(Serialize,Deserialize)] +pub enum MgmtResponse { + Fine { } +} diff --git a/src/imports.rs b/src/imports.rs index f93167d3..132ac039 100644 --- a/src/imports.rs +++ b/src/imports.rs @@ -59,6 +59,7 @@ pub use crate::keydata::*; pub use crate::updates::*; pub use crate::sse; pub use crate::error::*; +pub use crate::commands::*; pub use crate::slotmap_slot_idx::*; pub use crate::cmdlistener::*; diff --git a/src/lib.rs b/src/lib.rs index a4b53158..728c7888 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -14,4 +14,5 @@ pub mod session; pub mod api; pub mod spec; pub mod cmdlistener; +pub mod commands; #[path="slotmap-slot-idx.rs"] pub mod slotmap_slot_idx; -- 2.30.2