summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSagar Verma <quic_sagarv@quicinc.com>2023-03-21 15:17:02 +0530
committerGerrit - the friendly Code Review server <code-review@localhost>2023-04-03 22:58:14 -0700
commita35e35b5eaa95bc4d000c54ca405d808ad332689 (patch)
treec30b9ebbc5d45989b2fe33f6f042792d5e549b17
parentf20503c97e19542e15f2e94b0d4fc21fed70dfa1 (diff)
A2DP: Reject SetConfig if Cfgs are not negotiated properly
Reject Set Config Cmd if configurations are not negotiated properly during capability exchange. CRs-Fixed: 3429434 Change-Id: Ied0d481384e0e18a2067515c59a3b9bf70e57754
-rw-r--r--btif/co/bta_av_co.cc5
-rw-r--r--stack/a2dp/a2dp_vendor.cc8
-rw-r--r--stack/a2dp/a2dp_vendor_aptx_adaptive.cc10
-rw-r--r--stack/include/a2dp_vendor_aptx_adaptive.h4
4 files changed, 25 insertions, 2 deletions
diff --git a/btif/co/bta_av_co.cc b/btif/co/bta_av_co.cc
index cd978784a..f650cf3ef 100644
--- a/btif/co/bta_av_co.cc
+++ b/btif/co/bta_av_co.cc
@@ -798,10 +798,13 @@ void bta_av_co_audio_setconfig(tBTA_AV_HNDL hndl, const uint8_t* p_codec_info,
if (!codec_config_supported) {
category = AVDT_ASC_CODEC;
status = A2DP_WRONG_CODEC;
+ } else {
+ status = A2dp_IsCodecConfigMatch(p_codec_info);
+ APPL_TRACE_DEBUG("%s: after setotaconfig call cfg match for codec %s", __func__,
+ A2DP_CodecName(p_codec_info));
}
}
- status = A2dp_IsCodecConfigMatch(p_codec_info);
error_code = A2dp_SendSetConfigRspErrorCodeForPTS();
APPL_TRACE_DEBUG("%s: status : %d, error_code: %d",
diff --git a/stack/a2dp/a2dp_vendor.cc b/stack/a2dp/a2dp_vendor.cc
index b55913494..6bd92e25b 100644
--- a/stack/a2dp/a2dp_vendor.cc
+++ b/stack/a2dp/a2dp_vendor.cc
@@ -815,8 +815,14 @@ tA2DP_STATUS A2DP_VendorIsCodecConfigMatch(const uint8_t* p_codec_info) {
return A2DP_VendorIsCodecConfigMatchLdac(p_codec_info);
}
+ // Check for AptX-Adaptive
+ if (vendor_id == A2DP_APTX_ADAPTIVE_VENDOR_ID &&
+ codec_id == A2DP_APTX_ADAPTIVE_CODEC_ID_BLUETOOTH) {
+ LOG_DEBUG(LOG_TAG, "%s: checking for Aptx-Adaptive codecConfig match", __func__);
+ return A2DP_VendorIsCodecConfigMatchAptxAdaptive(p_codec_info);
+ }
+
// Add checks based on <vendor_id, codec_id>
return false;
}
-
diff --git a/stack/a2dp/a2dp_vendor_aptx_adaptive.cc b/stack/a2dp/a2dp_vendor_aptx_adaptive.cc
index 8e21f155f..b04b58e44 100644
--- a/stack/a2dp/a2dp_vendor_aptx_adaptive.cc
+++ b/stack/a2dp/a2dp_vendor_aptx_adaptive.cc
@@ -736,6 +736,16 @@ bool A2DP_VendorAdjustCodecAptxAdaptive(uint8_t* p_codec_info) {
return true;
}
+tA2DP_STATUS A2DP_VendorIsCodecConfigMatchAptxAdaptive(const uint8_t* p_codec_info) {
+ tA2DP_APTX_ADAPTIVE_CIE aptx_adaptive_cie;
+
+ LOG_DEBUG(LOG_TAG, "%s", __func__);
+ tA2DP_STATUS a2dp_status =
+ A2DP_ParseInfoAptxAdaptive(&aptx_adaptive_cie, p_codec_info, false);
+ LOG_DEBUG(LOG_TAG, "%s: a2dp_status: %d", __func__, a2dp_status);
+ return a2dp_status;
+}
+
btav_a2dp_codec_index_t A2DP_VendorSourceCodecIndexAptxAdaptive(
const uint8_t* p_codec_info) {
return BTAV_A2DP_CODEC_INDEX_SOURCE_APTX_ADAPTIVE;
diff --git a/stack/include/a2dp_vendor_aptx_adaptive.h b/stack/include/a2dp_vendor_aptx_adaptive.h
index ff574ada4..2b70fec1a 100644
--- a/stack/include/a2dp_vendor_aptx_adaptive.h
+++ b/stack/include/a2dp_vendor_aptx_adaptive.h
@@ -206,4 +206,8 @@ const char* A2DP_VendorCodecIndexStrAptxAdaptive(void);
// configuration entry pointed by |p_cfg|.
bool A2DP_VendorInitCodecConfigAptxAdaptive(tAVDT_CFG* p_cfg);
+// Checks peer initiated setconfig with DUT supported config
+// and returns proper status.
+tA2DP_STATUS A2DP_VendorIsCodecConfigMatchAptxAdaptive(const uint8_t* p_codec_info);
+
#endif // A2DP_VENDOR_APTX_ADAPTIVE_H