SocketEvents::~SocketEvents(void)
{
- Unregister();
+ ASSERT(m_FD == INVALID_SOCKET);
}
void SocketEvents::Register(void)
{
+ ASSERT(m_FD != INVALID_SOCKET);
+
SocketEventDescriptor desc;
desc.Events = 0;
desc.EventInterface = this;
{
boost::mutex::scoped_lock lock(l_SocketIOMutex);
+ ASSERT(l_SocketIOSockets.find(m_FD) == l_SocketIOSockets.end());
+
l_SocketIOSockets[m_FD] = desc;
}
void SocketEvents::Unregister(void)
{
+ if (m_FD == INVALID_SOCKET)
+ return;
+
{
boost::mutex::scoped_lock lock(l_SocketIOMutex);
l_SocketIOSockets.erase(m_FD);
+ m_FD = INVALID_SOCKET;
}
- /* There's no need to wake up the I/O thread here. */
+ WakeUpThread();
}
void SocketEvents::ChangeEvents(int events)
{
+ ASSERT(m_FD != INVALID_SOCKET);
+
{
boost::mutex::scoped_lock lock(l_SocketIOMutex);
SSL_set_connect_state(m_SSL.get());
}
+TlsStream::~TlsStream(void)
+{
+ SocketEvents::Unregister();
+}
+
int TlsStream::ValidateCertificate(int preverify_ok, X509_STORE_CTX *ctx)
{
SSL *ssl = static_cast<SSL *>(X509_STORE_CTX_get_ex_data(ctx, SSL_get_ex_data_X509_STORE_CTX_idx()));
DECLARE_PTR_TYPEDEFS(TlsStream);
TlsStream(const Socket::Ptr& socket, ConnectionRole role, const boost::shared_ptr<SSL_CTX>& sslContext);
+ ~TlsStream(void);
boost::shared_ptr<X509> GetClientCertificate(void) const;
boost::shared_ptr<X509> GetPeerCertificate(void) const;