#include "base/tlsstream.hpp"
#include "base/utility.hpp"
#include "base/exception.hpp"
-#include "base/objectlock.hpp"
#include "base/logger_fwd.hpp"
#include <boost/bind.hpp>
#include <iostream>
}
void TlsStream::Write(const void *buffer, size_t count)
-{
- {
- ObjectLock olock(&m_SendQ);
- m_SendQ.Write(buffer, count);
- }
-
- Utility::QueueAsyncCallback(boost::bind(&TlsStream::FinishAsyncWrite, this));
-}
-
-void TlsStream::FinishAsyncWrite(void)
-{
- boost::mutex::scoped_lock lock(m_WriteMutex);
-
- for (;;) {
- ObjectLock olock(&m_SendQ);
- char buffer[1024];
- size_t count = m_SendQ.Read(buffer, sizeof(buffer));
-
- if (count == 0)
- break; /* No more data in the sendq */
-
- WriteSync(buffer, count);
- }
-}
-
-void TlsStream::WriteSync(const void *buffer, size_t count)
{
size_t left = count;
#include "base/i2-base.hpp"
#include "base/socket.hpp"
#include "base/stream.hpp"
-#include "base/fifo.hpp"
#include "base/tlsutility.hpp"
namespace icinga
virtual size_t Read(void *buffer, size_t count);
virtual void Write(const void *buffer, size_t count);
- void WriteSync(const void *buffer, size_t count);
virtual bool IsEof(void) const;
boost::mutex m_SSLLock;
shared_ptr<SSL> m_SSL;
BIO *m_BIO;
-
- boost::mutex m_WriteMutex;
- FIFO m_SendQ;
Socket::Ptr m_Socket;
ConnectionRole m_Role;
static bool m_SSLIndexInitialized;
static void NullCertificateDeleter(X509 *certificate);
-
- void FinishAsyncWrite(void);
};
}