Index: media/cast/net/transport/transport.cc |
diff --git a/media/cast/net/transport/transport.cc b/media/cast/net/transport/transport.cc |
deleted file mode 100644 |
index f28e8893b8e52053903ae41f90ddd497489f16e1..0000000000000000000000000000000000000000 |
--- a/media/cast/net/transport/transport.cc |
+++ /dev/null |
@@ -1,195 +0,0 @@ |
-// Copyright 2013 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "media/cast/net/transport/transport.h" |
- |
-#include <string> |
- |
-#include "base/bind.h" |
-#include "base/logging.h" |
-#include "base/memory/ref_counted.h" |
-#include "base/memory/scoped_ptr.h" |
-#include "base/message_loop/message_loop.h" |
-#include "base/rand_util.h" |
-#include "net/base/io_buffer.h" |
-#include "net/base/rand_callback.h" |
-#include "net/base/test_completion_callback.h" |
- |
-namespace media { |
-namespace cast { |
- |
-const int kMaxPacketSize = 1500; |
- |
-class LocalUdpTransportData; |
- |
-void CreateUDPAddress(std::string ip_str, int port, net::IPEndPoint* address) { |
- net::IPAddressNumber ip_number; |
- bool rv = net::ParseIPLiteralToNumber(ip_str, &ip_number); |
- if (!rv) |
- return; |
- *address = net::IPEndPoint(ip_number, port); |
-} |
- |
-class LocalUdpTransportData |
- : public base::RefCountedThreadSafe<LocalUdpTransportData> { |
- public: |
- LocalUdpTransportData(net::UDPServerSocket* udp_socket, |
- scoped_refptr<base::TaskRunner> io_thread_proxy) |
- : udp_socket_(udp_socket), |
- buffer_(new net::IOBufferWithSize(kMaxPacketSize)), |
- io_thread_proxy_(io_thread_proxy) { |
- } |
- |
- void ListenTo(net::IPEndPoint bind_address) { |
- DCHECK(io_thread_proxy_->RunsTasksOnCurrentThread()); |
- |
- bind_address_ = bind_address; |
- io_thread_proxy_->PostTask(FROM_HERE, |
- base::Bind(&LocalUdpTransportData::RecvFromSocketLoop, this)); |
- } |
- |
- void DeletePacket(uint8* data) { |
- // Should be called from the receiver (not on the transport thread). |
- DCHECK(!(io_thread_proxy_->RunsTasksOnCurrentThread())); |
- delete [] data; |
- } |
- |
- void PacketReceived(int size) { |
- DCHECK(io_thread_proxy_->RunsTasksOnCurrentThread()); |
- // Got a packet with length result. |
- uint8* data = new uint8[size]; |
- memcpy(data, buffer_->data(), size); |
- packet_receiver_->ReceivedPacket(data, size, |
- base::Bind(&LocalUdpTransportData::DeletePacket, this, data)); |
- RecvFromSocketLoop(); |
- |
- } |
- |
- void RecvFromSocketLoop() { |
- DCHECK(io_thread_proxy_->RunsTasksOnCurrentThread()); |
- // Callback should always trigger with a packet. |
- int res = udp_socket_->RecvFrom(buffer_.get(), kMaxPacketSize, |
- &bind_address_, base::Bind(&LocalUdpTransportData::PacketReceived, |
- this)); |
- DCHECK(res >= net::ERR_IO_PENDING); |
- if (res > 0) { |
- PacketReceived(res); |
- } |
- } |
- |
- void set_packet_receiver(PacketReceiver* packet_receiver) { |
- packet_receiver_ = packet_receiver; |
- } |
- |
- void Close() { |
- udp_socket_->Close(); |
- } |
- |
- protected: |
- virtual ~LocalUdpTransportData() {} |
- |
- private: |
- friend class base::RefCountedThreadSafe<LocalUdpTransportData>; |
- |
- net::UDPServerSocket* udp_socket_; |
- net::IPEndPoint bind_address_; |
- PacketReceiver* packet_receiver_; |
- scoped_refptr<net::IOBufferWithSize> buffer_; |
- scoped_refptr<base::TaskRunner> io_thread_proxy_; |
- |
- DISALLOW_COPY_AND_ASSIGN(LocalUdpTransportData); |
-}; |
- |
-class LocalPacketSender : public PacketSender, |
- public base::RefCountedThreadSafe<LocalPacketSender> { |
- public: |
- LocalPacketSender(net::UDPServerSocket* udp_socket, |
- scoped_refptr<base::TaskRunner> io_thread_proxy) |
- : udp_socket_(udp_socket), |
- send_address_(), |
- io_thread_proxy_(io_thread_proxy) {} |
- |
- virtual bool SendPacket(const Packet& packet) OVERRIDE { |
- io_thread_proxy_->PostTask(FROM_HERE, |
- base::Bind(&LocalPacketSender::SendPacketToNetwork, this, packet)); |
- return true; |
- } |
- |
- virtual void SendPacketToNetwork(const Packet& packet) { |
- DCHECK(io_thread_proxy_->RunsTasksOnCurrentThread()); |
- const uint8* data = packet.data(); |
- net::TestCompletionCallback callback; |
- scoped_refptr<net::WrappedIOBuffer> buffer( |
- new net::WrappedIOBuffer(reinterpret_cast<const char*>(data))); |
- udp_socket_->SendTo(buffer.get(), static_cast<int>(packet.size()), |
- send_address_, callback.callback()); |
- } |
- |
- virtual bool SendPackets(const PacketList& packets) OVERRIDE { |
- bool out_val = true; |
- for (size_t i = 0; i < packets.size(); ++i) { |
- const Packet& packet = packets[i]; |
- out_val |= SendPacket(packet); |
- } |
- return out_val; |
- } |
- |
- void SetSendAddress(const net::IPEndPoint& send_address) { |
- send_address_ = send_address; |
- } |
- |
- protected: |
- virtual ~LocalPacketSender() {} |
- |
- private: |
- friend class base::RefCountedThreadSafe<LocalPacketSender>; |
- |
- net::UDPServerSocket* udp_socket_; // Not owned by this class. |
- net::IPEndPoint send_address_; |
- scoped_refptr<base::TaskRunner> io_thread_proxy_; |
-}; |
- |
-Transport::Transport( |
- scoped_refptr<base::TaskRunner> io_thread_proxy) |
- : udp_socket_(new net::UDPServerSocket(NULL, net::NetLog::Source())), |
- local_udp_transport_data_(new LocalUdpTransportData(udp_socket_.get(), |
- io_thread_proxy)), |
- packet_sender_(new LocalPacketSender(udp_socket_.get(), io_thread_proxy)), |
- io_thread_proxy_(io_thread_proxy) {} |
- |
-Transport::~Transport() {} |
- |
-PacketSender* Transport::packet_sender() { |
- return static_cast<PacketSender*>(packet_sender_.get()); |
-} |
- |
-void Transport::StopReceiving() { |
- local_udp_transport_data_->Close(); |
-} |
- |
-void Transport::SetLocalReceiver(PacketReceiver* packet_receiver, |
- std::string ip_address, |
- std::string local_ip_address, |
- int port) { |
- DCHECK(io_thread_proxy_->RunsTasksOnCurrentThread()); |
- net::IPEndPoint bind_address, local_bind_address; |
- CreateUDPAddress(ip_address, port, &bind_address); |
- CreateUDPAddress(local_ip_address, port, &local_bind_address); |
- local_udp_transport_data_->set_packet_receiver(packet_receiver); |
- udp_socket_->AllowAddressReuse(); |
- udp_socket_->SetMulticastLoopbackMode(true); |
- udp_socket_->Listen(local_bind_address); |
- |
- // Start listening once receiver has been set. |
- local_udp_transport_data_->ListenTo(bind_address); |
-} |
- |
-void Transport::SetSendDestination(std::string ip_address, int port) { |
- net::IPEndPoint send_address; |
- CreateUDPAddress(ip_address, port, &send_address); |
- packet_sender_->SetSendAddress(send_address); |
-} |
- |
-} // namespace cast |
-} // namespace media |