diff options
| author | Jeremy Lainé <jeremy.laine@m4x.org> | 2010-08-23 12:27:55 +0000 |
|---|---|---|
| committer | Jeremy Lainé <jeremy.laine@m4x.org> | 2010-08-23 12:27:55 +0000 |
| commit | fd7e6fdf36dba114375b7097fb0eb4caf0490e41 (patch) | |
| tree | a22c48e06b201168482922fb78731753de7fc965 /src | |
| parent | 068cc630f6ef9a0d265b384ea7dc30011f757a9c (diff) | |
| download | qxmpp-fd7e6fdf36dba114375b7097fb0eb4caf0490e41.tar.gz | |
make QXmppServer API feature-complete
Diffstat (limited to 'src')
| -rw-r--r-- | src/QXmppServer.cpp | 82 | ||||
| -rw-r--r-- | src/QXmppServer.h | 8 |
2 files changed, 89 insertions, 1 deletions
diff --git a/src/QXmppServer.cpp b/src/QXmppServer.cpp index 36b1ee58..a8b5a3d2 100644 --- a/src/QXmppServer.cpp +++ b/src/QXmppServer.cpp @@ -22,6 +22,7 @@ */ #include <QDomElement> +#include <QFileInfo> #include <QSslSocket> #include "QXmppDialback.h" @@ -47,10 +48,12 @@ public: QXmppPasswordChecker *passwordChecker; // client-to-server + QXmppSslServer *serverForClients; QList<QXmppIncomingClient*> incomingClients; // server-to-server QList<QXmppOutgoingServer*> outgoingServers; + QXmppSslServer *serverForServers; }; QXmppServerPrivate::QXmppServerPrivate() @@ -67,6 +70,15 @@ QXmppServer::QXmppServer(QObject *parent) : QObject(parent), d(new QXmppServerPrivate) { + d->serverForClients = new QXmppSslServer(this); + bool check = connect(d->serverForClients, SIGNAL(newConnection(QSslSocket*)), + this, SLOT(slotClientConnection(QSslSocket*))); + Q_ASSERT(check); + + d->serverForServers = new QXmppSslServer(this); + check = connect(d->serverForServers, SIGNAL(newConnection(QSslSocket*)), + this, SLOT(slotServerConnection(QSslSocket*))); + Q_ASSERT(check); } /// Destroys an XMPP server instance. @@ -128,6 +140,75 @@ void QXmppServer::setPasswordChecker(QXmppPasswordChecker *checker) d->passwordChecker = checker; } +/// Sets the path for additional SSL CA certificates. +/// +/// \param path + +void QXmppServer::addCaCertificates(const QString &path) +{ + if (!path.isEmpty() && !QFileInfo(path).isReadable()) + qWarning() << "SSL CA certificates are not readable" << path; + d->serverForClients->addCaCertificates(path); + d->serverForServers->addCaCertificates(path); +} + +/// Sets the path for the local SSL certificate. +/// +/// \param path + +void QXmppServer::setLocalCertificate(const QString &path) +{ + if (!path.isEmpty() && !QFileInfo(path).isReadable()) + qWarning() << "SSL certificate is not readable" << path; + d->serverForClients->setLocalCertificate(path); + d->serverForServers->setLocalCertificate(path); +} + +/// Sets the path for the local SSL private key. +/// +/// \param path + +void QXmppServer::setPrivateKey(const QString &path) +{ + if (!path.isEmpty() && !QFileInfo(path).isReadable()) + qWarning() << "SSL key is not readable" << path; + d->serverForClients->setPrivateKey(path); + d->serverForServers->setPrivateKey(path); +} + +/// Listen for incoming XMPP client connections. +/// +/// \param address +/// \param port + +bool QXmppServer::listenForClients(const QHostAddress &address, quint16 port) +{ + if (!d->serverForClients->listen(address, port)) + { + if (logger()) + logger()->log(QXmppLogger::WarningMessage, + QString("Could not start listening for C2S on port %1").arg(QString::number(port))); + return false; + } + return true; +} + +/// Listen for incoming XMPP server connections. +/// +/// \param address +/// \param port + +bool QXmppServer::listenForServers(const QHostAddress &address, quint16 port) +{ + if (!d->serverForServers->listen(address, port)) + { + if (logger()) + logger()->log(QXmppLogger::WarningMessage, + QString("Could not start listening for S2S on port %1").arg(QString::number(port))); + return false; + } + return true; +} QXmppOutgoingServer* QXmppServer::connectToDomain(const QString &domain) { @@ -336,7 +417,6 @@ void QXmppServer::slotElementReceived(const QDomElement &origElement, bool &hand if (!incoming) return; handleStanza(incoming, origElement); - handled = true; } /// Handle a new incoming TCP connection from a server. diff --git a/src/QXmppServer.h b/src/QXmppServer.h index 0c686334..e73b8f20 100644 --- a/src/QXmppServer.h +++ b/src/QXmppServer.h @@ -34,6 +34,7 @@ class QXmppLogger; class QXmppOutgoingServer; class QXmppPasswordChecker; class QXmppServerPrivate; +class QXmppSslServer; class QXmppStanza; class QXmppStream; @@ -58,6 +59,13 @@ public: QXmppPasswordChecker *passwordChecker(); void setPasswordChecker(QXmppPasswordChecker *checker); + void addCaCertificates(const QString &caCertificates); + void setLocalCertificate(const QString &sslCertificate); + void setPrivateKey(const QString &sslKey); + + bool listenForClients(const QHostAddress &address, quint16 port = 5222); + bool listenForServers(const QHostAddress &address, quint16 port = 5269); + bool sendElement(const QDomElement &element); bool sendPacket(const QXmppStanza &stanza); |
