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