1 /*
2  * Copyright (C) 2021-2023 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_NETWORK_SELECTOR_IMPL_H_
17 #define OHOS_WIFI_NETWORK_SELECTOR_IMPL_H_
18 
19 #include <memory>
20 #include "network_selection.h"
21 
22 namespace OHOS::Wifi::NetworkSelection  {
23 class AutoConnectIntegrator : public CompositeNetworkSelector {
24 public:
25     AutoConnectIntegrator();
26 protected:
27     bool Nominate(NetworkCandidate &networkCandidate) override;
28     void GetCandidatesFromSubNetworkSelector() override;
29 };
30 
31 class Wifi2WifiIntegrator : public CompositeNetworkSelector {
32 public:
33     Wifi2WifiIntegrator();
34     ~Wifi2WifiIntegrator() = default;
35 protected:
36     bool Nominate(NetworkCandidate &networkCandidate) override;
37     void GetCandidatesFromSubNetworkSelector() override;
38 };
39 
40 class SavedNetworkTracker final: public CompositeNetworkSelector {
41 public:
42     SavedNetworkTracker();
43 protected:
44     bool Nominate(NetworkCandidate &networkCandidate) override;
45     void GetCandidatesFromSubNetworkSelector() override;
46 };
47 
48 class SimpleFilterNetworkSelector : public SimpleNetworkSelector, public SimpleWifiFilter {
49 public:
50     explicit SimpleFilterNetworkSelector(const std::string &networkSelectorName);
51     ~SimpleFilterNetworkSelector() override;
52 };
53 
54 class BlackListNetworkSelector final: public SimpleFilterNetworkSelector {
55 public:
56     BlackListNetworkSelector();
57 protected:
58     bool Nominate(NetworkCandidate &networkCandidate) override;
59     bool Filter(NetworkCandidate &networkCandidate) override;
60 };
61 
62 class HasInternetNetworkSelector final: public SimpleFilterNetworkSelector {
63 public:
64     HasInternetNetworkSelector();
65 protected:
66     bool Filter(NetworkCandidate &networkCandidate) override;
67 };
68 
69 #ifdef FEATURE_ITNETWORK_PREFERRED_SUPPORT
70 class CustNetPreferredNetworkSelector : public SimpleFilterNetworkSelector {
71 public:
72     CustNetPreferredNetworkSelector();
73 protected:
74     bool Filter(NetworkCandidate &networkCandidate) override;
75 };
76 #endif
77 
78 class RecoveryNetworkSelector final: public SimpleFilterNetworkSelector {
79 public:
80     RecoveryNetworkSelector();
81 protected:
82     bool Filter(NetworkCandidate &networkCandidate) override;
83 };
84 
85 class PortalNetworkSelector final : public SimpleNetworkSelector, public OrWifiFilter {
86 public:
87     PortalNetworkSelector();
88     ~PortalNetworkSelector() override;
89     void InitFilter();
90     std::string GetNetworkSelectorMsg() override;
91 protected:
92     bool Filter(NetworkCandidate &networkCandidate) override;
93     std::vector<NetworkCandidate*> filteredNetworkCandidates;
94 };
95 
96 class NoInternetNetworkSelector final: public SimpleFilterNetworkSelector {
97 public:
98     NoInternetNetworkSelector();
99 protected:
100     bool Filter(NetworkCandidate &networkCandidate) override;
101 };
102 
103 class PreferredApSelector final: public SimpleFilterNetworkSelector {
104 public:
105     PreferredApSelector();
106 protected:
107     bool Filter(NetworkCandidate &networkCandidate) override;
108 };
109 }
110 #endif
111