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 38776 : getSignalHandlers()
24 : {
25 : static SignalHandlerMap handlers = {
26 : /* Call */
27 0 : exported_callback<libjami::CallSignal::StateChange>(),
28 46 : exported_callback<libjami::CallSignal::TransferFailed>(),
29 46 : exported_callback<libjami::CallSignal::TransferSucceeded>(),
30 46 : exported_callback<libjami::CallSignal::RecordPlaybackStopped>(),
31 46 : exported_callback<libjami::CallSignal::VoiceMailNotify>(),
32 46 : exported_callback<libjami::CallSignal::IncomingMessage>(),
33 46 : exported_callback<libjami::CallSignal::IncomingCall>(),
34 46 : exported_callback<libjami::CallSignal::MediaChangeRequested>(),
35 46 : exported_callback<libjami::CallSignal::RecordPlaybackFilepath>(),
36 46 : exported_callback<libjami::CallSignal::ConferenceCreated>(),
37 46 : exported_callback<libjami::CallSignal::ConferenceChanged>(),
38 46 : exported_callback<libjami::CallSignal::UpdatePlaybackScale>(),
39 46 : exported_callback<libjami::CallSignal::ConferenceRemoved>(),
40 46 : exported_callback<libjami::CallSignal::RecordingStateChanged>(),
41 46 : exported_callback<libjami::CallSignal::RtcpReportReceived>(),
42 46 : exported_callback<libjami::CallSignal::PeerHold>(),
43 46 : exported_callback<libjami::CallSignal::VideoMuted>(),
44 46 : exported_callback<libjami::CallSignal::AudioMuted>(),
45 46 : exported_callback<libjami::CallSignal::ConnectionUpdate>(),
46 46 : exported_callback<libjami::CallSignal::OnConferenceInfosUpdated>(),
47 46 : exported_callback<libjami::CallSignal::RemoteRecordingChanged>(),
48 46 : exported_callback<libjami::CallSignal::MediaNegotiationStatus>(),
49 :
50 : /* Configuration */
51 46 : exported_callback<libjami::ConfigurationSignal::VolumeChanged>(),
52 46 : exported_callback<libjami::ConfigurationSignal::AccountsChanged>(),
53 46 : exported_callback<libjami::ConfigurationSignal::DeviceAuthStateChanged>(),
54 46 : exported_callback<libjami::ConfigurationSignal::AddDeviceStateChanged>(),
55 46 : exported_callback<libjami::ConfigurationSignal::AccountDetailsChanged>(),
56 46 : exported_callback<libjami::ConfigurationSignal::StunStatusFailed>(),
57 46 : exported_callback<libjami::ConfigurationSignal::RegistrationStateChanged>(),
58 46 : exported_callback<libjami::ConfigurationSignal::VolatileDetailsChanged>(),
59 46 : exported_callback<libjami::ConfigurationSignal::CertificatePinned>(),
60 46 : exported_callback<libjami::ConfigurationSignal::CertificatePathPinned>(),
61 46 : exported_callback<libjami::ConfigurationSignal::CertificateExpired>(),
62 46 : exported_callback<libjami::ConfigurationSignal::CertificateStateChanged>(),
63 46 : exported_callback<libjami::ConfigurationSignal::IncomingAccountMessage>(),
64 46 : exported_callback<libjami::ConfigurationSignal::ComposingStatusChanged>(),
65 46 : exported_callback<libjami::ConfigurationSignal::AccountMessageStatusChanged>(),
66 46 : exported_callback<libjami::ConfigurationSignal::NeedsHost>(),
67 46 : exported_callback<libjami::ConfigurationSignal::ActiveCallsChanged>(),
68 46 : exported_callback<libjami::ConfigurationSignal::ProfileReceived>(),
69 46 : exported_callback<libjami::ConfigurationSignal::IncomingTrustRequest>(),
70 46 : exported_callback<libjami::ConfigurationSignal::ContactAdded>(),
71 46 : exported_callback<libjami::ConfigurationSignal::ContactRemoved>(),
72 46 : exported_callback<libjami::ConfigurationSignal::KnownDevicesChanged>(),
73 46 : exported_callback<libjami::ConfigurationSignal::NameRegistrationEnded>(),
74 46 : exported_callback<libjami::ConfigurationSignal::RegisteredNameFound>(),
75 46 : exported_callback<libjami::ConfigurationSignal::UserSearchEnded>(),
76 46 : exported_callback<libjami::ConfigurationSignal::MediaParametersChanged>(),
77 46 : exported_callback<libjami::ConfigurationSignal::MigrationEnded>(),
78 46 : exported_callback<libjami::ConfigurationSignal::DeviceRevocationEnded>(),
79 46 : exported_callback<libjami::ConfigurationSignal::AccountProfileReceived>(),
80 46 : 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 46 : exported_callback<libjami::ConfigurationSignal::HardwareDecodingChanged>(),
89 46 : exported_callback<libjami::ConfigurationSignal::HardwareEncodingChanged>(),
90 46 : exported_callback<libjami::ConfigurationSignal::MessageSend>(),
91 :
92 : /* Service-exposure */
93 46 : exported_callback<libjami::ServiceSignal::PeerServicesReceived>(),
94 46 : exported_callback<libjami::ServiceSignal::TunnelOpened>(),
95 46 : exported_callback<libjami::ServiceSignal::TunnelClosed>(),
96 :
97 : /* Presence */
98 46 : exported_callback<libjami::PresenceSignal::NewServerSubscriptionRequest>(),
99 46 : exported_callback<libjami::PresenceSignal::NearbyPeerNotification>(),
100 46 : exported_callback<libjami::PresenceSignal::ServerError>(),
101 46 : exported_callback<libjami::PresenceSignal::NewBuddyNotification>(),
102 46 : exported_callback<libjami::PresenceSignal::SubscriptionStateChanged>(),
103 :
104 : /* Audio */
105 46 : exported_callback<libjami::AudioSignal::DeviceEvent>(),
106 46 : exported_callback<libjami::AudioSignal::AudioMeter>(),
107 :
108 : /* DataTransfer */
109 46 : exported_callback<libjami::DataTransferSignal::DataTransferEvent>(),
110 :
111 : #ifdef ENABLE_VIDEO
112 : /* MediaPlayer */
113 46 : exported_callback<libjami::MediaPlayerSignal::FileOpened>(),
114 :
115 : /* Video */
116 46 : exported_callback<libjami::VideoSignal::DeviceEvent>(),
117 46 : exported_callback<libjami::VideoSignal::DecodingStarted>(),
118 46 : exported_callback<libjami::VideoSignal::DecodingStopped>(),
119 : #ifdef __ANDROID__
120 : exported_callback<libjami::VideoSignal::GetCameraInfo>(),
121 : exported_callback<libjami::VideoSignal::SetParameters>(),
122 : exported_callback<libjami::VideoSignal::RequestKeyFrame>(),
123 : exported_callback<libjami::VideoSignal::SetBitrate>(),
124 : #endif
125 46 : exported_callback<libjami::VideoSignal::StartCapture>(),
126 46 : exported_callback<libjami::VideoSignal::StopCapture>(),
127 46 : exported_callback<libjami::VideoSignal::DeviceAdded>(),
128 46 : exported_callback<libjami::VideoSignal::ParametersChanged>(),
129 : #endif
130 :
131 : /* Conversation */
132 46 : exported_callback<libjami::ConversationSignal::SwarmLoaded>(),
133 46 : exported_callback<libjami::ConversationSignal::MessagesFound>(),
134 46 : exported_callback<libjami::ConversationSignal::SwarmMessageReceived>(),
135 46 : exported_callback<libjami::ConversationSignal::SwarmMessageUpdated>(),
136 46 : exported_callback<libjami::ConversationSignal::ReactionAdded>(),
137 46 : exported_callback<libjami::ConversationSignal::ReactionRemoved>(),
138 46 : exported_callback<libjami::ConversationSignal::ConversationProfileUpdated>(),
139 46 : exported_callback<libjami::ConversationSignal::ConversationRequestReceived>(),
140 46 : exported_callback<libjami::ConversationSignal::ConversationRequestDeclined>(),
141 46 : exported_callback<libjami::ConversationSignal::ConversationReady>(),
142 46 : exported_callback<libjami::ConversationSignal::ConversationRemoved>(),
143 46 : exported_callback<libjami::ConversationSignal::ConversationMemberEvent>(),
144 46 : exported_callback<libjami::ConversationSignal::ConversationSyncFinished>(),
145 46 : exported_callback<libjami::ConversationSignal::ConversationCloned>(),
146 46 : exported_callback<libjami::ConversationSignal::CallConnectionRequest>(),
147 46 : exported_callback<libjami::ConversationSignal::OnConversationError>(),
148 46 : exported_callback<libjami::ConversationSignal::ConversationPreferencesUpdated>(),
149 46 : exported_callback<libjami::ConversationSignal::CollaborativeDocumentUpdate>(),
150 46 : exported_callback<libjami::ConversationSignal::CollaborativeAwarenessChanged>(),
151 46 : exported_callback<libjami::ConversationSignal::CollaborativeParticipantLeft>(),
152 46 : exported_callback<libjami::ConversationSignal::CollaborativeDocumentRenamed>(),
153 46 : exported_callback<libjami::ConversationSignal::CollaborativeDocumentRemoved>(),
154 46 : exported_callback<libjami::ConversationSignal::CollaborativeAttachmentAdded>(),
155 :
156 : #ifdef ENABLE_PLUGIN
157 46 : exported_callback<libjami::PluginSignal::WebViewMessageReceived>(),
158 : #endif
159 43424 : };
160 :
161 38778 : return handlers;
162 46 : }
163 :
164 : }; // namespace jami
165 :
166 : namespace libjami {
167 :
168 : void
169 1014 : registerSignalHandlers(const std::map<std::string, std::shared_ptr<CallbackWrapperBase>>& handlers)
170 : {
171 1014 : auto& handlers_ = jami::getSignalHandlers();
172 4561 : for (auto& item : handlers) {
173 3547 : auto iter = handlers_.find(item.first);
174 3547 : if (iter == handlers_.end()) {
175 0 : JAMI_ERROR("Signal {} not supported", item.first);
176 0 : continue;
177 : }
178 3547 : iter->second = item.second;
179 : }
180 1014 : }
181 :
182 : void
183 1057 : unregisterSignalHandlers()
184 : {
185 1057 : auto& handlers_ = jami::getSignalHandlers();
186 104643 : for (auto& item : handlers_) {
187 103586 : item.second = {};
188 : }
189 1057 : }
190 :
191 : } // namespace libjami
|