| 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
|
|
|