QXmpp Version: 1.6.0
Loading...
Searching...
No Matches
QXmppJingleMessageInitiationManager.h
1// SPDX-FileCopyrightText: 2023 Tibor Csötönyi <work@taibsu.de>
2// SPDX-FileCopyrightText: 2023 Melvin Keskin <melvo@olomono.de>
3//
4// SPDX-License-Identifier: LGPL-2.1-or-later
5
6#ifndef QXMPPJINGLEMESSAGEINITIATIONMANAGER_H
7#define QXMPPJINGLEMESSAGEINITIATIONMANAGER_H
8
9#include "QXmppClientExtension.h"
10#include "QXmppError.h"
11#include "QXmppJingleIq.h"
12#include "QXmppMessageHandler.h"
13#include "QXmppSendResult.h"
14#include "QXmppTask.h"
15
17class QXmppJingleMessageInitiationPrivate;
18class QXmppJingleMessageInitiationManagerPrivate;
19
20class QXMPP_EXPORT QXmppJingleMessageInitiation : public QObject
21{
22 Q_OBJECT
23public:
24 struct Rejected
25 {
26 std::optional<QXmppJingleReason> reason;
27 bool containsTieBreak;
28 };
29
30 struct Retracted
31 {
32 std::optional<QXmppJingleReason> reason;
33 bool containsTieBreak;
34 };
35
36 struct Finished
37 {
38 std::optional<QXmppJingleReason> reason;
39 QString migratedTo;
40 };
41
43 using Result = std::variant<Rejected, Retracted, Finished, QXmppError>;
44
47
48 QXmppTask<QXmpp::SendResult> ring();
49 QXmppTask<QXmpp::SendResult> proceed();
50 QXmppTask<QXmpp::SendResult> reject(std::optional<QXmppJingleReason> reason, bool containsTieBreak = false);
51 QXmppTask<QXmpp::SendResult> retract(std::optional<QXmppJingleReason> reason, bool containsTieBreak = false);
52 QXmppTask<QXmpp::SendResult> finish(std::optional<QXmppJingleReason> reason, const QString &migratedTo = {});
53
54 Q_SIGNAL void ringing();
55 Q_SIGNAL void proceeded(const QString &id, const QString &callPartnerResource);
56 Q_SIGNAL void closed(const Result &result);
57
58private:
59 QString id() const;
60 void setId(const QString &id);
61 void setCallPartnerJid(const QString &callPartnerJid);
62 QString callPartnerJid() const;
63 bool isProceeded() const;
64 void setIsProceeded(bool isProceeded);
65
66 std::unique_ptr<QXmppJingleMessageInitiationPrivate> d;
67
69 friend class tst_QXmppJingleMessageInitiationManager;
70};
71
73{
74 Q_OBJECT
75public:
76 using ProposeResult = std::variant<std::shared_ptr<QXmppJingleMessageInitiation>, QXmppError>;
77
80
82 QStringList discoveryFeatures() const override;
84
85 QXmppTask<ProposeResult> propose(
86 const QString &callPartnerJid,
87 const QXmppJingleDescription &description);
88
89 Q_SIGNAL void proposed(
90 const std::shared_ptr<QXmppJingleMessageInitiation> &jmi,
91 const QString &id,
92 const std::optional<QXmppJingleDescription> &description);
93
94protected:
96 bool handleMessage(const QXmppMessage &) override;
97 void setClient(QXmppClient *client) override;
99
100private:
101 QXmppTask<QXmpp::SendResult> sendMessage(
102 const QXmppJingleMessageInitiationElement &jmiElement,
103 const QString &callPartnerJid);
104
105 void clear(const std::shared_ptr<QXmppJingleMessageInitiation> &jmi);
106 void clearAll();
107
108 bool handleJmiElement(QXmppJingleMessageInitiationElement &&jmiElement, const QString &senderJid);
109 bool handleExistingJmi(const std::shared_ptr<QXmppJingleMessageInitiation> &existingJmi, const QXmppJingleMessageInitiationElement &jmiElement, const QString &callPartnerResource);
110 bool handleProposeJmiElement(const QXmppJingleMessageInitiationElement &jmiElement, const QString &callPartnerJid);
111 bool handleTieBreak(const std::shared_ptr<QXmppJingleMessageInitiation> &existingJmi, const QXmppJingleMessageInitiationElement &jmiElement, const QString &callPartnerResource);
112 bool handleExistingSession(const std::shared_ptr<QXmppJingleMessageInitiation> &existingJmi, const QString &jmiElementId);
113 bool handleNonExistingSession(const std::shared_ptr<QXmppJingleMessageInitiation> &existingJmi, const QString &jmiElementId, const QString &callPartnerResource);
114 std::shared_ptr<QXmppJingleMessageInitiation> addJmi(const QString &callPartnerJid);
115 const QVector<std::shared_ptr<QXmppJingleMessageInitiation>> &jmis() const;
116
117private:
118 std::unique_ptr<QXmppJingleMessageInitiationManagerPrivate> d;
119
120 friend class QXmppJingleMessageInitiationPrivate;
121 friend class tst_QXmppJingleMessageInitiationManager;
122};
123
124Q_DECLARE_METATYPE(QXmppJingleMessageInitiation::Result)
125
126#endif // QXMPPJINGLEMESSAGEINITIATIONMANAGER_H
The QXmppClientExtension class is the base class for QXmppClient extensions.
Definition QXmppClientExtension.h:33
The QXmppClient class is the main class for using QXmpp.
Definition QXmppClient.h:84
The QXmppJingleDescription class represents descriptions for Jingle elements including media type,...
Definition QXmppJingleData.h:246
The QXmppJingleMessageInitiationElement class represents a Jingle Message Initiation element as speci...
Definition QXmppJingleData.h:615
The QXmppJingleMessageInitiationManager class makes it possible to retrieve Jingle Message Initiation...
Definition QXmppJingleMessageInitiationManager.h:73
Q_SIGNAL void proposed(const std::shared_ptr< QXmppJingleMessageInitiation > &jmi, const QString &id, const std::optional< QXmppJingleDescription > &description)
std::variant< std::shared_ptr< QXmppJingleMessageInitiation >, QXmppError > ProposeResult
Definition QXmppJingleMessageInitiationManager.h:76
The QXmppJingleMessageInitiation class holds information about the JMI element in the current context...
Definition QXmppJingleMessageInitiationManager.h:21
Q_SIGNAL void closed(const Result &result)
Q_SIGNAL void proceeded(const QString &id, const QString &callPartnerResource)
std::variant< Rejected, Retracted, Finished, QXmppError > Result
Variant of Rejected, Retracted, Finished or Error result types.
Definition QXmppJingleMessageInitiationManager.h:43
Definition QXmppMessageHandler.h:16
The QXmppMessage class represents an XMPP message.
Definition QXmppMessage.h:38
Definition QXmppError.h:18