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_CONTROLLER_STUB_H
17 #define OHOS_AVSESSION_CONTROLLER_STUB_H
18 
19 #include <map>
20 #include "iavsession_controller.h"
21 #include "iremote_stub.h"
22 
23 namespace OHOS::AVSession {
24 class AVSessionControllerStub : public IRemoteStub<IAVSessionController> {
25 public:
26     int32_t OnRemoteRequest(uint32_t code, MessageParcel& data, MessageParcel& reply, MessageOption& option) override;
27 
RegisterCallback(const std::shared_ptr<AVControllerCallback> & callback)28     int32_t RegisterCallback(const std::shared_ptr<AVControllerCallback>& callback) override
29     {
30         return 0;
31     }
32 
GetRealPlaybackPosition()33     int64_t GetRealPlaybackPosition() override
34     {
35         return 0;
36     }
37 
IsDestroy()38     bool IsDestroy() override
39     {
40         return true;
41     }
42 
43 private:
44     int32_t HandleRegisterCallbackInner(MessageParcel& data, MessageParcel& reply);
45 
46     int32_t HandleDestroy(MessageParcel& data, MessageParcel& reply);
47 
48     int32_t HandleGetAVCallState(MessageParcel& data, MessageParcel& reply);
49 
50     int32_t HandleGetAVCallMetaData(MessageParcel& data, MessageParcel& reply);
51 
52     int32_t HandleGetAVPlaybackState(MessageParcel& data, MessageParcel& reply);
53 
54     int32_t HandleSendControlCommand(MessageParcel& data, MessageParcel& reply);
55 
56     int32_t HandleSendCommonCommand(MessageParcel& data, MessageParcel& reply);
57 
58     int32_t HandleGetAVMetaData(MessageParcel& data, MessageParcel& reply);
59 
60     int32_t HandleGetAVQueueItems(MessageParcel& data, MessageParcel& reply);
61 
62     int32_t HandleGetAVQueueTitle(MessageParcel& data, MessageParcel& reply);
63 
64     int32_t HandleSkipToQueueItem(MessageParcel& data, MessageParcel& reply);
65 
66     int32_t HandleGetExtras(MessageParcel& data, MessageParcel& reply);
67 
68     int32_t HandleSendAVKeyEvent(MessageParcel& data, MessageParcel& reply);
69 
70     int32_t HandleGetLaunchAbility(MessageParcel& data, MessageParcel& reply);
71 
72     int32_t HandleGetValidCommands(MessageParcel& data, MessageParcel& reply);
73 
74     int32_t HandleSetAVCallMetaFilter(MessageParcel& data, MessageParcel& reply);
75 
76     int32_t HandleSetAVCallStateFilter(MessageParcel& data, MessageParcel& reply);
77 
78     int32_t HandleSetMetaFilter(MessageParcel& data, MessageParcel& reply);
79 
80     int32_t HandleSetPlaybackFilter(MessageParcel& data, MessageParcel& reply);
81 
82     int32_t HandleIsSessionActive(MessageParcel& data, MessageParcel& reply);
83 
84     int32_t HandleGetSessionId(MessageParcel& data, MessageParcel& reply);
85 
86     static bool CheckInterfaceToken(MessageParcel& data);
87 
88     static void DoMetadataImgCleanInStub(AVMetaData& data);
89     static int32_t DoMetadataGetReplyInStub(AVMetaData& metaData, MessageParcel& reply);
90 
91     using HandlerFunc = std::function<int32_t(MessageParcel&, MessageParcel&)>;
92     std::map<uint32_t, HandlerFunc> handlers = {
93         {CONTROLLER_CMD_REGISTER_CALLBACK,
94             [this](MessageParcel& data, MessageParcel& reply) { return HandleRegisterCallbackInner(data, reply); }},
95         {CONTROLLER_CMD_DESTROY,
96             [this](MessageParcel& data, MessageParcel& reply) { return HandleDestroy(data, reply); }},
97         {CONTROLLER_CMD_GET_AV_PLAYBACK_STATE,
98             [this](MessageParcel& data, MessageParcel& reply) { return HandleGetAVPlaybackState(data, reply); }},
99         {CONTROLLER_CMD_GET_AV_META_DATA,
100             [this](MessageParcel& data, MessageParcel& reply) { return HandleGetAVMetaData(data, reply); }},
101         {CONTROLLER_CMD_SEND_AV_KEYEVENT,
102             [this](MessageParcel& data, MessageParcel& reply) { return HandleSendAVKeyEvent(data, reply); }},
103         {CONTROLLER_CMD_GET_LAUNCH_ABILITY,
104             [this](MessageParcel& data, MessageParcel& reply) { return HandleGetLaunchAbility(data, reply); }},
105         {CONTROLLER_CMD_GET_VALID_COMMANDS,
106             [this](MessageParcel& data, MessageParcel& reply) { return HandleGetValidCommands(data, reply); }},
107         {CONTROLLER_CMD_SEND_CONTROL_COMMAND,
108             [this](MessageParcel& data, MessageParcel& reply) { return HandleSendControlCommand(data, reply); }},
109         {CONTROLLER_CMD_SEND_COMMON_COMMAND,
110             [this](MessageParcel& data, MessageParcel& reply) { return HandleSendCommonCommand(data, reply); }},
111         {CONTROLLER_CMD_SET_META_FILTER,
112             [this](MessageParcel& data, MessageParcel& reply) { return HandleSetMetaFilter(data, reply); }},
113         {CONTROLLER_CMD_SET_PLAYBACK_FILTER,
114             [this](MessageParcel& data, MessageParcel& reply) { return HandleSetPlaybackFilter(data, reply); }},
115         {CONTROLLER_CMD_IS_SESSION_ACTIVE,
116             [this](MessageParcel& data, MessageParcel& reply) { return HandleIsSessionActive(data, reply); }},
117         {CONTROLLER_CMD_GET_SESSION_ID,
118             [this](MessageParcel& data, MessageParcel& reply) { return HandleGetSessionId(data, reply); }},
119         {CONTROLLER_CMD_GET_AV_QUEUE_ITEMS,
120             [this](MessageParcel& data, MessageParcel& reply) { return HandleGetAVQueueItems(data, reply); }},
121         {CONTROLLER_CMD_GET_AV_QUEUE_TITLE,
122             [this](MessageParcel& data, MessageParcel& reply) { return HandleGetAVQueueTitle(data, reply); }},
123         {CONTROLLER_CMD_SKIP_TO_QUEUE_ITEM,
124             [this](MessageParcel& data, MessageParcel& reply) { return HandleSkipToQueueItem(data, reply); }},
125         {CONTROLLER_CMD_GET_EXTRAS,
126             [this](MessageParcel& data, MessageParcel& reply) { return HandleGetExtras(data, reply); }},
127         {CONTROLLER_CMD_GET_AVCALL_META_DATA,
128             [this](MessageParcel& data, MessageParcel& reply) { return HandleGetAVCallMetaData(data, reply); }},
129         {CONTROLLER_CMD_SET_AVCALL_META_FILTER,
130             [this](MessageParcel& data, MessageParcel& reply) { return HandleSetAVCallMetaFilter(data, reply); }},
131         {CONTROLLER_CMD_GET_AVCALL_STATE,
132             [this](MessageParcel& data, MessageParcel& reply) { return HandleGetAVCallState(data, reply); }},
133         {CONTROLLER_CMD_SET_AVCALL_STATE_FILTER,
134             [this](MessageParcel& data, MessageParcel& reply) { return HandleSetAVCallStateFilter(data, reply); }}
135     };
136     std::map<uint32_t, std::string> mapCodeToFuncNameXCollie = {
137         {CONTROLLER_CMD_REGISTER_CALLBACK, "HandleRegisterCallbackInner"},
138         {CONTROLLER_CMD_DESTROY, "HandleDestroy"},
139         {CONTROLLER_CMD_GET_AV_PLAYBACK_STATE, "HandleGetAVPlaybackState"},
140         {CONTROLLER_CMD_GET_AV_META_DATA, "HandleGetAVMetaData"},
141         {CONTROLLER_CMD_SEND_AV_KEYEVENT, "HandleSendAVKeyEvent"},
142         {CONTROLLER_CMD_GET_LAUNCH_ABILITY, "HandleGetLaunchAbility"},
143         {CONTROLLER_CMD_GET_VALID_COMMANDS, "HandleGetValidCommands"},
144         {CONTROLLER_CMD_SEND_CONTROL_COMMAND, "HandleSendControlCommand"},
145         {CONTROLLER_CMD_SEND_COMMON_COMMAND, "HandleSendCommonCommand"},
146         {CONTROLLER_CMD_SET_META_FILTER, "HandleSetMetaFilter"},
147         {CONTROLLER_CMD_SET_PLAYBACK_FILTER, "HandleSetPlaybackFilter"},
148         {CONTROLLER_CMD_IS_SESSION_ACTIVE, "HandleIsSessionActive"},
149         {CONTROLLER_CMD_GET_SESSION_ID, "HandleGetSessionId"},
150         {CONTROLLER_CMD_GET_AV_QUEUE_ITEMS, "HandleGetAVQueueItems"},
151         {CONTROLLER_CMD_GET_AV_QUEUE_TITLE, "HandleGetAVQueueTitle"},
152         {CONTROLLER_CMD_SKIP_TO_QUEUE_ITEM, "HandleSkipToQueueItem"},
153         {CONTROLLER_CMD_GET_EXTRAS, "HandleGetExtras"},
154         {CONTROLLER_CMD_GET_AVCALL_META_DATA, "HandleGetAVCallMetaData"},
155         {CONTROLLER_CMD_SET_AVCALL_META_FILTER, "HandleSetAVCallMetaFilter"},
156         {CONTROLLER_CMD_GET_AVCALL_STATE, "HandleGetAVCallState"},
157         {CONTROLLER_CMD_SET_AVCALL_STATE_FILTER, "HandleSetAVCallStateFilter"}
158     };
159     const size_t defaultIpcCapacity = 1048576; // Increase the IPC default capacity(200K) to 1M
160     std::recursive_mutex getMetadataLock_;
161 };
162 } // namespace OHOS::AVSession
163 #endif // OHOS_AVSESSION_CONTROLLER_STUB_H