aboutsummaryrefslogtreecommitdiff
path: root/source/QXmppClient.cpp
diff options
context:
space:
mode:
authorManjeet Dahiya <manjeetdahiya@gmail.com>2009-09-05 09:56:38 +0000
committerManjeet Dahiya <manjeetdahiya@gmail.com>2009-09-05 09:56:38 +0000
commitd2983aecee07161aba43ccd58ebbe50c9755641d (patch)
treece228c3a98678d40fb94a4aa31dad73c76220ad6 /source/QXmppClient.cpp
parentb8f9cef75a43d5805a4a931bcaf10c1e3e520998 (diff)
downloadqxmpp-d2983aecee07161aba43ccd58ebbe50c9755641d.tar.gz
Fix Issue 2: problem when sending messages with < or > characters in body fields
Fix Issue 3: QXmppClient::connected signal
Diffstat (limited to 'source/QXmppClient.cpp')
-rw-r--r--source/QXmppClient.cpp110
1 files changed, 105 insertions, 5 deletions
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();
}