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 : #pragma once 18 : 19 : #ifdef HAVE_CONFIG_H 20 : #include "config.h" 21 : #endif 22 : 23 : #include <string_view> 24 : #include <functional> 25 : #include <json/json.h> 26 : 27 : namespace jami { 28 : 29 : /** 30 : * Used to parse confOrder objects 31 : * @note the user of this class must initialize the different lambdas. 32 : */ 33 : class ConfProtocolParser 34 : { 35 : public: 36 37 : ConfProtocolParser() {}; 37 : 38 37 : void onVersion(std::function<void(uint32_t)>&& cb) { version_ = std::move(cb); } 39 : /** 40 : * Ask the caller to check if a peer is authorized (moderator of the conference) 41 : */ 42 37 : void onCheckAuthorization(std::function<bool(std::string_view)>&& cb) { checkAuthorization_ = std::move(cb); } 43 : 44 37 : void onHangupParticipant(std::function<void(const std::string&, const std::string&)>&& cb) 45 : { 46 37 : hangupParticipant_ = std::move(cb); 47 37 : } 48 37 : void onRaiseHand(std::function<void(const std::string&, bool)>&& cb) { raiseHand_ = std::move(cb); } 49 37 : void onSetActiveStream(std::function<void(const std::string&, bool)>&& cb) { setActiveStream_ = std::move(cb); } 50 37 : void onMuteStreamAudio(std::function<void(const std::string&, const std::string&, const std::string&, bool)>&& cb) 51 : { 52 37 : muteStreamAudio_ = std::move(cb); 53 37 : } 54 : void onMuteStreamVideo(std::function<void(const std::string&, const std::string&, const std::string&, bool)>&& cb) 55 : { 56 : muteStreamVideo_ = std::move(cb); 57 : } 58 37 : void onSetLayout(std::function<void(int)>&& cb) { setLayout_ = std::move(cb); } 59 : 60 : // Version 0, deprecated 61 37 : void onKickParticipant(std::function<void(const std::string&)>&& cb) { kickParticipant_ = std::move(cb); } 62 37 : void onSetActiveParticipant(std::function<void(const std::string&)>&& cb) { setActiveParticipant_ = std::move(cb); } 63 37 : void onMuteParticipant(std::function<void(const std::string&, bool)>&& cb) { muteParticipant_ = std::move(cb); } 64 37 : void onRaiseHandUri(std::function<void(const std::string&, bool)>&& cb) { raiseHandUri_ = std::move(cb); } 65 37 : void onVoiceActivity(std::function<void(const std::string&, bool)>&& cb) { voiceActivity_ = std::move(cb); } 66 : 67 : /** 68 : * Inject in the parser the data to parse 69 : */ 70 6 : void initData(Json::Value&& d, std::string_view peerId) 71 : { 72 6 : data_ = std::move(d); 73 6 : peerId_ = peerId; 74 6 : } 75 : 76 : /** 77 : * Parse the datas, this will call the methods injected if necessary 78 : */ 79 : void parse(); 80 : 81 : private: 82 : void parseV0(); 83 : void parseV1(); 84 : 85 : std::string_view peerId_; 86 : Json::Value data_; 87 : 88 : std::function<void(uint32_t)> version_; 89 : 90 : std::function<bool(std::string_view)> checkAuthorization_; 91 : std::function<void(const std::string&, const std::string&)> hangupParticipant_; 92 : std::function<void(const std::string&, bool)> raiseHand_; 93 : std::function<void(const std::string&, bool)> setActiveStream_; 94 : std::function<void(const std::string&, const std::string&, const std::string&, bool)> muteStreamAudio_; 95 : std::function<void(const std::string&, const std::string&, const std::string&, bool)> muteStreamVideo_; 96 : std::function<void(int)> setLayout_; 97 : 98 : std::function<void(const std::string&, bool)> raiseHandUri_; 99 : std::function<void(const std::string&)> kickParticipant_; 100 : std::function<void(const std::string&)> setActiveParticipant_; 101 : std::function<void(const std::string&, bool)> muteParticipant_; 102 : std::function<void(const std::string&, bool)> voiceActivity_; 103 : }; 104 : 105 : } // namespace jami