• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021-2022 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 #include "sys_event_service_stub.h"
17 
18 #include "errors.h"
19 #include "hilog/log.h"
20 #include "parcelable_vector_rw.h"
21 #include "query_argument.h"
22 
23 namespace OHOS {
24 namespace HiviewDFX {
25 static constexpr HiLogLabel LABEL = { LOG_CORE, 0xD002D08, "HiView-SysEventServiceStub" };
HandleAddSysEventListener(MessageParcel & data,MessageParcel & reply,MessageOption & option)26 int32_t SysEventServiceStub::HandleAddSysEventListener(MessageParcel& data,
27     MessageParcel& reply, MessageOption& option)
28 {
29     std::vector<SysEventRule> rules;
30     bool ret = ReadVectorFromParcel(data, rules);
31     if (!ret) {
32         HiLog::Error(LABEL, "parcel read rules failed.");
33         return ERR_FLATTEN_OBJECT;
34     }
35     sptr<IRemoteObject> remoteObject = data.ReadRemoteObject();
36     if (remoteObject == nullptr) {
37         return ERR_FLATTEN_OBJECT;
38     }
39     sptr<ISysEventCallback> callback = iface_cast<ISysEventCallback>(remoteObject);
40     ret = reply.WriteInt32(AddListener(rules, callback));
41     if (!ret) {
42         HiLog::Error(LABEL, "parcel write return-value of AddListener failed.");
43         return ERR_FLATTEN_OBJECT;
44     }
45     return ERR_OK;
46 }
47 
HandleRemoveSysEventListener(MessageParcel & data,MessageParcel & reply,MessageOption & option)48 int32_t SysEventServiceStub::HandleRemoveSysEventListener(MessageParcel& data,
49     MessageParcel& reply, MessageOption& option)
50 {
51     sptr<IRemoteObject> remoteObject = data.ReadRemoteObject();
52     if (remoteObject == nullptr) {
53         return ERR_FLATTEN_OBJECT;
54     }
55     sptr<ISysEventCallback> callback = iface_cast<ISysEventCallback>(remoteObject);
56     if (callback == nullptr) {
57         HiLog::Error(LABEL, "parcel read callback failed.");
58         return ERR_FLATTEN_OBJECT;
59     }
60     bool ret = reply.WriteInt32(RemoveListener(callback));
61     if (!ret) {
62         HiLog::Error(LABEL, "parcel write return-value of RemoveListener failed.");
63         return ERR_FLATTEN_OBJECT;
64     }
65     return ERR_OK;
66 }
67 
HandleQueryEvent(MessageParcel & data,MessageParcel & reply,MessageOption & option)68 int32_t SysEventServiceStub::HandleQueryEvent(MessageParcel& data,
69     MessageParcel& reply, MessageOption& option)
70 {
71     std::unique_ptr<QueryArgument> queryArgument(data.ReadParcelable<QueryArgument>());
72     if (queryArgument == nullptr) {
73         HiLog::Error(LABEL, "parcel read query arguments failed.");
74         return ERR_FLATTEN_OBJECT;
75     }
76     std::vector<SysEventQueryRule> queryRules;
77     auto ret = ReadVectorFromParcel(data, queryRules);
78     if (!ret) {
79         HiLog::Error(LABEL, "parcel read query rules failed.");
80         return ERR_FLATTEN_OBJECT;
81     }
82     sptr<IRemoteObject> remoteObject = data.ReadRemoteObject();
83     if (remoteObject == nullptr) {
84         HiLog::Error(LABEL, "parcel read query callback failed.");
85         return ERR_FLATTEN_OBJECT;
86     }
87     sptr<IQuerySysEventCallback> callback = iface_cast<IQuerySysEventCallback>(remoteObject);
88     ret = reply.WriteInt32(Query(*queryArgument, queryRules, callback));
89     if (!ret) {
90         HiLog::Error(LABEL, "parcel write return-value of QuerySysEvent failed.");
91         return ERR_FLATTEN_OBJECT;
92     }
93     return ERR_OK;
94 }
95 
HandleSetDebugMode(MessageParcel & data,MessageParcel & reply,MessageOption & option)96 int32_t SysEventServiceStub::HandleSetDebugMode(MessageParcel& data,
97     MessageParcel& reply, MessageOption& option)
98 {
99     sptr<IRemoteObject> remoteObject = data.ReadRemoteObject();
100     if (remoteObject == nullptr) {
101         return ERR_FLATTEN_OBJECT;
102     }
103     sptr<ISysEventCallback> callback = iface_cast<ISysEventCallback>(remoteObject);
104     bool mode = false;
105     bool ret = data.ReadBool(mode);
106     if (!ret) {
107         HiLog::Error(LABEL, "parcel read mode failed.");
108         return ERR_FLATTEN_OBJECT;
109     }
110     ret = reply.WriteInt32(SetDebugMode(callback, mode));
111     if (!ret) {
112         HiLog::Error(LABEL, "parcel write return-value of SetDebugMode failed.");
113         return ERR_FLATTEN_OBJECT;
114     }
115     return ERR_OK;
116 }
117 
OnRemoteRequest(uint32_t code,MessageParcel & data,MessageParcel & reply,MessageOption & option)118 int32_t SysEventServiceStub::OnRemoteRequest(uint32_t code, MessageParcel& data,
119     MessageParcel& reply, MessageOption& option)
120 {
121     std::u16string descripter = SysEventServiceStub::GetDescriptor();
122     std::u16string remoteDescripter = data.ReadInterfaceToken();
123     if (descripter != remoteDescripter) {
124         HiLog::Error(LABEL, "read descriptor failed.");
125         return ERR_INVALID_VALUE;
126     }
127     switch (code) {
128         case ADD_SYS_EVENT_LISTENER: {
129             return HandleAddSysEventListener(data, reply, option);
130         }
131         case REMOVE_SYS_EVENT_LISTENER: {
132             return HandleRemoveSysEventListener(data, reply, option);
133         }
134         case QUERY_SYS_EVENT: {
135             return HandleQueryEvent(data, reply, option);
136         }
137         case SET_DEBUG_MODE: {
138             return HandleSetDebugMode(data, reply, option);
139         }
140         default:
141             return IPCObjectStub::OnRemoteRequest(code, data, reply, option);
142     }
143 }
144 } // namespace HiviewDFX
145 } // namespace OHOS
146