diff --git a/src/modules/module-avb/acmp-cmds-resps/acmp-milan-v12.c b/src/modules/module-avb/acmp-cmds-resps/acmp-milan-v12.c index 640e1ebc0..e5e4bce57 100644 --- a/src/modules/module-avb/acmp-cmds-resps/acmp-milan-v12.c +++ b/src/modules/module-avb/acmp-cmds-resps/acmp-milan-v12.c @@ -314,7 +314,6 @@ static void prepare_probe_tx_command_success(struct acmp *acmp, flags = ntohs(reply->flags); flags &= ~AVB_ACMP_FLAG_STREAMING_WAIT; - flags |= AVB_ACMP_FLAG_FAST_CONNECT; flags &= ~AVB_ACMP_FLAG_SRP_REGISTRATION_FAILED; reply->flags = htons(flags); @@ -1474,7 +1473,6 @@ int handle_fsm_settled_no_rsv_rcv_get_rx_state_evt(struct acmp *acmp, prepare_get_rx_response_success(acmp, stream, m, len, buf); reply->flags &= htons(~(AVB_ACMP_FLAG_SRP_REGISTRATION_FAILED)); - reply->flags |= htons(AVB_ACMP_FLAG_FAST_CONNECT); reply->flags |= htons(stream->acmp_sta.acmp_flags & AVB_ACMP_FLAG_STREAMING_WAIT); @@ -1655,7 +1653,6 @@ int handle_fsm_settled_rsv_ok_rcv_get_rx_state_evt(struct acmp *acmp, prepare_get_rx_response_success(acmp, stream, m, len, buf); reply->flags &= htons(~(AVB_ACMP_FLAG_SRP_REGISTRATION_FAILED)); - reply->flags |= htons(AVB_ACMP_FLAG_FAST_CONNECT); reply->flags |= htons(stream->acmp_sta.acmp_flags & AVB_ACMP_FLAG_STREAMING_WAIT); diff --git a/src/modules/module-avb/acmp.c b/src/modules/module-avb/acmp.c index 520b36df6..8ff318634 100644 --- a/src/modules/module-avb/acmp.c +++ b/src/modules/module-avb/acmp.c @@ -179,12 +179,33 @@ static int acmp_message(void *data, uint64_t now, const void *message, int len) pw_log_info("got ACMP message %s", acmp_cmd_names[mtype]); + switch (mtype) { + case AVB_ACMP_MESSAGE_TYPE_CONNECT_RX_COMMAND: + case AVB_ACMP_MESSAGE_TYPE_DISCONNECT_RX_COMMAND: + case AVB_ACMP_MESSAGE_TYPE_GET_RX_STATE_COMMAND: + if (be64toh(p->listener_guid) != server->entity_id) + return 0; + break; + case AVB_ACMP_MESSAGE_TYPE_CONNECT_TX_COMMAND: + case AVB_ACMP_MESSAGE_TYPE_DISCONNECT_TX_COMMAND: + case AVB_ACMP_MESSAGE_TYPE_GET_TX_STATE_COMMAND: + case AVB_ACMP_MESSAGE_TYPE_GET_TX_CONNECTION_COMMAND: + if (be64toh(p->talker_guid) != server->entity_id) + return 0; + break; + } + if (mtype < 0 || (size_t)mtype >= acmp_cmds_modes[server->avb_mode].count) { + if (mtype & 1) + return 0; return acmp_reply_not_supported(acmp, mtype | 1, message, len); } - if (acmp_cmds_modes[server->avb_mode].cmds[mtype].handle == NULL) + if (acmp_cmds_modes[server->avb_mode].cmds[mtype].handle == NULL) { + if (mtype & 1) + return 0; return acmp_reply_not_supported(acmp, mtype | 1, message, len); + } return acmp_cmds_modes[server->avb_mode].cmds[mtype].handle(acmp, now, message, len); }