mirror of https://github.com/aria2/aria2
				
				
				
			2008-11-08 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Introduced TLSContext that holds TLS related data that can be shared with multiple SSL connections. * src/DownloadEngineFactory.cc * src/LibgnutlsTLSContext.cc * src/LibgnutlsTLSContext.h * src/LibsslTLSContext.cc * src/LibsslTLSContext.h * src/Makefile.am * src/SocketCore.cc * src/SocketCore.h * src/TLSContext.h * src/message.hpull/1/head
							parent
							
								
									5c4910f71e
								
							
						
					
					
						commit
						52316b0972
					
				
							
								
								
									
										15
									
								
								ChangeLog
								
								
								
								
							
							
						
						
									
										15
									
								
								ChangeLog
								
								
								
								
							| 
						 | 
				
			
			@ -1,3 +1,18 @@
 | 
			
		|||
2008-11-08  Tatsuhiro Tsujikawa  <t-tujikawa@users.sourceforge.net>
 | 
			
		||||
 | 
			
		||||
	Introduced TLSContext that holds TLS related data that can be shared
 | 
			
		||||
	with multiple SSL connections.
 | 
			
		||||
	* src/DownloadEngineFactory.cc
 | 
			
		||||
	* src/LibgnutlsTLSContext.cc
 | 
			
		||||
	* src/LibgnutlsTLSContext.h
 | 
			
		||||
	* src/LibsslTLSContext.cc
 | 
			
		||||
	* src/LibsslTLSContext.h
 | 
			
		||||
	* src/Makefile.am
 | 
			
		||||
	* src/SocketCore.cc
 | 
			
		||||
	* src/SocketCore.h
 | 
			
		||||
	* src/TLSContext.h
 | 
			
		||||
	* src/message.h	
 | 
			
		||||
 | 
			
		||||
2008-11-08  Tatsuhiro Tsujikawa  <t-tujikawa@users.sourceforge.net>
 | 
			
		||||
 | 
			
		||||
	Fixed the bug that the DiskWriter of the first FileEntry whose
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -54,6 +54,10 @@
 | 
			
		|||
#include "TimedHaltCommand.h"
 | 
			
		||||
#include "DownloadResult.h"
 | 
			
		||||
#include "ServerStatMan.h"
 | 
			
		||||
#ifdef ENABLE_SSL
 | 
			
		||||
# include "SocketCore.h"
 | 
			
		||||
# include "TLSContext.h"
 | 
			
		||||
#endif // ENABLE_SSL
 | 
			
		||||
 | 
			
		||||
