58 const std::shared_ptr<RandomNumberGenerator>&
rng,
59 const std::shared_ptr<const Policy>&
policy,
71 size_t from_peer(std::span<const uint8_t> data)
override;
72 void to_peer(std::span<const uint8_t> data)
override;
131 void renegotiate(
bool force_full_renegotiation =
false)
override;
154 const std::optional<Active_Connection_State_12>&
active_state()
const {
return m_active_state; }
158 const std::vector<uint8_t>& contents,
159 bool epoch0_restart) = 0;
200 void send_record(
Record_Type record_type,
const std::vector<uint8_t>& record);
202 void send_record_under_epoch(uint16_t epoch,
Record_Type record_type,
const std::vector<uint8_t>& record);
204 void send_record_array(uint16_t epoch,
Record_Type record_type,
const uint8_t input[],
size_t length);
214 std::vector<Session_Handle> take_sessions_to_invalidate();
216 void invalidate_sessions(
const std::vector<Session_Handle>& handles);
220 std::shared_ptr<Connection_Cipher_State> read_cipher_state_epoch(uint16_t epoch)
const;
222 std::shared_ptr<Connection_Cipher_State> write_cipher_state_epoch(uint16_t epoch)
const;
224 const Handshake_State* pending_state()
const {
return m_pending_state.get(); }
228 uint64_t record_sequence,
231 bool epoch0_restart);
237 const bool m_is_server;
238 const bool m_is_datagram;
241 std::shared_ptr<Callbacks> m_callbacks;
244 std::shared_ptr<Session_Manager> m_session_manager;
245 std::shared_ptr<const Policy> m_policy;
246 std::shared_ptr<RandomNumberGenerator> m_rng;
249 std::unique_ptr<Connection_Sequence_Numbers> m_sequence_numbers;
252 std::unique_ptr<Handshake_State> m_pending_state;
255 std::optional<Session_Handle> m_resumption_handle;
262 struct Epochs_Before_Latest_Renegotiation final {
264 uint16_t write_epoch;
267 void abandon_timed_out_handshake();
271 bool pending_handshake_epochs_unmoved()
const;
274 void clear_pending_handshake_state();
286 struct Retained_Read_Cipher_State final {
287 std::shared_ptr<Connection_Cipher_State> state;
288 std::optional<uint64_t> retired_at;
292 std::map<uint16_t, std::shared_ptr<Connection_Cipher_State>> m_write_cipher_states;
293 std::map<uint16_t, Retained_Read_Cipher_State> m_read_cipher_states;
300 bool m_has_been_closed;
304 bool m_had_fatal_alert =
false;
308 bool m_peer_closed_connection =
false;
310 std::optional<Active_Connection_State_12> m_active_state;
312 std::optional<Epochs_Before_Latest_Renegotiation> m_epochs_before_latest_renegotiation;
Channel_Impl_12(const std::shared_ptr< Callbacks > &callbacks, const std::shared_ptr< Session_Manager > &session_manager, const std::shared_ptr< RandomNumberGenerator > &rng, const std::shared_ptr< const Policy > &policy, bool is_server, bool is_datagram, size_t io_buf_sz=TLS::Channel::IO_BUF_DEFAULT_SIZE)