From 63457c034f44b73e412ecb9e27e5955d6775cc8b Mon Sep 17 00:00:00 2001 From: Christophe Dumez Date: Thu, 25 Mar 2010 19:16:43 +0000 Subject: [PATCH] Maximum number of half-open connections can now be changed from program preferences (default is now 50 instead of unlimited) --- Changelog | 3 +++ src/Icons/qBittorrent.desktop | 2 +- src/Icons/skin/splash.png | Bin 80304 -> 81269 bytes src/advancedsettings.h | 16 +++++++++++++--- src/bittorrent.cpp | 2 ++ src/preferences.h | 13 +++++++++++++ 6 files changed, 32 insertions(+), 4 deletions(-) diff --git a/Changelog b/Changelog index e66e61d27..3e5c5c997 100644 --- a/Changelog +++ b/Changelog @@ -1,3 +1,6 @@ +* Unreleased - Christophe Dumez - v2.3.0 + - FEATURE: Max number of half-open connections can now be edited + * Sun Mar 14 2010 - Christophe Dumez - v2.2.0 - FEATURE: User can set alternative speed limits for fast toggling - FEATURE: Bandwidth scheduler (automatically use alternative speed limits for a given period) diff --git a/src/Icons/qBittorrent.desktop b/src/Icons/qBittorrent.desktop index b0768fea6..dda31ecbd 100644 --- a/src/Icons/qBittorrent.desktop +++ b/src/Icons/qBittorrent.desktop @@ -1,6 +1,6 @@ [Desktop Entry] Categories=Qt;Network;P2P; -Comment=V2.2.0 +Comment=V2.3.0 Exec=qbittorrent %f GenericName=Bittorrent client GenericName[bg]=Торент клиент diff --git a/src/Icons/skin/splash.png b/src/Icons/skin/splash.png index cfc11493c0afdf2b872ad2b73dfa1361d3640f39..d77fd4c5e92d3b1a69675f11c95b2ce8ffe5c7cb 100644 GIT binary patch delta 14137 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 HEW-X5E>qE{ delta 13182 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

P$KB4zr#7o+r-`l2}G(_WA6(=lvPPx6j8u zIKrYl$oCVfb&zgDOqv9(Qw@#41D&Df%YA<12GtK;!=u6`r_;rk69z)RodUXaNSVC0@%z{1+J7n5 zQ*Onv?dINo4{>=bCdGJ-tM{j&&ldvyE7y2^x|>&FzRRQ&1UG)cXS0K?u2^MlEyc9D zFwGNUF;?Z^3J-U*b^tXzp7b!ZVHox@GCz<}97X3C+MXjs-p~8b?y~gV>y)VFahC35 z=U8ly21-q(R0Q!dEc;~)cQFPB;z|pgmT234ptf|*UNo-|E(OD7*9wO1#BrTU;vdaB z6?4VaHp1_;bB{`nWlg%bNLR2 zdqbp+t8L)V1T7(;P3Hyda&0}H-*e_FrirPaCK|58l?9w$bcZIL2!D)TB+0y{UW4Lt z4+Mc-?UfaR3n;@SVq2T&o2Q2dyj<`?EuWtM`T%F*@3;02k-l}@iR!s*C|R+ z**@$tRR09vo7l|8q#sifB>OS#)q zJx5NYf?X4g7gu|c2Q1Ov+nZp&x2@N%;-Ssgt+!8kq3@e2#-_qU;i9ixz_q@y@#`*$ zGw{R^@O<#j;P426^IqvfOUyqx?&MjE=#k01gLGYW2HY4{ZH zZ4|#()DTxNPnsUH$9f>++VK`{**{CWXIyq{fk#-zL%{mjn!mrWKhRSToZ*mhvR zWbMOiuE%K6Eo+S8Qb0H!Fa9W1ZPk1NByFo3i}{Y~ zLHJ|*nd*Y~$=T7`i?lP@-4Al2{lVWLP_%Wy(t|DDgV!{! zx+q(U^!xs8E>1%LZcyiK1MZ#N!qxjL$KaRrHM;j=g?KTOlUr}sR4>KPsqecc

60HL8Co?OW=_4lZLTu((XYBIpf?UFU~Y& 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 diff --git a/src/advancedsettings.h b/src/advancedsettings.h index 261371e8f..d5cd0a8e0 100644 --- a/src/advancedsettings.h +++ b/src/advancedsettings.h @@ -8,14 +8,14 @@ #include "preferences.h" enum AdvSettingsCols {PROPERTY, VALUE}; -enum AdvSettingsRows {DISK_CACHE, OUTGOING_PORT_MIN, OUTGOING_PORT_MAX, IGNORE_LIMIT_LAN, COUNT_OVERHEAD, RECHECK_COMPLETED, LIST_REFRESH, RESOLVE_COUNTRIES, RESOLVE_HOSTS }; -#define ROW_COUNT 9 +enum AdvSettingsRows {DISK_CACHE, OUTGOING_PORT_MIN, OUTGOING_PORT_MAX, IGNORE_LIMIT_LAN, COUNT_OVERHEAD, RECHECK_COMPLETED, LIST_REFRESH, RESOLVE_COUNTRIES, RESOLVE_HOSTS, MAX_HALF_OPEN }; +#define ROW_COUNT 10 class AdvancedSettings: public QTableWidget { Q_OBJECT private: - QSpinBox *spin_cache, *outgoing_ports_min, *outgoing_ports_max, *spin_list_refresh; + QSpinBox *spin_cache, *outgoing_ports_min, *outgoing_ports_max, *spin_list_refresh, *spin_maxhalfopen; QCheckBox *cb_ignore_limits_lan, *cb_count_overhead, *cb_recheck_completed, *cb_resolve_countries, *cb_resolve_hosts; public: @@ -45,6 +45,7 @@ public: delete spin_list_refresh; delete cb_resolve_countries; delete cb_resolve_hosts; + delete spin_maxhalfopen; } public slots: @@ -65,6 +66,8 @@ public slots: // Peer resolution Preferences::resolvePeerCountries(cb_resolve_countries->isChecked()); Preferences::resolvePeerHostNames(cb_resolve_hosts->isChecked()); + // Max Half-Open connections + Preferences::setMaxHalfOpenConnections(spin_maxhalfopen->value()); } protected slots: @@ -133,6 +136,13 @@ protected slots: connect(cb_resolve_hosts, SIGNAL(toggled(bool)), this, SLOT(emitSettingsChanged())); cb_resolve_hosts->setChecked(Preferences::resolvePeerHostNames()); setCellWidget(RESOLVE_HOSTS, VALUE, cb_resolve_hosts); + // Max Half Open connections + setItem(MAX_HALF_OPEN, PROPERTY, new QTableWidgetItem(tr("Maximum number of half-open connections [0: Disabled]"))); + spin_maxhalfopen = new QSpinBox(); + connect(spin_maxhalfopen, SIGNAL(valueChanged(int)), this, SLOT(emitSettingsChanged())); + spin_maxhalfopen->setMinimum(0); + spin_maxhalfopen->setMaximum(99999); + spin_maxhalfopen->setValue(Preferences::getMaxHalfOpenConnections()); } void emitSettingsChanged() { diff --git a/src/bittorrent.cpp b/src/bittorrent.cpp index c85818503..ec7bf9529 100644 --- a/src/bittorrent.cpp +++ b/src/bittorrent.cpp @@ -445,6 +445,8 @@ void Bittorrent::configureSession() { // Include overhead in transfer limits sessionSettings.rate_limit_ip_overhead = Preferences::includeOverheadInLimits(); // Bittorrent + // * Max Half-open connections + s->set_max_half_open_connections(Preferences::getMaxHalfOpenConnections()); // * Max connections limit setMaxConnections(Preferences::getMaxConnecs()); // * Max connections per torrent limit diff --git a/src/preferences.h b/src/preferences.h index fb7085671..aa0dc08cd 100644 --- a/src/preferences.h +++ b/src/preferences.h @@ -916,6 +916,19 @@ public: settings.setValue(QString::fromUtf8("Preferences/Connection/ResolvePeerHostNames"), resolve); } + static int getMaxHalfOpenConnections() { + QSettings settings("qBittorrent", "qBittorrent"); + const int val = settings.value(QString::fromUtf8("Preferences/Connection/MaxHalfOpenConnec"), 50).toInt(); + if(val <= 0) return -1; + return val; + } + + static void setMaxHalfOpenConnections(int value) { + QSettings settings("qBittorrent", "qBittorrent"); + if(value <= 0) value = -1; + settings.setValue(QString::fromUtf8("Preferences/Connection/MaxHalfOpenConnec"), value); + } + }; #endif // PREFERENCES_H