diff --git a/README.md b/README.md index e28a1af..b19fbec 100644 --- a/README.md +++ b/README.md @@ -25,16 +25,18 @@ use adb_client::ADBServer; let mut server = ADBServer::default(); let mut device = server.get_device(None).expect("cannot get device"); -device.shell_command(None, ["df", "-h"]); +device.shell_command(["df", "-h"]); ``` ### Get available ADB devices ```rust use adb_client::ADBServer; -use std::net::Ipv4Addr; +use std::net::{SocketAddrV4, Ipv4Addr}; -let mut server = ADBServer::new(Ipv4Addr::from([127,0,0,1]), 5037); +let server_ip = Ipv4Addr::new(127, 0, 0, 1); +let server_port = 5037; +let mut server = ADBServer::new(SocketAddrV4::new(server_ip, server_port)); server.devices(); ``` @@ -49,7 +51,7 @@ use std::path::Path; let mut server = ADBServer::default(); let mut device = server.get_device(None).expect("cannot get device"); let mut input = File::open(Path::new("/tmp")).unwrap(); -device.send::<&str,&str>(None, &mut input, "/data/local/tmp"); +device.send(&mut input, "/data/local/tmp"); ``` ## Rust binary diff --git a/examples/adb_cli.rs b/examples/adb_cli.rs index 77ffb38..a0572c2 100644 --- a/examples/adb_cli.rs +++ b/examples/adb_cli.rs @@ -100,38 +100,38 @@ fn main() -> Result<()> { match local { LocalCommand::Pull { path, filename } => { let mut output = File::create(Path::new(&filename))?; - device.recv(opt.serial.as_ref(), &path, &mut output)?; + device.recv(&path, &mut output)?; println!("Downloaded {path} as {filename}"); } LocalCommand::Push { filename, path } => { let mut input = File::open(Path::new(&filename))?; - device.send(opt.serial.as_ref(), &mut input, &path)?; + device.send(&mut input, &path)?; println!("Uploaded {filename} to {path}"); } LocalCommand::List { path } => { - device.list(opt.serial.as_ref(), path)?; + device.list(path)?; } LocalCommand::Stat { path } => { - let stat_response = device.stat(opt.serial, path)?; + let stat_response = device.stat(path)?; println!("{}", stat_response); } LocalCommand::Shell { command } => { if command.is_empty() { - device.shell(opt.serial.as_ref())?; + device.shell()?; } else { - let stdout = device.shell_command(opt.serial.as_ref(), command)?; + let stdout = device.shell_command(command)?; io::stdout().write_all(&stdout)?; } } LocalCommand::HostFeatures => { println!("Available host features"); - for feature in device.host_features(opt.serial.as_ref())? { + for feature in device.host_features()? { println!("- {}", feature); } } LocalCommand::Reboot { sub_command } => { println!("Reboots device"); - device.reboot(opt.serial.as_ref(), sub_command.into())? + device.reboot(sub_command.into())? } } } diff --git a/src/server/device_commands/host_features.rs b/src/server/device_commands/host_features.rs index 42da618..44a4efe 100644 --- a/src/server/device_commands/host_features.rs +++ b/src/server/device_commands/host_features.rs @@ -5,13 +5,10 @@ use crate::{ impl ADBServerDevice { /// Lists available ADB server features. - pub fn host_features(&mut self, serial: Option<&S>) -> Result> { - match serial { - None => self.connect()?.send_adb_request(AdbCommand::TransportAny)?, - Some(serial) => self - .connect()? - .send_adb_request(AdbCommand::TransportSerial(serial.to_string()))?, - } + pub fn host_features(&mut self) -> Result> { + let serial = self.identifier.clone(); + self.connect()? + .send_adb_request(AdbCommand::TransportSerial(serial))?; let features = self .get_transport()? diff --git a/src/server/device_commands/list.rs b/src/server/device_commands/list.rs index f3ba7d0..aeea758 100644 --- a/src/server/device_commands/list.rs +++ b/src/server/device_commands/list.rs @@ -10,13 +10,10 @@ use std::{ impl ADBServerDevice { /// Lists files in [path] on the device. - pub fn list>(&mut self, serial: Option<&S>, path: A) -> Result<()> { - match serial { - None => self.connect()?.send_adb_request(AdbCommand::TransportAny)?, - Some(serial) => self - .connect()? - .send_adb_request(AdbCommand::TransportSerial(serial.to_string()))?, - } + pub fn list>(&mut self, path: A) -> Result<()> { + let serial = self.identifier.clone(); + self.connect()? + .send_adb_request(AdbCommand::TransportSerial(serial))?; // Set device in SYNC mode self.get_transport()?.send_adb_request(AdbCommand::Sync)?; diff --git a/src/server/device_commands/reboot.rs b/src/server/device_commands/reboot.rs index 82bbf9d..1fc4edf 100644 --- a/src/server/device_commands/reboot.rs +++ b/src/server/device_commands/reboot.rs @@ -5,17 +5,10 @@ use crate::{ impl ADBServerDevice { /// Reboots the device - pub fn reboot( - &mut self, - serial: Option<&S>, - reboot_type: RebootType, - ) -> Result<()> { - match serial { - None => self.connect()?.send_adb_request(AdbCommand::TransportAny)?, - Some(serial) => self - .connect()? - .send_adb_request(AdbCommand::TransportSerial(serial.to_string()))?, - } + pub fn reboot(&mut self, reboot_type: RebootType) -> Result<()> { + let serial = self.identifier.clone(); + self.connect()? + .send_adb_request(AdbCommand::TransportSerial(serial))?; self.get_transport()? .proxy_connection(AdbCommand::Reboot(reboot_type), false) diff --git a/src/server/device_commands/recv.rs b/src/server/device_commands/recv.rs index 31975b2..43ca828 100644 --- a/src/server/device_commands/recv.rs +++ b/src/server/device_commands/recv.rs @@ -7,18 +7,10 @@ use std::io::{Read, Write}; impl ADBServerDevice { /// Receives [path] to [stream] from the device. - pub fn recv>( - &mut self, - serial: Option<&S>, - path: A, - stream: &mut dyn Write, - ) -> Result<()> { - match serial { - None => self.connect()?.send_adb_request(AdbCommand::TransportAny)?, - Some(serial) => self - .connect()? - .send_adb_request(AdbCommand::TransportSerial(serial.to_string()))?, - } + pub fn recv>(&mut self, path: A, stream: &mut dyn Write) -> Result<()> { + let serial = self.identifier.clone(); + self.connect()? + .send_adb_request(AdbCommand::TransportSerial(serial))?; // Set device in SYNC mode self.get_transport()?.send_adb_request(AdbCommand::Sync)?; diff --git a/src/server/device_commands/send.rs b/src/server/device_commands/send.rs index 5160a0c..9223c4e 100644 --- a/src/server/device_commands/send.rs +++ b/src/server/device_commands/send.rs @@ -12,18 +12,10 @@ use std::{ impl ADBServerDevice { /// Sends [stream] to [path] on the device. - pub fn send>( - &mut self, - serial: Option<&S>, - stream: &mut dyn Read, - path: A, - ) -> Result<()> { - match serial { - None => self.connect()?.send_adb_request(AdbCommand::TransportAny)?, - Some(serial) => self - .connect()? - .send_adb_request(AdbCommand::TransportSerial(serial.to_string()))?, - } + pub fn send>(&mut self, stream: &mut dyn Read, path: A) -> Result<()> { + let serial = self.identifier.clone(); + self.connect()? + .send_adb_request(AdbCommand::TransportSerial(serial))?; // Set device in SYNC mode self.get_transport()?.send_adb_request(AdbCommand::Sync)?; diff --git a/src/server/device_commands/shell.rs b/src/server/device_commands/shell.rs index 26ddf61..2b12dd4 100644 --- a/src/server/device_commands/shell.rs +++ b/src/server/device_commands/shell.rs @@ -29,22 +29,18 @@ impl ADBServerDevice { /// Runs 'command' in a shell on the device, and return its output and error streams. pub fn shell_command( &mut self, - serial: Option<&S>, command: impl IntoIterator, ) -> Result> { - let supported_features = self.host_features(serial)?; + let supported_features = self.host_features()?; if !supported_features.contains(&HostFeatures::ShellV2) && !supported_features.contains(&HostFeatures::Cmd) { return Err(RustADBError::ADBShellNotSupported); } - match serial { - None => self.connect()?.send_adb_request(AdbCommand::TransportAny)?, - Some(serial) => self - .connect()? - .send_adb_request(AdbCommand::TransportSerial(serial.to_string()))?, - } + let serial = self.identifier.clone(); + self.connect()? + .send_adb_request(AdbCommand::TransportSerial(serial))?; self.get_transport()? .send_adb_request(AdbCommand::ShellCommand( command @@ -74,7 +70,7 @@ impl ADBServerDevice { } /// Starts an interactive shell session on the device. Redirects stdin/stdout/stderr as appropriate. - pub fn shell(&mut self, serial: Option<&S>) -> Result<()> { + pub fn shell(&mut self) -> Result<()> { let mut adb_termios = ADBTermios::new(std::io::stdin())?; adb_termios.set_adb_termios()?; @@ -82,19 +78,16 @@ impl ADBServerDevice { // TODO: FORWARD CTRL+C !! - let supported_features = self.host_features(serial)?; + let supported_features = self.host_features()?; if !supported_features.contains(&HostFeatures::ShellV2) && !supported_features.contains(&HostFeatures::Cmd) { return Err(RustADBError::ADBShellNotSupported); } - match serial { - None => self.connect()?.send_adb_request(AdbCommand::TransportAny)?, - Some(serial) => self - .connect()? - .send_adb_request(AdbCommand::TransportSerial(serial.to_string()))?, - } + let serial = self.identifier.clone(); + self.connect()? + .send_adb_request(AdbCommand::TransportSerial(serial))?; self.get_transport()?.send_adb_request(AdbCommand::Shell)?; // let read_stream = Arc::new(self.tcp_stream); diff --git a/src/server/device_commands/stat.rs b/src/server/device_commands/stat.rs index 79e9db8..e6fb8eb 100644 --- a/src/server/device_commands/stat.rs +++ b/src/server/device_commands/stat.rs @@ -81,17 +81,10 @@ impl ADBServerDevice { } /// Stat file given as [path] on the device. - pub fn stat>( - &mut self, - serial: Option, - path: A, - ) -> Result { - match serial { - None => self.connect()?.send_adb_request(AdbCommand::TransportAny)?, - Some(serial) => self - .connect()? - .send_adb_request(AdbCommand::TransportSerial(serial.to_string()))?, - } + pub fn stat>(&mut self, path: A) -> Result { + let serial = self.identifier.clone(); + self.connect()? + .send_adb_request(AdbCommand::TransportSerial(serial))?; // Set device in SYNC mode self.get_transport()?.send_adb_request(AdbCommand::Sync)?; diff --git a/tests/tests.rs b/tests/tests.rs index e2f3dda..2f52b3f 100644 --- a/tests/tests.rs +++ b/tests/tests.rs @@ -24,8 +24,8 @@ mod tests { fn test_shell() { let mut device = new_device(); - device.shell_command(None, vec!["ls"]).unwrap(); - device.shell_command(None, vec!["pwd"]).unwrap(); + device.shell_command(vec!["ls"]).unwrap(); + device.shell_command(vec!["pwd"]).unwrap(); } #[test] @@ -61,20 +61,20 @@ mod tests { const TEST_FILENAME: &'static str = "/data/local/tmp/test_file"; // Send it device - .send::<&str, &str>(None, &mut c, TEST_FILENAME) + .send(&mut c, TEST_FILENAME) .expect("cannot send file"); // Pull it to memory let mut res = vec![]; device - .recv::<&str, &str>(None, TEST_FILENAME, &mut res) + .recv(TEST_FILENAME, &mut res) .expect("cannot recv file"); // diff assert_eq!(c.get_ref(), &res); device - .shell_command::<&str>(None, [format!("rm {TEST_FILENAME}").as_str()]) + .shell_command::<&str>([format!("rm {TEST_FILENAME}").as_str()]) .expect("cannot remove test file"); }