23 #include "../../encoding/buffer.hpp"
24 #include "../detail/openssl.hpp"
39 ,
m_sink(BIO_new(BIO_s_mem()))
59 BIO_set_flags(m_impl->m_base64, BIO_FLAGS_BASE64_NO_NL);
63 Base64Encode::preTransform()
69 Base64Encode::convert(
const uint8_t* data,
size_t dataLen)
74 int wLen = BIO_write(m_impl->m_base64, data, dataLen);
77 if (!BIO_should_retry(m_impl->m_base64)) {
79 BOOST_THROW_EXCEPTION(Error(
getIndex(),
"Failed to accept more input"));
90 Base64Encode::finalize()
92 if (BIO_flush(m_impl->m_base64) != 1)
93 BOOST_THROW_EXCEPTION(Error(
getIndex(),
"Failed to flush"));
95 while (!isConverterEmpty()) {
104 Base64Encode::fillOutputBuffer()
106 int nRead = BIO_pending(m_impl->m_sink);
111 auto buffer = make_unique<OBuffer>(nRead);
112 int rLen = BIO_read(m_impl->m_sink, &(*buffer)[0], nRead);
117 buffer->erase(buffer->begin() + rLen, buffer->end());
122 Base64Encode::isConverterEmpty()
124 return (BIO_pending(m_impl->m_sink) <= 0);
127 unique_ptr<Transform>
130 return make_unique<Base64Encode>(needBreak);
Copyright (c) 2013-2016 Regents of the University of California.