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