aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJeremy Lainé <jeremy.laine@m4x.org>2010-08-23 12:27:55 +0000
committerJeremy Lainé <jeremy.laine@m4x.org>2010-08-23 12:27:55 +0000
commitfd7e6fdf36dba114375b7097fb0eb4caf0490e41 (patch)
treea22c48e06b201168482922fb78731753de7fc965 /src
parent068cc630f6ef9a0d265b384ea7dc30011f757a9c (diff)
downloadqxmpp-fd7e6fdf36dba114375b7097fb0eb4caf0490e41.tar.gz
make QXmppServer API feature-complete
Diffstat (limited to 'src')
-rw-r--r--src/QXmppServer.cpp82
-rw-r--r--src/QXmppServer.h8
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);