12d43be4eSopenharmony_ci/* 22d43be4eSopenharmony_ci * Copyright (C) 2021 Huawei Device Co., Ltd. 32d43be4eSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 42d43be4eSopenharmony_ci * you may not use this file except in compliance with the License. 52d43be4eSopenharmony_ci * You may obtain a copy of the License at 62d43be4eSopenharmony_ci * 72d43be4eSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 82d43be4eSopenharmony_ci * 92d43be4eSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 102d43be4eSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 112d43be4eSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 122d43be4eSopenharmony_ci * See the License for the specific language governing permissions and 132d43be4eSopenharmony_ci * limitations under the License. 142d43be4eSopenharmony_ci */ 152d43be4eSopenharmony_ci 162d43be4eSopenharmony_ci#ifndef APN_HOLDER_H 172d43be4eSopenharmony_ci#define APN_HOLDER_H 182d43be4eSopenharmony_ci 192d43be4eSopenharmony_ci#include <map> 202d43be4eSopenharmony_ci#include <memory> 212d43be4eSopenharmony_ci#include <set> 222d43be4eSopenharmony_ci 232d43be4eSopenharmony_ci#include "apn_item.h" 242d43be4eSopenharmony_ci#include "cellular_data_constant.h" 252d43be4eSopenharmony_ci#include "connection_retry_policy.h" 262d43be4eSopenharmony_ci#include "net_supplier_callback_base.h" 272d43be4eSopenharmony_ci 282d43be4eSopenharmony_cinamespace OHOS { 292d43be4eSopenharmony_cinamespace Telephony { 302d43be4eSopenharmony_ciclass CellularDataStateMachine; 312d43be4eSopenharmony_cienum class HasSystemUse : int32_t { 322d43be4eSopenharmony_ci UNKOWN = -1, 332d43be4eSopenharmony_ci NOT_HAS = 0, 342d43be4eSopenharmony_ci HAS = 1, 352d43be4eSopenharmony_ci}; 362d43be4eSopenharmony_ci 372d43be4eSopenharmony_ciclass ApnHolder : public RefBase { 382d43be4eSopenharmony_cipublic: 392d43be4eSopenharmony_ci ApnHolder(const std::string &apnType, const int32_t priority); 402d43be4eSopenharmony_ci ~ApnHolder(); 412d43be4eSopenharmony_ci sptr<ApnItem> GetNextRetryApn() const; 422d43be4eSopenharmony_ci void SetAllMatchedApns(std::vector<sptr<ApnItem>> &matchedApns); 432d43be4eSopenharmony_ci int64_t GetRetryDelay(int32_t cause, int32_t suggestTime, RetryScene scene, int32_t slotId); 442d43be4eSopenharmony_ci void SetCurrentApn(sptr<ApnItem> &apnItem); 452d43be4eSopenharmony_ci sptr<ApnItem> GetCurrentApn() const; 462d43be4eSopenharmony_ci void SetApnState(ApnProfileState state); 472d43be4eSopenharmony_ci ApnProfileState GetApnState() const; 482d43be4eSopenharmony_ci bool IsDataCallEnabled() const; 492d43be4eSopenharmony_ci std::string GetApnType() const; 502d43be4eSopenharmony_ci void ReleaseDataConnection(); 512d43be4eSopenharmony_ci int32_t GetProfileId(const std::string &apnType) const; 522d43be4eSopenharmony_ci void SetCellularDataStateMachine(const std::shared_ptr<CellularDataStateMachine> &stateMachine); 532d43be4eSopenharmony_ci std::shared_ptr<CellularDataStateMachine> GetCellularDataStateMachine() const; 542d43be4eSopenharmony_ci uint64_t GetCapability() const; 552d43be4eSopenharmony_ci int32_t GetPriority() const; 562d43be4eSopenharmony_ci void RequestCellularData(const NetRequest &netRequest); 572d43be4eSopenharmony_ci bool ReleaseCellularData(const NetRequest &netRequest); 582d43be4eSopenharmony_ci void ReleaseAllCellularData(); 592d43be4eSopenharmony_ci bool IsEmergencyType() const; 602d43be4eSopenharmony_ci bool IsMmsType() const; 612d43be4eSopenharmony_ci void InitialApnRetryCount(); 622d43be4eSopenharmony_ci bool IsSameMatchedApns(std::vector<sptr<ApnItem>> newMatchedApns, bool roamingState); 632d43be4eSopenharmony_ci static bool IsSameApnItem(const sptr<ApnItem> &newApnItem, const sptr<ApnItem> &oldApnItem, bool roamingState); 642d43be4eSopenharmony_ci static bool IsCompatibleApnItem(const sptr<ApnItem> &newApnItem, const sptr<ApnItem> &oldApnItem, 652d43be4eSopenharmony_ci bool roamingState); 662d43be4eSopenharmony_ci void AddUid(uint32_t uid); 672d43be4eSopenharmony_ci void RemoveUid(uint32_t uid); 682d43be4eSopenharmony_ci HasSystemUse GetUidStatus() const; 692d43be4eSopenharmony_ci void MarkCurrentApnBad(); 702d43be4eSopenharmony_ci void ClearCurrentApnBad(); 712d43be4eSopenharmony_ci 722d43be4eSopenharmony_ciprivate: 732d43be4eSopenharmony_ci ApnHolder(ApnHolder &apnHolder) = default; 742d43be4eSopenharmony_ci ApnHolder &operator=(ApnHolder &apnHolder) = default; 752d43be4eSopenharmony_ci 762d43be4eSopenharmony_ciprivate: 772d43be4eSopenharmony_ci static const std::map<std::string, int32_t> apnTypeDataProfileMap_; 782d43be4eSopenharmony_ci bool dataCallEnabled_ = false; 792d43be4eSopenharmony_ci uint64_t capability_ = 0; 802d43be4eSopenharmony_ci ConnectionRetryPolicy retryPolicy_; 812d43be4eSopenharmony_ci ApnProfileState apnState_ = ApnProfileState::PROFILE_STATE_IDLE; 822d43be4eSopenharmony_ci sptr<ApnItem> apnItem_; 832d43be4eSopenharmony_ci std::string apnType_; 842d43be4eSopenharmony_ci int32_t priority_; 852d43be4eSopenharmony_ci std::shared_ptr<CellularDataStateMachine> cellularDataStateMachine_; 862d43be4eSopenharmony_ci std::vector<NetRequest> netRequests_; 872d43be4eSopenharmony_ci std::set<uint32_t> reqUids_; 882d43be4eSopenharmony_ci}; 892d43be4eSopenharmony_ci} // namespace Telephony 902d43be4eSopenharmony_ci} // namespace OHOS 912d43be4eSopenharmony_ci#endif // APN_HOLDER_H 92