aboutsummaryrefslogtreecommitdiff
path: root/src/client
diff options
context:
space:
mode:
authorLinus Jahn <lnj@kaidan.im>2021-09-03 18:17:40 +0200
committerLinus Jahn <lnj@kaidan.im>2021-09-03 20:42:34 +0200
commit040b7d9a8c7625f93e93690e47dbabb71ff87fd7 (patch)
tree15a2ad8b8b13c6beeb38c6438953b896992f699e /src/client
parent0623aa38f2ead734dddea4cbad899a868f01cb1e (diff)
downloadqxmpp-040b7d9a8c7625f93e93690e47dbabb71ff87fd7.tar.gz
Refactor packet sending: Add SendSuccess/SendError
Diffstat (limited to 'src/client')
-rw-r--r--src/client/QXmppClient.cpp28
-rw-r--r--src/client/QXmppClient.h3
-rw-r--r--src/client/QXmppRosterManager.cpp4
-rw-r--r--src/client/QXmppRosterManager.h5
4 files changed, 11 insertions, 29 deletions
diff --git a/src/client/QXmppClient.cpp b/src/client/QXmppClient.cpp
index 4d1efe7d..e6655bd0 100644
--- a/src/client/QXmppClient.cpp
+++ b/src/client/QXmppClient.cpp
@@ -326,32 +326,12 @@ bool QXmppClient::sendPacket(const QXmppNonza &packet)
///
/// Sends a packet and reports the result via QFuture.
///
-/// The QFuture might have multiple results. The first result of the future is
-/// reported immediately (it's safe to access resultAt(0)). If writing the data
-/// to the socket succeeds (that does not mean the server received it),
-/// QXmpp::Sent is reported. Otherwise QXmpp::NotSent is reported.
-///
/// If stream management is enabled the future continues to be active until the
-/// server acknowledges the packet. On success QXmpp::Acknowledged is reported
-/// and the future finishes.
+/// server acknowledges the packet. On success QXmpp::SendSuccess with
+/// acknowledged == true is reported and the future finishes.
///
/// If connection errors occur the packet is resent if possible. If reconnecting
-/// is not possible, QXmpp::NotSent is reported.
-///
-/// For you the most important result is the last one. QXmpp::Sent means the
-/// packet has been sent without stream management (no acknowledgment).
-/// QXmpp::Acknowledged means the packet has been sent and has been received by
-/// the server, QXmpp::NotSent means no success.
-///
-/// \note <b>TL;DR</b>: The future might have multiple results, so don't do:
-/// \code
-/// send().result();
-/// \endcode
-/// Instead do the following to handle the final result:
-/// \code
-/// send().results().last();
-/// \endcode
-/// QXmpp::Sent or QXmpp::Acknowledged mean success.
+/// is not possible, an error is reported.
///
/// \warning THIS API IS NOT FINALIZED YET!
///
@@ -359,7 +339,7 @@ bool QXmppClient::sendPacket(const QXmppNonza &packet)
/// You can use QFutureWatcher in Qt 5 and QFuture::then() in Qt 6 to handle the
/// results.
///
-QFuture<QXmpp::PacketState> QXmppClient::send(const QXmppStanza &stanza)
+QFuture<QXmpp::SendResult> QXmppClient::send(const QXmppStanza &stanza)
{
return d->stream->send(stanza);
}
diff --git a/src/client/QXmppClient.h b/src/client/QXmppClient.h
index 9a977074..3daf629c 100644
--- a/src/client/QXmppClient.h
+++ b/src/client/QXmppClient.h
@@ -27,6 +27,7 @@
#include "QXmppConfiguration.h"
#include "QXmppLogger.h"
#include "QXmppPresence.h"
+#include "QXmppSendResult.h"
#include <variant>
@@ -230,7 +231,7 @@ public:
State state() const;
QXmppStanza::Error::Condition xmppStreamError();
- QFuture<QXmpp::PacketState> send(const QXmppStanza &);
+ QFuture<QXmpp::SendResult> send(const QXmppStanza &);
QFuture<IqResult> sendIq(const QXmppIq &);
QFuture<EmptyResult> sendGenericIq(const QXmppIq &iq);
diff --git a/src/client/QXmppRosterManager.cpp b/src/client/QXmppRosterManager.cpp
index 0f1f0df1..0405056e 100644
--- a/src/client/QXmppRosterManager.cpp
+++ b/src/client/QXmppRosterManager.cpp
@@ -351,7 +351,7 @@ QFuture<QXmppRosterManager::Result> QXmppRosterManager::renameRosterItem(const Q
///
/// \since QXmpp 1.5
///
-QFuture<QXmpp::PacketState> QXmppRosterManager::subscribeTo(const QString &bareJid, const QString &reason)
+QFuture<QXmpp::SendResult> QXmppRosterManager::subscribeTo(const QString &bareJid, const QString &reason)
{
QXmppPresence packet;
packet.setTo(QXmppUtils::jidToBareJid(bareJid));
@@ -368,7 +368,7 @@ QFuture<QXmpp::PacketState> QXmppRosterManager::subscribeTo(const QString &bareJ
///
/// \since QXmpp 1.5
///
-QFuture<QXmpp::PacketState> QXmppRosterManager::unsubscribeFrom(const QString &bareJid, const QString &reason)
+QFuture<QXmpp::SendResult> QXmppRosterManager::unsubscribeFrom(const QString &bareJid, const QString &reason)
{
QXmppPresence packet;
packet.setTo(QXmppUtils::jidToBareJid(bareJid));
diff --git a/src/client/QXmppRosterManager.h b/src/client/QXmppRosterManager.h
index 09c32ea0..6d872343 100644
--- a/src/client/QXmppRosterManager.h
+++ b/src/client/QXmppRosterManager.h
@@ -29,6 +29,7 @@
#include "QXmppClientExtension.h"
#include "QXmppPresence.h"
#include "QXmppRosterIq.h"
+#include "QXmppSendResult.h"
#include <variant>
@@ -94,8 +95,8 @@ public:
QFuture<Result> addRosterItem(const QString &bareJid, const QString &name = {}, const QSet<QString> &groups = {});
QFuture<Result> removeRosterItem(const QString &bareJid);
QFuture<Result> renameRosterItem(const QString &bareJid, const QString &name);
- QFuture<QXmpp::PacketState> subscribeTo(const QString &bareJid, const QString &reason = {});
- QFuture<QXmpp::PacketState> unsubscribeFrom(const QString &bareJid, const QString &reason = {});
+ QFuture<QXmpp::SendResult> subscribeTo(const QString &bareJid, const QString &reason = {});
+ QFuture<QXmpp::SendResult> unsubscribeFrom(const QString &bareJid, const QString &reason = {});
/// \cond
bool handleStanza(const QDomElement &element) override;