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

Commit 971d8062 authored by Abhishek Pandit-Subedi's avatar Abhishek Pandit-Subedi Committed by Gerrit Code Review
Browse files

Merge "Floss: Flatten SDP struct"

parents f30a59de 7712179d
Loading
Loading
Loading
Loading
+4 −9
Original line number Diff line number Diff line
@@ -7,9 +7,8 @@ use bt_topshim::btif::{
use bt_topshim::profiles::gatt::{AdvertisingStatus, GattStatus, LePhy};
use bt_topshim::profiles::hid_host::BthhReportType;
use bt_topshim::profiles::sdp::{
    BtSdpDipRecord, BtSdpHeader, BtSdpHeaderOverlay, BtSdpMasRecord, BtSdpMnsRecord,
    BtSdpOpsRecord, BtSdpPceRecord, BtSdpPseRecord, BtSdpRecord, BtSdpSapRecord, BtSdpType,
    SupportedFormatsList,
    BtSdpDipRecord, BtSdpHeaderOverlay, BtSdpMasRecord, BtSdpMnsRecord, BtSdpOpsRecord,
    BtSdpPceRecord, BtSdpPseRecord, BtSdpRecord, BtSdpSapRecord, BtSdpType, SupportedFormatsList,
};
use bt_topshim::profiles::socket::SocketType;
use bt_topshim::profiles::ProfileConnectionState;
@@ -115,8 +114,8 @@ impl DBusArg for Uuid128Bit {

impl_dbus_arg_enum!(BtSdpType);

#[dbus_propmap(BtSdpHeader)]
pub struct BtSdpHeaderDBus {
#[dbus_propmap(BtSdpHeaderOverlay)]
struct BtSdpHeaderOverlayDBus {
    sdp_type: BtSdpType,
    uuid: Uuid,
    service_name_length: u32,
@@ -124,11 +123,7 @@ pub struct BtSdpHeaderDBus {
    rfcomm_channel_number: i32,
    l2cap_psm: i32,
    profile_version: i32,
}

#[dbus_propmap(BtSdpHeaderOverlay)]
struct BtSdpHeaderOverlayDBus {
    hdr: BtSdpHeader,
    user1_len: i32,
    user1_data: Vec<u8>,
    user2_len: i32,
+4 −9
Original line number Diff line number Diff line
@@ -8,9 +8,8 @@ use bt_topshim::profiles::ProfileConnectionState;
use bt_topshim::profiles::hid_host::BthhReportType;

use bt_topshim::profiles::sdp::{
    BtSdpDipRecord, BtSdpHeader, BtSdpHeaderOverlay, BtSdpMasRecord, BtSdpMnsRecord,
    BtSdpOpsRecord, BtSdpPceRecord, BtSdpPseRecord, BtSdpRecord, BtSdpSapRecord, BtSdpType,
    SupportedFormatsList,
    BtSdpDipRecord, BtSdpHeaderOverlay, BtSdpMasRecord, BtSdpMnsRecord, BtSdpOpsRecord,
    BtSdpPceRecord, BtSdpPseRecord, BtSdpRecord, BtSdpSapRecord, BtSdpType, SupportedFormatsList,
};

use btstack::bluetooth::{
@@ -158,8 +157,8 @@ impl IBluetoothConnectionCallback for BluetoothConnectionCallbackDBus {

impl_dbus_arg_enum!(BtSdpType);

#[dbus_propmap(BtSdpHeader)]
pub struct BtSdpHeaderDBus {
#[dbus_propmap(BtSdpHeaderOverlay)]
struct BtSdpHeaderOverlayDBus {
    sdp_type: BtSdpType,
    uuid: Uuid,
    service_name_length: u32,
@@ -167,11 +166,7 @@ pub struct BtSdpHeaderDBus {
    rfcomm_channel_number: i32,
    l2cap_psm: i32,
    profile_version: i32,
}

#[dbus_propmap(BtSdpHeaderOverlay)]
struct BtSdpHeaderOverlayDBus {
    hdr: BtSdpHeader,
    user1_len: i32,
    user1_data: Vec<u8>,
    user2_len: i32,
+41 −48
Original line number Diff line number Diff line
@@ -35,20 +35,20 @@ impl From<bindings::bluetooth_sdp_types> for BtSdpType {
impl From<&BtSdpRecord> for BtSdpType {
    fn from(record: &BtSdpRecord) -> Self {
        match record {
            BtSdpRecord::HeaderOverlay(header) => header.hdr.sdp_type.clone(),
            BtSdpRecord::MapMas(record) => record.hdr.hdr.sdp_type.clone(),
            BtSdpRecord::MapMns(record) => record.hdr.hdr.sdp_type.clone(),
            BtSdpRecord::PbapPse(record) => record.hdr.hdr.sdp_type.clone(),
            BtSdpRecord::PbapPce(record) => record.hdr.hdr.sdp_type.clone(),
            BtSdpRecord::OppServer(record) => record.hdr.hdr.sdp_type.clone(),
            BtSdpRecord::SapServer(record) => record.hdr.hdr.sdp_type.clone(),
            BtSdpRecord::Dip(record) => record.hdr.hdr.sdp_type.clone(),
            BtSdpRecord::HeaderOverlay(header) => header.sdp_type.clone(),
            BtSdpRecord::MapMas(record) => record.hdr.sdp_type.clone(),
            BtSdpRecord::MapMns(record) => record.hdr.sdp_type.clone(),
            BtSdpRecord::PbapPse(record) => record.hdr.sdp_type.clone(),
            BtSdpRecord::PbapPce(record) => record.hdr.sdp_type.clone(),
            BtSdpRecord::OppServer(record) => record.hdr.sdp_type.clone(),
            BtSdpRecord::SapServer(record) => record.hdr.sdp_type.clone(),
            BtSdpRecord::Dip(record) => record.hdr.sdp_type.clone(),
        }
    }
}

#[derive(Clone, Debug)]
pub struct BtSdpHeader {
pub struct BtSdpHeaderOverlay {
    pub sdp_type: BtSdpType,
    pub uuid: Uuid,
    pub service_name_length: u32,
@@ -56,34 +56,7 @@ pub struct BtSdpHeader {
    pub rfcomm_channel_number: i32,
    pub l2cap_psm: i32,
    pub profile_version: i32,
}

impl From<bindings::_bluetooth_sdp_hdr> for BtSdpHeader {
    fn from(item: bindings::_bluetooth_sdp_hdr) -> Self {
        let service_name = ascii_to_string(
            unsafe {
                std::slice::from_raw_parts(
                    item.service_name as *const u8,
                    item.service_name_length as usize,
                )
            },
            item.service_name_length as usize,
        );
        BtSdpHeader {
            sdp_type: BtSdpType::from(item.type_),
            uuid: item.uuid,
            service_name_length: item.service_name_length,
            service_name,
            rfcomm_channel_number: item.rfcomm_channel_number,
            l2cap_psm: item.l2cap_psm,
            profile_version: item.profile_version,
        }
    }
}

#[derive(Clone, Debug)]
pub struct BtSdpHeaderOverlay {
    pub hdr: BtSdpHeader,
    pub user1_len: i32,
    pub user1_data: Vec<u8>,
    pub user2_len: i32,
@@ -101,13 +74,33 @@ impl From<bindings::_bluetooth_sdp_hdr_overlay> for BtSdpHeaderOverlay {
            std::slice::from_raw_parts(item.user2_ptr, item.user2_ptr_len as usize).to_vec()
        };

        BtSdpHeaderOverlay {
            hdr: unsafe {
                BtSdpHeader::from(
        let sdp_hdr = unsafe {
            *((&item as *const bindings::_bluetooth_sdp_hdr_overlay)
                        as *const bindings::_bluetooth_sdp_hdr),
                as *const bindings::_bluetooth_sdp_hdr)
        };
        let sdp_type = BtSdpType::from(sdp_hdr.type_);
        let uuid = sdp_hdr.uuid;
        let service_name_length = sdp_hdr.service_name_length;
        let service_name = ascii_to_string(
            unsafe {
                std::slice::from_raw_parts(
                    sdp_hdr.service_name as *const u8,
                    sdp_hdr.service_name_length as usize,
                )
            },
            sdp_hdr.service_name_length as usize,
        );
        let rfcomm_channel_number = sdp_hdr.rfcomm_channel_number;
        let l2cap_psm = sdp_hdr.l2cap_psm;
        let profile_version = sdp_hdr.profile_version;
        BtSdpHeaderOverlay {
            sdp_type,
            uuid,
            service_name_length,
            service_name,
            rfcomm_channel_number,
            l2cap_psm,
            profile_version,
            user1_len,
            user1_data,
            user2_len,
@@ -270,17 +263,17 @@ impl From<bindings::bluetooth_sdp_record> for BtSdpRecord {

impl BtSdpRecord {
    fn convert_header<'a>(hdr: &'a mut BtSdpHeaderOverlay) -> bindings::bluetooth_sdp_hdr_overlay {
        let srv_name_ptr = LTCheckedPtrMut::from(&mut hdr.hdr.service_name);
        let srv_name_ptr = LTCheckedPtrMut::from(&mut hdr.service_name);
        let user1_ptr = LTCheckedPtr::from(&hdr.user1_data);
        let user2_ptr = LTCheckedPtr::from(&hdr.user2_data);
        bindings::bluetooth_sdp_hdr_overlay {
            type_: hdr.hdr.sdp_type.to_u32().unwrap(),
            uuid: hdr.hdr.uuid,
            service_name_length: hdr.hdr.service_name_length,
            type_: hdr.sdp_type.to_u32().unwrap(),
            uuid: hdr.uuid,
            service_name_length: hdr.service_name_length,
            service_name: srv_name_ptr.cast_into::<c_char>(),
            rfcomm_channel_number: hdr.hdr.rfcomm_channel_number,
            l2cap_psm: hdr.hdr.l2cap_psm,
            profile_version: hdr.hdr.profile_version,
            rfcomm_channel_number: hdr.rfcomm_channel_number,
            l2cap_psm: hdr.l2cap_psm,
            profile_version: hdr.profile_version,
            user1_ptr_len: hdr.user1_len,
            user1_ptr: user1_ptr.into(),
            user2_ptr_len: hdr.user2_len,