Line data Source code
1 : /*
2 : * Copyright (C) 2004-2026 Savoir-faire Linux Inc.
3 : *
4 : * This program is free software: you can redistribute it and/or modify
5 : * it under the terms of the GNU General Public License as published by
6 : * the Free Software Foundation, either version 3 of the License, or
7 : * (at your option) any later version.
8 : *
9 : * This program is distributed in the hope that it will be useful,
10 : * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 : * GNU General Public License for more details.
13 : *
14 : * You should have received a copy of the GNU General Public License
15 : * along with this program. If not, see <https://www.gnu.org/licenses/>.
16 : */
17 :
18 : #include "jami_signal.h"
19 :
20 : namespace jami {
21 :
22 : SignalHandlerMap&
23 27759 : getSignalHandlers()
24 : {
25 : static SignalHandlerMap handlers = {
26 : /* Call */
27 36 : exported_callback<libjami::CallSignal::StateChange>(),
28 74 : exported_callback<libjami::CallSignal::TransferFailed>(),
29 74 : exported_callback<libjami::CallSignal::TransferSucceeded>(),
30 74 : exported_callback<libjami::CallSignal::RecordPlaybackStopped>(),
31 74 : exported_callback<libjami::CallSignal::VoiceMailNotify>(),
32 74 : exported_callback<libjami::CallSignal::IncomingMessage>(),
33 74 : exported_callback<libjami::CallSignal::IncomingCall>(),
34 74 : exported_callback<libjami::CallSignal::MediaChangeRequested>(),
35 74 : exported_callback<libjami::CallSignal::RecordPlaybackFilepath>(),
36 74 : exported_callback<libjami::CallSignal::ConferenceCreated>(),
37 74 : exported_callback<libjami::CallSignal::ConferenceChanged>(),
38 74 : exported_callback<libjami::CallSignal::UpdatePlaybackScale>(),
39 74 : exported_callback<libjami::CallSignal::ConferenceRemoved>(),
40 74 : exported_callback<libjami::CallSignal::RecordingStateChanged>(),
41 74 : exported_callback<libjami::CallSignal::RtcpReportReceived>(),
42 74 : exported_callback<libjami::CallSignal::PeerHold>(),
43 74 : exported_callback<libjami::CallSignal::VideoMuted>(),
44 74 : exported_callback<libjami::CallSignal::AudioMuted>(),
45 74 : exported_callback<libjami::CallSignal::ConnectionUpdate>(),
46 74 : exported_callback<libjami::CallSignal::OnConferenceInfosUpdated>(),
47 74 : exported_callback<libjami::CallSignal::RemoteRecordingChanged>(),
48 74 : exported_callback<libjami::CallSignal::MediaNegotiationStatus>(),
49 :
50 : /* Configuration */
51 74 : exported_callback<libjami::ConfigurationSignal::VolumeChanged>(),
52 74 : exported_callback<libjami::ConfigurationSignal::AccountsChanged>(),
53 74 : exported_callback<libjami::ConfigurationSignal::DeviceAuthStateChanged>(),
54 74 : exported_callback<libjami::ConfigurationSignal::AddDeviceStateChanged>(),
55 74 : exported_callback<libjami::ConfigurationSignal::AccountDetailsChanged>(),
56 74 : exported_callback<libjami::ConfigurationSignal::StunStatusFailed>(),
57 74 : exported_callback<libjami::ConfigurationSignal::RegistrationStateChanged>(),
58 74 : exported_callback<libjami::ConfigurationSignal::VolatileDetailsChanged>(),
59 74 : exported_callback<libjami::ConfigurationSignal::CertificatePinned>(),
60 74 : exported_callback<libjami::ConfigurationSignal::CertificatePathPinned>(),
61 74 : exported_callback<libjami::ConfigurationSignal::CertificateExpired>(),
62 74 : exported_callback<libjami::ConfigurationSignal::CertificateStateChanged>(),
63 74 : exported_callback<libjami::ConfigurationSignal::IncomingAccountMessage>(),
64 74 : exported_callback<libjami::ConfigurationSignal::ComposingStatusChanged>(),
65 74 : exported_callback<libjami::ConfigurationSignal::AccountMessageStatusChanged>(),
66 74 : exported_callback<libjami::ConfigurationSignal::NeedsHost>(),
67 74 : exported_callback<libjami::ConfigurationSignal::ActiveCallsChanged>(),
68 74 : exported_callback<libjami::ConfigurationSignal::ProfileReceived>(),
69 74 : exported_callback<libjami::ConfigurationSignal::IncomingTrustRequest>(),
70 74 : exported_callback<libjami::ConfigurationSignal::ContactAdded>(),
71 74 : exported_callback<libjami::ConfigurationSignal::ContactRemoved>(),
72 74 : exported_callback<libjami::ConfigurationSignal::KnownDevicesChanged>(),
73 74 : exported_callback<libjami::ConfigurationSignal::NameRegistrationEnded>(),
74 74 : exported_callback<libjami::ConfigurationSignal::RegisteredNameFound>(),
75 74 : exported_callback<libjami::ConfigurationSignal::UserSearchEnded>(),
76 74 : exported_callback<libjami::ConfigurationSignal::MediaParametersChanged>(),
77 74 : exported_callback<libjami::ConfigurationSignal::MigrationEnded>(),
78 74 : exported_callback<libjami::ConfigurationSignal::DeviceRevocationEnded>(),
79 74 : exported_callback<libjami::ConfigurationSignal::AccountProfileReceived>(),
80 74 : exported_callback<libjami::ConfigurationSignal::Error>(),
81 : #if defined(__ANDROID__) || (defined(TARGET_OS_IOS) && TARGET_OS_IOS)
82 : exported_callback<libjami::ConfigurationSignal::GetHardwareAudioFormat>(),
83 : #endif
84 : #if defined(__ANDROID__) || (defined(TARGET_OS_IOS) && TARGET_OS_IOS)
85 : exported_callback<libjami::ConfigurationSignal::GetAppDataPath>(),
86 : exported_callback<libjami::ConfigurationSignal::GetDeviceName>(),
87 : #endif
88 74 : exported_callback<libjami::ConfigurationSignal::HardwareDecodingChanged>(),
89 74 : exported_callback<libjami::ConfigurationSignal::HardwareEncodingChanged>(),
90 74 : exported_callback<libjami::ConfigurationSignal::MessageSend>(),
91 :
92 : /* Presence */
93 74 : exported_callback<libjami::PresenceSignal::NewServerSubscriptionRequest>(),
94 74 : exported_callback<libjami::PresenceSignal::NearbyPeerNotification>(),
95 74 : exported_callback<libjami::PresenceSignal::ServerError>(),
96 74 : exported_callback<libjami::PresenceSignal::NewBuddyNotification>(),
97 74 : exported_callback<libjami::PresenceSignal::SubscriptionStateChanged>(),
98 :
99 : /* Audio */
100 74 : exported_callback<libjami::AudioSignal::DeviceEvent>(),
101 74 : exported_callback<libjami::AudioSignal::AudioMeter>(),
102 :
103 : /* DataTransfer */
104 74 : exported_callback<libjami::DataTransferSignal::DataTransferEvent>(),
105 :
106 : #ifdef ENABLE_VIDEO
107 : /* MediaPlayer */
108 74 : exported_callback<libjami::MediaPlayerSignal::FileOpened>(),
109 :
110 : /* Video */
111 74 : exported_callback<libjami::VideoSignal::DeviceEvent>(),
112 74 : exported_callback<libjami::VideoSignal::DecodingStarted>(),
113 74 : exported_callback<libjami::VideoSignal::DecodingStopped>(),
114 : #ifdef __ANDROID__
115 : exported_callback<libjami::VideoSignal::GetCameraInfo>(),
116 : exported_callback<libjami::VideoSignal::SetParameters>(),
117 : exported_callback<libjami::VideoSignal::RequestKeyFrame>(),
118 : exported_callback<libjami::VideoSignal::SetBitrate>(),
119 : #endif
120 74 : exported_callback<libjami::VideoSignal::StartCapture>(),
121 74 : exported_callback<libjami::VideoSignal::StopCapture>(),
122 74 : exported_callback<libjami::VideoSignal::DeviceAdded>(),
123 74 : exported_callback<libjami::VideoSignal::ParametersChanged>(),
124 : #endif
125 :
126 : /* Conversation */
127 74 : exported_callback<libjami::ConversationSignal::SwarmLoaded>(),
128 74 : exported_callback<libjami::ConversationSignal::MessagesFound>(),
129 74 : exported_callback<libjami::ConversationSignal::SwarmMessageReceived>(),
130 74 : exported_callback<libjami::ConversationSignal::SwarmMessageUpdated>(),
131 74 : exported_callback<libjami::ConversationSignal::ReactionAdded>(),
132 74 : exported_callback<libjami::ConversationSignal::ReactionRemoved>(),
133 74 : exported_callback<libjami::ConversationSignal::ConversationProfileUpdated>(),
134 74 : exported_callback<libjami::ConversationSignal::ConversationRequestReceived>(),
135 74 : exported_callback<libjami::ConversationSignal::ConversationRequestDeclined>(),
136 74 : exported_callback<libjami::ConversationSignal::ConversationReady>(),
137 74 : exported_callback<libjami::ConversationSignal::ConversationRemoved>(),
138 74 : exported_callback<libjami::ConversationSignal::ConversationMemberEvent>(),
139 74 : exported_callback<libjami::ConversationSignal::ConversationSyncFinished>(),
140 74 : exported_callback<libjami::ConversationSignal::ConversationCloned>(),
141 74 : exported_callback<libjami::ConversationSignal::CallConnectionRequest>(),
142 74 : exported_callback<libjami::ConversationSignal::OnConversationError>(),
143 74 : exported_callback<libjami::ConversationSignal::ConversationPreferencesUpdated>(),
144 :
145 : #ifdef ENABLE_PLUGIN
146 74 : exported_callback<libjami::PluginSignal::WebViewMessageReceived>(),
147 : #endif
148 34308 : };
149 :
150 27758 : return handlers;
151 : }
152 :
153 : }; // namespace jami
154 :
155 : namespace libjami {
156 :
157 : void
158 825 : registerSignalHandlers(const std::map<std::string, std::shared_ptr<CallbackWrapperBase>>& handlers)
159 : {
160 825 : auto& handlers_ = jami::getSignalHandlers();
161 3880 : for (auto& item : handlers) {
162 3055 : auto iter = handlers_.find(item.first);
163 3055 : if (iter == handlers_.end()) {
164 0 : JAMI_ERR("Signal %s not supported", item.first.c_str());
165 0 : continue;
166 : }
167 3055 : iter->second = item.second;
168 : }
169 825 : }
170 :
171 : void
172 841 : unregisterSignalHandlers()
173 : {
174 841 : auto& handlers_ = jami::getSignalHandlers();
175 75690 : for (auto& item : handlers_) {
176 74849 : item.second = {};
177 : }
178 841 : }
179 :
180 : } // namespace libjami
|