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_STUB_H
17 #define OHOS_AVSESSION_STUB_H
18 
19 #include <map>
20 #include "iav_session.h"
21 #include "iremote_stub.h"
22 #include "want_agent.h"
23 #include "want_params.h"
24 #include "avsession_log.h"
25 #include "avsession_errors.h"
26 
27 #ifdef CASTPLUS_CAST_ENGINE_ENABLE
28 #include "avcast_controller.h"
29 #endif
30 
31 namespace OHOS::AVSession {
32 class AVSessionStub : public IRemoteStub<IAVSession> {
33 public:
34     int32_t OnRemoteRequest(uint32_t code, MessageParcel& data, MessageParcel& reply, MessageOption& option) override;
35 
RegisterCallback(const std::shared_ptr<AVSessionCallback> & callback)36     int32_t RegisterCallback(const std::shared_ptr<AVSessionCallback>& callback) override
37     {
38         return ERR_NONE;
39     }
40 
GetController()41     std::shared_ptr<AVSessionController> GetController() override
42     {
43         return nullptr;
44     }
45 
46 #ifdef CASTPLUS_CAST_ENGINE_ENABLE
GetAVCastController()47     std::shared_ptr<AVCastController> GetAVCastController() override
48     {
49         return nullptr;
50     }
51 #endif
52 
53 private:
54     int32_t HandleGetSessionId(MessageParcel& data, MessageParcel& reply);
55 
56     int32_t HandleGetSessionType(MessageParcel& data, MessageParcel& reply);
57 
58     int32_t HandleSetAVCallMetaData(MessageParcel& data, MessageParcel& reply);
59 
60     int32_t HandleSetAVCallState(MessageParcel& data, MessageParcel& reply);
61 
62     int32_t HandleGetAVMetaData(MessageParcel& data, MessageParcel& reply);
63 
64     int32_t SetImageData(AVMetaData& meta, const char *buffer, int twoImageLength);
65 
66     int32_t HandleSetAVMetaData(MessageParcel& data, MessageParcel& reply);
67 
68     int32_t HandleGetAVPlaybackState(MessageParcel& data, MessageParcel& reply);
69 
70     int32_t HandleSetAVPlaybackState(MessageParcel& data, MessageParcel& reply);
71 
72     int32_t HandleSetLaunchAbility(MessageParcel& data, MessageParcel& reply);
73 
74     int32_t HandleGetExtras(MessageParcel& data, MessageParcel& reply);
75 
76     int32_t HandleSetExtras(MessageParcel& data, MessageParcel& reply);
77 
78     int32_t HandleGetController(MessageParcel& data, MessageParcel& reply);
79 
80 #ifdef CASTPLUS_CAST_ENGINE_ENABLE
81     int32_t HandleGetAVCastController(MessageParcel& data, MessageParcel& reply);
82 
83     int32_t HandleReleaseCast(MessageParcel& data, MessageParcel& reply);
84 
85     int32_t HandleStartCastDisplayListener(MessageParcel& data, MessageParcel& reply);
86 
87     int32_t HandleStopCastDisplayListener(MessageParcel& data, MessageParcel& reply);
88 
89     int32_t HandleGetAllCastDisplays(MessageParcel& data, MessageParcel& reply);
90 #endif
91 
92     int32_t HandleRegisterCallbackInner(MessageParcel& data, MessageParcel& reply);
93 
94     int32_t HandleActivate(MessageParcel& data, MessageParcel& reply);
95 
96     int32_t HandleDeactivate(MessageParcel& data, MessageParcel& reply);
97 
98     int32_t HandleIsActive(MessageParcel& data, MessageParcel& reply);
99 
100     int32_t HandleDestroy(MessageParcel& data, MessageParcel& reply);
101 
102     int32_t HandleAddSupportCommand(MessageParcel& data, MessageParcel& reply);
103 
104     int32_t HandleDeleteSupportCommand(MessageParcel& data, MessageParcel& reply);
105 
106     int32_t HandleSetSessionEvent(MessageParcel& data, MessageParcel& reply);
107 
108     int32_t HandleGetAVQueueItems(MessageParcel& data, MessageParcel& reply);
109 
110     int32_t HandleSetAVQueueItems(MessageParcel& data, MessageParcel& reply);
111 
112     int32_t HandleGetAVQueueTitle(MessageParcel& data, MessageParcel& reply);
113 
114     int32_t HandleSetAVQueueTitle(MessageParcel& data, MessageParcel& reply);
115 
116     static bool CheckInterfaceToken(MessageParcel& data);
117 
118     using HandlerFunc = std::function<int32_t(MessageParcel&, MessageParcel&)>;
119     std::map<uint32_t, HandlerFunc> handlers = {
120         {SESSION_CMD_GET_SESSION_ID,
121             [this](MessageParcel& data, MessageParcel& reply) { return HandleGetSessionId(data, reply); }},
122         {SESSION_CMD_GET_SESSION_TYPE,
123             [this](MessageParcel& data, MessageParcel& reply) { return HandleGetSessionType(data, reply); }},
124         {SESSION_CMD_GET_META_DATA,
125             [this](MessageParcel& data, MessageParcel& reply) { return HandleGetAVMetaData(data, reply); }},
126         {SESSION_CMD_SET_META_DATA,
127             [this](MessageParcel& data, MessageParcel& reply) { return HandleSetAVMetaData(data, reply); }},
128         {SESSION_CMD_GET_PLAYBACK_STATE,
129             [this](MessageParcel& data, MessageParcel& reply) { return HandleGetAVPlaybackState(data, reply); }},
130         {SESSION_CMD_SET_PLAYBACK_STATE,
131             [this](MessageParcel& data, MessageParcel& reply) { return HandleSetAVPlaybackState(data, reply); }},
132         {SESSION_CMD_GET_QUEUE_ITEMS,
133             [this](MessageParcel& data, MessageParcel& reply) { return HandleGetAVQueueItems(data, reply); }},
134         {SESSION_CMD_SET_QUEUE_ITEMS,
135             [this](MessageParcel& data, MessageParcel& reply) { return HandleSetAVQueueItems(data, reply); }},
136         {SESSION_CMD_GET_QUEUE_TITLE,
137             [this](MessageParcel& data, MessageParcel& reply) { return HandleGetAVQueueTitle(data, reply); }},
138         {SESSION_CMD_SET_QUEUE_TITLE,
139             [this](MessageParcel& data, MessageParcel& reply) { return HandleSetAVQueueTitle(data, reply); }},
140         {SESSION_CMD_GET_EXTRAS,
141             [this](MessageParcel& data, MessageParcel& reply) { return HandleGetExtras(data, reply); }},
142         {SESSION_CMD_SET_EXTRAS,
143             [this](MessageParcel& data, MessageParcel& reply) { return HandleSetExtras(data, reply); }},
144         {SESSION_CMD_SET_LAUNCH_ABILITY,
145             [this](MessageParcel& data, MessageParcel& reply) { return HandleSetLaunchAbility(data, reply); }},
146         {SESSION_CMD_GET_CONTROLLER,
147             [this](MessageParcel& data, MessageParcel& reply) { return HandleGetController(data, reply); }},
148 #ifdef CASTPLUS_CAST_ENGINE_ENABLE
149         {SESSION_CMD_GET_AVCAST_CONTROLLER,
150             [this](MessageParcel& data, MessageParcel& reply) { return HandleGetAVCastController(data, reply); }},
151         {SESSION_CMD_START_CAST_DISPLAY_LISTENER,
152             [this](MessageParcel& data, MessageParcel& reply) { return HandleStartCastDisplayListener(data, reply); }},
153         {SESSION_CMD_STOP_CAST_DISPLAY_LISTENER,
154             [this](MessageParcel& data, MessageParcel& reply) { return HandleStopCastDisplayListener(data, reply); }},
155         {SESSION_CMD_GET_ALL_CAST_DISPLAYS,
156             [this](MessageParcel& data, MessageParcel& reply) { return HandleGetAllCastDisplays(data, reply); }},
157 #endif
158         {SESSION_CMD_REGISTER_CALLBACK,
159             [this](MessageParcel& data, MessageParcel& reply) { return HandleRegisterCallbackInner(data, reply); }},
160         {SESSION_CMD_ACTIVATE,
161             [this](MessageParcel& data, MessageParcel& reply) { return HandleActivate(data, reply); }},
162         {SESSION_CMD_DEACTIVATE,
163             [this](MessageParcel& data, MessageParcel& reply) { return HandleDeactivate(data, reply); }},
164         {SESSION_CMD_ISACTIVE,
165             [this](MessageParcel& data, MessageParcel& reply) { return HandleIsActive(data, reply); }},
166         {SESSION_CMD_DESTROY,
167             [this](MessageParcel& data, MessageParcel& reply) { return HandleDestroy(data, reply); }},
168         {SESSION_CMD_ADD_SUPPORT_COMMAND,
169             [this](MessageParcel& data, MessageParcel& reply) { return HandleAddSupportCommand(data, reply); }},
170         {SESSION_CMD_DELETE_SUPPORT_COMMAND,
171             [this](MessageParcel& data, MessageParcel& reply) { return HandleDeleteSupportCommand(data, reply); }},
172         {SESSION_CMD_SET_SESSION_EVENT,
173             [this](MessageParcel& data, MessageParcel& reply) { return HandleSetSessionEvent(data, reply); }},
174 #ifdef CASTPLUS_CAST_ENGINE_ENABLE
175         {SESSION_CMD_RELEASE_CAST,
176             [this](MessageParcel& data, MessageParcel& reply) { return HandleReleaseCast(data, reply); }},
177 #endif
178         {SESSION_CMD_SET_AVCALL_META_DATA,
179             [this](MessageParcel& data, MessageParcel& reply) { return HandleSetAVCallMetaData(data, reply); }},
180         {SESSION_CMD_SET_AVCALL_STATE,
181             [this](MessageParcel& data, MessageParcel& reply) { return HandleSetAVCallState(data, reply); }}
182     };
183     std::map<uint32_t, std::string> mapCodeToFuncNameXCollie = {
184         {SESSION_CMD_GET_SESSION_ID, "HandleGetSessionId"},
185         {SESSION_CMD_GET_SESSION_TYPE, "HandleGetSessionType"},
186         {SESSION_CMD_GET_META_DATA, "HandleGetAVMetaData"},
187         {SESSION_CMD_SET_META_DATA, "HandleSetAVMetaData"},
188         {SESSION_CMD_GET_PLAYBACK_STATE, "HandleGetAVPlaybackState"},
189         {SESSION_CMD_SET_PLAYBACK_STATE, "HandleSetAVPlaybackState"},
190         {SESSION_CMD_GET_QUEUE_ITEMS, "HandleGetAVQueueItems"},
191         {SESSION_CMD_SET_QUEUE_ITEMS, "HandleSetAVQueueItems"},
192         {SESSION_CMD_GET_QUEUE_TITLE, "HandleGetAVQueueTitle"},
193         {SESSION_CMD_SET_QUEUE_TITLE, "HandleSetAVQueueTitle"},
194         {SESSION_CMD_GET_EXTRAS, "HandleGetExtras"},
195         {SESSION_CMD_SET_EXTRAS, "HandleSetExtras"},
196         {SESSION_CMD_SET_LAUNCH_ABILITY, "HandleSetLaunchAbility"},
197         {SESSION_CMD_GET_CONTROLLER, "HandleGetController"},
198 #ifdef CASTPLUS_CAST_ENGINE_ENABLE
199         {SESSION_CMD_GET_AVCAST_CONTROLLER, "HandleGetAVCastController"},
200         {SESSION_CMD_START_CAST_DISPLAY_LISTENER, "HandleStartCastDisplayListener"},
201         {SESSION_CMD_STOP_CAST_DISPLAY_LISTENER, "HandleStopCastDisplayListener"},
202         {SESSION_CMD_GET_ALL_CAST_DISPLAYS, "HandleGetAllCastDisplays"},
203 #endif
204         {SESSION_CMD_REGISTER_CALLBACK, "HandleRegisterCallbackInner"},
205         {SESSION_CMD_ACTIVATE, "HandleActivate"},
206         {SESSION_CMD_DEACTIVATE, "HandleDeactivate"},
207         {SESSION_CMD_ISACTIVE, "HandleIsActive"},
208         {SESSION_CMD_DESTROY, "HandleDestroy"},
209         {SESSION_CMD_ADD_SUPPORT_COMMAND, "HandleAddSupportCommand"},
210         {SESSION_CMD_DELETE_SUPPORT_COMMAND, "HandleDeleteSupportCommand"},
211         {SESSION_CMD_SET_SESSION_EVENT, "HandleSetSessionEvent"},
212 #ifdef CASTPLUS_CAST_ENGINE_ENABLE
213         {SESSION_CMD_RELEASE_CAST, "HandleReleaseCast"},
214 #endif
215         {SESSION_CMD_SET_AVCALL_META_DATA, "HandleSetAVCallMetaData"},
216         {SESSION_CMD_SET_AVCALL_STATE, "HandleSetAVCallState"}
217     };
218 
219     int32_t MAX_IMAGE_SIZE = 10 * 1024 * 1024;
220     const size_t defaultIpcCapacity = 1048576; // Increase the IPC default capacity(200K) to 1M
221 };
222 }
223 #endif // OHOS_AVSESSION_STUB_H
224