chiark / gitweb /
mgmtchannel: Change contained type to a TimedFdReader
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Mon, 17 May 2021 13:55:31 +0000 (14:55 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Mon, 17 May 2021 13:57:51 +0000 (14:57 +0100)
This is in preparation for timeouts.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
src/mgmtchannel.rs

index f334412e96b474b3cb1ed7403cb5c38da69be46e..e245408a879551c39055bf2e1b52ceecbc10d0aa 100644 (file)
@@ -35,8 +35,8 @@ impl From<rmp_serde::encode::Error> for MgmtChannelWriteError {
 }
 
 pub struct MgmtChannel {
-  pub read:  FrameReader<Box<dyn Read >>,
-  pub write: FrameWriter<Box<dyn Write>>,
+  pub read:  FrameReader<TimedFdReader>,
+  pub write: FrameWriter<TimedFdWriter>,
 }
 
 impl Debug for MgmtChannel{ 
@@ -57,11 +57,13 @@ impl MgmtChannel {
   }
 
   #[throws(AE)]
-  pub fn new<U: IoTryClone + Read + Write + 'static>(conn: U) -> MgmtChannel {
+  pub fn new<U>(conn: U) -> MgmtChannel
+  where U: IoTryClone + Read + Write + IntoRawFd + 'static,
+  {
     let read = conn.try_clone().context("dup the command stream")?;
-    let read = Box::new(read) as Box<dyn Read>;
+    let read = TimedFdReader::new(read).context("set up timed reader")?;
     let read = FrameReader::new(read);
-    let write = Box::new(conn) as Box<dyn Write>;
+    let write = TimedFdWriter::new(conn).context("set up timed writerr")?;
     let write = FrameWriter::new(write);
     MgmtChannel { read, write }
   }