blob: 1f47bce616bd84266d2d979d3a351a49de4d7260 [file] [log] [blame]
Jordan Bayles1c785bd2019-08-15 10:32:33 -07001// Copyright 2019 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef PLATFORM_API_TLS_CONNECTION_H_
6#define PLATFORM_API_TLS_CONNECTION_H_
7
8#include <cstdint>
Jordan Bayles1c785bd2019-08-15 10:32:33 -07009#include <vector>
10
Jordan Bayles1c785bd2019-08-15 10:32:33 -070011#include "platform/base/error.h"
12#include "platform/base/ip_address.h"
Jordan Bayles1c785bd2019-08-15 10:32:33 -070013
14namespace openscreen {
Jordan Bayles1c785bd2019-08-15 10:32:33 -070015
16class TlsConnection {
17 public:
Yuri Wiitalafb75b092019-11-14 14:13:18 -080018 // Client callbacks are run via the TaskRunner used by TlsConnectionFactory.
Jordan Bayles1c785bd2019-08-15 10:32:33 -070019 class Client {
20 public:
Jordan Bayles1c785bd2019-08-15 10:32:33 -070021 // Called when |connection| experiences an error, such as a read error.
Jordan Baylesf46c0a62019-09-20 11:37:42 -070022 virtual void OnError(TlsConnection* connection, Error error) = 0;
Jordan Bayles1c785bd2019-08-15 10:32:33 -070023
Jordan Baylesf46c0a62019-09-20 11:37:42 -070024 // Called when a |block| arrives on |connection|.
25 virtual void OnRead(TlsConnection* connection,
26 std::vector<uint8_t> block) = 0;
Jordan Bayles1c785bd2019-08-15 10:32:33 -070027
28 protected:
Abraham Corea Diazbffb5c22021-07-09 23:35:39 +000029 virtual ~Client();
Jordan Bayles1c785bd2019-08-15 10:32:33 -070030 };
31
Yuri Wiitalafb75b092019-11-14 14:13:18 -080032 virtual ~TlsConnection();
33
34 // Sets the Client associated with this instance. This should be called as
35 // soon as the factory provides a new TlsConnection instance via
36 // TlsConnectionFactory::OnAccepted() or OnConnected(). Pass nullptr to unset
37 // the Client.
38 virtual void SetClient(Client* client) = 0;
39
Yuri Wiitala910cb7f2020-01-14 13:37:32 -080040 // Sends a message. Returns true iff the message will be sent.
Yuri Wiitala38665792020-01-17 15:40:16 -080041 [[nodiscard]] virtual bool Send(const void* data, size_t len) = 0;
Jordan Bayles1c785bd2019-08-15 10:32:33 -070042
Jordan Bayles1c785bd2019-08-15 10:32:33 -070043 // Get the connected remote address.
Yuri Wiitalafb75b092019-11-14 14:13:18 -080044 virtual IPEndpoint GetRemoteEndpoint() const = 0;
Ryan Keanefdebe6c2019-09-06 14:12:51 -070045
Jordan Bayles1c785bd2019-08-15 10:32:33 -070046 protected:
Yuri Wiitalafb75b092019-11-14 14:13:18 -080047 TlsConnection();
Jordan Bayles1c785bd2019-08-15 10:32:33 -070048};
49
Jordan Bayles1c785bd2019-08-15 10:32:33 -070050} // namespace openscreen
51
52#endif // PLATFORM_API_TLS_CONNECTION_H_