diff options
| author | Jeremy Lainé <jeremy.laine@m4x.org> | 2015-08-26 11:22:55 +0200 |
|---|---|---|
| committer | Jeremy Lainé <jeremy.laine@m4x.org> | 2015-08-26 11:27:31 +0200 |
| commit | 459829c2d30e64b18ab4ed3b9c82e7b5f9ccd7ac (patch) | |
| tree | 75153c55cec916b6f0e345420937d5fe31dc3c60 /src/base/QXmppRtcpPacket.cpp | |
| parent | b817f5f29ab27ad3920c06e8808225cf4c17e022 (diff) | |
| download | qxmpp-459829c2d30e64b18ab4ed3b9c82e7b5f9ccd7ac.tar.gz | |
RTCP: parse more receiver report info
Diffstat (limited to 'src/base/QXmppRtcpPacket.cpp')
| -rw-r--r-- | src/base/QXmppRtcpPacket.cpp | 80 |
1 files changed, 51 insertions, 29 deletions
diff --git a/src/base/QXmppRtcpPacket.cpp b/src/base/QXmppRtcpPacket.cpp index 7baf25c4..f2befdaf 100644 --- a/src/base/QXmppRtcpPacket.cpp +++ b/src/base/QXmppRtcpPacket.cpp @@ -47,7 +47,7 @@ public: // Sender SSRC (for receiver / sender reports only). quint32 ssrc; - QXmppRtcpSenderReport senderReport; + QXmppRtcpSenderInfo senderInfo; QList<QXmppRtcpReceiverReport> receiverReports; QList<QXmppRtcpSourceDescription> sourceDescriptions; }; @@ -60,13 +60,18 @@ public: void write(QDataStream &stream) const; quint32 ssrc; - QByteArray blob; + quint8 fractionLost; + quint32 cumulativeLost; + quint32 highestSequence; + quint32 jitter; + quint32 srStamp; + quint32 srDelay; }; -class QXmppRtcpSenderReportPrivate : public QSharedData +class QXmppRtcpSenderInfoPrivate : public QSharedData { public: - QXmppRtcpSenderReportPrivate(); + QXmppRtcpSenderInfoPrivate(); bool read(QDataStream &stream); void write(QDataStream &stream) const; @@ -154,12 +159,12 @@ bool QXmppRtcpPacket::read(QDataStream &stream) QDataStream s(d->payload); d->receiverReports.clear(); - d->senderReport = QXmppRtcpSenderReport(); + d->senderInfo = QXmppRtcpSenderInfo(); d->sourceDescriptions.clear(); d->ssrc = 0; if (d->type == ReceiverReport || d->type == SenderReport) { s >> d->ssrc; - if (d->type == SenderReport && !d->senderReport.d->read(s)) + if (d->type == SenderReport && !d->senderInfo.d->read(s)) return false; for (int i = 0; i < d->count; ++i) { QXmppRtcpReceiverReport receiverReport; @@ -188,7 +193,7 @@ void QXmppRtcpPacket::write(QDataStream &stream) const count = d->receiverReports.size(); s << d->ssrc; if (d->type == SenderReport) - d->senderReport.d->write(s); + d->senderInfo.d->write(s); foreach (const QXmppRtcpReceiverReport &report, d->receiverReports) report.d->write(s); } else if (d->type == SourceDescription) { @@ -216,14 +221,14 @@ void QXmppRtcpPacket::setReceiverReports(const QList<QXmppRtcpReceiverReport> &r d->receiverReports = reports; } -QXmppRtcpSenderReport QXmppRtcpPacket::senderReport() const +QXmppRtcpSenderInfo QXmppRtcpPacket::senderInfo() const { - return d->senderReport; + return d->senderInfo; } -void QXmppRtcpPacket::setSenderReport(const QXmppRtcpSenderReport &report) +void QXmppRtcpPacket::setSenderInfo(const QXmppRtcpSenderInfo &senderInfo) { - d->senderReport = report; + d->senderInfo = senderInfo; } QList<QXmppRtcpSourceDescription> QXmppRtcpPacket::sourceDescriptions() const @@ -309,26 +314,43 @@ void QXmppRtcpReceiverReport::setSsrc(quint32 ssrc) QXmppRtcpReceiverReportPrivate::QXmppRtcpReceiverReportPrivate() : ssrc(0) + , fractionLost(0) + , cumulativeLost(0) + , highestSequence(0) + , jitter(0) + , srStamp(0) + , srDelay(0) { - blob.resize(20); } bool QXmppRtcpReceiverReportPrivate::read(QDataStream &stream) { + quint32 tmp; stream >> ssrc; - return stream.readRawData(blob.data(), blob.size()) == blob.size(); + stream >> tmp; + fractionLost = (tmp >> 24) & 0xff; + cumulativeLost = tmp & 0xffffff; + stream >> highestSequence; + stream >> jitter; + stream >> srStamp; + stream >> srDelay; + return stream.status() == QDataStream::Ok; } void QXmppRtcpReceiverReportPrivate::write(QDataStream &stream) const { stream << ssrc; - stream.writeRawData(blob.constData(), blob.size()); + stream << quint32((fractionLost << 24) | cumulativeLost); + stream << highestSequence; + stream << jitter; + stream << srStamp; + stream << srDelay; } /// Constructs an empty sender report. -QXmppRtcpSenderReport::QXmppRtcpSenderReport() - : d(new QXmppRtcpSenderReportPrivate()) +QXmppRtcpSenderInfo::QXmppRtcpSenderInfo() + : d(new QXmppRtcpSenderInfoPrivate()) { } @@ -336,56 +358,56 @@ QXmppRtcpSenderReport::QXmppRtcpSenderReport() /// /// \param other -QXmppRtcpSenderReport::QXmppRtcpSenderReport(const QXmppRtcpSenderReport &other) +QXmppRtcpSenderInfo::QXmppRtcpSenderInfo(const QXmppRtcpSenderInfo &other) : d(other.d) { } -QXmppRtcpSenderReport::~QXmppRtcpSenderReport() +QXmppRtcpSenderInfo::~QXmppRtcpSenderInfo() { } -quint64 QXmppRtcpSenderReport::ntpStamp() const +quint64 QXmppRtcpSenderInfo::ntpStamp() const { return d->ntpStamp; } -void QXmppRtcpSenderReport::setNtpStamp(quint64 ntpStamp) +void QXmppRtcpSenderInfo::setNtpStamp(quint64 ntpStamp) { d->ntpStamp = ntpStamp; } -quint32 QXmppRtcpSenderReport::rtpStamp() const +quint32 QXmppRtcpSenderInfo::rtpStamp() const { return d->rtpStamp; } -void QXmppRtcpSenderReport::setRtpStamp(quint32 rtpStamp) +void QXmppRtcpSenderInfo::setRtpStamp(quint32 rtpStamp) { d->rtpStamp = rtpStamp; } -quint32 QXmppRtcpSenderReport::octetCount() const +quint32 QXmppRtcpSenderInfo::octetCount() const { return d->octetCount; } -void QXmppRtcpSenderReport::setOctetCount(quint32 count) +void QXmppRtcpSenderInfo::setOctetCount(quint32 count) { d->octetCount = count; } -quint32 QXmppRtcpSenderReport::packetCount() const +quint32 QXmppRtcpSenderInfo::packetCount() const { return d->packetCount; } -void QXmppRtcpSenderReport::setPacketCount(quint32 count) +void QXmppRtcpSenderInfo::setPacketCount(quint32 count) { d->packetCount = count; } -QXmppRtcpSenderReportPrivate::QXmppRtcpSenderReportPrivate() +QXmppRtcpSenderInfoPrivate::QXmppRtcpSenderInfoPrivate() : ntpStamp(0) , rtpStamp(0) , packetCount(0) @@ -393,7 +415,7 @@ QXmppRtcpSenderReportPrivate::QXmppRtcpSenderReportPrivate() { } -bool QXmppRtcpSenderReportPrivate::read(QDataStream &stream) +bool QXmppRtcpSenderInfoPrivate::read(QDataStream &stream) { stream >> ntpStamp; stream >> rtpStamp; @@ -402,7 +424,7 @@ bool QXmppRtcpSenderReportPrivate::read(QDataStream &stream) return stream.status() == QDataStream::Ok; } -void QXmppRtcpSenderReportPrivate::write(QDataStream &stream) const +void QXmppRtcpSenderInfoPrivate::write(QDataStream &stream) const { stream << ntpStamp; stream << rtpStamp; |
