Android-cuttlefish cvd tool
call_service.h
Go to the documentation of this file.
1//
2// Copyright (C) 2020 The Android Open Source Project
3//
4// Licensed under the Apache License, Version 2.0 (the "License");
5// you may not use this file except in compliance with the License.
6// You may obtain a copy of the License at
7//
8// http://www.apache.org/licenses/LICENSE-2.0
9//
10// Unless required by applicable law or agreed to in writing, software
11// distributed under the License is distributed on an "AS IS" BASIS,
12// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13// See the License for the specific language governing permissions and
14// limitations under the License.
15
16#pragma once
17
21
22namespace cuttlefish {
23
24class CallService : public ModemService, public std::enable_shared_from_this<CallService> {
25 public:
26 CallService(int32_t service_id, ChannelMonitor* channel_monitor,
27 ThreadLooper* thread_looper);
28 ~CallService() = default;
29
30 CallService(const CallService &) = delete;
31 CallService &operator=(const CallService &) = delete;
32
34
35 void HandleDial(const Client& client, const std::string& command);
36 void HandleAcceptCall(const Client& client);
37 void HandleRejectCall(const Client& client);
38 void HandleCurrentCalls(const Client& client);
39 void HandleHangup(const Client& client, const std::string& command);
40 void HandleMute(const Client& client, const std::string& command);
41 void HandleSendDtmf(const Client& client, const std::string& command);
42 void HandleCancelUssd(const Client& client, const std::string& command);
43 void HandleEmergencyMode(const Client& client, const std::string& command);
44 void HandleRemoteCall(const Client& client, const std::string& command);
45 int FindFreeCallIndex() const {
46 for (int index = 1; true; index++) {
47 if (active_calls_.find(index) == active_calls_.end()) {
48 return index;
49 }
50 }
51 }
52
53 private:
55 std::vector<CommandHandler> InitializeCommandHandlers();
57 void CallStateUpdate();
58
59 struct CallStatus {
60 enum CallState {
68 };
69
70 // ctors
74 is_international(false),
75 is_voice_mode(true),
76 is_multi_party(false),
77 can_present_number(true) {}
78
79 CallStatus(const std::string_view number)
82 is_international(false),
83 is_voice_mode(true),
84 is_multi_party(false),
86 can_present_number(true) {}
87
90 }
91
92 bool isCallActive() {
94 }
95
98 }
99
102 }
103
106 }
107
110 }
111
115 return true;
116 }
117
118 return false;
119 }
120
125 return true;
126 }
127
128 return false;
129 }
130
131 // date member public
138 std::optional<ClientId> remote_client;
139 std::optional<int32_t> timeout_serial;
140 std::string number;
142 };
143 using CallToken = std::pair<int, std::string>;
144
147
148 // private data members
151 std::map<int, CallStatus> active_calls_;
154};
155
156} // namespace
Definition: call_service.h:24
CallService(const CallService &)=delete
bool in_emergency_mode_
Definition: call_service.h:152
std::map< int, CallStatus > active_calls_
Definition: call_service.h:151
void HandleAcceptCall(const Client &client)
Definition: call_service.cpp:267
void HandleCancelUssd(const Client &client, const std::string &command)
Definition: call_service.cpp:553
std::vector< CommandHandler > InitializeCommandHandlers()
Definition: call_service.cpp:48
int FindFreeCallIndex() const
Definition: call_service.h:45
void SetupDependency(SimService *sim, NetworkService *net)
Definition: call_service.cpp:43
void TimerWaitingRemoteCallResponse(CallToken token)
Definition: call_service.cpp:100
void CallStateUpdate()
Definition: call_service.cpp:605
bool mute_on_
Definition: call_service.h:153
void SimulatePendingCallsAnswered()
Definition: call_service.cpp:92
void HandleEmergencyMode(const Client &client, const std::string &command)
Definition: call_service.cpp:574
NetworkService * network_service_
Definition: call_service.h:150
void HandleHangup(const Client &client, const std::string &command)
Definition: call_service.cpp:397
void HandleRemoteCall(const Client &client, const std::string &command)
Definition: call_service.cpp:644
SimService * sim_service_
Definition: call_service.h:149
void HandleSendDtmf(const Client &client, const std::string &command)
Definition: call_service.cpp:548
void InitializeServiceState()
Definition: call_service.cpp:35
void HandleCurrentCalls(const Client &client)
Definition: call_service.cpp:341
void HandleRejectCall(const Client &client)
Definition: call_service.cpp:282
void SendCallStatusToRemote(CallStatus &call, CallStatus::CallState state)
Definition: call_service.cpp:251
void HandleDial(const Client &client, const std::string &command)
Definition: call_service.cpp:114
CallService & operator=(const CallService &)=delete
std::pair< int, std::string > CallToken
Definition: call_service.h:143
CallService(int32_t service_id, ChannelMonitor *channel_monitor, ThreadLooper *thread_looper)
Definition: call_service.cpp:28
void HandleMute(const Client &client, const std::string &command)
Definition: call_service.cpp:504
Definition: channel_monitor.h:35
Definition: client.h:47
Definition: modem_service.h:63
Definition: network_service.h:30
Definition: sim_service.h:28
Definition: thread_looper.h:51
Definition: alloc_utils.cpp:23
Definition: call_service.h:59
bool is_mobile_terminated
Definition: call_service.h:133
CallStatus(const std::string_view number)
Definition: call_service.h:79
bool SetCallBackground()
Definition: call_service.h:112
bool isCallIncoming()
Definition: call_service.h:100
bool isCallAlerting()
Definition: call_service.h:108
bool is_remote_call
Definition: call_service.h:137
std::string number
Definition: call_service.h:140
bool isCallBackground()
Definition: call_service.h:88
bool is_multi_party
Definition: call_service.h:136
std::optional< int32_t > timeout_serial
Definition: call_service.h:139
CallState
Definition: call_service.h:60
@ CALL_STATE_ALERTING
Definition: call_service.h:64
@ CALL_STATE_HANGUP
Definition: call_service.h:67
@ CALL_STATE_INCOMING
Definition: call_service.h:65
@ CALL_STATE_DIALING
Definition: call_service.h:63
@ CALL_STATE_WAITING
Definition: call_service.h:66
@ CALL_STATE_HELD
Definition: call_service.h:62
@ CALL_STATE_ACTIVE
Definition: call_service.h:61
CallState call_state
Definition: call_service.h:132
bool can_present_number
Definition: call_service.h:141
bool is_international
Definition: call_service.h:134
bool isCallActive()
Definition: call_service.h:92
bool isCallWaiting()
Definition: call_service.h:104
std::optional< ClientId > remote_client
Definition: call_service.h:138
bool SetCallActive()
Definition: call_service.h:121
bool is_voice_mode
Definition: call_service.h:135
CallStatus()
Definition: call_service.h:71
bool isCallDialing()
Definition: call_service.h:96