diff options
| author | Niels Ole Salscheider <niels_ole@salscheider-online.de> | 2020-03-10 13:19:31 +0100 |
|---|---|---|
| committer | LNJ <lnj@kaidan.im> | 2020-03-16 22:22:59 +0100 |
| commit | bb47e1b9cd2926bed3e63f528e063e462c28975a (patch) | |
| tree | 1b86c3f9774bc86a55509da35a479c88ca7c49ab /src/client | |
| parent | 133c94dcf874162860351e34aa1a92a1d942ad2c (diff) | |
| download | qxmpp-bb47e1b9cd2926bed3e63f528e063e462c28975a.tar.gz | |
Allow to set multiple STUN servers
This way we can for example add a server for IPv4 and one IPv6.
Diffstat (limited to 'src/client')
| -rw-r--r-- | src/client/QXmppCall.cpp | 2 | ||||
| -rw-r--r-- | src/client/QXmppCallManager.cpp | 25 | ||||
| -rw-r--r-- | src/client/QXmppCallManager.h | 1 | ||||
| -rw-r--r-- | src/client/QXmppCallManager_p.h | 3 |
4 files changed, 23 insertions, 8 deletions
diff --git a/src/client/QXmppCall.cpp b/src/client/QXmppCall.cpp index caf5584b..07987ea1 100644 --- a/src/client/QXmppCall.cpp +++ b/src/client/QXmppCall.cpp @@ -450,7 +450,7 @@ QXmppCallStream *QXmppCallPrivate::createStream(const QString &media, const QStr // ICE connection stream->d->connection->setIceControlling(direction == QXmppCall::OutgoingDirection); - stream->d->connection->setStunServer(manager->d->stunHost, manager->d->stunPort); + stream->d->connection->setStunServers(manager->d->stunServers); stream->d->connection->setTurnServer(manager->d->turnHost, manager->d->turnPort); stream->d->connection->setTurnUser(manager->d->turnUser); stream->d->connection->setTurnPassword(manager->d->turnPassword); diff --git a/src/client/QXmppCallManager.cpp b/src/client/QXmppCallManager.cpp index 8ba97c2d..dba05975 100644 --- a/src/client/QXmppCallManager.cpp +++ b/src/client/QXmppCallManager.cpp @@ -38,8 +38,7 @@ #include <QTimer> QXmppCallManagerPrivate::QXmppCallManagerPrivate(QXmppCallManager *qq) - : stunPort(0), - turnPort(0), + : turnPort(0), q(qq) { // Initialize GStreamer @@ -153,16 +152,32 @@ QXmppCall *QXmppCallManager::call(const QString &jid) return call; } -/// Sets the STUN server to use to determine server-reflexive addresses +/// Sets multiple STUN servers to use to determine server-reflexive addresses /// and ports. /// +/// \note This may only be called prior to calling bind(). +/// +/// \param servers List of the STUN servers. +/// +/// \since QXmpp 1.3 + +void QXmppCallManager::setStunServers(const QList<QPair<QHostAddress, quint16>> &servers) +{ + d->stunServers = servers; +} + +/// Sets a single STUN server to use to determine server-reflexive addresses +/// and ports. +/// +/// \note This may only be called prior to calling bind(). +/// /// \param host The address of the STUN server. /// \param port The port of the STUN server. void QXmppCallManager::setStunServer(const QHostAddress &host, quint16 port) { - d->stunHost = host; - d->stunPort = port; + d->stunServers.clear(); + d->stunServers.push_back(QPair<QHostAddress, quint16>(host, port)); } /// Sets the TURN server to use to relay packets in double-NAT configurations. diff --git a/src/client/QXmppCallManager.h b/src/client/QXmppCallManager.h index 719d1e36..41c368cc 100644 --- a/src/client/QXmppCallManager.h +++ b/src/client/QXmppCallManager.h @@ -68,6 +68,7 @@ class QXMPP_EXPORT QXmppCallManager : public QXmppClientExtension public: QXmppCallManager(); ~QXmppCallManager() override; + void setStunServers(const QList<QPair<QHostAddress, quint16>> &servers); void setStunServer(const QHostAddress &host, quint16 port = 3478); void setTurnServer(const QHostAddress &host, quint16 port = 3478); void setTurnUser(const QString &user); diff --git a/src/client/QXmppCallManager_p.h b/src/client/QXmppCallManager_p.h index 32b38dc0..75890ca4 100644 --- a/src/client/QXmppCallManager_p.h +++ b/src/client/QXmppCallManager_p.h @@ -49,8 +49,7 @@ public: QXmppCall *findCall(const QString &sid, QXmppCall::Direction direction) const; QList<QXmppCall *> calls; - QHostAddress stunHost; - quint16 stunPort; + QList<QPair<QHostAddress, quint16>> stunServers; QHostAddress turnHost; quint16 turnPort; QString turnUser; |
