1 /* 2 * Copyright (c) 2022-2024 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #ifndef OHOS_AVSESSION_SERVICE_STUB_H 17 #define OHOS_AVSESSION_SERVICE_STUB_H 18 19 #include <map> 20 #include "iavsession_service.h" 21 #include "iremote_stub.h" 22 #include "ipc_skeleton.h" 23 #include "token_setproc.h" 24 25 namespace OHOS::AVSession { 26 class AVSessionServiceStub : public IRemoteStub<IAVSessionService> { 27 public: 28 int32_t OnRemoteRequest(uint32_t code, MessageParcel& data, MessageParcel& reply, MessageOption& option) override; 29 30 private: 31 int32_t HandleCreateSessionInner(MessageParcel& data, MessageParcel& reply); 32 int32_t HandleGetAllSessionDescriptors(MessageParcel& data, MessageParcel& reply); 33 int32_t HandleGetSessionDescriptorsById(MessageParcel& data, MessageParcel& reply); 34 int32_t HandleGetHistoricalSessionDescriptors(MessageParcel& data, MessageParcel& reply); 35 int32_t HandleGetHistoricalAVQueueInfos(MessageParcel& data, MessageParcel& reply); 36 int32_t HandleStartAVPlayback(MessageParcel& data, MessageParcel& reply); 37 int32_t HandleCreateControllerInner(MessageParcel& data, MessageParcel& reply); 38 int32_t HandleGetAVCastControllerInner(MessageParcel& data, MessageParcel& reply); 39 int32_t HandleRegisterSessionListener(MessageParcel& data, MessageParcel& reply); 40 int32_t HandleRegisterSessionListenerForAllUsers(MessageParcel& data, MessageParcel& reply); 41 int32_t HandleSendSystemAVKeyEvent(MessageParcel& data, MessageParcel& reply); 42 int32_t HandleSendSystemControlCommand(MessageParcel& data, MessageParcel& reply); 43 int32_t HandleRegisterClientDeathObserver(MessageParcel& data, MessageParcel& reply); 44 int32_t HandleCastAudio(MessageParcel& data, MessageParcel& reply); 45 int32_t HandleCastAudioForAll(MessageParcel& data, MessageParcel& reply); 46 int32_t HandleRemoteCastAudio(MessageParcel& data, MessageParcel& reply); 47 int32_t HandleStartCastDiscovery(MessageParcel& data, MessageParcel& reply); 48 int32_t HandleStopCastDiscovery(MessageParcel& data, MessageParcel& reply); 49 int32_t HandleStartDeviceLogging(MessageParcel& data, MessageParcel& reply); 50 int32_t HandleStopDeviceLogging(MessageParcel& data, MessageParcel& reply); 51 int32_t HandleSetDiscoverable(MessageParcel& data, MessageParcel& reply); 52 int32_t CheckBeforeHandleStartCast(MessageParcel& data, OutputDeviceInfo& outputDeviceInfo); 53 int32_t HandleStartCast(MessageParcel& data, MessageParcel& reply); 54 int32_t HandleStopCast(MessageParcel& data, MessageParcel& reply); 55 int32_t HandleClose(MessageParcel& data, MessageParcel& reply); 56 static bool CheckInterfaceToken(MessageParcel& data); 57 int32_t GetAVQueueInfosImgLength(std::vector<AVQueueInfo>& avQueueInfos); 58 void MarshallingAVQueueInfos(MessageParcel &reply, const std::vector<AVQueueInfo>& avQueueInfos); 59 void AVQueueInfoImgToBuffer(std::vector<AVQueueInfo>& avQueueInfos, unsigned char *buffer); 60 int32_t HandleIsAudioPlaybackAllowed(MessageParcel& data, MessageParcel& reply); 61 62 using HandlerFunc = std::function<int32_t(MessageParcel&, MessageParcel&)>; 63 std::map<uint32_t, HandlerFunc> handlers = { 64 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_CREATE_SESSION), 65 [this](MessageParcel& data, MessageParcel& reply) { return HandleCreateSessionInner(data, reply); }}, 66 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_GET_ALL_SESSION_DESCRIPTORS), 67 [this](MessageParcel& data, MessageParcel& reply) { return HandleGetAllSessionDescriptors(data, reply); }}, 68 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_GET_SESSION_DESCRIPTORS_BY_ID), 69 [this](MessageParcel& data, MessageParcel& reply) 70 { return HandleGetSessionDescriptorsById(data, reply); }}, 71 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_GET_HISTORY_SESSION_DESCRIPTORS), 72 [this](MessageParcel& data, MessageParcel& reply) 73 { return HandleGetHistoricalSessionDescriptors(data, reply); }}, 74 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_GET_HISTORY_AVQUEUE_INFOS), 75 [this](MessageParcel& data, MessageParcel& reply) 76 { return HandleGetHistoricalAVQueueInfos(data, reply); }}, 77 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_START_AV_PLAYBACK), 78 [this](MessageParcel& data, MessageParcel& reply) { return HandleStartAVPlayback(data, reply); }}, 79 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_CREATE_CONTROLLER), 80 [this](MessageParcel& data, MessageParcel& reply) { return HandleCreateControllerInner(data, reply); }}, 81 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_GET_AV_CAST_CONTROLLER), 82 [this](MessageParcel& data, MessageParcel& reply) { return HandleGetAVCastControllerInner(data, reply); }}, 83 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_REGISTER_SESSION_LISTENER), 84 [this](MessageParcel& data, MessageParcel& reply) { return HandleRegisterSessionListener(data, reply); }}, 85 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_REGISTER_SESSION_LISTENER_FOR_ALL_USERS), 86 [this](MessageParcel& data, MessageParcel& reply) 87 { return HandleRegisterSessionListenerForAllUsers(data, reply); }}, 88 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_SEND_SYSTEM_AV_KEY_EVENT), 89 [this](MessageParcel& data, MessageParcel& reply) { return HandleSendSystemAVKeyEvent(data, reply); }}, 90 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_SEND_SYSTEM_CONTROL_COMMAND), 91 [this](MessageParcel& data, MessageParcel& reply) { return HandleSendSystemControlCommand(data, reply); }}, 92 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_REGISTER_CLIENT_DEATH), 93 [this](MessageParcel& data, MessageParcel& reply) 94 { return HandleRegisterClientDeathObserver(data, reply); }}, 95 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_CAST_AUDIO), 96 [this](MessageParcel& data, MessageParcel& reply) { return HandleCastAudio(data, reply); }}, 97 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_CAST_AUDIO_FOR_ALL), 98 [this](MessageParcel& data, MessageParcel& reply) { return HandleCastAudioForAll(data, reply); }}, 99 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_SEND_COMMAND_TO_REMOTE), 100 [this](MessageParcel& data, MessageParcel& reply) { return HandleRemoteCastAudio(data, reply); }}, 101 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_START_DEVICE_LOGGING), 102 [this](MessageParcel& data, MessageParcel& reply) { return HandleStartDeviceLogging(data, reply); }}, 103 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_STOP_DEVICE_LOGGING), 104 [this](MessageParcel& data, MessageParcel& reply) { return HandleStopDeviceLogging(data, reply); }}, 105 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_START_CAST_DISCOVERY), 106 [this](MessageParcel& data, MessageParcel& reply) { return HandleStartCastDiscovery(data, reply); }}, 107 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_STOP_CAST_DISCOVERY), 108 [this](MessageParcel& data, MessageParcel& reply) { return HandleStopCastDiscovery(data, reply); }}, 109 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_SET_DISCOVERYABLE), 110 [this](MessageParcel& data, MessageParcel& reply) { return HandleSetDiscoverable(data, reply); }}, 111 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_START_CAST), 112 [this](MessageParcel& data, MessageParcel& reply) { return HandleStartCast(data, reply); }}, 113 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_STOP_CAST), 114 [this](MessageParcel& data, MessageParcel& reply) { return HandleStopCast(data, reply); }}, 115 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_CLOSE), 116 [this](MessageParcel& data, MessageParcel& reply) { return HandleClose(data, reply); }}, 117 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_CHECK_BACKGROUND_ALLOWED), 118 [this](MessageParcel& data, MessageParcel& reply) { return HandleIsAudioPlaybackAllowed(data, reply); }} 119 }; 120 std::map<uint32_t, std::string> mapCodeToFuncNameXCollie = { 121 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_CREATE_SESSION), 122 "HandleCreateSessionInner"}, 123 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_GET_ALL_SESSION_DESCRIPTORS), 124 "HandleGetAllSessionDescriptors"}, 125 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_GET_SESSION_DESCRIPTORS_BY_ID), 126 "HandleGetSessionDescriptorsById"}, 127 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_GET_HISTORY_SESSION_DESCRIPTORS), 128 "HandleGetHistoricalSessionDescriptors"}, 129 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_GET_HISTORY_AVQUEUE_INFOS), 130 "HandleGetHistoricalAVQueueInfos"}, 131 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_START_AV_PLAYBACK), 132 "HandleStartAVPlayback"}, 133 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_CREATE_CONTROLLER), 134 "HandleCreateControllerInner"}, 135 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_GET_AV_CAST_CONTROLLER), 136 "HandleGetAVCastControllerInner"}, 137 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_REGISTER_SESSION_LISTENER), 138 "HandleRegisterSessionListener"}, 139 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_REGISTER_SESSION_LISTENER_FOR_ALL_USERS), 140 "HandleRegisterSessionListenerForAllUsers"}, 141 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_SEND_SYSTEM_AV_KEY_EVENT), 142 "HandleSendSystemAVKeyEvent"}, 143 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_SEND_SYSTEM_CONTROL_COMMAND), 144 "HandleSendSystemControlCommand"}, 145 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_REGISTER_CLIENT_DEATH), 146 "HandleRegisterClientDeathObserver"}, 147 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_CAST_AUDIO), 148 "HandleCastAudio"}, 149 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_CAST_AUDIO_FOR_ALL), 150 "HandleCastAudioForAll"}, 151 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_SEND_COMMAND_TO_REMOTE), 152 "HandleRemoteCastAudio"}, 153 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_START_DEVICE_LOGGING), 154 "HandleStartDeviceLogging"}, 155 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_STOP_DEVICE_LOGGING), 156 "HandleStopDeviceLogging"}, 157 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_START_CAST_DISCOVERY), 158 "HandleStartCastDiscovery"}, 159 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_STOP_CAST_DISCOVERY), 160 "HandleStopCastDiscovery"}, 161 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_SET_DISCOVERYABLE), 162 "HandleSetDiscoverable"}, 163 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_START_CAST), 164 "HandleStartCast"}, 165 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_STOP_CAST), 166 "HandleStopCast"}, 167 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_CLOSE), 168 "HandleClose"}, 169 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_CHECK_BACKGROUND_ALLOWED), 170 "HandleIsAudioPlaybackAllowed"} 171 }; 172 173 static constexpr int32_t RECEIVE_DEVICE_NUM_MAX = 10; 174 }; 175 } // namespace OHOS::AVSession 176 #endif // OHOS_AVSESSION_SERVICE_STUB_H 177