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