1b1b8bc3fSopenharmony_ci/* 2b1b8bc3fSopenharmony_ci * Copyright (C) 2024-2024 Huawei Device Co., Ltd. 3b1b8bc3fSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4b1b8bc3fSopenharmony_ci * you may not use this file except in compliance with the License. 5b1b8bc3fSopenharmony_ci * You may obtain a copy of the License at 6b1b8bc3fSopenharmony_ci * 7b1b8bc3fSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8b1b8bc3fSopenharmony_ci * 9b1b8bc3fSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10b1b8bc3fSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11b1b8bc3fSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12b1b8bc3fSopenharmony_ci * See the License for the specific language governing permissions and 13b1b8bc3fSopenharmony_ci * limitations under the License. 14b1b8bc3fSopenharmony_ci */ 15b1b8bc3fSopenharmony_ci 16b1b8bc3fSopenharmony_ci#ifndef NET_MANAGER_BASE_PROBE_THREAD_H 17b1b8bc3fSopenharmony_ci#define NET_MANAGER_BASE_PROBE_THREAD_H 18b1b8bc3fSopenharmony_ci 19b1b8bc3fSopenharmony_ci#include <atomic> 20b1b8bc3fSopenharmony_ci#include <condition_variable> 21b1b8bc3fSopenharmony_ci#include <memory> 22b1b8bc3fSopenharmony_ci#include <mutex> 23b1b8bc3fSopenharmony_ci#include <thread> 24b1b8bc3fSopenharmony_ci#include <pthread.h> 25b1b8bc3fSopenharmony_ci 26b1b8bc3fSopenharmony_ci#include "refbase.h" 27b1b8bc3fSopenharmony_ci 28b1b8bc3fSopenharmony_ci#include "i_net_monitor_callback.h" 29b1b8bc3fSopenharmony_ci#include "net_conn_types.h" 30b1b8bc3fSopenharmony_ci#include "net_http_probe.h" 31b1b8bc3fSopenharmony_ci#include "net_link_info.h" 32b1b8bc3fSopenharmony_ci#include "tiny_count_down_latch.h" 33b1b8bc3fSopenharmony_ci 34b1b8bc3fSopenharmony_cinamespace OHOS { 35b1b8bc3fSopenharmony_cinamespace NetManagerStandard { 36b1b8bc3fSopenharmony_ciclass ProbeThread : public virtual RefBase, public std::enable_shared_from_this<ProbeThread> { 37b1b8bc3fSopenharmony_cipublic: 38b1b8bc3fSopenharmony_ci 39b1b8bc3fSopenharmony_ci ProbeThread(uint32_t netId, NetBearType bearType, const NetLinkInfo &netLinkInfo, 40b1b8bc3fSopenharmony_ci std::shared_ptr<TinyCountDownLatch> latch, std::shared_ptr<TinyCountDownLatch> latchAll, 41b1b8bc3fSopenharmony_ci ProbeType probeType, std::string httpUrl, std::string httpsUrl); 42b1b8bc3fSopenharmony_ci 43b1b8bc3fSopenharmony_ci /** 44b1b8bc3fSopenharmony_ci * Destroy the ProbeThread 45b1b8bc3fSopenharmony_ci * 46b1b8bc3fSopenharmony_ci */ 47b1b8bc3fSopenharmony_ci ~ProbeThread(); 48b1b8bc3fSopenharmony_ci 49b1b8bc3fSopenharmony_ci /** 50b1b8bc3fSopenharmony_ci * Start detection 51b1b8bc3fSopenharmony_ci * 52b1b8bc3fSopenharmony_ci */ 53b1b8bc3fSopenharmony_ci void Start(); 54b1b8bc3fSopenharmony_ci 55b1b8bc3fSopenharmony_ci /** 56b1b8bc3fSopenharmony_ci * Update global http proxy 57b1b8bc3fSopenharmony_ci * 58b1b8bc3fSopenharmony_ci */ 59b1b8bc3fSopenharmony_ci void UpdateGlobalHttpProxy(const HttpProxy &httpProxy); 60b1b8bc3fSopenharmony_ci 61b1b8bc3fSopenharmony_ci /* 62b1b8bc3fSopenharmony_ci * send http probe 63b1b8bc3fSopenharmony_ci */ 64b1b8bc3fSopenharmony_ci void SendHttpProbe(ProbeType probeType); 65b1b8bc3fSopenharmony_ci 66b1b8bc3fSopenharmony_ci /* 67b1b8bc3fSopenharmony_ci * Get Http detection Result 68b1b8bc3fSopenharmony_ci */ 69b1b8bc3fSopenharmony_ci NetHttpProbeResult GetHttpProbeResult(); 70b1b8bc3fSopenharmony_ci 71b1b8bc3fSopenharmony_ci /* 72b1b8bc3fSopenharmony_ci * Get Https detection result 73b1b8bc3fSopenharmony_ci */ 74b1b8bc3fSopenharmony_ci NetHttpProbeResult GetHttpsProbeResult(); 75b1b8bc3fSopenharmony_ci 76b1b8bc3fSopenharmony_ci /* 77b1b8bc3fSopenharmony_ci * set detection without proxy 78b1b8bc3fSopenharmony_ci */ 79b1b8bc3fSopenharmony_ci void ProbeWithoutGlobalHttpProxy(); 80b1b8bc3fSopenharmony_ci 81b1b8bc3fSopenharmony_ci /* 82b1b8bc3fSopenharmony_ci * check http result whether portal or success 83b1b8bc3fSopenharmony_ci */ 84b1b8bc3fSopenharmony_ci bool IsConclusiveResult(); 85b1b8bc3fSopenharmony_ci 86b1b8bc3fSopenharmony_ci /* 87b1b8bc3fSopenharmony_ci * check whether thread is detecting 88b1b8bc3fSopenharmony_ci */ 89b1b8bc3fSopenharmony_ci bool IsDetecting(); 90b1b8bc3fSopenharmony_ci 91b1b8bc3fSopenharmony_ci /* 92b1b8bc3fSopenharmony_ci * get current probe type 93b1b8bc3fSopenharmony_ci */ 94b1b8bc3fSopenharmony_ci ProbeType GetProbeType(); 95b1b8bc3fSopenharmony_ci 96b1b8bc3fSopenharmony_ciprivate: 97b1b8bc3fSopenharmony_ci uint32_t netId_ = 0; 98b1b8bc3fSopenharmony_ci std::unique_ptr<NetHttpProbe> httpProbe_; 99b1b8bc3fSopenharmony_ci std::thread thread_; 100b1b8bc3fSopenharmony_ci ProbeType probeType_; 101b1b8bc3fSopenharmony_ci std::shared_ptr<TinyCountDownLatch> latch_; 102b1b8bc3fSopenharmony_ci std::shared_ptr<TinyCountDownLatch> latchAll_; 103b1b8bc3fSopenharmony_ci std::atomic<bool> isDetecting_ = false; 104b1b8bc3fSopenharmony_ci std::string httpProbeUrl_; 105b1b8bc3fSopenharmony_ci std::string httpsProbeUrl_; 106b1b8bc3fSopenharmony_ci}; 107b1b8bc3fSopenharmony_ci} // namespace NetManagerStandard 108b1b8bc3fSopenharmony_ci} // namespace OHOS 109b1b8bc3fSopenharmony_ci#endif // NET_MANAGER_BASE_PROBE_THREAD_H 110