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