*/
shared_ptr<X509> TlsStream::GetClientCertificate(void) const
{
+ boost::mutex::scoped_lock lock(m_SSLLock);
return shared_ptr<X509>(SSL_get_certificate(m_SSL.get()), &Utility::NullDeleter);
}
*/
shared_ptr<X509> TlsStream::GetPeerCertificate(void) const
{
+ boost::mutex::scoped_lock lock(m_SSLLock);
return shared_ptr<X509>(SSL_get_peer_certificate(m_SSL.get()), X509_free);
}
for (;;) {
int rc, err;
- rc = SSL_do_handshake(m_SSL.get());
+ {
+ boost::mutex::scoped_lock lock(m_SSLLock);
+ rc = SSL_do_handshake(m_SSL.get());
- if (rc > 0)
- break;
+ if (rc > 0)
+ break;
- err = SSL_get_error(m_SSL.get(), rc);
+ err = SSL_get_error(m_SSL.get(), rc);
+ }
switch (err) {
case SSL_ERROR_WANT_READ:
while (left > 0) {
int rc, err;
- rc = SSL_read(m_SSL.get(), ((char *)buffer) + (count - left), left);
+ {
+ boost::mutex::scoped_lock lock(m_SSLLock);
+ rc = SSL_read(m_SSL.get(), ((char *)buffer) + (count - left), left);
- if (rc <= 0)
- err = SSL_get_error(m_SSL.get(), rc);
+ if (rc <= 0)
+ err = SSL_get_error(m_SSL.get(), rc);
+ }
if (rc <= 0) {
switch (err) {
while (left > 0) {
int rc, err;
- rc = SSL_write(m_SSL.get(), ((const char *)buffer) + (count - left), left);
+ {
+ boost::mutex::scoped_lock lock(m_SSLLock);
+ rc = SSL_write(m_SSL.get(), ((const char *)buffer) + (count - left), left);
- if (rc <= 0)
- err = SSL_get_error(m_SSL.get(), rc);
+ if (rc <= 0)
+ err = SSL_get_error(m_SSL.get(), rc);
+ }
if (rc <= 0) {
switch (err) {
*/
void TlsStream::Close(void)
{
- for (;;) {
+ for (int i = 0; i < 5; i++) {
int rc, err;
do {