loopback_transport.cc 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. // Copyright 2014 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "media/cast/test/loopback_transport.h"
  5. #include <utility>
  6. #include "base/task/single_thread_task_runner.h"
  7. #include "base/time/tick_clock.h"
  8. #include "media/cast/test/utility/udp_proxy.h"
  9. namespace media {
  10. namespace cast {
  11. namespace {
  12. // Shim that turns forwards packets from a test::PacketPipe to a
  13. // PacketReceiverCallback.
  14. class LoopBackPacketPipe final : public test::PacketPipe {
  15. public:
  16. explicit LoopBackPacketPipe(const PacketReceiverCallback& packet_receiver)
  17. : packet_receiver_(packet_receiver) {}
  18. LoopBackPacketPipe(const LoopBackPacketPipe&) = delete;
  19. LoopBackPacketPipe& operator=(const LoopBackPacketPipe&) = delete;
  20. ~LoopBackPacketPipe() final = default;
  21. // PacketPipe implementations.
  22. void Send(std::unique_ptr<Packet> packet) final {
  23. packet_receiver_.Run(std::move(packet));
  24. }
  25. private:
  26. PacketReceiverCallback packet_receiver_;
  27. };
  28. } // namespace
  29. LoopBackTransport::LoopBackTransport(
  30. scoped_refptr<CastEnvironment> cast_environment)
  31. : cast_environment_(cast_environment), bytes_sent_(0) {}
  32. LoopBackTransport::~LoopBackTransport() = default;
  33. bool LoopBackTransport::SendPacket(PacketRef packet, base::OnceClosure cb) {
  34. DCHECK(cast_environment_->CurrentlyOn(CastEnvironment::MAIN));
  35. std::unique_ptr<Packet> packet_copy(new Packet(packet->data));
  36. packet_pipe_->Send(std::move(packet_copy));
  37. bytes_sent_ += packet->data.size();
  38. return true;
  39. }
  40. int64_t LoopBackTransport::GetBytesSent() {
  41. return bytes_sent_;
  42. }
  43. void LoopBackTransport::Initialize(
  44. std::unique_ptr<test::PacketPipe> pipe,
  45. const PacketReceiverCallback& packet_receiver,
  46. const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
  47. const base::TickClock* clock) {
  48. std::unique_ptr<test::PacketPipe> loopback_pipe(
  49. new LoopBackPacketPipe(packet_receiver));
  50. if (pipe) {
  51. // Append the loopback pipe to the end.
  52. pipe->AppendToPipe(std::move(loopback_pipe));
  53. packet_pipe_ = std::move(pipe);
  54. } else {
  55. packet_pipe_ = std::move(loopback_pipe);
  56. }
  57. packet_pipe_->InitOnIOThread(task_runner, clock);
  58. }
  59. } // namespace cast
  60. } // namespace media