@ -268,6 +268,7 @@ Session::Session(QObject *parent)
, m_announceToAllTrackers ( BITTORRENT_SESSION_KEY ( " AnnounceToAllTrackers " ) , false )
, m_announceToAllTrackers ( BITTORRENT_SESSION_KEY ( " AnnounceToAllTrackers " ) , false )
, m_announceToAllTiers ( BITTORRENT_SESSION_KEY ( " AnnounceToAllTiers " ) , true )
, m_announceToAllTiers ( BITTORRENT_SESSION_KEY ( " AnnounceToAllTiers " ) , true )
, m_asyncIOThreads ( BITTORRENT_SESSION_KEY ( " AsyncIOThreadsCount " ) , 4 )
, m_asyncIOThreads ( BITTORRENT_SESSION_KEY ( " AsyncIOThreadsCount " ) , 4 )
, m_filePoolSize ( BITTORRENT_SESSION_KEY ( " FilePoolSize " ) , 40 )
, m_checkingMemUsage ( BITTORRENT_SESSION_KEY ( " CheckingMemUsageSize " ) , 16 )
, m_checkingMemUsage ( BITTORRENT_SESSION_KEY ( " CheckingMemUsageSize " ) , 16 )
, m_diskCacheSize ( BITTORRENT_SESSION_KEY ( " DiskCacheSize " ) , 64 )
, m_diskCacheSize ( BITTORRENT_SESSION_KEY ( " DiskCacheSize " ) , 64 )
, m_diskCacheTTL ( BITTORRENT_SESSION_KEY ( " DiskCacheTTL " ) , 60 )
, m_diskCacheTTL ( BITTORRENT_SESSION_KEY ( " DiskCacheTTL " ) , 60 )
@ -282,6 +283,7 @@ Session::Session(QObject *parent)
, m_sendBufferWatermark ( BITTORRENT_SESSION_KEY ( " SendBufferWatermark " ) , 500 )
, m_sendBufferWatermark ( BITTORRENT_SESSION_KEY ( " SendBufferWatermark " ) , 500 )
, m_sendBufferLowWatermark ( BITTORRENT_SESSION_KEY ( " SendBufferLowWatermark " ) , 10 )
, m_sendBufferLowWatermark ( BITTORRENT_SESSION_KEY ( " SendBufferLowWatermark " ) , 10 )
, m_sendBufferWatermarkFactor ( BITTORRENT_SESSION_KEY ( " SendBufferWatermarkFactor " ) , 50 )
, m_sendBufferWatermarkFactor ( BITTORRENT_SESSION_KEY ( " SendBufferWatermarkFactor " ) , 50 )
, m_socketBacklogSize ( BITTORRENT_SESSION_KEY ( " SocketBacklogSize " ) , 30 )
, m_isAnonymousModeEnabled ( BITTORRENT_SESSION_KEY ( " AnonymousModeEnabled " ) , false )
, m_isAnonymousModeEnabled ( BITTORRENT_SESSION_KEY ( " AnonymousModeEnabled " ) , false )
, m_isQueueingEnabled ( BITTORRENT_SESSION_KEY ( " QueueingSystemEnabled " ) , true )
, m_isQueueingEnabled ( BITTORRENT_SESSION_KEY ( " QueueingSystemEnabled " ) , true )
, m_maxActiveDownloads ( BITTORRENT_SESSION_KEY ( " MaxActiveDownloads " ) , 3 , lowerLimited ( - 1 ) )
, m_maxActiveDownloads ( BITTORRENT_SESSION_KEY ( " MaxActiveDownloads " ) , 3 , lowerLimited ( - 1 ) )
@ -364,8 +366,6 @@ Session::Session(QObject *parent)
, m_extraLimit ( 0 )
, m_extraLimit ( 0 )
, m_recentErroredTorrentsTimer ( new QTimer ( this ) )
, m_recentErroredTorrentsTimer ( new QTimer ( this ) )
{
{
Logger * const logger = Logger : : instance ( ) ;
initResumeFolder ( ) ;
initResumeFolder ( ) ;
m_recentErroredTorrentsTimer - > setSingleShot ( true ) ;
m_recentErroredTorrentsTimer - > setSingleShot ( true ) ;
@ -438,15 +438,14 @@ Session::Session(QObject *parent)
m_nativeSession - > add_extension ( & lt : : create_ut_pex_plugin ) ;
m_nativeSession - > add_extension ( & lt : : create_ut_pex_plugin ) ;
m_nativeSession - > add_extension ( & lt : : create_smart_ban_plugin ) ;
m_nativeSession - > add_extension ( & lt : : create_smart_ban_plugin ) ;
logger - > addMessage ( tr ( " Peer ID: " ) + QString : : fromStdString ( peerId ) ) ;
LogMsg ( tr ( " Peer ID: " ) + QString : : fromStdString ( peerId ) ) ;
logger - > addMessage ( tr ( " HTTP User-Agent is '%1' " ) . arg ( USER_AGENT ) ) ;
LogMsg ( tr ( " HTTP User-Agent is '%1' " ) . arg ( USER_AGENT ) ) ;
logger - > addMessage ( tr ( " DHT support [%1] " ) . arg ( isDHTEnabled ( ) ? tr ( " ON " ) : tr ( " OFF " ) ) , Log : : INFO ) ;
LogMsg ( tr ( " DHT support [%1] " ) . arg ( isDHTEnabled ( ) ? tr ( " ON " ) : tr ( " OFF " ) ) , Log : : INFO ) ;
logger - > addMessage ( tr ( " Local Peer Discovery support [%1] " ) . arg ( isLSDEnabled ( ) ? tr ( " ON " ) : tr ( " OFF " ) ) , Log : : INFO ) ;
LogMsg ( tr ( " Local Peer Discovery support [%1] " ) . arg ( isLSDEnabled ( ) ? tr ( " ON " ) : tr ( " OFF " ) ) , Log : : INFO ) ;
logger - > addMessage ( tr ( " PeX support [%1] " ) . arg ( isPeXEnabled ( ) ? tr ( " ON " ) : tr ( " OFF " ) ) , Log : : INFO ) ;
LogMsg ( tr ( " PeX support [%1] " ) . arg ( isPeXEnabled ( ) ? tr ( " ON " ) : tr ( " OFF " ) ) , Log : : INFO ) ;
logger - > addMessage ( tr ( " Anonymous mode [%1] " ) . arg ( isAnonymousModeEnabled ( ) ? tr ( " ON " ) : tr ( " OFF " ) ) , Log : : INFO ) ;
LogMsg ( tr ( " Anonymous mode [%1] " ) . arg ( isAnonymousModeEnabled ( ) ? tr ( " ON " ) : tr ( " OFF " ) ) , Log : : INFO ) ;
logger - > addMessage ( tr ( " Encryption support [%1] " )
LogMsg ( tr ( " Encryption support [%1] " ) . arg ( ( encryption ( ) = = 0 ) ? tr ( " ON " ) :
. arg ( encryption ( ) = = 0 ? tr ( " ON " ) : encryption ( ) = = 1 ? tr ( " FORCED " ) : tr ( " OFF " ) )
( ( encryption ( ) = = 1 ) ? tr ( " FORCED " ) : tr ( " OFF " ) ) ) , Log : : INFO ) ;
, Log : : INFO ) ;
if ( isBandwidthSchedulerEnabled ( ) )
if ( isBandwidthSchedulerEnabled ( ) )
enableBandwidthScheduler ( ) ;
enableBandwidthScheduler ( ) ;
@ -525,8 +524,7 @@ void Session::setDHTEnabled(bool enabled)
if ( enabled ! = m_isDHTEnabled ) {
if ( enabled ! = m_isDHTEnabled ) {
m_isDHTEnabled = enabled ;
m_isDHTEnabled = enabled ;
configureDeferred ( ) ;
configureDeferred ( ) ;
Logger : : instance ( ) - > addMessage (
LogMsg ( tr ( " DHT support [%1] " ) . arg ( enabled ? tr ( " ON " ) : tr ( " OFF " ) ) , Log : : INFO ) ;
tr ( " DHT support [%1] " ) . arg ( enabled ? tr ( " ON " ) : tr ( " OFF " ) ) , Log : : INFO ) ;
}
}
}
}
@ -540,9 +538,8 @@ void Session::setLSDEnabled(const bool enabled)
if ( enabled ! = m_isLSDEnabled ) {
if ( enabled ! = m_isLSDEnabled ) {
m_isLSDEnabled = enabled ;
m_isLSDEnabled = enabled ;
configureDeferred ( ) ;
configureDeferred ( ) ;
Logger : : instance ( ) - > addMessage (
LogMsg ( tr ( " Local Peer Discovery support [%1] " ) . arg ( enabled ? tr ( " ON " ) : tr ( " OFF " ) )
tr ( " Local Peer Discovery support [%1] " ) . arg ( enabled ? tr ( " ON " ) : tr ( " OFF " ) )
, Log : : INFO ) ;
, Log : : INFO ) ;
}
}
}
}
@ -555,7 +552,7 @@ void Session::setPeXEnabled(const bool enabled)
{
{
m_isPeXEnabled = enabled ;
m_isPeXEnabled = enabled ;
if ( m_wasPexEnabled ! = enabled )
if ( m_wasPexEnabled ! = enabled )
Logger : : instance ( ) - > add Me ssa ge ( tr ( " Restart is required to toggle PeX support " ) , Log : : WARNING ) ;
LogMsg ( tr ( " Restart is required to toggle PeX support " ) , Log : : WARNING ) ;
}
}
bool Session : : isTempPathEnabled ( ) const
bool Session : : isTempPathEnabled ( ) const
@ -1132,12 +1129,13 @@ void Session::initMetrics()
void Session : : configure ( lt : : settings_pack & settingsPack )
void Session : : configure ( lt : : settings_pack & settingsPack )
{
{
Logger * const logger = Logger : : instance ( ) ;
// from libtorrent doc:
// It will not take affect until the listen_interfaces settings is updated
settingsPack . set_int ( lt : : settings_pack : : listen_queue_size , socketBacklogSize ( ) ) ;
# ifdef Q_OS_WIN
# ifdef Q_OS_WIN
QString chosenIP ;
QString chosenIP ;
# endif
# endif
if ( m_listenInterfaceChanged ) {
if ( m_listenInterfaceChanged ) {
const ushort port = this - > port ( ) ;
const ushort port = this - > port ( ) ;
const std : : pair < int , int > ports ( port , port ) ;
const std : : pair < int , int > ports ( port , port ) ;
@ -1149,10 +1147,10 @@ void Session::configure(lt::settings_pack &settingsPack)
if ( ip . isEmpty ( ) ) {
if ( ip . isEmpty ( ) ) {
ip = QLatin1String ( " 0.0.0.0 " ) ;
ip = QLatin1String ( " 0.0.0.0 " ) ;
interfacesStr = std : : string ( ( QString ( " %1:%2 " ) . arg ( ip ) . arg ( port ) ) . toLatin1 ( ) . constData ( ) ) ;
interfacesStr = std : : string ( ( QString ( " %1:%2 " ) . arg ( ip ) . arg ( port ) ) . toLatin1 ( ) . constData ( ) ) ;
logger - > addMessage ( tr ( " qBittorrent is trying to listen on any interface port: %1 "
LogMsg ( tr ( " qBittorrent is trying to listen on any interface port: %1 "
, " e.g: qBittorrent is trying to listen on any interface port: TCP/6881 " )
, " e.g: qBittorrent is trying to listen on any interface port: TCP/6881 " )
. arg ( QString : : number ( port ) )
. arg ( QString : : number ( port ) )
, Log : : INFO ) ;
, Log : : INFO ) ;
settingsPack . set_str ( lt : : settings_pack : : listen_interfaces , interfacesStr ) ;
settingsPack . set_str ( lt : : settings_pack : : listen_interfaces , interfacesStr ) ;
break ;
break ;
@ -1162,10 +1160,10 @@ void Session::configure(lt::settings_pack &settingsPack)
if ( ! ec ) {
if ( ! ec ) {
interfacesStr = std : : string ( ( addr . is_v6 ( ) ? QString ( " [%1]:%2 " ) : QString ( " %1:%2 " ) )
interfacesStr = std : : string ( ( addr . is_v6 ( ) ? QString ( " [%1]:%2 " ) : QString ( " %1:%2 " ) )
. arg ( ip ) . arg ( port ) . toLatin1 ( ) . constData ( ) ) ;
. arg ( ip ) . arg ( port ) . toLatin1 ( ) . constData ( ) ) ;
logger - > addMessage ( tr ( " qBittorrent is trying to listen on interface %1 port: %2 "
LogMsg ( tr ( " qBittorrent is trying to listen on interface %1 port: %2 "
, " e.g: qBittorrent is trying to listen on interface 192.168.0.1 port: TCP/6881 " )
, " e.g: qBittorrent is trying to listen on interface 192.168.0.1 port: TCP/6881 " )
. arg ( ip ) . arg ( port )
. arg ( ip ) . arg ( port )
, Log : : INFO ) ;
, Log : : INFO ) ;
settingsPack . set_str ( lt : : settings_pack : : listen_interfaces , interfacesStr ) ;
settingsPack . set_str ( lt : : settings_pack : : listen_interfaces , interfacesStr ) ;
# ifdef Q_OS_WIN
# ifdef Q_OS_WIN
chosenIP = ip ;
chosenIP = ip ;
@ -1258,6 +1256,8 @@ void Session::configure(lt::settings_pack &settingsPack)
settingsPack . set_int ( lt : : settings_pack : : aio_threads , asyncIOThreads ( ) ) ;
settingsPack . set_int ( lt : : settings_pack : : aio_threads , asyncIOThreads ( ) ) ;
settingsPack . set_int ( lt : : settings_pack : : file_pool_size , filePoolSize ( ) ) ;
const int checkingMemUsageSize = checkingMemUsage ( ) * 64 ;
const int checkingMemUsageSize = checkingMemUsage ( ) * 64 ;
settingsPack . set_int ( lt : : settings_pack : : checking_mem_usage , checkingMemUsageSize ) ;
settingsPack . set_int ( lt : : settings_pack : : checking_mem_usage , checkingMemUsageSize ) ;
@ -1466,19 +1466,17 @@ void Session::configurePeerClasses()
void Session : : enableTracker ( const bool enable )
void Session : : enableTracker ( const bool enable )
{
{
Logger * const logger = Logger : : instance ( ) ;
if ( enable ) {
if ( enable ) {
if ( ! m_tracker )
if ( ! m_tracker )
m_tracker = new Tracker ( this ) ;
m_tracker = new Tracker ( this ) ;
if ( m_tracker - > start ( ) )
if ( m_tracker - > start ( ) )
logger - > addMessage ( tr ( " Embedded Tracker [ON] " ) , Log : : INFO ) ;
LogMsg ( tr ( " Embedded Tracker [ON] " ) , Log : : INFO ) ;
else
else
logger - > addMessage ( tr ( " Failed to start the embedded tracker! " ) , Log : : CRITICAL ) ;
LogMsg ( tr ( " Failed to start the embedded tracker! " ) , Log : : CRITICAL ) ;
}
}
else {
else {
logger - > addMessage ( tr ( " Embedded Tracker [OFF] " ) , Log : : INFO ) ;
LogMsg ( tr ( " Embedded Tracker [OFF] " ) , Log : : INFO ) ;
if ( m_tracker )
if ( m_tracker )
delete m_tracker ;
delete m_tracker ;
}
}
@ -1521,14 +1519,13 @@ void Session::processShareLimits()
qDebug ( " Ratio: %f (limit: %f) " , ratio , ratioLimit ) ;
qDebug ( " Ratio: %f (limit: %f) " , ratio , ratioLimit ) ;
if ( ( ratio < = TorrentHandle : : MAX_RATIO ) & & ( ratio > = ratioLimit ) ) {
if ( ( ratio < = TorrentHandle : : MAX_RATIO ) & & ( ratio > = ratioLimit ) ) {
Logger * const logger = Logger : : instance ( ) ;
if ( m_maxRatioAction = = Remove ) {
if ( m_maxRatioAction = = Remove ) {
logger - > addMessage ( tr ( " '%1' reached the maximum ratio you set. Removed. " ) . arg ( torrent - > name ( ) ) ) ;
LogMsg ( tr ( " '%1' reached the maximum ratio you set. Removed. " ) . arg ( torrent - > name ( ) ) ) ;
deleteTorrent ( torrent - > hash ( ) ) ;
deleteTorrent ( torrent - > hash ( ) ) ;
}
}
else if ( ! torrent - > isPaused ( ) ) {
else if ( ! torrent - > isPaused ( ) ) {
torrent - > pause ( ) ;
torrent - > pause ( ) ;
logger - > addMessage ( tr ( " '%1' reached the maximum ratio you set. Paused. " ) . arg ( torrent - > name ( ) ) ) ;
LogMsg ( tr ( " '%1' reached the maximum ratio you set. Paused. " ) . arg ( torrent - > name ( ) ) ) ;
}
}
continue ;
continue ;
}
}
@ -1545,14 +1542,13 @@ void Session::processShareLimits()
if ( seedingTimeLimit > = 0 ) {
if ( seedingTimeLimit > = 0 ) {
if ( ( seedingTimeInMinutes < = TorrentHandle : : MAX_SEEDING_TIME ) & & ( seedingTimeInMinutes > = seedingTimeLimit ) ) {
if ( ( seedingTimeInMinutes < = TorrentHandle : : MAX_SEEDING_TIME ) & & ( seedingTimeInMinutes > = seedingTimeLimit ) ) {
Logger * const logger = Logger : : instance ( ) ;
if ( m_maxRatioAction = = Remove ) {
if ( m_maxRatioAction = = Remove ) {
logger - > addMessage ( tr ( " '%1' reached the maximum seeding time you set. Removed. " ) . arg ( torrent - > name ( ) ) ) ;
LogMsg ( tr ( " '%1' reached the maximum seeding time you set. Removed. " ) . arg ( torrent - > name ( ) ) ) ;
deleteTorrent ( torrent - > hash ( ) ) ;
deleteTorrent ( torrent - > hash ( ) ) ;
}
}
else if ( ! torrent - > isPaused ( ) ) {
else if ( ! torrent - > isPaused ( ) ) {
torrent - > pause ( ) ;
torrent - > pause ( ) ;
logger - > addMessage ( tr ( " '%1' reached the maximum seeding time you set. Paused. " ) . arg ( torrent - > name ( ) ) ) ;
LogMsg ( tr ( " '%1' reached the maximum seeding time you set. Paused. " ) . arg ( torrent - > name ( ) ) ) ;
}
}
}
}
}
}
@ -2241,7 +2237,7 @@ void Session::setTempPath(QString path)
void Session : : networkOnlineStateChanged ( const bool online )
void Session : : networkOnlineStateChanged ( const bool online )
{
{
Logger : : instance ( ) - > add Me ssa ge ( tr ( " System network status changed to %1 " , " e.g: System network status changed to ONLINE " ) . arg ( online ? tr ( " ONLINE " ) : tr ( " OFFLINE " ) ) , Log : : INFO ) ;
LogMsg ( tr ( " System network status changed to %1 " , " e.g: System network status changed to ONLINE " ) . arg ( online ? tr ( " ONLINE " ) : tr ( " OFFLINE " ) ) , Log : : INFO ) ;
}
}
void Session : : networkConfigurationChange ( const QNetworkConfiguration & cfg )
void Session : : networkConfigurationChange ( const QNetworkConfiguration & cfg )
@ -2254,14 +2250,13 @@ void Session::networkConfigurationChange(const QNetworkConfiguration &cfg)
const QString changedInterface = cfg . name ( ) ;
const QString changedInterface = cfg . name ( ) ;
if ( configuredInterfaceName = = changedInterface ) {
if ( configuredInterfaceName = = changedInterface ) {
Logger : : instance ( ) - > add Me ssa ge ( tr ( " Network configuration of %1 has changed, refreshing session binding " , " e.g: Network configuration of tun0 has changed, refreshing session binding " ) . arg ( changedInterface ) , Log : : INFO ) ;
LogMsg ( tr ( " Network configuration of %1 has changed, refreshing session binding " , " e.g: Network configuration of tun0 has changed, refreshing session binding " ) . arg ( changedInterface ) , Log : : INFO ) ;
configureListeningInterface ( ) ;
configureListeningInterface ( ) ;
}
}
}
}
const QStringList Session : : getListeningIPs ( )
const QStringList Session : : getListeningIPs ( )
{
{
Logger * const logger = Logger : : instance ( ) ;
QStringList IPs ;
QStringList IPs ;
const QString ifaceName = networkInterface ( ) ;
const QString ifaceName = networkInterface ( ) ;
@ -2271,7 +2266,7 @@ const QStringList Session::getListeningIPs()
if ( ! ifaceAddr . isEmpty ( ) ) {
if ( ! ifaceAddr . isEmpty ( ) ) {
QHostAddress addr ( ifaceAddr ) ;
QHostAddress addr ( ifaceAddr ) ;
if ( addr . isNull ( ) ) {
if ( addr . isNull ( ) ) {
logger - > addMessage ( tr ( " Configured network interface address %1 isn't valid. " , " Configured network interface address 124.5.1568.1 isn't valid. " ) . arg ( ifaceAddr ) , Log : : CRITICAL ) ;
LogMsg ( tr ( " Configured network interface address %1 isn't valid. " , " Configured network interface address 124.5.1568.1 isn't valid. " ) . arg ( ifaceAddr ) , Log : : CRITICAL ) ;
IPs . append ( " 127.0.0.1 " ) ; // Force listening to localhost and avoid accidental connection that will expose user data.
IPs . append ( " 127.0.0.1 " ) ; // Force listening to localhost and avoid accidental connection that will expose user data.
return IPs ;
return IPs ;
}
}
@ -2290,7 +2285,7 @@ const QStringList Session::getListeningIPs()
const QNetworkInterface networkIFace = QNetworkInterface : : interfaceFromName ( ifaceName ) ;
const QNetworkInterface networkIFace = QNetworkInterface : : interfaceFromName ( ifaceName ) ;
if ( ! networkIFace . isValid ( ) ) {
if ( ! networkIFace . isValid ( ) ) {
qDebug ( " Invalid network interface: %s " , qUtf8Printable ( ifaceName ) ) ;
qDebug ( " Invalid network interface: %s " , qUtf8Printable ( ifaceName ) ) ;
logger - > addMessage ( tr ( " The network interface defined is invalid: %1 " ) . arg ( ifaceName ) , Log : : CRITICAL ) ;
LogMsg ( tr ( " The network interface defined is invalid: %1 " ) . arg ( ifaceName ) , Log : : CRITICAL ) ;
IPs . append ( " 127.0.0.1 " ) ; // Force listening to localhost and avoid accidental connection that will expose user data.
IPs . append ( " 127.0.0.1 " ) ; // Force listening to localhost and avoid accidental connection that will expose user data.
return IPs ;
return IPs ;
}
}
@ -2324,7 +2319,9 @@ const QStringList Session::getListeningIPs()
// Make sure there is at least one IP
// Make sure there is at least one IP
// At this point there was a valid network interface, with no suitable IP.
// At this point there was a valid network interface, with no suitable IP.
if ( IPs . size ( ) = = 0 ) {
if ( IPs . size ( ) = = 0 ) {
logger - > addMessage ( tr ( " qBittorrent didn't find an %1 local address to listen on " , " qBittorrent didn't find an IPv4 local address to listen on " ) . arg ( listenIPv6 ? " IPv6 " : " IPv4 " ) , Log : : CRITICAL ) ;
LogMsg ( tr ( " qBittorrent didn't find an %1 local address to listen on "
, " qBittorrent didn't find an IPv4 local address to listen on " )
. arg ( listenIPv6 ? " IPv6 " : " IPv4 " ) , Log : : CRITICAL ) ;
IPs . append ( " 127.0.0.1 " ) ; // Force listening to localhost and avoid accidental connection that will expose user data.
IPs . append ( " 127.0.0.1 " ) ; // Force listening to localhost and avoid accidental connection that will expose user data.
return IPs ;
return IPs ;
}
}
@ -2588,10 +2585,9 @@ void Session::setEncryption(const int state)
if ( state ! = encryption ( ) ) {
if ( state ! = encryption ( ) ) {
m_encryption = state ;
m_encryption = state ;
configureDeferred ( ) ;
configureDeferred ( ) ;
Logger : : instance ( ) - > addMessage (
LogMsg ( tr ( " Encryption support [%1] " ) . arg (
tr ( " Encryption support [%1] " )
state = = 0 ? tr ( " ON " ) : ( ( state = = 1 ) ? tr ( " FORCED " ) : tr ( " OFF " ) ) )
. arg ( state = = 0 ? tr ( " ON " ) : state = = 1 ? tr ( " FORCED " ) : tr ( " OFF " ) )
, Log : : INFO ) ;
, Log : : INFO ) ;
}
}
}
}
@ -2713,10 +2709,9 @@ void Session::setBannedIPs(const QStringList &newList)
filteredList < < QHostAddress ( ip ) . toString ( ) ;
filteredList < < QHostAddress ( ip ) . toString ( ) ;
}
}
else {
else {
Logger : : instance ( ) - > addMessage (
LogMsg ( tr ( " %1 is not a valid IP address and was rejected while applying the list of banned addresses. " )
tr ( " %1 is not a valid IP address and was rejected while applying the list of banned addresses. " )
. arg ( ip )
. arg ( ip )
, Log : : WARNING ) ;
, Log : : WARNING ) ;
}
}
}
}
// now we have to sort IPs and make them unique
// now we have to sort IPs and make them unique
@ -2822,6 +2817,20 @@ void Session::setAsyncIOThreads(const int num)
configureDeferred ( ) ;
configureDeferred ( ) ;
}
}
int Session : : filePoolSize ( ) const
{
return m_filePoolSize ;
}
void Session : : setFilePoolSize ( const int size )
{
if ( size = = m_filePoolSize )
return ;
m_filePoolSize = size ;
configureDeferred ( ) ;
}
int Session : : checkingMemUsage ( ) const
int Session : : checkingMemUsage ( ) const
{
{
return qMax ( 1 , m_checkingMemUsage . value ( ) ) ;
return qMax ( 1 , m_checkingMemUsage . value ( ) ) ;
@ -2967,6 +2976,19 @@ void Session::setSendBufferWatermarkFactor(const int value)
configureDeferred ( ) ;
configureDeferred ( ) ;
}
}
int Session : : socketBacklogSize ( ) const
{
return m_socketBacklogSize ;
}
void Session : : setSocketBacklogSize ( const int value )
{
if ( value = = m_socketBacklogSize ) return ;
m_socketBacklogSize = value ;
configureDeferred ( ) ;
}
bool Session : : isAnonymousModeEnabled ( ) const
bool Session : : isAnonymousModeEnabled ( ) const
{
{
return m_isAnonymousModeEnabled ;
return m_isAnonymousModeEnabled ;
@ -2977,9 +2999,8 @@ void Session::setAnonymousModeEnabled(const bool enabled)
if ( enabled ! = m_isAnonymousModeEnabled ) {
if ( enabled ! = m_isAnonymousModeEnabled ) {
m_isAnonymousModeEnabled = enabled ;
m_isAnonymousModeEnabled = enabled ;
configureDeferred ( ) ;
configureDeferred ( ) ;
Logger : : instance ( ) - > addMessage (
LogMsg ( tr ( " Anonymous mode [%1] " ) . arg ( isAnonymousModeEnabled ( ) ? tr ( " ON " ) : tr ( " OFF " ) )
tr ( " Anonymous mode [%1] " ) . arg ( isAnonymousModeEnabled ( ) ? tr ( " ON " ) : tr ( " OFF " ) )
, Log : : INFO ) ;
, Log : : INFO ) ;
}
}
}
}
@ -3456,7 +3477,7 @@ void Session::handleTorrentFinished(TorrentHandle *const torrent)
}
}
else {
else {
qDebug ( " Caught error loading torrent " ) ;
qDebug ( " Caught error loading torrent " ) ;
Logger : : instance ( ) - > add Me ssa ge ( tr ( " Unable to decode '%1' torrent file. " ) . arg ( Utils : : Fs : : toNativePath ( torrentFullpath ) ) , Log : : CRITICAL ) ;
LogMsg ( tr ( " Unable to decode '%1' torrent file. " ) . arg ( Utils : : Fs : : toNativePath ( torrentFullpath ) ) , Log : : CRITICAL ) ;
}
}
}
}
}
}
@ -3598,10 +3619,9 @@ void Session::recursiveTorrentDownload(const InfoHash &hash)
for ( int i = 0 ; i < torrent - > filesCount ( ) ; + + i ) {
for ( int i = 0 ; i < torrent - > filesCount ( ) ; + + i ) {
const QString torrentRelpath = torrent - > filePath ( i ) ;
const QString torrentRelpath = torrent - > filePath ( i ) ;
if ( torrentRelpath . endsWith ( " .torrent " ) ) {
if ( torrentRelpath . endsWith ( " .torrent " ) ) {
Logger : : instance ( ) - > addMessage (
LogMsg ( tr ( " Recursive download of file '%1' embedded in torrent '%2' "
tr ( " Recursive download of file '%1' embedded in torrent '%2' "
, " Recursive download of 'test.torrent' embedded in torrent 'test2' " )
, " Recursive download of 'test.torrent' embedded in torrent 'test2' " )
. arg ( Utils : : Fs : : toNativePath ( torrentRelpath ) , torrent - > name ( ) ) ) ;
. arg ( Utils : : Fs : : toNativePath ( torrentRelpath ) , torrent - > name ( ) ) ) ;
const QString torrentFullpath = torrent - > savePath ( ) + ' / ' + torrentRelpath ;
const QString torrentFullpath = torrent - > savePath ( ) + ' / ' + torrentRelpath ;
AddTorrentParams params ;
AddTorrentParams params ;
@ -3631,8 +3651,6 @@ void Session::startUpTorrents()
QStringList fastresumes = resumeDataDir . entryList (
QStringList fastresumes = resumeDataDir . entryList (
QStringList ( QLatin1String ( " *.fastresume " ) ) , QDir : : Files , QDir : : Unsorted ) ;
QStringList ( QLatin1String ( " *.fastresume " ) ) , QDir : : Files , QDir : : Unsorted ) ;
Logger * const logger = Logger : : instance ( ) ;
typedef struct
typedef struct
{
{
QString hash ;
QString hash ;
@ -3642,13 +3660,13 @@ void Session::startUpTorrents()
} TorrentResumeData ;
} TorrentResumeData ;
int resumedTorrentsCount = 0 ;
int resumedTorrentsCount = 0 ;
const auto startupTorrent = [ this , logger , & resumeDataDir , & resumedTorrentsCount ] ( const TorrentResumeData & params )
const auto startupTorrent = [ this , & resumeDataDir , & resumedTorrentsCount ] ( const TorrentResumeData & params )
{
{
const QString filePath = resumeDataDir . filePath ( QString ( " %1.torrent " ) . arg ( params . hash ) ) ;
const QString filePath = resumeDataDir . filePath ( QString ( " %1.torrent " ) . arg ( params . hash ) ) ;
qDebug ( ) < < " Starting up torrent " < < params . hash < < " ... " ;
qDebug ( ) < < " Starting up torrent " < < params . hash < < " ... " ;
if ( ! addTorrent_impl ( params . addTorrentData , params . magnetUri , TorrentInfo : : loadFromFile ( filePath ) , params . data ) )
if ( ! addTorrent_impl ( params . addTorrentData , params . magnetUri , TorrentInfo : : loadFromFile ( filePath ) , params . data ) )
logger - > addMessage ( tr ( " Unable to resume torrent '%1'. " , " e.g: Unable to resume torrent 'hash'. " )
LogMsg ( tr ( " Unable to resume torrent '%1'. " , " e.g: Unable to resume torrent 'hash'. " )
. arg ( params . hash ) , Log : : CRITICAL ) ;
. arg ( params . hash ) , Log : : CRITICAL ) ;
// process add torrent messages before message queue overflow
// process add torrent messages before message queue overflow
if ( ( resumedTorrentsCount % 100 ) = = 0 ) readAlerts ( ) ;
if ( ( resumedTorrentsCount % 100 ) = = 0 ) readAlerts ( ) ;
@ -3704,9 +3722,8 @@ void Session::startUpTorrents()
}
}
if ( numOfRemappedFiles > 0 ) {
if ( numOfRemappedFiles > 0 ) {
logger - > addMessage (
LogMsg ( QString ( tr ( " Queue positions were corrected in %1 resume files " ) )
QString ( tr ( " Queue positions were corrected in %1 resume files " ) ) . arg ( numOfRemappedFiles ) ,
. arg ( numOfRemappedFiles ) , Log : : CRITICAL ) ;
Log : : CRITICAL ) ;
}
}
// starting up downloading torrents (queue position > 0)
// starting up downloading torrents (queue position > 0)
@ -3725,7 +3742,7 @@ void Session::startUpTorrents()
}
}
else {
else {
LogMsg ( tr ( " Couldn't load torrents queue from '%1'. Error: %2 " )
LogMsg ( tr ( " Couldn't load torrents queue from '%1'. Error: %2 " )
. arg ( queueFile . fileName ( ) , queueFile . errorString ( ) ) , Log : : WARNING ) ;
. arg ( queueFile . fileName ( ) , queueFile . errorString ( ) ) , Log : : WARNING ) ;
}
}
if ( ! queue . empty ( ) )
if ( ! queue . empty ( ) )
@ -3772,7 +3789,7 @@ void Session::handleIPFilterParsed(const int ruleCount)
processBannedIPs ( filter ) ;
processBannedIPs ( filter ) ;
m_nativeSession - > set_ip_filter ( filter ) ;
m_nativeSession - > set_ip_filter ( filter ) ;
}
}
Logger : : instance ( ) - > add Me ssa ge ( tr ( " Successfully parsed the provided IP filter: %1 rules were applied. " , " %1 is a number " ) . arg ( ruleCount ) ) ;
LogMsg ( tr ( " Successfully parsed the provided IP filter: %1 rules were applied. " , " %1 is a number " ) . arg ( ruleCount ) ) ;
emit IPFilterParsed ( false , ruleCount ) ;
emit IPFilterParsed ( false , ruleCount ) ;
}
}
@ -3782,7 +3799,7 @@ void Session::handleIPFilterError()
processBannedIPs ( filter ) ;
processBannedIPs ( filter ) ;
m_nativeSession - > set_ip_filter ( filter ) ;
m_nativeSession - > set_ip_filter ( filter ) ;
Logger : : instance ( ) - > add Me ssa ge ( tr ( " Error: Failed to parse the provided IP filter. " ) , Log : : CRITICAL ) ;
LogMsg ( tr ( " Error: Failed to parse the provided IP filter. " ) , Log : : CRITICAL ) ;
emit IPFilterParsed ( true , 0 ) ;
emit IPFilterParsed ( true , 0 ) ;
}
}
@ -3908,12 +3925,10 @@ void Session::createTorrentHandle(const lt::torrent_handle &nativeHandle)
TorrentHandle * const torrent = new TorrentHandle ( this , nativeHandle , params ) ;
TorrentHandle * const torrent = new TorrentHandle ( this , nativeHandle , params ) ;
m_torrents . insert ( torrent - > hash ( ) , torrent ) ;
m_torrents . insert ( torrent - > hash ( ) , torrent ) ;
Logger * const logger = Logger : : instance ( ) ;
const bool fromMagnetUri = ! torrent - > hasMetadata ( ) ;
const bool fromMagnetUri = ! torrent - > hasMetadata ( ) ;
if ( params . restored ) {
if ( params . restored ) {
logger - > addMessage ( tr ( " '%1' restored. " , " 'torrent name' restored. " ) . arg ( torrent - > name ( ) ) ) ;
LogMsg ( tr ( " '%1' restored. " , " 'torrent name' restored. " ) . arg ( torrent - > name ( ) ) ) ;
}
}
else {
else {
// The following is useless for newly added magnet
// The following is useless for newly added magnet
@ -3927,15 +3942,15 @@ void Session::createTorrentHandle(const lt::torrent_handle &nativeHandle)
exportTorrentFile ( torrent ) ;
exportTorrentFile ( torrent ) ;
}
}
else {
else {
logger - > addMessage ( tr ( " Couldn't save '%1.torrent' " ) . arg ( torrent - > hash ( ) ) , Log : : CRITICAL ) ;
LogMsg ( tr ( " Couldn't save '%1.torrent' " ) . arg ( torrent - > hash ( ) ) , Log : : CRITICAL ) ;
}
}
}
}
if ( isAddTrackersEnabled ( ) & & ! torrent - > isPrivate ( ) )
if ( isAddTrackersEnabled ( ) & & ! torrent - > isPrivate ( ) )
torrent - > addTrackers ( m_additionalTrackerList ) ;
torrent - > addTrackers ( m_additionalTrackerList ) ;
logger - > addMessage ( tr ( " '%1' added to download list. " , " 'torrent name' was added to download list. " )
LogMsg ( tr ( " '%1' added to download list. " , " 'torrent name' was added to download list. " )
. arg ( torrent - > name ( ) ) ) ;
. arg ( torrent - > name ( ) ) ) ;
// In case of crash before the scheduled generation
// In case of crash before the scheduled generation
// of the fastresumes.
// of the fastresumes.
@ -3958,7 +3973,7 @@ void Session::handleAddTorrentAlert(const lt::add_torrent_alert *p)
if ( p - > error ) {
if ( p - > error ) {
qDebug ( " /! \\ Error: Failed to add torrent! " ) ;
qDebug ( " /! \\ Error: Failed to add torrent! " ) ;
QString msg = QString : : fromStdString ( p - > message ( ) ) ;
QString msg = QString : : fromStdString ( p - > message ( ) ) ;
Logger : : instance ( ) - > add Me ssa ge ( tr ( " Couldn't add torrent. Reason: %1 " ) . arg ( msg ) , Log : : WARNING ) ;
LogMsg ( tr ( " Couldn't add torrent. Reason: %1 " ) . arg ( msg ) , Log : : WARNING ) ;
emit addTorrentFailed ( msg ) ;
emit addTorrentFailed ( msg ) ;
}
}
else {
else {
@ -4045,13 +4060,13 @@ void Session::handleFileErrorAlert(const lt::file_error_alert *p)
void Session : : handlePortmapWarningAlert ( const lt : : portmap_error_alert * p )
void Session : : handlePortmapWarningAlert ( const lt : : portmap_error_alert * p )
{
{
Logger : : instance ( ) - > add Me ssa ge ( tr ( " UPnP/NAT-PMP: Port mapping failure, message: %1 " ) . arg ( QString : : fromStdString ( p - > message ( ) ) ) , Log : : CRITICAL ) ;
LogMsg ( tr ( " UPnP/NAT-PMP: Port mapping failure, message: %1 " ) . arg ( QString : : fromStdString ( p - > message ( ) ) ) , Log : : CRITICAL ) ;
}
}
void Session : : handlePortmapAlert ( const lt : : portmap_alert * p )
void Session : : handlePortmapAlert ( const lt : : portmap_alert * p )
{
{
qDebug ( " UPnP Success, msg: %s " , p - > message ( ) . c_str ( ) ) ;
qDebug ( " UPnP Success, msg: %s " , p - > message ( ) . c_str ( ) ) ;
Logger : : instance ( ) - > add Me ssa ge ( tr ( " UPnP/NAT-PMP: Port mapping successful, message: %1 " ) . arg ( QString : : fromStdString ( p - > message ( ) ) ) , Log : : INFO ) ;
LogMsg ( tr ( " UPnP/NAT-PMP: Port mapping successful, message: %1 " ) . arg ( QString : : fromStdString ( p - > message ( ) ) ) , Log : : INFO ) ;
}
}
void Session : : handlePeerBlockedAlert ( const lt : : peer_blocked_alert * p )
void Session : : handlePeerBlockedAlert ( const lt : : peer_blocked_alert * p )
@ -4103,9 +4118,9 @@ void Session::handlePeerBanAlert(const lt::peer_ban_alert *p)
void Session : : handleUrlSeedAlert ( const lt : : url_seed_alert * p )
void Session : : handleUrlSeedAlert ( const lt : : url_seed_alert * p )
{
{
Logger : : instance ( ) - > add Me ssa ge ( tr ( " URL seed lookup failed for URL: '%1', message: %2 " )
LogMsg ( tr ( " URL seed lookup failed for URL: '%1', message: %2 " )
. arg ( QString : : fromStdString ( p - > server_url ( ) ) )
. arg ( QString : : fromStdString ( p - > server_url ( ) ) , QString : : fromStdString ( p - > message ( ) ) )
. arg ( QString : : fromStdString ( p - > message ( ) ) ) , Log : : CRITICAL ) ;
, Log : : CRITICAL ) ;
}
}
void Session : : handleListenSucceededAlert ( const lt : : listen_succeeded_alert * p )
void Session : : handleListenSucceededAlert ( const lt : : listen_succeeded_alert * p )
@ -4235,7 +4250,7 @@ void Session::handleListenFailedAlert(const lt::listen_failed_alert *p)
void Session : : handleExternalIPAlert ( const lt : : external_ip_alert * p )
void Session : : handleExternalIPAlert ( const lt : : external_ip_alert * p )
{
{
boost : : system : : error_code ec ;
boost : : system : : error_code ec ;
Logger : : instance ( ) - > add Me ssa ge ( tr ( " External IP: %1 " , " e.g. External IP: 192.168.0.1 " ) . arg ( p - > external_address . to_string ( ec ) . c_str ( ) ) , Log : : INFO ) ;
LogMsg ( tr ( " External IP: %1 " , " e.g. External IP: 192.168.0.1 " ) . arg ( p - > external_address . to_string ( ec ) . c_str ( ) ) , Log : : INFO ) ;
}
}
void Session : : handleSessionStatsAlert ( const lt : : session_stats_alert * p )
void Session : : handleSessionStatsAlert ( const lt : : session_stats_alert * p )