asapersson@webrtc.org | 0f2809a | 2014-02-21 08:14:45 +0000 | [diff] [blame] | 1 | /* |
| 2 | * Copyright (c) 2014 The WebRTC project authors. All Rights Reserved. |
| 3 | * |
| 4 | * Use of this source code is governed by a BSD-style license |
| 5 | * that can be found in the LICENSE file in the root of the source |
| 6 | * tree. An additional intellectual property rights grant can be found |
| 7 | * in the file PATENTS. All contributing project authors may |
| 8 | * be found in the AUTHORS file in the root of the source tree. |
| 9 | */ |
| 10 | |
| 11 | #include "webrtc/test/rtcp_packet_parser.h" |
| 12 | |
asapersson@webrtc.org | 37c0559 | 2015-01-28 13:58:27 +0000 | [diff] [blame] | 13 | #include "testing/gtest/include/gtest/gtest.h" |
| 14 | |
asapersson@webrtc.org | 0f2809a | 2014-02-21 08:14:45 +0000 | [diff] [blame] | 15 | namespace webrtc { |
| 16 | namespace test { |
| 17 | |
Erik Språng | 242e22b | 2015-05-11 10:17:43 +0200 | [diff] [blame] | 18 | using namespace RTCPUtility; |
| 19 | |
asapersson@webrtc.org | 0f2809a | 2014-02-21 08:14:45 +0000 | [diff] [blame] | 20 | RtcpPacketParser::RtcpPacketParser() {} |
| 21 | |
| 22 | RtcpPacketParser::~RtcpPacketParser() {} |
| 23 | |
pkasting@chromium.org | 4591fbd | 2014-11-20 22:28:14 +0000 | [diff] [blame] | 24 | void RtcpPacketParser::Parse(const void *data, size_t len) { |
asapersson@webrtc.org | 0f2809a | 2014-02-21 08:14:45 +0000 | [diff] [blame] | 25 | const uint8_t* packet = static_cast<const uint8_t*>(data); |
| 26 | RTCPUtility::RTCPParserV2 parser(packet, len, true); |
asapersson@webrtc.org | 37c0559 | 2015-01-28 13:58:27 +0000 | [diff] [blame] | 27 | EXPECT_TRUE(parser.IsValid()); |
asapersson@webrtc.org | 0f2809a | 2014-02-21 08:14:45 +0000 | [diff] [blame] | 28 | for (RTCPUtility::RTCPPacketTypes type = parser.Begin(); |
Erik Språng | 242e22b | 2015-05-11 10:17:43 +0200 | [diff] [blame] | 29 | type != RTCPPacketTypes::kInvalid; type = parser.Iterate()) { |
asapersson@webrtc.org | a826006 | 2014-05-20 09:53:51 +0000 | [diff] [blame] | 30 | switch (type) { |
Erik Språng | 242e22b | 2015-05-11 10:17:43 +0200 | [diff] [blame] | 31 | case RTCPPacketTypes::kSr: |
asapersson@webrtc.org | a826006 | 2014-05-20 09:53:51 +0000 | [diff] [blame] | 32 | sender_report_.Set(parser.Packet().SR); |
| 33 | break; |
Erik Språng | 242e22b | 2015-05-11 10:17:43 +0200 | [diff] [blame] | 34 | case RTCPPacketTypes::kRr: |
asapersson@webrtc.org | a826006 | 2014-05-20 09:53:51 +0000 | [diff] [blame] | 35 | receiver_report_.Set(parser.Packet().RR); |
| 36 | break; |
Erik Språng | 242e22b | 2015-05-11 10:17:43 +0200 | [diff] [blame] | 37 | case RTCPPacketTypes::kReportBlockItem: |
asapersson@webrtc.org | a826006 | 2014-05-20 09:53:51 +0000 | [diff] [blame] | 38 | report_block_.Set(parser.Packet().ReportBlockItem); |
| 39 | ++report_blocks_per_ssrc_[parser.Packet().ReportBlockItem.SSRC]; |
| 40 | break; |
Erik Språng | 242e22b | 2015-05-11 10:17:43 +0200 | [diff] [blame] | 41 | case RTCPPacketTypes::kSdes: |
asapersson@webrtc.org | 4b12d40 | 2014-06-16 14:09:28 +0000 | [diff] [blame] | 42 | sdes_.Set(); |
| 43 | break; |
Erik Språng | 242e22b | 2015-05-11 10:17:43 +0200 | [diff] [blame] | 44 | case RTCPPacketTypes::kSdesChunk: |
asapersson@webrtc.org | 4b12d40 | 2014-06-16 14:09:28 +0000 | [diff] [blame] | 45 | sdes_chunk_.Set(parser.Packet().CName); |
| 46 | break; |
Erik Språng | 242e22b | 2015-05-11 10:17:43 +0200 | [diff] [blame] | 47 | case RTCPPacketTypes::kBye: |
asapersson@webrtc.org | 4b12d40 | 2014-06-16 14:09:28 +0000 | [diff] [blame] | 48 | bye_.Set(parser.Packet().BYE); |
| 49 | break; |
Erik Språng | 242e22b | 2015-05-11 10:17:43 +0200 | [diff] [blame] | 50 | case RTCPPacketTypes::kApp: |
asapersson@webrtc.org | 4b12d40 | 2014-06-16 14:09:28 +0000 | [diff] [blame] | 51 | app_.Set(parser.Packet().APP); |
| 52 | break; |
Erik Språng | 242e22b | 2015-05-11 10:17:43 +0200 | [diff] [blame] | 53 | case RTCPPacketTypes::kAppItem: |
asapersson@webrtc.org | 4b12d40 | 2014-06-16 14:09:28 +0000 | [diff] [blame] | 54 | app_item_.Set(parser.Packet().APP); |
| 55 | break; |
Erik Språng | 242e22b | 2015-05-11 10:17:43 +0200 | [diff] [blame] | 56 | case RTCPPacketTypes::kExtendedIj: |
asapersson@webrtc.org | 4b12d40 | 2014-06-16 14:09:28 +0000 | [diff] [blame] | 57 | ij_.Set(); |
| 58 | break; |
Erik Språng | 242e22b | 2015-05-11 10:17:43 +0200 | [diff] [blame] | 59 | case RTCPPacketTypes::kExtendedIjItem: |
asapersson@webrtc.org | 4b12d40 | 2014-06-16 14:09:28 +0000 | [diff] [blame] | 60 | ij_item_.Set(parser.Packet().ExtendedJitterReportItem); |
| 61 | break; |
Erik Språng | 242e22b | 2015-05-11 10:17:43 +0200 | [diff] [blame] | 62 | case RTCPPacketTypes::kPsfbPli: |
asapersson@webrtc.org | 4b12d40 | 2014-06-16 14:09:28 +0000 | [diff] [blame] | 63 | pli_.Set(parser.Packet().PLI); |
| 64 | break; |
Erik Språng | 242e22b | 2015-05-11 10:17:43 +0200 | [diff] [blame] | 65 | case RTCPPacketTypes::kPsfbSli: |
asapersson@webrtc.org | 4b12d40 | 2014-06-16 14:09:28 +0000 | [diff] [blame] | 66 | sli_.Set(parser.Packet().SLI); |
| 67 | break; |
Erik Språng | 242e22b | 2015-05-11 10:17:43 +0200 | [diff] [blame] | 68 | case RTCPPacketTypes::kPsfbSliItem: |
asapersson@webrtc.org | 4b12d40 | 2014-06-16 14:09:28 +0000 | [diff] [blame] | 69 | sli_item_.Set(parser.Packet().SLIItem); |
| 70 | break; |
Erik Språng | 242e22b | 2015-05-11 10:17:43 +0200 | [diff] [blame] | 71 | case RTCPPacketTypes::kPsfbRpsi: |
asapersson@webrtc.org | a826006 | 2014-05-20 09:53:51 +0000 | [diff] [blame] | 72 | rpsi_.Set(parser.Packet().RPSI); |
| 73 | break; |
Erik Språng | 242e22b | 2015-05-11 10:17:43 +0200 | [diff] [blame] | 74 | case RTCPPacketTypes::kPsfbFir: |
asapersson@webrtc.org | a826006 | 2014-05-20 09:53:51 +0000 | [diff] [blame] | 75 | fir_.Set(parser.Packet().FIR); |
| 76 | break; |
Erik Språng | 242e22b | 2015-05-11 10:17:43 +0200 | [diff] [blame] | 77 | case RTCPPacketTypes::kPsfbFirItem: |
asapersson@webrtc.org | a826006 | 2014-05-20 09:53:51 +0000 | [diff] [blame] | 78 | fir_item_.Set(parser.Packet().FIRItem); |
| 79 | break; |
Erik Språng | 242e22b | 2015-05-11 10:17:43 +0200 | [diff] [blame] | 80 | case RTCPPacketTypes::kRtpfbNack: |
asapersson@webrtc.org | a826006 | 2014-05-20 09:53:51 +0000 | [diff] [blame] | 81 | nack_.Set(parser.Packet().NACK); |
| 82 | nack_item_.Clear(); |
| 83 | break; |
Erik Språng | 242e22b | 2015-05-11 10:17:43 +0200 | [diff] [blame] | 84 | case RTCPPacketTypes::kRtpfbNackItem: |
asapersson@webrtc.org | a826006 | 2014-05-20 09:53:51 +0000 | [diff] [blame] | 85 | nack_item_.Set(parser.Packet().NACKItem); |
| 86 | break; |
Erik Språng | 242e22b | 2015-05-11 10:17:43 +0200 | [diff] [blame] | 87 | case RTCPPacketTypes::kPsfbApp: |
asapersson@webrtc.org | 3b84b3a | 2014-06-25 12:22:17 +0000 | [diff] [blame] | 88 | psfb_app_.Set(parser.Packet().PSFBAPP); |
| 89 | break; |
Erik Språng | 242e22b | 2015-05-11 10:17:43 +0200 | [diff] [blame] | 90 | case RTCPPacketTypes::kPsfbRembItem: |
asapersson@webrtc.org | 3b84b3a | 2014-06-25 12:22:17 +0000 | [diff] [blame] | 91 | remb_item_.Set(parser.Packet().REMBItem); |
| 92 | break; |
Erik Språng | 242e22b | 2015-05-11 10:17:43 +0200 | [diff] [blame] | 93 | case RTCPPacketTypes::kRtpfbTmmbr: |
asapersson@webrtc.org | 3b84b3a | 2014-06-25 12:22:17 +0000 | [diff] [blame] | 94 | tmmbr_.Set(parser.Packet().TMMBR); |
| 95 | break; |
Erik Språng | 242e22b | 2015-05-11 10:17:43 +0200 | [diff] [blame] | 96 | case RTCPPacketTypes::kRtpfbTmmbrItem: |
asapersson@webrtc.org | 3b84b3a | 2014-06-25 12:22:17 +0000 | [diff] [blame] | 97 | tmmbr_item_.Set(parser.Packet().TMMBRItem); |
| 98 | break; |
Erik Språng | 242e22b | 2015-05-11 10:17:43 +0200 | [diff] [blame] | 99 | case RTCPPacketTypes::kRtpfbTmmbn: |
asapersson@webrtc.org | 3b84b3a | 2014-06-25 12:22:17 +0000 | [diff] [blame] | 100 | tmmbn_.Set(parser.Packet().TMMBN); |
| 101 | tmmbn_items_.Clear(); |
| 102 | break; |
Erik Språng | 242e22b | 2015-05-11 10:17:43 +0200 | [diff] [blame] | 103 | case RTCPPacketTypes::kRtpfbTmmbnItem: |
asapersson@webrtc.org | 3b84b3a | 2014-06-25 12:22:17 +0000 | [diff] [blame] | 104 | tmmbn_items_.Set(parser.Packet().TMMBNItem); |
| 105 | break; |
Erik Språng | 242e22b | 2015-05-11 10:17:43 +0200 | [diff] [blame] | 106 | case RTCPPacketTypes::kXrHeader: |
asapersson@webrtc.org | 3b84b3a | 2014-06-25 12:22:17 +0000 | [diff] [blame] | 107 | xr_header_.Set(parser.Packet().XR); |
| 108 | dlrr_items_.Clear(); |
| 109 | break; |
Erik Språng | 242e22b | 2015-05-11 10:17:43 +0200 | [diff] [blame] | 110 | case RTCPPacketTypes::kXrReceiverReferenceTime: |
asapersson@webrtc.org | 3b84b3a | 2014-06-25 12:22:17 +0000 | [diff] [blame] | 111 | rrtr_.Set(parser.Packet().XRReceiverReferenceTimeItem); |
| 112 | break; |
Erik Språng | 242e22b | 2015-05-11 10:17:43 +0200 | [diff] [blame] | 113 | case RTCPPacketTypes::kXrDlrrReportBlock: |
asapersson@webrtc.org | 3b84b3a | 2014-06-25 12:22:17 +0000 | [diff] [blame] | 114 | dlrr_.Set(); |
| 115 | break; |
Erik Språng | 242e22b | 2015-05-11 10:17:43 +0200 | [diff] [blame] | 116 | case RTCPPacketTypes::kXrDlrrReportBlockItem: |
asapersson@webrtc.org | 3b84b3a | 2014-06-25 12:22:17 +0000 | [diff] [blame] | 117 | dlrr_items_.Set(parser.Packet().XRDLRRReportBlockItem); |
| 118 | break; |
Erik Språng | 242e22b | 2015-05-11 10:17:43 +0200 | [diff] [blame] | 119 | case RTCPPacketTypes::kXrVoipMetric: |
asapersson@webrtc.org | 3b84b3a | 2014-06-25 12:22:17 +0000 | [diff] [blame] | 120 | voip_metric_.Set(parser.Packet().XRVOIPMetricItem); |
| 121 | break; |
asapersson@webrtc.org | a826006 | 2014-05-20 09:53:51 +0000 | [diff] [blame] | 122 | default: |
| 123 | break; |
asapersson@webrtc.org | 0f2809a | 2014-02-21 08:14:45 +0000 | [diff] [blame] | 124 | } |
| 125 | } |
| 126 | } |
asapersson@webrtc.org | a826006 | 2014-05-20 09:53:51 +0000 | [diff] [blame] | 127 | |
| 128 | uint64_t Rpsi::PictureId() const { |
| 129 | assert(num_packets_ > 0); |
| 130 | uint16_t num_bytes = rpsi_.NumberOfValidBits / 8; |
| 131 | assert(num_bytes > 0); |
| 132 | uint64_t picture_id = 0; |
| 133 | for (uint16_t i = 0; i < num_bytes - 1; ++i) { |
| 134 | picture_id += (rpsi_.NativeBitString[i] & 0x7f); |
| 135 | picture_id <<= 7; |
| 136 | } |
| 137 | picture_id += (rpsi_.NativeBitString[num_bytes - 1] & 0x7f); |
| 138 | return picture_id; |
| 139 | } |
| 140 | |
asapersson@webrtc.org | 0f2809a | 2014-02-21 08:14:45 +0000 | [diff] [blame] | 141 | } // namespace test |
| 142 | } // namespace webrtc |