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

Unified Diff: mojo/services/network/network_service_impl.cc

Issue 634713002: Implement parts of the Mojo TCP interfaces. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: missing file in gyp Created 6 years, 2 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
« no previous file with comments | « mojo/services/network/network_service_impl.h ('k') | mojo/services/network/tcp_bound_socket_impl.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: mojo/services/network/network_service_impl.cc
diff --git a/mojo/services/network/network_service_impl.cc b/mojo/services/network/network_service_impl.cc
index a5769759f35b609a3debb63b955301e7c632f63f..dc04b51c7295e1e88eabe650cb72419d668ac263 100644
--- a/mojo/services/network/network_service_impl.cc
+++ b/mojo/services/network/network_service_impl.cc
@@ -6,11 +6,26 @@
#include "mojo/public/cpp/application/application_connection.h"
#include "mojo/services/network/cookie_store_impl.h"
+#include "mojo/services/network/net_adapters.h"
+#include "mojo/services/network/tcp_bound_socket_impl.h"
#include "mojo/services/network/url_loader_impl.h"
#include "mojo/services/network/web_socket_impl.h"
namespace mojo {
+namespace {
+
+// Allows a Callback<NetworkErrorPtr, NetAddressPtr> to be called by a
+// Callback<NetworkErrorPtr> when the address is already known.
+void BoundAddressCallbackAdapter(
+ const Callback<void(NetworkErrorPtr, NetAddressPtr)>& callback,
+ NetAddressPtr address,
+ NetworkErrorPtr err) {
+ callback.Run(err.Pass(), address.Pass());
+}
+
+} // namespace
+
NetworkServiceImpl::NetworkServiceImpl(ApplicationConnection* connection,
NetworkContext* context)
: context_(context),
@@ -37,18 +52,36 @@ void NetworkServiceImpl::CreateTCPBoundSocket(
NetAddressPtr local_address,
InterfaceRequest<TCPBoundSocket> bound_socket,
const Callback<void(NetworkErrorPtr, NetAddressPtr)>& callback) {
- // TODO(brettw) implement this.
- callback.Run(NetworkErrorPtr(), NetAddressPtr());
+ scoped_ptr<TCPBoundSocketImpl> bound(new TCPBoundSocketImpl);
+ int net_error = bound->Bind(local_address.Pass());
+ if (net_error != net::OK) {
+ callback.Run(MakeNetworkError(net_error), NetAddressPtr());
+ return;
+ }
+ NetAddressPtr resulting_local_address(bound->GetLocalAddress());
+ BindToRequest(bound.release(), &bound_socket);
+ callback.Run(MakeNetworkError(net::OK), resulting_local_address.Pass());
}
-void NetworkServiceImpl::CreateTCPClientSocket(
+void NetworkServiceImpl::CreateTCPConnectedSocket(
NetAddressPtr remote_address,
ScopedDataPipeConsumerHandle send_stream,
ScopedDataPipeProducerHandle receive_stream,
- InterfaceRequest<TCPClientSocket> client_socket,
+ InterfaceRequest<TCPConnectedSocket> client_socket,
const Callback<void(NetworkErrorPtr, NetAddressPtr)>& callback) {
- // TODO(brettw) implement this.
- callback.Run(NetworkErrorPtr(), NetAddressPtr());
+ TCPBoundSocketImpl bound_socket;
+ int net_error = bound_socket.Bind(NetAddressPtr());
+ if (net_error != net::OK) {
+ callback.Run(MakeNetworkError(net_error), NetAddressPtr());
+ return;
+ }
+
+ bound_socket.Connect(
+ remote_address.Pass(), send_stream.Pass(), receive_stream.Pass(),
+ client_socket.Pass(),
+ base::Bind(&BoundAddressCallbackAdapter,
+ callback,
+ base::Passed(bound_socket.GetLocalAddress().Pass())));
}
} // namespace mojo
« no previous file with comments | « mojo/services/network/network_service_impl.h ('k') | mojo/services/network/tcp_bound_socket_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698