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