diff options
Diffstat (limited to '')
-rw-r--r-- | src/net/tls/gnutls/TLSSocket_GnuTLS.cpp | 40 | ||||
-rw-r--r-- | src/net/tls/openssl/TLSSocket_OpenSSL.cpp | 36 |
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); |