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 #ifndef OHOS_WIFI_DEVICE_STUB_H
17 #define OHOS_WIFI_DEVICE_STUB_H
18 
19 #include <map>
20 #include "iremote_stub.h"
21 #include "i_wifi_device.h"
22 #include "i_wifi_device_callback.h"
23 
24 namespace OHOS {
25 namespace Wifi {
26 class WifiDeviceStub : public IRemoteStub<IWifiDevice> {
27 public:
28     WifiDeviceStub();
29     explicit WifiDeviceStub(int instId);
30     virtual ~WifiDeviceStub();
31 
32     using handleFunc = std::function<void(uint32_t, MessageParcel &, MessageParcel &)>;
33     using HandleFuncMap = std::map<int, handleFunc>;
34 
35     virtual int OnRemoteRequest(
36         uint32_t code, MessageParcel &data, MessageParcel &reply, MessageOption &option) override;
37 
38 private:
39     void InitHandleMap();
40     void InitHandleMapEx(void);
41     void InitHandleMapEx2();
42     void OnEnableWifi(uint32_t code, MessageParcel &data, MessageParcel &reply);
43     void OnDisableWifi(uint32_t code, MessageParcel &data, MessageParcel &reply);
44     void OnInitWifiProtect(uint32_t code, MessageParcel &data, MessageParcel &reply);
45     void OnGetWifiProtectRef(uint32_t code, MessageParcel &data, MessageParcel &reply);
46     void OnPutWifiProtectRef(uint32_t code, MessageParcel &data, MessageParcel &reply);
47     void OnIsHeldWifiProtectRef(uint32_t code, MessageParcel &data, MessageParcel &reply);
48     void OnAddDeviceConfig(uint32_t code, MessageParcel &data, MessageParcel &reply);
49     void OnUpdateDeviceConfig(uint32_t code, MessageParcel &data, MessageParcel &reply);
50     void OnRemoveDevice(uint32_t code, MessageParcel &data, MessageParcel &reply);
51     void OnRemoveAllDevice(uint32_t code, MessageParcel &data, MessageParcel &reply);
52     void OnGetDeviceConfigs(uint32_t code, MessageParcel &data, MessageParcel &reply);
53     void OnGetChangeDeviceConfig(uint32_t code, MessageParcel &data, MessageParcel &reply);
54     void OnEnableDeviceConfig(uint32_t code, MessageParcel &data, MessageParcel &reply);
55     void OnDisableDeviceConfig(uint32_t code, MessageParcel &data, MessageParcel &reply);
56     void OnConnectTo(uint32_t code, MessageParcel &data, MessageParcel &reply);
57     void OnConnect2To(uint32_t code, MessageParcel &data, MessageParcel &reply);
58     void OnStartRoamToNetwork(uint32_t code, MessageParcel &data, MessageParcel &reply);
59     void OnStartConnectToUserSelectNetwork(uint32_t code, MessageParcel &data, MessageParcel &reply);
60     void OnReConnect(uint32_t code, MessageParcel &data, MessageParcel &reply);
61     void OnReAssociate(uint32_t code, MessageParcel &data, MessageParcel &reply);
62     void OnDisconnect(uint32_t code, MessageParcel &data, MessageParcel &reply);
63     void OnStartWps(uint32_t code, MessageParcel &data, MessageParcel &reply);
64     void OnCancelWps(uint32_t code, MessageParcel &data, MessageParcel &reply);
65     void OnIsWifiActive(uint32_t code, MessageParcel &data, MessageParcel &reply);
66     void OnIsMeteredHotspot(uint32_t code, MessageParcel &data, MessageParcel &reply);
67     void OnGetWifiState(uint32_t code, MessageParcel &data, MessageParcel &reply);
68     void OnGetLinkedInfo(uint32_t code, MessageParcel &data, MessageParcel &reply);
69     void OnGetIpInfo(uint32_t code, MessageParcel &data, MessageParcel &reply);
70     void OnGetIpV6Info(uint32_t code, MessageParcel &data, MessageParcel &reply);
71     void OnSetCountryCode(uint32_t code, MessageParcel &data, MessageParcel &reply);
72     void OnGetCountryCode(uint32_t code, MessageParcel &data, MessageParcel &reply);
73     void OnRegisterCallBack(uint32_t code, MessageParcel &data, MessageParcel &reply);
74     void OnGetSignalLevel(uint32_t code, MessageParcel &data, MessageParcel &reply);
75     void OnGetSupportedFeatures(uint32_t code, MessageParcel &data, MessageParcel &reply);
76     void OnGetDeviceMacAdd(uint32_t code, MessageParcel &data, MessageParcel &reply);
77     void OnIsWifiConnected(uint32_t code, MessageParcel &data, MessageParcel &reply);
78     void OnSetLowLatencyMode(uint32_t code, MessageParcel &data, MessageParcel &reply);
79     void OnRemoveCandidateConfig(uint32_t code, MessageParcel &data, MessageParcel &reply);
80     void OnIsBandTypeSupported(uint32_t code, MessageParcel &data, MessageParcel &reply);
81     void OnGet5GHzChannelList(uint32_t code, MessageParcel &data, MessageParcel &reply);
82     void OnStartPortalCertification(uint32_t code, MessageParcel &data, MessageParcel &reply);
83     void OnGetDisconnectedReason(uint32_t code, MessageParcel &data, MessageParcel &reply);
84     void OnSetFrozenApp(uint32_t code, MessageParcel& data, MessageParcel& reply);
85     void OnResetAllFrozenApp(uint32_t code, MessageParcel& data, MessageParcel& reply);
86     void OnDisableAutoJoin(uint32_t code, MessageParcel& data, MessageParcel& reply);
87     void OnEnableAutoJoin(uint32_t code, MessageParcel& data, MessageParcel& reply);
88     void OnFactoryReset(uint32_t code, MessageParcel &data, MessageParcel &reply);
89     void OnLimitSpeed(uint32_t code, MessageParcel &data, MessageParcel &reply);
90     void OnEnableHiLinkHandshake(uint32_t code, MessageParcel &data, MessageParcel &reply);
91     void OnEnableSemiWifi(uint32_t code, MessageParcel &data, MessageParcel &reply);
92     void OnGetWifiDetailState(uint32_t code, MessageParcel &data, MessageParcel &reply);
93     void OnSetSatelliteState(uint32_t code, MessageParcel &data, MessageParcel &reply);
94     void OnSetLowTxPower(uint32_t code, MessageParcel &data, MessageParcel &reply);
95     void OnSetTxPower(uint32_t code, MessageParcel &data, MessageParcel &reply);
96     void OnGetDeviceConfig(uint32_t code, MessageParcel &data, MessageParcel &reply);
97     void OnSetDpiMarkRule(uint32_t code, MessageParcel &data, MessageParcel &reply);
98 
99 private:
100     void ReadEapConfig(MessageParcel &data, WifiEapConfig &wifiEapConfig);
101     void ReadWifiDeviceConfig(MessageParcel &data, WifiDeviceConfig &config);
102     void ReadIpAddress(MessageParcel &data, WifiIpAddress &address);
103     void WriteEapConfig(MessageParcel &reply, const WifiEapConfig &wifiEapConfig);
104     void BigDataWriteEapConfig(const WifiEapConfig &wifiEapConfig, std::stringstream &bigDataStream);
105     void WriteWifiDeviceConfig(MessageParcel &reply, const WifiDeviceConfig &config);
106     void WriteIpAddress(MessageParcel &reply, const WifiIpAddress &address);
107     void BigDataWriteIpAddress(const WifiIpAddress &address, std::stringstream &bigDataStream);
108     void SendBigConfig(int32_t ashmemSize, std::vector<WifiDeviceConfig> &result, MessageParcel &reply);
109     void SendBigConfigEx(int contentSize, std::vector<WifiDeviceConfig> &result, std::stringstream &bigDataStream);
110     void SendSmallConfig(int32_t size, std::vector<WifiDeviceConfig> &result, MessageParcel &reply);
111 
112 private:
113     HandleFuncMap handleFuncMap;
114     std::mutex deathRecipientMutex;
115     sptr<IRemoteObject::DeathRecipient> deathRecipient_;
116     bool mSingleCallback;
117 
118 protected:
119     int m_instId{0};
120 };
121 }  // namespace Wifi
122 }  // namespace OHOS
123 #endif
124