diff --git a/Cargo.lock b/Cargo.lock index 42b326ca297..e2890614c7a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1808,6 +1808,7 @@ version = "0.1.0" name = "example_test_helper" version = "0.1.0" dependencies = [ + "cfg-if", "duct", "libc", "regex", @@ -3406,6 +3407,7 @@ dependencies = [ name = "ockam_transport_tcp" version = "0.75.0" dependencies = [ + "cfg-if", "hashbrown 0.13.2", "ockam_core", "ockam_macros", diff --git a/implementations/rust/ockam/ockam_transport_tcp/Cargo.toml b/implementations/rust/ockam/ockam_transport_tcp/Cargo.toml index 553502604dc..60f110bbe1f 100644 --- a/implementations/rust/ockam/ockam_transport_tcp/Cargo.toml +++ b/implementations/rust/ockam/ockam_transport_tcp/Cargo.toml @@ -45,6 +45,7 @@ rand = "0.7" hashbrown = { version = "0.13", default-features = false } tracing = { version = "0.1", default-features = false } socket2 = "0.4.7" +cfg-if = "1.0.0" [dev-dependencies] trybuild = { version = "1.0", features = ["diff"] } diff --git a/implementations/rust/ockam/ockam_transport_tcp/src/workers/sender.rs b/implementations/rust/ockam/ockam_transport_tcp/src/workers/sender.rs index 708f00953ff..f943349db6d 100644 --- a/implementations/rust/ockam/ockam_transport_tcp/src/workers/sender.rs +++ b/implementations/rust/ockam/ockam_transport_tcp/src/workers/sender.rs @@ -1,4 +1,5 @@ use crate::{TcpRecvProcessor, TcpRouterHandle}; +use cfg_if::cfg_if; use core::time::Duration; use ockam_core::{ async_trait, @@ -180,7 +181,6 @@ impl Worker for TcpSendWorker { async fn initialize(&mut self, ctx: &mut Self::Context) -> Result<()> { ctx.set_cluster(crate::CLUSTER_NAME).await?; - if self.tx.is_none() { debug!(addr = %self.peer, "Connecting"); let connection = match TcpStream::connect(self.peer).await { @@ -196,10 +196,16 @@ impl Worker for TcpSendWorker { } }; - let keepalive = TcpKeepalive::new() + let mut keepalive = TcpKeepalive::new() .with_time(Duration::from_secs(300)) - .with_retries(2) .with_interval(Duration::from_secs(75)); + + cfg_if! { + if #[cfg(unix)] { + keepalive = keepalive.with_retries(2); + } + } + let socket = SockRef::from(&connection); socket.set_tcp_keepalive(&keepalive).unwrap(); diff --git a/implementations/rust/ockam/ockam_vault/src/storage/file_storage.rs b/implementations/rust/ockam/ockam_vault/src/storage/file_storage.rs index 95810cacfe8..4121cdc5265 100644 --- a/implementations/rust/ockam/ockam_vault/src/storage/file_storage.rs +++ b/implementations/rust/ockam/ockam_vault/src/storage/file_storage.rs @@ -1,4 +1,5 @@ use crate::VaultError; +use cfg_if::cfg_if; use fs2::FileExt; //locking use ockam_core::compat::boxed::Box; use ockam_core::errcode::{Kind, Origin}; @@ -119,17 +120,23 @@ impl FileStorage { ) -> Result<()> { let data = serde_json::to_vec(vault).map_err(|_| VaultError::StorageError)?; use std::io::prelude::*; - use std::os::unix::prelude::*; - let _ = std::fs::remove_file(temp_path); - let mut file = std::fs::OpenOptions::new() - .write(true) - // `create_new` means we error if it exists. This ensures the mode we - // provide is respect (the `mode(0o600)` is only used if creating the - // file) - .create_new(true) - .mode(0o600) // TODO: not portable, what about windows? - .open(temp_path) - .map_err(|_| VaultError::StorageError)?; + cfg_if! { + if #[cfg(windows)] { + let mut file = std::fs::OpenOptions::new() + .write(true) + .create(true) + .open(temp_path) + .map_err(|_| VaultError::StorageError)?; + } else { + use std::os::unix::fs::OpenOptionsExt; + let mut file = std::fs::OpenOptions::new() + .write(true) + .create(true) + .mode(0o600) + .open(temp_path) + .map_err(|_| VaultError::StorageError)?; + } + } file.write_all(&data) .map_err(|_| VaultError::StorageError)?; file.flush().map_err(|_| VaultError::StorageError)?; diff --git a/tools/docs/example_test_helper/Cargo.toml b/tools/docs/example_test_helper/Cargo.toml index 1a714d6989a..ec628aeb60c 100644 --- a/tools/docs/example_test_helper/Cargo.toml +++ b/tools/docs/example_test_helper/Cargo.toml @@ -15,3 +15,4 @@ thiserror = "1.0" tracing = "0.1" tracing-subscriber = { version = "0.3", features = ["env-filter"] } tempfile = "3" +cfg-if = "1.0.0" diff --git a/tools/docs/example_test_helper/src/lib.rs b/tools/docs/example_test_helper/src/lib.rs index ed9cebfec85..d3685250475 100644 --- a/tools/docs/example_test_helper/src/lib.rs +++ b/tools/docs/example_test_helper/src/lib.rs @@ -41,6 +41,8 @@ //! assert_eq!(version.matches(".").count(), 2); //! ``` //! +use cfg_if::cfg_if; +#[cfg(unix)] use duct::unix::HandleExt; use duct::{cmd, Handle}; use regex::Regex; @@ -228,10 +230,12 @@ impl Drop for CmdRunner { /// /// On non-unix, kill process. fn drop(&mut self) { - if cfg!(unix) { - let _ = self.handle.send_signal(libc::SIGINT); - } else { - let _ = self.handle.kill(); + cfg_if! { + if #[cfg(unix)] { + let _ = self.handle.send_signal(libc::SIGINT); + } else { + let _ = self.handle.kill(); + } } } }