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