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 61 using HandlerFunc = std::function<int32_t(MessageParcel&, MessageParcel&)>; 62 std::map<uint32_t, HandlerFunc> handlers = { 63 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_CREATE_SESSION), 64 [this](MessageParcel& data, MessageParcel& reply) { return HandleCreateSessionInner(data, reply); }}, 65 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_GET_ALL_SESSION_DESCRIPTORS), 66 [this](MessageParcel& data, MessageParcel& reply) { return HandleGetAllSessionDescriptors(data, reply); }}, 67 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_GET_SESSION_DESCRIPTORS_BY_ID), 68 [this](MessageParcel& data, MessageParcel& reply) 69 { return HandleGetSessionDescriptorsById(data, reply); }}, 70 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_GET_HISTORY_SESSION_DESCRIPTORS), 71 [this](MessageParcel& data, MessageParcel& reply) 72 { return HandleGetHistoricalSessionDescriptors(data, reply); }}, 73 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_GET_HISTORY_AVQUEUE_INFOS), 74 [this](MessageParcel& data, MessageParcel& reply) 75 { return HandleGetHistoricalAVQueueInfos(data, reply); }}, 76 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_START_AV_PLAYBACK), 77 [this](MessageParcel& data, MessageParcel& reply) { return HandleStartAVPlayback(data, reply); }}, 78 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_CREATE_CONTROLLER), 79 [this](MessageParcel& data, MessageParcel& reply) { return HandleCreateControllerInner(data, reply); }}, 80 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_GET_AV_CAST_CONTROLLER), 81 [this](MessageParcel& data, MessageParcel& reply) { return HandleGetAVCastControllerInner(data, reply); }}, 82 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_REGISTER_SESSION_LISTENER), 83 [this](MessageParcel& data, MessageParcel& reply) { return HandleRegisterSessionListener(data, reply); }}, 84 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_REGISTER_SESSION_LISTENER_FOR_ALL_USERS), 85 [this](MessageParcel& data, MessageParcel& reply) 86 { return HandleRegisterSessionListenerForAllUsers(data, reply); }}, 87 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_SEND_SYSTEM_AV_KEY_EVENT), 88 [this](MessageParcel& data, MessageParcel& reply) { return HandleSendSystemAVKeyEvent(data, reply); }}, 89 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_SEND_SYSTEM_CONTROL_COMMAND), 90 [this](MessageParcel& data, MessageParcel& reply) { return HandleSendSystemControlCommand(data, reply); }}, 91 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_REGISTER_CLIENT_DEATH), 92 [this](MessageParcel& data, MessageParcel& reply) 93 { return HandleRegisterClientDeathObserver(data, reply); }}, 94 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_CAST_AUDIO), 95 [this](MessageParcel& data, MessageParcel& reply) { return HandleCastAudio(data, reply); }}, 96 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_CAST_AUDIO_FOR_ALL), 97 [this](MessageParcel& data, MessageParcel& reply) { return HandleCastAudioForAll(data, reply); }}, 98 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_SEND_COMMAND_TO_REMOTE), 99 [this](MessageParcel& data, MessageParcel& reply) { return HandleRemoteCastAudio(data, reply); }}, 100 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_START_DEVICE_LOGGING), 101 [this](MessageParcel& data, MessageParcel& reply) { return HandleStartDeviceLogging(data, reply); }}, 102 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_STOP_DEVICE_LOGGING), 103 [this](MessageParcel& data, MessageParcel& reply) { return HandleStopDeviceLogging(data, reply); }}, 104 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_START_CAST_DISCOVERY), 105 [this](MessageParcel& data, MessageParcel& reply) { return HandleStartCastDiscovery(data, reply); }}, 106 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_STOP_CAST_DISCOVERY), 107 [this](MessageParcel& data, MessageParcel& reply) { return HandleStopCastDiscovery(data, reply); }}, 108 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_SET_DISCOVERYABLE), 109 [this](MessageParcel& data, MessageParcel& reply) { return HandleSetDiscoverable(data, reply); }}, 110 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_START_CAST), 111 [this](MessageParcel& data, MessageParcel& reply) { return HandleStartCast(data, reply); }}, 112 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_STOP_CAST), 113 [this](MessageParcel& data, MessageParcel& reply) { return HandleStopCast(data, reply); }}, 114 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_CLOSE), 115 [this](MessageParcel& data, MessageParcel& reply) { return HandleClose(data, reply); }} 116 }; 117 std::map<uint32_t, std::string> mapCodeToFuncNameXCollie = { 118 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_CREATE_SESSION), 119 "HandleCreateSessionInner"}, 120 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_GET_ALL_SESSION_DESCRIPTORS), 121 "HandleGetAllSessionDescriptors"}, 122 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_GET_SESSION_DESCRIPTORS_BY_ID), 123 "HandleGetSessionDescriptorsById"}, 124 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_GET_HISTORY_SESSION_DESCRIPTORS), 125 "HandleGetHistoricalSessionDescriptors"}, 126 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_GET_HISTORY_AVQUEUE_INFOS), 127 "HandleGetHistoricalAVQueueInfos"}, 128 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_START_AV_PLAYBACK), 129 "HandleStartAVPlayback"}, 130 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_CREATE_CONTROLLER), 131 "HandleCreateControllerInner"}, 132 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_GET_AV_CAST_CONTROLLER), 133 "HandleGetAVCastControllerInner"}, 134 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_REGISTER_SESSION_LISTENER), 135 "HandleRegisterSessionListener"}, 136 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_REGISTER_SESSION_LISTENER_FOR_ALL_USERS), 137 "HandleRegisterSessionListenerForAllUsers"}, 138 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_SEND_SYSTEM_AV_KEY_EVENT), 139 "HandleSendSystemAVKeyEvent"}, 140 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_SEND_SYSTEM_CONTROL_COMMAND), 141 "HandleSendSystemControlCommand"}, 142 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_REGISTER_CLIENT_DEATH), 143 "HandleRegisterClientDeathObserver"}, 144 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_CAST_AUDIO), 145 "HandleCastAudio"}, 146 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_CAST_AUDIO_FOR_ALL), 147 "HandleCastAudioForAll"}, 148 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_SEND_COMMAND_TO_REMOTE), 149 "HandleRemoteCastAudio"}, 150 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_START_DEVICE_LOGGING), 151 "HandleStartDeviceLogging"}, 152 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_STOP_DEVICE_LOGGING), 153 "HandleStopDeviceLogging"}, 154 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_START_CAST_DISCOVERY), 155 "HandleStartCastDiscovery"}, 156 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_STOP_CAST_DISCOVERY), 157 "HandleStopCastDiscovery"}, 158 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_SET_DISCOVERYABLE), 159 "HandleSetDiscoverable"}, 160 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_START_CAST), 161 "HandleStartCast"}, 162 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_STOP_CAST), 163 "HandleStopCast"}, 164 {static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_CLOSE), 165 "HandleClose"} 166 }; 167 168 static constexpr int32_t RECEIVE_DEVICE_NUM_MAX = 10; 169 }; 170 } // namespace OHOS::AVSession 171 #endif // OHOS_AVSESSION_SERVICE_STUB_H 172