test_api.h revision a1783598a78b2cd583408d97372fb4c0ba0fde91
18281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org/* 28281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. 38281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org * 48281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org * Use of this source code is governed by a BSD-style license 58281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org * that can be found in the LICENSE file in the root of the source 68281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org * tree. An additional intellectual property rights grant can be found 78281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org * in the file PATENTS. All contributing project authors may 88281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org * be found in the AUTHORS file in the root of the source tree. 98281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org */ 108281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org 118281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org#include "common_types.h" 128281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org#include "rtp_rtcp.h" 138281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org#include "rtp_rtcp_defines.h" 148281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org 15a1783598a78b2cd583408d97372fb4c0ba0fde91pwestin@webrtc.orgnamespace webrtc { 168281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org 178281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.orgclass FakeRtpRtcpClock : public RtpRtcpClock { 188281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org public: 198281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org FakeRtpRtcpClock() { 208281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org time_in_ms_ = 123456; 218281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org } 228281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org // Return a timestamp in milliseconds relative to some arbitrary 238281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org // source; the source is fixed for this clock. 248281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org virtual WebRtc_UWord32 GetTimeInMS() { 258281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org return time_in_ms_; 268281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org } 278281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org // Retrieve an NTP absolute timestamp. 288281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org virtual void CurrentNTP(WebRtc_UWord32& secs, WebRtc_UWord32& frac) { 298281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org secs = time_in_ms_ / 1000; 308281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org frac = (time_in_ms_ % 1000) * 4294967; 318281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org } 328281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org void IncrementTime(WebRtc_UWord32 time_increment_ms) { 338281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org time_in_ms_ += time_increment_ms; 348281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org } 358281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org private: 368281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org WebRtc_UWord32 time_in_ms_; 378281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org}; 388281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org 398281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org// This class sends all its packet straight to the provided RtpRtcp module. 408281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org// with optional packet loss. 418281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.orgclass LoopBackTransport : public webrtc::Transport { 428281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org public: 438281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org LoopBackTransport(RtpRtcp* rtpRtcpModule) 448281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org : _count(0), 458281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org _packetLoss(0), 468281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org _rtpRtcpModule(rtpRtcpModule) { 478281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org } 488281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org void DropEveryNthPacket(int n) { 498281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org _packetLoss = n; 508281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org } 518281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org virtual int SendPacket(int channel, const void *data, int len) { 528281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org _count++; 538281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org if (_packetLoss > 0) { 548281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org if ((_count % _packetLoss) == 0) { 558281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org return len; 568281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org } 578281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org } 588281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org if (_rtpRtcpModule->IncomingPacket((const WebRtc_UWord8*)data, len) == 0) { 598281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org return len; 608281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org } 618281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org return -1; 628281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org } 638281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org virtual int SendRTCPPacket(int channel, const void *data, int len) { 648281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org if (_rtpRtcpModule->IncomingPacket((const WebRtc_UWord8*)data, len) == 0) { 658281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org return len; 668281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org } 678281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org return -1; 688281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org } 698281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org private: 708281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org int _count; 718281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org int _packetLoss; 728281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org RtpRtcp* _rtpRtcpModule; 738281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org}; 748281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org 758281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.orgclass RtpReceiver : public RtpData { 768281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org public: 778281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org virtual WebRtc_Word32 OnReceivedPayloadData( 788281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org const WebRtc_UWord8* payloadData, 798281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org const WebRtc_UWord16 payloadSize, 808281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org const webrtc::WebRtcRTPHeader* rtpHeader) { 818281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org return 0; 828281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org } 838281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org}; 848281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org 85a1783598a78b2cd583408d97372fb4c0ba0fde91pwestin@webrtc.org} // namespace webrtc 86a1783598a78b2cd583408d97372fb4c0ba0fde91pwestin@webrtc.org 87