QXmpp Version: 1.7.0
QXmppMessage.h
1// SPDX-FileCopyrightText: 2009 Manjeet Dahiya <manjeetdahiya@gmail.com>
2// SPDX-FileCopyrightText: 2010 Jeremy Lainé <jeremy.laine@m4x.org>
3// SPDX-FileCopyrightText: 2018 Linus Jahn <lnj@kaidan.im>
4// SPDX-FileCopyrightText: 2020 Melvin Keskin <melvo@olomono.de>
5// SPDX-FileCopyrightText: 2023 Tibor Csötönyi <work@taibsu.de>
6//
7// SPDX-License-Identifier: LGPL-2.1-or-later
8
9#ifndef QXMPPMESSAGE_H
10#define QXMPPMESSAGE_H
11
12#include "QXmppFileShare.h"
13#include "QXmppStanza.h"
14
15#include <optional>
16
17// Required for source compatibility
18#include <QDateTime>
19
20class QXmppMessagePrivate;
22class QXmppFallback;
25class QXmppMixInvitation;
26#ifdef BUILD_OMEMO
27class QXmppOmemoElement;
28#endif
32
38class QXMPP_EXPORT QXmppMessage : public QXmppStanza
39{
40public:
41#if QXMPP_DEPRECATED_SINCE(1, 5)
43 using EncryptionMethod = QXmpp::EncryptionMethod;
44
45 static const EncryptionMethod NoEncryption = EncryptionMethod::NoEncryption;
46 static const EncryptionMethod UnknownEncryption = EncryptionMethod::UnknownEncryption;
47 static const EncryptionMethod OTR = EncryptionMethod::Otr;
48 static const EncryptionMethod LegacyOpenPGP = EncryptionMethod::LegacyOpenPgp;
49 static const EncryptionMethod OX = EncryptionMethod::Ox;
50 static const EncryptionMethod OMEMO = EncryptionMethod::Omemo0;
52#endif
53
55 enum Type {
56 Error = 0,
57 Normal,
58 Chat,
59 GroupChat,
60 Headline
61 };
62
69 enum State {
70 None = 0,
75 Paused
76 };
77
83 enum Marker {
84 NoMarker = 0,
85 Received,
86 Displayed,
87 Acknowledged
88 };
89
95 enum Hint {
96 NoPermanentStore = 1 << 0,
97 NoStore = 1 << 1,
98 NoCopy = 1 << 2,
99 Store = 1 << 3
100 };
101
102 QXmppMessage(const QString &from = QString(), const QString &to = QString(),
103 const QString &body = QString(), const QString &thread = QString());
104
107 ~QXmppMessage() override;
108
111
112 bool isXmppStanza() const override;
113
114 QString body() const;
115 void setBody(const QString &);
116
117 QString e2eeFallbackBody() const;
118 void setE2eeFallbackBody(const QString &fallbackBody);
119
120 QString subject() const;
121 void setSubject(const QString &);
122
123 QString thread() const;
124 void setThread(const QString &);
125
126 QString parentThread() const;
127 void setParentThread(const QString &);
128
129 QXmppMessage::Type type() const;
130 void setType(QXmppMessage::Type);
131
132 // XEP-0066: Out of Band Data
133 QString outOfBandUrl() const;
134 void setOutOfBandUrl(const QString &);
135
136 QVector<QXmppOutOfBandUrl> outOfBandUrls() const;
137 void setOutOfBandUrls(const QVector<QXmppOutOfBandUrl> &urls);
138
139 // XEP-0071: XHTML-IM
140 QString xhtml() const;
141 void setXhtml(const QString &xhtml);
142
143 // XEP-0085: Chat State Notifications
144 QXmppMessage::State state() const;
145 void setState(QXmppMessage::State);
146
147 // XEP-0091: Legacy Delayed Delivery | XEP-0203: Delayed Delivery
148 QDateTime stamp() const;
149 void setStamp(const QDateTime &stamp);
150
151 // XEP-0184: Message Delivery Receipts
152 bool isReceiptRequested() const;
153 void setReceiptRequested(bool requested);
154
155 QString receiptId() const;
156 void setReceiptId(const QString &id);
157
158 // XEP-0224: Attention
159 bool isAttentionRequested() const;
160 void setAttentionRequested(bool requested);
161
162 // XEP-0231: Bits of Binary
163 QXmppBitsOfBinaryDataList bitsOfBinaryData() const;
164 QXmppBitsOfBinaryDataList &bitsOfBinaryData();
165 void setBitsOfBinaryData(const QXmppBitsOfBinaryDataList &bitsOfBinaryData);
166
167 // XEP-0245: The /me Command
168 static bool isSlashMeCommand(const QString &body);
169 bool isSlashMeCommand() const;
170 static QString slashMeCommandText(const QString &body);
171 QString slashMeCommandText() const;
172
173 // XEP-0249: Direct MUC Invitations
174 QString mucInvitationJid() const;
175 void setMucInvitationJid(const QString &jid);
176
177 QString mucInvitationPassword() const;
178 void setMucInvitationPassword(const QString &password);
179
180 QString mucInvitationReason() const;
181 void setMucInvitationReason(const QString &reason);
182
183 // XEP-0280: Message Carbons
184 bool isPrivate() const;
185 void setPrivate(const bool);
186 bool isCarbonForwarded() const;
187 void setCarbonForwarded(bool);
188
189 // XEP-0308: Last Message Correction
190 QString replaceId() const;
191 void setReplaceId(const QString &);
192
193 // XEP-0333: Chat State Markers
194 bool isMarkable() const;
195 void setMarkable(const bool);
196
197 QString markedId() const;
198 void setMarkerId(const QString &);
199
200 QString markedThread() const;
201 void setMarkedThread(const QString &);
202
203 Marker marker() const;
204 void setMarker(const Marker);
205
206 // XEP-0334: Message Processing Hints
207 bool hasHint(const Hint hint) const;
208 void addHint(const Hint hint);
209 void removeHint(const Hint hint);
210 void removeAllHints();
211
212 // XEP-0353: Jingle Message Initiation
213 std::optional<QXmppJingleMessageInitiationElement> jingleMessageInitiationElement() const;
214 void setJingleMessageInitiationElement(const std::optional<QXmppJingleMessageInitiationElement> &jingleMessageInitiationElement);
215
216 // XEP-0359: Unique and Stable Stanza IDs
217 QString stanzaId() const;
218 void setStanzaId(const QString &id);
219
220 QString stanzaIdBy() const;
221 void setStanzaIdBy(const QString &id);
222
223 QString originId() const;
224 void setOriginId(const QString &id);
225
226 // XEP-0367: Message Attaching
227 QString attachId() const;
228 void setAttachId(const QString &);
229
230 // XEP-0369: Mediated Information eXchange (MIX)
231 QString mixParticipantId() const;
232
233 QString mixUserJid() const;
234 void setMixUserJid(const QString &);
235
236 QString mixUserNick() const;
237 void setMixUserNick(const QString &);
238
239 // XEP-0380: Explicit Message Encryption
240 QXmpp::EncryptionMethod encryptionMethod() const;
241 void setEncryptionMethod(QXmpp::EncryptionMethod);
242 QString encryptionMethodNs() const;
243 void setEncryptionMethodNs(const QString &);
244
245 QString encryptionName() const;
246 void setEncryptionName(const QString &);
247
248 // XEP-0382: Spoiler messages
249 bool isSpoiler() const;
250 void setIsSpoiler(bool);
251
252 QString spoilerHint() const;
253 void setSpoilerHint(const QString &);
254
255 // XEP-0407: Mediated Information eXchange (MIX): Miscellaneous Capabilities
256 std::optional<QXmppMixInvitation> mixInvitation() const;
257 void setMixInvitation(const std::optional<QXmppMixInvitation> &mixInvitation);
258
259 // XEP-0428: Fallback Indication
260#if QXMPP_DEPRECATED_SINCE(1, 7)
261 [[deprecated("Use fallbackMarkers()")]] bool isFallback() const;
262 [[deprecated("Use setFallbackMarkers()")]] void setIsFallback(bool isFallback);
263#endif
264 const QVector<QXmppFallback> &fallbackMarkers() const;
265 void setFallbackMarkers(const QVector<QXmppFallback> &);
266
267 // XEP-0434: Trust Messages (TM)
268 std::optional<QXmppTrustMessageElement> trustMessageElement() const;
269 void setTrustMessageElement(const std::optional<QXmppTrustMessageElement> &trustMessageElement);
270
271 // XEP-0444: Message Reactions
272 std::optional<QXmppMessageReaction> reaction() const;
273 void setReaction(const std::optional<QXmppMessageReaction> &reaction);
274
275 // XEP-0447: Stateless file sharing
276 const QVector<QXmppFileShare> &sharedFiles() const;
277 void setSharedFiles(const QVector<QXmppFileShare> &sharedFiles);
278 QVector<QXmppFileSourcesAttachment> fileSourcesAttachments() const;
279 void setFileSourcesAttachments(const QVector<QXmppFileSourcesAttachment> &);
280
281 // XEP-0482: Call Invites
282 std::optional<QXmppCallInviteElement> callInviteElement() const;
283 void setCallInviteElement(std::optional<QXmppCallInviteElement> callInviteElement);
284
286#ifdef BUILD_OMEMO
287 // XEP-0384: OMEMO Encryption
288 std::optional<QXmppOmemoElement> omemoElement() const;
289 void setOmemoElement(const std::optional<QXmppOmemoElement> &omemoElement);
290#endif
291
292 void parse(const QDomElement &element) override final;
293 virtual void parse(const QDomElement &element, QXmpp::SceMode);
294 void toXml(QXmlStreamWriter *writer) const override final;
295 virtual void toXml(QXmlStreamWriter *writer, QXmpp::SceMode) const;
297
298 void parseExtensions(const QDomElement &element, QXmpp::SceMode sceMode);
299 virtual bool parseExtension(const QDomElement &element, QXmpp::SceMode);
300 virtual void serializeExtensions(QXmlStreamWriter *writer, QXmpp::SceMode, const QString &baseNamespace = {}) const;
301
302private:
303 QSharedDataPointer<QXmppMessagePrivate> d;
304};
305
306Q_DECLARE_METATYPE(QXmppMessage)
307
308#endif // QXMPPMESSAGE_H
Definition: QXmppBitsOfBinaryDataList.h:16
The QXmppCallInviteElement class represents a Call Invite element as specified by XEP-0482: Call Invi...
Definition: QXmppJingleData.h:649
Definition: QXmppFallback.h:20
The QXmppJingleMessageInitiationElement class represents a Jingle Message Initiation element as speci...
Definition: QXmppJingleData.h:602
The QXmppMessageReaction class represents a reaction to a message in the form of emojis as specified ...
Definition: QXmppMessageReaction.h:17
The QXmppMessage class represents an XMPP message.
Definition: QXmppMessage.h:39
QXmppMessage & operator=(QXmppMessage &&)
Move-assignment operator.
QXmppMessage & operator=(const QXmppMessage &other)
Assignment operator.
Type
This enum describes a message type.
Definition: QXmppMessage.h:55
QXmppMessage(QXmppMessage &&)
Move-constructor.
Marker
Definition: QXmppMessage.h:83
Hint
Definition: QXmppMessage.h:95
State
Definition: QXmppMessage.h:69
@ Active
User is actively participating in the chat session.
Definition: QXmppMessage.h:71
@ Inactive
User has not been actively participating in the chat session.
Definition: QXmppMessage.h:72
@ Composing
User is composing a message.
Definition: QXmppMessage.h:74
@ Gone
User has effectively ended their participation in the chat session.
Definition: QXmppMessage.h:73
QXmppMessage(const QXmppMessage &other)
Constructs a copy of other.
virtual void parse(const QDomElement &)=0
virtual bool isXmppStanza() const
Definition: QXmppNonza.h:19
virtual void toXml(QXmlStreamWriter *writer) const =0
Definition: QXmppOutOfBandUrl.h:19
The Error class represents a stanza error.
Definition: QXmppStanza.h:94
The QXmppStanza class is the base class for all XMPP stanzas.
Definition: QXmppStanza.h:88
The QXmppTrustMessageElement class represents a trust message element as defined by XEP-0434: Trust M...
Definition: QXmppTrustMessageElement.h:18
SceMode
Definition: QXmppGlobal.h:136
EncryptionMethod
Definition: QXmppGlobal.h:89