chiark / gitweb /
before line-based ?
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Wed, 22 Jul 2020 00:05:53 +0000 (01:05 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Wed, 22 Jul 2020 00:05:53 +0000 (01:05 +0100)
src/cmdlistener.rs
src/commands.rs [new file with mode: 0644]
src/imports.rs
src/lib.rs

index e95d143ec86a1040646751f8b4018e57ba6c6a17..68992b7e9854545bc2df5a4360f54a8a4e0fba78 100644 (file)
@@ -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<u32, anyhow::Error>,
+  read : StreamDeserializer<'de,IoRead<BufReader<UnixStream>>,
+                            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!("<error: {}>", 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()?;
         
         <Result<_,StartupError>>::Ok(())
diff --git a/src/commands.rs b/src/commands.rs
new file mode 100644 (file)
index 0000000..ac607f4
--- /dev/null
@@ -0,0 +1,12 @@
+
+use crate::imports::*;
+
+#[derive(Serialize,Deserialize)]
+pub enum MgmtCommand {
+  Noop { }
+}
+
+#[derive(Serialize,Deserialize)]
+pub enum MgmtResponse {
+  Fine { }
+}
index f93167d301dc74324513ef9ec973a113d2021b5a..132ac039037ad5d15f99dfe29365d67d6a6171df 100644 (file)
@@ -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::*;
 
index a4b53158b937f1290e1c40b924c2b08da3648528..728c7888eaa35ad4dbfcc9c393309b504ea8c43e 100644 (file)
@@ -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;