blob: 4d409cb54f9b0c625b75206c6ae2559731dee696 [file] [log] [blame]
// Copyright 2019 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 PLATFORM_API_TLS_CONNECTION_H_
#define PLATFORM_API_TLS_CONNECTION_H_
#include <cstdint>
#include <vector>
#include "platform/base/error.h"
#include "platform/base/ip_address.h"
namespace openscreen {
class TlsConnection {
public:
// Client callbacks are run via the TaskRunner used by TlsConnectionFactory.
class Client {
public:
// Called when |connection| experiences an error, such as a read error.
virtual void OnError(TlsConnection* connection, Error error) = 0;
// Called when a |block| arrives on |connection|.
virtual void OnRead(TlsConnection* connection,
std::vector<uint8_t> block) = 0;
protected:
virtual ~Client() = default;
};
virtual ~TlsConnection();
// Sets the Client associated with this instance. This should be called as
// soon as the factory provides a new TlsConnection instance via
// TlsConnectionFactory::OnAccepted() or OnConnected(). Pass nullptr to unset
// the Client.
virtual void SetClient(Client* client) = 0;
// Sends a message. Returns true iff the message will be sent.
[[nodiscard]] virtual bool Send(const void* data, size_t len) = 0;
// Get the local address.
virtual IPEndpoint GetLocalEndpoint() const = 0;
// Get the connected remote address.
virtual IPEndpoint GetRemoteEndpoint() const = 0;
protected:
TlsConnection();
};
} // namespace openscreen
#endif // PLATFORM_API_TLS_CONNECTION_H_