QXmpp  Version: 1.7.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 
38 class QXMPP_EXPORT QXmppMessage : public QXmppStanza
39 {
40 public:
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,
73  Gone,
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 
105  QXmppMessage(const QXmppMessage &other);
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 
302 private:
303  QSharedDataPointer<QXmppMessagePrivate> d;
304 };
305 
306 Q_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