namespace aria2 {
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -81,6 +85,12 @@ DownloadEngineFactory::newDownloadEngine(Option* op,
 | 
			
		|||
 | 
			
		||||
  DownloadEngineHandle e(new DownloadEngine());
 | 
			
		||||
  e->option = op;
 | 
			
		||||
 | 
			
		||||
#ifdef ENABLE_SSL
 | 
			
		||||
  SharedHandle<TLSContext> tlsContext(new TLSContext());
 | 
			
		||||
  SocketCore::setTLSContext(tlsContext);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
  RequestGroupManHandle
 | 
			
		||||
    requestGroupMan(new RequestGroupMan(workingSet, MAX_CONCURRENT_DOWNLOADS,
 | 
			
		||||
					op));
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,109 @@
 | 
			
		|||
/* <!-- copyright */
 | 
			
		||||
/*
 | 
			
		||||
 * aria2 - The high speed download utility
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright (C) 2006 Tatsuhiro Tsujikawa
 | 
			
		||||
 *
 | 
			
		||||
 * This program is free software; you can redistribute it and/or modify
 | 
			
		||||
 * it under the terms of the GNU General Public License as published by
 | 
			
		||||
 * the Free Software Foundation; either version 2 of the License, or
 | 
			
		||||
 * (at your option) any later version.
 | 
			
		||||
 *
 | 
			
		||||
 * This program is distributed in the hope that it will be useful,
 | 
			
		||||
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
 * GNU General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU General Public License
 | 
			
		||||
 * along with this program; if not, write to the Free Software
 | 
			
		||||
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 | 
			
		||||
 *
 | 
			
		||||
 * In addition, as a special exception, the copyright holders give
 | 
			
		||||
 * permission to link the code of portions of this program with the
 | 
			
		||||
 * OpenSSL library under certain conditions as described in each
 | 
			
		||||
 * individual source file, and distribute linked combinations
 | 
			
		||||
 * including the two.
 | 
			
		||||
 * You must obey the GNU General Public License in all respects
 | 
			
		||||
 * for all of the code used other than OpenSSL.  If you modify
 | 
			
		||||
 * file(s) with this exception, you may extend this exception to your
 | 
			
		||||
 * version of the file(s), but you are not obligated to do so.  If you
 | 
			
		||||
 * do not wish to do so, delete this exception statement from your
 | 
			
		||||
 * version.  If you delete this exception statement from all source
 | 
			
		||||
 * files in the program, then also delete it here.
 | 
			
		||||
 */
 | 
			
		||||
/* copyright --> */
 | 
			
		||||
#include "LibgnutlsTLSContext.h"
 | 
			
		||||
#include "LogFactory.h"
 | 
			
		||||
#include "Logger.h"
 | 
			
		||||
#include "StringFormat.h"
 | 
			
		||||
#include "message.h"
 | 
			
		||||
 | 
			
		||||
namespace aria2 {
 | 
			
		||||
 | 
			
		||||
TLSContext::TLSContext():_certCred(0), _logger(LogFactory::getInstance())
 | 
			
		||||
{
 | 
			
		||||
  int r = gnutls_certificate_allocate_credentials(&_certCred);
 | 
			
		||||
  if(r == GNUTLS_E_SUCCESS) {
 | 
			
		||||
    _good = true;
 | 
			
		||||
  } else {
 | 
			
		||||
    _good =false;
 | 
			
		||||
    _logger->error("gnutls_certificate_allocate_credentials() failed."
 | 
			
		||||
		   " Cause: %s", gnutls_strerror(r));
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TLSContext::~TLSContext()
 | 
			
		||||
{
 | 
			
		||||
  if(_certCred) {
 | 
			
		||||
    gnutls_certificate_free_credentials(_certCred);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool TLSContext::good() const
 | 
			
		||||
{
 | 
			
		||||
  return _good;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool TLSContext::bad() const
 | 
			
		||||
{
 | 
			
		||||
  return !_good;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void TLSContext::addClientKeyFile(const std::string& certfile,
 | 
			
		||||
				  const std::string& keyfile)
 | 
			
		||||
  throw(DlAbortEx)
 | 
			
		||||
{
 | 
			
		||||
  int ret = gnutls_certificate_set_x509_key_file(_certCred,
 | 
			
		||||
						 certfile.c_str(),
 | 
			
		||||
						 keyfile.c_str(),
 | 
			
		||||
						 GNUTLS_X509_FMT_PEM);
 | 
			
		||||
  if(ret != GNUTLS_E_SUCCESS) {
 | 
			
		||||
    throw DlAbortEx
 | 
			
		||||
      (StringFormat("Failed to load client certificate from %s and"
 | 
			
		||||
		    " private key from %s. Cause: %s",
 | 
			
		||||
		    certfile.c_str(), keyfile.c_str(),
 | 
			
		||||
		    gnutls_strerror(ret)).str());
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void TLSContext::addTrustedCACertFile(const std::string& certfile)
 | 
			
		||||
  throw(DlAbortEx)
 | 
			
		||||
{
 | 
			
		||||
  int ret = gnutls_certificate_set_x509_trust_file(_certCred,
 | 
			
		||||
						   certfile.c_str(),
 | 
			
		||||
						   GNUTLS_X509_FMT_PEM);
 | 
			
		||||
  if(ret < 0) {
 | 
			
		||||
    throw DlAbortEx
 | 
			
		||||
      (StringFormat
 | 
			
		||||
       (MSG_LOADING_TRUSTED_CA_CERT_FAILED,
 | 
			
		||||
	certfile.c_str(), gnutls_strerror(ret)).str());
 | 
			
		||||
  }
 | 
			
		||||
  _logger->info("%d certificate(s) were imported.", ret);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
gnutls_certificate_credentials_t TLSContext::getCertCred() const
 | 
			
		||||
{
 | 
			
		||||
  return _certCred;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
} // namespace aria2
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,78 @@
 | 
			
		|||
/* <!-- copyright */
 | 
			
		||||
/*
 | 
			
		||||
 * aria2 - The high speed download utility
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright (C) 2006 Tatsuhiro Tsujikawa
 | 
			
		||||
 *
 | 
			
		||||
 * This program is free software; you can redistribute it and/or modify
 | 
			
		||||
 * it under the terms of the GNU General Public License as published by
 | 
			
		||||
 * the Free Software Foundation; either version 2 of the License, or
 | 
			
		||||
 * (at your option) any later version.
 | 
			
		||||
 *
 | 
			
		||||
 * This program is distributed in the hope that it will be useful,
 | 
			
		||||
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
 * GNU General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU General Public License
 | 
			
		||||
 * along with this program; if not, write to the Free Software
 | 
			
		||||
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 | 
			
		||||
 *
 | 
			
		||||
 * In addition, as a special exception, the copyright holders give
 | 
			
		||||
 * permission to link the code of portions of this program with the
 | 
			
		||||
 * OpenSSL library under certain conditions as described in each
 | 
			
		||||
 * individual source file, and distribute linked combinations
 | 
			
		||||
 * including the two.
 | 
			
		||||
 * You must obey the GNU General Public License in all respects
 | 
			
		||||
 * for all of the code used other than OpenSSL.  If you modify
 | 
			
		||||
 * file(s) with this exception, you may extend this exception to your
 | 
			
		||||
 * version of the file(s), but you are not obligated to do so.  If you
 | 
			
		||||
 * do not wish to do so, delete this exception statement from your
 | 
			
		||||
 * version.  If you delete this exception statement from all source
 | 
			
		||||
 * files in the program, then also delete it here.
 | 
			
		||||
 */
 | 
			
		||||
/* copyright --> */
 | 
			
		||||
#ifndef _D_LIBGNUTLS_TLS_CONTEXT_H_
 | 
			
		||||
#define _D_LIBGNUTLS_TLS_CONTEXT_H_
 | 
			
		||||
 | 
			
		||||
#include "common.h"
 | 
			
		||||
 | 
			
		||||
#include <string>
 | 
			
		||||
 | 
			
		||||
#include <gnutls/gnutls.h>
 | 
			
		||||
 | 
			
		||||
#include "DlAbortEx.h"
 | 
			
		||||
 | 
			
		||||
namespace aria2 {
 | 
			
		||||
 | 
			
		||||
class Logger;
 | 
			
		||||
 | 
			
		||||
class TLSContext {
 | 
			
		||||
private:
 | 
			
		||||
  gnutls_certificate_credentials_t _certCred;
 | 
			
		||||
 | 
			
		||||
  bool _good;
 | 
			
		||||
 | 
			
		||||
  Logger* _logger;
 | 
			
		||||
public:
 | 
			
		||||
  TLSContext();
 | 
			
		||||
 | 
			
		||||
  ~TLSContext();
 | 
			
		||||
 | 
			
		||||
  // private key `keyfile' must be decrypted.
 | 
			
		||||
  void addClientKeyFile(const std::string& certfile,
 | 
			
		||||
			const std::string& keyfile) throw(DlAbortEx);
 | 
			
		||||
 | 
			
		||||
  // certfile can contain multiple certificates.
 | 
			
		||||
  void addTrustedCACertFile(const std::string& certfile) throw(DlAbortEx);
 | 
			
		||||
 | 
			
		||||
  bool good() const;
 | 
			
		||||
 | 
			
		||||
  bool bad() const;
 | 
			
		||||
 | 
			
		||||
  gnutls_certificate_credentials_t getCertCred() const;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
} // namespace aria2
 | 
			
		||||
 | 
			
		||||
#endif // _D_LIBGNUTLS_TLS_CONTEXT_H_
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,109 @@
 | 
			
		|||
/* <!-- copyright */
 | 
			
		||||
/*
 | 
			
		||||
 * aria2 - The high speed download utility
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright (C) 2006 Tatsuhiro Tsujikawa
 | 
			
		||||
 *
 | 
			
		||||
 * This program is free software; you can redistribute it and/or modify
 | 
			
		||||
 * it under the terms of the GNU General Public License as published by
 | 
			
		||||
 * the Free Software Foundation; either version 2 of the License, or
 | 
			
		||||
 * (at your option) any later version.
 | 
			
		||||
 *
 | 
			
		||||
 * This program is distributed in the hope that it will be useful,
 | 
			
		||||
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
 * GNU General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU General Public License
 | 
			
		||||
 * along with this program; if not, write to the Free Software
 | 
			
		||||
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 | 
			
		||||
 *
 | 
			
		||||
 * In addition, as a special exception, the copyright holders give
 | 
			
		||||
 * permission to link the code of portions of this program with the
 | 
			
		||||
 * OpenSSL library under certain conditions as described in each
 | 
			
		||||
 * individual source file, and distribute linked combinations
 | 
			
		||||
 * including the two.
 | 
			
		||||
 * You must obey the GNU General Public License in all respects
 | 
			
		||||
 * for all of the code used other than OpenSSL.  If you modify
 | 
			
		||||
 * file(s) with this exception, you may extend this exception to your
 | 
			
		||||
 * version of the file(s), but you are not obligated to do so.  If you
 | 
			
		||||
 * do not wish to do so, delete this exception statement from your
 | 
			
		||||
 * version.  If you delete this exception statement from all source
 | 
			
		||||
 * files in the program, then also delete it here.
 | 
			
		||||
 */
 | 
			
		||||
/* copyright --> */
 | 
			
		||||
#include "LibsslTLSContext.h"
 | 
			
		||||
 | 
			
		||||
#include <openssl/err.h>
 | 
			
		||||
 | 
			
		||||
#include "LogFactory.h"
 | 
			
		||||
#include "Logger.h"
 | 
			
		||||
#include "StringFormat.h"
 | 
			
		||||
#include "message.h"
 | 
			
		||||
 | 
			
		||||
namespace aria2 {
 | 
			
		||||
 | 
			
		||||
TLSContext::TLSContext():_sslCtx(0), _logger(LogFactory::getInstance())
 | 
			
		||||
{
 | 
			
		||||
  _sslCtx = SSL_CTX_new(SSLv23_client_method());
 | 
			
		||||
  if(_sslCtx) {
 | 
			
		||||
    _good = true;
 | 
			
		||||
  } else {
 | 
			
		||||
    _good = false;
 | 
			
		||||
    _logger->error("SSL_CTX_new() failed. Cause: %s",
 | 
			
		||||
		   ERR_error_string(ERR_get_error(), 0));
 | 
			
		||||
  }
 | 
			
		||||
  SSL_CTX_set_mode(_sslCtx, SSL_MODE_AUTO_RETRY);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TLSContext::~TLSContext()
 | 
			
		||||
{
 | 
			
		||||
  SSL_CTX_free(_sslCtx);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool TLSContext::good() const
 | 
			
		||||
{
 | 
			
		||||
  return _good;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool TLSContext::bad() const
 | 
			
		||||
{
 | 
			
		||||
  return !_good;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void TLSContext::addClientKeyFile(const std::string& certfile,
 | 
			
		||||
				  const std::string& keyfile)
 | 
			
		||||
  throw(DlAbortEx)
 | 
			
		||||
{
 | 
			
		||||
  if(SSL_CTX_use_PrivateKey_file(_sslCtx, keyfile.c_str(),
 | 
			
		||||
				 SSL_FILETYPE_PEM) != 1) {
 | 
			
		||||
    throw DlAbortEx
 | 
			
		||||
      (StringFormat
 | 
			
		||||
       ("Failed to load client private key from %s. Cause: %s",
 | 
			
		||||
	keyfile.c_str(), ERR_error_string(ERR_get_error(), 0)).str());
 | 
			
		||||
  }
 | 
			
		||||
  if(SSL_CTX_use_certificate_chain_file(_sslCtx, certfile.c_str()) != 1) {
 | 
			
		||||
    throw DlAbortEx
 | 
			
		||||
      (StringFormat
 | 
			
		||||
       ("Failed to load client certificate from %s. Cause: %s",
 | 
			
		||||
	certfile.c_str(), ERR_error_string(ERR_get_error(), 0)).str());
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void TLSContext::addTrustedCACertFile(const std::string& certfile)
 | 
			
		||||
  throw(DlAbortEx)
 | 
			
		||||
{
 | 
			
		||||
  if(SSL_CTX_load_verify_locations(_sslCtx, certfile.c_str(), 0) != 1) {
 | 
			
		||||
    throw DlAbortEx
 | 
			
		||||
      (StringFormat
 | 
			
		||||
       (MSG_LOADING_TRUSTED_CA_CERT_FAILED,
 | 
			
		||||
	certfile.c_str(), ERR_error_string(ERR_get_error(), 0)).str());
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
SSL_CTX* TLSContext::getSSLCtx() const
 | 
			
		||||
{
 | 
			
		||||
  return _sslCtx;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
} // namespace aria2
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,78 @@
 | 
			
		|||
/* <!-- copyright */
 | 
			
		||||
/*
 | 
			
		||||
 * aria2 - The high speed download utility
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright (C) 2006 Tatsuhiro Tsujikawa
 | 
			
		||||
 *
 | 
			
		||||
 * This program is free software; you can redistribute it and/or modify
 | 
			
		||||
 * it under the terms of the GNU General Public License as published by
 | 
			
		||||
 * the Free Software Foundation; either version 2 of the License, or
 | 
			
		||||
 * (at your option) any later version.
 | 
			
		||||
 *
 | 
			
		||||
 * This program is distributed in the hope that it will be useful,
 | 
			
		||||
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
 * GNU General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU General Public License
 | 
			
		||||
 * along with this program; if not, write to the Free Software
 | 
			
		||||
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 | 
			
		||||
 *
 | 
			
		||||
 * In addition, as a special exception, the copyright holders give
 | 
			
		||||
 * permission to link the code of portions of this program with the
 | 
			
		||||
 * OpenSSL library under certain conditions as described in each
 | 
			
		||||
 * individual source file, and distribute linked combinations
 | 
			
		||||
 * including the two.
 | 
			
		||||
 * You must obey the GNU General Public License in all respects
 | 
			
		||||
 * for all of the code used other than OpenSSL.  If you modify
 | 
			
		||||
 * file(s) with this exception, you may extend this exception to your
 | 
			
		||||
 * version of the file(s), but you are not obligated to do so.  If you
 | 
			
		||||
 * do not wish to do so, delete this exception statement from your
 | 
			
		||||
 * version.  If you delete this exception statement from all source
 | 
			
		||||
 * files in the program, then also delete it here.
 | 
			
		||||
 */
 | 
			
		||||
/* copyright --> */
 | 
			
		||||
#ifndef _D_LIBSSL_TLS_CONTEXT_H_
 | 
			
		||||
#define _D_LIBSSL_TLS_CONTEXT_H_
 | 
			
		||||
 | 
			
		||||
#include "common.h"
 | 
			
		||||
 | 
			
		||||
#include <string>
 | 
			
		||||
 | 
			
		||||
# include <openssl/ssl.h>
 | 
			
		||||
 | 
			
		||||
#include "DlAbortEx.h"
 | 
			
		||||
 | 
			
		||||
namespace aria2 {
 | 
			
		||||
 | 
			
		||||
class Logger;
 | 
			
		||||
 | 
			
		||||
class TLSContext {
 | 
			
		||||
private:
 | 
			
		||||
  SSL_CTX* _sslCtx;
 | 
			
		||||
 | 
			
		||||
  bool _good;
 | 
			
		||||
 | 
			
		||||
  Logger* _logger;
 | 
			
		||||
public:
 | 
			
		||||
  TLSContext();
 | 
			
		||||
 | 
			
		||||
  ~TLSContext();
 | 
			
		||||
 | 
			
		||||
  // private key `keyfile' must be decrypted.
 | 
			
		||||
  void addClientKeyFile(const std::string& certfile,
 | 
			
		||||
			const std::string& keyfile) throw(DlAbortEx);
 | 
			
		||||
 | 
			
		||||
  // certfile can contain multiple certificates.
 | 
			
		||||
  void addTrustedCACertFile(const std::string& certfile) throw(DlAbortEx);
 | 
			
		||||
 | 
			
		||||
  bool good() const;
 | 
			
		||||
 | 
			
		||||
  bool bad() const;
 | 
			
		||||
 | 
			
		||||
  SSL_CTX* getSSLCtx() const;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
} // namespace aria2
 | 
			
		||||
 | 
			
		||||
#endif // _D_LIBSSL_TLS_CONTEXT_H_
 | 
			
		||||
| 
						 | 
				
			
			@ -194,6 +194,18 @@ SRCS =  Socket.h\
 | 
			
		|||
	SocketBuffer.cc SocketBuffer.h\
 | 
			
		||||
	OptionHandlerException.cc OptionHandlerException.h
 | 
			
		||||
 | 
			
		||||
if ENABLE_SSL
 | 
			
		||||
SRCS += TLSContext.h
 | 
			
		||||
endif # ENABLE_SSL
 | 
			
		||||
 | 
			
		||||
if HAVE_LIBGNUTLS
 | 
			
		||||
SRCS += LibgnutlsTLSContext.cc LibgnutlsTLSContext.h
 | 
			
		||||
endif # HAVE_LIBGNUTLS
 | 
			
		||||
 | 
			
		||||
if HAVE_LIBSSL
 | 
			
		||||
SRCS += LibsslTLSContext.cc LibsslTLSContext.h
 | 
			
		||||
endif # HAVE_LIBSSL
 | 
			
		||||
 | 
			
		||||
if HAVE_LIBZ
 | 
			
		||||
SRCS += GZipDecoder.cc GZipDecoder.h
 | 
			
		||||
endif # HAVE_LIBZ
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -35,10 +35,13 @@ build_triplet = @build@
 | 
			
		|||
host_triplet = @host@
 | 
			
		||||
target_triplet = @target@
 | 
			
		||||
bin_PROGRAMS = aria2c$(EXEEXT)
 | 
			
		||||
@HAVE_LIBZ_TRUE@am__append_1 = GZipDecoder.cc GZipDecoder.h
 | 
			
		||||
@HAVE_SQLITE3_TRUE@am__append_2 = Sqlite3MozCookieParser.cc Sqlite3MozCookieParser.h
 | 
			
		||||
@ENABLE_ASYNC_DNS_TRUE@am__append_3 = AsyncNameResolver.cc AsyncNameResolver.h
 | 
			
		||||
@ENABLE_MESSAGE_DIGEST_TRUE@am__append_4 = IteratableChunkChecksumValidator.cc IteratableChunkChecksumValidator.h\
 | 
			
		||||
@ENABLE_SSL_TRUE@am__append_1 = TLSContext.h
 | 
			
		||||
@HAVE_LIBGNUTLS_TRUE@am__append_2 = LibgnutlsTLSContext.cc LibgnutlsTLSContext.h
 | 
			
		||||
@HAVE_LIBSSL_TRUE@am__append_3 = LibsslTLSContext.cc LibsslTLSContext.h
 | 
			
		||||
@HAVE_LIBZ_TRUE@am__append_4 = GZipDecoder.cc GZipDecoder.h
 | 
			
		||||
@HAVE_SQLITE3_TRUE@am__append_5 = Sqlite3MozCookieParser.cc Sqlite3MozCookieParser.h
 | 
			
		||||
@ENABLE_ASYNC_DNS_TRUE@am__append_6 = AsyncNameResolver.cc AsyncNameResolver.h
 | 
			
		||||
@ENABLE_MESSAGE_DIGEST_TRUE@am__append_7 = IteratableChunkChecksumValidator.cc IteratableChunkChecksumValidator.h\
 | 
			
		||||
@ENABLE_MESSAGE_DIGEST_TRUE@	IteratableChecksumValidator.cc IteratableChecksumValidator.h\
 | 
			
		||||
@ENABLE_MESSAGE_DIGEST_TRUE@	CheckIntegrityCommand.cc CheckIntegrityCommand.h\
 | 
			
		||||
@ENABLE_MESSAGE_DIGEST_TRUE@	ChecksumCheckIntegrityEntry.cc ChecksumCheckIntegrityEntry.h\
 | 
			
		||||
| 
						 | 
				
			
			@ -47,7 +50,7 @@ bin_PROGRAMS = aria2c$(EXEEXT)
 | 
			
		|||
@ENABLE_MESSAGE_DIGEST_TRUE@	Checksum.h\
 | 
			
		||||
@ENABLE_MESSAGE_DIGEST_TRUE@	ChunkChecksum.h
 | 
			
		||||
 | 
			
		||||
@ENABLE_BITTORRENT_TRUE@am__append_5 = MetaEntry.h\
 | 
			
		||||
@ENABLE_BITTORRENT_TRUE@am__append_8 = MetaEntry.h\
 | 
			
		||||
@ENABLE_BITTORRENT_TRUE@	Data.cc Data.h\
 | 
			
		||||
@ENABLE_BITTORRENT_TRUE@	Dictionary.cc Dictionary.h\
 | 
			
		||||
@ENABLE_BITTORRENT_TRUE@	List.cc List.h\
 | 
			
		||||
| 
						 | 
				
			
			@ -223,7 +226,7 @@ bin_PROGRAMS = aria2c$(EXEEXT)
 | 
			
		|||
@ENABLE_BITTORRENT_TRUE@	BtLeecherStateChoke.cc BtLeecherStateChoke.h\
 | 
			
		||||
@ENABLE_BITTORRENT_TRUE@	BtSeederStateChoke.cc BtSeederStateChoke.h
 | 
			
		||||
 | 
			
		||||
@ENABLE_METALINK_TRUE@am__append_6 = Metalinker.cc Metalinker.h\
 | 
			
		||||
@ENABLE_METALINK_TRUE@am__append_9 = Metalinker.cc Metalinker.h\
 | 
			
		||||
@ENABLE_METALINK_TRUE@	MetalinkEntry.cc MetalinkEntry.h\
 | 
			
		||||
@ENABLE_METALINK_TRUE@	MetalinkResource.cc MetalinkResource.h\
 | 
			
		||||
@ENABLE_METALINK_TRUE@	MetalinkProcessor.h\
 | 
			
		||||
| 
						 | 
				
			
			@ -252,17 +255,17 @@ bin_PROGRAMS = aria2c$(EXEEXT)
 | 
			
		|||
@ENABLE_METALINK_TRUE@	MetalinkPostDownloadHandler.cc MetalinkPostDownloadHandler.h\
 | 
			
		||||
@ENABLE_METALINK_TRUE@	MetalinkHelper.cc MetalinkHelper.h
 | 
			
		||||
 | 
			
		||||
@ENABLE_LIBXML2_TRUE@am__append_7 = XML2SAXMetalinkProcessor.cc XML2SAXMetalinkProcessor.h
 | 
			
		||||
@ENABLE_LIBEXPAT_TRUE@am__append_8 = ExpatMetalinkProcessor.cc ExpatMetalinkProcessor.h
 | 
			
		||||
@HAVE_ASCTIME_R_FALSE@am__append_9 = asctime_r.c asctime_r.h
 | 
			
		||||
@HAVE_BASENAME_FALSE@am__append_10 = libgen.c libgen.h
 | 
			
		||||
@HAVE_GETADDRINFO_FALSE@am__append_11 = getaddrinfo.c getaddrinfo.h
 | 
			
		||||
@HAVE_GAI_STRERROR_FALSE@am__append_12 = gai_strerror.c gai_strerror.h
 | 
			
		||||
@HAVE_GETTIMEOFDAY_FALSE@am__append_13 = gettimeofday.c gettimeofday.h
 | 
			
		||||
@HAVE_INET_ATON_FALSE@am__append_14 = inet_aton.c inet_aton.h
 | 
			
		||||
@HAVE_LOCALTIME_R_FALSE@am__append_15 = localtime_r.c localtime_r.h
 | 
			
		||||
@HAVE_STRPTIME_FALSE@am__append_16 = strptime.c strptime.h
 | 
			
		||||
@HAVE_TIMEGM_FALSE@am__append_17 = timegm.c timegm.h
 | 
			
		||||
@ENABLE_LIBXML2_TRUE@am__append_10 = XML2SAXMetalinkProcessor.cc XML2SAXMetalinkProcessor.h
 | 
			
		||||
@ENABLE_LIBEXPAT_TRUE@am__append_11 = ExpatMetalinkProcessor.cc ExpatMetalinkProcessor.h
 | 
			
		||||
@HAVE_ASCTIME_R_FALSE@am__append_12 = asctime_r.c asctime_r.h
 | 
			
		||||
@HAVE_BASENAME_FALSE@am__append_13 = libgen.c libgen.h
 | 
			
		||||
@HAVE_GETADDRINFO_FALSE@am__append_14 = getaddrinfo.c getaddrinfo.h
 | 
			
		||||
@HAVE_GAI_STRERROR_FALSE@am__append_15 = gai_strerror.c gai_strerror.h
 | 
			
		||||
@HAVE_GETTIMEOFDAY_FALSE@am__append_16 = gettimeofday.c gettimeofday.h
 | 
			
		||||
@HAVE_INET_ATON_FALSE@am__append_17 = inet_aton.c inet_aton.h
 | 
			
		||||
@HAVE_LOCALTIME_R_FALSE@am__append_18 = localtime_r.c localtime_r.h
 | 
			
		||||
@HAVE_STRPTIME_FALSE@am__append_19 = strptime.c strptime.h
 | 
			
		||||
@HAVE_TIMEGM_FALSE@am__append_20 = timegm.c timegm.h
 | 
			
		||||
subdir = src
 | 
			
		||||
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in alloca.c
 | 
			
		||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 | 
			
		||||
| 
						 | 
				
			
			@ -415,10 +418,11 @@ am__libaria2c_a_SOURCES_DIST = Socket.h SocketCore.cc SocketCore.h \
 | 
			
		|||
	ServerStatURISelector.h NsCookieParser.cc NsCookieParser.h \
 | 
			
		||||
	CookieStorage.cc CookieStorage.h SocketBuffer.cc \
 | 
			
		||||
	SocketBuffer.h OptionHandlerException.cc \
 | 
			
		||||
	OptionHandlerException.h GZipDecoder.cc GZipDecoder.h \
 | 
			
		||||
	Sqlite3MozCookieParser.cc Sqlite3MozCookieParser.h \
 | 
			
		||||
	AsyncNameResolver.cc AsyncNameResolver.h \
 | 
			
		||||
	IteratableChunkChecksumValidator.cc \
 | 
			
		||||
	OptionHandlerException.h TLSContext.h LibgnutlsTLSContext.cc \
 | 
			
		||||
	LibgnutlsTLSContext.h LibsslTLSContext.cc LibsslTLSContext.h \
 | 
			
		||||
	GZipDecoder.cc GZipDecoder.h Sqlite3MozCookieParser.cc \
 | 
			
		||||
	Sqlite3MozCookieParser.h AsyncNameResolver.cc \
 | 
			
		||||
	AsyncNameResolver.h IteratableChunkChecksumValidator.cc \
 | 
			
		||||
	IteratableChunkChecksumValidator.h \
 | 
			
		||||
	IteratableChecksumValidator.cc IteratableChecksumValidator.h \
 | 
			
		||||
	CheckIntegrityCommand.cc CheckIntegrityCommand.h \
 | 
			
		||||
| 
						 | 
				
			
			@ -574,16 +578,19 @@ am__libaria2c_a_SOURCES_DIST = Socket.h SocketCore.cc SocketCore.h \
 | 
			
		|||
	gai_strerror.h gettimeofday.c gettimeofday.h inet_aton.c \
 | 
			
		||||
	inet_aton.h localtime_r.c localtime_r.h strptime.c strptime.h \
 | 
			
		||||
	timegm.c timegm.h
 | 
			
		||||
@HAVE_LIBZ_TRUE@am__objects_1 = GZipDecoder.$(OBJEXT)
 | 
			
		||||
@HAVE_SQLITE3_TRUE@am__objects_2 = Sqlite3MozCookieParser.$(OBJEXT)
 | 
			
		||||
@ENABLE_ASYNC_DNS_TRUE@am__objects_3 = AsyncNameResolver.$(OBJEXT)
 | 
			
		||||
@ENABLE_MESSAGE_DIGEST_TRUE@am__objects_4 = IteratableChunkChecksumValidator.$(OBJEXT) \
 | 
			
		||||
am__objects_1 =
 | 
			
		||||
@HAVE_LIBGNUTLS_TRUE@am__objects_2 = LibgnutlsTLSContext.$(OBJEXT)
 | 
			
		||||
@HAVE_LIBSSL_TRUE@am__objects_3 = LibsslTLSContext.$(OBJEXT)
 | 
			
		||||
@HAVE_LIBZ_TRUE@am__objects_4 = GZipDecoder.$(OBJEXT)
 | 
			
		||||
@HAVE_SQLITE3_TRUE@am__objects_5 = Sqlite3MozCookieParser.$(OBJEXT)
 | 
			
		||||
@ENABLE_ASYNC_DNS_TRUE@am__objects_6 = AsyncNameResolver.$(OBJEXT)
 | 
			
		||||
@ENABLE_MESSAGE_DIGEST_TRUE@am__objects_7 = IteratableChunkChecksumValidator.$(OBJEXT) \
 | 
			
		||||
@ENABLE_MESSAGE_DIGEST_TRUE@	IteratableChecksumValidator.$(OBJEXT) \
 | 
			
		||||
@ENABLE_MESSAGE_DIGEST_TRUE@	CheckIntegrityCommand.$(OBJEXT) \
 | 
			
		||||
@ENABLE_MESSAGE_DIGEST_TRUE@	ChecksumCheckIntegrityEntry.$(OBJEXT) \
 | 
			
		||||
@ENABLE_MESSAGE_DIGEST_TRUE@	messageDigest.$(OBJEXT) \
 | 
			
		||||
@ENABLE_MESSAGE_DIGEST_TRUE@	MessageDigestHelper.$(OBJEXT)
 | 
			
		||||
@ENABLE_BITTORRENT_TRUE@am__objects_5 = Data.$(OBJEXT) \
 | 
			
		||||
@ENABLE_BITTORRENT_TRUE@am__objects_8 = Data.$(OBJEXT) \
 | 
			
		||||
@ENABLE_BITTORRENT_TRUE@	Dictionary.$(OBJEXT) List.$(OBJEXT) \
 | 
			
		||||
@ENABLE_BITTORRENT_TRUE@	MetaFileUtil.$(OBJEXT) \
 | 
			
		||||
@ENABLE_BITTORRENT_TRUE@	BencodeVisitor.$(OBJEXT) \
 | 
			
		||||
| 
						 | 
				
			
			@ -695,7 +702,7 @@ am__libaria2c_a_SOURCES_DIST = Socket.h SocketCore.cc SocketCore.h \
 | 
			
		|||
@ENABLE_BITTORRENT_TRUE@	MSEHandshake.$(OBJEXT) \
 | 
			
		||||
@ENABLE_BITTORRENT_TRUE@	BtLeecherStateChoke.$(OBJEXT) \
 | 
			
		||||
@ENABLE_BITTORRENT_TRUE@	BtSeederStateChoke.$(OBJEXT)
 | 
			
		||||
@ENABLE_METALINK_TRUE@am__objects_6 = Metalinker.$(OBJEXT) \
 | 
			
		||||
@ENABLE_METALINK_TRUE@am__objects_9 = Metalinker.$(OBJEXT) \
 | 
			
		||||
@ENABLE_METALINK_TRUE@	MetalinkEntry.$(OBJEXT) \
 | 
			
		||||
@ENABLE_METALINK_TRUE@	MetalinkResource.$(OBJEXT) \
 | 
			
		||||
@ENABLE_METALINK_TRUE@	MetalinkProcessorFactory.$(OBJEXT) \
 | 
			
		||||
| 
						 | 
				
			
			@ -721,20 +728,20 @@ am__libaria2c_a_SOURCES_DIST = Socket.h SocketCore.cc SocketCore.h \
 | 
			
		|||
@ENABLE_METALINK_TRUE@	Metalink2RequestGroup.$(OBJEXT) \
 | 
			
		||||
@ENABLE_METALINK_TRUE@	MetalinkPostDownloadHandler.$(OBJEXT) \
 | 
			
		||||
@ENABLE_METALINK_TRUE@	MetalinkHelper.$(OBJEXT)
 | 
			
		||||
@ENABLE_LIBXML2_TRUE@am__objects_7 =  \
 | 
			
		||||
@ENABLE_LIBXML2_TRUE@am__objects_10 =  \
 | 
			
		||||
@ENABLE_LIBXML2_TRUE@	XML2SAXMetalinkProcessor.$(OBJEXT)
 | 
			
		||||
@ENABLE_LIBEXPAT_TRUE@am__objects_8 =  \
 | 
			
		||||
@ENABLE_LIBEXPAT_TRUE@am__objects_11 =  \
 | 
			
		||||
@ENABLE_LIBEXPAT_TRUE@	ExpatMetalinkProcessor.$(OBJEXT)
 | 
			
		||||
@HAVE_ASCTIME_R_FALSE@am__objects_9 = asctime_r.$(OBJEXT)
 | 
			
		||||
@HAVE_BASENAME_FALSE@am__objects_10 = libgen.$(OBJEXT)
 | 
			
		||||
@HAVE_GETADDRINFO_FALSE@am__objects_11 = getaddrinfo.$(OBJEXT)
 | 
			
		||||
@HAVE_GAI_STRERROR_FALSE@am__objects_12 = gai_strerror.$(OBJEXT)
 | 
			
		||||
@HAVE_GETTIMEOFDAY_FALSE@am__objects_13 = gettimeofday.$(OBJEXT)
 | 
			
		||||
@HAVE_INET_ATON_FALSE@am__objects_14 = inet_aton.$(OBJEXT)
 | 
			
		||||
@HAVE_LOCALTIME_R_FALSE@am__objects_15 = localtime_r.$(OBJEXT)
 | 
			
		||||
@HAVE_STRPTIME_FALSE@am__objects_16 = strptime.$(OBJEXT)
 | 
			
		||||
@HAVE_TIMEGM_FALSE@am__objects_17 = timegm.$(OBJEXT)
 | 
			
		||||
am__objects_18 = SocketCore.$(OBJEXT) Command.$(OBJEXT) \
 | 
			
		||||
@HAVE_ASCTIME_R_FALSE@am__objects_12 = asctime_r.$(OBJEXT)
 | 
			
		||||
@HAVE_BASENAME_FALSE@am__objects_13 = libgen.$(OBJEXT)
 | 
			
		||||
@HAVE_GETADDRINFO_FALSE@am__objects_14 = getaddrinfo.$(OBJEXT)
 | 
			
		||||
@HAVE_GAI_STRERROR_FALSE@am__objects_15 = gai_strerror.$(OBJEXT)
 | 
			
		||||
@HAVE_GETTIMEOFDAY_FALSE@am__objects_16 = gettimeofday.$(OBJEXT)
 | 
			
		||||
@HAVE_INET_ATON_FALSE@am__objects_17 = inet_aton.$(OBJEXT)
 | 
			
		||||
@HAVE_LOCALTIME_R_FALSE@am__objects_18 = localtime_r.$(OBJEXT)
 | 
			
		||||
@HAVE_STRPTIME_FALSE@am__objects_19 = strptime.$(OBJEXT)
 | 
			
		||||
@HAVE_TIMEGM_FALSE@am__objects_20 = timegm.$(OBJEXT)
 | 
			
		||||
am__objects_21 = SocketCore.$(OBJEXT) Command.$(OBJEXT) \
 | 
			
		||||
	AbstractCommand.$(OBJEXT) \
 | 
			
		||||
	InitiateConnectionCommandFactory.$(OBJEXT) \
 | 
			
		||||
	DownloadCommand.$(OBJEXT) \
 | 
			
		||||
| 
						 | 
				
			
			@ -813,8 +820,9 @@ am__objects_18 = SocketCore.$(OBJEXT) Command.$(OBJEXT) \
 | 
			
		|||
	$(am__objects_8) $(am__objects_9) $(am__objects_10) \
 | 
			
		||||
	$(am__objects_11) $(am__objects_12) $(am__objects_13) \
 | 
			
		||||
	$(am__objects_14) $(am__objects_15) $(am__objects_16) \
 | 
			
		||||
	$(am__objects_17)
 | 
			
		||||
am_libaria2c_a_OBJECTS = $(am__objects_18)
 | 
			
		||||
	$(am__objects_17) $(am__objects_18) $(am__objects_19) \
 | 
			
		||||
	$(am__objects_20)
 | 
			
		||||
am_libaria2c_a_OBJECTS = $(am__objects_21)
 | 
			
		||||
libaria2c_a_OBJECTS = $(am_libaria2c_a_OBJECTS)
 | 
			
		||||
am__installdirs = "$(DESTDIR)$(bindir)"
 | 
			
		||||
binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
 | 
			
		||||
| 
						 | 
				
			
			@ -1142,7 +1150,8 @@ SRCS = Socket.h SocketCore.cc SocketCore.h BinaryStream.h Command.cc \
 | 
			
		|||
	$(am__append_6) $(am__append_7) $(am__append_8) \
 | 
			
		||||
	$(am__append_9) $(am__append_10) $(am__append_11) \
 | 
			
		||||
	$(am__append_12) $(am__append_13) $(am__append_14) \
 | 
			
		||||
	$(am__append_15) $(am__append_16) $(am__append_17)
 | 
			
		||||
	$(am__append_15) $(am__append_16) $(am__append_17) \
 | 
			
		||||
	$(am__append_18) $(am__append_19) $(am__append_20)
 | 
			
		||||
noinst_LIBRARIES = libaria2c.a
 | 
			
		||||
libaria2c_a_SOURCES = $(SRCS)
 | 
			
		||||
aria2c_LDADD = libaria2c.a @LIBINTL@ @ALLOCA@ @LIBGNUTLS_LIBS@\
 | 
			
		||||
| 
						 | 
				
			
			@ -1416,6 +1425,8 @@ distclean-compile:
 | 
			
		|||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/IteratableChecksumValidator.Po@am__quote@
 | 
			
		||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/IteratableChunkChecksumValidator.Po@am__quote@
 | 
			
		||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LanguageMetalinkParserState.Po@am__quote@
 | 
			
		||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LibgnutlsTLSContext.Po@am__quote@
 | 
			
		||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LibsslTLSContext.Po@am__quote@
 | 
			
		||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/List.Po@am__quote@
 | 
			
		||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LogFactory.Po@am__quote@
 | 
			
		||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MSEHandshake.Po@am__quote@
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -46,6 +46,9 @@
 | 
			
		|||
#include "StringFormat.h"
 | 
			
		||||
#include "Util.h"
 | 
			
		||||
#include "LogFactory.h"
 | 
			
		||||
#ifdef ENABLE_SSL
 | 
			
		||||
# include "TLSContext.h"
 | 
			
		||||
#endif // ENABLE_SSL
 | 
			
		||||
 | 
			
		||||
#ifndef __MINGW32__
 | 
			
		||||
# define SOCKET_ERRNO (errno)
 | 
			
		||||
| 
						 | 
				
			
			@ -67,6 +70,8 @@
 | 
			
		|||
 | 
			
		||||
namespace aria2 {
 | 
			
		||||
 | 
			
		||||
SharedHandle<TLSContext> SocketCore::_tlsContext;
 | 
			
		||||
 | 
			
		||||
SocketCore::SocketCore(int sockType):_sockType(sockType), sockfd(-1)  {
 | 
			
		||||
  init();
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -92,12 +97,10 @@ void SocketCore::init()
 | 
			
		|||
 | 
			
		||||
#ifdef HAVE_LIBSSL
 | 
			
		||||
  // for SSL
 | 
			
		||||
  sslCtx = NULL;
 | 
			
		||||
  ssl = NULL;
 | 
			
		||||
#endif // HAVE_LIBSSL
 | 
			
		||||
#ifdef HAVE_LIBGNUTLS
 | 
			
		||||
  sslSession = NULL;
 | 
			
		||||
  sslXcred = NULL;
 | 
			
		||||
  peekBufMax = 4096;
 | 
			
		||||
  peekBuf = 0;
 | 
			
		||||
  peekBufLength = 0;
 | 
			
		||||
| 
						 | 
				
			
			@ -318,13 +321,11 @@ void SocketCore::closeConnection()
 | 
			
		|||
  // for SSL
 | 
			
		||||
  if(secure) {
 | 
			
		||||
    SSL_free(ssl);
 | 
			
		||||
    SSL_CTX_free(sslCtx);
 | 
			
		||||
  }
 | 
			
		||||
#endif // HAVE_LIBSSL
 | 
			
		||||
#ifdef HAVE_LIBGNUTLS
 | 
			
		||||
  if(secure) {
 | 
			
		||||
    gnutls_deinit(sslSession);
 | 
			
		||||
    gnutls_certificate_free_credentials(sslXcred);
 | 
			
		||||
  }
 | 
			
		||||
#endif // HAVE_LIBGNUTLS
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -710,16 +711,9 @@ void SocketCore::prepareSecureConnection()
 | 
			
		|||
{
 | 
			
		||||
  if(!secure) {
 | 
			
		||||
#ifdef HAVE_LIBSSL
 | 
			
		||||
  // for SSL
 | 
			
		||||
    sslCtx = SSL_CTX_new(SSLv23_client_method());
 | 
			
		||||
    if(sslCtx == NULL) {
 | 
			
		||||
      throw DlAbortEx
 | 
			
		||||
	(StringFormat(EX_SSL_INIT_FAILURE,
 | 
			
		||||
		      ERR_error_string(ERR_get_error(), 0)).str());
 | 
			
		||||
    }
 | 
			
		||||
    SSL_CTX_set_mode(sslCtx, SSL_MODE_AUTO_RETRY);
 | 
			
		||||
    ssl = SSL_new(sslCtx);
 | 
			
		||||
    if(ssl == NULL) {
 | 
			
		||||
    // for SSL
 | 
			
		||||
    ssl = SSL_new(_tlsContext->getSSLCtx());
 | 
			
		||||
    if(!ssl) {
 | 
			
		||||
      throw DlAbortEx
 | 
			
		||||
	(StringFormat(EX_SSL_INIT_FAILURE,
 | 
			
		||||
		      ERR_error_string(ERR_get_error(), 0)).str());
 | 
			
		||||
| 
						 | 
				
			
			@ -736,12 +730,12 @@ void SocketCore::prepareSecureConnection()
 | 
			
		|||
    };
 | 
			
		||||
    // while we do not support X509 certificate, most web servers require
 | 
			
		||||
    // X509 stuff.
 | 
			
		||||
    gnutls_certificate_allocate_credentials (&sslXcred);
 | 
			
		||||
    gnutls_init(&sslSession, GNUTLS_CLIENT);
 | 
			
		||||
    gnutls_set_default_priority(sslSession);
 | 
			
		||||
    gnutls_kx_set_priority(sslSession, cert_type_priority);
 | 
			
		||||
    // put the x509 credentials to the current session
 | 
			
		||||
    gnutls_credentials_set(sslSession, GNUTLS_CRD_CERTIFICATE, sslXcred);
 | 
			
		||||
    gnutls_credentials_set(sslSession, GNUTLS_CRD_CERTIFICATE,
 | 
			
		||||
			   _tlsContext->getCertCred());
 | 
			
		||||
    gnutls_transport_set_ptr(sslSession, (gnutls_transport_ptr_t)sockfd);
 | 
			
		||||
#endif // HAVE_LIBGNUTLS
 | 
			
		||||
    secure = 1;
 | 
			
		||||
| 
						 | 
				
			
			@ -928,4 +922,9 @@ bool SocketCore::wantWrite() const
 | 
			
		|||
  return _wantWrite;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SocketCore::setTLSContext(const SharedHandle<TLSContext>& tlsContext)
 | 
			
		||||
{
 | 
			
		||||
  _tlsContext = tlsContext;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
} // namespace aria2
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -54,12 +54,15 @@
 | 
			
		|||
# include <gnutls/gnutls.h>
 | 
			
		||||
#endif // HAVE_LIBGNUTLS
 | 
			
		||||
 | 
			
		||||
#include "SharedHandle.h"
 | 
			
		||||
#include "a2io.h"
 | 
			
		||||
#include "a2netcompat.h"
 | 
			
		||||
#include "a2time.h"
 | 
			
		||||
 | 
			
		||||
namespace aria2 {
 | 
			
		||||
 | 
			
		||||
class TLSContext;
 | 
			
		||||
 | 
			
		||||
class SocketCore {
 | 
			
		||||
  friend bool operator==(const SocketCore& s1, const SocketCore& s2);
 | 
			
		||||
  friend bool operator!=(const SocketCore& s1, const SocketCore& s2);
 | 
			
		||||
| 
						 | 
				
			
			@ -85,16 +88,18 @@ private:
 | 
			
		|||
  bool _wantRead;
 | 
			
		||||
  bool _wantWrite;
 | 
			
		||||
 | 
			
		||||
#if ENABLE_SSL
 | 
			
		||||
  static SharedHandle<TLSContext> _tlsContext;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_LIBSSL
 | 
			
		||||
  // for SSL
 | 
			
		||||
  SSL_CTX* sslCtx;
 | 
			
		||||
  SSL* ssl;
 | 
			
		||||
 | 
			
		||||
  int sslHandleEAGAIN(int ret);
 | 
			
		||||
#endif // HAVE_LIBSSL
 | 
			
		||||
#ifdef HAVE_LIBGNUTLS
 | 
			
		||||
  gnutls_session_t sslSession;
 | 
			
		||||
  gnutls_certificate_credentials_t sslXcred;
 | 
			
		||||
  char* peekBuf;
 | 
			
		||||
  size_t peekBufLength;
 | 
			
		||||
  size_t peekBufMax;
 | 
			
		||||
| 
						 | 
				
			
			@ -317,6 +322,8 @@ public:
 | 
			
		|||
   * readData() or writeData() and the socket needs to write more data.
 | 
			
		||||
   */
 | 
			
		||||
  bool wantWrite() const;
 | 
			
		||||
 | 
			
		||||
  static void setTLSContext(const SharedHandle<TLSContext>& tlsContext);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
} // namespace aria2
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,46 @@
 | 
			
		|||
/* <!-- copyright */
 | 
			
		||||
/*
 | 
			
		||||
 * aria2 - The high speed download utility
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright (C) 2006 Tatsuhiro Tsujikawa
 | 
			
		||||
 *
 | 
			
		||||
 * This program is free software; you can redistribute it and/or modify
 | 
			
		||||
 * it under the terms of the GNU General Public License as published by
 | 
			
		||||
 * the Free Software Foundation; either version 2 of the License, or
 | 
			
		||||
 * (at your option) any later version.
 | 
			
		||||
 *
 | 
			
		||||
 * This program is distributed in the hope that it will be useful,
 | 
			
		||||
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
 * GNU General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU General Public License
 | 
			
		||||
 * along with this program; if not, write to the Free Software
 | 
			
		||||
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 | 
			
		||||
 *
 | 
			
		||||
 * In addition, as a special exception, the copyright holders give
 | 
			
		||||
 * permission to link the code of portions of this program with the
 | 
			
		||||
 * OpenSSL library under certain conditions as described in each
 | 
			
		||||
 * individual source file, and distribute linked combinations
 | 
			
		||||
 * including the two.
 | 
			
		||||
 * You must obey the GNU General Public License in all respects
 | 
			
		||||
 * for all of the code used other than OpenSSL.  If you modify
 | 
			
		||||
 * file(s) with this exception, you may extend this exception to your
 | 
			
		||||
 * version of the file(s), but you are not obligated to do so.  If you
 | 
			
		||||
 * do not wish to do so, delete this exception statement from your
 | 
			
		||||
 * version.  If you delete this exception statement from all source
 | 
			
		||||
 * files in the program, then also delete it here.
 | 
			
		||||
 */
 | 
			
		||||
/* copyright --> */
 | 
			
		||||
#ifndef _D_TLS_CONTEXT_H_
 | 
			
		||||
#define _D_TLS_CONTEXT_H_
 | 
			
		||||
 | 
			
		||||
#include "common.h"
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_LIBSSL
 | 
			
		||||
# include "LibsslTLSContext.h"
 | 
			
		||||
#elif HAVE_LIBGNUTLS
 | 
			
		||||
# include "LibgnutlsTLSContext.h"
 | 
			
		||||
#endif // HAVE_LIBGNUTLS
 | 
			
		||||
 | 
			
		||||
#endif // _D_TLS_CONTEXT_H_
 | 
			
		||||
| 
						 | 
				
			
			@ -157,6 +157,8 @@
 | 
			
		|||
#define MSG_ESTABLISHING_CONNECTION_FAILED \
 | 
			
		||||
  _("Failed to establish connection, cause: %s")
 | 
			
		||||
#define MSG_NETWORK_PROBLEM _("Network problem has occurred. cause:%s")
 | 
			
		||||
#define MSG_LOADING_TRUSTED_CA_CERT_FAILED \
 | 
			
		||||
  _("Failed to load trusted CA certificates from %s. Cause: %s")
 | 
			
		||||
 | 
			
		||||
#define EX_TIME_OUT _("Timeout.")
 | 
			
		||||
#define EX_INVALID_CHUNK_SIZE _("Invalid chunk size.")
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue