Merge pull request #251 from ikatson/no-disable-upload
Disable upload: do not expose in default builds, move under a feature flag.
This commit is contained in:
commit
a954cd8ced
11 changed files with 45 additions and 16 deletions
|
|
@ -37,6 +37,7 @@ tracing-subscriber-utils = ["tracing-subscriber"]
|
||||||
postgres = ["sqlx"]
|
postgres = ["sqlx"]
|
||||||
async-bt = ["async-backtrace"]
|
async-bt = ["async-backtrace"]
|
||||||
watch = ["notify"]
|
watch = ["notify"]
|
||||||
|
disable-upload = []
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
sqlx = { version = "0.8.2", features = [
|
sqlx = { version = "0.8.2", features = [
|
||||||
|
|
|
||||||
|
|
@ -124,7 +124,8 @@ pub struct Session {
|
||||||
|
|
||||||
pub(crate) stats: SessionStats,
|
pub(crate) stats: SessionStats,
|
||||||
|
|
||||||
disable_upload: bool,
|
#[cfg(feature = "disable-upload")]
|
||||||
|
_disable_upload: bool,
|
||||||
|
|
||||||
// This is stored for all tasks to stop when session is dropped.
|
// This is stored for all tasks to stop when session is dropped.
|
||||||
_cancellation_token_drop_guard: DropGuard,
|
_cancellation_token_drop_guard: DropGuard,
|
||||||
|
|
@ -416,6 +417,7 @@ pub struct SessionOptions {
|
||||||
// the root span to use. If not set will be None.
|
// the root span to use. If not set will be None.
|
||||||
pub root_span: Option<Span>,
|
pub root_span: Option<Span>,
|
||||||
|
|
||||||
|
#[cfg(feature = "disable-upload")]
|
||||||
pub disable_upload: bool,
|
pub disable_upload: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -492,6 +494,7 @@ impl Session {
|
||||||
let peer_id = opts.peer_id.unwrap_or_else(generate_peer_id);
|
let peer_id = opts.peer_id.unwrap_or_else(generate_peer_id);
|
||||||
let token = opts.cancellation_token.take().unwrap_or_default();
|
let token = opts.cancellation_token.take().unwrap_or_default();
|
||||||
|
|
||||||
|
#[cfg(feature = "disable-upload")]
|
||||||
if opts.disable_upload {
|
if opts.disable_upload {
|
||||||
warn!("uploading disabled");
|
warn!("uploading disabled");
|
||||||
}
|
}
|
||||||
|
|
@ -629,7 +632,8 @@ impl Session {
|
||||||
concurrent_initialize_semaphore: Arc::new(tokio::sync::Semaphore::new(
|
concurrent_initialize_semaphore: Arc::new(tokio::sync::Semaphore::new(
|
||||||
opts.concurrent_init_limit.unwrap_or(3),
|
opts.concurrent_init_limit.unwrap_or(3),
|
||||||
)),
|
)),
|
||||||
disable_upload: opts.disable_upload,
|
#[cfg(feature = "disable-upload")]
|
||||||
|
_disable_upload: opts.disable_upload,
|
||||||
});
|
});
|
||||||
|
|
||||||
if let Some(mut disk_write_rx) = disk_write_rx {
|
if let Some(mut disk_write_rx) = disk_write_rx {
|
||||||
|
|
@ -1170,7 +1174,8 @@ impl Session {
|
||||||
allow_overwrite: opts.overwrite,
|
allow_overwrite: opts.overwrite,
|
||||||
output_folder,
|
output_folder,
|
||||||
disk_write_queue: self.disk_write_tx.clone(),
|
disk_write_queue: self.disk_write_tx.clone(),
|
||||||
disable_upload: self.disable_upload,
|
#[cfg(feature = "disable-upload")]
|
||||||
|
_disable_upload: self._disable_upload,
|
||||||
},
|
},
|
||||||
connector: self.connector.clone(),
|
connector: self.connector.clone(),
|
||||||
session: Arc::downgrade(self),
|
session: Arc::downgrade(self),
|
||||||
|
|
|
||||||
|
|
@ -525,7 +525,7 @@ impl TorrentStateLive {
|
||||||
let state = self;
|
let state = self;
|
||||||
loop {
|
loop {
|
||||||
let addr = peer_queue_rx.recv().await.context("torrent closed")?;
|
let addr = peer_queue_rx.recv().await.context("torrent closed")?;
|
||||||
if state.torrent.options.disable_upload && state.is_finished_and_no_active_streams() {
|
if state.torrent.options.disable_upload() && state.is_finished_and_no_active_streams() {
|
||||||
debug!("ignoring peer {} as we are finished", addr);
|
debug!("ignoring peer {} as we are finished", addr);
|
||||||
state.peers.mark_peer_not_needed(addr);
|
state.peers.mark_peer_not_needed(addr);
|
||||||
continue;
|
continue;
|
||||||
|
|
@ -939,7 +939,7 @@ impl<'a> PeerConnectionHandler for &'a PeerHandler {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn should_send_bitfield(&self) -> bool {
|
fn should_send_bitfield(&self) -> bool {
|
||||||
if self.state.torrent().options.disable_upload {
|
if self.state.torrent().options.disable_upload() {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -947,7 +947,7 @@ impl<'a> PeerConnectionHandler for &'a PeerHandler {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn should_transmit_have(&self, id: ValidPieceIndex) -> bool {
|
fn should_transmit_have(&self, id: ValidPieceIndex) -> bool {
|
||||||
if self.state.torrent.options.disable_upload {
|
if self.state.torrent.options.disable_upload() {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
let have = self
|
let have = self
|
||||||
|
|
@ -1187,7 +1187,7 @@ impl PeerHandler {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn on_download_request(&self, request: Request) -> anyhow::Result<()> {
|
fn on_download_request(&self, request: Request) -> anyhow::Result<()> {
|
||||||
if self.state.torrent().options.disable_upload {
|
if self.state.torrent().options.disable_upload() {
|
||||||
anyhow::bail!("upload disabled, but peer requested a piece")
|
anyhow::bail!("upload disabled, but peer requested a piece")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -103,7 +103,20 @@ pub(crate) struct ManagedTorrentOptions {
|
||||||
pub allow_overwrite: bool,
|
pub allow_overwrite: bool,
|
||||||
pub output_folder: PathBuf,
|
pub output_folder: PathBuf,
|
||||||
pub disk_write_queue: Option<DiskWorkQueueSender>,
|
pub disk_write_queue: Option<DiskWorkQueueSender>,
|
||||||
pub disable_upload: bool,
|
#[cfg(feature = "disable-upload")]
|
||||||
|
pub _disable_upload: bool,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl ManagedTorrentOptions {
|
||||||
|
#[cfg(feature = "disable-upload")]
|
||||||
|
pub fn disable_upload(&self) -> bool {
|
||||||
|
self._disable_upload
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(not(feature = "disable-upload"))]
|
||||||
|
pub const fn disable_upload(&self) -> bool {
|
||||||
|
false
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Common information about torrent shared among all possible states.
|
/// Common information about torrent shared among all possible states.
|
||||||
|
|
|
||||||
|
|
@ -21,6 +21,7 @@ default-tls = ["librqbit/default-tls"]
|
||||||
rust-tls = ["librqbit/rust-tls"]
|
rust-tls = ["librqbit/rust-tls"]
|
||||||
debug_slow_disk = ["librqbit/storage_middleware"]
|
debug_slow_disk = ["librqbit/storage_middleware"]
|
||||||
postgres = ["librqbit/postgres"]
|
postgres = ["librqbit/postgres"]
|
||||||
|
disable-upload = ["librqbit/disable-upload"]
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
librqbit = { version = "7.1.0-beta.0", path = "../librqbit", default-features = false, features = [
|
librqbit = { version = "7.1.0-beta.0", path = "../librqbit", default-features = false, features = [
|
||||||
|
|
|
||||||
|
|
@ -215,6 +215,7 @@ struct Opts {
|
||||||
///
|
///
|
||||||
/// Might be useful e.g. if rqbit upload consumes all your upload bandwidth and interferes
|
/// Might be useful e.g. if rqbit upload consumes all your upload bandwidth and interferes
|
||||||
/// with your other Internet usage.
|
/// with your other Internet usage.
|
||||||
|
#[cfg(feature = "disable-upload")]
|
||||||
#[arg(long, env = "RQBIT_DISABLE_UPLOAD")]
|
#[arg(long, env = "RQBIT_DISABLE_UPLOAD")]
|
||||||
disable_upload: bool,
|
disable_upload: bool,
|
||||||
}
|
}
|
||||||
|
|
@ -474,6 +475,7 @@ async fn async_main(opts: Opts, cancel: CancellationToken) -> anyhow::Result<()>
|
||||||
root_span: None,
|
root_span: None,
|
||||||
fastresume: false,
|
fastresume: false,
|
||||||
cancellation_token: Some(cancel.clone()),
|
cancellation_token: Some(cancel.clone()),
|
||||||
|
#[cfg(feature = "disable-upload")]
|
||||||
disable_upload: opts.disable_upload,
|
disable_upload: opts.disable_upload,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -38,3 +38,4 @@ tauri-plugin-shell = "2"
|
||||||
# this feature is used for production builds or when `devPath` points to the filesystem
|
# this feature is used for production builds or when `devPath` points to the filesystem
|
||||||
# DO NOT REMOVE!!
|
# DO NOT REMOVE!!
|
||||||
custom-protocol = ["tauri/custom-protocol"]
|
custom-protocol = ["tauri/custom-protocol"]
|
||||||
|
disable-upload = ["librqbit/disable-upload"]
|
||||||
|
|
|
||||||
|
|
@ -144,6 +144,7 @@ pub struct RqbitDesktopConfigUpnp {
|
||||||
pub struct RqbitDesktopConfig {
|
pub struct RqbitDesktopConfig {
|
||||||
pub default_download_location: PathBuf,
|
pub default_download_location: PathBuf,
|
||||||
|
|
||||||
|
#[cfg(feature = "disable-upload")]
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
pub disable_upload: bool,
|
pub disable_upload: bool,
|
||||||
|
|
||||||
|
|
@ -171,6 +172,7 @@ impl Default for RqbitDesktopConfig {
|
||||||
persistence: Default::default(),
|
persistence: Default::default(),
|
||||||
peer_opts: Default::default(),
|
peer_opts: Default::default(),
|
||||||
http_api: Default::default(),
|
http_api: Default::default(),
|
||||||
|
#[cfg(feature = "disable-upload")]
|
||||||
disable_upload: false,
|
disable_upload: false,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -105,6 +105,7 @@ async fn api_from_config(
|
||||||
},
|
},
|
||||||
enable_upnp_port_forwarding: !config.upnp.disable_tcp_port_forward,
|
enable_upnp_port_forwarding: !config.upnp.disable_tcp_port_forward,
|
||||||
fastresume: config.persistence.fastresume,
|
fastresume: config.persistence.fastresume,
|
||||||
|
#[cfg(feature = "disable-upload")]
|
||||||
disable_upload: config.disable_upload,
|
disable_upload: config.disable_upload,
|
||||||
..Default::default()
|
..Default::default()
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -41,7 +41,7 @@ interface RqbitDesktopConfigUpnp {
|
||||||
|
|
||||||
export interface RqbitDesktopConfig {
|
export interface RqbitDesktopConfig {
|
||||||
default_download_location: PathLike;
|
default_download_location: PathLike;
|
||||||
disable_upload: boolean;
|
disable_upload?: boolean;
|
||||||
dht: RqbitDesktopConfigDht;
|
dht: RqbitDesktopConfigDht;
|
||||||
tcp_listen: RqbitDesktopConfigTcpListen;
|
tcp_listen: RqbitDesktopConfigTcpListen;
|
||||||
upnp: RqbitDesktopConfigUpnp;
|
upnp: RqbitDesktopConfigUpnp;
|
||||||
|
|
|
||||||
|
|
@ -211,15 +211,18 @@ export const ConfigModal: React.FC<{
|
||||||
help="Where to download torrents by default. You can override this per torrent."
|
help="Where to download torrents by default. You can override this per torrent."
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<FormCheck
|
{defaultConfig.disable_upload !== undefined &&
|
||||||
label="Disable upload"
|
config.disable_upload !== undefined && (
|
||||||
name="disable_upload"
|
<FormCheck
|
||||||
checked={config.disable_upload}
|
label="Disable upload"
|
||||||
onChange={handleToggleChange}
|
name="disable_upload"
|
||||||
help="Disable uploading entirely. If this is set, rqbit won't share piece availability and will disconnect on download request.
|
checked={config.disable_upload}
|
||||||
|
onChange={handleToggleChange}
|
||||||
|
help="Disable uploading entirely. If this is set, rqbit won't share piece availability and will disconnect on download request.
|
||||||
|
|
||||||
Might be useful e.g. if rqbit upload consumes all your upload bandwidth and interferes with your other Internet usage."
|
Might be useful e.g. if rqbit upload consumes all your upload bandwidth and interferes with your other Internet usage."
|
||||||
/>
|
/>
|
||||||
|
)}
|
||||||
</Tab>
|
</Tab>
|
||||||
|
|
||||||
<Tab name="DHT" currentTab={tab}>
|
<Tab name="DHT" currentTab={tab}>
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue