summaryrefslogtreecommitdiffstats
path: root/content/browser/renderer_host/pepper_udp_socket.cc
diff options
context:
space:
mode:
authoryzshen@chromium.org <yzshen@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-02-21 23:37:12 +0000
committeryzshen@chromium.org <yzshen@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-02-21 23:37:12 +0000
commit669b2839b2a307ab08bcbc217efdb8a9f146c7c1 (patch)
tree601f882f71731c441eecb5f8b97f6bd0b6e8e78b /content/browser/renderer_host/pepper_udp_socket.cc
parent6681478ec237fa2b66b122a98f8630cefab22abc (diff)
downloadchromium_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.cc29
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) {