fix: get_body_length needs to handle hex length too

This commit is contained in:
Daerckdev
2024-06-20 14:28:49 +02:00
parent 84431f169f
commit b9b5c57f9d
4 changed files with 12 additions and 8 deletions

View File

@@ -46,7 +46,7 @@ impl AdbTcpConnection {
self.send_adb_request(adb_command)?; self.send_adb_request(adb_command)?;
if with_response { if with_response {
let length = self.get_body_length()?; let length = self.get_body_length(true)?;
let mut body = vec![ let mut body = vec![
0; 0;
length length
@@ -78,7 +78,7 @@ impl AdbTcpConnection {
match AdbRequestStatus::from_str(str::from_utf8(request_status.as_ref())?)? { match AdbRequestStatus::from_str(str::from_utf8(request_status.as_ref())?)? {
AdbRequestStatus::Fail => { AdbRequestStatus::Fail => {
// We can keep reading to get further details // We can keep reading to get further details
let length = self.get_body_length()?; let length = self.get_body_length(false)?;
let mut body = vec![ let mut body = vec![
0; 0;
@@ -103,9 +103,13 @@ impl AdbTcpConnection {
Ok(self.tcp_stream.write_all(command.to_string().as_bytes())?) Ok(self.tcp_stream.write_all(command.to_string().as_bytes())?)
} }
pub(crate) fn get_body_length(&mut self) -> Result<u32> { pub(crate) fn get_body_length(&mut self, hex: bool) -> Result<u32> {
let mut len_buf = [0; 4]; let mut len_buf = [0; 4];
self.tcp_stream.read_exact(&mut len_buf)?; self.tcp_stream.read_exact(&mut len_buf)?;
Ok(LittleEndian::read_u32(&len_buf)) if hex {
Ok(u32::from_str_radix(str::from_utf8(&len_buf)?, 16)?)
} else {
Ok(LittleEndian::read_u32(&len_buf))
}
} }
} }

View File

@@ -41,7 +41,7 @@ impl AdbTcpConnection {
self.send_adb_request(AdbCommand::TrackDevices)?; self.send_adb_request(AdbCommand::TrackDevices)?;
loop { loop {
let length = self.get_body_length()?; let length = self.get_body_length(true)?;
if length > 0 { if length > 0 {
let mut body = vec![ let mut body = vec![

View File

@@ -52,14 +52,14 @@ impl AdbTcpConnection {
match &data_header { match &data_header {
b"DATA" => { b"DATA" => {
// Handle received data // Handle received data
let length: usize = self.get_body_length()?.try_into().unwrap(); let length: usize = self.get_body_length(false)?.try_into().unwrap();
self.tcp_stream.read_exact(&mut buffer[..length])?; self.tcp_stream.read_exact(&mut buffer[..length])?;
output.write_all(&buffer)?; output.write_all(&buffer)?;
} }
b"DONE" => break, // We're done here b"DONE" => break, // We're done here
b"FAIL" => { b"FAIL" => {
// Handle fail // Handle fail
let length: usize = self.get_body_length()?.try_into().unwrap(); let length: usize = self.get_body_length(false)?.try_into().unwrap();
self.tcp_stream.read_exact(&mut buffer[..length])?; self.tcp_stream.read_exact(&mut buffer[..length])?;
Err(RustADBError::ADBRequestFailed(String::from_utf8( Err(RustADBError::ADBRequestFailed(String::from_utf8(
buffer[..length].to_vec(), buffer[..length].to_vec(),

View File

@@ -80,7 +80,7 @@ impl AdbTcpConnection {
match AdbRequestStatus::from_str(str::from_utf8(request_status.as_ref())?)? { match AdbRequestStatus::from_str(str::from_utf8(request_status.as_ref())?)? {
AdbRequestStatus::Fail => { AdbRequestStatus::Fail => {
// We can keep reading to get further details // We can keep reading to get further details
let length = self.get_body_length()?; let length = self.get_body_length(false)?;
let mut body = vec![ let mut body = vec![
0; 0;