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