Index: webrtc/test/rtp_rtcp_observer.h |
diff --git a/webrtc/test/rtp_rtcp_observer.h b/webrtc/test/rtp_rtcp_observer.h |
index 97aa7b689e914335ffa22d95fd44e7b1cda9a802..50fd86485f3765d52a1a5250dc719ccade28f53f 100644 |
--- a/webrtc/test/rtp_rtcp_observer.h |
+++ b/webrtc/test/rtp_rtcp_observer.h |
@@ -24,159 +24,108 @@ |
namespace webrtc { |
namespace test { |
+class PacketTransport; |
+ |
class RtpRtcpObserver { |
public: |
+ enum Action { |
+ SEND_PACKET, |
+ DROP_PACKET, |
+ }; |
+ |
virtual ~RtpRtcpObserver() {} |
- Transport* SendTransport() { |
- return &send_transport_; |
+ |
+ virtual EventTypeWrapper Wait() { |
+ EventTypeWrapper result = observation_complete_->Wait(timeout_ms_); |
+ return result; |
} |
- Transport* ReceiveTransport() { |
- return &receive_transport_; |
+ virtual Action OnSendRtp(const uint8_t* packet, size_t length) { |
+ return SEND_PACKET; |
} |
- virtual void SetReceivers(PacketReceiver* send_transport_receiver, |
- PacketReceiver* receive_transport_receiver) { |
- send_transport_.SetReceiver(send_transport_receiver); |
- receive_transport_.SetReceiver(receive_transport_receiver); |
+ virtual Action OnSendRtcp(const uint8_t* packet, size_t length) { |
+ return SEND_PACKET; |
} |
- void StopSending() { |
- send_transport_.StopSending(); |
- receive_transport_.StopSending(); |
+ virtual Action OnReceiveRtp(const uint8_t* packet, size_t length) { |
+ return SEND_PACKET; |
} |
- virtual EventTypeWrapper Wait() { |
- EventTypeWrapper result = observation_complete_->Wait(timeout_ms_); |
- return result; |
+ virtual Action OnReceiveRtcp(const uint8_t* packet, size_t length) { |
+ return SEND_PACKET; |
} |
protected: |
- RtpRtcpObserver(unsigned int event_timeout_ms, |
- const FakeNetworkPipe::Config& configuration) |
- : observation_complete_(EventWrapper::Create()), |
- parser_(RtpHeaderParser::Create()), |
- send_transport_(&crit_, |
- this, |
- &RtpRtcpObserver::OnSendRtp, |
- &RtpRtcpObserver::OnSendRtcp, |
- configuration), |
- receive_transport_(&crit_, |
- this, |
- &RtpRtcpObserver::OnReceiveRtp, |
- &RtpRtcpObserver::OnReceiveRtcp, |
- configuration), |
- timeout_ms_(event_timeout_ms) {} |
- |
explicit RtpRtcpObserver(unsigned int event_timeout_ms) |
: observation_complete_(EventWrapper::Create()), |
parser_(RtpHeaderParser::Create()), |
- send_transport_(&crit_, |
- this, |
- &RtpRtcpObserver::OnSendRtp, |
- &RtpRtcpObserver::OnSendRtcp, |
- FakeNetworkPipe::Config()), |
- receive_transport_(&crit_, |
- this, |
- &RtpRtcpObserver::OnReceiveRtp, |
- &RtpRtcpObserver::OnReceiveRtcp, |
- FakeNetworkPipe::Config()), |
timeout_ms_(event_timeout_ms) {} |
- enum Action { |
- SEND_PACKET, |
- DROP_PACKET, |
- }; |
- |
- virtual Action OnSendRtp(const uint8_t* packet, size_t length) |
- EXCLUSIVE_LOCKS_REQUIRED(crit_) { |
- return SEND_PACKET; |
- } |
+ const rtc::scoped_ptr<EventWrapper> observation_complete_; |
+ const rtc::scoped_ptr<RtpHeaderParser> parser_; |
- virtual Action OnSendRtcp(const uint8_t* packet, size_t length) |
- EXCLUSIVE_LOCKS_REQUIRED(crit_) { |
- return SEND_PACKET; |
- } |
+ private: |
+ unsigned int timeout_ms_; |
+}; |
- virtual Action OnReceiveRtp(const uint8_t* packet, size_t length) |
- EXCLUSIVE_LOCKS_REQUIRED(crit_) { |
- return SEND_PACKET; |
- } |
+class PacketTransport : public test::DirectTransport { |
+ public: |
+ enum TransportType { kReceiver, kSender }; |
- virtual Action OnReceiveRtcp(const uint8_t* packet, size_t length) |
- EXCLUSIVE_LOCKS_REQUIRED(crit_) { |
- return SEND_PACKET; |
- } |
+ PacketTransport(Call* send_call, |
+ RtpRtcpObserver* observer, |
+ TransportType transport_type, |
+ const FakeNetworkPipe::Config& configuration) |
+ : test::DirectTransport(configuration, send_call), |
+ observer_(observer), |
+ transport_type_(transport_type) {} |
private: |
- class PacketTransport : public test::DirectTransport { |
- public: |
- typedef Action (RtpRtcpObserver::*PacketTransportAction)(const uint8_t*, |
- size_t); |
- |
- PacketTransport(rtc::CriticalSection* lock, |
- RtpRtcpObserver* observer, |
- PacketTransportAction on_rtp, |
- PacketTransportAction on_rtcp, |
- const FakeNetworkPipe::Config& configuration) |
- : test::DirectTransport(configuration), |
- crit_(lock), |
- observer_(observer), |
- on_rtp_(on_rtp), |
- on_rtcp_(on_rtcp) {} |
- |
- private: |
- bool SendRtp(const uint8_t* packet, |
- size_t length, |
- const PacketOptions& options) override { |
- EXPECT_FALSE(RtpHeaderParser::IsRtcp(packet, length)); |
- Action action; |
- { |
- rtc::CritScope lock(crit_); |
- action = (observer_->*on_rtp_)(packet, length); |
- } |
- switch (action) { |
- case DROP_PACKET: |
- // Drop packet silently. |
- return true; |
- case SEND_PACKET: |
- return test::DirectTransport::SendRtp(packet, length, options); |
+ bool SendRtp(const uint8_t* packet, |
+ size_t length, |
+ const PacketOptions& options) override { |
+ EXPECT_FALSE(RtpHeaderParser::IsRtcp(packet, length)); |
+ RtpRtcpObserver::Action action; |
+ { |
+ if (transport_type_ == kSender) { |
+ action = observer_->OnSendRtp(packet, length); |
+ } else { |
+ action = observer_->OnReceiveRtp(packet, length); |
} |
- return true; // Will never happen, makes compiler happy. |
} |
+ switch (action) { |
+ case RtpRtcpObserver::DROP_PACKET: |
+ // Drop packet silently. |
+ return true; |
+ case RtpRtcpObserver::SEND_PACKET: |
+ return test::DirectTransport::SendRtp(packet, length, options); |
+ } |
+ return true; // Will never happen, makes compiler happy. |
+ } |
- bool SendRtcp(const uint8_t* packet, size_t length) override { |
- EXPECT_TRUE(RtpHeaderParser::IsRtcp(packet, length)); |
- Action action; |
- { |
- rtc::CritScope lock(crit_); |
- action = (observer_->*on_rtcp_)(packet, length); |
+ bool SendRtcp(const uint8_t* packet, size_t length) override { |
+ EXPECT_TRUE(RtpHeaderParser::IsRtcp(packet, length)); |
+ RtpRtcpObserver::Action action; |
+ { |
+ if (transport_type_ == kSender) { |
+ action = observer_->OnSendRtcp(packet, length); |
+ } else { |
+ action = observer_->OnReceiveRtcp(packet, length); |
} |
- switch (action) { |
- case DROP_PACKET: |
- // Drop packet silently. |
- return true; |
- case SEND_PACKET: |
- return test::DirectTransport::SendRtcp(packet, length); |
- } |
- return true; // Will never happen, makes compiler happy. |
} |
+ switch (action) { |
+ case RtpRtcpObserver::DROP_PACKET: |
+ // Drop packet silently. |
+ return true; |
+ case RtpRtcpObserver::SEND_PACKET: |
+ return test::DirectTransport::SendRtcp(packet, length); |
+ } |
+ return true; // Will never happen, makes compiler happy. |
+ } |
- // Pointer to shared lock instance protecting on_rtp_/on_rtcp_ calls. |
- rtc::CriticalSection* const crit_; |
- |
- RtpRtcpObserver* const observer_; |
- const PacketTransportAction on_rtp_, on_rtcp_; |
- }; |
- |
- protected: |
- rtc::CriticalSection crit_; |
- const rtc::scoped_ptr<EventWrapper> observation_complete_; |
- const rtc::scoped_ptr<RtpHeaderParser> parser_; |
- PacketTransport send_transport_, receive_transport_; |
- |
- private: |
- unsigned int timeout_ms_; |
+ RtpRtcpObserver* const observer_; |
+ TransportType transport_type_; |
}; |
} // namespace test |
} // namespace webrtc |