summaryrefslogtreecommitdiffstats
path: root/extensions/browser/api/socket/udp_socket.cc
diff options
context:
space:
mode:
authorsergeyu <sergeyu@chromium.org>2015-07-08 18:46:00 -0700
committerCommit bot <commit-bot@chromium.org>2015-07-09 01:46:41 +0000
commita113092147851769526ab89197b64d10d221c9d4 (patch)
treeaa0546a1c03588f7b618b5f80ce627123aac46b5 /extensions/browser/api/socket/udp_socket.cc
parent3e7847fcfb33dd0aa06fea2ccbf02f5c07e2b5ea (diff)
downloadchromium_src-a113092147851769526ab89197b64d10d221c9d4.zip
chromium_src-a113092147851769526ab89197b64d10d221c9d4.tar.gz
chromium_src-a113092147851769526ab89197b64d10d221c9d4.tar.bz2
Fix chrome.socket.tcp API to use all addresses received from DNS.
Previously chrome.socket.tcp API was using only one IP address it receives from DNS. Fixed it to pass all addresses to TCPClientSocket so it attempts to connect to all of them before failing. BUG=508210 Review URL: https://codereview.chromium.org/1229763002 Cr-Commit-Position: refs/heads/master@{#337962}
Diffstat (limited to 'extensions/browser/api/socket/udp_socket.cc')
-rw-r--r--extensions/browser/api/socket/udp_socket.cc25
1 files changed, 6 insertions, 19 deletions
diff --git a/extensions/browser/api/socket/udp_socket.cc b/extensions/browser/api/socket/udp_socket.cc
index 2822046..47eae2d 100644
--- a/extensions/browser/api/socket/udp_socket.cc
+++ b/extensions/browser/api/socket/udp_socket.cc
@@ -35,20 +35,16 @@ UDPSocket::UDPSocket(const std::string& owner_extension_id)
UDPSocket::~UDPSocket() { Disconnect(); }
-void UDPSocket::Connect(const std::string& address,
- uint16 port,
+void UDPSocket::Connect(const net::AddressList& address,
const CompletionCallback& callback) {
int result = net::ERR_CONNECTION_FAILED;
do {
if (is_connected_)
break;
- net::IPEndPoint ip_end_point;
- if (!StringAndPortToIPEndPoint(address, port, &ip_end_point)) {
- result = net::ERR_ADDRESS_INVALID;
- break;
- }
-
+ // UDP API only connects to the first address received from DNS so
+ // connection may not work even if other addresses are reachable.
+ net::IPEndPoint ip_end_point = address.front();
result = socket_.Open(ip_end_point.GetFamily());
if (result != net::OK)
break;
@@ -177,8 +173,7 @@ void UDPSocket::RecvFrom(int count,
void UDPSocket::SendTo(scoped_refptr<net::IOBuffer> io_buffer,
int byte_count,
- const std::string& address,
- uint16 port,
+ const net::IPEndPoint& address,
const CompletionCallback& callback) {
DCHECK(!callback.is_null());
@@ -193,21 +188,13 @@ void UDPSocket::SendTo(scoped_refptr<net::IOBuffer> io_buffer,
int result = net::ERR_FAILED;
do {
- net::IPEndPoint ip_end_point;
- if (!StringAndPortToIPEndPoint(address, port, &ip_end_point)) {
- result = net::ERR_ADDRESS_INVALID;
- break;
- }
-
if (!socket_.is_connected()) {
result = net::ERR_SOCKET_NOT_CONNECTED;
break;
}
result = socket_.SendTo(
- io_buffer.get(),
- byte_count,
- ip_end_point,
+ io_buffer.get(), byte_count, address,
base::Bind(&UDPSocket::OnSendToComplete, base::Unretained(this)));
} while (false);