summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Cargo.toml20
-rw-r--r--lib.rs0
-rw-r--r--src/lib.rs34
-rw-r--r--src/transport.rs9
-rw-r--r--src/tty.rs5
5 files changed, 53 insertions, 15 deletions
diff --git a/Cargo.toml b/Cargo.toml
index 2dad6ce..c87e926 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -18,31 +18,31 @@ coveralls = { repository = "softprops/shipflit" }
maintenance = { status = "actively-developed" }
[dependencies]
-base64 = "0.11"
+base64 = "0.13"
byteorder = "1.3"
-bytes = "0.4"
+bytes = "1.0"
chrono = { version = "0.4", optional = true, features = ["serde"] }
flate2 = "1.0"
futures-util = "0.3"
-futures_codec = "0.3"
-hyper = "0.13"
-hyper-openssl = { version = "0.8", optional = true }
-hyperlocal = { version = "0.7", optional = true }
+futures_codec = "0.4"
+hyper = { version = "0.14", features = ["client", "http1", "tcp", "stream"] }
+hyper-openssl = { version = "0.9", optional = true }
+hyperlocal = { version = "0.8", optional = true }
log = "0.4"
mime = "0.3"
openssl = { version = "0.10", optional = true }
-pin-project = "0.4"
+pin-project = "1.0"
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
tar = "0.4"
-tokio = "0.2"
+tokio = "1.0"
url = "2.1"
[dev-dependencies]
-env_logger = "0.7"
+env_logger = "0.8"
# Required for examples to run
futures = "0.3.1"
-tokio = { version = "0.2.6", features = ["macros"] }
+tokio = { version = "1.0", features = ["macros", "rt-multi-thread"] }
[features]
default = ["chrono", "unix-socket", "tls"]
diff --git a/lib.rs b/lib.rs
deleted file mode 100644
index e69de29..0000000
--- a/lib.rs
+++ /dev/null
diff --git a/src/lib.rs b/src/lib.rs
index f44919a..9a93c02 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -956,6 +956,10 @@ impl Docker {
pub fn new() -> Docker {
match env::var("DOCKER_HOST").ok() {
Some(host) => {
+ #[cfg(feature = "unix-socket")]
+ if let Some(path) = host.strip_prefix("unix://") {
+ return Docker::unix(path);
+ }
let host = host.parse().expect("invalid url");
Docker::host(host)
}
@@ -1210,3 +1214,33 @@ impl Default for Docker {
Self::new()
}
}
+
+#[cfg(test)]
+mod tests {
+ #[cfg(feature = "unix-socket")]
+ #[test]
+ fn unix_host_env() {
+ use super::Docker;
+ use std::env;
+ env::set_var("DOCKER_HOST", "unix:///docker.sock");
+ let d = Docker::new();
+ match d.transport {
+ crate::transport::Transport::Unix { path, .. } => {
+ assert_eq!(path, "/docker.sock");
+ }
+ _ => {
+ panic!("Expected transport to be unix.");
+ }
+ }
+ env::set_var("DOCKER_HOST", "http://localhost:8000");
+ let d = Docker::new();
+ match d.transport {
+ crate::transport::Transport::Tcp { host, .. } => {
+ assert_eq!(host, "http://localhost:8000");
+ }
+ _ => {
+ panic!("Expected transport to be http.");
+ }
+ }
+ }
+}
diff --git a/src/transport.rs b/src/transport.rs
index 3ad3b9e..b496e87 100644
--- a/src/transport.rs
+++ b/src/transport.rs
@@ -251,7 +251,7 @@ impl Transport {
let response = self.send_request(req).await?;
match response.status() {
- StatusCode::SWITCHING_PROTOCOLS => Ok(response.into_body().on_upgrade().await?),
+ StatusCode::SWITCHING_PROTOCOLS => Ok(hyper::upgrade::on(response).await?),
_ => Err(Error::ConnectionNotUpgraded),
}
}
@@ -294,7 +294,12 @@ where
cx: &mut Context<'_>,
buf: &mut [u8],
) -> Poll<io::Result<usize>> {
- self.project().tokio_multiplexer.poll_read(cx, buf)
+ let mut readbuf = tokio::io::ReadBuf::new(buf);
+ match self.project().tokio_multiplexer.poll_read(cx, &mut readbuf) {
+ Poll::Pending => Poll::Pending,
+ Poll::Ready(Ok(())) => Poll::Ready(Ok(readbuf.filled().len())),
+ Poll::Ready(Err(e)) => Poll::Ready(Err(e)),
+ }
}
}
diff --git a/src/tty.rs b/src/tty.rs
index a26846f..67c72bd 100644
--- a/src/tty.rs
+++ b/src/tty.rs
@@ -1,13 +1,12 @@
//! Types for working with docker TTY streams
use crate::{Error, Result};
-use bytes::{BigEndian, ByteOrder};
use futures_util::{
io::{AsyncRead, AsyncReadExt, AsyncWrite},
stream::{Stream, TryStreamExt},
};
use pin_project::pin_project;
-use std::io;
+use std::{convert::TryInto, io};
/// An enum representing a chunk of TTY text streamed from a Docker container.
///
@@ -63,7 +62,7 @@ where
}
let size_bytes = &header_bytes[4..];
- let data_length = BigEndian::read_u32(size_bytes);
+ let data_length = u32::from_be_bytes(size_bytes.try_into().unwrap());
let mut data = vec![0u8; data_length as usize];