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