1  /*
2   * Copyright (C) 2021 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  #include "default.h"
17  
18  #include "cellular_data_utils.h"
19  #include "core_manager_inner.h"
20  #include "telephony_log_wrapper.h"
21  
22  namespace OHOS {
23  namespace Telephony {
StateBegin()24  void Default::StateBegin()
25  {
26      TELEPHONY_LOGD("Enter default state");
27      isActive_ = true;
28  }
29  
StateEnd()30  void Default::StateEnd()
31  {
32      TELEPHONY_LOGD("Exit default state");
33      isActive_ = false;
34  }
35  
StateProcess(const AppExecFwk::InnerEvent::Pointer & event)36  bool Default::StateProcess(const AppExecFwk::InnerEvent::Pointer &event)
37  {
38      if (event == nullptr) {
39          TELEPHONY_LOGE("event is null");
40          return false;
41      }
42      std::shared_ptr<CellularDataStateMachine> stateMachine = stateMachine_.lock();
43      if (stateMachine == nullptr) {
44          TELEPHONY_LOGE("stateMachine is null");
45          return false;
46      }
47      uint32_t eventCode = event->GetInnerEventId();
48      std::map<uint32_t, Fun>::iterator it = eventIdFunMap_.find(eventCode);
49      if (it != eventIdFunMap_.end()) {
50          return it->second(event);
51      }
52      return false;
53  }
54  
ProcessConnectDone(const AppExecFwk::InnerEvent::Pointer & event)55  bool Default::ProcessConnectDone(const AppExecFwk::InnerEvent::Pointer &event)
56  {
57      TELEPHONY_LOGI("Default::MSG_SM_CONNECT");
58      return false;
59  }
60  
ProcessDisconnectDone(const AppExecFwk::InnerEvent::Pointer & event)61  bool Default::ProcessDisconnectDone(const AppExecFwk::InnerEvent::Pointer &event)
62  {
63      if (event == nullptr) {
64          TELEPHONY_LOGE("event is null");
65          return false;
66      }
67      std::shared_ptr<CellularDataStateMachine> stateMachine = stateMachine_.lock();
68      if (stateMachine == nullptr) {
69          TELEPHONY_LOGE("The state machine pointer is null");
70          return false;
71      }
72      TELEPHONY_LOGI("The data connection is disconnected by default");
73      stateMachine->DeferEvent(std::move(event));
74      return true;
75  }
76  
ProcessDisconnectAllDone(const AppExecFwk::InnerEvent::Pointer & event)77  bool Default::ProcessDisconnectAllDone(const AppExecFwk::InnerEvent::Pointer &event)
78  {
79      if (event == nullptr) {
80          TELEPHONY_LOGE("event is null");
81          return false;
82      }
83      std::shared_ptr<CellularDataStateMachine> stateMachine = stateMachine_.lock();
84      if (stateMachine == nullptr) {
85          TELEPHONY_LOGE("The state machine pointer is null");
86          return false;
87      }
88      TELEPHONY_LOGI("All data connections are disconnected by default");
89      stateMachine->DeferEvent(std::move(event));
90      return true;
91  }
92  
ProcessDataConnectionDrsOrRatChanged(const AppExecFwk::InnerEvent::Pointer & event)93  bool Default::ProcessDataConnectionDrsOrRatChanged(const AppExecFwk::InnerEvent::Pointer &event)
94  {
95      if (event == nullptr) {
96          TELEPHONY_LOGE("event is null");
97          return false;
98      }
99      std::shared_ptr<CellularDataStateMachine> stateMachine = stateMachine_.lock();
100      if (stateMachine == nullptr) {
101          TELEPHONY_LOGE("stateMachine is null");
102          return false;
103      }
104      TELEPHONY_LOGI("The RAT changes by default");
105      CellularDataNetAgent &netAgent = CellularDataNetAgent::GetInstance();
106      int32_t supplierId = netAgent.GetSupplierId(stateMachine->GetSlotId(), stateMachine->GetCapability());
107      netAgent.UpdateNetSupplierInfo(supplierId, stateMachine->netSupplierInfo_);
108      if (stateMachine->IsActiveState() || stateMachine->IsActivatingState()) {
109          netAgent.UpdateNetLinkInfo(supplierId, stateMachine->netLinkInfo_);
110      }
111      int32_t radioTech = static_cast<int32_t>(RadioTech::RADIO_TECHNOLOGY_INVALID);
112      CoreManagerInner::GetInstance().GetPsRadioTech(stateMachine->GetSlotId(), radioTech);
113      netAgent.RegisterSlotType(supplierId, radioTech);
114      TELEPHONY_LOGI("RegisterSlotType: supplierId[%{public}d] slotId[%{public}d] radioTech[%{public}d]",
115          supplierId, stateMachine->GetSlotId(), radioTech);
116      return false;
117  }
118  
ProcessDataConnectionRoamOn(const AppExecFwk::InnerEvent::Pointer & event)119  bool Default::ProcessDataConnectionRoamOn(const AppExecFwk::InnerEvent::Pointer &event)
120  {
121      TELEPHONY_LOGI("Default::EVENT_DATA_CONNECTION_ROAM_ON");
122      return false;
123  }
124  
ProcessDataConnectionRoamOff(const AppExecFwk::InnerEvent::Pointer & event)125  bool Default::ProcessDataConnectionRoamOff(const AppExecFwk::InnerEvent::Pointer &event)
126  {
127      TELEPHONY_LOGI("Default::EVENT_DATA_CONNECTION_ROAM_OFF");
128      return false;
129  }
130  
ProcessDataCallListChanged(const AppExecFwk::InnerEvent::Pointer & event)131  bool Default::ProcessDataCallListChanged(const AppExecFwk::InnerEvent::Pointer &event)
132  {
133      if (event == nullptr) {
134          TELEPHONY_LOGE("event is null");
135          return false;
136      }
137      std::shared_ptr<SetupDataCallResultInfo> info = event->GetSharedObject<SetupDataCallResultInfo>();
138      if (info == nullptr) {
139          TELEPHONY_LOGE("info is null");
140          return false;
141      }
142      TELEPHONY_LOGI("Default::ProcessDataCallListChanged");
143      std::shared_ptr<CellularDataStateMachine> stateMachine = stateMachine_.lock();
144      if (stateMachine == nullptr) {
145          TELEPHONY_LOGE("stateMachine is null");
146          return false;
147      }
148      if (stateMachine->IsActivatingState() || stateMachine->IsActiveState()) {
149          stateMachine->UpdateNetworkInfo(*info);
150      }
151      return true;
152  }
153  } // namespace Telephony
154  } // namespace OHOS
155