From 239b2b15c3cfd9e4d7cc085ed31645d6ae6942ee Mon Sep 17 00:00:00 2001 From: Manjeet Dahiya Date: Mon, 26 Oct 2009 17:01:09 +0000 Subject: Fix for Issue 23: QXmppBind compilation error on macosx starting from r23 Issue 26: examples fail to link on macosx and linux Issue 24: all text files should have the svn property eol-style set Contributed by: Marco Molteni --- source/QXmppClient.cpp | 678 ++++++++++++++++++++++++------------------------- 1 file changed, 339 insertions(+), 339 deletions(-) (limited to 'source/QXmppClient.cpp') diff --git a/source/QXmppClient.cpp b/source/QXmppClient.cpp index 4618da55..0538224f 100644 --- a/source/QXmppClient.cpp +++ b/source/QXmppClient.cpp @@ -1,339 +1,339 @@ -/* - * Copyright (C) 2008-2009 Manjeet Dahiya - * - * Author: - * Manjeet Dahiya - * - * Source: - * http://code.google.com/p/qxmpp - * - * This file is a part of QXmpp library. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - */ - - -#include "QXmppClient.h" -#include "QXmppStream.h" -#include "QXmppRoster.h" -#include "QXmppMessage.h" -#include "QXmppReconnectionManager.h" - -/// Creates a QXmppClient object. -/// \param parent is passed to the QObject's contructor. -/// The default value is 0. - -QXmppClient::QXmppClient(QObject *parent) - : QObject(parent), m_stream(0), m_clientPrecence(QXmppPresence::Available), - m_reconnectionManager(0) -{ - m_stream = new QXmppStream(this); - - bool check = connect(m_stream, SIGNAL(messageReceived(const QXmppMessage&)), - this, SIGNAL(messageReceived(const QXmppMessage&))); - Q_ASSERT(check); - - check = connect(m_stream, SIGNAL(presenceReceived(const QXmppPresence&)), - this, SIGNAL(presenceReceived(const QXmppPresence&))); - Q_ASSERT(check); - - 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); -} - -/// Destroys the QXmppClient object. -/// - -QXmppClient::~QXmppClient() -{ -} - -/// Returns a modifiable reference to the current configuration of QXmppClient. -/// \return Reference to the QXmppClient's configuration for the connection. - -QXmppConfiguration& QXmppClient::getConfiguration() -{ - return m_config; -} - -/// Overloaded function. It returns a const reference to the current configuration -/// of QXmppClient. -/// \return Constant reference to the QXmppClient's configuration for the connection. - -const QXmppConfiguration& QXmppClient::getConfiguration() const -{ - return m_config; -} - -/// Attempts to connect to the XMPP server. Server deatils and other configurations -/// are specified using the config parameter. Use signals connected(), error(QXmppClient::Error) -/// and disconnected() to know the status of the connection. -/// \param config Specifies the configuration object for connecting the XMPP server. -/// This contains the host name, user, passwd etc. See QXmppConfiguration for details. -/// \param initialPresence The initial presence which will be set for this user -/// after establishing the session. The default value is QXmppPresence::Available - -void QXmppClient::connectToServer(const QXmppConfiguration& config, - const QXmppPresence& initialPresence) -{ - m_config = config; - - if(!m_config.getAutoReconnectionEnabled()) - { - delete m_reconnectionManager; - m_reconnectionManager = 0; - } - - m_clientPrecence = initialPresence; - - m_stream->connect(); -} - -/// Overloaded function. -/// \param host host name of the XMPP server where connection has to be made -/// (e.g. "jabber.org" and "talk.google.com"). It can also be an IP address in -/// the form of a string (e.g. "192.168.1.25"). -/// \param user Username of the account at the specified XMPP server. It should -/// be the name without the domain name. E.g. "qxmpp.test1" and not -/// "qxmpp.test1@gmail.com" -/// \param passwd Password for the specified username -/// \param domain Domain name e.g. "gmail.com" and "jabber.org". -/// \param port Port number at which the XMPP server is listening. The default -/// value is 5222. -/// \param initialPresence The initial presence which will be set for this user -/// after establishing the session. The default value is QXmppPresence::Available - -void QXmppClient::connectToServer(const QString& host, const QString& user, - const QString& passwd, const QString& domain, - int port, - const QXmppPresence& initialPresence) -{ - m_config.setHost(host); - m_config.setUser(user); - m_config.setPasswd(passwd); - m_config.setDomain(domain); - m_config.setPort(port); - - m_clientPrecence = initialPresence; - - m_stream->connect(); -} - -/// After successfully connecting to the server use this function to send -/// stanzas to the server. This function can solely be used to send various kind -/// of stanzas to the server. QXmppPacket is a parent class of all the stanzas -/// QXmppMessage, QXmppPresence, QXmppIq, QXmppBind, QXmppRosterIq, QXmppSession -/// and QXmppVCard. -/// -/// Following code snippet illustrates how to send a message using this function: -/// \code -/// QXmppMessage message(from, to, message); -/// client.sendPacket(message); -/// \endcode -/// -/// \param packet A valid XMPP stanza. It can an iq, a message or a presence stanza. -/// - -void QXmppClient::sendPacket(const QXmppPacket& packet) -{ - if(m_stream) - { - m_stream->sendPacket(packet); - } -} - -/// Disconnects the client and the current presence of client changes to -/// QXmppPresence::Unavailable and statatus text changes to "Logged out". -/// -/// \note Make sure that the clientPresence is changed to -/// QXmppPresence::Available, if you are again calling connectToServer() after -/// calling the disconnect() function. -/// - -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(); -} - -/// Returns the reference to QXmppRoster object of the client. -/// \return Reference to the roster object of the connected client. Use this to -/// get the list of friends in the roster and there presence information. -/// - -QXmppRoster& QXmppClient::getRoster() -{ - return m_stream->getRoster(); -} - -/// Utility function to send message to all the resources associated with the -/// specified bareJid. -/// -/// \param bareJid bareJid of the receiving entity -/// \param message Message string to be sent. - -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)); - } -} - -/// Changes the presence of the connected client. -/// -/// \param presence QXmppPresence object -/// - -void QXmppClient::setClientPresence(const QXmppPresence& presence) -{ - m_clientPrecence = presence; - sendPacket(m_clientPrecence); -} - -/// Overloaded function. -/// -/// It only changes the status text. -/// -/// \param statusText New status message string -/// - -void QXmppClient::setClientPresence(const QString& statusText) -{ - m_clientPrecence.getStatus().setStatusText(statusText); - sendPacket(m_clientPrecence); -} - -/// Overloaded function. -/// -/// It only changes the QXmppPresence::Type. -/// -/// \param presenceType New QXmppPresence::Type -/// - -void QXmppClient::setClientPresence(QXmppPresence::Type presenceType) -{ - if(presenceType == QXmppPresence::Unavailable) - { - disconnect(); - } - else - { - m_clientPrecence.setType(presenceType); - sendPacket(m_clientPrecence); - } -} - -/// Overloaded function. -/// -/// It only changes the QXmppPresence::Status::Type. -/// -/// \param statusType New QXmppPresence::Status::Type -/// - -void QXmppClient::setClientPresence(QXmppPresence::Status::Type statusType) -{ - m_clientPrecence.getStatus().setType(statusType); - sendPacket(m_clientPrecence); -} - -/// Function to get the client's current presence. -/// -/// \return Constant reference to the client's presence object -/// - -const QXmppPresence& QXmppClient::getClientPresence() const -{ - return m_clientPrecence; -} - -/// Function to get reconnection manager. By default there exists a reconnection -/// manager. See QXmppReconnectionManager for more details of the reconnection -/// mechanism. -/// -/// \return Pointer to QXmppReconnectionManager -/// - -QXmppReconnectionManager* QXmppClient::getReconnectionManager() -{ - return m_reconnectionManager; -} - -/// Sets the user defined reconnection manager. -/// -/// \return true if all the signal-slot connections are made correctly. -/// - -bool QXmppClient::setReconnectionManager(QXmppReconnectionManager* - reconnectionManager) -{ - if(!reconnectionManager) - return false; - - if(m_reconnectionManager) - delete m_reconnectionManager; - - m_reconnectionManager = reconnectionManager; - - bool check = connect(this, SIGNAL(connected()), m_reconnectionManager, - SLOT(connected())); - Q_ASSERT(check); - if(!check) - return false; - - check = connect(this, SIGNAL(error(QXmppClient::Error)), - m_reconnectionManager, SLOT(error(QXmppClient::Error))); - Q_ASSERT(check); - if(!check) - return false; - - return true; -} - -/// Returns the socket error if QXmppClient::Error is QXmppClient::SocketError. -/// -/// \return QAbstractSocket::SocketError -/// - -QAbstractSocket::SocketError QXmppClient::getSocketError() -{ - return m_stream->getSocketError(); -} - -/// Returns the reference to QXmppVCardManager, implimentation of XEP-0054. -/// http://xmpp.org/extensions/xep-0054.html -/// - -QXmppVCardManager& QXmppClient::getVCardManager() -{ - return m_stream->getVCardManager(); -} +/* + * Copyright (C) 2008-2009 Manjeet Dahiya + * + * Author: + * Manjeet Dahiya + * + * Source: + * http://code.google.com/p/qxmpp + * + * This file is a part of QXmpp library. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + */ + + +#include "QXmppClient.h" +#include "QXmppStream.h" +#include "QXmppRoster.h" +#include "QXmppMessage.h" +#include "QXmppReconnectionManager.h" + +/// Creates a QXmppClient object. +/// \param parent is passed to the QObject's contructor. +/// The default value is 0. + +QXmppClient::QXmppClient(QObject *parent) + : QObject(parent), m_stream(0), m_clientPrecence(QXmppPresence::Available), + m_reconnectionManager(0) +{ + m_stream = new QXmppStream(this); + + bool check = connect(m_stream, SIGNAL(messageReceived(const QXmppMessage&)), + this, SIGNAL(messageReceived(const QXmppMessage&))); + Q_ASSERT(check); + + check = connect(m_stream, SIGNAL(presenceReceived(const QXmppPresence&)), + this, SIGNAL(presenceReceived(const QXmppPresence&))); + Q_ASSERT(check); + + 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); +} + +/// Destroys the QXmppClient object. +/// + +QXmppClient::~QXmppClient() +{ +} + +/// Returns a modifiable reference to the current configuration of QXmppClient. +/// \return Reference to the QXmppClient's configuration for the connection. + +QXmppConfiguration& QXmppClient::getConfiguration() +{ + return m_config; +} + +/// Overloaded function. It returns a const reference to the current configuration +/// of QXmppClient. +/// \return Constant reference to the QXmppClient's configuration for the connection. + +const QXmppConfiguration& QXmppClient::getConfiguration() const +{ + return m_config; +} + +/// Attempts to connect to the XMPP server. Server deatils and other configurations +/// are specified using the config parameter. Use signals connected(), error(QXmppClient::Error) +/// and disconnected() to know the status of the connection. +/// \param config Specifies the configuration object for connecting the XMPP server. +/// This contains the host name, user, passwd etc. See QXmppConfiguration for details. +/// \param initialPresence The initial presence which will be set for this user +/// after establishing the session. The default value is QXmppPresence::Available + +void QXmppClient::connectToServer(const QXmppConfiguration& config, + const QXmppPresence& initialPresence) +{ + m_config = config; + + if(!m_config.getAutoReconnectionEnabled()) + { + delete m_reconnectionManager; + m_reconnectionManager = 0; + } + + m_clientPrecence = initialPresence; + + m_stream->connect(); +} + +/// Overloaded function. +/// \param host host name of the XMPP server where connection has to be made +/// (e.g. "jabber.org" and "talk.google.com"). It can also be an IP address in +/// the form of a string (e.g. "192.168.1.25"). +/// \param user Username of the account at the specified XMPP server. It should +/// be the name without the domain name. E.g. "qxmpp.test1" and not +/// "qxmpp.test1@gmail.com" +/// \param passwd Password for the specified username +/// \param domain Domain name e.g. "gmail.com" and "jabber.org". +/// \param port Port number at which the XMPP server is listening. The default +/// value is 5222. +/// \param initialPresence The initial presence which will be set for this user +/// after establishing the session. The default value is QXmppPresence::Available + +void QXmppClient::connectToServer(const QString& host, const QString& user, + const QString& passwd, const QString& domain, + int port, + const QXmppPresence& initialPresence) +{ + m_config.setHost(host); + m_config.setUser(user); + m_config.setPasswd(passwd); + m_config.setDomain(domain); + m_config.setPort(port); + + m_clientPrecence = initialPresence; + + m_stream->connect(); +} + +/// After successfully connecting to the server use this function to send +/// stanzas to the server. This function can solely be used to send various kind +/// of stanzas to the server. QXmppPacket is a parent class of all the stanzas +/// QXmppMessage, QXmppPresence, QXmppIq, QXmppBind, QXmppRosterIq, QXmppSession +/// and QXmppVCard. +/// +/// Following code snippet illustrates how to send a message using this function: +/// \code +/// QXmppMessage message(from, to, message); +/// client.sendPacket(message); +/// \endcode +/// +/// \param packet A valid XMPP stanza. It can an iq, a message or a presence stanza. +/// + +void QXmppClient::sendPacket(const QXmppPacket& packet) +{ + if(m_stream) + { + m_stream->sendPacket(packet); + } +} + +/// Disconnects the client and the current presence of client changes to +/// QXmppPresence::Unavailable and statatus text changes to "Logged out". +/// +/// \note Make sure that the clientPresence is changed to +/// QXmppPresence::Available, if you are again calling connectToServer() after +/// calling the disconnect() function. +/// + +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(); +} + +/// Returns the reference to QXmppRoster object of the client. +/// \return Reference to the roster object of the connected client. Use this to +/// get the list of friends in the roster and there presence information. +/// + +QXmppRoster& QXmppClient::getRoster() +{ + return m_stream->getRoster(); +} + +/// Utility function to send message to all the resources associated with the +/// specified bareJid. +/// +/// \param bareJid bareJid of the receiving entity +/// \param message Message string to be sent. + +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)); + } +} + +/// Changes the presence of the connected client. +/// +/// \param presence QXmppPresence object +/// + +void QXmppClient::setClientPresence(const QXmppPresence& presence) +{ + m_clientPrecence = presence; + sendPacket(m_clientPrecence); +} + +/// Overloaded function. +/// +/// It only changes the status text. +/// +/// \param statusText New status message string +/// + +void QXmppClient::setClientPresence(const QString& statusText) +{ + m_clientPrecence.getStatus().setStatusText(statusText); + sendPacket(m_clientPrecence); +} + +/// Overloaded function. +/// +/// It only changes the QXmppPresence::Type. +/// +/// \param presenceType New QXmppPresence::Type +/// + +void QXmppClient::setClientPresence(QXmppPresence::Type presenceType) +{ + if(presenceType == QXmppPresence::Unavailable) + { + disconnect(); + } + else + { + m_clientPrecence.setType(presenceType); + sendPacket(m_clientPrecence); + } +} + +/// Overloaded function. +/// +/// It only changes the QXmppPresence::Status::Type. +/// +/// \param statusType New QXmppPresence::Status::Type +/// + +void QXmppClient::setClientPresence(QXmppPresence::Status::Type statusType) +{ + m_clientPrecence.getStatus().setType(statusType); + sendPacket(m_clientPrecence); +} + +/// Function to get the client's current presence. +/// +/// \return Constant reference to the client's presence object +/// + +const QXmppPresence& QXmppClient::getClientPresence() const +{ + return m_clientPrecence; +} + +/// Function to get reconnection manager. By default there exists a reconnection +/// manager. See QXmppReconnectionManager for more details of the reconnection +/// mechanism. +/// +/// \return Pointer to QXmppReconnectionManager +/// + +QXmppReconnectionManager* QXmppClient::getReconnectionManager() +{ + return m_reconnectionManager; +} + +/// Sets the user defined reconnection manager. +/// +/// \return true if all the signal-slot connections are made correctly. +/// + +bool QXmppClient::setReconnectionManager(QXmppReconnectionManager* + reconnectionManager) +{ + if(!reconnectionManager) + return false; + + if(m_reconnectionManager) + delete m_reconnectionManager; + + m_reconnectionManager = reconnectionManager; + + bool check = connect(this, SIGNAL(connected()), m_reconnectionManager, + SLOT(connected())); + Q_ASSERT(check); + if(!check) + return false; + + check = connect(this, SIGNAL(error(QXmppClient::Error)), + m_reconnectionManager, SLOT(error(QXmppClient::Error))); + Q_ASSERT(check); + if(!check) + return false; + + return true; +} + +/// Returns the socket error if QXmppClient::Error is QXmppClient::SocketError. +/// +/// \return QAbstractSocket::SocketError +/// + +QAbstractSocket::SocketError QXmppClient::getSocketError() +{ + return m_stream->getSocketError(); +} + +/// Returns the reference to QXmppVCardManager, implimentation of XEP-0054. +/// http://xmpp.org/extensions/xep-0054.html +/// + +QXmppVCardManager& QXmppClient::getVCardManager() +{ + return m_stream->getVCardManager(); +} -- cgit v1.2.3