diff --git a/bundle.json b/bundle.json index 636e79c8db854852ac38c6e20c316639fb22e1da..af7d9b5532db9edc28dafabd010bd8a00cd227ff 100755 --- a/bundle.json +++ b/bundle.json @@ -28,6 +28,8 @@ ], "deps": { "components": [ + "access_token", + "accessibility", "audio_framework", "c_utils", "distributed_hardware_fwk", diff --git a/common/dfx_utils/include/daudio_hidumper.h b/common/dfx_utils/include/daudio_hidumper.h index b10c8df4499f13d35d68b2b6a00ee273a48b1dfe..412f591b83ae28a3bbe255ded31680a5e5c14345 100644 --- a/common/dfx_utils/include/daudio_hidumper.h +++ b/common/dfx_utils/include/daudio_hidumper.h @@ -18,6 +18,7 @@ #include #include +#include "sys/stat.h" #include "audio_capturer.h" #include "audio_info.h" @@ -35,7 +36,8 @@ enum class HidumpFlag { GET_SOURCE_DEVID, GET_SINK_INFO, GET_ABILITY, - DUMP_AUDIO_DATA, + DUMP_AUDIO_DATA_START, + DUMP_AUDIO_DATA_STOP, }; class DaudioHidumper { DECLARE_SINGLE_INSTANCE_BASE(DaudioHidumper); @@ -54,7 +56,8 @@ private: int32_t GetSourceDevId(std::string &result); int32_t GetSinkInfo(std::string &result); int32_t GetAbilityInfo(std::string &result); - int32_t DumpAudioData(std::string &result); + int32_t StartDumpData(std::string &result); + int32_t StopDumpData(std::string &result); private: std::string g_sourceDevId_ = ""; diff --git a/common/dfx_utils/src/daudio_hidumper.cpp b/common/dfx_utils/src/daudio_hidumper.cpp index 07be7f802d203d13ab607f9de536e4270f4a373f..59e1841beb8dedbe45dea586c783c22f73a8f8e3 100644 --- a/common/dfx_utils/src/daudio_hidumper.cpp +++ b/common/dfx_utils/src/daudio_hidumper.cpp @@ -15,6 +15,7 @@ #include "daudio_hidumper.h" +#include "daudio_constants.h" #include "daudio_errorcode.h" #include "daudio_log.h" #include "daudio_util.h" @@ -31,14 +32,16 @@ const std::string ARGS_HELP = "-h"; const std::string ARGS_SOURCE_DEVID = "--sourceDevId"; const std::string ARGS_SINK_INFO = "--sinkInfo"; const std::string ARGS_ABILITY = "--ability"; -const std::string ARGS_DUMP_AUDIO_DATA = "--dumpAudioData"; +const std::string ARGS_DUMP_AUDIO_DATA_START = "--startDump"; +const std::string ARGS_DUMP_AUDIO_DATA_STOP = "--stopDump"; const std::map ARGS_MAP = { { ARGS_HELP, HidumpFlag::GET_HELP }, { ARGS_SOURCE_DEVID, HidumpFlag::GET_SOURCE_DEVID }, { ARGS_SINK_INFO, HidumpFlag::GET_SINK_INFO }, { ARGS_ABILITY, HidumpFlag::GET_ABILITY }, - { ARGS_DUMP_AUDIO_DATA, HidumpFlag::DUMP_AUDIO_DATA }, + { ARGS_DUMP_AUDIO_DATA_START, HidumpFlag::DUMP_AUDIO_DATA_START }, + { ARGS_DUMP_AUDIO_DATA_STOP, HidumpFlag::DUMP_AUDIO_DATA_STOP }, }; } @@ -96,8 +99,11 @@ int32_t DaudioHidumper::ProcessDump(const std::string &args, std::string &result case HidumpFlag::GET_ABILITY: { return GetAbilityInfo(result); } - case HidumpFlag::DUMP_AUDIO_DATA: { - return DumpAudioData(result); + case HidumpFlag::DUMP_AUDIO_DATA_START: { + return StartDumpData(result); + } + case HidumpFlag::DUMP_AUDIO_DATA_STOP: { + return StopDumpData(result); } default: { return ShowIllegalInfomation(result); @@ -156,14 +162,28 @@ int32_t DaudioHidumper::GetAbilityInfo(std::string &result) return DH_SUCCESS; } -int32_t DaudioHidumper::DumpAudioData(std::string &result) +int32_t DaudioHidumper::StartDumpData(std::string &result) { - DHLOGI("Dump audio data."); - result.append("dump..."); + if (access(DUMP_FILE_PATH.c_str(), 0) < 0) { + if (mkdir(DUMP_FILE_PATH.c_str(), S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH)) { + DHLOGE("Create dir error"); + return ERR_DH_AUDIO_FAILED; + } + } + DHLOGI("Start dump audio data."); + result.append("start dump..."); HidumperFlag_ = true; return DH_SUCCESS; } +int32_t DaudioHidumper::StopDumpData(std::string &result) +{ + DHLOGI("Stop dump audio data."); + result.append("stop dump..."); + HidumperFlag_ = false; + return DH_SUCCESS; +} + bool DaudioHidumper::GetFlagStatus() { return HidumperFlag_; @@ -182,8 +202,10 @@ void DaudioHidumper::ShowHelp(std::string &result) .append(": dump sink info in the system\n") .append("--ability ") .append(": dump current ability of the audio in the system\n") - .append("--dumpAudioData") - .append(": dump audio data in the system\n"); + .append("--startDump") + .append(": start dump audio data in the system /data/data/daudio\n") + .append("--stopDump") + .append(": stop dump audio data in the system\n"); } int32_t DaudioHidumper::ShowIllegalInfomation(std::string &result) diff --git a/common/include/daudio_constants.h b/common/include/daudio_constants.h index 8c9968a77c773ea988b7c6f4329da6f00e227457..60b9a412a79ad174761984d2b0656fa50e41abb9 100644 --- a/common/include/daudio_constants.h +++ b/common/include/daudio_constants.h @@ -124,6 +124,9 @@ constexpr const char *KEY_CONTENT_TYPE = "contentType"; constexpr const char *KEY_STREAM_USAGE = "streamUsage"; constexpr const char *KEY_RENDER_FLAGS = "renderFlags"; constexpr const char *KEY_CAPTURE_FLAGS = "capturerFlags"; + +const std::string DUMP_FILE_PATH = "/data/data/daudio"; +const std::string AUDIO_PERMISSION_NAME = "ohos.permission.ENABLE_DISTRIBUTED_HARDWARE"; } // namespace DistributedHardware } // namespace OHOS #endif // OHOS_DAUDIO_CONSTANTS_H diff --git a/hdf_service/distributed_audio/hdi_service/audio/v1_0/include/audio_capture_interface_impl.h b/hdf_service/distributed_audio/hdi_service/audio/v1_0/include/audio_capture_interface_impl.h index 7056d9b395d1ee849d51bd1e82563dd7ba2e19ce..4fdb18539ebebd8f82bc4dd93947b0196ca1bf38 100644 --- a/hdf_service/distributed_audio/hdi_service/audio/v1_0/include/audio_capture_interface_impl.h +++ b/hdf_service/distributed_audio/hdi_service/audio/v1_0/include/audio_capture_interface_impl.h @@ -79,7 +79,7 @@ public: private: static constexpr int64_t AUDIO_OFFSET_FRAME_NUM = 10; - const std::string FILE_NAME = "/data/hdf_captureframe.pcm"; + const std::string FILE_NAME = "/data/data/daudio/hdf_captureframe.pcm"; std::string adapterName_; AudioDeviceDescriptor devDesc_; AudioSampleAttributes devAttrs_; diff --git a/hdf_service/distributed_audio/hdi_service/audio/v1_0/include/audio_manager_interface_impl.h b/hdf_service/distributed_audio/hdi_service/audio/v1_0/include/audio_manager_interface_impl.h index b5387ea4aab8f84fc2c068a4b9dd0bac02780151..ca3dfc669ba2db968021124ae94e3a8ab47b5f4f 100644 --- a/hdf_service/distributed_audio/hdi_service/audio/v1_0/include/audio_manager_interface_impl.h +++ b/hdf_service/distributed_audio/hdi_service/audio/v1_0/include/audio_manager_interface_impl.h @@ -21,6 +21,7 @@ #include #include "hdf_device_desc.h" +#include "iremote_object.h" #include #include @@ -83,7 +84,13 @@ private: } }; }; + + class AudioManagerRecipient : public IRemoteObject::DeathRecipient { + public: + void OnRemoteDied(const wptr &remote) override; + }; static Deletor deletor; + sptr audioManagerRecipient_; private: static AudioManagerInterfaceImpl *audioManager_; @@ -91,6 +98,7 @@ private: struct HdfDeviceObject *deviceObject_ = nullptr; std::mutex adapterMapMtx_; std::map> mapAudioAdapter_; + sptr remote_; }; } // V1_0 } // Audio diff --git a/hdf_service/distributed_audio/hdi_service/audio/v1_0/include/audio_render_interface_impl.h b/hdf_service/distributed_audio/hdi_service/audio/v1_0/include/audio_render_interface_impl.h index ff2d77431299bdf17efa319961a857571ef8e8b6..4e18a5e11e38b1a7d6def5194be7d54c0dada84f 100644 --- a/hdf_service/distributed_audio/hdi_service/audio/v1_0/include/audio_render_interface_impl.h +++ b/hdf_service/distributed_audio/hdi_service/audio/v1_0/include/audio_render_interface_impl.h @@ -101,7 +101,7 @@ private: private: static constexpr int64_t AUDIO_OFFSET_FRAME_NUM = 10; - const std::string FILE_NAME = "/data/hdf_renderframe.pcm"; + const std::string FILE_NAME = "/data/data/daudio/hdf_renderframe.pcm"; std::string adapterName_; AudioDeviceDescriptor devDesc_; diff --git a/hdf_service/distributed_audio/hdi_service/audio/v1_0/src/audio_manager_interface_impl.cpp b/hdf_service/distributed_audio/hdi_service/audio/v1_0/src/audio_manager_interface_impl.cpp index 01d6afde1ddb3055e9260d6f93706c8d78a3a4a2..9890a83a2093bd1f0bc30798848d1ea37fa9f595 100644 --- a/hdf_service/distributed_audio/hdi_service/audio/v1_0/src/audio_manager_interface_impl.cpp +++ b/hdf_service/distributed_audio/hdi_service/audio/v1_0/src/audio_manager_interface_impl.cpp @@ -15,8 +15,12 @@ #include "audio_manager_interface_impl.h" +#include #include #include "hdf_device_object.h" +#include "iservice_registry.h" +#include "iproxy_broker.h" +#include "iservmgr_hdi.h" #include #include "daudio_constants.h" @@ -44,6 +48,7 @@ extern "C" IAudioManager *AudioManagerImplGetInstance(void) AudioManagerInterfaceImpl::AudioManagerInterfaceImpl() { DHLOGD("Distributed audio manager constructed."); + audioManagerRecipient_ = new AudioManagerRecipient(); } AudioManagerInterfaceImpl::~AudioManagerInterfaceImpl() @@ -124,6 +129,8 @@ int32_t AudioManagerInterfaceImpl::AddAudioDevice(const std::string &adpName, co return ERR_DH_AUDIO_HDF_FAIL; } } + remote_ = OHOS::HDI::hdi_objcast(callback); + remote_->AddDeathRecipient(audioManagerRecipient_); adp = mapAudioAdapter_.find(adpName); if (adp == mapAudioAdapter_.end() || adp->second == nullptr) { DHLOGE("Audio device has not been created or is null ptr."); @@ -177,7 +184,7 @@ int32_t AudioManagerInterfaceImpl::RemoveAudioDevice(const std::string &adpName, DHLOGE("Remove audio device failed, adapter return: %d.", ret); return ret; } - + remote_->RemoveDeathRecipient(audioManagerRecipient_); DAudioDevEvent event = { adpName, dhId, HDF_AUDIO_DEVICE_REMOVE, 0, 0, 0 }; ret = NotifyFwk(event); if (ret != DH_SUCCESS) { @@ -258,6 +265,12 @@ void AudioManagerInterfaceImpl::SetDeviceObject(struct HdfDeviceObject *deviceOb { deviceObject_ = deviceObject; } + +void AudioManagerInterfaceImpl::AudioManagerRecipient::OnRemoteDied(const wptr &remote) +{ + DHLOGE("Exit the current process."); + _Exit(0); +} } // V1_0 } // Audio } // Distributedaudio diff --git a/services/audioclient/micclient/include/dmic_client.h b/services/audioclient/micclient/include/dmic_client.h index 6e560bdd6c79a770e3740b45d31a394a36d533ad..e3d98fe967a551bde78b3e083841763b51ee29d6 100644 --- a/services/audioclient/micclient/include/dmic_client.h +++ b/services/audioclient/micclient/include/dmic_client.h @@ -33,6 +33,7 @@ #include "audio_param.h" #include "audio_status.h" #include "av_sender_engine_transport.h" +#include "daudio_constants.h" #include "daudio_errorcode.h" #include "daudio_log.h" #include "iaudio_data_transport.h" @@ -72,7 +73,7 @@ private: private: constexpr static uint8_t CHANNEL_WAIT_SECONDS = 5; static constexpr const char* CAPTURETHREAD = "captureThread"; - const std::string FILE_NAME = "/data/sink_mic_send.pcm"; + const std::string FILE_NAME = DUMP_FILE_PATH + "/sink_mic_send.pcm"; std::string devId_; int32_t dhId_; diff --git a/services/audioclient/spkclient/include/dspeaker_client.h b/services/audioclient/spkclient/include/dspeaker_client.h index b583a158ac255aa4496d02e2eff3f8d49272d448..c26abe02548486ba9c148a4df8eb52b9f01847dc 100644 --- a/services/audioclient/spkclient/include/dspeaker_client.h +++ b/services/audioclient/spkclient/include/dspeaker_client.h @@ -36,6 +36,7 @@ #include "audio_decode_transport.h" #include "audio_event.h" #include "av_receiver_engine_transport.h" +#include "daudio_constants.h" #include "daudio_errorcode.h" #include "daudio_log.h" #include "iaudio_data_transport.h" @@ -93,7 +94,7 @@ private: constexpr static size_t DATA_QUEUE_SIZE = 8; constexpr static size_t SLEEP_TIME = 5000; static constexpr const char* RENDERTHREAD = "renderThread"; - const std::string FILE_NAME = "/data/sink_spk_recv.pcm"; + const std::string FILE_NAME = DUMP_FILE_PATH + "/sink_spk_recv.pcm"; std::string devId_; const int32_t dhId_; diff --git a/services/audiohdiproxy/include/daudio_hdi_handler.h b/services/audiohdiproxy/include/daudio_hdi_handler.h index d5d15ac2101aaebf3df169c18ea32737c6430526..0129f2d21435148bf4ccacc77760601d0a9718ef 100644 --- a/services/audiohdiproxy/include/daudio_hdi_handler.h +++ b/services/audiohdiproxy/include/daudio_hdi_handler.h @@ -22,6 +22,7 @@ #include #include +#include "iremote_object.h" #include "audio_event.h" #include "daudio_manager_callback.h" @@ -53,11 +54,18 @@ private: ~DAudioHdiHandler(); void ProcessEventMsg(const AudioEvent &audioEvent, DAudioEvent &newEvent); + class AudioHdiRecipient : public IRemoteObject::DeathRecipient { + public: + void OnRemoteDied(const wptr &remote) override; + }; + sptr audioHdiRecipient_; + const std::string HDF_AUDIO_SERVICE_NAME = "daudio_ext_service"; std::mutex devMapMtx_; sptr audioSrvHdf_; std::map> mapAudioMgrCallback_; std::map> mapAudioMgrDhIds_; + sptr remote_; }; } // DistributedHardware } // OHOS diff --git a/services/audiohdiproxy/src/daudio_hdi_handler.cpp b/services/audiohdiproxy/src/daudio_hdi_handler.cpp index 9ad134dd13301fbd8a32805ff112bc92f9f07ce2..764d53a652a863b0f480aa951ccd35b115a07b57 100644 --- a/services/audiohdiproxy/src/daudio_hdi_handler.cpp +++ b/services/audiohdiproxy/src/daudio_hdi_handler.cpp @@ -17,6 +17,10 @@ #include #include +#include +#include "iservice_registry.h" +#include "iservmgr_hdi.h" +#include "iproxy_broker.h" #include "daudio_constants.h" #include "daudio_errorcode.h" @@ -36,6 +40,7 @@ IMPLEMENT_SINGLE_INSTANCE(DAudioHdiHandler); DAudioHdiHandler::DAudioHdiHandler() { DHLOGD("Distributed audio hdi handler construct."); + audioHdiRecipient_ = new AudioHdiRecipient(); } DAudioHdiHandler::~DAudioHdiHandler() @@ -65,6 +70,8 @@ int32_t DAudioHdiHandler::InitHdiHandler() return ERR_DH_AUDIO_HDI_PROXY_NOT_INIT; } + remote_ = OHOS::HDI::hdi_objcast(audioSrvHdf_); + remote_->AddDeathRecipient(audioHdiRecipient_); DHLOGI("Init hdi handler success."); return DH_SUCCESS; } @@ -81,6 +88,7 @@ int32_t DAudioHdiHandler::UninitHdiHandler() DHLOGE("Unload hdf driver failed, ret: %d", ret); return ret; } + remote_->RemoveDeathRecipient(audioHdiRecipient_); DHLOGI("Uninit hdi handler success."); return DH_SUCCESS; } @@ -223,5 +231,11 @@ int32_t DAudioHdiHandler::NotifyEvent(const std::string &devId, const int32_t dh } return DH_SUCCESS; } + +void DAudioHdiHandler::AudioHdiRecipient::OnRemoteDied(const wptr &remote) +{ + DHLOGE("Exit the current process."); + _Exit(0); +} } // namespace DistributedHardware } // namespace OHOS diff --git a/services/audiomanager/managersource/include/dmic_dev.h b/services/audiomanager/managersource/include/dmic_dev.h index dbfaf776f186bf01bec0ab7f33b46bf95a08c3d1..4340c080cf2f4c7fa2d9454c3a70246fab60ec62 100644 --- a/services/audiomanager/managersource/include/dmic_dev.h +++ b/services/audiomanager/managersource/include/dmic_dev.h @@ -25,6 +25,7 @@ #include "audio_status.h" #include "av_receiver_engine_transport.h" #include "ashmem.h" +#include "daudio_constants.h" #include "daudio_hdi_handler.h" #include "daudio_io_dev.h" #include "iaudio_data_transport.h" @@ -95,7 +96,7 @@ private: static constexpr size_t LOW_LATENCY_DATA_QUEUE_HALF_SIZE = 10; static constexpr uint32_t MMAP_WAIT_FRAME_US = 5000; static constexpr const char* ENQUEUE_THREAD = "micEnqueueTh"; - const std::string FILE_NAME = "/data/source_mic_read.pcm"; + const std::string FILE_NAME = DUMP_FILE_PATH + "/source_mic_read.pcm"; std::weak_ptr audioEventCallback_; std::mutex dataQueueMtx_; diff --git a/services/audiomanager/managersource/include/dspeaker_dev.h b/services/audiomanager/managersource/include/dspeaker_dev.h index 8b8f88337379cdf7d0b84b23f11a6040f9e55715..90a2c6e179ecdb2537cdfd8e430b62f1ab195dc1 100644 --- a/services/audiomanager/managersource/include/dspeaker_dev.h +++ b/services/audiomanager/managersource/include/dspeaker_dev.h @@ -24,6 +24,7 @@ #include "audio_param.h" #include "ashmem.h" #include "av_sender_engine_transport.h" +#include "daudio_constants.h" #include "daudio_hdi_handler.h" #include "daudio_io_dev.h" #include "iaudio_event_callback.h" @@ -86,7 +87,7 @@ private: private: static constexpr const char* ENQUEUE_THREAD = "spkEnqueueTh"; - const std::string FILE_NAME = "/data/source_spk_write.pcm"; + const std::string FILE_NAME = DUMP_FILE_PATH + "/source_spk_write.pcm"; std::weak_ptr audioEventCallback_; std::mutex channelWaitMutex_; diff --git a/services/audiomanager/servicesink/BUILD.gn b/services/audiomanager/servicesink/BUILD.gn index 4b72c5e72c79707581e42f40212c6cbf44089501..35454d63dba73d2ba8efa84e54252aa96a072931 100755 --- a/services/audiomanager/servicesink/BUILD.gn +++ b/services/audiomanager/servicesink/BUILD.gn @@ -92,6 +92,8 @@ ohos_shared_library("distributed_audio_sink") { ] external_deps = [ + "access_token:libaccesstoken_sdk", + "access_token:libtokenid_sdk", "audio_framework:audio_capturer", "audio_framework:audio_client", "audio_framework:audio_renderer", diff --git a/services/audiomanager/servicesink/include/daudio_sink_hidumper.h b/services/audiomanager/servicesink/include/daudio_sink_hidumper.h index fc249dd0a40bfa0f7806d59b95adb921a392d129..66ed017004a6848154e17f97e571fe6abb97236c 100644 --- a/services/audiomanager/servicesink/include/daudio_sink_hidumper.h +++ b/services/audiomanager/servicesink/include/daudio_sink_hidumper.h @@ -19,6 +19,7 @@ #include #include #include +#include "sys/stat.h" #include "single_instance.h" @@ -27,7 +28,8 @@ namespace DistributedHardware { enum class HidumpFlag { UNKNOWN = 0, GET_HELP, - DUMP_SINK_AUDIO_DATA, + DUMP_AUDIO_DATA_START, + DUMP_AUDIO_DATA_STOP, }; class DaudioSinkHidumper { DECLARE_SINGLE_INSTANCE_BASE(DaudioSinkHidumper); @@ -43,7 +45,8 @@ private: int32_t ShowIllegalInfomation(std::string &result); int32_t ProcessDump(const std::string &args, std::string &result); - int32_t DumpAudioData(std::string &result); + int32_t StartDumpData(std::string &result); + int32_t StopDumpData(std::string &result); private: bool HidumperFlag_ = false; diff --git a/services/audiomanager/servicesink/include/daudio_sink_stub.h b/services/audiomanager/servicesink/include/daudio_sink_stub.h index f0f8c5f5abac1dc7dd4dd11bc183c671fb856709..d16b57eba0a23bd3ebe885d189337daf8f7cd832 100644 --- a/services/audiomanager/servicesink/include/daudio_sink_stub.h +++ b/services/audiomanager/servicesink/include/daudio_sink_stub.h @@ -36,6 +36,7 @@ private: int32_t SubscribeLocalHardwareInner(MessageParcel &data, MessageParcel &reply, MessageOption &option); int32_t UnsubscribeLocalHardwareInner(MessageParcel &data, MessageParcel &reply, MessageOption &option); int32_t DAudioNotifyInner(MessageParcel &data, MessageParcel &reply, MessageOption &option); + bool VerifyPass(); using DAudioSinkServiceFunc = int32_t (DAudioSinkStub::*)(MessageParcel &data, MessageParcel &reply, MessageOption &option); diff --git a/services/audiomanager/servicesink/src/daudio_sink_hidumper.cpp b/services/audiomanager/servicesink/src/daudio_sink_hidumper.cpp index 41fdfdeedaa50db092d094a03db783ac1b9641a3..9e64f546ca5ecdfef2c725f9affe9eb68a13194a 100644 --- a/services/audiomanager/servicesink/src/daudio_sink_hidumper.cpp +++ b/services/audiomanager/servicesink/src/daudio_sink_hidumper.cpp @@ -13,8 +13,11 @@ * limitations under the License. */ +#include + #include "daudio_sink_hidumper.h" +#include "daudio_constants.h" #include "daudio_errorcode.h" #include "daudio_log.h" #include "daudio_util.h" @@ -28,11 +31,13 @@ IMPLEMENT_SINGLE_INSTANCE(DaudioSinkHidumper); namespace { const std::string ARGS_HELP = "-h"; -const std::string ARGS_DUMP_SINK_AUDIO_DATA = "--dumpSinkAudioData"; +const std::string ARGS_DUMP_AUDIO_DATA_START = "--startDump"; +const std::string ARGS_DUMP_AUDIO_DATA_STOP = "--stopDump"; const std::map ARGS_MAP = { { ARGS_HELP, HidumpFlag::GET_HELP }, - { ARGS_DUMP_SINK_AUDIO_DATA, HidumpFlag::DUMP_SINK_AUDIO_DATA }, + { ARGS_DUMP_AUDIO_DATA_START, HidumpFlag::DUMP_AUDIO_DATA_START }, + { ARGS_DUMP_AUDIO_DATA_STOP, HidumpFlag::DUMP_AUDIO_DATA_STOP }, }; } @@ -81,8 +86,11 @@ int32_t DaudioSinkHidumper::ProcessDump(const std::string &args, std::string &re } result.clear(); switch (hf) { - case HidumpFlag::DUMP_SINK_AUDIO_DATA: { - return DumpAudioData(result); + case HidumpFlag::DUMP_AUDIO_DATA_START: { + return StartDumpData(result); + } + case HidumpFlag::DUMP_AUDIO_DATA_STOP: { + return StopDumpData(result); } default: { return ShowIllegalInfomation(result); @@ -90,14 +98,28 @@ int32_t DaudioSinkHidumper::ProcessDump(const std::string &args, std::string &re } } -int32_t DaudioSinkHidumper::DumpAudioData(std::string &result) +int32_t DaudioSinkHidumper::StartDumpData(std::string &result) { - DHLOGI("Dump audio data."); - result.append("Dump..."); + if (access(DUMP_FILE_PATH.c_str(), 0) < 0) { + if (mkdir(DUMP_FILE_PATH.c_str(), S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH)) { + DHLOGE("Create dir error"); + return ERR_DH_AUDIO_FAILED; + } + } + DHLOGI("start dump audio data."); + result.append("start dump..."); HidumperFlag_ = true; return DH_SUCCESS; } +int32_t DaudioSinkHidumper::StopDumpData(std::string &result) +{ + DHLOGI("stop dump audio data."); + result.append("stop dump..."); + HidumperFlag_ = false; + return DH_SUCCESS; +} + bool DaudioSinkHidumper::GetFlagStatus() { return HidumperFlag_; @@ -110,8 +132,10 @@ void DaudioSinkHidumper::ShowHelp(std::string &result) .append("Description:\n") .append("-h ") .append(": show help\n") - .append("--dumpSinkAudioData ") - .append(": dump sink audio data\n"); + .append("--startDump") + .append(": start dump audio data in the system /data/data/daudio\n") + .append("--stopDump") + .append(": stop dump audio data in the system\n"); } int32_t DaudioSinkHidumper::ShowIllegalInfomation(std::string &result) diff --git a/services/audiomanager/servicesink/src/daudio_sink_stub.cpp b/services/audiomanager/servicesink/src/daudio_sink_stub.cpp index 6b4be032d51aa62fc36b57667de925ea48bebb1f..efa1645bdd1e06b45361aace9dd596a1ae9771a8 100644 --- a/services/audiomanager/servicesink/src/daudio_sink_stub.cpp +++ b/services/audiomanager/servicesink/src/daudio_sink_stub.cpp @@ -15,6 +15,10 @@ #include "daudio_sink_stub.h" +#include "accesstoken_kit.h" +#include "ipc_skeleton.h" +#include "tokenid_kit.h" + #include "daudio_constants.h" #include "daudio_errorcode.h" #include "daudio_ipc_interface_code.h" @@ -64,8 +68,23 @@ int32_t DAudioSinkStub::OnRemoteRequest(uint32_t code, MessageParcel &data, Mess return (this->*func)(data, reply, option); } +bool DAudioSinkStub::VerifyPass() +{ + Security::AccessToken::AccessTokenID callerToken = IPCSkeleton::GetCallingTokenID(); + int result = Security::AccessToken::AccessTokenKit::VerifyAccessToken(callerToken, AUDIO_PERMISSION_NAME); + if (result == Security::AccessToken::PERMISSION_GRANTED) { + return true; + } + return false; +} + int32_t DAudioSinkStub::InitSinkInner(MessageParcel &data, MessageParcel &reply, MessageOption &option) { + if (VerifyPass()) { + DHLOGI("Permission verification success."); + } else { + DHLOGE("Permission verification fail."); + } std::string param = data.ReadString(); int32_t ret = InitSink(param); reply.WriteInt32(ret); @@ -74,6 +93,11 @@ int32_t DAudioSinkStub::InitSinkInner(MessageParcel &data, MessageParcel &reply, int32_t DAudioSinkStub::ReleaseSinkInner(MessageParcel &data, MessageParcel &reply, MessageOption &option) { + if (VerifyPass()) { + DHLOGI("Permission verification success."); + } else { + DHLOGE("Permission verification fail."); + } int32_t ret = ReleaseSink(); reply.WriteInt32(ret); return DH_SUCCESS; diff --git a/services/audiomanager/servicesource/BUILD.gn b/services/audiomanager/servicesource/BUILD.gn index 220e11b3a3e4f8ba72136e047b7c03f19d9c7aa5..cd151f9c1aef469ea2e4b8cf1eae380a3157c8e5 100755 --- a/services/audiomanager/servicesource/BUILD.gn +++ b/services/audiomanager/servicesource/BUILD.gn @@ -94,6 +94,8 @@ ohos_shared_library("distributed_audio_source") { ] external_deps = [ + "access_token:libaccesstoken_sdk", + "access_token:libtokenid_sdk", "c_utils:utils", "distributed_hardware_fwk:distributed_av_receiver", "distributed_hardware_fwk:distributed_av_sender", diff --git a/services/audiomanager/servicesource/include/daudio_source_stub.h b/services/audiomanager/servicesource/include/daudio_source_stub.h index 82d39fc5bb2340d7d3a2ef34618cef2361dd717a..ae8879955efb26b10aee5983a30d17817df4f5de 100644 --- a/services/audiomanager/servicesource/include/daudio_source_stub.h +++ b/services/audiomanager/servicesource/include/daudio_source_stub.h @@ -37,6 +37,7 @@ private: int32_t UnregisterDistributedHardwareInner(MessageParcel &data, MessageParcel &reply, MessageOption &option); int32_t ConfigDistributedHardwareInner(MessageParcel &data, MessageParcel &reply, MessageOption &option); int32_t DAudioNotifyInner(MessageParcel &data, MessageParcel &reply, MessageOption &option); + bool VerifyPass(); using DAudioSourceServiceFunc = int32_t (DAudioSourceStub::*)(MessageParcel &data, MessageParcel &reply, MessageOption &option); diff --git a/services/audiomanager/servicesource/src/daudio_source_stub.cpp b/services/audiomanager/servicesource/src/daudio_source_stub.cpp index cc62a2d772f50200c1234ddcf24e522e1e2b646a..e31b54076cb1456a2d057ac1aeae736caf511660 100644 --- a/services/audiomanager/servicesource/src/daudio_source_stub.cpp +++ b/services/audiomanager/servicesource/src/daudio_source_stub.cpp @@ -15,6 +15,10 @@ #include "daudio_source_stub.h" +#include "accesstoken_kit.h" +#include "ipc_skeleton.h" +#include "tokenid_kit.h" + #include "daudio_constants.h" #include "daudio_errorcode.h" #include "daudio_ipc_callback_proxy.h" @@ -61,8 +65,23 @@ int32_t DAudioSourceStub::OnRemoteRequest(uint32_t code, MessageParcel &data, Me return (this->*func)(data, reply, option); } +bool DAudioSourceStub::VerifyPass() +{ + Security::AccessToken::AccessTokenID callerToken = IPCSkeleton::GetCallingTokenID(); + int result = Security::AccessToken::AccessTokenKit::VerifyAccessToken(callerToken, AUDIO_PERMISSION_NAME); + if (result == Security::AccessToken::PERMISSION_GRANTED) { + return true; + } + return false; +} + int32_t DAudioSourceStub::InitSourceInner(MessageParcel &data, MessageParcel &reply, MessageOption &option) { + if (VerifyPass()) { + DHLOGI("Permission verification success."); + } else { + DHLOGE("Permission verification fail."); + } std::string param = data.ReadString(); sptr remoteObject = data.ReadRemoteObject(); if (remoteObject == nullptr) { @@ -78,6 +97,11 @@ int32_t DAudioSourceStub::InitSourceInner(MessageParcel &data, MessageParcel &re int32_t DAudioSourceStub::ReleaseSourceInner(MessageParcel &data, MessageParcel &reply, MessageOption &option) { + if (VerifyPass()) { + DHLOGI("Permission verification success."); + } else { + DHLOGE("Permission verification fail."); + } int32_t ret = ReleaseSource(); reply.WriteInt32(ret); return DH_SUCCESS; @@ -86,6 +110,11 @@ int32_t DAudioSourceStub::ReleaseSourceInner(MessageParcel &data, MessageParcel int32_t DAudioSourceStub::RegisterDistributedHardwareInner(MessageParcel &data, MessageParcel &reply, MessageOption &option) { + if (VerifyPass()) { + DHLOGI("Permission verification success."); + } else { + DHLOGE("Permission verification fail."); + } std::string networkId = data.ReadString(); std::string dhId = data.ReadString(); std::string version = data.ReadString(); @@ -103,6 +132,11 @@ int32_t DAudioSourceStub::RegisterDistributedHardwareInner(MessageParcel &data, int32_t DAudioSourceStub::UnregisterDistributedHardwareInner(MessageParcel &data, MessageParcel &reply, MessageOption &option) { + if (VerifyPass()) { + DHLOGI("Permission verification success."); + } else { + DHLOGE("Permission verification fail."); + } std::string networkId = data.ReadString(); std::string dhId = data.ReadString(); std::string reqId = data.ReadString();