Index: media/cast/transport/transport/udp_transport.cc |
diff --git a/media/cast/transport/transport/udp_transport.cc b/media/cast/transport/transport/udp_transport.cc |
index bcce4f72f3172d1764e5d588cb880ae093908827..9669b17d4386a24fed929adeb96804cfaf996f5a 100644 |
--- a/media/cast/transport/transport/udp_transport.cc |
+++ b/media/cast/transport/transport/udp_transport.cc |
@@ -54,6 +54,7 @@ UdpTransport::UdpTransport( |
send_pending_(false), |
receive_pending_(false), |
client_connected_(false), |
+ next_dscp_value_(net::DSCP_NO_CHANGE), |
status_callback_(status_callback), |
weak_factory_(this) { |
DCHECK(!IsEmpty(local_end_point) || !IsEmpty(remote_end_point)); |
@@ -88,6 +89,11 @@ void UdpTransport::StartReceiving( |
ScheduleReceiveNextPacket(); |
} |
+void UdpTransport::SetDscp(net::DiffServCodePoint dscp) { |
+ DCHECK(io_thread_proxy_->RunsTasksOnCurrentThread()); |
+ next_dscp_value_ = dscp; |
+} |
+ |
void UdpTransport::ScheduleReceiveNextPacket() { |
DCHECK(io_thread_proxy_->RunsTasksOnCurrentThread()); |
if (!packet_receiver_.is_null() && !receive_pending_) { |
@@ -162,6 +168,16 @@ bool UdpTransport::SendPacket(PacketRef packet, const base::Closure& cb) { |
return true; |
} |
+ if (next_dscp_value_ != net::DSCP_NO_CHANGE) { |
+ int result = udp_socket_->SetDiffServCodePoint(next_dscp_value_); |
+ if (result != net::OK) { |
+ LOG(ERROR) << "Unable to set DSCP: " << next_dscp_value_ |
+ << " to socket; Error: " << result; |
+ } |
+ // Don't change DSCP in next send. |
+ next_dscp_value_ = net::DSCP_NO_CHANGE; |
+ } |
+ |
scoped_refptr<net::IOBuffer> buf = |
new net::WrappedIOBuffer(reinterpret_cast<char*>(&packet->data.front())); |