QXmpp  Version: 1.8.1
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 
20 class QXmppMessagePrivate;
22 class QXmppFallback;
25 class QXmppMixInvitation;
26 #ifdef BUILD_OMEMO
27 class QXmppOmemoElement;
28 #endif
30 class QXmppOutOfBandUrl;
32 
33 struct QXmppStanzaId {
35  QString id;
37  QString by;
38 };
39 
45 class QXMPP_EXPORT QXmppMessage : public QXmppStanza
46 {
47 public:
48 #if QXMPP_DEPRECATED_SINCE(1, 5)
49  using EncryptionMethod = QXmpp::EncryptionMethod;
51 
52  static const EncryptionMethod NoEncryption = EncryptionMethod::NoEncryption;
53  static const EncryptionMethod UnknownEncryption = EncryptionMethod::UnknownEncryption;
54  static const EncryptionMethod OTR = EncryptionMethod::Otr;
55  static const EncryptionMethod LegacyOpenPGP = EncryptionMethod::LegacyOpenPgp;
56  static const EncryptionMethod OX = EncryptionMethod::Ox;
57  static const EncryptionMethod OMEMO = EncryptionMethod::Omemo0;
59 #endif
60 
62  enum Type {
63  Error = 0,
64  Normal,
65  Chat,
66  GroupChat,
67  Headline
68  };
69 
76  enum State {
77  None = 0,
80  Gone,
82  Paused
83  };
84 
90  enum Marker {
91  NoMarker = 0,
92  Received,
93  Displayed,
94  Acknowledged
95  };
96 
102  enum Hint {
103  NoPermanentStore = 1 << 0,
104  NoStore = 1 << 1,
105  NoCopy = 1 << 2,
106  Store = 1 << 3
107  };
108 
109  QXmppMessage(const QString &from = QString(), const QString &to = QString(),
110  const QString &body = QString(), const QString &thread = QString());
111 
112  QXmppMessage(const QXmppMessage &other);
114  ~QXmppMessage() override;
115 
116  QXmppMessage &operator=(const QXmppMessage &other);
118 
119  bool isXmppStanza() const override;
120 
121  QString body() const;
122  void setBody(const QString &);
123 
124  QString e2eeFallbackBody() const;
125  void setE2eeFallbackBody(const QString &fallbackBody);
126 
127  QString subject() const;
128  void setSubject(const QString &);
129 
130  QString thread() const;
131  void setThread(const QString &);
132 
133  QString parentThread() const;
134  void setParentThread(const QString &);
135 
136  QXmppMessage::Type type() const;
137  void setType(QXmppMessage::Type);
138 
139  // XEP-0066: Out of Band Data
140  QString outOfBandUrl() const;
141  void setOutOfBandUrl(const QString &);
142 
143  QVector<QXmppOutOfBandUrl> outOfBandUrls() const;
144  void setOutOfBandUrls(const QVector<QXmppOutOfBandUrl> &urls);
145 
146  // XEP-0071: XHTML-IM
147  QString xhtml() const;
148  void setXhtml(const QString &xhtml);
149 
150  // XEP-0085: Chat State Notifications
151  QXmppMessage::State state() const;
152  void setState(QXmppMessage::State);
153 
154  // XEP-0091: Legacy Delayed Delivery | XEP-0203: Delayed Delivery
155  QDateTime stamp() const;
156  void setStamp(const QDateTime &stamp);
157 
158  // XEP-0184: Message Delivery Receipts
159  bool isReceiptRequested() const;
160  void setReceiptRequested(bool requested);
161 
162  QString receiptId() const;
163  void setReceiptId(const QString &id);
164 
165  // XEP-0224: Attention
166  bool isAttentionRequested() const;
167  void setAttentionRequested(bool requested);
168 
169  // XEP-0231: Bits of Binary
170  QXmppBitsOfBinaryDataList bitsOfBinaryData() const;
171  QXmppBitsOfBinaryDataList &bitsOfBinaryData();
172  void setBitsOfBinaryData(const QXmppBitsOfBinaryDataList &bitsOfBinaryData);
173 
174  // XEP-0245: The /me Command
175  static bool isSlashMeCommand(const QString &body);
176  bool isSlashMeCommand() const;
177  static QString slashMeCommandText(const QString &body);
178  QString slashMeCommandText() const;
179 
180  // XEP-0249: Direct MUC Invitations
181  QString mucInvitationJid() const;
182  void setMucInvitationJid(const QString &jid);
183 
184  QString mucInvitationPassword() const;
185  void setMucInvitationPassword(const QString &password);
186 
187  QString mucInvitationReason() const;
188  void setMucInvitationReason(const QString &reason);
189 
190  // XEP-0280: Message Carbons
191  bool isPrivate() const;
192  void setPrivate(const bool);
193  bool isCarbonForwarded() const;
194  void setCarbonForwarded(bool);
195 
196  // XEP-0308: Last Message Correction
197  QString replaceId() const;
198  void setReplaceId(const QString &);
199 
200  // XEP-0333: Chat State Markers
201  bool isMarkable() const;
202  void setMarkable(const bool);
203 
204  QString markedId() const;
205  void setMarkerId(const QString &);
206 
207  QString markedThread() const;
208  void setMarkedThread(const QString &);
209 
210  Marker marker() const;
211  void setMarker(const Marker);
212 
213  // XEP-0334: Message Processing Hints
214  bool hasHint(const Hint hint) const;
215  void addHint(const Hint hint);
216  void removeHint(const Hint hint);
217  void removeAllHints();
218 
219  // XEP-0353: Jingle Message Initiation
220  std::optional<QXmppJingleMessageInitiationElement> jingleMessageInitiationElement() const;
221  void setJingleMessageInitiationElement(const std::optional<QXmppJingleMessageInitiationElement> &jingleMessageInitiationElement);
222 
223  // XEP-0359: Unique and Stable Stanza IDs
224 #if QXMPP_DEPRECATED_SINCE(1, 8)
225  [[deprecated("Use stanzaIds() instead.")]]
226  QString stanzaId() const;
227  [[deprecated("Use setStanzaIds() instead.")]]
228  void setStanzaId(const QString &id);
229 
230  [[deprecated("Use stanzaIds() instead.")]]
231  QString stanzaIdBy() const;
232  [[deprecated("Use setStanzaIds() instead.")]]
233  void setStanzaIdBy(const QString &id);
234 #endif
235 
236  QVector<QXmppStanzaId> stanzaIds() const;
237  void setStanzaIds(const QVector<QXmppStanzaId> &);
238 
239  QString originId() const;
240  void setOriginId(const QString &id);
241 
242  // XEP-0367: Message Attaching
243  QString attachId() const;
244  void setAttachId(const QString &);
245 
246  // XEP-0369: Mediated Information eXchange (MIX)
247  QString mixParticipantId() const;
248 
249  QString mixUserJid() const;
250  void setMixUserJid(const QString &);
251 
252  QString mixUserNick() const;
253  void setMixUserNick(const QString &);
254 
255  // XEP-0380: Explicit Message Encryption
256  QXmpp::EncryptionMethod encryptionMethod() const;
257  void setEncryptionMethod(QXmpp::EncryptionMethod);
258  QString encryptionMethodNs() const;
259  void setEncryptionMethodNs(const QString &);
260 
261  QString encryptionName() const;
262  void setEncryptionName(const QString &);
263 
264  // XEP-0382: Spoiler messages
265  bool isSpoiler() const;
266  void setIsSpoiler(bool);
267 
268  QString spoilerHint() const;
269  void setSpoilerHint(const QString &);
270 
271  // XEP-0407: Mediated Information eXchange (MIX): Miscellaneous Capabilities
272  std::optional<QXmppMixInvitation> mixInvitation() const;
273  void setMixInvitation(const std::optional<QXmppMixInvitation> &mixInvitation);
274 
275  // XEP-0428: Fallback Indication
276 #if QXMPP_DEPRECATED_SINCE(1, 7)
277  [[deprecated("Use fallbackMarkers()")]] bool isFallback() const;
278  [[deprecated("Use setFallbackMarkers()")]] void setIsFallback(bool isFallback);
279 #endif
280  const QVector<QXmppFallback> &fallbackMarkers() const;
281  void setFallbackMarkers(const QVector<QXmppFallback> &);
282 
283  // XEP-0434: Trust Messages (TM)
284  std::optional<QXmppTrustMessageElement> trustMessageElement() const;
285  void setTrustMessageElement(const std::optional<QXmppTrustMessageElement> &trustMessageElement);
286 
287  // XEP-0444: Message Reactions
288  std::optional<QXmppMessageReaction> reaction() const;
289  void setReaction(const std::optional<QXmppMessageReaction> &reaction);
290 
291  // XEP-0447: Stateless file sharing
292  const QVector<QXmppFileShare> &sharedFiles() const;
293  void setSharedFiles(const QVector<QXmppFileShare> &sharedFiles);
294  QVector<QXmppFileSourcesAttachment> fileSourcesAttachments() const;
295  void setFileSourcesAttachments(const QVector<QXmppFileSourcesAttachment> &);
296 
297  // XEP-0482: Call Invites
298  std::optional<QXmppCallInviteElement> callInviteElement() const;
299  void setCallInviteElement(std::optional<QXmppCallInviteElement> callInviteElement);
300 
302 #ifdef BUILD_OMEMO
303  // XEP-0384: OMEMO Encryption
304  std::optional<QXmppOmemoElement> omemoElement() const;
305  void setOmemoElement(const std::optional<QXmppOmemoElement> &omemoElement);
306 #endif
307 
308  void parse(const QDomElement &element) override final;
309  virtual void parse(const QDomElement &element, QXmpp::SceMode);
310  void toXml(QXmlStreamWriter *writer) const override final;
311  virtual void toXml(QXmlStreamWriter *writer, QXmpp::SceMode) const;
313 
314  void parseExtensions(const QDomElement &element, QXmpp::SceMode sceMode);
315  virtual bool parseExtension(const QDomElement &element, QXmpp::SceMode);
316  virtual void serializeExtensions(QXmlStreamWriter *writer, QXmpp::SceMode, const QString &baseNamespace = {}) const;
317 
318 private:
319  QSharedDataPointer<QXmppMessagePrivate> d;
320 };
321 
322 Q_DECLARE_METATYPE(QXmppMessage)
323 
324 #endif // QXMPPMESSAGE_H
State
Definition: QXmppMessage.h:76
Stanza ID element as defined in XEP-0359: Unique and Stable Stanza IDs.
Definition: QXmppMessage.h:33
virtual bool isXmppStanza() const
Definition: QXmppNonza.h:19
The QXmppCallInviteElement class represents a Call Invite element as specified by XEP-0482: Call Invi...
Definition: QXmppJingleData.h:648
The QXmppStanza class is the base class for all XMPP stanzas.
Definition: QXmppStanza.h:87
User is composing a message.
Definition: QXmppMessage.h:81
QString id
Identifier of the stanza element.
Definition: QXmppMessage.h:35
User has effectively ended their participation in the chat session.
Definition: QXmppMessage.h:80
virtual void parse(const QDomElement &)=0
Marker
Definition: QXmppMessage.h:90
User is actively participating in the chat session.
Definition: QXmppMessage.h:78
SceMode
Definition: QXmppGlobal.h:136
Definition: QXmppBitsOfBinaryDataList.h:15
Definition: QXmppOutOfBandUrl.h:18
User has not been actively participating in the chat session.
Definition: QXmppMessage.h:79
The QXmppTrustMessageElement class represents a trust message element as defined by XEP-0434: Trust M...
Definition: QXmppTrustMessageElement.h:17
Definition: QXmppFallback.h:19
Type
This enum describes a message type.
Definition: QXmppMessage.h:62
The QXmppMessage class represents an XMPP message.
Definition: QXmppMessage.h:45
EncryptionMethod
Definition: QXmppGlobal.h:89
virtual void toXml(QXmlStreamWriter *writer) const =0
The QXmppJingleMessageInitiationElement class represents a Jingle Message Initiation element as speci...
Definition: QXmppJingleData.h:601
The Error class represents a stanza error.
Definition: QXmppStanza.h:93
Hint
Definition: QXmppMessage.h:102
The QXmppMessageReaction class represents a reaction to a message in the form of emojis as specified ...
Definition: QXmppMessageReaction.h:16
QXmppStanza & operator=(const QXmppStanza &other)
Assigns other to this stanza.
QString by
JID of the generating entity.
Definition: QXmppMessage.h:37