aboutsummaryrefslogtreecommitdiffstats
path: root/src/net/tls
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/net/tls/gnutls/TLSSocket_GnuTLS.cpp40
-rw-r--r--src/net/tls/openssl/TLSSocket_OpenSSL.cpp36
2 files changed, 49 insertions, 27 deletions
diff --git a/src/net/tls/gnutls/TLSSocket_GnuTLS.cpp b/src/net/tls/gnutls/TLSSocket_GnuTLS.cpp
index bb21cb9d..5a90565b 100644
--- a/src/net/tls/gnutls/TLSSocket_GnuTLS.cpp
+++ b/src/net/tls/gnutls/TLSSocket_GnuTLS.cpp
@@ -37,6 +37,10 @@
#include "vmime/security/cert/X509Certificate.hpp"
+#include "vmime/utility/stringUtils.hpp"
+
+#include <cstring>
+
namespace vmime {
namespace net {
@@ -110,7 +114,7 @@ bool TLSSocket_GnuTLS::isConnected() const
}
-TLSSocket::size_type TLSSocket_GnuTLS::getBlockSize() const
+size_t TLSSocket_GnuTLS::getBlockSize() const
{
return 16384; // 16 KB
}
@@ -130,18 +134,24 @@ const string TLSSocket_GnuTLS::getPeerAddress() const
void TLSSocket_GnuTLS::receive(string& buffer)
{
- const int size = receiveRaw(m_buffer, sizeof(m_buffer));
- buffer = vmime::string(m_buffer, size);
+ const size_t size = receiveRaw(m_buffer, sizeof(m_buffer));
+ buffer = utility::stringUtils::makeStringFromBytes(m_buffer, size);
}
void TLSSocket_GnuTLS::send(const string& buffer)
{
- sendRaw(buffer.data(), buffer.length());
+ sendRaw(reinterpret_cast <const byte_t*>(buffer.data()), buffer.length());
}
-TLSSocket::size_type TLSSocket_GnuTLS::receiveRaw(char* buffer, const size_type count)
+void TLSSocket_GnuTLS::send(const char* str)
+{
+ sendRaw(reinterpret_cast <const byte_t*>(str), ::strlen(str));
+}
+
+
+size_t TLSSocket_GnuTLS::receiveRaw(byte_t* buffer, const size_t count)
{
m_status &= ~STATUS_WOULDBLOCK;
@@ -160,14 +170,14 @@ TLSSocket::size_type TLSSocket_GnuTLS::receiveRaw(char* buffer, const size_type
return 0;
}
- TLSSession_GnuTLS::throwTLSException("gnutls_record_recv", ret);
+ TLSSession_GnuTLS::throwTLSException("gnutls_record_recv", static_cast <int>(ret));
}
- return static_cast <size_type>(ret);
+ return static_cast <size_t>(ret);
}
-void TLSSocket_GnuTLS::sendRaw(const char* buffer, const size_type count)
+void TLSSocket_GnuTLS::sendRaw(const byte_t* buffer, const size_t count)
{
ssize_t ret = gnutls_record_send
(*m_session->m_gnutlsSession,
@@ -184,12 +194,12 @@ void TLSSocket_GnuTLS::sendRaw(const char* buffer, const size_type count)
return;
}
- TLSSession_GnuTLS::throwTLSException("gnutls_record_send", ret);
+ TLSSession_GnuTLS::throwTLSException("gnutls_record_send", static_cast <int>(ret));
}
}
-TLSSocket::size_type TLSSocket_GnuTLS::sendRawNonBlocking(const char* buffer, const size_type count)
+size_t TLSSocket_GnuTLS::sendRawNonBlocking(const byte_t* buffer, const size_t count)
{
ssize_t ret = gnutls_record_send
(*m_session->m_gnutlsSession,
@@ -209,7 +219,7 @@ TLSSocket::size_type TLSSocket_GnuTLS::sendRawNonBlocking(const char* buffer, co
TLSSession_GnuTLS::throwTLSException("gnutls_record_send", static_cast <int>(ret));
}
- return static_cast <size_type>(ret);
+ return static_cast <size_t>(ret);
}
@@ -288,7 +298,7 @@ ssize_t TLSSocket_GnuTLS::gnutlsPushFunc
try
{
sok->m_wrapped->sendRaw
- (reinterpret_cast <const char*>(data), static_cast <int>(len));
+ (reinterpret_cast <const byte_t*>(data), len);
}
catch (exception& e)
{
@@ -318,8 +328,7 @@ ssize_t TLSSocket_GnuTLS::gnutlsPullFunc
{
const ssize_t ret = static_cast <ssize_t>
(sok->m_wrapped->receiveRaw
- (reinterpret_cast <char*>(data),
- static_cast <int>(len)));
+ (reinterpret_cast <byte_t*>(data), len));
if (ret == 0)
{
@@ -345,8 +354,7 @@ ssize_t TLSSocket_GnuTLS::gnutlsPullFunc
{
const ssize_t n = static_cast <ssize_t>
(sok->m_wrapped->receiveRaw
- (reinterpret_cast <char*>(data),
- static_cast <int>(len)));
+ (reinterpret_cast <byte_t*>(data), len));
if (n == 0 && sok->m_wrapped->getStatus() & socket::STATUS_WOULDBLOCK)
return GNUTLS_E_AGAIN;
diff --git a/src/net/tls/openssl/TLSSocket_OpenSSL.cpp b/src/net/tls/openssl/TLSSocket_OpenSSL.cpp
index 9aec43e5..8f304c78 100644
--- a/src/net/tls/openssl/TLSSocket_OpenSSL.cpp
+++ b/src/net/tls/openssl/TLSSocket_OpenSSL.cpp
@@ -38,7 +38,10 @@
#include "vmime/security/cert/openssl/X509Certificate_OpenSSL.hpp"
+#include "vmime/utility/stringUtils.hpp"
+
#include <vector>
+#include <cstring>
namespace vmime {
@@ -60,7 +63,8 @@ BIO_METHOD TLSSocket_OpenSSL::sm_customBIOMethod =
TLSSocket_OpenSSL::bio_gets,
TLSSocket_OpenSSL::bio_ctrl,
TLSSocket_OpenSSL::bio_create,
- TLSSocket_OpenSSL::bio_destroy
+ TLSSocket_OpenSSL::bio_destroy,
+ 0
};
@@ -160,7 +164,7 @@ bool TLSSocket_OpenSSL::isConnected() const
}
-TLSSocket::size_type TLSSocket_OpenSSL::getBlockSize() const
+size_t TLSSocket_OpenSSL::getBlockSize() const
{
return 16384; // 16 KB
}
@@ -180,20 +184,28 @@ const string TLSSocket_OpenSSL::getPeerAddress() const
void TLSSocket_OpenSSL::receive(string& buffer)
{
- const size_type size = receiveRaw(m_buffer, sizeof(m_buffer));
+ const size_t size = receiveRaw(m_buffer, sizeof(m_buffer));
- if (size >= 0)
- buffer = vmime::string(m_buffer, size);
+ if (size != 0)
+ buffer = utility::stringUtils::makeStringFromBytes(m_buffer, size);
+ else
+ buffer.clear();
}
void TLSSocket_OpenSSL::send(const string& buffer)
{
- sendRaw(buffer.data(), buffer.length());
+ sendRaw(reinterpret_cast <const byte_t*>(buffer.data()), buffer.length());
+}
+
+
+void TLSSocket_OpenSSL::send(const char* str)
+{
+ sendRaw(reinterpret_cast <const byte_t*>(str), ::strlen(str));
}
-TLSSocket::size_type TLSSocket_OpenSSL::receiveRaw(char* buffer, const size_type count)
+size_t TLSSocket_OpenSSL::receiveRaw(byte_t* buffer, const size_t count)
{
int rc = SSL_read(m_ssl, buffer, static_cast <int>(count));
handleError(rc);
@@ -205,14 +217,14 @@ TLSSocket::size_type TLSSocket_OpenSSL::receiveRaw(char* buffer, const size_type
}
-void TLSSocket_OpenSSL::sendRaw(const char* buffer, const size_type count)
+void TLSSocket_OpenSSL::sendRaw(const byte_t* buffer, const size_t count)
{
int rc = SSL_write(m_ssl, buffer, static_cast <int>(count));
handleError(rc);
}
-TLSSocket_OpenSSL::size_type TLSSocket_OpenSSL::sendRawNonBlocking(const char* buffer, const size_type count)
+size_t TLSSocket_OpenSSL::sendRawNonBlocking(const byte_t* buffer, const size_t count)
{
int rc = SSL_write(m_ssl, buffer, static_cast <int>(count));
handleError(rc);
@@ -391,7 +403,8 @@ int TLSSocket_OpenSSL::bio_write(BIO* bio, const char* buf, int len)
{
BIO_clear_retry_flags(bio);
- const size_type n = sok->m_wrapped->sendRawNonBlocking(buf, len);
+ const size_t n = sok->m_wrapped->sendRawNonBlocking
+ (reinterpret_cast <const byte_t*>(buf), len);
BIO_clear_retry_flags(bio);
@@ -422,7 +435,8 @@ int TLSSocket_OpenSSL::bio_read(BIO* bio, char* buf, int len)
try
{
- const size_type n = sok->m_wrapped->receiveRaw(buf, len);
+ const size_t n = sok->m_wrapped->receiveRaw
+ (reinterpret_cast <byte_t*>(buf), len);
BIO_clear_retry_flags(bio);