blob: 67e257e2f084a785aae1ef928abff1d96154d701 [file] [log] [blame]
// Copyright 2018 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.
#ifndef SERVICES_NETWORK_TLS_CLIENT_SOCKET_H_
#define SERVICES_NETWORK_TLS_CLIENT_SOCKET_H_
#include <memory>
#include "base/component_export.h"
#include "base/macros.h"
#include "net/base/address_family.h"
#include "net/traffic_annotation/network_traffic_annotation.h"
#include "services/network/public/mojom/address_family.mojom.h"
#include "services/network/public/mojom/ip_endpoint.mojom.h"
#include "services/network/public/mojom/tcp_socket.mojom.h"
#include "services/network/public/mojom/tls_socket.mojom.h"
#include "services/network/socket_data_pump.h"
namespace net {
class ClientSocketFactory;
class SSLClientContext;
class SSLClientSocket;
class StreamSocket;
} // namespace net
namespace network {
class COMPONENT_EXPORT(NETWORK_SERVICE) TLSClientSocket
: public mojom::TLSClientSocket,
public SocketDataPump::Delegate {
public:
TLSClientSocket(mojom::TLSClientSocketRequest request,
mojom::SocketObserverPtr observer,
const net::NetworkTrafficAnnotationTag& traffic_annotation);
~TLSClientSocket() override;
void Connect(const net::HostPortPair& host_port_pair,
const net::SSLConfig& ssl_config,
std::unique_ptr<net::StreamSocket> tcp_socket,
net::SSLClientContext* ssl_client_context,
net::ClientSocketFactory* socket_factory,
mojom::TCPConnectedSocket::UpgradeToTLSCallback callback,
bool send_ssl_info);
private:
void OnTLSConnectCompleted(int result);
// SocketDataPump::Delegate implementation.
void OnNetworkReadError(int net_error) override;
void OnNetworkWriteError(int net_error) override;
void OnShutdown() override;
const mojom::SocketObserverPtr observer_;
std::unique_ptr<SocketDataPump> socket_data_pump_;
std::unique_ptr<net::SSLClientSocket> socket_;
mojom::TCPConnectedSocket::UpgradeToTLSCallback connect_callback_;
bool send_ssl_info_ = false;
const net::NetworkTrafficAnnotationTag traffic_annotation_;
DISALLOW_COPY_AND_ASSIGN(TLSClientSocket);
};
} // namespace network
#endif // SERVICES_NETWORK_TLS_CLIENT_SOCKET_H_