aboutsummaryrefslogtreecommitdiffstats
path: root/src/vmime/net
diff options
context:
space:
mode:
Diffstat (limited to 'src/vmime/net')
-rw-r--r--src/vmime/net/imap/IMAPConnection.cpp1
-rw-r--r--src/vmime/net/pop3/POP3Connection.cpp1
-rw-r--r--src/vmime/net/smtp/SMTPConnection.cpp1
-rw-r--r--src/vmime/net/socket.hpp15
-rw-r--r--src/vmime/net/tls/TLSSocket.hpp2
-rw-r--r--src/vmime/net/tls/gnutls/TLSSocket_GnuTLS.cpp20
-rw-r--r--src/vmime/net/tls/gnutls/TLSSocket_GnuTLS.hpp5
-rw-r--r--src/vmime/net/tls/openssl/TLSSocket_OpenSSL.cpp20
-rw-r--r--src/vmime/net/tls/openssl/TLSSocket_OpenSSL.hpp5
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;