1/*
2 * Copyright (C) 2024-2024 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 NET_MANAGER_BASE_PROBE_THREAD_H
17#define NET_MANAGER_BASE_PROBE_THREAD_H
18
19#include <atomic>
20#include <condition_variable>
21#include <memory>
22#include <mutex>
23#include <thread>
24#include <pthread.h>
25
26#include "refbase.h"
27
28#include "i_net_monitor_callback.h"
29#include "net_conn_types.h"
30#include "net_http_probe.h"
31#include "net_link_info.h"
32#include "tiny_count_down_latch.h"
33
34namespace OHOS {
35namespace NetManagerStandard {
36class ProbeThread : public virtual RefBase, public std::enable_shared_from_this<ProbeThread> {
37public:
38
39    ProbeThread(uint32_t netId, NetBearType bearType, const NetLinkInfo &netLinkInfo,
40        std::shared_ptr<TinyCountDownLatch> latch, std::shared_ptr<TinyCountDownLatch> latchAll,
41        ProbeType probeType, std::string httpUrl, std::string httpsUrl);
42
43    /**
44     * Destroy the ProbeThread
45     *
46     */
47    ~ProbeThread();
48
49    /**
50     * Start detection
51     *
52     */
53    void Start();
54
55    /**
56     * Update global http proxy
57     *
58     */
59    void UpdateGlobalHttpProxy(const HttpProxy &httpProxy);
60
61    /*
62     * send http probe
63    */
64    void SendHttpProbe(ProbeType probeType);
65
66    /*
67     * Get Http detection Result
68    */
69    NetHttpProbeResult GetHttpProbeResult();
70
71    /*
72     * Get Https detection result
73    */
74    NetHttpProbeResult GetHttpsProbeResult();
75
76    /*
77     * set detection without proxy
78    */
79    void ProbeWithoutGlobalHttpProxy();
80
81    /*
82     * check http result whether portal or success
83    */
84    bool IsConclusiveResult();
85
86    /*
87     * check whether thread is detecting
88    */
89    bool IsDetecting();
90
91    /*
92     * get current probe type
93    */
94    ProbeType GetProbeType();
95
96private:
97    uint32_t netId_ = 0;
98    std::unique_ptr<NetHttpProbe> httpProbe_;
99    std::thread thread_;
100    ProbeType probeType_;
101    std::shared_ptr<TinyCountDownLatch> latch_;
102    std::shared_ptr<TinyCountDownLatch> latchAll_;
103    std::atomic<bool> isDetecting_ = false;
104    std::string httpProbeUrl_;
105    std::string httpsProbeUrl_;
106};
107} // namespace NetManagerStandard
108} // namespace OHOS
109#endif // NET_MANAGER_BASE_PROBE_THREAD_H
110