aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJeremy Lainé <jeremy.laine@m4x.org>2010-09-20 13:24:15 +0000
committerJeremy Lainé <jeremy.laine@m4x.org>2010-09-20 13:24:15 +0000
commitab192b801c6db3e3f33a590f0edf24f5dbcc0551 (patch)
treeb2d3f7c155f8791e68433702f3b53bd8307c0d39 /src
parente6c18670dbcb36a2a1b999327f657b8cdd77b78e (diff)
downloadqxmpp-ab192b801c6db3e3f33a590f0edf24f5dbcc0551.tar.gz
make QXmppCallManager a QXmppClientExtension
Diffstat (limited to 'src')
-rw-r--r--src/QXmppCallManager.cpp54
-rw-r--r--src/QXmppCallManager.h16
-rw-r--r--src/QXmppClient.cpp4
-rw-r--r--src/QXmppDiscoveryManager.cpp5
-rw-r--r--src/QXmppOutgoingClient.cpp8
-rw-r--r--src/QXmppOutgoingClient.h4
6 files changed, 48 insertions, 43 deletions
diff --git a/src/QXmppCallManager.cpp b/src/QXmppCallManager.cpp
index 00f318d7..9ad9826d 100644
--- a/src/QXmppCallManager.cpp
+++ b/src/QXmppCallManager.cpp
@@ -21,6 +21,7 @@
*
*/
+#include <QDomElement>
#include <QTimer>
#include "QXmppCallManager.h"
@@ -72,7 +73,7 @@ QXmppCall::QXmppCall(const QString &jid, QXmppCall::Direction direction, QObject
// ICE connection
bool iceControlling = (m_direction == OutgoingDirection);
m_connection = new QXmppIceConnection(iceControlling, this);
- m_connection->setStunServer("stun.ekiga.net");
+ //m_connection->setStunServer("stun.ekiga.net");
m_connection->addComponent(RTP_COMPONENT);
m_connection->addComponent(RTCP_COMPONENT);
@@ -408,21 +409,40 @@ qint64 QXmppCall::writeData(const char * data, qint64 maxSize)
return maxSize;
}
-QXmppCallManager::QXmppCallManager(QXmppOutgoingClient *stream, QObject *parent)
- : QObject(parent), m_stream(stream)
+QXmppCallManager::QXmppCallManager(QXmppClient *client)
{
- // setup logging
- bool check = connect(this, SIGNAL(logMessage(QXmppLogger::MessageType, QString)),
- m_stream, SIGNAL(logMessage(QXmppLogger::MessageType, QString)));
- Q_ASSERT(check);
-
- check = connect(stream, SIGNAL(iqReceived(QXmppIq)),
+ bool check = connect(client, SIGNAL(iqReceived(QXmppIq)),
this, SLOT(iqReceived(QXmppIq)));
Q_ASSERT(check);
+ Q_UNUSED(check);
+}
- check = connect(stream, SIGNAL(jingleIqReceived(QXmppJingleIq)),
- this, SLOT(jingleIqReceived(QXmppJingleIq)));
- Q_ASSERT(check);
+QStringList QXmppCallManager::discoveryFeatures() const
+{
+ return QStringList()
+ << ns_jingle // XEP-0166 : Jingle
+ << ns_jingle_rtp // XEP-0167 : Jingle RTP Sessions
+ << ns_jingle_rtp_audio
+ << ns_jingle_ice_udp; // XEP-0176 : Jingle ICE-UDP Transport Method
+}
+
+bool QXmppCallManager::handleStanza(QXmppStream *stream, const QDomElement &element)
+{
+ Q_UNUSED(stream);
+
+ if(element.tagName() == "iq")
+ {
+ // XEP-0166: Jingle
+ if (QXmppJingleIq::isJingleIq(element))
+ {
+ QXmppJingleIq jingleIq;
+ jingleIq.parse(element);
+ jingleIqReceived(jingleIq);
+ return true;
+ }
+ }
+
+ return false;
}
/// Initiates a new outgoing call to the specified recipient.
@@ -446,7 +466,7 @@ QXmppCall *QXmppCallManager::call(const QString &jid)
iq.setTo(jid);
iq.setType(QXmppIq::Set);
iq.setAction(QXmppJingleIq::SessionInitiate);
- iq.setInitiator(m_stream->configuration().jid());
+ iq.setInitiator(client()->configuration().jid());
iq.setSid(call->m_sid);
iq.content().setCreator(call->m_contentCreator);
iq.content().setName(call->m_contentName);
@@ -506,7 +526,7 @@ void QXmppCallManager::callStateChanged(QXmppCall::State state)
iq.setTo(call->jid());
iq.setType(QXmppIq::Set);
iq.setAction(QXmppJingleIq::SessionAccept);
- iq.setResponder(m_stream->configuration().jid());
+ iq.setResponder(client()->configuration().jid());
iq.setSid(call->m_sid);
iq.content().setCreator(call->m_contentCreator);
iq.content().setName(call->m_contentName);
@@ -790,7 +810,7 @@ void QXmppCallManager::localCandidatesChanged()
iq.setTo(call->jid());
iq.setType(QXmppIq::Set);
iq.setAction(QXmppJingleIq::TransportInfo);
- iq.setInitiator(m_stream->configuration().jid());
+ iq.setInitiator(client()->configuration().jid());
iq.setSid(call->sid());
iq.content().setCreator(call->m_contentCreator);
@@ -810,7 +830,7 @@ bool QXmppCallManager::sendAck(const QXmppJingleIq &iq)
ack.setId(iq.id());
ack.setTo(iq.from());
ack.setType(QXmppIq::Result);
- return m_stream->sendPacket(ack);
+ return client()->sendPacket(ack);
}
/// Sends a Jingle IQ and adds it to outstanding requests.
@@ -819,6 +839,6 @@ bool QXmppCallManager::sendAck(const QXmppJingleIq &iq)
bool QXmppCallManager::sendRequest(QXmppCall *call, const QXmppJingleIq &iq)
{
call->m_requests << iq;
- return m_stream->sendPacket(iq);
+ return client()->sendPacket(iq);
}
diff --git a/src/QXmppCallManager.h b/src/QXmppCallManager.h
index 169fafec..694067c7 100644
--- a/src/QXmppCallManager.h
+++ b/src/QXmppCallManager.h
@@ -27,6 +27,7 @@
#include <QObject>
#include <QIODevice>
+#include "QXmppClientExtension.h"
#include "QXmppJingleIq.h"
#include "QXmppLogger.h"
@@ -176,14 +177,19 @@ private:
///
/// \ingroup Managers
-class QXmppCallManager : public QObject
+class QXmppCallManager : public QXmppClientExtension
{
Q_OBJECT
public:
- QXmppCallManager(QXmppOutgoingClient *stream, QObject *parent = 0);
+ QXmppCallManager(QXmppClient *client);
QXmppCall *call(const QString &jid);
+ /// \cond
+ QStringList discoveryFeatures() const;
+ bool handleStanza(QXmppStream *stream, const QDomElement &element);
+ /// \endcond
+
signals:
/// This signal is emitted when a new incoming call is received.
///
@@ -191,9 +197,6 @@ signals:
/// To refuse the call, invoke the call's QXmppCall::abort() method.
void callReceived(QXmppCall *call);
- /// This signal is emitted to send logging messages.
- void logMessage(QXmppLogger::MessageType type, const QString &msg);
-
private slots:
void callDestroyed(QObject *object);
void callStateChanged(QXmppCall::State state);
@@ -210,9 +213,6 @@ private:
bool sendRequest(QXmppCall *call, const QXmppJingleIq &iq);
QList<QXmppCall*> m_calls;
-
- // reference to xmpp stream (no ownership)
- QXmppOutgoingClient* m_stream;
};
#endif
diff --git a/src/QXmppClient.cpp b/src/QXmppClient.cpp
index ab9db6de..236c2480 100644
--- a/src/QXmppClient.cpp
+++ b/src/QXmppClient.cpp
@@ -201,7 +201,9 @@ QXmppClient::QXmppClient(QObject *parent)
// TODO move manager references to d->extensions
d->rosterManager = new QXmppRosterManager(d->stream, this);
d->archiveManager = new QXmppArchiveManager(d->stream, this);
- d->callManager = new QXmppCallManager(d->stream, this);
+
+ d->callManager = new QXmppCallManager(this);
+ addExtension(d->callManager);
d->mucManager = new QXmppMucManager(this);
addExtension(d->mucManager);
diff --git a/src/QXmppDiscoveryManager.cpp b/src/QXmppDiscoveryManager.cpp
index 2c620783..43e85fb6 100644
--- a/src/QXmppDiscoveryManager.cpp
+++ b/src/QXmppDiscoveryManager.cpp
@@ -116,7 +116,6 @@ QXmppDiscoveryIq QXmppDiscoveryManager::capabilities()
QStringList features;
features
<< ns_rpc // XEP-0009: Jabber-RPC
-// << ns_disco_info // XEP-0030: Service Discovery
<< ns_ibb // XEP-0047: In-Band Bytestreams
// << ns_vcard // XEP-0054: vcard-temp
<< ns_bytestreams // XEP-0065: SOCKS5 Bytestreams
@@ -124,10 +123,6 @@ QXmppDiscoveryIq QXmppDiscoveryManager::capabilities()
<< ns_stream_initiation // XEP-0095: Stream Initiation
<< ns_stream_initiation_file_transfer // XEP-0096: SI File Transfer
<< ns_capabilities // XEP-0115 : Entity Capabilities
- << ns_jingle // XEP-0166 : Jingle
- << ns_jingle_rtp // XEP-0167 : Jingle RTP Sessions
- << ns_jingle_rtp_audio
- << ns_jingle_ice_udp // XEP-0176 : Jingle ICE-UDP Transport Method
<< ns_ping; // XEP-0199: XMPP Ping
foreach(QXmppClientExtension* extension, client()->extensions())
diff --git a/src/QXmppOutgoingClient.cpp b/src/QXmppOutgoingClient.cpp
index 45aaf801..f2788538 100644
--- a/src/QXmppOutgoingClient.cpp
+++ b/src/QXmppOutgoingClient.cpp
@@ -44,7 +44,6 @@
#include "QXmppByteStreamIq.h"
#include "QXmppDiscoveryIq.h"
#include "QXmppIbbIq.h"
-#include "QXmppJingleIq.h"
#include "QXmppPingIq.h"
#include "QXmppRpcIq.h"
#include "QXmppRosterIq.h"
@@ -591,13 +590,6 @@ void QXmppOutgoingClient::handleStanza(const QDomElement &nodeRecv)
archiveIq.parse(nodeRecv);
emit archivePrefIqReceived(archiveIq);
}
- // XEP-0166: Jingle
- else if(QXmppJingleIq::isJingleIq(nodeRecv))
- {
- QXmppJingleIq jingleIq;
- jingleIq.parse(nodeRecv);
- emit jingleIqReceived(jingleIq);
- }
// XEP-0199: XMPP Ping
else if(QXmppPingIq::isPingIq(nodeRecv))
{
diff --git a/src/QXmppOutgoingClient.h b/src/QXmppOutgoingClient.h
index 20f2b3db..cd6d81f7 100644
--- a/src/QXmppOutgoingClient.h
+++ b/src/QXmppOutgoingClient.h
@@ -52,7 +52,6 @@ class QXmppDiscoveryIq;
class QXmppIbbCloseIq;
class QXmppIbbDataIq;
class QXmppIbbOpenIq;
-class QXmppJingleIq;
class QXmppStreamInitiationIq;
class QXmppOutgoingClientPrivate;
@@ -113,9 +112,6 @@ signals:
void archiveListIqReceived(const QXmppArchiveListIq&);
void archivePrefIqReceived(const QXmppArchivePrefIq&);
- // XEP-0166: Jingle
- void jingleIqReceived(const QXmppJingleIq&);
-
protected:
/// \cond
// Overridable methods