/* * Copyright (c) 2010-2024 Belledonne Communications SARL. * * This file is part of linphone-desktop * (see https://www.linphone.org). * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "CallModel.hpp" #include #include "model/core/CoreModel.hpp" DEFINE_ABSTRACT_OBJECT(CallModel) CallModel::CallModel(const std::shared_ptr &call, QObject *parent) : ::Listener(call, parent) { mustBeInLinphoneThread(getClassName()); } CallModel::~CallModel() { mustBeInLinphoneThread("~" + getClassName()); } void CallModel::accept(bool withVideo) { mustBeInLinphoneThread(log().arg(Q_FUNC_INFO)); auto core = CoreModel::getInstance()->getCore(); auto params = core->createCallParams(mMonitor); params->enableVideo(withVideo); // Answer with local call address. auto localAddress = mMonitor->getCallLog()->getLocalAddress(); for (auto account : core->getAccountList()) { if (account->getParams()->getIdentityAddress()->weakEqual(localAddress)) { params->setAccount(account); break; } } mMonitor->acceptWithParams(params); } void CallModel::decline() { mustBeInLinphoneThread(log().arg(Q_FUNC_INFO)); auto errorInfo = linphone::Factory::get()->createErrorInfo(); errorInfo->set("SIP", linphone::Reason::Declined, 603, "Decline", ""); mMonitor->terminateWithErrorInfo(errorInfo); } void CallModel::terminate() { mustBeInLinphoneThread(log().arg(Q_FUNC_INFO)); mMonitor->terminate(); } void CallModel::onDtmfReceived(const std::shared_ptr &call, int dtmf) { emit dtmfReceived(call, dtmf); } void CallModel::onGoclearAckSent(const std::shared_ptr &call) { emit goclearAckSent(call); } void CallModel::onEncryptionChanged(const std::shared_ptr &call, bool on, const std::string &authenticationToken) { emit encryptionChanged(call, on, authenticationToken); } void CallModel::onSendMasterKeyChanged(const std::shared_ptr &call, const std::string &sendMasterKey) { emit sendMasterKeyChanged(call, sendMasterKey); } void CallModel::onReceiveMasterKeyChanged(const std::shared_ptr &call, const std::string &receiveMasterKey) { emit receiveMasterKeyChanged(call, receiveMasterKey); } void CallModel::onInfoMessageReceived(const std::shared_ptr &call, const std::shared_ptr &message) { emit infoMessageReceived(call, message); } void CallModel::onStateChanged(const std::shared_ptr &call, linphone::Call::State state, const std::string &message) { emit stateChanged(state, message); } void CallModel::onStatsUpdated(const std::shared_ptr &call, const std::shared_ptr &stats) { emit statsUpdated(call, stats); } void CallModel::onTransferStateChanged(const std::shared_ptr &call, linphone::Call::State state) { emit transferStateChanged(call, state); } void CallModel::onAckProcessing(const std::shared_ptr &call, const std::shared_ptr &ack, bool isReceived) { emit ackProcessing(call, ack, isReceived); } void CallModel::onTmmbrReceived(const std::shared_ptr &call, int streamIndex, int tmmbr) { emit tmmbrReceived(call, streamIndex, tmmbr); } void CallModel::onSnapshotTaken(const std::shared_ptr &call, const std::string &filePath) { emit snapshotTaken(call, filePath); } void CallModel::onNextVideoFrameDecoded(const std::shared_ptr &call) { emit nextVideoFrameDecoded(call); } void CallModel::onCameraNotWorking(const std::shared_ptr &call, const std::string &cameraName) { emit cameraNotWorking(call, cameraName); } void CallModel::onVideoDisplayErrorOccurred(const std::shared_ptr &call, int errorCode) { emit videoDisplayErrorOccurred(call, errorCode); } void CallModel::onAudioDeviceChanged(const std::shared_ptr &call, const std::shared_ptr &audioDevice) { emit audioDeviceChanged(call, audioDevice); } void CallModel::onRemoteRecording(const std::shared_ptr &call, bool recording) { emit remoteRecording(call, recording); }