1 /*
2  * Copyright (C) 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 #ifndef LOCATOR_SKELETON_H
17 #define LOCATOR_SKELETON_H
18 
19 #include <map>
20 #include <string>
21 
22 #include "iremote_object.h"
23 #include "iremote_stub.h"
24 #include "message_option.h"
25 #include "message_parcel.h"
26 
27 #include "app_identity.h"
28 #include "i_locator.h"
29 #include "locationhub_ipc_interface_code.h"
30 
31 namespace OHOS {
32 namespace Location {
33 class ScanCallbackDeathRecipient : public IRemoteObject::DeathRecipient {
34 public:
35     void OnRemoteDied(const wptr<IRemoteObject> &remote) override;
36     ScanCallbackDeathRecipient();
37     ~ScanCallbackDeathRecipient() override;
38 };
39 
40 class LocatorAbilityStub : public IRemoteStub<ILocator> {
41 public:
42     using LocatorMsgHandle = std::function<int(MessageParcel &, MessageParcel &, AppIdentity &)>;
43     using LocatorMsgHandleMap = std::map<LocatorInterfaceCode, LocatorMsgHandle>;
44 
45     LocatorAbilityStub();
46     virtual ~LocatorAbilityStub() = default;
47     virtual bool CancelIdleState() = 0;
48     virtual void RemoveUnloadTask(uint32_t code) = 0;
49     virtual void PostUnloadTask(uint32_t code) = 0;
50     void InitLocatorHandleMap();
51     int32_t OnRemoteRequest(uint32_t code,
52         MessageParcel &data, MessageParcel &reply, MessageOption &option) override;
53     int32_t Dump(int32_t fd, const std::vector<std::u16string>& args) override;
54 
55 private:
56     int PreGetSwitchState(MessageParcel &data, MessageParcel &reply, AppIdentity &identity);
57     int PreRegisterSwitchCallback(MessageParcel &data, MessageParcel &reply, AppIdentity &identity);
58     int PreUnregisterSwitchCallback(MessageParcel &data, MessageParcel &reply, AppIdentity &identity);
59     int PreStartLocating(MessageParcel &data, MessageParcel &reply, AppIdentity &identity);
60     int PreStopLocating(MessageParcel &data, MessageParcel &reply, AppIdentity &identity);
61     int PreGetCacheLocation(MessageParcel &data, MessageParcel &reply, AppIdentity &identity);
62     int PreEnableAbility(MessageParcel &data, MessageParcel &reply, AppIdentity &identity);
63     int PreEnableAbilityForUser(MessageParcel &data, MessageParcel &reply, AppIdentity &identity);
64     int PreUpdateSaAbility(MessageParcel &data, MessageParcel &reply, AppIdentity &identity);
65 #ifdef FEATURE_GEOCODE_SUPPORT
66     int PreIsGeoConvertAvailable(MessageParcel &data, MessageParcel &reply, AppIdentity &identity);
67     int PreGetAddressByCoordinate(MessageParcel &data, MessageParcel &reply, AppIdentity &identity);
68     int PreGetAddressByLocationName(MessageParcel &data, MessageParcel &reply, AppIdentity &identity);
69     int PreEnableReverseGeocodingMock(MessageParcel &data, MessageParcel &reply, AppIdentity &identity);
70     int PreDisableReverseGeocodingMock(MessageParcel &data, MessageParcel &reply, AppIdentity &identity);
71     int PreSetReverseGeocodingMockInfo(MessageParcel &data, MessageParcel &reply, AppIdentity &identity);
72 #endif
73 #ifdef FEATURE_GNSS_SUPPORT
74     int PreRegisterGnssStatusCallback(MessageParcel &data, MessageParcel &reply, AppIdentity &identity);
75     int PreUnregisterGnssStatusCallback(MessageParcel &data, MessageParcel &reply, AppIdentity &identity);
76     int PreRegisterNmeaMessageCallback(MessageParcel &data, MessageParcel &reply, AppIdentity &identity);
77     int PreUnregisterNmeaMessageCallback(MessageParcel &data, MessageParcel &reply, AppIdentity &identity);
78     int PreRegisterNmeaMessageCallbackV9(MessageParcel &data, MessageParcel &reply, AppIdentity &identity);
79     int PreUnregisterNmeaMessageCallbackV9(MessageParcel &data, MessageParcel &reply, AppIdentity &identity);
80     int PreStartCacheLocating(MessageParcel &data, MessageParcel &reply, AppIdentity &identity);
81     int PreStopCacheLocating(MessageParcel &data, MessageParcel &reply, AppIdentity &identity);
82     int PreGetCachedGnssLocationsSize(MessageParcel &data, MessageParcel &reply, AppIdentity &identity);
83     int PreFlushCachedGnssLocations(MessageParcel &data, MessageParcel &reply, AppIdentity &identity);
84     int PreSendCommand(MessageParcel &data, MessageParcel &reply, AppIdentity &identity);
85     int PreAddFence(MessageParcel &data, MessageParcel &reply, AppIdentity &identity);
86     int PreRemoveFence(MessageParcel &data, MessageParcel &reply, AppIdentity &identity);
87     int PreAddGnssGeofence(MessageParcel &data, MessageParcel &reply, AppIdentity &identity);
88     int PreRemoveGnssGeofence(MessageParcel &data, MessageParcel &reply, AppIdentity &identity);
89     int PreQuerySupportCoordinateSystemType(MessageParcel &data, MessageParcel &reply, AppIdentity &identity);
90 #endif
91     int PreIsLocationPrivacyConfirmed(MessageParcel &data, MessageParcel &reply, AppIdentity &identity);
92     int PreSetLocationPrivacyConfirmStatus(MessageParcel &data, MessageParcel &reply, AppIdentity &identity);
93     int PreEnableLocationMock(MessageParcel &data, MessageParcel &reply, AppIdentity &identity);
94     int PreDisableLocationMock(MessageParcel &data, MessageParcel &reply, AppIdentity &identity);
95     int PreSetMockedLocations(MessageParcel &data, MessageParcel &reply, AppIdentity &identity);
96     int PreProxyForFreeze(MessageParcel &data, MessageParcel &reply, AppIdentity &identity);
97     int PreResetAllProxy(MessageParcel &data, MessageParcel &reply, AppIdentity &identity);
98     int PreReportLocation(MessageParcel &data, MessageParcel &reply, AppIdentity &identity);
99     int PreRegisterLocatingRequiredDataCallback(MessageParcel &data, MessageParcel &reply, AppIdentity &identity);
100     int PreUnregisterLocatingRequiredDataCallback(MessageParcel &data, MessageParcel &reply, AppIdentity &identity);
101     int PreRegisterLocationError(MessageParcel &data, MessageParcel &reply, AppIdentity &identity);
102     int PreUnregisterLocationError(MessageParcel &data, MessageParcel &reply, AppIdentity &identity);
103     int PreReportLocationError(MessageParcel &data, MessageParcel &reply, AppIdentity &identity);
104     int PreGetCurrentWifiBssidForLocating(MessageParcel &data, MessageParcel &reply, AppIdentity &identity);
105 
106 private:
107     LocatorMsgHandleMap locatorHandleMap_;
108     bool CheckRssProcessName(MessageParcel &reply, AppIdentity &identity);
109     bool CheckLocationPermission(MessageParcel &reply, AppIdentity &identity);
110     bool CheckSettingsPermission(MessageParcel &reply, AppIdentity &identity);
111     bool CheckPreciseLocationPermissions(MessageParcel &reply, AppIdentity &identity);
112     bool CheckLocationSwitchState(MessageParcel &reply);
113     static void SaDumpInfo(std::string& result);
114     void WriteLocationDenyReportEvent(uint32_t code, int errCode, MessageParcel &data, AppIdentity &identity);
115     int DoProcessFenceRequest(
116         LocatorInterfaceCode code, MessageParcel &data, MessageParcel &reply, AppIdentity &identity);
117     void ConstructLocatorHandleMap();
118     void ConstructLocatorEnhanceHandleMap();
119     void ConstructLocatorMockHandleMap();
120     void ConstructGeocodeHandleMap();
121     bool IsStopAction(uint32_t code);
122     bool CheckRequestAvailable(uint32_t code, AppIdentity &identity);
123     void ConstructGnssHandleMap();
124     void ConstructGnssEnhanceHandleMap();
125     sptr<IRemoteObject::DeathRecipient> scanRecipient_ = new (std::nothrow) ScanCallbackDeathRecipient();
126 };
127 
128 class SwitchCallbackDeathRecipient : public IRemoteObject::DeathRecipient {
129 public:
130     void OnRemoteDied(const wptr<IRemoteObject> &remote) override;
131     SwitchCallbackDeathRecipient();
132     ~SwitchCallbackDeathRecipient() override;
133 };
134 } // namespace Location
135 } // namespace OHOS
136 #endif // LOCATOR_SKELETON_H
137