Skip to content

Commit b6e3f8e

Browse files
Thalleynashif
authored andcommitted
Bluetooth: BAP: Broadcast source: Reduce complexicty of valid_param
Move the subgroup parameter validation to its own function to reduce the size and complexity of valid_broadcast_source_param to make Sonarcube happy. Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
1 parent 6450eaa commit b6e3f8e

File tree

1 file changed

+65
-60
lines changed

1 file changed

+65
-60
lines changed

subsys/bluetooth/audio/bap_broadcast_source.c

Lines changed: 65 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -477,6 +477,69 @@ static void broadcast_source_cleanup(struct bt_bap_broadcast_source *source)
477477
(void)memset(source, 0, sizeof(*source));
478478
}
479479

480+
static bool valid_broadcast_source_subgroup_param(
481+
const struct bt_bap_broadcast_source_subgroup_param *subgroup_param,
482+
const struct bt_bap_broadcast_source *source)
483+
{
484+
CHECKIF(subgroup_param->params == NULL) {
485+
LOG_DBG("subgroup_param->params is NULL");
486+
return false;
487+
}
488+
489+
CHECKIF(!IN_RANGE(subgroup_param->params_count, 1U,
490+
CONFIG_BT_BAP_BROADCAST_SRC_STREAM_COUNT)) {
491+
LOG_DBG("subgroup_param->count (%zu) is invalid", subgroup_param->params_count);
492+
return false;
493+
}
494+
495+
CHECKIF(!bt_audio_valid_codec_cfg(subgroup_param->codec_cfg)) {
496+
LOG_DBG("subgroup_param->codec_cfg is invalid");
497+
return false;
498+
}
499+
500+
for (size_t i = 0U; i < subgroup_param->params_count; i++) {
501+
const struct bt_bap_broadcast_source_stream_param *stream_param;
502+
503+
stream_param = &subgroup_param->params[i];
504+
505+
CHECKIF(stream_param->stream == NULL) {
506+
LOG_DBG("subgroup_param->stream_params[%zu]->stream is NULL", i);
507+
return false;
508+
}
509+
510+
CHECKIF(stream_param->stream->group != NULL &&
511+
stream_param->stream->group != source) {
512+
LOG_DBG("subgroup_param->stream_params[%zu]->stream is already part of "
513+
"group %p",
514+
i, stream_param->stream->group);
515+
return false;
516+
}
517+
518+
#if CONFIG_BT_AUDIO_CODEC_CFG_MAX_DATA_SIZE > 0
519+
CHECKIF(stream_param->data == NULL && stream_param->data_len != 0) {
520+
LOG_DBG("subgroup_param->stream_params[%zu]->data is NULL with len %zu", i,
521+
stream_param->data_len);
522+
return false;
523+
}
524+
525+
CHECKIF(stream_param->data_len > CONFIG_BT_AUDIO_CODEC_CFG_MAX_DATA_SIZE) {
526+
LOG_DBG("subgroup_param->stream_params[%zu]->data_len too large: %zu > %d",
527+
i, stream_param->data_len, CONFIG_BT_AUDIO_CODEC_CFG_MAX_DATA_SIZE);
528+
return false;
529+
}
530+
531+
CHECKIF(stream_param->data != NULL &&
532+
subgroup_param->codec_cfg->id == BT_HCI_CODING_FORMAT_LC3 &&
533+
!bt_audio_valid_ltv(stream_param->data, stream_param->data_len)) {
534+
LOG_DBG("subgroup_param->stream_params[%zu]->data not valid LTV", i);
535+
return false;
536+
}
537+
}
538+
#endif /* CONFIG_BT_AUDIO_CODEC_CFG_MAX_DATA_SIZE > 0 */
539+
540+
return true;
541+
}
542+
480543
static bool valid_broadcast_source_param(const struct bt_bap_broadcast_source_param *param,
481544
const struct bt_bap_broadcast_source *source)
482545
{
@@ -529,68 +592,10 @@ static bool valid_broadcast_source_param(const struct bt_bap_broadcast_source_pa
529592

530593
subgroup_param = &param->params[i];
531594

532-
CHECKIF(subgroup_param->params == NULL) {
533-
LOG_DBG("subgroup_params[%zu].params is NULL", i);
534-
return false;
535-
}
536-
537-
CHECKIF(!IN_RANGE(subgroup_param->params_count, 1U,
538-
CONFIG_BT_BAP_BROADCAST_SRC_STREAM_COUNT)) {
539-
LOG_DBG("subgroup_params[%zu].count (%zu) is invalid", i,
540-
subgroup_param->params_count);
595+
if (!valid_broadcast_source_subgroup_param(subgroup_param, source)) {
596+
LOG_DBG("subgroup_params[%zu] is invalid", i);
541597
return false;
542598
}
543-
544-
CHECKIF(!bt_audio_valid_codec_cfg(subgroup_param->codec_cfg)) {
545-
LOG_DBG("subgroup_params[%zu].codec_cfg is invalid", i);
546-
return false;
547-
}
548-
549-
for (size_t j = 0U; j < subgroup_param->params_count; j++) {
550-
const struct bt_bap_broadcast_source_stream_param *stream_param;
551-
552-
stream_param = &subgroup_param->params[j];
553-
554-
CHECKIF(stream_param->stream == NULL) {
555-
LOG_DBG("subgroup_params[%zu].stream_params[%zu]->stream is NULL",
556-
i, j);
557-
return false;
558-
}
559-
560-
CHECKIF(stream_param->stream->group != NULL &&
561-
stream_param->stream->group != source) {
562-
LOG_DBG("subgroup_params[%zu].stream_params[%zu]->stream is "
563-
"already part of group %p",
564-
i, j, stream_param->stream->group);
565-
return false;
566-
}
567-
568-
#if CONFIG_BT_AUDIO_CODEC_CFG_MAX_DATA_SIZE > 0
569-
CHECKIF(stream_param->data == NULL && stream_param->data_len != 0) {
570-
LOG_DBG("subgroup_params[%zu].stream_params[%zu]->data is "
571-
"NULL with len %zu",
572-
i, j, stream_param->data_len);
573-
return false;
574-
}
575-
576-
CHECKIF(stream_param->data_len > CONFIG_BT_AUDIO_CODEC_CFG_MAX_DATA_SIZE) {
577-
LOG_DBG("subgroup_params[%zu].stream_params[%zu]->data_len too "
578-
"large: %zu > %d",
579-
i, j, stream_param->data_len,
580-
CONFIG_BT_AUDIO_CODEC_CFG_MAX_DATA_SIZE);
581-
return false;
582-
}
583-
584-
CHECKIF(stream_param->data != NULL &&
585-
subgroup_param->codec_cfg->id == BT_HCI_CODING_FORMAT_LC3 &&
586-
!bt_audio_valid_ltv(stream_param->data, stream_param->data_len)) {
587-
LOG_DBG("subgroup_params[%zu].stream_params[%zu]->data not valid "
588-
"LTV",
589-
i, j);
590-
return false;
591-
}
592-
}
593-
#endif /* CONFIG_BT_AUDIO_CODEC_CFG_MAX_DATA_SIZE > 0 */
594599
}
595600

596601
return true;

0 commit comments

Comments
 (0)