1*3f982cf4SFabien Sanglard // Copyright 2019 The Chromium Authors. All rights reserved. 2*3f982cf4SFabien Sanglard // Use of this source code is governed by a BSD-style license that can be 3*3f982cf4SFabien Sanglard // found in the LICENSE file. 4*3f982cf4SFabien Sanglard 5*3f982cf4SFabien Sanglard #ifndef PLATFORM_API_TLS_CONNECTION_H_ 6*3f982cf4SFabien Sanglard #define PLATFORM_API_TLS_CONNECTION_H_ 7*3f982cf4SFabien Sanglard 8*3f982cf4SFabien Sanglard #include <cstdint> 9*3f982cf4SFabien Sanglard #include <vector> 10*3f982cf4SFabien Sanglard 11*3f982cf4SFabien Sanglard #include "platform/base/error.h" 12*3f982cf4SFabien Sanglard #include "platform/base/ip_address.h" 13*3f982cf4SFabien Sanglard 14*3f982cf4SFabien Sanglard namespace openscreen { 15*3f982cf4SFabien Sanglard 16*3f982cf4SFabien Sanglard class TlsConnection { 17*3f982cf4SFabien Sanglard public: 18*3f982cf4SFabien Sanglard // Client callbacks are run via the TaskRunner used by TlsConnectionFactory. 19*3f982cf4SFabien Sanglard class Client { 20*3f982cf4SFabien Sanglard public: 21*3f982cf4SFabien Sanglard // Called when |connection| experiences an error, such as a read error. 22*3f982cf4SFabien Sanglard virtual void OnError(TlsConnection* connection, Error error) = 0; 23*3f982cf4SFabien Sanglard 24*3f982cf4SFabien Sanglard // Called when a |block| arrives on |connection|. 25*3f982cf4SFabien Sanglard virtual void OnRead(TlsConnection* connection, 26*3f982cf4SFabien Sanglard std::vector<uint8_t> block) = 0; 27*3f982cf4SFabien Sanglard 28*3f982cf4SFabien Sanglard protected: 29*3f982cf4SFabien Sanglard virtual ~Client(); 30*3f982cf4SFabien Sanglard }; 31*3f982cf4SFabien Sanglard 32*3f982cf4SFabien Sanglard virtual ~TlsConnection(); 33*3f982cf4SFabien Sanglard 34*3f982cf4SFabien Sanglard // Sets the Client associated with this instance. This should be called as 35*3f982cf4SFabien Sanglard // soon as the factory provides a new TlsConnection instance via 36*3f982cf4SFabien Sanglard // TlsConnectionFactory::OnAccepted() or OnConnected(). Pass nullptr to unset 37*3f982cf4SFabien Sanglard // the Client. 38*3f982cf4SFabien Sanglard virtual void SetClient(Client* client) = 0; 39*3f982cf4SFabien Sanglard 40*3f982cf4SFabien Sanglard // Sends a message. Returns true iff the message will be sent. 41*3f982cf4SFabien Sanglard [[nodiscard]] virtual bool Send(const void* data, size_t len) = 0; 42*3f982cf4SFabien Sanglard 43*3f982cf4SFabien Sanglard // Get the connected remote address. 44*3f982cf4SFabien Sanglard virtual IPEndpoint GetRemoteEndpoint() const = 0; 45*3f982cf4SFabien Sanglard 46*3f982cf4SFabien Sanglard protected: 47*3f982cf4SFabien Sanglard TlsConnection(); 48*3f982cf4SFabien Sanglard }; 49*3f982cf4SFabien Sanglard 50*3f982cf4SFabien Sanglard } // namespace openscreen 51*3f982cf4SFabien Sanglard 52*3f982cf4SFabien Sanglard #endif // PLATFORM_API_TLS_CONNECTION_H_ 53