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

Unified Diff: chrome/browser/extensions/api/socket/udp_socket.cc

Issue 183893041: Move sockets APIs out of src/chrome (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rename api targets Created 6 years, 9 months 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/extensions/api/socket/udp_socket.cc
diff --git a/chrome/browser/extensions/api/socket/udp_socket.cc b/chrome/browser/extensions/api/socket/udp_socket.cc
deleted file mode 100644
index e67846953e5b58543b385e5c7f9823f14390cb67..0000000000000000000000000000000000000000
--- a/chrome/browser/extensions/api/socket/udp_socket.cc
+++ /dev/null
@@ -1,296 +0,0 @@
-// 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.
-
-#include "chrome/browser/extensions/api/socket/udp_socket.h"
-
-#include <algorithm>
-
-#include "extensions/browser/api/api_resource.h"
-#include "net/base/ip_endpoint.h"
-#include "net/base/net_errors.h"
-#include "net/udp/datagram_socket.h"
-#include "net/udp/udp_client_socket.h"
-
-namespace extensions {
-
-static base::LazyInstance<
- BrowserContextKeyedAPIFactory<ApiResourceManager<ResumableUDPSocket> > >
- g_factory = LAZY_INSTANCE_INITIALIZER;
-
-// static
-template <>
-BrowserContextKeyedAPIFactory<ApiResourceManager<ResumableUDPSocket> >*
-ApiResourceManager<ResumableUDPSocket>::GetFactoryInstance() {
- return g_factory.Pointer();
-}
-
-UDPSocket::UDPSocket(const std::string& owner_extension_id)
- : Socket(owner_extension_id),
- socket_(net::DatagramSocket::DEFAULT_BIND,
- net::RandIntCallback(),
- NULL,
- net::NetLog::Source()) {}
-
-UDPSocket::~UDPSocket() { Disconnect(); }
-
-void UDPSocket::Connect(const std::string& address,
- int port,
- 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;
- }
-
- result = socket_.Connect(ip_end_point);
- is_connected_ = (result == net::OK);
- } while (false);
-
- callback.Run(result);
-}
-
-int UDPSocket::Bind(const std::string& address, int port) {
- if (IsBound())
- return net::ERR_CONNECTION_FAILED;
-
- net::IPEndPoint ip_end_point;
- if (!StringAndPortToIPEndPoint(address, port, &ip_end_point))
- return net::ERR_INVALID_ARGUMENT;
-
- return socket_.Bind(ip_end_point);
-}
-
-void UDPSocket::Disconnect() {
- is_connected_ = false;
- socket_.Close();
- read_callback_.Reset();
- recv_from_callback_.Reset();
- send_to_callback_.Reset();
- multicast_groups_.clear();
-}
-
-void UDPSocket::Read(int count, const ReadCompletionCallback& callback) {
- DCHECK(!callback.is_null());
-
- if (!read_callback_.is_null()) {
- callback.Run(net::ERR_IO_PENDING, NULL);
- return;
- } else {
- read_callback_ = callback;
- }
-
- int result = net::ERR_FAILED;
- scoped_refptr<net::IOBuffer> io_buffer;
- do {
- if (count < 0) {
- result = net::ERR_INVALID_ARGUMENT;
- break;
- }
-
- if (!socket_.is_connected()) {
- result = net::ERR_SOCKET_NOT_CONNECTED;
- break;
- }
-
- io_buffer = new net::IOBuffer(count);
- result = socket_.Read(
- io_buffer.get(),
- count,
- base::Bind(
- &UDPSocket::OnReadComplete, base::Unretained(this), io_buffer));
- } while (false);
-
- if (result != net::ERR_IO_PENDING)
- OnReadComplete(io_buffer, result);
-}
-
-int UDPSocket::WriteImpl(net::IOBuffer* io_buffer,
- int io_buffer_size,
- const net::CompletionCallback& callback) {
- if (!socket_.is_connected())
- return net::ERR_SOCKET_NOT_CONNECTED;
- else
- return socket_.Write(io_buffer, io_buffer_size, callback);
-}
-
-void UDPSocket::RecvFrom(int count,
- const RecvFromCompletionCallback& callback) {
- DCHECK(!callback.is_null());
-
- if (!recv_from_callback_.is_null()) {
- callback.Run(net::ERR_IO_PENDING, NULL, std::string(), 0);
- return;
- } else {
- recv_from_callback_ = callback;
- }
-
- int result = net::ERR_FAILED;
- scoped_refptr<net::IOBuffer> io_buffer;
- scoped_refptr<IPEndPoint> address;
- do {
- if (count < 0) {
- result = net::ERR_INVALID_ARGUMENT;
- break;
- }
-
- if (!socket_.is_connected()) {
- result = net::ERR_SOCKET_NOT_CONNECTED;
- break;
- }
-
- io_buffer = new net::IOBuffer(count);
- address = new IPEndPoint();
- result = socket_.RecvFrom(io_buffer.get(),
- count,
- &address->data,
- base::Bind(&UDPSocket::OnRecvFromComplete,
- base::Unretained(this),
- io_buffer,
- address));
- } while (false);
-
- if (result != net::ERR_IO_PENDING)
- OnRecvFromComplete(io_buffer, address, result);
-}
-
-void UDPSocket::SendTo(scoped_refptr<net::IOBuffer> io_buffer,
- int byte_count,
- const std::string& address,
- int port,
- const CompletionCallback& callback) {
- DCHECK(!callback.is_null());
-
- if (!send_to_callback_.is_null()) {
- // TODO(penghuang): Put requests in a pending queue to support multiple
- // sendTo calls.
- callback.Run(net::ERR_IO_PENDING);
- return;
- } else {
- send_to_callback_ = callback;
- }
-
- 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,
- base::Bind(&UDPSocket::OnSendToComplete, base::Unretained(this)));
- } while (false);
-
- if (result != net::ERR_IO_PENDING)
- OnSendToComplete(result);
-}
-
-bool UDPSocket::IsConnected() { return is_connected_; }
-
-bool UDPSocket::GetPeerAddress(net::IPEndPoint* address) {
- return !socket_.GetPeerAddress(address);
-}
-
-bool UDPSocket::GetLocalAddress(net::IPEndPoint* address) {
- return !socket_.GetLocalAddress(address);
-}
-
-Socket::SocketType UDPSocket::GetSocketType() const { return Socket::TYPE_UDP; }
-
-void UDPSocket::OnReadComplete(scoped_refptr<net::IOBuffer> io_buffer,
- int result) {
- DCHECK(!read_callback_.is_null());
- read_callback_.Run(result, io_buffer);
- read_callback_.Reset();
-}
-
-void UDPSocket::OnRecvFromComplete(scoped_refptr<net::IOBuffer> io_buffer,
- scoped_refptr<IPEndPoint> address,
- int result) {
- DCHECK(!recv_from_callback_.is_null());
- std::string ip;
- int port = 0;
- if (result > 0 && address.get()) {
- IPEndPointToStringAndPort(address->data, &ip, &port);
- }
- recv_from_callback_.Run(result, io_buffer, ip, port);
- recv_from_callback_.Reset();
-}
-
-void UDPSocket::OnSendToComplete(int result) {
- DCHECK(!send_to_callback_.is_null());
- send_to_callback_.Run(result);
- send_to_callback_.Reset();
-}
-
-bool UDPSocket::IsBound() { return socket_.is_connected(); }
-
-int UDPSocket::JoinGroup(const std::string& address) {
- net::IPAddressNumber ip;
- if (!net::ParseIPLiteralToNumber(address, &ip))
- return net::ERR_ADDRESS_INVALID;
-
- std::string normalized_address = net::IPAddressToString(ip);
- std::vector<std::string>::iterator find_result = std::find(
- multicast_groups_.begin(), multicast_groups_.end(), normalized_address);
- if (find_result != multicast_groups_.end())
- return net::ERR_ADDRESS_INVALID;
-
- int rv = socket_.JoinGroup(ip);
- if (rv == 0)
- multicast_groups_.push_back(normalized_address);
- return rv;
-}
-
-int UDPSocket::LeaveGroup(const std::string& address) {
- net::IPAddressNumber ip;
- if (!net::ParseIPLiteralToNumber(address, &ip))
- return net::ERR_ADDRESS_INVALID;
-
- std::string normalized_address = net::IPAddressToString(ip);
- std::vector<std::string>::iterator find_result = std::find(
- multicast_groups_.begin(), multicast_groups_.end(), normalized_address);
- if (find_result == multicast_groups_.end())
- return net::ERR_ADDRESS_INVALID;
-
- int rv = socket_.LeaveGroup(ip);
- if (rv == 0)
- multicast_groups_.erase(find_result);
- return rv;
-}
-
-int UDPSocket::SetMulticastTimeToLive(int ttl) {
- return socket_.SetMulticastTimeToLive(ttl);
-}
-
-int UDPSocket::SetMulticastLoopbackMode(bool loopback) {
- return socket_.SetMulticastLoopbackMode(loopback);
-}
-
-const std::vector<std::string>& UDPSocket::GetJoinedGroups() const {
- return multicast_groups_;
-}
-
-ResumableUDPSocket::ResumableUDPSocket(const std::string& owner_extension_id)
- : UDPSocket(owner_extension_id),
- persistent_(false),
- buffer_size_(0),
- paused_(false) {}
-
-bool ResumableUDPSocket::IsPersistent() const { return persistent(); }
-
-} // namespace extensions
« no previous file with comments | « chrome/browser/extensions/api/socket/udp_socket.h ('k') | chrome/browser/extensions/api/socket/udp_socket_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698