9 #include <botan/tls_blocking.h>
25 const std::vector<std::string>& next) :
33 m_channel(*m_callbacks.get(),
44 bool Blocking_Client::handshake_cb(
const Session& session)
49 void Blocking_Client::alert_cb(
const Alert& alert)
54 void Blocking_Client::data_cb(
const uint8_t data[],
size_t data_len)
56 m_plaintext.insert(m_plaintext.end(), data, data + data_len);
61 std::vector<uint8_t> readbuf(4096);
65 const size_t from_socket = m_read(readbuf.data(), readbuf.size());
72 std::vector<uint8_t> readbuf(4096);
74 while(m_plaintext.empty() && !m_channel.
is_closed())
76 const size_t from_socket = m_read(readbuf.data(), readbuf.size());
80 const size_t returned =
std::min(buf_len, m_plaintext.size());
82 for(
size_t i = 0; i != returned; ++i)
83 buf[i] = m_plaintext[i];
84 m_plaintext.erase(m_plaintext.begin(), m_plaintext.begin() + returned);
87 "Only return zero if channel is closed");
std::function< size_t(uint8_t[], size_t)> read_fn
virtual void alert_notification(const Alert &)
std::function< void(const uint8_t[], size_t)> write_fn
virtual bool handshake_complete(const Session &)
size_t received_data(const uint8_t buf[], size_t buf_size)
Blocking_Client(read_fn reader, write_fn writer, Session_Manager &session_manager, Credentials_Manager &creds, const Policy &policy, RandomNumberGenerator &rng, const Server_Information &server_info=Server_Information(), const Protocol_Version &offer_version=Protocol_Version::latest_tls_version(), const std::vector< std::string > &next_protos={})
#define BOTAN_ASSERT_IMPLICATION(expr1, expr2, msg)
size_t read(uint8_t buf[], size_t buf_len)