diff options
author | yzshen@chromium.org <yzshen@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-02-21 23:37:12 +0000 |
---|---|---|
committer | yzshen@chromium.org <yzshen@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-02-21 23:37:12 +0000 |
commit | 669b2839b2a307ab08bcbc217efdb8a9f146c7c1 (patch) | |
tree | 601f882f71731c441eecb5f8b97f6bd0b6e8e78b /content/browser/renderer_host/pepper_udp_socket.cc | |
parent | 6681478ec237fa2b66b122a98f8630cefab22abc (diff) | |
download | chromium_src-669b2839b2a307ab08bcbc217efdb8a9f146c7c1.zip chromium_src-669b2839b2a307ab08bcbc217efdb8a9f146c7c1.tar.gz chromium_src-669b2839b2a307ab08bcbc217efdb8a9f146c7c1.tar.bz2 |
GetBoundAddress will return the address that Bind actually bound to. If there has not been a successful call to Bind, this method will return an error.
BUG=no bug
TEST=udp tests
Review URL: https://chromiumcodereview.appspot.com/9212047
Patch from Mike Tilburg <mtilburg@adobe.com>.
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@122910 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content/browser/renderer_host/pepper_udp_socket.cc')
-rw-r--r-- | content/browser/renderer_host/pepper_udp_socket.cc | 29 |
1 files changed, 24 insertions, 5 deletions
diff --git a/content/browser/renderer_host/pepper_udp_socket.cc b/content/browser/renderer_host/pepper_udp_socket.cc index 33f2c7f..836398d 100644 --- a/content/browser/renderer_host/pepper_udp_socket.cc +++ b/content/browser/renderer_host/pepper_udp_socket.cc @@ -1,4 +1,4 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Copyright (c) 2012 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. @@ -43,13 +43,19 @@ void PepperUDPSocket::Bind(const PP_NetAddress_Private& addr) { net::IPEndPoint address; if (!socket_.get() || !NetAddressPrivateImpl::NetAddressToIPEndPoint(addr, &address)) { - SendBindACK(false); + SendBindACKError(); return; } int result = socket_->Listen(address); - SendBindACK(result == net::OK); + if (result == net::OK && + socket_->GetLocalAddress(&bound_address_) != net::OK) { + SendBindACKError(); + return; + } + + OnBindCompleted(result); } void PepperUDPSocket::RecvFrom(int32_t num_bytes) { @@ -105,9 +111,22 @@ void PepperUDPSocket::SendSendToACKError() { routing_id_, plugin_dispatcher_id_, socket_id_, false, 0)); } -void PepperUDPSocket::SendBindACK(bool result) { +void PepperUDPSocket::SendBindACKError() { + PP_NetAddress_Private addr = NetAddressPrivateImpl::kInvalidNetAddress; manager_->Send(new PpapiMsg_PPBUDPSocket_BindACK( - routing_id_, plugin_dispatcher_id_, socket_id_, result)); + routing_id_, plugin_dispatcher_id_, socket_id_, false, addr)); +} + +void PepperUDPSocket::OnBindCompleted(int result) { + PP_NetAddress_Private addr = NetAddressPrivateImpl::kInvalidNetAddress; + if (result < 0 || + !NetAddressPrivateImpl::IPEndPointToNetAddress(bound_address_, + &addr)) { + SendBindACKError(); + } else { + manager_->Send(new PpapiMsg_PPBUDPSocket_BindACK( + routing_id_, plugin_dispatcher_id_, socket_id_, true, addr)); + } } void PepperUDPSocket::OnRecvFromCompleted(int result) { |