diff options
Diffstat (limited to 'src/vmime/net')
-rw-r--r-- | src/vmime/net/imap/IMAPConnection.cpp | 1 | ||||
-rw-r--r-- | src/vmime/net/pop3/POP3Connection.cpp | 1 | ||||
-rw-r--r-- | src/vmime/net/smtp/SMTPConnection.cpp | 1 | ||||
-rw-r--r-- | src/vmime/net/socket.hpp | 15 | ||||
-rw-r--r-- | src/vmime/net/tls/TLSSocket.hpp | 2 | ||||
-rw-r--r-- | src/vmime/net/tls/gnutls/TLSSocket_GnuTLS.cpp | 20 | ||||
-rw-r--r-- | src/vmime/net/tls/gnutls/TLSSocket_GnuTLS.hpp | 5 | ||||
-rw-r--r-- | src/vmime/net/tls/openssl/TLSSocket_OpenSSL.cpp | 20 | ||||
-rw-r--r-- | src/vmime/net/tls/openssl/TLSSocket_OpenSSL.hpp | 5 |
9 files changed, 65 insertions, 5 deletions
diff --git a/src/vmime/net/imap/IMAPConnection.cpp b/src/vmime/net/imap/IMAPConnection.cpp index 28a71662..71e409c3 100644 --- a/src/vmime/net/imap/IMAPConnection.cpp +++ b/src/vmime/net/imap/IMAPConnection.cpp @@ -119,6 +119,7 @@ void IMAPConnection::connect() // Create and connect the socket m_socket = store->getSocketFactory()->create(m_timeoutHandler); + m_socket->setTracer(m_tracer); #if VMIME_HAVE_TLS_SUPPORT if (store->isIMAPS()) // dedicated port/IMAPS diff --git a/src/vmime/net/pop3/POP3Connection.cpp b/src/vmime/net/pop3/POP3Connection.cpp index 0fd7e7ee..3f2cbe0b 100644 --- a/src/vmime/net/pop3/POP3Connection.cpp +++ b/src/vmime/net/pop3/POP3Connection.cpp @@ -106,6 +106,7 @@ void POP3Connection::connect() // Create and connect the socket m_socket = store->getSocketFactory()->create(m_timeoutHandler); + m_socket->setTracer(m_tracer); #if VMIME_HAVE_TLS_SUPPORT if (store->isPOP3S()) // dedicated port/POP3S diff --git a/src/vmime/net/smtp/SMTPConnection.cpp b/src/vmime/net/smtp/SMTPConnection.cpp index 99a8e8f5..60c8515d 100644 --- a/src/vmime/net/smtp/SMTPConnection.cpp +++ b/src/vmime/net/smtp/SMTPConnection.cpp @@ -107,6 +107,7 @@ void SMTPConnection::connect() // Create and connect the socket m_socket = transport->getSocketFactory()->create(m_timeoutHandler); + m_socket->setTracer(m_tracer); #if VMIME_HAVE_TLS_SUPPORT if (transport->isSMTPS()) // dedicated port/SMTPS diff --git a/src/vmime/net/socket.hpp b/src/vmime/net/socket.hpp index 72f0445f..2de83dd1 100644 --- a/src/vmime/net/socket.hpp +++ b/src/vmime/net/socket.hpp @@ -34,6 +34,7 @@ #include "vmime/base.hpp" #include "vmime/net/timeoutHandler.hpp" +#include "vmime/net/tracer.hpp" namespace vmime { @@ -168,6 +169,20 @@ public: */ virtual shared_ptr <timeoutHandler> getTimeoutHandler() = 0; + /** Set the tracer used by this socket. Tracer will only be used + * to report socket-specific events such as connection (not when + * sending/receiving data). + * + * @param tracer tracer to use + */ + virtual void setTracer(shared_ptr <tracer> tracer) = 0; + + /** Return the tracer used by this socket. + * + * @return tracer, or NULL if none is set + */ + virtual shared_ptr <tracer> getTracer() = 0; + protected: socket() { } diff --git a/src/vmime/net/tls/TLSSocket.hpp b/src/vmime/net/tls/TLSSocket.hpp index ec3a83ef..be27d1d0 100644 --- a/src/vmime/net/tls/TLSSocket.hpp +++ b/src/vmime/net/tls/TLSSocket.hpp @@ -74,7 +74,7 @@ public: * @return server certificate chain, or NULL if the handshake * has not been performed yet */ - virtual shared_ptr <security::cert::certificateChain> getPeerCertificates() const = 0; + virtual shared_ptr <security::cert::certificateChain> getPeerCertificates() = 0; }; diff --git a/src/vmime/net/tls/gnutls/TLSSocket_GnuTLS.cpp b/src/vmime/net/tls/gnutls/TLSSocket_GnuTLS.cpp index 33e25261..5bc8db84 100644 --- a/src/vmime/net/tls/gnutls/TLSSocket_GnuTLS.cpp +++ b/src/vmime/net/tls/gnutls/TLSSocket_GnuTLS.cpp @@ -147,6 +147,18 @@ shared_ptr <timeoutHandler> TLSSocket_GnuTLS::getTimeoutHandler() } +void TLSSocket_GnuTLS::setTracer(shared_ptr <net::tracer> tracer) +{ + m_wrapped->setTracer(tracer); +} + + +shared_ptr <net::tracer> TLSSocket_GnuTLS::getTracer() +{ + return m_wrapped->getTracer(); +} + + bool TLSSocket_GnuTLS::waitForRead(const int msecs) { return m_wrapped->waitForRead(msecs); @@ -287,6 +299,9 @@ void TLSSocket_GnuTLS::handshake() if (toHandler) toHandler->resetTimeOut(); + if (getTracer()) + getTracer()->traceSend("Beginning SSL/TLS handshake"); + // Start handshaking process try { @@ -406,8 +421,11 @@ ssize_t TLSSocket_GnuTLS::gnutlsPullFunc } -shared_ptr <security::cert::certificateChain> TLSSocket_GnuTLS::getPeerCertificates() const +shared_ptr <security::cert::certificateChain> TLSSocket_GnuTLS::getPeerCertificates() { + if (getTracer()) + getTracer()->traceSend("Getting peer certificates"); + unsigned int certCount = 0; const gnutls_datum* rawData = gnutls_certificate_get_peers (*m_session->m_gnutlsSession, &certCount); diff --git a/src/vmime/net/tls/gnutls/TLSSocket_GnuTLS.hpp b/src/vmime/net/tls/gnutls/TLSSocket_GnuTLS.hpp index 5c819caf..def45418 100644 --- a/src/vmime/net/tls/gnutls/TLSSocket_GnuTLS.hpp +++ b/src/vmime/net/tls/gnutls/TLSSocket_GnuTLS.hpp @@ -56,7 +56,7 @@ public: void handshake(); - shared_ptr <security::cert::certificateChain> getPeerCertificates() const; + shared_ptr <security::cert::certificateChain> getPeerCertificates(); // Implementation of 'socket' void connect(const string& address, const port_t port); @@ -83,6 +83,9 @@ public: shared_ptr <timeoutHandler> getTimeoutHandler(); + void setTracer(shared_ptr <net::tracer> tracer); + shared_ptr <net::tracer> getTracer(); + private: void internalThrow(); diff --git a/src/vmime/net/tls/openssl/TLSSocket_OpenSSL.cpp b/src/vmime/net/tls/openssl/TLSSocket_OpenSSL.cpp index bec41612..a716f5b2 100644 --- a/src/vmime/net/tls/openssl/TLSSocket_OpenSSL.cpp +++ b/src/vmime/net/tls/openssl/TLSSocket_OpenSSL.cpp @@ -193,6 +193,18 @@ shared_ptr <timeoutHandler> TLSSocket_OpenSSL::getTimeoutHandler() } +void TLSSocket_OpenSSL::setTracer(shared_ptr <net::tracer> tracer) +{ + m_wrapped->setTracer(tracer); +} + + +shared_ptr <net::tracer> TLSSocket_OpenSSL::getTracer() +{ + return m_wrapped->getTracer(); +} + + bool TLSSocket_OpenSSL::waitForRead(const int msecs) { return m_wrapped->waitForRead(msecs); @@ -343,6 +355,9 @@ void TLSSocket_OpenSSL::handshake() if (toHandler) toHandler->resetTimeOut(); + if (getTracer()) + getTracer()->traceSend("Beginning SSL/TLS handshake"); + // Start handshaking process if (!m_ssl) createSSLHandle(); @@ -389,8 +404,11 @@ void TLSSocket_OpenSSL::handshake() } -shared_ptr <security::cert::certificateChain> TLSSocket_OpenSSL::getPeerCertificates() const +shared_ptr <security::cert::certificateChain> TLSSocket_OpenSSL::getPeerCertificates() { + if (getTracer()) + getTracer()->traceSend("Getting peer certificates"); + STACK_OF(X509)* chain = SSL_get_peer_cert_chain(m_ssl); if (chain == NULL) diff --git a/src/vmime/net/tls/openssl/TLSSocket_OpenSSL.hpp b/src/vmime/net/tls/openssl/TLSSocket_OpenSSL.hpp index 20712263..913a02fe 100644 --- a/src/vmime/net/tls/openssl/TLSSocket_OpenSSL.hpp +++ b/src/vmime/net/tls/openssl/TLSSocket_OpenSSL.hpp @@ -60,7 +60,7 @@ public: void handshake(); - shared_ptr <security::cert::certificateChain> getPeerCertificates() const; + shared_ptr <security::cert::certificateChain> getPeerCertificates(); // Implementation of 'socket' void connect(const string& address, const port_t port); @@ -87,6 +87,9 @@ public: shared_ptr <timeoutHandler> getTimeoutHandler(); + void setTracer(shared_ptr <net::tracer> tracer); + shared_ptr <net::tracer> getTracer(); + private: static BIO_METHOD sm_customBIOMethod; |