aboutsummaryrefslogtreecommitdiff
path: root/src/client
diff options
context:
space:
mode:
authorLinus Jahn <lnj@kaidan.im>2021-03-27 16:49:16 +0100
committerLinus Jahn <lnj@kaidan.im>2021-03-28 00:09:13 +0100
commit00c5040bc3917de5e97efa98f47ac2157f441c7e (patch)
treea5e1c5350f3e8fb4306cda5aa778c78e99c46c51 /src/client
parent52b509a9703a67819193de8482552ed9894f834d (diff)
downloadqxmpp-00c5040bc3917de5e97efa98f47ac2157f441c7e.tar.gz
QXmppCall: Refactoring and clean up
Fixes things like: - detaching Qt containers (missing std::as_const) - new signal/slot syntax - missing emit keyword - more 'auto' - comparison of int and uint
Diffstat (limited to 'src/client')
-rw-r--r--src/client/QXmppCall.cpp41
-rw-r--r--src/client/QXmppCallManager.cpp30
-rw-r--r--src/client/QXmppCallStream.cpp3
-rw-r--r--src/client/QXmppCall_p.h4
4 files changed, 37 insertions, 41 deletions
diff --git a/src/client/QXmppCall.cpp b/src/client/QXmppCall.cpp
index a3dec654..06e36087 100644
--- a/src/client/QXmppCall.cpp
+++ b/src/client/QXmppCall.cpp
@@ -94,9 +94,7 @@ QXmppCallPrivate::~QXmppCallPrivate()
if (gst_element_set_state(pipeline, GST_STATE_NULL) == GST_STATE_CHANGE_FAILURE) {
qFatal("Unable to set the pipeline to the null state");
}
- for (auto stream : streams) {
- delete stream;
- }
+ qDeleteAll(streams);
gst_object_unref(pipeline);
}
@@ -195,7 +193,7 @@ void QXmppCallPrivate::filterGStreamerFormats(QList<GstCodec> &formats)
QXmppCallStream *QXmppCallPrivate::findStreamByMedia(const QString &media)
{
- for (auto stream : streams) {
+ for (auto stream : std::as_const(streams)) {
if (stream->media() == media) {
return stream;
}
@@ -205,7 +203,7 @@ QXmppCallStream *QXmppCallPrivate::findStreamByMedia(const QString &media)
QXmppCallStream *QXmppCallPrivate::findStreamByName(const QString &name)
{
- for (auto stream : streams) {
+ for (auto stream : std::as_const(streams)) {
if (stream->name() == name) {
return stream;
}
@@ -215,7 +213,7 @@ QXmppCallStream *QXmppCallPrivate::findStreamByName(const QString &name)
QXmppCallStream *QXmppCallPrivate::findStreamById(const int id)
{
- for (auto stream : streams) {
+ for (auto stream : std::as_const(streams)) {
if (stream->id() == id) {
return stream;
}
@@ -296,7 +294,8 @@ bool QXmppCallPrivate::handleTransport(QXmppCallStream *stream, const QXmppJingl
{
stream->d->connection->setRemoteUser(content.transportUser());
stream->d->connection->setRemotePassword(content.transportPassword());
- for (const QXmppJingleCandidate &candidate : content.transportCandidates()) {
+ const auto candidates = content.transportCandidates();
+ for (const auto &candidate : candidates) {
stream->d->connection->addRemoteCandidate(candidate);
}
@@ -309,7 +308,7 @@ bool QXmppCallPrivate::handleTransport(QXmppCallStream *stream, const QXmppJingl
void QXmppCallPrivate::handleRequest(const QXmppJingleIq &iq)
{
- const QXmppJingleIq::Content content = iq.contents().isEmpty() ? QXmppJingleIq::Content() : iq.contents().first();
+ const auto content = iq.contents().isEmpty() ? QXmppJingleIq::Content() : iq.contents().constFirst();
if (iq.action() == QXmppJingleIq::SessionAccept) {
@@ -422,8 +421,6 @@ void QXmppCallPrivate::handleRequest(const QXmppJingleIq &iq)
QXmppCallStream *QXmppCallPrivate::createStream(const QString &media, const QString &creator, const QString &name)
{
- bool check;
- Q_UNUSED(check);
Q_ASSERT(manager);
if (media != AUDIO_MEDIA && media != VIDEO_MEDIA) {
@@ -436,7 +433,7 @@ QXmppCallStream *QXmppCallPrivate::createStream(const QString &media, const QStr
return nullptr;
}
- QXmppCallStream *stream = new QXmppCallStream(pipeline, rtpbin, media, creator, name, ++nextId);
+ auto *stream = new QXmppCallStream(pipeline, rtpbin, media, creator, name, ++nextId);
// Fill local payload payload types
auto &codecs = media == AUDIO_MEDIA ? audioCodecs : videoCodecs;
@@ -458,15 +455,13 @@ QXmppCallStream *QXmppCallPrivate::createStream(const QString &media, const QStr
stream->d->connection->bind(QXmppIceComponent::discoverAddresses());
// connect signals
- check = QObject::connect(stream->d->connection, SIGNAL(localCandidatesChanged()),
- q, SLOT(localCandidatesChanged()));
- Q_ASSERT(check);
+ QObject::connect(stream->d->connection, &QXmppIceConnection::localCandidatesChanged,
+ q, &QXmppCall::localCandidatesChanged);
- check = QObject::connect(stream->d->connection, SIGNAL(disconnected()),
- q, SLOT(hangup()));
- Q_ASSERT(check);
+ QObject::connect(stream->d->connection, &QXmppIceConnection::disconnected,
+ q, &QXmppCall::hangup);
- Q_EMIT q->streamCreated(stream);
+ emit q->streamCreated(stream);
return stream;
}
@@ -561,7 +556,7 @@ void QXmppCallPrivate::terminate(QXmppJingleIq::Reason::Type reasonType)
setState(QXmppCall::DisconnectingState);
// schedule forceful termination in 5s
- QTimer::singleShot(5000, q, SLOT(terminated()));
+ QTimer::singleShot(5000, q, &QXmppCall::terminated);
}
/// \endcond
@@ -608,7 +603,7 @@ void QXmppCall::accept()
d->sendRequest(iq);
// notify user
- d->manager->callStarted(this);
+ emit d->manager->callStarted(this);
// check for call establishment
d->setState(QXmppCall::ActiveState);
@@ -648,7 +643,7 @@ QXmppCallStream *QXmppCall::videoStream() const
void QXmppCall::terminated()
{
// close streams
- for (auto stream : d->streams) {
+ for (auto stream : std::as_const(d->streams)) {
stream->d->connection->close();
}
@@ -679,8 +674,8 @@ void QXmppCall::localCandidatesChanged()
{
// find the stream
QXmppIceConnection *conn = qobject_cast<QXmppIceConnection *>(sender());
- QXmppCallStream *stream = 0;
- for (auto ptr : d->streams) {
+ QXmppCallStream *stream = nullptr;
+ for (auto ptr : std::as_const(d->streams)) {
if (ptr->d->connection == conn) {
stream = ptr;
break;
diff --git a/src/client/QXmppCallManager.cpp b/src/client/QXmppCallManager.cpp
index 756b4209..bd008ced 100644
--- a/src/client/QXmppCallManager.cpp
+++ b/src/client/QXmppCallManager.cpp
@@ -83,12 +83,13 @@ QXmppCallManager::~QXmppCallManager()
/// \cond
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_rtp_video
- << ns_jingle_ice_udp; // XEP-0176 : Jingle ICE-UDP Transport Method
+ return {
+ ns_jingle, // XEP-0166 : Jingle
+ ns_jingle_rtp, // XEP-0167 : Jingle RTP Sessions
+ ns_jingle_rtp_audio,
+ ns_jingle_rtp_video,
+ ns_jingle_ice_udp, // XEP-0176 : Jingle ICE-UDP Transport Method
+ };
}
bool QXmppCallManager::handleStanza(const QDomElement &element)
@@ -108,7 +109,6 @@ bool QXmppCallManager::handleStanza(const QDomElement &element)
void QXmppCallManager::setClient(QXmppClient *client)
{
-
QXmppClientExtension::setClient(client);
connect(client, &QXmppClient::disconnected,
@@ -129,7 +129,6 @@ void QXmppCallManager::setClient(QXmppClient *client)
///
QXmppCall *QXmppCallManager::call(const QString &jid)
{
-
if (jid.isEmpty()) {
warning("Refusing to call an empty jid");
return nullptr;
@@ -183,7 +182,7 @@ void QXmppCallManager::setStunServers(const QList<QPair<QHostAddress, quint16>>
void QXmppCallManager::setStunServer(const QHostAddress &host, quint16 port)
{
d->stunServers.clear();
- d->stunServers.push_back(QPair<QHostAddress, quint16>(host, port));
+ d->stunServers.push_back(QPair(host, port));
}
///
@@ -231,8 +230,9 @@ void QXmppCallManager::_q_callDestroyed(QObject *object)
///
void QXmppCallManager::_q_disconnected()
{
- for (auto *call : d->calls)
+ for (auto *call : std::as_const(d->calls)) {
call->d->terminate(QXmppJingleIq::Reason::Gone);
+ }
}
///
@@ -244,8 +244,9 @@ void QXmppCallManager::_q_iqReceived(const QXmppIq &ack)
return;
// find request
- for (auto *call : d->calls)
+ for (auto *call : std::as_const(d->calls)) {
call->d->handleAck(ack);
+ }
}
///
@@ -262,8 +263,9 @@ void QXmppCallManager::_q_jingleIqReceived(const QXmppJingleIq &iq)
QXmppCall *call = new QXmppCall(iq.from(), QXmppCall::IncomingDirection, this);
call->d->sid = iq.sid();
- const QXmppJingleIq::Content content = iq.contents().isEmpty() ? QXmppJingleIq::Content() : iq.contents().first();
- QXmppCallStream *stream = call->d->createStream(content.descriptionMedia(), content.creator(), content.name());
+ const auto content = iq.contents().isEmpty() ? QXmppJingleIq::Content()
+ : iq.contents().constFirst();
+ auto *stream = call->d->createStream(content.descriptionMedia(), content.creator(), content.name());
if (!stream)
return;
call->d->streams << stream;
@@ -320,7 +322,7 @@ void QXmppCallManager::_q_presenceReceived(const QXmppPresence &presence)
if (presence.type() != QXmppPresence::Unavailable)
return;
- for (auto *call : d->calls) {
+ for (auto *call : std::as_const(d->calls)) {
if (presence.from() == call->jid()) {
// the remote party has gone away, terminate call
call->d->terminate(QXmppJingleIq::Reason::Gone);
diff --git a/src/client/QXmppCallStream.cpp b/src/client/QXmppCallStream.cpp
index f96188d5..b222286e 100644
--- a/src/client/QXmppCallStream.cpp
+++ b/src/client/QXmppCallStream.cpp
@@ -32,7 +32,6 @@
#endif
#include <cstring>
-
#include <gst/gst.h>
/// \cond
@@ -223,7 +222,7 @@ void QXmppCallStreamPrivate::addEncoder(QXmppCallPrivate::GstCodec &codec)
qFatal("Failed to create encoder");
return;
}
- for (auto &encProp : codec.encProps) {
+ for (auto &encProp : std::as_const(codec.encProps)) {
g_object_set(encoder, encProp.name.toLatin1().data(), encProp.value, nullptr);
}
diff --git a/src/client/QXmppCall_p.h b/src/client/QXmppCall_p.h
index b3bb2bd4..49e9f38b 100644
--- a/src/client/QXmppCall_p.h
+++ b/src/client/QXmppCall_p.h
@@ -52,7 +52,7 @@ public:
int pt;
QString name;
int channels;
- int clockrate;
+ uint clockrate;
QString gstPay;
QString gstDepay;
QString gstEnc;
@@ -107,7 +107,7 @@ public:
// Supported codecs
QList<GstCodec> videoCodecs = {
- { .pt = 100, .name = "H264", .channels = 1, .clockrate = 90000, .gstPay = "rtph264pay", .gstDepay = "rtph264depay", .gstEnc = "x264enc", .gstDec = "avdec_h264", .encProps = { { "tune", 4 }, { "speed-preset", 3 }, {"byte-stream", true}, { "bitrate", 512 } } },
+ { .pt = 100, .name = "H264", .channels = 1, .clockrate = 90000, .gstPay = "rtph264pay", .gstDepay = "rtph264depay", .gstEnc = "x264enc", .gstDec = "avdec_h264", .encProps = { { "tune", 4 }, { "speed-preset", 3 }, { "byte-stream", true }, { "bitrate", 512 } } },
{ .pt = 99, .name = "VP8", .channels = 1, .clockrate = 90000, .gstPay = "rtpvp8pay", .gstDepay = "rtpvp8depay", .gstEnc = "vp8enc", .gstDec = "vp8dec", .encProps = { { "deadline", 20000 }, { "target-bitrate", 512000 } } },
// vp9enc and x265enc seem to be very slow. Give them a lower priority for now.
{ .pt = 102, .name = "H265", .channels = 1, .clockrate = 90000, .gstPay = "rtph265pay", .gstDepay = "rtph265depay", .gstEnc = "x265enc", .gstDec = "avdec_h265", .encProps = { { "tune", 4 }, { "speed-preset", 3 }, { "bitrate", 512 } } },