// 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 #include #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 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_