OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2014 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2014 The WebRTC project authors. All Rights Reserved. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license | 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 | 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 | 6 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 9 */ |
10 | 10 |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
62 | 62 |
63 class RtpFileReaderImpl : public RtpFileReader { | 63 class RtpFileReaderImpl : public RtpFileReader { |
64 public: | 64 public: |
65 virtual bool Init(const std::string& filename, | 65 virtual bool Init(const std::string& filename, |
66 const std::set<uint32_t>& ssrc_filter) = 0; | 66 const std::set<uint32_t>& ssrc_filter) = 0; |
67 }; | 67 }; |
68 | 68 |
69 class InterleavedRtpFileReader : public RtpFileReaderImpl { | 69 class InterleavedRtpFileReader : public RtpFileReaderImpl { |
70 public: | 70 public: |
71 virtual ~InterleavedRtpFileReader() { | 71 virtual ~InterleavedRtpFileReader() { |
72 if (file_ != NULL) { | 72 if (file_ != nullptr) { |
73 fclose(file_); | 73 fclose(file_); |
74 file_ = NULL; | 74 file_ = nullptr; |
75 } | 75 } |
76 } | 76 } |
77 | 77 |
78 virtual bool Init(const std::string& filename, | 78 virtual bool Init(const std::string& filename, |
79 const std::set<uint32_t>& ssrc_filter) { | 79 const std::set<uint32_t>& ssrc_filter) { |
80 file_ = fopen(filename.c_str(), "rb"); | 80 file_ = fopen(filename.c_str(), "rb"); |
81 if (file_ == NULL) { | 81 if (file_ == nullptr) { |
82 printf("ERROR: Can't open file: %s\n", filename.c_str()); | 82 printf("ERROR: Can't open file: %s\n", filename.c_str()); |
83 return false; | 83 return false; |
84 } | 84 } |
85 return true; | 85 return true; |
86 } | 86 } |
87 virtual bool NextPacket(RtpPacket* packet) { | 87 virtual bool NextPacket(RtpPacket* packet) { |
88 assert(file_ != NULL); | 88 assert(file_ != nullptr); |
89 packet->length = RtpPacket::kMaxPacketBufferSize; | 89 packet->length = RtpPacket::kMaxPacketBufferSize; |
90 uint32_t len = 0; | 90 uint32_t len = 0; |
91 TRY(ReadUint32(&len, file_)); | 91 TRY(ReadUint32(&len, file_)); |
92 if (packet->length < len) { | 92 if (packet->length < len) { |
93 FATAL() << "Packet is too large to fit: " << len << " bytes vs " | 93 FATAL() << "Packet is too large to fit: " << len << " bytes vs " |
94 << packet->length | 94 << packet->length |
95 << " bytes allocated. Consider increasing the buffer " | 95 << " bytes allocated. Consider increasing the buffer " |
96 "size"; | 96 "size"; |
97 } | 97 } |
98 if (fread(packet->data, 1, len, file_) != len) | 98 if (fread(packet->data, 1, len, file_) != len) |
99 return false; | 99 return false; |
100 | 100 |
101 packet->length = len; | 101 packet->length = len; |
102 packet->original_length = len; | 102 packet->original_length = len; |
103 packet->time_ms = time_ms_; | 103 packet->time_ms = time_ms_; |
104 time_ms_ += 5; | 104 time_ms_ += 5; |
105 return true; | 105 return true; |
106 } | 106 } |
107 | 107 |
108 private: | 108 private: |
109 FILE* file_ = NULL; | 109 FILE* file_ = nullptr; |
110 int64_t time_ms_ = 0; | 110 int64_t time_ms_ = 0; |
111 }; | 111 }; |
112 | 112 |
113 // Read RTP packets from file in rtpdump format, as documented at: | 113 // Read RTP packets from file in rtpdump format, as documented at: |
114 // http://www.cs.columbia.edu/irt/software/rtptools/ | 114 // http://www.cs.columbia.edu/irt/software/rtptools/ |
115 class RtpDumpReader : public RtpFileReaderImpl { | 115 class RtpDumpReader : public RtpFileReaderImpl { |
116 public: | 116 public: |
117 RtpDumpReader() : file_(NULL) {} | 117 RtpDumpReader() : file_(nullptr) {} |
118 virtual ~RtpDumpReader() { | 118 virtual ~RtpDumpReader() { |
119 if (file_ != NULL) { | 119 if (file_ != nullptr) { |
120 fclose(file_); | 120 fclose(file_); |
121 file_ = NULL; | 121 file_ = nullptr; |
122 } | 122 } |
123 } | 123 } |
124 | 124 |
125 bool Init(const std::string& filename, | 125 bool Init(const std::string& filename, |
126 const std::set<uint32_t>& ssrc_filter) override { | 126 const std::set<uint32_t>& ssrc_filter) override { |
127 file_ = fopen(filename.c_str(), "rb"); | 127 file_ = fopen(filename.c_str(), "rb"); |
128 if (file_ == NULL) { | 128 if (file_ == nullptr) { |
129 printf("ERROR: Can't open file: %s\n", filename.c_str()); | 129 printf("ERROR: Can't open file: %s\n", filename.c_str()); |
130 return false; | 130 return false; |
131 } | 131 } |
132 | 132 |
133 char firstline[kFirstLineLength + 1] = {0}; | 133 char firstline[kFirstLineLength + 1] = {0}; |
134 if (fgets(firstline, kFirstLineLength, file_) == NULL) { | 134 if (fgets(firstline, kFirstLineLength, file_) == nullptr) { |
135 LOG(LS_INFO) << "Can't read from file"; | 135 LOG(LS_INFO) << "Can't read from file"; |
136 return false; | 136 return false; |
137 } | 137 } |
138 if (strncmp(firstline, "#!rtpplay", 9) == 0) { | 138 if (strncmp(firstline, "#!rtpplay", 9) == 0) { |
139 if (strncmp(firstline, "#!rtpplay1.0", 12) != 0) { | 139 if (strncmp(firstline, "#!rtpplay1.0", 12) != 0) { |
140 LOG(LS_INFO) << "Wrong rtpplay version, must be 1.0"; | 140 LOG(LS_INFO) << "Wrong rtpplay version, must be 1.0"; |
141 return false; | 141 return false; |
142 } | 142 } |
143 } else if (strncmp(firstline, "#!RTPencode", 11) == 0) { | 143 } else if (strncmp(firstline, "#!RTPencode", 11) == 0) { |
144 if (strncmp(firstline, "#!RTPencode1.0", 14) != 0) { | 144 if (strncmp(firstline, "#!RTPencode1.0", 14) != 0) { |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
234 } else if (r == kResultSkip) { \ | 234 } else if (r == kResultSkip) { \ |
235 return kResultSkip; \ | 235 return kResultSkip; \ |
236 } \ | 236 } \ |
237 } while (0) | 237 } while (0) |
238 | 238 |
239 // Read RTP packets from file in tcpdump/libpcap format, as documented at: | 239 // Read RTP packets from file in tcpdump/libpcap format, as documented at: |
240 // http://wiki.wireshark.org/Development/LibpcapFileFormat | 240 // http://wiki.wireshark.org/Development/LibpcapFileFormat |
241 class PcapReader : public RtpFileReaderImpl { | 241 class PcapReader : public RtpFileReaderImpl { |
242 public: | 242 public: |
243 PcapReader() | 243 PcapReader() |
244 : file_(NULL), | 244 : file_(nullptr), |
245 swap_pcap_byte_order_(false), | 245 swap_pcap_byte_order_(false), |
246 #ifdef WEBRTC_ARCH_BIG_ENDIAN | 246 #ifdef WEBRTC_ARCH_BIG_ENDIAN |
247 swap_network_byte_order_(false), | 247 swap_network_byte_order_(false), |
248 #else | 248 #else |
249 swap_network_byte_order_(true), | 249 swap_network_byte_order_(true), |
250 #endif | 250 #endif |
251 read_buffer_(), | 251 read_buffer_(), |
252 packets_by_ssrc_(), | 252 packets_by_ssrc_(), |
253 packets_(), | 253 packets_(), |
254 next_packet_it_() { | 254 next_packet_it_() { |
255 } | 255 } |
256 | 256 |
257 virtual ~PcapReader() { | 257 virtual ~PcapReader() { |
258 if (file_ != NULL) { | 258 if (file_ != nullptr) { |
259 fclose(file_); | 259 fclose(file_); |
260 file_ = NULL; | 260 file_ = nullptr; |
261 } | 261 } |
262 } | 262 } |
263 | 263 |
264 bool Init(const std::string& filename, | 264 bool Init(const std::string& filename, |
265 const std::set<uint32_t>& ssrc_filter) override { | 265 const std::set<uint32_t>& ssrc_filter) override { |
266 return Initialize(filename, ssrc_filter) == kResultSuccess; | 266 return Initialize(filename, ssrc_filter) == kResultSuccess; |
267 } | 267 } |
268 | 268 |
269 int Initialize(const std::string& filename, | 269 int Initialize(const std::string& filename, |
270 const std::set<uint32_t>& ssrc_filter) { | 270 const std::set<uint32_t>& ssrc_filter) { |
271 file_ = fopen(filename.c_str(), "rb"); | 271 file_ = fopen(filename.c_str(), "rb"); |
272 if (file_ == NULL) { | 272 if (file_ == nullptr) { |
273 printf("ERROR: Can't open file: %s\n", filename.c_str()); | 273 printf("ERROR: Can't open file: %s\n", filename.c_str()); |
274 return kResultFail; | 274 return kResultFail; |
275 } | 275 } |
276 | 276 |
277 if (ReadGlobalHeader() < 0) { | 277 if (ReadGlobalHeader() < 0) { |
278 return kResultFail; | 278 return kResultFail; |
279 } | 279 } |
280 | 280 |
281 int total_packet_count = 0; | 281 int total_packet_count = 0; |
282 uint32_t stream_start_ms = 0; | 282 uint32_t stream_start_ms = 0; |
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
401 | 401 |
402 int32_t this_zone; // GMT to local correction. | 402 int32_t this_zone; // GMT to local correction. |
403 uint32_t sigfigs; // Accuracy of timestamps. | 403 uint32_t sigfigs; // Accuracy of timestamps. |
404 uint32_t snaplen; // Max length of captured packets, in octets. | 404 uint32_t snaplen; // Max length of captured packets, in octets. |
405 uint32_t network; // Data link type. | 405 uint32_t network; // Data link type. |
406 TRY_PCAP(Read(&this_zone, false)); | 406 TRY_PCAP(Read(&this_zone, false)); |
407 TRY_PCAP(Read(&sigfigs, false)); | 407 TRY_PCAP(Read(&sigfigs, false)); |
408 TRY_PCAP(Read(&snaplen, false)); | 408 TRY_PCAP(Read(&snaplen, false)); |
409 TRY_PCAP(Read(&network, false)); | 409 TRY_PCAP(Read(&network, false)); |
410 | 410 |
411 // Accept only LINKTYPE_NULL and LINKTYPE_ETHERNET. | 411 // Accept only LINKTYPE_null and LINKTYPE_ETHERNET. |
412 // See: http://www.tcpdump.org/linktypes.html | 412 // See: http://www.tcpdump.org/linktypes.html |
413 if (network != kLinktypeNull && network != kLinktypeEthernet) { | 413 if (network != kLinktypeNull && network != kLinktypeEthernet) { |
414 return kResultFail; | 414 return kResultFail; |
415 } | 415 } |
416 | 416 |
417 return kResultSuccess; | 417 return kResultSuccess; |
418 } | 418 } |
419 | 419 |
420 int ReadPacket(int32_t* next_packet_pos, | 420 int ReadPacket(int32_t* next_packet_pos, |
421 uint32_t stream_start_ms, | 421 uint32_t stream_start_ms, |
(...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
632 SsrcMap packets_by_ssrc_; | 632 SsrcMap packets_by_ssrc_; |
633 std::vector<RtpPacketMarker> packets_; | 633 std::vector<RtpPacketMarker> packets_; |
634 PacketIterator next_packet_it_; | 634 PacketIterator next_packet_it_; |
635 | 635 |
636 RTC_DISALLOW_COPY_AND_ASSIGN(PcapReader); | 636 RTC_DISALLOW_COPY_AND_ASSIGN(PcapReader); |
637 }; | 637 }; |
638 | 638 |
639 RtpFileReader* RtpFileReader::Create(FileFormat format, | 639 RtpFileReader* RtpFileReader::Create(FileFormat format, |
640 const std::string& filename, | 640 const std::string& filename, |
641 const std::set<uint32_t>& ssrc_filter) { | 641 const std::set<uint32_t>& ssrc_filter) { |
642 RtpFileReaderImpl* reader = NULL; | 642 RtpFileReaderImpl* reader = nullptr; |
643 switch (format) { | 643 switch (format) { |
644 case kPcap: | 644 case kPcap: |
645 reader = new PcapReader(); | 645 reader = new PcapReader(); |
646 break; | 646 break; |
647 case kRtpDump: | 647 case kRtpDump: |
648 reader = new RtpDumpReader(); | 648 reader = new RtpDumpReader(); |
649 break; | 649 break; |
650 case kLengthPacketInterleaved: | 650 case kLengthPacketInterleaved: |
651 reader = new InterleavedRtpFileReader(); | 651 reader = new InterleavedRtpFileReader(); |
652 break; | 652 break; |
653 } | 653 } |
654 if (!reader->Init(filename, ssrc_filter)) { | 654 if (!reader->Init(filename, ssrc_filter)) { |
655 delete reader; | 655 delete reader; |
656 return NULL; | 656 return nullptr; |
657 } | 657 } |
658 return reader; | 658 return reader; |
659 } | 659 } |
660 | 660 |
661 RtpFileReader* RtpFileReader::Create(FileFormat format, | 661 RtpFileReader* RtpFileReader::Create(FileFormat format, |
662 const std::string& filename) { | 662 const std::string& filename) { |
663 return RtpFileReader::Create(format, filename, std::set<uint32_t>()); | 663 return RtpFileReader::Create(format, filename, std::set<uint32_t>()); |
664 } | 664 } |
665 | 665 |
666 } // namespace test | 666 } // namespace test |
667 } // namespace webrtc | 667 } // namespace webrtc |
OLD | NEW |