9 #ifndef BOTAN_TLS_CALLBACKS_H__
10 #define BOTAN_TLS_CALLBACKS_H__
12 #include <botan/tls_session.h>
13 #include <botan/tls_alert.h>
17 class Certificate_Store;
18 class X509_Certificate;
28 class Handshake_Message;
51 virtual void tls_emit_data(
const uint8_t data[],
size_t size) = 0;
64 virtual void tls_record_received(uint64_t seq_no,
const uint8_t data[],
size_t size) = 0;
74 virtual void tls_alert(
Alert alert) = 0;
86 virtual bool tls_session_established(
const Session& session) = 0;
124 virtual void tls_verify_cert_chain(
125 const std::vector<X509_Certificate>& cert_chain,
126 const std::vector<std::shared_ptr<const OCSP::Response>>& ocsp_responses,
127 const std::vector<Certificate_Store*>& trusted_roots,
129 const std::string& hostname,
138 return std::chrono::milliseconds(0);
163 virtual std::string tls_server_choose_app_protocol(
const std::vector<std::string>& client_protos);
205 typedef std::function<void (const uint8_t[], size_t)>
output_fn;
206 typedef std::function<void (const uint8_t[], size_t)>
data_cb;
207 typedef std::function<void (Alert, const uint8_t[], size_t)>
alert_cb;
227 handshake_cb hs_cb, handshake_msg_cb hs_msg_cb =
nullptr,
229 : m_output_function(output_fn), m_app_data_cb(app_data_cb),
230 m_alert_cb(
std::bind(alert_cb,
std::placeholders::_1,
nullptr, 0)),
231 m_hs_cb(hs_cb), m_hs_msg_cb(hs_msg_cb), m_next_proto(next_proto) {}
235 std::function<
void (
Alert)> alert_cb,
237 handshake_msg_cb hs_msg_cb =
nullptr,
239 : m_output_function(output_fn), m_app_data_cb(app_data_cb),
240 m_alert_cb(alert_cb),
241 m_hs_cb(hs_cb), m_hs_msg_cb(hs_msg_cb), m_next_proto(next_proto) {}
246 "Invalid TLS output function callback.");
247 m_output_function(data, size);
253 "Invalid TLS app data callback.");
254 m_app_data_cb(data, size);
260 "Invalid TLS alert callback.");
267 "Invalid TLS handshake callback.");
268 return m_hs_cb(session);
273 if(m_next_proto !=
nullptr) {
return m_next_proto(client_protos); }
281 if(m_hs_msg_cb !=
nullptr) { m_hs_msg_cb(hmsg); }
285 const output_fn m_output_function;
286 const data_cb m_app_data_cb;
287 const std::function<void (Alert)> m_alert_cb;
288 const handshake_cb m_hs_cb;
289 const handshake_msg_cb m_hs_msg_cb;
290 const next_protocol_fn m_next_proto;
std::function< void(const uint8_t[], size_t)> data_cb
void tls_emit_data(const uint8_t data[], size_t size) override
virtual void tls_log_debug(const char *what)
void tls_alert(Alert alert) override
#define BOTAN_ASSERT(expr, assertion_made)
std::function< bool(const Session &)> handshake_cb
class BOTAN_DLL BOTAN_DEPRECATED("LibraryInitializer is no longer required") LibraryInitializer
std::function< void(Alert, const uint8_t[], size_t)> alert_cb
bool tls_session_established(const Session &session) override
virtual void tls_session_activated()
std::function< void(const uint8_t[], size_t)> output_fn
std::function< void(const Handshake_Message &)> handshake_msg_cb
std::function< std::string(std::vector< std::string >)> next_protocol_fn
void tls_inspect_handshake_msg(const Handshake_Message &hmsg) override
virtual std::chrono::milliseconds tls_verify_cert_chain_ocsp_timeout() const
std::string tls_server_choose_app_protocol(const std::vector< std::string > &client_protos) override
virtual void tls_log_error(const char *err)
virtual void tls_log_debug_bin(const char *descr, const uint8_t val[], size_t val_len)
void tls_record_received(uint64_t, const uint8_t data[], size_t size) override