summaryrefslogtreecommitdiff
path: root/src/LibgnutlsTLSSession.cc
diff options
context:
space:
mode:
authorNils Maier <maierman@web.de>2013-04-05 05:55:57 +0200
committerNils Maier <maierman@web.de>2013-04-05 23:10:47 +0200
commit0bcbd947b47d8f3af6c04508f7d493edc901dfdc (patch)
tree87d88ee26770477970db498ebfce06a1c4e832d0 /src/LibgnutlsTLSSession.cc
parentb292ae1305e8915edd7099446bdd533ac5c4d0a4 (diff)
AppleTLS: Implement AppleTLS and Apple Message Digest
Diffstat (limited to 'src/LibgnutlsTLSSession.cc')
-rw-r--r--src/LibgnutlsTLSSession.cc29
1 files changed, 17 insertions, 12 deletions
diff --git a/src/LibgnutlsTLSSession.cc b/src/LibgnutlsTLSSession.cc
index c1d449f3..d8721aeb 100644
--- a/src/LibgnutlsTLSSession.cc
+++ b/src/LibgnutlsTLSSession.cc
@@ -42,20 +42,25 @@
namespace aria2 {
-TLSSession::TLSSession(TLSContext* tlsContext)
+TLSSession* TLSSession::make(TLSContext* ctx)
+{
+ return new GnuTLSSession(static_cast<GnuTLSContext*>(ctx));
+}
+
+GnuTLSSession::GnuTLSSession(GnuTLSContext* tlsContext)
: sslSession_(0),
tlsContext_(tlsContext),
rv_(0)
{}
-TLSSession::~TLSSession()
+GnuTLSSession::~GnuTLSSession()
{
if(sslSession_) {
gnutls_deinit(sslSession_);
}
}
-int TLSSession::init(sock_t sockfd)
+int GnuTLSSession::init(sock_t sockfd)
{
rv_ = gnutls_init(&sslSession_,
tlsContext_->getSide() == TLS_CLIENT ?
@@ -89,7 +94,7 @@ int TLSSession::init(sock_t sockfd)
return TLS_ERR_OK;
}
-int TLSSession::setSNIHostname(const std::string& hostname)
+int GnuTLSSession::setSNIHostname(const std::string& hostname)
{
// TLS extensions: SNI
rv_ = gnutls_server_name_set(sslSession_, GNUTLS_NAME_DNS,
@@ -100,7 +105,7 @@ int TLSSession::setSNIHostname(const std::string& hostname)
return TLS_ERR_OK;
}
-int TLSSession::closeConnection()
+int GnuTLSSession::closeConnection()
{
rv_ = gnutls_bye(sslSession_, GNUTLS_SHUT_WR);
if(rv_ == GNUTLS_E_SUCCESS) {
@@ -112,13 +117,13 @@ int TLSSession::closeConnection()
}
}
-int TLSSession::checkDirection()
+int GnuTLSSession::checkDirection()
{
int direction = gnutls_record_get_direction(sslSession_);
return direction == 0 ? TLS_WANT_READ : TLS_WANT_WRITE;
}
-ssize_t TLSSession::writeData(const void* data, size_t len)
+ssize_t GnuTLSSession::writeData(const void* data, size_t len)
{
while((rv_ = gnutls_record_send(sslSession_, data, len)) ==
GNUTLS_E_INTERRUPTED);
@@ -133,7 +138,7 @@ ssize_t TLSSession::writeData(const void* data, size_t len)
}
}
-ssize_t TLSSession::readData(void* data, size_t len)
+ssize_t GnuTLSSession::readData(void* data, size_t len)
{
while((rv_ = gnutls_record_recv(sslSession_, data, len)) ==
GNUTLS_E_INTERRUPTED);
@@ -148,7 +153,7 @@ ssize_t TLSSession::readData(void* data, size_t len)
}
}
-int TLSSession::tlsConnect(const std::string& hostname,
+int GnuTLSSession::tlsConnect(const std::string& hostname,
std::string& handshakeErr)
{
handshakeErr = "";
@@ -160,7 +165,7 @@ int TLSSession::tlsConnect(const std::string& hostname,
return TLS_ERR_ERROR;
}
}
- if(tlsContext_->peerVerificationEnabled()) {
+ if(tlsContext_->getVerifyPeer()) {
// verify peer
unsigned int status;
rv_ = gnutls_certificate_verify_peers2(sslSession_, &status);
@@ -246,7 +251,7 @@ int TLSSession::tlsConnect(const std::string& hostname,
return TLS_ERR_OK;
}
-int TLSSession::tlsAccept()
+int GnuTLSSession::tlsAccept()
{
rv_ = gnutls_handshake(sslSession_);
if(rv_ == GNUTLS_E_SUCCESS) {
@@ -258,7 +263,7 @@ int TLSSession::tlsAccept()
}
}
-std::string TLSSession::getLastErrorString()
+std::string GnuTLSSession::getLastErrorString()
{
return gnutls_strerror(rv_);
}