Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(792)

Side by Side Diff: media/cast/net/udp_transport.cc

Issue 1515023002: Simplify interface for media/cast: CastTransportSenderImpl (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: New interface and impl (no tests). Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "media/cast/net/udp_transport.h" 5 #include "media/cast/net/udp_transport.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <string> 8 #include <string>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 17 matching lines...) Expand all
28 !addr.port(); 28 !addr.port();
29 } 29 }
30 30
31 bool IsEqual(const net::IPEndPoint& addr1, const net::IPEndPoint& addr2) { 31 bool IsEqual(const net::IPEndPoint& addr1, const net::IPEndPoint& addr2) {
32 return addr1.port() == addr2.port() && std::equal(addr1.address().begin(), 32 return addr1.port() == addr2.port() && std::equal(addr1.address().begin(),
33 addr1.address().end(), 33 addr1.address().end(),
34 addr2.address().begin()); 34 addr2.address().begin());
35 } 35 }
36 } // namespace 36 } // namespace
37 37
38 UdpTransport::UdpTransport( 38 UdpTransport::UdpTransport(const CastTransportSender::CreateParams& params,
Irfan 2015/12/15 22:23:13 Do not think CastTransportSender::CreateParams sho
xjz 2015/12/16 18:11:34 Done. Left |UdpTransport| as is.
39 net::NetLog* net_log, 39 int32 send_buffer_size)
40 const scoped_refptr<base::SingleThreadTaskRunner>& io_thread_proxy, 40 : transport_client_(params.client),
41 const net::IPEndPoint& local_end_point, 41 io_thread_proxy_(params.transport_task_runner),
42 const net::IPEndPoint& remote_end_point, 42 local_addr_(params.local_end_point),
43 int32 send_buffer_size, 43 remote_addr_(params.remote_end_point),
44 const CastTransportStatusCallback& status_callback)
45 : io_thread_proxy_(io_thread_proxy),
46 local_addr_(local_end_point),
47 remote_addr_(remote_end_point),
48 udp_socket_(new net::UDPSocket(net::DatagramSocket::DEFAULT_BIND, 44 udp_socket_(new net::UDPSocket(net::DatagramSocket::DEFAULT_BIND,
49 net::RandIntCallback(), 45 net::RandIntCallback(),
50 net_log, 46 params.net_log,
51 net::NetLog::Source())), 47 net::NetLog::Source())),
52 send_pending_(false), 48 send_pending_(false),
53 receive_pending_(false), 49 receive_pending_(false),
54 client_connected_(false), 50 client_connected_(false),
55 next_dscp_value_(net::DSCP_NO_CHANGE), 51 next_dscp_value_(net::DSCP_NO_CHANGE),
56 send_buffer_size_(send_buffer_size), 52 send_buffer_size_(send_buffer_size),
57 status_callback_(status_callback),
58 bytes_sent_(0), 53 bytes_sent_(0),
59 weak_factory_(this) { 54 weak_factory_(this) {
60 DCHECK(!IsEmpty(local_end_point) || !IsEmpty(remote_end_point)); 55 DCHECK(!IsEmpty(local_addr_) || !IsEmpty(remote_addr_));
61 } 56 }
62 57
63 UdpTransport::~UdpTransport() {} 58 UdpTransport::~UdpTransport() {}
64 59
65 void UdpTransport::StartReceiving( 60 void UdpTransport::StartReceiving(
66 const PacketReceiverCallbackWithStatus& packet_receiver) { 61 const PacketReceiverCallbackWithStatus& packet_receiver) {
67 DCHECK(io_thread_proxy_->RunsTasksOnCurrentThread()); 62 DCHECK(io_thread_proxy_->RunsTasksOnCurrentThread());
68 63
69 if (!udp_socket_) { 64 if (!udp_socket_) {
70 status_callback_.Run(TRANSPORT_SOCKET_ERROR); 65 transport_client_->OnStatusChange(TRANSPORT_SOCKET_ERROR);
71 return; 66 return;
72 } 67 }
73 68
74 packet_receiver_ = packet_receiver; 69 packet_receiver_ = packet_receiver;
75 udp_socket_->SetMulticastLoopbackMode(true); 70 udp_socket_->SetMulticastLoopbackMode(true);
76 if (!IsEmpty(local_addr_)) { 71 if (!IsEmpty(local_addr_)) {
77 if (udp_socket_->Open(local_addr_.GetFamily()) < 0 || 72 if (udp_socket_->Open(local_addr_.GetFamily()) < 0 ||
78 udp_socket_->AllowAddressReuse() < 0 || 73 udp_socket_->AllowAddressReuse() < 0 ||
79 udp_socket_->Bind(local_addr_) < 0) { 74 udp_socket_->Bind(local_addr_) < 0) {
80 udp_socket_->Close(); 75 udp_socket_->Close();
81 udp_socket_.reset(); 76 udp_socket_.reset();
82 status_callback_.Run(TRANSPORT_SOCKET_ERROR); 77 transport_client_->OnStatusChange(TRANSPORT_SOCKET_ERROR);
83 LOG(ERROR) << "Failed to bind local address."; 78 LOG(ERROR) << "Failed to bind local address.";
84 return; 79 return;
85 } 80 }
86 } else if (!IsEmpty(remote_addr_)) { 81 } else if (!IsEmpty(remote_addr_)) {
87 if (udp_socket_->Open(remote_addr_.GetFamily()) < 0 || 82 if (udp_socket_->Open(remote_addr_.GetFamily()) < 0 ||
88 udp_socket_->AllowAddressReuse() < 0 || 83 udp_socket_->AllowAddressReuse() < 0 ||
89 udp_socket_->Connect(remote_addr_) < 0) { 84 udp_socket_->Connect(remote_addr_) < 0) {
90 udp_socket_->Close(); 85 udp_socket_->Close();
91 udp_socket_.reset(); 86 udp_socket_.reset();
92 status_callback_.Run(TRANSPORT_SOCKET_ERROR); 87 transport_client_->OnStatusChange(TRANSPORT_SOCKET_ERROR);
93 LOG(ERROR) << "Failed to connect to remote address."; 88 LOG(ERROR) << "Failed to connect to remote address.";
94 return; 89 return;
95 } 90 }
96 client_connected_ = true; 91 client_connected_ = true;
97 } else { 92 } else {
98 NOTREACHED() << "Either local or remote address has to be defined."; 93 NOTREACHED() << "Either local or remote address has to be defined.";
99 } 94 }
100 if (udp_socket_->SetSendBufferSize(send_buffer_size_) != net::OK) { 95 if (udp_socket_->SetSendBufferSize(send_buffer_size_) != net::OK) {
101 LOG(WARNING) << "Failed to set socket send buffer size."; 96 LOG(WARNING) << "Failed to set socket send buffer size.";
102 } 97 }
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after
273 } 268 }
274 ScheduleReceiveNextPacket(); 269 ScheduleReceiveNextPacket();
275 270
276 if (!cb.is_null()) { 271 if (!cb.is_null()) {
277 cb.Run(); 272 cb.Run();
278 } 273 }
279 } 274 }
280 275
281 } // namespace cast 276 } // namespace cast
282 } // namespace media 277 } // namespace media
OLDNEW
« media/cast/net/cast_transport_sender.h ('K') | « media/cast/net/udp_transport.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698