Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit dd916bdc authored by Zach Johnson's avatar Zach Johnson
Browse files

rusty-gd: properly read ACL data from the HAL

Bug: 171749953
Tag: #gd-refactor
Test: gd/cert/run --rhost
Change-Id: Ic6ed193f89a689a255820704b606b8ffb03a9ee0
parent b931c50a
Loading
Loading
Loading
Loading
+21 −14
Original line number Diff line number Diff line
@@ -52,21 +52,28 @@ impl RootcanalHal {
        R: AsyncReadExt + Unpin,
    {
        let mut reader = BufReader::new(reader);
        let header_size = H4_HEADER_SIZE + HciPacketHeaderSize::Event as usize;
        loop {
            let mut header = BytesMut::with_capacity(1024);
            header.resize(header_size, 0);
            reader.read_exact(&mut header).await?;
            let param_len: usize = header[2].into();
            let mut payload = header.split_off(header_size);
            payload.resize(param_len, 0);
            let mut buffer = BytesMut::with_capacity(1024);
            buffer.resize(H4_HEADER_SIZE, 0);
            reader.read_exact(&mut buffer).await?;
            if buffer[0] == HciPacketType::Event as u8 {
                buffer.resize(HciPacketHeaderSize::Event as usize, 0);
                reader.read_exact(&mut buffer).await?;
                let len: usize = buffer[1].into();
                let mut payload = buffer.split_off(HciPacketHeaderSize::Event as usize);
                payload.resize(len, 0);
                reader.read_exact(&mut payload).await?;
            let h4_type = header.split_to(H4_HEADER_SIZE);
            header.unsplit(payload);
            if h4_type[0] == HciPacketType::Event as u8 {
                evt_tx.send(header.freeze()).unwrap();
            } else if h4_type[0] == HciPacketType::Acl as u8 {
                acl_tx.send(header.freeze()).unwrap();
                buffer.unsplit(payload);
                evt_tx.send(buffer.freeze()).unwrap();
            } else if buffer[0] == HciPacketType::Acl as u8 {
                buffer.resize(HciPacketHeaderSize::Acl as usize, 0);
                reader.read_exact(&mut buffer).await?;
                let len: usize = (buffer[2] as u16 + ((buffer[3] as u16) << 8)).into();
                let mut payload = buffer.split_off(HciPacketHeaderSize::Event as usize);
                payload.resize(len, 0);
                reader.read_exact(&mut payload).await?;
                buffer.unsplit(payload);
                acl_tx.send(buffer.freeze()).unwrap();
            }
        }
    }