From d2983aecee07161aba43ccd58ebbe50c9755641d Mon Sep 17 00:00:00 2001 From: Manjeet Dahiya Date: Sat, 5 Sep 2009 09:56:38 +0000 Subject: Fix Issue 2: problem when sending messages with < or > characters in body fields Fix Issue 3: QXmppClient::connected signal --- source/QXmppClient.cpp | 110 ++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 105 insertions(+), 5 deletions(-) (limited to 'source/QXmppClient.cpp') diff --git a/source/QXmppClient.cpp b/source/QXmppClient.cpp index 17370982..7fcfe1fb 100644 --- a/source/QXmppClient.cpp +++ b/source/QXmppClient.cpp @@ -26,9 +26,11 @@ #include "QXmppStream.h" #include "QXmppRoster.h" #include "QXmppMessage.h" +#include "QXmppReconnectionManager.h" QXmppClient::QXmppClient(QObject *parent) - : QObject(parent), m_stream(0) + : QObject(parent), m_stream(0), m_clientPrecence(QXmppPresence::Available), + m_reconnectionManager(0) { m_stream = new QXmppStream(this); @@ -42,6 +44,20 @@ QXmppClient::QXmppClient(QObject *parent) check = connect(m_stream, SIGNAL(iqReceived(const QXmppIq&)), this, SIGNAL(iqReceived(const QXmppIq&))); + + check = connect(m_stream, SIGNAL(disconnected()), this, + SIGNAL(disconnected())); + Q_ASSERT(check); + + check = connect(m_stream, SIGNAL(xmppConnected()), this, + SIGNAL(connected())); + Q_ASSERT(check); + + check = connect(m_stream, SIGNAL(error(QXmppClient::Error)), this, + SIGNAL(error(QXmppClient::Error))); + Q_ASSERT(check); + + check = setReconnectionManager(new QXmppReconnectionManager(this)); Q_ASSERT(check); } @@ -55,7 +71,7 @@ QXmppConfiguration& QXmppClient::getConfiguration() } void QXmppClient::connectToServer(const QString& host, const QString& user, const QString& passwd, - const QString& domain, int port) + const QString& domain, int port, const QXmppPresence& initialPresence) { m_config.setHost(host); m_config.setUser(user); @@ -63,13 +79,17 @@ void QXmppClient::connectToServer(const QString& host, const QString& user, cons m_config.setDomain(domain); m_config.setPort(port); + m_clientPrecence = initialPresence; + m_stream->connect(); } -void QXmppClient::connectToServer(const QXmppConfiguration& config) +void QXmppClient::connectToServer(const QXmppConfiguration& config, const QXmppPresence& initialPresence) { m_config = config; - + + m_clientPrecence = initialPresence; + m_stream->connect(); } @@ -83,11 +103,91 @@ void QXmppClient::sendPacket(const QXmppPacket& packet) void QXmppClient::disconnect() { + m_clientPrecence.setType(QXmppPresence::Unavailable); + m_clientPrecence.getStatus().setType(QXmppPresence::Status::Online); + m_clientPrecence.getStatus().setStatusText("Logged out"); + sendPacket(m_clientPrecence); if(m_stream) m_stream->disconnect(); } QXmppRoster& QXmppClient::getRoster() { - return m_stream->getRoster(); + if(m_stream) + return m_stream->getRoster(); +} + +void QXmppClient::sendMessage(const QString& bareJid, const QString& message) +{ + QStringList resources = getRoster().getResources(bareJid); + for(int i = 0; i < resources.size(); ++i) + { + sendPacket(QXmppMessage("", bareJid + "/" + resources.at(i), message)); + } +} + +// sets the new presence of the connected client +void QXmppClient::setClientPresence(const QXmppPresence& presence) +{ + m_clientPrecence = presence; + sendPacket(m_clientPrecence); +} + +// overloaded function, changes the status text +void QXmppClient::setClientPresence(const QString& statusText) +{ + m_clientPrecence.getStatus().setStatusText(statusText); + sendPacket(m_clientPrecence); +} + +// overloaded function, changes the presence type +void QXmppClient::setClientPresence(QXmppPresence::Type presenceType) +{ + if(presenceType == QXmppPresence::Unavailable) + { + disconnect(); + } + else + { + m_clientPrecence.setType(presenceType); + sendPacket(m_clientPrecence); + } +} + +// overloaded function, changes the status type +void QXmppClient::setClientPresence(QXmppPresence::Status::Type statusType) +{ + m_clientPrecence.getStatus().setType(statusType); + sendPacket(m_clientPrecence); +} + +// returnsn the referece to client presence object +const QXmppPresence& QXmppClient::getClientPresence() const +{ + return m_clientPrecence; +} + +QXmppReconnectionManager* QXmppClient::getReconnectionManager() +{ + return m_reconnectionManager; +} + +bool QXmppClient::setReconnectionManager(QXmppReconnectionManager* reconnectionManager) +{ + if(m_reconnectionManager) + delete m_reconnectionManager; + + m_reconnectionManager = reconnectionManager; + + bool check = connect(this, SIGNAL(connected()), m_reconnectionManager, SLOT(connected())); + Q_ASSERT(check); + + check = connect(this, SIGNAL(error(QXmppClient::Error)), m_reconnectionManager, + SLOT(error(QXmppClient::Error))); + Q_ASSERT(check); +} + +QAbstractSocket::SocketError QXmppClient::getSocketError() +{ + return m_stream->getSocketError(); } -- cgit v1.2.3